
    h                       d dl m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mZ ddlmZmZmZmZ ddl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"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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z; g dZ<ddhZ=d-dZ>d.d/dZ?d.d0dZ@d1dZAd2d ZBd3d$ZC G d% d&e	jD        eEeEf                   ZF G d' d(          ZG G d) d*          ZH G d+ d,e	jD        eEeEf                   ZIdS )4    )annotationsN)Mapping)Cookie	CookieJar   )
ByteStreamUnattachedStreamencode_requestencode_response)SUPPORTED_DECODERSByteChunkerContentDecoderIdentityDecoderLineDecoderMultiDecoderTextChunkerTextDecoder)CookieConflictHTTPStatusErrorRequestNotReadResponseNotReadStreamClosedStreamConsumedrequest_context)(get_multipart_boundary_from_content_type)codes)AsyncByteStreamCookieTypesHeaderTypesQueryParamTypesRequestContentRequestDataRequestExtensionsRequestFilesResponseContentResponseExtensionsSyncByteStream)URL)to_bytes_or_strto_str)CookiesHeadersRequestResponseauthorizationzproxy-authorizationencodingstrreturnboolc                T    	 t          j        |            n# t          $ r Y dS w xY wdS )z7
    Return `True` if `encoding` is a known codec.
    FT)codecslookupLookupErrorr0   s    O/var/www/html/prod/cognitive/venv/lib/python3.11/site-packages/httpx/_models.py_is_known_encodingr:   8   sA    h   uu4s    
%%keystr | bytes
str | Nonebytesc                ^    t          | t                    r| n|                     |pd          S )zE
    Coerce str/bytes into a strictly byte-wise HTTP header key.
    ascii)
isinstancer>   encode)r;   r0   s     r9   _normalize_header_keyrC   C   s.     S%((M33cjj9LW.M.MM    valuec                    t          | t                    r| S t          | t                    st          dt	          |                      |                     |pd          S )zG
    Coerce str/bytes into a strictly byte-wise HTTP header value.
    z'Header value must be str or bytes, not r@   )rA   r>   r1   	TypeErrortyperB   )rE   r0   s     r9   _normalize_header_valuerI   J   sb     % eS!! QO$u++OOPPP<<+G,,,rD   content_typec                t    t           j                                        }| |d<   |                    d           S )Ncontent-type)failobj)emailmessageMessageget_content_charset)rJ   msgs     r9   _parse_content_type_charsetrS   U   s8     -


!
!C&C""4"000rD   list[dict[str, str]]c                   g }d}|                      |          } | s|S t          j        d|           D ]}	 |                    dd          \  }}n# t          $ r |d}}Y nw xY wd|                     d          i}|                    d          D ]X}	 |                    d          \  }} n# t          $ r Y  n0w xY w|                      |          ||                     |          <   Y|                    |           |S )	a7  
    Returns a list of parsed link headers, for more info see:
    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link
    The generic syntax of those is:
    Link: < uri-reference >; param1=value1; param2="value2"
    So for instance:
    Link; '<http:/.../front.jpeg>; type="image/jpeg",<http://.../back.jpeg>;'
    would return
        [
            {"url": "http:/.../front.jpeg", "type": "image/jpeg"},
            {"url": "http://.../back.jpeg"},
        ]
    :param value: HTTP Link entity-header field
    :return: list of parsed link headers
    z '"z, *<;r    urlz<> '"=)stripresplit
ValueErrorappend)	rE   linksreplace_charsvalrX   paramslinkparamr;   s	            r9   _parse_header_linksre   ]   s=     #%EMKK&&E x&&  	"))C++KC 	" 	" 	"rCCC	"syy**+\\#&& 	H 	HE"[[--
UU   -2[[-G-GD=))**TLs#   AA! A!B,,
B:9B:items4typing.Iterable[tuple[typing.AnyStr, typing.AnyStr]]4typing.Iterator[tuple[typing.AnyStr, typing.AnyStr]]c              #     K   | D ]D\  }}t          |                                          t          v rt          d|          }||fV  Ed S )Nz[secure])match_type_of)r*   lowerSENSITIVE_HEADERSr)   )rf   kvs      r9   _obfuscate_sensitive_headersro      sb         1!'')) 111
!<<<Ad



 rD   c                      e Zd ZdZ	 	 d.d/d	Zed0d            Zej        d1d            Zed2d            Zd3dZ	d4dZ
d5dZd6dZd7d8dZd9d:d Zd7d;d!Zd<d"Zd=d#Zd>d$Zd?d%Zd@d&ZdAd(ZdBd*ZdCd,Zd0d-ZdS )Dr,   z9
    HTTP headers, as a case-insensitive multi-dict.
    NheadersHeaderTypes | Noner0   r=   r2   Nonec                0   g | _         t          |t                    rt          |j                   | _         nt          |t                    rj|                                D ]T\  }}t          ||          }t          ||          }| j                             ||	                                |f           UnY|W|D ]T\  }}t          ||          }t          ||          }| j                             ||	                                |f           U|| _
        d S N)_listrA   r,   listr   rf   rC   rI   r^   rk   	_encoding)selfrq   r0   rm   rn   	bytes_keybytes_values          r9   __init__zHeaders.__init__   s   
 
gw'' 	Ogm,,DJJ)) 		O O O11!X>>	5aBB
!!9ioo.?.?"MNNNNO   O O11!X>>	5aBB
!!9ioo.?.?"MNNNN!rD   r1   c                    | j         ^dD ]T}| j        D ]A\  }}	 |                    |           |                    |           1# t          $ r Y  nw xY w|| _          nUd| _         | j         S )zn
        Header encoding is mandated as ascii, but we allow fallbacks to utf-8
        or iso-8859-1.
        N)r@   utf-8z
iso-8859-1)rx   rawdecodeUnicodeDecodeError)ry   r0   r;   rE   s       r9   r0   zHeaders.encoding   s     >!. . ."&( 
 
JC

8,,,X....-   
 &.DNE  ".~s   *A
AArE   c                    || _         d S ru   )rx   ry   rE   s     r9   r0   zHeaders.encoding   s    rD   list[tuple[bytes, bytes]]c                $    d | j         D             S )zH
        Returns a list of the raw header items, as byte pairs.
        c                    g | ]
\  }}}||fS  r   ).0raw_key_rE   s       r9   
<listcomp>zHeaders.raw.<locals>.<listcomp>   s$    EEE%6Wa% EEErD   rv   ry   s    r9   r   zHeaders.raw   s    
 FE$*EEEErD   typing.KeysView[str]c                N      fd j         D                                             S )Nc                N    i | ]!\  }}}|                     j                  d "S ru   r   r0   r   r   r;   rE   ry   s       r9   
<dictcomp>z Headers.keys.<locals>.<dictcomp>   s/    PPPMAsE

4=))4PPPrD   )rv   keysr   s   `r9   r   zHeaders.keys   s+    PPPPTZPPPUUWWWrD   typing.ValuesView[str]c                    i }| j         D ]W\  }}}|                    | j                  }|                    | j                  }||v r||xx         d| z  cc<   R|||<   X|                                S )N, )rv   r   r0   valuesry   values_dictr   r;   rE   str_key	str_values          r9   r   zHeaders.values   s    &(!Z 	1 	1MAsEjj//GT]33I+%%G$$$(8Y(8(88$$$$'0G$$!!###rD   typing.ItemsView[str, str]c                    i }| j         D ]W\  }}}|                    | j                  }|                    | j                  }||v r||xx         d| z  cc<   R|||<   X|                                S )z
        Return `(key, value)` items of headers. Concatenate headers
        into a single comma separated value when a key occurs multiple times.
        r   )rv   r   r0   rf   r   s          r9   rf   zHeaders.items   s    
 ')!Z 	1 	1MAsEjj//GT]33I+%%G$$$(8Y(8(88$$$$'0G$$  """rD   list[tuple[str, str]]c                *      fd j         D             S )z
        Return a list of `(key, value)` pairs of headers. Allow multiple
        occurrences of the same key without concatenating into a single
        comma separated value.
        c                    g | ]:\  }}}|                     j                  |                     j                  f;S r   r   r   s       r9   r   z'Headers.multi_items.<locals>.<listcomp>   sP     
 
 
3 ZZ&&T](C(CD
 
 
rD   r   r   s   `r9   multi_itemszHeaders.multi_items   s0    
 
 
 
!%
 
 
 	
rD   r;   default
typing.Anyc                8    	 | |         S # t           $ r |cY S w xY w)z
        Return a header value. If multiple occurrences of the header occur
        then concatenate them together with commas.
        )KeyError)ry   r;   r   s      r9   getzHeaders.get   s5    
	9 	 	 	NNN	s   
 Fsplit_commasr3   	list[str]c                    |                                                      j                   fd j        D             }|s|S g }|D ]4}|                    d |                    d          D                        5|S )z
        Return a list of all header values for a given key.
        If `split_commas=True` is passed, then any comma separated header
        values are split into multiple return strings.
        c                |    g | ]8\  }}}|                                 k    |                    j                  9S r   )rk   r   r0   )r   r   item_key
item_valueget_header_keyry   s       r9   r   z$Headers.get_list.<locals>.<listcomp>  sN     
 
 
'8Z~~>11 dm,,111rD   c                6    g | ]}|                                 S r   )rZ   )r   items     r9   r   z$Headers.get_list.<locals>.<listcomp>  s      K K K$ K K KrD   ,)rk   rB   r0   rv   extendr\   )ry   r;   r   r   split_valuesrE   r   s   `     @r9   get_listzHeaders.get_list   s     ++DM::
 
 
 
 
+/:
 
 
  	M 	M 	ME K K%++c:J:J K K KLLLLrD   c                    t          |          }|                                D ]}|| v r|                     |           | j                            |j                   d S ru   )r,   r   poprv   r   )ry   rq   r;   s      r9   updatezHeaders.update  s]    '""<<>> 	 	Cd{{
'-(((((rD   c                .    t          | | j                  S )Nr8   )r,   r0   r   s    r9   copyzHeaders.copy  s    tdm4444rD   c                     |                                                      j                   fd j        D             }|rd                    |          S t          |          )z
        Return a single header value.

        If there are multiple headers with the same key, then we concatenate
        them with commas. See: https://tools.ietf.org/html/rfc7230#section-3.2.2
        c                X    g | ]&\  }}}|k    |                     j                  'S r   r   )r   r   
header_keyheader_valuenormalized_keyry   s       r9   r   z'Headers.__getitem__.<locals>.<listcomp>%  sD     
 
 
+:|^++ ..+++rD   r   )rk   rB   r0   rv   joinr   )ry   r;   rf   r   s   `  @r9   __getitem__zHeaders.__getitem__  sz     ++DM::
 
 
 
 
/3z
 
 
  	$99U###smmrD   c                   |                     | j        pd          }|                     | j        pd          }|                                fdt          | j                  D             }t          |dd                   D ]
}| j        |= |r|d         }||f| j        |<   dS | j                            ||f           dS )zs
        Set the header `key` to `value`, removing any duplicate entries.
        Retains insertion order.
        r~   c                .    g | ]\  }\  }}}|k    |S r   r   )r   idxr   r   
lookup_keys       r9   r   z'Headers.__setitem__.<locals>.<listcomp>9  s9     
 
 
%%a1:%% %%%rD   r   Nr   )rB   rx   rk   	enumeraterv   reversedr^   )ry   r;   rE   set_key	set_valuefound_indexesr   r   s          @r9   __setitem__zHeaders.__setitem__0  s    
 **T^6w77LL!:7;;	]]__

 
 
 
)24:)>)>
 
 
 M!""-.. 	  	 C
3 	@"C&
I>DJsOOOJw
I>?????rD   c                    |                                                     | j                  fdt          | j                  D             }|st          |          t          |          D ]
}| j        |= dS )z*
        Remove the header `key`.
        c                R    g | ]#\  }\  }}}|                                 k    !|$S r   )rk   )r   r   r   r   del_keys       r9   r   z'Headers.__delitem__.<locals>.<listcomp>N  sC     
 
 
%%a1~~7** ***rD   N)rk   rB   r0   r   rv   r   r   )ry   r;   pop_indexesr   r   s       @r9   __delitem__zHeaders.__delitem__H  s     ))++$$T]33
 
 
 
)24:)>)>
 
 
  	 3--K(( 	  	 C
3	  	 rD   c                    |                                                     | j                  }|d | j        D             v S )Nc                    g | ]\  }}}|	S r   r   )r   r   r;   s      r9   r   z(Headers.__contains__.<locals>.<listcomp>\  s    >>>iaac>>>rD   )rk   rB   r0   rv   )ry   r;   r   s      r9   __contains__zHeaders.__contains__Z  s;    YY[[''66
>>4:>>>>>rD   typing.Iterator[typing.Any]c                D    t          |                                           S ru   )iterr   r   s    r9   __iter__zHeaders.__iter__^  s    DIIKK   rD   intc                *    t          | j                  S ru   )lenrv   r   s    r9   __len__zHeaders.__len__a  s    4:rD   otherc                    	 t          |          }n# t          $ r Y dS w xY wd | j        D             }d |j        D             }t          |          t          |          k    S )NFc                    g | ]
\  }}}||fS r   r   r   r   r;   rE   s       r9   r   z"Headers.__eq__.<locals>.<listcomp>j  s"    BBBmaec5\BBBrD   c                    g | ]
\  }}}||fS r   r   r   s       r9   r   z"Headers.__eq__.<locals>.<listcomp>k  s"    LLL}q#usElLLLrD   )r,   r]   rv   sorted)ry   r   other_headers	self_list
other_lists        r9   __eq__zHeaders.__eq__d  s    	#ENNMM 	 	 	55	 CBtzBBB	LL8KLLL
i  F:$6$666s    
  c                .   | j         j        }d}| j        dk    r
d| j        }t          t	          |                                                     }t          |          }t          |          t          |          k    }|r
| d|| dS | d|| dS )NrW   r@   z, encoding=())	__class____name__r0   rw   ro   r   dictr   )ry   
class_nameencoding_stras_listas_dictno_duplicate_keyss         r9   __repr__zHeaders.__repr__n  s    ^,
=G##:::L3D4D4D4F4FGGHHw--LLCLL8 	> ==7=l====99w9,9999rD   NN)rq   rr   r0   r=   r2   rs   r2   r1   rE   r1   r2   rs   )r2   r   )r2   r   )r2   r   )r2   r   )r2   r   ru   )r;   r1   r   r   r2   r   )F)r;   r1   r   r3   r2   r   )rq   rr   r2   rs   )r2   r,   )r;   r1   r2   r1   r;   r1   rE   r1   r2   rs   )r;   r1   r2   rs   )r;   r   r2   r3   )r2   r   r2   r   )r   r   r2   r3   )r   
__module____qualname____doc__r|   propertyr0   setterr   r   r   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rD   r9   r,   r,      s         '+#" " " " ",    X0 _   _ F F F XFX X X X	$ 	$ 	$ 	$# # # #	
 	
 	
 	
        ,) ) ) ) )5 5 5 5   (@ @ @ @0       $? ? ? ?! ! ! !   7 7 7 7: : : : : :rD   r,   c            
      t    e Zd Zdddddddddd	d(dZd)dZed*d             Zd*d!Zd*d"Zd+d#Z	d,d%Z
d-d'ZdS ).r-   N)	rb   rq   cookiescontentdatafilesjsonstream
extensionsmethodr1   rX   	URL | strrb   QueryParamTypes | Nonerq   rr   r   CookieTypes | Noner   RequestContent | Noner   RequestData | Noner   RequestFiles | Noner   typing.Any | Noner  'SyncByteStream | AsyncByteStream | Noner  RequestExtensions | Noner2   rs   c       	           |                                 | _        |t          |          nt          ||          | _        t	          |          | _        |i nt          |          | _        |r"t          |          	                    |            |
| j        
                    d          }t          ||||	t          |r|                    | j        j                  nd                     \  }}
|                     |           |
| _        t#          |
t$                    r|                                  d S d S |
| _        d S )N)rb   rL   )rJ   )r   r   r   r   boundary)upperr  r(   rX   r,   rq   r   r  r+   set_cookie_headerr   r
   r   rB   r0   _preparer  rA   r   read)ry   r  rX   rb   rq   r   r   r   r   r   r  r  rJ   s                r9   r|   zRequest.__init__  sH    llnn%~3s8883s63J3J3Jw'' * 2""Z8H8H 	5G..t444>'+|'7'7'G'GL,A#"!4!4T\5J!K!K!K  
 
 
OGV MM'""" DK&*-- 		 " !DKKKrD   default_headersdict[str, str]c                   |                                 D ]B\  }}|                                dk    r
d| j        v r'| j                            ||           Cg }d| j        v }d| j        v pd| j        v }|s-| j        j        r!|                    d| j        j        f           |s| j        dv r|                    d           t          || j        j
        z             | _        d S )Ntransfer-encodingzContent-LengthHostzTransfer-Encodings   Host)POSTPUTPATCH)s   Content-Length   0)rf   rk   rq   
setdefaultrX   hostr^   netlocr  r,   r   )ry   r  r;   rE   auto_headershas_hosthas_content_lengths          r9   r  zRequest._prepare  s   )//11 	0 	0JCyy{{1116F$,6V6VL##C////24T\),S0Ct|0S 	  	<DHM 	<$(/ :;;;! 	;dk5M&M&M 9:::|dl.>>??rD   r>   c                L    t          | d          st                      | j        S N_content)hasattrr   r$  r   s    r9   r   zRequest.content  s(    tZ(( 	# """}rD   c                   t          | d          sst          | j        t          j                  sJ d                    | j                  | _        t          | j        t                    st          | j                  | _        | j        S )6
        Read and return the request content.
        r$  rD   )r%  rA   r  typingIterabler   r$  r   r   s    r9   r  zRequest.read  st     tZ(( 	8dk6?;;;;;HHT[11DMdk:66 8 )77}rD   c                :  K   t          | d          st          | j        t          j                  sJ d                    d | j        2              d{V           | _        t          | j        t                    st          | j                  | _        | j        S )r'  r$  rD   c                "   K   g | 3 d {V }|
6 S ru   r   r   parts     r9   r   z!Request.aread.<locals>.<listcomp>  s.      %I%I%I%I%I%I%I%ITd%I%I%I%I   N)r%  rA   r  r(  AsyncIterabler   r$  r   r   s    r9   areadzRequest.aread  s       tZ(( 	8dk6+?@@@@@HH%I%IT[%I%I%I%I%I%I%I%I%IJJDMdk:66 8 )77}rD   c                d    | j         j        }t          | j                  }d| d| j        d|dS )N<r   r   z)>)r   r   r1   rX   r  )ry   r   rX   s      r9   r   zRequest.__repr__  s<    ^,
$(mm::::::::::rD   dict[str, typing.Any]c                H    d | j                                         D             S )Nc                "    i | ]\  }}|d v	||S ))r  r  r   r   namerE   s      r9   r   z(Request.__getstate__.<locals>.<dictcomp>  s4     
 
 
e333 %333rD   __dict__rf   r   s    r9   __getstate__zRequest.__getstate__  1    
 
#}2244
 
 
 	
rD   statec                    |                                 D ]\  }}t          | ||           i | _        t                      | _        d S ru   )rf   setattrr  r	   r  ry   r<  r7  rE   s       r9   __setstate__zRequest.__setstate__  sJ     ;;== 	' 	'KD%D$&&&&&((rD   )r  r1   rX   r  rb   r  rq   rr   r   r  r   r  r   r  r   r	  r   r
  r  r  r  r  r2   rs   r  r  r2   rs   r2   r>   r   r2   r3  r<  r3  r2   rs   )r   r   r   r|   r  r   r   r  r0  r   r:  r@  r   rD   r9   r-   r-   ~  s         *.&*&*)-#'%)"&:>/38! 8! 8! 8! 8! 8!t@ @ @ @*    X
      ; ; ; ;

 
 
 
) ) ) ) ) )rD   r-   c                     e Zd Zddddddddddd
d[dZd\dZed]d             Zej        d^d"            Zed_d$            Zej        d`d&            Zedad(            Z	edad)            Z
edbd+            Zedcd-            Zedad.            Zeddd/            Zej        ded0            Zeddd1            Zdfd3Zedgd5            Zedgd6            Zedgd7            Zedgd8            Zedgd9            Zedgd:            Zedgd;            Zdhd<Zdid>Zedjd@            ZedkdB            ZedldC            ZdadDZdmdFZdndHZdcdIZ dodpdMZ!dodqdOZ"drdPZ#dodpdQZ$dsdRZ%dcdSZ&	 dodtdUZ'	 dodudWZ(dvdXZ)	 dodtdYZ*dsdZZ+dS )wr.   Nr~   )
rq   r   texthtmlr   r  requestr  historydefault_encodingstatus_coder   rq   rr   r   ResponseContent | NonerF  r=   rG  r   r   r  r  rH  Request | Noner  ResponseExtensions | NonerI  list[Response] | NonerJ  #str | typing.Callable[[bytes], str]r2   rs   c       
           || _         t          |          | _        || _        d | _        |	i nt          |	          | _        |
g nt          |
          | _        d| _	        d| _
        || _        |[t          ||||          \  }}|                     |           || _        t          |t                     r|                                  n|| _        d| _        d S )NFr   )rK  r,   rq   _requestnext_requestr   r  rw   rI  	is_closedis_stream_consumedrJ  r   r  r  rA   r   r  _num_bytes_downloaded)ry   rK  rq   r   rF  rG  r   r  rH  r  rI  rJ  s               r9   r|   zResponse.__init__  s     'w''(/ -1 * 2""Z8H8H$_rr$w--"' 0>-gtT4HHOGVMM'""" DK&*-- 		 !DK%&"""rD   r  r  c                    |                                 D ]B\  }}|                                dk    r
d| j        v r'| j                            ||           Cd S )Nr  zcontent-length)rf   rk   rq   r  )ry   r  r;   rE   s       r9   r  zResponse._prepare;  sj    )//11 	0 	0JCyy{{1116F$,6V6VL##C////		0 	0rD   datetime.timedeltac                N    t          | d          st          d          | j        S )ze
        Returns the time taken for the complete request/response
        cycle to complete.
        _elapsedzK'.elapsed' may only be accessed after the response has been read or closed.)r%  RuntimeErrorrZ  r   s    r9   elapsedzResponse.elapsedB  s7     tZ(( 	+   }rD   r\  c                    || _         d S ru   )rZ  )ry   r\  s     r9   r\  zResponse.elapsedO  s    rD   r-   c                <    | j         t          d          | j         S )zR
        Returns the request instance associated to the current response.
        Nz7The request instance has not been set on this response.)rR  r[  r   s    r9   rH  zResponse.requestS  s+    
 = I   }rD   rE   c                    || _         d S ru   )rR  r   s     r9   rH  zResponse.request^  s    rD   r1   c                n    	 | j         d         }|                    dd          S # t          $ r Y dS w xY w)Nhttp_versionr@   ignoreerrorszHTTP/1.1)r  r   r   )ry   ra  s     r9   ra  zResponse.http_versionb  sS    	A"&/."AL  &&wx&@@@  	 	 	::	s   & 
44c                    	 | j         d         }|                    dd          S # t          $ r t          j        | j                  cY S w xY w)Nreason_phraser@   rb  rc  )r  r   r   r   get_reason_phraserK  )ry   rf  s     r9   rf  zResponse.reason_phrasek  sf    	B#'??#CM !'''AAA  	= 	= 	=*4+;<<<<<	=s   & #AAr(   c                    | j         j        S )zA
        Returns the URL for which the request was made.
        )rH  rX   r   s    r9   rX   zResponse.urlt  s    
 |rD   r>   c                L    t          | d          st                      | j        S r#  )r%  r   r$  r   s    r9   r   zResponse.content{  s(    tZ(( 	$!###}rD   c                   t          | d          sn| j        }|sd| _        n]t          | j        pd          }d                    |                    | j                  |                                g          | _        | j        S )N_textrW   r~   r8   )r%  r   rk  r   r0   r   r   flush)ry   r   decoders      r9   rF  zResponse.text  s{    tW%% 	VlG V

%t}/GHHHWWgnnT\&B&BGMMOO%TUU
zrD   c                
   t          | d          sm| j        }|t          |          sLt          | j        t
                    r| j        }n*t          | d          r|                     | j                  }|pd| _        | j        S )a  
        Return an encoding to use for decoding the byte content into text.
        The priority for determining this is given by...

        * `.encoding = <>` has been set explicitly.
        * The encoding as specified by the charset parameter in the Content-Type header.
        * The encoding as determined by `default_encoding`, which may either be
          a string like "utf-8" indicating the encoding to use, or may be a callable
          which enables charset autodetection.
        rx   Nr$  r~   )r%  charset_encodingr:   rA   rJ  r1   r$  rx   )ry   r0   s     r9   r0   zResponse.encoding  s     t[)) 	1,H'9('C'Cd3S99 D#4HHT:.. D#44T]CCH%0DN~rD   c                R    t          | d          rt          d          || _        dS )z
        Set the encoding to use for decoding the byte content into text.

        If the `text` attribute has been accessed, attempting to set the
        encoding will throw a ValueError.
        rk  z?Setting encoding after `text` has been accessed is not allowed.N)r%  r]   rx   r   s     r9   r0   zResponse.encoding  s8     4!! 	Q   rD   c                \    | j                             d          }|dS t          |          S )zO
        Return the encoding, as specified by the Content-Type header.
        zContent-TypeN)rq   r   rS   )ry   rJ   s     r9   ro  zResponse.charset_encoding  s2    
 |''774*<888rD   r   c                   t          | d          sg }| j                            dd          }|D ]c}|                                                                }	 t
          |         }|                     |                       T# t          $ r Y `w xY wt          |          dk    r|d         | _	        n<t          |          dk    rt          |          | _	        nt                      | _	        | j	        S )z
        Returns a decoder instance which can be used to decode the raw byte
        content, depending on the Content-Encoding used in the response.
        _decoderzcontent-encodingT)r   r   r   )children)r%  rq   r   rZ   rk   r   r^   r   r   rs  r   r   )ry   decodersr   rE   decoder_clss        r9   _get_content_decoderzResponse._get_content_decoder  s   
 tZ(( 	2-/H\**+=D*QQF  ++--"4U";KOOKKMM2222   H 8}}!! (X"" ,h ? ? ? / 1 1}s   *B
BBr3   c                4    t          j        | j                  S )zU
        A property which is `True` for 1xx status codes, `False` otherwise.
        )r   is_informationalrK  r   s    r9   ry  zResponse.is_informational  s    
 %d&6777rD   c                4    t          j        | j                  S )zU
        A property which is `True` for 2xx status codes, `False` otherwise.
        )r   
is_successrK  r   s    r9   r{  zResponse.is_success  s    
  0111rD   c                4    t          j        | j                  S )a  
        A property which is `True` for 3xx status codes, `False` otherwise.

        Note that not all responses with a 3xx status code indicate a URL redirect.

        Use `response.has_redirect_location` to determine responses with a properly
        formed URL redirection.
        )r   is_redirectrK  r   s    r9   r}  zResponse.is_redirect  s      !1222rD   c                4    t          j        | j                  S )zU
        A property which is `True` for 4xx status codes, `False` otherwise.
        )r   is_client_errorrK  r   s    r9   r  zResponse.is_client_error      
 $T%5666rD   c                4    t          j        | j                  S )zU
        A property which is `True` for 5xx status codes, `False` otherwise.
        )r   is_server_errorrK  r   s    r9   r  zResponse.is_server_error  r  rD   c                4    t          j        | j                  S )z]
        A property which is `True` for 4xx and 5xx status codes, `False` otherwise.
        )r   is_errorrK  r   s    r9   r  zResponse.is_error  s    
 ~d.///rD   c                    | j         t          j        t          j        t          j        t          j        t          j        fv od| j        v S )zs
        Returns True for 3xx responses with a properly formed URL redirection,
        `False` otherwise.
        Location)rK  r   MOVED_PERMANENTLYFOUND	SEE_OTHERTEMPORARY_REDIRECTPERMANENT_REDIRECTrq   r   s    r9   has_redirect_locationzResponse.has_redirect_location  sH      '(( + dl*	
rD   c                    | j         }|t          d          | j        r| S | j        rd}nd}| j        dz  }dddd	d
}|                    |d          }|                    | |          }t          |||           )z>
        Raise the `HTTPStatusError` if one occurred.
        NzYCannot call `raise_for_status` as the request instance has not been set on this response.z{error_type} '{0.status_code} {0.reason_phrase}' for url '{0.url}'
Redirect location: '{0.headers[location]}'
For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/{0.status_code}z{error_type} '{0.status_code} {0.reason_phrase}' for url '{0.url}'
For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/{0.status_code}d   zInformational responsezRedirect responsezClient errorzServer error)r            zInvalid status code)
error_type)rH  response)rR  r[  r{  r  rK  r   formatr   )ry   rH  rO   status_classerror_typesr  s         r9   raise_for_statuszResponse.raise_for_status  s     -?>  
 ? 	K% 
	w Gw 
 '3.'"	
 
 !__\3HII
..*.==gwFFFFrD   kwargsc                0    t          j        | j        fi |S ru   )jsonlibloadsr   )ry   r  s     r9   r   zResponse.json?  s    }T\44V444rD   r+   c                    t          | d          s-t                      | _        | j                            |            | j        S )N_cookies)r%  r+   r  extract_cookiesr   s    r9   r   zResponse.cookiesB  s=    tZ(( 	0#IIDMM))$///}rD    dict[str | None, dict[str, str]]c                p    | j                             d          }|i S d t          |          D             S )zI
        Returns the parsed header links of the response, if any
        rc   Nc                d    i | ]-}|                     d           p|                     d          |.S )relrX   )r   )r   rc   s     r9   r   z"Response.links.<locals>.<dictcomp>R  sC     
 
 
 XXe__/$
 
 
rD   )rq   r   re   )ry   headers     r9   r_   zResponse.linksI  sL    
 !!&))>I
 
+F33
 
 
 	
rD   c                    | j         S ru   )rV  r   s    r9   num_bytes_downloadedzResponse.num_bytes_downloadedW  s    ))rD   c                (    d| j          d| j         dS )Nz<Response [ ]>)rK  rf  r   s    r9   r   zResponse.__repr__[  s!    FT-FF0BFFFFrD   r3  c                H    d | j                                         D             S )Nc                "    i | ]\  }}|d v	||S ))r  r  rT  rs  r   r6  s      r9   r   z)Response.__getstate__.<locals>.<dictcomp>_  s4     
 
 
eLLL %LLLrD   r8  r   s    r9   r:  zResponse.__getstate__^  r;  rD   r<  c                    |                                 D ]\  }}t          | ||           d| _        i | _        t	                      | _        d S )NT)rf   r>  rT  r  r	   r  r?  s       r9   r@  zResponse.__setstate__e  sQ     ;;== 	' 	'KD%D$&&&&&((rD   c                    t          | d          s,d                    |                                           | _        | j        S )7
        Read and return the response content.
        r$  rD   )r%  r   
iter_bytesr$  r   s    r9   r  zResponse.readl  s;     tZ(( 	8HHT__%6%677DM}rD   
chunk_size
int | Nonetyping.Iterator[bytes]c              #    K   t          | d          rb|t          | j                  n|}t          dt          | j                  t	          |d                    D ]}| j        |||z            V  dS |                                 }t          |          }t          | j                  5  | 	                                D ]3}|
                    |          }|
                    |          D ]}|V  4|                                }|
                    |          D ]}|V  |                                D ]}|V  	 ddd           dS # 1 swxY w Y   dS z
        A byte-iterator over the decoded response content.
        This allows us to handle gzip, deflate, brotli, and zstd encoded responses.
        r$  Nr   r   r  rH  )r%  r   r$  rangemaxrw  r   r   rR  iter_rawr   rl  ry   r  irm  chunker	raw_bytesdecodedchunks           r9   r  zResponse.iter_bytest  s     
 4$$ 	 /9/AT]+++zJ1c$-00#j!2D2DEE 8 8mAJ$6777778 8 //11G!Z888G 777 	  	 !% $ $I%nnY77G!(!8!8 $ $#$!--//$^^G44    EKKKK$]]__    EKKKK 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   .BEEEtyping.Iterator[str]c              #    K   t          | j        pd          }t          |          }t          | j                  5  |                                 D ]3}|                    |          }|                    |          D ]}|V  4|                                }|                    |          D ]}|V  |                                D ]}|V  	 ddd           dS # 1 swxY w Y   dS z
        A str-iterator over the decoded response content
        that handles both gzip, deflate, etc but also detects the content's
        string encoding.
        r~   r8   r  r  N)r   r0   r   r   rR  r  r   rl  ry   r  rm  r  byte_contenttext_contentr  s          r9   	iter_textzResponse.iter_text  sU      t}'?@@@444T]333 		 		 $ 1 1    &~~l;;$^^L99    EKKKK "==??L 55     		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   BC!!C%(C%c              #     K   t                      }t          | j                  5  |                                 D ]}|                    |          D ]}|V  |                                D ]}|V  	 d d d            d S # 1 swxY w Y   d S Nr  )r   r   rR  r  r   rl  ry   rm  rF  lines       r9   
iter_lineszResponse.iter_lines  s      --T]333 	 	((  #NN400  DJJJJ  



		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ABB
Bc              #  ,  K   | j         rt                      | j        rt                      t	          | j        t                    st          d          d| _         d| _        t          |          }t          | j                  5  | j        D ];}| xj        t          |          z  c_        |                    |          D ]}|V  <	 ddd           n# 1 swxY w Y   |                                D ]}|V  |                                  dS )@
        A byte-iterator over the raw response content.
        z5Attempted to call a sync iterator on an async stream.Tr   r  r  N)rU  r   rT  r   rA   r  r'   r[  rV  r   r   rR  r   r   rl  closery   r  r  raw_stream_bytesr  s        r9   r  zResponse.iter_raw  st      " 	# """> 	!.. $+~66 	XVWWW"&%&"444T]333 	  	 $(K     **c2B.C.CC**$^^,<==    EKKKK  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  ]]__ 	 	EKKKK

s   	ACC!Cc                   t          | j        t                    st          d          | j        sPd| _        t          | j                  5  | j                                         ddd           dS # 1 swxY w Y   dS dS )
        Close the response and release the connection.
        Automatically called if the response body is read to completion.
        z3Attempted to call an sync close on an async stream.Tr  N)rA   r  r'   r[  rT  r   rR  r  r   s    r9   r  zResponse.close  s    
 $+~66 	VTUUU~ 	$!DN 777 $ $!!###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$s   A44A8;A8c                   K   t          | d          s<d                    d |                                 2              d{V           | _        | j        S )r  r$  rD   c                "   K   g | 3 d {V }|
6 S ru   r   r,  s     r9   r   z"Response.aread.<locals>.<listcomp>  s.      %P%P%P%P%P%P%P%PTd%P%P%P%Pr.  N)r%  r   aiter_bytesr$  r   s    r9   r0  zResponse.aread  sc       tZ(( 	RHH%P%PT=M=M=O=O%P%P%P%P%P%P%P%P%PQQDM}rD   typing.AsyncIterator[bytes]c                 K   t          | d          rc|t          | j                  n|}t          dt          | j                  t	          |d                    D ]}| j        |||z            W V  dS |                                 }t          |          }t          | j                  5  | 	                                2 3 d{V }|
                    |          }|
                    |          D ]}|W V  :6 |                                }|
                    |          D ]}|W V  |                                D ]}|W V  	 ddd           dS # 1 swxY w Y   dS r  )r%  r   r$  r  r  rw  r   r   rR  	aiter_rawr   rl  r  s           r9   r  zResponse.aiter_bytes  s      4$$ 	 /9/AT]+++zJ1c$-00#j!2D2DEE 8 8mAJ$67777778 8 //11G!Z888G 777 	  	 '+~~'7'7 $ $ $ $ $ $ $)%nnY77G!(!8!8 $ $#$ (8 "--//$^^G44    EKKKKK$]]__    EKKKKK 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   /EC>
BEE!Etyping.AsyncIterator[str]c                 K   t          | j        pd          }t          |          }t          | j                  5  |                                 2 3 d{V }|                    |          }|                    |          D ]}|W V  :6 |                                }|                    |          D ]}|W V  |                                D ]}|W V  	 ddd           dS # 1 swxY w Y   dS r  )r   r0   r   r   rR  r  r   rl  r  s          r9   
aiter_textzResponse.aiter_text  s}      t}'?@@@444T]333 		 		&*&6&6&8&8              l&~~l;;$^^L99    EKKKKK  '9 #==??L 55     		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   C*BBC**C.1C.c               0  K   t                      }t          | j                  5  |                                 2 3 d {V }|                    |          D ]}|W V  %6 |                                D ]}|W V  	 d d d            d S # 1 swxY w Y   d S r  )r   r   rR  r  r   rl  r  s       r9   aiter_lineszResponse.aiter_lines  s     --T]333 	 	"oo//       d#NN400  DJJJJJ 0    




		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BA <BBBc               H  K   | j         rt                      | j        rt                      t	          | j        t                    st          d          d| _         d| _        t          |          }t          | j                  5  | j        2 3 d{V }| xj        t          |          z  c_        |                    |          D ]}|W V  B6 	 ddd           n# 1 swxY w Y   |                                D ]}|W V  |                                  d{V  dS )r  z6Attempted to call an async iterator on an sync stream.Tr   r  r  N)rU  r   rT  r   rA   r  r   r[  rV  r   r   rR  r   r   rl  acloser  s        r9   r  zResponse.aiter_raw  s      " 	# """> 	!.. $+77 	YWXXX"&%&"444T]333 	  	 *.+              &**c2B.C.CC**$^^,<==    EKKKKK  +6+	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  ]]__ 	 	EKKKKKkkmms   	C!C=C!!C%(C%c                  K   t          | j        t                    st          d          | j        sVd| _        t          | j                  5  | j                                         d{V  ddd           dS # 1 swxY w Y   dS dS )r  z3Attempted to call an async close on an sync stream.Tr  N)rA   r  r   r[  rT  r   rR  r  r   s    r9   r  zResponse.aclose)  s      
 $+77 	VTUUU~ 	+!DN 777 + +k((*********+ + + + + + + + + + + + + + + + + +	+ 	+s    A<<B B )rK  r   rq   rr   r   rL  rF  r=   rG  r=   r   r   r  r  rH  rM  r  rN  rI  rO  rJ  rP  r2   rs   rA  )r2   rX  )r\  rX  r2   rs   )r2   r-   )rE   r-   r2   rs   r   )r2   r(   rB  )r2   r=   r   )r2   r   r2   r3   )r2   r.   )r  r   r2   r   )r2   r+   )r2   r  r   rC  rD  ru   )r  r  r2   r  )r  r  r2   r  r2   r  )r2   rs   )r  r  r2   r  )r  r  r2   r  )r2   r  ),r   r   r   r|   r  r   r\  r   rH  ra  rf  rX   r   rF  r0   ro  rw  ry  r{  r}  r  r  r  r  r  r   r   r_   r  r   r:  r@  r  r  r  r  r  r  r0  r  r  r  r  r  r   rD   r9   r.   r.     s       
 '+*.:>"&04)-@G5' 5' 5' 5' 5' 5'n0 0 0 0 
 
 
 X
 ^      ^     X ^   ^ A A A XA B B B XB       X     X
    X    X* _   _ 9 9 9 X9   2 8 8 8 X8 2 2 2 X2 	3 	3 	3 X	3 7 7 7 X7 7 7 7 X7 0 0 0 X0 
 
 
 X
,#G #G #G #GJ5 5 5 5    X 
 
 
 X
 * * * X*G G G G
 
 
 
) ) ) )            .    &       4$ $ $ $    (,         4 (,    *    (,    8+ + + + + +rD   r.   c                      e Zd ZdZd*d+dZd,d
Zd-dZd.d/dZ	 	 	 d0d1dZ	 	 d2d3dZ	d2d4dZ
d*d+dZd5dZd6dZd7dZd8d Zd9d"Zd:d$Zd;d%Z G d& d'ej        j                  Z G d( d)          ZdS )<r+   z-
    HTTP Cookies, as a mutable mapping.
    Nr   r  r2   rs   c                &   |t          |t                    r\t                      | _        t          |t                    r0|                                D ]\  }}|                     ||           d S d S t          |t                    r3t                      | _        |D ]\  }}|                     ||           d S t          |t                    r9t                      | _        |j        D ]}| j                            |           d S || _        d S ru   )	rA   r   r   jarrf   setrw   r+   
set_cookie)ry   r   r;   rE   cookies        r9   r|   zCookies.__init__<  s'   ?j$77? {{DH'4(( )")--// ) )JCHHS%(((() )) )&& 		 {{DH% % %
Ue$$$$% %)) 	 {{DH!+ , ,##F++++, , DHHHrD   r  r.   c                    |                      |          }|                     |j                  }| j                            ||           dS )zO
        Loads any cookies based on the response `Set-Cookie` headers.
        N)_CookieCompatResponse_CookieCompatRequestrH  r  r  )ry   r  urllib_responseurllib_requests       r9   r  zCookies.extract_cookiesM  sK     44X>>2283CDD  .AAAAArD   rH  r-   c                d    |                      |          }| j                            |           dS )zM
        Sets an appropriate 'Cookie:' HTTP header on the `Request`.
        N)r  r  add_cookie_header)ry   rH  r  s      r9   r  zCookies.set_cookie_headerV  s3     227;;"">22222rD   rW   /r7  r1   rE   domainpathc                   i ddd|d|ddddd	|d
t          |          d|                    d          d|dt          |          dddddddddddddidd}t          di |}| j                            |           dS )zU
        Set a cookie value by name. May optionally include domain and path.
        versionr   r7  rE   portNport_specifiedFr  domain_specifieddomain_initial_dot.r  path_specifiedsecureexpiresdiscardTcommentcomment_urlrestHttpOnlyrfc2109r   )r3   
startswithr   r  r  )ry   r7  rE   r  r  r  r  s          r9   r  zCookies.set]  s!   
q
D
 U
 D	

 e
 f
 V
 !&"3"3C"8"8
 D
 d4jj
 e
 t
 t
 t
 4
  Z&!
" u#
& !!&!!F#####rD   r   r=   c                    d}| j         D ]D}|j        |k    r7||j        |k    r*||j        |k    r|d| }t	          |          |j        }E||S |S )z
        Get a cookie by name. May optionally include domain and path
        in order to specify exactly which cookie to retrieve.
        Nz!Multiple cookies exist with name=)r  r7  r  r  r   rE   )ry   r7  r   r  r  rE   r  rO   s           r9   r   zCookies.getw  s     h 	- 	-F{d"">V]f%<%<|v{d':': ,&P$&P&PG"0"9"99 &=NrD   c                    | j                                       S fd| j         D             }|D ]-}| j                             |j        |j        |j                   .dS )z
        Delete a cookie by name. May optionally include domain and path
        in order to specify exactly which cookie to delete.
        Nc                ^    g | ])}|j         k    r|j        k    r|j        k    '|*S ru   )r7  r  r  )r   r  r  r7  r  s     r9   r   z"Cookies.delete.<locals>.<listcomp>  sT     
 
 
{d""6=F#:#:!4!4	  "5!4!4rD   )r  clearr  r  r7  )ry   r7  r  r  remover  s    ```  r9   deletezCookies.delete  s     $"28>>&$555
 
 
 
 
 
(
 
 
  	D 	DFHNN6=&+v{CCCC	D 	DrD   c                    g }||                     |           ||J |                     |            | j        j        |  dS )z
        Delete all cookies. Optionally include a domain and path in
        order to only delete a subset of all the cookies.
        N)r^   r  r  )ry   r  r  argss       r9   r  zCookies.clear  s\    
 KK%%%KKrD   c                l    t          |          }|j        D ]}| j                            |           d S ru   )r+   r  r  )ry   r   r  s      r9   r   zCookies.update  sC    '""k 	( 	(FH''''	( 	(rD   c                .    |                      ||          S ru   )r  ry   r7  rE   s      r9   r   zCookies.__setitem__  s    xxe$$$rD   c                R    |                      |          }|t          |          |S ru   )r   r   r  s      r9   r   zCookies.__getitem__  s'    =4.. rD   c                ,    |                      |          S ru   )r  )ry   r7  s     r9   r   zCookies.__delitem__  s    {{4   rD   r   c                *    t          | j                  S ru   )r   r  r   s    r9   r   zCookies.__len__  s    48}}rD   r  c                $    d | j         D             S )Nc              3  $   K   | ]}|j         V  d S ru   )r7  r   r  s     r9   	<genexpr>z#Cookies.__iter__.<locals>.<genexpr>  s$      33333333rD   r  r   s    r9   r   zCookies.__iter__  s    33$(3333rD   r3   c                    | j         D ]} dS dS )NTFr  )ry   r   s     r9   __bool__zCookies.__bool__  s     	 	A44urD   c                V    d                     d | j        D                       }d| dS )Nr   c           	     D    g | ]}d |j          d|j         d|j         dS )z<Cookie rY   z for z />)r7  rE   r  r  s     r9   r   z$Cookies.__repr__.<locals>.<listcomp>  sJ        O6;NNNNFMNNN  rD   z	<Cookies[r  )r   r  )ry   cookies_reprs     r9   r   zCookies.__repr__  sF    yy "h  
 
 ,<++++rD   c                  0     e Zd ZdZd fdZd fd
Z xZS )Cookies._CookieCompatRequest
        Wraps a `Request` instance up in a compatibility interface suitable
        for use with `CookieJar` operations.
        rH  r-   r2   rs   c                    t                                          t          |j                  t	          |j                  |j                   || _        d S )N)rX   rq   r  )superr|   r1   rX   r   rq   r  rH  )ry   rH  r   s     r9   r|   z%Cookies._CookieCompatRequest.__init__  sP    GG$$W_--~    
 #DLLLrD   r;   r1   rE   c                j    t                                          ||           || j        j        |<   d S ru   )r  add_unredirected_headerrH  rq   )ry   r;   rE   r   s      r9   r!  z4Cookies._CookieCompatRequest.add_unredirected_header  s2    GG++C777(-DL %%%rD   rH  r-   r2   rs   r   )r   r   r   r   r|   r!  __classcell__)r   s   @r9   r  r    se        	 	
	# 	# 	# 	# 	# 	#	. 	. 	. 	. 	. 	. 	. 	. 	. 	.rD   r  c                  "    e Zd ZdZd
dZddZd	S )Cookies._CookieCompatResponser  r  r.   r2   rs   c                    || _         d S ru   )r  )ry   r  s     r9   r|   z&Cookies._CookieCompatResponse.__init__  s    $DMMMrD   email.message.Messagec                    t           j                                        }| j        j                                        D ]
\  }}|||<   |S ru   )rN   rO   rP   r  rq   r   )ry   infor;   rE   s       r9   r)  z"Cookies._CookieCompatResponse.info  sK    =((**D"m3??AA " "
U "S		KrD   Nr  r.   r2   rs   )r2   r'  )r   r   r   r   r|   r)  r   rD   r9   r  r%    sF        	 	
	% 	% 	% 	%	 	 	 	 	 	rD   r  ru   )r   r  r2   rs   r*  r"  )rW   r  )
r7  r1   rE   r1   r  r1   r  r1   r2   rs   )NNN)
r7  r1   r   r=   r  r=   r  r=   r2   r=   r   )r7  r1   r  r=   r  r=   r2   rs   )r  r=   r  r=   r2   rs   )r7  r1   rE   r1   r2   rs   )r7  r1   r2   r1   )r7  r1   r2   rs   r   r  r  r   )r   r   r   r   r|   r  r  r  r   r  r  r   r   r   r   r   r   r  r   urllibrH  r-   r  r  r   rD   r9   r+   r+   7  s            "B B B B3 3 3 3$ $ $ $ $: #!    8 "	D D D D D0    ( ( ( ( (
% % % %   ! ! ! !   4 4 4 4   
, , , ,. . . . .v~5 . . .$         rD   r+   )r0   r1   r2   r3   ru   )r;   r<   r0   r=   r2   r>   )rE   r<   r0   r=   r2   r>   )rJ   r1   r2   r=   )rE   r1   r2   rT   )rf   rg   r2   rh   )J
__future__r   r5   datetimeemail.messagerN   r   r  r[   r(  urllib.requestr+  collections.abcr   http.cookiejarr   r   r$  r   r	   r
   r   	_decodersr   r   r   r   r   r   r   r   _exceptionsr   r   r   r   r   r   r   
_multipartr   _status_codesr   _typesr   r   r   r    r!   r"   r#   r$   r%   r&   r'   _urlsr(   _utilsr)   r*   __all__rl   r:   rC   rI   rS   re   ro   MutableMappingr1   r,   r-   r.   r+   r   rD   r9   <module>r;     s   " " " " " "           				      # # # # # # , , , , , , , , S S S S S S S S S S S S	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                  A @ @ @ @ @                                            + + + + + + + +
7
7
7$&;<    N N N N N- - - - -1 1 1 1" " " "J   p: p: p: p: p:f#CH- p: p: p:fB) B) B) B) B) B) B) B)Jq+ q+ q+ q+ q+ q+ q+ q+hF F F F Ff#CH- F F F F FrD   