
    Rmj9`              
          U d dl Z d dlZd dlmZ d dlmZmZmZ d dlZ	d dl
mZmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZmZ d dl m!Z!  ej"        dd          Z#dZ$ e j%        d          Z& G d de          Z' G d de          Z( G d de          Z) G d de          Z* G d de          Z+deej,        ej-        f         ej.        z  e/z  ddfdZ0ded ef         d!ej1        dej2        ej3        z  ej4        z  fd"Z5ded ef         d!ej6        dej7        ej4        z  fd#Z8ded ef         dej9        ej4        z  fd$Z:d!ej;        ddfd%Z< eej-        ej4        z            Z=eej-        ej4        z           e>d&<    G d' d eej?        ej@        ej-        ej,        ej.        f                   ZAdS )(    N)	timedelta)AnyProtocoloverload)MemoryObjectReceiveStreamMemoryObjectSendStream)AnyUrlTypeAdapter)
deprecated)ExperimentalClientFeatures)ExperimentalTaskHandlers)RequestContext)SessionMessage)BaseSessionProgressFnTRequestResponder)SUPPORTED_PROTOCOL_VERSIONSmcpz0.1.0)nameversionThe experimental tasks API is deprecated and will be removed in mcp 2.0: tasks (SEP-1686) were removed from the MCP specification and are expected to return as a separate MCP extension.clientc                   f    e Zd Zdedef         dej        dej        ej        z  ej	        z  fdZ
dS )SamplingFnTcontextClientSessionparamsreturnc                 
   K   d S N selfr   r   s      Z/home/thesage/.hermes/hermes-agent/venv/lib/python3.11/site-packages/mcp/client/session.py__call__zSamplingFnT.__call__"   s       \_[^    N)__name__
__module____qualname__r   r   typesCreateMessageRequestParamsCreateMessageResultCreateMessageResultWithTools	ErrorDatar%   r!   r&   r$   r   r   !   sl        _ 45_ 0_ 
	"U%G	G%/	Y	_ _ _ _ _ _r&   r   c                   V    e Zd Zdedef         dej        dej        ej        z  fdZ	dS )ElicitationFnTr   r   r   r   c                 
   K   d S r    r!   r"   s      r$   r%   zElicitationFnT.__call__*   s       03sr&   N)
r'   r(   r)   r   r   r*   ElicitRequestParamsElicitResultr.   r%   r!   r&   r$   r0   r0   )   s[        3 453 )3 
	eo	-	3 3 3 3 3 3r&   r0   c                   H    e Zd Zdedef         dej        ej        z  fdZdS )ListRootsFnTr   r   r   c                 
   K   d S r    r!   )r#   r   s     r$   r%   zListRootsFnT.__call__2   s      25#r&   N)	r'   r(   r)   r   r   r*   ListRootsResultr.   r%   r!   r&   r$   r5   r5   1   sL        6%os&:;6			06 6 6 6 6 6r&   r5   c                   (    e Zd Zdej        ddfdZdS )
LoggingFnTr   r   Nc                 
   K   d S r    r!   r#   r   s     r$   r%   zLoggingFnT.__call__8          sr&   )r'   r(   r)   r*    LoggingMessageNotificationParamsr%   r!   r&   r$   r9   r9   7   s=        6 
     r&   r9   c                   X    e Zd Zdeej        ej        f         ej        z  ez  ddfdZ	dS )MessageHandlerFnTmessager   Nc                 
   K   d S r    r!   )r#   r@   s     r$   r%   zMessageHandlerFnT.__call__?   r<   r&   )
r'   r(   r)   r   r*   ServerRequestClientResultServerNotification	Exceptionr%   r!   r&   r$   r?   r?   >   sX        !%"5u7I"IJUMeehqq 
     r&   r?   r@   r   c                 R   K   t           j                                         d {V  d S r    )anyiolowlevel
checkpoint)r@   s    r$   _default_message_handlerrJ   E   s4       .
#
#
%
%%%%%%%%%%r&   r   r   r   c                 F   K   t          j        t           j        d          S )NzSampling not supportedcoder@   r*   r.   INVALID_REQUESTr   r   s     r$   _default_sampling_callbackrQ   K   s*       ?"(   r&   c                 F   K   t          j        t           j        d          S )NzElicitation not supportedrL   rN   rP   s     r$   _default_elicitation_callbackrS   U   s*       ?"+   r&   c                 F   K   t          j        t           j        d          S )NzList roots not supportedrL   rN   )r   s    r$   _default_list_roots_callbackrU   _   s*       ?"*   r&   c                 
   K   d S r    r!   r   s    r$   _default_logging_callbackrX   h   s       	Dr&   ClientResponsec                       e Zd Z	 	 	 	 	 	 	 dKddddeeez           dee         dedz  dedz  de	dz  de
dz  d	edz  d
edz  dej        dz  dej        dz  dedz  ddf fdZdej        fdZdej        dz  fdZe ed          defd                        Zdej        fdZ	 	 dLdeez  dededz  dedz  ddf
dZdej         dej        fdZ!e" ed          dedz  dej#        fd                        Z$e"dej%        dz  dej#        fd             Z$e"dej#        fd!            Z$	 dMdd"dedz  dej%        dz  dej#        fd#Z$e" ed$          dedz  dej&        fd%                        Z'e"dej%        dz  dej&        fd&            Z'e"dej&        fd'            Z'	 dMdd"dedz  dej%        dz  dej&        fd(Z'd)e(dej)        fd*Z*d)e(dej        fd+Z+d)e(dej        fd,Z,	 	 	 dNdd-d.ed/e-ee.f         dz  dedz  d0e/dz  d1e-ee.f         dz  dej0        fd2Z1d.ed3ej0        ddfd4Z2e" ed5          dedz  dej3        fd6                        Z4e"dej%        dz  dej3        fd7            Z4e"dej3        fd8            Z4	 dMdd"dedz  dej%        dz  dej3        fd9Z4dMd.ed/e-eef         dz  dej5        fd:Z6	 dMd;ej7        ej8        z  d<e-eef         d=e-eef         dz  dej9        fd>Z:e" ed?          dedz  dej;        fd@                        Z<e"dej%        dz  dej;        fdA            Z<e"dej;        fdB            Z<	 dMdd"dedz  dej%        dz  dej;        fdCZ<dOdDZ=dEe>ej?        ej@        f         ddfdFZAdGe>ej?        ej@        f         ejB        z  ez  ddfdHZCdIejB        ddfdJZD xZES )Pr   N)sampling_capabilitiesexperimental_task_handlersread_streamwrite_streamread_timeout_secondssampling_callbackelicitation_callbacklist_roots_callbacklogging_callbackmessage_handlerclient_infor[   r\   r   c
                   t                                          ||t          j        t          j        |           |	pt
          | _        |pt          | _        |
| _	        |pt          | _        |pt          | _        |pt          | _        |pt           | _        i | _        d | _        d | _        |!t+          j        t.          t0          d           |pt3                      | _        d S )N)r_      )
stacklevel)super__init__r*   rB   rD   DEFAULT_CLIENT_INFO_client_inforQ   _sampling_callback_sampling_capabilitiesrS   _elicitation_callbackrU   _list_roots_callbackrX   _logging_callbackrJ   _message_handler_tool_output_schemas_server_capabilities_experimental_featureswarningswarn_EXPERIMENTAL_TASKS_DEPRECATIONDeprecationWarningr   _task_handlers)r#   r]   r^   r_   r`   ra   rb   rc   rd   re   r[   r\   	__class__s               r$   rj   zClientSession.__init__z   s     	$!5 	 	
 	
 	
 (>+>"3"Q7Q&;#%9%Z=Z"$7$W;W!!1!N5N / K3KFH!EI!IM# &1M9;MZ[\\\\8V<T<V<Vr&   c                 P  K   | j         t          ur| j        pt          j                    nd }| j        t          ur8t          j        t          j                    t          j	                              nd }| j
        t          urt          j        d          nd }|                     t          j        t          j        t          j        t          j        t          j        ||d || j                                                  | j                                      t          j                   d {V }|j        t0          vrt3          d|j                   |j        | _        |                     t          j        t          j                                         d {V  |S )N)formurlT)listChanged)samplingelicitationexperimentalrootstasks)protocolVersioncapabilities
clientInforW   z.Unsupported protocol version from the server: )rm   rQ   rn   r*   SamplingCapabilityro   rS   ElicitationCapabilityFormElicitationCapabilityUrlElicitationCapabilityrp   rU   RootsCapabilitysend_requestClientRequestInitializeRequestInitializeRequestParamsLATEST_PROTOCOL_VERSIONClientCapabilitiesrz   build_capabilityrl   InitializeResultr   r   RuntimeErrorr   rt   send_notificationClientNotificationInitializedNotification)r#   r   r   r   results        r$   
initializezClientSession.initialize   s      &.HHH (FE,D,F,F 	 )1NNN	 '466244   
  	 (0LLL !d3333 	 ((' 8(-(E%*%=%-(3)-"'"&"5"F"F"H"H& & & $(#4
 
 
    "!
 
 
 
 
 
 
 
& !)DDDhPVPfhhiii$*$7!$$U%=e>[>]>]%^%^_________r&   c                     | j         S )zReturn the server capabilities received during initialization.

        Returns None if the session has not been initialized yet.
        )rt   r#   s    r$   get_server_capabilitiesz%ClientSession.get_server_capabilities   s    
 ((r&   r   c                 F    | j         t          |           | _         | j         S )a  Experimental APIs for tasks and other features.

        Deprecated: the experimental tasks API will be removed in mcp 2.0. Tasks
        (SEP-1686) were removed from the MCP specification and are expected to
        return as a separate MCP extension.

        Example:
            status = await session.experimental.get_task(task_id)
            result = await session.experimental.get_task_result(task_id, CallToolResult)
        )ru   r   r   s    r$   r   zClientSession.experimental   s&      &.*DT*J*JD'**r&   c                    K   |                      t          j        t          j                              t          j                   d{V S )zSend a ping request.N)r   r*   r   PingRequestEmptyResultr   s    r$   	send_pingzClientSession.send_ping   sY      && 1 3 344
 
 
 
 
 
 
 
 	
r&   progress_tokenprogresstotalr@   c                    K   |                      t          j        t          j        t          j        ||||                                         d{V  dS )zSend a progress notification.)progressTokenr   r   r@   rW   N)r   r*   r   ProgressNotificationProgressNotificationParams)r#   r   r   r   r@   s        r$   send_progress_notificationz(ClientSession.send_progress_notification   s       $$$* ;&4!)# '	    	 	
 
 	
 	
 	
 	
 	
 	
 	
 	
 	
r&   levelc           	         K   |                      t          j        t          j        t          j        |                              t          j                   d{V S )z Send a logging/setLevel request.)r   rW   N)r   r*   r   SetLevelRequestSetLevelRequestParamsr   )r#   r   s     r$   set_logging_levelzClientSession.set_logging_level
  sz      &&% 6UCCC   
 
 
 
 
 
 
 
 
 	
r&   z>Use list_resources(params=PaginatedRequestParams(...)) insteadcursorc                 
   K   d S r    r!   r#   r   s     r$   list_resourceszClientSession.list_resources  s      UXUXr&   r   c                
   K   d S r    r!   r;   s     r$   r   zClientSession.list_resources  s      qtqtr&   c                 
   K   d S r    r!   r   s    r$   r   zClientSession.list_resources  s      ADr&   rW   c                   K   ||t          d          ||}n|t          j        |          }nd}|                     t          j        t          j        |                    t          j                   d{V S )zSend a resources/list request.

        Args:
            cursor: Simple cursor string for pagination (deprecated, use params instead)
            params: Full pagination parameters including cursor and any future fields
        N%Cannot specify both cursor and paramsr   rW   )
ValueErrorr*   PaginatedRequestParamsr   r   ListResourcesRequestListResourcesResultr#   r   r   request_paramss       r$   r   zClientSession.list_resources  s       &"4DEEE#NN"9HHHNN!N&& :. Q Q QRR%
 
 
 
 
 
 
 
 	
r&   zGUse list_resource_templates(params=PaginatedRequestParams(...)) insteadc                 
   K   d S r    r!   r   s     r$   list_resource_templatesz%ClientSession.list_resource_templates:  s      fifir&   c                
   K   d S r    r!   r;   s     r$   r   z%ClientSession.list_resource_templates>  s       -0Cr&   c                 
   K   d S r    r!   r   s    r$   r   z%ClientSession.list_resource_templatesC  s      RURUr&   c                   K   ||t          d          ||}n|t          j        |          }nd}|                     t          j        t          j        |                    t          j                   d{V S )zSend a resources/templates/list request.

        Args:
            cursor: Simple cursor string for pagination (deprecated, use params instead)
            params: Full pagination parameters including cursor and any future fields
        Nr   r   rW   )r   r*   r   r   r   ListResourceTemplatesRequestListResourceTemplatesResultr   s       r$   r   z%ClientSession.list_resource_templatesF  s       &"4DEEE#NN"9HHHNN!N&& B. Y Y YZZ-
 
 
 
 
 
 
 
 	
r&   uric           	         K   |                      t          j        t          j        t          j        |                              t          j                   d{V S )zSend a resources/read request.r   rW   N)r   r*   r   ReadResourceRequestReadResourceRequestParamsReadResourceResultr#   r   s     r$   read_resourcezClientSession.read_resourcea  sz      &&) :sCCC   
 $
 
 
 
 
 
 
 
 	
r&   c           	         K   |                      t          j        t          j        t          j        |                              t          j                   d{V S )z#Send a resources/subscribe request.r   rW   N)r   r*   r   SubscribeRequestSubscribeRequestParamsr   r   s     r$   subscribe_resourcez ClientSession.subscribe_resourcel  sz      &&& 7C@@@   
 
 
 
 
 
 
 
 
 	
r&   c           	         K   |                      t          j        t          j        t          j        |                              t          j                   d{V S )z%Send a resources/unsubscribe request.r   rW   N)r   r*   r   UnsubscribeRequestUnsubscribeRequestParamsr   r   s     r$   unsubscribe_resourcez"ClientSession.unsubscribe_resourcew  sz      &&( 9cBBB   
 
 
 
 
 
 
 
 
 	
r&   )metar   	argumentsprogress_callbackr   c                J  K   d}|t          j        j        di |}|                     t          j        t          j        t          j        |||                              t           j        ||           d{V }|j        s| 	                    ||           d{V  |S )zBSend a tools/call request with optional progress callback support.N)r   r   _metarW   )request_read_timeout_secondsr   r!   )
r*   RequestParamsMetar   r   CallToolRequestCallToolRequestParamsCallToolResultisError_validate_tool_result)r#   r   r   r_   r   r   r   r   s           r$   	call_toolzClientSession.call_tool  s       26',44t44E((% 6DI]bccc   
  )=/ ) 	
 	
 	
 	
 	
 	
 	
 	
 ~ 	;,,T6:::::::::r&   r   c                   K   || j         vr|                                  d{V  d}|| j         v r| j                             |          }nt                              d| d           |wddlm}m}m} |j	        t          d| d          	  ||j	        |           dS # |$ r}t          d| d|           d}~w|$ r}t          d	| d|           d}~ww xY wdS )
zKValidate the structured content of a tool result against its output schema.NzTool z= not listed by server, cannot validate any structured contentr   )SchemaErrorValidationErrorvalidatez; has an output schema but did not return structured contentz,Invalid structured content returned by tool z: zInvalid schema for tool )rs   
list_toolsgetloggerwarning
jsonschemar   r   r   structuredContentr   )r#   r   r   output_schemar   r   r   es           r$   r   z#ClientSession._validate_tool_result  sq     t000//#########4,,, 599$??MMNNf4fffggg$IIIIIIIIII'/"]D]]]  K1=AAAAA" _ _ _"#]RV#]#]Z[#]#]^^^ K K K"#Id#I#Ia#I#IJJJK %$s$   B$ $C )B>>C CC z<Use list_prompts(params=PaginatedRequestParams(...)) insteadc                 
   K   d S r    r!   r   s     r$   list_promptszClientSession.list_prompts  s      QTQTr&   c                
   K   d S r    r!   r;   s     r$   r   zClientSession.list_prompts  s      mpmpr&   c                 
   K   d S r    r!   r   s    r$   r   zClientSession.list_prompts  s      =@Sr&   c                   K   ||t          d          ||}n|t          j        |          }nd}|                     t          j        t          j        |                    t          j                   d{V S )zSend a prompts/list request.

        Args:
            cursor: Simple cursor string for pagination (deprecated, use params instead)
            params: Full pagination parameters including cursor and any future fields
        Nr   r   rW   )r   r*   r   r   r   ListPromptsRequestListPromptsResultr   s       r$   r   zClientSession.list_prompts  s       &"4DEEE#NN"9HHHNN!N&& 8 O O OPP#
 
 
 
 
 
 
 
 	
r&   c           
         K   |                      t          j        t          j        t          j        ||                              t          j                   d{V S )zSend a prompts/get request.)r   r   rW   N)r   r*   r   GetPromptRequestGetPromptRequestParamsGetPromptResult)r#   r   r   s      r$   
get_promptzClientSession.get_prompt  s|      &&& 7TYWWW   
 !
 
 
 
 
 
 
 
 	
r&   refargumentcontext_argumentsc                   K   d}|t          j        |          }|                     t          j        t          j        t          j        |t          j        di ||                              t           j                   d{V S )z#Send a completion/complete request.N)r   )r   r   r   rW   r!   )r*   CompletionContextr   r   CompleteRequestCompleteRequestParamsCompletionArgumentCompleteResult)r#   r   r   r   r   s        r$   completezClientSession.complete  s       (-8IJJJG&&% 6!&!9!E!EH!E!E '       
 
 
 
 
 
 
 
 	
r&   z:Use list_tools(params=PaginatedRequestParams(...)) insteadc                 
   K   d S r    r!   r   s     r$   r   zClientSession.list_tools  s      MPSr&   c                
   K   d S r    r!   r;   s     r$   r   zClientSession.list_tools  s      ililr&   c                 
   K   d S r    r!   r   s    r$   r   zClientSession.list_tools
  s      9<r&   c                @  K   ||t          d          ||}n|t          j        |          }nd}|                     t          j        t          j        |                    t          j                   d{V }|j        D ]}|j        | j	        |j
        <   |S )zSend a tools/list request.

        Args:
            cursor: Simple cursor string for pagination (deprecated, use params instead)
            params: Full pagination parameters including cursor and any future fields
        Nr   r   rW   )r   r*   r   r   r   ListToolsRequestListToolsResulttoolsoutputSchemars   r   )r#   r   r   r   r   tools         r$   r   zClientSession.list_tools  s       &"4DEEE#NN"9HHHNN!N(( 6n M M MNN!
 
 
 
 
 
 
 
 L 	E 	ED373DD%di00r&   c                    K   |                      t          j        t          j                                         d{V  dS )z'Send a roots/list_changed notification.N)r   r*   r   RootsListChangedNotificationr   s    r$   send_roots_list_changedz%ClientSession.send_roots_list_changed/  sF      $$U%=e>`>b>b%c%cdddddddddddr&   	responderc                   K   t          t          t          f         |j        |j        | d           }| j                            |j                  r=|5  | j                            ||           d {V  d d d            n# 1 swxY w Y   d S |j        j	        xt          j        d x\  } |5  |j        (| j                            |||j                   d {V }n|                     ||           d {V }t                              |          }|                    |           d {V  d d d            n# 1 swxY w Y   n xt          j        d x\  } |5  |j        (| j                            |||j                   d {V }n|                     ||           d {V }t                              |          }|                    |           d {V  d d d            n# 1 swxY w Y   n xt          j        d xn\    |5  |                     |           d {V }t                              |          }|                    |           d {V  d d d            n# 1 swxY w Y   no t          j        d x\\   |5  |                    t          j        t          j                                         d {V cd d d            S # 1 swxY w Y   n 	 	 d S )N)
request_idr   sessionlifespan_contextrW   r!   )root)r   r   r   r  request_metarz   handles_requestrequesthandle_requestr  r*   CreateMessageRequesttaskaugmented_samplingrm   rY   validate_pythonrespondElicitRequestaugmented_elicitationro   ListRootsRequestrp   r   rC   r   )r#   r  ctxr   responseclient_responses         r$   _received_requestzClientSession._received_request3  s     ]C/0 +'!	
 
 
 ..y/@AA 	 I I)88iHHHHHHHHHI I I I I I I I I I I I I I I4 $:+:::::66 = ={.)-)<)O)OPSU[]c]h)i)i#i#i#i#i#i#i)-)@)@f)M)M#M#M#M#M#M#M&4&D&DX&N&NO#++O<<<<<<<<<= = = = = = = = = = = = = = = ; 4$33333FF = ={.)-)<)R)RSVX^`f`k)l)l#l#l#l#l#l#l)-)C)CC)P)P#P#P#P#P#P#P&4&D&DX&N&NO#++O<<<<<<<<<= = = = = = = = = = = = = = = 4 *')))))) = =%)%>%>s%C%CCCCCCCH&4&D&DX&N&NO#++O<<<<<<<<<= = = = = = = = = = = = = = = * "$$$$$ a a!*!2!253E5K\K^K^3_3_3_!`!```````a a a a a a a a a a a a a a a a a % ts]   "BBB/BD<<E E  BG--G14G1AI,,I03I0?KKKreqc                 @   K   |                      |           d{V  dS )z>Handle incoming messages by forwarding to the message handler.N)rr   )r#   r(  s     r$   _handle_incomingzClientSession._handle_incomingf  s4      
 ##C(((((((((((r&   notificationc                    K   |j         xt          j        d x!\  } |                     |           d{V  dS  t          j        d x\  }dS  	 dS )z%Handle notifications from the server.rW   N)r  r*   LoggingMessageNotificationrq   ElicitCompleteNotification)r#   r+  r   s      r$   _received_notificationz$ClientSession._received_notificationm  s       @1@@@@@,,V44444444444 A1@@@@@ 	 A
 r&   )NNNNNNN)NNr    )NNN)r   N)Fr'   r(   r)   r   r   rE   r   r   r   r0   r5   r9   r?   r*   Implementationr   r   rj   r   r   ServerCapabilitiesr   propertyr   r   r   r   r   strintfloatr   LoggingLevelr   r   r   r   r   r   r   r	   r   r   r   r   dictr   r   r   r   r   r   r   r   r   ResourceTemplateReferencePromptReferencer  r  r  r   r  r   rB   rC   r'  rD   r*  r/  __classcell__)r{   s   @r$   r   r   q   s        26046:37.24837$W BFFJ$W $W $W.~	/IJ$W -^<$W ($.	$W
 '-$W -t3$W *D0$W %t+$W +T1$W )D0$W  %7$>$W %=t$C$W 
$W $W $W $W $W $WL1%"8 1 1 1 1f))AD)H ) ) ) ) Z	^ +8 + + +	  X
+
!2 
 
 
 
 #"
 
c	
 
 t|	

 t
 

 
 
 
*	
U-? 	
EDU 	
 	
 	
 	
 ZPQQX3:X%:SXXX RQ XXte.JT.QtV[Vottt XtDe&?DDD XD "
 7;	
 
 
d

 ,t3	

 
	"
 
 
 
6 ZYZZiC$Ji5Cdiii [Z Xi05<0		*0 0 0 X0 Uu/PUUU XU "
 7;	
 
 
d

 ,t3	

 
	*
 
 
 
6	
v 	
%2J 	
 	
 	
 	
	
F 	
u7H 	
 	
 	
 	
	
f 	
9J 	
 	
 	
 	
 ,01504 '+   S>D( ($.	
 '- 38nt# 
	   >K KU=Q KVZ K K K K4 ZNOOTtT8OTTT PO XTpE,H4,OpTYTkppp Xp@E$;@@@ X@ "
 7;	
 
 
d

 ,t3	

 
	 
 
 
 
6	
 	
S 	
T#s(^d5J 	
V[Vk 	
 	
 	
 	
 48	
 
,u/DD
 sCx.
  S>D0	

 
	
 
 
 
0 ZLMMPsTzPe6KPPP NM XPl%*F*MlRWRglll Xl<%"7<<< X< "  7;	     d
  ,t3	 
 
	       De e e e11A%BUW\WiBi1j 1os 1 1 1 1f)e153EEFIaadmm) 
) ) ) )9Q VZ        r&   )Bloggingrv   datetimer   typingr   r   r   anyio.lowlevelrG   anyio.streams.memoryr   r   pydanticr	   r
   typing_extensionsr   	mcp.typesr*   mcp.client.experimentalr   %mcp.client.experimental.task_handlersr   mcp.shared.contextr   mcp.shared.messager   mcp.shared.sessionr   r   r   mcp.shared.versionr   r0  rk   rx   	getLoggerr   r   r0   r5   r9   r?   rB   rC   rD   rE   rJ   r+   r,   r-   r.   rQ   r2   r3   rS   r7   rU   r=   rX   rY   __annotations__r   r   r   r!   r&   r$   <module>rK     s           * * * * * * * * * *     R R R R R R R R ( ( ( ( ( ( ( ( ( ( ( ( ( (       > > > > > > J J J J J J - - - - - - - - - - - - I I I I I I I I I I : : : : : :*e*wGGG Z  
 
	8	$	$_ _ _ _ _( _ _ _3 3 3 3 3X 3 3 36 6 6 6 68 6 6 6              &e153EEFIaadmm&	& & & &OS01, !CCeoU   OS01% %/)   OS01
U_,   	2			 	 	 	 EPKPUPbejetPtDuDuE.@A u u uH H H H H  		"H H H H Hr&   