
    nbix                    T   U d dl m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	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mZ d	d
lmZmZ dZdZdZdgZ eZ!e
j"        e#e#e#e$e#f         Z%dZ&d dD             Z' G d dej(                  Z)dwdZ*dxdZ+ G d d          Z, e,            Z-dydZ.dzd!Z/e
j0        rd d"l1m2Z2 d d#l3m4Z4 d	d$l5mZ6 i Z7d%e8d&<   	 d dl1Z1d d'l1m9Z9mZm:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmZmBZB 	 d d(l1mCZC n# eD$ r dZCY nw xY we>ZEer e/e<e=ejF        jG        ejH                  sdZd)D ]*ZI	  eJeBeI          e7 eJe1d*eI           <    # eK$ r Y 'w xY wd	d$l5mZ  eLe1j        d+          ZMd, e<jN                    v ZOde8d-<   eOdu r9 eLe1d.          r) ePe1jQ                  r eR e1jQ                              ZOnd/e'vZOn# eD$ r d0Z:d1Z;d2Z@d3ZAdxZEZ>e>Z?dZCdZMdZOY nw xY wd{d8ZSd|d<ZTe
jU        d=d>d}dB            ZVe
jU        dd>d~dD            ZV	 dddFZV	 	 	 	 	 	 	 dddRZWe
jU        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dddj            ZXe
jU        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dddl            ZX	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dddmZXddpZYddrZZ	 dddsZ[ddvZ\dS )    )annotationsN)	unhexlify)Path   )MOZ_INTERMEDIATE_CIPHERS)load_cert_chain)ProxySchemeUnsupportedSSLError   )_BRACELESS_IPV6_ADDRZ_RE_IPV4_REFzhttp/1.1c                B    i | ]\  }}|t          t          |d           S N)getattrhashlib).0length	algorithms      h/var/www/html/mdtn/previsions/meteo_cartes/venv/lib/python3.11/site-packages/urllib3_future/util/ssl_.py
<dictcomp>r   "   s:       	 GGY--      ))    md5)(   sha1)@   sha256c                      e Zd ZdZdZdZdS )_KnownCallerRequestsNiquestsOtherN)__name__
__module____qualname__REQUESTSNIQUESTSOTHER r   r   r   r   ,   s        HHEEEr   r   returnc                     t          j                    D ]G} | j        }| j                            d          r$d|v rt          j        c S d|v rt          j        c S Ht          j        S )Nzadapters.pyrequestsniquests)	tracebackextract_stackfilenameendswithr   r&   r'   r(   )framemodule_paths     r   
_caller_idr4   2   sw    (** - -n>""=11 	-[((#,,,,{**#,,,,r   argsJstr | bytes | int | Path | list[str] | bool | dict[str, typing.Any] | Noneintc            
        d}| D ]}||dz  }t          |t          t          f          r |t          t          |                    z  }Gt          |t                    r|t          |          z  }|                                r	 |t          t          |                                j        gd |	                                D             z   |                                j                            z  }nX# t          $ r Y nLw xY w	 |t          t	          |                                          j                  z  }n# t          $ r Y nw xY wt          |t          t          f          r|t          |          z  }{t          |t                    r|t          |          z  }t          |t                    r|dz  }|D ]}||z  }|dz  }t          |          S )zdWe want a dedicated hashing technics to cache ssl ctx, so that they are reusable across the runtime. N c                @    g | ]}|                                 j        S r)   )statst_mtime)r   ps     r   
<listcomp>z*_compute_key_ctx_build.<locals>.<listcomp>\   s#    HHHQqvvxx0HHHr   )default())
isinstancestrbyteshashr   is_dirmaxr<   r=   iterdirOSErrorr7   booldictlist)r5   keyargitems       r   _compute_key_ctx_buildrQ   ?   s	    C , ,;6MC
 
 	 3tCyy>>!Cc4   	 3s88OCzz|| 	3 XXZZ01HH#++--HHHI$'HHJJ$7    CC    D3tCyy~~//8999CC   DcC;'' 	3s88OCc4   	3s88OCc4   	3JC  t3JC99s%   A/C88
DD	6E  
EEc                  R    e Zd ZdddZddZej        dd            ZddZddZ	dS )_CacheableSSLContextr   maxsize
int | Noner*   Nonec                `    || _         i | _        d | _        t          j                    | _        d S r   )_maxsize
_container_cursor	threadingRLock_lock)selfrT   s     r   __init__z_CacheableSSLContext.__init__w   s*    57#'&/o&7&7


r   c                b    | j         5  d | _        i | _        d d d            d S # 1 swxY w Y   d S r   )r]   rZ   rY   r^   s    r   clearz_CacheableSSLContext.clear}   s|    Z 	! 	!DL DO	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   $((r5   Jstr | bytes | Path | int | list[str] | bool | dict[str, typing.Any] | Nonetyping.Generator[None]c              '     K   t          | }| j        5  || _        	 d V  d | _        n# d | _        w xY w	 d d d            d S # 1 swxY w Y   d S r   )rQ   r]   rZ   )r^   r5   rN   s      r   lockz_CacheableSSLContext.lock   s       %d+Z 	$ 	$DL$#t####	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s#   A(A	1AA	Assl.SSLContext | Nonec                    | j         5  | j        t          d          | j        | j        v r| j        | j                 cd d d            S 	 d d d            d S # 1 swxY w Y   d S NzYou MUST start WITH lock())r]   rZ   rJ   rY   ra   s    r   getz_CacheableSSLContext.get   s    Z 	 	|#:;;;|t..t|4	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   6AAA Actxssl.SSLContextc                x   | j         5  | j        t          d          || j        | j        <   | j        rmt          | j                  | j        k    rP| j                            t          | j                                        	                                                     d d d            d S # 1 swxY w Y   d S ri   )
r]   rZ   rJ   rY   rX   lenpopnextkeys__iter__)r^   rk   s     r   savez_CacheableSSLContext.save   s    Z 	M 	M|#:;;;,/DODL)} MT_!5!5!E!E##D)=)=)?)?)H)H)J)J$K$KLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms   BB//B36B3N)r   )rT   rU   r*   rV   )r*   rV   )r5   rc   r*   rd   )r*   rg   )rk   rl   r*   rV   )
r#   r$   r%   r_   rb   
contextlibcontextmanagerrf   rj   rs   r)   r   r   rS   rS   v   s        8 8 8 8 8! ! ! !
 $ $ $ $&   M M M M M Mr   rS   implementation_namerD   version_info_TYPE_VERSION_INFOrK   c                r    | dk    rdS |dd         }|d         }|dk    r|dk    p|dk    o|dk    p|d	k    S )
ad  Return True for CPython 3.8.9+, 3.9.3+ or 3.10+ where setting
    SSLContext.hostname_checks_common_name to False works.

    PyPy 7.3.7 doesn't work as it doesn't ship with OpenSSL 1.1.1l+
    so we're waiting for a version of PyPy that works before
    allowing this function to return 'True'.

    Outside of CPython and PyPy we don't know which implementations work
    or not so we conservatively use our hostname matching as we know that works
    on all implementations.

    https://github.com/urllib3/urllib3/issues/2192#issuecomment-821832963
    https://foss.heptapod.net/pypy/pypy/-/issues/3539#
    cpythonFNr   )      	   )r{   r}   r{   )r{   
   r)   )rv   rw   major_minormicros       r   _is_bpo_43522_fixedr      sd    " i''urr"KOE			-5A: 	"6!0eqj	"'!r   openssl_versionopenssl_version_numberc                `    |                      d          }|dk    }|o|pt          ||          S )NzOpenSSL i)
startswithr   )r   r   rv   rw   
is_opensslis_openssl_issue_14579_fixeds         r   (_is_has_never_check_common_name_reliabler      sH     !++J77J
 $:Z#G  $ 	B2LAAr   )
VerifyMode)Literal)SSLTransportzdict[int, int]_SSL_VERSION_TO_TLS_VERSION)CERT_REQUIREDHAS_NEVER_CHECK_COMMON_NAMEOP_NO_COMPRESSIONOP_NO_TICKETOPENSSL_VERSIONOPENSSL_VERSION_NUMBERPROTOCOL_TLSPROTOCOL_TLS_CLIENTOP_NO_SSLv2OP_NO_SSLv3
SSLContext
TLSVersion)OP_NO_RENEGOTIATION)TLSv1TLSv1_1TLSv1_2	PROTOCOL_maximum_versionfipsIS_FIPS	FIPS_moder   i   i @  i   i   certbytes | NonefingerprintrV   c                   | t          d          |                    dd                                          }t          |          }|t          vrt          d|           t          |         }|t          d| d          t          |                                          } ||                                           }t          j	        ||          s(t          d| d	|
                                 d
          dS )z
    Checks if given fingerprint matches the supplied certificate.

    :param cert:
        Certificate as bytes object.
    :param fingerprint:
        Fingerprint as string of hexdigits, can be interspersed by colons.
    NzNo certificate for the peer.:r9   zFingerprint of invalid length: zAHash function implementation unavailable for fingerprint length: zD. Hint: your OpenSSL build may not include it for compliance issues.z&Fingerprints did not match. Expected "z", got "")r
   replacelowerrn   HASHFUNC_MAPr   encodedigesthmaccompare_digesthex)r   r   digest_lengthhashfuncfingerprint_bytescert_digests         r   assert_fingerprintr   7  s,    |5666%%c2..4466K$$ML((FFFGGGM*HQP] Q Q Q
 
 	
 "+"4"4"6"677(4..''))K{,=>> 
^[^^+//J[J[^^^
 
 	

 
r   	candidateNone | int | strr   c                    | t           S t          | t                    r2t          t          | d          }|t          t          d| z             }|S | S )a  
    Resolves the argument to a numeric constant, which can be passed to
    the wrap_socket function/method from the ssl module.
    Defaults to :data:`ssl.CERT_REQUIRED`.
    If given a string it is assumed to be the name of the constant in the
    :mod:`ssl` module or its abbreviation.
    (So you can specify `REQUIRED` instead of `CERT_REQUIRED`.
    If it's neither `None` nor a string we assume it is already the numeric
    constant which can directly be passed to wrap_socket.
    NCERT_)r   rC   rD   r   ssl)r   ress     r   resolve_cert_reqsr   \  sW     )S!! c9d++;#w233C
r   T)mitigate_tls_versionr   typing.Literal[True]ssl.TLSVersionc                   d S r   r)   r   r   s     r   resolve_ssl_versionr   s  s	    
 Sr   typing.Literal[False]c                   d S r   r)   r   s     r   r   r   {  s	    
 #r   int | ssl.TLSVersionc                Z   | |rt           S t          S t          | t                    r|rgt	          t
          d          rRt          t
          j        | d          }||S t          t
          j        |                     dd          d          }||S |r| dk    rd} t          t
          | d          }|t          t
          d| z             }t          j
        t          |          S |rD| t          v rt          |          S | t           k    s| t          k    rt           S t
          j        j        S | S )z 
    like resolve_cert_reqs
    Nr   r   r9   r   r   )r   r   rC   rD   hasattrr   r   r   r   typingcastr7   r   MAXIMUM_SUPPORTED)r   r   r   s      r   r   r     s2     	'&&)S!! % 		GC$>$> 		#.)T::C
#.)*;*;K*L*LdSSC
 	.I$?$?-Ic9d++;#{Y677C{3$$$ 0333.y99+++yL/H/H&&~//r   ssl_versionrU   	cert_reqsoptionsciphers
str | Nonessl_minimum_versionssl_maximum_version	caller_id_KnownCaller | Nonerl   c                   t           t          d          |t                      }| dt          t          fvr||t          d          t          t          d          rt          | t          j	                  r| }| }nJt                              | t          j                  }t                              | t          j                  }t          t                    }d}t          r&|||_        nt          j        |_        d}|||_        |r|                    |           n,|r*||t&          j        u r|                    t*                     |t          j        n|}|zd}|t.          z  }|t0          z  }|t2          z  }|t4          z  }||t&          j        u r@|duo&|                                                    d          }	t:          |	du r
|t:          z  }|xj        |z  c_        |t          j        k    st>          j         d	k    rtC          |d
d          	 d|_"        |t          j        k    r||_#        d|_$        nd|_$        ||_#        	 d|_%        n# tL          $ r Y nw xY wt          |d          rVdtN          j(        v r=tN          j)        *                    tN          j(                            d                    }
nd}
|
r|
|_+        |S )a^  Creates and configures an :class:`ssl.SSLContext` instance for use with urllib3.

    :param ssl_version:
        The desired protocol version to use. This will default to
        PROTOCOL_TLS_CLIENT which will negotiate the highest protocol that both
        the server and your installation of OpenSSL support.
    :param ssl_minimum_version:
        The minimum version of TLS to be used. Use the 'ssl.TLSVersion' enum for specifying the value.
        By default, it is assigned to 'ssl.TLSVersion.TLSv1_2'.
    :param ssl_maximum_version:
        The maximum version of TLS to be used. Use the 'ssl.TLSVersion' enum for specifying the value.
        Not recommended to set to anything other than 'ssl.TLSVersion.MAXIMUM_SUPPORTED' which is the
        default value.
    :param cert_reqs:
        Whether to require the certificate verification. This defaults to
        ``ssl.CERT_REQUIRED``.
    :param options:
        Specific OpenSSL options. These default to ``ssl.OP_NO_SSLv2``,
        ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION``, and ``ssl.OP_NO_TICKET``.
    :param ciphers:
        Which cipher suites to allow the server to select. Defaults to either system configured
        ciphers if OpenSSL 1.1.1+, otherwise uses a secure default set of ciphers.
    :returns:
        Constructed SSLContext object with specified options
    :rtype: SSLContext
    Nz7Can't create an SSLContext object without an ssl modulezZCan't specify both 'ssl_version' and either 'ssl_minimum_version' or 'ssl_maximum_version'r   FTr   z@SECLEVEL=0)r{         post_handshake_authkeylog_filenameSSLKEYLOGFILE),r   	TypeErrorr4   r   r   
ValueErrorr   r   rC   r   r   rj   MINIMUM_SUPPORTEDr   SUPPORT_MIN_MAX_TLS_VERSIONminimum_versionr   r   set_ciphersr   r'   r   r   r   r   r   r   upperr1   r   r   sysrw   r   r   verify_modecheck_hostnamehostname_checks_common_nameAttributeErrorosenvironpath
expandvarsr   )r   r   r   r   r   r   r   contextdefault_tlsv1_2weak_security_setsslkeylogfiles              r   create_urllib3_contextr     sF   F QRRR LL	 4/BCCC *.A.MA   sL)) 
jcn.U.U 
&1#&1## 'B&E&E!=' '# 'B&E&E!=' '#
 ,--G!O" :*&9G##&0&8G#"O*&9G#  	:G$$$$	 : 	\-B B B  8999 &/%6!!II;; 	$$
 	< 	\-B B B !(t 3 !8P8P9 9
 $/4E4N4N..OOwOO 	S&&&#*:i*G*GW&N NN '+# C%%%'!%!&'.3++   
 w)** 4bj((G..rz~~o/N/NOOMM M 	4&3G#Ns   I 
I('I(.socksocket.socketkeyfilecertfileca_certsserver_hostnamessl_contextrg   ca_cert_dirkey_passwordca_cert_dataNone | str | bytes
tls_in_tlsLiteral[False]alpn_protocolslist[str] | Nonecertdatastr | bytes | Nonekeydatar   bool | Nonessl.SSLSocketc                    d S r   r)   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                      r   ssl_wrap_socketr  W  s	    * Cr    ssl.SSLSocket | SSLTransportTypec                    d S r   r)   r  s                      r   r  r  o  s	    * (+sr   c                B   |}|du}t                               |||nt          |          |||||	|	nt          |	          ||||
|t          j        dd          |||          5  |st                                           nd}||!t          |||t                      ||          }|||_        |||_	        |s|	s|rf|r)t          |t                    r|                                }	 |                    ||	|           nf# t          $ r}t          |          |d}~ww xY wt!          |d          r4|                                }d|vs|d         s|                                 |r |
t'          |          rt          d          |r1|
|                    ||           nj|                    |||
           nR|rP|rN	 t+          ||||
           n:# t,          j        $ r(}t1          j        d| dt4                     Y d}~nd}~ww xY w	 |                    |pt8                     n# t:          $ r Y nw xY w|r|                    |           |st                               |           n|}ddd           n# 1 swxY w Y   tA          | |||          }|S )	a.  
    All arguments except for server_hostname, ssl_context, and ca_cert_dir have
    the same meaning as they do when using :func:`ssl.wrap_socket`.

    :param server_hostname:
        When SNI is supported, the expected hostname of the certificate
    :param ssl_context:
        A pre-made :class:`SSLContext` object. If none is provided, one will
        be created using :func:`create_urllib3_context`.
    :param ciphers:
        A string of ciphers we wish the client to support.
    :param ca_cert_dir:
        A directory containing CA certificates in multiple separate files, as
        supported by OpenSSL's -CApath flag or the capath argument to
        SSLContext.load_verify_locations().
    :param key_password:
        Optional password if the keyfile is encrypted.
    :param ca_cert_data:
        Optional string containing CA certificates in PEM format suitable for
        passing as the cadata parameter to SSLContext.load_verify_locations()
    :param tls_in_tls:
        Use SSLTransport to wrap the existing socket.
    :param alpn_protocols:
        Manually specify other protocols to be announced during tls handshake.
    :param certdata:
        Specify an in-memory client intermediary certificate for mTLS.
    :param keydata:
        Specify an in-memory client intermediary key for mTLS.
    Nr   )r   r   r   r   load_default_certsx509_caz5Client private key is encrypted, password is requiredz|Passing in-memory client/intermediary certificate for mTLS is unsupported on your platform.
                        Reason: z<. It will be picked out if you upgrade to a QUIC connection.)!_SSLContextCacherf   r   r   getenvrj   r   r4   r   r   rC   rE   decodeload_verify_locationsrJ   r
   r   cert_store_statsr  _is_key_file_encryptedr   _ctx_load_cert_chainioUnsupportedOperationwarningswarnUserWarningset_alpn_protocolsALPN_PROTOCOLSNotImplementedErrorr   rs   _ssl_wrap_socket_impl)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   cache_disabled
cached_ctxestore_statsssl_socks                            r   r  r    s   d G"$.N			$$x.."*[0A0A
	/4((!
 
 Y! Y!$ 4BK%))+++t
 1#(ll(;(;   $&/#))7& 1; 1, 1 9J|U$C$C 9#/#6#6#8#8L-11(KVVVV - - -"1++1,- "677 1%6688K//{97M/..000
  X</4J74S4S/VWWW '++Hg>>>>++Hg|LLLL g ((G\RRRR.   Mc!"c c c#       **>+K^LLLL#   
  -##G,,,! / %%g... GsY! Y! Y! Y! Y! Y! Y! Y! Y! Y! Y! Y! Y! Y! Y!v %T7JPPHOs   %BJ-DJ
D$DD$$B JGJH'H
J
HJH0/J0
H=:J<H==9JJ	Jhostnamestr | bytesc                    t          | t                    r|                     d          } t          t	          j        |           pt          j        |                     S )zDetects whether the hostname given is an IPv4 or IPv6 address.
    Also detects IPv6 addresses with Zone IDs.

    :param str hostname: Hostname to examine.
    :return: True if the hostname is an IP address, False otherwise.
    ascii)rC   rE   r  rK   r   matchr   )r  s    r   is_ipaddressr$    sP     (E"" ,??7++x((T,D,J8,T,TUUUr   key_filec                    t          |           5 }|D ]}d|v r ddd           dS 	 ddd           n# 1 swxY w Y   dS )z*Detects if a key file is encrypted or not.	ENCRYPTEDNTF)open)r%  flines      r   r  r  (  s    	h 1 	 	Dd""	        #	               5s   
5599c                    |r;t           st          d          t          j        |           t          | ||          S |                    | |          S )Nz0TLS in TLS requires support for the 'ssl' module)r   )r   r	   $_validate_ssl_context_for_tls_in_tlswrap_socket)r   r   r   r   s       r   r  r  3  sh      @ 	(B   	9+FFFD+???""4"IIIr   rk   ssl.TLSVersion | int | Nonec                &   d}| rt           j        | j        v rd}n\t          rUt	          | j        t           j                  r6| j        t           j        j        k    r| j        t           j        j        k    rd}|r|t           j        j        k    rd}| S )z
    Quickly uncover if passed parameters for HTTPSConnection does not exclude QUIC.
    Some parameters may defacto exclude HTTP/3 over QUIC.
    -> TLS 1.3 required
    -> One of the three supported ciphers (listed bellow)
    FNT)	r   OP_NO_TLSv1_3r   r   rC   r   r   r   r   )rk   r   quic_disables      r   is_capable_for_quicr2  F  s     L
++LL( 	$Z.
 .
 	$ #s~'GGG'3>+AAA# 2cn6LLLr   )r*   r   )r5   r6   r*   r7   )rv   rD   rw   rx   r*   rK   )
r   rD   r   r7   rv   rD   rw   rx   r*   rK   )r   r   r   rD   r*   rV   )r   r   r*   r   )r   r   r   r   r*   r   )r   r   r   r   r*   r7   )F)r   r   r   rK   r*   r   )NNNNNNN)r   rU   r   rU   r   rU   r   r   r   rU   r   rU   r   r   r*   rl   )..................)(r   r   r   r   r   r   r   rU   r   r   r   r   r   rU   r   r   r   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rU   r   rU   r*   r  )(r   r   r   r   r   r   r   rU   r   r   r   r   r   rU   r   r   r   rg   r   r   r   r   r   r   r   rK   r   r   r   r   r   r   r   r   r   rU   r   rU   r*   r  )NNNNNNNNNNNFNNNNNN)r  r   r*   rK   )r%  rD   r*   rK   r   )
r   r   r   rl   r   rK   r   r   r*   r  )rk   rg   r   r.  r*   rK   )]
__future__r   rt   r   r   r  r   socketr   r[   r   r  enumr.   binasciir   pathlibr   	_constantr   contrib.imccr   r  
exceptionsr	   r
   urlr   r   r   r   r   r  DEFAULT_CIPHERSTupler7   rD   rx   IS_PYOPENSSLr   Enumr   r4   rQ   rS   r
  r   r   TYPE_CHECKINGr   r   typing_extensionsr   ssltransportSSLTransportTyper   __annotations__r   r   r   r   r   r   r   r   r   r   r   ImportErrorPROTOCOL_SSLv23implementationnamerw   attrr   r   r   r   r   r   callabler   rK   r   r   overloadr   r   r  r$  r  r  r2  r)   r   r   <module>rL     sb   " " " " " " "       				 				  



                        0 0 0 0 0 0 B B B B B B 9 9 9 9 9 9 9 9 3 3 3 3 3 3 3 3
# *\#sCc"9:        49   
 
 
 
4 4 4 4n5M 5M 5M 5M 5M 5M 5M 5Mp ('))    :   * 
 ?))))))>>>>>> /1  0 0 0 0FJJJ                           #+++++++ # # #"# #O # ,+S+S	, , , ',# 0  	LSGDM M'5G5G5G(H(HII  	 	 	H	 +*****
 #*'#.:K"L"L3o3555G5555 %73$$ 	-#-)@)@ 	-d=3=??++GG ,G 	 	 	LKK%&&Ol&"'GGG	"
 "
 "
 "
J   .  26       38      ?D& & & & &T # &*&*%)h h h h hV  "%!),!"'*!$'*#&"%"%&)&)'    .  "%!),!"'*'*#&"%"%&)&)'+ + + + +2  "&")-"#'+'+#'"&"&&*&*'Q Q Q Q Qh
V 
V 
V 
V    #'	J J J J J&     s[   & G D G DG D*G E G  E(%G 'E((A-G G21G2