
    !2i#^                       d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZmZ d dlmZmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ d dlmZmZm Z m!Z! d dl"m#Z#m$Z$ d dl%m&Z&  ee'          Z(d*dZ)d+dZ*e*d,d            Z+d-d Z,d-d!Z-d.d#Z. G d$ d%          Z/ G d& d'          Z0 G d( d)          Z1dS )/    )annotationsN)	GeneratorIterable)cache_from_source)AnyCallable)LegacyDistutilsInstallUninstallMissingRecord)get_bin_prefixget_bin_user)BaseDistribution)WINDOWS)egg_link_path_from_location)	getLogger
indent_log)asknormalize_pathrenamesrmtree)AdjacentTempDirectoryTempDirectory)running_under_virtualenvbin_dirstrscript_nameis_guiboolreturnGenerator[str, None, None]c              #     K   t           j                            | |          }|V  t          sdS | dV  | dV  |r	| dV  dS | dV  dS )zCreate the fully qualified name of the files created by
    {console,gui}_scripts for the given ``dist``.
    Returns the list of file names
    Nz.exez.exe.manifestz-script.pywz
-script.py)ospathjoinr   )r   r   r   exe_names       ^/var/www/html/pixcura-vrs/venv/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py_script_namesr&      s       w||G[11H
NNN 



$
$
$$$$ &&&&&&&&&%%%%%%%%    fn)Callable[..., Generator[Any, None, None]]c                H     t          j                   d fd            }|S )Nargsr   kwr   Generator[Any, None, None]c               ?  x   K   t                      } | i |D ]}||vr|                    |           |V   d S N)setadd)r+   r,   seenitemr(   s       r%   uniquez_unique.<locals>.unique.   sY      BOOO 	 	D4


	 	r'   )r+   r   r,   r   r   r-   )	functoolswraps)r(   r4   s   ` r%   _uniquer7   +   s?     _R      Mr'   distr   c              #    K   | j         }|
J d            |                                 }|t          |           |D ]}t          j                            ||          }|V  |                    d          rzt          j                            |          \  }}|dd         }t          j                            ||dz             }|V  t          j                            ||dz             }|V  dS )a  
    Yield all the uninstallation paths for dist based on RECORD-without-.py[co]

    Yield paths to all the files in RECORD. For each .py file in RECORD, add
    the .pyc and .pyo in the same directory.

    UninstallPathSet.add() takes care of the __pycache__ .py[co].

    If RECORD is not found, raises an error,
    with possible information from the INSTALLER file.

    https://packaging.python.org/specifications/recording-installed-packages/
    Nznot installeddistribution.py.pyc.pyo)locationiter_declared_entriesr
   r!   r"   r#   endswithsplit)r8   r@   entriesentryr"   dnr(   bases           r%   uninstallation_pathsrH   9   s       }H((**G$$7777 	 	w||He,,


== 	W]]4((FBcrc7D7<<D6M22DJJJ7<<D6M22DJJJ	 	r'   pathsIterable[str]set[str]c                    t           j        j        t                      }t	          | t
                    D ]5t          fd|D                       }|s|                               6|S )zCompact a path set to contain the minimal number of paths
    necessary to contain all paths in the set. If /a/path/ and
    /a/path/to/a/file.txt are both in the set, leave only the
    shorter path.keyc              3     K   | ]k}                     |                    d                     o>t          |                    d                                                            k    V  ldS )*N)
startswithrstriplen).0	shortpathr"   seps     r%   	<genexpr>zcompact.<locals>.<genexpr>d   s       
 
  OOI,,S1122 DS))#..55c::;;<C
 
 
 
 
 
r'   )r!   r"   rV   r0   sortedrS   anyr1   )rI   short_pathsshould_skipr"   rV   s      @@r%   compactr\   [   s     '+CEEKu#&&& " " 
 
 
 
 
 )
 
 
 
 

  	"OOD!!!r'   c                  	
 d | D             }t          |          }t          d |                                D             t                    }t                      }dd
|D ]׊t	          fd|D                       rt                      }t                      }t          j                  D ]L\  	}}|                    	
fd	|D                        |                    	
fd
|D                        M||z
  s7|                    |           |	                    t
          j
        z              t          t          |j        |                    |z  S )zReturns a set containing the paths that need to be renamed.

    This set may include directories when the original sequence of paths
    included every file on disk.
    c                N    i | ]"}t           j                            |          |#S  )r!   r"   normcaserT   ps     r%   
<dictcomp>z'compress_for_rename.<locals>.<dictcomp>t   s*    6661  ##Q666r'   c                X    h | ]'}t           j                            |          d          (S )r   )r!   r"   rC   ra   s     r%   	<setcomp>z&compress_for_rename.<locals>.<setcomp>v   s+    GGGa((+GGGr'   rM   ar   r   c                 b    t           j                            t          j        j        |            S r/   )r!   r"   r`   r#   )rf   s    r%   	norm_joinz&compress_for_rename.<locals>.norm_joiny   s!    wa 0111r'   c              3  |   K   | ]6}t           j                                                          |          V  7d S r/   )r!   r"   r`   rQ   )rT   wroots     r%   rW   z&compress_for_rename.<locals>.<genexpr>}   sA      GGrw%%0033GGGGGGr'   c              3  2   K   | ]} |          V  d S r/   r_   )rT   ddirnamerh   rk   s     r%   rW   z&compress_for_rename.<locals>.<genexpr>   s1      LLqyyw::LLLLLLr'   c              3  2   K   | ]} |          V  d S r/   r_   )rT   frn   rh   rk   s     r%   rW   z&compress_for_rename.<locals>.<genexpr>   s1      HHQYYtWa88HHHHHHr'   )rf   r   r   r   )r0   rX   valuesrS   rY   r!   walkupdatedifference_updater1   rV   map__getitem__)rI   case_map	remaining	unchecked	wildcards	all_filesall_subdirssubdirsfilesrn   rh   rk   s            @@@r%   compress_for_renamer   n   s    76666HHIGGX__5F5FGGGSQQQI%%I2 2 2 2  ) )GGGGYGGGGG 	!ee	 #')wt}} 	I 	I#GWeLLLLLLGLLLLLLHHHHHH%HHHHHHH I% 	)''	222MM$-(((s8'3344y@@r'   tuple[set[str], set[str]]c                f   t          |           }t                      }t                      }t                      }|D ]x}|                    d          r|                    d          sd|v r2|                    t          j                            |                     |                    |           yt          t          t          j        j        |                    }t          |          }|D ]}t          j	        |          D ]\  }}	}
|
D ]}|                    d          rt          j        
                    ||          }t          j                            |          r6t          j                            |          |vr|                    |           |d |D             z  }||fS )as  Returns a tuple of 2 sets of which paths to display to user

    The first set contains paths that would be deleted. Files of a package
    are not added and the top-level directory of the package has a '*' added
    at the end - to signify that all it's contents are removed.

    The second set contains files that would have been skipped in the above
    folders.
    r>   z__init__.pyz
.dist-infoc                N    h | ]"}t           j                            |d           #S )rP   )r!   r"   r#   )rT   folders     r%   re   z.compress_for_output_listing.<locals>.<setcomp>   s(    KKK27<<44KKKr'   )r0   rB   r1   r!   r"   rn   ru   r`   r\   rr   r#   isfile)rI   will_remove	will_skipfoldersr~   r"   _normcased_filesr   dirpath_dirfilesfnamefile_s                r%   compress_for_output_listingr      s    e**KI eeGEEE  ==   	=='' 	/<4+?+?KK--...		$3rw/7788gG  ) )$&GFOO 	) 	) GQ! 
) 
)>>&)) We44GNN5)))((//7GGG MM%(((
)	) KK7KKKKK	!!r'   c                  Z    e Zd ZdZddZddZddZdd	Zdd
ZddZ	e
dd            ZdS )StashedUninstallPathSetzWA set of file rename operations to stash files while
    tentatively uninstalling them.r   Nonec                "    i | _         g | _        d S r/   )
_save_dirs_movesselfs    r%   __init__z StashedUninstallPathSet.__init__   s     57 .0r'   r"   r   c                    	 t          |          }n # t          $ r t          d          }Y nw xY w|| j        t          j                            |          <   |j        S )zStashes a directory.

        Directories are stashed adjacent to their original location if
        possible, or else moved/copied into the user's temp dir.	uninstallkind)r   OSErrorr   r   r!   r"   r`   )r   r"   save_dirs      r%   _get_directory_stashz,StashedUninstallPathSet._get_directory_stash   si    	7&;D&A&AHH 	7 	7 	7$+666HHH	72:((../}s    //c                V   t           j                            |          }t           j                            |          d}}d}||k    rF	 | j        |         }np# t
          $ r Y nw xY wt           j                            |          |}}||k    Ft           j                            |          }t          d          }|| j        |<   t           j                            ||          }|r:|t           j        j        k    r%t           j        	                    |j        |          S |j        S )zStashes a file.

        If no root has been provided, one will be created for the directory
        in the user's temp directory.Nr   r   )
r!   r"   r`   rn   r   KeyErrorr   relpathcurdirr#   )r   r"   headold_headr   r   s         r%   _get_file_stashz'StashedUninstallPathSet._get_file_stash   s   
 w%%..hh?40   W__T22D(D h 7??4((D$+666H$,DOD!'//$-- 	8w"'.007<<w777}s   
A 
A%$A%c                   t           j                            |          ot           j                            |           }|r|                     |          }n|                     |          }| j                            ||f           |r3t           j                            |          rt          j        |           t          ||           |S )zStashes the directory or file and returns its new location.
        Handle symlinks as files to avoid modifying the symlink targets.
        )
r!   r"   isdirislinkr   r   r   appendrmdirr   )r   r"   path_is_dirnew_paths       r%   stashzStashedUninstallPathSet.stash   s     gmmD))F"'..2F2F.F 	20066HH++D11HD(+,,, 	27==22 	 HXhr'   c                    | j                                         D ]}|                                 g | _        i | _         dS )z0Commits the uninstall by removing stashed files.N)r   rq   cleanupr   )r   r   s     r%   commitzStashedUninstallPathSet.commit  sF    ..00 	 	Hr'   c                x   | j         D ]}t          j        dg|R   | j         D ] \  }}	 t                              d||           t          j                            |          st          j                            |          rt	          j        |           n.t          j        	                    |          rt          |           t          ||           # t          $ r@}t                              d|           t                              d|           Y d}~d}~ww xY w|                                  dS )z2Undoes the uninstall by moving stashed files back.zMoving to %s
 from %szReplacing %s from %szFailed to restore %szException: %sN)r   loggerinfodebugr!   r"   r   r   unlinkr   r   r   r   errorr   )r   rb   r   r"   exs        r%   rollbackz StashedUninstallPathSet.rollback  s?    	6 	6AK05155555"k 
	2 
	2NHd	23XtDDD7>>(++ %rw~~h/G/G %Ih''''W]]8,, %8$$$h'''' 2 2 23X>>>_b111111112 	s   B-C
D##6DD#r   c                *    t          | j                  S r/   )r   r   r   s    r%   can_rollbackz$StashedUninstallPathSet.can_rollback%  s    DK   r'   Nr   r   )r"   r   r   r   r   r   )__name__
__module____qualname____doc__r   r   r   r   r   r   propertyr   r_   r'   r%   r   r      s        & &0 0 0 0      6   *      & ! ! ! X! ! !r'   r   c                  l    e Zd ZdZddZdd
ZddZddZdddZddZ	ddZ
ddZed d            ZdS )!UninstallPathSetzMA set of file paths to be removed in the uninstallation of a
    requirement.r8   r   r   r   c                    t                      | _        t                      | _        i | _        || _        t                      | _        t          j        t                    | _
        d S r/   )r0   _paths_refuse_pth_distr   _moved_pathsr5   	lru_cacher   _normalize_path_cached)r   r8   s     r%   r   zUninstallPathSet.__init__.  sO     #!$46	
355 '0&9.&I&I###r'   r"   r   r   c                    t                      sdS |                    |                     t          j                            S )zs
        Return True if the given path is one we are permitted to
        remove/modify, False otherwise.

        T)r   rQ   r   sysprefix)r   r"   s     r%   
_permittedzUninstallPathSet._permitted9  s9     ()) 	4t::3:FFGGGr'   c                Z   t           j                            |          \  }}t           j                            |                     |          t           j                            |                    }t           j                            |          sd S |                     |          r| j        	                    |           n| j
        	                    |           t           j                            |          d         dk    r$| 	                    t          |                     d S d S )N   r<   )r!   r"   rC   r#   r   r`   existsr   r   r1   r   splitextr   )r   r"   r   tails       r%   r1   zUninstallPathSet.addD  s    W]]4((
d w||D77==rw?O?OPT?U?UVVw~~d## 	F??4   	#KOOD!!!!LT""" 7D!!!$--HH&t,,----- .-r'   pth_filerE   c                   |                      |          }|                     |          rB|| j        vrt          |          | j        |<   | j        |                             |           d S | j                            |           d S r/   )r   r   r   UninstallPthEntriesr1   r   )r   r   rE   s      r%   add_pthzUninstallPathSet.add_pthW  s    ..x88??8$$ 	'ty((&9(&C&C	(#Ih##E*****LX&&&&&r'   Fauto_confirmverbosec                   | j         s't                              d| j        j                   dS | j        j         d| j        j         }t                              d|           t                      5  |s|                     |          r| j        }t          | j                   }t          t          |                    D ]2}|                    |           t                              d|           3| j                                        D ]}|                                 t                              d|           ddd           dS # 1 swxY w Y   dS )z\Remove paths in ``self._paths`` with confirmation (unless
        ``auto_confirm`` is True).z7Can't uninstall '%s'. No files were found to uninstall.N-zUninstalling %s:zRemoving file or directory %szSuccessfully uninstalled %s)r   r   r   r   raw_nameraw_versionr   _allowed_to_proceedr   r   rX   r\   r   r   r   rq   remove)r   r   r   dist_name_versionmoved
for_renamer"   pths           r%   r   zUninstallPathSet.remove`  s    { 	KKI
#   F#z2MMTZ5KMM&(9:::\\ 	N 	N Nt77@@ N)0==
"7:#6#677 J JDKK%%%NN#BDIIII9++-- ! !CJJLLLL9;LMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	Ns   3CEEEc                <   dd}|st          | j                  \  }}n"t          | j                  }t                      } |d|            |d	|            |d
| j                   |r |dt	          | j                             t          dd          dk    S )z@Display which files would be deleted and prompt for confirmationmsgr   rI   rJ   r   r   c                   |sd S t                               |            t                      5  t          t	          |                    D ]}t                               |           	 d d d            d S # 1 swxY w Y   d S r/   )r   r   r   rX   r\   )r   rI   r"   s      r%   _displayz6UninstallPathSet._allowed_to_proceed.<locals>._display  s     KK & &"75>>22 & &DKK%%%%&& & & & & & & & & & & & & & & & & &s   :A55A9<A9zWould remove:z+Would not remove (might be manually added):z%Would not remove (outside of prefix):zWill actually move:zProceed (Y/n)? )yn r   )r   r   rI   rJ   r   r   )r   r   r0   r   r   r   )r   r   r   r   r   s        r%   r   z$UninstallPathSet._allowed_to_proceed}  s    	& 	& 	& 	&  	%@%M%M"K dk**KI+...>	JJJ8$,GGG 	NH*,?,L,LMMM$n55<<r'   c                H   | j         j        s't                              d| j        j                   dS t                              d| j        j                   | j                                          | j        	                                D ]}|                                 dS )z1Rollback the changes previously made by remove().z'Can't roll back %s; was not uninstalledNzRolling back uninstall of %s)
r   r   r   r   r   r   r   r   r   rq   )r   r   s     r%   r   zUninstallPathSet.rollback  s     - 	LL9
#   F2DJ4GHHH""$$$9##%% 	 	CLLNNNN	 	r'   c                8    | j                                          dS )z?Remove temporary save dir: rollback will no longer be possible.N)r   r   r   s    r%   r   zUninstallPathSet.commit  s      """""r'   c           
        |j         }|j        }|+t                              d|j                    | |          S t          |          }|j        s7t                              d|j        |t          j                    | |          S |d t          j
        d          t          j
        d          hD             v r,t                              d|j        |            | |          S  | |          }t          |j                  }|j        o@|d uo<t          j                            |          o|                    |j         d           }|rp||                    |           |                                }|:|D ]5}	|                    t          j                            ||	                     6n,|                    d          r	 |                    d	          }
|
                    d
          n# t2          $ r g Y nw xY wfd|                    d                                          D             D ]}t          j                            ||          }|                    |           |                    | d           |                    | d           |                    | d           n#|j        rt7          |          |j        r|                    |           t          j                            |          d         }t          j                            t          j                            |          d          }|                    |d|z              ns|j         r)tC          |          D ]}|                    |           nC|r$tE          |          5 }t          j        #                    |$                                %                                          }|&                    |          }d d d            n# 1 swxY w Y   t          j        '                    ||          sJ d| d| d|j         d| d	            |                    |           t          j                            t          j                            |          d          }|                    ||           nt          (                    d||           |j)        rtU                      }ntW                      }	 |,                                D ]r}|                    t          j                            ||                     tZ          r6|                    t          j                            || d                     sn# t2          t\          f$ r Y nw xY wd"d!} |||          D ]}|                    |           |S )#Nz-Not uninstalling %s since it is not installedz1Not uninstalling %s at %s, outside environment %sc                    h | ]}||S r_   r_   ra   s     r%   re   z-UninstallPathSet.from_dist.<locals>.<setcomp>  s.     (
 (
 (
(
(
 (
 (
r'   stdlib
platstdlibz<Not uninstalling %s at %s, as it is in the standard library.z	.egg-infoztop_level.txtznamespace_packages.txtF)keependsc                     g | ]
}|r|v|S r_   r_   )rT   rb   
namespacess     r%   
<listcomp>z.UninstallPathSet.from_dist.<locals>.<listcomp>  s8     & & && j00 000r'   r<   r>   r?   r:   r   zeasy-install.pthz./z	Egg-link z (to z') does not match installed location of z (at )z)Not sure how to uninstall: %s - Check: %sz.batr8   r   r   r   r   r   c              3     K   |                                  D ]Q}|j        dk    rt          ||j        d          E d {V  *|j        dk    rt          ||j        d          E d {V  Rd S )Nconsole_scriptsFgui_scriptsT)iter_entry_pointsgroupr&   name)r8   r   entry_points      r%   iter_scripts_to_removez:UninstallPathSet.from_dist.<locals>.iter_scripts_to_remove8  s        $5577 N N$(999,Wk6FNNNNNNNNNN &-77,Wk6FMMMMMMMMM	N Nr'   )r8   r   r   r   r   r   )/r@   info_locationr   r   canonical_namer   localr   r   	sysconfigget_pathr   r   "installed_with_setuptools_egg_infor!   r"   r   rB   setuptools_filenamer1   rA   r#   is_file	read_text
splitlinesFileNotFoundErrorinstalled_by_distutilsr	   installed_as_eggrC   rn   r   installed_with_dist_inforH   openr`   readlinestripr   samefiler   in_usersiter   r   iter_distutils_script_namesr   NotADirectoryError)clsr8   dist_locationr   normalized_dist_locationpaths_to_removedevelop_egg_linksetuptools_flat_installationinstalled_filesinstalled_filenamespace_packagestop_level_pkgr"   easy_install_eggeasy_install_pthfhlink_pointernormalized_link_pointerr   scriptr   sr   s                         @r%   	from_distzUninstallPathSet.from_dist  s   * KK?#   3t99#1-#@#@ z 	KKC#(
	   3t99# (
 (
(22I4F|4T4TU(
 (
 (
 
 

 KKN#(  
 3t99#d))6t}EE 3 ST)S}--S
 "**d.F+Q+Q+QRRR 	% ( K	(##M222"88::O*&5 U UN#'']N(S(STTTTU
 o.. 7O)-8P)Q)Q& "4!>!>!>!N!NJJ ) $ $ $!#JJJ$& & & &!^^O<<GGII& & & 	7 	7M
 7<<}EED#''---#''4555#''4666#''46666( /	(d;;;;" ,	  8999!w}}-EFFqI!w|| 899"    ##$4d=M6MNNNN* 	,T22 * *##D))))*  	 &'' 2!w//0C0C0E0EFF*9*P*P + +'              
 7##')A   N, N N< N N)-N N=JN N N    0111!w|| 0113E    ##$4mDDDD LL;    	'"nnGG$&&G	::<< P P##BGLL&$A$ABBB P#''Wooo(N(NOOOP "#56 	 	 	D		N 	N 	N 	N ('g66 	# 	#A""""s8   G= =HH6APP"PBV V('V(N)r8   r   r   r   )r"   r   r   r   )r"   r   r   r   )r   r   rE   r   r   r   )FF)r   r   r   r   r   r   )r   r   r   r   r   )r8   r   r   r   )r   r   r   r   r   r   r1   r   r   r   r   r   classmethodr%  r_   r'   r%   r   r   *  s         	J 	J 	J 	J	H 	H 	H 	H. . . .&' ' ' 'N N N N N:= = = =8   # # # # Z Z Z [Z Z Zr'   r   c                  .    e Zd ZddZddZddZdd
ZdS )r   r   r   r   r   c                H    || _         t                      | _        d | _        d S r/   )filer0   rD   _saved_lines)r   r   s     r%   r   zUninstallPthEntries.__init__I  s"    	!$04r'   rE   c                    t           j                            |          }t          r;t           j                            |          d         s|                    dd          }| j                            |           d S )Nr   \/)r!   r"   r`   r   
splitdrivereplacerD   r1   )r   rE   s     r%   r1   zUninstallPthEntries.addN  sl      ''  	-27--e44Q7 	-MM$,,Er'   c                   t                               d| j                   t          j                            | j                  s"t                               d| j                   d S t          | j        d          5 }|                                }|| _	        d d d            n# 1 swxY w Y   t          d |D                       rd}nd}|rO|d                             |                    d                    s!|d         |                    d          z   |d<   | j        D ]Y}	 t                               d	|           |                    ||z                       d                     J# t          $ r Y Vw xY wt          | j        d
          5 }|                    |           d d d            d S # 1 swxY w Y   d S )NzRemoving pth entries from %s:z.Cannot remove entries from nonexistent file %srbc              3     K   | ]}d |v V  	dS )s   
Nr_   )rT   lines     r%   rW   z-UninstallPthEntries.remove.<locals>.<genexpr>h  s&      114w$111111r'   z

zutf-8zRemoving entry: %swb)r   r   r)  r!   r"   r   warningr  	readlinesr*  rY   rB   encoderD   r   
ValueError
writelines)r   r   linesendlinerE   s        r%   r   zUninstallPthEntries.remove]  s7   6	BBB w~~di(( 	NNKTYWWWF$)T"" 	&bLLNNE %D	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 11511111 	GGG 	<r++GNN7,C,CDD 	<b	GNN7$;$;;E"I\ 	 	E3U;;;ego55g>>????   $)T"" 	!bMM%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s7   <B$$B(+B((AE//
E<;E<F77F;>F;r   c                &   | j         "t                              d| j                   dS t                              d| j                   t          | j        d          5 }|                    | j                    d d d            n# 1 swxY w Y   dS )Nz.Cannot roll back changes to %s, none were madeFz!Rolling %s back to previous stater6  T)r*  r   r   r)  r   r  r;  )r   r   s     r%   r   zUninstallPthEntries.rollbackx  s    $LLI49UUU58$)DDD$)T"" 	-bMM$+,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-ts   BB
B
N)r   r   r   r   )rE   r   r   r   r   r   )r   r   r   r   r1   r   r   r_   r'   r%   r   r   H  sd        5 5 5 5
       ! ! ! !6     r'   r   )r   r   r   r   r   r   r   r   )r(   r)   r   r)   )r8   r   r   r   )rI   rJ   r   rK   )rI   rJ   r   r   )2
__future__r   r5   r!   r   r  collections.abcr   r   importlib.utilr   typingr   r   pip._internal.exceptionsr	   r
   pip._internal.locationsr   r   pip._internal.metadatar   pip._internal.utils.compatr   pip._internal.utils.egg_linkr   pip._internal.utils.loggingr   r   pip._internal.utils.miscr   r   r   r   pip._internal.utils.temp_dirr   r   pip._internal.utils.virtualenvr   r   r   r&   r7   rH   r\   r   r   r   r   r   r_   r'   r%   <module>rL     s}   " " " " " "     				 



     / / / / / / / / , , , , , ,                 S S S S S S S S @ @ @ @ @ @ @ @ 3 3 3 3 3 3 . . . . . . D D D D D D = = = = = = = = I I I I I I I I I I I I M M M M M M M M C C C C C C	8		& & & &&    	   	B   &A A A AD." ." ." ."bf! f! f! f! f! f! f! f!R[ [ [ [ [ [ [ [|7 7 7 7 7 7 7 7 7 7r'   