o
    GEDi9~                     @   s$  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mZmZmZ d dlmZmZmZ d dlmZm Z m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z' dd	l(m)Z)m*Z*m+Z+m,Z, dd
l-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8 dZ9erddl:m;Z; G dd de<Z=G dd de<Z>dee? deee? ee?e?f f fddZ@	d)dee?e?f de?dee? fddZAG dd dZBG dd dZCe6eCe2jDd G d!d" d"e3ZEG d#d$ d$ZFee3e?e?f ZGG d%d& d&e3ZHG d'd( d(ZIdS )*    N)deque)TracebackType)TYPE_CHECKINGAnyAsyncIteratorDequeDictIteratorListMappingOptionalSequenceTupleTypeUnioncast)	parse_qslunquote	urlencode)CIMultiDictCIMultiDictProxyMultiMapping   )CONTENT_DISPOSITIONCONTENT_ENCODINGCONTENT_LENGTHCONTENT_TRANSFER_ENCODINGCONTENT_TYPE)CHARTOKENparse_mimetypereify)HeadersParser)JsonPayloadLookupErrorOrderPayloadStringPayloadget_payloadpayload_type)StreamReader)MultipartReaderMultipartWriterBodyPartReaderBadContentDispositionHeaderBadContentDispositionParamparse_content_dispositioncontent_disposition_filename)ClientResponsec                   @      e Zd ZdS )r.   N__name__
__module____qualname__ r8   r8   `/var/www/www-root/data/www/ovozai.pdev.uz/venv/lib/python3.10/site-packages/aiohttp/multipart.pyr.   A       r.   c                   @   r3   )r/   Nr4   r8   r8   r8   r9   r/   E   r:   r/   headerreturnc                    s  dt dtfdd dt dtfdd}dt dtf fdd}dt dtfd	d
}dt dtfdd}dttjtddt dt dt fdd}| sJd i fS | d^}} |s`t	t
|  d i fS i }|rO|d}	d|	vryt	t
|  d i fS |	dd\}
}|
  }
| }|
|v rt	t
|  d i fS  |
st	t|	 qb||
r||r||dd }n |st	t|	 qbn||
r||r|dd\}}}|pd}nt	t|	 qbzt||d}W n^ ty   t	t|	 Y qbw d}||rd}||dd d}n+ |rd}n#|r;| d|d  }||r;|d ||dd d}d}|rIt	t
|  d i fS |||
< |se| |fS )Nstringr<   c                 S   s   t | o	tt| kS N)boolr   setr=   r8   r8   r9   is_tokenL   s   z+parse_content_disposition.<locals>.is_tokenc                 S   s    | d | d   kodkS   S )Nr   "r8   rA   r8   r8   r9   	is_quotedO   s    z,parse_content_disposition.<locals>.is_quotedc                    s    | o
|  ddkS )N'   )countrA   rB   r8   r9   
is_rfc5987R      z-parse_content_disposition.<locals>.is_rfc5987c                 S   s
   |  dS )N*)endswithrA   r8   r8   r9   is_extended_paramU      
z4parse_content_disposition.<locals>.is_extended_paramc                 S   s@   |  dd }|sdS | dr| |d n| |d  }| S )NrL   r   FrC   )findrM   isdigit)r=   pos	substringr8   r8   r9   is_continuous_paramX   s
   "z6parse_content_disposition.<locals>.is_continuous_param )charstextrV   c                S   s   t d| dd| S )Nz\\([z])z\1)resub)rW   rV   r8   r8   r9   unescape_   rK   z+parse_content_disposition.<locals>.unescape;r   =r   rC   rF   rG   utf-8strictTFz\/)strr?   joinmaprX   escaper   splitwarningswarnr.   poplowerstriplstripr/   r   UnicodeDecodeError)r;   rE   rJ   rN   rT   rZ   disptypepartsparamsitemkeyvalueencoding_failed_valuer8   rI   r9   r0   I   s   *





>r0   filenamerm   namec           
         s   d|  | sd S  | v r|   S || v r| | S g }t  fdd|  D }t|D ]%\}\}}|dd\}}|drD|d d }|t|krP|| q+ |sUd S d|}d|v rq|dd	\}	}}|	pjd
}	t||	dS |S )Nz%s*c                 3   s&    | ]\}}|  r||fV  qd S r>   )
startswith).0ro   rp   name_sufr8   r9   	<genexpr>   s    
z/content_disposition_filename.<locals>.<genexpr>rL   r   rC   rU   rF   rG   r]   r^   )	sorteditems	enumeraterc   rM   r_   appendr`   r   )
rm   rv   rl   fnparamsnumro   rp   rr   tailrq   r8   ry   r9   r1      s4   

r1   c                   @   sp   e Zd ZdZ						ddd	Zdd
dZded fddZdefddZ	de
ed  fddZdddZdS )MultipartResponseWrapperzzWrapper around the MultipartReader.

    It takes care about
    underlying connection and close it when it needs in.
    respr2   streamr+   r<   Nc                 C   s   || _ || _d S r>   )r   r   )selfr   r   r8   r8   r9   __init__   s   
z!MultipartResponseWrapper.__init__c                 C      | S r>   r8   r   r8   r8   r9   	__aiter__      z"MultipartResponseWrapper.__aiter__)r+   r-   c                        |   I d H }|d u rt|S r>   nextStopAsyncIterationr   partr8   r8   r9   	__anext__   
   z"MultipartResponseWrapper.__anext__c                 C   s   | j j S )z2Returns True when all response data had been read.)r   contentat_eofr   r8   r8   r9   r         zMultipartResponseWrapper.at_eofc                    s.   | j  I dH }| j  r|  I dH  |S )z#Emits next multipart reader object.N)r   r   r   releaser   rn   r8   r8   r9   r      s
   
zMultipartResponseWrapper.nextc                    s   | j  I dH  dS )z_Release the connection gracefully.

        All remaining content is read to the void.
        N)r   r   r   r8   r8   r9   r      s   z MultipartResponseWrapper.release)r   r2   r   r+   r<   N)r<   r   r<   N)r5   r6   r7   __doc__r   r   r   r   r?   r   r   r   r   r8   r8   r8   r9   r      s$    




	r   c                   @   s  e Zd ZdZdZdedddeddfd	d
Zded  fddZ	defddZ
dee fddZdddedefddZefdedefddZdedefddZdedefddZdefddZd9dd Zdd!d"ee defd#d$Zdd!d"ee deeeef  fd%d&Zdd!d"ee deeeef  fd'd(Zdefd)d*Zd+edefd,d-Zd+edefd.d/Zd+edefd0d1Z d2edefd3d4Z!e"dee fd5d6Z#e"dee fd7d8Z$dS ):r-   z&Multipart reader for single body part.i    boundaryheadersCIMultiDictProxy[str]r   r<   Nc                 C   s`   || _ || _|| _d| _| j td }|d urt|nd | _d| _t	 | _
d | _d| _i | _d S )NFr   )r   	_boundary_content_at_eofgetr   int_length_read_bytesr   _unread_prev_chunk_content_eof_cache)r   r   r   r   lengthr8   r8   r9   r     s   
zBodyPartReader.__init__c                 C   r   r>   r8   r   r8   r8   r9   r     r   zBodyPartReader.__aiter__c                    r   r>   r   r   r8   r8   r9   r     s
   zBodyPartReader.__anext__c                    s   |   I d H }|sd S |S r>   )readr   r8   r8   r9   r     s
   zBodyPartReader.nextFdecoder   c                   sH   | j rdS t }| j s|| | jI dH  | j r|r"| |S |S )zReads body part data.

        decode: Decodes data following by encoding
                method from Content-Encoding header. If it missed
                data remains untouched
            N)r   	bytearrayextend
read_chunk
chunk_sizer   )r   r   datar8   r8   r9   r      s   
zBodyPartReader.readsizec                    s   | j rdS | jr| |I dH }n| |I dH }|  jt|7  _| j| jkr,d| _ | j r?| j I dH }d|ks?J d|S )zWReads body part content chunk of the specified size.

        size: chunk size
        r   NT   
z3reader did not read all the data or it is malformed)r   r   _read_chunk_from_length_read_chunk_from_streamr   lenr   readline)r   r   chunkclrfr8   r8   r9   r   0  s   
zBodyPartReader.read_chunkc                    s<   | j d us
J dt|| j | j }| j|I d H }|S )Nz(Content-Length required for chunked read)r   minr   r   r   )r   r   r   r   r8   r8   r9   r   F  s
   z&BodyPartReader._read_chunk_from_lengthc                    sb  |t | jd ksJ d| jd u }|r| j|I d H | _| j|I d H }|  jt| j 7  _| jdk s=J d| jd usDJ | j| }d| j }|rV||}n||t	dt | jt | }|dkrt
  t
jdtd | j||d   W d    n1 sw   Y  ||kr| jd | | _|t | j| }|sd	| _| j}|| _|S )
NrG   z<Chunk size must be greater or equal than boundary length + 2   zReading after EOFr   r   ignore)categoryT)r   r   r   r   r   r   r   r   rP   maxrd   catch_warningsfilterwarningsDeprecationWarningunread_datar   )r   r   first_chunkr   windowrY   idxresultr8   r8   r9   r   N  s:   


 
z&BodyPartReader._read_chunk_from_streamc                    s   | j rdS | jr| j }n| j I dH }|| jr?|d}| j}| jd }||ks2||kr=d| _ | j| dS |S | j I dH }|| jrS|dd }| j| |S )z Reads body part by line by line.r   Nr      --T)	r   r   popleftr   r   rw   r   rstripr   )r   linesliner   last_boundary	next_liner8   r8   r9   r   p  s(   

zBodyPartReader.readlinec                    s2   | j rdS | j s| | jI dH  | j r	dS dS )z0Like read(), but reads all the data to the void.N)r   r   r   r   r8   r8   r9   r     s   zBodyPartReader.release)rq   rq   c                   s.   | j ddI dH }|p| jdd}||S )z;Like read(), but assumes that body part contains text data.Tr   Nr]   default)r   get_charsetr   r   rq   r   r8   r8   r9   rW     s   
zBodyPartReader.textc                   sJ   | j ddI dH }|sdS |p| jdd}ttttf t||S )z<Like read(), but assumes that body parts contains JSON data.Tr   Nr]   r   )	r   r   r   r   r_   r   jsonloadsr   r   r8   r8   r9   r     s   zBodyPartReader.jsonc                   sN   | j ddI dH }|sg S |dur|}n| jdd}t| |d|dS )zFLike read(), but assumes that body parts contain form urlencoded data.Tr   Nr]   r   )keep_blank_valuesrq   )r   r   r   r   r   )r   rq   r   real_encodingr8   r8   r9   form  s   zBodyPartReader.formc                 C      | j S )z<Returns True if the boundary was reached or False otherwise.r   r   r8   r8   r9   r        zBodyPartReader.at_eofr   c                 C   s,   t | jv r
| |}t| jv r| |S |S )zDecodes data.

        Decoding is done according the specified Content-Encoding
        or Content-Transfer-Encoding headers value.
        )r   r   _decode_content_transferr   _decode_content)r   r   r8   r8   r9   r     s
   



zBodyPartReader.decodec                 C   s^   | j td }|dkrt|tj S |dkr"t|dtj S |dkr(|S td| )NrU   deflategzip   identityunknown content encoding: )r   r   r   rg   zlib
decompress	MAX_WBITSRuntimeErrorr   r   rq   r8   r8   r9   r     s   zBodyPartReader._decode_contentc                 C   sP   | j td }|dkrt|S |dkrt|S |dv r!|S td	|)NrU   base64quoted-printable)binary8bit7bit%unknown content transfer encoding: {})
r   r   r   rg   r   	b64decodebinasciia2b_qpr   formatr   r8   r8   r9   r     s   

z'BodyPartReader._decode_content_transferr   c                 C   s$   | j td}t|}|jd|S )z>Returns charset parameter from Content-Type header or default.rU   charset)r   r   r   r    
parameters)r   r   ctypemimetyper8   r8   r9   r     s   zBodyPartReader.get_charsetc                 C      t | jt\}}t|dS )z|Returns name specified in Content-Disposition header.

        If the header is missing or malformed, returns None.
        rv   r0   r   r   r   r1   r   rr   rm   r8   r8   r9   rv        
zBodyPartReader.namec                 C   r   )zReturns filename specified in Content-Disposition header.

        Returns None if the header is missing or malformed.
        ru   r   r   r8   r8   r9   ru     r   zBodyPartReader.filenamer   )%r5   r6   r7   r   r   bytesr*   r   r   r   r   r   r   r?   r   r   r   r   r   r   r   r_   rW   r   r   r   r
   r   r   r   r   r   r   r   r!   rv   ru   r8   r8   r8   r9   r-      sB    
"
((r-   )orderc                       s@   e Zd Zdedededdf fddZdeddfd	d
Z  ZS )BodyPartReaderPayloadrp   argskwargsr<   Nc                    sb   t  j|g|R i | i }|jd ur|j|d< |jd ur#|j|d< |r/| jdi | d S d S )Nrv   ru   
attachmentT)r   T)superr   rv   ru   set_content_disposition)r   rp   r   r   rm   	__class__r8   r9   r     s   



zBodyPartReaderPayload.__init__writerc                    sR   | j }|jddI d H }|r'|||I d H  |jddI d H }|sd S d S )Ni   )r   )rt   r   writer   )r   r  fieldr   r8   r8   r9   r    s   zBodyPartReaderPayload.write)r5   r6   r7   r-   r   r   r  __classcell__r8   r8   r  r9   r     s    r   c                   @   s"  e Zd ZdZeZdZeZde	e
e
f deddfddZded fd	d
Zdeed ef  fddZedddefddZdefddZdeed ef  fddZd(ddZded ef fddZddded ef fddZde
fddZdefddZd(d d!Zd(d"d#Zd)d$d%Zd(d&d'Z dS )*r+   zMultipart body reader.Nr   r   r<   c                 C   s:   || _ d|    | _|| _d | _d| _d| _g | _d S )Nz--FT)	r   _get_boundaryencoder   r   
_last_partr   _at_bofr   )r   r   r   r8   r8   r9   r     s   
zMultipartReader.__init__r-   c                 C   r   r>   r8   r   r8   r8   r9   r      s   zMultipartReader.__aiter__c                    r   r>   r   r   r8   r8   r9   r   %  r   zMultipartReader.__anext__responser2   c                 C   s   |  || |j|j}|S )zConstructs reader instance from HTTP response.

        :param response: :class:`~aiohttp.client.ClientResponse` instance
        )response_wrapper_clsr   r   )clsr  objr8   r8   r9   from_response-  s   	zMultipartReader.from_responsec                 C   r   )z@Returns True if the final boundary was reached, false otherwise.r   r   r8   r8   r9   r   ;  r   zMultipartReader.at_eofc                    sd   | j rdS |  I dH  | jr|  I dH  d| _n|  I dH  | j r'dS |  I dH | _| jS )z#Emits the next multipart body part.NF)r   _maybe_release_last_partr  _read_until_first_boundary_read_boundaryfetch_next_partr
  r   r8   r8   r9   r   ?  s   zMultipartReader.nextc                    s>   | j s|  I dH }|du rdS | I dH  | j rdS dS )z=Reads all the body parts to the void till the final boundary.N)r   r   r   r   r8   r8   r9   r   Q  s   zMultipartReader.releasec                    s   |   I dH }| |S )z"Returns the next body part reader.N)_read_headers_get_part_reader)r   r   r8   r8   r9   r  Y  s   
zMultipartReader.fetch_next_partr   c                 C   sX   | td}t|}|jdkr#| jdu rt| || jS | || jS | | j|| jS )zDispatches the response by the `Content-Type` header.

        Returns a suitable reader instance.

        :param dict headers: Response headers
        rU   	multipartN)r   r   r    typemultipart_reader_clsr   part_reader_clsr   )r   r   r   r   r8   r8   r9   r  `  s   


z MultipartReader._get_part_readerc                 C   sb   t | jt }|jdksJ dd|jvrtd| jt  |jd }t|dkr/td| |S )Nr  z!multipart/* content type expectedr   z$boundary missed for Content-Type: %sF   z&boundary %r is too long (70 chars max))r    r   r   r  r   
ValueErrorr   )r   r   r   r8   r8   r9   r  t  s   

zMultipartReader._get_boundaryc                    s"   | j r	| j  S | j I d H S r>   )r   rf   r   r   r   r8   r8   r9   	_readline  s   
zMultipartReader._readlinec                    sX   	 |   I d H }|dkrtd| j | }|| jkrd S || jd kr+d| _d S q)NTr   z#Could not find starting boundary %rr   )r  r  r   r   r   r   r   r8   r8   r9   r    s   
z*MultipartReader._read_until_first_boundaryc                    s   |   I d H  }|| jkrd S || jd krCd| _|   I d H }|   I d H }|d d dkr9| j| d S | j||g d S td|d| j)Nr   TrG   zInvalid boundary z, expected )r  r   r   r   r   r   r   r  )r   r   epiloguer   r8   r8   r9   r    s   
zMultipartReader._read_boundaryc                    sL   dg}	 | j  I d H }| }|| |snqt }||\}}|S )Nr   )r   r   rh   r   r"   parse_headers)r   linesr   parserr   raw_headersr8   r8   r9   r    s   
zMultipartReader._read_headersc                    sD   | j dur | j  s| j  I dH  | j| j j d| _ dS dS )z8Ensures that the last read body part is read completely.N)r
  r   r   r   r   r   r8   r8   r9   r    s   


z(MultipartReader._maybe_release_last_partr   )r<   r   )!r5   r6   r7   r   r   r  r  r-   r  r   r_   r*   r   r   r   r   r   r   classmethodr  r?   r   r   r   r  r  r  r   r  r  r  r  r  r8   r8   r8   r9   r+     sJ    	










r+   c                       s  e Zd ZdZd.dedee ddf fddZd/d	d
Zdeee	  dee	 dee
 ddfddZdee fddZdefddZdefddZedZedZedefddZedefddZd0dedeee  defddZd edefd!d"Z	d0dedeee  defd#d$Z	d0de e!e"eef  e#eef f deee  defd%d&Z$edee fd'd(Z%d1d*ed+eddfd,d-Z&  Z'S )2r,   zMultipart body writer.mixedNsubtyper   r<   c                    sl   |d ur|nt  j}z|d| _W n ty   tdd w d| d| j }t j	d |d g | _
d S )Nasciiz(boundary should contain ASCII only charsz
multipart/z; boundary=)content_type)uuiduuid4hexr	  r   UnicodeEncodeErrorr  _boundary_valuer   r   _parts)r   r&  r   r   r  r8   r9   r     s   

zMultipartWriter.__init__c                 C   r   r>   r8   r   r8   r8   r9   	__enter__  r   zMultipartWriter.__enter__exc_typeexc_valexc_tbc                 C   s   d S r>   r8   )r   r0  r1  r2  r8   r8   r9   __exit__  s   zMultipartWriter.__exit__c                 C   
   t | jS r>   )iterr.  r   r8   r8   r9   __iter__  rO   zMultipartWriter.__iter__c                 C   r4  r>   )r   r.  r   r8   r8   r9   __len__  rO   zMultipartWriter.__len__c                 C   s   dS )NTr8   r   r8   r8   r9   __bool__  r   zMultipartWriter.__bool__s   \A[!#$%&'*+\-.^_`|~\w]+\Zs   [\x00-\x08\x0A-\x1F\x7F]c                 C   s^   | j }t| j|r|dS t| j|rtd|dd}|dd}d|d d S )zyWrap boundary parameter value in quotes, if necessary.

        Reads self.boundary and returns a unicode sting.
        r'  z*boundary value contains invalid characters   \s   \\   "s   \"rD   )	r   rX   match_valid_tchar_regexr   search_invalid_qdtext_char_regexr  replace)r   rp   quoted_value_contentr8   r8   r9   r-    s   
zMultipartWriter._boundary_valuec                 C   s   | j dS )Nr'  )r   r   r   r8   r8   r9   r     r   zMultipartWriter.boundaryr  r   c                 C   sd   |d u rt  }t|tr|j| | |S zt||d}W n ty,   td| w | |S )Nr   zCannot create payload from %r)	r   
isinstancer&   r   updateappend_payloadr(   r$   	TypeError)r   r  r   payloadr8   r8   r9   r     s   


zMultipartWriter.appendrF  c                 C   s   |j td }|r|dvrtd| |dkrd}|j td }|dvr0td||dkr6d}|j}|durH|sH|sHt||j t	< | j
|||f |S )	z)Adds a new body part to multipart writer.rU   )r   r   r   r   r   N)rU   r   r   r   r   r   )r   r   r   rg   r   r   r   r   r_   r   r.  r   )r   rF  rq   te_encodingr   r8   r8   r9   rD  $  s6   zMultipartWriter.append_payloadc                 C   s    |du rt  }| t||dS )zHelper to append JSON part.NrA  )r   rD  r#   )r   r  r   r8   r8   r9   append_jsonD  s   zMultipartWriter.append_jsonc                 C   sV   t |ttfs	J |du rt }t |trt| }t|dd}| t||ddS )z&Helper to append form urlencoded part.NT)doseqz!application/x-www-form-urlencoded)r   r(  )	rB  r   r   r   listr}   r   rD  r'   )r   r  r   r   r8   r8   r9   append_formM  s   
zMultipartWriter.append_formc                 C   sv   d}| j D ](\}}}|s|s|jdu r dS |tdt| j d |j t|j d 7 }q|dt| j d 7 }|S )zSize of the payload.r   NrG      )r.  r   r   r   r   _binary_headers)r   totalr   rq   rG  r8   r8   r9   r   b  s&   	zMultipartWriter.sizeTr  close_boundaryc                    s   | j D ]Q\}}}|d| j d I dH  ||jI dH  |s#|rEt|}|r.|| |r5|| ||I dH  | I dH  n||I dH  |dI dH  q|rg|d| j d I dH  dS dS )zWrite body.r   r   Ns   --
)r.  r  r   rM  MultipartPayloadWriterenable_compressionenable_encoding	write_eof)r   r  rO  r   rq   rG  wr8   r8   r9   r  v  s"   

zMultipartWriter.write)r%  N)r<   r,   r>   )T)(r5   r6   r7   r   r_   r   r   r/  r   BaseExceptionr   r3  r	   _Partr6  r   r7  r?   r8  rX   compiler<  r>  propertyr-  r   r   r   r&   r   rD  rH  r   r   r   r   rK  r   r  r  r8   r8   r  r9   r,     sV     




 !



 r,   c                   @   sj   e Zd ZdeddfddZdeddfddZd	ejfded
e	ddfddZ
dddZdeddfddZdS )rP  r  r<   Nc                 C   s   || _ d | _d | _d | _d S r>   )_writer	_encoding	_compress_encoding_buffer)r   r  r8   r8   r9   r     s   
zMultipartPayloadWriter.__init__rq   c                 C   s0   |dkr|| _ t | _d S |dkrd| _ d S d S )Nr   r   )rZ  r   r\  )r   rq   r8   r8   r9   rR    s   
z&MultipartPayloadWriter.enable_encodingr   strategyc                 C   s.   |dkr	dt j nt j }t j||d| _d S )Nr   r   )wbitsr]  )r   r   compressobjr[  )r   rq   r]  	zlib_moder8   r8   r9   rQ    s   z)MultipartPayloadWriter.enable_compressionc                    sf   | j d ur| j  }|rd | _ | |I d H  | jdkr/| jr1| jt| jI d H  d S d S d S )Nr   )r[  flushr  rZ  r\  rY  r   	b64encoder  r8   r8   r9   rS    s   


z MultipartPayloadWriter.write_eofr   c                    s   | j d ur|r| j |}|sd S | jdkrX| j}|d us J || |rTtt|d\}}|d |d  ||d d  }| _|rVt|}| j	
|I d H  d S d S d S | jdkrk| j	
t|I d H  d S | j	
|I d H  d S )Nr   r   r   )r[  compressrZ  r\  r   divmodr   r   rb  rY  r  r   b2a_qp)r   r   bufdivmod	enc_chunkb64chunkr8   r8   r9   r    s*   


$

zMultipartPayloadWriter.writer   )r5   r6   r7   r   r   r_   rR  r   Z_DEFAULT_STRATEGYr   rQ  rS  r   r  r8   r8   r8   r9   rP    s    

rP  )ru   )Jr   r   r   rX   r)  rd   r   collectionsr   typesr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   urllib.parser   r   r   	multidictr   r   r   hdrsr   r   r   r   r   helpersr   r   r    r!   httpr"   rF  r#   r$   r%   r&   r'   r(   r)   streamsr*   __all__client_reqrepr2   RuntimeWarningr.   r/   r_   r0   r1   r   r-   	try_firstr   r+   rV  r,   rP  r8   r8   r8   r9   <module>   s\    @$	
d

!/ { 8 H