Ë
    £ªði%ˆ  ã                   óR  — 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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jL                  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)zÛResolves 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Úresolve_auth_scheme_preference©Ú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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      úg/var/www/acinvestment.org/public_html/aci/backend/venv/lib/python3.12/site-packages/botocore/regions.pyÚconstruct_endpointz'BaseEndpointResolver.construct_endpoint>   s
   € ô6 "Ð!ó    c                 ó   — t         ‚)z�Lists 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_partitions[   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_endpointsb   s
   € ô& "Ð!r(   ©N)ÚawsF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r*   r.   © r(   r&   r   r   ;   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__}   s(   € ð ˜}Ñ,ÜÐDÓEÐEØ+ˆÔØ!2ˆÕr(   c                 ód   — | j                   d   D ]  }|d   |k7  rŒ|d   }||vrŒ||   d   c S  y )Nr9   Ú	partitionÚservicesr   )r;   )r#   r$   r,   r@   rA   s        r&   Úget_service_endpoints_dataz+EndpointResolver.get_service_endpoints_data‹   sQ   € Ø×,Ñ,¨\Ñ:ò 	7ˆIØ˜Ñ%¨Ò7ØØ  Ñ,ˆHØ 8Ñ+ØØ˜LÑ)¨+Ñ6Ò6ñ	7r(   c                 óZ   — g }| j                   d   D ]  }|j                  |d   «       Œ |S )Nr9   r@   )r;   Úappend)r#   Úresultr@   s      r&   r*   z)EndpointResolver.get_available_partitions”   s7   € ØˆØ×,Ñ,¨\Ñ:ò 	2ˆIØ�M‰M˜) KÑ0Õ1ð	2àˆ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 )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ˆIØ˜Ñ%¨Ò7ØØ  Ñ,ˆHØ 8Ñ+ØØ (¨Ñ 6°{Ñ CÐØ!2ò 
1�Ø'4¸	À)Ñ8LÐ'LÐ$á(Ñ-AØ#'×#>Ñ#>Ø)¨-Ñ8Ð:Oó$�Lò $ØŸ™ mÕ4Ù'Ò+?Ø—M‘M -Õ0ñ
1ð	1ð$ ˆ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 )Nr9   r@   ÚdefaultsÚ	dnsSuffix)r;   rH   Úget)r#   r,   rI   r@   Úvariants        r&   Úget_partition_dns_suffixz)EndpointResolver.get_partition_dns_suffix¶   st   € ð ×,Ñ,¨\Ñ:ò 		2ˆIØ˜Ñ%¨Ó7Ù(Ø"×9Ñ9Ø!Ÿ™ jÓ1Ð3Hó�Gò  ;°'Ò#9Ø& {Ñ3Ò3à$ [Ñ1Ò1ð		2ð 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-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ð0ð Ð*Ø×5Ñ5Ø#Ø ØØ*Ø%Øó�ð �Øð ×,Ñ,¨\Ñ:ò 	ˆIÙ%Ø˜+Ñ&Ø×9Ñ9ñ:ð Ø×1Ñ1ØØØØ&Ø!óˆFò Ø’ñ	r(   c                 óv   — | j                   d   D ]  }| j                  ||«      sŒ|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÷   sL   € Ø×,Ñ,¨\Ñ:ò 	.ˆ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©Ú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   sm  € ð # ;Ñ/ˆá"Ø $×"HÑ"HÑHðØ&Ð' zð3ð ô '¨[¨MÀYÔOÐOð ! Ñ,×0Ñ0ØÔ.ó
ˆð ÐØ" lÑ2Ø*Ð+>Ñ?‘ä#“oÐ%ð #Ø(Ø(Ø(Ø&<Ø!2ñ
ˆð ˜, {Ñ3Ñ3Ø �4—=‘=Ñ2 >Ñ2Ð2ð ×Ñ˜i¨Ô5¹à!-×!1Ñ!1Ð2EÓ!FÐØ*×.Ñ.Ð/?ÀÓFˆOÙ!©/Ü—	‘	Ø=Ø ØØ&ô	ð 3E�˜Ñ/Ø$�t—}‘}Ñ6 ~Ñ6Ð6Ü�I‰IØ<ØØôð
 !�4—=‘=Ñ2 >Ñ2Ð2ð% :Ir(   c                 ój   — ||d   v ryd|v r't        j                  |d   «      j                  |«      S y)NrG   TÚregionRegexF)ÚreÚcompileÚmatch)r#   r@   r%   s      r&   r]   zEndpointResolver._region_matchA  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Úvariantsrb   )rQ   ÚsetÚcopy)r#   r=   rb   rt   rR   rE   s         r&   rH   z'EndpointResolver._retrieve_variant_dataH  sH   € Ø ×$Ñ$ Z°Ó4ˆØò 	ˆGÜ�7˜6‘?Ó#¤s¨4£yÓ0Ø Ÿ™›�Ø’ñ	r(   c                 óV   — g }|r|j                  d«       |r|j                  d«       |S )Nr`   Úfips)rD   )r#   rX   rY   rb   s       r&   Ú_create_tag_listz!EndpointResolver._create_tag_listO  s*   € ØˆÙ!Ø�K‰K˜Ô$ÙØ�K‰K˜ÔØˆr(   c                 ól   — i }|||fD ])  }| j                  ||«      }|sŒ| j                  ||«       Œ+ |S r/   )rH   Ú_merge_keys)r#   rb   r=   Úservice_defaultsÚpartition_defaultsrE   rt   rR   s           r&   Ú_resolve_variantz!EndpointResolver._resolve_variantW  sM   € ð ˆØ&Ð(8Ð:LÐMò 	2ˆHØ×1Ñ1°(¸DÓAˆGÚØ× Ñ  ¨&Õ1ð	2ð ˆ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   Ú
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._resolvea  s¬  € ð %×(Ñ(¨°bÓ9×=Ñ=Ø˜2ó
ˆð ×Ñ˜\Ô*Ü�K‰KØGØôð
 (×+Ñ+¨J¸Ó;ÐØ&Ÿ]™]¨:°rÓ:ÐØ×$Ñ$Ð%;Ð=NÓOˆáØ×*Ñ*Ø�mÐ%5Ð7IóˆFð ˜Š|à2°<°.ð A!Ø!. ð1ð ô +°À	ÔJÐJØ×Ñ˜]¨FÕ3à"ˆFð ˜fÑ$Ø"+¨KÑ"8ˆF�;Ñà'¨Ñ4ˆˆ{ÑØ!.ˆˆ~Ñð 	×ÑÐ)¨6Ô2Ø×ÑÐ+¨VÔ4à!×2Ñ2ØØ�:ÑØØØ�;Ñó
ˆˆzÑð ˜fÑ$Ø&*×&;Ñ&;ØØ�Ñ'ØØØ�{Ñ#ó'ˆF�?Ñ#ð ˆr(   c                 ó,   — |D ]  }||vsŒ||   ||<   Œ y r/   r5   )r#   Ú	from_datarE   Úkeys       r&   r{   zEndpointResolver._merge_keys£  s&   € Øò 	-ˆCØ˜&Ò Ø'¨™n��s’ñ	-r(   c                 ó*   — |j                  |||¬«      S )N)ÚserviceÚregionrP   )Úformat)r#   r@   Útemplater$   rK   rP   s         r&   r…   z!EndpointResolver._expand_template¨  s!   € ð �‰Ø ¨À)ð ó 
ð 	
r(   )F)r0   )r0   FNr/   )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   x   s‚   „ ÙAà)2°KÐ(@Ð%ó3ó7òð Ø Ø"óð: 59óð$ ØØ$Øó0òd
ð  ó?3òBòòòò@òD-ó

r(   r7   c                   óD   — 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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::S3::DisableS3ExpressSessionAuthz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_S3_DISABLE_EXPRESS_SESSION_AUTHÚAWS_S3CONTROL_USE_ARN_REGIONÚAWS_S3_DISABLE_MRAPÚSDK_ENDPOINTÚ
ACCOUNT_IDÚACCOUNT_ID_ENDPOINT_MODEr5   r(   r&   r�   r�   °  sd   „ à€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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Ú_auth_scheme_preferenceÚ_instance_cache)
r#   Úendpoint_ruleset_datar¢   Úservice_modelÚbuiltinsÚclient_contextÚevent_emitterÚuse_sslÚrequested_auth_schemeÚauth_scheme_preferences
             r&   r>   z EndpointRulesetResolver.__init__Û  sn   € ô *Ø.Ø)ô
ˆŒð #'§.¡.×"8Ñ"8×"CÑ"CˆÔØ+ˆÔØ!ˆŒØ-ˆÔØ+ˆÔØˆŒØ&;ˆÔ#Ø'=ˆÔ$Ø!ˆÕr(   c           	      ó\  — |€i }|€i }| j                  |||«      }t        j                  d|«       	  | j                  j                  di |¤Ž}t        j                  d|j                  «       | j                  sA|j                  j                  d«      r&d|v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: %szEndpoint provider result: %szhttps://ÚEndpointzhttp://é   )Úurlr   )Ú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_exceptionrˆ   Úvals
             r&   r'   z*EndpointRulesetResolver.construct_endpointõ  s\  € ð ÐØˆIàÐ"Ø ˆOà×3Ñ3Ø˜Y¨ó
ˆô 	�	‰	Ø;¸_ô	
ð	1Ø=˜dŸn™n×=Ñ=ñ Ø!ñˆOô 	�	‰	Ð0°/×2EÑ2EÔFð —’Ø×#Ñ#×.Ñ.¨zÔ:Ø /Ñ1à-×6Ñ6Ø˜o×1Ñ1°!°"Ð5Ð6Ð7ð 7ó ˆOð *×2Ñ2à,;×,CÑ,C×,IÑ,IÓ,K÷Ù (  S��S˜‘V‘óð 3ó 
ˆð Ðøô; %ò 	1Ø!%×!IÑ!IØ�Oó"Ðð "Ð)Øà(¨bÐ0ûð	1üó0s   ³C? Ã$D(
Ã?	D%ÄD Ä D%c                 ó&  — i }| j                  |||«      }| j                  j                  «       D ]^  \  }}| j                  |||¬«      }|€)|j                  �| j                  |j                  |¬«      }|€ŒH|||<   | 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Ã   )Ú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ò 	KÑ!ˆJ˜	Ø×8Ñ8Ø%Ø /Ø#ð 9ó ˆIð
 Ð  Y×%6Ñ%6Ð%BØ ×:Ñ:Ø!*×!2Ñ!2Ø0ð ;ó �	ð Ñ$Ø.7� 
Ñ+Ø×3Ñ3°JÀ	ÕJð	Kð Ðr(   c                 ó¬   — | j                  ||«      }|�|S | j                  |||«      }|�|S | j                  |||«      }|�|S | j                  |«      S r/   )Ú&_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_contextM  sƒ   € ð ×<Ñ<Ø˜ó
ˆð ÐØˆMØ×>Ñ>Ø˜¨ó
ˆð ÐØˆNà×:Ñ:Ø˜O¨Yóð 	!ð
 $Ð/Ø+Ð+Ø×:Ñ:¸:ÓFÐFr(   c                 óF   — | j                  |«      }|j                  |«      S r/   )Ú_get_static_context_paramsrQ   )r#   rË   rÂ   Ústatic_ctx_paramss       r&   rÖ   z>EndpointRulesetResolver._resolve_param_as_static_context_paramc  s&   € ð !×;Ñ;¸OÓLÐØ ×$Ñ$ ZÓ0Ð0r(   c                 óZ   — | j                  |«      }||v r||   }|j                  |«      S y r/   )Ú_get_dynamic_context_paramsrQ   )r#   rË   rÂ   rÃ   Údynamic_ctx_paramsÚmember_names         r&   r×   z?EndpointRulesetResolver._resolve_param_as_dynamic_context_parami  s<   € ð "×=Ñ=¸oÓNÐØÐ+Ñ+Ø,¨ZÑ8ˆKØ—=‘= Ó-Ð-ð ,r(   c                 ól   — | j                  «       }||v r ||   }| j                  j                  |«      S y r/   )Ú_get_client_context_paramsr©   rQ   )r#   rË   Úclient_ctx_paramsÚclient_ctx_varnames       r&   rÙ   z>EndpointRulesetResolver._resolve_param_as_client_context_paramq  sB   € Ø ×;Ñ;Ó=ÐØÐ*Ñ*Ø!2°:Ñ!>ÐØ×'Ñ'×+Ñ+Ð,>Ó?Ð?ð +r(   c                 ó`   — |j                   }||v r||   d   }t        j                  ||«      S y )NÚpath)Úoperation_context_parametersÚjmespathÚsearch)r#   rË   rÂ   rÃ   Úoperation_ctx_paramsré   s         r&   rØ   zAEndpointRulesetResolver._resolve_param_as_operation_context_paramw  s>   € ð  /×KÑKÐØÐ-Ñ-Ø'¨
Ñ3°FÑ;ˆDÜ—?‘? 4¨Ó3Ð3ð .r(   c                 ó¤   — |t         j                  j                  «       vrt        |¬«      ‚|j	                  |«      }t        |«      r |«       S |S )N)Úname)r�   Ú__members__Úvaluesr   rQ   Úcallable)r#   rÌ   r±   rÏ   s       r&   rÐ   z1EndpointRulesetResolver._resolve_param_as_builtin  sH   € ØÔ7×CÑC×JÑJÓLÑLÜ6¸LÔIÐIØ—,‘,˜|Ó,ˆÜ�GÔÙ“9ÐØˆ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‡  s7   € ð
 )×BÑBö
àð �J‰J˜Ÿ™Ñ#ò
ð 	
ùò 
ó   �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_params�  s9   € ð
 )×;Ñ;ö
àð �J‰J˜×)Ñ)Ñ)ò
ð 	
ùò 
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_params—  sB   € ð
 ×,Ñ,×FÑFö
àð �J‰Jœ
 5§:¡:Ó.Ñ.ò
ð 	
ùò 
s   ™'Ac                 óÒ   — | j                   j                  j                  «       }t        j                  | 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Ÿ  sh   € ð ×(Ñ(×3Ñ3×=Ñ=Ó?ˆ
Ü"Ÿi™i¨¯©Ó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]  }|d   j                  d«      d	   ‘Œ }}|D �cg c]  }i |¥d‰ j                  |d   «      i¥‘Œ }}‰ j                  �	 t        ˆ fd„|D «       «      \  }}nƒ‰ j                  �a‰ j                  j                  d«      }|D �ci c])  }‰ j                  |d   j                  d«      d	   «      |“Œ+ }}t        ||«      }||   }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 c c}w # t        $ r d
i fcY S w xY wc c}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ï   Únoneú#éÿÿÿÿNc              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Ñ3°Q°v±Yôð ×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,   è ø€ ò $àØ˜‘y¤NÑ2ð �v‘Y ”Nñ$ùs   ‚Fc              3   ó,   K  — | ]  }|t         v –— Œ y ­wr/   r	   )r  Úschemes     r&   r  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>ø  s   è ø€ ò +à"ð Ô":Ô:ñ+ùs   ‚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Ú	TypeErrorrh   ri   ÚjoinrQ   r¬   r   ÚsplitÚ_strip_sig_prefixÚnextÚStopIterationr­   r   r   Úanyr   r   Úupdater   )r#   Úauth_schemesr  Úavailable_ruleset_namesr  rï   ÚprefsÚauth_schemes_by_auth_typeÚfixable_with_crtÚauth_type_optionsÚsigning_contexts   `          r&   Úauth_schemes_to_signing_ctxz3EndpointRulesetResolver.auth_schemes_to_signing_ctx®  s6  ø€ ô ˜,¬Ô-´°\Ó1BÀaÒ1GÜÐDÓEÐEä�	‰	ð1à�I‰I°\ÖB°˜˜1Ÿ5™5 ›=˜/¨Ò+ÒBÓCØ×'Ñ'ô		
ð ×&Ñ&¬(Ò2Ø˜2�:Ðð /;ö#
Ø)*ˆAˆf‰I�O‰O˜CÓ  Ó$ð#
Ðð #
ð
 'ö
àð GˆvÐF�v˜t×5Ñ5°f¸V±nÓEÓFð
ˆð 
ð ×&Ñ&Ð2ð ô  $ó $à)ô$ó  ‘�‘fð ×)Ñ)Ð5Ø×0Ñ0×6Ñ6°sÓ;ˆEð &ö)àð ×&Ñ& q¨¡y§¡°sÓ';¸BÑ'?Ó@À!ÑCð)Ð%ð )ô 2ØÐ.óˆDð /¨tÑ4‰FðÜ#ñ $à)ô$ó  ‘��fð6 ˆØ˜fÑ$Ø(.¨Ñ(?ˆO˜HÒ%Ø 6Ñ)Ü�6Ð,Ñ-Ó.°Ò2Ø,/¯H©HØÐ-Ñ.ó-� Ñ)ð ˜FÑ"Ø×"Ñ"°°}Ñ0EÐ"ÔFØ" fÑ,Ü7EØÐ.Ñ/ó8ˆOÐ3Ñ4ô 	�	‰	ØMØ�6‰NØØô		
ð �_Ð$Ð$ùòw Cùò#
ùò
øô  !ò  ð ˜R�x’ð	 üò)øô !ò ð $)Ð Ø8DÖ$E°1 Q v£YÑ$EùÒ$EÐ!Ð$EÝÜ'*ñ +à&7ô+ó (Ð$ñ
 $Ü4ðLôð ô
 7Ø*.¯)©)Ð4EÓ*Fôð ð%úsC   Á
HÂHÂ;!HÃ+H Ä..H0Å1H5 ÈH-È,H-È5JÉIÉA
J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Ñ 4°UÔ ;ˆ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   rU   é   N)r!  r   r¿   )r#   ÚbotonameÚrsnames      r&   r  zFEndpointRulesetResolver._does_botocore_authname_match_ruleset_authname"  sR   € ð4 ×'Ñ'¨Ó/ˆØ—>‘> #Ó& qÑ)ˆØ�tÒ × 3Ñ 3°DÔ 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)z„Attempts 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¿   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_exceptionB  sÀ  € ð  ×&Ñ&×*Ñ*¨5Ó1ˆØˆ;Øà�>‰>Ð3Ô4ðØŸ	™	 #› qÑ)�ô )¨uÔ5Ð5à×*Ñ*×7Ñ7ˆØ˜4ÒàÐHÒHØÐ?Ò?ä6¸3Ô?Ð?à—‘Ð=Ô>Ø—>‘>Ð"<Ô=Ø—>‘>Ð"EÔFØ—>‘>Ð"@ÔAØ—>‘>Ð":Ô;Ø—>‘>Ð"GÔHäAÀcÔJÐJØ�y‰y‹{×%Ñ% nÔ5Ü+°3Ô7Ð7Ø˜;Ò&Ø�~‰~˜nÔ-Ø—j‘j Ó*�Ü3¸ÀÔEÐEØ�~‰~Ð6Ô7¸3¿>¹>Ø5ô<ô >À#ÔFÐFØÐ9Ò9Ü+°3Ô7Ð7Ø˜8Ò#Ø�~‰~ð6ôô 9¸SÔAÐAØÐ>Ò>Ü8¸SÔAÐAØøôQ ò Ø“ðús   ±G ÇGÇGc                 ój   — |dk(  rt        d|j                  «       › �«       y |dk(  rt        d«       y y )NÚAccountIdEndpointModeÚACCOUNT_ID_MODE_Ú	AccountIdÚRESOLVED_ACCOUNT_ID)r   Úupper)r#   rË   rÔ   s      r&   rÑ   z6EndpointRulesetResolver._register_endpoint_feature_idsy  s9   € ØÐ0Ò0ÜÐ"2°9·?±?Ó3DÐ2EÐ FÕGØ˜;Ò&ÜÐ 5Õ6ð 'r(   )TNN)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Ÿ   Ø  s    „ Ù?ð Ø"Ø#ó"ò44òl òDGò,1ò.ò@ò4òð ñ
ó ð
ð ñ
ó ð
ð ñ
ó ð
ò#òn%ò`Kò"ò@5ón7r(   rŸ   )0r4   rv   Úloggingrp   Úenumr   rë   Úbotocorer   r   Úbotocore.authr   r   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>rV     s§   ðñó Û Û 	Ý ã ç )÷ñ õ
 2Ý 7÷÷ ÷ ÷ õ  3ß 9à€g×Ñ˜Ó!€Ø7Ð Ø# RÐ(Ð ÷:"ñ :"ôzu
Ð+ô u
ôp	%B˜s Dô %B÷Pe7ò e7r(   