From b45273d1120d90782fab51874533c077efe94b07 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2024 18:26:13 +0000 Subject: [PATCH 01/35] build(deps-dev): bump aiohttp from 3.9.5 to 3.10.2 in /libs/langgraph Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.9.5 to 3.10.2. - [Release notes](https://github.com/aio-libs/aiohttp/releases) - [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst) - [Commits](https://github.com/aio-libs/aiohttp/compare/v3.9.5...v3.10.2) --- updated-dependencies: - dependency-name: aiohttp dependency-type: indirect ... Signed-off-by: dependabot[bot] --- libs/langgraph/poetry.lock | 168 ++++++++++++++++++++----------------- 1 file changed, 90 insertions(+), 78 deletions(-) diff --git a/libs/langgraph/poetry.lock b/libs/langgraph/poetry.lock index aedca6476..aa0054283 100644 --- a/libs/langgraph/poetry.lock +++ b/libs/langgraph/poetry.lock @@ -1,91 +1,103 @@ # This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +[[package]] +name = "aiohappyeyeballs" +version = "2.3.5" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohappyeyeballs-2.3.5-py3-none-any.whl", hash = "sha256:4d6dea59215537dbc746e93e779caea8178c866856a721c9c660d7a5a7b8be03"}, + {file = "aiohappyeyeballs-2.3.5.tar.gz", hash = "sha256:6fa48b9f1317254f122a07a131a86b71ca6946ca989ce6326fff54a99a920105"}, +] + [[package]] name = "aiohttp" -version = "3.9.5" +version = "3.10.2" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" files = [ - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, - {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, - {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, - {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, - {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, - {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, - {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, - {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, - {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, - {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, + {file = "aiohttp-3.10.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:95213b3d79c7e387144e9cb7b9d2809092d6ff2c044cb59033aedc612f38fb6d"}, + {file = "aiohttp-3.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1aa005f060aff7124cfadaa2493f00a4e28ed41b232add5869e129a2e395935a"}, + {file = "aiohttp-3.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eabe6bf4c199687592f5de4ccd383945f485779c7ffb62a9b9f1f8a3f9756df8"}, + {file = "aiohttp-3.10.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e010736fc16d21125c7e2dc5c350cd43c528b85085c04bf73a77be328fe944"}, + {file = "aiohttp-3.10.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99f81f9c1529fd8e03be4a7bd7df32d14b4f856e90ef6e9cbad3415dbfa9166c"}, + {file = "aiohttp-3.10.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d611d1a01c25277bcdea06879afbc11472e33ce842322496b211319aa95441bb"}, + {file = "aiohttp-3.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00191d38156e09e8c81ef3d75c0d70d4f209b8381e71622165f22ef7da6f101"}, + {file = "aiohttp-3.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74c091a5ded6cb81785de2d7a8ab703731f26de910dbe0f3934eabef4ae417cc"}, + {file = "aiohttp-3.10.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:18186a80ec5a701816adbf1d779926e1069392cf18504528d6e52e14b5920525"}, + {file = "aiohttp-3.10.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5a7ceb2a0d2280f23a02c64cd0afdc922079bb950400c3dd13a1ab2988428aac"}, + {file = "aiohttp-3.10.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8bd7be6ff6c162a60cb8fce65ee879a684fbb63d5466aba3fa5b9288eb04aefa"}, + {file = "aiohttp-3.10.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:fae962b62944eaebff4f4fddcf1a69de919e7b967136a318533d82d93c3c6bd1"}, + {file = "aiohttp-3.10.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a0fde16d284efcacbe15fb0c1013f0967b6c3e379649239d783868230bf1db42"}, + {file = "aiohttp-3.10.2-cp310-cp310-win32.whl", hash = "sha256:f81cd85a0e76ec7b8e2b6636fe02952d35befda4196b8c88f3cec5b4fb512839"}, + {file = "aiohttp-3.10.2-cp310-cp310-win_amd64.whl", hash = "sha256:54ba10eb5a3481c28282eb6afb5f709aedf53cf9c3a31875ffbdc9fc719ffd67"}, + {file = "aiohttp-3.10.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:87fab7f948e407444c2f57088286e00e2ed0003ceaf3d8f8cc0f60544ba61d91"}, + {file = "aiohttp-3.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ec6ad66ed660d46503243cbec7b2b3d8ddfa020f984209b3b8ef7d98ce69c3f2"}, + {file = "aiohttp-3.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a4be88807283bd96ae7b8e401abde4ca0bab597ba73b5e9a2d98f36d451e9aac"}, + {file = "aiohttp-3.10.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01c98041f90927c2cbd72c22a164bb816fa3010a047d264969cf82e1d4bcf8d1"}, + {file = "aiohttp-3.10.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54e36c67e1a9273ecafab18d6693da0fb5ac48fd48417e4548ac24a918c20998"}, + {file = "aiohttp-3.10.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7de3ddb6f424af54535424082a1b5d1ae8caf8256ebd445be68c31c662354720"}, + {file = "aiohttp-3.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dd9c7db94b4692b827ce51dcee597d61a0e4f4661162424faf65106775b40e7"}, + {file = "aiohttp-3.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e57e21e1167705f8482ca29cc5d02702208d8bf4aff58f766d94bcd6ead838cd"}, + {file = "aiohttp-3.10.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a1a50e59b720060c29e2951fd9f13c01e1ea9492e5a527b92cfe04dd64453c16"}, + {file = "aiohttp-3.10.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:686c87782481fda5ee6ba572d912a5c26d9f98cc5c243ebd03f95222af3f1b0f"}, + {file = "aiohttp-3.10.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:dafb4abb257c0ed56dc36f4e928a7341b34b1379bd87e5a15ce5d883c2c90574"}, + {file = "aiohttp-3.10.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:494a6f77560e02bd7d1ab579fdf8192390567fc96a603f21370f6e63690b7f3d"}, + {file = "aiohttp-3.10.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6fe8503b1b917508cc68bf44dae28823ac05e9f091021e0c41f806ebbb23f92f"}, + {file = "aiohttp-3.10.2-cp311-cp311-win32.whl", hash = "sha256:4ddb43d06ce786221c0dfd3c91b4892c318eaa36b903f7c4278e7e2fa0dd5102"}, + {file = "aiohttp-3.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:ca2f5abcb0a9a47e56bac173c01e9f6c6e7f27534d91451c5f22e6a35a5a2093"}, + {file = "aiohttp-3.10.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:14eb6b17f6246959fb0b035d4f4ae52caa870c4edfb6170aad14c0de5bfbf478"}, + {file = "aiohttp-3.10.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:465e445ec348d4e4bd349edd8b22db75f025da9d7b6dc1369c48e7935b85581e"}, + {file = "aiohttp-3.10.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:341f8ece0276a828d95b70cd265d20e257f5132b46bf77d759d7f4e0443f2906"}, + {file = "aiohttp-3.10.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01fbb87b5426381cd9418b3ddcf4fc107e296fa2d3446c18ce6c76642f340a3"}, + {file = "aiohttp-3.10.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c474af073e1a6763e1c5522bbb2d85ff8318197e4c6c919b8d7886e16213345"}, + {file = "aiohttp-3.10.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d9076810a5621236e29b2204e67a68e1fe317c8727ee4c9abbfbb1083b442c38"}, + {file = "aiohttp-3.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8f515d6859e673940e08de3922b9c4a2249653b0ac181169313bd6e4b1978ac"}, + {file = "aiohttp-3.10.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:655e583afc639bef06f3b2446972c1726007a21003cd0ef57116a123e44601bc"}, + {file = "aiohttp-3.10.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8da9449a575133828cc99985536552ea2dcd690e848f9d41b48d8853a149a959"}, + {file = "aiohttp-3.10.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:19073d57d0feb1865d12361e2a1f5a49cb764bf81a4024a3b608ab521568093a"}, + {file = "aiohttp-3.10.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c8e98e1845805f184d91fda6f9ab93d7c7b0dddf1c07e0255924bfdb151a8d05"}, + {file = "aiohttp-3.10.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:377220a5efde6f9497c5b74649b8c261d3cce8a84cb661be2ed8099a2196400a"}, + {file = "aiohttp-3.10.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:92f7f4a4dc9cdb5980973a74d43cdbb16286dacf8d1896b6c3023b8ba8436f8e"}, + {file = "aiohttp-3.10.2-cp312-cp312-win32.whl", hash = "sha256:9bb2834a6f11d65374ce97d366d6311a9155ef92c4f0cee543b2155d06dc921f"}, + {file = "aiohttp-3.10.2-cp312-cp312-win_amd64.whl", hash = "sha256:518dc3cb37365255708283d1c1c54485bbacccd84f0a0fb87ed8917ba45eda5b"}, + {file = "aiohttp-3.10.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7f98e70bbbf693086efe4b86d381efad8edac040b8ad02821453083d15ec315f"}, + {file = "aiohttp-3.10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9f6f0b252a009e98fe84028a4ec48396a948e7a65b8be06ccfc6ef68cf1f614d"}, + {file = "aiohttp-3.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9360e3ffc7b23565600e729e8c639c3c50d5520e05fdf94aa2bd859eef12c407"}, + {file = "aiohttp-3.10.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3988044d1635c7821dd44f0edfbe47e9875427464e59d548aece447f8c22800a"}, + {file = "aiohttp-3.10.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a9d59da1543a6f1478c3436fd49ec59be3868bca561a33778b4391005e499d"}, + {file = "aiohttp-3.10.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9f49bdb94809ac56e09a310a62f33e5f22973d6fd351aac72a39cd551e98194"}, + {file = "aiohttp-3.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddfd2dca3f11c365d6857a07e7d12985afc59798458a2fdb2ffa4a0332a3fd43"}, + {file = "aiohttp-3.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:685c1508ec97b2cd3e120bfe309a4ff8e852e8a7460f1ef1de00c2c0ed01e33c"}, + {file = "aiohttp-3.10.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:49904f38667c44c041a0b44c474b3ae36948d16a0398a8f8cd84e2bb3c42a069"}, + {file = "aiohttp-3.10.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:352f3a4e5f11f3241a49b6a48bc5b935fabc35d1165fa0d87f3ca99c1fcca98b"}, + {file = "aiohttp-3.10.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:fc61f39b534c5d5903490478a0dd349df397d2284a939aa3cbaa2fb7a19b8397"}, + {file = "aiohttp-3.10.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:ad2274e707be37420d0b6c3d26a8115295fe9d8e6e530fa6a42487a8ca3ad052"}, + {file = "aiohttp-3.10.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c836bf3c7512100219fe1123743fd8dd9a2b50dd7cfb0c3bb10d041309acab4b"}, + {file = "aiohttp-3.10.2-cp38-cp38-win32.whl", hash = "sha256:53e8898adda402be03ff164b0878abe2d884e3ea03a4701e6ad55399d84b92dc"}, + {file = "aiohttp-3.10.2-cp38-cp38-win_amd64.whl", hash = "sha256:7cc8f65f5b22304693de05a245b6736b14cb5bc9c8a03da6e2ae9ef15f8b458f"}, + {file = "aiohttp-3.10.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9dfc906d656e14004c5bc672399c1cccc10db38df2b62a13fb2b6e165a81c316"}, + {file = "aiohttp-3.10.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:91b10208b222ddf655c3a3d5b727879d7163db12b634492df41a9182a76edaae"}, + {file = "aiohttp-3.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9fd16b5e1a7bdd14668cd6bde60a2a29b49147a535c74f50d8177d11b38433a7"}, + {file = "aiohttp-3.10.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2bfdda4971bd79201f59adbad24ec2728875237e1c83bba5221284dbbf57bda"}, + {file = "aiohttp-3.10.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69d73f869cf29e8a373127fc378014e2b17bcfbe8d89134bc6fb06a2f67f3cb3"}, + {file = "aiohttp-3.10.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df59f8486507c421c0620a2c3dce81fbf1d54018dc20ff4fecdb2c106d6e6abc"}, + {file = "aiohttp-3.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0df930015db36b460aa9badbf35eccbc383f00d52d4b6f3de2ccb57d064a6ade"}, + {file = "aiohttp-3.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:562b1153ab7f766ee6b8b357ec777a302770ad017cf18505d34f1c088fccc448"}, + {file = "aiohttp-3.10.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d984db6d855de58e0fde1ef908d48fe9a634cadb3cf715962722b4da1c40619d"}, + {file = "aiohttp-3.10.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:14dc3fcb0d877911d775d511eb617a486a8c48afca0a887276e63db04d3ee920"}, + {file = "aiohttp-3.10.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b52a27a5c97275e254704e1049f4b96a81e67d6205f52fa37a4777d55b0e98ef"}, + {file = "aiohttp-3.10.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:cd33d9de8cfd006a0d0fe85f49b4183c57e91d18ffb7e9004ce855e81928f704"}, + {file = "aiohttp-3.10.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1238fc979160bc03a92fff9ad021375ff1c8799c6aacb0d8ea1b357ea40932bb"}, + {file = "aiohttp-3.10.2-cp39-cp39-win32.whl", hash = "sha256:e2f43d238eae4f0b04f58d4c0df4615697d4ca3e9f9b1963d49555a94f0f5a04"}, + {file = "aiohttp-3.10.2-cp39-cp39-win_amd64.whl", hash = "sha256:947847f07a8f81d7b39b2d0202fd73e61962ebe17ac2d8566f260679e467da7b"}, + {file = "aiohttp-3.10.2.tar.gz", hash = "sha256:4d1f694b5d6e459352e5e925a42e05bac66655bfde44d81c59992463d2897014"}, ] [package.dependencies] +aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" @@ -94,7 +106,7 @@ multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" From a01c1c2bfa7a2ac2f89278426278c96c302f7a35 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Tue, 13 Aug 2024 10:27:48 -0700 Subject: [PATCH 02/35] Passthrough checkpoint in config even when current sub-graph didn't choose to use it --- libs/langgraph/langgraph/pregel/algo.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libs/langgraph/langgraph/pregel/algo.py b/libs/langgraph/langgraph/pregel/algo.py index 2ddbcd873..3e8b7e48b 100644 --- a/libs/langgraph/langgraph/pregel/algo.py +++ b/libs/langgraph/langgraph/pregel/algo.py @@ -407,7 +407,12 @@ def prepare_next_tasks( PregelTaskWrites(name, writes, triggers), config, ), - CONFIG_KEY_CHECKPOINTER: checkpointer, + CONFIG_KEY_CHECKPOINTER: ( + checkpointer + or config["configurable"].get( + CONFIG_KEY_CHECKPOINTER + ) + ), CONFIG_KEY_RESUMING: is_resuming, "checkpoint_id": checkpoint["id"], "checkpoint_ns": checkpoint_ns, From 307ae4cf66aab7c5c97244b513fc2be643be3a6c Mon Sep 17 00:00:00 2001 From: Isaac Francisco <78627776+isahers1@users.noreply.github.com> Date: Tue, 13 Aug 2024 16:11:01 -0700 Subject: [PATCH 03/35] link fixes (#1336) --- docs/docs/cloud/concepts/api.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docs/cloud/concepts/api.md b/docs/docs/cloud/concepts/api.md index ec0b1ddf6..e18f52c55 100644 --- a/docs/docs/cloud/concepts/api.md +++ b/docs/docs/cloud/concepts/api.md @@ -10,7 +10,7 @@ The LangGraph Cloud API consists of a few core data models: [Assistants](#assist An assistant is a configured instance of a [`CompiledGraph`][compiledgraph]. It abstracts the cognitive architecture of the graph and contains instance specific configuration and metadata. Multiple assistants can reference the same graph but can contain different configuration and metadata, which may differentiate the behavior of the assistants. An assistant (i.e. the graph) is invoked as part of a run. -The LangGraph Cloud API provides several endpoints for creating and managing assistants. See the API reference for more details. +The LangGraph Cloud API provides several endpoints for creating and managing assistants. See the [API reference](../reference/api/api_ref.html#tag/assistantscreate) for more details. #### Configuring Assistants @@ -24,13 +24,13 @@ The state of a thread at a particular point in time is called a checkpoint. For more on threads and checkpoints, see this section of the [LangGraph conceptual guide](../../concepts/low_level.md#checkpointer). -The LangGraph Cloud API provides several endpoints for creating and managing threads and thread state. See the API reference for more details. +The LangGraph Cloud API provides several endpoints for creating and managing threads and thread state. See the [API reference](../reference/api/api_ref.html#tag/threadscreate) for more details. ### Runs A run is an invocation of an assistant. Each run may have its own input, configuration, and metadata, which may affect execution and output of the underlying graph. A run can optionally be executed on a thread. -The LangGraph Cloud API provides several endpoints for creating and managing runs. See the API reference for more details. +The LangGraph Cloud API provides several endpoints for creating and managing runs. See the [API reference](../reference/api/api_ref.html#tag/runscreate) for more details. ### Cron Jobs @@ -41,7 +41,7 @@ It's often useful to run graphs on some schedule. LangGraph Cloud supports cron Note that this sends the same input to the thread every time. See the [how-to guide](../how-tos/cloud_examples/cron_jobs.ipynb) for creating cron jobs. -The LangGraph Cloud API provides several endpoints for creating and managing cron jobs. See the API reference for more details. +The LangGraph Cloud API provides several endpoints for creating and managing cron jobs. See the [API reference](../reference/api/api_ref.html#tag/runscreate/POST/threads/{thread_id}/runs/crons) for more details. ## Features @@ -59,7 +59,7 @@ Streaming is critical for making LLM applications feel responsive to end users. You can also specify multiple streaming modes at the same time. See the [how-to guide](../how-tos/stream_multiple.md) for configuring multiple streaming modes at the same time. -See the API reference for how to create streaming runs. +See the [API reference](../reference/api/api_ref.html#tag/runscreate/POST/threads/{thread_id}/runs/stream) for how to create streaming runs. ### Human-in-the-Loop From 8daeb561946bbe2d1e507db451aefe2097f346e3 Mon Sep 17 00:00:00 2001 From: Hassan Memon Date: Wed, 14 Aug 2024 19:08:26 +0500 Subject: [PATCH 04/35] Fix typo in documentation: corrected 'they agent's' to 'their agent's' (#1338) --- examples/introduction.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/introduction.ipynb b/examples/introduction.ipynb index d0f269946..24726a792 100644 --- a/examples/introduction.ipynb +++ b/examples/introduction.ipynb @@ -1563,7 +1563,7 @@ "source": [ "## Part 5: Manually Updating the State\n", "\n", - "In the previous section, we showed how to interrupt a graph so that a human could inspect its actions. This lets the human `read` the state, but if they want to change they agent's course, they'll need to have `write` access.\n", + "In the previous section, we showed how to interrupt a graph so that a human could inspect its actions. This lets the human `read` the state, but if they want to change their agent's course, they'll need to have `write` access.\n", "\n", "Thankfully, LangGraph lets you **manually update state**! Updating the state lets you control the agent's trajectory by modifying its actions (even modifying the past!). This capability is particularly useful when you want to correct the agent's mistakes, explore alternative paths, or guide the agent towards a specific goal.\n", "\n", From d1450a463eb1d01c9831e13148ea7727bbfd88d6 Mon Sep 17 00:00:00 2001 From: Hassan Memon Date: Wed, 14 Aug 2024 19:12:37 +0500 Subject: [PATCH 05/35] Improved description for chatbot node function (#1339) Updated the documentation to describe the chatbot node function's return value in a more Pythonic and enthusiastic way. The description now emphasizes that the function returns a dictionary with the updated messages list neatly tucked under the messages key. --- examples/introduction.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/introduction.ipynb b/examples/introduction.ipynb index 24726a792..f59622789 100644 --- a/examples/introduction.ipynb +++ b/examples/introduction.ipynb @@ -174,7 +174,7 @@ "id": "b6c1dcd9-fb86-4649-81b4-ff6ce20a2e46", "metadata": {}, "source": [ - "**Notice** how the `chatbot` node function takes the current `State` as input and returns an updated `messages` list. This is the basic pattern for all LangGraph node functions.\n", + "**Notice** how the `chatbot` node function takes the current `State` as input and returns a dictionary containing an updated `messages` list under the key \"messages\". This is the basic pattern for all LangGraph node functions.\n", "\n", "The `add_messages` function in our `State` will append the llm's response messages to whatever messages are already in the state.\n", "\n", From c04133b1df0c7a12edc45580beff439cbd897827 Mon Sep 17 00:00:00 2001 From: Isaac Francisco <78627776+isahers1@users.noreply.github.com> Date: Wed, 14 Aug 2024 08:03:15 -0700 Subject: [PATCH 06/35] [docs]: cloud hil review tool calls (#1334) * hil review tool calls * interrupt note --- .../human_in_the_loop_review_tool_calls.md | 575 ++++++++++++++++++ docs/mkdocs.yml | 1 + 2 files changed, 576 insertions(+) create mode 100644 docs/docs/cloud/how-tos/human_in_the_loop_review_tool_calls.md diff --git a/docs/docs/cloud/how-tos/human_in_the_loop_review_tool_calls.md b/docs/docs/cloud/how-tos/human_in_the_loop_review_tool_calls.md new file mode 100644 index 000000000..66b3315b6 --- /dev/null +++ b/docs/docs/cloud/how-tos/human_in_the_loop_review_tool_calls.md @@ -0,0 +1,575 @@ +# Review Tool Calls + +Human-in-the-loop (HIL) interactions are crucial for [agentic systems](https://langchain-ai.github.io/langgraph/concepts/agentic_concepts/#human-in-the-loop). A common pattern is to add some human in the loop step after certain tool calls. These tool calls often lead to either a function call or saving of some information. Examples include: + +- A tool call to execute SQL, which will then be run by the tool +- A tool call to generate a summary, which will then be saved to the State of the graph + +Note that using tool calls is common **whether actually calling tools or not**. + +There are typically a few different interactions you may want to do here: + +1. Approve the tool call and continue +2. Modify the tool call manually and then continue +3. Give natural language feedback, and then pass that back to the agent instead of continuing + +We can implement this in LangGraph using a [breakpoint](https://langchain-ai.github.io/langgraph/how-tos/human_in_the_loop/breakpoints/): breakpoints allow us to interrupt graph execution before a specific step. At this breakpoint, we can manually update the graph state taking one of the three options above + +## Setup + +We are not going to show the full code for the graph we are hosting, but you can see it [here](../../how-tos/human_in_the_loop/review-tool-calls.ipynb#simple-usage) if you want to. Once this graph is hosted, we are ready to invoke it and wait for user input. + +### SDK initialization + +First, we need to setup our client so that we can communicate with our hosted graph: + + +=== "Python" + + ```python + from langgraph_sdk import get_client + client = get_client(url="whatever-your-deployment-url-is") + assistant_id = "agent" + thread = await client.threads.create() + ``` + +=== "Javascript" + + ```js + import { Client } from "@langchain/langgraph-sdk"; + + const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const assistantId = "agent"; + const thread = await client.threads.create(); + ``` + +## Example with no review + +Let's look at an example when no review is required (because no tools are called) + +=== "Python" + + ```python + input = { 'messages':[{ "role":"user", "content":"hi!" }] } + + async for chunk in client.runs.stream( + thread["thread_id"], + assistant_id, + input=input, + stream_mode="updates", + interrupt_before=["action"], + ): + if chunk.data and chunk.event != "metadata": + print(chunk.data) + ``` + +=== "Javascript" + + ```js + const input = {"messages": [{ "role": "human", "content": "hi!"}] } + + const streamResponse = client.runs.stream( + thread["thread_id"], + assistantId, + { + input: input, + streamMode: "updates", + interruptBefore: ["action"], + } + ); + for await (const chunk of streamResponse) { + if (chunk.data && chunk.event !== "metadata") { + console.log(chunk.data); + } + } + ``` + +Output: + + {'messages': [{'content': 'hi!', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '39c51f14-2d5c-4690-883a-d940854b1845', 'example': False}]} + {'messages': [{'content': 'hi!', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '39c51f14-2d5c-4690-883a-d940854b1845', 'example': False}, {'content': [{'text': "Hello! Welcome. How can I assist you today? Is there anything specific you'd like to know or any information you're looking for?", 'type': 'text', 'index': 0}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'end_turn', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-d65e07fb-43ff-4d98-ab6b-6316191b9c8b', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 355, 'output_tokens': 31, 'total_tokens': 386}}]} + + +If we check the state, we can see that it is finished + +=== "Python" + + ```python + state = await client.threads.get_state(thread["thread_id"]) + + print(state['next']) + ``` + +=== "Javascript" + + ```js + const state = await client.threads.getState(thread["thread_id"]); + + console.log(state.next); + ``` + +Output: + + [] + +## Example of approving tool + +Let's now look at what it looks like to approve a tool call. Note that we don't need to pass an interrupt to our streaming calls because the graph (defined [here](../../how-tos/human_in_the_loop/review-tool-calls.ipynb#simple-usage)) was already compiled with an interrupt before the `human_review_node`. + +=== "Python" + + ```python + input = {"messages": [{"role": "user", "content": "what's the weather in sf?"}]} + + async for chunk in client.runs.stream( + thread["thread_id"], + "agent", + input=input, + stream_mode="values", + ): + if chunk.data and chunk.event != "metadata": + print(chunk.data) + ``` + +=== "Javascript" + + ```js + const input = {"messages": [{"role": "user", "content": "what's the weather in sf?"}]} + + const streamResponse = client.runs.stream( + thread["thread_id"], + assistantId, + { + input: input, + streamMode: "values", + } + ); + for await (const chunk of streamResponse) { + if (chunk.data && chunk.event !== "metadata") { + console.log(chunk.data); + } + } + ``` + +Output: + + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '54e19d6e-89fa-44fb-b92c-12e7dd4ddf08', 'example': False}]} + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '54e19d6e-89fa-44fb-b92c-12e7dd4ddf08', 'example': False}, {'content': [{'text': "Certainly! I can help you check the weather in San Francisco. To get this information, I'll use the weather search function. Let me do that for you right away.", 'type': 'text', 'index': 0}, {'id': 'toolu_015yrR3GMDXe6X8m2p9CsEDN', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-45a6b6c3-ac69-42a4-8957-d982203d6392', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco'}, 'id': 'toolu_015yrR3GMDXe6X8m2p9CsEDN', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 360, 'output_tokens': 90, 'total_tokens': 450}}]} + + +If we now check, we can see that it is waiting on human review: + +=== "Python" + + ```python + state = await client.threads.get_state(thread["thread_id"]) + + print(state['next']) + ``` + +=== "Javascript" + + ```js + const state = await client.threads.getState(thread["thread_id"]); + + console.log(state.next); + ``` + +Output: + + ['human_review_node'] + +To approve the tool call, we can just continue the thread with no edits. To do this, we just create a new run with no inputs. + +=== "Python" + + ```python + async for chunk in client.runs.stream( + thread["thread_id"], + "agent", + input=None, + stream_mode="values", + ): + if chunk.data and chunk.event != "metadata": + print(chunk.data) + ``` + +=== "Javascript" + + ```js + const streamResponse = client.runs.stream( + thread["thread_id"], + assistantId, + { + input: undefined, + streamMode: "values", + } + ); + for await (const chunk of streamResponse) { + if (chunk.data && chunk.event !== "metadata") { + console.log(chunk.data); + } + } + ``` + +Output: + + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '54e19d6e-89fa-44fb-b92c-12e7dd4ddf08', 'example': False}, {'content': [{'text': "Certainly! I can help you check the weather in San Francisco. To get this information, I'll use the weather search function. Let me do that for you right away.", 'type': 'text', 'index': 0}, {'id': 'toolu_015yrR3GMDXe6X8m2p9CsEDN', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-45a6b6c3-ac69-42a4-8957-d982203d6392', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco'}, 'id': 'toolu_015yrR3GMDXe6X8m2p9CsEDN', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 360, 'output_tokens': 90, 'total_tokens': 450}}, {'content': 'Sunny!', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'weather_search', 'id': '826cd0f2-9cc6-46f0-b7df-daa6a05d13d2', 'tool_call_id': 'toolu_015yrR3GMDXe6X8m2p9CsEDN', 'artifact': None, 'status': 'success'}]} + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '54e19d6e-89fa-44fb-b92c-12e7dd4ddf08', 'example': False}, {'content': [{'text': "Certainly! I can help you check the weather in San Francisco. To get this information, I'll use the weather search function. Let me do that for you right away.", 'type': 'text', 'index': 0}, {'id': 'toolu_015yrR3GMDXe6X8m2p9CsEDN', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-45a6b6c3-ac69-42a4-8957-d982203d6392', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco'}, 'id': 'toolu_015yrR3GMDXe6X8m2p9CsEDN', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 360, 'output_tokens': 90, 'total_tokens': 450}}, {'content': 'Sunny!', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'weather_search', 'id': '826cd0f2-9cc6-46f0-b7df-daa6a05d13d2', 'tool_call_id': 'toolu_015yrR3GMDXe6X8m2p9CsEDN', 'artifact': None, 'status': 'success'}, {'content': [{'text': "\n\nGreat news! The weather in San Francisco is sunny today. It's a beautiful day in the city by the bay. Is there anything else you'd like to know about the weather or any other information I can help you with?", 'type': 'text', 'index': 0}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'end_turn', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-5d5fd0f1-a939-447e-801a-9aaa812322d3', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 464, 'output_tokens': 50, 'total_tokens': 514}}]} + +## Edit Tool Call + +Let's now say we want to edit the tool call. E.g. change some of the parameters (or even the tool called!) but then execute that tool. + +=== "Python" + + ```python + input = {"messages": [{"role": "user", "content": "what's the weather in sf?"}]} + + async for chunk in client.runs.stream( + thread["thread_id"], + "agent", + input=input, + stream_mode="values", + ): + if chunk.data and chunk.event != "metadata": + print(chunk.data) + ``` + +=== "Javascript" + + ```js + const input = {"messages": [{"role": "user", "content": "what's the weather in sf?"}]} + + const streamResponse = client.runs.stream( + thread["thread_id"], + assistantId, + { + input: input, + streamMode: "values", + } + ); + for await (const chunk of streamResponse) { + if (chunk.data && chunk.event !== "metadata") { + console.log(chunk.data); + } + } + ``` + +Output: + + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': 'cec11391-84da-464b-bd2a-bd4f0d93b9ee', 'example': False}]} + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': 'cec11391-84da-464b-bd2a-bd4f0d93b9ee', 'example': False}, {'content': [{'text': 'To get the weather information for San Francisco, I can use the weather_search function. Let me do that for you.', 'type': 'text', 'index': 0}, {'id': 'toolu_01SunSpDurNfcnXppWLPrtjC', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-6326da9f-6061-4e12-8586-482e32ab4cab', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco'}, 'id': 'toolu_01SunSpDurNfcnXppWLPrtjC', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 360, 'output_tokens': 80, 'total_tokens': 440}}]} + + +To do this, we first need to update the state. We can do this by passing a message in with the **same** id of the message we want to overwrite. This will have the effect of **replacing** that old message. Note that this is only possible because of the **reducer** we are using that replaces messages with the same ID - read more about that [here](https://langchain-ai.github.io/langgraph/concepts/low_level/#working-with-messages-in-graph-state). + + +=== "Python" + + ```python + # To get the ID of the message we want to replace, we need to fetch the current state and find it there. + state = await client.threads.get_state(thread['thread_id']) + print("Current State:") + print(state['values']) + print("\nCurrent Tool Call ID:") + current_content = state['values']['messages'][-1]['content'] + current_id = state['values']['messages'][-1]['id'] + tool_call_id = state['values']['messages'][-1]['tool_calls'][0]['id'] + print(tool_call_id) + + # We now need to construct a replacement tool call. + # We will change the argument to be `San Francisco, USA` + # Note that we could change any number of arguments or tool names - it just has to be a valid one + new_message = { + "role": "assistant", + "content": current_content, + "tool_calls": [ + { + "id": tool_call_id, + "name": "weather_search", + "args": {"city": "San Francisco, USA"} + } + ], + # This is important - this needs to be the same as the message you replacing! + # Otherwise, it will show up as a separate message + "id": current_id + } + await client.threads.update_state( + # This is the config which represents this thread + thread['thread_id'], + # This is the updated value we want to push + {"messages": [new_message]}, + # We push this update acting as our human_review_node + as_node="human_review_node" + ) + + print("\nResuming Execution") + # Let's now continue executing from here + async for chunk in client.runs.stream( + thread["thread_id"], + "agent", + input=None, + stream_mode="values", + ): + if chunk.data and chunk.event != "metadata": + print(chunk.data) + ``` + +=== "Javascript" + + ```js + const state = await client.threads.getState(thread.thread_id); + console.log("Current State:"); + console.log(state.values); + + console.log("\nCurrent Tool Call ID:"); + const lastMessage = state.values.messages[state.values.messages.length - 1]; + const currentContent = lastMessage.content; + const currentId = lastMessage.id; + const toolCallId = lastMessage.tool_calls[0].id; + console.log(toolCallId); + + // Construct a replacement tool call + const newMessage = { + role: "assistant", + content: currentContent, + tool_calls: [ + { + id: toolCallId, + name: "weather_search", + args: { city: "San Francisco, USA" } + } + ], + // Ensure the ID is the same as the message you're replacing + id: currentId + }; + + await client.threads.updateState( + thread.thread_id, // Thread ID + { + values: { "messages": [newMessage] }, // Updated message + asNode: "human_review_node" + } // Acting as human_review_node + ); + + console.log("\nResuming Execution"); + // Continue executing from here + const streamResponseResumed = client.runs.stream( + thread["thread_id"], + assistantId, + { + input: undefined, + streamMode: "values", + interruptBefore: ["action"], + } + ); + for await (const chunk of streamResponseResumed) { + if (chunk.data && chunk.event !== "metadata") { + console.log(chunk.data); + } + } + ``` + +Output: + + Current State: + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '8713d1fa-9b26-4eab-b768-dafdaac70590', 'example': False}, {'content': [{'text': 'To get the weather information for San Francisco, I can use the weather_search function. Let me do that for you.', 'type': 'text', 'index': 0}, {'id': 'toolu_01VzagzsUGZsNMwW1wHkcw7h', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-ede13f26-daf5-4d8f-817a-7611075bbcf1', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco'}, 'id': 'toolu_01VzagzsUGZsNMwW1wHkcw7h', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 360, 'output_tokens': 80, 'total_tokens': 440}}]} + + Current Tool Call ID: + toolu_01VzagzsUGZsNMwW1wHkcw7h + + Resuming Execution + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '8713d1fa-9b26-4eab-b768-dafdaac70590', 'example': False}, {'content': [{'text': 'To get the weather information for San Francisco, I can use the weather_search function. Let me do that for you.', 'type': 'text', 'index': 0}, {'id': 'toolu_01VzagzsUGZsNMwW1wHkcw7h', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco"}'}], 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'ai', 'name': None, 'id': 'run-ede13f26-daf5-4d8f-817a-7611075bbcf1', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco, USA'}, 'id': 'toolu_01VzagzsUGZsNMwW1wHkcw7h', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': None}, {'content': 'Sunny!', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'weather_search', 'id': '7fc7d463-66bf-4555-9929-6af483de169b', 'tool_call_id': 'toolu_01VzagzsUGZsNMwW1wHkcw7h', 'artifact': None, 'status': 'success'}]} + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '8713d1fa-9b26-4eab-b768-dafdaac70590', 'example': False}, {'content': [{'text': 'To get the weather information for San Francisco, I can use the weather_search function. Let me do that for you.', 'type': 'text', 'index': 0}, {'id': 'toolu_01VzagzsUGZsNMwW1wHkcw7h', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco"}'}], 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'ai', 'name': None, 'id': 'run-ede13f26-daf5-4d8f-817a-7611075bbcf1', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco, USA'}, 'id': 'toolu_01VzagzsUGZsNMwW1wHkcw7h', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': None}, {'content': 'Sunny!', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'weather_search', 'id': '7fc7d463-66bf-4555-9929-6af483de169b', 'tool_call_id': 'toolu_01VzagzsUGZsNMwW1wHkcw7h', 'artifact': None, 'status': 'success'}, {'content': [{'text': "\n\nBased on the search result, the weather in San Francisco is sunny! It's a beautiful day in the city by the bay. Is there anything else you'd like to know about the weather or any other information I can help you with?", 'type': 'text', 'index': 0}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'end_turn', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-d90ce97a-39f9-4330-985e-67c5f351a0c5', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 455, 'output_tokens': 52, 'total_tokens': 507}}]} + +## Give feedback to a tool call + +Sometimes, you may not want to execute a tool call, but you also may not want to ask the user to manually modify the tool call. In that case it may be better to get natural language feedback from the user. You can then insert these feedback as a mock **RESULT** of the tool call. + +There are multiple ways to do this: + +You could add a new message to the state (representing the "result" of a tool call) +You could add TWO new messages to the state - one representing an "error" from the tool call, other HumanMessage representing the feedback +Both are similar in that they involve adding messages to the state. The main difference lies in the logic AFTER the `human_node` and how it handles different types of messages. + +For this example we will just add a single tool call representing the feedback. Let's see this in action! + +=== "Python" + + ```python + input = {"messages": [{"role": "user", "content": "what's the weather in sf?"}]} + + async for chunk in client.runs.stream( + thread["thread_id"], + "agent", + input=input, + stream_mode="values", + ): + if chunk.data and chunk.event != "metadata": + print(chunk.data) + ``` + +=== "Javascript" + + ```js + const input = {"messages": [{"role": "user", "content": "what's the weather in sf?"}]} + + const streamResponse = client.runs.stream( + thread["thread_id"], + assistantId, + { + input: input, + streamMode: "values", + } + ); + for await (const chunk of streamResponse) { + if (chunk.data && chunk.event !== "metadata") { + console.log(chunk.data); + } + } + ``` + +Output: + + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': 'c80f13d0-674d-4233-b6a0-3940509d3cf3', 'example': False}]} + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': 'c80f13d0-674d-4233-b6a0-3940509d3cf3', 'example': False}, {'content': [{'text': 'To get the weather information for San Francisco, I can use the weather_search function. Let me do that for you.', 'type': 'text', 'index': 0}, {'id': 'toolu_016XyTdFA8NuPWeLyZPSzoM3', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-4911ac27-3d7c-4edf-a3ca-c2908e3922eb', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco'}, 'id': 'toolu_016XyTdFA8NuPWeLyZPSzoM3', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 360, 'output_tokens': 80, 'total_tokens': 440}}]} + +To do this, we first need to update the state. We can do this by passing a message in with the same **tool call id** of the tool call we want to respond to. Note that this is a **different*** ID from above + +=== "Python" + + ```python + # To get the ID of the message we want to replace, we need to fetch the current state and find it there. + state = await client.threads.get_state(thread['thread_id']) + print("Current State:") + print(state['values']) + print("\nCurrent Tool Call ID:") + tool_call_id = state['values']['messages'][-1]['tool_calls'][0]['id'] + print(tool_call_id) + + # We now need to construct a replacement tool call. + # We will change the argument to be `San Francisco, USA` + # Note that we could change any number of arguments or tool names - it just has to be a valid one + new_message = { + "role": "tool", + # This is our natural language feedback + "content": "User requested changes: pass in the country as well", + "name": "weather_search", + "tool_call_id": tool_call_id + } + await client.threads.update_state( + # This is the config which represents this thread + thread['thread_id'], + # This is the updated value we want to push + {"messages": [new_message]}, + # We push this update acting as our human_review_node + as_node="human_review_node" + ) + + print("\nResuming execution") + # Let's now continue executing from here + async for chunk in client.runs.stream( + thread["thread_id"], + "agent", + input=None, + stream_mode="values", + ): + if chunk.data and chunk.event != "metadata": + print(chunk.data) + ``` + +=== "Javascript" + + ```js + const state = await client.threads.getState(thread.thread_id); + console.log("Current State:"); + console.log(state.values); + + console.log("\nCurrent Tool Call ID:"); + const lastMessage = state.values.messages[state.values.messages.length - 1]; + const toolCallId = lastMessage.tool_calls[0].id; + console.log(toolCallId); + + // Construct a replacement tool call + const newMessage = { + role: "tool", + content: "User requested changes: pass in the country as well", + name: "weather_search", + tool_call_id: toolCallId, + }; + + await client.threads.updateState( + thread.thread_id, // Thread ID + { + values: { "messages": [newMessage] }, // Updated message + asNode: "human_review_node" + } // Acting as human_review_node + ); + + console.log("\nResuming Execution"); + // Continue executing from here + const streamResponseEdited = client.runs.stream( + thread["thread_id"], + assistantId, + { + input: undefined, + streamMode: "values", + interruptBefore: ["action"], + } + ); + for await (const chunk of streamResponseEdited) { + if (chunk.data && chunk.event !== "metadata") { + console.log(chunk.data); + } + } + ``` + +Output: + + Current State: + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '3b2bbc38-d11b-49eb-80c0-c24a40dab5a8', 'example': False}, {'content': [{'text': 'To get the weather information for San Francisco, I can use the weather_search function. Let me do that for you.', 'type': 'text', 'index': 0}, {'id': 'toolu_01NNw18j57GEGPZvsa9f1wvX', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-c5a50900-abf5-4885-9cdb-da2bf0d892ac', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco'}, 'id': 'toolu_01NNw18j57GEGPZvsa9f1wvX', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 360, 'output_tokens': 80, 'total_tokens': 440}}]} + + Current Tool Call ID: + toolu_01NNw18j57GEGPZvsa9f1wvX + + Resuming execution + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '3b2bbc38-d11b-49eb-80c0-c24a40dab5a8', 'example': False}, {'content': [{'text': 'To get the weather information for San Francisco, I can use the weather_search function. Let me do that for you.', 'type': 'text', 'index': 0}, {'id': 'toolu_01NNw18j57GEGPZvsa9f1wvX', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-c5a50900-abf5-4885-9cdb-da2bf0d892ac', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco'}, 'id': 'toolu_01NNw18j57GEGPZvsa9f1wvX', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 360, 'output_tokens': 80, 'total_tokens': 440}}, {'content': 'User requested changes: pass in the country as well', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'weather_search', 'id': '787288be-213c-4fd3-8503-4a009bdb1b00', 'tool_call_id': 'toolu_01NNw18j57GEGPZvsa9f1wvX', 'artifact': None, 'status': 'success'}, {'content': [{'text': '\n\nI apologize for the oversight. It seems the function requires additional information. Let me try again with a more specific request.', 'type': 'text', 'index': 0}, {'id': 'toolu_01YAbLBoKozJyRQnB8LUMpXC', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco, USA"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-5c355a56-cfe3-4046-b49f-f5b09fc397ef', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco, USA'}, 'id': 'toolu_01YAbLBoKozJyRQnB8LUMpXC', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 461, 'output_tokens': 83, 'total_tokens': 544}}]} + +We can see that we now get to another breakpoint - because it went back to the model and got an entirely new prediction of what to call. Let's now approve this one and continue + +=== "Python" + + ```python + async for chunk in client.runs.stream( + thread["thread_id"], + "agent", + input=None, + stream_mode="values", + ): + if chunk.data and chunk.event != "metadata": + print(chunk.data) + ``` + +=== "Javascript" + + ```js + const streamResponseResumed = client.runs.stream( + thread["thread_id"], + assistantId, + { + input: undefined, + streamMode: "values", + } + ); + for await (const chunk of streamResponseResumed) { + if (chunk.data && chunk.event !== "metadata") { + console.log(chunk.data); + } + } + ``` + +Output: + + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '3b2bbc38-d11b-49eb-80c0-c24a40dab5a8', 'example': False}, {'content': [{'text': 'To get the weather information for San Francisco, I can use the weather_search function. Let me do that for you.', 'type': 'text', 'index': 0}, {'id': 'toolu_01NNw18j57GEGPZvsa9f1wvX', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-c5a50900-abf5-4885-9cdb-da2bf0d892ac', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco'}, 'id': 'toolu_01NNw18j57GEGPZvsa9f1wvX', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 360, 'output_tokens': 80, 'total_tokens': 440}}, {'content': 'User requested changes: pass in the country as well', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'weather_search', 'id': '787288be-213c-4fd3-8503-4a009bdb1b00', 'tool_call_id': 'toolu_01NNw18j57GEGPZvsa9f1wvX', 'artifact': None, 'status': 'success'}, {'content': [{'text': '\n\nI apologize for the oversight. It seems the function requires additional information. Let me try again with a more specific request.', 'type': 'text', 'index': 0}, {'id': 'toolu_01YAbLBoKozJyRQnB8LUMpXC', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco, USA"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-5c355a56-cfe3-4046-b49f-f5b09fc397ef', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco, USA'}, 'id': 'toolu_01YAbLBoKozJyRQnB8LUMpXC', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 461, 'output_tokens': 83, 'total_tokens': 544}}, {'content': 'Sunny!', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'weather_search', 'id': '3b857482-bca2-4a73-a9ab-1f35a3e43e5f', 'tool_call_id': 'toolu_01YAbLBoKozJyRQnB8LUMpXC', 'artifact': None, 'status': 'success'}]} + {'messages': [{'content': "what's the weather in sf?", 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'human', 'name': None, 'id': '3b2bbc38-d11b-49eb-80c0-c24a40dab5a8', 'example': False}, {'content': [{'text': 'To get the weather information for San Francisco, I can use the weather_search function. Let me do that for you.', 'type': 'text', 'index': 0}, {'id': 'toolu_01NNw18j57GEGPZvsa9f1wvX', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-c5a50900-abf5-4885-9cdb-da2bf0d892ac', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco'}, 'id': 'toolu_01NNw18j57GEGPZvsa9f1wvX', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 360, 'output_tokens': 80, 'total_tokens': 440}}, {'content': 'User requested changes: pass in the country as well', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'weather_search', 'id': '787288be-213c-4fd3-8503-4a009bdb1b00', 'tool_call_id': 'toolu_01NNw18j57GEGPZvsa9f1wvX', 'artifact': None, 'status': 'success'}, {'content': [{'text': '\n\nI apologize for the oversight. It seems the function requires additional information. Let me try again with a more specific request.', 'type': 'text', 'index': 0}, {'id': 'toolu_01YAbLBoKozJyRQnB8LUMpXC', 'input': {}, 'name': 'weather_search', 'type': 'tool_use', 'index': 1, 'partial_json': '{"city": "San Francisco, USA"}'}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'tool_use', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-5c355a56-cfe3-4046-b49f-f5b09fc397ef', 'example': False, 'tool_calls': [{'name': 'weather_search', 'args': {'city': 'San Francisco, USA'}, 'id': 'toolu_01YAbLBoKozJyRQnB8LUMpXC', 'type': 'tool_call'}], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 461, 'output_tokens': 83, 'total_tokens': 544}}, {'content': 'Sunny!', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'weather_search', 'id': '3b857482-bca2-4a73-a9ab-1f35a3e43e5f', 'tool_call_id': 'toolu_01YAbLBoKozJyRQnB8LUMpXC', 'artifact': None, 'status': 'success'}, {'content': [{'text': "\n\nGreat news! The weather in San Francisco is sunny today. Is there anything else you'd like to know about the weather or any other information I can help you with?", 'type': 'text', 'index': 0}], 'additional_kwargs': {}, 'response_metadata': {'stop_reason': 'end_turn', 'stop_sequence': None}, 'type': 'ai', 'name': None, 'id': 'run-6a857bb1-f65b-4b86-93d6-c025e003c777', 'example': False, 'tool_calls': [], 'invalid_tool_calls': [], 'usage_metadata': {'input_tokens': 557, 'output_tokens': 38, 'total_tokens': 595}}]} diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index dfe321c89..e3159e32b 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -216,6 +216,7 @@ nav: - Wait for User Input: "cloud/how-tos/human_in_the_loop_user_input.md" - Edit Graph State: "cloud/how-tos/human_in_the_loop_edit_state.md" - Replay and Branch from Prior States: "cloud/how-tos/human_in_the_loop_time_travel.md" + - Review Tool Calls: "cloud/how-tos/human_in_the_loop_review_tool_calls.md" - LangGraph Studio: - Test Cloud Deployment: "cloud/how-tos/test_deployment.md" - Test Local Deployment: "cloud/how-tos/test_local_deployment.md" From 41a6eb7cf4e09cd303ac0a9b181cefe5eb44062f Mon Sep 17 00:00:00 2001 From: Isaac Francisco <78627776+isahers1@users.noreply.github.com> Date: Wed, 14 Aug 2024 09:31:24 -0700 Subject: [PATCH 07/35] [docs]: add CURL commands to some how-tos (#1325) --- docs/docs/cloud/how-tos/enqueue_concurrent.md | 4 +- .../how-tos/human_in_the_loop_breakpoint.md | 51 +++++- .../how-tos/human_in_the_loop_edit_state.md | 101 +++++++++++- .../human_in_the_loop_review_tool_calls.md | 4 +- .../how-tos/human_in_the_loop_time_travel.md | 151 +++++++++++++++++- .../how-tos/human_in_the_loop_user_input.md | 113 ++++++++++++- .../cloud/how-tos/interrupt_concurrent.md | 4 +- docs/docs/cloud/how-tos/reject_concurrent.md | 4 +- .../docs/cloud/how-tos/rollback_concurrent.md | 4 +- docs/docs/cloud/how-tos/stream_debug.md | 4 +- docs/docs/cloud/how-tos/stream_events.md | 146 +++++++++++++++-- docs/docs/cloud/how-tos/stream_messages.md | 101 +++++++++++- docs/docs/cloud/how-tos/stream_multiple.md | 55 ++++++- docs/docs/cloud/how-tos/stream_updates.md | 53 +++++- docs/docs/cloud/how-tos/stream_values.md | 83 +++++++++- 15 files changed, 819 insertions(+), 59 deletions(-) diff --git a/docs/docs/cloud/how-tos/enqueue_concurrent.md b/docs/docs/cloud/how-tos/enqueue_concurrent.md index 1e4a2e087..391550ee1 100644 --- a/docs/docs/cloud/how-tos/enqueue_concurrent.md +++ b/docs/docs/cloud/how-tos/enqueue_concurrent.md @@ -31,7 +31,7 @@ Then, let's import our required packages and instantiate our client, assistant, from langchain_core.messages import convert_to_messages from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") assistant_id = "agent" thread = await client.threads.create() ``` @@ -42,7 +42,7 @@ Then, let's import our required packages and instantiate our client, assistant, import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); const assistantId = "agent"; const thread = await client.threads.create(); ``` diff --git a/docs/docs/cloud/how-tos/human_in_the_loop_breakpoint.md b/docs/docs/cloud/how-tos/human_in_the_loop_breakpoint.md index 908d9fa9e..180547b54 100644 --- a/docs/docs/cloud/how-tos/human_in_the_loop_breakpoint.md +++ b/docs/docs/cloud/how-tos/human_in_the_loop_breakpoint.md @@ -21,7 +21,7 @@ In this how-to we use a simple ReAct style hosted graph (you can see the full co ```python from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") assistant_id = "agent" thread = await client.threads.create() ``` @@ -31,11 +31,22 @@ In this how-to we use a simple ReAct style hosted graph (you can see the full co ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); const assistantId = "agent" const thread = await client.threads.create(); ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{ + "metadata": {} + }' + ``` + ## Adding a breakpoint We now want to add a breakpoint in our graph run, which we will do before a tool is called. @@ -82,6 +93,42 @@ And, now let's compile it with a breakpoint before the tool node: console.log("\n\n"); } ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"what's the weather in sf\"}]}, + \"interrupt_before\": [\"action\"], + \"stream_mode\": [ + \"messages\" + ] + }" | \ + sed 's/\r$//' | \ + awk ' + /^event:/ { + if (data_content != "") { + print data_content "\n" + } + sub(/^event: /, "Receiving event of type: ", $0) + printf "%s...\n", $0 + data_content = "" + } + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "") { + print data_content "\n" + } + } + ' + ``` Output: diff --git a/docs/docs/cloud/how-tos/human_in_the_loop_edit_state.md b/docs/docs/cloud/how-tos/human_in_the_loop_edit_state.md index fef0e3c6e..e9871c2ff 100644 --- a/docs/docs/cloud/how-tos/human_in_the_loop_edit_state.md +++ b/docs/docs/cloud/how-tos/human_in_the_loop_edit_state.md @@ -17,7 +17,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```python from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") assistant_id = "agent" thread = await client.threads.create() ``` @@ -27,11 +27,22 @@ First, we need to setup our client so that we can communicate with our hosted gr ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); const assistantId = "agent"; const thread = await client.threads.create(); ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{ + "metadata": {} + }' + ``` + ## Editing state ### Initial invocation @@ -75,6 +86,42 @@ Now let's invoke our graph, making sure to interrupt before the `action` node. } ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"search for weather in SF\"}]}, + \"interrupt_before\": [\"action\"], + \"stream_mode\": [ + \"updates\" + ] + }" | \ + sed 's/\r$//' | \ + awk ' + /^event:/ { + if (data_content != "" && event_type != "metadata") { + print data_content "\n" + } + sub(/^event: /, "", $0) + event_type = $0 + data_content = "" + } + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "" && event_type != "metadata") { + print data_content "\n" + } + } + ' + ``` + Output: {'agent': {'messages': [{'content': [{'text': "Certainly! I'll search for the current weather in San Francisco for you using the search function. Here's how I'll do that:", 'type': 'text'}, {'id': 'toolu_01KEJMBFozSiZoS4mAcPZeqQ', 'input': {'query': 'current weather in San Francisco'}, 'name': 'search', 'type': 'tool_use'}], 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'ai', 'name': None, 'id': 'run-6dbb0167-f8f6-4e2a-ab68-229b2d1fbb64', 'example': False, 'tool_calls': [{'name': 'search', 'args': {'query': 'current weather in San Francisco'}, 'id': 'toolu_01KEJMBFozSiZoS4mAcPZeqQ'}], 'invalid_tool_calls': [], 'usage_metadata': None}]}} @@ -129,10 +176,22 @@ Now, let's assume we actually meant to search for the weather in Sidi Frej (anot await client.threads.updateState(thread['thread_id'], {values:{"messages": lastMessage}}); ``` +=== "CURL" + + ```bash + curl --request GET --url /threads//state | \ + jq '.values.messages[-1] | (.tool_calls[0].args = {"query": "current weather in Sidi Frej"})' | \ + curl --request POST \ + --url /threads//state \ + --header 'Content-Type: application/json' \ + --data @- + ``` + Output: - {'configurable': {'thread_id': '88d58d3f-4151-47a9-a8e0-e42fdd3527b8', - 'thread_ts': '1ef3274b-a809-6913-8002-91536ce6554d'}} + {'configurable': {'thread_id': '9c8f1a43-9dd8-4017-9271-2c53e57cf66a', + 'checkpoint_ns': '', + 'checkpoint_id': '1ef58e7e-3641-649f-8002-8b4305a64858'}} @@ -171,6 +230,40 @@ Now we can resume our graph run but with the updated state: } ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"stream_mode\": [ + \"updates\" + ] + }"| \ + sed 's/\r$//' | \ + awk ' + /^event:/ { + if (data_content != "" && event_type != "metadata") { + print data_content "\n" + } + sub(/^event: /, "", $0) + event_type = $0 + data_content = "" + } + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "" && event_type != "metadata") { + print data_content "\n" + } + } + ' + ``` + Output: {'action': {'messages': [{'content': '["I looked up: current weather in Sidi Frej. Result: It\'s sunny in San Francisco, but you better look out if you\'re a Gemini 😈."]', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'search', 'id': '1161b8d1-bee4-4188-9be8-698aecb69f10', 'tool_call_id': 'toolu_01KEJMBFozSiZoS4mAcPZeqQ'}]}} diff --git a/docs/docs/cloud/how-tos/human_in_the_loop_review_tool_calls.md b/docs/docs/cloud/how-tos/human_in_the_loop_review_tool_calls.md index 66b3315b6..c730e9e01 100644 --- a/docs/docs/cloud/how-tos/human_in_the_loop_review_tool_calls.md +++ b/docs/docs/cloud/how-tos/human_in_the_loop_review_tool_calls.md @@ -28,7 +28,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```python from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") assistant_id = "agent" thread = await client.threads.create() ``` @@ -38,7 +38,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); const assistantId = "agent"; const thread = await client.threads.create(); ``` diff --git a/docs/docs/cloud/how-tos/human_in_the_loop_time_travel.md b/docs/docs/cloud/how-tos/human_in_the_loop_time_travel.md index 0c6df0910..36c8fe941 100644 --- a/docs/docs/cloud/how-tos/human_in_the_loop_time_travel.md +++ b/docs/docs/cloud/how-tos/human_in_the_loop_time_travel.md @@ -14,7 +14,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```python from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") assistant_id = "agent" thread = await client.threads.create() ``` @@ -24,11 +24,22 @@ First, we need to setup our client so that we can communicate with our hosted gr ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); const assistantId = agent; const thread = await client.threads.create(); ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{ + "metadata": {} + }' + ``` + ## Replay a state ### Initial invocation @@ -69,6 +80,41 @@ Before replaying a state - we need to create states to replay from! In order to } } ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"Please search the weather in SF\"}]}, + \"stream_mode\": [ + \"updates\" + ] + }" | \ + sed 's/\r$//' | \ + awk ' + /^event:/ { + if (data_content != "" && event_type != "metadata") { + print data_content "\n" + } + sub(/^event: /, "", $0) + event_type = $0 + data_content = "" + } + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "" && event_type != "metadata") { + print data_content "\n" + } + } + ' + ``` Output: @@ -100,6 +146,12 @@ Now let's get our list of states, and invoke from the third state (right before console.log(stateToReplay['next']); ``` +=== "CURL" + + ```bash + curl --request GET --url /threads//history | jq -r '.[2].next' + ``` + Output: ['action'] @@ -116,7 +168,7 @@ To rerun from a state, we need to pass in the `checkpoint_id` into the config of assistant_id, # graph_id input=None, stream_mode="updates", - config={"configurable": {"thread_ts": state_to_replay['checkpoint_id']}} + config={"configurable": {"checkpoint_id": state_to_replay['checkpoint_id']}} ): if chunk.data and chunk.event != "metadata": print(chunk.data) @@ -131,7 +183,7 @@ To rerun from a state, we need to pass in the `checkpoint_id` into the config of { input: null, streamMode: "updates", - config: {"configurable": {"thread_ts": stateToReplay['checkpoint_id']}}, + config: {"configurable": {"checkpoint_id": stateToReplay['checkpoint_id']}}, } ); for await (const chunk of streamResponse) { @@ -141,6 +193,43 @@ To rerun from a state, we need to pass in the `checkpoint_id` into the config of } ``` +=== "CURL" + + ```bash + curl --request GET --url /threads//history | jq -r '.[2].checkpoint_id' | { + read checkpoint_id + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"config\": {\"configurable\": {\"checkpoint_id\": \"$checkpoint_id\"}}, + \"stream_mode\": [ + \"updates\" + ] + }" | \ + sed 's/\r$//' | \ + awk ' + /^event:/ { + if (data_content != "" && event_type != "metadata") { + print data_content "\n" + } + sub(/^event: /, "", $0) + event_type = $0 + data_content = "" + } + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "" && event_type != "metadata") { + print data_content "\n" + } + } + ' + ``` + Output: {'action': {'messages': [{'content': '["I looked up: current weather in San Francisco. Result: It\'s sunny in San Francisco, but you better look out if you\'re a Gemini 😈."]', 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'tool', 'name': 'search', 'id': 'eba650e5-400e-4938-8508-f878dcbcc532', 'tool_call_id': 'toolu_011vroKUtWU7SBdrngpgpFMn'}]}} @@ -181,6 +270,23 @@ Let's show how to do this to edit the state at a particular point in time. Let's const newState = await client.threads.updateState(thread['thread_id'],{values:{"messages":[lastMessage]},checkpointId:stateToReplay['checkpoint_id']}); ``` +=== "CURL" + + ```bash + curl -s --request GET --url /threads//history | \ + jq -c ' + .[2] as $state_to_replay | + .[2].values.messages[-1].tool_calls[0].args.query = "current weather in SF" | + { + values: { messages: .[2].values.messages[-1] }, + checkpoint_id: $state_to_replay.checkpoint_id + }' | \ + curl --request POST \ + --url /threads//state \ + --header 'Content-Type: application/json' \ + --data @- + ``` + Now we can rerun our graph with this new config, starting from the `new_state`, which is a branch of our `state_to_replay`: === "Python" @@ -191,7 +297,7 @@ Now we can rerun our graph with this new config, starting from the `new_state`, assistant["assistant_id"], # graph_id input=None, stream_mode="updates", - config={"configurable": {"thread_ts": new_state['configurable']['thread_ts']}} + config={"configurable": {"checkpoint_id": new_state['configurable']['checkpoint_id']}} ): if chunk.data and chunk.event != "metadata": print(chunk.data) @@ -206,7 +312,7 @@ Now we can rerun our graph with this new config, starting from the `new_state`, { input: null, streamMode: "updates", - config: {"configurable": {"thread_ts": newState['configurable']['thread_ts']}}, + config: {"configurable": {"checkpoint_id": newState['configurable']['checkpoint_id']}}, } ); for await (const chunk of streamResponse) { @@ -216,6 +322,39 @@ Now we can rerun our graph with this new config, starting from the `new_state`, } ``` +=== "CURL" + + ```bash + curl -s --request GET --url /threads//state | \ + jq -r '.config.configurable.checkpoint_id' | \ + sh -c ' + CHECKPOINT_ID="$1" + curl --request POST \ + --url /threads//runs/stream \ + --header "Content-Type: application/json" \ + --data "{\"assistant_id\": \"agent\", \"config\": {\"configurable\": {\"checkpoint_id\": \"$CHECKPOINT_ID\"}}, \"stream_mode\": [\"updates\"]}" | \ + sed "s/\r$//" | \ + awk " + /^event:/ { + if (data_content != \"\" && event_type != \"metadata\") { + print data_content \"\n\" + } + sub(/^event: /, \"\", \$0) + event_type = \$0 + data_content = \"\" + } + /^data:/ { + sub(/^data: /, \"\", \$0) + data_content = \$0 + } + END { + if (data_content != \"\" && event_type != \"metadata\") { + print data_content \"\n\" + } + }" + ' _ + ``` + Output: diff --git a/docs/docs/cloud/how-tos/human_in_the_loop_user_input.md b/docs/docs/cloud/how-tos/human_in_the_loop_user_input.md index 1f29897ef..068a0bb00 100644 --- a/docs/docs/cloud/how-tos/human_in_the_loop_user_input.md +++ b/docs/docs/cloud/how-tos/human_in_the_loop_user_input.md @@ -24,7 +24,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```python from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") assistant_id = "agent" thread = await client.threads.create() ``` @@ -34,11 +34,22 @@ First, we need to setup our client so that we can communicate with our hosted gr ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); const assistantId = "agent"; const thread = await client.threads.create(); ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{ + "metadata": {} + }' + ``` + ## Waiting for user input ### Initial invocation @@ -80,6 +91,42 @@ Now, let's invoke our graph by interrupting before `ask_human` node: } } ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"Use the search tool to ask the user where they are, then look up the weather there\"}]}, + \"interrupt_before\": [\"ask_human\"], + \"stream_mode\": [ + \"updates\" + ] + }" | \ + sed 's/\r$//' | \ + awk ' + /^event:/ { + if (data_content != "" && event_type != "metadata") { + print data_content "\n" + } + sub(/^event: /, "", $0) + event_type = $0 + data_content = "" + } + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "" && event_type != "metadata") { + print data_content "\n" + } + } + ' + ``` Output: @@ -117,11 +164,31 @@ Because we are treating this as a tool call, we will need to update the state as await client.threads.updateState(thread['thread_id'], {values: {"messages": toolMessage}, asNode:"ask_human"}) ``` +=== "CURL" + + ```bash + curl --request GET \ + --url /threads//state \ + | jq -r '.values.messages[-1].tool_calls[0].id' \ + | sh -c ' + TOOL_CALL_ID="$1" + + # Construct the JSON payload + JSON_PAYLOAD=$(printf "{\"messages\": [{\"tool_call_id\": \"%s\", \"type\": \"tool\", \"content\": \"san francisco\"}], \"as_node\": \"ask_human\"}" "$TOOL_CALL_ID") + + # Send the updated state + curl --request POST \ + --url /threads//state \ + --header "Content-Type: application/json" \ + --data "${JSON_PAYLOAD}" + ' _ + ``` + Output: - {'configurable': {'thread_id': '10d0ee61-db47-48fc-a58c-109a1e68cd73', - 'thread_ts': '1ef32729-3cc3-6647-8002-14dcb621b46e'}} - + {'configurable': {'thread_id': 'a9f322ae-4ed1-41ec-942b-38cb3d342c3a', + 'checkpoint_ns': '', + 'checkpoint_id': '1ef58e97-a623-63dd-8002-39a9a9b20be3'}} ### Invoking after receiving human input @@ -133,7 +200,7 @@ We can now tell the agent to continue. We can just pass in None as the input to ```python async for chunk in client.runs.stream( thread["thread_id"], - assistant_id, # graph_id + assistant_id, input=None, stream_mode="updates", ): @@ -158,6 +225,40 @@ We can now tell the agent to continue. We can just pass in None as the input to } ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"stream_mode\": [ + \"updates\" + ] + }"| \ + sed 's/\r$//' | \ + awk ' + /^event:/ { + if (data_content != "" && event_type != "metadata") { + print data_content "\n" + } + sub(/^event: /, "", $0) + event_type = $0 + data_content = "" + } + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "" && event_type != "metadata") { + print data_content "\n" + } + } + ' + ``` + Output: {'agent': {'messages': [{'content': [{'text': "Thank you for letting me know that you're in San Francisco. Now, I'll use the search function to look up the weather in San Francisco.", 'type': 'text'}, {'id': 'toolu_01K57ofmgG2wyJ8tYJjbq5k7', 'input': {'query': 'current weather in San Francisco'}, 'name': 'search', 'type': 'tool_use'}], 'additional_kwargs': {}, 'response_metadata': {}, 'type': 'ai', 'name': None, 'id': 'run-241baed7-db5e-44ce-ac3c-56431705c22b', 'example': False, 'tool_calls': [{'name': 'search', 'args': {'query': 'current weather in San Francisco'}, 'id': 'toolu_01K57ofmgG2wyJ8tYJjbq5k7'}], 'invalid_tool_calls': [], 'usage_metadata': None}]}} diff --git a/docs/docs/cloud/how-tos/interrupt_concurrent.md b/docs/docs/cloud/how-tos/interrupt_concurrent.md index c34ae64c6..7c2792b45 100644 --- a/docs/docs/cloud/how-tos/interrupt_concurrent.md +++ b/docs/docs/cloud/how-tos/interrupt_concurrent.md @@ -29,7 +29,7 @@ Now, let's import our required packages and instantiate our client, assistant, a from langchain_core.messages import convert_to_messages from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") assistant_id = "agent" thread = await client.threads.create() ``` @@ -39,7 +39,7 @@ Now, let's import our required packages and instantiate our client, assistant, a ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); const assistantId = "agent"; const thread = await client.threads.create(); ``` diff --git a/docs/docs/cloud/how-tos/reject_concurrent.md b/docs/docs/cloud/how-tos/reject_concurrent.md index 5d92e8466..1f69541fe 100644 --- a/docs/docs/cloud/how-tos/reject_concurrent.md +++ b/docs/docs/cloud/how-tos/reject_concurrent.md @@ -28,7 +28,7 @@ Now, let's import our required packages and instantiate our client, assistant, a from langchain_core.messages import convert_to_messages from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") assistant_id = "agent" thread = await client.threads.create() ``` @@ -38,7 +38,7 @@ Now, let's import our required packages and instantiate our client, assistant, a ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); const assistantId = "agent"; const thread = await client.threads.create(); ``` diff --git a/docs/docs/cloud/how-tos/rollback_concurrent.md b/docs/docs/cloud/how-tos/rollback_concurrent.md index f8c64add4..0e8f39aad 100644 --- a/docs/docs/cloud/how-tos/rollback_concurrent.md +++ b/docs/docs/cloud/how-tos/rollback_concurrent.md @@ -30,7 +30,7 @@ Now, let's import our required packages and instantiate our client, assistant, a from langchain_core.messages import convert_to_messages from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") assistant_id = "agent" thread = await client.threads.create() ``` @@ -40,7 +40,7 @@ Now, let's import our required packages and instantiate our client, assistant, a ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); const assistantId = "agent"; const thread = await client.threads.create(); ``` diff --git a/docs/docs/cloud/how-tos/stream_debug.md b/docs/docs/cloud/how-tos/stream_debug.md index 815cdef82..78c2e34b9 100644 --- a/docs/docs/cloud/how-tos/stream_debug.md +++ b/docs/docs/cloud/how-tos/stream_debug.md @@ -9,7 +9,7 @@ First let's set up our client and thread: ```python from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") # create thread thread = await client.threads.create() print(thread) @@ -20,7 +20,7 @@ First let's set up our client and thread: ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); // create thread const thread = await client.threads.create(); console.log(thread) diff --git a/docs/docs/cloud/how-tos/stream_events.md b/docs/docs/cloud/how-tos/stream_events.md index bbd61b050..fc02e3fff 100644 --- a/docs/docs/cloud/how-tos/stream_events.md +++ b/docs/docs/cloud/how-tos/stream_events.md @@ -6,7 +6,7 @@ This guide covers how to stream events from your graph (`stream_mode="events"`). ```python from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") # create thread thread = await client.threads.create() print(thread) @@ -17,12 +17,22 @@ This guide covers how to stream events from your graph (`stream_mode="events"`). ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); // create thread const thread = await client.threads.create(); console.log(thread) ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{ + "metadata": {} + }' + ``` Output: @@ -30,7 +40,9 @@ Output: {'thread_id': '3f4c64e0-f792-4a5e-aa07-a4404e06e0bd', 'created_at': '2024-06-24T22:16:29.301522+00:00', 'updated_at': '2024-06-24T22:16:29.301522+00:00', - 'metadata': {}} + 'metadata': {}, + 'status': 'idle', + 'config': {}} @@ -91,6 +103,41 @@ Streaming events produces responses containing an `event` key (in addition to ot } ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"What's the weather in sf\"}]}, + \"stream_mode\": [ + \"events\" + ] + }" | \ + sed 's/\r$//' | \ + awk ' + /^event:/ { + if (data_content != "") { + print data_content "\n" + } + sub(/^event: /, "Receiving event of type: ", $0) + printf "%s...\n", $0 + data_content = "" + } + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "") { + print data_content "\n" + } + } + ' + ``` + Output: Receiving new event of type: metadata... @@ -258,9 +305,11 @@ Token-by-token streaming can be implemented with the `events` streaming mode. Th ): if ( chunk.event == "events" and - chunk.data["event"] == "on_chat_model_stream" + chunk.data["event"] == "on_chat_model_stream" and + len(chunk.data["data"]["chunk"]["content"]) > 0 and + 'text' in chunk.data["data"]["chunk"]["content"][0] ): - llm_response += chunk.data["data"]["chunk"]["content"] + llm_response += chunk.data["data"]["chunk"]["content"][0]['text'] print(llm_response) ``` @@ -278,21 +327,88 @@ Token-by-token streaming can be implemented with the `events` streaming mode. Th } ); for await (const chunk of streamResponse) { - if (chunk.event === "events" && chunk.data.event === "on_chat_model_stream") { - llmResponse += chunk.data.data.chunk.content; + if (chunk.event === "events" && chunk.data.event === "on_chat_model_stream" && chunk.data.chunk.content.length > 0 && 'text' in chunk.data.chunk.content[0]) { + llmResponse += chunk.data.data.chunk.content[0].text; console.log(llmResponse); } } ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"What's the weather in sf\"}]}, + \"stream_mode\": [ + \"events\" + ] + }" | sed 's/\r$//' | awk ' + /^event:/ { event = $2 } + /^data:/ { + json_data = substr($0, index($0, $2)) + + if (event == "events") { + print json_data + } + }' | jq -r ' + select(.event == "on_chat_model_stream") | + .data.chunk.content[] | .text // empty + ' | awk ' + BEGIN { llm_response="" } + $0 != "" && $0 != "null" { + llm_response = llm_response $0 + print llm_response + }' + ``` + Output: - b - be - beg - begi - begin - begine - beginen - beginend + The + The search + The search results provide + The search results provide the current weather conditions + The search results provide the current weather conditions in San Francisco. + The search results provide the current weather conditions in San Francisco. According + The search results provide the current weather conditions in San Francisco. According to the data, + The search results provide the current weather conditions in San Francisco. According to the data, as + The search results provide the current weather conditions in San Francisco. According to the data, as of 3 + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60 + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60. + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F ( + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16° + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The win + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is bl + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west- + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13 + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 k + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). The humidity is + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). The humidity is 70% + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). The humidity is 70% and visibility + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). The humidity is 70% and visibility is 6 + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). The humidity is 70% and visibility is 6 miles + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). The humidity is 70% and visibility is 6 miles (10 km + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). The humidity is 70% and visibility is 6 miles (10 km). + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). The humidity is 70% and visibility is 6 miles (10 km). Overall + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). The humidity is 70% and visibility is 6 miles (10 km). Overall, it appears + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). The humidity is 70% and visibility is 6 miles (10 km). Overall, it appears to be a nice + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). The humidity is 70% and visibility is 6 miles (10 km). Overall, it appears to be a nice sunny day in San + The search results provide the current weather conditions in San Francisco. According to the data, as of 3:19 PM on August 12, 2024, the weather in San Francisco is sunny with a temperature of 60.8°F (16°C). The wind is blowing from the west-southwest at 13.4 mph (21.6 kph). The humidity is 70% and visibility is 6 miles (10 km). Overall, it appears to be a nice sunny day in San Francisco. + diff --git a/docs/docs/cloud/how-tos/stream_messages.md b/docs/docs/cloud/how-tos/stream_messages.md index 49cbf29b6..cdcf004e2 100644 --- a/docs/docs/cloud/how-tos/stream_messages.md +++ b/docs/docs/cloud/how-tos/stream_messages.md @@ -41,7 +41,7 @@ First let's set up our client and thread: ```python from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") # create thread thread = await client.threads.create() print(thread) @@ -52,20 +52,33 @@ First let's set up our client and thread: ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); // create thread const thread = await client.threads.create(); console.log(thread) ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{ + "metadata": {} + }' + ``` + Output: {'thread_id': 'e1431c95-e241-4d1d-a252-27eceb1e5c86', 'created_at': '2024-06-21T15:48:59.808924+00:00', 'updated_at': '2024-06-21T15:48:59.808924+00:00', - 'metadata': {}} + 'metadata': {}, + 'status': 'idle', + 'config': {}} -Let's also define a helper function for better formatting of the tool calls in messages +Let's also define a helper function for better formatting of the tool calls in messages (for CURL we will define a helper script called `process_stream.sh`) === "Python" @@ -95,6 +108,69 @@ Let's also define a helper function for better formatting of the tool calls in m } ``` +=== "CURL" + + ```bash + # process_stream.sh + + format_tool_calls() { + echo "$1" | jq -r 'map("Tool Call ID: \(.id), Function: \(.name), Arguments: \(.args)") | join("\n")' + } + + process_data_item() { + local data_item="$1" + + if echo "$data_item" | jq -e '.role == "user"' > /dev/null; then + echo "Human: $(echo "$data_item" | jq -r '.content')" + else + local tool_calls=$(echo "$data_item" | jq -r '.tool_calls // []') + local invalid_tool_calls=$(echo "$data_item" | jq -r '.invalid_tool_calls // []') + local content=$(echo "$data_item" | jq -r '.content // ""') + local response_metadata=$(echo "$data_item" | jq -r '.response_metadata // {}') + + if [ -n "$content" ] && [ "$content" != "null" ]; then + echo "AI: $content" + fi + + if [ "$tool_calls" != "[]" ]; then + echo "Tool Calls:" + format_tool_calls "$tool_calls" + fi + + if [ "$invalid_tool_calls" != "[]" ]; then + echo "Invalid Tool Calls:" + format_tool_calls "$invalid_tool_calls" + fi + + if [ "$response_metadata" != "{}" ]; then + local finish_reason=$(echo "$response_metadata" | jq -r '.finish_reason // "N/A"') + echo "Response Metadata: Finish Reason - $finish_reason" + fi + fi + } + + while IFS=': ' read -r key value; do + case "$key" in + event) + event="$value" + ;; + data) + if [ "$event" = "metadata" ]; then + run_id=$(echo "$value" | jq -r '.run_id') + echo "Metadata: Run ID - $run_id" + echo "------------------------------------------------" + elif [ "$event" = "messages/partial" ]; then + echo "$value" | jq -c '.[]' | while read -r data_item; do + process_data_item "$data_item" + done + echo "------------------------------------------------" + fi + ;; + esac + done + ``` + + Now we can stream by messages, which will return complete messages (at the end of node execution) as well as tokens for any messages generated inside a node: === "Python" @@ -201,6 +277,23 @@ Now we can stream by messages, which will return complete messages (at the end o } ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"config\":{\"configurable\":{\"model_name\":\"openai\"}}, + \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"What's the weather in sf\"}]}, + \"stream_mode\": [ + \"messages\" + ] + }" | sed 's/\r$//' | ./process_stream.sh + ``` + + Output: Metadata: Run ID - 1ef2fe5c-6a1d-6575-bc09-d7832711c17e diff --git a/docs/docs/cloud/how-tos/stream_multiple.md b/docs/docs/cloud/how-tos/stream_multiple.md index 0e7a0c143..d2d349099 100644 --- a/docs/docs/cloud/how-tos/stream_multiple.md +++ b/docs/docs/cloud/how-tos/stream_multiple.md @@ -9,7 +9,7 @@ First let's set up our client and thread: ```python from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") # create thread thread = await client.threads.create() print(thread) @@ -20,19 +20,31 @@ First let's set up our client and thread: ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); // create thread const thread = await client.threads.create(); console.log(thread) ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{ + "metadata": {} + }' + ``` Output: {'thread_id': 'bfc68029-1f7b-400f-beab-6f9032a52da4', 'created_at': '2024-06-24T21:30:07.980789+00:00', 'updated_at': '2024-06-24T21:30:07.980789+00:00', - 'metadata': {}} + 'metadata': {}, + 'status': 'idle', + 'config': {}} When configuring multiple streaming modes for a run, responses for each respective mode will be produced. In the following example, note that a `list` of modes (`messages`, `events`, `debug`) is passed to the `stream_mode` parameter and the response contains `events`, `debug`, `messages/complete`, `messages/metadata`, and `messages/partial` event types. @@ -90,6 +102,43 @@ When configuring multiple streaming modes for a run, responses for each respecti } ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"What's the weather in SF?\"}]}, + \"stream_mode\": [ + \"messages\", + \"events\", + \"debug\" + ] + }" | \ + sed 's/\r$//' | \ + awk ' + /^event:/ { + if (data_content != "") { + print data_content "\n" + } + sub(/^event: /, "Receiving event of type: ", $0) + printf "%s...\n", $0 + data_content = "" + } + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "") { + print data_content "\n" + } + } + ' + ``` + Output: Receiving new event of type: metadata... diff --git a/docs/docs/cloud/how-tos/stream_updates.md b/docs/docs/cloud/how-tos/stream_updates.md index bd7123786..7b3d4730c 100644 --- a/docs/docs/cloud/how-tos/stream_updates.md +++ b/docs/docs/cloud/how-tos/stream_updates.md @@ -16,7 +16,7 @@ First let's set up our client and thread: ```python from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") # create thread thread = await client.threads.create() print(thread) @@ -27,19 +27,31 @@ First let's set up our client and thread: ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl:"" }); // create thread const thread = await client.threads.create(); console.log(thread) ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{ + "metadata": {} + }' + ``` Output: {'thread_id': '979e3c89-a702-4882-87c2-7a59a250ce16', 'created_at': '2024-06-21T15:22:07.453100+00:00', 'updated_at': '2024-06-21T15:22:07.453100+00:00', - 'metadata': {}} + 'metadata': {}, + 'status': 'idle', + 'config': {}} Now we can stream by updates, which outputs updates made to the state by each node after it has executed: @@ -93,6 +105,41 @@ Now we can stream by updates, which outputs updates made to the state by each no } ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"What's the weather in la\"}]}, + \"stream_mode\": [ + \"updates\" + ] + }" | \ + sed 's/\r$//' | \ + awk ' + /^event:/ { + if (data_content != "") { + print data_content "\n" + } + sub(/^event: /, "Receiving event of type: ", $0) + printf "%s...\n", $0 + data_content = "" + } + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "") { + print data_content "\n" + } + } + ' + ``` + Output: Receiving new event of type: metadata... diff --git a/docs/docs/cloud/how-tos/stream_values.md b/docs/docs/cloud/how-tos/stream_values.md index e2a739473..34282bd71 100644 --- a/docs/docs/cloud/how-tos/stream_values.md +++ b/docs/docs/cloud/how-tos/stream_values.md @@ -16,7 +16,7 @@ First let's set up our client and thread: ```python from langgraph_sdk import get_client - client = get_client(url="whatever-your-deployment-url-is") + client = get_client(url="") # create thread thread = await client.threads.create() print(thread) @@ -27,18 +27,31 @@ First let's set up our client and thread: ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl: "whatever-your-deployment-url-is" }); + const client = new Client({ apiUrl: "" }); // create thread const thread = await client.threads.create(); console.log(thread) ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{ + "metadata": {} + }' + ``` + Output: {'thread_id': 'bfc68029-1f7b-400f-beab-6f9032a52da4', 'created_at': '2024-06-24T21:30:07.980789+00:00', 'updated_at': '2024-06-24T21:30:07.980789+00:00', - 'metadata': {}} + 'metadata': {}, + 'status': 'idle', + 'config': {}} Now we can stream by values, which streams the full state of the graph after each node has finished executing: @@ -60,7 +73,6 @@ Now we can stream by values, which streams the full state of the graph after eac ``` === "Javascript" - ```js const input = {"messages": [{"role": "human", "content": "what's the weather in la"}]} @@ -80,6 +92,41 @@ Now we can stream by values, which streams the full state of the graph after eac } ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"what's the weather in la\"}]}, + \"stream_mode\": [ + \"values\" + ] + }" | \ + sed 's/\r$//' | \ + awk ' + /^event:/ { + if (data_content != "") { + print data_content "\n" + } + sub(/^event: /, "Receiving event of type: ", $0) + printf "%s...\n", $0 + data_content = "" + } + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "") { + print data_content "\n" + } + } + ' + ``` + Output: @@ -149,6 +196,34 @@ If we want to just get the final result, we can use this endpoint and just keep } ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"what's the weather in la\"}]}, + \"stream_mode\": [ + \"values\" + ] + }" | \ + sed 's/\r$//' | \ + awk ' + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "") { + print data_content + } + } + ' + ``` + + Output: {'messages': [{'content': 'what's the weather in la', From a3dd43b39bda9b78067d491c44159eb944faf0ab Mon Sep 17 00:00:00 2001 From: Isaac Francisco <78627776+isahers1@users.noreply.github.com> Date: Wed, 14 Aug 2024 09:32:49 -0700 Subject: [PATCH 08/35] x (#1343) --- docs/docs/cloud/how-tos/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs/cloud/how-tos/index.md b/docs/docs/cloud/how-tos/index.md index ba3d16e01..80b6ccaa5 100644 --- a/docs/docs/cloud/how-tos/index.md +++ b/docs/docs/cloud/how-tos/index.md @@ -46,6 +46,7 @@ When creating complex graphs, leaving every decision up to the LLM can be danger - [How to wait for user input](./human_in_the_loop_user_input.md) - [How to edit graph state](./human_in_the_loop_edit_state.md) - [How to replay and branch from prior states](./human_in_the_loop_time_travel.md) +- [How to review tool calls](./human_in_the_loop_review_tool_calls.md) ## LangGraph Studio From 728b2830639802e54018b5a8479725ae96981047 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Wed, 14 Aug 2024 10:59:14 -0700 Subject: [PATCH 09/35] checkpoint: Ignore serialized values when constructor no longer available --- .../langgraph/checkpoint/serde/jsonplus.py | 27 ++++++++++--------- libs/checkpoint/tests/test_jsonplus.py | 18 +++++++++++++ 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/libs/checkpoint/langgraph/checkpoint/serde/jsonplus.py b/libs/checkpoint/langgraph/checkpoint/serde/jsonplus.py index adbe98d33..52e9d6da3 100644 --- a/libs/checkpoint/langgraph/checkpoint/serde/jsonplus.py +++ b/libs/checkpoint/langgraph/checkpoint/serde/jsonplus.py @@ -121,18 +121,21 @@ class JsonPlusSerializer(SerializerProtocol): and value.get("type", None) == "constructor" and value.get("id", None) is not None ): - # Get module and class name - [*module, name] = value["id"] - # Import module - mod = importlib.import_module(".".join(module)) - # Import class - cls = getattr(mod, name) - # Instantiate class - if value["method"] is not None: - method = getattr(cls, value["method"]) - return method(*value["args"], **value["kwargs"]) - else: - return cls(*value["args"], **value["kwargs"]) + try: + # Get module and class name + [*module, name] = value["id"] + # Import module + mod = importlib.import_module(".".join(module)) + # Import class + cls = getattr(mod, name) + # Instantiate class + if value["method"] is not None: + method = getattr(cls, value["method"]) + return method(*value["args"], **value["kwargs"]) + else: + return cls(*value["args"], **value["kwargs"]) + except (ImportError, AttributeError): + return None return LC_REVIVER(value) diff --git a/libs/checkpoint/tests/test_jsonplus.py b/libs/checkpoint/tests/test_jsonplus.py index 2ca5a59c1..d5a53d248 100644 --- a/libs/checkpoint/tests/test_jsonplus.py +++ b/libs/checkpoint/tests/test_jsonplus.py @@ -149,3 +149,21 @@ def test_serde_jsonplus_bytearray() -> None: assert dumped == ("bytearray", some_bytearray) assert serde.loads_typed(dumped) == some_bytearray + + +def test_loads_cannot_find() -> None: + serde = JsonPlusSerializer() + + dumped = ( + "json", + b'{"lc": 2, "type": "constructor", "id": ["tests", "test_jsonplus", "MyPydanticccc"], "method": null, "args": [], "kwargs": {"foo": "foo", "bar": 1}}', + ) + + assert serde.loads_typed(dumped) is None, "Should return None if cannot find class" + + dumped = ( + "json", + b'{"lc": 2, "type": "constructor", "id": ["tests", "test_jsonpluss", "MyPydantic"], "method": null, "args": [], "kwargs": {"foo": "foo", "bar": 1}}', + ) + + assert serde.loads_typed(dumped) is None, "Should return None if cannot find module" From 34fd833b04aef69a1ec10c7cef8581f9be56e012 Mon Sep 17 00:00:00 2001 From: Isaac Francisco <78627776+isahers1@users.noreply.github.com> Date: Wed, 14 Aug 2024 11:16:38 -0700 Subject: [PATCH 10/35] [docs]: purge message graph (#1330) * purge message graph * docstrings * use with dicts --- .../agent-simulation-evaluation.ipynb | 170 +++++- .../information-gather-prompting.ipynb | 10 +- examples/llm-compiler/LLMCompiler.ipynb | 488 +++++++++++++++++- examples/reflection/reflection.ipynb | 148 +++++- examples/reflexion/reflexion.ipynb | 274 +++++++++- .../langgraph/langgraph/prebuilt/tool_node.py | 24 +- .../langgraph/prebuilt/tool_validator.py | 10 +- 7 files changed, 1050 insertions(+), 74 deletions(-) diff --git a/examples/chatbot-simulation-evaluation/agent-simulation-evaluation.ipynb b/examples/chatbot-simulation-evaluation/agent-simulation-evaluation.ipynb index 98c130a52..c41653c50 100644 --- a/examples/chatbot-simulation-evaluation/agent-simulation-evaluation.ipynb +++ b/examples/chatbot-simulation-evaluation/agent-simulation-evaluation.ipynb @@ -26,7 +26,10 @@ "id": "0d30b6f7-3bec-4d9f-af50-43dfdc81ae6c", "metadata": {}, "outputs": [], - "source": ["# %%capture --no-stderr\n# %pip install -U langgraph langchain langchain_openai"] + "source": [ + "# %%capture --no-stderr\n", + "# %pip install -U langgraph langchain langchain_openai" + ] }, { "cell_type": "code", @@ -34,7 +37,24 @@ "id": "30c2f3de-c730-4aec-85a6-af2c2f058803", "metadata": {}, "outputs": [], - "source": ["import getpass\nimport os\n\n\ndef _set_if_undefined(var: str):\n if not os.environ.get(var):\n os.environ[var] = getpass.getpass(f\"Please provide your {var}\")\n\n\n_set_if_undefined(\"OPENAI_API_KEY\")\n_set_if_undefined(\"LANGCHAIN_API_KEY\")\n\n# Optional, add tracing in LangSmith.\n# This will help you visualize and debug the control flow\nos.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\nos.environ[\"LANGCHAIN_PROJECT\"] = \"Agent Simulation Evaluation\""] + "source": [ + "import getpass\n", + "import os\n", + "\n", + "\n", + "def _set_if_undefined(var: str):\n", + " if not os.environ.get(var):\n", + " os.environ[var] = getpass.getpass(f\"Please provide your {var}\")\n", + "\n", + "\n", + "_set_if_undefined(\"OPENAI_API_KEY\")\n", + "_set_if_undefined(\"LANGCHAIN_API_KEY\")\n", + "\n", + "# Optional, add tracing in LangSmith.\n", + "# This will help you visualize and debug the control flow\n", + "os.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\n", + "os.environ[\"LANGCHAIN_PROJECT\"] = \"Agent Simulation Evaluation\"" + ] }, { "cell_type": "markdown", @@ -55,7 +75,24 @@ "id": "828479af-cf9c-4888-a365-599643a96b55", "metadata": {}, "outputs": [], - "source": ["from typing import List\n\nimport openai\n\n\n# This is flexible, but you can define your agent here, or call your agent API here.\ndef my_chat_bot(messages: List[dict]) -> dict:\n system_message = {\n \"role\": \"system\",\n \"content\": \"You are a customer support agent for an airline.\",\n }\n messages = [system_message] + messages\n completion = openai.chat.completions.create(\n messages=messages, model=\"gpt-3.5-turbo\"\n )\n return completion.choices[0].message.model_dump()"] + "source": [ + "from typing import List\n", + "\n", + "import openai\n", + "\n", + "\n", + "# This is flexible, but you can define your agent here, or call your agent API here.\n", + "def my_chat_bot(messages: List[dict]) -> dict:\n", + " system_message = {\n", + " \"role\": \"system\",\n", + " \"content\": \"You are a customer support agent for an airline.\",\n", + " }\n", + " messages = [system_message] + messages\n", + " completion = openai.chat.completions.create(\n", + " messages=messages, model=\"gpt-3.5-turbo\"\n", + " )\n", + " return completion.choices[0].message.model_dump()" + ] }, { "cell_type": "code", @@ -77,7 +114,9 @@ "output_type": "execute_result" } ], - "source": ["my_chat_bot([{\"role\": \"user\", \"content\": \"hi!\"}])"] + "source": [ + "my_chat_bot([{\"role\": \"user\", \"content\": \"hi!\"}])" + ] }, { "cell_type": "markdown", @@ -96,7 +135,33 @@ "id": "32c147df-7f90-4b0d-9a6b-671677020353", "metadata": {}, "outputs": [], - "source": ["from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\nfrom langchain_openai import ChatOpenAI\n\nsystem_prompt_template = \"\"\"You are a customer of an airline company. \\\nYou are interacting with a user who is a customer support person. \\\n\n{instructions}\n\nWhen you are finished with the conversation, respond with a single word 'FINISHED'\"\"\"\n\nprompt = ChatPromptTemplate.from_messages(\n [\n (\"system\", system_prompt_template),\n MessagesPlaceholder(variable_name=\"messages\"),\n ]\n)\ninstructions = \"\"\"Your name is Harrison. You are trying to get a refund for the trip you took to Alaska. \\\nYou want them to give you ALL the money back. \\\nThis trip happened 5 years ago.\"\"\"\n\nprompt = prompt.partial(name=\"Harrison\", instructions=instructions)\n\nmodel = ChatOpenAI()\n\nsimulated_user = prompt | model"] + "source": [ + "from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "system_prompt_template = \"\"\"You are a customer of an airline company. \\\n", + "You are interacting with a user who is a customer support person. \\\n", + "\n", + "{instructions}\n", + "\n", + "When you are finished with the conversation, respond with a single word 'FINISHED'\"\"\"\n", + "\n", + "prompt = ChatPromptTemplate.from_messages(\n", + " [\n", + " (\"system\", system_prompt_template),\n", + " MessagesPlaceholder(variable_name=\"messages\"),\n", + " ]\n", + ")\n", + "instructions = \"\"\"Your name is Harrison. You are trying to get a refund for the trip you took to Alaska. \\\n", + "You want them to give you ALL the money back. \\\n", + "This trip happened 5 years ago.\"\"\"\n", + "\n", + "prompt = prompt.partial(name=\"Harrison\", instructions=instructions)\n", + "\n", + "model = ChatOpenAI()\n", + "\n", + "simulated_user = prompt | model" + ] }, { "cell_type": "code", @@ -115,7 +180,12 @@ "output_type": "execute_result" } ], - "source": ["from langchain_core.messages import HumanMessage\n\nmessages = [HumanMessage(content=\"Hi! How can I help you?\")]\nsimulated_user.invoke({\"messages\": messages})"] + "source": [ + "from langchain_core.messages import HumanMessage\n", + "\n", + "messages = [HumanMessage(content=\"Hi! How can I help you?\")]\n", + "simulated_user.invoke({\"messages\": messages})" + ] }, { "cell_type": "markdown", @@ -153,7 +223,20 @@ "id": "69e2a3a3-40f3-4223-9136-113738440be9", "metadata": {}, "outputs": [], - "source": ["from langchain_community.adapters.openai import convert_message_to_dict\nfrom langchain_core.messages import AIMessage\n\n\ndef chat_bot_node(messages):\n # Convert from LangChain format to the OpenAI format, which our chatbot function expects.\n messages = [convert_message_to_dict(m) for m in messages]\n # Call the chat bot\n chat_bot_response = my_chat_bot(messages)\n # Respond with an AI Message\n return AIMessage(content=chat_bot_response[\"content\"])"] + "source": [ + "from langchain_community.adapters.openai import convert_message_to_dict\n", + "from langchain_core.messages import AIMessage\n", + "\n", + "\n", + "def chat_bot_node(state):\n", + " messages = state[\"messages\"]\n", + " # Convert from LangChain format to the OpenAI format, which our chatbot function expects.\n", + " messages = [convert_message_to_dict(m) for m in messages]\n", + " # Call the chat bot\n", + " chat_bot_response = my_chat_bot(messages)\n", + " # Respond with an AI Message\n", + " return {\"messages\":[AIMessage(content=chat_bot_response[\"content\"])]}" + ] }, { "cell_type": "markdown", @@ -169,7 +252,26 @@ "id": "7cad7527-ffa5-4c30-8585-b54a7a18bd98", "metadata": {}, "outputs": [], - "source": ["def _swap_roles(messages):\n new_messages = []\n for m in messages:\n if isinstance(m, AIMessage):\n new_messages.append(HumanMessage(content=m.content))\n else:\n new_messages.append(AIMessage(content=m.content))\n return new_messages\n\n\ndef simulated_user_node(messages):\n # Swap roles of messages\n new_messages = _swap_roles(messages)\n # Call the simulated user\n response = simulated_user.invoke({\"messages\": new_messages})\n # This response is an AI message - we need to flip this to be a human message\n return HumanMessage(content=response.content)"] + "source": [ + "def _swap_roles(messages):\n", + " new_messages = []\n", + " for m in messages:\n", + " if isinstance(m, AIMessage):\n", + " new_messages.append(HumanMessage(content=m.content))\n", + " else:\n", + " new_messages.append(AIMessage(content=m.content))\n", + " return new_messages\n", + "\n", + "\n", + "def simulated_user_node(state):\n", + " messages = state[\"messages\"]\n", + " # Swap roles of messages\n", + " new_messages = _swap_roles(messages)\n", + " # Call the simulated user\n", + " response = simulated_user.invoke({\"messages\": new_messages})\n", + " # This response is an AI message - we need to flip this to be a human message\n", + " return {\"messages\":[HumanMessage(content=response.content)]}" + ] }, { "cell_type": "markdown", @@ -192,7 +294,16 @@ "id": "28004fbf-a2f3-46b7-bde7-46c7adaf97fb", "metadata": {}, "outputs": [], - "source": ["def should_continue(messages):\n if len(messages) > 6:\n return \"end\"\n elif messages[-1].content == \"FINISHED\":\n return \"end\"\n else:\n return \"continue\""] + "source": [ + "def should_continue(state):\n", + " messages = state[\"messages\"]\n", + " if len(messages) > 6:\n", + " return \"end\"\n", + " elif messages[-1].content == \"FINISHED\":\n", + " return \"end\"\n", + " else:\n", + " return \"continue\"" + ] }, { "cell_type": "markdown", @@ -210,7 +321,36 @@ "id": "0b597e4b-4cbb-4bbc-82e5-f7e31275964c", "metadata": {}, "outputs": [], - "source": ["from langgraph.graph import END, MessageGraph, START\n\ngraph_builder = MessageGraph()\ngraph_builder.add_node(\"user\", simulated_user_node)\ngraph_builder.add_node(\"chat_bot\", chat_bot_node)\n# Every response from your chat bot will automatically go to the\n# simulated user\ngraph_builder.add_edge(\"chat_bot\", \"user\")\ngraph_builder.add_conditional_edges(\n \"user\",\n should_continue,\n # If the finish criteria are met, we will stop the simulation,\n # otherwise, the virtual user's message will be sent to your chat bot\n {\n \"end\": END,\n \"continue\": \"chat_bot\",\n },\n)\n# The input will first go to your chat bot\ngraph_builder.add_edge(START, \"chat_bot\")\nsimulation = graph_builder.compile()"] + "source": [ + "from langgraph.graph import END, StateGraph, START\n", + "from langgraph.graph.message import add_messages\n", + "from typing import Annotated\n", + "from typing_extensions import TypedDict\n", + "\n", + "\n", + "class State(TypedDict):\n", + " messages: Annotated[list, add_messages]\n", + "\n", + "graph_builder = StateGraph(State)\n", + "graph_builder.add_node(\"user\", simulated_user_node)\n", + "graph_builder.add_node(\"chat_bot\", chat_bot_node)\n", + "# Every response from your chat bot will automatically go to the\n", + "# simulated user\n", + "graph_builder.add_edge(\"chat_bot\", \"user\")\n", + "graph_builder.add_conditional_edges(\n", + " \"user\",\n", + " should_continue,\n", + " # If the finish criteria are met, we will stop the simulation,\n", + " # otherwise, the virtual user's message will be sent to your chat bot\n", + " {\n", + " \"end\": END,\n", + " \"continue\": \"chat_bot\",\n", + " },\n", + ")\n", + "# The input will first go to your chat bot\n", + "graph_builder.add_edge(START, \"chat_bot\")\n", + "simulation = graph_builder.compile()" + ] }, { "cell_type": "markdown", @@ -251,7 +391,13 @@ ] } ], - "source": ["for chunk in simulation.stream([]):\n # Print out all events aside from the final end chunk\n if END not in chunk:\n print(chunk)\n print(\"----\")"] + "source": [ + "for chunk in simulation.stream({}):\n", + " # Print out all events aside from the final end chunk\n", + " if END not in chunk:\n", + " print(chunk)\n", + " print(\"----\")" + ] }, { "cell_type": "code", @@ -259,7 +405,7 @@ "id": "dde4f2b5-cfe8-4ff0-99ea-fe2c5fed70c0", "metadata": {}, "outputs": [], - "source": [""] + "source": [] } ], "metadata": { diff --git a/examples/chatbots/information-gather-prompting.ipynb b/examples/chatbots/information-gather-prompting.ipynb index 079478dc7..bc1248cda 100644 --- a/examples/chatbots/information-gather-prompting.ipynb +++ b/examples/chatbots/information-gather-prompting.ipynb @@ -177,10 +177,16 @@ "outputs": [], "source": [ "from langgraph.checkpoint.memory import MemorySaver\n", - "from langgraph.graph import START, MessageGraph\n", + "from langgraph.graph import StateGraph, START\n", + "from langgraph.graph.message import add_messages\n", + "from typing import Annotated\n", + "from typing_extensions import TypedDict\n", + "\n", + "class State(TypedDict):\n", + " messages: Annotated[list, add_messages]\n", "\n", "memory = MemorySaver()\n", - "workflow = MessageGraph()\n", + "workflow = StateGraph(State)\n", "workflow.add_node(\"info\", chain)\n", "workflow.add_node(\"prompt\", prompt_gen_chain)\n", "\n", diff --git a/examples/llm-compiler/LLMCompiler.ipynb b/examples/llm-compiler/LLMCompiler.ipynb index 1b9387e15..bfe5736d8 100644 --- a/examples/llm-compiler/LLMCompiler.ipynb +++ b/examples/llm-compiler/LLMCompiler.ipynb @@ -32,7 +32,9 @@ "id": "16bd5497-35ad-44f2-94d9-19ff39a5ffed", "metadata": {}, "outputs": [], - "source": ["# %pip install -U --quiet langchain_openai langsmith langgraph langchain numexpr"] + "source": [ + "# %pip install -U --quiet langchain_openai langsmith langgraph langchain numexpr" + ] }, { "cell_type": "code", @@ -40,7 +42,22 @@ "id": "abbd6948-e9a3-47ca-89c7-7ac2fc5eca8b", "metadata": {}, "outputs": [], - "source": ["import getpass\nimport os\n\n\ndef _get_pass(var: str):\n if var not in os.environ:\n os.environ[var] = getpass.getpass(f\"{var}: \")\n\n\n# Optional: Debug + trace calls using LangSmith\nos.environ[\"LANGCHAIN_TRACING_V2\"] = \"True\"\nos.environ[\"LANGCHAIN_PROJECT\"] = \"LLMCompiler\"\n_get_pass(\"LANGCHAIN_API_KEY\")\n_get_pass(\"OPENAI_API_KEY\")"] + "source": [ + "import getpass\n", + "import os\n", + "\n", + "\n", + "def _get_pass(var: str):\n", + " if var not in os.environ:\n", + " os.environ[var] = getpass.getpass(f\"{var}: \")\n", + "\n", + "\n", + "# Optional: Debug + trace calls using LangSmith\n", + "os.environ[\"LANGCHAIN_TRACING_V2\"] = \"True\"\n", + "os.environ[\"LANGCHAIN_PROJECT\"] = \"LLMCompiler\"\n", + "_get_pass(\"LANGCHAIN_API_KEY\")\n", + "_get_pass(\"OPENAI_API_KEY\")" + ] }, { "cell_type": "markdown", @@ -60,7 +77,23 @@ "id": "e7476bb2-1a51-42f6-b7ae-82a0300bbf84", "metadata": {}, "outputs": [], - "source": ["from langchain_community.tools.tavily_search import TavilySearchResults\nfrom langchain_openai import ChatOpenAI\n\n# Imported from the https://github.com/langchain-ai/langgraph/tree/main/examples/plan-and-execute repo\nfrom math_tools import get_math_tool\n\n_get_pass(\"TAVILY_API_KEY\")\n\ncalculate = get_math_tool(ChatOpenAI(model=\"gpt-4-turbo-preview\"))\nsearch = TavilySearchResults(\n max_results=1,\n description='tavily_search_results_json(query=\"the search query\") - a search engine.',\n)\n\ntools = [search, calculate]"] + "source": [ + "from langchain_community.tools.tavily_search import TavilySearchResults\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "# Imported from the https://github.com/langchain-ai/langgraph/tree/main/examples/plan-and-execute repo\n", + "from math_tools import get_math_tool\n", + "\n", + "_get_pass(\"TAVILY_API_KEY\")\n", + "\n", + "calculate = get_math_tool(ChatOpenAI(model=\"gpt-4-turbo-preview\"))\n", + "search = TavilySearchResults(\n", + " max_results=1,\n", + " description='tavily_search_results_json(query=\"the search query\") - a search engine.',\n", + ")\n", + "\n", + "tools = [search, calculate]" + ] }, { "cell_type": "code", @@ -79,7 +112,14 @@ "output_type": "execute_result" } ], - "source": ["calculate.invoke(\n {\n \"problem\": \"What's the temp of sf + 5?\",\n \"context\": [\"Thet empreature of sf is 32 degrees\"],\n }\n)"] + "source": [ + "calculate.invoke(\n", + " {\n", + " \"problem\": \"What's the temp of sf + 5?\",\n", + " \"context\": [\"Thet empreature of sf is 32 degrees\"],\n", + " }\n", + ")" + ] }, { "cell_type": "markdown", @@ -148,7 +188,26 @@ ] } ], - "source": ["from typing import Sequence\n\nfrom langchain import hub\nfrom langchain_core.language_models import BaseChatModel\nfrom langchain_core.messages import (\n BaseMessage,\n FunctionMessage,\n HumanMessage,\n SystemMessage,\n)\nfrom langchain_core.prompts import ChatPromptTemplate\nfrom langchain_core.runnables import RunnableBranch\nfrom langchain_core.tools import BaseTool\nfrom langchain_openai import ChatOpenAI\nfrom output_parser import LLMCompilerPlanParser, Task\n\nprompt = hub.pull(\"wfh/llm-compiler\")\nprint(prompt.pretty_print())"] + "source": [ + "from typing import Sequence\n", + "\n", + "from langchain import hub\n", + "from langchain_core.language_models import BaseChatModel\n", + "from langchain_core.messages import (\n", + " BaseMessage,\n", + " FunctionMessage,\n", + " HumanMessage,\n", + " SystemMessage,\n", + ")\n", + "from langchain_core.prompts import ChatPromptTemplate\n", + "from langchain_core.runnables import RunnableBranch\n", + "from langchain_core.tools import BaseTool\n", + "from langchain_openai import ChatOpenAI\n", + "from output_parser import LLMCompilerPlanParser, Task\n", + "\n", + "prompt = hub.pull(\"wfh/llm-compiler\")\n", + "print(prompt.pretty_print())" + ] }, { "cell_type": "code", @@ -156,7 +215,58 @@ "id": "45689d40-d8df-4316-a121-6ea9c87d2efe", "metadata": {}, "outputs": [], - "source": ["def create_planner(\n llm: BaseChatModel, tools: Sequence[BaseTool], base_prompt: ChatPromptTemplate\n):\n tool_descriptions = \"\\n\".join(\n f\"{i+1}. {tool.description}\\n\"\n for i, tool in enumerate(\n tools\n ) # +1 to offset the 0 starting index, we want it count normally from 1.\n )\n planner_prompt = base_prompt.partial(\n replan=\"\",\n num_tools=len(tools)\n + 1, # Add one because we're adding the join() tool at the end.\n tool_descriptions=tool_descriptions,\n )\n replanner_prompt = base_prompt.partial(\n replan=' - You are given \"Previous Plan\" which is the plan that the previous agent created along with the execution results '\n \"(given as Observation) of each plan and a general thought (given as Thought) about the executed results.\"\n 'You MUST use these information to create the next plan under \"Current Plan\".\\n'\n ' - When starting the Current Plan, you should start with \"Thought\" that outlines the strategy for the next plan.\\n'\n \" - In the Current Plan, you should NEVER repeat the actions that are already executed in the Previous Plan.\\n\"\n \" - You must continue the task index from the end of the previous one. Do not repeat task indices.\",\n num_tools=len(tools) + 1,\n tool_descriptions=tool_descriptions,\n )\n\n def should_replan(state: list):\n # Context is passed as a system message\n return isinstance(state[-1], SystemMessage)\n\n def wrap_messages(state: list):\n return {\"messages\": state}\n\n def wrap_and_get_last_index(state: list):\n next_task = 0\n for message in state[::-1]:\n if isinstance(message, FunctionMessage):\n next_task = message.additional_kwargs[\"idx\"] + 1\n break\n state[-1].content = state[-1].content + f\" - Begin counting at : {next_task}\"\n return {\"messages\": state}\n\n return (\n RunnableBranch(\n (should_replan, wrap_and_get_last_index | replanner_prompt),\n wrap_messages | planner_prompt,\n )\n | llm\n | LLMCompilerPlanParser(tools=tools)\n )"] + "source": [ + "def create_planner(\n", + " llm: BaseChatModel, tools: Sequence[BaseTool], base_prompt: ChatPromptTemplate\n", + "):\n", + " tool_descriptions = \"\\n\".join(\n", + " f\"{i+1}. {tool.description}\\n\"\n", + " for i, tool in enumerate(\n", + " tools\n", + " ) # +1 to offset the 0 starting index, we want it count normally from 1.\n", + " )\n", + " planner_prompt = base_prompt.partial(\n", + " replan=\"\",\n", + " num_tools=len(tools)\n", + " + 1, # Add one because we're adding the join() tool at the end.\n", + " tool_descriptions=tool_descriptions,\n", + " )\n", + " replanner_prompt = base_prompt.partial(\n", + " replan=' - You are given \"Previous Plan\" which is the plan that the previous agent created along with the execution results '\n", + " \"(given as Observation) of each plan and a general thought (given as Thought) about the executed results.\"\n", + " 'You MUST use these information to create the next plan under \"Current Plan\".\\n'\n", + " ' - When starting the Current Plan, you should start with \"Thought\" that outlines the strategy for the next plan.\\n'\n", + " \" - In the Current Plan, you should NEVER repeat the actions that are already executed in the Previous Plan.\\n\"\n", + " \" - You must continue the task index from the end of the previous one. Do not repeat task indices.\",\n", + " num_tools=len(tools) + 1,\n", + " tool_descriptions=tool_descriptions,\n", + " )\n", + "\n", + " def should_replan(state: list):\n", + " # Context is passed as a system message\n", + " return isinstance(state[-1], SystemMessage)\n", + "\n", + " def wrap_messages(state: list):\n", + " return {\"messages\": state}\n", + "\n", + " def wrap_and_get_last_index(state: list):\n", + " next_task = 0\n", + " for message in state[::-1]:\n", + " if isinstance(message, FunctionMessage):\n", + " next_task = message.additional_kwargs[\"idx\"] + 1\n", + " break\n", + " state[-1].content = state[-1].content + f\" - Begin counting at : {next_task}\"\n", + " return {\"messages\": state}\n", + "\n", + " return (\n", + " RunnableBranch(\n", + " (should_replan, wrap_and_get_last_index | replanner_prompt),\n", + " wrap_messages | planner_prompt,\n", + " )\n", + " | llm\n", + " | LLMCompilerPlanParser(tools=tools)\n", + " )" + ] }, { "cell_type": "code", @@ -164,7 +274,11 @@ "id": "bbdcb57b-5362-4b9e-88db-fb3fae443fb0", "metadata": {}, "outputs": [], - "source": ["llm = ChatOpenAI(model=\"gpt-4-turbo-preview\")\n# This is the primary \"agent\" in our application\nplanner = create_planner(llm, tools, prompt)"] + "source": [ + "llm = ChatOpenAI(model=\"gpt-4-turbo-preview\")\n", + "# This is the primary \"agent\" in our application\n", + "planner = create_planner(llm, tools, prompt)" + ] }, { "cell_type": "code", @@ -185,7 +299,13 @@ ] } ], - "source": ["example_question = \"What's the temperature in SF raised to the 3rd power?\"\n\nfor task in planner.stream([HumanMessage(content=example_question)]):\n print(task[\"tool\"], task[\"args\"])\n print(\"---\")"] + "source": [ + "example_question = \"What's the temperature in SF raised to the 3rd power?\"\n", + "\n", + "for task in planner.stream([HumanMessage(content=example_question)]):\n", + " print(task[\"tool\"], task[\"args\"])\n", + " print(\"---\")" + ] }, { "cell_type": "markdown", @@ -217,7 +337,168 @@ "jp-MarkdownHeadingCollapsed": true }, "outputs": [], - "source": ["import re\nimport time\nfrom concurrent.futures import ThreadPoolExecutor, wait\nfrom typing import Any, Dict, Iterable, List, Union\n\nfrom langchain_core.runnables import (\n chain as as_runnable,\n)\nfrom typing_extensions import TypedDict\n\n\ndef _get_observations(messages: List[BaseMessage]) -> Dict[int, Any]:\n # Get all previous tool responses\n results = {}\n for message in messages[::-1]:\n if isinstance(message, FunctionMessage):\n results[int(message.additional_kwargs[\"idx\"])] = message.content\n return results\n\n\nclass SchedulerInput(TypedDict):\n messages: List[BaseMessage]\n tasks: Iterable[Task]\n\n\ndef _execute_task(task, observations, config):\n tool_to_use = task[\"tool\"]\n if isinstance(tool_to_use, str):\n return tool_to_use\n args = task[\"args\"]\n try:\n if isinstance(args, str):\n resolved_args = _resolve_arg(args, observations)\n elif isinstance(args, dict):\n resolved_args = {\n key: _resolve_arg(val, observations) for key, val in args.items()\n }\n else:\n # This will likely fail\n resolved_args = args\n except Exception as e:\n return (\n f\"ERROR(Failed to call {tool_to_use.name} with args {args}.)\"\n f\" Args could not be resolved. Error: {repr(e)}\"\n )\n try:\n return tool_to_use.invoke(resolved_args, config)\n except Exception as e:\n return (\n f\"ERROR(Failed to call {tool_to_use.name} with args {args}.\"\n + f\" Args resolved to {resolved_args}. Error: {repr(e)})\"\n )\n\n\ndef _resolve_arg(arg: Union[str, Any], observations: Dict[int, Any]):\n # $1 or ${1} -> 1\n ID_PATTERN = r\"\\$\\{?(\\d+)\\}?\"\n\n def replace_match(match):\n # If the string is ${123}, match.group(0) is ${123}, and match.group(1) is 123.\n\n # Return the match group, in this case the index, from the string. This is the index\n # number we get back.\n idx = int(match.group(1))\n return str(observations.get(idx, match.group(0)))\n\n # For dependencies on other tasks\n if isinstance(arg, str):\n return re.sub(ID_PATTERN, replace_match, arg)\n elif isinstance(arg, list):\n return [_resolve_arg(a, observations) for a in arg]\n else:\n return str(arg)\n\n\n@as_runnable\ndef schedule_task(task_inputs, config):\n task: Task = task_inputs[\"task\"]\n observations: Dict[int, Any] = task_inputs[\"observations\"]\n try:\n observation = _execute_task(task, observations, config)\n except Exception:\n import traceback\n\n observation = traceback.format_exception() # repr(e) +\n observations[task[\"idx\"]] = observation\n\n\ndef schedule_pending_task(\n task: Task, observations: Dict[int, Any], retry_after: float = 0.2\n):\n while True:\n deps = task[\"dependencies\"]\n if deps and (any([dep not in observations for dep in deps])):\n # Dependencies not yet satisfied\n time.sleep(retry_after)\n continue\n schedule_task.invoke({\"task\": task, \"observations\": observations})\n break\n\n\n@as_runnable\ndef schedule_tasks(scheduler_input: SchedulerInput) -> List[FunctionMessage]:\n \"\"\"Group the tasks into a DAG schedule.\"\"\"\n # For streaming, we are making a few simplifying assumption:\n # 1. The LLM does not create cyclic dependencies\n # 2. That the LLM will not generate tasks with future deps\n # If this ceases to be a good assumption, you can either\n # adjust to do a proper topological sort (not-stream)\n # or use a more complicated data structure\n tasks = scheduler_input[\"tasks\"]\n args_for_tasks = {}\n messages = scheduler_input[\"messages\"]\n # If we are re-planning, we may have calls that depend on previous\n # plans. Start with those.\n observations = _get_observations(messages)\n task_names = {}\n originals = set(observations)\n # ^^ We assume each task inserts a different key above to\n # avoid race conditions...\n futures = []\n retry_after = 0.25 # Retry every quarter second\n with ThreadPoolExecutor() as executor:\n for task in tasks:\n deps = task[\"dependencies\"]\n task_names[task[\"idx\"]] = (\n task[\"tool\"] if isinstance(task[\"tool\"], str) else task[\"tool\"].name\n )\n args_for_tasks[task[\"idx\"]] = task[\"args\"]\n if (\n # Depends on other tasks\n deps\n and (any([dep not in observations for dep in deps]))\n ):\n futures.append(\n executor.submit(\n schedule_pending_task, task, observations, retry_after\n )\n )\n else:\n # No deps or all deps satisfied\n # can schedule now\n schedule_task.invoke(dict(task=task, observations=observations))\n # futures.append(executor.submit(schedule_task.invoke dict(task=task, observations=observations)))\n\n # All tasks have been submitted or enqueued\n # Wait for them to complete\n wait(futures)\n # Convert observations to new tool messages to add to the state\n new_observations = {\n k: (task_names[k], args_for_tasks[k], observations[k])\n for k in sorted(observations.keys() - originals)\n }\n tool_messages = [\n FunctionMessage(\n name=name, content=str(obs), additional_kwargs={\"idx\": k, \"args\": task_args}\n )\n for k, (name, task_args, obs) in new_observations.items()\n ]\n return tool_messages"] + "source": [ + "import re\n", + "import time\n", + "from concurrent.futures import ThreadPoolExecutor, wait\n", + "from typing import Any, Dict, Iterable, List, Union\n", + "\n", + "from langchain_core.runnables import (\n", + " chain as as_runnable,\n", + ")\n", + "from typing_extensions import TypedDict\n", + "\n", + "\n", + "def _get_observations(messages: List[BaseMessage]) -> Dict[int, Any]:\n", + " # Get all previous tool responses\n", + " results = {}\n", + " for message in messages[::-1]:\n", + " if isinstance(message, FunctionMessage):\n", + " results[int(message.additional_kwargs[\"idx\"])] = message.content\n", + " return results\n", + "\n", + "\n", + "class SchedulerInput(TypedDict):\n", + " messages: List[BaseMessage]\n", + " tasks: Iterable[Task]\n", + "\n", + "\n", + "def _execute_task(task, observations, config):\n", + " tool_to_use = task[\"tool\"]\n", + " if isinstance(tool_to_use, str):\n", + " return tool_to_use\n", + " args = task[\"args\"]\n", + " try:\n", + " if isinstance(args, str):\n", + " resolved_args = _resolve_arg(args, observations)\n", + " elif isinstance(args, dict):\n", + " resolved_args = {\n", + " key: _resolve_arg(val, observations) for key, val in args.items()\n", + " }\n", + " else:\n", + " # This will likely fail\n", + " resolved_args = args\n", + " except Exception as e:\n", + " return (\n", + " f\"ERROR(Failed to call {tool_to_use.name} with args {args}.)\"\n", + " f\" Args could not be resolved. Error: {repr(e)}\"\n", + " )\n", + " try:\n", + " return tool_to_use.invoke(resolved_args, config)\n", + " except Exception as e:\n", + " return (\n", + " f\"ERROR(Failed to call {tool_to_use.name} with args {args}.\"\n", + " + f\" Args resolved to {resolved_args}. Error: {repr(e)})\"\n", + " )\n", + "\n", + "\n", + "def _resolve_arg(arg: Union[str, Any], observations: Dict[int, Any]):\n", + " # $1 or ${1} -> 1\n", + " ID_PATTERN = r\"\\$\\{?(\\d+)\\}?\"\n", + "\n", + " def replace_match(match):\n", + " # If the string is ${123}, match.group(0) is ${123}, and match.group(1) is 123.\n", + "\n", + " # Return the match group, in this case the index, from the string. This is the index\n", + " # number we get back.\n", + " idx = int(match.group(1))\n", + " return str(observations.get(idx, match.group(0)))\n", + "\n", + " # For dependencies on other tasks\n", + " if isinstance(arg, str):\n", + " return re.sub(ID_PATTERN, replace_match, arg)\n", + " elif isinstance(arg, list):\n", + " return [_resolve_arg(a, observations) for a in arg]\n", + " else:\n", + " return str(arg)\n", + "\n", + "\n", + "@as_runnable\n", + "def schedule_task(task_inputs, config):\n", + " task: Task = task_inputs[\"task\"]\n", + " observations: Dict[int, Any] = task_inputs[\"observations\"]\n", + " try:\n", + " observation = _execute_task(task, observations, config)\n", + " except Exception:\n", + " import traceback\n", + "\n", + " observation = traceback.format_exception() # repr(e) +\n", + " observations[task[\"idx\"]] = observation\n", + "\n", + "\n", + "def schedule_pending_task(\n", + " task: Task, observations: Dict[int, Any], retry_after: float = 0.2\n", + "):\n", + " while True:\n", + " deps = task[\"dependencies\"]\n", + " if deps and (any([dep not in observations for dep in deps])):\n", + " # Dependencies not yet satisfied\n", + " time.sleep(retry_after)\n", + " continue\n", + " schedule_task.invoke({\"task\": task, \"observations\": observations})\n", + " break\n", + "\n", + "\n", + "@as_runnable\n", + "def schedule_tasks(scheduler_input: SchedulerInput) -> List[FunctionMessage]:\n", + " \"\"\"Group the tasks into a DAG schedule.\"\"\"\n", + " # For streaming, we are making a few simplifying assumption:\n", + " # 1. The LLM does not create cyclic dependencies\n", + " # 2. That the LLM will not generate tasks with future deps\n", + " # If this ceases to be a good assumption, you can either\n", + " # adjust to do a proper topological sort (not-stream)\n", + " # or use a more complicated data structure\n", + " tasks = scheduler_input[\"tasks\"]\n", + " args_for_tasks = {}\n", + " messages = scheduler_input[\"messages\"]\n", + " # If we are re-planning, we may have calls that depend on previous\n", + " # plans. Start with those.\n", + " observations = _get_observations(messages)\n", + " task_names = {}\n", + " originals = set(observations)\n", + " # ^^ We assume each task inserts a different key above to\n", + " # avoid race conditions...\n", + " futures = []\n", + " retry_after = 0.25 # Retry every quarter second\n", + " with ThreadPoolExecutor() as executor:\n", + " for task in tasks:\n", + " deps = task[\"dependencies\"]\n", + " task_names[task[\"idx\"]] = (\n", + " task[\"tool\"] if isinstance(task[\"tool\"], str) else task[\"tool\"].name\n", + " )\n", + " args_for_tasks[task[\"idx\"]] = task[\"args\"]\n", + " if (\n", + " # Depends on other tasks\n", + " deps\n", + " and (any([dep not in observations for dep in deps]))\n", + " ):\n", + " futures.append(\n", + " executor.submit(\n", + " schedule_pending_task, task, observations, retry_after\n", + " )\n", + " )\n", + " else:\n", + " # No deps or all deps satisfied\n", + " # can schedule now\n", + " schedule_task.invoke(dict(task=task, observations=observations))\n", + " # futures.append(executor.submit(schedule_task.invoke dict(task=task, observations=observations)))\n", + "\n", + " # All tasks have been submitted or enqueued\n", + " # Wait for them to complete\n", + " wait(futures)\n", + " # Convert observations to new tool messages to add to the state\n", + " new_observations = {\n", + " k: (task_names[k], args_for_tasks[k], observations[k])\n", + " for k in sorted(observations.keys() - originals)\n", + " }\n", + " tool_messages = [\n", + " FunctionMessage(\n", + " name=name, content=str(obs), additional_kwargs={\"idx\": k, \"args\": task_args}\n", + " )\n", + " for k, (name, task_args, obs) in new_observations.items()\n", + " ]\n", + " return tool_messages" + ] }, { "cell_type": "code", @@ -225,7 +506,28 @@ "id": "052f6b16-103a-40e9-94dd-8fcc37e77ba4", "metadata": {}, "outputs": [], - "source": ["import itertools\n\n\n@as_runnable\ndef plan_and_schedule(messages: List[BaseMessage], config):\n tasks = planner.stream(messages, config)\n # Begin executing the planner immediately\n try:\n tasks = itertools.chain([next(tasks)], tasks)\n except StopIteration:\n # Handle the case where tasks is empty.\n tasks = iter([])\n scheduled_tasks = schedule_tasks.invoke(\n {\n \"messages\": messages,\n \"tasks\": tasks,\n },\n config,\n )\n return scheduled_tasks"] + "source": [ + "import itertools\n", + "\n", + "\n", + "@as_runnable\n", + "def plan_and_schedule(state):\n", + " messages = state[\"messages\"]\n", + " tasks = planner.stream(messages)\n", + " # Begin executing the planner immediately\n", + " try:\n", + " tasks = itertools.chain([next(tasks)], tasks)\n", + " except StopIteration:\n", + " # Handle the case where tasks is empty.\n", + " tasks = iter([])\n", + " scheduled_tasks = schedule_tasks.invoke(\n", + " {\n", + " \"messages\": messages,\n", + " \"tasks\": tasks,\n", + " }\n", + " )\n", + " return {\"messages\":[scheduled_tasks]}" + ] }, { "cell_type": "markdown", @@ -243,7 +545,9 @@ "id": "55142257-2674-4a47-988e-0d2810917329", "metadata": {}, "outputs": [], - "source": ["tool_messages = plan_and_schedule.invoke([HumanMessage(content=example_question)])"] + "source": [ + "tool_messages = plan_and_schedule.invoke([HumanMessage(content=example_question)])" + ] }, { "cell_type": "code", @@ -264,7 +568,9 @@ "output_type": "execute_result" } ], - "source": ["tool_messages"] + "source": [ + "tool_messages" + ] }, { "cell_type": "markdown", @@ -287,7 +593,40 @@ "id": "942dab42-ad42-4ba2-90d5-49edbe4fae68", "metadata": {}, "outputs": [], - "source": ["from langchain.chains.openai_functions import create_structured_output_runnable\nfrom langchain_core.messages import AIMessage\nfrom langchain_core.pydantic_v1 import BaseModel, Field\n\n\nclass FinalResponse(BaseModel):\n \"\"\"The final response/answer.\"\"\"\n\n response: str\n\n\nclass Replan(BaseModel):\n feedback: str = Field(\n description=\"Analysis of the previous attempts and recommendations on what needs to be fixed.\"\n )\n\n\nclass JoinOutputs(BaseModel):\n \"\"\"Decide whether to replan or whether you can return the final response.\"\"\"\n\n thought: str = Field(\n description=\"The chain of thought reasoning for the selected action\"\n )\n action: Union[FinalResponse, Replan]\n\n\njoiner_prompt = hub.pull(\"wfh/llm-compiler-joiner\").partial(\n examples=\"\"\n) # You can optionally add examples\nllm = ChatOpenAI(model=\"gpt-4-turbo-preview\")\n\nrunnable = create_structured_output_runnable(JoinOutputs, llm, joiner_prompt)"] + "source": [ + "from langchain.chains.openai_functions import create_structured_output_runnable\n", + "from langchain_core.messages import AIMessage\n", + "from langchain_core.pydantic_v1 import BaseModel, Field\n", + "\n", + "\n", + "class FinalResponse(BaseModel):\n", + " \"\"\"The final response/answer.\"\"\"\n", + "\n", + " response: str\n", + "\n", + "\n", + "class Replan(BaseModel):\n", + " feedback: str = Field(\n", + " description=\"Analysis of the previous attempts and recommendations on what needs to be fixed.\"\n", + " )\n", + "\n", + "\n", + "class JoinOutputs(BaseModel):\n", + " \"\"\"Decide whether to replan or whether you can return the final response.\"\"\"\n", + "\n", + " thought: str = Field(\n", + " description=\"The chain of thought reasoning for the selected action\"\n", + " )\n", + " action: Union[FinalResponse, Replan]\n", + "\n", + "\n", + "joiner_prompt = hub.pull(\"wfh/llm-compiler-joiner\").partial(\n", + " examples=\"\"\n", + ") # You can optionally add examples\n", + "llm = ChatOpenAI(model=\"gpt-4-turbo-preview\")\n", + "\n", + "runnable = create_structured_output_runnable(JoinOutputs, llm, joiner_prompt)" + ] }, { "cell_type": "markdown", @@ -304,7 +643,31 @@ "id": "951a33cf-2a05-4a33-899a-0ab1d97122fa", "metadata": {}, "outputs": [], - "source": ["def _parse_joiner_output(decision: JoinOutputs) -> List[BaseMessage]:\n response = [AIMessage(content=f\"Thought: {decision.thought}\")]\n if isinstance(decision.action, Replan):\n return response + [\n SystemMessage(\n content=f\"Context from last attempt: {decision.action.feedback}\"\n )\n ]\n else:\n return response + [AIMessage(content=decision.action.response)]\n\n\ndef select_recent_messages(messages: list) -> dict:\n selected = []\n for msg in messages[::-1]:\n selected.append(msg)\n if isinstance(msg, HumanMessage):\n break\n return {\"messages\": selected[::-1]}\n\n\njoiner = select_recent_messages | runnable | _parse_joiner_output"] + "source": [ + "def _parse_joiner_output(decision: JoinOutputs) -> List[BaseMessage]:\n", + " response = [AIMessage(content=f\"Thought: {decision.thought}\")]\n", + " if isinstance(decision.action, Replan):\n", + " return response + [\n", + " SystemMessage(\n", + " content=f\"Context from last attempt: {decision.action.feedback}\"\n", + " )\n", + " ]\n", + " else:\n", + " return {\"messages\":response + [AIMessage(content=decision.action.response)]}\n", + "\n", + "\n", + "def select_recent_messages(state) -> dict:\n", + " messages = state[\"messages\"]\n", + " selected = []\n", + " for msg in messages[::-1]:\n", + " selected.append(msg)\n", + " if isinstance(msg, HumanMessage):\n", + " break\n", + " return {\"messages\": selected[::-1]}\n", + "\n", + "\n", + "joiner = select_recent_messages | runnable | _parse_joiner_output" + ] }, { "cell_type": "code", @@ -312,7 +675,9 @@ "id": "1e49d4b1-8266-4520-a566-1448b1c31c8f", "metadata": {}, "outputs": [], - "source": ["input_messages = [HumanMessage(content=example_question)] + tool_messages"] + "source": [ + "input_messages = [HumanMessage(content=example_question)] + tool_messages" + ] }, { "cell_type": "code", @@ -332,7 +697,9 @@ "output_type": "execute_result" } ], - "source": ["joiner.invoke(input_messages)"] + "source": [ + "joiner.invoke(input_messages)" + ] }, { "cell_type": "markdown", @@ -354,7 +721,44 @@ "id": "768b5f11-e3d2-47be-8143-a7dcd8765243", "metadata": {}, "outputs": [], - "source": ["from typing import Dict\n\nfrom langgraph.graph import END, MessageGraph, START\n\ngraph_builder = MessageGraph()\n\n# 1. Define vertices\n# We defined plan_and_schedule above already\n# Assign each node to a state variable to update\ngraph_builder.add_node(\"plan_and_schedule\", plan_and_schedule)\ngraph_builder.add_node(\"join\", joiner)\n\n\n## Define edges\ngraph_builder.add_edge(\"plan_and_schedule\", \"join\")\n\n### This condition determines looping logic\n\n\ndef should_continue(state: List[BaseMessage]):\n if isinstance(state[-1], AIMessage):\n return END\n return \"plan_and_schedule\"\n\n\ngraph_builder.add_conditional_edges(\n start_key=\"join\",\n # Next, we pass in the function that will determine which node is called next.\n condition=should_continue,\n)\ngraph_builder.add_edge(START, \"plan_and_schedule\")\nchain = graph_builder.compile()"] + "source": [ + "from langgraph.graph import END, StateGraph, START\n", + "from langgraph.graph.message import add_messages\n", + "from typing import Annotated\n", + "\n", + "class State(TypedDict):\n", + " messages: Annotated[list, add_messages]\n", + "\n", + "graph_builder = StateGraph(State)\n", + "\n", + "# 1. Define vertices\n", + "# We defined plan_and_schedule above already\n", + "# Assign each node to a state variable to update\n", + "graph_builder.add_node(\"plan_and_schedule\", plan_and_schedule)\n", + "graph_builder.add_node(\"join\", joiner)\n", + "\n", + "\n", + "## Define edges\n", + "graph_builder.add_edge(\"plan_and_schedule\", \"join\")\n", + "\n", + "### This condition determines looping logic\n", + "\n", + "\n", + "def should_continue(state):\n", + " messages = state[\"messages\"]\n", + " if isinstance(messages[-1], AIMessage):\n", + " return END\n", + " return \"plan_and_schedule\"\n", + "\n", + "\n", + "graph_builder.add_conditional_edges(\n", + " start_key=\"join\",\n", + " # Next, we pass in the function that will determine which node is called next.\n", + " condition=should_continue,\n", + ")\n", + "graph_builder.add_edge(START, \"plan_and_schedule\")\n", + "chain = graph_builder.compile()" + ] }, { "cell_type": "markdown", @@ -389,7 +793,11 @@ ] } ], - "source": ["for step in chain.stream([HumanMessage(content=\"What's the GDP of New York?\")]):\n print(step)\n print(\"---\")"] + "source": [ + "for step in chain.stream({\"messages\":[HumanMessage(content=\"What's the GDP of New York?\")]}):\n", + " print(step)\n", + " print(\"---\")" + ] }, { "cell_type": "code", @@ -405,7 +813,10 @@ ] } ], - "source": ["# Final answer\nprint(step[END][-1].content)"] + "source": [ + "# Final answer\n", + "print(step[END][-1].content)" + ] }, { "cell_type": "markdown", @@ -440,7 +851,21 @@ ] } ], - "source": ["steps = chain.stream(\n [\n HumanMessage(\n content=\"What's the oldest parrot alive, and how much longer is that than the average?\"\n )\n ],\n {\n \"recursion_limit\": 100,\n },\n)\nfor step in steps:\n print(step)\n print(\"---\")"] + "source": [ + "steps = chain.stream(\n", + " [\n", + " HumanMessage(\n", + " content=\"What's the oldest parrot alive, and how much longer is that than the average?\"\n", + " )\n", + " ],\n", + " {\n", + " \"recursion_limit\": 100,\n", + " },\n", + ")\n", + "for step in steps:\n", + " print(step)\n", + " print(\"---\")" + ] }, { "cell_type": "code", @@ -456,7 +881,10 @@ ] } ], - "source": ["# Final answer\nprint(step[END][-1].content)"] + "source": [ + "# Final answer\n", + "print(step[END][-1].content)" + ] }, { "cell_type": "markdown", @@ -482,7 +910,16 @@ ] } ], - "source": ["for step in chain.stream(\n [\n HumanMessage(\n content=\"What's ((3*(4+5)/0.5)+3245) + 8? What's 32/4.23? What's the sum of those two values?\"\n )\n ]\n):\n print(step)"] + "source": [ + "for step in chain.stream(\n", + " [\n", + " HumanMessage(\n", + " content=\"What's ((3*(4+5)/0.5)+3245) + 8? What's 32/4.23? What's the sum of those two values?\"\n", + " )\n", + " ]\n", + "):\n", + " print(step)" + ] }, { "cell_type": "code", @@ -500,7 +937,10 @@ ] } ], - "source": ["# Final answer\nprint(step[END][-1].content)"] + "source": [ + "# Final answer\n", + "print(step[END][-1].content)" + ] }, { "cell_type": "markdown", @@ -522,7 +962,7 @@ "id": "431217e6-4c00-409f-a2bd-40ebff902489", "metadata": {}, "outputs": [], - "source": [""] + "source": [] } ], "metadata": { diff --git a/examples/reflection/reflection.ipynb b/examples/reflection/reflection.ipynb index 72f3d1bc3..810990e38 100644 --- a/examples/reflection/reflection.ipynb +++ b/examples/reflection/reflection.ipynb @@ -32,7 +32,10 @@ "id": "8b323f43-328b-4b4b-88b0-6c84dc0a1d60", "metadata": {}, "outputs": [], - "source": ["%pip install -U --quiet langgraph langchain-fireworks\n%pip install -U --quiet tavily-python"] + "source": [ + "%pip install -U --quiet langgraph langchain-fireworks\n", + "%pip install -U --quiet tavily-python" + ] }, { "cell_type": "code", @@ -40,7 +43,24 @@ "id": "3368f330-cad6-4d35-a291-68fbf4389d98", "metadata": {}, "outputs": [], - "source": ["import getpass\nimport os\n\n\ndef _set_if_undefined(var: str) -> None:\n if os.environ.get(var):\n return\n os.environ[var] = getpass.getpass(var)\n\n\n# Optional: Configure tracing to visualize and debug the agent\n_set_if_undefined(\"LANGCHAIN_API_KEY\")\nos.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\nos.environ[\"LANGCHAIN_PROJECT\"] = \"Reflection\"\n\n_set_if_undefined(\"FIREWORKS_API_KEY\")"] + "source": [ + "import getpass\n", + "import os\n", + "\n", + "\n", + "def _set_if_undefined(var: str) -> None:\n", + " if os.environ.get(var):\n", + " return\n", + " os.environ[var] = getpass.getpass(var)\n", + "\n", + "\n", + "# Optional: Configure tracing to visualize and debug the agent\n", + "_set_if_undefined(\"LANGCHAIN_API_KEY\")\n", + "os.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\n", + "os.environ[\"LANGCHAIN_PROJECT\"] = \"Reflection\"\n", + "\n", + "_set_if_undefined(\"FIREWORKS_API_KEY\")" + ] }, { "cell_type": "markdown", @@ -58,7 +78,28 @@ "id": "cc10028f-9cef-4936-9419-cbdf06d24f1e", "metadata": {}, "outputs": [], - "source": ["from langchain_core.messages import AIMessage, BaseMessage, HumanMessage\nfrom langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\nfrom langchain_fireworks import ChatFireworks\n\nprompt = ChatPromptTemplate.from_messages(\n [\n (\n \"system\",\n \"You are an essay assistant tasked with writing excellent 5-paragraph essays.\"\n \" Generate the best essay possible for the user's request.\"\n \" If the user provides critique, respond with a revised version of your previous attempts.\",\n ),\n MessagesPlaceholder(variable_name=\"messages\"),\n ]\n)\nllm = ChatFireworks(\n model=\"accounts/fireworks/models/mixtral-8x7b-instruct\",\n model_kwargs={\"max_tokens\": 32768},\n)\ngenerate = prompt | llm"] + "source": [ + "from langchain_core.messages import AIMessage, BaseMessage, HumanMessage\n", + "from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\n", + "from langchain_fireworks import ChatFireworks\n", + "\n", + "prompt = ChatPromptTemplate.from_messages(\n", + " [\n", + " (\n", + " \"system\",\n", + " \"You are an essay assistant tasked with writing excellent 5-paragraph essays.\"\n", + " \" Generate the best essay possible for the user's request.\"\n", + " \" If the user provides critique, respond with a revised version of your previous attempts.\",\n", + " ),\n", + " MessagesPlaceholder(variable_name=\"messages\"),\n", + " ]\n", + ")\n", + "llm = ChatFireworks(\n", + " model=\"accounts/fireworks/models/mixtral-8x7b-instruct\",\n", + " model_kwargs={\"max_tokens\": 32768},\n", + ")\n", + "generate = prompt | llm" + ] }, { "cell_type": "code", @@ -86,7 +127,15 @@ ] } ], - "source": ["essay = \"\"\nrequest = HumanMessage(\n content=\"Write an essay on why the little prince is relevant in modern childhood\"\n)\nfor chunk in generate.stream({\"messages\": [request]}):\n print(chunk.content, end=\"\")\n essay += chunk.content"] + "source": [ + "essay = \"\"\n", + "request = HumanMessage(\n", + " content=\"Write an essay on why the little prince is relevant in modern childhood\"\n", + ")\n", + "for chunk in generate.stream({\"messages\": [request]}):\n", + " print(chunk.content, end=\"\")\n", + " essay += chunk.content" + ] }, { "cell_type": "markdown", @@ -102,7 +151,19 @@ "id": "a705be92-88c0-4f4f-b4c2-cdcd9af8cb2c", "metadata": {}, "outputs": [], - "source": ["reflection_prompt = ChatPromptTemplate.from_messages(\n [\n (\n \"system\",\n \"You are a teacher grading an essay submission. Generate critique and recommendations for the user's submission.\"\n \" Provide detailed recommendations, including requests for length, depth, style, etc.\",\n ),\n MessagesPlaceholder(variable_name=\"messages\"),\n ]\n)\nreflect = reflection_prompt | llm"] + "source": [ + "reflection_prompt = ChatPromptTemplate.from_messages(\n", + " [\n", + " (\n", + " \"system\",\n", + " \"You are a teacher grading an essay submission. Generate critique and recommendations for the user's submission.\"\n", + " \" Provide detailed recommendations, including requests for length, depth, style, etc.\",\n", + " ),\n", + " MessagesPlaceholder(variable_name=\"messages\"),\n", + " ]\n", + ")\n", + "reflect = reflection_prompt | llm" + ] }, { "cell_type": "code", @@ -132,7 +193,12 @@ ] } ], - "source": ["reflection = \"\"\nfor chunk in reflect.stream({\"messages\": [request, HumanMessage(content=essay)]}):\n print(chunk.content, end=\"\")\n reflection += chunk.content"] + "source": [ + "reflection = \"\"\n", + "for chunk in reflect.stream({\"messages\": [request, HumanMessage(content=essay)]}):\n", + " print(chunk.content, end=\"\")\n", + " reflection += chunk.content" + ] }, { "cell_type": "markdown", @@ -170,7 +236,12 @@ ] } ], - "source": ["for chunk in generate.stream(\n {\"messages\": [request, AIMessage(content=essay), HumanMessage(content=reflection)]}\n):\n print(chunk.content, end=\"\")"] + "source": [ + "for chunk in generate.stream(\n", + " {\"messages\": [request, AIMessage(content=essay), HumanMessage(content=reflection)]}\n", + "):\n", + " print(chunk.content, end=\"\")" + ] }, { "cell_type": "markdown", @@ -188,7 +259,50 @@ "id": "9e9a9d7c-5d2e-4194-b745-4511ec20db76", "metadata": {}, "outputs": [], - "source": ["from typing import List, Sequence\n\nfrom langgraph.graph import END, MessageGraph, START\n\n\nasync def generation_node(state: Sequence[BaseMessage]):\n return await generate.ainvoke({\"messages\": state})\n\n\nasync def reflection_node(messages: Sequence[BaseMessage]) -> List[BaseMessage]:\n # Other messages we need to adjust\n cls_map = {\"ai\": HumanMessage, \"human\": AIMessage}\n # First message is the original user request. We hold it the same for all nodes\n translated = [messages[0]] + [\n cls_map[msg.type](content=msg.content) for msg in messages[1:]\n ]\n res = await reflect.ainvoke({\"messages\": translated})\n # We treat the output of this as human feedback for the generator\n return HumanMessage(content=res.content)\n\n\nbuilder = MessageGraph()\nbuilder.add_node(\"generate\", generation_node)\nbuilder.add_node(\"reflect\", reflection_node)\nbuilder.add_edge(START, \"generate\")\n\n\ndef should_continue(state: List[BaseMessage]):\n if len(state) > 6:\n # End after 3 iterations\n return END\n return \"reflect\"\n\n\nbuilder.add_conditional_edges(\"generate\", should_continue)\nbuilder.add_edge(\"reflect\", \"generate\")\ngraph = builder.compile()"] + "source": [ + "from typing import Annotated, List, Sequence\n", + "from langgraph.graph import END, StateGraph, START\n", + "from langgraph.graph.message import add_messages\n", + "from typing_extensions import TypedDict\n", + "\n", + "\n", + "class State(TypedDict):\n", + " messages: Annotated[list, add_messages]\n", + "\n", + " \n", + "async def generation_node(state: Sequence[BaseMessage]):\n", + " return await generate.ainvoke({\"messages\": state})\n", + "\n", + "\n", + "async def reflection_node(messages: Sequence[BaseMessage]) -> List[BaseMessage]:\n", + " # Other messages we need to adjust\n", + " cls_map = {\"ai\": HumanMessage, \"human\": AIMessage}\n", + " # First message is the original user request. We hold it the same for all nodes\n", + " translated = [messages[0]] + [\n", + " cls_map[msg.type](content=msg.content) for msg in messages[1:]\n", + " ]\n", + " res = await reflect.ainvoke({\"messages\": translated})\n", + " # We treat the output of this as human feedback for the generator\n", + " return HumanMessage(content=res.content)\n", + "\n", + "\n", + "builder = StateGraph(State)\n", + "builder.add_node(\"generate\", generation_node)\n", + "builder.add_node(\"reflect\", reflection_node)\n", + "builder.add_edge(START, \"generate\")\n", + "\n", + "\n", + "def should_continue(state: List[BaseMessage]):\n", + " if len(state) > 6:\n", + " # End after 3 iterations\n", + " return END\n", + " return \"reflect\"\n", + "\n", + "\n", + "builder.add_conditional_edges(\"generate\", should_continue)\n", + "builder.add_edge(\"reflect\", \"generate\")\n", + "graph = builder.compile()" + ] }, { "cell_type": "code", @@ -219,7 +333,17 @@ ] } ], - "source": ["async for event in graph.astream(\n [\n HumanMessage(\n content=\"Generate an essay on the topicality of The Little Prince and its message in modern life\"\n )\n ],\n):\n print(event)\n print(\"---\")"] + "source": [ + "async for event in graph.astream(\n", + " [\n", + " HumanMessage(\n", + " content=\"Generate an essay on the topicality of The Little Prince and its message in modern life\"\n", + " )\n", + " ],\n", + "):\n", + " print(event)\n", + " print(\"---\")" + ] }, { "cell_type": "code", @@ -371,7 +495,9 @@ ] } ], - "source": ["ChatPromptTemplate.from_messages(event[END]).pretty_print()"] + "source": [ + "ChatPromptTemplate.from_messages(event[END]).pretty_print()" + ] }, { "cell_type": "markdown", @@ -389,7 +515,7 @@ "id": "7c0e3efd-7f54-410e-bd31-36185a46b9a8", "metadata": {}, "outputs": [], - "source": [""] + "source": [] } ], "metadata": { diff --git a/examples/reflexion/reflexion.ipynb b/examples/reflexion/reflexion.ipynb index 9dcbcc7c7..670e6eb5b 100644 --- a/examples/reflexion/reflexion.ipynb +++ b/examples/reflexion/reflexion.ipynb @@ -40,7 +40,10 @@ "id": "1b64a6f6-1d32-48be-92b5-66c3b04b17f7", "metadata": {}, "outputs": [], - "source": ["%pip install -U --quiet langgraph langchain_anthropic\n%pip install -U --quiet tavily-python"] + "source": [ + "%pip install -U --quiet langgraph langchain_anthropic\n", + "%pip install -U --quiet tavily-python" + ] }, { "cell_type": "code", @@ -48,7 +51,25 @@ "id": "a917bb70-f84c-48e6-8d32-d14f9df2ca2f", "metadata": {}, "outputs": [], - "source": ["import getpass\nimport os\n\n\ndef _set_if_undefined(var: str) -> None:\n if os.environ.get(var):\n return\n os.environ[var] = getpass.getpass(var)\n\n\n# Optional: Configure tracing to visualize and debug the agent\n_set_if_undefined(\"LANGCHAIN_API_KEY\")\nos.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\nos.environ[\"LANGCHAIN_PROJECT\"] = \"Reflexion\"\n\n_set_if_undefined(\"ANTHROPIC_API_KEY\")\n_set_if_undefined(\"TAVILY_API_KEY\")"] + "source": [ + "import getpass\n", + "import os\n", + "\n", + "\n", + "def _set_if_undefined(var: str) -> None:\n", + " if os.environ.get(var):\n", + " return\n", + " os.environ[var] = getpass.getpass(var)\n", + "\n", + "\n", + "# Optional: Configure tracing to visualize and debug the agent\n", + "_set_if_undefined(\"LANGCHAIN_API_KEY\")\n", + "os.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\n", + "os.environ[\"LANGCHAIN_PROJECT\"] = \"Reflexion\"\n", + "\n", + "_set_if_undefined(\"ANTHROPIC_API_KEY\")\n", + "_set_if_undefined(\"TAVILY_API_KEY\")" + ] }, { "cell_type": "code", @@ -56,7 +77,15 @@ "id": "567b6c4a", "metadata": {}, "outputs": [], - "source": ["from langchain_anthropic import ChatAnthropic\n\nllm = ChatAnthropic(model=\"claude-3-sonnet-20240229\")\n# You could also use OpenAI or another provider\n# from langchain_openai import ChatOpenAI\n\n# llm = ChatOpenAI(model=\"gpt-4-turbo-preview\")"] + "source": [ + "from langchain_anthropic import ChatAnthropic\n", + "\n", + "llm = ChatAnthropic(model=\"claude-3-sonnet-20240229\")\n", + "# You could also use OpenAI or another provider\n", + "# from langchain_openai import ChatOpenAI\n", + "\n", + "# llm = ChatOpenAI(model=\"gpt-4-turbo-preview\")" + ] }, { "cell_type": "markdown", @@ -81,7 +110,13 @@ "id": "5a2ac853-b8a6-40de-b7fe-3f9f3c5ca4d2", "metadata": {}, "outputs": [], - "source": ["from langchain_community.tools.tavily_search import TavilySearchResults\nfrom langchain_community.utilities.tavily_search import TavilySearchAPIWrapper\n\nsearch = TavilySearchAPIWrapper()\ntavily_tool = TavilySearchResults(api_wrapper=search, max_results=5)"] + "source": [ + "from langchain_community.tools.tavily_search import TavilySearchResults\n", + "from langchain_community.utilities.tavily_search import TavilySearchAPIWrapper\n", + "\n", + "search = TavilySearchAPIWrapper()\n", + "tavily_tool = TavilySearchResults(api_wrapper=search, max_results=5)" + ] }, { "cell_type": "markdown", @@ -97,7 +132,54 @@ "id": "5fffa8d5-068a-4f0b-adfc-b4daf30ef294", "metadata": {}, "outputs": [], - "source": ["from langchain_core.messages import HumanMessage, ToolMessage\nfrom langchain_core.output_parsers.openai_tools import PydanticToolsParser\nfrom langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\nfrom langchain_core.pydantic_v1 import BaseModel, Field, ValidationError\n\n\nclass Reflection(BaseModel):\n missing: str = Field(description=\"Critique of what is missing.\")\n superfluous: str = Field(description=\"Critique of what is superfluous\")\n\n\nclass AnswerQuestion(BaseModel):\n \"\"\"Answer the question. Provide an answer, reflection, and then follow up with search queries to improve the answer.\"\"\"\n\n answer: str = Field(description=\"~250 word detailed answer to the question.\")\n reflection: Reflection = Field(description=\"Your reflection on the initial answer.\")\n search_queries: list[str] = Field(\n description=\"1-3 search queries for researching improvements to address the critique of your current answer.\"\n )\n\n\nclass ResponderWithRetries:\n def __init__(self, runnable, validator):\n self.runnable = runnable\n self.validator = validator\n\n def respond(self, state: list):\n response = []\n for attempt in range(3):\n response = self.runnable.invoke(\n {\"messages\": state}, {\"tags\": [f\"attempt:{attempt}\"]}\n )\n try:\n self.validator.invoke(response)\n return response\n except ValidationError as e:\n state = state + [\n response,\n ToolMessage(\n content=f\"{repr(e)}\\n\\nPay close attention to the function schema.\\n\\n\"\n + self.validator.schema_json()\n + \" Respond by fixing all validation errors.\",\n tool_call_id=response.tool_calls[0][\"id\"],\n ),\n ]\n return response"] + "source": [ + "from langchain_core.messages import HumanMessage, ToolMessage\n", + "from langchain_core.output_parsers.openai_tools import PydanticToolsParser\n", + "from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\n", + "from langchain_core.pydantic_v1 import BaseModel, Field, ValidationError\n", + "\n", + "\n", + "class Reflection(BaseModel):\n", + " missing: str = Field(description=\"Critique of what is missing.\")\n", + " superfluous: str = Field(description=\"Critique of what is superfluous\")\n", + "\n", + "\n", + "class AnswerQuestion(BaseModel):\n", + " \"\"\"Answer the question. Provide an answer, reflection, and then follow up with search queries to improve the answer.\"\"\"\n", + "\n", + " answer: str = Field(description=\"~250 word detailed answer to the question.\")\n", + " reflection: Reflection = Field(description=\"Your reflection on the initial answer.\")\n", + " search_queries: list[str] = Field(\n", + " description=\"1-3 search queries for researching improvements to address the critique of your current answer.\"\n", + " )\n", + "\n", + "\n", + "class ResponderWithRetries:\n", + " def __init__(self, runnable, validator):\n", + " self.runnable = runnable\n", + " self.validator = validator\n", + "\n", + " def respond(self, state: list):\n", + " response = []\n", + " for attempt in range(3):\n", + " response = self.runnable.invoke(\n", + " {\"messages\": state}, {\"tags\": [f\"attempt:{attempt}\"]}\n", + " )\n", + " try:\n", + " self.validator.invoke(response)\n", + " return response\n", + " except ValidationError as e:\n", + " state = state + [\n", + " response,\n", + " ToolMessage(\n", + " content=f\"{repr(e)}\\n\\nPay close attention to the function schema.\\n\\n\"\n", + " + self.validator.schema_json()\n", + " + \" Respond by fixing all validation errors.\",\n", + " tool_call_id=response.tool_calls[0][\"id\"],\n", + " ),\n", + " ]\n", + " return response" + ] }, { "cell_type": "code", @@ -114,7 +196,40 @@ ] } ], - "source": ["import datetime\n\nactor_prompt_template = ChatPromptTemplate.from_messages(\n [\n (\n \"system\",\n \"\"\"You are expert researcher.\nCurrent time: {time}\n\n1. {first_instruction}\n2. Reflect and critique your answer. Be severe to maximize improvement.\n3. Recommend search queries to research information and improve your answer.\"\"\",\n ),\n MessagesPlaceholder(variable_name=\"messages\"),\n (\n \"user\",\n \"\\n\\nReflect on the user's original question and the\"\n \" actions taken thus far. Respond using the {function_name} function.\",\n ),\n ]\n).partial(\n time=lambda: datetime.datetime.now().isoformat(),\n)\ninitial_answer_chain = actor_prompt_template.partial(\n first_instruction=\"Provide a detailed ~250 word answer.\",\n function_name=AnswerQuestion.__name__,\n) | llm.bind_tools(tools=[AnswerQuestion])\nvalidator = PydanticToolsParser(tools=[AnswerQuestion])\n\nfirst_responder = ResponderWithRetries(\n runnable=initial_answer_chain, validator=validator\n)"] + "source": [ + "import datetime\n", + "\n", + "actor_prompt_template = ChatPromptTemplate.from_messages(\n", + " [\n", + " (\n", + " \"system\",\n", + " \"\"\"You are expert researcher.\n", + "Current time: {time}\n", + "\n", + "1. {first_instruction}\n", + "2. Reflect and critique your answer. Be severe to maximize improvement.\n", + "3. Recommend search queries to research information and improve your answer.\"\"\",\n", + " ),\n", + " MessagesPlaceholder(variable_name=\"messages\"),\n", + " (\n", + " \"user\",\n", + " \"\\n\\nReflect on the user's original question and the\"\n", + " \" actions taken thus far. Respond using the {function_name} function.\",\n", + " ),\n", + " ]\n", + ").partial(\n", + " time=lambda: datetime.datetime.now().isoformat(),\n", + ")\n", + "initial_answer_chain = actor_prompt_template.partial(\n", + " first_instruction=\"Provide a detailed ~250 word answer.\",\n", + " function_name=AnswerQuestion.__name__,\n", + ") | llm.bind_tools(tools=[AnswerQuestion])\n", + "validator = PydanticToolsParser(tools=[AnswerQuestion])\n", + "\n", + "first_responder = ResponderWithRetries(\n", + " runnable=initial_answer_chain, validator=validator\n", + ")" + ] }, { "cell_type": "code", @@ -122,7 +237,10 @@ "id": "5922e1fe-7533-4f41-8b1d-d812707c1968", "metadata": {}, "outputs": [], - "source": ["example_question = \"Why is reflection useful in AI?\"\ninitial = first_responder.respond([HumanMessage(content=example_question)])"] + "source": [ + "example_question = \"Why is reflection useful in AI?\"\n", + "initial = first_responder.respond([HumanMessage(content=example_question)])" + ] }, { "cell_type": "markdown", @@ -140,7 +258,38 @@ "id": "2605fd8d-c663-446f-ba25-751190195749", "metadata": {}, "outputs": [], - "source": ["revise_instructions = \"\"\"Revise your previous answer using the new information.\n - You should use the previous critique to add important information to your answer.\n - You MUST include numerical citations in your revised answer to ensure it can be verified.\n - Add a \"References\" section to the bottom of your answer (which does not count towards the word limit). In form of:\n - [1] https://example.com\n - [2] https://example.com\n - You should use the previous critique to remove superfluous information from your answer and make SURE it is not more than 250 words.\n\"\"\"\n\n\n# Extend the initial answer schema to include references.\n# Forcing citation in the model encourages grounded responses\nclass ReviseAnswer(AnswerQuestion):\n \"\"\"Revise your original answer to your question. Provide an answer, reflection,\n\n cite your reflection with references, and finally\n add search queries to improve the answer.\"\"\"\n\n references: list[str] = Field(\n description=\"Citations motivating your updated answer.\"\n )\n\n\nrevision_chain = actor_prompt_template.partial(\n first_instruction=revise_instructions,\n function_name=ReviseAnswer.__name__,\n) | llm.bind_tools(tools=[ReviseAnswer])\nrevision_validator = PydanticToolsParser(tools=[ReviseAnswer])\n\nrevisor = ResponderWithRetries(runnable=revision_chain, validator=revision_validator)"] + "source": [ + "revise_instructions = \"\"\"Revise your previous answer using the new information.\n", + " - You should use the previous critique to add important information to your answer.\n", + " - You MUST include numerical citations in your revised answer to ensure it can be verified.\n", + " - Add a \"References\" section to the bottom of your answer (which does not count towards the word limit). In form of:\n", + " - [1] https://example.com\n", + " - [2] https://example.com\n", + " - You should use the previous critique to remove superfluous information from your answer and make SURE it is not more than 250 words.\n", + "\"\"\"\n", + "\n", + "\n", + "# Extend the initial answer schema to include references.\n", + "# Forcing citation in the model encourages grounded responses\n", + "class ReviseAnswer(AnswerQuestion):\n", + " \"\"\"Revise your original answer to your question. Provide an answer, reflection,\n", + "\n", + " cite your reflection with references, and finally\n", + " add search queries to improve the answer.\"\"\"\n", + "\n", + " references: list[str] = Field(\n", + " description=\"Citations motivating your updated answer.\"\n", + " )\n", + "\n", + "\n", + "revision_chain = actor_prompt_template.partial(\n", + " first_instruction=revise_instructions,\n", + " function_name=ReviseAnswer.__name__,\n", + ") | llm.bind_tools(tools=[ReviseAnswer])\n", + "revision_validator = PydanticToolsParser(tools=[ReviseAnswer])\n", + "\n", + "revisor = ResponderWithRetries(runnable=revision_chain, validator=revision_validator)" + ] }, { "cell_type": "code", @@ -159,7 +308,25 @@ "output_type": "execute_result" } ], - "source": ["import json\n\nrevised = revisor.respond(\n [\n HumanMessage(content=example_question),\n initial,\n ToolMessage(\n tool_call_id=initial.tool_calls[0][\"id\"],\n content=json.dumps(\n tavily_tool.invoke(\n {\"query\": initial.tool_calls[0][\"args\"][\"search_queries\"][0]}\n )\n ),\n ),\n ]\n)\nrevised"] + "source": [ + "import json\n", + "\n", + "revised = revisor.respond(\n", + " [\n", + " HumanMessage(content=example_question),\n", + " initial,\n", + " ToolMessage(\n", + " tool_call_id=initial.tool_calls[0][\"id\"],\n", + " content=json.dumps(\n", + " tavily_tool.invoke(\n", + " {\"query\": initial.tool_calls[0][\"args\"][\"search_queries\"][0]}\n", + " )\n", + " ),\n", + " ),\n", + " ]\n", + ")\n", + "revised" + ] }, { "cell_type": "markdown", @@ -177,7 +344,24 @@ "id": "fccd6a17", "metadata": {}, "outputs": [], - "source": ["from langchain_core.tools import StructuredTool\n\nfrom langgraph.prebuilt import ToolNode\n\n\ndef run_queries(search_queries: list[str], **kwargs):\n \"\"\"Run the generated queries.\"\"\"\n return tavily_tool.batch([{\"query\": query} for query in search_queries])\n\n\ntool_node = ToolNode(\n [\n StructuredTool.from_function(run_queries, name=AnswerQuestion.__name__),\n StructuredTool.from_function(run_queries, name=ReviseAnswer.__name__),\n ]\n)"] + "source": [ + "from langchain_core.tools import StructuredTool\n", + "\n", + "from langgraph.prebuilt import ToolNode\n", + "\n", + "\n", + "def run_queries(search_queries: list[str], **kwargs):\n", + " \"\"\"Run the generated queries.\"\"\"\n", + " return tavily_tool.batch([{\"query\": query} for query in search_queries])\n", + "\n", + "\n", + "tool_node = ToolNode(\n", + " [\n", + " StructuredTool.from_function(run_queries, name=AnswerQuestion.__name__),\n", + " StructuredTool.from_function(run_queries, name=ReviseAnswer.__name__),\n", + " ]\n", + ")" + ] }, { "cell_type": "markdown", @@ -196,7 +380,55 @@ "id": "3c57318f-a30c-4dbd-9b88-f2633e8cb3b1", "metadata": {}, "outputs": [], - "source": ["from typing import Literal\n\nfrom langgraph.graph import END, MessageGraph, START\n\nMAX_ITERATIONS = 5\nbuilder = MessageGraph()\nbuilder.add_node(\"draft\", first_responder.respond)\n\n\nbuilder.add_node(\"execute_tools\", tool_node)\nbuilder.add_node(\"revise\", revisor.respond)\n# draft -> execute_tools\nbuilder.add_edge(\"draft\", \"execute_tools\")\n# execute_tools -> revise\nbuilder.add_edge(\"execute_tools\", \"revise\")\n\n# Define looping logic:\n\n\ndef _get_num_iterations(state: list):\n i = 0\n for m in state[::-1]:\n if m.type not in {\"tool\", \"ai\"}:\n break\n i += 1\n return i\n\n\ndef event_loop(state: list) -> Literal[\"execute_tools\", \"__end__\"]:\n # in our case, we'll just stop after N plans\n num_iterations = _get_num_iterations(state)\n if num_iterations > MAX_ITERATIONS:\n return END\n return \"execute_tools\"\n\n\n# revise -> execute_tools OR end\nbuilder.add_conditional_edges(\"revise\", event_loop)\nbuilder.add_edge(START, \"draft\")\ngraph = builder.compile()"] + "source": [ + "from typing import Literal\n", + "\n", + "from langgraph.graph import END, StateGraph, START\n", + "from langgraph.graph.message import add_messages\n", + "from typing import Annotated\n", + "from typing_extensions import TypedDict\n", + "\n", + "\n", + "class State(TypedDict):\n", + " messages: Annotated[list, add_messages]\n", + "\n", + "MAX_ITERATIONS = 5\n", + "builder = StateGraph(State)\n", + "builder.add_node(\"draft\", first_responder.respond)\n", + "\n", + "\n", + "builder.add_node(\"execute_tools\", tool_node)\n", + "builder.add_node(\"revise\", revisor.respond)\n", + "# draft -> execute_tools\n", + "builder.add_edge(\"draft\", \"execute_tools\")\n", + "# execute_tools -> revise\n", + "builder.add_edge(\"execute_tools\", \"revise\")\n", + "\n", + "# Define looping logic:\n", + "\n", + "\n", + "def _get_num_iterations(state: list):\n", + " i = 0\n", + " for m in state[::-1]:\n", + " if m.type not in {\"tool\", \"ai\"}:\n", + " break\n", + " i += 1\n", + " return i\n", + "\n", + "\n", + "def event_loop(state: list) -> Literal[\"execute_tools\", \"__end__\"]:\n", + " # in our case, we'll just stop after N plans\n", + " num_iterations = _get_num_iterations(state)\n", + " if num_iterations > MAX_ITERATIONS:\n", + " return END\n", + " return \"execute_tools\"\n", + "\n", + "\n", + "# revise -> execute_tools OR end\n", + "builder.add_conditional_edges(\"revise\", event_loop)\n", + "builder.add_edge(START, \"draft\")\n", + "graph = builder.compile()" + ] }, { "cell_type": "code", @@ -215,7 +447,15 @@ "output_type": "display_data" } ], - "source": ["from IPython.display import Image, display\n\ntry:\n display(Image(graph.get_graph().draw_mermaid_png()))\nexcept Exception:\n # This requires some extra dependencies and is optional\n pass"] + "source": [ + "from IPython.display import Image, display\n", + "\n", + "try:\n", + " display(Image(graph.get_graph().draw_mermaid_png()))\n", + "except Exception:\n", + " # This requires some extra dependencies and is optional\n", + " pass" + ] }, { "cell_type": "code", @@ -330,7 +570,15 @@ ] } ], - "source": ["events = graph.stream(\n [HumanMessage(content=\"How should we handle the climate crisis?\")],\n stream_mode=\"values\",\n)\nfor i, step in enumerate(events):\n print(f\"Step {i}\")\n step[-1].pretty_print()"] + "source": [ + "events = graph.stream(\n", + " [HumanMessage(content=\"How should we handle the climate crisis?\")],\n", + " stream_mode=\"values\",\n", + ")\n", + "for i, step in enumerate(events):\n", + " print(f\"Step {i}\")\n", + " step[-1].pretty_print()" + ] }, { "cell_type": "markdown", diff --git a/libs/langgraph/langgraph/prebuilt/tool_node.py b/libs/langgraph/langgraph/prebuilt/tool_node.py index 24622a4a7..ed7b69553 100644 --- a/libs/langgraph/langgraph/prebuilt/tool_node.py +++ b/libs/langgraph/langgraph/prebuilt/tool_node.py @@ -221,28 +221,34 @@ def tools_condition( ```pycon >>> from langchain_anthropic import ChatAnthropic >>> from langchain_core.tools import tool - >>> - >>> from langgraph.graph import MessageGraph + ... + >>> from langgraph.graph import StateGraph >>> from langgraph.prebuilt import ToolNode, tools_condition - >>> + >>> from langgraph.graph.message import add_messages + ... + >>> from typing import TypedDict, Annotated + ... >>> @tool >>> def divide(a: float, b: float) -> int: - >>> \"\"\"Return a / b.\"\"\" - >>> return a / b - >>> + ... \"\"\"Return a / b.\"\"\" + ... return a / b + ... >>> llm = ChatAnthropic(model="claude-3-haiku-20240307") >>> tools = [divide] + ... + >>> class State(TypedDict): + ... messages: Annotated[list, add_messages] >>> - >>> graph_builder = MessageGraph() + >>> graph_builder = StateGraph(State) >>> graph_builder.add_node("tools", ToolNode(tools)) - >>> graph_builder.add_node("chatbot", llm.bind_tools(tools)) + >>> graph_builder.add_node("chatbot", lambda state: {"messages":llm.bind_tools(tools).invoke(state['messages'])}) >>> graph_builder.add_edge("tools", "chatbot") >>> graph_builder.add_conditional_edges( ... "chatbot", tools_condition ... ) >>> graph_builder.set_entry_point("chatbot") >>> graph = graph_builder.compile() - >>> graph.invoke([("user", "What's 329993 divided by 13662?")]) + >>> graph.invoke({"messages": {"role": "user", "content": "What's 329993 divided by 13662?"}}) ``` """ if isinstance(state, list): diff --git a/libs/langgraph/langgraph/prebuilt/tool_validator.py b/libs/langgraph/langgraph/prebuilt/tool_validator.py index 5f54398f4..73b2cce2b 100644 --- a/libs/langgraph/langgraph/prebuilt/tool_validator.py +++ b/libs/langgraph/langgraph/prebuilt/tool_validator.py @@ -72,13 +72,14 @@ class ValidationNode(RunnableCallable): Examples: Example usage for re-prompting the model to generate a valid response: - >>> from typing import Literal + >>> from typing import Literal, Annotated, TypedDict ... >>> from langchain_anthropic import ChatAnthropic >>> from langchain_core.pydantic_v1 import BaseModel, validator ... - >>> from langgraph.graph import END, START, MessageGraph + >>> from langgraph.graph import END, START, StateGraph >>> from langgraph.prebuilt import ValidationNode + >>> from langgraph.graph.message import add_messages ... ... >>> class SelectNumber(BaseModel): @@ -91,7 +92,10 @@ class ValidationNode(RunnableCallable): ... return v ... ... - >>> builder = MessageGraph() + >>> class State(TypedDict): + ... messages: Annotated[list, add_messages] + ... + >>> builder = StateGraph(State) >>> llm = ChatAnthropic(model="claude-3-haiku-20240307").bind_tools([SelectNumber]) >>> builder.add_node("model", llm) >>> builder.add_node("validation", ValidationNode([SelectNumber])) From 3b2d5f02e118e23892446e53d89eb4e675564d93 Mon Sep 17 00:00:00 2001 From: Isaac Francisco <78627776+isahers1@users.noreply.github.com> Date: Wed, 14 Aug 2024 11:56:43 -0700 Subject: [PATCH 11/35] [docs]: cloud how to for checking thread status (#1346) * draft * nit * harrison comments * spelling --- .../docs/cloud/how-tos/check_thread_status.md | 203 ++++++++++++++++++ docs/docs/cloud/how-tos/index.md | 1 + docs/mkdocs.yml | 1 + 3 files changed, 205 insertions(+) create mode 100644 docs/docs/cloud/how-tos/check_thread_status.md diff --git a/docs/docs/cloud/how-tos/check_thread_status.md b/docs/docs/cloud/how-tos/check_thread_status.md new file mode 100644 index 000000000..cb97b4ba1 --- /dev/null +++ b/docs/docs/cloud/how-tos/check_thread_status.md @@ -0,0 +1,203 @@ +# Check the Status of your Threads + +## Setup + +To start, we can setup our client with whatever URL you are hosting your graph from: + +### SDK initialization + +First, we need to setup our client so that we can communicate with our hosted graph: + +=== "Python" + + ```python + from langgraph_sdk import get_client + client = get_client(url="") + assistant_id = "agent" + thread = await client.threads.create() + ``` + +=== "Javascript" + + ```js + import { Client } from "@langchain/langgraph-sdk"; + + const client = new Client({ apiUrl:"" }); + const assistantId = agent; + const thread = await client.threads.create(); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{ + "metadata": {} + }' + ``` + +## Find idle threads + +We can use the following commands to find threads that are idle, which means that all runs executed on the thread have finished running: + +=== "Python" + + ```python + print(await client.threads.search(status="idle",limit=1)) + ``` + +=== "Javascript" + + ```js + console.log(await client.threads.search({status: "idle",limit:1})); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads/search \ + --header 'Content-Type: application/json' \ + --data '{"status": "idle", "limit": 1}' + ``` + +Output: + + [{'thread_id': 'cacf79bb-4248-4d01-aabc-938dbd60ed2c', + 'created_at': '2024-08-14T17:36:38.921660+00:00', + 'updated_at': '2024-08-14T17:36:38.921660+00:00', + 'metadata': {'graph_id': 'agent'}, + 'status': 'idle', + 'config': {'configurable': {}}}] + + +## Find interrupted threads + +We can use the following commands to find threads that have been interrupted in the middle of a run, which could either mean an error occurred before the run finished or a human-in-the-loop breakpoint was reached and the run is waiting to continue: + +=== "Python" + + ```python + print(await client.threads.search(status="interrupted",limit=1)) + ``` + +=== "Javascript" + + ```js + console.log(await client.threads.search({status: "interrupted",limit:1})); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads/search \ + --header 'Content-Type: application/json' \ + --data '{"status": "interrupted", "limit": 1}' + ``` + +Output: + + [{'thread_id': '0d282b22-bbd5-4d95-9c61-04dcc2e302a5', + 'created_at': '2024-08-14T17:41:50.235455+00:00', + 'updated_at': '2024-08-14T17:41:50.235455+00:00', + 'metadata': {'graph_id': 'agent'}, + 'status': 'interrupted', + 'config': {'configurable': {}}}] + +## Find busy threads + +We can use the following commands to find threads that are busy, meaning they are currently handling the execution of a run: + +=== "Python" + + ```python + print(await client.threads.search(status="busy",limit=1)) + ``` + +=== "Javascript" + + ```js + console.log(await client.threads.search({status: "busy",limit: 1})); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads/search \ + --header 'Content-Type: application/json' \ + --data '{"status": "busy", "limit": 1}' + ``` + +Output: + + [{'thread_id': '0d282b22-bbd5-4d95-9c61-04dcc2e302a5', + 'created_at': '2024-08-14T17:41:50.235455+00:00', + 'updated_at': '2024-08-14T17:41:50.235455+00:00', + 'metadata': {'graph_id': 'agent'}, + 'status': 'busy', + 'config': {'configurable': {}}}] + +## Find specific threads + +You may also want to check the status of specific threads, which you can do in a few ways: + +### Find by ID + +You can use the `get` function to find the status of a specific thread, as long as you have the ID saved + +=== "Python" + + ```python + print((await client.threads.get())['status']) + ``` + +=== "Javascript" + + ```js + console.log((await client.threads.get()).status); + ``` + +=== "CURL" + + ```bash + curl --request GET \ + --url /threads/ \ + --header 'Content-Type: application/json' | jq -r '.status' + ``` + +Output: + + 'idle' + +### Find by metadata + +The search endpoint for threads also allows you to filter on metadata, which can be helpful if you use metadata to tag threads in order to keep them organized: + +=== "Python" + + ```python + print((await client.threads.search(metadata={"foo":"bar"},limit=1))[0]['status']) + ``` + +=== "Javascript" + + ```js + console.log((await client.threads.search({metadata: {"foo":"bar"},limit: 1}))[0].status); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads/search \ + --header 'Content-Type: application/json' \ + --data '{"metadata": {"foo":"bar"}, "limit": 1}' | jq -r '.[0].status' + ``` + +Output: + + 'idle' \ No newline at end of file diff --git a/docs/docs/cloud/how-tos/index.md b/docs/docs/cloud/how-tos/index.md index 80b6ccaa5..59db860da 100644 --- a/docs/docs/cloud/how-tos/index.md +++ b/docs/docs/cloud/how-tos/index.md @@ -73,3 +73,4 @@ Other guides that may prove helpful! - [How to configure agents](cloud_examples/configuration_cloud.ipynb) - [How to convert LangGraph calls to LangGraph cloud calls](cloud_examples/langgraph_to_langgraph_cloud.ipynb) - [How to integrate webhooks](cloud_examples/webhooks.ipynb) +- [How to check status of your threads](./check_thread_status.md) \ No newline at end of file diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index e3159e32b..7daf741f7 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -231,6 +231,7 @@ nav: - Configure Agents: "cloud/how-tos/cloud_examples/configuration_cloud.ipynb" - Convert LangGraph calls to LangGraph Cloud calls: "cloud/how-tos/cloud_examples/langgraph_to_langgraph_cloud.ipynb" - Integrate Webhooks: 'cloud/how-tos/cloud_examples/webhooks.ipynb' + - Check Status of Threads: "cloud/how-tos/check_thread_status.md" - Conceptual Guides: - API Concepts: "cloud/concepts/api.md" - Cloud Concepts: "cloud/concepts/cloud.md" From 8ad797e2619781dff0f199cbda36c3e154aac521 Mon Sep 17 00:00:00 2001 From: Isaac Francisco <78627776+isahers1@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:16:00 -0700 Subject: [PATCH 12/35] fix (#1353) --- examples/introduction.ipynb | 63 +++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 35 deletions(-) diff --git a/examples/introduction.ipynb b/examples/introduction.ipynb index f59622789..3d0287d05 100644 --- a/examples/introduction.ipynb +++ b/examples/introduction.ipynb @@ -1256,19 +1256,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 7, "id": "5a81608a-373a-4339-b1c6-65b73a92b983", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/wfh/code/lc/langchain/libs/core/langchain_core/_api/beta_decorator.py:87: LangChainBetaWarning: The method `ChatAnthropic.bind_tools` is in beta. It is actively being worked on, so the API may change.\n", - " warn_beta(\n" - ] - } - ], + "outputs": [], "source": [ "from typing import Annotated\n", "\n", @@ -1320,12 +1311,12 @@ "id": "813505b2-18c1-46e9-b891-20a34232808b", "metadata": {}, "source": [ - "Now, compile the graph, specifying to `interrupt_before` the `action` node." + "Now, compile the graph, specifying to `interrupt_before` the `tools` node." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 8, "id": "b0883e32-1a39-4ce9-ae32-bbd66708fd84", "metadata": {}, "outputs": [], @@ -1334,14 +1325,14 @@ " checkpointer=memory,\n", " # This is new!\n", " interrupt_before=[\"tools\"],\n", - " # Note: can also interrupt __after__ actions, if desired.\n", + " # Note: can also interrupt __after__ tools, if desired.\n", " # interrupt_after=[\"tools\"]\n", ")" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 9, "id": "9f318020-ab7e-415b-a5e2-eddec6d9f3a6", "metadata": {}, "outputs": [ @@ -1354,10 +1345,10 @@ "I'm learning LangGraph. Could you do some research on it for me?\n", "==================================\u001b[1m Ai Message \u001b[0m==================================\n", "\n", - "[{'text': \"Okay, let's do some research on LangGraph:\", 'type': 'text'}, {'id': 'toolu_01Be7aRgMEv9cg6ezaFjiCry', 'input': {'query': 'LangGraph'}, 'name': 'tavily_search_results_json', 'type': 'tool_use'}]\n", + "[{'text': \"Okay, let's look up some information on LangGraph:\", 'type': 'text'}, {'id': 'toolu_01XoHVKTRbipJokQorfifzvh', 'input': {'query': 'LangGraph'}, 'name': 'tavily_search_results_json', 'type': 'tool_use'}]\n", "Tool Calls:\n", - " tavily_search_results_json (toolu_01Be7aRgMEv9cg6ezaFjiCry)\n", - " Call ID: toolu_01Be7aRgMEv9cg6ezaFjiCry\n", + " tavily_search_results_json (toolu_01XoHVKTRbipJokQorfifzvh)\n", + " Call ID: toolu_01XoHVKTRbipJokQorfifzvh\n", " Args:\n", " query: LangGraph\n" ] @@ -1385,17 +1376,17 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 10, "id": "9bb7af46-9b4f-4bb1-b8b9-e9ddf7dbc82c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "('action',)" + "('tools',)" ] }, - "execution_count": 4, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -1410,12 +1401,12 @@ "id": "89326046-2b11-4812-8b6d-8780306ec275", "metadata": {}, "source": [ - "**Notice** that unlike last time, the \"next\" node is set to **'action'**. We've interrupted here! Let's check the tool invocation." + "**Notice** that unlike last time, the \"next\" node is set to **'tools'**. We've interrupted here! Let's check the tool invocation." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 11, "id": "3facda0a-e6ad-4b28-b627-753ad8c90c15", "metadata": {}, "outputs": [ @@ -1424,10 +1415,11 @@ "text/plain": [ "[{'name': 'tavily_search_results_json',\n", " 'args': {'query': 'LangGraph'},\n", - " 'id': 'toolu_01Be7aRgMEv9cg6ezaFjiCry'}]" + " 'id': 'toolu_01XoHVKTRbipJokQorfifzvh',\n", + " 'type': 'tool_call'}]" ] }, - "execution_count": 5, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -1449,7 +1441,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 12, "id": "effb95d9-b7d5-40c5-9253-253d193b23b2", "metadata": {}, "outputs": [ @@ -1460,18 +1452,19 @@ "=================================\u001b[1m Tool Message \u001b[0m=================================\n", "Name: tavily_search_results_json\n", "\n", - "[{\"url\": \"https://github.com/langchain-ai/langgraph\", \"content\": \"LangGraph is a Python package that extends LangChain Expression Language with the ability to coordinate multiple chains across multiple steps of computation in a cyclic manner. It is inspired by Pregel and Apache Beam and can be used for agent-like behaviors, such as chatbots, with LLMs.\"}, {\"url\": \"https://langchain-ai.github.io/langgraph//\", \"content\": \"LangGraph is a library for building stateful, multi-actor applications with LLMs, built on top of (and intended to be used with) LangChain . It extends the LangChain Expression Language with the ability to coordinate multiple chains (or actors) across multiple steps of computation in a cyclic manner. It is inspired by Pregel and Apache Beam .\"}]\n", + "[{\"url\": \"https://langchain-ai.github.io/langgraph/tutorials/\", \"content\": \"LangGraph is a framework for building language agents as graphs. Learn how to use LangGraph to create chatbots, code assistants, planning agents, reflection agents, and more with these notebooks.\"}, {\"url\": \"https://github.com/langchain-ai/langgraph\", \"content\": \"LangGraph is a library for creating stateful, multi-actor applications with LLMs, using cycles, controllability, and persistence. Learn how to use LangGraph with examples, integration with LangChain, and streaming support.\"}]\n", "==================================\u001b[1m Ai Message \u001b[0m==================================\n", "\n", - "Based on the search results, LangGraph seems to be a Python library that extends the LangChain library to enable more complex, multi-step interactions with large language models (LLMs). Some key points:\n", + "Based on the search results, LangGraph seems to be a framework for building language-based AI agents and applications using language models. It provides a modular, graph-based approach for creating chatbots, code assistants, planning agents, and other language-centric applications.\n", "\n", - "- LangGraph allows coordinating multiple \"chains\" (or actors) over multiple steps of computation, in a cyclic manner. This enables more advanced agent-like behaviors like chatbots.\n", - "- It is inspired by distributed graph processing frameworks like Pregel and Apache Beam.\n", - "- LangGraph is built on top of the LangChain library, which provides a framework for building applications with LLMs.\n", + "Some key things I learned about LangGraph:\n", "\n", - "So in summary, LangGraph appears to be a powerful tool for building more sophisticated applications and agents using large language models, by allowing you to coordinate multiple steps and actors in a flexible, graph-like manner. It extends the capabilities of the base LangChain library.\n", + "- It is designed to make it easier to build stateful, multi-actor applications using large language models (LLMs).\n", + "- It provides features like cycles, controllability, and persistence to help manage the complexity of these types of applications.\n", + "- LangGraph can be integrated with the LangChain library, which provides additional tools for building LLM-powered applications.\n", + "- The framework includes examples and tutorials to help get started with using LangGraph.\n", "\n", - "Let me know if you need any clarification or have additional questions!\n" + "Overall, LangGraph seems like a promising approach for building more advanced, graph-based language applications on top of large language models. Let me know if you need any other details on LangGraph and how it works!\n" ] } ], @@ -3068,9 +3061,9 @@ ], "metadata": { "kernelspec": { - "display_name": "langgraph", + "display_name": "env", "language": "python", - "name": "langgraph" + "name": "python3" }, "language_info": { "codemirror_mode": { From 2c8fc3c9c67085065c733910b029427f28271376 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Wed, 14 Aug 2024 17:48:35 -0700 Subject: [PATCH 13/35] Add missing attributes to checkpoint event in debug output --- libs/langgraph/langgraph/pregel/debug.py | 13 ++++++++---- libs/langgraph/langgraph/pregel/loop.py | 27 ++++++++++++++---------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/libs/langgraph/langgraph/pregel/debug.py b/libs/langgraph/langgraph/pregel/debug.py index 9e152cf87..4aed748ae 100644 --- a/libs/langgraph/langgraph/pregel/debug.py +++ b/libs/langgraph/langgraph/pregel/debug.py @@ -9,8 +9,8 @@ from langchain_core.runnables.config import RunnableConfig from langchain_core.utils.input import get_bolded_text, get_colored_text from langgraph.channels.base import BaseChannel -from langgraph.checkpoint.base import CheckpointMetadata -from langgraph.constants import TAG_HIDDEN +from langgraph.checkpoint.base import Checkpoint, CheckpointMetadata, PendingWrite +from langgraph.constants import INTERRUPT, TAG_HIDDEN from langgraph.pregel.io import read_channels from langgraph.pregel.types import PregelExecutableTask @@ -118,16 +118,21 @@ def map_debug_checkpoint( channels: Mapping[str, BaseChannel], stream_channels: Union[str, Sequence[str]], metadata: CheckpointMetadata, + checkpoint: Checkpoint, + tasks: list[PregelExecutableTask], + pending_writes: list[PendingWrite], ) -> Iterator[DebugOutputCheckpoint]: - ts = datetime.now(timezone.utc).isoformat() yield { "type": "checkpoint", - "timestamp": ts, + "timestamp": checkpoint["ts"], "step": step, "payload": { + "id": checkpoint["id"], "config": config, "values": read_channels(channels, stream_channels), "metadata": metadata, + "next": [t.name for t in tasks], + "interrupts": [v for tid, n, v in pending_writes or [] if n == INTERRUPT], }, } diff --git a/libs/langgraph/langgraph/pregel/loop.py b/libs/langgraph/langgraph/pregel/loop.py index 0508cd942..f65b8174f 100644 --- a/libs/langgraph/langgraph/pregel/loop.py +++ b/libs/langgraph/langgraph/pregel/loop.py @@ -228,6 +228,22 @@ class PregelLoop: is_resuming=self.input is INPUT_RESUMING, ) + # produce debug output + if self._checkpointer_put_after_previous is not None: + self.stream.extend( + ("debug", v) + for v in map_debug_checkpoint( + self.step, + self.checkpoint_config, + self.channels, + self.graph.stream_channels_asis, + self.checkpoint_metadata, + self.checkpoint, + self.tasks, + self.checkpoint_pending_writes, + ) + ) + # if no more tasks, we're done if not self.tasks: self.status = "done" @@ -361,17 +377,6 @@ class PregelLoop: "checkpoint_id": self.checkpoint["id"], }, } - # produce debug output - self.stream.extend( - ("debug", v) - for v in map_debug_checkpoint( - self.step, - self.checkpoint_config, - self.channels, - self.graph.stream_channels_asis, - self.checkpoint_metadata, - ) - ) # increment step self.step += 1 From c701fef6345e0a00a2be7a042592d9a95f5d88c0 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Thu, 15 Aug 2024 09:40:53 -0700 Subject: [PATCH 14/35] Lint --- libs/langgraph/langgraph/pregel/debug.py | 4 +--- libs/langgraph/langgraph/pregel/loop.py | 2 +- libs/langgraph/tests/test_pregel.py | 5 +++++ libs/langgraph/tests/test_pregel_async.py | 5 +++++ 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/libs/langgraph/langgraph/pregel/debug.py b/libs/langgraph/langgraph/pregel/debug.py index 4aed748ae..3dbb46675 100644 --- a/libs/langgraph/langgraph/pregel/debug.py +++ b/libs/langgraph/langgraph/pregel/debug.py @@ -10,7 +10,7 @@ from langchain_core.utils.input import get_bolded_text, get_colored_text from langgraph.channels.base import BaseChannel from langgraph.checkpoint.base import Checkpoint, CheckpointMetadata, PendingWrite -from langgraph.constants import INTERRUPT, TAG_HIDDEN +from langgraph.constants import TAG_HIDDEN from langgraph.pregel.io import read_channels from langgraph.pregel.types import PregelExecutableTask @@ -127,12 +127,10 @@ def map_debug_checkpoint( "timestamp": checkpoint["ts"], "step": step, "payload": { - "id": checkpoint["id"], "config": config, "values": read_channels(channels, stream_channels), "metadata": metadata, "next": [t.name for t in tasks], - "interrupts": [v for tid, n, v in pending_writes or [] if n == INTERRUPT], }, } diff --git a/libs/langgraph/langgraph/pregel/loop.py b/libs/langgraph/langgraph/pregel/loop.py index f65b8174f..cd4bff66a 100644 --- a/libs/langgraph/langgraph/pregel/loop.py +++ b/libs/langgraph/langgraph/pregel/loop.py @@ -233,7 +233,7 @@ class PregelLoop: self.stream.extend( ("debug", v) for v in map_debug_checkpoint( - self.step, + self.step - 1, # printing checkpoint for previous step self.checkpoint_config, self.channels, self.graph.stream_channels_asis, diff --git a/libs/langgraph/tests/test_pregel.py b/libs/langgraph/tests/test_pregel.py index af7f0920a..d6a83e783 100644 --- a/libs/langgraph/tests/test_pregel.py +++ b/libs/langgraph/tests/test_pregel.py @@ -6260,6 +6260,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "step": -1, "writes": {"my_key": "value", "market": "DE"}, }, + "next": ["__start__"], }, }, { @@ -6287,6 +6288,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "step": 0, "writes": None, }, + "next": ["prepare"], }, }, { @@ -6335,6 +6337,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "step": 1, "writes": {"prepare": {"my_key": " prepared"}}, }, + "next": ["tool_two_slow"], }, }, { @@ -6383,6 +6386,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "step": 2, "writes": {"tool_two_slow": {"my_key": " slow"}}, }, + "next": ["finish"], }, }, { @@ -6431,6 +6435,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "step": 3, "writes": {"finish": {"my_key": " finished"}}, }, + "next": [], }, }, ] diff --git a/libs/langgraph/tests/test_pregel_async.py b/libs/langgraph/tests/test_pregel_async.py index 67b62941b..ef49aed62 100644 --- a/libs/langgraph/tests/test_pregel_async.py +++ b/libs/langgraph/tests/test_pregel_async.py @@ -4885,6 +4885,7 @@ async def test_branch_then() -> None: "step": -1, "writes": {"my_key": "value", "market": "DE"}, }, + "next": ["__start__"], }, }, { @@ -4912,6 +4913,7 @@ async def test_branch_then() -> None: "step": 0, "writes": None, }, + "next": ["prepare"], }, }, { @@ -4960,6 +4962,7 @@ async def test_branch_then() -> None: "step": 1, "writes": {"prepare": {"my_key": " prepared"}}, }, + "next": ["tool_two_slow"], }, }, { @@ -5008,6 +5011,7 @@ async def test_branch_then() -> None: "step": 2, "writes": {"tool_two_slow": {"my_key": " slow"}}, }, + "next": ["finish"], }, }, { @@ -5056,6 +5060,7 @@ async def test_branch_then() -> None: "step": 3, "writes": {"finish": {"my_key": " finished"}}, }, + "next": [], }, }, ] From d07cbd34ceee58cb34280acadaf7d0262182b7f0 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Thu, 15 Aug 2024 10:19:50 -0700 Subject: [PATCH 15/35] checkpoint1.0.3 --- libs/checkpoint/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/checkpoint/pyproject.toml b/libs/checkpoint/pyproject.toml index 815a9b8da..b17a77238 100644 --- a/libs/checkpoint/pyproject.toml +++ b/libs/checkpoint/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langgraph-checkpoint" -version = "1.0.2" +version = "1.0.3" description = "Library with base interfaces for LangGraph checkpoint savers." authors = [] license = "MIT" From 388a9643a575b73029ee8d17eae6c0bb4f6c449c Mon Sep 17 00:00:00 2001 From: Isaac Francisco <78627776+isahers1@users.noreply.github.com> Date: Thu, 15 Aug 2024 11:19:18 -0700 Subject: [PATCH 16/35] [docs]: copying threads (#1350) * wip * wip * wip * vadym comments --- docs/docs/cloud/how-tos/copy_threads.md | 132 ++++++++++++++++++++++++ docs/docs/cloud/how-tos/index.md | 3 +- docs/mkdocs.yml | 1 + 3 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 docs/docs/cloud/how-tos/copy_threads.md diff --git a/docs/docs/cloud/how-tos/copy_threads.md b/docs/docs/cloud/how-tos/copy_threads.md new file mode 100644 index 000000000..9a27282b2 --- /dev/null +++ b/docs/docs/cloud/how-tos/copy_threads.md @@ -0,0 +1,132 @@ +# Copying Threads + +You may wish to copy (i.e. "fork") an existing thread in order to keep the existing thread's history and create independent runs that do not affect the original thread. This guide shows how you can do that. + +## Setup + +This code assumes you already have a thread to copy. You can read about what a thread is [here](https://langchain-ai.github.io/langgraph/cloud/concepts/api/#threads) and learn how to stream a run on a thread in [these how-to guides](https://langchain-ai.github.io/langgraph/cloud/how-tos/#streaming). + +### SDK initialization + +First, we need to setup our client so that we can communicate with our hosted graph: + +=== "Python" + + ```python + from langgraph_sdk import get_client + client = get_client(url="") + assistant_id = "agent" + thread = await client.threads.create() + ``` + +=== "Javascript" + + ```js + import { Client } from "@langchain/langgraph-sdk"; + + const client = new Client({ apiUrl:"" }); + const assistantId = agent; + const thread = await client.threads.create(); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{ + "metadata": {} + }' + ``` + +## Copying a thread + +The code below assumes that a thread you'd like to copy already exists. + +Copying a thread will create a new thread with the same history as the existing thread, and then allow you to continue executing runs. + +### Create copy + +=== "Python" + + ```python + copied_thread = await client.threads.copy() + ``` + +=== "Javascript" + + ```js + let copiedThread = await client.threads.copy(); + ``` + +=== "CURL" + + ```bash + curl --request POST --url /threads//copy \ + --header 'Content-Type: application/json' + ``` + +### Verify copy + +We can verify that the history from the prior thread did indeed copy over correctly: + +=== "Python" + + ```python + def remove_thread_id(d): + if 'metadata' in d and 'thread_id' in d['metadata']: + del d['metadata']['thread_id'] + return d + + original_thread_history = list(map(remove_thread_id,await client.threads.get_history())) + copied_thread_history = list(map(remove_thread_id,await client.threads.get_history(copied_thread['thread_id']))) + + # Compare the two histories + assert original_thread_history == copied_thread_history + # if we made it here the assertion passed! + print("The histories are the same.") + ``` + +=== "Javascript" + + ```js + function removeThreadId(d) { + if (d.metadata && d.metadata.thread_id) { + delete d.metadata.thread_id; + } + return d; + } + + // Assuming `client.threads.getHistory(threadId)` is an async function that returns a list of dicts + async function compareThreadHistories(threadId, copiedThreadId) { + const originalThreadHistory = (await client.threads.getHistory(threadId)).map(removeThreadId); + const copiedThreadHistory = (await client.threads.getHistory(copiedThreadId)).map(removeThreadId); + + // Compare the two histories + console.assert(JSON.stringify(originalThreadHistory) === JSON.stringify(copiedThreadHistory)) + // if we made it here the assertion passed! + console.log("The histories are the same."); + } + + // Example usage + compareThreadHistories(, copiedThread.thread_id); + ``` + +=== "CURL" + + ```bash + if diff <( + curl --request GET --url /threads//history | jq -S 'map(del(.metadata.thread_id))' + ) <( + curl --request GET --url /threads//history | jq -S 'map(del(.metadata.thread_id))' + ) >/dev/null; then + echo "The histories are the same." + else + echo "The histories are different." + fi + ``` + +Output: + + The histories are the same. \ No newline at end of file diff --git a/docs/docs/cloud/how-tos/index.md b/docs/docs/cloud/how-tos/index.md index 59db860da..255490d32 100644 --- a/docs/docs/cloud/how-tos/index.md +++ b/docs/docs/cloud/how-tos/index.md @@ -73,4 +73,5 @@ Other guides that may prove helpful! - [How to configure agents](cloud_examples/configuration_cloud.ipynb) - [How to convert LangGraph calls to LangGraph cloud calls](cloud_examples/langgraph_to_langgraph_cloud.ipynb) - [How to integrate webhooks](cloud_examples/webhooks.ipynb) -- [How to check status of your threads](./check_thread_status.md) \ No newline at end of file +- [How to copy threads](./copy_threads.md) +- [How to check status of your threads](./check_thread_status.md) diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 7daf741f7..d4c24a322 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -231,6 +231,7 @@ nav: - Configure Agents: "cloud/how-tos/cloud_examples/configuration_cloud.ipynb" - Convert LangGraph calls to LangGraph Cloud calls: "cloud/how-tos/cloud_examples/langgraph_to_langgraph_cloud.ipynb" - Integrate Webhooks: 'cloud/how-tos/cloud_examples/webhooks.ipynb' + - Copy Threads: 'cloud/how-tos/copy_threads.md' - Check Status of Threads: "cloud/how-tos/check_thread_status.md" - Conceptual Guides: - API Concepts: "cloud/concepts/api.md" From 64636ee978e86e2407967c09b7de0c3f49e8c3fd Mon Sep 17 00:00:00 2001 From: Isaac Francisco <78627776+isahers1@users.noreply.github.com> Date: Thu, 15 Aug 2024 11:25:53 -0700 Subject: [PATCH 17/35] [docs]: add auth and small changes (#1356) * wip * m * nit --- docs/docs/cloud/deployment/test_locally.md | 83 +++++++++++++++++++ .../docs/cloud/how-tos/check_thread_status.md | 9 +- docs/docs/cloud/how-tos/enqueue_concurrent.md | 4 +- .../how-tos/human_in_the_loop_breakpoint.md | 9 +- .../how-tos/human_in_the_loop_edit_state.md | 9 +- .../human_in_the_loop_review_tool_calls.md | 4 +- .../how-tos/human_in_the_loop_time_travel.md | 9 +- .../how-tos/human_in_the_loop_user_input.md | 9 +- .../cloud/how-tos/interrupt_concurrent.md | 4 +- docs/docs/cloud/how-tos/reject_concurrent.md | 4 +- .../docs/cloud/how-tos/rollback_concurrent.md | 4 +- docs/docs/cloud/how-tos/stream_debug.md | 4 +- docs/docs/cloud/how-tos/stream_events.md | 9 +- docs/docs/cloud/how-tos/stream_messages.md | 9 +- docs/docs/cloud/how-tos/stream_multiple.md | 9 +- docs/docs/cloud/how-tos/stream_updates.md | 9 +- docs/docs/cloud/how-tos/stream_values.md | 9 +- 17 files changed, 125 insertions(+), 72 deletions(-) diff --git a/docs/docs/cloud/deployment/test_locally.md b/docs/docs/cloud/deployment/test_locally.md index d25ecfc79..a5a06624a 100644 --- a/docs/docs/cloud/deployment/test_locally.md +++ b/docs/docs/cloud/deployment/test_locally.md @@ -38,6 +38,46 @@ Ready! We can now interact with the API server using the LangGraph SDK. First, we need to start our client, select our assistant (in this case a graph we called "agent", make sure to select the proper assistant you wish to test). +You can either initialize by passing authentication or by setting an environment variable. + +#### Initialize with authentication + +=== "Python" + + ```python + from langgraph_sdk import get_client + + # only pass the url argument to get_client() if you changed the default port when calling langgraph up + client = get_client(url=,api_key=) + assistant_id = "agent" + thread = await client.threads.create() + ``` + +=== "Javascript" + + ```js + import { Client } from "@langchain/langgraph-sdk"; + + // only set the apiUrl if you changed the default port when calling langgraph up + const client = new Client({ apiUrl: , apiKey: }); + const assistantId = "agent" + const thread = await client.threads.create(); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' + --header 'x-api-key: ' + ``` + + +#### Initialize with environment variables + +If you have a `LANGCHAIN_API_KEY` set in your environment, you do not need to explicitly pass authentication to the client + === "Python" ```python @@ -60,6 +100,14 @@ We can now interact with the API server using the LangGraph SDK. First, we need const thread = await client.threads.create(); ``` +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' + ``` + Now we can invoke our graph to ensure it is working. Make sure to change the input to match the proper schema for your graph. === "Python" @@ -96,4 +144,39 @@ Now we can invoke our graph to ensure it is working. Make sure to change the inp } ``` + === "CURL" + + ```bash + curl --request POST \ + --url /threads//runs/stream \ + --header 'Content-Type: application/json' \ + --data "{ + \"assistant_id\": \"agent\", + \"input\": {\"messages\": [{\"role\": \"human\", \"content\": \"what's the weather in sf\"}]}, + \"stream_mode\": [ + \"events\" + ] + }" | \ + sed 's/\r$//' | \ + awk ' + /^event:/ { + if (data_content != "") { + print data_content "\n" + } + sub(/^event: /, "Receiving event of type: ", $0) + printf "%s...\n", $0 + data_content = "" + } + /^data:/ { + sub(/^data: /, "", $0) + data_content = $0 + } + END { + if (data_content != "") { + print data_content "\n" + } + } + ' + ``` + If your graph works correctly, you should see your graph output displayed in the console. Of course, there are many more ways you might need to test your graph, for a full list of commands you can send with the SDK, see the [Python](https://langchain-ai.github.io/langgraph/cloud/reference/sdk/python_sdk_ref/) and [JS/TS](https://langchain-ai.github.io/langgraph/cloud/reference/sdk/js_ts_sdk_ref/) references. \ No newline at end of file diff --git a/docs/docs/cloud/how-tos/check_thread_status.md b/docs/docs/cloud/how-tos/check_thread_status.md index cb97b4ba1..655b918c1 100644 --- a/docs/docs/cloud/how-tos/check_thread_status.md +++ b/docs/docs/cloud/how-tos/check_thread_status.md @@ -12,7 +12,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```python from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) assistant_id = "agent" thread = await client.threads.create() ``` @@ -22,7 +22,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); const assistantId = agent; const thread = await client.threads.create(); ``` @@ -32,10 +32,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```bash curl --request POST \ --url /threads \ - --header 'Content-Type: application/json' \ - --data '{ - "metadata": {} - }' + --header 'Content-Type: application/json' ``` ## Find idle threads diff --git a/docs/docs/cloud/how-tos/enqueue_concurrent.md b/docs/docs/cloud/how-tos/enqueue_concurrent.md index 391550ee1..17c4ea0f5 100644 --- a/docs/docs/cloud/how-tos/enqueue_concurrent.md +++ b/docs/docs/cloud/how-tos/enqueue_concurrent.md @@ -31,7 +31,7 @@ Then, let's import our required packages and instantiate our client, assistant, from langchain_core.messages import convert_to_messages from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) assistant_id = "agent" thread = await client.threads.create() ``` @@ -42,7 +42,7 @@ Then, let's import our required packages and instantiate our client, assistant, import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); const assistantId = "agent"; const thread = await client.threads.create(); ``` diff --git a/docs/docs/cloud/how-tos/human_in_the_loop_breakpoint.md b/docs/docs/cloud/how-tos/human_in_the_loop_breakpoint.md index 180547b54..56c1931e2 100644 --- a/docs/docs/cloud/how-tos/human_in_the_loop_breakpoint.md +++ b/docs/docs/cloud/how-tos/human_in_the_loop_breakpoint.md @@ -21,7 +21,7 @@ In this how-to we use a simple ReAct style hosted graph (you can see the full co ```python from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) assistant_id = "agent" thread = await client.threads.create() ``` @@ -31,7 +31,7 @@ In this how-to we use a simple ReAct style hosted graph (you can see the full co ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); const assistantId = "agent" const thread = await client.threads.create(); ``` @@ -41,10 +41,7 @@ In this how-to we use a simple ReAct style hosted graph (you can see the full co ```bash curl --request POST \ --url /threads \ - --header 'Content-Type: application/json' \ - --data '{ - "metadata": {} - }' + --header 'Content-Type: application/json' ``` ## Adding a breakpoint diff --git a/docs/docs/cloud/how-tos/human_in_the_loop_edit_state.md b/docs/docs/cloud/how-tos/human_in_the_loop_edit_state.md index e9871c2ff..668d826a8 100644 --- a/docs/docs/cloud/how-tos/human_in_the_loop_edit_state.md +++ b/docs/docs/cloud/how-tos/human_in_the_loop_edit_state.md @@ -17,7 +17,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```python from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) assistant_id = "agent" thread = await client.threads.create() ``` @@ -27,7 +27,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); const assistantId = "agent"; const thread = await client.threads.create(); ``` @@ -37,10 +37,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```bash curl --request POST \ --url /threads \ - --header 'Content-Type: application/json' \ - --data '{ - "metadata": {} - }' + --header 'Content-Type: application/json' ``` ## Editing state diff --git a/docs/docs/cloud/how-tos/human_in_the_loop_review_tool_calls.md b/docs/docs/cloud/how-tos/human_in_the_loop_review_tool_calls.md index c730e9e01..e9a698181 100644 --- a/docs/docs/cloud/how-tos/human_in_the_loop_review_tool_calls.md +++ b/docs/docs/cloud/how-tos/human_in_the_loop_review_tool_calls.md @@ -28,7 +28,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```python from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) assistant_id = "agent" thread = await client.threads.create() ``` @@ -38,7 +38,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); const assistantId = "agent"; const thread = await client.threads.create(); ``` diff --git a/docs/docs/cloud/how-tos/human_in_the_loop_time_travel.md b/docs/docs/cloud/how-tos/human_in_the_loop_time_travel.md index 36c8fe941..aac3ee566 100644 --- a/docs/docs/cloud/how-tos/human_in_the_loop_time_travel.md +++ b/docs/docs/cloud/how-tos/human_in_the_loop_time_travel.md @@ -14,7 +14,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```python from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) assistant_id = "agent" thread = await client.threads.create() ``` @@ -24,7 +24,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); const assistantId = agent; const thread = await client.threads.create(); ``` @@ -34,10 +34,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```bash curl --request POST \ --url /threads \ - --header 'Content-Type: application/json' \ - --data '{ - "metadata": {} - }' + --header 'Content-Type: application/json' ``` ## Replay a state diff --git a/docs/docs/cloud/how-tos/human_in_the_loop_user_input.md b/docs/docs/cloud/how-tos/human_in_the_loop_user_input.md index 068a0bb00..9b9d1392e 100644 --- a/docs/docs/cloud/how-tos/human_in_the_loop_user_input.md +++ b/docs/docs/cloud/how-tos/human_in_the_loop_user_input.md @@ -24,7 +24,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```python from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) assistant_id = "agent" thread = await client.threads.create() ``` @@ -34,7 +34,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); const assistantId = "agent"; const thread = await client.threads.create(); ``` @@ -44,10 +44,7 @@ First, we need to setup our client so that we can communicate with our hosted gr ```bash curl --request POST \ --url /threads \ - --header 'Content-Type: application/json' \ - --data '{ - "metadata": {} - }' + --header 'Content-Type: application/json' ``` ## Waiting for user input diff --git a/docs/docs/cloud/how-tos/interrupt_concurrent.md b/docs/docs/cloud/how-tos/interrupt_concurrent.md index 7c2792b45..d58df875b 100644 --- a/docs/docs/cloud/how-tos/interrupt_concurrent.md +++ b/docs/docs/cloud/how-tos/interrupt_concurrent.md @@ -29,7 +29,7 @@ Now, let's import our required packages and instantiate our client, assistant, a from langchain_core.messages import convert_to_messages from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) assistant_id = "agent" thread = await client.threads.create() ``` @@ -39,7 +39,7 @@ Now, let's import our required packages and instantiate our client, assistant, a ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); const assistantId = "agent"; const thread = await client.threads.create(); ``` diff --git a/docs/docs/cloud/how-tos/reject_concurrent.md b/docs/docs/cloud/how-tos/reject_concurrent.md index 1f69541fe..22d0ae30c 100644 --- a/docs/docs/cloud/how-tos/reject_concurrent.md +++ b/docs/docs/cloud/how-tos/reject_concurrent.md @@ -28,7 +28,7 @@ Now, let's import our required packages and instantiate our client, assistant, a from langchain_core.messages import convert_to_messages from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) assistant_id = "agent" thread = await client.threads.create() ``` @@ -38,7 +38,7 @@ Now, let's import our required packages and instantiate our client, assistant, a ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); const assistantId = "agent"; const thread = await client.threads.create(); ``` diff --git a/docs/docs/cloud/how-tos/rollback_concurrent.md b/docs/docs/cloud/how-tos/rollback_concurrent.md index 0e8f39aad..6fa34eb95 100644 --- a/docs/docs/cloud/how-tos/rollback_concurrent.md +++ b/docs/docs/cloud/how-tos/rollback_concurrent.md @@ -30,7 +30,7 @@ Now, let's import our required packages and instantiate our client, assistant, a from langchain_core.messages import convert_to_messages from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) assistant_id = "agent" thread = await client.threads.create() ``` @@ -40,7 +40,7 @@ Now, let's import our required packages and instantiate our client, assistant, a ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); const assistantId = "agent"; const thread = await client.threads.create(); ``` diff --git a/docs/docs/cloud/how-tos/stream_debug.md b/docs/docs/cloud/how-tos/stream_debug.md index 78c2e34b9..e580286ca 100644 --- a/docs/docs/cloud/how-tos/stream_debug.md +++ b/docs/docs/cloud/how-tos/stream_debug.md @@ -9,7 +9,7 @@ First let's set up our client and thread: ```python from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) # create thread thread = await client.threads.create() print(thread) @@ -20,7 +20,7 @@ First let's set up our client and thread: ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); // create thread const thread = await client.threads.create(); console.log(thread) diff --git a/docs/docs/cloud/how-tos/stream_events.md b/docs/docs/cloud/how-tos/stream_events.md index fc02e3fff..3b0c58177 100644 --- a/docs/docs/cloud/how-tos/stream_events.md +++ b/docs/docs/cloud/how-tos/stream_events.md @@ -6,7 +6,7 @@ This guide covers how to stream events from your graph (`stream_mode="events"`). ```python from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) # create thread thread = await client.threads.create() print(thread) @@ -17,7 +17,7 @@ This guide covers how to stream events from your graph (`stream_mode="events"`). ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); // create thread const thread = await client.threads.create(); console.log(thread) @@ -28,10 +28,7 @@ This guide covers how to stream events from your graph (`stream_mode="events"`). ```bash curl --request POST \ --url /threads \ - --header 'Content-Type: application/json' \ - --data '{ - "metadata": {} - }' + --header 'Content-Type: application/json' ``` Output: diff --git a/docs/docs/cloud/how-tos/stream_messages.md b/docs/docs/cloud/how-tos/stream_messages.md index cdcf004e2..c25f2ccdd 100644 --- a/docs/docs/cloud/how-tos/stream_messages.md +++ b/docs/docs/cloud/how-tos/stream_messages.md @@ -41,7 +41,7 @@ First let's set up our client and thread: ```python from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) # create thread thread = await client.threads.create() print(thread) @@ -52,7 +52,7 @@ First let's set up our client and thread: ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); // create thread const thread = await client.threads.create(); console.log(thread) @@ -63,10 +63,7 @@ First let's set up our client and thread: ```bash curl --request POST \ --url /threads \ - --header 'Content-Type: application/json' \ - --data '{ - "metadata": {} - }' + --header 'Content-Type: application/json' ``` Output: diff --git a/docs/docs/cloud/how-tos/stream_multiple.md b/docs/docs/cloud/how-tos/stream_multiple.md index d2d349099..2f03fb550 100644 --- a/docs/docs/cloud/how-tos/stream_multiple.md +++ b/docs/docs/cloud/how-tos/stream_multiple.md @@ -9,7 +9,7 @@ First let's set up our client and thread: ```python from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) # create thread thread = await client.threads.create() print(thread) @@ -20,7 +20,7 @@ First let's set up our client and thread: ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); // create thread const thread = await client.threads.create(); console.log(thread) @@ -31,10 +31,7 @@ First let's set up our client and thread: ```bash curl --request POST \ --url /threads \ - --header 'Content-Type: application/json' \ - --data '{ - "metadata": {} - }' + --header 'Content-Type: application/json' ``` Output: diff --git a/docs/docs/cloud/how-tos/stream_updates.md b/docs/docs/cloud/how-tos/stream_updates.md index 7b3d4730c..38edc3381 100644 --- a/docs/docs/cloud/how-tos/stream_updates.md +++ b/docs/docs/cloud/how-tos/stream_updates.md @@ -16,7 +16,7 @@ First let's set up our client and thread: ```python from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) # create thread thread = await client.threads.create() print(thread) @@ -27,7 +27,7 @@ First let's set up our client and thread: ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl:"" }); + const client = new Client({ apiUrl: }); // create thread const thread = await client.threads.create(); console.log(thread) @@ -38,10 +38,7 @@ First let's set up our client and thread: ```bash curl --request POST \ --url /threads \ - --header 'Content-Type: application/json' \ - --data '{ - "metadata": {} - }' + --header 'Content-Type: application/json' ``` Output: diff --git a/docs/docs/cloud/how-tos/stream_values.md b/docs/docs/cloud/how-tos/stream_values.md index 34282bd71..bb2c237eb 100644 --- a/docs/docs/cloud/how-tos/stream_values.md +++ b/docs/docs/cloud/how-tos/stream_values.md @@ -16,7 +16,7 @@ First let's set up our client and thread: ```python from langgraph_sdk import get_client - client = get_client(url="") + client = get_client(url=) # create thread thread = await client.threads.create() print(thread) @@ -27,7 +27,7 @@ First let's set up our client and thread: ```js import { Client } from "@langchain/langgraph-sdk"; - const client = new Client({ apiUrl: "" }); + const client = new Client({ apiUrl: }); // create thread const thread = await client.threads.create(); console.log(thread) @@ -38,10 +38,7 @@ First let's set up our client and thread: ```bash curl --request POST \ --url /threads \ - --header 'Content-Type: application/json' \ - --data '{ - "metadata": {} - }' + --header 'Content-Type: application/json' ``` Output: From ce37fd3a0427f2d0213b816e5abac4523c43dec7 Mon Sep 17 00:00:00 2001 From: Isaac Francisco <78627776+isahers1@users.noreply.github.com> Date: Thu, 15 Aug 2024 11:56:00 -0700 Subject: [PATCH 18/35] [docs]: studio faqs (#1207) * draft * spelling * rephrases * vadym comments --- docs/docs/cloud/faq/studio.md | 65 +++++++++++++++++++++++++++++++++++ docs/mkdocs.yml | 2 ++ 2 files changed, 67 insertions(+) create mode 100644 docs/docs/cloud/faq/studio.md diff --git a/docs/docs/cloud/faq/studio.md b/docs/docs/cloud/faq/studio.md new file mode 100644 index 000000000..cef962f34 --- /dev/null +++ b/docs/docs/cloud/faq/studio.md @@ -0,0 +1,65 @@ +# Studio FAQs + +## Why is my project failing to start? + +There are a few reasons that your project might fail to start, here are some of the most common ones. + +### Docker issues + +LangGraph Studio requires Docker Desktop version 4.24 or higher. Please make sure you have a version of Docker installed that satisfies that requirement and also make sure you have the Docker Desktop app up and running before trying to use LangGraph Studio. In addition, make sure you have docker-compose updated to version 2.22.0 or higher. + +### Configuration or environment issues + +Another reason your project might fail to start is because your configuration file is defined incorrectly, or you are missing required environment variables. + +## How does interrupt work? + +When you select the `Interrupts` dropdown and select a node to interrupt the graph will pause execution before and after (unless the node goes straight to `END`) that node has run. This means that you will be able to both edit the state before the node is ran and the state after the node has ran. This is intended to allow developers more fine-grained control over the behavior of a node and make it easier to observe how the node is behaving. You will not be able to edit the state after the node has ran if the node is the final node in the graph. + +## How do I reload the app? + +If you would like to reload the app, don't use Command+R as you might normally do. Instead, close and reopen the app for a full refresh. + +## How does automatic rebuilding work? + +One of the key features of LangGraph Studio is that it automatically rebuilds your image when you change the source code. This allows for a super fast development and testing cycle which makes it easy to iterate on your graph. There are two different ways that LangGraph rebuilds your image: either by editing the image or completely rebuilding it. + +### Rebuilds from source code changes + +If you modified the source code only (no configuration or dependency changes!) then the image does not require a full rebuild, and LangGraph Studio will only update the relevant parts. The UI status in the bottom left will switch from `Online` to `Stopping` temporarily while the image gets edited. The logs will be shown as this process is happening, and after the image has been edited the status will change back to `Online` and you will be able to run your graph with the modified code! + + +### Rebuilds from configuration or dependency changes + +If you edit your graph configuration file (`langgraph.json`) or the dependencies (either `pyproject.toml` or `requirements.txt`) then the entire image will be rebuilt. This will cause the UI to switch away from the graph view and start showing the logs of the new image building process. This can take a minute or two, and once it is done your updated image will be ready to use! + +## Why is my graph taking so long to startup? + +The LangGraph Studio interacts with a local LangGraph API server. To stay aligned with ongoing updates, the LangGraph API requires regular rebuilding. As a result, you may occasionally experience slight delays when starting up your project. + +## Why are extra edges showing up in my graph? + +If you don't define your conditional edges carefully, you might notice extra edges appearing in your graph. This is because without proper definition, LangGraph Studio assumes the conditional edge could access all other nodes. In order for this to not be the case, you need to be explicit about how you define the nodes the conditional edge routes to. There are two ways you can do this: + +### Solution 1: Include a path map + +The first way to solve this is to add path maps to your conditional edges. A path map is just a dictionary that maps the possible outputs of your router function with the names of the nodes that each output corresponds to. The path map is passed as the third argument to the `add_conditional_edges` function like so: + +```python +graph.add_conditional_edges("node_a", routing_function, {True: "node_b", False: "node_c"}) +``` + +In this case, the routing function returns either True or False, which map to `node_b` and `node_c` respectively. + +### Solution 2: Update the typing of the router + +Instead of passing a path map, you can also be explicit about the typing of your routing function by specifying the nodes it can map to using the `Literal` python definition. Here is an example of how to define a routing function in that way: + +```python +def routing_function(state: GraphState) -> Literal["node_b","node_c"]: + if state['some_condition'] == True: + return "node_a" + else: + return "node_b" +``` + diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index d4c24a322..3bc3f3d24 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -243,6 +243,8 @@ nav: - JS/TS: "cloud/reference/sdk/js_ts_sdk_ref.md" - CLI: "cloud/reference/cli.md" - Environment Variables: "cloud/reference/env_var.md" + - FAQ: + - Studio: "cloud/faq/studio.md" markdown_extensions: - abbr From d15c5a46de3f4065741f1e654f4b61ca8290b00d Mon Sep 17 00:00:00 2001 From: Glavin Wiechert Date: Thu, 15 Aug 2024 18:29:05 -0300 Subject: [PATCH 19/35] Include exception traceback in run_with_retry logging --- libs/langgraph/langgraph/pregel/retry.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/langgraph/langgraph/pregel/retry.py b/libs/langgraph/langgraph/pregel/retry.py index b8da098c4..ce5760bbf 100644 --- a/libs/langgraph/langgraph/pregel/retry.py +++ b/libs/langgraph/langgraph/pregel/retry.py @@ -3,6 +3,7 @@ import logging import random import time from typing import Optional +import traceback from langgraph.pregel.types import PregelExecutableTask, RetryPolicy @@ -49,7 +50,9 @@ def run_with_retry( ) # log the retry logger.info( - f"Retrying task {task.name} after {interval:.2f} seconds (attempt {attempts}) after {exc.__class__.__name__} {exc}" + f"Retrying task {task.name} after {interval:.2f} seconds (attempt {attempts}) due to:\n" + f"{exc.__class__.__name__}: {exc}\n" + f"{traceback.format_exc()}" ) From 78781b0a9004b0ff15ac784307fdf0312dcafe47 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Thu, 15 Aug 2024 15:23:54 -0700 Subject: [PATCH 20/35] Use exc_info --- libs/langgraph/langgraph/pregel/retry.py | 9 ++++----- libs/langgraph/tests/test_pregel.py | 5 ++++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/libs/langgraph/langgraph/pregel/retry.py b/libs/langgraph/langgraph/pregel/retry.py index ce5760bbf..88940b584 100644 --- a/libs/langgraph/langgraph/pregel/retry.py +++ b/libs/langgraph/langgraph/pregel/retry.py @@ -3,7 +3,6 @@ import logging import random import time from typing import Optional -import traceback from langgraph.pregel.types import PregelExecutableTask, RetryPolicy @@ -50,9 +49,8 @@ def run_with_retry( ) # log the retry logger.info( - f"Retrying task {task.name} after {interval:.2f} seconds (attempt {attempts}) due to:\n" - f"{exc.__class__.__name__}: {exc}\n" - f"{traceback.format_exc()}" + f"Retrying task {task.name} after {interval:.2f} seconds (attempt {attempts}) after {exc.__class__.__name__} {exc}", + exc_info=exc, ) @@ -101,5 +99,6 @@ async def arun_with_retry( ) # log the retry logger.info( - f"Retrying task {task.name} after {interval:.2f} seconds (attempt {attempts}) after {exc.__class__.__name__} {exc}" + f"Retrying task {task.name} after {interval:.2f} seconds (attempt {attempts}) after {exc.__class__.__name__} {exc}", + exc_info=exc, ) diff --git a/libs/langgraph/tests/test_pregel.py b/libs/langgraph/tests/test_pregel.py index d6a83e783..f09f94ca0 100644 --- a/libs/langgraph/tests/test_pregel.py +++ b/libs/langgraph/tests/test_pregel.py @@ -1,4 +1,5 @@ import json +import logging import operator import time import warnings @@ -1191,7 +1192,8 @@ def test_invoke_two_processes_two_in_two_out_valid(mocker: MockerFixture) -> Non assert app.invoke(2) == [3, 3] -def test_invoke_checkpoint(mocker: MockerFixture) -> None: +def test_invoke_checkpoint(mocker: MockerFixture, caplog) -> None: + caplog.set_level(logging.INFO) add_one = mocker.Mock(side_effect=lambda x: x["total"] + x["input"]) errored_once = False @@ -1236,6 +1238,7 @@ def test_invoke_checkpoint(mocker: MockerFixture) -> None: assert checkpoint["channel_values"].get("total") == 2 # total is now 2, so output is 2+3=5 assert app.invoke(3, {"configurable": {"thread_id": "1"}}) == 5 + assert 0 assert errored_once, "errored and retried" checkpoint = memory.get({"configurable": {"thread_id": "1"}}) assert checkpoint is not None From 6a68581a9fb8f579d5164cd8a07a35770e7b5563 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Thu, 15 Aug 2024 15:32:48 -0700 Subject: [PATCH 21/35] Lint --- libs/langgraph/tests/test_pregel.py | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/langgraph/tests/test_pregel.py b/libs/langgraph/tests/test_pregel.py index f09f94ca0..7bb733669 100644 --- a/libs/langgraph/tests/test_pregel.py +++ b/libs/langgraph/tests/test_pregel.py @@ -1238,7 +1238,6 @@ def test_invoke_checkpoint(mocker: MockerFixture, caplog) -> None: assert checkpoint["channel_values"].get("total") == 2 # total is now 2, so output is 2+3=5 assert app.invoke(3, {"configurable": {"thread_id": "1"}}) == 5 - assert 0 assert errored_once, "errored and retried" checkpoint = memory.get({"configurable": {"thread_id": "1"}}) assert checkpoint is not None From 5bee9e92b5b15f60184aa91113ad6119b356e1d0 Mon Sep 17 00:00:00 2001 From: Isaac Francisco <78627776+isahers1@users.noreply.github.com> Date: Thu, 15 Aug 2024 15:35:04 -0700 Subject: [PATCH 22/35] [docs]: add studio desktop callout (#1361) --- docs/docs/cloud/img/graph_video_poster.png | Bin 0 -> 905762 bytes docs/docs/cloud/index.md | 2 ++ docs/docs/cloud/quick_start.md | 10 ++++++++++ 3 files changed, 12 insertions(+) create mode 100644 docs/docs/cloud/img/graph_video_poster.png diff --git a/docs/docs/cloud/img/graph_video_poster.png b/docs/docs/cloud/img/graph_video_poster.png new file mode 100644 index 0000000000000000000000000000000000000000..e757082d6dfbb90a7fa084616da1ad6682b1bbca GIT binary patch literal 905762 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
JtK(Cfgsm205i ziW1dvHVwCbh^^|R;BSE{Yg&+6H$T0)A3cc=i#TlW1v?WLM&0z^o$fYdu$q-FYMc-2 zr>jK*4=OMPdH+B^`1aqZxs%Nh<1XIvGyHOh?yxnYQ5SpnG?{sRXrln;% zEn1(Qpw6V?=+w$^Bh%yCb?ht}(k$ixRdwIj)>Px)-!JMquDkJ;re4aW7X&x-FMb6Y`y34iAa3xvX)D6^i`27gyKm zf9{X}EclHz#rO93Abp?j+Zl0xzG?9=$>4vo#Bjgs_5Sv90~+Zgb>{O`0y5d%t6y&h z7&MbpnQ!Of^WrOJV=(~s#T{Cp{Nbn*el8(E|1SDhZ*dBN@ef)-xr`J+nzyh$WKIA8 zE;jEMs46U|E{{>{X@BzNTeFnQE|Ru6+hwLxQusqq#W62Z%6QtQTcS${IxSsQ{5$QJ z9c$%~#;YL82}-gs<0i&5w`R8kDPAGt`sSv2vwtdTR1dDwlJtO+mTBsJwyNHCz6dfV zalt}dyU|4ORyOms$giw~_KJ(H8M_@Z)Bw&K)`T86tRzzZxP-rKhxgvzzcc#!49h#q z8U-aZN>&oNVnS|&VEPZ8a9Hj-!lH+W$ko)61&o@_ zJ5@%pF&xcMe9e+2(`%u2lwG<>@qH|J){$z5HD>BKuwV#SMH12pc`fnHr#8D=LmreJ zBnYP+@aFS{uC**M)OpAmtK;l?X^%3gnHoee6)OuHDR}Z4=!k0XoDUB`3bNPZ8Pw|c z+T;988d&-LCQp^MM)%LgAm=F!SXoj$;R* zB-L-WDf4+gHJ=TkwLph(Zq>M5s#>Bg$@%+~h>I`_x$!@I)?g?Fa(4{hA3~2Y4LQP2=4*h;U3_ zdMUTfJj}ZfU3)=xuIwH>948;XABn$7VDmJ{H-%1PjCafpUgib{(L(BhR@vRN&508 z5V=&xH{IWe#1N8t-rfLT3IpK#)eybcvRPu|;z%{)yOgGdj&*PZrT=94RNX z^H}enXxTR06RaDG>K&WhLah=B>t=U?L(e0|+hy|&MSzd{u>+W#ViGZgv_ETAism6; zlXb*o{|HM|XNZo1x4ac#I}K}X44g$o`bKM%@^5B@KmJ5FXr%L9Vx^*xdk2}wma4g(2_$=-i<8x2XiCy< zC&|5f$M|2YR$sdROzWm?;$_1Suq`a>@wzEM6=RL)LX(yZqe+IbGpDQ2$ehUTnfw!H z*Jl!+n}*>A%|oZDD#}1EhZ|}c5Rc@W+a^3|ER|N&l{!{wQ4@;_?J}hZ*QlOEHMoVk z4wIlSRaJ=-c;#mFNf=DJFHR=g{`F-dyxg8VToy`*-$owB(}tftAf^`|5_g&qwok@i zXueQ*8!d?GAJ&N2xVz@}QTDjFHP5?rEWGG`u|tPYSTfjLmxQ<=5dGBGj<%Kca(or; zcf5J|=!3sgee5`o*fg1D79M9EdDWz=`w84l0)KPv{r<|DM^Njb*+#A}FK`-*0LZ0w zKAv2b`y78;#bN}2X!9-h`uIYvvDnzyh7@ElX~wKBY>riqSRr<3>8-?1BY{thl+{i` z_Esy)duZP#GFssy+{5`E;KL>oqZN1T>sSy`%r2eDGTq}cIX7-t-hi<%BLlH>G28^4 zHrxUN$OKJDhiBGy|I!R&g@9=X$2B7W#HA^MZoKYyZGcarfDrYA%wedO4Z~ljArIVn~wy88y%_@q^t}MBO-*pz~F&0nF_DNOFS;u5wAs zFOfovPa)49Xw6sGa}~5m{pIPq_iZv?=k)8m5FjR02Np3QpDMZ}6Q)!jX;|wC#omEI zY?9^&1%*9hq%|or$359EF+s#dsdd^asa-&iwggFyWfpy1e0&7PQ%3hFqYiuPj2G+E2!1?0Js~{Z;cg(!1Sy$w z6 z=>T9On69+(XYUC6xW{n7%hj?Au?GoF5M)qLZh1q9j=Gid79Kh{fb&pIM_T;rQ6 zX~seN255)2#|fR})uH41LyNR3vf&H)s7Hq6rC%d3R;4!!*wxG}$)~Yx zU%H+Hci9|BLweE5?>Th?us;6NbrvOVUBG7A;XFp?^K8hJuG?;r@SC~2{hwCTphPl2 zB@;-F4f7I_%sA(X5~q<6Uqt`?1-qI#J`EcIqt8DiKp4PNO6`H=5fkKOg5Zf)b*7jo z5T65@K1}8mqF>C~@EL`uFH(1^Y!-hnZ-siVV2`6+h+EleZg%} zWx<{AsiFjCWJ*g1%B2vtonzD+2ptfw*7C_qtL(aCKU&0W(q$_B>e%*s8Lhr?8fRe@ z4p@@ATvi9~QxuRF7NX|}(Q^g5SM~~Z#Va0E>oUruG6sM5;O0GANj$vd){k%WgDxU& zu3=3zpAL~RrwvGU42v~bEP>f&XKc163qM_Gs1X3aI?oGJ$ULlq z-RtS7OAM#0zUNM=5b>ldSmdPXQs zr9Ocsi-?&ek6#-b`5pUL8Iv8uum_YTFay7XEq}UI>o^|XJ3T+%DnX?pZ*)HIzG&XK zlf+I9ksLO!U#A$y3ZmY|MICOvTqQ=}A{i0x_Wd3ajK2)0sQBTu*pVAGg$uCX)dgv%Z!AU7u=YAKN(rLRed4?gW_AEWX9|30-6OIF=);8 zSNA!!W<&*t`IS)-meldD-Xw%`DMYo;u-5v{dpI28sDsx#=6F2^1@S6Js`=iOnE5|$ z#8T|(Fd3N2oFHLOI1R=iJ;Rs6snR61u&=`h&ZYOdih8gBR2M7@U`B?tW^Ru(svve< z$?UKgnjnfyH=uQ04&qX^1j^QqJVXpXrg3Rp)jH3RD3(XP4qz25Y9xbKr@sh>Vf=B( z`_NX`s)D(PPJz_e1vH@{35x#mOJmIqCJ7AX80(tMD5kqWJX1`_**bRp%R(Y2=&sNJ zz&=zgl{TH6vAXd!Pt^tXJWVscVl8^T&J_zfcvt>ay>4mN;W4KsDal8I2`kAX_2B{)z^%avXEoIofQbt?4TeW zjjCb;=MunqoQu%!$0MsFn{|#^EkeN6u5=w)jnQ+jNA2ne&v33EAIef4l0hH;FH}j7 zT=6KpiDiA?DxV3_D3KidwZX>Q>WIUF0T50;2JG3)IJ|Oh1`rqs@y8% zvGWGBuM+>TZ<+gZl}h8I|96^nVxezAfpMXYT%F2rh!J5N#g9%F34M5Gq4b?O@^9SS>M4~v(AK6m?$|80Q6aR>Bt7NDgj>d# zq*9v-U89rlht#x8Ls@ZdM7)S25M%iPIAx8MT0y-Xs6>1^{S?Ne5PCG$YWQop;DW^Z ze+3MtPDr@Zi8~M>F{cp@o`7-q;7b|rL9V%1{Lhr~$awO!AP6Cx4?%T!+nsr9W zK2Mjjkr8qOtybU25xR?$bC%&N1acKIIaAgXxBV65`CL0M>L*xkL=cdmwX*k3Pl*H_ zv(s5LJ-_SSD@9G)@m3&Df~!iqR*4 zIZkvui{AYPTlXCtU;?cpTV_w!d)r~oDR0~UsENU&%MlX?!pHcV;qrdHX~;ttCc2x@ z8ySBo53}wkMKT5TaBElPA*a@n>oqvo-pA^@yQ6VGzEnPKk}l(RA2=Tg7*XS&s)|v( zI^4dcPc>g!Xa$tdgUX{ATtRA#eO~U7Fa1Yn=i22hG4e7oztZo2#kOMz^bXfqHC-V_sNWLne%+HvstK9p zAhLyr#G-N884>;(bcvub{b{PCs8*xH(4_xBW7&78Q2F(Xq~H!-Muy^@|xX8Q4rAqGDgi61XlandAw;Z~@QG*qSYLS@Re^rH&_+EU8 z{Bv3*ZIhC7$v{r(EDOc_V`8OnFlY9A4ct^S;uC@CzqB_KIlDjxT>&&-aC{+5fhlpw zqw;{{MKuU%tZ>fQt?%n{04fp$v~GEjwgY*+&ni?S79~6hAFk-mB7&|cnOhdY{zaobl_PK6HpA ztK%3Q0u|blU>izI2XrJ1J0`bH>1c0kUwkJ`C4iL2v>m+l!b!}+s1O`%0cmw6Qpv0! zeBY?!_GB8d(1f;8f|8I-uO>>%0k|H3K%g`+wtVvg>{_ z)2#F1ecU9)L3fUJ_Pg#97C)cL;Y7OL_!>R+@N}Fz0Qd_dpeT@JAC1Et+HOIV`~B%= zfcBHngRkfSe$-1!5nnd)_>LIP;*mW3w;-qy2f}@*y~vbVaSH}7)Uxbtw%HLZ zrQ#N9b8|d>P zLv7pxa*QX_6cOI$#Hzef8MI?oTEDE6=vN6Wvdo6#=>tO18KMqSpQ3hc;lfn%4%Kk5 zgL^co;Dcid>*k#<&Xrd=xdgP5gIo=CeS2SjCMsDv9R4O8#RZzIM8rEi;Vgg0um9?N zjlwJDubI*%EA;UUA1NcNIB|MyHXSB8Ba7d({q zN~->zI@gLE7MQ-WqL#!ztLnDu8B|Qb*e5ZD!172^-kV5Z(DTX$-v)UGi~^U)rdRrZ zFBP0d;VkY8X1kY+^Cy*-uBiKI$bb(rgGa@d4mVadKKw1da>B2~)OiEN@>X`%B8)&l zER)I*&;Rb)a)5_j>gqrWbh_gj?X7fqx()^#idn>2tvV+f%olRkHgiv`K#zA$AgML1M9LOelblBmDF@iny`77vUcMjcdlkOa8O;d1HZ zrYI|PW7(m?pOVaC+9Y&7uUP{JjXwrRqEuGxAAdbv`xA$_O`|h0JT3QJ%?bz22)!_H z*=_fde9ACm3K-)YqT%*qdlN38JZ}QAFv8D~d2a&V(1XdaSs^hE4|T$XIC22 zeuzD4BTrmBw;MezU$&eLj~d5zBZIMSY5JPb4q^YV%Fl%mCo~o^u>()ss-56P6<9_{ z{n7oxEr#{A2=p?-NKS<(1vZNqwqFS=Cqis-oMwV6v`PZd<%oU(ml^b z-y7gA$M%D@>=MDksb>8b8Cck%%Z6cthQ#+ZQZ|i+m;m1KCJU2(bs}X<5WIm#c10H* z<-I$UI`)$~2ZqeG-YUe|?hn@eKV=0`se4u!d)mAq#Dl;O0dnuFHfjrs{dP}Hw`PIc z!Njx|7mvSV0pC5UvpiN8oo@Qz2jp&E0Oh7NT@S-%5;<9}(@zO=JvAGi%RL-S4C_2_ z$b6Qo)Hyy%dj9vGv(EN((OmD$B{C!klN96yJAtM-S&m1ZPQWp0>r6DkhoFC|)rr=` zJ{sJ})on*4z*x!mimRGPh}=c*>n{41?T5I+hv@h{IUL}Q|5d>Kbv|Zr+w~`M3|!=9 zKP*{oIPCAqfeszY&r7E`h~c+OR7798#aEndaXLhNn(=?9{uIHpKc9xmg+FwhE>T1I z4GE-IdycQS<5ZK-3owKkIDT^3st$SN5LjK$zjzat@*2$ENI!p#Zwa}oh~8(ZGd&&p zFx@=&`$aXKuU+Bl!oq?G^D>3Y6rtySH22N40EGCQ5FnNws(M?kM(@k=q0Ft{y~<&r zeb1ZPi_FiTiOj+u(nlnM`ks=*AG(bW`NJQk7lv_XLd1IXk3>?biIT;|evpsJixqXO za576dCltc|Rdj^Po@*%u+HNtX&`B6+$f);Lit+IDUmixL=!)4|rDlexa6|tNMn?Lo z8d8)g^Q$X4L4$}v1L>ag%@^927W6A1z73W#jd`ov>oVI5wH`?~&!XKUu zgMC$8RRQT24gZ+41>%_Ln1ii75Nf&Y%{I)#sLtdoIuapT&;DyXcs0Yw(;+9vUaG8Z zERs~7@9wkm2qloPfRtX2W$LHg6iwt}U}BmBLdI_hQ(Z=G8q&yz^?KY~qLozCI(`$- zU}Hcygeg=wo_x|2dfC%%G&F(*MM`V!EL%dWdW z^d8on?Z?I^=eu5N%xA*QDG(Uv43%s`Dm9X!GwM}v$nY5Tm;}9lxY1Uv%=sW9te%6<^R~4BF zl_ushT(N4ixNPAbz$F1B5h`9uX%Yi~=L+VY0QYj~Rrsy2`GtmFqz7nnCIUSDiizY z)eJI{T0Gbo#-BlL`}tP}WA>bG1}0gtw)stMp7p9-msNh+L+UNiy8E8ZDJl@MfixaU zoeVzllPq#Qk3sNC@Nl6YvTRHPAOh6q>b+hjfNL;w)g5P6mcC`97#ZHn-%Ru7LL||u zz&ZBc&&gb(21#r|dK&|B`@j^>SG$l7A4L>nX)4sGH0p`dCiN23?ey>uy4OW^>Tx9f z8f*ba9b9OgX5Ko~D*Dwh+r+5s%O=)UJ7~c2oQ-#lrt-yvuqP~UjoSHR>ULdCTjad3 zFU0FY58X%WEnKTK0VQ>o2SA6fhcpV0F-cv|@8=#?V*Vl#)b26UbGY$N-Y)Qfy=Hu0 zp*x5~e1&5N4PoK&OUXbx+0SD6OsaDr?nFS~fWhi)ot!w^V%>8wUf4PiDC5lWn6 zRIfKvzUM1dy<{{2KbbdU_FJ{5hmQ1mupay8$J_^CpORs!8sm&vs6xF|63r08fX^^5lW+)NAi6CiBIeJCnHMMbi|0J z0ov}Dw9$+A3B~|C*h~IRwIJKO2)qAw{4dsFIUp(NH#beEuM?B_t}K+r>>@=QpAb0>Bs{r8Au zPlLbS1_FVz2>Pf1hazlI^puPZWt>}L&kIZ5i`s#mLsQC)B{Q*e0m!9jibMUpeJE)A zkXoyhX;R3Ps6URAE7dNC9cFT}t}E!S{0}1qG4pMBc(x&wCq_khKM4}x z3SF56`+i|%l2AQxnv62hp%>hw(o#~Yx=Ci0z>_?34-*C7GQr!c#5x5ZZaB|~`IPXq zo&D~yd@VVgXmBMYTz?L_XTxhG!=W<9dKN9K(a7;XGK|I-FB%VZP?gi`A-4Z#)JCw65oe zc=bthl^n4qAGZ?p<%2qa{#(xq(e4tE!rZ&9WBbg6rjMmE%sqr^nE7-!F|i8s;FOdm znN+649zBP^Fq%C=Oe}A*hbwod>9*qlJS3I#ppcN974-6X_jE%mFXM)jyP4us^JU!; zgNsiNxh8}&jY#jaKIk!*kuSOwcORV=l%3-@l)RC|8G?`mrHlqb$6J& zRfoG1rfT=|`n2*qEmEv4MN8f5H_}9mdY;X*;JxldQi(LeN>Yp@8Cfs-5|s{RN%ij5 zcJO}$iveN==8^&5(8P{G7myQL2h?R0@An3{f%8eY3w!h90VFFJ0mC5pvhX-e zZ05s6;9G1@>G_F6YmS*V89MUpgc1)n$n2ei#8ADS5^;;2Hv^_oH!5wgk1SA0MJ+!_ zUyG$?T$2{bsW+DD$7$zeM9XF!oPhJ!y|2f|)xmu$f;%(yDyZLUxZ5grLure{2hn9N z?h^z5Ho5p3WOqKyvjf*A5_`={&foo1#oHKyIB$;1$$wt_)ay5p=hZ}kIaXoH=Dd?s zZM<5yj{_`1njY$(NbvFSU3yn z;9Z)Hl1OcawXONWo>ydxgDAq;RA#=;&<^sC0@Pn7V?YG=Rlx4gCfty;|R5{LeRl`I<9Rv0q>3baHzz)u5SAi?=wJb?EJTK3^oi z?kfmUhZFkL>NuUM0!cL1SrjM2Qs^nskKUhVMjpp=ytl-iKAXaR*!_<(2p(p46s}07 z@3jx=9C|C7<~hZtFU4rX!@pOvENu%$mrJ+BDRnYY2(u`eyKj&~MvH*G!C=u=ez6Ds z9gS9m$zc8yY@64l@~H2_f}fY$S>p_)pdhr?W6LPJf?$}i+CXg^^sgapBFGsb`iG+uR8=Ra4_JZDtnHzgYw@c!?Nv=X z50YG-cJ@!5=EN&h=WJK^a!qQw!0KRKYzKg8*Td|vHgu#cyQqc%MIHb*O(iT77O&x> z^UzCwNL|lYjM4MM;W038Xe&`c_ytO9iFy3rss3oY>l5&JA0?X;o!D}za!jIfiT@zr z4J~P`_KY&xbm0s2ySQEZDHZSahVx+oTFei(5X9q?y_D*b*ysH*CB^nNY_tgF?$Fz^ zldyCBkLOf@kBvkxW}0t$M!ixC*_Aj<_(VoxQBDIP&bN3g$$jk!YKhpB#BPIMl++sg zL0DVb-A^vR31KgRu|n?}N3U!oqK}_l?u_t&_T;_;-b2Idr9GaMj;K8?txn0(&>u#A zPoPQLwQU}^m{XC#y^5Q3!MsIr&HCH2O;GQrCFy!Zfv{c*2nhwX7|=tC zm5Q5?Vu^+E%c87*>j7l826dSbuuu#pj05N_*c<99$%fAKn2tFVzL)rB?$!v)VvdF= zOXvdNkRJxftW%$SX-rWXe5(V(?}A3OdaUmc@P zPieTg~@YdA} zJg8*#(XY{?J-f8L>J(oy^YN)Pnvm;s*qNiKu9?i1G1br#373{;(_x1O^E%7f+-leq zvi?C^cmJi3satJ%qFW(pLMSKjmDyqcvze%kkSzKGR#uWG4;6E${v%-0)*3$x@jK}f0 zzT+qE8-FDl&l;ycFKpH^iQSY8j`j z3gr9^n-eRkD=#0fxT1_0#N-)YScrXtom`K+8#N0hZEu-9OjmabVuSnH? zM(-yLywPuDF`l=B@<9t~p`zUgM}TLy=~Wj?HvNw?*k~y?qp! z3TyZRD1%OVj};GID~z&mBcA}p3ba8RvabfOl2dGEy?iXbmSdC8Vu9CFg-gxf_s4*l zj@Og0gX(}o&?FXz0BF}i1%+al4$NvsBh$weBe4@@jRV>n;=Y_6;@lK0Ajy%td%QYi zB}s?WLD6{Xc5{6lJ?AQ8t*$~{7Yb8Dx_IQKIVdr3*xAuNJgZ<@AUQLR;nk|{+>=J& z{XkatTG8lbzkgdXmZtkLc!v^p?R%us!NXt64bj zQY3g*=~re#3MF$VsC>hJJKJw@O6xBYX9@wQRmf!8d!Pv_;TN#C7%78ZS^xH&@k9R$ z!ZOONMEiR?z3ImrIK0{4{%v;?W(vGOomGHKo=DZbCG|KF!_*1lOTWKFZWNqfX5M$4 z6Ey%P(PnUaO>V77F(xPoXEPm((F{Xb-# zWl&t(wzi?s;1b;3-95N_g1ft0;}Rsng1ZHGcZc9kV6eC%`YIcM+tRn6+^KfS7Y z&AH~7YmE1OMj^$LTXy0%5+hnTJ`10Q-sVeZut z8MG$l9t}$RsdHy<*c62*MK9>F_ZOO=Ew!^M;{T?H;e!Uud|_l@Na83>dV-#5v=@qe z9pY}3`?^Km{>5-~=)zOvzFRI&+#Ds zB@ABc z4cG`gyRk_mbY0Mg%-5Ry#q{mZyxv!+KV{$$U#LjN&sS1t>$ds_8xMkd)&=ff2rO2e zG_aWf44=yaS=Vwe+#6T#g$d5Nb^gr)=yV`JaIX*UbLb83V93~uhNw)jKd(Nonq;p3 z>Vv@;HuCezMEwu5nfKgcZAaYv2J1=S^+cSbBoPBhFcV>ZqMZUtZL*9AE`UWB zKNAT9s+W+1Ur(Y<2boxW9q8-MQ|8yqKX9h>Kl`43g51AheB$w7cSRg~^H{eF zt7g3R44AlBCA04bb}yrZD!c{qH%YI!cij;_5Ou)p$a)%+!6l68OcEO_I!~94aPkmo z0jS9PbG!k1-Cu0(W<3|~R7R~!Bdd~Mokmw4j%VqVTTS@BW)gGm0WX_pHoV-o-d$qo(MIMN=Nl%ZXhzCZPJP6a`#eE^SmHZidANXOk&9#0JtK)k95T|13e=fkFYbs~3G z2C*aJmLE@WR~1_OTMM2^e}v*LlOGQhi;a8CR8_$)GC>@T)v&WFDJ)<^-a(+ssL$!~ z>9}&k_teL`UrnOdS90Fi(b-!VXcPF@&u zCz{5%a>^*!@yL_XTt--r^NksjY|rjT|9IS&rWnx`K)+7*Gdr|hVR*v@;cEmRcLPL3 zQv>br2n7-D?JG!CU<4Hml=*!f#Y(Eox#A`Ho%BRqcpMJ*a;5#+cCT1E%_1mJBEA&yduzV?KKaHP zL(H3}d8%5$wK4QepEyi_UUQK*&tl4IzrxBc=h)oQJyeI&`^J6z?Ow?CFw?Jju0p%we4Q`2z*ofg z8O;lEiD%&sJo00kyEglzIlAkm0Od$IXEK@PS z&aQDL(>An6h0>R*QbK&C*?E8XBx_F!#Z*3zbD0MjWF#xer*vAK59r|EO;Jvl$w6H6 zN02|E+i@3`)umLKp*_AHnztbd1Yr|z^-g|C6f&14Fr>TY5Yb)M8!>ONbZB(8T`?c2 ze{p6>ReQQ;n!U4*>a|Dk)o)xugnz=Y^9tn?lm3{lAhCJLdIyjgc%>kI1}0`hhCub@ z*7Z}g4hh>zvKb!ir?7y0z4Mgw)WcTLMWlKN$+jqm&r)B`1?j~3R5rU4$)9f|Oju~i zlCJ~S-c4YSQ$UYx^H!Zdo@yVBpmii2Bz8Hh;90`-b z5O(=&3dAxydqP8?HC&<`Ko_voKcArY%bnGo$KDC`Mg={3p&XxXHQ3a|#J?hdkoQPS zn828Kmw23M#6pB@Ey35c!xF0v?g0Z1ED|G^=8Q#=ct2tH1r7@Y@9WL~wdpE99S zrZd{NT^6j|Z^SuN!jGt4>GN{GFIrxAjs?BfE&%{fC;UGs%8gR^f9h4T=i=d?v`$$R z@e;He;H^$EnGt0hN-v`=VIp_+b?UA!?RW+DM6SVTr#!aZRUWuc=>F|~{uR@0aKMKn zy5h5c<;bV0T5DHy%AadZPiHQsyu0G@6^4cNYk&28H90DzCDYK?AXToa+ZE&hl8oRq zR1bw1;YSmw`foPML9>z6S~!aUDLn8}msMunVmfV>xCR;Om!`Z9x+JR_*FtdEb^%}d z8MzoL60|E1T8(LG^aErYKt@;A+CY=fMw*>AmAK9?&aaj2qvBPPkBY;_EeUm38&`-q1h0isk(2(IN^2i+)TGM>TziWXF zoSnI>$Ihx!P+d=}us)BhTHwrhK}G7FrKV)()%29|0mREJfhI^{SHk$j5v2qDp*S&9 zUaqBei`}-nKqH=+8qAjldenzhk$&6fzSm8yU8_)gy+eJ52)L`^8aw(S9omwve1bR8=0qd#pAM@6ot?OCWjgTHAjrlG_ zsJ&LtUD6*xO0DX#)e4saPVkU;Qyj+gfDU8eL&v5rm0CB6Fxqzw-34}t%&wq4t+>i}0fX{Y! zAyl!NwSI|w=PjxX?l`@P!`6PSH!73Z!+{3Wk%!9Bbr1roFitDXeR=l7!^1oMc=js6 zLfdz<)aJ4M%)`0M#%c$>WQn+uyv%4WkvS~#2QgrwYgS6n+(>fcE}^+puywUxmyi~1I%`bYwcyg21zBi6 z7aAFg_E^*h4w3kX^U@Knnf6@bACw2X=y!*ZQt#xK)N@+OQ{Gh)v08*AbfIte!+c-a zO>h``E%x;!HyM8G#3M5vAf$eGKQMF>wAdj1jt4yY5lTU3jpdOL@Qq_=d)?crs~Q|G z+({HkdEOno(PN&FLH$U-Ms?oz__yjQdwGQ0kR+Z~$DzD8S6t7c-U90yX|29CA6NOF zx`Ms!W{1AA`{Ccy#$6(=y22i|&4}COn7X#0oydSI(#azB z(It&K<#yZ;Ba)+^^s?u4HD`1l>Ux;gSImZk6hh$5`$nnSRX@l`kviMuCUKa(c;R~% zJ77o6;=I5#jlI6Fk~dFnX;+|vOwnU?`YER>=|Q!e4UAA8qH1lFR`oDbB=^F`5#=Pb z2-kb?nAU#x+l=8x*YlHHiefWW7L#LND0I2!nD1AG9<2vz#c((^>|qX?*GcUgLATUw=-9NzPu z*iCQ|nuJ7fHO-&$00sVRBM> zCEAi!KHd@3a>}njKKG3d^Q9^d9$HPy)7TRHdZ@*`u;M!pE``brZ$Ur z>CHHrUv)|x)7H~(ezx@U-KRU74DZ~3d*HKKuvl5&v5pm*WaRm87@d4YQNl$OQ4Xp1 zcwgme`vfV|dDG2$wqQ)b%PVm$)v5h6-tX?z6~!XN^_X*zvDZx%ehGt4jhOSSkkxM! zjb;(Hn`X=B?sOT1(vT=oov;j>l+QZ4=xb~WBIfoFNo;EXvewl#_g%t>qADMH>VP<$ zznWC_>u52*n;T*y_w&gMOa021-SaQN`z_-~m&gPec`w-%78Ofm{yH-my^gWWX>3@q zuF+Px15awGORrMGSOOx}F)t}91GBY(>R8HOTW@Wl=6)jY3BOBT0i$UW8hZd z$ggzFEvqfzK|H~!^t;rGk*-yaV_lJ>H4$Wx94{i{{f1N!m^kVRBU)02OU-b=U(>kp zm4#VTmo|~*O53lWF$3G5>50&yU2f}}b6(g<3^_lpO%N&44`uD%Fr*nS$w7gcFlHOb zH(r)`_9Y{$>~?7Q`kUi@fr_{52R=Lyxtzk$K!Q5v+IVen*KuW4;A z&bA_kLj3kaHJ)e0= zMd7$dXmvAcRDFTtvQf$@*7}m2{+0u9^X}h6r^dm-fj#JGZ6Q;TlM*{wl%#;a{7&;= z(n=t$BZ-P?SmUutU(ae*)|yOMT;p-6V{7;F-MOl{p|O#0%=tUI1#q(uYj?@IBBn6Q zQ$+A#1L6->GL>kk!ml7?9b?KBF(0R~*`!=sXbYyK z_qTf%o|B9BxQ_~rjNr3N>fI2ch$~rn_+(mAg?nv|WT}N`X128jr4{#7-_|>UTM@s* zyKV~)4gelii@=@pa-a$_EkqL{WZ3Jx?Z*Up8Hn)bbN_F&Yn#a*;sv#@%};+Th`jK^ z{?f_EuwQ=*A}K=XU4NHH12eS5SwS#2H9N{afJ^PsqZG|L%!gx!=i2GYxUfXQlpIOt zalVmw?-)|SMQ-e|NN3?g)U`RPdoTJ^YY7oSF<=duV6qV*VhQ3bCLZugRQMFA=45*- zLA|y+^wIQSCyWd!0V~r>Wcmqly2QTyF;T~9h~nzO7+QU( zn_EL0%i*^%GDJ%OJQh(`u6nYKUN4lMC(uP(L*k6}+|Hn$*D1}r*MVO1K~E{UuT=Vq z+jFNW*JSe?8=6?7MZHA(CUg9tVJHEmwG&fZ=(~I8o!{CcmMFE)_noqF;pC_vvD5DU z@d@#RORm5s{b(h^pn4s{ZqJ?l?yY+fp2v9AncHjAB)y{hE|4fJW_|fTiP-_omK2xBwd{9~$N_Z#{kp$GxwHXXmUjOxr?`r7SpnQ`N;JdXj~E zinpFsK>0;``he&d)`oICI0wE28@~*zyx`&T`tarwgvwyrK~jJOZGh7Q5xDpv?nP%> zl{*T)1f9Y6a@*!3HK#>Zp@xQc4&ZEJDc9H@+NXn$o|C}-E1Y-3GjyMpqjW2L`3}DM*ft$?b^#>`XFO7T@(Um zwXs`Nh>~djI?%Egg#P|a5kD`1yZ?l-V3+jLZFo=^TO(f*K!k%sfs@i}0=!d^o{;0h z9M!2_3;$eH+Ni?yW9AA=wYp;C;4Cuj8zP>RSdCYK!^66MhYh&SCp{WTBIi1z>#cC6 zp;>j^=uZi@t}4%`enl^@SF*d4qR0ugR=D@{!2&d15K6*PWSdKx*lQX>$Ziw990xfj)+2($!{b09@NzHSKxXIf$oluWZSH1V^Bg%eHx&2B7AKDZIcEb;|zzc%sWyB}* zK}$a##On%lS_ZqoUvCLX`Y|7lPGQZ;EXcmwUs=9-)cSs}ktdz+=O$+_6j!rJ`a{5d zg;2AdwJ!h7C;erubiz8DRr{)Dh}GEG`njYE|}*h0o~N87B)TA5gq(Y{rSgpLgx2+47?hx zosczDE}og|3e+Bh%(h3@p-OO=nrpQe%KmfS9h)*GiOHZ#=g0p9$pc&6T!Ip0JC1K0 zQ!?vTcGzIaz5)g>vBFkB7R@Vz7KgT5ElCu7anHJFdLT8nPefS(uIuL;uEe10cwWj> zP@3R?4_TQj5gA`QAt<`af&9JI%qm%972UQh5~gAZ&Zd8=Zzkv0k8PjRX4Frg8(;Jq2Ps}|*0IG88xFbnG)CHSP+ayWb&I{nmf2*&H$ zRkCv&MszzoY*k!TId^Uo`^dQ{`yo00=K+`4R>rg;HdX~EkQvK;X@E z@RNCZ@ukCg$FW)lK7%J$FWo253-Dt;*zRT2)G$TFr&SR7Mt|M z!5)?)QB0E*4ZbCJd>lqJYbmkpBEu8heoD*5RBntn^@j(QvV^i!bo~;e-rW_hK3CPO zGRT=@2om|=jH3W|HnFl1_30$vHeqi`MFXsKZS(u@+iw$>O;(p&ORBI42%rS>Bs$*q ztWzGI$RAz$2b4~h#S#8teH@ogP9*mxB~X^`@WTBEmykL?O=dSgNlztJh?i3WGiR*nft{Ln&wq^-u*-MW zrmnzqsj-L!Fs6k>3;heRq33g}dzckNn}E_2#~B_0n}BEEA$2>q5{(AqOqFr^6FsYIxQ zg`sOY49Gl=v@S}ZYoTB0&CXWTAe*j^-d_*2r%M%SIeAg`fA~Kq-xO3<>K2WqQGwQ- ztZ1^rTW*8L-o{Wo3T7*4N*`&zNu&*Kxwps~Z;sufs9d5^ZWeS*ZOyk>ogqv&R0#x1%E*7~maJ^>fAXd~;Ys8r_v9Zk92u^$wc$PNoru`It!XW*l`sf4W9Fa&KP~*7^ z(4YFy2^!{93$J+}3k;2p_E0Xn{>6&eRAUw$QDRPOq+C{C)4Ne5`d+O{1D2NXK-Xrq zi?*@_O=?6YT4hreN{o5$q;{FvC9wUaev;TMr>bmRGa-5ftsM(9*pc#2314S{hgAS0 zFZRf7f8?h8>4o!T*QH0NY8>c7@cZCVI)_7UWav-#^+s4+_x+Cl>;W5GpU~rNBH&CC7+Zm&fhM;{x70PtJ-@xA(N=Wk1N1i^q=;B_29|V0uk&y5imn^xx^^tF z_Z#cV@Qp{N-o{AK;DU;4%s4FDVR6_^z(nFlW9F$k5EYqPhkj6HP_uQuFIDnq+G+g0 zkw3KD%V)>_VOSDB*UNFEqQBVT;3(fG){i$nVyO^bkY`G(hieA8t?oOf?j?)0v3>+V zSx>3c{zb1}tparvVz;fq8>@lL&Jv9>Dk*;VMQ#s4Bfs+3?IREkNiW*2=AT@y|EVr( z3H!4P&{%mSmGxx;v*JytlkdJFN9SY2Ge8~^vSY(AxyHLS-nPCkIw+@05#iiON)tZTB}vZR&jKTGLYe48vZNB*

SJof2B-ukG|K;GCh=u5z+wnnCGtOczrftW0B`NIS5hK)lRe0 zPHApE{d*48-;gqJ1G7nP8U#~v;Xd_Soc4u)-$Y%r&LlrFuYE znneK(wd8xX3p{FUP-3TF>keS(i&Xe73h4*?rE@pa>pVv2{Sgw@e;qPoTG5g=|9%<1 zX?ld%#$o(R7<_Exw`{+nI_cf9x2mK39&AfST2R1=$kZ4LVF(?fI*e9SVz~_NCgous zf(9K-kfjM;M0kE3y3CA05ILE1)pWqODq6~RiM?3NhS`HScHHB<{97>`*47A6cmoSk zRJ1pOrL>kn9Obr8)Q@Y*=q@J?Y(?_V$kO_($Xvqv^A@dT=1VtCEGy>E9926Mx;O!z zc@U!6^pbDF47rPpmKGVrir}yeBIy<>I^{BTHe?8ARWJwuh93oyX-6pSl1xm{vXudM zf<)?T|9!#vD~|hZmiG;+K1f*#!Kt11?c;SF64bJ) zwOrRe%B$y0owKCI0;_C`=XqdB{sI-KIapRCM}UJv)*kn4!A(MoQyGK>T1ute&4B1y zrj`7OuBj_SUr(^>_4ul;z{@{O)hHMRE!LpdKqp%ShRsS^+(!(YlZRlGcX&;sLA^hh z=fX|i%(AX@ZFtLfH4cnxjI)k{&r9%~-_DZ^R(C+DsqF|r7 zOsHg!htB4vVON-=oe%n%gV%B^X%-JxPqGS0oxD_7oa^xiTtOXtp=m3^rPhYddAna1 zTL-k;#aahharJb6O!dJl7-n)#l9|XfTq+JAUCsm&9IOv26zfV}z0 znfXi1e*MhQ6mSm>W(gOVi@Tyx(G?ABGLw2IvZADkv zW@#J@LqpTUkh$qjMP_n7?MwXDJ=TFQn_zoAQOzB(s$O8VnWy+$Q3oHOEs;&wGipFH zsLueC@qm@TEOpEb75ZIdv!d{Y*_jivQ*vlGNuNSA6d6JQofP%rYYiupx?Zr?j(z77 z)LA53JW=-KL%TcG5Qe%A_!9NEWg2sSVpwvTuoDdc31m-Lk8(7|q**)?;8h}8SVrau zyfNM`$N+=ImZ3eEUY=joL54y|HuMVGk|oiUh?ZGGn_je=$?{9Sc|Ga_GhkIZHS)Fe zLS35^ra`z*Jo6iTO8bH%aMwy$d+s+v0{J56Ppjt$ka#97|B6z;jkg%Mi-SYaXUrrS zCRksZ$%1SxI>+CE3_d?+iUf7QvfRFVHgweP%C)wy6 z3`N9FrnzBYLMY>7GBMG84em^**^}#td7&~zMnLWRR%_P_O|w)*_;VpGqK}c> zeMcq*fy=skYjNjbjNq~g0#O;NixxJY|7Vw1whCEym?0jS#T~9jMg9!G-$=AbBgWTW z9WOIOGAz;keqA;!5dlbT{AlT>NhqTZ<;l`kToeuG+>jm?U)-M#BZ1DF0+~~v#(B-t zEq8~W`IT1WBfk^4f;&0~Uylu*gkq85r;$ZiLUOtO{FD3Ih0z2@Nw$Lno+%lzxS7HT~+_olh>WEULgu^l+NP(hXG z?wkJ&0$t-#V3umK$4Y~bV~y*i9VaHALcO-9r&%!w@8o3zn7O6STF=kS9B#rC1NtoO z^VMx^NYw&tv^s1CHK&5v<$F>6It&B`ROKNFFsaQDBjQhbnucp7j1 ze1{t_24m_?h6HU~<)L6rR6WZ#fO)WO3N5dvONdpw5?ywKD`9Y96a(ljQ9U@g#`;;M zgM4+>i7NTVYdnL~-)Z8F$c`_v3Sw0fcaL-NJxg&<(g;g;yW0#Wb8 ze-13WF+hUlC5yP0kl*Bx*0-J`j$;jUm9{(0+@?ijE zPV6OMC7e*xNMOf5zykf;BPW`T33$Zn-8FY@49Z6qM5o333Ey(CchMIH?pMZ~=(6BO z*$+T@Xp;?FbqtP+ceWsaMkJ#E{X^4_&(ZP17rfNmQlzMRHN~hInAZfnKa&o}=10{S zKbrCAl&HZhD6t)eUj_Cldp^=yOgZT=X*awyJP$XHn3(T*qO%Nt>^8{d8TIBbS56s|S{^8zM9uv&IhH*fQ_V5;bJo}1r$nz# z#%$O^E)c{AyU2v-Sxoy<-3~mQB8QYc`FEs~({T1QmF=f3SASawHlM(!zqw|cqHX6= z@S8R{BFp`5m!|#DPpi<(>&&spq!*yP8);VrFeb9Gg5vdZ9e|-StNwM_ThvfzuWTwD z<0_h(!PDKCk{Kd=d&0PLl%29^vzu(oOL{IIp)iNE|3|084e5Igt27QcBDg~L#Dr55 z<&Yf08$!%yL;*u5>~#Iz7S(vZPW=6vu1ZzUXwLSsNfwwc6t_r8&+h`ff>~0ZKVh1L zogU2BqTit#Q)$R!io?#TTp&5h;T!I}Uppno?~q$K_YvXP4H*bM(s6Ab@mznNpO zZbtV58D0EA*s8eA5)*N=$L6U@8C2zaPd@n)vw4m%lE%y3`|8gWP2j;*c9G;-=Y>BL z&b{<|BoNG-n+q;%inijxaA=$oM6~WvXxqa4Wx7En4qaRmS zX;StjdDNNBTu+;%s=YF}O%%kRXe;0t_bahQypN&t4KsE8Yn_v!*MaQRJC!MzBPv)iBsg`Nyf4=)4 zFr?=kcQNT1am-OL*VXK_gT0So_}(Xo3)>FtJle3v$b(lN;!z>NY%Aq3Asrp12vkMT zgjlyUah_HylOgN{&6zn&zK8ksd6a0$9$P@@I&}fak(etB`oW<_Z_~M;4fdDk>_*#0 zb#N!GtWQInEWlT4%3jX0T*TgRY&+~)0%lWyt_5~!Fl`Be z^82+3TYO`-x{Jt$zpn00QiQiagsFjc|oA4{P?U z!+~k!g3`I8U*q;VHM=>QT9Omg(^_5(vu9ce%dATu$_0U|K{^t{Ft;@S+|?M#HUT9^ zpa1PO@oy{`H>4Xmq(!<}Z0-yL8lrh%Z*;=2j9bRnh^Pm!0D)X$`(yT^dF4j`z=qRlAx&^C&^MN-@IS zESg?E{BVrO!l{+WknRYRMd39OkNG0{dbzZ#+}4C07DD)3S3ujNscEcvt)Y099^-E) zldQa7XL9lZ6eC53lxq}{kw2X50VCa>vd$nd>N9v;|d+rd$k3yl1tRqi_lv&yNeP#%q=n6O%dOxDuh1RRUTWEU|`G$Ytk{Z-CD znyY|kB&&uJNyq1E|8mM#&ANR2mF)D`2`}+(tj9lce|N+(XMXPwT3%lw5$nP5j?k zUkb1u&p1()pE1C!BXnQ|4@r5z9Ib4vqL7{2R`$5+ad(OlP1y?{yWtRN`0^YQqJwT9 zHaUdk?z9-(rkDoI>HTTy@=MKpxyX# zMmef~K#UbFWY1UVxo!A!US>Hr1lli?deu6ge(7Cqha;g_yU{zB9koFv(T2NsjZJ5e zfd;@>;S$Fw2K;t!FSlLb)tVu|2k82P%_UVRS1{C0w`42NfB(;Hy0JoDaG~v_OfM#< zsMyM2otuDMK!=>L*yB0N2=jcJz|Y%Se;uYkd4 zejRjX@V^Fks{dNnWui+(ic^Jtr(S=Y^y0MFHy>lg=EB>MhXcl@8OW{hf+ym}_WFGD zRpQL>H;aw^;7`f^|97nL2Ou=hL}rC4h?jkB5nm!LkkIIoX=kAsZ9j!EU#;iu<1z6r}LRR0*411ekQ$oi7LM-eWh zri{K!&Tl7?yu$-(eBDJ0PT}Dhj?)t;zvQV?iSb9^j2n?9xg@a8J?bEWRr%!1}@c?&JSB4Y|DQyN=_KaRbE_OjXZw2$PXQ{V1;Ah{)y3? z;WpOc*A@ris(p_f;Ei;82oIM;*pbIX7crbbr+(uC@(X%04SF^&BmD8de|-fPd`2EoJ$fJ+h|BkK~6VCk2QZE^UV_Yj!k4 z2OSvWK=F}!G&W8othTRWk9f>b+Zx51>VT~0E0Rj*E5sph`ogiu0?sWZ|1;K;IA(Z?BHLc z8|vA4E#$!Eg-v3edy$vCQIJ=g9!u*%wqijAwR${5)I-K4HP*X-_Qk8^RGH0w?yaaK zM^f(&O6hM(P?C^HX5dRouvISgIxcNhKB_RRT6A%~Iz>!Z4Y?`q#~fIQ6{nD*Rmy~U z-b@V)kLcaSUfskgN(-5f8GfHswZDt!&5}bICu(u1=6|ah5Y6kn+6pJ-nJ9$U;Iicq zvOBVPNn+Ax+#lDaW&)ll&+5k0sqczT!Z4% zjvVYdw}%K8-;aEryPx$$tf#*35|mf)+2AkTs!fhUXIQ+P9w3U|-*jdYB%10fT+Utx z%VbpaV*5YqF~IA`7f||Hz93O$WwHJ5?ed1iGsq2}e7aV|;<%ua#t6@js0XkLKBaPJ zauMQqpw;&o3Zhz-z^w-9~7HsGR(VI5HY-M`Rnr-wYGZg)+)Y91Gj!8B_s{c zi-B5o+nw4^bUF+A{}hIkR|??V%xA{cMrz;Gs85eCSF6X9sX&|BTKlH?@HJe;;UkwW zPn;Lp_uWgs;tzBz){(s)7i#-G17B|nt`Zv$n~LpfwVAeG4kGty{j~RQDS{+#D8esI zTKRMLkHS;mfO%4`f7b6zgK`C$XCUP^W?(OPQN|zeM%9n;-Z`?gj@?W?ma7WD^ZGG; zE$u4xDfzd5BW3SZnVziso!hXSYzlp%9DIgsTKdfGs}+&G{`337L*e{*vzH^3mee_LjS*d_Qj9M(TXI#(zRWj?4G0=dlNk zEpA8+c(iD4yqEm|C_egd{6Ckh&q%xdQvW?S>msVZL~J))O_%cjZ|BN@XQA2hRJ*Lx zBjwN;jA{#0x?^8BTa-#k?OW@z!f$DKkX+{mtDBeO$fC;DpIoxxOtX&3FDln{|n!iS{g0r?V$fwVho|Z)o;QDN5i<2L%lO_T?+VMnCoV zQR9G>8LxWHqn0+yw&89V91h z?$cv~PbBy>@Ns1m;E=4I3SnH)OV#h6?(Xit`~7M9?rm*}Pn#+ysgOT|XJ+GN<|Tkn zpxBXSf@T6leGCmNs0}(k;Nioj8S|azXG|vnfc@^&E?tT)eTEUfh@0RnhW5mhlaoVN zdmXdXRDm_;mD#msM|9?ZS4ab(!<4ej+}lvs1<2s)D=Fl8L`sdZL`;kNx@ zvvTlRKoHhksg-KI*a`LAXyEaLqXcl_!9QmmoasKnU%41tF_#qjW*(t^YJr5w1TQdf zT}uwkJ2oF9TQeV?O#8oaIk{_6!O>n}H@BloJVfa0bBqyYo%~r+3;ttgiGDkX9_dBar^O;_ zK~a@O)}Tu1ZVd0D28)?RB2sPFaO`TBwH)vrv%(X6wzT0~ygyzWG+Wg#UA|g=RNm$( zK^{}Y+g5&yx&j^9@-}#umv_h?-y52iGrFdZ74Vk7pN9F=l8rU!b?#o?`^*%0wzkUY zK6*F%zLwbO=xfWXHm~(7`|5l|Cr9$_dzOorWN$PXg~-^&c@ueb}2f($q0|mPYsR zvg(rH$g3R;hQIc)n5gk~t9M_*m1OCMX~10R;|io)*FVR`32GQ}_>)Uvv?s}h6F&8% zSk{9`*Y3iz!_QU9O%Bt6ryC&lJ>Q2p=FMDd0U|{TF*QgiH z?n$?%D2fTl*l$Y^Sz|?u8SvY+J&;))ZhM3hd->#*;0ryUIBQ`&1f#(0J>uY z)u3kE39aH}FgxN3T3pq=q*py>06TrAhZ^YC<~!wg=|<#kU(1uqvxv;R(%qgqqH6T* z$vOm4-&>rkPdc(vF#&Iqqb}%$Yb-Rk;n z#x5DrW8_um%f!1V@bq|%9Mwayl4kn>uN_hTgIkr{RgO}$USNuu9Nh8e@`ExajWCx4 zW~`QZhwDR!xZ>w3zneE7KjARyn>QhNTWgMg>xr6m>T$1jt$6gv>{X%Ms^DokJf9V_ zM0D&trZn;$Uv28~ABUoUov_TKy1tOo@ySLr=0iA4Y$=@@h@K<+?u;r1=ZF&0uWW1@ zV7eOjV!ZM}5V7A&f(=NnA7pqgL@n;0#pqcROVwTGwAYs2vCu-dpgFd-FjO1vkbu4l zj+OBNDjM)8Wk6bM+H+$xUx#~-+!T-~Rn&NsJ2OSK3)>kqqQ7oWeuP+&`@sLl*jGl? zwJcj>A-IJg!QI{6-Q7L7ySqCCci6bQJ0U=DcXxN!kNfUDIrlp`?~OCY`cbR*9(%9u zuCAIjt9mucN!ghQTzC(L<0&iiOZQK&VhnE&G2mmcw&?C<#`0tEZKlEH)*N*i&jEl5sG!eWw5WJ6l@TU+J^Y#ie?fqoK;to)i51mce z(j!D7p9WZrhc^Yuxsi|F-%&wUfEGQ58|&RNR=pcZkY#vp_uWwli)P4`3Jb8uV!5gt z-ojF4`s1#ZYKxPaVX5NP06Q4H?euPMOl{rf+ulz5>{?vJNCU$8nx;G}2j>2m?d$2i z&QGJI)-hk~`+ADX@9hJ=nNMe=m22%izN@R@WA$6-T(|RJK0AU7{f{1vtsFE-*xK>! zE2e7N+n~F2>Y$qiCumB=PLj11fhH9V#nfxnR0KYzvgMOD%&TtWQSGmcbcy7S$*y^K zBizvsQm2V?S2^2ZmGbG+5z<6wDb8{p%gD0a*!HmWQV7ad0Kvd(LqnyETMt7d_#0_~ z-p|aH+c?U5K5-huvOMlmvAc?Kv5sDjI)r_T3`c`4y|IBahpfyQ0!Ryu>kvqeU-5QW zI%8!PLa|P-GD%#biT^KpZgz>W%9YzqP*Q5^=I85 z7tQ%EJz!UGy~FNj8`qJewY&w=hUk|?`)_l_wfaM~N350Qk>QqCXBT{XK!LTFnB1fF zO)0PPd#oKYgByhJTY6erZI;b#iIaw?a;|>vpmRt1B3U z8^1SPaw_9kV1O-7T~shAe3X8&rtWjfdg2;gliRYfSTcCEtlNXzWpR5=??v$*c@_4u zg!WyQ9zM>zUs}iBtclpv1|(Kb${N?Yy1vH~gSkoAlb`ZOv`ayN*B|hwO5BN)rd(jM zSj}Rr_Z@DAM_Ni;j$2q9IwpLa=t0mfoO6G64@bOeIxY8$wPfLqrLMcB6j-<*vUMywqLi$JQIE^u{!)q1P zWR8jZV=aw!T1fgMXLY%3HA=(3jdeLGT=Yh1ZUEzU#lu}RE^^_qz_Y(P;R7_s)}Ct@ zE%x834c{f1><$!yORvkjR~(^dtAx9bvyVfqt2ddKrEm8vgK4YRRf;ZltjD6;KPgr63l#R5`07P+F!F|>s^T8t~Iw|Vay-C>xs%cZ%w`2Zs z-yqu5TQLiy9PKGJnhIM+4+(9%hjvX5YzyZRI?DMO+Q*==?D%NOQ{B$sR9s zzpHlU_1P6Gx9Jn1SK5o1$I|Ruq04I3%GsL?+LmqR*=w4=qSf7#{U+gcc<629@@Mp$`a>*^m(D|blWmN~d+~j;&S3K~bt|}YwcDR#+-jMf&x+_rH>Ov6(-jKRzf)Q1L?Dw_5GYfG z<1JaLgAVL8GMulf&1IzP<(6WZkDLn!QTyH@^_WK}rYp}OWw(0OpMxrrvoJJZ6Vn8Z z*F8Sty7Lm9aDD|G#JQq$Tbf(uga=O1#&*_UG6nZ@pF}f(>9S)hkj1Iiy99hkJ1o)6 zD1C4w!+r!wZE+#*5@G|?7WZH=@9KGNg za=FN2rC!ot$pR63Dlh^75#Wkqn&(y3_0GK`|M@xiHD?y=6=WsEyBbEu zvmlfKs&|Fn*FDikC;V(d!g-h7D>aKknw6D_EA2D^m6}IqGz-H#)Vv({7#^P_z{LJP z)Z#CGt0@gE@7c^~<>yyTr$U8tU=M9yq9wx`NA4SL$MS<9j|Vg?#Gi?6xqdQDN7XXG z=8b$MLCxO1CUJ#C%bVt%cT=nqz^Xab5>o90*Wv!ByXNMR8x0PfKVMvdYf&1%Aq3{m zEj$?c_amo&NV@?p9>>rsjpmq%FV}a2T$@2Lf1{To#86U-#_@`^n-cFA{pywel}}YL zuAjhlK)oAmB`r z6SgZLm^lGP-=`2D>!3tOEq{3Ld*i{@_pSXqXJTNl96a})J82!J>Rt~?+{m$AV>%u3 z!UpZWSAQ^9jj>(2tdtt+iMsq?=fz$f&5;=m=6@Y8T3>M>x+DnQ(5|7_s4xg&^XUei zZho2ZsQbE3T#M*88;OMIwP7-iARtbiVdy9RC*1hsxO%_&#k@J?PnghF_lNVSrUDV= z)x)toI^>(ihI5CF29JqoVi-t%rEn2*sUpzn_>VOblyDjW2Hd0O@KfYa3TV5goh60O zvSskv1O99qo51cqeqx-us4L%@-q|5v4g7I!CWowc&g=2O^P4`Fj_T(gnr92wyVlP7 z=Pq~;nTL(eCv71RZ}W#8oo8Lw?-*;^+HH1R9ih(ZQ<=+?K$;8x6L74*5_KhIZ`B%j zakqJYJdFJ-^U(Dog6qJ0;9cr7R`RmqEzo{|_yb7-+Veg`;yGO+B17cytH@#H**%_2 zRsBOW9*3aJBm;kB7j^5*1JFhli}E zk2^f~@SQm@pFM8~c%D};Q9F-I2Nh)6WwD#DW3=a9-0X+CPW~NDt($;&pk4nl*Z=y# zKdywXzUWZVp!lPlDU2i6@>vdx>v4+C+Mi#5(>Ko~^-p3DuOD4<^CO;CKJ=8Bg_T1F zY0BrY%+>Yksr9!l@l`Ae2JU{qQ4%ab>9IH~un8F&9BV5|2G|qViuG=&vv>rmO2%I9 zP|&DiBX*;vvUsq9gu4+h&BpD1+dX}YlxvK=6KN%@)bXl4_!xdVB5%j_FP&>jf@G9S zDpuouIp86c;k>xKjP<^y*jeg);TVK}8FwGL^M1P{eaVXVzTSXOY-~Hh+G*aSPAZ-~ zpI_y6rh#AbWceTBa9(sBrtPf|`q9O{m3zYivw=bCFVSTem{kg|NjTK*SFW{$Fy}fA z?x%V#K>=>~+314e&jtEoMgw`|g~{}Xcrv#qki@Vzv3^zpft>TX`Q!kW)dQ*z>t7x) z5L;pVNLAU3zhCgA8t>gLQ2-h-R+qG@dq1AZ8TMRg4k$s+dl z?O3q~jVidL0a0PO*lKE75lxJTIH-b!i-=vuNIqk*3P5n+gVFqOrFb#!S=LfzoeJN} z=8mM9_MHA5AfI9ax8GY?TMD^PwR4pZ(UHk;Kahlhc}YE_c;EZF;JtO@+`nE5oIQ11 zj+~{KhwZGEnMG-9NP2J9#sL0$=DTpeEa+3xHP;{Dv+6wEx*c(t0@OmZ`5{fKS?nLMlWVg5RX zB^k>HjmzL_5w4kxQXU3J#)8Z!ZUV49A^pewf^}yFaS0o%mn;$XF#!u=dA4b7;nR^n z=z?`+NC%za!*;sI>%zCHw#|e}a-ORx9MUt_vDP6MPUz32oO!S0ouL!mMLp z$cR>uvSPE^!w{3sbwRs=sH_gjHFkic9Vzet%~i1_W9)O0%YWE!-;bFQ7bY7eVtFPWDr9h;>?Z#O^J$fC8~ShaH>gtJ(FGvNQl zr|&~dKSiuO6qCT2uixL13y_qve?5$os*FDqxSTtIOP3fIoaHow21Ww~(N+k7#bN}T zCeBY;|wqc|2EN_PHiD4%Z+j6S|vrb)C<7`TY}P+b1vOr*PNCu z>%O<2Egt^mcr4!ewU~z7{hdU2@7!}A)Oj4zk@LFyghR16W_jS4>J0iXu=c-R>#w*z z9j*##O`*9VIWK7QX_m=uCTm5DrOnj|aKYrE1M9NsrnEJPo*x%;;ptGB zcU*9zTgaA!_E>+Q>)X|KBbL)AF!b2WLaK<5Dxvr};PMgnopJW=q`RpjG2+`a?f90FrCxp*4u+4_Uu&n+!| zvH7qb1B7-@aA=gs4Z9d^F0FARMEnTjkpgy>z*vna*N!dPa^VAZV><0utTkl!pQGTH zLAJYb-={~A5oaU-E3#2vB#$I9X}kc6%qg$6VVzm*uvoi2d9!^;dwcL! ze_g12QHSW-e(4GJ?%;gA-`ZK~I9VF{=ygdlaM-}oxdTn~Onn8duKlrTYxDn@@U984 z#TT(MSr&o#6JsMjQ9p@Bz6-X$JpJ?7jx&r~+2KdfGwawF=@5|C?nUJ|liycJI= zUh*yW|He;u(7w;?D-P^bXD&|~pC6vG5@b9!orkhsCM&1Sp#3jZI(NcIt3H z#;%cCdmb$f&b?^7IlXKDBdQ@|n3(wB>{q~pAUNI2)eHZRtzV(Z??Mw6n7Yf^hM5iv z;`xcmE6hVgYpDX5BEGI;1cK_l2?=IPXCHMF$cmnW0|N_zN$7ymcKLD0w4vJ`T=VR$ zh7>H;qrJ;Weee^iV9qSL5u0{u__#%s){+{_-rnrtkHIl5*g!Wfw00}T_R^Fb!0z=>Sp1B`z*Vu; z5E4@2rwYdQ%9U`4y_)Vv)+h8J9RX$UAOhOU#4X| zvn?zwlPX^pJ5ly{Uf^G&FVk?IR9&w$Rsl3$Et8BhJv(4T9&V~Upp&BYjz9j#i#Hj9 zc-&rnY}e>B`S=UJ|3|Q4fpjpV{DQ-mT?|@qy99OQ`2*qkdfcHq5sMxFp*+NoQv_L9 zWxLTbhoT|Qt=DjkxQ1n?e5N&jYWFS10IDmMJmnxO6zud2Z#rl`Y@J*#p0TIm79qsZ z>wI2N9kLp)2qf8PksC<^*nmpUvE-x_e$8}DehA3i{Ivkfv1S!hE-4(H<3)ciaE7i@ z>$AI1y6D%@mJEA<@10hp5>LKL@C`pd?WXnhPGW^0McTi;SeL($&)fp4PLsU$L&;py z+e!bL&TDw*O(RHGz6cIY*4^S5&D+yQubOA?tXIj0lFG+JxZ!@UD}x=T%6Fh!`8w38 zmg#lLpyf4sK9Rw$_n)YyQPgM5>v7Zi&h-XmrMcxd7uuyo!ppnwk;wq=Jke(20g<AJ<-zsTNyU;RW~M~AvacPMTzo@?%% zjcwN#Dhcm~vOEmDLms=ug?jn9CzwZb^`^p_lIPrcRRz1*q1a<&&co65_`MQjY4!Hj zLYU?!Xgl-XQ`A<21;>AMh!qal(`I|A<4>pc%g&y{gP6FRcvNFuxLTKoDBLz>iIq_F z&(SLO4jf(<^J=hvJ0{Pj++|+BGOF)~JGqp$#sjkVcgp_Z6pU#Qxq2*oWP+_P@p?}6@Chq zPZOjp7QxHLnvl&;M-JLed}5$qua|LmUyX2wCb;0_HHPF&C6}bl~~GG%!}DfG2q>htS=&6 z%ecpw61*FQ+)&O)CjSDg`WZkI?8x~1*!>6MStkX#P%lZEX>T`8rrNq;PO?OsxkKf7 zh{GY3;kt2feS7i-Jm2x$-u0YbjJXOm+nlx~ri|;uwzG(c)bG&$Uzp#Am)vs_R-jG@ zKYnpxdV`>jr`VrP;k;@AfO^Pn)G1ytfvDogp#1D)DTp&*&U{VU*n#}zPDX?8t%=^c z{xQE_d=GiNrMpFU&du`)-^T!%w_C;ArT>zOz|CdY?FG^KwAfuYUdvP>AOSn%Ig%`$ zEF`=nqG&V_*W7XSVZ@Iy?mpbZW0|_~)|2s%P-I?meSL|*2opX2U{&%6w6o%QZtZ5R zWYbE~Ys6efg<88!wL-gD-HGT6Jh*z+1kGStH~asN4kfciaKXAclWtKjaX?5youaE# zu4|Ox)QKG#xb_Q#wABJTM90PBb7ULJv#eZ4j5#{(``JI#Jr<``S38&7o*eb&baUD? zg;JH+(kb+nqbdX=I9%0HK&NpY^=^V%TD6FNj7a~((h%DafV3w~rw0ig8JTRtDyOSb z2Jg&Nx;myv65~Og9c#WH#QNglaRIY*3){qTKD#ZPYt#IjJ^BUdyHbd=F=CNmwleiA zK9{bF!$%yG%Bt@TBbB+wjiCI9$oPV@pdevnz1vBL;Yp z9eI$V?`@lYH+25~pN zi+BG-@ePOrcNlHpGREqDd^8JXh{H&51m%d!+PS8yn`f4-5Kb0<@=m8mxjmHjR+?Jpnrit<53ZE3^NwX0lL^nU$PPk& z6)ZcQd<9lD)Rb0^67h6Zpi_~Z=ISIU%j5xYmEQL82Nro@!=+d+XcxM z+Mnab;2u!qbo#56dZ+yI?pvlwxQcz!7^T4kF1Lod*a4`*MBk7rqFnjGk!Ty#P)uiJ z%m=p`ow0)qo4cG7E1|w0VY%-Y_`pH3x+&!93h?ARljS*and#dm*=`AfI_Kr5s+%8( z+CxF^me1uaPTmDRAK&%n^L9sP8NS5e5F>f)e4QZcikSNYf+lxmkc?Bocr!e75Oc$t5jhIWg7_u zpijZ{lqRhUO#wJ1qcLMq_t1RwSn%K`kvCpO+r~?lQmeSq9Uj?I6-SBAn_&*l8Ul!g zZ;uDoFm)Ifo$Fwx;ALw|9gdzl)}=goO)=#Z^uue38^5c3m#1j9r{wmQo`=iY-NHFH zW>xTeN#7s-^gmtU0Onp-%BVa@*{_IIMr_gZ0EdZXz8Rh7R59HYu8oSHED3GM<#%m; z%)qe#NI&iqoF2|dstJ;(o?)!|I*?l3f%<_jT7K!V~Bb<%%r@uVJ`>nH2*W+H>{W$i??#By`@eeG&%;~S^ zwfP8f{PY}LfQ|zctA}W=g0&y8FaRh^Y-GfghUKRng{7nAwA`*)=}%}ciyX&z+c2m(AyXcOaS zZ0XR<=#9k(hD3T&dQuGeaonMS*a!{<-BWBh z_vXzV0tDA%!5bh9(}3x+Zj3x{gjZlk97jyF3WdJCKRM-6@nAKuwswkgm6HX&eV`wD*p+-Uiife^p z_68)S(iTILSZ6dth_0arPB0zzp6KZb*{&pip@`toeka-q@!2TTdGJ{%bX`GE5f1TB zj%7H2h&aC4qoukQOi;s+X)Te*AFjZu8{Bbi5Xg?6CF6G-=P7^qpI=_(Z-uUQe%&m> zkkL>$vg%k5hk;j=FJF^f2OYg2qn~mln)af6u{TNJnNu*AlpW!m=TB{Xn~q$fgvr9dksq~5O389JFEp{X^zi-!Vl$dVEP zI;u~Os0!3SC?V)p<{w#&Pu^IZf22zhR+Tn-`(7icP#VUH4Lj(<8FqfCIHwkbZVuV{ zxbf|0npaKqLDc1SQ%uWyEp|qX7G!6R6b_~*ZAj9edl0@MS2 z-GXsrN-~F@7*l>hndcCV&~y=?z8vK!r7yUF9F!YU(Kp)~#MJ-0s{7VTW_xCui#!e* zx4u58opwI`BC`JUIx#>X6j?_x*cw3O=y=n@1=EtFONE^XA#7t<(Q-jJCsMrFinb~} z`h&5LKq(5sTQKE{-L->53I1eL#={5*blWVR8(HOXK1vN8<;H;+>FGTvoo?*p2+x~q+L>Z0+Y}iqv3K;% zYx3PBJJZh(2jakaL7kvF3{nZ#8W zo(2;&;Jt|r!Eo8>1ekc)5Z*He$YcbSdnoSE625O=yFn+bKcAT_=cGRrxIZu^mBOA< zXpHQrupT*cdwqN-?2D%9>T3jL744WGnI%zG?jXv6!`xA5jkEh@~2TRQke@-@q{LUWg z=p_f2pe=qjtgBEbjV?YE(KJO$lHm%>@Qn<*Fec(LS)Y0b5BzS_v^KORIA6vt_S|-Q zmZtyPK?!8j2)3}aB0MnK1>-yG>ujJqt$Xdz!t4)(!Cw-D5jiC5fJRDBLHm9LJoSV! zd&y;xA#{V0ANgpb7_gt6%fylSYhm86K0}ycRV;Gt<(|gs3IccZ>?An_&4H z)APHgytf#~0U=phkr_$`WhUFr7RlnN18e7n zxzj8A(B)N5G#PjR79)4z9|duTJm*_{xAx^P7(o*e)L@8RHTg8jRH$YuH;XdJf+9Cv z>$!-O?Y~mHe_0KGxqYu_8}QG$nIZ6$z*9cNQ7?p{|E6r35GWjS9*(R!Ry@^ERfr&9 zDfK*3`yIRVLhncaK&K=8f+$4SHIKnp`e^zAS4Y`yhCYxq^58nWjxD<0sYu;w^ny|L-x7FZaayU;zj6-6y_oVK4k_Lky=J{Plw$GH4i| z7-ZtDdamzh`IQ2{3aRxh($%W|9PrPssVHuoM$!jzmPts+ixwo0>n9{0I`xf#jD0AW8Zhnd+^ZVw{Lq8`ymF6xmoG<@AfxRD&l zeDEunuGGRXYw}a7={G$@c~UWOEDnN+a|21G_>s7xG(*QOrjo=jc=RHQwDwjMVJe$c zuLvF*+cqw6Y8gYmCK3vtDLp4Duu-HC%H@S175FTtW)}4^4e*Tfiy%G3+T8>tjTj&G z#1C9RVnn3c1{Jy>6_aJypIUwn;=xk9Z8OS zdO@5(HLW^KkATjg1-O+ajdSMWdI$%OQ>S?k&Nf>5x+9(11KQ z{djCF-QTr-5sT+5SXI!Jpwgp+Teri&Bk*L0bU&GXxm|*E5hmaG(*|e2Qi2bsuC~RO z^`uAfh`e@wS}@%V8hmn9DwPXnL4Bd^p!!Go6l0u&G_Sp0pe=%kc*6KbbYUs3eN8(j z%x2bO+b@1JeT!S!+!M|x0uS&UVLh(){}*xj-~H=aA;Cq2hpje?z?%#z2~n=Jz`2K z2qAj%n6OpqS`2k9Gs>}hJU|Qhuia)2Zm1?|(Z_5r6iLeUK zEC_QWcHAp&oI_dRc-SY?6CtRfL+dt_K~B;Kz5@IOeEJe+>tpi;BssLkAa9IdR^%M_ zhL9UBxZw3zEvH|KvbeW{1-G-I`XSN(CcpN#ap@=w@Il%rF&O?M2C|1xrI=8n&R?F)~(E~gU`P$QG)%_}<@aK~_^K&!%e2bP_!snKYMzCRLIC1{=;eT&Dr3Pkf zYha>^HrUO@06+rRf*JP4+3V?A`y)Opp+OnoHC4bc|K@k<7gPlv9@LV9ArjITHd8Iw&jKvmg|po|xz zxJjYcp!sWmj)UUcezJueF$#xPiY8kwf&Dz;yx7AtgNo!Pu+s0%4%119m}3B+lRT(6 z-C@lUQ(ZYt^0z4U_eSU7E-xbZ>S$Oz8>LA>o!+j*QAhvM>|}j|S?Fq6bBM;n zCx+)L9iW1(FPH{=`i6tM^Jq30x+9y6>(ll?_z?uzaEx@<{5^-ax5_gLY3E-O1|v+9 zO9ec1F-{YN8R0He*(3sW6oligjwgV$_#}6O6`d#nA&8mbvuF98kNGmlxrZYB`1a$>L_KOl*ZlJ6lmcT9t0iRAD?)Ykax>Uqjq~0}1bHbVnG4PgW`C0O_bJO3`H-*y zo|@AsKCrTsCLWXj%_|NC#Sq>6f|`F{sv4C?GnrPYgS-gI{DVjx%|v$z!}tt9#{Uad z+1FcCy~bAj7E!QIR|1(%Z9+I#z6^##q^Uo{#d>Y6V1hCtITg>nupj>E@;N2;RlLq4 zeb1C-%ZCQ+hZMQ{`x34oxXZz+9O4{I!zDm@#xPhM(q$Cfl8(?bNhdg}1BPYvps}ue zvKH@spW_VkfF!e&qBF{i*S}ZuryU7vFJVL+^FtLS|8N)s0sxI8S&HHB!!fehgMjEF zmui|yjd6+~z|A=N2n#5D^V<;Mv>BIkw&Vl+Djv_N}+eV*`exxABU1-QLKP7eZ-WHFc%aNv2S zxJB`0w6p7?8=-IL%JDl+6ci!;1>Q?TQ$UhZ%INB+KiO6SNp!{+o%O%h<=uB zqAT7$!pSz*Xp)0Nj2cp4#00I=DTXgMdp^n`zSnY-V0EAotTyA)Zz=m1(b8G--Z*!^vb zaWwA~T)uUQ{eFFpu-)({dVY?GF1gSE(hy4lf?meYlZk0xh>1MSQ~FRU5*Affom=ee z=j6$NN(<}9ial~84@nBN!NJ1F*uwUSz9qiL=EmVw`(|CJ&RzVj`B@PdrYBomzaqCCwFyM_w%IU^hU4owx~@_AGqVBrB5G zu;Nr1d>ag&T3F2&!DAssqYLBFd40h$o`|tj0rD$?@Bg%u&c3`;XZ)JeVkU9d{ve|Q z`AYb`0teo?2(VMsA9@AcB2|k4RX^D?^ll=vBXlDmPX(5aKTge>kzwT0Fn=GNiVdw- zj;?E$(_{I-=ot)yC5&ts4};5*HO0n2%FNE2cjDvAuka90NmzwHA0`4MqV%iVx#&bk9vc{(+Q*<=UE;ki0;cGm(;+>6`u`BKG7AK1SHBk+m!wX`1M;O55U zf`bhp_z=9;+nB~n*bw!oJh@N;=1sGuct^2)jj3}`vLL}_eSjS5$bL9~z@&xMJV`s= zMeF;JtBG$_SDYit+jr+6gJ0FFS+S{#p8I~rQNHHdL`$b2?bMmC;5uE8?QPP4o-zbn zEXLaeM%3SU5%-_WL zkJx)qCt|jZut{!ICy+7Cp@fVvXd*FJ#$hK4+!Te^n(s7Yz@MklA1q#o79mNYhnkR3 zoI>EH0yv`2^+i{dT#!Uxnd80i)s<9(k%gBCEjP#rM8ftFExZr2bSMPTINU5-?`Aj= zg=N%Y&_X-X13+v%NN!dZcxY25=%yb2D3gXAiTT>Otn?~5v5FL^WbN)wap`f`3OkQw$f!capQ@7eUV=NwevvLF*pj+GD_)86@U{saa90ok+BbtUa!^0=ws zJd8Q<7nUoVfbq!mB@d=E$@*c32^h*BdI{?U*hu`J+)yF93(6s8@{K45$%Bs|yY#j@~oyBRg1@q?bwiIgi(*!hwST=b(g;uOK0ITATIbrx_*?(^y zYwlL}B+(up{`yAn^ZU^+(Okf2-Hd@_V1N+SZhizT{73P;NKtLbZo#ur$TX$MkP)Rk zD*ae*c(VPYf}pWGth{%R2utBI!6F3i1q zMVt^gVami6O`dy6iHDf13l|BHs@aDGh_>>5?YOPlNlVv!KL-uGvg} z7oVeYgZ^nKF^Ua5B21}8%dbiF1ppE>iprlgI*wGDsT$ae#=jq?q#>v$_$A^aQtVi) z&LI5=8;0vg=0#n%uK`1{9FF4;;6tEF8p8XpG!`84EykE->-Gv5!GDJOxuPhA{B@v?Yh+sRUN3)>rX&kx6DIc&S z8QXd7f8)i51lg9$J;vyGJ)8K*gd^e&=swTVy8OM4&y#`u6kVT>!1TU__?pU!Y~`W6BCR&D(+LI`4Gc6u<#P}> zwJme}33*9hY7>%9-fqEMTl=qRVYhc6+U+74qF zakNi3Zn`M`#21BK@eGxWfw5Q^WPC}C;^V@Qbj!i=XMD6;VcMr}^}zz7#4`NntBU;R z^09*uJz*$`27s7+SP}R7oLOj`|8;NG|8I>((SYmtwig{&m;{&74$VtqKbGLjSWzw} zHy_GWYSSzfb_8DU~j3t6Q5y9*mDo~;?M?Ygj%(Dh!b!8~>E&>LkIPjD?gg9=Ew z1D~fHVw3ueWi=&sfBAb-=+_MXx6rjfgaBd#5&85KlIp_JD9ey`KYt`iv*1{{Q%~@L zs@=;X0d5E$n6*F;PA+j=<@TC1MbWPac~nVsI_X3JW z><4sHauPOupQePy7-twZ&m6320<;CUEIt6Ii0ZJjlPWAGL2#==1Y7h;Dnz!d6xE;J zoBXw+=x-4tv5g8uwhaB&xi8fRUc)tQTN;NU(8xHxRxOg*$@sMeDzNqPpRBV-LQhyG zi`(GA2XRTDkj+Tq!GgDD@EK?uNqj|RQhS`dq;PmDfHHgswL52P8N^P70<}bVp^u<} z9?w>mmVvyI8iHWPf;5P|NO2Un$7(XH_k?D$FS%6D$*dq}S*v%I`49{IY0>Nm*!5v>11oO~}m6a8$xymzf zMWwIhUJZ@)eHFc0`2HzYsU@FYC>hHc1@v$zdR)qG{mP!D_dmTVk`TCmTH&8!5}9&K zF2w{+`S#$TCLG4U3nu3xgV;rv&jey!CyS#;{YFO|+CEvID;?5>hc*P)70hM-&rt&$ z62uAhht>2?O%0J1s3m3i0f^rDYC&WmUkAf;kSp#O!Pd1OvJd@pK9R5VY9$s5ok_mP zx|z*yq~cf})!?5rphTClY+l7TAov_`PO**=F7G;wyBMeLAc4@zHH9=vo=Nsnz5I~& zZ5J2!N!b4as_a%UydXbCO#y#_dV#VgIl&pn+gjMxyvTT9p?a-ny&rm7nNZUyhTYk)yWbQedRT zVTs*S@myNPANwu;Hbnie#-?yE{?^vm>@e)2a_q}I_v0OG(>bL9u!g%B8#EAF^Hn5E ziUmdU9kVc_0Hx4&f%2mv)zlaceK#XMAqOEsp|3<{DBX#+xkaCpB&JUi!B!7WwHIR7 zITCn!)djbXI9jJEQAe}lAkr16#t2vY+}fdjWE9abva9fzBzaZI;pCtLe@XBxxRyj5 z1kD%lfP1Uq!%dXBR&W&gBETZWv=vU4iJ0KHF=Kk%V?1p=7bX8sv$S{kz8EE*BiT^h zEME-3%EeV+BIV4CBVXF(>Zj?7>nqz4$W$B=sbrdRW=_upc5yv}f!f;3eG3zS6@Tz zR_1{MT5TL5s!4ngLQC?9ll|1{9WWzz_%=^u&EIOc&!YfA{UME)ya5*;eW~4;wJZC~ z{M9h{_-ZFV*7H_Ize)gm{y)aP0ywTE$yQ`b7K3Gx#mvmi%*@OTEk;|+Ocpb>m@H;y zW@fgS^<~e_{5QLAA)+Jhz1Jc^!1M z(2WFqqfS&**ec(ogL~?N#uDU10VVvvH|W1^WS2&i-uy&1wDnG z`^K&MnmUoq5_mH$Ms;sMvs2Cn%%OU(gRte%{9IUs@kj{J>D7)gB$W!Vw7`#IqpZs` z!*eTh<5d(E65lm*=8h#{Iyvuuu1Ef>OZ>|{mmY+`qSZHjR9tpqIp$iS-E8{$tH7X+ zr8t{f0J1&9wW2Z}6U*a_<@*wh(DE-f5?OeD)T($JVH~77j_fO_n)vL#zNMy^3i5c! z&{w!gXE_t0CxXgAggFQt`^ICQj3g!$7;>NUyydf;G3%w)+%Pvm5#*kyMA z=MqLgBHx+d%HWwI!J{Ct@)tO16mkb2oAoWVLlm(%>HQwtX{M)HL68hHj{O+_*~2xP z6mk1}4^0h}Wb=$5!Sv$p>DH9FQ{_D15RyXB(p_yNts-fZXk0b(Wc);lXoi7*H*VLl z5mzXvWKM)T#KOlf!VtN{lIhBURyi#4-Ajjlk$Lq*&muua61e@yerTy(DZ#oq-_`eB z%EWf^O)3g#Q9?SzS`Vlm)o+yrF^R6>wh*iNIYB8OQ*YHEUD@zcliY>C7z3`#io%SuZ+uOc z7K^aBl?-=I#XU`q%pd(L$P_szNkZw6TgIS}agOzA=v^bxfn-~1$H@vQYG8ro|F;OM z(dQGB_LXxuV#Jk=)%*V1)A)M{C927a;A{<5)o)hhil=3x!x_g11V`{8O|#_}I@rqU z(;PvFrMY>UA8t$zPNia+f~ysQyJ009(P~&R9X)Fz5Oy-NToV!y zyQofUmR8tfbg_3aLnQL==6zaOCycR&+@%~tOnbQjw;q3~i5w@K zJ-=7;sq?zX)ia+mD)NmJ`%6f`Atf-$cS3dG=}YTg%jft(BAcO^)k#MrT$HNk0?H5b zOcftue9OpI9OLXraFNxJOy9R_88N70&FAk*cqPQ;L+Ir=gz(@D$O>(5saj8<6;?_a)guu zgJx?4KK_pT&pv>yW;&c&z4B^N6@3=okNn2R7mf$7z0k~J7VVO)xFJF7XH`yfwLU<;FRF?9V(&m8g z1aN3F@08=Xj88MCIb7{59}7a#=9+ezi=Q1%lZ}Q~|8^pi{_Zr`t|0Dl*X!>|wPjV_ ziWmuBn>^})kx_qD^LLPbx8~*8hDt4O%SrY=;j_7abvD26{hreK#=cN7%ckyu{Zfg= z;~?kIM{(TV&fvKVP@}{<_+b{2jhg2l9G?7xf^o4bG?(kL^di&*eW_^ZSFea$LFsoy zLW?Gxu1X#u6{n(1k2I&qeX-%CacLHO5MC$!W-Yb`VtVI7ssdzj;)5xC0@uQtV`NE} z;rcGue$8b9HpRRPF-0=fELaVRi-4FQ#OX?Y{lmy4KmNA#?-z8GP)QAOa_z!Y(1 z)aBljYNJ6=FW~(_SAZpy*(-*YSO98IO{p)x)4S8XzuM6Ku$B8J1!`M{JO@XUb1&t0 zqxwbA zY`v?)iJfy1r4<5N5z^`g_n0EhvZ+SH)Ekd*i_5B($!I2WK18Df(B;*kO$AaUy?nA+EM))jfSbW+B0>xfI^~RQpqrBS8?71Cl|CSuNMqHDgH)C6YQ%x%6;`|I(tCK$-u1dU|Wl_oao&>#@{8 z4evyuUlt(mMCmm8E^4C=vt68>bKtj5l|rvvTeL-xgOVhLLEp>Ksv!1b2%?dE3z4IU znMHY*ghAoa=nLvpc<;XHO@%N=$LS-?`-SVI#QjE&0Q42%0+@b}JIJe$|A0`c`$zg+ zY#>f(rp3IzRjokQ6kqJouRHLtL2)U(+bZODK98vRNYAdT!WPKwC6D;O+WPxF0-YZs z2-E8$KHZrY(qPH`WPQxMkn)c9H)5u9JIY8ysPZR=OQJFr1bbT`3`72C#*bT!+9Xs= zvteF4D-4HeTiz*aEv(0xw@NIqi>qo2*&yI=?Gb(iB4w^~jlMb|n;}6(kbAJ-Je=2KxKcKP2=Q4*N zq~Y_25shxBj?l~WPX`7BFc7*q&a-I{THI!GOS`ZLwY?oC(*Zdyb#0ZGAuHNNW4Av~ z*+iqq%uB9FOf+#Dh3hJv=?pc8Y{~}=yE+f4ysKg&(+#}%wi&LWY{3q>-VyTn2I4dL zEX=yeT9A;mQI-2<$oc5gbplGS?EkiN9&&sr^Df|4I6&L(x_J9wQm2e1hwZG6;ilw< zJuWhW(}{Wh`^AQi7rw03D+4M?^Y0@HD?}Y++d_9ejklcJN$5^xw~>Jq{z#-d+EH0VM4a&SAlWZX?b%bYHwjC1hzl+k^}Iv%ZD+dq6WZu2QQk7**QI}v$K(jGsD zP5Ucr{M)@Bqafb7J+Ntdb=JZ`k8;XQtP!0|PT9fSEEb>MV7e6DuT1$n6k*~|Wj7^Y zD!5;1kPQ%a@@fII_g8H=qOYmOv5TmD>y)Zt>i(phz=_yo9kQl6Wm1Aug=OU46|#?L zZt?B$kyrV;=yK`8Sq>3hQ`X%?aPa&Px`!NVr{)|zKfX2NgE z5zfTV5--wELy*Kcg(by?Zv;%fJHoa(?7Z)|r2)VmSUL4Rf&u_}fc87*iX`oqQ=hZp z46+K32ec$rEq6h;!MWjK!F}90Dad7daK5K7-s4=yx8ExU@7?eZR*#i*r_;g z|A^82mPN8w7d4o(JhX<0a7P*IDJBA!CMe7}Hq(yW09HH`wDySoPFYT+3uTuJ?YVOe z2UAnb%}y0Z1uZ)ENwA>FWC#V1%gYIkl%0SPCf`(K3~^>5MSyKdkrsh1YCmO_vVk>J zWvn#umnaccK%CuI^FEe@RlbMi(4zpjt@rK$;*X@Tq1I3G`>TIFwGEQ!J~oeMHN_S!@E>{?D5)~$1>$g{H%=I zdn5op8I$FNa3;~;WPA4!^tJEmZ5ja7eEk{KQqXd9b52#^y>&ITjiw`ygTW;~Hcn%% z0ye6Y^~NqKExhhU9Rzy0?^C1sgyv9l!#ZopvuqzXsy@=J{nD!KZJW4h|5!6YhE{b24fxV`OU`Fh5?SK966G7%osl`WocxXCs&!?;PQ zxWc%lm!p-DIOIA#L0kCOSVeaH&W58>D0-qR*G&0@MuK_tWk7UT2ZtbCB3(F~V6GyJ zzuJq_^rt!beAQ3m$c9L+Rk}sEgb#w@fymi2!NWC5)|zNtUqI1Rk(8v2rw*Es{emfM zjzK94Q39$$Zv2!Pk7q+a57+>{WDw3HypM-zx^F>zln+MOWqd)yo9gsvOn|?L}NDZ zfEyPyOxbt-ek#Z+*3drhZRF)K?%TuVvd{BmHNae9uN&<{5bfoSsr2S5vWNGtv(D`O znEx)oUx9&WbgVl(^C7)({tlJR*HytmTs0NEgX(&%!!*az%ZM$DagTx zqMi)cDoaWlbk)L8%7y#+WbO0?j1JovZf#fS-DUERrO!un!0acCL1`4InM5=mp4kW; z^j(iumDA>wrkaCC3-)Y%_7zRFaFZ>$t%X%zM?*&rtdf=kY|JRbW1fp4gi+uT3I*wX z1t^s>c-FAk1<#ax=qQS$wpnNrN(4vbHM$B0fwQyGj>X_{!a)m@@$bJ#9c&y-sVm-k zFZbTCLJn?s^kVlf-U>2SsQ3RZ9-*V{ww7{rl6EPrufVFmh9UXme;sz?U^?!Z5>Km(bS_t+w8+4 z_xOt3Aq`%(+b3KZ4}_oxymspu-jVV}rl;H`i~7@rBRlV0_fhA#)riOXHJz);BkRjn za@)Afz1##KuC3DANmR9^@o~RO1GeUa{yw$OOQVi$>vP^d>t%z^7`tXOjhnM&lvn2Q z=?yn4=cUF|&?0W)`rZ80Xg#*(`$-smNZNxC{ZuRiTn&qHqy)5cH6SJf!%>O|0uUNmlw#ynVT*=IPf6UnjFb{U4zwW+9kM3cJ+<9`-i{ zcy1-1!3%YKV034~FkfP&M4v1d4=G;i9!H6mw({y#nx~{|&Wl?zF<%xj9HP`%Ef~GY)s*}+jItw4Y&gBzfVg*$cTM`4Q z0(y2~gFJ1&kifhKPowYC^Yuykdxr})4~Y9_oXBfkQJ*Wt(atww-RJz>(~5_rq5R(c z1czNux5vft`1QAI+XUX9kC3}V2M-R$_hoI@IqLBB!J5NwlFzoG++*Ww=&OXkH)*j+ zgNZddO20X{xdBg3PvghEowaywc5D;oxgP5;`^Fz~F4@tDAfj|N+SF>u(y$_jgLq!2 zjotWl&#=x8Bc`;@(_MM%-neJYZ^zsIcDekIM+}5;ch{G!-+pbHdLeqIx3nwqN(IkX8sV8Mj^G(4GoA^<4H(vk1@~4 zmLGM0Ismm=oq;D5OYlDN2!QQqfR}yu+9RsAFoep-`g@Wt*K#p!hJGn&>W=9{rTy;= zDdA4sm8t>Ha6S)NkJ($QZx)b2r=&vr^Z;To#iYodK(jp05D_c-J#?eA-J1K_vx|2rJEW@LA)MG!gfPI^T8l^lSy+LH zOaSB)A|=0pIY`7BR;$wN^2>|S+SOX=(MLXLJUO_XV(;@c519-ux3-F-z2oOKu0nI# zmit=nn^oIjNFFQ8Q^z?~ULf%Xw;NOdB+oNXCv{enX%Ba=@Fg{p7zDE49TC_HznfBp zyyYU-aNB{qnd#|IMTEsen2Lo_4_=G;^S18#vC~>k1n-qvoo`;doS6+8PvLVe?38Zp z=I-t4zD3k7M~jbKvhV*Tw6Q9XwGuZJ^Yl4it6#Z|6fA^~AR3D3-!58_Q1@@AC3Le; zmr-Wz@H(hT>;1J_VQ;*XC_=3+`ay@0U6<{H>HuY4-lB9rcG~JK#slT#@WqS)w}z6b zX1UE9Wf)H=xUrBN;#zxc@iIkrk4=cmdj#VXg;AECDo9&h@`h2BVRl{DSbJ z;oR#usTZfCL`3KbsOU*!P}o!juQx4A^3H-pKQ@tTIeg2y zo2Hk1e_Ja|h_tMm_M7|We!6zl!?x~BYej? z+bi9=vnlbKxzqy~?&KU^=eK56-ga3rTBA!P#`#&VZ+_K(;Je5W#LH0fzXaM8r0Q$m ziE$ID;w}xY4c~6uz0S-9?w=;U+$|b7Hm`b|lAfIWg1J5TRiS1nj<8SexNx4n;?EjC zs9FPec6%Yh!(}&4e(R z-4cuBOR6wCc?KyHf@s?yXxw`5V1lGcX=tA(Db6&T!um51u+m){B*`|21W4mpM$*pZ z-M1jSSx_89a?M3gL+RkA-d&k1%{R`Z4}78X7;3bpfN6xMCs3GwP{TMpVUCmYMVxYG zGjKEQoBzRJHY=2iHF3sN#<;G)a-LQlDypF)Hxt%389J_$rJ0tM9|na1Kw(2{faZCO zV$+|k6Mh}5+hfkS&A9RkP5|Z*=T7!IRKRLDf`I9%o^kv%`DxBtOz?Ai#h5OUUy>gZ z*B?uP;wt$ak{_s`XDBNtjZv^chRqh|I?Xo|-1T}-*0obrXu9rw8Qz;%1U^ykrxTX6 z-|;lS3<^44?CY+AG>RV7uE66lkW)FV#5N*^%mRC>o{J& zDuBTAAl8$o%F%}U#Z%T*Yf&1{d70bs9~sS)UU9U5<9O-XJ@G%2<;Mp<$+i4Tk2RAA z*Qv;VACo^%uai(cZ+FnrSoE)ex7FqyAE?6aPU}Q8dKyyu!qF|NO}yfYB31ij05ESq zjqC=KsxRzL+^12w?z84IZ2cFHA|=uJ&HVudAk3@2B7ldJCI=tg%L{^(-k{9vhs?sK zjmX&oj)2>CvkRY9b(EiGVy)!N6Ma-mvITE`nzsvl)MkA98V<{0LQHqJM(!1>g+ z3ft1f`da}}^-eFWin7pwUa7nRoJa(dEbr?=X9()3;FC=!0MPRL>%^%6&57)Y!4$w4 zMGyqRmphU6Sip=4Q08_R!{q_i$>O~&a_up8%Zz5=+7FCMq0aUzf7AyQtP{? znEs)mmIlO)J-6bVAK5;{Gu^I_f%#ASZXO4V?X_cFY1$1pILqy(nXB%jr?(An7cI=r z4FFT^l*#H%5svBD!oMN1|4(Zj2r!@qFT^X#k+vLPX844AID!uHKwAvTC{AL^Kee;X zex$|VDw(dG1nHEEfu8=QoxOx_g=E-)7&U#Q5y3c%!Y$U-E%GMOSJ5isCDDF#AQ4Ie zObrEN@G8DE&cuQ<27|Oe&MWWop^D%_RxKroDPOuva+Vg+=f}El8ifBY>pPqs4h&&C zi|`D>MRulBDaiHnLrdxtX=i+lA7f1+812trOF1 zP&Bd=WN{;*TP3+|1k<*(7i=9c`$c8A;66GSf+uS$?;7_KWsK`ihCF*QxlZ}VYp@W5 zJtqk4!e3Vojm~S^&Y!fca;#!IZwkz3cpZ`-(`43VF!*@P0na#|cl&d3ymK61=eFVN z$qSQ3h=2Qni%5cv^&Th3UHiuDwvpNEO6>-(xeWHlyLyjT-%|@6agi1(HbGKvVn%#F zfR4E9x0vqu92`?^?EyRD$ocQ)$Hae*WF56V2=4|BChI45yi0<&? z7C*krv4&2Haa_<)39;rph8;lAC0$A{rfi_9p`5mr$^!d)Jn0FMHGQKrbjatJi{luUMthrL>z;Ebk`33dmLxk^dI?;O1bfVls$N1kCm*&6(VR^7sV zVP~lnekt+cMMc+gIfZe2aTpD!;c<&1s`&njqiva$6=JpF9(;cdUv0sR^X1C&WKCRN$bXn{ywW%bOZ8M7iKFSmj=U%Zq zwmk_Ce)?ON{%0oGsT0uYgJ;29*R;tAYDv{W350W~51JEmDvIjPZyIzaD5wG=qf?GU zmIgUXLfgcR^Cjo)QuAH6N@+~3)0Y(TXm~_E+DT%xLZ9*H#lpcBZ(-C~&B1_{`iXe8 zenuiXPil1yBGAVV?l&;PlP%s(Yi0XkbQEhlKT(#aXizQH**Ub94W%RA#2n2kPe98? zL5w*{!}>W!(!f@)EMuyoH&c7&lYUkA!bxp;WQ|Z0f}&kXB)^IzX8LoZ0W~YOs*TB^ z0!C8MJH;;eLtPXOheBSRvM*NwnsNBe)m*Gcb-12eBI2u9&?^p2x*TB9d7o6Z$6i$0 z%8gNE7^Nlt;EFB8r%U`mqwGbAd7O=*B7t$_v9jqXyMXF}u#ngX+H5d?GpF@Z5Yga# z(^^(&YrOlUMPIjKIt;);@%tO5f2Y2GcxD%HKfJFYDi4xL8I%RAIeLhtGUX-qL&QS3 zWdIp^%;z*K1r5{V7?0eoM^-4U5_s_WdBa~)i*_N;$Ec*f9z!G6%mW)xDnH9Z?8bXv|F->+YUzB5>@t_w% zBxVt1k?Xf(91Q{SS!tR+;Hj}bwu$K&_MYZxcj%L8cOJ14Zx~D|fKAz z)=2n=MDgSEd?VM*aLPYd_SBu8=j5z@)aGPv?5(FdX#id|TR%3rB&5>=C`wP0ktQF{7_{-_);{CRwGbBg87~m zFoj$sk24OSL?T^N`T#Yq|9G7G!{^p7PI%$UyOLa`A6id@`;lj;SVx(+t5vHGEP26v zY2kn`o*2akX`M1JB?$SL6}95sL|2V7yY%n$z=8l)bI0`RiPZ!d-lx6Xa4Ml`bvk!> zAhkA>U<_6%Mz?a{Yapw1%4fv1KzG zGngxw`nREU=lg+F>I41G&Bk_i(ioLL6#k!8{eL*a7Fr}d7)^=jvWoz%gP|ly6Vz?9 zY@D&_IC-ypL$s?7^r|ZIU(m7`&j#!{nU1u(YGhD>Ge6_n^J$1)(kCfV3hNeFi&aVA zSRI9?jM)-x(v(=@DX`N)OxX9E7+ljAltmdlmVt?>!jC0DlGucBjc-28!5e-91|SNc zpGn4BoQlGGxe~G|>egu)mN?WR_@@X?3MQlg!qC&kUNJgEUzxD+<0(P=6lB}KnVHyb z#q4mMtBMBe2OH{2Xc+KB-W8oBfVl_ZL}G@i<}))jKYIS=%h6!px2nh!fxAj;-Di5u zvh&I%y-t~m^g72n#U|bBYgTyt>>wec;f&oT!(J&T?bju@3vgxi|CqfxxS(wV@U@S_ zOBVADpyn=n*828qDo(A9#@U|49$p{bTipDADe+(9rDrL z6C<;0)}Fa{HW-`>pu#r)p)(FPcT-8TV8%qDR{*x!EWI~=4$MM;`95Z3>d#&>ebu7! z6FWINOX!x&((y7UdeW$Ohh6E0NamBvbuwAcZW&b<^^@V-d|zq33a@Q?Q;{~q)H6<2 z`&9|J&#L|UWDEz*Kf;}8s1|at*YvP+qsK9|>F+L{`$wwl`D?X~(Ek%uL}0e8U`Qvr zg|o#VQBTKGqB7Z^Hr~E*el9FN9UEe%r%}QD(wfy&6hx$iP8BY5`J6PR7TtIK>u$)VJ?l$%3ti^XH8P~BH5T-ad7;kk;H11QfeK`9 zTjCW~BR(8;q1HUZSla{bP6!0PySBQiNB4kD1?2v#Ze$}_rkSVHw zE?z)Udj?nd?i7;(%PG5mKr(>NDfes57)Zs;3JW9lF4lMeGu z{DDh*G&@HDa>8A1wJtLL@upmC^C%?2p!v0h)aT4zR8EDC^@B~~bRt1U|9`j)I4HYe zrOo45AL*&P_7V!rOYXmk@&3Qhxz{J8+kAA|>MXwb^|JBt`_Z zhH@?z(R7sg@`h_2AE&^ceTCEfV~m=FDLhdl#5i0FTWxf^4^M0YVEwTrQa^B!=n)4A z!pMzwWBe#HmMUloTw_V3JSyk_{R}`^k%%2V>AZs<{Xzm9+KTuK` zwZOVQ7k>7)qx{rw~XtgpK&A9|<|p>)UrfVn-J;6Lkf( zCVjPY8q})d%j7|Vu3<=8$bufVYH^0R5LE`_uIyH@?VOki;U9a!+|l!l+fqHIP6jgZ z6I$h$e*$78zxfBwo94Qu7Pm`L?4%~jc+AL(Tzy6v7VAG!=U*8E*D$E~il7JX3u>^G z)xUASu4qUX=x@Z|pSC~~W+d9spY;gMBpZ}IZ^Gh#UGXhNv>%u>|B#-*u}`vzQu4;9 zqENm#C^9?m8DONG-3_TsER@&qQ28pNdz}Eb&#t-uwFnCemx8<%n)WDGNueSI|BE4? zx1x)^Js4ZCW}=&kU14QPT+0)T z-{oq>*WreqJ2Yta<$s#Zzwmn(^}|qB;R+wNAqj__tIPDh2Dra`jzx}?=Q0xH%Ckhw zmjk|joiFic0d@)=L3qc0qcS&XbGaBf%0V29;Xg4zMGHlCS85@q*mBU=H&vR>Ogf3y z{#>zraHG#znA}A%^tdmqJmzJW2LW2P8u=q4F+xk@>A3o9EtDLHzOMGi?@*EEgPwyi z)LI`!k-%$C7^~q9w`T((zEtW&O-S*h9S+yVWx&-QOtg#7Rq0B?*NANgwttX<+7wX? zwrtF*?+TypCnolu#QCU#L!R(^-^m)Lo6v5*krc;6*q z2?A82Dw$^i(Q(YVfG|4D{I7y#TBtY-MkZ^M%FsKe$~mc2>*m_#+hSg|(m$n6Za4rT zw`^m#S8a@_G9U;-IV^g?t-0{Ihk1Bv25B*z3()6gf=|k+u zlkS&19jiWOBl^KQphxQS0dGUF=cAq4hDxK(o0e4;=Ez+0W0E&wPj~19wucEVF2QOJ zuLs(+q@bDSk@3$`bp&x=@zqE7^Jv@uF~a}P09A@3B4#%DO*!V&<~-_sN|2$@q?Azz zFGH7{osgw%>~g(&kPGP2BQT#zp=i~pt7@XdB;NLF{m~xdikW|qULOEAZHfD1Snewv z4|>sW&nWhog-$!l5xi9m8emIFZYqXOuqw;V2N5)gKj{wOs=e#38A4&` zSEd-ommXD#=uRwP`Igbk)%4&2j{eSswfeMQ67kRIeErDY%21h1T6uG;-Kr{h9d;LCeHi4`p!b?057_#qgorgeP zJODY)S$*$&v3SgUK0)yScoFHkA7<@We4k6}PTfe|kBVd@+DNkrVB&;MyI{VgDW`BM75`qH5C z+r_t8b!A9dvRm1NE!1A3u4ntxmTWd*GHIxts;hKmA96p&GUoxnYE^ofm?0@^%=eYg zxSwc`Y6}q#0BVBv8J~&KcXz7hAM+jK7IxApy{i3v%H!-ywtC9PzBebF)|z|HD2S4Z z=~1xFv1Ojpej@b^(s=#3=}(U0uOuuZL`^Xh;tfc2NUS>f1gm7UF*Q+G!S{4*PJ5Igu=;+zvhJV(8? zGG(Xz7D)fImj0cndllA0zRldcZjrJ53iAoJfeeX0F+)ir$5Oh-b|()${Ru*7Kz*Mi zosftTJ(A&G-gX|Vma=Jp?AAyLm!t0v-#myP7`%n)S=<-(4e10o+M%&e&85di&6P1cu=Z}Sb0ztJ}2WE_sb4-OHYN%?%ErW$b=(mfw*<5#oXO1vi zYd%bT1gEBi`vl|}c=)-)g_3NqW}{&(h}1mN?bl^vj_`7AC^umG$jodlX2=j2Gw=r| zYKQ{XiMzQL2bLdjpwBl}zxFdtC|Ne$=-FGgNSNsUk?#2yjsL~U{y8P}zJPvU)c^c| z|KrOTt!q2-X?$f|wuLHcxQRa2Caa~Nwd{8+pLkNai7plhqn@mR+ z=OcOol>tRB*p8lnq~Ca6utVY*+g(BoDR(GQz0&C#%Pu?NwyLuwJX5D9N0Q`x$+(ha z0_e(Nt+h?Lb#7;eyE|O}Qc?qQpg({>ITTMkT>?0uRc-p6u^%0jOdu&-i}d?!I|&#| zM+ctqvH(@C;0C-A-h9@WRzSdjTEikQlh|PsEfO}M?W9J;e8!mY>0_ACt+>R}ppF-r z5k8}L>16y@^M!zg53p8Blb~4lem*o1^{mPSG)ced+s+NoZm?Z5qnEtF38InTR2*WB z0*s5OXCB(SJx8jY<3f`KNPC*pP5XCbKPD!ZVDAplkK-RK`2G zZD@;Rd1_PjUu&LULdJIgP3rOD3u5rwH2)(-I5|!9F`jS8_>qtItE{aI$^qH?o9=AN zh-yS8lNDWMm4rd4+)JGwt>hoi)x8$mCd3a7b>-Mu#*N_G8nX=we3bNCuN5KdP!e4ciuuo80K<&FgeWTA z5>Nt85S=jmr8rc@UlonGW*e!a8=`@oWs38-!3|$FkNm4(KB&R&_7&4YFgTzOumSi) zAbWs28{c09!4PKSK1lUd`go%9fy`Q!=y>6Kr(93e#L_bkn2t*Yt}2gL1@Bib%iC+t z;K@INRr9bdmX_O~SpUv4Y&h`q`83)qF6q&+Qs`JzKr=`do(0D}ABw_k)6lErJm-Bvg$?C%omZe=?mp%<{L0VE@X5a$j zx6{uwiS09K$<}TTrwXU)N&h4atM{H9J}wnBq^u9TPbPFU)_-IFcu4oJh!>4i{3F40 z9G!(3b}_F4F#E`UJi%(D`_HzB7z?svy+N_HC2BM)M$rT1EJ_kYu8Mi6!T{s&5GscQ zIejYL>?zr;QA&DW`NQ`eHnKCy*re%|yhj_Xxl3{8vz+BsyejbPb(!=Lmx zYIrLOISC2CwPNDw+~{-HIw74=ly}SAnZ@fkkSHfWKra(-=_sg-Wc8IbB?;#&hCa`s zPuG=n;~ari9w_1&A|G_|tZ%DscMP~Jo#G`td4)`nLRs!;MX3gqqw7E7ACm_~Ua zPW}P?Qeb1sXA|o!@#kC^7T58yEm^IO#`wq17EfKgj`Qx`fS~Lx7s$7+`cGU|MElu6 z(K{a3c5yy2Mcy$Joq`{KFjsOtJw-;eq57+gXW=ZTL}{73KCA23y}Pxcb8&*0-)ML2 ze(NCi@_1|*-rbhu{F~@XEy(u`SJr;9iyXNEPR1^9S!v`8d!o}^ajfbh56gh!K@Xk* zAR-N7lljx$<4;^bc_w`eK17uz3{4e;H;g?OGrS5TQEqu<8Y2Kl?FvJT=p^MfGlPA% z*m>U?uvyc2b`)SVkOlL;oIgo>y$4|@3t<8L6asyW%`3A-@ibTCCqG)2g7-p6r=391 z18&-%P^I~y8>0t&8`)%Bhr`XbuK#jk_O*>5iLhHO5XzIm1Ec#6oh0k54~(ycYdVQ% zi0QW0h8ktn>Igg@h5`=zEjTQwCqf@j2Ks%ODBb_nFnd&aQ8`O{mrU-!PZi^KKV~2IP}I& zk5eqvcEvT!IDzTKFx8lF6g+FSwrTV-W*chAF6Lp6>Ze#w5IjZ3- zBW}5i3RKB2P6>pR(T}Zda1hXQvXCE{7s-(u*QR!6Me56&hHpUz0i`HJ6{brP^>`gd zUKnP#m~(6g#6N~ecS{O;Xso5+nHN< zg~+CJC;5sV<+Lf*|4<5_UU%l*uAakE;~-M&0`M7`v9NQ`zU$PI@P&2NwqUdXUE%wxy@sr5oM>ekFV|8?}N$?rd5SbEa>{yD~HJ{=&>2d?H zz?|g_Y;cSU^@UNHY*8mWpK?!?tURb0QlpUqeFp87RP$@dQG|D@m}hW|_Q}=M50qKN z8MVpa@GY=V&5<4wW9W}UOfxSKLd@n6;skNO7xaEZ%^d(T?0o;?HRs~h&e%hH0irnl zGF=b!I3>LE8iGG*p1MwsPv>x6(ed0<=5#)ZSJzxKK$r9uEE1|*A{8lI15|&A9kbGa zpF(f0gT$wAERj8-`4-wCufj0c*WbR+>gCs8q~{wJi_UXA)J)MK z;>X|}bj;|J=1<(lJqe3GV2C!%LiwVOA+!(zU+wV|hd-n_9^Qf|YzR<{u+3Ea%vgPm zfsij9M|7-4Ds$NvJCzN(YCo!eU~n!xU_x5(K%_L$%bN#1p2N_7u8nay!mdtytMM1UaLjuZVoiMW$5FDX%hL zYcT_E_w$d0bByCjGLhJ zd94VNz~x=8rDsiXW&^QH`1D~g^sAdl6UK_d#hvyi=3`i42$!4a1W)?c1nVya!l8#J z;L?^?Coe&K&m^sHd+Cfae-{h>2Yda_zxi4s)(Xjg>PWQ9x1}$2B_GTsmXW}l#*jlW z`EW<}=^Vv2Ru0z5uraP_gW3x*({2!qW^!QzN0(OO%Z)-V!HaTPGS7_mj3j`DGB!o6 zN>d3tMZb#fdh|9iTH+wWv78iwZU^XcH?k%tg>9NIMWPT>$iz98Tz|W>V%pDQHH$2^GXO#O5id=A8T)7* zS9ch9RvZn7LaoJZh)Pe~?d_knMS)HOkViq75juy-I2Sclvb0~!U;#MckC$E5akS9) z1|f0sT$AeQtg~}AwN}~FRrQGtHvAl6Ac+mNkt$be$rY9|m%#1BXSa$auy3}|Tui&V zz=FUX_5U^YItKy6F%JOOx+8cUgzgS)r+^>%FiaAq4yQ)1Sna}%Et1s6TL}?;r)KwQ z)uvYaW-OhcsETU>nzsaMcVB$tXhT=gRH?oXq2xUnY_yoiWa`5CLLrL%{=(h zEj%jq<=$Dk-}w<38nTIV@O{ap2a)2>Zk~paam12f1Bsj+*h#QJe&I{igtpdLnbHb| zl*oHA^CD;-53utt>|!5wc;17QJ}4&qllT}!I?it{r5zydzt`EQRPz=;~2S#})$^OY3cq`Cg@8g}ou&m6w3+4AtAR z70IWlzc_Vjv^DoUeIDhdWf^Ae{SV^SW7gD&b4@7sRe_Y6kK8e(UhFdL4C=sdn-Yc1bfpSxHRHXt@^D)pO;q+D(Ok{%`y`Yow4ngC;gdRAKx^6Zs4?z* zwqUHf?iqpI^!lZFs{?h;qVA+Cz|nbc1cMWB6wm#1QgeGiD7#S4t+DhoK+v9ai|DY8 zTXkvtwTIMdp>$FCsiFqFxdQ2s!iN;My4E;s^{rTT3C?BR><0d!O55XTko0u0KeKvl zjvXt!`O=iY>}Gg~;)~_}eC>!scR8MY4pr=N~dX4q4=7}KgTiz%$r#oK>evZ4D&)ZFfB@e0f z8>;GpHE#Q=P0K6Ea$C!A)2iRg?7H_Fj@uTNitWha3vTmz`I1KhPOZhFb;AlZ)bbRz z_j8k_P37Bj`wO$>*zo1!L}aG>ERN^FIa63h;`egPx+qEf48Z@I9(}e$f;yA6SGec9 z=Qk)oZ5PKX{V=~tyZI^MM4?flY|5ne2r{bJ6)4s_a3L(PsnVzpBfu#~weu*DhX@j8;-TYnawK;k zet1>lq(Ej=aofQrs`0JbXsN}Z;5(CA*+2~Gp6}H&06ka{@uusWn@rNjT3)usUt3lk zpCIEmn^*Vt8`PUy@k}Y#=@f2(D#;z^>0drQpL*cbw0m8^+#Vfv6Ikx92rrcDs8y|U zx-5#GJ^52RJF6A8W$h-Ye^G~_K1Qn~)^=HUt5A{s5>hg<`d(i5OEAjw<&)+LJ8dRv zsT|*H1`nXGy#37mi8S+`zWL!%)4G37TV;A`GB?z<_wJT>Jx&_;WrDX#6xU~_?Y@q7 z`OuNn%G_RNo&J%*eS@cJ{d92-T=OIs_W^0Ss#X)iZh9=kZ4~GAXxe!^opm|tZ6|7R zZMC_s=c;;?xn8Zp@^&Gy(3j~)Bly+aTl&pbPZ9+HfJ$l(-Epk9TPEYzw z0`~%@k*yTCn{I|8sN)Hr?E)r88sc1Rije^O;BX`KOm06g4k-Ac!cbf~Q-(?C_*#($ z+eG7v>387_8rZRIF_twYaE0D&s{dT3>B`7$oDi?DV`>D(QS(Ii`Mpj%YVDO?)5-=3 zWB9uaHucrY%p91PF(_;8IyC}P3ia8Vfd{XBhx5sjh0k@$dIMvjOc+QXWC&h4YaQv? zm*u9)Q4#G2R&HSLmyc~$)t-}DrZVus6(0nBXoguZig7WX&9QjBljHIR`S&}ci46(E|3}zYhPBzOTVutFQ%dpT zP^>_4FBDp|cyTZ81P|_79Ew|UCpZLm*Wm61_aGndyZ64XbI!NVKEHB3Nq)^Uv(`Ox zueD~Y5}qZyk3cf+P~3K%U*>A--7;NLn%Ns~7lejo8?zMI5OuE8oyZ^g-sqosJe@df z36N|H!y`x;ZimTR%aPlQ2?yZ=2>rVQj0|hP$=V*NGE~Aq`CT2* z0Q)07*(79*jJrWk+?lb{RWx)dU_90F=3_@z8zs7oM;DYUrB`=XCMTpm zQ**7o7)2`blcMFu26mVENW0h!{lEghJW-=Um9rfd)#BMLpU%7AhOXs&ykIVHeVkZE z?6FkmVf*Bxb9+{EUGW^fTDPq3QmasD_VdbURrg^N_54RgHn*%9*W05_iswS8I`WCA z7JF&wB}nRHp0$jZM^;Y}Y!FVjZq{=-DudT#)#HgTrsF5f1q#Y<480y0c|2XI3Lq}6jo@EFNkn!|f9n;&SZ8DiL32V>yLSdaM%A5aB+?Rxj zAd&y|US&;5ibFP32Dt#`?4T@6PZ|q%C4?xv`zoZkxD`d}e$)XYkWEEsd7U;re;V{d zTIW!@YGN-}Q71V1c$Ym&URA+&$Vp&h(z=unMMG7k>L?T~p}2Sk8^64IQez<}TH#}_ zbL*GFKi%&MXeX*Wb1}b1fZn7VAu$dBhykP@HUuekzZ6Ct;=)}I>&G*kpnXmprmqgu z@Yc#UH*I{B1%52-RT_<;d^8ae7ktqG2~LBZZJo71wS#S`fT*euSP2cEa>w(W75`OwOLnu4M2FZ%N}WO^Y0 z+6l@WgXC0+rIpOkhsY0xh(a0LOSuOj{-04lkGrSI*pdpFtC$8h0AhbE(MB+Myk_F% z-$z72V;h*zJB?41LBRSnsb{3k(+NEl`@k0&iZ$Snr}YkhGVo#BRWYUL{CWVuV2|)_ zGLcZiVy`eStb>&4^UOC*lO@Ao{I2RetnUZBD%2X^Y)YB!yLb=2=!pB8+#3kBD^&zg z4V;NFY->Ckj1Eb_(T#Tf&~w(zb9nJiip>PE)Rts=7yB@!4-S5&K;kf(=;ov4h$j(y zP!3jv_!ATGu*+ZkQ$x1KA@1YxFz-lsbnlOnuqV?5w{#8B1fby3&GQg1aQorJ8$pukdU zba=jTg^1+S%@BB)akJi%ew3`nXgPQGU~SR8?Q>9}k_j5mQAD*l_OesIdLeIi>0G+^>N4BR{f}D5_ou=j&hXI zEUf>0O7Yy0m{?n3clGMeEsJ21yCvXtSr}!~{hrZk_4Ae9b7I-_td&g_OP}eihr!6s zqGq{f((S{_cN$P)R$FED&w{bE^C$g2L~SnU7te>=lDb+G<7ET&Rrq+f(ii>dN7oIu zDRteS-tWw9{v%tSW_;EM2E^Vn7&9Bl28usoety?h+2LH>aw$$%NhpG}x}R6Z`*}ge zcg~4bnOzxAl9q3sQiwdb0#j`hJvk>4XvsTi1GJn-G~LAt>%UpG1f zv&T~9B(1dGC_2D(K$qSJs3B#7)x$Bs-tR61hjTR=!t{}p*pLbf0S+ftZEc>@k3gH; zY`~0Oe`ZI_#CIqLfd~U#wp|SV9Y+vT?Aw(0e-Ldb)B#5<5m;aK=v^PX0$d0uO1=^B zx%2TBUkF!gpnb1a$ZT0C-tR|($EG575p?E#$N$e}bGu0poY!I|$|Po6#dfq-dSYA( zGfa^92KutMJ_5y6%tyU!vSe+DNN-qyKl#*{T zgVlcGY|>olb8+(uuH!F!P_Z{W6sB(Ti8xA)7X10Vk4`9~p|Xn4bBv$1PC32wb}yLh!QxIJwdtOEL|**fHf8_Jc$W^1S%Coek-3Go6+ODh zW@V1cE$!1ZKFgmGnCoic?r%TOw7c!$ROT2Rd12d#oBQ_@6EGXA%o!>zbP8#%3;(U_ zuMP?+@}MAY_yCE(Qq}K}5yiFou&W?@;#WI@{YpNQMM!?9nEL+hW%n|*Z?Fl~IgK%_ z=#|m#)WY*~#bc?n8me^j<%OoVI?3akSKXI)po)k$6n!a=2$1N%+aNI&I2?teV+&zg&1CRD!~-u#q8HPSmYURuL~nGb zst3=5o5;UWJk^T)m{J%Oqwm!YHoaAz!LU@Ly2vb`%29w+R4eo@_GwDTFcgJ zByoF4!;e@573vti$9s(JjwSr8n&Ud3E?iw zcZvUMr2cOLjCO%YxChF`c?+;mj{-rB3UfR`6v6T(0dcxjf?^wSuHSF;BFV`jDfwK# zh5}p1!zA1*4Bc3ULTSLM@*A9rnF-p)Em=T(NRcF=t$KRB3ba3qge!K(TIoT$6P;v8 zccYq+aHH-`J@)(ov1J|SKEg&Q1eW;`HeP}c$Hpo7_z?+K>N)}zS%6q9~Bfq5tlPk6E-2I zmCzHQ@kaHI`CUEZPw%|V?=&AZl=hv z60*I}a)HV?aV{SSg~*dAg%DEVd*J;&1$^Hv&}9o)(+ z=@l|QD$jmgsoK@A2omow@>0jkMI(Vi~=!E!ohh-R@WN(Ii>Hy_sE&%-YM+;JRFhwpgeBBLCZuT zt02uKp}ht3Aoo3YgH?=rc-8TB{HJZVTr}Led=IBku3Cpy6k-|1z}q@dP^=5&TK-J2 zK@8gk?=a$hAw{~WaqJ3%eC&HpdnKxz)892co29BfvOW>696;3cd%SVd{V{AKLNZ7Z zKbuz+i}u-DrP>^7H6bj4Uk!y{TTatX3-f<@9wMElA&f!YpeJ+cYozdu=`5)Hdd1uk zm$V5cq{Sccw@vtdW@^unX-L;HHAIk`Jk~ABiLglqVr{`qbBzxbtbP}5E|O(!#}e8b zcda!F2OBC~wm%dJCpNrU4_|H>Czj-tz05CnFU#b@` zI&q&Cz6)i#(vM9PnH_mr;|e|+1j0b1mygc(4@3f<=OL|^gRiN=!IonpH#!2&m&s5_ ztCh7i$vB0X#!sUz?M7+7X!b>leg(1X&*#V!C2WZ2oXj8mu+QAdy5>>q8E?Z!=H$qw!}KD=Lor#FVK~)ip@}VPa~a_wsqCBj+Pvj*@F<_ z>T8{GKX{zOJ?TPRfa1o{9;Pi+EHT*1R z!pzzPL|PlC`S5ID3wdwuwA<{<{+2R#E>f<4f<`x&x$L|3pE`?5!0G5TN zj&^4H0MOjJnF_=VbI(7BT^@-^fDvKX_^DX;Il1zy%c~s{ZWZJ+yR2<)A{it8szVE> zS1@e?I>l;FvX7C6f$mwS*spl^3*N$S4;dFzOMDa&X6J_&92VMF$Fk)TW3Blo+-a+! zzEQxff2v}!O|JppF6~;G+cX1Dqp&SC_S}?}N0Q@GjmSXPPVI~=>i6Q z(O~0XJ@?VJa~Hi@b%hqg^gENo!87G8GLHPTmbz(Y3>4vnLyuT#Q z-EVL)q%(4^+Wxfo`#kBTt^04;{2yOZ;2|J=2vt7#B0IzB8EWe=>dVXEtJ&k`ze__W zJ)KxsK-EglQHH8AJ&eTnsJ%qjvzd)#%U2OKoiil^h$u;M$B6U%<^#AZmZ5at*Hi7$ zn9!I?7Uc5!I1fX5i*{^K})KDwFAEIlJh8nbhFOu}}H3Mpi7D^=JL-FM`O?%?O>hY7)d zzH%!iq*MH+sYB$7KHn{*g{wd5LN1d}C#z5O*9R{qQxqxpJ z_gWy04ur#2{kW;uhR-#ctm&Q`)~WX#DD=?ZHLGnkpY=yp-()q&wtdK+`|8c{kL{Dr z=28^;2lWu!4NpmTcY{4Y31#N<*XhF_#;qLapvOM9l5Mz(S$e_f}sJIxuBINX0CEw?nj+@i%Au;nSX`LiLW_fbFTcug* z8~3Z)|66>jkN-YvoPLW9_H04f8NosPZF*8 zW7BPg6OL^@wk;{OBnAqxafOs(NqwgV9?5n85k`@$LNrlu-ACkB&Ynh93>RnOeBo+i zpifa=xzSgrNo}XT2~MAH)AW zu>*D^Pi>S0b3Q0IEiGoGiTlg|3Ar!p2Vi1$A;IbNfWAi%pvOb`A&3g+<4B5HZRXf^A#hwR06o7xu z9XC%93qj#aqq;ybtq$k30`3R29@{hONBvAv(9XMy*^{z`Aq7&9-tEi6)9$)>)ERF+?q0FK8xH2tqlQ--qAb=?gj7EmqJgDfRn2|d zBOsp;|HBZyahaocAP1GOlyNyh(Qs2lOBX{P`{e$E``%;vt)ZqM11;}Fkqup+YKlU? z+2tVQ2LgZ7hxU?!%$U(P8>ach_YR94Aox*-%Sm4ul=YgJY+49hX( z4hwCz^T?KjMMSc7Mz4<>Cd*szvzDDUt(_mUQ){1({n+qZ)rUB} zkBl-a3tqfjUSCU$r+7Omxg_+}XM=Gp|f_osdPS=^8TBT3Q~EgKR(2Uqm|u z!-ap;RRK$#^v&<4{qGW(mj(h60umn&5|dDvG?|z(@nfN5fzXvCm%YO8OXaD$TCTFZ zkV5(;yjL>-f6?Tdr1+spHuPyj%DCJ=u~)Cr`rcp866F@gTQFW&R-~rcs}2x|X$8U=gpyBLM~9VBjw9OE}xH$uM4J0JR?(TL+h_mX|{7t*SKrE&a4VlP1i zTVI^IGVUW!2Y`)Kcf>5uONZD_yA_MYb$sKjh_e%jGLA!wr8PP>^(*ypmK6&zC#@FV z&k%9v(&C!n5d2|2zuyRp$g9gCklmKCbE}6SO>#dBf`8eWLsCR)SUR>kKkK5%zyeaNS^tZ zy({t+R8|YJNY$lRG}16bT@L~!T)#G>W_esv=B~uAhU;c-?OsC)NwFKi_=$l|2XB>3 z0$^viSk_Joa5-jhESV?0J)f!--HR1t&bOf^>YU~QUGDt2j;K}P8dB<#oYSmQV6Q$C zLs`2_3XpCw!d(Y~C0$GkmlhO!gFDAqk3eFiTZZchwPH^y}CqY%EbCbGHJ_T_{Qes%NIGwa1a% z)dQ}&9g+0n#AJHY8-w>@#S z4$}%pb_JWB9f$?bfvc2Kx@(2BL|C}ai^D74QC#e&U&|X}63rY3d$ExO`=cv?NseUy zby2CnG>|W45SLa!56SG|)td%2J1ygnf%(5F6-wOpNFTFF{KLN4pk8751Woa|yY(2q z2#n`$s?u@X0}x@qB4+(benHG+S78~lo_$RaMEX9QNMo`A%?kG8 zX+IIC!Rc>p@5_>C@WeTV2^;UUzkU1mDD!cn;-$B#TYwV(79{6;4BK>rO%j6jwXTOX z#*)mjz}@1q)H-a;tQO@|B474mg^s+ich|kBP**>j>_2E8@2(3L5yvx z3;*aoy^C(r^6RpM&>AmGi|QMJm#)n4UF&*F%L+T9L)QOZMf{}(1>mCMC3uoCNENsV z{o0OERd{!mTu$FAk@q^|7tTjE!`kUi-%g@1c_&syLJM^c>~u;$J}R({Dt{IEuQLI!???~iAN+pd-8?pwJY~7BXp^^2d4QTt??UUy zW%yXlXfq6PIw zs;>8}owu5ZuQz1a7E7e$Axoe8kk6xCgM(Uj_G=1C=Mxnsy1rU6G1XbSg+K1mQ&iSe zkk#k*VIPW7-*xh}q4o>&*XMrB!NhcC*V+RXc^%)0a;kJ9=NnPKUHG>M}eo9G*ZrUbQ1oQdHwS!(L;<-4z*BB5$@G7%7$hLrurb5y0EP_{0Y;_mwtWKjR%n>>|)*(~bZK5>bV z&p=S102!YFF%mN{sEfQfk_8SPK~$6FRWK-xcD@#;inK(L$>_bxm!0a%>Qc%PO|A?s zi66wR5hx5|EeK!X#@v_iLb0W&<6#U){6ClqMjxGOEsv3y64Q#xa87Uy6<)5qTBysyJ1`E1I$Hg zIjG+7qcDm^m-Mo?n9paaBqhxK(t9^w-*#2FYwXJj6I0`?doK!MIZO+620Jd9F1 zA8oxpN7T8i{nC68Rs#KVXj`eXcr)KnpvtnvCZEP{9Sww`Y3-LmCSxe(~*0L^97(kJg2;YO(m1U_o{?<8wA6ZHhFxA1Qj&bpW!2z|In}Xz9 zxgcUgwvSWIymO%OYHT3Vcc2OEbG(BN^69s|GFH6$p4hS9u6jc{{EfwD`lIj=&P<6l zypMz&qQlAMQYZZ3XfHR+CI`%wF#aqO<#C8NEAW!QAvc837oedE<-HFAwb%5UR9(x> z;8IIrc|Z^w{#G6B}XR-On)nf)D*U_70vXWL>J=Y!3)b$X~hH|ZA0CUl0^UgI%-}ZNgE>#Et7iY;zAv5YiKcj`NYps_B zOa-p3YruC4>PO=smxb1PZxzS5dR%)?P-1~_yD%7(air*6CN1SbSZ~sWA1z`a6`fIw zy$r);A!dPn>Im}ut(H0)p#c)tRf$6HBm^>h2&r9j2xH96+h9DvGpjcpvz!`|x452K zy18{^cpty=INztYUTkeHqm~Vttbu4$rV2 z0EjKtgpgge!MBe_8(#Z$oVLKZz4EIoE~(7d6m$p=D{F@}55I6i6t;u&1ZQ5d75=9k z{J%I_pUsfgkiN;Agf9>u^56>xiK`spjK(F`(2w(`$l!etG@(i9MeiZ^y0oGGD*5PN zUusU7cB1|XCk0oeo!9A zZ`c_d{H!9h2&4KqfOMVVUJ{1ie%j6zll7~8*rPC?L8Fr|Vw}8rFvz0*&6;!9_fmb% zl!oLSUrHUIN+z8CZj3RTAU`hBuk=VetH1l+xH}WHW?{u9%DvxvWcO| zj9)J?P^IJ+x#CBB5hLmHT6rIR`f2v*#9i~EE@Svn5K6{}P~?#b+|#X`AM!B*E&df| zV#kiqWa7Ra(k1A&5z%^kpxmT68SX*Pvh*Eru^SI7BJT|4CX-HC`WY^W*>68GkschC z^r4n1mAl0iprYe3V8iDW2)KOz-NVMr`!d*@L4>^$d-;M|v)C;OzvXqh$?`>gvyvyy zlWieN;JqgMMq}4%4V(9N1vEPtYy)yj44svJcRp#%UUS0YXwF#jqB8Mb6mH#CIHDK1 z8?!nYwX`l@zE0T`+1(XzzT%p*Xx#T@fht{BdM;Sljyzo|JpG`t>9T2BSJV2vN;d?m zb+8m`v-xJKZ(QeYFp~j1dj-1?fu$|mEvo(&?|S?Dg34r(3b0+`E5W_yQq?$rVAi-F z#bvCloYEtww%0CVF$yA{?-d?N;c5GHieRLI#>pt;vd#sY5_!Z2%3?O(jKXSBPSw8c zy^d_7pQ#0QuIQ*QM3FT^@46Hg2c9gQ4~7*p+GG9B`4W7`huro|BlZEb)Ex6SI_-=e zH3z0WxpnRZzTecrua67v&grT>YJUco&zla(44v;<{9?#dPISTYJud<~Qty2IPg6Iv z{g4_?Q9$LP_Rl+W}ZXlV%v{>*pswlY@(`anukgAK~`yHm(veSWD4 zN)Rgo8D0)u&hIApt=faC{Cxgf^J`YD_pic)UE8g1>7^=vT;De%iKXQ{{i__*#fD#Y z1mx;!Y1N>R-zMw0KsyF3a8`_#h2q0ya2#i#+>#;9l_!h}ub%W@Y-Mt*<}_q#H_$;I z`{(1UAkC&bMggw}lRLU^R<^EncBU0Ep=75L{5TWMvn!g?>DO1Fn;=aA_ zXbmu@p+#eNTll;6Veoa`33`YQ(BPMXwpD$t%c;zDGx!F)2)qFfA2)0x)>$qJU!~lz zk(MmT+;$#>0dE9WLAIXTsm?ars;P@=HMYV}a*G@lCRrf*Gsnrs$}IM@TCSI_l%jJ5 zgX0aO0Ef%q!saWjn2d`O%h@zNoIcIAEtOt{_Edy$Z;H@bn_3d*I*-ApF7F2+kL&pp zNV?0CwMQ+Dvo$2vJG~~(RAFJ>aTnS|g1x}DsQS~=G*`ag~~o^Zc= zHslZyxX@gFWtKVn+@L@O3M0b{z3f&2-RXi4#C`h%O-T=We)s-rr>Xk&s5KQMF@buW~I7ja=Lx)@W6)FGpC*@gsno+%q`&+XWt(*nM64QQY{`5vL=^ zb0DYlhqSEEw=6yU>2|VLo%71c+kaw6LImkpQW<#b5;62+J+gnLkQNQw)EcK_l(*Y$ zsHgOzQc6*NB;^>KR_gtz(IyTQeWEntgb^V!XBpzxTvsXjyyAar!Z7?-e!$E6{^$>P zBQ4ZTjdvQ7h}8z;IR?Q*?sK{K!Wg)$>Dz^zbkOJtRhNtym5Gj_h%5uXB4$+!0bcL5 z!?#ME0Kw%8hIzkcTD7q`TIr~6E~{2S)C*J28QZC_lGz`HivtNp*9Dn(Mkcjhvpey? z<`(PVMB(H9=TbJqFxXu-?!2}L|ycm*k z-nxB#EdaiVf6(izv(iz~lIyk~Q&Us7cH7O#7*$GSRiI>FtwXgC^0`bI^PUxcl*+90 z=g~D?bg}AtgiItw&&L!*YguY7*B#Frj+BXeY*kgv>pjdT$vTxwk}nXTytNVwsDtUv zI7zr?@OlkC6+GX0SJ}H*z0T!ZtgbYcQD;dWIScd+ZuqG&ez?cV+oJLC{LI=0z$xU!<FIXgexVe%nlqV+=H)`l?_&c5Pyh_)?qt8}fXoDWhwv^W zy!-8pW$|>^b*X>KaL9i1F)StaER+hN2UP2U^WEj0Ehj5E%@jamc=^HE6Gn2f1 zhSq>mvB4Yi*?lCzNcclcGj;&kOrL+d`-PAz@K z*;rNDr%jGF-G2cy>t~;WbXTWd9UUnbRXjNlDzD~q_)R{LUGR>V)+ld?rzyT z5q3Ot{@4n03vZ3I3ZD2Fdt%gbrd!_>eu5Bn8vn3qP4u#Bv{6F|j-%TMPwtT@N~rNgw{GW0^m0 z7C7z;%5|J2snGCfG@n~;)q!dr|G3!0RtL%-gDa)(As0_;Wgh8NHqk#`bse=_zdzo$ z3~kBDTWN{dE|D^9<|50Us@#TNsI4+)GJIA=ZHm@gSgpRG7DD}_&^D1-uO^4|@o9$L z?SlOe-T@`Oz@+eqwe|cs4w~Sk3u2p;kJ6e}UgOHzuavCbX?|LZNy3UJKj*Krh?egC zLlj4oQUOR6f2qm;OEvrdJ)N#dy*Hc)BmVGH0LbWB$V+2CpY0bI_mzV~`^*;4G0KZ3 zE%uVQg-%hc6;CXclb1a;0)(4baACRrZm;mEcz%$kJ7qo?jB^&Q%X>g37<@kAH{L)~I_oB-{=snckfo zc6sxKrl!6U;Vc=Eg>})Oq{z(d&YbQwq;_hU#ymbbt|wW(Jslh8Jo(!9GAG22y~FLK z&o~)T1MGyXffeiGN3`5jp6%~W(Iw*5{ddCHPbnXfC5pUT;2O&QuWAz9Q&@xD7Vhu5 zM4IDJr`F0p5gK5GtpkkYBPD5BTc43%z5b-uSTJ;0SYBdjkyUmzDFn`cbYKLsLyUJeYCewW^_=xL zdK7t$-FEtD1Bie#nFU?adhEZ~yH0mlLj@hX)FVs#zVmaFSf}a*#P7f};kLB07ORfu z2Ul!?@BO*%IAa!Ki-r<|`WMWSFdV0+WGr<|Xl1;|9<{oVaY`YZw<^~qgtHCzp>orT z)PffG{8>T)F?)Wm^vI2$A@lfPj zf5?1C{6u+sMhxW^{*I#fpA+&l`m_FhroiZ+>Od`-xVx@ONEy`-`)D>jf!(xLceGAB z40kbbu9Q~^H}aAZ5Q2leoerVdGWykw^nu_mP(bx4?(9viYJ8I8t-{NxrY7bt7lQxwaf2k}j4q^6)b_@a{^r|Hs#wE44 zRVV>m-{|_>WRh<;&D)_6`XzBQM~OPharF2}=5D_$ zRHU`w`+IAZN(BE{c8>D=ClG9|>jf(vU9D9{Z^1%1er=9V)L?s}3oBuJ20eDwx8-9j zp__*Eq1$lSH6HRm$P-F!MNk8_km)J}_8Q$CV={l{I3LGs~#r2i) z6$D3}>h%1QMuoPSp$rL+BTl~A{nm^v>H(0}`54aHOHkJ=k){Iu4UhCk8uE^x(z$ii zL`;sRdYk01=kcUn;}wHE>}}1S<%2zRUaBK$ zp4_mGKsKEp7W2GjqQpjNmgo67`(s=%7#_p*wD}Ad$e1>z zqjH7y_yms3Qcs)%Wl!uqb({yFVn7X7Zl$TAZCHkpX8Umac~Qc#3ZiLa=Z8tJIG?*u3Tp zW_4!mqXf85*2n*hU$_mwbzkdmIN4+yG*vn7A&FMiQ};hoAs3Pp%BuZXzn7A~bYdFr zqWFccDSEQ!^2V_B!D`jPD+WpLgEqCMsg}ve5$)3-Vj>Fw$If&zM*sy7jCR7dx&_Ql z;d|RGPSM0LiR$B}CV4)@1MJFp&TQqeuBK@my?i*9VFjtXAR?hUv;#iH2L0)w;T({q zxHP)lywsrE?@IngXWl>YRUC_vbqx+l3~qTwHQ{iXM`-MfM57*GLp4%&T($kI)PuUS z>#+ewl44)8G2kfwM);70y!F02@&kqg?HOEKns$7&-UF%k=Fg?aJ3Yfq;)j;#!y3YY zvGutmaZ2lach%L+3B|3*oyu8nNvFeVPXKzB#{q0+ASF@BS7nVvG3&0jDD%(N#rbu? zFb_u+=_i7(uU>w6|KC2=lGNLu$GM&-!dKL$cR^(#dHw9WoAbHNM=;l+-LmzF&Z=LK z3!X80^EJ-O5Qk8ZYoa;*B5x4PmSJLN%`;Nsp_sdOy;8Ge%!Ew5!SnV=4qJZ+>v(=x zi;2D7HE|RdNPM!YPTd{B2fBeHC#iE(`ey-4o{lq(n{exk!cWFY|Dq@qy>t9By!`@P({k$Or zTUsA}p|@b8w=`7&SLWT5`p>rszDwzP{=z^;q>}vAJoka^>n1UAU)}s%O=F1!;o=Xk zl-COpMk4of*q=pAZ#_fN6_hzmgf<6ZvsX4~9e z9XwxeDCS~gGx9TVjn8ai(ns!?r7H#j_e+(+M{_v3(0^JhX9~>LXo4S~WyVPB%&(aW z2`Ow=7mY@d>H{(@SFb3McW2*(xR(tkiKdskcj#e@6=zLF*dUl`Jw zLi!$nxV3G9ra$-zy5;YsnTUnha7)~TPjZ;7X$}uGa)@ZwEI)gPaQQh8ItK*|qP|~x zg<3JNN&?3#`Kv)d4_WkwSe3t9ks&6WzIY^ePfsBIN9-Ij)wSj*?VgGj-%jxbH05Ns zVXooV-ut#X7vwC(Qd|Iy|BePLe?%Wa=hkKCo-eB-51~l(-+!E5G2zJPoOX8Ax)bzv zz9dLU@fE!JUXJSfhWPjfGu3J$DC^@W5=w%C=JPzgK?b;}5%7Mo#s0SgX&OEg@E z&nyt+Jeyd?5P`Ulu~~7zYg|6s_}Tp0T>GvN2wBXW3y~@1^I4zuves!ZB~8|7t|*9J z0o{J-JMHN6?Wy{HaT{CV(l=sg*rE3q}n)+hN1SCtR z6M>RS-w7iyO_>hL%9i)ghLc6tL$c+X?+mqO+l_>NTN8igExfQJ3#j8x1B{SaF_<0Q z=0Lc$BbK9IqR0Q&iSge7^dC3gg;LdQ4JQg9srADj9*UczPQE}AUvC+N@V?` zDtojF5E&G{Lj8Sol4>?6|DAg#BE-0#HGX}c$$oaa4O7b$7Yg0&7Hpm(sc$Rhg;O16 zt`CYV=k9z9+S$XeM&Q3<(F*pft)LEi z_+Q6!r=7mU27VqHsGqD3Q$E;W;w)8mN`E2wY3>s49MC(HJx%>%L-2}DwcK)W50`yx>8}nn%D~46&f3R#@3&Kb`sBy~6 zE!>>)KMvrn13IcV;OjC#G*hr0{q(~XqU*s`2@k7pi`w@M?I4JY=WDn1K8(ugqgTkE;0bV`!@Xm*m$m0i$OURe}k>ol2 z>Roakiq@7t%nWR$nlL}AMO^*F^&`q@>I$qN{MCC=*3{8~?e2F6eoM@QP%MYT+1I$IGb~A+F}3g9fLE7aJQiQ2Na=jH-a1=W zlFBukOWaUqgX6AsV#W~Y)YD0a8aakrFF>UqyUIT`YcK&n)6}zyxE~4hdbQ;v6ty=O zi?-skH#bo7h}6%zgU?Kxi!9abU=2lM*8hO#_FcvH)un?InI+SU#CtcIA@2V)bb2)i z?)&Jjb9o^whXfJT*p^4q=pUF+^%>%?UKAk>3=W^ACz z5qf8H4&3Nam*Eb$(KCnHHLR=%A4Vk-Ho03%b% zYLwwxYyh;1UknxfTaxq?d-eNyZ=#h$5~7!CH*yNTGgQ1s{6U2S!KjsFK87>j_T!H{ zE;6)}U^hkl$;94pB_h>pety9{T1Mc-Z!2%8-%QXwNHIV69(x=?W{?FEUA*x72Hh2; zdS_})@t%J)tn3Du>~bUpyignK)4qlR)&Lmdk`!?IhK5G%C>{iHydUvr3d3_Qu+&%H zX4HQsh-LwVa~&LX>qrC^PhQw%Bg38acfru#O|?{&oH2-QU{ar~pGXhMu%asvc(h^> zN=#hBUFTFrI%6?)FOMzXo#$IRZeiKbkzZ3TFQb<;J%E(h87JgXkIGA2ZtQ zZvQGK)>2j51!R>ULN6hiu*e$}FO}vcTUqOsmCK?lW|65UZI2b8Vz% z+Y{}3@e&FXiOxQ&tFi7Qa(HMO4rxIWn9j$lEMAwXhG&HISx$)ey1TwyZ)9ZPXLN&o z-zyA6Fk1Y%DsfuE7;P))b9i~f-8sC%fsEMX*Jn+wU&iO9hxvydDtB(cdeQHOlLoxVr$(_WsJQ!{&bi7K=kGOAEaH+xOO7@6lh$r8oCNr3)j&Y zoqG_TjrOpIX7bF{?AWp6JB6oG z{Aq5klU;?ok)7t#Guj)W-$C4;nZixrYdN}{+c)pQ5}Cdl6j9l-tgf^Gj#qp?w=OYH z4CIa@C*_Zcfa&288f_YuHi@@k3JzX+Bw9xY0hV{NBzzTdQ4xCtIf`UAP{IDOMbCbm@kq3bmEQE8>-dw?z`Yw_0^K zgx$aAc;2s!yy-*2$O&kEp1z_4)PD5DC-~{y!W0zJ?HcA|1^X>72R|{I)amY-nlOB$ zA^uR+lpqoqcqHfl`%YGl6y}SNd`c$W6XnH_Bt8VCMyKOO&1&;esfKi9Ncx`_j?%(E zIXxPdk(&+A5JU{rO7g*Tc$QIED+YJ%(^DlI6sq7tAp5ND+FkgbL&_f#-2trx9P5T_ z92~xF z+x>m=xF3lWvbc2_Ox744+zxl9p_g=4SZrfiE*QD63`IQhB8$mF?Pd#S`Y@OIG39s` zH57u!@q7G1wZXg76|{u$d|p6$Q~clg+&LfawJ?q+5Hp|)<-5ec#u~CF6)zT^*A!;F z7-~l{!@n7NNSN$`#n2K9Oy@15YaHAt?&o22?o;o^-(Hf^xoOU(5;x8AwqZ4pO<{}o zVZbD&bfRPq`NVZ1^W=LP=}yAnvU2fI$@rN+6g)r=$D=y(sya0EO2@7?yffa{I5#)E zOkoxDeONgF&U;FA=?-ko*8jsOZblN8Wq|}`7;`@rEQaicjQh&*Ik4rWP_lMrRkT~2 zG8z8Si~qs|`R7A4lP(ypr&K^BOg~twem#o@gy2ONv?;-B?G#4e$u;pHW4I-BS{REM zsFU|oi%6@*O5NcdY$SiV^y zz}?6RQD9E7c_7F}erERuQzZs5<#d^jhKQY4_O-Q<#Zl3rTl%Fs8u1=&t7p4E2=zbP zJRS&cUhHA^-A4M+Gp)u2<%CHCEOp7n$!wYPO^gK3e4>vp={C^mD@;HmphTSPnA0qUyANa014or+J545sadB><4?V zad;+yYIZgFZ~Q(tki-3{5B92_**t#2f~5<0i8OMpwn53MS@nJkiXhdDSDc=-pg?t) zHz$%!vf!86r>{jIEyb9SFiBaA;M_BRB{S*7#1<3xORBH(;?TVzA;tP0>v7hc`uYa}B*DdCD zDp>I=w()#iKHcV5QHT$zn9zjWx{UOj_~HYi30jfkDsjODeg3!08em z1ydZ)oTQlhNa0t*bF_eojv-IvvdJ~skKT4yO@c$w#S2W;tVe?+}`=@mBK;uPXTURMN)??;*f|5 zT&uMfI#o?8sp()lGklj(?$eE^-{a*@0wf7#bglHFe<_h}qQLe*{gbyx;}Nl-;)_xE zwGl8Bll(xg*^o6`iEj>c!Lv-5cQIEenVUvqG4hiwbQ|xbl1u6Ma>ze8H~^vvGK{l0 zJ>hC`Hx^o1K5jpbU3R*L+SLaeg`X|3^^+@KmOWs~O`-XG?6N^E{2yu%JIx7=09yQ- zJ$x6dOmIAv`oU8``m6e$@$3`Xm}&z5TP*4ZldGCcOhmM&bf;i3tIR&3_~p}E=+FnE*t0!Sl4>4+Yirz zJX9M_VMc+CClJXZQ=)|(tLSw@_1s*@bzX_8nGIX8j7^e}uY009=&nL{b3ddvnU6kQ zw-DYdX`xo^tC^muhXo=>*2i<6rUAFnIDAh%=?5Hj_5)@b@K8+ZrKaIS6159ae^7z{*$_&JjTD6 zeJ8?I^5}coVQHx6PWK*?{5nV$sEj^tvOAquzGyP56lp$2IEnYfP}1(Dl~_=VyZj4E z`FG7~Gr$i_9aBgldeL8#c-@nz)Ce5w7Dm_y-y@=|IUpGmFlTt4v{>E~Y z4ZLge(ULtJec?VtFZ?|jcf*LSF^8^U$q(6E01a=aJC*3Z9arq6Vx;K8(!}V;uHaG8 z0W2ICD+%unUQB@J?9DHp7eYIUn;Q7L=bOxiupB@t{tvbTKkel3Yy&6W_{5#cf_M+h z@VDrejZ*EA2VeDW#|KjCF{w6I8p#Ny%!vdmk69vs+v$Py<(KApK5vh+#J;HhLpW6c zq{Tpp=3^2<=pLQ&+1yQt;@bVRTSKQmc`>m+@1hfAc(u8cw(NSE7~QTuKiHdB+k z!s-S8R{rddjfR$fh694{k1eK&?MG*mX%B#o2(R^n6fPVJ#hE^VPEK#al_!09X|sJ% zb0w)4Rypm%BU~WRS^Sw&Ur*7$tz1}b-f9r{eRk4eGj_*nRTY&m;N!@!EKk<>{pv@} zmL0e_uA~*r8+TOhc(dbrD{46)Tr7&;f*V7Ul^$-OJsDqq6l)aU6FahNmzHADfEzd8 zCkS~2Oyyw$nuMrw+h~uA5xGrA1)~^i7*Hm0rU^OtP<8q7^oCCL!|Dd%cl+R|t|xea zfDBl@>`c6q57j{Cwzj{GjeITXgl&YtQT3{~jVN7(>25x`!&=SiZ0Y;yjR##!O%1te zYdw#R5i54Tp@ylqe~3SRXAs?K^aYe7+|B+ZJ2`4!zv`op*Y}p^=Z^&4T^nv2nj1Rb z_j%l!0&L%Ok?c^?!lgAWU?Giea5gmDPW@b7_lIYOd;u#T&v0I5V3Zcg4_({%ueUv} z%M~tkl=u?~=S12MPmY_|%KP)KwysTp?jYS3Jon0T@R8T>WYuqZgw@+~G8(N`NL=@2 zQH7tEz*L^cw4`67%ULtXPObUJHxdp5e`e?BoZ5$>_>6L{r${WIL=ys{!pQ0u%X-f!D9)8}xNZjKx| zcIC0L8z)uEO>;6P&=DZeE^!K-d#%u(sFRxt+HJkA4VAg-elV%PCnBsY1Ul^o=^->g zrsEY)jeV{UJ?>l*_gs)&k6BbOi~WakicZ1xRzA(s@mLh#BsBdDt-@H|kpgI~4?0gp zK?H`w@Gh*`U2jn~JlI@icA?gVddp3#w^@)h;B+J@)4QAC)EW3?rWoH2WT0DNSnLwY zDG-!|xo)iW+lrxLUK02fqC|(iH8EQqzYs0UlWSWWHm+&0^XT#eD~U{Z0YIZFF&=U( z)66~l_Qi9LTb`;dO!5i$WVyf1w_buv#TIE%oD~mPDfXImLh?QGwqjsj7|bw0e8XFU zK1GXslB5;rA!ipaT}{?Wq)FbZ`+PQg1CX#4h&$8r0#U7#NYQ7I>r+-8+Y|InL$HG? z8+E5(s)EjYPRY{$35LP+AI$DCPPpyFQt^R@*9A1`3SDxstbEBQ3x_YaUv-BEiJthM zZjUMp=Y+RkAla^TmZvV*h!M_S4--OeT`m-(&f!<^_VJ1CZuzeHaIRr1^SU|L9p};C zvnZ*sOgEn^EqE-3>^Q5a1YBvk zWwk*d@fAf^KYPtFnJv)9Y3%5VIOvt<#{PO`xN+Ja9)i7zBQMpRgst!BQd-AYkb^eX zc2bnjDz2MC&rcHjEibK_+ggOLw{Ox17q({;cH-Hz;Wl3hK{6N%I@YUdN5MaUeuE*A zxIsI?Y?Zo*f3-MrRk0ZlN`iN#j?+%X`;4J5wDk-0T|NB zJA)ZeLO3h)9Xo5i@}{6FX=pQLWa+{)`m*_2TJ>vm>qnlYeV=a#L^zCnf$3gX5_OPRUdovBOZD#XHP*ujNz*P>k^Um2h#~!~wVt2= zN$L}6^1C#pQ*^ij2JI7Y#TIz?)0IeKFXCt0j~~2ha9hOXCmZI%UloqzYO5dmPD42< z=x6}`*%Ohj!Sz*9$f zcRR~f(rq(j60vBXJJg0O8k%oj3H3qP44AvEXGpitHTpmgF=G$qhnO>!0>)+=cf3Zo zJ+G@P*G7LgR}`E=b>8>ys4{t9IqP;_7!(1taPgPUKVm&UUo72)jufV|GRnCfuuoa zw0(FniK)8^{55v4&`jqS+{@UlEzE0r(A?e$UQReFp*O%7hD@{sqI!ZjJm`k!&Mqom zTUW#$i{`iq`Mg)0cJE#^;{2wF*!wkQ9l2{s=DM30{nVQooss0o6A$GqR()G)Q93xxp zg;oRh@Nbh<>`Ff_pD&#M-l=|~+))e)hqO+lom}R?+CNpwE&KYKu)fbrP1FWK6`HTD zWVe<0yJrat1rz(>4s2=dCt2667wBYVA?T5pliN z3Yrje$o>}%(*p2yG4bHUt4&CX$Tm6SlR+!|N(CxpopK`6v=Kw$wGQ=91L#@LI>2R% zV8`6JAh)&QmAX?7Ls++cefc%Ap2o3Z+6Lxn>tiPOXvuDPjb3x7@|$~@y&&vxDhuX& zeV0}`p+XFlv*37lB%38msZD{fEq);z7Z9*ILj%I~)aZ6^4v-^ayxgtZuQd^|>kRzu z&t)dgr5EbMDQKo!Nm%iMz6okHG@#~zIxMdb8SwUfz^<|Lbd8))FyCUu1-z4q3d9dE z#Z&i-*Z|ik;UsD-2tNS6GxH%P{AtH2Tq68oH=C#@+Q&=#i&fZ(-V=dAu<#wKanpD`J2+9T$mZN(~+T%=H`E z-P*DWIcA9b%3RpW@=2_{m<7W2sbDMefnae@{W{%f+}_QmI9|TK?95BmnYgxC%Qj27 z|B|-$uVw^RiT~$}K~{4}+(F8}?Af9xR3av>2u0p-4cj|);7!MHyu*!jx~p!a&W9IY zp*xvM=+HR!_P2xMuB&u!$#9UxWuh+d8$=|&+HdhyuT}LEA%;Gg>5i9vz36P6W&Zi! zB_wrn&AqOXXkC&0B~6b-BG56(r?&=(r>$n=lIVL(PQEn+3va@uhybpuEAC7lb4Nwl ztjGNYgbEbjBmKp8Qp?JMGDM`ZnLa7a-WukXPk4$GPWripu``IntN{1CwkdziS@P!RvEtRPgnK1PqCt(54lksc!fYivVh0=#Q19fzSCBPkA(JtJIfp zYp-sZeBk<|3iK-cx?oP^y65=%d~YjxC#~SB^}%*ts+a}2DVuizI(MbDx1DC50By1G zJ)V7Ad5EPmWJIK{D){i~uyoFpdMwm;>NqZIvO;MjW{YLGTPKH9$xr;2Mivdv?`|Ar zH4Yv5ZDpR>yPQvKwGSEiT=_|nZM9WySzXRwZMEI3QMb|JZy1?y=HNp^?eLtX<8nV) zXdC;pE}rF`>)p9Dwwz15ps6qfTVHuov2bV4m5|MU@m^VU(deLwEo1y2(RX6Hd51r2 zaDj5i_FTs=J&E=+CRl$vuX6{Bp3B9#twLfV)^WLIVR3~cMlhN`G7sNPEEV$W-d5yB;xk9jqAf;r0uquO#zi`Y*^d+ zK?z}h(~tZKj@ng-HVU319o_#f%EP&o`Q3AUAF;05`LE3sf*u~4=Yw~u>@d3eVRk&n zf3$O$9+;^}n#?2Wr0lSH_#mWWFA@U+h97jZrOurqc2eigumQIN&QxVt6okox*;04c zIgatJpV(T!ydI6H>xEB+owFP{ZHDGy_92e@`{S(@ zIyYSY2<2P3_J`jiv!N~_lQ+`MA32d%mZusDI~j-&X_*dw0(9P2#@2jidwfdx>Z)+U z4H}e96lzX{B@DgLl|`DRY)lz9rz?vLSAtB!&o1E0n7oVf`b3P~SYDc)3!>`D(2ic! zwbFHqeTM%(LlXbSdZ~IA;U+(m=CFg=m&F zRDxL>zrCmle|o)hKn;y2Gvf z!?m@S42``}7CqdU;1*H6IUHWX43xP_Eeax{u*3rsgmR$vmw*bFFac<`I;PXy`%C9owAq(Xnk`z3zr8&ZuB->y_kcZF^{us&)My7lp+&1MBeOg`DK(N271=*WN(ZM z-`=FbuHbI#+JAj-;(h4aa_Ay|9mY2oaD?&E0kp&!cSIlX;chIEqTk^f5Y zp1$MND$}RbBJan!kqqCOyuV9f1N2h|>{KkdSO_JG636Y5G&``F7^vb&k&|b&`kpZWjlI(0HUQIQ%w0X+U`KHS)19%-|99a=i+-nc}f#FG69 ze-x-P0x^59rC|PPUhZj8oM=tkC6z{mn;Fa5lf^Pa8h+lp;&J;&%YhEz)|QQFx-Y+; zTM^rBjC%mC$0|(z;S88YH0Ah+jFd^MwLzJ!2rMoUix2jcdP&i)=j6*hN3qhxN-cTw9IV$is7 zo~G=+SGP7mO{gGvV+IU|Wn7B59BW<9`EFOrf>1{{uywps>okj;p7FbK^9#rU&7N4; zT@E#EV&#ovdGD}<^RettL}!^p1n(T1f$%Fqq8JZT6enqoMf-gZlF*d8XQuzMCH+4S zI}E?7C=4znon6!m{uCyORFYCTpl`T%nt|Kuve z?I#*I*ri~T-h!75FX`6YWox>7Ge0$L91^5X6FU%hKM8OYr$?8oYmOSNKVmvG&31Dt z=5p&6Mn0c5>v_NaRX`-#Y$IvYE0B3WQOalKaVZKs{I**k!g02<-~|k1jwwX9NtX?zVRjuRM_O`aMd-!<@gM>6KfSb z{&9b1gLENcVRz(Z(Afc=8i{tzPZ33LTpe0sSZ<{ZW7-Hd>SttBM(TIS6LrkZ?>Q~l z(((I|&zn0?3xs*Ss3JK({5qD}1a`$E3%TDKdY=68*rbVCVe_D0^PDSSHNG<}dFGFc zcwP(+@YyliEkIqsLg*~>k|s!B(Aec!2$g&bG8>}Khi!sl-|ACRsGZyre1ck zRbsHsG!_}E^B+T&C}VtIqFL;WK%lj_rixRVL%r$k(l1PiQt z@{<6Q9vD_mZXDu`BQSLjEC!!3?VvjyDPSY8P670et9q-=hazvOyhXtfeQoUotMd0+ zS*Od);!RFNB6?x@5D9$=@l`u2)8k;M#P08p5SIb}|k9z;+SY;$!($ zfR66mn*6lD?SuiZfDYne@{S$rXGR^%<$@CmCGLwYgLH|6yW6v9(OT}M{UT=a!)j#e zC}EV5T?8DDyQ_;kO>Y{IWIFMj5j>biUKiFBFTA`w6<3>{ol?veUiH3rDL-pyph%p6 zkBX6sVrB*B#5umg$XOx6Hqi+?^Rj9#@Z!hoS@B{K`A-(1yvA!X4l*==N&n3dj^%zL zCbg$%md=>5bb`O!;PX-y6?Bsrb9qPJj$zOF$K&YRDQHsuZ4Sse%sDUQTSpd6;5jB% zNbUlsE1`YcS*iBo-u`|`%*=A~8*-3lC^6{BRBHW(9iQ;iV3h**hXQRTTjaN+ceR2> zc?13pX8*G&2bkbkZBEBl5f(N?JW$hs25)-zO9lVbWwA3rK12z8w|#84tuAe(e2r8RQ0qk zuCBsSm#1ONpk!0YmYOM;>inaFNx3mjU<2~=$MRMsWBc5q6TgAvHhN_B?*SsPH064g zo`|@yr|iulIOTX{!Phs#BBh4hR3_UXeTvId7%h+I^KN-X|G}>%pcR z{-P*(V{dZ`UWnY`qVN|Sgy9S3nzsvXoDS@bEH3WNC%??luIf+l{Mq_Be{!vsmzLUd zB78F>=;(@f+=!;90!tuiy<4L~mUS}SWsNif8A+83e3W;Ya@bNi_~8{W$$R`KYolmz zlPH6^-9d?xAw!RVUV+>;w2^nhaALky;C8Oo*&}uC^#^7?&G!PTtWL4i z+mvoo)d+-5x2BHG!zc0<7_`x}8QM>9*jHN-7UwtX_D(QBDlhfU`WKzum9Mi?_#0_9jx%^!Y#}>1l)x+g;9Jy-JI#a@Um;>QUh@DufFLFUCnq zXoxgaBUd`HYj;h?RlkC`3wVERhVrtEzSDdz$O3^cZ$7=1X zp_8Y2YeX@Vr7*B780~MFvO;hqyF-vTD?6XpFcF!oJvEo(*1yJQmhv>CDqx6N?!aOc zGGw4*bGl4+zC9zkz=-4E(sjD%E18AE`Y8mmHL;FXej^Ev>ZUs-+Ox<;f5L)0$ zJq0V9GTxNs8gnxq6h$aV(Tzy=Vs+y1_YbSHXj>AJh4I_XUe;un3c{YhoZ23 z>&HcGek&FgY!mfJP@;P5P0FH;0RMs(3DQ8-0$n`xSFHY(G5fboi$w@f44Za_E4ftY zv8&ngDGD-taC`WOwDrxIt|&S$CoUj8WhQvtFCcsjHX<+QB>LR{FltZ_(t zd<~Nhduse`7 zfT2n=-N|Z?C?qD`pQLl&R_d+TQgcz$ETBfdV@^oBwUzbg)X^cl~h!Na~ZCWKhckm!@fJ8^`O!mAKH?&pnK z-ZsUr)++DGSK@?a?XCAUZ8eUZ95u@sDCoDZt>MGd;Z`KFtH>q~Y1)}K#`$WgziL^I zAzE>~?$`g!0+3XOReh^G&I|~DDcgCYVXk`FpSj+!kFFDUzpyQ)?;`hek9_zw`LTWi z=sZ@~HsZuDG3V&N=tA{~n~c15STs>YUAlX2D1(}@D3jxh;+L&~ih#_Aq{}Bx};gi73Buyg)n|GaO%Onf`ud zEgPms3~DnR#oO6Z^V!e%%{$9;Taq;B-@qcH-4DL@#Ec|8ZY*mpb|EI5#I6?(;rdVW zKeF=|e!nv_?g9|4p5X1n`*oOEHt9JsW*;R>LcZbiNdDqv%I$fYtk8m&xj$m z$jbwa$iU4-NFHg*SBY1TPm%3cS$oNBmrbthh;?PgIT4=Y-Vd9?uR>lTEOJv0Ee&#& z)>7dxM3wOikgAd6Bd2&{wNPP*`-1hKvs}omBC1Yb3xI+1 z>>KnNGSmL&Vbh}A7y4k=D+^UD_ZQJ*9-~Q;58I*;nh%pD{Vs~hQyU#tTAijPSwjc6 zw`1u%t94ccPo!LZ0q6n_t2~@$mSjBfQ{km4?7)6cb|3on^UF~Go?HHQVx}pbC-;k3P1WXmm>p|Hp*)2Ug9L)Pgr7qnck|IpS1bvMx5X8OHFy+1vhDOw z4crF@nQ6nbYSWbj_WK$y5CLqdX%iKDn|jG&56g^8e9A;b%rfLFJ6XLM&i4KEq>26J&ayOVee(m%Y+K!2}D}q5lYi8kq@h9DR0?+et z8$)Pj5)aMrg5F(oTRV=PQXXGU$B_W_f+nE?#b;nHwu>p ztA{WLA2rPac&Hf1rXQ4ZZGk?gi*at+eej||x7XzDqoEf20*^M$C) z|GG<^m6t9FmYYz~Zw)!01X_i_y_V}X(BE3!*+RM;Ht}BL0gk8GC}V?hRDpw7RJ8vF z4$Ms0cBzoqt&LzZw>=QJtsHFD3t!A18|dMrMaD|(02&in=R_RR3`t-@VYd%5&D!L_ zyRPmR>!i)E2|L{(9Kw~u0@hB)1j{Gi{g>_#C~Q2Kbr$Ozvg=fnWyFo9^sMQcqt~%{ zED5jv80T(WIju2rIMs8lrpkU5-O-SiJrUkegZdtB_wNs;{;LS{u_lgHDTO|pu4=_k zsUPfbLn3j4pRcYwqgUkOxmA=oN0-h&Ii@!uF2La`)72%?JxD8J$$PI#NJ0FKtEf7T z5IQx@%n-n0V>1Eka$$B00nE5V3_B%kwCTiQej4?JBaL)R%=RQPTL;K`AGTpTMMpl( zz=}tsFMbN?E$x|9-1@oyi;i1f7}Y0t?0!H&mS`0W$iV~1PbDYANvt{Nfop#DzUpK! zrvM6l#lYh4MJQb!eO9ukoX<1Nboy^*91<5;R9UENJXCmnzI?I3c_wIoW5yr!`;zej zwbBmfQ!mz|!? zV@xw`2KvGDbe?Q@c9NLAT%+=hG)x`ur1HnLOMZEBA<_sG|T#z74!Co*ePcMOHR zE4qH8X~1rX9A-S`IV!ir7(FH1?}AjZ#i>QheBodGgj@)1$LZKVB}tFN2tP6&p5@U| zA~9UR)e&sd0S@$r zkvK=c;8rFG_PN8qM03SyM);U|l)1-@>zSFHG)KN7iEwLGL#OIX=V!m>@U*<8|3fzG z|6Ip`Y}8=f1utkM*ZLH6mNJ7rw<+RbBMGtFiM=X17e5md@bF+!?Z=Y81M$GE6I{fCWzor-yjH{tB4kjXbzs3BRyfSz1#blYtdFq+yYcnibKZTo4 zGq}rr;O=OQC-m@qzTy#XJ&3P7J3VfUO!Ff3+caqj`*L4I%I=x-oOXy=u&D0Mf#h?5 z%N=R+GD57S=o_QoX&8s^`K)(8o&v$>va>}0t?*bz#rT#b(T5V#m(YRdQxT~u)N`2#hex!JF_ zPv?nwF|k;1)9**I!o+t)s@}9KN_;)2G)$#h1U?+cX@B?AYPrjiu8wQI#v+*i<`nDA z4Jth5f#1)`3PnGkZE8-s+;+^|8V0k83OXbLR=x2i`5^(T|C}x^Lt&w6e7DMz21;@Mo116SV<=QF%edb`FCBoj5_4wS0>4G}-6%6YsDJxOjUDJgNXN};-ucFip<*6)3QhDqm;ctF?0uHzu>$nE)1 zUtiqRUcVq&8r?L8`Ct{_ry8_Se9;Tm3 zaeT5%4ZaNlv>i5A414+U(u@%?3#4z|b#Cq!P^|aL7suoyYA?rUV;u^wi z0mVDHZ}qi?w3mclA-`3IF27GX|H1IP!@b#GI-cdlH6w}Vm#UMQbe57fWCY#m@X$8f zR*4dJ>Qv}^iB=pi6pZqR_d%bO2#^;UQf!^7c_956=uKO6!YxRS*k|?`tg`wxpi||y zS;Drm`%hMt*aLomkDsQKbSz&4Dxjk=+l)=2+HaiHw1zp>aY87I$pKP3)o(v>QHaOQ zalRntSctnL!fp6I%;blt8G*UlE4*09hEhG9D!nvoCb2iN>1A0n`Is@T0RN?@4>yN6 z)u)oOq|*fa?p3$~%$4S@JW%G5H2JcuH+Z`D*|5Xk2;0_#yX$n9O)+%+HmKlt1t@xj z&3yOsVGrSt-2b{;E=&Z_dIlD1s-53Vjo5d(bb}m1cheh!*WLS>SNPbr$kB14-BZ>; z+OJUaq)3A*W1qc+W5!|EFjr_KxxeLGCYX-jtkbA5ZHoyGW5kfRHig$C2LFQu*p1H2 zZBnrejh;^$R73Ug!9N$^eODNtw!5R)3R>ea7{4Ohu`{F%{fPa&H@a-i(EN7G5jA)E ztD(N%QIyC?$SgP69YPK_@Akn&#pVv}T8}5x6a`55i^ku1YQBkEtB|JyXrtKJeJ80; zUU(Wx#;0rz_CIZI4yP;~Wl^8=_n^KLlOcrvn#>7>cCLUPpie%n`^(CMp0d#y+8A#T zwfdWt99zrIzb@x`>(vesvJvi;%JutxtiAk(v#l}xs(-)hA^4c7)p~bZMicMNv&5_{3FNmr+!)J;wS}Npm+6p zh8dO7iw{p$>ee);hqwRxe=^NqjS0ZnnSpnHa;OYG^v5Y?8tvZut$$X`m5^v2-3E=T zyFCoMwN!bKITn(3`v()dcO;=7uUjWI^tCO^W2@9Km@n5oamo)u)4xB%Ib{#+)=kd$ z$l;STFdr%vqa8F&wegOnAnoXedp*_ro7w63WYxix1CCZ1lWUZAK@AP$0v$l)hd$RK zk#ZUa%{SMe9zp>hs`@{+J#?&hAFrL+ zwR}H;4l7E)kMnJ>Py#OwrusIF`Uvz*0sB?VeoxfVdgn%tA5Bo;%+zey<;L@<#H@4KsoKA z=^KsT*Gq@72~pR~=l`*Pb3>!h6EARBYxmy!;R#CeRFZYdLDlK4m=&TcQ-v<{cBYhu zEtg{`KT{U}B6_RX>tg7AJJFRGczU-!Q!gO0l??ncm0r8>1+aiy(`~~Bn0NTggFG5f zv$tdnsBlE;Fggt+L<(i=@l3G%tcQz{r1Sn*VU<#>LO_4&$oZ4gWlvwc}2zY$vaG0x*C^i(l`S(-zTO-zuE@`0&aftm>x`4!o)$HR?rR-Yf` z5!}_mqxQ&ODu`X&TkR|O#f0-dcJ{&ji+#r^7PFKgDh0wT_g!u&|HB0RyzGU(fz=!- zYtCPFI=PS4th<%ja#%HH)(7G+@AoNQ5Pt&>Pwu3Qj%ujfbQasY$|g5x1n#Vu(yibZ zkhKb|9=`T@>HnsFA|uXTxi#L!RK(J!rcqwRAdJ;Qep2RdJpWJn>hI5BAw+00Mj4%I zmlmUZmp}xOXBnoPVuTrn`-tmql~q(DksqHIir59kOKA{bn*5L%FFTeiXHd@EMM!Tv4{vR&dT>v zG>0Z842+HGH)(3>g#_XR1k00Hr1bq39qP^DM)<~k{UKL6K zW}hfv9lsfrc#~c~Ik~5%2BCLRJKyMwiW-2wpL)0{dHPx>|98%l?=u@=U`qiscEH{b<{R=Y5@=M@ab0XY;F4OoL%1Dw%i|M zE)(>#!PGk<>1`v~q{nU!aqO=A*yV-wAwj!|b2_1;s2SmK!s=GO>6*!Pah@+y|8wB+ z|59ZCr+D~FyP*vWRX!*ZBqN*2ckS?WqwyBLX+ASGduRociP9ATH_%vCw}5{Msg#0g zE1PIwj9NyXB*pKGxbq5q=o05>lHSF;Zw5|}rq+D4`%DrY@1C7z>i*+U6W<|vWZJa* zQQAlq{=qD6Tm#bm@J-7gb4|^=+x-+~u6Ghl-MSR?R4zjEV#yp<76A}yB-6F zgFU>|uPNx5l+mSESGc#9i?vnbuURrrXhZaqgQ-)t$E^joU;KR7{`UXD6@dtMUOyHr>~%S=ThI`Y6gE_T>lRdQW19o`KYggfIRP{R9tu>8?#=`BCjQ zFc4u>EJ2YsbCDAyp6IOmo)gLY*-us;07AEUd>B76deOkBoCo`C!fenbpt~laTrt~R z9*d9zE~l~-aFG+@gi9|GjH?4|ze$iajNkc4dMVf|#e7IcXfEhYmT0Z^toz+A2?0T5 zI4LO$z^EfwktIzm-V_>ij|#>40t9ev4Pfgh;UoCY7!rJ&*PS$j{X?Uqix|hkOYuND zX@}M@uLlHsK-vXGjags0?y>-yns4_p@Z+5nD)8>^2tD|{1Ga~`Bg7a19PB?Gc*?-( zSf#9D2@5uT6K%L1#oU8L!Lr#u3J))eQC39!!1~>lq8gR+K340uYX{=fx&!At4^w}g zFCQkS`T!|5_4nf@Cw`B`buP&s>DwKP+;X1B?P)vw|LIy7R;uL7HRqD(g!4=;=EMV= z71`H<-JY3FchE*Z*rPXVK{8Qzhm&h8KX$}y^(ou)scG5Mfz*0WNFP{&0}TC zT2TldVBEz>$0DwJe5RAOfJKAa8gZOot5IM>zxjT@`jwh2xz`t(TN}4GzCzWk*0;C@ zbCL}VnJTLur#pVG%=YOHCShtF8>QP`H!*bsODQzyFj^=^Nmr5rkwujR@hg`7Z&_vi z6ElAJiwnf9`Q7GpoE3~Hx<>;XG_?!AgelxYqd+H3Bp8z0V3v4wD_=RWdhwc)nu*vz z&Fbh%VYR?eZ*P;&g2`v;Gi{@HWMeXxoZp5>y7#e#9#B`Ii$``A?&?@~sX#uDyO^c3 zDFvBm_i=>2jm6sg>rdaFvPpt>2Zy&!r%Vxj9!g-=ef7DuWV+Fa3n@7#qNQfUJ&0hP zgGfzPgp&A)+C_cp~NR%GuWyB9A@OoxRUs=%Cp@yU_!I%%*9U?-(EABWwU8b#} zZZ^Hf-7?3Pg{?}1uVRe?*BOVG+|sC9l1u~fW>PE`9&e`C2VBj|!tQxL7|CE!L%dt7 z-e|^>asO^$H~ER=Q1C6Y>y|tZ<~q&*jAZ1@5VR;bU{Rs^+c^mXTrgh@e1DJp8e8BU zCKJKV%R~D`d7U4t}~A7;}Ra7yhqyT#YM5tdBg7-;XKD`f+6PS=BW%v4&n;$DEDnc zAMGu2uy!x;5nNP?P?E80jas(6V`~OccE>Sp*a}QbRyIEC8*aV*uK2~sh#b@ZCfcO% z*D=51PcP8TNu2*Bk#ZxjPZWs0+vuyZi5Sl@#{QN>)vXLmlGJK{dDtbsAxlgYj~?Di z(5?#p*~Pb;?^kA6jcz19QRIAG|VrpdRR8 zS#H;C7Ax*7)8EBSCs71pu=3?sv(}TK)62Q@@Fffj zn$!$Yg;T-RAq;F2et%~O+_5DPv2#}h^|(237f(%$3Uzu=|GsY+DHl^l)qS?QT9VD2 zm&%$Pc+@wXG4mxG1$v6Hu9 zqMM;W_~OaC>R+yZvPb{e92N#R%AgD1Z|(Q0nb;m4l7Cuw$b-QA8I<<-SN=7YbYxM# zaj1ad4@4f`Q9`QB{74~Y`faSw>-uK-4F!qCCN6u(SIF$gya08gY3@09aYSk;l&0it z&|o0OMQTPop%N#Kl+Ap;;-V&chzwn`*fyWBoPZPXv@DLREHy;=X8&; zf9z4;&s9t2TywAGQ%E~pAnJUL20~7F{S7m9vq{C`Bka&LzTxs>Xrqua5e!FPZehi9 zUS^k5qY!6EMD&|KeO@}o^&2A0UMT-5<+5i^`Q)ng4eh$6xPJ|6ETwqQsPqSZs?^)o zLLUru8!ZvvLdhSo>Ns-{Rt{66M5v(C80Pn=6R-L_9Kn!Ot*EHAP*8(ZHcGxQtH0#z zw!4Fo3ia83!UVUG2eu5`&I-wftD(y2?IpF-^u8oeF>7tV4$mmL%$*wL9K|2`*AE)@ z3BvU{j!{p&?9~OjAsi#!>g)Y({&#<>@>f9`RAQ;OU3u38J@Q!D?8iTbVbPRc|4qg@ z(51pRMz1zgpWj}4diV)`HAR!=>JU;Pv{s_}T>1GJJZ_=aR!2-BZMFTQBgJnovtT*A zX;gvpN_>h26w`jN86VA4L>X#vtg9zQ?Fg}rF69wc@YlQ&j4EI#hBU0r3qh7{=fyaf+dkw@! zRWX)qmAub4S{L1h#Fx%5;2+0G0)wu7vJ~-D|1mAEQnCsa?)o6U3J&mOq&S`Dv_RZ= z4NVD}r!m$@@()}c54Z{niZaRf$wL!jg9fh=jC!AVCqp z(qPpI>sXV&@TBqx6r<0U*9Ks#6}l_L;T^ZfEgDdrL)Et3X1+N>~*pvuIW>R z%zPM)s(--l))bVRwkHVG-nPvX(3eZv+{>EQt6x_Zb=83X=xJ@ESnUU)%_7=ol$>=! z4p?Sqkf*cQC{ta!Pd;>;XF7KpChtFKZ)m^K3DYu`Ej>h$$B;&xulrzqCnD25G;qJ& zH8vFW_oO&0D)WMdb?W~paXb@q>f%l%>zha3COmJPnar*C#ob64Zl%sCovZj9byC}@ zHHSa$@G{Ef7m|r}d$px6Qqqi}BTB%W+sDB95{f>QeWb~FTkH)Cq%1Y|;~1+Sv%>Tk zNBA=^LGvu}fMZrF=R&_wLoSWP9`(X-sWM~ZM0K_OzybSrTi-~L~7K8X3cZU}L5D>>ll)NF8h0yqEUSJp}t&{@%3ER~d ziRx+H#@^9A(ly29MHJoo?@O$L>>u!aAX}XW_`<}4o(DBBXfB={^nGZvyS*kw#=#)H z;Fp`s8>^?B=Q(~MO~%BrPvG2=PK3f6s*r+Kbcz4PkN){s-SXJZ{-a08#O1ShN*Ick z|33WvOKEX?&8*R43co&uy+|aiNIk7;Xjs>`Z-A-F+@I}$ZJmIm*uyxpO-4z4G3CB^ zhKn8}BoOs?&0X+%RN>!~05#hNnB)p(SA`4>-i7UU!V)nRK!WVY_qCryQm-=~_eA)I zHu;jj#%;pJ5d8u$0`|+T3Wg;y=07N8!jtpMLT2GO zKfe35V0xC)I;MZdtVTr&IxRg+Jaa=iZ9zKv=#C7LhFCSLeBjGW>i7vD2KlT=LDbb_ z1^Q%=+wmwxtzT+51brzyASJPu;?72nrxa(#qgdo%4E>y?RwjJ}9#U+CK;E#(=%wGL zboU;eoD7VaR<*xc?rRa~b9j2=-wj+$`7vWsGUrdQ|8;H&`SPHSfv@-ORa%T7@zd_4 zUhhPd(K7sa_jrELeu;>XD1*mo8LR$^w;1W9gK7%g#&wNi1-5wS2c;FygZ=SlA)+MGvOl;S``L!|Vn2L{vyA@(3i@DkJ@z;o%)K6M3551*O z$1X1W8JcJ!R%~OiJF|nP8dLXK=z|O2{@F3#lUt``ff8=&A18#ErTlhLT;4t?^G{5)%n&>||(POpIE}V-*SNBDd z!G-&~&a9n@X)cB{ay>E-Ie}Y7-vTf2!%Le>2N_8|m1-sztGaW3!eizfVr(~X{Q;@7 zaf_qy5YGc8Pb92o4VJCsd$)-K8ATKGi{_ z@GQLSD!4v+!zj3WzOa$Q#AJ*OKD{@1r!B7R}e@Y_~45ep1~ z8IufC0_Lm8ieHutl;}xVxM7G>Ih=YlQIVaZFEp_s}zuKSwOf2l%WP5T{wgs|sJ1$Ydq!tzP z)oi`l-*6j+@Co-)=bgT{dI?v3Wr<3;f#175)>`NLT>f2a0oeh+=l|xV|B9|L%}0@X z7gv&@X`?AE=)LO4Iev8f7Nf$fE?1aSmcwKKj@viGu2$wdh4qyr$`;8IakSfS$Acr& zZzW-$&H3x2vFI0mSIu84GM1vDg5|KX_D1Eh<>Z9#CBdzwpUpGRq=-=xyg(oN_I0zX z_Z6I*8E)Opj3NHy$`ve@)6~Rcvw8{3{a?OMKc7Rq#M~~uaQ2~(;z92z5k{&oX?=Y9 zzd2(J3iLLX3k{m~^Y%4BYS5D6jy?KC4tiB*fbaTQSlll{;S)DS7JloiiLaH&X5Mno zcF@a7vLR-|Eb^hzUW4LSYq5`<4&ERJr6_ypG8U3Z`%V3j9xX!~`&c2z(++>x1RCDNc+J<|w{H9}M+*LPm%tL}oG4*1SIDxM4KZ;DO^31#IWkXtWphMTsI& zCewL3B@!Bumg_COyu1_>m_Mc*ZYZt1K;j>jw|7)dY>1Ek3Z_4X-fw+!ZZ748go&E{ zc|6(%*SsD%_@;}NYMWHS_lqB*OodjT^DEUb%CS{2pSc}cL3)=kIblmPJ2cuqgY5Ntz*n42T=3JVR$ z;!hu61ae0Z|edkIDwVi3?xIm4pv-xsFHd~DGlQDhktnp{7ZIAv-lsb8sL?rX41 z2x&O=q61i$DT@R#!rURTepbGs7t9l0Ms@9*J)4m%m~U*1cMYC4gW62AU0vQZfQ0z} zo5=NNF>o}({L4i%6M!?e_!;kj+!-}`SI_Rl2gJedl>G|}0&oSuWxjLah3P^Itjs*m z{4=4H&#s;0tTma|*_+-E7{#m-xbZ(R*k#MtaB<5E7K{(2RbJN#>RHx&$GZdLxM7EZ zDt`Qw{XYD@EtvFPpVJ6te`)ul98nZJ>&{m`OxO$G9vAPmgBWBATcaXTQf4RmU3?$i zIyY7ispsfNeI|mwsWeD}(AOW7b5(Szm;Y!{j=HxDdscbz(z;K~btctgpSB7p8jB$ojSno}kH#t>J&W!%wKk=U&!+`)6zAsOLq0Y&=JS z;rTyCR{dXh_*ZSvY8}eDV&pfSaON3@xD{RrX7dzi5FeLnX}h*S6Y6hL>p8v_+_*1> zp&rY7NDWkTIQO0DYBlabIA~65Bd<-`H4LRW(&c9}TK3PGQ*y$!%gxPQ@#O574Ff*Y zs=T#ypso+-l0!|hmC9zfo3r2keyrKtJ`Zd{yHx@yB8%U%eB?;#gs#sBVpk zk=s0IL28J9ouXfk?;U(o5itNY;RA; z?v)p*JsxgW?f||w6E9OKI(MN99Y(QzBxG9SpnAE{!FG_mY9}DhHvgklO;61y&I9v( zKbe|~Gcl7^h@8gQY!kzrUpNT~hh;AW6r28miCV>U<7rE@&OJ~e^8oZX{`5-A|1mR> zjA9g2?^jMlYtZJy)bkR!4)@Q$*#k-pzN=v$3A9H&O$q*=<8OmC`+rt}hub;wV4J3s`i;Xw!(toPT>_aMFDi{q7t^M~l6^lY9VwyXeU z&2ARLRwNp+(p2xb5kG5|0bx=+{NC5A`;FgFLRI)WU*4!ag*jmiu)d1+DND|1p6a%1 z%OmqlaCN9!tT_{v8{tCOy=t)|^J8uCrJONbRo5;~>m4#2<^O)g6Pp(Qn_$-B-tI-e z?{wjtZ|GzkkpFL@ly*uLiFN*m@gKBTD+ZJgAib-|8IadK>gPkYI}SFs`z^(1_f{wj zW`B7eo`txH*DA-F0!5Q_*yCRe6z9%Dv?6sCe?i~|bh~kWRq;K{XskOdl78(^ckfHQ z@-^JC3DV@ulGYfsI`(=Ra7MYIk1O6GzPEM~Njb?YiF9H|%4?Ij`Popm`kJC8 z+7M+yTSen1>(&)A)z{B1esAeAu9svwrTY%Db(Ub&?Fy+gnQaxA#j&f|S}X2VZOfe& zVH^d{#1uArp2IW8_)~VM8EFlM-}6TiDXtSMu2Kg8zyUrSCXq6M6lfMCSAwTE*>vO4#vZ$VP z+H;b>l9&iBvnR-f*pi|YJqpR_l2fJvo6uP*!G85kR_Q0Y{7$aX^C?$4GEjo!`99Sg z8w93~Msoe{K>cg|8+Y7%Klx&{;cA2ZT?*&O4_~xbJ;wr166Wk*lB8J`AS@y=rdsdB zI;JT4DC>snL#?Yt*?CG`tJAUw+v0mq+L}foOC<@%1}txDRgl_zZ@3E-R-kUL5Piag zEwSO6q^R~ZDZ9vuD_o)h9PHNpGXWxEi#ALjUcvcDASOD&xyihpwaUyFQ*eG)#5%e~ zec11S@U{o%2aG-{KaLlL1rYao^$8#1gdH&2_o#g@`C)t2_!I#|E6FEUaXE$UeO)HA zL1oI9hLl+1#g4{t>vs?LK-*pELj4{>atOt-22P0(vc3sgs$XoUHd)m%;q2NumZ6BNYPaR=R;1}!Egp=}ji zN^Ek%Uz7j*e75O5*MDOHsAYaq)8<%2=Dys|X0DB{In@Qw^a{5p|N3;!?I&6Vu9D&q zHWn+GlkTRnZA-q~Ea|%wt(#|TgZcmrS=7<5#aL)ag}B%%tQ= z>hANBFk)lnviI39+J)^D)J=?O9m_3U-K7aHL!zAGwljad_W3-wJYiEG`>f2O)`Ute zu942SxnB!Mh(i74ZVEJ;L>+z^W_n9gdK#PsnY{ZZb7XUTj*xyEbWwkbp4EeYBbqH< zHI@?LebS(7AF}Fbvjba35)^5SZf+LtrEuvW3E%Mx#vcyNgH` z;U_VwG|ISsRfvB8x#6yZ^8r6yvQ7Vzx&Lubb3;Je)_m0Q%8vs8m~=9xTK+wp^!<`f zy&>gqgz;7Pmgzr(*^xBCn}_B-c~v9b!0_R&#tws5X!h zSUfRQRZUnve-V5+<*Ia0>|Zmzug2}e_X-+_5n6Uzd|FPNrs zn4Q55K@Zdi;+#)t8kY{JKgjFB`65=*`m{tuM-_?1dxq+rE%{z2V3k?67=4>2?}b9? zi#D^Z5gW}H4=DrC?1vs3x=0KoA(G}Gi#B%p@7|RLDDijzxfbjjNZZV4uDM)narJqsp{Ndm`W^LA5u;Vb!^Nfh)Nh5lH9nVI(DEge&%g)^Re%d}s zvVc6-A$NVy>l3A+srM*)qJH#ZK?rcrdts^MlQC%}G4Hr`Aw69K(LiB|=EleEj4^LI zAo-?;(vdp0c8Zf?Ud{Y3^Hg+dfRgH_j?Hatsy~F%jeGXiKk8r;HgOQt{;qKP;02j` z=ar^8rZ5k6OW@XrCGH$}j@LU94r&oL8O=t+vhPnL(N4YzI^?W0e$O~XuiQ1!Cb|nG z`1LK4<9;X8IwrI=5%Y{%%a4?8k7{3-CmJSYnBl6IQiS`yjtk_EuJj zw$&Ar%GC`vn8uqyQJVnNvFA3rxdecvT ztfLmOD9Hq+$Op+xLPuXJLgu_&4R zSO5FR^uUUir&0Sx2Q1bW-=KtC|K1vyvB*+ZmFE-{-2+&EGoB;R$F37S9_cf1EBSg)&m)R8**~Q#fVzyT{SMXCuXN@e&)Gk$+^wcFwo7-d`vsqU_ZGNtU$m$+4M$rlUhWox^&)uKm+lG$X zHEZxiB4AqP`Ynl*!e%k$fo~%XlOe5aD*lA091z;!LQI#wu~fd&_wi(a1Td4RR~83} z`ta_F(7ZjGeL|rqr{c?=I4&advaGseANlN+1Hax^_+iP^c=5em4UH7ERz+KZ4^&*R+iS8r4 zohLO8G@kwon61#JD!oUj^|CF9{4D8wDPLF+M2W+DQ z>SyTp{loDT_NWOBztwJcy$PZ}H5Unb);QAk-@1Ve+C`c* z#smhP9UGkv3jBa%i7XX%gj5#AVO$?kRV_JShTj#)E4%FWPGW(wZckd@w)@}-&oVw2 zaX1((dAnH+ik^bycvt4f9tN8B9NEQNw)kBrT!SX261~cbjYULCQb{TZnhehYo!;`Q z4oOwh=obPPdltTt@{`IweC8q{!Y(2o(~HN4X1m?SBjBKG4L#%|Nbqy^WuJfIg%HZ% z;MVWr`X|lT_V!|P+n~PzeUG0WXpoto4aFBoZrX_bF$;iJHOU~OsOAIqnEoIaIFUO5 zs18l_wAWqNL7rjP`4}ajhNJxL#Y2SRh})|_uS$Wphx^HB6>6;pqn0AJJqu$ioE>6TnUt2bKezjY6@WrnIF>5T%jBXS z9Eww|{#P{Y)|S4hXo~+$BrnumBz2)J<@&prV=F%<`26(ME<7 zZaZ_#1Q~s!U&ELR5?qM4W5WG{q0IEzP7=7rfuH!1mmeuVz;AiW>U1_CP~UXAKtJBx z#SWNa$Y*J5cuB`>YhXUv<7hw8A{b&h-J)B%cVI>i#+gV7nAF8aA*qAr*vCWWAJ*+u zQa_x*1L!(fcADSWyw4&*n$;2_{k0!B%#LxaZ~{2Cku6M5qiBD5+-!J#>t)C#iKYHV zw)B`pVSB1+0PZjgBfb(L8#ncdoTZ3WV5D5ndRd_Xj;Zhc%}eehkqrC;4TK!3Q#}CN zFP@w7TdfJpp);OlraU~Z)+t`xD$hE^TcG_XkMa*>{(tVbu7s=i#ZEu6h_XyJ#PxsR zVCvpxEy92Us#w8Q2NIirNIm9?4(Vck=W{fN(h9j zo==1l(86~mpvZ1Q2+YIzQ}u7nx*q~@t%SouVIP}Mex_YW287Wk>6cfYPFh)}3%(yS zU*g}=`U&a}d}Tuua>d#`(5@O4w|e z$DW^o*Cy2(&#KExnoQWW>0-&Lsk&!b;67yptd+U7Xmmc*Jw9#tQNrU_8H6F}Cy8~1 zSyFiQCH_}pc-ec{Cs%?d9^WfB-lkQe{9JyW=NHi(RxU2WFg_Y`5xVh`m*>e8eII9N z<}-h#M%`N|Ji$)g+Wdnu48%vd=6{mJbZRxmuP$~17HzB0VekHfdi+0@_=D^cR}c0B zSLHMw4a4K}rVzG{kyA8A?)0yJ0*3eXb=Z2HX^6+;+*+Z!Z0bVVG1Xm_%sZ@CepC?) zhijbrW2MH-j2A~q`SRtE91rdRZ4@!37w&<+IBXASHl9Oy^Hl1&oZPVg@t2h7UC za4GHOs|rSD6;oqoCR)3lLhM9?Mk@x_lE%DIWb7r*I4mmC23aZZa1n}x?b274M0aZ9 z?B(Sa0%hA%%C@%g4Uyaz7^0hwU(K8d>q09^uDzPWcWUrXO%~e~~3rUtPce2|e zX0q?lBukrNMDzvV6cvnU;c(=lWhi8=Yn!UNs1)aN%}gS72WR~*rRAex_!dr8L)_CX z>9pv+E94pbt#8S9XzE2Px60JFkj=G!HHgKyG`1<{m1-BLwza0^-y7i%Pw^)~L6aq@ zV7rA%q7YAc%S2i~_6>0K9o6;I0{rIKBL*GyOIh5A4hLMBuS)VU*U81aVs**B<0@`X z?AFN(=vwY9I~`Xj;n2Ek%`0&!VS_5vvCNij#T%Div;r+tEIoq+ploib0d(<6x2iiO zzgg^Oha2f4iTtgI;3rvCCRxPB_QI$YnoMqBWuQ-2B@4>an%?m|WE@+@2+6iUKzw% zzh-6U>$&XeZk#n={Rd$`v*0l|fZw6JIQ?fGhBU9bP?bqWr9o@k4>4Ga#5 z>a|m?0}W>9aPd@?v$O+wrz%x=ln=7C5<-(@rZWUg(=4sOCF{*}s$I!jX3@J4beHr` zLyRLF_q!^KD#B>r??7MBs)#R>Go&xK49Uu3d6R|(zMc~rQ}lAJZxMrnFcM9zgV|1M zq=kHHi@)_elQZ8XCT#p1ZanD@c)Ch%q5oX)Ez7wr;qR$4`ea{9L}B5g>8BzOkEt9v zzLucASp+U)y0J-b`V1&B^q|-GN@m@g=x~MO`MO=@2#g@-k&Qulo;|9V`HK$+`qNuF zzHf3n_QiMshYQ|S6svBiuQZ-zQrM_i9|DWIrI5}eB(pvHL5eQuf&0J2$?pi>NU2wy zg(s@M^CfN>){4=DW@!B!EUZ#1#|zccI#_=L6{*es&AP0s%QsmE8FKsespHM3DnhVd zXBA=FE_H@xikWQ~U!&4V@4F&XCgZR9qBUwT>-Q0ltDnk!zX1scj7{wQMkV3LB}SNV z57Bv}bMYa^>8!FiM{TR=^E#S#!Jy7^ZILqg8fBEwP6 zdW8)AL3h~?GnWG}z_Gvs7O*+I591nXl0}ci%dh^K;+%jkS5CcCdgy)#T{+=k{H!pA z()RR%DkShOnQ(k*wuCqp>7c?noy#}eG-4Z`9@Rh>;_oSF4N+ZOTIpRsjzBwn<5Xr! z^=T&2)r2-wr>V(2tKV!3@*~kbU8ahZtvp%5w#-FS^;P{NBuq$z5Y7B}=~3>NXT%#2 z#q^Xd*wM~?#zD)!$-h6RJ%Yf{=TC1%upT$IGu(-E983tWJvL;K9n# z+>3s5lOZnRtDzbX_S!isJjL~@LNDfpc}y$dP*(_@n~C&zVk2eP3&R0ya+4C*QO7Y! z=Acr0LBf7E(O{+>NVfAU6@oRsuh9!H*Pk#!2CGH^r-uP;f$CCq*wY7O$kC)b$aeSJ5HEuy|>CM~{kkD{1#`ki$z z|NF_Ys*F>MKuS|qC(G&#o>q&A(uStp$KCMj)BCJUk0c%Y7u7Z~s*sS_9o-^3W=)Kx zNJ|yU^&WqMjXBP-%7SN}+4~7Q;Tr|6e$8}GMfyU)S$wK7Ayd}R?mqWpf7=-g6Jrj* z{I7xWGqg>~vv03-VwX>Id^uo!3D-Btjwe9|Y+QzW*?Epz9#%T~LUzx=`$EC_@(YIK z%fF{~=$My>Kh8om>WcDsD6~o6(b}ZcIE>v1)b)SJ5@ecBz4I)wJ|2;US@-UN0-~ZK zMmOBV9CUf#e+A9tby-Ea2aU)syca;Q$|Bjv%d^`lP_8i1C*8coaH9P<1Gaj0EgibU zI)8U_IaPkowA|vnzSR>Q%ATL(C#u<|glk!?h^M~O2fl~ICYnxjzqBP&lPO;%4hR}k zjtVeo1Ag8nr+aDqzPdcFDawax2RuKmu3(WL&O3GdAw0#YC#~wY=|O9xXs1{651XTu zD;jtDw5bb#S$djSPvftEl=x}OvckUV6m^EZAg&G6JO|#Eug#gF(^>a@WYwq|&h2XJ z;4p@yAw(1c>yMVf9|`iW(&w!nro!>SVJ2wOFX9~=ETz!j{Cu?syWrXH=TY(X#Z)C| zj!`q$?@U*ka(pY|3&W+KnksHBnsReNxwGC;X!p67sTY2~Q({i36e#I89WZlbA`}Rl zloaBCA9oe*TlE&@5>ZZjk)PLo=6wdq-E#*Z>u-IR?R$^XAYjArY%wZ|x@eL4$&zH`oRvK}(N=RhiQ?D_Y22Vf{14H|qmZq;P5QeoT(tmtSo5i#vLZP9VrZ@)HS!^+-ax(1S zP%|=7ee)_H?%n>E7w)gen^&Auu8`-1-&4l7eUdDh0WZq81Y_I<24dz0aFmr7BnA{* zRQM7jG*aPjkAY`Wf7Xoufm&GYQ=@9x?S0GI}Gi8I^Gp=0e-KXNC7K&FNk^q5e<=aJ3tMs12QZFgD z$rtGE~MrZ`4iMy`l1;ZRi8^5Nf zE0@`jA)tKX?Q>8n_NM&2vwd<((?FLi7V$S7EQh0cw+{a-Jyt$R1dd;(L;dhifBYGg z|IOuy4NYypfJv5k>GPCwlG*a)4L@j6*Z(`&cO~XR5oqmlcHl8xW$`9QRzf@23C=uj zD95U3EY&eL!|!)ExVVJ`eGAhZ7m``7N(`I^dTOK^roJQS`e3a~oC;R7$zB)99=&oM zf8j}ysdeBX5o_U5rpxUx$B$l7M#3L;g^R|%Nh=v#LgT}9KS+t=_VHLO)N6s^N$TBc1drZv|)EHue^ zeaAfJR~e6HY0a^9KsW_L{LP);WUly8vi*E_3gOJ%n!w{g)jE?hV@m6YPucN{urbZk zKil^gwBJ^2pLKxj?`c0iq@JCXA06^TV*ifH4-pqc0j?yu*o(0!M&Z(TfG?ERb^}ZN z3k?SC3=0B?a&@pk0YU<*`{{Qcb0$j6U_6)ksYP{fH^KOsrd$@5qWqEpkgvCp`ausa z^tX_ABX)_!Xug&+L7mdY!EqkOh~(sW4wr`+Zf7}ysWu|)Hb1`2__GTSve775x;76< z%*@~we?nUg^CTX4FI6iX{W{Kt19ZC zzeCKJ&(33}RJud)#Ne!|_JzpDh+FzbFyW~0GH0wWpjx^sPY|MtXPSi`z`5P)859o- z^7W?^6rtN6y4)8?q?5gA z%R4hph(**bZvN3;{0qgz!!u-hvqt#fl8(RivZYR~Wi;i5IrQ3tQdb-rSn`4uH$J@% ztLhv-j$EpwQ58Nb3We|d6rlk8+&q{Y*h0FU5KKH3Wie}UhThPmM%_-$>8YvjB5wT4 zQ>LJLBSm`}qwY=eC0B5=`EKcT0}L2hD)`ouqWn!2S@~9fS^`qctQEkVRUjR`NVU|C zoOQ@}%8!l}ntmfXQQgOSm7!r^_`Qap)G&`#FGTB|R8vl<2ZrAQ^kqI!Ilh5uVCBgX z<{HHUMxvwcHNZmutkN^fEB)!o;`)})`L*nI-CU5&m}!34S>qYOK&BXi=6J!b0dq^k zU1j73_Z^J6`!|8*Uo6m;(5@Jq zoDSCPp!2S+KB!%PHC4a|Cf*>ee!(*~&rVY8h;{Snyw4ECbNpnRbnDtA~|?{{`R8P@x&5_o-5;4tPo%Y!$~@oLD8!C2kHgS=tf zxEqNQ{Jv__r66mr9McRp-mu4SE5nemzDq2=F4J})Q;Fqpo-0ShJ&g8RG^d}=3p^rL zX6jE|ZqhdV{wVC?0(08U)UdW9i7fej(l?!i_pPm}UT^-4{Sqzt9S z^K_;Btkk|3?84F7X@1@f_m(CKHN{tO-Dq2{XN54lRFH4q#w**hV~&54ip zE!!(t(DX0-*GEC^lyO4NlZXU6Vae5h>jTxA!e# zqE#49S^R~GZ2~n8fDgL%qc^*?qq#O;S;t2j7vj?mqWr8>DZub?IuCynN7=c}>0lYB z`t+9I+IP>>al;Z-vSd^vU{HTGDeu?(&L+KQXR^^djm?GH2)nEPo=L5XYb?d)*uE>F zwEePE+^xj0E_U@|nF9}@$c~DLtJ?^k8jI$+Dq|Pn{0q)4KtM3w>6ulpegUv$dECb5 z8+`%G`OG;vH2v^!D^+fpr*%u1?34gPIQ%$Rw_|aoZ*qhC+LEx}h-oVS6$mc{xR+AD zRVL_hb##*#&6q$PvG(qE7pyvZVJYft&a4OgUq%H91;(+b9(LkAQuy|E{;!2{?P&K@ zC`_tWX0}LC4_dYBUb?IW^PHX9Rl45hQB;nF>`tCf3zOsfcW~%!FG3aR-Nrg~$Kt`v z*rhY1Yc6K~inA{oHCshaZs!BVbmMh3(gpbMRu03% zQ`nLAKfeOMXjg5CSy*5egFLj)K35WowLnX>e7#Vdz*+g_w0yLbaAbjvK7H=jA+^0u zRceC^$<8oLLLWwPMDR7M%H1D z#SW}jhEk;^pl?>@7akeDY>kHROP60vrXb!On$h$v!>W>n+} z(?bvL?i`J@S{oT~AQ|FrI5!PVK!W;1{^QHb6ljunVqo%V(mwGpZajden9uY4nXclt zQ@L^)NUY@)nF6sONxeu{L)U>zZ>_<_gLuHvU0k}bD65r{iuVY zx9^~%-k9gEzkn1c{%q|$M0=kr@HmR2vOjZ{l|RvgqT7KlKZ8fqtMO;CT|*2pG)HIt zDy8!RNd;(?lyGp?%oSuLQ)?wI!Ta`VKO=W`I6#OxLS(n_rPDTLiRL6>JvqBmz2Q6S zrkL^5w8XLGa1|qx*?Dv&~{gPF{o(x7; zAlKSmh~~I@2^fFsIz@r5OX5WMN998t{0(Ink6+ur3O4@cewnSXnyZ;aH6{Gn0Jt?4 z=dv3|Wglspv3a0?Zke%yI|QTy7SmO1I%8>{13nV7WdwdJtG>!$AR%DUN~ucT(87cp z%`=u~I{L^0)$j67ty=PqZQUtG4n*Mf6fjE!bcbYPvqN@wFsRtWGgf0i@Zr+n|$q4ePO!PoAyQ5wU}j8XJI-xCh=vU5y=z6(IadPqXLbZec0@w+YGO19^^q5i zd`2jjS!#{gFM=I(b*w)d)dH~0c=?mxP51EUS$SF!{=mo?OuJ0}T}m@4I?=lCl%2=c z;?Y;FCpt>daahgg6{L`AO<0p8!)5b2etq9^R=9tYpe4j=RvgkMyG)^g?2TV58sD-+ zV;X8JWoX@n z%F`w#IQ0Qcm-?DbSG3?wT~~4n>yH3lb+6di|DInw3gBF}gA9q_qW>9mPa+YBcvsDFR7Caq!v;-Xq= zE{Nt~CS!_b{bC*K!LAyrh%=KIy*y6qLmrEV=L+;pa?|}-SH`DcE}IY`f$Am4vBFEA z$`2>9(Gp6bt5R~}X(NU~zH7Uu!=~(%2kW!BU>y=08d9W^Ee1-n#oC@>GDjhVQ*A$H zj*`#vLV2=FeV5ZLK|s8XGq@`x;O1k^(VOH-n9!5qFl{bd7#?M^QMsKr;*#&X%FrLZ zGXEfytFv3zl*dimnJbr+7YLTWZ!E7UQlTH|qh+7R%li|z8}!}HdSr7a#TVXwH_W~m zzn^1HCP}@7;xDy`u5^sdG-yBDMQ{m~CnJC-s`nNFkAp(e5MYE4>;h&3T&QDa+%P55 zn~Lwes*xVt$&h&^d06DEVsTYN8Tkm&*`)&9U*S^EM?5W>Mb6J)A*?dIKEe&7bGWko z)-12Ye(2>rE`2K|TEg^t>J zhr{-xJmd-O`+b4UJ+vT?L%ZY9Z#s&*qEp>9b#8yz3* znX<>9=Ki5$T*Y8$zi_*kmRaG4OwV}SkFf?l+_rxg&G_dliGM@$wPzC|FM03R{5~N1 z0jB(HvXc!KYj45;dsNhIXC~7)5VZJAOH&leRCJf2RM};N{TeBsLsG9~x4Bs@;mhon zTN<$RmZpW9GpG;y((T!lsUPSfs`g9A2`PTNop*YEc52u}uYR#XGgWvhRr!mOkxwaM zd_Prc$ly%Ki+gcd-A=aS=>s!OPWbgWRkhD2qs&b@kV59+X9@#iW*Ixjeu5DLc_fG% z`R}zScSy&@*!#3V;piC+q3dJwkUUumS|DSdlTEJe-mWJ^Znjv(qvslqt;A1j!Ji(< zJpxvtJS@^-Yc9o;4fxDaUU2ne?+q8*YjG(}z=BY6ULfybq~%%2o5m9R>Bir$eQL`T zNSrOz2DXt!0}CfX!=+z+vf`<>Pz$3yx-19pmq-$PE{pbh$m~ zjB*&Rx=lVV@2aA7ZrimkSq42mg^kqENtjc-N%E_=D7HMyyJ-;W)2GdzwxQA62(TRZ zqy~?ygnoU(!OmT;py$5Q06yg&>k(Aeu6}((J{jcptm|+RPPjK^R1?X?BQlg8Fu0X~ zbntCU*3O;t&MU5tROT%IA}o->+Ako!`AT|%cxR!rfns3k{w(MooD#!$eDSamL>0Bu z6ZOi8OJm;6+G`dku6Mqk=*+h(n)HzyO&PEE7TQEXv3-q0@_X>UjYx6jthgZd$Z}60 zh-8hmXz@4ioiCgfu}Cjl0)BIk& zn9s(s0K^oi?N-Siy1%F6s7q!Z7>;Eg6#6Vx zt(yB6ZG%UB9#2WUoE65KI_uBm5JS~303M<6)MZ$NqZpnG<2}{%==?3)0&91Iox!H&4Ge#D} zybB&&xyTm$AvM(=XB%Bw$-xH~1e2!^s&PgD%+;!t;%=hL1X@Y=YX1z zg;dEdm_Prhs4pckx1(h7*!(*-XWCl3?;N#KF6;j~xcuW?7A(E|S^JP~q@l?MZInk6 z`tMk$(JWJ<=RO*{01o{ilT+@)wJbmepH1;)f+rN(w;{IVVPg1Y%Q#ET`~NZamSJtK z&DwCGP@ohjP^`EYFBFPHvEoo%6QsC1B)Aoa;u54q3xQDF-HN-r2AAN)KK8etuDy@r zefC<G#2>Wn=n` zF)*XKOjKw6AB1r&qW+Ej;U5Mw>$svlB+rKwjaVK+^wh1j`CHdeB3`LO7ucIsdw~Zz zj_M$7qX{o(?Bn!c#E$o9Ii=~L{h&IW>1l%Erpxf2OR_c`OxQZW1NVF_6K24mLIL;Y z*Bw%y&ON|u)^%Z^H*>w=M?Hq+53}PRQrn^>s2;|ZPnt|jTz#O?6!yO90Lo1R#=~)r zrpkbJdEat$m%Gjt6HOCt?&9Bm94U%%Xc+IuAA(0{3k!Eav`W{1{|>0MC+G+Fa^9sY z#H`ofX|fVRh$H7Y(_fq#nLN9d-A(uQjpR8gS$-O?W2K86eV9 zFGCN$Z2GJZRBKPGEc^We8hLJ>)k1UKuyKW!ztktvF0D&en&fJ{BPVw%_B@gTgS)i# zKURBApg839we=Y>Z#FPmFv~(@XU~3gs+|u=$b?4(+N(PFQx*%g}tv0aM<(M{`Ls+9=%+(9`iTwIb}AT?B5A7nN*?DWpEGw?Q^sNG_lAhhiXp0zopH~ ztkA+?sU1m6ZCn?>U%CrQas+7I1qhyDEyccEDvq7Ra!YqU1eI~?tX_Ty@dbxRIFYkWIh{0!~_Cu$>h02e3;Pb zQ;puN()5PvPn1z6!)dcF6O+}mYeEh49;>Fn9!to_QBMs+rI^BuxL+ivmk!wE)0Kkd+%@xVRk$kKT?qVZ*RF>0v0bkkebZ|Et2!|Bqkan+ZFmg& zn#901Dl5{!M2;YZF>dr^Qzi=2w!EgY5J(FIqph`5T z9l69nAVj4iw3cF*d?&j~@wFj!B+tBbtyhkcGIr>YL0@ZeTt- zMIkd_AWu)MAMj~4`?oWq^?`;@m-c`7Wi7gI_HKV*!~de}|2HCAj_|Xqk{cz=D4Kqb z=rf|hiuLWAH?vA27Y#Qi4|W-l>nJi*xJsN32`oa3zn5w?8@ZsvsZw;i$PM*9x-PP* zWN=Yu+u`c$G1p9A%-!;#5bRf~5F67*)@H9(;i`MlMmDP_^2!_<-c!tutj#zc?8X#P zeBUiN_7ijsqL-OZLlfoc)rH}IhkoEB>caqgk2U;Kmx|`+PSzX>LJR<++GkKera7K- zNG!#tg*Xl|bU%lxbnT3l4{IYT3G~mO0ogRkBEEm5+I!9&*9|C5I(x|IacbULxJwyg zP{@;)-C=l^8){CJoMJmjf<6J$6xW8|-xk>8_5tvEPJ;@3I&czTFsLx4z;t`?Uf?tu zo3+muUD&U`1i}WXe$9#hq_^Wh-qd9AQK`lOLGlya&FhNT>T>ZXmI^|0VM(vLWCqD( z_BP&tWS+yR@H*zouKE*xfp3Oc`4b{-DSDz`K)+}9^INlK&}tECT|3q~kvo+Y?G~Rh z4?y6fRXJ;8Z%qY>H z0_)48*j*mii)xW&waBRtO{sXPfwqqoYIBy7YnwIJ&o%{pD9tVZ{cwTXC>_@vPPeB| zfU(5pRLekK%=vzjf$$WSXiO1Z8n43>uOo!~#2Ur9AvqWR!Fl%5A-q+F+X*g^4TnYAZO*PB93`iFwkZ{>qiRup>BrkP%? zQq@qR(3bGhCj{>X9f8m02MyjNwMi^Gy(_oCj8z=J z(A0ubQijYNR;xU9=QQ{z zZ=CFLV!@5m-k2K*_i~T|x_gEiS8IiukQ}9fY;b4Tg35m*mukfgpow>8Y-7m}8+ofz zMhPZw{b9*`-XQiXU_pdny#wCq$V=|ZE zGuwEP?%y=&^xtD^K;Lh))z+?mcPTc4T?tq^53z9{rz@Wz&h_HD1GQlyRFUv94@pTD zZy}S+(AA-4^bO$;*j_)V#+T9P%IpTLorF@hcBW6wH;MigMvrgsMy5lX;RqrE_Oraq zWzT};Sv7HEzK7U2&--QxPtm`%{5XT(j2eyBefgCThHjAMbHgczBMn&fo!6emrMWzM zwVxnmPX#auQX`c76x%~Vc7EaO<4SDK(W*_dea4csoNW<%>~FFCCr;6DjkunoxOB~$ zE-@y5g4#iny>H{~FC1Z3T~KQGAcv|R5ETGA*5XwEyv?l6y84nYpU!VK@z^QJ@K7bc z&Yc1siABD6huIXmR9ojj=pWZ846#g%IpoqgUp*M}yfhZTPK;P8e*f4l)qOsg;533i z)|Tr&`H+0_OrlTZbKahnG+-A9)E?vuT;$k1NTZkou##$jtGBs5?9Hw`OVcI z2 z-y+dFp67fkIP6L)AKI)E=j|E4)5;6dleFzWomQr$_5zMXT(e96nsmxFZMYbZ8Tfvi z-MJ^$t`e=K0$4m1#&HqY-H81!p=Cgk>8RL1$TeKMpv;;0i)!LJwxt08g4ZG-D|etq zvQ6<_$BSdS;WH-3RmoH%lOI}#h_|Dlje4OugWLmP))i!2M)_TdC9U&6<+1HBGAH0hCDoY@)11ghCm1)I^hPVL$ zt7e(DCi)yeNW?B%l#j~cMxXCP{avKSr3|I}d;sXf@x}Tigf#pU2NV5WYjD)s))rT0 z=5FoH;QPZPyU*NpVsw`kNC-k|?;D?}$dA7fElAOp-RH^TBPd6=Z?rO@LofeFd*uJ& z+UkDegZKKL0gcUwDB2m;&Y$4(?{ldSWQ8HQUXehcc2nX%?`!rhf z>!KVpG|#ZEuNlkjUW6trc3U++(&%9{IQ72_OinzCtiyXe6D?uJIAnQ|EOPRc*c!le zy2|1!dfBC?-hMG5wzvCmQ7Jl{wfohlH+DIqq+O62j`dX|d;=_s9m-qc4xGnw;udjt z@ir2x0<&vL@#V*+7@hIAAsOtX>`UFFKc>B(M8AsIGQcW9`x^n$RSqMSBg-`t z603h=$^ru_k}((l^QMT8T7B7pG3h?QooF1$ZXy>*+)|aVs@((QeHze`@u79+~qtD>QmDs^K%K4V_S(w1gjUhF~|Q&>K%qbU$GQVP$= zn%>}xoLy}@Oqakg?G`vFng;J%4$k+VREkOO)Zn$;u)YHnk?hr~z7`lBb}Rt&-#02F zrCS=%`|!wME72sGcjfTJDlC>e#$YX}yay?ZYsV+EC-N;GeQo`W*K&4}p`dP-Di5E* z%GR=6dt734xB9iyw$rUbqPBW{cQ?G3;%mF|BN4Mjc6PoQz%o|r8ENl35>}Jd63zy{ z-Q`Vi$X7U@91Oy!-eI{7TF5iu&dV#6d3EFlK|y%547%6{*z^3__EETz80$K_S=35Z zSc*qXF3@|{5FkUYT~jX6S2Gwg&>ilVpGZNJN8*$I1m*v2z<>Ao79E4?T!}`#o!g)v z<`c0uUbLXmf^em1gN_e@YU!Z*Ke|_{+y)m#v43biPa_oT&#W7_Oz|oa?&EhN)@MZ~ zXkf;bKyq3u?0Azo|3-*CT&QCZsxHS#1Rq-LYjJMOy_8 za2(WBRD(rC?oGaf>7tk{02P?0y=fa;?lE31M`%50>HS={S8Hi+;wHCQ-GpS*RB>zm%7fZUYEY1ZJM3< z1&C`uqd0Ucn>}OIG)|Tqs;7~YwwHNbD*J>sZs(+7mpX%PE3xI!v6}C!^xS3feCfAA-&hh;FF+P78`zjXqEA}J}x$cGqD4C_@JUKTn zDL#dbdS$8@3p20r6cJ}y@s_`{8BR)SI{#fMGnAe5&JS$Z;)dO-dyu(x z!HuU{p$ySKf6(|G+Ni&jyz zT77o482du=NS_B+bFC(j?6L9xeQr<)o!fXPmqhAzJuJ3B4vkhDBuqCb`0dtNLu-`E zpB^}GTaTjFe(mR{F{b@;;+-~^wzy98-3R-XJqQWYGA3R}M>dSaz;cs_gFR(hVCs~A z?2>7th`!(a*IG?H(Bx)55Wx(w4@UdDULqtFLTGlss#9jFuMhrI!{I;+)t&fI19W&tMmCD0ni} z#?`JT#}B=A3>h21D=DG}&<4^69Z^zz<|FR35E{rW1z*FoAbejl6E&7%pHsvgW+;A< zS%{d4eYM0s9l9tlClvpD%LcDkFRoGU@Q~g|XPO)Gs%m$h#lKi}Z10?Tvz*;{kXShe zbINw-Zoac$i^%c%6ysD-vZ-z`p;S(g<5Yj#<7C$~n)>_v=Vpz&Rv{KSF{pc)Nol_P zk%7nalnsYLFgq^^`qw`uyV9a>_4OJ{K0b{z5HZj@ZS3Xv_rU4TM3!dR71B#JQP~9_ z=V31nerBD12)w)xPClNwi=}rS;?4AG;9WlA5;vs4+a+DenL@gh+i&A%cfUE-uPm35 zIRnOxrq0St927hHU;?*AO7wA>cazoCFS@W<1%lbNhU*D2K4-wa?5-ytMPyPKCUm9P z_G;aAC3wU8ll@Np8N?%$?%WiKz@`+n$+{t6TYBYO9HEHLRs<%!oB0bUek}7;5Z_6f zPm}Xly{)8!A`Xx~L{P!x!!Q72Qv?@C@5&P7w79e-DX6{29%iC*Or8hnA)e!;FDOU| z(InX+;^i>zE0fNPC$VpuV@R30Bi}K|^VCy$#JK%c{aeF^<#c;NZ2H`ABNujsWmQ#eej{ox<7IFojsLY-hA^9yv?mVO5fmw=yoRa z5W+)l(C0w2SYg)^D&Xk%&7YG~2f zp-Jp2s3GclIx7RmT6ZDyYfa#%^0yanvb+o*ii*nBoqgYi=j--to-1BFuzk5D&gp$4 z&tg4B{)M%@b&v9hfo}J#opgo?E(5zP zorZZ>SS8p^Id9%P?iHmoi`jXilPtJJ;sjq1jbWiUkI&JDCRM0b2rxyf80p;ZFcm|? zgodS>Rs6L|#;-T%KqQj-bsWV+LTA4nlDZNCMO;YK03H~9YwRs`7VJ7#I`B~fOCn8X zey>*V{3n@_Xy^dBw-qXzU(XkQ=)Vio8T{6v;Buc%hQBUS1*5aqY0 zv}u$5+P(1il+AI!l5>;okC;zZy~?*6>xmDZ3&iNiPDEk_BkA z;7#)jDP!90+N)!Paa!}rw5R$sjo?ypjafeV_vSig;8CmIn`QwySRx%qbAnNd)=55B zP01{r-ozy>V0>{*`yI97gW)uviUZ7D0|r#)_K4n^;rqm9fG^EI>= zBhAJ&S>2&!xtDZufET~o)q4&$Iws=2_G|xr0ytVCxN*@e$2bu*mD|Y|_1@A5knpI^ zN$oemktQE&DK&QE@08OT%`4T`pb zC#~Gd*&Jt?y1lS7!G^8g94nQLsH}8| zJ$NskT&8YXXVYFcwyOz`OVQlb3Ntx>5H{n|9-qACsfoE)rT^}FTQOwv98ub3pXvEz z+M14KGbwe#$zNaU$*@enTulp=zhMNbh_vDysD_lj^P_m z?Y)H(I6X<>iSK4N9IqBzK&H2TyRF(6i(tNyhz67O&zuG0UYrU{Z)$_YC34>>FE z6Ef#9_A1J}POKQQ4%5HSeLE%BB)X=uDP$VOqlD4?*u596!mRVz;?)IT*kf^%M_fns z$-}0>oz4Km-IYU4WPwrQ~WV#xYY~yYwJ) zIDATR2!NbeFcg zN{U4PrdEYlnoQ<-`z1;)>Hv5*r(Q2iDL<75B zhJJ2)5Ui$uhSr!gt_4lCcKyW9wc%>FUwXry_x@3}90u!o7cpOxECl>yRiD4_BFcc@CpE6-Q77OaEbr&Kh5)~Wq#Y@(ogik5B0@Ah8)v!$1m=+Gc_%xlJ(PI?jm!yth&(0sX zj>nxQh0(^~b~P=%t%lkrL7JO0O}*--3y6+i;(E@gHiKlE_N@DaMIE0F_2_Hvw@6R1 zXI3Y8FI8~Rq%ai%-F!y|)sG3k_p_(x1P&Z_^(Rk{iW@GA!qzD7S4BKu)#&n=La(=9 zHYcJuIOk@)RU6WI_wCtVRkw#El-tQud)ayT-wa&1%Aunw`OU_wCkpVM)90$#XKR4E z!aHWPpz4@)xelh5RROe!??Et4CU2(*fIGTkXAYj^aG&FttM zsTk1tV+T^Faa|#i#|I#}@KA>XbaT@X) zM61d(In3pyS0qxhSDnMa$G@z16^4h2sOxkH{^dvfMaaAC|B zg#3sts5p5G&T5G=xL?!Cb%-rbR~&CmMTl3dNosG-nvn5MYweGBA}pg(@;l$jt~?b6 zk%AA_oKm-u9Q&=G?Zl!G9(MTPHyns;a%@(p9Y^=5nH&Oc5y{FYyIrVM45LTx6@>|a+1-eq+())pGr`~vfDMK zIO?O-cvJZ|Ml-m9?l+CUL;D?htOwO<|ESViag?Z9zP6mObzJ@f{qQ(h>O+8fbLm2` zaPRV|@QnRZ+T_km{(LoF{anefH5x+=Tz-1!7ZXa^83l9}s(#w>7Txbpj&_#p!}T^C zL&Cds1k%p;2Un$4TW=CN;g;LP!U@PCirVj(omYv2L88xB#(mOOEr<41yUj$gzTLNV zdc~9h?6Y-;Wp9?G8+cbx=*+@!Vq`|EWl(r?J@wE!*#gN^iU-c4DVhPQwaG+Ux%M@j z-@hPmBfJ*0LYLm-Rnr^@eyc=KZDIDw(uVQip5K??)_3$9yvf3i8^T)9c5{co;66zL7XMJUuL{#mb|9-RxRX&d#%a z#VkgNE>DThulJg5{{Ala*597`m}5b1a&fvm;;@BzvOj#BZ5FWxd7AF_VgDKR7~K1m z7(-7(+zhg`_em%le7tM=+#qb)ywu}SNva7_p$}ENQzg;4VcsY@;eL0gg5XOgyYvbu z2WD$u#%Y|?z8F?2SRBsFqyI+Q-h|d@_uS~&BuMqia*OYWPPf>q^%*LC%FHEdd6xEO zVRpZ#7^8B?EVt>|8m8asM%WpJe>$F=rL@=dzYsW^7p97!4=z}j)mPQ6hiR74lc#@y zc+Z7y`WQH+GLI*OH7^%`e%#b^e(oDSU0QG=b^gjTs0;-WxjqdoKzZAcGD3PqvuOi4 zjVxIIaTv<}t^(=KM|z!8cHKySk$c}abPoc3)i_xlj?@$#vVXctsWnQfIZAR&@!iW+ zI0`~K)-AKwdqrGxc|>g2lNhJ_>}%#E>+B!Pdr=|}8!Y|~5P66xBm1OxWgdFZ`HiFd zw)As>{mGHDIHmR9wTSwfpdjpu4)dG<^%+H;P>{j-t;n=x6X8<&1%HHEuimEVrj4st zfxJUPh7s zeW|W1A|vD!+RcZ#fk(g$H;=~6!Us<+|VxVz$m(* zoG3>P=g0eIu&0EjiJkbR-Rzgjl1qiJuQ;O5Pb}p@rV4LAfnR*9pR|r^YOySu`6O3o z2FbOiEE6EPH0Ii&)hsoZkCh;oH=Eoj6ZY8Kt(Qx6Nt6I3}nJGH~@4Bu1t}qv{UbAP)Wr)j5#E{cUhL?lT*jD2^+*M(kv^ zO>SY>KzaaUJAz(Zrq`6)yPjsRq7S|FM!0F1nKrZgqNKhl?~2?vMkx5JmhRzl0TW9)Q}w|fd*xb`es<}MtDNvYp^Yd*EoxTE?dH;|b0 z1}O>AH_dXQ^-&w6-;zSxl@I2$Bswo5m44Ac%BP{6w(*fzQ%80LC=GA(32RL=(0q^s zK|hPwajPEni#jXKmEb3$H+s2Pp-H1%v|~>1cSkiwbz28%lhwnYKHszz=Y#VcF25Gv ze+54Zcsm>j%;LgqXG@N<7`4I*_A(2R=9pPE>Uq|oreDqHiW}OKlS<$)2UDrR3~hCF z!YXydG)Q+n*f+7LIJwy%V4qnPiy9eXkpwK%OSSWBA*O6rU&CI)zzQ%R%1ToQKv3{t zt^+N`BEETc`T$#HD5QEN!eWIm>8t0%p@d+)kA+}pE7tG5{S~LobK!?$<5=2|;~7-A zz~RbsgP$md7(D_wS|g|vqI(O*82_^T@hrL!h)0$e)dytsj$B?VYj_Gg@%(R&pCZCTtx&&+Aj5`MVXgZcEyDkr74?ivD!mBu!z6%(T*v~=ZDD?)_ z1u*4*->FFN(LK`vSIJj5+%#zRaU39XP7~M$jp#Q=^3_)!cKuRP{*7LT-t3ZZ()GIW z)qY@yFpECNS`j%O1NbAcsrW~Z{96A8yg^IMkfYj=G20;XkNbIRHX>zhh67K~PxLhv ztPmH3jxQ(=Duf*bT`MMYhcU9bK|%esuDyGDC9BUfUzCJU34d_N>=hQGb3bvh)MyvO zZ1<`cPXTgG6=u+2%l{G)Xxxh4?Da5)n|n)cmd!&kf^GX%!y^E{z9&5OP0R9BGV)Hf z1U1GUgu4E5dXCT!`p(T%KSyo;{POs={J*ckFelPrBLm3gX^W z8FK-Qa#=m$Co}Ice!soqj@&m5LD?UhixC_a*1;+olK|o*nf;KnkB}e1Av@6Agiq2nuS23bm@C z%=p6zlg@Px_M{~98e2RY%)8p zJ-6D+_Q&A`65X|Qot2=vb1N|l!zx!ls;0`(Z}6Lf4f-S>w&WAT*5oiSM>o$iPVyK_ zU&(9}Bs_YyY(n`zHe5#Yuid&8c_U5ve@B+bCtkA{GHj;JlLh+m7A)~aA`GZ+=T$|3 z3i;OxLaRUl9`;fQS<6!RZrwW%eB|G^+4j@Xx}iTXk5=-M z?N(<>)*DM|gKL*P=NSU4s^$nTl7+o0UMH^T(cB^ez~M1~?m|6wtyw!2che}dQGp5u z*gQ#T*tsWq)p)w=9G;(lxUt^RSI?`T;cpjcJDpR(8*~&{FRd_e7eA11VXEBjKc_iZ z@`-iZqCkKI@S~AoE6wLO@51IMIOf`hkoY5=H?Wqfm=A=($6wQXP)XMaMSMmo^b2Kt z1uG-oM9v9jvD>7ON|;M!NzJf7k@?*05LbrsU*Y`!bJMTu$}&BpL>6Mj=lXLxWN({T7395FLu)@I>OB# zU7xOiy)FRlsS_Hdc7>yi-HP3jbWzPjsU##|j zWa78Za zaiB@yPeP!_@8x;N6mT#{xPc9%U64B)BzodcB}_JSFq9F3-h>y8skyvZLvyD@^tpR< zE1e%AhcW8WPMn-zBoy$=T1;t`>-%?WjSNi85wYGcz--dLBFaBI{lf*i%yj%Qb1)A^ zh3pHZC4glWzojppDlP%RM;#F8yzjepUtPnfdlny0)tTPma{}j@Nv(OH!jRE>{U?WR z(%UsGL9>a%^)b#hnT$bPM(G$~=^P24!Yz?7bgtbKX|+!ZU5ll!Ov74h;|{t9g&X|U zYE?>gd>sx~b18+lb1GoCenjm1(YUT!=rySKxvJLcsLbxe;P>RXG4-|b6f5BX(K%W# z=P-{MOq7*6a#4YrkI?XK{jNcX#5anxN^^`BddUUd3KNZP5zi6RbnE%W#frrY2Ab1> zFX%n;or@SlMy@j*057jGMwhd8L{}Bh+;dk&NC)+5i92pAJ+}FSBYMn;B?c~^W9a37 z+xUtV#l;kKfjFVh1c*jI`}=T{sfBFmGwFO>zN5;N{o|gllOeenTjp{-*e^}ik3I8u z$VB)1Hpb57lBco*QiAFPzhe*Ua{me=wja0VZool+MKBKaXm-d7_cI#JL8)w?jipd^vI* zT$RQ)Kilx}*Cw^`zN6eHh4q4%`Y9G1CQ*5#WIg)V9byp{P}nYdR|s0)ouIpU3F7+j zz}==Qz5;(&2{#B;!ETkvpx*y;&6f{e;h!3QVs@@{+>s0N39U3XVw8fvdGipu7DoUJAPr7wH$th znz=YDz|vAk2>mDbf9cN+N^24&)byrF!qB{nf3y4Z*G|7KJ7BmF`q{z{&-R@8&C#Km z>QwMr4}RS)1El!;3q=d4p|S8sh>d2a5xIti*#z)F>w(4lBT)S{Fx9MTS$cgvhdqm_ zuw6t`?ljd&AZ9Q{y*HvvY1XF+MY@TTr=*R>VXD7Za-XZ2>B%6Zme#@A6TXN2JQw8 z+tV6aaF*O;VvKdiO`+B%AhIvi-f}_T5z1Qslo=;+HGsOp1Y5@A4`R_+=&bcilmrRT z+jFu_>;*M$IX7t<7W1&YB26EkC|T+~*n1-tSxpYH@6r1MW8{%{Xo?{rJw)sMfyy>{ zT+Ce(Qgua?^YuY2@1OCKgUwg*a?y&)A<_L`Tx{zbnRm=g$Z;3}YhfjSdtRCN$Z3p= zx+yG!TY8JA1B_a~KS>FryvstMH=#P6S;e$7kzRZAET@_2r&>!DFUpk6V|k|b2sY|1 zar5@e7eO)mn>Cp@J_uU+xbJ|#73It@&z&m5+2C$J@1;`-wnqD&Ak-M7%sy?U z2~AwQ(~Emb6mdXyq7lfxexE2Kn5q!>W~lbGH63>dNlU$A*-V`ZvzI&9Ms89zVmVp9{y8e*4|lntadacLUOrSQY;3i0li z&e}8%h?ka`A_9C&hgl7;+~*)c9ILN@rX4Qw)di8^ZpD z+-=ZVYky;#eP(ZvfSD4&UhCEpZzkzWpRp1~z^2KxuTedWcwmM4#WsUg&T^Gl?A7lF z+4e`TM5Zg!qo(m;61fH|%!34xBNSGNJ?Uo?#MZDO&HR|nIBRpq9;@s32YU?ENq>8Y z0juQk>x>7OL`V`ZaFOvP*XCIq~n^ zbgqkL@1i-9AhO%#1T3L7&WOY4k5iPBomoSr#p>GQ zymJ?1V%5NEBloq#C9{el5AYe1wmrXM%_EI774V)J{#tn5I_7)|4 z`GPUXH}cT5D(jkJ-4BhMVn2K@w_0jSn@_UYp6hqqYKkd;w`Jer&Plrc806{*po{4Y zAPoqPdYScbUGQK-wEh`KBaQ-?{pqiG`+q}1o_JyeUv#pIF)P@k z>oxmcm0Vco@#|Yz-fKA5s~Ym!T4qifq@{Lw(XLL$TuZWeJUzjA~SeW=E@-*N!GA z$YV;}{UwOj46F~_|p=xuzn<)_yH4Ua`MWFMdR<=1BmZcKV6;?1)~I`IqbB@FQ=C__LPAKJ5b z5%s97Nbc}4+0u)u#C!7=X4j>Xq0a&Z1fSJO23g@>qVq*pMd!0M!tH91>=Xj zz!plo=!`dp5KcJSl~kgkgbu~*!;id%r+P%Ij2pHsvC56hu>XN2F+hoXwgVp^vq_7Z zWW<2>!g9_kP@V3r5a-MXIGe|^CIdYToZ5pzt^;~XU5}#kK5)Sq+?dO`R+3&5ecR;& z?P&HTr=uWY5+6H2^WkRoUO>{EGSH|Qco|+UZte;F(_UAjhVRUdNw&u2%o$A!M4TnmvvZ1 z#yJKxn>5EEkgQDual}k?gxBW!mRPsO)9ieAuKTWVl5eT=yg`@Qi#vYpt$npzZFE7U zf2gNNP^gU?chi&;2G!Ae{+K?bqwDk zn(bbF3BsM*y>Hnh?H9%bSoZ7B*D zmt!{XBlxGGt5^FaeK)M^){6DJlpM<=4b^w=SS)KHI|dj70xQO4XG4Rll$>tRKH9=GAC4*L}&ET84 zgKDQ!P4uz_32nBybJ7rCCU@IZ3!hmwX~?0mBJm)qQI2^g@73J-({`chm*99(cPTyk zIUw#7C{%tLK~LleKRqLO^P<4mEV)ku8n2e(KmXI+XnizjSObA0kth_A#;rxp@2mBB z4#-L-j^SUwdgq9p_?pU5Y#mu?WL)y@Gq?=*U#x(kgkc>`fK-k#{B-`J$>2fR`gYbI z0L2>vb@Ie-<0^C1@7u9=STqY+bQO?IPe(26@nTYJ=@5Boe3Y2#P$`Os$C%gDKEsnq z+gob7ao=wc{VgbH-DqBc7t7wrqY+O3-;DDA5j`JsCI$Y;E0)s&-I5V@Q@-=mxgI$y zW~SA%6CvxgBt^9HI;~}R)V0qh-W2sTQ)V`FYkG<`&t>^NFa#1}Jsvq2C0dgN~Uxm`9Z zBNHMn&LVn}j-R#04IFy5fv0)6CSc4B^2ZJ8!Pjpw6<37IF`1l!yB%k9Ff;LMhxqsR ztGx!o4**cyXf^5_;ZkGqT+pSwcJi{K4eGy~e}ureis23V=vyD~C4ff7Yx=%Mbg?31 z*R@~Ss@5~{Kq~@9$G%)XRf3A6c}<{s10syvQ>_o*3(sOduD=J*yo~lx0^7@Yr)HcD z?R$#eqX_~Y78vp#=TL=aw>b(s{trF(e*qh>S4fh;&7V>)6Akx_nFDt5*N&t$7MEIt zi6X9`ZrnA{MXr?H;f@cdIyV!O@tB^YbctXO&)DYFG>HwV%LG|X4kF*exZtEI-BS9V zT)GFhnF;6pzpoLMxNA9>9!qFI7%Y1o6R&b0` zRxRJW7>)&&7(Rtw&9bG}r0pI8BQY2s*~hP6hxqJ{7KN*thOpO8I=^`9w{^Yd=yMI3 zvYB>Vdw+1-Xx$SN-TN@_fTY6@LWQX_)5_r^Qa?=y#ELUX&$F~Evn0P|3_Eq_Vi0xA zB5M{HN}gsMZ~??0oRt{|G>O+**7@-m8LWBjp^s(eqWloho~P# zdF~Tydwe{Kv;3P8CTn|hI(=W^`kc3A9?zq024Me?oWpxc;z zc0{_dDXRPsRyFpiFwV@LzPf&4mpav35Yl{ZIY03Qd@S($*O!_c#lZu+K4@O$kC=&= zXxWO#natRtK$T4X4YKDBO2}1d#*uxeET=_hTB+td3{pl@{I%SX_k|#MdXTZb;Q1c) zH^|@@azIP8p@0*$yHH!AVB$BHHub|L{_LYrulkTFtIC5{M29~`#k?8z-(mPpM+o7M zONq;<#b8^bw_*xdO^nM9xSwu3WXvqiGbR9LAok5R9KM?|`?nh@Vneug=IqCW&((fI z*0ZxkR`U`Ic!xWA;qU?#Mz=Go8h_#WVs$o}HPvX8J|egJtx- z7V`pge3pcpC#J6{sI`0J66ZZ6`F7L-9Qw}n#IH1g>m*MAveFvMF1tTnl>XvOJ<|NL zs+53KV?>YPYnzw4I-l=-#>F(95S9c%ThN?T=7E(3@ z>;F~6`LDEWKB@s*wcrbA5t9a%Do@4NZxD|bYFXAvn-+HQAF$$i#idwL4Q%09rAhT4 zp`pi6R|*#Dab*$7FNlGMJm=It?_1wHTUeL{cNbxBunLdeSwQ|I&B)4fS7Ue_5Z3)$Ny^v$ z@B+485^R!OP0Ltd1^Db3Ln%|;!NC;Qm1JbCpVH;H+yG!|buzhavPAFJWKhBI#Ewgh z7zqILlEy-QY#MBbNOzQ$jA4teOv@#w1ashrP`>BdHJ1?jBElWL;mDakjmP4;QbgJH zlWG_McC;uaeYa^SYG#YNlle_pA`VZm2d0^^BvQDI$h5LbEW|`myX_ zty2M-7H&C~O1@6^Z1O=`r@@M;)jAcS40ecISE^h(ADTP^yILdfTC0TME7dWTONh|N zm)WAHdphk)T|Nj87HuMG)5j8XiV~&*P3l56)&{}GwL1t1dIxF@V#SvH-6cJ z=D&%$Et4B_#`Q55V`3=(w#y|bo#A`^K$pPvui$#WEwGU@UdvHP-Cq#}W3_S6K@SFf z8Zu{_9l?~ibo4Oa`Uo87U9nIveNY;-yC2#k8&*=8iG`UD!fP{((j^r$h_0k@&%}3# z=Px}@(1AZ%Eu~K%7%gO6v104Yul=3S{s+SMM`G7VI&TRVavmuBq{MH*hA%inD;^ei zkN^N2NwZa98B-2yYgr730j86G?ne6>>JXJf){MaO65?D(@*V?kowapYUrF65rSH4S zQs^iCIty`()o2W(HMS0OHWQ0h_P%_+(^*K6aOuWm;M)H1+==80k=qpp z+G$4_A#A?gqjy9eU%8ls^BvH+At_4ZDvr;4a4Tx5g{_JxGX;MWCk}drNb39>t>H&$ z1InTRwLLrH;h}b~)Qb{G-)s^UfP_SaHX)U#|0JTh17*Hcu3t_L1uZm#p$JX0`IXdmF{B-uw_6Pza%juje3-hVD>nsN|8|RQc5PVfY zg)etH!gh{4dwI*bEX(Z&U)dSv#Op%mJ}CaeO;@}Qq=e0!sqw6T#kGEb|K5R5kAjUa z<(8|q+GnYFh$gZaG*k)-U)E1Rv7NorNj?()W!L{Pt~rIFkQ`829+`>BvlR-)5Avc` z$3&yz$TBZ54J$4XgAA(cw2?8VrRnZi2j8{02!~Q9`uqs&Z8^57hNWsvD>j+)xEShP zaL#SZS5j8n+#rNbLRp1m=g2zByH>DG?NSktCD*0jYIZ2s@)6R-4Ft40^EKB7e+z*+ z2C#;t(x{M#vQvMfi5`sDuoGQ?%Z+P$o-rNx;liyUX=-(R2A{Z1`|}sfAQ)bBuLEZ% z2Yp~LC753_2Or+|RLk`?1A5aUpX;jC^0k}EEwU@)c3N86Z2w;6o10Da zo;pp#*Oy1|k5-A5HM{sn?=!P|HxPJy-s~{_qJD258u3&wcNhJMXheoV2ROM_6H2Au z*wa3@X32Ib7w7C;qVp-O?GWE^ql&rEYpDHr?Mul|Cz@}sQ@9&7V|Y8=t|^Jdg))l(L$u3I9xPDEnmQx8kx}Gz9z2$f0h3 zJ#MVEyCd3rb&V`k>*;X>u(Y@K=Wo*o+emCRXm9;kb}i4Z`(M~{6b)hKG(l}irtBuD zf5xKB0lyP2XxeGc{y9A;cZ`b8;wA-qGsE0Zja==gyIgdAO(gcnt3s{4I+Uh>dTE0E z8~U>%`B$zsEl|fGbkCyjw0>#JzK@y|Eu~om zbi7qbKOC{b1dy#ORfT;^F>M>Z_H73)JsxAOn>{}PhLZ4Aj+?aW2HVR`P8}Q^HsW8l zTrQJqo_}PBY{Esj8oyV-Pr2l7C~7&M;Gk-uQ>L~!%V4I&wN4K_0>yp|5MjPV4o7K_ zVO%qt471X76s}!?&K)xHxT5mhKQuX-I9g_t{!GM7(cqIw+qi*UHXc$Kk<@z5N~Ums zM6lez(f)bjezm#?jT!JF7e1{J$}8u1y8?n8kUk*la;7(Slv&R<-O7rt;TYxt=RJ{f zV1THfU0DCl!&k{sc3t*oOttK}Iu2QTpNnf&;0{LK4~{-A1M!jJQc(F4Uz8M;ySHU( zdp}C4Yn^Q7#)rL_ETAF}5BH7-$U^tEvQTu(T;EQ9jM%!5y#YVg;tNX<{cAZD$WMs= z{UiUDcm3b~^@{b~6-@Fwx_3wx9RLO&w}b#(HSE(K?g9g^eamjv!Y$o3Y4uq06iqXU zMy>}IUA7i?mkSQCE~np__7f4)j(nZ>eNti`rIPD^#PnUwme{gm&uMFuO> zse_*OI7B|biug8hqzYC5t?3%o331n|3yeO*!6MkMZXQ}ktp+oj$Yjo

)3-fhY*> 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 MH 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

c&>rc=P$J68Q#x~gA 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,CY0z|1UQ5VF|BPC|hghT@d|SAZ&zpd!ohR zNncl=W7JvW%kRa$=z|d&sG?~Z$Fj9oFS zwu&#msLm1FSvAAWl){l5rw$CitL$z`;zUWigy`4FERE@N;-osaK8$@-Y&MVp!lW>q zU70!KNB9ucf6AOljF6s|HzTK&>n?RAj;duY-tO_xkSM5)L=Kt`LAGws-XGJ1mSkR( z7Ym8(M}O+;7MdpJkWGGiB2Ykrr%G~T(V)^N;>%e2NA+>!dXEJ711lHzwbH}Hf;!IL z8_$`J7FQXlYW*8E-bO!on-Y@>OWsK_2D66}`!7`m!%T>;|B{TQD_~b#JQ2~ksT!+L z$+<2cLlwFPUn+|)4Ake?UKzNY36CNg2}ad2(}^s{avXS+zsr>XVbI z<^oikCbgtb#28%PY~1SsyLckeVZ7lfZ=>muMJ355P5P@)Sr7fnW!1M7uxh`b^zj)~ zK_BjC(0u_v@2~VItug`nF?=a5`kIY@ET?Ue0W@^#g~lY|viJwCqNi(7iri30nst2| zFOgMfa`Fo>=`#o?ND3pr$pW+GUoh6w^k}-$koQYv_!_kqEA^;`Mpvn*g4%CFHB`^* zW9Hz`rjHu5%l|(aC^kSX56ArV8P@R@lIwgq05Gmu;4WL+Tzg-sZASPyXOlP$k(Lhg+rss+CHw^P_sSBsTS003uUHa_4Ck+lR zu5v%uAGGCQO&UT=CwVOJn|xyd}=_W4->+9LB07Hj^|;1*nGLi z`x4r5CrfpMg;iK*nwNKV`}#+iMg#IRqWI-$Qs3iqJduEhN>Z!V-}SbiBJuVF8pI<$ za9)h2;1^3NF>ZnwD}sA4@co6T&RvDE3B7X5d)-`Bh3fT(pseS$8%^jz@A1yPt6;I` z=l*yvcokM|GO5f3{>$`PP*43`y=HBf{5be~PKtf2I#J|tVgMB+aFzPejL(35s$lj@cxZwbt-ryLN zler56|KoqZi$yRT*%F)+dR6^zvG)eZ{3I;e-4Qp{hfA)ZDMS7g8@WEkSNVW{*yoS~ z=rR`yzFy_hJ?uUE_*F2L>pRK{KMQyjD_Dl*m>7ea?0rdVFMO`+1zJ&SzU}Al=hltq z2f0?~7>L^@_4xO&X{tGP-wf&~vVVe_E=)6TSRtykKJsIMI^pAC7zhq6WHLH;d_5iA z8Ri=qzZy^mR5WsgI-L*W=}75#=#mwPu3z^!CWSD zBmIFv)Eg|l)~A#P%F zu^}1~FQb`0q9I7nqmzl8tca4V=t3vDk{SXZ1jFdlpdH=I;+)ddq`IOGkFUX!MBRMY zC387S5TVH}LymGUtbHTqnG!m#`0I}%C8jfq_cMx%yBy@z;NgRhinXa{*}xbBLd(+n zdRLmVF%cfdY7lzpvkMCnXsO!0gs)u)P|UX9nx8_w*7Wb`EI^-b!!M#X%bP?XkGs<5 z7?xcUVWu17>SgcSW=mJ)mlo5ho-eV4#ig~O<@+X)LJuE%ma=z3ni~68>C|Zxb?I4l zH=uJNPEX-bZuOsC-2WX6{yfG6Ks05whSz`I^^v~9Fb2?!p>lVs+XwS+aCdGgPP02# z4?X66fhq%={;gvAvK-dJXc&mc%uy&beFW1sbY3Wnl{JZ8_D^PW=~|&>ttA$ZQBidr zhhvQveN>53I=y?~^Bzwr!*Yi^3&Nz`azV4+CsHBGu&uj$-wW?t%!n zjO7;+AEuOsj-RyPPUbuWLf^Yc+t-b=v5H{2yNRNOGu2aEc?OMa8Jka9sZYv_k|%39 zIfnDZ31w<)yB**c9DRqHcs&Q8WK~g{mc7l1gmz~$nQ!E|xP0PW_Jt3;zUtI3Dtkb1 z+1zw{oN#Npz}lA32nrF_+9IhNQJ}ZTI}BbzctYetR1_$|7j$g#5Yo+15=>XELvue; z1j|zusR90`3Z46rsaW=VQvcZrA=He3(d*;6f1)(0r@G-QTWeyDu#ti7Pqf|UW-jyt z_Pr|xX29w(!Q+tsQ`TZ?2xs+nT#oH(C#>ek301V0f&034smbNqTDx5Z$LwKgFw{Pn zDmR_keWW&OZsk?{`2H)LsF^6))>~uh1%1?Z&*!`(Eu% zwVB>wL|>PbS9zSy137R?;9Rf|50@75IOY)}$t$c>qhDxq%Hex;!atX;;mC@9Yh9V~ znPvVtk7H!{3fSY0;Cu-yS)h9pRwoCwQ@MlG=UShs&I%{W&$az!9$3zM`j$r{6j&9V>Qby4M8bz7aQQ$kbeFh8ykb_z%K^sMfVg4FZ&hc0XN9 zDrowqVB!L&qZAzc<0@BL)nj+Lx~pEG%y#1M?2`w+uI5u-Q)Oi0sAc>!>j(bChtAx} z8dC-j+P~Mz6g-R)O<0+5VIpVJQIdo2i5{Efq^;{UqzBDU#M&lnuUZ(+-{0_jZ*+Qg zmNBVB0n?TcCEJAPy^Q5Xr3#$z(cFRG@B+TNn9Oi|jFFF}LBg*AUwHPY%<9}ygwhs6 z0>KrWj+=SV;hht$gZIO3pqNdsmUFdcFqiG|`87d0m^f90d69L!JAC->0m8}l!X!$!NW)ED7h*dG0g?VH$@w{i1; z$U$BpXr+c}-uptA{Ya1R^o)MSW8spktKu@{Ax2T;cR7t+o3Hn|x6vetFDX<6nr-NUD&kzN{Za`RwXIIm(R2sRuMdc- zHCR5;oY7D;IjqL-I9&4?)_+EkF*k65o=~a}l3S(dxxitEJtQDVVylic^%IV93HvG9 z(=OutXHU^$-CbFf8PLzdgUD1Mta!U3w0_AyHl7Ytghv7zX z0C7)YY@c~<+kr!@-mCQ+A{_G!wl3cF2ac~pp`>RF2=VG4yp;pcsb$ZWeG1?20i@_p zx=V+&9qj+O*}?-@Xf>$2QLR|h62R3Rq(&d2oDEN?RIzNoElm%Ie3Ecb`X0|N_;DG_ z@;<2^UbsvJREVt28~vPQ~YTVD5eyG;^PFAynUaf)QlOQJO*>p!`5G}GY6r`-F##~q~{D=DgOf6t=V zkkx3#*nA@AhV{;5cWMfI4k%q2@<)-A`zGo<(( zJ)8Of?U%BBwftdo<9u!O2)RR}vt-J&Z0ZxVe`*gt8YuVaeySR0%gfA3 z*645P0POsvhuK_ljPpl?G3(PZxq)-));se&*vnc&5z}?i9f2Y;kQOAL^d;k~2}Rd^ zkj&jaU|nA8V+Yr)U<^_Pp=_Yu$)l=)K@oGj|KC1R+Q*I`GnkyVTR9ELf9~25A<*o# zQz%%}O34NtZe^}aRSvj}X)L#{6SebaQkxbF!nSM8l7=tG!T`|o7)a%0@$Gr)qQ~og zt=?ous?kY;`gd$`u~e1AR&R*5Exwc2hw%Y4QtL3+6YO@SJ%z^f@lf!nu0m+0&76g&Jb$cpnlwB=GS#GfB#T08A=T9SGq0B<0X!J zD_{dhnID0V1Py09Zrok`mp)VDd?DoQxOdD>f6tIa#JI)VHDzqjoW0eqUEe&l$L?!V z4;S2*kq<%C!NC%8a<2#<>m?{oaS#|z-WddFMC z{fwW?koJz0S|o~7eUmxrKzu4-2*t}a#-Y4eyz@rK#5opW>8s{UruP{ei98Lnrv$Ag z@7zW;n7K!-r%-%O7?j8|-1=}LMmM`g@um3>XAsI?EYbaWGP^)13yM^|zvb=vISz0n zR5(_da6@Ee>w2SFJd7WBtcW5sTJc-~02q^QB-EKGw>4O_yi&w7YB0j|b`q5X4yJ^w zXKdjsPHHvGr*EZgZm=;d5L)e}6PkuwfyHf9CP`3sLt;;O~dh36pTS zM8-nJyQx1k$<-GP7_(eiG4-bD7=hv4KSKlDiF&F&Wn+CmETCZ&82MDpxS zcud%gTQB6@#{MJZae8Ti-?ihS&iix`^0tX&b9^3=Ul7JKDpM7_qC@bU?`oyK9`z6H z`Y=4wM3_9@{winzTi1JAmEb+H3=|v1bG1Mq3VU$Eu+%hEAjSwskbt51P$Kn5-N4SH z1eNk{vmL-#5R&V|v`YGRNh%InE=t&WwEyn>p<+Sf?g;eU2)vAO=(fIL^FGnr{O-Qt zihF|ab`NW^`Es7y>@Es53i}sJ`LrGc>8N>P1rCvt{_0YZqC|3yR{s3-^mJOp;*F>| z@)mbth5PppiZq9uwbLW#S^C|dZbB61`g?q|b16)BhdA*v;{njY>H2i7t z>ZN+aV+Yl3f>Ud)MEFJPuExsW{o(%YRrrqu1W>nWVE(?X1&j1{4WYgDkUn<-Z>tMLsc-`fh zav8IS%6538grDt;Ok%Ks_18RoIy)*`R^;A1#G;J-P6Z?>_*E`r?6S)GPcgh#qsXrS z!vbaWdA%pqW`b#i4PXgR_cRNHT&m+d09pt0%SE4#%paee5e<*c`B_*$#s%S{Kx&o3 z>fc63214d)9X1F9@DV<;2L41ksrB-47di1OxQ~^Wy-b-~qPHlCJy43588XQjL-GhP zUkRxHEUGHic{1s`DKC^v$aUje4QEvlRTaXL3ZwZCabXlG3ahAP1*`l{j=^i4MI*M2!FwjVp3zBTqvg8s5zw*F93h=mql> zL`~_a?9{zM<-Y?lYS<(UJ@u@pZczn(;M8vqqMkKc1vfI*A|ao7&k{gsr8;=UBV)2B10 ztsnGxueKK$qM&IXL$w4^M-m#l2-$ zwW4^i@= zUj=JBRocyETb+EZOUN?#Zq1(#vy4s1{pG^}!G|N)6I0q9Z+8T(#wQ}`tz#*2u?rSf z0d|DSa5H!At8sNK`G|k}3r3(h0%PYd>Pxy@!o^v=3~jG=dd(t1;LDx=^J+~8;UPmc zf_;37>eSAJ#m5gG{ar6C?jp{9tA0m-%>(8<;fEfyRpsaYwOak`?!HB+#lEHb`B^EN ztJl*hA;h{TSEIGN{Ek?E=r5_0F1VfcOjx3rb2|50WgQE&^sYOErPZz9jW_gLc=f zjC|5KGWI(3xL4+oVba%x2uk2Mj{t|mb-7DM z{JrXT`-YKS%iA^aA@AMO&q;HDfyI)ccatUL-2J=}{F)7JiXr5J2UZL3&-Nn5azT(lI;dl7dJ^s!srDtl-5mxhZ+9bsHFC*Rl6n&js8<}QDr(gu84*YZ+@GFlDw3XXN+J=e?cb?^0K_bAtEM5CY+T_EG_2EZhoA zvB$$z^#CmyF;20yr^B%wplY~|^O#_R?tDUp1rmdp*JmeC!W6gTw^3c&Xf;^N)Sz3( z<5cD9qCHFv&93x*?D8e(Y;sKMFn$d|n91wfB4sfUb>!-JcP`TNt#UdAy2eipDVvE$!yK$@wii;8Un3?%|0Jhkmxqse;)T+Wgr1JC$&60 z+$eMIpU#Wh)KxDUA4z1=&n)lKupd=-z$`-Hic9>lCC?jE0^}_&PF_EMSz<<3dt9C+ z_PqLbsy;OG8XerAq3qtav8JqbcwRqyM)AXXB{p_}%@y*RbFrK;b9*xcSi7m?h4g&6 z*R|Z?A;GrR{LO89-RbeXk(-J=srOX%)5T}C$nH=GFjQi|sMRK>YbUtjtTFgqn-&*( zcW>X!^zw9`jj>oz<7EDK<9Z3ejgE@} z(7_R-_1-in`>q;IjKF?E0d74_$+(5A%7lnlr+?e~m?5-6z6v)k|IVua4Os`IAB0|y z#&RV+GL#xqsRSIY477!}hkUV4R{3oDs+-{b{t80yQnN|h_kxrrANfrZ?PC$=Gr1j_ z(0u;1c(6>ZysNX!?=okm-CA?V7Q3gv8Qw;d4ccOfzuh~-Lt0;@*Rs;z|M?~$IvwyH;4?cqz`kR?U9;fl1SuFU=U=-2_+#LC#9PeXw^?=(o+};a%7}Lf;tCu<>IuE>7T8-p+ivd5ode21JJ3FiC z6vi!J`snIjzzcg!3q4xC)%ac|`6J1;&BSoN?kWrQw71xt3SM}kX*R883oKqsdsS0Y zQ=e5BJx0Df)x6;p9+ytc4kiJkN``J;Z_1Q?k+yG;yw~)=-)lS`$8a*p)6ECG$HIhc zZ&w*F^lh^LNb0s!s*1IFYs#>oZB?9z!_-s;IJE8IK+G94B)cNbG^cm4M%E>--raAe zZ;!%nxRs!{#b*1B$$C91NH+Mfwj zLMQ@Y4K9AaDH{Dy9d2#J!f@3E#wQ;B(vzmfISZkvhIcJ95$a^5sr+Rm<>v! zOU&p}4KGFuxE|XlpNmg)8SFd`)IDAG8r-s9mcVa<2#>f=tNj_%c~jVx2`@8oe&e6c z!45#}GWap86aw*oJ6`KBh75dkQa70rJ(ch6r)np0QPc75@IJiK%l}!TeSVge#85gCW0mWt&O5Zh+CcNyEtmx$4O0gn zoaEytvr;O(mZ+hq_1E`hHq|p>Sr+IyyzPnOk0YbPWLUFWb@iR+CroM|_4CW`onH$p z)2n25i)?mdt4{W_1QA7(S3Z`8KgTgJ5D*S^XI%kqU$zXD4F{E=FgG})pZ+EqZO=8n z`+FrM^2x=Eg6FEZ9vdsc_FQMYC)^L=mAieCzX^OZStI#fH%I0q&zRUa6 zbFI1|f5z3#)_L~sRKN^kHyXQQn0d`1Dl4^}1d~$YrwS@TveGT$*LY%AB=q__$8fJN zlNrlY(n~(TaTY)KlHxb@xuJnPXjg8JXQNp*)@9wG%)n~>D3zho<*a=C=260Pq2@5{ z82LpW7MYYtPDh#7^hJ;=cYd`HO_koi?Xo%ezWHYL%9M}fzf%0C$xU*?cvvoaH6XdK zJB7WCvT2-@)6Z+4Goh+hDk&O4CpeW#^@gNiy{na)2K7 zKw~?_w7(tc>t6?xBTvpvEBa>Bp}u&a;9=vwHqCv95S@>k+hSFSMtG+eoy^eT?ncJ# zogVsNBIMS=1K44Z+I9ISQ2ee9^eC`6mRld^vkMCBv4`BXfX+N6DYys}WxANo-Ly4_ z>=UBQ%h$i1l$rdp+*xygSVCAp_x=#C+5xcv>-dmzckIP}XVRCaCD142_qfgXm?p_W zd`WHq?3}Fk2b<;hkAq82Cp)@!T*DtKn+TgRoFVUlXJlL zI2S)s3N|C!RRTsUjocew(WBGfH4jA`SBtb-^DXOF))9AS>J`l09D3rS5s`e60Y#Sh5@qy+WOKJ^0lFl-xaS0f zg~DY|3!y}Gm=1k{kovz0+YR-htv1`OrMn29Ao&|0*Au)g5`&#pU2P|li2$o=5qo@|$}Tr2my1%00*|9ee9qw`DvzR!=N@ESxM1vl|jZjKa@e=e!j z$I4?xv&Mb_qL{P3VonV|=uYc)?yb>$7ET_zzxHq-iKY1+|nM(F6QYkG}L06<~ zh+ZROYRtDLv$fIQ(>$SNS|%nqtjj?{BS$AwTo-3hjhv6IT<+9tGjYp+(M%`L!%N7t4AZmaaqhNeIJC^UWj=r&KG~5rr#&n@GP3GqKBKPE!el*m z{>FGk{hpM|VB{D>Oq^T)1%9aRoFU&Ye^O1`)I$>Y5-_PBimZ-z;xY+QfF-fNCko(U zSS?!8H?Pns_|A!@=NvT~lqtQZ!_$Pz>Q;9&#rVMwR3Wo*Q1ZEZ zof+T=wiP$koJaxg{Ami=b2<9L=lS%pnNF+0514x;B>PgpmtEXcuI7`5p=T+W>NRo2 zJ8=`Nu>GpiQt(OLz_LT!e*|^sdu_8C%AzUg3nYW$GEVXGGUlK(MZpLx2@|o*X{vwentvGv zMkb1#caGDyLhD%q?7+r)T=tD7pOJiD6jX-A*B>}D=e>WQ&0$pVUyRJ=GH#5-e%q(} z#B%ojkz|$o$Sy^~{9Fn(8TDDP`6V&NUQkt9Cv(ANw@@S9?7Qvu^kEsYd*H$R&*bDrU~8HY$SU(} zrDN<9@$%TJ-wj_z9?}1_+bj*38zKEr^>u%dsTK0wE2_mt;=x|3Rwjj=IU^m!i#1%C z?*lQ>(QQgoOYNpca@t3!Zf9Ns6VB@wsS|qHUtQ$!29-vf>hoCJ0!~bUq(nTm4zj8> zx$X~NqOTcTje#ZFU1j@eeP8Tnu!Y?etpKc9aEDakeO%hE1e`_q|**-H~_uV5q(1ZCMu z0oBm^-+CUWb<%ND@%^@7Ke`k0sb4XZLliSifMq*@RAQc5|AEf>(nT1Ugo*ZI&UEAF zWlH<9zFl~8-4^>Gtdp%3WzAjQ>Jo9}y}fDCsA0Dqy45mwWknHfKVl6z-}ocJtiA`7 z1}MYzf384gT^KV?y$UW{+gn;giN%$7v~N^`wUb}Q{o=`kPkpe^coaz?8umD>W5_Os z>5BfhXskaeiv&X0rFcOOiupm6jPON{upo9FWf{9+W2vQy{;u|ufQZzuL9!IlL$6Od z3OgCKj`}ZN6h{1bFXr(E(xS@$24O5VH**`Di6-f6^0P$U{4oXvk(;O zaZ;`68C@j_@XQUX66$oZczP6cF6Jl<26EY5%7MxF2)JO;a!)vQRg9_T?%CW(GOz&4 zv2}pbuh|E(GMCc>bjpuo%qM${5$dtSCW!ev^va@|W93>jktjqv2=GQmGGnLAdcxQ$HGb4)TV1(QBBzzJqg;@6(c zA1V}qFh$mowopRtd`m8)Smm$X05jRt6Pb%iB=Tby%-k{ZbA{&2Z;Ejxprgz47ncr* zyXWJ^P-Av#(kpYE{9K9M(d(H~X0g0~$Cw_SftNmLOuS`$EH2mnWo%603_P_gPfh__9C~nrEZY16=nu!c=d)v5-|MSqKy$DF*$fp#bt3 z80_ZP%->E*H$8&9BtsfgMl8Z_zHAs-(aU=GOiJe`5VmmJVcP(WW)7E6w?1-R_6OYs zb%4x;eg2RWuJIiAcP#ok6U_sRhCN)2pqwC#Waw}&pORRe*DJ9N57CITYRl4NfhXC* z7E4Ay%k0+XZ9eX`YaAj)cKRIDE#B*C-dlO8<-m?GcTvEWRuaz9aJ%t`>Es&NH164D zlbqEn#*SI50)N1~ZFfj9XW^W*JwD_OJLYW=G!AlNSHD!8{@HT!w!KK+czmHbYcT5S zlX9Hm(Vofh@+ww|t+q^CW+6tiiT)pr?k5~Hh6e?jBxPi4;&(SMufd4=qR3In1as65 zyEQ6CK`qCzWxB<-6sHLIO<2jq5oec|Cq<>^5#Q?dEx9d*0&Jb_QC$v=_F^4e8y-LT z`bJvu(cSlU!C!Z@2_m~GF1GMtO9&Uz*&U79z4?sQ%}bqK8oC|QEh5Ovdsba8X*L$A zZjL(>7O|WybzYTRW7-g3_p?D`DXGktQoLrAAAzJU6bpYIM-Uz`hTS5EEm{_zVvf?2 zOF67PfG%BcyIDVBu$8kJ_&-?yXx>6FSQzx3SnUTX9)9+6$(ukD5G}P2SV)e&r=%O_c3FfIi`qh|D<u=#}}X!3DuFNjN1gb!kpcBq@J_B3RVCKO-OUIp8Bp3yin z`1760B^DORor@lsGZv8%i>jW98O#>48jp%8GG{jd7PGk&Vvu1AhxpRay`7SADlL|c zr_Hw$IaLZZoh)Yt6P4^!L&CGtVSj5=(NdyG1!PHjVIs3g(NY zMv~UmX8(I~@0Am>t}?lnE#LMD-R|#WSBsfWRLEvsi!x5DuW%yy0ixmclK<_9x+TM) zlwGQYUFxxxS_s-_503xpZ*rzl9Uit0*HHDONAf+++|)XHH~bd00J0 zJu3Srf7aoPV6aYbrB@5i_Iq@vP?N|XHEO)e$01hub%M{s%=WF?Pg0$JSg>hWGKC6L znKUF%M$^-paFOp&Ob`9nT>K`5=SKK17m6Oq&-8C{qL)g3s?}!7BWg{Ok=7>JaPMxN z9nbyj?$0I}&21~_BjGtgPsw&x*-@}eGWBFh$=kCliFC5m3}Ad23s3#ocTjTmgD7zP z{JPK%;|ysv)y+L$J5CWKR@Ezp7uA{Kr<-qR`8&X7v@C1f+MVDzi#$2CY>u-)fbQ~S zh_W?|d28kVE?!gOVthP07ptu}u;kkdXEkD* z&mw0@r!0G-I&>KR`Nyq`gJ_OK&d~oYVr%0EekE|U&1cZcZ9|vW8t;;}TGs#*w8~rr z71_9*coTg;Tq-f6-HbV@*2 zEry4@Wa$Ok_b@@_UDF`dr(kA3s-f9Sf=wk^&VcarJ3bRUjy$VMlwaORzMkj?3^-zx z^t|{rDJps<69R*VH>KKd_4)Yjl8@IZ{54x2+2BKR+Dva_f(?P0|*>h1gLo>T7If)S+#S2o_^gz1~-hVUjrW$Jqu`%1*yXj{4pO%4^?OF=(Lknr3spAoMn*-Epo05?iTxWbpk8? zd_3zDMTgTe+h`SShFR85N!B-Ftxo7FUFaITtOJ=#)=GHWf=g8}odY_yqX(AzrS|qyKhIHeohoENR|J)VMIP zacs)TYuI0w-poKbS)?oL`AiA4-FBpe-ty(29d@^5qzIn>yl9vZ&)EX5mzfCpT^#e80p1AAR*kQTF3Zsc5HadWKAZ|q>_Ojf12 zu15XBa=9?L%M1eSqenqQPwYnJ@6Ekkam36H%UYeoR>Y|=R_*c9R9ON%&{<)|DTK%m zJT#K{+~ST$w7mGWz(^QIjSFT5nK{v@1ORL{fwT@2c5)#yY!UyKRtyr2)Gh;z!iPdA z)i#2^^}_|Gygk)}-@>MxO&!k>(2HjJKCC^d{f_6(!edHh9J5GRVbYI?Y^3|#Wba7U z{sI#(9pu+G{zQ_jR{bAlQ8q-%rgZ3owI{}FP( zGAT_`4~)BLZ0mzmmH0-F!12Ac8>Sjiml)V6;9+RvL*HU=irOTG8yV}H(I9SmPrn@w zh>vRDO6DtXt*XDK{F0t4$x@hzBsxy}xK#mGiB~quFS$w=vD%e$CBiL{TNs*=X48Gh z0r($#%V^~0Q4K9z=}W=zHn@4X&wS$25iZMWKm{0@WHS5bRIRua-F~X9M+Jboz2KfI z1-^a|JMpcJ9EAf9qb(@PJw9Qj7hr9o_ z_P8vxcDbD7cHtYhisrsh$?-Kqz_iv6c=GjmWQP(}nDo3oDf}&(m=8!IQ>IDXpTjEp zT@)kmecVNTV=%gC$MWz?6Ony}!J@GwY0xtCP2YgJ>@fGOsWM`>(BqEP2A|Y4^lS=2 z!fO18(G-9JYQt-ZivzLb|K|w(>)#24YDe0v*p<`S8llN;WbxTTuI_v3`H1GBkBV&U zzYnAo|k5m2*d}9dqNhG(0 zTsq1W)lpRk#upz5f^C$L99L3c4DHAr$7$4DW3rKl+PSizG@-3MjeL)XWQxDk-MD3-B}bHUn2FT8`9Vy8I9C{ zJk`YT=LIhk=cP3FdMSw-q2$0);>C|SG%<@bnolAhU{(1TNC$EvKaSvE!XqLoql>dl zwuewv^veX1o~|9WM;Kk{({~7c-61(Hw-9O)K^de@H`ed8oD(UwS1b>=y;WNfI zhYkvfMaA7yYA9tF`I`jPR#}fk5D-W30EvLM?jNooEgeB}v9Nrcfj*12#NIayXdYB?=(!8b7)tVPH+++iV>=m}y*WQO$l_EmU8rLg3a`mR%|R!bcX0 zFV*xcm=Vh(R^Tq2*y9;d&wpgc?KaBDyx@duW%{`4?sq15)cK=l$J?TRSmC*tE@-WOg7$Q_W=L)*9% zdQ+~iy#|A4)i!Ed^X~8FBIZW^xlF&sE~S_woeDl2A`Fj3jQFwZB!g?OM~18Mbuj-A z{(I$>SV3vqv39?XNAsl>XQDD*-EkRu`*ZO1c*|xbWCSgCqzL}VfT-Q{m_>Tif z;*Y*)z$dLIx1()+VqCsIU(XK(b%OJ6`nN>}z9f!=$40h}c!Mq1K8=_$((4)1r8mKd zX}4>hp_oTHIG%s&H}B<+TpHgmHCiu98rv-r(m|^D)rgc*&x6N2_~hJ5&w&_mQsa?Bv?Lzm2nW}1-Duwc} z*wP=-?}*SM#CxIMPyF~n@n;Yh?JSMxiqUoGf*IVDq&}#Wubs|E6kUDNl~8g#COjw8 zXQ)ai&v&NL=IMQ>zHLm@^#a%9QUx96_ikZpAH5p!9YCE}KjrTD z{n6oAF>lCzkF3r;U5<$OZmT22{QFu$?m)1~XS^^KB-V4&-+)%zm%vT>vP zJq#FWML*!8W?Uewxf56!F#?~fnSkX%%KZMP94(vrZU}d0NnS4tY*1Za6*f!ZikL@( zsB7g=wyXJAYD3^T-M8V>pRc$I>Sr6`1N-kICa-S!hRN~2f9|wxE>fn{hfaox(ACA* zI^C+>sU;--tveIjZIjr&*Ne%uqEW2Q%nvs3Dx0b7QB zL>4(q!C$d_W0OBTQAoDzV3Cm=kb{fdyI*3W8u8cgsq_!5j1q_ckV)e!$jLQwrRL-7MW z{&jtvepCNLa?vb{;I!Sh&j*)S*luxQ4q=vR#sGc>T|0%1sJ=py)vzeaRoR^Sfj^ zpw%J?%-J6cEJNAt7=?@saXq&y{0L|JE(O%iB21>LSiF#MWc7|D#Rk$?ZL~z8L4RNK z*y*-t4GpoK{?auSeM!Kmp)=nW5~KdqczJfsfV;RsO}Tke^c1;hoG|LF z9j*>Lf#hXDEBX+cko~6CcJ@IY>Z6Fch#gEwBc1*$zZl!;@nL}S5tL?6u_2_La5rXrH7Uh?=h!}QacmGcuZ;BABHRNb3XXmqb z((5e7HZ|_-jLsf^wn1MzR{A~oA0iiV{j+J?XQ&rIajP4dyY>ZVSj^l%0&s}_Ey^|X z^NZyxLN=+|4lG7R@`{o@OC*657o}y)lpKN4z)5LV(@U?3@HWX5*3skAb*uFzp!_r- zS?Ja#Bd9%ubCU+pTn+JF=c@1nSm*V7C_<$ST-!&42+qICfRr^;CXd{-lD>1FZ1#(Y zG$l5y>gyE%p8EFo0_en&Mc@Kmq7uF$BnMC@QKx1(>Q=ndV|6M^v}&SjcJAsbn-nog+3DR3JEOl7czOm6!go4 zlr_!-Jf|fQw?E9JD`uNjKPW;O8?z5PEsTEDPx6GiTdlqx5^9SR>7EibD*r80qxF8= z?b);w?Sh)HfP7?|I7BBhYX^5=?;zWMgbMY$j5uI}7_3 zjWuMrYc9X;d1bS;xj{ds1`)i+zi1YwZ5vUXyNyf-})UCJMk4DE& zhg7B3{<~WzFE79TdlDltvu~JaU%`iQf9~H*!#~;;3Pk>@KYU)er`droQBEb#(~d7H z{3^~pIXS=|M*seVeo5laV;LZoPhCsP$mc?zi`9AuDZTi{2Jhg~ppo&rc$Pu|R)qME zI%&e2bX<4wm8Z(s68bLQ@jBJP`u*6e_2d9&`~^v!ieoCqhqpXFczhtr!UW}*h`r)4 zn$HjlD+3WHTFHP@8B(e+J_AcRAG}3EK{18B2uJLdaePyb-zH-od|VeE$0)-KPR# zhLg`nQR^+95Y=fA_PsQ1L?|hQA}aWU;iY5xTfX4=8S8?)BH2*IOJ{KpskO#S5XV51 zt^1!*bpM%e1w9KqM_WXekB(|FD>oP$j`d~>zsmvM0b}CwnRtTc$UAPa9Hk|vJFhn9 z$t!EKM;d^x8i8z%VGi5p#oS1Orqz!lSabS$v4*ii$qNdm_UYx=M?f=&u_9mdO!q4j zvX+ktJfrHD=X3AjTZnz1f8|956xb_q0K^E@3YOQ!RrfQ&M$;8oEhBfw*}Uw9u3dW{ z;f@Q6Sszd)cCeh;NI~AB**$ zZMaz2mw25^6?D)Q&~s3y>memI8J{#2^=luVp4wInEfTuCu(+gp80`A}N7dT=d7T5* z9JIHiVWx$xAWL6FyP6_lr~6_p#{lxXu0CintjO3j=LR4^;Er4{1L&h4SBz>&Qv{u-(rTN^#vf? zrR}jo+AG?v$sF+=&897qYC$qvNn(NV=AyUJmk7Q^JeR5;lg4v`9e|;Z*)9cs5dXE07 zh}07G`;bQ7g#3HCu5d6Q97F3LQ`$okN+htRA$7@bHdMa&OWP%B!^7*($Lq!Qr6m1M`C9LFn6ArIldE+~696~$=UPB9!Ji>Wb?fu~ zt<>${$hZ?>YiO(5>Qr5zhMrIQ!>>$EUIAM--zU9H%jk8T(vgh2A%p6k!wak z#&N8ce@+SX%D@)IPJf_{i)mJumxfnK4p+MV74@<%Nda}|By`;lrLKY{7T*gL@!bOK zUvl8pE4YXMO&+ceHe{3aQh-) z)O>JfBW9B3s-k{uQDd@xm+drXr3!!8_t8;m%Wp2u7((&Yxurm5#APW`b5uL@Pl#Kv zT8MIl!~6QAnxhF>o!E`i-Ng?Sz@*a3q$d9MK#8Tnpu-H0zySb8&JMADub;h`Ywx0v zt6ZC5BhxjYmA4eAmZO0qYnf|URs;Oe#+DOk1SXd%Inr%IXp_VuR0AD!C>7ykO{fw` zLX-7=cPvj>?lCqZYSBmX1>+yuaR$=ILE2u>dpu8|9y3-BeVio<#eI)^?7V^3bdGsG zgl(6^qvdy~5^HSh)(acH%;1S%fMdDKT>ld&#dhp>)lr41yDO=*@{K!>;-$Bu1^+RMA-K7R9Z6q8U|51~Y za_r-}Rk(yMw>O^`k3dhxvwW(ehe%hfTc&7BRlv_GDqFXmDv^Po44w~8GNgM>sUTj` zryRF;sI`cbRQ6y-~4qZCzm_SusW zBzH6SXJY!!3rl}$*Z-&Xh#_LA;llk7ifwML$*oFXh$Pn#_mrEnh<;^w_T zP^1Y|#m$fS8+1$_y(xeEHl(vjwcYM6JcGvcp{i5lC5Lq*lU1|=7~KESbWnSB@KGkIUatp=@~hp@w6cSsy5e0_t| zhs4>HkHf(t0s;5gW$Ui~6%YMSiP}Z?U&3>mW}H=Z9@!CW0%JxoNOsdwVGY?<{Rd`M zV0q+4s;=>SGU+yLMzfpI=A*!KQLbaTuty?tBMGX`9n!&wrv&Jb-AK{(T{^zK0mrrvrDc!#uCvlCj)IPK z%>!btP7m^}EQL{QrkYjvF08KtZwhNPQn=dO?3NLwuLfO1Th(C{^^YuEEBmJ-cjI1y zM9D-N{e)P1l#5Mq>5OTKX%(mTQCghT zttSOaHF073*`3lcX}}Tbx^Uqs#N@lNQ`RA4+8J6N+K*?9jMfY+W`G!XWQQUgp`~H8 z!KTXbcV1ge%G|A?uSLuz4%JW_vD)kr)Q4KUtLN}8k#f@wpD>d4&RWV^AEdcKtGRTB z;B`&VJpWGqLi%!Q+g4}C@r|?HWfJ=3g?R1QCgH*NDOz!za&Ob(`%j%$Y&H|@xh01W zjt6IH1Ks`+DAFYj2DojH3gpjbK2j%dT$(RI*pmKC(lz+Hra$ckVLlzV`Dazj&6lZ8ug& z!PqjUOaV@loR`K%@CW&N7{>qKR2CfOm#8%VH`q=8bQc)bZaBchXSOHa5Y!?Swn86L zlq|BaC5()~X|vKzlbMlywAB`XW*=WT2v@3oewK|VZzv?kHn%0a? zn#wXS*bV5=_SOIE5jEaEpC~sg2C0p#bq;;{_U+mDxtsYGvP&gR@+O zRli_TxB96TafGm;1dC%}iol;>IFAnST?#}lGC%;Rlv$Oa zAKU{w1*D9m#?sfg>HSMLl{NjsnHe$1564^FvU^kuOh#}Pm=B8L4P!c)(DW=hM~muLpVlQHc9CVxyc$}H36FIv-mNKY?n_*CR4 zs-2dEyiZ~fl=!F_ba%7P=#mq>;v>NO&7>7B%>=sR*lv_zSG>}cD=)TN@Y4RhKRv=m z2#onZX!yTzjS5-apJ85JZCQ7@?eL~3hLCbeB*I}>ll7Mg?`9iOC7FsVpYX<8yD?8PG)l|bhWLLi?NW&D2MS@X79mYB5!i0-S%kr zxE`oJK%$;DUby4KCG23d%46OOT>Z_dQ$CTMM%loh=j#2V)CBGK`L^Kn;Nm|$gQ~2h zl~7O-(y6d#UM3=b7lUc7jK8$>wzs>`TbtE=BpCoABTTl5Y4G}qg6Nj}2|isf3t)}s z#w%+30MT{9gY~1VE*1F=#3>0P=da^j&9`L=@zJzxYh@~_-$V-z7yN&wJlF-ggd{i5 zFC08)w9=^aGc3bimLZbH(riu??U6<`Nr8H?sbADyK{_bP3G|2+Od;Zs5JG$S=yY!} z1J*1qpADj{MA$MmrP&9sfV%qzz4n!CaqlUaJ@?4nWaXh&HW9Eg?*^1o#II=rnSJpW z_{Iqwxb3GaN0S=k4homJm;~tht+4dl`JM%E!aaLmPa~wcm~^O(CjNml@9@DNv@?cy zXS@`fYP7mKWmzDxzILu!OchXG{rKn>Gr@R@E_Lax{^WOuQqgu*xXkFGrYaQ95>O-ezap}aLv z++ID1z7JchWU|*;HhiwRM2Dr)`PP}bgHz*a`1?c*zEU^JNKsy}EpF7$255A$ZA-`b zQ9>#G<#%zogrQtF%88dD@>w{{^z4~Ki^#8YaJJk(CQDjG!OkFqiM0mXN9xcZgpRPw z6jG;C6&f!wZC-6#zj5O;I*Fgze`>lwk$yGZDxtG&6}8ee*iE+=YPT~-Th8}5;gYU^?0$5UC^}&P`_)SUZ;w9QtMg0>B??1^#`pNwaD<+ zIyHg+sQE9B?cXKtzb-YOE@aVyTUYm=j=Xoe)URTF7e{m{#$&5rUSrmNJ7XHFFMklw ztSMdjxiq+BW|gh|tOVDG-GLLdXf?tztRPlU=_F|^Jcn%}uc`8ZZ;ij~vvO8c4CmwK zbv#Vtxb9!-3%=9&Y_w>1!Hpr90ZhsP7G>I#bJM%pJYQ&jH?%9DDJZ{43NWWlcUa0B zo>KD@Sb_6qh6E_1g=Zmk_cjhR4;riNSbF3*ljb*J)v5lng`%e@jX9Ma?)K=;@+bj& zZz2JlH&LcEX=>D0E5faeQ9#a+%Hh%Jwkf)zrF=E9(59~V&W=hufLZo}ST`o#xJmD& zTQpI(p+zXmTa`DT%nMCIOpcG} z?cX*a8kNZO22rYSEmMhtp=QYIBMF&90QvTnAE@RprK%x)GCki#5X0!>Ms&WdCl`<5 z+8-#ZJev?Tu8?3sCJfQB72coin3IV=KMM;P+9eZ2g1P6aMG13{Qz zhGau0ar*D9a=;Yvv60PcEBPO4gd;--Ux zVM6=ZYfpyn6AGmU-dz+a{tT_>$AGS*_O9}B9`tf#?WVbgwzUeEL-AGyLgh`8H&XGw zLNsRbWK=qnl9a*Zjbr>GYY>a^b01-)s^fC+ZA)z}@R>Bo-ggN4Wdfy*K|2%I!BG=P z$j=FUke)X=;@6TH6`F0n@u5FhZLQNPLZjE(K z8Vr?CUkjF5v$g1x} zarHiFy@oOjY&jg&z>zn*f7}!y64o#I%P$rP+nayL1G0!<2O}TfzAMs6m9xwQzU0^w zau5!qd}>?#gW-pf@4`?zi(DnGc=bf-2C$9)QTRDQ_+K(sY7<|z_tRlyZ-gtm9EWZE z53=*WZgHz0ijd&u=bkL&@1bS~XOlmwep(PM>cuoAmY7v&{%$}%<{n9Cm#$i{XBI4I*0C{EHCb^L-fHoTpt>dO6GMW@-n%(6{TxYVsehnI0+U&9BW*uj{#ipXnh9Ap1WOYB* zy@|*Y-sE^*QRNmT3rA*P{!!9mjP$|`M7|TJ0>%ur&yV3QKd4=Blv8{(u$7zYva$PVnIMP?|5j@XN^6P25`z?%OQf- zqxbgmgtmTvL1exI@^bn>8hH^`?(q4v0>k-419>^yD`Hz2{9MB-^FvfyTPSO#jt!vb zVgI{I*$ogTM!LYBERRC`$JD^*)29~wKXg$4UHoFBL*U{DMc@WuR4-ZC|CFETNBu=C zGvv^0LLNa_*Voetkf&(;CTZwix<391==bMWB;UINxV6Jz$eU*QI_s zwsvA3-x?4dOH}g4&83sfQIFsZ^ylN{9jT|0!A{rRB~!+I{u5|fT$R;_s$xeRMNvDR zI=SzW4d&W1E;h^FLm8Be-c>imDw%>?bCrlEkjiW)j$@750#R04x>B+9Er^~745e?w zdWk+34_H5ABP33lX1OUGsU+^6u0C|(`{OtG`cnm)|H*7Pg> zhvOkQLn`_mVm^YEeh^2k>Ui@-f^2on>Eo80Z)&G$m$z1x4@_rN+Zv6+JpN@acRVQT za1D+s7zV~uKKFAC4q4*brpd-|sZ|z^UCBzN3f8~w&v!P+MJta`57RZHv;QCd_}`5C zf6|fyyuT_u@{@&H>k#Gn+pl9hlwL!v4bGY{r|a-m>gH~6+? zQ`30$?ZgR`MVxWZG1g^F{jcE&skG^b4q7lxZ?=&fG1*|#b*{A*?|N{uAy_G$x1J1G z+*AujKIbk~-p`}AEvo$xIN)OKSj0ehlnzp37y3wwnyLV=*H>a|a5PFzeQM$Uh!ez= zE~DCPp^`ZOyk=D6{FtK##90fJs2;7Ejl1(|td;J*M78D8n$~ziljFwlFmoFrm^-}- zC_P0jB5wLE=HAWPWXf}+)d7KSKk9RoY{d1qds=X=m-WRN%k8nvM2Z!7-N@JuJvmqD zP{~MT6*%8S@az|(%~$8RvhzcPOZ>yC`v%MDr^2 zIbolD*km+(Ql7u~gH<1_4P`?Rjit3P+x1b&_7iQr>FLsZP!pi*pLO^l2)1s_Cc$ty zGeUX4cDeS1tfsWisMjVDh6|I(3fIvHqmIoliHu!9=$_NI-GHtNstb0UETk-?6Y z!9Q7hi|0rKovzaXyf`vAYqu!y{s`D>gpRy zfPVt|$O*8~%qVyA0|a)io!r15oq zyJ^Gv^^Vh^4dE{4Er6-+)cO-q{9gz2fBpOv9Z7AF2Op{+&#M=c%>8`1T%ciNxLWL) zf1;7Hb7z5CL7Tsitlq-@&AsgMb53VKr)#XK@|BDIb-&%0Y4!X&C;cb0n8&1;&i7!~ zDjIT!K|;@~|KP?tJ4LIx;EVW=5>0?UZOA#p?KZW)14(Hn@b!*`~#k-c(}t z{`&O3M^l=EHp63^NrGy}72|)FdU&)0qHI8I5DJ-NiOEpR7#2ndk!+UV<%>jHpFO{P zU|=s{kQ%jW(i?hYwXAPqh}mw0XxX`gF%3(`P8$?&7DaSozIg4)^Kxq2>}s_s6yuyk zBrztJ6Ork5GEB^JX@ZH~SFkvC(cfw`l%#ZZ$1%r?kFM+Z4u^!mfRn~@voa>LkfdnU zgO=k4Jpg&ZQJ-Ejl*4ywZm1W2vw8S6nX*TnpdDI$WLeUzNOn^~Fob}X9wJu)j}l6U zrOA5bVuLS%X}klIPwK-}xjXs!Xs6>zDvl^a4K4KwoSHW|^LYdtzJruzR5oQTJImDo z(P!LD9zH{40)iGQw%6*P(rb^GTgJ$O?t+uNzgEGLnS{s(-jI=m00UVAV7xb#=$QWv zNB&<|a#s%3zF$e5{G_HxF!3k^BlhchDpJkRHwQB@>Vg5;3~oTVK`d?p)}N zMLWZ0NNciy!5i^6RPR3N>_f`AiN*WEK-|p@WU93R&#t0WVe7wO+tE!Qj5Bt)e-s_! z<(DCr+5BD>OP&f@3*^5Xg^uve92~&AMBuAuV0k=jk{23&c5teGzm+^bTPc?=qh9tF zlcLFPM~o(m*CDv=v9Od(9Xz<3qd=q?d$=#sR3!`*Hw-dATP?u#Wq!-ZXlWm@g-1)UskAP{U~nLHX0j3@)C4+Xaj<-)wGQ7`VxqVhfB~; z@0mgR)%J$2QZK%TfZo+A&B(1}W4bv~x>o4&5!8FLsk4N1LDVAuIkI$DyB-q9prD#) zEUwMLGul5Is9s83@Hvmb^VT7gglVnHt~D3FU_|SI@*-`M`;zL%9rFOtDIe+e6zZAXmnp{VtrSjq z(x(Krb?4^`kxR%PKdYX(S%jh7f3#cw4jOw}NcZx81Eee0~WWl`QL_b zPR*VVmKvnvv=mF?P&P@dwbuf2NmZfZ0<=TF@p%~U9lX7}6fPk}9!P!Rrs8qE!A&RmI>d;vym*NR9aQ98$K2FiE-ymSy||+y|}a|ZR=R5`mE@tZ-8N= zbo()^p&!k9)fBU?$K2g=x}wF(W8sSOV%N>|Gi*;sP*g+3HgX#Y zmrS)b#RnFfw~e~5S!Sp(mbISg;RBLgTkl`qb;DC^76nhWR~gv-37Bx!LE6d2w9qqy#u5aQ2&3UQVsb$q=s+4N7$3Wc0@+_K6IjzQrfZR55rHvFgPZ#v>$7 zjM2{K$MmvnzRzPr{vM&;&PqANn(Uf`W7;-fV&K18vA$fL`Dre?^0}|tfSXT_N|yrJ zwunTh(g{>|z|YAYF3o0}-(st8#h;9i94?=ko&!3&C&Bwow+35ehbMc0z?ccY+}O8m z*o@cgG(y&FcSWLb2nIHh>V_qPBhk`DM9jnK(+GUc`ID23JEC5zZDqw(1!_tsq>rSk zVr4h)iW>xCxnGVr115c;)O*%WRxiEN)Mi%9bwn0ImrJM2m_jIE$y39@ZX@l+`dZOZ zKmB?dFI&|iHIB<-WRXiVpbEPOItoon?$cB8o&E(ufw1Pg5hSGcgrsqN*<{cAfoXz0 zuR`ga&EyfNy1#Ce1(6kRRZz4_1!ut&N$$imDY`-#0boW0|EShMVM6NzQqpOmooVSc zMkw*0K6JNB%^nk2Dc?o)UGK|2f!NMv=ed`l~l8++@IyNe#xt&trH~WOzA`X9YD?ZECH>Nbf%lzLriz|7az-&#z(fL zh(v1OtK;ij+`^IKMk)10^J!X6o$WgbN6VzbVA{>oi62p*WX4IHt5(3!sryVtQgR4&qDo48+h-nYw@+ur(pbMK=6&Z+&B-Fl;o<5B|*iKM<0p#+{@NA zx?H7Y^=bN=Di7K;RCtQ3`P=9-Q|y_WzdN-zkxHbRPTSEDO;saVo&+!nteG&m8pL%D zYUDQTm`x$t#1seG{s}-~ol`}yZ%M%y~9G7c$iKgDBIFOwXBm9nYd6(Z8 zuOxVsqxqQpQmZuOu%r9Hh%ZWx+7pUIKy10~`6|)5lX$Ar`UOjQIQk!#o>a2;mF5M` zML&aHIhbq`dyPcI#L^zNOKR~~Qw-C$lHV!6Uahg+0$VDML`;*taI=zQ#J zX<(-fmBXF8#%WzM({P7<4r!b?L}<7SMU@Zeno^!mZB*A8#By;U6#5Y1w5E3m2i?l4 z@0LCJ$5eQ!ru$<5jt_%}>aE08k?it`aDeq<;~e zS_MQjPWRxlPHOVgs6B0YLp`)qTyJMEM(O@D_)F{%_vD>?13!!DH}7QuFF{+qLI~<8 zWwvd$dbVotb@c-N00ab*gqR6K&8&zWws#{w1=8s5oN&fhly{q5gS8ar0G&y_RGriD`UGKSQ6 z{1+7n$<3=hvRp@(kk84E^?JD=tD5d*PMfu_(yWHDS3K5*WWez_1>~)i)c7PJ7Cp3w zG6ebNlw0LtVp6}i`T)p^9=`@Q{oV=+=|V?UeVdvXmf<{`t@bUU6SuiOjSLU}d-)$`k#Qc04H`<-K>@N-v0cTZ@LhE;eCz~hM|lca6D{tE zUf^J}O%H;%S-fU^jR6AzXbw?jv$x)ETx$_TmH%N*pNq3?Mj zPv15}I*tk>oWdXI=!$0*in)Kf_jK(c+BLJ#kK28km)CvPrR zjbmP5$?!z}R_?~Q&_jG33!lZ37RA*gmGRPr4;ZXJ34x?w->TcYcF(MSLov06yqdKTe0N@ykO*o02uM!d^n(`7 zFS1cZ*^S@Nr9f@daGq)nW{}2KVMsM`(0}eCIMldynyfW0IO_!ZjP|ISen+;31bg>f zcz)V-4{cx4Q><*@riW*LH+7d(>R}t@_&EklC1VTGd(f(R7M`yYCEfD!A-bmP6z%E7 z%~xpiu3ff#Olj#3bc;^d@}B9^5yf%OKTgHWIGb%#d1nmFC9ON|o_$t>x%Ha&q&cbOH{b6UC+gB=%0K+ z5o{3Ss26yfNzML}p%0s0uEIzggBqbXkk62gPQpKG7dJ7Up6;+ z=)8_{ZH(Y<&mjuHt5#V@Y42Yzh%?e4!Tb!gq2rotfL3@_$_7Ur`N&6}NR)gx2{nUy zf)@Q02Q?$Tm%Q+KXw(=z&?&bD6xRtKCd@MUEGb6V+qRtZxe5JBkeD&jx|LB##(hy9 zFJU-qQH$XNEzTjIrjNlH)Gv}6TD8KIPpejkU7ZWVZV~FR9@D1DEMztl8-oa{pE3>e zaE2(Lk<0O|*ne3If=V6ZYAT28=74hLeL^$ZM4$*$O)(Fw7UocE&s%A{yw2xeup0-h z#iuR#IpCQ>*96FdMwOBc%P{d(68BGts{pBu5m!D7Wd7^cj-#?^1r{9VQH{Er8!bG+ z693%y4~}NrgKs>~&{SvCSY6)BT&u`5lV9+B?*MtYC4$;PQfDJWFo6R)E*YF6)HCYw zMCV2d5wPd#@_vbW#GtVI_4Fg zElqr9=t${>yx@zc*8!eSk~Eq36yynRW9pYB6^*mgyJ3F`CuZ>uqGqeET{gDH}b(?}2*eiQ;qkmkw2>5veK-^V_e zJL?%uc)vGx+84V2zQfE3*86No_2{}?EV*95*Gfuj)Cs=9{EsFJqp(IdMEq?ux z5Ynv|A^P<=5NRPWEZZ8ZrRt|l@mKV+qb=lOvKN7_)NvFtiU`$^Ftm%v#YvXW6{huH zFVT+2$S8pIgWo*(Ocv*^+RoK}O`5N<)2L1G^EaQ5c|Sfg`M|*^hR7E@C3f4rttRPu zPr-M6yb`VMF&4bO5K9`yG$gd})>XcUv+|BjG@spJIm#_FkmeU#ARKLSBgt+Le8%)CIgE3#RB`qY3I@lcH>_|5^w%6AeBV zHPZ7LN_IWYep>7EhOv&bs!Bvj&mn$JfbcMVWPaJ9`<-0-GnxO-0MR;E_s!ENI|L!Q zvR7+NF&h?m<+(dVZG^G0mG`Mowe-nKTxAN!n$oe5GM&?(8-^NSOGOEO_7&wyQUa9Y zj|dNWRuqrY;gBlY0QLA-eg2uVLMJ)gc2j<2n|T-fsxs=r^b`9;(so~G!Kr!#!;VBy zrrsNC%l5~3>R&`o_;**S+A&?f84`MF{scj=|Md zZE%uG)tsX%@ZBib_sFcnaly}@)=I7yO-I3vTgRmr^9GiZDQ}4j zDn7X>ZOH4RCr|j^Oa0GDo0|t`cFwscJXm`LR-%j-OEs(#R#PuQy2Bja?=D=c(<82H zF`o-RPJ+LeRI22z82+?u^6=?>(HLwRMj0!R z#6qM3G#lhlI6hP*_}nvY%(?eDL_7+p&Zv%;#*MLJk!Tx%Zw`Lrk}QoCzr^{~Z!#Mw zSY6zmV6*EXF5Wn8s~Eq>HBDofI7Cjj4x__ zw5R(DWaK@C3X_2+ioAYKyWwo$-Q10|*Nr^a>c;l1`bM1xJOSZ?REYW-2AhS?-$GxR zzp9N`1PyvcZPFc}f183|Cw;!D?wdw3wEkdArWNPFe>sS2jIx`T!#k^jH_sbx-?7IJ_xc-yd>D3Yz zijZ_xMqy86ll(nZ>k)0!bBOl(i^~oq`1i^e5}pmr1D4x;$FSoe_hWebX`;up(Ae1Z z6f>-2|X6A0vJv9J=85}nf*zx?QM0#c}>Ug;{nfWZ}$jE)NmGp zRl%wnE^yNvTeDELNWF;`o_J=QO?erveE_C(7H&T|4!9RFWKC@GBZcsLD|}#LVYByZ z@(DHzYkFmyf~Y3~GDcCsuim?J{f^{n2xw~W8uwrb3Db2jVK4i?=mrhxPWp9UUfozZ zk)3RBLa2l3WwsKW3r8r+TUIRDU}#D$v>CggBTq93wx8k8ad!{z9?W}N%DtU`HOBo9o4*l}7o%_MNkb>ot2!M0=P z{;B(tYiH7V#@T(L@uC^eoEe9Cm^_hO$Zs^yk953TMmf1irXp+M^?jwSMfG+!hs$o* zv1ep$zS`>&&g%*^EnrpK^+9)!?5yo%Rhq1k1h6=g+W>VSy*O(r*cLyDMw}aPV!GTT zC}7fb5MTi1770j#u9QB9q-t+-c-EGoQF25MTWk?v6G%nHK21QjRB?!MO~#@keZ)ge zeZjYSZs-CHCI;aEwOO)%TuS@;F>i(XU2``y*xiBnc#Vq`#V z_)FjWDC_|_61uVIMark0X)(8!>$MR7;bnvMpJCYiDoGr#uPi%=N`hrP2g=sBhu=g7 za}T@9Tkf+&oL|7DHWwC*?YciAhA7O?;@LK!=l)L66qc6{y(-70!p!O$d{PB_PjNKt ztrCKjPf3_tEbPiC6_MxCdk`pwWs-E2;NYL#i`m)|xw< zfha3;(!e;e?Z1ThAhfW@(hrKbTNWm!6$Sjg?EFKlBpw{H?Sce^lL9rRZ(!VE!96QK z?6?F;-q4kai-e^7N99Os^4G+O$gyCghcw|uPDCWRKuz)-(i#RZ zwfKMoZpnCLR*AH$5dq%65w~EL}zv)|2^2wKI(FW|Dzs9O{IEi^%|q6jp>R4~5{u_6iE& zlK80~E)wsuB_^>t?g!AI z(5U>!u?5bu{V$qbC+cygsk#9io)UvG!SV)(Aswv9KoXOEb_@=hW?y~Y$WVGQFPb*; zgV6qqbYFmBdNGbzagS{u8>tm$2k3&gcD{MXIWQLwyQaTz2 zm$+j({k8#scBb`Kd+g}}447T;W!jz}wHOkAxtl+J0lQWcqtix+pkUABLdGIAZ| z4uDbjiv0Wm>y{m^^2+l1;vDyXw-MCSBm;I8Yss{_;I5v@UiULlk2_EnCs(NL7mHeo zyUwpKG-}$%ZIR#gCd+UPUA{a)1u$GPGeCDZx5vLl#>-FLPZYk!vX9g9UknH;v4}5R zJ>|F_4~+{=w~tzYDcC&W{1Ele{W3gFVc{q)r0dRoWYVzI;esilNd+c@YuJzwy6BR}8#?UlW14-0&X5#%E>65i)won|Dp@B%C| zF4aWv8`Oul46x@XeS&ELmxHvE5};eJ`zj-FhTg754fbQTP1ECUq8WgO zs)>bH|LfsrxJRp!4gaPQnsJizPI$Z3_ui_YxDOD1cg`7qbFt4&U{Z>z`fq8Pmr;hgqR3(ReE(A}5cnL2Nw}$MLs?{t zh?IY|-;H0et1`Q;nUx*C$=sjG->&E1N+TUN*gj#3o;%!)PY>eD>wnx_~ zeve&XR@Z*~__i#Z+ib&5U_$j4e$j><+faDsTOA-mP+*O7qlckT9{y1(4*945pAR$oohi+B zX_*H=LA_2A8-Hjt&>kOL9UoI)E}t(4V-N`9#JU7Si|_}^3#twaiUT7ch13YN5egAK z7Y8uc>zNOY+<$BI*ea?>+9P>mlcan;ZJYDEU4K-+Cfp<6gS;&Ox}avvjxypEN=_3+ z(mx^X*|^9gSX@G?H?bp5IQW20UI08a7A^{Qr}Ok zf13>Og?sSD2cY_;;#mO{)u$m^5eU)yl4;N56?3UjgYdD7y$r(mvKe?VFX5@Kx$}IN zle?SZY`jHNH5yuvZ5Pr64PxZD9>$wveZV05ca+5oOhnIkRWod|oG$|j4At9I(98mC znxl*2m@1&I+V1GfMTjbGVVUdHJKdAKLKRZ8(t?p_>HkIy#!md5C=sYxH%n>!)h};O z3j=5gSr-zwsHGo-WyYt`g=vY~d~*^^*aZ9f_`00JP!!bRR=p~%G)*aB_beL>JIY+e zu@3sL6GB+n(=7%2PJZS>&Sy}pMJek3DGKl1S6aN0GnwUj-r(L{l0R4V8AUJ?p1*X` z+*Htwb}G9TP+~X3TNjlcC5a}O(?Itcy@*uXvO9ajtBsr-3;I8o8j{ksizJ9_yV9>R z+$!#Ki(R+7qqR$~H_N5Ri7tNRDfl2ID{D?Os3*KS_zpHj@w|b4nua=*t4_zsgyG^2 z1%EefvALuqRp*jNMvFhU1&Z_0fMIEd&Jnbr3)ed8CoLHLo!h&q;wZjM(h3DsXA}VM*@_b}1m_l-N;X zh_VW0LmzP|zrfeo+}p9FALOF!)O@Ypq?thZdBDGqn7=ze9~Odfv&bsS+saY~sfme$ zX&PCIAT@}h%sx(v^W0d4&@2yUPX}?CN`6r6Qje&ySSHInMbA5E>-WbD$>ltL%nECnz*n#}6=B3~0m`~bbiz6KT|X<|~fQJ}eD zqyVB1K|)OoWpclRZC$NhoSmO<;^T=OyIW1?My)V2ga~FfKqILgn*f{228rUdaNEwe z`&7;o3&7Sm!QaaDKJr0BOB=QY9)^`#-J`b-)9iVPKs!-BF5Mten*e+Y)LRagVXk)W z^W&L<#RWHeZ5}nPa1^(lAdFdzew>bpA3y%eW`JI|`9Bpd>3W@@(G1eGRDNg0NYPwG zb6=5eId^sQ<4r5!SHNM=g9=PE`M7QmS1l#)>fT33qWh$@PkR7WfGc#(>*j-^Mf=b; z&0MY`o}Tb-y(TLU`&5@8_q@&(ejb>$Ws=62pxUCHX$XJE%A4ay+@w>o&%8V@CfMol zYVra-C)u|=>(QA0Y5^QGGUT{6jwW?{v$;3%-$x4om#}lV7HHQgKPl34QEEUO^*DTp z^gp7GPsJ+y?B=CSpH9=UBbn3$is?P}CYJJg0bX3Yt%=IRg^{$*1R4Vm723W_Y-G8eEXQ54Xmzdl>rJRx22pJ55YA{02sjyRNz`Meq zNI~Xd36pC(Z(k5t+(^l&JFT!E1~f6g+}&*>ok-cyS71oIccL8`UlorGkug^;E~4TV zrBB#)8Jkdi&^cr=TIKAaF>V!ejCnY~b;DWe#d&vrMczVoZ0sA2YG7i6*t?*}4uNd@ zzr)jx8`X-Ap!aN{-r|gCF@X89a`Q*jz=z4;()o50Xi?6Px}W8!ywCJ{aVQO`o^uZ&8@u@NO7CGKw$N#Fco%F`i|dp`17L4 z>6o!k0!6@v8$AJ?+_W_2!Kn4x>9sH?FEwEddp1IlLrBY(ES=FH@taG3nG zxu8A3J>d1jvL&20aMi<^^GI%*K)q%Hf8vF6~$moaxmW71bggVeX2zI{5AB(@H+;^W!ox7a_3uC z-tg#ex)c6%O_?9^QO@sNRHg21eiVBu!Lx!gf%F+Zp^?L(Qfxb29&iZgFE)?JCh!jV zpGzn$&zHmYo}^a;VrI2@pc;%!oe?-Yx-~j@?Y)& zhN-Zs_Os?_ob83gjM(xWWPnR82`lg*;d8uO}50*cIXh@VOiL76xqh2iq#k z)caVI)o0HY1!w($_x11=naiQjf9k+G-yW%@%Tss4b>3&mV@P&R&zcGe4>;k zV?Op`vUfFo^VgMpxercwlggFzU|E=N&*z+QE^v>TjK_=wYCREyD1$6zA3)2?s+ve# z>AF59&*l^S#IF`EOWUm0oIRfNe6GDurbIFHtiGWKiLM{UT2rNu=%-QN5HWEpdyL1h zZTz?p7dJHjSvHFjy;31=l0C3txxuWQ_hUT7%SXu*VVmOP@MZLFsWX&=m_gbNgr>OK zcPTgaFM>WTFUbb4($`H6eq+_5CcooHRP)-x()w}kuDs7ZdtqxIO~TvK9W^~wzsC!& z$72ejeHCf~nDf<#kI@kW|CZl71%XGT7gbeG63_@0e&IvZi4#_tYVVa6*PILFMA!4u zOyEmu90K5dJX2h8vP>^6KMtmyOd@MLb()$jPXF|@YQeCgJG4Vk(7Ymjd;|4$0>Z;i zp#^I|BAGhzvl{rJc-Rq*uW^H#++Unq&EiI)WsM}S#?{~#% z&6WAeA9TPFrtsSdUwmFB3FI$MM7mHk#^jRv!Yw%{!r9%No`?qdced$2o#tH@a)R2D z9bng|_jwV(Hmfu2r`Y}+o^j*cg?BYS=$hAcFk|yt3ViN3g*#4&23}e;Irvn1UCDPL zGOifL@JBv5+vlMjQV&-T!Baty5G{PY#8FhdJmYV5+s-ia6kRoF)E@x=)p-H?4`Te@ zdr@1xdo3fnUQUgbZg&s^UrN~Af41HipKuAgUy^Yy1~I%1AViHhq;i=5&DRyg*rh}+ z>TZtXT(kMyhUv{F9fZSIdMH`UVD{a+F^Ys?!J5W8tD4w30C6Cq%BW4>(Be2_;1=g zJlc4EnL#>z9r$=p4?*HAZ&^rBwu9okVenXhy!NOHfNMMs>>;i#<(0z=Z+ai;tTkSc zWG+Z~X2!&v9TQ*b=~lX}?d1Gti2d}D0|9zTP>^Uu`n;p7?HmU;^?o#5y!RjBjVi&m z{$t`BL#wdjjFkE!ZWT1cO2j5Y@CC*(B>v_|bB||Y#O^s!fi%Lx>?rc{`}>!egz1TF zcMwOs%AhDP_MGrVTqmK5GWE(dU{s1SLP>{G#v7NaGdKh)^=m#&J!X}AEdqk1F0j@fb*6+GNurowmCYVUQzIX@5L=_DaK(c}-RejW>q zpgHt-6`Suaa|XK)vzk-s`~t|#PvolI3sbLZ*2c#*Kz8RxKvs+Hlf5-WD~f&PhY`l2 z2`^Fxj$kbIp_q|DQgCU!p+obpvdUlF_S>OOxWm}y*&x4Ud;P;k+gkwARS4WIZ=rPU zu5q&2N&^Fn{TB$W#;R=S!m6qdu2eaIhvD(qbtn>7sR7{<5bb)h_0nTMQ{Q8p@Hai= z3l*5?%vZc`$nvZw>v!Cepx+Qk@yd zJNIZ5j+A(SbUM|6J~ggBHSW!=A9x3Ko%iU=&dr(eGUpO}iRADX4A+7}oQYF>&G4N* z@j67wDvqI6RS%l&!}Z93m>!DC(SY^6mK53|MaCAlyAD|6{K!g}U8{CM!X%fuGS-2i zC{_|8D>0Wt;x%H$x@Vgu99Ee>I>z@Z@9CyWhXqGF?kW&h0ZRaPwBzfQSL`$6lf%jS znV5TcTz$>`9~SsOCv6fHf_ySNok4ONw0W`Fwd0WOxg}A0vY+hP;*WBey){NJNqxo? z`JT>qC}){8E`O?toJMxJb>q$*xPPmoRUPV&K*tFRMYO7>2bl1${62m8Li@=mBCZ&Z z4}FEwG|9>#=HgLCYJu{AY$%}ETUj{qt-oF#o1@kLo8$i9O~@h$Qpv)4XReC~DB7yzzlu~4Y&Vh;`%<{2y|Y`$we?dP`^=asC1WlDE7{hQ|7VFV^XI~>DV;P;aG4Ue{v7*HgbA9jjA*>eGqXfDS^ z)u^GA8s^ZK%Z@zGaSRr_@x1Z}%13&8TP5oW<5ezI*{(;r+$K?EqMBng-Z>*{3nGua{j z#fm_FhE?Mb5;2&-Vn&^-1wU*RIV2WsmN1%(PpJ_XBKubtX`aYN_}%n|e3(Q8AGh9! z>CFe)CFw9}5|ZWtbrNtdGQ(H$VvV*F{#>c(GYwN&+?<^z7Ex8L%Ra|v1Wm!7-@ zQb>Zv?k0{zRtEh=2GlK3o2mi7=P3Ooq2dr5CXdvJJf?QN1**1!nsOU|sErnJ%E*o8 zi3r|l=XTw>E-dW0@Tm6q96R?ifCv5-j^>^v0m#59r92BJN?7=`B!cMLaV^{zfdC;i z_8ezRQrL493JL-SD@G#QgTw>F>1l~cGc5>D_sg2~Qdu7r_9zkBwe03(F*g!O2Mub= zcD(DVQ~ZE=NOVYchK{cE5on9za56;32gB|bL=q3|gxeUoN0A8dDF(OK7<}#XhlDH@ zUx6_`g0^TxPTeJhFN^R#><=}<`YBGJbG+~QAh~qZw+xBghIUEzV@Fx^oC`_ro@dgGu;5Ib=z=~jq^g}&|oN%3-A`JgV1P1AjbgG%7qJH?s-1GOY2R)-^LZBx4 zU1YJf6Qjfk{*jeq0z+=jU{nR0=p89vot!E(^oF!;ClK!w=9@+SFST+D3WBuC3^Xu7 zT99f7$eale=K;gHys*&U1>T&V;+F^hLUdzy$bREf==~{|$s3TNkV>eb*>)Br_j7q% zsOO0Ibk1(Hg-#?djABcJoY{tpQ~y_r6cb08LhxR8Uomt+cG*ELxR(N7iYw|b*okG~ z)cT!~_r!SI0NO~W5?X~;+eipec!y^Ag2H{AF9lhJ;whP#vHq+7LpQ=J5OP&ZH(kHm zRm|~wy8Ostw>(_ISk4cE1KENFs98XJaE&UHb-tWpk0**7?i+&8QGaun6emWgB=sdw zq0!R#Cjy_Q=86))d&3cgSq!5;XkfnOAx0F7x!j~NK2^t@Db`hfp!7r zUCJ8b(k5&ilvgr-tf1cNek6Ai+4jgZt3=Vyw=2f6xz)n!cK~~7&`rkpxP13t3q{0x z97*4j+w#A(`fF#NH8!tDA`fQXf7Lv?{A(>R8WeaRx_{3&5;0sHk4uV-fW#ONoU*Fo zR#ugCnhltM8g+iE)6`@1Bp(rOE2yXKw+~1_)zA56DWeo`;?GIv6XUn|2M;g zd~8x2NU@{hrE0G+s*>2Y(i1YvCxQB#uqFf}2)Av(3 zW`*ul10j&uFv?!YrFUWyXDS8XC%3wI!IjEe-{z%>wV97wEPCC9a)qLOO`^uqKWFG-sw5{Gz$lkWwfE4I6DIXJ+ruSt9CLkvk124Mgp zNff1gPQIZ8mu2tD(egai+zm8?I8^c|cLrG2z88K&7Er~S+vUQ(z;~R!J@U!8X<=c( z4dH~B8)185U9#%bQ5tgl!{|dSgVlsDFK?=Tlyy!f@5tqR+4_us%^Yl_P+|ZlvL_!N zV*EZ(5`)wj z1CR9jy&g)`OASwrBU3*67z4TMd(CV1iI82@FwgeQ5C`yz=-eem(wJ@R(_(*c@}DOr zkiDd0rCKjjzk5htr@x@V>}t}Qj4;`U)>&!6d~8^@jl;!gr?%*g7({_HxTjnc?vw?! z;KUB_NLH$IDXS>zxbo2ESn$jX&z#}r`NyQE1)2MhsU9J*vb#k+*n)(B<|eDNW|kWn z3fc*ksm|5{ABLZjh(v_5AZoj*`U&T487c8_qQV3iT^&EO9dfoumtep4t*^h>_P#p!tQaL}>|7 z)3rq$KSRh0d(!?2FrK?6xY-TD-?u{`zWmvoD1+6IM<>z#bEixC;xF81?&VdW6~14q z5RY^S`Vk0Hu{s1d{K3A3lAX@<9x5!UqaoMXkz`%u_J<@cj z&D1!)7oB4zt;rm;G)Z|6xX|#xH9ibLjV~^>g>+oMH!Yel(^u3`h`5j4|7)7?iY^P8 zVNp7HzzGYwW4YnkMgs#b@_SQir1qzkq9;=NNL_+=gW%5<)nv6;j6hsw$>Vl)d0V~l(| zeEMBuPNYOGJonUh8cs;5?Yu0 z#~eZ`nHCkex^G}b2o72! z27zgKp1`8POqpV3zD$Xo3p)ahxV5h$$*6>f5Um0jG_N&1(;L&Gxym^IYY(Jox0v z?Rp)H2e4I?Tj_!30+{+==<{K?7SI7r>tNAi$!w&99#jLlKa#bPDA6IBP_!}0^cB=o z3g(m(D?mDwUvC&e40jX=&yF(%gazPcIQq}w7N;mNK_tjbBO@f*e2G8O5K8p=e&5e{ zooRnvqtUI>;fdn6nlDvujd?LNe~Ux>9kx53N<(M`%@z$_Z%?_~GNLx2!mv*id%Q{8 zT?-+;_{{hzvvX*!T!Ld-dQasy+w9;5!r45ElA|$%HhI+o3|zjE%MpgGWI=abJqipQ z+|M*KO26W($TS=10vrzTlKol|djvBw%h@`0CdH^KWKXdCKWP$O08)^-nR(n7MPH_7 zAd@QdQq!}gkN!tQ@_I{Zn*ISr-fdrsI3Vie*ja6t^H{yfrlo7sSXGvb&2z9;*6zXl zE^b$2wgR`MN^THs*sn0YbVUt)I%Ok-%zrpcr9Tor%Zi&fdX*mxF=L96k1t@KBvLYy z<#4dng`nbcOpfd;=Gg6tmm+j8Z3T?IL~K+-WvNb7!FPuZIZC}D8(=O+5baHRQx`E6 zKCr=hop_M8j(jrF!}t3!#haod60$jNbrrH4Mg5TdE?FlZ^v04ZFHEfjPtp91enz*~ zwhr3E!bI_|OJ@nPc(bpkn5N0=?!R^4$lf2jDiowFrJ|iAd2nQS4%beriCXwa0a`#O z8MN(?TWiOmV=~1h4vO&AJSNiFt>z9dI0T9`KJvgG@8{&#iZJxVe*HUPGr9Eq()OBo z2n_NbZnFB)2J6px!E{9IQJ&@B1us9PH%&Zw5^WHd72_Vsy8Z=^yg$Ek0WGkDR;x zjfmbjR~g0-@b`fqm&BlvRmj50mLy%YT>%($J`kUVA|Y0pj?!iFuXsU$$;(6^NEEF^ zE6~fnu0^-2b6`0?$ug+m8?FOgaZwYwdXKuGrE!ceXLu+`I46?q0D~Wx|41Vx7JrUN zf7}ZzW+X6DM=GiyKNlH+U`@i9s;O$9+&QQm-jwrlG7;L`c9`v7Uo^#RZixN9*uVNW zbXyfHi8cjM(SVvy%qEuw7{%w7)YXl(gf3MexWiC!>zcfGOy%@H==JibtV{18E~ssC znmdxw&r;LPHbFa3h9;OZYkXU)Xmp!KxZngo=83480IjocZN)yt>51T&5O$#a^r6>} z+(Kol2nuA!wSt(y2kgs|i=4w)Sjh^l3^{~h=^F~#k~j{ICTuw0W4c8^vF$j;g$60Y zZuVojN|5hdWXK+ed(-@zGEkauoZ>Bg39hY@k~C}ZqtA)=A`ESLEt22YFa>@yJDE(d zBE#7g%B0#4OkGpm+uHU}bOU$1A=3b=4w^K|poI4gGi$S<(}o%6tCin2J{^O zX5q%h+cL@m^)cYDd3oN4wS4XS_P26$oKX5~&^RTY z%JCXSMizr4J3XJmkCWV2S~^}oUkYnhO+IHkaFPJVE1UE4mgC9vP15wb!T-ukkx86= z8LfPt2)r%ljwVPucB2BBGL4IhAgU_nJJwcb4MPwKhB$6hJ3k)Z_!!9c>?+)Vu&DxL zJUWYsDGJgS^%L2Ab84IJKTCmSl@*1)oCN)4Gv4qCujfd)4^UU#CK-#>#xp&z;QcZ{ z>(OH=IP5QQG5PO^h{vgW2k14p|ABYkL!dcqjcw8|#U9O8MBl>h=8y;W7jHN?yk*77 znaT`4v0}EIhjY;K($YGxc0M=(LB0Am?Aaqb5KHPRQzHG?t4eI$m>Ou z2#eh}$IwQec&dDIs3MNRi+ADBT64OFbCFlU*tyWr`{$~DG&5Anm+gy50|u(e=zNdbHNdUC&D6T3>jc-1KWI_2gi za;WH-EzhrEBG3P+EKQ$!xmi=&VFNSrlqGAG8AM@gfRrVl+ct7I75zzI!)49B>6tN+ z$~XQP$^n@}nLk7N(jH4Dkas@zUoZ??M zDVMR~MBqc;-bSn3bbVcCnKAStSn<}2kyRJKKcT7!IQL}XoRI&Z#( zJ**f@S&DZFKFCl!1}-3*tzh}qAwI1|9Oj3^`r{?vzQ2iv8ze=UziWJx3kqaGL=DaQ zwmza%soM8yZ67i1++(Z-I|f`I{^2`GqwFOfkMXHWIkyOANGkllQL`eVY4`YwG`1xhuS%c}?>@E>W}^&66&+oP3{%!tCVUT?wY<&yylx$keq= z5MLz!u1rv-(U33cug8gb)g{Lr(8`3clhZLw!H$hv^&WFJU9US>J(Mjx-r`&>!`oYr z!>SPF-7D(m#?LDGo*H1LpcnPFa|7;1#~Db$;SGL^G2U)}oO7%Q#l+lAPTpMJ-(~|< zRkbD(ss3v7bOzq9ba|z)y1>smv%MGu zn1IS?QQuRQOuzh@I}}Q&KU`a7wKxwzT+(Q=hny*^us9|M>c@@2($IkQr%)-=Wk9qF zAvkSwt|QiWzLe2?<5larbrezDSSY(1MyU|K7qTKY;~|+0F0bIu&oSz^{e*}47$~eo zfqdP-WzTPX_`h<|F3ilLoJwTbDQNpqwha=3RoRiFav>JgV4*Z7UKmNH1}wm$Xo3iI zl1E^DX{p1ay25)2Hm%x-m=r{lNAJ$Ezm}e+*VOLu-zcR9Yq9;1ZFeJr^V){XmZ9{N zPPn2PtOG?K2bEZ=U#Mw96o^qWokoZ6yW`xqZ791Z_q2r!Wmk3wIRJ|?H#}2xesZV( z?c$QV`_Gb|%MZv1Ggq>L{$6!y_nIA|LkFQ6)kIZhljH(V;hB09oV)zQkbfNU1{5;9 zr|t4}s~G=xUocWpz(UYZRd#~n9Q*LTwccb6ZmL_LYRgGYLnEM<*|#XfP!vuSoTdo> z))6t#*4o1A=G{&bnL)v=RLqYPOPeD0llJ+-ocHjH2{oX!&;sr@mzqE8l-qsZ*8>)| z$IJzw-pmjyz2kOp5h_DktztyN5RapBpKwv~oNGgGkhFYL(D*-D08x$s?MD6PoXbFA|3xxghaw&e61fng;yCS{1D3dn z8#O+To`d^Tkz9dRWNcf|_H)CsA)(F9sAo%!nEeu8)EfadK;p*Bo2N~jP67n){61NP z|DJBpl`BIve+`u}>vYC&jC|_Ao7_NP*?jn#Q1#^E!dXKF)*=ZUyr1O3i7i2)`{mdS z8ynp74C~b(1*);KW_%QLQ<@L{lAnX`rg|tUas5?f3fXIRcD(XZf|vK(SUnbgBRzX< zeR;B{fhud?)||x?c64m*$UC^1?c(@uX%$-KC`NF_?>MN=bZUH_eRB+yvc)vFwCoFI zPPv|a!1w0D>r5P)bq%{$_EPP9#i4U|?A_bb)qak`hv~|)haSHzjBmC@di<$rUp;G5 zTGF*$P>V9ng}KC4*4OgjpnMZKwm`^R9eGnS~rDdPdB) z@zZ^)^XreQ>cU?MLB#j|z2w+civ_e+5wh@FDppLdTW@h2;n$m14zuHz@4S=s*|?Xa zv$qXahL!G*-W)Bmp40gkhaES^VVt?=)<-OU;&p;b;}V zVc`k%hXTdOe$6WYcZQCpa!$DHIN2lP-drzM5zi-<^qRh&b3Rv{JXhQj-aBVcvL~Zl zjC^ssU}36i6XKMEfDV4FY^(g5IZr{6ED90ylR4{1<1(1sm!^?JuF-(W8kKX__67 zV=J(ehIS$>a0x9&9==XUxa3wPPtFznP7XQBv=c&t`4sv!oS-Cl_cwg%%(t7F@@EN+ zuNr+^8KSZ{!#Rq7g;gmaP;Eelk{`UBcmFqF~imfFL2~5i6^42%{!_QAvQL8 zQ0yyEGrJX4mjI%3)S)T@QRVN*JP(w-M2=azQs}=-`y?gbS?fLFahVzaY{#Og+Q{~Z z;>0OeXnS@W=3QxncP;H@i55lBeCx69I|u~t!FTSkEARI01dd6XtnTDG;T(iPE!g-EWkek%Fax=c1*Md;WZz$C0{t!A3uy2 zH#yL8smt0M4(JdBDNs5l4{B0OEogN(T3x#QYNOM(&n_}K0tuCh_{R+(!1gB^#Q`SA zkJ4f*YsAW?ae;|G0WT)csvGyL_MwN&H6qv#cyV_;=`@p$ME=EotxM>eQNcd$?eO~+ zSMrTuGET@!~>Syq*J zoz}*CGO=a-DBqe=&s6~Eq@)kQj}WVDN!XUy$@*w-k^{-Kl^Bz&^H!Ggn9pNGs}(o6 z3PPwAHjpb!;<07hm>*9r#7_wpu*SJj4@}*I#2JgrOILbkPwRGMCz5O=<4RZRfcsav zR)5swm>UDnb;>a;QmOrYpD&ZG+HnT{DcdT+rgK6OEs8PHB1A$`l2N2x4a`Er$QGj+ zp7yKH_OP;qF*}Vyb1d7_gwXhw?&9&T(M->)tmf7IGGc&HkT(gMkPLx?KGG~xut%sY zrWg#@sI`t8i$Ns}9=nJuUl8s7o&^f^A`X&OPxA+PAOHVh|I%`OQQbf_Rk%RNXhKPy z29tnwU6~O~%S0B|Jdgq&(^c&^2pN1%;Z6>67k--e4ue(Q=Atf1z*w8+ijEu=v=Gj( zmW|h>H{94eq$yn|0KjA9H~HJiT=81c(uUmTA{Ug8$%KXwcHD&lsKYf`Gcp5@3z*NhaRs3Ph4XijiAmkwAzA%pvb{lEiUne zY!x*L_@%*9Y#2l+AH?2tFzkaQXIfIW2>o2l4Eti%{FJ>5) zjB9e#T+h89OS#XM&A)#%?vL@xw5)K4X>+872EJV+#IOTUfciB{!AsYY-&=@vXEq&k za=2?To1~kUFQ?6tCaMFSal-Omx$t??$j@{TrSOwr5W$7@Urpe!MpS;hGibLu_qah~ z=(#_1rX?dsX+k0MpJX1^{RBjh_j_6a3Sa>G29L}3;N#H9fPRnCf;sEX7f4)7`&eNY zt>LiW(0(9{t070vhLP_UyRy+zBDQ~Xcfs2CV4crKnGAti6TdOjG(W3skudVLXii7Qr#?14HyIP|C?AKCD^>OhzN2dgMM{c>4 zQ$+roep%cdS^g4yYr(4lnFJjLFwlqbYvOUuPCpRAb+lr^w4_`g+%Pwk+@0x(Qe4)0 z!JsP4m5MgJmzKU;BzT=0oI~*V+t#dG9u3={Hrp*1Be53OHUWT0?$6h(Raf;&MH)-x=QX~CMMYyF zJYeykrK1HH$1f*`L*J~B`XK`EJ1ytUc!$az+e)WAAdredxoyZG=Dc`|d3T!Q@bCSc z`7%X^89LHV6}or@TX{)#|DB?__-tNdw(ZAvn8~r}@F>j!IWXC<#xBw$ z{H7_9m=1Zk`Z3oQnki-$tyd*{}i|G#|hFb8s8* zqT!PyK(udtFx70%t>qp43u~`KbSAdk(%8CJ0<~K|I+2L zb4cqcwk6p>Lg)#F*^#(lqJ2f7&AKQgwSNP>KmOz1K3qWqNtoO*@ZdCIU6d*k3OqoQ zh?Et?q_5eX6|%)1oVkP`JQJS@9>n3Cd6j73;Ss4bvStp=*cf&yU5pykCfE$5h<4H3 zyP?luiSdL*YAWzT6_j3dyl*v$<;hF`2NHBI;%RGoJCgwa?aF152Z`$7pmmA)d3y7< z)wy;E;)oE=#MCv6M0|#@usVsiR@q#>ffaOnJ4q}uK5wR+lsPPnsiL;DEK3{z`RM1< z#OW$XwV$|8!i3yeF1nA@wKv&riM`mg!3Y}$6c#RUem2Ex4RL;H#|okGNeE@}PfVm^L2;jDjU zje1?{+r|W46;fGpYKe&gYqiO#@nh`NScak4l|-PXkNXH^QR1qBf$hZQ=L~f6WR9_m z&jTM#|C+kYRCR#P^;C>&R#zbs<6dW&EVDtW}2P0NgZ>sIoi+S-_ZUYscyBRcpLiqP&qV}ta* zKICbfzgkL~e=tZms=fDqkB|0nV{I>>MYaw`ea=!6aNzhiz>jQp-P}~X z_j;UO^X?M@x?580psJx2om(-=Fw*F8*@dUz0xKpqfgUqkQ*8nbvBPIScJXw~c1uk~ zM^n#PNI@yELVchuXx+BqeAeh1huefGDX5^J?l)bbAw~iY5gifi`){>>T{XN|R`o!} zXhnUk-UY*89U(9F*xt=;b-z^o23QY(x&4fe{;~bR(of&z8pQi}9iSGdBs!$bY^_u> zfKPmx>9okBRl2UxTF87%p_dHL>>-(9f6Qo5cE)ocgaQ|MnogY|Dba-8b=C1^4X`{U za>E-QX`y0{@0`=r{a?-SzkJ$W3IgF>?;S$K4xMr(yP#SPuB9I~TW`Pb<-LxFrUMLQ zveMGbCg>wT{@M=14zj+2KD#}7sOA9d4s!B4)bH~N8^gD?6 z*q6i+w~r4m=l5l%_VYSvt3ilyZGu>7RHn-2r7Eu_wyG_evSuD2HLOfh$1iFHgb+k3 za#a+@%;Y6|id+MCu^Ra|jnCVeGAsox?%3~Q(E@PKGKu}39E@q(5LF;>%}cKnig%!K zAHi#5)6F9ZEm=kgUwNPtCdlGoqO8v6OK?A(6Jh;wwKK(oEGvoNH0-2K-8Mj*DSLV|u9wwn1dI zGT1zgA}0C9(HV3NeQrPa4>^DLgkIkF^a>X;ah^Oa#`t+LbEW>v6nZ-jhzV`rSgC3~ zr1tF@eB22kSfL(LBXZv`aHJ57`!t5$8+2T&x1m7b^YF6#d>-Z}nivuE*bUQT(sejL z;`bTqdI*tp?hV3N?tpM`4G!3Umkn4PZSwAid^`AdHA(nE+qy1N&l{oUs^Wl5hEQ;9 zR=l<>6~~#w{czzg1y888*S>pPWBWaX+aW(y*ZnoKmHSOtZ!-<`d-oM$Ji89q&$ZLy zCG)vE&*Glwp&F$S>%_!v|7*w?QWxnu%vpqCHbj~%z)mYEG`UXrwIn!fIQO(=#j>&+UH*95fU|Y4&GK3V6;Oef zn$a`9g^$6rAk;jhcRW81{53-SYK(YMswyH=*S*!e?q0s}*4Tcoxrz3`1mWf3A)bMw zZ-jI}K{=X@<2jaC`nce6S!)6PLaU?87Y8U5{@S05soZf*7^FCwJJii!@yOQkI#>XV zAKgZV*$=lUmAv2qUbUL9>RUvL%$2RBh_HHBn`4;B7(c^ls%!W^dJzFm5V$dU;{7Bz zysO+i6d?aVQU5Vpj{luN5c7G+Za*)hp|5Y=BA(UVGhdU#`EGg)``GY#akvl2x{Uf; zA_Gd|{^lz0>K%BYyik(~&W}$Lqq_2G5FD(VG0>>PL0bo zsn;~H>GS2~@ltdoL8WoYGfChGu6@+^UykSNZ;ou9qQ@9yIZ25!R8J~BZU-q+>>ouc zLo8Ea#Ei_YZbMw_N^{!XU@5WwEz6M0~lMPn}vL12lV+J=0_0|GFEsirug*4zyd6TrmXP(4m}0S*~6 zNJtpFRY%C56#UCW z`|XkY@wiHF06Mu^-~yMRwH>~lo9#N{qmBPfSUbu$Q$hzg$TTJFU}x6RRNJx7aHm&K ztXePPk7RX%eoN%_lm^+Y-e|n4;p~?C-Oslo{m$QcvQS>Pv$B4w1_`ydsnR!r9k>Nt zYIRVcYfd!72Q!-OTNo4bP*Mh%^@%g~l`1^X_1zjL zT)r8TAXQAY7+E+mj9Mw0bR`~V6f*YFwlgaw|61lggDe_$x8JonY^{$r7-}|q=aS{lew|^I=Lxx@J^~vfoN<3Jf!WGvn)UMk)Gpsv2I;Mwm6}ra4y)i-$3l|()>Dd{%azcuXxg5 zeEien=Edy1|5NR(`%tlTHg|;4d7!~%*Uz3j)|M)zPAl2AcnTf0r?@Ds2j$hngUYb) z|Ka8BFqc}_^px^jz_l7*$^2@z-=)mnJjAqEX&{M6tZBNS{SDld8jp4`6q?a>E zX;~&`i`EW#hj&x@ra_{jf#DZ53sn_lOzKRnAh)4-W*gYT=bC6K58~0)iC1-I`dTJQ zH2hPJE~C_SI~pAoZ%!Q@ABP@lDyh+PVqIg{Z@@iZ(w1 z2fTOzR0*;-$3$wF1MQr0b-&qqi%KA)_if2%v(~yYH+@q6+|0t$$~b#=N}$5psw%Ku zQ=>xV4kG3CHV7obJcTw)BDM*J=wNVro9ln();?e?QwpOUdV^i zS8+f0X?%FJ2@>BE<+Uk?I>YahY2@+ZZ9UWV-0*FXy$kzTyLHuygmp>@Xx@b2`V2j@ ziMq1c-#$bSg^T)j_eAvVJMptq+&x3JY|HK%u*%}Fax1?Fa+{}&)qwx?Z1&htg=k+` zI0zuWh1jUxVfMIOAwOns#XZh##W*SAHRIJThk;Vu0IH@JKn!9Tb>LM#3H^0m#q&Kp z@LsIz@vu->uXo$LQEwjK@z7)TxWFy3wnV9!!D7Udw7MF=ho}9Wj$B1a*#=pFS!A_& zpAwLh68JO8J2i1g+DSWeYo#S<_-sncMZE}H$-P+)<&sKVlYiJCucZKSqb^q{w|~jE zXr3MC!C3e>a|me0_zwP7se`wACm&a)dx?LECv%Cc-k%Xaq zkX{neAu8&@PR(b|(_Jqr`i@=9RqO8#Wq973+zp?jhIV77WQlGG)({k{tDW)rU+8-E z>sd)ow&d3cTh)en6>i2AsDA~BVMW+0*Fs|@igXE2^M0LE^F+&Wqtox!JI%5KneN?_K{|qPoff z*BcHj@}k$bcAjTulGLfq7l64v+ICrRq))`|0B>%eSeNPZgD=G#^Kj_mI+}mrnu7kR-m(uc?^Tv$jwdOCp##^u1NZ&T=PHlpp3dA}HHOy>)V2ncknt(^M+lHnqz8jCV;&&>Z zeE7*A#q64|UoSc&kS^*DErUiZPT$LR2H%nrKke_ZB0OAzQYwrn`977@(DfwWysTev zq6smKN&7J0PBk23EwRXVlL$loT?<#Ad_1nPFU>5)@op-EhW6?B@HT|P__pD7fXqWI zQEiNHm|0v3p$KWC3)c?Q0*WcI5J2N)-6EO8hfxNrfb#eUBYQFL&AltZ* z>Qt#<0pD^2A?y7e(r+O>Nbo^PIHbvv z>9hjvo3{U+(r!<_j-C5Sj4Z|ti{SKJv9wvA#q%m%Hrcmr6b5!75QDD#x-eE&gEwBi zrtS?6&Nhg_P=YyEw32SF>b$=#NE4`R?fjE7#31U&z38|Sjap18jUlq3p2-}!ra4~k zFK|vT#7ola7MY8xq-JfWneLD9c@=^ho4<|y*=sjUe6}wyfo# zV&B^`TCf#=Q3ze_@qYz*H9Nx?9!aPFfJY;H>%B4o^U!Sde&~GDOqPTqjQ|z!B1LP; zvRXe^a3Dx@FZj>q_NGU%v$^#!=d`*XSL{xZ8%MpMKuo03>gD118APfFHw^G{z2^HE zhk1&#-Jjc?p8`7=80{p-f8ud#F9K!wG@JEw*jDCI9;re+?E7Dj9vM zA5U4e8`6Eqc?tdp$PV8?=W9d4c#o1+X_DdpO@{m z*E+^s6eQ^zeF4E?sdjpk1FAmui+rw*&|=})t|@T#@RWfV`48(>qerx>v!TS1yH5-X zd|LBCH0|&>{g_9Yo`Ti>CJF@j$`I4i)MkXh9JV!c3}t#;O7fLziLLvwTgtIfZUZeB z3@7wDVN7%3GrV>@@z*|WY8J!?fOPyqdERNWtu~!%qRH)q&F23LoF!%Bow8N8&+%Ys zq*w*6C3RA&(*VzVkIb(F#6XMN>p1n%>vQxAT^kE1Da2LeBsGNZ?oZZNgfZnk|5U3x z!)6gvsz9eqgI610UDqLV%`ZWZd4ywyn3sGMu^j4+1LiJIhh1|Fn7=E;@Q@$Fle9wk zRK8pgG2GvoVk^?i=YZHd?iSG2ZKgMWqFQ@Qc zcKSLW+7V{VBYT^fs(GZOnj|~AD)YRr%%WmUSJqKF7z6=96k|{so|>wD+WZ6(4p;x^SBc=L z9R{scrzjM1$0k`@F&Z~)lD{UDiJP3-B#0d=DyFtj9{0Sut%aLRBhgNDCfSg_p z@0-ju-@!;u;G6pA7Edm>weduQeII#jD|po22h3HN1){tq%RAyfO|hgXkQsA{!H3bl z%UjS?w;S{cVB>Anu*Dn}^j-{>u3hBO^hgQt-ct^UyO4aK6Kj<$B5$aC)NbnN4c`P9 z>A#-6nB#e=4ui$=oUW{Hr=GHvsW2ZPs)ZwqiXfuD5^|6LN*RZ56rt3_%oFjc{NgI? z53r!uWY>};Rc$-TiiFDj3?~(f^*_+1Qfm(&=%^Jzq_#Xg9lCRAEimF_r!Wm7@VxH!_PBjXvWDI^h4nwD z5Xx>&PM&3muydD0L+iNGkX1!}3D3{QBXS1PvU`n6E`c-)O%Q z7XAYjJ%3@_dF=kmefX}}*3qr-lK2qiyGw|1s^f4@HX0guwu=;JMZXw0)$tkiWD91f zkJhy5lWj~ZQmAeQs#jIJ68NlBPl8UZl^A}Vf8uDWNhtM9c-cqG)WJWqI8a@K;V*u^ zSvPbV#fG5Q7Sm}7@&gSEx{LuZNg~8@K~ma{m=?>pCU!zDgUF{2_p@I*_d(Q#{2lsR zJi7fP;5X+sew71i7~kaxeH~%g^sO(us3Hx#rKJ#N7{wGrJLrZ}LT!I|Y;&HBtJ{9@ z3q%h1nm@ zYBg@)XqS~apta5C=r0`hKOTDjPCx#8#|=>s{16f|1_6fw_R|#{vIX|6*$+|9)CR@@ zNyx{!e_$K}FFhojA|X3$+l|$&sE~xLM9PJZIe0fZ9bF7OgtYH;e-Nd1x1PjzJ;1m@MJ4L9H_I9eiojD zM9zWUazsHRmA!FLwY(Y#{paZ*jbgK|GnJ4Ji&r#vUs9u1}6SF^Lw zh#}W~Jo?8YWKV+0rtSTAb!C{cJU*`!Cbzb2^uQOh$O%eay*_6;k>WEnrF)cx862`SS zgEDmJ2=%b9{J}HtvCc+37f~zPji<`}d54{XClfLALL5x(g03q}tIshG5N(h7&enfa zv>g1xVv40dM-;2kr5JudWuxNb;KfCVa_KMxkyH!aP<=}%$akkE^IjHhA>9V140*x? zO8?epPNi!B#sxJ`Bam%HfiRIV^5m{bue2vFO68ZN*)Vr_vf?=}-#F>;ieDrVBL_SN zm`$Fq1Q9uGRqy~hRc^w!8DsqO!c84N7jWxG7p#Wn#J$QwkGO$&Y&WeO3}hUx1Y1y> zc637}z>Kf%2AP)+}N+Y{ei$f3EBG5 zQAvt6rV|ciBr^Zn(^%;`vik9Ijb2WaIQ3_O@eBo)K;uOcWXPN-d`oi94+>~jp&ACw z<2i3719Y_ToBK!}%kikdGO=d=##p|7ZtwoB1NgJFA&fE;o;KN>9|J?+(>e4l05&6j;@V4y?> zio?8h0oK6u6iyGcJv_o>wm}B>0Q8CcU_fFex)Xp4^XBbPml1Dr2 z#aonGjpi#w$UcJBO9NL~s({7SsW{-x*@{Qup|;($;v5Il9_z81_ty^F1YEJQ;XNs= zRxX(7tHHq_|LCUTn&GS}zWLg>`6&I*oa#U1;JXVY!mzng?H~Cu2PS+Vm(%%?ap_^_ zaa$!<&)X65Mq}GD*|L%9$xXtfYZmcSEEN+BmfUHpi)w4vw@G~t>>!cCqlU6_8e$!M zw`Va@a-u6P7L#Y>Ns^5*#ueo={gw_DyL8#8UW4lJJUojjnuJw-V{OhqzKK5e`o19ck{M zT`s%UQrE1fGPQ&%GA2+^A1ZGG{yQM`AD`B3eN1qaIJtqxTb}$OI!iL;23<(Ua zA+g2=LU0p&vEe;#PBO{-B5okQ`o~3nP921s=(+lz8mCFsOk$=81YCLr$31Xvx)xdb z7nZ7BC?6mnhFwaMC8Q@{2s}VxVEd;y7iN(YNvG3>z%7DRPHbVazJ-RqDK}yrrN>%n zr!j5&6{+zVCQG^=8LD!nVtQdu49h8)_R-L8nNvr^1V=8Xxhx?C!lPN(v7h1B0h8 zJ5u5RClW0wjr<%BtQyBDo1<8J&kMuO0ZJG&l9oQbik6qPfC*=x^EBqs9G5`bCsNU` zerDHLiNC$)c=OmLe{)!VA;)gPD}Yx{`YJQp>@tI4)I#D3xg9bBC-VdGQxX9cmEO!{k0^f{M0wfTxY~iM071z`Mv`o zc@7u29Kb%~G9VB4_0KlDE-3P?LoX%}j_b^nV~=oT>&O4j=ix>i`iqnMQ5+uV3z8h> zG`sWLdl9WYg3HNUr7Q14Qp7wyfU@W$MxQ_8y5N|gzPsg`rW+nNep8HR^ahr0k%xL) zgCpoUsng^<-*KLO#BuV>2$|?($3?`9bX*idi`XEM>eL1HBXqK?)z%Fjo>^W30|f{t zq$b^+DU8@}OV37*EW%?s3eScBQX+|U_fOf6=8B4+F+ox#9>4RaPT>}SbI}lTi9s0} zvEhS$mFLVFj^nN$SDTo{vJ(&|rQr_ll4p_mBLHLutO(PMNXZbSa`;l^)4OM5r>ES& z8{PJt*V>LKG6z7N+jl4yUH<^F{PE>9ZnQmOwjY> zreo zrkom^;Zhwh{pGl3T{Rp@d5uF>HxNcogt27yB+@d!X^ZBG>oYQyCKSWaFUl3~c0rs` za7`DTNT`ZdsViTUb0aZfFWx}&-m&x50DAdR~F`qGPLP~)|Bp-zKs9NUgAOn%4lw7_f zKuCfhU{J!Y%-ulAmZn#Gwi*R(_e` zQOYCUXh74m(UkUUXaKYY>{)OcpH zZkGsA3pHW$U`A_1n^04mQRd0L?b<}FstVrTrF}1b8}S;-6^sYO76lAt6)GShE$6su z&}u@}d5X^Ylq$~rij%j(f{QROYZ44Qi=%k2Eqb)EK-|4xO|pzyh)6uEYJ(+wWyNV@ z)9k5(^Fp%RlX6bCiyQgYZX)?t8B1+nBLTf-KMt?sBd1XypYfKF;44b_ff!9x2Y;}>LSU~m-W8UtBqZ- zJ2^}b)X=wEgz~yVpLQS4?zk{bxHNsl9$O1=)~_GnS2pSoj#~kz1yenW>d_e)*V!KG zH$)1$+&bj2{ zO!Bhl_Lv0gYCwP9>}_{e=jS=x;swF;Tf_4+;6uG9-u=m9$FZwEJWU>n5LdFNxRv+m zz1$Z796r!*9h#a@K}O;^(DNIwAgNXRAkSFtJ~*acyjU}`YnNyMzyYGMM+X`zCi&oY z3NauJA*3uuhu8{>*K;26o)1+ha}x`#n4K!!Pli|#y!JcLxD@mb(rr7mZzr(S_y%#( zr2f?odL}{)g#UmK3w)EuUpcT!!7J14v|N{u-GMG8Bmk<$H;v>RX^P2D8y40CW!C5* zd6x@^&mH~txS02)uPV+hJ-NLuMp6--qgDT@l72aEYR-Ws z)YaX*c(;UUqzByU2;7&Slzy@IPn)$*1ib4jJijG8ziYE0ctv&qI@1$0#J+H|-fKmc z&#>GUfZV?Mj&0zorN51@tZ$lxfAC{*NP<^|yvJ4(S&&z*7+Hxue}R&8*r-BCQ9M@` z%(QN?-iS;A?kw43+m7A;5}7K$eqC7$F@$y62fv$BLVET$+mAcrHH0J-V ztB%3OAk*;GRyiNwhnJl%rKk662BOB{ctMA}?1?E{70IbzNtJTxBE2MHwQQ0*Rzd)F zyC9qNDS7?uQYSEoTJ$J!gs7j{g)z`y&D{Sob<(DqOFh63OMvMX8PDdk6to;~fwI8G z+#j9<#VdRDxWH!J_P;0IDRFjZqJ7wpb~Wuo4HA_YGYquL-{%rc@ZV;tucV>+k&sf- zUzdY9*<`0Vto*9udbAkxx!sCYQQ-|JHD{U(suU}tgIfkX0A;t^<(2)8!lD>h8>^TZ zi2z`F+G?Xx+B>zsp6Ri{Fs#nSGVF29Q$G%8UEd6D@&`+^X_>;DljDI69lKMgv z8y)y9a|9-Ao{%xx3zmB>Hay7BlUNl-)U`4a9FeuPC_-NJyDM1w8w(!xAg| z-Co0j`)4gE^-3lSJ#7GQ(kt%2H(GUoFIT)|$nH5~M4KJSsh3GpY%>kd1qWgT50PO4 z0f}FRF61V$$~0GDz#T9n>=OefQvGjzuZCg$BkO=0=W!6CKZ7iC!I@J2;D+%v8mK#1 zKh-axASlEY#ukNBl#tG{kSHRXrO?}!7nIow>`qYjAWh6s6uDM1_Zh|RU>i)pLP)-5 zQumJC#evwdy~fO-W12BK>_FS>2%=ZnOhck3cT(L}OYqpn&~?&f0^AbUmfR~K5Hz)0 zTvtl`3PyExbn^P6GI%`}WtU$iB9{J?P#f!TVGj_HAJ}ei#f+#|-V^FFjOI8se_cGS z%)~=7HnR>lS!kCBr)6X{1wg{rZ4nI?haQn)k+2%4EyICJ7l~@HCo?c{Mvz%M)>)mY zH{paau5UOiTCjwo>h%9sBPp!bna-aB_n#on3%-ve4(N0@pUb4qJaS!^Z5E4VSrWv^ z<13uqFOc2(bv^R+0JZK3M!^w z{%xjVz&axO!m-5di2xx*dP~qP3{ELJZPv^risz^o;JbEIzQqIbp9)+M6X2!ssyK^0 ziCs}$e`DE^tbd*=F*yl2P@+jNpc@q;T>6^Rzha{alZmX38F{$dU%r|NVGbt4Af9br zjV(J|Ms0b3dHwv*5?r*I#dkE0O&e{qm)a{E4A|CMSp3OqV>OK#NySCqr;nJ+nbE%% z3BAn~zrK&D$1?mZ2TR=tRNh{dTn-nCA?M-0k1vs&eKK{ZrfApPn7`)v4_(6y+a=aD zO59Mc7AFKtdK(&=?ZH{Dybu8>#Z@DX_@?X>!>T*0iRO>qdyf!iPh(fBY>+jUE=o#K zb}fY)JF4zWXq}KA@1!4>#(o1K?UfacZ3Zr*7dVe(8&9ntaF_cHZKJQ{`je9@84jB` zS%KhNx85=BoLI-&JKqn!b{nYTqj_oqHPO$(y=zY{{|WK0Y*~;sXx@rDtW%{s@qNF_ z18W{d_@M#>1+xKZ09@n5ELL9qkxn6;9iznkJICG$33Q{zxTFhqzHd zdPHiMvBJ!7KnJnC8@fb)daHbm*l`4n24(_|Yv4{H%f-?87ep;c^g9=Sjq(uh1oDjQ-F zQJogjTz1^BbDzY1eqWA0P2LzmMyo^6YNvvBZM`@TDQc|%29+$GQ|CP=Q^qvKl?_PS z!J-r9$wbko%MDBq9;~@2V1b1AG9>row(7mMbfd(PyN zb^tFneB?XUq6y#Q+S++(!(|4s1^+G+?fB4zT4ElwWG=@Hp#@7+@LZ{kSi$F(C#{v1 zbk+;g$waE%F_!OwFR$*>_pLg9@p=4H6o7<&W z@i%EK8g?EhcF}!WYWBvGH4^p+)YArzun)O@!+J@DV3?BQz+vB0AuB_xrEceP-(5Xx zuv7<%s3_Y{YOui9SW3I&u`?%FPoj{F)ogS&(r)tvfFO}Xr4?^tY@cUe$SJ` z$T7^U@D5R?6hOVMQP{rRcs6N<35UujN*CZSYes&ct9?uo$3hpeV??P>&mth z)-1MjmRHWwjlXS?AK%niz71#(3p?}-Ea!EmaMAEQ91Nx~J)UsVNt8xAN~$DL&s#_G zm{r?;96q)Kw)&fT1wZI|owttJkutkbR~`4bIytrM_a0xE|8sh=iuw`~1w9EOl`OS@~7}a|M65XBhzrjIfiyv0%`IAYsV(Vdi$XQ1tbZ zYtR|7O7Ii-DBB!JrnF7$+a)rI7hu0vL$|<)THyj0wXGb2*et)0V$9{&naG~xe^!z- zY;Gdr-XOTtCJMj_SBl~3pz@(iW;C}y5CLxYEdDJXEqEyONwMwGwB!se*fJU(87Bvw z5faGjbp@=gkxn#e3&L8JeB7zpXu&3LHPO^@X8m|D<=Iz@P0a0%1JKL2f8e4`aefc{3oO=#F za=G9l@E+WePkv%4Eu^xy+br<{~t!%MFJ^#ZVYqitp@mh=^#uDt;J4ESGE-fjUE=+)`2TjI=JY@SwZSVt+L zcxb0l`AZx`9RAl@YF6o6LgFdos5UHz~09&~E{;&Y!PxSsAAu8Y20^F1s_08(*+I*aRC1DH zo(mQ}3XJcNN_XS`{RcmGN{}`WE%9|ZxM5J8racC0KD$C)m^ zz^iQfO+gweaS{{+7vB_7u5HBi94i+4^`4TcL|yR|ib$g$)MME+n*s6H^t)~-73wwK z#+O=@o&YWlgrc*6Ap2dpz2!e5OwvHqi@gUU4bU$o( z8VcEk5!?yX+~(hSxupZF7O;KF<)E=hqTeDnk@0b@gl1EnW+%Hziv-p-r%oeF^(ukP zdb^VJ+9v*I;Lr_!-j`)~0+ly})*os746-;(E!)JEE7c)8RwA$lj8hJr;aup@?rdqG z<-otJmI{kZtxQev93Vike@0W`HWaI=S)1HZLGa9XlI39t+H$XPpIT|7SIz)7BK(rI1*qCHu8!C?iew)5E^cd6LG{T&}aJXAP(tCgG z+p77x%ENDPq)wvk@m4%_8Qy8a8E?hriFVi;Z2m2_Q`*LRy#KdsUe;8SE7&v-5hHcM z(NI**h=P7n20N2Jk9!Vc2QB+rlAg=Tj>MC+&H5^ml4na=Pfg1;87 zx?RvHEE_;%zV||j$H*f#S^#m9?RN$tha|m$Zq2Z~G?MH9@AE`?bUB*bGk)9W&DPqyK zV0^h+^K#T8D&#GoqT$VVCY|AC_*{RUfza{;AGV$`>@Cg?h+{!uhK}>?1k6-<2}aB z0&j{nB=P8cS8F0FeOjXuX;_|GXv2(l(8x0YNKZ${sj@Vsx{XoU8e?Zy!Z_hHU)JYo zQMAFQhJ!jpz1IAGOS{!U*`u{7lFtzFNv_Im=avJ@x$A3&;^)ZVZg7F%9(|@PJ z-H7ayOXO<(O37f^A#YfmD1Bn_$SQkEhp)=)ZmfIb@>CkQ*F9H0vW$YT_QEYa4!{2w zw>L3?IA!|D28&HE3?5`+5~)!wV~|v$v~^VK2*{)KK-zAP7q*jU6 zR8SCSBsIa2!dNl&ypTw36RZ~s%r&^fTO!;)U>#;m8!(~3m-GqTxQ)mQF@wamxcSxj z#)yg7qF_h!^o|}lp>QWCgwj27qyzjj%`r z`b@fHNqh3+4(N$0qY*ZM68%eEX3jN24yl-4;$+&&4B<~ z;-9ywCD^?&jE&AlH*fj8n@+l!CJiC$bZA|p<`ZF9ZlHM!Wg#mO)sZ5PyIO;>_8u{*HZ>VGfAOU z$BgPMVvEf%fMybv)V}*`hW}NR+xa~ZMr@M+@0l3hXNfL@8&WWB8}A6KW~fp`YT=>% zmqij|23fNgZS4&4Pj(`ozj{sSTp9rDRdw}3N~Vm4%A-t~qTQHH^on-X#=arBSxkR< zK1-J^w^6>wrK~!W*W603=8?X?l}UtrVnZ#R3$@&r?Q0GLl$W*+O)f5gPOgIt@5;2amI(HE_8qZ#K`ifQR&5#0#~4Ej0xY1TxKP0}5Rmw(C3Er^&XOkmc` zpM?Ni@^DOaxj}x*OjDGx)!F@N7X_-StXf%E0JPohBeJ6vmYij{(5-m6Ko~dSf$3;K zqRY$OsqoT7q}V2%cfR3gTe~)%Ea`NDC?k6}S^V8)q0`ro&i3vBulmrRAgkQyz45-X zH^kVkdurbDAOs7vv%~LDkn-6i+|HZ@bm@Jq-9!CzC9PTGI8+#VL*$lU4{v_k{ZJGHjG}#WUkUTHXx}uF8(zhv0|0C(h zx|#pv-)@BsIvCCh!KYw{RrNBzA3{RGYqG3ZVEDu`P?X3UqDq~8pnV2hFJ~s?0Octu zVp-JKL@nC0WxF$#?m2@N2MvdO^H~0?{HOj$~F$ z^R5#PWBF|YXBx5ZRMtv$MMJ1=YrQG;Q7MUxkx1_YbIR1D?8+ZxX=j6+K&dC5NQ|Au zmhJhDI>)*ElfAeH5Rq9`bpbZ)J)KqDB<*FxERODC4AJgDq(hsgffovkc5@Be(3CQ4 zgdX1E)nH;rJ09x?3*-mea3-?~`)t1%TGx^~;2uqMXf zVQ?^@--7Rjgu%6(P)tBlCUzhhyVQYzQ(*{r1;l8AajgcfY&$;OAyR^x9V7}y1q$hu za#avw%%}7mdZ6)dva0Nr@vs7L=n$I6|=k)5yW0`GLmxx#A5zJ$;B9ngVfUJpW& zBB2Q?`XS7JBd1eG-@Mg{BG9_H@i6)~ilpa5qpIOzq$sl%a`Q$mTnKASw%ZGS-4fq( zDtaZU^Rs%x>$e{`e)0YZ?83_khpw2(efQdBjnC~^myt5F<7BlCWzq%X?TU~Ve@6V6 zE5OuU@kvsCPc3gc?coGjq89`%)QGDP5zVpmsI^lPT-P!~8+^$EPlzbof`oIri6!Kc@Pf4W^&F)^b!(%lMV>wsy!0OdMngA4xCE8MoF`v%Ho zfE}@M^kMezS+R|1hg;sNv}6Lotlzpg!g1^WeC{-PTC{MbPNn(=yx0E?ZSV$h)Wn(i z_^!LPFFqmh>WA<=RuAFU|3LmATaO4i?PnDmWu7>6pYXmx=lgBzwT-vd4=NjOM`HG) z>iW6~-|&3eDA%qXni_Qx>xos--e zY3-_x<$Ln|b+YZU5#IA!{ha>ml)BOL8A{Kw9$FQ!NHo@5q0eax|GppKeAQu_!wYPV z^;a4bt1H39_dF8|jN9-}9YTy9Vu|8&7cXqE0b2YG5e$v_UFJS&| zib9BQiy8mTBJb$w;?U>)-w)D!0tIGl{5wFhn_EU!Ub9MB6oZ@&@fP(>DxINz*KzKe z0K9iT3`~uK-p#A52bU#Pb_~7Nm11(+Pa`wvh6GkJO(2vC&loC;KnY{F8?lw?b9j>^ zwhXND7K}>u8l$t%p12f^{)URUa-lMumj*Ou?T3{{j~tMe0D@!S(7a!r=AY3Y)&ke; z%YO56EAAqna03-Fa&*}VMcO*#y&59bpN9DkVAqH43x|bK2#~I;heu~>LJMWh#zbm` zMbf{f3Fo2`LRYAtCY9&v#;inLxH#?Y3q#8Yo2&E#ouIlH1*NV)&CqxUK_(+%t*)Q7p{fa7Nbw` z_pSfZ+J&&4$>C!hJ(fzt5Dg6nR2NCTzRuD9RJ&LIsr$6KRdpr9w9iXZ$oO&_cy>G% z-9Csgz%i&D)ePowc`k{-Ul9Q`F47MY0{2+w;{!jsTUNXqGf>p@R(XFi$=b!)dsA-f zn;iax%&Jwk=>!`w6-x!Q! zy6&25YqtCnzijSnv7JH>d$jEO#HI)heyq6SwSYXio?Y+CaE9q~T}gz;sekJH0xdq2 zUOeBG&XBw6Jw^4fILIAPl&EnIenYI9UO!^Jw56?$q4xkpIApan*Z*3WNYoYc)ZgpW z5tzslO{jXj*lctGV7K}(89`E8oBrAOXt4EK+x*ykTH7HO|1+^%vl8U?9p1P@zj}I@ zno+ z+thx1Ga8(?uUL-jG+Xgv`5V{(Cu5u;3@zt}&o*RPzN=OT^|?lMA0|V328gdv`-fd4847jd)kh5hAta`_0PPmXA|x8j9j=5 zgK`&ACH0@b|DraxIit20>a|fhOr)s$JQe(XP@3(0W$id{Tz^n*J6PMr{;vSwyM2rW z%wN2(62j##-7Np6vPOj54cucm(EPtCu ztdHz5vpdh8EzNG-_@|r_%)2`udfRAyAoUh%II?*IjZm^x@n>ZT$h zdlUx=XOeUFU95v?O=tRy#m+sMW%MRaq&;jKo989`nc*J(j9KyzKtKIUxJ#_j@(mVM zAE{DjPr_syo(UI->&-S#sXsW71R`;h>4h8&2-MO@|DJ3WMJphBsj$^bK&*yVAP`D+8WSdit zKjT?0?^{2Wjq#lCYSZlk1Yfyv;~(uK3(@li3m8A`z6NVZCU>+rXA7(XqEVyOv?4#< z;Vin!Eal;9T) z?G#k8j%Df<+Jc5M@7vb=n{q)XG3XKBoy+z?sOGl$js5|n#Y|q0o=Svf1sJUQW+A$1 zpPMA_5qFG=Ebq$*UVEE_%)#?ci~Z1BDoDw$Zl)$zWTNKA2Qy3I7*NO z9Dmd+E7x4`yq61G@R?qSpf_r8`Q4C+U-%o^f5Ii>FCTA=Py&2n;res$xieQNVf`Kqxm1U;o_G386l+7gEJ zhB&%9o9YZrR19O=ALxf5xc^K~#Tl%^GA0BWE9_b}qbN)YNWGH^eIfvS$lN7bkUMQ; zWllcJ498lT-*4aV*J{s?)mB^29CM(LKKeM-aUaNXyP*z8S4&JwZ6X$l zS`oN(<-Dl89N-M;%XPTw^KUl~&ZO*rD*Yzimsm?q&B|6yc>=uGCVu)wi@2ctSl_m2 z`*_hBJm!QOo;hzFy;pf6{;w$gKiB_XOs0Q5YJ-3v1t3B-%{3^>>-FhJf&bxr95-+o zVQWf4(Qk%ZhY;TeF{JD8<2#z0pB;ECY&xbaFIaiEb$NkQ6;ghMjvLG zJIq+8Gq?u4(IiF14wS_VE=LP;g{K1q=`spSz<Yo<5-BKzLuUtj zV+KJ|=y~x6R&=vX%LUGPCjYx&b;=b?nEv4R$mMI~;`8NN0dlW#r|-LeCRQ9F4zgf@ zUDr=n(5mu+3-eHmia`%(_wDgXx#7f}*X_rQ4{gCYliJOe-MiLtz^Wn4`axL(fbcuEN z79s+=rAS`giw`mMI6XHuQ?rYJ8R(Ryb8Frnq6#oU)BHe ze+_)(Q-?oe%KpH9UHV+RT#4rPVN7-zK0(QhO_LVyx?NBcYh~6Cj3llH;8q(k4x5NS zG-tmPg>4EvY;$hyD4*QPJ&Y+GUhk0sBy@^ouzhsWqS{0FxGW5mPaqUpC*OMWf7SeY zy^Y?%Lg7!IlEQ6tlV~(MhOmfTtjHtmdo0GkTC%J>IqmzNZ zWwh?l0*k1jl@+PfW~pK_5ItvFTQjYB+WR6Lp$+`($Q!O2qhcF}o;IWF7LL>7E(Dvb zYyoRYDD~=yAheiJH=a7{q>VvI+nncdrMv#p;}x6br}uK3OP1USVqTdn*@v7;r^T++ zpnvG&#hA5<^qhMnO$(a7aB~G? z2fVR|+Am!1qu&BMOaVVscRLLEBi*qo?;0aAr75ryLZx`QG>5KI?v#Twl-Qy6euRjm z9kK}i3DyNtl9zVBf(fkGjSVR!o-rxpII-43zX6g)SHMO5nxW3@TL+|AZ9chL3CSTb z=S#n^>jjSMsM8*VuB8tB<^a}SpCpS6C`h6WNgOGy4fy>IDT5PslX%27ius0ubC%C~ zB;UO92m>&L=Q`Wc84TE^Z@<~B;hBbx=WN&g0sgK8q>aH)6xXx}Rw>w_ol@e9o(eB-JoFT8fiKQQrrogE7n*Qy{evhlsk| z2mDWwhf#_kKr;~%_{MDTeA5Ggx?3&0>_EMehv6qzk_pw|cfFo-AG^SRctNrrcwXdU zrfa0wCo0(5yc;*F>Kho$@!YmfBe%Z>eCd@{N*+vkPUu6>Y|1V%>F)%bRpO%D0XY1; zKi$1WJGQbqU%4+EaqK>5_W>CT^x*KgPM*P4$#R|j*AN%+g@PY5d(o?8JP#^p{X$0T zGLi`b2U4<){ETgx2yi2s|>x+oAJAT^$pEnJpnFLX$_ z(;3+#D_7|av7~mC*{IOstkF@ywP~wZJKXVkGaH-U6EBgIR$)srJ6+j?g}&eBs; zV=qs?pS@ZdV@1P9Apg-EfHN^U8*y2@U$RR_wxq_<|7KdK**xv_0R3Qs|4bfE0SWLT0kP}*&!W3Z5$r{<3v;x4NbW8Jn|*U z^PUQRE&F{3f35os|C4jbbP(dumsor`Q5D@!V@E}lLtk^&kCfcty-iRHS$M@$F>7Z_pf=C|>oTv1B-)pHe^`+H5Ugz3O^|-LwEBdU&enI9jUZ9$poTbd2a`k>`b>DaHv=H# z(6BlHT{SRDWGZc%jf~bN%)V9_p3ZW-uW7j@NoisPkvN`Q)e|72mOm5Jy4km!P&<~y zH;V=t#wGm2p`(|GiQ)fwNEyH~qVo#GPigte734Y!ce8IcJYTyd77ZbaLj=VP>##=+O zYvx|@yLPzCJMgp}p(m!pgO6f_yfqOIPUv{I3BKP@M&26pv_|2+jZv|$hIj){x8pQd zbD+s&(h1&qj>f0=vRU;GNbifCVT=5gJe02~59Z*!jEMa56Yn;^dMEdB;9* zruh+P?ZyG5jSh%>`_uj0;Q6p~`DG?DAM8zPl`sHLpC2T0fh~z;lr^W{y$#MxL?73> z-}RbPb~nMdjKJaXn~(rrpy&`csdRY>uaJA!U$l>h%uA199-;$!0BZd_=wT{wIo(0KFyUqW{e+@+V``)d&`FhqJuKq%2T z_<6@*qZM1n$o=@6lr2{4WwPt(ygtewlD(e*8f~xILwq+*200o$LYd4)!5xOj;k8#H z+QfJATXfz$=K3w)-n*kpXd|fXFbDbyN<9nzk=5 zG88E#ic4(#*w|VDeUXW75J(hWI7;?U2o311@Ahk%^`B>d-}qnJz&}G2|5l0UvVznh zhuTUN&R+S;oe@}}-4lZiR&B-p0euayBt|NMtsTB2(A2mB+vOeJ`zfl|0yII1D`@EI zGEwpbiMERW%PYXP?wcenKoC@k)A=F-m)i}8!RmW_95n|~dbu*?AYn4}ls3_M>B)>p zLJo>J@s2v2Oc~T*xxJE$YN_gAa0nAD8{$es3rKq;O5cq#jtB->mhk#u%)`iH-fb@@ zJ2B&LQfvu=jQGOf+j)GJpMDmHQtfVCmeAk?I=p5FeM0RXx#q1DBUm9ZEChD|&b6}W z^VB<|5VDcQJ`~}43|jqDa%y9mP!7UG`Hl_300zLwkklF_Ji{@t8%*4{siU!jBTHgm zVSi>KvoLblWaF@yF{Xk2OyX`}YS#qSVocs%jFhlATK^T8e#{_JM2-d;+ir0B_pJ3X zWx|SSwZbNAp@d!tcfw#feO(L--4t^czO)DE-_q?e8XTfMuNc&?i$YM^KT_-~!!&rP z4H^3qSy#!EqV;^hUKuKyzF3>pWFQXWG-zTYCDer%-7ibs7MD*qDxoH?Ku|9~ioaXW znN?a@@@`tMKH`7oa(lW?M%9__UUomJz3v!9v%R)PR8MEIn}k;=##-#_DlFym2nQVf zj-ov}@9(}PGyXg@c!2JH;o$^d)+dRo`yQ4~0py%Oy8LWmYg zJr|3X@p?pCZoWU~9f&dJ{TO+vet-QH-906wpE>iQe?#S*!#)s1mmi-f5Ar;qd&9}V z^6_^6wqmWQQzQMg8V0OmRY>QUUX|4LbmcJA^)xuW_6&U_=gUVj*JJ0}A62JY6zv|8 zBj9w`;{^E2^RZ<@Oj&PWtsh|psHrpOFT@^A>oj~mHGB1Yz4%||+8BF1GU_Fvqjfgy z%EfCn>oZ}fR`JP&o2ML=;=@f}@tJELOLr_boYC<-K)xRKZyEW@`CdmUB}(R@UkTnW zdEbh?4h(;;dwrmLO-13cPxuYsAlvsP$`)xpSSp=9+$l`2CiC25N*JSC{mBA%5zRqB z`&Rm>oXS0vuveUPzH`Z#H6NlQld+8$aDI50gzI?-SV#P3?Ecunp3dW zOmfea>hR>c&L=xd-+IzW=e$xrjoN*P{q;$;j>T{tlyiY_xGy$xCRnyF>ZEsl+WkT3 z{wULh%ZP@AJ%KY2p@xE^_~`l(mb0K*1RgaxDU~o1K5=h`5C7u=XUW=|Y-vA#-LVqS zd7T)33xJEh=KWHPPe{@aPcu5EQK`St-f5fpQ1s}&2H|qtlzWB$pWV>*1HbNeh?XYX zW1fq=gnlrDB@-0!njYWF*LHX&nzUhUlIr4B658d}GQC?2gVWGhIG(tg=2AsWz-iLt z%$?rUrEOnOyIwoSylfo`gx7QY82VKsRh5^cDt2oCml7ii zHsaQ&y28j2x!s+=P7+^n5aw*Xs}AXI#CJTl`d+r*)+ou%dEdeR>gA3Xyw7T6!4-h* zXJ@U#)gfQmuotq(uljr--m0ge@##76aSU<-QkfM}#eejn65dgTi2`6y?aqE2+$aGRt5 zL(%2!d5{B8Xjdy+P)`(CqSdKeBRhDL{W0dbcGjui!NR4?OxrQm1Mpa2&da8(jLLrc zcPPC=JeF!=uDe?TM@;bC2hypRuQDi?%F?``Qsf@j7^H?|vZ*!{f?xLVMq^7?RsfPN z#VVClK1Oj(@IgOCcBuXuY4r%Y1PG-`1*Sjbm?+ zlTu|?ZX|tQauGJ|1Glcf@)>I$ka+j^L-e;IYB|q#w@KKSlh&0ETuw$Id|YZ;q+WCc zKh8@+2#zW>(%hVEHLCZiv!nwfUL;j_E*o+3$5;w^6BPIoo<$^EO#=2pAN_ zJR1F8+b~H-yLR@rhPi|k@oJp?vDV$Zx}c;II1h6Kj|-}EIKu@4BaEw&Lbno146d3o znBj}rwARG8p>(}HvDw|gtr{zS9CDq6%Pv}xfpYEO(v#v*xm1vSW^DqE_A;T1EAmaN zvarI3>SD*Im4nda!Fmn-ocrui8wVsldm~)pOyMt4;(sHm|K(n`m4$VW2-)69>{R+{ zL@fhGsCE?V<#)yTsBTntL1PQmkLiSLfg5e`c9o!SjBM<*{n)#^l=&n%>cY`!*A^BK zSqKqpN&=9@+FbyH*U&4HP#4U9T*kDkznNw1pbpP57}~KIJJaF?%W4nRQ~9k_(hPjp zShR|$@o$89E@T@JQ;8BkronG!Cm1H^yI=Lu#5^ z(b8czIw+hzG?>*B)}KO$%VR1cLoLs+-ky6lS-{j$9Lpyuu4)x zG};`2y~E14xktzDFUsSgj90xtYl5K&N!~ir$j`%3Wbo(6@3i#82&ui{4Gxk-^o0rB z^oh-dD-_PshfX4GZPJ$D=!u9(xkSnbCfWhFdKcbb%cGgsrJBdl${B+y7-RcFa{Oq0 z&xWI}jAXD`Znw1$biw?ZWJJ{cDzf-u4=g7+q_Y@t;Ez2TzX?U0&&Oe?w2`iosmux_ zbgPRIUxKMm)|FGDkhG;u#W43BA5-rGd#2jiQwV`5#E1p~LyOEWnNI(S>5DM+pDlZ* zR5Fs|D*aV)4swYu6eEUj0|s+s#DQHyL*TLC8GO7MaErydIW+oU;mxr9@f-yxjs~} zU>emG2N(G$z#~CBONUgeO5%ctibmvKz8I?uyiNYVw_Gn06)XLT>S3`^u^Y~p6Xyy` z*vid##`p-Xjrru(A1JIul0Kz$D-0=CcJtfKrnq|mpQz2^JbB=qbv)vuHz6CE0t?_IggM z5;@){S#T4=P(}Q>WKf9~D67p8Ms=KDAkZjz9Ktg2q8l)7woa!JP@BL=tP6uHb`pH6@qQ~ zi%5BJcv$_vrVjqCR_VdU1?C0=Z$jyWSN%-~$4iJ8Tw*&%A?Pr$d%kO=R8T&m=b9TY zR2+Hqn}dHwA5k7%rr2$CKW>!wxbCJ4s+x^6-d?k~&&@1egsBq=p>E8?K40IJP0khb z0y#@Lqu>eKmH6V36?aLNT3W4EvBqDbe(GXA=ty%o-2&5jHWh{o24{GI3YBdR2FC)Y z@j7O2S(E;OB(AQwCll$SNp7nkqCq2vjx)nv4)&8{h&C`3(td8aG^n z$k>EFB$0p@kSd8&O?%RN-^dc?PYHQVLz9=_P}ur|GqShbN8iTS8p@BAuSg(0oo>W!M`>vVTF6jkVzd?lOQZ@p}g0^W(GLfc~rzm{knmVi0?%W#S7jT>=75 zRe2_q9+81rUZ=9HvGje`C~o}5p*h>?S)zd07u_1nLI16NhlRln9ze$)2fVqUvR~0= z&>8%Es(w)MNS~ealbA!RjdN;@t%`YvioOiofmik@lgktq7V`3*JR7{CAr|^HM=&N6 zVS^7)mf8Y5b|_FIf`>wwr{Sr?%K&}=wgryfQto74LHyPGb@_*l>ChbHDYUH9v1ruw ze5l0j^8A{)KTs5jn$$|&WM$N#e0|HFNmQ9P<*Zd(8eST>F9dE=6!?4d4b%`;@+Zmt zRG_*gDjp1D{1GG#7L1n$M-kYK0wP+Ir*FILfiQ5f#ESYYNrqn=LtH>kDL)py=2}9u zIdTVl%KjzpG^VX4;!FN1voR8v5Ip;S^|hIxHdr*o4dHZw{Yqz_bKtnqh_0uO0Xnhp zUSatm^v8_zfS7B{A4cl-c zefxki)L5?F6l&VJfIne704WkX$8xx(5q?*$tcB)PawpU&r0M>EY^z0c7qu+MEKTTu zBS~YVeO3pCumf1f?|d3K(u^vi>aO)+kp+RUB3#C^P|N;BJJ#))QCe!P5Gq){1WCp6 zXWYy2abhltA%8GD$b%>ao31K6EoofbFOaY*Rw}-MU7d`vueHqv=JcLYo;^(XQfU4> zdh!5ryab_rw#5(5C5L>iNXeEH)h~6AZ^=Wx#f_XBIcytj2ZU%u5mqJq(Y4;qFxGOJ4 ziZBRG(zp@Wnyr0S2BKKH0pg&NP@#9!)&{{(f2tAyG8?F^;pP}1P#9u29)xY_e zMT|4GvYAIw1D4UK-P9-zJWCnnzg609vABO3__`&SVRBf$*U|TUFUZBFv$RV;)K&MbRB4i$9jK41Is>v?Vkg6mFi`m`B5;CEV_baY@li_m~} z8H;BE6qP=y*)P6O0V9QvDC&*-Du2nIdIbtjfNoM?K;e0ye4AkU>9v*)-rf5P+vrTD zW9Y*h>fzSYRCV+Rid}q(+bD%iffJitu`zzhenemz{5c}ydB%Kg{=CQ^QWqb3B52@e zivm|^vm|XL@6MEh=ahb**d4>nf*x}`oShhS9$L+8ctO$TG&A3p#s(@Fy4bd(;PWbW z84@k9^KdMCF4%Cdzjl8my5eGj@>;&h%AX`bzckm@EXc+)vV3FQk|16GlD8XbEFi7|%U%9r^3u~Dm&2p@-orv2U2;{H zHulS#L~?z1!Ut*U&@XZjbBnq4_s8XNSJHxx!Cah+B}kMiC%Sk}@wSc9z;6cdnN52l z@I8`8W|EkNmNOS@o)~rw7mA%k0|z#3VPVY+M4%7uhG_)GOBe#umA)Qr6viAovkG1D zqVU0hQ^&lR79&o3r#WSn*Cr2BsP1|C8TwfevP=j`kvNL-9hK@P%kqda^iYS&AjviX zyb@}8`n}+2+$IMUeJ8i^uoA)V7_XEqh1UE~WCIWHF>V|7m$IJ{ z?|%wZx@f1*yPRJ8H%W*bzY-ET*FCFG`+r77PVJ#)%aB-0MjVsD*n^)hJ>l)zKjJ!{ zb+XNEXgQaHhn=I2b&WL zxemcPq!Tp2ag1$jP34=2ZJ6_pQ~Rl?ZfuwS&;8IA*%1V1XO?XN)IKzM<;^3MA_Wh# zb^#Z4HYrGpK_wOqShQ`j9UKMa3`%w+<%eiEs7<4RVo;Z1LOjV}u~{q+$}oKjm-NW* zZcCKnyG@fh)Y3$-*0DC(cIJ(3 z2y_APyQs-iN(B?ReuR%AcBSi16At+^LiZv-2K<*i_XA~>88)khf0DRg4O72{OAWXv za~5e(Tx`!{hD0WMy*NZ${y0)ghA^Tj|w;A+$gU0*HJ_o~wEX zY^;?{P1bgAs%ai9y|Gu*kF2j~t|2;d5nZnLFD;fLSov|a+ZUfRz7%i1<_)QYc=xqL zA-ZQf9NurGI{WNj+e6^Q(X)|@prf9;`FmXVQxNumkM3_$s(~~~8u2MVQvRCj|JC4ZK}Cefx*{R1%-zO);EZ}YN8WW}kk}Oih3QcxZ6qtVT zLdkTjVskk=43s~u2DvDG9Sb{mlSN0Om zP~~@Nhng=XzKw->8~C4F9Q~&>@h?2nbL!{QGI4WAI-fP77^3YW@cbmnCNlslf#fBb zc+8IQS5ZPz@m` zG*M)`)6v2P&XCSaUGCB|fG51oLGWf(Ex}EGIa>&An-tR%)3#tf9!MKbWfo7UKpo9@i?a?YAULS(gPZzT{!crwd8_GA2$kBJQ<@uV0E&uvj|`Wi#yKFzm>-< z{o@)8TwZlXsP?=4Y$< z<{8_wedBCBEp2+JtE7-_|2_W_RiIS>Z^2DH?$0*^D~+zxd$YflqUlyJ!Oqx zE$Qr~1#xF;-Y`6zq+Uus_A}Sj>Io`Ph1R6O?nh4jMWgwu zlzEG&ORG(y*htAKod>H$_J1M>QmtUj(*5=#)PpSQTdBE@QF80Qmdsh&1UOsKj2y7N zongQ^!91o-_d3r;vE*%{Rl7Bc@vun*?I*Y`Blb{Hm3Uf6@rJAp-lDd*spkV9;d0_e zF6vf*H@Ov>ogWq%RBCn5iq3*fIHfJODm=~5;%eHN>-JJ#DEGz&KN&2xkLb2KZ2HMs zTUx2k7EvdKYJ3;wl%d`#EL5mjCOdD%=hlCGe*!(51~x>MN3&xEZjK6YZI#K{8{kHm zWnXrq2uMfhq<^~cj~qXF4pa*~d=~w}@F4k;bXlB(#bC<+VwPS} zTw03_p%8?Xz1S!?d=Dv==CSwx$tuItq7w!qcdVy*Dd*GS16uO*q0}b7k)L1SawWy z1QZ59teM+G+v?9URv6dRFxh19!^8{L;+yK?0al0vy$FeWt|62=S9phW1?pPvU##5V5VE9pLD+QU^RDu3tK4Tz1q%yl$ z%wAGFJ}Wl;Y0Zk6J|fjJ;QJ7Fpty5tN>}X{M|MV{X6b97EI|**9|^tDid3tSn5_8x zDb&B_np^de$M6CbWkBvop`G(swK=NXT=m9HfaH?2D$}CL;W%WHR$47zsaZ<&kWhYq z_bu-SLHH~2?kiF>TVnL8?|}gQkv+l)GY;e(LQschsahk5#x#_VQ?Tl=4`lIVYbE8dIsQ$N}{(tBH|Ebm1a~jRNO{BKFpyv(o862%6x{jeg3r3q&PwpPv zA8Tc)xXlHK&X~%{!R>R+D++vBTee(&c_B5d;#)`hME6tfFfE^H<~rFR=U;I6+F{G! zk{^?X2%&NlvZux-vzi!Q9XuCMF46; zm_;)uS8bryQ?cb;dBN`X2d9GzqI?q~xz~)8v%3_h#~T6(-I$j6D50}7Aa?g+Oi5SM zH+lstl0(pD`WsIZ7*D19>EZ=hg=RNIO3gl)mNe30OmQc|RQl1}9}QaCo%(_LP(QCR;@ZNgPH8}x zB;F&`Q$Z*j3vek8Wf_`%D|*qza>EYKJcQaQUw^eDBG6s@>+)W?5o|B*ci@%0GX71( zd_=ZkBYg0&wt94;s?+}SP3|Ct5WS`<6E|P6YmFe&dqX07Md-OoLr$K!G0h05>b3MeaW1>!pon7Jr-(rJ-kdM4?x z{#qCOpjHCb+-r@(1>J!S`?>N@{lkrL_5SP4P^uxsd)GM&-@SjxM(Npzz z;dxr+E6>!Y_@UpC;xtE+#6y=T@^r^eTc4cIX<0EEgJ*rr=`fbLx%qc~KFl>3h3npY8oMl+I%jYM@@3zMMOLj6?7^aeq!^KtNq-6|J|T!fP7n=C31 z2fp3y2((BX`oUtH;8`aW>e8YX$<7~^Sf;6b_nve0kf$RE?CLv;=sdXKEYXeU=wpuW zT5s7dn76~`4ydSfrgVB>v@`Ds6Uc|IQE&YIDrF#dW^EY~61k%2wTRfDg>gT_Ci13- zm0V?;rP{HF$D22Ro2)n39@Bx_?q<}F*n{YYLuFe}G9%!}77e(s2qHy7Xx-N+zoSka z2e%?RaO3MY`Q2VVR zm1Gg5wR|c!t&tF0SbbUTmc@5S~Y>ZKYa^Wkb*G<)zZhvXhv_HsX?#9Zkp%*s3kDoF>m&# z+ag!htzfix1}>mhhjh)W%kfVXL29kV3?KL^Q9@WC)^RM&BXp~QHK$sRx{_Q7d}oFD z+6no3jq#06N#J~~-n{Y8{BSMFLCCVuj|!7dwCeC0;Xh4kS+o9yCA?rwH^=k_ctvqc&(Z`>v z@eo5?mTR0qS#UoWMww|-fLY61+P}|fQSCXk!m4o{VEj==MYZ(^gQ6uclP2iRa;Cm} zuE%a_U992ou}YA;>MQ#7o?lPysDaR8_lfguoi;HLlI+8_IULy(!=^P3Z6yLE-FdWP z4`ImwrNiz(l3*XgCm-V?58;Bi7H=DF)zpC+wwFqaRVS(I3GovNvhusA9nElyc2|R= z7nk%^9FZz*j?LEO1}7Y2gjh)-Aohafv@TgfwOR?)0}_s`(!q9n1A#Vq4R-nk`CkVw zM40pKON4OTJLojLB}|U-1g-Gc=h8wOCCa8v(Bp9}od^82SI3L$janG1{%J$-snZn4 zeqSs`H%@ym1ug*mehR1WU+KYi5i!DpfL`zF(i02j-jEBk{-CXcWcMIb`b(281x30br-hQ@Fz!0nqwIB2rQrK)DYHibn!QM< zh@@JWclqQBHLS{9zXl1{BimgE*gmA6>mLv^bpmPcQqP|c+`L8&>dqXeO*Dq{--Aw*?tRdcOw{HQtx z&B!{>hZ*zPk*p7(*niz{&l%H2vx+myo-Z8HGdAVST9uAGfRL1JMc-%jvo?%)0Db7* zfe~CHT8=f{Vr@uC^!SGKwIy75XYCZOl5fp$wJ@)xAZh%FkS|r?BKT{J$rTR>G@*9$?6`my6_tdKr&#;+$Ib>J998yz{m#sYM#{)4CVy zj6o`h@KMIW?E+G_m!sKGQGiBDGJZ3u&(l9{=dWdn@b&W9FtZP7awQW+NF}VW!-u`o z*7`TBrshfk-oTqxs2_7no>WG zNntz4jTqMlWdE3__Sl(sK-8nmHK?xY_3a~!Q|6x~bUG034CThGOBz1kiDB!w3h{){ zr0{bcXtMS*8D`TCKqbS7wfr7y#sPhlGSa7FEQT!5vPw*S{=LI6>Xtlcjb>!4t8kmy z{VFA~oExkjLixIcE6S2zzL+LCXf8lD3EXJ#Ugu`3J~ zCR2TdrAikkE2% zID>YGF8A5TqTt)wD&T}PJsr(+gK@^jVLA>Z={MAP{`NdR1+hiqbfvWW8Wj^-bR|TC zzj9AWO}k%>SBIU*fhx6fCy5vcKpealTk|u*k03x*>y7eByZs@$i`V0DWe?kiL4)+v zBCHA%zX?w8O^pS@Y}tB#)V4LjSCEstCY8d&KtyjNRE?Vb?yZl=(!JlVl+wCHYbZsb?MOVx#JkzxO@lil$3xh3Lr_M=L5afZoNGH8d$(y z%nB{mr3k_Kkr%PO1yeb3*aDKX9x5PZ0c{s`ek0 z;;YMuzyq^g*Cl)a+0yuEi^M-{N^pg7HX5f7UHN>wl1bE1Xt)cOPbW~ zku~4Pn3U~&TMM4`s1$RMF%C56wKGZL@jKUnYULQ#Bh|g1o zNNj!}gB;#UPAo()Oz;)Rhx$PFibv1%G_@uWKv1=IZ=gec6mYjdiZ*v3G}!LTZglI+ zu>$(=s@ChJ$nAg zBb%M@bH~?QVeT(7;JB%jYrP(-;5FqJU)Dh_AMs4LD={a!LK}hyR=A<h$uw>Gr%|k^5mi)7Gn}LQ#Wehl8 zyX`nm@JM71)>IKAS9&<-!YxO@IRg3uLVu;(_}FQ{aAmJQzihbsDTO7CRY|s*h)b() zS~3SwRAfF^RPNKHA;H!aM3HSL0IUU)|8?j(rqs68?sL6=urXvOGBWIIGUO+Lk3uO0 z$)Np|k{!&wWifYylqPSrrh2`-3Ee73*ybdaQgISywD?n>^lGcgNs{=k8 zoh{#iv3G8l(=ce=9GU9s2jlnQ<#0`m+^aR5Kia~?9E;4 zrGF^W)6)DVhlR+`x=G52l0`})-Orjeq-G1wdTy8l>{IC=8yS6IW5YO!!(Uedv$=9} z@N>N+lc#?T!ZsMyzomo?`r&Hx=*sB0rfvDIPvvGg$p*G`LOoVZ_kDSqmUBeet-d-U zRt#fC%=BL_0f7Q$FXwfMD%A*dz#$kw3(#h`VPAB8LXb32LsjyJvz1~?i}DB#S}Ds2 zc22vy0`4gWSN54-uv)z%jkgpN{r@!(pB~+_+1lV%gfUG4$f~Uyz~ON87=;Re3cIp( zO$;7F#WRq;qDFsWm~C`>M!Y`sw&@c5&n>f-X9(U}{+lFmH74SKz6i%detasks-K6l8(q(r)M&}n4hZd6aA$UcdtIT0KK>@UovYaH4f z=&Q1;)YjP%v}?l(D~obJKUYvcj-9MSjgo-j{48SU=3QJcS}`v2Jr=CmbJ;M18%h*A zWR=-n3p0izD4|9(1_Gb#w;9*=HoFBQqU;%L3k&7)1_;Us?^Bk-yf-OCdbXsVVP+T? z4rD@qwPj;U;B;EnFwgx73apH2DS-}aAf(71-tIuox>!-ZH$@vOOLa32114w+#lB># zaEu%A{M%BN@%7gA3#P*s?Wo&|55&Y48e)> z;88=okEyZqTNO$!L2xRBh$0My!nU{Tr(37{xmv2)!Iu4v@@?J>FDtK~sYCaQr;U

k2 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 z zuEA7tdU9-^ZM++i&jEjVkx_rN%;xjjwblB1#f^-7T>2{<3dM zgmI;vbLxls0up=I#y-D$|4-!gzt#2s52|g8sY`s*Qf|miC5iosN8pTiUSR;4&eIvj zfL&@S(Q9k}7Jtq&k|m7xgO>(1hJQ{$S>uumhvfitpz&$&QnAmW#@;6&bc(CSnvbYN zVuOcc%nZfGIflpLvC_Oe&CO8F`IvGAy_5WS1gXGm6V!bTw5CW%g~7<@{CKXJ

3S!GpYH{&Yng7;W|92QambX_Y&|_A$@qV6S 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.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

HYxqv>Qm!hG@M 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 UvWd2ah5!Hn07*qoM6N<$f=#8nC;$Ke literal 0 HcmV?d00001 diff --git a/docs/docs/cloud/index.md b/docs/docs/cloud/index.md index 61ff1ca72..73421da49 100644 --- a/docs/docs/cloud/index.md +++ b/docs/docs/cloud/index.md @@ -23,6 +23,8 @@ The LangGraph Cloud API exposes functionality of your LangGraph application thro LangGraph Cloud is seamlessly integrated with [LangSmith](https://www.langchain.com/langsmith) and is accessible from within the LangSmith UI. +LangGraph Cloud applications can be tested and debugged using the [LangGraph Studio Desktop](https://github.com/langchain-ai/langgraph-studio). + ## Key Features The LangGraph Cloud API supports key LangGraph features in addition to new functionality for enabling complex, agentic workflows. diff --git a/docs/docs/cloud/quick_start.md b/docs/docs/cloud/quick_start.md index bfab8ca09..c59a6fb85 100644 --- a/docs/docs/cloud/quick_start.md +++ b/docs/docs/cloud/quick_start.md @@ -66,6 +66,16 @@ Now that we have set everything up on our local file system, we are ready to hos ## Test the graph build locally +### Using LangGraph Studio Desktop (recommended) + +![LangGraph Studio Desktop](./img/graph_video_poster.png) + +Testing your graph locally is easy with LangGraph Studio Desktop. LangGraph Studio offers a new way to develop LLM applications by providing a specialized agent IDE that enables visualization, interaction, and debugging of complex agentic applications + +With visual graphs and the ability to edit state, you can better understand agent workflows and iterate faster. LangGraph Studio integrates with [LangSmith](https://smith.langchain.com) so you can collaborate with teammates to debug failure modes. + +### Using the LangGraph CLI + Before deploying to the cloud, we probably want to test the building of our graph locally. This is useful to make sure we have configured our [CLI configuration file][langgraph.json] correctly and our graph runs. In order to do this we can first install the LangGraph CLI From a16a33806c60e80be1fb64b54f2e5835f6080c01 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Thu, 15 Aug 2024 15:37:51 -0700 Subject: [PATCH 23/35] lib0.2.4 --- libs/langgraph/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/langgraph/pyproject.toml b/libs/langgraph/pyproject.toml index 9701f5933..3aac6ed84 100644 --- a/libs/langgraph/pyproject.toml +++ b/libs/langgraph/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langgraph" -version = "0.2.3" +version = "0.2.4" description = "Building stateful, multi-actor applications with LLMs" authors = [] license = "MIT" From e4f1f901272b2f00134b2a4461e087402a47fb4d Mon Sep 17 00:00:00 2001 From: Vadym Barda Date: Fri, 16 Aug 2024 11:41:56 -0400 Subject: [PATCH 24/35] update pyproject in monorepo to reflect consistent min python version (#1369) --- poetry.lock | 185 +++++++++++++++++++++++++++++++++++++++++++------ pyproject.toml | 2 +- 2 files changed, 166 insertions(+), 21 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7e00b52aa..ffec8ab9d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -152,6 +152,27 @@ webencodings = "*" [package.extras] css = ["tinycss2 (>=1.1.0,<1.3)"] +[[package]] +name = "cachecontrol" +version = "0.14.0" +description = "httplib2 caching for requests" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cachecontrol-0.14.0-py3-none-any.whl", hash = "sha256:f5bf3f0620c38db2e5122c0726bdebb0d16869de966ea6a2befe92470b740ea0"}, + {file = "cachecontrol-0.14.0.tar.gz", hash = "sha256:7db1195b41c81f8274a7bbd97c956f44e8348265a1bc7641c37dfebc39f0c938"}, +] + +[package.dependencies] +filelock = {version = ">=3.8.0", optional = true, markers = "extra == \"filecache\""} +msgpack = ">=0.5.2,<2.0.0" +requests = ">=2.16.0" + +[package.extras] +dev = ["CacheControl[filecache,redis]", "black", "build", "cherrypy", "furo", "mypy", "pytest", "pytest-cov", "sphinx", "sphinx-copybutton", "tox", "types-redis", "types-requests"] +filecache = ["filelock (>=3.8.0)"] +redis = ["redis (>=2.10.5)"] + [[package]] name = "cairocffi" version = "1.7.1" @@ -533,6 +554,22 @@ files = [ [package.extras] devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] +[[package]] +name = "filelock" +version = "3.15.4" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, + {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] +typing = ["typing-extensions (>=4.8)"] + [[package]] name = "ghp-import" version = "2.1.0" @@ -684,6 +721,25 @@ files = [ {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] +[[package]] +name = "importlib-metadata" +version = "8.2.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-8.2.0-py3-none-any.whl", hash = "sha256:11901fa0c2f97919b288679932bb64febaeacf289d18ac84dd68cb2e74213369"}, + {file = "importlib_metadata-8.2.0.tar.gz", hash = "sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] + [[package]] name = "ipykernel" version = "6.29.4" @@ -719,13 +775,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.25.0" +version = "8.18.1" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.10" +python-versions = ">=3.9" files = [ - {file = "ipython-8.25.0-py3-none-any.whl", hash = "sha256:53eee7ad44df903a06655871cbab66d156a051fd86f3ec6750470ac9604ac1ab"}, - {file = "ipython-8.25.0.tar.gz", hash = "sha256:c6ed726a140b6e725b911528f80439c534fac915246af3efc39440a6b0f9d716"}, + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, ] [package.dependencies] @@ -734,26 +790,25 @@ decorator = "*" exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} prompt-toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack-data = "*" -traitlets = ">=5.13.0" -typing-extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} +traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] -all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] black = ["black"] -doc = ["docrepr", "exceptiongroup", "intersphinx-registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli", "typing-extensions"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] -matplotlib = ["matplotlib"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] -test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] [[package]] name = "jedi" @@ -873,6 +928,7 @@ files = [ ] [package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" @@ -968,7 +1024,7 @@ typing-extensions = ">=4.7" [[package]] name = "langgraph" -version = "0.2.2" +version = "0.2.3" description = "Building stateful, multi-actor applications with LLMs" optional = false python-versions = ">=3.9.0,<4.0" @@ -1001,7 +1057,7 @@ url = "libs/checkpoint" [[package]] name = "langgraph-checkpoint-postgres" -version = "1.0.1" +version = "1.0.3" description = "Library with a Postgres implementation of LangGraph checkpoint saver." optional = false python-versions = "^3.9.0,<4.0" @@ -1079,6 +1135,9 @@ files = [ {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, ] +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + [package.extras] docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] @@ -1288,6 +1347,7 @@ files = [ click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" markdown = ">=3.3.6" markupsafe = ">=2.0.1" @@ -1331,6 +1391,7 @@ files = [ ] [package.dependencies] +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} mergedeep = ">=1.3.4" platformdirs = ">=2.2.0" pyyaml = ">=5.1" @@ -1449,16 +1510,17 @@ test = ["autoflake", "black", "isort", "pytest"] [[package]] name = "mkdocs-rss-plugin" -version = "1.13.1" +version = "1.15.0" description = "MkDocs plugin which generates a static RSS feed using git log and page.meta." optional = false -python-versions = "<4,>=3.10" +python-versions = "<4,>=3.8" files = [ - {file = "mkdocs_rss_plugin-1.13.1-py2.py3-none-any.whl", hash = "sha256:665af194d0a48a1a88f3753c3cee78fee8e00b269dd61af1fe79f3555457b7a4"}, - {file = "mkdocs_rss_plugin-1.13.1.tar.gz", hash = "sha256:1c12b1a7449dcff686b8fd991648a88bb8735e5013242b10ff4f375b90a93803"}, + {file = "mkdocs_rss_plugin-1.15.0-py2.py3-none-any.whl", hash = "sha256:7308ac13f0976c0479db5a62cb7ef9b10fdd74b6521e459bb66a13e2cfe69d4b"}, + {file = "mkdocs_rss_plugin-1.15.0.tar.gz", hash = "sha256:92995ed6c77b2ae1f5f2913e62282c27e50c35d618c4291b5b939e50badd7504"}, ] [package.dependencies] +cachecontrol = {version = ">=0.14,<1", extras = ["filecache"]} GitPython = ">=3.1,<3.2" mkdocs = ">=1.5,<2" requests = ">=2.31,<3" @@ -1482,6 +1544,7 @@ files = [ [package.dependencies] click = ">=7.0" +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} Jinja2 = ">=2.11.1" Markdown = ">=3.3" MarkupSafe = ">=1.1" @@ -1489,6 +1552,7 @@ mkdocs = ">=1.4" mkdocs-autorefs = ">=0.3.1" platformdirs = ">=2.2.0" pymdown-extensions = ">=6.3" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.10\""} [package.extras] crystal = ["mkdocstrings-crystal (>=0.3.4)"] @@ -1510,6 +1574,71 @@ files = [ griffe = ">=0.47" mkdocstrings = ">=0.25" +[[package]] +name = "msgpack" +version = "1.0.8" +description = "MessagePack serializer" +optional = false +python-versions = ">=3.8" +files = [ + {file = "msgpack-1.0.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:505fe3d03856ac7d215dbe005414bc28505d26f0c128906037e66d98c4e95868"}, + {file = "msgpack-1.0.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6b7842518a63a9f17107eb176320960ec095a8ee3b4420b5f688e24bf50c53c"}, + {file = "msgpack-1.0.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:376081f471a2ef24828b83a641a02c575d6103a3ad7fd7dade5486cad10ea659"}, + {file = "msgpack-1.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e390971d082dba073c05dbd56322427d3280b7cc8b53484c9377adfbae67dc2"}, + {file = "msgpack-1.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e073efcba9ea99db5acef3959efa45b52bc67b61b00823d2a1a6944bf45982"}, + {file = "msgpack-1.0.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82d92c773fbc6942a7a8b520d22c11cfc8fd83bba86116bfcf962c2f5c2ecdaa"}, + {file = "msgpack-1.0.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9ee32dcb8e531adae1f1ca568822e9b3a738369b3b686d1477cbc643c4a9c128"}, + {file = "msgpack-1.0.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e3aa7e51d738e0ec0afbed661261513b38b3014754c9459508399baf14ae0c9d"}, + {file = "msgpack-1.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69284049d07fce531c17404fcba2bb1df472bc2dcdac642ae71a2d079d950653"}, + {file = "msgpack-1.0.8-cp310-cp310-win32.whl", hash = "sha256:13577ec9e247f8741c84d06b9ece5f654920d8365a4b636ce0e44f15e07ec693"}, + {file = "msgpack-1.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:e532dbd6ddfe13946de050d7474e3f5fb6ec774fbb1a188aaf469b08cf04189a"}, + {file = "msgpack-1.0.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9517004e21664f2b5a5fd6333b0731b9cf0817403a941b393d89a2f1dc2bd836"}, + {file = "msgpack-1.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d16a786905034e7e34098634b184a7d81f91d4c3d246edc6bd7aefb2fd8ea6ad"}, + {file = "msgpack-1.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2872993e209f7ed04d963e4b4fbae72d034844ec66bc4ca403329db2074377b"}, + {file = "msgpack-1.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c330eace3dd100bdb54b5653b966de7f51c26ec4a7d4e87132d9b4f738220ba"}, + {file = "msgpack-1.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83b5c044f3eff2a6534768ccfd50425939e7a8b5cf9a7261c385de1e20dcfc85"}, + {file = "msgpack-1.0.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1876b0b653a808fcd50123b953af170c535027bf1d053b59790eebb0aeb38950"}, + {file = "msgpack-1.0.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dfe1f0f0ed5785c187144c46a292b8c34c1295c01da12e10ccddfc16def4448a"}, + {file = "msgpack-1.0.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3528807cbbb7f315bb81959d5961855e7ba52aa60a3097151cb21956fbc7502b"}, + {file = "msgpack-1.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e2f879ab92ce502a1e65fce390eab619774dda6a6ff719718069ac94084098ce"}, + {file = "msgpack-1.0.8-cp311-cp311-win32.whl", hash = "sha256:26ee97a8261e6e35885c2ecd2fd4a6d38252246f94a2aec23665a4e66d066305"}, + {file = "msgpack-1.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:eadb9f826c138e6cf3c49d6f8de88225a3c0ab181a9b4ba792e006e5292d150e"}, + {file = "msgpack-1.0.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:114be227f5213ef8b215c22dde19532f5da9652e56e8ce969bf0a26d7c419fee"}, + {file = "msgpack-1.0.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d661dc4785affa9d0edfdd1e59ec056a58b3dbb9f196fa43587f3ddac654ac7b"}, + {file = "msgpack-1.0.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d56fd9f1f1cdc8227d7b7918f55091349741904d9520c65f0139a9755952c9e8"}, + {file = "msgpack-1.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0726c282d188e204281ebd8de31724b7d749adebc086873a59efb8cf7ae27df3"}, + {file = "msgpack-1.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8db8e423192303ed77cff4dce3a4b88dbfaf43979d280181558af5e2c3c71afc"}, + {file = "msgpack-1.0.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99881222f4a8c2f641f25703963a5cefb076adffd959e0558dc9f803a52d6a58"}, + {file = "msgpack-1.0.8-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b5505774ea2a73a86ea176e8a9a4a7c8bf5d521050f0f6f8426afe798689243f"}, + {file = "msgpack-1.0.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ef254a06bcea461e65ff0373d8a0dd1ed3aa004af48839f002a0c994a6f72d04"}, + {file = "msgpack-1.0.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e1dd7839443592d00e96db831eddb4111a2a81a46b028f0facd60a09ebbdd543"}, + {file = "msgpack-1.0.8-cp312-cp312-win32.whl", hash = "sha256:64d0fcd436c5683fdd7c907eeae5e2cbb5eb872fafbc03a43609d7941840995c"}, + {file = "msgpack-1.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:74398a4cf19de42e1498368c36eed45d9528f5fd0155241e82c4082b7e16cffd"}, + {file = "msgpack-1.0.8-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0ceea77719d45c839fd73abcb190b8390412a890df2f83fb8cf49b2a4b5c2f40"}, + {file = "msgpack-1.0.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1ab0bbcd4d1f7b6991ee7c753655b481c50084294218de69365f8f1970d4c151"}, + {file = "msgpack-1.0.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1cce488457370ffd1f953846f82323cb6b2ad2190987cd4d70b2713e17268d24"}, + {file = "msgpack-1.0.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3923a1778f7e5ef31865893fdca12a8d7dc03a44b33e2a5f3295416314c09f5d"}, + {file = "msgpack-1.0.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22e47578b30a3e199ab067a4d43d790249b3c0587d9a771921f86250c8435db"}, + {file = "msgpack-1.0.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd739c9251d01e0279ce729e37b39d49a08c0420d3fee7f2a4968c0576678f77"}, + {file = "msgpack-1.0.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d3420522057ebab1728b21ad473aa950026d07cb09da41103f8e597dfbfaeb13"}, + {file = "msgpack-1.0.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5845fdf5e5d5b78a49b826fcdc0eb2e2aa7191980e3d2cfd2a30303a74f212e2"}, + {file = "msgpack-1.0.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a0e76621f6e1f908ae52860bdcb58e1ca85231a9b0545e64509c931dd34275a"}, + {file = "msgpack-1.0.8-cp38-cp38-win32.whl", hash = "sha256:374a8e88ddab84b9ada695d255679fb99c53513c0a51778796fcf0944d6c789c"}, + {file = "msgpack-1.0.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3709997b228685fe53e8c433e2df9f0cdb5f4542bd5114ed17ac3c0129b0480"}, + {file = "msgpack-1.0.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f51bab98d52739c50c56658cc303f190785f9a2cd97b823357e7aeae54c8f68a"}, + {file = "msgpack-1.0.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:73ee792784d48aa338bba28063e19a27e8d989344f34aad14ea6e1b9bd83f596"}, + {file = "msgpack-1.0.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f9904e24646570539a8950400602d66d2b2c492b9010ea7e965025cb71d0c86d"}, + {file = "msgpack-1.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e75753aeda0ddc4c28dce4c32ba2f6ec30b1b02f6c0b14e547841ba5b24f753f"}, + {file = "msgpack-1.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5dbf059fb4b7c240c873c1245ee112505be27497e90f7c6591261c7d3c3a8228"}, + {file = "msgpack-1.0.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4916727e31c28be8beaf11cf117d6f6f188dcc36daae4e851fee88646f5b6b18"}, + {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7938111ed1358f536daf311be244f34df7bf3cdedb3ed883787aca97778b28d8"}, + {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:493c5c5e44b06d6c9268ce21b302c9ca055c1fd3484c25ba41d34476c76ee746"}, + {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fbb160554e319f7b22ecf530a80a3ff496d38e8e07ae763b9e82fadfe96f273"}, + {file = "msgpack-1.0.8-cp39-cp39-win32.whl", hash = "sha256:f9af38a89b6a5c04b7d18c492c8ccf2aee7048aff1ce8437c4683bb5a1df893d"}, + {file = "msgpack-1.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:ed59dd52075f8fc91da6053b12e8c89e37aa043f8986efd89e61fae69dc1b011"}, + {file = "msgpack-1.0.8.tar.gz", hash = "sha256:95c02b0e27e706e48d0e5426d1710ca78e0f0628d6e89d5b5a5b91a5f12274f3"}, +] + [[package]] name = "nbclient" version = "0.10.0" @@ -1547,6 +1676,7 @@ files = [ beautifulsoup4 = "*" bleach = "!=5.0.0" defusedxml = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" @@ -2826,7 +2956,22 @@ files = [ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] +[[package]] +name = "zipp" +version = "3.20.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.20.0-py3-none-any.whl", hash = "sha256:58da6168be89f0be59beb194da1250516fdaa062ccebd30127ac65d30045e10d"}, + {file = "zipp-3.20.0.tar.gz", hash = "sha256:0145e43d89664cfe1a2e533adc75adafed82fe2da404b4bbb6b026c0157bdb31"}, +] + +[package.extras] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] + [metadata] lock-version = "2.0" -python-versions = "^3.10" -content-hash = "8bbefefef5e786ed86783a98ff0809cfaaad26d59b2d83623c269587a3bf5f7a" +python-versions = "^3.9" +content-hash = "d98361cff93b5d06ac80fd076e73bcf3b0883fb3ad8e66bc3ca0cfc6b955c94c" diff --git a/pyproject.toml b/pyproject.toml index e6477dce2..e5794d566 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ license = "MIT" readme = "README.md" [tool.poetry.dependencies] -python = "^3.10" +python = "^3.9" [tool.poetry.group.docs.dependencies] langgraph = { path = "libs/langgraph/", develop = true } From e916cab08ff2e1a044553e59939b05c7b93f274d Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Fri, 16 Aug 2024 13:11:27 -0700 Subject: [PATCH 25/35] Checkpoint errors in pending_writes, expose under StateSnapshot.tasks - Save errors produced by tasks, under pending_writes - Re-work logic to cancel other tasks when one fails, ready to change for interrupt exception - Update serializer to handle exceptions - Update get_state/get_state_history with new return value property "tasks" which contains a richer description of the next tasks, currently with id, name and error (if already ran and errored) --- .../langgraph/checkpoint/serde/jsonplus.py | 13 +- libs/langgraph/langgraph/constants.py | 2 + libs/langgraph/langgraph/managed/base.py | 6 +- .../langgraph/managed/is_last_step.py | 3 +- libs/langgraph/langgraph/pregel/__init__.py | 73 +++++-- libs/langgraph/langgraph/pregel/algo.py | 84 ++++---- libs/langgraph/langgraph/pregel/debug.py | 47 ++++- libs/langgraph/langgraph/pregel/loop.py | 10 +- libs/langgraph/langgraph/pregel/types.py | 14 +- libs/langgraph/tests/any_str.py | 18 ++ libs/langgraph/tests/test_pregel.py | 179 ++++++++++++++++-- libs/langgraph/tests/test_pregel_async.py | 156 ++++++++++++++- 12 files changed, 505 insertions(+), 100 deletions(-) diff --git a/libs/checkpoint/langgraph/checkpoint/serde/jsonplus.py b/libs/checkpoint/langgraph/checkpoint/serde/jsonplus.py index 52e9d6da3..5465b2802 100644 --- a/libs/checkpoint/langgraph/checkpoint/serde/jsonplus.py +++ b/libs/checkpoint/langgraph/checkpoint/serde/jsonplus.py @@ -110,6 +110,8 @@ class JsonPlusSerializer(SerializerProtocol): return self._encode_constructor_args( obj.__class__, method="fromhex", args=[obj.hex()] ) + elif isinstance(obj, BaseException): + return self._encode_constructor_args(obj.__class__, args=obj.args) else: raise TypeError( f"Object of type {obj.__class__.__name__} is not JSON serializable" @@ -131,9 +133,16 @@ class JsonPlusSerializer(SerializerProtocol): # Instantiate class if value["method"] is not None: method = getattr(cls, value["method"]) - return method(*value["args"], **value["kwargs"]) else: - return cls(*value["args"], **value["kwargs"]) + method = cls + if value["args"] and value["kwargs"]: + return method(*value["args"], **value["kwargs"]) + elif value["args"]: + return method(*value["args"]) + elif value["kwargs"]: + return method(**value["kwargs"]) + else: + return method() except (ImportError, AttributeError): return None diff --git a/libs/langgraph/langgraph/constants.py b/libs/langgraph/langgraph/constants.py index ae447d62e..af4ba4d8d 100644 --- a/libs/langgraph/langgraph/constants.py +++ b/libs/langgraph/langgraph/constants.py @@ -6,9 +6,11 @@ CONFIG_KEY_READ = "__pregel_read" CONFIG_KEY_CHECKPOINTER = "__pregel_checkpointer" CONFIG_KEY_RESUMING = "__pregel_resuming" INTERRUPT = "__interrupt__" +ERROR = "__error__" TASKS = "__pregel_tasks" RESERVED = { INTERRUPT, + ERROR, TASKS, CONFIG_KEY_SEND, CONFIG_KEY_READ, diff --git a/libs/langgraph/langgraph/managed/base.py b/libs/langgraph/langgraph/managed/base.py index 0e1476895..0455ed58b 100644 --- a/libs/langgraph/langgraph/managed/base.py +++ b/libs/langgraph/langgraph/managed/base.py @@ -3,7 +3,6 @@ from abc import ABC, abstractmethod from contextlib import AsyncExitStack, ExitStack, asynccontextmanager, contextmanager from inspect import isclass from typing import ( - TYPE_CHECKING, Any, AsyncGenerator, Generator, @@ -17,9 +16,6 @@ from typing import ( from langchain_core.runnables import RunnableConfig from typing_extensions import Self, TypeGuard -if TYPE_CHECKING: - from langgraph.pregel.types import PregelTaskDescription - V = TypeVar("V") @@ -60,7 +56,7 @@ class ManagedValue(ABC, Generic[V]): pass @abstractmethod - def __call__(self, step: int, task: "PregelTaskDescription") -> V: + def __call__(self, step: int) -> V: ... diff --git a/libs/langgraph/langgraph/managed/is_last_step.py b/libs/langgraph/langgraph/managed/is_last_step.py index 5860a9cbe..3c6daf5f4 100644 --- a/libs/langgraph/langgraph/managed/is_last_step.py +++ b/libs/langgraph/langgraph/managed/is_last_step.py @@ -1,11 +1,10 @@ from typing import Annotated from langgraph.managed.base import ManagedValue -from langgraph.pregel.types import PregelExecutableTask class IsLastStepManager(ManagedValue[bool]): - def __call__(self, step: int, task: PregelExecutableTask) -> bool: + def __call__(self, step: int) -> bool: return step == self.config["recursion_limit"] - 1 diff --git a/libs/langgraph/langgraph/pregel/__init__.py b/libs/langgraph/langgraph/pregel/__init__.py index 939cbc256..7b2fdb5f9 100644 --- a/libs/langgraph/langgraph/pregel/__init__.py +++ b/libs/langgraph/langgraph/pregel/__init__.py @@ -68,6 +68,7 @@ from langgraph.constants import ( CONFIG_KEY_READ, CONFIG_KEY_RESUMING, CONFIG_KEY_SEND, + ERROR, INTERRUPT, ) from langgraph.errors import GraphRecursionError, InvalidUpdateError @@ -87,6 +88,7 @@ from langgraph.pregel.debug import ( print_step_checkpoint, print_step_tasks, print_step_writes, + tasks_w_writes, ) from langgraph.pregel.io import ( map_output_updates, @@ -376,7 +378,7 @@ class Pregel( channels, managed, config, - -1, + saved.metadata.get("step", -1) + 1 if saved else -1, for_execution=False, ) return StateSnapshot( @@ -386,6 +388,7 @@ class Pregel( saved.metadata if saved else None, saved.checkpoint["ts"] if saved else None, saved.parent_config if saved else None, + tasks_w_writes(next_tasks, saved.pending_writes), ) async def aget_state(self, config: RunnableConfig) -> StateSnapshot: @@ -413,7 +416,7 @@ class Pregel( channels, managed, config, - -1, + saved.metadata.get("step", -1) + 1 if saved else -1, for_execution=False, ) return StateSnapshot( @@ -423,6 +426,7 @@ class Pregel( saved.metadata if saved else None, saved.checkpoint["ts"] if saved else None, saved.parent_config if saved else None, + tasks_w_writes(next_tasks, saved.pending_writes), ) def get_state_history( @@ -441,9 +445,13 @@ class Pregel( and signature(self.checkpointer.list).parameters.get("filter") is None ): raise ValueError("Checkpointer does not support filtering") - for config, checkpoint, metadata, parent_config, _ in self.checkpointer.list( - config, before=before, limit=limit, filter=filter - ): + for ( + config, + checkpoint, + metadata, + parent_config, + pending_writes, + ) in self.checkpointer.list(config, before=before, limit=limit, filter=filter): with ChannelsManager( { k: LastValue(None) if isinstance(c, Context) else c @@ -460,7 +468,7 @@ class Pregel( channels, managed, config, - -1, + metadata.get("step", -1) + 1, for_execution=False, ) yield StateSnapshot( @@ -470,6 +478,7 @@ class Pregel( metadata, checkpoint["ts"], parent_config, + tasks_w_writes(next_tasks, pending_writes), ) async def aget_state_history( @@ -493,7 +502,7 @@ class Pregel( checkpoint, metadata, parent_config, - _, + pending_writes, ) in self.checkpointer.alist(config, before=before, limit=limit, filter=filter): async with AsyncChannelsManager( { @@ -511,7 +520,7 @@ class Pregel( channels, managed, config, - -1, + metadata.get("step", -1) + 1, for_execution=False, ) yield StateSnapshot( @@ -521,6 +530,7 @@ class Pregel( metadata, checkpoint["ts"], parent_config, + tasks_w_writes(next_tasks, pending_writes), ) def update_state( @@ -935,7 +945,7 @@ class Pregel( manager=run_manager, ): # debug flag - if self.debug: + if debug: print_step_checkpoint( loop.checkpoint_metadata, loop.channels, @@ -986,10 +996,9 @@ class Pregel( break # timed out for fut in done: task = futures.pop(fut) - if fut.exception() is not None: - # we got an exception, break out of while loop - # exception will be handled in panic_or_proceed - futures.clear() + if exc := _exception(fut): + # save error to checkpointer + loop.put_writes(task.id, [(ERROR, exc)]) else: # save task writes to checkpointer loop.put_writes(task.id, task.writes) @@ -1013,6 +1022,8 @@ class Pregel( else: # remove references to loop vars del fut, task + if _should_stop_others(done): + break # panic on failure or timeout _panic_or_proceed(done, inflight, loop.step) @@ -1179,7 +1190,7 @@ class Pregel( manager=run_manager, ): # debug flag - if self.debug: + if debug: print_step_checkpoint( loop.checkpoint_metadata, loop.channels, @@ -1231,10 +1242,9 @@ class Pregel( break # timed out for fut in done: task = futures.pop(fut) - if fut.exception() is not None: - # we got an exception, break out of while loop - # exception will be handled in panic_or_proceed - futures.clear() + if exc := _exception(fut): + # save error to checkpointer + loop.put_writes(task.id, [(ERROR, exc)]) else: # save task writes to checkpointer loop.put_writes(task.id, task.writes) @@ -1260,6 +1270,8 @@ class Pregel( else: # remove references to loop vars del fut, task + if _should_stop_others(done): + break # panic on failure or timeout _panic_or_proceed(done, inflight, loop.step, asyncio.TimeoutError) @@ -1403,6 +1415,31 @@ class Pregel( return chunks +def _should_stop_others( + done: Union[set[concurrent.futures.Future[Any]], set[asyncio.Task[Any]]], +) -> bool: + for fut in done: + if fut.cancelled(): + return True + if fut.exception() is not None: + # TODO don't stop others if exception is interrupt + return True + else: + return False + + +def _exception( + fut: Union[concurrent.futures.Future[Any], asyncio.Task[Any]], +) -> Optional[BaseException]: + if fut.cancelled(): + if isinstance(fut, asyncio.Task): + return asyncio.CancelledError() + else: + return concurrent.futures.CancelledError() + else: + return fut.exception() + + def _panic_or_proceed( done: Union[set[concurrent.futures.Future[Any]], set[asyncio.Task[Any]]], inflight: Union[set[concurrent.futures.Future[Any]], set[asyncio.Task[Any]]], diff --git a/libs/langgraph/langgraph/pregel/algo.py b/libs/langgraph/langgraph/pregel/algo.py index 3e8b7e48b..fd725627a 100644 --- a/libs/langgraph/langgraph/pregel/algo.py +++ b/libs/langgraph/langgraph/pregel/algo.py @@ -49,7 +49,7 @@ from langgraph.managed.base import ManagedValueMapping, is_managed_value from langgraph.pregel.io import read_channel, read_channels from langgraph.pregel.log import logger from langgraph.pregel.read import PregelNode -from langgraph.pregel.types import All, PregelExecutableTask, PregelTaskDescription +from langgraph.pregel.types import All, PregelExecutableTask, PregelTask class WritesProtocol(Protocol): @@ -225,7 +225,7 @@ def prepare_next_tasks( is_resuming: bool = False, checkpointer: Literal[None] = None, manager: Literal[None] = None, -) -> list[PregelTaskDescription]: +) -> list[PregelTask]: ... @@ -258,9 +258,9 @@ def prepare_next_tasks( is_resuming: bool = False, checkpointer: Optional[BaseCheckpointSaver] = None, manager: Union[None, ParentRunManager, AsyncParentRunManager] = None, -) -> Union[list[PregelTaskDescription], list[PregelExecutableTask]]: +) -> Union[list[PregelTask], list[PregelExecutableTask]]: parent_ns = config.get("configurable", {}).get("checkpoint_ns", "") - tasks: Union[list[PregelTaskDescription], list[PregelExecutableTask]] = [] + tasks: Union[list[PregelTask], list[PregelExecutableTask]] = [] # Consume pending packets for packet in checkpoint["pending_sends"]: if not isinstance(packet, Send): @@ -269,24 +269,25 @@ def prepare_next_tasks( if packet.node not in processes: logger.warn(f"Ignoring unknown node name {packet.node} in pending sends") continue + # create task id + triggers = [TASKS] + metadata = { + "langgraph_step": step, + "langgraph_node": packet.node, + "langgraph_triggers": triggers, + "langgraph_task_idx": len(tasks), + } + checkpoint_ns = ( + f"{parent_ns}{CHECKPOINT_NAMESPACE_SEPARATOR}{packet.node}" + if parent_ns + else packet.node + ) + task_id = str( + uuid5(UUID(checkpoint["id"]), json.dumps((checkpoint_ns, metadata))) + ) if for_execution: proc = processes[packet.node] if node := proc.get_node(): - triggers = [TASKS] - metadata = { - "langgraph_step": step, - "langgraph_node": packet.node, - "langgraph_triggers": triggers, - "langgraph_task_idx": len(tasks), - } - checkpoint_ns = ( - f"{parent_ns}{CHECKPOINT_NAMESPACE_SEPARATOR}{packet.node}" - if parent_ns - else packet.node - ) - task_id = str( - uuid5(UUID(checkpoint["id"]), json.dumps((checkpoint_ns, metadata))) - ) writes = deque() tasks.append( PregelExecutableTask( @@ -328,7 +329,7 @@ def prepare_next_tasks( ) ) else: - tasks.append(PregelTaskDescription(packet.node)) + tasks.append(PregelTask(task_id, packet.node)) # Check if any processes should be run in next step # If so, prepare the values to be passed to them version_type = type(next(iter(checkpoint["channel_versions"].values()), None)) @@ -356,26 +357,27 @@ def prepare_next_tasks( except StopIteration: continue + # create task id + metadata = { + "langgraph_step": step, + "langgraph_node": name, + "langgraph_triggers": triggers, + "langgraph_task_idx": len(tasks), + } + checkpoint_ns = ( + f"{parent_ns}{CHECKPOINT_NAMESPACE_SEPARATOR}{name}" + if parent_ns + else name + ) + task_id = str( + uuid5( + UUID(checkpoint["id"]), + json.dumps((checkpoint_ns, metadata)), + ) + ) + if for_execution: if node := proc.get_node(): - metadata = { - "langgraph_step": step, - "langgraph_node": name, - "langgraph_triggers": triggers, - "langgraph_task_idx": len(tasks), - } - checkpoint_ns = ( - f"{parent_ns}{CHECKPOINT_NAMESPACE_SEPARATOR}{name}" - if parent_ns - else name - ) - task_id = str( - uuid5( - UUID(checkpoint["id"]), - json.dumps((checkpoint_ns, metadata)), - ) - ) - writes = deque() tasks.append( PregelExecutableTask( @@ -424,7 +426,7 @@ def prepare_next_tasks( ) ) else: - tasks.append(PregelTaskDescription(name)) + tasks.append(PregelTask(task_id, name)) return tasks @@ -454,9 +456,7 @@ def _proc_input( managed_values = {} for key, chan in proc.channels.items(): if is_managed_value(chan): - managed_values[key] = managed[key]( - step, PregelTaskDescription(name) - ) + managed_values[key] = managed[key](step) val.update(managed_values) except EmptyChannelError: diff --git a/libs/langgraph/langgraph/pregel/debug.py b/libs/langgraph/langgraph/pregel/debug.py index 3dbb46675..931f3a180 100644 --- a/libs/langgraph/langgraph/pregel/debug.py +++ b/libs/langgraph/langgraph/pregel/debug.py @@ -10,9 +10,9 @@ from langchain_core.utils.input import get_bolded_text, get_colored_text from langgraph.channels.base import BaseChannel from langgraph.checkpoint.base import Checkpoint, CheckpointMetadata, PendingWrite -from langgraph.constants import TAG_HIDDEN +from langgraph.constants import ERROR, TAG_HIDDEN from langgraph.pregel.io import read_channels -from langgraph.pregel.types import PregelExecutableTask +from langgraph.pregel.types import PregelExecutableTask, PregelTask class TaskPayload(TypedDict): @@ -28,10 +28,18 @@ class TaskResultPayload(TypedDict): result: list[tuple[str, Any]] +class CheckpointTask(TypedDict): + id: str + name: str + error: Optional[str] + + class CheckpointPayload(TypedDict): config: Optional[RunnableConfig] metadata: CheckpointMetadata values: dict[str, Any] + next: list[str] + tasks: list[CheckpointTask] class DebugOutputBase(TypedDict): @@ -131,6 +139,19 @@ def map_debug_checkpoint( "values": read_channels(channels, stream_channels), "metadata": metadata, "next": [t.name for t in tasks], + "tasks": [ + { + "id": t.id, + "name": t.name, + "error": t.error, + } + if t.error + else { + "id": t.id, + "name": t.name, + } + for t in tasks_w_writes(tasks, pending_writes) + ], }, } @@ -176,3 +197,25 @@ def print_step_checkpoint( + get_bolded_text(f"State at the end of step {step}:\n") + pformat(read_channels(channels, whitelist), depth=3) ) + + +def tasks_w_writes( + tasks: list[PregelExecutableTask], + pending_writes: Optional[list[PendingWrite]], +) -> tuple[PregelTask, ...]: + return tuple( + PregelTask( + task.id, + task.name, + next( + ( + exc + for tid, n, exc in pending_writes or [] + if tid == task.id + if n == ERROR + ), + None, + ), + ) + for task in tasks + ) diff --git a/libs/langgraph/langgraph/pregel/loop.py b/libs/langgraph/langgraph/pregel/loop.py index cd4bff66a..f43aa25a7 100644 --- a/libs/langgraph/langgraph/pregel/loop.py +++ b/libs/langgraph/langgraph/pregel/loop.py @@ -39,7 +39,13 @@ from langgraph.checkpoint.base import ( create_checkpoint, empty_checkpoint, ) -from langgraph.constants import CONFIG_KEY_READ, CONFIG_KEY_RESUMING, INPUT, INTERRUPT +from langgraph.constants import ( + CONFIG_KEY_READ, + CONFIG_KEY_RESUMING, + ERROR, + INPUT, + INTERRUPT, +) from langgraph.errors import EmptyInputError, GraphInterrupt from langgraph.managed.base import ( AsyncManagedValuesManager, @@ -252,6 +258,8 @@ class PregelLoop: # if there are pending writes from a previous loop, apply them if self.checkpoint_pending_writes: for tid, k, v in self.checkpoint_pending_writes: + if k == ERROR: # TODO same for INTERRUPT + continue if task := next((t for t in self.tasks if t.id == tid), None): task.writes.append((k, v)) diff --git a/libs/langgraph/langgraph/pregel/types.py b/libs/langgraph/langgraph/pregel/types.py index 7784cf023..8343329a4 100644 --- a/libs/langgraph/langgraph/pregel/types.py +++ b/libs/langgraph/langgraph/pregel/types.py @@ -56,8 +56,10 @@ class RetryPolicy(NamedTuple): """List of exception classes that should trigger a retry, or a callable that returns True for exceptions that should trigger a retry.""" -class PregelTaskDescription(NamedTuple): +class PregelTask(NamedTuple): + id: str name: str + error: Optional[Exception] = None class PregelExecutableTask(NamedTuple): @@ -72,18 +74,22 @@ class PregelExecutableTask(NamedTuple): class StateSnapshot(NamedTuple): + """Snapshot of the state of the graph at the beginning of a step.""" + values: Union[dict[str, Any], Any] """Current values of channels""" - next: tuple[str] - """Nodes to execute in the next step, if any""" + next: tuple[str, ...] + """The name of the node to execute in each task for this step.""" config: RunnableConfig """Config used to fetch this snapshot""" metadata: Optional[CheckpointMetadata] """Metadata associated with this snapshot""" created_at: Optional[str] """Timestamp of snapshot creation""" - parent_config: Optional[RunnableConfig] = None + parent_config: Optional[RunnableConfig] """Config used to fetch the parent snapshot, if any""" + tasks: tuple[PregelTask, ...] + """Tasks to execute in this step. If already attempted, may contain an error.""" All = Literal["*"] diff --git a/libs/langgraph/tests/any_str.py b/libs/langgraph/tests/any_str.py index 0cc419e8b..9aa030d3b 100644 --- a/libs/langgraph/tests/any_str.py +++ b/libs/langgraph/tests/any_str.py @@ -4,3 +4,21 @@ class AnyStr(str): def __eq__(self, other: object) -> bool: return isinstance(other, str) + + def __hash__(self) -> int: + return hash(str(self)) + + +class ExceptionLike: + def __init__(self, exc: Exception) -> None: + self.exc = exc + + def __eq__(self, value: object) -> bool: + return ( + isinstance(value, Exception) + and self.exc.__class__ == value.__class__ + and str(self.exc) == str(value) + ) + + def __hash__(self) -> int: + return hash((self.exc.__class__, str(self.exc))) diff --git a/libs/langgraph/tests/test_pregel.py b/libs/langgraph/tests/test_pregel.py index 7bb733669..68bbc65ce 100644 --- a/libs/langgraph/tests/test_pregel.py +++ b/libs/langgraph/tests/test_pregel.py @@ -1,5 +1,4 @@ import json -import logging import operator import time import warnings @@ -43,6 +42,7 @@ from langgraph.channels.last_value import LastValue from langgraph.channels.topic import Topic from langgraph.channels.untracked_value import UntrackedValue from langgraph.checkpoint.base import ( + BaseCheckpointSaver, Checkpoint, CheckpointMetadata, CheckpointTuple, @@ -51,7 +51,7 @@ from langgraph.checkpoint.memory import MemorySaver from langgraph.checkpoint.serde.base import SerializerProtocol from langgraph.checkpoint.serde.jsonplus import JsonPlusSerializer from langgraph.checkpoint.sqlite import SqliteSaver -from langgraph.constants import Send +from langgraph.constants import ERROR, Send from langgraph.errors import InvalidUpdateError from langgraph.graph import END, Graph from langgraph.graph.graph import START @@ -63,7 +63,8 @@ from langgraph.prebuilt.chat_agent_executor import ( from langgraph.prebuilt.tool_node import ToolNode from langgraph.pregel import Channel, GraphRecursionError, Pregel, StateSnapshot from langgraph.pregel.retry import RetryPolicy -from tests.any_str import AnyStr +from langgraph.pregel.types import PregelTask +from tests.any_str import AnyStr, ExceptionLike from tests.memory_assert import ( MemorySaverAssertCheckpointMetadata, MemorySaverAssertImmutable, @@ -644,6 +645,7 @@ def test_invoke_two_processes_in_out_interrupt( assert history == [ StateSnapshot( values={"inbox": 4, "output": 5, "input": 3}, + tasks=(), next=(), config={ "configurable": { @@ -658,6 +660,7 @@ def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"inbox": 4, "output": 4, "input": 3}, + tasks=(PregelTask(AnyStr(), "two"),), next=("two",), config={ "configurable": { @@ -672,6 +675,7 @@ def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"inbox": 21, "output": 4, "input": 3}, + tasks=(PregelTask(AnyStr(), "one"),), next=("one",), config={ "configurable": { @@ -686,6 +690,7 @@ def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"inbox": 21, "output": 4, "input": 20}, + tasks=(PregelTask(AnyStr(), "two"),), next=("two",), config={ "configurable": { @@ -700,6 +705,7 @@ def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"inbox": 3, "output": 4, "input": 20}, + tasks=(PregelTask(AnyStr(), "one"),), next=("one",), config={ "configurable": { @@ -714,6 +720,7 @@ def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"inbox": 3, "output": 4, "input": 2}, + tasks=(), next=(), config={ "configurable": { @@ -728,6 +735,7 @@ def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"inbox": 3, "input": 2}, + tasks=(PregelTask(AnyStr(), "two"),), next=("two",), config={ "configurable": { @@ -742,6 +750,7 @@ def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"input": 2}, + tasks=(PregelTask(AnyStr(), "one"),), next=("one",), config={ "configurable": { @@ -814,6 +823,7 @@ def test_fork_always_re_runs_nodes( assert history == [ StateSnapshot( values=6, + tasks=(), next=(), config={ "configurable": { @@ -828,6 +838,7 @@ def test_fork_always_re_runs_nodes( ), StateSnapshot( values=5, + tasks=(PregelTask(AnyStr(), "add_one"),), next=("add_one",), config={ "configurable": { @@ -842,6 +853,7 @@ def test_fork_always_re_runs_nodes( ), StateSnapshot( values=4, + tasks=(PregelTask(AnyStr(), "add_one"),), next=("add_one",), config={ "configurable": { @@ -856,6 +868,7 @@ def test_fork_always_re_runs_nodes( ), StateSnapshot( values=3, + tasks=(PregelTask(AnyStr(), "add_one"),), next=("add_one",), config={ "configurable": { @@ -870,6 +883,7 @@ def test_fork_always_re_runs_nodes( ), StateSnapshot( values=2, + tasks=(PregelTask(AnyStr(), "add_one"),), next=("add_one",), config={ "configurable": { @@ -884,6 +898,7 @@ def test_fork_always_re_runs_nodes( ), StateSnapshot( values=1, + tasks=(PregelTask(AnyStr(), "add_one"),), next=("add_one",), config={ "configurable": { @@ -898,6 +913,7 @@ def test_fork_always_re_runs_nodes( ), StateSnapshot( values=0, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -1192,8 +1208,7 @@ def test_invoke_two_processes_two_in_two_out_valid(mocker: MockerFixture) -> Non assert app.invoke(2) == [3, 3] -def test_invoke_checkpoint(mocker: MockerFixture, caplog) -> None: - caplog.set_level(logging.INFO) +def test_invoke_checkpoint(mocker: MockerFixture) -> None: add_one = mocker.Mock(side_effect=lambda x: x["total"] + x["input"]) errored_once = False @@ -1239,16 +1254,19 @@ def test_invoke_checkpoint(mocker: MockerFixture, caplog) -> None: # total is now 2, so output is 2+3=5 assert app.invoke(3, {"configurable": {"thread_id": "1"}}) == 5 assert errored_once, "errored and retried" - checkpoint = memory.get({"configurable": {"thread_id": "1"}}) - assert checkpoint is not None - assert checkpoint["channel_values"].get("total") == 7 + checkpoint_tup = memory.get_tuple({"configurable": {"thread_id": "1"}}) + assert checkpoint_tup is not None + assert checkpoint_tup.checkpoint["channel_values"].get("total") == 7 # total is now 2+5=7, so output would be 7+4=11, but raises ValueError with pytest.raises(ValueError): app.invoke(4, {"configurable": {"thread_id": "1"}}) - # checkpoint is not updated - checkpoint = memory.get({"configurable": {"thread_id": "1"}}) - assert checkpoint is not None - assert checkpoint["channel_values"].get("total") == 7 + # checkpoint is not updated, error is recorded + checkpoint_tup = memory.get_tuple({"configurable": {"thread_id": "1"}}) + assert checkpoint_tup is not None + assert checkpoint_tup.checkpoint["channel_values"].get("total") == 7 + assert checkpoint_tup.pending_writes == [ + (AnyStr(), ERROR, ExceptionLike(ValueError("Input is too large"))) + ] # on a new thread, total starts out as 0, so output is 0+5=5 assert app.invoke(5, {"configurable": {"thread_id": "2"}}) == 5 checkpoint = memory.get({"configurable": {"thread_id": "1"}}) @@ -1266,7 +1284,9 @@ def test_invoke_checkpoint(mocker: MockerFixture, caplog) -> None: def test_pending_writes_resume( request: pytest.FixtureRequest, checkpointer_name: str ) -> None: - checkpointer = request.getfixturevalue(f"checkpointer_{checkpointer_name}") + checkpointer: BaseCheckpointSaver = request.getfixturevalue( + f"checkpointer_{checkpointer_name}" + ) class State(TypedDict): value: Annotated[int, operator.add] @@ -1310,16 +1330,28 @@ def test_pending_writes_resume( assert state is not None assert state.values == {"value": 1} assert state.next == ("one", "two") + assert state.tasks == ( + PregelTask(AnyStr(), "one"), + PregelTask(AnyStr(), "two", ExceptionLike(ConnectionError("I'm not good"))), + ) assert state.metadata == {"source": "loop", "step": 0, "writes": None} # should contain pending write of "one" checkpoint = checkpointer.get_tuple(thread1) assert checkpoint is not None - assert checkpoint.pending_writes == [ + # should contain error from "two" + expected_writes = [ (AnyStr(), "one", "one"), (AnyStr(), "value", 2), + (AnyStr(), ERROR, ExceptionLike(ConnectionError("I'm not good"))), ] - # both pending writes come from same task - assert checkpoint.pending_writes[0][0] == checkpoint.pending_writes[1][0] + assert len(checkpoint.pending_writes) == 3 + assert all(w in expected_writes for w in checkpoint.pending_writes) + # both non-error pending writes come from same task + non_error_writes = [w for w in checkpoint.pending_writes if w[1] != ERROR] + assert non_error_writes[0][0] == non_error_writes[1][0] + # error write is from the other task + error_write = next(w for w in checkpoint.pending_writes if w[1] == ERROR) + assert error_write[0] != non_error_writes[0][0] # resume execution with pytest.raises(ConnectionError, match="I'm not good"): @@ -1332,7 +1364,7 @@ def test_pending_writes_resume( # confirm no new checkpoints saved state_two = graph.get_state(thread1) - assert state_two == state + assert state_two.metadata == state.metadata # resume execution, without exception two.rtn = {"value": 3} @@ -1951,6 +1983,7 @@ def test_conditional_graph(snapshot: SnapshotAssertion) -> None: ), }, }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], config=app_w_interrupt.checkpointer.get_tuple(config).config, @@ -2000,6 +2033,7 @@ def test_conditional_graph(snapshot: SnapshotAssertion) -> None: "input": "what is weather in sf", }, }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2099,6 +2133,7 @@ def test_conditional_graph(snapshot: SnapshotAssertion) -> None: ), }, }, + tasks=(), next=(), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2159,6 +2194,7 @@ def test_conditional_graph(snapshot: SnapshotAssertion) -> None: ), }, }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2202,6 +2238,7 @@ def test_conditional_graph(snapshot: SnapshotAssertion) -> None: "input": "what is weather in sf", }, }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2301,6 +2338,7 @@ def test_conditional_graph(snapshot: SnapshotAssertion) -> None: ), }, }, + tasks=(), next=(), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2361,6 +2399,7 @@ def test_conditional_graph(snapshot: SnapshotAssertion) -> None: ), }, }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2795,6 +2834,7 @@ def test_conditional_state_graph( ), "intermediate_steps": [], }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2835,6 +2875,7 @@ def test_conditional_state_graph( ), "intermediate_steps": [], }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2909,6 +2950,7 @@ def test_conditional_state_graph( ) ], }, + tasks=(), next=(), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2956,6 +2998,7 @@ def test_conditional_state_graph( ), "intermediate_steps": [], }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2995,6 +3038,7 @@ def test_conditional_state_graph( ), "intermediate_steps": [], }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -3067,6 +3111,7 @@ def test_conditional_state_graph( ) ], }, + tasks=(), next=(), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -3102,6 +3147,7 @@ def test_conditional_state_graph( values={ "intermediate_steps": [], }, + tasks=(PregelTask(AnyStr(), "agent"),), next=("agent",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -3126,6 +3172,7 @@ def test_conditional_state_graph( ), "intermediate_steps": [], }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -3178,6 +3225,7 @@ def test_conditional_state_graph( ) ], }, + tasks=(PregelTask(AnyStr(), "agent"),), next=("agent",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -3241,6 +3289,7 @@ def test_conditional_state_graph( ), "intermediate_steps": [], }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -3293,6 +3342,7 @@ def test_conditional_state_graph( ) ], }, + tasks=(PregelTask(AnyStr(), "agent"),), next=("agent",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -4056,6 +4106,7 @@ def test_state_graph_packets(serde: SerializerProtocol) -> None: ), ] }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=(app_w_interrupt.checkpointer.get_tuple(config)).config, created_at=(app_w_interrupt.checkpointer.get_tuple(config)).checkpoint["ts"], @@ -4106,6 +4157,7 @@ def test_state_graph_packets(serde: SerializerProtocol) -> None: ), ] }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=(app_w_interrupt.checkpointer.get_tuple(config)).checkpoint["ts"], @@ -4204,6 +4256,7 @@ def test_state_graph_packets(serde: SerializerProtocol) -> None: ), ] }, + tasks=(PregelTask(AnyStr(), "tools"), PregelTask(AnyStr(), "tools")), next=("tools", "tools"), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=(app_w_interrupt.checkpointer.get_tuple(config)).checkpoint["ts"], @@ -4267,6 +4320,7 @@ def test_state_graph_packets(serde: SerializerProtocol) -> None: AIMessage(content="answer", id="ai2"), ] }, + tasks=(), next=(), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=(app_w_interrupt.checkpointer.get_tuple(config)).checkpoint["ts"], @@ -4544,6 +4598,7 @@ def test_message_graph( id="ai1", ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -4588,6 +4643,7 @@ def test_message_graph( ], ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=next_config, created_at=AnyStr(), @@ -4669,6 +4725,7 @@ def test_message_graph( id="ai2", ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -4720,6 +4777,7 @@ def test_message_graph( ), AIMessage(content="answer", id="ai2"), ], + tasks=(), next=(), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -4769,6 +4827,7 @@ def test_message_graph( id="ai1", ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -4813,6 +4872,7 @@ def test_message_graph( ], ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -4894,6 +4954,7 @@ def test_message_graph( id="ai2", ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -4945,6 +5006,7 @@ def test_message_graph( ), AIMessage(content="answer", id="ai2"), ], + tasks=(), next=(), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -4984,6 +5046,7 @@ def test_message_graph( AIMessage(content="answer", id="ai2"), _AnyIdAIMessage(content="an extra message"), ], + tasks=(PregelTask(AnyStr(), "agent"),), next=("agent",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -5254,6 +5317,7 @@ def test_root_graph( id="ai1", ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -5298,6 +5362,7 @@ def test_root_graph( ], ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=next_config, created_at=AnyStr(), @@ -5379,6 +5444,7 @@ def test_root_graph( id="ai2", ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -5430,6 +5496,7 @@ def test_root_graph( ), AIMessage(content="answer", id="ai2"), ], + tasks=(), next=(), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -5479,6 +5546,7 @@ def test_root_graph( id="ai1", ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -5523,6 +5591,7 @@ def test_root_graph( ], ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -5604,6 +5673,7 @@ def test_root_graph( id="ai2", ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -5655,6 +5725,7 @@ def test_root_graph( ), AIMessage(content="answer", id="ai2"), ], + tasks=(), next=(), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -5694,6 +5765,7 @@ def test_root_graph( AIMessage(content="answer", id="ai2"), _AnyIdAIMessage(content="an extra message"), ], + tasks=(PregelTask(AnyStr(), "agent"),), next=("agent",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -5765,6 +5837,7 @@ def test_root_graph( _AnyIdAIMessage(content="an extra message"), ] }, + tasks=(PregelTask(AnyStr(), "agent"),), next=("agent",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -6098,6 +6171,7 @@ def test_start_branch_then(snapshot: SnapshotAssertion) -> None: ] assert tool_two.get_state(thread1) == StateSnapshot( values={"my_key": "value ⛰️", "market": "DE"}, + tasks=(PregelTask(AnyStr(), "tool_two_slow"),), next=("tool_two_slow",), config=tool_two.checkpointer.get_tuple(thread1).config, created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], @@ -6111,6 +6185,7 @@ def test_start_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread1) == StateSnapshot( values={"my_key": "value ⛰️ slow", "market": "DE"}, + tasks=(), next=(), config=tool_two.checkpointer.get_tuple(thread1).config, created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], @@ -6130,6 +6205,7 @@ def test_start_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread2) == StateSnapshot( values={"my_key": "value", "market": "US"}, + tasks=(PregelTask(AnyStr(), "tool_two_fast"),), next=("tool_two_fast",), config=tool_two.checkpointer.get_tuple(thread2).config, created_at=tool_two.checkpointer.get_tuple(thread2).checkpoint["ts"], @@ -6143,6 +6219,7 @@ def test_start_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread2) == StateSnapshot( values={"my_key": "value fast", "market": "US"}, + tasks=(), next=(), config=tool_two.checkpointer.get_tuple(thread2).config, created_at=tool_two.checkpointer.get_tuple(thread2).checkpoint["ts"], @@ -6162,6 +6239,7 @@ def test_start_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread3) == StateSnapshot( values={"my_key": "value", "market": "US"}, + tasks=(PregelTask(AnyStr(), "tool_two_fast"),), next=("tool_two_fast",), config=tool_two.checkpointer.get_tuple(thread3).config, created_at=tool_two.checkpointer.get_tuple(thread3).checkpoint["ts"], @@ -6172,6 +6250,7 @@ def test_start_branch_then(snapshot: SnapshotAssertion) -> None: tool_two.update_state(thread3, {"my_key": "key"}) # appends to my_key assert tool_two.get_state(thread3) == StateSnapshot( values={"my_key": "valuekey", "market": "US"}, + tasks=(PregelTask(AnyStr(), "tool_two_fast"),), next=("tool_two_fast",), config=tool_two.checkpointer.get_tuple(thread3).config, created_at=tool_two.checkpointer.get_tuple(thread3).checkpoint["ts"], @@ -6189,6 +6268,7 @@ def test_start_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread3) == StateSnapshot( values={"my_key": "valuekey fast", "market": "US"}, + tasks=(), next=(), config=tool_two.checkpointer.get_tuple(thread3).config, created_at=tool_two.checkpointer.get_tuple(thread3).checkpoint["ts"], @@ -6263,6 +6343,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "writes": {"my_key": "value", "market": "DE"}, }, "next": ["__start__"], + "tasks": [{"id": AnyStr(), "name": "__start__"}], }, }, { @@ -6291,6 +6372,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "writes": None, }, "next": ["prepare"], + "tasks": [{"id": AnyStr(), "name": "prepare"}], }, }, { @@ -6340,6 +6422,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "writes": {"prepare": {"my_key": " prepared"}}, }, "next": ["tool_two_slow"], + "tasks": [{"id": AnyStr(), "name": "tool_two_slow"}], }, }, { @@ -6389,6 +6472,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "writes": {"tool_two_slow": {"my_key": " slow"}}, }, "next": ["finish"], + "tasks": [{"id": AnyStr(), "name": "finish"}], }, }, { @@ -6438,6 +6522,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "writes": {"finish": {"my_key": " finished"}}, }, "next": [], + "tasks": [], }, }, ] @@ -6458,6 +6543,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread1) == StateSnapshot( values={"my_key": "value prepared", "market": "DE"}, + tasks=(PregelTask(AnyStr(), "tool_two_slow"),), next=("tool_two_slow",), config=tool_two.checkpointer.get_tuple(thread1).config, created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], @@ -6475,6 +6561,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread1) == StateSnapshot( values={"my_key": "value prepared slow finished", "market": "DE"}, + tasks=(), next=(), config=tool_two.checkpointer.get_tuple(thread1).config, created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], @@ -6494,6 +6581,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread2) == StateSnapshot( values={"my_key": "value prepared", "market": "US"}, + tasks=(PregelTask(AnyStr(), "tool_two_fast"),), next=("tool_two_fast",), config=tool_two.checkpointer.get_tuple(thread2).config, created_at=tool_two.checkpointer.get_tuple(thread2).checkpoint["ts"], @@ -6511,6 +6599,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread2) == StateSnapshot( values={"my_key": "value prepared fast finished", "market": "US"}, + tasks=(), next=(), config=tool_two.checkpointer.get_tuple(thread2).config, created_at=tool_two.checkpointer.get_tuple(thread2).checkpoint["ts"], @@ -6539,6 +6628,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "my_key": "value prepared slow", "market": "DE", }, + tasks=(PregelTask(AnyStr(), "finish"),), next=("finish",), config=tool_two.checkpointer.get_tuple(thread1).config, created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], @@ -6557,6 +6647,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "my_key": "value prepared slower", "market": "DE", }, + tasks=(PregelTask(AnyStr(), "finish"),), next=("finish",), config=tool_two.checkpointer.get_tuple(thread1).config, created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], @@ -6585,6 +6676,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread1) == StateSnapshot( values={"my_key": "value prepared", "market": "DE"}, + tasks=(PregelTask(AnyStr(), "tool_two_slow"),), next=("tool_two_slow",), config=tool_two.checkpointer.get_tuple(thread1).config, created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], @@ -6602,6 +6694,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread1) == StateSnapshot( values={"my_key": "value prepared slow finished", "market": "DE"}, + tasks=(), next=(), config=tool_two.checkpointer.get_tuple(thread1).config, created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], @@ -6621,6 +6714,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread2) == StateSnapshot( values={"my_key": "value prepared", "market": "US"}, + tasks=(PregelTask(AnyStr(), "tool_two_fast"),), next=("tool_two_fast",), config=tool_two.checkpointer.get_tuple(thread2).config, created_at=tool_two.checkpointer.get_tuple(thread2).checkpoint["ts"], @@ -6638,6 +6732,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread2) == StateSnapshot( values={"my_key": "value prepared fast finished", "market": "US"}, + tasks=(), next=(), config=tool_two.checkpointer.get_tuple(thread2).config, created_at=tool_two.checkpointer.get_tuple(thread2).checkpoint["ts"], @@ -6655,6 +6750,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: # check current state assert tool_two.get_state(thread3) == StateSnapshot( values={"my_key": "key", "market": "DE"}, + tasks=(PregelTask(AnyStr(), "prepare"),), next=("prepare",), config=uconfig, created_at=AnyStr(), @@ -6663,6 +6759,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "step": 0, "writes": {START: {"my_key": "key", "market": "DE"}}, }, + parent_config=None, ) # run from this point assert tool_two.invoke(None, thread3) == { @@ -6672,6 +6769,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: # get state after first node assert tool_two.get_state(thread3) == StateSnapshot( values={"my_key": "key prepared", "market": "DE"}, + tasks=(PregelTask(AnyStr(), "tool_two_slow"),), next=("tool_two_slow",), config=tool_two.checkpointer.get_tuple(thread3).config, created_at=tool_two.checkpointer.get_tuple(thread3).checkpoint["ts"], @@ -6689,6 +6787,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread3) == StateSnapshot( values={"my_key": "key prepared slow finished", "market": "DE"}, + tasks=(), next=(), config=tool_two.checkpointer.get_tuple(thread3).config, created_at=tool_two.checkpointer.get_tuple(thread3).checkpoint["ts"], @@ -6805,6 +6904,7 @@ def test_in_one_fan_out_state_graph_waiting_edge(snapshot: SnapshotAssertion) -> "query": "analyzed: query: what is weather in sf", "docs": ["doc1", "doc2", "doc3", "doc4", "doc5"], }, + tasks=(PregelTask(AnyStr(), "qa"),), next=("qa",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -7761,6 +7861,7 @@ def test_nested_graph_interrupts( assert list(app.get_state_history(config)) == [ StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -7785,6 +7886,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -7805,6 +7907,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -7828,6 +7931,7 @@ def test_nested_graph_interrupts( assert list(app.get_state_history(config)) == [ StateSnapshot( values={"my_key": "hi my value here and there and back again"}, + tasks=(), next=(), config={ "configurable": { @@ -7854,6 +7958,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value here and there"}, + tasks=(PregelTask(AnyStr(), "outer_2"),), next=("outer_2",), config={ "configurable": { @@ -7878,6 +7983,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -7902,6 +8008,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -7922,6 +8029,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -7983,6 +8091,7 @@ def test_nested_graph_interrupts( assert list(app.get_state_history(config)) == [ StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -8007,6 +8116,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -8027,6 +8137,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -8049,6 +8160,7 @@ def test_nested_graph_interrupts( assert list(app.get_state_history(config)) == [ StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -8073,6 +8185,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -8093,6 +8206,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -8121,6 +8235,7 @@ def test_nested_graph_interrupts( assert list(app.get_state_history(config)) == [ StateSnapshot( values={"my_key": "hi my value here and there and back again"}, + tasks=(), next=(), config={ "configurable": { @@ -8147,6 +8262,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value here and there"}, + tasks=(PregelTask(AnyStr(), "outer_2"),), next=("outer_2",), config={ "configurable": { @@ -8171,6 +8287,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -8195,6 +8312,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -8215,6 +8333,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -8248,6 +8367,7 @@ def test_nested_graph_interrupts( assert list(app.get_state_history(config)) == [ StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -8272,6 +8392,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -8292,6 +8413,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -8317,6 +8439,7 @@ def test_nested_graph_interrupts( assert list(app.get_state_history(config)) == [ StateSnapshot( values={"my_key": "hi my value here and there"}, + tasks=(PregelTask(AnyStr(), "outer_2"),), next=("outer_2",), config={ "configurable": { @@ -8341,6 +8464,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -8365,6 +8489,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -8385,6 +8510,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -8410,6 +8536,7 @@ def test_nested_graph_interrupts( assert list(app.get_state_history(config)) == [ StateSnapshot( values={"my_key": "hi my value here and there and back again"}, + tasks=(), next=(), config={ "configurable": { @@ -8436,6 +8563,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value here and there"}, + tasks=(PregelTask(AnyStr(), "outer_2"),), next=("outer_2",), config={ "configurable": { @@ -8460,6 +8588,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -8484,6 +8613,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -8504,6 +8634,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -8532,6 +8663,7 @@ def test_nested_graph_interrupts( assert state_history == [ StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -8556,6 +8688,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -8576,6 +8709,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -8602,6 +8736,7 @@ def test_nested_graph_interrupts( assert child_state_history == [ StateSnapshot( values={"my_key": "hi my value here"}, + tasks=(), next=(), config={ "configurable": { @@ -8650,6 +8785,7 @@ def test_nested_graph_interrupts( assert list(app.get_state_history(config)) == [ StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -8674,6 +8810,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -8698,6 +8835,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -8718,6 +8856,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -8743,6 +8882,7 @@ def test_nested_graph_interrupts( assert list(app.get_state_history(config)) == [ StateSnapshot( values={"my_key": "hi my value here and there and back again"}, + tasks=(), next=(), config={ "configurable": { @@ -8769,6 +8909,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value here and there"}, + tasks=(PregelTask(AnyStr(), "outer_2"),), next=("outer_2",), config={ "configurable": { @@ -8793,6 +8934,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -8817,6 +8959,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -8841,6 +8984,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -8861,6 +9005,7 @@ def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { diff --git a/libs/langgraph/tests/test_pregel_async.py b/libs/langgraph/tests/test_pregel_async.py index ef49aed62..b50ecd36a 100644 --- a/libs/langgraph/tests/test_pregel_async.py +++ b/libs/langgraph/tests/test_pregel_async.py @@ -39,6 +39,7 @@ from langgraph.channels.last_value import LastValue from langgraph.channels.topic import Topic from langgraph.channels.untracked_value import UntrackedValue from langgraph.checkpoint.base import ( + BaseCheckpointSaver, ChannelVersions, Checkpoint, CheckpointMetadata, @@ -46,7 +47,7 @@ from langgraph.checkpoint.base import ( ) from langgraph.checkpoint.memory import MemorySaver from langgraph.checkpoint.sqlite.aio import AsyncSqliteSaver -from langgraph.constants import Send +from langgraph.constants import ERROR, Send from langgraph.errors import InvalidUpdateError from langgraph.graph import END, Graph, StateGraph from langgraph.graph.graph import START @@ -58,7 +59,8 @@ from langgraph.prebuilt.tool_executor import ToolExecutor from langgraph.prebuilt.tool_node import ToolNode from langgraph.pregel import Channel, GraphRecursionError, Pregel, StateSnapshot from langgraph.pregel.retry import RetryPolicy -from tests.any_str import AnyStr +from langgraph.pregel.types import PregelTask +from tests.any_str import AnyStr, ExceptionLike from tests.memory_assert import ( MemorySaverAssertCheckpointMetadata, MemorySaverAssertImmutable, @@ -732,6 +734,7 @@ async def test_invoke_two_processes_in_out_interrupt( assert history == [ StateSnapshot( values={"inbox": 4, "output": 5, "input": 3}, + tasks=(), next=(), config={ "configurable": { @@ -746,6 +749,7 @@ async def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"inbox": 4, "output": 4, "input": 3}, + tasks=(PregelTask(AnyStr(), "two"),), next=("two",), config={ "configurable": { @@ -760,6 +764,7 @@ async def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"inbox": 21, "output": 4, "input": 3}, + tasks=(PregelTask(AnyStr(), "one"),), next=("one",), config={ "configurable": { @@ -774,6 +779,7 @@ async def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"inbox": 21, "output": 4, "input": 20}, + tasks=(PregelTask(AnyStr(), "two"),), next=("two",), config={ "configurable": { @@ -788,6 +794,7 @@ async def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"inbox": 3, "output": 4, "input": 20}, + tasks=(PregelTask(AnyStr(), "one"),), next=("one",), config={ "configurable": { @@ -802,6 +809,7 @@ async def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"inbox": 3, "output": 4, "input": 2}, + tasks=(), next=(), config={ "configurable": { @@ -816,6 +824,7 @@ async def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"inbox": 3, "input": 2}, + tasks=(PregelTask(AnyStr(), "two"),), next=("two",), config={ "configurable": { @@ -830,6 +839,7 @@ async def test_invoke_two_processes_in_out_interrupt( ), StateSnapshot( values={"input": 2}, + tasks=(PregelTask(AnyStr(), "one"),), next=("one",), config={ "configurable": { @@ -913,6 +923,7 @@ async def test_fork_always_re_runs_nodes( StateSnapshot( values=6, next=(), + tasks=(), config={ "configurable": { "thread_id": "1", @@ -926,6 +937,7 @@ async def test_fork_always_re_runs_nodes( ), StateSnapshot( values=5, + tasks=(PregelTask(AnyStr(), "add_one"),), next=("add_one",), config={ "configurable": { @@ -940,6 +952,7 @@ async def test_fork_always_re_runs_nodes( ), StateSnapshot( values=4, + tasks=(PregelTask(AnyStr(), "add_one"),), next=("add_one",), config={ "configurable": { @@ -954,6 +967,7 @@ async def test_fork_always_re_runs_nodes( ), StateSnapshot( values=3, + tasks=(PregelTask(AnyStr(), "add_one"),), next=("add_one",), config={ "configurable": { @@ -968,6 +982,7 @@ async def test_fork_always_re_runs_nodes( ), StateSnapshot( values=2, + tasks=(PregelTask(AnyStr(), "add_one"),), next=("add_one",), config={ "configurable": { @@ -982,6 +997,7 @@ async def test_fork_always_re_runs_nodes( ), StateSnapshot( values=1, + tasks=(PregelTask(AnyStr(), "add_one"),), next=("add_one",), config={ "configurable": { @@ -996,6 +1012,7 @@ async def test_fork_always_re_runs_nodes( ), StateSnapshot( values=0, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -1374,7 +1391,9 @@ async def test_invoke_checkpoint(mocker: MockerFixture) -> None: async def test_pending_writes_resume( request: pytest.FixtureRequest, checkpointer_name: str ) -> None: - checkpointer = request.getfixturevalue(f"checkpointer_{checkpointer_name}") + checkpointer: BaseCheckpointSaver = request.getfixturevalue( + f"checkpointer_{checkpointer_name}" + ) class State(TypedDict): value: Annotated[int, operator.add] @@ -1418,16 +1437,28 @@ async def test_pending_writes_resume( assert state is not None assert state.values == {"value": 1} assert state.next == ("one", "two") + assert state.tasks == ( + PregelTask(AnyStr(), "one"), + PregelTask(AnyStr(), "two", ExceptionLike(ValueError("I'm not good"))), + ) assert state.metadata == {"source": "loop", "step": 0, "writes": None} # should contain pending write of "one" checkpoint = await checkpointer.aget_tuple(thread1) assert checkpoint is not None - assert checkpoint.pending_writes == [ + # should contain error from "two" + expected_writes = [ (AnyStr(), "one", "one"), (AnyStr(), "value", 2), + (AnyStr(), ERROR, ExceptionLike(ValueError("I'm not good"))), ] - # both pending writes come from same task - assert checkpoint.pending_writes[0][0] == checkpoint.pending_writes[1][0] + assert len(checkpoint.pending_writes) == 3 + assert all(w in expected_writes for w in checkpoint.pending_writes) + # both non-error pending writes come from same task + non_error_writes = [w for w in checkpoint.pending_writes if w[1] != ERROR] + assert non_error_writes[0][0] == non_error_writes[1][0] + # error write is from the other task + error_write = next(w for w in checkpoint.pending_writes if w[1] == ERROR) + assert error_write[0] != non_error_writes[0][0] # resume execution with pytest.raises(ValueError, match="I'm not good"): @@ -1440,7 +1471,7 @@ async def test_pending_writes_resume( # confirm no new checkpoints saved state_two = await graph.aget_state(thread1) - assert state_two == state + assert state_two.metadata == state.metadata # resume execution, without exception two.rtn = {"value": 3} @@ -2115,6 +2146,7 @@ async def test_conditional_graph() -> None: ), }, }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -2162,6 +2194,7 @@ async def test_conditional_graph() -> None: "input": "what is weather in sf", }, }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -2265,6 +2298,7 @@ async def test_conditional_graph() -> None: ), }, }, + tasks=(), next=(), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -2332,6 +2366,7 @@ async def test_conditional_graph() -> None: ), }, }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -2379,6 +2414,7 @@ async def test_conditional_graph() -> None: "input": "what is weather in sf", }, }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -2482,6 +2518,7 @@ async def test_conditional_graph() -> None: ), }, }, + tasks=(), next=(), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -2549,6 +2586,7 @@ async def test_conditional_graph() -> None: ), }, }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -2936,6 +2974,7 @@ async def test_conditional_graph_state(mocker: MockerFixture) -> None: ), "intermediate_steps": [], }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -2980,6 +3019,7 @@ async def test_conditional_graph_state(mocker: MockerFixture) -> None: ), "intermediate_steps": [], }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -3058,6 +3098,7 @@ async def test_conditional_graph_state(mocker: MockerFixture) -> None: ) ], }, + tasks=(), next=(), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -3111,6 +3152,7 @@ async def test_conditional_graph_state(mocker: MockerFixture) -> None: ), "intermediate_steps": [], }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -3154,6 +3196,7 @@ async def test_conditional_graph_state(mocker: MockerFixture) -> None: ), "intermediate_steps": [], }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -3230,6 +3273,7 @@ async def test_conditional_graph_state(mocker: MockerFixture) -> None: ) ], }, + tasks=(), next=(), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -3793,6 +3837,7 @@ async def test_state_graph_packets() -> None: ), ] }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -3845,6 +3890,7 @@ async def test_state_graph_packets() -> None: ), ] }, + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -3946,6 +3992,7 @@ async def test_state_graph_packets() -> None: ), ] }, + tasks=(PregelTask(AnyStr(), "tools"), PregelTask(AnyStr(), "tools")), next=("tools", "tools"), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -4010,6 +4057,7 @@ async def test_state_graph_packets() -> None: AIMessage(content="answer", id="ai2"), ] }, + tasks=(), next=(), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -4230,6 +4278,7 @@ async def test_message_graph() -> None: id="ai1", ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -4273,6 +4322,7 @@ async def test_message_graph() -> None: id="ai1", ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -4344,6 +4394,7 @@ async def test_message_graph() -> None: id="ai2", ), ], + tasks=(PregelTask(AnyStr(), "tools"),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -4396,6 +4447,7 @@ async def test_message_graph() -> None: ), AIMessage(content="answer", id="ai2"), ], + tasks=(), next=(), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -4694,6 +4746,7 @@ async def test_start_branch_then() -> None: ] assert await tool_two.aget_state(thread1) == StateSnapshot( values={"my_key": "value", "market": "DE"}, + tasks=(PregelTask(AnyStr(), "tool_two_slow"),), next=("tool_two_slow",), config=(await tool_two.checkpointer.aget_tuple(thread1)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread1)).checkpoint[ @@ -4711,6 +4764,7 @@ async def test_start_branch_then() -> None: } assert await tool_two.aget_state(thread1) == StateSnapshot( values={"my_key": "value slow", "market": "DE"}, + tasks=(), next=(), config=(await tool_two.checkpointer.aget_tuple(thread1)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread1)).checkpoint[ @@ -4734,6 +4788,7 @@ async def test_start_branch_then() -> None: } assert await tool_two.aget_state(thread2) == StateSnapshot( values={"my_key": "value", "market": "US"}, + tasks=(PregelTask(AnyStr(), "tool_two_fast"),), next=("tool_two_fast",), config=(await tool_two.checkpointer.aget_tuple(thread2)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread2)).checkpoint[ @@ -4751,6 +4806,7 @@ async def test_start_branch_then() -> None: } assert await tool_two.aget_state(thread2) == StateSnapshot( values={"my_key": "value fast", "market": "US"}, + tasks=(), next=(), config=(await tool_two.checkpointer.aget_tuple(thread2)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread2)).checkpoint[ @@ -4774,6 +4830,7 @@ async def test_start_branch_then() -> None: } assert await tool_two.aget_state(thread3) == StateSnapshot( values={"my_key": "value", "market": "US"}, + tasks=(PregelTask(AnyStr(), "tool_two_fast"),), next=("tool_two_fast",), config=(await tool_two.checkpointer.aget_tuple(thread3)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread3)).checkpoint[ @@ -4788,6 +4845,7 @@ async def test_start_branch_then() -> None: await tool_two.aupdate_state(thread3, {"my_key": "key"}) # appends to my_key assert await tool_two.aget_state(thread3) == StateSnapshot( values={"my_key": "valuekey", "market": "US"}, + tasks=(PregelTask(AnyStr(), "tool_two_fast"),), next=("tool_two_fast",), config=(await tool_two.checkpointer.aget_tuple(thread3)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread3)).checkpoint[ @@ -4809,6 +4867,7 @@ async def test_start_branch_then() -> None: } assert await tool_two.aget_state(thread3) == StateSnapshot( values={"my_key": "valuekey fast", "market": "US"}, + tasks=(), next=(), config=(await tool_two.checkpointer.aget_tuple(thread3)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread3)).checkpoint[ @@ -4886,6 +4945,12 @@ async def test_branch_then() -> None: "writes": {"my_key": "value", "market": "DE"}, }, "next": ["__start__"], + "tasks": [ + { + "id": AnyStr(), + "name": "__start__", + } + ], }, }, { @@ -4914,6 +4979,12 @@ async def test_branch_then() -> None: "writes": None, }, "next": ["prepare"], + "tasks": [ + { + "id": AnyStr(), + "name": "prepare", + } + ], }, }, { @@ -4963,6 +5034,12 @@ async def test_branch_then() -> None: "writes": {"prepare": {"my_key": " prepared"}}, }, "next": ["tool_two_slow"], + "tasks": [ + { + "id": AnyStr(), + "name": "tool_two_slow", + } + ], }, }, { @@ -5012,6 +5089,12 @@ async def test_branch_then() -> None: "writes": {"tool_two_slow": {"my_key": " slow"}}, }, "next": ["finish"], + "tasks": [ + { + "id": AnyStr(), + "name": "finish", + } + ], }, }, { @@ -5061,6 +5144,7 @@ async def test_branch_then() -> None: "writes": {"finish": {"my_key": " finished"}}, }, "next": [], + "tasks": [], }, }, ] @@ -5081,6 +5165,7 @@ async def test_branch_then() -> None: } assert await tool_two.aget_state(thread1) == StateSnapshot( values={"my_key": "value prepared", "market": "DE"}, + tasks=(PregelTask(AnyStr(), "tool_two_slow"),), next=("tool_two_slow",), config=(await tool_two.checkpointer.aget_tuple(thread1)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread1)).checkpoint[ @@ -5102,6 +5187,7 @@ async def test_branch_then() -> None: } assert await tool_two.aget_state(thread1) == StateSnapshot( values={"my_key": "value prepared slow finished", "market": "DE"}, + tasks=(), next=(), config=(await tool_two.checkpointer.aget_tuple(thread1)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread1)).checkpoint[ @@ -5125,6 +5211,7 @@ async def test_branch_then() -> None: } assert await tool_two.aget_state(thread2) == StateSnapshot( values={"my_key": "value prepared", "market": "US"}, + tasks=(PregelTask(AnyStr(), "tool_two_fast"),), next=("tool_two_fast",), config=(await tool_two.checkpointer.aget_tuple(thread2)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread2)).checkpoint[ @@ -5146,6 +5233,7 @@ async def test_branch_then() -> None: } assert await tool_two.aget_state(thread2) == StateSnapshot( values={"my_key": "value prepared fast finished", "market": "US"}, + tasks=(), next=(), config=(await tool_two.checkpointer.aget_tuple(thread2)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread2)).checkpoint[ @@ -5178,6 +5266,7 @@ async def test_branch_then() -> None: } assert await tool_two.aget_state(thread1) == StateSnapshot( values={"my_key": "value prepared", "market": "DE"}, + tasks=(PregelTask(AnyStr(), "tool_two_slow"),), next=("tool_two_slow",), config=(await tool_two.checkpointer.aget_tuple(thread1)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread1)).checkpoint[ @@ -5199,6 +5288,7 @@ async def test_branch_then() -> None: } assert await tool_two.aget_state(thread1) == StateSnapshot( values={"my_key": "value prepared slow finished", "market": "DE"}, + tasks=(), next=(), config=(await tool_two.checkpointer.aget_tuple(thread1)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread1)).checkpoint[ @@ -5222,6 +5312,7 @@ async def test_branch_then() -> None: } assert await tool_two.aget_state(thread2) == StateSnapshot( values={"my_key": "value prepared", "market": "US"}, + tasks=(PregelTask(AnyStr(), "tool_two_fast"),), next=("tool_two_fast",), config=(await tool_two.checkpointer.aget_tuple(thread2)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread2)).checkpoint[ @@ -5243,6 +5334,7 @@ async def test_branch_then() -> None: } assert await tool_two.aget_state(thread2) == StateSnapshot( values={"my_key": "value prepared fast finished", "market": "US"}, + tasks=(), next=(), config=(await tool_two.checkpointer.aget_tuple(thread2)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread2)).checkpoint[ @@ -5266,6 +5358,7 @@ async def test_branch_then() -> None: # check current state assert await tool_two.aget_state(thread3) == StateSnapshot( values={"my_key": "key", "market": "DE"}, + tasks=(PregelTask(AnyStr(), "prepare"),), next=("prepare",), config=uconfig, created_at=AnyStr(), @@ -5274,6 +5367,7 @@ async def test_branch_then() -> None: "step": 0, "writes": {START: {"my_key": "key", "market": "DE"}}, }, + parent_config=None, ) # run from this point assert await tool_two.ainvoke(None, thread3) == { @@ -5283,6 +5377,7 @@ async def test_branch_then() -> None: # get state after first node assert await tool_two.aget_state(thread3) == StateSnapshot( values={"my_key": "key prepared", "market": "DE"}, + tasks=(PregelTask(AnyStr(), "tool_two_slow"),), next=("tool_two_slow",), config=(await tool_two.checkpointer.aget_tuple(thread3)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread3)).checkpoint[ @@ -5302,6 +5397,7 @@ async def test_branch_then() -> None: } assert await tool_two.aget_state(thread3) == StateSnapshot( values={"my_key": "key prepared slow finished", "market": "DE"}, + tasks=(), next=(), config=(await tool_two.checkpointer.aget_tuple(thread3)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread3)).checkpoint[ @@ -5643,6 +5739,7 @@ async def test_in_one_fan_out_state_graph_waiting_edge_custom_state_class( "answer": "doc1,doc2,doc3,doc4", "docs": ["doc1", "doc2", "doc3", "doc4"], }, + tasks=(), next=(), config={ "configurable": { @@ -6254,6 +6351,7 @@ async def test_nested_graph_interrupts( assert [s async for s in app.aget_state_history(config)] == [ StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -6278,6 +6376,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -6298,6 +6397,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -6321,6 +6421,7 @@ async def test_nested_graph_interrupts( assert [s async for s in app.aget_state_history(config)] == [ StateSnapshot( values={"my_key": "hi my value here and there and back again"}, + tasks=(), next=(), config={ "configurable": { @@ -6347,6 +6448,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value here and there"}, + tasks=(PregelTask(AnyStr(), "outer_2"),), next=("outer_2",), config={ "configurable": { @@ -6371,6 +6473,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -6395,6 +6498,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -6415,6 +6519,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -6481,6 +6586,7 @@ async def test_nested_graph_interrupts( assert [s async for s in app.aget_state_history(config)] == [ StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -6505,6 +6611,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -6525,6 +6632,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -6547,6 +6655,7 @@ async def test_nested_graph_interrupts( assert [s async for s in app.aget_state_history(config)] == [ StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -6571,6 +6680,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -6591,6 +6701,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -6619,6 +6730,7 @@ async def test_nested_graph_interrupts( assert [s async for s in app.aget_state_history(config)] == [ StateSnapshot( values={"my_key": "hi my value here and there and back again"}, + tasks=(), next=(), config={ "configurable": { @@ -6645,6 +6757,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value here and there"}, + tasks=(PregelTask(AnyStr(), "outer_2"),), next=("outer_2",), config={ "configurable": { @@ -6669,6 +6782,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -6693,6 +6807,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -6713,6 +6828,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -6748,6 +6864,7 @@ async def test_nested_graph_interrupts( assert [s async for s in app.aget_state_history(config)] == [ StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -6772,6 +6889,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -6792,6 +6910,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -6817,6 +6936,7 @@ async def test_nested_graph_interrupts( assert [s async for s in app.aget_state_history(config)] == [ StateSnapshot( values={"my_key": "hi my value here and there"}, + tasks=(PregelTask(AnyStr(), "outer_2"),), next=("outer_2",), config={ "configurable": { @@ -6841,6 +6961,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -6865,6 +6986,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -6885,6 +7007,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -6910,6 +7033,7 @@ async def test_nested_graph_interrupts( assert [s async for s in app.aget_state_history(config)] == [ StateSnapshot( values={"my_key": "hi my value here and there and back again"}, + tasks=(), next=(), config={ "configurable": { @@ -6936,6 +7060,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value here and there"}, + tasks=(PregelTask(AnyStr(), "outer_2"),), next=("outer_2",), config={ "configurable": { @@ -6960,6 +7085,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -6984,6 +7110,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -7004,6 +7131,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -7031,6 +7159,7 @@ async def test_nested_graph_interrupts( assert state_history == [ StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -7055,6 +7184,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -7075,6 +7205,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -7102,6 +7233,7 @@ async def test_nested_graph_interrupts( assert child_state_history == [ StateSnapshot( values={"my_key": "hi my value here"}, + tasks=(), next=(), config={ "configurable": { @@ -7150,6 +7282,7 @@ async def test_nested_graph_interrupts( assert [s async for s in app.aget_state_history(config)] == [ StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -7174,6 +7307,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -7198,6 +7332,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -7218,6 +7353,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { @@ -7243,6 +7379,7 @@ async def test_nested_graph_interrupts( assert [s async for s in app.aget_state_history(config)] == [ StateSnapshot( values={"my_key": "hi my value here and there and back again"}, + tasks=(), next=(), config={ "configurable": { @@ -7269,6 +7406,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value here and there"}, + tasks=(PregelTask(AnyStr(), "outer_2"),), next=("outer_2",), config={ "configurable": { @@ -7293,6 +7431,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -7317,6 +7456,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "hi my value"}, + tasks=(PregelTask(AnyStr(), "inner"),), next=("inner",), config={ "configurable": { @@ -7341,6 +7481,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={"my_key": "my value"}, + tasks=(PregelTask(AnyStr(), "outer_1"),), next=("outer_1",), config={ "configurable": { @@ -7361,6 +7502,7 @@ async def test_nested_graph_interrupts( ), StateSnapshot( values={}, + tasks=(PregelTask(AnyStr(), "__start__"),), next=("__start__",), config={ "configurable": { From 31dcd1592710b6364041f487579c3a4b479ddb1e Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Mon, 19 Aug 2024 07:52:00 -0700 Subject: [PATCH 26/35] cli: Fix ready signal --- libs/cli/langgraph_cli/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/cli/langgraph_cli/cli.py b/libs/cli/langgraph_cli/cli.py index 83d14d218..1e3ffa2a7 100644 --- a/libs/cli/langgraph_cli/cli.py +++ b/libs/cli/langgraph_cli/cli.py @@ -224,7 +224,7 @@ For production use, requires a license key in env var LANGGRAPH_CLOUD_LICENSE_KE def on_stdout(line: str): if "unpacking to docker.io" in line: set("Starting...") - elif "GET /ok" in line: + elif "Application startup complete" in line: debugger_origin = ( f"http://localhost:{debugger_port}" if debugger_port From 8a7c6b4fa7996a81f78462522d9820bfd7297f0c Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Mon, 19 Aug 2024 12:05:36 -0700 Subject: [PATCH 27/35] Add xray test --- .../tests/__snapshots__/test_pregel.ambr | 27 +++++++++++++ libs/langgraph/tests/test_pregel.py | 39 +++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/libs/langgraph/tests/__snapshots__/test_pregel.ambr b/libs/langgraph/tests/__snapshots__/test_pregel.ambr index 004daa1e1..644c99b95 100644 --- a/libs/langgraph/tests/__snapshots__/test_pregel.ambr +++ b/libs/langgraph/tests/__snapshots__/test_pregel.ambr @@ -1356,6 +1356,33 @@ # name: test_state_graph_w_config_inherited_state_keys.2 '{"title": "LangGraphOutput", "type": "object", "properties": {"input": {"title": "Input", "type": "string"}, "agent_outcome": {"title": "Agent Outcome", "anyOf": [{"$ref": "#/definitions/AgentAction"}, {"$ref": "#/definitions/AgentFinish"}]}, "intermediate_steps": {"title": "Intermediate Steps", "type": "array", "items": {"type": "array", "minItems": 2, "maxItems": 2, "items": [{"$ref": "#/definitions/AgentAction"}, {"type": "string"}]}}}, "definitions": {"AgentAction": {"title": "AgentAction", "description": "Represents a request to execute an action by an agent.\\n\\nThe action consists of the name of the tool to execute and the input to pass\\nto the tool. The log is used to pass along extra information about the action.", "type": "object", "properties": {"tool": {"title": "Tool", "type": "string"}, "tool_input": {"title": "Tool Input", "anyOf": [{"type": "string"}, {"type": "object"}]}, "log": {"title": "Log", "type": "string"}, "type": {"title": "Type", "default": "AgentAction", "enum": ["AgentAction"], "type": "string"}}, "required": ["tool", "tool_input", "log"]}, "AgentFinish": {"title": "AgentFinish", "description": "Final return value of an ActionAgent.\\n\\nAgents return an AgentFinish when they have reached a stopping condition.", "type": "object", "properties": {"return_values": {"title": "Return Values", "type": "object"}, "log": {"title": "Log", "type": "string"}, "type": {"title": "Type", "default": "AgentFinish", "enum": ["AgentFinish"], "type": "string"}}, "required": ["return_values", "log"]}}}' # --- +# name: test_xray_issue + ''' + %%{init: {'flowchart': {'curve': 'linear'}}}%% + graph TD; + __start__([__start__]):::first + p_one(p_one) + p_two___start__(__start__) + p_two_c_one(c_one) + p_two_c_two(c_two) + p_two___end__(__end__) + __end__([__end__]):::last + subgraph p_two + p_two___start__ --> p_two_c_one; + p_two_c_two --> p_two_c_one; + p_two_c_one -.  0  .-> p_two_c_two; + p_two_c_one -.  1  .-> p_two___end__; + end + __start__ --> p_one; + p_two___end__ --> p_one; + p_one -.  0  .-> p_two___start__; + p_one -.  1  .-> __end__; + classDef default fill:#f2f0ff,line-height:1.2 + classDef first fill-opacity:0 + classDef last fill:#bfb6fc + + ''' +# --- # name: test_xray_lance dict({ 'edges': list([ diff --git a/libs/langgraph/tests/test_pregel.py b/libs/langgraph/tests/test_pregel.py index 68bbc65ce..14a96b577 100644 --- a/libs/langgraph/tests/test_pregel.py +++ b/libs/langgraph/tests/test_pregel.py @@ -5,6 +5,7 @@ import warnings from collections import Counter from concurrent.futures import ThreadPoolExecutor from contextlib import contextmanager +from random import randrange from typing import ( Annotated, Any, @@ -9682,3 +9683,41 @@ def test_channel_values(request: pytest.FixtureRequest, checkpointer_name: str) ) app.invoke({"input": 1, "ephemeral": "meow"}, config) assert checkpointer.get(config)["channel_values"] == {"input": 1, "output": 1} + + +def test_xray_issue(snapshot: SnapshotAssertion) -> None: + class State(TypedDict): + messages: Annotated[list, add_messages] + + def node(name): + def _node(state: State): + return {"messages": [("human", f"entered {name} node")]} + + return _node + + parent = StateGraph(State) + child = StateGraph(State) + + child.add_node("c_one", node("c_one")) + child.add_node("c_two", node("c_two")) + + child.add_edge("__start__", "c_one") + child.add_edge("c_two", "c_one") + + child.add_conditional_edges( + "c_one", lambda x: str(randrange(0, 2)), {"0": "c_two", "1": "__end__"} + ) + + parent.add_node("p_one", node("p_one")) + parent.add_node("p_two", child.compile()) + + parent.add_edge("__start__", "p_one") + parent.add_edge("p_two", "p_one") + + parent.add_conditional_edges( + "p_one", lambda x: str(randrange(0, 2)), {"0": "p_two", "1": "__end__"} + ) + + app = parent.compile() + + assert app.get_graph(xray=True).draw_mermaid() == snapshot From 7aaeedd7ba114927016c0dbd3798a51197520466 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Mon, 19 Aug 2024 15:40:04 -0700 Subject: [PATCH 28/35] checkpoint-*: In put_writes clear any previously saved writes for this task_id - Previously implementations were clearing only tasks if the index matched a previously saved one, which isn't enough to guarantee idempotency --- .../langgraph/checkpoint/postgres/__init__.py | 8 +++++ .../langgraph/checkpoint/postgres/aio.py | 8 +++++ .../langgraph/checkpoint/postgres/base.py | 11 +++++++ .../langgraph/checkpoint/sqlite/__init__.py | 10 ++++++ .../langgraph/checkpoint/sqlite/aio.py | 32 ++++++++++++------- .../langgraph/checkpoint/memory/__init__.py | 1 + 6 files changed, 59 insertions(+), 11 deletions(-) diff --git a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/__init__.py b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/__init__.py index e07f0aa5f..153ba4bc3 100644 --- a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/__init__.py +++ b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/__init__.py @@ -317,6 +317,14 @@ class PostgresSaver(BasePostgresSaver): task_id (str): Identifier for the task creating the writes. """ with self._cursor() as cur: + cur.execute( + self.DELETE_WRITES_SQL, + config["configurable"]["thread_id"], + config["configurable"]["checkpoint_ns"], + config["configurable"]["checkpoint_id"], + task_id, + len(writes), + ) cur.executemany( self.UPSERT_CHECKPOINT_WRITES_SQL, self._dump_writes( diff --git a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py index c325399e2..6862df5bd 100644 --- a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py +++ b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py @@ -273,6 +273,14 @@ class AsyncPostgresSaver(BasePostgresSaver): task_id (str): Identifier for the task creating the writes. """ async with self._cursor() as cur: + await cur.execute( + self.DELETE_WRITES_SQL, + config["configurable"]["thread_id"], + config["configurable"]["checkpoint_ns"], + config["configurable"]["checkpoint_id"], + task_id, + len(writes), + ) await cur.executemany( self.UPSERT_CHECKPOINT_WRITES_SQL, await asyncio.to_thread( diff --git a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/base.py b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/base.py index e9ca12305..506a13a27 100644 --- a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/base.py +++ b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/base.py @@ -105,6 +105,15 @@ UPSERT_CHECKPOINT_WRITES_SQL = """ ON CONFLICT (thread_id, checkpoint_ns, checkpoint_id, task_id, idx) DO NOTHING """ +DELETE_WRITES_SQL = """ + DELETE FROM checkpoint_writes + WHERE thread_id = %s + AND checkpoint_ns = %s + AND checkpoint_id = %s + AND task_id = %s + AND idx >= %s +""" + class BasePostgresSaver(BaseCheckpointSaver): SELECT_SQL = SELECT_SQL @@ -112,6 +121,8 @@ class BasePostgresSaver(BaseCheckpointSaver): UPSERT_CHECKPOINT_BLOBS_SQL = UPSERT_CHECKPOINT_BLOBS_SQL UPSERT_CHECKPOINTS_SQL = UPSERT_CHECKPOINTS_SQL UPSERT_CHECKPOINT_WRITES_SQL = UPSERT_CHECKPOINT_WRITES_SQL + DELETE_WRITES_SQL = DELETE_WRITES_SQL + jsonplus_serde = JsonPlusSerializer() def _load_checkpoint(self, checkpoint: dict[str, Any]) -> Checkpoint: diff --git a/libs/checkpoint-sqlite/langgraph/checkpoint/sqlite/__init__.py b/libs/checkpoint-sqlite/langgraph/checkpoint/sqlite/__init__.py index ac2f64f32..9bf4139ad 100644 --- a/libs/checkpoint-sqlite/langgraph/checkpoint/sqlite/__init__.py +++ b/libs/checkpoint-sqlite/langgraph/checkpoint/sqlite/__init__.py @@ -424,6 +424,16 @@ class SqliteSaver(BaseCheckpointSaver): task_id (str): Identifier for the task creating the writes. """ with self.lock, self.cursor() as cur: + cur.execute( + "DELETE FROM writes WHERE thread_id = ? AND checkpoint_ns = ? AND checkpoint_id = ? AND task_id = ? AND idx >= ?", + ( + str(config["configurable"]["thread_id"]), + str(config["configurable"]["checkpoint_ns"]), + str(config["configurable"]["checkpoint_id"]), + task_id, + len(writes), + ), + ) cur.executemany( "INSERT OR REPLACE INTO writes (thread_id, checkpoint_ns, checkpoint_id, task_id, idx, channel, type, value) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", [ diff --git a/libs/checkpoint-sqlite/langgraph/checkpoint/sqlite/aio.py b/libs/checkpoint-sqlite/langgraph/checkpoint/sqlite/aio.py index 95b77209a..56d14f613 100644 --- a/libs/checkpoint-sqlite/langgraph/checkpoint/sqlite/aio.py +++ b/libs/checkpoint-sqlite/langgraph/checkpoint/sqlite/aio.py @@ -432,19 +432,29 @@ class AsyncSqliteSaver(BaseCheckpointSaver): task_id (str): Identifier for the task creating the writes. """ await self.setup() - async with self.conn.executemany( - "INSERT OR REPLACE INTO writes (thread_id, checkpoint_ns, checkpoint_id, task_id, idx, channel, type, value) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", - [ + async with self.conn.cursor() as cur: + await cur.execute( + "DELETE FROM writes WHERE thread_id = ? AND checkpoint_ns = ? AND checkpoint_id = ? AND task_id = ? AND idx >= ?", ( str(config["configurable"]["thread_id"]), str(config["configurable"]["checkpoint_ns"]), str(config["configurable"]["checkpoint_id"]), task_id, - idx, - channel, - *self.serde.dumps_typed(value), - ) - for idx, (channel, value) in enumerate(writes) - ], - ): - await self.conn.commit() + len(writes), + ), + ) + await cur.executemany( + "INSERT OR REPLACE INTO writes (thread_id, checkpoint_ns, checkpoint_id, task_id, idx, channel, type, value) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", + [ + ( + str(config["configurable"]["thread_id"]), + str(config["configurable"]["checkpoint_ns"]), + str(config["configurable"]["checkpoint_id"]), + task_id, + idx, + channel, + *self.serde.dumps_typed(value), + ) + for idx, (channel, value) in enumerate(writes) + ], + ) diff --git a/libs/checkpoint/langgraph/checkpoint/memory/__init__.py b/libs/checkpoint/langgraph/checkpoint/memory/__init__.py index 5e59accd7..3e8d328e6 100644 --- a/libs/checkpoint/langgraph/checkpoint/memory/__init__.py +++ b/libs/checkpoint/langgraph/checkpoint/memory/__init__.py @@ -288,6 +288,7 @@ class MemorySaver( checkpoint_ns = config["configurable"]["checkpoint_ns"] checkpoint_id = config["configurable"]["checkpoint_id"] key = (thread_id, checkpoint_ns, checkpoint_id) + self.writes[key] = [w for w in self.writes[key] if w[0] != task_id] self.writes[key].extend( [(task_id, c, self.serde.dumps_typed(v)) for c, v in writes] ) From c0c534cbe3c546329d2bd44814565a831da04c2f Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Mon, 19 Aug 2024 15:44:22 -0700 Subject: [PATCH 29/35] Add pipeline arg --- .../langgraph/checkpoint/postgres/__init__.py | 2 +- libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/__init__.py b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/__init__.py index 153ba4bc3..767b8f0e8 100644 --- a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/__init__.py +++ b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/__init__.py @@ -316,7 +316,7 @@ class PostgresSaver(BasePostgresSaver): writes (List[Tuple[str, Any]]): List of writes to store. task_id (str): Identifier for the task creating the writes. """ - with self._cursor() as cur: + with self._cursor(pipeline=True) as cur: cur.execute( self.DELETE_WRITES_SQL, config["configurable"]["thread_id"], diff --git a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py index 6862df5bd..cdbbe990a 100644 --- a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py +++ b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py @@ -272,7 +272,7 @@ class AsyncPostgresSaver(BasePostgresSaver): writes (Sequence[Tuple[str, Any]]): List of writes to store, each as (channel, value) pair. task_id (str): Identifier for the task creating the writes. """ - async with self._cursor() as cur: + async with self._cursor(pipeline=True) as cur: await cur.execute( self.DELETE_WRITES_SQL, config["configurable"]["thread_id"], From 9cfb4b01c86d84dc3bade511da8e87b6ebee70bc Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Mon, 19 Aug 2024 15:54:49 -0700 Subject: [PATCH 30/35] postgres: Fix args to put_writes --- .../langgraph/checkpoint/postgres/__init__.py | 12 +++++++----- .../langgraph/checkpoint/postgres/aio.py | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/__init__.py b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/__init__.py index 767b8f0e8..02d5880a0 100644 --- a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/__init__.py +++ b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/__init__.py @@ -319,11 +319,13 @@ class PostgresSaver(BasePostgresSaver): with self._cursor(pipeline=True) as cur: cur.execute( self.DELETE_WRITES_SQL, - config["configurable"]["thread_id"], - config["configurable"]["checkpoint_ns"], - config["configurable"]["checkpoint_id"], - task_id, - len(writes), + ( + config["configurable"]["thread_id"], + config["configurable"]["checkpoint_ns"], + config["configurable"]["checkpoint_id"], + task_id, + len(writes), + ), ) cur.executemany( self.UPSERT_CHECKPOINT_WRITES_SQL, diff --git a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py index cdbbe990a..7ddb81237 100644 --- a/libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py +++ b/libs/checkpoint-postgres/langgraph/checkpoint/postgres/aio.py @@ -275,11 +275,13 @@ class AsyncPostgresSaver(BasePostgresSaver): async with self._cursor(pipeline=True) as cur: await cur.execute( self.DELETE_WRITES_SQL, - config["configurable"]["thread_id"], - config["configurable"]["checkpoint_ns"], - config["configurable"]["checkpoint_id"], - task_id, - len(writes), + ( + config["configurable"]["thread_id"], + config["configurable"]["checkpoint_ns"], + config["configurable"]["checkpoint_id"], + task_id, + len(writes), + ), ) await cur.executemany( self.UPSERT_CHECKPOINT_WRITES_SQL, From 314488b5c59e45afbb1c1d5766cebdf163f22053 Mon Sep 17 00:00:00 2001 From: Vadym Barda Date: Tue, 20 Aug 2024 08:47:12 -0400 Subject: [PATCH 31/35] ci: run full test suite on all changes (#1397) --- .github/workflows/_test.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/_test.yml b/.github/workflows/_test.yml index 606492df2..c2d6d80d2 100644 --- a/.github/workflows/_test.yml +++ b/.github/workflows/_test.yml @@ -24,13 +24,7 @@ jobs: name: "test #${{ matrix.python-version }}" steps: - uses: actions/checkout@v4 - - name: Get changed files - id: changed-files - uses: Ana06/get-changed-files@v2.2.0 - with: - filter: "${{ inputs.working-directory }}/**" - name: Set up Python ${{ matrix.python-version }} + Poetry ${{ env.POETRY_VERSION }} - if: steps.changed-files.outputs.all uses: "./.github/actions/poetry_setup" with: python-version: ${{ matrix.python-version }} @@ -39,20 +33,17 @@ jobs: cache-key: core - name: Install dependencies - if: steps.changed-files.outputs.all shell: bash working-directory: ${{ inputs.working-directory }} run: poetry install --with dev - name: Run core tests - if: steps.changed-files.outputs.all shell: bash working-directory: ${{ inputs.working-directory }} run: | make test - name: Ensure the tests did not create any additional files - if: steps.changed-files.outputs.all shell: bash working-directory: ${{ inputs.working-directory }} run: | From 3d33b575d6af7610dd6f2713e18528baa96d8acb Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Tue, 20 Aug 2024 16:59:04 -0700 Subject: [PATCH 32/35] 0.2.5 --- libs/langgraph/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/langgraph/pyproject.toml b/libs/langgraph/pyproject.toml index 3aac6ed84..edac6bc67 100644 --- a/libs/langgraph/pyproject.toml +++ b/libs/langgraph/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langgraph" -version = "0.2.4" +version = "0.2.5" description = "Building stateful, multi-actor applications with LLMs" authors = [] license = "MIT" From ebf060675ddb5b2b9b94551065aeefbdd544495e Mon Sep 17 00:00:00 2001 From: David Duong Date: Wed, 21 Aug 2024 17:00:10 +0200 Subject: [PATCH 33/35] feat(js-sdk): add config and parent_config to thread state schema (#1411) * feat(js-sdk): add config and parent_config to thread state schema * Bump to 0.0.5 --- libs/sdk-js/package.json | 2 +- libs/sdk-js/src/schema.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/sdk-js/package.json b/libs/sdk-js/package.json index 300578131..db509e9c2 100644 --- a/libs/sdk-js/package.json +++ b/libs/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@langchain/langgraph-sdk", - "version": "0.0.4", + "version": "0.0.5", "description": "Client library for interacting with the LangGraph API", "type": "module", "packageManager": "yarn@1.22.19", diff --git a/libs/sdk-js/src/schema.ts b/libs/sdk-js/src/schema.ts index 897ed1ed8..9c2df19a9 100644 --- a/libs/sdk-js/src/schema.ts +++ b/libs/sdk-js/src/schema.ts @@ -101,6 +101,9 @@ export interface ThreadState { metadata: Metadata; created_at: Optional; parent_checkpoint_id: Optional; + + config: Config; + parent_config?: Config; } export interface Run { From f8b053a28682e3f27caf9ae752a3c5b2abeacb7d Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Wed, 21 Aug 2024 09:19:15 -0700 Subject: [PATCH 34/35] Enable raising Interrupt from inside a node, add list of current interrupts to get_state (#1354) * Enable raising Interrupt from inside a node, add list of current interrupts to get_state * Lint * Allow multiple interrupt values in exception * Better typings * Fix some tests * Fix up * Lint * Add test * Lint * WIP stay=True * Fix tests for get_state * Remove ids * Fix step count * 999 * less fun * Undo * Update debug interface * Remove ability to pass multiple values * Undo --- libs/langgraph/langgraph/constants.py | 11 +- libs/langgraph/langgraph/errors.py | 14 +- libs/langgraph/langgraph/pregel/__init__.py | 138 +++++++++++--- libs/langgraph/langgraph/pregel/algo.py | 25 ++- libs/langgraph/langgraph/pregel/debug.py | 18 +- libs/langgraph/langgraph/pregel/loop.py | 23 ++- libs/langgraph/langgraph/pregel/types.py | 2 + .../tests/__snapshots__/test_pregel.ambr | 18 ++ libs/langgraph/tests/test_pregel.py | 176 +++++++++++++++--- libs/langgraph/tests/test_pregel_async.py | 167 +++++++++++++---- 10 files changed, 473 insertions(+), 119 deletions(-) diff --git a/libs/langgraph/langgraph/constants.py b/libs/langgraph/langgraph/constants.py index af4ba4d8d..f85b33ba3 100644 --- a/libs/langgraph/langgraph/constants.py +++ b/libs/langgraph/langgraph/constants.py @@ -1,10 +1,12 @@ -from typing import Any +from dataclasses import dataclass +from typing import Any, Literal INPUT = "__input__" CONFIG_KEY_SEND = "__pregel_send" CONFIG_KEY_READ = "__pregel_read" CONFIG_KEY_CHECKPOINTER = "__pregel_checkpointer" CONFIG_KEY_RESUMING = "__pregel_resuming" +CONFIG_KEY_TASK_ID = "__pregel_task_id" INTERRUPT = "__interrupt__" ERROR = "__error__" TASKS = "__pregel_tasks" @@ -16,6 +18,7 @@ RESERVED = { CONFIG_KEY_READ, CONFIG_KEY_CHECKPOINTER, CONFIG_KEY_RESUMING, + CONFIG_KEY_TASK_ID, INPUT, } TAG_HIDDEN = "langsmith:hidden" @@ -93,3 +96,9 @@ class Send: and self.node == value.node and self.arg == value.arg ) + + +@dataclass +class Interrupt: + when: Literal["before", "during", "after"] + value: Any = None diff --git a/libs/langgraph/langgraph/errors.py b/libs/langgraph/langgraph/errors.py index ea54cc55f..00dc36e58 100644 --- a/libs/langgraph/langgraph/errors.py +++ b/libs/langgraph/langgraph/errors.py @@ -1,4 +1,7 @@ +from typing import Any + from langgraph.checkpoint.base import EmptyChannelError +from langgraph.constants import Interrupt class GraphRecursionError(RecursionError): @@ -29,7 +32,15 @@ class InvalidUpdateError(Exception): class GraphInterrupt(Exception): """Raised when a subgraph is interrupted.""" - pass + def __init__(self, interrupts: list[Interrupt]) -> None: + super().__init__(interrupts) + + +class NodeInterrupt(GraphInterrupt): + """Raised by a node to interrupt execution.""" + + def __init__(self, value: Any) -> None: + super().__init__([Interrupt("during", value)]) class EmptyInputError(Exception): @@ -42,6 +53,7 @@ __all__ = [ "GraphRecursionError", "InvalidUpdateError", "GraphInterrupt", + "NodeInterrupt", "EmptyInputError", "EmptyChannelError", ] diff --git a/libs/langgraph/langgraph/pregel/__init__.py b/libs/langgraph/langgraph/pregel/__init__.py index 7b2fdb5f9..d2f0790cc 100644 --- a/libs/langgraph/langgraph/pregel/__init__.py +++ b/libs/langgraph/langgraph/pregel/__init__.py @@ -70,8 +70,9 @@ from langgraph.constants import ( CONFIG_KEY_SEND, ERROR, INTERRUPT, + Interrupt, ) -from langgraph.errors import GraphRecursionError, InvalidUpdateError +from langgraph.errors import GraphInterrupt, GraphRecursionError, InvalidUpdateError from langgraph.managed.base import ( AsyncManagedValuesManager, ManagedValuesManager, @@ -82,6 +83,7 @@ from langgraph.pregel.algo import ( apply_writes, local_read, prepare_next_tasks, + should_interrupt, ) from langgraph.pregel.debug import ( map_debug_task_results, @@ -381,6 +383,7 @@ class Pregel( saved.metadata.get("step", -1) + 1 if saved else -1, for_execution=False, ) + return StateSnapshot( read_channels(channels, self.stream_channels_asis), tuple(t.name for t in next_tasks), @@ -550,7 +553,7 @@ class Pregel( saved = self.checkpointer.get_tuple(config) checkpoint = copy_checkpoint(saved.checkpoint) if saved else empty_checkpoint() checkpoint_previous_versions = ( - saved.checkpoint["channel_versions"] if saved else {} + saved.checkpoint["channel_versions"].copy() if saved else {} ) step = saved.metadata.get("step", -1) if saved else -1 # merge configurable fields with previous checkpoint config @@ -576,7 +579,7 @@ class Pregel( create_checkpoint(checkpoint, None, step), { "source": "update", - "step": step, + "step": step + 1, "writes": {}, }, {}, @@ -606,7 +609,11 @@ class Pregel( if as_node not in self.nodes: raise InvalidUpdateError(f"Node {as_node} does not exist") # update channels - with ChannelsManager(self.channels, checkpoint, config) as channels: + with ChannelsManager( + self.channels, checkpoint, config + ) as channels, ManagedValuesManager( + self.managed_values_dict, ensure_config(config) + ) as managed: # create task to run all writers of the chosen node writers = self.nodes[as_node].get_writers() if not writers: @@ -640,19 +647,43 @@ class Pregel( apply_writes( checkpoint, channels, [task], self.checkpointer.get_next_version ) - - new_versions = get_new_channel_versions( - checkpoint_previous_versions, checkpoint["channel_versions"] - ) + checkpoint = create_checkpoint(checkpoint, channels, step + 1) + # check interrupt before + if tasks := should_interrupt( + checkpoint, + self.interrupt_before_nodes, + prepare_next_tasks( + checkpoint, + self.nodes, + channels, + managed, + config, + step + 2, + for_execution=False, + ), + ): + for t in tasks: + self.checkpointer.put_writes( + { + "configurable": { + **checkpoint_config["configurable"], + "checkpoint_id": checkpoint["id"], + } + }, + [(INTERRUPT, Interrupt("before"))], + t.id, + ) return self.checkpointer.put( checkpoint_config, - create_checkpoint(checkpoint, channels, step + 1), + checkpoint, { "source": "update", "step": step + 1, "writes": {as_node: values}, }, - new_versions, + get_new_channel_versions( + checkpoint_previous_versions, checkpoint["channel_versions"] + ), ) async def aupdate_state( @@ -668,7 +699,7 @@ class Pregel( saved = await self.checkpointer.aget_tuple(config) checkpoint = copy_checkpoint(saved.checkpoint) if saved else empty_checkpoint() checkpoint_previous_versions = ( - saved.checkpoint["channel_versions"] if saved else {} + saved.checkpoint["channel_versions"].copy() if saved else {} ) step = saved.metadata.get("step", -1) if saved else -1 # merge configurable fields with previous checkpoint config @@ -694,7 +725,7 @@ class Pregel( create_checkpoint(checkpoint, None, step), { "source": "update", - "step": step, + "step": step + 1, "writes": {}, }, {}, @@ -722,7 +753,11 @@ class Pregel( if as_node not in self.nodes: raise InvalidUpdateError(f"Node {as_node} does not exist") # update channels, acting as the chosen node - async with AsyncChannelsManager(self.channels, checkpoint, config) as channels: + async with AsyncChannelsManager( + self.channels, checkpoint, config + ) as channels, AsyncManagedValuesManager( + self.managed_values_dict, ensure_config(config) + ) as managed: # create task to run all writers of the chosen node writers = self.nodes[as_node].get_writers() if not writers: @@ -756,19 +791,47 @@ class Pregel( apply_writes( checkpoint, channels, [task], self.checkpointer.get_next_version ) - - new_versions = get_new_channel_versions( - checkpoint_previous_versions, checkpoint["channel_versions"] - ) + checkpoint = create_checkpoint(checkpoint, channels, step + 1) + # check interrupt before + if tasks := should_interrupt( + checkpoint, + self.interrupt_before_nodes, + prepare_next_tasks( + checkpoint, + self.nodes, + channels, + managed, + config, + step + 2, + for_execution=False, + ), + ): + await asyncio.gather( + *( + self.checkpointer.aput_writes( + { + "configurable": { + **checkpoint_config["configurable"], + "checkpoint_id": checkpoint["id"], + } + }, + [(INTERRUPT, Interrupt("before"))], + t.id, + ) + for t in tasks + ) + ) return await self.checkpointer.aput( checkpoint_config, - create_checkpoint(checkpoint, channels, step + 1), + checkpoint, { "source": "update", "step": step + 1, "writes": {as_node: values}, }, - new_versions, + get_new_channel_versions( + checkpoint_previous_versions, checkpoint["channel_versions"] + ), ) def _defaults( @@ -975,6 +1038,7 @@ class Pregel( for task in loop.tasks if not task.writes } + all_futures = futures.copy() end_time = ( self.step_timeout + time.monotonic() if self.step_timeout @@ -998,7 +1062,12 @@ class Pregel( task = futures.pop(fut) if exc := _exception(fut): # save error to checkpointer - loop.put_writes(task.id, [(ERROR, exc)]) + if isinstance(exc, GraphInterrupt): + loop.put_writes( + task.id, [(INTERRUPT, i) for i in exc.args[0]] + ) + else: + loop.put_writes(task.id, [(ERROR, exc)]) else: # save task writes to checkpointer loop.put_writes(task.id, task.writes) @@ -1026,7 +1095,7 @@ class Pregel( break # panic on failure or timeout - _panic_or_proceed(done, inflight, loop.step) + _panic_or_proceed(all_futures, loop.step) # don't keep futures around in memory longer than needed del done, inflight, futures # debug flag @@ -1223,6 +1292,7 @@ class Pregel( for task in loop.tasks if not task.writes } + all_futures = futures.copy() end_time = ( self.step_timeout + aioloop.time() if self.step_timeout @@ -1244,7 +1314,12 @@ class Pregel( task = futures.pop(fut) if exc := _exception(fut): # save error to checkpointer - loop.put_writes(task.id, [(ERROR, exc)]) + if isinstance(exc, GraphInterrupt): + loop.put_writes( + task.id, [(INTERRUPT, i) for i in exc.args[0]] + ) + else: + loop.put_writes(task.id, [(ERROR, exc)]) else: # save task writes to checkpointer loop.put_writes(task.id, task.writes) @@ -1274,7 +1349,7 @@ class Pregel( break # panic on failure or timeout - _panic_or_proceed(done, inflight, loop.step, asyncio.TimeoutError) + _panic_or_proceed(all_futures, loop.step, asyncio.TimeoutError) # don't keep futures around in memory longer than needed del done, inflight, futures # debug flag @@ -1421,9 +1496,8 @@ def _should_stop_others( for fut in done: if fut.cancelled(): return True - if fut.exception() is not None: - # TODO don't stop others if exception is interrupt - return True + if exc := fut.exception(): + return not isinstance(exc, GraphInterrupt) else: return False @@ -1441,14 +1515,20 @@ def _exception( def _panic_or_proceed( - done: Union[set[concurrent.futures.Future[Any]], set[asyncio.Task[Any]]], - inflight: Union[set[concurrent.futures.Future[Any]], set[asyncio.Task[Any]]], + futs: Union[set[concurrent.futures.Future[Any]], set[asyncio.Task[Any]]], step: int, timeout_exc_cls: Type[Exception] = TimeoutError, ) -> None: + done: set[Union[concurrent.futures.Future[Any], asyncio.Task[Any]]] = set() + inflight: set[Union[concurrent.futures.Future[Any], asyncio.Task[Any]]] = set() + for fut in futs: + if fut.done(): + done.add(fut) + else: + inflight.add(fut) while done: # if any task failed - if exc := done.pop().exception(): + if exc := _exception(done.pop()): # cancel all pending tasks while inflight: inflight.pop().cancel() diff --git a/libs/langgraph/langgraph/pregel/algo.py b/libs/langgraph/langgraph/pregel/algo.py index fd725627a..5922fd14e 100644 --- a/libs/langgraph/langgraph/pregel/algo.py +++ b/libs/langgraph/langgraph/pregel/algo.py @@ -38,6 +38,7 @@ from langgraph.constants import ( CONFIG_KEY_READ, CONFIG_KEY_RESUMING, CONFIG_KEY_SEND, + CONFIG_KEY_TASK_ID, INTERRUPT, RESERVED, TAG_HIDDEN, @@ -68,26 +69,28 @@ def should_interrupt( checkpoint: Checkpoint, interrupt_nodes: Union[All, Sequence[str]], tasks: list[PregelExecutableTask], -) -> bool: +) -> list[PregelExecutableTask]: version_type = type(next(iter(checkpoint["channel_versions"].values()), None)) null_version = version_type() seen = checkpoint["versions_seen"].get(INTERRUPT, {}) + # interrupt if any channel has been updated since last interrupt + any_updates_since_prev_interrupt = any( + version > seen.get(chan, null_version) + for chan, version in checkpoint["channel_versions"].items() + ) + # and any triggered node is in interrupt_nodes list return ( - # interrupt if any channel has been updated since last interrupt - any( - version > seen.get(chan, null_version) - for chan, version in checkpoint["channel_versions"].items() - ) - # and any triggered node is in interrupt_nodes list - and any( - task.name + [ + task for task in tasks if ( (not task.config or TAG_HIDDEN not in task.config.get("tags")) if interrupt_nodes == "*" else task.name in interrupt_nodes ) - ) + ] + if any_updates_since_prev_interrupt + else [] ) @@ -308,6 +311,7 @@ def prepare_next_tasks( else None ), configurable={ + CONFIG_KEY_TASK_ID: task_id, # deque.extend is thread-safe CONFIG_KEY_SEND: partial( local_write, writes.extend, processes, channels @@ -398,6 +402,7 @@ def prepare_next_tasks( else None ), configurable={ + CONFIG_KEY_TASK_ID: task_id, # deque.extend is thread-safe CONFIG_KEY_SEND: partial( local_write, writes.extend, processes, channels diff --git a/libs/langgraph/langgraph/pregel/debug.py b/libs/langgraph/langgraph/pregel/debug.py index 931f3a180..5102cd8c5 100644 --- a/libs/langgraph/langgraph/pregel/debug.py +++ b/libs/langgraph/langgraph/pregel/debug.py @@ -10,7 +10,7 @@ from langchain_core.utils.input import get_bolded_text, get_colored_text from langgraph.channels.base import BaseChannel from langgraph.checkpoint.base import Checkpoint, CheckpointMetadata, PendingWrite -from langgraph.constants import ERROR, TAG_HIDDEN +from langgraph.constants import ERROR, INTERRUPT, TAG_HIDDEN from langgraph.pregel.io import read_channels from langgraph.pregel.types import PregelExecutableTask, PregelTask @@ -32,6 +32,7 @@ class CheckpointTask(TypedDict): id: str name: str error: Optional[str] + interrupts: list[dict] class CheckpointPayload(TypedDict): @@ -149,6 +150,7 @@ def map_debug_checkpoint( else { "id": t.id, "name": t.name, + "interrupts": t.interrupts, } for t in tasks_w_writes(tasks, pending_writes) ], @@ -190,8 +192,11 @@ def print_step_writes( def print_step_checkpoint( - step: int, channels: Mapping[str, BaseChannel], whitelist: Sequence[str] + metadata: CheckpointMetadata, + channels: Mapping[str, BaseChannel], + whitelist: Sequence[str], ) -> None: + step = metadata["step"] print( f"{get_colored_text(f'[{step}:checkpoint]', color='blue')} " + get_bolded_text(f"State at the end of step {step}:\n") @@ -203,6 +208,7 @@ def tasks_w_writes( tasks: list[PregelExecutableTask], pending_writes: Optional[list[PendingWrite]], ) -> tuple[PregelTask, ...]: + pending_writes = pending_writes or [] return tuple( PregelTask( task.id, @@ -210,12 +216,14 @@ def tasks_w_writes( next( ( exc - for tid, n, exc in pending_writes or [] - if tid == task.id - if n == ERROR + for tid, n, exc in pending_writes + if tid == task.id and n == ERROR ), None, ), + tuple( + v for tid, n, v in pending_writes if tid == task.id and n == INTERRUPT + ), ) for task in tasks ) diff --git a/libs/langgraph/langgraph/pregel/loop.py b/libs/langgraph/langgraph/pregel/loop.py index f43aa25a7..f48f86fcd 100644 --- a/libs/langgraph/langgraph/pregel/loop.py +++ b/libs/langgraph/langgraph/pregel/loop.py @@ -45,6 +45,7 @@ from langgraph.constants import ( ERROR, INPUT, INTERRUPT, + Interrupt, ) from langgraph.errors import EmptyInputError, GraphInterrupt from langgraph.managed.base import ( @@ -206,10 +207,13 @@ class PregelLoop: } ) # after execution, check if we should interrupt - if should_interrupt(self.checkpoint, interrupt_after, self.tasks): + if tasks := should_interrupt(self.checkpoint, interrupt_after, self.tasks): self.status = "interrupt_after" + interrupts = [(t.id, Interrupt("after")) for t in tasks] + for tid, interrupt in interrupts: + self.put_writes(tid, [(INTERRUPT, interrupt)]) if self.is_nested: - raise GraphInterrupt(self) + raise GraphInterrupt([i[1] for i in interrupts]) else: return False else: @@ -258,7 +262,7 @@ class PregelLoop: # if there are pending writes from a previous loop, apply them if self.checkpoint_pending_writes: for tid, k, v in self.checkpoint_pending_writes: - if k == ERROR: # TODO same for INTERRUPT + if k in (ERROR, INTERRUPT): continue if task := next((t for t in self.tasks if t.id == tid), None): task.writes.append((k, v)) @@ -273,10 +277,13 @@ class PregelLoop: ) # before execution, check if we should interrupt - if should_interrupt(self.checkpoint, interrupt_before, self.tasks): + if tasks := should_interrupt(self.checkpoint, interrupt_before, self.tasks): self.status = "interrupt_before" + interrupts = [(t.id, Interrupt("before")) for t in tasks] + for tid, interrupt in interrupts: + self.put_writes(tid, [(INTERRUPT, interrupt)]) if self.is_nested: - raise GraphInterrupt() + raise GraphInterrupt([i[1] for i in interrupts]) else: return False @@ -394,7 +401,7 @@ class PregelLoop: exc_value: Optional[BaseException], traceback: Optional[TracebackType], ) -> Optional[bool]: - if exc_type is GraphInterrupt and not self.is_nested: + if isinstance(exc_value, GraphInterrupt) and not self.is_nested: return True @@ -409,7 +416,6 @@ class SyncPregelLoop(PregelLoop, ContextManager): ) -> None: super().__init__(input, config=config, checkpointer=checkpointer, graph=graph) self.stack = ExitStack() - self.stack.push(self._suppress_interrupt) if checkpointer: self.checkpointer_get_next_version = checkpointer.get_next_version self.checkpointer_put_writes = checkpointer.put_writes @@ -457,6 +463,7 @@ class SyncPregelLoop(PregelLoop, ContextManager): self.managed = self.stack.enter_context( ManagedValuesManager(self.graph.managed_values_dict, self.config) ) + self.stack.push(self._suppress_interrupt) self.status = "pending" self.step = self.checkpoint_metadata["step"] + 1 self.stop = self.step + self.config["recursion_limit"] + 1 @@ -486,7 +493,6 @@ class AsyncPregelLoop(PregelLoop, AsyncContextManager): ) -> None: super().__init__(input, config=config, checkpointer=checkpointer, graph=graph) self.stack = AsyncExitStack() - self.stack.push(self._suppress_interrupt) if checkpointer: self.checkpointer_get_next_version = checkpointer.get_next_version self.checkpointer_put_writes = checkpointer.aput_writes @@ -536,6 +542,7 @@ class AsyncPregelLoop(PregelLoop, AsyncContextManager): self.managed = await self.stack.enter_async_context( AsyncManagedValuesManager(self.graph.managed_values_dict, self.config) ) + self.stack.push(self._suppress_interrupt) self.status = "pending" self.step = self.checkpoint_metadata["step"] + 1 self.stop = self.step + self.config["recursion_limit"] + 1 diff --git a/libs/langgraph/langgraph/pregel/types.py b/libs/langgraph/langgraph/pregel/types.py index 8343329a4..a8c5a7beb 100644 --- a/libs/langgraph/langgraph/pregel/types.py +++ b/libs/langgraph/langgraph/pregel/types.py @@ -4,6 +4,7 @@ from typing import Any, Callable, Literal, NamedTuple, Optional, Type, Union from langchain_core.runnables import Runnable, RunnableConfig from langgraph.checkpoint.base import CheckpointMetadata +from langgraph.constants import Interrupt def default_retry_on(exc: Exception) -> bool: @@ -60,6 +61,7 @@ class PregelTask(NamedTuple): id: str name: str error: Optional[Exception] = None + interrupts: tuple[Interrupt, ...] = () class PregelExecutableTask(NamedTuple): diff --git a/libs/langgraph/tests/__snapshots__/test_pregel.ambr b/libs/langgraph/tests/__snapshots__/test_pregel.ambr index 644c99b95..c92bc4688 100644 --- a/libs/langgraph/tests/__snapshots__/test_pregel.ambr +++ b/libs/langgraph/tests/__snapshots__/test_pregel.ambr @@ -682,6 +682,24 @@ ''' # --- +# name: test_dynamic_interrupt + ''' + %%{init: {'flowchart': {'curve': 'linear'}}}%% + graph TD; + __start__([__start__]):::first + tool_two_slow(tool_two_slow) + tool_two_fast(tool_two_fast) + __end__([__end__]):::last + __start__ -.-> tool_two_slow; + tool_two_slow --> __end__; + __start__ -.-> tool_two_fast; + tool_two_fast --> __end__; + classDef default fill:#f2f0ff,line-height:1.2 + classDef first fill-opacity:0 + classDef last fill:#bfb6fc + + ''' +# --- # name: test_in_one_fan_out_state_graph_waiting_edge ''' graph TD; diff --git a/libs/langgraph/tests/test_pregel.py b/libs/langgraph/tests/test_pregel.py index 14a96b577..138d4dba5 100644 --- a/libs/langgraph/tests/test_pregel.py +++ b/libs/langgraph/tests/test_pregel.py @@ -52,8 +52,8 @@ from langgraph.checkpoint.memory import MemorySaver from langgraph.checkpoint.serde.base import SerializerProtocol from langgraph.checkpoint.serde.jsonplus import JsonPlusSerializer from langgraph.checkpoint.sqlite import SqliteSaver -from langgraph.constants import ERROR, Send -from langgraph.errors import InvalidUpdateError +from langgraph.constants import ERROR, Interrupt, Send +from langgraph.errors import InvalidUpdateError, NodeInterrupt from langgraph.graph import END, Graph from langgraph.graph.graph import START from langgraph.graph.message import MessageGraph, add_messages @@ -2195,7 +2195,7 @@ def test_conditional_graph(snapshot: SnapshotAssertion) -> None: ), }, }, - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=(PregelTask(AnyStr(), "tools", interrupts=(Interrupt("before"),)),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2239,7 +2239,7 @@ def test_conditional_graph(snapshot: SnapshotAssertion) -> None: "input": "what is weather in sf", }, }, - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=(PregelTask(AnyStr(), "tools", interrupts=(Interrupt("before"),)),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2400,7 +2400,7 @@ def test_conditional_graph(snapshot: SnapshotAssertion) -> None: ), }, }, - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=(PregelTask(AnyStr(), "tools", interrupts=(Interrupt("before"),)),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -2999,7 +2999,7 @@ def test_conditional_state_graph( ), "intermediate_steps": [], }, - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=(PregelTask(AnyStr(), "tools", interrupts=(Interrupt("before"),)),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -3039,7 +3039,7 @@ def test_conditional_state_graph( ), "intermediate_steps": [], }, - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=(PregelTask(AnyStr(), "tools", interrupts=(Interrupt("before"),)),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -3148,7 +3148,7 @@ def test_conditional_state_graph( values={ "intermediate_steps": [], }, - tasks=(PregelTask(AnyStr(), "agent"),), + tasks=(PregelTask(AnyStr(), "agent", interrupts=(Interrupt("before"),)),), next=("agent",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -3173,7 +3173,7 @@ def test_conditional_state_graph( ), "intermediate_steps": [], }, - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=(PregelTask(AnyStr(), "tools", interrupts=(Interrupt("before"),)),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -3226,7 +3226,7 @@ def test_conditional_state_graph( ) ], }, - tasks=(PregelTask(AnyStr(), "agent"),), + tasks=(PregelTask(AnyStr(), "agent", interrupts=(Interrupt("before"),)),), next=("agent",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -4828,7 +4828,13 @@ def test_message_graph( id="ai1", ), ], - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=( + PregelTask( + AnyStr(), + "tools", + interrupts=(Interrupt("before"),), + ), + ), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -4873,7 +4879,7 @@ def test_message_graph( ], ), ], - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=(PregelTask(AnyStr(), "tools", interrupts=(Interrupt("before"),)),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -4955,7 +4961,7 @@ def test_message_graph( id="ai2", ), ], - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=(PregelTask(AnyStr(), "tools", interrupts=(Interrupt("before"),)),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -5547,7 +5553,13 @@ def test_root_graph( id="ai1", ), ], - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=( + PregelTask( + AnyStr(), + "tools", + interrupts=(Interrupt("before"),), + ), + ), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -5592,7 +5604,7 @@ def test_root_graph( ], ), ], - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=(PregelTask(AnyStr(), "tools", interrupts=(Interrupt("before"),)),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -5674,7 +5686,7 @@ def test_root_graph( id="ai2", ), ], - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=(PregelTask(AnyStr(), "tools", interrupts=(Interrupt("before"),)),), next=("tools",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -6120,6 +6132,72 @@ def test_in_one_fan_out_out_one_graph_state() -> None: ] +def test_dynamic_interrupt(snapshot: SnapshotAssertion) -> None: + class State(TypedDict): + my_key: Annotated[str, operator.add] + market: str + + def tool_two_node(s: State) -> State: + if s["market"] == "DE": + raise NodeInterrupt("Just because...") + return {"my_key": " all good"} + + tool_two_graph = StateGraph(State) + tool_two_graph.add_node("tool_two", tool_two_node) + tool_two_graph.add_edge(START, "tool_two") + tool_two = tool_two_graph.compile() + + assert tool_two.invoke({"my_key": "value", "market": "DE"}) == { + "my_key": "value", + "market": "DE", + } + assert tool_two.invoke({"my_key": "value", "market": "US"}) == { + "my_key": "value all good", + "market": "US", + } + + with SqliteSaver.from_conn_string(":memory:") as saver: + tool_two = tool_two_graph.compile(checkpointer=saver) + + # missing thread_id + with pytest.raises(ValueError, match="thread_id"): + tool_two.invoke({"my_key": "value", "market": "DE"}) + + thread1 = {"configurable": {"thread_id": "1"}} + # stop when about to enter node + assert tool_two.invoke({"my_key": "value ⛰️", "market": "DE"}, thread1) == { + "my_key": "value ⛰️", + "market": "DE", + } + assert [c.metadata for c in tool_two.checkpointer.list(thread1)] == [ + { + "source": "loop", + "step": 0, + "writes": None, + }, + { + "source": "input", + "step": -1, + "writes": {"my_key": "value ⛰️", "market": "DE"}, + }, + ] + assert tool_two.get_state(thread1) == StateSnapshot( + values={"my_key": "value ⛰️", "market": "DE"}, + next=("tool_two",), + tasks=( + PregelTask( + AnyStr(), + "tool_two", + interrupts=(Interrupt("during", "Just because..."),), + ), + ), + config=tool_two.checkpointer.get_tuple(thread1).config, + created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], + metadata={"source": "loop", "step": 0, "writes": None}, + parent_config=[*tool_two.checkpointer.list(thread1, limit=2)][-1].config, + ) + + def test_start_branch_then(snapshot: SnapshotAssertion) -> None: class State(TypedDict): my_key: Annotated[str, operator.add] @@ -6172,7 +6250,13 @@ def test_start_branch_then(snapshot: SnapshotAssertion) -> None: ] assert tool_two.get_state(thread1) == StateSnapshot( values={"my_key": "value ⛰️", "market": "DE"}, - tasks=(PregelTask(AnyStr(), "tool_two_slow"),), + tasks=( + PregelTask( + AnyStr(), + "tool_two_slow", + interrupts=(Interrupt("before"),), + ), + ), next=("tool_two_slow",), config=tool_two.checkpointer.get_tuple(thread1).config, created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], @@ -6206,7 +6290,13 @@ def test_start_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread2) == StateSnapshot( values={"my_key": "value", "market": "US"}, - tasks=(PregelTask(AnyStr(), "tool_two_fast"),), + tasks=( + PregelTask( + AnyStr(), + "tool_two_fast", + interrupts=(Interrupt("before"),), + ), + ), next=("tool_two_fast",), config=tool_two.checkpointer.get_tuple(thread2).config, created_at=tool_two.checkpointer.get_tuple(thread2).checkpoint["ts"], @@ -6240,7 +6330,13 @@ def test_start_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread3) == StateSnapshot( values={"my_key": "value", "market": "US"}, - tasks=(PregelTask(AnyStr(), "tool_two_fast"),), + tasks=( + PregelTask( + AnyStr(), + "tool_two_fast", + interrupts=(Interrupt("before"),), + ), + ), next=("tool_two_fast",), config=tool_two.checkpointer.get_tuple(thread3).config, created_at=tool_two.checkpointer.get_tuple(thread3).checkpoint["ts"], @@ -6251,7 +6347,13 @@ def test_start_branch_then(snapshot: SnapshotAssertion) -> None: tool_two.update_state(thread3, {"my_key": "key"}) # appends to my_key assert tool_two.get_state(thread3) == StateSnapshot( values={"my_key": "valuekey", "market": "US"}, - tasks=(PregelTask(AnyStr(), "tool_two_fast"),), + tasks=( + PregelTask( + AnyStr(), + "tool_two_fast", + interrupts=(Interrupt("before"),), + ), + ), next=("tool_two_fast",), config=tool_two.checkpointer.get_tuple(thread3).config, created_at=tool_two.checkpointer.get_tuple(thread3).checkpoint["ts"], @@ -6344,7 +6446,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "writes": {"my_key": "value", "market": "DE"}, }, "next": ["__start__"], - "tasks": [{"id": AnyStr(), "name": "__start__"}], + "tasks": [{"id": AnyStr(), "name": "__start__", "interrupts": ()}], }, }, { @@ -6373,7 +6475,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "writes": None, }, "next": ["prepare"], - "tasks": [{"id": AnyStr(), "name": "prepare"}], + "tasks": [{"id": AnyStr(), "name": "prepare", "interrupts": ()}], }, }, { @@ -6423,7 +6525,9 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "writes": {"prepare": {"my_key": " prepared"}}, }, "next": ["tool_two_slow"], - "tasks": [{"id": AnyStr(), "name": "tool_two_slow"}], + "tasks": [ + {"id": AnyStr(), "name": "tool_two_slow", "interrupts": ()} + ], }, }, { @@ -6473,7 +6577,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "writes": {"tool_two_slow": {"my_key": " slow"}}, }, "next": ["finish"], - "tasks": [{"id": AnyStr(), "name": "finish"}], + "tasks": [{"id": AnyStr(), "name": "finish", "interrupts": ()}], }, }, { @@ -6544,7 +6648,13 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread1) == StateSnapshot( values={"my_key": "value prepared", "market": "DE"}, - tasks=(PregelTask(AnyStr(), "tool_two_slow"),), + tasks=( + PregelTask( + AnyStr(), + "tool_two_slow", + interrupts=(Interrupt("before"),), + ), + ), next=("tool_two_slow",), config=tool_two.checkpointer.get_tuple(thread1).config, created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], @@ -6582,7 +6692,13 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: } assert tool_two.get_state(thread2) == StateSnapshot( values={"my_key": "value prepared", "market": "US"}, - tasks=(PregelTask(AnyStr(), "tool_two_fast"),), + tasks=( + PregelTask( + AnyStr(), + "tool_two_fast", + interrupts=(Interrupt("before"),), + ), + ), next=("tool_two_fast",), config=tool_two.checkpointer.get_tuple(thread2).config, created_at=tool_two.checkpointer.get_tuple(thread2).checkpoint["ts"], @@ -6629,7 +6745,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "my_key": "value prepared slow", "market": "DE", }, - tasks=(PregelTask(AnyStr(), "finish"),), + tasks=(PregelTask(AnyStr(), "finish", interrupts=(Interrupt("before"),)),), next=("finish",), config=tool_two.checkpointer.get_tuple(thread1).config, created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], @@ -6648,7 +6764,7 @@ def test_branch_then(snapshot: SnapshotAssertion) -> None: "my_key": "value prepared slower", "market": "DE", }, - tasks=(PregelTask(AnyStr(), "finish"),), + tasks=(PregelTask(AnyStr(), "finish", interrupts=(Interrupt("before"),)),), next=("finish",), config=tool_two.checkpointer.get_tuple(thread1).config, created_at=tool_two.checkpointer.get_tuple(thread1).checkpoint["ts"], @@ -6905,7 +7021,7 @@ def test_in_one_fan_out_state_graph_waiting_edge(snapshot: SnapshotAssertion) -> "query": "analyzed: query: what is weather in sf", "docs": ["doc1", "doc2", "doc3", "doc4", "doc5"], }, - tasks=(PregelTask(AnyStr(), "qa"),), + tasks=(PregelTask(AnyStr(), "qa", interrupts=(Interrupt("before"),)),), next=("qa",), config=app_w_interrupt.checkpointer.get_tuple(config).config, created_at=app_w_interrupt.checkpointer.get_tuple(config).checkpoint["ts"], @@ -7856,7 +7972,7 @@ def test_nested_graph_interrupts( # test invoke w/ nested interrupt config = {"configurable": {"thread_id": "1"}} - assert app.invoke({"my_key": "my value"}, config, debug=True) == { + assert app.invoke({"my_key": "my value"}, config) == { "my_key": "hi my value", } assert list(app.get_state_history(config)) == [ diff --git a/libs/langgraph/tests/test_pregel_async.py b/libs/langgraph/tests/test_pregel_async.py index b50ecd36a..7c5742aa0 100644 --- a/libs/langgraph/tests/test_pregel_async.py +++ b/libs/langgraph/tests/test_pregel_async.py @@ -47,8 +47,8 @@ from langgraph.checkpoint.base import ( ) from langgraph.checkpoint.memory import MemorySaver from langgraph.checkpoint.sqlite.aio import AsyncSqliteSaver -from langgraph.constants import ERROR, Send -from langgraph.errors import InvalidUpdateError +from langgraph.constants import ERROR, Interrupt, Send +from langgraph.errors import InvalidUpdateError, NodeInterrupt from langgraph.graph import END, Graph, StateGraph from langgraph.graph.graph import START from langgraph.graph.message import MessageGraph, add_messages @@ -204,6 +204,61 @@ async def test_node_cancellation_on_other_node_exception() -> None: assert inner_task_cancelled +@pytest.mark.parametrize( + "checkpointer_name", + ["memory", "sqlite_aio", "postgres_aio", "postgres_aio_pipe"], +) +async def test_node_not_cancelled_on_other_node_interrupted( + checkpointer_name: str, request: pytest.FixtureRequest +) -> None: + checkpointer = request.getfixturevalue(f"checkpointer_{checkpointer_name}") + + class State(TypedDict): + hello: str + + awhiles = 0 + inner_task_cancelled = False + + async def awhile(input: State) -> None: + nonlocal awhiles + + awhiles += 1 + try: + await asyncio.sleep(1) + return {"hello": "again"} + except asyncio.CancelledError: + nonlocal inner_task_cancelled + inner_task_cancelled = True + raise + + async def iambad(input: State) -> None: + if input["hello"] != "bye": + raise NodeInterrupt("I am bad") + + builder = StateGraph(State) + builder.add_node("agent", awhile) + builder.add_node("bad", iambad) + builder.set_conditional_entry_point(lambda _: ["agent", "bad"], then=END) + + graph = builder.compile(checkpointer=checkpointer) + thread = {"configurable": {"thread_id": "1"}} + + assert await graph.ainvoke({"hello": "world"}, thread) == {"hello": "world"} + + assert not inner_task_cancelled + assert awhiles == 1 + + assert await graph.ainvoke(None, thread, debug=True) is None + + assert not inner_task_cancelled + assert awhiles == 1 + + assert await graph.ainvoke({"hello": "bye"}, thread) == {"hello": "again"} + + assert not inner_task_cancelled + assert awhiles == 2 + + async def test_step_timeout_on_stream_hang() -> None: inner_task_cancelled = False @@ -2366,7 +2421,13 @@ async def test_conditional_graph() -> None: ), }, }, - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=( + PregelTask( + AnyStr(), + "tools", + interrupts=(Interrupt("before"),), + ), + ), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -2414,7 +2475,13 @@ async def test_conditional_graph() -> None: "input": "what is weather in sf", }, }, - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=( + PregelTask( + AnyStr(), + "tools", + interrupts=(Interrupt("before"),), + ), + ), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -2586,7 +2653,13 @@ async def test_conditional_graph() -> None: ), }, }, - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=( + PregelTask( + AnyStr(), + "tools", + interrupts=(Interrupt("before"),), + ), + ), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -3152,7 +3225,13 @@ async def test_conditional_graph_state(mocker: MockerFixture) -> None: ), "intermediate_steps": [], }, - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=( + PregelTask( + AnyStr(), + "tools", + interrupts=(Interrupt("before"),), + ), + ), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -3196,7 +3275,7 @@ async def test_conditional_graph_state(mocker: MockerFixture) -> None: ), "intermediate_steps": [], }, - tasks=(PregelTask(AnyStr(), "tools"),), + tasks=(PregelTask(AnyStr(), "tools", interrupts=(Interrupt("before"),)),), next=("tools",), config=(await app_w_interrupt.checkpointer.aget_tuple(config)).config, created_at=(await app_w_interrupt.checkpointer.aget_tuple(config)).checkpoint[ @@ -4746,7 +4825,13 @@ async def test_start_branch_then() -> None: ] assert await tool_two.aget_state(thread1) == StateSnapshot( values={"my_key": "value", "market": "DE"}, - tasks=(PregelTask(AnyStr(), "tool_two_slow"),), + tasks=( + PregelTask( + AnyStr(), + "tool_two_slow", + interrupts=(Interrupt("before"),), + ), + ), next=("tool_two_slow",), config=(await tool_two.checkpointer.aget_tuple(thread1)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread1)).checkpoint[ @@ -4788,7 +4873,13 @@ async def test_start_branch_then() -> None: } assert await tool_two.aget_state(thread2) == StateSnapshot( values={"my_key": "value", "market": "US"}, - tasks=(PregelTask(AnyStr(), "tool_two_fast"),), + tasks=( + PregelTask( + AnyStr(), + "tool_two_fast", + interrupts=(Interrupt("before"),), + ), + ), next=("tool_two_fast",), config=(await tool_two.checkpointer.aget_tuple(thread2)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread2)).checkpoint[ @@ -4830,7 +4921,13 @@ async def test_start_branch_then() -> None: } assert await tool_two.aget_state(thread3) == StateSnapshot( values={"my_key": "value", "market": "US"}, - tasks=(PregelTask(AnyStr(), "tool_two_fast"),), + tasks=( + PregelTask( + AnyStr(), + "tool_two_fast", + interrupts=(Interrupt("before"),), + ), + ), next=("tool_two_fast",), config=(await tool_two.checkpointer.aget_tuple(thread3)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread3)).checkpoint[ @@ -4845,7 +4942,13 @@ async def test_start_branch_then() -> None: await tool_two.aupdate_state(thread3, {"my_key": "key"}) # appends to my_key assert await tool_two.aget_state(thread3) == StateSnapshot( values={"my_key": "valuekey", "market": "US"}, - tasks=(PregelTask(AnyStr(), "tool_two_fast"),), + tasks=( + PregelTask( + AnyStr(), + "tool_two_fast", + interrupts=(Interrupt("before"),), + ), + ), next=("tool_two_fast",), config=(await tool_two.checkpointer.aget_tuple(thread3)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread3)).checkpoint[ @@ -4945,12 +5048,7 @@ async def test_branch_then() -> None: "writes": {"my_key": "value", "market": "DE"}, }, "next": ["__start__"], - "tasks": [ - { - "id": AnyStr(), - "name": "__start__", - } - ], + "tasks": [{"id": AnyStr(), "name": "__start__", "interrupts": ()}], }, }, { @@ -4979,12 +5077,7 @@ async def test_branch_then() -> None: "writes": None, }, "next": ["prepare"], - "tasks": [ - { - "id": AnyStr(), - "name": "prepare", - } - ], + "tasks": [{"id": AnyStr(), "name": "prepare", "interrupts": ()}], }, }, { @@ -5035,10 +5128,7 @@ async def test_branch_then() -> None: }, "next": ["tool_two_slow"], "tasks": [ - { - "id": AnyStr(), - "name": "tool_two_slow", - } + {"id": AnyStr(), "name": "tool_two_slow", "interrupts": ()} ], }, }, @@ -5089,12 +5179,7 @@ async def test_branch_then() -> None: "writes": {"tool_two_slow": {"my_key": " slow"}}, }, "next": ["finish"], - "tasks": [ - { - "id": AnyStr(), - "name": "finish", - } - ], + "tasks": [{"id": AnyStr(), "name": "finish", "interrupts": ()}], }, }, { @@ -5165,7 +5250,13 @@ async def test_branch_then() -> None: } assert await tool_two.aget_state(thread1) == StateSnapshot( values={"my_key": "value prepared", "market": "DE"}, - tasks=(PregelTask(AnyStr(), "tool_two_slow"),), + tasks=( + PregelTask( + AnyStr(), + "tool_two_slow", + interrupts=(Interrupt("before"),), + ), + ), next=("tool_two_slow",), config=(await tool_two.checkpointer.aget_tuple(thread1)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread1)).checkpoint[ @@ -5211,7 +5302,13 @@ async def test_branch_then() -> None: } assert await tool_two.aget_state(thread2) == StateSnapshot( values={"my_key": "value prepared", "market": "US"}, - tasks=(PregelTask(AnyStr(), "tool_two_fast"),), + tasks=( + PregelTask( + AnyStr(), + "tool_two_fast", + interrupts=(Interrupt("before"),), + ), + ), next=("tool_two_fast",), config=(await tool_two.checkpointer.aget_tuple(thread2)).config, created_at=(await tool_two.checkpointer.aget_tuple(thread2)).checkpoint[ From d1b7a787ee82277c8376edb1abb805609771fef9 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Wed, 21 Aug 2024 09:22:27 -0700 Subject: [PATCH 35/35] lib0.2.6 --- libs/langgraph/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/langgraph/pyproject.toml b/libs/langgraph/pyproject.toml index edac6bc67..4dff54572 100644 --- a/libs/langgraph/pyproject.toml +++ b/libs/langgraph/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langgraph" -version = "0.2.5" +version = "0.2.6" description = "Building stateful, multi-actor applications with LLMs" authors = [] license = "MIT"

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