§
    
Á³gx@  ã            	       ó†  — d Z ddlZddlZddlZddlZddlZddlZddlZddl	Z
ddlZ
ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddl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* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6 erddlm7Z7 ne8Z7 ej9        e:¦  «        Z;ee<e<f         Z=de<dee<         fd„Z> G d„ de?¦  «        Z@deddfd„ZA G d„ de?¦  «        ZBde<de*ddfd„ZCde<de*defd„ZDd e=dee<         fd!„ZE G d"„ d#¦  «        ZF G d$„ d%e7¦  «        ZGd&eGdeGfd'„ZHeHd(d)dee&         fd*„¦   «         ZI G d+„ d)¦  «        ZJ G d,„ d-e¦  «        ZK	 d;d.e&d/ee<e?f         d0eed1                  ddfd2„ZL	 d<ded4eMdeJfd5„ZNd.e&de*ded)         fd6„ZO G d7„ d8e¦  «        ZP G d9„ d:¦  «        ZQdS )=zO
The main purpose of this module is to expose LinkCollector.collect_sources().
é    N)Ú
HTMLParser)ÚValues)ÚTYPE_CHECKINGÚCallableÚDictÚIterableÚListÚMutableMappingÚ
NamedTupleÚOptionalÚSequenceÚTupleÚUnion)Úrequests)ÚResponse)Ú
RetryErrorÚSSLError)ÚNetworkConnectionError)ÚLink)ÚSearchScope)Ú
PipSession)Úraise_for_status)Úis_archive_file©Úredact_auth_from_url)Úvcsé   )ÚCandidatesFromPageÚ
LinkSourceÚbuild_source)ÚProtocolÚurlÚreturnc                 ó¨   — t           j        D ]D}|                      ¦   «                              |¦  «        r| t	          |¦  «                 dv r|c S ŒEdS )zgLook for VCS schemes in the URL.

    Returns the matched VCS scheme, or None if there's no match.
    z+:N)r   ÚschemesÚlowerÚ
startswithÚlen)r"   Úschemes     ú[/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/pip/_internal/index/collector.pyÚ_match_vcs_schemer+   7   sW   € õ
 ”+ð ð ˆØ�9Š9‰;Œ;×!Ò! &Ñ)Ô)ð 	¨cµ#°f±+´+Ô.>À$Ð.FÐ.FØˆMˆMˆMøØˆ4ó    c                   ó,   ‡ — e Zd Zdededdfˆ fd„Zˆ xZS )Ú_NotAPIContentÚcontent_typeÚrequest_descr#   Nc                 óh   •— t          ¦   «                              ||¦  «         || _        || _        d S ©N)ÚsuperÚ__init__r/   r0   )Úselfr/   r0   Ú	__class__s      €r*   r4   z_NotAPIContent.__init__C   s3   ø€ Ý‰Œ×Ò˜ |Ñ4Ô4Ð4Ø(ˆÔØ(ˆÔÐÐr,   )Ú__name__Ú
__module__Ú__qualname__Ústrr4   Ú__classcell__©r6   s   @r*   r.   r.   B   sR   ø€ € € € € ð) Sð )¸ð )Àð )ð )ð )ð )ð )ð )ð )ð )ð )ð )r,   r.   Úresponsec                 óÂ   — | j                              dd¦  «        }|                     ¦   «         }|                     d¦  «        rdS t	          || j        j        ¦  «        ‚)z°
    Check the Content-Type header to ensure the response contains a Simple
    API Response.

    Raises `_NotAPIContent` if the content type is not a valid content-type.
    úContent-TypeÚUnknown)z	text/htmlz#application/vnd.pypi.simple.v1+htmlú#application/vnd.pypi.simple.v1+jsonN)ÚheadersÚgetr&   r'   r.   ÚrequestÚmethod)r=   r/   Úcontent_type_ls      r*   Ú_ensure_api_headerrG   I   sg   € ð Ô#×'Ò'¨¸	ÑBÔB€Là!×'Ò'Ñ)Ô)€NØ× Ò ð	
ñô ð ð 	ˆå
˜ xÔ'7Ô'>Ñ
?Ô
?Ð?r,   c                   ó   — e Zd ZdS )Ú_NotHTTPN)r7   r8   r9   © r,   r*   rI   rI   _   s   € € € € € Ø€Dr,   rI   Úsessionc                 óÞ   — t           j                             | ¦  «        \  }}}}}|dvrt          ¦   «         ‚|                     | d¬¦  «        }t          |¦  «         t          |¦  «         dS )zõ
    Send a HEAD request to the URL, and ensure the response contains a simple
    API Response.

    Raises `_NotHTTP` if the URL is not available for a HEAD request, or
    `_NotAPIContent` if the content type is not a valid content type.
    >   ÚhttpÚhttpsT)Úallow_redirectsN)ÚurllibÚparseÚurlsplitrI   Úheadr   rG   )r"   rK   r)   ÚnetlocÚpathÚqueryÚfragmentÚresps           r*   Ú_ensure_api_responserY   c   sq   € õ -3¬L×,AÒ,AÀ#Ñ,FÔ,FÑ)€FˆF�D˜% ØÐ&Ð&Ð&Ý‰jŒjÐà�<Š<˜¨Tˆ<Ñ2Ô2€DÝ�TÑÔÐå�tÑÔÐÐÐr,   c                 óØ  — t          t          | ¦  «        j        ¦  «        rt          | |¬¦  «         t                               dt          | ¦  «        ¦  «         |                     | d                     g d¢¦  «        ddœ¬¦  «        }t          |¦  «         t          |¦  «         t                               dt          | ¦  «        |j                             d	d
¦  «        ¦  «         |S )aY  Access an Simple API response with GET, and return the response.

    This consists of three parts:

    1. If the URL looks suspiciously like an archive, send a HEAD first to
       check the Content-Type is HTML or Simple API, to avoid downloading a
       large file. Raise `_NotHTTP` if the content type cannot be determined, or
       `_NotAPIContent` if it is not HTML or a Simple API.
    2. Actually perform the request. Raise HTTP exceptions on network failures.
    3. Check the Content-Type header to make sure we got a Simple API response,
       and raise `_NotAPIContent` otherwise.
    ©rK   zGetting page %sz, )rA   z*application/vnd.pypi.simple.v1+html; q=0.1ztext/html; q=0.01z	max-age=0)ÚAcceptzCache-Control)rB   zFetched page %s as %sr?   r@   )r   r   ÚfilenamerY   ÚloggerÚdebugr   rC   Újoinr   rG   rB   )r"   rK   rX   s      r*   Ú_get_simple_responsera   u   sø   € õ •t˜C‘y”yÔ)Ñ*Ô*ð 3Ý˜S¨'Ð2Ñ2Ô2Ð2å
‡L‚LÐ"Õ$8¸Ñ$=Ô$=Ñ>Ô>Ð>à�;Š;Øà—i’iðð ð ñô ð( )ð+
ð 
ð ñ ô €Dõ4 �TÑÔÐõ �tÑÔÐå
‡L‚LØÝ˜SÑ!Ô!ØŒ×Ò˜¨Ñ3Ô3ñô ð ð €Kr,   rB   c                 ó°   — | rSd| v rOt           j                             ¦   «         }| d         |d<   |                     d¦  «        }|rt	          |¦  «        S dS )z=Determine if we have any encoding information in our headers.r?   zcontent-typeÚcharsetN)ÚemailÚmessageÚMessageÚ	get_paramr:   )rB   Úmrc   s      r*   Ú_get_encoding_from_headersri   ´   s`   € àð  �> WÐ,Ð,ÝŒM×!Ò!Ñ#Ô#ˆØ# NÔ3ˆˆ.ÑØ—+’+˜iÑ(Ô(ˆØð 	 Ý�w‘<”<ÐØˆ4r,   c                   ó2   — e Zd Zd	d„Zdedefd„Zdefd„ZdS )
ÚCacheablePageContentÚpageÚIndexContentr#   Nc                 ó&   — |j         sJ ‚|| _        d S r2   )Úcache_link_parsingrl   ©r5   rl   s     r*   r4   zCacheablePageContent.__init__À   s   € ØÔ&Ð&Ð&Ð&ØˆŒ	ˆ	ˆ	r,   Úotherc                 óp   — t          |t          | ¦  «        ¦  «        o| j        j        |j        j        k    S r2   )Ú
isinstanceÚtyperl   r"   )r5   rq   s     r*   Ú__eq__zCacheablePageContent.__eq__Ä   s*   € Ý˜%¥ d¡¤Ñ,Ô,ÐP°´´À%Ä*Ä.Ò1PÐPr,   c                 ó4   — t          | j        j        ¦  «        S r2   )Úhashrl   r"   ©r5   s    r*   Ú__hash__zCacheablePageContent.__hash__Ç   s   € Ý�D”I”MÑ"Ô"Ð"r,   )rl   rm   r#   N)	r7   r8   r9   r4   ÚobjectÚboolru   Úintry   rJ   r,   r*   rk   rk   ¿   sk   € € € € € ðð ð ð ðQ˜Fð Q tð Qð Qð Qð Qð#˜#ð #ð #ð #ð #ð #ð #r,   rk   c                   ó*   — e Zd Zdddee         fd„ZdS )Ú
ParseLinksrl   rm   r#   c                 ó   — d S r2   rJ   rp   s     r*   Ú__call__zParseLinks.__call__Ì   s   € Øˆr,   N)r7   r8   r9   r   r   r€   rJ   r,   r*   r~   r~   Ë   s:   € € € € € ð˜^ð °¸´ð ð ð ð ð ð r,   r~   Úfnc                 óè   ‡ ‡— t          j        d¬¦  «        dt          dt          t                   fˆ fd„¦   «         Št          j        ‰ ¦  «        dddt          t                   fˆ ˆfd„¦   «         }|S )	zÚ
    Given a function that parses an Iterable[Link] from an IndexContent, cache the
    function's result (keyed by CacheablePageContent), unless the IndexContent
    `page` has `page.cache_link_parsing == False`.
    N)ÚmaxsizeÚcacheable_pager#   c                 ó>   •— t           ‰| j        ¦  «        ¦  «        S r2   )Úlistrl   )r„   r�   s    €r*   Úwrapperz*with_cached_index_content.<locals>.wrapper×   s   ø€ å�B�B�~Ô*Ñ+Ô+Ñ,Ô,Ð,r,   rl   rm   c                 ór   •— | j         r ‰t          | ¦  «        ¦  «        S t           ‰| ¦  «        ¦  «        S r2   )ro   rk   r†   )rl   r�   r‡   s    €€r*   Úwrapper_wrapperz2with_cached_index_content.<locals>.wrapper_wrapperÛ   s;   ø€ àÔ"ð 	7Ø�7Õ/°Ñ5Ô5Ñ6Ô6Ð6Ý�B�B�t‘H”H‰~Œ~Ðr,   )Ú	functoolsÚ	lru_cacherk   r	   r   Úwraps)r�   r‰   r‡   s   ` @r*   Úwith_cached_index_contentr�   Ð   s¤   øø€ õ Ô Ð&Ñ&Ô&ð-Õ 4ð -½½d¼ð -ð -ð -ð -ð -ñ 'Ô&ð-õ „_�RÑÔð˜nð µµd´ð ð ð ð ð ð ñ Ôðð
 Ðr,   rl   rm   c              #   ó  K  — | j                              ¦   «         }|                     d¦  «        rUt          j        | j        ¦  «        }|                     dg ¦  «        D ]#}t          j        || j	        ¦  «        }|€Œ|V — Œ$dS t          | j	        ¦  «        }| j        pd}|                     | j                             |¦  «        ¦  «         | j	        }|j        p|}|j        D ] }	t          j        |	||¬¦  «        }|€Œ|V — Œ!dS )z\
    Parse a Simple API's Index Content, and yield its anchor elements as Link objects.
    rA   ÚfilesNzutf-8)Úpage_urlÚbase_url)r/   r&   r'   ÚjsonÚloadsÚcontentrC   r   Ú	from_jsonr"   ÚHTMLLinkParserÚencodingÚfeedÚdecoder‘   ÚanchorsÚfrom_element)
rl   rF   ÚdataÚfileÚlinkÚparserr—   r"   r‘   Úanchors
             r*   Úparse_linksr¡   ä   s!  è è € ð Ô&×,Ò,Ñ.Ô.€NØ× Ò Ð!FÑGÔGð ÝŒz˜$œ,Ñ'Ô'ˆØ—H’H˜W bÑ)Ô)ð 	ð 	ˆDÝ”> $¨¬Ñ1Ô1ˆDØˆ|ØØˆJˆJˆJˆJØˆå˜DœHÑ%Ô%€FØŒ}Ð' €HØ
‡K‚K�”×#Ò# HÑ-Ô-Ñ.Ô.Ð.à
Œ(€CØŒÐ% #€HØ”.ð ð ˆÝÔ  °#ÀÐIÑIÔIˆØˆ<ØØˆ
ˆ
ˆ
ˆ
ð	ð r,   c                   óN   — e Zd ZdZ	 ddededee         dededd	fd
„Zdefd„Z	d	S )rm   z5Represents one response (or page), along with its URLTr”   r/   r—   r"   ro   r#   Nc                 óL   — || _         || _        || _        || _        || _        dS )am  
        :param encoding: the encoding to decode the given content.
        :param url: the URL from which the HTML was downloaded.
        :param cache_link_parsing: whether links parsed from this page's url
                                   should be cached. PyPI index urls should
                                   have this set to False, for example.
        N)r”   r/   r—   r"   ro   )r5   r”   r/   r—   r"   ro   s         r*   r4   zIndexContent.__init__  s/   € ð ˆŒØ(ˆÔØ ˆŒØˆŒØ"4ˆÔÐÐr,   c                 ó*   — t          | j        ¦  «        S r2   )r   r"   rx   s    r*   Ú__str__zIndexContent.__str__  s   € Ý# D¤HÑ-Ô-Ð-r,   ©T)
r7   r8   r9   Ú__doc__Úbytesr:   r   r{   r4   r¥   rJ   r,   r*   rm   rm     s‘   € € € € € Ø?Ð?ð $(ð5ð 5àð5ð ð5ð ˜3”-ð	5ð
 ð5ð !ð5ð 
ð5ð 5ð 5ð 5ð*.˜ð .ð .ð .ð .ð .ð .r,   c                   ó¬   ‡ — e Zd ZdZdeddfˆ fd„Zdedeeeee         f                  ddfd„Z	deeeee         f                  dee         fd	„Z
ˆ xZS )
r–   zf
    HTMLParser that keeps the first base HREF and a list of all anchor
    elements' attributes.
    r"   r#   Nc                 óv   •— t          ¦   «                              d¬¦  «         || _        d | _        g | _        d S )NT)Úconvert_charrefs)r3   r4   r"   r‘   rš   )r5   r"   r6   s     €r*   r4   zHTMLLinkParser.__init__#  s7   ø€ Ý‰Œ×Ò¨$ÐÑ/Ô/Ð/àˆŒØ'+ˆŒØ79ˆŒˆˆr,   ÚtagÚattrsc                 óÂ   — |dk    r)| j         €"|                      |¦  «        }|�	|| _         d S d S |dk    r)| j                             t	          |¦  «        ¦  «         d S d S )NÚbaseÚa)r‘   Úget_hrefrš   ÚappendÚdict)r5   r¬   r­   Úhrefs       r*   Úhandle_starttagzHTMLLinkParser.handle_starttag*  sn   € Ø�&Š=ˆ=˜Tœ]Ð2Ø—=’= Ñ'Ô'ˆDØÐØ $�”��ð  Ðà�CŠZˆZØŒL×Ò¥ U¡¤Ñ,Ô,Ð,Ð,Ð,ð ˆZr,   c                 ó*   — |D ]\  }}|dk    r|c S Œd S )Nr´   rJ   )r5   r­   ÚnameÚvalues       r*   r±   zHTMLLinkParser.get_href2  s1   € Ø ð 	ð 	‰KˆD�%Ø�vŠ~ˆ~Ø���ð àˆtr,   )r7   r8   r9   r§   r:   r4   r	   r   r   rµ   r±   r;   r<   s   @r*   r–   r–     sË   ø€ € € € € ðð ð
:˜Cð : Dð :ð :ð :ð :ð :ð :ð- 3ð -¨t°E¸#¸xÈ¼}Ð:LÔ4MÔ/Nð -ÐSWð -ð -ð -ð -ð˜d 5¨¨h°s¬mÐ);Ô#<Ô=ð À(È3Ä-ð ð ð ð ð ð ð ð r,   r–   rž   ÚreasonÚmeth).Nc                 ó<   — |€t           j        } |d| |¦  «         d S )Nz%Could not fetch URL %s: %s - skipping)r^   r_   )rž   r¹   rº   s      r*   Ú_handle_get_simple_failr¼   9  s+   € ð
 €|ÝŒ|ˆØ€DÐ	0°$¸Ñ?Ô?Ð?Ð?Ð?r,   Tro   c                 ó|   — t          | j        ¦  «        }t          | j        | j        d         || j        |¬¦  «        S )Nr?   )r—   r"   ro   )ri   rB   rm   r”   r"   )r=   ro   r—   s      r*   Ú_make_index_contentr¾   C  sG   € õ *¨(Ô*:Ñ;Ô;€HÝØÔØÔ˜Ô(ØØŒLØ-ðñ ô ð r,   c                óÚ  — | j                              dd¦  «        d         }t          |¦  «        }|rt                               d|| ¦  «         d S t
          j                             |¦  «        \  }}}}}}|dk    r‘t          j	         
                    t
          j                             |¦  «        ¦  «        rU|                     d¦  «        s|dz  }t
          j                             |d¦  «        }t                               d|¦  «         	 t!          ||¬	¦  «        }t#          || j        ¬
¦  «        S # t&          $ r t                               d| ¦  «         Y �nt(          $ r1}t                               d| |j        |j        ¦  «         Y d }~nØd }~wt.          $ r}t1          | |¦  «         Y d }~n¶d }~wt2          $ r}t1          | |¦  «         Y d }~n”d }~wt4          $ r:}d}	|	t7          |¦  «        z  }	t1          | |	t          j        ¬¦  «         Y d }~nRd }~wt:          j        $ r}t1          | d|› �¦  «         Y d }~n(d }~wt:          j        $ r t1          | d¦  «         Y nw xY wd S )Nú#r   r   zICannot look at %s URL %s because it does not support lookup as web pages.r�   ú/z
index.htmlz# file: URL is directory, getting %sr[   )ro   z`Skipping page %s because it looks like an archive, and cannot be checked by a HTTP HEAD request.zºSkipping page %s because the %s request got Content-Type: %s. The only supported Content-Types are application/vnd.pypi.simple.v1+json, application/vnd.pypi.simple.v1+html, and text/htmlz4There was a problem confirming the ssl certificate: )rº   zconnection error: z	timed out) r"   Úsplitr+   r^   ÚwarningrP   rQ   ÚurlparseÚosrU   ÚisdirrD   Úurl2pathnameÚendswithÚurljoinr_   ra   r¾   ro   rI   r.   r0   r/   r   r¼   r   r   r:   Úinfor   ÚConnectionErrorÚTimeout)
rž   rK   r"   Ú
vcs_schemer)   Ú_rU   rX   Úexcr¹   s
             r*   Ú_get_index_contentrÐ   P  s  € Ø
Œ(�.Š.˜˜aÑ
 Ô
  Ô
#€Cõ # 3Ñ'Ô'€JØð Ý�ŠØWØØñ	
ô 	
ð 	
ð
 ˆtõ  &œ|×4Ò4°SÑ9Ô9Ñ€FˆAˆt�Q˜˜1Ø�ÒÐ�BœGŸMšM­&¬.×*EÒ*EÀdÑ*KÔ*KÑLÔLÐð �|Š|˜CÑ Ô ð 	Ø�3‰JˆCõ
 Œl×"Ò" 3¨Ñ5Ô5ˆÝ�ŠÐ:¸CÑ@Ô@Ð@ðUÝ# C°Ð9Ñ9Ô9ˆõ: # 4¸DÔ<SÐTÑTÔTÐTøõ9 ð 
ð 
ð 
Ý�Šð1àñ	
ô 	
ð 	
ð 	
ñ 	
õ
 ð 
ð 
ð 
Ý�ŠðAð ØÔØÔñ	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøõ "ð +ð +ð +Ý  cÑ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*øøøøÝð +ð +ð +Ý  cÑ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*øøøøÝð @ð @ð @ØGˆØ•#�c‘(”(ÑˆÝ  fµ6´;Ð?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?øøøøÝÔ#ð Bð Bð BÝ Ð&@¸3Ð&@Ð&@ÑAÔAÐAÐAÐAÐAÐAÐAøøøøÝÔð 3ð 3ð 3Ý  kÑ2Ô2Ð2Ð2Ð2ð3øøøð ˆ4sT   ÄD6 Ä6%I(Å	I(Å''FÆI(Æ F5Æ5I(ÇGÇI(Ç$0HÈI(È+IÉ"I(É'I(c                   óT   — e Zd ZU eee                  ed<   eee                  ed<   dS )ÚCollectedSourcesÚ
find_linksÚ
index_urlsN)r7   r8   r9   r   r   r   Ú__annotations__rJ   r,   r*   rÒ   rÒ   �  s>   € € € € € € Ø˜ *Ô-Ô.Ð.Ð.Ñ.Ø˜ *Ô-Ô.Ð.Ð.Ñ.Ð.Ð.r,   rÒ   c            
       óª   — e Zd ZdZdededdfd„Ze	 ddeded	e	dd fd
„¦   «         Z
edee         fd„¦   «         Zdedee         fd„Zdededefd„ZdS )ÚLinkCollectorzµ
    Responsible for collecting Link objects from all configured locations,
    making network requests as needed.

    The class's main method is its collect_sources() method.
    rK   Úsearch_scoper#   Nc                 ó"   — || _         || _        d S r2   )rØ   rK   )r5   rK   rØ   s      r*   r4   zLinkCollector.__init__›  s   € ð
 )ˆÔØˆŒˆˆr,   FÚoptionsÚsuppress_no_indexc                 ó  — |j         g|j        z   }|j        r<|s:t                               dd                     d„ |D ¦   «         ¦  «        ¦  «         g }|j        pg }t          j        |||j        ¬¦  «        }t          ||¬¦  «        }|S )zÆ
        :param session: The Session to use to make requests.
        :param suppress_no_index: Whether to ignore the --no-index option
            when constructing the SearchScope object.
        zIgnoring indexes: %sú,c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r2   r   )Ú.0r"   s     r*   ú	<genexpr>z'LinkCollector.create.<locals>.<genexpr>³  s+   è è € ÐIÐI°sÕ-¨cÑ2Ô2ÐIÐIÐIÐIÐIÐIr,   )rÓ   rÔ   Úno_index)rK   rØ   )
Ú	index_urlÚextra_index_urlsrá   r^   r_   r`   rÓ   r   Úcreater×   )ÚclsrK   rÚ   rÛ   rÔ   rÓ   rØ   Úlink_collectors           r*   rä   zLinkCollector.create£  s¾   € ð Ô'Ð(¨7Ô+CÑCˆ
ØÔð 	Ð$5ð 	Ý�LŠLØ&Ø—’ÐIÐI¸jÐIÑIÔIÑIÔIñô ð ð ˆJð Ô'Ð-¨2ˆ
å"Ô)Ø!Ø!ØÔ%ð
ñ 
ô 
ˆõ
 'ØØ%ð
ñ 
ô 
ˆð Ðr,   c                 ó   — | j         j        S r2   )rØ   rÓ   rx   s    r*   rÓ   zLinkCollector.find_linksÅ  s   € àÔ Ô+Ð+r,   Úlocationc                 ó.   — t          || j        ¬¦  «        S )z>
        Fetch an HTML page containing package links.
        r[   )rÐ   rK   )r5   rè   s     r*   Úfetch_responsezLinkCollector.fetch_responseÉ  s   € õ " (°D´LÐAÑAÔAÐAr,   Úproject_nameÚcandidates_from_pagec                 ót  ‡ ‡— t          j        ˆˆ fd„‰ j                             |¦  «        D ¦   «         ¦  «                             ¦   «         }t          j        ˆˆ fd„‰ j        D ¦   «         ¦  «                             ¦   «         }t                               t          j	        ¦  «        red„ t          j        ||¦  «        D ¦   «         }t          |¦  «        › d|› d�g|z   }t                               d                     |¦  «        ¦  «         t          t!          |¦  «        t!          |¦  «        ¬¦  «        S )Nc              3   óT   •K  — | ]"}t          |‰‰j        j        d d ¬¦  «        V — Œ#dS )F©rì   Úpage_validatorÚ
expand_dirro   N©r    rK   Úis_secure_origin©rß   Úlocrì   r5   s     €€r*   rà   z0LinkCollector.collect_sources.<locals>.<genexpr>Õ  s\   øè è € ð 	4
ð 	4
ð õ ØØ%9Ø#œ|Ô<Ø Ø#(ðñ ô ð	4
ð 	4
ð 	4
ð 	4
ð 	4
ð 	4
r,   c              3   óT   •K  — | ]"}t          |‰‰j        j        d d ¬¦  «        V — Œ#dS )Trï   Nrò   rô   s     €€r*   rà   z0LinkCollector.collect_sources.<locals>.<genexpr>ß  s\   øè è € ð 	5
ð 	5
ð õ ØØ%9Ø#œ|Ô<ØØ#'ðñ ô ð	5
ð 	5
ð 	5
ð 	5
ð 	5
ð 	5
r,   c                 ó4   — g | ]}|®|j         ®d|j         › �‘ŒS )Nz* )rž   )rß   Úss     r*   ú
<listcomp>z1LinkCollector.collect_sources.<locals>.<listcomp>ë  s6   € ð ð ð àØ�= Q¤VÐ%7ð �Q”V��à%7Ð%7Ð%7r,   z' location(s) to search for versions of ú:ú
)rÓ   rÔ   )ÚcollectionsÚOrderedDictrØ   Úget_index_urls_locationsÚvaluesrÓ   r^   ÚisEnabledForÚloggingÚDEBUGÚ	itertoolsÚchainr(   r_   r`   rÒ   r†   )r5   rë   rì   Úindex_url_sourcesÚfind_links_sourcesÚliness   ` `   r*   Úcollect_sourceszLinkCollector.collect_sourcesÏ  s‚  øø€ õ (Ô3ð 	4
ð 	4
ð 	4
ð 	4
ð 	4
ð Ô(×AÒAÀ,ÑOÔOð	4
ñ 	4
ô 	4
ñ 	
ô 	
÷ Š&‰(Œ(ð 	õ )Ô4ð 	5
ð 	5
ð 	5
ð 	5
ð 	5
ð ”ð	5
ñ 	5
ô 	5
ñ 	
ô 	
÷ Š&‰(Œ(ð 	õ ×Ò�wœ}Ñ-Ô-ð 
	+ðð å"œÐ);Ð=NÑOÔOðñ ô ˆEõ �u‘:”:ð 3ð 3Ø#/ð3ð 3ð 3ðð ñˆEõ �LŠL˜Ÿš 5Ñ)Ô)Ñ*Ô*Ð*åÝÐ.Ñ/Ô/ÝÐ-Ñ.Ô.ð
ñ 
ô 
ð 	
r,   )F)r7   r8   r9   r§   r   r   r4   Úclassmethodr   r{   rä   Úpropertyr	   r:   rÓ   r   r   rm   rê   r   rÒ   r  rJ   r,   r*   r×   r×   ’  s'  € € € € € ðð ðàðð "ðð 
ð	ð ð ð ð ð
 #(ð	ð àðð ðð  ð	ð
 
ðð ð ñ „[ððB ð,˜D œIð ,ð ,ð ,ñ „Xð,ðB tð B°¸Ô0Fð Bð Bð Bð Bð*
àð*
ð 1ð*
ð 
ð	*
ð *
ð *
ð *
ð *
ð *
r,   r×   r2   r¦   )Rr§   rü   Úemail.messagerd   rŠ   r  r’   r  rÅ   Úurllib.parserP   Úurllib.requestÚhtml.parserr   Úoptparser   Útypingr   r   r   r   r	   r
   r   r   r   r   r   Úpip._vendorr   Úpip._vendor.requestsr   Úpip._vendor.requests.exceptionsr   r   Úpip._internal.exceptionsr   Úpip._internal.models.linkr   Ú!pip._internal.models.search_scoper   Úpip._internal.network.sessionr   Úpip._internal.network.utilsr   Úpip._internal.utils.filetypesr   Úpip._internal.utils.miscr   Úpip._internal.vcsr   Úsourcesr   r   r    r!   rz   Ú	getLoggerr7   r^   r:   ÚResponseHeadersr+   Ú	Exceptionr.   rG   rI   rY   ra   ri   rk   r~   r�   r¡   rm   r–   r¼   r{   r¾   rÐ   rÒ   r×   rJ   r,   r*   ú<module>r      s…  ððð ð Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð !Ð  Ð  Ð  Ð  Ð  Ø )Ð )Ð )Ð )Ð )Ð )Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø *Ð *Ð *Ð *Ð *Ð *Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø !Ð !Ð !Ð !Ð !Ð !à AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aàð ØÐÐÐÐÐÐà€Hà	ˆÔ	˜8Ñ	$Ô	$€à   c Ô*€ð˜3ð  8¨C¤=ð ð ð ð ð)ð )ð )ð )ð )�Yñ )ô )ð )ð@ ð @¨dð @ð @ð @ð @ð,	ð 	ð 	ð 	ð 	ˆyñ 	ô 	ð 	ð˜cð ¨Jð ¸4ð ð ð ð ð$<˜cð <¨Jð <¸8ð <ð <ð <ð <ð~¨ð ¸HÀS¼Mð ð ð ð ð	#ð 	#ð 	#ð 	#ð 	#ñ 	#ô 	#ð 	#ðð ð ð ð �ñ ô ð ð
 *ð °ð ð ð ð ð( ð�nð ¨°$¬ð ð ð ñ Ôðð8.ð .ð .ð .ð .ñ .ô .ð .ð8ð ð ð ð �Zñ ô ð ð> +/ð@ð @Ø
ð@à�#�y�.Ô!ð@ð �8˜IÔ&Ô
'ð@ð 
ð	@ð @ð @ð @ð 48ð
ð 
Øð
Ø,0ð
àð
ð 
ð 
ð 
ð:˜Tð :¨zð :¸hÀ~Ô>Vð :ð :ð :ð :ðz/ð /ð /ð /ð /�zñ /ô /ð /ð
g
ð g
ð g
ð g
ð g
ñ g
ô g
ð g
ð g
ð g
r,   