8fddlmZddlZddlZddlZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlmZmZddlmZmZmZmZmZddlmZddlmZmZmZdd l m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*dd l+m,Z,m-Z-e j.e/Z0da1e2ed rd Z3n-ej45d rdZ3nej4dkrdZ3ndZ3ej6dZ7e7sdej8ddzZ7de7zZ9e3e7zZ:e*;dd;ddZ<ej6dZ=e=rEe=5dr0e=;dd>ddZ=ndZ?e?Z=[?e j@de jAe jBzZCe j@de jAe jBzZDe j@dZEe j@dZFd ZGd!ZHe jId"krd#ZJnd$ZJej8dd%krddlKZKn dZKddlLZMddlNZMd&ZOd'ZPGd(d)eQZReRZSGd*d+eQZTd,ZUd-ZVeVZW[Vd/d.ZXdS)0)unicode_literalsN)message_from_file) __version__DistlibException) sysconfigZipFilefsdecode text_typefilter)InstalledDistribution)MetadataWHEEL_METADATA_FILENAMELEGACY_METADATA_FILENAME) FileOperator convert_path CSVReader CSVWriterCachecached_propertyget_cache_base read_exportstempdir get_platform)NormalizedVersionUnsupportedVersionErrorpypy_version_infoppjavajycliipcppy_version_nodotz%s%spy-_.SOABIzcpython-cdtg}tjdr|dtdkrt jdd}|dkrvtjd}|d}|r|d|d krAtjd }|d ks|%t jd kr|d d|S)Nr#Py_DEBUGdr%) WITH_PYMALLOCTm)r.r.Py_UNICODE_SIZEiu) VER_SUFFIXrget_config_varappend IMP_PREFIXsys version_info maxunicodejoin)partsviwpmuss y/builddir/build/BUILD/imunify360-venv-2.3.5/opt/imunify360/venv/lib/python3.11/site-packages/pip/_vendor/distlib/wheel.py _derive_abirC;sz"  #J / /  LL      !"1"%BF{{.??;C&LL%%%;;"12CDDBQww2:#.H2L2L S)))wwu~~zz (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))? -(?P\w+\d+(\.\w+\d+)*) -(?P\w+) -(?P\w+(\.\w+)*) \.whl$ z7 (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))?$ s \s*#![^\r\n]*s^(\s*#!("[^"]+"|\S+))\s+(.*)$s#!pythons #!pythonw/c|SNos rBrKhsrDcB|tjdS)NrE)replaceosseprIs rBrKrKjs263//rDr.cltrdtjDStjjS)Ncg|] }|d S)rrH.0ss rB z!_get_suffixes..vs111!111rD)imp get_suffixes importlib machineryEXTENSION_SUFFIXESrHrDrB _get_suffixesr[ts3 611c.001111"55rDctrtj||Stj||}tj|}|t j|<|j ||SrG) rV load_dynamicrXutilspec_from_file_locationmodule_from_specr:modulesloader exec_module)namepathspecmodules rB _load_dynamicrh{sp d+++~55dDAA0066" D ''' rDc.eZdZdZdZdZddZdZdS)Mounterc"i|_i|_dSrG) impure_wheelslibsselfs rB__init__zMounter.__init__s rDcN||j|<|j|dSrG)rlrmupdate)ropathname extensionss rBaddz Mounter.adds+'18$ $$$$$rDcl|j|}|D]\}}||jvr|j|=dSrG)rlpoprm)rorsrtkvs rBremovezMounter.removesJ'++H55  ! !DAqDI~~IaL ! !rDNc"||jvr|}nd}|SrG)rm)rofullnamereresults rB find_modulezMounter.find_modules ty FFF rDc.|tjvrtj|}ns||jvrtd|zt ||j|}||_|dd}t|dkr |d|_|S)Nzunable to find extension for %sr)rr) r:rarm ImportErrorrh __loader__rsplitlen __package__)ror|r}r>s rB load_modulezMounter.load_modules s{ " "[*FFty((!"Ch"NOOO"8TYx-@AAF $F OOC++E5zzA~~%*1X" rDrG)__name__ __module__ __qualname__rprurzr~rrHrDrBrjrjsd%%%!!!      rDrjceZdZdZdZdZddZedZedZ ed Z e d Z d Z e d Zd ZddZdZdZdZddZdZdZdZdZdZdZd dZdZdZddZdS)!Wheelz@ Class to build and install from Wheel files (PEP 427). )rrsha256NFc||_||_d|_tg|_dg|_dg|_tj|_ |d|_ d|_ |j |_ dSt|}|r^|d}|d|_ |dd d |_ |d |_|j |_ dStj|\}}t(|}|st+d |z|r$tj||_ ||_ |d}|d|_ |d|_ |d |_|d d|_|dd|_|dd|_dS)zB Initialise an instance using a (valid) filename. r5noneanyNdummyz0.1nmvnr(r'bnzInvalid name or filename: %rr&r)biar)sign should_verifybuildverPYVERpyverabiarchrNgetcwddirnamerdversionfilename _filenameNAME_VERSION_REmatch groupdictrMresplit FILENAME_RErabspath)rorrverifyr1infors rBrpzWheel.__init__s # W 8G y{{  DI DL!]DNNN%%h//A 2{{2 J #Dz11#s;; $T  !%$&GMM($;$;!%%h//F*,:>"JKKK K+ K K K K K K K K K K K K K K K0 sf%*E*C?:C3 C?$E' C?3C7 7C?:C7 ;C?>E? D  E D  *EE Ec(|jd|j}d|z}tj|d}||5}t jd|}t|}dddn #1swxYwYt|S)Nr'rWHEELr) rdrrr=rrrrdict)rorrrrrrmessages rBrzWheel.get_wheel_metadatas"iii6!H,%N8W== WW& ' ' ,2*!'**2..B'++G , , , , , , , , , , , , , , ,G}}s-A::A>A>ctj|j|j}t |d5}||}dddn #1swxYwY|S)Nr)rNrer=rrr r)rorsrr}s rBrz Wheel.info&s7<< dm<< Xs # # 1r,,R00F 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 sAA!$A!ct|}|r|}|d|||d}}d|vrt}nt }t |}|rd|dz}nd}||z}||z}n\|d}|d} |dks|| krd} n|||dzd krd } nd} t | z|z}|S) Nspythonw rD  rr%s ) SHEBANG_RErendlowerSHEBANG_PYTHONWSHEBANG_PYTHONSHEBANG_DETAIL_REgroupsfind) rodatar1rshebangdata_after_shebangshebang_pythonargscrlfterms rBprocess_shebangzWheel.process_shebang-s#   T " "  0%%''C*.tt*d344j'GW]]__,,!0!/!''00A ahhjjn,$t+G//DD5!!B5!!BAvvb26 ?g--"DD D!D(4/D rDc8||j} tt|}n #t$rt d|zwxYw||}t j|d d}||fS)NzUnsupported hash algorithm: %r=ascii) hash_kindgetattrhashlibAttributeErrorrdigestbase64urlsafe_b64encoderstripdecode)rorrhasherr}s rBget_hashzWheel.get_hashKs  I .Wi00FF . . ."#C#,$-.. . .$$&&)&1188>>EEgNN&  s!>ct|}||ddft|5}|D]}|| ddddS#1swxYwYdS)Nr5)listr8rwriterow)rorecords record_patharchive_record_pathwriterrows rB write_recordzWheel.write_recordWsw--+R4555 { # # %v % %$$$$ % % % % % % % % % % % % % % % % % % %sA  A$'A$c0g}|\}}|D]\}}t|d5} | } dddn #1swxYwYd|| z} tj|} ||| | ftj|d}ttj|d}| ||||||fdS)Nrbz%s=%sRECORD) rreadrrNregetsizer8r=to_posixr) rorlibdir archive_pathsrdistinforappfrrsizes rB write_recordszWheel.write_records^s>!(" / /EBa !vvxx               t}}T222F7??1%%D NNB- . . . . GLL8 , , bgll8X66 7 7 '1b)))b!W%%%%%sAA A ct|dtj5}|D]7\}}td|||||8 ddddS#1swxYwYdS)NwzWrote %s to %s in wheel)r zipfile ZIP_DEFLATEDloggerdebugwrite)rorsrrrrs rB build_zipzWheel.build_zipns XsG$8 9 9 R&  A 62>>>B                   s;A%%A),A)c  |i}ttfddd}|dkrd}tg}tg}tg}nd}t g}dg}d g}|d ||_|d ||_|d ||_ |} |j d |j } d| z} d| z} g} dD]}|vr|}tj |r_tj|D]I\}}}|D]>}t!tj ||}tj ||}t'tj | ||}| ||f|dkr|dst-|d5}|}dddn #1swxYwY||}t-|d5}||dddn #1swxYwY@K| }d}tj|D]\}}}||krjt5|D]N\}}t!|}|dr%tj ||}||=nO|s Jd|D]}t!|dr%tj ||}t'tj ||}| ||ftj|}|D]w}|dvrqt!tj ||}t'tj | |}| ||fxd|p|jzdt:zd|zg}|jD]$\}}}|d|d |d |%tj |d}t-|d5}|d|dddn #1swxYwYt'tj | d}| ||fd } t?| | !} | || f| | tj |j!|j"}!|#|!| |!S)"z Build a wheel from files in specified paths, and use any specified tags when determining the name of the wheel. Nc |vSrGrH)rJpathss rBrKzWheel.build..|s qEzrD)purelibplatlibrrfalsetruerrrrrr'%s.datar)rheadersscriptsr.exerwb .dist-infoz(.dist-info directory expected, not found)z.pycz.pyo)r INSTALLERSHAREDrzWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %szTag: rr cV|d}|d}d|vr|dz }||fS)NrrEri')count)trns rBsorterzWheel.build..sorters71B Ar!!U r7NrD)key)$rr IMPVERABIARCHrgetrrrrdrrNreisdirwalkr r=relpathrr8endswithrrrr  enumeratelistdir wheel_versionrrsortedrrrr )"rorrr.libkeyis_pure default_pyver default_abi default_archrrdata_dirrrr#rerootdirsfilesrrrprrrridnwheel_metadatarrrr"rss" ` rBbuildz Wheel.buildts' <Df11113IJJKKAN Y  G#HM%K 6LLG"GM!(K!7LXXg}55 88E;//HHV\22 v"iii6x'!H, 2 . .C%:Dw}}T"" .)+ . .%D$# . .$RW\\$%;%;<<W__Q55%bgll8S"&E&EFF%,,b!W555)++AJJv4F4F+!%a0!'(vvxx000000000000000#'#7#7#=#=D!%a.! ! ............... .!# . . D$t||'t__EAr!"B{{<00#%7<<b#9#9 G KK!KKKx . .B<<(()9::GLLr**bgooa6677$$b!W----  . 8$$ . .BCCCRW\\(B7788bgll8R8899$$b!W--- #m&It7I J #k 1 !G +  !%  H H E3  ! ! !UUUCCC"F G G G G GLL7 + + !S\\ /Q GGDIIn-- . . . / / / / / / / / / / / / / / / bgll8W55 6 6b!W%%%    }&999  Hh/GGG7<< dm<< x///s6"H H H 3I I I )R<<SSc,|dS)zl Determine whether an archive entry should be skipped when verifying or installing. )rEz /RECORD.jws)r+)roarcnames rB skip_entryzWheel.skip_entrys 4555rDc |j}|d}|dd}|dd}tj|j|j}|jd|j} d| z} d| z} tj| t} tj| d} tj| d }tj d }t|d 5}|| 5}||}t|}d d d n #1swxYwY|d dd}t#d|D}||jkr|r||j||ddkr |d}n|d}i}||5}t'|5}|D]}|d}|||< d d d n #1swxYwYd d d n #1swxYwYtj| d}tj| d}tj| dd}t)|}d|_t,j } g}!t1j}"|"|_d |_ |D]}#|#j}$t;|$t<r|$}%n|$d }%| |%rM||%}|dr0tC|#j"|dkrtGd|%z|dr|ddd\}&}'||$5}|$}(d d d n #1swxYwY|%|(|&\})}*|*|'krtGd|$z|r4|%&||frtN(d|%\|%&|o|%)d  }+|%&|rN|%d!d\})},}-tj||,tU|-}.n5|%| |fvrtj|tU|%}.|+su||$5}|+||.d d d n #1swxYwYtjd"kr tj,|.|#j-d#z d$z|!.|.|sv|drnt|.d%5}|$}(|%|(|&\})}/|/|*krtGd&|.z d d d n #1swxYwY| rq|.)d'r\ |/|.|(}0|!.|0h#t`$r tN1d)d*YwxYwtj2tU|$}1tj|"|1}2||$5}|+||2d d d n #1swxYwYtj|.\}3}1|3|_|3|1}4|4|4|!5|4|rtN(d+d }5n[d }6|j6d }|d,krtj| d-}7 ||75}to|}8d d d n #1swxYwYi}6d.D]t}9d/|9z}:|:|8vriix|6d0|9z<};|8|:8D]D}<||6d9i}?|>s|?r|dd}@tj>|@std:|@|_|>@D]6\}:}<|:d;|<}A|3|A}4|4|47|?rPd||5tjF|"cd d d S#t`$r0tNGd?|HwxYw#tjF|"wxYw#1swxYwYd S)@a~ Install a wheel to the specified paths. If kwarg ``warner`` is specified, it should be a callable, which will be called with two tuples indicating the wheel version of this software and the wheel version in the file, if there is a discrepancy in the versions. This can be used to issue any warnings to raise any exceptions. If kwarg ``lib_only`` is True, only the purelib/platlib files are installed, and the headers, scripts, data and dist-info metadata are not written. If kwarg ``bytecode_hashed_invalidation`` is True, written bytecode will try to use file-hash based invalidation (PEP-552) on supported interpreter versions (CPython 2.7+). The return value is a :class:`InstalledDistribution` instance unless ``options.lib_only`` is True, in which case the return value is ``None``. warnerlib_onlyFbytecode_hashed_invalidationr'rrrrrrNz Wheel-Versionr)rc,g|]}t|SrHintrSr:s rBrUz!Wheel.install.. s!5!5!5Q#a&&!5!5!5rDzRoot-Is-Purelibrrrstreamrr5r)dry_runTr%size mismatch for %s=digest mismatch for %szlib_only: skipping %srrEposixirzdigest mismatch on write for %sz.py)hashed_invalidationzByte-compilation failed)exc_infozlib_only: returning Nonez1.0zentry_points.txt)consoleguiz %s_scriptszwrap_%s:z [%s],zAUnable to read legacy script metadata, so cannot generate scriptsrtzpython.commandsz8Unable to read JSON metadata, so cannot generate scripts wrap_consolewrap_guizValid script path not specifiedz = rTlibprefixzinstallation failed.)IrKr'rNrer=rrrdrrrrrr rrrtupler.rrrecordr:dont_write_bytecodetempfilemkdtemp source_dir target_dirinfolist isinstancer rr@str file_sizerrr startswithr r r+r copy_streamchmod external_attrr8 byte_compile Exceptionwarningbasenamemakeset_executable_modeextendrrvaluesrZsuffixflagsjsonloadr(ritemsr rwrite_shared_locationswrite_installed_filesshutilrmtree exceptionrollback)CrormakerkwargsrKrBrCbc_hashed_invalidationrsrr5r metadata_namewheel_metadata_name record_namerrbwfrrwv file_versionrrrreaderrrdata_pfxinfo_pfx script_pfxfileopbcoutfilesworkdirzinfor? u_arcnamekindvaluerr(r is_scriptwherer9outfile newdigestpycrworknamer; filenamesdistcommandsepepdatar#rxr-ryrTconsole_scripts gui_scripts script_dirscriptoptionssC rBinstallz Wheel.installs"-H%%::j%00!',J,1"3"37<< dm<<"iii6x'!H,!x1IJJ 'nXw??nXx88 "7++ Xs # #L 'r,-- 0WS\\+B// 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)//Q77B !5!5"!5!5!566L 2222t)<888()V33y)y)G%% )b))))V%))F%( )))))))))))))))) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) !~h33H ~h33H")R@@J"'222F FM,,BH&((G 'E #E c '[[]]M3M3E#nG!'955<$+ $+NN7$;$; y11! !),C1vA#eo"6"6#a&"@"@.046?0@AAA1vC&)!fll3&:&: eWWW---#%7799D---------------$(MM$$=$= 6!U??"248:A4B#C#CC !I$8$8(H9M$N$N! %'> 5""$',,uU|\"=M=M"N"N%)'"2"25"9"9 > >&,&9&9$+8N':'P'P!) 4 4 4 4#,>>>!'/H8<!/!>!>!>!>!>>  W--l7.C.CDD#%7<<#<#<WWW--="..r8<<<==============="$w!7!7B+-($)JJrNN 229===  2222L8LL!;<<<DD $H#'9_#=L#u,,&^H6HII6!#;)5c):):;;;;;;;;;;;;;;;')H'966$03$6#$;;DF$FHY_$=-3AY-=-=-?-?%6%678xxx,J+,7)M,-388AG;L;L1L,LA45!& 6 )666"NN,5666666 F!#!7!7O3%,WS\\+/9R==+<+<\+J+J#+!O/7||&02='>'>!>/9E,(7(=(=(?(?FF167aa);,1JJv,>,> & : :9 E E E E*J+0$-,7,=,=,?,?!J!JDAq:;!!QQ-?F05 670K0KI$*$>$>y$I$I$I$I VX66A033D!KKEi(i(#)E%L33E7CCA+ ***..xx/6888  g&&&YL 'L 'L 'L 'L 'L 'L 'L 'N     !7888!!!   g&&&&YL 'L 'L 'L 'L 'L 'L 'L 'L 'L 's6l7 D3' l73D7 7l7:D7 ;B l7H G6* H 6G: :H =G: >H  l7 H l7H B l7 Ck!=N k!N" "k!%N" &Ek!+T k!T k!T A"k!8AW ? k! W k!W k!.,Xk!&Yk!YA&k!,[ k![ k![ B7k!a$_4 a_ a_ Al;ct^tjt t ddt jddz}t|atS)Nz dylib-cachez%s.%sr%) cacherNrer=rrdr:r;r)robases rB_get_dylib_cachezWheel._get_dylib_cachesT =7<< 0 0#m2D2D '#*:2A2*> >@@D$KKE rDc tj|j|j}|jd|j}d|z}tj|d}tj d}g}t|d5} | |5}||} tj | } |} | |} tj| j| } tj| stj| | D]\}}tj| t)|}tj|sd}nftj|j}t0j|}||}t1j|j}||k}|r||| |||f dddn #1swxYwYn#t<$rYnwxYwdddn #1swxYwY|S)Nr'r EXTENSIONSrrT)rNrer=rrrdrrrrr rrtrur prefix_to_dirrr(makedirsrvrrstatst_mtimedatetime fromtimestampgetinfo date_timeextractr8r)rorsrrr?rr}rrrrtrrZ cache_baserdr*destr file_timer wheel_times rB_get_extensionszWheel._get_extensionss7<< dm<<"iii6!H,.<88"7++ Xs # # r WWW%%4 B!%2J 1133E"00::F!#ej&!A!AJ7==440 J///)3)9)9);); 4 4 g!w||J W8M8MNN!w~~d33=&*GG(* (>I(0(9(G(G ))+)+I#%::g#6#6D)1):DN)KJ&09&I FH?3 I ?I I I I  I' II'II''I+.I+c t|S)zM Determine if a wheel is compatible with the running system. ) is_compatiblerns rBrzWheel.is_compatiblesT"""rDcdS)zP Determine if a wheel is asserted as mountable by its metadata. TrHrns rB is_mountablezWheel.is_mountables trDctjtj|j|j}|sd|z}t||sd|z}t||tjvrt d|dS|r tj |n tj d||}|rTttjvr$tj tt||dSdS)Nz)Wheel %s not compatible with this Python.z$Wheel %s is marked as not mountable.z%s already in pathr)rNrerr=rrrrrr:r r r8insertr_hook meta_pathru)ror8rsmsgrts rBmountz Wheel.mount!s>7??27<< dm#L#LMM!!## (=HC"3'' '  "" (88CC"3'' ' sx   LL-x 8 8 8 8 8 -))))8,,,--//J 0 --M((/// (J///// 0 0rDctjtj|j|j}|t jvrtd|dSt j ||tj vrt |tj s9tt j vr(t j tdSdSdS)Nz%s not in path) rNrerr=rrr:r r rzrrlr)rorss rBunmountz Wheel.unmount6s7??27<< dm#L#LMM 38 # # LL)8 4 4 4 4 4 HOOH % % %5... X&&&& 0CM))M((///// 0 0))rDctj|j|j}|jd|j}d|z}tj|d}tj|d}tj d}t|d5}| |5}||} t| dddn #1swxYwYi} | |5} t| 5} | D]} | d}| | |< dddn #1swxYwYdddn #1swxYwY|D]Q}|j}t|t r|}n|d}|d }d |vrt'd |z||rx| |} | d r0t+|j| d krt'd |z| dr| ddd\}}| |5} | }dddn #1swxYwY|||\}}||krt'd|zS ddddS#1swxYwYdS)Nr'rrrrrrIrrE..invalid entry in wheel: %rr%rLrrMrN)rNrer=rrrdrrrrr rrrrbrcr rrrr@rdrerr)rorsrrrrrrrrrrrrrrr?rrrrr(rs rBrz Wheel.verifyBs!7<< dm<<"iii6!H,(nXw??nXx88 "7++ Xs # #* ?r,-- &WS\\!"%%% & & & & & & & & & & & & & & &G%% )b))))V%))F%( )))))))))))))))) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )  ? ?.gy118 'II 'w 7 7IOOC((199*,79B,CDDD??9--i(q6=c%/22c!f<<*,02;,<===q6?"%a&,,sA"6"6KD%)))R!wwyy))))))))))))))) $ dD 9 9IAv.046=0>???5 ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?sJ6%C  J6 C J6C J6.D6?D D6D# #D6&D# 'D6* J66D: :J6=D: >D J6 I* J6*I. .J61I. 26J66J:=J:c Zd}d}tj|j|j}|jd|j}d|z}tj|d} t5} t|d5} i} | D]} | j}t|tr|}n| d}|| kr=d|vrtd |z| | | tj| t!|}|| |< d d d n #1swxYwY|| |\}}|| fi|}|r3|| |\}}|r||kr ||||/t#jd d | \}}tj|nVtj|std|ztj||j}t+| }tj| |}||f}||| |||||t3j||d d d n #1swxYwY|S)a Update the contents of a wheel in a generic way. The modifier should be a callable which expects a dictionary argument: its keys are archive-entry paths, and its values are absolute filesystem paths where the contents the corresponding archive entries can be found. The modifier is free to change the contents of the files pointed to, add new entries and remove entries, before returning. This method will extract the entire contents of the wheel to a temporary location, call the modifier, and then use the passed (and possibly updated) dictionary to write a new wheel. If ``dest_dir`` is specified, the new wheel is written there -- otherwise, the original wheel is overwritten. The modifier should return True if it updated the wheel, else False. This method returns the same value the modifier returns. c~dx}}|dt}||vrd|z}||vr||}t|j}||fS)NrEz %s/PKG-INFOre)rrr)path_maprrrer#s rB get_versionz!Wheel.update..get_versionsb! !Gd%XX'?'?@C(""#h.h}"---5D= rDc`d} t||d}|dkrd|z}nfd||dzddD}|dxxdz cc<|d|ddd |D}n+#t$rt d |YnwxYw|rft| }||_| t}| || t d ||dSdS)Nr'rz%s+1c,g|]}t|SrHrFrRs rBrUz8Wheel.update..update_version..sHHHSVVHHHrDrr)r+c34K|]}t|VdSrG)rdrHs rB z7Wheel.update..update_version..s9?/?/#$A?/?/?/?/?/?/rDz0Cannot update non-compliant (PEP-440) version %rr)relegacyzVersion updated from %r to %r) rrrr=rr r rrr+rr )rreupdatedr:r>mdrs rBupdate_versionz$Wheel.update..update_versionsG +!'***LL%%q55$w.GGHHWQUVV_-B-B3-G-GHHHE"IIINIII)0!chh?/?/(-?/?/?/7/7/7/0G* + + + !")+++++ + P4((($ '?@@d6222 #@#@#@KBHRLLLL7==229./D/708999 gll8T]CCG $X^^%5%5 6 6 7<<::)""4-@@@w 666#OGX666[- 7- 7- 7- 7- 7- 7- 7- 7- 7- 7- 7- 7- 7- 7- 7\s8*J ;B3D;/ J ;D? ?J D? EJ  J$'J$)NFFrG)NN)F)rrr__doc__r.rrppropertyrrrrrrrrrrrr r=r@rrrrrrrrrrrHrDrBrrsMI'2'2'2'2R44X4 $$X$++X+ _>_ < ! ! ! !%%%&&&    ssssj666 n'n'n'`!!!F###  0000* 0 0 06?6?6?pddddddrDrcddl}|}g}|ddkre|ddD]:}||rt |nd;t |}|S)Nrglibcrr))platformlibc_verrr8isdigitrGr[)rverr}rTs rB_get_glibc_versionrsOOO     C F 1vQc"" 8 8A MMAIIKK6#a&&&Q 7 7 7 7v MrDc  tg}td}ttjddz ddD]9}|d|t |g:g}tD]F}|dr/|| dddG| tdkr| dt|dg}tg}tjd krtjd t}|r|\}}}} t%|}| g} | d vr| d | d vr| d| dvr| d| dvr| d| dvr| d|dkr=| D]/} |d|d|d| } | tkr|| 0|dz}|dk=|D]} |D]} |dt&|df| | f| dkrhtjdrH| dd} t+}t-|dkr|dkr;|dt&|df| d| zf|dkr;|dt&|df| d| zf|dkr;|dt&|df| d| zf|dt&|df| d|dd|dd| ft/|D]u\}}|dt&|fddf|dkr8|dt&|dfddfvt/|D]k\}}|dd |fddf|dkr3|dd |dfddflt1|S)!zG Return (pyver, abi, arch) tuples compatible with this Python. rrrr5z.abir)r%rdarwinz(\w+)_(\d+)_(\d+)_(\w+)$)i386ppcfat)rrx86_64fat3)ppc64rfat64)rrintel)rrrrr universalr(linuxlinux_)r%z manylinux1_%s)r% zmanylinux2010_%s)r%zmanylinux2014_%s manylinux_rr&)r6ranger:r;r8r=rdr[rfrsortr%rr&rrerrrGr9rMrrr,set)versionsmajorminorabisrrr}archesr1rdrmatchesrrTrr>r:rs rBcompatible_tagsrs1|H qMEs'*Q.B7766E 3445555 D//11   V $ $ 1 KK S!,,Q/ 0 0 0IIKKK f}} AsKK FVF |x H0$ 7 7  '(xxzz $D%JJEfG&&u%%%000v&&&***w''')))w'''BBB{+++1**$))E)-uuueeeUUCADyy a(((  1**MM M MD MM277J #<==sDI J J Jf}}!8!8!A!A}||Hb11*,,u::?? rww HQK/H'I'I3'6'='?@@@'' rww HQK/H'I'I3'9D'@'BCCC'' rww HQK/H'I'I3'9D'@'BCCCMM*hqk!:;;SS16q5888TTJLMMM! M* ))NN 7 rww G455vuEFFF 66 MM277J #;<rs(''''' ######   ++++++++CCCCCCCCCCCCCC++++++QQQQQQQQQQ!!!!!!!!!!!!!!!!!!!!!!!!@???????  8 $ $  73#$$JJ\V$$JJ\UJJJ %Y %&8 9 9 /#*2A2..J z j |~~c3''//S99iw''3>>* % % ++j$ ' ' - -c 2 21 5CC$ +--Cbj]RZ ! ! "*]RZ !!RZ) * * BJ@AA6S=={HH//HAJJJJ C666   """""f"""J  o o o o o Fo o o dMMM`"/##      rD