Ë
    M/ÅeƒF  ã                   ón  — d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	 ddlm
Z
 ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlZddlmZ ddlmZ ddlmZ  ej2                  e«      Zej8                  Z G d„ d«      Z G d„ d«      Zddeddfde de de!de!de!dee"e!f   deee       dejF                  fd„Z$	 	 	 d4de d eeee"   ee"   f      d!e%d"eeeejL                  ejN                  f         de f
d#„Z(d$eejF                  ejR                  f   dee"   fd%„Z*d&eejF                  ejR                  f   dee"   fd'„Z+d&eejF                  ejR                  f   dee"   fd(„Z,d&eejF                  ejR                  f   dee"   fd)„Z-	 	 	 	 	 d5d*ej\                  d eee"      d+ee!   d,e!d-e%d.eeej^                        d/eeeejL                  ejN                  f         dejF                  fd0„Z0ejb                  fd1eeejd                     eejF                     f   d2e!de fd3„Z3y)6zCrypto utilities.é    N)ÚAny)ÚCallable)ÚList)ÚMapping)ÚOptional)ÚSequence)ÚSet)ÚTuple)ÚUnion)Úcrypto)ÚSSL)Úerrorsc                   ó°   — e Zd Zdeeeej                  ej                  f   f   fd„Z	de
j                  deeej                  ej                  f      fd„Zy)Ú_DefaultCertSelectionÚcertsc                 ó   — || _         y ©N)r   )Úselfr   s     ú2/usr/lib/python3/dist-packages/acme/crypto_util.pyÚ__init__z_DefaultCertSelection.__init__&   s	   € Øˆ�
ó    Ú
connectionÚreturnc                 ó`   — |j                  «       }|r| j                  j                  |d «      S y r   )Úget_servernamer   Úget)r   r   Úserver_names      r   Ú__call__z_DefaultCertSelection.__call__)   s+   € Ø ×/Ñ/Ó1ˆÙØ—:‘:—>‘> +¨tÓ4Ð4Ør   N)Ú__name__Ú
__module__Ú__qualname__r   Úbytesr
   r   ÚPKeyÚX509r   r   Ú
Connectionr   r   © r   r   r   r   %   s[   „ ð˜g e¨U°6·;±;ÀÇÁÐ3KÑ-LÐ&LÑMó ð 3§>¡>ð °h¸uÀVÇ[Á[ÐRX×R]ÑR]ÐE]Ñ?^Ñ6_ô r   r   c                   óz  — e Zd ZdZdeddfdej
                  deeee	e
j                  e
j                  f   f      dedeeej                   ee   gef      deeej                   gee	e
j                  e
j                  f      f      ddfd	„Zd
edefd„Zdej                   ddfd„Z G d„ d«      Zde	eef   fd„Zy)Ú	SSLSocketaÝ  SSL wrapper for sockets.

    :ivar socket sock: Original wrapped socket.
    :ivar dict certs: Mapping from domain names (`bytes`) to
        `OpenSSL.crypto.X509`.
    :ivar method: See `OpenSSL.SSL.Context` for allowed values.
    :ivar alpn_selection: Hook to select negotiated ALPN protocol for
        connection.
    :ivar cert_selection: Hook to select certificate for connection. If given,
        `certs` parameter would be ignored, and therefore must be empty.

    NÚsockr   ÚmethodÚalpn_selectionÚcert_selectionr   c                 óž   — || _         || _        || _        |s|st        d«      ‚|r|rt        d«      ‚|}|€t	        |r|ni «      }|| _        y )Nz*Neither cert_selection or certs specified.z(Both cert_selection and certs specified.)r)   r+   r*   Ú
ValueErrorr   r,   )r   r)   r   r*   r+   r,   Úactual_cert_selections          r   r   zSSLSocket.__init__=   sg   € ð ˆŒ	Ø,ˆÔØˆŒÙ¡eÜÐIÓJÐJÙ™eÜÐGÓHÐHð Tbð 	ð !Ð(Ü$9Á5¹%ÈbÓ$QÐ!Ø3ˆÕr   Únamec                 ó.   — t        | j                  |«      S r   )Úgetattrr)   ©r   r0   s     r   Ú__getattr__zSSLSocket.__getattr__T   s   € Ü�t—y‘y $Ó'Ð'r   r   c                 óì  — | j                  |«      }|€%t        j                  d|j                  «       «       y|\  }}t	        j
                  | j                  «      }|j                  t        j                  «       |j                  t        j                  «       |j                  |«       |j                  |«       | j                  �|j                  | j                  «       |j                  |«       y)a�  SNI certificate callback.

        This method will set a new OpenSSL context object for this
        connection when an incoming connection provides an SNI name
        (in order to serve the appropriate certificate, if any).

        :param connection: The TLS connection object on which the SNI
            extension was received.
        :type connection: :class:`OpenSSL.Connection`

        Nz=Certificate selection for server name %s failed, dropping SSL)r,   ÚloggerÚdebugr   r   ÚContextr*   Úset_optionsÚOP_NO_SSLv2ÚOP_NO_SSLv3Úuse_privatekeyÚuse_certificater+   Úset_alpn_select_callbackÚset_context)r   r   ÚpairÚkeyÚcertÚnew_contexts         r   Ú_pick_certificate_cbzSSLSocket._pick_certificate_cbW   sÀ   € ð ×"Ñ" :Ó.ˆØˆ<Ü�L‰LÐXØ#×2Ñ2Ó4ô6àØ‰	ˆˆTÜ—k‘k $§+¡+Ó.ˆØ×Ñ¤§¡Ô0Ø×Ñ¤§¡Ô0Ø×"Ñ" 3Ô'Ø×#Ñ# DÔ)Ø×ÑÐ*Ø×0Ñ0°×1DÑ1DÔEØ×Ñ˜{Õ+r   c                   óT   — e Zd ZdZdej
                  ddfd„Zdedefd„Z	dede
fd	„Zy)
úSSLSocket.FakeConnectionzFake OpenSSL.SSL.Connection.r   r   Nc                 ó   — || _         y r   )Ú_wrapped)r   r   s     r   r   z!SSLSocket.FakeConnection.__init__w   s	   € Ø&ˆD�Mr   r0   c                 ó.   — t        | j                  |«      S r   )r2   rH   r3   s     r   r4   z$SSLSocket.FakeConnection.__getattr__z   s   € Ü˜4Ÿ=™=¨$Ó/Ð/r   Úunused_argsc                 ó˜   — 	 | j                   j                  «       S # t        j                  $ r}t	        j
                  |«      ‚d }~ww xY wr   )rH   Úshutdownr   ÚErrorÚsocketÚerror)r   rJ   rO   s      r   rL   z!SSLSocket.FakeConnection.shutdown}   s?   € ð*Ø—}‘}×-Ñ-Ó/Ð/øÜ—9‘9ò *ô
 —l‘l 5Ó)Ð)ûð*ús   ‚ œA	¯AÁA	)r   r    r!   Ú__doc__r   r%   r   Ústrr   r4   ÚboolrL   r&   r   r   ÚFakeConnectionrF   r   sB   „ Ù*ð	' s§~¡~ð 	'¸$ó 	'ð	0 Cð 	0¨Có 	0ð		*¨ð 		*°ô 		*r   rS   c                 óÈ  — | j                   j                  «       \  }}	 t        j                  | j                  «      }|j                  t        j                  «       |j                  t        j                  «       |j                  | j                  «       | j                  �|j                  | j                  «       | j                  t        j                  ||«      «      }|j                  «        t        j!                  d|«       	 |j#                  «        ||fS # t        j$                  $ r}t'        j(                  |«      ‚d }~ww xY w#  |j+                  «        ‚ xY w)NzPerforming handshake with %s)r)   Úacceptr   r8   r*   r9   r:   r;   Úset_tlsext_servername_callbackrD   r+   r>   rS   r%   Úset_accept_stater6   r7   Údo_handshakerM   rN   rO   Úclose)r   r)   ÚaddrÚcontextÚssl_sockrO   s         r   rU   zSSLSocket.acceptˆ   s  € Ø—Y‘Y×%Ñ%Ó'‰
ˆˆdð	Ü—k‘k $§+¡+Ó.ˆGØ×Ñ¤§¡Ô0Ø×Ñ¤§¡Ô0Ø×2Ñ2°4×3LÑ3LÔMØ×"Ñ"Ð.Ø×0Ñ0°×1DÑ1DÔEà×*Ñ*¬3¯>©>¸'À4Ó+HÓIˆHØ×%Ñ%Ô'ô �L‰LÐ7¸Ô>ð*Ø×%Ñ%Ô'ð ˜T�>Ð!øô —9‘9ò *ô —l‘l 5Ó)Ð)ûð*ûð	ð �J‰JŒLØús0   ŸC*E Ä
D ÄE ÄEÄ1EÅEÅE ÅE!)r   r    r!   rP   Ú_DEFAULT_SSL_METHODrN   r   r   r"   r
   r   r#   r$   Úintr   r   r%   r   r   rQ   r   r4   rD   rS   rU   r&   r   r   r(   r(   0   s#  „ ñð UYØ2Ø\`ð UYñ4˜VŸ]™]ð 4Ø  ¨°°f·k±kÀ6Ç;Á;Ð6NÑ0OÐ)OÑ!PÑQð4àð4ð "*¨(°C·N±NÀDÈÁKÐ3PÐRWÐ3WÑ*XÑ!Yð4ð "*¨(°C·N±NÐ3CØ3;¸EÀ&Ç+Á+ØBHÇ+Á+ðCNñ =Oñ 4Pð4Pñ +Qñ "Rð	4ð ó4ð.( ð (¨ó (ð,¨s¯~©~ð ,À$ó ,÷6*ñ *ð,˜˜n¨cÐ1Ñ2ô r   r(   i»  i,  )Ú r   r0   ÚhostÚportÚtimeoutr*   Úsource_addressÚalpn_protocolsr   c           
      ó  — t        j                  |«      }|j                  |«       d|i}	 t        j	                  d||t        |«      rdj                  |d   |d   «      nd«       ||f}	t        j                  |	fi |¤Ž}
t        j                  |
«      5 }t        j                  ||«      }|j                  «        |j!                  | «       |�|j#                  |«       	 |j%                  «        |j'                  «        	 ddd«       j)                  «       }|sJ ‚|S # t        j                  $ r}t        j                  |«      ‚d}~ww xY w# t         j                  $ r}t        j                  |«      ‚d}~ww xY w# 1 sw Y   ŒxY w)a	  Probe SNI server for SSL certificate.

    :param bytes name: Byte string to send as the server name in the
        client hello message.
    :param bytes host: Host to connect to.
    :param int port: Port to connect to.
    :param int timeout: Timeout in seconds.
    :param method: See `OpenSSL.SSL.Context` for allowed values.
    :param tuple source_address: Enables multi-path probing (selection
        of source interface). See `socket.creation_connection` for more
        info. Available only in Python 2.7+.
    :param alpn_protocols: Protocols to request using ALPN.
    :type alpn_protocols: `Sequence` of `bytes`

    :raises acme.errors.Error: In case of any problems.

    :returns: SSL certificate presented by the server.
    :rtype: OpenSSL.crypto.X509

    rc   z!Attempting to connect to %s:%d%s.z from {0}:{1}r   é   r_   N)r   r8   Úset_timeoutr6   r7   ÚanyÚformatrN   Úcreate_connectionrO   r   rM   Ú
contextlibÚclosingr%   Úset_connect_stateÚset_tlsext_host_nameÚset_alpn_protosrX   rL   Úget_peer_certificate)r0   r`   ra   rb   r*   rc   rd   r[   Úsocket_kwargsÚsocket_tupler)   rO   ÚclientÚ
client_sslrB   s                  r   Ú	probe_sniru   ¨   sx  € ô. �k‰k˜&Ó!€GØ×Ñ˜Ô à% ~Ð6€Mð"Ü�‰Ø/°°tô �^Ô$ð ×"Ñ"Ø˜qÑ!Ø˜qÑ!ôð +-ô	
ð ,0°¨,ˆÜ×'Ñ'¨ÑF¸ÑFˆô 
×	Ñ	˜DÓ	!ð 
& VÜ—^‘^ G¨VÓ4ˆ
Ø×$Ñ$Ô&Ø×'Ñ'¨Ô-ØÐ%Ø×&Ñ& ~Ô6ð	&Ø×#Ñ#Ô%Ø×ÑÕ!÷
&ð ×*Ñ*Ó,€DÙ€Kˆ4Ø€Køô! �<‰<ò "Ü�l‰l˜5Ó!Ð!ûð"ûô �y‰yò 	&Ü—,‘,˜uÓ%Ð%ûð	&ú÷
&ð 
&úsC   ¬AD! ÂAFÃ" EÄ!EÄ4E	Å	EÅE>Å$E9Å9E>Å>FÆF
Úprivate_key_pemÚdomainsÚmust_stapleÚipaddrsc                 óæ  — t        j                  t         j                  | «      }t        j                  «       }g }|€g }|€g }t	        |«      t	        |«      z   dk(  rt        d«      ‚|D ]  }|j                  d|z   «       Œ |D ]   }|j                  d|j                  z   «       Œ" dj                  |«      j                  d«      }	t        j                  dd|	¬	«      g}
|r'|
j                  t        j                  d
dd¬	«      «       |j                  |
«       |j                  |«       |j                  d«       |j                  |d«       t        j                  t         j                  |«      S )a‘  Generate a CSR containing domains or IPs as subjectAltNames.

    :param buffer private_key_pem: Private key, in PEM PKCS#8 format.
    :param list domains: List of DNS names to include in subjectAltNames of CSR.
    :param bool must_staple: Whether to include the TLS Feature extension (aka
        OCSP Must Staple: https://tools.ietf.org/html/rfc7633).
    :param list ipaddrs: List of IPaddress(type ipaddress.IPv4Address or ipaddress.IPv6Address)
    names to include in subbjectAltNames of CSR.
    params ordered this way for backward competablity when called by positional argument.
    :returns: buffer PEM-encoded Certificate Signing Request.
    r   zAAt least one of domains or ipaddrs parameter need to be not emptyúDNS:úIP:ú, Úasciió   subjectAltNameF©ÚcriticalÚvalues   1.3.6.1.5.5.7.1.24s   DER:30:03:02:01:05Úsha256)r   Úload_privatekeyÚFILETYPE_PEMÚX509ReqÚlenr.   ÚappendÚexplodedÚjoinÚencodeÚX509ExtensionÚadd_extensionsÚ
set_pubkeyÚset_versionÚsignÚdump_certificate_request)rv   rw   rx   ry   Úprivate_keyÚcsrÚsanlistÚaddressÚipsÚ
san_stringÚ
extensionss              r   Úmake_csrr™   á   sa  € ô ×(Ñ(Ü×Ñ˜_ó.€Kä
�.‰.Ó
€CØ€Gà€ØˆØ€ØˆÜ
ˆ7ƒ|”C˜“LÑ  AÒ%ÜÐ\Ó]Ð]Øò )ˆØ�‰�v Ñ'Õ(ð)àò -ˆØ�‰�u˜sŸ|™|Ñ+Õ,ð-ð —‘˜7Ó#×*Ñ*¨7Ó3€Jô 	×ÑØØØô	
ð€Jñ Ø×Ñœ&×.Ñ.Ø!ØØ'ô)ô 	*ð ×Ñ�zÔ"Ø‡N�N�;Ôà‡O�O�AÔØ‡H�Hˆ[˜(Ô#Ü×*Ñ*Ü×Ñ˜Só"ð "r   Úloaded_cert_or_reqc                 ó’   — | j                  «       j                  }t        | «      }|€|S |g|D �cg c]
  }||k7  sŒ	|‘Œ c}z   S c c}w r   )Úget_subjectÚCNÚ_pyopenssl_cert_or_req_san)rš   Úcommon_nameÚsansÚds       r   Ú _pyopenssl_cert_or_req_all_namesr¢     sP   € ð %×0Ñ0Ó2×5Ñ5€KÜ%Ð&8Ó9€DàÐØˆØˆ= tÖ@ !¨q°KÓ/?šAÒ@Ñ@Ð@ùÒ@s
   °
A»AÚcert_or_reqc                 ó–   — d}d|z   }t        | «      }|D �cg c]'  }|j                  |«      r|j                  |«      d   ‘Œ) c}S c c}w )a©  Get Subject Alternative Names from certificate or CSR using pyOpenSSL.

    .. todo:: Implement directly in PyOpenSSL!

    .. note:: Although this is `acme` internal API, it is used by
        `letsencrypt`.

    :param cert_or_req: Certificate or CSR.
    :type cert_or_req: `OpenSSL.crypto.X509` or `OpenSSL.crypto.X509Req`.

    :returns: A list of Subject Alternative Names that is DNS.
    :rtype: `list` of `str`

    ú:ÚDNSrf   )Ú_pyopenssl_extract_san_list_rawÚ
startswithÚsplit©r£   Úpart_separatorÚprefixÚ
sans_partsÚparts        r   rž   rž   #  sX   € ð$ €NØ�^Ñ#€Fä0°Ó=€Jð #ö?Ø d§o¡o°fÔ&=ð �J‰J�~Ó& qÓ)ò ?ð ?ùò ?s   —,Ac                 óŒ   — d}d|z   }t        | «      }|D �cg c]"  }|j                  |«      sŒ|t        |«      d ‘Œ$ c}S c c}w )ae  Get Subject Alternative Names IPs from certificate or CSR using pyOpenSSL.

    :param cert_or_req: Certificate or CSR.
    :type cert_or_req: `OpenSSL.crypto.X509` or `OpenSSL.crypto.X509Req`.

    :returns: A list of Subject Alternative Names that are IP Addresses.
    :rtype: `list` of `str`. note that this returns as string, not IPaddress object

    r¥   z
IP AddressN)r§   r¨   r‡   rª   s        r   Ú_pyopenssl_cert_or_req_san_ipr°   >  sG   € ð €NØ˜NÑ*€Fä0°Ó=€Jà+5ÖQ 4¸¿¹ÈÕ9PˆD”�V“�ÒÒQÐQùÒQs
   —A®Ac                 ó„  — t        | t        j                  «      r4t        j                  t        j                  | «      j                  d«      }n3t        j                  t        j                  | «      j                  d«      }t        j                  d|«      }d}|€g }|S |j                  d«      j                  |«      }|S )a  Get raw SAN string from cert or csr, parse it as UTF-8 and return.

    :param cert_or_req: Certificate or CSR.
    :type cert_or_req: `OpenSSL.crypto.X509` or `OpenSSL.crypto.X509Req`.

    :returns: raw san strings, parsed byte as utf-8
    :rtype: `list` of `str`

    zutf-8z5X509v3 Subject Alternative Name:(?: critical)?\s*(.*)r}   rf   )Ú
isinstancer   r$   Údump_certificateÚFILETYPE_TEXTÚdecoder‘   ÚreÚsearchÚgroupr©   )r£   ÚtextÚraw_sanÚparts_separatorr­   s        r   r§   r§   R  s¥   € ô �+œvŸ{™{Ô+ä×&Ñ&¤v×';Ñ';¸[ÓI×PÑPÐQXÓY‰ä×.Ñ.¬v×/CÑ/CÀ[ÓQ×XÑXÐY`Óaˆô �i‰iÐPÐRVÓW€Gà€Oð ��€JØÐð -4¯M©M¸!Ó,<×,BÑ,BÀ?Ó,S€JØÐr   rA   Ú
not_beforeÚvalidityÚ	force_sanr˜   r–   c           	      óØ  — |s	|sJ d«       ‚t        j                  «       }|j                  t        t	        j
                  t        j                  d«      «      d«      «       |j                  d«       |€g }|€g }|€g }|j                  t        j                  ddd«      «       t        |«      dkD  r|d   |j                  «       _        |j                  |j                  «       «       g }|D ]  }	|j                  d|	z   «       Œ |D ]   }
|j                  d	|
j                  z   «       Œ" d
j!                  |«      j#                  d«      }|st        |«      dkD  st        |«      dkD  r'|j                  t        j                  dd|¬«      «       |j%                  |«       |j'                  |€dn|«       |j)                  |«       |j+                  | «       |j-                  | d«       |S )at  Generate new self-signed certificate.

    :type domains: `list` of `str`
    :param OpenSSL.crypto.PKey key:
    :param bool force_san:
    :param extensions: List of additional extensions to include in the cert.
    :type extensions: `list` of `OpenSSL.crypto.X509Extension`
    :type ips: `list` of (`ipaddress.IPv4Address` or `ipaddress.IPv6Address`)

    If more than one domain is provided, all of the domains are put into
    ``subjectAltName`` X.509 extension and first domain is set as the
    subject CN. If only one domain is provided no ``subjectAltName``
    extension is used, unless `force_san` is ``True``.

    z7Must provide one or more hostnames or IPs for the cert.é   é   s   basicConstraintsTs   CA:TRUE, pathlen:0r   r{   r|   r}   r~   rf   r   Fr€   rƒ   )r   r$   Úset_serial_numberr^   ÚbinasciiÚhexlifyÚosÚurandomr�   rˆ   rŒ   r‡   rœ   r�   Ú
set_issuerr‰   rŠ   r‹   r�   Úgmtime_adj_notBeforeÚgmtime_adj_notAfterrŽ   r�   )rA   rw   r¼   r½   r¾   r˜   r–   rB   r”   r•   Úipr—   s               r   Úgen_ss_certrË   q  sÀ  € ñ* ‘cÐTÐTÓTˆ>ä�;‰;‹=€DØ×Ñœ3œx×/Ñ/´·
±
¸2³Ó?ÀÓDÔEØ×Ñ�QÔàÐØˆ
Ø€ØˆØ
€{ØˆØ×ÑÜ×ÑØ Ð'<ó	>ôô
 ˆ7ƒ|�aÒØ '¨¡
ˆ×ÑÓÔà‡O�O�D×$Ñ$Ó&Ô'à€GØò )ˆØ�‰�v Ñ'Õ(ð)àò ,ˆØ�‰�u˜rŸ{™{Ñ*Õ+ð,à—‘˜7Ó#×*Ñ*¨7Ó3€JÙ”C˜“L 1Ò$¬¨C«°1ªØ×Ñœ&×.Ñ.ØØØô
ô 	ð 	×Ñ˜
Ô#à×Ñ :Ð#5™a¸:ÔFØ×Ñ˜XÔ&à‡O�O�CÔØ‡I�Iˆc�8ÔØ€Kr   ÚchainÚfiletypec                 ó    ‡‡— dt         t        j                  t        j                  f   dt
        fˆfd„Šdj                  ˆfd„| D «       «      S )zØDump certificate chain into a bundle.

    :param list chain: List of `OpenSSL.crypto.X509` (or wrapped in
        :class:`josepy.util.ComparableX509`).

    :returns: certificate chain bundle
    :rtype: bytes

    rB   r   c                 óî   •— t        | t        j                  «      rEt        | j                  t        j
                  «      rt        j                  d«      ‚| j                  } t	        j                  ‰| «      S )NzUnexpected CSR provided.)	r²   ÚjoseÚComparableX509Úwrappedr   r†   r   rM   r³   )rB   rÍ   s    €r   Ú
_dump_certz(dump_pyopenssl_chain.<locals>._dump_certÁ  sQ   ø€ Ü�dœD×/Ñ/Ô0Ü˜$Ÿ,™,¬¯©Ô7Ü—l‘lÐ#=Ó>Ð>Ø—<‘<ˆDÜ×&Ñ& x°Ó6Ð6r   r   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr   r&   )Ú.0rB   rÓ   s     €r   ú	<genexpr>z'dump_pyopenssl_chain.<locals>.<genexpr>Ê  s   øè ø€ Ò7¨‘J˜t×$Ñ7ùs   ƒ)r   rÐ   rÑ   r   r$   r"   rŠ   )rÌ   rÍ   rÓ   s    `@r   Údump_pyopenssl_chainr×   ³  sA   ù€ ð7œœt×2Ñ2´F·K±KÐ?Ñ@ð 7ÄUõ 7ð �8‰8Ó7°Ô7Ó7Ð7r   )NFN)NNi€:	 TNN)4rP   rÃ   rk   Ú	ipaddressÚloggingrÅ   r¶   rN   Útypingr   r   r   r   r   r   r	   r
   r   ÚjosepyrÐ   ÚOpenSSLr   r   Úacmer   Ú	getLoggerr   r6   ÚSSLv23_METHODr]   r   r(   r"   r^   rQ   r$   ru   rR   ÚIPv4AddressÚIPv6Addressr™   r†   r¢   rž   r°   r§   r#   rŒ   rË   r…   rÑ   r×   r&   r   r   ú<module>râ      sï  ðÙ Û Û Û Û Û 	Û 	Û Ý Ý Ý Ý Ý Ý Ý Ý Ý ã Ý Ý å à	ˆ×	Ñ	˜8Ó	$€ð ×'Ñ'Ð ÷ñ ÷uñ uðp 58ÈØ/ÐSZØ:>ñ6�Eð 6 ð 6¨cð 6À#ð 6Øð6ØAFÀsÈCÀxÁð6à& x°¡Ñ7ð6àCIÇ;Á;ó6ðr VZØ!&Ø\`ñ4"˜eð 4"¨h°u¸SÀ¹XÀtÈCÁyÐ=PÑ7QÑ.Rð 4"Øð4"à˜t E¨)×*?Ñ*?À×AVÑAVÐ*VÑ$WÑXÑYð4"ð ó4"ðnA¸¸v¿{¹{ÈFÏNÉNÐ?ZÑ9[ð AØ*.¨s©)óAð?¨E°&·+±+¸v¿~¹~Ð2MÑ,Nð ?ÐSWÐX[ÑS\ó ?ð6R¨u°V·[±[À&Ç.Á.Ð5PÑ/Qð RÐVZÐ[^ÑV_ó Rð(°°v·{±{ÀFÇNÁNÐ7RÑ1Sð ÐX\Ð]`ÑXaó ð> BFØ,0ØFJØCGØ[_ñ	?�V—[‘[ð ?¨8°D¸±IÑ+>ð ?Ø$ S™Mð?àð?à?Cð?ð % T¨&×*>Ñ*>Ñ%?Ñ@ð?ð ˜d 5¨×)>Ñ)>À	×@UÑ@UÐ)UÑ#VÑWÑXð	?ð
 —[‘[ó?ðF *0×)<Ñ)<ñ8  d¨4×+>Ñ+>Ñ&?ÀÀfÇkÁkÑARÐ&RÑ Sð 8Ø#&ð8ØAFô8r   