§
    
Á³gbQ  ã                   óè   — 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 n# e$ r	 d dl	mZ Y nw xY wddl
mZ ddlmZmZmZmZmZmZ ddlmZmZ  ej        e¦  «        ZdZdZ G d	„ d
e¦  «        ZdS )é    N)ÚThreadé   )ÚDistlibException)ÚHTTPBasicAuthHandlerÚRequestÚHTTPPasswordMgrÚurlparseÚbuild_openerÚstring_types)Úzip_dirÚServerProxyzhttps://pypi.org/pypiÚpypic                   óœ   — e Zd ZdZdZdd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zdd„Zdd„Zdd„Z	 	 dd„Zd„ Z	 dd„Z	 dd„Zdd„Zd„ Zd„ Zdd„ZdS )ÚPackageIndexzc
    This class represents a package index compatible with PyPI, the Python
    Package Index.
    s.   ----------ThIs_Is_tHe_distlib_index_bouNdaRY_$Nc                 óÜ  — |pt           | _        |                      ¦   «          t          | j        ¦  «        \  }}}}}}|s|s|s|dvrt	          d| j        z  ¦  «        ‚d| _        d| _        d| _        d| _        t          t          j        d¦  «        5 }dD ];}		 t          j        |	dg||¬¦  «        }
|
dk    r	|	| _         nŒ,# t          $ r Y Œ8w xY wddd¦  «         dS # 1 swxY w Y   dS )	z”
        Initialise an instance.

        :param url: The URL of the index. If not specified, the URL for PyPI is
                    used.
        )ÚhttpÚhttpszinvalid repository: %sNÚw)ÚgpgÚgpg2z	--version©ÚstdoutÚstderrr   )ÚDEFAULT_INDEXÚurlÚread_configurationr	   r   Úpassword_handlerÚssl_verifierr   Úgpg_homeÚopenÚosÚdevnullÚ
subprocessÚ
check_callÚOSError)Úselfr   ÚschemeÚnetlocÚpathÚparamsÚqueryÚfragÚsinkÚsÚrcs              úW/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/pip/_vendor/distlib/index.pyÚ__init__zPackageIndex.__init__$   s~  € ð Ð'�-ˆŒØ×ÒÑ!Ô!Ð!Ý4<¸T¼XÑ4FÔ4FÑ1ˆ�˜˜f e¨TØð 	H�Uð 	H˜dð 	H fÐ4EÐ&EÐ&EÝ"Ð#;¸d¼hÑ#FÑGÔGÐGØ $ˆÔØ ˆÔØˆŒØˆŒÝ•"”*˜cÑ"Ô"ð 	 dð %ð ð �ðÝ#Ô.°°;Ð/?ÈØ6:ð<ñ <ô <�Bà˜Q’w�wØ#$˜œØ˜ð øõ ð ð ð Ø�Dðøøøð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s6   ÂC!Â&CÃC!Ã
CÃC!ÃCÃC!Ã!C%Ã(C%c                 ó"   — ddl m}  |¦   «         S )zs
        Get the distutils command for interacting with PyPI configurations.
        :return: the command.
        r   )Ú_get_pypirc_command)Úutilr3   )r&   Úcmds     r0   r3   z PackageIndex._get_pypirc_commandA   s!   € ð
 	5Ð4Ð4Ð4Ð4Ð4Øˆs‰uŒuˆó    c                 ó  — ddl m}  || ¦  «        }|                     d¦  «        | _        |                     d¦  «        | _        |                     dd¦  «        | _        |                     d| j        ¦  «        | _        dS )	zÃ
        Read the PyPI access configuration as supported by distutils. This populates
        ``username``, ``password``, ``realm`` and ``url`` attributes from the
        configuration.
        r   )Ú_load_pypircÚusernameÚpasswordÚrealmr   Ú
repositoryN)r4   r8   Úgetr9   r:   r;   r   )r&   r8   Úcfgs      r0   r   zPackageIndex.read_configurationI   s{   € ð 	'Ð&Ð&Ð&Ð&Ð&Øˆl˜4Ñ Ô ˆØŸš 
Ñ+Ô+ˆŒØŸš 
Ñ+Ô+ˆŒØ—W’W˜W fÑ-Ô-ˆŒ
Ø—7’7˜<¨¬Ñ2Ô2ˆŒˆˆr6   c                 óP   — |                       ¦   «          ddlm}  || ¦  «         dS )z”
        Save the PyPI access configuration. You must have set ``username`` and
        ``password`` attributes before calling this method.
        r   )Ú_store_pypircN)Úcheck_credentialsr4   r@   )r&   r@   s     r0   Úsave_configurationzPackageIndex.save_configurationV   s>   € ð
 	×ÒÑ Ô Ð Ø'Ð'Ð'Ð'Ð'Ð'Øˆ�dÑÔÐÐÐr6   c                 ó  — | j         �| j        €t          d¦  «        ‚t          ¦   «         }t	          | j        ¦  «        \  }}}}}}|                     | j        || j         | j        ¦  «         t          |¦  «        | _	        dS )zp
        Check that ``username`` and ``password`` have been set, and raise an
        exception if not.
        Nz!username and password must be set)
r9   r:   r   r   r	   r   Úadd_passwordr;   r   r   )r&   ÚpmÚ_r(   s       r0   rA   zPackageIndex.check_credentials_   s}   € ð
 Œ=Ð  D¤MÐ$9Ý"Ð#FÑGÔGÐGÝÑÔˆÝ (¨¬Ñ 2Ô 2Ñˆˆ6�1�a˜˜AØ
�Š˜œ
 F¨D¬M¸4¼=ÑIÔIÐIÝ 4°RÑ 8Ô 8ˆÔÐÐr6   c                 ó‚  — |                       ¦   «          |                     ¦   «          |                     ¦   «         }d|d<   |                      |                     ¦   «         g ¦  «        }|                      |¦  «        }d|d<   |                      |                     ¦   «         g ¦  «        }|                      |¦  «        S )aq  
        Register a distribution on PyPI, using the provided metadata.

        :param metadata: A :class:`Metadata` instance defining at least a name
                         and version number for the distribution to be
                         registered.
        :return: The HTTP response received from PyPI upon submission of the
                request.
        Úverifyú:actionÚsubmit)rA   ÚvalidateÚtodictÚencode_requestÚitemsÚsend_request)r&   ÚmetadataÚdÚrequestÚresponses        r0   ÚregisterzPackageIndex.registerk   sª   € ð 	×ÒÑ Ô Ð Ø×ÒÑÔÐØ�OŠOÑÔˆØˆˆ)‰Ø×%Ò% a§g¢g¡i¤i°Ñ4Ô4ˆØ×$Ò$ WÑ-Ô-ˆØˆˆ)‰Ø×%Ò% a§g¢g¡i¤i°Ñ4Ô4ˆØ× Ò  Ñ)Ô)Ð)r6   c                 ó  — 	 |                      ¦   «         }|sn\|                     d¦  «                             ¦   «         }|                     |¦  «         t                               |›d|›�¦  «         Œs|                     ¦   «          dS )ar  
        Thread runner for reading lines of from a subprocess into a buffer.

        :param name: The logical name of the stream (used for logging only).
        :param stream: The stream to read from. This will typically a pipe
                       connected to the output stream of a subprocess.
        :param outbuf: The list to append the read lines to.
        Túutf-8z: N)ÚreadlineÚdecodeÚrstripÚappendÚloggerÚdebugÚclose)r&   ÚnameÚstreamÚoutbufr.   s        r0   Ú_readerzPackageIndex._reader   s…   € ð	/Ø—’Ñ!Ô!ˆAØð ØØ—’˜Ñ!Ô!×(Ò(Ñ*Ô*ˆAØ�MŠM˜!ÑÔÐÝ�LŠL T T T¨1¨1Ð-Ñ.Ô.Ð.ð	/ð 	�Š‰Œˆˆˆr6   c           	      óÐ  — | j         dddg}|€| j        }|r|                     d|g¦  «         |�|                     g d¢¦  «         t          j        ¦   «         }t
          j                             |t
          j                             |¦  «        dz   ¦  «        }|                     dd	d
|d||g¦  «         t           
                    dd                     |¦  «        ¦  «         ||fS )a‰  
        Return a suitable command for signing a file.

        :param filename: The pathname to the file to be signed.
        :param signer: The identifier of the signer of the file.
        :param sign_password: The passphrase for the signer's
                              private key used for signing.
        :param keystore: The path to a directory which contains the keys
                         used in verification. If not specified, the
                         instance's ``gpg_home`` attribute is used instead.
        :return: The signing command as a list suitable to be
                 passed to :class:`subprocess.Popen`.
        ú--status-fdÚ2ú--no-ttyNú	--homedir)z--batchz--passphrase-fdÚ0z.ascz--detach-signz--armorz--local-userz--outputúinvoking: %sú )r   r   ÚextendÚtempfileÚmkdtempr!   r)   ÚjoinÚbasenamer[   r\   )r&   ÚfilenameÚsignerÚsign_passwordÚkeystorer5   ÚtdÚsfs           r0   Úget_sign_commandzPackageIndex.get_sign_command‘   sè   € ð Œx˜¨¨ZÐ8ˆØÐØ”}ˆHØð 	0Ø�JŠJ˜ XÐ.Ñ/Ô/Ð/ØÐ$Ø�JŠJÐ:Ð:Ð:Ñ;Ô;Ð;ÝÔÑÔˆÝŒW�\Š\˜"�bœg×.Ò.¨xÑ8Ô8¸6ÑAÑBÔBˆØ�
Š
�O Y°Ø˜J¨¨Hð6ñ 	7ô 	7ð 	7å�Š�^ S§X¢X¨c¡]¤]Ñ3Ô3Ð3Ø�Bˆwˆr6   c                 ó@  — t           j        t           j        dœ}|�t           j        |d<   g }g }t          j        |fi |¤Ž}t          | j        d|j        |f¬¦  «        }|                     ¦   «          t          | j        d|j        |f¬¦  «        }|                     ¦   «          |�3|j         	                    |¦  «         |j         
                    ¦   «          |                     ¦   «          |                     ¦   «          |                     ¦   «          |j        ||fS )aæ  
        Run a command in a child process , passing it any input data specified.

        :param cmd: The command to run.
        :param input_data: If specified, this must be a byte string containing
                           data to be sent to the child process.
        :return: A tuple consisting of the subprocess' exit code, a list of
                 lines read from the subprocess' ``stdout``, and a list of
                 lines read from the subprocess' ``stderr``.
        r   NÚstdinr   )ÚtargetÚargsr   )r#   ÚPIPEÚPopenr   ra   r   Ústartr   rw   Úwriter]   Úwaitrm   Ú
returncode)	r&   r5   Ú
input_dataÚkwargsr   r   ÚpÚt1Út2s	            r0   Úrun_commandzPackageIndex.run_command­   s  € õ !”oÝ ”oð
ð 
ˆð Ð!Ý(œoˆF�7‰OØˆØˆÝÔ˜SÐ+Ð+ FÐ+Ð+ˆõ ˜4œ<¨x¸¼À6Ð.JÐKÑKÔKˆØ
�Š‰
Œ
ˆ
Ý˜4œ<¨x¸¼À6Ð.JÐKÑKÔKˆØ
�Š‰
Œ
ˆ
ØÐ!ØŒG�MŠM˜*Ñ%Ô%Ð%ØŒG�MŠM‰OŒOˆOà	�Š‰ŒˆØ
�Š‰	Œ	ˆ	Ø
�Š‰	Œ	ˆ	ØŒ|˜V VÐ+Ð+r6   c                 óÆ   — |                       ||||¦  «        \  }}|                      ||                     d¦  «        ¦  «        \  }}}	|dk    rt          d|z  ¦  «        ‚|S )aR  
        Sign a file.

        :param filename: The pathname to the file to be signed.
        :param signer: The identifier of the signer of the file.
        :param sign_password: The passphrase for the signer's
                              private key used for signing.
        :param keystore: The path to a directory which contains the keys
                         used in signing. If not specified, the instance's
                         ``gpg_home`` attribute is used instead.
        :return: The absolute pathname of the file where the signature is
                 stored.
        rV   r   z&sign command failed with error code %s)ru   r…   Úencoder   )
r&   ro   rp   rq   rr   r5   Úsig_filer/   r   r   s
             r0   Ú	sign_filezPackageIndex.sign_fileÐ   s„   € ð ×-Ò-¨h¸ÀØ.6ñ8ô 8‰ˆˆXà!×-Ò-¨cØ.;×.BÒ.BÀ7Ñ.KÔ.KñMô MÑˆˆF�Fà�Š7ˆ7Ý"ð $-Ø/1ñ$2ñ 3ô 3ð 3àˆr6   ÚsdistÚsourcec           	      ó¨  — |                       ¦   «          t          j                             |¦  «        st	          d|z  ¦  «        ‚|                     ¦   «          |                     ¦   «         }d}	|r:| j        st           	                    d¦  «         n|  
                    ||||¦  «        }	t          |d¦  «        5 }
|
                     ¦   «         }ddd¦  «         n# 1 swxY w Y   t          j        |¦  «                             ¦   «         }t          j        |¦  «                             ¦   «         }|                     dd||||dœ¦  «         dt          j                             |¦  «        |fg}|	r¢t          |	d¦  «        5 }
|
                     ¦   «         }ddd¦  «         n# 1 swxY w Y   |                     d	t          j                             |	¦  «        |f¦  «         t)          j        t          j                             |	¦  «        ¦  «         |                      |                     ¦   «         |¦  «        }|                      |¦  «        S )
a´  
        Upload a release file to the index.

        :param metadata: A :class:`Metadata` instance defining at least a name
                         and version number for the file to be uploaded.
        :param filename: The pathname of the file to be uploaded.
        :param signer: The identifier of the signer of the file.
        :param sign_password: The passphrase for the signer's
                              private key used for signing.
        :param filetype: The type of the file being uploaded. This is the
                        distutils command which produced that file, e.g.
                        ``sdist`` or ``bdist_wheel``.
        :param pyversion: The version of Python which the release relates
                          to. For code compatible with any Python, this would
                          be ``source``, otherwise it would be e.g. ``3.2``.
        :param keystore: The path to a directory which contains the keys
                         used in signing. If not specified, the instance's
                         ``gpg_home`` attribute is used instead.
        :return: The HTTP response received from PyPI upon submission of the
                request.
        znot found: %sNz)no signing program available - not signedÚrbÚfile_uploadÚ1)rI   Úprotocol_versionÚfiletypeÚ	pyversionÚ
md5_digestÚsha256_digestÚcontentÚgpg_signature)rA   r!   r)   Úexistsr   rK   rL   r   r[   Úwarningr‰   r    ÚreadÚhashlibÚmd5Ú	hexdigestÚsha256Úupdatern   rZ   ÚshutilÚrmtreeÚdirnamerM   rN   rO   )r&   rP   ro   rp   rq   r‘   r’   rr   rQ   rˆ   ÚfÚ	file_datar“   r”   ÚfilesÚsig_datarR   s                    r0   Úupload_filezPackageIndex.upload_fileç   s™  € ð. 	×ÒÑ Ô Ð ÝŒw�~Š~˜hÑ'Ô'ð 	?Ý" ?°XÑ#=Ñ>Ô>Ð>Ø×ÒÑÔÐØ�OŠOÑÔˆØˆØð 	4Ø”8ð 4Ý—’ÐJÑKÔKÐKÐKàŸ>š>¨(°F¸MØ*2ñ4ô 4�å�(˜DÑ!Ô!ð 	! QØŸš™œˆIð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!å”[ Ñ+Ô+×5Ò5Ñ7Ô7ˆ
Ýœ yÑ1Ô1×;Ò;Ñ=Ô=ˆØ	�ŠØ$Ø #Ø Ø"Ø$Ø*ð
ð 
ñ 	ô 	ð 	ð �RœW×-Ò-¨hÑ7Ô7¸ÐCÐDˆØð 	5Ý�h Ñ%Ô%ð $¨ØŸ6š6™8œ8�ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $à�LŠL˜/­2¬7×+;Ò+;¸HÑ+EÔ+EØ!ð#ñ $ô $ð $åŒM�"œ'Ÿ/š/¨(Ñ3Ô3Ñ4Ô4Ð4Ø×%Ò% a§g¢g¡i¤i°Ñ7Ô7ˆØ× Ò  Ñ)Ô)Ð)s$   Â<CÃC!Ã$C!ÆF&Æ&F*Æ-F*c                 ó(  — |                       ¦   «          t          j                             |¦  «        st	          d|z  ¦  «        ‚t          j                             |d¦  «        }t          j                             |¦  «        st	          d|z  ¦  «        ‚|                     ¦   «          |j        |j	        }}t          |¦  «                             ¦   «         }dd|fd|fg}d||fg}|                      ||¦  «        }	|                      |	¦  «        S )a2  
        Upload documentation to the index.

        :param metadata: A :class:`Metadata` instance defining at least a name
                         and version number for the documentation to be
                         uploaded.
        :param doc_dir: The pathname of the directory which contains the
                        documentation. This should be the directory that
                        contains the ``index.html`` for the documentation.
        :return: The HTTP response received from PyPI upon submission of the
                request.
        znot a directory: %rz
index.htmlznot found: %r)rI   Ú
doc_uploadr^   Úversionr•   )rA   r!   r)   Úisdirr   rm   r—   rK   r^   r©   r   ÚgetvaluerM   rO   )
r&   rP   Údoc_dirÚfnr^   r©   Úzip_dataÚfieldsr¤   rR   s
             r0   Úupload_documentationz!PackageIndex.upload_documentation   s  € ð 	×ÒÑ Ô Ð ÝŒw�}Š}˜WÑ%Ô%ð 	DÝ"Ð#8¸7Ñ#BÑCÔCÐCÝŒW�\Š\˜' <Ñ0Ô0ˆÝŒw�~Š~˜bÑ!Ô!ð 	9Ý" ?°RÑ#7Ñ8Ô8Ð8Ø×ÒÑÔÐØ œ xÔ'7ˆgˆÝ˜7Ñ#Ô#×,Ò,Ñ.Ô.ˆØ+Ø˜4�. 9¨gÐ"6ð8ˆà˜T 8Ð,Ð-ˆØ×%Ò% f¨eÑ4Ô4ˆØ× Ò  Ñ)Ô)Ð)r6   c                 óì   — | j         dddg}|€| j        }|r|                     d|g¦  «         |                     d||g¦  «         t                               dd                     |¦  «        ¦  «         |S )	a|  
        Return a suitable command for verifying a file.

        :param signature_filename: The pathname to the file containing the
                                   signature.
        :param data_filename: The pathname to the file containing the
                              signed data.
        :param keystore: The path to a directory which contains the keys
                         used in verification. If not specified, the
                         instance's ``gpg_home`` attribute is used instead.
        :return: The verifying command as a list suitable to be
                 passed to :class:`subprocess.Popen`.
        rc   rd   re   Nrf   z--verifyrh   ri   )r   r   rj   r[   r\   rm   )r&   Úsignature_filenameÚdata_filenamerr   r5   s        r0   Úget_verify_commandzPackageIndex.get_verify_command<  s}   € ð Œx˜¨¨ZÐ8ˆØÐØ”}ˆHØð 	0Ø�JŠJ˜ XÐ.Ñ/Ô/Ð/Ø�
Š
�JÐ 2°MÐBÑCÔCÐCÝ�Š�^ S§X¢X¨c¡]¤]Ñ3Ô3Ð3Øˆ
r6   c                 óÆ   — | j         st          d¦  «        ‚|                      |||¦  «        }|                      |¦  «        \  }}}|dvrt          d|z  ¦  «        ‚|dk    S )a6  
        Verify a signature for a file.

        :param signature_filename: The pathname to the file containing the
                                   signature.
        :param data_filename: The pathname to the file containing the
                              signed data.
        :param keystore: The path to a directory which contains the keys
                         used in verification. If not specified, the
                         instance's ``gpg_home`` attribute is used instead.
        :return: True if the signature was verified, else False.
        z0verification unavailable because gpg unavailable)r   r   z(verify command failed with error code %sr   )r   r   r´   r…   )r&   r²   r³   rr   r5   r/   r   r   s           r0   Úverify_signaturezPackageIndex.verify_signatureT  s�   € ð Œxð 	2Ý"ð $1ñ 2ô 2ð 2à×%Ò%Ð&8¸-Ø&.ñ0ô 0ˆà!×-Ò-¨cÑ2Ô2ÑˆˆF�FØ�VÐÐÝ"ð $'Ø)+ñ$,ñ -ô -ð -à�QŠwˆr6   c           	      ó<  — |€d}t                                d¦  «         n^t          |t          t          f¦  «        r|\  }}nd} t          t          |¦  «        ¦   «         }t                                d|z  ¦  «         t          |d¦  «        5 }|                      t          |¦  «        ¦  «        }	 | 
                    ¦   «         }	d}
d}d}d}d	|	v rt          |	d
         ¦  «        }|r |||
|¦  «         	 |                     |
¦  «        }|snS|t          |¦  «        z  }|                     |¦  «         |r|                     |¦  «         |dz  }|r |||
|¦  «         Œk	 |                     ¦   «          n# |                     ¦   «          w xY w	 ddd¦  «         n# 1 swxY w Y   |dk    r||k     rt#          d||fz  ¦  «        ‚|rQ|                     ¦   «         }||k    rt#          |›d|›d|›d|›�¦  «        ‚t                                d|¦  «         dS dS )a  
        This is a convenience method for downloading a file from an URL.
        Normally, this will be a file from the index, though currently
        no check is made for this (i.e. a file can be downloaded from
        anywhere).

        The method is just like the :func:`urlretrieve` function in the
        standard library, except that it allows digest computation to be
        done during download and checking that the downloaded data
        matched any expected value.

        :param url: The URL of the file to be downloaded (assumed to be
                    available via an HTTP GET request).
        :param destfile: The pathname where the downloaded file is to be
                         saved.
        :param digest: If specified, this must be a (hasher, value)
                       tuple, where hasher is the algorithm used (e.g.
                       ``'md5'``) and ``value`` is the expected value.
        :param reporthook: The same as for :func:`urlretrieve` in the
                           standard library.
        NzNo digest specifiedr›   zDigest specified: %sÚwbi    éÿÿÿÿr   zcontent-lengthzContent-LengthTr   z1retrieval incomplete: got only %d out of %d bytesz digest mismatch for z: expected z, got zDigest verified: %s)r[   r\   Ú
isinstanceÚlistÚtupleÚgetattrrš   r    rO   r   ÚinfoÚintr™   Úlenr}   rž   r]   r   rœ   )r&   r   ÚdestfileÚdigestÚ
reporthookÚdigesterÚhasherÚdfpÚsfpÚheadersÚ	blocksizeÚsizer™   ÚblocknumÚblockÚactuals                   r0   Údownload_filezPackageIndex.download_filem  s½  € ð, ˆ>ØˆHÝ�LŠLÐ.Ñ/Ô/Ð/Ð/å˜&¥4­ -Ñ0Ô0ð Ø!'‘�˜˜à�Ø/•w�w¨Ñ/Ô/Ñ1Ô1ˆHÝ�LŠLÐ/°&Ñ8Ñ9Ô9Ð9õ �(˜DÑ!Ô!ð 	 Sð ×#Ò#¥G¨C¡L¤LÑ1Ô1ˆCðØŸ(š(™*œ*�Ø �	Ø�Ø�Ø�Ø# wÐ.Ð.Ý˜wÐ'7Ô8Ñ9Ô9�DØð :Ø�J˜x¨°DÑ9Ô9Ð9ð
>ØŸHšH YÑ/Ô/�EØ ð ØØ�C ™JœJÑ&�DØ—I’I˜eÑ$Ô$Ð$Øð /Ø Ÿš¨Ñ.Ô.Ð.Ø ‘M�HØ!ð >Ø"˜
 8¨Y¸Ñ=Ô=Ð=ð
>ð ð —	’	‘”��ø�—	’	‘”��øøø�ð5	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð: �1Š9ˆ9˜ š˜Ý"ØCØ˜�,ññ ô  ð  ð ð 	8Ø×'Ò'Ñ)Ô)ˆFØ˜ÒÐÝ&Ø7=°v°v¸x¸x¸xØ7=°v°v¸v¸vð(Gñ Hô Hð Hõ �LŠLÐ.°Ñ7Ô7Ð7Ð7Ð7ð	8ð 	8s+   Â#FÂ2B0E8Å#FÅ8FÆFÆF"Æ%F"c                 óÆ   — g }| j         r|                     | j         ¦  «         | j        r|                     | j        ¦  «         t          |Ž }|                     |¦  «        S )zÝ
        Send a standard library :class:`Request` to PyPI and return its
        response.

        :param req: The request to send.
        :return: The HTTP response from PyPI (a standard library HTTPResponse).
        )r   rZ   r   r
   r    )r&   ÚreqÚhandlersÚopeners       r0   rO   zPackageIndex.send_requestº  se   € ð ˆØÔ ð 	3Ø�OŠO˜DÔ1Ñ2Ô2Ð2ØÔð 	/Ø�OŠO˜DÔ-Ñ.Ô.Ð.Ý˜xÐ(ˆØ�{Š{˜3ÑÔÐr6   c           
      óL  — g }| j         }|D ]n\  }}t          |t          t          f¦  «        s|g}|D ]G}|                     d|z   d|z                       d¦  «        d|                     d¦  «        f¦  «         ŒHŒo|D ]<\  }}	}
|                     d|z   d|›d|	›d�                     d¦  «        d|
f¦  «         Œ=|                     d|z   dz   df¦  «         d                     |¦  «        }d	|z   }|t          t          |¦  «        ¦  «        d
œ}t          | j
        ||¦  «        S )a&  
        Encode fields and files for posting to an HTTP server.

        :param fields: The fields to send as a list of (fieldname, value)
                       tuples.
        :param files: The files to send as a list of (fieldname, filename,
                      file_bytes) tuple.
        s   --z)Content-Disposition: form-data; name="%s"rV   r6   z&Content-Disposition: form-data; name="z"; filename="ú"s   
s   multipart/form-data; boundary=)zContent-typezContent-length)Úboundaryrº   r»   r¼   rj   r‡   rm   ÚstrrÀ   r   r   )r&   r¯   r¤   ÚpartsrÕ   ÚkÚvaluesÚvÚkeyro   ÚvalueÚbodyÚctrÈ   s                 r0   rM   zPackageIndex.encode_requestÊ  s|  € ð ˆØ”=ˆØð 
	(ð 
	(‰IˆAˆvÝ˜f¥t­U mÑ4Ô4ð "Ø ˜�àð (ð (�Ø—’Ø˜HÑ$Ø@Øñßš˜w™œØØ—H’H˜WÑ%Ô%ð'ñ (ô (ð (ð (ð(ð %*ð 	ð 	Ñ ˆC�˜5Ø�LŠLØ˜Ñ Ð à�#�#�x�x�xð!ß"(¢&¨¡/¤/ØØðñ ô ð ð ð 	�Š�e˜hÑ&¨Ñ.°Ð4Ñ5Ô5Ð5à�|Š|˜EÑ"Ô"ˆØ.°Ñ9ˆàÝ!¥# d¡)¤)™nœnð
ð 
ˆõ �t”x  wÑ/Ô/Ð/r6   c                 óè   — t          |t          ¦  «        rd|i}t          | j        d¬¦  «        }	 |                     ||pd¦  «          |d¦  «        ¦   «          S #   |d¦  «        ¦   «          w xY w)Nr^   g      @)ÚtimeoutÚandr]   )rº   r   r   r   Úsearch)r&   ÚtermsÚoperatorÚ	rpc_proxys       r0   râ   zPackageIndex.searchõ  sˆ   € Ý�e�\Ñ*Ô*ð 	$Ø˜U�OˆEÝ ¤°#Ð6Ñ6Ô6ˆ	ð	!Ø×#Ò# E¨8Ð+<°uÑ=Ô=àˆIˆI�gÑÔÑ Ô Ð Ð øÐˆIˆI�gÑÔÑ Ô Ð Ð øøøs   ±A ÁA1)N)NNrŠ   r‹   N)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rÕ   r1   r3   r   rB   rA   rT   ra   ru   r…   r‰   r¦   r°   r´   r¶   rÎ   rO   rM   râ   © r6   r0   r   r      s}  € € € € € ðð ð
 A€Hðð ð ð ð:ð ð ð3ð 3ð 3ðð ð ð
9ð 
9ð 
9ð*ð *ð *ð(ð ð ð$ð ð ð ð8!,ð !,ð !,ð !,ðFð ð ð ð. JNØCGð7*ð 7*ð 7*ð 7*ðr*ð *ð *ð: %)ðð ð ð ð2 #'ðð ð ð ð2K8ð K8ð K8ð K8ðZ ð  ð  ð )0ð )0ð )0ðV!ð !ð !ð !ð !ð !r6   r   )rš   Úloggingr!   rŸ   r#   rk   Ú	threadingr   ÚImportErrorÚdummy_threadingÚ r   Úcompatr   r   r   r	   r
   r   r4   r   r   Ú	getLoggerræ   r[   r   ÚDEFAULT_REALMÚobjectr   rê   r6   r0   ú<module>rô      sc  ðð €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€ð'Ø Ð Ð Ð Ð Ð Ð øØð 'ð 'ð 'Ø&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð'øøøð Ð Ð Ð Ð Ð ð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;à &Ð &Ð &Ð &Ð &Ð &Ð &Ð &à	ˆÔ	˜8Ñ	$Ô	$€à'€Ø€ð`!ð `!ð `!ð `!ð `!�6ñ `!ô `!ð `!ð `!ð `!s   š! ¡/®/