Ë
    £ªðiœÉ  ã                   óØ  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZmZmZ d	Zd
ZdZ ej6                  d«      ZdZdZeefZdefd„Z  G d„ d«      Z! G d„ de!«      Z" G d„ de"«      Z# G d„ de!«      Z$ G d„ de!«      Z% G d„ de!«      Z& G d„ de!«      Z' G d„ d e&e$«      Z( G d!„ d"e&«      Z) G d#„ d$e'e%«      Z*e#e"e$e(e)e*d%œZ+y)&aî  Protocol input serializes.

This module contains classes that implement input serialization
for the various AWS protocol types.

These classes essentially take user input, a model object that
represents what the expected input should look like, and it returns
a dictionary that contains the various parts of a request.  A few
high level design decisions:


* Each protocol type maps to a separate class, all inherit from
  ``Serializer``.
* The return value for ``serialize_to_request`` (the main entry
  point) returns a dictionary that represents a request.  This
  will have keys like ``url_path``, ``query_string``, etc.  This
  is done so that it's a) easy to test and b) not tied to a
  particular HTTP library.  See the ``serialize_to_request`` docstring
  for more details.

Unicode
-------

The input to the serializers should be text (str/unicode), not bytes,
with the exception of blob types.  Those are assumed to be binary,
and if a str/unicode type is passed in, it will be encoded as utf-8.
é    N)ÚElementTree)Úvalidate)Ú
formatdate)ÚParamValidationError)Úregister_feature_id)Ú
has_headerÚis_json_value_headerÚparse_to_aware_datetimeÚpercent_encodeÚiso8601z%Y-%m-%dT%H:%M:%SZz%Y-%m-%dT%H:%M:%S.%fZz^[A-Za-z0-9\.\-]+$ÚdefaultÚmillisecondTc                 ó|   — t        |    |¬«      }|r*t        j                  «       }t        j                  ||«      }|S )a3  Create a serializer for the given protocol.
    :param protocol_name: The protocol name to create a serializer for.
    :type protocol_name: str
    :param include_validation: Whether to include parameter validation.
    :type include_validation: bool
    :param timestamp_precision: Timestamp precision level.
        - 'default': Microseconds for ISO timestamps, seconds for Unix and RFC
        - 'millisecond': Millisecond precision (ISO/Unix), seconds for RFC
    :type timestamp_precision: str
    :return: A serializer instance for the given protocol.
    )Útimestamp_precision)ÚSERIALIZERSr   ÚParamValidatorÚParamValidationDecorator)Úprotocol_nameÚinclude_validationr   Ú
serializerÚ	validators        úi/var/www/acinvestment.org/public_html/aci/backend/venv/lib/python3.12/site-packages/botocore/serialize.pyÚcreate_serializerr   M   sA   € ô" ˜]Ñ+Ø/ô€Jñ Ü×+Ñ+Ó-ˆ	Ü×6Ñ6°yÀ*ÓMˆ
ØÐó    c                   ól   — e Zd ZdZeZdZefd„Zd„ Z	d„ Z
d„ Zd„ Zd„ Zdd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy	)Ú
SerializerÚPOSTúutf-8c                 ó>   — |t         vrt        d|› �«      ‚|| _        y )Nz=Invalid timestamp precision found while creating serializer: )ÚTIMESTAMP_PRECISION_OPTIONSÚ
ValueErrorÚ_timestamp_precision)Úselfr   s     r   Ú__init__zSerializer.__init__p   s.   € ØÔ&AÑAÜØOÐPcÐOdÐeóð ð %8ˆÕ!r   c                 ó   — t        d«      ‚)aö  Serialize parameters into an HTTP request.

        This method takes user provided parameters and a shape
        model and serializes the parameters to an HTTP request.
        More specifically, this method returns information about
        parts of the HTTP request, it does not enforce a particular
        interface or standard for an HTTP request.  It instead returns
        a dictionary of:

            * 'url_path'
            * 'host_prefix'
            * 'query_string'
            * 'headers'
            * 'body'
            * 'method'

        It is then up to consumers to decide how to map this to a Request
        object of their HTTP library of choice.  Below is an example
        return value::

            {'body': {'Action': 'OperationName',
                      'Bar': 'val2',
                      'Foo': 'val1',
                      'Version': '2014-01-01'},
             'headers': {},
             'method': 'POST',
             'query_string': '',
             'host_prefix': 'value.',
             'url_path': '/'}

        :param parameters: The dictionary input parameters for the
            operation (i.e the user input).
        :param operation_model: The OperationModel object that describes
            the operation.
        Úserialize_to_request©ÚNotImplementedError)r#   Ú
parametersÚoperation_models      r   r&   zSerializer.serialize_to_requestw   s   € ôH "Ð"8Ó9Ð9r   c                 ó*   — dd| j                   i ddœ}|S )Nú/Ú r   )Úurl_pathÚquery_stringÚmethodÚheadersÚbody)ÚDEFAULT_METHOD)r#   Ú
serializeds     r   Ú_create_default_requestz"Serializer._create_default_request�   s(   € ð ØØ×)Ñ)Øàñ
ˆ
ð Ðr   c                 óÒ   — | j                   t        k(  r(|j                  dz  }|j                  d«      d|d›d�z   S |j                  dkD  rt        }nt
        }|j                  |«      S )zEReturn ISO8601 timestamp with precision based on timestamp_precision.éè  z%Y-%m-%dT%H:%M:%Sú.Ú03dÚZr   )r"   ÚTIMESTAMP_PRECISION_MILLISECONDÚmicrosecondÚstrftimeÚISO8601_MICROÚISO8601)r#   ÚvalueÚmillisecondsÚtimestamp_formats       r   Ú_timestamp_iso8601zSerializer._timestamp_iso8601¬   sr   € ð ×$Ñ$Ô(GÒGØ ×,Ñ,°Ñ4ˆLà—‘Ð2Ó3¸¸,ÀsÐ9KÈ1Ð6MÑMðð
 × Ñ  1Ò$Ü#0Ñ ä#*Ð Ø—>‘>Ð"2Ó3Ð3r   c                 óô   — | j                   t        k(  r:t        j                  |j	                  «       «      }|j
                  dz  dz  }||z   S t        t        j                  |j	                  «       «      «      S )zBReturn unix timestamp with precision based on timestamp_precision.r7   g     @�@)r"   r;   ÚcalendarÚtimegmÚ	timetupler<   Úint)r#   r@   Úbase_timestamprA   s       r   Ú_timestamp_unixtimestampz#Serializer._timestamp_unixtimestamp¼   sc   € ð ×$Ñ$Ô(GÒGÜ%Ÿ_™_¨U¯_©_Ó->Ó?ˆNØ!×-Ñ-°Ñ5¸Ñ?ˆLØ! LÑ0Ð0ä”x—‘ u§¡Ó'8Ó9Ó:Ð:r   c                 ó¨   — t        |t        j                  «      r,t        t        j                  |j                  «       «      «      }t        |d¬«      S )zSReturn RFC822 timestamp (always second precision - RFC doesn't support sub-second).T)Úusegmt)Ú
isinstanceÚdatetimerH   rE   rF   rG   r   ©r#   r@   s     r   Ú_timestamp_rfc822zSerializer._timestamp_rfc822Æ   s;   € ô �eœX×.Ñ.Ô/ÜœŸ™¨¯©Ó(9Ó:Ó;ˆEÜ˜%¨Ô-Ð-r   Nc                 ó†   — |€| j                   }|j                  «       }t        |«      }t        | d|› �«      } ||«      }|S )NÚ_timestamp_)ÚTIMESTAMP_FORMATÚlowerr
   Úgetattr)r#   r@   rB   Údatetime_objÚ	converterÚfinal_values         r   Ú_convert_timestamp_to_strz$Serializer._convert_timestamp_to_strÍ   sR   € ØÐ#Ø#×4Ñ4ÐØ+×1Ñ1Ó3ÐÜ.¨uÓ5ˆÜ˜D KÐ0@Ð/AÐ"BÓCˆ	Ù Ó-ˆØÐr   c                 ó:   — |j                   j                  d|«      S ©NÚname©ÚserializationÚget)r#   ÚshapeÚdefault_names      r   Ú_get_serialized_namezSerializer._get_serialized_nameÖ   s   € ð ×"Ñ"×&Ñ& v¨|Ó<Ð<r   c                 óÐ   — t        |t        «      r|j                  | j                  «      }t	        j
                  |«      j                  «       j                  | j                  «      S ©N)rM   ÚstrÚencodeÚDEFAULT_ENCODINGÚbase64Ú	b64encodeÚstripÚdecoderO   s     r   Ú_get_base64zSerializer._get_base64Û   sM   € ô �eœSÔ!Ø—L‘L ×!6Ñ!6Ó7ˆEÜ×Ñ Ó&×,Ñ,Ó.×5Ñ5°d×6KÑ6KÓLÐLr   c                 óÜ  — |j                   }|�d|vry |d   }|j                  €|S |j                  j                  }|j                  «       D ��cg c]"  \  }}|j                  j                  d«      r|‘Œ$ }}}i }	g }
|D ]2  }||   }t        j                  |«      s|
j                  |«       ||	|<   Œ4 |
rt        ddj                  |
«      › d�¬«      ‚ |j                  di |	¤ŽS c c}}w )NÚ
hostPrefixÚ	hostLabelz Invalid value for parameter(s): z, z?. Must contain only alphanumeric characters, hyphen, or period.)Úreport© )ÚendpointÚinput_shapeÚmembersÚitemsr^   r_   ÚHOST_PREFIX_REÚmatchÚappendr   ÚjoinÚformat)r#   r)   r*   Úoperation_endpointÚhost_prefix_expressionÚinput_membersÚmemberr`   Úhost_labelsÚformat_kwargsÚ
bad_labelsr\   Úparams                r   Ú_expand_host_prefixzSerializer._expand_host_prefixã   s%  € Ø,×5Ñ5ÐàÐ&ØÐ#5Ñ5àà!3°LÑ!AÐØ×&Ñ&Ð.Ø)Ð)Ø'×3Ñ3×;Ñ;ˆð "/×!4Ñ!4Ó!6÷
á�˜Ø×"Ñ"×&Ñ& {Ô3ò ð
ˆñ 
ð
 ˆØˆ
Øò 	(ˆDØ˜tÑ$ˆEÜ!×'Ñ'¨Ô.Ø×!Ñ! $Ô'Ø"'ˆM˜$Òð		(ñ
 Ü&à6°t·y±yÀÓ7LÐ6Mð N!ð !ôð ð -Ð%×,Ñ,Ñ=¨}Ñ=Ð=ùó)
s   Á'C(c                 ó8   — |j                   j                  d«      S )NÚ	flattenedr]   ©r#   r`   s     r   Ú_is_shape_flattenedzSerializer._is_shape_flattened  s   € Ø×"Ñ"×&Ñ& {Ó3Ð3r   c                 ó|   — |t        d«      k(  rd}|S |t        d«      k(  rd}|S t        j                  |«      rd}|S )NÚInfinityz	-InfinityÚNaN)ÚfloatÚmathÚisnanrO   s     r   Ú_handle_floatzSerializer._handle_float  sN   € Ø”E˜*Ó%Ò%ØˆEð
 ˆð	 ”e˜KÓ(Ò(ØˆEð ˆô �Z‰Z˜ÔØˆEØˆr   c                 óB   — |j                   j                  r	d|d   d<   y y )NÚtruer1   zx-amzn-query-mode)Úservice_modelÚis_query_compatible)r#   r*   r4   s      r   Ú_handle_query_compatible_traitz)Serializer._handle_query_compatible_trait  s&   € Ø×(Ñ(×<Ò<Ø9?ˆJ�yÑ!Ð"5Ò6ð =r   rd   )Ú__name__Ú
__module__Ú__qualname__r3   ÚdictÚMAP_TYPErg   ÚTIMESTAMP_PRECISION_DEFAULTr$   r&   r5   rC   rJ   rP   rY   rb   rl   rƒ   r‡   rŽ   r“   rq   r   r   r   r   g   s\   „ Ø€Nð
 €HØÐà+Fó 8ò$:òLò4ò ;ò.óò=ò
Mò >òD4òó@r   r   c                   óf   — e Zd ZdZd„ Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Zdd„Zdd„Zy)ÚQuerySerializerr   c                 óf  — |j                   }| j                  «       }|j                  j                  d| j                  «      |d<   ddi|d<   | j                  «       }|j                  |d<   |j                  d   |d<   |�| j                  |||«       ||d<   | j                  ||«      }|�||d	<   |S )
Nr0   úContent-Typez0application/x-www-form-urlencoded; charset=utf-8r1   ÚActionÚ
apiVersionÚVersionr2   Úhost_prefix)
rs   r5   Úhttpr_   r3   r˜   r\   ÚmetadataÚ
_serializerƒ   )r#   r)   r*   r`   r4   Úbody_paramsr¡   s          r   r&   z$QuerySerializer.serialize_to_request  sÏ   € Ø×+Ñ+ˆØ×1Ñ1Ó3ˆ
Ø.×3Ñ3×7Ñ7Ø�d×)Ñ)ó 
ˆ
�8Ñð ÐNð!
ˆ
�9Ñð
 —m‘m“oˆØ /× 4Ñ 4ˆ�HÑØ!0×!9Ñ!9¸,Ñ!Gˆ�IÑØÐØ�O‰O˜K¨°UÔ;Ø(ˆ
�6Ñà×.Ñ.¨z¸?ÓKˆØÐ"Ø(3ˆJ�}Ñ%àÐr   c                 ód   — t        | d|j                  › �| j                  «      } |||||¬«       y )NÚ_serialize_type_)Úprefix©rU   Ú	type_nameÚ_default_serialize)r#   r4   r@   r`   r¨   r0   s         r   r¤   zQuerySerializer._serialize1  s9   € ô ØØ˜uŸ™Ð/Ð0Ø×#Ñ#ó
ˆñ
 	ˆz˜5 %°Ö7r   c                 ó´   — |j                   }|j                  «       D ]9  \  }}||   }| j                  ||«      }|r|› d|› �}| j                  ||||«       Œ; y )Nr8   )rt   ru   rb   r¤   )	r#   r4   r@   r`   r¨   rt   ÚkeyÚmember_shapeÚmember_prefixs	            r   Ú_serialize_type_structurez)QuerySerializer._serialize_type_structure@  sf   € Ø—-‘-ˆØŸ+™+›-ò 	L‰JˆC�Ø" 3™<ˆLØ ×5Ñ5°lÀCÓHˆMÙØ#) (¨!¨M¨?Ð ;�Ø�O‰O˜J¨¨|¸]ÕKñ	Lr   c                 óÞ  — |sd||<   y | j                  |«      rl|}|j                  j                  j                  d«      rr| j	                  |j                  d¬«      }dj                  |j                  d«      d d |gz   «      }n-|j                  j                  j                  dd«      }|› d|› �}t        |d«      D ],  \  }}	|› d|› �}
|j                  }| j                  ||	||
«       Œ. y )Nr-   r\   ©ra   r8   éÿÿÿÿr~   é   )	r‡   r~   r^   r_   rb   ry   ÚsplitÚ	enumerater¤   )r#   r4   r@   r`   r¨   Úlist_prefixr\   Ú	list_nameÚiÚelementÚelement_prefixÚelement_shapes               r   Ú_serialize_type_listz$QuerySerializer._serialize_type_listI  sî   € Ùà!#ˆJ�vÑØØ×#Ñ# EÔ*Ø ˆKØ�|‰|×)Ñ)×-Ñ-¨fÔ5Ø×0Ñ0°·±ÈBÐ0ÓO�à!Ÿh™h v§|¡|°CÓ'8¸¸"Ð'=ÀÀÑ'FÓG‘àŸ™×2Ñ2×6Ñ6°v¸xÓHˆIØ#˜H A i [Ð1ˆKÜ# E¨1Ó-ò 	P‰JˆAˆwØ +˜}¨A¨a¨SÐ1ˆNØ!ŸL™LˆMØ�O‰O˜J¨°ÀÕOñ	Pr   c                 ó„  — | j                  |«      r|}n|› d�}|dz   }|j                  }|j                  }| j                  |d¬«      }	| j                  |d«      }
t	        |d«      D ]V  \  }}|j                  ||	¬«      }|j                  ||
¬«      }| j                  ||||«       | j                  |||   ||«       ŒX y )Nz.entryz.{i}.{suffix}r­   r²   r@   r´   )r¹   Úsuffix)r‡   r­   r@   rb   r¶   rz   r¤   )r#   r4   r@   r`   r¨   Úfull_prefixÚtemplateÚ	key_shapeÚvalue_shapeÚ
key_suffixÚvalue_suffixr¹   r­   Ú
key_prefixÚvalue_prefixs                  r   Ú_serialize_type_mapz#QuerySerializer._serialize_type_map\  sÌ   € Ø×#Ñ# EÔ*Ø ‰Kà#˜H FÐ+ˆKØ Ñ0ˆØ—I‘Iˆ	Ø—k‘kˆØ×.Ñ.¨yÀuÐ.ÓMˆ
Ø×0Ñ0°¸gÓFˆÜ  qÓ)ò 	O‰FˆAˆsØ!Ÿ™¨1°Z˜Ó@ˆJØ#Ÿ?™?¨Q°|˜?ÓDˆLØ�O‰O˜J¨¨Y¸
ÔCØ�O‰O˜J¨¨c©
°KÀÕNñ		Or   c                 ó,   — | j                  |«      ||<   y rd   ©rl   ©r#   r4   r@   r`   r¨   s        r   Ú_serialize_type_blobz$QuerySerializer._serialize_type_blobl  s   € à!×-Ñ-¨eÓ4ˆ
�6Òr   c                 ó`   — | j                  ||j                  j                  d«      «      ||<   y ©NÚtimestampFormat©rY   r^   r_   rË   s        r   Ú_serialize_type_timestampz)QuerySerializer._serialize_type_timestampp  s.   € Ø!×;Ñ;Ø�5×&Ñ&×*Ñ*Ð+<Ó=ó
ˆ
�6Òr   c                 ó   — |rd||<   y d||<   y ©Nr�   Úfalserq   rË   s        r   Ú_serialize_type_booleanz'QuerySerializer._serialize_type_booleanu  s   € ÙØ!'ˆJ�vÒà!(ˆJ�vÒr   c                 ó   — |||<   y rd   rq   rË   s        r   r«   z"QuerySerializer._default_serialize{  s   € Ø"ˆ
�6Òr   c                 ó,   — | j                  |«      ||<   y rd   )rŽ   rË   s        r   Ú_serialize_type_floatz%QuerySerializer._serialize_type_float~  s   € Ø!×/Ñ/°Ó6ˆ
�6Òr   c                 ó,   — | j                  ||||«       y rd   ©rØ   rË   s        r   Ú_serialize_type_doublez&QuerySerializer._serialize_type_double�  ó   € Ø×"Ñ" :¨u°e¸VÕDr   N©r-   )r”   r•   r–   rS   r&   r¤   r°   r½   rÈ   rÌ   rÑ   rÕ   r«   rØ   rÛ   rq   r   r   r›   r›     sC   „ Ø Ðòó08óLóPó&Oó 5ó
ó
)ó#ó7ôEr   r›   c                   ó   — e Zd ZdZd„ Zdd„Zy)ÚEC2SerializeraU  EC2 specific customizations to the query protocol serializers.

    The EC2 model is almost, but not exactly, similar to the query protocol
    serializer.  This class encapsulates those differences.  The model
    will have be marked with a ``protocol`` of ``ec2``, so you don't need
    to worry about wiring this class up correctly.

    c                 ó¬   — d|j                   v r|j                   d   S d|j                   v r(|j                   d   }|d   j                  «       |dd  z   S |S )NÚ	queryNamer\   r   r´   )r^   Úupper)r#   r`   ra   r\   s       r   rb   z"EC2Serializer._get_serialized_name�  sd   € ð ˜%×-Ñ-Ñ-Ø×&Ñ& {Ñ3Ð3Ø�u×*Ñ*Ñ*ð ×&Ñ& vÑ.ˆDØ˜‘7—=‘=“? T¨!¨" XÑ-Ð-àÐr   c                 óz   — t        |d«      D ],  \  }}|› d|› �}|j                  }| j                  ||||«       Œ. y )Nr´   r8   )r¶   r~   r¤   )	r#   r4   r@   r`   r¨   r¹   rº   r»   r¼   s	            r   r½   z"EC2Serializer._serialize_type_listœ  sH   € Ü# E¨1Ó-ò 	P‰JˆAˆwØ &˜x q¨¨˜_ˆNØ!ŸL™LˆMØ�O‰O˜J¨°ÀÕOñ	Pr   NrÝ   )r”   r•   r–   Ú__doc__rb   r½   rq   r   r   rß   rß   …  s   „ ñò ôPr   rß   c                   óR   — e Zd ZdZd„ Zdd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zdd„Zdd„Zy)ÚJSONSerializerÚunixtimestampc                 ó  — dj                  |j                  d   |j                  «      }|j                  d   }| j                  «       }|j                  j                  d| j                  «      |d<   |d|› �dœ|d<   | j                  ||«       | j                  «       }|j                  }|�| j                  |||«       t        j                  |«      j                  | j                  «      |d<   | j                  ||«      }|�||d	<   |S )
Nz{}.{}ÚtargetPrefixÚjsonVersionr0   zapplication/x-amz-json-)zX-Amz-Targetr�   r1   r2   r¡   )rz   r£   r\   r5   r¢   r_   r3   r“   r˜   rs   r¤   ÚjsonÚdumpsrf   rg   rƒ   )	r#   r)   r*   ÚtargetÚjson_versionr4   r2   rs   r¡   s	            r   r&   z#JSONSerializer.serialize_to_request¦  s  € Ø—‘Ø×$Ñ$ ^Ñ4Ø× Ñ ó
ˆð '×/Ñ/°Ñ>ˆØ×1Ñ1Ó3ˆ
Ø.×3Ñ3×7Ñ7Ø�d×)Ñ)ó 
ˆ
�8Ñð #Ø5°l°^ÐDñ!
ˆ
�9Ñð 	×+Ñ+¨O¸ZÔHà�}‰}‹ˆØ%×1Ñ1ˆØÐ"Ø�O‰O˜D *¨kÔ:Ü!ŸZ™Z¨Ó-×4Ñ4°T×5JÑ5JÓKˆ
�6Ñà×.Ñ.¨z¸?ÓKˆØÐ"Ø(3ˆJ�}Ñ%àÐr   Nc                 ób   — t        | d|j                  › �| j                  «      } |||||«       y ©Nr§   r©   ©r#   r4   r@   r`   r­   r0   s         r   r¤   zJSONSerializer._serializeÂ  s7   € ÜØØ˜uŸ™Ð/Ð0Ø×#Ñ#ó
ˆñ
 	ˆz˜5 %¨Õ-r   c                 ó  — |j                   r|||<   y |�| j                  «       }|||<   |}|j                  }|j                  «       D ];  \  }}||   }	d|	j                  v r|	j                  d   }| j                  |||	|«       Œ= y r[   )Úis_document_typer˜   rt   ru   r^   r¤   )
r#   r4   r@   r`   r­   Únew_serializedrt   Ú
member_keyÚmember_valuer®   s
             r   r°   z(JSONSerializer._serialize_type_structureÊ  s”   € Ø×!Ò!Ø#ˆJ�sŠOàˆð "&§¡£�Ø"0�
˜3‘Ø+�
Ø—m‘mˆGØ,1¯K©K«Mò Ñ(�
˜LØ& zÑ2�Ø˜\×7Ñ7Ñ7Ø!-×!;Ñ!;¸FÑ!C�JØ—‘Ø ¨l¸Jõñ	r   c                 óš   — | j                  «       }|||<   |j                  «       D ]#  \  }}| j                  |||j                  |«       Œ% y rd   )r˜   ru   r¤   r@   )r#   r4   r@   r`   r­   Úmap_objÚsub_keyÚ	sub_values           r   rÈ   z"JSONSerializer._serialize_type_mapà  sH   € Ø—-‘-“/ˆØ!ˆ
�3‰Ø"'§+¡+£-ò 	FÑˆG�YØ�O‰O˜G Y°·±¸WÕEñ	Fr   c                 óˆ   — g }|||<   |D ]6  }i }| j                  |||j                  d«       |j                  |d   «       Œ8 y )NÚ__current__)r¤   r~   rx   )r#   r4   r@   r`   r­   Úlist_objÚ	list_itemÚwrappers           r   r½   z#JSONSerializer._serialize_type_listæ  sM   € ØˆØ"ˆ
�3‰Øò 	4ˆIØˆGð
 �O‰O˜G Y°·±¸mÔLØ�O‰O˜G MÑ2Õ3ñ	4r   c                 ó   — |||<   y rd   rq   ©r#   r4   r@   r`   r­   s        r   r«   z!JSONSerializer._default_serializeò  s   € Øˆ
�3Šr   c                 ó`   — | j                  ||j                  j                  d«      «      ||<   y rÎ   rÐ   r  s        r   rÑ   z(JSONSerializer._serialize_type_timestampõ  s-   € Ø×8Ñ8Ø�5×&Ñ&×*Ñ*Ð+<Ó=ó
ˆ
�3Šr   c                 ó,   — | j                  |«      ||<   y rd   rÊ   r  s        r   rÌ   z#JSONSerializer._serialize_type_blobú  s   € Ø×*Ñ*¨5Ó1ˆ
�3Šr   c                 óv   — t        |t        j                  «      rt        |«      }| j	                  |«      ||<   y rd   )rM   ÚdecimalÚDecimalr‹   rŽ   rË   s        r   rØ   z$JSONSerializer._serialize_type_floatý  s.   € Ü�eœWŸ_™_Ô-Ü˜%“LˆEØ!×/Ñ/°Ó6ˆ
�6Òr   c                 ó,   — | j                  ||||«       y rd   rÚ   rË   s        r   rÛ   z%JSONSerializer._serialize_type_double  rÜ   r   rd   rÝ   )r”   r•   r–   rS   r&   r¤   r°   rÈ   r½   r«   rÑ   rÌ   rØ   rÛ   rq   r   r   ræ   ræ   £  s<   „ Ø&Ðòó8.òò,Fò
4ò ò
ò
2ó7ô
Er   ræ   c                   óŽ   — e Zd ZdZdZdZdZdZdZdZ	dZ
d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d„ Zy	)ÚCBORSerializerr   r´   é   é   é   é   é   é   Nc                 ó‚   — t        | d|j                  › �«      }|€t        d|j                  › d�«      ‚ |||||«       y )Nr§   zUnrecognized C2J type: z, unable to serialize request)rU   rª   r!   rñ   s         r   Ú_serialize_data_itemz#CBORSerializer._serialize_data_item  sS   € Ü˜Ð!1°%·/±/Ð1BÐCÓDˆØˆ>ÜØ)¨%¯/©/Ð):ð ;$ð %óð ñ 	ˆz˜5 %¨Õ-r   c                 ó  — |dk\  r| j                   }n| j                  }d|z
  }| j                  |«      \  }}| j                  ||«      }|dk(  r|j	                  |«       y |j	                  ||j                  |d«      z   «       y )Nr   r³   Úbig)ÚUNSIGNED_INT_MAJOR_TYPEÚNEGATIVE_INT_MAJOR_TYPEÚ"_get_additional_info_and_num_bytesÚ_get_initial_byteÚextendÚto_bytes)	r#   r4   r@   r`   r­   Ú
major_typeÚadditional_infoÚ	num_bytesÚinitial_bytes	            r   Ú_serialize_type_integerz&CBORSerializer._serialize_type_integer  s‰   € Ø�AŠ:Ø×5Ñ5‰Jà×5Ñ5ˆJð ˜‘JˆEØ%)×%LÑ%LØó&
Ñ"ˆ˜ð ×-Ñ-¨j¸/ÓJˆØ˜Š>Ø×Ñ˜lÕ+à×Ñ˜l¨U¯^©^¸IÀuÓ-MÑMÕNr   c                 ó,   — | j                  ||||«       y rd   )r  r  s        r   Ú_serialize_type_longz#CBORSerializer._serialize_type_long+  s   € Ø×$Ñ$ Z°¸¸sÕCr   c                 ó¢  — t        |t        «      r|j                  d«      }n&t        |t        t        f«      s|j                  «       }t        |«      }| j                  |«      \  }}| j                  | j                  |«      }|dk(  r|j                  |«       n$|j                  ||j                  |d«      z   «       |j                  |«       y ©Nr   r   r  )rM   re   rf   ÚbytesÚ	bytearrayÚreadÚlenr  r  ÚBLOB_MAJOR_TYPEr  r  )	r#   r4   r@   r`   r­   Úlengthr  r  r  s	            r   rÌ   z#CBORSerializer._serialize_type_blob.  s·   € Ü�eœSÔ!Ø—L‘L Ó)‰EÜ˜E¤E¬9Ð#5Ô6ð —J‘J“LˆEÜ�U“ˆØ%)×%LÑ%LØó&
Ñ"ˆ˜ð ×-Ñ-Ø× Ñ  /ó
ˆð ˜Š>Ø×Ñ˜lÕ+à×Ñ˜l¨V¯_©_¸YÈÓ-NÑNÔOØ×Ñ˜%Õ r   c                 ó  — |j                  d«      }t        |«      }| j                  |«      \  }}| j                  | j                  |«      }	|dk(  r|j                  |	|z   «       y |j                  |	|j                  |d«      z   |z   «       y r"  )rf   r&  r  r  ÚSTRING_MAJOR_TYPEr  r  )
r#   r4   r@   r`   r­   Úencodedr(  r  r  r  s
             r   Ú_serialize_type_stringz%CBORSerializer._serialize_type_stringB  s�   € Ø—,‘,˜wÓ'ˆÜ�W“ˆØ%)×%LÑ%LØó&
Ñ"ˆ˜ð ×-Ñ-Ø×"Ñ" Oó
ˆð ˜Š>Ø×Ñ˜l¨WÑ4Õ5à×ÑØ˜vŸ™¨y¸%Ó@Ñ@À7ÑJõr   c                 ó8  — t        |«      }| j                  |«      \  }}| j                  | j                  |«      }|dk(  r|j	                  |«       n$|j	                  ||j                  |d«      z   «       |D ]  }	| j                  ||	|j                  «       Œ! y ©Nr   r  )r&  r  r  ÚLIST_MAJOR_TYPEr  r  r  r~   )
r#   r4   r@   r`   r­   r(  r  r  r  Úitems
             r   r½   z#CBORSerializer._serialize_type_listR  sœ   € Ü�U“ˆØ%)×%LÑ%LØó&
Ñ"ˆ˜ð ×-Ñ-Ø× Ñ  /ó
ˆð ˜Š>Ø×Ñ˜lÕ+à×Ñ˜l¨V¯_©_¸YÈÓ-NÑNÔOØò 	FˆDØ×%Ñ% j°$¸¿¹ÕEñ	Fr   c                 ó”  — t        |«      }| j                  |«      \  }}| j                  | j                  |«      }|dk(  r|j	                  |«       n$|j	                  ||j                  |d«      z   «       |j                  «       D ]?  \  }	}
| j                  ||	|j                  «       | j                  ||
|j                  «       ŒA y r.  )
r&  r  r  ÚMAP_MAJOR_TYPEr  r  ru   r  r­   r@   )r#   r4   r@   r`   r­   r(  r  r  r  Úkey_itemr0  s              r   rÈ   z"CBORSerializer._serialize_type_mapa  s¼   € Ü�U“ˆØ%)×%LÑ%LØó&
Ñ"ˆ˜ð ×-Ñ-Ø×Ñ ó
ˆð ˜Š>Ø×Ñ˜lÕ+à×Ñ˜l¨V¯_©_¸YÈÓ-NÑNÔOØ#Ÿk™k›mò 	E‰NˆH�dØ×%Ñ% j°(¸E¿I¹IÔFØ×%Ñ% j°$¸¿¹ÕDñ	Er   c                 óf  — |�| j                  |||j                  «       |j                  «       D ��ci c]  \  }}|€Œ	||“Œ }}}t        |«      }| j	                  |«      \  }}	| j                  | j                  |«      }
|	dk(  r|j                  |
«       n$|j                  |
|j                  |	d«      z   «       |j                  }|j                  «       D ]Q  \  }}||   }d|j                  v r|j                  d   }|€Œ+| j                  ||d d «       | j                  |||«       ŒS y c c}}w )Nr   r  r\   )r  rÂ   ru   r&  r  r  r2  r  r  rt   r^   r,  )r#   r4   r@   r`   r­   ÚkÚvÚ
map_lengthr  r  r  rt   rõ   rö   r®   s                  r   r°   z(CBORSerializer._serialize_type_structureq  s>  € Øˆ?à×%Ñ% j°#°u·±ÔGð #(§+¡+£-×A™$˜!˜Q°1±=��A‘ÐAˆÑAä˜“Zˆ
Ø%)×%LÑ%LØó&
Ñ"ˆ˜ð ×-Ñ-Ø×Ñ ó
ˆð ˜Š>Ø×Ñ˜lÕ+à×ÑØ˜z×2Ñ2°9¸eÓDÑDôð —-‘-ˆØ(-¯©«ò 	Ñ$ˆJ˜Ø" :Ñ.ˆLØ˜×3Ñ3Ñ3Ø)×7Ñ7¸Ñ?�
ØÑ'Ø×+Ñ+¨J¸
ÀDÈ$ÔOØ×)Ñ)Ø ¨lõñ	ùó# Bs
   ³
D-¾D-c                 ó’  — | j                  |«      }d}| j                  | j                  |«      }|j                  |«       | j	                  |«      \  }}	|	dk(  r.| j                  | j
                  |«      }|j                  |«       y | j                  | j
                  |«      }|j                  ||j                  |	d«      z   «       y )Nr´   r   r  )rY   r  ÚTAG_MAJOR_TYPEr  r  r  r  )
r#   r4   r@   r`   r­   Ú	timestampÚtagr  r  r  s
             r   rÑ   z(CBORSerializer._serialize_type_timestamp’  sÉ   € Ø×2Ñ2°5Ó9ˆ	ØˆØ×-Ñ-¨d×.AÑ.AÀ3ÓGˆØ×Ñ˜,Ô'Ø%)×%LÑ%LØó&
Ñ"ˆ˜ð ˜Š>Ø×1Ñ1Ø×,Ñ,¨ióˆLð ×Ñ˜lÕ+à×1Ñ1Ø×,Ñ,¨oóˆLð ×ÑØ˜y×1Ñ1°)¸UÓCÑCõr   c                 óð   — | j                  |«      r!|j                  | j                  |«      «       y | j                  | j                  d«      }|j                  |t        j                  d|«      z   «       y )Né   z>f©Ú_is_special_numberr  Ú_get_bytes_for_special_numbersr  ÚFLOAT_AND_SIMPLE_MAJOR_TYPEÚstructÚpack©r#   r4   r@   r`   r­   r  s         r   rØ   z$CBORSerializer._serialize_type_float¨  ói   € Ø×"Ñ" 5Ô)Ø×ÑØ×3Ñ3°EÓ:õð  ×1Ñ1Ø×0Ñ0°"óˆLð ×Ñ˜l¬V¯[©[¸¸uÓ-EÑEÕFr   c                 óð   — | j                  |«      r!|j                  | j                  |«      «       y | j                  | j                  d«      }|j                  |t        j                  d|«      z   «       y )Né   z>dr>  rD  s         r   rÛ   z%CBORSerializer._serialize_type_double³  rE  r   c                 óf   — |rdnd}|j                  | j                  | j                  |«      «       y )Né   é   )r  r  rA  )r#   r4   r@   r`   r­   r  s         r   rÕ   z&CBORSerializer._serialize_type_boolean¾  s2   € Ù %™"¨2ˆØ×ÑØ×"Ñ"Ø×0Ñ0°/óõ	
r   c                 ó:   — |dk  r|dfS |dk  ry|dk  ry|dk  ryy	)
Né   r   é   )rL  r´   i   )é   r
  l        )r=  r  )rG  é   rq   rO   s     r   r  z1CBORSerializer._get_additional_info_and_num_bytesÆ  s>   € ð �2Š:Ø˜!�8ˆOð �SŠ[Øð �UŠ]Øð �ZÒØð r   c                 ó6   — |dz  }||z  j                  dd«      S )Nr  r´   r  )r  )r#   r  r  Úmajor_type_bytess       r   r  z CBORSerializer._get_initial_byteÜ  s&   € ð &¨™?ÐØ  ?Ñ2×<Ñ<¸QÀÓFÐFr   c                 ót   — t        |t        d«      k(  |t        d«      k(  t        j                  |«      g«      S )NÚinfú-inf)Úanyr‹   rŒ   r�   rO   s     r   r?  z!CBORSerializer._is_special_numberâ  s8   € Üàœ˜u›Ñ%Øœ˜v›Ñ&Ü—
‘
˜5Ó!ðó
ð 	
r   c                 ó8  — d}| j                  | j                  |«      }|t        d«      k(  r|t        j                  dd«      z   S |t        d«      k(  r|t        j                  dd«      z   S t        j                  |«      r|t        j                  dd«      z   S y )NrN  rS  z>Hi |  rT  i ü  i ~  )r  rA  r‹   rB  rC  rŒ   r�   )r#   r@   r  r  s       r   r@  z-CBORSerializer._get_bytes_for_special_numbersë  s�   € ØˆØ×-Ñ-Ø×,Ñ,¨oó
ˆð ”E˜%“LÒ Ø¤&§+¡+¨d°FÓ";Ñ;Ð;Ø”e˜F“mÒ#Ø¤&§+¡+¨d°FÓ";Ñ;Ð;Ü�Z‰Z˜ÔØ¤&§+¡+¨d°FÓ";Ñ;Ð;ð r   rd   )r”   r•   r–   r  r  r'  r*  r/  r2  r9  rA  r  r  r   rÌ   r,  r½   rÈ   r°   rÑ   rØ   rÛ   rÕ   r  r  r?  r@  rq   r   r   r	  r	    s†   „ ØÐØÐØ€OØÐØ€OØ€NØ€NØ"#Ðó.òOò$Dò!ò(ò FòEò òBò,	Gò	Gò
òò,Gò
ó
<r   r	  c                   ót   — e Zd ZdZdZdZg 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)ÚBaseRestSerializera=  Base class for rest protocols.

    The only variance between the various rest protocols is the
    way that the body is serialized.  All other aspects (headers, uri, etc.)
    are the same and logic for serializing those aspects lives here.

    Subclasses must implement the ``_serialize_body_params`` method.

    r   Úrfc822)ÚuriÚquerystringÚheaderr1   c                 ó  — | j                  «       }|j                  j                  d| j                  «      |d<   |j                  }| j                  ||«      }|�||d<   |€|j                  d   |d<   |S |j                  }| j                  «       | j                  «       | j                  «       | j                  «       dœ}|j                  «       D ]  \  }}	|	€Œ	| j                  |||	|«       Œ | j                  |j                  d   |d   «      |d<   d|j                  v r%| j                  |j                  d   |d   «      |d<   |d	   |d
<   |d   r|d   |d<   | j                  |||||«       | j                  |||«       |S )Nr0   r¡   Ú
requestUrir.   )Úuri_path_kwargsÚquery_string_kwargsÚbody_kwargsr1   r_  ÚauthPathÚ	auth_pathr`  r/   r1   )r5   r¢   r_   r3   rs   rƒ   rt   r˜   ru   Ú_partition_parametersÚ_render_uri_templateÚ_serialize_payloadÚ_serialize_content_type)
r#   r)   r*   r4   r`   r¡   Úshape_membersÚpartitionedÚ
param_nameÚparam_values
             r   r&   z'BaseRestSerializer.serialize_to_request
  s¿  € Ø×1Ñ1Ó3ˆ
Ø.×3Ñ3×7Ñ7Ø�d×)Ñ)ó 
ˆ
�8Ñð  ×+Ñ+ˆà×.Ñ.¨z¸?ÓKˆØÐ"Ø(3ˆJ�}Ñ%àˆ=Ø%4×%9Ñ%9¸,Ñ%GˆJ�zÑ"ØÐØŸ™ˆð  $Ÿ}™}›Ø#'§=¡=£?ØŸ=™=›?Ø—}‘}“ñ	
ˆð (2×'7Ñ'7Ó'9ò 	Ñ#ˆJ˜ØÐ"àØ×&Ñ&Ø˜Z¨°mõð		ð "&×!:Ñ!:Ø× Ñ  Ñ.°Ð<MÑ0Nó"
ˆ
�:Ñð ˜×-Ñ-Ñ-Ø&*×&?Ñ&?Ø×$Ñ$ ZÑ0ØÐ-Ñ.ó'ˆJ�{Ñ#ð &1Ð1FÑ%Gˆ
�>Ñ"Ø�yÒ!Ø$/°	Ñ$:ˆJ�yÑ!Ø×ÑØ˜ Z°¸ô	
ð 	×$Ñ$ Z°¸ÔFàÐr   c                 óÒ   — i }t        j                  d|«      D ];  }|j                  d«      rt        ||d d    d¬«      ||<   Œ+t        ||   «      ||<   Œ=  |j                  di |¤ŽS )Nz{(.*?)}ú+r³   z/~)Úsaferq   )ÚreÚfindallÚendswithr   rz   )r#   Úuri_templateÚparamsÚencoded_paramsÚtemplate_params        r   re  z'BaseRestSerializer._render_uri_templateF  sƒ   € ð ˆÜ Ÿj™j¨°\ÓBò 	ˆNØ×&Ñ& sÔ+Ü1?Ø˜>¨#¨2Ð.Ñ/°dô2�˜~Ò.ô 2@Ø˜>Ñ*ó2�˜~Ò.ð	ð #ˆ|×"Ñ"Ñ4 ^Ñ4Ð4r   c                 óº  — |j                   j                  d«      }| j                  ||«      r)|j                  |d«      }| j                  |«      }||d<   y |�@|j                  |«      }|�| j	                  |||   «      |d<   y | j                  «       |d<   y |d   r| j	                  |d   |«      |d<   y | j                  |«      r| j                  «       |d<   y y )NÚpayloadr   r2   ra  )r^   r_   Ú_has_streaming_payloadÚ_encode_payloadÚ_serialize_body_paramsÚ_serialize_empty_bodyÚ_requires_empty_body)	r#   ri  r)   r4   r`   rh  Úpayload_memberÚbody_payloadr¥   s	            r   rf  z%BaseRestSerializer._serialize_payloadY  sõ   € ð ×,Ñ,×0Ñ0°Ó;ˆØ×&Ñ& ~°}ÔEð &Ÿ>™>¨.¸#Ó>ˆLØ×/Ñ/°Ó=ˆLØ!-ˆJ�vÒØÐ'ð %Ÿ.™.¨Ó8ˆKØÐ&Ø%)×%@Ñ%@Ø ¨~Ñ!>ó&�
˜6Ò"ð &*×%?Ñ%?Ó%A�
˜6Ò"Ø˜Ò'Ø!%×!<Ñ!<Ø˜MÑ*¨Eó"ˆJ�vÒð ×&Ñ& uÔ-Ø!%×!;Ñ!;Ó!=ˆJ�vÒð .r   c                  ó   — y)Nr   rq   ©r#   s    r   r{  z(BaseRestSerializer._serialize_empty_bodyy  s   € Ør   c                  ó   — y)z¡
        Some protocols require varied Content-Type headers
        depending on user input. This allows subclasses to apply
        this conditionally.
        Nrq   )r#   r4   r`   rh  s       r   rg  z*BaseRestSerializer._serialize_content_type|  s   € ð 	r   c                  ó   — y)z“
        Some protocols require a specific body to represent an empty
        payload. This allows subclasses to apply this conditionally.
        Frq   r†   s     r   r|  z'BaseRestSerializer._requires_empty_body„  s   € ð
 r   c                 ó0   — |duxr ||   j                   dv S )z5Determine if payload is streaming (a blob or string).N)ÚblobÚstring)rª   )r#   rw  rh  s      r   rx  z)BaseRestSerializer._has_streaming_payload‹  s,   € à˜dÐ"ò 
 }°WÑ'=×'GÑ'Gð L
ð (
ð 	
r   c                 ó\   — t        |t        «      r|j                  | j                  «      S |S rd   )rM   re   rf   rg   )r#   r2   s     r   ry  z"BaseRestSerializer._encode_payload’  s&   € Ü�dœCÔ Ø—;‘;˜t×4Ñ4Ó5Ð5Øˆr   c                 óˆ  — ||   }|j                   j                  d«      }|j                   j                  d|«      }|dk(  r| j                  ||«      }||d   |<   y |dk(  r�t        |t        «      r|d   j                  |«       y |j                  dk(  r2|D �	cg c]  }	| j                  |	|j                  «      ‘Œ  }
}	|
|d   |<   y | j                  ||«      }
|
|d   |<   y |dk(  r0||   }|s|j                  dk(  ry | j                  ||«      |d	   |<   y |d	k(  r|}| j                  ||d	   |«       y ||d
   |<   y c c}	w )NÚlocationr\   rZ  r_  r[  r`  Úlistr\  r1   ra  )
r^   r_   Ú_get_uri_and_query_string_valuerM   r—   Úupdaterª   r~   Ú_convert_header_valueÚ_do_serialize_header_map)r#   ri  rj  rk  rh  r~   rˆ  Úkey_nameÚuri_path_valuer@   Ú	new_paramr`   Úheader_prefixs                r   rd  z(BaseRestSerializer._partition_parameters—  s“  € ð ˜zÑ*ˆØ×'Ñ'×+Ñ+¨JÓ7ˆØ×'Ñ'×+Ñ+¨F°JÓ?ˆØ�uÒØ!×AÑAØ˜VóˆNð 8FˆKÐ)Ñ*¨8Ò4Ø˜Ò&Ü˜+¤tÔ,ØÐ1Ñ2×9Ñ9¸+ÕFØ×!Ñ! VÒ+ð "-öàð ×8Ñ8¸ÀÇÁÕNð�	ð ð @I�Ð1Ñ2°8Ò<à ×@Ñ@Ø ó�	ð @I�Ð1Ñ2°8Ò<Ø˜Ò!Ø! *Ñ-ˆEÙ 5§?¡?°fÒ#<àØ/3×/IÑ/IØ�{ó0ˆK˜	Ñ" 8Ò,ð ˜Ò"ð %ˆMð
 ×)Ñ)Ø˜{¨9Ñ5°{õð 6AˆK˜Ñ& zÒ2ùò=s   Â#D?c                 ó4  — |j                   dk(  rt        |«      j                  «       S |j                   dk(  r8|j                  j	                  d| j
                  «      }| j                  ||«      S |j                   dv rt        | j                  |«      «      S |S )NÚbooleanr:  rÏ   ©r‹   Údouble)rª   re   rT   r^   r_   ÚQUERY_STRING_TIMESTAMP_FORMATrY   rŽ   )r#   rk  r~   rB   s       r   rŠ  z2BaseRestSerializer._get_uri_and_query_string_valueÊ  sœ   € Ø×Ñ˜yÒ(Ü�{Ó#×)Ñ)Ó+Ð+Ø×Ñ Ò,Ø%×3Ñ3×7Ñ7Ø! 4×#EÑ#Eó Ðð ×1Ñ1ØÐ-óð ð ×ÑÐ!4Ñ4Ü�t×)Ñ)¨+Ó6Ó7Ð7ØÐr   c                 óH   — |j                  «       D ]  \  }}||z   }|||<   Œ y rd   )ru   )r#   r‘  r1   Ú
user_inputr­   ÚvalÚfull_keys          r   r�  z+BaseRestSerializer._do_serialize_header_mapØ  s2   € Ø"×(Ñ(Ó*ò 	$‰HˆC�Ø$ sÑ*ˆHØ #ˆG�HÒñ	$r   c                 ó   — t        d«      ‚©Nrz  r'   )r#   rs  r`   s      r   rz  z)BaseRestSerializer._serialize_body_paramsÝ  ó   € Ü!Ð":Ó;Ð;r   c                 ó4  — |j                   dk(  rot        |«      }t        j                  |j	                  «       «      }|j
                  j                  d| j                  «      }t        | j                  ||«      «      S |j                   dk(  rv|j                  j                   dk(  r!|D �cg c]  }|�| j                  |«      ‘Œ }}n+|D �cg c]   }|�| j                  |j                  |«      ‘Œ" }}dj                  |«      S t        |«      r&| j                  t!        j"                  |d¬«      «      S |j                   dk(  rt        |«      j%                  «       S |j                   d	v rt        | j'                  |«      «      S t        |«      S c c}w c c}w )
Nr:  rÏ   r‰  r…  ú,)rŸ  ú:)Ú
separatorsr“  r”  )rª   r
   rE   rF   Úutctimetupler^   r_   ÚHEADER_TIMESTAMP_FORMATre   rY   r~   Ú_escape_header_list_stringrŒ  ry   r	   rl   rë   rì   rT   rŽ   )r#   r`   r@   rV   r:  rB   r6  Úconverted_values           r   rŒ  z(BaseRestSerializer._convert_header_valueà  s‚  € Ø�?‰?˜kÒ)Ü2°5Ó9ˆLÜ Ÿ™¨×(AÑ(AÓ(CÓDˆIØ$×2Ñ2×6Ñ6Ø! 4×#?Ñ#?ó Ðô Ø×.Ñ.¨yÐ:JÓKóð ð �_‰_ Ò&Ø�|‰|×%Ñ%¨Ò1ð #ö#àØ�}ð ×3Ñ3°AÕ6ð#�ñ #ð #ö#àØ�}ð ×.Ñ.¨u¯|©|¸QÕ?ð#�ð #ð
 —8‘8˜OÓ,Ð,Ü! %Ô(ð ×#Ñ#¤D§J¡J¨uÀÔ$LÓMÐMØ�_‰_ 	Ò)Ü�u“:×#Ñ#Ó%Ð%Ø�_‰_Ð 3Ñ3Ü�t×)Ñ)¨%Ó0Ó1Ð1ä�u“:Ðùò+#ùò#s   Â+FÃ%Fc                 óF   — d|v sd|v rd|j                  dd«      z   dz   S |S )Nú"rŸ  z\")ÚreplacerO   s     r   r¤  z-BaseRestSerializer._escape_header_list_string  s1   € ð �%‰<˜3 %™<Ø˜Ÿ™ s¨EÓ2Ñ2°SÑ8Ð8àˆLr   N)r”   r•   r–   rä   r–  r£  ÚKNOWN_LOCATIONSr&   re  rf  r{  rg  r|  rx  ry  rd  rŠ  r�  rz  rŒ  r¤  rq   r   r   rX  rX  ø  sh   „ ñð %.Ð!Ø&Ðò B€Oò:òx5ò&>ò@òòò
òò
1Aòfò$ò
<ò!óFr   rX  c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚBaseRpcV2Serializera`  Base class for RPCv2 protocols.

    The only variance between the various RPCv2 protocols is the
    way that the body is serialized.  All other aspects (headers, uri, etc.)
    are the same and logic for serializing those aspects lives here.

    Subclasses must implement the ``_serialize_body_params``  and
    ``_serialize_headers`` methods.

    c                 ó  — | j                  «       }|j                  j                  d   }|j                  }d|› d|› �|d<   |j                  }|�| j                  |||«       | j                  ||«      }|�||d<   | j                  ||«       |S )Nré   z	/service/z/operation/r.   r¡   )r5   r‘   r£   r\   rs   rf  rƒ   Ú_serialize_headers)r#   r)   r*   r4   Úservice_nameÚoperation_namers   r¡   s           r   r&   z(BaseRpcV2Serializer.serialize_to_request  s©   € Ø×1Ñ1Ó3ˆ
Ø&×4Ñ4×=Ñ=¸nÑMˆØ(×-Ñ-ˆà˜�~ [°Ð0@ÐAð 	�:Ñð &×1Ñ1ˆØÐ"Ø×#Ñ# J°
¸KÔHà×.Ñ.¨z¸?ÓKˆØÐ"Ø(3ˆJ�}Ñ%à×Ñ 
¨OÔ<àÐr   c                 ó2   — | j                  ||«      }||d<   y )Nr2   )rz  )r#   r)   r4   r`   r~  s        r   rf  z&BaseRpcV2Serializer._serialize_payload,  s   € Ø×2Ñ2°:¸uÓEˆØ)ˆ
�6Òr   c                 ó   — t        d«      ‚)Nr­  r'   )r#   r4   r*   s      r   r­  z&BaseRpcV2Serializer._serialize_headers0  s   € Ü!Ð"6Ó7Ð7r   c                 ó   — t        d«      ‚rœ  r'   )r#   r)   r`   s      r   rz  z*BaseRpcV2Serializer._serialize_body_params3  r�  r   N)r”   r•   r–   rä   r&   rf  r­  rz  rq   r   r   r«  r«    s   „ ñ	òò(*ò8ó<r   r«  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚRestJSONSerializerc                  ó   — y)Ns   {}rq   r€  s    r   r{  z(RestJSONSerializer._serialize_empty_body8  s   € Ør   c                 óh   — |j                   j                  «       D ]  \  }}d|j                  vsŒ y y)zq
        Serialize an empty JSON object whenever the shape has
        members not targeting a location.
        rˆ  TF)rt   ru   r^   )r#   r`   r~   r™  s       r   r|  z'RestJSONSerializer._requires_empty_body;  s:   € ð
 !Ÿ=™=×.Ñ.Ó0ò 	‰KˆF�CØ ×!2Ñ!2Ò2Ùð	ð r   c                 óª   — |j                   j                  d«      }| j                  ||«      ry|d   dk7  }t        d|d   «      }|r|s	d|d   d<   yyy)z?Set Content-Type to application/json for all structured bodies.rw  Nr2   r   r�   r1   zapplication/json)r^   r_   rx  r   )r#   r4   r`   rh  rw  Úhas_bodyÚhas_content_types          r   rg  z*RestJSONSerializer._serialize_content_typeE  sh   € à×%Ñ%×)Ñ)¨)Ó4ˆØ×&Ñ& w°Ô>àà˜fÑ%¨Ñ,ˆÜ% n°jÀÑ6KÓLÐÙÑ,Ø4FˆJ�yÑ! .Ò1ð -ˆ8r   c                 ó¤   — | j                  «       }| j                  |||«       t        j                  |«      j	                  | j
                  «      S rd   )r˜   r¤   rë   rì   rf   rg   )r#   rs  r`   Úserialized_bodys       r   rz  z)RestJSONSerializer._serialize_body_paramsQ  s=   € ØŸ-™-›/ˆØ�‰˜¨°Ô7Ü�z‰z˜/Ó*×1Ñ1°$×2GÑ2GÓHÐHr   N)r”   r•   r–   r{  r|  rg  rz  rq   r   r   r´  r´  7  s   „ òòò
GóIr   r´  c                   óX   — 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)ÚRestXMLSerializerr   c                 óÐ   — |j                   d   }t        j                  d«      }| j                  ||||«       t	        |«      d   }t        j
                  || j                  ¬«      S )Nr\   r-   r   )Úencoding)r^   r   ÚElementr¤   r‰  Útostringrg   )r#   rs  r`   Ú	root_nameÚpseudo_rootÚ	real_roots         r   rz  z(RestXMLSerializer._serialize_body_paramsZ  s\   € Ø×'Ñ'¨Ñ/ˆ	Ü!×)Ñ)¨"Ó-ˆØ�‰˜˜v {°IÔ>Ü˜Ó% aÑ(ˆ	Ü×#Ñ# I¸×8MÑ8MÔNÐNr   c                 ób   — t        | d|j                  › �| j                  «      } |||||«       y rð   r©   )r#   r`   rs  Úxmlnoder\   r0   s         r   r¤   zRestXMLSerializer._serializea  s7   € ÜØØ˜uŸ™Ð/Ð0Ø×#Ñ#ó
ˆñ
 	ˆw˜  tÕ,r   c                 ó~  — t        j                  ||«      }| j                  ||«       |j                  «       D ]‚  \  }}|j                  |   }|j
                  j                  d|«      }	|€ y |j
                  j                  d«      r|j
                  d   }
||j                  |
<   Œo| j                  ||||	«       Œ„ y )Nr\   ÚxmlAttribute)	r   Ú
SubElementÚ_add_xml_namespaceru   rt   r^   r_   Úattribr¤   )r#   rÆ  rs  r`   r\   Ústructure_noder­   r@   r®   Úmember_nameÚxml_attribute_names              r   r°   z+RestXMLSerializer._serialize_type_structurei  sº   € Ü$×/Ñ/°¸Ó>ˆà×Ñ  ~Ô6Ø Ÿ,™,›.ò 	N‰JˆC�Ø Ÿ=™=¨Ñ-ˆLØ&×4Ñ4×8Ñ8¸ÀÓEˆKð
 ˆ}áØ×)Ñ)×-Ñ-¨nÔ=à%1×%?Ñ%?ÀÑ%GÐ"Ø<A�×%Ñ%Ð&8Ñ9ØØ�O‰O˜L¨%°ÀÕMñ	Nr   c                 ó  — |j                   }|j                  j                  d«      r|}|}n2|j                  j                  dd«      }t        j                  ||«      }| j                  ||«       |D ]  }| j                  ||||«       Œ y )Nr…   r\   r~   )r~   r^   r_   r   rÉ  rÊ  r¤   )	r#   rÆ  rs  r`   r\   r®   Úelement_nameÚ	list_noder0  s	            r   r½   z&RestXMLSerializer._serialize_type_list~  s†   € Ø—|‘|ˆØ×Ñ×"Ñ" ;Ô/ØˆLØ‰Ià'×5Ñ5×9Ñ9¸&À(ÓKˆLÜ#×.Ñ.¨w¸Ó=ˆIØ×Ñ  yÔ1Øò 	IˆDØ�O‰O˜L¨$°	¸<ÕHñ	Ir   c                 ó  — | j                  |«      s(t        j                  ||«      }| j                  ||«       |j	                  «       D ]¸  \  }}| j                  |«      rt        j                  ||«      nt        j                  d«      }| j                  |j                  d¬«      }	| j                  |j                  d¬«      }
| j                  |j                  |||	«       | j                  |j                  |||
«       Œº y )NÚentryr­   r²   r@   )	r‡   r   rÉ  rÊ  ru   rb   r­   r@   r¤   )r#   rÆ  rs  r`   r\   Únoder­   r@   Úsub_noderŽ  Úval_names              r   rÈ   z%RestXMLSerializer._serialize_type_mapŠ  sí   € ð ×'Ñ'¨Ô.Ü×)Ñ)¨'°4Ó8ˆDØ×#Ñ# E¨4Ô0à Ÿ,™,›.ò 	D‰JˆC�ð ×+Ñ+¨EÔ2ô ×&Ñ& w°Ô5ä ×+Ñ+¨D°'Ó:ð ð
 ×0Ñ0°·±ÈÐ0ÓOˆHØ×0Ñ0Ø—‘¨'ð 1ó ˆHð �O‰O˜EŸI™I s¨H°hÔ?Ø�O‰O˜EŸK™K¨°¸(ÕCñ	Dr   c                 óp   — t        j                  ||«      }|rd}nd}||_        | j                  ||«       y rÓ   )r   rÉ  ÚtextrÊ  )r#   rÆ  rs  r`   r\   rÔ  Ú	str_values          r   rÕ   z)RestXMLSerializer._serialize_type_boolean¤  s:   € ô ×%Ñ% g¨tÓ4ˆÙØ‰IàˆIØˆŒ	Ø×Ñ  tÕ,r   c                 ó€   — t        j                  ||«      }| j                  |«      |_        | j	                  ||«       y rd   )r   rÉ  rl   rØ  rÊ  ©r#   rÆ  rs  r`   r\   rÔ  s         r   rÌ   z&RestXMLSerializer._serialize_type_blob°  s6   € Ü×%Ñ% g¨tÓ4ˆØ×$Ñ$ VÓ,ˆŒ	Ø×Ñ  tÕ,r   c                 óÆ   — t        j                  ||«      }t        | j                  ||j                  j                  d«      «      «      |_        | j                  ||«       y rÎ   )r   rÉ  re   rY   r^   r_   rØ  rÊ  rÛ  s         r   rÑ   z+RestXMLSerializer._serialize_type_timestampµ  sW   € Ü×%Ñ% g¨tÓ4ˆÜØ×*Ñ*Ø˜×+Ñ+×/Ñ/Ð0AÓBóó
ˆŒ	ð
 	×Ñ  tÕ,r   c                 ó’   — t        j                  ||«      }t        | j                  |«      «      |_        | j                  ||«       y rd   )r   rÉ  re   rŽ   rØ  rÊ  rÛ  s         r   rØ   z'RestXMLSerializer._serialize_type_float¾  s;   € Ü×%Ñ% g¨tÓ4ˆÜ˜×*Ñ*¨6Ó2Ó3ˆŒ	Ø×Ñ  tÕ,r   c                 ó,   — | j                  ||||«       y rd   rÚ   )r#   rÆ  rs  r`   r\   s        r   rÛ   z(RestXMLSerializer._serialize_type_doubleÃ  s   € Ø×"Ñ" 7¨F°E¸4Õ@r   c                 ót   — t        j                  ||«      }t        |«      |_        | j	                  ||«       y rd   )r   rÉ  re   rØ  rÊ  rÛ  s         r   r«   z$RestXMLSerializer._default_serializeÆ  s/   € Ü×%Ñ% g¨tÓ4ˆÜ˜“KˆŒ	Ø×Ñ  tÕ,r   c                 ó  — d|j                   v rq|j                   d   }d}t        |t        «      r/|j                  d«      r|d|d   › �z  }|d   |j                  |<   y t        |t
        «      r||j                  |<   y y y )NÚxmlNamespaceÚxmlnsr¨   r   rZ  )r^   rM   r—   r_   rË  re   )r#   r`   rÌ  Únamespace_metadataÚattribute_names        r   rÊ  z$RestXMLSerializer._add_xml_namespaceË  s–   € Ø˜U×0Ñ0Ñ0Ø!&×!4Ñ!4°^Ñ!DÐØ$ˆNÜÐ,¬dÔ3Ø%×)Ñ)¨(Ô3Ø"¨Ð*<¸XÑ*FÐ)GÐ&HÑH�NØ8JØñ9�×%Ñ% nÒ5ô Ð.´Ô4Ø8J�×%Ñ% nÒ5ð 5ð 1r   N)r”   r•   r–   rS   rz  r¤   r°   r½   rÈ   rÕ   rÌ   rÑ   rØ   rÛ   r«   rÊ  rq   r   r   r½  r½  W  sJ   „ Ø ÐòOò-òNò*
IòDò4
-ò-ò
-ò-ò
Aò-ó
Kr   r½  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚRpcV2CBORSerializerrç   c                 ó:   •— t        d«       t        ‰| �	  ||«      S )NÚPROTOCOL_RPC_V2_CBOR)r   Úsuperr&   )r#   r)   r*   Ú	__class__s      €r   r&   z(RpcV2CBORSerializer.serialize_to_requestÜ  s   ø€ ÜÐ2Ô3Ü‰wÑ+¨J¸ÓHÐHr   c                 óR   — t        «       }| j                  |||«       t        |«      S rd   )r$  r  r#  )r#   r)   rs   r2   s       r   rz  z*RpcV2CBORSerializer._serialize_body_paramsà  s%   € Ü‹{ˆØ×!Ñ! $¨
°KÔ@Ü�T‹{Ðr   c                 ó´   — d|d   d<   |j                   rd}nd}| j                  ||«       |d   dk7  }t        d|d   «      }||d   d	<   |s|r	||d   d<   y y y )
Nzrpc-v2-cborr1   zsmithy-protocolz"application/vnd.amazon.eventstreamzapplication/cborr2   r   r�   ÚAccept)Úhas_event_stream_outputr“   r   )r#   r4   r*   Ú
header_valr¸  r¹  s         r   r­  z&RpcV2CBORSerializer._serialize_headerså  s�   € Ø3@ˆ
�9ÑÐ/Ñ0à×2Ò2Ø=‰Jà+ˆJØ×+Ñ+¨O¸ZÔHà˜fÑ%¨Ñ,ˆÜ% n°jÀÑ6KÓLÐà*4ˆ
�9Ñ˜hÑ'Ù¡HØ4>ˆJ�yÑ! .Ò1ð %-Ðr   )r”   r•   r–   rS   r&   rz  r­  Ú__classcell__)rê  s   @r   ræ  ræ  Ù  s   ø„ Ø&ÐôIòö
?r   ræ  )Úec2Úqueryrë   z	rest-jsonzrest-xmlzsmithy-rpc-v2-cbor),rä   rh   rE   rN   r  rë   rŒ   ro  rB  Ú	xml.etreer   Úbotocorer   Úbotocore.compatr   Úbotocore.exceptionsr   Úbotocore.useragentr   Úbotocore.utilsr   r	   r
   r   ÚDEFAULT_TIMESTAMP_FORMATr?   r>   Úcompilerv   r™   r;   r    r   r   r›   rß   ræ   r	  rX  r«  r´  r½  ræ  r   rq   r   r   ú<module>rû     s?  ðñó8 Û Û Û Û Û Û 	Û Ý !å Ý &Ý 4Ý 2÷ó ð %Ð Ø
€à'€Ø�—‘Ð1Ó2€à'Ð Ø"/Ð àØ#ðÐ ð Ø3ó÷4l@ñ l@ô^lE�jô lEô^P�Oô Pô<`E�Zô `EôFo<�Zô o<ôdQ˜ô Qôh(<˜*ô (<ôVIÐ+¨^ô Iô@KÐ*ô KôD?Ð-¨~ô ?ð< ØØØ#Ø!Ø-ñ�r   