
    tni                     d   d 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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! dd
l"m#Z#m$Z$  ej%        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.dS )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)register_feature_id)ensure_booleaninstance_cachez{service}.{region}.{dnsSuffix}	endpointsc                   *    e Zd ZdZddZd Z	 d	dZdS )
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      M/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/botocore/regions.pyconstruct_endpointz'BaseEndpointResolver.construct_endpoint:   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_partitionsW   s
    
 "!r'   awsFc                     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)r+   F)__name__
__module____qualname____doc__r&   r*   r/    r'   r%   r   r   7   sX        ==" " " ":" " " 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d	S )EndpointResolverz7Resolves endpoints based on partition endpoint metadatazaws-isoz	aws-iso-bFc                 H    d|vrt          d          || _        || _        dS )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__y   s4     },,DEEE+!2r'   r+   c                 x    | j         d         D ]+}|d         |k    r|d         }||vr||         d         c S d S )Nr9   	partitionservicesr   )r;   )r"   r#   r-   r@   rA   s        r%   get_service_endpoints_dataz+EndpointResolver.get_service_endpoints_data   sd    ,\: 	7 	7I%77 ,H8++L)+6666	7 	7r'   c                 `    g }| j         d         D ]}|                    |d                    |S )Nr9   r@   )r;   append)r"   resultr@   s      r%   r*   z)EndpointResolver.get_available_partitions   s=    ,\: 	2 	2IMM)K01111r'   Nc                 :   g }| j         d         D ]}|d         |k    r|d         }||vr||         d         }|D ]]}	|	|d         v }
|r6|
r4|                     ||	         |          }|r|                    |	           D|s|
r|                    |	           ^|S )Nr9   r@   rA   r   regions)r;   _retrieve_variant_datarD   )r"   r#   r-   r.   endpoint_variant_tagsrE   r@   rA   service_endpointsendpoint_nameis_regional_endpointvariant_datas               r%   r/   z(EndpointResolver.get_available_endpoints   s     ,\: 	1 	1I%77 ,H8++ ( 6{ C!2 
1 
1'4	)8L'L$( 1-A 1#'#>#>)-8:O$ $L $ 5m444' 1+? 1MM-000
1 r'   c                     | j         d         D ]T}|d         |k    rF|r:|                     |                    d          |          }|rd|v r
|d         c S J|d         c S Ud S )Nr9   r@   defaults	dnsSuffix)r;   rH   get)r"   r-   rI   r@   variants        r%   get_partition_dns_suffixz)EndpointResolver.get_partition_dns_suffix   s     ,\: 		2 		2I%77( 2"99!j113H G  4;'#9#9&{3333$[1111 8 tr'   c                 $   |dk    r|r|d}|@d }| j         d         D ]}|d         |k    r|}||                     |||||d          }|S d S | j         d         D ]3}|r|d         | j        v r|                     |||||          }|r|c S 4d S )Ns3z	us-east-1r9   r@   T)r;   _endpoint_for_partition!_UNSUPPORTED_DUALSTACK_PARTITIONS)	r"   r#   r$   r-   use_dualstack_endpointuse_fips_endpointvalid_partitionr@   rE   s	            r%   r&   z#EndpointResolver.construct_endpoint   s    D  & !#%K%"O!0> 0 0	[)^;;&/O*55# *%  4 ,\: 	 	I% +&9: : 11&! F  	 	r'   c                     | j         d         D ]"}|                     ||          r
|d         c S #t          |d          )Nr9   r@   z,No partition found for provided region_name.)r$   	error_msg)r;   _region_matchr   )r"   r$   r@   s      r%   get_partition_for_regionz)EndpointResolver.get_partition_for_region   sd    ,\: 	. 	.I!!)[99 . ----. #D
 
 
 	
r'   c                 V   |d         }|r!|| j         v rd| d}t          dg|          |d                             |t                    }	|d|	v r	|	d         }nt	                      |||	|||d}
||	d	         v r | j        di |
S |                     ||          s|r|	                    d          }|	                    d
d          }|r1|s/t                              d|||           ||
d<    | j        di |
S t                              d||            | j        di |
S d S )Nr@   z4Dualstack endpoints are currently not supported for z
 partition	dualstacktagsr\   rA   partitionEndpoint)r@   r#   service_datarK   rX   rY   r   isRegionalizedTz'Using partition endpoint for %s, %s: %srK   z*Creating a regex based endpoint for %s, %sr5   )	rW   r   rQ   DEFAULT_SERVICE_DATAr   _resolver]   LOGdebug)r"   r@   r#   r$   rX   rY   force_partitionr-   r\   rd   resolve_kwargspartition_endpointis_regionalizeds                r%   rV   z(EndpointResolver._endpoint_for_partition   s    #;/"	P$"HHH3&3 3 3  '[MYOOOO !,00.
 
 "l22*+>?#oo% #(((&<!2
 
 ,{333 4=22>222 i55 	3 	3!-!1!12E!F!F*../?FFO! 7/ 7		= &	   3E/$t}66~666II<  
 !4=22>222%	3 	3r'   c                     ||d         v rdS d|v r-t          j        |d                                       |          S dS )NrG   TregionRegexF)recompilematch)r"   r@   r$   s      r%   r]   zEndpointResolver._region_match=  sJ    )I...4I%%:i677==kJJJur'   c                     |                     dg           }|D ]@}t          |d                   t          |          k    r|                                }|c S Ad S )Nvariantsrb   )rQ   setcopy)r"   r=   rb   rt   rR   rE   s         r%   rH   z'EndpointResolver._retrieve_variant_dataD  sh     $$Z44 	 	G76?##s4yy00  1	 	r'   c                 f    g }|r|                     d           |r|                     d           |S )Nr`   fips)rD   )r"   rX   rY   rb   s       r%   _create_tag_listz!EndpointResolver._create_tag_listK  s@    ! 	%KK$$$ 	 KKr'   c                 v    i }|||fD ]0}|                      ||          }|r|                     ||           1|S r0   )rH   _merge_keys)r"   rb   r=   service_defaultspartition_defaultsrE   rt   rR   s           r%   _resolve_variantz!EndpointResolver._resolve_variantS  sZ     &(8:LM 	2 	2H11(DAAG 2  &111r'   c                     |                     di                                |i           }|                     d          rt                              d|           |                     di           }|                     di           }	|                     ||          }
|
rN|                     |
|||	          }|i k    rd| d| }t          |
|          |                     ||           n|}d|vr|d         |d<   |d	         |d	<   ||d
<   |                     ||           |                     |	|           |                     ||d         |||d                   |d<   d|v r(|                     ||d         |||d                   |d<   |S )Nr   
deprecatedz5Client is configured with the deprecated endpoint: %srO   zEndpoint does not exist for z in region ra   rP   r@   endpointNamehostnamesslCommonName)rQ   rh   warningry   r~   r   r{   _expand_template)r"   r@   r#   rd   rK   rX   rY   r=   r|   r}   rb   rE   r\   s                r%   rg   zEndpointResolver._resolve]  s    %((b99==2
 
 \** 	KKG  
 (++J;;&]]:r::$$%;=NOO 	#**m%57I F ||1< 1 1!.1 1  +	JJJJ]F3333"F f$$"+K"8F;'4{!.~ 	)6222+V444!22:;
 
z f$$&*&;&;'{#' 'F?# r'   c                 .    |D ]}||vr||         ||<   d S r0   r5   )r"   	from_datarE   keys       r%   r{   zEndpointResolver._merge_keys  s4     	- 	-C&  'ns	- 	-r'   c                 2    |                     |||          S )N)serviceregionrP   )format)r"   r@   templater#   rK   rP   s         r%   r   z!EndpointResolver._expand_template  s&      )  
 
 	
r'   )F)r+   )r+   FNr0   )NNFF)r1   r2   r3   r4   rW   r>   rB   r*   r/   rS   r&   r^   rV   r]   rH   ry   r~   rg   r{   r   r5   r'   r%   r7   r7   t   sM       AA)2K(@%3 3 3 37 7 7 7    "   : 59   $ $0 0 0 0d
 
 
  ?3 ?3 ?3 ?3B        @ @ @D- - -

 
 
 
 
r'   r7   c                   B    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dS )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)r1   r2   r3   
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_MODEr5   r'   r%   r   r     sh        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d Zed             Zed             Zed             Zd Zd Zd Zd Zd Zd ZdS )EndpointRulesetResolverz5Resolves endpoints using a service's endpoint rulesetTNc	                     t          ||          | _        | j        j        j        | _        || _        || _        || _        || _        || _	        || _
        i | _        d S )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__  sn     *.)
 
 
 #'."8"C+!-+&;#!r'   c                 B   |i }|i }|                      |||          }t                              d|           	  | j        j        di |}n.# t
          $ r!}|                     ||          }| ||d}~ww xY wt                              d|j                   | j        sD|j        	                    d          r*d|vr&|
                    d|j        dd                    }|
                    d	 |j                                        D             
          }|S )zAInvokes the provider with params defined in the service's rulesetNz-Calling endpoint provider with parameters: %szEndpoint provider result: %szhttps://Endpointzhttp://   )urlc                 &    i | ]\  }}||d          S )r   r5   ).0r   vals      r%   
<dictcomp>z>EndpointRulesetResolver.construct_endpoint.<locals>.<dictcomp>  s/        (SSV  r'   )headersr5   )_get_provider_paramsrh   ri   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_exceptions           r%   r&   z*EndpointRulesetResolver.construct_endpoint  s    I" O33Y
 
 			;_	
 	
 	
	1=dn=  ! OO % 	1 	1 	1!%!I!IO" " ")(b0	1 			0/2EFFF 	#..z::	 /11-667o1!""577 7  O *22 ,;,C,I,I,K,K   3 
 
 s   A 
A:A55A:c                 *   i }|                      |||          }| j                                        D ]_\  }}|                     |||          }|#|j        |                     |j        |          }||||<   |                     ||           `|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   N)builtin_namer   )_get_customized_builtinsr   r   _resolve_param_from_contextbuiltin_resolve_param_as_builtin_register_endpoint_feature_ids)	r"   r   r   r   r   customized_builtinsr   	param_def	param_vals	            r%   r   z,EndpointRulesetResolver._get_provider_params   s      #;;Y
 
 &*%<%B%B%D%D 	K 	K!J	88% /# 9  I
  Y%6%B ::!*!20 ;  	 $.7
+33J	JJJr'   c                     |                      ||          }||S |                     |||          }||S |                     |||          }||S |                     |          S r0   )&_resolve_param_as_static_context_param'_resolve_param_as_dynamic_context_param)_resolve_param_as_operation_context_param&_resolve_param_as_client_context_param)r"   r   r   r   staticdynamicoperation_context_paramss          r%   r   z3EndpointRulesetResolver._resolve_param_from_contextB  s     <<
 
 M>>
 
 N::OY  	!
 $/++:::FFFr'   c                 V    |                      |          }|                    |          S r0   )_get_static_context_paramsrQ   )r"   r   r   static_ctx_paramss       r%   r   z>EndpointRulesetResolver._resolve_param_as_static_context_paramX  s,     !;;OLL $$Z000r'   c                 r    |                      |          }||v r||         }|                    |          S d S r0   )_get_dynamic_context_paramsrQ   )r"   r   r   r   dynamic_ctx_paramsmember_names         r%   r   z?EndpointRulesetResolver._resolve_param_as_dynamic_context_param^  sH     "==oNN+++,Z8K==--- ,+r'   c                 z    |                                  }||v r"||         }| j                            |          S d S r0   )_get_client_context_paramsr   rQ   )r"   r   client_ctx_paramsclient_ctx_varnames       r%   r   z>EndpointRulesetResolver._resolve_param_as_client_context_paramf  sK     ;;==***!2:!>'++,>??? +*r'   c                 b    |j         }||v r#||         d         }t          j        ||          S d S )Npath)operation_context_parametersjmespathsearch)r"   r   r   r   operation_ctx_paramsr   s         r%   r   zAEndpointRulesetResolver._resolve_param_as_operation_context_paraml  sB      /K---'
3F;D?4333 .-r'   c                     |t           j                                        vrt          |          |                    |          }t          |          r
 |            S |S )Nname)r   __members__valuesr   rQ   callable)r"   r   r   r   s       r%   r   z1EndpointRulesetResolver._resolve_param_as_builtint  s`    7CJJLLLL6LIIII,,|,,G 	799r'   c                 $    d |j         D             S )z=Mapping of param names to static param value for an operationc                 (    i | ]}|j         |j        S r5   )r   valuer   params     r%   r   zFEndpointRulesetResolver._get_static_context_params.<locals>.<dictcomp>  s.     
 
 
 J
 
 
r'   )static_context_parametersr"   r   s     r%   r   z2EndpointRulesetResolver._get_static_context_params|  s&    
 
(B
 
 
 	
r'   c                 $    d |j         D             S )z7Mapping of param names to member names for an operationc                 (    i | ]}|j         |j        S r5   )r   r   r   s     r%   r   zGEndpointRulesetResolver._get_dynamic_context_params.<locals>.<dictcomp>  s/     
 
 
 J)
 
 
r'   )context_parametersr   s     r%   r   z3EndpointRulesetResolver._get_dynamic_context_params  s&    
 
(;
 
 
 	
r'   c                 .    d | j         j        D             S )z7Mapping of param names to client configuration variablec                 B    i | ]}|j         t          |j                   S r5   )r   r   r   s     r%   r   zFEndpointRulesetResolver._get_client_context_params.<locals>.<dictcomp>  s6     
 
 
 J
5:..
 
 
r'   )r   client_context_parametersr)   s    r%   r   z2EndpointRulesetResolver._get_client_context_params  s)    
 
,F
 
 
 	
r'   c                     | j         j                                        }t          j        | j                  }| j                            d| ||||           |S )Nzbefore-endpoint-resolution.)r   modelparamscontext)r   
service_id	hyphenizerv   r   r   emit)r"   r   r   r   r  r   s         r%   r   z0EndpointRulesetResolver._get_customized_builtins  sl     (3==??
"i77  6*66(!# 	! 	
 	
 	
 #"r'   c                 &    t          |t                    rt          |          dk    rt          d          t                              dd                    d |D                        j                    j        t          k    rdi fS  fd|D             } j        4	 t           fd	|D                       \  }}n# t          $ r di fcY S w xY w	 t          d
 |D                       \  }}nq# t          $ rd d}d |D             }t          st          d |D                       }|rt          d          t          d                    |                    w xY wi }d|v r|d         |d<   n;d|v r7t          |d                   dk    rd                    |d                   |d<   d|v r|                    |d                    d|v rt!          |d                   |d<   t                              d|d         ||           ||fS )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, c                 @    g | ]}d |                     d           d S )"r   )rQ   r   ss     r%   
<listcomp>zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  s.    BBB+155==+++BBBr'   nonec                 R    g | ]#}i |d                      |d                    i$S r   )_strip_sig_prefix)r   schemer"   s     r%   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  sK     
 
 
 GvFvt55fVnEEFF
 
 
r'   Nc              3   l   K   | ].}                     j        |d                    #j        |fV  /dS r   N)._does_botocore_authname_match_ruleset_authnamer   )r   r  r"   s     r%   	<genexpr>zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  sa       $ $JJ3QvY $0!4$ $ $ $ $ $r'   c              3   H   K   | ]}|d          t           v |d          |fV  dS r  )r   r  s     r%   r  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  sE       $ $yN22 vYN2222$ $r'   Fc                     g | ]
}|d          S r   r5   r  s     r%   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  s    $E$E$E1QvY$E$E$Er'   c              3   (   K   | ]}|t           v V  d S r0   r   )r   r  s     r%   r  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  s<       + +" "::+ + + + + +r'   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: %sr   )
isinstancelistlen	TypeErrorrh   ri   joinr   r   nextStopIterationr   anyr   r   updater   )r"   auth_schemesr   r  fixable_with_crtauth_type_optionssigning_contexts   `      r%   auth_schemes_to_signing_ctxz3EndpointRulesetResolver.auth_schemes_to_signing_ctx  s    ,-- 	F\1B1Ba1G1GDEEE		1IIBB\BBBCC'		
 	
 	
 &(222:
 
 
 
&
 
 
 &2   $ $ $ $ $)$ $ $    ff !       Rx	 # $ $)$ $ $    ff
 !    $) $E$E$E$E$E! '* + +&7+ + + ( ($
 $ 4L   
 7*.))4E*F*F   %, f$$(.(?OH%%6))6,-..22,/HH-.- -) F""""}0E"FFF"f,,7E./8 8O34 			M6N		
 	
 	
 _$$s   !C   CCC2 2A.E c                 D    |                     d          r
|dd         n|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 ; ;Jy}}Jr'   c                     |                      |          }|                    d          d         }|dk    r|                    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   rU      N)r  splitr   )r"   botonamersnames      r%   r  zFEndpointRulesetResolver._does_botocore_authname_match_ruleset_authname
  sc    4 ''//>>#&&q)t 3 3D 9 9|H!!r'   c                 t   |j                             d          }|dS |                    d          r?	 |                    d          d         }n# t          $ r |}Y nw xY wt          |          S | j        j        }|dk    r|dk    s|d	k    rt          |
          S |                    d          si|                    d          sT|                    d          s?|                    d          s*|                    d          s|                    d          rt          |
          S |
                                                    d          rt          |          S |dk    r|                    d          r&|                    d          }t          ||          S |                    d          s|                    d          rt          |
          S |dk    rt          |          S |dk    r;|                    d          rt          |
          S |dk    rt          |
          S dS )zAttempts to translate ruleset errors to pre-existing botocore
        exception types by string matching exception strings.
        r  NzInvalid region in ARN: `   )labelrU   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.)kwargsrQ   r   r7  
IndexErrorr   r   r#   r   r   lowerr   r   r   r   )r"   ruleset_exceptionr  r  r=  r#   rA  s          r%   r   z;EndpointRulesetResolver.ruleset_error_to_botocore_exception*  s     &**511;F>>344 	6		#q)   (u5555*74HHH???63????=>>K>>"<==K >>"EFFK >>"@AA	K
 >>":;;K >>"GHHK BcJJJJyy{{%%n55 8+37777;&&~~n-- Fjj**3EEEE~~677 G3>>5< < G >#FFFF999+377778##~~6  B 9SAAAA>>>8SAAAAts   A A A c                     |dk    r&t          d|                                            d S |dk    rt          d           d S d S )NAccountIdEndpointModeACCOUNT_ID_MODE_	AccountIdRESOLVED_ACCOUNT_ID)r   upper)r"   r   r   s      r%   r   z6EndpointRulesetResolver._register_endpoint_feature_idsa  s]    000 F9??3D3D F FGGGGG;&& 566666 '&r'   )TN)r1   r2   r3   r4   r>   r&   r   r   r   r   r   r   r   r   r   r   r   r   r/  r  r  r   r   r5   r'   r%   r   r     sj       ?? "" " " "04 4 4l     DG G G,1 1 1. . .@ @ @4 4 4   
 
 ^
 
 
 ^
 
 
 ^
# # #a% a% a%FK K K" " "@5 5 5n7 7 7 7 7r'   r   )/r4   rv   loggingrp   enumr   r   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.useragentr   botocore.utilsr   r   	getLoggerr1   rh   DEFAULT_URI_TEMPLATErf   r   r7   strr   r   r5   r'   r%   <module>rY     sX      				        ) ) ) ) ) ) ) ) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 7                                 3 2 2 2 2 2 9 9 9 9 9 9 9 9g!!7 #R( :" :" :" :" :" :" :" :"zu
 u
 u
 u
 u
+ u
 u
 u
p	 B  B  B  B  BsD  B  B  BFV7 V7 V7 V7 V7 V7 V7 V7 V7 V7r'   