a
    ~gr                  	   @  s  U d Z ddlmZ ddlZddl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 ddlmZmZ ddlmZ dd	lmZmZmZmZ d
dlmZmZmZ d
dlm Z  d
dl!m"Z" ej#dk rddlm$Z$ nddl
m$Z$ ej%Z&ej'f ddiej(G dd dZ)ej'f ddiej(G dd dZ*ej'f ddiej(G dd dZ+ej'f ddiej(G dd dZ,er:G dd de$Z-G dd de$Z.G dd de$Z/G d d! d!e$Z0ee.ej1e-ej2f Z3ee0ej4e/ej5f Z6ee7eeef e8eef ee f Z9d"e:d#< ed$ee3e9f d%Z;ed&ee6e9f d%Z<ed' Z=d"e:d(< ed)d)d*d+d+d,d-d.d/d0d1d2Z>ed)d)d*d+d+d3d-d.d4d0d5d2Z>ed)d)d6d+d+d7d-d4d8d9d2Z>d:ded;d+d+d(d-d.d<d0d=d2Z>ed>Z?ed?dd@Z@G dAdB dBejAe$e@ ZBG dCdD dDe$e? ZCG dEdF dFe$e? ZDG dGdH dHe$ZEG dIdJ dJe$ZFG dKdL dLe$ZGG dMdN dNe$ZHee?ge?f ZIee?ejJge?f ZKeeDe? eCe? f ZLeeGeHeEeFf ZMeeKe? eIe? f ZNed,dOdPdQdRZOedSdTdPdUdRZOed7dVdPdWdRZOdXd.dPdYdRZOedZZPer*eePd)f ZQn ej'f i ej(G d[d\ d\ZQer^eePd)f ZRn ej'f i ej(G d]d^ d^ZRdS )_zBThis module contains related classes and functions for validation.    )annotationsN)partialmethod)FunctionType)TYPE_CHECKINGAnyCallableTypeVarUnioncastoverload)PydanticUndefinedcore_schema)r   )	AnnotatedLiteralSelf	TypeAlias   )_decorators	_generics_internal_dataclass)GetCoreSchemaHandler)PydanticUserError)      )ProtocolfrozenTc                   @  s@   e Zd ZU dZded< dddddd	Zed
ddddZdS )AfterValidatora9  Usage docs: https://docs.pydantic.dev/2.10/concepts/validators/#field-validators

    A metadata class that indicates that a validation should be applied **after** the inner validation logic.

    Attributes:
        func: The validator function.

    Example:
        ```python
        from typing_extensions import Annotated

        from pydantic import AfterValidator, BaseModel, ValidationError

        MyInt = Annotated[int, AfterValidator(lambda v: v + 1)]

        class Model(BaseModel):
            a: MyInt

        print(Model(a=1).a)
        #> 2

        try:
            Model(a='a')
        except ValidationError as e:
            print(e.json(indent=2))
            '''
            [
              {
                "type": "int_parsing",
                "loc": [
                  "a"
                ],
                "msg": "Input should be a valid integer, unable to parse string as an integer",
                "input": "a",
                "url": "https://errors.pydantic.dev/2/v/int_parsing"
              }
            ]
            '''
        ```
    Kcore_schema.NoInfoValidatorFunction | core_schema.WithInfoValidatorFunctionfuncr   r   core_schema.CoreSchemasource_typehandlerreturnc                 C  sX   ||}t | jd}|r8ttj| j}tj|||jdS ttj| j}tj||dS d S )Nafter)schema
field_name)r%   )	_inspect_validatorr   r
   r   WithInfoValidatorFunction"with_info_after_validator_functionr&   NoInfoValidatorFunction no_info_after_validator_function)selfr!   r"   r%   info_argr    r.   c/var/www/html/emsaiapi.evdpl.com/venv/lib/python3.9/site-packages/pydantic/functional_validators.py__get_pydantic_core_schema__H   s    z+AfterValidator.__get_pydantic_core_schema__>_decorators.Decorator[_decorators.FieldValidatorDecoratorInfo]r   	decoratorr#   c                 C  s   | |j dS )Nr   r4   clsr3   r.   r.   r/   _from_decoratorR   s    zAfterValidator._from_decoratorN)__name__
__module____qualname____doc____annotations__r0   classmethodr7   r.   r.   r.   r/   r      s
   
)
r   c                   @  sL   e Zd ZU dZded< eZded< ddddd	d
ZedddddZ	dS )BeforeValidatorae  Usage docs: https://docs.pydantic.dev/2.10/concepts/validators/#field-validators

    A metadata class that indicates that a validation should be applied **before** the inner validation logic.

    Attributes:
        func: The validator function.
        json_schema_input_type: The input type of the function. This is only used to generate the appropriate
            JSON Schema (in validation mode).

    Example:
        ```python
        from typing_extensions import Annotated

        from pydantic import BaseModel, BeforeValidator

        MyInt = Annotated[int, BeforeValidator(lambda v: v + 1)]

        class Model(BaseModel):
            a: MyInt

        print(Model(a=1).a)
        #> 2

        try:
            Model(a='a')
        except TypeError as e:
            print(e)
            #> can only concatenate str (not "int") to str
        ```
    r   r   r   json_schema_input_typer   r   r    c                 C  sv   ||}| j tu rd n
|| j }t| jd}|rTttj| j}tj|||j	|dS ttj
| j}tj|||dS d S )Nbeforer%   r&   json_schema_input_schemar%   rB   )r?   r   generate_schemar'   r   r
   r   r(   #with_info_before_validator_functionr&   r*   !no_info_before_validator_functionr,   r!   r"   r%   input_schemar-   r   r.   r.   r/   r0   {   s$    
z,BeforeValidator.__get_pydantic_core_schema__r1   r   r2   c                 C  s   | |j |jjdS N)r   r?   r   infor?   r5   r.   r.   r/   r7      s    zBeforeValidator._from_decoratorN
r8   r9   r:   r;   r<   r   r?   r0   r=   r7   r.   r.   r.   r/   r>   W   s   
r>   c                   @  sL   e Zd ZU dZded< eZded< ddddd	d
ZedddddZ	dS )PlainValidatora  Usage docs: https://docs.pydantic.dev/2.10/concepts/validators/#field-validators

    A metadata class that indicates that a validation should be applied **instead** of the inner validation logic.

    !!! note
        Before v2.9, `PlainValidator` wasn't always compatible with JSON Schema generation for `mode='validation'`.
        You can now use the `json_schema_input_type` argument to specify the input type of the function
        to be used in the JSON schema when `mode='validation'` (the default). See the example below for more details.

    Attributes:
        func: The validator function.
        json_schema_input_type: The input type of the function. This is only used to generate the appropriate
            JSON Schema (in validation mode). If not provided, will default to `Any`.

    Example:
        ```python
        from typing import Union

        from typing_extensions import Annotated

        from pydantic import BaseModel, PlainValidator

        MyInt = Annotated[
            int,
            PlainValidator(
                lambda v: int(v) + 1, json_schema_input_type=Union[str, int]  # (1)!
            ),
        ]

        class Model(BaseModel):
            a: MyInt

        print(Model(a='1').a)
        #> 2

        print(Model(a=1).a)
        #> 2
        ```

        1. In this example, we've specified the `json_schema_input_type` as `Union[str, int]` which indicates to the JSON schema
        generator that in validation mode, the input type for the `a` field can be either a `str` or an `int`.
    r   r   r   r?   r   r   r    c           	   	   C  s   ddl m} z.||}|dtjdd |||d}W n |yP   d }Y n0 || j}t| jd}|rt	tj
| j}tj||j||dS t	tj| j}tj|||d	S d S )
Nr   PydanticSchemaGenerationErrorserializationc                 S  s   || S Nr.   vhr.   r.   r/   <lambda>       z=PlainValidator.__get_pydantic_core_schema__.<locals>.<lambda>)functionr%   return_schemaplain)r&   rP   rB   )rP   rB   )pydanticrO   getr   #wrap_serializer_function_ser_schemarD   r?   r'   r   r
   r(   "with_info_plain_validator_functionr&   r*    no_info_plain_validator_function)	r,   r!   r"   rO   r%   rP   rH   r-   r   r.   r.   r/   r0      s:    
z+PlainValidator.__get_pydantic_core_schema__r1   r   r2   c                 C  s   | |j |jjdS rI   rJ   r5   r.   r.   r/   r7      s    zPlainValidator._from_decoratorN)
r8   r9   r:   r;   r<   r   r?   r0   r=   r7   r.   r.   r.   r/   rM      s   
+*rM   c                   @  sL   e Zd ZU dZded< eZded< ddddd	d
ZedddddZ	dS )WrapValidatora  Usage docs: https://docs.pydantic.dev/2.10/concepts/validators/#field-validators

    A metadata class that indicates that a validation should be applied **around** the inner validation logic.

    Attributes:
        func: The validator function.
        json_schema_input_type: The input type of the function. This is only used to generate the appropriate
            JSON Schema (in validation mode).

    ```python
    from datetime import datetime

    from typing_extensions import Annotated

    from pydantic import BaseModel, ValidationError, WrapValidator

    def validate_timestamp(v, handler):
        if v == 'now':
            # we don't want to bother with further validation, just return the new value
            return datetime.now()
        try:
            return handler(v)
        except ValidationError:
            # validation failed, in this case we want to return a default value
            return datetime(2000, 1, 1)

    MyTimestamp = Annotated[datetime, WrapValidator(validate_timestamp)]

    class Model(BaseModel):
        a: MyTimestamp

    print(Model(a='now').a)
    #> 2032-01-02 03:04:05.000006
    print(Model(a='invalid').a)
    #> 2000-01-01 00:00:00
    ```
    zScore_schema.NoInfoWrapValidatorFunction | core_schema.WithInfoWrapValidatorFunctionr   r   r?   r   r   r    c                 C  sv   ||}| j tu rd n
|| j }t| jd}|rTttj| j}tj|||j	|dS ttj
| j}tj|||dS d S )NwraprA   rC   )r?   r   rD   r'   r   r
   r   WithInfoWrapValidatorFunction!with_info_wrap_validator_functionr&   NoInfoWrapValidatorFunctionno_info_wrap_validator_functionrG   r.   r.   r/   r0   '  s(    
z*WrapValidator.__get_pydantic_core_schema__r1   r   r2   c                 C  s   | |j |jjdS rI   rJ   r5   r.   r.   r/   r7   @  s    zWrapValidator._from_decoratorNrL   r.   r.   r.   r/   r_      s   
&r_   c                   @  s   e Zd ZddddddZdS )_OnlyValueValidatorClsMethodr   r6   valuer#   c                C  s   d S rQ   r.   r,   r6   rg   r.   r.   r/   __call__K  rV   z%_OnlyValueValidatorClsMethod.__call__Nr8   r9   r:   ri   r.   r.   r.   r/   re   J  s   re   c                   @  s    e Zd ZdddddddZdS )_V2ValidatorClsMethodr   _core_schema.ValidationInfor6   rg   rK   r#   c                C  s   d S rQ   r.   r,   r6   rg   rK   r.   r.   r/   ri   N  rV   z_V2ValidatorClsMethod.__call__Nrj   r.   r.   r.   r/   rk   M  s   rk   c                   @  s    e Zd ZdddddddZdS ) _OnlyValueWrapValidatorClsMethodr   )_core_schema.ValidatorFunctionWrapHandlerr6   rg   r"   r#   c                C  s   d S rQ   r.   r,   r6   rg   r"   r.   r.   r/   ri   Q  rV   z)_OnlyValueWrapValidatorClsMethod.__call__Nrj   r.   r.   r.   r/   ro   P  s   ro   c                   @  s"   e Zd ZddddddddZdS )_V2WrapValidatorClsMethodr   rp   rl   r6   rg   r"   rK   r#   c                C  s   d S rQ   r.   r,   r6   rg   r"   rK   r.   r.   r/   ri   T  s    z"_V2WrapValidatorClsMethod.__call__Nrj   r.   r.   r.   r/   rs   S  s   rs   r   _PartialClsOrStaticMethod"_V2BeforeAfterOrPlainValidatorType)bound_V2WrapValidatorType)r@   r$   r`   rY   FieldValidatorModes.)check_fieldsr?   strzLiteral['wrap']zbool | Noner   z6Callable[[_V2WrapValidatorType], _V2WrapValidatorType])fieldfieldsmoder{   r?   r#   c               G  s   d S rQ   r.   r}   r   r{   r?   r~   r.   r.   r/   field_validatorv  s    r   zLiteral['before', 'plain']zRCallable[[_V2BeforeAfterOrPlainValidatorType], _V2BeforeAfterOrPlainValidatorType]c               G  s   d S rQ   r.   r   r.   r.   r/   r     s    )r   r{   zLiteral['after'])r}   r~   r   r{   r#   c               G  s   d S rQ   r.   )r}   r   r{   r~   r.   r.   r/   r     s    r$   )r   r{   r?   zCallable[[Any], Any]c                 s   t | trtddddvr8tur8tdddtu rLdkrLt| gR tdd	 D svtd
ddddd fdd}|S )a6  Usage docs: https://docs.pydantic.dev/2.10/concepts/validators/#field-validators

    Decorate methods on the class indicating that they should be used to validate fields.

    Example usage:
    ```python
    from typing import Any

    from pydantic import (
        BaseModel,
        ValidationError,
        field_validator,
    )

    class Model(BaseModel):
        a: str

        @field_validator('a')
        @classmethod
        def ensure_foobar(cls, v: Any):
            if 'foobar' not in v:
                raise ValueError('"foobar" not found in a')
            return v

    print(repr(Model(a='this is foobar good')))
    #> Model(a='this is foobar good')

    try:
        Model(a='snap')
    except ValidationError as exc_info:
        print(exc_info)
        '''
        1 validation error for Model
        a
          Value error, "foobar" not found in a [type=value_error, input_value='snap', input_type=str]
        '''
    ```

    For more in depth examples, see [Field Validators](../concepts/validators.md#field-validators).

    Args:
        field: The first field the `field_validator` should be called on; this is separate
            from `fields` to ensure an error is raised if you don't pass at least one.
        *fields: Additional field(s) the `field_validator` should be called on.
        mode: Specifies whether to validate the fields before or after validation.
        check_fields: Whether to check that the fields actually exist on the model.
        json_schema_input_type: The input type of the function. This is only used to generate
            the appropriate JSON Schema (in validation mode) and can only specified
            when `mode` is either `'before'`, `'plain'` or `'wrap'`.

    Returns:
        A decorator that can be used to decorate a function to be used as a field_validator.

    Raises:
        PydanticUserError:
            - If `@field_validator` is used bare (with no fields).
            - If the args passed to `@field_validator` as fields are not strings.
            - If `@field_validator` applied to instance methods.
    z`@field_validator` should be used with fields and keyword arguments, not bare. E.g. usage should be `@validator('<field_name>', ...)`zvalidator-no-fieldscode)r@   rY   r`   z;`json_schema_input_type` can't be used when mode is set to zvalidator-input-typerY   c                 s  s   | ]}t |tV  qd S rQ   )
isinstancer|   ).0r}   r.   r.   r/   	<genexpr>  rV   z"field_validator.<locals>.<genexpr>z`@field_validator` fields should be passed as separate string args. E.g. usage should be `@validator('<field_name_1>', '<field_name_2>', ...)`zvalidator-invalid-fieldszHCallable[..., Any] | staticmethod[Any, Any] | classmethod[Any, Any, Any](_decorators.PydanticDescriptorProxy[Any]fr#   c                   s>   t | rtdddt | } t j d}t | |S )Nz8`@field_validator` cannot be applied to instance methodszvalidator-instance-methodr   )r~   r   r{   r?   )r   is_instance_method_from_sigr   %ensure_classmethod_based_on_signatureFieldValidatorDecoratorInfoPydanticDescriptorProxyr   dec_infor{   r~   r?   r   r.   r/   dec  s    

zfield_validator.<locals>.dec)r   r   r   r   r   all)r}   r   r{   r?   r~   r   r.   r   r/   r     s(    C

_ModelType_ModelTypeCo)	covariantc                   @  s$   e Zd ZdZd	ddddddZdS )
ModelWrapValidatorHandlerz]`@model_validator` decorated function handler argument type. This is used when `mode='wrap'`.Nr   zstr | int | Noner   )rg   outer_locationr#   c                C  s   d S rQ   r.   )r,   rg   r   r.   r.   r/   ri     s    z"ModelWrapValidatorHandler.__call__)Nr8   r9   r:   r;   ri   r.   r.   r.   r/   r     s    r   c                   @  s$   e Zd ZdZdddddddZd	S )
ModelWrapValidatorWithoutInfozA `@model_validator` decorated function signature.
    This is used when `mode='wrap'` and the function does not have info argument.
    type[_ModelType]r   %ModelWrapValidatorHandler[_ModelType]r   rq   c                C  s   d S rQ   r.   rr   r.   r.   r/   ri     s    	z&ModelWrapValidatorWithoutInfo.__call__Nr   r.   r.   r.   r/   r     s   r   c                   @  s&   e Zd ZdZdddddddd	Zd
S )ModelWrapValidatorzSA `@model_validator` decorated function signature. This is used when `mode='wrap'`.r   r   r   rl   r   rt   c                C  s   d S rQ   r.   ru   r.   r.   r/   ri   (  s    
zModelWrapValidator.__call__Nr   r.   r.   r.   r/   r   %  s   r   c                   @  s    e Zd ZdZdddddZdS )#FreeModelBeforeValidatorWithoutInfoA `@model_validator` decorated function signature.
    This is used when `mode='before'` and the function does not have info argument.
    r   )rg   r#   c                C  s   d S rQ   r.   )r,   rg   r.   r.   r/   ri   :  s    z,FreeModelBeforeValidatorWithoutInfo.__call__Nr   r.   r.   r.   r/   r   5  s   r   c                   @  s"   e Zd ZdZddddddZdS )ModelBeforeValidatorWithoutInfor   r   rf   c                C  s   d S rQ   r.   rh   r.   r.   r/   ri   I  s    z(ModelBeforeValidatorWithoutInfo.__call__Nr   r.   r.   r.   r/   r   D  s   r   c                   @  s"   e Zd ZdZddddddZdS )FreeModelBeforeValidatorUA `@model_validator` decorated function signature. This is used when `mode='before'`.r   rl   )rg   rK   r#   c                C  s   d S rQ   r.   )r,   rg   rK   r.   r.   r/   ri   W  s    z!FreeModelBeforeValidator.__call__Nr   r.   r.   r.   r/   r   T  s   r   c                   @  s$   e Zd ZdZdddddddZdS )ModelBeforeValidatorr   r   rl   rm   c                C  s   d S rQ   r.   rn   r.   r.   r/   ri   e  s    	zModelBeforeValidator.__call__Nr   r.   r.   r.   r/   r   b  s   r   z|Callable[[_AnyModelWrapValidator[_ModelType]], _decorators.PydanticDescriptorProxy[_decorators.ModelValidatorDecoratorInfo]])r   r#   c                 C  s   d S rQ   r.   r   r.   r.   r/   model_validator  s    r   zLiteral['before']zrCallable[[_AnyModelBeforeValidator], _decorators.PydanticDescriptorProxy[_decorators.ModelValidatorDecoratorInfo]]c                 C  s   d S rQ   r.   r   r.   r.   r/   r     s    z}Callable[[_AnyModelAfterValidator[_ModelType]], _decorators.PydanticDescriptorProxy[_decorators.ModelValidatorDecoratorInfo]]c                 C  s   d S rQ   r.   r   r.   r.   r/   r     s    z"Literal['wrap', 'before', 'after']c                   s   ddd fdd}|S )a'  Usage docs: https://docs.pydantic.dev/2.10/concepts/validators/#model-validators

    Decorate model methods for validation purposes.

    Example usage:
    ```python
    from typing_extensions import Self

    from pydantic import BaseModel, ValidationError, model_validator

    class Square(BaseModel):
        width: float
        height: float

        @model_validator(mode='after')
        def verify_square(self) -> Self:
            if self.width != self.height:
                raise ValueError('width and height do not match')
            return self

    s = Square(width=1, height=1)
    print(repr(s))
    #> Square(width=1.0, height=1.0)

    try:
        Square(width=1, height=2)
    except ValidationError as e:
        print(e)
        '''
        1 validation error for Square
          Value error, width and height do not match [type=value_error, input_value={'width': 1, 'height': 2}, input_type=dict]
        '''
    ```

    For more in depth examples, see [Model Validators](../concepts/validators.md#model-validators).

    Args:
        mode: A required string literal that specifies the validation mode.
            It can be one of the following: 'wrap', 'before', or 'after'.

    Returns:
        A decorator that can be used to decorate a function to be used as a model validator.
    r   r   r   c                   s"   t | } t j d}t | |S )Nr   )r   r   ModelValidatorDecoratorInfor   r   r   r.   r/   r     s    
zmodel_validator.<locals>.decr.   )r   r   r.   r   r/   r     s    0AnyTypec                   @  s@   e Zd ZdZedddddZedddd	d
dZejZdS )
InstanceOfu  Generic type for annotating a type that is an instance of a given class.

        Example:
            ```python
            from pydantic import BaseModel, InstanceOf

            class Foo:
                ...

            class Bar(BaseModel):
                foo: InstanceOf[Foo]

            Bar(foo=Foo())
            try:
                Bar(foo=42)
            except ValidationError as e:
                print(e)
                """
                [
                │   {
                │   │   'type': 'is_instance_of',
                │   │   'loc': ('foo',),
                │   │   'msg': 'Input should be an instance of Foo',
                │   │   'input': 42,
                │   │   'ctx': {'class': 'Foo'},
                │   │   'url': 'https://errors.pydantic.dev/0.38.0/v/is_instance_of'
                │   }
                ]
                """
            ```
        r   itemr#   c                 C  s   t ||  f S rQ   )r   r6   r   r.   r.   r/   __class_getitem__  s    zInstanceOf.__class_getitem__r   r   r   sourcer"   r#   c                 C  sl   ddl m} tt|p|}z||}W n |yB   | Y S 0 tjdd |d|d< tj||dS d S )Nr   rN   c                 S  s   || S rQ   r.   rR   r.   r.   r/   rU     rV   z9InstanceOf.__get_pydantic_core_schema__.<locals>.<lambda>rW   r%   rP   )python_schemajson_schema)rZ   rO   r   is_instance_schemar   
get_originr\   json_or_python_schema)r6   r   r"   rO   Zinstance_of_schemaoriginal_schemar.   r.   r/   r0     s    

z'InstanceOf.__get_pydantic_core_schema__N)	r8   r9   r:   r;   r=   r   r0   object__hash__r.   r.   r.   r/   r     s    r   c                   @  s<   e Zd ZdZdddddZeddddd	d
ZejZdS )SkipValidationa  If this is applied as an annotation (e.g., via `x: Annotated[int, SkipValidation]`), validation will be
            skipped. You can also use `SkipValidation[int]` as a shorthand for `Annotated[int, SkipValidation]`.

        This can be useful if you want to use a type annotation for documentation/IDE/type-checking purposes,
        and know that it is safe to skip validation for one or more of the fields.

        Because this converts the validation schema to `any_schema`, subsequent annotation-applied transformations
        may not have the expected effects. Therefore, when used, this annotation should generally be the final
        annotation applied to a type.
        r   r   c                 C  s   t |t f S rQ   )r   r   r   r.   r.   r/   r   +  s    z SkipValidation.__class_getitem__r   r   r   c                   s6   || d fddgi}t j|t jdd  ddS )N pydantic_js_annotation_functionsc                   s   | S rQ   r.   )Z_crT   r   r.   r/   rU   1  rV   z=SkipValidation.__get_pydantic_core_schema__.<locals>.<lambda>c                 S  s   || S rQ   r.   rR   r.   r.   r/   rU   5  rV   r   )metadatarP   )r   
any_schemar\   )r6   r   r"   r   r.   r   r/   r0   .  s    z+SkipValidation.__get_pydantic_core_schema__N)	r8   r9   r:   r;   r   r=   r0   r   r   r.   r.   r.   r/   r     s
   
r   )Sr;   
__future__r   _annotationsdataclassessys	functoolsr   typesr   typingr   r   r   r   r	   r
   r   pydantic_corer   r   _core_schematyping_extensionsr   r   r   r   	_internalr   r   r   annotated_handlersr   errorsr   version_infor   inspect_validatorr'   	dataclass
slots_truer   r>   rM   r_   re   rk   ro   rs   r(   r*   Z_V2Validatorra   rc   Z_V2WrapValidatorr=   staticmethodrv   r<   rw   ry   rz   r   r   r   ValidatorFunctionWrapHandlerr   r   r   r   r   r   r   ZModelAfterValidatorWithoutInfoValidationInfoZModelAfterValidatorZ_AnyModelWrapValidatorZ_AnyModelBeforeValidatorZ_AnyModelAfterValidatorr   r   r   r   r.   r.   r.   r/   <module>   s   $
;BaK
,


n
9<