
    KKi                    :   S 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
  SSKJrJrJrJr  SSKJr  SSKJrJr  SSKrSSKJr  SS	KJrJrJr  SS
KJrJrJrJ r J!r!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/J0r0  SSK1J2r2J3r3J4r4  SSK5J6r6  SSK7J8r8  SSK9J:r:  SSK;J<r<J=r=J>r>  SSK?J@r@JArA  SSKBJCrC  SSKDJErE  SSKFJGrG  SSKHJIrI  SSKJJKrK  SSKLJMrM  SSKNJOrO  \R                  " \Q5      rR " S S \<5      rS " S! S"\<5      rT " S# S$\*\\-     5      rU " S% S&\*\V\   \-     5      rW " S' S(\S5      rX " S) S*\T5      rY\" S+\CS,S-9 " S. S/\S5      5       rZ\" S+\CS,S-9 " S0 S1\S5      5       r[ " S2 S3\85      r\\V\\-  \-     r]\X\Y-  r^ " S4 S5\K5      r_g)6zEChain that takes in an input and produces an action and action input.    )annotationsN)abstractmethod)AsyncIteratorCallableIteratorSequence)Path)Anycast)
deprecated)AgentActionAgentFinish	AgentStep)AsyncCallbackManagerForChainRunAsyncCallbackManagerForToolRunBaseCallbackManagerCallbackManagerForChainRunCallbackManagerForToolRun	Callbacks)OutputParserException)BaseLanguageModel)BaseMessage)BaseOutputParser)BasePromptTemplate)FewShotPromptTemplate)PromptTemplate)RunnableRunnableConfigensure_config)AddableDict)BaseTool)get_color_mapping)	BaseModel
ConfigDictmodel_validator)Selfoverride)AGENT_DEPRECATION_WARNING)AgentExecutorIterator)	AgentType)InvalidTool)Chain)LLMChain)asyncio_timeoutc                  4  ^  \ rS rSrSr\SS j5       rSS jr\ S       SS jj5       r	\ S       SS jj5       r
\\SS j5       5       r        SS jr\ S         SS	 jj5       r\SS
 j5       r\SU 4S jj5       rSS jrSS jrSrU =r$ )BaseSingleActionAgent7   zBase Single Action Agent class.c                    S/$ Return values of the agent.output selfs    `/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/langchain_classic/agents/agent.pyreturn_values#BaseSingleActionAgent.return_values:        z    c                    g)Get allowed tools.Nr6   r7   s    r9   get_allowed_tools'BaseSingleActionAgent.get_allowed_tools?   s    r=   c                    g)Given input, decided what to do.

Args:
    intermediate_steps: Steps the LLM has taken to date,
        along with observations.
    callbacks: Callbacks to run.
    **kwargs: User inputs.

Returns:
    Action specifying what tool to use.
Nr6   r8   intermediate_steps	callbackskwargss       r9   planBaseSingleActionAgent.planC       r=   c                   #    g7f)Async given input, decided what to do.

Args:
    intermediate_steps: Steps the LLM has taken to date,
        along with observations.
    callbacks: Callbacks to run.
    **kwargs: User inputs.

Returns:
    Action specifying what tool to use.
Nr6   rD   s       r9   aplanBaseSingleActionAgent.aplanV           c                    gReturn the input keys.Nr6   r7   s    r9   
input_keys BaseSingleActionAgent.input_keysi   rJ   r=   c                L    US:X  a  [        SS0S5      $ SU S3n[        U5      e)J  Return response when agent has been stopped due to max iterations.

Args:
    early_stopping_method: Method to use for early stopping.
    intermediate_steps: Steps the LLM has taken to date,
        along with observations.

Returns:
    Agent finish object.

Raises:
    ValueError: If `early_stopping_method` is not supported.
forcer5   3Agent stopped due to iteration limit or time limit. 'Got unsupported early_stopping_method ``r   
ValueErrorr8   early_stopping_methodrE   _msgs        r9   return_stopped_response-BaseSingleActionAgent.return_stopped_responsen   sA    & !G+PQ  88M7NaPor=   c                    [         e)zConstruct an agent from an LLM and tools.

Args:
    llm: Language model to use.
    tools: Tools to use.
    callback_manager: Callback manager to use.
    kwargs: Additional arguments.

Returns:
    Agent object.
NotImplementedError)clsllmtoolscallback_managerrG   s        r9   from_llm_and_tools(BaseSingleActionAgent.from_llm_and_tools   s
    & "!r=   c                    [         ez#Return Identifier of an agent type.rf   r7   s    r9   _agent_type!BaseSingleActionAgent._agent_type   
     "!r=   c                   > [         TU ]  5       n U R                  n[	        U[
        5      (       a  [        UR                  5      US'   U$ Ub  X2S'   U$ ! [         a    Sn NFf = f)z]Return dictionary representation of agent.

Returns:
    Dictionary representation of agent.
N_type)super
model_dumprp   rg   
isinstancer*   strvalue)r8   rG   _dictrt   	__class__s       r9   dictBaseSingleActionAgent.dict   st     "$	$$E eY'' -E'N  "'N # 	E	s   A A$#A$c                P   [        U[        5      (       a  [        U5      OUnUR                  nUR	                  SSS9  U R                  5       nSU;  a  SU  S3n[        U5      eUR                  S:X  a0  UR                  S5       n[        R                  " XFSS	9  S
S
S
5        g
UR                  R                  S5      (       a0  UR                  S5       n[        R                  " XFSS9  S
S
S
5        g
U S3n[        U5      e! , (       d  f       g
= f! , (       d  f       g
= f)zSave the agent.

Args:
    file_path: Path to file to save the agent to.

Example:
```python
# If working with agent executor
agent.agent.save(file_path="path/agent.yaml")
```
Tparentsexist_okrt   Agent z does not support saving.jsonw   indentNz.yamlz.ymlFdefault_flow_style must be json or yaml)rw   rx   r	   parentmkdirr|   rg   suffixopenjsondumpendswithyamlr^   )r8   	file_path	save_pathdirectory_path
agent_dictrb   fs          r9   saveBaseSingleActionAgent.save   s    (2)S'A'ADOy	"))TD9 YY[
*$4& 89C%c**w&$		*2 %$&&'899$		*EB %$ K45CS/! %$ %$   DD
D
D%c                    0 $ #Return logging kwargs for tool run.r6   r7   s    r9   tool_run_logging_kwargs-BaseSingleActionAgent.tool_run_logging_kwargs       	r=   r6   return	list[str]r   list[str] | NoneNrE   list[tuple[AgentAction, str]]rF   r   rG   r
   r   AgentAction | AgentFinishr`   rx   rE   r   ra   r
   r   r   )
ri   r   rj   Sequence[BaseTool]rk   BaseCallbackManager | NonerG   r
   r   r0   r   rx   rG   r
   r   builtins.dictr   z
Path | strr   Noner   r   )__name__
__module____qualname____firstlineno____doc__propertyr:   r@   r   rH   rM   rT   rc   classmethodrl   rp   r'   r|   r   r   __static_attributes____classcell__r{   s   @r9   r0   r0   7   sc   )    $9  	
 
# $   $9  	
 
# $ %  %" : 	
 
8 
 8<	"" "" 5	"
 " 
" "( " "  " "D r=   r0   c                    ^  \ rS rSrSr\SS j5       rSS jr\ S       SS jj5       r	\ S       SS jj5       r
\\SS j5       5       r        SS jr\SS	 j5       r\SU 4S
 jj5       rSS jrSS jrSrU =r$ )BaseMultiActionAgent   zBase Multi Action Agent class.c                    S/$ r3   r6   r7   s    r9   r:   "BaseMultiActionAgent.return_values   r<   r=   c                    g)z0Get allowed tools.

Returns:
    Allowed tools.
Nr6   r7   s    r9   r@   &BaseMultiActionAgent.get_allowed_tools   s     r=   c                    g)zGiven input, decided what to do.

Args:
    intermediate_steps: Steps the LLM has taken to date,
        along with the observations.
    callbacks: Callbacks to run.
    **kwargs: User inputs.

Returns:
    Actions specifying what tool to use.
Nr6   rD   s       r9   rH   BaseMultiActionAgent.plan   rJ   r=   c                   #    g7f)zAsync given input, decided what to do.

Args:
    intermediate_steps: Steps the LLM has taken to date,
        along with the observations.
    callbacks: Callbacks to run.
    **kwargs: User inputs.

Returns:
    Actions specifying what tool to use.
Nr6   rD   s       r9   rM   BaseMultiActionAgent.aplan   rO   rP   c                    grR   r6   r7   s    r9   rT   BaseMultiActionAgent.input_keys  rJ   r=   c                L    US:X  a  [        SS0S5      $ SU S3n[        U5      e)rW   rX   r5   z$Agent stopped due to max iterations.rZ   r[   r\   r]   r_   s        r9   rc   ,BaseMultiActionAgent.return_stopped_response  s:    & !G+*PQSUVV78M7NaPor=   c                    [         ero   rf   r7   s    r9   rp    BaseMultiActionAgent._agent_type1  rr   r=   c                   > [         TU ]  5       n[        R                  " [        5         [        U R                  5      US'   SSS5        U$ ! , (       d  f       U$ = f)*Return dictionary representation of agent.rt   N)ru   rv   
contextlibsuppressrg   rx   rp   r8   rG   rz   r{   s      r9   r|   BaseMultiActionAgent.dict6  sM     "$  !45 !1!12E'N 6 65s   A
Ac                P   [        U[        5      (       a  [        U5      OUnU R                  5       nSU;  a  SU  S3n[	        U5      eUR
                  nUR                  SSS9  UR                  S:X  a0  UR                  S5       n[        R                  " X6SS	9  S
S
S
5        g
UR                  R                  S5      (       a0  UR                  S5       n[        R                  " X6SS9  S
S
S
5        g
U S3n[        U5      e! , (       d  f       g
= f! , (       d  f       g
= f)a(  Save the agent.

Args:
    file_path: Path to file to save the agent to.

Raises:
    NotImplementedError: If agent does not support saving.
    ValueError: If `file_path` is not json or yaml.

Example:
```python
# If working with agent executor
agent.agent.save(file_path="path/agent.yaml")
```
rt   r   z does not support saving.Tr   r   r   r   r   Nr   Fr   r   )rw   rx   r	   r|   rg   r   r   r   r   r   r   r   r   r^   )r8   r   r   r   rb   r   r   s          r9   r   BaseMultiActionAgent.save>  s   " (2)S'A'ADOy	 YY[
*$4& 9:C%c**"))TD9w&$		*2 %$&&'899$		*EB %$ K45CS/! %$ %$r   c                    0 $ r   r6   r7   s    r9   r   ,BaseMultiActionAgent.tool_run_logging_kwargsd  r   r=   r6   r   r   r   rE   r   rF   r   rG   r
   r   list[AgentAction] | AgentFinishr   r   r   r   r   )r   r   r   r   r   r   r:   r@   r   rH   rM   rT   rc   rp   r'   r|   r   r   r   r   r   s   @r9   r   r      s   (    $9  	
 
) $   $9  	
 
) $ %  %" : 	
 
2 " "  $"L r=   r   c                  ,    \ rS rSrSr\SS j5       rSrg)AgentOutputParserii  z=Base class for parsing agent output into agent action/finish.c                    g)z$Parse text into agent action/finish.Nr6   r8   texts     r9   parseAgentOutputParser.parsel  rJ   r=   r6   N)r   rx   r   r   r   r   r   r   r   r   r   r   r6   r=   r9   r   r   i  s    G3 3r=   r   c                  ,    \ rS rSrSr\SS j5       rSrg)MultiActionAgentOutputParseriq  zzBase class for parsing agent output into agent actions/finish.

This is used for agents that can return multiple actions.
c                    g)z{Parse text into agent actions/finish.

Args:
    text: Text to parse.

Returns:
    List of agent actions or agent finish.
Nr6   r   s     r9   r   "MultiActionAgentOutputParser.parsey  rJ   r=   r6   N)r   rx   r   r   r   r6   r=   r9   r   r   q  s    
  r=   r   c                      \ rS rSr% SrS\S'    / rS\S'   / rS\S'   SrS	\S
'    \	" SS9r
\SS j5       r\SS j5       r S       SS jjr S       SS jjrSrg)RunnableAgenti  Agent powered by Runnables.z)Runnable[dict, AgentAction | AgentFinish]runnabler   input_keys_argreturn_keys_argTboolstream_runnablearbitrary_types_allowedc                    U R                   $ r4   r   r7   s    r9   r:   RunnableAgent.return_values       ###r=   c                    U R                   $ rS   r   r7   s    r9   rT   RunnableAgent.input_keys  s     """r=   Nc                    0 UESU0EnSnU R                   (       a0  U R                  R                  USU0S9 H  nUc  UnM
  XV-  nM     U$ U R                  R                  USU0S9nU$ a  Based on past history and current inputs, decide what to do.

Args:
    intermediate_steps: Steps the LLM has taken to date,
        along with the observations.
    callbacks: Callbacks to run.
    **kwargs: User inputs.

Returns:
    Action specifying what tool to use.
rE   NrF   configr   r   streaminvoker8   rE   rF   rG   inputsfinal_outputchunks          r9   rH   RunnableAgent.plan      " FFE02DE  --fk9=U-V'#(L )L	 W   ==//Y?W/XLr=   c                   #    0 UESU0EnSnU R                   (       a2  U R                  R                  USU0S9  Sh  vN nUc  UnM  XV-  nM  U R                  R                  USU0S9I Sh  vN nU$  N7
 U$  N7fa  Async based on past history and current inputs, decide what to do.

Args:
    intermediate_steps: Steps the LLM has taken to date,
        along with observations.
    callbacks: Callbacks to run.
    **kwargs: User inputs.

Returns:
    Action specifying what tool to use.
rE   NrF   r   r   r   astreamainvoker  s          r9   rM   RunnableAgent.aplan  s     " FFE02DE   $}}44#Y/  5   *e  '#(L )L!%!6!6#Y/ "7 " L *   	2   8A=A8A6A8-A=/A;0A=6A88A=r6   r   r   r   r   r   r   r   r   __annotations__r   r   r   r$   model_configr   r:   rT   rH   rM   r   r6   r=   r9   r   r     s    %77/ "NI"!#OY# OT   $L $ $ # #  $"9" " 	"
 
#"N  $'9' ' 	'
 
#' 'r=   r   c                      \ rS rSr% SrS\S'    / rS\S'   / rS\S'   SrS	\S
'    \	" SS9r
\SS j5       r\SS j5       r S       SS jjr S       SS jjrSrg)RunnableMultiActionAgenti  r   z/Runnable[dict, list[AgentAction] | AgentFinish]r   r   r   r   Tr   r   r   c                    U R                   $ r   r   r7   s    r9   r:   &RunnableMultiActionAgent.return_values  r   r=   c                    U R                   $ )9Return the input keys.

Returns:
    List of input keys.
r   r7   s    r9   rT   #RunnableMultiActionAgent.input_keys
  s     """r=   Nc                    0 UESU0EnSnU R                   (       a0  U R                  R                  USU0S9 H  nUc  UnM
  XV-  nM     U$ U R                  R                  USU0S9nU$ r   r   r  s          r9   rH   RunnableMultiActionAgent.plan  r  r=   c                   #    0 UESU0EnSnU R                   (       a2  U R                  R                  USU0S9  Sh  vN nUc  UnM  XV-  nM  U R                  R                  USU0S9I Sh  vN nU$  N7
 U$  N7fr  r	  r  s          r9   rM   RunnableMultiActionAgent.aplan7  s     " FFE02DE   $}}44#Y/  5   *e  '#(L )L!%!6!6#Y/ "7 " L
 *   r  r6   r   r   r   r  r6   r=   r9   r  r    s    %==0 "NI"!#OY# OT   $L $ $ # #  $"9" " 	"
 
)"N  $(9( ( 	(
 
)( (r=   r  z0.1.0z1.0)messageremovalc                     ^  \ rS rSr% SrS\S'    S\S'    S\S'    \SS	 j5       r\SU 4S
 jj5       r	 S       SS jjr
 S       SS jjrSS jrSrU =r$ )LLMSingleActionAgentib  z$Base class for single action agents.r-   	llm_chainr   output_parserr   stopc                Z    [        [        U R                  R                  5      S1-
  5      $ )r  rE   listsetr   rT   r7   s    r9   rT   LLMSingleActionAgent.input_keysq  s'     C1126J5KKLLr=   c                *   > [         TU ]  5       nUS	 U$ r   r!  ru   r|   r   s      r9   r|   LLMSingleActionAgent.dictz       /"r=   c                    U R                   R                  " SUU R                  US.UD6nU R                  R	                  U5      $ )zGiven input, decided what to do.

Args:
    intermediate_steps: Steps the LLM has taken to date,
        along with the observations.
    callbacks: Callbacks to run.
    **kwargs: User inputs.

Returns:
    Action specifying what tool to use.
rE   r"  rF   r6   )r   runr"  r!  r   r8   rE   rF   rG   r5   s        r9   rH   LLMSingleActionAgent.plan  sM    " ## 
1
 	
 !!''//r=   c                   #    U R                   R                  " SUU R                  US.UD6I Sh  vN nU R                  R	                  U5      $  N7f)rL   r.  Nr6   )r   arunr"  r!  r   r0  s        r9   rM   LLMSingleActionAgent.aplan  sZ     " ~~** 
1
 	
 
 !!''//
s   .AA Ac                `    S[        U R                  5      S:X  a  SS.$ U R                  S   S.$ )r   rZ   r   
llm_prefixobservation_prefix)lenr"  r7   s    r9   r   ,LLMSingleActionAgent.tool_run_logging_kwargs  s8     (+DII!(;"
 	
AE1
 	
r=   r6   r   r   r   r   r   )r   r   r   r   r   r  r   rT   r'   r|   rH   rM   r   r   r   r   s   @r9   r  r  b  s     /$$$)
O%M M    $090 0 	0
 
#08  $090 0 	0
 
#02
 
r=   r  c                    ^  \ rS rSr% SrS\S'    S\S'    SrS\S	'    \SU 4S
 jj5       rS S jr	\
S!S j5       r\
S!S j5       r    S"S jr S#       S$S jjr S#       S$S jjr      S%S jr\
S!S j5       r\" SS9S&S j5       r\
\S'S j5       5       r\
\S'S j5       5       r\\S(S j5       5       r\S)S j5       r\\S*S j5       5       r\  S+           S,S jj5       r        S-S jrS.S jrSrU =r$ )/Agenti  zAgent that calls the language model and deciding the action.

This is driven by a LLMChain. The prompt in the LLMChain MUST include
a variable called "agent_scratchpad" where the agent can put its
intermediary work.
r-   r   r   r!  Nr   allowed_toolsc                *   > [         TU ]  5       nUS	 U$ r)  r*  r   s      r9   r|   
Agent.dict  r,  r=   c                    U R                   $ )r?   )r=  r7   s    r9   r@   Agent.get_allowed_tools  s    !!!r=   c                    S/$ r3   r6   r7   s    r9   r:   Agent.return_values  r<   r=   c                v    SU R                   R                  5        3SU R                   R                  5        3/$ )N
z
	)r8  rstripr7   s    r9   _stopAgent._stop  sB     ((//1234**11345
 	
r=   c                ~    SnU H4  u  p4X#R                   -  nUSU R                   U SU R                   3-  nM6     U$ )zJConstruct the scratchpad that lets the agent continue its thought process.rZ   rE  )logr8  r7  )r8   rE   thoughtsactionobservations        r9   _construct_scratchpadAgent._construct_scratchpad  sP    
 #5F

"H"T445k]"T__DUVVH $6 r=   c                    U R                   " U40 UD6nU R                  R                  " SSU0UD6nU R                  R	                  U5      $ )rC   rF   r6   )get_full_inputsr   predictr!  r   r8   rE   rF   rG   full_inputsfull_outputs         r9   rH   
Agent.plan  sM    " **+=HHnn,,PyPKP!!''44r=   c                   #    U R                   " U40 UD6nU R                  R                  " SSU0UD6I Sh  vN nU R                  R	                  U5      I Sh  vN $  N' N7f)rL   rF   Nr6   )rQ  r   apredictr!  aparserS  s         r9   rM   Agent.aplan  s_     " **+=HH NN33WiW;WW''..{;;; X;s!   5A#A"A#A!A#!A#c                L    U R                  U5      nX0R                  S.n0 UEUE$ )zCreate the full inputs for the LLMChain from intermediate steps.

Args:
    intermediate_steps: Steps the LLM has taken to date,
        along with observations.
    **kwargs: User inputs.

Returns:
    Full inputs for the LLMChain.
agent_scratchpadr"  )rN  rG  )r8   rE   rG   rK  
new_inputss        r9   rQ  Agent.get_full_inputs  s1     --.@A*2JJG
'&'J''r=   c                Z    [        [        U R                  R                  5      S1-
  5      $ )rS   r]  r$  r7   s    r9   rT   Agent.input_keys.  s'     C1126H5IIJJr=   aftermodec                   U R                   R                  nSUR                  ;  a  [        R	                  S5        UR                  R                  S5        [        U[        5      (       a  U=R                  S-  sl        U $ [        U[        5      (       a  U=R                  S-  sl
        U $ S[        U5       3n[        U5      eU $ )a  Validate that prompt matches format.

Args:
    values: Values to validate.

Returns:
    Validated values.

Raises:
    ValueError: If `agent_scratchpad` is not in prompt.input_variables
        and prompt is not a FewShotPromptTemplate or a PromptTemplate.
r]  zl`agent_scratchpad` should be a variable in prompt.input_variables. Did not find it, so adding it at the end.z
{agent_scratchpad}zGot unexpected prompt type )r   promptinput_variablesloggerwarningappendrw   r   templater   r   typer^   )r8   rf  rb   s      r9   validate_promptAgent.validate_prompt3  s     &&V%;%;;NN= ""))*<=&.11#99  F$9::!77  4DL>B o%r=   c                    g)z&Prefix to append the observation with.Nr6   r7   s    r9   r8  Agent.observation_prefixQ  rJ   r=   c                    g)z#Prefix to append the LLM call with.Nr6   r7   s    r9   r7  Agent.llm_prefixV  rJ   r=   c                    g)z_Create a prompt for this class.

Args:
    tools: Tools to use.

Returns:
    Prompt template.
Nr6   rh   rj   s     r9   create_promptAgent.create_prompt[  rJ   r=   c                    g)zOValidate that appropriate tools are passed in.

Args:
    tools: Tools to use.
Nr6   rt  s     r9   _validate_toolsAgent._validate_toolsg  rJ   r=   c                    g)z)Get default output parser for this class.Nr6   )rh   rG   s     r9   _get_default_output_parser Agent._get_default_output_parsero  rJ   r=   c                    U R                  U5        [        UU R                  U5      US9nU Vs/ s H  owR                  PM     nnU=(       d    U R	                  5       n	U " SUUU	S.UD6$ s  snf )a   Construct an agent from an LLM and tools.

Args:
    llm: Language model to use.
    tools: Tools to use.
    callback_manager: Callback manager to use.
    output_parser: Output parser to use.
    kwargs: Additional arguments.

Returns:
    Agent object.
)ri   rf  rk   )r   r=  r!  r6   )rx  r-   ru  namer{  )
rh   ri   rj   rk   r!  rG   r   tool
tool_names_output_parsers
             r9   rl   Agent.from_llm_and_toolst  s    * 	E"$$U+-
	
 -22EDiiE
2&J#*H*H*J 
$(
 	
 	
 3s   A,c                   US:X  a  [        SS0S5      $ US:X  a  SnU H4  u  pVXER                  -  nUSU R                   U SU R                   3-  nM6     US-  nX@R                  S.n0 UEUEnU R
                  R                  " S
0 UD6n	U R                  R                  U	5      n
[        U
[         5      (       a  U
$ [        SU	0U	5      $ S	U 3n[        U5      e)at  Return response when agent has been stopped due to max iterations.

Args:
    early_stopping_method: Method to use for early stopping.
    intermediate_steps: Steps the LLM has taken to date,
        along with observations.
    **kwargs: User inputs.

Returns:
    Agent finish object.

Raises:
    ValueError: If `early_stopping_method` is not in ['force', 'generate'].
rX   r5   rY   rZ   generaterE  zB

I now need to return a final answer based on the previous steps:r\  zBearly_stopping_method should be one of `force` or `generate`, got r6   )r   rJ  r8  r7  rG  r   rR  r!  r   rw   r^   )r8   r`   rE   rG   rK  rL  rM  r^  rT  rU  parsed_outputrb   s               r9   rc   Agent.return_stopped_response  s   ( !G+PQ  !J.H'9#JJ&001+b@QR (: VH /7

KJ2V2z2K..00?;?K ..44[AM-55$$ +6DD()+ 	 or=   c                4    U R                   U R                  S.$ )r   r6  r6  r7   s    r9   r   Agent.tool_run_logging_kwargs  s     //"&"9"9
 	
r=   r6   r   r   r   )rE   r   r   zstr | list[BaseMessage]r   r   )rE   r   rG   r
   r   zbuiltins.dict[str, Any]r   r&   r   )rj   r   r   r   )rj   r   r   r   )rG   r
   r   r   )NN)ri   r   rj   r   rk   r   r!  zAgentOutputParser | NonerG   r
   r   r<  )r`   rx   rE   r   rG   r
   r   r   r   ) r   r   r   r   r   r  r=  r'   r|   r@   r   r:   rG  rN  rH   rM   rQ  rT   r%   rm  r   r8  r7  r   ru  rx  r{  rl   rc   r   r   r   r   s   @r9   r<  r<    sA    $$$)&*M#*H "   
 
	9	 
!	  $595 5 	5
 
#50  $<9< < 	<
 
#<*(9( ( 
!	(& K K '" #: 5  5 2  2      8  8 
 8<26!
!
 "!
 5	!

 0!
 !
 
!
 !
F5"5 :5 	5
 
5n
 
r=   r<  c                      \ rS rSr% SrSrS\S'    SrS\S'    \ S     SS	 jj5       r	\ S     SS
 jj5       r
Srg)ExceptionTooli  z!Tool that just returns the query.
_Exceptionrx   r~  zException tooldescriptionNc                    U$ r   r6   r8   queryrun_managers      r9   _runExceptionTool._run  s	     r=   c                   #    U$ 7fr   r6   r  s      r9   _arunExceptionTool._arun  s      s   r6   r   )r  rx   r  z CallbackManagerForToolRun | Noner   rx   )r  rx   r  z%AsyncCallbackManagerForToolRun | Noner   rx   )r   r   r   r   r   r~  r  r  r'   r  r  r   r6   r=   r9   r  r    s    +D#'K'" 9= 6 
	   >B ; 
	 r=   r  c                  l   \ rS rSr% SrS\S'    S\S'    SrS\S	'    S
rS\S'    SrS\S'    Sr	S\S'    Sr
S\S'    SrS\S'    \ S7         S8S jj5       r\" SS9S9S j5       r\" SS9\S:S j5       5       r\S;S j5       r\S<S j5       rS<S  jr S7SSS!.         S=S" jjjr\S>S# j5       r\S>S$ j5       rS?S% jrS@S& jr S7       SAS' jjr S7       SBS( jjr    SCS) jr S7           SDS* jjr S7           SES+ jjr S7         SFS, jjr  S7           SGS- jjr! S7           SHS. jjr" S7         SIS/ jjr# S7     SJS0 jjr$ S7     SKS1 jjr%    SLS2 jr&    SMS3 jr'\ S7       SNS4 jj5       r(\ S7       SOS5 jj5       r)S6r*g)PAgentExecutori  zAgent that is using tools.7BaseSingleActionAgent | BaseMultiActionAgent | Runnableagentr   rj   Fr   return_intermediate_steps   z
int | Nonemax_iterationsNzfloat | Nonemax_execution_timerX   rx   r`   z3bool | str | Callable[[OutputParserException], str]handle_parsing_errorszNint | Callable[[list[tuple[AgentAction, str]]], list[tuple[AgentAction, str]]]trim_intermediate_stepsc                    U " SUUUS.UD6$ )zCreate from agent and tools.

Args:
    agent: Agent to use.
    tools: Tools to use.
    callbacks: Callbacks to use.
    kwargs: Additional arguments.

Returns:
    Agent executor object.
)r  rj   rF   r6   r6   )rh   r  rj   rF   rG   s        r9   from_agent_and_tools"AgentExecutor.from_agent_and_tools"  s)    &  

 	
 	
r=   rb  rc  c                   U R                   nU R                  nUR                  5       nUbW  [        U5      U Vs1 s H  oDR                  iM     sn:w  a.  SU SU Vs/ s H  oDR                  PM     sn S3n[        U5      eU $ s  snf s  snf )zValidate that tools are compatible with agent.

Args:
    values: Values to validate.

Returns:
    Validated values.

Raises:
    ValueError: If allowed tools are different than provided tools.
zAllowed tools (z!) different than provided tools ())r  rj   r@   r&  r~  r^   )r8   r  rj   r=  r  rb   s         r9   validate_toolsAgentExecutor.validate_tools<  s     



//1$]);"'@
"'$II%@
 *
 "- 1#:?#@%$II%#@"AD  S/!@

 $As   BB

beforec                z   UR                  S5      nU(       an  [        U[        5      (       aY   UR                  nU[        [
           [        -  :H  nUR                  SS5      nU(       a  [        UUS9US'   U$ [        UUS9US'   U$ ! [         a    Sn NE[         a    [        R                  S5        Sn Ngf = f)zoConvert runnable to agent if passed in.

Args:
    values: Values to validate.

Returns:
    Validated values.
r  Fz.Unexpected error getting OutputType from agentr   T)r   r   )getrw   r   
OutputTyper%  r   r   	TypeError	Exceptionrh  	exceptionpopr  r   )rh   valuesr  output_typemulti_actionr   s         r9   validate_runnable_agent%AgentExecutor.validate_runnable_agentV  s     

7#Zx00N#..  +d;.?+.MM$jj):DAO":"$3#w 	 #0"$3#w '  %$ %  !QR$%s   B	 	B: B:9B:c                    [        U R                  [        5      (       a  [        SU R                  5      $ U R                  $ )a  Type cast self.agent.

If the `agent` attribute is a Runnable, it will be converted one of
RunnableAgentType in the validate_runnable_agent root_validator.

To support instantiating with a Runnable, here we explicitly cast the type
to reflect the changes made in the root_validator.
RunnableAgentType)rw   r  r   r   r7   s    r9   _action_agentAgentExecutor._action_agentz  s1     djj(+++TZZ88zzr=   c                    Sn[        U5      e)zRaise error - saving not supported for Agent Executors.

Args:
    file_path: Path to save to.

Raises:
    ValueError: Saving not supported for agent executors.
zpSaving not supported for agent executors. If you are trying to save the agent, please use the `.save_agent(...)`)r^   )r8   r   rb   s      r9   r   AgentExecutor.save  s    ! 	
 or=   c                8    U R                   R                  U5      $ )zBSave the underlying agent.

Args:
    file_path: Path to save to.
)r  r   )r8   r   s     r9   
save_agentAgentExecutor.save_agent  s     !!&&y11r=   )include_run_infoasync_c               0    [        U UUU R                  US9$ )a  Enables iteration over steps taken to reach final output.

Args:
    inputs: Inputs to the agent.
    callbacks: Callbacks to run.
    include_run_info: Whether to include run info.
    async_: Whether to run async. (Ignored)

Returns:
    Agent executor iterator object.
)tagsr  )r)   r  )r8   r  rF   r  r  s        r9   iterAgentExecutor.iter  s$    & %-
 	
r=   c                .    U R                   R                  $ r   )r  rT   r7   s    r9   rT   AgentExecutor.input_keys  s     !!,,,r=   c                    U R                   (       a  / U R                  R                  QSP$ U R                  R                  $ )zReturn the singular output key.rE   )r  r  r:   r7   s    r9   output_keysAgentExecutor.output_keys  s<     ))LT''55L7KLL!!///r=   c                `    U R                    Vs0 s H  o"R                  U_M     snU   $ s  snf )zOLookup tool by name.

Args:
    name: Name of tool.

Returns:
    Tool object.
)rj   r~  )r8   r~  r  s      r9   lookup_toolAgentExecutor.lookup_tool  s+     -1JJ7JD		4J7==7s   +c                    U R                   b  XR                   :  a  gU R                  S L =(       d    X R                  :  $ )NF)r  r  )r8   
iterationstime_elapseds      r9   _should_continueAgentExecutor._should_continue  s;    *z=P=P/P&&$.X,AXAX2XXr=   c                    U(       a  UR                  USU R                  S9  UR                  nU R                  (       a  X$S'   U$ Ngreen)colorverboserE   on_agent_finishr  r:   r  r8   r5   rE   r  r  s        r9   _returnAgentExecutor._return  sC     ''gt||'T++))1C-.r=   c                   #    U(       a#  UR                  USU R                  S9I S h  vN   UR                  nU R                  (       a  X$S'   U$  N'7fr  r  r  s        r9   _areturnAgentExecutor._areturn  s^      -- .   
 ++))1C-.s   &AA(Ac                    [        US   [        5      (       a!  [        U5      S:w  a  Sn[        U5      eUS   $ U Vs/ s H2  n[        U[        5      (       d  M  UR
                  UR                  4PM4     sn$ s  snf )Nr     z>Expected a single AgentFinish output, but got multiple values.)rw   r   r9  r^   r   rL  rM  )r8   r  rb   as       r9   _consume_next_step AgentExecutor._consume_next_step  sk     fRj+..6{aV o%":39V6aZ9=U)1==)6VVVs   A:A:c                \    U R                  [        U R                  UUUUU5      5      5      $ r   )r  r%  _iter_next_step)r8   name_to_tool_mapcolor_mappingr  rE   r  s         r9   _take_next_stepAgentExecutor._take_next_step  s<     &&$$$!&

 
	
r=   c              #    #     U R                  U5      nU R                  R                  " U4SU(       a  UR                  5       OS0UD6n[        U[,        5      (       a  Uv   g[        U[        5      (       a  U/OUnU H  nUv   M	     U H  nU R/                  UUUU5      v   M     g! [         Ga  n[        U R                  [        5      (       a  U R                  (       + nOSnU(       a  SU< 3n	[        U	5      Ue[        U5      n
[        U R                  [        5      (       a?  UR                  (       a+  [        UR                  5      n[        UR                  5      n
OiSnOf[        U R                  [        5      (       a  U R                  nO:[        U R                  5      (       a  U R                  U5      nOSn	[        U	5      Ue[        SX5      nU(       a  UR                  USS	9  U R                  R!                  5       n[#        5       R$                  " UR&                  4U R(                  SU(       a  UR                  5       OSS
.UD6n[+        XkS9v    SnAgSnAff = f7f)Take a single step in the thought-action-observation loop.

Override this to take control of how the agent makes and acts on choices.
rF   NFAn output parsing error occurred. In order to pass this error back to the agent and have it try again, pass `handle_parsing_errors=True` to the AgentExecutor. This is the error: Invalid or incomplete response.Got unexpected type of `handle_parsing_errors`r  r  r  r  r  rF   rL  rM  )_prepare_intermediate_stepsr  rH   	get_childr   rw   r  r   r^   rx   send_to_llmrM  
llm_outputcallabler   on_agent_actionr   r  r/  
tool_inputr  r   r   _perform_agent_action)r8   r  r  r  rE   r  r5   eraise_errorrb   r   rM  tool_run_kwargsactionsagent_actions                  r9   r  AgentExecutor._iter_next_step  s<    0	!%!A!ABT!U '',,"5@+//1d F^ fk**L )==6(6#L $#L,, 	  $e % '	$44d;;"&"<"<<#* +,0  !o1,q6D$44d;;=="%amm"4Kq||,D"BKD66<<"88$4455"88;F o1, {AF++F'+B"00HHJO'/--!!5@+//1d	
 "K 6CCO'	s1   I1AB, A!I1,I.7F-I)$I1)I..I1c                   U(       a  UR                  USS9  UR                  U;   a  XR                     nUR                  nX#R                     nU R                  R	                  5       nU(       a  SUS'   UR
                  " UR                  4U R                  UU(       a  UR                  5       OS S.UD6n	O~U R                  R	                  5       n[        5       R
                  " UR                  [        UR                  5       5      S.4U R                  S U(       a  UR                  5       OS S.UD6n	[        X9S9$ )Nr  r  rZ   r7  r  requested_tool_nameavailable_tool_namesr  )r  r  return_directr  r   r/  r  r  r  r+   r%  keysr   
r8   r  r  r  r  r  r  r  r  rM  s
             r9   r  #AgentExecutor._perform_agent_actiond  s1    ''G'D 00#$5$56D ..M!"3"34E"00HHJO02-((''5@+//1d	
 "K #00HHJO%-+++7+<+<,01A1F1F1H,I	
 5@+//1d	 "	K FFr=   c           	        #    U R                  U R                  UUUUU5       Vs/ s S h  vN nUPM   N
 sn5      $ s  snf 7fr   )r  _aiter_next_step)r8   r  r  r  rE   r  r  s          r9   _atake_next_stepAgentExecutor._atake_next_step  sV      &&  $44$!& 	 	 	
 	
	s&   #A>6
46
>6
>Ac               N  #     U R                  U5      nU R                  R                  " U4SU(       a  UR                  5       OS0UD6I Sh  vN n[        U[*        5      (       a  U7v   g[        U[        5      (       a  U/OUnU H  nU7v   M
     [,        R.                  " U Vs/ s H  nU R1                  UUUU5      PM     sn6 I Sh  vN nU H  nU7v   M
     g N! [         Ga  n[        U R                  [        5      (       a  U R                  (       + nOSnU(       a  SU< 3n	[        U	5      Ue[        U5      n
[        U R                  [        5      (       a?  UR                  (       a+  [        UR                  5      n[        UR                  5      n
OiSnOf[        U R                  [        5      (       a  U R                  nO:[        U R                  5      (       a  U R                  U5      nOSn	[        U	5      Ue[        SX5      nU R                  R                  5       n[!        5       R"                  " UR$                  4U R&                  SU(       a  UR                  5       OSS.UD6I Sh  vN  n[)        XkS	97v    SnAgSnAff = fs  snf  GN7f)
r  rF   NFr  r  r  r  r  r  )r  r  rM   r  r   rw   r  r   r^   rx   r  rM  r  r  r   r   r  r3  r  r  r   r   asynciogather_aperform_agent_action)r8   r  r  r  rE   r  r5   r  r  rb   r   rM  r  r  r  resultr  s                    r9   r	  AgentExecutor._aiter_next_step  sz    .	!%!A!ABT!U  --33"5@+//1d  FZ fk**L )==6(6#L $ ~~ %, %,L ++$! 	 %,

 

 EK I
 % %	$44d;;"&"<"<<#* +,0  !o1,q6D$44d;;=="%amm"4Kq||,D"BKD66<<"88$4455"88;F o1, {AF"00HHJO - 4 4!!!5@+//1d	!
 "!  K 6CCK%	f

sg   J%A
C% C#C% AJ%*JJ%J"J%#C% %J0FJ>J?JJ%J	J%c                  #    U(       a#  UR                  UU R                  SS9I S h  vN   UR                  U;   a  XR                     nUR                  nX#R                     nU R                  R                  5       nU(       a  SUS'   UR                  " UR                  4U R                  UU(       a  UR                  5       OS S.UD6I S h  vN n	OU R                  R                  5       n[        5       R                  " UR                  [        UR                  5       5      S.4U R                  S U(       a  UR                  5       OS S.UD6I S h  vN n	[        X9S9$  GN= N N7f)Nr  )r  r  rZ   r7  r  r  r  )r  r  r  r  r  r   r3  r  r  r+   r%  r  r   r  s
             r9   r  $AgentExecutor._aperform_agent_action  sg     -- .     00#$5$56D ..M!"3"34E"00HHJO02- $		''!5@+//1d	!
 "! K #00HHJO + 2 2+7+<+<,01A1F1F1H,I	!
 5@+//1d	! "	! 	K FFC	s5   &E,E%B'E,E(BE,E*E,(E,*E,c                   U R                    Vs0 s H  o3R                  U_M     nn[        U R                    Vs/ s H  o3R                  PM     snSS/S9n/ nSnSn[        R                  " 5       n	U R	                  Xx5      (       a  U R                  UUUUUS9n
[        U
[        5      (       a  U R                  U
UUS9$ UR                  U
5        [        U
5      S:X  a*  U
S   nU R                  U5      nUb  U R                  UUUS9$ US-  n[        R                  " 5       U	-
  nU R	                  Xx5      (       a  M  U R                  R                  " U R                  U40 UD6nU R                  XUS9$ s  snf s  snf )z(Run text through and get agent response.r  redexcluded_colorsr           r  r  )rj   r~  r"   timer  r  rw   r   r  extendr9  _get_tool_returnr  rc   r`   r8   r  r  r  r  r  rE   r  r  
start_timenext_step_outputnext_step_actiontool_returnr5   s                 r9   _callAgentExecutor._call"  s    9=

C
IItO
C)#'::.:4YY:.$e,
 =?
YY[
##J==#33 "'  4   *K88||$& + $   %%&67#$)#3A#6 "334DE*<<#*$/ (  
 !OJ99;3L7 ##J==8 ##;;&&
 

 ||FK|PP[ D /s
   E8E=c           	       #    U R                    Vs0 s H  o3R                  U_M     nn[        U R                    Vs/ s H  o3R                  PM     snS/S9n/ nSnSn[        R                  " 5       n	 [	        U R
                  5       ISh  vN   U R                  Xx5      (       a  U R                  UUUUUS9I Sh  vN n
[        U
[        5      (       a*  U R                  U
UUS9I Sh  vN sSSS5      ISh  vN   $ UR                  U
5        [        U
5      S:X  aC  U
S   nU R                  U5      nUb*  U R                  UUUS9I Sh  vN sSSS5      ISh  vN   $ US-  n[        R                  " 5       U	-
  nU R                  Xx5      (       a  M  U R                  R                  " U R                   U40 UD6nU R                  UUUS9I Sh  vN sSSS5      ISh  vN   $ s  snf s  snf  GNi GN; GN GN N N N/ N!! , ISh  vN  (       d  f       g= f! ["        [$        R"                  4 aE    U R                  R                  " U R                   U40 UD6nU R                  UUUS9I Sh  vN  s $ f = f7f)z.Async run text through and get agent response.r  r  r   r  Nr  r  )rj   r~  r"   r  r.   r  r  r
  rw   r   r  r  r9  r  r  rc   r`   TimeoutErrorr  r  s                 r9   _acallAgentExecutor._acallX  s     9=

C
IItO
C)#'::.:4YY:.$I
 =?
YY[
4	&t'>'>??++JEE-1-B-B(%*$/ .C . ($ ""2K@@%)]],.(3 &3 &   @??  '--.>?+,1+;A+>(&*&;&;<L&M&2)- + 2,7 *7 * $- @??8 !OJ#'99;#;L9 ++JEE: ++CC..& 
 "]]& + +  G @?? D / @(  @,$- @FG @???P g223 	''??**" F
 "' '    	s6  JG,JG1"J4H$ G6H$ -H
>G9?-H
,G<-H
0H$ <G?=H$ JAH
HH
H$ H H$ $J%3H
<H
HH
H$ &H'H$ +J6H$ 9H
<H
?H$ H
H$ H
H$ 
H!HH!H$  J!H$ $AJ:I=;J JJJc                R   Uu  p#U R                    Vs0 s H  oDR                  U_M     nnSn[        U R                  R                  5      S:  a  U R                  R                  S   nUR
                  U;   a*  XRR
                     R                  (       a  [        Xc0S5      $ gs  snf )z&Check if the tool is a returning tool.r5   r   rZ   N)rj   r~  r9  r  r:   r  r  r   )r8   r  r  rM  r  r  return_value_keys          r9   r  AgentExecutor._get_tool_return  s    
 %5!8<

C
IItO
C#t!!//014#11??B !11 !2!23AA!/   Ds   B$c                    [        U R                  [        5      (       a  U R                  S:  a  XR                  * S  $ [        U R                  5      (       a  U R                  U5      $ U$ )Nr   )rw   r  intr  )r8   rE   s     r9   r  )AgentExecutor._prepare_intermediate_steps  sc    
 t33S99,,q0%'C'C&C&EFFD0011//0BCC!!r=   c           	   +     #    [        U5      n[        U UUR                  S5      4UR                  S5      UR                  S5      UR                  S5      UR                  S5      SS.UD6nU Sh  vN   g N7f)	zEnables streaming over steps taken to reach final output.

Args:
    input: Input to the agent.
    config: Config to use.
    kwargs: Additional arguments.

Yields:
    Addable dictionary.
rF   r  metadatarun_namerun_idTr  r/  r0  r1  yield_actionsNr   r)   r  )r8   inputr   rG   iterators        r9   r   AgentExecutor.stream  s|     " v&(JJ{#

 F#ZZ
+ZZ
+::h'

 

 s   A0A:2A83A:c           	    
  #    [        U5      n[        U UUR                  S5      4UR                  S5      UR                  S5      UR                  S5      UR                  S5      SS.UD6nU  Sh  vN nU7v   M   N
 g7f)	zAsync enables streaming over steps taken to reach final output.

Args:
    input: Input to the agent.
    config: Config to use.
    kwargs: Additional arguments.

Yields:
    Addable dictionary.
rF   r  r/  r0  r1  Tr2  Nr4  )r8   r5  r   rG   r6  steps         r9   r
  AgentExecutor.astream  s     " v&(JJ{#

 F#ZZ
+ZZ
+::h'

 

 # 	$J	(s*   A-B/B3A?4B7B?BBr6   r   )
r  r  rj   r   rF   r   rG   r
   r   r  r  )r  r|   r   r
   )r   z,BaseSingleActionAgent | BaseMultiActionAgentr   )
r  r
   rF   r   r  r   r  r   r   r)   r   )r~  rx   r   r!   )r  r,  r  floatr   r   )r5   r   rE   r%  r  !CallbackManagerForChainRun | Noner   dict[str, Any])r5   r   rE   r%  r  &AsyncCallbackManagerForChainRun | Noner   r=  )r  NextStepOutputr   +AgentFinish | list[tuple[AgentAction, str]])r  dict[str, BaseTool]r  dict[str, str]r  rB  rE   r   r  r<  r   r@  )r  rA  r  rB  r  rB  rE   r   r  r<  r   z/Iterator[AgentFinish | AgentAction | AgentStep])
r  rA  r  rB  r  r   r  r<  r   r   )r  rA  r  rB  r  rB  rE   r   r  r>  r   r@  )r  rA  r  rB  r  rB  rE   r   r  r>  r   z4AsyncIterator[AgentFinish | AgentAction | AgentStep])
r  rA  r  rB  r  r   r  r>  r   r   )r  rB  r  r<  r   r=  )r  rB  r  r>  r   rB  )r  ztuple[AgentAction, str]r   zAgentFinish | None)rE   r   r   r   )r5  dict[str, Any] | Anyr   RunnableConfig | NonerG   r
   r   zIterator[AddableDict])r5  rC  r   rD  rG   r
   r   zAsyncIterator[AddableDict])+r   r   r   r   r   r  r  r  r  r`   r  r  r   r  r%   r  r  r   r  r'   r   r  r  rT   r  r  r  r  r  r  r  r  r  r
  r	  r  r"  r&  r  r  r   r
  r   r6   r=   r9   r  r    s   $BB3-&+t+3!#NJ#9 (,+ ")3( RWNV 	 V 
  $	
F
 "
 	

 
 

 
2 '" #2 (#   $ D     2  $

 "'

 

 
 
 

6 - - 0 0	>Y :>	 ! 7	
 
" ?C	 ! <	
 
"	W	W 
5	W" :>
-
 &
 	

 :
 7
 
5
4 :>M-M &M 	M
 :M 7M 
9Mh :>%G-%G &%G "	%G
 7%G 
%GZ ?C
-
 &
 	

 :
 <
 
5
6 ?CU-U &U 	U
 :U <U 
>Ux ?C)G-)G &)G "	)G
 <)G 
)G\ :>4Q4Q 74Q 
	4Qr ?CGG <G 
	GR1 
*"9" 
'"  )-# & 	
 
 <  )-# & 	
 
$ r=   r  )`r   
__future__r   r  builtinsr   r   loggingr  abcr   collections.abcr   r   r   r   pathlibr	   typingr
   r   r   langchain_core._apir   langchain_core.agentsr   r   r   langchain_core.callbacksr   r   r   r   r   r   langchain_core.exceptionsr   langchain_core.language_modelsr   langchain_core.messagesr   langchain_core.output_parsersr   langchain_core.promptsr   langchain_core.prompts.few_shotr   langchain_core.prompts.promptr   langchain_core.runnablesr   r   r   langchain_core.runnables.utilsr    langchain_core.toolsr!   langchain_core.utils.inputr"   pydanticr#   r$   r%   typing_extensionsr&   r'   "langchain_classic._api.deprecationr(   'langchain_classic.agents.agent_iteratorr)   $langchain_classic.agents.agent_typesr*   langchain_classic.agents.toolsr+   langchain_classic.chains.baser,   langchain_classic.chains.llmr-   #langchain_classic.utilities.asyncior.   	getLoggerr   rh  r0   r   r   r%  r   r   r  r  r<  r  r?  r  r  r6   r=   r9   <module>rd     s   K "        G G 
  * E E  < < / : 5 A 8 L L 6 ) 8 ; ; , H I : 6 / 1 ?			8	$cI cLI9 IX3({)BC 3T+&45(i) iXn3 nb %
Q
0 Q

Q
h %
T
! T

T
nH 2 kK/);<!$<< LE Lr=   