From 1d5fc2e602b5180c9c0ebb5f2938f13aba5636cd Mon Sep 17 00:00:00 2001 From: vsoch Date: Mon, 20 Feb 2023 23:43:25 -0700 Subject: [PATCH 1/9] start of work to add flux python pam auth I have added pam auth, and next need to figure out how to return the username and have the job submit by the user Signed-off-by: vsoch --- .devcontainer/Dockerfile | 4 +- .github/workflows/tests.yaml | 10 ++++ CHANGELOG.md | 1 + Dockerfile | 13 +++--- VERSION | 2 +- app/core/config.py | 1 + app/library/auth.py | 28 +++++++++++- app/library/flux.py | 1 - app/routers/api.py | 1 - .../flux_restful_client/client/__init__.py | 1 - .../flux_restful_client/client/config.py | 1 - .../flux_restful_client/client/shell.py | 1 - clients/python/flux_restful_client/logger.py | 1 - .../python/flux_restful_client/main/client.py | 3 -- clients/python/setup.py | 1 - docs/auto_examples/api_tutorial.py | 20 ++++---- docs/conf.py | 3 -- docs/examples/README.txt | 6 +-- docs/examples/api_tutorial.py | 20 ++++---- docs/getting_started/developer-guide.md | 16 +++++-- docs/getting_started/img/pancakes-job.png | Bin 70862 -> 0 bytes docs/getting_started/img/pokemon-output.png | Bin 137919 -> 0 bytes docs/getting_started/index.md | 1 + docs/getting_started/user-guide.md | 43 +----------------- docs/index.md | 2 +- requirements.txt | 1 + tests/test_api.py | 35 +++++++++++++- 27 files changed, 123 insertions(+), 93 deletions(-) delete mode 100644 docs/getting_started/img/pancakes-job.png delete mode 100644 docs/getting_started/img/pokemon-output.png diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 21cf54a..60efd06 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -23,6 +23,8 @@ RUN python3 -m venv /env && \ . /env/bin/activate && \ pip install -r /requirements.txt && \ pip install -r /dev-requirements.txt && \ - pip install -r /docs-requirements.txt + pip install -r /docs-requirements.txt && \ + # Only for development - don't add this to a production container + sudo useradd -m -p $(openssl passwd '12345') "flux" ENV PATH=/env/bin:${PATH} diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 359c409..7a3f085 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -30,5 +30,15 @@ jobs: - name: Run tests run: | flux start pytest -xs tests/test_api.py + export FLUX_REQUIRE_AUTH=true export TEST_AUTH=true flux start pytest -xs tests/test_api.py + export TEST_PAM_AUTH=true + export TEST_PAM_AUTH_FAIL=true + export FLUX_ENABLE_PAM=true + flux start pytest -xs tests/test_api.py + # Create the user and pass (should be successful) + sudo useradd -m -p $(openssl passwd '12345') "fluxuser" + export TEST_PAM_AUTH=true + export TEST_PAM_AUTH_FAIL=false + flux start pytest -xs tests/test_api.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 31062d3..ab6d012 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and **Merged pull requests**. Critical items to know are: The versions coincide with releases on pip. Only major versions will be released as tags on Github. ## [0.0.x](https://github.com/flux-framework/flux-restful-api/tree/main) (0.0.x) + - Support for basic PAM authentication (0.0.11) - Fixing bug with launcher always being specified (0.0.1) - catching any errors on creation of fluxjob - Add support uvicorn workers (>1 needed to run >1 process with Flux) diff --git a/Dockerfile b/Dockerfile index 367a0d9..3da702e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,6 +11,13 @@ ARG host="0.0.0.0" ARG workers="1" LABEL maintainer="Vanessasaurus <@vsoch>" +ENV FLUX_USER=${user} +ENV FLUX_TOKEN=${token} +ENV FLUX_REQUIRE_AUTH=${use_auth} +ENV PORT=${port} +ENV HOST=${host} +ENV WORKERS=${workers} + USER root RUN apt-get update COPY ./requirements.txt /requirements.txt @@ -27,10 +34,4 @@ RUN python3 -m pip install -r /requirements.txt && \ WORKDIR /code COPY . /code -ENV FLUX_USER=${user} -ENV FLUX_TOKEN=${token} -ENV FLUX_REQUIRE_AUTH=${use_auth} -ENV PORT=${port} -ENV HOST=${host} -ENV WORKERS=${workers} ENTRYPOINT ["/code/entrypoint.sh"] diff --git a/VERSION b/VERSION index 8acdd82..2cfabea 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.1 +0.0.11 diff --git a/app/core/config.py b/app/core/config.py index 708af8d..39ec567 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -67,6 +67,7 @@ class Settings(BaseSettings): # These map to envars, e.g., FLUX_USER has_gpus: bool = get_bool_envar("FLUX_HAS_GPUS") + enable_pam: bool = get_bool_envar("FLUX_ENABLE_PAM") # Assume there is at least one node! flux_nodes: int = get_int_envar("FLUX_NUMBER_NODES", 1) diff --git a/app/library/auth.py b/app/library/auth.py index 78fa050..841976b 100644 --- a/app/library/auth.py +++ b/app/library/auth.py @@ -21,6 +21,7 @@ def not_authenticated(detail="Incorrect user or token."): def alert_auth(): print("πŸ“ Require auth: %s" % settings.require_auth) + print("πŸ“ PAM auth: %s" % settings.enable_pam) print( "πŸ“ Flux user: %s" % ("*" * len(settings.flux_user)) if settings.flux_user @@ -33,19 +34,44 @@ def alert_auth(): ) +def check_pam_auth(credentials: HTTPBasicCredentials = Depends(security)): + """ + Check base64 encoded auth (this is HTTP Basic auth.) + """ + # Ensure we have pam installed + try: + import pam + except ImportError: + logger.error("python-pam is required for PAM.") + return + + username = credentials.username.encode("utf8") + password = credentials.password.encode("utf8") + if pam.authenticate(username, password) is True: + return credentials.username + + def check_auth(credentials: HTTPBasicCredentials = Depends(security)): """ Check base64 encoded auth (this is HTTP Basic auth.) """ + # First try to authenticate with PAM, if allowed. + if settings.enable_pam: + # Return the username if PAM authentication is successful + username = check_pam_auth(credentials) + if username: + return username + + # If we get here, we require the flux user and token if not settings.flux_user or not settings.flux_token: return not_authenticated("Missing FLUX_USER and/or FLUX_TOKEN") + current_username_bytes = credentials.username.encode("utf8") correct_username_bytes = bytes(settings.flux_user.encode("utf8")) is_correct_username = secrets.compare_digest( current_username_bytes, correct_username_bytes ) current_password_bytes = credentials.password.encode("utf8") - correct_password_bytes = bytes(settings.flux_token.encode("utf8")) is_correct_password = secrets.compare_digest( current_password_bytes, correct_password_bytes diff --git a/app/library/flux.py b/app/library/flux.py index 4708844..d5a36fc 100644 --- a/app/library/flux.py +++ b/app/library/flux.py @@ -179,7 +179,6 @@ def list_jobs_detailed(limit=None, query=None): ids = listing.get()["jobs"] jobs = {} for job in ids: - # Stop if a limit is defined and we have hit it! if limit is not None and len(jobs) >= limit: break diff --git a/app/routers/api.py b/app/routers/api.py index ff2ddcf..668e4ae 100644 --- a/app/routers/api.py +++ b/app/routers/api.py @@ -90,7 +90,6 @@ async def list_jobs(request: Request): # Does the requester want details - in dict or listing form? if helpers.has_boolean_arg(payload, "details"): - # Job limit (only relevant for details) limit = helpers.get_int_arg(payload, "limit") diff --git a/clients/python/flux_restful_client/client/__init__.py b/clients/python/flux_restful_client/client/__init__.py index 4087507..aaf3452 100644 --- a/clients/python/flux_restful_client/client/__init__.py +++ b/clients/python/flux_restful_client/client/__init__.py @@ -208,7 +208,6 @@ def get_parser(): def run_flux_restful_client(): - parser = get_parser() def help(return_code=0): diff --git a/clients/python/flux_restful_client/client/config.py b/clients/python/flux_restful_client/client/config.py index f06c90a..aa8e54d 100644 --- a/clients/python/flux_restful_client/client/config.py +++ b/clients/python/flux_restful_client/client/config.py @@ -6,7 +6,6 @@ def main(args, parser, extra, subparser): - # If nothing provided, show help if not args.params: print(subparser.format_help()) diff --git a/clients/python/flux_restful_client/client/shell.py b/clients/python/flux_restful_client/client/shell.py index d3a426d..d64f353 100644 --- a/clients/python/flux_restful_client/client/shell.py +++ b/clients/python/flux_restful_client/client/shell.py @@ -1,5 +1,4 @@ def main(args, parser, extra, subparser): - lookup = {"ipython": ipython, "python": python, "bpython": bpython} shells = ["ipython", "python", "bpython"] diff --git a/clients/python/flux_restful_client/logger.py b/clients/python/flux_restful_client/logger.py index b861c9e..7ea4dab 100644 --- a/clients/python/flux_restful_client/logger.py +++ b/clients/python/flux_restful_client/logger.py @@ -33,7 +33,6 @@ def add_prefix(msg, char=">>"): class ColorizingStreamHandler(_logging.StreamHandler): - BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) RESET_SEQ = LogColors.ENDC COLOR_SEQ = "\033[%dm" diff --git a/clients/python/flux_restful_client/main/client.py b/clients/python/flux_restful_client/main/client.py index 336f492..7f21634 100644 --- a/clients/python/flux_restful_client/main/client.py +++ b/clients/python/flux_restful_client/main/client.py @@ -29,7 +29,6 @@ def __init__( timeout=2, **kwargs, ): - # If we don't have default settings, load if not hasattr(self, "settings"): self.settings = Settings(settings_file) @@ -141,7 +140,6 @@ def authenticate_request(self, originalResponse): """ authHeaderRaw = originalResponse.headers.get("Www-Authenticate") if not authHeaderRaw: - return False # If we have a username and password, set basic auth automatically @@ -280,7 +278,6 @@ def submit(self, command, **kwargs): "workdir", "envars", ]: - # Assume if it's provided, period, the user wants to set it! if optional in kwargs: data[optional] = kwargs[optional] diff --git a/clients/python/setup.py b/clients/python/setup.py index 75eb6c2..effef9e 100644 --- a/clients/python/setup.py +++ b/clients/python/setup.py @@ -55,7 +55,6 @@ def get_reqs(lookup=None, key="INSTALL_REQUIRES"): if __name__ == "__main__": - INSTALL_REQUIRES = get_reqs(lookup) TESTS_REQUIRES = get_reqs(lookup, "TESTS_REQUIRES") INSTALL_REQUIRES_ALL = get_reqs(lookup, "INSTALL_REQUIRES_ALL") diff --git a/docs/auto_examples/api_tutorial.py b/docs/auto_examples/api_tutorial.py index 99c0675..2b7088b 100644 --- a/docs/auto_examples/api_tutorial.py +++ b/docs/auto_examples/api_tutorial.py @@ -25,14 +25,14 @@ plt.axis("off") plt.show() -#%% +# %% # Here we instantiate a client. If you need authentication, this can optionally take # a user and token, or also derive from the FLUX_USER and FLUX_TOKEN in the # environment. cli = get_client() -#%% +# %% # Let's list the nodes in our cluster! print("Listing nodes") res = cli.list_nodes() @@ -40,7 +40,7 @@ print(json.dumps(res, indent=4)) -#%% +# %% # Now let's submit a job to Flux. print("😴 Submitting job sleep 60") @@ -51,7 +51,7 @@ print(res["detail"]) sys.exit() -#%% +# %% # To require auth, the server should be startup with these variables # in the environment (and the first two found by the client here) # variables exported: @@ -59,7 +59,7 @@ # FLUX_TOKEN=12345 # FLUX_REQUIRE_AUTH=true -#%% +# %% # And finally, let's get job info. print("πŸ“ Getting job info...") res = cli.jobs(res["id"]) @@ -67,7 +67,7 @@ print(json.dumps(res, indent=4)) -#%% +# %% # And job logs # This will be added to the client print("😴 Submitting job to echo pancakes πŸ₯žπŸ₯žπŸ₯ž") @@ -78,7 +78,7 @@ print(json.dumps(res, indent=4)) -#%% +# %% # Now let's submit three jobs in unison so we can list them back! # Submit the job to flux print("Submitting 3 jobs to sleep!") @@ -88,7 +88,7 @@ if res: print(json.dumps(res, indent=4)) -#%% +# %% # And this is how to search (with a start, length, or query) print("πŸŒ“ Querying jobs!") res = cli.search("sleep", start=1, length=2) @@ -96,7 +96,7 @@ print(json.dumps(res, indent=4)) -#%% +# %% # Finally, let's submit and cancel a job print("Submitting job sleep 60 intending to cancel..") res = cli.submit(command=["sleep", 60]) @@ -106,7 +106,7 @@ res = cli.cancel(res["id"]) print(json.dumps(res, indent=4)) -#%% +# %% # And this would be how you stop your cluster service print("Stopping the service...") # res = cli.stop_service() diff --git a/docs/conf.py b/docs/conf.py index 6804431..13634f0 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -54,8 +54,6 @@ "sphinx_immaterial.graphviz", "nbsphinx", "sphinx_markdown_tables", - "sphinx_copybutton", - "sphinx_search.extension", ] autosummary_generate = True @@ -111,7 +109,6 @@ # Custom sphinx material variables theme_logo_icon = "images/oras.png" - # material theme options (see theme.conf for more information) html_theme_options = { "icon": { diff --git a/docs/examples/README.txt b/docs/examples/README.txt index 77447bf..c113eb3 100644 --- a/docs/examples/README.txt +++ b/docs/examples/README.txt @@ -1,9 +1,9 @@ .. _examples-index: -Tutorials -========= +Examples +======== -This is the Flux RESTFul API tutorials gallery that renders from our Python +This is the Flux RESTFul API examples gallery that renders from our Python script examples! .. _api_examples: diff --git a/docs/examples/api_tutorial.py b/docs/examples/api_tutorial.py index 99c0675..2b7088b 100644 --- a/docs/examples/api_tutorial.py +++ b/docs/examples/api_tutorial.py @@ -25,14 +25,14 @@ plt.axis("off") plt.show() -#%% +# %% # Here we instantiate a client. If you need authentication, this can optionally take # a user and token, or also derive from the FLUX_USER and FLUX_TOKEN in the # environment. cli = get_client() -#%% +# %% # Let's list the nodes in our cluster! print("Listing nodes") res = cli.list_nodes() @@ -40,7 +40,7 @@ print(json.dumps(res, indent=4)) -#%% +# %% # Now let's submit a job to Flux. print("😴 Submitting job sleep 60") @@ -51,7 +51,7 @@ print(res["detail"]) sys.exit() -#%% +# %% # To require auth, the server should be startup with these variables # in the environment (and the first two found by the client here) # variables exported: @@ -59,7 +59,7 @@ # FLUX_TOKEN=12345 # FLUX_REQUIRE_AUTH=true -#%% +# %% # And finally, let's get job info. print("πŸ“ Getting job info...") res = cli.jobs(res["id"]) @@ -67,7 +67,7 @@ print(json.dumps(res, indent=4)) -#%% +# %% # And job logs # This will be added to the client print("😴 Submitting job to echo pancakes πŸ₯žπŸ₯žπŸ₯ž") @@ -78,7 +78,7 @@ print(json.dumps(res, indent=4)) -#%% +# %% # Now let's submit three jobs in unison so we can list them back! # Submit the job to flux print("Submitting 3 jobs to sleep!") @@ -88,7 +88,7 @@ if res: print(json.dumps(res, indent=4)) -#%% +# %% # And this is how to search (with a start, length, or query) print("πŸŒ“ Querying jobs!") res = cli.search("sleep", start=1, length=2) @@ -96,7 +96,7 @@ print(json.dumps(res, indent=4)) -#%% +# %% # Finally, let's submit and cancel a job print("Submitting job sleep 60 intending to cancel..") res = cli.submit(command=["sleep", 60]) @@ -106,7 +106,7 @@ res = cli.cancel(res["id"]) print(json.dumps(res, indent=4)) -#%% +# %% # And this would be how you stop your cluster service print("Stopping the service...") # res = cli.stop_service() diff --git a/docs/getting_started/developer-guide.md b/docs/getting_started/developer-guide.md index 756d8b9..c2b1c6e 100644 --- a/docs/getting_started/developer-guide.md +++ b/docs/getting_started/developer-guide.md @@ -45,6 +45,7 @@ $ docker run --rm -it -p 5000:5000 ghcr.io/flux-framework/flux-restful-api ``` ```console πŸ“ Require auth: True +πŸ“ PAM auth: False πŸ“ Flux user: ******** πŸ“ Flux token: ***** INFO: Started server process [72] @@ -88,7 +89,7 @@ $ pip install -r requirements.txt Install requirements (note that you also need Flux Python available, which isn't in these requirements as you cannot install from pip). ```bash -$ pip install -r app-requirements.txt +$ pip install -r requirements.txt ``` #### 2. Start Service @@ -122,9 +123,18 @@ a variable that tells the server to use auth: ```bash export FLUX_USER=$USER export FLUX_TOKEN=123456 -export FLUX_USER_AUTH=true +export FLUX_REQUIRE_AUTH=true ``` +As an alternative, you can enable PAM authentication to use user accounts on the running server: + +```bash +export FLUX_ENABLE_PAM=true +export FLUX_REQUIRE_AUTH=true +``` + +Authentication must be enabled for PAM to work too - you can't just enable the first. + ### Interactions Regardless of how you install, you can open your host to [http://127.0.0.1:5000](http://127.0.0.1:5000) @@ -149,7 +159,7 @@ The following variables are available (with their defaults): |FLUX_HAS_GPU | GPUs are available for the user to request | unset | |FLUX_NUMBER_NODES| The number of nodes available in the cluster | 1 | |FLUX_OPTION_FLAGS | Option flags to give to flux, in the same format you'd give on the command line | unset | - +|FLUX_ENABLE_PAM | Enable PAM authentication (e.g., username and password must be users on the running server) | unset | ### Flux Option Flags Option flags can be set server-wide or on the fly by a user in the interface diff --git a/docs/getting_started/img/pancakes-job.png b/docs/getting_started/img/pancakes-job.png deleted file mode 100644 index 7cee67305042fc9493c4438a9713e3cbc0449778..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70862 zcmeFZby(D0`!70_AgF+pG>UXfH==;Fw19-tEe+BtsHF4&!XVv9cc_GPcZ||K(hYl! z&-?y<`<(0A&-natuCwnoJx97QSBI>95SFtdSMb0@Of3O~I zKRle~ZunT=)>YISPBxT+WDUX5A%7s8-70@b_nFW6M#_H{{J({S^{D-=EG@qiQeJNC zrTxhXV(PI!R#%VmtJ>}pPRMCRgA#irTv(`(@&%zjQ7QlC0!;N^W+$+vay=^l+~VTC zG=a>X9>n3_+0%ci74FTPWHA;6Ma3lF#8ambbne_8Mcn3?m^gmHCO8pl!^9zAeq=oN zW?M~LJMJ=rPRV)m19BDl`5}X)JFf&Rxc}a+|5``D5~g)qSQs$wGp0b};G6#PBSz|w ztb+Qqn)4&^KYGI}%(ifHY7!C>Wi+TJmbsf;2x~J=GqH>EHAa-q1?)k}xO=5|7ov1x zW&4`1t{AVG*x!cv4}Mr`8#sVq2V1Pa^U=w#FUAxeaf%F2J>-5z_Rp+V;;^#lGuV^iOuqjSr& z@bmw_E8rDwH0W~MSbHO_QYe=VWm?gZeVM^0_EWpQov3Qx8qN}5t<|TqVT*s@uBr7? zA7C1*ADNvJ5~VdRB!y@Va=UZsJ(!g9c@Ps9(=x;6O7be9F8 zLxygAk3+3%B85QHM4!GygStsoVxm-wek)*glRpRXn#(at8UDsH{$+S7Y;<5D@rIBr z>JJ?EQSVs~=(1b&9y<4?zwK3&n@t@8c3u80lg!@=+f?xnV!JjlL2Awhuwy!X)Tzlz zIeM}HWcNk!)1UuImp2_<2uBx`mjAU!D@HHA9B(g@8MPUDA*l0bcedP@_BC~j<& zP!YN~8sCzW3=R{Vtxgpe6s)GlGQKz-kaHZ-(pk)&_No|p-Y0(e@#o&qapUEz*Y>=D z@5f8~y%nDAy&=`soXGU&FxVCmTXDStPBWkT81b)DhX!qp=9L3lR>;uBlJ?!dKhS`$ zn4C2WbIdF(@4w+o-T|>Y``F3Az#t|zmW1z_7nX4rJO&UtOY_O~3Y^SRo zo7S6v>7&PUO&uN8-NghfU)cy6>SdU_;Y9=NV#5NR+qq5LB3|`l9zaiQ(&SNsy z8gCdXPsFsy5$ZN+l?~;7COz#lX0Uy6ijdQC)!IWe$=j9>$ST{Y&Y)YJ9c^!~52++Q zyA-`aLv?<#Z^OUUjegte5?}0vUp-J>9{Y{zC)Mp=2OMU6OFFWWmIBhG*{yAC=D%Rm zzI*m9$c)q^T``{1v+I*)k9lrpob~<%CDWtzkFHAzo*_A5rw&wO23`gm+%Jr6KYzJ0 zRKSxTEJ$YPai1pYq?Ie2)ZeNsKT7#7WGF6i=?;oB>}CG&^@c;kvAJzSk3dNqg-wez z9tWRBkTeE29!LFS33w-4Ar;K~#7gX_8Dqd^M9buG#=URZ;ac^-3w743TgAIfJd9t5>Cfme?2oWdg*;+}{(knayit1fEQnEL{kiF?EZsCmY(4mpnX2sEb|ECgt zx9i$QKKnw4)6UPoV3CDBxFPJ4$Zt;SFaI-vw@-+k)W~~VXywOiEaSnoT4mTY?%4iC zIU6jXuhqbPmRyd?)08I7@>+9-^WW|-zn+htRvoctKJTxoSTo33@1_*Vd?DZn!h-`B#n?f@IZRa-C*7@ITOf| zPLl}ZrKOVgr)8joq0e;v8MQJeJm$lIP<9lqHkW5+)u0G)sl0gJI~`2hTki-xrREwA zXS*<1r%bh;2~cv=S+MXy$`HP%ZNY3s!w>Z|G>Eb2s1K}?0e-pd5Dok}%3&rlk1kzVoTj|C#VlRO^3 zRE~$~<-$WlxN4cNn2rf)L9E5pAxrx|zh&!6R1~ejoBRy787n+afIFEJjDLC)1N(aL z{+Lk{N0naxQxjRgWTV%6(cS7HSrgO@(ccSs}<)oFGme$DLIb~6kMDb23 z{Ni*O*3$z~%G*|2c0twzxs z5=TFdwo1F&V3*!rXQ%MXaQbi|CyH!Eu5-J+C)IKr34siQJlR^ROUn=?XA?n($kjML9L%is z)N?I2doCkd)qahJ*KK252r=!vTPZ$-Z9KYJWv`K+%y-P&Cl-xu9WJ!<{fYN>>r_3u zlHUBA`G| zk_Glo$~(2ZKW0Fdd#^hHn|gR{=+T$VF0MNEQGLILCno#+Sqa5Ojhyz4t4k}<6}FRR z@di8atIbMs5?qy1*82u(&6w!iSjOZEr~<6akB`p1;elj&LNALe^=6mM2Q%b(p0~X7 z*r&aGH{0MPh@~$ZMnMw))Z1|np5cd#i=pJajQHh9&wz~oeFXlxmOle`SeZfI;WVqT z3euTit+HdcDZ8pOv8h^gr9@sWVR^fkz8@-X6(n{s zeIxz-1Yq+rlTOF^yY%7^@lk9Bg*Zu~)L9I=3*kYVMXOhMH zmBdZap3@(%@t2(O$Gvy85tmzah+qqtrvN^0rj6J+kIPEG$MR;?{2L!9BUo}Qw0fo8J5*~{3r@t5dThR58F(W^5JcBc~wosbr z;#uc`l#-XQ5tC?T!5$2TFgc1tu%s3pBVUq`y{C5t;NBq~KaZEw^YW~NAl+!#R0OIP zT1K;8hcorhm0%;M3tv8Tc6NH#KF2hcIQ#Ls`ZT4^WMP>;y{L%OjY>@DWPg3kdH`wp zvf&iu?bPnxLr?$8JFd}6h*`Idw0spO4fkC?=;~2WP}p(&9WH1*kA8aW7799#Y3^sX z-w}VFTrt-1RW^yQXJjz?(G3fjt2TRNpv}RQ-(`Zz?p7WB+{t>8L!Ko)gqJ!RqU5TG zkc89!eVze~ehDo=b91qNw>M1YCHqZmDvuvxpXv3XdPu}0JuU6dB?}vyjddSCTV~Wi zx}0DJv9^L)&ngc%f+ZJ(9ghkYwDK_@HY)F7=@+0Wyf~s`6oyQpgBlL>u1z|&KXGW- zpY)^G{`kATo2L7-is~_Dfa84IV&Q9b(KO&oBn4(Y=C!NnS-%R1p2vV!yZ}Jz|33;p zJB@&IUL0nf{FbH}tR)=g5k39gqM|MI;)MLTN-h6>*F9Iz#5bhjSeOh(u~E z#%o4oWqgv@GR$QiEoM!wqbwCcrCD@RsTg=J?;uLG5-gazW%!IOIu+N|1mlx#$C};# zDATDp7qnQ5+vM`&ZF?>uN~mEsNb2p?=5ET5Zm4kp0=oWLfK+XA*o&i<9V9@21YjN- zD$%GHfr(QNFncAh5d8=g*$6WAOI1dq9Wg_us6~&4zR3Zgj@h|U)P4bnz)}O?90H4c z+D3a0Nfou}M4Oz;<%CacJ8gfJb5%IsJ4@4YF%`3vn%9>VRF9xDb zT6wukr9Lyc_)C`uW@ct(7}+VApFZ7QTU$#jFQ{+m>-z&75DlIBX{!13xY!v;(^*(p z5;n=JgdiG5MzFWW6n=wn4equ-F$Aep26UE{sJw=ZJgzXwRfNpd=8WrE&0WKiEN6Eh zLs5#$qJN^D@^n}R6c4yrjs}m0KB@qSK0}@ogG=LbV*0tS>K`bJl(8Fn*llR;rL9T< zXp^+Pr_686xfrCX_@h<@A5;JMR!&W&oJQZ!8c5!fcD(+;uF=q2i2)X$RaEl_Krm)7 zC&1!ep5vj&UVocCu?8>`XzkJ;btr0q!x(tafim0!lX|QK?E3jyV$z>DmlY%y&s6yb zU-g&bK{h*bZS4O*Y5{4$Ul1pc|G`)PBjEq?0RI~aII{3{)W2r|{-e$R(dNGlIrTs8 z;xA9hTq~82!F_oPPEgk%dAqT|?%he6!x%c|q;@J_QjvwH{569{o4rC-tErA2lxYwy zu}4vsgzw3h7O}T#IzQZ(mw%c~EDfEWQpT^}T-V92Iu4{R#BII?drXTln?kUE38Q4T zVzzZmzY0*$AQ!}_;6p2Ud9hlju_q0AzusEf!(Q*B2v(^kI2pgX+~`FtZkVhc9v&7A zSNtGQ%17t+naz2BIV_9Q=n{&Z%L|iv@ZbTvmhR1OUOMjPSC&;!1ZihAxaDwhNW|gx@b#=`)3*krr_L1a#3lTiN!`8z9}@-t$v0r|^hRAQk5~x*wsCOR^U7 z(O53zqe>P&)*la*uyB3+xo@H|muILjZjU=;R~gtWDq9{DK)f_ZB2#AdN%do)|Obq zY9-q)pO57zyJfy=)c^kDz2H-VX!{Fg_FpZ2JH`CNW9=F1eGxnRRqskA)=BSa zg;GxoQe5oc*EA5~>l8e`e;;nw@uS22QX!%1hgvP*&Eqa8HK;JjV?gn2}zi?Lp@>CY53*DthL329I6M+whl zgASqsIjTdWHb|w%G&YY_W!{_YAwz>Y*4Y!NsoxxF^1G+d*_kEW9@G(?mXTJPx@%ty z>E27Swt|>{oser;@VX!{TerXI$|XrMb9tf?!#dfi#3v?U!loD?-#2T2_nxR3Z zi!-)S)D`_|Sd;f4Lytv;)5_Tu6cndo^EI%H+w7~XV~WO^^0xtgu4QD-^!c({ zP1k*m(d0ZV^>5H(lMPaM^0P|=m3lr__i>xJX2>ChRsMP_}Ih63yEK9jRg6EqPu z+^p`C4vC1+DX%i-bCppV%gqa(Rs4xrSzn6GuA*B8;X-VkW2=%q z#;R401`RCs52e}GXze)8AFR;sBW}Q!L>H&dgz{8qZ-$W==M~knF&cU(4L4jk#ju}j zZq(y{T$&z=U!V06XEgND9zLH>c-KLc?y|_A)^$5u*0a)Zen7}*jJGK4y-o_vKB9q; zWC}rUz`L73&5PGO?04p?RDU*{O~rMPg{bn*Jp zz}!>Ys^ojt2;HkwEOlRZFs*qN%xvT*6(=dgt3YN{YlR)XRWHnV*~hPT35(d_$y8(~ zij@@RW38OYv{G`e37A+U!fhB2Y;1zDaeQc_ZE_zruV%?mYg|laK0i?B74HL$SB4M{ zl0|*|Ue4h-&mSgpS{Aa$j8n2Bx`GS4f`-4M7~8Xk+)f#=*5ivtlp&J{QmyZbBDbUgoVN{_8BY6=)8(HL4^LlDE2p+ZVbl8H4 z0;!>C;^*EyCV}HGlI?Gz55kHjQaa20d#g83A9hrcM%W8V-0SHl_RqaMe5?D|{589& zlfo>c^<1pQ!%dvxZES6u*kxT+Aj~1T=VJ{1wC;KlzR0I$u#9{;K({I*-EoT;0`h^3@X$Kq3bknlF`q!v59U@Y;t+PhKGAgMU%t6V1A zUavHJbSZb=q4~?OY*Tdyn%_TpU_EHO) zFAvkR9*W$-!!C@O(KuYPaTh+A%b_|elZGXGdw;@z974LyfU11tCJGq6Vw`p=t?T>j zFy~gaDrrafdO25+Mw;ZLr zhjse+5}K_$q%8XdUp>S5$!17|O>fpd*9kO}fVNtyPGrC$DcgKqf(5m-Vva<`Fc`>l! zG%T#kAOCuJMQ?y&=a0s1onpk-`xTvcY>wqpe?^|gWH`)1>)9)pVLTR4hYR=_`kuG<(gQjV$Wi5@D z+Qr0%9-Z>Vw?#GA4m(dAX3659pj(2~4l#v|hMLK4`+{&u?{;>&Jwune{Rx)S4rwWV zFZ-LBioSyC3~??CXiz>liMyQV=v;1%$qA&prAxJoZPw)!MwaH1u$WXN)3ZgHnQR7= zlT_O4w#P<12nVw3#B9D3&<&ZMcbR4~^B--ULPN>fgM9sYmJ0qVN1I zhh}Fii-Cf1xMiI7Ab7_&NoGV?P|(Nl^4RbBw2IBLff1{_xDXe2)T?_l2v485sidK4 zsch?j;hfmP`>wjDDYZYj9&U!HnzDqHs2%TWq$$QRE69C9gXVQz++1A04t2WSbiu0L zoL0i2W&+9D`4OGor5a&RA;^+{_ulq&dSh-u>2RqsY>cYjK>K}$zD9l)(8sl=BX;}| zP1`EDQK!{G@8sGD*@rz5r;99koD(&IG%S#4y%S9fttVL$ZMMe^Vi`kbm-D53+M_B~ zLk#Ioee^p?PHX8)AE?uQhV+#+e|J7^FT37ss-;nTc|K%y;v053LK8VDre#6$f}#|c z(?rmKm9-R?*PtwqQ-hYMScJY9bLjlb;cmn(q`Oc@?l4=fSBJphsFr7m_`7 z9bdUlC9g5M!l<*0*KEXL$2G{1a0Yh9uE1Ky7p6R7!$?)7<8r#orW<8f^XhVu*q;U3 zO@<;3OASMwO0L+Cqm@#4iE>>oh!D3fcWGrtWc)&RE~Zq>#*QM2 zmS;-YU~n6RHwdv}Ulv#?M$^{PGnyhU)6?$R^l9AN)V5)g(}jnnopgHb^l4y0HKj5x z!s1JtViyWO)S6Q}svpKlJ7FYCK%%*s&inXzw$n_~fz#hP5RJY(kmUI}jA4P3rBuD} z2I}2M`#eCd>8j+ggsWfZWowa|>ngQc%1gEL%SdT{-h2q}H!KH`NLJ4Xgq|G2KQ1;H zxgIBbPJD9dmWO0b;BxD}V5neMkh4MOJ{CzbBQd^$AR`go6dgJjtaPw;g=E!$uVf|+ z270OFLZVs6Obat8@JYa23{2Y@MUzF!3%4A+;2^LaWLFsJ>&3t8c7f-+I_o%YfDG%qqrDGM}AyKeFN$#bwt_ns?WI zHP^|JV~3@?km!ihiNmrr9;1g|_0W&o>X3`}j~pG4t~LPM*U{m&CXSLogSh6GX*Fu1Y88na9U`mE6`j z#Sw|@Vlm-uaVnlzP|2q$k{KjZTZ83c+wBNy*J5#)){tjINBRf9P)&c9hh0xlgknp@ zfXW-q3&~EE>(nH0T4IBUOXd6e$sY4EJgbRiX{Q=63j~~PNl1`8-&^{Ah{bCVR*jH+ zn;_8XVCLZ9a4EE8@&3x8dnT&J^FvOpbiuvMrFA^VXKNtG=ZC6V<0^jAB%IH5(XDN> z+-(*&XZ>n?7Op5rk#!c#+y{Alu%J;6eoUQ$aEVUAGv8SStGN$lO$mtZ_1$f|8FZE& zVf(|d9rgPLHzes5@@mbN%aja1nVy(@4Qy{)ki6dURlHbsReeHO)jgwGep3T~fg?mA zuddG#DA95I^E1NN>9(5}Y9+fDg!ApKE$h8q(mY18RRs*1t2etA*cR6>H%D_s_Vbu^ zUEbHXYEHI)1YzJ_Ut&SUV{1vxghGv-&CEMmEi&U3NH++P8ST`Vg4*d(!|^z0 zyTQ#^-ToW~Igl$Uj{c%XaX@t3ya91b+~%=wAK56?uE#+=4t{#7h3}wESs*6J!h_Uc z=30g+p*tHsKCJ?xa%(L_t`%yPOIOqeol7i_7UrQI`??c#M*mqn!oAnK?|}N0 zyakFK5mEfCjPzS*&`CeBWUT~Y&NWGI z(e+k7;o6TLR+{FqI$07sbba{R?*~auE_C8;uC^UG}4K@!^N@Ndw z%V_9jPkKTgr{l?@ZsqP0T<(IJe1uF{rwl@WK+UIq;t?_|mVVyHKdbd73!1J+BY$F4Zk;iQ#6jQ!v z=tEbD=^@c^IX(wJp)OqxWp~JmmnMRu95@IUeFVch#qs;_o&mA<*8g~Tj_n`=O3g9? zr322UOM!t!f1*-!O7TQDVWye@-Ty9qKt-+Ec@)m_Ve&~B<+LDcnF5z*MZD(^0JJ1x zSK6W+thtY=2j(j2vL$=0h)*uSJU#s^*6xw;h~EV)$7ksi)O%UkGe2)lQcPUABC)3C z9N--_H99sZh$&L-NRZ1(9C!pS$WTd2;PIR-qok9L($W4GwUdU}^sX;Vf)%QXWCBJj z7<^nC6EvtY5fdDoW~G{NQ0|fWuionOFSDc%0BaG@8|6a*CrHr&&}_mkTYLZ||O zy>Mtygj@nkHYDg3_4_HS{JMTIYH1`~_TXcAG%A44QyPg3nlb+d6~!F!rdsOnJOMsqn>zKgVRW5fBRg?8%~mM*0jK3)cP4!f7XEXfh1=UcX^ z4T^Vi!>$(Wyi^YTI8DI7kSvHk^r4~7s37g`tYKkoYW^6&jjbJqTbQCn1ikN1Ug;}C zUq#c)E4>?Z$hm=*XrcPO4V9Q0iIDJmB_)ppg@Qu*?bG6nXN{tPqz*zPMUN^R6e!l_ zXJhl8pRWzRTC&!HEG=$dFWDF6PrlhmXZCtoHz1cbwOus&p&+pt8r`@JzWLXiks3 zVML+7zbylr1e(as8t_RJC;hv5T}TSXWcWW_MR97sH?))msIAk(RRX9C5Uf%vA9Sbn zlr7Ow91n6s0W~ai5MIIk!at$5^;-ku)+S2)e?Y{kU@A4}IwdL0_rxlcR1VQlm%OnqpL}_rScnAb~nJxt|rmiqceFi6I$_XZW0k3_HhcW;VWElKF# zvjG1~f1tZOjLK@mO(FC^cFZ|We62eP{m zt=jhC_JcVvliWMCxbgYh4abY)WjR+@*P)t*)2%v3KxmV-{ucd}B)_my@8gTFSHYO` z)S`)@@A2Ze@$2h5a0kFYI=0Yx>L^3yI;`e+w%y(ihV|Fa%J@_fvkmh_bz8x9RWoi^ z>V&Vycpv?gM#}~Pa*FZ&>WIrgmRdd)_{WA;RYUg+6Q!wf^VqR?Ld`d0h z?UB*R(IHe*STU;SII3&W+D7Rx&39PRPDAs+CQ4-e-0 zAK>@2Q~T@cczsYS)WGm{L6M#2LO^J!+S{Amp_Ph;Vm zoZ>YH_%@*~O;nC8gq~gnZSuz3aX!7EDD~V3`H|8X}N?jz4%dw5zVjDXe-(92H3eBpa!Ni#ZL_vhjzbOv70NZ7`CS-n%&9*J>L{mVzw9=jaddvMyY z&fws){N)tCXVaI>54Ml!@fZBy7I2JG1(sOHp4fOnWpT@FgXe*Z@ez2vr%PuR?%noH zEZ<94vy$5KbcL9(0&3k6G+-><=WNr#uS*;-xRO+p0p-48fHl7$3R_9r&~x!<2zC+k z)=-_9CGbh($y&b9`QFfcoW6a>H`!HYF0Q^}yLnfoiw<9)j={jed(Qw|&!jE114F^c z@7$HfQcps(Pmad(E+-(HoGmX)UV2KnaHLUuc{VXfLz7tGpvR;|_Zm7kQm__Vz}H-4VZ z$NF6hN%wQLrE>Ze;CS>2TQIEV*Brd%9AAPMAMR&VRyDVAaQcn*f?GE97GZJYi8T$4 zf}E4C`;4ne&0<{F1J2b)Xi!B!Cr$BON)WRg_Q<$I3}vfM1OC;q9E*3%t9$9PVTtBO zVPiZ7*?i_}NNC%0IXPa(&l7kFll>7L2a1;qk#bAVvVh4Oc}^9$z%n|y!)yfcp8cp~;HD(Ra#x|x{RtSjI3|OpLPU*tnFli6($*;?3mJy+NO@yRf*;fAyQr3S|=oT)# z1oigDePCPK!8p+0|DkF-;pEZCeRb#^Ec?d&LWkDOc*DfEX6jP&g;ldi)|8~g#nF6y zsk}8J`s=M+{yvG*jcA04xtuC% z-{#!?s`)PtyVM*9u$J50B%y=hEEQ5Gn`SyKHe8bMjWFT-bCpCs7J%PGR`DooW@JgI z2rtIeYYi~LyrcX+7Rlx1MCTPK`D~PSae9WNfgmJwSzQCjPz!@iewS8DPzgvGGA54k z1HP)nAcf@77yO;iDtSjcT}Bu8;3j#PF|3_?>tkH37frz`Wz4APKtS5bhN(U1+!~5m zbgh8ZLYAwin78wr%m$)TXT}GGc^=d6AB6V$AM9Fl8q~S<A`#}nNjzcvU3J5pG{GX`PqK4Ul>Q#v{M#YEe8ho z6#k@eW2ZF3{&fb&xss;t2i$BqltwgF~gp`2IN`-Blm=8eK1oqmMG|yOQW}F_YI$kERzx*et=J^8f;-OOxP2yll zpXIFIYJvoFC}c7Y4T_9NfYI{&YsRDp;v9d6pj+ReiF(Y?-3Q65cHE4OZ)HsKlMEL- z>mRo$hVgA?bLi1!Lge!x(dg3HG#)>c`YL!_hEvd>!;?9cl>)_E_sUEX%;FM$PG;ar z9?p6>7?LnolqCniq)r8m*TGMG?z72IWk(2YWGZ5QdFwtd*-YV&9#C{mh`BzY| zv+7r=Yr#$E!&*+B*+>?tJI`8UW7*gR6i0I#&>VZ}OyMsKBG?=tsfO{Gv?=lGn6Tvw zBN6ZFjK}J=jH@)v3y;R`X%)(AJ^y1NlubKzEpEDl-1`RSj69_azCbmZoqv6bfR!F1Q1*}hS=}Hd+HB*YW9=IqV%JKUb?1e%fbq@yW zbXgz5Df_Aiwzcw?<0e%G^BF_E@9-r&Bz+who;f!Ao-UbOTr6lrvbIwB3=@`2WF@uC z98OaTPVd!KZ$>mljJzzK{7Yz33VGF0tUsy1F1C{q-b~2gDCQj%?%XTPbm^>u!43Gh zM$h97+&aEJS}$($)$q!bM(1V`8v_33=w!Wk{vCZdk}4;stgJk{w1VV1f&*uRYv3X> z9COVE0slIts#Jjksv@@C0x16TNv=GoOTLw9^g>X2`77coW~9nktHw-1GOcMrf~0Xa zN7nTHHPI?`2%8P;d9b*mFXh^$WUhZbl9}wbxp$f(~O#Yw}&-U z`Ooct{rKVtZV*`bl%Om);}WOi0d|)grG(%gO?j4LR{Epw!6AHV@A&hxZ}Z*Gy?yz! z?9(Pc#{n;X?gz#pY{|=g)>Spbng>ZA_ZGB4i$TAqZ!2LOzV&tKAc^(oN02{lAI(QB ze~NbSS=TQ)n6z28i);kx(6UXp6(kE#+HQz$d_J4ZqEp5_2Px~@vifkVEn-voG11Mk z?ML@BG?f_x4b;8T1IY}9@K?`3X4tDQkU8JY+t)osY9-QhkZBii~h;Ez{gm1Q9kLjV*~ z6L6t}{lKBmd(>GC7|0TFg)AX+5a4w0A+IR_9O~T-ewCl`I)aZv*};3bpHIjyyqZH5c($2bG$}b`Umtf_Jce*dGnR1 z5ekK3PH6^qH8-RxnVcQMO^n#+QA%}1&z1TP5*bP)clHa>)juJjN*T)r5c?vzJA0c` zf_eG*goJdDQ>B3O0R=Z3GB0^mw*VTt@9cz7nFchW+2?SE3?%FXzK&i5mVr{ZU&M|V zqDz1?C*uo&DBXX01qH+o2}r=32AM0*iyu;AKuOh88Tz6iN^Ao@$*4~BZa`dpIg^}! zb0|88XB?*Sv^=U)OTCV%w=>vyJ&qqM;09BFlm+Paew(?X@(#sMEd@y_8cz0w`RGMA z*K_`U&fKsm?*P>l;%?yY=g64MqcJCS|Js?T(cLZ-n1EC}v1NziX*kQz0-SP{zaCrf z_Cdj#NjCh^BM1)#6mniekDq}@;Od0*e*tW_gkBf}dTqe&$3EnFy}oii7+fmS3TnGS z^HUq}Qv&+a4>3hPNGYZ;ph0iAU9^%4knl_f`h*<1@fCS56wp+v9a*EzdxfDZ*(~-$A?dyd-%7(wG%B-ik!mN z0U0Ygt+cds<}pY~ZyD6OShN9KtQ*s0tf!tV;!7d^k+z^3GJUli^+IMj8;c=8d zE&zeq5u_#U3T%bLe3$=*E|MG?g=r;0mVUIV>POLZzUi>rkRd$OC>u^i9>P)i1X&n) zK4!u)1@oM_B0c|xb;jV}7MeM5P7#1PM{4jLsI$X>bmPO+*LdX%x`XJsui?ZhD2SM? z#MNtg`FFGe zZP8w#`OvenVeQp?aJ>+Shynmg$rM|N`pS;1J%K~HhXi}Y$_KMmVUI|RNex^E>KTUO zjeLV#B06{SFImUVzt;&%wt&gWNo0LA4-lhJa9_+5px?WY z&T!GKTV5L_axrmnON!#)E)`FbIL%LsfIe@pCxP|cZN_y>>_;ic#`;|Jt-?SNDuPV2 zk-*Xp4-3S(gCV{J17C~)i8q|gCRn5-VCxRPv;pvx(y~nf#CdN(u3dQf;}Dt!p>7=4t>FraIZ99wl)!7hv*zsz3cg^7?13bW6a${TkYfA+Q&6!EkGJ@&F~IzIqK z+3g2GpsX-3A6LLF_~_Kh;u#oE44tsbPTo=A0^X)mpCXg>9!T9D(AWd8*JcL+hHpR( zOONG{C817|5UZ`nV&tw3Zk;h7|NN|^lQp03y5gzgDHRA(E}N4T#-%`QxI74rfSiE` zN6PsX?&V)^{3wNkRx~kpugwNKLW550Rr3w zvX3z_V6<1HJHfSU$plsaM!Mzv{q|cZ9%pqk@*bF)O6+!P zLFJ^i@>OolE60HjMb&e`Z_dyI%s?-Tm+9jRX>|)6G;`3OQEY75tei@ej$7<+wEEOZ zhxzh0x^7z(4tK+2wPCYAJ*D4=`JFZZ2;{g*ngKUpjsAlf`+JCnPfb2Hsw4itXhQ!L z98=+Phu7x$SEW-o34mB1`df+e& zB2qY-=*TmUU4c@tU@FMcbv?O>mSuW7SL7ebWJL*iI_``&*J24Qum825QSPy^e{{rj zm^U%Og^8?X9gIm(-}95JgkTN#?tn6!7K$_`fFbbZU=kX?`k`+Ak5&gxj1UxD^$GXP zg2_eQ3dp&Q{f%#;OVbgcedod#`{hqA;*z85)WPt&kra&)htrG{r4##a`2olGm=^63 zcc0{C{V{0HU_}G*2jFyrv>ugzUjayp4lElJJ!`{}z{7FSl=u1UGe=gPLh2Czy*v|{{BSJ-w6Jzu+(LgwMSNUH zMNe={=#&y2c@n*_IcCwDzPm{`rHV8HKS#W6aOjDOmDk=jdu)z(7jbWZGmEq1 z^R1^oiX<0}k62(bQX=#QIN*~g7`l^9_~C{;liq#0kc)SaA>6r>N>8qD?jo<5yt{ChVZSNWjUA8Yz~ zzYb*-j@i)%$ycSB(FYSAx5P+>`MW$48Nfx?-IK$FY7>lAW#0ZEQ=@3}ku?u|F~2id zM%3>2Zryk?#10Q()JqvI;%1(ZK zheQ%)N@8@ytWs)+lW6n#TGX|WFC$f&KM^4@JGz(|yn}&{!RM!UEPfPds~=p_NH9xR zB5=41>53c_AJBz3#g7VUX@W26#F8Xa%m(0Cin*me=5>*O`2npw*yj$pj*_u!BAak! zF%?6SM=9aK_UFSw-FrJStiBQ*tc}+?Z37kz7$;kY8OTXr=R4$ng_E%?mf<|I$iVvq zKBWmYF8I&~Z?8UN!!aG8B{bH%{}dh1pBVh%BZBzP<`DY0IGSh_+%`@*PEpPIe3G|LSrSgzm#e3{m zbl~cNOMh@WPI}P;aHPy@rKNxCh zyI6Z*-$~sb50LKZXIQ;|rJwcSz3Ee)fDx;rh4DtG7~8oH+41&ovsLCD-^p^1j_>9l z-D57pigHh|B-4mDeR8d+F%#F%C?lrt4qb92=Ns^ORYvJ}2Eqh4PrU^ z=u@EU#?+O!<)(Gsp=-!1SQ-9xT5lxqkt5a3QpgQo& za#Jk6_a!Uhjg&I*ZJD>|QuiBo_oYl4cuhkMBs_i@^MWeQV(o)%j?!mOpS|sN+9Z6* zvwkq7^_{Khqe6ml6h}0zZD!nE(R9sf{XC@uX~kb!TP9&Wo$m|eUh|vJcRsH4e0rAu zr0(FFR*c@XfK6d|h#%81r~W6Rj9bO{Jfj?h#&aEYIwRc+M+Z|5NuM6PHNV65y<;|i zxHZ4*mR)hfLE`FAb_BVAEp$v!gzh_Lw8TwxW#Ei#an*`Dz;erE3QK0mcg%)_J$Fob z0e&0FKKVF<%HJCRC&&sc0Y_m{(2OW=smiuG_B?hYw3M(<8`h>FFr9Z6+h!h{DL8-g z^_k7KDf5&V&4E^tu2&GNBA3ckg?9Uw1`X@j!hV*h(6NYH>)KYBP#CxrcL~5hO8w%X zQQZSt%}>Zyx98iFihcLJ0$z#33_7{k9Bitg{t4$$Ll`V{iiuhVeOmZ&w+$Os8%Lc;ebCybJ}yY0b#A zZ;8$5SV8dU!P3~clg4@SdnpIXh@Oli&?ijF7 zQ$FNjEodamw6)GJ;1ynngaoMEryV=+o6Z)wdd!pTMrmG`sjy92b(3D#6fJVtv`$)P z3DI7jdwE)|=fwqggS!kVFM;tHg;E5-NzB3C_s;oVHqKUCYVK&`J~v;q0Njgsc+8I#~bz{q{1FllovUgH6r_Q0-#y%QyguZPZ?W}<{T!_S#+m_m6+(pDiW(%ATI$otmjQFZ&nB3 zZ^CwT$O2}CXp-dfXWOcW#-j6z4|^6Sr~D9aN@zkLLnM)=y)rC!@ zS(Lcx!zU*M`ZP!jds}4)jOnrs0Ny4q2%4Qw%fPVW;>4nK*IJlY&^;XH-_i)tO#Hve zVzE%Mp-1~WrDRpTN{R)=Pg0v1)-VW0SJ*fGK>)zmnkT!C)_O3bD@8sim@XZPrmwKL z&9<=mJz2m`Z}19SvkiS8VCHvK>{E8F+K1O<84wbgKt2)j1&JcA)>+vN(l4w`%LBWM zZ@aP<6a2cLDj42wUcD!at|VFnBvr(ix2=a z84i{_uDklwwO~H(n(ICS4hM6dtnwH4Y~|tM)k!LiR!mVcDME`sH+EY2ioI7c2s(SD zA9p&#V|3t?4If#%9X!MFX+6uQ(4LKKUZd@Puv1=knL5*^5!o2ZeqfTl36#$!Vwx4C z`gYysR7!m*00$%s^WGYX5Z-(}7o8e4n0eCNOPZSj+!J^7|N+rmuKy{`3P&n&_q zp0UC~9Pa&VO0&1lfqgySs$J(Cs&X(Y1M_%EVFHuiy$|c)%G^UlkIZf~ovr8b3#%(K z>)sxYOp@?^;{xu_wLpS816008Kh5XE1XXU_SCKsb3mlV=W@Nx7QRJwIL5_ZP=j9hA z`j^0cPZPi-Svey&@)Ow~kMes2Kz^w3d?;`2&SVo9nVee!?#g1vea!fOu=iGBQAcn4 zFQtGW44?v%L#iODLxWO+NQr`U4=CN;-KBJhAc%B#<4`joh%mG?NY~KtU-<6#f4$eW z_u1YDdtdu^;(-V7W#+rqde;5ipZn=P_5lkV1&j;VI+fA2#$&>X&hLm8!@Ro|ps6C= z5I3z(+ey6*Zj#bZy~U5_?#qod%XCBRTv7R5J3GmX5qY3Hk4y(fuw`HkECtOn7v!~~ zl&J6RRtao^tX|F(M11f3dVAuSQ35TyQH$d_TFQ(k2FbPRzxgJ<R3flf@<1(PaMgF3VtSm5%PPb_} zL0(IGB*LqoSs08rf$2c;^30|6EaTc4=W(8q|8^AEBGn?W7AiCEuouiLL|4x&V4YxU zTQeMOfy09LdWu8BmGf20wG_GSxgyd#n}%8_$^l-{FW1U*Jb^PZX%)+XS@;PEDV83y z+{X%<$wx(Ph0e8iy7tR`x-+3r? z9ph32?Y^{Y!Yt7|mEd7guNB)A4a*OCQfoX@D1`XjZhyRKu_F7$qX3h3iaK;MdR{al zd@K6?(?{b+R*joAda$GGzmTi(0w}KQ_bGuv%5NNaA1SnFx~;zqqHQ*C%c8&=y17^Y z#SrPAO^lJB3CO-=@ckLgiTCxVms-zxAW3R`^`Hx!aB<82YUZdVsb~=W3tfz~1B=vWp43)ts3KgbwSNCc+za}YA_<+FO!GMw zNdjpv&@QKuq!AXtgwdjPMzr`Nwg1?7#+0-YSen>8!r;zt3XLBnX3TBPYTE4Rmml2> z04e?*W%>BH0^kI->UH<$d@rz1H~64Zzl&7TNckolsd+B2PucZq)XnoQ?CCy3nfggI z*|NUnatOWqgI&U%Dy~@v-@uG6pW0NTX!eP%^?ri#^@p`X6N7rwW_kyjS$|Iyp`+vo z2JIU{{`|0q4i913&3``C1OTt*R}=lf$MwKgJCbg!{mHGUoO(iI_GEN^PDHl%3Mf7< zC&5$;=)a(oT6r=#dzpA=Mcl9JzUz$J3hRCk5qDE;54ndq@chcR7*CU?6l#CcNAgZu zN^Ccl1pSp1DYhxM+*d*Vto(A`*J8}XfZV^WalJboqcix9(CoheL8%>X?s5k2G{)k4wJ zNpQG2Y{}S%F&;OS`B3K<1+biJifW)PcLFJtWh-UYYN69l>_}4UdW><+>khf^AQs1gCi{iDjPf7eU zTq=Umwz-odkyrt{C_D?bR4l2FEHEjS#fI;)a{dInR6R%o=hh4mYGQu= zEI1u8n>OxqNWep@^6awsQ?h=tvS2#<)5;r?ggk=eMVoJ{I4!J%*VKksh!7vE_2Zx> z6wAgNkmc8ozq=peQHSBWl2}<$M=FrBQ1$eRJ5zM=ZNOT73{+bXbn%Yf7!5h_b1pRg zHhy$S^6Z%81;f>G-oFj#;9CB@EilFN{?^%TM23ZNg}}I7H(kQ4F3zjR+IQ?>B<+BJt%BjIDosWiug3w&bT1 zsx7D59QvnL=FFWQUxjXv^JD!A$N8X6H;Lbbqx8|>H0t88~_{8CjI=A|+onjj= zj*|p!pT}3&_^RUj)Kpu*yGrQhA2=A*%qb2b_l|@M6nL3XIfw=w^GR;FpH7=^hKMfm zbDtI|SCcGjGJM1BfEVLw((q|bkW`%ZiT9k=CmV;o>OiBIf6%6tpjLi?edV5xB;oeT>UY*$MR3*w*g} z8W|gKPee3am)T=J`J0?AGH{GeY%_JB;W>{uUb0rp^HDju+|k((hW69_dKP@ukM(sa zN+Zl|fsrw>UK)k_jThp}S{Gxjmrr*GllU+O!Dn;}RMotbCWn5o}CZq1JX zKI7wYxTh6t){S_wOl>7a_Vk{^^cP)KLY|U@Ou3s=scms>xiU|PKy%AYNnkubdn=^)N)UW>sHB`B^E9Wl=Ho9!PB7-S zvUi;(Y+6{+#RB5`&OB^9a2_tZ>&L7PM`Ed2(689Q?C;f9 z3w<>6V)gf{rq;oE)k90ox5CfhupZXc&~dKlC_uY`?k@U`zDXM{IXdr*Q>#>@cLjVQ z3Zu@W>!O+Jmigr*hDp1xI+WVSO~yDzSK$~2B@qO7n6`|;8o6w_VtH{WR!8!RN`gu6 z-E$XyZAL}kxir}t6U_?Cs-WuM0;TlpB0!#WH#VJnaQ=*Vbv;yr`Qp#UCP`jx3zg}&5XyPpy z!x${7W7I0$k*#R*6!UtEc8%Pir(Z9tIyvogVjbQn(vJ4^yOjr~WQ2Ldnm;mUr%v$f zanO*APFWa@h_j^zo*&%f_3ZAP2)%Bzf!N|Oo(0K5%Yoo(-^I!B9InRkK=Nqnr_>`&}tIB!FRk?3y~kBmXkSd-Uv8JDElA#3-B7 zy7C$6yTZEOE&i-I=CUMOoiFztNV|v;UuZTtBbq>&vK#@?mkrgOwcLC`(z0)qa~L-J zVRJnU9;P4KrI&FbvW{~}s}K$)CmRYFc81`y6qQ^13<;1J?aA?W!_D=jmM3F*PXUJW zWOpcz%J@$NDmvpm>AT0+2)e-{r$y7LXMr^#hiKNGahDQnnP}c_ORd>oXKou}vrdoS zP)?Y7MZ8Z7F;LId7czMj2r)<|4P%+#nk(Dg-F{Z`=QZcU(tJfN>X7VN!~}of#1fiL zdaW!@2fc5&@T_g|%l(zdEE*-T;hLp89*u)Nn)aVbvGYcC{B1&;xh^F~l}|hBW2e^} zRU7WFNf)0=A@H4bdRjQ%2>e}&saMw~C$j1s4C1WkY(F-+?f(qv9zu%9RJ5ZHq0REx zs%PBk`v_8>nlh@zy7ToL|NI_l4>8~~jC&b^u(#-b*oEChGheB1O*K+=5b#wDl z@T-NkUrN4IQh|{u2S0oELEy1#iU>5CT;f9efbW7F=T@&5$K3#|Zt7?b5_`ErYqx#R z1Sf0AWh5jP=Cz+T`---RB~qEBH?&8(LU|qC#KW*@#p_WA@i)}d3iOmLV1mgUM?*V?PP$pAbG(;_h za9a!Sdr0qxUKslAK~vq2Nu{ZQEj}5Fwv=;$+i<42# zKiF2pOGdAIao{B%hz`tg2)vQA^nb@LPs_=RpD@)q9V^6VGElo@RQpVlby%i2FknhH zb3vAZ=BY>BQcdgc@y{8EhHBI*1=)^eSJrh4S4hVOe)Zcvog6bV@nS0*(shSvdoCUE z+yzjdtSYd7^~6WbDo#7C&)pctyhJ5~m`crBRpQh&#n9VJGZTIvdvyAzke>a?6$L3M z6qGLndW{#6V~3vL<4|Bk!lc|t?BowO*g9&N&B!fqH_O(*^+O(mkM4@?EzT*XzE^yy zl(8WZtJaL?*Cn1YT+{*?S5fadm-ePr5M-dX5q$Grz@nhJT^tN1!V>{ioVY6f5TriN zH8a7?M29JLn)ws75WSz4!A<2u`*~6QKlZZcb}nUf!9mwuGm*Gok)X{vfi=i z4|%nR-Z55Yb?Y}t-YF>AlfoI9KG&99tjT_LI77J3JtGlKv59MJHr?tAcK=oycg1KD zX@Faqw`&v1h5UhTM0Urzc&=Q^f|EWoG>~Hc`r5MQP+2|eqGwqp{&mHeAP0h~3%eyB zwm9*;YVHGdyLxezR4wci9hyhp@PSje=%NTi&31xb@C+WQNS?!pz++XgLuEiH! zM^OW>f!OFd`M-Ap^}~>Dt{-HLntH+%oPH=a7DLuj4Ro*e0}-$1%Zzp!|<^zG&?W+pdHS$!I?W zHWuM1pFqqoAuj12aW6f|xG3$N-7OwMGeRY9kJv@=>aOi6S(YLiLLA}{J1EuiSHHk7 z)rP6-p9s~ajxbu^^fdDck#^}cYj67B7332^EAlec33#@O@kveuH<;_Y9xiLauwWgp zRt0+%5RdYO3A*TGwx}w$5n2b9p}%C!$=8B9iO6ejqg5&&I#37%2&$N>sSm0Ss8Ksd z+Z^DLFTu2xzcXKOYu)!~E`8x^*GmSu;Os3J65Z+>_9BU%vA0M=)v&e&4#c%Mh~w`$ zdpXU@mwcsx+^?%|6Aln-pD+v4hc#K!3;$L!o{k!RVmIFv_)S_1z&8o`S@*|%77LdI zomPlw?jq(9A|r`Zx3PokKZAaA5SAKP^A!#r2-)dx`IM_JWGqIZWaymH-qq1WH13WSj$7di8%B}C7JH#9&L*|zZosRGdW;8c3UH6+8p7$X*)*oMY1e7H^D*z zjZ2r-oq_v!JP#~j$4H2we?R0s9}DKDl?$Pt=Hguk(Rycne*K$CW#C#+W?qE}K}LMM z+feFqAztFueS?+jQ5@&^kLrL8oxW|Z-dHpK&7e+B`VGmFH3sDwbjz4?Ez&oogTV7`m!OcMN~FukO*_WU@!FN*XThPU&2}K?zi|A}=D2 zLqkB4&W*DjQvck22ilhF6%hG!LtsLmyZ-Wv3MdbcKVMzT1&$9fT8a!CGcgYOa+#2B zsPJ?8c_RT>N^_Id*s~S~?nl2nI>c=H$-y#mW6F&}owq~HUba{bN`)9r+{$k8%5v+b ztBkUoFIrctbVE)A9gb#d?dvpx=D-2xa)asQ-A`Bxvc7Xa+hyksR67lyUH_nhM@rN@ zc!nEe3S}h`wiRmnVmUoEKW4r!oZOeJ5D1t2W$EX?+Tn*|LT_!5pu-M^-n=@E4ch+u z7#*lwBM<}XA5*6J(7@FMB`%6_FD5_FLQLtdCkX}G)%w4 zfw)N$j6Avi??hXhg0F{YVRJ@!#id=_^8;aPf|XAb?~59{6hqt5uXDA?3_e)F(`0<@ zY%FZm{P_OL_!fMXs$wO=4&Dw=WQ7SCSL^v3_;H=(snCSm3l%LSij!$G8XA`-Z20Lh zr%gI>8Bze$YWAh1W@FqYxF(1-_BQV>kOz95>An#URgWTgxteAZ7_2fLh*Y*_!5Mvl zpjUb?@Ll0CPGsXY5FjFrzvzz$hdz{2FJGy3_aLH48A`&U5El1D&KDMY-vHzC^@lWm^%H#5S zyf%s;>4s%V)-D>)8!Sgg=64Brs)R-}p%JKd8Qy`jsjh@n;MUd~%hIWD7}^h2iMEow z6$W1Gt3TQrKF|pAjEJ6<^zyPKC|Fvu!m1Wi;A-uNM^#%~J>aF4GCOT!T=KgrU`1*W zIPi1jH(E70b~XIyTI~`g@l?t8%Hw<(zd!#oSAl2tCcTt5xLEHPVsL+4r+9z@$qThY z?t2c^Zn~|iygCz)uxTA{N&r19{79RW%1 zOc#1j#<$&drG_rdc0{o2Tf_r;DvAS+i+ijCFRj0|(N@)Z*A*CLHI;9}e@R#uUC-Ba zyV?SK_Qq=_1z*B;9_8DXCUrrv-_6xlv7ZAmE0imc7WPx!qpWQX-+}#RqarHvS>H?F zFxCapLmAV%5ullX?lD|$p?I0>%_N0>;7~+5<-3%~0d4Dzz(!7)+nhCSe2|00LIppU z;p1X%8o#OUWd-Z;JJq}Ge0LXb*n}qh*Mh5#DtDn?!St$H=ks75Y=g0u-kDP0-fKpY zJP&7M4?-$$QGCaEIg@0LyP)%J_LRKl zuEqJyujfA*rCy0J2V!+%)5K{DJ`15j1aU7@Zjjrqw3aLAp82JfOa(8+rkx|DSk}#p zH6+|55d?0#Z_6^r^H&%jLlxwB-w(^FyZyMYe8An6L}oM=Ad^!qVWO8?^waACP%|H; zH(2f7L(W2;-n}Y_DuU-w1krvl`&53Wiv()=SnLVRB+}mPmw30qlCLre1M?NzIH+k{ z;o@x)FC0y67a1WEr2E)$FTGa&sxMJl{MV|4G;)J$>U*yU)Bkx*-LYF>SYhxyJixxf zN-`_E+B6jLWL6#ak$^|1cR@GUYf#7ixVRCr@6cx z&!G`Y(u3Vfawf%OA76BZVh0l?!D1yw#B`)bWgtWiyhKY{zr`tye3vls{Okb^!6M=K zORi-tMQt#HcdMlN=|Ti=FRLUb7BftJa(p|*p++hV`Z8PM*uK6<)}C+`sA{q>Ae>2? z)1;jQN)CMVoXkuj`B8CK((|lkpG5e_Ww)$5{M^CLuQ|<2m{h`Y^sr!DR8~a9?tk7= zX|V+#YvRcZW~fTS{$O~38@eg)yWrAD8e;_8qbDL*?d2#Y3xV8M_Ed&~>5PU$E!UDZ zp?Tn|z~lIqPwz7tt&gVw!y;6l(fcKeJ|Uc`?I*o8?s$Hf4q@YFcUcInamKK`X?s53J;G zy2&?#1scuQs9Nn6aK{0RS!Jtv$$wUwx$rSRr%v}ZN4Z2hA!&Qc#~`c)5llp)X>*j> zgLWKRNy`TUr?jv~N-r{9pwGJyaX)k>2-ryy+e2*Z9zo)8$eEUMR}A{BOa$z{1zK5J zdGvK|Rg>9&h^lNtyw0)zOXq(_Ug?V%bU(p^DB>hmO85(;%%{S>Cjv`q@}F}3c<~vm z^jdEEFG z3W)njNV(&(GX8Q?bbkDX=$wc~EuY>AY&qGgDr;qDYHaJe0M(i`8V5OwpaA`^@{`6Y zmN%Gz0Av8GjR9P#M6R5RdN`VOEM)fY@uRuhmH_|oUZ7F;dHPI5s;QViqdG_$;!1}G65ov}S| z6CySyL%3EF)i`ZcsG9OE1HIowkkR(0(MB9thiKFz1e4*S5Y=ZZL3ZjFuNGl;g;c?Z zQlw%ZX=m)8$%@#O7)sZL#ab@jpddzqekf|neZ5#$;F1%Y?M|oY)AGc*doRC(*DOR} z(Z+f8?iZqLS?<%9ZGbm zx9aWq?~xP3Zdx4wEiBEX{TnYyz|)g3DJv@0g-ETAPivlv`}-d9mdOIMK*ibKK+i{ajLs)v(NLJfaC2BPqLeqO&+DCIs;@Q{`O^ z9bTa+#`$Q)C|ewc9wp?Ypjvxs{j~V=zp}pXO$1cOKzK-;pmBLrn7^;oZCY~*k0C(E z!M33zRZUtUjF139S|WL9MfOzeNthiz??>|#!T1-^v?-Bf9SDbaGJOeHYKcWgC>wCi zD(f-!JdWt~ON6l1y;YEw{(HM#Zdfj{ z96@1qYuEI6;_&07`6g)!(y*$4&z~O8Vk!{ z%u~mfL%N(lSVDy4i4*R4qrJxM*>MCE!wta;zP&_ zl;HuX;BtgzrJK84+}PPE-!{$S;;y5?7oilTMy54jXkp0`{6t@7@3dXM6o!^WY# zGVK;X&$3I@Cyna}?a+8Qo|hJd#F{V;lpVGCJllh|J*lYwrwhxa?F;K4Sb1a$-|1KX zOe)@T5$hJhx4XXJu#|qg^=1ual1E)+-F5rSOED#{o&n)&GZ7W#O(;q85Fwn6Ot zitj zLzYI8IHZv!v(vt_>J+MG$#o<@1h@HBGaUcUxH(0t@RNA;WUXlrU-K?fvMl!Y+w|pJ z((5Yj?pVTyPqY@^h4)_WYEKe6%X;34u<=8v?NZfh-@c!=$re|JF-Hc^eR8oLUv^`j z5b0b0C>B6ERO=#Fb*%THn2UZvspNT$q}SR9`u$($@75Cuc)a&iOYT8z+2zRYYGJ+3 za+Yd)I#m(--O-gfh#cnx`gu2*A@MC&0mY~X0n0VByLac_&~P20L8p;De?nUNc{3gP z=Hm2+%ttI%Aj+vXZCoag%D7noV$hfPwekOW{;3BJq|c?59+9kQv34iV_H7y-TCC%V z?^af7gK4r;Lr57iADUDieBVEm7URSR zn1j7-iR9zA`rCv)y$N`tzdQD^qyy%{NHgEg%RdX{-Hf*kRo?jibWDfe?eu4`1K0N` zUWB_1W825a3gAz8S@x{eMC$I-KDa2EW!BTBu=t-WtW}nED$Jz=WM;dQy`Q0N9 zo@Ba55m-W8~YdHvrLB8G#X0~YM7l`Wj=U0t-SD(-$zc(b3}n%DiV zR@!$rDaO9W7mI>rdkY23B215}d~?J%qp^Z%LJ~CP-U>Ix!3h04fnyd)Iru#>@37^2 z{Ju>sqCrA^Gd&?{1wihm6%bDFd>oo2&&5wynfXBu)T_H;SP6tRi_9pS@p6uJg>h?GJOT`mnWU;EtgdZzzKpC5F z`75LZJxXYNY@@p}Y*_K=^hocJrw zr84e6x5z&=A3k&rNsmPbwmW718=ZvIO< zdoI(0SWhzadZGT9XexK^%-8qc`@xU2WP2anKWM+Jpxz$)_7u0bad=+gJ~uVuQ}#|w zgwI`zq=A2@8)rt?KYE4kFE~rqrLNgXw#=qC4p;ym6Z!0Fy7?90a_$9xes9)DgA9Y3 zI|^%2fO~fAQ7Bchuvv?xe4S0e6V#Tfkj>P#h+~{5`J~mh9NjwW#5gx?>l~&Ef2S zC;LBEaK2aJDL%mH>T$z0M)kr07n*cSZ`xYnnl4r-|2Xr2%;056)4{E3Od^RJ^lmto z8bMM0okuvYxOm`?r1!Pi&@V6K_#WNeN_>=1q~%{~&!8~#i9$2xrb4it>4S4n{QQ{s z%Kr}>0>}9LEMc`mi1739-P3>MUKl&~Z(3hKDv~_V)AV?F{VqImb!vP}2EopI{NuHI zj(OWZ0Ymjbkk5W z5xdX%pD+GDU;KYo{C`$F02TjVveoB5!9n)BG+Az)b$TryUbR?@r=Mr9Noe@+Z};t| zz9rTDO|0+csyjk|Iw`fB7+}pCAbXqdOlhiCyG4Yw_1CKgvv{||OAXYBKz?eJ@;I8a zdhGS|p31CHVY*uFIk!H>v~p*eh`m+fbnper*h~~Y<2kR$znSqK{>Kv+^)2cJt5v#} z-*{u6>m_0Z#hRu+oP*R18Tdfry5w8Z+IqC-vD_jtW2V=<{X2Iy%ln{U+^j3dOWL-G+1M8J}e$8a6SI%-= z*s@k)R4rUCFcY|?DRvUnW^B_Uy$3Wu2RR#1U*Maw#a5@JTl$o>h0gVTqHetj@LsW` zCu!*o@^e~QGWG9AfK}b>nxEPSxxC3BV=e^*f{ku~0BLw$3j9$M>ig#lvYsy*z~5CT zgh3ml09OSEV4Qj-$azh^=5^qh@z!MKzlY~h0y8|_v<{K=3(+FTZU!IAYustSdE0A{ zvuP(%C{#N0nr?)jAMb*~s5cJ`mw=CaQ-zP|x;(wML)3nGxDF75rwMFM-MpXw+Y6w` z2NdwI6qgw{)O9?N^SCJ`NMSwNUFW|C#tpo50NFfggcNMaAZ&6B2@;Xv0PNxcqarHT z#!B^T8yMVIp$^0H?5vxMwIGWUb&Zxi1)Q#Ot!LHxb@I>03-DvvyrykhFOW$s2VYA( zuTIBWk^11@hFcB*FH6P7y~)z5oFV)>9Z2!ZApKRjkA~MMa2$M2$RzL=HO%^eTvIr( z_bS_-o(%d}*MPj-lBR1a0CgQvc5nhRo%n!s!Uxj9bH~AhqFyU_m1mwWvPRP57PgG>eovek$`XgxO!vh=L*QSE}A^Tr?vHU1HZ`Q<4FL+dD{kf zcwHa-m1|e4*j{n#<>_*5>xETqtJ)EWQcXs>t*($OaK?>nVt#nrfVS%rZ1e< z`*ZWzQg&;V7_@)2rofy|g(X}+YZ~<4K=Q3~8^hC#YpmUDg!b?4cQA7&3k9PLYfg4y zVm$R%eP^g+yM=_-?cFo62JhBCp+v|L(!7D=t2G6bZ#yos>_$k+U6^h=ajJ*P-im;} z+b^BNq(bDQ$r7V``o_DdAl&zCVY#J$yYNIi%i9Zt;Lo6RypX?_qmpLKAC=OPP7aBl z{j5~%&-v`w>}9rQaZ0*jvz+R~Rk?GEC@ro(n$z(%O49cqNVePSc>rW_w*66V@7;*h zy6f2Mg4mN_t!vjgOX;-YXxAj66=hnxnP?3*75VL z7{C~QaRWIzs6Xui6e30HryxWy!72H0XR~$|24=PtfCN&_c$h&%nK-}869oq(Z-^#< zUyvaEF$rycJ%z)F`#O2KoKiMss|CMu$&mX?=`~D7Eol2W`)bv?xa)p1V7Fiv;YZuN zggj>(mC8nG7vNpSSlh6h5@*bo;c_=_RG4^o2Gfdr)`85eOz&W&jt9>AlBUug;~t`? zt2tpA?eq_uvqGoym5L=Iiaars8Q~hg&pye_Ks|iFFQ^4!%;K^UmfrCw|5oMAp4Fq) zD=#CD%A50@Iwo;4@jm$!H7D1z5UhO=qyT5`P607zBD>nx^8>Ba-=`hlrPa1mi=kCW65pu?tu0pVwb>n^h`cd{9(`;g!H#m&e~51$`)$uJg@{IGI58@(Ji%VITq z4RRS9G~p?x4NpJrzZ}3%(GX@e9m)c*YfRQzo!jYNK1D^puiMS!BlhO3SfLrOUERw5 zI$fkFhqJ^JnFrg=2bn?+C;W=D*j|dWmtGza1Eus8X@1LbL-?O_TvXsb+XzeBD=&}l zZkNF;9zDl15>pm4sXK||S3wtwt>b328_^=J=_#14C;X0U*@P#?ea8=%=Mv~)mA6w+ z8@oU0^Jd$qPdKrc6@1R)Q;fT4bxn`fX1h5nelzJ_UF~gh(}Xe|oGg%v!?L({=m`J_$gmq(Z!uWON+va)ndeP{oqG0WMM$ zf>p-=^&8z$Nsgj#=oYx%u_+|+yCB5YB$!|lx>SO|+gL;ti&O-UEfdk`=Of2}Ei-qX zvOBFizgoL?Y`i|gA>xdMnD%ta5_(;sY`lMc8g$__Fp)Ab-0x|JgosfUtnHzZUJEp{ zaxmLiD|6K zv!po;17Nh(#9@<-WK>CTF3^PeMsHx3Kovex@J>K(=kv$-n}UPTTr?hbFs=}RsPz{m zk{C4n{j{ zPz@fX7P6c|xC(N7q&kPb)G+(gxfOH}st9B&KvdbLc-s%wCc7;U4x{4jE&Z|f`vNtP z?7zf$)9C98QanZ|2ksCf6}&ydPFyFtmlF!I4j9{rQ_W&E-J8EAIGt{e&A?)&_ujqU zP{+6W1Tg~rOAa5mCHlqmlryB|JstP<+$>#_w6&#x?lkV!_oL|dQP$-5%SQtXt?ag1lsGSkuj`HbkIvpv5xA5+#I2~z?9c+%(Vm;w*(X@h7Ci1rM9e zi;%=)vU%gC;muh(N~~*^l?^81%@Nvq++EZfRdc-c`#rw6Xx|U-4&?~3ANOy+@6wwg zVr_e}uF#WtCmx^0-IJ77+~{h-p^}hE>{7|oId)xl_Qu&AuH(5<-@4~M!;94V<4^m? z!UvxG?F3tWR;(zxkr^NJ`j5+XZiiLPIN}`aw2GNoUL4q+)k0s+U|muzND3D#}U;RtSdq3DNZl@zDRrpE=<4k0f+76U-v{%MaR>3QNlid z-8{DYGD=?ca7**0?5%#J2Rl(BJk>3arQw#U-UndRe9Jwgd)e}57G)&DHTtoM_Y%3g z+)%1(R?}e1QMsCAHifLjOBSP_VutpQDAahJU;g1GP1W{swD`A~io0Im@;l6?po$#4 z44-&mcFmSI-VVSRT1BRlJ^vQob~-sf91z%UJ#QI53R{bFyp$+kYPcxjSJuUR9Cztx z(Opuiv-PisA6XzrlPs<7jqedjk_P#l&vX+$eE&PE_=EMuTrvCrlapqY+>O=$W$HS= z)yTx|nH5FIF0GP7o7hUa!}8FRPpXD^l81jaT2J3r3>kI8NwtfhA=Y*Q^?DuksG}** zvf30V+cR@$$E_lyd)N=+j@vYBayn7uPAZgLcVRj#v*o_!oAE5ii9h0Z?ZFr@$2dN; zt1T`$ZQbuz^NIX4KW)7C(|TLwA=05H^YH_Wo@Hc4*d=#=cVSR79kz5xhz(=vvlct* zecDKS#y+&tiz z8ldz2)$BTHkmsW_UYji8QE7}Ro|rW=_-bhOaMqToo z(xhMeZIu5ws#!g~jf2!KZ8C*t7_0M-H94fbt<|nxPfN;j9iKWFOhbNKdXZwr;8}x@ z4WAj>Pv!Pnig@s1Q0zRN+65z6Ils)o)|CvwL5@mHHPGlCZmlb+w^Ffx@6}C~TkJOv+suTL?d%!~`Ddoa=~}&U7e=m&`O| zrQ^)8PgC=Vg^J7|{FDB-Nb@M&kd0#9tPAP#=2g0{A${LJT{v$)t7`V3eq`ffxi=ey z!P=bOA9%0(jrb{i|C87Cjw40fJ{Uasi*3DB1WYHnFU#BI6Q)d`l^As_`Nr)0GejXQ z-Y5YSh8+anPkW$SelyqOholSqRLTMU%Ptd4ZjgHT!$tY!^l@;QeE@?%#wxB)x6g~K z`ljVmF2?Xb`(65f$pbx??#6Q$4m?@MCDZgd$YEd&OaRbwS)qIgo%1_#8Hz08%QVPU zLChfjm%C(6Ke3q#C%b|q%bX9H9WURHu4vVb?OBZV;Xj05Yv^Sa4Upj^NJ?$0K*Ydt zrhL@|%uD|^h?`S+>V7Z(Qxs^7YQ3>6);wSb$jYyRtkhQ2p#VR|!?;nb7x$I29>#>+ z)MWbw1|~pjE2W4N8N~k)YrjW=o>#zoLALV3X)^7`n08tAo6M`hgOzAlV^^IrYdv1_ zb0Si{3wRnmbzX0TFp7Xj^Q^-~zJ$*Q9Gx}0Sd?dpXKmxG-g>>d_2mjD^HUH<<#Ed5PP-GZ3`riWqD0+9Q0=p z4>B)hR6q=-U?UFR4(0>zd_NvtqwHZ*pI0FJiJAIt*%qbRAAozXalp#^+Z%2TJv=H) zA_9&gKkK>`cRVVBT2bymV``jR0>tI*oP^O&qX=#ng+zt+RzpakZD<0osnx1zXKl7Y zX~_yh@rqiN$qcLj;xYkq5$D+3$~IOKlLC8lqHM(CR0jBS<~3a=9%$cJW%BLV_D@6D z*H((^F61<0Z?%Or2y!wOdB0WT*iR$iS(0nMOAW%Iq9ZLIXIFf1YSp#gexrTgPsJ_2 zl@gn+MJcFH#Tcfa5;Pyv8riRQJXJQv=*S;!IYNGkXm=7eWxp@z(V{|4q|deLhjW=TDfVJWW&y_3CwDd#|JQZJ^4XO%*=-Mni}o@NaBJ|1K*;CcIxw z=9n_MHo0)u#a1=k$^Q_?2fsJ^*X+fXi~JoU^7RLord-cv@iL1Uxx( z%9dpa&vbJRlSIKJM{UW2z$v%gAC&B>RXZtV@UlyCtK

GF9AVx*;qc=0i$!S!iQ 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�NB-T_-@V)>{lRwX6YrGMJSBVM@gK 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�%I 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 E0P9)%rvLx| diff --git a/docs/getting_started/index.md b/docs/getting_started/index.md index 4f0eb20..d8d7bc2 100644 --- a/docs/getting_started/index.md +++ b/docs/getting_started/index.md @@ -12,6 +12,7 @@ any questions or issues, please [let us know](https://github.com/flux-framework/ :maxdepth: 3 user-guide developer-guide +tutorials interface api ``` diff --git a/docs/getting_started/user-guide.md b/docs/getting_started/user-guide.md index 2ab941b..b8808d0 100644 --- a/docs/getting_started/user-guide.md +++ b/docs/getting_started/user-guide.md @@ -23,47 +23,6 @@ You really should only be interacting with a server that doesn't require authent From here, continue reading the user guide for different language clients, or see our Python [examples](https://github.com/flux-framework/flux-restful-api/tree/main/clients/python/examples) folder. -## Container Tutorial - -If you don't want to use a command line client (or you want to do a quick tutorial just using an interface) -this one is for you! You can run our demo container as follows: - -```bash -$ docker run -it -p 5000:5000 ghcr.io/flux-framework/flux-restful-api:latest -``` - -To start the image. Then open your browser to [http://0.0.0.0:5000](http://0.0.0.0:5000). -Note for those adventurous - you *can* in fact use this server to test the clients below! But -this is not required. - -1. Go to the "Submit" interface in the navigation to ask to submit a job. -2. We recommend something with output like `echo pancakes πŸ₯žπŸ₯žπŸ₯žπŸ₯žπŸ₯ž` -3. Then click on "View Jobs" to see your job. - -![img/pancakes-job.png](img/pancakes-job.png) - -And then explore other API endpoints by clicking "Docs." And that's it! -If you want to build a similar container with your own software, we recommend you -use this as a base container, ensure your needed executables are on the path, -and then you can submit jobs to your heart's content. Here is an example: - -```dockerfile -FROM ghcr.io/flux-framework/flux-restful-api:latest -RUN pip install pokemon -``` - -To build locally: - -```bash -$ docker build -t flux-pokemon . -``` - -And run the same as before to submit a job. But this time... we have access to generate ascii-art pokemon! - -![img/pokemon-output.png](img/pokemon-output.png) - -Yay! But seriously, you should like, do real science work. Only dinosaurs generate pokemon! - ## Python ### Installation @@ -354,4 +313,4 @@ See the [examples](https://github.com/flux-framework/flux-restful-api/tree/main/ ## Go -Coming soon! +Coming soon (or sooner upon request)! diff --git a/docs/index.md b/docs/index.md index 74db8a4..a11475c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -27,7 +27,7 @@ Would you like to request a feature or contribute? ```{toctree} :maxdepth: 1 getting_started/index.md -auto_examples/index +tutorials/index contributing.md about/license ``` diff --git a/requirements.txt b/requirements.txt index 3773e0b..1e7eee9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,3 +8,4 @@ jinja2==3.0.3 Markdown==3.3.6 pytest==6.2.5 pyaml +python-pam diff --git a/tests/test_api.py b/tests/test_api.py index 86106cd..58e5016 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -3,6 +3,7 @@ import sys import time +import pytest from fastapi.testclient import TestClient here = os.path.abspath(os.path.dirname(__file__)) @@ -34,9 +35,11 @@ def get_headers(): # Do we want auth? test_auth = False +test_pam_auth = False +test_pam_auth_fail = False headers = {} -if os.environ.get("TEST_AUTH"): +if os.environ.get("TEST_AUTH"): # Define authentication in environment for server flux_user = "fluxuser" flux_token = "12345" @@ -46,7 +49,32 @@ def get_headers(): test_auth = True headers = get_headers() +elif os.environ.get("TEST_PAM_AUTH"): + # Define authentication in environment for server + flux_user = "fluxuser" + flux_token = "12345" + os.environ["FLUX_REQUIRE_AUTH"] = "true" + os.environ["FLUX_ENABLE_PAM"] = "true" + test_pam_auth = True + test_pam_auth_fail = os.environ["TEST_PAM_AUTH_FAIL"] == "true" + print(test_pam_auth_fail) + headers = get_headers() + +skip_if_expected_fail = pytest.mark.skipif(test_pam_auth_fail, reason="Unix stuff") + +def test_failure(): + """ + Test failing auth + """ + response = client.get("/v1/jobs", headers=headers) + if test_pam_auth_fail is True: + assert response.status_code != 200 + else: + assert response.status_code == 200 + + +@skip_if_expected_fail def test_submit_list_job(): """ Test a manual submission @@ -102,8 +130,8 @@ def test_submit_list_job(): assert not result +@skip_if_expected_fail def test_cancel_job(): - # Now submit a job, ensure we get one job back response = client.post( "/v1/jobs/submit", json={"command": "sleep 10"}, headers=headers @@ -116,6 +144,7 @@ def test_cancel_job(): # TODO we don't have way to actually verify that cancel happened +@skip_if_expected_fail def test_submit_option_flags(): """ Test that option flags are parsed. @@ -155,6 +184,7 @@ def test_submit_option_flags(): assert "id" in result +@skip_if_expected_fail def test_job_output(): """ Test endpoint to retrieve list of job output @@ -184,6 +214,7 @@ def test_job_output(): assert "pancakes πŸ₯žοΈπŸ₯žοΈπŸ₯žοΈ\n" in lines["Output"] +@skip_if_expected_fail def test_job_query(): """ Test endpoint to query jobs From ea17b5fdc5cd25c9be5e6bf42168675e8ea25883 Mon Sep 17 00:00:00 2001 From: vsoch Date: Mon, 20 Feb 2023 23:45:10 -0700 Subject: [PATCH 2/9] reorganizing tutorials Signed-off-by: vsoch --- docs/tutorials/container.md | 40 ++++++++++++++++++++++++++ docs/tutorials/img/pancakes-job.png | Bin 0 -> 70862 bytes docs/tutorials/img/pokemon-output.png | Bin 0 -> 137919 bytes docs/tutorials/index.md | 15 ++++++++++ 4 files changed, 55 insertions(+) create mode 100644 docs/tutorials/container.md create mode 100644 docs/tutorials/img/pancakes-job.png create mode 100644 docs/tutorials/img/pokemon-output.png create mode 100644 docs/tutorials/index.md diff --git a/docs/tutorials/container.md b/docs/tutorials/container.md new file mode 100644 index 0000000..d93774c --- /dev/null +++ b/docs/tutorials/container.md @@ -0,0 +1,40 @@ +# Container Tutorial + +If you don't want to use a command line client (or you want to do a quick tutorial just using an interface) +this one is for you! You can run our demo container as follows: + +```bash +$ docker run -it -p 5000:5000 ghcr.io/flux-framework/flux-restful-api:latest +``` + +To start the image. Then open your browser to [http://0.0.0.0:5000](http://0.0.0.0:5000). +Note for those adventurous - you *can* in fact use this server to test the clients below! But +this is not required. + +1. Go to the "Submit" interface in the navigation to ask to submit a job. +2. We recommend something with output like `echo pancakes πŸ₯žπŸ₯žπŸ₯žπŸ₯žπŸ₯ž` +3. Then click on "View Jobs" to see your job. + +![img/pancakes-job.png](img/pancakes-job.png) + +And then explore other API endpoints by clicking "Docs." And that's it! +If you want to build a similar container with your own software, we recommend you +use this as a base container, ensure your needed executables are on the path, +and then you can submit jobs to your heart's content. Here is an example: + +```dockerfile +FROM ghcr.io/flux-framework/flux-restful-api:latest +RUN pip install pokemon +``` + +To build locally: + +```bash +$ docker build -t flux-pokemon . +``` + +And run the same as before to submit a job. But this time... we have access to generate ascii-art pokemon! + +![img/pokemon-output.png](img/pokemon-output.png) + +Yay! But seriously, you should like, do real science work. Only dinosaurs generate pokemon! diff --git a/docs/tutorials/img/pancakes-job.png b/docs/tutorials/img/pancakes-job.png new file mode 100644 index 0000000000000000000000000000000000000000..7cee67305042fc9493c4438a9713e3cbc0449778 GIT binary patch literal 70862 zcmeFZby(D0`!70_AgF+pG>UXfH==;Fw19-tEe+BtsHF4&!XVv9cc_GPcZ||K(hYl! z&-?y<`<(0A&-natuCwnoJx97QSBI>95SFtdSMb0@Of3O~I zKRle~ZunT=)>YISPBxT+WDUX5A%7s8-70@b_nFW6M#_H{{J({S^{D-=EG@qiQeJNC zrTxhXV(PI!R#%VmtJ>}pPRMCRgA#irTv(`(@&%zjQ7QlC0!;N^W+$+vay=^l+~VTC zG=a>X9>n3_+0%ci74FTPWHA;6Ma3lF#8ambbne_8Mcn3?m^gmHCO8pl!^9zAeq=oN zW?M~LJMJ=rPRV)m19BDl`5}X)JFf&Rxc}a+|5``D5~g)qSQs$wGp0b};G6#PBSz|w ztb+Qqn)4&^KYGI}%(ifHY7!C>Wi+TJmbsf;2x~J=GqH>EHAa-q1?)k}xO=5|7ov1x zW&4`1t{AVG*x!cv4}Mr`8#sVq2V1Pa^U=w#FUAxeaf%F2J>-5z_Rp+V;;^#lGuV^iOuqjSr& z@bmw_E8rDwH0W~MSbHO_QYe=VWm?gZeVM^0_EWpQov3Qx8qN}5t<|TqVT*s@uBr7? zA7C1*ADNvJ5~VdRB!y@Va=UZsJ(!g9c@Ps9(=x;6O7be9F8 zLxygAk3+3%B85QHM4!GygStsoVxm-wek)*glRpRXn#(at8UDsH{$+S7Y;<5D@rIBr z>JJ?EQSVs~=(1b&9y<4?zwK3&n@t@8c3u80lg!@=+f?xnV!JjlL2Awhuwy!X)Tzlz zIeM}HWcNk!)1UuImp2_<2uBx`mjAU!D@HHA9B(g@8MPUDA*l0bcedP@_BC~j<& zP!YN~8sCzW3=R{Vtxgpe6s)GlGQKz-kaHZ-(pk)&_No|p-Y0(e@#o&qapUEz*Y>=D z@5f8~y%nDAy&=`soXGU&FxVCmTXDStPBWkT81b)DhX!qp=9L3lR>;uBlJ?!dKhS`$ zn4C2WbIdF(@4w+o-T|>Y``F3Az#t|zmW1z_7nX4rJO&UtOY_O~3Y^SRo zo7S6v>7&PUO&uN8-NghfU)cy6>SdU_;Y9=NV#5NR+qq5LB3|`l9zaiQ(&SNsy z8gCdXPsFsy5$ZN+l?~;7COz#lX0Uy6ijdQC)!IWe$=j9>$ST{Y&Y)YJ9c^!~52++Q zyA-`aLv?<#Z^OUUjegte5?}0vUp-J>9{Y{zC)Mp=2OMU6OFFWWmIBhG*{yAC=D%Rm zzI*m9$c)q^T``{1v+I*)k9lrpob~<%CDWtzkFHAzo*_A5rw&wO23`gm+%Jr6KYzJ0 zRKSxTEJ$YPai1pYq?Ie2)ZeNsKT7#7WGF6i=?;oB>}CG&^@c;kvAJzSk3dNqg-wez z9tWRBkTeE29!LFS33w-4Ar;K~#7gX_8Dqd^M9buG#=URZ;ac^-3w743TgAIfJd9t5>Cfme?2oWdg*;+}{(knayit1fEQnEL{kiF?EZsCmY(4mpnX2sEb|ECgt zx9i$QKKnw4)6UPoV3CDBxFPJ4$Zt;SFaI-vw@-+k)W~~VXywOiEaSnoT4mTY?%4iC zIU6jXuhqbPmRyd?)08I7@>+9-^WW|-zn+htRvoctKJTxoSTo33@1_*Vd?DZn!h-`B#n?f@IZRa-C*7@ITOf| zPLl}ZrKOVgr)8joq0e;v8MQJeJm$lIP<9lqHkW5+)u0G)sl0gJI~`2hTki-xrREwA zXS*<1r%bh;2~cv=S+MXy$`HP%ZNY3s!w>Z|G>Eb2s1K}?0e-pd5Dok}%3&rlk1kzVoTj|C#VlRO^3 zRE~$~<-$WlxN4cNn2rf)L9E5pAxrx|zh&!6R1~ejoBRy787n+afIFEJjDLC)1N(aL z{+Lk{N0naxQxjRgWTV%6(cS7HSrgO@(ccSs}<)oFGme$DLIb~6kMDb23 z{Ni*O*3$z~%G*|2c0twzxs z5=TFdwo1F&V3*!rXQ%MXaQbi|CyH!Eu5-J+C)IKr34siQJlR^ROUn=?XA?n($kjML9L%is z)N?I2doCkd)qahJ*KK252r=!vTPZ$-Z9KYJWv`K+%y-P&Cl-xu9WJ!<{fYN>>r_3u zlHUBA`G| zk_Glo$~(2ZKW0Fdd#^hHn|gR{=+T$VF0MNEQGLILCno#+Sqa5Ojhyz4t4k}<6}FRR z@di8atIbMs5?qy1*82u(&6w!iSjOZEr~<6akB`p1;elj&LNALe^=6mM2Q%b(p0~X7 z*r&aGH{0MPh@~$ZMnMw))Z1|np5cd#i=pJajQHh9&wz~oeFXlxmOle`SeZfI;WVqT z3euTit+HdcDZ8pOv8h^gr9@sWVR^fkz8@-X6(n{s zeIxz-1Yq+rlTOF^yY%7^@lk9Bg*Zu~)L9I=3*kYVMXOhMH zmBdZap3@(%@t2(O$Gvy85tmzah+qqtrvN^0rj6J+kIPEG$MR;?{2L!9BUo}Qw0fo8J5*~{3r@t5dThR58F(W^5JcBc~wosbr z;#uc`l#-XQ5tC?T!5$2TFgc1tu%s3pBVUq`y{C5t;NBq~KaZEw^YW~NAl+!#R0OIP zT1K;8hcorhm0%;M3tv8Tc6NH#KF2hcIQ#Ls`ZT4^WMP>;y{L%OjY>@DWPg3kdH`wp zvf&iu?bPnxLr?$8JFd}6h*`Idw0spO4fkC?=;~2WP}p(&9WH1*kA8aW7799#Y3^sX z-w}VFTrt-1RW^yQXJjz?(G3fjt2TRNpv}RQ-(`Zz?p7WB+{t>8L!Ko)gqJ!RqU5TG zkc89!eVze~ehDo=b91qNw>M1YCHqZmDvuvxpXv3XdPu}0JuU6dB?}vyjddSCTV~Wi zx}0DJv9^L)&ngc%f+ZJ(9ghkYwDK_@HY)F7=@+0Wyf~s`6oyQpgBlL>u1z|&KXGW- zpY)^G{`kATo2L7-is~_Dfa84IV&Q9b(KO&oBn4(Y=C!NnS-%R1p2vV!yZ}Jz|33;p zJB@&IUL0nf{FbH}tR)=g5k39gqM|MI;)MLTN-h6>*F9Iz#5bhjSeOh(u~E z#%o4oWqgv@GR$QiEoM!wqbwCcrCD@RsTg=J?;uLG5-gazW%!IOIu+N|1mlx#$C};# zDATDp7qnQ5+vM`&ZF?>uN~mEsNb2p?=5ET5Zm4kp0=oWLfK+XA*o&i<9V9@21YjN- zD$%GHfr(QNFncAh5d8=g*$6WAOI1dq9Wg_us6~&4zR3Zgj@h|U)P4bnz)}O?90H4c z+D3a0Nfou}M4Oz;<%CacJ8gfJb5%IsJ4@4YF%`3vn%9>VRF9xDb zT6wukr9Lyc_)C`uW@ct(7}+VApFZ7QTU$#jFQ{+m>-z&75DlIBX{!13xY!v;(^*(p z5;n=JgdiG5MzFWW6n=wn4equ-F$Aep26UE{sJw=ZJgzXwRfNpd=8WrE&0WKiEN6Eh zLs5#$qJN^D@^n}R6c4yrjs}m0KB@qSK0}@ogG=LbV*0tS>K`bJl(8Fn*llR;rL9T< zXp^+Pr_686xfrCX_@h<@A5;JMR!&W&oJQZ!8c5!fcD(+;uF=q2i2)X$RaEl_Krm)7 zC&1!ep5vj&UVocCu?8>`XzkJ;btr0q!x(tafim0!lX|QK?E3jyV$z>DmlY%y&s6yb zU-g&bK{h*bZS4O*Y5{4$Ul1pc|G`)PBjEq?0RI~aII{3{)W2r|{-e$R(dNGlIrTs8 z;xA9hTq~82!F_oPPEgk%dAqT|?%he6!x%c|q;@J_QjvwH{569{o4rC-tErA2lxYwy zu}4vsgzw3h7O}T#IzQZ(mw%c~EDfEWQpT^}T-V92Iu4{R#BII?drXTln?kUE38Q4T zVzzZmzY0*$AQ!}_;6p2Ud9hlju_q0AzusEf!(Q*B2v(^kI2pgX+~`FtZkVhc9v&7A zSNtGQ%17t+naz2BIV_9Q=n{&Z%L|iv@ZbTvmhR1OUOMjPSC&;!1ZihAxaDwhNW|gx@b#=`)3*krr_L1a#3lTiN!`8z9}@-t$v0r|^hRAQk5~x*wsCOR^U7 z(O53zqe>P&)*la*uyB3+xo@H|muILjZjU=;R~gtWDq9{DK)f_ZB2#AdN%do)|Obq zY9-q)pO57zyJfy=)c^kDz2H-VX!{Fg_FpZ2JH`CNW9=F1eGxnRRqskA)=BSa zg;GxoQe5oc*EA5~>l8e`e;;nw@uS22QX!%1hgvP*&Eqa8HK;JjV?gn2}zi?Lp@>CY53*DthL329I6M+whl zgASqsIjTdWHb|w%G&YY_W!{_YAwz>Y*4Y!NsoxxF^1G+d*_kEW9@G(?mXTJPx@%ty z>E27Swt|>{oser;@VX!{TerXI$|XrMb9tf?!#dfi#3v?U!loD?-#2T2_nxR3Z zi!-)S)D`_|Sd;f4Lytv;)5_Tu6cndo^EI%H+w7~XV~WO^^0xtgu4QD-^!c({ zP1k*m(d0ZV^>5H(lMPaM^0P|=m3lr__i>xJX2>ChRsMP_}Ih63yEK9jRg6EqPu z+^p`C4vC1+DX%i-bCppV%gqa(Rs4xrSzn6GuA*B8;X-VkW2=%q z#;R401`RCs52e}GXze)8AFR;sBW}Q!L>H&dgz{8qZ-$W==M~knF&cU(4L4jk#ju}j zZq(y{T$&z=U!V06XEgND9zLH>c-KLc?y|_A)^$5u*0a)Zen7}*jJGK4y-o_vKB9q; zWC}rUz`L73&5PGO?04p?RDU*{O~rMPg{bn*Jp zz}!>Ys^ojt2;HkwEOlRZFs*qN%xvT*6(=dgt3YN{YlR)XRWHnV*~hPT35(d_$y8(~ zij@@RW38OYv{G`e37A+U!fhB2Y;1zDaeQc_ZE_zruV%?mYg|laK0i?B74HL$SB4M{ zl0|*|Ue4h-&mSgpS{Aa$j8n2Bx`GS4f`-4M7~8Xk+)f#=*5ivtlp&J{QmyZbBDbUgoVN{_8BY6=)8(HL4^LlDE2p+ZVbl8H4 z0;!>C;^*EyCV}HGlI?Gz55kHjQaa20d#g83A9hrcM%W8V-0SHl_RqaMe5?D|{589& zlfo>c^<1pQ!%dvxZES6u*kxT+Aj~1T=VJ{1wC;KlzR0I$u#9{;K({I*-EoT;0`h^3@X$Kq3bknlF`q!v59U@Y;t+PhKGAgMU%t6V1A zUavHJbSZb=q4~?OY*Tdyn%_TpU_EHO) zFAvkR9*W$-!!C@O(KuYPaTh+A%b_|elZGXGdw;@z974LyfU11tCJGq6Vw`p=t?T>j zFy~gaDrrafdO25+Mw;ZLr zhjse+5}K_$q%8XdUp>S5$!17|O>fpd*9kO}fVNtyPGrC$DcgKqf(5m-Vva<`Fc`>l! zG%T#kAOCuJMQ?y&=a0s1onpk-`xTvcY>wqpe?^|gWH`)1>)9)pVLTR4hYR=_`kuG<(gQjV$Wi5@D z+Qr0%9-Z>Vw?#GA4m(dAX3659pj(2~4l#v|hMLK4`+{&u?{;>&Jwune{Rx)S4rwWV zFZ-LBioSyC3~??CXiz>liMyQV=v;1%$qA&prAxJoZPw)!MwaH1u$WXN)3ZgHnQR7= zlT_O4w#P<12nVw3#B9D3&<&ZMcbR4~^B--ULPN>fgM9sYmJ0qVN1I zhh}Fii-Cf1xMiI7Ab7_&NoGV?P|(Nl^4RbBw2IBLff1{_xDXe2)T?_l2v485sidK4 zsch?j;hfmP`>wjDDYZYj9&U!HnzDqHs2%TWq$$QRE69C9gXVQz++1A04t2WSbiu0L zoL0i2W&+9D`4OGor5a&RA;^+{_ulq&dSh-u>2RqsY>cYjK>K}$zD9l)(8sl=BX;}| zP1`EDQK!{G@8sGD*@rz5r;99koD(&IG%S#4y%S9fttVL$ZMMe^Vi`kbm-D53+M_B~ zLk#Ioee^p?PHX8)AE?uQhV+#+e|J7^FT37ss-;nTc|K%y;v053LK8VDre#6$f}#|c z(?rmKm9-R?*PtwqQ-hYMScJY9bLjlb;cmn(q`Oc@?l4=fSBJphsFr7m_`7 z9bdUlC9g5M!l<*0*KEXL$2G{1a0Yh9uE1Ky7p6R7!$?)7<8r#orW<8f^XhVu*q;U3 zO@<;3OASMwO0L+Cqm@#4iE>>oh!D3fcWGrtWc)&RE~Zq>#*QM2 zmS;-YU~n6RHwdv}Ulv#?M$^{PGnyhU)6?$R^l9AN)V5)g(}jnnopgHb^l4y0HKj5x z!s1JtViyWO)S6Q}svpKlJ7FYCK%%*s&inXzw$n_~fz#hP5RJY(kmUI}jA4P3rBuD} z2I}2M`#eCd>8j+ggsWfZWowa|>ngQc%1gEL%SdT{-h2q}H!KH`NLJ4Xgq|G2KQ1;H zxgIBbPJD9dmWO0b;BxD}V5neMkh4MOJ{CzbBQd^$AR`go6dgJjtaPw;g=E!$uVf|+ z270OFLZVs6Obat8@JYa23{2Y@MUzF!3%4A+;2^LaWLFsJ>&3t8c7f-+I_o%YfDG%qqrDGM}AyKeFN$#bwt_ns?WI zHP^|JV~3@?km!ihiNmrr9;1g|_0W&o>X3`}j~pG4t~LPM*U{m&CXSLogSh6GX*Fu1Y88na9U`mE6`j z#Sw|@Vlm-uaVnlzP|2q$k{KjZTZ83c+wBNy*J5#)){tjINBRf9P)&c9hh0xlgknp@ zfXW-q3&~EE>(nH0T4IBUOXd6e$sY4EJgbRiX{Q=63j~~PNl1`8-&^{Ah{bCVR*jH+ zn;_8XVCLZ9a4EE8@&3x8dnT&J^FvOpbiuvMrFA^VXKNtG=ZC6V<0^jAB%IH5(XDN> z+-(*&XZ>n?7Op5rk#!c#+y{Alu%J;6eoUQ$aEVUAGv8SStGN$lO$mtZ_1$f|8FZE& zVf(|d9rgPLHzes5@@mbN%aja1nVy(@4Qy{)ki6dURlHbsReeHO)jgwGep3T~fg?mA zuddG#DA95I^E1NN>9(5}Y9+fDg!ApKE$h8q(mY18RRs*1t2etA*cR6>H%D_s_Vbu^ zUEbHXYEHI)1YzJ_Ut&SUV{1vxghGv-&CEMmEi&U3NH++P8ST`Vg4*d(!|^z0 zyTQ#^-ToW~Igl$Uj{c%XaX@t3ya91b+~%=wAK56?uE#+=4t{#7h3}wESs*6J!h_Uc z=30g+p*tHsKCJ?xa%(L_t`%yPOIOqeol7i_7UrQI`??c#M*mqn!oAnK?|}N0 zyakFK5mEfCjPzS*&`CeBWUT~Y&NWGI z(e+k7;o6TLR+{FqI$07sbba{R?*~auE_C8;uC^UG}4K@!^N@Ndw z%V_9jPkKTgr{l?@ZsqP0T<(IJe1uF{rwl@WK+UIq;t?_|mVVyHKdbd73!1J+BY$F4Zk;iQ#6jQ!v z=tEbD=^@c^IX(wJp)OqxWp~JmmnMRu95@IUeFVch#qs;_o&mA<*8g~Tj_n`=O3g9? zr322UOM!t!f1*-!O7TQDVWye@-Ty9qKt-+Ec@)m_Ve&~B<+LDcnF5z*MZD(^0JJ1x zSK6W+thtY=2j(j2vL$=0h)*uSJU#s^*6xw;h~EV)$7ksi)O%UkGe2)lQcPUABC)3C z9N--_H99sZh$&L-NRZ1(9C!pS$WTd2;PIR-qok9L($W4GwUdU}^sX;Vf)%QXWCBJj z7<^nC6EvtY5fdDoW~G{NQ0|fWuionOFSDc%0BaG@8|6a*CrHr&&}_mkTYLZ||O zy>Mtygj@nkHYDg3_4_HS{JMTIYH1`~_TXcAG%A44QyPg3nlb+d6~!F!rdsOnJOMsqn>zKgVRW5fBRg?8%~mM*0jK3)cP4!f7XEXfh1=UcX^ z4T^Vi!>$(Wyi^YTI8DI7kSvHk^r4~7s37g`tYKkoYW^6&jjbJqTbQCn1ikN1Ug;}C zUq#c)E4>?Z$hm=*XrcPO4V9Q0iIDJmB_)ppg@Qu*?bG6nXN{tPqz*zPMUN^R6e!l_ zXJhl8pRWzRTC&!HEG=$dFWDF6PrlhmXZCtoHz1cbwOus&p&+pt8r`@JzWLXiks3 zVML+7zbylr1e(as8t_RJC;hv5T}TSXWcWW_MR97sH?))msIAk(RRX9C5Uf%vA9Sbn zlr7Ow91n6s0W~ai5MIIk!at$5^;-ku)+S2)e?Y{kU@A4}IwdL0_rxlcR1VQlm%OnqpL}_rScnAb~nJxt|rmiqceFi6I$_XZW0k3_HhcW;VWElKF# zvjG1~f1tZOjLK@mO(FC^cFZ|We62eP{m zt=jhC_JcVvliWMCxbgYh4abY)WjR+@*P)t*)2%v3KxmV-{ucd}B)_my@8gTFSHYO` z)S`)@@A2Ze@$2h5a0kFYI=0Yx>L^3yI;`e+w%y(ihV|Fa%J@_fvkmh_bz8x9RWoi^ z>V&Vycpv?gM#}~Pa*FZ&>WIrgmRdd)_{WA;RYUg+6Q!wf^VqR?Ld`d0h z?UB*R(IHe*STU;SII3&W+D7Rx&39PRPDAs+CQ4-e-0 zAK>@2Q~T@cczsYS)WGm{L6M#2LO^J!+S{Amp_Ph;Vm zoZ>YH_%@*~O;nC8gq~gnZSuz3aX!7EDD~V3`H|8X}N?jz4%dw5zVjDXe-(92H3eBpa!Ni#ZL_vhjzbOv70NZ7`CS-n%&9*J>L{mVzw9=jaddvMyY z&fws){N)tCXVaI>54Ml!@fZBy7I2JG1(sOHp4fOnWpT@FgXe*Z@ez2vr%PuR?%noH zEZ<94vy$5KbcL9(0&3k6G+-><=WNr#uS*;-xRO+p0p-48fHl7$3R_9r&~x!<2zC+k z)=-_9CGbh($y&b9`QFfcoW6a>H`!HYF0Q^}yLnfoiw<9)j={jed(Qw|&!jE114F^c z@7$HfQcps(Pmad(E+-(HoGmX)UV2KnaHLUuc{VXfLz7tGpvR;|_Zm7kQm__Vz}H-4VZ z$NF6hN%wQLrE>Ze;CS>2TQIEV*Brd%9AAPMAMR&VRyDVAaQcn*f?GE97GZJYi8T$4 zf}E4C`;4ne&0<{F1J2b)Xi!B!Cr$BON)WRg_Q<$I3}vfM1OC;q9E*3%t9$9PVTtBO zVPiZ7*?i_}NNC%0IXPa(&l7kFll>7L2a1;qk#bAVvVh4Oc}^9$z%n|y!)yfcp8cp~;HD(Ra#x|x{RtSjI3|OpLPU*tnFli6($*;?3mJy+NO@yRf*;fAyQr3S|=oT)# z1oigDePCPK!8p+0|DkF-;pEZCeRb#^Ec?d&LWkDOc*DfEX6jP&g;ldi)|8~g#nF6y zsk}8J`s=M+{yvG*jcA04xtuC% z-{#!?s`)PtyVM*9u$J50B%y=hEEQ5Gn`SyKHe8bMjWFT-bCpCs7J%PGR`DooW@JgI z2rtIeYYi~LyrcX+7Rlx1MCTPK`D~PSae9WNfgmJwSzQCjPz!@iewS8DPzgvGGA54k z1HP)nAcf@77yO;iDtSjcT}Bu8;3j#PF|3_?>tkH37frz`Wz4APKtS5bhN(U1+!~5m zbgh8ZLYAwin78wr%m$)TXT}GGc^=d6AB6V$AM9Fl8q~S<A`#}nNjzcvU3J5pG{GX`PqK4Ul>Q#v{M#YEe8ho z6#k@eW2ZF3{&fb&xss;t2i$BqltwgF~gp`2IN`-Blm=8eK1oqmMG|yOQW}F_YI$kERzx*et=J^8f;-OOxP2yll zpXIFIYJvoFC}c7Y4T_9NfYI{&YsRDp;v9d6pj+ReiF(Y?-3Q65cHE4OZ)HsKlMEL- z>mRo$hVgA?bLi1!Lge!x(dg3HG#)>c`YL!_hEvd>!;?9cl>)_E_sUEX%;FM$PG;ar z9?p6>7?LnolqCniq)r8m*TGMG?z72IWk(2YWGZ5QdFwtd*-YV&9#C{mh`BzY| zv+7r=Yr#$E!&*+B*+>?tJI`8UW7*gR6i0I#&>VZ}OyMsKBG?=tsfO{Gv?=lGn6Tvw zBN6ZFjK}J=jH@)v3y;R`X%)(AJ^y1NlubKzEpEDl-1`RSj69_azCbmZoqv6bfR!F1Q1*}hS=}Hd+HB*YW9=IqV%JKUb?1e%fbq@yW zbXgz5Df_Aiwzcw?<0e%G^BF_E@9-r&Bz+who;f!Ao-UbOTr6lrvbIwB3=@`2WF@uC z98OaTPVd!KZ$>mljJzzK{7Yz33VGF0tUsy1F1C{q-b~2gDCQj%?%XTPbm^>u!43Gh zM$h97+&aEJS}$($)$q!bM(1V`8v_33=w!Wk{vCZdk}4;stgJk{w1VV1f&*uRYv3X> z9COVE0slIts#Jjksv@@C0x16TNv=GoOTLw9^g>X2`77coW~9nktHw-1GOcMrf~0Xa zN7nTHHPI?`2%8P;d9b*mFXh^$WUhZbl9}wbxp$f(~O#Yw}&-U z`Ooct{rKVtZV*`bl%Om);}WOi0d|)grG(%gO?j4LR{Epw!6AHV@A&hxZ}Z*Gy?yz! z?9(Pc#{n;X?gz#pY{|=g)>Spbng>ZA_ZGB4i$TAqZ!2LOzV&tKAc^(oN02{lAI(QB ze~NbSS=TQ)n6z28i);kx(6UXp6(kE#+HQz$d_J4ZqEp5_2Px~@vifkVEn-voG11Mk z?ML@BG?f_x4b;8T1IY}9@K?`3X4tDQkU8JY+t)osY9-QhkZBii~h;Ez{gm1Q9kLjV*~ z6L6t}{lKBmd(>GC7|0TFg)AX+5a4w0A+IR_9O~T-ewCl`I)aZv*};3bpHIjyyqZH5c($2bG$}b`Umtf_Jce*dGnR1 z5ekK3PH6^qH8-RxnVcQMO^n#+QA%}1&z1TP5*bP)clHa>)juJjN*T)r5c?vzJA0c` zf_eG*goJdDQ>B3O0R=Z3GB0^mw*VTt@9cz7nFchW+2?SE3?%FXzK&i5mVr{ZU&M|V zqDz1?C*uo&DBXX01qH+o2}r=32AM0*iyu;AKuOh88Tz6iN^Ao@$*4~BZa`dpIg^}! zb0|88XB?*Sv^=U)OTCV%w=>vyJ&qqM;09BFlm+Paew(?X@(#sMEd@y_8cz0w`RGMA z*K_`U&fKsm?*P>l;%?yY=g64MqcJCS|Js?T(cLZ-n1EC}v1NziX*kQz0-SP{zaCrf z_Cdj#NjCh^BM1)#6mniekDq}@;Od0*e*tW_gkBf}dTqe&$3EnFy}oii7+fmS3TnGS z^HUq}Qv&+a4>3hPNGYZ;ph0iAU9^%4knl_f`h*<1@fCS56wp+v9a*EzdxfDZ*(~-$A?dyd-%7(wG%B-ik!mN z0U0Ygt+cds<}pY~ZyD6OShN9KtQ*s0tf!tV;!7d^k+z^3GJUli^+IMj8;c=8d zE&zeq5u_#U3T%bLe3$=*E|MG?g=r;0mVUIV>POLZzUi>rkRd$OC>u^i9>P)i1X&n) zK4!u)1@oM_B0c|xb;jV}7MeM5P7#1PM{4jLsI$X>bmPO+*LdX%x`XJsui?ZhD2SM? z#MNtg`FFGe zZP8w#`OvenVeQp?aJ>+Shynmg$rM|N`pS;1J%K~HhXi}Y$_KMmVUI|RNex^E>KTUO zjeLV#B06{SFImUVzt;&%wt&gWNo0LA4-lhJa9_+5px?WY z&T!GKTV5L_axrmnON!#)E)`FbIL%LsfIe@pCxP|cZN_y>>_;ic#`;|Jt-?SNDuPV2 zk-*Xp4-3S(gCV{J17C~)i8q|gCRn5-VCxRPv;pvx(y~nf#CdN(u3dQf;}Dt!p>7=4t>FraIZ99wl)!7hv*zsz3cg^7?13bW6a${TkYfA+Q&6!EkGJ@&F~IzIqK z+3g2GpsX-3A6LLF_~_Kh;u#oE44tsbPTo=A0^X)mpCXg>9!T9D(AWd8*JcL+hHpR( zOONG{C817|5UZ`nV&tw3Zk;h7|NN|^lQp03y5gzgDHRA(E}N4T#-%`QxI74rfSiE` zN6PsX?&V)^{3wNkRx~kpugwNKLW550Rr3w zvX3z_V6<1HJHfSU$plsaM!Mzv{q|cZ9%pqk@*bF)O6+!P zLFJ^i@>OolE60HjMb&e`Z_dyI%s?-Tm+9jRX>|)6G;`3OQEY75tei@ej$7<+wEEOZ zhxzh0x^7z(4tK+2wPCYAJ*D4=`JFZZ2;{g*ngKUpjsAlf`+JCnPfb2Hsw4itXhQ!L z98=+Phu7x$SEW-o34mB1`df+e& zB2qY-=*TmUU4c@tU@FMcbv?O>mSuW7SL7ebWJL*iI_``&*J24Qum825QSPy^e{{rj zm^U%Og^8?X9gIm(-}95JgkTN#?tn6!7K$_`fFbbZU=kX?`k`+Ak5&gxj1UxD^$GXP zg2_eQ3dp&Q{f%#;OVbgcedod#`{hqA;*z85)WPt&kra&)htrG{r4##a`2olGm=^63 zcc0{C{V{0HU_}G*2jFyrv>ugzUjayp4lElJJ!`{}z{7FSl=u1UGe=gPLh2Czy*v|{{BSJ-w6Jzu+(LgwMSNUH zMNe={=#&y2c@n*_IcCwDzPm{`rHV8HKS#W6aOjDOmDk=jdu)z(7jbWZGmEq1 z^R1^oiX<0}k62(bQX=#QIN*~g7`l^9_~C{;liq#0kc)SaA>6r>N>8qD?jo<5yt{ChVZSNWjUA8Yz~ zzYb*-j@i)%$ycSB(FYSAx5P+>`MW$48Nfx?-IK$FY7>lAW#0ZEQ=@3}ku?u|F~2id zM%3>2Zryk?#10Q()JqvI;%1(ZK zheQ%)N@8@ytWs)+lW6n#TGX|WFC$f&KM^4@JGz(|yn}&{!RM!UEPfPds~=p_NH9xR zB5=41>53c_AJBz3#g7VUX@W26#F8Xa%m(0Cin*me=5>*O`2npw*yj$pj*_u!BAak! zF%?6SM=9aK_UFSw-FrJStiBQ*tc}+?Z37kz7$;kY8OTXr=R4$ng_E%?mf<|I$iVvq zKBWmYF8I&~Z?8UN!!aG8B{bH%{}dh1pBVh%BZBzP<`DY0IGSh_+%`@*PEpPIe3G|LSrSgzm#e3{m zbl~cNOMh@WPI}P;aHPy@rKNxCh zyI6Z*-$~sb50LKZXIQ;|rJwcSz3Ee)fDx;rh4DtG7~8oH+41&ovsLCD-^p^1j_>9l z-D57pigHh|B-4mDeR8d+F%#F%C?lrt4qb92=Ns^ORYvJ}2Eqh4PrU^ z=u@EU#?+O!<)(Gsp=-!1SQ-9xT5lxqkt5a3QpgQo& za#Jk6_a!Uhjg&I*ZJD>|QuiBo_oYl4cuhkMBs_i@^MWeQV(o)%j?!mOpS|sN+9Z6* zvwkq7^_{Khqe6ml6h}0zZD!nE(R9sf{XC@uX~kb!TP9&Wo$m|eUh|vJcRsH4e0rAu zr0(FFR*c@XfK6d|h#%81r~W6Rj9bO{Jfj?h#&aEYIwRc+M+Z|5NuM6PHNV65y<;|i zxHZ4*mR)hfLE`FAb_BVAEp$v!gzh_Lw8TwxW#Ei#an*`Dz;erE3QK0mcg%)_J$Fob z0e&0FKKVF<%HJCRC&&sc0Y_m{(2OW=smiuG_B?hYw3M(<8`h>FFr9Z6+h!h{DL8-g z^_k7KDf5&V&4E^tu2&GNBA3ckg?9Uw1`X@j!hV*h(6NYH>)KYBP#CxrcL~5hO8w%X zQQZSt%}>Zyx98iFihcLJ0$z#33_7{k9Bitg{t4$$Ll`V{iiuhVeOmZ&w+$Os8%Lc;ebCybJ}yY0b#A zZ;8$5SV8dU!P3~clg4@SdnpIXh@Oli&?ijF7 zQ$FNjEodamw6)GJ;1ynngaoMEryV=+o6Z)wdd!pTMrmG`sjy92b(3D#6fJVtv`$)P z3DI7jdwE)|=fwqggS!kVFM;tHg;E5-NzB3C_s;oVHqKUCYVK&`J~v;q0Njgsc+8I#~bz{q{1FllovUgH6r_Q0-#y%QyguZPZ?W}<{T!_S#+m_m6+(pDiW(%ATI$otmjQFZ&nB3 zZ^CwT$O2}CXp-dfXWOcW#-j6z4|^6Sr~D9aN@zkLLnM)=y)rC!@ zS(Lcx!zU*M`ZP!jds}4)jOnrs0Ny4q2%4Qw%fPVW;>4nK*IJlY&^;XH-_i)tO#Hve zVzE%Mp-1~WrDRpTN{R)=Pg0v1)-VW0SJ*fGK>)zmnkT!C)_O3bD@8sim@XZPrmwKL z&9<=mJz2m`Z}19SvkiS8VCHvK>{E8F+K1O<84wbgKt2)j1&JcA)>+vN(l4w`%LBWM zZ@aP<6a2cLDj42wUcD!at|VFnBvr(ix2=a z84i{_uDklwwO~H(n(ICS4hM6dtnwH4Y~|tM)k!LiR!mVcDME`sH+EY2ioI7c2s(SD zA9p&#V|3t?4If#%9X!MFX+6uQ(4LKKUZd@Puv1=knL5*^5!o2ZeqfTl36#$!Vwx4C z`gYysR7!m*00$%s^WGYX5Z-(}7o8e4n0eCNOPZSj+!J^7|N+rmuKy{`3P&n&_q zp0UC~9Pa&VO0&1lfqgySs$J(Cs&X(Y1M_%EVFHuiy$|c)%G^UlkIZf~ovr8b3#%(K z>)sxYOp@?^;{xu_wLpS816008Kh5XE1XXU_SCKsb3mlV=W@Nx7QRJwIL5_ZP=j9hA z`j^0cPZPi-Svey&@)Ow~kMes2Kz^w3d?;`2&SVo9nVee!?#g1vea!fOu=iGBQAcn4 zFQtGW44?v%L#iODLxWO+NQr`U4=CN;-KBJhAc%B#<4`joh%mG?NY~KtU-<6#f4$eW z_u1YDdtdu^;(-V7W#+rqde;5ipZn=P_5lkV1&j;VI+fA2#$&>X&hLm8!@Ro|ps6C= z5I3z(+ey6*Zj#bZy~U5_?#qod%XCBRTv7R5J3GmX5qY3Hk4y(fuw`HkECtOn7v!~~ zl&J6RRtao^tX|F(M11f3dVAuSQ35TyQH$d_TFQ(k2FbPRzxgJ<R3flf@<1(PaMgF3VtSm5%PPb_} zL0(IGB*LqoSs08rf$2c;^30|6EaTc4=W(8q|8^AEBGn?W7AiCEuouiLL|4x&V4YxU zTQeMOfy09LdWu8BmGf20wG_GSxgyd#n}%8_$^l-{FW1U*Jb^PZX%)+XS@;PEDV83y z+{X%<$wx(Ph0e8iy7tR`x-+3r? z9ph32?Y^{Y!Yt7|mEd7guNB)A4a*OCQfoX@D1`XjZhyRKu_F7$qX3h3iaK;MdR{al zd@K6?(?{b+R*joAda$GGzmTi(0w}KQ_bGuv%5NNaA1SnFx~;zqqHQ*C%c8&=y17^Y z#SrPAO^lJB3CO-=@ckLgiTCxVms-zxAW3R`^`Hx!aB<82YUZdVsb~=W3tfz~1B=vWp43)ts3KgbwSNCc+za}YA_<+FO!GMw zNdjpv&@QKuq!AXtgwdjPMzr`Nwg1?7#+0-YSen>8!r;zt3XLBnX3TBPYTE4Rmml2> z04e?*W%>BH0^kI->UH<$d@rz1H~64Zzl&7TNckolsd+B2PucZq)XnoQ?CCy3nfggI z*|NUnatOWqgI&U%Dy~@v-@uG6pW0NTX!eP%^?ri#^@p`X6N7rwW_kyjS$|Iyp`+vo z2JIU{{`|0q4i913&3``C1OTt*R}=lf$MwKgJCbg!{mHGUoO(iI_GEN^PDHl%3Mf7< zC&5$;=)a(oT6r=#dzpA=Mcl9JzUz$J3hRCk5qDE;54ndq@chcR7*CU?6l#CcNAgZu zN^Ccl1pSp1DYhxM+*d*Vto(A`*J8}XfZV^WalJboqcix9(CoheL8%>X?s5k2G{)k4wJ zNpQG2Y{}S%F&;OS`B3K<1+biJifW)PcLFJtWh-UYYN69l>_}4UdW><+>khf^AQs1gCi{iDjPf7eU zTq=Umwz-odkyrt{C_D?bR4l2FEHEjS#fI;)a{dInR6R%o=hh4mYGQu= zEI1u8n>OxqNWep@^6awsQ?h=tvS2#<)5;r?ggk=eMVoJ{I4!J%*VKksh!7vE_2Zx> z6wAgNkmc8ozq=peQHSBWl2}<$M=FrBQ1$eRJ5zM=ZNOT73{+bXbn%Yf7!5h_b1pRg zHhy$S^6Z%81;f>G-oFj#;9CB@EilFN{?^%TM23ZNg}}I7H(kQ4F3zjR+IQ?>B<+BJt%BjIDosWiug3w&bT1 zsx7D59QvnL=FFWQUxjXv^JD!A$N8X6H;Lbbqx8|>H0t88~_{8CjI=A|+onjj= zj*|p!pT}3&_^RUj)Kpu*yGrQhA2=A*%qb2b_l|@M6nL3XIfw=w^GR;FpH7=^hKMfm zbDtI|SCcGjGJM1BfEVLw((q|bkW`%ZiT9k=CmV;o>OiBIf6%6tpjLi?edV5xB;oeT>UY*$MR3*w*g} z8W|gKPee3am)T=J`J0?AGH{GeY%_JB;W>{uUb0rp^HDju+|k((hW69_dKP@ukM(sa zN+Zl|fsrw>UK)k_jThp}S{Gxjmrr*GllU+O!Dn;}RMotbCWn5o}CZq1JX zKI7wYxTh6t){S_wOl>7a_Vk{^^cP)KLY|U@Ou3s=scms>xiU|PKy%AYNnkubdn=^)N)UW>sHB`B^E9Wl=Ho9!PB7-S zvUi;(Y+6{+#RB5`&OB^9a2_tZ>&L7PM`Ed2(689Q?C;f9 z3w<>6V)gf{rq;oE)k90ox5CfhupZXc&~dKlC_uY`?k@U`zDXM{IXdr*Q>#>@cLjVQ z3Zu@W>!O+Jmigr*hDp1xI+WVSO~yDzSK$~2B@qO7n6`|;8o6w_VtH{WR!8!RN`gu6 z-E$XyZAL}kxir}t6U_?Cs-WuM0;TlpB0!#WH#VJnaQ=*Vbv;yr`Qp#UCP`jx3zg}&5XyPpy z!x${7W7I0$k*#R*6!UtEc8%Pir(Z9tIyvogVjbQn(vJ4^yOjr~WQ2Ldnm;mUr%v$f zanO*APFWa@h_j^zo*&%f_3ZAP2)%Bzf!N|Oo(0K5%Yoo(-^I!B9InRkK=Nqnr_>`&}tIB!FRk?3y~kBmXkSd-Uv8JDElA#3-B7 zy7C$6yTZEOE&i-I=CUMOoiFztNV|v;UuZTtBbq>&vK#@?mkrgOwcLC`(z0)qa~L-J zVRJnU9;P4KrI&FbvW{~}s}K$)CmRYFc81`y6qQ^13<;1J?aA?W!_D=jmM3F*PXUJW zWOpcz%J@$NDmvpm>AT0+2)e-{r$y7LXMr^#hiKNGahDQnnP}c_ORd>oXKou}vrdoS zP)?Y7MZ8Z7F;LId7czMj2r)<|4P%+#nk(Dg-F{Z`=QZcU(tJfN>X7VN!~}of#1fiL zdaW!@2fc5&@T_g|%l(zdEE*-T;hLp89*u)Nn)aVbvGYcC{B1&;xh^F~l}|hBW2e^} zRU7WFNf)0=A@H4bdRjQ%2>e}&saMw~C$j1s4C1WkY(F-+?f(qv9zu%9RJ5ZHq0REx zs%PBk`v_8>nlh@zy7ToL|NI_l4>8~~jC&b^u(#-b*oEChGheB1O*K+=5b#wDl z@T-NkUrN4IQh|{u2S0oELEy1#iU>5CT;f9efbW7F=T@&5$K3#|Zt7?b5_`ErYqx#R z1Sf0AWh5jP=Cz+T`---RB~qEBH?&8(LU|qC#KW*@#p_WA@i)}d3iOmLV1mgUM?*V?PP$pAbG(;_h za9a!Sdr0qxUKslAK~vq2Nu{ZQEj}5Fwv=;$+i<42# zKiF2pOGdAIao{B%hz`tg2)vQA^nb@LPs_=RpD@)q9V^6VGElo@RQpVlby%i2FknhH zb3vAZ=BY>BQcdgc@y{8EhHBI*1=)^eSJrh4S4hVOe)Zcvog6bV@nS0*(shSvdoCUE z+yzjdtSYd7^~6WbDo#7C&)pctyhJ5~m`crBRpQh&#n9VJGZTIvdvyAzke>a?6$L3M z6qGLndW{#6V~3vL<4|Bk!lc|t?BowO*g9&N&B!fqH_O(*^+O(mkM4@?EzT*XzE^yy zl(8WZtJaL?*Cn1YT+{*?S5fadm-ePr5M-dX5q$Grz@nhJT^tN1!V>{ioVY6f5TriN zH8a7?M29JLn)ws75WSz4!A<2u`*~6QKlZZcb}nUf!9mwuGm*Gok)X{vfi=i z4|%nR-Z55Yb?Y}t-YF>AlfoI9KG&99tjT_LI77J3JtGlKv59MJHr?tAcK=oycg1KD zX@Faqw`&v1h5UhTM0Urzc&=Q^f|EWoG>~Hc`r5MQP+2|eqGwqp{&mHeAP0h~3%eyB zwm9*;YVHGdyLxezR4wci9hyhp@PSje=%NTi&31xb@C+WQNS?!pz++XgLuEiH! zM^OW>f!OFd`M-Ap^}~>Dt{-HLntH+%oPH=a7DLuj4Ro*e0}-$1%Zzp!|<^zG&?W+pdHS$!I?W zHWuM1pFqqoAuj12aW6f|xG3$N-7OwMGeRY9kJv@=>aOi6S(YLiLLA}{J1EuiSHHk7 z)rP6-p9s~ajxbu^^fdDck#^}cYj67B7332^EAlec33#@O@kveuH<;_Y9xiLauwWgp zRt0+%5RdYO3A*TGwx}w$5n2b9p}%C!$=8B9iO6ejqg5&&I#37%2&$N>sSm0Ss8Ksd z+Z^DLFTu2xzcXKOYu)!~E`8x^*GmSu;Os3J65Z+>_9BU%vA0M=)v&e&4#c%Mh~w`$ zdpXU@mwcsx+^?%|6Aln-pD+v4hc#K!3;$L!o{k!RVmIFv_)S_1z&8o`S@*|%77LdI zomPlw?jq(9A|r`Zx3PokKZAaA5SAKP^A!#r2-)dx`IM_JWGqIZWaymH-qq1WH13WSj$7di8%B}C7JH#9&L*|zZosRGdW;8c3UH6+8p7$X*)*oMY1e7H^D*z zjZ2r-oq_v!JP#~j$4H2we?R0s9}DKDl?$Pt=Hguk(Rycne*K$CW#C#+W?qE}K}LMM z+feFqAztFueS?+jQ5@&^kLrL8oxW|Z-dHpK&7e+B`VGmFH3sDwbjz4?Ez&oogTV7`m!OcMN~FukO*_WU@!FN*XThPU&2}K?zi|A}=D2 zLqkB4&W*DjQvck22ilhF6%hG!LtsLmyZ-Wv3MdbcKVMzT1&$9fT8a!CGcgYOa+#2B zsPJ?8c_RT>N^_Id*s~S~?nl2nI>c=H$-y#mW6F&}owq~HUba{bN`)9r+{$k8%5v+b ztBkUoFIrctbVE)A9gb#d?dvpx=D-2xa)asQ-A`Bxvc7Xa+hyksR67lyUH_nhM@rN@ zc!nEe3S}h`wiRmnVmUoEKW4r!oZOeJ5D1t2W$EX?+Tn*|LT_!5pu-M^-n=@E4ch+u z7#*lwBM<}XA5*6J(7@FMB`%6_FD5_FLQLtdCkX}G)%w4 zfw)N$j6Avi??hXhg0F{YVRJ@!#id=_^8;aPf|XAb?~59{6hqt5uXDA?3_e)F(`0<@ zY%FZm{P_OL_!fMXs$wO=4&Dw=WQ7SCSL^v3_;H=(snCSm3l%LSij!$G8XA`-Z20Lh zr%gI>8Bze$YWAh1W@FqYxF(1-_BQV>kOz95>An#URgWTgxteAZ7_2fLh*Y*_!5Mvl zpjUb?@Ll0CPGsXY5FjFrzvzz$hdz{2FJGy3_aLH48A`&U5El1D&KDMY-vHzC^@lWm^%H#5S zyf%s;>4s%V)-D>)8!Sgg=64Brs)R-}p%JKd8Qy`jsjh@n;MUd~%hIWD7}^h2iMEow z6$W1Gt3TQrKF|pAjEJ6<^zyPKC|Fvu!m1Wi;A-uNM^#%~J>aF4GCOT!T=KgrU`1*W zIPi1jH(E70b~XIyTI~`g@l?t8%Hw<(zd!#oSAl2tCcTt5xLEHPVsL+4r+9z@$qThY z?t2c^Zn~|iygCz)uxTA{N&r19{79RW%1 zOc#1j#<$&drG_rdc0{o2Tf_r;DvAS+i+ijCFRj0|(N@)Z*A*CLHI;9}e@R#uUC-Ba zyV?SK_Qq=_1z*B;9_8DXCUrrv-_6xlv7ZAmE0imc7WPx!qpWQX-+}#RqarHvS>H?F zFxCapLmAV%5ullX?lD|$p?I0>%_N0>;7~+5<-3%~0d4Dzz(!7)+nhCSe2|00LIppU z;p1X%8o#OUWd-Z;JJq}Ge0LXb*n}qh*Mh5#DtDn?!St$H=ks75Y=g0u-kDP0-fKpY zJP&7M4?-$$QGCaEIg@0LyP)%J_LRKl zuEqJyujfA*rCy0J2V!+%)5K{DJ`15j1aU7@Zjjrqw3aLAp82JfOa(8+rkx|DSk}#p zH6+|55d?0#Z_6^r^H&%jLlxwB-w(^FyZyMYe8An6L}oM=Ad^!qVWO8?^waACP%|H; zH(2f7L(W2;-n}Y_DuU-w1krvl`&53Wiv()=SnLVRB+}mPmw30qlCLre1M?NzIH+k{ z;o@x)FC0y67a1WEr2E)$FTGa&sxMJl{MV|4G;)J$>U*yU)Bkx*-LYF>SYhxyJixxf zN-`_E+B6jLWL6#ak$^|1cR@GUYf#7ixVRCr@6cx z&!G`Y(u3Vfawf%OA76BZVh0l?!D1yw#B`)bWgtWiyhKY{zr`tye3vls{Okb^!6M=K zORi-tMQt#HcdMlN=|Ti=FRLUb7BftJa(p|*p++hV`Z8PM*uK6<)}C+`sA{q>Ae>2? z)1;jQN)CMVoXkuj`B8CK((|lkpG5e_Ww)$5{M^CLuQ|<2m{h`Y^sr!DR8~a9?tk7= zX|V+#YvRcZW~fTS{$O~38@eg)yWrAD8e;_8qbDL*?d2#Y3xV8M_Ed&~>5PU$E!UDZ zp?Tn|z~lIqPwz7tt&gVw!y;6l(fcKeJ|Uc`?I*o8?s$Hf4q@YFcUcInamKK`X?s53J;G zy2&?#1scuQs9Nn6aK{0RS!Jtv$$wUwx$rSRr%v}ZN4Z2hA!&Qc#~`c)5llp)X>*j> zgLWKRNy`TUr?jv~N-r{9pwGJyaX)k>2-ryy+e2*Z9zo)8$eEUMR}A{BOa$z{1zK5J zdGvK|Rg>9&h^lNtyw0)zOXq(_Ug?V%bU(p^DB>hmO85(;%%{S>Cjv`q@}F}3c<~vm z^jdEEFG z3W)njNV(&(GX8Q?bbkDX=$wc~EuY>AY&qGgDr;qDYHaJe0M(i`8V5OwpaA`^@{`6Y zmN%Gz0Av8GjR9P#M6R5RdN`VOEM)fY@uRuhmH_|oUZ7F;dHPI5s;QViqdG_$;!1}G65ov}S| z6CySyL%3EF)i`ZcsG9OE1HIowkkR(0(MB9thiKFz1e4*S5Y=ZZL3ZjFuNGl;g;c?Z zQlw%ZX=m)8$%@#O7)sZL#ab@jpddzqekf|neZ5#$;F1%Y?M|oY)AGc*doRC(*DOR} z(Z+f8?iZqLS?<%9ZGbm zx9aWq?~xP3Zdx4wEiBEX{TnYyz|)g3DJv@0g-ETAPivlv`}-d9mdOIMK*ibKK+i{ajLs)v(NLJfaC2BPqLeqO&+DCIs;@Q{`O^ z9bTa+#`$Q)C|ewc9wp?Ypjvxs{j~V=zp}pXO$1cOKzK-;pmBLrn7^;oZCY~*k0C(E z!M33zRZUtUjF139S|WL9MfOzeNthiz??>|#!T1-^v?-Bf9SDbaGJOeHYKcWgC>wCi zD(f-!JdWt~ON6l1y;YEw{(HM#Zdfj{ z96@1qYuEI6;_&07`6g)!(y*$4&z~O8Vk!{ z%u~mfL%N(lSVDy4i4*R4qrJxM*>MCE!wta;zP&_ zl;HuX;BtgzrJK84+}PPE-!{$S;;y5?7oilTMy54jXkp0`{6t@7@3dXM6o!^WY# zGVK;X&$3I@Cyna}?a+8Qo|hJd#F{V;lpVGCJllh|J*lYwrwhxa?F;K4Sb1a$-|1KX zOe)@T5$hJhx4XXJu#|qg^=1ual1E)+-F5rSOED#{o&n)&GZ7W#O(;q85Fwn6Ot zitj zLzYI8IHZv!v(vt_>J+MG$#o<@1h@HBGaUcUxH(0t@RNA;WUXlrU-K?fvMl!Y+w|pJ z((5Yj?pVTyPqY@^h4)_WYEKe6%X;34u<=8v?NZfh-@c!=$re|JF-Hc^eR8oLUv^`j z5b0b0C>B6ERO=#Fb*%THn2UZvspNT$q}SR9`u$($@75Cuc)a&iOYT8z+2zRYYGJ+3 za+Yd)I#m(--O-gfh#cnx`gu2*A@MC&0mY~X0n0VByLac_&~P20L8p;De?nUNc{3gP z=Hm2+%ttI%Aj+vXZCoag%D7noV$hfPwekOW{;3BJq|c?59+9kQv34iV_H7y-TCC%V z?^af7gK4r;Lr57iADUDieBVEm7URSR zn1j7-iR9zA`rCv)y$N`tzdQD^qyy%{NHgEg%RdX{-Hf*kRo?jibWDfe?eu4`1K0N` zUWB_1W825a3gAz8S@x{eMC$I-KDa2EW!BTBu=t-WtW}nED$Jz=WM;dQy`Q0N9 zo@Ba55m-W8~YdHvrLB8G#X0~YM7l`Wj=U0t-SD(-$zc(b3}n%DiV zR@!$rDaO9W7mI>rdkY23B215}d~?J%qp^Z%LJ~CP-U>Ix!3h04fnyd)Iru#>@37^2 z{Ju>sqCrA^Gd&?{1wihm6%bDFd>oo2&&5wynfXBu)T_H;SP6tRi_9pS@p6uJg>h?GJOT`mnWU;EtgdZzzKpC5F z`75LZJxXYNY@@p}Y*_K=^hocJrw zr84e6x5z&=A3k&rNsmPbwmW718=ZvIO< zdoI(0SWhzadZGT9XexK^%-8qc`@xU2WP2anKWM+Jpxz$)_7u0bad=+gJ~uVuQ}#|w zgwI`zq=A2@8)rt?KYE4kFE~rqrLNgXw#=qC4p;ym6Z!0Fy7?90a_$9xes9)DgA9Y3 zI|^%2fO~fAQ7Bchuvv?xe4S0e6V#Tfkj>P#h+~{5`J~mh9NjwW#5gx?>l~&Ef2S zC;LBEaK2aJDL%mH>T$z0M)kr07n*cSZ`xYnnl4r-|2Xr2%;056)4{E3Od^RJ^lmto z8bMM0okuvYxOm`?r1!Pi&@V6K_#WNeN_>=1q~%{~&!8~#i9$2xrb4it>4S4n{QQ{s z%Kr}>0>}9LEMc`mi1739-P3>MUKl&~Z(3hKDv~_V)AV?F{VqImb!vP}2EopI{NuHI zj(OWZ0Ymjbkk5W z5xdX%pD+GDU;KYo{C`$F02TjVveoB5!9n)BG+Az)b$TryUbR?@r=Mr9Noe@+Z};t| zz9rTDO|0+csyjk|Iw`fB7+}pCAbXqdOlhiCyG4Yw_1CKgvv{||OAXYBKz?eJ@;I8a zdhGS|p31CHVY*uFIk!H>v~p*eh`m+fbnper*h~~Y<2kR$znSqK{>Kv+^)2cJt5v#} z-*{u6>m_0Z#hRu+oP*R18Tdfry5w8Z+IqC-vD_jtW2V=<{X2Iy%ln{U+^j3dOWL-G+1M8J}e$8a6SI%-= z*s@k)R4rUCFcY|?DRvUnW^B_Uy$3Wu2RR#1U*Maw#a5@JTl$o>h0gVTqHetj@LsW` zCu!*o@^e~QGWG9AfK}b>nxEPSxxC3BV=e^*f{ku~0BLw$3j9$M>ig#lvYsy*z~5CT zgh3ml09OSEV4Qj-$azh^=5^qh@z!MKzlY~h0y8|_v<{K=3(+FTZU!IAYustSdE0A{ zvuP(%C{#N0nr?)jAMb*~s5cJ`mw=CaQ-zP|x;(wML)3nGxDF75rwMFM-MpXw+Y6w` z2NdwI6qgw{)O9?N^SCJ`NMSwNUFW|C#tpo50NFfggcNMaAZ&6B2@;Xv0PNxcqarHT z#!B^T8yMVIp$^0H?5vxMwIGWUb&Zxi1)Q#Ot!LHxb@I>03-DvvyrykhFOW$s2VYA( zuTIBWk^11@hFcB*FH6P7y~)z5oFV)>9Z2!ZApKRjkA~MMa2$M2$RzL=HO%^eTvIr( z_bS_-o(%d}*MPj-lBR1a0CgQvc5nhRo%n!s!Uxj9bH~AhqFyU_m1mwWvPRP57PgG>eovek$`XgxO!vh=L*QSE}A^Tr?vHU1HZ`Q<4FL+dD{kf zcwHa-m1|e4*j{n#<>_*5>xETqtJ)EWQcXs>t*($OaK?>nVt#nrfVS%rZ1e< z`*ZWzQg&;V7_@)2rofy|g(X}+YZ~<4K=Q3~8^hC#YpmUDg!b?4cQA7&3k9PLYfg4y zVm$R%eP^g+yM=_-?cFo62JhBCp+v|L(!7D=t2G6bZ#yos>_$k+U6^h=ajJ*P-im;} z+b^BNq(bDQ$r7V``o_DdAl&zCVY#J$yYNIi%i9Zt;Lo6RypX?_qmpLKAC=OPP7aBl z{j5~%&-v`w>}9rQaZ0*jvz+R~Rk?GEC@ro(n$z(%O49cqNVePSc>rW_w*66V@7;*h zy6f2Mg4mN_t!vjgOX;-YXxAj66=hnxnP?3*75VL z7{C~QaRWIzs6Xui6e30HryxWy!72H0XR~$|24=PtfCN&_c$h&%nK-}869oq(Z-^#< zUyvaEF$rycJ%z)F`#O2KoKiMss|CMu$&mX?=`~D7Eol2W`)bv?xa)p1V7Fiv;YZuN zggj>(mC8nG7vNpSSlh6h5@*bo;c_=_RG4^o2Gfdr)`85eOz&W&jt9>AlBUug;~t`? zt2tpA?eq_uvqGoym5L=Iiaars8Q~hg&pye_Ks|iFFQ^4!%;K^UmfrCw|5oMAp4Fq) zD=#CD%A50@Iwo;4@jm$!H7D1z5UhO=qyT5`P607zBD>nx^8>Ba-=`hlrPa1mi=kCW65pu?tu0pVwb>n^h`cd{9(`;g!H#m&e~51$`)$uJg@{IGI58@(Ji%VITq z4RRS9G~p?x4NpJrzZ}3%(GX@e9m)c*YfRQzo!jYNK1D^puiMS!BlhO3SfLrOUERw5 zI$fkFhqJ^JnFrg=2bn?+C;W=D*j|dWmtGza1Eus8X@1LbL-?O_TvXsb+XzeBD=&}l zZkNF;9zDl15>pm4sXK||S3wtwt>b328_^=J=_#14C;X0U*@P#?ea8=%=Mv~)mA6w+ z8@oU0^Jd$qPdKrc6@1R)Q;fT4bxn`fX1h5nelzJ_UF~gh(}Xe|oGg%v!?L({=m`J_$gmq(Z!uWON+va)ndeP{oqG0WMM$ zf>p-=^&8z$Nsgj#=oYx%u_+|+yCB5YB$!|lx>SO|+gL;ti&O-UEfdk`=Of2}Ei-qX zvOBFizgoL?Y`i|gA>xdMnD%ta5_(;sY`lMc8g$__Fp)Ab-0x|JgosfUtnHzZUJEp{ zaxmLiD|6K zv!po;17Nh(#9@<-WK>CTF3^PeMsHx3Kovex@J>K(=kv$-n}UPTTr?hbFs=}RsPz{m zk{C4n{j{ zPz@fX7P6c|xC(N7q&kPb)G+(gxfOH}st9B&KvdbLc-s%wCc7;U4x{4jE&Z|f`vNtP z?7zf$)9C98QanZ|2ksCf6}&ydPFyFtmlF!I4j9{rQ_W&E-J8EAIGt{e&A?)&_ujqU zP{+6W1Tg~rOAa5mCHlqmlryB|JstP<+$>#_w6&#x?lkV!_oL|dQP$-5%SQtXt?ag1lsGSkuj`HbkIvpv5xA5+#I2~z?9c+%(Vm;w*(X@h7Ci1rM9e zi;%=)vU%gC;muh(N~~*^l?^81%@Nvq++EZfRdc-c`#rw6Xx|U-4&?~3ANOy+@6wwg zVr_e}uF#WtCmx^0-IJ77+~{h-p^}hE>{7|oId)xl_Qu&AuH(5<-@4~M!;94V<4^m? z!UvxG?F3tWR;(zxkr^NJ`j5+XZiiLPIN}`aw2GNoUL4q+)k0s+U|muzND3D#}U;RtSdq3DNZl@zDRrpE=<4k0f+76U-v{%MaR>3QNlid z-8{DYGD=?ca7**0?5%#J2Rl(BJk>3arQw#U-UndRe9Jwgd)e}57G)&DHTtoM_Y%3g z+)%1(R?}e1QMsCAHifLjOBSP_VutpQDAahJU;g1GP1W{swD`A~io0Im@;l6?po$#4 z44-&mcFmSI-VVSRT1BRlJ^vQob~-sf91z%UJ#QI53R{bFyp$+kYPcxjSJuUR9Cztx z(Opuiv-PisA6XzrlPs<7jqedjk_P#l&vX+$eE&PE_=EMuTrvCrlapqY+>O=$W$HS= z)yTx|nH5FIF0GP7o7hUa!}8FRPpXD^l81jaT2J3r3>kI8NwtfhA=Y*Q^?DuksG}** zvf30V+cR@$$E_lyd)N=+j@vYBayn7uPAZgLcVRj#v*o_!oAE5ii9h0Z?ZFr@$2dN; zt1T`$ZQbuz^NIX4KW)7C(|TLwA=05H^YH_Wo@Hc4*d=#=cVSR79kz5xhz(=vvlct* zecDKS#y+&tiz z8ldz2)$BTHkmsW_UYji8QE7}Ro|rW=_-bhOaMqToo z(xhMeZIu5ws#!g~jf2!KZ8C*t7_0M-H94fbt<|nxPfN;j9iKWFOhbNKdXZwr;8}x@ z4WAj>Pv!Pnig@s1Q0zRN+65z6Ils)o)|CvwL5@mHHPGlCZmlb+w^Ffx@6}C~TkJOv+suTL?d%!~`Ddoa=~}&U7e=m&`O| zrQ^)8PgC=Vg^J7|{FDB-Nb@M&kd0#9tPAP#=2g0{A${LJT{v$)t7`V3eq`ffxi=ey z!P=bOA9%0(jrb{i|C87Cjw40fJ{Uasi*3DB1WYHnFU#BI6Q)d`l^As_`Nr)0GejXQ z-Y5YSh8+anPkW$SelyqOholSqRLTMU%Ptd4ZjgHT!$tY!^l@;QeE@?%#wxB)x6g~K z`ljVmF2?Xb`(65f$pbx??#6Q$4m?@MCDZgd$YEd&OaRbwS)qIgo%1_#8Hz08%QVPU zLChfjm%C(6Ke3q#C%b|q%bX9H9WURHu4vVb?OBZV;Xj05Yv^Sa4Upj^NJ?$0K*Ydt zrhL@|%uD|^h?`S+>V7Z(Qxs^7YQ3>6);wSb$jYyRtkhQ2p#VR|!?;nb7x$I29>#>+ z)MWbw1|~pjE2W4N8N~k)YrjW=o>#zoLALV3X)^7`n08tAo6M`hgOzAlV^^IrYdv1_ zb0Si{3wRnmbzX0TFp7Xj^Q^-~zJ$*Q9Gx}0Sd?dpXKmxG-g>>d_2mjD^HUH<<#Ed5PP-GZ3`riWqD0+9Q0=p z4>B)hR6q=-U?UFR4(0>zd_NvtqwHZ*pI0FJiJAIt*%qbRAAozXalp#^+Z%2TJv=H) zA_9&gKkK>`cRVVBT2bymV``jR0>tI*oP^O&qX=#ng+zt+RzpakZD<0osnx1zXKl7Y zX~_yh@rqiN$qcLj;xYkq5$D+3$~IOKlLC8lqHM(CR0jBS<~3a=9%$cJW%BLV_D@6D z*H((^F61<0Z?%Or2y!wOdB0WT*iR$iS(0nMOAW%Iq9ZLIXIFf1YSp#gexrTgPsJ_2 zl@gn+MJcFH#Tcfa5;Pyv8riRQJXJQv=*S;!IYNGkXm=7eWxp@z(V{|4q|deLhjW=TDfVJWW&y_3CwDd#|JQZJ^4XO%*=-Mni}o@NaBJ|1K*;CcIxw z=9n_MHo0)u#a1=k$^Q_?2fsJ^*X+fXi~JoU^7RLord-cv@iL1Uxx( z%9dpa&vbJRlSIKJM{UW2z$v%gAC&B>RXZtV@UlyCtK

GF9AVx*;qc=0i$!S!iQ zX_c^L)@9~_s-1j(39xC|=ykOTbe$qo7~{sFA`?XWZWeF9U8?x3;Uz1JpLabgbKPD# zLN>QHj){8x_ytdzbmo;xq#6#wAB2#ZntTe-;O+M^23O6Rq?MPx^#&J2@hhLEnCFI_y5t1UwtB7plO~Egw%RbY`Uyd<@_eD zgMcTC#$gm)iG1Y+=hLs>=5TWQJJ7lPZ#zfz;c1_C#ZNw!6$xr zMig^Q(Ak}B5CfG51vDKtCvPr~R^2CG(PF#!#C0Ggq|q*y_2v~vk(){;&M~+wgd1bO z5Vp^=W_sU!m=!l@voF5`LPkqaRW6TK2xHwwH4&0?0E=p-mb` zbV~>4$yZj?OYP#1cZ>;n(tOMu9Og>7UVTAE>cDePT>o}2f6>=BQJ*w?x{pw>aV0a* z^MK3ZrJBOtA&Sb@Zav3KMzu7jP(LX;+ozXq1t>kDGSYf44C_}>6FkmnW1EJdtem<< z&I(7n6MJZ}`wIaN)gqECl60AoRu@=3O{n_URyB$bp3lN$8BI17lSV*3Z;69;{$D9Q zyyRf z^ks{I!3mq+>DeWeALkLWnlSpO(4=tYqN?|TWqsSTpI3>7vQNqVsA+5O)FCWKiq8`4 zhKAbHlEji~l5Nqj$2A8<1l(G|hdoXrbG=6)Lb<{omsa$c&{;6w&cyJ@AjHsR*O3J_ z2%_J|9ucdy*qC}#VCT`sRWmV@8T7@)6|=rk&pz9<_sE$@g+d-}JGwEoJ&~$Ao|Q8F z#+z39N^*C_mcH>m!+ljE5H)|&b!5WbXg5x(A1Bt+p#+^1Vd7)Lw-ud}Ke)9azTt{7 zw$6QxC2&IL3I86jdkod6RTha1J3eS~A^}ip@L$EE?t4+wUyr1aN zBbOu@db^R3p9sDNZtJu4P5ChL4%R23QpaJt^>zmGT?*t~&~slf#N)$WuE-fRxNg=S zM2XwClYSAqxG#Dfk>9XClB$xiyN2slwm!r$fqKq)v9f~!aZ1V?-WZC**J4)%X{|G! zq~)OsvB#ZmA9~r=2Ukv9G7p%7kP@gx^+N8$>&UJ4Jnv zCAIoRs|Kl`3Y`&`S*BTr(N-Cy&nD4rw_{4q`k=~tm*p*l0~3M*~>Qfcn4f|1RUx^okIFGF_J2khhPXJ4zby@bXGFn6b+K(7w!H|G5z|n zZ-oZSEl6hfZhI#`!A6YX<6;L#oTi7Bk1lYpSjO`!hDKHebw!Y3!a6~3gH@XG?=vNt z<|gv*5>=IsIK+cHP4?X!gmSpcbOtrTJ{h~siJlt*|C?4 z^YdOvYF3!B+!4`z<|*XdR<2vwz4JCWt(bdaf;im;!OxH@f2710lXX$2X|Q>Ne2=Ir z7XRw>^O}f-e&tznW18Q-SKOGl+8yj=zgAHL#Q$RNE2FCZ+BOde0xB(`bW3-qbR*p@ zAl==HbSVOdJW4kr-5?EzI!Kq2A|>50o9CTb^R6}X{NJ@^KFwP5jSq*je`o*p9s9cP z`?|aDC=XD?S0I2h}^%HXM15 zO|OTP;LW2d!KFtZo~fk;+-_}dEbxx-(oB(=PhG6WZkEiYLEeprRP}dyUqUiotrLGq zp&Tn;y@Z*(m*~&CIG#{raBwBP#(B1Y5`#ZQ(;e#<)&GFSV{0CQgC9B58J^hlo&Kr? z>kj+qlN2&_Szgj&*=&36yaUIMJ4bmeD)rP?LCd2JJbn(bnVG7s>I@~m6p`XC`q_`Z z98dJts5%?Az<`UX+t~N;T0+fQ!Ygo%&%c-08?eR^akO~Q^&S55G29SHpd{gOp?OM7 znRg*xAV0ZT!-?yzmj1fGJN&_btLJCP%&KfraWeKHYCQ52T6B@UP^>iutbPIcm9LTV zd}~U})=1cVp`>f(3k#rh71d_;SHi^=gL%zruM0vo3@ShhMFwYlydgG3pNh{f;RqJ!pg?^I)B4I9kJ7_8F_(RB$lRxUywmFG zTdnHOM+mL^k)__EbJSkebl^RPo}3xC_o;y)2kUiSnhue>{-cd4Zf6zrmycQ7U+pnz zJVoktYMDj(d2Uv*7U;NP+RKPmBO{pNhE}|S8eZ1ARlx`7p0^itTwNy}gR)VGr(Tj0 z&#>{?fpN|!Yv`m%I9x8ztEXP_b>cc_Va!+xtW&{eHZcONKv?LU?P%J?b8#7w5PAR8 zK5Ov@HqygQxpJ-TXLQSa(}P6d6Y=kryH)6v%6gW5Dkx!b3gl6`7QGbf?_oolc6`7` zjrL;3YDSaRfy+UUnog3Q!4)So3C8IN%b}(iA<6O9Im!B?v%wE|u*d!GoDDyGK z*!;l#FW)FKSHyJ)kf)_BFeo~pMyRj!C>hiabn@(jiQcxK47_~h%5F9*&qTUsZlBa3 zExBgK)-W4ZnK=IorwV9^q0d{v;bwM?38niU>fz9&R$oK-#CjfwHg6=l5m%kT20|MmyH{NefKOzvM2 zM!|}h>E(~Bm|c@KE1s;91$km{>qYkCJn1V2 zA-dZ)8GqHQv48m*^~=#NUohm2I+1K&)K1*cQ@4n=c;!BSf1Lk{&Q{&VKrjhV;+2$& zph#|#ZMd-+R>$j6gvC8fi3mpe_E_vufRL9l1oIE=9ELsRYeKwLJPHgO*2G;(s7sqw z?k@u_8^2rc@e|`wQ=jSUv#`5#ewfdMgZGJ-_4y#T6Rs2+)nNZf{hmX3 zCC{oez%4(@zi4mm+Yt@gZyGl+X}hsH8u+0Gzb`tU-CYE64}I2$13b#%a&)%6g4Fc+ z*~dnguE)cJ;wH0YCmFSVYs>)O{Xw9Xc3)dAbNTtmI!k<*GXIC->9fK()un!x*3sB{ z4h3TrXuAqS$Idbo2-}aJWkkdW_U~N$&9+Vvv{qO~t0F%%Y73`|b)=^qr0cK3yFxq`7wXJb(VH`6o@OyT&4?TM=*eOh zR^1^vM)~K_xSYe=fR}mCA~}hvi61Aj2)L|tpje=jnDUW+y{7VND1L_Y5HFn9$;b^Y zL)(c|lLF-_-#bvQl5^weS~kiJIkTqPyavSr`4T7D5G1K5FaDr%WBJ^IQks|HZ$}E2 zB$!RI-Z2TCJR314vATm32_2umbWR9Qx4YclhUg91sIn_F$su-zJzj>;T$c(O7LF~$ zWe6LU6bUcdgLsm8rx~#}nA=I!$7Es6m<6o0YQuH^M z&w0)v8hrc_UrkG(V5k~k)^aQ5{qiVKx7V-jF_H-)^r`;Wl*-9j^zwi70{qYP>Th3a zm>R}P)VBBcrLNH)R1u}vVgS!hx;0n!wyl!jeSjWJxN>JJ70pD>_?-9uC7UZ60~r<8 zMr06t*j@er2O*gEZtd-jEsU^_e!V^F$v*waqrdtEutM*nAAe%5`~mt##O;V#O71xagBq8*bEF zbH7#UYFiRJ0uUv^ogc9T#aApoW>D6<6c5n#x{UNZ?`y;$D%4NfS$FYIBl{SAqMQF8 zj-og4dE7SvwAWZQqofyjW|9FM#~9x~#I-qGNn}Y&Y;f^KosenZ5REk^TGNyg6sv!^ zlrmIg=xBiaB}Hs0!JNWb#JU~4hhzI6ZkG9}9=41$1*adR5N@T5Rw(qpFm1eJE*LEf z{3y@t9;%J4 zU;B&yj`$`aOso2)b}?7#ulf=SbhE;L#Hgx^z#2Yc38ybq4&JsexKwHOTDBifN)@p^ z4K}}HJABl*9Bg%oFP~c=9(ugJrADa|>@=vdhcCY-99TRt+$2{y&pHS%ehjlCT(UE- z?yMq#234PNbDw3+KAvDnlT4m}KB~;b(d>x8m)9TLUvQQ@9t>CRRv$&#r-v~lx?EOM z9R(sY#tFqd`5->FD;q((FldE8@C6lD@>?t_R)QXU7F{aSEGb>pA*FG)6Iqe^`dN(l z8t~gMzy2IUK~C7mmp_@=uM3J~OcbHCOKgbxzKbiF^{sOS^2u=RtNAR-eEoA*z3PFt z#9dU+mM4|q`28_B&RY*i+p17LAN$vV!lK^zL;FwXv9$e?#5%`?Q`{JJPp-mQ`BBEi zpO8}<{5ImS~*|^()R_Z?vUw}9P-zmE4U6WVVV~m!jG~%0mOfEY0Oqf*x!b43L|}~1$>#8r zWw{MB5jC(0poK|>nQQhQ8Bt=h{7npT}CV3LZP4X`47D~=YJ zYUHM%vP`}9=2UyZi2)c<|Im9;Y7RFu8~jtz6Z5+dk%$p@g~XRW25;xr+WbAQLuS&q z`WHy$B?VkyZB!Ju5+nm-b!evaZ9>_X4#(HthhE^{ zwBWymmxIG(!^78eeC%y6sNwDhPbq?gE>7u|)AC$xsg9n|S>2}{;w7a4D3YEjyQm@{!%{YB?qi~e{ zTGml$(824{+PM8-VI1Qq)2w$#px40zA-j>>Y|6PAymcKOxV#bV2$#%Y)0!!JRkD>L{u>c8Z{ zl1GdCNXLL9miWs4=2u8Uj6CKPv=IWo?Pok-#P(O@N=ddsjxTnol z;357 zeb%%XT8JiPRsi%`$D}_MGs#&}oZ~Y~Xz`M_2z!V+K(!bALVv$?f7>{!l7fl3N6Ysv z(TC%3XBhw1X}R2?z_Kk6V;Cgyjq9<7@F9E?zIn25S!td>%i`7pFOLfe7}_-W_W_oj zDPmJ|E4H11nqoxBI24E+1*-Vp{NZ834A9VbXz7l@O^z1C(=ib4{olUL*%~F2UzzaD zD#S1RxGx&Furf{eUSEzNvJy#|jtnkh{E(v><80=jg$pmx1jr)O-{ZemNzgdBuSYq> zJQpOH_jF<=9~a<#`ZDB~uNdjiL}{P11-g!z&G0`bDTXhBmV=Ju=gwapm)0=NLzx%H z7_@^{xd{)*5S(ZaYcd4sRLGrlk)KFgqle7kY%z$jI+1F*&_Dxb$cL#rT>PtmzS8V2 zO+TLiy!3yULTH!XClG~m2=uT);hR=;jss7o`_lKtAPY*cQ}Iy%ve;*X@nBE|RqYbb z1B0`p@@D*QJ{$Bq?g4t|uOgMS=AD9M=oL7MAhk9_}1}ssm`R4e<9$zMlkJn!^Pv7(~OW}DcA=l_Djo)d~X@Tm- zt~ekspa8;7x9>q)6hq@$S0kQ!4`}4%;)5R`^KS7 zdZRA1Ifm!ErX(zwFUxZ!Z$3Dv*>`i+8@^%V=(M5dg2nCgVUPbyAO^>Dkf$H*rx<@( z$trDi_WIhzGr{HzM-j|Y#BGT@2Ty~w=Q^@)N=}nx}4)LgTtYO z@kZ26IGx|=moVtyRCjuoZOL9+^L8{iCA!21(nM5GpmCHI%S)vMOv5sLPCv%vW^!qv zAHxXNDf}rPf1z(hvZ_XBTnD`PYEC%#z12EmgEhaVSVE~^vwRgab06Zz(W0z9rzdIb zHinwFRwL0#V$jCEzRg@BqW=ALz^ZzeeqM(-w{~W~cJ6Ie=kQa>q1k#Psy+$$7GJ8` zvI7lGKh*-CzH1Lb5{_rB%j@xo@+E7sJR#r<3aCZ-FB{>75Qp3BYtiy`NOX!x*sNk5xK`U!h5GWNd`CP<>(N^E%8a+B02jpJP;3PqsHWB`C zJbPAio!i4f-^fFrvjvH0~pK#o^d!O-TE&vxj*}KUI_CS5P?u98IisU_#i@E7%`u?Xg zO#u!avA9OARt!XQNY3iaV&?66${)JyyjlPKR(uWKAk~b3(?8O5Yai3%ZXMd`p3_<# zVDld-)Vvc#B0AimlXURBt`sper(v+!QhI?DE>F!DT^sW_u#-Ou_EBCyBxbGx1)3=K zQ>}Lsd0;RQuS?dq)7w7R>hfI8Fm3;Ud-W(s>CPM1B8<~rA%N4gZ+#GouF#KKEd zxo?%Y5jHxQPbMk;FvbB@X2Mk3HG)XI8?-Yubk>C1BlV-((*2CxiX}EGjUP%lN(CZ9 z`OJ#3!)Gh3?CIDH!Ecs)_sHDm)ttG90^J+)GSe%;A_ zTdc`1`e>|w{tdOBZuZ(8v?)09p*IoXyx2&y&*oemC3ca9Yw4n3uk#alI4O}SLs1LqSd6gs;Iw<9ZDfqdsWNa)< zj`DV;kX!eX^YC>Z#dqy-NTrZkcs05D{doIOjhRe*`ru!EII_J1C1ZQu`kyl9VW0~E zI%^TbiWea;ZYtnnvr^{mk|k%TE$a#16SEV`SH@Ki)VC-s4(JREE|e>gqKUr}!{eSj z{R>#Mh7l0xQ|5_$o6>s1QxzH)f{9?Qd$=UaFYPTDE^0mVJLWx=T~ z){8HYcoauup)e(&7n$VcTwmwI7+)c-$0X8NG4cYzvjR9`AI0!*VPkKIpV(T4W{?pd zC2Gx#9nj)AuBFk>ZP7Q6+aJHiAz_@UuSqbZ{&Y4Xyia>REwuJ+-5uv4Zl7##RdB?* zl70bEwjpLDbNQAp6sZtCZ_0&^$_sBRQ$PtC3aK!f`L6#=;^+o=-`ng<=>%=_H#Sg;8e5ifJ@E2HWRTMAX~r0n$9*}><&)k{m; zo-!W3#~X6P@1{lGgvXIu6B_%fPXtQ@A8q9E598O1e@Il|UkbM5_Bkg)ndd<&AS5iu zGn1_pnuFKR1c*kH|M!-{`_^-%Nc!qwPQy_VrFf3OOHb3Iz-$RSo$Nql+hj*w1^Jh- zpu^&epXJ!_m{n7rO0koYG-r5#^*wSNc(qP(^Ip}Os^ea)dSHHpHj_j^(}DH@){rCZ zL#G*z4c~8Z{IF-6q~~0Gjh?8USK`$Ew6N;*HyjJUJ5#9ggj82Nz6(YGxas3g zkaq0+kQk)F#fyTYvv*cjqn6kuuTDjgq4-hULA#i67x2db#v{pit`x@?B-CFjBp} z&=sVOwmT68m-ZzNcfLjB1&z$4NR5`Zc5%AF+jJ)0-~x>r1KyhaPj=gycG-OzTEiCE zRua#C(5EuhsL19qJ(2 zzJTfYC}i?<__haSkW4CJ)}lhjFnOC|*|6to(`TOuR=5)3b09>-zqlf5P#o>t2gVMJQ1xSj=pg#I z?I@BQZUa7^xgIxp*Y+Gwx;bmi4i6se`R4F*6T$1%Bb8X)0P+|+CS0$mQN{fI(U_oM zgOQ`a09~A9^c7K$0NL0JQvUqatBayPCUc-Y+;%@*sgL!r)vG2hV^6(SbV-if^N0HG zAz^Du&M0oyc*VkInt;s*f4r=5{=VPOk=IAQ_yx4%RGPY~(MfU~oX1a>HkcA6Y&Im| zpPjB;eL#mw6I3^tK0WJF6pv2W{M&FxYPjGXJw0`9K6)>*)XvxA{%WB;<}RVUf7_W6 zf`3-F;!EAu7r$@0()I(W9BE$5x7W!0L+A+FY(fg61rDKE>$hJ|jG6 zd45*-E|C2)t^%Irmt{fezZMHEa+_YhqHWpz_TyB@p?2T zWDE7{E$WOLv4RDxSGt!&0(&W`&a;TR{@PDW)gEEBS2K%8E-JSESMTd5E`~Di^tID- z#Y~e6emH#>r_U3{ZshK1x5*CNsPQ4hGuZ6*L^wPsFdfgIeZb)wcwo)sWY<$ExvJvA z5{%>A_FR4OGkt;|TDjuqj|{`;Io*$6E`*Uwx zmJd=acAEM{zNgFT?bW_B25UD_`9UYAQ;IZ{S`ss#l_|43#v~vzlJ3EZl<~rgX#O$v zlImS{ADd&nNcSGhU-5NQlaeb72fdUgKC1;FaRgkK9b++ zfS#?FqfO#Pt9j|4Q0-qM$tY$kTIv||Z#nQyKu+bipZmk6PR#b_Sg3DuN)gtCUyM~^ z?}8wG>&0P)?O>lKg4BKFLpU2h4=cZ0<8`~C^9g!~hji^O?tB3eg&!w&heu7I=drH% z^d>bD^ch*@(-6kmn8e|-KpT}K76G;Ad;xj}KJQ1DW~S^)X(5^=0h1;$>YsS#tq8)= z(SxDfhF>J+P3LY**=0NllU`%gUe@?F$cbsOWrae zCA&Jd5PIZ7T-vx%qJ!s4CIrbomAK}sr*-FV`JA43OzAj5=toHG_4?c`0|xLDa((We zjb(- zJI_ov*s`K_|J=4(3tx{vx8dfaPr|aUr{`t3{O~!a12O6)C2+@jHK0du(PEsjBxF~M zoE+;d2tz8_h27Y&yc!_(gOAMAzKLeQ zLB=Fl2^@q2nT74BeN5`2=U)cUo$9a>d$H{-p0%EUQk+SPL(t*qb7&QV6NCb@GCDXlebSS$h7m=oboLS$=PoL@UOR3`IYc z3P*63j8ta(la%_|@!uNtHXm5Na>R}`uYEhYJK8SPp50I{IDs$M+GNjXQ*u=8?WvS= zM%%6dp-&NELbdTjoOpYbCyStAbU+1-B|m>0Sfpc9W*}iQGvWQTJbf{G0oTA9wKV3q0!JadHr8=N)PLoffCAUff&HtrJJ_&hNCtXIitFZ<8y$)|J&y z>sBVeh8Y9Oy&>6%yrJA^F;`E(5fMF%fdoCxVoDQ7=IGhT)WIYK+rZy2q`HiX0xxCb zkZ+o?L;*h${z~mk64k8fPUP?0ylAf;q`rqh?=g;2JlCk#Doc z?yCe{Qgf%V7ie8JGw}?4iRd8*zjneh+^>m<2{LiB89KeR$JvX_F)R$?S{w<I3 zyPvhCmR8BZZmjld-{)*mj-`_y6~m3O=8i@&Rn5PUt~Jp_k)`)f4+wgX5y>7)4uMJPsT9 zdpA^gnp;neGqV|18vZ1@7FRHeSqW~v^CAjU+JfhHCcdXW(ox9}R#v>X6cQ5DNuY?p z=p#fK^^LIuQDv*KLx<4s3W)Mid@e+JwYT@kaCIjpdzP3W*)BlXa`K$B$Ob#sTeQ~R zoy}5@WI9J~-Be4l`D2KnCEF)vvyo5C1%ZZ0?){lXvY$U*&_Fcf8UnZJUk$8P7;a`3 z4LySD8hicrXd!t7e0$f+@}D13%$Ov$Et-9HcP$=Fz4S&kOZO&4HG9s_m%aSl#`GB8 zTU4aAI{&P+H{qqIzgf$6v2lj`v#z-YLQ$r>9F4hT6!WHRb1U)3RRBnqm>Nzfh1K?hklMbUpD`cw2>tJra=V95qJz&HCcZLj)vIA!dSn*`!e7zHL zvhrS&=SWmjS%~kXRfK9^^B3SX_(^{}VpD(=AlIFeY@@rKs5Zizm z7t1cRdEx{2FK%FxplkM8XE+oIJmpmMj7iiu1Rz zPlQt9GdC)bkFNfPrK=4oDC4$O4guedf{sHe@ehA|eh7?=SHe^Nzx-qfB=iykz2nE| zT-tx}o&Q?Sj*=3h`9Ldz_McY&?+;c41IPZREGz2&Kk)xMJFG?hcfVM3BCmc~MYAB_ zqZnw?RKyy$I@N#kw}mw@(DOROxL|oPKezk_jeMrLn9Y8L@hOHKdqPAC%$1AiVpvm^ZvM-?2v5rW9SL+8_X$s5_F!GDDN92lL@y{C8I>-Of? z@t;Ouk|B)Q>$fUO%Y&=Y%>4c={8mUvLcdlCI=eX@Svx~~zId3o)asXf(*V+$3^>+5 z8^`Z}&?sjW)#_0``}ES_h8B(f@o#TjR=%NAka76q7K` z;K3Vq8eLp;Pzx4RAot-K;~$Or)q_yozV z@Jp{PYTaKULH!hTy~)9f*C=L#M~L))_9(o#I3XY;4s_dXen#dv`B}h==ijm z&->5L(~g=F0+O|)sL7F+sAhlYj2C_HSHurt996RaFE&_O0wN13pvN!GdiSW~hf-71 z5jt3Lnh^;K$Wz#E?uUtiI=Mm;gPQ6)G;CGo$`-ddK-q$LNaB!q_8Y_$Rp94U{D4jd zf@_FH(}Z2P_++>vt*FlwN}01I%tyx04^pCCE@6+ux@ z2n!NoZTg+Vy>J2K9o2wXwEE?}0CTg~loyya&Ifwd?4o}=9@v78=Pe-4>3Io6uNUipyVjtl#HZU8xf>OK4K+?(7u1b9-D*Qq~> ze6@?*pX2`fv*Ym$35giIIu)J&^!`e)Ix@lhf$cpx4cHc^Ir9iI1YogEHu3rO-lGeX zKMx>no1Fk_?d1si8vFGG5K$r^Wotn#C zARB-*NA;eRr0MSVY9gAsLQjUhVA1pTVpEN|?5m`KStu$3$jA1jqnMp82j6*Y<);>a zE#(JNd;zw<$G$L*%rEIA+&=BRT1!#`2n?Ka@vG|mDvzBBK_j{2KZM4nc!_)@==`0R zbJKBj>3r*0Yg@CX-^FCrRl`TD;t;yL=dz$;;lbYda<*_R++Kb@?;#5qz3T_n` z+x4oIEnIUnZ#6+6ucWQ6{^$qr@wNO*=_!WR12ww?InWT3XL zwZ?z%&gKvI5Q}Z{FJ>*DNyggNy&SX>AqYNIstHB# zA&k+8+1;EH`AU=4!>-%wO>s3eav!s<2ORlgGBWA7G_pTvA^4qHfSW|r7|c0w)0WEx zThBz5y%a=(`XJH)YTxyf@i(IcbFp2l{ih@E;}gEygr%yk}9aX07!PoD7vlRHITd9O0Gd~j;n9k~{g zyK{k!`f6cvWIf3AnM<=>yDLkZ((}wW$S%-~Ura-SrmF2ElT&0MX6g$Hc6HK<86R+f z*aqMC(clBDR;Hv&eO!ugAP^r1@-w0|J(*+O`L1IRD0n`62GOiTl%PM_+)_!fN} zz?c>RoB!55-OLbsdw|f+*DeG&@7erOR{m4Kc&_)SO|Ghs7w#v~pAyIgfl=dp@L{35 zYJm}=w!iN^dI)saw6*5gw2y$8e1Y#q8bjsj!60*Go;YYLzBrV2-MMehvi%@KXuGAU zJO&uG_-=r2P`MYoHgK$+M1Z66FHDJu!y45 zIKJ0CR|Ah=iXd@r`Ece9c(hdR7dU#Q@u3_6Q9jQEV)cwEZyt34>0B;vC}<*?04+$+ z6a%~B(JZkP>F9RYl8!>K7${8zU{pM2YoHWA>j-^t6fF!`yp+ZIESQJe!8kcRESP`M zL-Wsk{XWkTdv9&)BVHT8|FzfD``kXShsaa}Msd#=ac3DK!n1`Hxf|}L(V18zs8x!Q$nLk*X~T-EPC0V5_M01uBRdwy(x6Yz zd$3o*E8U1LYwA+XdKMC8IH7;~qWr6wVz6+7?gXkCAt{%DXsWjO?CY)%wyQfZ1U*DE zBW)r70Y}x2`oiyozfxhmga&WEcqJ<$h0&!Nabf4ik_vK(0xBWjqSt`DZ0meAVf2hd zJSc#iDaz$L5V=faFMj$m2Fxpp-E64^4?cK|D;qV|2~=q^?#W*^uX-9SXYZ4ha62*!!5U3r1jV0YBOWmjZ5P18~{~6?B)+rhWRUBG$|!^iJt7 z2|C~Z_Gd-rs4~)+x!1qGXio*^-6C#II_X9I3OCvNJENqe`BS8fzbvexyt#~q3O{L) zWzDNLv;8-|}1+h+}Le^?xI-ni2V}hCZXLQgwI3Jujju!)W@-*9cyDGhw^o$ zp=uZ~uoauO2l+xa0H>MKeeeyssVbW&)0gD9Epvp>zt#AKp8!f|-Fm&Gmq3I55TXn3 zLtnjbRJh2Du8NITz;%iyngh&Q_Oeo&`~Q%$HKj?EBXdkI23+wdQ3C9yv0j^DBR zqStn%ojxCp!j}c)uB{&5KSXStl~pusgdfA*+4IiC&pA%Eh2;!jV$AWBV}S7Q3!->fYUE zm+hvrQ))%aY47n|1BUJJq>ifTvft71p8tMfX=S^h=;1l^*re_gqQiGXb-S|J%fSCc z`)K=OvnwJ0i0x8S$m6b66NS;h+2(fR?J+2{Zv+z=`YTb!`CiU?3}e<8==Q}caoe2v z5ScoBsPQC(Kg-lEXLKB&)?=gZ%{{3b?UYm2e7RVI>!Ef5i7WV9*HW%yMcH_*La)7blroRr=4iDyZtQrWnP1zB15)o6q zoUQz($W@*Hpsn3-h)Ixh#OC($ZO!6TMm{ccITTCmu=-kR+c5$l;`V?i;lnRm+X?-I zBx(XPrH0(imkfl+w3KHwy@vXUh+dM z;zaf~G3CbouVn+R8vy ze=c8!ML>n*>tYVb#(d4FN^GTn(jh+<-fOV*1DT1z<&-)q6n#y)Bd;czsZs>!aoAS% z5Dtx213tA4q_iR)jX6ba8mZjjHch=3f%ot*eS^Eq-+vyJ&WL}=*nL6Q z5I4bei!nw~3H8jvk3KJSC}=4};V7KL0D&QEUxJH9n8H09TFq`9Ol1kMQ*czCyMad- z`AU)haQ$=>ke2xy0Ohxd(V)|6TS*$+$ctY7whw4wZRb7gbtq;Qdp)Eqjt9%?twlU{ z1@$NzC}ue&uWB5P2MTsuqQ5G^Q!)8wC@Yz?=BS_602;#eUuhr+Fko+8g9mdK^fsr( z{3lb&m#9U8J~*4D85ZB~Aj~*-y)3IfRUkt(v(9jwa%jv>o|v;QOJ}FxF|FITZ5QDW zJRB&rO=1sb9G-1A^|Lu_{#V+=%75e5mebjlAo_vryz4Gs)cZz9DbljT$bIB*#9v3W zvTCQDdZG~D+n!WStuN<;54ZD&+rPae4{2O=KC@;vglC~CQupJXp%c0{mn0Fz7GTH{A9-=@Bwl0(ypo~I-9{+ zKLZH;#t|n&R`%5B+vkQ3E#|6|CXfy9;07MiPue)qgD;g>>fWUP?akOK*>+M@Vr|r$ zb1ZaTyK23hYw#Fk9~nsHi)NDY_1XF1@ILL!<9t!CSk~@oajhdU zaFyt4mvSWgKyP6(wF`bSe-1(+%*tX51{9puCIwA^UR4d8YiRAuJ3#p9) zZgF1)?u-9J1**;y(m(0H^WIA?Hi4*f7~JP6^Zo;Z4-ig@{2q&hD6<4URg#mTq@!1} zWj40lrW`z`mud`6;+O>i0HLjGoXiLAJ}FXt-SKv!Ra&oNRUAN7wwp^1_eIp0W@dX$ z4?_Rot}x5XfIOCQxc%=lP77(JW^~S;nbeKtSY!_MarzD4?Q&oeg5-R--x*owwe2X5 zUc6P{l(T&H75%Y{%L`-~&Uyn=sd2O_uYX897NtJVL6i;OH&6xt6l?Y-4$%*op|)*r zZJYmQxNtPTFDF;%>{Rb*;NES6`e@E+xB&(6QNQDLVP!CH`>4q63BSfdKZS6Rq|lpX zQN$Q3QU3#u`UO|-Ih(Wny!;fsvh|Nn4eRk9+B!GuiR%9Os6^+^o~h!dpvm^<7rBW8 zInvDKnf7x8GXh^tEGwQY&};}#y?)78EokAqx^ZI%Mo|s&qEFl-15EIi)OZ0OEhULJ z2t((>TvZY9axa;DJ=15RQOu%aRRj~>W)p@)2?lNv=-MP3lfz3oc3`MnmqBb`_)MuX zPqP}Lr{x;OA!i#?@}j-*??;c{LHY!r@8C&>`z^x8UhAG)Xv_10*vdTt!X9_~^(dk_ zk$pu{3F!rI)dW{H?F>gD%KkUPo7XYbjl!C9yYs?p!GV*W{Q3SAJ}+QrWRAvu7KlPIo#qWLB#>v_F-PoUEeXdeMB2u}nX zE924c+=K$a2_)3huB&gA954&hi+_Pkp-x9PLedxch^H$8do(pIic;1A_^KQ`I7qvf z+}et+@wBA?N$lWpa%BJ=HkUN-2SlS1=BfhycZN9h4(a?X?G+Y`h{gtL< z8~%owAJp)VHA>15m*-vKm`e7QtzIURv~_;>&bOO1IzMvG3HPnwN+ivp)i+>9&xYHd zfke_Y-~iC%5UIGA)EzPP(v@JJ419EOoR-f7mn`x_ruT1F^v3V*5dmisC8{j9K}Oce z1Z$q4+w6ajt$e;h*CGj-wY{n=Kytr3lUr5)MTbmDrX4ctk$X}-$UswwByw=fJ#jUw zAyM^YOhf63(&H!OJj2WUmf*TD?-wJXsO6{c+p~To9{*X9W!CKyLr&HGZtvLihQ4wT z4+%PDsO5CAUKyNr**#G(94l5 zBx;aToHWqEMB(+2N}I^=!KlFI_0H}28qZ}%;GsA>UPzP|_wx)latu*U&=3+!9Z)m! zoaWm_)xjn*hpx?}Z$^St53SuiJb%pCd-E^vs{KG*gpZ2e+Sr2_S z&eSoq@-f(oF_p*7v3DeJY%+$>vz63{i~+jE?E72Wccidq+96RT%wU+vIeW>_r4#ii zQ4Yn7`YAqvI<*Ln(w;PgzGPHd;&uGpC;t*2$OHj%hxGdoMNC||{ZH#`I)gq~tdNGCIR4UHiacPTdul-$OISA)PFMx3DUC*Y0V;`}AZ>P6&~{7IApY zm`4Qa26pg&UG*LQ{{-Yi)(+kJs zhi257I7(#q_cGsQMMK6l&7nse_v*X`!8a#IbYFB#Z`!R=a^A{oHQzJJf&_Md0Z~}= z#C^$kGap1hHq2*Sufs=OK_7+1Kt8&2H$qfBxe#QUT{R|t#o#C*puOjSe)^Qm#CiOJ z2raTi4BVVO+IV!gSyN`2G?3_1G^6bV<{j&eg#dH4jljcll5V5u{5E>E>`XLshkpoP zqH>>~A#;@1TI#2^FW-$m9lF`MEU&a7ph$5ZguuD& zkJT=0aYZyTSEC4}-!=Sv>mnL{c94zMvt>28Y!^EN$Ms*nCoph`^p-XY90YUU$?c{^ zh|f6%UX6@@>sCj}R24W$wcTsnRIY5}+jDr^LB~vHdhWRefrHNKlzZCOx+TAD5!yqOx^Vq4ZZ<%3T(h2H zxG||`!Tel;7+lm1JSVk}N?0Q(f_&25M+AWn&?1k@w_1Vb@0L}MC;}htY;s}wJq*Kl z9x8v29OM3oH%#7xKH@Dm?0tNBOeS;2JwK2}-IH|Br@9ZT@fLL>E3 zp8KnGm&7-eqU^W#K2?K-?6`{}fStAJ?^rZiks~A*VK2T`gs%Z`-lABLu6yToVVwu1 zd;b)fXib@3hC<^-FKo8vm(LBFxE?FAG@gGQMYS|m%U(6pa=86W3d$3VMOOesB>Ub1zXs1P316Hlp6!A)WfE%Y< z#tYI{`r-XbN8ch1zCQ4ML;IEk_xtZRF^W9-R?xY+D9FHis;QXqA^N5CdRmbe{*4cy zm_K|ar-cy}q827j4aa*KXY9Sm>kS+Ck&WC0S=sG^@0IoT50!Kt+i*=vWRd$xJU>u1 zm=HOFC!r-#Kjj76;hCX8>XOT5H+R{=1SdyM|fXsXnUe_cY8DRs6)Coi-qs~ z5d`v-S3&xv*3H?nc%{ixq~yQY({9Kdp)NNk)0?Y=32_3dEVBehbiE8IJJEfrVa?>= zX9TFqxYz@jX-JC0+>Yko7u0_1BPWMT(u|2pBHsAg}0p3Zp|+Olol=kzI&e!{IcBWuU+ z7Tc3jOf0HwZ`(k+KTrr8dWVObqVHWkInk%z^Fhz#Pb-U_%kNwNLU5<`az5Gfzx!}| zo?40+nf<7!WHaet66ER7bX~HospWg|hcIJJ3Gwt76`-A(#0;k3Hf|$GEHvkce^#k94}ys6hy8eP>Oq0>3Ddz&Pi|yP5&WP zNe5{Ck0=gqZ<`2{WNTQvLr5ivWKS9UpE$I!r?V&UayAFw&fu%%JJ!#!7;e~PdmNDk zE9n{qO3isE7#~_yS@`C`tleqckkmyBY7lZ-k!ijgOSap?Z69^D(-@f3$Jk4$HAkiZ z$b=5&DBwr75su=fPiQI_B}EzTu6Jq%!f7TR(o7HRnYJh0{ted6o9>NQ1CeD3FQjp2 z(Eg}I;lPN)<}T=>C01hQ^Toz61%6eJ`*NT%0iukI1uz@>GM+QSj<&zVEF3)d`7 z?%>*-!|*45_nz}(<0b4qZ^xt%YY{fdv8Vp`CkAwns3IpX{oXHwD5E@JYd&l`zK&tf zSD3~8i(Y?U3Nh)lc)y-vs~%}b#J}WaL-^2_q1`p8yYp(jGX%f^O;x5UAaf_7inMob z;uXD~fnNJb7dqoN5r_B*udV69zO~fPZ@*jZ?%@n@rBeLke{9x;Z ze+mB17+34^`!}WhxG7V9X61uQ4@I3>o34{7)eM_SW5xNfvR#G3JErn%)ULX_|F&0R zKjrOz|LOj@$?37$o_XTCIzD)Y{L@T-z2>+lOM+b8m(DVO+0TDoN9WIbSO4MR8m=?B zkq3LWgJvpcUW-h2`4t{^LUCHB)u#!6KiA6FJlR-s-S&I>!!_4~&z$5qsI&jhrOeO0 zW+%Fu&dl51*>L0i|B}eC!e>vv6pCp?moC*$d$=z5^iE&}v}uc0M$P-Z-+|Ww?9%L& zFjQKf^%*$${LK4_3+pW4Q2V+j(|HX!uNbjdr_RumXK9w zJ6E(}rR)7ym1pMtvdFw4Y4zuUu~94qU(3`*Y=VJZ(OpR7UuM<#+D%b-!OZ zRd-hEE8xo6(;hzi@=e)+ci@)XVaOLi#UnY+D}?fmVc z%JqHqo2}!sg5#pI|2MLmh2O|RS`g*Q@(+0T#fq53 zh9=9=BmpfsM>8F)(K(tVMw0|upb_~$KLxm_NSK$lDOEU*jKJx!IhSJp>*ZS zE!34O7?4|-;4gfczY?xop}r#hLR7_BcV+yh`~3l;rcE(rk;Pus?E4J8*H!qXA|~QE zU&Z!bU%d70qttrMH%?Jk;_!)dnRRR>)ykA$r>>6Ca%sn~j$$n7gYo^Arov}-Msv?f zst&6U*ZJ7iCQ)>y5B^6!RE z1bFbCB}n4!ASM(ZeA7G3;Ib>JzE|$B?Td?A2uj@zq2C4{e(~wjAFfkeN%a#Y1-?d$)>O~7NRgN&{Vh7)C;M=qZqwS3s< z-+H~KVHl%dq}Lq&MNxLjnN3jRgZQOSDdEShDPr7O6~415fiF{vc=cUc*ps>Qna7*m zif?~@q>(LdpuI9pre-L5xs#=h{o-(=txb3`f+=IHZTe2l^?}{(?XdecZ=0vcH&b`g zqnJ(bE9~Y25vJo%-@8=z(t~^wE)|@-7U=P2>mdw#lM#M%)hDP8*)%>e=v6vo)^oeX zhz%^1`B}$y_MEgK1Ep!|~oKyG@<*NU?#xcBOqwXV@bn1(WWt$(*MB zQg5S|1lE2IbUy5MbT1TDB6zjJDGF(Kfn%%GTRRo@;j;dAp_L8kZuhL~ZBUhv7 zc`d9;0)Dhe&*ynoJ%;jxh0@70R@laQWc@}#HmBVjYw}=a3bjY38ATHeQSjpq$|${j zQ`H>l)Sm&fidy9e$Z>GVxV52WCew}yl6>lc(m~{W%+o&u!f=Hx zgJGVhjY9Fcb3#`C)#VTnu}I-bk%SocU;_{Laa8=}r@s=dfKEs}8?Qs?sb0b z(M3w&XyDCLbfZwW$q!-#+`sjF`<3ea37_5b>{`#Ec7P)0?O;VA61=5aqxNv=xz2=n zZr+!B9qe>3irD&HWFlBuN(?(9L0Gt{<=ETsskhXOxWZ{&_v5yHbM&j)L&M0Kwy3UE zTheHgiQFu{y+fML2wGV+O@wjC!sZQ%32#`fR{2XtwcHuoxFFYj`(DuxLQ!xk&y_uQ zvu?eHk0D!*VRST<`-N}B(wz!)xo^){F7U&b#PEK5pX48{7-lLc)@xl$2fTfJ*R3hyu6JA~O3BY%$R4)nF=_}{F*>G6g*@kcY`ytgTzOZ&Vr8_f zOCckO1y=i9CX#X1c55@^Nb)8DQFjQp1$42yD0PNA0?MjWOa2l|B8drB`<@wEJv>WJ z3Mb*W|2Wf?G^yqy9mANOCYAVnZLCHwrNEZEWG}v9@`ca2R<+#S2Dj8JVrr(vQ zBNNWd0EuCw>k`=h63=HRVb~SJGB4+YPaz%pm~FrgDSLFAM4NKxc)g4Ow{M|ahSy>g z8CHF`C3E7uIeV}56wGLq>u%+C&4-_!7gddYblEtY^o*+*ZT@ic z?uv_m$6RinBZ2+FZ|wk5E~QHMgE!yVN=^FIK1VMxR@Nl#ojp#K2t*78>+)<9Gh35E z5BEl`(u=S@Ep$KqsD@(Dsr-`0dF*)>1(UmF5SUe6GAMN3udLXzNAYZSHVSsfQH~Ve z)BWizkWXN=KqH7OQZt&A zvwF3Z4od6xNGol3KgU0FQm8#Yb8}ftkJ9#qb;d3~O5#I7Yb5-9Ye{2UC83+Mu~_vd z8}+U+Y#y#6!$xD}o4vU%c4f!)1b;;eBKr41MD8^5+3+{|jvkcEL6m2^|BjwoE4IC*?HG;)E9Kp@Ld!6%Nah7D0$cM51&Uo&0wN;|HmUS)?WQi}=UGBu~1Gy&3n&lhMs-Uar(%GB>l#PoV zNpEIJC#n0$oA(by#n@f7fp-rpH5(k>rH|PY4w!_GmV_-J!qp;8`U|~0W(Q|R%RlD`XOfTRODLXcgjly|_0H=P_odYdu!=!ZPK! zR&_~ljC#pNu}ViqvHK&hFsghD#*#DNGNrcyaWqR#^)4=b_2y5qV$0LJx*e&aVXYC9 z#mkQC6Jkea!rD{Oa`h~tIR)3pgV+2i!+cE;ja?BrL+?kJwU8>NU{BN?h^2bw9oNPf z8b1>iwUs*0Q;_JP<$N4ea-gbec~BGe(NeddHss4%UUj{nUm`mb_(xXVg^Yu<4*Gg# z^I2iFa;AeDcT2ud35&*Zn-LlF;lk3T&f-0o6%z%J+5S13UBc&5XwEG0D9^=oX4{SK zZk-0fKXWh)X#a{=sjpoJ&zZwk{}#&pU{f-N+alYXWG}))T}l3jqR?Q7>T9m&k)(jgEAX__;3Bf z!Um^FmSD`?<KRK)9lt~%IgL(-nM6~axW8Om!Dp|GZZi!J`*Q3T zE|r3kTygV>Zk>qi$_2;LyF$*Bi0g5$lbjq@oht<+#r_IcDg8jgVXfvFKSi7;)m!Pn zbZ9y!S0;Jb&e7G3SnNxeiO6P+vblrOZw;45+z3KSV(}x;%{wFV+{pMhMWVR!aiaQTgY(d6o#RyrsZ zy}eNd{eX$9zl2zPlTgQ65MheI{(MJWRazjSpYOzW?F16aZqO={L&>fxgFVw_M1_;J z)t0YQm1Z2mvtpYB-;1$dJ4w#0dL2auV(8Ao#Q53SY%oo4{`m2a!To`XY-sxDT-}=1 zPS3@y2)t24ldqB=1YJAKtYtnZc0Q6{QbF1VW=6nTBbXrmQ3qvR*lpcIiX%L2&2t@b ztEPT;sY1TYmCg#d?k&)W`MR4>@mp_vwQx!s+C8+JpUK8rdMq8U!LHx_giY_~ZJR#y zZ?m2hpFNF%CY@PgKfRNK&Do=M&vJ`C!pLcT&A%H*%7t;1>`dQAAx!$98459PgI?yS z*t4sO+s0)RI?2;U5i+Soe{JL)Ev5(MfnwJVD1%Z1Y9L_S+8c&=-y~{BaOOj-8=S8r z9O|CY`w2O%X);H`_O{&E05|VRDvS5lT*oqp>iEy}NqE@q@=)B%#+Q69Tiywys{V0F z@FQtm&%8p9T8mLf_6Fv4%ahl0IWLo|Ju01&gaBTG1np_&RG%Cz7Zh7hIkCSzu-4iY z|8OIY+bZPR4QyvlKi>!WFqCEBY}y6N%}|Up{D2Gfn(yxN`=DB~sjrk*9LlFGaoC|@ zvM{?+vCWEcJ6$F+I8Un#jn~krQ$?#&Y44RWPm*M9nI@KM^EyYxcBWF&Wn*!DPd5eIiLeJS%=@`tBJ^F@U0vCt0)~ znD6qmg-6QAaeq=XKLoLd-KF=jo#5S&5~I%R%yFD1N?9WSRLlU)$gLs^3-BUMQc`4QYtTuQ$VG{)_~9M z2=Q1tw87VVYo_DT=5%8e0lmTlKO1CvklK})!vXcJL9K{-gs|J*N(hgxXGgwrg)O0- z+_p~sdXC+|`gD-NukT$e+!=BSbRdJXuc%3Q<|I>;a_&>Lv-=WZ+#}Lv>Q->HyWA2x zkh5AkaIjjIZokMLTIcNqXY;xru=nL8JDF4UW6C3|PX#qY54M6W5Z zNRdSw(X1l2S%5$FpmQoJT{fyE&Y-O_K2ywZkA31gy}kK3QfF&++p1u?!MDzQ zmy$f!AfW1#whs(pDi_77ldhMk!2RWSM>lobGM#nG>Q~Na#QAs8vIr4-xQ^xT1}ye| z#N$evN6yVTF8)Lr*QDsl9I=30=tsHM8+$aQ_B#pIhPCoV*9`!C2%f3^1@ z7%{4>Pk5y1*0>_E?_>P2EcdI0kk@hLoB4sw2ki=1@w2mKE9u~;UTM-{YS_fA_veoN zBm>DKN&1YWGCLD!#XsMl@~woA^BXln7}6CB0;rlK(bq?&ilhGtjkt z2Dw;wO_<^ezi5?NN&^6C{@{7j$qk(6d4pR4SWdUuL_gO1-K`o6_hlmGHhr8#YLs_n zda>N|ycYNVqC=*Ib7#EZJongCn_c<<91;2@aIC^^G`N{8!zW73s%P2u`@1vlgA`GM zJnIy_!IcrEREdt)ei?*skM>seM)4P2u=(v3EF99NqHmLM_)4WFM}XvI#DKHe_OREW zhf%t+VDool7y!_tOKhST^ynofo0Rix&PDk7>$C5-&}y<;e2Ya8SZ%wd-pa5|%8&G~ zV#4Mi@>`LvLh!e=cE1#jH3{jn8AL zZ3o+S;&WVyPGd{JsY7!;Ou0q{yl=2hl_UCioPS3M8niY(%hGo*^<#zALfgHBI>>xy zVrhb?{mfGxWl|nX@-H$$`~59pN|}}v$73CFWdIa+*zUHf_EDr~8DGVzg9ugDg|4HP zQ)B9kVw>*4E1Wk|^xK0cC||~LTNr$k*7V_20_V^3>@YL@iKY^G7!<~@BoAm2?>t#AHoU#5J?6p=^Ck$X4wVt2CMSBrz}*pKwj@|&_$6*wD`E#4AA zG?xa*=4acY($zXh=Q^CD@~BJR)JsTPqF0>RIUm1DmoXSIR{FxvDV4nH{G3$KZRe?~ zWG%u!++|yS@$GY&!>#$K%tTk2&Uiix^m02VOSyg1#jwol>8dNwps7 zFFxTTmp-duL*GDgcGo8%)MF*~BepGOLOb>R2x!1sfv@+DLpq@?;##nt@d6#Zy8P-C znFR_MmVQ)R54Reh-ArMZiEJu>T$oUWQ8(4xm!j~)Sz;}=4E6O1rBWHy?IvmH_7D3$ z_|sjUp$?k9Ejck>^qH)3!k=5JUi6BuhYOSUY6osoA)-JL3-em{vEQ53hj_21qP`k^ z1|@@`wTo;+uxek5&JMDRSmf?aHR^iZcu(8MV@GJ3cn)5ZKLp}(9VF4luQr@#D$4E< zUnW%JeBAtw2h&5;`7-_D{=|+xh>8M%8~$onTavoYGpgymZb?3)vlh zQT#&c5r~AVJ~~KkKFzmv)KhHGGE3UN424ovLAa3n3%7~8m8Nq43Vl?q#AsK@sRH1YdQ)s+X+{u`N`MtYtcRSTU*Gqffhvrfl-2bJx{6W zKsZ;l>-T*L7nsYcD2bik<0FYI!0t4 zwG1*>^99qQ@k>MhtjL*c+=#^GA(&f-+Hy;xVATo2DM@|a9a&^G*e|S~BFcvQg)eA6 zl$J}?*K*Xa_RKJnZ|H2OG-q?GZDe*QOPM>(9^?%o{^888#?<6`m)OX-Ep0~v<$}_k zi&D6+q*{dCp*+&mb>9?MRN!m-bHDY)BQN0pReEEIBxxLmyXzA;i~_Z}EJ7wc&p(Jr z3ft6OAH6Dy8q2G{2R9ihPB-V;&s9j|eS^WtXE&=3CGq)pE&xJRe+TD?ACdZeQph7s zW+2;kbgTeW1fs^yk83To()L?++LmPj&{dvG)Tln#Of&9zyY-XI>bm)8#cEHD+kV<) z6V=UUOkAde;Q$v3ZH?FxV%peycOP3g$2WEj8rp^hU1iij9%w63Pf`(K7~H7%;b zKof9u0@cSY25qFvJA7YN;A=VGrzljkKk9#<*D2yvv%Mb4@#iypst2^={*aGq>{wkJZD=ktxzaCX zE1S1T_*KwI3u0^Y&b+7{8;^*9i`T_SYB!reBF@0yYHH)eCe%%OGD$K-qWo2Ep&{Uw(Ha z@m@@NL*m%AvG5s*HhnLbLBAxu)r_Q}|S4{nbK`ehB zv^3Tvl?&2Me#g_}r55Fl(_kCja_x%ZjP>6^d&ydJ_5C*0r2Q_92(R9IP_B#{ICHY~ zn7Av&80~)A0GQRg%jN!=Pk>i?gLA=pX5$TmdTq7wls9mD6#`!iePQ^t3i|VHrr6lp zoD{@6IA<5gmh|NOEd0?)Xv3JWtX>@tI{A5(aIS8tOtE2`;Ro&t+qvSrDEQf7;R?47 z*8~^r_YkCX+4>I3ILc>IJ}2V`%$+7(e%|}!2KKN4BF+y}n$qDq?uUiF9o^{y)S2ls zD*!cHk)P1jCMCELyijqzI!Lmnagmo!#%pnxzHu7W)^OYP0yo>UF&8ZZTIIR+pvvQ` z%j=UUm|<5e?QREOv&9+%_AJ(SD%KUolazgLVUnjJO6fARdC)StlixWdzvT}a z)kpXA6PsQgHdd^L(Es?@pQY4F<#}>%ag;J^f1<{1wzTf-&4<0!XU){x8M66M<(F&i_W5TZiJp@2nMD}lnhYpW3-TrWi0mN}rE=K4i_Ltn_AE=KML3#Z z@KuRKz`Lhy17<@QH#p+wdwD`7aLHOz#Bo;Zp`{Y_q=_o=3;ig(x znNUL{6r_cr9dSIP`m?LgoG@g%Su~3^miqH8=5OWUhwd%*Es60zH!YcIu_?O!#}q}R z|9-j6v~N4x{;jTfKE1mlA4oxwpIb+A>jt*2H)whkzWgDwuUBR@$?8wc61qphKYYap z1Q1mz&`BeBm$_esj19z%$Wg)iwvz&5rQ+S-aO+a6(pdm!X94x7c(n&K4)mA8vy}Q& zzS*n^6oL8ycSCQUn-dwMjW_Ih$pc}__{Y+*Doe3%Z%y&-B+egh&!=ZH?0xmY0}zEl z_-rH9o_$}wwD*f1Zyh8M(zSfr!Ikm4@hU-Lk0~br=``SA5Qra$r)ia~A!|amr2v99 zW+G-8NA#q%j^WNP;jN-;Ah0_m_yF#VK4M9>-|9ChqrsV%p`6m>t2^|qRWs|!X6Y3B zz(yL}^O=^I^=yv2M!igdLbKXAL@-e~vn%@g8`1(+>G|%4r2(@v&?nRFn7)-^{7y8- zseCCa(;_mK+vV9;SARMh`Z%86ucv!stKXLk2#Ew0V~tO?e|F$uaNx@2P_J%gOz*^$ zBp+2nsZrzt&fT?aOIw{*AJ_KiA9f9dw}i>d^qhYvE?}@5tZ@qxsTx>K4bnf@c(Yg3 z&6u}vQ^D`f*%YNZi@!j{70#?!#`JSPiJla3gVp`zYkAz3D;j;soDUx6CkI%)h!{^Y zM)mq0OF3AoE6X$AjOV3<5rN%|A{5+M6YehC!v=yDHM1=?#eX{-1l@0O=mV+Brap$v z$@Y^fFj!^(0O+xoQcj~D!ZKk(1CnIgE6-6+CMU-x9T5+0y)O!C^t7@O*cuAYjF>rZ z+^URzd%Y!;7ROn8lxa~=QPM4=i3E^IIE7vYo5yZCQlj%^)@@AF$!aFyi@mfYLgvvb9Q$-Q#H=Szs`jLoCn{a)6ERL- zaVV~*HeDnkN%UHSDiITiAi`19?#BW@0IU2D30g|n#@Ac&{2rR@k8QN%3k9}9DyIWT zxr4zG9rd^9QgpM}>KN$GriGS@H9Zf@2NkooUmMA%h&^61Wf_YTs*73mFXOsVB&&8h z-`B{~PrmwqBA*dy%$E^#yjR*~_B8EPs>BcOOh_#=#DK^ScQld}4H9qFKCYHU^uqR77v)L+RUHKTJbyPXId8Ly<~r=PZ~tb=|87Ch&$As3DO&b$haoI_J;uu4e5i0Luk-ecl{(rXx#sBBoA$|e zzLUbOpuflEMLh(xv_i{3FHDH2EB-t!gFRsTR1c(Ht^~J&Hrgx*;L-$*^$;|s_-OJ% z_Y#CjJr600IiF1IkS;?w3#u7Kv)Okj`R_BI&XB`f-ntf^8V~mPkGL!#8N(q)^9-+D zGc35%Gwb*f^wDbUHaiA5m9?FDi>MzTPDjZvI0J#?f`&}h*F6YY5?OLA=)(Y0qY47O zSI@T7@w^@{)xmT0!r zao0*MbzG`l?Zq*`r(mNh?rQd@+kIefY*hoADlMG}&&H3I2tc;W^&@qK`&;I`wifPe zdkn|0`_WXos!hMNY@tay;e1*;yt`H(KRVXlo(GYlV5i(7uJv@WyH)Op6qkR(qb$8W zo~>R;z~=X3mn!Kn5r5-vnf6(sDXLob<)%StO=(mT{QoE+$`^AkT$DJ&**!HD915s3 zs`gLxq13atHsiM+|1nm64|`N-&_<+by5@uAhAk;X3DsP*>34**kN3_JZjtKvc9D91g0K`U^;&_AJK`?N7*__Y6* z3_XETvw;kw3DhiI+ScT?XpZ|r$MJyKAi7st6r_1utxN^ONN%Xw;v;3khp@Agy}8ru z2qufF2d6q1lu)ckC>Pe;dYdradJZ3K!bng%X)fs!U~*cUV4LzyEq;4wtMx|QPfha> zeVvapddifyEWPK-m%Yzz2~1_$mF}8!^6}JwPE?Xpft|ZBeI${m%7f5W2I+(RvuJnj zPv4{~h0jjJ_F|ASvEEf4$H)XpS#yi0guLWdR{}kH8Cg2yMd$znL8&!-zSU%+KU6qs z47JlYE9)o>*Fa5Rvf6)(Q`5(a9bPt4dXFws@WTwkynWEHrX?jt5bCDoWU$TNs?!d za^H)1%m&BWHJ{_t%IOy*5Vl3NXcI*C{_+o$4$G7RTp|pTGSl5eTm}O`gZWIzLcmCdAg=JmF*Mkc(*^=iRL2OogyQ=9a4Jd-k#^Di zF;{qT_o{`*batPQBl$>;nYzd^O&%iU20kE4P`uO@T~D}kbYeG}O%Et01Mdqk5ks#S zYN)c_kk$m{zqQkaD^BFO+<6OTOL$!>&-&VMo+4QG)-U3OvG5h_1N_v^*7n| zj&8>>bmtTB-$L=;6aR^n400Fue)In0EtLKG#3Kz7+HrA@tHzDN1%{pWRZUP_L-fuf z$Ou%U+5j3v$I_-&Bo|nOlJlG=sCR$&?VM%}#wXRh(-*nepB0wOV#rkcg;bEgUnNfM zQ_uI0IUWN6_aU$95I#`qi$o47k4vV{K1HVJyJr+dwwKJx zwXY(ZQ@IAprCDL?L*I9uIhDl{F(BW)IckNHPC%FHM;%&Yn|#~;Lc*cbIaNIY_*!X} z3H*D>gBIxK!Z&9uh&p!4S?xtf&XW|2vN2p-*~ObbK!wvlkK7;l3;1bc15* z9=zw;9dvAFiV5*fctup+4V?FmGMkvNdg}Skgos2zw~>Ke_)gj<0t+vn-nldL?Eb9W zk;o3MG^w74$Q+PX6UKKl(<#R4ueW8g!wiGW_O#}8^eRIZ#%Se#_()R7MlwfQXqAmn zD|ZJ%_{)f#c?~}+?<|b;P4GNE`TdxZq#iQAMH~LO=&ko+<-sXTSQ@o&7(LkIQ_pmg zvg*jF4sTmi^z37ovP!EWL&GJHK_m%j%Xsgjb|_`l`pRTB47rNFk%RYJAjs~(;9%ok zagPcwiC!K3GpDuS<)MPnnIvCkAS1XfM3W<{>I*^!@>~ zB3-+}R%vwX>yUmty;zXbZ|}_%gK~Qz9mUCSWZdSD1LRz?f}h{aR7gZvRaPpJw)X6n z=7!hOn3AQtA8vixi|?B-U1R*TP>M3@qU7izUEW)UpkiHEM;Q6gmQs@lY$E2zyX|q6 zcGyoBiVoRNQtZrbMEl?nqtBe(_Rk*2{_6kbS370ILzA{O+a?PrL^`!2H^$4*rKT;t z>1V5nfN*K4Q%w?No4+&0{M4iml*ZfG!g8z488eK_AIrxgkiP?wIIUsyK}}WZ$LxAP z?MI3{s!pHw2>H5Ru&hKs6GLbK*1wnA8l<=7w!hXwXP3W=9w{};G#-}PSM)nFY)c$h z^X@V0R*j=mf0h+tMi;&89KvTr-{FvzrRgzF$f~Uo%VTxVR785d9|={KBm4$Z_8;0^ znKPi-juie%YLZ=Illl|cdhhQY9Ka7+h$`_s-6gJY=tJ3w6wil_xRts>r0X9CCb#8j zmO$aCv#Q7Pk^N&)Of1iwR)U>3f8W4CRUfZaA*UN!2hIK~g z6U(-Hv@=B&3?HY0+8F1)A*hYD40M7bkZuU*n%rzpKSsIkGP)%luO(E4@=Cu2slTY% zTsi$J=-L|=tsSq=ZiLhi4ouX`$G*UxfxLb%(fGU?wc6s9Rd198H{HI9rfC?sKpk>y zuxKZhVvw|^-PfsucnWNU*$ay&ZuqCB2Py@TazUZ7Jh%VeRlIQa2f89T)wfA^DlTY% z6CUe=lUDCYsHA@lc90>Z-k*V<04~&p{cSY9Bs`J%0Wg)sm9m0Jtb$gEPL+K~$Ro+& zaqSXA7F9BLhq~ySe}v}$=32bYaf}f{3Xuauecq(t zjaw*VvWSzzEi_W(qT?0MvugjlDTu05vTo!j+sgQ?3 zWA7JQ@V`W-(gIRlXDv30T*!TRPYM`l`~}y5RkzxBzxslklt@ z_SQlWaKYPT+$xn$%S6UjFpphT&Dyu=kL9AD#s|G$yc|W|tNB6{5Z~nwsfP$wIz@pp zoHWvWB+W1n+FLwZ1)4u&)3Hg4>vx1a=#P<8o^g=(+Yv=p^**Ifcs;w)XRf zLmM2=?vHjUves7b zdKPS_UjCJA@sC69)l7TApuf-$FgC4!f_;hpZFELlzrK0RtdTfRjG%r!nYjgD5xdF% z(Anu@-X)bAJsQ-lez2V}<0~15i>R4>&(oP7dY13*w_Udm{TWE3%<+@<06zf6OHO*J z9er`f%lIDr6M6W`jZ3{BNa$YR0Fj%q4f5~o@PF%8{Ne!O7ok-Bhks=!{nPwEUTl8P zZ}YpC@D&$t`ECTHChig~FD_&H7i+r50t_joafI@cxBRXPa4QbJgnqi*#sjN|0zdV_ zzeMnow|q4T3n-RIXbJv|uK%<9^Wws$J`x$ZUG|oR2&hkfbI8y=|Br+IXO-VaW3XxW zSUUGEd&};C!`^5VF6VtIp8(X1Jz&!wLgQC2d&>vF_xpD}iMe&jQ$d|_A(uq(j{cpS z_;2^P5%Yaji|2xkd!c9hM937`@P(u=wL%XlLMFSyXira0X8x&>QzSAXx$M?n7a%Hk zn@8f-f<%JtZNrA~_&?Qu7*7MKPRo4XKDg{2-g18Qm4-NPD`h~JT=>WesO{|MIahw4 zr2ZhTgG|J84_;CRh$t{$eO{aujLSL*b#R!g-|GFHo%~N1*9>&UwCwRW_O4#?G=FCT_NZG_ zgn!8uiRj}2CrZ+J?f6fj`M*ApUlCWPhzo`_ur9eGYW73+zCXWmrUg!jiCgW`UhejV6ROvIO?BB*Ta6F=C?OfsWxdu5 zOt5buQ_O{T|Le2<)1K&Fgo4ij5tm)j{|DyadG~Dj-?;$)vh4pcjY|a3|1ph!IW_;= zU;lq;8vk-9|8LAe_aEZ_C!QypexRHzy!Gn`Mge#GrGt}Vz6cN)0_qxXC?JY|y7$O; z2=5IbPz=v54djGUi(WfUeOC9MPWLabsF|EL132yg(&aw~kpKMe{{grO z;%(9^_IsC&=>L;<{nhpUPu}&{!}Nb+-t|9*@FzeBLeBpbApR1@fM@tWUw}AJ6gh8x z`=24>fAdN)R^(`B@zF^z7U~5rAK8n4rhoLJUw;LUQ&P?C1s)3MM&9^S0obdV(faJf zh2{ibv+K^W&%c*fykCJF^}!Df@;{_&Db*lTe&UJEcjezRwD`bE0v)&g<*NvCEww-qKU9v6gvlw~fM>UbX>2^)8 zIcn7q-rBY9;)$}6a*mdx_ZJQ;w&!H`bv;(}FphRZe0P^!swIN}rQ*r)@}^hO>+t)$ z=WP(B6nnm^b(6ldkO1M_hzD$Muama{T@dXJY~qkAr}b84MM2ssq*dhgE}`YkB7FE} z^k;CUsIjpCH@~gc<9H@DNGKF2W?E3^XH2xRk>O{j$8CLz!W7h*L7safM#c7vN}mYm z1Hk|lbcupOJwaiQqaAkrW;~ZOAXI1Jv6>J7s!#8O!^4rJ zNER)b?Kv-uABmP>r{_W3*~gNDQA^#)Vg^h7SzG>xqjUfYDxu&WhdX_Ww1BUryUIRv z?rB~PPwiUf$wr+Qo}cUZE4I!Ts9XK|-&6;tF2-Yw8P^MKetf0(!ZY44hwSXg9dy*r z&W^2IHhy`Tj~4Zo|h~c`vc` z0W?6WK%OFkQ7!mYy`T3d-woO5a*YR9ucv$zdEp1+OzSPT(Tm|Siv-hG8Zlq}{6g{w zAlmyiqU#UVYmf7B3wKsPUwC5(Ph`B(!CdjGyWT|9@dYJcR z$oD3T-8`J~qk8v@L57uD5qI zG}Js*@0b3z@pEsHo}`&1bQltqCGW?Q7SgC@Qh35n`{q%UvM;eA6;k@#_2XM7-d(xC1ZJfaCUlATS(Yq z>pFvO?l<1a4Jr=Xa(8~~U_cM~*q{4KK9i|`0Xy1Vr6^oqFLi+p!cm=P zZoS?`N@#8WdWkQgR6OS4Fo^b3!dsT3WVw*qjrS@~U}}iaP&>kF>QlrPC26aX_HqxN zwN?|!j!q^}Iho5+%^!VXkHUZU`8&ZQyq+oInosAOO;oZ!-rv9=S)PXCW`M?RvB$Ba z)~*2{ka|V-G;!Td{c(i?sK$%eN2%ZkZ@$j%*x)V#=2;Wc!~Jx3$Y6OeZ!1^1v;edR zrPjtO#B)R*O9g+QwkSUDX%c3vX`Xaj7u2dyz|ej}qJ8c)$>Dq|ku(HZKX-@oP2i-q zPTqavvTpd_<=P(~0JnK>ntVwOQS75u-u(*9!cjt5uD%PF9Y=E+{K`DzIrjjpR!0n= z21lGXRRtdHE;-+aOUJPLSX9gi6dQHX;mmhMWXh3Y%x}nUXIRM=P)_*4E=1Ry7MuCz zqqX&x3RZ?D!?U0vzBfraOmcE)lzdby(ocA>-9@Ifv73Sn@WsqUT8+H6`eJGppf2B* zdQ3+i@mTupNUh5Ui_}-?t}J{z+iw7Cvi33iz?FO*lqCiuKVvu(lb!_b-S4+pPS|b6 zj2VB$RDt1vQ2rn4v#rBh+<604crgLJ=_f zz(kzi!yT9@pz9C<{!=EP^hw?!=Y3tz30lYzfWXiSB!L!YY2yAwBcIuabUNg=__+m zl#XQ1GH#|;SQ$=MgSSL*_}!*DO2;$^H}*zQbz zFyAC*>bBFd!q;16<@wCBiaRf@{^qLrY!qe9QEM4aZAs8g3!mwGyg1?vUXgidw2T;k zhGNWmn5C_kt2~8y#)2cdI+iWNRggjUcXYB)V+%VUpwoQu-;5X z2naB~w<-Ahk@US}r=+Gmg)*P-GhFOYXpf3b6%Y#G=D2S*5{IIzt(MDbN=fBFmmW~m zr&6Y3V>paj0so0s%=dQ2wJ{Qt$=aH5CiPBCJSrlSl&)|Xy<((MqRY?KBWQw@m=5WhEzccF0b?d=ldl&p$}+0Y ztQIJJ_xJ~fd^^b^f9#%5x?uwME9`PUzrAmBditxwNI_#_S(E6$p|9$TMq5Ih;!v-Z zClRZX_SwO-q86XQP#{a__YRqbRE8PQB2^c zFg-9>O50RQab~OPtfYd6N3NF^q11DfG=1TG&6!hCb1YgTMBMya^KE3^#S$nM_{ss+ z@xjei^zh5ukB+c&HAXDWF8eOBtGGM%5{94>I*9uN?qq_3ZcP^xbcwvg#B&9 zEiDJxoVN=B#<*3+v=OmfW@u}Fp#lpXFmuE-NimErfSk{^LCq0Rs{>C!X$zU+pP#8p zj(LaNxE=#Y>cfGqs(H9bujBZT=6Es+h=uM@2{Ch-_7~E4D+(Pp_}qf7bpvDF`6fW|OpSy%M3+#(+`V2{UjSEk8 zv&0ZL~%(_#ORJlxka)RAkhN)l+bPDvYXmZ#;)g$)OSTIzGg>jK;4; z{lI*W?7?p=H}9U3|JJn4Ke~sdKwpJ-=bCGYlot6oJC8&X*JQhHg?Z6^h|VCgLMn+h zAs1HFYpJS5u3Dg~4hC>7I6~rcD!ge=*!72Rk#JbPPZ(mmIb_5eZ=UhuikBqOh3ot( z`ay2DTptcAL3Sm@fBl8R_#*L2n*%3yti93EqXZx zE8|t_5@Ixxzxuu_ z*IsD=-29l=WfkpIoCkeQdX%?Bp~W2=_w3Wk+X7-1hA388b1p* zk}?lt5tLAGA-qPUtEzHpUE_P$MqBu&>2&>1=jw19>@{9Sl(Ab3)PZc6fs7{?a(Z;M z-nPQGoo192w7Tw92ccOhurml4V2W&(ef3MLCgfM>=g6w=JV~n<9#1bpWStK-IymA^ z-cjm+r@dS>r#L1qAn39Ml&I;a9cf{9~-oTxXt+ zzL%3cR-kI_HDJ2d@ne^S1;TX)+v^DgFJvkTi-4{f%v3P<{|S7I%uv3L#RCH{%b_<* znO6Ff7r_9F1rZnrq<(yERQks9O$5 zg;9VyE1RR1S3RKvEF@o37u7Sr+XhSo_G)$gX2E2G=Dq*sz5Y3b(^sfMt+@L$5p?7s zVv1ZpOQRx|oGVWoA>Vtnt}Y$hpM{|YtC@2%8DGNyv)ssd!ga@mLxE-A6gdAj6{XE* z*WCT%!-{)CrThJtF$Np+Nzxsp12bE*Oeqm2_WGUS(nOv-ifa>9^t)u-Az_&cBTWhQ z5SrEXp%O#cq@bI_4xHAhqw?WTLM#kQoF?HhZ?564PFjgQp+or7lM0}~NQDNJn}__}fyq0pVSx!%XoFqX z!R4dxKg5*EMD-4j*HIW38;HxweCMi{@e{Ct#HT+?k&LmNCZQ??y5nj#Jyv4N@@F6x zjOFv!9$h7;ytW)SMx&NNSL{@Z@x!dhAHep)_9nMDp+?YIC> z)-|uLa(p}`eb_$5`>#0vqbX=wQf`y<$q+$%>Lwm!YluqV?iYYyaxo`|u0sp$IoB2^ zIoFk7;JMyYRnQ)DZ1L5A!YdSq7$O7G(N+1!^ETG&mVNxxwF0IGv=N7cNVNnT%8?SI zFrV#t^wYpQxD3V`qJ9(CkLQy-XRifo?2a-Dk8(D0S=2+~Ua)Us|4iZr^eH$JyJCX?~bRsoNPR;{uc!0v3#btZ0bk%6#RTu8EzRK9{iG2?&S-U7vHIq_~y@79Edfdb=D?o zs*Ypk8{34Py4vGix?=41ciW>TU5*xC2km}6<2XCln?4NC?y`E3tQQoDF8G1#<^kwkfwr>ix(ZLeYR$peh?%t;)RfsqGa!SE5heEDfvRkv z#0f_Bw8DPz?s3U?uh2%>NRzP!X(ZYQD>1r5Ybr_{XP#fSxxI(DGgPuH{*2HiwNPlG zM_!RuVWo%jbhRfZXf+8dw_0^ao{)7XyB%NAX@B74RP>bV>W4)RLq6Hg-2Nb8iXj&I z{;S;ob)Ym~W0yHagtj@iVm7$u@T+;{{O>m+x^Q4bgig8=hP{~yNQIxgz1`vO)>P((#U3BdrQrKJS} zC8ec9>6FeHu}}d~lrE(iq)Qr6L}2J{l3f(`ymrT%VHI1f*0~;-Vj6SvK;N9KUqDQU_ZUY#&T$v*;J)j z+4Ym!F@H0?2DmJy-9chQiYo9N)P0i2RZZxeEnu2~m$q8@#M*@%76CRWop*XU` zVi&*M1xw3`j0$#(#wR-!)A}_=F(3?n=1}x`WVKgSxJ8YjE|fcV#(OK(=*B{Yq*g2S z4xIUa8$vHcATY)?mW|8)9Woioi0K}QP`KRR!0UgVnBV{E!w7%t%<-LS?b;>yJ||z= zGKW6i`9iy2b?0~XkYo_emW<L@Uf?c z&zdiMbnIU~V&}si1p=zGekQ7ImvUl6a#%-t-ICF;&b>kyUPy$%a!ECZFu?%tpjnHJ72T%IxO0i8#}A9^YQ<&VvHyNqhDIO zM$O#(8#%vCq;9GV>2n?XmtWu64)YgbYJ<@~VDtq*Ro+gTI7@E(O|UM+Ax z>w@^WGHsRFW5#Dz5W4y^FECihK%y!248b2cu2f!uR)uv-J9+ z%hbRA0Sk?I@DdtbTFg zdPR&_YJ>pFVl;)PE}T8oW(_Q$(%iCzIudnUgD)$$A`0f}xjR1U>7;LO9bp2Z0YcDj zo{m#D>l%YntdS(&X86cNL!?r}ptsPCi3Gy>WWJ#n{83B>h!jiWDsAi+ zmpALR@||#GCXG?mj%?p0M}`c(OJXF44E9p0-oR~t`G0wlL^@f_n0MffbtZowVX?nr z#)-R(IZqAHe$J|8CSQ{{wTmBQA6%J9o@|LvQ=4k_;JJUxyUaE7;IVUYYufyp;O@IB zi{G;BOvqNGlgxlT(tK^uPHny8vEUD5w$G!r;n!&e?LbmpfpTwSE+(=`w!T`#rWoUL zdJ9I_Im0BCz=>Tg7O~w?=*m4&D(AF`wIM$zLQI#HUj`+rwcmr*q5f0s~%b!}WFC%!|gT!n}uU`KMTQZ_^f9 zcRa#-2a7nK(#fF@>r21VKvtU3h}(7@YC&#o8*lB;`2NeKYTfB438zl68YPR8 za;e+W<5@wE_S*_kSM-&bJyf<29#tE8zMB6Kqmiii?t9zoiBOy`?%e`+Ir942=5_ON z>q1A-xj(`z;|c_1X}g-3ov8R|h;$ur9^2V7)m|J)dZ@{gh4PL!Mqkx)Jp_U??@C#; zCB4Jp@|2Qh64BvKi$9dbW2d#|MBTap@|jYLTZdDq&Y{^k@4DKnPJWjEwz%i2N?C7y z{{1dng_x_#zJYYDVc8?W+likV%YD@nRc@|Mx5+#?c=T>CN?m;;npZZMx5x!qrsOz* z?xa)_`?x_)Q!Fw8M`uzJkKjSHCMq$QI@TT%FYYsmejae<>?j>%N|NYUFXYlTZSfF8 zl|$pPT<(3x{QoPwUpqzQ!XB{Y4Sn(VPn2aULw|-EUH82V>7L8kc$R2Ffiqj>DMb2* zgGcE;#Udp>LbiVsz&iDD|FbI%_$MBMI6e{AC5m*NlFn2zKHap=PpX5u!uigd$L5B> zF#(mLoEyUYnj!h7TquO3j8`*ic`14&uOkF462N*Hz?H8uuT|m?uG%< zJk^wD*-{#A*_E0`a^MI&YBx{()bB@yi-L;zUHep9at_LW$LLx=_-s34 z(OMm!)a9W0(J{$0vNBg#(>`5xn&zt83mPHw4>qC|IdZHWsX9tEfrJEbbx$=;tV5}$ zCD91jUda6$O5DRK-xe2Bu+X0K3efvC=|n}hwqYT zBwar7n${&eq-17;CLVEKgnnJnoy{nFbV)KHV@>nRvsCcP<)Tr{Xh} zAFF+*IoF$~F<0!IZ#{K#06N+6-~H9c(OSB(@9-mVIk9jsza5d>P7v}dwT(>;Ik2D2>{ zV7+pc0wwY57o*?d4~=~#NKy#h@9Z048J;EJH#7AcBeWJuRc}EP?x>4@Q>>6C81=M5 zG+>9~e=RS~pzw9h#1En(8Py$Wm!iE&gBs&FAHrgGEPzh@*3Ch$cN0QyXhtNxYTzS= z>~b9Ws3W(%#1UKLp%Nm0=Gs!k+>mi6X!+c}1TWFgsILgR36;D?%MVPNV!q1G59G?E zsw8W)CfpIvQD@g|t?$W6)!RJw3VPXKQvT_pF9kc&ha^UDqA6C>f~C8)$VxMqRi}~5 zVg>V(vKZSXpmdYE&8@$ir#Htv_q#uBCNzDgU>Bgz#r$cZ&Sc+_*%3W&d>PU zi;q#lj;SM?(Kc6@4Eeb4)dbR}jn#)t|6Slsx2GqQQL!H=vVjJE8{lL*~YXL zN;};nOv%b02`LBc$Z=LfJOyrxVVshm!qLY`1>gt zRfxK{_QFuV-LiaV_x=-?eKv`C^%EnW`{UND(|rarnwfwtS=a;)+Vp5!b!M!sa3Mivt#k2Yu!hpD(t1aH!0eE_W3%E&uUfspH-b|O;Ug2;jC7y z_R>=%3z9>HDE^x)id&x&lvvaoraRj69$ts8T0@)5m*m)~+?#SMBY~1raHSULeeBX# zuRq-oJR5E%Hiwo;W6@5_-{!);K1)e6yx5 z@X7X%ae1w|p5N7u8Y_{7j-}Mb`b=grzr)JCaBr^dC0~_GN=XhT_1zK@(ETcydmAsK zUTj@$_)s!}_l{ku{tpc1iSIG1$`9vzk;5Ng>Q{QpKq}mL%b9d1~LXb`N5XEFAxxJ_Bl*bn$Z&vHfS~{>)l?chenZr z$L#)ey+VD{p@cg@llfg_mWCA)G57JST?Vh$)Y9)2X;;Kb*v#p3-n#~h|8~A6F?#Hi z06xa!cZd~y5N)l=Zhf#5QUBR0fJanuXQWnT7}@^}wdr%U{Fe0v`wgkLDJMxUnPI}N zF}=P->9H_iYT1>f-tGMA;>BSW64TPP$qpHJhY6Ker)pQh#M^uf)zMpKmg%uNn<0{K z>E=;vxk^*kRUBOx${ruYG}tLLG@ENghA9o(bF;D&Ic%s`=AyuD>Lx|{i=}x@ax10B zae}Rd@@1Y&2X8fuJQCCcjz?!ELAocWEFt-%WFqj6tmd~4h1;2nO|0F_Z!GJk3#x>^<$P4Jcs&^e)(r5jB(+mlQq+Oe6JDH^R(FQ^i)CYt#pM07E-ID|_pex+%l$P|zjl z+UcY;IT0V2T(9fe<0>n<&5^`_*is&0mRHG+v$LE{`5EI#FX5m@#je@r$8CD|$%Zr4 z%+fu@yXM*D-JkD3*v{UJ7`XL$|pX*Keqe$wc(#6=SeGOts^l%4<-Chf$Q)D zNyXI#g|>t{BN+Xds}H524SBS~JzhBY@ch#UP0&()R)4d2?!Ns`YSo*@U9Z!njyVD} z?L6JDP*7a`nFnhkN=u@wFbuQ`kF;;1uPB9HYjEj}7Hvu2eATm9TiU}X7P~szp?Tyq z0ySq~tMZE__Gn0*+T*G2qBLfuGgkY~f3Znc+)nBmyo}m#o=K4@Y%B;TeJn=sYJS-+ z77u%^^}}9o^~6>J>a%r!-c9mI{OcpnVj(s2DwXB( zI8q@|wmjYF$sv#4Fo{f^wW0!R-AtCKI)2k5hxaN(i%Hp)FBNBqVs6EF9f&^OR3EXl zUH)r8~-5wkYl4z1;HN(B^Ro_kai1 zfke(K&w5EZ(PO@7a~|11x?UE=7nt7OmaIvk6j_8h{bQElbD*+KsbksUr)m&qZ&#b| z)Y*R?Fwo`_BRE6pXx|d%+a4yHBq1rMPEjcf(F-!GH9Im} z8|b|mEnBYI$Q7@eFUzFli=7+FBnwWnT5pzOTj1b6)n8z#i#|tCOpzV4g8%cEU0&-8QEwMYahrE6n0se-w*s-D}u7O58uX48=> z^Kep)?iCQ9Q;gYCe>UV*pL(XP(vj19gS;KxGN~)vndWHgV`+l<;KDC2ZBqkpF|S23(3>M5}ibx&8ZXKG2eEX=~UQW zZ+jTN=M`xIhu+qdc>N4f)Kcs|6VfQ+6S73fVpW#Q-}Fmqf?cmT?~A_EwbkG|BQ=xh z#)P!y2OC6UBPed~0ryd3`9YI;(_m&tlDCW*E-7NVyWA$LhVNt0kWy@C2>Fco&$lpr z3-Wa7>E?`pL7UD?Kg!40G#)d%h|d3HeSHwms{DA$4ABq_ik^VdXaFGkMaVcFx+59 z&PRC`q=(ZSU4rrJB4l5|Tyx5auPe)PT2V~ViXy=o#cYVJb-_t$UG=CedUrZ{ zpBI1zGW{Ch^Z4%y^q(7K4@n@f8OK_-N^@MztGMAhZ>?!FGw;H3$_8C}sk!k*>iDAB zUdr+-Unp~l7d*qtB#Nd3j@QgB*F`(S28woL=Zl!TK4CB0n35W1>Z^vdOIT%zCU%P`0^1`{QT z9DLpdmc+3Wxs}11^R5&Km(FC*_{qM4$Ns68D6_l?Un$u1bNn~3^A@2;$Vxj>hi;qJ z7IJr{cY?=UYLxpCfOs5e#Ij|sDt?}~z3?+uK4S%iP{QGG^ zVyo|WcDmv=HWINp=L**qxD2ItwT`h{PhMo)!*{=vPN!@PBfuUE1Nx*y94i+6EV4YC z^mXROd>Ih!qp1w6kf3N^wF@CyPdz~9CIpeb36nra33R2N!o1VN*F3#7KPVp@=0P6$ zW4|i#>IJ7SEI;XbxYo&9j)iw(?!2@po{urb&XxyC{9A#|%5PhB$!5zdKqXmrOnA_B zh+r6cak^{b38NHa8>9Vt^;Vg8O`~?XL-2j9&mbZ#rLBUYqu@HrHh$A0xvoyGK-#|t z;eZ-$NA*=6d@Lw8jUEp0rTVp46ao5Bq~+oUT)CGssfRO}r|dNQ^SC0ARr#AHHjk7}FjX(}Bl*hgmIG#=9n7{isqf^rIrC$`u6#4pTwTFaiF9o0zih}EL~i>Y zV^9uX4xU}Uoo}hOmd95w9nKUxub;!}b&KBYCZqA;r!wm%L*?EcgzYtFNT+nFrviiq z@5V}a6RR(Z2%J~tqrKYYUPbA{CMem}xjs!W;XO)X#r7cIZfH>J`CJM)I`PiCTfk&= zeQe)!(4x@r3rWB^@!rOF<4Rx%*8$uhMw|Yawn$e&u?>cnZRpTlY@SFg9oY z?e}Mq_>%lZQ_(_9Ma64|4Te<&a&dfp;@-}?-wACu)FCxS*iT%iLGW;AA1TEarzc#o z!yc9VOj7*l(ZT^{`3U3C#-1Fbvh<@4v)zSkT1lk`u`}@~bvAdAJS1UnaHejY+y&ZCMdJ#d* z;+1nth5~O#n)ry5kug@|y@TYFX>7r4gKe2~?#nZ)(wP>ci|1ov zfov@Yd9>qWCZ<`0PoZ2Wz8RQ>)?wo?+EE!{#zm^@J(l0)$L77^w6Xq`z{x|EMSfOL z`dyM&inn6-gp|7pKdtZ`7#rvc#{n+xv=1wCh?Nvav1 zXCgupS#H`GW%0XzQUTVCme5Oj(KywhLw9aFa1y^FIXW^l7dAIkQK2fZAY_6LYeB5R z*3<#3t56ubGlo5W-m+$$LWJ=73!je^q$3*9I#Q`U32;ShK+!8t6Q1YXuu}6+Rb^kzk}<1{t_lXW~@#A?qnY2y`E98)1Qs6 zuWCC-PjmRvFJ#Vc+j|`To?h2!6{mUv6;^++_6H?*;uTt(*iHmX=uRjyYIlh$(U}(*A63G}m9$rs1ts zV6F8=aNLpdIqsJq_v{2r(kyV42O`AdJigdS_XHTPTkNrlB0F{Y17I}lkln<%0ENww zO{;8HZK&6bM?bD^hYJvz?dYj!H<-9MiM+9vOgK+VIDa;CyuQ2S^rA^XH?#!KY27c5&8sGLr^ae2S6uJd4b_8XT;H1p zm>u{D=+@>inYPg(s`h%TjgpSgHbsXIL(aSKnVI&~_~C{j;5;T z*B(%xk#NXMpAHgrn`Cu$UI_-1Y`-_}H5qVL6I$lK>L#n}#T{G0w$^SE3z; zB;$`u7S@(18|D0#se*q#qi+9fv`??psYTR!k z9Z8jb<{;vVjr#5%X=tFGsatRl=HLY5x=NB9n(QjJ=b!4*T($~9Z&as}@jP7iRs1~p zyfZ^L1L!X|us<7D&ks}WHGs-Qom91~TFvY?MUL4}+LkB)Q2ogD4m;Zu4`gK&%%5U2 zC@&>XCys`e++KOdb=7eSVHVRED_KFF6Gp}b6!SLV6PWLfjWF=16W+;MQG5Pb-u_2?F$HMeS_kXXK<68`Eh8ttv34Qrh86m(5uMp+PdE zCF;59v6itv#g?I+@aVqy<*i@iqP{qmQB0sv1@dAs z;R&13^HE$f=MHGOt2uDfggn_*{JL}Aa1}QZRitYwrBfU)z1$Rh(HHZ$EGS2mK%pSG zKkjiQ90~rpcT*x>qbcYh@t2g6Q~O0*QxOBj9wV#LYsWeCi{&X<6gr4VPx3ov^;Jvt z_D^>%DpjArT*x1){GxdCQRd1_s%m3BBdf`)Q;peVX%FK!Vut;M7e5I*<~#L}ZBLda zY}b>LxeK7tJpbL8enl!4hnye z#DAWBY85m!_scF-tL?jD<#+|z!EwXAa(f%LMlVuvypingvw3_Cve$f{4*<9KWyy!G ziB7&`iCLV@eb{!I_8!l95sdN1SZGe~mHO@1o7K+)3Zxq-B=P3gSyRDJw&-VQO@{+yh)_sSpul{WXPIm(RmHzJS+Z1L5IaxdI$D+jag{gAy{K+=vu;@w$pxaq>> zt^wQC=87q3>9ExgVT_T0O)tNW)c5@}gWhX;niKr$r%4JRlJ}Acf(A{a^OM$fFK+ZQ zZTUO_48&2iqLkjH^k{B#jOG z5KD?Fo7-R55Of2k-xVO0er_RXvYw6VN3h*9eVu+UJC1y1pe&q>56(gUgbipf^c-sG zhR`2d7;m#I$xi)j>A_ev=CP+7^6&DOwyxnWx*|1q~3rONc5T zl^z-~Zr~Fcn#Js;k_$8I21>d#n6ElbzS*`LM~4&Lv6COG9oRfsU{HYo*+E2I2qPNtYTY<5TgK4crhT&OK$=d8l5+Tszg6aXZS{_eis_6si-XvM0 zN-U(~J%lM!ycwPpw>8qRF!W-6p<#&O+-i{_@{hj5y3(V?Bk{ZI^5O5ISvPhBmX>{g4AZ9Y*>dQ%tmOJlx_imeN>K zNZq_YijOGaEWsoh2V`#AWk_DwY$Lo0L}rrT<7RlV#NdQq;^p=&39Nj=R`EHU5RR0V zAh=;Rh2l0nF>8m;+5houi!neRThMa2wDS|j{sTbe1lQ>t#aM~-{iG+m$J9ieryqR1 z94Ta{0W;66J3=R-OzP1Lly7*bwB=V%tL9g$#igjHg>+`lH#F3(wl1*XxX0f5sq7LQ-4%jq!9aG zWfYv93Za@$LV?x9jM%L$Bj_v9fEMn2^k}|^WAqSXvY_opdP}z z8%$E|gy-XIzc0D!)4A8lOT;r0lQll+{N5rHuX9#^*j(G(!Q|h z{1l!(7{sc|98PTrx`KAN!sb+{nCaR;pi29iNA5znp}#OJk@sx&^P^{tLpN$8g)+7C zElr;Af}wE>vCTFX%%PR@S;8#k(UTt5|Bojc5=Kj&k42W^wrN|o-MMy~cRP<(DM=(E zPI!OR+^PMpr4Tu{Kq7sukHDF5-pi^ysP(vSyeT#lBoLMmswhg601#(~afdFrxM4v| z{fv%XSt4X_lfXMbjyfKs8y^1hWV$;$9>QW07(XBM>_@4mO@DhyDfol(;w^v1Ij;f2 zi+Lr&lVf~BBP@&On9rD^E{9vnn1+YS^vLHk=jL?-uAv6Y7_$6OM_H3@i?RrEi+SCsiXe&`(!SyX}gJ{<=lEjH{Vj49v2O81r1|(8)2WH{C~+JGa28a-M8H55)iGw(%_- zM(}TnF|)_Yq@cO6{_}%sPCNk$9cM5(h^nWg#FiiQ(LX{VmwGSTSPDH5#b@XX19bb? zc-xYdG@*ujQs!Fbv8qDAZ#ysjx>?e%I?TEIMv;|ad_KIn9Nl2xqXwj3nFu=x!j@yn zr!dkKpxQlNT6l(I*|Q|&`2FHQo}r5bxZ0-so3NQX&-JdpRa(OK+4U8_*Y0ZuY%8}JDYpw+-`xw-%oOgeglxN zzux=PyF@zj`B~$qw&ji!itt{Q;AQwVcS%iLEPtehn!!!PYQh|5ZxUis#E6EzWuP3(@CNIX_?B z`O-TtPUlxz}1~#w`4|m?c&i`z8!4EUqGr%t$ zJ+ia3j3-HnkR)(araKdJGjxmM;BK8>?Han(WwbB$TnF&KzreSzIk-pWM;I99~_o#ZESuA<$eA}}l{6HZbC~~a9TQq0A zo$jzZo)FOIxM4*YI3|aj1GpfNZQE6}u|E&fHL(U&7mbM98_@5>8z{x7#oc(>Uf_Kw z-?mNghe>$RH?*h%jX)mej?d!*b6WshPMyvgLZ5Aep?|E-^R27pHN9n4p&KjsYX%Dg zX+)<1C}i7;xdkU{Sz;gH{i`rYwQ%HxjWx~N69;;CDPcS7bgdgsAgPYQ>)qvFSNj*5 zvv-lGMb&=Lecf~%Z&=gy^c!z@f5Aj{ljJJ&QLqP`K-|Xf(0*nN9b8|q38FIf((cIV z*7OpPT3AT-VaLD>BO|>Nfqw>l19Qp9iPB2_&xSq{F%n-9rdYn3rbwaKh_X#v0O^{x zUHR;{iU_vz!rK%>OADs{MK&W%O?G{P>3PnW(}2w@p5-%XeRgDm3b2JlxmbxGW9k|A zq;9?{O@-_~WgP;!dy@9*H0o}4kj_D+5~+QMCV_TM?6SA_@R<>bx8Pr3KqF|JklgTc zq$ZeKi7Veh`l|CxXWNLP;bMthMMqj@+38U)+ZZM!HkqKjuvysy$^pL5*#5nKa zMBQSiI|C&yE&fxn-F58OpOd>*aSQb8;>B%velP$fji+8go>^C`ZX_DK49zzDU3+^{!3D*U9vMB!uiceD^W4JOlHoUXH9@!By zS=@Hvko9T^d1Qh4R8Tcdb7pLuOkjpeqTCF0_~v-eK@HpD2`otKo@EavBtpQd^=IyS_hT?n4fc!;YozNMu^WSwp*ht_K)WeXcFe*Gp;2N=ZqrksrZGw({ zYlU}pY}&?cva_uW^?*g1OaR?S!1P%S=5+1{hR70;iM1i`i9$HF!;5BHVs+~<+|V!5XdKl5P0npB zPJlYgvx`gpvgWPSwuEfC%wV?d*N{B8H09@8_DF+nsx_)7SFP-pg3S;%(P0#w8k8tI z)P{u^nrA(w0%X;jQ2dunOi!-8O&P$Xj^tx`w`JqI3vt_*OB+e zQDTik)R}|@R_Do4d9Mu=y1aY?6Yo>Ko{`B$3Pz)wlD&ELxJ?=pp2)nO#;G-l)O*qu z1nXI9q$L4QSgqQ@WDcR3sn_vF>PdU9CU-}go{p%?T<7RZO6T<-=L61)>h~DbS%w}= zRY{HWSe=TO+IKJoM$EEpE1pf14c9HH7)&m5G@St;=kE4Fa=mEB)oFD^AM9E3zxJ%t zR9nee(~Mrw*fiP24m~<@MUF-x;;Ph0w0rGSLsN8A`tVWcvm`B3v9rm%j>^a&NCkv& z>c!=nHKLT?F@F*4E46r+JKJaIUF4jW&VN7THd%L=Wc=XP!g$OkW=&IVvO;L0NhapO z)!n_go65KmNvUUc?(x4!sr6YOufMltU}}NzJtd)nMd`H)XqtMWnLidQDo^UVk4^Jm)C z;g*C2n}v=JEEv!=ejjouCyIy*7Djd#&iSDCUbrTcqb23X{L416lJ;jWX;Lp#-?HlZ z^pNDKx&Y$WCG~WTfpg(FzUc?X8E? zTR2?VkiZsxb3rzgIhaU(#us?iLLi=Lt(J4Cy_#Ee)(=0cM2H_;3yt(V*HTf@-x%;G zYPENWn8l|HneF0PRcb_a0o*qhkU<b$^vhr+mPqK1MJ5TwtOCtq@AC(3VZJ{Bc>Q zgNf|SlR@viw$w#lPprIvZEL%h$AkYLjB~xDZyfP(yzD$b{rviz4VrT>S0}SK-y*%& zd8Uqo-2v|T02;nd%!R%N;cdt#4!)FJlZ@Mxd4?}Jd*8Ni9fR?#uv-7=yRhmIf);U@ z6-{)nTe>1??lD4qnmn)`VFI7pzvhzV4v67xRAKWWZ%T4@_{R&5Gy?6W6wF{so9e|cK7S|fG0Mtty;3FYA*|I zs-FWUu=SRh1W|YyK_9*AC1p*%`-~uH$-ZJPBIhe2Jrw~6Ffa%tRGJMHoA~KzTZ1yd zV>>|Tv3CYaJ@peP(JX$N`ORC5%-~DtC6nThj5n!Hw_CjD^7bf^*Qq%+_kQx_4ee5E z_Y@Wk4l{1K6n8TMTk8ZYN+Gox-0J8ZoBq#IFc04Lx;LoFRSLPH=Ys5UM^0tcIAJ)# zUGURN1OhFM@)$8Ea^2i27S?d{C)^cZoZXF}yD7I37o_&+mkfx7mWY!8iX z2D7++5HKrU21==S-x^Q%l_cllJ@b7T{7)ZdT)gJPEoiGUlC)sCJxwJW%EhS-f%;kk z<)X=Y_3&JO_E!zV@GI^);PPZ7zBbIH4wcZkAsDtdHD=w@p5c9{`X!}ID7Qi9 z+poUj+-?eAfq$NsM`=CPpPyFup3^Lpe**^s=gk@IH;H$Mah@|$$O`>=>2LhOh=4b3 ziIbX7j&$5`B<$l#GKd{)R8iiyve|=?9p>Pna>GpEWt<2p&4fqUc|ZNQ)#A0OSUw2q zfXZLA+dW(D<*#DIc5x>%dnrZ`zqN&(9aO+X??FTANz9nl)3p`mL|s%s!X&*-f5rY9 zQh_jf-@C{=IS6#(s1cCbU$fE9Z~uAScha&!@&9m7E%jXE^85r%_%!Ff0#Hs1<+iuLcwHwTcmP*f?xtT^A`CJ+&3afZ$z1Uz|V&qh4)(w0J3l2#5;I4U4+8L z4SgtzawpvG=HHJY?f!Kr{vvcYEx&Au*e_-k*y=9eG|QeEYz-f5d3GDhNG6p5MJ^b7 zGk@{;xu4XwH@eAYA^je!jqK8RZnzt*{yU;y+vDR&1p2N z;4IgdyZOwZe0$zAAol7V17ukf7saA{j@inspVF2?1f~8%zdD za?SLZsiKs(Jy7%SZXx*11Mait#5@b@JXYzHzW4ZRm8hM3v_h&873cNPA zNrPoy)Yhsdk-87CR%exa?vv863NUA2x*b+ozJ=uYeqZp+@djK)sD9ma>2P4;uf`)Q z3&?fli?;$=JQoC2XF@n<@sM+=7QIrRRUt_q^wdm^W;%qHTZ16pc4(jkr8pOXV3eVb zdwlKMJtm+-pv(d@pu<-s0xo~Oc?&6GMUH)0uX@1BE`BLb`+s4y3 z+%}F1q-e^(g;p>(f2_i*$i_D!{}eNQ{tg$wJhhccE(JNH?^5Is&6-q|{D?ZB2@6=> zRf6=jtsi$Jdc>wB88dOUN&mDb2PJ}Zj_-6UKIwK$|G|E;(?2rfYhI_SM`9I^r=vt% zEg7hu@9hGq-g%;IkAx#)7meCE;{POO*An1&ejO_0v0rEM$eU!_8rMMq&&E4-&ZQ^* zqD&ylsppk;zSm3dDLX-oF@F6eWpAlbnY?|aHMB*$N;q}WfDbS5u>VX`M@1JZ{k8X6 zw1h!!D?;!KX3%+LQrby$*gqU zd~MF?JwK+Y$u!-$Z`JC8&s+E4nCX3~#*@0XB&+;lvCCpn>J|+he z>BDfxn@BqXA@b2RLrCEL|JNXt-#V48;n#rnzTUpf7~_`x3I$ z$Taoz1VTGp&^mIVoLwMR&9KtU>}kprjSZybQ(=l`@<*Fialbq%{_!k8_eFKF2$769 zyU=15M#GSs5z9aM=?5#i3eq)lUuOt+7=&=+I9|L-#T!4~Yo)=JtIpGX{IHb|5S3@o zGO!caabn3O4y&k~F?5>G_C^XAdeDe?B`_<-pe`ONFQ`9#z}hrC0VQB*)jxTnQRR-E zXB9Uj1gEl*wQp4@Am6}|W$P4{kZmbm>C zGpWbsB#XA0p;ZjbGS;z+h{xte;)jJLNKO#P$n7sNa-#ktuKp7Z&jAu#f00sRV=wG^ z-Op~yL{1@FFgwbqta$CI!3I|7XBbYA%DT1xo7g+?jbY0RQej9bknyzE65zaQ36i}sFEoL zu@q`wwU{ptyD^_R&Ei7GiL>?r&y!z06VP|4)A{g*{Qb8V=fr0v@sDqRW4+ z5@MAMS~Z<*u~0Ur)*SM7S{W9CfwHGZh*Opp0S-30vYXKS%jr`iD(DZnZp|GFNFwqN=rqNhhNc})?$>$&l7 zZ`{ZJ- zsbzVY@wd)$)41HkZ`^V)FMHw?Q81xq)^ov59dTC3C47rv-tEQreU@ILRn;?^wXNg`q*^773yA5F}`#;nWi(-?CSxdLIANf_1R^ihh6pA6Y{+V zu#3SyQZA`*kPUSqle!ZMSOHLqQMuwJOh@he$SIGe>8EALQzdkA>U8sz^pJj&kL8gA zQm*n^Mzl>yB@!O1|g4Nv58rtwp>XRwi3)N=m+RkMmK|rKu;E=Z>~GH$;o; z)yBBr0u}AMTLJW$^r9})bscH4QR{cg-V3DBZ)TQhH=mnPuHrT&G-JDF<<_gI;{zQT zkMlrQcLTk7EAx-e?oRCvIq^T90K@xyHlL|`*=s8jn-Mqe!9{Zd+u8DP7yA8kArB`4 z{&}}58$>DVx1f(^7bScI{^~jSt8XXt9hm;vZ-4yhA8P-#tHfRmi<=_&kDt&W_TDzJ zb8UdCXTq4&Nus`LBtVGBv4Iqu9Zg5gaqj~VJ7-|LJ9d`|J;CRF_KM-75N?AEV9l~Y z%01mzm`QeeYiQYdZzM39#Y41W!15O>0<00hapzt9r1nZK#RCO_VM0bA-ohD?BVyQ%w)vcnx4VkHgu%o^38kqiPuWZIo~%vdHD zztfyz$^5b5&3AzIed^+^qnjjUz|*DSGxY~~xJ}=0mQFb06syXOff85ERF%ZpCHPH% z+k4G{CsdGWiZLaWP0{|Q4J#)S_KwVga#ZlD@#D)By+k4O=Z7O~Fo$N1-%%6~-dd?Z zQ0T*50+&wSFC-YcWTn`_)htQ3#SbvpHv^nwdd#wb4hJb`7Wo&VwJv{06ugI!h1-n^cxtD^B+`LOk|V7nQ=ev@~qgBsfxb)fZ^_Pu_ltn4K<)lc=@L%e&v(H*EbB|?5Mr}I!x;MVLF8?pwDV;F3}2#) z`0L3Rw>AKEys<_xSNaX{$GJG}0)<9ZW5~tb-jxJ35e_Jo7vxS-aHdq1`oh6Vv{fj> zG>U>x(+*eCqr(u4ibY_EF?oU4;+I3(rEb}fSK1f^ackv#)6iuFH5T;JlVFr{-v{~l zTLDCe&sw$k?h0hZ@o}O*_5!4t=8>GcNdXg4jaX%rVH$2`(Gm+8^zq0yY1`pEZSyEPewGTxwC5Lr5vLd zd9csU^lT#RrWr7ocd3o9q#cp8Y=~7J!>x9KWzYP=92mKv?PmWp?OB8B-bigXDS3Mv z;3jHHH{5hurgh>wO#^TBz5*LnAjMcaKYM)Oh~>8zCtTbw*x3TJr=UJ8%&->ja+`G~ zh||~uK#sOSeIX8Pu6ujYmpm@)5&Cb69-B>XUa=Q0hy2IUv%ELp^`)o5T4;cystwgy zOy(@u3@0nc-|CU2+K<3ovo_2M>F z%XS&ia(>+jp#QIM0U?_hnU5aZ2^Y}VC6ZM1pVq+eO0L!W`VYcG(MdtF5G`$*zioK| z`Axq=pguK>jBk5mRW;wTLk(Er;uthv0Sy`$IPWhjU!Zkz2lHi{Sa5Cr2=!dAC5Jjn z?QQCQBmKC@a_AMesuKq2>bKZkRMq2L7Y2csn}nSounN`Tp<+QJ8+h51dY=ky!aMND z?1>nQ`%U3tP~WhN0c3xoH``R&44fN@AfqWkKjrTEbgkU)_yt(#?g_LtOfk;FNM9qe zq{46`E?b9=TIb$qft8)pHI}{tv85&6-?Qyd?u`i2m$2j8h##wgR01y5Ej}n*e~x) zg}KnLW_N`<%iuQ)4mXooK~%*3LoZxCG}DJ;MB@gTY>C*Est8X91Aqd184+hPg?pDQiPDV zf+xBRDk?4%R{%G-412Tj&o#IPh{gV$00TC65JpU3L-TUKr@VCg1K8Y4MTH5vGk+(!xn>{;8jh z*{Y+&JvCrUwf5#)*$9wAU(E3nG4PLtJU>QnY0$bbSl0L4e!45uZgZ)QJu?O9L2zKo zNO!N8!J`$Q=?QDJePEnb661~4(ivmrmwO%NegP~tdds~_^b~8wB2DjvfjqmLOt~C^ zh_72;>cUYH2<1n@3D@zPPvH55Pyf-HbpryW-x`PT?jW<{^F#_|*fgtYY7{WKQC_&^ zg1A?>u4YiM++CXo!G+A=;BQ(TTip(=j(L|>7xXCf7tob*>Mw><4=_J%1EXG@hfJzT z@`5WtSB#`}wyS?{0LWHcQkf|8Ec!oZllO*=1EYqzfNQeSrSy2WUqSPp49GVewSG_f%ar*W6L_guE$ny4}Y1j_m{ z6Yv_=2FBp4+y#*jVp-|%-~ z)RRd;Pqh%NpBo|p#eWT)1eAG8T*0ensaGibv5ZKA-(84ce2II;K*2*%e8UoY`39_i z=MnBw!!(v~OBK_Xxxhc^cN9^zspH@@{f>Nl;pRN9D0Tfo71#I~@IWd~r%_Kq3Pn(Hfq9#=5~Zql zRq1TZ6{E*NOmfU^2$=eTJ>W9jpr*^iT`1}@n{xHxuSvLMMSyuscA8_-V!VK0``Q@> z`p}}MI@2T5pHjl*O}kR$GN=8T}vUwppE0tAt8QCf`yzCiLM93&x_Ilxk@BMYo>74U^pFZdN`TqX<{c|o( zy)Jq^AJ50*abMT_?XJN$9j)idRk3*aV4@cYNVqv4gfxE|P(ec!^ zy%-!m1hz_?Edform8X0Xiw(dzeSjIkox1*L2_)SfLI>{F;;<#R5-{D}+7?&`(5?p^ z?YVBL>4Dte+~Wo|*V%aTA3c4{;|y?Zjyg{MImO2hL4eJf^LYY=cm_P|_xy2L&s4x9 z^ku40(_OFhdj1!mhreJEXJYl`btV+6s#j{q%G_7YZafpds#9oKqQVPaY4*+J2bxa= z(`nYthBf`LLkJ7b0B<~IM2kH=jGfhL%P^eb)FMqdq}X49xBmI;3XE}i{{0#CHt6Sl z2G_x^KWV%yWG6)Vw@mshs{GugOW((aXYM;of|_c7#Yne@x+&&esR>4*X7&3WMP zCm*-7$9zqW(f)a@{*{^h`4c)C%Y@WYx2hg6wpfm@{P9VWUfdL4K92;KFJq1Trmhq8 z|BM8FZc&&_lMlax(`%vfCp;Y*0o$1MyV2CMzdrPjpT;j^bJR>fzuNyVgiT2vuXIkw zeQA8nO;7iaDBy2TxDr;EIEK`Mn9JL#uq_qc^iF>C!vm6U4wY?> zHe$+tE`Z-9$jH0P$C&@=JpTNfpYIAg+#aj`8nZ;@^M~N*QCvn=ERgr#mCw4v5;y7( z>I_6Qeuqa`uB6GXGGA6%8P`s`!bLLj_3KwIjS+JCYmRQjOE(?wv0UN2$?^dAv76;C z*=v%-ueRE+52Zrnzr0VD*nVF5W^eQ$G5rW0r|eNeH9s7RG{1rq0vIzJsqVeZKmL?i ziAVrL_TpXqCFMUp^S6)x?MGP}oRcUAUHC0jyyFWC;UEw{0m1Rg_ICMf*=xtUI48)? z%0d{TR-i8;DlVRz+@t~j-0LHa{2iJ+SN{E1pCmOwvj^WldoKV-P<=1}hhFZGT__$11k2(h;fFurO3BYe?Z9NXoCCJ^#n4&{t92^`7 zDs5JG16RKnJMXzRl|%=?Kp#^O+~PFO2#k6UH@85suMBh(GPt_BI=FTRo*+M0f7L+n z{6-1#tN!~92W2(2N0?7lHw@m|_UmUy%!_ctVbU`b-4$GJNlC z46*uH!IE{uO&J&ui%Rgi(>0pcXoPQbp4Ta4MMxlj(11z%10siT$EJ zrsVc3?;AVa*Dey zLOfZ_M$stH%c%PzHc;+$TsDf7=Qwc2f&P)VxZ``XUaPN$Y&0H)nK;4C`~oT1+F?XsKf8!#L;h`JBiZ0s$7z&&1TZE5>8MZ zN_ocfE_W$tFP=GG+QVnw8llt@(aouzaW+f!`9nxIzpzSwAk@d&aGpyeOQBP{VB)b9 zcS?FM_0zY|XO<7(u;AT?sj)M|`G zR{HEwK{bq3Cnrzq-9;hGZk*M1#qfCMXsYQNr+s`Oiz^}FI)&}AM$d$8Ly6*x(r$L0 zS(8M_Ag_x|~X<1oiC=v^z%WX}@=iS6_A0|f!3FO*C%gC#j* zX-A>mMj1a_SafejF<-wDXUu1tLBG`g#r-ab0AK&MX&Tm_v)gEAUbX-7k$rZwG@OTy zf+Fz9D$3Xs$1v{_)cbxvL-kKxf1s)PYLi_6ACgk%;-o-klB#t(e>CEZt!96NqWshj?b zVyxQ!;5Y>y?H`Q0~%U)1zbhAKm|ohXH}#iR>V2;ah`XL&ygcl>C}_SbEPQu_2I4@uXnP~aZ+*1F z_dequKh4mq-S_5J6~}J}`nx15_`L&Z5JGeMq%_JKxq~?~vop0sC}Y=#)K!&Zz>iT~sUTwS@8YkJEgmCP$Rq_ezVrIh^v87-GyW9F!n(?c_;_ zobOb1iZ@6c_7G94!+@Cx8fncvxmS*Do37T}?V%>!QM_~$83orH18}maOwi4J->L?} z8MsLb=MZ)5U34$6ZJb_R95vnTy*_v-eC&t$(IB$D@6KskOzM&}$S_uB)ofs4vQDCs zq@3}|TcR65wx@J4^e!9X0OJt4;3t2a*zCh2mK?pjGFzjrd3&_WBxlk`ZFjvAGuolj zWj{Se#mJ5+?U}ZBf|U_Y1mp+g3(?Tp?w%Famwh z2Q_8vwMMaa`@hIgI>&)e&(>+4-_ct#{jXH=&LmM(o%mgCz?6ONQg9;AA(1$Kq^3(ovk_@E?(%iYJ@rBUK14^QX6$8W?V|B`HvGbK7N(k;u?lq{ZbR@e5)+15^%*%*Qv_ye^tPlw4k=-R5QYpcKe@u460^;_ zFu#Y){@v#SqX38uO<{m6X<5zlG7Iwq??S6jg+>)qjCT#Vv z$Fz@f&xz2BN-btW0jKwEW^L+2&QRsK!z+r~PbJvQ(ApPzn(T5`0_LU9HvIpTpTe8F@tgMKga@-j+CU*n^;qKuv0dX{V>Uj94&QQE+fpijf z22WoRf{9k>cHLzA6ZL#uLCsvv6GYT}f#v0H2`<>tkcCOiOT6fV#&?5|-Cu#cu*2|U z-YGg^&W%fEt%Q#)4rsY09duix0O1wJKp&U{W~ODpOwkUNmWRW4jr)b#>+fMnsW z3T*(Z?l`$(TG5llK4U1D9qtAG%kbuo9x0dLP_|989b!6=_nUxJ&McKHG+=rDX_g z3}#5_3|-j11Z)Yrjy)MSSEZGKXDCT0L_Lr648piJ)FIxi_S__Fjbb*J7gRYbRi+cOjZVbEuSCw;q~6Dlcl|WLRz8DrLR(I z?f#_LuJMz_Lsk{vsMH)uR7=t`t(o7fjo9J(zK$f`wELmZzXy*IPN#gW5pkAXkEfn{ z;-5V8(1q^exAEGqZ8<(3$mt(q!nPmj={^@eusQH%nVRWFgwhV3=O5rdJh94NEoxkY zjAZK6mVG$cF5kdEk?gxQ;vsA`a`IF5O*xnHT=iNeZP}ydC$O&;SLS2Zjc`x}`wog? zuU~;(gi1gFWbMC09lb4%mrlDtKM3ll3nOMA_@sW>z)m)wkWD*eXO|?M#_{HC{~ZNd z(p-;?SyFAA;UI6HK;s=nOg>b^uEg^(WL-~OyMc!P3UL~g@jy0YRo`o?QGZ9NRJG|L zznI1$U9LNcJ^`7$QxOzA>l6H@%;hLC zVS+xhcmuyLX7xCzzVPWFN%LNYvSqBOK$3W3auS!An0Vu(HX{j39CY6WsfE@h5|o5~ z2pf#Mk}99Nq5}Q%>QD`&eM-vR87N)lvcRE}iIv9j{_B&W$;|5*YQjBP!IRiR&-?&8+*_1IoAs+gcIv5SFNaWMc; z4wmwZWWzK!QY6K052pdRkp{QYm~G}uvrJXk*dG-4&OI4|?8LY>6f^ z&K&AI#RhclIC!iSCg`AJf&Vnae@~hjki&iR*)wTd060Wuhi##z?T<5DK33tBC5k zC1#W)aHe?Lwx&RYau31$NVSx9K-@o5G+NylttgaswX0gUWJf3}#l!FR)o(An@-nVG z5mLXhBQ=ohux5X^Mw#aS`*S5v#Dm;O8t9-ok}08AHiUazC0abZteU!gzrA($CmLGm08NW znpINy@JXD2l_j4eWM@O^G=flv%1z;x(Yhr+?&lgET5{NXy~ODfq6oc%HR!Yn{kO2W z;Q#WQ|JrRPj^Nnp8pao2hIC`G?EPRwlL(ASiv}GRbBOP(`g3EuJNTh)e;MY7HZEeh z>~DZCIf>Ae`1FEydWpk?T#dNum|e8O6qFPnFS@$9#pex#_M2qgOeQRey|rR$g=SBe zKeDS`O+PI)QgcXXu>Do37ju)-SimR2f@8Uh2t~Z*NgLW=xTAPaC`Hzv0B_?2DrsKJ z@7ce6Z)_5-ZXT~`iMqSHn*&A6&(FV;T)-0Y6;>GK-I=ErP+nfHXRncN%_Db|P=T4` z>qI;_iS7LeP|XSiHIu+VM3bwW&+bM&-gQ1b<)R_(8C5eju!XNwF8!HyU zrg#ckJx~=G!>3&uo&56cJJuZGNTG3qNy%Oq>>y*}#724jeo}W@zRo+1%aT{We13&km_%A)goM(ZG{oX$OsZLRm$1KI?f>QX18`9O2Evp;n_cR*#A(FK z>k#pON4C6+E?M2M^B!@3j7!bP(K=J7t8RZ5iU}OI@hCn(-6iPQga3z@07mGcI5*)9 z3mE?6E*XnsN|3;YaRSYllQaTHq@|@H@+Ze$V-aUWuGy1Qdxs7H$cU{K)sK!cLM6Eo zYR2lXZ(mJ*hmFp_jt0;Xpvwi5rrg9nqTPzp~6A4c3l zv#5Q`*YrXNsv{tOC_ZlJ05VTzAeZ8fUSWX%@d4RO`Fs+n z(m?c@ns@s}o6kHj;2ZZFQSJB(@F|4qSZjr;5$JFd*#P`g<4a3X!1}eD0mC8>gR%u6 zO3^IP*Q#~hm{s5S@rC?2F{1*^vY4{@27^5E>!GGIY4c4|-52swSo2U**uM3A0I_NM zx^MNx&;i6iovZvQF>n*VxE6bU7AOPy;m;1CY2A>+h+$JcE$OpM;qUJcr914swrMY& zI>z5aKf|=%EyG&O)$j}e%_qwYD)D@ZkSZ(oSid7GCN{TeoUzM{U7|9?)K2N-HiFW? z`7I*Th)4b}!|}5U;%AMm&=p)NQaVaF%L3M&QCHg#+#T*E$%|iEe~Xt8-=b**aUk~X zT_q_B?>7OyFaX34+qDp7fQjBxs^)7DV5MP>!VbMQxegk#E`QW+CK^K;p?1T5?P(qG zB;&KQG#cGKJ;dM%1fhA?{;1ttDnfP0-){e|oVjlrixuuU86A2gUW7hX#y2=5G!OO+&EdCa zF{Oy7>K;hm&3&Ebe#2BI&EXcOUs$Aso8T0G(p$dDZ@pmaCQOO- zCyq+Opusa&F=e&7f-PNLH|Cyw3wJLY^FFBO-U$t{hHaOlQ^feW2oVkDZB`NyCytaW zN2H!$VP-y3SXejT7CE*( zDN+-0VQq+{vqOC-Utim?TBE`x$h2@(-n|9L(?+F>G%9^s5_<#>15y#Ij6zl)n0IQi zPz-3!(ExXR^25{xQgNys0S5UocN=&;;I-!8hY-fTWdF_vbsi5c6C^ca zxCz3x58!1lNJjs@-Yz(#=CxqeoRS_|$_F;rN;jQX`bG=4T+~V2Ah%Gv<|Z_v!hr=V z5N|J5A{Sl}MUWljrZCChohasc=Hs!sM>)9u&7Q}dGBR%o&5z{QFr&WQpP}1RPV>$z1bc1>dN=@ zi#m(WKGVu^KXHM-nK|Zp>@t6SBm!ot_beo|h3oZoOW_*S4Jj7W=Eqh=Kr+na-aUSu zSQ5nK!{Tt=tBT&%{0+R{X3PxYu~guJp?9J?w1(}_Z2{rf3gpe?L%wg4C4>!-)Vz&O z2iRQH_dxPaPf8?M<_;7vnqk;$4UEE?3I^EO8^Hvit>+IAPkX-!F!@m+8qzlI*CFEe zW3Ybfc`pK&Q}c9et#B(^-OhIfCW4{W?T={}n_S+p4V`HjI!#*UvGpTygrfy(8RD^b zfXB>XQR-MnEVnt}$73gLVt15X_ynfWI(ELZbcD-0lzGZ}^Ls@dlIBrcd0Um&_Vj{( zVL!iPF$+nR&k9EgY4l)YvIXc{xxms`wHE7Xb7PkV5?Cwy+hd(}*bT^`<40;h7dEgw zhT=aA9qXe)kcFkGJfz@S*;+LCFd)oxff11Aa!+5+V}YJ!A{#x_HoEDrVaBPhWpZBq;&m0O92<;*8@$szsmgu7|*%a?R8U!rbH^k**FW8;&K z0nI;*09=oZVvv~kx*NgOGqc@!p>^lnG@J+G95@g2B3d1Z z<_DS#hjBy5Sl5zYJ#ZGJ%9}T)t6A|l(>Mh@)^4MBcDUm12-;APaEph=vbw|RXu(#p z6!QmJ%dY7bn;eBk33eSvQq(El+DRty`#B>ASLlI{j5VN4hUq}~W=-*jW}8&t!-w+M zk)694p_(e)Uhq&sGz$u+LiB893S{*(>OF9M-8LdWck`(MB_#xn&}I>TIS~L`sMD(* zOnZX)dI}yB_ysO~2J^7}WjcLG$Jh6!62D`}ou`@lEk_c*BQ~F%pW@lsAJ7;s`p6ge zcT(t&=&)`BUTDH-k`Cl|DDW=YkA#9#!};6uwZ-!@-TjwhdCF^`UHC)Tr0z)a zryUG(VjN>GwyvsRZs>Awq7a+51pMzf+$${Q(?mYt^DOKcDrt}Qt)u4A#9x;}r-g2n z%Lu6+B>m#xuVeFEjBduUI239mE32#Za9UU45C?taF|)%l%RIj7tJxY(-81y8drPA( z0}pGLNX$g2OK`$<_Z4w%s(70A@ok2jI_n*Ynqs+=u)GcO9UcLyGqxN^Z z`A-l12;O_J*x`xe9(sRbSR@QsdmeIr;onoab&tWhFPR)Q9sbh``@_d=`SuG}_-`?+ zZVkjr+G9c0e|?`7MKF$0_Ozy|8Hhzr2tfEa@>M zXiN2TF)0KTV6El*en~C-?U#M#f!!mr%{ctm-l~Of6eR!G`u^?3|MlbFGCIG%E!ha5 z71)*B`0qvie1u=VMt=dIIVXz$N`VPpsT*qK=Qpmdt2@|-O1}#j{rWFrkibg9&AvZ( z-_v@(sx)D4A}TG7c_-Ti1oFP*mflQ+gKXM>b{wqqk@z;)dKuJW1k5I_DEQUovPU44 z7QFpI7L7*BCfzFgp-Lldc9x!=UasTS=jJWnbS;q!Stvm!3&FxB8pE>tC#q{|1RXw@ zh<$FdNsk^M0P#Toyn%bcdP=26^)99NhLxgb$kDzld6%3Ib_MlUBYS z0wcEdOVj9yb(_(d_=An|vTa0vW%AUYTkNlmC=dy+D9dqL>(9UQyNa7HhFM$sDxsOH z%NP)RQgNz7>*c_zdFuz5fbPCD91Y=0=YV#Rewd5Rz_)02704S@1N513B_?Bbu+lm7 zjXQ6_lP4#6o1z%#q8X(Xp0u12w5yUJq~PJ~{95gCtia%H-Q%gw7+wR{9d^vfmp6`3 zjLSEyQ7Wn$1Pem9ca%=Xp66g^Mi7Z+Ii4cr^AN5Z^xmHNTAwvbJemKiYm^=48wn+| zy*1oa`z5$At**7|6y4O|r|le_?2F(HL_Kd0@j&zJtY(rxJ*FYaAo8j;+*bFryJ5J#I(?FIh@&hUI(749RN`LZEODi zqrcVf2!qF8$J0dosLg5A^%Pr5DFIj1N~Pjs>4&zz1mH>3#{tX$C2LW#!gK zPC(akYBI}oC+(4gquP-8DO>O|5x?zVwPH5k>MqP-hS^=xJD!nuwFGU^1Qh2Db+eP) zjl9JUAwS;XQnEk2d1>p`*3P=+`xFuK7s^p};H;FceqcKGmRW0-(!WUr+MBo*WuQhiJCfZY0$xmF=Wl^tI%;u;PFQgL>@SW{h8A3vR#O&Je=b+uTbyY^ z)Q_=pV(1BP%@tWtEA;jVu&;7BszWd8tuSmhO$zh)h*zh|b-!3lWHjg8%EOOJm5eO4 z(f&Rk%T2R6OhbEZ5C$9@#+Wy}Y#*$0xo}?R)x+~csf9-3=}M9MoZ8i*;$`=a7kO>N zC-33ny zs<=^rC%Q{a6FSYSk9;Hb_}U)0#1Sy7dwi?Fpt!tT`AJrn!0kbYvsWICKmT;&3sQ?H zcI!AUuF3A(R|%KgPJ5TeI>Yd)P+GL*ctuT#qifY`3zfY@kE zIfDuohfT+0XrkWW)-KS_<#w4DwnfqIH$UXwWn362Xa?N`0n1VEv)2<=o`0Ho|BSs+ zZI!&K)tuKVhFygU1M#a9UBS4#trt*L$0N?{)8$rb)z=;i5ddm&XIa?#)BNz+`^%s4 zAh2)lpzNG-l|2{56ky|zlcUkU_`K@+7bGQ7uWamAIHeP$ErMXcx0x)e)~S=Tq<^p) zkH`f_KE~)4?q@XS;8MKf!33sfn;%QbPf95-U&2lKg}wC~1s`ViMhh09y+w%jA#Cd2 zt9AcD?dO&naNWb&xDyv=)qJ?Vy_XU7(k<|X4-dIvOnjQ`dujn4G<)uAa1ooDR=-=g zXIZ?tBkD2DGu@RKU^7tE0A$nJOnW4Nu^Gs(;xvMHDPT@)`0lAQbp`q^w;iqpyzw<| z%8lh-`RX>7uC;Kn?a3!Rox(9$kOzIcUf8ZB_BWW;Ng@#fxd!Q|nvuJ65E`tNazviV z&|VyB15JZFo)zZ3fc?1a?C!jVbWzV^5gW}AlZu(}SR=S;gUc3&mE9xf_0bj!Tggh+ ztt;vBYI!#qDypbLoqSqsQFp=6`2JXoRM!`^gE_sVqvq}d6g}r)-(v4fEJkZF)I;36 zlR`dqHI?!&!~FBMu+;_oPq*YfDvrlvG+smHy0hP6gT}?x_q_F`mXq-8#|Qj&hL2fO zsDdXhLk;aloqi*~8D5Ck8_RT%+irl+Wb!=Ic^9K9 z_n5^?FHivi@_mf-DRwS6PtM(#T;Dsaj94e0@vZeu+*&_2=A6I88*nP?FFX6YV?l>a z>??^sE5CZwhGGyob{v|%i(9hZbm0?B-kd&C9uam@^hq|XS~_072*wE}l-^$+!h_kv z3IOXlV*0ErDb?4hcpaBVjVQSEDL_tAem(2PhcY9t_X*NBhN-ejM&h!R%L_#v=TAPn zWb@!yNK{+Ft=G3ZLZ6o(KF(_}tnjA%-WnN`=O%1DMB%mNZWg?EohM0#3EUQc^9+R{ z*NeXCs;NlM*=NLF#PkY>wLUAY-!iYnOV?-^*`hr5#fSz|jzBu!nfAAI{zkc!@9=X+ zkJdjg{6F(|3s^r>d^fD%rQZ$03WUdrL)DS_Hf?d4%k&cWd)8|TM);PW;Pi5s6imd! zzs{n{M{U^m;C!-#Yuy`5)ro0s2Iragal<61m;^PR-AI%?v9-0uX;?wvx&6cc4zIqf zZ8#YXP3YVbV_V{dcpe?NgpdqkgxPPgDnq)#u8R^TaUsW@Dk@9>J-U)4D%hPO7659= zrrp&$L$23KWB7fMqD?M!0RIbGwUPAYYZ+AXm5o&&^lr(Pn1xe9Cc}d7JH~u;C*+`P z=3WUo8yyrI{%b!MJ7TM(-bYrpxJ=q{zVlZXPfnNE^)d^55b+T1>p0J4Vt_S&hBcme z0r(rO=&&bH6m^8Lpc*&-b^*G{Qj+djc&#fzvC*wYyMReRRp~ zre>Zt!;|crMCFKqeB&Tc?KFcEf8`Og|5c8M!J7*c;2i0eo0>l@vW(hNuIyFH_vPmkv)8}y5qDO{J&)336{Q;J|Dck%=<`_aW4XEcknDUBrDB38l~ z4IaM)jm}t9q=guw1ksdH{D2t0E!tYQcP)Q!v(cB|H~NZT{WKx99rl zB`glTZD>#oS162b~Nx+q@K|OrW_;9?N?0fpnf-~+rYwX~gFf8fP zUvfPe$8&J3^=6XX+GN&_p+Tt=yEg_+>b1=jvG&yT_hl{ggOo4a3Xt+;+8s_o#bjU5 z{zVU*A1Op0f;eWHd4Q5cFp3!>{l7#1+t(DY@k&c3{ZgwaQ+a%)O)~t{Ll^Ya;OY~r z(OlRLU;L7W%8p8Mk|blJ>g+;`&s{6w7F$FH7Dm{`%sF3RSV9kVCcoDAUrbXV$K@O` zAa?@rff(+_+ij0Xr93y~{BiJHI>HO0rhA?fF)=am<}CRAfdk&xenQF;s&_%E*lvNU za!3hF$o@eUW*1`F5lEmzVbos|VVF1O=fCExx00?;J$z^(!lZS{JUWcV0t)F!LgHY>%563;GijK}oLt>+zM z?Qsvs^ixm{q@V#DsyrG!wb1`HH{;%N%366!GfSLCs*oMN>(W}&g~jr01_p9ggU|Ui z;_l2&GaX#VL}1Qy%L9)$>Id1cS#Yv%re6Mjhu1~h_g>a*MexaWTk{&5bx5B_ zkhHA!SqKP^=S$b^W#v?_P5@r(uYQapaGdk-?!InY$OOs;V3d+0S1+<;!BHmr5)5CT)fXO zHLj!w$Qh?xY&^#JW_tYN&ZjFNH`2CX_M9zVvJmYuNJ9INR_czVc7a~_#RB~_X!v;~ zgD@T(9u9eGiEhRbPrmVcqK8X~(hL$3F6ZvGT!)oPIFS z%p`5Hgb5m~@;Scrb^U>PLtu`2%^CcSWwyiT*e!Ga;^nK%xf9f>)T)ji!{;Td9nK*6 zQ|oUIr*K>EUT@Q=rgzfL_ZM|!kQ-X9A5)F1@tP;`PLa86yH{}~hD*XpD>w4GqRPVC z?WurwgCB}Ay%)3X8y^*DDki7;uK0voFx+KXxpjoF&n`@EQ@=A6Fl}OUSV) zjG8IzmIRAs(0rSE;Tf~$C|(5O4N+(bW2c ziy1PC6SDt#VE)W^{Nbb3eg1tz5}!u>_*%*UGDmT|p4&?d=d}v>0(e5UJh0q+0-W?| zenZ?6DUGB<->ZyOJAbg}E=#lRpRxzb50Ahc$xu(1yXJkNrs$b=@~1pTr=2Y;zt23R zlq%Y3EYnpu50Z;@yi3=8!>93SxnISW=_^Ame+tV$k4TJA9+7mdZwN}2-fw&A zP1~(f>4%q=&#*GlBTEKSI-h=7OPhbxE?(ng*Ta#dCq{jA$QiD=OwHlZE01{CaWFom zHa{8zWK>xYn=PC}FJI&-vp0pf|@0plBup1H) zuNRz(_q&$+qjDmFC#d?4!Y2FG=h83jt|lkN=-3o7JXon8IL^QHwI%t5*NPs|-qTMF zvfV+~XeF-!hL#X@PJ>xNHg%=*l`$UYFKps}_|5soAR%+y!PWKRjt{h6)VH^{r!5Rw z4`XoWoU?u>?n)y~gAh%X5^i1@HrvM7%U8eLHtNkx_Y1gg6Qo_ppvz9Hz&OqZOs6#R zWF6?8uIdpT3AKB?yEzx+YNsF6cfl2-z+?DUv|*(ax{N*)Uv;+CeMeZhvp(04PnG3Y ziv_Hj&hy!LUF_9nzv_3FP4W?Q`?h#Ia(nAk%4pTenFg7T0k?>`a9?{vh0T}?F+wV* zlV7(YQ-c@u6EfwN)!Pi;=413g?A0IRR&3nAxaOaI}_z101HxNz5weuQQte@ww?@?E9E<*yOuMA;czfk9W6lJ=h$ zs#Ru*a#cGW3|+e*p|ssFoPC&9A3-UkX5Lo663%iLx|piq4slTU7Xt_@{u@uGD;pg` zjXXg}C|CLnW_3*w(Tf#RgUFL&D)N{GXO_ns4o;1nG{gRHF;q)me8)+U3>Rqtv6jpK ztnv1WX~iV^C^n&$*%@D|Wj@kdpmOg1B4(_EOv-EfiRrU1jGrc+cAo&auk|f0<51~a zN`W$4*_+hVdP@tj2;*AMpbYkFFSNVnt@_fWzgZ2pO`=)e+0qdc(iqfzSm}&SUT|;< zJC39kJxXgBt~{6@Z|qiVDoZz6@R^|bnd@%W4`msE;PjcstcS__8Ovo4Bt&gexx7K6o_BwrU9oZ_cHT{8- zkJNan2H*T>JrVob;@S)6?9&d{6G)aWSaudfEy=j&6l|@L!iaeJui_%TWiH&%g{?BW ziaM;V4^>A^w3V2nDOOHQAw1(IE?@T8&?uGRf$@#kdO3ogr!_2kDDU*veDZCsd2)QJgU69v9C-qDpZ0+c z@zO+Z=BFHqIbx5cFCs*a+kKb&&b&JkZg7x6f&8*+a8I%pd9;9PSt+UFbjL)zFyD@P z)_1>qL$*x(^_R8_Uay5;^NA@SdGj)o?yL1{srj=X-MO>NQ_2 z(|EME;c(PjNTaJytsmTtN4gpmYZK z#*)>ugtPxM>PdL|^yweT4!AHPGaQ=s+IY`4|H*A;22DZHwZv}tBKTTt#?|gLQl7$C zb;VmZn-Qgj)cnTS;ws=i_&(wxSgo0NbkKO~Aplb@%?vFRB zsdfpF1prH60WE+VDes8I`oFrHr4e7!nS;)ImMraa22}01q17m4dwGlvirg@ml>{V< z&wTvxKLDfq{acTB(Ow=N=|E-YG|B@Bp*=u=yqc}3ho}x3bJ|}70X(YU`FAdmmxba`pi%JB;<+UTCML;< zH5r9T=hmsiKdc80*nugb+R447)XTwu;@YbpBhIV(to%*WTHR{|XJWG`08^w9eD{;3rbzZ5wePLMX zL?eEm6DHrDUy$+K;Pl-35eC`0jw7)5kghCW zD~}4>W$?zbCj;K>M?G8-kcZ3OR?`&x^iG2cJk~j2 zm_@;-k67rngfnFo=rEOG5bkU*A>CD5rFIS=a15&(fr?n~TkBgGP!|&g-O8H@S2Oon z9nLklVo}$gZlI2P3k)vVj#ks&ym`}8N+nM6Kr1*BaJYF5Uh}9OL&*^79wJ;5w3@l@+n0jKjTJJK*T^ zn_E(gGb5KdxgddDh&)$bn6}%dcO^#b-OVrL;fKRiSMx(z%g&Lt4opz54$Z}`uPlE* z&N=K+Y}nrX8RoyS!5eLV+Sx7{Mm3ry19bt@B%kVy$|!EzIfjEqh}WF_KZGzJY53;jXH zC?u~hR+X#LsT~wLKfqYon%1=3#8FD+Ra`A!tv7f?R9DzYt$Jr>v2-p|*b$vs`F>wO z?u1@C!Q?>Ds$_sR7zKd6?$2v1I+K1TT@>?JI}56QK|AX+FB~kFdx(Cr022)?F0ZyS z*`s}9Yt^k$*Q9oz3T|Rv3|;J(zT~o}m5L}k?3_6c<(<`{`6BUd-CtFjJF)#$YrBEG zAS!ggZ(@a3OgiZ4>Kv3ZP1|BOrk~_QP__%*Rve#Ebw_S<*fVVfs(4(Yuo==bZr|>A z{z3Caes2#CVy!R=J)@PmeF=;U=14Vv>gA;l7xfH_?MKKH+?X|&Y{kF1?j?`Td)bR} zsIZhv5f;67d-ajUBgu`nhd-7Bn{4~RD zQQp{@|Qddcs+3^Ej*aHxllc(EiJSXmRQ|hl0>LbbR0gL{=Hu0mZ~Y#dKWl zBI8KN4RxA?6FAupy}ep!##%;2mZud;sWUP%@}b0BIaEtnK`je#eQ5CDGp_XxgY%va zq`r_OTW#B|RXE=H^M7*3+-J*7$tI4iRt>r;;Zi_L;V}ThSEPIo=;1K7ZY>T^&C8id zu$AE41n~EMOMEeip1m=wQLv@#ul8`BOOhpOns?55Hg_vqup@Uj?^zgcX;X*jHzI7? z8n=ibGqY?V)u&P$9kHA8Oy>{2c?*t0c8s_DT4#db3q#)dg~e*kJwr)(0O%io*T%KN zCuWR@<24A*XMF+f0dRoDl`{9wZ+aUk<-a^D=V<1Y`ypf=bMLw@+~bCyw5L@miBwV! zvCPf?aEw#1$9UkJEh!%7im!i8AVPssx+isft*qbOVL}*VEG5swOYlTkp5r#J-cd1b zO=XC%9ipB5en%rI`Kf364c`{%3SeVAksE=r9ySU~J zP1G7#gq+k}%xCwlA(uiRX%v%86m-befBB+^jFEytrIm{(qxo@QaJeirVBIcO$gg6l zt>9NnJ3_^)e^$qtG_O8%C76IZl=&fn{mbi#WWWJm2Km<2=`K3jN2J5eBULUc?TAc1 z(laD^%%LO-KoU*4%6;p!D~Ws$i~I;CM~Ct{0jHIIP8*-J{yeGK>VKfea!d_{fI2xT zl9eP!2~gCsKFaJ#H{;Nz72HgpFS^U|K!KI>wP_>1*izF)B~So8wOt0I76*&d>9fCm zq4LQnLg}VkfGDMqNk7POS6al(B34fV;Sr>n{c(m>l5L*U^feYcvoF8sFfO~ZJiezk zr=r4i7!&yh3angGsF;58&ppi-ICk{{>ExMm*HMD|TEj(7Hw+SGw0L+tFwbA?=YEg) z6>(84iOp{osSdIds*NAwsGmZSeB8z69%`k{!+BL<<>RqFPQOS~?vZcd3Z$;2+%cd= zpo}ll)PowOYF=x)KAZvV&Yk=*zI%(8XjuW�NB-T_-@V)>{lRwX6YrGMJSBVM@gK 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�%I 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 E0P9)%rvLx| literal 0 HcmV?d00001 diff --git a/docs/tutorials/index.md b/docs/tutorials/index.md new file mode 100644 index 0000000..e58dce0 --- /dev/null +++ b/docs/tutorials/index.md @@ -0,0 +1,15 @@ +# Tutorials + +The Flux RESTFUl API is a FastAPI application that makes it easy to +interact with a single user Flux cluster via a RESTFul endpoint. +This set of tutorials help to walk through several use cases, +including using the Python API, or deploying on your own cluster +FLux instance. We also currently provide an example client in the [examples](https://github.com/flux-framework/flux-restful-api/tree/main/examples) +folder with additional examples. If you have +any questions or issues, please [let us know](https://github.com/flux-framework/flux-restful-api/issues) + +```{toctree} +:maxdepth: 3 +../auto_examples/index +container +``` From 58f2c3dde3914f109024a96c35d3d8472a9edaf6 Mon Sep 17 00:00:00 2001 From: vsoch Date: Mon, 20 Feb 2023 23:48:30 -0700 Subject: [PATCH 3/9] allow user add to fail Signed-off-by: vsoch --- .github/workflows/tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 7a3f085..4ab28a3 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -38,7 +38,7 @@ jobs: export FLUX_ENABLE_PAM=true flux start pytest -xs tests/test_api.py # Create the user and pass (should be successful) - sudo useradd -m -p $(openssl passwd '12345') "fluxuser" + sudo useradd -m -p $(openssl passwd '12345') "fluxuser" || echo "Already exists." export TEST_PAM_AUTH=true export TEST_PAM_AUTH_FAIL=false flux start pytest -xs tests/test_api.py From 369794d9e12630a56ebba4c32bd062da61ec898d Mon Sep 17 00:00:00 2001 From: vsoch Date: Wed, 22 Feb 2023 00:27:59 -0700 Subject: [PATCH 4/9] start of work to add pam auth we are currently treating a user account as basic auth, and validating with pam. We will eventually want to instead encode with a shared secret. I figured out the part of submitting a job by root on behalf of a user, next I need to figure out how to reproduce flux python commands into command line stuff. Signed-off-by: vsoch --- .devcontainer/Dockerfile | 8 +- .devcontainer/devcontainer.json | 4 +- app/library/auth.py | 6 +- app/library/flux.py | 30 +++++- app/library/terminal.py | 118 ++++++++++++++++++++++++ app/routers/api.py | 14 +-- clients/python/examples/submit_job.py | 2 + docs/getting_started/developer-guide.md | 48 +++++++++- example/multi-user/broker.toml | 20 ++++ example/multi-user/flux.service | 48 ++++++++++ 10 files changed, 281 insertions(+), 17 deletions(-) create mode 100644 app/library/terminal.py create mode 100644 example/multi-user/broker.toml create mode 100644 example/multi-user/flux.service diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 60efd06..c02de18 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -4,7 +4,7 @@ LABEL maintainer="Vanessasaurus <@vsoch>" # Pip not provided in this version USER root -RUN apt-get update && apt-get install -y python3-venv +RUN apt-get update && apt-get install -y python3-venv systemctl COPY ./requirements.txt /requirements.txt COPY ./.github/dev-requirements.txt /dev-requirements.txt COPY ./docs/requirements.txt /docs-requirements.txt @@ -18,7 +18,6 @@ RUN python3 -m pip install IPython && \ python3 -m pip install -r /dev-requirements.txt && \ python3 -m pip install -r /docs-requirements.txt - # Install isort and ensure on path RUN python3 -m venv /env && \ . /env/bin/activate && \ pip install -r /requirements.txt && \ @@ -27,4 +26,9 @@ RUN python3 -m venv /env && \ # Only for development - don't add this to a production container sudo useradd -m -p $(openssl passwd '12345') "flux" +RUN mkdir -p /run/flux /var/lib/flux mkdir /etc/flux/system/cron.d /mnt/curve && \ + flux keygen /mnt/curve/curve.cert + +COPY ./example/multi-user/flux.service /etc/systemd/system/flux.service +COPY ./example/multi-user/broker.toml /etc/flux/system/conf.d/broker.toml ENV PATH=/env/bin:${PATH} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 6cb9eb3..0a887cc 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -24,6 +24,6 @@ ], }, }, - // Needed for git security feature - "postStartCommand": "git config --global --add safe.directory /workspaces/flux-python-api" + // Needed for git security feature, and flux config + "postStartCommand": "git config --global --add safe.directory /workspaces/flux-python-api && flux R encode --hosts=$(hostname) > /etc/flux/system/R && sed -i 's@HOSTNAME@'$(hostname)'@' /etc/flux/system/conf.d/broker.toml" } diff --git a/app/library/auth.py b/app/library/auth.py index 841976b..e6a5b84 100644 --- a/app/library/auth.py +++ b/app/library/auth.py @@ -42,7 +42,7 @@ def check_pam_auth(credentials: HTTPBasicCredentials = Depends(security)): try: import pam except ImportError: - logger.error("python-pam is required for PAM.") + print("python-pam is required for PAM.") return username = credentials.username.encode("utf8") @@ -57,14 +57,16 @@ def check_auth(credentials: HTTPBasicCredentials = Depends(security)): """ # First try to authenticate with PAM, if allowed. if settings.enable_pam: + print("🧾️ Checking PAM auth...") # Return the username if PAM authentication is successful username = check_pam_auth(credentials) if username: + print("🧾️ Success!") return username # If we get here, we require the flux user and token if not settings.flux_user or not settings.flux_token: - return not_authenticated("Missing FLUX_USER and/or FLUX_TOKEN") + return not_authenticated("Missing FLUX_USER and/or FLUX_TOKEN or pam headers") current_username_bytes = credentials.username.encode("utf8") correct_username_bytes = bytes(settings.flux_user.encode("utf8")) diff --git a/app/library/flux.py b/app/library/flux.py index d5a36fc..8b67021 100644 --- a/app/library/flux.py +++ b/app/library/flux.py @@ -7,9 +7,20 @@ import flux import flux.job +import app.library.terminal as terminal from app.core.config import settings +def submit_job(handle, jobspec, user): + """ + Handle to submit a job, either with flux job submit or on behalf of user. + """ + # We've enabled PAM auth + if settings.enable_pam: + return terminal.submit_job(jobspec, user) + return flux.job.submit_async(handle, jobspec) + + def validate_submit_kwargs(kwargs, envars=None, runtime=None): """ Shared function to validate submit, from API or web UI. @@ -90,8 +101,13 @@ def prepare_job(kwargs, runtime=0, workdir=None, envars=None): # A duration of zero (the default) means unlimited fluxjob.duration = runtime + # If we are running as the user, we don't want the current (root) environment + if settings.enable_pam: + environment = {} + else: + environment = dict(os.environ) + # Additional envars in the payload? - environment = dict(os.environ) environment.update(envars) fluxjob.environment = environment return fluxjob @@ -147,12 +163,16 @@ def cancel_job(jobid): return "Job is requested to cancel.", 200 -def get_job_output(jobid, delay=None): +def get_job_output(jobid, user, delay=None): """ Given a jobid, get the output. If there is a delay, we are requesting on demand, so we want to return early. """ + # We've enabled PAM auth + if settings.enable_pam: + return terminal.get_job_output(jobid, user, delay=delay) + lines = [] start = time.time() from app.main import app @@ -214,10 +234,14 @@ def get_simple_job(jobid): return json.loads(info.get_str())["job"] -def get_job(jobid): +def get_job(jobid, user): """ Get details for a job """ + # We've enabled PAM auth + if settings.enable_pam: + return terminal.get_job(jobid, user) + from app.main import app payload = {"id": int(jobid), "attrs": ["all"]} diff --git a/app/library/terminal.py b/app/library/terminal.py new file mode 100644 index 0000000..2d9cd73 --- /dev/null +++ b/app/library/terminal.py @@ -0,0 +1,118 @@ +import os +import pwd +import subprocess +import time + +# Terminal functions to handle submitting on behalf of a user + + +class JobId: + """ + A fake Flux Future that can return a job_id + """ + + def __init__(self, jobid): + self.job_id = jobid + + def get_id(self): + return self.job_id + + +def run_as_user(command, request_env, user, cwd): + """ + Run a command as a user + """ + pw_record = pwd.getpwnam(user) + user_name = pw_record.pw_name + user_uid = pw_record.pw_uid + user_gid = pw_record.pw_gid + env = os.environ.copy() + + env["HOME"] = pw_record.pw_dir + env["LOGNAME"] = user_name + env["USER"] = pw_record.pw_name + env.update(request_env) + + # Run command as the user + print("⭐️ " + " ".join(command)) + process = subprocess.Popen( + command, + preexec_fn=demote(user_uid, user_gid), + cwd=cwd, + env=env, + stdout=subprocess.PIPE, + ) + + # Let the calling function handle the return value parsing + return process.communicate() + + +def submit_job(jobspec, user): + """ + Submit a job on behalf of a user. + """ + # Prepare the command + command = ["flux", "mini", "submit"] + for resource in jobspec.resources: + if resource["with"][0]["type"] == "core": + command += ["--cores", str(resource["count"])] + + for cmd in jobspec.tasks: + if "command" in cmd: + command += cmd["command"] + break + + # Flux submit as the user + result = run_as_user(command, jobspec.environment, user, jobspec.cwd) + jobid = (result[0].decode("utf-8")).strip() + return JobId(jobid) + + +def get_job_output(jobid, user, delay=None): + """ + Given a jobid, get the output. + + If there is a delay, we are requesting on demand, so we want to return early. + """ + lines = [] + start = time.time() + + command = ["flux", "job", "info", jobid, "guest.output"] + import code + + code.interact(local=locals()) + + # TODO work on this tomorrow + # If the submit is too close to the log reqest, it cannot find the file handle + # It could be also the jobid cannot be found. + # what is equivalent on command line for: + # for line in flux.job.event_watch(app.handle, jobid, "guest.output"): + + +def demote(user_uid, user_gid): + """ + Demote the user to a specific gid/gid + """ + + def result(): + os.setgid(user_gid) + os.setuid(user_uid) + + return result + + +def get_job(jobid, user): + """ + Get details for a job + """ + command = ["flux", "job", "info", jobid, "guest.output"] + import code + + code.interact(local=locals()) + + # TODO How to reproduce this? + # payload = {"id": int(jobid), "attrs": ["all"]} + # rpc = flux.job.list.JobListIdRPC(app.handle, "job-list.list-id", payload) + # try: + # jobinfo = rpc.get() + # return jobinfo diff --git a/app/routers/api.py b/app/routers/api.py index 668e4ae..a37a480 100644 --- a/app/routers/api.py +++ b/app/routers/api.py @@ -127,7 +127,7 @@ async def cancel_job(jobid): @router.post("/jobs/submit") -async def submit_job(request: Request): +async def submit_job(request: Request, user=Depends(check_auth)): """ Submit a job to our running cluster. @@ -183,6 +183,7 @@ async def submit_job(request: Request): # Are we using a launcher instead? is_launcher = payload.get("is_launcher", False) if is_launcher: + print("TODO need to test multi-user") message = launcher.launch(kwargs, workdir=workdir, envars=envars) result = jsonable_encoder({"Message": message, "id": "MANY"}) else: @@ -191,7 +192,8 @@ async def submit_job(request: Request): fluxjob = flux_cli.prepare_job( kwargs, runtime=runtime, workdir=workdir, envars=envars ) - flux_future = flux.job.submit_async(app.handle, fluxjob) + # This handles either a single/multi user case + flux_future = flux_cli.submit_job(app.handle, fluxjob, user) except Exception as e: result = jsonable_encoder( {"Message": "There was an issue submitting that job.", "Error": str(e)} @@ -205,21 +207,21 @@ async def submit_job(request: Request): @router.get("/jobs/{jobid}") -async def get_job(jobid): +async def get_job(jobid, user=Depends(check_auth)): """ Get job info based on id. """ - info = flux_cli.get_job(jobid) + info = flux_cli.get_job(jobid, user) info = jsonable_encoder(info) return JSONResponse(content=info, status_code=200) @router.get("/jobs/{jobid}/output") -async def get_job_output(jobid): +async def get_job_output(jobid, user=Depends(check_auth)): """ Get job output based on id. """ - lines = flux_cli.get_job_output(jobid) + lines = flux_cli.get_job_output(jobid, user=user) # We have output if lines: diff --git a/clients/python/examples/submit_job.py b/clients/python/examples/submit_job.py index 88775c8..2a3a4c7 100644 --- a/clients/python/examples/submit_job.py +++ b/clients/python/examples/submit_job.py @@ -8,6 +8,8 @@ def main(): cli = get_client() + # To set basic auth for token/user + cli.set_basic_auth("flux", "12345") # Submit the job to flux print("😴 Submitting job sleep 60") res = cli.submit(command=["sleep", 60]) diff --git a/docs/getting_started/developer-guide.md b/docs/getting_started/developer-guide.md index c2b1c6e..cfdb744 100644 --- a/docs/getting_started/developer-guide.md +++ b/docs/getting_started/developer-guide.md @@ -112,8 +112,50 @@ For the latter, you can also use the Makefile: ```bash $ make ``` + If you are developing, you must do the second approach as the server won't live-update -with the first. +with the first. If you want to start flux running with systemd: + +(note this isn't currently working): + +```bash +sudo systemctl daemon-reload +sudo systemctl enable flux.service +sudo systemctl start flux.service +``` +Make sure it is running: +```bash +$ sudo systemctl status flux +``` + +Instead I did: + +```bash +/usr/bin/bash -c '\ + XDG_RUNTIME_DIR=/run/user/$UID \ + DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus \ + /usr/bin/flux broker \ + --config-path=/etc/flux/system/conf.d \ + -Scron.directory=/etc/flux/system/cron.d \ + -Srundir=/run/flux \ + -Sstatedir=${STATE_DIRECTORY:-/var/lib/flux} \ + -Slocal-uri=local:///run/flux/local \ + -Slog-stderr-level=6 \ + -Slog-stderr-mode=local \ + -Sbroker.rc2_none \ + -Sbroker.quorum=0 \ + -Sbroker.quorum-timeout=none \ + -Sbroker.exit-norestart=42 \ + -Scontent.restore=auto \ +' & +``` + +And then: + +```bash +export FLUX_URI=local:///run/flux/local +$ sudo make +``` #### 3. Authentication @@ -133,7 +175,8 @@ export FLUX_ENABLE_PAM=true export FLUX_REQUIRE_AUTH=true ``` -Authentication must be enabled for PAM to work too - you can't just enable the first. +Authentication must be enabled for PAM to work too - you can't just enable the first. For the latter (multi-user) +flux needs to be started first (e.g., the instance or broker) and then the actual server needs to be started by root. ### Interactions @@ -160,6 +203,7 @@ The following variables are available (with their defaults): |FLUX_NUMBER_NODES| The number of nodes available in the cluster | 1 | |FLUX_OPTION_FLAGS | Option flags to give to flux, in the same format you'd give on the command line | unset | |FLUX_ENABLE_PAM | Enable PAM authentication (e.g., username and password must be users on the running server) | unset | + ### Flux Option Flags Option flags can be set server-wide or on the fly by a user in the interface diff --git a/example/multi-user/broker.toml b/example/multi-user/broker.toml new file mode 100644 index 0000000..eef2eda --- /dev/null +++ b/example/multi-user/broker.toml @@ -0,0 +1,20 @@ +# Flux needs to know the path to the IMP executable +[exec] +imp = "/usr/libexec/flux/flux-imp" + +[access] +allow-guest-user = true +allow-root-owner = true + +# Point to resource definition generated with flux-R(1). +[resource] +path = "/etc/flux/system/R" + +[bootstrap] +curve_cert = "/mnt/curve/curve.cert" +default_port = 8050 +default_bind = "tcp://eth0:%%p" +default_connect = "tcp://%%h:%%p" +hosts = [ + { host="HOSTNAME"}, +] diff --git a/example/multi-user/flux.service b/example/multi-user/flux.service new file mode 100644 index 0000000..5f4cfbe --- /dev/null +++ b/example/multi-user/flux.service @@ -0,0 +1,48 @@ +[Unit] +Description=Flux message broker +Wants=munge.service + +[Service] +TimeoutStopSec=90 +KillMode=mixed +ExecStart=/usr/bin/bash -c '\ + XDG_RUNTIME_DIR=/run/user/$UID \ + DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus \ + /usr/bin/flux broker \ + --config-path=/etc/flux/system/conf.d \ + -Scron.directory=/etc/flux/system/cron.d \ + -Srundir=/run/flux \ + -Sstatedir=${STATE_DIRECTORY:-/var/lib/flux} \ + -Slocal-uri=local:///run/flux/local \ + -Slog-stderr-level=6 \ + -Slog-stderr-mode=local \ + -Sbroker.rc2_none \ + -Sbroker.quorum=0 \ + -Sbroker.quorum-timeout=none \ + -Sbroker.exit-norestart=42 \ + -Scontent.restore=auto \ +' +SyslogIdentifier=flux +ExecReload=/usr/bin/flux config reload +Restart=always +RestartSec=5s +RestartPreventExitStatus=42 +User=flux +Group=flux +RuntimeDirectory=flux +RuntimeDirectoryMode=0755 +StateDirectory=flux +StateDirectoryMode=0700 +PermissionsStartOnly=true +# ExecStartPre=/usr/bin/loginctl enable-linger flux +# ExecStartPre=/usr/bin/bash -c 'systemctl start user@$(id -u flux).service' + +# +# Delegate cgroup control to user flux, so that systemd doesn't reset +# cgroups for flux initiated processes, and to allow (some) cgroup +# manipulation as user flux. +# +Delegate=yes + +[Install] +WantedBy=multi-user.target From f44db303bc3c8156413bd0fefa28cd0615ce80ce Mon Sep 17 00:00:00 2001 From: vsoch Date: Thu, 23 Feb 2023 15:59:23 -0700 Subject: [PATCH 5/9] finishing up adding pam auth Signed-off-by: vsoch --- .devcontainer/Dockerfile | 19 +++- .devcontainer/devcontainer.json | 2 +- .github/workflows/python-tests.yaml | 24 +++++ .github/workflows/tests.yaml | 22 ++++- app/library/auth.py | 3 +- app/library/flux.py | 58 ++++++++--- app/library/terminal.py | 97 ++++++++++++++----- app/routers/api.py | 31 +++--- app/routers/views.py | 39 ++++---- .../python/flux_restful_client/main/client.py | 1 - docs/getting_started/developer-guide.md | 34 +++---- templates/jobs/submit.html | 6 +- tests/test_api.py | 27 +----- 13 files changed, 236 insertions(+), 127 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index c02de18..3731173 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM fluxrm/flux-sched:focal +FROM ghcr.io/rse-ops/accounting:app-latest LABEL maintainer="Vanessasaurus <@vsoch>" @@ -27,8 +27,23 @@ RUN python3 -m venv /env && \ sudo useradd -m -p $(openssl passwd '12345') "flux" RUN mkdir -p /run/flux /var/lib/flux mkdir /etc/flux/system/cron.d /mnt/curve && \ - flux keygen /mnt/curve/curve.cert + flux keygen /mnt/curve/curve.cert && \ + # This probably needs to be done as flux user? + flux account create-db && \ + flux account add-bank root 1 && \ + flux account add-bank --parent-bank=root user_bank 1 && \ + # These need to be owned by flux + chown -R flux /run/flux /var/lib/flux /mnt/curve && \ + # flux-imp needs setuid permission + chmod u+s /usr/libexec/flux/flux-imp + # flux account add-user --username=fluxuser --bank=user_bank COPY ./example/multi-user/flux.service /etc/systemd/system/flux.service COPY ./example/multi-user/broker.toml /etc/flux/system/conf.d/broker.toml +COPY ./example/multi-user/imp.toml /etc/flux/imp/conf.d/imp.toml + +RUN chmod 4755 /usr/libexec/flux/flux-imp \ + && chmod 0644 /etc/flux/imp/conf.d/imp.toml \ + && chmod 0644 /etc/flux/system/conf.d/broker.toml + ENV PATH=/env/bin:${PATH} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0a887cc..6fbf436 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -25,5 +25,5 @@ }, }, // Needed for git security feature, and flux config - "postStartCommand": "git config --global --add safe.directory /workspaces/flux-python-api && flux R encode --hosts=$(hostname) > /etc/flux/system/R && sed -i 's@HOSTNAME@'$(hostname)'@' /etc/flux/system/conf.d/broker.toml" + "postStartCommand": "git config --global --add safe.directory /workspaces/flux-python-api && flux R encode --hosts=$(hostname) > /etc/flux/system/R && sed -i 's@HOSTNAME@'$(hostname)'@' /etc/flux/system/conf.d/broker.toml && sudo service munge start" } diff --git a/.github/workflows/python-tests.yaml b/.github/workflows/python-tests.yaml index 03d2747..d2449e4 100644 --- a/.github/workflows/python-tests.yaml +++ b/.github/workflows/python-tests.yaml @@ -59,3 +59,27 @@ jobs: export FLUX_USER=fluxuser export FLUX_TOKEN=12345 pytest -xs flux_restful_client/tests/test_api.py + + test-pam-auth: + needs: [prepare-container] + runs-on: ubuntu-latest + services: + api: + env: + INSTALL_BRANCH: ${{ needs.prepare-container.outputs.branch }} + INSTALL_REPO: ${{ github.repository }} + FLUX_ENABLE_PAM: true + FLUX_REQUIRE_AUTH: true + image: ghcr.io/flux-framework/flux-restful-api:latest + ports: + - 5000:5000 + steps: + - uses: actions/checkout@v3 + - name: Run tests with auth + run: | + cd clients/python + pip install -e .[all] + sudo useradd -m -p $(openssl passwd '12345') "fluxuser" || echo "Already exists." + flux start sleep infinity & + pid=$! + sudo -E -u fluxuser pytest -xs flux_restful_client/tests/test_api.py diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 4ab28a3..cc293e5 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -29,16 +29,34 @@ jobs: run: pip install -r requirements.txt - name: Run tests run: | + # Tests for the API with auth disabled flux start pytest -xs tests/test_api.py + + # Tests for the API with single user auth export FLUX_REQUIRE_AUTH=true export TEST_AUTH=true + export FLUX_USER=fluxuser + export FLUX_TOKEN=12345 flux start pytest -xs tests/test_api.py + + # Tests for the API with multi-user auth, but fail because user not created + unset FLUX_USER + unset FLUX_TOKEN export TEST_PAM_AUTH=true export TEST_PAM_AUTH_FAIL=true export FLUX_ENABLE_PAM=true flux start pytest -xs tests/test_api.py - # Create the user and pass (should be successful) + + # We can't test multi-user mode here because flux start needs to be run by + # flux, and then the test by the user. + flux start sleep infinity & + pid=$! + sudo useradd -m -p $(openssl passwd '12345') "fluxuser" || echo "Already exists." + unset FLUX_USER + unset FLUX_TOKEN export TEST_PAM_AUTH=true + export FLUX_REQUIRE_AUTH=true export TEST_PAM_AUTH_FAIL=false - flux start pytest -xs tests/test_api.py + sudo -E -u fluxuser pytest -xs tests/test_api.py + kill -9 $pid diff --git a/app/library/auth.py b/app/library/auth.py index e6a5b84..2c74539 100644 --- a/app/library/auth.py +++ b/app/library/auth.py @@ -73,13 +73,14 @@ def check_auth(credentials: HTTPBasicCredentials = Depends(security)): is_correct_username = secrets.compare_digest( current_username_bytes, correct_username_bytes ) + current_password_bytes = credentials.password.encode("utf8") correct_password_bytes = bytes(settings.flux_token.encode("utf8")) is_correct_password = secrets.compare_digest( current_password_bytes, correct_password_bytes ) if not (is_correct_username and is_correct_password): - return not_authenticated() + return not_authenticated("heree") return credentials.username diff --git a/app/library/flux.py b/app/library/flux.py index 8b67021..e80125a 100644 --- a/app/library/flux.py +++ b/app/library/flux.py @@ -1,5 +1,6 @@ import json import os +import pwd import re import shlex import time @@ -10,6 +11,21 @@ import app.library.terminal as terminal from app.core.config import settings +# Faux user environment (filtered set of application environment) +# We could likely find a way to better do this, but likely the users won't have customized environments +user_env = { + "SHELL": "/bin/bash", + "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin", + "XDG_RUNTIME_DIR": "/tmp/user/0", + "DISPLAY": ":0", + "COLORTERM": "truecolor", + "SHLVL": "2", + "DEBIAN_FRONTEND": "noninteractive", + "MAKE_TERMERR": "/dev/pts/1", + "LANG": "C.UTF-8", + "TERM": "xterm-256color", +} + def submit_job(handle, jobspec, user): """ @@ -79,6 +95,7 @@ def prepare_job(kwargs, runtime=0, workdir=None, envars=None): command = kwargs["command"] if isinstance(command, str): command = shlex.split(command) + print(f"⭐️ Command being submit: {command}") # Delete command from the kwargs (we added because is required and validated that way) @@ -102,8 +119,9 @@ def prepare_job(kwargs, runtime=0, workdir=None, envars=None): fluxjob.duration = runtime # If we are running as the user, we don't want the current (root) environment + # This isn't perfect because it's artifically created, but it ensures we have paths if settings.enable_pam: - environment = {} + environment = user_env else: environment = dict(os.environ) @@ -147,12 +165,15 @@ def stream_job_output(jobid): pass -def cancel_job(jobid): +def cancel_job(jobid, user): """ Request a job to be cancelled by id. Returns a message to the user and a return code. """ + if settings.enable_pam: + return terminal.cancel_job(jobid, user) + from app.main import app try: @@ -163,7 +184,7 @@ def cancel_job(jobid): return "Job is requested to cancel.", 200 -def get_job_output(jobid, user, delay=None): +def get_job_output(jobid, user=None, delay=None): """ Given a jobid, get the output. @@ -191,11 +212,11 @@ def get_job_output(jobid, user, delay=None): return lines -def list_jobs_detailed(limit=None, query=None): +def list_jobs_detailed(user=None, limit=None, query=None): """ Get a detailed listing of jobs. """ - listing = list_jobs() + listing = list_jobs(user=user) ids = listing.get()["jobs"] jobs = {} for job in ids: @@ -204,24 +225,35 @@ def list_jobs_detailed(limit=None, query=None): break try: - jobinfo = get_job(job["id"]) + jobinfo = get_job(job["id"], user=user) # Best effort hack to do a query if query and not query_job(jobinfo, query): continue + + # This will trigger a data table warning + for needed in ["ranks", "expiration"]: + if needed not in jobinfo: + jobinfo[needed] = "" + jobs[job["id"]] = jobinfo + except Exception: pass return jobs -def list_jobs(): +def list_jobs(user=None): """ Get a simple listing of jobs (just the ids) """ from app.main import app - return flux.job.job_list(app.handle) + if user is None or not settings.enable_pam: + return flux.job.job_list(app.handle) + pw_record = pwd.getpwnam(user) + user_uid = pw_record.pw_uid + return flux.job.job_list(app.handle, userid=user_uid) def get_simple_job(jobid): @@ -238,13 +270,13 @@ def get_job(jobid, user): """ Get details for a job """ - # We've enabled PAM auth - if settings.enable_pam: - return terminal.get_job(jobid, user) - from app.main import app - payload = {"id": int(jobid), "attrs": ["all"]} + jobid = flux.job.JobID(jobid) + + payload = {"id": jobid, "attrs": ["all"]} + if settings.enable_pam: + payload["user"] = user rpc = flux.job.list.JobListIdRPC(app.handle, "job-list.list-id", payload) try: jobinfo = rpc.get() diff --git a/app/library/terminal.py b/app/library/terminal.py index 2d9cd73..5f5f103 100644 --- a/app/library/terminal.py +++ b/app/library/terminal.py @@ -1,10 +1,23 @@ +import json import os import pwd import subprocess -import time # Terminal functions to handle submitting on behalf of a user +job_format = "{id.f58:>12} {username:<8.8} {name:<10.10+} {status:>9.9} {ntasks:>6} {nnodes:>6h} {t_submit!d:%b%d %R::>12} {t_remaining!F:>12h} {contextual_time!F:>8h}" +fields = [ + "id", + "user", + "name", + "status", + "ntasks", + "nnodes", + "time_submit", + "time_remaining", + "time_contextual", +] + class JobId: """ @@ -18,7 +31,7 @@ def get_id(self): return self.job_id -def run_as_user(command, request_env, user, cwd): +def run_as_user(command, user, cwd=None, request_env=None): """ Run a command as a user """ @@ -26,15 +39,26 @@ def run_as_user(command, request_env, user, cwd): user_name = pw_record.pw_name user_uid = pw_record.pw_uid user_gid = pw_record.pw_gid - env = os.environ.copy() + # Even for a user this should be populated with dummy paths, etc. + env = {} + + # cwd will bork on an empty string + cwd = cwd or None + + print(f"🧾️ Running command as {user_name}") env["HOME"] = pw_record.pw_dir env["LOGNAME"] = user_name env["USER"] = pw_record.pw_name - env.update(request_env) + + # Update the environment, if provided + if request_env is not None: + env.update(request_env) # Run command as the user print("⭐️ " + " ".join(command)) + print(cwd) + print(env) process = subprocess.Popen( command, preexec_fn=demote(user_uid, user_gid), @@ -47,6 +71,12 @@ def run_as_user(command, request_env, user, cwd): return process.communicate() +def job_list(user): + """ + List jobs for a user + """ + + def submit_job(jobspec, user): """ Submit a job on behalf of a user. @@ -63,11 +93,25 @@ def submit_job(jobspec, user): break # Flux submit as the user - result = run_as_user(command, jobspec.environment, user, jobspec.cwd) + result = run_as_user( + command, request_env=jobspec.environment, user=user, cwd=jobspec.cwd + ) jobid = (result[0].decode("utf-8")).strip() return JobId(jobid) +def cancel_job(jobid, user): + """ + Cancel a job for a user + """ + command = ["flux", "job", "cancel", jobid] + result = run_as_user(command, user=user) + jobid = (result[0].decode("utf-8")).strip() + if "inactive" in jobid: + return "Job cannot be cancelled: %s." % jobid, 400 + return "Job is requested to cancel.", 200 + + def get_job_output(jobid, user, delay=None): """ Given a jobid, get the output. @@ -75,18 +119,20 @@ def get_job_output(jobid, user, delay=None): If there is a delay, we are requesting on demand, so we want to return early. """ lines = [] - start = time.time() - command = ["flux", "job", "info", jobid, "guest.output"] - import code - - code.interact(local=locals()) + result = run_as_user(command, user=user) + lines = (result[0].decode("utf-8")).strip() - # TODO work on this tomorrow - # If the submit is too close to the log reqest, it cannot find the file handle - # It could be also the jobid cannot be found. - # what is equivalent on command line for: - # for line in flux.job.event_watch(app.handle, jobid, "guest.output"): + output = "" + for line in lines.split("\n"): + try: + content = json.loads(line) + if "context" in content and "data" in content["context"]: + output += content["context"]["data"] + except Exception: + print(line) + pass + return output def demote(user_uid, user_gid): @@ -104,15 +150,14 @@ def result(): def get_job(jobid, user): """ Get details for a job - """ - command = ["flux", "job", "info", jobid, "guest.output"] - import code - - code.interact(local=locals()) - # TODO How to reproduce this? - # payload = {"id": int(jobid), "attrs": ["all"]} - # rpc = flux.job.list.JobListIdRPC(app.handle, "job-list.list-id", payload) - # try: - # jobinfo = rpc.get() - # return jobinfo + This is not currently used, instead we pass a user to job list. + """ + command = ["flux", "jobs", jobid, "-o", job_format, "--suppress-header"] + result = run_as_user(command, user=user) + jobid = (result[0].decode("utf-8")).strip() + jobid = [x for x in jobid.split(" ") if x] + jobinfo = {} + for field in fields: + jobinfo[field] = jobid.pop(0) + return jobinfo diff --git a/app/routers/api.py b/app/routers/api.py index a37a480..791b2eb 100644 --- a/app/routers/api.py +++ b/app/routers/api.py @@ -24,6 +24,9 @@ ) no_auth_router = APIRouter(prefix="/v1", tags=["jobs"]) +# Require auth (and the user in the view) +user_auth = Depends(check_auth) if config.settings.require_auth else None + templates = Jinja2Templates(directory="templates/") @@ -39,7 +42,7 @@ async def service_stop(): @router.get("/jobs/search") -async def jobs_listing(request: Request): +async def jobs_listing(request: Request, user=user_auth): """ Jobslist is intended to be used by the server to render data tables @@ -53,7 +56,7 @@ async def jobs_listing(request: Request): ) # If we have a query, filter to those that have in the name - jobs = list(flux_cli.list_jobs_detailed().values()) + jobs = list(flux_cli.list_jobs_detailed(user=user).values()) total = len(jobs) # Now filter @@ -79,7 +82,7 @@ async def jobs_listing(request: Request): @router.get("/jobs") -async def list_jobs(request: Request): +async def list_jobs(request: Request, user=user_auth): """ List flux jobs associated with the handle. """ @@ -93,11 +96,11 @@ async def list_jobs(request: Request): # Job limit (only relevant for details) limit = helpers.get_int_arg(payload, "limit") - jobs = flux_cli.list_jobs_detailed(limit) + jobs = flux_cli.list_jobs_detailed(limit=limit, user=user) if helpers.has_boolean_arg(payload, "listing"): jobs = list(jobs.values()) else: - listing = flux_cli.list_jobs() + listing = flux_cli.list_jobs(user=user) jobs = jsonable_encoder({"jobs": listing.get_jobs()}) return JSONResponse(content=jobs, status_code=200) @@ -118,16 +121,18 @@ async def list_nodes(): @router.post("/jobs/{jobid}/cancel") -async def cancel_job(jobid): +async def cancel_job(jobid, user=user_auth): """ Cancel a running flux job """ - message, return_code = flux_cli.cancel_job(jobid) - return JSONResponse(content={"Message": message}, status_code=return_code) + message, return_code = flux_cli.cancel_job(jobid, user) + return JSONResponse( + content={"Message": message, "id": jobid}, status_code=return_code + ) @router.post("/jobs/submit") -async def submit_job(request: Request, user=Depends(check_auth)): +async def submit_job(request: Request, user=user_auth): """ Submit a job to our running cluster. @@ -193,7 +198,7 @@ async def submit_job(request: Request, user=Depends(check_auth)): kwargs, runtime=runtime, workdir=workdir, envars=envars ) # This handles either a single/multi user case - flux_future = flux_cli.submit_job(app.handle, fluxjob, user) + flux_future = flux_cli.submit_job(app.handle, fluxjob, user=user) except Exception as e: result = jsonable_encoder( {"Message": "There was an issue submitting that job.", "Error": str(e)} @@ -207,17 +212,17 @@ async def submit_job(request: Request, user=Depends(check_auth)): @router.get("/jobs/{jobid}") -async def get_job(jobid, user=Depends(check_auth)): +async def get_job(jobid, user=user_auth): """ Get job info based on id. """ - info = flux_cli.get_job(jobid, user) + info = flux_cli.get_job(jobid, user=user) info = jsonable_encoder(info) return JSONResponse(content=info, status_code=200) @router.get("/jobs/{jobid}/output") -async def get_job_output(jobid, user=Depends(check_auth)): +async def get_job_output(jobid, user=user_auth): """ Get job output based on id. """ diff --git a/app/routers/views.py b/app/routers/views.py index 5b85660..6f629fd 100644 --- a/app/routers/views.py +++ b/app/routers/views.py @@ -1,4 +1,3 @@ -import flux import flux.job from fastapi import APIRouter, Depends, Request from fastapi.responses import HTMLResponse, RedirectResponse @@ -22,6 +21,9 @@ ) templates = Jinja2Templates(directory="templates/") +# Require auth (and the user in the view) +user_auth = Depends(check_auth) if settings.require_auth else None + @router.get("/", response_class=HTMLResponse) async def home(request: Request): @@ -40,8 +42,8 @@ async def home(request: Request): # List jobs @auth_views_router.get("/jobs", response_class=HTMLResponse) -async def jobs_table(request: Request): - jobs = list(flux_cli.list_jobs_detailed().values()) +async def jobs_table(request: Request, user=user_auth): + jobs = list(flux_cli.list_jobs_detailed(user=user).values()) return templates.TemplateResponse( "jobs/jobs.html", { @@ -58,19 +60,19 @@ async def jobs_table(request: Request): name="job_info", operation_id="job_info", ) -async def job_info(request: Request, jobid, msg=None): - job = flux_cli.get_job(jobid) +async def job_info(request: Request, jobid, msg=None, user=user_auth): + job = flux_cli.get_job(jobid, user=user) # If we have a message, add to messages messages = [msg] if msg else [] # If not completed, ask info to return after a second of waiting if job["state"] == "INACTIVE": - info = flux_cli.get_job_output(jobid) + info = flux_cli.get_job_output(jobid, user=user) # Otherwise ensure we get all the logs! else: - info = flux_cli.get_job_output(jobid, delay=1) + info = flux_cli.get_job_output(jobid, user=user, delay=1) return templates.TemplateResponse( "jobs/job.html", { @@ -85,7 +87,7 @@ async def job_info(request: Request, jobid, msg=None): # Submit a job via a form @auth_views_router.get("/jobs/submit", response_class=HTMLResponse) -async def submit_job(request: Request): +async def submit_job(request: Request, _=user_auth): form = SubmitForm(request) return templates.TemplateResponse( "jobs/submit.html", @@ -95,19 +97,20 @@ async def submit_job(request: Request): # Button to cancel a job @auth_views_router.get("/job/{jobid}/cancel", response_class=HTMLResponse) -async def cancel_job(request: Request, jobid): +async def cancel_job(request: Request, jobid, user=user_auth): from app.main import app - message, _ = flux_cli.cancel_job(jobid) + message, _ = flux_cli.cancel_job(jobid, user=user) url = app.url_path_for(name="job_info", jobid=jobid) + "?msg=" + message return RedirectResponse(url=url) @auth_views_router.post("/jobs/submit") -async def submit_job_post(request: Request): +async def submit_job_post(request: Request, user=user_auth): """ Receive data posted (submit) to the form. """ + print(user) from app.main import app messages = [] @@ -120,7 +123,7 @@ async def submit_job_post(request: Request): if form.kwargs.get("is_launcher") is True: messages.append(launcher.launch(form.kwargs, workdir=form.workdir)) else: - return submit_job_helper(request, app, form) + return submit_job_helper(request, app, form, user=user) else: print("πŸ’ Submit form is NOT valid!") return templates.TemplateResponse( @@ -135,19 +138,19 @@ async def submit_job_post(request: Request): ) -def submit_job_helper(request, app, form): +def submit_job_helper(request, app, form, user): """ A helper to submit a flux job (not a launcher) """ # Submit the job and return the ID, but allow for error - try: + if 1 == 1: # Prepare the flux job! We don't support envars here yet fluxjob = flux_cli.prepare_job( form.kwargs, runtime=form.runtime, workdir=form.workdir ) - flux_future = flux.job.submit_async(app.handle, fluxjob) + flux_future = flux_cli.submit_job(app.handle, fluxjob, user=user) jobid = flux_future.get_id() - intid = int(jobid) + intid = flux.job.JobID(jobid) message = f"Your job was successfully submit! 🦊 {jobid}" return templates.TemplateResponse( "jobs/submit.html", @@ -157,8 +160,8 @@ def submit_job_helper(request, app, form): "messages": [message], }, ) - except Exception as e: - form.errors.append("There was an issue submitting that job: %s" % str(e)) + # except Exception as e: + # form.errors.append("There was an issue submitting that job: %s" % str(e)) return templates.TemplateResponse( "jobs/submit.html", diff --git a/clients/python/flux_restful_client/main/client.py b/clients/python/flux_restful_client/main/client.py index 7f21634..6c55ddd 100644 --- a/clients/python/flux_restful_client/main/client.py +++ b/clients/python/flux_restful_client/main/client.py @@ -160,7 +160,6 @@ def authenticate_request(self, originalResponse): h = utils.parse_auth_header(authHeaderRaw) headers.update( { - "service": h.Service, "Accept": "application/json", "User-Agent": "flux-restful-client", } diff --git a/docs/getting_started/developer-guide.md b/docs/getting_started/developer-guide.md index cfdb744..43f5c51 100644 --- a/docs/getting_started/developer-guide.md +++ b/docs/getting_started/developer-guide.md @@ -114,27 +114,10 @@ $ make ``` If you are developing, you must do the second approach as the server won't live-update -with the first. If you want to start flux running with systemd: +with the first. If you want to start flux running as a separate process: -(note this isn't currently working): - -```bash -sudo systemctl daemon-reload -sudo systemctl enable flux.service -sudo systemctl start flux.service -``` -Make sure it is running: ```bash -$ sudo systemctl status flux -``` - -Instead I did: - -```bash -/usr/bin/bash -c '\ - XDG_RUNTIME_DIR=/run/user/$UID \ - DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus \ - /usr/bin/flux broker \ +sudo -u flux /usr/bin/flux broker \ --config-path=/etc/flux/system/conf.d \ -Scron.directory=/etc/flux/system/cron.d \ -Srundir=/run/flux \ @@ -146,15 +129,20 @@ Instead I did: -Sbroker.quorum=0 \ -Sbroker.quorum-timeout=none \ -Sbroker.exit-norestart=42 \ - -Scontent.restore=auto \ -' & + -Scontent.restore=auto & +``` + +And then we need munge to be started (this should be done by the devcontainer): + +```bash +$ sudo service munge start ``` -And then: +And export any authentication envars you need before running make. ```bash export FLUX_URI=local:///run/flux/local -$ sudo make +$ sudo -E make ``` #### 3. Authentication diff --git a/templates/jobs/submit.html b/templates/jobs/submit.html index 736de38..f840e2a 100644 --- a/templates/jobs/submit.html +++ b/templates/jobs/submit.html @@ -12,12 +12,12 @@

Submit a Job

+ {% if form.errors %}
{% for error in form.errors %} +

{{ error }}

{% endfor %} +
{% endif %}
View Jobs - {% if form.errors %}
{% for error in form.errors %} -

{{ error }}

{% endfor %} -
{% endif %}
diff --git a/tests/test_api.py b/tests/test_api.py index 58e5016..aa5f908 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -27,6 +27,8 @@ def get_basic_auth(username, password): def get_headers(): + flux_user = os.environ.get("FLUX_USER") + flux_token = os.environ.get("FLUX_TOKEN") auth_header = get_basic_auth(flux_user, flux_token) if isinstance(auth_header, bytes): auth_header = auth_header.decode("utf-8") @@ -40,40 +42,17 @@ def get_headers(): headers = {} if os.environ.get("TEST_AUTH"): - # Define authentication in environment for server - flux_user = "fluxuser" - flux_token = "12345" - os.environ["FLUX_USER"] = flux_user - os.environ["FLUX_TOKEN"] = flux_token - os.environ["FLUX_REQUIRE_AUTH"] = "true" test_auth = True headers = get_headers() -elif os.environ.get("TEST_PAM_AUTH"): - # Define authentication in environment for server - flux_user = "fluxuser" - flux_token = "12345" - os.environ["FLUX_REQUIRE_AUTH"] = "true" - os.environ["FLUX_ENABLE_PAM"] = "true" +if os.environ.get("TEST_PAM_AUTH"): test_pam_auth = True test_pam_auth_fail = os.environ["TEST_PAM_AUTH_FAIL"] == "true" - print(test_pam_auth_fail) headers = get_headers() skip_if_expected_fail = pytest.mark.skipif(test_pam_auth_fail, reason="Unix stuff") -def test_failure(): - """ - Test failing auth - """ - response = client.get("/v1/jobs", headers=headers) - if test_pam_auth_fail is True: - assert response.status_code != 200 - else: - assert response.status_code == 200 - - @skip_if_expected_fail def test_submit_list_job(): """ From 338ace81cf3f712847d0dc93ca7bd632622c928f Mon Sep 17 00:00:00 2001 From: vsoch Date: Thu, 23 Feb 2023 16:03:08 -0700 Subject: [PATCH 6/9] pass path Signed-off-by: vsoch --- .github/workflows/python-tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-tests.yaml b/.github/workflows/python-tests.yaml index d2449e4..a5b0bf7 100644 --- a/.github/workflows/python-tests.yaml +++ b/.github/workflows/python-tests.yaml @@ -82,4 +82,4 @@ jobs: sudo useradd -m -p $(openssl passwd '12345') "fluxuser" || echo "Already exists." flux start sleep infinity & pid=$! - sudo -E -u fluxuser pytest -xs flux_restful_client/tests/test_api.py + sudo -E PATH=PATH -E PYTHONPATH=PYTHONPATH -u fluxuser pytest -xs flux_restful_client/tests/test_api.py From 5919e5a8fe7baef80a7d437d27a0adc20cdf3cc6 Mon Sep 17 00:00:00 2001 From: vsoch Date: Thu, 23 Feb 2023 16:07:04 -0700 Subject: [PATCH 7/9] pass path Signed-off-by: vsoch --- .github/workflows/tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index cc293e5..1e9c0bd 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -58,5 +58,5 @@ jobs: export TEST_PAM_AUTH=true export FLUX_REQUIRE_AUTH=true export TEST_PAM_AUTH_FAIL=false - sudo -E -u fluxuser pytest -xs tests/test_api.py + sudo -E PATH=PATH -E PYTHONPATH=PYTHONPATH -u fluxuser pytest -xs tests/test_api.py kill -9 $pid From 7fe902fb332f97e7f9e647268bd53ae47205e904 Mon Sep 17 00:00:00 2001 From: vsoch Date: Thu, 23 Feb 2023 16:13:16 -0700 Subject: [PATCH 8/9] not sure how to test this yet Signed-off-by: vsoch --- .github/workflows/python-tests.yaml | 24 ------------------------ .github/workflows/tests.yaml | 10 ++-------- 2 files changed, 2 insertions(+), 32 deletions(-) diff --git a/.github/workflows/python-tests.yaml b/.github/workflows/python-tests.yaml index a5b0bf7..03d2747 100644 --- a/.github/workflows/python-tests.yaml +++ b/.github/workflows/python-tests.yaml @@ -59,27 +59,3 @@ jobs: export FLUX_USER=fluxuser export FLUX_TOKEN=12345 pytest -xs flux_restful_client/tests/test_api.py - - test-pam-auth: - needs: [prepare-container] - runs-on: ubuntu-latest - services: - api: - env: - INSTALL_BRANCH: ${{ needs.prepare-container.outputs.branch }} - INSTALL_REPO: ${{ github.repository }} - FLUX_ENABLE_PAM: true - FLUX_REQUIRE_AUTH: true - image: ghcr.io/flux-framework/flux-restful-api:latest - ports: - - 5000:5000 - steps: - - uses: actions/checkout@v3 - - name: Run tests with auth - run: | - cd clients/python - pip install -e .[all] - sudo useradd -m -p $(openssl passwd '12345') "fluxuser" || echo "Already exists." - flux start sleep infinity & - pid=$! - sudo -E PATH=PATH -E PYTHONPATH=PYTHONPATH -u fluxuser pytest -xs flux_restful_client/tests/test_api.py diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 1e9c0bd..704dd49 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -52,11 +52,5 @@ jobs: flux start sleep infinity & pid=$! - sudo useradd -m -p $(openssl passwd '12345') "fluxuser" || echo "Already exists." - unset FLUX_USER - unset FLUX_TOKEN - export TEST_PAM_AUTH=true - export FLUX_REQUIRE_AUTH=true - export TEST_PAM_AUTH_FAIL=false - sudo -E PATH=PATH -E PYTHONPATH=PYTHONPATH -u fluxuser pytest -xs tests/test_api.py - kill -9 $pid + # TODO how to test pam in this mode? + # We would need to start flux as flux and run tests as a user From 7fb157f214b8633ca6646bfd80b8f4259c599453 Mon Sep 17 00:00:00 2001 From: vsoch Date: Fri, 24 Feb 2023 18:10:00 -0700 Subject: [PATCH 9/9] add multi-tenant tutorial link Signed-off-by: vsoch --- .github/workflows/tests.yaml | 5 ----- docs/tutorials/index.md | 4 ++++ 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 704dd49..fae5301 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -47,10 +47,5 @@ jobs: export FLUX_ENABLE_PAM=true flux start pytest -xs tests/test_api.py - # We can't test multi-user mode here because flux start needs to be run by - # flux, and then the test by the user. - flux start sleep infinity & - pid=$! - # TODO how to test pam in this mode? # We would need to start flux as flux and run tests as a user diff --git a/docs/tutorials/index.md b/docs/tutorials/index.md index e58dce0..d19f0ce 100644 --- a/docs/tutorials/index.md +++ b/docs/tutorials/index.md @@ -8,6 +8,10 @@ FLux instance. We also currently provide an example client in the [examples](htt folder with additional examples. If you have any questions or issues, please [let us know](https://github.com/flux-framework/flux-restful-api/issues) +## External Tutorials + + - [Multi-user mode](https://flux-framework.org/flux-operator/getting_started/tutorials/multi-tenancy.html) deployed via the Flux Operator. + ```{toctree} :maxdepth: 3 ../auto_examples/index