
    (ph                    h   S r SSKJr  SSKrSSKrSSKJr  SSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKJrJrJrJrJrJrJrJrJrJrJrJr  SSKrSSKJr  SSKJr  SSKJr  SS	KJr  SS
KJ r   SSK!J"r"  SSK!J#r#  SSK!J$r$  SSK!J%r%  SSK!J&r&  SSK!J'r'  SSK!J(r(  SSK!J)r)  SSK!J*r*  \	RV                  " \,5      r-Sr.Sr/Sr0Sr1Sr2Sr3Sr4Sr5Sr6Sr7Sr8Sr9Sr:S r;S!r<SkS" jr=SlS# jr>SmS% jr?      SnS& jr@SoS' jrA " S( S)\R                  " S)S*5      \R                  5      rD " S+ S,\R                  5      rF " S- S.\F5      rG " S/ S0\F5      rH " S1 S$\I5      rJSpS2 jrK      SqS3 jrLSrS4 jrM      SsS5 jrN      StS6 jrO          SuS7 jrPSvS8 jrQ        SwS9 jrRSvS: jrSSrS; jrT " S< S=\R                  5      rV " S> S?\I5      rW        SxS@ jrX Sy             SzSA jjrY        S{SB jrZ          S|SC jr[    S}SD jr\SpSE jr]        S~SF jr^        SSG jr_              SSH jr`              SSI jraSSJ jrb          SSK jrc      SSL jrd          SSM jre          SSN jrf          SSO jrg          SSP jrh          SSQ jri        SSR jrj          SSS jrk            SST jrl\R                   " SU SV\R                  5      5       ro " SW SX\I5      rp      SSY jrq      SSZ jrrSS[ jrs        SS\ jrtSS] jruSS^ jrvSS_ jrwSS` jrx      SSa jrySSb jrzSSc jr{SSd jr|SSe jr}    SSf jr~        SSg jr " Sh Si\GR                   5      r                SSj jrg)z+Service-side implementation of gRPC Python.    )annotationsN)futures)AnyCallableDictIterableIteratorListMappingOptionalSequenceSetTupleUnion)_common)_compression)_interceptor)_observability)cygrpc)ArityAgnosticMethodHandler)ChannelArgumentType)DeserializingFunction)MetadataType)NullaryCallbackType)ResponseType)SerializingFunction)ServerCallbackTag)ServerTagCallbackTypeshutdownrequest_callreceive_close_on_serversend_initial_metadatareceive_messagesend_messagez$send_initial_metadata * send_messagesend_status_from_serverz/send_initial_metadata * send_status_from_serveropenclosed	cancelledg      ?g    eAc                <    U R                   S   R                  5       $ Nr   )batch_operationsmessage)request_events    ?/var/www/html/venv/lib/python3.13/site-packages/grpc/_server.py_serialized_requestr/   U   s    ))!,4466    c                ~    [         R                  R                  U 5      nUc  [        R                  R
                  $ U$ N)r   !STATUS_CODE_TO_CYGRPC_STATUS_CODEgetr   
StatusCodeunknown)codecygrpc_codes     r.   _application_coder9   Y   s4    ;;??EK(3(;6$$LLr0   	_RPCStatec                z    U R                   c  [        R                  R                  $ [	        U R                   5      $ r2   )r7   r   r5   okr9   states    r.   _completion_coder?   ^   s-    zz  ### ,,r0   c                J    U R                   c  U$ [        U R                   5      $ r2   )r7   r9   )r>   r7   s     r.   _abortion_coderA   e   s"     zz ,,r0   c                8    U R                   c  S$ U R                   $ )Nr0   )detailsr=   s    r.   _detailsrD   n   s    --'3:U]]:r0   c                      \ rS rSrSrg)_HandlerCallDetailsr    N)__name__
__module____qualname____firstlineno____static_attributes__rH   r0   r.   rF   rF   r   s     	r0   rF   )methodinvocation_metadatac                  l    \ rS rSr\R
                  SS j5       r\R
                      SS j5       rSrg)_Method   c                    [        5       er2   NotImplementedErrorselfs    r.   name_Method.name   s    !##r0   c                    [        5       er2   rT   rW   handler_call_detailss     r.   handler_Method.handler   s     "##r0   rH   NreturnzOptional[str]r\   rF   r`   Optional[grpc.RpcMethodHandler])	rI   rJ   rK   rL   abcabstractmethodrX   r]   rM   rH   r0   r.   rQ   rQ      sD    $ $ 	$$7$	($ $r0   rQ   c                  B    \ rS rSr    SS jrSS jr    S	S jrSrg)
_RegisteredMethod   c                    Xl         X l        g r2   _name_registered_handler)rW   rX   registered_handlers      r.   __init___RegisteredMethod.__init__   s    
 
#5 r0   c                    U R                   $ r2   )rj   rV   s    r.   rX   _RegisteredMethod.name   s    zzr0   c                    U R                   $ r2   )rk   r[   s     r.   r]   _RegisteredMethod.handler   s     '''r0   ri   N)rX   strrl   rb   r_   ra   rI   rJ   rK   rL   rm   rX   r]   rM   rH   r0   r.   rf   rf      s3    66 <6($7(	((r0   rf   c                  >    \ rS rSr  SS jrSS jr    S	S jrSrg)
_GenericMethod   c                    Xl         g r2   _generic_handlers)rW   generic_handlerss     r.   rm   _GenericMethod.__init__   s
     "2r0   c                    g r2   rH   rV   s    r.   rX   _GenericMethod.name   s    r0   c                Z    U R                    H  nUR                  U5      nUc  M  Us  $    g r2   )rz   service)rW   r\   generic_handlermethod_handlers       r.   r]   _GenericMethod.handler   s6    
  $55O,445IJN)%%  6 r0   ry   N)r{   List[grpc.GenericRpcHandler]r_   ra   rt   rH   r0   r.   rv   rv      s)    262	$7		(	r0   rv   c                      \ rS rSr% S\S'   S\S'   \\   rS\S'   S\S	'   S
\S'   S\S'   S
\S'   S\S'   S\S'   S\S'   S
\S'   S\S'   S\S'   S
\S'   S rSr	g)r:      zcontextvars.Contextcontextzthreading.Condition	conditionr   requestrs   clientboolinitial_metadata_allowedOptional[grpc.Compression]compression_algorithmdisable_next_compressionOptional[MetadataType]trailing_metadatazOptional[grpc.StatusCode]r7   Optional[bytes]rC   statusedzList[Exception]
rpc_errorsz#Optional[List[NullaryCallbackType]]	callbacksabortedc                :   [         R                  " 5       U l        [        R                  " 5       U l        [        5       U l        S U l        [        U l
        SU l        S U l        SU l        S U l        S U l        S U l        SU l        / U l        / U l        SU l        g NTF)contextvarsContextr   	threading	Conditionr   setduer   _OPENr   r   r   r   r   r7   rC   r   r   r   r   rV   s    r.   rm   _RPCState.__init__   s    "**,",,.5(,%%)"(-%!%	r0   )r   r   r   r7   r   r   r   rC   r   r   r   r   r   r   r   N)
rI   rJ   rK   rL   __annotations__r   rs   r   rm   rM   rH   r0   r.   r:   r:      s`      ""
c(CLK""55""--
##N22Mr0   c                f    [         R                  " 5       nU R                  R                  U5        Uer2   )grpcRpcErrorr   append)r>   	rpc_errors     r.   _raise_rpc_errorr      s&    I	I&
Or0   c                    U R                   R                  U5        [        U 5      (       d'  U R                   (       d  U R                  nS U l        X4$ g)NNrH   )r   remove_is_rpc_state_activer   )r>   tokenr   s      r.   _possibly_finish_callr      sC     
IIU&&uyyOO	r0   c                   ^ ^ U U4S jnU$ )Nc                j   > TR                      [        TT5      sS S S 5        $ ! , (       d  f       g = fr2   )r   r   )$unused_send_status_from_server_eventr>   r   s    r.   r%   9_send_status_from_server.<locals>.send_status_from_server   s    __(6 __s   $
2rH   )r>   r   r%   s   `` r.   _send_status_from_serverr      s    7 #"r0   c                   U R                      U R                  (       aF  [        R                  " U R                  5      4nUc  UsS S S 5        $ U[	        U5      -   sS S S 5        $ UsS S S 5        $ ! , (       d  f       g = fr2   )r   r   r   !compression_algorithm_to_metadatatuple)r>   metadatacompression_metadatas      r.   _get_initial_metadatar      si     
&&>>//$ 
 + 
 ,eHo= 
  
s   7A0A0%A00
A>c                N    [         R                  " [        X5      [        5      nU$ r2   )r   SendInitialMetadataOperationr   _EMPTY_FLAGS)r>   r   	operations      r.   _get_initial_metadata_operationr     s&     33e.I r0   c                   U R                   [        La  [        X5      nU R                  c  UOU R                  nU R                  (       a:  [        U S 5      [        R                  " U R                  UU[        5      4n[        nO.[        R                  " U R                  UU[        5      4n[        nUR                  U[        X5      5        SU l        U R                  R!                  U5        g g NT)r   
_CANCELLEDrA   rC   r   r   r   SendStatusFromServerOperationr   r   8_SEND_INITIAL_METADATA_AND_SEND_STATUS_FROM_SERVER_TOKEN_SEND_STATUS_FROM_SERVER_TOKENstart_server_batchr   r   r   add)r>   callr7   rC   effective_codeeffective_details
operationsr   s           r.   _abortr     s     ||:%'4',}}'<G%--))/t<44++"% 	J ME 44++"% 	J 3E0>	
 		e9 &r0   c                   ^  U 4S jnU$ )Nc                >  > TR                      U R                  S   R                  5       (       a  [        Tl        OTR                  [
        L a  [        Tl        TR                   R                  5         [        T[        5      sS S S 5        $ ! , (       d  f       g = fr*   )
r   r+   r(   r   r   r   _CLOSED
notify_allr   _RECEIVE_CLOSE_ON_SERVER_TOKEN)receive_close_on_server_eventr>   s    r.   r!   9_receive_close_on_server.<locals>.receive_close_on_server.  sc    __,==a@JJLL)&&OO&&((0NO __s   A6B
BrH   )r>   r!   s   ` r.   _receive_close_on_serverr   -  s    P #"r0   c                   ^ ^^ UUU 4S jnU$ )Nc                0  > [        U 5      nUc^  TR                     TR                  [        L a  [        Tl        TR                  R                  5         [        T[        5      sS S S 5        $ [        R                  " UT5      nTR                     Uc'  [        TT[        R                  R                  S5        OUTl        TR                  R                  5         [        T[        5      sS S S 5        $ ! , (       d  f       g = f! , (       d  f       g = f)Ns    Exception deserializing request!)r/   r   r   r   r   r   r   _RECEIVE_MESSAGE_TOKENr   deserializer   r   r5   internalr   )receive_message_eventserialized_requestr   r   request_deserializerr>   s      r.   r#   )_receive_message.<locals>.receive_message?  s    01FG%<<5(#*EL**,,U4JK	 ! ))"$8G ?))22;	 %,EM**,,U4JK ! ! !s   AC6AD6
D
DrH   )r>   r   r   r#   s   ``` r.   _receive_messager   :  s    
L2 r0   c                   ^  U 4S jnU$ )Nc                r   > TR                      [        T[        5      sS S S 5        $ ! , (       d  f       g = fr2   )r   r   _SEND_INITIAL_METADATA_TOKEN)"unused_send_initial_metadata_eventr>   s    r.   r"   5_send_initial_metadata.<locals>.send_initial_metadata\  s    __(0LM __s   (
6rH   )r>   r"   s   ` r.   _send_initial_metadatar   [  s    N ! r0   c                   ^ ^ U U4S jnU$ )Nc                   > TR                      TR                   R                  5         [        TT5      sS S S 5        $ ! , (       d  f       g = fr2   )r   r   r   )unused_send_message_eventr>   r   s    r.   r$   #_send_message.<locals>.send_messaged  s.    __OO&&((6 __s	   &>
ArH   )r>   r   r$   s   `` r.   _send_messager   c  s    7
 r0   c                     \ rS rSr% S\S'   S\S'   S\S'         S S jrS!S	 jrS"S
 jrS#S jrS$S jr	S#S jr
S%S jrS&S jrS'S jrS(S jrS)S jrS*S jrS+S jrS,S jrS%S jrS-S jrS.S jrS/S jrS0S jrS1S jrS2S jrS#S jrSrg)3_Contextil  cygrpc.BaseEvent
_rpc_eventr:   _stateOptional[DeserializingFunction]r   c                (    Xl         X l        X0l        g r2   )r   r   _request_deserializer)rW   	rpc_eventr>   r   s       r.   rm   _Context.__init__q  s     $%9"r0   c                    U R                   R                     [        U R                   5      sS S S 5        $ ! , (       d  f       g = fr2   )r   r   r   rV   s    r.   	is_active_Context.is_active{  s'    [[""'4 #""s	   6
Ac                    [        U R                  R                  R                  [        R                  " 5       -
  S5      $ r*   )maxr   call_detailsdeadlinetimerV   s    r.   time_remaining_Context.time_remaining  s*    4??//88499;FJJr0   c                L    U R                   R                  R                  5         g r2   )r   r   cancelrV   s    r.   r   _Context.cancel  s    ##%r0   c                    U R                   R                     U R                   R                  c
   S S S 5        gU R                   R                  R                  U5         S S S 5        g! , (       d  f       g = f)NFT)r   r   r   r   )rW   callbacks     r.   add_callback_Context.add_callback  sS    [[""{{$$, #" %%,,X6 #""s   A(&A((
A6c                    U R                   R                     SU R                   l        S S S 5        g ! , (       d  f       g = fr   )r   r   r   rV   s    r.    disable_next_message_compression)_Context.disable_next_message_compression  s'    [[""37DKK0 #""s	   2
A c                .    U R                   R                  $ r2   )r   rO   rV   s    r.   rO   _Context.invocation_metadata  s    222r0   c                r    [         R                  " U R                  R                  R	                  5       5      $ r2   )r   decoder   r   peerrV   s    r.   r
  _Context.peer  s$    ~~doo22779::r0   c                V    [         R                  " U R                  R                  5      $ r2   )r   peer_identitiesr   r   rV   s    r.   r  _Context.peer_identities  s    %%doo&:&:;;r0   c                    [         R                  " U R                  R                  5      nUc  U$ [        R
                  " U5      $ r2   )r   peer_identity_keyr   r   r   r	  )rW   id_keys     r.   r  _Context.peer_identity_key  s4    ))$//*>*>?vCW^^F-CCr0   c                    [         R                  " U R                  R                  5      nUc  0 OUnUR	                  5        VVs0 s H  u  p4[
        R                  " U5      U_M     snn$ s  snnf r2   )r   auth_contextr   r   itemsr   r	  )rW   r  auth_context_dictkeyvalues        r.   r  _Context.auth_context  si    **4??+?+?@"."6BL 0557
7
 NN3&7
 	
 
s   #A,c                    U R                   R                     XR                   l        S S S 5        g ! , (       d  f       g = fr2   )r   r   r   )rW   compressions     r.   set_compression_Context.set_compression  s%    [[""0;KK- #""   1
?c                ,   U R                   R                     U R                   R                  [        L a  [	        U R                   5        OU R                   R
                  (       a  [        U R                   U5      nU R                  R                  R                  U4[        U R                   5      5        SU R                   l        U R                   R                  R                  [        5        O[        S5      eS S S 5        g ! , (       d  f       g = f)NFz#Initial metadata no longer allowed!)r   r   r   r   r   r   r   r   r   r   r   r   r   r   
ValueError)rW   initial_metadatar   s      r.   r"   _Context.send_initial_metadata  s    [[""{{!!Z/ -;;77 ?%5!I OO((;;"&<T[[&I <ADKK8KKOO''(DE$%JKK #""s   C%D
Dc                    U R                   R                     XR                   l        S S S 5        g ! , (       d  f       g = fr2   )r   r   r   )rW   r   s     r.   set_trailing_metadata_Context.set_trailing_metadata  s%    [["",=KK) #""r  c                .    U R                   R                  $ r2   )r   r   rV   s    r.   r   _Context.trailing_metadata  s    {{,,,r0   c                   U[         R                  R                  :X  a1  [        R	                  S5        [         R                  R
                  nSnU R                  R                     XR                  l        [        R                  " U5      U R                  l        SU R                  l        [        5       e! , (       d  f       g = f)Nz4abort() called with StatusCode.OK; returning UNKNOWN T)r   r5   OK_LOGGERerrorUNKNOWNr   r   r7   r   encoderC   r   	Exception)rW   r7   rC   s      r.   abort_Context.abort  s    4??%%%MMF ??**DG[[""#KK").."9DKK"&DKK+	 #"s   &AB77
Cc                    UR                   U R                  l         U R                  UR                  UR                  5        g r2   )r   r   r0  r7   rC   )rW   statuss     r.   abort_with_status_Context.abort_with_status  s*    (.(@(@%

6;;/r0   c                    U R                   R                     XR                   l        S S S 5        g ! , (       d  f       g = fr2   )r   r   r7   )rW   r7   s     r.   set_code_Context.set_code  s%    [[""#KK #""r  c                .    U R                   R                  $ r2   )r   r7   rV   s    r.   r7   _Context.code  s    {{r0   c                    U R                   R                     [        R                  " U5      U R                   l        S S S 5        g ! , (       d  f       g = fr2   )r   r   r   r.  rC   )rW   rC   s     r.   set_details_Context.set_details  s0    [[""").."9DKK #""s   &A
Ac                .    U R                   R                  $ r2   )r   rC   rV   s    r.   rC   _Context.details  s    {{"""r0   c                    g r2   rH   rV   s    r.   _finalize_state_Context._finalize_state  s    r0   )r   r   r   N)r   r   r>   r:   r   r   )r`   r   )r`   floatr`   None)r   r   r`   r   )r`   r   )r`   rs   )r`   zOptional[Sequence[bytes]]r_   )r`   zMapping[str, Sequence[bytes]])r  zgrpc.Compressionr`   rE  )r!  r   r`   rE  )r   r   r`   rE  )r7   grpc.StatusCoderC   rs   r`   rE  )r3  zgrpc.Statusr`   rE  )r7   rF  r`   rE  )r`   rF  )rC   rs   r`   rE  )r`   bytes)rI   rJ   rK   rL   r   rm   r   r   r   r  r  rO   r
  r  r  r  r  r"   r$  r   r0  r4  r7  r7   r<  rC   rA  rM   rH   r0   r.   r   r   l  s      99:#: : >	:5K&83;<D
<L">-0$ :#r0   r   c                      \ rS rSr% S\S'   S\S'   S\S'         SS jrSS	 jrSS
 jrSS jrSS jr	SS jr
SS jrSrg)_RequestIteratori  r:   r   cygrpc.Call_callr   r   c                (    Xl         X l        X0l        g r2   )r   rK  r   )rW   r>   r   r   s       r.   rm   _RequestIterator.__init__  s     
%9"r0   c                   U R                   R                  [        L a  [        U R                   5        g [	        U R                   5      (       d
  [        5       eU R                  R                  [        R                  " [        5      4[        U R                   U R                  U R                  5      5        U R                   R                  R                  [        5        g r2   )r   r   r   r   r   StopIterationrK  r   r   ReceiveMessageOperationr   r   r   r   r   r   rV   s    r.   _raise_or_start_receive_message0_RequestIterator._raise_or_start_receive_message  s    ;;+T[[)%dkk22/!JJ))//=? KKT-G-G KKOO 67r0   c                J   U R                   R                  [        L a  [        U R                   5        [        5       eU R                   R                  c(  [
        U R                   R                  ;  a
  [        5       eU R                   R                  nS U R                   l        U$ r2   )	r   r   r   r   r   r   r   rO  AssertionErrorrW   r   s     r.   _look_for_request"_RequestIterator._look_for_request  su    ;;+T[[)  KK'&dkkoo=/!kk))G"&DKKNr0   c                    U R                   R                     U R                  5          U R                   R                  R                  5         U R	                  5       nUb  UsS S S 5        $ MD  ! , (       d  f       g = fr2   )r   r   rQ  waitrV  rU  s     r.   _next_RequestIterator._next  s_    [[""002%%**,002&" #" #"s   A
A-+A--
A;c                    U $ r2   rH   rV   s    r.   __iter___RequestIterator.__iter__  s    r0   c                "    U R                  5       $ r2   rZ  rV   s    r.   __next___RequestIterator.__next__      zz|r0   c                "    U R                  5       $ r2   r`  rV   s    r.   next_RequestIterator.next!  rc  r0   )rK  r   r   N)r>   r:   r   rJ  r   r   rD  )r`   r   )r`   rI  )rI   rJ   rK   rL   r   rm   rQ  rV  rZ  r]  ra  re  rM   rH   r0   r.   rI  rI    sS    :::: : >	:8#r0   rI  c                   ^ ^^ UU U4S jnU$ )Nc            	       > TR                      [        T5      (       d
   S S S 5        g TR                  R                  [        R
                  " [        5      4[        TTR                  T5      5        TR                  R                  [        5         TR                   R                  5         TR                  c  TR                  [        L as  SR                  TR                   R"                  5      n [%        TTR                  [        R&                  R(                  [*        R,                  " U 5      5         S S S 5        g TR                  [.        L a
   S S S 5        g OTR                  nS Tl        UsS S S 5        $ M  ! , (       d  f       g = f)Nz*"{}" requires exactly one request message.)r   r   r   r   r   rP  r   r   r   r   r   rY  r   r   r   formatr   rN   r   r5   unimplementedr   r.  r   )rC   r   r   r   r>   s     r.   unary_request%_unary_request.<locals>.unary_request*  s4   __'.. _ 1133LAC$y~~/C 		45OO((*}}, <<72&R&Y&Y ) 6 6 = ='G # % ) & 1 1 ? ? 'w 7	 $(1 _2 #\\Z7#'5 _2 8 #(--(,&= _  _s#   E>DE> E>E><E>>
FrH   )r   r>   r   rk  s   ``` r.   _unary_requestrm  %  s    
'B r0   c                `   SSK Jn  U" XU5       n S nUb
  U" X7U5      nOU" X75      nUS4sS S S 5        $ ! [         Ga[  n	UR                     UR                  (       a1  [        UU R                  [        R                  R                  S5        OXR                  ;  a   SR                  U	5      n
Oe! [         aX    Sn
[        R                  [        R                  " [!        U	5      U	U	R"                  5      5        [        R$                  " 5          Of = f[        R                  U
5        [        UU R                  [        R                  R                  [&        R(                  " U
5      5        S S S 5        O! , (       d  f       O= f S n	A	S S S 5        gS n	A	ff = f! , (       d  f       g = f)Nr   )_create_servicer_contextT   RPC Abortedz!Exception calling application: {}z1Calling application raised unprintable Exception!NF)r   ro  r/  r   r   r   r   r   r5   r6   r   ri  r+  	exception	tracebackformat_exceptiontype__traceback__	print_excr   r.  )r   r>   behaviorargumentr   send_response_callbackro  r   response_or_iteratorrr  rC   s              r.   _call_behaviorr|  N  s~    .	!.
	*	#' %1'/'=($ (0'B$'-
 
  !	==!))11&	 &6&66."E"L"L%# % .O    ))%66 $Y ) ) 7 7 "++-. %%g.!))11w/	5 !@ [
 
!	
 
sk   F6FFAE9 B21E92AD	E9D	AE90	F9
FF
FFF
F-c           
     &    [        U5      S4$ ! [         a     g[         a  nUR                     UR                  (       a1  [        UU R                  [        R                  R                  S5        OyX1R                  ;  aj  SR                  U5      n[        R                  U5        [        UU R                  [        R                  R                  [        R                  " U5      5        S S S 5        O! , (       d  f       O= f S nAgS nAff = f)NTr   rp  z!Exception iterating responses: {}rq  )re  rO  r/  r   r   r   r   r   r5   r6   r   ri  r+  rr  r   r.  )r   r>   response_iteratorrr  rC   s        r.   %_take_response_from_response_iteratorr    s    
%&,,  __}}NN%%--"	 "2"22=DDYO!!'*NN%%--NN7+	 __" %s1    
D	DDB<C5,	D5
D	?DDc                    [         R                  " X#5      nUcF  UR                     [        UU R                  [
        R                  R                  S5        S S S 5        g U$ ! , (       d  f       g = f)Ns   Failed to serialize response!)r   	serializer   r   r   r   r5   r   )r   r>   responseresponse_serializerserialized_responses        r.   _serialize_responser    sc     "++HJ"__!!**0	  "" _ s   1A""
A0c                d    U R                   (       a  [        R                  R                  $ [        $ r2   )r   r   	WriteFlagno_compressr   r=   s    r.   %_get_send_message_op_flags_from_stater    s%     %%+++r0   c                ^    U R                      SU l        S S S 5        g ! , (       d  f       g = frq  )r   r   r=   s    r.   _reset_per_message_stater    s    	).& 
s   
,c                l   UR                      [        U5      (       d
   S S S 5        gUR                  (       a:  [        US 5      [        R
                  " U[        U5      5      4nSUl        [        nO'[        R
                  " U[        U5      5      4n[        nU R                  R                  U[        X5      5        UR                  R                  U5        [        U5         UR                   R                  5         XAR                  ;  a  [        U5      sS S S 5        $ M?  ! , (       d  f       g = frq  )r   r   r   r   r   SendMessageOperationr  -_SEND_INITIAL_METADATA_AND_SEND_MESSAGE_TOKEN_SEND_MESSAGE_TOKENr   r   r   r   r   r  rY  )r   r>   r  r   r   s        r.   _send_responser    s     
#E** 
 --3E4@//+=eD
 27.E //+=eD
 ,NN--M%7 IIMM% $U+$$&		)/6= 
6 7 
s   D%C1D%#D%%
D3c           	     b   UR                      UR                  [        La  [        U5      n[	        U5      n[
        R                  " UR                  X4[        5      /nUR                  (       a  UR                  [        US 5      5        Ub/  UR                  [
        R                  " U[        U5      5      5        U R                  R                  U[!        U["        5      5        SUl        ['        U5        UR(                  R+                  ["        5        S S S 5        g ! , (       d  f       g = fr   )r   r   r   r?   rD   r   r   r   r   r   r   r   r  r  r   r   r   r   r   r  r   r   )r   r>   r  r7   rC   r   s         r.   _statusr    s    
 
<<z)#E*DuoG44++TLJ
 --!!"A%"NO".!!//+=eD NN--(0NO "EN$U+IIMM891 
s   D
D  
D.c                P   [         R                  " U 5         U" 5       nUb1  [        XX&U5      u  pxU(       a  [        XXu5      n	U	b  [	        XU	5        [         R                  " 5         g ! [
         a    [        R                  " 5          N7f = f! [         R                  " 5         f = fr2   )	r   'install_context_from_request_call_eventr|  r  r  r/  rs  rw  uninstall_context)
r   r>   rx  argument_thunkr   r  ry  r  proceedr  s
             r.   _unary_response_in_poolr    s     229=#!# .(6J!H &9h'# '2I.AB 	  "   	  "s#   ;A) )BB 
BB B%c           	       ^ ^^ [         R                  " T 5        SUU U4S jjn U" 5       nUbU  [        US5      (       a   UR                  (       a  [	        T TUUUUS9  O$[	        T TX'U5      u  pU	(       a  [        T TXh5        [         R                  " 5         g ! [         a    [        R                  " 5          N7f = f! [         R                  " 5         f = f)Nc                f   > U c  [        TTS 5        g [        TTU T5      nUb  [        TTU5        g g r2   )r  r  r  )r  r  r  r   r>   s     r.   send_response/_stream_response_in_pool.<locals>.send_response2  sD    Iud+"55(,?# #.y%1DE /r0   experimental_non_blocking)rz  )r  r   r`   rE  )
r   r  hasattrr  r|  3_send_message_callback_to_blocking_iterator_adapterr/  rs  rw  r  )
r   r>   rx  r  r   r  r  ry  r~  r  s
   ``   `    r.   _stream_response_in_poolr  (  s     229=F F#!#"=>>66(+8 .<uh:N.*! G!5- 	  "   	  "s/   :B B?  $B B<9B? ;B<<B? ?Cc                V    U R                   [        L=(       a    U R                  (       + $ r2   )r   r   r   r=   s    r.   r   r   Y  s    <<z)@%...@@r0   c                h     [        XU5      u  pEU(       a  U" U5        [        U5      (       d  g Og M2  r2   )r  r   )r   r>   rz  r~  r  r  s         r.   r  r  ]  sD     A/
 "8,'.. /  r0   c                    [        U S5      (       a5  [        U R                  [        R                  5      (       a  U R                  $ U$ )Nexperimental_thread_pool)r  
isinstancer  r   ThreadPoolExecutor)rx  default_thread_pools     r.    _select_thread_pool_for_behaviorr  o  sC     x344))7+E+E: : 000""r0   c           
         [        XUR                  5      n[        UR                  U5      nUR	                  UR
                  R                  [        U UUR                  UUR                  UR                  5      $ r2   )	rm  r   r  unary_unarysubmitr   runr  r  r   r>   r   r  rk  thread_pools         r.   _handle_unary_unaryr  {  sz     #.==M 3""$7K ""++**	 	r0   c           
         [        XUR                  5      n[        UR                  U5      nUR	                  UR
                  R                  [        U UUR                  UUR                  UR                  5      $ r2   )	rm  r   r  unary_streamr  r   r  r  r  r  s         r.   _handle_unary_streamr    sz     #.==M 3##%8K  ##++**	 	r0   c           
       ^ [        XR                  UR                  5      m[        UR                  U5      nUR                  UR                  R                  [        U UUR                  U4S jUR                  UR                  5      $ )Nc                    > T $ r2   rH   request_iterators   r.   <lambda>&_handle_stream_unary.<locals>.<lambda>       r0   )
rI  r   r   r  stream_unaryr  r   r  r  r  r   r>   r   r  r  r  s        @r.   _handle_stream_unaryr    s     (~~~BB 3##%8K ## ++**	 	r0   c           
       ^ [        XR                  UR                  5      m[        UR                  U5      nUR                  UR                  R                  [        U UUR                  U4S jUR                  UR                  5      $ )Nc                    > T $ r2   rH   r  s   r.   r  '_handle_stream_stream.<locals>.<lambda>  r  r0   )
rI  r   r   r  stream_streamr  r   r  r  r  r  s        @r.   _handle_stream_streamr    s     (~~~BB 3$$&9K  $$ ++**	 	r0   c                R  ^     SU4S jjnTR                  5       nU(       d*  [        R                  " U R                  R                  5      n[        UU R                  5      nUb&  UR                  R                  UR                  XF5      $ UR                  R                  XF5      $ )Nc                &   > TR                  U 5      $ r2   )r]   )r\   method_with_handlers    r.   query_handlers,_find_method_handler.<locals>.query_handlers  s     #**+?@@r0   ra   )
rX   r   r	  r   rN   rF   rO   r   r  execute)r   r>   r  interceptor_pipeliner  method_namer\   s     `    r.   _find_method_handlerr    s    A1A	(A
 &**,KnnY%;%;%B%BC.%%
 '}}   ((.
 	
 }}  FFr0   c                   ^ [        TS 5      [        R                  " [        5      [        R                  " S X#[        5      4nU R
                  R                  UU4S j5        g )Nc                   > TS4$ r   rH   )ignored_event	rpc_states    r.   r  _reject_rpc.<locals>.<lambda>  s    
r0   )r   r   ReceiveCloseOnServerOperationr   r   r   r   )r   r  r3  rC   r   s    `   r.   _reject_rpcr    sU     	(	48,,\:,,&<	
J NN%%	
r0   c                   UR                      U R                  R                  [        R                  " [
        5      4[        U5      5        UR                  R                  [        5        UR                  (       a;  UR                  (       a  [        XX#5      sS S S 5        $ [        XX#5      sS S S 5        $ UR                  (       a  [        XX#5      sS S S 5        $ [        XX#5      sS S S 5        $ ! , (       d  f       g = fr2   )r   r   r   r   r  r   r   r   r   r   request_streamingresponse_streamingr  r  r  r  )r   r>   r   r  s       r.   _handle_with_method_handlerr    s     
))11,?A$U+	
 			45++00,n 
 ,n 
  00+n# 
* +n+ 
s   BC2"C27C2C22
D c                `   U R                   (       d  gU R                  R                  (       d  UR                  5       (       a  [	        5       n [        U UUU5      nUc*  [        U U[        R                  R                  S5        US4$ U(       a*  [        U U[        R                  R                  S5        US4$ U[!        XXc5      4$ g! [         aZ  nSR                  U5      n[        R                  U5        [        U U[        R                  R                  S5        US4s SnA$ SnAff = f)a  Handles RPC based on provided handlers.

  When receiving a call event from Core, registered method will have its
name as tag, we pass the tag as registered_method_name to this method,
then we can find the handler in registered_method_handlers based on
the method name.

  For call event with unregistered method, the method name will be included
in rpc_event.call_details.method and we need to query the generics handlers
to find the actual handler.
)NNzException servicing handler: {}s   Error in service handler!Ns   Method not found!s   Concurrent RPC limit exceeded!)successr   rN   rX   r:   r  r/  ri  r+  rr  r  r   r5   r6   rj  resource_exhaustedr  )	r   r  r  r  concurrency_exceededr  r   rr  rC   s	            r.   _handle_callr  -  s1   $ $$(;(@(@(B(BK		#1#$	N  !!!//$	 d?"!!!441	 d?" +.  E  		#7>>yIGg&!!)),	 d?"		#s   C	 	
D-AD("D-(D-c                       \ rS rSrSrSrSrSrg)_ServerStageio  stoppedstartedgracerH   N)rI   rJ   rK   rL   STOPPEDSTARTEDGRACErM   rH   r0   r.   r  r  o  s    GGEr0   r  c                      \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'               S#S  jrS!rg")$_ServerStateiv  zthreading.RLocklockcygrpc.CompletionQueuecompletion_queuecygrpc.Serverserverr   r{    Dict[str, grpc.RpcMethodHandler]registered_method_handlers'Optional[_interceptor._ServicePipeline]r  futures.ThreadPoolExecutorr  r  stagethreading.Eventtermination_eventzList[threading.Event]shutdown_eventsOptional[int]maximum_concurrent_rpcsintactive_rpc_countzSet[_RPCState]
rpc_stateszSet[str]r   r   server_deallocatedc                |   [         R                  " 5       U l        Xl        X l        [        U5      U l        X@l        XPl        [        R                  U l        [         R                  " 5       U l        U R                  /U l        X`l        SU l        0 U l        [%        5       U l        [%        5       U l        SU l        g )Nr   F)r   RLockr  r  r  listr{   r  r  r  r  r  Eventr  r  r  r  r  r   r  r   r  )rW   r  r  r{   r  r  r  s          r.   rm   _ServerState.__init__  s     OO%	 0 $%5 6$8!&!))
!*!2 $ 6 67'>$ !*,' %5 #(r0   )r  r  r   r{   r  r  r  r  r  r  r  r  r  r  r  N)r  r  r  r  r{    Sequence[grpc.GenericRpcHandler]r  r  r  r  r  r  )rI   rJ   rK   rL   r   rm   rM   rH   r0   r.   r  r  v  s    
,,22 @@AA++&&****	M(0( ( ;	(
 F( 0( "/(r0   r  c                    U R                      U R                  R                  U5        S S S 5        g ! , (       d  f       g = fr2   )r  r{   extend)r>   r{   s     r.   _add_generic_handlersr     s*     
%%&67 
	   2
A c                    U R                      U R                  R                  U5        S S S 5        g ! , (       d  f       g = fr2   )r  r  update)r>   method_handlerss     r.   _add_registered_method_handlersr    s)     
((//@ 
r  c                    U R                      U R                  R                  U5      sS S S 5        $ ! , (       d  f       g = fr2   )r  r  add_http2_port)r>   addresss     r.   _add_insecure_portr	    s%    	||**73 
s	   2
A c                    U R                      U R                  R                  XR                  5      sS S S 5        $ ! , (       d  f       g = fr2   )r  r  r  _credentials)r>   r  server_credentialss      r.   _add_secure_portr    s0    
 
||**44
 
s	   %<
A
c                    U R                   R                  U R                  U R                  [        5        U R                  R                  [        5        g r2   )r  r    r  _REQUEST_CALL_TAGr   r   r=   s    r.   _request_callr    s;    	LL 6 68I 
IIMM#$r0   c                    UnU R                   R                  U R                  U R                  UU5        U R                  R	                  U5        g r2   )r  request_registered_callr  r   r   )r>   rN   registered_call_tags      r.   _request_registered_callr    sE     	LL((	 
IIMM%&r0   c                    U R                   (       dd  U R                  (       dS  U R                  R                  5         U R                   H  nUR                  5         M     [        R                  U l        ggr   )	r  r   r  destroyr  r   r  r  r  )r>   shutdown_events     r.   _stop_servingr    sP    EII#33N  4"**r0   c                z    U R                      U =R                  S-  sl        S S S 5        g ! , (       d  f       g = f)N   )r  r  r=   s    r.   _on_call_completedr    s$    	!# 
s   ,
:c                ,  ^  SnUR                   [        L aH  T R                     T R                  R	                  [        5        [        T 5      (       a  SnS S S 5        U$ UR                   [        L d)  UR                   T R                  R                  5       ;   Ga  S nUR                   T R                  R                  5       ;   a3  UR                   n[        UT R                  R                  US 5      5      nO[        T R                  5      nT R                     T R                  R	                  UR                   5        T R                  S L=(       a    T R                  T R                  :  n[        UUT R                   T R"                  U5      u  pgUb  T R$                  R'                  U5        Ub*  T =R                  S-  sl        UR)                  U 4S j5        T R*                  [,        R.                  L a7  UT R                  R                  5       ;   a  [1        T U5        O[3        T 5        O[        T 5      (       a  SnS S S 5        U$ UR                  U5      u  phU H  n	 U	" 5         M     UbD  T R                     T R$                  R	                  U5        [        T 5      (       a  SnS S S 5        U$ U$ ! , (       d  f       U$ = f! , (       d  f       U$ = f! [4         a    [6        R9                  S5         M  f = f! , (       d  f       U$ = f)NTFr  c                   > [        T5      $ r2   )r  )unused_futurer>   s    r.   r  -_process_event_and_continue.<locals>.<lambda>  s    *<U*Cr0   zException calling callback!)tag_SHUTDOWN_TAGr  r   r   r  r  r  keysrf   r4   rv   r{   r  r  r  r  r  r  r   add_done_callbackr  r  r  r  r  r/  r+  rr  )
r>   eventshould_continueregistered_method_namer  r  r  
rpc_futurer   r   s
   `         r.   _process_event_and_continuer(    s    OyyM!ZZII]+U##"' ~ u 			&&9988==??!%9988==??%*YY""3&0044*D# #1&&# ZZIIUYY'--T9 L**e.K.KK ! %1#**!!$%!I $  $$Y/%&&!+&,,C {{l222*77<<>? -U4JK!%(u%%"'; T   %yy/	!HA
 "
    ''	2 ''&+O  ? Z~ U ZT   A!!"?@A  s6   2J:D*K&K .L:
K	
KL L
Lc                $    [         R                   " 5       [        -   nU R                  R                  U5      nU R                  (       a  [        U 5        UR                  [        R                  R                  :w  a  [        X5      (       d  g S nM  r2   )r   "_DEALLOCATED_SERVER_CHECK_PERIOD_Sr  pollr  _begin_shutdown_oncecompletion_typer   CompletionTypequeue_timeoutr(  )r>   timeoutr$  s      r.   _server1  /  sq    
))+ BB&&++G4## '  F$9$9$G$GG.u<<  r0   c                F   U R                      U R                  [        R                  L a^  U R                  R                  U R                  [        5        [        R                  U l        U R                  R                  [        5        S S S 5        g ! , (       d  f       g = fr2   )r  r  r  r  r  r   r  r!  r  r   r   r=   s    r.   r,  r,  >  s\    	;;,...LL!!%"8"8-H&,,EKIIMM-(	 
s   A<B
B c                4  ^ ^^ T R                      T R                  [        R                  L a0  [        R
                  " 5       mTR                  5         TsS S S 5        $ [        T 5        [        R
                  " 5       mT R                  R                  T5        Tc  T R                  R                  5         O7UUU 4S jn[        R                  " US9nUR                  5         TsS S S 5        $  S S S 5        TR                  5         T$ ! , (       d  f       N = f)Nc                    > TR                  T S9  TR                     TR                  R                  5         S S S 5        g ! , (       d  f       g = fN)r0  )rY  r  r  cancel_all_calls)r  r  r>   s   r.   cancel_all_calls_after_grace+_stop.<locals>.cancel_all_calls_after_graceT  s5    "'''6557 $s   A
A)target)r  r  r  r  r   r  r   r,  r  r   r  r6  ThreadstartrY  )r>   r  r7  threadr  s   ``  @r.   _stopr=  F  s    	;;,...&__.N !	 
 !'&__.N!!((8}--/8
 #))1MN%) 
 0 
* - 
s   AD	BD		
Dc                   U R                      U R                  [        R                  La  [	        S5      eU R
                  R                  5         [        R                  U l        U R                  R                  5        H  n[        X5        M     [        U 5        [        R                  " [        U 4S9nSUl        UR                  5         S S S 5        g ! , (       d  f       g = f)Nz$Cannot start already-started server!)r9  argsT)r  r  r  r  r   r  r;  r  r  r"  r  r  r   r:  r1  daemon)r>   rN   r<  s      r.   _startrA  `  s    	;;l222CDD"**66;;=F$U3 > 	e!!uh? 
s   C C
C$c                j    U  H-  n[        USS 5      nUb  M  [        SR                  U5      5      e   g )Nr   zT"{}" must conform to grpc.GenericRpcHandler type but does not have "service" method!)getattrAttributeErrorri  )generic_rpc_handlersgeneric_rpc_handlerservice_attributes      r.   _validate_generic_rpc_handlersrH  p  sB      4#$7DI$ --3V4G-H   4r0   c                |    [         R                  " U5      n[        R                  " U5      n[	        U 5      U-   U-   $ r2   )r   create_channel_optionr   (create_server_call_tracer_factory_optionr   )base_optionsr  xdscompression_option'maybe_server_call_tracer_factory_options        r.   _augment_optionsrP  |  sG    
 &;;KH??D , 	l
	
1	2r0   c                      \ rS rSr% S\S'                 SS jr    SS jr      SS jrSS jr      SS jr	SS	 jr
SSS jjrSS jrS rSrg
)_Serveri  r  r   c                    [         R                  " 5       n[         R                  " [        XFU5      U5      n	U	R	                  U5        [        UU	U[        R                  " U5      UU5      U l        Xl	        g r2   )
r   CompletionQueueServerrP  register_completion_queuer  r   service_pipeliner   
_cy_server)
rW   r  r{   interceptorsoptionsr  r  rM  r  r  s
             r.   rm   _Server.__init__  sj     "113/cJCP(()9:")),7#
 !r0   c                F    [        U5        [        U R                  U5        g r2   )rH  r   r   )rW   rE  s     r.   add_generic_rpc_handlers _Server.add_generic_rpc_handlers  s     	'';<dkk+?@r0   c                   U R                   R                     U R                   R                  [        R                  L a
   S S S 5        g  S S S 5        UR                  5        VVs0 s H  u  p4[        R                  " X5      U_M     nnnUR                  5        H  nU R                  R                  U5        M      [        U R                   U5        g ! , (       d  f       N= fs  snnf r2   )r   r  r  r  r  r  r   fully_qualified_methodr"  rX  register_methodr  )rW   service_namer  rN   r   method_to_handlersr`  s          r.   add_registered_method_handlers&_Server.add_registered_method_handlers  s     [[{{  L$8$88 8  +:*?*?*A
*A& **<@.P*A 	 
 '9&=&=&?"OO++,BC '@'5GH 

s   )C%#C%
C"c           	         [         R                  " U[        U R                  [         R                  " U5      5      5      $ r2   )r   validate_port_binding_resultr	  r   r.  )rW   r  s     r.   add_insecure_port_Server.add_insecure_port  s/    33'W^^G5LM
 	
r0   c           	         [         R                  " U[        U R                  [         R                  " U5      U5      5      $ r2   )r   rg  r  r   r.  )rW   r  r  s      r.   add_secure_port_Server.add_secure_port  s7     33W^^G46H
 	
r0   c                .    [        U R                  5        g r2   )rA  r   rV   s    r.   r;  _Server.start  s    t{{r0   Nc                    [         R                  " U R                  R                  R                  U R                  R                  R                  US9$ r5  )r   rY  r   r  is_set)rW   r0  s     r.   wait_for_termination_Server.wait_for_termination  s>     ||KK))..KK))00
 	
r0   c                .    [        U R                  U5      $ r2   )r=  r   )rW   r  s     r.   stop_Server.stop  s    T[[%((r0   c                J    [        U S5      (       a  SU R                  l        g g )Nr   T)r  r   r  rV   s    r.   __del___Server.__del__  s"    4"" .2DKK* #r0   )rX  r   )r  r  r{   r  rY   Sequence[grpc.ServerInterceptor]rZ  Sequence[ChannelArgumentType]r  r  r  r   rM  r   rE   Iterable[grpc.GenericRpcHandler]r`   rE  )rb  rs   r  r  r`   rE  )r  rs   r`   r  )r  rs   r  grpc.ServerCredentialsr`   r  rD  r2   )r0  Optional[float]r`   r   )r  r~  r`   r  )rI   rJ   rK   rL   r   rm   r]  rd  rh  rk  r;  rq  rt  rw  rM   rH   r0   r.   rR  rR    s    !/! ;! 7	!
 /! "/! 0! !.A$DA	AII :I 
	I&



0F
	

)2r0   rR  c           	     :    [        U5        [        U UUUUUU5      $ r2   )rH  rR  )r  rE  rY  rZ  r  r  rM  s          r.   create_serverr    s/     ##78 r0   )r-   r   r`   rG  )r7   rF  r`   cygrpc.StatusCode)r>   r:   r`   r  )r>   r:   r7   r  r`   r  )r>   r:   r`   rG  )r>   r:   r`   rE  )r>   r:   r   rs   r`   r   )r>   r:   r   rs   r`   r   )r>   r:   r   r   r`   r   )r>   r:   r   r   r`   zcygrpc.Operation)
r>   r:   r   rJ  r7   r  rC   rG  r`   rE  )r>   r:   r`   r   )r>   r:   r   rJ  r   r   r`   r   )r   r   r>   r:   r   r   r`   Callable[[], Any]r2   )r   r   r>   r:   rx  r   ry  r   r   r   rz  z(Optional[Callable[[ResponseType], None]]r`   z8Tuple[Union[ResponseType, Iterator[ResponseType]], bool])r   r   r>   r:   r~  Iterator[ResponseType]r`   zTuple[ResponseType, bool])
r   r   r>   r:   r  r   r  Optional[SerializingFunction]r`   r   )r>   r:   r`   zUnion[int, cygrpc.WriteFlag])r   r   r>   r:   r  rG  r`   r   )r   r   r>   r:   r  r   r`   rE  )r   r   r>   r:   rx  r   r  r  r   r  r  r  r`   rE  )r   r   r>   r:   rx  r   r  r  r   r   r  r  r`   rE  )r>   r:   r`   r   )
r   r   r>   r:   rz  zCallable[[ResponseType], None]r~  r  r`   rE  )rx  r   r  r  r`   r  )
r   r   r>   r:   r   grpc.RpcMethodHandlerr  r  r`   futures.Future)
r   r   r>   r:   r  rQ   r  r  r`   rb   )r   r   r  r:   r3  r  rC   rG  )
r   r   r>   r:   r   r  r  r  r`   r  )r   r   r  rQ   r  r  r  r  r  r   r`   z4Tuple[Optional[_RPCState], Optional[futures.Future]])r>   r  r{   r|  r`   rE  )r>   r  r  r  r`   rE  )r>   r  r  rG  r`   r  )r>   r  r  rG  r  r}  r`   r  )r>   r  r`   rE  )r>   r  rN   rs   r`   rE  )r>   r  r`   r   )r>   r  r$  r   r`   r   )r>   r  r  r~  r`   r  r{  )rL  rz  r  r   rM  r   r`   rz  )r  r  rE  r  rY  ry  rZ  rz  r  r  r  r   rM  r   r`   rR  )__doc__
__future__r   rc   collections
concurrentr   r   enumloggingr   r   rs  typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   grpc._cythonr   grpc._typingr   r   r   r   r   r   r   r   r   	getLoggerrI   r+  r!  r  r   r   r   r  r  r   r   r   r   r   r   r*  _INF_TIMEOUTr/   r9   r?   rA   rD   
namedtupleHandlerCallDetailsrF   ABCrQ   rf   rv   objectr:   r   r   r   r   r   r   r   r   r   r   ServicerContextr   rI  rm  r|  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  uniqueEnumr  r  r   r  r	  r  r  r  r  r  r(  r1  r,  r=  rA  rH  rP  rU  rR  r  rH   r0   r.   <module>r     s   2 " 
                  3 , . % , % , * .


H
%" !: 6 * $ * . "; 5 9 	

%( "7M
------;
		
 	
		$cgg 	$( ($W ,   F		 		# 6$ 6'/@KP	D
#
 : 	B!wt## wt<v <~&&& :& 	&^ HL777 )7 	7
 :7 E7 >7t . 	<### # 7	#
 #(!/
!7!7(1!7HM!7	!7H::: ): 
	:@### )# &	#
 8# 7# 
#8.#.#.# ).# &	.#
 :.# 7.# 
.#bA ; .	
 
$	#(	#3	#  	# * 4	
 0 * 4	
 0 * 4	
 0 * 4	
 0GGG !G B	G
 %G8  	, * ,	
 @?? ? B? ,	?
 ? :?D 499  -(6 -(`88+K8	8AA*JA	A4



 /
 		
%'$DD 0D	DN)4 	:			/+ 
 #	 W2dkk W2t+: 3 +	
 + , 
 r0   