From 69cf5ad661ae9598d52e6373c994cafa4cfd258d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 19 Dec 2025 10:20:20 +0000 Subject: [PATCH] Deployed ef96a31 with MkDocs version: 1.6.1 --- .nojekyll | 0 404.html | 741 + api/index.html | 17299 ++++++++++++++++ assets/_mkdocstrings.css | 213 + assets/images/favicon.png | Bin 0 -> 1870 bytes assets/images/social/api.png | Bin 0 -> 24188 bytes assets/images/social/authorization.png | Bin 0 -> 24140 bytes assets/images/social/concepts.png | Bin 0 -> 25377 bytes assets/images/social/experimental/index.png | Bin 0 -> 22901 bytes .../social/experimental/tasks-client.png | Bin 0 -> 26629 bytes .../social/experimental/tasks-server.png | Bin 0 -> 29393 bytes assets/images/social/experimental/tasks.png | Bin 0 -> 22366 bytes assets/images/social/index.png | Bin 0 -> 22366 bytes assets/images/social/installation.png | Bin 0 -> 22228 bytes assets/images/social/low-level-server.png | Bin 0 -> 24987 bytes assets/images/social/testing.png | Bin 0 -> 22292 bytes assets/javascripts/bundle.92b07e13.min.js | 16 + assets/javascripts/bundle.92b07e13.min.js.map | 7 + assets/javascripts/glightbox.min.js | 1 + assets/javascripts/lunr/min/lunr.ar.min.js | 1 + assets/javascripts/lunr/min/lunr.da.min.js | 18 + assets/javascripts/lunr/min/lunr.de.min.js | 18 + assets/javascripts/lunr/min/lunr.du.min.js | 18 + assets/javascripts/lunr/min/lunr.el.min.js | 1 + assets/javascripts/lunr/min/lunr.es.min.js | 18 + assets/javascripts/lunr/min/lunr.fi.min.js | 18 + assets/javascripts/lunr/min/lunr.fr.min.js | 18 + assets/javascripts/lunr/min/lunr.he.min.js | 1 + assets/javascripts/lunr/min/lunr.hi.min.js | 1 + assets/javascripts/lunr/min/lunr.hu.min.js | 18 + assets/javascripts/lunr/min/lunr.hy.min.js | 1 + assets/javascripts/lunr/min/lunr.it.min.js | 18 + assets/javascripts/lunr/min/lunr.ja.min.js | 1 + assets/javascripts/lunr/min/lunr.jp.min.js | 1 + assets/javascripts/lunr/min/lunr.kn.min.js | 1 + assets/javascripts/lunr/min/lunr.ko.min.js | 1 + assets/javascripts/lunr/min/lunr.multi.min.js | 1 + assets/javascripts/lunr/min/lunr.nl.min.js | 18 + assets/javascripts/lunr/min/lunr.no.min.js | 18 + assets/javascripts/lunr/min/lunr.pt.min.js | 18 + assets/javascripts/lunr/min/lunr.ro.min.js | 18 + assets/javascripts/lunr/min/lunr.ru.min.js | 18 + assets/javascripts/lunr/min/lunr.sa.min.js | 1 + .../lunr/min/lunr.stemmer.support.min.js | 1 + assets/javascripts/lunr/min/lunr.sv.min.js | 18 + assets/javascripts/lunr/min/lunr.ta.min.js | 1 + assets/javascripts/lunr/min/lunr.te.min.js | 1 + assets/javascripts/lunr/min/lunr.th.min.js | 1 + assets/javascripts/lunr/min/lunr.tr.min.js | 18 + assets/javascripts/lunr/min/lunr.vi.min.js | 1 + assets/javascripts/lunr/min/lunr.zh.min.js | 1 + assets/javascripts/lunr/tinyseg.js | 206 + assets/javascripts/lunr/wordcut.js | 6708 ++++++ .../workers/search.973d3a69.min.js | 42 + .../workers/search.973d3a69.min.js.map | 7 + assets/stylesheets/glightbox.min.css | 1 + assets/stylesheets/main.7e37652d.min.css | 1 + assets/stylesheets/main.7e37652d.min.css.map | 1 + assets/stylesheets/palette.06af60db.min.css | 1 + .../stylesheets/palette.06af60db.min.css.map | 1 + authorization/index.html | 827 + concepts/index.html | 834 + experimental/index.html | 895 + experimental/tasks-client/index.html | 1448 ++ experimental/tasks-server/index.html | 1781 ++ experimental/tasks/index.html | 1213 ++ index.html | 965 + installation/index.html | 851 + low-level-server/index.html | 827 + objects.inv | Bin 0 -> 2642 bytes search/search_index.json | 1 + sitemap.xml | 47 + sitemap.xml.gz | Bin 0 -> 290 bytes testing/index.html | 896 + 74 files changed, 36117 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 api/index.html create mode 100644 assets/_mkdocstrings.css create mode 100644 assets/images/favicon.png create mode 100644 assets/images/social/api.png create mode 100644 assets/images/social/authorization.png create mode 100644 assets/images/social/concepts.png create mode 100644 assets/images/social/experimental/index.png create mode 100644 assets/images/social/experimental/tasks-client.png create mode 100644 assets/images/social/experimental/tasks-server.png create mode 100644 assets/images/social/experimental/tasks.png create mode 100644 assets/images/social/index.png create mode 100644 assets/images/social/installation.png create mode 100644 assets/images/social/low-level-server.png create mode 100644 assets/images/social/testing.png create mode 100644 assets/javascripts/bundle.92b07e13.min.js create mode 100644 assets/javascripts/bundle.92b07e13.min.js.map create mode 100644 assets/javascripts/glightbox.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 assets/javascripts/lunr/min/lunr.el.min.js create mode 100644 assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.he.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hy.min.js create mode 100644 assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 assets/javascripts/lunr/min/lunr.kn.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ko.min.js create mode 100644 assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sa.min.js create mode 100644 assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ta.min.js create mode 100644 assets/javascripts/lunr/min/lunr.te.min.js create mode 100644 assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 assets/javascripts/lunr/tinyseg.js create mode 100644 assets/javascripts/lunr/wordcut.js create mode 100644 assets/javascripts/workers/search.973d3a69.min.js create mode 100644 assets/javascripts/workers/search.973d3a69.min.js.map create mode 100644 assets/stylesheets/glightbox.min.css create mode 100644 assets/stylesheets/main.7e37652d.min.css create mode 100644 assets/stylesheets/main.7e37652d.min.css.map create mode 100644 assets/stylesheets/palette.06af60db.min.css create mode 100644 assets/stylesheets/palette.06af60db.min.css.map create mode 100644 authorization/index.html create mode 100644 concepts/index.html create mode 100644 experimental/index.html create mode 100644 experimental/tasks-client/index.html create mode 100644 experimental/tasks-server/index.html create mode 100644 experimental/tasks/index.html create mode 100644 index.html create mode 100644 installation/index.html create mode 100644 low-level-server/index.html create mode 100644 objects.inv create mode 100644 search/search_index.json create mode 100644 sitemap.xml create mode 100644 sitemap.xml.gz create mode 100644 testing/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/404.html b/404.html new file mode 100644 index 0000000000..9b6f54f8ef --- /dev/null +++ b/404.html @@ -0,0 +1,741 @@ + + + +
+ + + + + + + + + + + + + + + + +
+ Bases: BaseSession[ClientRequest, ClientNotification, ClientResult, ServerRequest, ServerNotification]
src/mcp/client/session.py103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +592 +593 +594 +595 +596 +597 +598 +599 +600 +601 +602 +603 +604 +605 +606 +607 +608 +609 +610 +611 +612 +613 +614 +615 | |
get_server_capabilities() -> ServerCapabilities | None
+Return the server capabilities received during initialization.
+Returns None if the session has not been initialized yet.
+ + +src/mcp/client/session.py199 +200 +201 +202 +203 +204 | |
property
+
+
+experimental: ExperimentalClientFeatures
+Experimental APIs for tasks and other features.
+WARNING: These APIs are experimental and may change without notice.
+ + +status = await session.experimental.get_task(task_id) +result = await session.experimental.get_task_result(task_id, CallToolResult)
+async
+
+
+send_ping() -> EmptyResult
+Send a ping request.
+ + +src/mcp/client/session.py220 +221 +222 +223 +224 +225 | |
async
+
+
+send_progress_notification(
+ progress_token: str | int,
+ progress: float,
+ total: float | None = None,
+ message: str | None = None,
+) -> None
+Send a progress notification.
+ + +src/mcp/client/session.py227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 | |
async
+
+
+set_logging_level(level: LoggingLevel) -> EmptyResult
+Send a logging/setLevel request.
+ + +src/mcp/client/session.py248 +249 +250 +251 +252 +253 +254 +255 +256 +257 | |
async
+
+
+list_resources(cursor: str | None) -> ListResourcesResult
+list_resources(
+ *, params: PaginatedRequestParams | None
+) -> ListResourcesResult
+list_resources() -> ListResourcesResult
+list_resources(
+ cursor: str | None = None,
+ *,
+ params: PaginatedRequestParams | None = None
+) -> ListResourcesResult
+Send a resources/list request.
+ + +Parameters:
+| Name | +Type | +Description | +Default | +
|---|---|---|---|
+ cursor
+ |
+
+ str | None
+ |
+
+
+
+ Simple cursor string for pagination (deprecated, use params instead) + |
+
+ None
+ |
+
+ params
+ |
+
+ PaginatedRequestParams | None
+ |
+
+
+
+ Full pagination parameters including cursor and any future fields + |
+
+ None
+ |
+
src/mcp/client/session.py269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 | |
async
+
+
+list_resource_templates(
+ cursor: str | None,
+) -> ListResourceTemplatesResult
+list_resource_templates(
+ *, params: PaginatedRequestParams | None
+) -> ListResourceTemplatesResult
+list_resource_templates() -> ListResourceTemplatesResult
+list_resource_templates(
+ cursor: str | None = None,
+ *,
+ params: PaginatedRequestParams | None = None
+) -> ListResourceTemplatesResult
+Send a resources/templates/list request.
+ + +Parameters:
+| Name | +Type | +Description | +Default | +
|---|---|---|---|
+ cursor
+ |
+
+ str | None
+ |
+
+
+
+ Simple cursor string for pagination (deprecated, use params instead) + |
+
+ None
+ |
+
+ params
+ |
+
+ PaginatedRequestParams | None
+ |
+
+
+
+ Full pagination parameters including cursor and any future fields + |
+
+ None
+ |
+
src/mcp/client/session.py308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 | |
async
+
+
+read_resource(uri: AnyUrl) -> ReadResourceResult
+Send a resources/read request.
+ + +src/mcp/client/session.py335 +336 +337 +338 +339 +340 +341 +342 +343 +344 | |
async
+
+
+subscribe_resource(uri: AnyUrl) -> EmptyResult
+Send a resources/subscribe request.
+ + +src/mcp/client/session.py346 +347 +348 +349 +350 +351 +352 +353 +354 +355 | |
async
+
+
+unsubscribe_resource(uri: AnyUrl) -> EmptyResult
+Send a resources/unsubscribe request.
+ + +src/mcp/client/session.py357 +358 +359 +360 +361 +362 +363 +364 +365 +366 | |
async
+
+
+call_tool(
+ name: str,
+ arguments: dict[str, Any] | None = None,
+ read_timeout_seconds: timedelta | None = None,
+ progress_callback: ProgressFnT | None = None,
+ *,
+ meta: dict[str, Any] | None = None
+) -> CallToolResult
+Send a tools/call request with optional progress callback support.
+ + +src/mcp/client/session.py368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 | |
async
+
+
+list_prompts(cursor: str | None) -> ListPromptsResult
+list_prompts(
+ *, params: PaginatedRequestParams | None
+) -> ListPromptsResult
+list_prompts() -> ListPromptsResult
+list_prompts(
+ cursor: str | None = None,
+ *,
+ params: PaginatedRequestParams | None = None
+) -> ListPromptsResult
+Send a prompts/list request.
+ + +Parameters:
+| Name | +Type | +Description | +Default | +
|---|---|---|---|
+ cursor
+ |
+
+ str | None
+ |
+
+
+
+ Simple cursor string for pagination (deprecated, use params instead) + |
+
+ None
+ |
+
+ params
+ |
+
+ PaginatedRequestParams | None
+ |
+
+
+
+ Full pagination parameters including cursor and any future fields + |
+
+ None
+ |
+
src/mcp/client/session.py435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 | |
async
+
+
+get_prompt(
+ name: str, arguments: dict[str, str] | None = None
+) -> GetPromptResult
+Send a prompts/get request.
+ + +src/mcp/client/session.py462 +463 +464 +465 +466 +467 +468 +469 +470 +471 | |
async
+
+
+complete(
+ ref: ResourceTemplateReference | PromptReference,
+ argument: dict[str, str],
+ context_arguments: dict[str, str] | None = None,
+) -> CompleteResult
+Send a completion/complete request.
+ + +src/mcp/client/session.py473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 | |
async
+
+
+list_tools(cursor: str | None) -> ListToolsResult
+list_tools(
+ *, params: PaginatedRequestParams | None
+) -> ListToolsResult
+list_tools() -> ListToolsResult
+list_tools(
+ cursor: str | None = None,
+ *,
+ params: PaginatedRequestParams | None = None
+) -> ListToolsResult
+Send a tools/list request.
+ + +Parameters:
+| Name | +Type | +Description | +Default | +
|---|---|---|---|
+ cursor
+ |
+
+ str | None
+ |
+
+
+
+ Simple cursor string for pagination (deprecated, use params instead) + |
+
+ None
+ |
+
+ params
+ |
+
+ PaginatedRequestParams | None
+ |
+
+
+
+ Full pagination parameters including cursor and any future fields + |
+
+ None
+ |
+
src/mcp/client/session.py507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 | |
async
+
+
+send_roots_list_changed() -> None
+Send a roots/list_changed notification.
+ + +src/mcp/client/session.py541 +542 +543 | |
Client for managing connections to multiple MCP servers.
+This class is responsible for encapsulating management of server connections. +It aggregates tools, resources, and prompts from all connected servers.
+For auxiliary handlers, such as resource subscription, this is delegated to +the client and can be accessed via the session.
+ + +name_fn = lambda name, server_info: f"{(server_info.name)}_{name}" +async with ClientSessionGroup(component_name_hook=name_fn) as group: + for server_param in server_params: + await group.connect_to_server(server_param) + ...
+src/mcp/client/session_group.py88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 | |
__init__(
+ exit_stack: AsyncExitStack | None = None,
+ component_name_hook: _ComponentNameHook | None = None,
+) -> None
+Initializes the MCP client.
+ + +src/mcp/client/session_group.py130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 | |
async
+
+
+__aexit__(
+ _exc_type: type[BaseException] | None,
+ _exc_val: BaseException | None,
+ _exc_tb: TracebackType | None,
+) -> bool | None
+Closes session exit stacks and main exit stack upon completion.
+ + +src/mcp/client/session_group.py158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 | |
property
+
+
+sessions: list[ClientSession]
+Returns the list of sessions being managed.
+ +property
+
+
+Returns the prompts as a dictionary of names to prompts.
+ +property
+
+
+Returns the resources as a dictionary of names to resources.
+ +property
+
+
+Returns the tools as a dictionary of names to tools.
+ +async
+
+
+call_tool(
+ name: str,
+ arguments: dict[str, Any] | None = None,
+ read_timeout_seconds: timedelta | None = None,
+ progress_callback: ProgressFnT | None = None,
+ *,
+ meta: dict[str, Any] | None = None,
+ args: dict[str, Any] | None = None
+) -> CallToolResult
+Executes a tool given its name and arguments.
+ + +src/mcp/client/session_group.py218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 | |
async
+
+
+disconnect_from_server(session: ClientSession) -> None
+Disconnects from a single MCP server.
+ + +src/mcp/client/session_group.py239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 | |
async
+
+
+connect_with_session(
+ server_info: Implementation, session: ClientSession
+) -> ClientSession
+Connects to a single MCP server.
+ + +src/mcp/client/session_group.py276 +277 +278 +279 +280 +281 | |
async
+
+
+connect_to_server(
+ server_params: ServerParameters,
+ session_params: ClientSessionParameters | None = None,
+) -> ClientSession
+Connects to a single MCP server.
+ + +src/mcp/client/session_group.py283 +284 +285 +286 +287 +288 +289 +290 | |
+ Bases: BaseModel
src/mcp/client/stdio/__init__.py72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 | |
instance-attribute
+
+
+command: str
+The executable to run to start the server.
+ +class-attribute
+ instance-attribute
+
+
+Command line arguments to pass to the executable.
+ +class-attribute
+ instance-attribute
+
+
+The environment to use when spawning the process.
+If not specified, the result of get_default_environment() will be used.
+ +class-attribute
+ instance-attribute
+
+
+The working directory to use when spawning the process.
+ +class-attribute
+ instance-attribute
+
+
+encoding: str = 'utf-8'
+The text encoding used when sending/receiving messages to the server
+defaults to utf-8
+ +class-attribute
+ instance-attribute
+
+
+encoding_error_handler: Literal[
+ "strict", "ignore", "replace"
+] = "strict"
+The text encoding error handler.
+See https://docs.python.org/3/library/codecs.html#codec-base-classes for +explanations of possible values
+ +async
+
+
+stdio_client(
+ server: StdioServerParameters, errlog: TextIO = stderr
+)
+Client transport for stdio: this will connect to a server by spawning a +process and communicating with it over stdin/stdout.
+ + +src/mcp/client/stdio/__init__.py105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 | |
+ Bases: BaseSession[ServerRequest, ServerNotification, ServerResult, ClientRequest, ClientNotification]
src/mcp/server/session.py75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +592 +593 +594 +595 +596 +597 +598 +599 +600 +601 +602 +603 +604 +605 +606 +607 +608 +609 +610 +611 +612 +613 +614 +615 +616 +617 +618 +619 +620 +621 +622 +623 +624 +625 +626 +627 +628 +629 +630 +631 +632 +633 +634 +635 +636 +637 +638 +639 +640 +641 +642 +643 +644 +645 +646 +647 +648 +649 +650 +651 +652 +653 +654 +655 +656 +657 +658 +659 +660 +661 +662 +663 +664 +665 +666 +667 +668 +669 +670 +671 +672 +673 +674 +675 +676 +677 +678 +679 +680 +681 +682 +683 +684 +685 +686 +687 +688 +689 +690 +691 | |
property
+
+
+experimental: ExperimentalServerSessionFeatures
+Experimental APIs for server→client task operations.
+WARNING: These APIs are experimental and may change without notice.
+ +check_client_capability(
+ capability: ClientCapabilities,
+) -> bool
+Check if the client supports a specific capability.
+ + +src/mcp/server/session.py120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 | |
async
+
+
+send_log_message(
+ level: LoggingLevel,
+ data: Any,
+ logger: str | None = None,
+ related_request_id: RequestId | None = None,
+) -> None
+Send a log message notification.
+ + +src/mcp/server/session.py205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 | |
async
+
+
+send_resource_updated(uri: AnyUrl) -> None
+Send a resource updated notification.
+ + +src/mcp/server/session.py226 +227 +228 +229 +230 +231 +232 +233 +234 | |
async
+
+
+create_message(
+ messages: list[SamplingMessage],
+ *,
+ max_tokens: int,
+ system_prompt: str | None = None,
+ include_context: IncludeContext | None = None,
+ temperature: float | None = None,
+ stop_sequences: list[str] | None = None,
+ metadata: dict[str, Any] | None = None,
+ model_preferences: ModelPreferences | None = None,
+ tools: None = None,
+ tool_choice: ToolChoice | None = None,
+ related_request_id: RequestId | None = None
+) -> CreateMessageResult
+create_message(
+ messages: list[SamplingMessage],
+ *,
+ max_tokens: int,
+ system_prompt: str | None = None,
+ include_context: IncludeContext | None = None,
+ temperature: float | None = None,
+ stop_sequences: list[str] | None = None,
+ metadata: dict[str, Any] | None = None,
+ model_preferences: ModelPreferences | None = None,
+ tools: list[Tool],
+ tool_choice: ToolChoice | None = None,
+ related_request_id: RequestId | None = None
+) -> CreateMessageResultWithTools
+create_message(
+ messages: list[SamplingMessage],
+ *,
+ max_tokens: int,
+ system_prompt: str | None = None,
+ include_context: IncludeContext | None = None,
+ temperature: float | None = None,
+ stop_sequences: list[str] | None = None,
+ metadata: dict[str, Any] | None = None,
+ model_preferences: ModelPreferences | None = None,
+ tools: list[Tool] | None = None,
+ tool_choice: ToolChoice | None = None,
+ related_request_id: RequestId | None = None
+) -> CreateMessageResult | CreateMessageResultWithTools
+Send a sampling/create_message request.
+ + +Parameters:
+| Name | +Type | +Description | +Default | +
|---|---|---|---|
+ messages
+ |
+
+ list[SamplingMessage]
+ |
+
+
+
+ The conversation messages to send. + |
+ + required + | +
+ max_tokens
+ |
+
+ int
+ |
+
+
+
+ Maximum number of tokens to generate. + |
+ + required + | +
+ system_prompt
+ |
+
+ str | None
+ |
+
+
+
+ Optional system prompt. + |
+
+ None
+ |
+
+ include_context
+ |
+
+ IncludeContext | None
+ |
+
+
+
+ Optional context inclusion setting. +Should only be set to "thisServer" or "allServers" +if the client has sampling.context capability. + |
+
+ None
+ |
+
+ temperature
+ |
+
+ float | None
+ |
+
+
+
+ Optional sampling temperature. + |
+
+ None
+ |
+
+ stop_sequences
+ |
+
+ list[str] | None
+ |
+
+
+
+ Optional stop sequences. + |
+
+ None
+ |
+
+ metadata
+ |
+
+ dict[str, Any] | None
+ |
+
+
+
+ Optional metadata to pass through to the LLM provider. + |
+
+ None
+ |
+
+ model_preferences
+ |
+
+ ModelPreferences | None
+ |
+
+
+
+ Optional model selection preferences. + |
+
+ None
+ |
+
+ tools
+ |
+
+ list[Tool] | None
+ |
+
+
+
+ Optional list of tools the LLM can use during sampling. +Requires client to have sampling.tools capability. + |
+
+ None
+ |
+
+ tool_choice
+ |
+
+ ToolChoice | None
+ |
+
+
+
+ Optional control over tool usage behavior. +Requires client to have sampling.tools capability. + |
+
+ None
+ |
+
+ related_request_id
+ |
+
+ RequestId | None
+ |
+
+
+
+ Optional ID of a related request. + |
+
+ None
+ |
+
Returns:
+| Type | +Description | +
|---|---|
+ CreateMessageResult | CreateMessageResultWithTools
+ |
+
+
+
+ The sampling result from the client. + |
+
Raises:
+| Type | +Description | +
|---|---|
+ McpError
+ |
+
+
+
+ If tools are provided but client doesn't support them. + |
+
+ ValueError
+ |
+
+
+
+ If tool_use or tool_result message structure is invalid. + |
+
src/mcp/server/session.py274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 | |
async
+
+
+list_roots() -> ListRootsResult
+Send a roots/list request.
+ + +src/mcp/server/session.py350 +351 +352 +353 +354 +355 | |
async
+
+
+elicit(
+ message: str,
+ requestedSchema: ElicitRequestedSchema,
+ related_request_id: RequestId | None = None,
+) -> ElicitResult
+Send a form mode elicitation/create request.
+ + +Parameters:
+| Name | +Type | +Description | +Default | +
|---|---|---|---|
+ message
+ |
+
+ str
+ |
+
+
+
+ The message to present to the user + |
+ + required + | +
+ requestedSchema
+ |
+
+ ElicitRequestedSchema
+ |
+
+
+
+ Schema defining the expected response structure + |
+ + required + | +
+ related_request_id
+ |
+
+ RequestId | None
+ |
+
+
+
+ Optional ID of the request that triggered this elicitation + |
+
+ None
+ |
+
Returns:
+| Type | +Description | +
|---|---|
+ ElicitResult
+ |
+
+
+
+ The client's response + |
+
This method is deprecated in favor of elicit_form(). It remains for +backward compatibility but new code should use elicit_form().
+src/mcp/server/session.py357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 | |
async
+
+
+elicit_form(
+ message: str,
+ requestedSchema: ElicitRequestedSchema,
+ related_request_id: RequestId | None = None,
+) -> ElicitResult
+Send a form mode elicitation/create request.
+ + +Parameters:
+| Name | +Type | +Description | +Default | +
|---|---|---|---|
+ message
+ |
+
+ str
+ |
+
+
+
+ The message to present to the user + |
+ + required + | +
+ requestedSchema
+ |
+
+ ElicitRequestedSchema
+ |
+
+
+
+ Schema defining the expected response structure + |
+ + required + | +
+ related_request_id
+ |
+
+ RequestId | None
+ |
+
+
+
+ Optional ID of the request that triggered this elicitation + |
+
+ None
+ |
+
Returns:
+| Type | +Description | +
|---|---|
+ ElicitResult
+ |
+
+
+
+ The client's response with form data + |
+
src/mcp/server/session.py379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 | |
async
+
+
+elicit_url(
+ message: str,
+ url: str,
+ elicitation_id: str,
+ related_request_id: RequestId | None = None,
+) -> ElicitResult
+Send a URL mode elicitation/create request.
+This directs the user to an external URL for out-of-band interactions +like OAuth flows, credential collection, or payment processing.
+ + +Parameters:
+| Name | +Type | +Description | +Default | +
|---|---|---|---|
+ message
+ |
+
+ str
+ |
+
+
+
+ Human-readable explanation of why the interaction is needed + |
+ + required + | +
+ url
+ |
+
+ str
+ |
+
+
+
+ The URL the user should navigate to + |
+ + required + | +
+ elicitation_id
+ |
+
+ str
+ |
+
+
+
+ Unique identifier for tracking this elicitation + |
+ + required + | +
+ related_request_id
+ |
+
+ RequestId | None
+ |
+
+
+
+ Optional ID of the request that triggered this elicitation + |
+
+ None
+ |
+
Returns:
+| Type | +Description | +
|---|---|
+ ElicitResult
+ |
+
+
+
+ The client's response indicating acceptance, decline, or cancellation + |
+
src/mcp/server/session.py408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 | |
async
+
+
+send_ping() -> EmptyResult
+Send a ping request.
+ + +src/mcp/server/session.py443 +444 +445 +446 +447 +448 | |
async
+
+
+send_progress_notification(
+ progress_token: str | int,
+ progress: float,
+ total: float | None = None,
+ message: str | None = None,
+ related_request_id: str | None = None,
+) -> None
+Send a progress notification.
+ + +src/mcp/server/session.py450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 | |
async
+
+
+send_resource_list_changed() -> None
+Send a resource list changed notification.
+ + +src/mcp/server/session.py473 +474 +475 | |
async
+
+
+send_tool_list_changed() -> None
+Send a tool list changed notification.
+ + +src/mcp/server/session.py477 +478 +479 | |
async
+
+
+send_prompt_list_changed() -> None
+Send a prompt list changed notification.
+ + +src/mcp/server/session.py481 +482 +483 | |
async
+
+
+send_elicit_complete(
+ elicitation_id: str,
+ related_request_id: RequestId | None = None,
+) -> None
+Send an elicitation completion notification.
+This should be sent when a URL mode elicitation has been completed +out-of-band to inform the client that it may retry any requests +that were waiting for this elicitation.
+ + +Parameters:
+| Name | +Type | +Description | +Default | +
|---|---|---|---|
+ elicitation_id
+ |
+
+ str
+ |
+
+
+
+ The unique identifier of the completed elicitation + |
+ + required + | +
+ related_request_id
+ |
+
+ RequestId | None
+ |
+
+
+
+ Optional ID of the request that triggered this + |
+
+ None
+ |
+
src/mcp/server/session.py485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 | |
async
+
+
+send_message(message: SessionMessage) -> None
+Send a raw session message.
+This is primarily used by TaskResultHandler to deliver queued messages +(elicitation/sampling requests) to the client during task execution.
+WARNING: This is a low-level experimental method that may change without +notice. Prefer using higher-level methods like send_notification() or +send_request() for normal operations.
+ + +Parameters:
+| Name | +Type | +Description | +Default | +
|---|---|---|---|
+ message
+ |
+
+ SessionMessage
+ |
+
+
+
+ The session message to send + |
+ + required + | +
src/mcp/server/session.py669 +670 +671 +672 +673 +674 +675 +676 +677 +678 +679 +680 +681 +682 | |
async
+
+
+Server transport for stdio: this communicates with an MCP client by reading +from the current process' stdin and writing to stdout.
+ + +src/mcp/server/stdio.py33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 | |
+ Bases: Exception
Exception type raised when an error arrives over an MCP connection.
+ + + + + + + + +src/mcp/shared/exceptions.py8 + 9 +10 +11 +12 +13 +14 +15 +16 +17 +18 | |
__init__(error: ErrorData)
+Initialize McpError.
+ + +src/mcp/shared/exceptions.py15 +16 +17 +18 | |
+ Bases: McpError
Specialized error for when a tool requires URL mode elicitation(s) before proceeding.
+Servers can raise this error from tool handlers to indicate that the client +must complete one or more URL elicitations before the request can be processed.
+ + +raise UrlElicitationRequiredError([ + ElicitRequestURLParams( + mode="url", + message="Authorization required for your files", + url="https://example.com/oauth/authorize", + elicitationId="auth-001" + ) +])
+src/mcp/shared/exceptions.py21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 | |
Initialize UrlElicitationRequiredError.
+ + +src/mcp/shared/exceptions.py39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 | |
property
+
+
+elicitations: list[ElicitRequestURLParams]
+The list of URL elicitations required before the request can proceed.
+ +classmethod
+
+
+from_error(error: ErrorData) -> UrlElicitationRequiredError
+Reconstruct from an ErrorData received over the wire.
+ + +src/mcp/shared/exceptions.py62 +63 +64 +65 +66 +67 +68 +69 +70 +71 | |
+ Bases: Request[CallToolRequestParams, Literal['tools/call']]
Used by the client to invoke a tool provided by the server.
+ + + + + + + + +src/mcp/types.py1356 +1357 +1358 +1359 +1360 | |
+ Bases: BaseModel
Capabilities a client may support.
+ + + + + + + + +src/mcp/types.py417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 | |
class-attribute
+ instance-attribute
+
+
+Experimental, non-standard capabilities that the client supports.
+ +class-attribute
+ instance-attribute
+
+
+sampling: SamplingCapability | None = None
+Present if the client supports sampling from an LLM. +Can contain fine-grained capabilities like context and tools support.
+ +class-attribute
+ instance-attribute
+
+
+elicitation: ElicitationCapability | None = None
+Present if the client supports elicitation from the user.
+ +class-attribute
+ instance-attribute
+
+
+roots: RootsCapability | None = None
+Present if the client supports listing roots.
+ +class-attribute
+ instance-attribute
+
+
+tasks: ClientTasksCapability | None = None
+Present if the client supports task-augmented requests.
+ +
+ Bases: Request[CompleteRequestParams, Literal['completion/complete']]
A request from the client to the server, to ask for completion options.
+ + + + + + + + +src/mcp/types.py1645 +1646 +1647 +1648 +1649 | |
+ Bases: Request[CreateMessageRequestParams, Literal['sampling/createMessage']]
A request from the server to sample an LLM via the client.
+ + + + + + + + +src/mcp/types.py1539 +1540 +1541 +1542 +1543 | |
+ Bases: Result
The client's response to a sampling/create_message request from the server.
+This is the backwards-compatible version that returns single content (no arrays). +Used when the request does not include tools.
+ + + + + + + + +src/mcp/types.py1549 +1550 +1551 +1552 +1553 +1554 +1555 +1556 +1557 +1558 +1559 +1560 +1561 +1562 +1563 | |
instance-attribute
+
+
+role: Role
+The role of the message sender (typically 'assistant' for LLM responses).
+ +instance-attribute
+
+
+content: SamplingContent
+Response content. Single content block (text, image, or audio).
+ +instance-attribute
+
+
+model: str
+The name of the model that generated the message.
+ +class-attribute
+ instance-attribute
+
+
+stopReason: StopReason | None = None
+The reason why sampling stopped, if known.
+ +
+ Bases: Result
The client's response to a sampling/create_message request when tools were provided.
+This version supports array content for tool use flows.
+ + + + + + + + +src/mcp/types.py1566 +1567 +1568 +1569 +1570 +1571 +1572 +1573 +1574 +1575 +1576 +1577 +1578 +1579 +1580 +1581 +1582 +1583 +1584 +1585 +1586 +1587 +1588 +1589 +1590 +1591 | |
instance-attribute
+
+
+role: Role
+The role of the message sender (typically 'assistant' for LLM responses).
+ +instance-attribute
+
+
+content: (
+ SamplingMessageContentBlock
+ | list[SamplingMessageContentBlock]
+)
+Response content. May be a single content block or an array. +May include ToolUseContent if stopReason is 'toolUse'.
+ +instance-attribute
+
+
+model: str
+The name of the model that generated the message.
+ +class-attribute
+ instance-attribute
+
+
+stopReason: StopReason | None = None
+The reason why sampling stopped, if known. +'toolUse' indicates the model wants to use a tool.
+ +property
+
+
+content_as_list: list[SamplingMessageContentBlock]
+Returns the content as a list of content blocks, regardless of whether +it was originally a single block or a list.
+ +
+ Bases: BaseModel
Error information for JSON-RPC error responses.
+ + + + + + + + +src/mcp/types.py193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 | |
instance-attribute
+
+
+code: int
+The error type that occurred.
+ +instance-attribute
+
+
+message: str
+A short description of the error. The message SHOULD be limited to a concise single +sentence.
+ +class-attribute
+ instance-attribute
+
+
+data: Any | None = None
+Additional information about the error. The value of this member is defined by the +sender (e.g. detailed error information, nested errors etc.).
+ +
+ Bases: Request[GetPromptRequestParams, Literal['prompts/get']]
Used by the client to get a prompt provided by the server.
+ + + + + + + + +src/mcp/types.py1019 +1020 +1021 +1022 +1023 | |
+ Bases: Result
The server's response to a prompts/get request from the client.
+ + + + + + + + +src/mcp/types.py1221 +1222 +1223 +1224 +1225 +1226 | |
class-attribute
+ instance-attribute
+
+
+description: str | None = None
+An optional description for the prompt.
+ +
+ Bases: BaseMetadata
Describes the name and version of an MCP implementation.
+ + + + + + + + +src/mcp/types.py263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 | |
class-attribute
+ instance-attribute
+
+
+websiteUrl: str | None = None
+An optional URL of the website for this implementation.
+ +class-attribute
+ instance-attribute
+
+
+icons: list[Icon] | None = None
+An optional list of icons for this implementation.
+ +
+ Bases: Notification[NotificationParams | None, Literal['notifications/initialized']]
This notification is sent from the client to the server after initialization has +finished.
+ + + + + + + + +src/mcp/types.py702 +703 +704 +705 +706 +707 +708 +709 | |
+ Bases: Request[InitializeRequestParams, Literal['initialize']]
This request is sent from the client to the server when it first connects, asking it +to begin initialization.
+ + + + + + + + +src/mcp/types.py681 +682 +683 +684 +685 +686 +687 +688 | |
+ Bases: Result
After receiving an initialize request from the client, the server sends this.
+ + + + + + + + +src/mcp/types.py691 +692 +693 +694 +695 +696 +697 +698 +699 | |
instance-attribute
+
+
+The version of the Model Context Protocol that the server wants to use.
+ +class-attribute
+ instance-attribute
+
+
+instructions: str | None = None
+Instructions describing how to use the server and its features.
+ +
+ Bases: BaseModel
A response to a request that indicates an error occurred.
+ + + + + + + + +src/mcp/types.py214 +215 +216 +217 +218 +219 +220 | |
+ Bases: Request[dict[str, Any] | None, str]
A request that expects a response.
+ + + + + + + + +src/mcp/types.py152 +153 +154 +155 +156 +157 +158 | |
+ Bases: BaseModel
A successful (non-error) response to a request.
+ + + + + + + + +src/mcp/types.py168 +169 +170 +171 +172 +173 +174 | |
+ Bases: PaginatedRequest[Literal['prompts/list']]
Sent from the client to request a list of prompts and prompt templates.
+ + + + + + + + +src/mcp/types.py968 +969 +970 +971 | |
+ Bases: PaginatedResult
The server's response to a prompts/list request from the client.
+ + + + + + + + +src/mcp/types.py1003 +1004 +1005 +1006 | |
+ Bases: PaginatedRequest[Literal['resources/list']]
Sent from the client to request a list of resources the server has.
+ + + + + + + + +src/mcp/types.py755 +756 +757 +758 | |
+ Bases: PaginatedResult
The server's response to a resources/list request from the client.
+ + + + + + + + +src/mcp/types.py820 +821 +822 +823 | |
+ Bases: PaginatedResult
The server's response to a tools/list request from the client.
+ + + + + + + + +src/mcp/types.py1342 +1343 +1344 +1345 | |
+ Bases: Notification[LoggingMessageNotificationParams, Literal['notifications/message']]
Notification of a log message passed from server to client.
+ + + + + + + + +src/mcp/types.py1415 +1416 +1417 +1418 +1419 | |
+ Bases: BaseModel, Generic[NotificationParamsT, MethodT]
Base class for JSON-RPC notifications.
+ + + + + + + + +src/mcp/types.py125 +126 +127 +128 +129 +130 | |
+ Bases: Request[RequestParams | None, Literal['ping']]
A ping, issued by either the server or the client, to check that the other party is +still alive.
+ + + + + + + + +src/mcp/types.py712 +713 +714 +715 +716 +717 +718 +719 | |
+ Bases: Notification[ProgressNotificationParams, Literal['notifications/progress']]
An out-of-band notification used to inform the receiver of a progress update for a +long-running request.
+ + + + + + + + +src/mcp/types.py745 +746 +747 +748 +749 +750 +751 +752 | |
+ Bases: BaseModel
Capability for prompts operations.
+ + + + + + + + +src/mcp/types.py437 +438 +439 +440 +441 +442 | |
class-attribute
+ instance-attribute
+
+
+listChanged: bool | None = None
+Whether this server supports notifications for changes to the prompt list.
+ +
+ Bases: Request[ReadResourceRequestParams, Literal['resources/read']]
Sent from the client to the server, to read a specific resource URI.
+ + + + + + + + +src/mcp/types.py849 +850 +851 +852 +853 | |
+ Bases: Result
The server's response to a resources/read request from the client.
+ + + + + + + + +src/mcp/types.py888 +889 +890 +891 | |
+ Bases: BaseMetadata
A known resource that the server is capable of reading.
+ + + + + + + + +src/mcp/types.py767 +768 +769 +770 +771 +772 +773 +774 +775 +776 +777 +778 +779 +780 +781 +782 +783 +784 +785 +786 +787 +788 +789 +790 +791 | |
instance-attribute
+
+
+uri: Annotated[AnyUrl, UrlConstraints(host_required=False)]
+The URI of this resource.
+ +class-attribute
+ instance-attribute
+
+
+description: str | None = None
+A description of what this resource represents.
+ +class-attribute
+ instance-attribute
+
+
+mimeType: str | None = None
+The MIME type of this resource, if known.
+ +class-attribute
+ instance-attribute
+
+
+size: int | None = None
+The size of the raw resource content, in bytes (i.e., before base64 encoding +or any tokenization), if known.
+This can be used by Hosts to display file sizes and estimate context window usage.
+ +class-attribute
+ instance-attribute
+
+
+icons: list[Icon] | None = None
+An optional list of icons for this resource.
+ +class-attribute
+ instance-attribute
+
+
+See MCP specification +for notes on _meta usage.
+ +
+ Bases: BaseModel
Capability for resources operations.
+ + + + + + + + +src/mcp/types.py445 +446 +447 +448 +449 +450 +451 +452 | |
class-attribute
+ instance-attribute
+
+
+subscribe: bool | None = None
+Whether this server supports subscribing to resource updates.
+ +class-attribute
+ instance-attribute
+
+
+listChanged: bool | None = None
+Whether this server supports notifications for changes to the resource list.
+ +
+ Bases: Notification[ResourceUpdatedNotificationParams, Literal['notifications/resources/updated']]
A notification from the server to the client, informing it that a resource has +changed and may need to be read again.
+ + + + + + + + +src/mcp/types.py956 +957 +958 +959 +960 +961 +962 +963 +964 +965 | |
+ Bases: BaseModel
Capability for root operations.
+ + + + + + + + +src/mcp/types.py277 +278 +279 +280 +281 +282 | |
class-attribute
+ instance-attribute
+
+
+listChanged: bool | None = None
+Whether the client supports notifications for changes to the roots list.
+ +
+ Bases: BaseModel
Sampling capability structure, allowing fine-grained capability advertisement.
+ + + + + + + + +src/mcp/types.py334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 | |
class-attribute
+ instance-attribute
+
+
+context: SamplingContextCapability | None = None
+Present if the client supports non-'none' values for includeContext parameter. +SOFT-DEPRECATED: New implementations should use tools parameter instead.
+ +class-attribute
+ instance-attribute
+
+
+tools: SamplingToolsCapability | None = None
+Present if the client supports tools and toolChoice parameters in sampling requests. +Presence indicates full tool calling support during sampling.
+ +module-attribute
+
+
+SamplingContent: TypeAlias = (
+ TextContent | ImageContent | AudioContent
+)
+Basic content types for sampling responses (without tool use). +Used for backwards-compatible CreateMessageResult when tools are not used.
+ +
+ Bases: BaseModel
Capability for context inclusion during sampling.
+Indicates support for non-'none' values in the includeContext parameter. +SOFT-DEPRECATED: New implementations should use tools parameter instead.
+ + + + + + + + +src/mcp/types.py285 +286 +287 +288 +289 +290 +291 +292 +293 | |
+ Bases: BaseModel
Describes a message issued to or received from an LLM API.
+ + + + + + + + +src/mcp/types.py1154 +1155 +1156 +1157 +1158 +1159 +1160 +1161 +1162 +1163 +1164 +1165 +1166 +1167 +1168 +1169 +1170 +1171 +1172 +1173 +1174 | |
instance-attribute
+
+
+content: (
+ SamplingMessageContentBlock
+ | list[SamplingMessageContentBlock]
+)
+Message content. Can be a single content block or an array of content blocks +for multi-modal messages and tool interactions.
+ +class-attribute
+ instance-attribute
+
+
+See MCP specification +for notes on _meta usage.
+ +property
+
+
+content_as_list: list[SamplingMessageContentBlock]
+Returns the content as a list of content blocks, regardless of whether +it was originally a single block or a list.
+ +module-attribute
+
+
+SamplingMessageContentBlock: TypeAlias = (
+ TextContent
+ | ImageContent
+ | AudioContent
+ | ToolUseContent
+ | ToolResultContent
+)
+Content block types allowed in sampling messages.
+ +
+ Bases: BaseModel
Capability indicating support for tool calling during sampling.
+When present in ClientCapabilities.sampling, indicates that the client +supports the tools and toolChoice parameters in sampling requests.
+ + + + + + + + +src/mcp/types.py296 +297 +298 +299 +300 +301 +302 +303 +304 | |
+ Bases: BaseModel
Capabilities that a server may support.
+ + + + + + + + +src/mcp/types.py506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 | |
class-attribute
+ instance-attribute
+
+
+Experimental, non-standard capabilities that the server supports.
+ +class-attribute
+ instance-attribute
+
+
+logging: LoggingCapability | None = None
+Present if the server supports sending log messages to the client.
+ +class-attribute
+ instance-attribute
+
+
+prompts: PromptsCapability | None = None
+Present if the server offers any prompt templates.
+ +class-attribute
+ instance-attribute
+
+
+resources: ResourcesCapability | None = None
+Present if the server offers any resources to read.
+ +class-attribute
+ instance-attribute
+
+
+tools: ToolsCapability | None = None
+Present if the server offers any tools to call.
+ +class-attribute
+ instance-attribute
+
+
+completions: CompletionsCapability | None = None
+Present if the server offers autocompletion suggestions for prompts and resources.
+ +class-attribute
+ instance-attribute
+
+
+tasks: ServerTasksCapability | None = None
+Present if the server supports task-augmented requests.
+ +
+ Bases: Request[SetLevelRequestParams, Literal['logging/setLevel']]
A request from the client to the server, to enable or adjust logging.
+ + + + + + + + +src/mcp/types.py1393 +1394 +1395 +1396 +1397 | |
+ Bases: Request[SubscribeRequestParams, Literal['resources/subscribe']]
Sent from the client to request resources/updated notifications from the server +whenever a particular resource changes.
+ + + + + + + + +src/mcp/types.py917 +918 +919 +920 +921 +922 +923 +924 | |
+ Bases: BaseMetadata
Definition for a tool the client can call.
+ + + + + + + + +src/mcp/types.py1315 +1316 +1317 +1318 +1319 +1320 +1321 +1322 +1323 +1324 +1325 +1326 +1327 +1328 +1329 +1330 +1331 +1332 +1333 +1334 +1335 +1336 +1337 +1338 +1339 | |
class-attribute
+ instance-attribute
+
+
+description: str | None = None
+A human-readable description of the tool.
+ +instance-attribute
+
+
+A JSON Schema object defining the expected parameters for the tool.
+ +class-attribute
+ instance-attribute
+
+
+An optional JSON Schema object defining the structure of the tool's output +returned in the structuredContent field of a CallToolResult.
+ +class-attribute
+ instance-attribute
+
+
+icons: list[Icon] | None = None
+An optional list of icons for this tool.
+ +class-attribute
+ instance-attribute
+
+
+annotations: ToolAnnotations | None = None
+Optional additional tool information.
+ +class-attribute
+ instance-attribute
+
+
+See MCP specification +for notes on _meta usage.
+ +
+ Bases: BaseModel
Controls tool usage behavior during sampling.
+Allows the server to specify whether and how the LLM should use tools +in its response.
+ + + + + + + + +src/mcp/types.py1485 +1486 +1487 +1488 +1489 +1490 +1491 +1492 +1493 +1494 +1495 +1496 +1497 +1498 +1499 +1500 +1501 | |
class-attribute
+ instance-attribute
+
+
+mode: Literal['auto', 'required', 'none'] | None = None
+Controls when tools are used: +- "auto": Model decides whether to use tools (default) +- "required": Model MUST use at least one tool before completing +- "none": Model should not use tools
+ +
+ Bases: BaseModel
Content representing the result of a tool execution.
+This content type appears in user messages as a response to a ToolUseContent +from the assistant. It contains the output of executing the requested tool.
+ + + + + + + + +src/mcp/types.py1110 +1111 +1112 +1113 +1114 +1115 +1116 +1117 +1118 +1119 +1120 +1121 +1122 +1123 +1124 +1125 +1126 +1127 +1128 +1129 +1130 +1131 +1132 +1133 +1134 +1135 +1136 +1137 +1138 +1139 +1140 +1141 +1142 +1143 | |
instance-attribute
+
+
+type: Literal['tool_result']
+Discriminator for tool result content.
+ +instance-attribute
+
+
+toolUseId: str
+The unique identifier that corresponds to the tool call's id field.
+ +class-attribute
+ instance-attribute
+
+
+content: list[ContentBlock] = []
+A list of content objects representing the tool result. +Defaults to empty list if not provided.
+ +class-attribute
+ instance-attribute
+
+
+Optional structured tool output that matches the tool's outputSchema (if defined).
+ +class-attribute
+ instance-attribute
+
+
+isError: bool | None = None
+Whether the tool execution resulted in an error.
+ +class-attribute
+ instance-attribute
+
+
+See MCP specification +for notes on _meta usage.
+ +
+ Bases: BaseModel
Capability for tools operations.
+ + + + + + + + +src/mcp/types.py455 +456 +457 +458 +459 +460 | |
class-attribute
+ instance-attribute
+
+
+listChanged: bool | None = None
+Whether this server supports notifications for changes to the tool list.
+ +
+ Bases: BaseModel
Content representing an assistant's request to invoke a tool.
+This content type appears in assistant messages when the LLM wants to call a tool +during sampling. The server should execute the tool and return a ToolResultContent +in the next user message.
+ + + + + + + + +src/mcp/types.py1081 +1082 +1083 +1084 +1085 +1086 +1087 +1088 +1089 +1090 +1091 +1092 +1093 +1094 +1095 +1096 +1097 +1098 +1099 +1100 +1101 +1102 +1103 +1104 +1105 +1106 +1107 | |
instance-attribute
+
+
+type: Literal['tool_use']
+Discriminator for tool use content.
+ +instance-attribute
+
+
+name: str
+The name of the tool to invoke. Must match a tool name from the request's tools array.
+ +instance-attribute
+
+
+id: str
+Unique identifier for this tool call, used to correlate with ToolResultContent.
+ +instance-attribute
+
+
+Arguments to pass to the tool. Must conform to the tool's inputSchema.
+ +class-attribute
+ instance-attribute
+
+
+See MCP specification +for notes on _meta usage.
+ +
+ Bases: Request[UnsubscribeRequestParams, Literal['resources/unsubscribe']]
Sent from the client to request cancellation of resources/updated notifications from +the server.
+ + + + + + + + +src/mcp/types.py935 +936 +937 +938 +939 +940 +941 +942 | |
sT$60qoLCOv6+?!TO1%+{StYsXABbCYU6} zCtFzDyz-fM)z*Kp(Y-wv__hIB)W)ItIJ75PTMPInV@{UMBW&lMbH*Usg7Brfp>kS> zk!l0A{YG8@5J_SmL$O`k--NFdD3`oWNPQ`1N)hwhG+^PqzQ}wYvpBq?$hAEK)viUr zY>TOl)wt;LLU(rJYHSxWj=~(xuTLmT+981iq1}>n z7oTF{DG~&3{i%H56gPhQ?1e9YbPt!`->>A|-+B#9+kpcIlq 2kWrPqzJ8+g z+23A~@ac9%{J+dTt|0y4)QpGgrzRS&v&q>M1->u?CB6}rEC}^2>9WV{By^2#<@@yt zQVu Z>S6wAN%YV}wheyk7s$ z!C3n*Glg|#DNDA8$SgLs_47D-I+3<-xFuR1$J6&)J1TMT$hCi#H+*X1m4#4h(rZra z9vdzR2zhmRmD;Ykn>$jr5)G;3JM?vi-!DGN|7$7!E)ZkHQe;<{+R73Y-uOl_-)a@Z zv-SPbV!-50-8p@SiT+u|X#O3GQ1B0R-{sL(x?+9)STC69RSnol=dVI))xE&GH1P8$ zJXStec=%1okxr#&2077)xDRno`*`nDpDU87+naUi^kX}q1cjk7CmE3{l=7DXVgL|$ zT@+$)Q&X7Hox6AM)-l7w!wZ4)8Xv?(1$};gUh)rpRU6TcELk?;$1Sg)oERLcuAf*4 zF#pOYicTDLJsC~mmUnyxyUsE$vBO1+bRS_dp8zm8gyl*HpPY&)l6QZ =38 zCsv!9`XikKv5F2fxILfF%q^Vj|MkqV(z`p8M%57Q{vc5bQOf3JqjG4pUSePP_QCrp zkIW4i+G>SDM2SzOiw}x5qbp0$Fql8-_t>S@Th{Ys;qRjSo>&23yI`=+$JGh%Utv=X z1mB2AVs9+o6eFQwXSbAMRm{-?(7UMhLyX $Fa>P7EuO|%;qnWK3iJog1;qZ zrh_O~5VfW=A5Wr$g}zg(&-p9+u-y{T$FwJ+-yqbzUH1jJuBw-{DXH^BZ>cU}m72_& z@n3!J|Gg%8YQ_Pp4%2So*=}RcEC0#YyH*z wjPe;Eda8B!@T+{LbyQ~4$6yZXi0)?;G$ZBn|ZaG?> Fr_8Ty#Ua5yTcm+<*kHq)brOy%jZH~z~ONc;$=tEQqB~k^q z!|4yEnuKB|m0hsMf>b;dE^zQ?yvBumyJ!FYz6WeoA<#Hs1$w|jm%qI6NPiqab|*To z7>pk&UH}bE%KmMov8k_C-c;UqQcNsyH_FomFzD(;jJNVRwlWYeK7iSzGi;a6`-N0S z)VN^#Xg^gOv Ry7l!*<)I1r=^QJ8PZH6rKt&&^Q71Kggzvw}k;DzgY16n}@ z?gQl!0uE^N9HdqHbRwyw$ELkRQ{I3q$_D4YUM^s)$4gjYYWMW?baw4RL7>>|C0i{X zACsV_F#_a}Fp7Z}qbxDieY)6h;arzm4NoxtRIq-K)7(V=4(#I4kv5AYv6Xvo%#YCv z4Wa6R7F6MJ)eaQH4R=5nh{`Cn|CfgI#(Lkh0_JULo+@^5{QbitZ#H2??J83aQ9;`V zu30)eHs@{RW;Ho*P*nKr-d j{0P0oz&Ljd5w=LTOiU9MVtUO 8p&W_Yzfh220cOHWFLj`cXrn2*r(oU5 ps-LquO4Xf$mpjx0l8dUNHTYx}-NtIuwN z#B0zJ!PIZ3f*!4S ?v#Z~F$D=!%F;`AR$Z7&%2}g8Qd2Ha_7i# z@4UcrH$ra=e5YESm}>bthk6{OuLECMwY=}ep2QQnP^&q<^@l~jF3B6r?N(`D=iQw@ z=`T__iRd69bGGDqr^hyCI^U&8?SMws@N#+RTOZ%N&-`;vUq3zV0m+~s`rVg`qw`JN z+}t7n!;~CK?`{GUB9$HawjJ>$14UeXLpn<9sT)u=mn3Jk$5Sv^xfLwvA<66!7wF?n z2L9Iwlopi0$*Wp5%g`R)f+y$NLA->NmW~;?B0TKScL#%sdT`1*X_C%hz(`s2oq)*+ zfUjGR> zI~5ejb|hZ3)nZ}{6>16E3<9J;PF bE9q84zDS2WsNH4ry$KE_)us%SC!yGQ&+ FFI|QGelR^4yHv4TQbm%*Jp>pb>qab$4V{j3Av+{4I zVq#7g(T6mITe@6;)=;1WV)nFV2%YPRiNXA$rRQaS4453P*J?QJEpbrg)bCpP@q2Ho zM#&xso;GLGk_kxns-DtcJ_RWx2TqKSs(DIZe-HXBr_c{(3hTHM*oF=^Djj(pwn*F8 z%eU`l{Y4 AVy6%GMM7ztev`4)1N&4M zFjf?x>?vKoAE7k{K06pJp^B#h+vTQn+AG#uk|U73yr#LMvziPy3_@$89s<9{qRpO8 z#f?Q57yks>!3&DaI`Q|i(h76k6hVh>UQ4y`^gFfVpPp1YCL|G2x~?+ftSXw1AuN+1 zCjeiE _ 1s1-6qK@1k|`ZCct0 zlIjaw-p+O7lngoni|^4Heq~UKni$TnQt*QvLwbCxj3VA7qNLh2V6=LBx8*ls$QLQc zK31LCoY>P+PU0D@KD#ci>iC;=|DIkBu3=OA{g_$W-N4fe0br&_t0_=v&-n89?mPA+ zQNk>hcIY4MIkFn_Q#LyGqOULL_8-iyJak^R0m6K-PZaT>{Ja6~RL`^t^n} 6Bjp{SoOnA( zRyI8>m9?Q3oyo;p&(C2a=WtT14=?|;v}<}P&H}+Bgp#?rxqkFBRj107p}N65$=%^= zU&ZALUxTu2pp`=|Y4#QT0b!7;q7t+D?Tq%28)HL7Iw7D>HG+bfZ(jKHw@OgiN|~t% z#ZM37E9JaY6n#BPirDar#6O@IFJE>Tf}WDkK*tcY=mvVup2ngg012W+TrNfN)TDdW zodBL>z!8gjWAd_KDLp`(t^{GYkUCq?YX#(OLcR*v!mGYi(zFY$G#m7j=7>-rnd>tc zl9X1p2F@#KDEt=yRSQub8}YzFWQzhQl?Ojz1{VY8!$>XorWkr&aA~^qywFBN5HPyH zVQ2_{CZ7Z02!gbF@_zHFoz4MY+JkNSqanXY`nk`nQ%*P3nMZ$+)lgox3vC(n){bDlhE3RPU)?~TL> ~w&<2kclRn)>D>keY>Eaq`ACEy%mM2_Y745sBTdv&>n7Q^~@n=&8R##p4 z0dj*Q^9OnD9DRA+ FP>>sIVDFwY#I=H#=ok^&4;s^{u%b06cA|bFUIYRm{;6 zpavxv7KO<6wLAFDPI>4xC*LCT8_Ql%i9@H1Sn>0a^Qka4b*8sb;EO559_YNh6+a$C zvQn%V%|O8@rPE!GEPi^j`td{JWT_O~10~GQt~bs_1LFW(AkG^c>Hp^BaQp z(AQZDI_p<5Wf4uT&W0&r&o{)T7yj&0;12LuAiu%y@*Mo9m>lv^|N3NFUwac7K?bYV zS*GnVwe~Ou>Uo)PKI r8IOmQ6Ts~=dTC)>_s=ev%Qe`D zWojSvgKD1&b(| `+RxaMU9V*| @xpu+}MdAV?D%18auurCosL$|Zt631R7 zSdqDe<3?La=Fbm^h@3)x5mDd3yw5dk)8DIxGb@4Asg(6fS@KVL*r{J7VW=_8NZ;YB z2f-+B>sOBf4MlnWw5_ &KLX5`umjj)%@z2WEe5aa(AeR zCV|)sU5vE*JE6Ju?U&yQo?{u#JpdB0p?c^?Xb=rVRqj>&_%lak_GfB>wiGvSg_9+Hxn%sb-$B2a=AnhSN*4x7F9xTyyp&7sKXgA~nT z*I)b3s-1_?vSn=AiM^&)P2LN5;6SB>=c_y(ppdAClHT@N`nCz_BsPuO6GM#=1Fn!X zFUqKI0Dz9>d!KbLSYY}hIlHT>()r6<^~CI| TAOBaI?6y~@@W`8<8`|!(4OV7Ig zqDT5W9V_+FzNo2U_pd`;J(2sPBb=`Zwb~hm$x}?g4)EGGYDw)z4{;dv>Mg4V?1l6# zX-DRlzx0|lkAkS^fg|sWax=;)E7$ei>M$T9iske=t*gcK^-+H|S*a#kxti9H3843l zqU$Y}6KVj-mC$OLQjJ>E#r8dV=I{G{J6Oh_$t@63s0qnVMZ0wbh2bLVvm)Fd<}I1z z!OFl2GA#o9HiBBtDa-}5pWgNFDxB}-L vG7;q~v3+kLlr9T;HN|2co z;)k>ngO^B$mB v6w%|ZWKR+i<&aQ+)K3Xx?LNcW_GRU0OU|Bz6qA#GX zum`W2$s517=el9zfUrkK^&Zz6@3 ;sXG9&q zuw8kQTJ0P8qE>t2P3d4FdQvUWu`Hp;3?0Xn17VZH8y;#5Et@h^W}jdT0Q!#`NZ!SL z`KT5mg^zhvP(K=GC BZ9l}QxZN%n<>Jk z+V#5ad_GXiJrq87c3&shVfD%1SjcP(`>#EmcP=sUvVpcb#|Dy>5xBYb$LGWne$^W5 zy_)|v;XHD3Ieu4z^9XsmgdA3GI^*7^?OaA6hy!5%O$5 zn2$K}leZzk>^w6=d>3UW4b-?Y2|by=^wpcf+&^rSj0My J|^w2umM05O=~; z;A|s^3oErgS$n0-Tdm%gS #i)?24#O&3m0MEEZ4{< D;|ogTZHc{}2b@6<#{OR>d~n_K*3sHrPvOyJ<%_oySft%Vhh z^OY0Y2-) jo9K0JpXKd<%|w;paG}l>W?mjz)JWTF0oYnX%S*ts-QqP zDpr<|oVBJ71xTY?2dOPW{_Pl=9+H7CGZ@DHXz7cnsV-+t67ihxKYkc~2Nvh!CDj3D z2JA7Lz&zMt^a8A=o%U7I^T@H>-2->ut6`&I3UrG>b(B `7;pMpS5 zQ6Jn$lunP3JxmGNbZVju5s#$!A|0d7q#pnL%wq87uZMp39r}De6_)=BRu@e|P{B2O zd~CnI)`C)cM9QjyoXOX}-32v{WEfhB=#2r{E$pJ~9}20p!Y7LT6z2K~Aro1$Do8 zGu; UYw%=nbnmgp93Y9&-&43n^R583AodR zQaY^OFMvGG)t*V5bf=FSTJ||1@rwA*nm4-)w1fwUQzr*lixS*uol?^h|JNHfc?*qS z >;K`uFXYKCvKR$_10Uk6h5mu7c0zN8qdE zzH0#fi#8oUSj=eZ9dy|ng%67GZ=ns6F@S*5h*~{kS`qZn`S$!)|`jJc^@fE)XCA zxsqxdrw%r;jl3h7SFaE+OP)C}Oy#V%H cftE^~(wnP_p-7 NW9b-s2m7e@<3g-%f^YFx>P@;@qhJb_arsQ-Ucj1aI&~`QA!V z8X4_ILKfOQTI$r%k^;Fse66|RrA!2qx$UskQ)7#)fk}QEcns9V8_EBEy)8N2kdRto zrwFDr&PtRKeGRH8YCoDAdq^kw#iOBcfq*87sXThqxn1+ )d9&&$BMnd#(O?bF3%-AwA*ytA$W2GKyULPCQ zfYy5bOXvB@5jS13Ru7 bS;i=E1Hn{Fb@b*@$=n^oC0Vt>FcT uD%(159pNFp%m(<~X;f( z5jcYXQ51qb$1(W_WeLGHVj=yy1YdVt!Y)pzIgW{x;w^?Kj{Rqj>^ z4hmWpdq5DUm=upp)x&o6UG9Rf%;CQag0t)exDqMUG6PMdnCqiw&u}-7_m?%kR^VI& zc1y2g4j*|i5%K()+xkZ rJOi1vG&4^DUKA< zYM!&z-?W75nO&yDBHWV}7)V+LxYWeN#5$%^$G3Heh0ufSg7bn5r@BvVxQChz=_x!5 zG^!e8s48?>ZV!nkwBc~Q#jF;|{Gn|&rr-a7@sk tYOXu+tK- z$ul}sdx=ok22NT!TU>PsF{i|Pb5fUYzxZ-AreT$S#I?R_Tj!|%%$)1!vgg}Vk%gy8 z^Bx*^@%KCZMeD!)6nBPT^vrup2r1}S@WGW@bEuUki-#(I{OXH2$-(kPTC+z8x`r z1l(-|&Vk={!+vb22W>3QV|#8FJnlcPj@97PbW)?{f6~epu;@gRrB>fpOP4S_7VX=+ z(+YhLiw%Npcc1sY8i>LT;2BF;HK4G^BZ{2v|MTGhAnG#(z{v6ZN5jjOrByj5L=4!1 zpJ7+$Qs`_yWqby~xE*O-Dx2*MX4n>pDkio1;Ixg0Uj&i_Uff7tCZJ*)8%7;EMD@_c z(45X#-A+LRPzbza@s%ZggK4&@_( Do*4R~si6-r$$6m&5EU(qI%(}TXLeEM+bA@$ z3M~dZwV>%8#*BeFrvh&x0 +rxzuZ4B$;3AvNi&glgZ!)#l|Ez_J9lLT07s>PPm%Hk;`QouW2 zEuXAFcO2bI4uToooiGFyC#2Jpc-+V*O6#2t2(#^zc}+$Lz1IRSJVtG6uKi~p9@Kr( z*K&CI0K0t_eYBK}Tv(eClUWekjL3WUn78t#)8Ayp?k6LeM;%UwD*2W H_Wl>C72Sj_3hcF z0gaatnGgH5L&J*;tR%8Lu^ayBE}m4hivMvBIpQz=T()A~P=iJr2g%%TVz@ mv^&7xy|c3=d8}e;!>MKR)nrQ?bpEd8SA{9O5&!jSkI9`)I};TU zOIB6Cmd*7$Y4oZJxTF+^;3lO!cW7mIf!&n5S+=Mb?B@UDeR_wFY={jbn^y88IgprD zIo@L! stf>xuRgBE2=9KB zMw>eI )>M KCgN1wh(K2TO;1G{>gC%gt<5cNgk8w=I7Q>I z-AR~G$hFFpGX)(4fXgawG~DI(dUf23p`J#jT=hOO!_bJiO@Ny88Bt~%AkFf%;LonJ zsu1N#fV$eZiD1_aunYO{r!D8W33}UsUddk$`l?sT2RihE4Cz3U(@CMnn_~XG0n#x@ zyJu%-H$ou|1r4x~<1zaI 87*U)u9YJ-j|y z7Ht}(1d}_$uU>5#_YL)Rz4GrWn)fHcJg1PRQTJO#)a&RqH8r_`E-nIamFMJ7c-t_) z&?G(Cwe`>)lhMiHtB^PS8~!y%^X!Ys }uQYwj z#5`Lxr5fWtnRyX!$luT+gp6;^QRy2#If%-t*g6=4^4La@(i@rYMAwm6 fIKdenOuR7;99?;VS!M-o zK!1{yM5gznZ?BObU3zq$ROB~wLTii@AP-8wp1h$nVcJ^$z(}OnVxSHBq7rJ;HElm{ zIBjMsA?& LWIx&WM6=%TX>oYEN}*^q-<@SROm^3SwxYw|Pfw3?LV?9}q1Cd2gy<#y3#Zk>e zXRgwf4O_%rs5^JL*D;o;(R|IWy+%+KcJ-=AW+iDkt`A(Y{arBsNgiEfRF`#oA;F%= z{pRa|#j5 #PAVDh}>WMZ(Z<=i}SPjyskrWBshe0!pBCjkB%aYk0v-IpK z(`LK?IU`9d3mP>=kus0r45=1N^iCbH)Fe2=As&Qlp$f?pK%$;|XO)USOv~G03nV=` zv8+c10|sIk~<4>h) zkVZwQLy(Z5D;uauOrK^}03_ddCwP5OU?7=7Ao%SQT#NLqT1`keFfapC;f?5d65R4} z!;mt@79R!%R+7Qy($+bzvJJ3Gr;NW(airOk3`kMSmNmc+nkYQfWgp?To%AzmoM8ta zl^V2Md~Wac4J+`=Y20EK=)V_#uh@-W0O|BDcHA)vhQ4?X{Z)%Wy6~rh4}ZI@ATOa# zHRH|t?DC8fvRa5-MC83BV Zq zKjBs@iwbSnHTY7aKA--aiNPacPB9&$;$@3>`R%jv$dQBQiC5B_piD8_z{TIsT5ue; zJBExA{QVxmb@=W`+*06L?lt=}!p4L 4D+f%Bsc8QTT}96W_*@g%ZLpJ82 +JO zd*F~Tgu$m2D}@gq9}Jj0$!3uHiCdqP5n>BWty1+z96JV6M8gjFKkn@?g%n4+xXBCr zlxSi%Fra=UeI+>e#H{!>s84LjFZ_&pOmiO)3Som0l7uaZ%XnVFO^8w(;kcPFDE(Xq-Fx{< z#CC%Z56u)fj$k4tt}I&?i4o1!v0R yb#XFJXCb0`a`2^KhsW(&RCPKV860 zQ%HfP9A$$J7$*m#2oKPBf{nyNi!K>zXTfpW2DW-v{ZOGAEpxka5k%o|!;!&hb%;RA zPT`dnwb(G2eK_%*2{vu`7@XhZ?7q2jni-DhLPrkxfX8z+SRJeE*6_lk>gs=XA$FD_ zyY9D@j3dAFW9{MscOa=HW$o>xE|)vL*`xh{hxEr#@X@&N2qH*=(i08LaK@+21yOP^ z_g+{jO&(YXVVUZLLe~ZzbT39s^(*{oszjeb2Kw=V^!%hOaaU+J5Bp)-z6;m%Jq$ZY z6%BOP=Q~c4<-gF6v^03?F$>d%$(6ko1IB0WpgmR@;1d}DpB3H-+J;#t7pd2zb{X7Q zlF4Ox_^HUnzS?*a;}Ppj>O57^24{fY$AL|JR18Bxg+c9N`v?h`$k}*;_-c?zj5K{8 zb|7rQb4^6^7=>(U(fuFfN0E>ah0aObGZ4{?@lyvfevvRp^AvVC01^@(K =`OOX zWAVkCc@CnZJx*z=ota2?H3SB>g4&dUtI)U_Vq(0u@mKmzxbz=ZRT?La_})D?C)043 z5)Lhy4I4)UoKR>Yg%rXly{vb{TojSXk}lmOVMAoeqMHi0>Ary5LPm7=n!zqBVcDEG z)HLM!q*U^EOGscYFy5_`=9H6ilYG;RVcU*D`8KW&h0GQhNF2Q#(19RF5z&9k|6gWY z8px~QlU_vk7A#u^S~nuTlg_hu#>neS3d`=`@{K}u(-~G060(~;*P3x)d!Rx7iujC- zO*FGZ?r2dVMsl9-luM}`H;d>LAQvwre?7*;bulqWJXyk7EyU_OhdPzB-q4&GvV*`K zg^ F4f{?6Wy1;7x^`j zi1?d4V_|(a_RFPQ{ved@yfNI>gTukk9rkF&ZU&RjXW26B8>k;6-2>L0Lj0-e>`KRY zV@}lT3cBP|Vsg;o-=Zrdac?8tI72nZr23@w0Ff?V3{G8%q3eub^_fo>_F({H8@VFk zrIhFi_-x`#q^TE3CIm6K t~`@YJ`Q1p4Fgv&`~yU2SfvvLrOE&e z=*RtoX1=_-Y~ 1bGQ@ZLq5ZgwHMCa`)>J2J^gg@JAH7C=Yd?hIWFEV z68Fzl0f{go8ufHW_KQ6GfI$gq9 6_;LZggyr-_uQQAXt=zi&Ad zEWG;Ko;A%O AHbvPK0qN} JD?(h5W-Y0(!(Ib1m?^<)sIp!E+uB%5i_Agz`x0s8I zYpMDHwc}h|-=}bKedqGSLi~;9Z=Ob6TqY~k)plvQMfSD0y6KF}sLtxHi0!>6?00hB z&UTY^n~%=Be(l1w#6PbkIy>vJAJt~m24&PV>J&O>Cgl|W!5{fyH^c87&!YA-n-A)J z_lHRL*cH{|yT2>-4(U+2RKm(JspHY8n40m4`rWBfNqK{Wa4^1@>%z^lO6U3XUnwfz zZKa>bk6c)QAHT)_i09+tIv_J|75#j&>G^l~v99KOJ^JIraIPizaY1Y4$$9vB!|LB( z{{Pv6@pa_T&Yonw&2nI!t4}%g%P+sEsi~=}t0x$wi(R{R&9RwxB#ILSaatxOCcWu( zCaG;cQ^nDq{k)33DSOWM)=L^ZJIBq w`s}Jlhv2aA(j<+M>d!+sm^rT{pe!+`HH#kv@~32R}Us zVp_y_uiCqJ?=b@dz9p--`&+(?End2_`R6Nw9_Ko`ljoA1y-PCAhTgixyubJQ>B+C3 z2P=JNr57$2H0o?__*9>2Hr>9u(C> U?PU5(hMynaW`A3OH|v(6-Br;TFR6Y0 zYmRvaq?M{`6^H+NYIoZ9u@+a;eNKH?NOq*SdhnU#{858}@r6tIMDP_RX>Nn Sk9fF0FWre6YI5;@=Jb8T9%cdsPv9qk>it6;og)?5c zE`8yzBju$TBNEvi!I8cy|NCm~OuLrg(hyPmw*%MM!_7{W8(VUm%O@P-19BW&e-mTG z-{{U_1u|-tCMG6IyJLI{TC;0;PRiKS|9WSKW%a@+kwBHnPyRuP3fHb*uk#G8n~YZv z*;JZ4P>{Qeoh%-Cg7bz4w}k3Dvun4x55L*Db9}5QK5wEcV)xciXZM9VxAq0_X(!HL zZ&w=H=R50IPj~Gsyy`PEsa>yP#`KpPel7h#Ge#wKtktuGd%pnp+<1xV>4~9Ep3(e| zfAQb nPDWHi|sCgr#e2wq&c^qS{De&&nW1q&89umX18%2$wC`8dYMqZhBj zlc5 vp|MldTzkGsxJbVPl2zShHT9o5N*qiNfij`qS69Nty5?^ye&_GHjc@ zhTl{%bdwEC@joUG?~d%;i@&w@-q!Ot^6@##g!rW62I*GX>HQz`yTYyG58o5d{mz<^ zm~l`iLGRe9HbnDg%jPVHN7f^~4bu84CwE mJx`YmJ*+9rgCg@qaU&Wvc!Rv5ga z_!5zjkmxQ+mQ8Y8ptDdX$w+_H87mR*6|oyX#PU*qFTTc8W5E9UPBVxZz#rBmYu}nD z*Pq3@9~T!_Eoomk<1*bgH)DFaPc+)?bVp~Wwsnhh_NV*T+lMPvlT*Auy}id XIi6LeTn+`@=8gmXpB)edlnlNh@??7kz>>R zy&kXI g?8?u1^%tGw2J|HF=VfcqnW;ySec0-F1I0 z7ZRjL@|qqjIi{ucOL1|rBwo{Pw84TERyf`1VY;B{p?b)H;D<)}I6vInRZlG{*Qok< zZ8ggJ6>G*zzf7yjGg>%MFjXr*XYVr{v3N??#XnmP<@WBZHBK=_=##HwPaAcP9{ss+ z;*I@%^YUBH1+x5^k){i8G2?q>bA=G5owG*Aj|bbN*XXb#S+NmzVwrPJmC9kw2s@rG z ;V`*#gnM@X9Ot1k4NJA*UQnV~w> z`?U1Jy!m3irh0m}Q7N<(=CGfpr{ ndUkrk+_$2#GWqMlCw_j2pOU}#3+mf7MY*=}zKPhG>==a&OMj6e zqTXIOH)EeZ+3Z-pZG(hFvXS=ay3xbhwVuxQSB>7GVu{%_`OeL-uyI!}E>qYXQClW( z{_U>8_UjVN?YX_jI}7?6)31B>XNzhm4Hj9wX?b$uaTYr%_de1}XGStA+@>SpznFTD zXlM5!vj$R TRCBi8p%e)Lp@o;f>>`-FjBHNz8LYdxHK` zspxKd-zh_{p;A$vjIo{?aco-lZ3Snm>0S%f>l#rC<~!^kYecpGu}IJl=R#-P#M1J! z!pl2&^6f75r>=-~+aqf~vR5(6b~L|v^JWpA*7T$26#>Tsmu+XJ#)42xZZ?fpACd_5 zWa@1X0@90XL!e~V;{}~s_VpG_^*axZ?&(=HPiJAcjP)wlR(FeRTNG~JN0p}y6ze^D zQ%g>Nd~vxZ=Q~E))CGpesJ5-*(5nrUJCX9jcWhy0-`c9bLUsI~<){0bvqOD+gOo@8 z#FO)+3dY;7- A zrIhvixMN0cA20K+eYvyEYo&eO;J(8#D*3%~V!36BX S zCpG!q+GeQZ;kr2CP{n}RVKeQ~$hdzlE)sQjcQ4&9 $&?X9iGInSC^ zHth31AS_IEL;Q8_sC3HqtPg)Kp2|ZpNcXVW*>e6w+DNTo7-PF}j!3@em_|}o`!%Yw zJj|{7X(E)mYrW|JmOcnlF{rVvQV$j>1(FD!n<|_;6u#5m EA_Bix1g)LTNL53Ez=ihs~Y?4IF&dvv1Qw~ zBML6Px8u!@eLG4um1X7ShwSo4Y7hGEe|0&+zMx@1B;KHNal%hKtZTOhi(FOg&w9{2 znx34&r*Qrp{w|@n^7?9tz!E{v1e?Ge3WG%}SvaK Ur3n!Qq&>ycgT-xw*Te zJ?*yYrL1GibXP?2@42!p01H^sQ5sU0YY!a2`g6&4zq#45!qiHYDXsC@xA*ple;w~( zB L8dE3P%PH~w5;oOAvv5 Yuk~$Ozo4C^M=Yi3VjFi$C$hpk;m+s@T+BZ5(&Md|D@Y1A1+S? zt{u^Q`Pb41NDp|C!zeWmP_5*ByQKNA{4bB6&{R(EojUPYW7}AM8`f1_O$1?a5GcFM zJK1+`)||C!n}OD;)^z*zN+a)2i1$jn_BR_SXY_ >0gtl?)x_WzFJ3I2jd~D^(74;Y;pj~R-R#T1&bMxzb)D+V z44Z02x!~vK#_Ni^POzG@oywIz GnXyem|kv zFINWh2fQWvbJ$4+#?tD+ZWEnhteYn^t^$@aTU^_WPsIeTRb&SFPP5Wfb-VilwV(9L zmLAr2;s1zzTdUaj?8J_9Z`UnDy?1PjP;z(l!UuF_JnE!Yb=@}PW4+ U c`J2=!CyN0$b*4OQ-j1d9`UM}w4^zp{}J!J*kw`_Ux zGO2a|3H(WlEmBn~S_NIVh|}iw+Yi6vgvBA8?us_Y!r0>LtEblbS#h5 `NT%=(#KOU{eY<*L&u z2G(^M1f6$hjdrWfx#yc91E6QgdNC>^^jE>C_F-=B)h2GI9^Grs=|OR7`7+<%Z_A0; zBE$p&_rpIISvU49+mf01@S#Y5;oR(E*1Pjy1b&-Iv#N=Al=! c{$&L_B6lfe Fpf>p z-lGk-RegOf4_bap4f-f=4NG2Cf5;zey&fvA+m*9a_Pg&AmVS9Ye|f^#t(^4vNr#Ql z2l8xx(2F%Pa&2*D=Pez)Fn?Lx*RqHvyWGU)zQF9S0I9n5E^l`&Dn7P IEk*ew{0on}_liLBo7EiUHbzpl% zycjDO%Xgg0ux~4 diwg@k zr$?8$&wrB8vruopfP>njxt~ovK0jJKb(Zg>jBVo%cXUs(pDz85M5e>8?-6@`&F`UU zp-(BETlQ1d*^0 |PJG=T&XQTkModeOqsvkUfP;90Z4Oci$|6QA;@E^PZ?b4h_ zrB1!LG!l5EDRnd2UewASO&O$zJ4)_D3chV|;#jDIix)3;oE<*Ozd!r(@AH*W2vbk~ z^XKBGfxO|0rO}?iw37Hp$I7bsq~PFSIiy@xQf`0a2NkPE)IgTshCn|YS__$3MsmS5 zVl2|k%gbzIQ0X}(y!+r@ud$!f%Az-DqdTyOc0c>e>eUuCl{pFQRsZ-6w4TmZvHTV* zo40QdBwnM=wg{)^)6z>?5nR^u6OFQ^0Lcp+oA8dc{3d4z7*{>kjLG_1edqxiDFd@s zG&Y}_GVLj}Wvchsx?xky!i-(6`p!+Y@kXTxdVIQ9Z=IZ9J8^W9=ng^8UhW{Jp#$k% zQ$YFrL`poemv25wNAGpG4CBQpjuCUua%HW~@f~Zy?Hw)j7gAM;)rbmzIs)WBVl`v( zy>;1y`AN%!p4Q!KxYa>rl=qFHv}@;>#v;cX8``F8J66bdi)bp3XblywHWdNoqHbwv znTEAJ)ARmGDVU9jp9JK7EiErEAFuBjTJ<8G0c=r hi;f+jP5uoZj1>-Sl8>K7cUN$W%_2Up wk)zKyS^e|p0*7jK(PGdw*4~K#v(ij-oO#0H9M-h{lK0oD z{U|biw^6$i69XkGdCMGlNT2?X--veq`Oh{>$cMr$+BOfSS`{WxF4 zWlrBrL=iD@{5vYK`KwSdh0LbM2W8%^iP*s*a*t}TYZF<>B|#w?3R?(i6H%7V E5>{8+Xt{xS=L-haIALyhJABltRIiDl&0=EL9vuoJ!tQ=b z%CA&^O?@WJU*C}y?Rpcj+NtaHRg|kD@Kv|UerGtam{mxAuPW#I|89Kr=us*%7e1lP z!Gec4CI#1ifhYy%Yl#_+VhZO!ah`lzX0w!Ro7XTc&oiqUG3th}zgGdrnRvF-c$Prq zfbJac+Uj+6OA#->d4nuj4cvAOD|OR2{h12mWukq-#3mvQIo%6h88p^|+W>8793C#q zG0D7t|Gw5=+SFJA;-FG0pQe5Zphr2!nZ1g_i)h2AXWzujRQ51Z4+!ag+Yn2%A6}q3 zY8EHgTA=9}1R5?vr@mGq|LgI*FE5rzdXDz$fh}6 cyJCv+JXYv!j>{jYt`IaZviab9k!3os&!8t#q)PC*DY-6IJtVSzl z4=k`D6$M2>KQlJn^4%r`S&AIilXdsvviMQy1lgNh;`tnX;^?6sh35wEfPU6wwzwEJ z<7p}Q>Lw-|@I7nW!3k5LR{@V_(#>9yQhkUcdZdel&8xK(Z4<(gc_o%grnQAForr=47I* zMMY#*PduajFMc~eJXowotquB-NXN1*4(L9LbPR2^MXk^7#)C~{+ffFK^Q1GVIy)G| zVWWvlVYAn|cl l!;ce$jVh?imOzSPkQn&GsSBQBt-(gdqQZ~acYqQ28 z%2`M0>)Sm U>?E6&>^o!q%%&l2nc|rf z>*+1IYOMip9p+}n_Jh9`^Gfy{>!&}JK%lsNv7%n<2hzwch^_Vd@()L6n72saXhx#z zKr81@yB4jznaivf+3|`au{~!Z^j!QvrWE$h>!a@3tbAMMYX@DM#hjr1E#3Lk+w}y! z{rt|g=D7#vp8C&YNC{`%PjX-QuMqeDUVOY@a5H8=cOc+$A>*sn4K}H+cMA>%Q=MC* z9!zx&T=ZTaA0Lvr5ZXJ=eW)8UB6x;`wRy{ytDr3a?9o!80PPJH$+inR*s=FgAum2C zZUM>`a`5$6m6bu@4b@o8fCuiwT~)xZR6cA9Cc08PZyD~R<{!y}f}d0+5P`BU5|^U7 z#E%2&P`56LzWz2~B-OD3P_@+c{DRVq4{t|y4*<|9y2c}pOuPd$n{d&=_48J}zf0WA zN=>D|t8NpcNlM3|wW+D4cp5ylQRXh?&fx`IpEDJjt&lIgh;UIJt=}*Tobd_O &xLLWH%f{>0c4Izp=mDe!;>7c?N`iv? z`~VS(QM?35@N3QYECIK A&FE0H^eYsU1*zPr;zBM6wJ-wy)K;_HCcNdOmBE^`MtabIL#sD1)=fANyMw!|h z05qXC@p96`_#lf#{VNAWY;zRp-eTaLB%YKd%+hiP^(8-GXs(;|{CLfinCT8tUSAE$ zsdzovz@Z81YGnJYY7_LO&VPE_0m{hrIEeSbIf(<;!KR8(Wf{6CG`-Fe|D?h WSFHPd?hk z*?SdmUFacw5V(ELkDfVZ_UmJXndSOGqDQ6&gM9s|3Ib$^+5hsekv 5c=h^~WQ z$pQ-WG=YhE^A{F@M;_q26LKVsi}4rX%0Of{zKG;ac6-0Cw!l%B1d}ZH>F&jLIwxp$ z#Yuug7ckfvX38wOy3!0qJ{8>+6R0hM?b7gS+-n|J1CodiK^YB|i4H>SwZoK#=uZSd zNTQLcTNjbg8zZIh2vz|BV)z5z)Ik%ghp^C2G+nCvA781bI~=VfUuSz%bAmn>Rm3j4 z^VV%yTLa=0tCCF%{h6ek_>4Y{DJHS)(Au;uP*;~So-{4eMXP)rbWGi+NK~4mp;*k4 zk5_~Qsm(XTQfl`XQu%0Vn_UHF< Bk$p(FzWW9%zi>cexuI_!?d`)_&Pgfk1Wr334G^4#_W5rFTl#HwZA2IKZty5 zFB2+uffNelUHDvX3TlQI+KC^u2l+)&sZV}BS#vkMz&j _y>Z BrtXAt+IWS|srM zZ(pH{Q(Hx-nA$2ZLBi_6da0-Pdd-Z~QSGI|XGR7PNMyynv%@j(3r#YS#~lDLO90u5bpp 1qv)j~!R<#2 zeIIHA>CANYN%tc1byVMTuy{46-cr35da>zVLCnfpfaAyX%3u3i6kSk|D6H H2L*t^YWbq>p&Ds zM-PCWO8Qk3@evHIew#Z^u5`3LicP7$MN}xUb #%RUa=)K+L}wuiYmhC|J2?Yf zP>1Q ~sg(q63gU3YYeX9_hZ@IO|oD>9jjW#apW1+_(g7 z{o9T^7SZZpP^813f?dkSi4TS+;}J7R6SXe>jTJC=b)Nfhj<43Izdf}VI>>bbP*8Vx zh}@=S(XXsQja#GWVv~oR7z6;>KQ}vLo$~Irr+y-WX%J0y5!_CEfI#t%Hb`@}85!yd zAhucXJNQG774<>?R6@M*((q*XQU*~f `<72`>jn}@Bbn)rTWn!r )sILo^PitEJ2O>+zz?zXv=PDQx8slmkdp~#D&wDFTfkXKP_J^`kxo{3bIY9j z8fBtAdY(|Zc>qI;j0(1VK&Vn__^=Y*r|RCGD||79Vw9`Cp+M^M@t|kYOLV$rUTSIL zh@Xa#J_u~gsapp6EHL uQ#!N^SH&x3`-yVZ)2Bi52>suy5`U&$V5 zJ`%A@z3*PASF&y@To)$yUC^E{l`qwUB*Q_|ba-Jecru!mmzPH^>t8LYlIKwRu-{3{ zm$CR;VqIBah8b1v8-$Vhxb5>tbiiY#FuP5f&{Xq+HrDt_P${dn&fo;Z;0GW@IQs}0 zAhb$P_hgO#`aORY!Bnzx!~Vd8kP%etl^|Xx7n-)DZ)yCc;z#Z_<7{29U^`pg%%(df ze6KECYBlOWuA>0tkgX58&wR&4T_S&+ajuI4C=Bx*XWxh?6G!aN3`7^sYFc?9b9#C@ zYq&yDIwwc;1TlZCw|kZ+rcQv8jm(10r046wP~at|S&;H7!dy{F?*A-Uea5*wSUg3x z8IXaG%rDP?s5I(Y5Y_FVaQ%_{>pti3KRwckMK-?RjE=QPT{KF|+M3c5!l&?k<1`l+ z|Au+B3l$(TN_&_T)9Py~4XQQ7NaqKnpl7bibsg|$-mn87 ;&r Wjhx=dfE|pOyVGdJNNh(F zzIjYwhgjy8sFlLPME(26c-{#BL%U%VxyrzF5!Xqx_0JoByVI&N4xYMrsI$C$cAAJX zWHMcbb+DbYbHo8eSv#sq>s@*9E^EV#9MzXP-^?dW;k;s!G$?k{Me;elY_U`@5Cf{*`7%fOlT)&C^kRtnAtnO~&;+p#|GR*l-rh|N{m^~ytawtO9 zHqE0}2RVs_B&k`m=W+xXO>C9tW!=Wdmn}}tXd>ANc=o2&G>(yeXahP*Kk)=QoXlp& zLu93-s =e_EIDDXTEwfYw3JKD5$ zjd>s*&L|X`YH8i9^16ebOrH|SAmqCefY_fww-bd-i6qLUam!yn@vb0eXRU6W0G1mP zm+P4wU8@Vn_fq|5jG%`nQb`b`jT@Gmv=s=utJf-=_k+JpJW!!0P7WXcG#pVf7Kr36 zL!@2;vu=~_$(hQD?ieA0>yCx!vx_BsC(8Z1CAMt~Pz6KkP`WX!2t>75OE-~Gk;v8# zbi}5G{gH=6LD?s}Vco=Me7qGGXeO>e#!Q%yMN^_ #{%mxuoZ-Q)( )=~;U(01V5NdvT$&QgWT=i1{MAn!L`Nk`(N>$9pqDDlkV$iZD>Uh8 z5K{YDrM7Q{8#Tx{4Pf-WTRv!M{TTs4-|0cP2$K!+g~0miCz3RxJvHprX!+PYo%txt zB)mrc9(t|xnTdG&?n^4(lV{SIR&ZJzOhd`m$*x#sX!AF5!TQPX;1F0kd6=W~)m#B) zzD0H}|4~ywI lr)S{>lk#ZN2f;&Z<#tfx{*&vX5Cha8+U0zXwd$J#pk~6o)(+vM zeEg0CoMu5pk)!vCPoIOYgBzrN*|`8eKN6$BOXz&ozGCeONNN`2J$m)(N>L`#<*h0O zia@e*RJ8u71APQxa+Qh|zW6k-MJlMp&6_v-k&c3OHN%P~jaFvHdZRwdsB~|69J#`K z@@uJEb8o{_7TPE%$N2j7R|J9w`5+4DrO&mfsZkD;1j#uL`Y@(S0iLePXXzg0@*frH z5P^=#Fvwiui!M;oYy68_*By(roE)1< 0$Wb(?fwy+6|jzlHuxGwE%#ug`R3b=}t@ z3V4Oy!8RdfVgYfR*El;Xr>BWWZ=^5sMjwyf%1wvkYNxI1U>3Pu<3Wvq uaU9RVlGcgthm@XfY#c-i>!~-NAd=&_dfgjHaB_ u72G;C{ zN5CVP0h{P6$4zAx&e)QBiZ`GEr$pMs0#YY$kUM(X)ATk09Q6e)11r6Uzx$FO_`~8K zMI(PkAIlpQ1-M8+kT-}8p90g2i>rq}^XIec-(@ae#lurfezHy ju75_u64rqVIHb!v lluT*ya9?` zx6Mw&|D>OsyIov2i33X@VH>cV9=G5u#|& jglA$q g=vx+t$k)0aAqdd&F6}ffc>Ts73wr7 z!8hk#qupkVm_|Pa&jaXw>^#)SMyDVFc_}g^=;fTZ+^2lZHxKocH^>qSbLdnDoMNyg zNJUT0%@ods4c?a7sJ=qi$YC$JrFjFU{#owxGYV&oPwR1KN`nz++? nfG+VQ&lN__f<%Jju>;M}QEYZ@a`>_O*xM z*VCes)d*u`SXJ|zaGC3WZ`gmfamC21NO>nI!FOmB#Ku0?FmwT!WFNQ_D?-Ojs^7vE zXTz6SC}Njdyo%TK*on0ycvyQ?JY$3SBx2{4n-O>qDz*B?Jlb{f!yo$6LCvMCQfP3K z6MgS*GwV&QLi*buxt=rkUI_gI )Pba>)i(q0DW8z P7EC%pPIR^@FLXtcSnIhWt!D)j99eRV$xqgEC*(FDW6yawIcNH`~ +*8OWete!+h;>e7N%uaZ+U0 (sDi@klNi${ 1*i@o#ngP~r^=j#I@+qdOEq*Wp5)T5tx0O}X1D~NjM)4;C& zvbK$CIJ*z14L^GH=wsy?i;5q)xH^Kl7~uw)c58u;%Fn$9Mb(a?P~nycLCl=zr1ANx zz0R{sL`LeU{TaL+?zP8I*2(;xbXx;X1PjK;3OA!*k--N-Gv_Y0mgyKH3s!*%T7$Nl zTsS%BKObjX52^m|tAHJN;5Mo__Zov5YXM+*lSeQSQ-Y;l0f?VCdK;B(9}a*SjM%)% zi$Y7g()(n1PZI^jk~EQtiGrwHjI$k4bMd|efFhs!fw9RQ_N_`9sxx14l%!8nd8tX) z+u8j+7nftHbV|JC>)Vo8w9(Knm@SbR1#$S=N?FekmGRlRD&Yr`M9sIixAU=2!LNXS z_{^ff2^RcfD8 q_jt4IQq7GwHM&?aqBAY>&*JexTU5;r+M#?2 zIKMyU0J_#9f4iF2z_!cQjDU3y=zHo)R{!$L`%l_JBMoFtAPmoB0R)f;4Dt2E663uj z@`K@ALs&lXwPx3UUy27_5*B o3WVS8_ z9o&_WS80DT&{E0)Q%VbtfmT+Th4}$u05YSsBW+mN_j>G9$yU?@X0zhw8*iN6yR^D@ z^BJl}H03Hy+0G=v2V4*70l!`*o^12hP@7=}(*>`o{3Ldv1XBBPNOH2A7*@ZKz6{CC z4=iDKPC&v^@ZTgev1RN1j>M=avm|9Ey0YM4R%J;db3c(o&2AS}ols}807O`~%>qk% z*0 gR{szAt8W!&Laj?e+6N z=3AfX!*GQK&pAA{xJ;Ul_d9ILIJ&+&HT5)}p<(wDYQHYijMRODPnVoIQHw !Disza<`xO!$?P3wN>v%6=g3b@rD0bFBepjV~PJzh?zg~@5s9K zO~xXrIslWN`8t|aLn}w}z4blDHTZBMt7eIrN71f3zEg`SKacBz(TbDW_kHJPdFP}; z_mO=?P}xH(yA5N3($SviZ7T0Sm;=W8xG*632#`Rw-FhC7e01=5gA|bo@s&1RZlJT3 zUgfUvooZ@34L-8ct(go`psF;so!2^smRiauWtw9+47g}H>l$6#%1Hnl=jm)rbLa91 z7O4Uq`wG=6Q~^>#n!>G~=Ed^xBKmjtVLi@+>$)CTAdL<=p` {WR1YIp1Mm`{Eg^&3dqN>e~O zY#GaH5lo%sCNOI+?})j`c`TlJwFYEFetBg%-UQ}$0XUwXARP?TgbM=u&R`ZEOLwCD zBN&OlYvzY*!oA{OqNeuKnqSvdU>Yicc~&ff)q^11c0SF)18j=aGPxxn^=Leif+Noa zbagw5621VR@zMQ&^=FXgL=cx*K`}97e;v)k1E1x&H8Rkq$`~PIYdsL~Q@)5NlP=3R z=SKH?J!^SbbRK{Q
~CLsiz(5mJ^%9wLf!_fw%&9ildv(C&+8Y^;lfQiZ?PbZ_NN&Xcl+PF_9Zj5MJ zv_Y8IwQ$>q3+v)4B+Z9oV`&@-O{0DyV_jp0EkAV?WX5-%yxu@W$lz^Yq#_zCr9sfk zfwC&P#?IP0mFoNuyOidphih`2&rv6)YvR6A8S9v;Sll zbTMT&w~!Ic;8R>46>#v?49?IY-%hlL=b*1Z%XEvHIvgn{=`$1(bEf$n)i@4C3lU}T z)rKGrZHY)AJ$@gxtvGQ(s98nO0iNb~pV X`` zW{;y>uF<5(Aaq3SaUYDdP(i {Rw-yoL0=$!GAo zsn%pZk! CU%hbO>^vRO8Y?S$TDD*5< zN{ miIGX?Wa(j_C+ndju* zGjj=vFne0&x0!-DBk4!~P1IQs;@8j~++%jX>C(9$&_IxvNC!AfI&wm#NUkC6BiiZd zU)Q(iYz8)tV#}sUL1@W>)**W?kaiV~Svz9HAB}SDIX50|cK!lK (u?{PfgPS0Qj^qJd|jpbR$Q_17XH0QJr;2YTE2X z-dPlrFt+URjS&p5>W<~U<9jf hN4c!oYtX;7=}bVNAXA;`pI}AbME9vPqW%Ywgi73?gBi zQA&d6pL{AK{ZG;Q$pL?|P$^z# O-MWG^02Uyz%q#I)pk?7RAdas6pwTyys zBzZpI_PBRDy|+PF#Mxg(J$F>1x*g5$IiQsS?@t8R{N+l&vbuMIXch+H7L-u?-zT)f zn20c00uq=tBVeO>R uAHAzgoOdeh-M;!+2)IpWsbLK7~BCNB%KK$swI*8_+sYB zMg=~U34W{RtND)|Cg>9ZkGG7%Q#wu!)IY=9U?}1AZ2+L<6}!l%&m1PYlD(75Zt=Gb zw<_NxbW(fd aoTjg(XLsh}u7a%IwDS98n1qA=CciI^ z+gUFYHUf@@OnC$J-^Dt9+lbiCy=pD0&Y=Ov$(oKCq^kfWC78G1!yN(FNBf%g!(c*P z96bS B(~^Rk->FOJJDC0hZ6J{o$Y2{Ou%H)kS@F{?zQloT3n=uKH@NI0rq&8f=&EWyb= z|G8`>{mAU9-7r~jRsVYn%fC0z{CnFDOho_QF!b-0O#fa(g_7{^)m#521B3zYXG>p3 z&Uq1aco%7I-~n!=c`!&fHZ+WjsNc7)OJX-?62(@w<#ExaA6L@o9o @vq3gFxlfyP-FYGv3+ zGeH%0NZd6UpXu>4M=;%@mtNA<*|`yl+SZ)~c#=>eQKmLQaXVQ17=6Dy=BMIY*prxt z6(uDo81uwcl`Loxhk@>LTC?eXnhyAu-b}PbeY<*q26%O4eu(cR4wPj7nnqWsu~lgN z#l{qI;XykY;~ QLD-~DvM3f46Uvw2y#nJC^_33dv98q*aPCf0^pNN$O|FT3Hu+y|@1 zeQE*#D@$NZ;HIr1+r|=!yrYTPG|Cje0nUCt>pn&}$=*ck7?`2MY+bA?n&`bi2d#Xt zrpg3F3=w@eza4>JwG?#ezATJMis5fLW3Uj65}($g-A~F)1|$|0@) FO)75*pe~g%NeXS`is!ppr|7wG2Q9yiT_z;9?}~;u_46)OypnRf75j z?aNRxWhrX>{Ny09#CzSIqU+$6^2_=Y?FY&(yJAM?$|;1@HQaAvmhaRG-kr2f`~ng9 zmW6-9TNT^OhC@p?+ZR1Wc|kM+(qqhcIO8AqI&^X>!Ey2ue@9adG)=09%d+yI);K`H z-AC6~^g>aYN?TMt*CDEU6%z1HGBT1epO8E*;o`v*$Cf4wY@>;VFSVL5^2GQ|T9Vb; z!xXRb+nZ9(taMFgC&{ep@S&F3Ef9bWRiOm`D759iD}H&?{ R zjlCs?e6l4G(GpX$P-sGb;o%A8M++745VTP#>`C;ium?P=PKO2T7TxtmU-vF%R!h{o zb5c6tKex6WtO 29a_#goTW!oeb{AlQ(OU* zZ{SU~K+NtDJ5^(wf1K2`hB{iB(5cFZof0GqVxvIjwWGbhN)xv%XPP2+`*iOLU2rvs zy=RiClKMAt;b8jY7ZAo|rY?f*Gp$0N#M7mGJNytNisWaKBaRO<`@|9x9k4;T*8O@X zUBfY}Qk&PFC_6>LWu;MZ;@OVc9!7X8l7xtGFpXNO2al+}_8xiJqzdmgU2P_hE=@fD zJL@7pZu2HzP$cj5lC_Qhr~yTI24pH0iYD5tLG@U@X@knq0j6au+Z~slmBPjzLIR{Z zPISBs4LV1Ql)5f=vqu|yc_4XqVv~AsFV4MrQ(ay)KB)r?chdP;a09pco?@MJ$7d1U zcW7U+k{VP0JE&R#S{3{U%oCSghJbJpPY(7stR;37LRG `0lVzooR3IG!(OM}CHe)QWM{p4J0XL(o&T&^o2od-Bo$cqv? zz|9RF{u&u?aei07d#o9R&c5(PJ 0VbRiRo z27Z1d-)9djg{9HVXvARC}p!(H`bds4G#^KwTijX z{2SD;6Q_E^YrRyC+g>rkkRcY15)S8bNl?Z@#F?YUBy>%|2F`+&@DPpe6Q?^~EaAg( z8LO%F;@pt~TG#DFd$_$~B#JP~j*bBdVSavyzP##mQ_QlCjAl$W=)nH&4c=wDdD9i# z2Eff-sXFK71)KLztMb^3N9ZyO#eTA*LmuB-G?( $ zWT0-`yCO(t_-lT1`FFnHfL!HRY|V7(2D*kiObsUJkRkIb?u5IzTqVwD*!dG(k47Xt z>I>3c8Y5cxey>$BXrsHkpX &qLJTtThk9ybR#5mhJ^p#xiM91&Pm{-FfQfb z9G!;$ovI_q)Br5E5^ NP=+*qshZSJ6o5muA@1gZ(DM> z!u0ZOCLb;^#KGrW>C)B&b}+aGk8leozWMySBRr$IsB`6` Ri1!Zh6)gF*x7_Y)3Zp1?<8?B<|UF 9|41rUJks*Fbp=x3wOqg{kE}vi2sP zQ3ku rDA6m7O-zE4Rpj&zz*O#J#oH!LTvOtgfZ*n#1W3)#9XBxQK2>J1M z@| 0B}i}}c?0slN5H4$R%%LC0IK$g;NRxlQ>FGY0>r#XaD zO l{y z9CnH`2n$1Oofcbvg1QajcgfGONi$l2tk38QO0c^uIyp3DM)y^adkFa_qgtMhEKS?A zBU=X1AWQ*{3(a8Bup#NLNI&tT7r!vlx}=kJRM}R>J!ulidh49r2aSX2Qfsa!9gF|H k z5hRRnfZ+G<>-)*{PLB{D0 +_J*VW`(heJMSS;U`V6i&)bn74AfB*d= zv&8@2Ew*z1k-7Py+JHwZ_t)Pld^1y-)mu9B(#}6KF!`fKLz$kEEIxn1g5PvRTDV`+ z@AmHywxC}R#eBU8zx=t^c>h=U^|F)TdivvE^-l}nm*0}*aLo%AJliNBO26Jpen{W_ zW7B`W`G461Q@zij7rx;3`I>NvT~E$0xmR4gMOIc GF8kEg|+-3JF+b5-2m z74Md78LgX2c)s(mczJx#T^lwd(_!fSBNgw@uUmbXw)afa%}m9Mj=o7aHQr+0oqXFp zbfHYZFQQ5|7G;Zi^qy$sFuHSVrNgcpC2gIb>>g!xj`cM$%c?X3r%jw>GOdduI03!e zhKHUktHt+y|MSm3?=v$K4HH!i{cic1r{hd}nO%~e+QK4klkKH{J6LZ!eE4wgso}1h z8=Z`1+4j89Crh`v-kVX Q?JGQjtGR8;jy&x`Kx&8(1ZUy4^7 zsP!ctZN9%RykW_L1rJLjwB{#I%?{V{FZ!FMTkh8Nm}+aMn`I{0R|R>#P%L`No99+- z`BL2N?D2O%-%qJGYo-0yXEs!DS+|*$(_?*ktiYt}MtG!~wp4CE`)yyNp0d8)jrDKe z2QhA{`+Btn^X3+*6^7r!wf46cd4!kOW?B{KGHs6QTNOB)Mtut6&2gJ9uiDW+=eR?g z{`nYobCX+JB0H;0DeA@z(b-$Wqj;4~s!W?}h3~vx_-Sdr{b }} gKT6%uR z{0v9N+M~i}`|;V2Yqc)U&&`;h3T(@F@|>UQt);*8|5D;8dHkiyaAff8YE4|GV7p!L z-1wVh{oCR7KBKQT*P2(3MENupxG-02Ikx}Z@dgc%LS-eT2nmn!+}Ss&Q 4E0=E@ z%r`#AT)X$?_iJOljRJZU>@OC&wbv+>4g3&o g~9Wq@%L=YPWbZI3oox) z)cWbG&7G2EgN4?a4F&D)W!3tdJA|!Wb9ZJoRErr`6dkpESyOMsf4f;9=6bbwC2vGa zA8g1eY;#V}KUf_q*seMB@S9Z6?wY9j0=(vAfkmPwD@Jd3&K|i}d!kyz+;wP6(0IDN zY3anhNKG{kcOuH%E;T1U*P%9xTZ}gvrK_tef2m}$D~vtY%U?6vhm7@=qV<@zCp&bs z@)-FpStV ?+ixgC;)+W^>9%>wP)t_wRQ_c1+i$tJ(z&R|{sl;oY!1 zDp3Wg#1-QacXgcX48MByszrsL&&yjI*2ZCfOtQF@MUQqp+T_&ulaVg_<5X{aWJm~} zpsLQL6+%>eq7=+)@ZTbMthVO{Q88KLUwCV^ruLj0RM=KCy#;;seOUJ47dM8l#m^=- zHaHe!;xmIruElHP+xr9DH@S@miCc&ozdd}yG1iBn# drD&g@4NPYirG?rL)}TXQ!fAA2qx3Bwhux@|~I*w=a~sPP@d% zE*N#8@zFvVn*%fF7KtTyb#>`-c`r9Kn6%E%bn=4ML?l%PbNNduapE|Ni^te;9k-d9 z&6WE&oU^WKp5NldVe{SG>|r+*EG8mi>X&Syt=(M{?(ppLDt7saTB(!Tc}HGtQZsCb z(@-eCVH8SN>J&TJUKDAgRAeAuCgfi!Z|!fYe9@*o=fD&B^1=qqnWtgOl`9rXpW44l zPvPYI(+g|z8Z;%!1|Gc7DeCZgq1gSUj1%$qjtgc^ov~^@q1!m+8*tYT>e(pMq5JOX zRKF`Z&h)K76M9qR(J46N#47h4z>g5I $8t0 zy^Qwv{Ee0G$?Z6qJ=!*{v|4h@vG;1xKAAQpzn)(rA$r@Ra!RMS4?p}I^HY6n*_#&w z&en$wwF7!%PmZt}Xm^~#qL44Iq$1E{s3p~18yU$7;+DNhHBKp?Xve>cIh8X9^ImOA zA1Zk8;KBHf4NN TwwhTXA?tmH_ zNpOQ+^Sc)rcniZ}_Or6t4wIAJk=-a*7x!FS6D70juw#j-+5RPxTXG(|#B0r@RYn4< zOm?+7#s?;#agA480&3WqWS;VHx_QRulI7mR+>2@hIZupG&OEB-Ce*U+v8UOWIs!&t zH9a`|g7NlKad(8C&=qtIivv~hRSOx0!PBV!<@3|*0zcQy9p1)me(X%<^TKxb+Y{{` zRo CXC&QFw9d-YKYXMiE_SKb?2xX^l$D9eb^K>V{X|kyQYt+p zSMF4NJl=LQ%GF+}uzxzM%C#3gjhRI(t3JoSrjOz2&Fqym4c(A4@){d-w_NpLQD Ci@J7#f_8qUaXjCOMlE !~z)W^)ax;puRqWkyP&2xD3*|Swe zSm>?pWrK{jM_%4kQE_2p?3Drq8L9@Jy7!rpX&tD1&!)(|BLT}{ykhaDuSBfBW4P!~ zd7~^mZ3vpk8)5p7_ltCt`h;y}omwp`FKYGV!ZPKmx4x!It1<@Wbu7zrI|#@WPxq(0 z9I{`%E8^0X)w^^er8N$Ie*L#6nnNwa+QYUF@3zeClDMk;w@W2gIMiH{3$8GX*AywV z%|E*DPSA8;)Rz>!XeALlHp-&<^yhmLHf)rb;z!w?KmwkChMA*n4^MydLRmRuVB}GQ zz2D6!2XLs$Q$R8+0EaU;hp)3+a~(Fiw&t)nQ!kVMW*L6-;-Gxl%P+tZioEH`;cn(s z+u>;28?v$mu5W*hx_&)lwBYPgwfh0@u$UAExTDeEQ>7FsyrtoPB2(Jh^i_ {Rvr?vLjBZ`T8dVEoQ8j_M67ww504Atb&7P# zP7Ed-cyfM9sif_OlC3z3OBnW%M&(37cJ+yNH?fl}U&qY)TSlS1@xhw)nll5R!5iLz z2Z$8*;i28}VOaL?Y@<@Px$iw3z2{T i0VwNuNfaZJJRh=3Wb)&yFh*c|i z?6Py`&RoC(bEnuvVoH~;H>zy~NZ+*O6DOGG54 Ez@jmF4{8OXbWL!EDs2Unbr<#tRx6XAC?)XQ{?-@k#ml z`K)-as=}Z3ZcHxLj#`&9k~48jCC{-TA|=kxIW{{!cz((g t7&SSPq=i<3h zN0pu0vt43U_w%n?+f&=`m)WmfKJ<9e@P`XBS)*+SE=Y-9koNnmmJNcyZyc8z8u<-k zJvyRQ?<%8lH%5kK6l )E&-IH4pj)8X1uCD_|MTl~ zaWwVHC3Z&KsWS>PM2F5btt<2H`vDDd&`){CyOW)P3L2xIw0KhuYSG&mDIgXJk6j2P z+&T96JGN94_~|48lMmy4O)1g58SsMaW0wfi6KSyI1Z_L{MG{vV_RTW&96^PKhTcWb z*67EW6#rNLgBJ@|KR5}s 7;iPlwfleJm~i$vG2 z3y$>Tez83e8 Aq<(nvcXPF)e1}H zb7W=5Ih|Vg@o84Is)5sE`BR^6XXkY;l~POGdi+zy$-UTJ@`{R?V=kO3UJ$jmsY>UB zv8iquUNNgc9hV>>dAs1>mt+8Dav61@g4H15a~M4(wYa#L)w%5L#;zY8J5OU{OW-!| z4^2y*e7A2fFc|n$1<%dr%RN(5G+$2;-5P4ugFemqs5P}JwUWz0#pRC90>hDBksB~I z;$s)T!O=hx^dX96F5i{sf7$eeOe(m+7T)Zr1D>rwreh%E ?Y04*r1cfsdNtXCdU0jeW_)x9iua>w=S*G-&Wg67^M zEn%>L$#^F2`~;j%9N1QG7G1WUy^Mk7`8^(;B}c!HsAz>hHv*gczV6KJUk~d_9((vz zlx9y(DR!qA*p9(Drg@gl%4O<94|Qt)y~Bi7>pVq6V!O>_37hsE7s|-wx2rV2?+$1u z2F*=p=5?%&R5$87F=hAr AQ(N+B^c;niFV4Goo-vNn$Hn1jNS zofC<>UdQ3CTU0B{|HnRK@ycI+%CxH}ZERRn;Dk5RcheyvmD?SyuTa9{$)IOEjNYvj z9Y!?KvwmxDb6+{2gH|^<;po`*kp$8^|5Q#@ENqqiQpKD9%*?ireYqL9cMH~?!-vP` ze14U&m;A!l#q5o6^C27Rx2&cT!9K2kXNyX``sm&s5rKWAu0D)zMGKSyj LLPnr{@g9M6OSF-LI=ALoVm0zx_BQ} z+C{+I8fpIlp^mbXkr7hcbY9$0TrGQWxT{*__@|eru)GhxEA~`DQCp!E6rhoPsvGaa3SSIW3%C|rY zTtU4ToOa!jS1}^^po^AyN2-ChyUs4te0Hd$1@-)BYt8{-k-!srgSdPP$Ya<+&7*bl z&iHfhFYmUh`Sc50yA_y1c3g#mx`J3G6dN7Lk@rBu2{s=^X>~=dqHAjfXmEIb_2==5 z0L_%`fy#LP3o7rUFy;fX#el*FF&fWj$Q5ZqlRO1d*G05txVyHNUNu;3Xp&wu<53zj zJ2CO6Ylls7{r3QzbD=hBb66Gk%(Lxsv6gE^tzCss0z)A_nK@~>)Yr)R-{CK+f<)2= z(3i|p%iAtjhl$lTry4tqe0)9(5Ltaw#o-{d)?DY7G;yoG QNbs=TxJQUS9Qd~4wDjb^jc1q5oI;=vsRpyVsC_ eL*^OXP9Wq z^K#Wpup!UpeY>hJu8rf<`zX! Qjra z`kq$iazk~M%HePiZDy7&J0R%)^O=sP3u^9cJx*8b+2O;iMula&Nl7$9bKEjBkk^ee zaS<)3xm``z;%ySY3|L(~_q9tn-6}+fuC(;5y1iFg=<8ARyTMo^v2B=KFJX(7e4FG? ztE)->`g(9SadSK0!+Ya3E9@9KpxHH0iew1*WwNeo*#Ez`^ZX#LixxC~d?-7+N|V-= z+O6XdkuO1w*j5kWqSZM)v;RGvzeXhk+xU=P+%4Imwwbd& YSe_y0t$0*(QEj2)IbSpR|dhcV2oVSf&ooc@%Y=@MLEe)!@z!;`iypbE7?X|0#YY z5O}r><~McW4TKmQZ2dVjEG)gE0q^rEfSx#B+@U*=!c-p^R+jU9q2IIvP82p*@#Z+i zAI?i8V7Uu$QjAj!JfAGt{FEMrZK-!^iNHt_|FJHpgUGlA!csR%RXAkYUXA&O-z>XC zlDTJ_Q%cL@{>caYm%Tt_0N805n5TwY$*sUf|DaRkfo&bYo9T=Ms{8Q--lUqvD*HA3 zVsh7rib>V{c(&&&Ri-vJIJ2ySHX3Phvpvee7ey7Vnm-6mJ@|vx(gF$ZPq!Qi3OkTq zJyeioTgLw{u*UJ6Un|%1Z|