Ë
    ��h=Q  ã                   óâ   — 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 ddlmZmZ  ej,                  e«      ZdZdZ G d	„ d
e«      Zy# e$ r	 d dl	mZ Y ŒMw xY w)é    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y)ÚPackageIndexzc
    This class represents a package index compatible with PyPI, the Python
    Package Index.
    s.   ----------ThIs_Is_tHe_distlib_index_bouNdaRY_$Nc                 óÒ  — |xs t         | _        | j                  «        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Œ- ddd«       y# t        $ r Y ŒBw xY w# 1 sw Y   yxY w)	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/skyplay_api_hub/venv/lib/python3.12/site-packages/pip/_vendor/distlib/index.pyÚ__init__zPackageIndex.__init__%   sÿ   € ð Ò'œ-ˆŒØ×ÑÔ!Ü4<¸T¿X¹XÓ4FÑ1ˆ�˜˜f e¨TÙ‘U™d fÐ4EÑ&EÜ"Ð#;¸d¿h¹hÑ#FÓGÐGØ $ˆÔØ ˆÔØˆŒØˆŒÜ”"—*‘*˜cÓ"ð 	 dð %ò �ðÜ#×.Ñ.°°;Ð/?ÈØ6:ô<�Bà˜Q’wØ#$˜œÙð ð	÷	ð 	øô ò Ùðú÷	ð 	ús0   Â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_commandB   s   € õ
 	5Ù‹uˆó    c                 óè   — ddl m}  || «      }|j                  d«      | _        |j                  d«      | _        |j                  dd«      | _        |j                  d| j                  «      | _        y)	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_configurationJ   sY   € õ 	'Ù˜4Ó ˆØŸ™ 
Ó+ˆŒØŸ™ 
Ó+ˆŒØ—W‘W˜W fÓ-ˆŒ
Ø—7‘7˜<¨¯©Ó2ˆ�r6   c                 ó@   — | j                  «        ddlm}  || «       y)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_configurationW   s   € ð
 	×ÑÔ Ý'Ù�dÕr6   c                 ó  — | j                   �| j                  €t        d«      ‚t        «       }t	        | j
                  «      \  }}}}}}|j                  | j                  || j                   | j                  «       t        |«      | _	        y)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`   sq   € ð
 �=‰=Ð  D§M¡MÐ$9Ü"Ð#FÓGÐGÜÓˆÜ (¨¯©Ó 2Ñˆˆ6�1�a˜˜AØ
�‰˜Ÿ
™
 F¨D¯M©M¸4¿=¹=ÔIÜ 4°RÓ 8ˆÕr6   c                 ó:  — | j                  «        |j                  «        |j                  «       }d|d<   | j                  |j	                  «       g «      }| j                  |«       d|d<   | j                  |j	                  «       g «      }| j                  |«      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Úrequests       r0   ÚregisterzPackageIndex.registerl   s‰   € ð 	×ÑÔ Ø×ÑÔØ�O‰OÓˆØˆˆ)‰Ø×%Ñ% a§g¡g£i°Ó4ˆØ×Ñ˜'Ô"Øˆˆ)‰Ø×%Ñ% a§g¡g£i°Ó4ˆØ× Ñ  Ó)Ð)r6   c                 óâ   — 	 |j                  «       }|snK|j                  d«      j                  «       }|j                  |«       t        j                  |›d|›�«       Œ^|j                  «        y)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.
        ú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©1Ð-Ô.ð ð 	�‰�r6   c           	      ó¼  — | j                   dddg}|€| j                  }|r|j                  d|g«       |�|j                  g d¢«       t        j                  «       }t
        j                  j                  |t
        j                  j                  |«      dz   «      }|j                  ddd	|d
||g«       t        j                  ddj                  |«      «       ||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-ttyú	--homedir)z--batchz--passphrase-fdÚ0z.ascz--detach-signz--armorz--local-userz--outputúinvoking: %sú )r   r   ÚextendÚtempfileÚmkdtempr!   r)   ÚjoinÚbasenamerZ   r[   )r&   ÚfilenameÚsignerÚsign_passwordÚkeystorer5   ÚtdÚsfs           r0   Úget_sign_commandzPackageIndex.get_sign_command’   sÁ   € ð �x‰x˜¨¨ZÐ8ˆØÐØ—}‘}ˆHÙØ�J‰J˜ XÐ.Ô/ØÐ$Ø�J‰JÒ:Ô;Ü×ÑÓˆÜ�W‰W�\‰\˜"œbŸg™g×.Ñ.¨xÓ8¸6ÑAÓBˆØ�
‰
�O Y°Ø˜J¨¨Hð6ô 	7ä�‰�^ S§X¡X¨c£]Ô3Ø�Bˆwˆr6   c                 ó^  — t         j                  t         j                  dœ}|�t         j                  |d<   g }g }t        j                  |fi |¤Ž}t        | j                  d|j
                  |f¬«      }|j                  «        t        | j                  d|j                  |f¬«      }|j                  «        |�5|j                  j                  |«       |j                  j                  «        |j                  «        |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   Ústdinr   )ÚtargetÚargsr   )r#   ÚPIPEÚPopenr   r`   r   Ústartr   rv   Úwriter\   Úwaitrl   Ú
returncode)	r&   r5   Ú
input_dataÚkwargsr   r   ÚpÚt1Út2s	            r0   Úrun_commandzPackageIndex.run_command®   sæ   € ô !—o‘oÜ —o‘oñ
ˆð Ð!Ü(Ÿo™oˆF�7‰OØˆØˆÜ×Ñ˜SÑ+ FÑ+ˆô ˜4Ÿ<™<¨x¸¿¹À6Ð.JÔKˆØ
�‰Œ
Ü˜4Ÿ<™<¨x¸¿¹À6Ð.JÔKˆØ
�‰Œ
ØÐ!Ø�G‰G�M‰M˜*Ô%Ø�G‰G�M‰MŒOà	�‰ŒØ
�‰Œ	Ø
�‰Œ	Ø�|‰|˜V VÐ+Ð+r6   c                 ó¤   — | j                  ||||«      \  }}| j                  ||j                  d«      «      \  }}}	|dk7  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.
        rU   r   z&sign command failed with error code %s)rt   r„   Úencoder   )
r&   rn   ro   rp   rq   r5   Úsig_filer/   r   r   s
             r0   Ú	sign_filezPackageIndex.sign_fileÑ   so   € ð ×-Ñ-¨h¸ÀØ.6ó8‰ˆˆXà!×-Ñ-¨cØ.;×.BÑ.BÀ7Ó.KóMÑˆˆF�Fà�Š7Ü"ð $-Ø/1ñ$2ó 3ð 3àˆr6   c           	      ó$  — | j                  «        t        j                  j                  |«      st	        d|z  «      ‚|j                  «        |j                  «       }d}	|r6| j                  st        j                  d«       n| j                  ||||«      }	t        |d«      5 }
|
j                  «       }ddd«       t        j                  «      j                  «       }t        j                   |«      j                  «       }|j#                  dd||||dœ«       dt        j                  j%                  |«      |fg}|	rˆt        |	d«      5 }
|
j                  «       }ddd«       |j'                  d	t        j                  j%                  |	«      f«       t)        j*                  t        j                  j-                  |	«      «       | j/                  |j1                  «       |«      }| j3                  |«      S # 1 sw Y   �ŒFxY w# 1 sw Y   ŒªxY w)
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   rZ   Úwarningrˆ   r    ÚreadÚhashlibÚmd5Ú	hexdigestÚsha256Úupdaterm   rY   ÚshutilÚrmtreeÚdirnamerM   rN   rO   )r&   rP   rn   ro   rp   rŽ   r�   rq   rQ   r‡   ÚfÚ	file_datar�   r‘   ÚfilesÚsig_datarR   s                    r0   Úupload_filezPackageIndex.upload_fileè   s°  € ð. 	×ÑÔ Ü�w‰w�~‰~˜hÔ'Ü" ?°XÑ#=Ó>Ð>Ø×ÑÔØ�O‰OÓˆØˆÙØ—8’8Ü—‘ÐJÕKàŸ>™>¨(°F¸MØ*2ó4�ä�(˜DÓ!ð 	! QØŸ™›ˆI÷	!ä—[‘[ Ó+×5Ñ5Ó7ˆ
ÜŸ™ yÓ1×;Ñ;Ó=ˆØ	�‰Ø$Ø #Ø Ø"Ø$Ø*ñ
ô 	ð œRŸW™W×-Ñ-¨hÓ7¸ÐCÐDˆÙÜ�h Ó%ð $¨ØŸ6™6›8�÷$à�L‰L˜/¬2¯7©7×+;Ñ+;¸HÓ+EØ!ð#ô $ä�M‰Mœ"Ÿ'™'Ÿ/™/¨(Ó3Ô4Ø×%Ñ% a§g¡g£i°Ó7ˆØ× Ñ  Ó)Ð)÷)	!ñ 	!ú÷$ð $ús   Â$G9ÅHÇ9HÈHc                 óü  — | j                  «        t        j                  j                  |«      st	        d|z  «      ‚t        j                  j                  |d«      }t        j                  j                  |«      st	        d|z  «      ‚|j                  «        |j                  |j                  }}t        |«      j                  «       }dd|fd|fg}d||fg}| j                  ||«      }	| j                  |	«      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   rl   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�}‰}˜WÔ%Ü"Ð#8¸7Ñ#BÓCÐCÜ�W‰W�\‰\˜' <Ó0ˆÜ�w‰w�~‰~˜bÔ!Ü" ?°RÑ#7Ó8Ð8Ø×ÑÔØ Ÿ™ x×'7Ñ'7ˆgˆÜ˜7Ó#×,Ñ,Ó.ˆØ+Ø˜4�. 9¨gÐ"6ð8ˆà˜T 8Ð,Ð-ˆØ×%Ñ% f¨eÓ4ˆØ× Ñ  Ó)Ð)r6   c                 óÞ   — | j                   dddg}|€| j                  }|r|j                  d|g«       |j                  d||g«       t        j	                  ddj                  |«      «       |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`.
        rb   rc   rd   re   z--verifyrg   rh   )r   r   ri   rZ   r[   rl   )r&   Úsignature_filenameÚdata_filenamerq   r5   s        r0   Úget_verify_commandzPackageIndex.get_verify_command=  sh   € ð �x‰x˜¨¨ZÐ8ˆØÐØ—}‘}ˆHÙØ�J‰J˜ XÐ.Ô/Ø�
‰
�JÐ 2°MÐBÔCÜ�‰�^ S§X¡X¨c£]Ô3Øˆ
r6   c                 ó®   — | j                   st        d«      ‚| j                  |||«      }| j                  |«      \  }}}|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°   rq   r5   r/   r   r   s           r0   Úverify_signaturezPackageIndex.verify_signatureU  so   € ð �xŠxÜ"ð $1ó 2ð 2à×%Ñ%Ð&8¸-Ø&.ó0ˆà!×-Ñ-¨cÓ2ÑˆˆF�FØ�VÑÜ"Ð#MÐPRÑ#RÓSÐSØ�Q‰wˆr6   c           	      ón  — |€d}t         j                  d«       nKt        |t        t        f«      r|\  }}nd} t        t        |«      «       }t         j                  d|z  «       t        |d«      5 }| j                  t        |«      «      }	 |j                  «       }	d}
d}d}d}d	|	v rt        |	d
   «      }|r
 |||
|«       	 |j                  |
«      }|snD|t        |«      z  }|j                  |«       |r|j                  |«       |dz  }|r
 |||
|«       ŒX	 |j!                  «        	 ddd«       dk\  r|k  rt#        d||fz  «      ‚|rB|j%                  «       }||k7  rt#        ›d|›d|›d|›�«      ‚t         j                  d|«       yy# |j!                  «        w xY w# 1 sw Y   Œ}xY w)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-Lengthr   z1retrieval incomplete: got only %d out of %d bytesz digest mismatch for z: expected z, got zDigest verified: %s)rZ   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Ø!'‘�™à�Ø/”wœw¨Ó/Ó1ˆHÜ�L‰LÐ/°&Ñ8Ô9ô �(˜DÓ!ð 	 Sð ×#Ñ#¤G¨C£LÓ1ˆCðØŸ(™(›*�Ø �	Ø�Ø�Ø�Ø# wÑ.Ü˜wÐ'7Ñ8Ó9�DÙÙ˜x¨°DÔ9ØØŸH™H YÓ/�EÙ ØØœC ›JÑ&�DØ—I‘I˜eÔ$ÙØ Ÿ™¨Ô.Ø ‘M�HÙ!Ù" 8¨Y¸Ô=ð ð ð —	‘	•÷5	ð: �1Š9˜ šÜ"ØCØ˜�,ñó ð  ñ Ø×'Ñ'Ó)ˆFØ˜ÒÜ&Ú7=ºxÚ7=¹vð(Gó Hð Hô �L‰LÐ.°Õ7ð øð —	‘	•ú÷5	ð 	ús%   Á2F+ÂBFÄF+ÆF(Æ(F+Æ+F4c                 óÔ   — g }| j                   r|j                  | j                   «       | j                  r|j                  | j                  «       t        |Ž }|j	                  |«      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   rY   r   r
   r    )r&   ÚreqÚhandlersÚopeners       r0   rO   zPackageIndex.send_requestº  sX   € ð ˆØ× Ò Ø�O‰O˜D×1Ñ1Ô2Ø×ÒØ�O‰O˜D×-Ñ-Ô.Ü˜xÐ(ˆØ�{‰{˜3ÓÐr6   c           
      ó  — g }| j                   }|D ]^  \  }}t        |t        t        f«      s|g}|D ];  }|j	                  d|z   d|z  j                  d«      d|j                  d«      f«       Œ= Œ` |D ]4  \  }}	}
|j	                  d|z   d|›d|	›d�j                  d«      d|
f«       Œ6 |j	                  d|z   dz   df«       dj                  |«      }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"rU   r6   z&Content-Disposition: form-data; name="z"; filename="ú"s   
s   multipart/form-data; boundary=)zContent-typezContent-length)Úboundaryr·   r¸   r¹   ri   r†   rl   Ústrr½   r   r   )r&   r¬   r¡   ÚpartsrÒ   ÚkÚvaluesÚvÚkeyrn   ÚvalueÚbodyÚctrÅ   s                 r0   rM   zPackageIndex.encode_requestÊ  s.  € ð ˆØ—=‘=ˆØò 
	(‰IˆAˆvÜ˜f¤t¬U mÔ4Ø ˜�àò (�Ø—‘Ø˜HÑ$Ø@Øñß™˜w›ØØ—H‘H˜WÓ%ð'õ (ñ(ð	
	(ð %*ò 	Ñ ˆC�˜5Ø�L‰LØ˜Ò â’xð!ß"(¡&¨£/ØØðõ ð	ð 	�‰�e˜hÑ&¨Ñ.°Ð4Ô5à�|‰|˜EÓ"ˆØ.°Ñ9ˆàÜ!¤# d£)›nñ
ˆô �t—x‘x  wÓ/Ð/r6   c                 óÄ   — t        |t        «      rd|i}t        | j                  d¬«      }	 |j	                  ||xs 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ˆ	ð	!Ø×#Ñ# E¨8Ò+<°uÓ=à‰I�gÓÕ øÐ‰I�gÓÕ ús   ­A ÁA)N)NNÚsdistÚsourceN)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rÒ   r1   r3   r   rB   rA   rS   r`   rt   r„   rˆ   r£   r­   r±   r³   rË   rO   rM   rß   © r6   r0   r   r      s‚   „ ñð
 A€Hóò:ò3òò
9ò*ò(ó$ó8!,óFð. JNØCGó7*òr*ð: %)óð2 #'óó0K8òZ ò )0ôV!r6   r   )r—   Úloggingr!   rœ   r#   rj   Ú	threadingr   ÚImportErrorÚdummy_threadingÚ r   Úcompatr   r   r   r	   r
   r   r4   r   r   Ú	getLoggerrå   rZ   r   ÚDEFAULT_REALMÚobjectr   ré   r6   r0   ú<module>ró      sq   ðó Û Û 	Û Û Û ð'Ý õ ÷;÷ ;ç &à	ˆ×	Ñ	˜8Ó	$€à'€Ø€ô_!�6õ _!øð ò 'ß&ð'ús   šA  Á A.Á-A.