From 6b144d2e3b384b07cb13d257d7485d719f43a6ed Mon Sep 17 00:00:00 2001 From: Duc Trung Le Date: Wed, 15 May 2024 12:02:05 +0200 Subject: [PATCH] Adopt `binderhub` (#83) * Add database * Update config * Add repo provider to interface * Create binderhub build handler * Add pydantic models * Build and delete image work * Start server work * Update dev dependencies * Update UI tests * Add missing deps * Add snapshots * Update snapshots * Split unit test module * Reactivate unit tests * Add tests for binderhub build backend * Add docstring * Update tests * Update README * Make tljh optional * Fix open server URL --- .github/workflows/build.yml | 26 +- .gitignore | 1 + CONTRIBUTING.md | 10 +- README.md | 31 ++- dev-requirements.txt | 2 + pyproject.toml | 15 +- src/environments/App.tsx | 4 + src/environments/EnvironmentList.tsx | 4 +- src/environments/LogDialog.tsx | 4 +- src/environments/NewEnvironmentDialog.tsx | 205 +++++++++++----- src/environments/main.tsx | 3 +- src/environments/types.ts | 1 + src/servers/NewServerDialog.tsx | 3 +- src/servers/OpenServerButton.tsx | 8 +- src/servers/ServersList.tsx | 6 +- src/servers/types.ts | 2 +- tljh_repo2docker/__init__.py | 43 ++-- tljh_repo2docker/alembic/alembic.ini | 66 ++++++ tljh_repo2docker/alembic/env.py | 65 +++++ tljh_repo2docker/alembic/script.py.mako | 24 ++ .../versions/ac1b4e7e52f3_first_migration.py | 43 ++++ tljh_repo2docker/app.py | 109 ++++++++- tljh_repo2docker/base.py | 97 ++++++++ tljh_repo2docker/binderhub_builder.py | 148 ++++++++++++ tljh_repo2docker/binderhub_log.py | 90 +++++++ tljh_repo2docker/database/manager.py | 192 +++++++++++++++ tljh_repo2docker/database/model.py | 42 ++++ tljh_repo2docker/database/schemas.py | 43 ++++ tljh_repo2docker/dbutil.py | 222 ++++++++++++++++++ tljh_repo2docker/environments.py | 15 +- tljh_repo2docker/servers.py | 28 ++- tljh_repo2docker/servers_api.py | 20 +- tljh_repo2docker/templates/images.html | 2 +- .../tests/binderhub_build/__init__.py | 0 .../tests/binderhub_build/conftest.py | 102 ++++++++ .../tests/binderhub_build/test_builder.py | 104 ++++++++ .../tests/binderhub_build/test_images.py | 38 +++ .../tests/binderhub_build/test_logs.py | 42 ++++ tljh_repo2docker/tests/conftest.py | 68 +----- .../tests/local_build/__init__.py | 0 .../tests/local_build/conftest.py | 53 +++++ .../tests/{ => local_build}/test_builder.py | 2 +- .../tests/{ => local_build}/test_images.py | 4 +- .../tests/{ => local_build}/test_logs.py | 17 +- tljh_repo2docker/tests/utils.py | 53 ++++- ui-tests/binderhub_config.py | 46 ++++ .../ui.test.ts/admin.png} | Bin .../ui.test.ts/environment-console.png} | Bin .../ui.test.ts/environment-dialog.png | Bin 0 -> 51212 bytes .../ui.test.ts/environment-list.png} | Bin .../environment-remove-confirm.png} | Bin .../ui.test.ts/environment-removed.png} | Bin .../ui.test.ts/environments-page.png} | Bin .../ui.test.ts/login-page.png} | Bin .../ui.test.ts/running-servers.png | Bin 0 -> 27679 bytes .../ui.test.ts/server-remove-confirm.png | Bin 0 -> 42002 bytes .../ui.test.ts/server-removed.png} | Bin .../ui.test.ts/servers-dialog.png} | Bin .../ui.test.ts/servers-page.png} | Bin .../ui.test.ts/user.png} | Bin ui-tests/jupyterhub_config_binderhub.py | 106 +++++++++ .../jupyterhub_config_local.py | 0 ui-tests/local_snapshots/ui.test.ts/admin.png | Bin 0 -> 22244 bytes .../ui.test.ts/environment-console.png | Bin 0 -> 108741 bytes .../ui.test.ts/environment-dialog.png} | Bin .../ui.test.ts/environment-list.png | Bin 0 -> 29532 bytes .../ui.test.ts/environment-remove-confirm.png | Bin 0 -> 43210 bytes .../ui.test.ts/environment-removed.png | Bin 0 -> 24456 bytes .../ui.test.ts/environments-page.png | Bin 0 -> 24456 bytes .../local_snapshots/ui.test.ts/login-page.png | Bin 0 -> 29865 bytes .../ui.test.ts/running-servers.png} | Bin .../ui.test.ts/server-remove-confirm.png} | Bin .../ui.test.ts/server-removed.png | Bin 0 -> 22430 bytes .../ui.test.ts/servers-dialog.png | Bin 0 -> 49850 bytes .../ui.test.ts/servers-page.png | Bin 0 -> 22244 bytes ui-tests/local_snapshots/ui.test.ts/user.png | Bin 0 -> 20933 bytes ui-tests/package.json | 3 +- ui-tests/playwright.config.js | 12 +- ui-tests/tests/ui.test.ts | 9 +- ui-tests/tljh_repo2docker_binderhub.py | 9 + 80 files changed, 2008 insertions(+), 234 deletions(-) create mode 100644 tljh_repo2docker/alembic/alembic.ini create mode 100644 tljh_repo2docker/alembic/env.py create mode 100644 tljh_repo2docker/alembic/script.py.mako create mode 100644 tljh_repo2docker/alembic/versions/ac1b4e7e52f3_first_migration.py create mode 100644 tljh_repo2docker/binderhub_builder.py create mode 100644 tljh_repo2docker/binderhub_log.py create mode 100644 tljh_repo2docker/database/manager.py create mode 100644 tljh_repo2docker/database/model.py create mode 100644 tljh_repo2docker/database/schemas.py create mode 100644 tljh_repo2docker/dbutil.py create mode 100644 tljh_repo2docker/tests/binderhub_build/__init__.py create mode 100644 tljh_repo2docker/tests/binderhub_build/conftest.py create mode 100644 tljh_repo2docker/tests/binderhub_build/test_builder.py create mode 100644 tljh_repo2docker/tests/binderhub_build/test_images.py create mode 100644 tljh_repo2docker/tests/binderhub_build/test_logs.py create mode 100644 tljh_repo2docker/tests/local_build/__init__.py create mode 100644 tljh_repo2docker/tests/local_build/conftest.py rename tljh_repo2docker/tests/{ => local_build}/test_builder.py (97%) rename tljh_repo2docker/tests/{ => local_build}/test_images.py (83%) rename tljh_repo2docker/tests/{ => local_build}/test_logs.py (66%) create mode 100644 ui-tests/binderhub_config.py rename ui-tests/{tests/ui.test.ts-snapshots/admin-linux.png => binderhub_snapshots/ui.test.ts/admin.png} (100%) rename ui-tests/{tests/ui.test.ts-snapshots/environment-console-linux.png => binderhub_snapshots/ui.test.ts/environment-console.png} (100%) create mode 100644 ui-tests/binderhub_snapshots/ui.test.ts/environment-dialog.png rename ui-tests/{tests/ui.test.ts-snapshots/environment-list-linux.png => binderhub_snapshots/ui.test.ts/environment-list.png} (100%) rename ui-tests/{tests/ui.test.ts-snapshots/environment-remove-confirm-linux.png => binderhub_snapshots/ui.test.ts/environment-remove-confirm.png} (100%) rename ui-tests/{tests/ui.test.ts-snapshots/environment-removed-linux.png => binderhub_snapshots/ui.test.ts/environment-removed.png} (100%) rename ui-tests/{tests/ui.test.ts-snapshots/environments-page-linux.png => binderhub_snapshots/ui.test.ts/environments-page.png} (100%) rename ui-tests/{tests/ui.test.ts-snapshots/login-page-linux.png => binderhub_snapshots/ui.test.ts/login-page.png} (100%) create mode 100644 ui-tests/binderhub_snapshots/ui.test.ts/running-servers.png create mode 100644 ui-tests/binderhub_snapshots/ui.test.ts/server-remove-confirm.png rename ui-tests/{tests/ui.test.ts-snapshots/server-removed-linux.png => binderhub_snapshots/ui.test.ts/server-removed.png} (100%) rename ui-tests/{tests/ui.test.ts-snapshots/servers-dialog-linux.png => binderhub_snapshots/ui.test.ts/servers-dialog.png} (100%) rename ui-tests/{tests/ui.test.ts-snapshots/servers-page-linux.png => binderhub_snapshots/ui.test.ts/servers-page.png} (100%) rename ui-tests/{tests/ui.test.ts-snapshots/user-linux.png => binderhub_snapshots/ui.test.ts/user.png} (100%) create mode 100644 ui-tests/jupyterhub_config_binderhub.py rename jupyterhub_config.py => ui-tests/jupyterhub_config_local.py (100%) create mode 100644 ui-tests/local_snapshots/ui.test.ts/admin.png create mode 100644 ui-tests/local_snapshots/ui.test.ts/environment-console.png rename ui-tests/{tests/ui.test.ts-snapshots/environment-dialog-linux.png => local_snapshots/ui.test.ts/environment-dialog.png} (100%) create mode 100644 ui-tests/local_snapshots/ui.test.ts/environment-list.png create mode 100644 ui-tests/local_snapshots/ui.test.ts/environment-remove-confirm.png create mode 100644 ui-tests/local_snapshots/ui.test.ts/environment-removed.png create mode 100644 ui-tests/local_snapshots/ui.test.ts/environments-page.png create mode 100644 ui-tests/local_snapshots/ui.test.ts/login-page.png rename ui-tests/{tests/ui.test.ts-snapshots/running-servers-linux.png => local_snapshots/ui.test.ts/running-servers.png} (100%) rename ui-tests/{tests/ui.test.ts-snapshots/server-remove-confirm-linux.png => local_snapshots/ui.test.ts/server-remove-confirm.png} (100%) create mode 100644 ui-tests/local_snapshots/ui.test.ts/server-removed.png create mode 100644 ui-tests/local_snapshots/ui.test.ts/servers-dialog.png create mode 100644 ui-tests/local_snapshots/ui.test.ts/servers-page.png create mode 100644 ui-tests/local_snapshots/ui.test.ts/user.png create mode 100644 ui-tests/tljh_repo2docker_binderhub.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e9b1ef7..400b86d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: push: branches: master pull_request: - branches: "*" + branches: '*' jobs: build: @@ -70,7 +70,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10"] + python-version: ['3.8', '3.9', '3.10'] steps: - name: Checkout @@ -91,15 +91,24 @@ jobs: python -m pip install tljh_repo2docker*.whl npm -g install configurable-http-proxy - - name: Run Tests + - name: Run local build backend tests + working-directory: tljh_repo2docker/tests run: | - python -m pytest --cov + python -m pytest local_build --cov + + - name: Run binderhub build backend tests + working-directory: tljh_repo2docker/tests + run: | + python -m pytest binderhub_build --cov integration-tests: name: Integration tests needs: build runs-on: ubuntu-latest - + strategy: + fail-fast: false + matrix: + build-backend: ['local', 'binderhub'] env: PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/pw-browsers @@ -139,10 +148,10 @@ jobs: run: npx playwright install chromium working-directory: ui-tests - - name: Execute integration tests + - name: Execute integration tests with ${{ matrix.build-backend }} build backend working-directory: ui-tests run: | - npx playwright test + npm run test:${{ matrix.build-backend }} - name: Upload Playwright Test report if: always() @@ -150,5 +159,6 @@ jobs: with: name: tljh-playwright-tests path: | - ui-tests/test-results + ui-tests/local-test-results + ui-tests/binderhub-test-results ui-tests/playwright-report diff --git a/.gitignore b/.gitignore index 0f8645b..41869a8 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ lib/ # Hatch version _version.py +*.sqlite \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 459c00f..59add32 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -46,10 +46,16 @@ docker pull quay.io/jupyterhub/repo2docker:main ## Run -Finally, start `jupyterhub` with the config in `debug` mode: +Finally, start `jupyterhub` with local build backend: ```bash -python -m jupyterhub -f jupyterhub_config.py --debug +python -m jupyterhub -f ui-tests/jupyterhub_config_local.py --debug +``` + +or using `binderhub` build backend + +```bash +python -m jupyterhub -f ui-tests/jupyterhub_config_binderhub.py --debug ``` Open https://localhost:8000 in a web browser. diff --git a/README.md b/README.md index 2df4ef6..6479de2 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ![Github Actions Status](https://github.com/plasmabio/tljh-repo2docker/workflows/Tests/badge.svg) -TLJH plugin providing a JupyterHub service to build and use Docker images as user environments. The Docker images are built using [`repo2docker`](https://repo2docker.readthedocs.io/en/latest/). +TLJH plugin provides a JupyterHub service to build and use Docker images as user environments. The Docker images can be built locally using [`repo2docker`](https://repo2docker.readthedocs.io/en/latest/) or via the [`binderhub`](https://binderhub.readthedocs.io/en/latest/) service. ## Requirements @@ -46,8 +46,10 @@ The available settings for this service are: - `default_memory_limit`: Default memory limit of a user server; defaults to `None` - `default_cpu_limit`: Default CPU limit of a user server; defaults to `None` - `machine_profiles`: Instead of entering directly the CPU and Memory value, `tljh-repo2docker` can be configured with pre-defined machine profiles and users can only choose from the available option; defaults to `[]` +- `binderhub_url`: The optional URL of the `binderhub` service. If it is available, `tljh-repo2docker` will use this service to build images. +- `db_url`: The connection string of the database. `tljh-repo2docker` needs a database to store the image metadata. By default, it will create a `sqlite` database in the starting directory of the service. To use other databases (`PostgreSQL` or `MySQL`), users need to specify the connection string via this config and install the additional drivers (`asyncpg` or `aiomysql`). -This service requires the following scopes : `read:users`, `admin:servers` and `read:roles:users`. Here is an example of registering `tljh_repo2docker`'s service with JupyterHub +This service requires the following scopes : `read:users`, `admin:servers` and `read:roles:users`. If `binderhub` service is used, ` access:services!service=binder`is also needed. Here is an example of registering `tljh_repo2docker`'s service with JupyterHub ```python # jupyterhub_config.py @@ -78,7 +80,12 @@ c.JupyterHub.load_roles = [ { "description": "Role for tljh_repo2docker service", "name": "tljh-repo2docker-service", - "scopes": ["read:users", "admin:servers", "read:roles:users"], + "scopes": [ + "read:users", + "read:roles:users", + "admin:servers", + "access:services!service=binder", + ], "services": ["tljh_repo2docker"], }, { @@ -147,25 +154,30 @@ c.JupyterHub.load_roles = [ The _Environments_ page shows the list of built environments, as well as the ones currently being built: -![environments](https://raw.githubusercontent.com/plasmabio/tljh-repo2docker/master/ui-tests/tests/ui.test.ts-snapshots/environment-list-linux.png) +![environments](https://raw.githubusercontent.com/plasmabio/tljh-repo2docker/master/ui-tests/local_snapshots/ui.test.ts/environment-list.png) ### Add a new environment Just like on [Binder](https://mybinder.org), new environments can be added by clicking on the _Add New_ button and providing a URL to the repository. Optional names, memory, and CPU limits can also be set for the environment: -![add-new](https://raw.githubusercontent.com/plasmabio/tljh-repo2docker/master/ui-tests/tests/ui.test.ts-snapshots/environment-dialog-linux.png) +![add-new](https://raw.githubusercontent.com/plasmabio/tljh-repo2docker/master/ui-tests/local_snapshots/ui.test.ts/environment-dialog.png) + +> [!NOTE] +> If the build backend is `binderhub` service, users need to select the [repository provider](https://binderhub.readthedocs.io/en/latest/developer/repoproviders.html) and can not specify the custom build arguments + +![add-new-binderhub](https://raw.githubusercontent.com/plasmabio/tljh-repo2docker/master/ui-tests/binderhub_snapshots/ui.test.ts/environment-dialog.png) ### Follow the build logs Clicking on the _Logs_ button will open a new dialog with the build logs: -![logs](https://raw.githubusercontent.com/plasmabio/tljh-repo2docker/master/ui-tests/tests/ui.test.ts-snapshots/environment-console-linux.png) +![logs](https://raw.githubusercontent.com/plasmabio/tljh-repo2docker/master/ui-tests/local_snapshots/ui.test.ts/environment-console.png) ### Select an environment Once ready, the environments can be selected from the JupyterHub spawn page: -![select-env](https://raw.githubusercontent.com/plasmabio/tljh-repo2docker/master/ui-tests/tests/ui.test.ts-snapshots/servers-dialog-linux.png) +![select-env](https://raw.githubusercontent.com/plasmabio/tljh-repo2docker/master/ui-tests/local_snapshots/ui.test.ts/servers-dialog.png) ### Private Repositories @@ -173,12 +185,15 @@ Once ready, the environments can be selected from the JupyterHub spawn page: It is possible to provide the `username` and `password` in the `Credentials` section of the form: -![image](https://raw.githubusercontent.com/plasmabio/tljh-repo2docker/master/ui-tests/tests/ui.test.ts-snapshots/environment-dialog-linux.png) +![image](https://raw.githubusercontent.com/plasmabio/tljh-repo2docker/master/ui-tests/local_snapshots/ui.test.ts/environment-dialog.png) On GitHub and GitLab, a user might have to first create an access token with `read` access to use as the password: ![image](https://user-images.githubusercontent.com/591645/107350843-39c3bf80-6aca-11eb-8b82-6fa95ba4c7e4.png) +> [!NOTE] +> The `binderhub` build backend does not support configuring private repositories credentials from the interface. + ### Machine profiles Instead of entering directly the CPU and Memory value, `tljh-repo2docker` can be configured with pre-defined machine profiles and users can only choose from the available options. The following configuration will add 3 machines with labels Small, Medium and Large to the profile list: diff --git a/dev-requirements.txt b/dev-requirements.txt index 5a9414a..77d4592 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,5 +1,7 @@ git+https://github.com/jupyterhub/the-littlest-jupyterhub@1.0.0 +git+https://github.com/jupyterhub/binderhub.git@main jupyterhub>=4,<5 +alembic>=1.13.0,<1.14 pytest pytest-aiohttp pytest-asyncio diff --git a/pyproject.toml b/pyproject.toml index 8a3f29f..240a096 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,13 +7,21 @@ dependencies = [ "aiodocker~=0.19", "dockerspawner~=12.1", "jupyter_client>=6.1,<8", - "httpx" + "httpx", + "sqlalchemy>=2", + "pydantic>=2,<3", + "alembic>=1.13,<2", + "jupyter-repo2docker>=2024,<2025", + "aiosqlite~=0.19.0" ] dynamic = ["version"] license = {file = "LICENSE"} name = "tljh-repo2docker" readme = "README.md" +[project.scripts] +tljh_repo2docker_upgrade_db = "tljh_repo2docker.dbutil:main" + [project.entry-points.tljh] tljh_repo2docker = "tljh_repo2docker" @@ -56,10 +64,7 @@ source_dir = "src" version_cmd = "hatch version" [tool.jupyter-releaser.hooks] -before-build-npm = [ - "npm install", - "npm run build:prod", -] +before-build-npm = ["npm install", "npm run build:prod"] before-build-python = ["npm run clean"] before-bump-version = ["python -m pip install hatch"] diff --git a/src/environments/App.tsx b/src/environments/App.tsx index 6a3779c..5a301ef 100644 --- a/src/environments/App.tsx +++ b/src/environments/App.tsx @@ -16,6 +16,8 @@ export interface IAppProps { default_cpu_limit: string; default_mem_limit: string; machine_profiles: IMachineProfile[]; + use_binderhub: boolean; + repo_providers?: { label: string; value: string }[]; } export default function App(props: IAppProps) { const jhData = useJupyterhub(); @@ -35,6 +37,8 @@ export default function App(props: IAppProps) { default_cpu_limit={props.default_cpu_limit} default_mem_limit={props.default_mem_limit} machine_profiles={props.machine_profiles} + use_binderhub={props.use_binderhub} + repo_providers={props.repo_providers} /> diff --git a/src/environments/EnvironmentList.tsx b/src/environments/EnvironmentList.tsx index 25aff38..296ad7f 100644 --- a/src/environments/EnvironmentList.tsx +++ b/src/environments/EnvironmentList.tsx @@ -59,7 +59,7 @@ const columns: GridColDef[] = [ ) : params.value === 'building' ? ( ) : null; } @@ -75,7 +75,7 @@ const columns: GridColDef[] = [ return ( ); } diff --git a/src/environments/LogDialog.tsx b/src/environments/LogDialog.tsx index 45e95ca..845acfd 100644 --- a/src/environments/LogDialog.tsx +++ b/src/environments/LogDialog.tsx @@ -65,13 +65,13 @@ function _EnvironmentLogButton(props: IEnvironmentLogButton) { eventSource.onmessage = event => { const data = JSON.parse(event.data); + terminal.write(data.message); + fitAddon.fit(); if (data.phase === 'built') { eventSource.close(); setBuilt(true); return; } - terminal.write(data.message); - fitAddon.fit(); }; } }, [jhData, props.image]); diff --git a/src/environments/NewEnvironmentDialog.tsx b/src/environments/NewEnvironmentDialog.tsx index a36c9e3..335b666 100644 --- a/src/environments/NewEnvironmentDialog.tsx +++ b/src/environments/NewEnvironmentDialog.tsx @@ -13,7 +13,14 @@ import { Select, Typography } from '@mui/material'; -import { Fragment, memo, useCallback, useMemo, useState } from 'react'; +import { + Fragment, + memo, + useCallback, + useEffect, + useMemo, + useState +} from 'react'; import { useAxios } from '../common/AxiosContext'; import { SmallTextField } from '../common/SmallTextField'; @@ -28,9 +35,12 @@ export interface INewEnvironmentDialogProps { default_cpu_limit: string; default_mem_limit: string; machine_profiles: IMachineProfile[]; + use_binderhub: boolean; + repo_providers?: { label: string; value: string }[]; } interface IFormValues { + provider?: string; repo?: string; ref?: string; name?: string; @@ -74,11 +84,53 @@ function _NewEnvironmentDialog(props: INewEnvironmentDialogProps) { [setFormValues] ); const validated = useMemo(() => { - return Boolean(formValues.repo) && Boolean(formValues.ref); - }, [formValues]); + return Boolean(formValues.repo); + }, [formValues.repo]); const [selectedProfile, setSelectedProfile] = useState(0); + const [selectedProvider, setSelectedProvider] = useState(0); + + const onMachineProfileChange = useCallback( + (value?: string | number) => { + if (value !== undefined) { + const index = parseInt(value + ''); + const selected = props.machine_profiles[index]; + if (selected !== undefined) { + updateFormValue('cpu', selected.cpu + ''); + updateFormValue('memory', selected.memory + ''); + setSelectedProfile(index); + } + } + }, + [props.machine_profiles, updateFormValue] + ); + const onRepoProviderChange = useCallback( + (value?: string | number) => { + if (value !== undefined) { + const index = parseInt(value + ''); + const selected = props.repo_providers?.[index]; + if (selected !== undefined) { + updateFormValue('provider', selected.value); + setSelectedProvider(index); + } + } + }, + [props.repo_providers, updateFormValue] + ); + useEffect(() => { + if (props.machine_profiles.length > 0) { + onMachineProfileChange(0); + } + if (props.repo_providers && props.repo_providers.length > 0) { + onRepoProviderChange(0); + } + }, [ + props.machine_profiles, + props.repo_providers, + onMachineProfileChange, + onRepoProviderChange + ]); const MemoryCpuSelector = useMemo(() => { return ( @@ -120,16 +172,7 @@ function _NewEnvironmentDialog(props: INewEnvironmentDialogProps) { value={selectedProfile} label="Machine profile" size="small" - onChange={e => { - const value = e.target.value; - if (value) { - const index = parseInt(value + ''); - const selected = props.machine_profiles[index]; - updateFormValue('cpu', selected.cpu + ''); - updateFormValue('memory', selected.memory + ''); - setSelectedProfile(index); - } - }} + onChange={e => onMachineProfileChange(e.target.value)} > {props.machine_profiles.map((it, idx) => { return ( @@ -141,7 +184,8 @@ function _NewEnvironmentDialog(props: INewEnvironmentDialogProps) { ); - }, [updateFormValue, props.machine_profiles, selectedProfile]); + }, [props.machine_profiles, selectedProfile, onMachineProfileChange]); + return ( @@ -167,6 +211,7 @@ function _NewEnvironmentDialog(props: INewEnvironmentDialogProps) { .replace('https://', '') .replace(/\//g, '-') .replace(/\./g, '-'); + data.ref = data.ref && data.ref.length > 0 ? data.ref : 'HEAD'; data.cpu = data.cpu ?? '2'; data.memory = data.memory ?? '2'; data.username = data.username ?? ''; @@ -186,6 +231,29 @@ function _NewEnvironmentDialog(props: INewEnvironmentDialogProps) { > Create a new environment + {props.use_binderhub && props.repo_providers && ( + + + Repository provider + + + + )} updateFormValue('ref', e.target.value)} value={formValues.ref ?? ''} /> @@ -221,56 +290,64 @@ function _NewEnvironmentDialog(props: INewEnvironmentDialogProps) { {props.machine_profiles.length > 0 ? MachineProfileSelector : MemoryCpuSelector} - - - Advanced - - - updateFormValue('buildargs', e.target.value)} - /> - - - Credentials - - - updateFormValue('username', e.target.value)} - /> - + {!props.use_binderhub && ( + + + + Advanced + + + updateFormValue('buildargs', e.target.value)} + /> + + )} + {!props.use_binderhub && ( + + + + Credentials + + + updateFormValue('username', e.target.value)} + /> + + + )} )} diff --git a/src/servers/ServersList.tsx b/src/servers/ServersList.tsx index 086e605..d65c290 100644 --- a/src/servers/ServersList.tsx +++ b/src/servers/ServersList.tsx @@ -65,7 +65,7 @@ const columns: GridColDef[] = [ ); @@ -86,7 +86,9 @@ function _ServerList(props: IServerListProps) { } const allServers = servers.map((it, id) => { const newItem: any = { ...it, id }; - newItem.image = it.user_options.image ?? ''; + newItem.image = + it.user_options?.display_name ?? it.user_options.image ?? ''; + newItem.uid = it.user_options?.uid ?? null; newItem.last_activity = formatTime(newItem.last_activity); return newItem; }); diff --git a/src/servers/types.ts b/src/servers/types.ts index cf51864..c82723e 100644 --- a/src/servers/types.ts +++ b/src/servers/types.ts @@ -3,6 +3,6 @@ export interface IServerData { name: string; url: string; last_activity: string; - user_options: { image?: string }; + user_options: { image?: string; display_name?: string; uid?: string }; active: boolean; } diff --git a/tljh_repo2docker/__init__.py b/tljh_repo2docker/__init__.py index 8d96e4d..481cc5e 100644 --- a/tljh_repo2docker/__init__.py +++ b/tljh_repo2docker/__init__.py @@ -3,11 +3,14 @@ from jinja2 import BaseLoader, Environment from jupyter_client.localinterfaces import public_ips from jupyterhub.traitlets import ByteSpecification -from tljh.configurer import load_config -from tljh.hooks import hookimpl from traitlets import Unicode from traitlets.config import Configurable +try: + from tljh.hooks import hookimpl +except ModuleNotFoundError: + hookimpl = None + from .docker import list_images # Default CPU period @@ -97,7 +100,10 @@ async def get_options_form(self): """ Override the default form to handle the case when there is only one image. """ - images = await self.list_images() + try: + images = await self.list_images() + except ValueError: + images = [] # make default limits human readable default_mem_limit = self.mem_limit @@ -160,19 +166,24 @@ async def start(self, *args, **kwargs): return await super().start(*args, **kwargs) -@hookimpl -def tljh_custom_jupyterhub_config(c): - # hub - c.JupyterHub.hub_ip = public_ips()[0] - c.JupyterHub.cleanup_servers = False - c.JupyterHub.spawner_class = Repo2DockerSpawner +if hookimpl: + + @hookimpl + def tljh_custom_jupyterhub_config(c): + # hub + c.JupyterHub.hub_ip = public_ips()[0] + c.JupyterHub.cleanup_servers = False + c.JupyterHub.spawner_class = Repo2DockerSpawner - # spawner - c.DockerSpawner.cmd = ["jupyterhub-singleuser"] - c.DockerSpawner.pull_policy = "Never" - c.DockerSpawner.remove = True + # spawner + c.DockerSpawner.cmd = ["jupyterhub-singleuser"] + c.DockerSpawner.pull_policy = "Never" + c.DockerSpawner.remove = True + @hookimpl + def tljh_extra_hub_pip_packages(): + return ["dockerspawner~=0.11", "jupyter_client>=6.1,<8", "aiodocker~=0.19"] -@hookimpl -def tljh_extra_hub_pip_packages(): - return ["dockerspawner~=0.11", "jupyter_client>=6.1,<8", "aiodocker~=0.19"] +else: + tljh_custom_jupyterhub_config = None + tljh_extra_hub_pip_packages = None diff --git a/tljh_repo2docker/alembic/alembic.ini b/tljh_repo2docker/alembic/alembic.ini new file mode 100644 index 0000000..a7354c4 --- /dev/null +++ b/tljh_repo2docker/alembic/alembic.ini @@ -0,0 +1,66 @@ +# A generic, single database configuration. + +[alembic] +script_location = {alembic_dir} +sqlalchemy.url = {db_url} + +# template used to generate migration files +# file_template = %%(rev)s_%%(slug)s + +# max length of characters to apply to the +# "slug" field +#truncate_slug_length = 40 + +# set to 'true' to run the environment during +# the 'revision' command, regardless of autogenerate +# revision_environment = false + +# set to 'true' to allow .pyc and .pyo files without +# a source .py file to be detected as revisions in the +# versions/ directory +# sourceless = false + +# version location specification; this defaults +# to jupyterhub/alembic/versions. When using multiple version +# directories, initial revisions must be specified with --version-path +# version_locations = %(here)s/bar %(here)s/bat jupyterhub/alembic/versions + +# the output encoding used when revision files +# are written from script.py.mako +# output_encoding = utf-8 + + +# Logging configuration +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/tljh_repo2docker/alembic/env.py b/tljh_repo2docker/alembic/env.py new file mode 100644 index 0000000..6188e7e --- /dev/null +++ b/tljh_repo2docker/alembic/env.py @@ -0,0 +1,65 @@ +import asyncio +import logging +from logging.config import fileConfig + +import alembic +from sqlalchemy import engine_from_config, pool +from sqlalchemy.ext.asyncio import AsyncEngine + +# Alembic Config object, which provides access to values within the .ini file +config = alembic.context.config + +# Interpret the config file for logging +fileConfig(config.config_file_name) +logger = logging.getLogger("alembic.env") + + +def run_migrations_online() -> None: + """ + Run migrations in 'online' mode + """ + connectable = config.attributes.get("connection", None) + + if connectable is None: + connectable = AsyncEngine( + engine_from_config( + config.get_section(config.config_ini_section), + prefix="sqlalchemy.", + poolclass=pool.NullPool, + ) + ) + + if isinstance(connectable, AsyncEngine): + asyncio.run(run_async_migrations(connectable)) + else: + do_run_migrations(connectable) + + +def do_run_migrations(connection): + alembic.context.configure(connection=connection, target_metadata=None) + with alembic.context.begin_transaction(): + alembic.context.run_migrations() + + +async def run_async_migrations(connectable): + async with connectable.connect() as connection: + await connection.run_sync(do_run_migrations) + await connectable.dispose() + + +def run_migrations_offline() -> None: + """ + Run migrations in 'offline' mode. + """ + alembic.context.configure(url=config.get_main_option("sqlalchemy.url")) + + with alembic.context.begin_transaction(): + alembic.context.run_migrations() + + +if alembic.context.is_offline_mode(): + logger.info("Running migrations offline") + run_migrations_offline() +else: + logger.info("Running migrations online") + run_migrations_online() diff --git a/tljh_repo2docker/alembic/script.py.mako b/tljh_repo2docker/alembic/script.py.mako new file mode 100644 index 0000000..43c0940 --- /dev/null +++ b/tljh_repo2docker/alembic/script.py.mako @@ -0,0 +1,24 @@ +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" + +# revision identifiers, used by Alembic. +revision = ${repr(up_revision)} +down_revision = ${repr(down_revision)} +branch_labels = ${repr(branch_labels)} +depends_on = ${repr(depends_on)} + +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +def upgrade(): + ${upgrades if upgrades else "pass"} + + +def downgrade(): + ${downgrades if downgrades else "pass"} diff --git a/tljh_repo2docker/alembic/versions/ac1b4e7e52f3_first_migration.py b/tljh_repo2docker/alembic/versions/ac1b4e7e52f3_first_migration.py new file mode 100644 index 0000000..587ada0 --- /dev/null +++ b/tljh_repo2docker/alembic/versions/ac1b4e7e52f3_first_migration.py @@ -0,0 +1,43 @@ +"""First migration + +Revision ID: ac1b4e7e52f3 +Revises: +Create Date: 2024-04-05 16:25:18.246631 + +""" + +# revision identifiers, used by Alembic. +revision = "ac1b4e7e52f3" +down_revision = None +branch_labels = None +depends_on = None + +import sqlalchemy as sa # noqa +from alembic import op # noqa +from jupyterhub.orm import JSONDict # noqa +from sqlalchemy.dialects import postgresql # noqa + + +def upgrade(): + op.create_table( + "images", + sa.Column("uid", sa.Unicode(36)), + sa.Column("name", sa.Unicode(4096), nullable=False), + sa.Column( + "status", + postgresql.ENUM( + "built", + "building", + "failed", + name="build_status_enum", + create_type=True, + ), + nullable=False, + ), + sa.Column("log", sa.UnicodeText()), + sa.Column("image_meta", JSONDict, nullable=False), + ) + + +def downgrade(): + op.drop_table("images") diff --git a/tljh_repo2docker/app.py b/tljh_repo2docker/app.py index f48fd76..d03b07e 100644 --- a/tljh_repo2docker/app.py +++ b/tljh_repo2docker/app.py @@ -3,6 +3,7 @@ import socket import typing as tp from pathlib import Path +from urllib.parse import urlparse from jinja2 import Environment, PackageLoader from jupyterhub.app import DATA_FILES_PATH @@ -12,7 +13,11 @@ from traitlets import Dict, Int, List, Unicode, default, validate from traitlets.config.application import Application +from .binderhub_builder import BinderHubBuildHandler +from .binderhub_log import BinderHubLogsHandler from .builder import BuildHandler +from .database.manager import ImagesDatabaseManager +from .dbutil import async_session_context_factory, sync_to_async_url, upgrade_if_needed from .environments import EnvironmentsHandler from .logs import LogsHandler from .servers import ServersHandler @@ -118,16 +123,54 @@ def _default_log_level(self): allow_none=True, ) + db_url = Unicode( + "sqlite:///tljh_repo2docker.sqlite", + help="url for the database.", + config=True, + ) + + config_file = Unicode( + "tljh_repo2docker_config.py", + help=""" + Config file to load. + + If a relative path is provided, it is taken relative to current directory + """, + config=True, + ) + + binderhub_url = Unicode( + None, help="URL of the binderhub service.", allow_none=True, config=True + ) + + repo_providers = List( + default_value=[ + {"label": "Git", "value": "git"}, + ], + trait=Dict, + help=""" + Dict of available repo providers in the form of {"label":"value"}. + The references are taken from the binderhub documentation + """, + config=True, + ) + aliases = { "port": "TljhRepo2Docker.port", "ip": "TljhRepo2Docker.ip", + "config": "TljhRepo2Docker.config_file", "default_memory_limit": "TljhRepo2Docker.default_memory_limit", "default_cpu_limit": "TljhRepo2Docker.default_cpu_limit", "machine_profiles": "TljhRepo2Docker.machine_profiles", + "binderhub_url": "TljhRepo2Docker.binderhub_url", + "db_url": "TljhRepo2Docker.db_url", } def init_settings(self) -> tp.Dict: """Initialize settings for the service application.""" + + self.load_config_file(self.config_file) + static_path = DATA_FILES_PATH + "/static/" static_url_prefix = self.service_prefix + "static/" env_opt = {"autoescape": True} @@ -150,7 +193,13 @@ def init_settings(self) -> tp.Dict: default_mem_limit=self.default_memory_limit, default_cpu_limit=self.default_cpu_limit, machine_profiles=self.machine_profiles, + binderhub_url=self.binderhub_url, + repo_providers=self.repo_providers, ) + if hasattr(self, "db_context"): + settings["db_context"] = self.db_context + if hasattr(self, "image_db_manager"): + settings["image_db_manager"] = self.image_db_manager return settings def init_handlers(self) -> tp.List: @@ -184,18 +233,61 @@ def init_handlers(self) -> tp.List: url_path_join(self.service_prefix, r"environments"), EnvironmentsHandler, ), - (url_path_join(self.service_prefix, r"api/environments"), BuildHandler), - ( - url_path_join( - self.service_prefix, r"api/environments/([^/]+)/logs" - ), - LogsHandler, - ), ] ) - + if self.binderhub_url: + handlers.extend( + [ + ( + url_path_join( + self.service_prefix, r"api/environments/([^/]+)/logs" + ), + BinderHubLogsHandler, + ), + ( + url_path_join(self.service_prefix, r"api/environments"), + BinderHubBuildHandler, + ), + ] + ) + else: + handlers.extend( + [ + ( + url_path_join( + self.service_prefix, r"api/environments/([^/]+)/logs" + ), + LogsHandler, + ), + ( + url_path_join(self.service_prefix, r"api/environments"), + BuildHandler, + ), + ] + ) return handlers + def init_db(self): + async_db_url = sync_to_async_url(self.db_url) + urlinfo = urlparse(async_db_url) + if urlinfo.password: + # avoid logging the database password + urlinfo = urlinfo._replace( + netloc=f"{urlinfo.username}:[redacted]@{urlinfo.hostname}:{urlinfo.port}" + ) + db_log_url = urlinfo.geturl() + else: + db_log_url = async_db_url + self.log.info("Connecting to db: %s", db_log_url) + upgrade_if_needed(async_db_url, log=self.log) + try: + self.db_context = async_session_context_factory(async_db_url) + except Exception: + self.log.error("Failed to connect to db: %s", db_log_url) + self.log.debug("Database error was:", exc_info=True) + + self.image_db_manager = ImagesDatabaseManager() + def make_app(self) -> web.Application: """Create the tornado web application. Returns: @@ -208,6 +300,7 @@ def make_app(self) -> web.Application: def start(self): """Start the server.""" + self.init_db() settings = self.init_settings() self.app = web.Application(**settings) diff --git a/tljh_repo2docker/base.py b/tljh_repo2docker/base.py index 060b721..c800531 100644 --- a/tljh_repo2docker/base.py +++ b/tljh_repo2docker/base.py @@ -1,18 +1,30 @@ import functools import json import os +import sys +from contextlib import _AsyncGeneratorContextManager from http.client import responses +from typing import Any, Callable, Dict, List, Optional, Tuple from httpx import AsyncClient from jinja2 import Template from jupyterhub.services.auth import HubOAuthenticated from jupyterhub.utils import url_path_join +from sqlalchemy.ext.asyncio import AsyncSession from tornado import web from tljh_repo2docker import TLJH_R2D_ADMIN_SCOPE +from tljh_repo2docker.database.manager import ImagesDatabaseManager from .model import UserModel +if sys.version_info >= (3, 9): + AsyncSessionContextFactory = Callable[ + [], _AsyncGeneratorContextManager[AsyncSession] + ] +else: + AsyncSessionContextFactory = Any + def require_admin_role(func): """decorator to require admin role to perform an action""" @@ -37,6 +49,9 @@ class BaseHandler(HubOAuthenticated, web.RequestHandler): @property def client(self): + """ + Get the asynchronous HTTP client with valid authorization token. + """ if not BaseHandler._client: api_url = os.environ.get("JUPYTERHUB_API_URL", "") api_token = os.environ.get("JUPYTERHUB_API_TOKEN", None) @@ -157,3 +172,85 @@ def write_error(self, status_code, **kwargs): self.write( json.dumps({"status": status_code, "message": message or status_message}) ) + + @property + def use_binderhub(self) -> bool: + """ + Check if BinderHub is being used by checking for the binderhub url + in the setting. + + Returns: + bool: True if BinderHub is being used, False otherwise. + """ + return self.settings.get("binderhub_url", None) is not None + + def get_db_handlers( + self, + ) -> Tuple[ + Optional[AsyncSessionContextFactory], + Optional[ImagesDatabaseManager], + ]: + """ + Get database handlers. + + Returns the database context and image database manager based on the + configuration and settings. If `use_binderhub` flag is set to True, + returns the configured database context and image database manager; + otherwise, returns None for both. + + Returns: + Tuple[Optional[Callable[[], _AsyncGeneratorContextManager[AsyncSession]]], + Optional[ImagesDatabaseManager]]: A tuple containing: + - The database context, which is a callable returning an + async generator context manager for session management. + - The image database manager, which handles image database + operations. + + """ + if self.use_binderhub: + db_context = self.settings.get("db_context") + image_db_manager = self.settings.get("image_db_manager") + return db_context, image_db_manager + else: + return None, None + + async def get_images_from_db(self) -> List[Dict]: + """ + Retrieve images from the database. + + This method fetches image information from the database, formats it, + and returns a list of dictionaries representing each image. + + Returns: + List[Dict]: A list of dictionaries, each containing information + about an image. Each dictionary has the following keys: + - image_name (str): The name of the docker image. + - uid (str): The unique identifier of the image. + - status (str): The build status of the image. + - display_name (str): The user defined name of the image. + - repo (str): Source repo used to build the image. + - ref (str): Commit reference. + - cpu_limit (str): CPU limit. + - mem_limit (str): Memory limit. + + Note: + If `use_binderhub` flag is set to True and valid database context + and image database manager are available, it retrieves image + information; otherwise, an empty list is returned. + """ + db_context, image_db_manager = self.get_db_handlers() + all_images = [] + if self.use_binderhub and db_context and image_db_manager: + async with db_context() as db: + docker_images = await image_db_manager.read_all(db) + all_images = [ + dict( + image_name=image.name, + uid=str(image.uid), + status=image.status, + **image.image_meta.model_dump(), + ) + for image in docker_images + ] + + return all_images diff --git a/tljh_repo2docker/binderhub_builder.py b/tljh_repo2docker/binderhub_builder.py new file mode 100644 index 0000000..24f7cfa --- /dev/null +++ b/tljh_repo2docker/binderhub_builder.py @@ -0,0 +1,148 @@ +import json +import re +from urllib.parse import quote +from uuid import UUID, uuid4 + +from aiodocker import Docker +from jupyterhub.utils import url_path_join +from tornado import web + +from .base import BaseHandler, require_admin_role +from .database.schemas import ( + BuildStatusType, + DockerImageCreateSchema, + DockerImageUpdateSchema, + ImageMetadataType, +) + +IMAGE_NAME_RE = r"^[a-z0-9-_]+$" + + +class BinderHubBuildHandler(BaseHandler): + """ + Handle requests to build user environments using BinderHub service + """ + + @web.authenticated + @require_admin_role + async def delete(self): + """ + Method to handle the deletion of a specific image. + + Note: + - Only users with admin role or with `TLJH_R2D_ADMIN_SCOPE` scope can access it. + """ + + data = self.get_json_body() + uid = UUID(data["name"]) + + db_context, image_db_manager = self.get_db_handlers() + if not db_context or not image_db_manager: + return + + deleted = False + async with db_context() as db: + image = await image_db_manager.read(db, uid) + if image: + try: + async with Docker() as docker: + await docker.images.delete(image.name) + except Exception: + pass + deleted = await image_db_manager.delete(db, uid) + + self.set_header("content-type", "application/json") + if deleted: + self.set_status(200) + self.finish(json.dumps({"status": "ok"})) + else: + self.set_status(404) + self.finish(json.dumps({"status": "error"})) + + @web.authenticated + @require_admin_role + async def post(self): + """ + Method to handle the creation of a new environment based on provided specifications. + As the build progresses, it updates the build log in the database and checks for completion. + + Note: + - Only users with admin role or with `TLJH_R2D_ADMIN_SCOPE` scope can access it. + """ + data = self.get_json_body() + + repo = data["repo"] + ref = data["ref"] + name = data["name"].lower() + memory = data["memory"] + cpu = data["cpu"] + provider = data["provider"] + if len(repo) == 0: + raise web.HTTPError(400, "Repository is empty") + + if name and not re.match(IMAGE_NAME_RE, name): + raise web.HTTPError( + 400, + f"The name of the environment is restricted to the following characters: {IMAGE_NAME_RE}", + ) + + if memory: + try: + float(memory) + except ValueError: + raise web.HTTPError(400, "Memory Limit must be a number") + + if cpu: + try: + float(cpu) + except ValueError: + raise web.HTTPError(400, "CPU Limit must be a number") + + binder_url = self.settings.get("binderhub_url") + quoted_repo = quote(repo, safe="") + url = url_path_join(binder_url, "build", provider, quoted_repo, ref) + + params = {"build_only": "true"} + + db_context, image_db_manager = self.get_db_handlers() + if not db_context or not image_db_manager: + return + + uid = uuid4() + image_in = DockerImageCreateSchema( + uid=uid, + name=name, + status=BuildStatusType.BUILDING, + log="", + image_meta=ImageMetadataType( + display_name=name, repo=repo, ref=ref, cpu_limit=cpu, mem_limit=memory + ), + ) + self.set_status(200) + self.set_header("content-type", "application/json") + self.finish(json.dumps({"uid": str(uid), "status": "ok"})) + + log = "" + async with db_context() as db: + await image_db_manager.create(db, image_in) + async with self.client.stream("GET", url, params=params, timeout=None) as r: + async for line in r.aiter_lines(): + if line.startswith("data:"): + json_log = json.loads(line.split(":", 1)[1]) + phase = json_log.get("phase", None) + message = json_log.get("message", "") + if phase != "unknown": + log += message + update_data = DockerImageUpdateSchema(uid=uid, log=log) + stop = False + if phase == "ready" or phase == "built": + image_name = json_log.get("imageName", name) + update_data.status = BuildStatusType.BUILT + update_data.name = image_name + stop = True + elif phase == "failed": + update_data.status = BuildStatusType.FAILED + stop = True + await image_db_manager.update(db, update_data) + if stop: + return diff --git a/tljh_repo2docker/binderhub_log.py b/tljh_repo2docker/binderhub_log.py new file mode 100644 index 0000000..faf90ce --- /dev/null +++ b/tljh_repo2docker/binderhub_log.py @@ -0,0 +1,90 @@ +import asyncio +import json +from uuid import UUID + +from tornado import web +from tornado.iostream import StreamClosedError + +from .base import BaseHandler, require_admin_role +from .database.schemas import BuildStatusType + + +class BinderHubLogsHandler(BaseHandler): + """ + Expose a handler to follow the build logs. + """ + + @web.authenticated + @require_admin_role + async def get(self, image_uid: str): + """ + Method to retrieve real-time status updates for a specific image build process. + + This method sets the appropriate headers for Server-Sent Events (SSE) to enable streaming of data over HTTP. + It retrieves the database handlers and the image with the specified UID from the database. + Then, it continuously emits status updates over the stream until the build process is completed or times out. + + Parameters: + - image_uid (str): The UID of the image for which real-time status updates are requested. + + Raises: + - web.HTTPError: If the provided image UID is badly formed or if the requested image is not found. + """ + + self.set_header("Content-Type", "text/event-stream") + self.set_header("Cache-Control", "no-cache") + + db_context, image_db_manager = self.get_db_handlers() + if not db_context or not image_db_manager: + return + + async with db_context() as db: + try: + uuid = UUID(image_uid) + except ValueError: + raise web.HTTPError(400, "Badly formed hexadecimal UUID string") + + image = await image_db_manager.read(db, uuid) + if not image: + raise web.HTTPError(404, "Image not found") + + status = image.status + if status == BuildStatusType.FAILED: + await self._emit({"phase": "error", "message": image.log}) + return + if status == BuildStatusType.BUILT: + await self._emit({"phase": "built", "message": image.log}) + return + + current_log_length = len(image.log) + await self._emit({"phase": "log", "message": image.log}) + time = 0 + TIME_OUT = 3600 + while time < TIME_OUT: + time += 1 + await asyncio.sleep(1) + image = await image_db_manager.read(db, UUID(image_uid)) + if len(image.log) > current_log_length: + await self._emit( + {"phase": "log", "message": image.log[current_log_length:]} + ) + current_log_length = len(image.log) + status = image.status + if status == BuildStatusType.FAILED: + await self._emit({"phase": "error", "message": ""}) + break + if status == BuildStatusType.BUILT: + await self._emit({"phase": "built", "message": ""}) + break + + async def _emit(self, msg): + """ + Asynchronous method to emit a message over a stream. + """ + + try: + self.write(f"data: {json.dumps(msg)}\n\n") + await self.flush() + except StreamClosedError: + self.log.warning("Stream closed while handling %s", self.request.uri) + raise web.Finish() diff --git a/tljh_repo2docker/database/manager.py b/tljh_repo2docker/database/manager.py new file mode 100644 index 0000000..02918d6 --- /dev/null +++ b/tljh_repo2docker/database/manager.py @@ -0,0 +1,192 @@ +import logging +from typing import List, Optional, Type, Union + +import sqlalchemy as sa +from pydantic import UUID4 +from sqlalchemy.exc import IntegrityError, SQLAlchemyError +from sqlalchemy.ext.asyncio import AsyncSession +from tornado.web import HTTPError + +from .model import DockerImageSQL +from .schemas import ( + DockerImageCreateSchema, + DockerImageOutSchema, + DockerImageUpdateSchema, +) + + +class ImagesDatabaseManager: + + @property + def _table(self) -> Type[DockerImageSQL]: + return DockerImageSQL + + @property + def _schema_out(self) -> Type[DockerImageOutSchema]: + return DockerImageOutSchema + + async def create( + self, db: AsyncSession, obj_in: DockerImageCreateSchema + ) -> DockerImageOutSchema: + """ + Create one resource. + + Args: + db: An asyncio version of SQLAlchemy session. + obj_in: An object containing the resource instance to create + + Returns: + The created resource instance on success. + + Raises: + DatabaseError: If `db.commit()` failed. + """ + entry = self._table(**obj_in.model_dump()) + + db.add(entry) + + try: + await db.commit() + # db.refresh(entry) + except IntegrityError as e: + logging.error(f"create: {e}") + raise HTTPError(409, "That resource already exists.") + except SQLAlchemyError as e: + logging.error(f"create: {e}") + raise e + + return self._schema_out.model_validate(entry) + + async def read( + self, db: AsyncSession, uid: UUID4 + ) -> Union[DockerImageOutSchema, None]: + """ + Get one resource by uid. + + Args: + db: An asyncio version of SQLAlchemy session. + uid: The primary key of the resource to retrieve. + + Returns: + The first resource instance found, `None` if no instance retrieved. + """ + if entry := await db.get(self._table, uid): + return self._schema_out.model_validate(entry) + return None + + async def read_many( + self, db: AsyncSession, uids: List[UUID4] + ) -> List[DockerImageOutSchema]: + """ + Get multiple resources. + + Args: + db: An asyncio version of SQLAlchemy session. + uids: The primary keys of the resources to retrieve. + + Returns: + The list of resources retrieved. + """ + resources = ( + await db.execute(sa.select(self._table).where(self._table.uid.in_(uids))) + ).scalars() + return [self._schema_out.model_validate(r) for r in resources] + + async def read_all(self, db: AsyncSession) -> List[DockerImageOutSchema]: + """ + Get all rows. + + Args: + db: An asyncio version of SQLAlchemy session. + + Returns: + The list of resources retrieved. + """ + resources = (await db.execute(sa.select(self._table))).scalars().all() + return [self._schema_out.model_validate(r) for r in resources] + + async def read_by_image_name( + self, db: AsyncSession, image: str + ) -> Optional[DockerImageOutSchema]: + """ + Get image by its name. + + Args: + db: An asyncio version of SQLAlchemy session. + + Returns: + The list of resources retrieved. + """ + statement = sa.select(self._table).where(self._table.name == image) + try: + result = await db.execute(statement) + return self._schema_out.model_validate(result.scalars().first()) + except Exception: + return None + + async def update( + self, db: AsyncSession, obj_in: DockerImageUpdateSchema, optimistic: bool = True + ) -> Union[DockerImageOutSchema, None]: + """ + Update one object. + + Args: + db: An asyncio version of SQLAlchemy session. + obj_in: A model containing values to update + optimistic: If `True`, assert the new model instance to be + `**{**obj_db.dict(), **obj_in.dict()}` + + Returns: + The updated model instance on success, `None` if it does not exist + yet in database. + + Raises: + DatabaseError: If `db.commit()` failed. + """ + if not (obj_db := await self.read(db=db, uid=obj_in.uid)): + await self.create(db, obj_in) + + update_data = obj_in.model_dump(exclude_none=True) + + await db.execute( + sa.update(self._table) + .where(self._table.uid == obj_in.uid) + .values(**update_data) + ) + + try: + await db.commit() + except SQLAlchemyError as e: + logging.error(f"update: {e}") + raise e + + if optimistic: + for field in update_data: + setattr(obj_db, field, update_data[field]) + return self._schema_out.model_validate(obj_db) + + return await self.read(db=db, uid=obj_in.uid) + + async def delete(self, db: AsyncSession, uid: UUID4) -> bool: + """ + Delete one object. + + Args: + db: An asyncio version of SQLAlchemy session. + uid: The primary key of the resource to delete. + + Returns: + bool: `True` if the object has been deleted, `False` otherwise. + + Raises: + DatabaseError: If `db.commit()` failed. + """ + results = await db.execute(sa.delete(self._table).where(self._table.uid == uid)) + + try: + await db.commit() + except SQLAlchemyError as e: + logging.error(f"delete: {e}") + raise e + + return results.rowcount == 1 diff --git a/tljh_repo2docker/database/model.py b/tljh_repo2docker/database/model.py new file mode 100644 index 0000000..166889c --- /dev/null +++ b/tljh_repo2docker/database/model.py @@ -0,0 +1,42 @@ +import uuid + +from jupyterhub.orm import JSONDict +from sqlalchemy import Column, String, Text +from sqlalchemy.dialects.postgresql import ENUM, UUID +from sqlalchemy.orm import DeclarativeMeta, declarative_base + +from .schemas import BuildStatusType + +BaseSQL: DeclarativeMeta = declarative_base() + + +class DockerImageSQL(BaseSQL): + """ + SQLAlchemy image table definition. + """ + + __tablename__ = "images" + + uid = Column( + UUID(as_uuid=True), + primary_key=True, + default=uuid.uuid4, + ) + + name = Column(String(length=4096), unique=False, nullable=False) + + status = Column( + ENUM( + BuildStatusType, + name="build_status_enum", + create_type=False, + values_callable=lambda enum: [e.value for e in enum], + ), + nullable=False, + ) + + log = Column(Text) + + image_meta = Column(JSONDict, default={}) + + __mapper_args__ = {"eager_defaults": True} diff --git a/tljh_repo2docker/database/schemas.py b/tljh_repo2docker/database/schemas.py new file mode 100644 index 0000000..4571c7a --- /dev/null +++ b/tljh_repo2docker/database/schemas.py @@ -0,0 +1,43 @@ +from enum import Enum +from typing import Optional + +from pydantic import UUID4, BaseModel, ConfigDict + + +class BuildStatusType(str, Enum): + BUILT = "built" + BUILDING = "building" + FAILED = "failed" + + +class ImageMetadataType(BaseModel): + display_name: str + repo: str + ref: str + cpu_limit: str + mem_limit: str + + +class DockerImageCreateSchema(BaseModel): + uid: UUID4 + name: str + status: BuildStatusType + log: str + image_meta: ImageMetadataType + + model_config = ConfigDict(use_enum_values=True) + + +class DockerImageUpdateSchema(DockerImageCreateSchema): + uid: UUID4 + name: Optional[str] = None + status: Optional[BuildStatusType] = None + log: Optional[str] = None + image_meta: Optional[ImageMetadataType] = None + + model_config = ConfigDict(use_enum_values=True) + + +class DockerImageOutSchema(DockerImageCreateSchema): + + model_config = ConfigDict(use_enum_values=True, from_attributes=True) diff --git a/tljh_repo2docker/dbutil.py b/tljh_repo2docker/dbutil.py new file mode 100644 index 0000000..b87e20b --- /dev/null +++ b/tljh_repo2docker/dbutil.py @@ -0,0 +1,222 @@ +import os +import shutil +import sys +from contextlib import asynccontextmanager, contextmanager +from datetime import datetime +from pathlib import Path +from subprocess import check_call +from tempfile import TemporaryDirectory +from typing import AsyncGenerator, List +from urllib.parse import urlparse + +import alembic +import alembic.config +from alembic.script import ScriptDirectory +from sqlalchemy import create_engine, inspect, text +from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine + +HERE = Path(__file__).parent.resolve() +ALEMBIC_DIR = HERE / "alembic" +ALEMBIC_INI_TEMPLATE_PATH = ALEMBIC_DIR / "alembic.ini" + + +def write_alembic_ini(alembic_ini: Path, db_url="sqlite:///tljh_repo2docker.sqlite"): + """Write a complete alembic.ini from our template. + + Parameters + ---------- + alembic_ini : str + path to the alembic.ini file that should be written. + db_url : str + The SQLAlchemy database url, e.g. `sqlite:///tljh_repo2docker.sqlite`. + """ + with open(ALEMBIC_INI_TEMPLATE_PATH) as f: + alembic_ini_tpl = f.read() + + with open(alembic_ini, "w") as f: + f.write( + alembic_ini_tpl.format( + alembic_dir=ALEMBIC_DIR, + db_url=str(db_url).replace("%", "%%"), + ) + ) + + +@contextmanager +def _temp_alembic_ini(db_url): + """Context manager for temporary JupyterHub alembic directory + + Temporarily write an alembic.ini file for use with alembic migration scripts. + + Context manager yields alembic.ini path. + + Parameters + ---------- + db_url : str + The SQLAlchemy database url. + + Returns + ------- + alembic_ini: str + The path to the temporary alembic.ini that we have created. + This file will be cleaned up on exit from the context manager. + """ + with TemporaryDirectory() as td: + alembic_ini = Path(td) / "alembic.ini" + write_alembic_ini(alembic_ini, db_url) + yield alembic_ini + + +def upgrade(db_url, revision="head"): + """Upgrade the given database to revision. + + db_url: str + The SQLAlchemy database url. + + revision: str [default: head] + The alembic revision to upgrade to. + """ + with _temp_alembic_ini(db_url) as alembic_ini: + check_call(["alembic", "-c", alembic_ini, "upgrade", revision]) + + +def backup_db_file(db_file, log=None): + """Backup a database file if it exists""" + timestamp = datetime.now().strftime(".%Y-%m-%d-%H%M%S") + backup_db_file = db_file + timestamp + for i in range(1, 10): + if not os.path.exists(backup_db_file): + break + backup_db_file = f"{db_file}.{timestamp}.{i}" + # + if os.path.exists(backup_db_file): + raise OSError("backup db file already exists: %s" % backup_db_file) + if log: + log.info("Backing up %s => %s", db_file, backup_db_file) + shutil.copy(db_file, backup_db_file) + + +def _alembic(db_url: str, alembic_arg: List[str]): + """Run an alembic command with a temporary alembic.ini""" + + with _temp_alembic_ini(db_url) as alembic_ini: + check_call(["alembic", "-c", alembic_ini] + alembic_arg) + + +def check_db_revision(engine): + """Check the database revision""" + # Check database schema version + current_table_names = set(inspect(engine).get_table_names()) + + # alembic needs the password if it's in the URL + engine_url = engine.url.render_as_string(hide_password=False) + + if "alembic_version" not in current_table_names: + return True + + with _temp_alembic_ini(engine_url) as ini: + cfg = alembic.config.Config(ini) + scripts = ScriptDirectory.from_config(cfg) + head = scripts.get_heads()[0] + + # check database schema version + # it should always be defined at this point + with engine.begin() as connection: + alembic_revision = connection.execute( + text("SELECT version_num FROM alembic_version") + ).first()[0] + if alembic_revision == head: + return False + else: + raise Exception( + f"Found database schema version {alembic_revision} != {head}. " + "Backup your database and run `tljh_repo2docker_upgrade_db`" + " to upgrade to the latest schema." + ) + + +def upgrade_if_needed(db_url, log=None): + """Upgrade a database if needed + + If the database is sqlite, a backup file will be created with a timestamp. + Other database systems should perform their own backups prior to calling this. + """ + # run check-db-revision first + engine = create_engine(async_to_sync_url(db_url)) + need_upgrade = check_db_revision(engine=engine) + if not need_upgrade: + if log: + log.info("Database schema is up-to-date") + return + + urlinfo = urlparse(db_url) + if urlinfo.password: + # avoid logging the database password + urlinfo = urlinfo._replace( + netloc=f"{urlinfo.username}:[redacted]@{urlinfo.hostname}:{urlinfo.port}" + ) + db_log_url = urlinfo.geturl() + else: + db_log_url = db_url + if log: + log.info("Upgrading %s", db_log_url) + + upgrade(db_url) + + +def sync_to_async_url(db_url: str) -> str: + """Convert a sync database URL to async one""" + if db_url.startswith("sqlite:"): + return db_url.replace("sqlite:", "sqlite+aiosqlite:") + if db_url.startswith("postgresql:"): + return db_url.replace("postgresql:", "postgresql+asyncpg:") + if db_url.startswith("mysql:"): + return db_url.replace("mysql:", "mysql+aiomysql:") + return db_url + + +def async_to_sync_url(db_url: str) -> str: + """Convert a async database URL to sync one""" + if db_url.startswith("sqlite+aiosqlite:"): + return db_url.replace("sqlite+aiosqlite:", "sqlite:") + if db_url.startswith("postgresql+asyncpg:"): + return db_url.replace("postgresql+asyncpg:", "postgresql:") + if db_url.startswith("mysql+aiomysql:"): + return db_url.replace("mysql+aiomysql:", "mysql:") + return db_url + + +def async_session_context_factory(async_db_url: str): + """ + Factory function to create an asynchronous session context manager. + + Parameters: + - async_db_url (str): The URL for the asynchronous database connection. + + Returns: + - AsyncContextManager[AsyncSession]: An asynchronous context manager that yields + an async session for database interactions within the context. + """ + async_engine = create_async_engine(async_db_url) + async_session_maker = async_sessionmaker( + async_engine, + class_=AsyncSession, + expire_on_commit=False, + autocommit=False, + autoflush=False, + ) + + async def get_async_session() -> AsyncGenerator[AsyncSession, None]: + async with async_session_maker() as session: + yield session + + async_session_context = asynccontextmanager(get_async_session) + return async_session_context + + +def main(): + if len(sys.argv) > 1: + db_url = sys.argv[1] + upgrade(db_url) + else: + print("Missing database URL") diff --git a/tljh_repo2docker/environments.py b/tljh_repo2docker/environments.py index 27044e2..f62b4a2 100644 --- a/tljh_repo2docker/environments.py +++ b/tljh_repo2docker/environments.py @@ -14,14 +14,23 @@ class EnvironmentsHandler(BaseHandler): @web.authenticated @require_admin_role async def get(self): - images = await list_images() - containers = await list_containers() + all_images = [] + + if self.use_binderhub: + all_images = await self.get_images_from_db() + else: + images = await list_images() + containers = await list_containers() + all_images = images + containers + result = self.render_template( "images.html", - images=images + containers, + images=all_images, default_mem_limit=self.settings.get("default_mem_limit"), default_cpu_limit=self.settings.get("default_cpu_limit"), machine_profiles=self.settings.get("machine_profiles", []), + repo_providers=self.settings.get("repo_providers", None), + use_binderhub=self.use_binderhub, ) if isawaitable(result): self.write(await result) diff --git a/tljh_repo2docker/servers.py b/tljh_repo2docker/servers.py index ea4abb2..aa9f1e1 100644 --- a/tljh_repo2docker/servers.py +++ b/tljh_repo2docker/servers.py @@ -1,4 +1,5 @@ from inspect import isawaitable +from typing import Dict, List from tornado import web @@ -13,10 +14,33 @@ class ServersHandler(BaseHandler): @web.authenticated async def get(self): - images = await list_images() + images = [] + if self.use_binderhub: + images = await self.get_images_from_db() + else: + try: + images = await list_images() + except ValueError: + pass + user_data = await self.fetch_user() - server_data = user_data.all_spawners() + server_data: List[Dict] = user_data.all_spawners() + + db_context, image_db_manager = self.get_db_handlers() + if db_context and image_db_manager: + async with db_context() as db: + for data in server_data: + image_name = data.get("user_options", {}).get("image", None) + if image_name: + db_data = await image_db_manager.read_by_image_name( + db, image_name + ) + if db_data: + data["user_options"]["uid"] = str(db_data.uid) + data["user_options"][ + "display_name" + ] = db_data.image_meta.display_name named_server_limit = 0 result = self.render_template( "servers.html", diff --git a/tljh_repo2docker/servers_api.py b/tljh_repo2docker/servers_api.py index 7d30693..db12bf7 100644 --- a/tljh_repo2docker/servers_api.py +++ b/tljh_repo2docker/servers_api.py @@ -1,3 +1,5 @@ +from uuid import UUID + from jupyterhub.utils import url_path_join from tornado import web @@ -12,14 +14,28 @@ class ServersAPIHandler(BaseHandler): @web.authenticated async def post(self): data = self.get_json_body() - image_name = data.get("imageName", None) + + image_name_or_uid = data.get("imageName", None) user_name = data.get("userName", None) server_name = data.get("serverName", "") if user_name != self.current_user["name"]: raise web.HTTPError(403, "Unauthorized") - if not image_name: + if not image_name_or_uid: raise web.HTTPError(400, "Missing image name") + if self.use_binderhub: + db_context, image_db_manager = self.get_db_handlers() + if not db_context or not image_db_manager: + raise web.HTTPError(500, "Server error, missing database") + + async with db_context() as db: + image = await image_db_manager.read(db, UUID(image_name_or_uid)) + if not image: + raise web.HTTPError(404, "Image not found") + image_name = image.name + else: + image_name = image_name_or_uid + post_data = {"image": image_name} path = "" diff --git a/tljh_repo2docker/templates/images.html b/tljh_repo2docker/templates/images.html index 0c54591..87cc8ec 100644 --- a/tljh_repo2docker/templates/images.html +++ b/tljh_repo2docker/templates/images.html @@ -1,7 +1,7 @@ {% extends "page.html" %} {% block main %}
diff --git a/tljh_repo2docker/tests/binderhub_build/__init__.py b/tljh_repo2docker/tests/binderhub_build/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tljh_repo2docker/tests/binderhub_build/conftest.py b/tljh_repo2docker/tests/binderhub_build/conftest.py new file mode 100644 index 0000000..7eee329 --- /dev/null +++ b/tljh_repo2docker/tests/binderhub_build/conftest.py @@ -0,0 +1,102 @@ +import sys +from pathlib import Path + +import pytest +import sqlalchemy as sa +from sqlalchemy.orm import sessionmaker +from traitlets.config import Config + +from tljh_repo2docker import tljh_custom_jupyterhub_config +from tljh_repo2docker.database.model import DockerImageSQL + +ROOT = Path(__file__).parents[3] + +binderhub_service_name = "binder" +binderhub_config = ROOT / "ui-tests" / "binderhub_config.py" +tljh_repo2docker_config = ROOT / "ui-tests" / "tljh_repo2docker_binderhub.py" + +db_url = "sqlite:///tljh_repo2docker.sqlite" + + +@pytest.fixture(scope="module") +def generated_image_name(): + return "https-3a-2f-2fgithub-2ecom-2fplasmabio-2ftljh-2drepo2docker-2dtest-2dbinder-3f035a:06bb545ab3a2888477cbddfed0ea77eae313cfed" + + +@pytest.fixture(scope="module") +def image_name(): + return "tljh-repo2docker-test:HEAD" + + +@pytest.fixture +async def app(hub_app): + config = Config() + tljh_custom_jupyterhub_config(config) + + config.JupyterHub.services.extend( + [ + { + "name": binderhub_service_name, + "admin": True, + "command": [ + sys.executable, + "-m", + "binderhub", + f"--config={binderhub_config}", + ], + "url": "http://localhost:8585", + "oauth_client_id": "service-binderhub", + "oauth_no_confirm": True, + }, + { + "name": "tljh_repo2docker", + "url": "http://127.0.0.1:6789", + "command": [ + sys.executable, + "-m", + "tljh_repo2docker", + "--ip", + "127.0.0.1", + "--port", + "6789", + "--binderhub_url", + "http://localhost:8585/@/space%20word/services/binder/", + ], + "oauth_no_confirm": True, + }, + ] + ) + + config.JupyterHub.load_roles = [ + { + "description": "Role for tljh_repo2docker service", + "name": "tljh-repo2docker-service", + "scopes": [ + "read:users", + "read:roles:users", + "admin:servers", + "access:services!service=binder", + ], + "services": ["tljh_repo2docker"], + } + ] + + app = await hub_app(config=config) + return app + + +@pytest.fixture(scope="session") +def db_session(): + engine = sa.create_engine(db_url) + Session = sessionmaker( + bind=engine, + expire_on_commit=False, + autocommit=False, + autoflush=False, + ) + + session = Session() + yield session + session.query(DockerImageSQL).delete() + session.commit() + session.close() diff --git a/tljh_repo2docker/tests/binderhub_build/test_builder.py b/tljh_repo2docker/tests/binderhub_build/test_builder.py new file mode 100644 index 0000000..42ff6b2 --- /dev/null +++ b/tljh_repo2docker/tests/binderhub_build/test_builder.py @@ -0,0 +1,104 @@ +import asyncio + +import pytest +import sqlalchemy as sa +from aiodocker import Docker, DockerError + +from tljh_repo2docker.database.model import DockerImageSQL + +from ..utils import add_environment, remove_environment, wait_for_image + + +@pytest.mark.asyncio +async def test_add_environment( + app, minimal_repo, image_name, generated_image_name, db_session +): + name, ref = image_name.split(":") + r = await add_environment( + app, repo=minimal_repo, name=name, ref=ref, provider="git" + ) + assert r.status_code == 200 + uid = r.json().get("uid", None) + assert uid is not None + + await wait_for_image(image_name=generated_image_name) + await asyncio.sleep(3) + images_db = db_session.execute(sa.select(DockerImageSQL)).scalars().first() + assert images_db.name == generated_image_name + assert images_db.image_meta["display_name"] == name + assert images_db.image_meta["ref"] == ref + + +@pytest.mark.asyncio +async def test_delete_environment( + app, minimal_repo, image_name, generated_image_name, db_session +): + name, ref = image_name.split(":") + r = await add_environment( + app, repo=minimal_repo, name=name, ref=ref, provider="git" + ) + assert r.status_code == 200 + uid = r.json().get("uid", None) + assert uid is not None + + await wait_for_image(image_name=generated_image_name) + await asyncio.sleep(3) + r = await remove_environment(app, image_name=uid) + assert r.status_code == 200 + + # make sure the image does not exist anymore + docker = Docker() + with pytest.raises(DockerError): + await docker.images.inspect(generated_image_name) + await docker.close() + + +@pytest.mark.asyncio +async def test_delete_unknown_environment(app): + random_uid = "a025d82f-48a7-4d6b-ba31-e7056c3dbca6" + r = await remove_environment(app, image_name=random_uid) + assert r.status_code == 404 + + +@pytest.mark.asyncio +async def test_no_repo(app, image_name): + name, ref = image_name.split(":") + r = await add_environment(app, repo="", name=name, ref=ref, provider="git") + assert r.status_code == 400 + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "memory, cpu", + [ + ("abcded", ""), + ("", "abcde"), + ], +) +async def test_wrong_limits(app, minimal_repo, image_name, memory, cpu): + name, ref = image_name.split(":") + r = await add_environment( + app, + repo=minimal_repo, + name=name, + ref=ref, + memory=memory, + cpu=cpu, + provider="git", + ) + assert r.status_code == 400 + assert "must be a number" in r.text + + +@pytest.mark.asyncio +async def test_wrong_name(app, minimal_repo): + r = await add_environment( + app, repo=minimal_repo, name="#WRONG_NAME#", provider="git" + ) + assert r.status_code == 400 + + +@pytest.mark.asyncio +async def test_missing_provider(app, minimal_repo): + r = await add_environment(app, repo=minimal_repo, name="foobar") + assert r.status_code == 500 diff --git a/tljh_repo2docker/tests/binderhub_build/test_images.py b/tljh_repo2docker/tests/binderhub_build/test_images.py new file mode 100644 index 0000000..f79a2b1 --- /dev/null +++ b/tljh_repo2docker/tests/binderhub_build/test_images.py @@ -0,0 +1,38 @@ +import asyncio + +import pytest + +from ..utils import add_environment, get_service_page, wait_for_image + + +@pytest.mark.asyncio +async def test_images_list_not_admin(app): + cookies = await app.login_user("wash") + r = await get_service_page( + "environments", app, cookies=cookies, allow_redirects=True + ) + assert r.status_code == 403 + + +@pytest.mark.asyncio +async def test_images_list_admin(app, minimal_repo, image_name, generated_image_name): + cookies = await app.login_user("admin") + # add a new envionment + name, ref = image_name.split(":") + r = await add_environment( + app, repo=minimal_repo, name=name, ref=ref, provider="git" + ) + assert r.status_code == 200 + await wait_for_image(image_name=generated_image_name) + await asyncio.sleep(3) + # the environment should be on the page + r = await get_service_page( + "environments", + app, + cookies=cookies, + allow_redirects=True, + ) + r.raise_for_status() + + assert r.status_code == 200 + assert minimal_repo in r.text diff --git a/tljh_repo2docker/tests/binderhub_build/test_logs.py b/tljh_repo2docker/tests/binderhub_build/test_logs.py new file mode 100644 index 0000000..29123dc --- /dev/null +++ b/tljh_repo2docker/tests/binderhub_build/test_logs.py @@ -0,0 +1,42 @@ +import pytest +from jupyterhub.tests.utils import async_requests + +from ..utils import add_environment, api_request, next_event, wait_for_image + + +@pytest.mark.asyncio +async def test_stream_simple(app, minimal_repo, image_name): + name, ref = image_name.split(":") + build_response = await add_environment( + app, repo=minimal_repo, name=name, ref=ref, provider="git" + ) + uid = build_response.json().get("uid", None) + assert uid is not None + r = await api_request(app, "environments", uid, "logs", stream=True) + r.raise_for_status() + + assert r.headers["content-type"] == "text/event-stream" + ex = async_requests.executor + line_iter = iter(r.iter_lines(decode_unicode=True)) + evt = await ex.submit(next_event, line_iter) + evt = await ex.submit(next_event, line_iter) + msg = evt.get("message", "") + assert "Picked Git content provider." in msg + + r.close() + await wait_for_image(image_name=image_name) + + +@pytest.mark.asyncio +async def test_bad_uuid(app, image_name, request): + r = await api_request(app, "environments", "bad-uuid", "logs", stream=True) + request.addfinalizer(r.close) + assert r.status_code == 400 + + +@pytest.mark.asyncio +async def test_image_not_found(app, image_name, request): + random_uid = "a025d82f-48a7-4d6b-ba31-e7056c3dbca6" + r = await api_request(app, "environments", random_uid, "logs", stream=True) + request.addfinalizer(r.close) + assert r.status_code == 404 diff --git a/tljh_repo2docker/tests/conftest.py b/tljh_repo2docker/tests/conftest.py index 602f765..8b52f33 100644 --- a/tljh_repo2docker/tests/conftest.py +++ b/tljh_repo2docker/tests/conftest.py @@ -1,79 +1,19 @@ -import sys - import pytest -from aiodocker import Docker, DockerError -from traitlets.config import Config - -from tljh_repo2docker import tljh_custom_jupyterhub_config - -async def remove_docker_image(image_name): - async with Docker() as docker: - try: - await docker.images.delete(image_name, force=True) - except DockerError: - pass +from .utils import remove_docker_image -@pytest.fixture(scope="module") +@pytest.fixture(scope="session") def minimal_repo(): return "https://github.com/plasmabio/tljh-repo2docker-test-binder" -@pytest.fixture(scope="module") +@pytest.fixture(scope="session") def minimal_repo_uppercase(): return "https://github.com/plasmabio/TLJH-REPO2DOCKER-TEST-BINDER" -@pytest.fixture(scope="module") -def generated_image_name(): - return "plasmabio-tljh-repo2docker-test-binder:HEAD" - - -@pytest.fixture(scope="module") -def image_name(): - return "tljh-repo2docker-test:HEAD" - - -@pytest.fixture -async def app(hub_app): - config = Config() - tljh_custom_jupyterhub_config(config) - - config.JupyterHub.services.extend( - [ - { - "name": "tljh_repo2docker", - "url": "http://127.0.0.1:6789", - "command": [ - sys.executable, - "-m", - "tljh_repo2docker", - "--ip", - "127.0.0.1", - "--port", - "6789", - ], - "oauth_no_confirm": True, - } - ] - ) - - config.JupyterHub.load_roles = [ - { - "description": "Role for tljh_repo2docker service", - "name": "tljh-repo2docker-service", - "scopes": ["read:users", "read:servers", "read:roles:users"], - "services": ["tljh_repo2docker"], - } - ] - - app = await hub_app(config=config) - return app - - @pytest.fixture(autouse=True) -async def remove_all_test_images(image_name, generated_image_name, app): - yield +async def remove_all_test_images(image_name, generated_image_name): await remove_docker_image(image_name) await remove_docker_image(generated_image_name) diff --git a/tljh_repo2docker/tests/local_build/__init__.py b/tljh_repo2docker/tests/local_build/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tljh_repo2docker/tests/local_build/conftest.py b/tljh_repo2docker/tests/local_build/conftest.py new file mode 100644 index 0000000..bcc7069 --- /dev/null +++ b/tljh_repo2docker/tests/local_build/conftest.py @@ -0,0 +1,53 @@ +import sys + +import pytest +from traitlets.config import Config + +from tljh_repo2docker import tljh_custom_jupyterhub_config + + +@pytest.fixture(scope="module") +def generated_image_name(): + return "plasmabio-tljh-repo2docker-test-binder:HEAD" + + +@pytest.fixture(scope="module") +def image_name(): + return "tljh-repo2docker-test:HEAD" + + +@pytest.fixture +async def app(hub_app): + config = Config() + tljh_custom_jupyterhub_config(config) + + config.JupyterHub.services.extend( + [ + { + "name": "tljh_repo2docker", + "url": "http://127.0.0.1:6789", + "command": [ + sys.executable, + "-m", + "tljh_repo2docker", + "--ip", + "127.0.0.1", + "--port", + "6789", + ], + "oauth_no_confirm": True, + } + ] + ) + + config.JupyterHub.load_roles = [ + { + "description": "Role for tljh_repo2docker service", + "name": "tljh-repo2docker-service", + "scopes": ["read:users", "read:roles:users", "admin:servers"], + "services": ["tljh_repo2docker"], + } + ] + + app = await hub_app(config=config) + return app diff --git a/tljh_repo2docker/tests/test_builder.py b/tljh_repo2docker/tests/local_build/test_builder.py similarity index 97% rename from tljh_repo2docker/tests/test_builder.py rename to tljh_repo2docker/tests/local_build/test_builder.py index 8bd0114..5a7cf13 100644 --- a/tljh_repo2docker/tests/test_builder.py +++ b/tljh_repo2docker/tests/local_build/test_builder.py @@ -1,7 +1,7 @@ import pytest from aiodocker import Docker, DockerError -from .utils import add_environment, remove_environment, wait_for_image +from ..utils import add_environment, remove_environment, wait_for_image @pytest.mark.asyncio diff --git a/tljh_repo2docker/tests/test_images.py b/tljh_repo2docker/tests/local_build/test_images.py similarity index 83% rename from tljh_repo2docker/tests/test_images.py rename to tljh_repo2docker/tests/local_build/test_images.py index e90aff0..21ce841 100644 --- a/tljh_repo2docker/tests/test_images.py +++ b/tljh_repo2docker/tests/local_build/test_images.py @@ -1,7 +1,7 @@ import pytest from jupyterhub.tests.utils import get_page -from .utils import add_environment, get_service_page, wait_for_image +from ..utils import add_environment, get_service_page, wait_for_image @pytest.mark.asyncio @@ -15,7 +15,7 @@ async def test_images_list_admin(app): ) r.raise_for_status() assert ( - '{"images": [], "default_mem_limit": "None", "default_cpu_limit":"None", "machine_profiles": []}' + '{"repo_providers": [{"label": "Git", "value": "git"}], "use_binderhub": false, "images": [], "default_mem_limit": "None", "default_cpu_limit":"None", "machine_profiles": []}' in r.text ) diff --git a/tljh_repo2docker/tests/test_logs.py b/tljh_repo2docker/tests/local_build/test_logs.py similarity index 66% rename from tljh_repo2docker/tests/test_logs.py rename to tljh_repo2docker/tests/local_build/test_logs.py index 8e3ab3b..077e75a 100644 --- a/tljh_repo2docker/tests/test_logs.py +++ b/tljh_repo2docker/tests/local_build/test_logs.py @@ -1,22 +1,7 @@ -import json - import pytest from jupyterhub.tests.utils import async_requests -from .utils import add_environment, api_request, wait_for_image - - -def next_event(it): - """read an event from an eventstream - From: https://github.com/jupyterhub/jupyterhub/blob/81d423d6c674765400a6fe88064c1366b7070f94/jupyterhub/tests/test_api.py#L692-L700 - """ - while True: - try: - line = next(it) - except StopIteration: - return - if line.startswith("data:"): - return json.loads(line.split(":", 1)[1]) +from ..utils import add_environment, api_request, next_event, wait_for_image @pytest.mark.asyncio diff --git a/tljh_repo2docker/tests/utils.py b/tljh_repo2docker/tests/utils.py index 14d9d3e..9387967 100644 --- a/tljh_repo2docker/tests/utils.py +++ b/tljh_repo2docker/tests/utils.py @@ -2,8 +2,13 @@ import json from aiodocker import Docker, DockerError -from jupyterhub.tests.utils import (async_requests, auth_header, - check_db_locks, public_host, public_url) +from jupyterhub.tests.utils import ( + async_requests, + auth_header, + check_db_locks, + public_host, + public_url, +) from jupyterhub.utils import url_path_join as ujoin from tornado.httputil import url_concat @@ -44,21 +49,24 @@ def get_service_page(path, app, **kw): return async_requests.get(url, **kw) -async def add_environment(app, *, repo, ref="HEAD", name="", memory="", cpu=""): +async def add_environment( + app, *, repo, ref="HEAD", name="", memory="", cpu="", provider=None +): """Use the POST endpoint to add a new environment""" + data = { + "repo": repo, + "ref": ref, + "name": name, + "memory": memory, + "cpu": cpu, + } + if provider: + data["provider"] = provider r = await api_request( app, "environments", method="post", - data=json.dumps( - { - "repo": repo, - "ref": ref, - "name": name, - "memory": memory, - "cpu": cpu, - } - ), + data=json.dumps(data), ) return r @@ -93,3 +101,24 @@ async def remove_environment(app, *, image_name): ), ) return r + + +async def remove_docker_image(image_name): + async with Docker() as docker: + try: + await docker.images.delete(image_name, force=True) + except DockerError: + pass + + +def next_event(it): + """read an event from an eventstream + From: https://github.com/jupyterhub/jupyterhub/blob/81d423d6c674765400a6fe88064c1366b7070f94/jupyterhub/tests/test_api.py#L692-L700 + """ + while True: + try: + line = next(it) + except StopIteration: + return + if line.startswith("data:"): + return json.loads(line.split(":", 1)[1]) diff --git a/ui-tests/binderhub_config.py b/ui-tests/binderhub_config.py new file mode 100644 index 0000000..febcd0d --- /dev/null +++ b/ui-tests/binderhub_config.py @@ -0,0 +1,46 @@ +""" +A development config to test BinderHub locally. + +If you are running BinderHub manually (not via JupyterHub) run +`python -m binderhub -f binderhub_config.py` + +Override the external access URL for JupyterHub by setting the +environment variable JUPYTERHUB_EXTERNAL_URL +Host IP is needed in a few places +""" + +import os + +from binderhub.build_local import LocalRepo2dockerBuild +from binderhub.quota import LaunchQuota + + +c.BinderHub.debug = True +c.BinderHub.auth_enabled = True +c.BinderHub.enable_api_only_mode = True + +use_registry = bool(os.getenv("BINDERHUB_USE_REGISTRY", False)) +c.BinderHub.use_registry = use_registry + +if use_registry: + c.BinderHub.image_prefix = os.getenv( + "BINDERHUB_IMAGE_PREFIX", "" + ) # https://binderhub.readthedocs.io/en/latest/zero-to-binderhub/setup-binderhub.html#id2 + c.DockerRegistry.auth_config_url = "https://index.docker.io/v1/" + + c.BuildExecutor.push_secret = "*" # + +c.BinderHub.builder_required = False + +c.BinderHub.build_class = LocalRepo2dockerBuild +c.BinderHub.launch_quota_class = LaunchQuota + +c.BinderHub.hub_url_local = "http://localhost:8000" +# c.BinderHub.enable_api_only_mode = True + +# Assert that we're running as a managed JupyterHub service +# (otherwise c.BinderHub.hub_api_token is needed) +assert os.getenv("JUPYTERHUB_API_TOKEN") + +c.BinderHub.base_url = os.getenv("JUPYTERHUB_SERVICE_PREFIX") +c.BinderHub.hub_url = os.getenv("JUPYTERHUB_BASE_URL") diff --git a/ui-tests/tests/ui.test.ts-snapshots/admin-linux.png b/ui-tests/binderhub_snapshots/ui.test.ts/admin.png similarity index 100% rename from ui-tests/tests/ui.test.ts-snapshots/admin-linux.png rename to ui-tests/binderhub_snapshots/ui.test.ts/admin.png diff --git a/ui-tests/tests/ui.test.ts-snapshots/environment-console-linux.png b/ui-tests/binderhub_snapshots/ui.test.ts/environment-console.png similarity index 100% rename from ui-tests/tests/ui.test.ts-snapshots/environment-console-linux.png rename to ui-tests/binderhub_snapshots/ui.test.ts/environment-console.png diff --git a/ui-tests/binderhub_snapshots/ui.test.ts/environment-dialog.png b/ui-tests/binderhub_snapshots/ui.test.ts/environment-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..7bffcb0ee29ba703beb5594e094cf46568054194 GIT binary patch literal 51212 zcmdqJbyO8v_cppg5Ro+5Af*xpNJ^JQC}Gmw4br_qkdP8kIt4+cySt^kySux-xzBs_ z{oOmpcgG#yANP;T80R3cW39R7n)8|SdFJ+dDJep5k?bM@fglhQefk=Kz=nTfwqH08 z-`X5Uq~RNe`D>BKh_qJn1q6Z`A@=mqTbsz`kv;3Td!=VbbJ1z9m_#4L7bXo4GJ~CIxYi=YzNNfkI00X$x#e zr_?R76fRhSwM&`7Asx-jrGoZt&CvttwkQFrDV5V174h^wZ@qBOKVJ=#s+qE)qM{YE zTL&3KE3yp12gX63d{5ognys%q{m++XaN_+%Z{c{GQe}n?-M14lf1i9yBU6@H;tDP5 z)}Jr$P)wmq|9%BL6UT`C?_;$i*3SR^DgORtulAv#7c`f{))E=Gq?5nqDf-y8knrQjh2jx`F^S86UehBsKR@Klm#c~o`W!g5DmRW!ws&^}!@{_e zcNjb$R4_6!T3A|kbapx>e4Wvi98dDj5>Oo8Q7o}W+$s% z+ncf~o-4ll$G%yfEj$RHr?=d0U;375Rx^72+YZX5f;x0|8t+*=bN@%~=}N=YYH9gL z#>NYV5u4vTy1Jgcdv|SNVZm@H&!{Zo_MaE>?oT;a@h(|9AS6WO`SXj~NAH>qL~fE} zRwL{&xfGEc^ocBd!?9|@EY*)L9Ne6CjV0OArxoV9U_0adzR$>M;J`uP@aRbF`Sb9# z#J{I{i*pIluAYhSfhuJT?UNFs`4FIVaex+?b~S^$l7p{~DpWNb89?mj8d@eWuV1lT z^lZBh7yq2kcY|5&wpmfwueuzu`S(As=Q*4$hvSUEI?u8sP%En9o;ms6ly*!jS<>`F zKq!V>Ez-p(H2+uZcf!{pA9x*wBT8*HZn?U;rYPk5b$7o-R826?wMN}0C(L#_u?q~U z&(qS?^~582Fm6_8vz%E!nQzZWnWk9ySY7>=L0{VU)KuU5GHLByU9LU)wDj~Io112x zot=|GQNsoAUGwrdSlQU_-oGEwURGK8NZ-JK1>g0dLGS0#(1yk!`VG5MgoU-W`SJdH z1UX@S=xPNxl7D@5PqNIy;$juM1iaE6Mn+mDCZgmX9&O%-4a{MO77 z29;5tG9B<_>BDMhx!eZqu(MC@fvJ{pKNph)2di8NB#L0@PF#RYMp=z(whXF;`3CU{FmTLS1mK&`?J29%U z=9?V9LzJnB$H&f2#x`vDwnnc0C&-X$ZSRDqjZhMpzr@gey!*THe)*~w1}QeOGH!r# zL7=ASV0UMSg^Nq{*)wczZf@qw8ByHk?!4Bkrl-fYX6ELZ@~H_42^pG=mw9-2baiz@ zUt;$U5BunaGpLmDDQD*Ev{A~-%X7V-#Cj3T5clny`eOyyX`$5$+0UOpmj`q4iXHd+ z)8w+J0DDT#5hfuvvZfCK645cL5o>N3gO^R*@WH)msUw(9OOEX73ZEWwF= z%+_f`pEose#fsG%dHLU0r1)57-rIB&5D;v1#hhCFJ|ZIL60)+|bxa>K&fgj|NDl}M zG#guzz4JJZSSDRrYh^I^kLd!qceIMFmR471yMMmf-rGBuVK~5QwK^=Op>Z1*7q?5f zzU=Ju=u1dQw%N>YkN(NbZyk3yO-2)PwkIUrd5;k78P1l3^$q4Uts_ON0cuFtaFONG z%BTDFf>~Nk*R9q@ zeIX@GZJ6$_t9_`Xw%=Qgig1)mh(?{-va+($4GWYV9hYXwGEC3SwdqsfJyTG)0hj+G z;u$)(YIYoCDHWg0Frn1;R!20ow0sLsTBCRsi>-V^l9X+!yUIQyuP`>_ zEeoIKnQ_So8xgzHb(;?^H<63c?-2dHy&P)zwOUQVnW!_T^XJb`=I`w7nQza(8XOw( z5|01!or%T03&f(EhAlo z5J_E)QM}gcM<*%DrQ!534y>bTot>}YI?u1J)@f&>t@0~5SlhunU#L#kJ;=FC5yc~|6V)Di z1_tM-IXOf4?RT4b*suK)pu+A$2>AW`d3Z#G*V9`YOTimoom_;domPUw!o--7)BTwm z!zH#?ylWqeiQ$4hYxHw3U;K!+Kiuj46DKn>Gn>POBr5$K)jL?YthfizWZZ91@oLcXyYID4Mq0KZXrem+STJHVI;S0aH>QxrQH zEfQZnSDqfr*{YZ#sf$}J43|MVRMSDI`l}o1wz|8kIE&qQ>5I@w8dcewckwWvgr2&{ z88O|yeJ-X=L_&gKW@ct%b$DQ4V53u|i~V4|nn*6skhD$Uh#~H!Cpz$gfuo%c^-`qo zJC(Pz2R&Th*xpOY*qEE)78 zXRMVSJy$W0g6O4Q%gTD{g*&WQ;%v+bk`rz<(#O1%lWSya<8!T5 zuUy*cgb?g<4(Gzh$H%MIwTF?`Za%n!wdOCE!O2nN)X-w7tDb} z@|_)T5giQtC&7jdXKK{L9dg);7^_jwTp!Shc?ECqf~k~!#SE?@KzvT86Z7@)N0KoD zEkRNOjT=+-3y@WOIY%pI%-+v7laAW2@t2*fm`L#xRi4`piaFM-IwpdHA`(3Q9HQc6 zJE$JgaUKWfXG+TSPM-?>!-rqP!^sG#1ey)fONAXB`2i-D?DQ(^I|z(A?kPdaV3vUQ zIdE%<;Dp@t9E@hWR=T%e$63ZQW3_C>E5)~g1!q>WUWJ!EdS)MoFumMWs#`y%gFFv$ zDkm=w0AAH%PcnFD<=j?4csP&VwK0pTi3u-`z@VU{)Y&1bW4<{pwz;_}TV!#UmX>xy<)*xX!ot$hRE5jAenSoj zs{rDsqO3>J>4JIlMP+ZQ!c?2w`}ZsmZa?8TqjPCO0v6nSBO^wG-W0XQz=_|rkP0@p zwhHZb^h++YFflPvB5*J<7_Q?HdYl8l3x8;EhlwdB4&c>~9hn4fR``}HhOz~iw=o9;{EB9D$TrvxOhTR68))x)T>vQjPq{@|62c0se0^~ZL#ng zvK~%+^cm-v!#gSd29sfnLdaa!QKN6?(}U`aq>jb?ocjA8Tr! ze)9Il^{C#kMXFEXYHMnK4hVPz(Hml=c|nM|MhCWY=KEuC{Eqn=IXwyU!-huo7O@bG zX>84KI^%qMaaHh#C;IyLDE&QLTrdDwdqNCft=zk{YXivzPGePX0H+E`I(LaKYG%*4 zKB!^ZM3|YSw6r?HbW}lu2F>(r+hY)3d);94;B z9}cuR2|s#-@$A_%$es^85vFISCs&@w*GokPhK6!Yl$mmgLy88>i_Q^nRm`XA2*9<( z#KpN=VIU@`GIPz! zcdS@-jg9$3UDA%%wO}#1b#N6SfX@*@klgbe>dvJd$%69aWP`yO04D-5CY`@aA#+xU zVt3o1fdvG{WSR8K_~$VuHT-=^@Eqyvx4tJOO191d91%TEtWJe;j>ocmn-wl+98xb9pdFR^xTt;rUNE2h!p!{p$#bDa%eqnU-g^w>ep!m$^> z+B2z((|Fj^12<6*{HhJ^bCQz4)r+rWWH{;EJl~;mb8^NZ0q5%XxXlDJ$f4_a$js3G z35bf~*ZOh!g(uGW^K@@-$fru9@9f9Nkphl(og|HKuYDqNt956&d>E#bPfeCw#_FN7 zwo-sW$2>93yqTX)v?aOIzgQ`X+-lYGbOZ2E9VL)V7cGd2ZVF+ND&Xhj1SkR_AR#gF z@&&9q@r!`2)(;%stQFNhhENRl(wMTVwc%rXTv1W+YSl6CEARQqJD;^=I^1qZ3UiF7)i6)`kLE zC)(B>{a<)^IJaTuKYfyhlN$iWR8^fJ2~V1GA?mOc-@t{e(a!e08>nkyl9ZQsJ%0#_ zlo(US;jytZ#ICA-Cd)AC-8%VVD@JI1&;llcJW%F%v}!Bh4$!`1aFA>)WN=U(fFkq+ zHFb2%mwFk+yELJF;_iMPNm|4R$QvL=wP>ZBi3w9-VPV0DvAetbB!52u+=q!LTbC}h zmSHlJxl}$7Z47fX_;v|7@7x`hlq3Ec`)WjHHp@HB>$^YEg_<>~7l`eK@(b$xZ+TYWPx|U3l^(pR%1A1N;u&G%n zJ_v|QofCdd=XPA}GB&S4MnU+}_k%>J1c_?KjX<`WmtD%Fo1=M=txxX^UgW4x37ltFCD)cZ&WL(#J!-%NO4I?!g@anXuzn}jf~2q%GWM*CH+iI{SFxm`Ywx$i~Vq- zjw|&R>Q}1B`Ry#Kw$7k-AF;HB{$}4&?c5e%Yn!8$e263G;4D1?h-y5zm%jeTr!0nz zIpN|$=jZk7*U-X2#t*EtT!`GeMF98<<@<%ca-@9{16;`aNt-bj*-9hX3Xef&Z5!LMaMD<2F zr_o>y~!F$?6dnwpw@n+-teu>Z}WvD09vLI4s&zn7U+U=nI5ZtGQYjtF14 z4RlV7O3KQu#cO3Rpc7zgYYQ$@(XjIq+yX2~J9fI8PcNDgId~a%N8Oj2rBAeCz=ACg)0##ua6*sMdX-Dg;EeIl%Y{Sy`9U z`(A(#L*|P#Yj%Z(qhbcgZB56`(6RP^4cy}!!o zW=L1-+hUD+!h84cADpbA{Co7FiAdvQRN#1I1-%$FoSihMDmmV4B4Rw&NRVFx7=6W< z>HhuVrL6Rl&EH@4pifXsA4lFYVY&|GQk{7i6ux!I_qw{ek`(9mt5W-k)u9Vu;L=(~!Btj(l9UrnC0TkN#7;U2^vG^Rp+* zUQ_$zJ9Sof!vr=1l@g^t|1Pq&ww5TBAT>2r<5OT=@eo$3Q#s0y4kNRlxp&!hQBX~p z+h^f9B_-zrS{&$Y(i%BJRo;$|67ogn(26x9r>~c#L=+UWRZ2q!nX=j(a-Qa!Q&%+# z5>4>D7LZ<3_ihk06?i?O8w;Lzj@fr?ZT+7n%B4$TKdY)9Ln7TDS#$DGLtZ5z5$s+! zNoyWqs37D_86~icaml~Y)kidvulBaS{qB~iHJR`M+viZ0c!`4(CpZ#+y>N6_&w%y~ z07yt_5cZ(;q>yJAb{1y;AKU~jJ^(VR&>+|v@sW!tMi4UxW-<2)`VT1j4#?w7v~T0d z8X*g{khTUM^uYyqUF_WEv-ptp(4`ht za|kysLZVAE7KOMH1icvs+H1&zC6s#YW9tGhSS&)Aq5I2!I$+!^Gt-RroEbbq9y zLl0=Aq=XMDE7mDe5uGgKh!(51D+a*tL7xZUZn)K~%D<<5Dd2#4NlXap87MYv_$cx5 z1K$M7WvbVb5P7;)^!bxgMr#jdaJ$p{7qkt0I669lLm|@K?e35D+UxvYP+WW?qDA=m z^WTyABGZpLX{i50KV=a!Op6I!|A5VcD@t=2S_*_FpC_JIs4^pCE|Vrx1hR%D|Co4m z-e~WNr=})cqR0PTjcVA+MR0w|B(~H1rkSESpFW3#kgNqpLO#UCiHNHwrHX3e-a;+ zMAkS!a`=UIX*3x6&!IkD^#G2Djm^9)BJ)R!9sXa+^O9V_Rm7)1hr^)$Z=V+(%&xO| zt0AApcN`dd{Q0|QbDS>wC+MlnS``C42~Ff4Gx|exUJBq=N1lf&IYJFdLr2$YZU3K$ z2>+kPXh%B#+1RcB2gWrK@$%1;G%vkD-1+mIEYG`$f4PoJm*i^x_bbN!|JBW}J)NoWrsH zoW}K(j%!YRJjW#}l|9Anf3yJnLI&kkg0?x>x7r7(CQcSH9^~)WyG;kZtG)MkZP+dB z5^x#c`Ia3Re`@$(o;!l-OI!czW}1(@v7Pyqzn*yc^l@LkdD%-GNoCId_ZYLNYcUDB z*r98T_4Uk4d>oGeXS(Yh#^0B}bm`#o8xqxjZ`(mX zMAT+i8h7V-zd)yVDS+v}J|t2X-P4GV_3il3f^#AuBVFfC^XbF8Db4R+4K31F8_l5J zX_^(*N-2j&DVw-iKiHnkAmc0L3F|bZkMnHI^+SB^J3qOEAseo)vG+^U?Dg{glUMrk z4&=ow_*#%V5a9iRBtlwrzSk-j& zCWP;Q4sga#+2tEa?(x`sWE6|XJmr>DR&mT7@%@W^3*m1NWv_8GboMqhK zwAh|Y)!tI$9_@gn-xzYb%82Pk2yI3(``uHUkd|=+h0gc=_yQ@b@ntP-Q?*`(4N{2l zv&gmYrGnyj)HjFN_$>(CbaF-;+4tP%cb?fKGGHHFU1%NY9qOj2QDbWm&%w;#>vHMR z&S38$tbm0ZImQ*A4|p@6I6iA7^|>qGy+JZF(_V|!hukC?JNP><;?8dipJ4$OadM;M zEsXWSME2*|Q4UT9p1*{dlFb$Q@;S7GS3KonVuUoTKbuP^2h$Af_wM2k6XJ=a5njfR z;CmA+9=PT0$`>?eP-G;z1EzpG^>48Dca!yGBSuE(9#qqT?dkZ+@_O20^baxM9=r;j z7|*_cZlhkCc1SLp-KAWS0*hL|>L}!Je#3oXPo%JeRP{w%#0LxBkZ{MG-H#XC;-5+w zluR1XEk%jb=x>URAXJ6|g`bIC7D@AUTo&)OFV^7_RS4Iozse$Jt+3%C{)v?$XU{`6 z&~VD4x}8RWN*dlVraX}1Y>4gZL=t`Ze35-#W0O}zbrVyY#pfVa@+Twn_{0xAT+0=r zsh@>OI@}E6D)EW125?f=bG;_4M=&z`ATb(*?uZZB#^EA!`l zXjXf8L0J65r7Kr#)RgYYiRIaFN<~-(4zRAOmA=tiCVbsDs{`g3?9J>kXOlDW=d4nt z{@uxrbKSerS@5}Iam+Vy9D-=->ly{mP47j=U3eFdStVp+sPH6ykn&S#zlh%xYQxTM ze)3~d{MTRyJ00hrdlvokbLXh<+uBem9F|?^SlxEFA%~Oc>YxhGqhNVu-hHAL^s>gs zADdL6mnExt#BXV2*Rkw>#EB2q37aMs){?>>B06a$`JSi^u60suLBKQiPkxIh;!z!a zHRNL-=l70ois_ITYqqOCo2V6K*7!V${LuySGFGAY!9k8QjpEl?MvO}H?LSO^9~8^D zF}#UY&~r_7$&9mBj__8;gnsT%eC%7@Ig(>W*7y2&FqiL3X=~*LVHH>A?%JzJX=(}z z&sfU}6IQwU4Xy4Sgfo$y`vV;)aid(-N-FQ%&sOqz&>$bSGJRlqmq9GLNb;9~CZ-2X z(%0TH;#9|*JUEZH?W$|cV!r>hGQ3_eJQ?3dg3(oj40-D7@2QzPhJy60+r4cV$1bP`P0|f6~h*+?T5dPJla^1CVmHL%=!O+@o zLmda7ik~z*sVPc}WabKUs-g4vfy^om35A?BSr)uIMox(f3w+;uPnq-WAM?G6^wj&H zR?$1-HN1e^AwW!L(9Pw%SA~oj^c$Te=Ti~iP3w{NC|H)Endbk>(q*QoY^F)Op8xWAjReJihTB*1?Mtq2trmO6HhuqV=cmZ`n)J zz8PA)U8{9-ZI@E&?C8j^E;(nq8^aT(BlD87!?(1CoCTz64EHh zALdp)QK6oxnu+hf&sh}sO5=Zvr2hh%TmJ{}7cW{3xix|nfNkzQe|TXuy;@H@0)IZ|GXHvcHNVK@5Qh+%IEJ($bD9SC*iIJVgcEh zd_Bft68Fe)+5j%4xCccai2=5pjGGP1stV4 zA0qP8e;1R1UtPg2@ej?XA-=B`o`@-AJ6&_{1iGrgm`Aj5&>oLA)mT2 z{$wJC@3*kOuWkN1(ce{UYBBR*<;c=e9Z9*wGDyF{wvRWF`5#E}hSChXT)%aG*vn_v zgZh_7*djk&!!xpb2$LjRI8>-nO)+jF$J$rin!BRB8{b~6? zN(Jco%nE1Ip540T|5=24oJ}I=i3cGx3>%u8BiCj!?Qbu=7w?=5f zaI#MfBUd)(+G3L8<6Vb`hwYWE?$Jv{qgjULW^rscq6&v{?WfZd7qBq1TSqDFu*Zp< z*3SV$fNto5c<0mD>5|G>IB11WPuI>))i}kTPRH5wtBt|KT=zK`uj7e{iGfaIeSgY- z%9M*zUxDt5*Hc|Ry_-N_It}rzl{^8F}arp-#;?4Erl!W0UzR1*R?_ z0a123&;s&E$ASU1?n;H0vniuac04+*F3EAtPC6*4s7P5_J_K$sF(YFgBj4t|H$RmW z|IXD24kI#i6?pw}5Gi2TY_)LCvCkKU>`Ls|vJB`$H7{C*CS|cYw)ZjU0b#iFg z8p-WiKUKM45eS-G&=!IWSYuabdr6Rm1x;*3J8X)g_fx_J zZI1h_%lQq4%`ZsCfsP02k_m(n4u;Bb0J0Z)97#z@4M$7DbkPlaJUHO`rJYS^ueMru zWegZP>=lnit!X#+KNbkS#d@Y~@3(Hlhgb%UNVEU6*%=TQbXd-omX=$+(P5!0I#VYP z1lieZpqFd|d`Lq>gLA;k!zq73IySbTdMZ?;DOWS-4xrO}TESViL2&u<<;f<0r<44= zJhO=^Z0Ki!u7wr^RKQkmEhNQkMy)yEfTCP`XsVovv0G?;FxTLCK?-&2{(Wzd;(`?Q zXIfffX=zkC>SU?kusWm{y_tb5Y+)ze64MDx;Ofw-6$k2-@btcB2m7;=J3JQwypBcm@k3rHo- z)``xXL5B!d9y?jJM!O174g47zcW?RU4MdsW*+{=uM1>~? zY9}NHMWpM#KAfVjpr{Ypm8J$MnFLctTDVKhN-n01# z%Z(|)8*7$FY$t{kYe26+JFquJ?%eG$9X~2TzoC`c7S1sr4=WIop#@VQUeFRR;5pqv z9qk%{%_jFu26MdFbXs4ksG$0$*bj@lA74D@540pORUnbmKHdQus1<~SRdBgLUhW$3 ztGquG0lXhMua!??Vj@mwEyvZ18&qc-RG_7#I}JZLXhXFENd=1K4TBk-7{_2xV@niB zQ`)<)=I81DP5)!24s5k64d^Af8eAF4tjk+R%zNIQYi%rvV=|mD6NFpaeRf zDIo43W8v-{oj9R2RG2P^HvT>Gf7KGe@c7#*f(i-vK|?SBP?DogM@A*eOlU#kgeh7s z3;HY!E>O#XYH8YwK3cWfoj|e7Aq@03d^wKS18SStTlP_SO2B0OBNxE`M?r{Yx##L2 zO5o1b0Ywe58O_N7=KylLJ5FPuQK*22^cPv)herGaD6$-Yaoae8yu4O^CIFl!iL#9g zG{61Gxi6QuQ>^sJsL;~WLr7@tE8ET8#~vEVyJVmNrvtJl(4qv2(mV!D1j5(X7Xg|W zfp&0G*1^(9ll%AX$rhT?BA80IUzgbF(#`4CMV-?r8m{#wK?@1Nh~GgduTk$;yT%K9 zgayLYbA_3L)@c4Fpla8CN^GTOWDt8)KZ2NYoCn1EvD2Abn`_we8wrV)&?P_g-Pl+n z1W^zKX(Sn$o$8T!`B2Pawq;2KrwNGkkVM0vQv-0KUi;~q#=YH7pFW`lYal6TOjrUj zE;|PY$Xx0y(j`SjRYBCHSnhNZy=x!mP`_!zhmVi{QeK{iZutQtqZUXxK{p09(y~DL z*xAcLvMcs2a4l_{4YYx}05@w?W=k*KC4?EKBPs;AeP}ZC#hYfJ#d#Gr@m`pCR>|tqCn2QHd?BMR#i$~B*XM5Zepd)}3 z*VWfohZwb?@(aQO z>(`HA6<%Im3`#}YE)*{=1%w`PkAZ@$rk=P7p1oq#wol$tU_LG$G6XISs#&gzQ15xr zBSW?Tp%&2%4nyaF=hd^bv-bL3k2Cap?!oj*6-a?HWf_2WM-M?IUR+WZz!Ooi21TfN z!Rq|t;wM3WbECu|DwUrP2XvNfpz4CFD4imEsk~)rr%LqUkS-{*XkP@2%hrQg4o>&V zsm^$T*{FIrdV=K~-=d?Xn({;Qcmt$IUD9?0`1qz9lh5$0ZRV#W{G8D8Gw}jx5Y_u9 zIkZ5;#jln%{fc4%QUx?W=JV}0fjJ%f{PkW0q{7pFc^v&pI}nDqWtD@i{At^?_mmF;j@2SLud2 z{dd{BtNZu7JCxGM32}h?JjHvrd~-bcRcyS4ZD2L}fyNiwrpMl!En3TrvA z%A&fwsuk8TR}mIHBqC!uu(G?)U6_=Fqbk1B1X}0|x34|hE27#$i^Tz0Jy0nV2bve+ z`FGF>h4%jn4&4nA#Efbr_d3YQN3^|I&k-D%l1I{zXg*T>`q4z z?&^I^3PDp2Ll?M0ApA$mZ{g-GkCh9aB7st-CZ@jZ1@+E*LG=}RQ6)DGGyyugS4MI+ z1nPB=3&WNdR#qH!S3(Oby>n+Aa61q1>SrhA zXM2t&^t+WA5GZZ>JVQ5J+dp}VYv05{b>%Yh^G5+{o7%BM)8mjwz+rsl5@BAZs<1;p zw~mUfXi36Qo41R--XW751(I;zvE9R^baQ~xXq`P=88n%iUUs+`>fN+)#B9e=8D^;A zuonx8eLy(epdU@t%Yxu3=Kp4SOYL|w(+KH)soasSe$%+k!;?Wdn}1BwQlL0SYc)@? zd47h}`ZPRkXhyu3e+<}mh=rP(nlB-_o^|{J(aqwbJ~F?2Z&MD*Hn33~qQN|%kz_}> zssqTuf$Zdf?8us-WPWX}o?QYks?A0%3Bac-?h~ps!=L~{!~$xEo4&ZTG*E24=C+ht zh`&N9O^n17(fI1j0$vRvKM<6rAhPj^z^YlX3W|!NNXPeeOeZ~4^f?{9X-z`t0j~&m zkkWpc1^pi|?J(;c_E6xQmX+}vE7Cqnde1RyNbH-K2_`S~523t6PqNW7lXMc&X*c}}`;5BoF7 zvCn98(Rix^V%PcGN+{&Qb1Tr30xMkw(E^D?jwcD8+y$H#*3o}2lS4A!x3LDZ0zJQH zRZOqgT?>F4W(WX%lbPEuuXU7+b8jkNASEGn%x7mhpi!9R{K5O_~}S zDwy%na*;b%zkx6x&FPgHg3rGVN=weu(< z0|j2I<#EpP0|Jm~O~I%P9n?)9K70^s^98lcbB983aqwNx?7_IsXIM6@5_Bx+-~j0{ z{R<#FazITROqCG-A&7PK_0>aOotzkXJD~z7&PB+1YpxAu%s`X3nlt2S`7XkcA06yK zTn2+S;|mDb5$Sljv=zp!L%gIP(suJiCieFCOL{h0}}p^*p!$J4O zlR9&6pD+B=~u$JLnz-8>mtvCMW&%vokg9_ zp+Kj44VDD^1?3lIOpOlR5?Xo(6RK13{sOlI1!K^%y`?3Xh>F~;Z;6YGV+k5Wz{udS zi$$rFxHt_G-)wc5TN-ly_=iR?irL||9)vN7*0kK*VK7<(`uIr=R=+Wi?QILV+Axvg z_V^}Ds?uxX2d!9x7edH|YX_Zy1sL}%EaVpO2?ZyB@hec9WT{o32b`gnpit8Am~9Os zRt>p4QXDdNJj=N;l$Di*mga%z50r#oz?3lhyT+qkWkKbJ#{6h`8DvK2tbrIDkkww~ zs<$TtAra5#i1c4o0Ggm;dIB>yAdds!RM+MUQ!Y<$T{=bWuJQ@|T0A}5x2FqZIEU+o z59%l850~+=0<+>9Zt-5%t(A5u%5_j0_qIREzOL{w?|E)s?Z70;1Fq6x4jpD39V%o}W^{yhU*4%sMOnTg9=BeVYt<#;-!B8yj6R#v_y_bia?x}Tf1vk579 z5+JqxeCB=qxs;T3*?!H4&QI^N_gfPlRMOm5lQmvg&O)DmuAPlZ%K$ydoBu}(U`}Qh zT@Aq}*K$c36yg$eL1LwLJDtuL=Sn)QG}t0q7Q252rAR09ST0U)B27kvMvVJlbaoM6 zOaE}MiiGKt>5hqkB?O$q#pHC5#Yf)WhKDA2U7^3t zT=Cp_{B>QqyY-&G;js&#;nN?;`VPY0ZYT@n+nSo1x}YL^sWk*5{*lwLjfAtX=;+ns zFfVU!12YWOr%&CCOE!d8`ZJ&45K+Dr6Z4YKGyDl==84hRv7c{`b9E=ASi~oU3C{NfP3Z}YhlzuDyFEv*OCP_<;o60)G)iY7boK-h`maYu`;J)D z2zKmI!i8{!`MK7|(=E>)J#vATPzu1|rC-Tuzcz0XArK#4DczLyzRt+5+fI!>+>MP5 zWr}gNT=`t@{`KCo_J3LzdB4-t1h(C`L3sK)j zU=e=~f4)E0cIgA`(zo^ukrPWvS%ojks-yPTU7(c0m~f$rvnGv-Ok)Pa#DtWa$y%-C%<4Q{YRUE zr2%hWP(F_R?K?Ex=ZI4-ATY47Ov)_tZyuphgOYj6Luk^xfvZ0B5DrbK$aLZZ1TKNY z`P+`r7JuNcr`s?mc0pA20`*Jei4p?APM`Y`1*KpY+%gy=r>_!(_p$@hsFU}CP zn}%4#7tm`XF!4Y^Ksyi#9LzIX`gjl46#LvUdC@WLH`#qGEazFYlkhF`Nv}FfkJjg? zz-z7j9M1nWyl2+KnT&gr3UN#Vw$N@Fk&NQxLG|!PTHJxxAd}j03e7*X9_1rMgx|vi zH*Sj>BeUO((1sV-7nX2j6~@36T7ea?E0nD^Upj^7u=DTWVmQ86Lg-4OS5|UZHqaOJ zP}`70;aoDfzmVm_olJfC_yH0V{PWI2Lg1LXJ#(q$X~gI!@B0Dp>uZ6Ow zo3JBB2)3amGeHGUz74&0oM+{yPD8LK=AX)X!m@0-{&z(-rWsW zV)R4Iw=>B$tyD~Q@i1Zw;WZFMy?*a^Zs?%T8!`6&8fFpiZC4>8#HlwtJG--8GLqh8 z%Tk9b>N)!F=1FTajRGcncQImrqHko5{*q{Ko^OZ?{E_{Eb>E43J`oP0(jD#O8=9Bq z-E&?Y*e7DZ)v{5U5eVijciXW-5g{QGrl&J>~;|YLw@QqC@3!!)9L|o9uf{W&tL{U+cxYx_UL#(?B)8lcd)2$dD zi}}yxFE9{TH?0rlq94>gE+-ITzPMwJff#>a&0|0imbhg6S!CQpb+cc?U#}^c(GI3D zcGgg5Lt`@#nIhwfw3(45R*}gX`h%+rEQt2E%$Tr{jctOm)e@yvDi>8{93VNpvg|g#GQ8N$tS#kQGsHC zmAC)6pRlD_K4mY}7peCHDuJa|-nB11`tRUc=RnH>miQ9NqA+yr`qAATjZ^G^@*&H8 z00vhv+b-lIt?g?+K@f|gFH5Pr_-(yqzbR;WSi;aOJYf+kmR_i6Qel6&MnlrTi1k4T zp%H`5WjKT&S}~YymNqlXLfecVdRFk%kkx`ILY)YhypzvRbrJR>{|O&0w6iiK19Jeq zFm%jRcnXuw?B=uL=wHID2AP0E0s6BaenG+h`#o?&WP(m5TU+o+2ViK$87`@`rBB7V z1+2iXL0cIHP*i#W8C#B6_Q62!vpyy3s9+`)r^b!d-b488fmdjN29=Jo*3mg4zF0V? z(#_xZTaB!Wl>qI%hPA@Dc&hx8<=)}yXkRsvAo?hwDqRg++Fl-b1J9N(FpZ;GsKlXq z3lHAXX^KmWNd~Tve{a~lHT-CMAs!711WfBYCYQ1K%nurwthwOTg%I5KXS( zz-y?|pk__YGamVsKWg^^hHZms&@d=}%&8a{!)p{2sZa-KX>03GRDB#QvP_1GI5{JO zS?o1bVqb%TrWEl~fz@M;Xt{`syRl!CX7l=mk+R(a?acJ_9X>uqn4IRZ+y3DMMB`l! z4rz@#pN)dvN3Q4f&@Y#767##M=^7c?z2cEH7*!Vy1RtRr0W$|C#EbazoC%!AN50hX z-LaLn9O*+NaP1Z{s2oJ0--E6fX!M{X-Wo$tf6`am)7AsR{B0mq6rq+6q5*k0j8aQM zdg=m#X6N_)^dC|&0+eS;T?gsKY_c1kNH^X1eOlHn244{sFN7w zb3}nn3un{uYm3%V0`nureh93DER-Q$vIzscLFSfX^hedkj||AXiSWHf=ma4nFaZuO z{np`2Ma+PzU_cUj(ZR0 zg}PysKJhxEyp4mB4ByZ1958MqpQ9Uq#?Ww@+)v;tI_CZ^El@Cs5paaMFA-WdT-CAA zk9!WaS6~91`yvbh1tvf-^*r!F`LUS}V(z(P^gE@!hX9OgYidLT*&@Frq$=b;5477| z{t3)ueso-NOfs+l(rAMZ81_P|z;e6-!x7dGhJEwuRe*L|bSgCX{K4PF>4Jc*w?v;F z@bRx597<^PP7Zg9ru=ww;Db6=#>!RT^C?QReSt5J;cqK)8pS~D$i%2L*mbrgr?w=n zH>n`juVX?kPZfv~m8yDbas+i-f_Ho{-$T1?-4o!AJHhq4(^Uk;I-zGpBLyt!JPhGC43L^%0?)$(a;`!yb}`>owd|iP!tAQG)CI zqSgCQo1w!C4LXywZjq~vgYS;mIhk#kzk>@1A5|q9m?#yK211M`RpvW4Z$1K3!B|n=xN;>P=JsUO)YM>}p&eLG2Bk>9$gf{#vgdFS z>x?GbwHLM!SiE4JAKiBi7o(oY;HefT!^yuBn46uw$Hw+1a2v=VX$VrSf_}{KNp7N` zb_k$>;c`6~D=(UhwnrPza%J!xJOq7VE#50Vw6?KB+rzt2^VjCUr4*jTtllK_-4*+a zS;nZ4*PzNg55exsJ?syDFo`r(dXTbM#H6G+CP|X?CgkhayY%!TDyWm(>B?=D!u>)X z+sy>FAJ70!PF`N>{O%3iD;hBsr-SeH4|)F=cW)j~W!tt5pQJfWSA!&}G^sS8WQZn` zCNdNjl}Ln4$-J({>#C?$Ns=iuA<48%%}SXqGB+BQP?8GBq{z_48}Gt5!V~5v;HS{RvtoX~jC6qfQGY2+k`t_?3yl zOZMDd2Cm@C8$bQyZ)z%?UKpnQyjOu;gpW1^C0K7z{iA3Rph~*@-1tAbX!l3RK%#aR znc~W@l4#_xZr%OuqH7MZj~qF2GdMUA?IBuG-{@cr>EZRK9x?DNfem>tUm8DDL4<4Y z8qP+enN|<){vTgDg_xgu-Q9y?!B+kJJ#(F`$FfzoFylfFT3F_0cUOwC@p$!s9CG>^ z=lTsG^^aEL%56v{qjvccCG5N6Sgs6gJG#pJdC9P}IwP@P~$v`W&x!EGoxPb*u zOLU`sxL%@hJf3AUYIZpn!-kDw+*OVh1!V&obmZyEH(TYn2T|M;E7bLBQQxn6dR$1x zA#6QHIt|@sqB3_;9ULy%QnpvcX^+|cuV}U6M+r7mWBJNwaT*sV&%1lrJI>EsN8Ic- zJ+6v_9{HBtejDY>%jfib<|dR!-Rh6s8;@(@*Q6y%(x$-qY@}lI^V-pKnC&yS|w=5&7108i*K3c@TdbLBN6kZiwJ-tZm?*+js4SfrR^7_wB zjyFiL_w+)11~x?wbTy%Mr-x-sVt)mHTo1J7xKnM_%jM*BIkG3-t(h}vOq1cCtrM8J z{rCCn4n1aGynM+AX@kvTAMS}i$)^=d4alH0~&s*0hEAt z@Vh^yS=ec?qtve`IWpLpVLOjDXqe21P9z+?-=jYvv#I=8a2i&53xu})yLMdx6drCy zp`Z=`M>!gD5cGdc5i*FyHy)LECyA+-9R?*!R$YED%Bx85R6Y- zT7$F(ZA9hC$M!;vY5~9NoFft1?^pyTO0klIl`-J>Vy6DGrAza|TDjW62BP;irRaGk zccfGrw~EaJeo$?)Ka>gD<25XH{*_y%R`-(__WDtVOpS|?xXz*iWoz& z(=J=N^6jTq?#JV+gtdYV64O6UIJk0FOlgOnI>4 zp!D7W>vrR@jNm_5H81YJuxdspqxLuQMfCS?W@SGP>(B5lip$CUQNAg!7n8xmn{||8*jh=zpTaik=ZadVPv~E04ry74e4n!Bz@;Z4$ocD?DJ_+ki=QZ{3ZV z0??x>w^BlwVT#?0oky{`(}04;dGksfcb7vHObMlWs zMZ9g~*_=5{`c-fNQZcsboXN}Zv)+;oqnHi}2B~VX|40_yf0TJY2Y`jc!}PlO`hySikxD*}pwvZ9;Syf^=haQ~*@x7T)Jw>jFTFZ> zF+QN9IB^vF0;RJLnjhmH9<#dU2?(tl`2e4J|MCH6L<5Nxd8{5hMfCw*&%S)xO$>K( zD8yteql+nmTz&;9k5(Lzv1KMtCbT4&UQTXpNvM{R`%q zO@BCX*J6CKg=h0K0k)M8n|^^eX6T}1e|oRMe~2~D6&$xj2zl?Uz)iS{_nRB0sII{a z=#>m3C?X(1|1!+f$GBa_o02U#tPoQ5g(hRnc;%w{{OiuUxT0bIPWlAtrp>7{k7E&Nb{h=HThD zIgB@O!Ou*gw2b6K4&9~@%L8jHYfSpAzI+0g;_HBRad!&NlzR1-1+C|M-G( z5S#Q57t}I6b#!jRUHMuqGbm9gADmyY81U-O*#il%i0Sss@gCj~^a5RE2GV?U^*TEB zhK$OFstaQ@9QcN##_cg4&%o`|=55YAUTiXkE$5N2f^j@ywMQUiE4FnWFb;9m8ErMT zxjdL1ZUzLzi7UHWfWXIHmUR}XB(6wE-vTtDWn^^MCbMllv?L9V&pgFQh&=qRma?6D z_EZoT7P)(_2h2>aD7V(p*1iX5cpPssL0FiV;n3s=Y2E6{nb9!Y-P*ZxXV+D)Ut4c1 z*SQIha8fJ`ht4%R5WF9$2TjN&TsY>d$F zi4!}T?en0ZjCqhylwuu+?SU~-aO*j7wubg{A%FBC@IVtfk})J(fZ|=z3~&Tgf4}Ob zJ-Zg6tl#qaU(-mKk<`Ghpo8@2 z==uP;m6MavU!f5R2u}%|lX*Jg5u?GhfWJ)w#d4!3<59G9@=W`wst>PDJ*dgn+=ncuYWo zUsBT26|l*a=Xki`Qgt#4(SIupxi{`S4qA}tx}$$Nm{=F3*dzWj%zGq!0%#_N4)Yy`+?<_w-4BOIIT zjl1Np_UgL~if1{{xn8_M3@C(tlG3H}a9O&2?pPx;XU~SOZ>M$jBLeDo2LNAzw9VEB z@Itqat@9clL?kJtofrz&whcp1=#YuYUZG zzh)|W(%d|<9cW0i8od(|?35=v2V1cqFE*BZM~LQBow)Vl2rYhS+P_$nna8_@*i7** ztSL+6k~??pBIGn<&YXjZr#KvrW0jd7<#?h<*U%i5f&@`z#QsedSBi!p*4IkD53l}Zo!Sx2bxRYo$6t#CDm0G5tU;u9oW$x|Sy~h5#miX_A6gA;Y z7Z*=J51y(MsiHNSJ9eah&Vr|=1^GI^K0DK4hN+VrkEP7qZ{fmZ&k3i1#*5X(6pvr0 z{lI<|z%5{%8!yF5AA=c_pK~WDZfWg!CjrPznBe&Z1w3^1@P(lToP2?hfCM9pwuQRD zmxU)|7pQrQMu1qc1SGdCxp%&u+bW%n&qiVPI40RZ$%R#y!DjutIX$quYL%^1W5dirc#6glZoen<3l1xFXKm5$<^Q-I9 zH7i!H&i$-(_DKkMhHfmNmjiJz?R-n_l)QjnPoF)bdvO97d)ZnG)&LpnLRac=BrWq|7c|Ex`N?BK0xhqIr7DTYnk31TP_`eqY(Rht)plkl z^z(Y#-4m=0S+yI-F#J}aE9jNFXR8kh(Z~a=d(Rq@(}lsX7`|>fkA6o#(hw}fu3x_{ zUAYK}4NXbL56Quu+GX6erY|kt-d>v`UN)n341+JPbzHki^bPi9bI|3#za4i-i2eJ! z5%}=?TS1Z40>Bse8YdC#{^M_&v(eGZ27fiF^g3^}5G2GvUwn%5=pd+rwL_A;W6M48 zO?siB?dsC?7SCYL*pCIw!!~CM$Qx`jrC`*4wt&PAY}}T3N?gnrU+f&ATQBmz=grsm z^z`)ogjF8_@u)9;4?ZAdBQ^ch#YP%n!_}aEv^RZyBM^aQUFS~5;=SbKgXTvx&pbSp zWdZq_sY2N49HCjYg4roSG|?nNhgeHgjnJ%&O;3O4@)aZ4U7|jJqe`N2wgIROgoJPV zyYY#tWq{hTXn1Y){_&rdb=(vPP;m%i^ESD^J7$efA0ga6oS)tGbm9ej`#*rlM$QOW z-3)R;=iotq$>Ye2hzCMY>PA5Y_(+dUF>?y0m?{cLj9Y1(bpRy;l_+cp!+PAo88cZd zdXq=L1&qh8pS(B7I`MThz}{tlZnDG}vl~N0LR5jz5ylIx5zzFI1R=i7Km|qjdb%TQ zc9fOkC1_3iCrtn0T48F(Q8Pe08AN(n%#&c=mBx$HXl$q>CrI+jIYS$bT)z0ac9p2} zQmqY}QsJ~}MXJG(MDo=PcagVb3_2QfK}yceu%`#nBDH$8U$~T26TqJa2bYjl{}Qyd zBkCl)Mb>UX0MR;e;y#QTp~z3v@FH)$h^IKgP=ok~ zoLC_Za|)6IE)2aYwTxpjmSbNi#Un;KmGJZD>D&smU`#-)^)G0Y@>;qZ@;4)t4uTVn z!S27@z~(Jku;9r?ISJ5gB_$=BqOl@=o`FRJl0vIkU@7AElHvIYs{6l)Y}ZHnb>p=p z%P1`IN6wwdkFKQ`w(i*R*Oix=OC110($qU#?6V_ZP8-s&oPIc}&c?6K#(7U%LXnq) z+^xvL4HKDfck;J>*1vxs6#c}?`}*!!C6s_~9MqYE#A7tV8KQXh_m^|!F0hG|yfQ~d zG<&_ozDJh4ok%BDetkQO*uOy6bzBz*&WyRh7Q#e$4+^OK-u8(guiA!ec z8-2L3-XP5;UYf?^**bsV#6i{`Zw%GSS(l-r(``el;wnoeuZ8_V zb?R+-yL+2ZKZC8pqrWl0wmfR@d~~N*gR`#~kVY0`Dq7SAV~u1B`r=l?Pjq+xMFB>& za~-Y-^bqh>;I}EN$sa@xVq(T(hT{Qmc%3rgO@98}MKcS`9d1k*-iBLz@(D_1CfY9E z1GU@?&T1dD4K#}*96tlm4jfQ?T79gcZFWko0!W%lS1NPCr9wm?L&efS|5KADjhup1XjN^V06U@^VS3-A;Q z(&`(p%fp|kAX^@JMaahE6FvlQJ#gT5uI5S2GM6JGKV_IKauSSu{ZDp60g2zg{+%b& z_iRQDV_R^p>V%%1T~h8F{AeG(fs>5BPyd?$?szOetZ6Sl1aVs22vzj`$v*^WFUKAB zgGGeI^m>OXF#BwRTW{Z%BMJlEHgzE4+Khha;Nh~hS`8SRh5|z2?yReESbK{8MrV;Rp!ZzL-Y+cDxwa4e=7h(!SC<> z>$^U1cGTl**QV;~=$wuc{ry6Q6ON}o$6I)QZsq$~nA|Ab5;ghri+&>ky^eyMk@g(i+!wr0#1+m)qnq288taIAaaKs2)MU>#8W=d_hEXGoN^gT#ZhOvvO+;j5|JONOQgr&; zGdqZLLiy5hN-(i$BpcJHeOm%?j4c7#Iu%u?wuyTva5gyykPMWg z&MXCGF-J5-pE@g== zxDD0Elo;Y@6kWAI07*z%xjV<1tq}pbTYdbEd9nuQ z>#0mEHI|Ptn&%^MJ9`d+?~9E~%rT(UkMgXZ8rxPfznnO6BHk&p#?uK7B_6yD_c3px z0U?1sb3cpZWh=Bt+1GI8wG$t5gF-WrPr{Htq|TW!b7llG4cFR{EH?depBgh&Qf&2u zzyAKagrr%l0F2lU&W!o<6XAOQ?JueAi~14G&8IO$hyoB*gMXJ69M96Jz3A;*%G4an z(eO2BQ{QJQ3^)#^sNZY2W0=qdsF$k6*81~DH|-fnK+z>B+7P((P=d*-*Tn7yWH2|{I2U8EFEpbE-$0A9qN3}7fJ%BZ(NEwWB zR81eV1tYL?1F1BzTQ2ik$%bT91HBG9!QT0ZV!iqEARoJ~mhhXgTT1PQ`aD$!%91`tMJ zM=;na*Sg?LP=Aq|&yMNq5=}rAzXhrzT+whHp|7^N()KSf6etAOB=K>OHGyFSqSp2= zfuHNDqut-vFyoqfV^j4KpBy@AllUv8zxrj02N64`ug}JIzx*-7X2UIi5A)xGNJ6F4 z56C2ruUr~%iT7U-xX7=7%?bR-N5X@E(22C=r+_D}JTrRYFV+S1F;m3fzJkOA(D@hM zbmZ$lus8w|zkm3jvFpfB|98+r@vhqi=76L~;qf>4=FN%q^gTNO*An9Y;J`|-gx$`_ zVi|nn`{KxV`u;Z*od#fsa&BWBYji~j$-F1n)BEsG(JBA{9+Do*ypP=HHJf2h?!}VA zls8K;=tja57ajeo0s7WI5#r73*F*n-5P#$6MM%Gp`r_Gg$h(Oz*+1Zmr*HnR$`<|X z|1d`S{g$)%9hg|{D^{)Yg+CJ9{|Gn-&iE%d$4&l6aIS@94Z&^&f;p_y`+*E|HSrdk zBh%9lz-?8Hf)9wn@TiCQgQ;MfKebGe!fQd^4oM>+6^enu;Ft+c3Icb@Ha{arkKon6 z4?BY}{m;ko`w?jA=sYKLbg|?%HMNK0YZ=)^LTtKvtZfnte}DU*wLtpm|I-mm%fd3| z;@mJf1Q0L3(nC<&c#y|xH+cdS!d2IGe7ARK!T>chcLHUs7C)XorQ>{mCjC?3FQX3c z9w!`22h>ii*YJ?2vg;#+Fuu|-c6V&pH_Qv~#z0M%-SQ$Q8Jj(s5g``^*EG>bli1_h z+a8Y+wPw^*-C1jTVQ*{K`TX7mEgUx}Fjlf&L+%B4H}1za;F&OsK0A$a@oOR*Z0@4| zZ3(=6MEaouADc-rW}!(_24bl;NG(K^ie)MNJKx&zOiGgQn2;Pv0^{_qFgKCE zk0g-NaE*1M-YFH@RS0r7uU!klgHlL?r}6mrk1rHFf2D&$E|1e+4N^~o3}~IV!EIQ< zb3oc2cALPWkMJ4=fNzg83QJW0$nQee`s3IgAJ(*yl>!o9G@wh9%m85l6v-bT3JVom zu>=N*>Vxb7#YWEa*J)vKrFWk`t!PjOh57 zwP6VYo^kRt&N`h0B-jlMO9n-92Hy({BRsPLd>-0Llz{peP`H{4NFSJov$|B%YV9ur z2b#2Q1RA|2NjC>)YaDRKtd$2sfUQl4UzXGu2Fnc$pFobQ+0sVE&^_rtLHuOuUY7Jg zQE*{PqHo7D^W+vHN+B?iiM0IZ+oAr-+=`8((^C~@uQCWfb4HMmGe(3Y5ft->!e3k9 zG6b@lWX?FO`H8bu7E|_vQBXz$_UhzgS5Y|_gJUs4uDCk7Lz%AQ&c5+F9QzrKt`HmJ zpvr!~Sb~{)6tWjiPKbrkSZdLttz7vD?a;ia=xN5>xp8=)mY6u?k$JPeR(a^cT$_EC zma*WY44Za=E(U1UIdbG4qRmZz|K%EF!9z9vJ)+04t`J*GVM_%O&OfyZi49JB+6NTl z5WutK!I~Jj;22U3=)ldcDmB&oNB;|W-E_hfIxvBvV%wACfSkaiLaJ~vw9WEq74g+7O7n+hW}Dh1KSB~Y<~9#Dv?j zK$mzRU1vxOrRNeKPLJOKKnc*Y^zsYs#b1HqV36?iRgL-4%X4vcw{CjZ)?-jK5l(1> zRX`cKK6bypU#RBeY&oYn(jbtLiMV~~uRoGj)A~!1W_z(a>WILqeOfGm5xcYI@EK~~ zfhbi#~eo5K`55sHRd_V#5m1{`=(P_IVYz{{&`+r9Kb(CL-GcIFGTMO@_n_P z5*~9_;nde?u)vB$-$#UpTYSm)%`Yq@BYz6~PzF}VQJjd2bb{+Z^Xb!S{)ztu9tlx9McLBecv2OvVgeN4@cd79FQSp%h;SqXh&zCEyUmf<_ziq^Psk7 z9W=*_+dUcCkW$NTiw=e(5q?6H(4?NlgQ#P@AR~^KKvSjCLLEfm|+F8p(qMg z_a;tjCPtY$&yYUjd;9h>4U`z)czx7foEkBC^nLLos5*EcW|;cwP;IQZ`?t+reu9j} zN6|1_dz1t3n63Wf;<h zKBh9@kBW!{WLGUmPG-7vnqwli!1zcqSAS1iYlrsW!VMerf%bB2&@YKT33&DL>4^Zd z(ZK)eMCo8id2klioqQ(jiXH~tAig0Z?WFq0gzO#zFTa-Aq%}tF35cC_S~-`Mi3Ym@@00n{h!o4qM7HqQPYz`(flI#%p&*?#)3o?|nuPFSvpSggi>-5Wn);@ald z!H&hz?Ii};D@?rloqh82+ql-(whykh`tUG2;cC0Soj)r(NItxGI4w^5kA?iKya@p; zuLFMZ&OL#;F6UX!CN+BW|C*~6iKzo>k2+g_k5)OV(wH-w6J1kM~k6 z_F2V51E)MQ?%U}JJ+;>8Ja{jqxM&Wpr8^7BaDW##F6 z-==L*mu|&qh0(G`fv7HwD>4FUA}y>Do4_6_D!pTL^?{WimhN}=|dPSq| z)1vOjPIgku)2zxHhQgMsT#9kF&J{bMr6cra#D`~bXXIg~-x16jY<7uQvP~*1>>%gn z^!cH+PuF>W6^~c1FVx03wNAOqiyyVh?~${a(K&A3uyc4_#k2GMb_Oe0PTxC~D^qzN z_YTixxRxpy3EY>XnNhlAOYFHFyPK;FRz3CRa;-EAYOaM9T%4G)A^AXy!?11J(!Lyp4kj0ZvMZ+bZ9x+%Id&U##IWJGUY#wKHP9peiQZuiuRZ`iqB$-OL~EKE=6q zO_ePqsKGw7a?8wZqwj0RUqXYrR_#@~Nv^FwlI!)jMk`*V^0&tu7)I#Eo$0QQwHSRq z@lwRfGk-oRaWsn%CZrJtZmr!ut^V?*9E!$dbd81n4gmFN;W9Vt&v)f4<4?<{qbnJ2zu9jaBYzzFhpq;v4If-sXEb zeHZOnGG^B_5J73(Z@-LGibm5hn6aWfdZ=h0}fC9bhGzmm0Qn*Qhv+45fL#9W3wB(c0O zI_aQY|C96ncMNZrSMpE|Nu2wbzj&FVj-A1iFF4*G5MyuMAJ+XmCByiQ*G84idI63v z!gX?+q(!Gkjm=rNZ9~p!)s%u+EDycd95);8dU1;hF$o;m1xxn~d$dgT82++Vq3T_z z=F2FHC!b{#zvQl8tE;~$d#`Q%`kf}CmOXAmnlG2O##^V{$vNs5>Ah=Tdx(WD&sk{3 zN0-=|l>K8ydt7ChN!x^1=~*kh3-8D}sp^$;JiKwLpx|Tnp#xc`?UpTyX5L>(nvyvw z@(P>=nFW<@O^JnO5MSSTLR2|Dh>Yoiqt~DP)nx-IEr)JM2VA>1&}epiSCf(xp31TO zpjbWS{>{Gi%VWyQr+x3QX$y1hc186+M-qA~h|fGLq)fwQZ4GdkrYd@+qI z32CU`XK?oQl!9A12@@CzRUtMr@}(;BZ+ZFCf8VQK(l$t6>@}o4j(nY4E2#SWJBcg* zChQ&lcVW*|i2eK5sv?*9C?{ZC8<5F5qV3Jq0Rl#LpI!!jS2%wJ;ym=-N+>4-T&Zct z;MK}6Dyjtj@4r78C;d_mffIA(P+ob}40Q?-NGM}tVl>cjhn$H3QCk%J0tXs`A+w;G z66DPeRNnZsfwzPT31G4x$Bn`grvvr}eo~E6(2rEO=8|0qK{^`g(3q~3xKQ>X%E!;` z*tM%m#8FaGvP;9G*sJPnENm%zfJQx7^U#n4r3X4t$FILQQUX7$(k8Q{i9Rh#hK_2gWL;P7J?RCG3Y*HqeMICV?{w#=C7$Rn}D)AX`(-BTs1zNS6mzd z0-tJbjo*;!2x67@&r~HgKAxAr$`lhg6w+khG}LG|-F3(k&&7$_dHaf~2p0MoI8Min!^li@O-xq9)QRF#a$tQCqsk-HI<$@pk|a+i zCmemiiDHudf;XUFnq!~%4sAWXTd0H;?aB~5EGx<@DOsR_On?+k zv8EoKmp9OJ39M#m$C{&fJ|T(+KzD{9KO;q3f#OD5BE+iV zESFBmOR->>Vp3Bpz8F#c5jYQ036WUQY@*5xU48v1NFbI!KEDP#b#lDfS3F>H&JiyI z-ihi#F~r#wnfLGSq8=%jJ!o4j25#j5u`OWl7i(<2FzI_$YZ6uv9DDeqFfv<$spq5l zQ3Z1G#TsNxgO++9mrjHnvRqQhlq-~{lJOlX2ZfFFba`utv^Z(J1jyd$$>`ZoM=T&k zTH4r5ZXU|2yODT|6g4zT!(}U`!Z>#T3??qP3?=Bgczy>tj!02x()-xcyaTHM%}ob_ z2FTIOu6q-^T+nRhS(8g`#zo5@bdE(qC3+thnz>g$2TCJJ8{Ce68rbj_xcSh;T(#E~6R%cX8An=>=Svz6vH zFVrYSP(m8$stFs;K2y^$RQ1V%kWjCJrvS{iqTp53JyHETk{@cobMpQND^c3~1}K_^-?74{qZjfKi5ek?`0m26&MpM_KF z%TXaP&*2s2(y$)lG2E&;(c|V7^waGEI8~4@6#w8gSq_d9_ma0|4oFa+Ab+e_>1W!g z#fwGOsu|c&L%uv*wy2Ex6%YiEi&h|IZ*|!MT0WvsqR@XZ+rukbX>f23s_8$uHGL(k zc35Qt3P-Yg-a*_e$0RyfPBeTrnQ9iEi`uSw_gNq&OrTT6L85T69}~s*aG0YhZMU)F z=(^?bo1?R;bWPyJ?pT?9a9Bt`*#!X?U3t0XB_5uS@Rm5rk={!yBA^3s6L>;Jg;}{?WQlS zN`qixIrN}o9F}zSd_-oOY>(W&e7yrL{GT=ocR$OU8ESHc7x4d*;udKiRVv z(iXl2t!tQR3$JZgCHn+gCn^dqKZb3VEX6unTA}DBY||S(;aqm!?I@;LTm+uagg177 zPU?JAanm%%nvuEx)&r7BY&bHhc)Kx zW<0FwOy@+L*Df|d9b|x@5a2c8vL&5wu5DIHTzAsNLqQj+tKF7*_PsGVbx?L|;KX%5 zO*@u1t-AfN!@0xXJUF;WS$@)XsHlYstt)8)VM&*P*L;M&Uo7|UFFZR|OG)LMJ(+0x z?7Fh@GfeRn%a?1QLlsH!VsRCx)b}bUVqYHZXcClQyUt(9SOwd^me!wgE@v`4(U~5+ z`Oy>ubipWp_bwWCa=-cnlp&PD5SJ;2ps?ifi_*nPLbyBEQJ2{aBdLKdnbkQSnW!C( zM%9FM)x#IlB609(Y-A+)UGrbPI(bf6xo%={&c3sC7-DjAC5=4*+7*#R$HXKNYU0MB z=PzGM!FJk_GDcW59FPfA9`{7UL$k}&!x6>~DOehC6OL70sF=s2Mu!E3RR02VfS-(; zog2baLPIwb&tfWXi+eCN&VuizKRcJMzpbZudGRsS(?(%}$ABn*^MK{XwoI=2rSxKW zT%$|h$F>|nn8icULV82dZ<5$oSS(f`&{3vX zCe#*eWeb~KBr${8`-(?lac@&sznGWt31p-%1Ox;rs#ZtAJTyQpu#99x#*RgIL%~M; z4B#MoX6hkEnkJnMdVtD)pu^=bh{L%8EK>%+q}0`2e;Fo75y~xB=UY^FVE(mzRQq0j`W$h(8>RxMDr10Y z+KrT5b>IRCHJzMA0zKL$kZMNPGjVm+K9o-7QpXPnYL@7|26Yfis5MEU@ynMM1Z{u@ z5-y=?0T(r;xZ}E^prpXs>wD`Kp#2_#eSSGzi(`^|^|x#}lgI4iPzMqe0#J7|2zEL*RNC;qrWO&upv1r2)=rz>Gn$?HK zw|-av+(~V;Ww~BH4DsvFs~rODO;ca3+13l&Q9;Lgla9b#1;3;zE-ALj2Uhx2;$-ln zJ9=kF-yKfe#?k4E8=vhOn1lAT6HwXa)>buU_>9X1$R)+7cAoof;arB1SKQymL7A3D zV6J@f>gJ;zymqDCXJHID;XK5z9aZ1pW>WL(@aCn=;5=pIcz;P?FTh+bC5IF0`9``( zG1J)FRbhmapx{jnL1;U<*h3RT8b_K1CMa1^~S zef{@x#}U3_A@2l7vMt84tu+?!GtS)h^1GTP;0~ztcFbQT{z;s0b(QGS9Lp`Lknp{OQ8s?aKhPi4-TJ&!GM)dJ~vbmK15?u@;e6D<{X6gfRY00 z{({2F7&!mPjDv8#SOane6cg-ylsY%Z(-imIWlU5PywWg{l|({{{H+ADt)8ARKd_wDZrzU z;~v8B3KbO-IvWNtCX)KKR^uilsn>`rN{p$v!_QS=V)%%KvAAKakO-n4;c|4fP^|Yu z^oQ071<=PD&2*{q%JG@-1`CMxmdB5mz^CbmH=wpkTz+g^7cdZYIHBs-Pw8mgkA7M^ z$T*5XSGnK?ttINA^J>vm`TUeekD77tNClwWebRk#-i9k`b(O`vK0Y5$Vh7GBkD$&| zDyU}VgyT#D6iqh&IaYk%{{1(CT=~n%-GuipLHwqopL~eJ&^Ib5LuyN@buIwnLJ2!OdRixrRdw=oVsJ4of}={co72RZV5l+IGED}XQsTB~s~98|ago~Hz-xSw@3eo{`k6Voqqff=QG4(`D_ zn>@G`i6)7tYPN(l&25Pcc!b1X-5;0+yYxsE2=*ixyoq86+~h&s&wT7LFKJ@rwc^Ak z6oBS-C;7$2$LoUdc=K^?Pw0!B=PzEMR&EcDa*(cRZEf{MCsO-B?5?z9!EX26%{X&k zE6gwqGbk(|!Az1s`ha+;y?eJex}>~0i-9mn1U`%Jl8M|KoufK|!8?R7bc z*k7p$S#`Qy7|jqoZ-N4TtWyX59+E|wI5D^iNID0xq~kX=8Fm9NKy9jZ*^Pafip3BO z;Ge6p>gEK0o5`?GmekhXN9$p_*8P#Y76>66Q)$PTzc57s@K!cUys3j^*^S9eW*1fu z76ugnstorP;W;IMu%IGrjCeon-H8zPb{DA(XMyC2L-k&aVfO>ns20OVnSiEKx;T8K z63!k35sx>f2Qll>F(n(Pz*8NBbM62OVZ?78rVACl8oPX%NhRGx+)(lToJkjq)mS~X4jIRuKS zhZ%Z8E2)xaY6}yJm53j z@KWrkQr(c=N)V^iy$X4|Hc+T^`g_4aoUc?27s@Z=XP&{iIHM^077l9hr&3Cj;ck-! zb?ROxQG3Y`a%(R^X5Y`1!mX+XU-}2XO??_nhJN@_G;%~mSWHI7LG(AhLGG3*BYh0Zz10@jf+ z9_dpBvczs^3iK|ttd7bK4LBbGq0nDo>$yk+P@8sNv?V5{n_RX!j*gCr^&M0Ro7-E7 zfuv3@FgQ8X?nQ<{UGQ44QAWZ3gUa`>y$0m+1sPRsmWfzKO%RMTa%GM`JvY7|=Riau z80f>(rL8lgKpX?GZHd8CW~u-=Z&|0R%=%yN_5Ap5J@`MCW65^%X<)cAHpK^T0A=P1 zM?i{2$wFA3Tj01i$gqzPclkWc1Bk#+l00N&+(VB3L5^{6iST=b6E7%=_&n&WbtvM2 zCGEl;?(fLz^r2>O8mNn}KxCem2U87;JUXk=YDbFAKxee43v#JZyT;U?{v_(@)HdR-%H$uNMz>qn>q zXF1n7K?%S;hwNQL;6N2DFE;ki4_Bc?p4u%Cm6w;AT(rrM%G-ej!l<1#9B;18p%=mM zMw0sjkcb%iM;Hgc&`1Cxic^Iu!|ur0TgkzXu9KOp4s;DCcM|vO!#85Rc6sxhEqcCI zNq-?6fU}troBDEx2UG$vwk%hLLez0kM+uM*?iKJN&*6lFUbm_B_WHBF0bNDnaY>nP z2CvLh)FYc2`Dt=12}Y6Jfc5~Vs?uGz7H?$D}A|bs=r(J?-Bf?d64RCU_ufvvO}db ze}zfkr3R~%loTqr??wTM4Xq}-9Gad~u_O8zPc`paJo@#UY(UGLpevo>Ap`qxAu@weVDm?-KxBqIA z?V5sVP_j4RKi$*g~fj#yE&Gd9MbaWPB>h*JD8Mg7usfSR<)bm1`+BXc6 zPms89R8yFMIb!AGj(usLlROTOI@P*@)TV-gykE{#6N*-fjq>J5y18F&8HzpAL+2K% zdO&r$6TsAoSKakMZkTQEw+^CNI!ra>&p%z;fcOgR0di!F$DohTWNHO7MY-!5I2$_C zFr=u2)!thP2-wrpV>6`)K#B*sB%VS%F-$mVD^Y_}@6t36dnU{7#Z2;Zg=HZgl}2bf zfx&MD6@l((SkWXXpqT@82wHxw=qjWZdI^p!eZLGB zx?jB@HPZ6@`E0%dvAZB4PG#olIyt2Pz-6^JfV7})xg%X$ZES4P63o&7Z~b)Ht1~`N z=T%lx2e@&|w|$*#(%Yn@)Po+frw(TSL)=HQ&YQyKbh2Mly|zw~A>s_Ee0?j+>&TV5TY(vy=Pwt#F4 z{OcJyhR6R7KhoPgZ%Ui57Nf&tzAh1%q z;>q`H%83Cg28_Nf1n~la5E-EWtITEQdvHV0VY?1|bEXOrKmfTx}4DKK-Kt85y~rv%;wDtZ?Y6`poDYpC58J9{-q;7=Zik)PZGZr^TBYq#fbmd7Se z^cW1)`ye6GK?@>FT5I1Fi$9k>_;4G7s`Ey4CTT7hKah2)N1`}^%Qg5>99CR~ZA%Wl zmtfa)qx-AW4Vfz{8eWLzncHH)%kJb*b$hv!QB^w)QF*?GBwl6#wQS|s0I;u%+GBHjxTNLtMUfyge#S`DHv5z zsW{;3*M%gLf$GXGl)1N}W>5U$aDGhh5ocE^K~?$NV2KmZhYwxM{~F<)*64#!g^Juv zM}C0y!E&UE05Cf06x$LJ3Ty&Z(3R#N4PU4x4cYogYby_r?7VunCn74I?idl;7HKC# zQ^6KU<T|v7zynnp z>~5Tast(M+%nEqQDWdZ8R8jqAVz$%pYu4Ur=Z3==g{NB7dn$-`_B* z%ApmQ2Z(EG4lt^JET2A@?u(KMI+7*nExa7RCzZmit%B@V)N^1OonlDN3S*SNt}@9n zLbWi~Los4`6v%>8t+nWA;e}7>N)8^}MVQ<4fR>wE=AzT%d1wR_MK~R)4b}HRgf$&n zxOXCpj$Ngij0Q6|sL<3!nvA*xWl0%FdA-M{xedj=IlanPmFs_@kh2uaIDs-cqL^?f zRwT?WEz|)$0nE^~_6@fOkY$f}TB%?JJzuGL31%hrdEKbjC0vdfM(q%&SQI3_@tZow zvfXI%R8CtAfi9>$#k%^ei21+XkKNo5mu!nO^g!8_0OiHea{*ORLfyiV_`dE)f+2>A zyejLx_;;y_O3K5}&j0n;^ugE@Se|IqUWugkqunxl3?1w!U59U$`1*?y}>q!>MNd3 zTzxvQ27#fTum|E$xQww1{xU@6@U*G;Q!)o*aJY$ae+o1rljXNkUdRjz{-2<}L60>ftD_j=6WjHocoeONepoOJQ=3^Ph-EBpT~u`u#R|L3e{{~x&7{{1Zv=$Po! z^?u7UPwsY_*+28_lj2Gmic#YPB=ArF%%%rd-xtXYIM_`V96uVQ%myJge%`zR>ugc2 zy=R;8lIboJeoh)QYJmja28USSw}WStza&AT|c+sSFnT^~5D>g(Ir+1|@U zS|DS*`tj^dHz4W2oJZHVv1qumzFykU)YL@(_~RtG^;{u{6RH;m@8y1w8P6P>{Cj|e z^#+9J6`>aL^hgU+Tv7eRsiEKHeu1>x_S^5DXOX_v z^k__CWeYm->%O@abM|DUAvJ-f67{4cEf^5du7K)sVah9utAt3W3kMv$a`o|@babZp z?45IP>I5nYE8-ncULz+fi=K+9hD|L+uKWRrKgqbT$79bvd2D%!S;H(Y3W)lk=@)BO zBtFlpeWSm&_D#gjOYqALB;*>W-hwIgBO5tD7?tm1{ewHkVRt1U?#hwWA+5}}5EB`7 z1(iwAt&LJ4(wrK|!oCVKKzonNRHX|Yf^1t1E5nRatm>_g>)~6r4Hr5ewX*h=OhGfZ z(95$|m=%igayot9e#%=h5af0gweb-Nd!mMVHs~t%g-b3!RlaOy*7pmRw^sYP)XKlu zdpqRT;DFQTJQY2wgZ`fsN)8^(clow?@t$C5O^@t7*_}SIL9RRb&DYj0*j&}yka%YFJU2c717Mw?z$Zj3HcrREQ4U}*uU>+@hWkTluNa4RJN+A!q2 z@#uHe8%k*Dz)Wav81pi*nF$GgpZ10+9)95?9^ZU_B`?vqZF(v%-Z(ygv1YlR)&f&) z&W|7$wU_6F=6Svs;3XK0%+k&JCT;c!UAFF9y#v;_{G2}|;cz(g!mmoNjIZ;DY8s?G zKW>}n@yjmIb--FUr)7y5v^_}gwq9|cCra<*?cdw-+$wRo^%FtijLt%tt{JYzNb6vD zfEd>}JpqytIn&JES;2jI1da4jdj2jI0FzV+QlG9Z*s24?3f6_4frk$u!GV`S7N_!2 z&o~HQ*ts~8#9;kyRzc4J1-z@y!wG#uL&JSV`IT}W z9`g%jtB*2M#Xtxk{l33#iug(m%Z^D`zup%XR_No$aU@N*oS9tjaJ72!Jney!uvn8! zy*ZU8iO*y9J0Zys%PY_N^)NQrMU8Xwbm7KzNKJZP>XVLql{;Q&O*rj9fx&5|AOBq;%>C<~@x$WKq)l5)$@c<`M|jDbF2l`B?ku zZG%g84BW&xi)3C0(of39@&?fR3;Vx9eh?M}hmNYl90uOCEDqTW>#;5XJ!C5PO^Uru zTG)m9`(1_SZ!&^G*;f(|fKUh`qG#*j4d6!dvd&Y%Gj{1cF^XEmuj!g_qVV1ib*dCGy6K}h#1xgs^$EKP)fteEq~J5z>V{d$%@YF20yBesR1)*L?L@6 z+*h`?vb{}*r}W)DyVWhE;@!LE=7UY~;-?BLaeN4;#KKX`v?JoU%FBl2AI>;7=T9`F zRn5)YA_n)l<6Zd$8khKA$6FlRwPW9pzNWZ{`@3#&6}*j7cSUVDQJjNCH*e{lXp1`T zd+DQ7qLj|71P(VS^gRE=vi8yI?gs)~Mgzkw8Izq|XO@XzP3q_Rfb20gJt5RenC0qI z)l^yoJ1Y7Xkg*gE^sFGTc(#7-$f_q>n2bzWN1w6=j-Y(&@(yn2M~@zb6dg_sa9|&^ zZSB$vSXzE;^stD}q(c(#mnt)kql7mx&0YpQ?Yen?|FIKl&6ubl)@z4Gi+9hayiqd0 z@-gqK--7jeQ9~WW<)=Qs%H8TGvGrO-p|OtL=+Qpb{td%9_Co`?yoX-7hZi9!4Dl-*$dEf21Xy4OJT{?hAv&)^q?{`H1tVQ!H`0IjNkFS{L9C9H^yw4 zClI0%HdX>V)zizoSZo!Mhle{=^1VKc<_&(Dzb+zDYOvah=lY(_ANoG!#iY4Qs!rtp z#7>6&y*Yn{*w za6LX^`zpx20V*b#w)4_I`50#p)*o3TLOaWd0+D7*6g7gHBPs&GmLni$u9W|<5_bym zn!?-bqYyk!Wl3YRL_=WQH@E`aHy{|;cGd+Z@A>mrmMO6hA8MoJ3hZOuZpOBVuh9A1 z9W<U_(R)*$9qaz{u$gCv zTYgT*rae2|a70BxNN~6)4p9QgoP&rL3)86}i_Otf}eLbO+1@?9awUR6z zc7ke=zPrbZZi)CEkQ1Q&ql7gO8tAt}yU-jHuFIk_!1y7p5K7gDE+m;yEzSEdg@^+<0hc!Q8jTb1_w#MQyC*=11R^ z!jJ+ROWO`|-1ZdDX}GT&-VjX#EWT@pf1$kZ2N{yrKH}Qb;nwH-mfhTZ7UbHn=!r$bCI5!HnEF+TGjd zpY-0d%l!!HHEJCbP1C`Sn3h*7rq5z}SqNIL0O|MnsE;IMHqsXq?Oh8C^<{7P239Lv zi6o_Ai4V>9ByfU7Yd4t z+od~wzZPB-iIAQ>s4s(-A#{Kr98Cd#GIU|y4|a3ys)@Sy&(hMhK+F?$kKb}VcDy_P zc1aI@6?z`bK44yoNH5Mh+X9UT2tOd^f9{T?e2meA6R;Nso8p@%fBf&xCl6v;P~y5+ zHK~E%S|FV{Ojw|JP68LC6OVTd4!jG~vFU3Uu#^FnLNT0zw!N^>LCz`j0^go>HmIRf zbxu0yCE&1p7HoOgdNK^R6pkQs)|zA|Dd%jnIy9>#_)pJ&zO{FT7A9+Cw%dFV}8 zb9tf@fHEInu=6A|?R&sIJxai_SAbJ(PsgpP%-H&qOV^nmvm48I4Pi`GlHYg=8eHDO zeRN}qDH4y}o6iqOXAvR<+$ri#2}d0&6-oF#15k9`2e_=uKKpI%4ZIDy9|I@Nw zorSeVdYvv6!=eXzf-(#eE~;t*ieB|d{KR=j&gFpg73 za3^WQ-w9_;>{tcG0M!4?x`P*`r>la<*=aT(7}U{GRhkuo67$*kn)Bpgn!N&#+yE8@pZ%`iGST;L$8o+2V@hnvPz5S^~k(-xDm256zu3lNjUy>El8Sgzvl{|##2z^X? zF+D_m`dlkbpqvm-o}4J;@*E~?_f|4#YddLERM^bQW}GYE2kvl_WWA*jqxFU+lRJNE84M%4N*+5XXt2<$l6(cN3ME_TG;AG6SXdlWNzP@$kjU-3PWOzR-Ayj93SZ}4kE@fUM&R^eNqxEm%Oe6@V7qb0p^gs zH#_h87f18M=Swwexy^w>7#2ENy!=_#L`H;Mkgr#^%bH^;n?LBEBAk+#JNMFR8BFfS z_7FW!Ma?rPQ)*ZLCczbE0zcH=GpBk|ZKRxboZ|BSC3h%HzgC~{^^$2M5gCSvNSdPRaRhn+1b~trrRwUdbn&rPQ4?pLmC3W{3g#cJu9rEoMmnRw6DW2`+C^Fg z)t0fE5If^;G5&eGzjr#%LY%jxLA3#SK$^!+b{I=z&55dvv{>1X z>}Ty-(xZaTJ~l_NB1zeoIRjv%OeeO?ozcun)>Zs+YX?>pIw*>zHD{%jupXR53L4O+ z+~`XjTO7BRZX(Y{*A-jW!eGJrb9N~x4$GX`wu_qx)twPxr`M4S&4KX@&%EksyR3Lk zjmhC%Zrao$c!GUFMsIWZhB8|#3U1_hPkG`{gmGIgEC0|YfX25QV6_*Mc=Jv^J+$_Q z{PS{q7MZ;pg}1`66q;NaZ~JjFDL->z>CQHxxT^1YxeX*J6Pnd+{xDpUTRzz+n1tED zEoa8NfvXQyTKdg2J3ciNo7g*QN4|Mk*xvc29_vAyn|WXHHxtm(jRYrqxy$nVAgW|M zj)kF-MXRd@5Yl;&pv1UFT%vkZEq4)dmuJ_^#)P{0Q}D^Ze5r01JEx2TE}XExfcbgx zj}h`$$hCb483ZsIz|NG`rc4@I69a&p>57iI3c zf17u*qgRNCCp-`zQ~1+ElL)^x54$kW|Vv*tFaqV5<7MRgomOqB7fHx21&u(=K3 zr2kj{5y$3`oR_o(;|VoAVP(-fi}2?dUm>WyD2m532Kmpm;sBhZDMz{pv0>&m!g1Rx zzOL3}Kst+yQ_BJ*i$C8&4G(|GxNQ0aLfD04BTc^kmqXPFI!m@6cQUxu^!AXcda4md zdv+&+lH?nNfd}B$Lz}u`Khv#b#so2#Cw+Zgo_@?!1@oCd{7=B)B!M#?L!BiUKbff44(%X1mMbeq)V` z9>0rYc)!S>zBR^r!*(Kwk$HrZ$!MH4Cr1C{dO$0FKMf(E`0x7f$jrsXUd!EwHx~bX zUmnRHDEruFA7eKaCJ6P%Uvi8FoY_}rx}{v)*p>Ws%0NYh%-f()#mFoVJ)ti?X~0em<63e5UrFwKAs0; z^HTX*s%D@ELeN6H`cMT=RW~Vrx(}1dp3jW5_bli$eMfO)+${v@RAVcAxjnUC!tiUPw<^7I2!9DBeQciCF6+2z z?(1khjpVm;lF}AX0O$PMv_J%q9t22KtBP{Vts5INS%qC0kh#1F6=faRP|^!Z(yGb` zZn1R(M<6$zNMfr=YXG~sM6qCJtoc2o_s5Fj1S{-cZ*lOl(3v=QzJY$oV7^N_8+41R z(Mau>1~iwlxhuod>-LZBqDMp(9vMWf;+p}PSf%UVyI%VADHL6)R|^So z5#4Ck#$hXO76w!?Qgl9@El{TFV)GQWE?y50oe?U?rcYpnT7f4Yb4%BzZd@P?>-9yZ zQABmU-$rka$|8c1yQCvq#&ZPjPPvmU9j&mWXRBoYsxgyZRHwcesB=cr|1{q>bsglW zGU8x($({w}@`?XJ^Jc24F4!a1M2@2B?eKtCUA_)x7OhSbzVK3uo}#b_@$7IzSCMrgeHcJ#0@ce7#k_eOJbb{$7`rnWfZBrTWgDGP>WC( zkX>r1_F;-67(_sLk=ijaSoHtp6>;sYK0-K|o%#=GTs>BAN0+veo~FssQU#WR5bm%kKY>c>ouP`{j`Ty2uRW$i}q_NtocO@L|)(y zf0k~&zM|P>dp8%e4#_?}zt5BHVt`^XP4(OP_tRN!pw~uJj&Ed)d+w*uVa^Qy)L_$I^ep{m; zV-oeokk$oV4Af{yB_q?ZsaAY*ESYaJs7b#_LgK!@p*NHQ&oXK>-6w1|?@y1Ox;mXHXH4oO39{5flUz36f)xgJdY8q99p9 zQ38@PMTR03P`w`Y{knUM9^H4`+dr;<4hQN9d+)W^nrqIv>&*it*%K6W6etwxgxtNm zswmVU_;LS_e-6Wc+Pw!f;XnHvRb}s>a@#J>piq}ka(8d5yT!~6xO$y+-fLLim`nBh z_oPVTwX^1Trdwb9b6SY?%0CQAek`5Y)6e&WPCfW6h0%UM^;PPd%)vwIN_TJHei!tw z;hkgGj?NryG&!`tm2=)q2%ARnySgj_;U32_Wq0h^UG(^%WG?)12z$u z>&2R|`~LjANoZg-6C4U3G_=}|0SaC3Lhuo=Lv ztgNu9#1gKc#5~utHS-K}o;^c3&vZ)f?d_QiF#Wk!|3F7aN2W$r_=^`Wny{?+*sovj z(u;ejpP=JofomWCvozTnUF^BRVBJ@w<3~x)Mwl$)--`Q66LV6GCcVQB_CZkW(Dy!*(6{|E z2DnyX0q@HVsqIhZdE~>hDmnj*WjycezTu`Y_ToolG6VJv^wcA07^)NP#wLZ%{Rsn&Y@>X~ig^>OG_w$*y zoS(wN%J$WuYr;A8QpG*jzmM3Z!|s{wEllexv1W${Ma+9Gf1}BKkoW@b%avnPV`${F zg|X<#&UkZ%dD6R0b?k|a9$UlYH&u(6x9?I5e(~JN?AP>dU@UH3yBj%Fb!F8nio@He z>_--_YphgFQ~t~`+OXLshi0jeh@pvod13a3lDsDi+FaM-!$*v6%eWb3Oc)e|=4np5 zBRLI)stse`a?|rO5ZMgKMtdstRI9BVCsP=Q=5Z+uH5UBZOTWnMO6^{ip3Y)DSgF(4 z*x1%yP*_M!O^q2slMT$x%_DL?gomf*=#^Tu$BA>rn>~5*6n^mc_wQ_AL}v>Qd8rK! z4$gLGd|=bePH&ACB!p=hcEEhZ5cteH@AjA4;!KmtNXe`%MrCVd z;+h=%Yjf#^O>_M^+s&IDCX771ywtR`88FA}H*cy`c@R~D8N@?lVzONa-DMRbxSV^H zOifdhl9JBC3tm$Qe>zy{F0ZKQd^jwE$C#>duUCx+O}Z;%$C=^fEF5GV;oV`(Qz|2$ zIu`t@uy9;xDc~Z>CnPe=-aS7>jiy?(diP5OJ@-J*)>+|m!4X^iW;|@TFqO38mZH18 z=oog#4(-UBD()qx&^|CR7M&??))$A2dK7;r&+!nFd!Siqjc>>XijSTriWpkCtDxEN z>3jN+PIzeHHJi?`rKP2JkIsvDtfec(ieSv*++{d*i{3HCN}>%HD_4Vh@{IDfR;Sp- z#Pkgf4UtSrCuoyxP~l?U8pS`0&x==RRg4yBv?MuSa-gqxw8gf#uN6fBXv8AbBdzQ)zFHCTPC)`2qe%Uk*yk$Ye_SQMMTd3rmG6!%J*# zx)JC5wGJFUZfCQqIvJeDn_p@R4gJfBCn*RiIERG zd+JmobDZ0ip|K?`nhO`Q^lYp6hZZHtJC6L8J#+p9($?0@ODc&6FxI@Xdg7IeKj1o) zV_4;3P*SGFvlC!0Knh+M3hU)SEYN`idI z9)pw;^5{IBs7p5QPP2K#vwa7ioUb>jLOI_|d5X&n^F2Vn*VbX!nJg%3iY=pUa%~{6Ix% zcC>cF%Oh0Sae2HyNx59_{`2S0A*FVh#FI8Rg*+7?Wesk*C(8t?S9`gC`}S>Sb9t<- z9iMBEwK~s;@30E-%Sh6SH>H$Ta(c^xXFq0H*Q@JwBhLRi3qpAWoE#xj@WH- zZy$#+So?g0ak@j6QDbqi3YViNn4@2=8sgM0zVWmzMwp9e+7^@HxmbnATyU3{_mAQ; zPlD`~?l{$^TlDlj(@g1*Pglb2m)#}SdeV3AP8Z`1KLC(ps#tX+;B%b3Kjm`x`1u6L9hT$Y-_H(KRd{SH_G4?cmh>%<~5;-Wu$*BmtQytdDsY_AN zyeX8mZRavZ%<*2J0RUddEjb7B{X?MDcmfOMH7>IxI?)3Ci;fs{?B2M?<`QJ@y41Kmt zFc=Ig0Gr6jNG`(m_O{3nzxJi9h$rPc-Bb6!KZ;X!-u=SS!&P?Uh2_+cuLaEuP1(nd zFFtG&34~wej@xsE?N17Kml?i5AZN%1GtiWb*dZ^OsZ*HhvpI6an>1f40(iU7FCi^0 z?ev*5&Jf(*tF3}aE%5U4(%+u~sWV-_++h~dlxDVeB6(*@GU}$WuYm1fw*6SW`Py`c zh|Ao^Lc=FdQm!k-q(j=USRVZbSR}f7XGOtmn%KhI&LS#WahK%7>E`A(og6ID`R~y) zMOM8$f#+}D`M|6kZXV_T`t=V;I>QA!P?NX_O0j3I=W6HQVf0>m4?{`oN>jFk@W7H5 zDvE6eL?9O{Aj!p#(TBxA%$Hp&R~_cF_(|jG)_6&y)yY=JJ@h2BGT*=7t6J++&@Fes zymraai`6tN1QqZ zcVR`lA#%D?4Gw-p8r^ScXKRw8zNF2BTtR&82q>w612Be?#D|Q0L0L( z_9}-ShEq~fvTAcQ;8m`mas6?KF?Jpv)p(!nj1rrH%+f&*1?*3iF{qo{;~$jQV25Oy zG>6kkc$HnGludNb^VPE{mxfM81?q21a!E)?2%kkai`g@+vuVolJ>3~<{BToF!%A&{ zl#ae$$c(`37r`_jMcW9yTMTvOBBkH;`yUf37OV9T7?`RQn+Y%wpwG>r`Argu(8wIG z9&nD6&voIKs?dIES(Mw+x*IX#vlQE0Q#G1d8UQgv&7-#GONW@`{HPdv${nZF3r$F#+$haM~tEw^-iwm%X2um{^h9@?#`f0(=R>S>UWo2U3xw(pzBC zHlYUz2euW$|UZRvAmctSD z20PREmxGefb!k0*oHRN%Mhyr9;JMJtb|_$MA|idXm4=zh@e&j#PK3qB$0L~h$BzdC zj_u;m&Z#jkgy&>@0CM@x}Ia~(Vdm*#9tTZ-_On8`7+oEm7ynsfww#vBxX{Z+u z?%jJ0*^yHYDab(#;%wB*J7y*(=9^0+kcFzC1rhPuw2LFXkBQ+hGBVoQ+G2$n&8UJBP$zg42W;vlcWZ`}XaFM@6{Iv$>6GM7O3+G)E91WHsR#NHbvGm6`#-4{64c zA`L5`k)x{tz#2gsqobom@HER3qw)!c;t0JvcV58e)*ctRAYk<%OEX73O^IGkb*S1K zLG9h$>el@wiV%e#U@v8A=4AHUR49g=J#!`*Nqa{=9zH>r?z6kymv1baF{fwFPFhP0 z)ydJ+;W*bj?_$PX^@~CQLr*CiN03wX@~VW0<+c0XktBT#!ddnR<;4g0@4tnb%nW0I zJj>3)lCC}9u2b!`wL*8};jR3hDz@WtG*Z%a_U^X)UGF#Y9SSCHIxfAUHmNtbHx^i% zdCg`LDRi(B)2$+R=;fIDWs%8B^wlnL1UN_QRd#$zd%qzUhm|GUwIxZ3yFR$9=%a<(%E6b4_eBy$@eQ12D z0QDhpQPyG=o2;3m+cp$0WPgW9z`Jfq@bRf5o#bk}Mi$oa0w8xTaU;jlW}qlOfBxJi z>FMDi62aNDwE>mn;V`4r825mt4fO9lP>*vVe@{bB(*&3dy=;Y81j0W(E3jLi(?K#I zf;C~r3sb|-S28Cg;B08>+2I!e<+x&__8&M9_U_&Aij_x|T?Og~yeGs}L9dm6U|`jp zw~y!g9IM?fgw3~xhAiD;iwN)1M|Fp1M!zyf{Dwj6{kE3StjWvCy=RKpXrBo0QsBP+egO%JMV3_IemXC$ricg_bkZU@=3Y( z+^fqq0Ez^(2uRL!9dM37xRvwgr^Wmt zL>$Jyn^Y}Bd1DFqmIQq!ySTUkyg}Qb2@J<$z1NJJz#5^q-~p?u3gxfFsy7LlZ6e+X zpClcy2AeHB8*j?`-TlbJ+Z3~yNZ#XaKR-Q!0f!x?Vu)ER0M6r83G)UO=8K1);kLI= zGtI;fO&YTWp(ls9yD>zFF!Je8mfTGNvWzh3xrm?`fBgfR20mr)w8e_XqT5;kaX;c6e^hQB<*%SDpREZRC~9($o{+`n*2{xJkf~o@&;tO!%5wvtiD@Qe?705#GbT;hvKP4@V9a^>_ECU0>Y+rGf&(5+eQgcq7I@Lx%>Pwqz$HeP5ZyHPe%mD@R z@bGk}DqaY@AgB~T!`%}^FUpm*Y}TDDONAt!3YYoL&o7VQV2oFCw6Zig>4ofSCkmkj zD_e`<;M8*1J9e6ehMAF((Rp#ufV*lf1UlT*b_r7US-s=PqH8U*MDhYe?tsdnk*hB( z=Ww)aMGX)LY{s%m${FZFwIB>3hcKbh?E02i0i9SU)c{$m%b^`I=l%;*4ry}eOG z&VgEt%hu`YHU0zv1${=m%i>^8grSEV^ko#skB8QcJb;1&=#SW~rX038;4VEn!=7v} zI5X@KDH_on_nt{3gBw%d{EPhIZRUxTqJxb^&ELJ3O^yC}kRy2F!&ty z4uM8h%k>xBDGwpob;3@F4;q+5hYpzouhF(~B((VF&!1wpKOt#R{KK;IOFhrfKyc74 z+0cE0+8M~3?{$L!-Et5{4XDT2{?felg@G)9&4Kiy>;CJ>mjG#3B(28RK?b+Cx0kFV!BP<28MIT`?*J;k^W+6`{v-=5jC(csZv43i;dam*(^UN zpNe(xXg3gXDujtZUg(RFMu^Qw6(RX=hxTPx&hem!TTdzv#8751LSS@Jp?Lj z4PY&yuw9}H_J;HHkIMkJB2!r*zeVv|vOx~@@$r!seQ@p3`GS8p-k(?sOF%(lbWWpEtE~!+0-6}G*PB;|bazEm@luQH3gjGvrUBfYDsHW#XkZNOc;KVfo|&&0AP#XbK2EP(E9>wsJ}bGt=TcRglq)33$0aE zXjmBL)2AB{q0JMq&rM8PKHhZq*@O1-oV)G{EHV-y&^L0gxBy;7ipor@;1E!lUFziy zCP?X|<9qtxz2(`4uo&`1*a3x;?eTd4kY**xTfwI7aXF9$XQ0gphsM~Za=HEr9#OcS zWwkam$bPu4*a^89>Awa%2su%_W3Y}Xm~Bw!#UW*$#|;1wb2@<6&Y(M*4k_(a2swgAni zYbvwysy5A~>@CIR5X?KTj`y6r%b_hFYMS-QMvYxs;m`A${$c6!T$BlE<|Y|)N0D) z;H!K5(V}Mi{)iN4q#m>Nh>~(K5Ohy_vUQLq97ehZd(HyL2B`N0e#<&YUiu=}sI?#n zSrzv~d1$Vsb>Q$&56UxoN2_iiV@IE%=}3!<{(f3tkCJ=n*mG@DY^a;+8@dc4so5icv1hUr?{AyKcCL)Qy(|%n;soyE8~<2^C-~FaBY-l$UXCN zoI`KW`Dxa*bnICt_j|u-G?ZNx(qI<>YeEDe0oqI$cWYtVFfq5=be}+zMo0(Aoz`eC zzU8MBPkZb;%G?i36OyuX-<;X~nmW-@>X_S!{WlfW5KiOM!{-1AfDnI>T9|HXW@ZT+ z-eZ@D4+C}V)K!^uhlwVW9tNZgpirTdSvcM4xkmJ1%sG^N2*$&hR%-BF`SKazlDkbU z98aQ*xs7ym*FRud#d)~qb;6H8YJy0c{h4p<58wjoTQ|f|Xa95dCE(tk0%#FI?^SxN z&t(9qUwps+Hws3f#x>dYB@EbTwKSfOOwE|(&ulJi=;G-cU~j-4;@Q}-8>w=fe5K>6 zNL%2x{aYpBx{49=4W4XxoX^6>COd-J}P$$)GA_s{ZJ9?6QK6qy*oKD2z~5Hkcs4uGCwg*(SJ?$I*>xa zZ=ye9^|>LKF(N*GNF!1lH&S*I^pA(hH;zy-gqD_;0;1BGo&TeY+qvRbnJ(d95+0v^ zm)&x2?U~PiyZ{_Pfy>bhwYvfq#-yf-q&*X;+{IW3rWb90GiXi75&CQt1SFYJ*dIk3 zg~B9mzQJD;s}e){m>tIl4<6+Eb^Lw*G7%Sv-AP=k-2!AYfe2RtH7ybsq@a!=Cvp-iqyKwb? z@?^KFIWU z%2*BwKR0UQ_NyB?eRx0SGV?U=ajA0wn0uEm?Ys2*akq{d&~1CyFiYF!z3F=XlLPbQ z^j@OVA-4+_4|)}nZF5o<0uRJIN?0LqK0ST=&*JFkD|qgD7qZJGONeXqw0<%Ax>l{> zY}-%KHux-p@|sH%N5dGOiq51_7v zc9Ggm3uo*qbF!mf*1QupvjSd$YcZzs?7mCCKXU8nIK!T0VQ*-YDB12rtb%LV!DsHT zo*jJl`>!a>zZvHqoTI2%_^*k&t;Bt6SeO0jX5N2(m3vWq&rTe>hW)QuNsOs|b?c-_ z;wM7z|KsTR@0ORcU-N(|^W!DsY0hRrhFx$k&8* zmp(Ua+|ez;-(*E%lsKPx+nQ~<+4@aX5r<5}>4G)YAv!u|%LyJ!HJyaNTe{YH^3@>D znXNZ<(3YWl%StW8Nk~8~k1{>OP%vC;yyq@1Z!V`;S+JWq`gC_mZhX*JlbPpKNg8dW zJJUUdI_@y2wbopws3`g^ML^^v!xmJ)^5Sd95qda8^%hSMPAf z%=mzV{?6*V_0JY-UZDzl7Me@y@SyD{YA;f~U3Ej&M(Q26Cn7KKr8^&LH8`U;T(T-! zy$U^9uHeD+#$zf?pCU8QO(*7%@!G5SZv-QwhO=17EnHR9^u9ld%8uS#y;YXK$>_3h-LpB3DA=Mpbs^mJfn z=Ui;=^d^TQfhNSZ{o9w>T+z@>6k`CL<}x%8eK&4Rc;{GX^ecySXO_g5&@0q%yuN?G zl)cV$HvI5Jx7b&$kS9^9Q|Lvt2>b?(dpwtT_0XJrNU2{U<)aBEIRm=GLXzBV_Sm8Y z+}*#q7|_f)w@0;;8BEd5Q*yK}oZ5_ein3h>66D7UFAlehCb^=6)K;UavE@F(RogYZ z9%%2%$({3A)D|2!vE~|H* zMMTZ86xsOj6w*h18c%_B>h2oIGF`-2uwkbku5_)pJ2R*zTT_bpjP^~1 zT;4somE{}bQzj~^z6Ox)as8H$ahJP|0vIT80p1qVV?%8Q%Mv-8;&QwTlqz|q6V!8N zIKdj`uqJz~?)m+{IV+SMeXrwoR3Qk%SyrG{Zyt5 z4|ip2@$lT7hE8hg4~bXpBMU@R!i#st#~w|8P@HmF(+|Jj<#cr1L8xUE$9dl?%7EM3 zQ8&kel%ax?>@(`d!mi7_O>H}%S`*{*D>`W?sVg*U=EuueHVZ<&lgZ@GQ;oF()J2x6 zXCg*QF9fB`+`SW?dDtWTX?%5{e8|9MaeQHvYMbcV>gR4%VI{3&;(swp?o~>)DC}tH zU+hC)SCi^H!cMF- zkQxl``CJ&uqi80hJQ5K zc;yov-B5DW;UbF8(h6`5c>0CKY1nBMyk}(W3YmXH*U6>bwLqcL{nhc!Y2~%I!S(D(jrCp#= z*Pcq!BTf5e4i@O<6lim7Q68A2_~XH4IRux2%mDnU2HsbI|Cqdn{x5SAQ`4pqyHMxV z;p^Z{0>MKgL-m?Q#wasritZjBO^+MV33-pAQr#8xj{bg$VN>wEnnxA%&x2g33MOFa z+@1G!+(EvZ+PEb*&S0@HHg;9A=GeXj;QpF#3^(`u2ZOVe$GmGFu>%Ky9$)5uIy3N?y@D%n~H#Ni;aVFO2vp4{@(dP z)Z((sXIzNr5pw4q z`X6n{|5>5`sT=wGIMn~KDOhC*yaH}$a06<1cwnsr^vpy5Ogm~X1mtDJj|4q&V_ow2 zax6@zPRM@vG-zO9AZ!B%Fg`J%F)H)d7LC>bU#GmXvKGuPn^vy==*drC_dNvFnTZty z&$}o7er(CFvuQwnhq4yDVj%y975&MwsAu|cLtt4AM@6ntqO1ij)cO2v*HkCrF>I^W zH;&!-Jzc2b`u}gE{@+Yw88v`+#1#VEB?ilZLZLPBVkj}!g_u2J9vXNE8&%NtaUh6r z>X$9)3LZc`pb&AMO#xvi3~`WQfX+Nj2MmKohB(j+ul)Rs!us5C?VwR3f&rSmcL(2U z+nY5oS>yjDj+{F#y3~z5^E@pU;k)GoeS3N__2|OwdJyqGbnmHNr{#>c44N#nF+S(rxMF%`tT0rt>f_m;eT)S_I2QjQ70(F_avGd$dmAvZhOel95 zlFqa0C+J1gf#FmGzOx9tZo5O|-S{X$+gu-vB*-oT=-ClSJOzs0m3~TCzhNvY>bY zJJ$vCoR{tciaUeP<|BUVK6S(dQ$yah?X@ZqBcy>FiG$;QyV&YmChE-=yP1NmV&ODv z;59>1fU#nOzkzVosUb3o_IV{vo^Z83>%=);+O{xIL4EFADp=kc%6HK_V~kwlhgK_O z_6_F^M;(3!&V&fq5{Nk!gq__x2RP1wyHXdp&rl|y{&f*`JkD!H4w;R3ua!53-b9TE z5hJhVSD9LQx!~+b2Wu0!-MeA>ugQVmvycffJGD&&=<#xcmmBekA=VjbX=(HAwV9BV zl$76c0SL?;V4T3EDKl2>uJ>=RbtxP4kat$wapjI?2pbRLhz5{c)HF0{X7S#dAX$2h zyrOZMY>B*5N`uPPlCBz}b|LdAss&4Ir-MZp@v#(J;@h@@rOWNx4?fGv`{d~Y<~s(D z>B|Tc3=Fh7_z(EpSDqlI5QI^K)#L)H6_IbSBfb~>4Tks>kuif{g#+Ist_F>+0+|$8 z=2Cz48kY9s_P;G4!jGl8h3qf*A zHIJGExv~{5aQszf-?sQ6B%}pgoKe8a-&E}4YY3vZ1eK?+rLC=cG^!koo%rJ?PVgIn zv@~S~q!}M*5tdP@=GU2-qic3n0^Gq_)&)@~!^_9ltzT%Wm^gpv89@#n)e6er0AJp)kJis!N3f`xK7E=lY}vzMRt4tV zkBNzirXb{*pBrJILa|_h4T}cV$0!a~r+p9%4#?=huisF<17mH4mHh~#gHOcwf==&M zYM{Lf8!`&+GWq4zu~@>}i^823#oX-Th-zwT$ONo{jwR4~CytiOK%fD`4~8G>o-D2Q zm>Z8?zzYjMtVI=qp)s{?gr#0(kH9*;)!s5DMB~CaUL0f|WvZ?o`uhc9Me$p`2dKn` z^>aU2o<-%FeQOiD9@LgTqSg_Rm;vzRxe6!XVaw;hFpjaF#5xjIMq1I*pEgkmR-P}(kGhpeN zGC&7w^FUlD{cLj#?c!%p^0JRM=75&Y0Jl|?uw$yv-j*41RtMa-T8M^=*#id^lN?N{ zOD-=s%dV8xd@}P*O4lvUM9iOvqKw#_;rs)*m#@^_@Yf&9OHY`pImfB1U*e?_pXZ;I zf@eYP^cr+suAOR+$0M#YFasm94Pvd6*cv~BNlUXt(ko*eVo3xG|IA7=9xphA1#w;k z9Ne0@`WgTJdoUt*M@zRbT`5K=aiq?V9qdwwlg5X<>k68mk$qLxfFY{P@T?2DrJV8H znq57NE;sPYLNDMg2+@2*+5`@M8pIckQk#JyNcO53w)y&QR*kz#wWDm)k%{RDE6r=x zHVt|XSZK{QZ7)-J?lmizOBzkE%pf`)*+ULNz z1_64zNZCM*ujoVeiS(n5c1Q{GG)4#G#yT6t%gpxI7OVUe_k@}oCE<-l3`U3!7HwOt z0(fP0arYH5ggx5_&OD?9oLQUrDDGK;)M@IBY6^GL?+S+eh*78R#_v-und)*NL~=S+ zpiLmLvj&gphfZZxwjnyblYQvzpkGyok3mAO9RSfSxn_6X7Rgv^qXFEr-``)QIC``L z0vz#GA~~E>uS6XrAmVZZV>75}5WaXwuc?5Q%s;<4wABM{za&s&lOcW(a~+q|*W4mg z735Ho@1x(xFO-$>qu&Bd3VT6GqtNHBL045GGhoSCLo$F#0QXdeO0o>{1}OpPM5BTy zZxl`}M4}#G5kJGX0GbLfmuAk=vmWhSAg`U{(oY9E8+kF1P~SP6=*>~Z_^Ya_^4SiG z5$AdluNGH7OSTV)$hb;(N2tdNlzvi2j~?|H3lv;is-v3Hkz`?+F7Rfbj=aq6UMy^O z9yx~wshj-x#N|D9wz(~3_lr|WVn!3rHX!{c%7?Md1aMbB0Qw*C&%q{Qg$>R21!84k z0r1Fi3JOF7zH;TtSvZ-3IBLPuifG$=i{w4!5I(cEi^Q2OS;R<+sNJBODn{{T{OA)N zSX`ZLLSy&?l3@6Vr9df8EQ7|#O9lR}0@5*Q*A0M^ucSjddODKu$oBE3>0`A5=lanXGMqfU8jQ&4w_y4XJ`rmW~FyjAF z?Ad<{RZA_Wpn%|END7*829)c5w16UjP|bJ=?_Bd(^6nzqKRCF3gA@|S+_pO5?-_)g zp8zr5kmy3KrP5~o2(M+%l0$Zt?;?7%J@5jzm1de!Y!jBYtcj+f=_p}h-**OkvI~-wLzR-1aGp{+Br-N5pHVz_WHI;$_mQ43XUDzJHb$X@ zWa9>lcFt0kOsON%!51@DJvT&ZB;DG@{TcW(@0XlNSo?9{Bx+a_oKk#NKW~7oNez4r zoq$)6u!ikM@}Gs0NMIyy`XQ*;wq{oo0T4dBL@mUj-ewYXQ8)>-O7Q*2fk~$_)0wOI z&xw^W|MhtbmL?y=yxbn)ZC>_9;vBR z)k4+^;!m>%=j*~1+0hsvX9JBKRILpMv#{;+ojG~)coJc2%L$Wfjyli4kSiT<4l$e| zaRRnQCOKMKTI6KPS@;taL`y*7KuCn7fPsbpwnr5}g*c1?jW_JKLp@CjKKvAYE^VJa z!cjmCs9Z2%g-Evs&ZeI7T=OUkd~R$t_+KA`t;03nr1>1U`xPJ);}C%6^|XZ`5sNny z-uMp4{vLSX)xq+y_Ctzl1^^^iKkKw%oF4Q@NHPcfnGOjZ0q@;ap04x1%Dc*2o*y{k zgd8`3B!NiU&qszK%$z|~7KipC)36E~#c!E4-6%gqu!$LYndV1P5uZ3|t`G@( z@buLOGcNwZ$5@&pXOf^P0@JDS0GT{D;O-PY5xca^c=Gf=m;QN6ee&9C3VM?cd`{94 zK{l?Z4L!Ps5kW$_^KV5&G}N6^asHb67DIhKnQG3dJ(#gh3rm8pLb36{&-d3@_OqqW zT|Vhhg+|@%m^=8qxqa$l+hx}{{f+Hk8y{@rCW^X7!T6)!p zTU{$g{`JkA+{CfGT;nQX0{)|MRkgR?F6I-_niSp_r|6yiv)j6}lawVKY+Y&!J^2H; zT>K`q|A%e+V;b-maITWJE#5oO+XsSS!E4g%+=bkI;L^_&F@s83-sb#tdavWhR%zmd z$*OLJjdcuph)hS;+m>IO8Dw4%8!MUa&K(Ok%(hnAiV@CV7z<7&;Ad=zndifhk_yLokTXH2p_bax}TR3_+cFoPGg zZkmcQ=RX{w3OY1a|LyImtB?B<{pvjh2hOTA3x7&_XZ63W|>+`N5Xa_*D%3TddJe=44lH%KINRv^HpM*KPz?P+R8uOH+2 z)huyQ)nYOODs+pSS+5Hz_bP;3^4gZaM=Ol|jBoSDnCPwdIX9uh>%H^5E|PDgD0q>} z81fzQU(S=hzbJG5lEjJC@6RrJGual~pVALUNhW4u9NRK(&chTdlGl{Up#XUz0FH!G z3Xi{Yg61kMR8?d;;bkYdmOBBhb%A&By~~jI26D2jTUgV2_Cj*5d!Baw6~y~x94sz? zoGqOJU?B&dS1UODT%`&#yS|8VcUpGlEpJ=;_I7T? zf;=2Ra;s|Y{AFJa;hFkDNrV+#XW~_0_MCZrHRv83SF*)z963Q3%7ETk4xRlucw#;c zqY#mb9OW@-3eAkCmGtov*&6>~xwG?zIqqYsa{TX6$-F)Pz72Q`(>yb8{4R3eSfA|~ z#5RdAN;9A8C>6l5=7?*LbDxZy`S*;{JzIcA0Ixhm_BO}54$q!|7Vf|uPsE}x=o$*d^HW=P3cGp>o~V4h$hXo!ekY;7 z+!1b=Vy!tbi!SR<{6|93crf}t`;Zr}B77yp??1YazTqR!W_6|9e%UEYCHZUI zJx{NgO;L2^JKyT~hpvLDc;!Vycax~fb_w&=oh??3I)7e9oiFAP-Y8yEF)k)tY|kwU ztb%Nwgq%=S`9ft$@mArnx2Aza>E$p&Y8p4WA#`n|$v@Masw$s}SmySaZo`il9AR2r zBZB-Nb}eyh<|A2-~(dXx(o#M0E1gfX*( z)PuE1W2n)!x7i?>3Jyn3VEM4K0z?BUi&gNeropyQS5*y>31*08W5*j6v9qyt!rsf= z`}jds-YnKxbNe%u&yRE>7aacthUq?c&5i@EsQzH>fKnuJ7Gv{^$I#aMJKjL94=M=mZ0&ZhhP;^}52|?H($g&A zB35~+ZcF0tE7-Q_X%MVuqm76Y3--%jojR=@JKL{w$Wv8r+t0!;*1Fe-=#(8I*(cOP zU+iX;kfn5TeU5cYyOhGg+83O=$G^go%79gE4v-{&>c(6zFHrXuHc};TUqE(RMeM$h;_j({8vnJw5&Pt79}W z(BjNiF?72O2EX2%)vBQbJ97{m#`r2tV{jI6wClT#yy}3mrVR&&y{1Hm-av1DHJn37 zl~}0K;QS;RT5X{=vDFr#iBPr2fHCu2y>%bQ06`}6=+UFOYSMy67gV>dubdTwsS9bK z0c4WVTg^s6@bwwmpB~=UxBo`1sN24s8v!(M(0oaMZhf&MoJzWB_4Cu~*B=F}bo8WLf^+218}- zbQL})S}l{Y>()>iGE)VM<~;#fC-oO%>&5CV<^+1vG3#1t5vA4EMVuLnLe|sE&fXiV z@Vy?DDjUn#HZwTy94~C9IfTdY7ujBL+_P?h&7f25Azj5imXn_SI>5)#zEX&QnI3RX z+r&k>-o;b)qjQ@-Ccmg5Rs5VeBKbPbxc=*kS$yCIdT*6wx6SqOh96^4iMWT?K4%cn&*$ND>Xgw?g~G3u*1=P!@{6nt&K3o^xzw)+Sp_RC&*?QMTiQqe ztVxl&dpEfuM`E(%alnzvv!&=_gYT*>oFh3-%fr+rLdY(g2-h3^a*X>ePzC_$H#e&;eWMYn2?nFx1SB z>CPr*6Fjy6kK(qPJ*@uGICLo9dsfLok z(zVi?tJ_7hq!Mhs6{)pY+?ZFgzOQ>17dl}L4P{RMQ@w8J98R5r7BXkmr#fR}IdH1E zK8E*is$LVG30O!DWBkTi>MdGbK7=1zd#OZf*&Ton9qICx~53t^t{7rYe%lf&&3~!gU+*F-73p% z(lpWpO8TTRACh$Re5viac6ruBrxpgc?V~5vFA#tKr`gnK+0;bvXl!uLk=n*%J${w! z3C!Tw|@MzCTMxCg<2)@is8rND?!_&`J`6gXh9e8 z%;55z&0ms-HoIs#e0H~`0pPmv+XK98xEd^W8km#U zfV9hc@*mf|Dub^Lf>f52kdQEVb2i%5fD+)Pc9n-xy=m5~$l}MA^kgk$!@$Ylsis6jA7x@44pLQe(ZTxaf1}UWj zP9M?Lq z^72mE@*Bnm+dU6-;G%}Q=GTpd3s?8756>St{<A$si6`LQocqBRj!}tODXF(y1Z?RzMOKi3@u~gs?-U zMPx~=3!rR@WmAJj_BB*VqOu9dA_QU+1lbL;2a~xkI6Y_n=;`!yPCIiBoC7&Y-pl*) zzWd$p-rxP*ACL3$^Bp zSEl`@zMSQx_a58spvk(~E-W6<9uS&ILO~*!arUvK!GP)Qy0LvhkxMg|z{Hr)ySqsR zD)FEzVGdoKEq4QvuE0C62n1s^fi~pa@*w0AemHIC7tlY;zd`lbuYrtI=lG+)LZ4h5 z@(sXDtzn^E&5C@P5fBWrCdQDKa}un@^D<^h#+3?!`;0Ge^Z;TQ6D)i8=6KW&7COox_K{CE!)6D?RyGYLG6 z0|~NYw5Iuy4t0|0XaO>!rp!G?5J<>Ct5Y&^KhV|V?FF-x*1YktI1)Q~OW?A>oD<Es+2V)B(f0=bJ$#|ZgsGEt9a2K}bg zM%$>*zpL%0)lm6``3Ieg)#Px2HVtuSny)W&P1Al_$92y%0JDt%6vO%GjhvY(KNR!OhfopOzmxLv~6kvr$p9XTygV#Ib4GPxH0 zUBYk9ko71u5*k-!IQOd382J^{o#AVYxXOw*YuF;;^Y~&c_#Ph>N1Htl2^V|3_>ULd zL+NVGga$T|)J0J(T6_}TMlA?Ztm#uHn7?QrqZ%x- zNbesP`lm=wHtsb8nHcHejKCw~B^^h2jc$Tn$|0}6F@7EMDaTFl#*G6BR1%25RJBko zD7P`AH;IuX^SK`Ag#yULIEOJalq7z+xVNPvD6@LL2TwKzREP@@NBlr-IP+Ahi^FVf zT+5qIKj;(Y-E;e(tpUlBUW~&+$xY+2?n17-x32704SK94N9gZEvc;r zLsd@cDuQ1Y92Q8R@xC4U{x$~_#k$I0;Cob zvG5LM;Qh5?#Je8@+N|U|dz68&MEZWaH3P686x7biTM0GPwlU{yn^)blO0-Uc^UDTr zKCX$$zC3@?nlN+lElTNi)1}tz{V-ySfBdcFF<~^YQapfj6#!yLblCsWYf0%Hc@}j= zQy(LiCZI!EAim0YvV!Yf>w=&2!?)1V-)GEN&6L)X$&F+s8EI*}aQOK`|5h?RO+t?> zsh^cNsZ`C3CJAyE$`xccDxxBz=86}l-2|VzMUCXX4WI9C+?3Fe^2R+a7W{#0Kk*=*O`0#^lJU);(d$>TQJG4ZK!LoQ$2 zKN9fu>QJ9T5*`*Y72f9kL_Z->LMq9e9kRU)P@2}H>W*WM^sHz;w&WG)iYRLn9h1iu z4mEbsF?(-pHZoh>hg*DmVIh^>l<4Zx%OFY>E*|c4`*13NWqQJHd0}KDr(4LkQ~XE! zZ7s3M;=q6n6Wy4}u#qPfqr7=e9W7E(z28t>um~A@DUSKsxZ)mv$4x>(wK!&yJViIx zihZri)J@r+-t)lrVjBOao5nfO`5MbF52a(znU|?i?EMHK?Q0RJ zo_2Q43t!+bC4s_%b`-yl%>YhW*$l@w=y_wKkD2~R7nYC=Ev{O~d;V>2Jj|I>WpqJ~ zW=3>*246V;&B9Mp4=77jSf)Skp8iyPX0<<-P$9G`@#Zw71@?MT-_LeOe}V5U8?C&d z&B;?|lP|q*%!xcPhAIosM}?m!_XJeW5*#sOvD3zbapjx>8XG-;Ei=s1#VN%Sy;aIH zY652l1Xoifqf5M9mibe14cYnV#L_W)#TVsxoWY|rGZU_;4mMWlV*hS^w6Y+#;`O`P zDS4AoQu~6>$n&(w*{o7@_k~;^Zrom)imi>C@*xLGqH<;*gBM%fKvS;UFT1(qE-|Vz zm0$BDI3D9hS!BlUab4b76motaEBJX!z_@FsPsD?|fU&KCf!>$q$|mX-{~{K#23f`c z?kYn@7}1nrq7MtP2#LzdXFS%NY+WQant0I&kWg&|H5Xqumeq1>^Z4a{Q^pt7ogXAw zTft2R2Ml`!Sr-)1{W$7D5xe|_N`3STV{>;g6Wwn)>1d!WRSezq;Q$t$3|v5ZVSd&Yn6%LpSDlz~ z6QTcc^@;gp4bP*SVu{K+0>Ax+b=Ty2mO>;&M9b1%d%f^CGOi*XeEsQSUE26{TVJk< zho}tu(ptn#j!BY?f%2%>Wy~5;)7dUHQJ0n_W346f^3$}Hz6=E!5zTlT9>xVfC-2|d zu`U!CU04qk^8D6!rC*A%z&AR7e10<}gp-*nhHzhh?V}F=o^h<4{PZb6{2tknbCU52>DoCvZvo-DWF*ij*46Km zYyEgt05c>)9N4oYavnX}g{~aDf}F|%r8xu*VnQyg4EP|?3~>AOpc}8s zLe_1Afz%t`f=U`#M_~o1s^9@zPlWAeJ5Unkp@!($l)X3lklw)XX$TbUjvuegmEW$a zs->k>Hlw;b;f!e3ebt~~ca{=R1koJ;KwUpj;jbKkE(R7Xe0|KCHt0@Af-ATU_pDMv zeac{zX=b74&X2y-gj^|Gw@L?qE*|7I)<9JnU9P`Q`A%d%4{w-(z{U6WOHDJ7?ihsL z2UJKyW5M@%;r;tb(EYqST%mk3C=VoP9?d)OmDj!aOwHT^cni3**6@iNP&?fZ>Dg!2 ztVOKNT^|^rNkDdNUDnpo@tt;p-rPhWcUZv$b(SD#TWIK_gK$HM4Knx0_J%eY?M`ekuJ;u)xurW@-9Z~{B#0{*O=9L>2*UWoryikO7SFQiCV3;o7$S}=cN1$kg!b5H~I1c(xB$tQ7d2Rc_)Gxsg%fNfAV3%QpZ zEiH|mvd%}2wln~sj|xeV-{$OfEGQ!(iwYn@Lg&wy-hoU*0pz*ZFzGF)##*i-=hdr8 z|GUrnFF2ZC^Oiko67|3+VL)-+`Lq`@ikSF#5EHQhZJFS!%vXbAPB@$*B)%8o2aQOjRCBKt}``Rs~@wss&<{!w_-dT0R<>B*4aO}Z-`+ig-cdM>A_8!wkS$E`^UvlYx!0q{k z&1Ch;zj62d6K@!0@GyiA>r0XU5%Bvr?q6F^s|NFP#Pui6`RY9Xw%~Yms{Vic*{W@? z+V&rip{{OpVq*Uxw6N+uSH0&S0UG_UFUfi#fhlzo$=KE{V%c2nB$P}H@@%J?D6Mrr zEP`z6(^hsc%!)(|{u2?3$5^`!IW$Sq5_$O7iE<|2T52slP1uOM_;;%#2a5jYe&L^g Cjk@~) literal 0 HcmV?d00001 diff --git a/ui-tests/binderhub_snapshots/ui.test.ts/server-remove-confirm.png b/ui-tests/binderhub_snapshots/ui.test.ts/server-remove-confirm.png new file mode 100644 index 0000000000000000000000000000000000000000..09f970bad6faf1306be6d264ee290667ade89d70 GIT binary patch literal 42002 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 EAG&%RN&o-= literal 0 HcmV?d00001 diff --git a/ui-tests/tests/ui.test.ts-snapshots/server-removed-linux.png b/ui-tests/binderhub_snapshots/ui.test.ts/server-removed.png similarity index 100% rename from ui-tests/tests/ui.test.ts-snapshots/server-removed-linux.png rename to ui-tests/binderhub_snapshots/ui.test.ts/server-removed.png diff --git a/ui-tests/tests/ui.test.ts-snapshots/servers-dialog-linux.png b/ui-tests/binderhub_snapshots/ui.test.ts/servers-dialog.png similarity index 100% rename from ui-tests/tests/ui.test.ts-snapshots/servers-dialog-linux.png rename to ui-tests/binderhub_snapshots/ui.test.ts/servers-dialog.png diff --git a/ui-tests/tests/ui.test.ts-snapshots/servers-page-linux.png b/ui-tests/binderhub_snapshots/ui.test.ts/servers-page.png similarity index 100% rename from ui-tests/tests/ui.test.ts-snapshots/servers-page-linux.png rename to ui-tests/binderhub_snapshots/ui.test.ts/servers-page.png diff --git a/ui-tests/tests/ui.test.ts-snapshots/user-linux.png b/ui-tests/binderhub_snapshots/ui.test.ts/user.png similarity index 100% rename from ui-tests/tests/ui.test.ts-snapshots/user-linux.png rename to ui-tests/binderhub_snapshots/ui.test.ts/user.png diff --git a/ui-tests/jupyterhub_config_binderhub.py b/ui-tests/jupyterhub_config_binderhub.py new file mode 100644 index 0000000..10b251f --- /dev/null +++ b/ui-tests/jupyterhub_config_binderhub.py @@ -0,0 +1,106 @@ +""" +This file is only used for local development +and overrides some of the default values from the plugin. +""" + +import os +from pathlib import Path +from jupyterhub.auth import DummyAuthenticator +from tljh.configurer import apply_config, load_config +from tljh_repo2docker import tljh_custom_jupyterhub_config, TLJH_R2D_ADMIN_SCOPE +import sys + + +HERE = Path(__file__).parent +tljh_config = load_config() +tljh_config["services"]["cull"]["enabled"] = False +apply_config(tljh_config, c) + +tljh_custom_jupyterhub_config(c) +tljh_repo2docker_config = HERE / "tljh_repo2docker_binderhub.py" + +c.JupyterHub.authenticator_class = DummyAuthenticator + +c.JupyterHub.allow_named_servers = True +c.JupyterHub.ip = "0.0.0.0" + + +binderhub_service_name = "binder" +binderhub_config = HERE / "binderhub_config.py" + + +binderhub_environment = {} +for env_var in ["JUPYTERHUB_EXTERNAL_URL", "GITHUB_ACCESS_TOKEN"]: + if os.getenv(env_var) is not None: + binderhub_environment[env_var] = os.getenv(env_var) + +c.JupyterHub.services.extend( + [ + { + "name": binderhub_service_name, + "admin": True, + "command": [ + sys.executable, + "-m", + "binderhub", + f"--config={binderhub_config}", + ], + "url": "http://localhost:8585", + "environment": binderhub_environment, + "oauth_client_id": "service-binderhub", + "oauth_no_confirm": True, + }, + { + "name": "tljh_repo2docker", + "url": "http://127.0.0.1:6789", + "command": [ + sys.executable, + "-m", + "tljh_repo2docker", + "--ip", + "0.0.0.0", + "--port", + "6789", + "--config", + f"{tljh_repo2docker_config}", + ], + "oauth_no_confirm": True, + "oauth_client_allowed_scopes": [ + TLJH_R2D_ADMIN_SCOPE, + ], + }, + ] +) + +c.JupyterHub.custom_scopes = { + TLJH_R2D_ADMIN_SCOPE: { + "description": "Admin access to myservice", + }, +} + +c.JupyterHub.load_roles = [ + { + "description": "Role for tljh_repo2docker service", + "name": "tljh-repo2docker-service", + "scopes": [ + "read:users", + "read:roles:users", + "admin:servers", + "access:services!service=binder", + ], + "services": ["tljh_repo2docker"], + }, + { + "name": "tljh-repo2docker-service-admin", + "users": ["alice"], + "scopes": [TLJH_R2D_ADMIN_SCOPE], + }, + { + "name": "user", + "scopes": [ + "self", + # access to the env page + "access:services!service=tljh_repo2docker", + ], + }, +] diff --git a/jupyterhub_config.py b/ui-tests/jupyterhub_config_local.py similarity index 100% rename from jupyterhub_config.py rename to ui-tests/jupyterhub_config_local.py diff --git a/ui-tests/local_snapshots/ui.test.ts/admin.png b/ui-tests/local_snapshots/ui.test.ts/admin.png new file mode 100644 index 0000000000000000000000000000000000000000..f1bd625b9a75d50856fa7bcfe029467d1b0e87a9 GIT binary patch literal 22244 zcmeIaXHb+~wyX)1Y`s#6zZJhqlbzp z)Cu@_wDt5!_^-u%P!;|=Vy7q}ips)}&!A8@P?8VtD?3Nd4>~zto*er5%hj>t!6Q*Z z8j*|d&fj`HbeZS0;@KV%k^9P>x1S2ry}2Q#>=*a)#CgJy?xROZL>`)dvGuwki_VUv zej$S9DqGz@qTc&a>gbEfosulAZ;MS<(NPp9aZ~iK2Q9fTUAkmg)Q`Lm{8S4%J3FU{ zdK0jXjgQMxQBk>|(IE~IzrREUU5sc>T3fSM&&|s_bMWUN_xQ{Vec2$3v^w|k--oJy zJV2fP{jvDoQIS6fKez-r9Q*y*+M%wYp?!aECpaujy-T*_ma~fsJrk3Rj*bpZnw|P_ zuUdbqZq};ZI4>`h!+ejz{{Ft)>Dm|!wCoo80M0+E(8Pw(ux5=WaL8iy`m%oF#4}6w-yTiJjb9l?@ z;G2w$zRTIyUcP)Ol~`o())m#a;Am)QSl{2TNz%yc5@*uTgb8X7nCPie{W+u0CaWa= zRE4x4&Tv!hqd+-L&ByHQm<-kQ3{_t@cX#PN>WLrrb-$|QCwew3GAMlNHoHIiqIo3d z)oj0GLJG#utFx^9elY4|)x}d@(jiQ34JzsO9kSdr+l~vE^3V29{P4r|1NdZei9*R< zb(WoLs`9B)6za21AKTWr3QVzz_wV0dSzlL$wUUgm7yH_4&gU>2#GsO<+$DSDa7Ws6~c&Iqjx?#M%Wufkk>j&nc*6f=d8sfoC5W( z(O6)v=(R)(qH$49%E@vR=P3B{Ga~*h8n@~gYI!QcN_BOr`3e~sL+$GmwoGWr2AN=! zoJi8CIVz?aT9Ks5rr5I*g-uP$^vse*vuEgeb^N?988*uVhYzxlhW^O^>#EALXK_T7 z0x720v|tCN--|jjB}I-xqtVf44%UA*{HiesE0j^sT41@Imj3<=S%AC?>5zxQ3~m`{st0Go;^C5681a$*W3%T^bf>WQPyE{e53+RvID{O}&7F zvfoy`L8l3`8Lk#{+_R+kyK&_UMOeg}_=ML{29bQXR=Z8ux|@R4(^KC!ToB`1q>XWl ziy&-Tt0vPi(buZ-i>D1J$@AY z`A`2oYB5-|G|M^W;R@TsQH#}C2fQYEeqG&Mb3Zv@t{oO5sbLX(r zZSkx77{!YQSv%r>oOX#p$4NQK>f85k(r0*|_4hQ5Fp*^Q+{|uzudHrK>Xf90D{*i< zkoW7!Hc%!AOx!yb5IVe7D<#BITWV!!`GhV?h@nRKiTE0`Vqm|)nGB8TjkCY4k5Fv| z)v6cjxOa1|8JTxR7xdM#zb-tH{mDGu@|UC!cfH1Ulr@aCugobMy*54S#>~&J8NqF( zs-Y3CsHD`=Ps_=vV%D7{$a+miUcS34Q#1JE$1fQfOndA7R%x0=S$%~T=@qUUrp@7; zeI<6ul+GhZ3e0;I11^)2ruqwQKhi9+RH^l&xI#`ouV~j_XtBN8BCL|FBY5KENvQz2 zD85Pa&}JhgMa2N>dJb8fM_5=`xUgp>3A0858K-HAgg<3&ulc(VAF%I9+3h!%^#)yV zQ7rvdL*>0LyC(=q>KYpxNtLIJelCURuPdR7 z-?}Z>d8%GJSmoW@eo!3M(7Jc9uJ9Gx48pOPCIo zyO<7^7UXs7W6n?BmhhvycTb^cz}6SNvA7^$WI5FpW1zLls(w-?baa8WBjjdnKt1@% zPq!WY-ltfy?Y>+cC@LmT7YbDyil$6P4S)kfxd$9?of&WHbIVxB*ujZofF7ZewGEs~D>CJW$;89Yeg?2Qu6S zi6b}IQHSTjj;_PvKuJc#QJCTphORUfMq^w8y;-5)!B_`tl{g@tbxe$>#L^S|}QBxO-M`rS3LnnKhXL_Ci;`RaK@{<(9a=;QHrA zkC~YnWYQNacNSj?8#g~!NBafaaOHCfxEqx03-NZj(Xi`P1-WT4B%)fE*8>Z1*Niu5 zCB;Py)k_6#)?W3OmMDUNsTrr^1^W>DRj;NqTUS_cwTXRYZLM>t!WG{kFC3h*psudY z@*q<>u-Pau*?4BJgx&&~jP3P>xfP8?$}AfE?rO``&HYIaKg4cFq!dYFl_UiZc2~i2 z-;;5fPp@n@1Tz*m|9aN^`QC$bWE^yP>)Mh7p7n#z7<4P$qObbH51;+?4M~lhXWpy$ zljq3j?%sWT=FAyB=jAV}_{qjl#@n|az~p?&&bIpG9}^Umkf~Y3aO>8s7L}LjD(QEG zg@qS-avs2ow)c)G20)C)mbN|&{K`K9;=vcy7*{@K4zQFShl*5EhC{mVLSc*tiv zQv-$eH}!F5U{D=VPD82F)6c;O)dOkeRgH|2R`*g;=-jtwl1n#+T;aX#nj?9YU}=%r zvn(DxiSuAL#xS*&&@l%ysv+;B?UAOsXI%Lcxom4P6utcSDQvEx^dR61jdJH4`}N)3 zIo*TygT3K{lFor5tC(B2Zx#kHtyEDmCeZS);x+Qnkr z*TbX-U-sRS^xVUTB3GdCrh|_C7VrH0x&$`{;`M9&Oz^YVQhb*tHbb3#Z)f;G72>?~ zLY!On35qg197YPlYMs`P_9bnKH*K!b*2#m15jh-lEs%Q?FZcksc9N=TNdq7BnpIcS%l9!mQkDRZR1PF{rI)~uvMO(;E$yU zud;MnRqZ7a3-3O@ckdpC^CnBMqWbagQGjJj)=K%+;3R`9LtL8{UAipbc|x zF{MPQD>T&9&&Pj$0PJBC-A_$TJss`3s30Tret$LQ;86e)002^$U?O=}mU&hsM$@w^ z+k0~KIV}fx;Po=q^Thpy_lxCXgfdqqTmDMQ$;sjK*e%W@`~{m9->D>TGEw&lL2{5T zaN3MLG_DREhhWlbmR*sQBpboN%q+W9u@TK>-t%RqBRO3$QRn`CUdP47Ay`ImXFkugJ>f0*?b%&l{c5ixn1!n>S}6c-=>T^PhnKXpAs!w)%G^wH zjH(Y2MZPJPp<=CFn&9kNWf>WnPkjO7_-@^9_7;J7$Q?eAvWwUF5Qh$0cIUMSF+w`? zfs9iMTx8Nue=6214z zD?EAj+Lw`$rxpXn3NW8alMTTR0NJmUR+)s8u^GI%cD4>U4W9hQc)lT1uui?#O#?S6lI39w*u-c{ZEw)}{vQ z1_cCAJk=7D4XGiHE6=z^6>OiwcH$8>Q&SCs8CIILB08e zaIT_=h*wvZHe*yp4zij%8%s`>Ro0`T`1#(v>hUQd2`Z1xSU{z*_g|ev(o$GLm8GEy zJoxU*CCt3h=vn##lMZnO1qCvW=O4lUvlN**e2TT#Cc?k@j6-p*f4F2 z^Zxejn=N#?r$6&K|i#s*M!q0oY>Jgki{TQ33;xO#Kab>GKl%{Cz z$nydX!<;AJucEZ?wm2-la@8Rxl8D}sR0LNJGtZ!!LD$GDIE}zZh;o|zPK(M~T9JiT z!z{oHygqlGfsQWa$wEu75CmudBrIK(SG{k}n5R7F$!&4%x1Vs&iZq{bsj}oVxHHeM zROI&PZTR%$WMa3jr}k~}_m9oZGZ06?J>>jgsd6W)a&wGOCFSvb%|i3GZT#Hoyu0J_ z$bC+e_J;w=faF6r1Ox;C600#k`6_}KWNvP5zWt0MZ1IMYW*`9aAx2d|)Wl(h9Opl? zAIE3|9WaFK!Dr8&+3(@I(;xT{{fK5=c~);mR6W3GEb*{7tBV3M26EBqWdg zK%acQnv)bf)*{@)Zgwwfo8A2!mxkPR==vaTHAisECzi2MHiVJIuRgxu1X^4IvE-@iYHVQCaw#|8uj($w<~t6B0^tYM<0nIxQ@iyJ~& zv!nQ(7;fIYAIzY_@U`M<)Q<;Ap;ZZ&*yJe#6mr&um%@m`-tN$_ADnN^aSvnS7P2*} zTjFgRFEfZ1VA=`_R8Pd5SZA@na`9r^=g-%EeE)t3fMvM{6MFNE&FVhhv;|Pqp6Ht- z7p3v^L%FJ)-`lrHXtrOQR@egw26-7v4KD?e55%z&(W|=k+GQ@QQ%EciVb#q75Hy=p zOQ}@mxB&Yn=$YqwdkFifr}vp$&fey3_WbEv3lD_N)rBl7YA(x5DkaNp1LDqq_Jcq+Mo1fS7^bx+$kKhuvrF{c9Q6qo zaLLW8Sl2jl{5UdyEb-k0iaqSo$kHW(3#W&4HUQkXFcSZf0D}ZbAhE8btHP$#o?;gO z69u4wB>iAPytu4T>axMbvzriRX~7#)2%DXDB6wlpX61cZcJmd&Iwi9jK74`1yRBnzD9;S)3<00Q3_ZPl={dzit z$Iy~m+lS)fX%ICuD&0x|o+hQFq`1|_;F@ThAn7$UHjdfrF%|-|DY6^&DjGsdgLSd& zgeTEQG&|nMO^IHM7Rpslp_jBZ-xJFiYU9H^2#*{vh5CM`i^r-|_80uPDT6)EbA&u0?Gy1?D$?SJWHk^)wLwVTq zpn?Q~KPHO5tmzUdr1iQUTaz#QNH1Sb(5XPrB!=p=!$M|J!FXTxIrF{)GXX}iz+(@+ zw_HQ)O?1#K9mVH>xh@B`pdt3~VUY8*v!2vSMRa3F2YX9&E#gi$f~BRKpN8C zYutoHB=GJCF#%3#4H9FL(sfZs$3ixC_9$Th5VL&+=|(Nlna55M(LuIiRe=vdavDfY z2A#)0AejwN9JFPFS&*K0(nQR_=}Gc2S%6|GfMbF&=GaYWK#uCLy=Jm7Sf&=R27JaG zU<8aiqjJhfuGf5`@))I;kz)wZdhc7!5(9)j8XMOOluL>)B>m`Pb~@jhXDpAvx&9)n zZX_OqM`dJWlm;)L1PLYJ`B^ugqdPl0b9J9?lL>p2hjWPydE&CAyrjXizT?| z)v2M5-W$oVB@m05cXWMG;{@qpCYULskdRJx`O3R*H8nsF&d%TKDX}xQ7_QVt{I@S_ zWeOxV!K}JEz*fC|`}Uo`f47pnphMfS^O6C{+3#ORC2BJoSZdL^ZquhqY17jvO!*BP z{M8w#C@+rppBFCZT1e@>rXaXI9ghI7*atpqU;!rI z-(2u!i3S`OUt))2U}2F%fMTO71PScO->(pGhj4m;*4u!4L$(ku+LdKE9P%$^@Qetc zCw(28C>_c`P5s@_@-mhPil!!xIM{=VNRKhy-_4Qy8W;y-$oR^;> zc?y^oMoeT16P12d*Da@~;N6^PRrdf40AF>mCodb$@hLeu8Te@qy>G_>QOU-}#`3vu z=K~9)0)D`E+XeAO#r|*JoNf+dm!Or8Rt8+?u{nB*S+j7yoc`TP2jqa97JbSHKoIvM zPlYon1e_nkeg8=cQCE!fEAb$vkxB|PB{?@H;C8y^C<%Lq~18L_9 z`z-@~e0(e`w~P=%t-V(UnRN7QYO-?9GcnHRts*cs2g)75y;v|qY>vK!!*uK4C8sA7 zACCb`u^ceoLll;y+hDs&SHE+#hOpyi?MfIM#@nHnmuP7!xC zg|Q=vt#NlV!lD2`3oSJ74ZtmHMlD3ahToWhEd*e6H6c$Bb?n$Nhl9P1bTMBNmqpyn zOe&xm)2)?B0%Bs;W#TB9d|))viG?;ru5+2U!j}-p35`)tQWa?g_czB8lS0DJV3|{+ zX+Z;rEH60`EINar;9h$Mnd!CMhZ_NMlmYrbYHiK;75aAL4e&vUcx^T^hrspB;Q3xQ zSsy#P?69yqq_5v|ZPY1d#mx&>(C<}jnp@rXc~92eP;3#$6#TAIO5Q`Gz%&suSQ*xe zwE##im9w;Xv8hTDu!rp&k7WVu5Zak%M@R|aRz5@4q@1b2Szyu6)gr=O6fNj#y1h1& z_9Q0`_|v%+9oYQ{s+|Vjp-tOqkR~0Q_Vw#mQP*-87nd1`cU^zKIyDKi0b~M%y}kD1 zW!|6Jjs2#Y!p2uLAWPu@i2e*a)0>z4^TYLIK&U*fl_V07|8RQjIwRN%35%klqH7TP zaJ_^@`P$PP;r+1h6W?BKvFYsrvOV^5x8p{?J^bTPJ-C=q9Fk5 zz6#eOBsBqg8{X6bp+gGXwpMN}SY3OKxJs}ugm;vZlvIE_aeyJGUXG5HmIfkoC6e&~ zOp3XEza+-2#Q_r1S;)egS1T+BOH+X;ZttC+0q)EJL!%3`3EU3LaH$}AtzUe?LMNkoeK9?GrQm%$uef&ql3Z zITJIC(lPaHN8fQRX=4Jg03Vv|3I>71LzpP=fDnA_F~W{x-_L-hgl^%vtcEfW+zSZ} znIJl!K{@3M0<(Z81;#H;EjyZhp?URkk2%npArJ9ox!uurcK@bM2@s8xsjBXGC4fdGr*&fXkCy=epAw4Ctjz({+ zerN>feY!pK#@;#Jpz-4cCA*{n@lT@uC)~M*5`KTZXBR zrHNRF*=ZTrWu^F-R;L}qPIX1ApIKkKN9u7umnf3u%Dr7_8JSKngh?C@C!=RaNI-zl zv@NcJ*1WQ+eJz*P-es?%f~QQO4I#*;DGeot4HcFn66osbcF4IU<##}>7N*GzE^kI*;V*l z9vPum!ZusDMF@z3ZC<3Gpn?GA;o$-9Z0tl4uP{+<*vFND6I=v&X5B0wT zf8X87mWJu5ZAl3e$&vboCPh)vm-dbxl|T+L($I(E>P~JU#%%t`oExv2G67cQipb39|6LwNeYp(mo{O_{-PisFBgpOn$*C8e`F*wseU3&Z5+lxb za5U#y{x0dEynJ8rqW)aXE&e~N?_c<5ESB$4=YQYITK~A$?@wOWZ~xEU>-2x$TYi>M z=l=cf)q`P4AXD&)xO+CfXXpH%VFtz7)d;;54l0Z^n;p3E_3Pu0e@6W!=yTG{+2@!& zheZpou{y>P_OtPIH*XxdadL28gXC3_6Ui!^;(P_u^lTCsgPXd?>yZC;e$^9%m3DV3YR(Ynmq!EVPr}_bh zAin9$pM{X3OWufSHtL9esHx6NK(^2L&mlqye_<^@Tiwv(UWezvkS`UV zKOM((*>UfG*^2&ieNecvocmssOUh!Oux>#?mfcJIN^2{`5)J~qJ8@L5>#s&jSvuv< z{j{tcAv>j8scNE5RN!e*<`=b}+$~vUJfqGqJO8S7kYGHY`iULH`v>g#j14 z_f~z|*)Yy1^HKS9ZDnNZvEOz*!gk5d;)_rTw@jrDiR{)^aiw}p!e_H%oVdSFZ=uNy z2g`2}F6T^p>tGw_H)DpVvMQTjae8V8{A794@gh(i{VQaatUcB?tRR)?KX1vNWz0#z zYoXLqXlf&Chqx*~HS9#ru#;>I zn>oy_4Qf=dX111Yy)EH-%*}PWwWU8`)vfAlX~$ApqFnd!l)sCc*<@#aXr|4r-??wf z;o(be?CI&0PGGvcYZO}e*GbnjNm*U@3$BW+2iD2~04pzTkI$HO7O8(tV)bQR?%9eO zCSFXJF6qJ_Qx+2zvoDqjh}rHt+BR2 zA1Y$jmehe>?B}6))MVRR>FN9Q2TgDOGpBddGp}4t)6L>n(1!I2?)kUwAJbH6%^OUY z3OMSXxxMn@^a*E8j&cwD0SGjwBQX;cs{tB zF%+8Q{#G5m)kU_ouEmtG7*nQnc|>1fk6|bvfe3%>^0b*shlWQ$LQ=tQ{-Q{q%Y6fw z&lxVIg}Gp*ak9z)>W-kkid=09-C>1^mY|(okE)rVa>26&esr{wvrmMpx6n2irNz># zmyX;xwDW4i1k)|{V_g1`xh3Tu41-zfj2Ewz2{%vTv-kN@J(iZRWmU8(HYwSbDVlPD zo&rh4YSgpMy5j}UJ52DFWK5E|{4#>eGal!*pT~IgxM^IvN~Kcxz*MPrSlw#j1xFO- zYolfKnPo*b3h%CFd85Jyx2uFQTA#|FTe@gFv?G=pap@yx`ebtW-_h?O9*XTRoR|D~DJyi^hJuMm&`Z%GgfPDK#liv9x zzAoYGD4k1RE~PqV_C;u9tOk`W{`h|W>ER%~7@rLA-q%y+q>^m^u9;>w#++rh6ueqU zN7Hdrsl9*CELBg13inu7x8>!|n=6Ty9wAFIZMzPV=;hZ9;YBQ|Jq{bx1~YZ^5#e3y zp;*&t>j2qd%SVc}+mmZ^>jo|w=k~(nSxdp&bv0Dvsh zG&FJH)v|Ox1x$?V)wMLnDa|;_YLaA|G>&2U26SVD&u6`@NSn*U(z0x_GjHz%=~TqO zMn61}_A*9g_`p3)8PoCO+dq@tSl1O#`cA%H)jvhVMdLuS5l)=V^x(uUo3rMXn+u1~ zOQw-brxu)Q&tDe_=c-LKvl303CrXu+72a~bwtZ{;ul1O^0F!W*7g|I<>gA>0k}?Hz zKbHK{Oqhi^Pj4mfiDj0-uA5c)rMgoJD^O^VITV@}B;&JarKw;>oIua+@BL_-gSaax z=MzhfmD-{#Ha1Y5fPP6mt|i}jmA;pvJ!MfPIC8XgsZ3F7Qb3#OKleM2%#62~#G27? z`1bbbY4@UEK@6L&(?eWW3K)fy2)UvgoQC1O*LJclpEK1~Am#FLBya2-%w(XWsmUr6 z9!S=%Wj73OuUTMhgh}*hW~}Qlt!u2|JR#uGmxQwN-FJUL!@Rqr9P8ja29w!Yrv6pK zd+SO`1@Hbq6hqC&a)GmZm5gGJK5IJ|gF!cor_rkilI<_gC9ge9W*{5REB(gkGS^zq z#F@R2TpC=#X(smUtx(5Xd^Jxj=iTMgsI!A(<5BtJzwSO?&T<_w6d) zjMf|SAC}a$BgWbb4jzWwVsI(z{G20j-}O=+N4fMH(N`4&nVQNiP5cQ=WoA|tah-zJ zx1@dK`tprD!|f<5VhU-baZDEjG!;v=?=8)DeXEjBwaR;1(VAYW@p{W_mbI4CWAxKS z&m=KppFQwZ_Bp~WiAJB3Ts){G4__a38K{e}Bv5l^&Ci?D(9$w)7w8)fGHDrh9nd~J za^%R$@-ifG!Ft!&-g}}Q+W(9i^}hx4ye_hxt(mNr=)-O))TJtuzYhU~a zY#pt+3)S@9iiT2};_%};WEeA6;p1Mv-#Rfx^+v@}o0*5IEW7A`U?$y*$RV}YdUd7+ zvy0DLaxE`r-6Aer4#Ju`ln~ji(glY6#75kAdp`oFTcSly&|6`OTksn(|t?3|H3$icr{fOc7PmhZHeu|>4Wl!j({mFuJkI7xuXZf!mosE2acX;nV zpkGUg0$~mzONiaEs+Zq{|HD7JeP^X(_V#vn(Yx~W_nmy_MMbZF$)Bhax_fv4<;6&O zF^*_31txTv627#mmQfZYet&;CIpT0d-4SbBG;^W7U-;({w z!bYePgUf=QiK>B*+S=L*&i^O*vD@6*qGx8#{O$lk)jo5s*L#1iNNj3sOjqvefBI)` zP}Lv)nK;z{={(4q(XmYXV5`LwDp%hW2T5Ssu{6Xe`AD8vpdY58Xsm{alAt8&4wb^t zQc{$cVr!v==5I~g5ft4CpgKCB=D{kp@Z#7h20p&+xK2#EhpK7_P`B|=X}DZ!<E~$62Kfbwc4Fw`He-4g{Gtm_!Dz!x7Xk0-#CE2Gh+)H9%CefQ=~E7U)tYMCvY z?T|9Vg$ozZK-D4o97Mo~=nEYe2WAG0K)N&AUz81eXbM7XuT0dl$#x{}gNo=2G7Ah0 zQb6{#Lj46lVAq1^EkI%SK?oFTw+gPJSk$iCRxwWRhbiSj@z}I8judUE>G}9HJomSf5djSh2nsM$FK26i{FnjO z6*K`KkXmrXN&_S0ST0@iva%`G8-UOjjXK#UQ`=RFy-{&Xf<{u;H1}!7cYQ#!M?k~ zxCVb?D)rGNxD!dJv<*<9`hW`<}sUY{jJI3Kh21j&E|;Id3wzucFSlj{P>3&`?W zWh1y`;hBkz`*u@J3Q&%-2lm|rYHFn*eL-}+#xd@y5M9W)EhC|{qB^mDw0bfvWuxrd zVoZ_=qH@7bHAf(|36S`-#<(c}xJ@h>Ms&y6P{66XR>t?Tgd?G*+XVZ0^*ERt;`_7#^;YJr0 zf1$kM(xJ%7`?T6iV3=_}y27O64!eNBfZJ*_cT_*T%%BzsU`)c3;0)Ai>0DOhMvpgE zx4<+Qxr+zb3&x$&V^c2=>TqE2l9KmoYHFHCYkVS%Znm5)DQf;yHU+wtW)K&Bh9Wz> zF9*nyED9|L`|NqhfABP_#k`C@Xc9PF37wtKFu|b7MkW}z#6>p?Fg(lxL7DiG5nI)P zd1ls7H==5U<%haXI1HSG>B$$Q5QRw8z@emoOOp%$E!Yy^$tpl z%zH2|Q#Bo_RLO?1iGh#kE?cThhf=>8@SKT?!_RnEdu$gYy?&^)vOiEjMc}Him?=8NRDL*mni}74Jb+)mI%` zZ)~0tt>=P#oN($)1^JR8OZ zu1;<-WH0>$_r=HGaHF=Q;v^xMb@iZjdvbh)Ri!$jaJwTHnF2biG!Peqr;Y;cVm!F< zGpk2%|gir0G-++awO0L zI=EzlWAq-%YlLUY3vE4wiXehJ3P46R6M3@?8kH1mZF7e_58RQp6!ruBn1@_UoKz`Is*Xa=xnbvvT{1kKS5MI^F2Ah<7&Wzh!c6tc zAXRS#%_hz{&I(Y$zxiFwQI>Ae${HP8r8;%)@$`{CrQ!hh9rTLMzA-X2Hd)Re9`D zOA-q#dx4;k!(mpL0va#M$4Mra{sPrwDy%waHUfk|&w7qh;EB8-Uis53j&3^aX3?%G z0II=6k`=WeT-5-sgsw%+#hp7kIvNde9*Skj;1d~ndDUSPTQ4g0a1x*vF?XfeKD|an z+Udw<@4kgXVG!jn2$aTl_Ylc9Ad=FvgeOrWis3vqaS(ZvdwQNEL93wF#l%k)zqm4@%5kAm@lJ3<}D%8k3TS*_( zG1OynP?RH`Vo00@PxBmvVQ5gnH+CI|=w|JSU& z6p!seM+B&=nC6UN6j~uj66vKmJ5Z9hSUgUI6v?}xMw$kmucWEZ+gBf;ChS;Qb#CZR z9Lar%@CE~2P_SDAv>5EbZhdAKwl1Qv`Tw1v3WkX9Gs~UFfu3z`ZAc%( zn+vyt!o$OHg@|AY>BN9-mIx0#CLur7!!ucH18cXWZ z9q%vHyR+CWd4jwPs`$?V(PI{LTo*X;OT)v4F@X9-Ay%kC!ocyo^#<y#Hi>ZgR*3ma9 zp{DDeh{!I%KZESRKDu8B%FL#H`G;CcNODY|YXB3Q3}sR^sF)&hJlL;l!)~iceq@KM zg!k-V%r1}PUo3urBvC7qjlsdeG?GZ;BgjWVn38-8+n}BOwQv%;8M?mQf2CaI;hw2g zqKI?_Abl^0R_{a?iptdjkJhDmPj(U7iY=uwrLF};0~JIa8Myt zg1Y5a(FLTNXhNau9N0_ole0Cgh^mcJ5Ix<F0d(=nb@$Bp`kV6w*j36qHyH@^0*Tx^7Tv zI%yx+><(rYMOmKF+mCJ1em=$WsO}oZ>()&@%!{wW)c1ZG+&Ovc{deb`8rg<1s?TlT zz1qHie8lnP=KZ@0e_#8Xl=a>{(Z^38hcr8a3T98gDO0m75w}4+XQh9&)T~8EfKoDW z$`w6?t5}bj>|IL6)zijg$h(bQQc-b$-qUWZny$8r%92ZqYg&AK{Qg?9FxH`4TMgPL zv*xnOvWzg1F74`|ZHVf@)w$62FJuk}QtdDMa5^mx%+Ake!2Fb}W;{XqV9YahDz=OB zXvqt8`2K&FH!Ezy-$yXfo*r&C(o(e<`DCAD>+S*+W{| zHcXNGx8A@(+{2cb4DtATzg(Q0HtyAa9bWuZ@3sIrXIfrf9^fyIUz;G4katl-c@e(7 zU5yecZ}C{qa{#d^(&c2=q#qR(g&p#kUwT+uTTAPQqnt6*-O&)-nh130H4MdWKzarZ z0ET`-)xRI;nglg>h=8j^RYhIo{C^45`$NsSW$Yr&*#*pft(kds^4~R zi-)S9pdh{@W7z)~jFQkDARu z<{FeF-H?+)eVYO zFiSu|q=87DirpBfCw$#)|4yWx3%ct>&k+-=Sy@@(*Vns1JN9@EbU46!kWo@*0c8Xn zON3mp5||D&lcYsEkG(C0oQgIp26H$JX_k_N($dmd3E^#p3K%24^#L(<$z!7o^wT3} zaM6oGJ`VQwh;ScaA~HRpaS9K4QYCUDNx=AEfphr)JJY5yM^)m#tD&-QQ zszHu%6t#2>gm&rRPRQ*lKu8NRPfeJ~R86ajf)FNkMZnw#_jEUgHY$rMH!7B}pwQL< z&+On1kIDv;qQbItCJC$<3`ZS!n^bxCStW;>bKFQ5rWr&u+QAvXt6A&o>tKA73f=M! zUHuD=J&?p{4R3c9&DIL<+YH(^GIK&(2GYTRjFNV6)qdYXV*4j|r2>c_@j3qP8I*3z zf5-dr$5_Fh2CZm55@7Mb9TjxzXm%uRS=~c@OwR<}NQ*%=q-y><{Wd7nb1}rYDkSTj zs&)neYuoKj&;b=qh3*qA7<|}l0U%1!Bj-_G zPC*bO%RufIh6qk)rFFLzGojxKI&}E4W=Bww?0x_UQ792#+vA7IG9G%k3VvRm@k0JP zFLPKx_Ii5s2J-9iONUB^8=rrd68=6ef*d`42bKZuareLBrDnp{9{^M7!u1n*Q@}ZPuG>h{tAo6cCZ~SPvPKuY-Bz0H-s$jd7|}65jlq7_&8Jqj&yr8RR+;AuTXa zcwgP!I8a@;p#lEPzBon6v&2qxos2Av*KVrQM`$e;Qq*-`PeGQmhs#)PvN?RPuLf?% zYK~ENOA2~?zOa_9~kBEL_YotsOCyriqO^)ccL zZu<+^$~jJbyZw6@uMw{clmL7sr&R`BgLBX;m<_b89osm(-ZKPxAdR_5pQ@mEw{C1-kevhzbv?`)|a8S@D6I8-!Y2p$RE!*!wpN(t= zq_F@GdpethRYwbysA)j<;Sky3YT>G~>-Yz5Q#Us^5S^u^0e2#YCkSj8!X9eM61M9k zglq?Ry0KUl*q+H8W>24fA^RW>fX{iX4;0(!Wo2cEvjJ|Cmyy3H_h5gc3e?UaKqjan zE2vc32;C5Kte#ua&C!B8DKV0a7yo(RvT2w*Zkwxvb#-+L{uV$5gf~y!Yq2mhi&%SK z!^h8`Ua{8`#4aQxG&5e7yn@a|cuF0B1g2aO%oq40nvEbf%af<;l-kcIXWNVZ-k*`L zp$|s|yeyFM?qhv0Qy@i8=Huf_8+z}kt*u?_X7A`IhyJMtJyjX7*quoHD^SyMNrWk* zbwAaYTCT$gEMXR4SLM9k3;+vVWy5=msXD31z=4y4H$zrTc#@y5h4yeGk8p61eLx~E zLIUF<{8j){s6i~a_89SZID?-rPY@z)kI)se-3J8PIU*ueXlg*>03a35AxEKMqz|?e zfO^`Hz{&u@ucfa=;?*@ybcJMp9x&*-RKe-GK99tVxxkoR1NV_*R4J@(ql7qfaS)L< zNAVXS!guJ7F@yf;gvF|Z{ng6Vt(9!gy>w*K(n#KW`cRM_Ie@_{QRJG z!-bRV1N`j`D{1j+ATH4RTR1c5zGH#vLh0B$#ydlkB`SX|$WZn3x+=QMcsLzis@=W4 z>d0fESzrIwQ91l|3v$u}meT1skJ< zv8VBEDKMezI)`%1P0!o6Z^Ixk&KS53vY9SeDKk*oE*?j|_hRROOQ9(-3$nLvU^iQw zbu{yO&7)^NB26bqbcd7<5+UcG(uk#0^Q%ZmNWjX4^V%5|6cxq%D$o19slB=;w7rm1 z{)NKczg(RD_Y40w22uZBoPRIQzj`9@ZyWx%4gcGQ|8)}gfA80S@7Mnq_v^taN9tak V>r$!LA>%+vipf395`Fsee*n0TV{`xj literal 0 HcmV?d00001 diff --git a/ui-tests/local_snapshots/ui.test.ts/environment-console.png b/ui-tests/local_snapshots/ui.test.ts/environment-console.png new file mode 100644 index 0000000000000000000000000000000000000000..d517fcfa9e28330ba9a7dcc185747dffccb7a871 GIT binary patch literal 108741 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 o4~*f1)_wAOHXW literal 0 HcmV?d00001 diff --git a/ui-tests/tests/ui.test.ts-snapshots/environment-dialog-linux.png b/ui-tests/local_snapshots/ui.test.ts/environment-dialog.png similarity index 100% rename from ui-tests/tests/ui.test.ts-snapshots/environment-dialog-linux.png rename to ui-tests/local_snapshots/ui.test.ts/environment-dialog.png diff --git a/ui-tests/local_snapshots/ui.test.ts/environment-list.png b/ui-tests/local_snapshots/ui.test.ts/environment-list.png new file mode 100644 index 0000000000000000000000000000000000000000..966517a669e7997c91cfca22ca57c5296a4179fb GIT binary patch literal 29532 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 O1+%BCpUXO@geCxh6S^+| literal 0 HcmV?d00001 diff --git a/ui-tests/local_snapshots/ui.test.ts/environment-removed.png b/ui-tests/local_snapshots/ui.test.ts/environment-removed.png new file mode 100644 index 0000000000000000000000000000000000000000..185a85454b63ea315abc231d1bb533cde722a384 GIT binary patch literal 24456 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 literal 0 HcmV?d00001 diff --git a/ui-tests/local_snapshots/ui.test.ts/environments-page.png b/ui-tests/local_snapshots/ui.test.ts/environments-page.png new file mode 100644 index 0000000000000000000000000000000000000000..185a85454b63ea315abc231d1bb533cde722a384 GIT binary patch literal 24456 zcmeIa1yGfL*DkzK5CcIPl~7CsNhPEdP!JH5?%D#<-D!X{B1ngdf`ByAu#wtGcf+O; z>25gd_W$TJ?>FB&bLO0R=bLZlVMc+?-go?dE3S2|Yu&z&WyDXPJa-a>LY;mnAtr}H z5x|c}T8|%tZ!K;^O7IQOMowG=mC;N)gF;nP)flWIrBN?X_muBhaMyD03D&uecmo8n(R!jH!^Chu7GBzd>#i`F; zSyeSpPfuT1TufyjC-&#-lcx#`)!6tr$CYc>nD@v@|MkUWprNS=$B8^y!ua>gdi6Sr z;_o|ZDNufY&O(7^_0q)q^QR)N%U7;g?W`G*k&~Y)xlusC!^4xRoEa1oqh4OmM24rM zqCz9QzeYYhJZ!r#7)5qPlEVJozb`26j-B5P#nh46S@mAUqMKs(?<2=D?#YPDwDuFD z9?>kZw;HLqCn92RwYRlgnIV&{Pa^2K-)b;Ndd=b>o0aan`!g=F`0^Pn**{klG9W4^ z_qGxvu(ZB@^G)~LZF9V5-_#yTN>&aH(S3ZyS5fdJi_4^4)NH3j*iHe4GqT(@saR9kZ*Oo0Wq@@`J#0+v)9Q-}SOB*MBMQ?eD{4{@Dz z2M4Kt%@NQ2r^kPoXnikqCM{`-o)NN7BVeViw4b>?rxhr^xr|S+Ucnx)r!<{!IaYmQ z*yGU6xclpmNDlPLk~{z9h;u_FJU7+y-dj)B_ikj=Q?wK9M{WxQaYpODTSZ%8;8}ML=!ji|`2jRwQfR@q+S zeX*5V9**-m#zI*-&0jq)U%Q6pj#-TC_Wg5QxzY)K6n>U=nUC4JLO`?`yMx<;^HM~R zyzA7=QK3nWBgUfptTf7OI=Ip^yBY6#)3~dypN~u%ci)*w)+luhxhU%W_?xjJ3LIej zXJW8~goI9Smaf8Al{TXUsR-6=+Zj2@2-YTfS;0va_lY{v?yst%ckiNJ9y_hKI9&Es zHP@T`n#{=5)PwQbz_aW+sID|+tSPr>{nl%by=6kXU!5O34iC=$au}^7P)b+x(xo9f zcgqLXcDY;Kf|Qq&6f!iTj5?C^529ll*tj8U#d-+!$; zkb7)**v@jE@quqU&At8iMjp~alQyn#_y6Ua6Sb4Vs65rtUbaXV*_tnX#2Q1Z8m~s> z@e*-gXLZ}RG3?Wvs6mW}@HN@^Ps*8ELHa*_{FuXG5(*1>_0VXpIr8)88y1F2xbR;t zFE7&yIKJ`mIsW$T+uj`gQ{RlcK7wP%3OKz*{Cn-^lX%Cm6Kda#3GTvbZ%u^C@;WYE zh~sxivYly{(Wk#->!aLZpr=6C*6UOD^FdmrkEt8&%nx>{EQiUW#65$}TZGW04 z(;Rz8vtu-~8CO8fOA`Bm!dHH5ka zY7#h^_V_b_Zj+biLJT=>+;7fI(PDRFjxqpbkEl zqLhA4K3V3onD1#12aE^uH9NupGII<><&| z*uzU)5RCL@tF&Z$KJ?bpY+S(fB6F74*NSJIN2}6olXj=xnPI1Cx}tUI_bDIv&g%Ck zR%N?!pBt#T)Qi#fY!F?1+HcLymTx{(|C+(Qt}Rgj#3Jdu=5S7B>{@d({dHjfPA44)>;oXTUCWmH)BZ1)X&D0{dGs#hSGI z_5lQ^s4N!-`B43NMpY9(Li-@vy1TpIGVZ)Su+QMSbdTO?f;8D1?PUaS=uB6SAieZp za0NXrjJj2#b*OxoXwjNLNhvmtuB|Z4ujUK6Z zUb;E#vbTvjoGhA-x9MjS5{lt{FZ&6;b;l{}Lq#KkTrqF&W?RQ|Pi_WaICmue#) z;+IEGqE0)oHM%A7R|=!5N?4N2ThP0Dv>F0Ff@4q1)$kUE%VM(8Sk9+)XRgY``lO{X zgM&^W>#IBz`u1&Xu^RPd|C$$RCg1mmDe?#zT;F_uNyvXw3Rig>qvbUD&a{Vm-Q@D` zm}||?6wu0qyh@oQn;--C8W(;D_Xt;r*q?l+R+&f|ZvNAjY*CCjI9~l))A;D_d6GyY>@EOt-sT3@Ah+$a6!pRWq6dGt z*--I2WXayYzff#HUtj99Dj_Xx`_-cJ3u%Je#@S$jmE(|5M_!T$U4Y%3=}7L#MvG(J z5nC(IxPOmHJ)dQLw#Q*dxqJ^dew*94(}xYS_x4HRgSJ#f=7o|)A#T%N6jRT1yvxF< z@Zol_d=xC^$9pf2(ehfNj>lZOzeyJ2||M|i)GSLoHZO`=PQyP#r*8aWY8?O)&2g0fQUh8 zFod9{wwBXn!?f6L_5tjtN}=UNr8G)U;e)N0g!GOTGb*C5iS^;yzp57m-BizCTE;Sv z)6&jGl8-4dy?J=oj~sAmvXX<5V!9e-6+2+r3gd5j+%YK%DP*vghAr`ev_h_taCE(F zm95d&3`)Iq4Ub_A#udKG6v`N+|vW66!Wq}id z&5NDk2KX32%lCF91}rekWBzQMPAgB<3d|olI`Y~~H{0R6ra+3QRJSO* zpKH+M?hZs9Vl9{X+peyz z$BBuX6*c9W5`+_c$*+yg&o@D;I}0wQl=hBEK51lh^m}KD{B{rKpayW&1(Hk?d+Y%$ zI_LZm0ki&F_3xOmE0YaYc6O6n%i}@aRsTRhzK1e0Nq`dIVq)7rOXb268Z^f~?90(F zS}fnS9>kd!a5=9%W4v@Jip!ArwsGeOoaFN5%XjJHKUjP&SuBqMY?7=GU_~E-fGg~> zLZ+5rkG|PpVF)F&($cWYA}M5L$dXa~4y>zFP2+<_HjUA@{UN4D)CQhk?K4cU0$_+O zx4`UkkB*Lh)hdhb?Ny0)+fYT2W9tXeTtNd%OLoluhWZCPJf%|=wnSByd0!gLHGg?D z8E^@@Y*d>U}lDQpxjOY*`;E(tBUj7^?V1o)y zW;eQNisjlt9p$Cn0?{euD_D_Stx(PZOQjzE0(!?0ykgs#$~PB9fA)W49>)eFAh8;Y z<?VkQ5I0ZjH-vkI#f&VCR-L`|>|GlUIrPA~XTH@A;=_cXmgBxGqc&9N(zVHa-Q z3WEezEC{NN>ugU0$1+n;*#sKX)aNe z4W|$8NS5W#*Df%pbK6<_u~9ga*@k8CkOnVzggr{pD!cQNki-BICW~s$tN^Y z`DW_pZW~vFIXA+Y7LIR5-!iI%3*MeDz|js&Z`d_8Wp|u9efl%p3v6?om9RlB)6Gbe0_hG?om;1q7TmNzZ{*NS0Jb4>Nil0jg4(V2r}x) zpo1t#t}RSALA zafB}-CZ(6ab75hju%rZ?t#X`%q=h{m2XH5MNciei@47mPWNI!&jcho-YG9Z?!tCGSwIXpA*+ zRc1eKc8+^4B>8*1-SKDqrIa0IEgFj}G2Vi6G#kv*-xDuySl_nDvip$h>4|#r^5qF) z;;EVBgsJk~1@!jHWB|S3xtOL0VA_t;aSk~*FXcvszI^%etdJ`&HJjE%i|}E!UN*1Y zbY7on>E22MpG^7N@;N|dS+L*vW&^bl32SXy1jTnZ=2f$F?!~v1z5g797fC07b*OHB z1GDQ-NJzN4-lNTBKc|A+pFh=2>)3Uk+}VT}s*ikK1eVc{FMn%XYiK`sexV@K#5^c& z7+hK!>;@?mk+Qe#<9#Sb_^@c--<$S^Q)vgHLnC0X!r6?HrHu`P(Mm6wvYwpK4lXI! zGmFm<{mIUsKUD!HSP?JiVhL#^yx~Se!KN5`aM<)W-8NfuGXL9&G(qMCzSJ zn8c}w%A(sl!E%C$GW%XNQ!i$D$0Yo~E?1jG4oo2XU}Jmz$9*~FD>dldd7G?ibXewV zrqG8XD{0`&j!sT|(Z_jAd*49O%~#o1illc4V^aVf^oNS=Z0GyCjAHAKoj$h&kZkC& zpqrc93}m6qvW;`A(=F3*tC$aWsP2FN{ykR6EgC^ykak(I3z(=B0EylUdElj2+1c4~ znpm5+2|c%O0tY0mPOl7=DO6Tj&)OIv*ga8#V7&OxX4b{&ZY~Vj{%n12Ki@w(KYzO7 zgXnAPG7lgDd;$V&&keAq?+J)fUj~m86T|-`fQDi<5?n|=P3fkFhKA#66OT=-%SArE zsOoAlEM{WjX|cm%Gx$GXc_OHEOLrGaY=3p0U}IxjDBIM^x4<=nJwQe5y3uDS(sdhH zjXBJgzGPPlEk}<)mi!3u6jFxuRO4Cug~5mL2O2)>r{39{5+|&Gb){j!zu;Q?>~ZN( zoI@JBA|MdUGwk>h^4{YjYkhJ5?-`mU)>})u#I(E>X_@7czyv@UR%wt+diLx?K!9xJ zTVsz%?xHN$tH0nVgUkT9&~<9Q!uDjxGIZ`r+-=G4Kqi#yIXF5xS^~Th5fO3Ro{Y$4S%o_4J@BGXnp0P?_vRUq!H(YZ2%fhwN(z8RXWp)(VajbpR=y*1MEfHI%f5e$GZ~ z0rJ|$9Uh2xBs~I{S<}-Kfv_}*;v_eeGaA2{^c+8N;)6j`G|#&0Z$9kP)^Q@Dr!{_* za6T`6)LZub~oPsX-bjR6b-R0vve)91OcJ}_DYK3-^S(3vS!aSeysPc3biccjT zYDgaxC49cd41n7J0&?j_zX@#f>l9s+=l=e_YQE`NhiZYmHtV1e^YdYX+iW4O&!a-N<*FfWPV+8Kk~C~)BE-Z7vW1A*lUhH7~1 z*Dpx`oA9x=^b__rS$Z`mmAd8r3KZ3E#*{)rLI~|qT~osW6b4jFkQS4GWtNWR zT~3Pg|D8A~*s5NWOhY{d)jTy6!w6o!6f95)dt&_!qe}zV-~%ZVIe?y?9)gL%;GQ3G z1p5W6ZL(_EhQuK@$YN7iGZdZZp@A1+NREv#{DF^jiw2E3a#wkmj54hi1bQ z>a2uA^4$%Omuc6M?ya(y+VCuB{tD|_EM1jJ%AJ1z4I+pUrrhTtPFn>C+i$Pvn{vl= zY&q|4E=~jXPZIMblaApIsE>OLvP3(oQ8Lt2QGrcsR63rlg`zg=og zFU?9LH2K}u%~f=_ORA@2Ye$iw>ebC(M`Ce=;rK*2$;U<6Xeyn5b(4y?_5d|G(dRBI z?ZWCk>&v+UMinfy;{$;XSx+jpmvK;|2=Dyo0X%a<_O6#ZU*{qhje;^yb@JnFB|8;gkpPSp&UXuv+Qdf>(75pNiLs%(*LnpPg zw1OzO1+}%cA#A+Ubuzf8?rf0DSB1~m$LG9uo!@@$J*;pZ)ZWS#eo(X;M5^A-EuK=) z269K^5tUw8{ob9=oZAN4)QK988YkQBsFLbN2j5H4jY^2oONxjz=mMumh5^0TY>ONsx7Q6#yFR6MBRCPm`{w42+|R zA(ssn*yye8?IFv!T)kXP5~dEBtdLL$8KVme zGVg9Eo-7smb2~LZ=Gjk3JdwYA74M;>G`xC5u6CN=<3Ip#lcS4v!u@VbHoVDMxySQk z<_4|d5hHBCv3)a_)cjW`Nlfgd$S`@Pt;UcBlVWPvxS_T-PQW4Yj}4H9#9YGNL}_Yj z8nxvR=mINM0 zOkF!}^^X>y307JcY{5lW`N5wH7BeRf#Jm3IfN}v$|82YdzrU^{cmLRRh@Ldw-+PhZ zNJ9Nxm`^nFsQ;gzW=gJ?^30#W_{6@XEGzATwbWVfkZHHSx`aBji)OvaBeDw$DU17g z_jF`Fy#Kp8Oe=HtC6~4&b`NI?NST5-Pi+xZ)!7~Y@^_K^@;WQn))SfxY)&4%zi>I_ zUV<+4e3CT0JpZo!r#eZ79kV+$O_k}Sw5Mem?>rez7>p_%I&BaW54%n=?CTevo{hkrH^~N$e84`7O5**!#~rd<8?TkKE_U|Hvh*QtiPKV zpuef9=H1MJR=V88*CA@JF5{+r{?dQnMvk2Np(+cNjF=kI%D>K`k^dO6j%{K>HL~C<{5665@k#7weyGV{82){05>jRa*BPT4GIrVi z{o-{wf8mhx5eJ*%e+`R5HRYc7k$WLuC)Zp){#`t=|2+$n2+`#n(SDiMT97TPtNgjw zl47#ON~uV}~C ztod*(#!Y!uQR#`|nZ=i-kN>WQL%>Lh>lQ{=k$nvvA7+c8 zFJ3pD5QUqwI4rIoT&Jd;M8SppVE#^NB-a=Eg_oJxUUO0yhHl(Wv zUs=uS*8j3ue;_?;y&Ub;BAW43MT@5*u8FN%x2@aqMXF<4UMjUX>(!;Xm0a4>Qcr)> z8QZ4JK6)9o>s!#vq+Rbd#MWc@BQr$$@G1ox4>@+~*3+6rWk>g#A{K2Dl(sCF&5qJ1 z^_Oxe(?O4SMz~jGaXJmz^eL0>TT=Mz^)9WYsnp4gp^oO;s`N&)*!_Fu)tCDt538;m z{t(Pl-gAyKDT6xHW+BS=2v;okUxq+{{9DDzPHA`E@-_kk+0 zIO_$JZR&VnaB`G^Vj1e0QkTD=;g~fMWA2KIi${Kf&*V@-h z>(#8wsJK~2{&2%<`?GjUKQ496^nIaN+@q+iOdnk{8*AVvQTm}MC@0vNLnO=)I9jF6 z`0Vlbm+LK^m6%Vba(gr{-1%N_vZ>7Yz7uEm(|Xle-=XpAFd?>%aK{CK-{4BAPtwvZeGKOI;Xtx37!5{TAjQe%QVoPHu9sw;B!>=#u1cKOx!gg z{w7}^v1W1AUdNGhiFd+3n>CT`8BXilC-{!5y`W5^6Zg*?42y}XetJF>Bh(Th+o|JP zfSPi3X)|&&uYYv9Jz9C4k@d%e_n7m_V_$7E#+%A*mcflf<{jPXOx|5yOK{+G7jk6^ zahYPU+S?mtBQ5j?n~YHA~`ZqS`FE}wbEobhVg z1L=>a`Im-UQ#;ufM}JPu%tYG}Ho~pHGZROvlwI?CLf4REEUOUTAV?Zg?UhCqt;qbm z&(u<=zB0P(Nsvx+m+6v8bhrHsT~SzFWx5C9E9LQYnOSs4rywlPiGtalQMDI=+QHcN zq97h`tLMbuBv*zGOnR-KJ)?t^DaG%&2~e_Y(T zIu(fbj{Wn@iP!<_f&`z>_Z8VBU84G2FGn+w++STA(w~uQiK%|dk4b1Q_Uixq>=d(m z3-2)<^RI`iH!Or6`)UQcULV(=8W3I;8nBR)?0Kpl-SAYV=(xe9Rr9u@kfHc(x3ZJ| zwSVAF2!G{w{}ZpUmpjrzNHV4{=y*7Qqk{ycxPML~ZMm)6k=G}MGUkNHu?t*Qb0mS& zPsJF!!v>R$DA@!wh{}%_HO@3V1Za{O@eY1KiRiW&PiL#L1ArhBd|v*F&V ze6BM)y-rPOPJH3FWzS-kT5DpsGPK;aGZpy0*|R(|{)^rm@MGwvzG5mc$CO8BlaFp2 z;1uh_EJs7~-DywBKAkWBs{UafuD=DV=U5oXaDwW*IO`S8uXbnk$i5QoZtVo*VJpe9 z2S#T~8pb9K^d$T_3!_gDY8=SmRb{9y+4C$bhH zzL1GUa}ZhDaBOX>5GkGCbG;Qk?694+FSdbRA#f~N(OGSmX&~0{!Rj^f4HeUx=ufAp z^dAc!nHBzM{Y}={rMWhD-;srFP@Oo2uJM?_PzuW-KWRhx>T>5JE@B-mn!Y@G7M~t} z>0!d@M3$o7+1kHu6vAIyKlJ3X%AA0Wtm;)eww8B=Pr3K(-g%gp{-jyF$t=spU-eap z@@#i1kvZ$t0|!R$850q@SrRR2ofVIkRo4jX#$WOwneG^o$@UEVokKdYo5NK1R*kRF z;BI;fH`mw*)xSj-6>(T~@j)@lFS|~_Ys2Sjqs$Up_I85CV(GOg6P^zD_#s~B2}{H8 zFW<$5m#xav9PVGb(cspub~vqw+$O}|$rTnZXX8F2tuhQ5+pv1j)0jBB-3-qCm{QG> zHS1pj8fP+<4HjR<{Ky)ZFDPvL@GnFnu>qx}eF+`(2&}C++uGXj%j{CJ(yqu|-d~nO zftIzfuuz9PhJ&ao4J<6Zwz3#M6)5Z#Q|&J&il{ zx3H1B{5jv4ljvw}Ut`vVp30235+PivpP3DE`(`$;2u6scMEzL|RvPc;Kb}^aa@$y# zk-QBh+g{tm7a7-hn8nonhClQ*QF zUG0zXc;YSeLVkl}Q1dc^z6QGa&~yWeJZPQK;YFV2n4o~b(n>Kss<^0#&+ce*R>HrR zs9sJ~2>M*GnNA%U4yHh%4N8(rumd^z4O9I1 zjSeUpN=gFH%uI{&znlakqX+Ys!J9ZVsTbY!4IzM?4uN@4$+ zkLH*^SHwur*wmDMcWR)OrQ+{vHIaWe^1pYN|IISQhXVcAGyY$_l8FMSn+PpuU!eCX z?G=H&&;+Xii2@>>0=73JEA5ikWlTcg_K*kk3td4C$dhNG1awmi56)Hoy?#CJo&628iJ&8X4bjd3^Lnzx z7=<*{O?p^^X!*uexb>=!zj*P&T$K(qHurUOE^rw%TB?-;jR{?VZD{3Qi0H`yelviE zV=TN&Q_L^uMIp|8f4zrAJwG6bj(??HifyQKhsq%(6APUSuCKeREy8q}UC@;}neMLY zruB5AFOqtD+f)x($e?;qYJ+1Fb)iXcIh3n0FA`o*;)Fh)aiBFJ-q& zQkEc)f3%=_Ms$h5vF13f8X!t1xE7!@pXw^hev-J6$65iKqywD+)r><}4;leSb`TdP z!}dW_h@@nQxMF!63nuooIhGHM;{|lmK&i)u2!5e0Ee&lJqk;UJ2_6SUiKWoV1GT6G zG!WtAc7wFw8Hirs7zur2mTr|wmJS}MSSCTaa*2=ctaTwz(y$41w7wrD5kM5%$f5fxaDPq00KMop9(&^qM09t;K;qnysVy8tFZk;^59pN; z&1IIZD2PHD&Rdi|uhILV80U9VSXdb8r9z9Dt^uMPC%*E;N-jHF3*C0eK`uuowq@SX z#97;QnE={Xi16i2`^~jLp5Y3}UC;zwS?iERG^ML89tWZR)NBSn+haEN4?+I_BtwHQ z87;WCR0T0`35b2_I=kX7fEbzOJ2yaKX9!HC!2VhXqPm8rFrtWu{u)0vKcz=+Y2-V! zaY7K)AJCTW&>4-9E2wmCp-6%*Y&JB{b~ff4UY#JP;WniKp(!4sW`x73#*5mY6;;|r zBs>)rcR^M-$9n+%p0Q3j_O!)f#`}*x;Cmv|A3*aXB0f-!8LD`|=n1|1mhQ*IL?@7g zAR4q&)T|R=F1G#V(EUW5TAaZx478RUIu$4g(2<<_CjkyM#`1NvbvZ(l6Le(0)LM?u zq2s?)L#@qjF zxq7RFy!PRvHYK>^1b0a|K8>LBEu^gk8}>TPWfw+hddpmRLa#p3tMJ5Q(JJk2vzfNv zmKpjWN?2M}7N@pnHe4FTteo+5OQ5caZ*sC|+@P>++;F2WIttvU4Ya_G23#l*sg6S+ zww>(`glQ<={8{LogWM_6Wpg1aJTx}85dvoz9{y{uR^S6353&nt7UZ+-%lyc&g; z&*=r7K|ndGG7Q~nBq{(~pEJl~Hv|@F{!mkXXl_$lcV&6`JK!x4*R4WJ_J|H=)D~ol zURbH5={NGVmWk7G5nu#f>5q$1B_$;wv7&ttMEm0f!712KzYb?;ML-u6k>0`4KSJPR z(JT(5{0nzCA*QCZ5z!#T<7LpkbE0dB5Nndy zo}Gp+Af1OUB`H($+tARyY&0S4)Mpq%02Lf^g;T$Vc_Gi$2GN~j@_3K*U7<$}=Jf)+ znnSk|UtHNAl;g-O6XZk@7#ai301?1)L_6ZLQ1luUNspm710uh7AA%6U-N3+kP>q18 zpnAWVDCc7(+#bWsj_0`UJS;sDvZ0M;gLB)=HXGnRa^wi;Gx{EtgflXxm`}K?!;#=M z)U)4p+R*J#DSHG<^7IiTZQD0 z7eM89+oYS_sQoew)~SN2L&L$!Ijd!!Z*rsP(z+eXvm!xv2;6ZS4Rg7-1^sI(N2^}X zbf?FlRYB)+*L&e7bQVCka6$Ae=3s{z;$%?5Y-dUp_~BgMBT&d$44~L=UzhR_1g$L% zXhy8l$Xwd_P%uFLm9W{9XFP@H)=mR8#( zJD~amd42~+lGrZ~G#Xt5f)*4gTJ&HoWc1<4v!hUnq_1h$f$22yFP0u<(mYo;H5^&r z)z!6p2)O|PClJ4oVLxn+LW*|e#v)D@_VtT$COx7}g--4i*aZ^fh-lb7LDR!u{L^3> zjH{165n>?<=0v_{3qemDWT=SX5}CI^vLHl3Z{3NVV*RTnCQOWP6L!rEaQ9bpWcyuo z%opd4u)3=&E7sDzmU~-P5+_XL;9SQ&Ap%ct3!IdKcHt%Qpb5xeI-o{CG#wxi;ItYO zOE&Zy)XE$bau{UcS>1w`V~z1QxqMSqY))rOW9LE$WVLZnY}tQZ1l2l7;y}ycefm72 z#YTa|qZ%^I_kgop$P5BH25C%#d>hnVF!qP}P)rrxIs4}P%pw731rdoYh^!4F?@k)r znA@Cd>INTI%QyW24PI3k6a$+HA6p z8~>0(OB_EIfk}umFW2Do!NI}y&aCJ!!rp3MawEV<9mSpB)$WV=C3Zgl0wT94VGkjI zq&BWhWg#w!O$IN+*eanV{-)iSf8RN+>!fF&DI%3XWn%!2>dPjr4|x{ zewqZG(8hSd7!si^R9aWG{wA)I4LgJBO%9LSDD2aeA`N*_jvM~D*|X=q_^51ApUQDi z2A2X8T}Gfo1LHD)tQE`eKwQQC6NkZcIJy;d@C}(7Ve=lHeg`*0$fW5Al0<1!Q`4ke zh25Q<_Hs8DRDXd*OLH7Qa)+QIvic<=UGMO6;E^$Jba{g*Ku1Kq3cfgzQL^yj*5;8a zcF_AJL-G$}RwiEADih5KfAi)pOf!Ij0vU@y{(;)#r8vFQD>x=-Lw^zNQrOnMxlyuM zOwhF}_US!^G3w{^H1^ZO(8xP>H@tOuk4*q-WrKninfC*5O3J{n=r~eBn!=^331f$V z4UfEujFiyOi0#mZ?w?-_EI6L~;l4xoP4!wZXhb}hu^5QWn<1t z;MRO!E@1`f!aQ6Nk{A)t0_vaU1Yuc7BHN1|hYfHUoSi&w%w?T-3>*R)*XH^{LHve@ z9AJdh2sSKfK=I3CJZPXM-y6fjw#=wg8Q9&tFLrXwJ*GR*-J@x7bGXx`AL0+)X0yYv z(`%U0J4QtFCNsz4bEo0!=SK-SErtaEHq{Gm4!%rCNa(PsiCc<&BY(<~fq|jXAh(0Y z4wUxqVWCVxM*lGM>L@IZ+vX4!oXWf<;`Sc))ax%PYzihaK9LRqQn;&tim`P){x&_wow5t`N7^A;dzzKcS}8bIC#O4`@b z%@=vjiW*GEozqD+yBU?=rDKn?qeMwQk^kv{XlxP1DLEP0n2J)a!6Txo5s)S^f}9F6 zBusb2(u;6~Dt64l#vmpHyWkBX512{R1JzL&i|Sj5e^gt1zCIN9A-f@xWkkydN~MXN z;jM(jz1QHuI@u~JpsUCt;N7C~kU^2~?&m#-9pv>x%1SeSE0 zM38{jBznHFq{Cb&DIHxCfGIH;JvnjmWc>zBie^{4)cmnhsQi#E&^JM-888r4P!<7N zPlVbLQ5J$Zx0bu@vWV8M^>8YJSPT${ZT|)mfA%J|#TJNooH37PA7C(3n=Td*F^mQa zIZjcrR2bx1P1aKmyKQPhC19uSp1c5qr55GeS7AV`k$r)8yHKmo?gSlZ@}Tmy3&@U) z`YOcMUJzaqGM*f9ko!&Uv!u){wCPjS3o<&STTz*%D<=Upee^gyAUey54<$WTIv>`q zdCe7&ErgwMB!EK#2znn7=6hf6^+MqgsHLyM*#Op^<$QV^3gRh<>_{#Ehzf%bQM1$HB^urt&9tN@vtFnq!bckolq@eVC0vZ_M=tY5&4Idd%`*&q)U0wwY?* zP$wcs(o1CEv8l*VD##Lb*DFg$_<&Q5I)@F0uR}O zjTDBgVl2vMR5oD?IBlk+ktGJ82UVYSKL#)kixz_vNfHXha07WRKxrh5q#|=F;Gk!D z%xOV2X%)cpuA5v|;5*dhhz$D~>=@iHltHR9eYw|=ipXjM2i5d}hs!2?jG~*c<(~X} z(~I+dXJx!~j*7f{lUh~XKudm6BTOHyN)_?!m_NB)6#B-}++cwU2U~PId6T zttonBb){I!;038d23|^Cq_oD7lj&jY2M4MN35v$2ZszUJtxHCCuEwqk;%wL-563R9 zR>Q5MA&xA=%xX2vrHrMfW!!LGdT6+)FIEjMG?o-&Zk)RaqHPvb+y^o}J0_OiS)pF;Hp3$2hKOT%M6cyE(0*2H*m zk&cj<)~C3*m^e||#Y4+><0T{Ul_}b}mhR0Mc3lyHmAXr9ot+AfA{Ox3 zjzW+ke@sbXg0xEo8d)?HB&+XxY#KSRzb_h6V(@wM!VgP3P`HnSd@5+byd=G2b-_&N zaJxm^$;k;B+_dV^bf`ITE%poydIx}p)8S5Kjqbr9Y1z_YRQxTS3Qw4`Qw7}53o(NV z#LhvXvO;_rWgGolJ3SbBt2ZXRn}as|rbL7#3s5~4jtB9Nx!`uS2BDU+8ug;CO%~pt zsq_mY*;S=>j`+uXKAVhQobtt8l$r{gl*=k`B=1j>8;7V1Iu$U>eNlESJIBn!=qty&Avxc#(4p zS5Ornmhms3S`AM#2noRWR)!-GivvT3pf%=z%Kl46M$oTczaqH|Wq{S%e80sB?4 zd(i^SxB5;%UH$RCKcW!!`kaV?7>foP&I*XIS_rPHD&BX1Gb)6Go*d81%d3VV=<~7y z%VN6fv+eEO*$bts%{2V>rh_nDLf4#|xLQzN4!IQOa$OY^6>BJ!HAo?M835JA_8^#^ z4pNP~z|PM^&GPPU6JX|y5G40RRn@6=w+I-O!ZAPQu>h`SpVel5HsC@u9Mcnb*LATE z2peqq?{G7YF&u7*1Ny#_nwqKyI_r7XCi6vlJk;84Fxgf^w*{L7f4I>?@V$Yd>7Cik z;M3>1s{vlqgT`3}kPnBku`zM+;%T12GZtm*N&?#xq06fYhXU@KCAbhCXr3dUDBM9;7p^OhuH!r$kKiAv#*(A_M1)eCO z0mUkZQTrztr;%El?a6Esh>ngPt7py(fFTdTc#nha-$(mS$Pkbm@0?n-+trrMkd%wf z08Kqq)fAx5cLYRy$-HDf|7B25o8S@DPiBY_?^|x%xZ%feu=F|`5G%KA!MD`3G=GRe zKo;IZE(rJpL_8gQE#8q4CNG8!a2^M%3CqBdVPV{5oIGJm42F;HWB~cJ1;f?az0=|9 z=DzR{0A&1HuRe?^+kB|l$ER@Q#i@^KLu)=+3Q ziiY#4MDlds@V2_9!;l?p`&rN~`@*Ct68w?|2wP`6qsG5GyRuY8 zf_=m@M8U9KC$0xGp&YPsDll5{dNVB%U1B|~grpLf&gDc*3~)rC@WFEM6VNXjBs33R zLV1=~xxaot1X&8Zz=cwBSWnbd=7UXLXJZRSXbE^qz^Q>Am}dZC zIC3&>bgXqflh-2ijTLpTFq5n=)`G|bG% z$coup@gZJN7RTC8mZnQeNu9zaSk<0|TuN~W=}T{GY1C^zu1Fk(a`U=|gp@^Q?QO|e z`+lS4xJB3Grj7RY_Uo(%BNzv69vUziBN&1^H&3zUc|XWl;871MR$wiu>` zxtsu#jH0VDcV<3azj0&dZk_3(yWLc8Ml26wzbWukniSO31y1K~70)0MfeIqRn@YG8 z`W_9NM}Pr8WSPNpWDp;VJc!v!DJs(#!P zb@v=HqzmQbx4wMK(MrU95bhirG4z1w{eb7+eUHTfY~e8O{Ib;^QBHweJus7i>k{oa!3~`|E^{z!j&MiIUTm%xg}}!=bY>hKhQJJlKYp3iv2e6L4m<5E zcA$R_N%{vpb^vi8FTvOU6}I@F$>0A&S5-5_Q3up;3Hmp-dLLsag@PW@GY29B`=Cn2 z9RwT=Py7Z&|Kn?NnbYH7k9RuOMh_@S){*}rLkAg@9)H2l= zMGnTa@Pr|;3kOXvM;IU)zb3r>aPOBg=FZr3qQw~$0_%u7V4iafz;2N6-Y5w?im4sJ zEP62eDee}aWM^l`;kY!yd$_lXJU2yr&vorIcp;!a-QUR)=JEqA+-B7|z#DnT1GvW0 zwD*mX6fABU05xVU9Qz}r%B8hofKQhgKLQLgFPaSh0tpM8$?@lh*Fkl$GcJ(TP$;?xQijVpE+*B+o zXD&Sm@PS94AoJMc;59zL+%tUR+sp%M34wI7vM^l$6e+Gl{%6=&d^~c@yGjW=oyo-K zrr|>MfZ=_8s~ZlU`0*o>dR2Rs6cs5aCnsSrI|=%8mIaMPJT5>7>orB+wt~yY@=eEf zB-$7~d*%bYLJfelfxYOp2me~uXKsGxfbqPNfBu@C9Vk_T9E8MX-h8OxI?#DHZr%(W z8zV`Iotm1GVZ#ZAt*&z;VH8-r2U1c}nLcsw?zX`}4HYF#Ma8ZTdEL{eY^+ZmNY#H}VSxIT*c_yS8ncy~KNJq%iD8zwq&>cV?%YiF*i*r9R z|G2p)2IkATAX<>aNuI!6Lf^<*R+b6y$k<$NOAs6YHjIaO+qe055<#JOi69qS{kRhG z8;=4v6b$=Ti^R^H23CGXG|_o(7ULGo|`a~LU#N1Z4P)`0?i%UpHE^|+cu_R zENbBqK8yz?6Gc4L7^THv&ve=A8{Gd|uwuwah;1SPd~1vvLzA#Kac%rOZmX8`Ji?Q5 zz|#eg=LJBMSrF(KN~ktBpCqid<-o`VJOa#2j4i+;efT`yAwVJOc!jw~ermc3v z-p+Bri}TKY&Hbp2ac^sFJp*Hbdbe)hUSG>2PAxAN;x-?oAti;DeE>WiZEY>A{~ve! z`A$+&^7mr;`T6z2b7nFFJlEIPkq3-C0J=Zcam<$kCKW4_1vZg%2w!DN7D1kF7Z1Ep z$KkiT7RqXB=M3ZQlxQ6Wt-Ox+b}-~E4{z~62~ERgAWdr{y(n!~W`jI95w%1Qu*M1o za*-+=W&#Vb33(<)M!w>%ttBOqmlnwlC-`b_nIcB++sn?eUUq=YmeEC_hj|18^oe*MpC{Kpvn;|u?Z4F8FQ x|A~bEiG=@&g#U?z|A~bEiG=?jM8dg4)H+ET_JHh#6!;+O;e8pg3=y3d{|h0o+l2rC literal 0 HcmV?d00001 diff --git a/ui-tests/local_snapshots/ui.test.ts/login-page.png b/ui-tests/local_snapshots/ui.test.ts/login-page.png new file mode 100644 index 0000000000000000000000000000000000000000..17033c553a9262d6a850c34cb4c3c728f803240e GIT binary patch literal 29865 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

TGz4Yu5MTi#j{H7AuYY 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 Nymj|x_Ko|`{ukOl{IUQ5 literal 0 HcmV?d00001 diff --git a/ui-tests/local_snapshots/ui.test.ts/servers-dialog.png b/ui-tests/local_snapshots/ui.test.ts/servers-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..474517f381c2a0d84b500a582e933e4e6247cddf GIT binary patch literal 49850 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�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 rg8)Wf5 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 V>r$!LA>%+vipf395`Fsee*n0TV{`xj literal 0 HcmV?d00001 diff --git a/ui-tests/local_snapshots/ui.test.ts/user.png b/ui-tests/local_snapshots/ui.test.ts/user.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba2fe8aaf34794e55c8aa23878bffdbe2838508 GIT binary patch literal 20933 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
>Mp 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 Zp42UFLQ9MXSR+M=l(^iz?7I)2{vS!!eS-i1 literal 0 HcmV?d00001 diff --git a/ui-tests/package.json b/ui-tests/package.json index ed8db4c..ef3e8d4 100644 --- a/ui-tests/package.json +++ b/ui-tests/package.json @@ -4,7 +4,8 @@ "description": "tljh_repo2docker UI Tests", "private": true, "scripts": { - "test": "npx playwright test --workers 1", + "test:local": "CONFIG_FILE=local npx playwright test --workers 1", + "test:binderhub": "CONFIG_FILE=binderhub npx playwright test --workers 1", "test:update": "npx playwright test --update-snapshots", "test:debug": "PWDEBUG=1 npx playwright test --workers 1" }, diff --git a/ui-tests/playwright.config.js b/ui-tests/playwright.config.js index e0d50c6..05942d8 100644 --- a/ui-tests/playwright.config.js +++ b/ui-tests/playwright.config.js @@ -1,19 +1,25 @@ +const snapshotDir = `${process.env.CONFIG_FILE}_snapshots`; + +const configFile = `jupyterhub_config_${process.env.CONFIG_FILE}.py`; + module.exports = { timeout: 600000, reporter: [[process.env.CI ? 'dot' : 'list'], ['html']], + outputDir: `${process.env.CONFIG_FILE}-test-results`, use: { baseURL: 'http://localhost:8000', video: 'retain-on-failure', - trace: 'on-first-retry' + trace: 'retain-on-failure' }, - retries: 1, + retries: 0, expect: { toMatchSnapshot: { maxDiffPixelRatio: 0.001 } }, + snapshotPathTemplate: `{testDir}/${snapshotDir}/{testFileName}/{arg}{ext}`, webServer: { - command: 'python -m jupyterhub -f ../jupyterhub_config.py', + command: `python -m jupyterhub -f ./${configFile}`, url: 'http://localhost:8000', timeout: 120 * 1000, reuseExistingServer: true diff --git a/ui-tests/tests/ui.test.ts b/ui-tests/tests/ui.test.ts index d4fb46a..23ec77b 100644 --- a/ui-tests/tests/ui.test.ts +++ b/ui-tests/tests/ui.test.ts @@ -98,10 +98,9 @@ test.describe('tljh_repo2docker UI Tests', () => { .getByRole('button') .first() .click(); - await page.waitForSelector( - 'span:has-text("Successfully tagged python-env:HEAD")', - { timeout: 600000 } - ); + await page.waitForSelector('span:has-text("Successfully tagged")', { + timeout: 600000 + }); expect(await page.screenshot()).toMatchSnapshot('environment-console.png', { maxDiffPixelRatio: 0.05 }); @@ -143,7 +142,7 @@ test.describe('tljh_repo2docker UI Tests', () => { name: 'Create Server' }); await createServer.click(); - await expect(createServer).toHaveCount(0); + await expect(createServer).toHaveCount(0, { timeout: 20000 }); await page.waitForURL('**/servers'); await page.waitForTimeout(1000); diff --git a/ui-tests/tljh_repo2docker_binderhub.py b/ui-tests/tljh_repo2docker_binderhub.py new file mode 100644 index 0000000..e00e7ba --- /dev/null +++ b/ui-tests/tljh_repo2docker_binderhub.py @@ -0,0 +1,9 @@ +c.TljhRepo2Docker.db_url = "sqlite:///tljh_repo2docker.sqlite" + +c.TljhRepo2Docker.machine_profiles = [ + {"label": "Small", "cpu": 2, "memory": 2}, + {"label": "Medium", "cpu": 4, "memory": 4}, + {"label": "Large", "cpu": 8, "memory": 8}, +] + +c.TljhRepo2Docker.binderhub_url = "http://localhost:8585/services/binder/"