Ë
    ¸Ó^jïC  ã                   ó  — 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m	Z	m
Z
mZmZmZmZmZmZmZ  G d„ d«      Z e«       Z G d„ de«      Z G d	„ d
«      Z G d„ d«      Zd„ Zd„ Zd„ Zd„ Zefd„Zd„ Zdd„Zd„ Z d„ Z!d„ Z"d„ Z#dd„Z$y)a+  
Helper functions for managing the Matplotlib API.

This documentation is only relevant for Matplotlib developers, not for users.

.. warning::

    This module and its submodules are for internal use only.  Do not use them
    in your own code.  We may change the API at any time with no warning.

é    Né   )	Ú
deprecatedÚwarn_deprecatedÚrename_parameterÚdelete_parameterÚmake_keyword_onlyÚdeprecate_method_overrideÚdeprecate_privatize_attributeÚ'suppress_matplotlib_deprecation_warningÚMatplotlibDeprecationWarningc                   ó   — e Zd Zd„ Zy)Ú_Unsetc                  ó   — y)Nz<UNSET>© ©Úselfs    úc/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/matplotlib/_api/__init__.pyÚ__repr__z_Unset.__repr__!   s   € Øó    N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r       s   „ ór   r   c                   ó   — e Zd ZdZy)ÚUnsupportedErrorzž
    Raised on inherited methods if the child class does not support the functionality
    of the base class.

    See `.unsupported_method` for details.
    N)r   r   r   Ú__doc__r   r   r   r   r   &   s   „ òr   r   c                   ó"   — e Zd ZdZddœd„Zd„ Zy)Úunsupported_methoda  
    Descriptor that creates a method raising `.UnsupportedError`.

    Historically, we have quite a few cases of inheritance hierarchies that do not
    fully respect the Liskov Substitution Principle, e.g. Axes and Artist. Some of
    the methods of a base class may not be implemented in the child class. In that case,
    we override the method in the child class to raise `.UnsupportedError`.

    Use in a class body to mark inherited methods as unsupported::

        class Axes3D(Axes):
            twinx = _api.unsupported_method()

    Calling ``Axes3D().twinx()`` will raise
    "UnsupportedError: Axes3D does not support 'twinx'."

    Parameters
    ----------
    append_message : str
        Optional additional text to be appended to the error message.
    N©Úappend_messagec                ó   — || _         y ©Nr   )r   r   s     r   Ú__init__zunsupported_method.__init__E   s
   € Ø,ˆÕr   c                 óæ   ‡— |j                   › d|› d�Š| j                  r‰d| j                  z   z  Šˆfd„}||_         |j                  › d|› �|_        |j                  |_        t	        |||«       y )Nz does not support 'z'.ú c                 ó   •— t        ‰«      ‚r!   )r   )r   ÚargsÚkwargsÚmessages      €r   Úmethodz/unsupported_method.__set_name__.<locals>.methodM   s   ø€ Ü" 7Ó+Ð+r   ú.)r   r   r   r   Úsetattr)r   ÚownerÚnamer)   r(   s       @r   Ú__set_name__zunsupported_method.__set_name__H   s{   ø€ Ø—^‘^Ð$Ð$7¸°v¸RÐ@ˆØ×ÒØ�s˜T×0Ñ0Ñ0Ñ0ˆGô	,ð ˆŒØ!&×!3Ñ!3Ð 4°A°d°VÐ<ˆÔØ!×,Ñ,ˆÔÜ��t˜VÕ$r   )r   r   r   r   r"   r.   r   r   r   r   r   /   s   „ ñð* *.ô -ó%r   r   c                   ó.   — e Zd ZdZdd„Zd„ Zed„ «       Zy)Úclasspropertya$  
    Like `property`, but also triggers on access via the class, and it is the
    *class* that's passed as argument.

    Examples
    --------
    ::

        class C:
            @classproperty
            def foo(cls):
                return cls.__name__

        assert C.foo == "C"
    Nc                 óZ   — || _         |€|�t        d«      ‚|| _        || _        || _        y )Nz#classproperty only implements fget.)Ú_fgetÚ
ValueErrorÚfsetÚfdelÚ_doc)r   Úfgetr4   r5   Údocs        r   r"   zclassproperty.__init__g   s5   € ØˆŒ
ØÐ˜tÐ/ÜÐBÓCÐCØˆŒ	ØˆŒ	àˆ�	r   c                 ó$   — | j                  |«      S r!   ©r2   )r   Úinstancer,   s      r   Ú__get__zclassproperty.__get__p   s   € Ø�z‰z˜%Ó Ð r   c                 ó   — | j                   S r!   r:   r   s    r   r7   zclassproperty.fgets   s   € à�z‰zÐr   )NNN)r   r   r   r   r"   r<   Úpropertyr7   r   r   r   r0   r0   V   s%   „ ñó ò!ð ñó ñr   r0   c                óà  ‡— t        d«      Št        | t         «      r| fn| €‰fnt        ˆfd„| D «       «      } ˆfd„}|j                  «       D ]ž  \  }}t        || «      rŒg t	        || «      ¢}d|v r"|j                  d«       |j                  d«       t        dj                  |t        |«      dkD  rdj                  |dd «      d	z   |d   z   n|d
    |t        |«      «      «      «      ‚ y)a3  
    For each *key, value* pair in *kwargs*, check that *value* is an instance
    of one of *types*; if not, raise an appropriate TypeError.

    As a special case, a ``None`` entry in *types* is treated as NoneType.

    Examples
    --------
    >>> _api.check_isinstance((SomeClass, None), arg=arg)
    Nc              3   ó*   •K  — | ]
  }|€‰n|–— Œ y ­wr!   r   )Ú.0ÚtpÚ	none_types     €r   ú	<genexpr>z#check_isinstance.<locals>.<genexpr>‰   s   øè ø€ ÒC°r  
‘9°Ó2ÑCùs   ƒc                 ó|   •— | ‰u rdS | j                   dk(  r| j                  S | j                   › d| j                  › �S )NÚNoneÚbuiltinsr*   )r   r   )rB   rC   s    €r   Ú	type_namez#check_isinstance.<locals>.type_name‹   sD   ø€ Ø 	™/�ð 	;Ø(*¯©¸Ò(C�R—_‘_ð	;àŸ™� a¨¯©Ð'8Ð9ð	;r   rF   z({!r} must be an instance of {}, not a {}r   ú, éÿÿÿÿz or r   )ÚtypeÚ
isinstanceÚtupleÚitemsÚmapÚremoveÚappendÚ	TypeErrorÚformatÚlenÚjoin)Útypesr'   rH   ÚkÚvÚnamesrC   s         @r   Úcheck_isinstancerZ   {   sð   ø€ ô �T“
€IÜ# E¬4Ô0ˆe‰XØ"˜]ˆi‰\ÜÓC¸UÔCÓCð 
ô;ð
 —‘“ò )‰ˆˆ1Ü˜!˜UÕ#Ø,”c˜) UÓ+Ð,ˆEØ˜‰Ø—‘˜VÔ$Ø—‘˜VÔ$ÜØ:×AÑAØä˜5“z A’~ð —I‘I˜e C R˜jÓ)¨FÑ2°U¸2±YÒ>Ø+0°©8Ùœd 1›gÓ&ó	(ó)ð )ñ)r   c                 ó\  — t        |«      dkD  rst        d„ |g|¢D «       «      r^t        j                  ||d¬«      }t        |«      xdk(  r d}nUdk(  r
d|d   ›d	�}nG	 d
dj	                  t        t        |«      «      › d	�}n"ddj	                  t        t        |«      «      › �}|›d| › d|› �S )a  
    Generate an error message that a potential setting is not an acceptable value.

    If the acceptable values are all strings, and sufficiently large, then add just a
    few suggestions to the end of the message. Otherwise list the supported values.

    Parameters
    ----------
    name : str
        The name of the setting, keyword argument, etc. to generate the message for.
    potential
        The potential value from the user that is not a valid choice.
    values : iterable
        Sequence of values to check on.
    é   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr!   )rL   Ústr)rA   rX   s     r   rD   z,list_suggestion_error_msg.<locals>.<genexpr>®   s   è ø€ ÒP°aœz¨!¬S×1ÑPùs   ‚g      à?)Úcutoffr   Ú r   z Did you mean: ú?z Did you mean one of: rI   z Supported values are z is not a valid value for r*   )rT   ÚallÚdifflibÚget_close_matchesrU   rO   Úrepr)r-   Ú	potentialÚvaluesÚbestÚ
suggestions        r   Úlist_suggestion_error_msgrj   ž   s³   € ô  ˆ6ƒ{�Q‚œ3ÑP¸IÐ;OÈÐ;OÔPÔPÜ×(Ñ(¨°FÀ3ÔGˆÜ�$‹iÝØ‘
ÛØ.¨t°A©w¨k¸Ð;‘
ØØ5°d·i±iÄÄDÈ$ÃÓ6PÐ5QÐQRÐS‘
à-¨d¯i©i¼¼DÀ&Ó8IÓ.JÐ-KÐLˆ
Øˆ]Ð4°T°F¸!¸J¸<ÐHÐHr   c                óª   — |st        d«      ‚|j                  «       D ]"  \  }}	 || v }|rŒt        t        ||| «      «      ‚ y# t        $ r d}Y Œ(w xY w)a|  
    For each *key, value* pair in *kwargs*, check that *value* is in *values*;
    if not, raise an appropriate ValueError.

    Parameters
    ----------
    values : iterable
        Sequence of values to check on.

        Note: All values must support == comparisons.
        This means in particular the entries must not be numpy arrays.
    **kwargs : dict
        *key, value* pairs as keyword arguments to find in *values*.

    Raises
    ------
    ValueError
        If any *value* in *kwargs* is not found in *values*.

    Examples
    --------
    >>> _api.check_in_list(["foo", "bar"], arg=arg, other_arg=other_arg)
    zNo argument to check!FN)rR   rN   r3   rj   )rg   r'   ÚkeyÚvalÚexistss        r   Úcheck_in_listro   ¼   sn   € ñ0 ÜÐ/Ó0Ð0Ø—L‘L“Nò J‰ˆˆSð
	Ø˜F�]ˆFò ÜÔ6°s¸CÀÓHÓIÐIñJøô ò 	ð ŠFð	ús   ¥AÁAÁAc          
      ó&  — |j                  «       D ]ù  \  }}|j                  }t        |«      t        | «      k7  st        d„ t	        || «      D «       «      sŒFt        t        j                  dd„ t        j                  «       D «       «      «      }dj                  | ddd…   D �cg c]  }|�t        |«      n
t        |«      ‘Œ c}ddd…   «      }t        | «      dk(  r|dz  }t        |›d	t        | «      › d
|› d|j                  › �«      ‚ yc c}w )a¦  
    For each *key, value* pair in *kwargs*, check that *value* has the shape *shape*;
    if not, raise an appropriate ValueError.

    *None* in the shape is treated as a "free" size that can have any length.
    e.g. (None, 2) -> (N, 2)

    The values checked must be numpy arrays.

    Examples
    --------
    To check for (N, 2) shaped arrays

    >>> _api.check_shape((None, 2), arg=arg, other_arg=other_arg)
    c              3   ó8   K  — | ]  \  }}||k7  xr |d u–— Œ y ­wr!   r   )rA   ÚsÚts      r   rD   zcheck_shape.<locals>.<genexpr>ú   s$   è ø€ ÒS±D°A°q�q˜A‘vÒ/ !¨4 -Ó/ÑSùs   ‚ÚNMLKJIHc              3   ó&   K  — | ]	  }d |› �–— Œ y­w)ÚDNr   )rA   Úis     r   rD   zcheck_shape.<locals>.<genexpr>ý   s   è ø€ Ò4˜Q�1�Q�C”Ñ4ùs   ‚rI   NrJ   r   ú,z	 must be zD with shape (z), but your input has shape )rN   ÚshaperT   ÚanyÚzipÚiterÚ	itertoolsÚchainÚcountrU   r^   Únextr3   )ry   r'   rW   rX   Ú
data_shapeÚ
dim_labelsÚnÚ
text_shapes           r   Úcheck_shaper…   æ   s  € ð  —‘“ò ‰ˆˆ1Ø—W‘Wˆ
ä�
‹Oœs 5›zÒ)ÜÑS¼CÀ
ÈEÓ<RÔSÕSÜœiŸo™oØÙ4¤)§/¡/Ó"3Ô4ó6ó 7ˆJð Ÿ™Ø-2±4°R°4©[ö$:Ø()ð /0¨m¤C¨¤FÄÀjÓAQÑ$Qò $:Ù:>¸B¸$ñ$@ó AˆJä�5‹z˜QŠØ˜cÑ!�
äØ�%�y¤ U£ ¨N¸:¸,ð G,Ø,-¯G©G¨9ð6óð ñùò$:s   Â$D
c          	      óÈ   — t        |«      dk7  rt        d«      ‚|j                  «       \  \  }}	 | |   S # t        $ r#  |t	        ||| j                  «       «      «      d‚w xY w)aE  
    *kwargs* must consist of a single *key, value* pair.  If *key* is in
    *mapping*, return ``mapping[value]``; else, raise an appropriate
    ValueError.

    Parameters
    ----------
    _error_cls :
        Class of error to raise.

    Examples
    --------
    >>> _api.getitem_checked({"foo": "bar"}, arg=arg)
    r   z/getitem_checked takes a single keyword argumentN)rT   r3   rN   ÚKeyErrorrj   Úkeys)ÚmappingÚ
_error_clsr'   rW   rX   s        r   Úgetitem_checkedr‹   	  sk   € ô ˆ6ƒ{�aÒÜÐJÓKÐKØ�l‰l‹n�G�F€QˆðTØ�q‰zÐøÜò TÙÔ2°1°a¸¿¹»ÓHÓIÈtÐSðTús	   °5 µ,A!c                 óö   ‡ ‡‡— ‰ j                   dk(  sJ ‚t        ‰ «      j                  «       D ��ci c]  \  }}t        |t        «      r||“Œ c}}Š ‰ «       Št
        j                  ˆ ˆˆfd„«       }|S c c}}w )a
  
    Helper decorator for implementing module-level ``__getattr__`` as a class.

    This decorator must be used at the module toplevel as follows::

        @caching_module_getattr
        class __getattr__:  # The class *must* be named ``__getattr__``.
            @property  # Only properties are taken into account.
            def name(self): ...

    The ``__getattr__`` class will be replaced by a ``__getattr__``
    function such that trying to access ``name`` on the module will
    resolve the corresponding property (which may be decorated e.g. with
    ``_api.deprecated`` for deprecating module globals).  The properties are
    all implicitly cached.  Moreover, a suitable AttributeError is generated
    and raised if no property with the given name exists.
    Ú__getattr__c                 ój   •— | ‰v r‰|    j                  ‰«      S t        d‰j                  ›d| ›�«      ‚)Nzmodule z has no attribute )r<   ÚAttributeErrorr   )r-   Úclsr;   Úpropss    €€€r   r�   z+caching_module_getattr.<locals>.__getattr__:  sD   ø€ à�5‰=Ø˜‘;×&Ñ& xÓ0Ð0ÜØ�c—n‘nÐ'Ð'9¸$¸ÐBóDð 	Dr   )r   ÚvarsrN   rL   r>   Ú	functoolsÚcache)r�   r-   Úpropr�   r;   r‘   s   `   @@r   Úcaching_module_getattrr–   !  sw   ú€ ð& �<‰<˜=Ò(Ð(Ð(ä*.¨s«)¯/©/Ó*;÷ ,™J˜D $Ü˜4¤Ô*ð �4‰Zó ,€Eá‹u€Hä‡_�_õDó ðDð Ðùó,s   ±A5c                 ó$  ‡— ‰€t        j                  t        | «      S ˆfd„}| j                  «       D ]k  \  }}d}dD ]O  }||z   t	        ‰«      v sŒd}|D ]5  } |||z   «      }||z   |_        d||z   › d�|_        t        ‰||z   |«       Œ7 ŒQ |rŒ_t        d|›�«      ‚ | j                  «       D ���ci c]  \  }}|D ]  }||“Œ Œ }	}}}d„ }
t        ‰d	i «      } |
|«       |
|	«      z  }|rt        d
|› �«      ‚i |¥|	¥‰_        ‰S c c}}}w )aQ  
    Class decorator for defining property aliases.

    Use as ::

        @_api.define_aliases({"property": ["alias", ...], ...})
        class C: ...

    For each property, if the corresponding ``get_property`` is defined in the
    class so far, an alias named ``get_alias`` will be defined; the same will
    be done for setters.  If neither the getter nor the setter exists, an
    exception will be raised.

    The alias map is stored as the ``_alias_to_prop`` attribute under the format
    ``{"alias": "property", ...}` on the class, and can be used by
    `.normalize_kwargs`.
    c                 óX   •‡ — t        j                  t        ‰‰ «      «      ˆ fd„«       }|S )Nc                 ó(   •—  t        | ‰«      |i |¤ŽS r!   )Úgetattr)r   r&   r'   r-   s      €r   r)   z2define_aliases.<locals>.make_alias.<locals>.methodZ  s   ø€ à&”7˜4 Ó&¨Ð7°Ñ7Ð7r   )r“   Úwrapsrš   )r-   r)   r�   s   ` €r   Ú
make_aliasz"define_aliases.<locals>.make_aliasY  s*   ù€ Ü	�‰œ  dÓ+Ó	,ó	8ó 
-ð	8àˆr   F)Úget_Úset_TzAlias for `z`.z%Neither getter nor setter exists for c                 óF   — h | j                  «       £| j                  «       £S r!   )rˆ   rg   )Úds    r   Úget_aliased_and_aliasesz/define_aliases.<locals>.get_aliased_and_aliasesp  s   € Ø'�—‘“Ð'˜AŸH™H›JÐ'Ð'r   Ú_alias_to_propz2Parent class already defines conflicting aliases: )r“   ÚpartialÚdefine_aliasesrN   r’   r   r   r+   r3   rš   ÚNotImplementedErrorr¢   )Úalias_dr�   rœ   r•   Úaliasesrn   ÚprefixÚaliasr)   Úalias_to_propr¡   Úpreexisting_aliasesÚconflictings    `           r   r¤   r¤   D  s‚  ø€ ð$ €{Ü× Ñ ¤°Ó9Ð9ôð !Ÿ™›ò B‰ˆˆgØˆØ&ò 	9ˆFØ˜‰}¤ S£	Ò)Ø�Ø$ò 9�EÙ'¨°©Ó6�FØ&,¨u¡n�F”OØ'2°6¸D±=°/ÀÐ%D�F”NÜ˜C ¨%¡°Õ8ñ	9ð	9ò ÜØ7¸°xÐ@óBð BðBð *1¯©«÷Oð OÙ%˜˜gÀgòOØ=Bˆˆt‰ðOØðO€Mò Oò(ô " #Ð'7¸Ó<ÐÙ*Ð+>Ó?Ù,¨]Ó;ñ<€Káä!Ø@ÀÀÐNóPð 	PàAÐ/ÐA°=ÐA€CÔØ€JùôOs   Â5Dc                 ó€   — t        | «      D ]  \  }}	  ||i |¤Žc S  y# t        $ r |t        | «      dz
  k(  r‚ Y Œ0w xY w)a  
    Select and call the function that accepts ``*args, **kwargs``.

    *funcs* is a list of functions which should not raise any exception (other
    than `TypeError` if the arguments passed do not match their signature).

    `select_matching_signature` tries to call each of the functions in *funcs*
    with ``*args, **kwargs`` (in the order in which they are given).  Calls
    that fail with a `TypeError` are silently skipped.  As soon as a call
    succeeds, `select_matching_signature` returns its return value.  If no
    function accepts ``*args, **kwargs``, then the `TypeError` raised by the
    last failing call is re-raised.

    Callers should normally make sure that any ``*args, **kwargs`` can only
    bind a single *func* (to avoid any ambiguity), although this is not checked
    by `select_matching_signature`.

    Notes
    -----
    `select_matching_signature` is intended to help implementing
    signature-overloaded functions.  In general, such functions should be
    avoided, except for back-compatibility concerns.  A typical use pattern is
    ::

        def my_func(*args, **kwargs):
            params = select_matching_signature(
                [lambda old1, old2: locals(), lambda new: locals()],
                *args, **kwargs)
            if "old1" in params:
                warn_deprecated(...)
                old1, old2 = params.values()  # note that locals() is ordered.
            else:
                new, = params.values()
            # do things with params

    which allows *my_func* to be called either with two parameters (*old1* and
    *old2*) or a single one (*new*).  Note that the new signature is given
    last, so that callers get a `TypeError` corresponding to the new signature
    if the arguments they passed in do not match any signature.
    r   N)Ú	enumeraterR   rT   )Úfuncsr&   r'   rw   Úfuncs        r   Úselect_matching_signaturer±   ~  s[   € ôX ˜UÓ#ò ‰ˆˆ4ð	Ù˜Ð( Ñ(Ò(ñøô ò 	Ø”C˜“J ‘NÒ"Øñ #ð	ús   “Ÿ=¼=c                 ó*   — t        | › d|› d|› d�«      S )zEGenerate a TypeError to be raised by function calls with wrong arity.z	() takes z positional arguments but z were given)rR   )r-   ÚtakesÚgivens      r   Únargs_errorrµ   ²  s(   € ä˜�v˜Y u gÐ-GØ�w˜kð+ó ,ð ,r   c                 ól   — t        |t        «      st        t        |«      «      }t	        | › d|› d�«      S )aL  
    Generate a TypeError to be raised by function calls with wrong kwarg.

    Parameters
    ----------
    name : str
        The name of the calling function.
    kw : str or Iterable[str]
        Either the invalid keyword argument name, or an iterable yielding
        invalid keyword arguments (e.g., a ``kwargs`` dict).
    z'() got an unexpected keyword argument 'ú')rL   r^   r€   r|   rR   )r-   Úkws     r   Úkwarg_errorr¹   ¸  s4   € ô �bœ#ÔÜ”$�r“(‹^ˆÜ˜�vÐDÀRÀDÈÐJÓKÐKr   c              #   óh   K  — | –— | j                  «       D ]  }t        |«      E d{  –—†  Œ y7 Œ­w)z8Yield *cls* and direct and indirect subclasses of *cls*.N)Ú__subclasses__Úrecursive_subclasses)r�   Úsubclss     r   r¼   r¼   É  s4   è ø€ à
‚IØ×$Ñ$Ó&ò 0ˆÜ'¨Ó/×/Ñ/ñ0Ø/ús   ‚&2¨0©2c                 óä  — i }t         j                  dd dk\  rFt        j                  t        «      j
                  d   }t        |dz  «      t        |dz  «      f|d<   n{t        j                  «       }t        j                  d«      D ]N  }|€||d<    nEt        j                  d	|j                  j                  d
d«      «      s||d<    n|j                  }ŒP ~t        j                   | |fi |¤Ž y)a4  
    `warnings.warn` wrapper that sets *stacklevel* to "outside Matplotlib".

    The original emitter of the warning can be obtained by patching this
    function back to `warnings.warn`, i.e. ``_api.warn_external =
    warnings.warn`` (or ``functools.partial(warnings.warn, stacklevel=2)``,
    etc.).
    Né   )é   é   Ú
matplotlibÚmpl_toolkitsÚskip_file_prefixesr   Ú
stacklevelz-\A(matplotlib|mpl_toolkits)(\Z|\.(?!tests\.))r   r`   )ÚsysÚversion_infoÚpathlibÚPathÚ__file__Úparentsr^   Ú	_getframer}   r   ÚreÚmatchÚ	f_globalsÚgetÚf_backÚwarningsÚwarn)r(   Úcategoryr'   ÚbasedirÚframerÅ   s         r   Úwarn_externalr×   Ð  sê   € ð €FÜ
×Ñ˜˜Ð˜wÒ&ä—,‘,œxÓ(×0Ñ0°Ñ3ˆÜ(+¨G°lÑ,BÓ(CÜ(+¨G°nÑ,DÓ(Eð(GˆÐ#Ò$ô —‘“ˆÜ#Ÿ/™/¨!Ó,ò 
	!ˆJØˆ}à'1��|Ñ$ÙÜ—8‘8ÐLà!ŸO™O×/Ñ/°
¸BÓ?ôAð (2��|Ñ$ÙØ—L‘L‰Eð
	!ð Ü‡M�M�'˜8Ñ. vÓ.r   r!   )%r   rc   r“   r}   rÈ   rÍ   rÆ   rÒ   Údeprecationr   r   r   r   r   r	   r
   r   r   r   ÚUNSETÚRuntimeErrorr   r   r0   rZ   rj   ro   r…   r3   r‹   r–   r¤   r±   rµ   r¹   r¼   r×   r   r   r   ú<module>rÛ      s°   ðñ
ó Û Û Û Û 	Û 
Û ÷"÷ "õ "÷ñ ñ 	‹€ô�|ô ÷$%ñ $%÷Nñ òJ )òFIò<'JòT ðF ,6ó Tò0 óF7òt1òh,òLò"0ô/r   