+
    üÐj¢o  ã                  óÞ  € R t ^ RIHt . R,Ot^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIHtHtHtHtHtHt ^ RIHsHt ^ RIHtHt ^ R	IHt ]! R
4      t]! R4      tRtR tR]n        R]n        R]n         R t!R-R lt"R.R lt#R.R lt$R t%R-R R llt&R-R R llt'R t(R t) ! R R4      t* ! R R4      t+ ! R R 4      t,R! t-R" t.R# t/R$ t0R% t1R& t2]! R']R(]3,          R)7      t3R-R* R+ llt4R# )/aÄ  
Deprecation framework for Twisted.

To mark a method, function, or class as being deprecated do this::

    from incremental import Version
    from twisted.python.deprecate import deprecated

    @deprecated(Version("Twisted", 22, 10, 0))
    def badAPI(self, first, second):
        '''
        Docstring for badAPI.
        '''
        ...

    @deprecated(Version("Twisted", 22, 10, 0))
    class BadClass:
        '''
        Docstring for BadClass.
        '''

The newly-decorated badAPI will issue a warning when called, and BadClass will
issue a warning when instantiated. Both will also have  a deprecation notice
appended to their docstring.

To deprecate properties you can use::

    from incremental import Version
    from twisted.python.deprecate import deprecatedProperty

    class OtherwiseUndeprecatedClass:

        @deprecatedProperty(Version("Twisted", 22, 10, 0))
        def badProperty(self):
            '''
            Docstring for badProperty.
            '''

        @badProperty.setter
        def badProperty(self, value):
            '''
            Setter sill also raise the deprecation warning.
            '''


While it's best to avoid this as it adds performance overhead to *any* usage of
the module, to mark module-level attributes as being deprecated you can use::

    badAttribute = "someValue"

    ...

    deprecatedModuleAttribute(
        Version("Twisted", 22, 10, 0),
        "Use goodAttribute instead.",
        "your.full.module.name",
        "badAttribute")

The deprecated attributes will issue a warning whenever they are accessed. If
the attributes being deprecated are in the same module as the
L{deprecatedModuleAttribute} call is being made from, the C{__name__} global
can be used as the C{moduleName} parameter.


To mark an optional, keyword parameter of a function or method as deprecated
without deprecating the function itself, you can use::

    @deprecatedKeywordParameter(Version("Twisted", 22, 10, 0), "baz")
    def someFunction(foo, bar=0, baz=None):
        ...

See also L{incremental.Version}.

@type DEPRECATION_WARNING_FORMAT: C{str}
@var DEPRECATION_WARNING_FORMAT: The default deprecation warning string format
    to use when one is not provided by the user.
)ÚannotationsN)Úfindlinestarts©Úwraps)Ú
ModuleType)ÚAnyÚCallableÚDictÚOptionalÚTypeVarÚcast)ÚwarnÚwarn_explicit)ÚVersionÚgetVersionString)Ú	ParamSpecÚ_PÚ_Rz&%(fqpn)s was deprecated in %(version)sc                ó^  €  V P                   p\        P                  ! V 4      '       g   \        P
                  ! V 4      '       d   V P                  pV RV 2# \        P                  ! V 4      '       d   V P                   RV P                    2# V#   \         d    T P                  p L�i ; i)z¨
Return the fully qualified name of a module, class, method or function.
Classes and functions need to be module level ones to be correctly
qualified.

@rtype: C{str}.
Ú.)Ú__qualname__ÚAttributeErrorÚ__name__ÚinspectÚisclassÚ
isfunctionÚ
__module__Úismethod)ÚobjÚnameÚ
moduleNames   &  Ú:/usr/lib/python3/dist-packages/twisted/python/deprecate.pyÚ_fullyQualifiedNamer"   t   sš   € ðØ×Ñˆô ‡‚�s×Òœw×1Ò1°#×6Ò6Ø—^‘^ˆ
Ø�˜Q˜t˜fÐ%Ð%Ü	×	Ò	˜#×	Ò	Ø—.‘.Ð!  3×#3Ñ#3Ð"4Ð5Ð5Ø€Køô ô Ø�|‰|Šðús   ‚B ÂB,Â+B,ztwisted.python.reflectÚfullyQualifiedNamec                óF   € \        V 4      '       d   \        V 4      p RV  R2# )zò
Surround a replacement for a deprecated API with some polite text exhorting
the user to consider it as an alternative.

@type replacement: C{str} or callable

@return: a string like "please use twisted.python.modules.getModule
    instead".
zplease use z instead)Úcallabler"   ©Úreplacements   &r!   Ú_getReplacementStringr(   �   s(   € ô �×ÒÜ)¨+Ó6ˆØ˜˜ XÐ.Ð.ó    c                ó`   € R\        V 4       2pV'       d   V R\        V4       2pVR,           # )ax  
Generate an addition to a deprecated object's docstring that explains its
deprecation.

@param version: the version it was deprecated.
@type version: L{incremental.Version}

@param replacement: The replacement, if specified.
@type replacement: C{str} or callable

@return: a string like "Deprecated in Twisted 27.2.0; please use
    twisted.timestream.tachyon.flux instead."
zDeprecated in ú; r   )r   r(   )Úversionr'   Údocs   && r!   Ú_getDeprecationDocstringr.   ž   s;   € ð Ô+¨GÓ4Ð5Ð
6€CßØ��RÔ-¨kÓ:Ð;Ð<ˆØ��9Ðr)   c                óŒ   € Vf   \         pVRV R\        V4      /,          pV'       d   RP                  V\        V4      4      pV# )a  
Return a string indicating that the Python name was deprecated in the given
version.

@param fqpn: Fully qualified Python name of the thing being deprecated
@type fqpn: C{str}

@param version: Version that C{fqpn} was deprecated in.
@type version: L{incremental.Version}

@param format: A user-provided format to interpolate warning values into, or
    L{DEPRECATION_WARNING_FORMAT
    <twisted.python.deprecate.DEPRECATION_WARNING_FORMAT>} if L{None} is
    given.
@type format: C{str}

@param replacement: what should be used in place of C{fqpn}. Either pass in
    a string, which will be inserted into the warning message, or a
    callable, which will be expanded to its full import path.
@type replacement: C{str} or callable

@return: A textual description of the deprecation
@rtype: C{str}
Úfqpnr,   z{}; {})ÚDEPRECATION_WARNING_FORMATr   Úformatr(   )r0   r,   r2   r'   ÚwarningStrings   &&&& r!   Ú_getDeprecationWarningStringr4   ²   sK   € ð2 ‚~Ü+ˆØ˜f d¨IÔ7GÈÓ7PÐQÕQ€MßØ Ÿ™ØÔ0°Ó=ó
ˆð Ðr)   c                ó.   € \        \        V 4      WV4      # )a#  
Return a string indicating that the callable was deprecated in the given
version.

@type callableThing: C{callable}
@param callableThing: Callable object to be deprecated

@type version: L{incremental.Version}
@param version: Version that C{callableThing} was deprecated in.

@type format: C{str}
@param format: A user-provided format to interpolate warning values into,
    or L{DEPRECATION_WARNING_FORMAT
    <twisted.python.deprecate.DEPRECATION_WARNING_FORMAT>} if L{None} is
    given

@param replacement: what should be used in place of the callable. Either
    pass in a string, which will be inserted into the warning message,
    or a callable, which will be expanded to its full import path.
@type replacement: C{str} or callable

@return: A string describing the deprecation.
@rtype: C{str}
)r4   r"   )ÚcallableThingr,   r2   r'   s   &&&&r!   ÚgetDeprecationWarningStringr7   Õ   s   € ô2 (Ü˜MÓ*¨G¸[óð r)   c                óü  € V P                   '       d   V P                   P                  4       pM. p\        V4      ^ 8X  d   VP                  V4       M�\        V4      ^8X  d   VP	                  RVR.4       MjVR,          pRpVP                  4       '       g   VP                  4       pVP	                  RWA,           V.4       V Uu. uF  qUP                  R4      NK  	  ppRP                  V4      V n         R# u upi )a^  
Append the given text to the docstring of C{thingWithDoc}.

If C{thingWithDoc} has no docstring, then the text just replaces the
docstring. If it has a single-line docstring then it appends a blank line
and the message text. If it has a multi-line docstring, then in appends a
blank line a the message text, and also does the indentation correctly.
Ú Ú Ú
Néÿÿÿÿ)	Ú__doc__Ú
splitlinesÚlenÚappendÚextendÚstripÚpopÚlstripÚjoin)ÚthingWithDocÚtextToAppendÚdocstringLinesÚtrailerÚspacesÚls   &&    r!   Ú_appendToDocstringrL   ó   s×   € ð ××ÐØ%×-Ñ-×8Ñ8Ó:‰àˆä
ˆ>Ó˜aÔØ×Ñ˜lÕ+Ü	ˆ^Ó	 Ô	!Ø×Ñ˜r <°Ð4Õ5à  Õ$ˆØˆØ�}‰}�Šà#×'Ñ'Ó)ˆFØ×Ñ˜r 6Õ#8¸&ÐAÔBÙ1?Ó@±¨AŸ(™( 3ž-±ˆÐ@ØŸ9™9 ^Ó4€LÖùò As   ÃC9c               ó$   € V ^8„  d   QhRRRRRR/# ©é   r,   r   r'   z"str | Callable[..., object] | NoneÚreturnz.Callable[[Callable[_P, _R]], Callable[_P, _R]]© )r2   s   "r!   Ú__annotate__rR     s$   € ÷ & ñ & Øð& Ø#Eð& à3ñ& r)   c                ó   a a€ R VV 3R llpV# )ag  
Return a decorator that marks callables as deprecated. To deprecate a
property, see L{deprecatedProperty}.

@type version: L{incremental.Version}
@param version: The version in which the callable will be marked as
    having been deprecated.  The decorated function will be annotated
    with this version, having it set as its C{deprecatedVersion}
    attribute.

@param replacement: what should be used in place of the callable. Either
    pass in a string, which will be inserted into the warning message,
    or a callable, which will be expanded to its full import path.
@type replacement: C{str} or callable
c               ó    € V ^8„  d   QhRRRR/# )rO   ÚfunctionzCallable[_P, _R]rP   rQ   )r2   s   "r!   rR   Ú deprecated.<locals>.__annotate__#  s   € ÷ "ñ "Ð'7ð "Ð<Lñ "r)   c                ó’   <a a€ \        S SRS4      o\        S 4      R V V3R ll4       p\        V\        SS4      4       SVn        V# )z1
Decorator that marks C{function} as deprecated.
Nc               ó$   € V ^8„  d   QhRRRRRR/# )rO   Úargsz_P.argsÚkwargsz	_P.kwargsrP   r   rQ   )r2   s   "r!   rR   Ú>deprecated.<locals>.deprecationDecorator.<locals>.__annotate__,  s!   € ÷ 	-ñ 	- gð 	-¸ð 	-Àrñ 	-r)   c                 ó8   <€ \        S\        ^R7       S! V / VB # ©rO   ©Ú
stacklevel©r   ÚDeprecationWarning©rY   rZ   rU   r3   s   *,€€r!   ÚdeprecatedFunctionÚDdeprecated.<locals>.deprecationDecorator.<locals>.deprecatedFunction+  ó    ø€ ä�Ô 2¸qÕAÙ˜TÐ, VÑ,Ð,r)   )r7   r   rL   r.   ÚdeprecatedVersion)rU   rc   r3   r'   r,   s   f @€€r!   ÚdeprecationDecoratorÚ(deprecated.<locals>.deprecationDecorator#  s]   ú€ ô 4Ø�g˜t [ó
ˆô 
ˆx‹÷	-ð 	-ó 
ð	-ô 	ØÔ 8¸À+Ó Nô	
ð 07ÐÔ,Ø!Ð!r)   rQ   )r,   r'   rg   s   ff r!   Ú
deprecatedri     s   ù€ ÷&"ñ "ð&  Ðr)   c               ó$   € V ^8„  d   QhRRRRRR/# rN   rQ   )r2   s   "r!   rR   rR   9  s)   € ÷ @ ñ @ Øð@ Ø#Eð@ à3ñ@ r)   c                ó:   a aa€  ! R R\         4      oVVV 3R lpV# )aÕ  
Return a decorator that marks a property as deprecated. To deprecate a
regular callable or class, see L{deprecated}.

@type version: L{incremental.Version}
@param version: The version in which the callable will be marked as
    having been deprecated.  The decorated function will be annotated
    with this version, having it set as its C{deprecatedVersion}
    attribute.

@param replacement: what should be used in place of the callable.
    Either pass in a string, which will be inserted into the warning
    message, or a callable, which will be expanded to its full import
    path.
@type replacement: C{str} or callable

@return: A new property with deprecated setter and getter.
@rtype: C{property}

@since: 16.1.0
c                  ó&   € ] tR tRtRtR tR tRtR# )Ú/deprecatedProperty.<locals>._DeprecatedPropertyiR  zA
Extension of the build-in property to allow deprecated setters.
c                	ó4   a a€ \        S4      VV 3R  l4       pV# )c                 óL   <€ \        SP                  \        ^R7       S! V / VB # r]   )r   r3   ra   )rY   rZ   rU   Úselfs   *,€€r!   rc   Ú^deprecatedProperty.<locals>._DeprecatedProperty._deprecatedWrapper.<locals>.deprecatedFunctionX  s,   ø€ äØ×&Ñ&Ü&Ø õñ
   Ð0¨Ñ0Ð0r)   r   )rp   rU   rc   s   ff r!   Ú_deprecatedWrapperÚBdeprecatedProperty.<locals>._DeprecatedProperty._deprecatedWrapperW  s!   ù€ Ü�8‹_õ1ó ð1ð &Ð%r)   c                	óJ   € \         P                  W P                  V4      4      # ©N)ÚpropertyÚsetterrr   )rp   rU   s   &&r!   rw   Ú6deprecatedProperty.<locals>._DeprecatedProperty.setterc  s   € Ü—?‘? 4×)@Ñ)@ÀÓ)JÓKÐKr)   rQ   N)r   r   r   Ú__firstlineno__r=   rr   rw   Ú__static_attributes__rQ   r)   r!   Ú_DeprecatedPropertyrm   R  s   † ñ	ò
	&ö	Lr)   r{   c                óª   <a a€ \        S SR S4      o\        S 4      V V3R l4       p\        V\        SS4      4       SVn        S! V4      pSVn        V# )Nc                 ó8   <€ \        S\        ^R7       S! V / VB # r]   r`   rb   s   *,€€r!   rc   ÚLdeprecatedProperty.<locals>.deprecationDecorator.<locals>.deprecatedFunctionk  re   r)   )r7   r   rL   r.   rf   r3   )rU   rc   Úresultr3   r{   r'   r,   s   f  @€€€r!   rg   Ú0deprecatedProperty.<locals>.deprecationDecoratorf  sh   ú€ Ü3Ø�g˜t [ó
ˆô 
ˆx‹õ	-ó 
ð	-ô 	ØÔ 8¸À+Ó Nô	
ð 07ÐÔ,á$Ð%7Ó8ˆØ,ˆÔØˆr)   )rv   )r,   r'   rg   r{   s   ff @r!   ÚdeprecatedPropertyr�   9  s   ú€ ô2Lœhô L÷(ð&  Ðr)   c                 ó   € \         # )zJ
Return the warning method currently used to record deprecation warnings.
©r   rQ   r)   r!   ÚgetWarningMethodr„   |  s	   € ô €Kr)   c                ó
   € V s R# )z˜
Set the warning method to use to record deprecation warnings.

The callable should take message, category and stacklevel. The return
value is ignored.
Nrƒ   )Ú	newMethods   &r!   ÚsetWarningMethodr‡   ƒ  s	   € ð ‚Dr)   c                  ó,   € ] tR tRtRtR tR tR tRtR# )Ú_InternalStateiŽ  zÞ
An L{_InternalState} is a helper object for a L{_ModuleProxy}, so that it
can easily access its own attributes, bypassing its logic for delegating to
another object that it's proxying for.

@ivar proxy: a L{_ModuleProxy}
c                	ó4   € \         P                  V R V4       R# )ÚproxyN)ÚobjectÚ__setattr__)rp   r‹   s   &&r!   Ú__init__Ú_InternalState.__init__—  s   € Ü×Ñ˜4 ¨%Ö0r)   c                	óV   € \         P                  \         P                  V R 4      V4      # ©r‹   )rŒ   Ú__getattribute__)rp   r   s   &&r!   r’   Ú_InternalState.__getattribute__š  s"   € Ü×&Ñ&¤v×'>Ñ'>¸tÀWÓ'MÈtÓTÐTr)   c                	óV   € \         P                  \         P                  V R 4      W4      # r‘   )rŒ   r�   r’   )rp   r   Úvalues   &&&r!   r�   Ú_InternalState.__setattr__�  s"   € Ü×!Ñ!¤&×"9Ñ"9¸$ÀÓ"HÈ$ÓVÐVr)   rQ   N)	r   r   r   ry   r=   rŽ   r’   r�   rz   rQ   r)   r!   r‰   r‰   Ž  s   † ñò1òUöWr)   r‰   c                  ó8   € ] tR tRtRtR tR R ltR tR tRt	R	# )
Ú_ModuleProxyi¡  aX  
Python module wrapper to hook module-level attribute access.

Access to deprecated attributes first checks
L{_ModuleProxy._deprecatedAttributes}, if the attribute does not appear
there then access falls through to L{_ModuleProxy._module}, the wrapped
module object.

@ivar _module: Module on which to hook attribute access.
@type _module: C{module}

@ivar _deprecatedAttributes: Mapping of attribute names to objects that
    retrieve the module attribute's original value.
@type _deprecatedAttributes: C{dict} mapping C{str} to
    L{_DeprecatedAttribute}

@ivar _lastWasPath: Heuristic guess as to whether warnings about this
    package should be ignored for the next call.  If the last attribute
    access of this module was a C{getattr} of C{__path__}, we will assume
    that it was the import system doing it and we won't emit a warning for
    the next access, even if it is to a deprecated attribute.  The CPython
    import system always tries to access C{__path__}, then the attribute
    itself, then the attribute itself again, in both successful and failed
    cases.
@type _lastWasPath: C{bool}
c                	óD   € \        V 4      pWn        / Vn        R Vn        R# )FN)r‰   Ú_moduleÚ_deprecatedAttributesÚ_lastWasPath)rp   ÚmoduleÚstates   && r!   rŽ   Ú_ModuleProxy.__init__½  s!   € Ü˜tÓ$ˆØŒØ&(ˆÔ#Ø"ˆÖr)   c               ó   € V ^8„  d   QhRR/# )rO   rP   ÚstrrQ   )r2   s   "r!   rR   Ú_ModuleProxy.__annotate__Ã  s   € ÷ Cñ C˜#ñ Cr)   c                óf   € \        V 4      pR\        V 4      P                   RVP                  : R2# )zi
Get a string containing the type of the module proxy and a
representation of the wrapped module object.
Ú<z module=Ú>)r‰   Útyper   rš   )rp   rž   s   & r!   Ú__repr__Ú_ModuleProxy.__repr__Ã  s3   € ô
 ˜tÓ$ˆØ”4˜“:×&Ñ&Ð' x°·±Ñ/@ÀÐBÐBr)   c                óV   € \        V 4      pRVn        \        VP                  W4       R# )z0
Set an attribute on the wrapped module object.
FN)r‰   rœ   Úsetattrrš   )rp   r   r•   rž   s   &&& r!   r�   Ú_ModuleProxy.__setattr__Ë  s$   € ô ˜tÓ$ˆØ"ˆÔÜ�—‘˜tÖ+r)   c                ó   € \        V 4      pVP                  '       d   RpMVP                  P                  V4      pVe   VP                  4       pM\	        VP
                  V4      pVR8X  d
   RVn        V# RVn        V# )a  
Get an attribute from the module object, possibly emitting a warning.

If the specified name has been deprecated, then a warning is issued.
(Unless certain obscure conditions are met; see
L{_ModuleProxy._lastWasPath} for more information about what might quash
such a warning.)
NÚ__path__TF)r‰   rœ   r›   ÚgetÚgetattrrš   )rp   r   rž   ÚdeprecatedAttributer•   s   &&   r!   r’   Ú_ModuleProxy.__getattribute__Ó  s…   € ô ˜tÓ$ˆØ××ÐØ"&Ñà"'×"=Ñ"=×"AÑ"AÀ$Ó"GÐàÒ*ð (×+Ñ+Ó-‰Eô ˜EŸM™M¨4Ó0ˆEØ�:ÔØ!%ˆEÔð ˆð "'ˆEÔØˆr)   rQ   N)
r   r   r   ry   r=   rŽ   r§   r�   r’   rz   rQ   r)   r!   r˜   r˜   ¡  s   † ñò6#õCò,ör)   r˜   c                  ó&   € ] tR tRtRtR tR tRtR# )Ú_DeprecatedAttributeiñ  a  
Wrapper for deprecated attributes.

This is intended to be used by L{_ModuleProxy}. Calling
L{_DeprecatedAttribute.get} will issue a warning and retrieve the
underlying attribute's value.

@type module: C{module}
@ivar module: The original module instance containing this attribute

@type fqpn: C{str}
@ivar fqpn: Fully qualified Python name for the deprecated attribute

@type version: L{incremental.Version}
@ivar version: Version that the attribute was deprecated in

@type message: C{str}
@ivar message: Deprecation message
c                ót   € Wn         W n        VP                  R,           V,           V n        W0n        W@n        R# )z'
Initialise a deprecated name wrapper.
r   N)r�   r   r0   r,   Úmessage)rp   r�   r   r,   rµ   s   &&&&&r!   rŽ   Ú_DeprecatedAttribute.__init__  s-   € ð ŒØŒØ—O‘O cÕ)¨DÕ0ˆŒ	ØŒØŽr)   c                óä   € \        V P                  V P                  4      p\        V P                  V P
                  \        R,           V P                  ,           4      p\        V\        ^R7       V# )zE
Get the underlying attribute value and issue a deprecation warning.
z: r^   )
r¯   r�   r   r4   r0   r,   r1   rµ   r   ra   )rp   r   rµ   s   &  r!   r®   Ú_DeprecatedAttribute.get  sT   € ô ˜Ÿ™ d§m¡mÓ4ˆÜ.Ø�I‰I�t—|‘|Ô%?À$Õ%FÈÏÉÕ%Uó
ˆô 	ˆWÔ(°QÕ7Øˆr)   )r   r0   rµ   r�   r,   N)r   r   r   ry   r=   rŽ   r®   rz   rQ   r)   r!   r³   r³   ñ  s   † ñò(ör)   r³   c                ó~   € \         P                  V R4      p\        WAW#4      p\         P                  V R4      pWVV&   R# )al  
Mark a module-level attribute as being deprecated.

@type proxy: L{_ModuleProxy}
@param proxy: The module proxy instance proxying the deprecated attributes

@type name: C{str}
@param name: Attribute name

@type version: L{incremental.Version}
@param version: Version that the attribute was deprecated in

@type message: C{str}
@param message: Deprecation message
rš   r›   N)rŒ   r’   r³   )r‹   r   r,   rµ   rš   Úattrr›   s   &&&&   r!   Ú_deprecateAttributer»      s@   € ô  ×%Ñ% e¨YÓ7€GÜ ¨wÓ@€Dô #×3Ñ3°EÐ;RÓSÐØ"&˜$Ór)   c                óÐ   € \         P                  V,          p\        V\        4      '       g-   \	        \
        \        V4      4      pV\         P                  V&   \        WCW4       R# )a  
Declare a module-level attribute as being deprecated.

@type version: L{incremental.Version}
@param version: Version that the attribute was deprecated in

@type message: C{str}
@param message: Deprecation message

@type moduleName: C{str}
@param moduleName: Fully-qualified Python name of the module containing
    the deprecated attribute; if called from the same module as the
    attributes are being deprecated in, using the C{__name__} global can
    be helpful

@type name: C{str}
@param name: Attribute name to deprecate
N)ÚsysÚmodulesÚ
isinstancer˜   r   r   r»   )r,   rµ   r    r   r�   s   &&&& r!   ÚdeprecatedModuleAttributerÀ   8  sH   € ô& �[‰[˜Õ$€FÜ�fœl×+Ò+Ü”j¤,¨vÓ"6Ó7ˆØ"(Œ�‰�JÑä˜ gÖ7r)   c                ó*  € \         P                  V P                  ,          p\        V\        \
        P                  ! V4      \        R \        V P                  4       4       4      VP                  V P                  P                  R/ 4      RR7       R# )a»  
Issue a warning string, identifying C{offender} as the responsible code.

This function is used to deprecate some behavior of a function.  It differs
from L{warnings.warn} in that it is not limited to deprecating the behavior
of a function currently on the call stack.

@param offender: The function that is being deprecated.

@param warningString: The string that should be emitted by this warning.
@type warningString: C{str}

@since: 11.0
c              3  ó6   "  € T F  w  rVf   K  Vx € K  	  R # 5iru   rQ   )Ú.0Ú_Ú
lineNumbers   &  r!   Ú	<genexpr>Ú$warnAboutFunction.<locals>.<genexpr>l  s   é € ð 
á!B‘�Ø÷ ŠJÛ!Bùs   ‚�
Ú__warningregistry__N)ÚcategoryÚfilenameÚlinenor�   ÚregistryÚmodule_globals)r½   r¾   r   r   ra   r   Ú
getabsfileÚmaxr   Ú__code__r   Ú__globals__Ú
setdefault)Úoffenderr3   ÚoffenderModules   && r!   ÚwarnAboutFunctionrÕ   S  sy   € ô( —[‘[ ×!4Ñ!4Õ5€NÜØÜ#Ü×#Ò# NÓ3Üñ 
ä!/°×0AÑ0AÔ!Bó
ó 
ð
 ×&Ñ&Ø×%Ñ%×0Ñ0Ð1FÈÓKØ÷r)   c                ó  € / p\        V P                  4      \        V4      ,
          pV P                  e   / ;qSV P                  &   V^ 8  d>   V P                  f   \	        R4      hV\        V P                  4      R W0P                  &   \        V P                  V4       F	  w  rgWsV&   K  	  VP                  4        FJ  w  rgW`P                  9   d   Wc9   d   \	        R4      hWsV&   K,  V P                  e   VXV&   KA  \	        R4      h	  V# )ax  
Take an I{inspect.ArgSpec}, a tuple of positional arguments, and a dict of
keyword arguments, and return a mapping of arguments that were actually
passed to their passed values.

@param argspec: The argument specification for the function to inspect.
@type argspec: I{inspect.ArgSpec}

@param positional: The positional arguments that were passed.
@type positional: L{tuple}

@param keyword: The keyword arguments that were passed.
@type keyword: L{dict}

@return: A dictionary mapping argument names (those declared in C{argspec})
    to values that were passed explicitly by the user.
@rtype: L{dict} mapping L{str} to L{object}
NúToo many arguments.úAlready passed.úno such param)r?   rY   ÚkeywordsÚvarargsÚ	TypeErrorÚzipÚitems)ÚargspecÚ
positionalÚkeywordr   ÚunpassedrZ   r   r•   s   &&&     r!   Ú_passedArgSpecrã   w  sò   € ð& !#€FÜ�7—<‘<Ó ¤3 z£?Õ2€HØ×ÑÒ#Ø,.Ð.ˆ˜×(Ñ(Ñ)Ø�!„|Ø�?‰?Ò"ÜÐ1Ó2Ð2à&0´°W·\±\Ó1BÐ1DÐ&EˆF—?‘?Ñ#Ü˜7Ÿ<™<¨Ö4‰ˆØˆt‹ñ 5à—}‘}–‰ˆØ—<‘<ÔØŒ~ÜÐ 1Ó2Ð2Ø �4‹LØ×ÑÒ)Ø ˆF�4‹Lä˜OÓ,Ð,ñ 'ð €Mr)   c                óX  € / pRp^ p\        V P                  P                  4       4       EF  w  pw  rxVP                  \        P
                  P                  8X  d!   WR W7&   \        W7,          4      ^,           pKR  VP                  \        P
                  P                  8X  d	   / ;qCV&   Kƒ  VP                  \        P
                  P                  \        P
                  P                  39   d(   V\        V4      8  d   W,          W7&   V^,          pKë  Kí  VP                  \        P
                  P                  8X  dR   Wr9  dI   VP                  \        P
                  P                  8X  d   \        RV 24      hVP                  W7&   EKd  EKg  \        RV RVP                   24      h	  \        V4      V8”  d   \        R4      hVP                  4        FM  w  ryWpP                  P                  4       9   d   Ws9   d   \        R4      hW“V&   K:  Ve   W”V&   KD  \        R4      h	  V# )at  
Take an L{inspect.Signature}, a tuple of positional arguments, and a dict of
keyword arguments, and return a mapping of arguments that were actually
passed to their passed values.

@param signature: The signature of the function to inspect.
@type signature: L{inspect.Signature}

@param positional: The positional arguments that were passed.
@type positional: L{tuple}

@param keyword: The keyword arguments that were passed.
@type keyword: L{dict}

@return: A dictionary mapping argument names (those declared in
    C{signature}) to values that were passed explicitly by the user.
@rtype: L{dict} mapping L{str} to L{object}
Nzmissing keyword arg Ú'z' parameter is invalid kind: r×   rØ   rÙ   )Ú	enumerateÚ
parametersrÞ   Úkindr   Ú	ParameterÚVAR_POSITIONALr?   ÚVAR_KEYWORDÚPOSITIONAL_OR_KEYWORDÚPOSITIONAL_ONLYÚKEYWORD_ONLYÚdefaultÚemptyrÜ   Úkeys)
Ú	signaturerà   rá   r   rZ   ÚnumPositionalÚnr   Úparamr•   s
   &&&       r!   Ú_passedSignaturerö   ¡  sØ  € ð& €FØ€FØ€MÜ% i×&:Ñ&:×&@Ñ&@Ó&B×CÑˆ‰=ˆDØ�:‰:œ×*Ñ*×9Ñ9Ô9à% b˜>ˆF‰LÜ ¥Ó-°Õ1ŠMØ�Z‰Zœ7×,Ñ,×8Ñ8Ô8à$&Ð&ˆF˜D“\Ø�Z‰ZÜ×Ñ×3Ñ3Ü×Ñ×-Ñ-ð
ô 
ð ”3�z“?Ô"Ø)�}�‘Ø Õ"’ñ #ð �Z‰Zœ7×,Ñ,×9Ñ9Ô9ØÔ"Ø—=‘=¤G×$5Ñ$5×$;Ñ$;Ô;Ü#Ð&:¸4¸&Ð$AÓBÐBà#(§=¡=�F”Lò	 #ô ˜a ˜vÐ%BÀ5Ç:Á:À,ÐOÓPÐPñ- Dô0 ˆ:ƒ˜Ô&ÜÐ-Ó.Ð.Ø—}‘}–‰ˆØ×'Ñ'×,Ñ,Ó.Ô.ØŒ~ÜÐ 1Ó2Ð2Ø �4‹LØÒØ �4‹Lä˜OÓ,Ð,ñ 'ð €Mr)   c                ó   a € V 3R lpV# )ak  
Decorator which causes its decoratee to raise a L{TypeError} if two of the
given arguments are passed at the same time.

@param argumentPairs: pairs of argument identifiers, each pair indicating
    an argument that may not be passed in conjunction with another.
@type argumentPairs: sequence of 2-sequences of L{str}

@return: A decorator, used like so::

        @_mutuallyExclusiveArguments([["tweedledum", "tweedledee"]])
        def function(tweedledum=1, tweedledee=2):
            "Don't pass tweedledum and tweedledee at the same time."

@rtype: 1-argument callable taking a callable and returning a callable.
c                ót   <a aa€ \         P                  ! S 4      o\        o\        S 4      VVVV 3R  l4       pV# )c                 óš   <€ S! SW4      pS F4  w  r4W29   g   K  WB9   g   K  \        R V: RV: R\        S4      : R24      h	  S! V / VB # )úThe z and z arguments to z are mutually exclusive.)rÜ   r"   )	rY   rZ   Ú	argumentsÚthisÚthatÚ_passedÚargumentPairsÚspecÚwrappees	   *,   €€€€r!   ÚwrappedÚ=_mutuallyExclusiveArguments.<locals>.wrapper.<locals>.wrappedó  sX   ø€ á  dÓ3ˆIÛ+‘
�ØÖ$¨Ö):Ý#ã£Ô':¸7Ö'CðEóð ñ ,ñ ˜DÐ+ FÑ+Ð+r)   )r   rò   rö   r   )r  r  rþ   r   rÿ   s   f @@€r!   ÚwrapperÚ,_mutuallyExclusiveArguments.<locals>.wrapperï  s5   û€ Ü× Ò  Ó)ˆÜ"ˆä	ˆw‹÷	,ó 
ð	,ð ˆr)   rQ   )rÿ   r  s   f r!   Ú_mutuallyExclusiveArgumentsr  Ý  s   ø€ õ$ð" €Nr)   Ú_Tc.)Úboundc               ó(   € V ^8„  d   QhRRRRRRRR/# )	rO   r,   r   r   r¡   r'   zOptional[str]rP   zCallable[[_Tc], _Tc]rQ   )r2   s   "r!   rR   rR     s,   € ÷ =ñ =Øð=Øð=Ø.;ð=àñ=r)   c                ó"   a aa€ R VVV 3R llpV# )a?  
Return a decorator that marks a keyword parameter of a callable
as deprecated. A warning will be emitted if a caller supplies
a value for the parameter, whether the caller uses a keyword or
positional syntax.

@type version: L{incremental.Version}
@param version: The version in which the parameter will be marked as
    having been deprecated.

@type name: L{str}
@param name: The name of the deprecated parameter.

@type replacement: L{str}
@param replacement: Optional text indicating what should be used in
    place of the deprecated parameter.

@since: Twisted 21.2.0
c               ó    € V ^8„  d   QhRRRR/# )rO   r  r  rP   rQ   )r2   s   "r!   rR   Ú0deprecatedKeywordParameter.<locals>.__annotate__  s   € ÷ $ñ $˜ð $ ñ $r)   c                ó.  <a aa€ \        R S: R\        S 4       2S	SR7      oRP                  S\        S	4      4      pS'       d   VR,           \	        S4      ,           pVR,          p\
        P                  ! S 4      P                  pSV9   dU   VS,          P                  \
        P                  P                  8X  d%   \        V4      P                  S4      oVVVV 3R lpMVVV 3R lp\        \        \        S 4      ! V4      4      p\!        WA4       V# )rú   z parameter to r&   z'The {!r} parameter was deprecated in {}r+   r   c                 óf   <€ \        V 4      S8”  g   SV9   d   \        S\        ^R7       S! V / VB # r]   )r?   r   ra   )rY   rZ   r   ÚparameterIndexr3   r  s   *,€€€€r!   ÚcheckDeprecatedParameterÚMdeprecatedKeywordParameter.<locals>.wrapper.<locals>.checkDeprecatedParameter3  s2   ø€ Ü�t“9˜~Ô-°¸´Ü˜Ô(:ÀqÕIÙ Ð/¨Ñ/Ð/r)   c                 óF   <€ SV9   d   \        S\        ^R7       S! V / VB # r]   r`   )rY   rZ   r   r3   r  s   *,€€€r!   r  r  :  s'   ø€ Ø˜6”>Ü˜Ô(:ÀqÕIÙ Ð/¨Ñ/Ð/r)   )r4   r"   r2   r   r(   r   rò   rç   rè   ré   rì   ÚlistÚindexr   r  r   rL   )
r  r-   Úparamsr  Ú	decoratedr  r3   r   r'   r,   s
   f    @@€€€r!   r  Ú+deprecatedKeywordParameter.<locals>.wrapper  sí   û€ Ü4Ø�4‘(˜.Ô)<¸WÓ)EÐ(FÐGØØ#ô
ˆð 8×>Ñ>ØÜ˜WÓ%ó
ˆ÷ Ø˜•*Ô4°[ÓAÕAˆCØˆs�
ˆä×"Ò" 7Ó+×6Ñ6ˆà�FŒNØ�t•×!Ñ!¤W×%6Ñ%6×%LÑ%LÔLä! &›\×/Ñ/°Ó5ˆN÷0ñ 0÷0ô
 œœe GœnÐ-EÓFÓGˆ	Ü˜9Ô*ØÐr)   rQ   )r,   r   r'   r  s   fff r!   ÚdeprecatedKeywordParameterr    s   ú€ ÷.$ò $ðL €Nr)   )ri   r�   r7   r„   r‡   rÀ   r  ru   )NN)5r=   Ú
__future__r   Ú__all__r   r½   Údisr   Ú	functoolsr   Útypesr   Útypingr   r   r	   r
   r   r   Úwarningsr   r   Úincrementalr   r   r   r   r   r1   r"   r   r   r   r(   r.   r4   r7   rL   ri   r�   r„   r‡   r‰   r˜   r³   r»   rÀ   rÕ   rã   rö   r  r  r  rQ   r)   r!   Ú<module>r!     s
  ðñ
LõZ #ò€ó Û 
Ý Ý Ý ß ?× ?ß (ç 1Ý áˆtƒ_€ÙˆTƒ]€àEÐ òð, ":Ð Ô Ø3Ð Ô Ø#7Ð Ô  ò/ôô( ôFò<5÷:& ÷R@ òFò÷Wñ W÷&Mñ M÷`,ñ ,ò^'ò08ò6!òH'òT9òx#ñL ˆe˜8 C¨ HÕ-Ô.€÷=ñ =r)   