
    ցf<+                     n   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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 d dlZd dlmZ d dlmZ d dlmZ  ej2                  e      Z G d	 d
e      Zd dlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dlm(Z( d dl)m*Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 e+Z2e3Z3e!Z4d Z5d Z6d4dZ7d5dZ8	 d dl9m:c m;Z< e<j                  ZAd dlBZBd ZCeDd        ZEeDd        ZFeEe_E        eFe_F        d ZGd ZH	  ej                          dZJd ZLd6dZMd ZNd ZO	 d dlPZQej                  j                  d d!      ZTeTj                         d"k(   ZVd#ZW e
j                  d$eWz   d%z         ZYd&ZZd'j                  eZeW(      Z\eZe\d)Z]g d*Z^d+Z_d,d-j                  e^D  cg c]  } | e]z  	 c}       z   d.z   Zad/e_z   d0z   Zbd1eaz   d,z   ebz   d2z   Zc e
j                  d$ecz   d%z         Zd eed3      Zf	 d dlgZgdZhy# e=$ r d dl>m:c m?Z< Y >w xY w# eK$ r dZJY w xY w# e=$ r dZVY w xY wc c} w # e=$ r dZhY yw xY w)7    N)HTTPMessage)OrderedDict)MutableMapping)floor)MD5UnavailableError)tzlocal)
exceptionsc                       e Zd Zy)HTTPHeadersN)__name__
__module____qualname__     1/usr/lib/python3/dist-packages/botocore/compat.pyr   r   %   s    r   r   )
quote	urlencodeunquoteunquote_plusurlparseurlsplit
urlunspliturljoin	parse_qslparse_qs)HTTPResponse)IOBase)encodebytes)
formatdate)zip_longestc                 v    | j                   j                  j                  j                  j	                  |       y)z|Set the timeout of the socket from an HTTPResponse.

    :param http_response: An instance of ``httplib.HTTPResponse``

    N)_fpfpraw_sock
settimeout)http_responsetimeouts     r   set_socket_timeoutr)   @   s*     ""--g6r   c                 2    t        j                  |       d   S )N   )inspectgetfullargspec)funcs    r   accepts_kwargsr/   H   s     !!$'**r   c                     | S Nr   sencodingerrorss      r   ensure_unicoder6   M   s    Hr   c                     t        | t              r| j                  ||      S t        | t              r| S t	        dt        |        d      )Nz Expected str or bytes, received .)
isinstancestrencodebytes
ValueErrortyper2   s      r   ensure_bytesr?   Q   sE    !Sxx&))!U
7QyB
CCr   c                  R    t        j                  ddt        j                  d       y )Nignorez+A true SSLContext object is not available.*z.*urllib3\.util\.ssl_)messagecategorymodule)warningsfilterwarningsr	   InsecurePlatformWarningr   r   r   filter_ssl_warningsrH   b   s"    =33'	r   c                 N     |        }|j                         D ]
  \  }}|||<    |S r1   )items)clsdnew_instancekeyvalues        r   	from_dictrP   l   s2    5Lggi "
U!S"r   c                 2     |        }|D ]
  \  }}|||<    |S r1   r   )rK   pairsrM   rN   rO   s        r   
from_pairsrS   t   s,    5L "
U!S"r   c                 0    t        j                   |       }|S )zI
    This used to be a compat shim for 2.6 but is now just an alias.
    )copy)kwargscopy_kwargss     r   rW   rW      s     ))F#Kr   c                 "    | j                         S )z
    Returns the total seconds in a ``datetime.timedelta``.

    This used to be a compat shim for 2.6 but is now just an alias.

    :param delta: The timedelta object
    :type delta: ``datetime.timedelta``
    )total_seconds)deltas    r   rY   rY      s       r   TFc                  L    t         rt        j                  | i |S t               )a:  
    Attempts to get an md5 hashing object.

    :param args: Args to pass to the MD5 constructor
    :param kwargs: Key word arguments to pass to the MD5 constructor
    :return: An MD5 hashing object if available. If it is unavailable, None
        is returned if raise_error_if_unavailable is set to False.
    )MD5_AVAILABLEhashlibmd5r   )argsrV   s     r   get_md5r`      s$     {{D+F++!##r   c                 p    |t         j                  }|dk(  rt        |       S t        j                  |       S )Nwin32)sysplatform_windows_shell_splitshlexsplit)r3   rd   s     r   compat_shell_splitrh      s2    <<7#A&&{{1~r   c           
         | sg S g }g }d}d}| D ]  }|dk(  r|dz  }|dk(  ra|dkD  rG|j                  dt        t        |dz              z         |dz  }d}|dk(  r|j                  d       _| }|j                  d       t|dv rC|sA|dkD  r|j                  d|z         d}|s|j                  dj                  |             g }|dkD  r|j                  d|z         d}|j                  |        |rt	        d	|        |dkD  r|j                  d|z         |r |j                  dj                  |             |S )
a  Splits up a windows command as the built-in command parser would.

    Windows has potentially bizarre rules depending on where you look. When
    spawning a process via the Windows C runtime (which is what python does
    when you call popen) the rules are as follows:

    https://docs.microsoft.com/en-us/cpp/cpp/parsing-cpp-command-line-arguments

    To summarize:

    * Only space and tab are valid delimiters
    * Double quotes are the only valid quotes
    * Backslash is interpreted literally unless it is part of a chain that
      leads up to a double quote. Then the backslashes escape the backslashes,
      and if there is an odd number the final backslash escapes the quote.

    :param s: The command string to split up into parts.
    :return: A list of command components.
    Fr   \   "r+    ) 	z No closing quotation in string: )appendintr   joinr=   )r3   
componentsbuff	is_quotednum_backslashes	character	remainders          r   re   re      s~   ( 	JDIO 1#	
 q O#" D3u_q-@'A#BBC+a/	"#> KK$ &I KKO+%i "D?23"# !!"''$-0 "D?23"#KK	"c1#h ;A3?@@ D?*+ "''$-(r   c                  R    t         j                  dk(  rddlm}  t        | fS t        fS )Nrb   r   
tzwinlocal)rc   rd   dateutil.tzr{   r   rz   s    r   get_tzinfo_optionsr}     s&     ||w*$$zr   BOTO_DISABLE_CRTfalsetruez(?:[0-9]{1,3}\.){3}[0-9]{1,3}^$z[0-9A-Fa-f]{1,4}z(?:{hex}:{hex}|{ipv4}))hexipv4)r   ls32)	z(?:%(hex)s:){6}%(ls32)sz::(?:%(hex)s:){5}%(ls32)sz%(?:%(hex)s)?::(?:%(hex)s:){4}%(ls32)sz2(?:(?:%(hex)s:)?%(hex)s)?::(?:%(hex)s:){3}%(ls32)sz6(?:(?:%(hex)s:){0,2}%(hex)s)?::(?:%(hex)s:){2}%(ls32)sz/(?:(?:%(hex)s:){0,3}%(hex)s)?::%(hex)s:%(ls32)sz'(?:(?:%(hex)s:){0,4}%(hex)s)?::%(ls32)sz&(?:(?:%(hex)s:){0,5}%(hex)s)?::%(hex)sz(?:(?:%(hex)s:){0,6}%(hex)s)?::zDABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._!\-~z(?:|)z(?:%25|%)(?:[z]|%[a-fA-F0-9]{2})+z\[z)?\]z	
)NN)zutf-8strictr1   )irU   datetimerc   r,   rE   r]   http.clientr   loggingrf   reoscollectionsr   collections.abcr   mathr   sixbotocore.exceptionsr   r|   r   urllib3r	   	getLoggerr   loggerr   urllib.parser   r   r   r   r   r   r   r   r   r   r   ior   _IOBasebase64r   email.utilsr   	itertoolsr    	file_typezipunquote_strr)   r/   r6   r?   xml.etree.cElementTreeetreecElementTreeETreeImportErrorxml.etree.ElementTreeElementTree
ParseErrorXMLParseErrorjsonrH   classmethodrP   rS   rW   rY   r^   r\   r=   r`   rh   re   r}   awscrt.authawscrtenvirongetdisabledlowerHAS_CRTIPV4_PATcompileIPV4_REHEX_PATformatLS32_PAT_subs_variationsUNRESERVED_PATrr   IPV6_PATZONE_ID_PATIPV6_ADDRZ_PATIPV6_ADDRZ_RE	frozensetUNSAFE_URL_CHARSgzipHAS_GZIP)xs   0r   <module>r      s     
    #   	 	 # *  
 3  			8	$	+ 	   %    " !		 7+
D***         " # 	!GKKMM
$[|	 zz~~0':H.."f,,G ,
"**S8^c)
*
#**wX*F*, L  388<1QY<==C.1FF!F*[87B

3/#56 X& H}  *))*|  M\  GN =  HsN   ?	G5  H
 !4H H%
.H* 5HH
HHH"!H"*H43H4