§
    OŠtjZ:  ã                   óÆ   — d dl mZmZ d dl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  G d„ d¦  «        Z G d	„ d
¦  «        Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„ZdS )é    )ÚexpÚlog)Ú_randint)Ú	bit_scan1ÚgcdÚinvertÚsqrt)Ú_perfect_power)Úisprime)Ú_sqrt_mod_prime_powerc                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚSievePolynomialc                 ój   — || _         || _        |dz  | _        d|z  |z  | _        |dz  |z
  | _        dS )a4  This class denotes the sieve polynomial.
        Provide methods to compute `(a*x + b)**2 - N` and
        `a*x + b` when given `x`.

        Parameters
        ==========

        a : parameter of the sieve polynomial
        b : parameter of the sieve polynomial
        N : number to be factored

        é   N)ÚaÚbÚa2ÚabÚb2)Úselfr   r   ÚNs       úN/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/ntheory/qs.pyÚ__init__zSievePolynomial.__init__
   s?   € ð ˆŒØˆŒØ�Q‘$ˆŒØ�A‘#�a‘%ˆŒØ�Q‘$˜‘(ˆŒˆˆó    c                 ó&   — | j         |z  | j        z   S ©N)r   r   ©r   Úxs     r   Úeval_uzSievePolynomial.eval_u   s   € ØŒv�a‰x˜$œ&Ñ Ð r   c                 ó<   — | j         |z  | j        z   |z  | j        z   S r   )r   r   r   r   s     r   Úeval_vzSievePolynomial.eval_v    s!   € Ø”˜‘	˜DœGÑ# QÑ&¨¬Ñ0Ð0r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r!   © r   r   r   r   	   sA   € € € € € ðð ð ð&!ð !ð !ð1ð 1ð 1ð 1ð 1r   r   c                   ó   — e Zd ZdZd„ ZdS )ÚFactorBaseElemz7This class stores an element of the `factor_base`.
    c                 óZ   — || _         || _        || _        d| _        d| _        d| _        dS )zÿ
        Initialization of factor_base_elem.

        Parameters
        ==========

        prime : prime number of the factor_base
        tmem_p : Integer square root of x**2 = n mod prime
        log_p : Compute Natural Logarithm of the prime
        N)ÚprimeÚtmem_pÚlog_pÚsoln1Úsoln2Úb_ainv)r   r)   r*   r+   s       r   r   zFactorBaseElem.__init__'   s4   € ð ˆŒ
ØˆŒØˆŒ
ð ˆŒ
ØˆŒ
ØˆŒˆˆr   N)r"   r#   r$   Ú__doc__r   r%   r   r   r'   r'   $   s-   € € € € € ðð ðð ð ð ð r   r'   c                 óª  — ddl m} g }d\  }}|                     d| ¦  «        D ]«}t          ||dz
  dz  |¦  «        dk    rŽ|dk    r|€t	          |¦  «        dz
  }|dk    r|€t	          |¦  «        dz
  }t          ||d¦  «        d         }t          t          |¦  «        d	z  ¦  «        }|                     t          |||¦  «        ¦  «         Œ¬|||fS )
aç  Generate `factor_base` for Quadratic Sieve. The `factor_base`
    consists of all the points whose ``legendre_symbol(n, p) == 1``
    and ``p < num_primes``. Along with the prime `factor_base` also stores
    natural logarithm of prime and the residue n modulo p.
    It also returns the of primes numbers in the `factor_base` which are
    close to 1000 and 5000.

    Parameters
    ==========

    prime_bound : upper prime bound of the factor_base
    n : integer to be factored
    r   )Úsieve)NNé   r   iè  Niˆ  é   )
Úsympy.ntheory.generater1   Ú
primerangeÚpowÚlenr   Úroundr   Úappendr'   )	Úprime_boundÚnr1   Úfactor_baseÚidx_1000Úidx_5000r)   Úresiduer+   s	            r   Ú_generate_factor_baser@   <   s  € ð -Ð,Ð,Ð,Ð,Ð,Ø€KØ#Ñ€HˆhØ×!Ò! ! [Ñ1Ô1ð Fð FˆÝˆq�5˜1‘9 Ñ" EÑ*Ô*¨aÒ/Ð/Ø�tŠ|ˆ| Ð 0Ý˜{Ñ+Ô+¨aÑ/�Ø�tŠ|ˆ| Ð 0Ý˜{Ñ+Ô+¨aÑ/�Ý+¨A¨u°aÑ8Ô8¸Ô;ˆGÝ�#˜e™*œ* UÑ*Ñ+Ô+ˆEØ×Ò�~¨e°W¸eÑDÔDÑEÔEÐEøØ�X˜{Ð*Ð*r   c              #   óÜ  ‡‡K  — t          d| z  ¦  «        dz  t          |¦  «        z
  }|pd}|pt          |¦  «        dz
  }	 d\  }	}
}t          d¦  «        D ]Â}d}g }t          |¦  «        |k     r\d}|dk    s||v r |||¦  «        }|dk    °||v °||         j        }||z  }|                     |¦  «         t          |¦  «        |k     °\t          t          |¦  «        |z
  ¦  «        }|�&t          |dz
  ¦  «        t          |dz
  ¦  «        k     r|}
|}	|}ŒÃ|	}|
}g }|D ]\}||         j        }||         j        t          ||z  |¦  «        z  |z  }d|z  |k    r||z
  }|                     ||z  |z  ¦  «         Œ]t          |¦  «        }t          ||| ¦  «        }|D ]vŠ|‰j        z  dk    rd‰_        Œt          |‰j        ¦  «        Šˆˆfd„|D ¦   «         ‰_        ‰‰j        |z
  z  ‰j        z  ‰_        ‰‰j         |z
  z  ‰j        z  ‰_        Œw|V — t          ddt          |¦  «        dz
  z  ¦  «        D ]«}t          |¦  «        }d||dz   z	  dz  z  dz
  }|j        d|z  ||         z  z   }|j        }t          ||| ¦  «        }|D ]TŠ‰j        €Œ
‰j        |‰j        |         z  z
  ‰j        z  ‰_        ‰j        |‰j        |         z  z
  ‰j        z  ‰_        ŒU|V — Œ¬�Œ«)	a6   Generate sieve polynomials indefinitely.
    Information such as `soln1` in the `factor_base` associated with
    the polynomial is modified in place.

    Parameters
    ==========

    N : Number to be factored
    M : sieve interval
    factor_base : factor_base primes
    idx_1000 : index of prime number in the factor_base near 1000
    idx_5000 : index of prime number in the factor_base near to 5000
    randint : A callable that takes two integers (a, b) and returns a random integer
              n such that a <= n <= b, similar to `random.randint`.
    r   r   r2   T)NNNé2   Nc                 ó0   •— g | ]}d |z  ‰z  ‰j         z  ‘ŒS ©r   )r)   )Ú.0Úb_elemÚa_invÚfbs     €€r   ú
<listcomp>z(_generate_polynomial.<locals>.<listcomp>�   s(   ø€ ÐCÐCÐC°v˜˜6™ %™¨"¬(Ñ2ÐCÐCÐCr   )r   r7   Úranger)   r9   r   Úabsr*   r   Úsumr   r,   r.   r-   r   r   r   )r   ÚMr<   r=   r>   ÚrandintÚ
approx_valÚstartÚendÚbest_aÚbest_qÚ
best_ratioÚ_r   ÚqÚrand_pÚpÚratioÚBÚvalÚq_lÚgammar   ÚgÚiÚvÚneg_powrG   rH   s                              @@r   Ú_generate_polynomialrb   Y   sv  øøè è € õ  �Q�q‘S‘”˜!‘�c !™fœfÑ$€JØˆM˜€EØ
Ð
,•s˜;Ñ'Ô'¨!Ñ+€Cð5à%5Ñ"ˆ�˜
Ý�r‘”ð 	#ð 	#ˆAØˆAØˆAÝ�a‘&”&˜:Ò%Ð%Ø�Ø ’k�k V¨q [ [Ø$˜W U¨CÑ0Ô0�Fð  ’k�k V¨q [ [à Ô'Ô-�Ø�Q‘�Ø—’˜Ñ Ô Ð õ �a‘&”&˜:Ò%Ð%õ �˜A™œ Ñ+Ñ,Ô,ˆEØÐ!¥S¨°©¡^¤^µc¸*Àq¹.Ñ6IÔ6IÒ%IÐ%IØ�Ø�Ø"�
øð ˆØˆØˆØð 	#ð 	#ˆCØ˜cÔ"Ô(ˆCØ Ô$Ô+­f°Q¸#±X¸sÑ.CÔ.CÑCÀcÑIˆEØ�‰w˜Š}ˆ}Ø˜e™�Ø�HŠH�Q˜‘V˜E‘\Ñ"Ô"Ð"Ð"Ý�‰FŒFˆÝ˜A˜q !Ñ$Ô$ˆØð 	;ð 	;ˆBØ�2”8‰|˜qÒ Ð Ø�”ØÝ˜1˜bœhÑ'Ô'ˆEØCÐCÐCÐCÐCÀÐCÑCÔCˆBŒIØ˜rœy¨1™}Ñ-°´Ñ9ˆBŒHØ ¤	˜z¨A™~Ñ.°"´(Ñ:ˆBŒHˆHØˆˆˆõ �q˜!�c !™fœf Q™h™-Ñ(Ô(ð 	ð 	ˆAÝ˜!‘”ˆAØ˜!  A¡™,¨!Ñ+Ñ,¨qÑ0ˆGØ”�a˜‘i  !¤‘nÑ$ˆAØ”ˆAÝ  1 aÑ(Ô(ˆAØ!ð Hð H�Ø”8Ð#ØØœH w¨r¬y¸¬|Ñ';Ñ;¸r¼xÑG�”ØœH w¨r¬y¸¬|Ñ';Ñ;¸r¼xÑG�”�ØˆGˆGˆGˆGñk5r   c                 óT  — dgd| z  dz   z  }|D ]˜}|j         €Œ
t          | |j         z   |j        z  d| z  |j        ¦  «        D ]}||xx         |j        z  cc<   Œ|j        dk    rŒWt          | |j        z   |j        z  d| z  |j        ¦  «        D ]}||xx         |j        z  cc<   ŒŒ™|S )a¨  Sieve Stage of the Quadratic Sieve. For every prime in the factor_base
    that does not divide the coefficient `a` we add log_p over the sieve_array
    such that ``-M <= soln1 + i*p <=  M`` and ``-M <= soln2 + i*p <=  M`` where `i`
    is an integer. When p = 2 then log_p is only added using
    ``-M <= soln1 + i*p <=  M``.

    Parameters
    ==========

    M : sieve interval
    factor_base : factor_base primes
    r   r   r2   )r,   rJ   r)   r+   r-   )rM   r<   Úsieve_arrayÚfactorÚidxs        r   Ú_gen_sieve_arrayrg   ¤   sì   € ð �#�q˜‘s˜Q‘w‘-€KØð 	-ð 	-ˆØŒ<ÐØÝ˜!˜fœlÑ*¨f¬lÑ:¸A¸a¹CÀÄÑNÔNð 	-ð 	-ˆCØ˜ÐÐÔ ¤Ñ,ÐÐÑÐØŒ<˜1ÒÐØå˜!˜fœlÑ*¨f¬lÑ:¸A¸a¹CÀÄÑNÔNð 	-ð 	-ˆCØ˜ÐÐÔ ¤Ñ,ÐÐÑÐð	-àÐr   c                 óô   — | dk     r| dz  } d}nd}t          |d¦  «        D ]T\  }}| |j        z  rŒd}| |j        z  } | |j        z  dk    r|dz  }| |j        z  } | |j        z  dk    °|dz  r|d|z  z  }ŒU|| fS )zê Check if `num` is smooth with respect to the given `factor_base`
    and compute its factorization vector.

    Parameters
    ==========

    num : integer whose smootheness is to be checked
    factor_base : factor_base primes
    r   éÿÿÿÿr2   r   )Ú	enumerater)   )Únumr<   Úvecr_   rH   Úes         r   Ú_check_smoothnessrn   ¿   s¿   € ð ˆQ‚w€wØˆr‰	ˆØˆˆàˆÝ˜;¨Ñ*Ô*ð 	ð 	‰ˆˆ2Ø�”‰>ð 	ØØˆØ�”ÑˆØ�B”H‰n Ò!Ð!Ø�‰FˆAØ�B”HÑˆCð �B”H‰n Ò!Ð!ð ˆq‰5ð 	Ø�1˜‘6‰MˆCøØ�ˆ8€Or   c                 óð  — t          |¦  «        t          | ¦  «        dz  z   |z
  dz  }g }t          ¦   «         }	d|d         j        z  }
t          || ¦  «        D �]\  }}||k     rŒ|                     |¦  «        }t          ||¦  «        \  }}|dk    r,|                     |                     |¦  «        ||f¦  «         Œg||
k     r«t          |¦  «        rœ| |z  dk    r|	 	                    |¦  «         Œ›|                     |¦  «        }||v r\| 
                    |¦  «        \  }}}||z  t          || ¦  «        z  | z  }||z  |dz  z  }||z  }|                     |||f¦  «         �Œ|||f||<   �Œ||	fS )a)  Trial division stage. Here we trial divide the values generetated
    by sieve_poly in the sieve interval and if it is a smooth number then
    it is stored in `smooth_relations`. Moreover, if we find two partial relations
    with same large prime then they are combined to form a smooth relation.
    First we iterate over sieve array and look for values which are greater
    than accumulated_val, as these values have a high chance of being smooth
    number. Then using these values we find smooth relations.
    In general, let ``t**2 = u*p modN`` and ``r**2 = v*p modN`` be two partial relations
    with the same large prime p. Then they can be combined ``(t*r/p)**2 = u*v modN``
    to form a smooth relation.

    Parameters
    ==========

    N : Number to be factored
    M : sieve interval
    factor_base : factor_base primes
    sieve_array : stores log_p values
    sieve_poly : polynomial from which we find smooth relations
    partial_relations : stores partial relations with one large prime
    ERROR_TERM : error term for accumulated_val
    r   r3   é€   ri   r2   r   )r   Úsetr)   rj   r!   rn   r9   r   r   ÚaddÚpopr   )r   rM   r<   rd   Ú
sieve_polyÚpartial_relationsÚ
ERROR_TERMÚaccumulated_valÚsmooth_relationsÚproper_factorÚpartial_relation_upper_boundr   r[   r`   rl   rk   ÚuÚu_prevÚv_prevÚvec_prevs                       r   Ú_trial_division_stager   Û   sµ  € õ. ˜1‘v”v¥ A¡¤ q¡Ñ(¨:Ñ5¸Ñ>€OØÐÝ‘E”E€MØ#& {°2¤Ô'<Ñ#<Ð Ý˜K¨!¨Ñ,Ô,ð 5ñ 5‰ˆˆ3Ø�Ò Ð ØØ×Ò˜aÑ Ô ˆÝ$ Q¨Ñ4Ô4‰ˆˆSØ�!Š8ˆ8Ø×#Ò# Z×%6Ò%6°qÑ%9Ô%9¸1¸cÐ$BÑCÔCÐCÐCØÐ/Ò/Ð/µG¸C±L´LÐ/Ø�3‰w˜!Š|ˆ|Ø×!Ò! #Ñ&Ô&Ð&ØØ×!Ò! !Ñ$Ô$ˆAØÐ'Ð'Ð'Ø+<×+@Ò+@ÀÑ+EÔ+EÑ(�˜ Ø�f‘H�V C¨™^œ^Ñ+¨aÑ/�Ø�f‘H  Q¡Ñ&�Ø�x‘�Ø ×'Ò'¨¨A¨s¨Ñ4Ô4Ð4Ñ4à*+¨Q°¨Ð! #Ñ&ùØ˜]Ð*Ð*r   c              #   ót  K  — d„ |D ¦   «         }t          |¦  «        }dg|z  }t          |¦  «        D ]n}d|z  }t          |¦  «        D ]W}||         |z  x}	rH|	||         z  }
|||<   d||<   t          |dz   |¦  «        D ]}||         |z  r||xx         |
z  cc<   Œ nŒXŒot          |||¦  «        D ]„\  }}}|rŒ	|d         |d         }}t          |||¦  «        D ]#\  }}}|r||z  r||d         z  }||d         z  }Œ$t          |¦  «        }dt	          ||z
  | ¦  «        x}cxk     r| k     rn Œ€|V — Œ…dS )a˜   Finds proper factor of N using fast gaussian reduction for modulo 2 matrix.

    Parameters
    ==========

    N : Number to be factored
    smooth_relations : Smooth relations vectors matrix
    col : Number of columns in the matrix

    Reference
    ==========

    .. [1] A fast algorithm for gaussian elimination over GF(2) and
    its implementation on the GAPP. Cetin K.Koc, Sarath N.Arachchige
    c                 ó   — g | ]
}|d          ‘ŒS rD   r%   )rE   Ú
s_relations     r   rI   z _find_factor.<locals>.<listcomp>  s   € Ð?Ð?Ð? 
ˆj˜ŒmÐ?Ð?Ð?r   Fr2   Tr   N)r7   rJ   ÚzipÚisqrtr   )r   rx   ÚcolÚmatrixÚrowÚmarkÚposÚmr_   rX   Úadd_colÚjÚmatÚrelr{   r`   Úm1Úmat1Úrel1r^   s                       r   Ú_find_factorr’     sË  è è € ð  @Ð?Ð.>Ð?Ñ?Ô?€FÝ
ˆf‰+Œ+€CØˆ7�S‰=€DÝ�S‰zŒzð 
ð 
ˆØ�‰HˆÝ�s‘”ð 	ð 	ˆAØ˜1”I ‘MÐ!ˆqð Ø˜f Qœi™-�Ø��q‘	Ø��Q‘Ý˜q 1™u cÑ*Ô*ð -ð -�AØ˜a”y 1‘}ð -Ø˜q˜	˜	œ	 WÑ,˜	˜	™	øØ�ðøõ ˜4 Ð)9Ñ:Ô:ð ð ‰ˆˆ3�Øð 	ØØ�1Œv�s˜1”vˆ1ˆÝ! $¨Ð0@ÑAÔAð 	ð 	‰NˆB��dØð �c˜D‘jð Ø�T˜!”W‘�Ø�T˜!”W‘�øå�!‰HŒHˆØ•S˜˜Q™ ‘]”]Ð"�Ð'Ð'Ò'Ð' aÒ'Ð'Ð'Ð'Ð'ØˆGˆGˆGøðð r   é   éÒ  c           	      óB   — t          t          | ||||¦  «        ¦  «        S )aœ  Performs factorization using Self-Initializing Quadratic Sieve.
    In SIQS, let N be a number to be factored, and this N should not be a
    perfect power. If we find two integers such that ``X**2 = Y**2 modN`` and
    ``X != +-Y modN``, then `gcd(X + Y, N)` will reveal a proper factor of N.
    In order to find these integers X and Y we try to find relations of form
    t**2 = u modN where u is a product of small primes. If we have enough of
    these relations then we can form ``(t1*t2...ti)**2 = u1*u2...ui modN`` such that
    the right hand side is a square, thus we found a relation of ``X**2 = Y**2 modN``.

    Here, several optimizations are done like using multiple polynomials for
    sieving, fast changing between polynomials and using partial relations.
    The use of partial relations can speeds up the factoring by 2 times.

    Parameters
    ==========

    N : Number to be Factored
    prime_bound : upper bound for primes in the factor base
    M : Sieve Interval
    ERROR_TERM : Error term for checking smoothness
    seed : seed of random number generator

    Returns
    =======

    set(int) : A set of factors of N without considering multiplicity.
               Returns ``{N}`` if factorization fails.

    Examples
    ========

    >>> from sympy.ntheory import qs
    >>> qs(25645121643901801, 2000, 10000)
    {5394769, 4753701529}
    >>> qs(9804659461513846513, 2000, 10000)
    {4641991, 2112166839943}

    See Also
    ========

    qs_factor

    References
    ==========

    .. [1] https://pdfs.semanticscholar.org/5c52/8a975c1405bd35c65993abf5a4edb667c1db.pdf
    .. [2] https://www.rieselprime.de/ziki/Self-initializing_quadratic_sieve
    )rq   Ú	qs_factor)r   r:   rM   rv   Úseeds        r   Úqsr˜   :  s#   € õb �y˜˜K¨¨J¸Ñ=Ô=Ñ>Ô>Ð>r   c           
      ó€  — | dk     rt          d¦  «        ‚i }g }i }| dz  dk    r(d}| dz  } | dz  dk    r| dz  } |dz  }| dz  dk    °||d<   t          | ¦  «        rd|| <   |S t          | d¦  «        x}	r|	\  }
}|||
<   |S | }t          |¦  «        }t	          || ¦  «        \  }}}t          |¦  «        dz  dz  }t          | |||||¦  «        D ]w}t          ||¦  «        }t          | ||||||¦  «        \  }}||z  }|D ]0}||z  rŒd}||z  }||z  dk    r||z  }|dz  }||z  dk    °|||<   Œ1|t          |¦  «        k    r nŒxt          | |t          |¦  «        dz   ¦  «        D ]J}||z  dk    r?d}||z  }||z  dk    r||z  }|dz  }||z  dk    °|||<   |dk    st          |¦  «        r nŒK|dk    rd||<   |S )aª   Performs factorization using Self-Initializing Quadratic Sieve.

    Parameters
    ==========

    N : Number to be Factored
    prime_bound : upper bound for primes in the factor base
    M : Sieve Interval
    ERROR_TERM : Error term for checking smoothness
    seed : seed of random number generator

    Returns
    =======

    dict[int, int] : Factors of N.
                     Returns ``{N: 1}`` if factorization fails.
                     Note that the key is not always a prime number.

    Examples
    ========

    >>> from sympy.ntheory import qs_factor
    >>> qs_factor(1009 * 100003, 2000, 10000)
    {1009: 1, 100003: 1}

    See Also
    ========

    qs

    r   zN should be greater than 1r   r2   é   éi   éd   )
Ú
ValueErrorr   r
   r   r@   r7   rb   rg   r   r’   )r   r:   rM   rv   r—   Úfactorsrx   ru   rm   Úresultr;   ÚN_copyrN   r=   r>   r<   Ú	thresholdr^   rd   Ús_relÚp_frX   re   s                          r   r–   r–   n  s¡  € ð@ 	ˆ1‚u€uÝÐ5Ñ6Ô6Ð6Ø€GØÐØÐð 	ˆ1�u�‚z€zØˆØ	ˆa‰ˆØ�!‰e�qŠjˆjØ�!‰GˆAØ�‰FˆAð �!‰e�qŠjˆjð ˆ�‰
Ýˆq�z„zð Øˆ�‰
ØˆÝ  1Ñ%Ô%Ð%€vð Ø‰ˆˆ1Øˆ�‰
ØˆØ€FÝ�t‰nŒn€GÝ&;¸KÈÑ&KÔ&KÑ#€Hˆh˜Ý�KÑ Ô  3Ñ&¨Ñ+€IÝ! ! Q¨°X¸xÈÑQÔQð ð ˆÝ& q¨+Ñ6Ô6ˆÝ*¨1¨a°¸kÈ1ÐN_ÐakÑlÔl‰
ˆˆsØ˜EÑ!ÐØð 	ð 	ˆAØ˜‰zð ØØˆAØ�q‰LˆFØ˜1‘* ’/�/Ø˜1‘�Ø�Q‘�ð ˜1‘* ’/�/ð ˆG�A‰JˆJØ�Ð,Ñ-Ô-Ò-Ð-ØˆEð .õ ˜qÐ"2µC¸Ñ4DÔ4DÀqÑ4HÑIÔIð 	ð 	ˆØ�F‰?˜aÒÐØˆAØ�vÑˆFØ˜6‘/ QÒ&Ð&Ø˜6Ñ!�Ø�Q‘�ð ˜6‘/ QÒ&Ð&ð  ˆG�F‰OØ˜Š{ˆ{�g f™oœoˆ{Ø�øØ�‚{€{Øˆ�‰Ø€Nr   N)r“   r”   )Úmathr   r   Úsympy.core.randomr   Úsympy.external.gmpyr   r   r   r	   r„   Úsympy.ntheory.factor_r
   Úsympy.ntheory.primetestr   Úsympy.ntheory.residue_ntheoryr   r   r'   r@   rb   rg   rn   r   r’   r˜   r–   r%   r   r   ú<module>rª      sr  ðØ Ð Ð Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø +Ð +Ð +Ð +Ð +Ð +Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ð1ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ð6ð ð ð ð ñ ô ð ð0+ð +ð +ð:Hð Hð HðVð ð ð6ð ð ð8/+ð /+ð /+ðd*ð *ð *ðZ1?ð 1?ð 1?ð 1?ðhUð Uð Uð Uð Uð Ur   