§
    ƒÛg82  ã                   ó  — d dl Z d dlmZmZ d dlmZ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 d dlmZ d d	lmZ d d
lmZ d„ Z G d„ de¦  «        Z G d„ dej        ej        ¦  «        Zej                             e¦  «         dS )é    N)ÚjitÚtypeof)ÚcgutilsÚtypesÚ	serializeÚsigutils)Ú	is_jitted)Únpydecl)ÚAbstractTemplateÚ	signature)Ú	_internal)Úarray_analysis)Úufuncbuilder)Únumpy_supportc                 óv   ‡ ‡— ddl m}  G ˆˆ fd„d|j        ¦  «        Š‰xj        ‰ j        j        z  c_        ‰S )Nr   ©Únpyimplc                   ó0   •‡ — e Zd ZdZ”Zˆˆ fd„Zd„ Zˆ xZS )ú(make_dufunc_kernel.<locals>.DUFuncKernelzÉ
        npyimpl._Kernel subclass responsible for lowering a DUFunc kernel
        (element-wise function) inside a broadcast loop (which is
        generated by npyimpl.numpy_ufunc_kernel()).
        c                 óª   •— t          ‰| ¦  «                             |||¦  «         | j                             |j        ¦  «        \  | _        | _        d S ©N)ÚsuperÚ__init__ÚdufuncÚfind_ewise_functionÚargsÚ	inner_sigÚcres)ÚselfÚcontextÚbuilderÚ	outer_sigÚDUFuncKernelÚ	__class__s       €€úK/granary/edev/quantum/lib/python3.11/site-packages/numba/np/ufunc/dufunc.pyr   z1make_dufunc_kernel.<locals>.DUFuncKernel.__init__   sN   ø€ Ý�, Ñ%Ô%×.Ò.¨w¸ÀÑKÔKÐKØ(,¬×(GÒ(GØ”ñ) ô ) Ñ%ˆDŒN˜DœI˜I˜Ió    c                 óÆ  ‡ — ‰ j         }‰ j        }ˆ fd„t          ||j        |j        ¦  «        D ¦   «         }‰ j        j        rK‰ j        j                             t          j
        t          j
        gt          |j        ¦  «        z  ¦  «        }n*‰ j        j                             |j        |j        ¦  «        }‰ j        j        j        j        }t#          j        ||‰ j        j        j        ¦  «        }|j                             d¦  «         ‰ j        j                             ‰ j        ||j        |j        |¦  «        \  }}	‰                      |	|j        |j        ¦  «        S )Nc                 óF   •— g | ]\  }}}‰                      |||¦  «        ‘ŒS © )Úcast)Ú.0ÚvalÚintyÚouttyr   s       €r%   ú
<listcomp>zEmake_dufunc_kernel.<locals>.DUFuncKernel.generate.<locals>.<listcomp>!   s?   ø€ ð :ð :ð :Ù-˜S $¨ð Ÿš 3¨¨eÑ4Ô4ð :ð :ð :r&   Úalwaysinline)r   r"   Úzipr   r   Ú
objectmoder    Ú	call_convÚget_function_typer   ÚpyobjectÚlenÚreturn_typer!   ÚblockÚfunctionÚmoduler   Úget_or_insert_functionÚfndescÚllvm_func_nameÚ
attributesÚaddÚcall_functionr*   )
r   r   ÚisigÚosigÚ	cast_argsÚ	func_typer:   Úentry_pointÚ_Úress
   `         r%   Úgeneratez1make_dufunc_kernel.<locals>.DUFuncKernel.generate   sO  ø€ Ø”>ˆDØ”>ˆDð:ð :ð :ð :å˜T 4¤9¨d¬iÑ8Ô8ð:ñ :ô :ˆIð ŒyÔ#ð 1Ø œLÔ2×DÒDÝ”N¥U¤^Ð$4µs¸4¼9±~´~Ñ$EñGô G�	�	ð !œLÔ2×DÒDØÔ$ d¤iñ1ô 1�	à”\Ô'Ô0Ô7ˆFÝ!Ô8Ø˜	Ø”	Ô Ô/ñ1ô 1ˆKð Ô"×&Ò& ~Ñ6Ô6Ð6à”\Ô+×9Ò9Ø”˜k¨4Ô+;¸T¼YØñô ‰FˆAˆsð —9’9˜S $Ô"2°DÔ4DÑEÔEÐEr&   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   rH   Ú__classcell__)r$   r#   Ú_dufuncs   @€€r%   r#   r      se   øø€ € € € € ð	ð 	ð
 ˆð	 ð 	 ð 	 ð 	 ð 	 ð 	 ð
	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fr&   r#   )Únumba.npr   Ú_KernelrI   Úufunc)rN   r   r#   s   ` @r%   Úmake_dufunc_kernelrR      s~   øø€ Ø Ð Ð Ð Ð Ð ð"Fð "Fð "Fð "Fð "Fð "Fð "Fð "F�w”ñ "Fô "Fð "FðH ÐÔ˜Wœ]Ô3Ñ3ÐÔØÐr&   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚDUFuncLowererzHCallable class responsible for lowering calls to a specific DUFunc.
    c                 ó<   — t          |¦  «        | _        g | _        d S r   )rR   ÚkernelÚlibs)r   r   s     r%   r   zDUFuncLowerer.__init__<   s   € Ý(¨Ñ0Ô0ˆŒØˆŒ	ˆ	ˆ	r&   c                 ój   — ddl m} |                     ||||| j        j        j        | j        ¦  «        S )Nr   r   )rO   r   Únumpy_ufunc_kernelrV   r   rQ   )r   r    r!   Úsigr   r   s         r%   Ú__call__zDUFuncLowerer.__call__@   sD   € Ø$Ð$Ð$Ð$Ð$Ð$Ø×)Ò)¨'°7¸CÀØ*.¬+Ô*<Ô*BØ*.¬+ñ7ô 7ð 	7r&   N)rI   rJ   rK   rL   r   r[   r)   r&   r%   rT   rT   9   s<   € € € € € ðð ðð ð ð7ð 7ð 7ð 7ð 7r&   rT   c                   óB  ‡ — e Zd ZdZ ed¦  «        Zddi fd„Zˆ fd„Zd„ Ze	d„ ¦   «         Z
d	„ Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zˆ fd„Zd„ Zdd„Zdd„Zd„ Zd„ Zdd„Zˆ xZS )ÚDUFuncz¹
    Dynamic universal function (DUFunc) intended to act like a normal
    Numpy ufunc, but capable of call-time (just-in-time) compilation
    of fast loops specialized to inputs.
    )ÚidentityÚ
_keepaliveÚninÚnoutNFc                 ó  — t          |¦  «        r|j        }t          j        ¦   «         5   t	          dd|dœ|¤Ž|¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      ||¦  «         t          j        | |¦  «         d S )NÚnpyufunc)Ú_targetÚcacher)   )r	   Úpy_funcr   Ú3_suppress_deprecation_warning_nopython_not_suppliedr   Ú_initializeÚ	functoolsÚupdate_wrapper)r   rf   r^   re   ÚtargetoptionsÚ
dispatchers         r%   r   zDUFunc.__init__Q   så   € Ý�WÑÔð 	&Ø”oˆGÝÔMÑOÔOð 	7ð 	7ð.�ð . ZØ#(ð.ð .à,ð.ð .à.5ñ7ô 7ˆJð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7ð 	×Ò˜ XÑ.Ô.Ð.ÝÔ   wÑ/Ô/Ð/Ð/Ð/s   ªAÁAÁAc                 ó@  •— t          j        |¦  «        }t          t          | ¦  «                             ||¬¦  «         |                      ¦   «          t          | ¦  «        | _        |                      ¦   «          |j	        j
        | _
        |j	        j        | _        d S )N)r^   )r   Úparse_identityr   r]   r   Ú_install_typerT   Ú	_lower_meÚ_install_cgrf   rI   rL   )r   rl   r^   r$   s      €r%   rh   zDUFunc._initialize[   s‰   ø€ ÝÔ.¨xÑ8Ô8ˆÝ�f�dÑÔ×$Ò$ Z¸(Ð$ÑCÔCÐCð 	×ÒÑÔÐÝ& tÑ,Ô,ˆŒØ×ÒÑÔÐØ"Ô*Ô3ˆŒØ!Ô)Ô1ˆŒˆˆr&   c                 óœ   — t          | j        j                             ¦   «         ¦  «        }t	          | j        | j        | j        |¬¦  «        S )ú4
        NOTE: part of ReduceMixin protocol
        )rl   r^   ÚfrozenÚsiglist)ÚlistÚ_dispatcherÚ	overloadsÚkeysÚdictr^   Ú_frozen)r   ru   s     r%   Ú_reduce_stateszDUFunc._reduce_statesf   sM   € õ �tÔ'Ô1×6Ò6Ñ8Ô8Ñ9Ô9ˆÝØÔ'Ø”]Ø”<Øð	
ñ 
ô 
ð 	
r&   c                 óÐ   — t           j                             | ¦  «        }|                     ||¦  «         |D ]}|                     |¦  «         Œ|r|                     ¦   «          |S )rs   )r   Ú_DUFuncÚ__new__rh   r?   Údisable_compile)Úclsrl   r^   rt   ru   r   rZ   s          r%   Ú_rebuildzDUFunc._rebuildr   so   € õ
 Ô ×(Ò(¨Ñ-Ô-ˆØ×Ò˜ XÑ.Ô.Ð.àð 	ð 	ˆCØ�HŠH�S‰MŒMˆMˆMØð 	#Ø× Ò Ñ"Ô"Ð"Øˆr&   c                 ó   — | S )zK
        For compatibility with the various *UFuncBuilder classes.
        r)   ©r   s    r%   Úbuild_ufunczDUFunc.build_ufunc€   s	   € ð ˆr&   c                 ó   — | j         j        S r   )rw   rk   r„   s    r%   rk   zDUFunc.targetoptions†   s   € àÔÔ-Ð-r&   c                 ó   — | j         j        S r   )rQ   r`   r„   s    r%   r`   z
DUFunc.ninŠ   s   € àŒzŒ~Ðr&   c                 ó   — | j         j        S r   )rQ   ra   r„   s    r%   ra   zDUFunc.noutŽ   s   € àŒzŒÐr&   c                 ó   — | j         j        S r   )rQ   Únargsr„   s    r%   rŠ   zDUFunc.nargs’   ó   € àŒzÔÐr&   c                 ó   — | j         j        S r   )rQ   Úntypesr„   s    r%   r�   zDUFunc.ntypes–   s   € àŒzÔ Ð r&   c                 ó   — | j         j        S r   )rQ   r   r„   s    r%   r   zDUFunc.typesš   r‹   r&   c                 ó   — | j         j        S r   )rQ   r^   r„   s    r%   r^   zDUFunc.identityž   s   € àŒzÔ"Ð"r&   c                 óR   — t          | j        j        ¦  «        dk    sJ ‚d| _        dS )zI
        Disable the compilation of new signatures at call time.
        r   TN)r6   rw   rx   r{   r„   s    r%   r€   zDUFunc.disable_compile¢   s.   € õ
 �4Ô#Ô-Ñ.Ô.°Ò2Ð2Ð2Ð2ØˆŒˆˆr&   c                 ó\   — t          j        |¦  «        \  }}|                      ||¦  «        S )z=
        Compile the DUFunc for the given signature.
        )r   Únormalize_signatureÚ_compile_for_argtys)r   rZ   r   r7   s       r%   r?   z
DUFunc.addª   s/   € õ %Ô8¸Ñ=Ô=ÑˆˆkØ×'Ò'¨¨kÑ:Ô:Ð:r&   c                 ó.  •— t           j        j        j        }|t	          |                     ¦   «         ¦  «        z   D ]A}t          t          |¦  «        d|¦  «        |ur |j        | dg|¢R i |¤Ž}|t          ur|c S ŒB t          ¦   «         j
        |i |¤ŽS )z}
        Allow any argument that has overridden __array_ufunc__ (NEP-18)
        to take control of DUFunc.__call__.
        Ú__array_ufunc__r[   )r   ÚnpÚndarrayr•   ÚtupleÚvaluesÚgetattrÚtypeÚNotImplementedr   r[   )r   r   ÚkwsÚdefaultÚargÚoutputr$   s         €r%   r[   zDUFunc.__call__±   sª   ø€ õ
  Ô"Ô*Ô:ˆà�% §
¢
¡¤Ñ-Ô-Ñ-ð 	2ð 	2ˆCÝ•t˜C‘y”yÐ"3°WÑ=Ô=ÀWÐLÐLØ,˜Ô,¨T°:ÐLÀÐLÐLÐLÈÐLÐL�Ø¥Ð/Ð/Ø!�M�M�Møà#•5‘7”7Ô# TÐ1¨SÐ1Ð1Ð1r&   c           	      óJ  — | j         j        }|r]d|v r|                     d¦  «        }||fz  }|r<t          dd                     d„ t          |¦  «        D ¦   «         ¦  «        z  ¦  «        ‚t          |¦  «        }||k    s||| j         j        z   k    sJ ‚|rJ ‚g }|d |…         D ]\}t          |¦  «        }t          |t          j        ¦  «        r|j        }nt          j        |¦  «        }|                     |¦  «         Œ]|                      t#          |¦  «        ¦  «        S )NÚoutz)unexpected keyword arguments to ufunc: %sz, c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   )Úrepr)r+   Úks     r%   ú	<genexpr>z+DUFunc._compile_for_args.<locals>.<genexpr>È   s(   è è € Ð+IÐ+I¸­D°©G¬GÐ+IÐ+IÐ+IÐ+IÐ+IÐ+Ir&   )rQ   r`   ÚpopÚ	TypeErrorÚjoinÚsortedr6   ra   r   Ú
isinstancer   ÚArrayÚdtyper   Úmap_arrayscalar_typeÚappendr“   r˜   )	r   r   r�   r`   r¢   Úargs_lenÚargtysrŸ   Úargtys	            r%   Ú_compile_for_argszDUFunc._compile_for_argsÀ   s@  € ØŒjŒnˆØð 	KØ˜ˆ|ˆ|Ø—g’g˜e‘n”n�Ø˜˜‘�Øð KÝÐ KØ"&§)¢)Ð+IÐ+I½VÀC¹[¼[Ð+IÑ+IÔ+IÑ"IÔ"Iñ!Jñ Kô Kð Kõ �t‘9”9ˆØ˜C’� X°°t´z´Ñ1FÒ%FÐ%FÐ%FÐ%FØˆˆˆØˆØ˜˜˜”:ð 	!ð 	!ˆCÝ˜3‘K”KˆEÝ˜%¥¤Ñ-Ô-ð @Øœ��õ &Ô:¸3Ñ?Ô?�Ø�MŠM˜%Ñ Ô Ð Ð Ø×'Ò'­¨f©¬Ñ6Ô6Ð6r&   c                 óò  — | j         rt          d| ›�¦  «        ‚t          |t          ¦  «        sJ ‚|€|}n ||Ž }t	          j        | j        | j        |¦  «        \  }}}t	          j        |||¦  «        }t	          j	        ||¦  «        \  }}}|  
                    t          |¦  «        |¦  «         | j                             ||j        |f¦  «         | j        j                             |j        ¦  «         |S )a/  
        Given a tuple of argument types (these should be the array
        dtypes, and not the array types themselves), compile the
        element-wise function for those inputs, generate a UFunc loop
        wrapper, and register the loop with the Numpy ufunc object for
        this DUFunc.
        zcompilation disabled for )r{   ÚRuntimeErrorr«   r˜   r   Ú_compile_element_wise_functionrw   rk   Ú_finalize_ufunc_signatureÚ!_build_element_wise_ufunc_wrapperÚ	_add_loopÚintr_   r¯   Úlibraryrp   rW   )	r   r±   r7   rZ   r   Ú
actual_sigÚ	dtypenumsÚptrÚenvs	            r%   r“   zDUFunc._compile_for_argtysß   s	  € ð Œ<ð 	HÝ�,ÀÀÐFÑGÔGÐGÝ˜&¥%Ñ(Ô(Ð(Ð(Ð(ØÐØˆCˆCà�+˜vÐ&ˆCÝ$0Ô$OØÔ˜dÔ0°#ñ%7ô %7Ñ!ˆˆf�kå!Ô;Ø�&˜+ñ'ô 'ˆ
å*ÔLØ�*ñô Ñˆ	�3˜à�Š•s˜3‘x”x Ñ+Ô+Ð+ØŒ×Ò  T¤\°3Ð7Ñ8Ô8Ð8ØŒÔ×"Ò" 4¤<Ñ0Ô0Ð0Øˆr&   c                 óÈ   — |€| j         j        j        }t          d| j        j        z   t          ft          | | j        ¬¦  «        ¦  «        }| 	                    | |¦  «         dS )a*  Constructs and installs a typing class for a DUFunc object in the
        input typing context.  If no typing context is given, then
        _install_type() installs into the typing context of the
        dispatcher object (should be same default context used by
        jit() and njit()).
        NÚDUFuncTyping_)ÚkeyÚgeneric)
rw   ÚtargetdescrÚtyping_contextr›   rQ   rI   r   rz   Ú_type_meÚinsert_user_function)r   Ú	typingctxÚ_ty_clss      r%   ro   zDUFunc._install_typeù   si   € ð ÐØÔ(Ô4ÔCˆIÝ�¨¬Ô)<Ñ<Ý(Ð*Ý ¨d¬mÐ<Ñ<Ô<ñ>ô >ˆð 	×&Ò& t¨WÑ5Ô5Ð5Ð5Ð5r&   c                 ó  — | j         rJt          j        | |¦  «        }|€dS t          |j        |j        z   ¦  «        dt          |¦  «        …         }| j        j         	                    ¦   «         D ]\  }}|j
        |k    r||fc S ŒdS )a  
        Given a tuple of element-wise argument types, find a matching
        signature in the dispatcher.

        Return a 2-tuple containing the matching signature, and
        compilation result.  Will return two None's if no matching
        signature was found.
        N)NN)r{   r   Úufunc_find_matching_loopr˜   ÚinputsÚoutputsr6   rw   rx   Úitemsr   )r   Úewise_typesÚlooprZ   r   s        r%   r   zDUFunc.find_ewise_function  s    € ð Œ<ð 	Oå Ô9¸$ÀÑLÔLˆDØˆ|Ø!�zÝ ¤¨d¬lÑ :Ñ;Ô;Ð<M½SÀÑ=MÔ=MÐ<MÔNˆKØÔ)Ô3×9Ò9Ñ;Ô;ð 	!ð 	!‰IˆC�ØŒx˜;Ò&Ð&Ø˜D�yÐ Ð Ð ð 'àˆzr&   c                 ó¾  — |rJ ‚| j         }t          j                             |||¦  «        }|\  }}}}t	          |¦  «        }	|	dk    r&t          |dt	          |¦  «         …         ¦  «        }
nt          |¦  «        }
|                      |
¦  «        \  }}|€M| j        rt          d| ›d|›�¦  «        ‚|  	                    |
¦  «         |                      |
¦  «        \  }}|€J ‚|	dk    rt          |¦  «        }nF|j        dk    r,|dk    rt          j        |j        ||¦  «        g}n|j        g}nt          d¦  «        ‚|                     |¦  «         t#          |Ž S )zì
        Implement AbstractTemplate.generic() for the typing class
        built by DUFunc._install_type().

        Return the call-site signature after either validating the
        element-wise signature or compiling for it.
        r   Nzcannot call z with types é   ztyping gufuncs (nout > 1))rQ   r
   ÚNumpy_rules_ufuncÚ_handle_inputsr6   r˜   r   r{   r¨   r“   rv   ra   r   r¬   r7   ÚNotImplementedErrorÚextendr   )r   r±   ÚkwtysrQ   Ú_handle_inputs_resultÚ
base_typesÚexplicit_outputsÚndimsÚlayoutÚexplicit_output_countrÏ   rZ   r   Úouttyss                 r%   rÆ   zDUFunc._type_me  s”  € ð ÐÐÐØ”
ˆÝ 'Ô 9× HÒ HØ�6˜5ñ!"ô !"Ðà6KÑ3ˆ
Ð$ e¨VÝ #Ð$4Ñ 5Ô 5ÐØ  1Ò$Ð$Ý 
Ð+B­SÐ1AÑ-BÔ-BÐ,BÐ+BÔ CÑDÔDˆKˆKå 
Ñ+Ô+ˆKØ×,Ò,¨[Ñ9Ô9‰	ˆˆTØˆ;ð Œ|ð 2Ý�iØ#' 4 4¨¨ð!1ñ 2ô 2ð 2à×$Ò$ [Ñ1Ô1Ð1Ø×0Ò0°Ñ=Ô=‰IˆC�Ø�?�?�?Ø  1Ò$Ð$ÝÐ*Ñ+Ô+ˆFˆFØŒZ˜1Š_ˆ_Ø�qŠyˆyÝœ+ c¤o°u¸fÑEÔEÐF��àœ/Ð*��å%Ð&AÑBÔBÐBØ�Š�fÑÔÐÝ˜&Ð!Ð!r&   c                 ó  ‡ — |€‰ j         j        j        }t          j        }t          j        }|f‰ j        j        z  |f‰ j        j        z  z   }|f‰ j        j        z  }| 	                    ˆ fd„||fD ¦   «         ¦  «         dS )a-  
        Install an implementation function for a DUFunc object in the
        given target context.  If no target context is given, then
        _install_cg() installs into the target context of the
        dispatcher object (should be same default context used by
        jit() and njit()).
        Nc                 ó$   •— g | ]}‰j         ‰|f‘ŒS r)   )rp   )r+   rZ   r   s     €r%   r/   z&DUFunc._install_cg.<locals>.<listcomp>S  s"   ø€ ÐAÐAÐA¨SˆdŒn˜d CÐ(ÐAÐAÐAr&   )
rw   rÄ   Útarget_contextr   ÚAnyr¬   rQ   r`   ra   Úinsert_func_defn)r   Ú	targetctxÚ_anyÚ_arrÚsig0Úsig1s   `     r%   rq   zDUFunc._install_cgC  s™   ø€ ð ÐØÔ(Ô4ÔCˆIÝŒyˆÝŒ{ˆàˆw˜œœÑ'¨4¨'°D´J´OÑ*CÑCˆØˆw˜œœÑ'ˆØ×"Ò"ØAÐAÐAÐA°T¸4°LÐAÑAÔAñ	Cô 	Cð 	Cð 	Cð 	Cr&   r   )rI   rJ   rK   rL   ÚsetÚ_DUFunc__base_kwargsr   rh   r|   Úclassmethodr‚   r…   Úpropertyrk   r`   ra   rŠ   r�   r   r^   r€   r?   r[   r³   r“   ro   r   rÆ   rq   rM   )r$   s   @r%   r]   r]   G   s  ø€ € € € € ðð ð �CÐAÑBÔB€Mà)-°UÈ"ð 0ð 0ð 0ð 0ð	2ð 	2ð 	2ð 	2ð 	2ð

ð 

ð 

ð ðð ñ „[ððð ð ð ð.ð .ñ „Xð.ð ðð ñ „Xðð ðð ñ „Xðð ð ð  ñ „Xð ð ð!ð !ñ „Xð!ð ð ð  ñ „Xð ð ð#ð #ñ „Xð#ðð ð ð;ð ;ð ;ð2ð 2ð 2ð 2ð 2ð7ð 7ð 7ð>ð ð ð ð46ð 6ð 6ð 6ðð ð ð(&"ð &"ð &"ðPCð Cð Cð Cð Cð Cð Cð Cr&   r]   )ri   Únumbar   r   Ú
numba.corer   r   r   r   Únumba.core.extendingr	   Únumba.core.typingr
   Únumba.core.typing.templatesr   r   Únumba.np.ufuncr   Únumba.parforsr   r   rO   r   rR   ÚobjectrT   ÚReduceMixinr~   r]   Ú	MAP_TYPESr¯   r)   r&   r%   ú<module>r÷      sm  ðØ Ð Ð Ð à Ð Ð Ð Ð Ð Ð Ð Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø *Ð *Ð *Ð *Ð *Ð *Ø %Ð %Ð %Ð %Ð %Ð %Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ $Ð $Ð $Ð $Ð $Ð $Ø (Ð (Ð (Ð (Ð (Ð (Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø "Ð "Ð "Ð "Ð "Ð "ð(ð (ð (ðV7ð 7ð 7ð 7ð 7�Fñ 7ô 7ð 7ðLCð LCð LCð LCð LCˆYÔ" IÔ$5ñ LCô LCð LCð^ Ô × Ò  Ñ 'Ô 'Ð 'Ð 'Ð 'r&   