
    MgG                     :   d 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 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!  ejD                  e#      Z$d
Z%di iZ& G d d      Z' G d de'      Z( G d de)e      Z* G d d      Z+y)zResolves regions and endpoints.

This module implements endpoint resolution, including resolving endpoints for a
given service and region and resolving the available endpoints for a service
in a specific AWS partition.
    N)Enum)UNSIGNED
xform_name)AUTH_TYPE_MAPSHAS_CRTCRT_SUPPORTED_AUTH_TYPES)EndpointProvider)EndpointProviderErrorEndpointVariantError!InvalidEndpointConfigurationErrorInvalidHostLabelErrorMissingDependencyExceptionNoRegionErrorParamValidationError$UnknownEndpointResolutionBuiltInNameUnknownRegionErrorUnknownSignatureVersionError*UnsupportedS3AccesspointConfigurationErrorUnsupportedS3ConfigurationErrorUnsupportedS3ControlArnError&UnsupportedS3ControlConfigurationError)ensure_booleaninstance_cachez{service}.{region}.{dnsSuffix}	endpointsc                   (    e Zd ZdZddZd Z	 ddZy)BaseEndpointResolverz3Resolves regions and endpoints. Must be subclassed.Nc                     t         )a7  Resolves an endpoint for a service and region combination.

        :type service_name: string
        :param service_name: Name of the service to resolve an endpoint for
            (e.g., s3)

        :type region_name: string
        :param region_name: Region/endpoint name to resolve (e.g., us-east-1)
            if no region is provided, the first found partition-wide endpoint
            will be used if available.

        :rtype: dict
        :return: Returns a dict containing the following keys:
            - partition: (string, required) Resolved partition name
            - endpointName: (string, required) Resolved endpoint name
            - hostname: (string, required) Hostname to use for this endpoint
            - sslCommonName: (string) sslCommonName to use for this endpoint.
            - credentialScope: (dict) Signature version 4 credential scope
              - region: (string) region name override when signing.
              - service: (string) service name override when signing.
            - signatureVersions: (list<string>) A list of possible signature
              versions, including s3, v4, v2, and s3v4
            - protocols: (list<string>) A list of supported protocols
              (e.g., http, https)
            - ...: Other keys may be included as well based on the metadata
        NotImplementedError)selfservice_nameregion_names      ^E:\wamp.anq\www\apps\calme\nutritwin\resources\nutritwin\Lib\site-packages\botocore/regions.pyconstruct_endpointz'BaseEndpointResolver.construct_endpoint7   s
    6 "!    c                     t         )zLists the partitions available to the endpoint resolver.

        :return: Returns a list of partition names (e.g., ["aws", "aws-cn"]).
        r   )r!   s    r$   get_available_partitionsz-BaseEndpointResolver.get_available_partitionsT   s
    
 "!r&   c                     t         )a  Lists the endpoint names of a particular partition.

        :type service_name: string
        :param service_name: Name of a service to list endpoint for (e.g., s3)

        :type partition_name: string
        :param partition_name: Name of the partition to limit endpoints to.
            (e.g., aws for the public AWS endpoints, aws-cn for AWS China
            endpoints, aws-us-gov for AWS GovCloud (US) Endpoints, etc.

        :type allow_non_regional: bool
        :param allow_non_regional: Set to True to include endpoints that are
             not regional endpoints (e.g., s3-external-1,
             fips-us-gov-west-1, etc).
        :return: Returns a list of endpoint names (e.g., ["us-east-1"]).
        r   )r!   r"   partition_nameallow_non_regionals       r$   get_available_endpointsz,BaseEndpointResolver.get_available_endpoints[   s
    & "!r&   N)awsF)__name__
__module____qualname____doc__r%   r(   r,    r&   r$   r   r   4   s    =":" FK"r&   r   c                       e Zd ZdZddgZddZddZd Z	 	 	 ddZ	 dd	Z		 	 	 	 dd
Z
d Z	 ddZd Zd Zd Zd Zd Zd Zd Zy)EndpointResolverz7Resolves endpoints based on partition endpoint metadatazaws-isoz	aws-iso-bc                 >    d|vrt        d      || _        || _        y)a  
        :type endpoint_data: dict
        :param endpoint_data: A dict of partition data.

        :type uses_builtin_data: boolean
        :param uses_builtin_data: Whether the endpoint data originates in the
            package's data directory.
        
partitionsz%Missing "partitions" in endpoint dataN)
ValueError_endpoint_datauses_builtin_data)r!   endpoint_datar:   s      r$   __init__zEndpointResolver.__init__v   s(     },DEE+!2r&   c                 d    | j                   d   D ]  }|d   |k7  r|d   }||vr||   d   c S  y )Nr7   	partitionservicesr   )r9   )r!   r"   r*   r>   r?   s        r$   get_service_endpoints_dataz+EndpointResolver.get_service_endpoints_data   sL    ,,\:I%7 ,H8+L)+66 ;r&   c                 Z    g }| j                   d   D ]  }|j                  |d           |S )Nr7   r>   )r9   append)r!   resultr>   s      r$   r(   z)EndpointResolver.get_available_partitions   s2    ,,\:IMM)K01 ;r&   Nc                    g }| j                   d   D ]o  }|d   |k7  r|d   }||vr||   d   }|D ]M  }	|	|d   v }
|r,|
r*| j                  ||	   |      }|s&|j                  |	       8|s|
s=|j                  |	       O q |S )Nr7   r>   r?   r   regions)r9   _retrieve_variant_datarB   )r!   r"   r*   r+   endpoint_variant_tagsrC   r>   r?   service_endpointsendpoint_nameis_regional_endpointvariant_datas               r$   r,   z(EndpointResolver.get_available_endpoints   s     ,,\:I%7 ,H8+ ( 6{ C!2'4	)8L'L$(-A#'#>#>)-8:O$L $m4'+?MM-0 "3 ;$ r&   c                     | j                   d   D ]C  }|d   |k(  s|r0| j                  |j                  d      |      }|s2d|v s7|d   c S |d   c S  y )Nr7   r>   defaults	dnsSuffix)r9   rF   get)r!   r*   rG   r>   variants        r$   get_partition_dns_suffixz)EndpointResolver.get_partition_dns_suffix   so     ,,\:I%7("99!j13HG ;'#9&{33$[11 ; r&   c                    |dk(  r|r|d}|<d }| j                   d   D ]  }|d   |k(  s|} || j                  |||||d      }|S y | j                   d   D ]1  }|r|d   | j                  v r| j                  |||||      }|s/|c S  y )Ns3z	us-east-1r7   r>   T)r9   _endpoint_for_partition!_UNSUPPORTED_DUALSTACK_PARTITIONS)	r!   r"   r#   r*   use_dualstack_endpointuse_fips_endpointvalid_partitionr>   rC   s	            r$   r%   z#EndpointResolver.construct_endpoint   s     D &#%K%"O!00>	[)^;&/O ? *55# *%  ,,\:I%+&99: 11&!F  ;r&   c                 v    | j                   d   D ]  }| j                  ||      s|d   c S  t        |d      )Nr7   r>   z,No partition found for provided region_name.)r#   	error_msg)r9   _region_matchr   )r!   r#   r>   s      r$   get_partition_for_regionz)EndpointResolver.get_partition_for_region   sG    ,,\:I!!)[9 -- ; !#D
 	
r&   c                    |d   }|r"|| j                   v rd| d}t        dg|      |d   j                  |t              }	|d|	v r|	d   }n
t	               |||	|||d}
||	d	   v r | j
                  di |
S | j                  ||      s|r|	j                  d      }|	j                  d
d      }|r1|s/t        j                  d|||       ||
d<    | j
                  di |
S t        j                  d||        | j
                  di |
S y )Nr>   z4Dualstack endpoints are currently not supported for z
 partition	dualstacktagsrZ   r?   partitionEndpoint)r>   r"   service_datarI   rV   rW   r   isRegionalizedTz'Using partition endpoint for %s, %s: %srI   z*Creating a regex based endpoint for %s, %sr3   )	rU   r   rO   DEFAULT_SERVICE_DATAr   _resolver[   LOGdebug)r!   r>   r"   r#   rV   rW   force_partitionr*   rZ   rb   resolve_kwargspartition_endpointis_regionalizeds                r$   rT   z(EndpointResolver._endpoint_for_partition   sm    #;/"$"H"HH&'z3  '[MYOO !,00.
 "l2*+>?#o% #(((&<!2
 ,{33 4==2>22 i5!-!1!12E!F*../?FO!/		= &	 3E/$t}}6~66II<
 !4==2>22% :Ir&   c                 j    ||d   v ryd|v r't        j                  |d         j                  |      S y)NrE   TregionRegexF)recompilematch)r!   r>   r#   s      r$   r[   zEndpointResolver._region_match:  s<    )I..I%::i67==kJJr&   c                     |j                  dg       }|D ]0  }t        |d         t        |      k(  s|j                         }|c S  y )Nvariantsr`   )rO   setcopy)r!   r;   r`   rr   rP   rC   s         r$   rF   z'EndpointResolver._retrieve_variant_dataA  sC     $$Z4G76?#s4y0   r&   c                 V    g }|r|j                  d       |r|j                  d       |S )Nr^   fips)rB   )r!   rV   rW   r`   s       r$   _create_tag_listz!EndpointResolver._create_tag_listH  s*    !KK$KKr&   c                 l    i }|||fD ])  }| j                  ||      }|s| j                  ||       + |S r-   )rF   _merge_keys)r!   r`   r;   service_defaultspartition_defaultsrC   rr   rP   s           r$   _resolve_variantz!EndpointResolver._resolve_variantP  sI     &(8:LMH11(DAG  &1 N r&   c                    |j                  di       j                  |i       }|j                  d      rt        j                  d|        |j                  di       }|j                  di       }	| j                  ||      }
|
rA| j	                  |
|||	      }|i k(  rd| d| }t        |
|      | j                  ||       n|}d|vr|d   |d<   |d	   |d	<   ||d
<   | j                  ||       | j                  |	|       | j                  ||d   |||d         |d<   d|v r| j                  ||d   |||d         |d<   |S )Nr   
deprecatedz3Client is configured with the deprecated endpoint: rM   zEndpoint does not exist for z in region r_   rN   r>   endpointNamehostnamesslCommonName)rO   rf   warningrw   r|   r   ry   _expand_template)r!   r>   r"   rb   rI   rV   rW   r;   rz   r{   r`   rC   rZ   s                r$   re   zEndpointResolver._resolveZ  s    %((b9==2
 \*KKEm_U (++J;&]]:r:$$%;=NO**m%57IF |2<. A!!.1  +	JJ]F3"F f$"+K"8F;'4{!.~ 	)62+V4!22:;
z f$&*&;&;'{#'F?# r&   c                 ,    |D ]  }||vs||   ||<    y r-   r3   )r!   	from_datarC   keys       r$   ry   zEndpointResolver._merge_keys  s!    C& 'ns r&   c                 *    |j                  |||      S )N)serviceregionrN   )format)r!   r>   templater"   rI   rN   s         r$   r   z!EndpointResolver._expand_template  s!      )  
 	
r&   )F)r.   )r.   FNr-   )NNFF)r/   r0   r1   r2   rU   r<   r@   r(   r,   rQ   r%   r\   rT   r[   rF   rw   r|   re   ry   r   r3   r&   r$   r5   r5   q   s    A)2K(@%37  ": 59$ $0d
  ?3B?B-

r&   r5   c                   @    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZy)EndpointResolverBuiltinszAWS::RegionzAWS::UseFIPSzAWS::UseDualStackzAWS::STS::UseGlobalEndpointzAWS::S3::UseGlobalEndpointzAWS::S3::AcceleratezAWS::S3::ForcePathStylezAWS::S3::UseArnRegionzAWS::S3Control::UseArnRegionz'AWS::S3::DisableMultiRegionAccessPointszSDK::EndpointzAWS::Auth::AccountIdz AWS::Auth::AccountIdEndpointModeN)r/   r0   r1   
AWS_REGIONAWS_USE_FIPSAWS_USE_DUALSTACKAWS_STS_USE_GLOBAL_ENDPOINTAWS_S3_USE_GLOBAL_ENDPOINTAWS_S3_ACCELERATEAWS_S3_FORCE_PATH_STYLEAWS_S3_USE_ARN_REGIONAWS_S3CONTROL_USE_ARN_REGIONAWS_S3_DISABLE_MRAPSDK_ENDPOINT
ACCOUNT_IDACCOUNT_ID_ENDPOINT_MODEr3   r&   r$   r   r     sZ    J "L , #@ ">-7 4 $B C"L'JAr&   r   c                       e Zd ZdZ	 	 ddZd Zd Zd Zd Zd Z	d	 Z
d
 Zed        Zed        Zed        Zd Zd Zd Zd Zd Zy)EndpointRulesetResolverz5Resolves endpoints using a service's endpoint rulesetNc	                     t        ||      | _        | j                  j                  j                  | _        || _        || _        || _        || _        || _	        || _
        i | _        y )N)ruleset_datapartition_data)r
   	_providerruleset
parameters_param_definitions_service_model	_builtins_client_context_event_emitter_use_ssl_requested_auth_scheme_instance_cache)	r!   endpoint_ruleset_datar   service_modelbuiltinsclient_contextevent_emitteruse_sslrequested_auth_schemes	            r$   r<   z EndpointRulesetResolver.__init__  sf     *.)
 #'.."8"8"C"C+!-+&;#!r&   c           	      \   |i }|i }| j                  |||      }t        j                  d|        	  | j                  j                  d
i |}t        j                  d|j                          | j                  s=|j                  j                  d      r"|j                  d|j                  dd        }|j                  |j                  j                         D 	ci c]  \  }}	||	d    c}	}	      }|S # t
        $ r}| j                  ||      }| ||d}~ww xY wc c}	}w )zAInvokes the provider with params defined in the service's rulesetNz+Calling endpoint provider with parameters: zEndpoint provider result: zhttps://zhttp://   )urlr   )headersr3   )_get_provider_paramsrf   rg   r   resolve_endpointr   #ruleset_error_to_botocore_exceptionr   r   
startswith_replacer   items)
r!   operation_model	call_argsrequest_contextprovider_paramsprovider_resultexbotocore_exceptionr   vals
             r$   r%   z*EndpointRulesetResolver.construct_endpoint  sd    I" O33Y
 			9/9JK	
	1=dnn== !O 			./B/B.CDE }}!4!4!?!?
!K-66o11!"567 7 O *22,;,C,C,I,I,K,KSSV,K 3 
 3 % 	1!%!I!IO" ")(b0	1(s   C? $D(
?	D%D  D%c                    i }| j                  |||      }| j                  j                         D ]L  \  }}| j                  |||      }|)|j                  | j                  |j                  |      }|H|||<   N |S )a  Resolve a value for each parameter defined in the service's ruleset

        The resolution order for parameter values is:
        1. Operation-specific static context values from the service definition
        2. Operation-specific dynamic context values from API parameters
        3. Client-specific context parameters
        4. Built-in values such as region, FIPS usage, ...
        )
param_namer   r   )builtin_namer   )_get_customized_builtinsr   r   _resolve_param_from_contextbuiltin_resolve_param_as_builtin)	r!   r   r   r   r   customized_builtinsr   	param_def	param_vals	            r$   r   z,EndpointRulesetResolver._get_provider_params  s      #;;Y
 &*%<%<%B%B%D!J	88% /# 9 I
  Y%6%6%B ::!*!2!20 ; 	 $.7
+ &E r&   c                 ~    | j                  ||      }||S | j                  |||      }||S | j                  |      S r-   )&_resolve_param_as_static_context_param'_resolve_param_as_dynamic_context_param&_resolve_param_as_client_context_param)r!   r   r   r   staticdynamics         r$   r   z3EndpointRulesetResolver._resolve_param_from_context8  s[     <<
 M>>
 N:::FFr&   c                 F    | j                  |      }|j                  |      S r-   )_get_static_context_paramsrO   )r!   r   r   static_ctx_paramss       r$   r   z>EndpointRulesetResolver._resolve_param_as_static_context_paramG  s&     !;;OL $$Z00r&   c                 Z    | j                  |      }||v r||   }|j                  |      S y r-   )_get_dynamic_context_paramsrO   )r!   r   r   r   dynamic_ctx_paramsmember_names         r$   r   z?EndpointRulesetResolver._resolve_param_as_dynamic_context_paramM  s<     "==oN++,Z8K==-- ,r&   c                 l    | j                         }||v r ||   }| j                  j                  |      S y r-   )_get_client_context_paramsr   rO   )r!   r   client_ctx_paramsclient_ctx_varnames       r$   r   z>EndpointRulesetResolver._resolve_param_as_client_context_paramU  sB     ;;=**!2:!>''++,>?? +r&   c                 |    |t         j                  j                         vrt        |      |j	                  |      S )N)name)r   __members__valuesr   rO   )r!   r   r   s      r$   r   z1EndpointRulesetResolver._resolve_param_as_builtin[  s4    7CCJJLL6LII||L))r&   c                 j    |j                   D ci c]  }|j                  |j                   c}S c c}w )z=Mapping of param names to static param value for an operation)static_context_parametersr   valuer!   r   params      r$   r   z2EndpointRulesetResolver._get_static_context_params`  s<    
 )BB
B JJ#B
 	
 
   0c                 j    |j                   D ci c]  }|j                  |j                   c}S c c}w )z7Mapping of param names to member names for an operation)context_parametersr   r   r   s      r$   r   z3EndpointRulesetResolver._get_dynamic_context_paramsh  s>    
 );;
; JJ)));
 	
 
r   c                     | j                   j                  D ci c]"  }|j                  t        |j                        $ c}S c c}w )z7Mapping of param names to client configuration variable)r   client_context_parametersr   r   )r!   r   s     r$   r   z2EndpointRulesetResolver._get_client_context_paramsp  sG    
 ,,FF
F JJ
5::..F
 	
 
s   'Ac                     | j                   j                  j                         }t        j                  | j                        }| j
                  j                  d| ||||       |S )Nzbefore-endpoint-resolution.)r   modelparamscontext)r   
service_id	hyphenizert   r   r   emit)r!   r   r   r   r   r   s         r$   r   z0EndpointRulesetResolver._get_customized_builtinsx  sh     ((33==?
"ii7  )*6(!# 	! 	
 #"r&   c                     t        |t              rt        |      dk(  rt        d      t        j                  ddj                  |D cg c]  }d|j                  d       d c}       j                          j                  t        k(  rdi fS |D cg c]  }i |d j                  |d         i }} j                  	 t         fd	|D              \  }}n	 t        d
 |D              \  }}i }d|v r	|d   |d<   n,d|v r(t        |d         dkD  rdj                  |d         |d<   d|v r|j#                  |d          d|v rt%        |d         |d<   t        j                  d|d   ||       ||fS c c}w c c}w # t        $ r di fcY S w xY w# t        $ r\ d}|D cg c]  }|d   	 nc c}w }}t        st        d |D              }|rt        d      t!        dj                  |            w xY w)a  Convert an Endpoint's authSchemes property to a signing_context dict

        :type auth_schemes: list
        :param auth_schemes: A list of dictionaries taken from the
            ``authSchemes`` property of an Endpoint object returned by
            ``EndpointProvider``.

        :rtype: str, dict
        :return: Tuple of auth type string (to be used in
            ``request_context['auth_type']``) and signing context dict (for use
            in ``request_context['signing']``).
        r   z&auth_schemes must be a non-empty list.z_Selecting from endpoint provider's list of auth schemes: %s. User selected auth scheme is: "%s"z, "r   noneNc              3   x   K   | ]1  }j                  j                  |d          rj                  |f 3 ywr   N)._does_botocore_authname_match_ruleset_authnamer   ).0sr!   s     r$   	<genexpr>zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  sA      $)JJ33QvY 00!4)s   7:c              3   @   K   | ]  }|d    t         v r	|d    |f  ywr   )r   )r   r   s     r$   r   zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  s,      $)yN2 vYN)s   Fc              3   ,   K   | ]  }|t         v   y wr-   r   )r   schemes     r$   r   zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  s      +&7F "::&7s   zbThis operation requires an additional dependency. Use pip install botocore[crt] before proceeding.msg)signature_versionsigningRegionr   signingRegionSet,signingName)signing_namedisableDoubleEncodingz?Selected auth type "%s" as "%s" with signing context params: %s)
isinstancelistlen	TypeErrorrf   rg   joinrO   r   r   _strip_sig_prefixnextStopIterationr   anyr   r   updater   )r!   auth_schemesr   r   r   fixable_with_crtauth_type_optionssigning_contexts   `       r$   auth_schemes_to_signing_ctxz3EndpointRulesetResolver.auth_schemes_to_signing_ctx  s    ,-\1Ba1GDEE		1II\B\155=/+\BC''		
 &&(22: '
& GvFvt55fVnEF& 	 
 &&2   $ $)$  f# $)$  f6 f$(.(?OH%6)6,-.2,/HH-.-) F"""}0E"F"f,7E./8O34 			M6N		
 _$$] C
  !   Rx	  !  $) 8D$E1QvY$E!$E'* +&7+ ($
 $4L 
 7*.))4E*F %s7   
E=!FF  F FFG?)F65A
G?c                 2    |j                  d      r|dd S |S )z6Normalize auth type names by removing any "sig" prefixsig   N)r   )r!   	auth_names     r$   r  z)EndpointRulesetResolver._strip_sig_prefix  s      ) 4 4U ;y}JJr&   c                     | j                  |      }|j                  d      d   }|dk7  r|j                  d      r|dd }||k(  S )a\  
        Whether a valid string provided as signature_version parameter for
        client construction refers to the same auth methods as a string
        returned by the endpoint ruleset provider. This accounts for:

        * The ruleset prefixes auth names with "sig"
        * The s3 and s3control rulesets don't distinguish between v4[a] and
          s3v4[a] signers
        * The v2, v3, and HMAC v1 based signers (s3, s3-*) are botocore legacy
          features and do not exist in the rulesets
        * Only characters up to the first dash are considered

        Example matches:
        * v4, sigv4
        * v4, v4
        * s3v4, sigv4
        * s3v7, sigv7 (hypothetical example)
        * s3v4a, sigv4a
        * s3v4-query, sigv4

        Example mismatches:
        * v4a, sigv4
        * s3, sigv4
        * s3-presign-post, sigv4
        -r   rS      N)r  splitr   )r!   botonamersnames      r$   r   zFEndpointRulesetResolver._does_botocore_authname_match_ruleset_authname  sR    4 ''/>>#&q)t 3 3D 9|H!!r&   c                    |j                   j                  d      }|y|j                  d      r!	 |j                  d      d   }t        |      S | j                  j                  }|dk(  r|dk(  s|d	k(  rt        |
      S |j                  d      sU|j                  d      sD|j                  d      s3|j                  d      s"|j                  d      s|j                  d      rt        |
      S |j                         j                  d      rt        |      S |dk(  rn|j                  d      r|j                  d      }t        ||      S |j                  d      s|j                  d      rt        |
      S |dk(  rt        |      S |dk(  r.|j                  d      rt        |
      S |dk(  rt        |
      S y# t        $ r |}Y w xY w)zAttempts to translate ruleset errors to pre-existing botocore
        exception types by string matching exception strings.
        r  NzInvalid region in ARN: `   )labelrS   z/S3 Object Lambda does not support S3 Acceleratez#Accelerate cannot be used with FIPSr   zS3 Outposts does not supportzS3 MRAP does not supportz!S3 Object Lambda does not supportzAccess Points do not supportzInvalid configuration:z#Client was configured for partitionzinvalid arn:)report	s3controlzInvalid ARN:Bucket)arnr  z!AccountId is required but not seteventszUInvalid Configuration: FIPS is not supported with EventBridge multi-region endpoints.z&EndpointId must be a valid host label.)kwargsrO   r   r  
IndexErrorr   r   r"   r   r   lowerr   r   r   r   )r!   ruleset_exceptionr   r  r%  r"   r)  s          r$   r   z;EndpointRulesetResolver.ruleset_error_to_botocore_exception  s     &&**51;>>34		#q) )u55**774HH??63??=>>>"<=>>"EF>>"@A>>":;>>"GHAcJJyy{%%n5+377;&~~n-jj*3EE~~673>>5< >#FF99+3778#~~6 9SAA>>8SAAQ  s   G GG)TN)r/   r0   r1   r2   r<   r%   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r3   r&   r$   r   r     s    ? ""00dBG1.@*
 
 
 
 
 
 
#a%FK"@5r&   r   ),r2   rt   loggingrn   enumr   botocorer   r   botocore.authr   r   botocore.crtr	   botocore.endpoint_providerr
   botocore.exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   botocore.utilsr   r   	getLoggerr/   rf   DEFAULT_URI_TEMPLATErd   r   r5   strr   r   r3   r&   r$   <module>r:     s      	  ) 1 1 7     :g!7 #R( :" :"zt
+ t
n	BsD BDy yr&   