Ë
    ojâd  ã                   ó€  — d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZmZmZ ddlmZ  G d	„ d
e
j(                  «      Z G d„ de«      Z G d„ de«      Z ee«       G d„ de
j0                  «      «       Z ee«       G d„ de
j0                  «      «       Z G d„ de
j(                  «      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z  G d„ d e«      Z! eee e!«       G d!„ d"e
j0                  «      «       Z" ee«       G d#„ d$«      «       Z# G d%„ d&«      Z$ G d'„ d(ejJ                  e$«      Z& G d)„ d*ejJ                  «      Z' G d+„ d,e«      Z( ee(«       G d-„ d.e
j0                  «      «       Z) ee(«       G d/„ d0e
j0                  «      «       Z* G d1„ d2«      Z+ G d3„ d4e
j(                  «      Z, ee(«       G d5„ d6e
j0                  «      «       Z- G d7„ d8e«      Z. G d9„ d:e«      Z/ ee.«       G d;„ d<«      «       Z0e G d=„ d>«      «       Z1 G d?„ d@e$ejJ                  «      Z2 G dA„ dBe$ejJ                  «      Z3 G dC„ dDe«      Z4 G dE„ dFe4«      Z5 ee4«       G dG„ dH«      «       Z6 ee5«       G dI„ dJ«      «       Z7 G dK„ dLe«      Z8 G dM„ dN«      Z9 G dO„ dPejJ                  «      Z:yQ)Rz0
Test cases for Twisted component architecture.
é    )Úwraps)Ú	AttributeÚ	InterfaceÚimplementer)ÚAdapterRegistry)Ú
components)ÚcmpÚ
comparable)Ú_addHookÚ_removeHookÚproxyForInterface)Úunittestc                   ó   — e Zd ZdZd„ Zy)ÚCompor   c                 óB   — | j                   dz   | _         | j                   S ©Né   ©Únum©Úselfs    úE/usr/lib/python3/dist-packages/twisted/python/test/test_components.pyÚincz	Compo.inc   s   € Ø—8‘8˜a‘<ˆŒØ�x‰xˆó    N)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s   „ Ø
€Cór   r   c                   ó   — e Zd Zd„ Zy)ÚIAdeptc                  ó   — t        «       ‚©N)ÚNotImplementedErrorr   r   r   ÚadaptorFunczIAdept.adaptorFunc   s   € Ü!Ó#Ð#r   N)r   r   r   r$   r   r   r   r    r       s   „ ó$r   r    c                   ó   — e Zd Zd„ Zy)ÚIElapsedc                   ó   — y)z
        1!
        Nr   r   r   r   ÚelapsedFunczIElapsed.elapsedFunc#   ó   � r   N©r   r   r   r(   r   r   r   r&   r&   "   s   „ ór   r&   c                   ó   — e Zd Zd„ Zd„ Zy)ÚAdeptc                 ó    — || _         d| _        y ©Nr   ©Úoriginalr   ©r   Úorigs     r   Ú__init__zAdept.__init__+   s   € ØˆŒØˆ�r   c                 óv   — | j                   dz   | _         | j                   | j                  j                  «       fS r   )r   r0   r   r   s    r   r$   zAdept.adaptorFunc/   s-   € Ø—8‘8˜a‘<ˆŒØ�x‰x˜Ÿ™×*Ñ*Ó,Ð,Ð,r   N)r   r   r   r3   r$   r   r   r   r,   r,   )   s   „ òó-r   r,   c                   ó   — e Zd Zd„ Zy)ÚElapsedc                  ó   — yr   r   r   s    r   r(   zElapsed.elapsedFunc6   s   € Ør   Nr*   r   r   r   r6   r6   4   s   „ ór   r6   c                   ó   — e Zd Zy)ÚACompN©r   r   r   r   r   r   r9   r9   :   ó   „ Ør   r9   c                   ó   — e Zd Zy)ÚBCompNr:   r   r   r   r=   r=   >   r;   r   r=   c                   ó   — e Zd Zy)ÚCCompNr:   r   r   r   r?   r?   B   r;   r   r?   c                   ó   — e Zd Zy)ÚITestNr:   r   r   r   rA   rA   F   r;   r   rA   c                   ó   — e Zd Zy)ÚITest2Nr:   r   r   r   rC   rC   J   r;   r   rC   c                   ó   — e Zd Zy)ÚITest3Nr:   r   r   r   rE   rE   N   r;   r   rE   c                   ó   — e Zd Zy)ÚITest4Nr:   r   r   r   rG   rG   R   r;   r   rG   c                   ó   — e Zd Zd„ Zy)ÚTestc                  ó   — y r"   r   r1   s     r   r3   zTest.__init__X   ó   € Ør   N©r   r   r   r3   r   r   r   rI   rI   V   s   „ ór   rI   c                   ó   — e Zd ZdZd„ Zy)ÚTest2r   c                  ó   — y r"   r   r1   s     r   r3   zTest2.__init__`   rK   r   N)r   r   r   ÚtemporaryAdapterr3   r   r   r   rN   rN   \   s   „ àÐór   rN   c                   ó   — e Zd ZdZd„ Zy)ÚRegistryUsingMixinzH
    Mixin for test cases which modify the global registry somehow.
    c                 óˆ   — t        «       }| j                  t        d|«       t        |«      }| j	                  t
        |«       y)z‹
        Configure L{twisted.python.components.registerAdapter} to mutate an
        alternate registry to improve test isolation.
        ÚglobalRegistryN)r   Úpatchr   r   Ú
addCleanupr   )r   ÚscratchRegistryÚhooks      r   ÚsetUpzRegistryUsingMixin.setUpi   s7   € ô *Ó+ˆØ�
‰
”:Ð/°ÔAô ˜Ó(ˆØ�‰œ TÕ*r   N)r   r   r   Ú__doc__rY   r   r   r   rR   rR   d   s   „ ñó+r   rR   c                   óL   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)ÚComponentizedTestsz8
    Simple test case for caching in Componentized.
    c                 ó   — t         j                  | «       t        j                  t        t
        t        «       t        j                  t        t
        t        «       t        j                  t        t
        t        «       y r"   )
rR   rY   r   ÚregisterAdapterrI   r9   rA   rE   rN   rC   r   s    r   rY   zComponentizedTests.setUp~   sF   € Ü× Ñ  Ô&ä×"Ñ"¤4¬´Ô6Ü×"Ñ"¤4¬´Ô7Ü×"Ñ"¤5¬%´Õ8r   c                 ó’  — t        j                  t        t        t        «       t        j                  t
        t        t        «       t        «       }|j                  t        «      j                  «       dk(  sJ ‚|j                  t        «      j                  «       dk(  sJ ‚t        t	        |«      «      j                  «       dk(  sJ ‚y )N)r   r   )é   r`   r   )
r   r^   r,   r   r    r6   r&   ÚgetComponentr$   r(   ©r   Úcs     r   ÚtestComponentizedz$ComponentizedTests.testComponentized…   s�   € Ü×"Ñ"¤5¬%´Ô8Ü×"Ñ"¤7¬E´8Ô<ä‹GˆØ�~‰~œfÓ%×1Ñ1Ó3°vÒ=Ð=Ð=Ø�~‰~œfÓ%×1Ñ1Ó3°vÒ=Ð=Ð=Üœ˜q›	Ó"×.Ñ.Ó0°AÒ5Ð5Ñ5r   c                 óf  — t        «       }|j                  t        «      }|j                  t        «      }|j                  t        «      }|j                  t        «      }||u sJ ‚||usJ ‚|j	                  |«       |j                  t        «      }|j                  t        «      }||u sJ ‚||usJ ‚y r"   )r?   ra   rA   rC   ÚremoveComponent)r   rc   Úco1Úco2Úco3Úco4Úco5Úco6s           r   ÚtestInheritanceAdaptationz,ComponentizedTests.testInheritanceAdaptationŽ   s›   € Ü‹GˆØ�n‰nœUÓ#ˆØ�n‰nœUÓ#ˆØ�n‰nœVÓ$ˆØ�n‰nœVÓ$ˆØ�c‰zÐˆzØ˜#‰~Ðˆ~Ø	×Ñ˜#ÔØ�n‰nœUÓ#ˆØ�n‰nœUÓ#ˆØ�c‰zÐˆzØ˜#‰~Ð‰~r   c                 óÜ   — t        «       }|j                  t        «      }|j                  t        «      }|j                  t        «      }| j                  |«       | j                  ||«       y r"   )r?   ra   rA   rE   rG   ÚassertIsNoneÚassertIs)r   rc   rg   ri   rj   s        r   ÚtestMultiAdapterz#ComponentizedTests.testMultiAdapterœ   sO   € Ü‹GˆØ�n‰nœUÓ#ˆØ�n‰nœVÓ$ˆØ�n‰nœVÓ$ˆØ×Ñ˜#ÔØ�‰�c˜3Õr   c                 ó$  — t        j                  «       }t        «       }| j                  |j	                  t
        |«      |«       | j                  |j	                  t
        |¬«      |«       | j                  |j	                  t
        «      d«       y)z‘
        Test that a default value specified to Componentized.getComponent if
        there is no component for the requested interface.
        )ÚdefaultN)r   ÚComponentizedÚobjectrp   ra   rA   )r   Úcomponentizedrs   s      r   Útest_getComponentDefaultsz,ComponentizedTests.test_getComponentDefaults¤   sk   € ô
 #×0Ñ0Ó2ˆÜ“(ˆØ�‰�m×0Ñ0´¸Ó@À'ÔJØ�‰�m×0Ñ0´ÀÐ0ÓHÈ'ÔRØ�‰�m×0Ñ0´Ó7¸Õ>r   c                 óî   — t        j                  «       }|j                  t        t        «       |j                  t        «      }| j                  |j                  |«       | j                  |t        «       y)zŽ
        C{Componentized.setAdapter} sets a component for an interface by
        wrapping the instance with the given adapter class.
        N)	r   rt   Ú
setAdapterr    r,   ra   ÚassertEqualr0   ÚassertIsInstance©r   rv   Ú	components      r   Útest_setAdapterz"ComponentizedTests.test_setAdapter¯   sX   € ô
 #×0Ñ0Ó2ˆØ× Ñ ¤¬Ô/Ø!×.Ñ.¬vÓ6ˆ	Ø×Ñ˜×+Ñ+¨]Ô;Ø×Ñ˜i¬Õ/r   c                 óè   — t        j                  «       }|j                  t        d¬«       |j	                  t
        «      }| j                  |j                  |«       | j                  |t        «       y)z˜
        C{Componentized.setAdapter} adapts the instance by wrapping it with
        given adapter class, then stores it using C{addComponent}.
        T)ÚignoreClassN)	r   rt   Ú
addAdapterr,   ra   r    rz   r0   r{   r|   s      r   Útest_addAdapterz"ComponentizedTests.test_addAdapterº   s[   € ô
 #×0Ñ0Ó2ˆØ× Ñ ¤°DÐ Ô9Ø!×.Ñ.¬vÓ6ˆ	Ø×Ñ˜×+Ñ+¨]Ô;Ø×Ñ˜i¬Õ/r   c                 ó¶   — t        j                  «       }t        «       }|j                  t        |«       | j                  |j                  t        «      |«       y)zx
        C{Componentized.setComponent} stores the given component using the
        given interface as the key.
        N)r   rt   ru   ÚsetComponentrA   rp   ra   ©r   rv   Úobjs      r   Útest_setComponentz$ComponentizedTests.test_setComponentÅ   sB   € ô
 #×0Ñ0Ó2ˆÜ‹hˆØ×"Ñ"¤5¨#Ô.Ø�‰�m×0Ñ0´Ó7¸Õ=r   c                 óÞ   — t        j                  «       }t        «       }|j                  t        |«       |j                  t        «       | j                  |j                  t        «      «       y)zm
        C{Componentized.setComponent} removes the cached component for the
        given interface.
        N)r   rt   ru   r„   rA   ÚunsetComponentro   ra   r…   s      r   Útest_unsetComponentz&ComponentizedTests.test_unsetComponentÏ   sP   € ô
 #×0Ñ0Ó2ˆÜ‹hˆØ×"Ñ"¤5¨#Ô.Ø×$Ñ$¤UÔ+Ø×Ñ˜-×4Ñ4´UÓ;Õ<r   c                 ó¶   — t        j                  «       }|j                  t        d«       t	        |«      }| j                  d|«       | j                  d|«       y)zR
        C{ReprableComponentized} has a C{__repr__} that lists its cache.
        ÚhellorA   N)r   ÚReprableComponentizedr„   rA   ÚreprÚassertIn)r   ÚrcÚresults      r   Útest_reprableComponentizedz-ComponentizedTests.test_reprableComponentizedÚ   sE   € ô ×-Ñ-Ó/ˆØ
�‰œ˜wÔ'Ü�b“ˆØ�‰�g˜vÔ&Ø�‰�g˜vÕ&r   N)r   r   r   rZ   rY   rd   rm   rq   rw   r~   r‚   r‡   rŠ   r’   r   r   r   r\   r\   y   s9   „ ñò9ò6òò ò	?ò	0ò	0ò>ò	=ó'r   r\   c                   ó   — e Zd ZdZd„ Zy)ÚAdapterTestszTest adapters.c                 ó®   — t        «       }t        |«      }| j                  t        j                  t
        |«       | j                  t        |d «      «       y r"   )ru   r,   ÚassertRaisesr   ÚCannotAdaptrA   ro   )r   ÚoÚas      r   ÚtestAdapterGetComponentz$AdapterTests.testAdapterGetComponentè   s>   € Ü‹HˆÜ�!‹HˆØ×Ñœ*×0Ñ0´%¸Ô;Ø×Ñœ%  4›.Õ)r   N)r   r   r   rZ   rš   r   r   r   r”   r”   å   s
   „ Ùó*r   r”   c                   ó   — e Zd Zy)ÚIMetaNr:   r   r   r   rœ   rœ   ï   r;   r   rœ   c                   ó   — e Zd Zd„ Zy)Ú	MetaAdderc                 ó4   — | j                   j                  |z   S r"   r/   ©r   r   s     r   ÚaddzMetaAdder.addõ   ó   € Ø�}‰}× Ñ  3Ñ&Ð&r   N©r   r   r   r¡   r   r   r   rž   rž   ó   ó   „ ó'r   rž   c                   ó   — e Zd Zd„ Zy)ÚBackwardsAdderc                 ó4   — | j                   j                  |z
  S r"   r/   r    s     r   r¡   zBackwardsAdder.addû   r¢   r   Nr£   r   r   r   r¦   r¦   ù   r¤   r   r¦   c                   ó   — e Zd ZdZd„ Zy)Ú
MetaNumberz9
    Integer wrapper for Interface adaptation tests.
    c                 ó   — || _         y r"   r   r    s     r   r3   zMetaNumber.__init__  s	   € Øˆ�r   N)r   r   r   rZ   r3   r   r   r   r©   r©   ÿ   s   „ ñór   r©   c                   ó   — e Zd Zd„ Zy)ÚComponentNumberc                 óP   — d| _         t        j                  j                  | «       y r.   )r   r   rt   r3   r   s    r   r3   zComponentNumber.__init__	  s   € ØˆŒÜ× Ñ ×)Ñ)¨$Õ/r   NrL   r   r   r   r¬   r¬     s   „ ó0r   r¬   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚComponentAdderz0
    Adder for componentized adapter tests.
    c                 óz   — t         j                  j                  | |«       | j                  j                  | _        y r"   )r   ÚAdapterr3   r0   r   ©r   r0   s     r   r3   zComponentAdder.__init__  s)   € Ü×Ñ×#Ñ# D¨(Ô3Ø—=‘=×$Ñ$ˆ�r   c                 óD   — | xj                   |z  c_         | j                   S r"   r   r    s     r   r¡   zComponentAdder.add  s   € Ø�Š�C‰�Ø�x‰xˆr   N)r   r   r   rZ   r3   r¡   r   r   r   r¯   r¯     s   „ ñò%ór   r¯   c                   ó   — e Zd ZdZd„ Zy)ÚIAttrXz=
    Base interface for test of adapter with C{__cmp__}.
    c                   ó   — y)z!
        Return a value.
        Nr   r   r   r   ÚxzIAttrX.x"  r)   r   N©r   r   r   rZ   r·   r   r   r   rµ   rµ     ó   „ ñór   rµ   c                   ó   — e Zd ZdZd„ Zy)ÚIAttrXXz@
    Adapted interface for test of adapter with C{__cmp__}.
    c                   ó   — y)z+
        Return a tuple of values.
        Nr   r   r   r   Úxxz
IAttrXX.xx-  r)   r   N)r   r   r   rZ   r½   r   r   r   r»   r»   (  r¹   r   r»   c                   ó   — e Zd ZdZd„ Zy)ÚXcellentzG
    L{IAttrX} implementation for test of adapter with C{__cmp__}.
    c                  ó   — y)z;
        Return a value.

        @return: a value
        úx!r   r   s    r   r·   z
Xcellent.x9  s   € ð r   Nr¸   r   r   r   r¿   r¿   3  s   „ ñór   r¿   c                   ó&   — e Zd ZdZdZd„ Zd„ Zd„ Zy)ÚDoubleXAdapterz
    Adapter with __cmp__.
    é*   c                 ó   — || _         y r"   )r0   r²   s     r   r3   zDoubleXAdapter.__init__J  s	   € Ø ˆ�r   c                 ój   — | j                   j                  «       | j                   j                  «       fS r"   )r0   r·   r   s    r   r½   zDoubleXAdapter.xxM  s#   € Ø—‘—‘Ó! 4§=¡=§?¡?Ó#4Ð5Ð5r   c                 óB   — t        | j                  |j                  «      S r"   )r	   r   )r   Úothers     r   Ú__cmp__zDoubleXAdapter.__cmp__P  s   € Ü�4—8‘8˜UŸY™YÓ'Ð'r   N)r   r   r   rZ   r   r3   r½   rÉ   r   r   r   rÃ   rÃ   B  s   „ ñð €Cò!ò6ó(r   rÃ   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚMetaInterfaceTestsc                 ó´   — t        j                  t        t        t        «       t        d«      }| j                  t	        |«      j                  d«      d«       y)zS
        Registered adapters can be used to adapt classes to an interface.
        r   r`   N)r   r^   rž   r©   rœ   rz   r¡   )r   Úns     r   Ú
test_basiczMetaInterfaceTests.test_basicU  s;   € ô 	×"Ñ"¤9¬j¼%Ô@Ü�q‹MˆØ×Ñœ˜q›Ÿ™ a›¨!Õ,r   c                 ó  — t        j                  t        t        t        «       t        «       }t	        |«      j                  d«       t	        |«      j                  d«       | j                  t	        |«      j                  d«      d«       y )Nr   é   )r   r^   r¯   r¬   rœ   r¡   rz   rb   s     r   ÚtestComponentizedInteractionz/MetaInterfaceTests.testComponentizedInteraction]  sV   € Ü×"Ñ"¤>´?ÄEÔJÜÓˆÜˆa‹�‰�QŒÜˆa‹�‰�QŒØ×Ñœ˜q›Ÿ™ a›¨!Õ,r   c                 ó°   — t        j                  t        t        t        «       t	        t        «       «      }| j                  d|j                  «       «       y )N)rÁ   rÁ   )r   r^   rÃ   rµ   r»   r¿   rz   r½   )r   r½   s     r   ÚtestAdapterWithCmpz%MetaInterfaceTests.testAdapterWithCmpd  s6   € ä×"Ñ"¤>´6¼7ÔCÜ”X“ZÓ ˆØ×Ñ˜ r§u¡u£wÕ/r   N)r   r   r   rÎ   rÑ   rÓ   r   r   r   rË   rË   T  s   „ ò-ò-ó0r   rË   c                   ój   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚRegistrationTestsz)
    Tests for adapter registration.
    c                 ó–   — d„ }t        j                  ||t        «       | j                  t        j                  |t        d«      |«       y)zÌ
        Register an adapter with L{components.registerAdapter} for the given
        class or interface and verify that the adapter can be looked up with
        L{components.getAdapterFactory}.
        c                  ó   — y r"   r   ©r˜   s    r   ú<lambda>zGRegistrationTests._registerAdapterForClassOrInterface.<locals>.<lambda>v  r)   r   N©r   r^   rA   rp   ÚgetAdapterFactory©r   r0   Úadapters      r   Ú#_registerAdapterForClassOrInterfacez5RegistrationTests._registerAdapterForClassOrInterfacep  s8   € ñ !ˆÜ×"Ñ" 7¨H´eÔ<Ø�‰”j×2Ñ2°8¼UÀDÓIÈ7ÕSr   c                 ó8   —  G d„ d«      }| j                  |«      S )za
        Test that an adapter from a class can be registered and then looked
        up.
        c                   ó   — e Zd Zy)úCRegistrationTests.test_registerAdapterForClass.<locals>.TheOriginalNr:   r   r   r   ÚTheOriginalrá   €  ó   „ Ør   râ   )rÞ   ©r   râ   s     r   Útest_registerAdapterForClassz.RegistrationTests.test_registerAdapterForClassz  s   € ÷	ñ 	ð ×7Ñ7¸ÓDÐDr   c                 ó,   — | j                  t        «      S )zf
        Test that an adapter from an interface can be registered and then
        looked up.
        )rÞ   rC   r   s    r   Ú test_registerAdapterForInterfacez2RegistrationTests.test_registerAdapterForInterface…  s   € ð
 ×7Ñ7¼Ó?Ð?r   c                 óò   — d„ }d„ }t        j                  ||t        «       | j                  t        t         j                  ||t        «       | j                  t        j                  |t        d«      |«       y)z˜
        Verify that L{components.registerAdapter} raises L{ValueError} if the
        from-type/interface and to-interface pair is not unique.
        c                  ó   — y©NFr   rØ   s    r   rÙ   zHRegistrationTests._duplicateAdapterForClassOrInterface.<locals>.<lambda>‘  r)   r   c                  ó   — y©NTr   rØ   s    r   rÙ   zHRegistrationTests._duplicateAdapterForClassOrInterface.<locals>.<lambda>’  r)   r   N)r   r^   rA   r–   Ú
ValueErrorrp   rÛ   )r   r0   ÚfirstAdapterÚsecondAdapters       r   Ú$_duplicateAdapterForClassOrInterfacez6RegistrationTests._duplicateAdapterForClassOrInterfaceŒ  s^   € ñ
 'ˆÙ&ˆÜ×"Ñ" <°¼5ÔAØ×ÑÜœ
×2Ñ2°MÀ8ÌUô	
ð 	�‰”j×2Ñ2°8¼UÀDÓIÈ<ÕXr   c                 ó8   —  G d„ d«      }| j                  |«      S )zz
        Test that attempting to register a second adapter from a class
        raises the appropriate exception.
        c                   ó   — e Zd Zy)úDRegistrationTests.test_duplicateAdapterForClass.<locals>.TheOriginalNr:   r   r   r   râ   ró      rã   r   râ   )rð   rä   s     r   Útest_duplicateAdapterForClassz/RegistrationTests.test_duplicateAdapterForClassš  s   € ÷	ñ 	ð ×8Ñ8¸ÓEÐEr   c                 ó,   — | j                  t        «      S )z
        Test that attempting to register a second adapter from an interface
        raises the appropriate exception.
        )rð   rC   r   s    r   Ú!test_duplicateAdapterForInterfacez3RegistrationTests.test_duplicateAdapterForInterface¥  s   € ð
 ×8Ñ8¼Ó@Ð@r   c                 óÂ  — d„ }d„ } G d„ dt         «      }t        j                  |||«       dt        _        	 t        j                  |||«       | j	                  t        j
                  ||d«      |«       dt        _        | j                  t        t        j                  |||«       | j	                  t        j
                  ||d«      |«       y# dt        _        w xY w)zÖ
        Verify that when C{components.ALLOW_DUPLICATES} is set to C{True}, new
        adapter registrations for a particular from-type/interface and
        to-interface pair replace older registrations.
        c                  ó   — yrê   r   rØ   s    r   rÙ   zORegistrationTests._duplicateAdapterForClassOrInterfaceAllowed.<locals>.<lambda>²  r)   r   c                  ó   — yrì   r   rØ   s    r   rÙ   zORegistrationTests._duplicateAdapterForClassOrInterfaceAllowed.<locals>.<lambda>³  r)   r   c                   ó   — e Zd Zy)úSRegistrationTests._duplicateAdapterForClassOrInterfaceAllowed.<locals>.TheInterfaceNr:   r   r   r   ÚTheInterfacerû   µ  rã   r   rü   TNF)r   r   r^   ÚALLOW_DUPLICATESrp   rÛ   r–   rí   )r   r0   rî   rï   rü   s        r   Ú+_duplicateAdapterForClassOrInterfaceAllowedz=RegistrationTests._duplicateAdapterForClassOrInterfaceAllowed¬  sÇ   € ñ 'ˆÙ&ˆô	œ9ô 	ô 	×"Ñ" <°¸<ÔHØ&*Œ
Ô#ð	0Ü×&Ñ& }°hÀÔMØ�M‰MÜ×,Ñ,¨X°|ÀTÓJØôð
 +0ŒJÔ'ð 	×ÑÜœ
×2Ñ2°LÀ(ÈLô	
ð 	�‰Ü×(Ñ(¨°<ÀÓFÈõ	
øð +0ŒJÕ'ús   ¹>C ÃCc                 ó8   —  G d„ d«      }| j                  |«      S )z¿
        Test that when L{components.ALLOW_DUPLICATES} is set to a true
        value, duplicate registrations from classes are allowed to override
        the original registration.
        c                   ó   — e Zd Zy)úKRegistrationTests.test_duplicateAdapterForClassAllowed.<locals>.TheOriginalNr:   r   r   r   râ   r  Ó  rã   r   râ   )rþ   rä   s     r   Ú$test_duplicateAdapterForClassAllowedz6RegistrationTests.test_duplicateAdapterForClassAllowedÌ  s   € ÷	ñ 	ð ×?Ñ?ÀÓLÐLr   c                 óB   —  G d„ dt         «      }| j                  |«      S )zÂ
        Test that when L{components.ALLOW_DUPLICATES} is set to a true
        value, duplicate registrations from interfaces are allowed to
        override the original registration.
        c                   ó   — e Zd Zy)úORegistrationTests.test_duplicateAdapterForInterfaceAllowed.<locals>.TheOriginalNr:   r   r   r   râ   r  ß  rã   r   râ   )r   rþ   rä   s     r   Ú(test_duplicateAdapterForInterfaceAllowedz:RegistrationTests.test_duplicateAdapterForInterfaceAllowedØ  s!   € ô	œ)ô 	ð ×?Ñ?ÀÓLÐLr   c                 óö   — d„ }t        j                  ||t        t        «       | j	                  t        j
                  |t        d«      |«       | j	                  t        j
                  |t        d«      |«       y)zh
        Verify that an adapter can be registered for multiple to-interfaces at a
        time.
        c                  ó   — y r"   r   rØ   s    r   rÙ   zJRegistrationTests._multipleInterfacesForClassOrInterface.<locals>.<lambda>é  r)   r   N)r   r^   rA   rC   rp   rÛ   rÜ   s      r   Ú&_multipleInterfacesForClassOrInterfacez8RegistrationTests._multipleInterfacesForClassOrInterfaceä  sW   € ñ
 !ˆÜ×"Ñ" 7¨H´e¼VÔDØ�‰”j×2Ñ2°8¼UÀDÓIÈ7ÔSØ�‰”j×2Ñ2°8¼VÀTÓJÈGÕTr   c                 ó8   —  G d„ d«      }| j                  |«      S )zi
        Test the registration of an adapter from a class to several
        interfaces at once.
        c                   ó   — e Zd Zy)úFRegistrationTests.test_multipleInterfacesForClass.<locals>.TheOriginalNr:   r   r   r   râ   r  ô  rã   r   râ   )r	  rä   s     r   Útest_multipleInterfacesForClassz1RegistrationTests.test_multipleInterfacesForClassî  s   € ÷	ñ 	ð ×:Ñ:¸;ÓGÐGr   c                 ó,   — | j                  t        «      S )zn
        Test the registration of an adapter from an interface to several
        interfaces at once.
        )r	  rE   r   s    r   Ú#test_multipleInterfacesForInterfacez5RegistrationTests.test_multipleInterfacesForInterfaceù  s   € ð
 ×:Ñ:¼6ÓBÐBr   c                 ó>  — d„ }d„ } G d„ d|«      }t        j                  ||t        «       t        j                  ||t        «       | j                  t        j                  |t        d«      |«       | j                  t        j                  |t        d«      |«       y)a   
        Verify that a new adapter can be registered for a particular
        to-interface from a subclass of a type or interface which already has an
        adapter registered to that interface and that the subclass adapter takes
        precedence over the base class adapter.
        c                  ó   — yrì   r   rØ   s    r   rÙ   zSRegistrationTests._subclassAdapterRegistrationForClassOrInterface.<locals>.<lambda>  r)   r   c                  ó   — yrê   r   rØ   s    r   rÙ   zSRegistrationTests._subclassAdapterRegistrationForClassOrInterface.<locals>.<lambda>  r)   r   c                   ó   — e Zd Zy)úVRegistrationTests._subclassAdapterRegistrationForClassOrInterface.<locals>.TheSubclassNr:   r   r   r   ÚTheSubclassr  
  rã   r   r  NrÚ   )r   r0   rî   rï   r  s        r   Ú/_subclassAdapterRegistrationForClassOrInterfacezARegistrationTests._subclassAdapterRegistrationForClassOrInterface   s}   € ñ &ˆÙ'ˆô	˜(ô 	ô 	×"Ñ" <°¼5ÔAÜ×"Ñ" =°+¼uÔEØ�‰”j×2Ñ2°8¼UÀDÓIÈ<ÔXØ�‰Ü×(Ñ(¨´e¸TÓBÀMõ	
r   c                 ó8   —  G d„ d«      }| j                  |«      S )z~
        Test that an adapter to a particular interface can be registered
        from both a class and its subclass.
        c                   ó   — e Zd Zy)úORegistrationTests.test_subclassAdapterRegistrationForClass.<locals>.TheOriginalNr:   r   r   r   râ   r    rã   r   râ   )r  rä   s     r   Ú(test_subclassAdapterRegistrationForClassz:RegistrationTests.test_subclassAdapterRegistrationForClass  s   € ÷	ñ 	ð ×CÑCÀKÓPÐPr   c                 ó,   — | j                  t        «      S )zƒ
        Test that an adapter to a particular interface can be registered
        from both an interface and its subclass.
        )r  rC   r   s    r   Ú,test_subclassAdapterRegistrationForInterfacez>RegistrationTests.test_subclassAdapterRegistrationForInterface  s   € ð
 ×CÑCÄFÓKÐKr   N)r   r   r   rZ   rÞ   rå   rç   rð   rô   rö   rþ   r  r  r	  r  r  r  r  r  r   r   r   rÕ   rÕ   k  s`   „ ñòTò	Eò@òYò	FòAò
ò@
Mò
MòUò	HòCò
ò(	QóLr   rÕ   c                   ó&   — e Zd ZdZ ed«      Zd„ Zy)ÚIProxiedInterfacez=
    An interface class for use by L{proxyForInterface}.
    z@
        An example declared attribute, which should be proxied.c                   ó   — y)z:
        A sample method which should be proxied.
        Nr   )r™   Úkws     r   ÚyayzIProxiedInterface.yay1  r)   r   N)r   r   r   rZ   r   ÚifaceAttributer!  r   r   r   r  r  '  s   „ ññ ð	Có€Nó
r   r  c                   ó   — e Zd ZdZd„ Zy)ÚIProxiedSubInterfacezS
    An interface that derives from another for use with L{proxyForInterface}.
    c                   ó   — y)zD
        A different sample method which should be proxied.
        Nr   r   r   r   ÚboozIProxiedSubInterface.boo<  r)   r   N©r   r   r   rZ   r&  r   r   r   r$  r$  7  r¹   r   r$  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚYayablez¢
    A provider of L{IProxiedInterface} which increments a counter for
    every call to C{yay}.

    @ivar yays: The number of times C{yay} has been called.
    c                 ó    — d| _         g | _        y r.   )ÚyaysÚyayArgsr   s    r   r3   zYayable.__init__M  s   € ØˆŒ	Øˆ�r   c                 ó~   — | xj                   dz  c_         | j                  j                  ||f«       | j                   S )z)
        Increment C{self.yays}.
        r   )r+  r,  Úappend©r   r™   r   s      r   r!  zYayable.yayQ  s1   € ð 	�	Š	�Q‰�	Ø�‰×Ñ˜Q ˜GÔ$Ø�y‰yÐr   N)r   r   r   rZ   r3   r!  r   r   r   r)  r)  B  s   „ ñòór   r)  c                   ó$   — e Zd ZdZdZdZd„ Zd„ Zy)ÚBooablez3
    An implementation of IProxiedSubInterface
    Fc                 ó   — d| _         y)z;
        Mark the fact that 'yay' has been called.
        TN)Úyayedr/  s      r   r!  zBooable.yaye  ó   € ð ˆ�
r   c                 ó   — d| _         y)z<
        Mark the fact that 'boo' has been called.1
        TN)Úbooedr   s    r   r&  zBooable.book  r4  r   N)r   r   r   rZ   r3  r6  r!  r&  r   r   r   r1  r1  Z  s   „ ñð €EØ€Eòór   r1  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚIMultipleMethodsz-
    An interface with multiple methods.
    c                   ó   — y)z4
        The first method. Should return 1.
        Nr   r   r   r   Ú	methodOnezIMultipleMethods.methodOnew  r)   r   c                   ó   — y)z5
        The second method. Should return 2.
        Nr   r   r   r   Ú	methodTwozIMultipleMethods.methodTwo|  r)   r   N©r   r   r   rZ   r:  r<  r   r   r   r8  r8  r  s   „ ñòó
r   r8  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚMultipleMethodImplementorz:
    A precise implementation of L{IMultipleMethods}.
    c                  ó   — y)z
        @return: 1
        r   r   r   s    r   r:  z#MultipleMethodImplementor.methodOne‡  ó   € ð r   c                  ó   — y)z
        @return: 2
        r`   r   r   s    r   r<  z#MultipleMethodImplementor.methodTwo�  rA  r   Nr=  r   r   r   r?  r?  ‚  s   „ ñòór   r?  c                   ód   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚProxyForInterfaceTestsz)
    Tests for L{proxyForInterface}.
    c                 óz   — t        «       } t        t        «      |«      }| j                  |j                  |«       y)z‹
        Proxy objects should have an C{original} attribute which refers to the
        original object passed to the constructor.
        N)ru   r   r  rp   r0   )r   r0   Úproxys      r   Útest_originalz$ProxyForInterfaceTests.test_original™  s0   € ô
 “8ˆØ4Ô!Ô"3Ó4°XÓ>ˆØ�‰�e—n‘n hÕ/r   c                 óÞ   — t        t        «      }t        «       } ||«      }|j                  «        | j	                  |j                  «       d«       | j	                  |j
                  d«       y)z–
        The class created from L{proxyForInterface} passes methods on an
        interface to the object which is passed to its constructor.
        r`   N©r   r  r)  r!  rz   r+  )r   ÚklassÚyayablerF  s       r   Útest_proxyMethodz'ProxyForInterfaceTests.test_proxyMethod¢  sR   € ô
 "Ô"3Ó4ˆÜ“)ˆÙ�g“ˆØ�	‰	ŒØ×Ñ˜Ÿ™› aÔ(Ø×Ñ˜Ÿ™ qÕ)r   c                 óº   ‡— t        t        «      Š G ˆfd„d‰«      }t        «       } ||«      }|j                  «        | j	                  d|j
                  «       y)zŠ
        Methods of the class created from L{proxyForInterface} can be used with
        the decorator-helper L{functools.wraps}.
        c                   óD   •— e Zd Z eW ° j                  «      ˆ fd„«       Zy)ú?ProxyForInterfaceTests.test_decoratedProxyMethod.<locals>.klassc                 ód   •— | j                   xj                  dz  c_        ‰j                  | «      S r   )r0   r+  r!  )r   Úbases    €r   r!  zCProxyForInterfaceTests.test_decoratedProxyMethod.<locals>.klass.yay¶  s&   ø€ à—‘×"Ò" aÑ'Õ"Ø—x‘x “~Ð%r   N)r   r   r   r   r!  )rQ  s   €r   rJ  rO  µ  s   ø„ Ù‘4—8‘8‹_ó&ó ñ&r   rJ  r`   NrI  )r   rJ  r0   rK  rQ  s       @r   Útest_decoratedProxyMethodz0ProxyForInterfaceTests.test_decoratedProxyMethod®  sK   ø€ ô
 !Ô!2Ó3ˆö	&�Dô 	&ô “9ˆÙ˜“/ˆØ�‰ŒØ×Ñ˜˜HŸM™MÕ*r   c                 óà   ‡— t        «       }t        «       |_         t        t        «      |«      Š| j                  ‰j                  |j                  «       | j                  t        ˆfd„«       y)zc
        Proxy objects should proxy declared attributes, but not other
        attributes.
        c                  ó   •— ‰ j                   S r"   )r+  )rF  s   €r   rÙ   z<ProxyForInterfaceTests.test_proxyAttribute.<locals>.<lambda>É  s   ø€ °%·*±*€ r   N)r)  ru   r"  r   r  rp   r–   ÚAttributeError©r   rK  rF  s     @r   Útest_proxyAttributez*ProxyForInterfaceTests.test_proxyAttributeÀ  sT   ø€ ô
 “)ˆÜ!'£ˆÔØ4Ô!Ô"3Ó4°WÓ=ˆØ�‰�e×*Ñ*¨G×,BÑ,BÔCØ×Ñœ.Ó*<Õ=r   c                 óœ   — t        «       } t        t        «      |«      }t        «       }||_        | j                  |j                  |«       y)zv
        The attributes that proxy objects proxy should be assignable and affect
        the original object.
        N)r)  r   r  ru   r"  rp   ©r   rK  rF  Úthingys       r   Útest_proxySetAttributez-ProxyForInterfaceTests.test_proxySetAttributeË  sA   € ô
 “)ˆØ4Ô!Ô"3Ó4°WÓ=ˆÜ“ˆØ%ˆÔØ�‰�g×,Ñ,¨fÕ5r   c                 óŠ   — t        «       }d|_         t        t        «      |«      }|`| j	                  t        |d«      «       y)zu
        The attributes that proxy objects proxy should be deletable and affect
        the original object.
        Nr"  )r)  r"  r   r  ÚassertFalseÚhasattrrV  s      r   Útest_proxyDeleteAttributez0ProxyForInterfaceTests.test_proxyDeleteAttributeÖ  sB   € ô
 “)ˆØ!%ˆÔØ4Ô!Ô"3Ó4°WÓ=ˆØÐ Ø×Ñœ Ð*:Ó;Õ<r   c                 óÂ   — t        «       } t        t        «      |«      }| j                  |j	                  «       d«       | j                  |j                  «       d«       y)z€
        [Regression test] The proxy should send its method calls to the correct
        method, not the incorrect one.
        r   r`   N)r?  r   r8  rz   r:  r<  )r   ÚmultirF  s      r   Útest_multipleMethodsz+ProxyForInterfaceTests.test_multipleMethodsá  sM   € ô
 *Ó+ˆØ3Ô!Ô"2Ó3°EÓ:ˆØ×Ñ˜Ÿ™Ó*¨AÔ.Ø×Ñ˜Ÿ™Ó*¨AÕ.r   c                 óè   —  G d„ dt        t        «      «      }t        «       } ||«      }| j                  |j                  d«       |j                  «        | j                  |j                  d«       y)zP
        It is possible to subclass the result of L{proxyForInterface}.
        c                   ó   — e Zd ZdZd„ Zy)úAProxyForInterfaceTests.test_subclassing.<locals>.SpecializedProxyzU
            A specialized proxy which can decrement the number of yays.
            c                 óB   — | j                   xj                  dz  c_        y)z?
                Decrement the number of yays.
                r   N)r0   r+  r   s    r   r&  zEProxyForInterfaceTests.test_subclassing.<locals>.SpecializedProxy.booõ  s   € ð —‘×"Ò" aÑ'Ö"r   Nr'  r   r   r   ÚSpecializedProxyre  ð  s   „ ñó(r   rg  r   éÿÿÿÿN)r   r  r)  rz   r+  r&  )r   rg  rK  Úspecials       r   Útest_subclassingz'ProxyForInterfaceTests.test_subclassingë  sY   € ô
		(Ô0Ô1BÓCô 		(ô “)ˆÙ" 7Ó+ˆØ×Ñ˜Ÿ™ qÔ)Ø�‰ŒØ×Ñ˜Ÿ™ rÕ*r   c                 óZ   — t        t        «      }| j                  |j                  d«       y)zQ
        The name of a proxy class indicates which interface it proxies.
        zA(Proxy for twisted.python.test.test_components.IProxiedInterface)N)r   r  rz   r   ©r   rF  s     r   Útest_proxyNamez%ProxyForInterfaceTests.test_proxyName  s'   € ô "Ô"3Ó4ˆØ×ÑØ�N‰NØRõ	
r   c                 ój   — t        t        «      }| j                  t        j                  |«      «       y)zO
        The resulting proxy implements the interface that it proxies.
        N)r   r  Ú
assertTrueÚimplementedByrl  s     r   Útest_implementsz&ProxyForInterfaceTests.test_implements  s'   € ô "Ô"3Ó4ˆØ�‰Ô)×7Ñ7¸Ó>Õ?r   c                 ó,  —  G d„ d«      } |«       } |«       }||_         t        j                  dd«      }| j                  |j	                  |«      |j
                  «       |j	                  d«      } ||«       | j                  |j                  «       y)a\  
        _ProxyDescriptor's __get__ method should return the appropriate
        attribute of its argument's 'original' attribute if it is invoked with
        an object.  If it is invoked with None, it should return a false
        class-method emulator instead.

        For some reason, Python's documentation recommends to define
        descriptors' __get__ methods with the 'type' parameter as optional,
        despite the fact that Python itself never actually calls the descriptor
        that way.  This is probably do to support 'foo.__get__(bar)' as an
        idiom.  Let's make sure that the behavior is correct.  Since we don't
        actually use the 'type' argument at all, this test calls it the
        idiomatic way to ensure that signature works; test_proxyInheritance
        verifies the how-Python-actually-calls-it signature.
        c                   ó   — e Zd ZdZd„ Zy)ú>ProxyForInterfaceTests.test_proxyDescriptorGet.<locals>.SampleFc                 ó   — d| _         y rì   )Úcalledr   s    r   rŒ   zDProxyForInterfaceTests.test_proxyDescriptorGet.<locals>.Sample.hello&  s	   € Ø"�•r   N)r   r   r   rv  rŒ   r   r   r   ÚSamplert  #  s   „ ØˆFó#r   rw  rŒ   r0   N)r0   r   Ú_ProxyDescriptorrz   Ú__get__rŒ   ro  rv  )r   rw  Ú	fakeProxyÚ
testObjectÚpdÚfakeClassMethods         r   Útest_proxyDescriptorGetz.ProxyForInterfaceTests.test_proxyDescriptorGet  s}   € ÷"	#ñ 	#ñ “Hˆ	Ù“Xˆ
Ø'ˆ	ÔÜ×(Ñ(¨°*Ó=ˆØ×Ñ˜Ÿ™ IÓ.°
×0@Ñ0@ÔAØŸ*™* TÓ*ˆÙ˜	Ô"Ø�‰˜
×)Ñ)Õ*r   c                 ó  ‡—  G d„ dt        t        «      «      Š G ˆfd„d‰«      }t        «       } ||«      }| j                  |j	                  dddd¬	«      d
«       | j                  |j
                  dt        dd¬	«      fg«       y)z¿
        Subclasses of the class returned from L{proxyForInterface} should be
        able to upcall methods by reference to their superclass, as any normal
        Python class can.
        c                   ó   — e Zd ZdZy)úDProxyForInterfaceTests.test_proxyInheritance.<locals>.YayableWrapperzI
            This class does not override any functionality.
            N)r   r   r   rZ   r   r   r   ÚYayableWrapperr�  9  s   „ òr   r‚  c                   ó    •— e Zd ZdZdZˆ fd„Zy)úEProxyForInterfaceTests.test_proxyInheritance.<locals>.EnhancedWrapperz@
            This class overrides the 'yay' method.
            r   c                 ó`   •— | xj                   dz  c_          ‰j                  | g|¢­i |¤Ždz   S )Nr   é   )ÚwrappedYaysr!  )r   r™   Úkr‚  s      €r   r!  zIProxyForInterfaceTests.test_proxyInheritance.<locals>.EnhancedWrapper.yayE  s6   ø€ Ø× Ò  AÑ%Õ Ø)�~×)Ñ)¨$Ð8°Ò8°aÑ8¸1Ñ<Ð<r   N)r   r   r   rZ   r‡  r!  )r‚  s   €r   ÚEnhancedWrapperr„  >  s   ø„ ñð ˆKõ=r   r‰  rÐ   é   é   é   )r·   Úyé   )rÐ   rŠ  N)r   r  r)  rz   r!  r,  Údict)r   r‰  rK  Úwrapperr‚  s       @r   Útest_proxyInheritancez,ProxyForInterfaceTests.test_proxyInheritance2  sx   ø€ ô	Ô.Ô/@ÓAô 	ö
		=˜nô 		=ô “)ˆÙ! 'Ó*ˆØ×Ñ˜Ÿ™ Q¨¨Q°!˜Ó4°aÔ8Ø×Ñ˜Ÿ™¨F´D¸1À´NÐ+CÐ*DÕEr   c                 óò   — t        t        «      }t        «       } ||«      }|j                  «        |j	                  «        | j                  |j                  «       | j                  |j                  «       y)z 
        Proxies of subinterfaces generated with proxyForInterface should allow
        access to attributes of both the child and the base interfaces.
        N)r   r$  r1  r!  r&  ro  r3  r6  )r   Ú
proxyClassÚbooablerF  s       r   Útest_interfaceInheritancez0ProxyForInterfaceTests.test_interfaceInheritanceN  sR   € ô
 'Ô';Ó<ˆ
Ü“)ˆÙ˜7Ó#ˆØ�	‰	ŒØ�	‰	ŒØ�‰˜Ÿ™Ô&Ø�‰˜Ÿ™Õ&r   c                 ó¼  — t        «       }t        «       |_         t        t        d¬«      |«      }| j                  |j                  |«       | j                  |j                  «       d«       | j                  |j                  |j                  «       t        «       }||_        | j                  |j                  |«       |`| j                  t        |d«      «       y)a  
        The original attribute name can be customized via the
        C{originalAttribute} argument of L{proxyForInterface}: the attribute
        should change, but the methods of the original object should still be
        callable, and the attributes still accessible.
        Úfoo)ÚoriginalAttributer   r"  N)r)  ru   r"  r   r  rp   r—  rz   r!  r]  r^  rY  s       r   Útest_attributeCustomizationz2ProxyForInterfaceTests.test_attributeCustomization[  s­   € ô “)ˆÜ!'£ˆÔØMÔ!Ô"3ÀuÔMÈgÓVˆØ�‰�e—i‘i Ô)ð 	×Ñ˜Ÿ™› aÔ(Ø�‰�e×*Ñ*¨G×,BÑ,BÔCÜ“ˆØ%ˆÔØ�‰�g×,Ñ,¨fÔ5ØÐ Ø×Ñœ Ð*:Ó;Õ<r   N)r   r   r   rZ   rG  rL  rR  rW  r[  r_  rb  rj  rm  rq  r~  r‘  r•  r™  r   r   r   rD  rD  ”  sP   „ ñò0ò
*ò+ò$	>ò	6ò	=ò/ò+ò,
ò@ò+ò@Fò8'ó=r   rD  N);rZ   Ú	functoolsr   Úzope.interfacer   r   r   Úzope.interface.adapterr   Útwisted.pythonr   Útwisted.python.compatr	   r
   Útwisted.python.componentsr   r   r   Útwisted.trialr   rt   r   r    r&   r±   r,   r6   r9   r=   r?   rA   rC   rE   rG   rI   rN   rR   ÚSynchronousTestCaser\   r”   rœ   rž   r¦   r©   r¬   r¯   rµ   r»   r¿   rÃ   rË   rÕ   r  r$  r)  r1  r8  r?  rD  r   r   r   ú<module>r¢     s  ðñ
õ
 ç <Ñ <Ý 2å %ß 1ß NÑ NÝ "ôˆJ×$Ñ$ô ô$ˆYô $ô
ˆyô ñ ˆVÓô-ˆJ×Ñó -ó ð-ñ ˆXÓôˆj× Ñ ó ó ðô
	ˆJ×$Ñ$ô 	ô	ˆEô 	ô	ˆEô 	ô	ˆIô 	ô	ˆYô 	ô	ˆYô 	ô	ˆYô 	ñ ˆU�F˜FÓ#ôˆ:×Ñó ó $ðñ
 ˆVÓ÷ð ó ð÷+ñ +ô*i'˜×5Ñ5Ð7Iô i'ôX*�8×/Ñ/ô *ô	ˆIô 	ñ ˆUÓô'�
×"Ñ"ó 'ó ð'ñ
 ˆUÓô'�Z×'Ñ'ó 'ó ð'÷
ñ ô0�j×.Ñ.ô 0ñ ˆUÓô�Z×'Ñ'ó ó ðôˆYô ôˆiô ñ ˆVÓ÷ð ó ðð ÷(ð (ó ð(ô"0Ð+¨X×-IÑ-Iô 0ô.yLÐ*¨H×,HÑ,Hô yLôx˜	ô ô Ð,ô ñ ÐÓ÷ð ó  ðñ. Ð!Ó"÷ð ó #ðô.�yô ÷ ñ ô$Z=˜X×9Ñ9õ Z=r   