ó
2(Vc           @   sZ  d  Z  d d l m Z d d l Z d d l m 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 Z d	 Z d
 Z e ƒ  Z d „  Z d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ e Z y d d l m Z Wn e k
 r n Xe ƒ  Z d e f d „  ƒ  YZ e Z y d d l m Z Wn e k
 rMn Xg  Z y d d l m Z Wn e k
 r{n Xd e f d „  ƒ  YZ d e e e f d „  ƒ  YZ e d d d ƒZ d e f d „  ƒ  YZ  d e  f d  „  ƒ  YZ! d d! d d" „ Z# d d d# „ Z$ d$ „  Z% d d% l& m' Z' d d& l& m( Z( d d' l	 m) Z) d d( l	 m* Z* d S()   s    Interface object implementation
iÿÿÿÿ(   t
   generatorsN(   t
   MethodType(   t   FunctionType(   t   Invalid(   t   roi   i   t   __interface_tagged_values__c         C   sG   t  j d ƒ j } | j t i  ƒ } | j d g  ƒ } | j |  ƒ t S(   Ni   t
   invariants(   t   syst	   _getframet   f_localst
   setdefaultt   TAGGED_DATAt   appendt   _decorator_non_return(   t   callR	   t   tagsR   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt	   invariant"   s
    c         C   s2   t  j d ƒ j } | j t i  ƒ } | | |  <t S(   s;   Attaches a tagged value to an interface at definition time.i   (   R   R   R	   R
   R   R   (   t   keyt   valueR	   t   tagged_values(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   taggedValue*   s    
t   Elementc           B   sM   e  Z d  d „ Z d „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z	 RS(	   t    c         C   sJ   | r+ | j  d ƒ d k r+ | } d } n  | |  _ | |  _ i  |  _ d S(   s*   Create an 'attribute' description
        t    i    N(   t   findt   Nonet   __name__t   __doc__t   _Element__tagged_values(   t   selfR   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   __init__9   s    			c         C   s   |  j  S(   s!    Returns the name of the object. (   R   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   getNameD   s    c         C   s   |  j  S(   s+    Returns the documentation for the object. (   R   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   getDocH   s    c         C   s   |  j  | S(   s*    Returns the value associated with 'tag'. (   R   (   R   t   tag(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   getTaggedValueL   s    c         C   s   |  j  j | | ƒ S(   s*    Returns the value associated with 'tag'. (   R   t   get(   R   R!   t   default(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   queryTaggedValueP   s    c         C   s   |  j  j ƒ  S(   s    Returns a list of all tags. (   R   t   keys(   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   getTaggedValueTagsT   s    c         C   s   | |  j  | <d S(   s     Associates 'value' with 'key'. N(   R   (   R   R!   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   setTaggedValueX   s    N(
   R   t
   __module__R   R   R    R"   R   R%   R'   R(   (    (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR   2   s   				t   SpecificationBasePyc           B   s)   e  Z d  „  Z d „  Z d „  Z e Z RS(   c         C   s   t  | ƒ } |  | j k S(   s2   Is the interface implemented by an object
        (   t
   providedByt   _implied(   R   t   obt   spec(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR+   ^   s    c         C   s   t  | ƒ } |  | j k S(   s•   Test whether the specification is implemented by a class or factory.

        Raise TypeError if argument is neither a class nor a callable.
        (   t   implementedByR,   (   R   t   clsR.   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR/   d   s    c         C   s   | |  j  k S(   sC   Is the interface the same as or extend the given interface
        (   R,   (   R   t	   interface(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   isOrExtendsl   s    (   R   R)   R+   R/   R2   t   __call__(    (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR*   \   s   			(   t   SpecificationBaset   InterfaceBasePyc           B   s#   e  Z d  Z e d „ Z d „  Z RS(   s:   Base class that wants to be replaced with a C base :)
    c         C   s…   t  | d d ƒ } | d k	 r@ |  j | ƒ } | d k	 r@ | Sn  |  j | ƒ } | d k	 r_ | S| t k	 ro | St d | |  ƒ ‚ d S(   s)   Adapt an object to the interface
        t   __conform__s   Could not adaptN(   t   getattrR   t   _call_conformt	   __adapt__t   _markert	   TypeError(   R   t   objt	   alternatet   conformt   adapter(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR3   ~   s    c         C   sG   |  j  | ƒ r | Sx- t D]% } | |  | ƒ } | d k	 r | Sq Wd S(   s(   Adapt an object to the reciever
        N(   R+   t   adapter_hooksR   (   R   R<   t   hookR?   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR9      s    (   R   R)   R   R:   R3   R9   (    (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR5   z   s   (   t   InterfaceBase(   R@   t   Specificationc           B   s   e  Z d  Z e j Z e j Z d d „ Z d „  Z d „  Z d „  Z	 e
 d „  e	 ƒ Z d „  Z d „  Z e d „ Z d d	 „ Z d d
 „ Z RS(   sw  Specifications

    An interface specification is used to track interface declarations
    and component registrations.

    This class is a base class for both interfaces themselves and for
    interface specifications (declarations).

    Specifications are mutable.  If you reassign their bases, their
    relations with other specifications are adjusted accordingly.
    c         C   s+   i  |  _  t j ƒ  |  _ t | ƒ |  _ d  S(   N(   R,   t   weakreft   WeakKeyDictionaryt
   dependentst   tuplet	   __bases__(   R   t   bases(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR   »   s    	c         C   s$   |  j  j | d ƒ d |  j  | <d  S(   Ni    i   (   RF   R#   (   R   t	   dependent(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt	   subscribeÀ   s    c         C   sX   |  j  j | d ƒ d } | s, |  j  | =n( | d k rH | |  j  | <n t | ƒ ‚ d  S(   Ni    i   (   RF   R#   t   KeyError(   R   RJ   t   n(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   unsubscribeÃ   s    c         C   s]   x |  j  D] } | j |  ƒ q
 W| |  j d <x | D] } | j |  ƒ q5 W|  j |  ƒ d  S(   NRH   (   RH   RN   t   __dict__RK   t   changed(   R   RI   t   b(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt
   __setBasesÌ   s    c         C   s   |  j  j d d ƒ S(   NRH   (    (   RO   R#   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   <lambda>Ú   s    c         C   sý   y
 |  `  Wn t k
 r n X|  j } | j ƒ  t |  ƒ } y  t | k r\ | j t ƒ n  Wn t k
 rp n Xt | ƒ |  _	 t g  | D] } t
 | t ƒ rŠ | ^ qŠ ƒ |  _ x | D] } d | | <q¸ Wx* t |  j j ƒ  ƒ D] } | j | ƒ qâ Wd S(   s4   We, or something we depend on, have changed
        N(    (   t   _v_attrst   AttributeErrorR,   t   clearR   t	   InterfaceR   t	   NameErrorRG   t   __sro__t
   isinstancet   InterfaceClasst   __iro__RF   R&   RP   (   R   t   originally_changedt   impliedt	   ancestorst   ancestorRJ   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyRP   Þ   s&    
	
!c         c   sS   i  } xF |  j  D]; } x2 | j ƒ  D]$ } | | k r# d | | <| Vq# q# Wq Wd S(   sD   Return an iterator for the interfaces in the specification.
        i   N(   RH   t
   interfaces(   R   t   seent   baseR1   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyRa   ÿ   s    
c         C   s    | |  j  k o | p |  | k S(   s—   Does the specification extend the given interface?

        Test whether an interface in the specification extends the
        given interface
        (   R,   (   R   R1   t   strict(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   extends
  s    c         C   s   t  j |  | ƒ S(   N(   RD   t   ref(   R   t   callback(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyRD     s    c         C   s¡   y |  j  } Wn t k
 r- i  } |  _  n X| j | ƒ } | d k r‰ x= |  j D]/ } | j | ƒ } | d k	 rS | | | <PqS qS Wn  | d k r™ | S| Sd S(   s+   Query for an attribute description
        N(   RT   RU   R#   R   R\   t   direct(   R   t   nameR$   t   attrst   attrt   iface(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR#     s    
(    N(   R   R)   R   R4   R2   R+   R   RK   RN   t   _Specification__setBasest   propertyRH   RP   Ra   t   TrueRe   R   RD   R#   (    (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyRC   ª   s   								!	R[   c           B   sû   e  Z d  Z d d d d d „ Z d „  Z d „  Z d „  Z e d „ Z	 d „  Z
 e d „ Z d „  Z e Z d	 „  Z d
 „  Z d 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 RS(   s0   Prototype (scarecrow) Interfaces Implementation.c         C   sm  | d  k r i  } n  | d  k r€ | j d ƒ } t | t ƒ rI | d =q€ y t j d ƒ j d } Wq€ t t f k
 r| q€ Xn  | |  _	 | j d ƒ } | d  k	 rÕ t | t
 ƒ sÕ | d  k rÈ | } n  | d =qÕ n  | d  k rê d } n  t j |  | | ƒ | j t d  ƒ } | d  k	 rKx- | j ƒ  D] \ } }	 |  j | |	 ƒ q(Wn  x, | D]$ }
 t |
 t ƒ sRt d ƒ ‚ qRqRWt j |  | ƒ xº t | j ƒ  ƒ D]¦ \ } } | d k rÂ| | =qn  t | t
 ƒ rò|  | _ | j sC| | _ qCqt | t ƒ rt | |  d	 | ƒ| | <q| t k r3| | =qt d
 | ƒ ‚ qW| |  _ d |  j	 |  j f |  _ d  S(   NR)   i   R   R   R   s   Expected base interfacest
   __locals__t   __qualname__Ri   s   Concrete attribute, s   %s.%s(   Rp   Rq   (   R   R#   RZ   t   strR   R   t	   f_globalsRU   RL   R)   t	   AttributeR   R   t   popR   t   itemsR(   R[   R;   RC   t   listR1   R   R   t   fromFunctionR   t   InvalidInterfacet   _InterfaceClass__attrst   __identifier__(   R   Ri   RI   Rj   R   R)   t   dt   tagged_dataR   t   valRc   Rk   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR   4  sV    	
					
	c         c   s	   |  Vd S(   sD   Return an iterator for the interfaces in the specification.
        N(    (   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyRa   w  s    c         C   s   |  j  S(   N(   RH   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   getBases|  s    c         C   s   |  | k p | j  |  ƒ S(   s   Same interface or extends?(   Re   (   R   t   other(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   isEqualOrExtendedBy  s    c         C   s_   | s |  j  j ƒ  S|  j  j ƒ  } x0 |  j D]% } | j t j | j | ƒ ƒ ƒ q, W| j ƒ  S(   s4   Return the attribute names defined by the interface.(   Rz   R&   t   copyRH   t   updatet   dictt   fromkeyst   names(   R   t   allt   rRc   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR†   ƒ  s    #c         C   s   t  |  j d t ƒ ƒ S(   NR‡   (   t   iterR†   Ro   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   __iter__  s    c         C   sp   | s |  j  j ƒ  Si  } x: |  j d d d … D]" } | j t | j | ƒ ƒ ƒ q0 W| j |  j  ƒ | j ƒ  S(   s=   Return attribute names and descriptions defined by interface.Niÿÿÿÿ(   Rz   Rv   RH   Rƒ   R„   t   namesAndDescriptions(   R   R‡   Rˆ   Rc   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR‹   ’  s     c         C   s/   |  j  | ƒ } | d k	 r | St | ƒ ‚ d S(   s4   Return the attribute description for the given name.N(   R#   R   RL   (   R   Ri   Rˆ   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   getDescriptionForŸ  s    c         C   s   |  j  | ƒ d  k	 S(   N(   R#   R   (   R   Ri   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   __contains__©  s    c         C   s   |  j  j | ƒ S(   N(   Rz   R#   (   R   Ri   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyRh   ¬  s    c         C   s   |  j  | | ƒ S(   N(   R#   (   R   Ri   R$   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   queryDescriptionFor¯  s    c         C   sÇ   x] |  j  d g  ƒ D]I } y | | ƒ Wq t k
 r[ } | d k rK ‚  q\ | j | ƒ q Xq WxK |  j D]@ } y | j | | ƒ Wqj t k
 r© | d k rª ‚  qª qj Xqj W| rÃ t | ƒ ‚ n  d S(   s&   validate object to defined invariants.R   N(   R%   R   R   R   RH   t   validateInvariants(   R   R<   t   errorsR   t   eRc   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR   ²  s    c         C   sn   y |  j  SWn\ t k
 ri |  j } |  j } | rF d | | f } n  d |  j j | f } | |  _  | SXd  S(   Ns   %s.%ss   <%s %s>(   t   _v_reprRU   R   R)   t	   __class__(   R   Ri   t   mRˆ   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   __repr__Å  s    			c         C   sE   y | |  ƒ SWn0 t  k
 r@ t j ƒ  d j d  k	 rA ‚  qA n Xd  S(   Ni   (   R;   R   t   exc_infot   tb_nextR   (   R   R>   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR8   Ñ  s    
c         C   s   |  j  S(   N(   R   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt
   __reduce__ä  s    c         C   sl   | d k r d St |  d d ƒ t |  d d ƒ f } t | d d ƒ t | d d ƒ f } | | k | | k  S(   sú  Make interfaces sortable

        TODO: It would ne nice if:

           More specific interfaces should sort before less specific ones.
           Otherwise, sort on name and module.

           But this is too complicated, and we're going to punt on it
           for now.

        For now, sort on interface and module name.

        None is treated as a pseudo interface that implies the loosest
        contact possible, no contract. For that reason, all interfaces
        sort before None.

        iÿÿÿÿR   R   R)   N(   R   R7   (   R   R€   t   n1t   n2(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   __cmpç  s
    $$c         C   sH   |  j  } d | k s! d | k r2 t j d ƒ d St |  j |  j f ƒ S(   NR)   R   s-   Hashing uninitialized InterfaceClass instancei   (   RO   t   warningst   warnt   hashR   R)   (   R   R|   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   __hash__  s
    	c         C   s   |  j  | ƒ } | d k S(   Ni    (   t   _InterfaceClass__cmp(   R   R€   t   c(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   __eq__  s    c         C   s   |  j  | ƒ } | d k S(   Ni    (   R    (   R   R€   R¡   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   __ne__  s    c         C   s   |  j  | ƒ } | d k  S(   Ni    (   R    (   R   R€   R¡   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   __lt__  s    c         C   s   |  j  | ƒ } | d k S(   Ni    (   R    (   R   R€   R¡   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   __le__  s    c         C   s   |  j  | ƒ } | d k S(   Ni    (   R    (   R   R€   R¡   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   __gt__  s    c         C   s   |  j  | ƒ } | d k S(   Ni    (   R    (   R   R€   R¡   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   __ge__!  s    (    N(   R   R)   R   R   R   Ra   R   R   t   FalseR†   RŠ   R‹   RŒ   t   __getitem__R   Rh   RŽ   R   R•   R8   R˜   R    RŸ   R¢   R£   R¤   R¥   R¦   R§   (    (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR[   ,  s4   	B																	RW   R)   s   zope.interfaceRt   c           B   s   e  Z d  Z d Z RS(   s   Attribute descriptions
    N(   R   R)   R   R   R1   (    (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyRt   (  s   t   Methodc           B   sn   e  Z d  Z d Z Z d Z Z Z d „  Z	 d „  Z
 d „  Z e e	 e
 e ƒ Z d „  Z d „  Z d „  Z RS(	   sŽ   Method interfaces

    The idea here is that you have objects that describe methods.
    This provides an opportunity for rich meta-data.
    c         C   s   |  j  d  k r i  S|  j  S(   N(   t	   _optionalR   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   _get_optionalB  s    c         C   s   | |  _  d  S(   N(   R«   (   R   t   opt(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   _set_optionalF  s    c         C   s   d  |  _ d  S(   N(   R   R«   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   _del_optionalH  s    c         O   s   t  |  j |  j ƒ ‚ d  S(   N(   t   BrokenImplementationR1   R   (   R   t   argst   kw(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyR3   L  s    c         C   s6   i |  j  d 6|  j d 6|  j d 6|  j d 6|  j d 6S(   Nt
   positionalt   requiredt   optionalt   varargst   kwargs(   R³   R´   Rµ   R¶   R·   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   getSignatureInfoO  s
    


c         C   s±   g  } xW |  j  D]L } | j | ƒ | |  j j ƒ  k r | d c d t |  j | ƒ 7<q q W|  j r€ | j d |  j ƒ n  |  j r  | j d |  j ƒ n  d d j | ƒ S(   Niÿÿÿÿt   =t   *s   **s   (%s)s   , (   R³   R   Rµ   R&   t   reprR¶   R·   t   join(   R   t   sigt   v(    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   getSignatureStringW  s    (		(    N(   R   R)   R   R³   R´   R   R«   R¶   R·   R¬   R®   R¯   Rn   Rµ   R3   R¸   R¿   (    (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyRª   4  s   
					i    c         C   sn  | p |  j  } t | |  j ƒ } t |  d d  ƒ p6 d } |  j } | j | } | j | } i  }	 | t | ƒ }
 |
 d k  r’ | |
 } d }
 n  |	 j	 t
 t | |
 | ƒ ƒ ƒ | |  | _ | |
  | _ |	 | _ | } | j t @r| | | _ | d } n	 d  | _ | j t @r(| | | _ n	 d  | _ | | _ x- |  j j ƒ  D] \ } } | j | | ƒ qJW| S(   Nt   __defaults__i    i   (    (   R   Rª   R   R7   R   t   __code__t   co_argcountt   co_varnamest   lenRƒ   R„   t   zipR³   R´   Rµ   t   co_flagst
   CO_VARARGSR¶   t   CO_VARKEYWORDSR·   R1   RO   Rv   R(   (   t   funcR1   t   imlevelRi   t   methodt   defaultst   codet   naR†   R­   t   nrt   argnoR   R   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyRx   d  s6    		 				c         C   s:   t  |  t ƒ r |  j } n |  } t | | d d d | ƒS(   NRÊ   i   Ri   (   RZ   R   t   __func__Rx   (   t   methR1   Ri   RÉ   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt
   fromMethod‘  s    c          C   sˆ   d d l  m }  d d l m } |  t | ƒ d d l m } |  t | ƒ d d l m } |  t | ƒ d d l m	 } |  t
 | ƒ d  S(   Niÿÿÿÿ(   t   classImplements(   t
   IAttribute(   t   IMethod(   t
   IInterface(   t   ISpecification(   t   zope.interface.declarationsRÔ   t   zope.interface.interfacesRÕ   Rt   RÖ   Rª   R×   R[   RØ   RC   (   RÔ   RÕ   RÖ   R×   RØ   (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   _wireš  s    (   R/   (   R+   (   Ry   (   R°   (+   R   t
   __future__R    R   t   typesR   R   Rœ   RD   t   zope.interface.exceptionsR   t   zope.interface.roR   RÇ   RÈ   R   t   objectR   R   R   R   R*   R4   t   _zope_interface_coptimizationst   ImportErrorR:   R5   RB   R@   RC   R[   RW   Rt   Rª   R   Rx   RÓ   RÛ   RÙ   R/   R+   Ry   R°   (    (    (    s<   /usr/lib/python2.7/dist-packages/zope/interface/interface.pyt   <module>   sZ   			*	"‚ú0-		