ó
    ±"³jº ã                  ó  • % S SK Jr  S SKJr  S SKJr  S SKJrJrJ	r	J
r
Jr  S SKJrJr  S SK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J r J!r!J"r"J#r#  S SK$J%r%  S SK&J'r'J(r(  S SK)J*r*J+r+J,r,J-r-  S SK.J/r/J0r0J1r1J2r2J3r3J4r4J5r5  S SK6J7r7J8r8  SSK9J:r:  SSK;J<r<J=r=  \(       a:  S SKJ>r>  S SK?J@r@JArA  S SKBJCrC  S SKDJErEJFrFJGrGJHrHJIrI  S SKJJKrK  S SKLJMrM  S SKNJOrO  S SKPJQrQ  SrRS\SS'    SrTS\SS '    S!rUS\SS"'    S#rVS\SS$'    S%rWS\SS&'    S'rXS\SS('    S)rYS\SS*'    S+rZS\SS,'    \[\\\[\4   -  r]S\SS-'    \\\[\4   r^S\SS.'    \	\]/\\^   4   r_S\SS/'    \	\^/\\   4   r`S\SS0'    \[\\\[\4   -  raS\SS1'    \	\a/\\   4   rbS\SS2'    \	\/\\   4   rcS\SS3'    \S4   rd S5reS\SS6'    \[\4\/   -  rf \ " S7 S85      5       rg\" S9S:9 " S; S<\\\/   5      5       rhSHS= jriSIS> jrj\" S?S@9 " SA SB\\/   5      5       rk      SJSC jrlSKSD jrmSLSE jrnSMSF jrogG)Né    )Úannotations)ÚABC)ÚCounter)ÚAsyncIterableÚ	AwaitableÚCallableÚ
CollectionÚSequence)ÚKW_ONLYÚ	dataclass)Úchain)ÚTYPE_CHECKINGÚAnyÚClassVarÚGenericÚLiteralÚ	TypeAlias)ÚValidationError)Ú
deprecated)Ú_utils)ÚAgentInstructionÚAgentInstructionsÚSourcedInstructionÚnormalize_instructionsÚsourced_instruction)ÚPydanticAIDeprecationWarning)Ú
ModelRetryÚ	UserError)ÚAgentStreamEventÚCapabilityInstructionSourceÚModelResponseÚToolCallPart)Ú
AgentDepsTÚAgentNativeToolÚDeferredToolRequestsÚDeferredToolResultsÚ
RunContextÚSystemPromptFuncÚToolDefinition)ÚAbstractToolsetÚAgentToolseté   ©Úmerge_capability_fields)Úcollect_on_event_methodsÚmarked_listens_to)Ú_agent_graph)ÚAbstractAgentÚAgentModelSettings©ÚPrefixTools)ÚKnownModelNameÚModelÚModelRequestContextÚModelResolutionContextÚModelSelectionContext)ÚOutputContext)ÚFinalResult)ÚAgentRunResult)ÚEndz'_agent_graph.AgentNode[AgentDepsT, Any]r   Ú	AgentNodez?_agent_graph.AgentNode[AgentDepsT, Any] | End[FinalResult[Any]]Ú
NodeResultz,Callable[[], Awaitable[AgentRunResult[Any]]]ÚWrapRunHandlerzCallable[[_agent_graph.AgentNode[AgentDepsT, Any]], Awaitable[_agent_graph.AgentNode[AgentDepsT, Any] | End[FinalResult[Any]]]]ÚWrapNodeRunHandlerz9Callable[[ModelRequestContext], Awaitable[ModelResponse]]ÚWrapModelRequestHandlerzModel | KnownModelName | strÚModelSelectionzYCallable[[ModelSelectionContext[AgentDepsT]], ModelSelection | Awaitable[ModelSelection]]ÚModelSelectorz*ModelSelection | ModelSelector[AgentDepsT]Ú
AgentModelÚRawToolArgsÚValidatedToolArgsÚWrapToolValidateHandlerÚWrapToolExecuteHandlerÚ	RawOutputÚWrapOutputValidateHandlerÚWrapOutputProcessHandler)Ú	outermostÚ	innermostz7type[AbstractCapability[Any]] | AbstractCapability[Any]ÚCapabilityRefc                  óX   • \ rS rSr% SrSrS\S'    SrS\S'    SrS\S	'    Sr	S
\S'   Sr
g)ÚCapabilityOrderingéƒ   aX  Ordering constraints for a capability within a combined capability chain.

Capabilities follow middleware semantics: the first capability in the list is the
**outermost** layer, wrapping all others. Declare ordering constraints via
[`get_ordering`][pydantic_ai.capabilities.AbstractCapability.get_ordering]
to control a capability's position in the chain regardless of how the user lists them.

When a [`CombinedCapability`][pydantic_ai.capabilities.CombinedCapability] is
constructed, it topologically sorts its children to satisfy these constraints,
preserving user-provided order as a tiebreaker.
NzCapabilityPosition | NoneÚposition© zSequence[CapabilityRef]ÚwrapsÚ
wrapped_byz'Sequence[type[AbstractCapability[Any]]]Úrequires)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rT   Ú__annotations__rV   rW   rX   Ú__static_attributes__rU   ó    Ú^/home/mande/repo/quber/.venv/lib/python3.13/site-packages/pydantic_ai/capabilities/abstract.pyrR   rR   ƒ   sI   ‡ ñ
ð +/€HÐ'Ó.ØIà%'€EÐ"Ó'ð	ð +-€JÐ'Ó,ð	ð 9;€HÐ5Ó:ÚIr`   rR   F)Úinitc                  óÈ  • \ rS rSr% SrSrS\S'    \SSS j5       rS\S	'   S
r	S\S'    S
r
S\S'    SrS\S'    \STS j5       rSUS jr    SVS jr\\" S\S9SSS j5       5       r\SSS j5       r\SSS j5       r\SSS j5       r\SSS j5       r\SSS j5       r\SSS j5       rSWS jr\SXS j5       r\SYS j5       rSZS 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#SaS& jr$      SbS' jr%ScS( jr&SdS) jr'SeS* jr(\SSS+ j5       r)      SfS, jr*SgS- jr+ShS. jr,SiS/ jr-      SjS0 jr.      SjS1 jr/    S\S2 jr0      SkS3 jr1      SlS4 jr2      SmS5 jr3      SnS6 jr4        SoS7 jr5        SpS8 jr6        SqS9 jr7SrS: jr8      SsS; jr9      StS< jr:        SuS= jr;        SvS> jr<        SwS? jr=          SxS@ jr>          SySA jr?            SzSB jr@            S{SC jrA          SySD jrB            S|SE jrC            S}SF jrD            S~SG jrE        SSH jrF        S€SI jrG          S�SJ jrH          S‚SK jrI        S€SL jrJ        S€SM jrK          SƒSN jrL          S„SO jrM      S…SP jrNS†SQ jrOSRrPg
)‡ÚAbstractCapabilityé°   a{  Abstract base class for agent capabilities.

A capability is a reusable, composable unit of agent behavior that can provide
instructions, model settings, tools, and request/response hooks.

Lifecycle: capabilities are passed to an [`Agent`][pydantic_ai.Agent] at construction time, where
most `get_*` methods are called to collect static configuration (instructions, model
settings, toolsets, native tools). When [`for_run`][pydantic_ai.capabilities.AbstractCapability.for_run]
returns a replacement instance, that configuration is re-extracted from the replacement at run
setup. The exception is
[`get_wrapper_toolset`][pydantic_ai.capabilities.AbstractCapability.get_wrapper_toolset],
which is always called per-run during toolset assembly. Then, on each model request during a
run, the [`before_model_request`][pydantic_ai.capabilities.AbstractCapability.before_model_request]
and [`after_model_request`][pydantic_ai.capabilities.AbstractCapability.after_model_request]
hooks are called to allow dynamic adjustments.

See the [capabilities documentation](../capabilities/overview.md) for built-in capabilities.

[`get_serialization_name`][pydantic_ai.capabilities.AbstractCapability.get_serialization_name]
and [`from_spec`][pydantic_ai.capabilities.AbstractCapability.from_spec] support
YAML/JSON specs (via `Agent.from_spec`); they have
sensible defaults and typically don't need to be overridden.
FzClassVar[bool]Ú_safe_at_runtimeÚboolc                ó   • g)z°Whether this app-facing capability may emit `CustomEvent`s while dispatching callbacks.

A property rather than a flag so wrappers can derive it from the capability they wrap.
FrU   ©Úselfs    ra   Ú_emits_app_eventsÚ$AbstractCapability._emits_app_events×   s   € ð r`   r   Ú_Nú
str | NoneÚidÚdescriptionÚdefer_loadingc                ó   • [        U5      $ )a  Combine capabilities that resolved to the same `id` into the one the run will use.

Two capabilities under one `id` name the same thing, so exactly one of them can be what
that `id` refers to. The default merges them field by field: a value only one of them
states is kept, and a value both state takes the later one.

That default needs no thought from most capabilities, because it follows from the `id`.
Declaring a default `id` *is* the statement that an agent has one of these, so a repeat is
one configuration stated twice and merging is what it meant. A capability that can
legitimately appear several times declares no default `id` instead -- and then this is
never reached, because the run tells anonymous capabilities apart itself, and an `id` the
*user* passed to such a capability is a name they chose, so passing it twice is reported as
a collision rather than merged.

Override it when composing takes more than merging fields: `NativeOrLocalTool` rebuilds its
native tool from the merged configuration, because that tool, not the capability, is what
reaches the provider.

Only reached *within* one layer: a capability supplied for a run overrides its agent-level
namesake outright rather than composing with it.

Args:
    capabilities: The two or more capabilities sharing an `id`, in application order.
        All are instances of `cls`; a shared `id` across *different* classes is always
        rejected, since no one class can say how it composes.

Returns:
    The single capability the `id` refers to for this run.
r-   )ÚclsÚcapabilitiess     ra   ÚcombineÚAbstractCapability.combineý   s   € ô> ' |Ó4Ð4r`   c                ó   • U" U 5        g)zôRun a visitor function on all leaf capabilities in this tree.

For a single capability, calls the visitor on itself.
Overridden by [`CombinedCapability`][pydantic_ai.capabilities.CombinedCapability]
to recursively visit all child capabilities.
NrU   ©rj   Úvisitors     ra   ÚapplyÚAbstractCapability.apply  s   € ñ 	��r`   c                ó   • U" U 5      $ )a¤  Run a visitor function on the same capabilities as `apply`, and replace them in this tree with its result.

Analogous to
[`AbstractToolset.visit_and_replace`][pydantic_ai.toolsets.AbstractToolset.visit_and_replace],
except that returning `None` removes the visited capability instead of replacing it.

Rewrites in place: containers and wrappers rebuild only the branches that changed, so what
survives keeps its position in the hierarchy and a wrapper goes on wrapping whatever is left
of its subtree. Rebuilding a tree from the flat list `apply` produces does neither: it loses
the nesting, and re-adds a container's children next to the wrapper that already contributes
them.

Returns `self` when nothing changed, and `None` when the visitor removed everything.

For a single capability, returns the visitor's result for itself. Overridden by
[`CombinedCapability`][pydantic_ai.capabilities.CombinedCapability] and
[`WrapperCapability`][pydantic_ai.capabilities.WrapperCapability] to rebuild their children;
a custom capability that overrides `apply` because it holds children of its own should
override this alongside it, or those children are invisible to callers rewriting the tree.
rU   rx   s     ra   Úvisit_and_replaceÚ$AbstractCapability.visit_and_replace'  s   € ñ. �t‹}Ðr`   zƒ`has_wrap_node_run` is deprecated: `wrap_node_run` now runs under every way of driving a run, so there is nothing left to test for.)Úcategoryc                ó   • U R                   $ )z³Whether this capability (or any sub-capability) overrides wrap_node_run.

Deprecated: `wrap_node_run` runs under every way of driving a run, so there is nothing left to test for.
)Ú_has_wrap_node_runri   s    ra   Úhas_wrap_node_runÚ$AbstractCapability.has_wrap_node_run@  s   € ð ×&Ñ&Ð&r`   c                óL   • [        U 5      R                  [        R                  L$ ©N)ÚtypeÚwrap_node_runrd   ri   s    ra   r�   Ú%AbstractCapability._has_wrap_node_runM  s   € ä�D‹z×'Ñ'Ô/A×/OÑ/OÐOÐOr`   c                óL   • [        U 5      R                  [        R                  L$ r…   )r†   Úon_node_run_errorrd   ri   s    ra   Ú_has_on_node_run_errorÚ)AbstractCapability._has_on_node_run_errorQ  s   € ä�D‹z×+Ñ+Ô3E×3WÑ3WÐWÐWr`   c                óL   • [        U 5      R                  [        R                  L$ r…   )r†   Úwrap_model_requestrd   ri   s    ra   Ú_has_wrap_model_requestÚ*AbstractCapability._has_wrap_model_requestU  s   € ä�D‹z×,Ñ,Ô4F×4YÑ4YÐYÐYr`   c                óL   • [        U 5      R                  [        R                  L$ r…   )r†   Úon_model_request_errorrd   ri   s    ra   Ú_has_on_model_request_errorÚ.AbstractCapability._has_on_model_request_errorY  s   € ä�D‹z×0Ñ0Ô8J×8aÑ8aÐaÐar`   c                óL   • [        U 5      R                  [        R                  L$ )zPWhether this capability (or any sub-capability) overrides wrap_run_event_stream.)r†   Úwrap_run_event_streamrd   ri   s    ra   Úhas_wrap_run_event_streamÚ,AbstractCapability.has_wrap_run_event_stream]  s    € ô �D‹z×/Ñ/Ô7I×7_Ñ7_Ð_Ð_r`   c                ó”   • [        U 5      R                  [        R                  L=(       d    [        [	        [        U 5      5      5      $ )zNWhether this capability handles run events dynamically or with marked methods.)r†   Úon_eventrd   rg   r/   ri   s    ra   Úhas_on_eventÚAbstractCapability.has_on_eventb  s7   € ô �D‹z×"Ñ"Ô*<×*EÑ*EÐE×sÌÔNfÔgkÐlpÓgqÓNrÓIsÐsr`   c                ó„   • [        U 5      R                  [        R                  L=(       d    [        [        U 5      U5      $ )a&  Whether [`on_event`][pydantic_ai.capabilities.AbstractCapability.on_event] would reach a listener for `event`.

Dispatch asks this before descending, so a capability that listens to a few event classes
isn't woken for every event in the run. The default reports `True` for any event a
[`@on_event`][pydantic_ai.capabilities.on_event]-marked method accepts, and for every event
when `on_event` is overridden directly, since what an override dispatches to isn't knowable
here. Override this alongside `on_event` when you can report something narrower.
)r†   rš   rd   r0   )rj   Úevents     ra   Ú
listens_toÚAbstractCapability.listens_tog  s5   € ô �D‹z×"Ñ"Ô*<×*EÑ*EÐE×mÔIZÔ[_Ð`dÓ[eÐglÓImÐmr`   c                ó   • U R                   $ )zƒReturn the name used for spec serialization (CamelCase class name by default).

Return None to opt out of spec-based construction.
©rY   )rs   s    ra   Úget_serialization_nameÚ)AbstractCapability.get_serialization_namer  s   € ð �|‰|Ðr`   c                ó   • U " U0 UD6$ )zuCreate from spec arguments. Default: `cls(*args, **kwargs)`.

Override when `__init__` takes non-serializable types.
rU   )rs   ÚargsÚkwargss      ra   Ú	from_specÚAbstractCapability.from_specz  s   € ñ �DÐ#˜FÑ#Ð#r`   c                ó   • g)aš  Return ordering constraints for this capability, or `None` for default behavior.

Override to declare a fixed position (`'outermost'` / `'innermost'`),
relative ordering (`wraps` / `wrapped_by` other capability types or instances),
or dependency requirements (`requires`).

[`CombinedCapability`][pydantic_ai.capabilities.CombinedCapability] uses
these to topologically sort its children at construction time.
NrU   ri   s    ra   Úget_orderingÚAbstractCapability.get_ordering‚  s   € ð r`   c                ó   • U $ )a  Return the capability instance to use with an agent.

Called after the agent's own configuration is available and before capability
contributions are extracted. Constructor capabilities are bound once during agent
construction; static run capabilities are bound once per run. Override this to inspect
the agent and return an agent-bound copy. The default returns `self`.

A [`CapabilityFunc`][pydantic_ai.capabilities.CapabilityFunc] result is also bound before
its own [`for_run`][pydantic_ai.capabilities.AbstractCapability.for_run] hook. A specialized
run-bound value returned by an ordinary capability's `for_run()` is not bound again.

Capabilities in the `innermost` ordering tier (see
[`get_ordering`][pydantic_ai.capabilities.AbstractCapability.get_ordering]), i.e. durability
capabilities, bind in a second phase, after the other capabilities' contributed toolsets have
been extracted, so `agent.toolsets` is complete when their `for_agent` wraps it. The flip side
is that `innermost` capabilities can't contribute toolsets of their own.
rU   )rj   Úagents     ra   Ú	for_agentÚAbstractCapability.for_agentŽ  s	   € ð$ ˆr`   c                ó   • g)aˆ  Install private per-run state before any capability lifecycle hook runs.

Durable dispatch tables must be available before every capability's `before_run`, because
one capability may call another capability's durable operation from its hook. This setup
therefore cannot be implemented as a `before_run` hook itself. It stays private pending the
capability surface decisions tracked in #5477.
NrU   ©rj   Úctxs     ra   Ú_prepare_run_contextÚ'AbstractCapability._prepare_run_context¢  ó   � r`   c              ƒ  ó   #   • U $ 7f)a�  Return the capability instance to use for this agent run.

Called once per run, before `get_*()` re-extraction and before any hooks fire.
Override to return a fresh instance for per-run state isolation.
Under durable execution, worker processes re-derive this instance from the deserialized
run context, so all per-run state must be derivable from `ctx`.
Default: return `self` (shared across runs).
rU   r²   s     ra   Úfor_runÚAbstractCapability.for_run«  s   é € ð ˆùó   ‚c                ó   • g)a  Validate capabilities contributed specifically for this run.

Deliberately private: whether this becomes part of the public runtime extension
surface (and in what shape) will be decided as part of
[#5477](https://github.com/pydantic/pydantic-ai/issues/5477).
NrU   )rj   r³   rt   s      ra   Ú_validate_runtime_capabilitiesÚ1AbstractCapability._validate_runtime_capabilities¶  r¶   r`   c                ó   • g)u  Return instructions to include in the system prompt, or None.

Return static instruction text, a dynamic instruction callable, or a sequence
containing either. For dynamic per-request behavior, return a callable that receives
[`RunContext`][pydantic_ai.tools.RunContext] or a
`TemplateStr` â€” not a dynamic string.

When [`defer_loading`][pydantic_ai.capabilities.AbstractCapability.defer_loading] is
True, these instructions are resolved only after the model calls the
`load_capability` tool for this capability.
NrU   ri   s    ra   Úget_instructionsÚ#AbstractCapability.get_instructionsÀ  s   € ð r`   c                ó"   • U R                  5       $ )u¦  Return this capability's instructions, each paired with the id to address it by.

The agent uses this instead of [`get_instructions`][pydantic_ai.capabilities.AbstractCapability.get_instructions]
so a capability with an [`id`][pydantic_ai.capabilities.AbstractCapability.id] gets its own
[`InstructionPart`][pydantic_ai.messages.InstructionPart]s rather than being folded into the
agent's â€” computed contributions included, since addressing the capability means addressing
everything it tells the model. Container capabilities override this to keep each leaf's
contribution attributed; every other capability inherits this default, so overriding
`get_instructions` is enough.
)Ú_collect_own_instructionsri   s    ra   Ú_collect_instructionsÚ(AbstractCapability._collect_instructionsÎ  s   € ð ×-Ñ-Ó/Ð/r`   c                ó|   • [        U R                  5       5       Vs/ s H  oR                  U5      PM     sn$ s  snf )zJCollect this capability's public contribution without container recursion.)r   r¿   Ú_attribute_instruction©rj   Úinstructions     ra   rÂ   Ú,AbstractCapability._collect_own_instructionsÛ  s@   € ô I_Ð_c×_tÑ_tÓ_vÔHwó
ÚHw¸×'Ñ'¨Ö4ÑHwñ
ð 	
ùò 
s   œ9c                ód   • [        XR                  b  [        U R                  5      5      $ S5      $ )z4Attribute one instruction recipe to this capability.N)r   ro   r    rÇ   s     ra   rÆ   Ú)AbstractCapability._attribute_instructioná  s+   € ä" ;×X_ÑX_ÑXkÔ0KÈDÏGÉGÓ0TÓvÐvÐquÓvÐvr`   c                óB  • [        S U 5       5      nU Vs0 s H6  oC[        UR                  5         S:X  d  M   [        UR                  5      U_M8     nnU Vs/ s H3  nUR                  [        U5      5      =nc  U R	                  U5      OUPM5     sn$ s  snf s  snf )a¹  Attribute what an overriding container returned, keeping what it merely passed along.

Public container overrides return bare recipes, so identity is the only information that
connects a relayed recipe to the child that authored it. An object appearing under more
than one child is deliberately not connected: equal interned strings can be the same
object, and leaving their keys unidentified is safer than assigning either child at random.
c              3  óL   #   • U  H  n[        UR                  5      v •  M     g 7fr…   )ro   rÈ   )Ú.0Úsourceds     ra   Ú	<genexpr>ÚGAbstractCapability._attribute_container_instructions.<locals>.<genexpr>ñ  s   é € ÐMÂW¸'œb ×!4Ñ!4×5Ð5ÂWùs   ‚"$r,   )r   ro   rÈ   ÚgetrÆ   )rj   ÚauthoredÚrelayedÚoccurrencesrÏ   Úrelayed_by_identityrÈ   s          ra   Ú!_attribute_container_instructionsÚ4AbstractCapability._attribute_container_instructionså  sº   € ô ÑMÁWÓMÓMˆá<Có
Ú<C°ÔSUÐV]×ViÑViÓSjÑGkÐopÑGpÓ,ŒBˆw×"Ñ"Ó# WÒ,¹Gð 	ð 
ñ  (ó	
ò  (�ð /×2Ñ2´2°k³?ÓCÐC�ÑLð ×'Ñ'¨Ô4àòñ  (ñ	
ð 	
ùò	
ùò
s   —BºBÁ:Bc                ó   • U R                   $ )aÉ  Return a human-readable description of this capability, or None.

Surfaced to the model in the catalog shown with the `load_capability` tool when
[`defer_loading`][pydantic_ai.capabilities.AbstractCapability.defer_loading] is True.

Return a static description string or a callable that receives
[`RunContext`][pydantic_ai.tools.RunContext] (or no arguments) when the deferred
capability catalog is rendered. Default: return the static `description` field.
)rp   ri   s    ra   Úget_descriptionÚ"AbstractCapability.get_descriptioný  s   € ð ×ÑÐr`   c                ó   • g)añ  Return model settings to merge into the agent's defaults, or None.

Return a static `ModelSettings` dict when the settings don't change between
requests. Return a callable that receives [`RunContext`][pydantic_ai.tools.RunContext]
when settings need to vary per step (e.g. based on `ctx.run_step` or `ctx.deps`).

When the callable is invoked, `ctx.model_settings` contains the merged
result of all layers resolved before this capability (model defaults and
agent-level settings). The returned dict is merged on top of that.

When [`defer_loading`][pydantic_ai.capabilities.AbstractCapability.defer_loading] is
True, these settings are registered up front but merge as an empty dict until the
model calls the `load_capability` tool for this capability.
NrU   ri   s    ra   Úget_model_settingsÚ%AbstractCapability.get_model_settings	  s   € ð r`   c                ó   • g)a·  Return a static model, a per-step model selector, or `None` to make no selection.

A selector receives
[`ModelSelectionContext`][pydantic_ai.models.ModelSelectionContext] and may be
synchronous or asynchronous. Static selections are resolved once per run; selectors
are evaluated before each new logical model request step. When several capabilities
contribute a model, the last non-`None` selection wins. This differs from
[`resolve_model_id()`][pydantic_ai.capabilities.AbstractCapability.resolve_model_id],
where the first resolver to return a model wins.

See [Selecting the model](../capabilities/custom.md#selecting-the-model) for precedence,
bootstrap, and deferred-capability semantics.
NrU   ri   s    ra   Ú	get_modelÚAbstractCapability.get_model  s   € ð r`   c                óL   • [        U 5      R                  [        R                  L$ )zMWhether this capability or a wrapped capability overrides `resolve_model_id`.)r†   Úresolve_model_idrd   ri   s    ra   Úhas_resolve_model_idÚ'AbstractCapability.has_resolve_model_id*  s    € ô �D‹z×*Ñ*Ô2D×2UÑ2UÐUÐUr`   c             ƒ  ó   #   • g7f)a]  Resolve a model ID, or return `None` to defer.

Capabilities are tried in user-supplied order. When every capability returns `None`, the ID
is passed to [`infer_model`][pydantic_ai.models.infer_model]. The context provides
the agent and actual run dependencies, so resolution can configure tenant-specific
providers or look up models in a registry.
NrU   )rj   r³   Úmodel_ids      ra   rã   Ú#AbstractCapability.resolve_model_id/  s
   é € ð ùó   ‚c                ó   • g)z5Return a toolset to register with the agent, or None.NrU   ri   s    ra   Úget_toolsetÚAbstractCapability.get_toolset>  s   € àr`   c                ó   • / $ )z/Return native tools to register with the agent.rU   ri   s    ra   Úget_native_toolsÚ#AbstractCapability.get_native_toolsB  s   € àˆ	r`   c                ó   • g)aÏ  Wrap the agent's assembled toolset, or return None to leave it unchanged.

Called per-run with the combined non-output toolset (after the
[`prepare_tools`][pydantic_ai.capabilities.AbstractCapability.prepare_tools] hook
has already wrapped it). Output tools are added separately and are not included.

Unlike value-contribution methods such as
[`get_instructions`][pydantic_ai.capabilities.AbstractCapability.get_instructions],
this receives the already assembled toolset and is called each run (after
[`for_run`][pydantic_ai.capabilities.AbstractCapability.for_run]).
When multiple capabilities provide wrappers, they follow middleware semantics:
the first capability in the list wraps outermost (matching `wrap_*` hooks).

Use this to apply cross-cutting toolset wrappers like
[`PreparedToolset`][pydantic_ai.toolsets.PreparedToolset],
[`FilteredToolset`][pydantic_ai.toolsets.FilteredToolset],
or custom [`WrapperToolset`][pydantic_ai.toolsets.WrapperToolset] subclasses.
NrU   )rj   Útoolsets     ra   Úget_wrapper_toolsetÚ&AbstractCapability.get_wrapper_toolsetF  s   € ð& r`   c              ƒ  ó   #   • U$ 7f)ua  Filter or modify function tool definitions for this step.

Receives **function** tools only. For [output tools][pydantic_ai.output.ToolOutput],
override
[`prepare_output_tools`][pydantic_ai.capabilities.AbstractCapability.prepare_output_tools]
â€” it runs separately, with `ctx.retry`/`ctx.max_retries` reflecting the **output**
retry budget instead of the function-tool budget.

Return a filtered or modified list. The result flows into both the model's request
parameters and `ToolManager.tools`, so filtering also blocks tool execution.

On a deferred capability this runs only once the capability is loaded, and then receives
every function tool, as an always-on capability does. There is nothing to govern
before that: an unloaded capability's tools are neither advertised to the model nor
callable, so no filtering here could change what the model can reach.
rU   ©rj   r³   Ú	tool_defss      ra   Úprepare_toolsÚ AbstractCapability.prepare_tools]  s   é € ð* Ðùrº   c              ƒ  ó   #   • U$ 7f)a¥  Filter or modify output tool definitions for this step.

Receives only [output tools][pydantic_ai.output.ToolOutput]. `ctx.retry` and
`ctx.max_retries` reflect the **output** retry budget (agent-level
`max_output_retries`), matching the output hook lifecycle.

Return a filtered or modified list. The result flows into both the model's request
parameters and `ToolManager.tools`, so filtering also blocks tool execution.
rU   rõ   s      ra   Úprepare_output_toolsÚ'AbstractCapability.prepare_output_toolst  s   é € ð Ðùrº   c              ƒ  ó   #   • g7f)zëCalled before the agent run starts. Observe-only; use `wrap_run` for modification.

A realtime session is a run. ContextVars set here are ambient in its instruction
resolution, pump and tool tasks, and the caller's `async with` block.
NrU   r²   s     ra   Ú
before_runÚAbstractCapability.before_run†  s   é � ùré   c             ƒ  ó   #   • U$ 7f)uù  Called after the agent run produces a result. Can modify the result.

Not called when the run ends without a result (e.g. a cancellation that nothing
recovered from). It IS called when a result was produced while a cancellation was
pending or absorbed upstream â€” but before the backstop's cancellation re-check, so the
cancellation still propagates after this hook returns and the run still ends cancelled.
Put cancellation-safe cleanup in [`wrap_run`][pydantic_ai.capabilities.AbstractCapability.wrap_run]
(a `try`/`finally` around `handler()`), which does observe the `CancelledError`.

For a realtime session, the result is produced when the session closes; a transformed result
becomes `session.result` before the caller leaves the `async with` boundary.
rU   )rj   r³   Úresults      ra   Ú	after_runÚAbstractCapability.after_run�  ó   é € ð$ ˆùrº   c             ƒ  ó,   #   • U" 5       I Sh  v•N $  N7f)a=  Wraps the entire agent run. `handler()` executes the run.

If `handler()` raises and this method catches the exception and
returns a result instead, the error is suppressed and the recovery
result is used.

If this method does not call `handler()` (short-circuit), the run
is skipped and the returned result is used directly.

Note: if the caller cancels the run (e.g. by breaking out of an
`iter()` loop), this method receives an `asyncio.CancelledError`.
Implementations that hold resources should handle cleanup accordingly. Cancellation is
terminal: the hook may observe it and clean up, but cannot recover the run to success.

A realtime session is a run: `handler()` resolves when the session closes. ContextVars set
before calling it are ambient in instruction resolution, pumps, tool tasks, and the caller's
block. Downward ContextVar propagation is one-way; keep bidirectional per-run state on the
`for_run` copy's instance attributes. Suppression and result transformation apply at the
session's `async with` boundary, after the caller may have observed events in real time.
NrU   )rj   r³   Úhandlers      ra   Úwrap_runÚAbstractCapability.wrap_run¤  s   é € ñ4 “Y�Ð‰ùs   ‚�Žc             ƒ  ó   #   • Ue7f)aa  Called when the agent run fails with an exception.

This is the error counterpart to
[`after_run`][pydantic_ai.capabilities.AbstractCapability.after_run]:
while `after_run` is called on success, `on_run_error` is called on
failure (after [`wrap_run`][pydantic_ai.capabilities.AbstractCapability.wrap_run]
has had its chance to recover).

**Raise** the original `error` (or a different exception) to propagate it.
**Return** an [`AgentRunResult`][pydantic_ai.run.AgentRunResult] to suppress
the error and recover the run.

Cancellation is terminal: the hook may observe it and clean up, but cannot recover the
run to success.

Not called for `GeneratorExit` or `KeyboardInterrupt`.

For a realtime session, returning a recovery result sets `session.result` and suppresses the
error at the caller's `async with` boundary, after events may already have been observed.
rU   )rj   r³   Úerrors      ra   Úon_run_errorÚAbstractCapability.on_run_errorÀ  s   é € ð4 ˆùrº   c             ƒ  ó   #   • U$ 7f)zHCalled before each graph node executes. Can observe or replace the node.rU   )rj   r³   Únodes      ra   Úbefore_node_runÚ"AbstractCapability.before_node_runÞ  s   é € ð ˆùrº   c             ƒ  ó   #   • U$ 7f)uÓ  Called after each graph node succeeds. Can modify the result (next node or `End`).

Not called for a node interrupted by cancellation â€” including a cancellation the node
itself absorbed and completed through, which the framework re-asserts at the node
boundary: cancellation skips downstream hooks. Put cancellation-safe cleanup in
[`wrap_node_run`][pydantic_ai.capabilities.AbstractCapability.wrap_node_run]
(a `try`/`finally` around `handler()`), which does observe the `CancelledError`.
(A hook that catches the `CancelledError` *and* calls `Task.uncancel()` takes over the
cancellation bookkeeping for that boundary, so this hook does fire for that node â€”
the run itself still ends cancelled at the next boundary.)
rU   )rj   r³   r  r   s       ra   Úafter_node_runÚ!AbstractCapability.after_node_runç  r  rº   c             ƒ  ó.   #   • U" U5      I Sh  v•N $  N7f)uw  Wraps execution of each agent graph node (run step).

Called for every node in the agent graph (`UserPromptNode`,
`ModelRequestNode`, `CallToolsNode`).  `handler(node)` executes
the node and returns the next node (or `End`).

Override to inspect or modify nodes before execution, inspect or modify
the returned next node, call `handler` multiple times (retry), or
return a different node to redirect graph progression.

Note: this hook fires however the run is driven -- [`agent.run()`][pydantic_ai.agent.AbstractAgent.run],
[`agent.run_stream()`][pydantic_ai.agent.AbstractAgent.run_stream], an
[`agent.iter()`][pydantic_ai.agent.Agent.iter] run advanced with
[`agent_run.next()`][pydantic_ai.run.AgentRun.next], and a bare `async for node in agent_run:`
loop, which advances through `next()` too. The one exception is the final
[`ModelRequestNode`][pydantic_ai.agent.ModelRequestNode] under `run_stream()`, which hands back
the result mid-stream and so only fires `before_node_run`.

When using `agent.run()` with `event_stream_handler`, the handler wraps both
streaming and graph advancement (i.e. the model call happens inside the wrapper).
When using `agent.run_stream()`, the handler wraps only graph advancement â€” streaming
happens before the wrapper because `run_stream()` must yield the stream to the caller
while the stream context is still open, which cannot happen from inside a callback.

A cancelled run delivers `asyncio.CancelledError` through `handler()`. Cancellation is
terminal: the hook may observe it and clean up, but cannot recover the run to success â€”
even a returned `End` result is discarded once a cancellation is pending.
NrU   )rj   r³   r  r  s       ra   r‡   Ú AbstractCapability.wrap_node_runû  s   é € ñF ˜T“]×"Ð"Ñ"ùó   ‚Ž�c             ƒ  ó   #   • Ue7f)aê  Called when a graph node fails with an exception.

This is the error counterpart to
[`after_node_run`][pydantic_ai.capabilities.AbstractCapability.after_node_run].

**Raise** the original `error` (or a different exception) to propagate it.
**Return** a next node or `End` to recover and continue the graph.

Useful for recovering from
[`UnexpectedModelBehavior`][pydantic_ai.exceptions.UnexpectedModelBehavior]
by redirecting to a different node (e.g. retry with different model settings).
rU   )rj   r³   r  r	  s       ra   rŠ   Ú$AbstractCapability.on_node_run_error   ó   é € ð& ˆùrº   c             ƒ  óò   #   • [        [        U 5      5       HY  nUR                  (       a  [        X#R                  5      (       d  M0  UR	                  U [        U 5      5      " X5      I Sh  v•N   M[     g N	7f)as  React to every event in the run's event stream.

This includes model response stream events, tool events, deferred and enqueued-message events,
[`CustomEvent`][pydantic_ai.messages.CustomEvent]s, and
[`CapabilityEvent`][pydantic_ai.messages.CapabilityEvent]s. The default implementation dispatches
to methods marked with [`on_event`][pydantic_ai.capabilities.on_event], in definition order.

Override this method for fully dynamic handling. Call `super().on_event(...)` to retain marked
method dispatch. A capability receives events it emits itself. Events emitted by a listener
enter the stream after the event being handled.
N)r/   r†   Úevent_typesÚ
isinstanceÚ__get__)rj   r³   rž   Úmethods       ra   rš   ÚAbstractCapability.on_event7  sS   é € ô /¬t°D«zÖ:ˆFØ×%×%¬°E×;MÑ;M×)NÓ)NØ—n‘n T¬4°«:Ô6°sÓB×BÒBò ;áBùs   ‚AA7Á$A7Á+A5Á,
A7c              ó¾   #   •  U  Sh  v•N nU7v •  M   N
 [         R                  " U5      I Sh  v•N    g! [         R                  " U5      I Sh  v•N    f = f7f)uÛ  Wrap a run or realtime session's consumer-facing event stream.

For classic runs, the wrapper is applied where each node's stream is produced, so it fires
however the run is driven â€” including under [`agent.iter()`][pydantic_ai.agent.Agent.iter]
and when the caller streams a node itself with `node.stream()`. For realtime sessions, it
wraps the `async for event in session` view. A wrapper must yield events appropriate for the
stream it wraps.

Transformations affect only what the stream consumer sees. They never change realtime
session history, tool execution, or the classic run's accumulated response and output.

Note: when this method is overridden (or [`Hooks.on.event`][pydantic_ai.capabilities.hooks.Hooks.on]
/ [`Hooks.on.run_event_stream`][pydantic_ai.capabilities.hooks.Hooks.on] are registered),
`agent.run()` and [`AgentRun.next()`][pydantic_ai.run.AgentRun.next] automatically enable
streaming mode so this hook fires even without an explicit `event_stream_handler`.
N)r   Úaclose_if_supported)rj   r³   Ústreamrž   s       ra   r–   Ú(AbstractCapability.wrap_run_event_streamG  sJ   é € ð,	5Ù%÷ �eØ•ñ˜vô ×,Ò,¨VÓ4×4Ò4ø”&×,Ò,¨VÓ4×4Ò4üsF   ‚A„9 †Š‹Ž9 –˜9 ™A²5³A¹AÁAÁAÁAc              ƒ  ó   #   • U$ 7f)a   Called before each model request. Can modify messages, settings, and parameters.

[`model_request_parameters.instruction_parts`][pydantic_ai.models.ModelRequestParameters.instruction_parts]
is the source of truth for the instructions: rewriting them here changes what the model
receives, and the request recorded in message history is re-rendered from them afterwards.
Assigning to a [`ModelRequest.instructions`][pydantic_ai.messages.ModelRequest] in
`request_context.messages` is not propagated the other way, so it does not reach the model.
rU   )rj   r³   Úrequest_contexts      ra   Úbefore_model_requestÚ'AbstractCapability.before_model_requeste  s   é € ð Ðùrº   c             ƒ  ó   #   • U$ 7f)af  Called after each model response. Can modify the response before further processing.

Raise [`ModelRetry`][pydantic_ai.exceptions.ModelRetry] to reject the response and
ask the model to try again. The original response is still appended to message history
so the model can see what it said. Retries count against the output side of the agent's retry budget.
rU   )rj   r³   r$  Úresponses       ra   Úafter_model_requestÚ&AbstractCapability.after_model_requestt  s   é € ð ˆùrº   c             ƒ  ó.   #   • U" U5      I Sh  v•N $  N7f)a;  Wraps the model request. handler() calls the model.

Raise [`ModelRetry`][pydantic_ai.exceptions.ModelRetry] to skip `on_model_request_error`
and directly retry the model request with a retry prompt. If the handler was called,
the model response is preserved in history for context (same as `after_model_request`).
NrU   )rj   r³   r$  r  s       ra   rŽ   Ú%AbstractCapability.wrap_model_requestƒ  s   é € ñ ˜_Ó-×-Ð-Ñ-ùr  c             ƒ  ó   #   • Ue7f)a   Called when a model request fails with an exception.

This is the error counterpart to
[`after_model_request`][pydantic_ai.capabilities.AbstractCapability.after_model_request].

**Raise** the original `error` (or a different exception) to propagate it.
**Return** a [`ModelResponse`][pydantic_ai.messages.ModelResponse] to suppress
the error and use the response as if the model call succeeded.
**Raise** [`ModelRetry`][pydantic_ai.exceptions.ModelRetry] to retry the model request
with a retry prompt instead of recovering or propagating.

Not called for [`SkipModelRequest`][pydantic_ai.exceptions.SkipModelRequest]
or [`ModelRetry`][pydantic_ai.exceptions.ModelRetry].
rU   )rj   r³   r$  r	  s       ra   r’   Ú)AbstractCapability.on_model_request_error’  s   é € ð* ˆùrº   c             ƒ  ó   #   • U$ 7f)aX  Modify raw args before validation.

Raise [`ModelRetry`][pydantic_ai.exceptions.ModelRetry] to skip validation and
ask the model to redo the tool call.

A tool call can only be deferred once its arguments have been validated, so raising
[`CallDeferred`][pydantic_ai.exceptions.CallDeferred] or
[`ApprovalRequired`][pydantic_ai.exceptions.ApprovalRequired] here is a `UserError`. Defer
from [`after_tool_validate`][pydantic_ai.capabilities.AbstractCapability.after_tool_validate],
a tool's `args_validator`, or
[`before_tool_execute`][pydantic_ai.capabilities.AbstractCapability.before_tool_execute].
rU   ©rj   r³   ÚcallÚtool_defr¦   s        ra   Úbefore_tool_validateÚ'AbstractCapability.before_tool_validate«  s   é € ð( ˆùrº   c             ƒ  ó   #   • U$ 7f)u>  Modify validated args. Called only on successful validation.

Raise [`ModelRetry`][pydantic_ai.exceptions.ModelRetry] to reject the validated args
and ask the model to redo the tool call.

The arguments are valid by this point, so raising
[`CallDeferred`][pydantic_ai.exceptions.CallDeferred] or
[`ApprovalRequired`][pydantic_ai.exceptions.ApprovalRequired] here defers the call â€” the tool
isn't executed, and the deferral joins the run's
[`DeferredToolRequests`][pydantic_ai.tools.DeferredToolRequests] with the validated arguments.

This hook also runs when the tool's `args_validator` (or `wrap_tool_validate`) already
deferred the call, so it stays a reliable gate on validated arguments: rejecting here wins
over that deferral, deferring here replaces it, and the args returned here are the ones the
deferred call carries.
rU   r0  s        ra   Úafter_tool_validateÚ&AbstractCapability.after_tool_validateÁ  s   é € ð0 ˆùrº   c             ƒ  ó.   #   • U" U5      I Sh  v•N $  N7f)aG  Wraps tool argument validation. handler() runs the validation.

Deferring with [`CallDeferred`][pydantic_ai.exceptions.CallDeferred] or
[`ApprovalRequired`][pydantic_ai.exceptions.ApprovalRequired] is allowed *after* `handler()`
has returned, when the arguments are known to be valid; raising one before that is a
`UserError`.
NrU   ©rj   r³   r1  r2  r¦   r  s         ra   Úwrap_tool_validateÚ%AbstractCapability.wrap_tool_validateÛ  ó   é € ñ  ˜T“]×"Ð"Ñ"ùr  c             ƒ  ó   #   • Ue7f)uÀ  Called when tool argument validation fails.

This is the error counterpart to
[`after_tool_validate`][pydantic_ai.capabilities.AbstractCapability.after_tool_validate].
Fires for `ValidationError` (schema mismatch) and
[`ModelRetry`][pydantic_ai.exceptions.ModelRetry] (custom validator rejection).

**Raise** the original `error` (or a different exception) to propagate it.
**Return** validated args to suppress the error and continue as if validation passed.

Not called for [`SkipToolValidation`][pydantic_ai.exceptions.SkipToolValidation], or when a
tool's `args_validator` raises [`CallDeferred`][pydantic_ai.exceptions.CallDeferred] or
[`ApprovalRequired`][pydantic_ai.exceptions.ApprovalRequired] â€” those are control flow, not
errors, and the call is deferred instead of executed.

Raising a deferral *from this hook* is a `UserError`: it only runs because validation failed,
so there are no valid arguments to show whoever would resolve the deferral.
rU   ©rj   r³   r1  r2  r¦   r	  s         ra   Úon_tool_validate_errorÚ)AbstractCapability.on_tool_validate_errorí  s   é € ð6 ˆùrº   c             ƒ  ó   #   • U$ 7f)aš  Modify validated args before execution.

Raise [`ModelRetry`][pydantic_ai.exceptions.ModelRetry] to skip execution and
ask the model to redo the tool call.

This is the hook to defer from: raising
[`ApprovalRequired`][pydantic_ai.exceptions.ApprovalRequired] or
[`CallDeferred`][pydantic_ai.exceptions.CallDeferred] here defers the call *before* the tool
function runs, so nothing happens until it's resolved.
rU   r0  s        ra   Úbefore_tool_executeÚ&AbstractCapability.before_tool_execute  s   é € ð$ ˆùrº   c             ƒ  ó   #   • U$ 7f)až  Modify result after execution.

Raise [`ModelRetry`][pydantic_ai.exceptions.ModelRetry] to reject the tool result
and ask the model to redo the tool call.

Deferring from here is accepted but rarely what you want: the tool function has already run,
so its side effects happened and `result` is discarded. Defer from
[`before_tool_execute`][pydantic_ai.capabilities.AbstractCapability.before_tool_execute]
instead.
rU   )rj   r³   r1  r2  r¦   r   s         ra   Úafter_tool_executeÚ%AbstractCapability.after_tool_execute   s   é € ð& ˆùrº   c             ƒ  ó.   #   • U" U5      I Sh  v•N $  N7f)a3  Wraps tool execution. handler() runs the tool.

Defer before calling `handler()`: a deferral raised after it has returned is accepted, but
the tool function already ran and its result is discarded. Defer from
[`before_tool_execute`][pydantic_ai.capabilities.AbstractCapability.before_tool_execute]
instead.
NrU   r9  s         ra   Úwrap_tool_executeÚ$AbstractCapability.wrap_tool_execute5  r<  r  c             ƒ  ó   #   • Ue7f)a4  Called when tool execution fails with an exception.

This is the error counterpart to
[`after_tool_execute`][pydantic_ai.capabilities.AbstractCapability.after_tool_execute].

**Raise** the original `error` (or a different exception) to propagate it.
**Return** any value to suppress the error and use it as the tool result.
**Raise** [`ModelRetry`][pydantic_ai.exceptions.ModelRetry] to ask the model to
redo the tool call instead of recovering or propagating.

Not called for control flow exceptions
([`SkipToolExecution`][pydantic_ai.exceptions.SkipToolExecution],
[`CallDeferred`][pydantic_ai.exceptions.CallDeferred],
[`ApprovalRequired`][pydantic_ai.exceptions.ApprovalRequired]),
retry signals ([`ToolRetryError`][pydantic_ai.exceptions.ToolRetryError]
from [`ModelRetry`][pydantic_ai.exceptions.ModelRetry]), or failure signals
([`ToolFailedError`][pydantic_ai.exceptions.ToolFailedError]
from [`ToolFailed`][pydantic_ai.exceptions.ToolFailed]).
Use [`wrap_tool_execute`][pydantic_ai.capabilities.AbstractCapability.wrap_tool_execute]
to intercept retries or failures.
rU   r>  s         ra   Úon_tool_execute_errorÚ(AbstractCapability.on_tool_execute_errorG  s   é € ð< ˆùrº   c             ƒ  ó   #   • U$ 7f)aá  Modify raw model output before validation/parsing.

The primary hook for pre-parse repair and normalization of model output.
Fires only for structured output that requires parsing: prompted, native,
tool, and union output. Does **not** fire for plain text or image output.

For structured text output, `output` is the raw text string from the model.
For tool output, `output` is the raw tool arguments (string or dict).

Raise [`ModelRetry`][pydantic_ai.exceptions.ModelRetry] to skip validation and
ask the model to try again with a custom message.

During streaming, this hook fires on every partial validation attempt as well as
the final result. Check `ctx.partial_output` to distinguish and avoid expensive
work on partial results.
rU   ©rj   r³   Úoutput_contextÚoutputs       ra   Úbefore_output_validateÚ)AbstractCapability.before_output_validatei  s   é € ð. ˆùrº   c             ƒ  ó   #   • U$ 7f)uå  Modify validated output after successful parsing. Called only on success.

`output` is the **semantic value** the model was asked to produce â€” e.g., a
`MyModel` instance for `output_type=MyModel`, or `42` for `output_type=int`, or
the input to a single-arg output function. For multi-arg output functions, this
is the `dict` of arguments (the genuine multi-value input).

Note: this differs from *tool* hooks (`after_tool_validate`), which always see
`dict[str, Any]` â€” tool args follow the schema contract. Output hooks see the
semantic output value, regardless of how it's internally represented during
validation.

Raise [`ModelRetry`][pydantic_ai.exceptions.ModelRetry] to reject the validated
output and ask the model to try again.
rU   rN  s       ra   Úafter_output_validateÚ(AbstractCapability.after_output_validate‚  s   é € ð, ˆùrº   c             ƒ  ó.   #   • U" U5      I Sh  v•N $  N7f)aF  Wraps output validation. handler(output) performs the validation.

[`ModelRetry`][pydantic_ai.exceptions.ModelRetry] from within the handler goes to
[`on_output_validate_error`][pydantic_ai.capabilities.AbstractCapability.on_output_validate_error].
`ModelRetry` raised directly (not from the handler) bypasses the error hook.
NrU   ©rj   r³   rO  rP  r  s        ra   Úwrap_output_validateÚ'AbstractCapability.wrap_output_validateš  s   é € ñ ˜V“_×$Ð$Ñ$ùr  c             ƒ  ó   #   • Ue7f)a1  Called when output validation fails.

This is the error counterpart to
[`after_output_validate`][pydantic_ai.capabilities.AbstractCapability.after_output_validate].

**Raise** the original `error` (or a different exception) to propagate it.
**Return** validated output to suppress the error and continue.
rU   ©rj   r³   rO  rP  r	  s        ra   Úon_output_validate_errorÚ+AbstractCapability.on_output_validate_errorª  s   é € ð  ˆùrº   c             ƒ  ó   #   • U$ 7f)uù  Modify validated output before processing (extraction, output function call).

`output` is the **semantic value** â€” e.g., a `MyModel` instance or `42`, matching
`after_output_validate`. For multi-arg output functions, it's the `dict` of args.
See [`after_output_validate`][pydantic_ai.capabilities.AbstractCapability.after_output_validate]
for a full explanation of the semantic-value contract.

Raise [`ModelRetry`][pydantic_ai.exceptions.ModelRetry] to skip processing and
ask the model to try again.
rU   rN  s       ra   Úbefore_output_processÚ(AbstractCapability.before_output_process¾  s   é € ð" ˆùrº   c             ƒ  ó   #   • U$ 7f)z•Modify result after output processing.

Raise [`ModelRetry`][pydantic_ai.exceptions.ModelRetry] to reject the result
and ask the model to try again.
rU   rN  s       ra   Úafter_output_processÚ'AbstractCapability.after_output_processÑ  s   é € ð ˆùrº   c             ƒ  ó.   #   • U" U5      I Sh  v•N $  N7f)a»  Wraps output processing. handler(output) runs extraction + output function call.

[`ModelRetry`][pydantic_ai.exceptions.ModelRetry] bypasses
[`on_output_process_error`][pydantic_ai.capabilities.AbstractCapability.on_output_process_error]
(treated as control flow, not an error).

During streaming, this fires only when partial validation succeeds, and on the
final result. Check `ctx.partial_output` to skip expensive work on partial results.
NrU   rW  s        ra   Úwrap_output_processÚ&AbstractCapability.wrap_output_processß  s   é € ñ" ˜V“_×$Ð$Ñ$ùr  c             ƒ  ó   #   • Ue7f)aØ  Called when output processing fails with an exception.

This is the error counterpart to
[`after_output_process`][pydantic_ai.capabilities.AbstractCapability.after_output_process].

**Raise** the original `error` (or a different exception) to propagate it.
**Return** any value to suppress the error and use it as the output.

Not called for retry signals ([`ToolRetryError`][pydantic_ai.exceptions.ToolRetryError]
from [`ModelRetry`][pydantic_ai.exceptions.ModelRetry]).
rU   r[  s        ra   Úon_output_process_errorÚ*AbstractCapability.on_output_process_errorò  r  rº   c             ƒ  ó   #   • g7f)a‰  Handle deferred tool calls (approval-required or externally-executed) inline during an agent run.

Called by `ToolManager` when:

- a tool raises [`ApprovalRequired`][pydantic_ai.exceptions.ApprovalRequired] or
  [`CallDeferred`][pydantic_ai.exceptions.CallDeferred] during execution, or
- the model calls a tool registered with `requires_approval=True` (see
  [Human-in-the-Loop Tool Approval](../deferred-tools.md#human-in-the-loop-tool-approval))
  or a tool backed by [external execution](../deferred-tools.md#external-tool-execution).

Uses accumulation dispatch: each capability in the chain receives remaining
unresolved requests and can resolve some or all of them. Results are merged
and unresolved calls are passed to the next capability.

**Return** a [`DeferredToolResults`][pydantic_ai.tools.DeferredToolResults] to resolve
some or all calls.
**Return** `None` to leave all calls unresolved.
NrU   )rj   r³   Úrequestss      ra   Úhandle_deferred_tool_callsÚ-AbstractCapability.handle_deferred_tool_calls	  s
   é € ð0 ùré   c                ó   • SSK Jn  U" XS9$ )z˜Returns a new capability that wraps this one and prefixes its tool names.

Only this capability's tools are prefixed; other agent tools are unaffected.
r,   r4   )ÚwrappedÚprefix)Úprefix_toolsr5   )rj   rp  r5   s      ra   rq  ÚAbstractCapability.prefix_tools%  s   € õ
 	.á 4Ñ7Ð7r`   rU   )Úreturnrg   )rt   ú(Sequence[AbstractCapability[AgentDepsT]]rs  úAbstractCapability[AgentDepsT])ry   z0Callable[[AbstractCapability[AgentDepsT]], None]rs  ÚNone)ry   zQCallable[[AbstractCapability[AgentDepsT]], AbstractCapability[AgentDepsT] | None]rs  ú%AbstractCapability[AgentDepsT] | None)rž   r   rs  rg   )rs  rn   )r¦   r   r§   r   rs  zAbstractCapability[Any])rs  zCapabilityOrdering | None)r®   zAbstractAgent[AgentDepsT, Any]rs  ru  )r³   úRunContext[AgentDepsT]rs  rv  )r³   rx  rs  ru  )r³   rx  rt   rt  rs  rv  )rs  z$AgentInstructions[AgentDepsT] | None)rs  ú$list[SourcedInstruction[AgentDepsT]])rÈ   zAgentInstruction[AgentDepsT]rs  zSourcedInstruction[AgentDepsT])rÓ   z&Sequence[AgentInstruction[AgentDepsT]]rÔ   z(Sequence[SourcedInstruction[AgentDepsT]]rs  ry  )rs  z(CapabilityDescription[AgentDepsT] | None)rs  z%AgentModelSettings[AgentDepsT] | None)rs  zAgentModel[AgentDepsT] | None)r³   z"ModelResolutionContext[AgentDepsT]rç   zKnownModelName | strrs  zModel | None)rs  zAgentToolset[AgentDepsT] | None)rs  z%Sequence[AgentNativeTool[AgentDepsT]])rñ   zAbstractToolset[AgentDepsT]rs  z"AbstractToolset[AgentDepsT] | None)r³   rx  rö   úlist[ToolDefinition]rs  rz  )r³   rx  r   úAgentRunResult[Any]rs  r{  )r³   rx  r  rA   rs  r{  )r³   rx  r	  ÚBaseExceptionrs  r{  )r³   rx  r  úAgentNode[AgentDepsT]rs  r}  )r³   rx  r  r}  r   úNodeResult[AgentDepsT]rs  r~  )r³   rx  r  r}  r  zWrapNodeRunHandler[AgentDepsT]rs  r~  )r³   rx  r  r}  r	  Ú	Exceptionrs  r~  )r³   rx  rž   r   rs  rv  )r³   rx  r!  úAsyncIterable[AgentStreamEvent]rs  r€  )r³   rx  r$  r8   rs  r8   )r³   rx  r$  r8   r(  r!   rs  r!   )r³   rx  r$  r8   r  rC   rs  r!   )r³   rx  r$  r8   r	  r  rs  r!   )
r³   rx  r1  r"   r2  r)   r¦   rG   rs  rG   )
r³   rx  r1  r"   r2  r)   r¦   rH   rs  rH   )r³   rx  r1  r"   r2  r)   r¦   rG   r  rI   rs  rH   )r³   rx  r1  r"   r2  r)   r¦   rG   r	  úValidationError | ModelRetryrs  rH   )r³   rx  r1  r"   r2  r)   r¦   rH   r   r   rs  r   )r³   rx  r1  r"   r2  r)   r¦   rH   r  rJ   rs  r   )r³   rx  r1  r"   r2  r)   r¦   rH   r	  r  rs  r   )r³   rx  rO  r;   rP  rK   rs  rK   )r³   rx  rO  r;   rP  r   rs  r   )
r³   rx  rO  r;   rP  rK   r  rL   rs  r   )
r³   rx  rO  r;   rP  rK   r	  r�  rs  r   )
r³   rx  rO  r;   rP  r   r  rM   rs  r   )
r³   rx  rO  r;   rP  r   r	  r  rs  r   )r³   rx  rk  r%   rs  zDeferredToolResults | None)rp  Ústrrs  zPrefixTools[AgentDepsT])QrY   rZ   r[   r\   r]   rf   r^   Úpropertyrk   ro   rp   rq   Úclassmethodru   rz   r}   r   r   r‚   r�   r‹   r�   r“   r—   r›   rŸ   r£   r¨   r«   r¯   r´   r¸   r¼   r¿   rÃ   rÂ   rÆ   r×   rÚ   rÝ   rà   rä   rã   rë   rî   rò   r÷   rú   rý   r  r  r
  r  r  r‡   rŠ   rš   r–   r%  r)  rŽ   r’   r3  r6  r:  r?  rB  rE  rH  rK  rQ  rT  rX  r\  r_  rb  re  rh  rl  rq  r_   rU   r`   ra   rd   rd   °   sÐ  ‡ ñð0 (-Ð�nÓ,ð
ð óó ðð ƒJà€Bˆ
Óðð #€K�Ó"Ø(à€M�4Óðð ó5ó ð5ô@ðØhðà	.ôð2 Ùð	0à-ñó
'óó ð'ð óPó ðPð óXó ðXð óZó ðZð óbó ðbð ó`ó ð`ð ótó ðtô	nð óó ðð ó$ó ð$ô
ôô(ô	ðØ)ðØ9aðà	ôôô0ô
ôwð
à8ð
ð :ð
ð 
.ô	
ô0
 ôô"ð  óVó ðVðà/ðð 'ð	ð
 
ôôôôð.à#ðð (ðð 
ô	ð.à#ðð (ðð 
ô	ð$à#ðð 
ôðà#ðð $ð	ð
 
ôð(à#ðð  ð	ð
 
ôð8à#ðð ð	ð
 
ôð<à#ðð $ð	ð
 
ôðà#ðð $ð	ð
 'ðð 
 ôð(##à#ð##ð $ð	##ð
 0ð##ð 
 ô##ðJà#ðð $ð	ð
 ðð 
 ôô.Cð 5à#ð5ð 0ð	5ð
 
)ô5ð<à#ðð -ðð 
ô	ðà#ðð -ð	ð
  ðð 
ôð.à#ð.ð -ð	.ð
 )ð.ð 
ô.ðà#ðð -ð	ð
 ðð 
ôð2à#ðð ð	ð
 !ðð ðð 
ôð,à#ðð ð	ð
 !ðð  ðð 
ôð4#à#ð#ð ð	#ð
 !ð#ð ð#ð )ð#ð 
ô#ð$à#ðð ð	ð
 !ðð ðð ,ðð 
ôð>à#ðð ð	ð
 !ðð  ðð 
ôð(à#ðð ð	ð
 !ðð  ðð ðð 
ôð*#à#ð#ð ð	#ð
 !ð#ð  ð#ð (ð#ð 
ô#ð$à#ðð ð	ð
 !ðð  ðð ðð 
ôðDà#ðð &ð	ð
 ðð 
ôð2à#ðð &ð	ð
 ðð 
ôð0%à#ð%ð &ð	%ð
 ð%ð +ð%ð 
ô%ð à#ðð &ð	ð
 ðð ,ðð 
ôð(à#ðð &ð	ð
 ðð 
ôð&à#ðð &ð	ð
 ðð 
ôð%à#ð%ð &ð	%ð
 ð%ð *ð%ð 
ô%ð&à#ðð &ð	ð
 ðð ðð 
ôð.à#ðð 'ð	ð
 
$ô÷88r`   rd   c                ó@   • / nU R                  UR                  5        U$ )zICollect the leaf capabilities in a capability tree, in application order.)rz   Úappend)Ú
capabilityÚleavess     ra   Úleaf_capabilitiesr‰  /  s   € à35€FØ×Ñ�V—]‘]Ô#Ø€Mr`   c                óL   • SSK Jn  [        X5      (       a  U R                  $ U /$ )zOReturn the branches a surrounding combined capability retains after flattening.r,   )ÚCombinedCapability)Úcombinedr‹  r  rt   )r‡  r‹  s     ra   Ú_combination_rootsr�  6  s$   € å,ä&0°×&PÑ&Pˆ:×"Ñ"ÐbÐWaÐVbÐbr`   T)Úfrozenc                  ó>   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg	)
Ú_CapabilityOccurrencei=  ru  r‡  ÚintÚoccurrence_indexÚlayer_indexrT   rU   N)rY   rZ   r[   r\   r^   r_   rU   r`   ra   r�  r�  =  s   ‡ à.Ó.ØÓØÓØ†Mr`   r�  c                óz  ^• SSK Jn  0 nSn[        U5       Hž  u  pV[        R                  " [        [        U5      5       Hq  n0 n[        U5       H2  n	UR                  [        U	5      / 5      R                  U5        US-  nM4     UR                  [        U5      / 5      R                  XX45        Ms     M      0 n
0 n[        U 5       HÃ  nU[        U5         R                  S5      u  pX[        U5       H’  n	U	R                  c  M  U
R                  [        U	5      S5      nUS-   U
[        U	5      '   U[        U	5         R                  S5      n[        XœXT5      nUR                  U	R                  / 5      R                  U5        M”     MÅ     UR                  5        VVs0 s H"  u  pï[        U5      S:”  d  M  U[!        US S9_M$     nnn0 mUR                  5        GH  u  pï[#        S U 5       5      nU Vs/ s H!  nUR$                  U:X  d  M  UR&                  PM#     nnUUS   R$                  :g  n[)        5       nU H¯  nUR&                  nU(       a  [+        UU5      (       an  UR                  UR,                  R                  :X  aJ  UR,                  nU(       a7  [+        UU5      (       a&  UR                  UR,                  R                  :X  a  MJ  UR/                  [1        U5      5        M±     [3        UU5        US   n[        U5      S:”  ad  [3        UU Vs1 s H  n[1        U5      iM     sn5        [5        [1        U5      5      (       d  [7        [9        U5      5      eUR;                  U5      nTR=                  U Vs0 s H3  n[        UR&                  5      S/U
[        UR&                  5         -  _M5     sn5        US   nUT[        UR&                  5         UR>                  '   GM     T(       d  U $ SU4S	 jjnU RA                  U5      nUc   S
5       eU$ s  snnf s  snf s  snf s  snf )a³  Resolve capabilities sharing an `id` in a tree down to one each.

Two capabilities under one `id` mean different things depending on where they came from, so the
rule is different in each direction:

* **Within a layer** they are one configuration stated twice, and
  [`combine`][pydantic_ai.capabilities.AbstractCapability.combine] decides what that means.
  `Agent(capabilities=[Coder(), Researcher()])` brings two `WebSearch` capabilities with
  different allow-lists, and the agent should be able to reach both sets of domains.
* **Across layers** the later layer *overrides* the earlier one outright, and `combine` is not
  consulted at all. `agent.run(capabilities=[WebSearch(allowed_domains=[...])])` states what
  this run may reach; merging it into the agent's list would widen the very restriction it was
  passed to impose. A run-level capability replaces its agent-level namesake, whole.

`Agent.__init__` also runs this over the capabilities the agent was constructed with -- one
layer, so within-layer rules -- because it goes on to bind them and read what they contribute
long before a run exists, and two that will merge into one must not be read as two.

Keeping both is not an option: `_build_run_capabilities` maps the id to exactly one of them, so
the other would go on contributing tools and instructions while nothing could name it --
`resolve_capability_id` wouldn't find it, and it would be missing from
`RunContext.active_capability_ids`.

Rewrites the tree in place with
[`visit_and_replace`][pydantic_ai.capabilities.AbstractCapability.visit_and_replace] rather than
rebuilding it from the flat leaf list, which would drop the nesting and re-add a container's
children beside the wrapper that already contributes them.

Capabilities with `id=None` are left alone: the run tells those apart itself.

`layers` is the application layers in order, each holding the capabilities supplied to it. The
composed tree cannot answer either question: `CombinedCapability` sorts its leaves into ordering
tiers, so a capability supplied later but positioned `'outermost'` moves ahead of one supplied
earlier, and reading "last" off the tree would turn a run-level override into the agent-level
capability winning.
r,   )ÚWrapperCapabilityr   Nc                ó   • U R                   $ r…   )rT   )Ú
occurrences    ra   Ú<lambda>Ú1_combine_duplicate_capabilities.<locals>.<lambda>Š  s
   € À×ATÒATr`   )Úkeyc              3  ó8   #   • U  H  oR                   v •  M     g 7fr…   )r“  )rÎ   Ú	duplicates     ra   rÐ   Ú2_combine_duplicate_capabilities.<locals>.<genexpr>œ  s   é € ÐKÂ
°9×.Ö.Â
ùó   ‚éÿÿÿÿc                ól   >• TR                  [        U 5      5      nU(       d  U $ UR                  S5      $ )Nr   )rÒ   ro   Úpop)ÚcapÚ	decisionsÚreplacementss     €ra   Úreplace_occurrenceÚ;_combine_duplicate_capabilities.<locals>.replace_occurrence»  s.   ø€ Ø ×$Ñ$¤R¨£WÓ-ˆ	ÞØˆJØ�}‰}˜QÓÐr`   z6combining duplicate capabilities cannot empty the tree)r¢  ru  rs  rw  )!Úwrapperr•  Ú	enumerater   Úfrom_iterableÚmapr�  r‰  Ú
setdefaultro   r†  r¡  rÒ   r�  ÚitemsÚlenÚsortedÚmaxr“  r‡  Úsetr  ro  Úaddr†   Ú_reject_class_crossing_idÚ_declares_default_idr   Ú_repeated_id_messageru   Úupdater’  r}   )r‡  Úlayersr•  Úroot_locationsrT   r“  ÚlayerÚrootÚleaf_positionsÚleafÚoccurrence_countsÚby_idr’  r—  Úcapability_idÚ
duplicatesÚduplicate_groupsÚ
last_layerrœ  Ú	survivingÚspans_layersÚidentity_typesÚidentityÚcombined_duplicateÚsurvivorÚlast_duplicater¥  rŒ  r¤  s                               @ra   Ú_combine_duplicate_capabilitiesrÉ  E  sé  ø€ õP +ð IK€NØ€HÜ'¨Ö/ÑˆÜ×'Ò'¬Ô,>ÀÓ(FÖGˆDØ35ˆNÜ)¨$Ö/�Ø×)Ñ)¬"¨T«(°BÓ7×>Ñ>¸xÔHØ˜A‘’ñ 0ð ×%Ñ%¤b¨£h°Ó3×:Ñ:¸KÐ;XÖYó Hñ 0ð )+ÐØ@B€EÜ" :Ö.ˆØ&4´R¸³XÑ&>×&BÑ&BÀ1Ó&EÑ#ˆÜ% dÖ+ˆDØ�w‰wÓ"Ø#4×#8Ñ#8¼¸D»À1Ó#EÐ Ø.>ÀÑ.BÐ!¤" T£(Ñ+Ø)¬"¨T«(Ñ3×7Ñ7¸Ó:�Ü2°4È;Óa�
Ø× Ñ  §¡¨"Ó-×4Ñ4°ZÖ@ó ,ñ /ð */¯©¬ôâ)6Ñ%ˆMÜˆz‹?˜QÑó 	Vˆ”v˜jÑ.TÑUÒUÙ)6ð ñ ð LN€LØ%5×%;Ñ%;×%=Ñ!ˆô ÑKÁ
ÓKÓKˆ
Ù;EÓmº:¨iÈ×I^ÑI^ÐblÑIlÓ)�Y×)Ô)¹:ˆ	Ðmð " Z°¡]×%>Ñ%>Ñ>ˆÜDGÃEˆÛ#ˆIØ ×+Ñ+ˆHÞ¤:¨hÐ8I×#JÑ#JÈxÏ{É{Ð^f×^nÑ^n×^qÑ^qÓOqØ#×+Ñ+�ö ¤:¨hÐ8I×#JÑ#JÈxÏ{É{Ð^f×^nÑ^n×^qÑ^qÕOqà×Ñœt H›~Ö.ñ	 $ô
 	" -°Ô@à& r™]ÐÜˆy‹>˜AÓÜ% mÑU^Ó5_ÒU^È´d¸8¶nÑU^Ñ5_Ô`Ü'¬Ð-?Ó(@×AÑAÜÔ 4°]Ó CÓDÐDØ!3×!;Ñ!;¸IÓ!FÐØ×ÑÙmwÓxÒmwÐ`iŒR�	×$Ñ$Ó%¨ vÐ0AÄ"ÀY×EYÑEYÓBZÑ0[Ñ'[Ò[ÑmwÑxô	
ð $ B™ˆØWiˆ”R˜×1Ñ1Ó2Ñ3°N×4SÑ4SÔTñ= &>ö@ ØÐ÷ ð ×+Ñ+Ð,>Ó?€HàÑÐYÐ!YÓYÐØ€Oùówùò( nùò" 6`ùò
 ys$   Æ"P(Æ;P(Ç<P.ÈP.Ì!P3Î
:P8
c                ó   • SU < S3$ )zÃWhy an `id` the user chose for two capabilities cannot resolve to one.

Shared by `Agent(...)` validation and the run's own resolution so the two report it the same
way, whichever notices first.
úCapability id zj is used by multiple capabilities. Ids identify one capability within a run, so give each a distinct `id`.rU   )r¾  s    ra   r´  r´  Ç  s   € ð ˜Ñ)ð *Rð 	Rðr`   c                ó    • [        U SS5      SL$ )aÒ  Whether the class itself names the `id` its instances carry, rather than the user.

A default `id` is a class saying "an agent has one of me", which is what makes a repeat
something to combine rather than a collision. Without one, an `id` exists only because the user
passed it, and two they passed the same are two capabilities they meant to tell apart.

Read off the class attribute, so declaring a default means writing one -- `id: str | None =
'web_search'` in the class body. A capability that only passes `id=` up from inside its own
`__init__` has not declared anything a reader or this check can see, and is treated as
anonymous; two of it collide, loudly, and the fix is to hoist the default into the class body.
ro   N)Úgetattr)Úcapability_types    ra   r³  r³  Ó  s   € ô �? D¨$Ó/°tÐ;Ð;r`   c                óŠ   • [        U5      S:”  a4  SR                  [        S U 5       5      5      n[        SU < SU S35      eg)a­  Reject an `id` two different capability classes both claim.

No class can be asked to combine another's instances, so a shared id across classes is never
resolvable however they were ordered. Shared with `Agent(...)` validation so the two report the
same thing: construction sees only the capabilities it was handed, and this pass sees the tree
a run resolves to, but neither one is a case the other should describe differently.
r,   z, c              3  ó8   #   • U  H  oR                   v •  M     g 7fr…   r¢   )rÎ   rs   s     ra   rÐ   Ú,_reject_class_crossing_id.<locals>.<genexpr>ë  s   é € Ð ?º°#§¦ºùrž  rË  z- is used by capabilities of different types (zJ). Ids identify one capability within a run, so give each a distinct `id`.N)r­  Újoinr®  r   )r¾  ÚtypesÚnamess      ra   r²  r²  â  sX   € ô ˆ5ƒz�Aƒ~Ø—	‘	œ&Ñ ?¹Ó ?Ó?Ó@ˆÜØ˜]Ñ-Ð-ZÐ[`ÐZað bVð Vó
ð 	
ð r`   N)r‡  ru  rs  z$list[AbstractCapability[AgentDepsT]])r‡  ru  rs  rt  )r‡  ru  r¶  z2Sequence[Sequence[AbstractCapability[AgentDepsT]]]rs  ru  )r¾  r‚  rs  r‚  )rÎ  ztype[AbstractCapability[Any]]rs  rg   )r¾  r‚  rÓ  z)Collection[type[AbstractCapability[Any]]]rs  rv  )pÚ
__future__r   Úabcr   Úcollectionsr   Úcollections.abcr   r   r   r	   r
   Údataclassesr   r   Ú	itertoolsr   Útypingr   r   r   r   r   r   Úpydanticr   Útyping_extensionsr   Úpydantic_air   Úpydantic_ai._instructionsr   r   r   r   r   Úpydantic_ai._warningsr   Úpydantic_ai.exceptionsr   r   Úpydantic_ai.messagesr   r    r!   r"   Úpydantic_ai.toolsr#   r$   r%   r&   r'   r(   r)   Úpydantic_ai.toolsetsr*   r+   Ú_merger.   Ú	_on_eventr/   r0   r1   Úpydantic_ai.agent.abstractr2   r3   Ú%pydantic_ai.capabilities.prefix_toolsr5   Úpydantic_ai.modelsr6   r7   r8   r9   r:   Úpydantic_ai.outputr;   Úpydantic_ai.resultr<   Úpydantic_ai.runr=   Úpydantic_graphr>   r?   r^   r@   rA   rB   rC   rD   rE   rF   r‚  ÚdictrG   rH   rI   rJ   rK   rL   rM   ÚCapabilityPositionrP   ÚCapabilityDescriptionrR   rd   r‰  r�  r�  rÉ  r´  r³  r²  rU   r`   ra   Ú<module>rñ     s£  ðÞ "å Ý ß TÕ Tß *Ý ß L× Lå $Ý (å ÷õ õ ?ß 8÷ó ÷÷ ñ ÷ ?å +ß BæÝ(ßLÝA÷õ õ 1Ý.Ý.Ý"ð
 A€	ˆ9Ó @Ø aàY€
ˆIÓ YØ `àJ€�	Ó JØ Zð !bÐ �Ió  bØ dà%`Ð ˜Ó `Ø nà:€�	Ó :Ø =àv€ˆyÓ vØ .àD€
ˆIÓ DØ Nà˜t C¨ H™~Ñ-€ˆYÓ -Ø 9à# C¨ H™~Ð �9Ó -Ø .à%-¨{¨m¸YÐGXÑ=YÐ.YÑ%ZÐ ˜Ó ZØ nà$,Ð.?Ð-@À)ÈCÁ.Ð-PÑ$QÐ ˜	Ó QØ là˜T # s (™^Ñ+€	ˆ9Ó +Ø 9à'/°°¸YÀs¹^Ð0KÑ'LÐ ˜9Ó LØ ,à&.°¨u°iÀ±nÐ/DÑ&EÐ ˜)Ó EØ +àÐ5Ñ6Ð ðð U€ˆyÓ Tð Eð Ð.¨zÑ:Ñ:Ð ðð ÷)Jð )Jó ð)JñX �Ñô{8˜˜g jÑ1ó {8ó ð{8ô|#ôcñ �$Ñô˜G JÑ/ó ó ððØ.ðà>ðð $ôôD	ô<õ
r`   