From 766c1242fd810ab91f2ea96ee2d6102cb5ff7d42 Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Mon, 31 Mar 2025 20:34:48 -0700 Subject: [PATCH 01/60] feature secret rotations v2 --- backend/e2e-test/mocks/queue.ts | 1 + backend/src/@types/fastify.d.ts | 2 + backend/src/@types/knex.d.ts | 52 +- ...50313124706_add-privilege-upgrade-field.ts | 1 + ...ion-is-platform-managed-credentials-col.ts | 19 + .../20250324142105_secret-rotation-v2.ts | 57 + ...50329002640_secrets-v2-unique-key-index.ts | 29 + backend/src/db/schemas/app-connections.ts | 3 +- backend/src/db/schemas/index.ts | 5 + backend/src/db/schemas/models.ts | 4 +- .../secret-rotation-v2-secret-mappings.ts | 23 + backend/src/db/schemas/secret-rotations-v2.ts | 38 + .../ee/routes/v1/secret-rotation-router.ts | 13 +- backend/src/ee/routes/v2/index.ts | 18 + .../v2/secret-rotation-v2-routers/index.ts | 14 + .../mssql-credentials-rotation-router.ts | 19 + .../postgres-credentials-rotation-router.ts | 19 + .../secret-rotation-v2-endpoints.ts | 429 ++++++ .../secret-rotation-v2-router.ts | 81 ++ .../ee/services/audit-log/audit-log-types.ts | 85 +- .../dynamic-secret/dynamic-secret-fns.ts | 3 +- .../src/ee/services/license/license-fns.ts | 2 +- .../src/ee/services/license/license-types.ts | 2 +- .../services/permission/project-permission.ts | 61 +- .../mssql-credentials/index.ts | 3 + .../mssql-credentials-rotation-constants.ts | 16 + .../mssql-credentials-rotation-schemas.ts | 41 + .../mssql-credentials-rotation-types.ts | 19 + .../postgres-credentials/index.ts | 3 + ...postgres-credentials-rotation-constants.ts | 16 + .../postgres-credentials-rotation-schemas.ts | 41 + .../postgres-credentials-rotation-types.ts | 19 + .../secret-rotation-v2-dal.ts | 465 +++++++ .../secret-rotation-v2-enums.ts | 9 + .../secret-rotation-v2-fns.ts | 222 +++ .../secret-rotation-v2-maps.ts | 12 + .../secret-rotation-v2-queue.ts | 193 +++ .../secret-rotation-v2-schemas.ts | 76 + .../secret-rotation-v2-service.ts | 1230 +++++++++++++++++ .../secret-rotation-v2-types.ts | 155 +++ .../secret-rotation-v2-union-schema.ts | 9 + .../shared/sql-credentials/index.ts | 2 + .../sql-credentials-rotation-fns.ts | 232 ++++ .../sql-credentials-rotation-schemas.ts | 39 + .../sql-credentials-rotation-types.ts | 14 + .../secret-rotation-service.ts | 21 +- backend/src/keystore/keystore.ts | 1 + backend/src/lib/api-docs/constants.ts | 96 +- backend/src/lib/config/env.ts | 2 + .../lib/knex/prependTableNameToFindFilter.ts | 2 +- backend/src/queue/queue-service.ts | 55 +- backend/src/server/lib/schemas.ts | 7 + backend/src/server/routes/index.ts | 37 +- backend/src/server/routes/sanitizedSchemas.ts | 4 +- .../app-connection-endpoints.ts | 22 +- .../app-connection-router.ts | 13 +- .../routes/v1/app-connection-routers/index.ts | 6 +- .../mssql-connection-router.ts | 18 + .../postgres-connection-router.ts | 18 + .../src/server/routes/v1/dashboard-router.ts | 333 ++++- backend/src/server/routes/v3/secret-router.ts | 10 +- .../app-connection/app-connection-enums.ts | 4 +- .../app-connection/app-connection-fns.ts | 111 +- .../app-connection/app-connection-maps.ts | 4 +- .../app-connection/app-connection-schemas.ts | 22 +- .../app-connection/app-connection-service.ts | 142 +- .../app-connection/app-connection-types.ts | 69 +- .../app-connection/aws/aws-connection-fns.ts | 2 +- .../aws/aws-connection-schemas.ts | 4 +- .../azure-app-configuration-connection-fns.ts | 2 +- .../azure-key-vault-connection-fns.ts | 2 +- .../databricks/databricks-connection-fns.ts | 2 +- .../databricks-connection-schemas.ts | 2 +- .../app-connection/gcp/gcp-connection-fns.ts | 2 +- .../gcp/gcp-connection-schemas.ts | 2 +- .../github/github-connection-fns.ts | 2 +- .../humanitec/humanitec-connection-enums.ts | 2 +- .../humanitec/humanitec-connection-fns.ts | 4 +- .../humanitec/humanitec-connection-schemas.ts | 8 +- .../services/app-connection/mssql/index.ts | 4 + .../mssql/mssql-connection-enums.ts | 3 + .../mssql/mssql-connection-fns.ts | 12 + .../mssql/mssql-connection-schemas.ts | 65 + .../mssql/mssql-connection-types.ts | 16 + .../services/app-connection/postgres/index.ts | 4 + .../postgres/postgres-connection-enums.ts | 3 + .../postgres/postgres-connection-fns.ts | 12 + .../postgres/postgres-connection-schemas.ts | 63 + .../postgres/postgres-connection-types.ts | 16 + .../app-connection/shared/sql/index.ts | 2 + .../shared/sql/sql-connection-fns.ts | 113 ++ .../shared/sql/sql-connection-schemas.ts | 12 + .../shared/sql/sql-connection-types.ts | 6 + .../services/secret-sync/secret-sync-dal.ts | 10 +- .../secret-sync/secret-sync-service.ts | 10 +- .../services/secret-sync/secret-sync-types.ts | 4 +- .../secret-v2-bridge/secret-v2-bridge-dal.ts | 49 +- .../secret-v2-bridge/secret-v2-bridge-fns.ts | 5 +- .../secret-v2-bridge-service.ts | 243 ++-- .../secret-v2-bridge-types.ts | 2 +- backend/src/services/secret/secret-types.ts | 2 +- backend/src/services/smtp/smtp-service.ts | 3 +- .../templates/secretRotationFailed.handlebars | 31 + .../app-connections/mssql/available.mdx | 4 + .../app-connections/mssql/create.mdx | 4 + .../app-connections/mssql/delete.mdx | 4 + .../app-connections/mssql/get-by-id.mdx | 4 + .../app-connections/mssql/get-by-name.mdx | 4 + .../endpoints/app-connections/mssql/list.mdx | 4 + .../app-connections/mssql/update.mdx | 4 + .../app-connections/postgres/available.mdx | 4 + .../app-connections/postgres/create.mdx | 4 + .../app-connections/postgres/delete.mdx | 4 + .../app-connections/postgres/get-by-id.mdx | 4 + .../app-connections/postgres/get-by-name.mdx | 4 + .../app-connections/postgres/list.mdx | 4 + .../app-connections/postgres/update.mdx | 4 + .../endpoints/secret-rotations/list.mdx | 4 + .../mssql-credentials/create.mdx | 4 + .../mssql-credentials/delete.mdx | 4 + .../mssql-credentials/get-by-id.mdx | 4 + .../mssql-credentials/get-by-name.mdx | 4 + .../get-generated-credentials-by-id.mdx | 4 + .../mssql-credentials/list.mdx | 4 + .../mssql-credentials/rotate-secrets.mdx | 4 + .../mssql-credentials/update.mdx | 4 + .../endpoints/secret-rotations/options.mdx | 4 + .../postgres-credentials/create.mdx | 4 + .../postgres-credentials/delete.mdx | 4 + .../postgres-credentials/get-by-id.mdx | 4 + .../postgres-credentials/get-by-name.mdx | 4 + .../get-generated-credentials-by-id.mdx | 4 + .../postgres-credentials/list.mdx | 4 + .../postgres-credentials/rotate-secrets.mdx | 4 + .../postgres-credentials/update.mdx | 4 + docs/mint.json | 57 + frontend/public/images/integrations/MsSql.png | Bin 0 -> 13199 bytes frontend/public/images/integrations/MySql.png | Bin 0 -> 13007 bytes .../public/images/integrations/Postgres.png | Bin 0 -> 69342 bytes .../public/images/integrations/SendGrid.png | Bin 0 -> 4708 bytes .../secret-rotations-v2-location.png | Bin 0 -> 701711 bytes .../CreateSecretRotationV2Modal.tsx | 79 ++ .../DeleteSecretRotationV2Modal.tsx | 102 ++ .../EditSecretRotationV2Modal.tsx | 34 + .../RotateSecretRotationV2Modal.tsx | 88 ++ .../SecretRotationV2ModalHeader.tsx | 49 + .../SecretRotationV2Select.tsx | 151 ++ .../SecretRotationV2StatusBadge.tsx | 119 ++ ...ewSecretRotationV2GeneratedCredentials.tsx | 96 ++ .../index.ts | 1 + .../shared/CredentialDisplay.tsx | 55 + .../ViewSqlRotationGeneratedCredentials.tsx | 57 + .../shared/index.ts | 1 + .../SecretRotationV2ConfigurationFields.tsx | 124 ++ .../forms/SecretRotationV2ConnectionField.tsx | 85 ++ .../forms/SecretRotationV2DetailsFields.tsx | 51 + .../forms/SecretRotationV2Form.tsx | 231 ++++ .../SecretRotationV2ParametersFields.tsx | 28 + .../SecretRotationV2ParametersFields/index.ts | 1 + .../shared/SqlRotationParametersFields.tsx | 60 + .../shared/index.ts | 1 + .../SecretRotationReviewFields.tsx | 61 + .../SecretRotationV2ReviewFields/index.ts | 1 + .../shared/SqlRotationReviewFields.tsx | 41 + .../shared/index.ts | 1 + .../SecretRotationV2SecretsMappingFields.tsx | 28 + .../index.ts | 1 + .../SqlRotationSecretsMappingFields.tsx | 88 ++ .../shared/index.ts | 1 + .../secret-rotations-v2/forms/index.ts | 1 + .../schemas/base-secret-rotation-v2-schema.ts | 17 + .../forms/schemas/index.ts | 13 + .../mssql-credentials-rotation-schema.ts | 12 + .../postgres-credentials-rotation-schema.ts | 12 + .../forms/schemas/shared/index.ts | 1 + .../shared/sql-credentials-rotation-schema.ts | 14 + .../components/secret-rotations-v2/index.ts | 1 + .../AwsParameterStoreSyncReviewFields.tsx | 18 +- .../AwsSecretsManagerSyncReviewFields.tsx | 22 +- .../AzureAppConfigurationSyncReviewFields.tsx | 6 +- .../AzureKeyVaultSyncReviewFields.tsx | 4 +- .../DatabricksSyncReviewFields.tsx | 4 +- .../GcpSyncReviewFields.tsx | 4 +- .../GitHubSyncReviewFields.tsx | 24 +- .../HumanitecSyncReviewFields.tsx | 8 +- .../SecretSyncReviewFields.tsx | 24 +- frontend/src/components/secret-syncs/index.ts | 2 +- frontend/src/components/v2/Blur/Blur.tsx | 2 +- .../components/v2/DatePicker/DatePicker.tsx | 41 +- .../GenericFieldLabel/GenericFieldLabel.tsx} | 2 +- .../components/v2/GenericFieldLabel/index.ts | 1 + .../v2/NoticeBannerV2/NoticeBannerV2.tsx | 20 + .../src/components/v2/NoticeBannerV2/index.ts | 0 frontend/src/components/v2/index.tsx | 2 + .../context/ProjectPermissionContext/types.ts | 22 +- frontend/src/helpers/appConnections.ts | 17 +- frontend/src/helpers/secretRotationsV2.ts | 28 + .../src/hooks/api/appConnections/enums.ts | 4 +- .../api/appConnections/types/app-options.ts | 15 +- .../types/humanitec-connection.ts | 4 +- .../hooks/api/appConnections/types/index.ts | 28 +- .../appConnections/types/mssql-connection.ts | 13 + .../types/postgres-connection.ts | 13 + .../appConnections/types/root-connection.ts | 1 + .../api/appConnections/types/shared/index.ts | 1 + .../types/shared/sql-connection.ts | 7 + .../src/hooks/api/auditLogs/constants.tsx | 12 +- frontend/src/hooks/api/auditLogs/enums.tsx | 9 +- frontend/src/hooks/api/dashboard/queries.tsx | 48 +- frontend/src/hooks/api/dashboard/types.ts | 21 +- .../src/hooks/api/secretRotationsV2/enums.ts | 9 + .../src/hooks/api/secretRotationsV2/index.ts | 3 + .../hooks/api/secretRotationsV2/mutations.tsx | 91 ++ .../hooks/api/secretRotationsV2/queries.tsx | 73 + .../api/secretRotationsV2/types/index.ts | 73 + .../types/mssql-credentials-rotation.ts | 17 + .../types/postgres-credentials-rotation.ts | 17 + .../secretRotationsV2/types/shared/index.ts | 2 + .../types/shared/secret-rotation-base.ts | 53 + .../types/shared/sql-credentials-rotation.ts | 20 + frontend/src/hooks/api/secrets/queries.tsx | 4 +- frontend/src/hooks/api/secrets/types.ts | 6 +- frontend/src/hooks/utils/secrets-overview.tsx | 49 + .../layouts/ProjectLayout/ProjectLayout.tsx | 20 +- frontend/src/lib/schemas/index.ts | 7 + .../AccessManagementPage.tsx | 3 +- .../AppConnectionForm/AppConnectionForm.tsx | 20 +- .../GenericAppConnectionFields.tsx | 3 +- .../HumanitecConnectionForm.tsx | 4 +- .../AppConnectionForm/MsSqlConnectionForm.tsx | 146 ++ .../PostgresConnectionForm.tsx | 143 ++ .../PlatformManagedConfirmationModal.tsx | 43 + .../shared/PlatformManagedNoticeBanner.tsx | 9 + .../shared/SqlConnectionFields.tsx | 155 +++ .../AppConnectionForm/shared/index.ts | 3 + .../shared/sql-connection-schemas.ts | 10 + .../components/AppConnectionRow.tsx | 144 +- .../GeneralPermissionConditions.tsx | 3 +- .../ProjectRoleModifySection.utils.tsx | 56 +- .../OverviewPage/OverviewPage.tsx | 144 +- .../SecretOverviewSecretRotationRow.tsx | 318 +++++ .../SecretOverviewSecretRotationRow/index.tsx | 1 + .../SecretOverviewTableRow/SecretEditRow.tsx | 12 +- .../SecretOverviewTableRow.tsx | 23 +- .../components/QuickSearchModal.tsx | 39 +- .../QuickSearchSecretRotationItem.tsx | 57 + .../SecretTableResourceCount.tsx | 28 +- .../SelectionPanel/SelectionPanel.tsx | 10 +- .../MoveSecretsDialog/MoveSecretsDialog.tsx | 5 +- .../OverviewPage/components/utils/index.ts | 5 + .../SecretDashboardPage.tsx | 29 +- .../SecretMainPage.types.ts | 3 +- .../components/ActionBar/ActionBar.tsx | 54 + .../SecretListView/SecretDetailSidebar.tsx | 34 +- .../components/SecretListView/SecretItem.tsx | 56 +- .../SecretListView/SecretListView.tsx | 13 +- .../SecretListView/SecretNoAccessListView.tsx | 42 +- .../SecretRotationItem.tsx | 261 ++++ .../SecretRotationListView.tsx | 60 + .../SecretRotationListView/index.tsx | 1 + .../SecretRotationPage/SecretRotationPage.tsx | 117 +- ...wsParameterStoreSyncDestinationSection.tsx | 8 +- ...wsSecretsManagerSyncDestinationSection.tsx | 12 +- ...AppConfigurationSyncDestinationSection.tsx | 6 +- .../AzureKeyVaultSyncDestinationSection.tsx | 4 +- .../DatabricksSyncDestinationSection.tsx | 4 +- .../GcpSyncDestinationSection.tsx | 4 +- .../GitHubSyncDestinationSection.tsx | 26 +- .../HumanitecSyncDestinationSection.tsx | 16 +- .../SecretSyncDestinatonSection.tsx | 4 +- .../components/SecretSyncDetailsSection.tsx | 18 +- .../AwsParameterStoreSyncOptionsSection.tsx | 12 +- .../AwsSecretsManagerSyncOptionsSection.tsx | 12 +- .../SecretSyncOptionsSection.tsx | 10 +- .../components/SecretSyncSourceSection.tsx | 6 +- 275 files changed, 9692 insertions(+), 783 deletions(-) create mode 100644 backend/src/db/migrations/20250324142104_app-connection-is-platform-managed-credentials-col.ts create mode 100644 backend/src/db/migrations/20250324142105_secret-rotation-v2.ts create mode 100644 backend/src/db/migrations/20250329002640_secrets-v2-unique-key-index.ts create mode 100644 backend/src/db/schemas/secret-rotation-v2-secret-mappings.ts create mode 100644 backend/src/db/schemas/secret-rotations-v2.ts create mode 100644 backend/src/ee/routes/v2/secret-rotation-v2-routers/index.ts create mode 100644 backend/src/ee/routes/v2/secret-rotation-v2-routers/mssql-credentials-rotation-router.ts create mode 100644 backend/src/ee/routes/v2/secret-rotation-v2-routers/postgres-credentials-rotation-router.ts create mode 100644 backend/src/ee/routes/v2/secret-rotation-v2-routers/secret-rotation-v2-endpoints.ts create mode 100644 backend/src/ee/routes/v2/secret-rotation-v2-routers/secret-rotation-v2-router.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/mssql-credentials/index.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/mssql-credentials/mssql-credentials-rotation-constants.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/mssql-credentials/mssql-credentials-rotation-schemas.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/mssql-credentials/mssql-credentials-rotation-types.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/postgres-credentials/index.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/postgres-credentials/postgres-credentials-rotation-constants.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/postgres-credentials/postgres-credentials-rotation-schemas.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/postgres-credentials/postgres-credentials-rotation-types.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-dal.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-enums.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-fns.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-maps.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-queue.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-schemas.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-service.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-types.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-union-schema.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/index.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-fns.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-schemas.ts create mode 100644 backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-types.ts create mode 100644 backend/src/server/routes/v1/app-connection-routers/mssql-connection-router.ts create mode 100644 backend/src/server/routes/v1/app-connection-routers/postgres-connection-router.ts create mode 100644 backend/src/services/app-connection/mssql/index.ts create mode 100644 backend/src/services/app-connection/mssql/mssql-connection-enums.ts create mode 100644 backend/src/services/app-connection/mssql/mssql-connection-fns.ts create mode 100644 backend/src/services/app-connection/mssql/mssql-connection-schemas.ts create mode 100644 backend/src/services/app-connection/mssql/mssql-connection-types.ts create mode 100644 backend/src/services/app-connection/postgres/index.ts create mode 100644 backend/src/services/app-connection/postgres/postgres-connection-enums.ts create mode 100644 backend/src/services/app-connection/postgres/postgres-connection-fns.ts create mode 100644 backend/src/services/app-connection/postgres/postgres-connection-schemas.ts create mode 100644 backend/src/services/app-connection/postgres/postgres-connection-types.ts create mode 100644 backend/src/services/app-connection/shared/sql/index.ts create mode 100644 backend/src/services/app-connection/shared/sql/sql-connection-fns.ts create mode 100644 backend/src/services/app-connection/shared/sql/sql-connection-schemas.ts create mode 100644 backend/src/services/app-connection/shared/sql/sql-connection-types.ts create mode 100644 backend/src/services/smtp/templates/secretRotationFailed.handlebars create mode 100644 docs/api-reference/endpoints/app-connections/mssql/available.mdx create mode 100644 docs/api-reference/endpoints/app-connections/mssql/create.mdx create mode 100644 docs/api-reference/endpoints/app-connections/mssql/delete.mdx create mode 100644 docs/api-reference/endpoints/app-connections/mssql/get-by-id.mdx create mode 100644 docs/api-reference/endpoints/app-connections/mssql/get-by-name.mdx create mode 100644 docs/api-reference/endpoints/app-connections/mssql/list.mdx create mode 100644 docs/api-reference/endpoints/app-connections/mssql/update.mdx create mode 100644 docs/api-reference/endpoints/app-connections/postgres/available.mdx create mode 100644 docs/api-reference/endpoints/app-connections/postgres/create.mdx create mode 100644 docs/api-reference/endpoints/app-connections/postgres/delete.mdx create mode 100644 docs/api-reference/endpoints/app-connections/postgres/get-by-id.mdx create mode 100644 docs/api-reference/endpoints/app-connections/postgres/get-by-name.mdx create mode 100644 docs/api-reference/endpoints/app-connections/postgres/list.mdx create mode 100644 docs/api-reference/endpoints/app-connections/postgres/update.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/list.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/mssql-credentials/create.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/mssql-credentials/delete.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-by-id.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-by-name.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-generated-credentials-by-id.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/mssql-credentials/list.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/mssql-credentials/rotate-secrets.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/mssql-credentials/update.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/options.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/postgres-credentials/create.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/postgres-credentials/delete.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-by-id.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-by-name.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-generated-credentials-by-id.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/postgres-credentials/list.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/postgres-credentials/rotate-secrets.mdx create mode 100644 docs/api-reference/endpoints/secret-rotations/postgres-credentials/update.mdx create mode 100644 frontend/public/images/integrations/MsSql.png create mode 100644 frontend/public/images/integrations/MySql.png create mode 100644 frontend/public/images/integrations/Postgres.png create mode 100644 frontend/public/images/integrations/SendGrid.png create mode 100644 frontend/public/images/secretRotation/secret-rotations-v2-location.png create mode 100644 frontend/src/components/secret-rotations-v2/CreateSecretRotationV2Modal.tsx create mode 100644 frontend/src/components/secret-rotations-v2/DeleteSecretRotationV2Modal.tsx create mode 100644 frontend/src/components/secret-rotations-v2/EditSecretRotationV2Modal.tsx create mode 100644 frontend/src/components/secret-rotations-v2/RotateSecretRotationV2Modal.tsx create mode 100644 frontend/src/components/secret-rotations-v2/SecretRotationV2ModalHeader.tsx create mode 100644 frontend/src/components/secret-rotations-v2/SecretRotationV2Select.tsx create mode 100644 frontend/src/components/secret-rotations-v2/SecretRotationV2StatusBadge.tsx create mode 100644 frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/ViewSecretRotationV2GeneratedCredentials.tsx create mode 100644 frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/index.ts create mode 100644 frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/CredentialDisplay.tsx create mode 100644 frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/ViewSqlRotationGeneratedCredentials.tsx create mode 100644 frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/index.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ConfigurationFields.tsx create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ConnectionField.tsx create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2DetailsFields.tsx create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2Form.tsx create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ParametersFields/SecretRotationV2ParametersFields.tsx create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ParametersFields/index.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ParametersFields/shared/SqlRotationParametersFields.tsx create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ParametersFields/shared/index.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ReviewFields/SecretRotationReviewFields.tsx create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ReviewFields/index.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ReviewFields/shared/SqlRotationReviewFields.tsx create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ReviewFields/shared/index.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2SecretsMappingFields/SecretRotationV2SecretsMappingFields.tsx create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2SecretsMappingFields/index.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2SecretsMappingFields/shared/SqlRotationSecretsMappingFields.tsx create mode 100644 frontend/src/components/secret-rotations-v2/forms/SecretRotationV2SecretsMappingFields/shared/index.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/index.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/schemas/base-secret-rotation-v2-schema.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/schemas/index.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/schemas/mssql-credentials-rotation-schema.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/schemas/postgres-credentials-rotation-schema.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/schemas/shared/index.ts create mode 100644 frontend/src/components/secret-rotations-v2/forms/schemas/shared/sql-credentials-rotation-schema.ts create mode 100644 frontend/src/components/secret-rotations-v2/index.ts rename frontend/src/components/{secret-syncs/SecretSyncLabel.tsx => v2/GenericFieldLabel/GenericFieldLabel.tsx} (84%) create mode 100644 frontend/src/components/v2/GenericFieldLabel/index.ts create mode 100644 frontend/src/components/v2/NoticeBannerV2/NoticeBannerV2.tsx create mode 100644 frontend/src/components/v2/NoticeBannerV2/index.ts create mode 100644 frontend/src/helpers/secretRotationsV2.ts create mode 100644 frontend/src/hooks/api/appConnections/types/mssql-connection.ts create mode 100644 frontend/src/hooks/api/appConnections/types/postgres-connection.ts create mode 100644 frontend/src/hooks/api/appConnections/types/shared/index.ts create mode 100644 frontend/src/hooks/api/appConnections/types/shared/sql-connection.ts create mode 100644 frontend/src/hooks/api/secretRotationsV2/enums.ts create mode 100644 frontend/src/hooks/api/secretRotationsV2/index.ts create mode 100644 frontend/src/hooks/api/secretRotationsV2/mutations.tsx create mode 100644 frontend/src/hooks/api/secretRotationsV2/queries.tsx create mode 100644 frontend/src/hooks/api/secretRotationsV2/types/index.ts create mode 100644 frontend/src/hooks/api/secretRotationsV2/types/mssql-credentials-rotation.ts create mode 100644 frontend/src/hooks/api/secretRotationsV2/types/postgres-credentials-rotation.ts create mode 100644 frontend/src/hooks/api/secretRotationsV2/types/shared/index.ts create mode 100644 frontend/src/hooks/api/secretRotationsV2/types/shared/secret-rotation-base.ts create mode 100644 frontend/src/hooks/api/secretRotationsV2/types/shared/sql-credentials-rotation.ts create mode 100644 frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/MsSqlConnectionForm.tsx create mode 100644 frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/PostgresConnectionForm.tsx create mode 100644 frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/shared/PlatformManagedConfirmationModal.tsx create mode 100644 frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/shared/PlatformManagedNoticeBanner.tsx create mode 100644 frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/shared/SqlConnectionFields.tsx create mode 100644 frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/shared/index.ts create mode 100644 frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/shared/sql-connection-schemas.ts create mode 100644 frontend/src/pages/secret-manager/OverviewPage/components/SecretOverviewSecretRotationRow/SecretOverviewSecretRotationRow.tsx create mode 100644 frontend/src/pages/secret-manager/OverviewPage/components/SecretOverviewSecretRotationRow/index.tsx create mode 100644 frontend/src/pages/secret-manager/OverviewPage/components/SecretSearchInput/components/QuickSearchSecretRotationItem.tsx create mode 100644 frontend/src/pages/secret-manager/OverviewPage/components/utils/index.ts create mode 100644 frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretRotationListView/SecretRotationItem.tsx create mode 100644 frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretRotationListView/SecretRotationListView.tsx create mode 100644 frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretRotationListView/index.tsx diff --git a/backend/e2e-test/mocks/queue.ts b/backend/e2e-test/mocks/queue.ts index 99e3999e1..3f49bcfea 100644 --- a/backend/e2e-test/mocks/queue.ts +++ b/backend/e2e-test/mocks/queue.ts @@ -11,6 +11,7 @@ export const mockQueue = (): TQueueServiceFactory => { job[name] = jobData; }, queuePg: async () => {}, + schedulePg: async () => {}, initialize: async () => {}, shutdown: async () => undefined, stopRepeatableJob: async () => true, diff --git a/backend/src/@types/fastify.d.ts b/backend/src/@types/fastify.d.ts index 5d10830ad..d3aed3543 100644 --- a/backend/src/@types/fastify.d.ts +++ b/backend/src/@types/fastify.d.ts @@ -33,6 +33,7 @@ import { TScimServiceFactory } from "@app/ee/services/scim/scim-service"; import { TSecretApprovalPolicyServiceFactory } from "@app/ee/services/secret-approval-policy/secret-approval-policy-service"; import { TSecretApprovalRequestServiceFactory } from "@app/ee/services/secret-approval-request/secret-approval-request-service"; import { TSecretRotationServiceFactory } from "@app/ee/services/secret-rotation/secret-rotation-service"; +import { TSecretRotationV2ServiceFactory } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-service"; import { TSecretScanningServiceFactory } from "@app/ee/services/secret-scanning/secret-scanning-service"; import { TSecretSnapshotServiceFactory } from "@app/ee/services/secret-snapshot/secret-snapshot-service"; import { TSshCertificateAuthorityServiceFactory } from "@app/ee/services/ssh/ssh-certificate-authority-service"; @@ -237,6 +238,7 @@ declare module "fastify" { kmip: TKmipServiceFactory; kmipOperation: TKmipOperationServiceFactory; gateway: TGatewayServiceFactory; + secretRotationV2: TSecretRotationV2ServiceFactory; }; // this is exclusive use for middlewares in which we need to inject data // everywhere else access using service layer diff --git a/backend/src/@types/knex.d.ts b/backend/src/@types/knex.d.ts index 346b08e4c..82582bfed 100644 --- a/backend/src/@types/knex.d.ts +++ b/backend/src/@types/knex.d.ts @@ -17,6 +17,9 @@ import { TApiKeys, TApiKeysInsert, TApiKeysUpdate, + TAppConnections, + TAppConnectionsInsert, + TAppConnectionsUpdate, TAuditLogs, TAuditLogsInsert, TAuditLogStreams, @@ -65,6 +68,9 @@ import { TDynamicSecrets, TDynamicSecretsInsert, TDynamicSecretsUpdate, + TExternalGroupOrgRoleMappings, + TExternalGroupOrgRoleMappingsInsert, + TExternalGroupOrgRoleMappingsUpdate, TExternalKms, TExternalKmsInsert, TExternalKmsUpdate, @@ -299,6 +305,12 @@ import { TSecretRotations, TSecretRotationsInsert, TSecretRotationsUpdate, + TSecretRotationsV2, + TSecretRotationsV2Insert, + TSecretRotationsV2Update, + TSecretRotationV2SecretMappings, + TSecretRotationV2SecretMappingsInsert, + TSecretRotationV2SecretMappingsUpdate, TSecrets, TSecretScanningGitRisks, TSecretScanningGitRisksInsert, @@ -320,15 +332,27 @@ import { TSecretSnapshotsInsert, TSecretSnapshotsUpdate, TSecretsUpdate, + TSecretsV2, + TSecretsV2Insert, + TSecretsV2Update, + TSecretSyncs, + TSecretSyncsInsert, + TSecretSyncsUpdate, TSecretTagJunction, TSecretTagJunctionInsert, TSecretTagJunctionUpdate, TSecretTags, TSecretTagsInsert, TSecretTagsUpdate, + TSecretV2TagJunction, + TSecretV2TagJunctionInsert, + TSecretV2TagJunctionUpdate, TSecretVersions, TSecretVersionsInsert, TSecretVersionsUpdate, + TSecretVersionsV2, + TSecretVersionsV2Insert, + TSecretVersionsV2Update, TSecretVersionTagJunction, TSecretVersionTagJunctionInsert, TSecretVersionTagJunctionUpdate, @@ -387,24 +411,6 @@ import { TWorkflowIntegrationsInsert, TWorkflowIntegrationsUpdate } from "@app/db/schemas"; -import { TAppConnections, TAppConnectionsInsert, TAppConnectionsUpdate } from "@app/db/schemas/app-connections"; -import { - TExternalGroupOrgRoleMappings, - TExternalGroupOrgRoleMappingsInsert, - TExternalGroupOrgRoleMappingsUpdate -} from "@app/db/schemas/external-group-org-role-mappings"; -import { TSecretSyncs, TSecretSyncsInsert, TSecretSyncsUpdate } from "@app/db/schemas/secret-syncs"; -import { - TSecretV2TagJunction, - TSecretV2TagJunctionInsert, - TSecretV2TagJunctionUpdate -} from "@app/db/schemas/secret-v2-tag-junction"; -import { - TSecretVersionsV2, - TSecretVersionsV2Insert, - TSecretVersionsV2Update -} from "@app/db/schemas/secret-versions-v2"; -import { TSecretsV2, TSecretsV2Insert, TSecretsV2Update } from "@app/db/schemas/secrets-v2"; declare module "knex" { namespace Knex { @@ -950,5 +956,15 @@ declare module "knex/types/tables" { TOrgGatewayConfigInsert, TOrgGatewayConfigUpdate >; + [TableName.SecretRotationV2]: KnexOriginal.CompositeTableType< + TSecretRotationsV2, + TSecretRotationsV2Insert, + TSecretRotationsV2Update + >; + [TableName.SecretRotationV2SecretMapping]: KnexOriginal.CompositeTableType< + TSecretRotationV2SecretMappings, + TSecretRotationV2SecretMappingsInsert, + TSecretRotationV2SecretMappingsUpdate + >; } } diff --git a/backend/src/db/migrations/20250313124706_add-privilege-upgrade-field.ts b/backend/src/db/migrations/20250313124706_add-privilege-upgrade-field.ts index 9823f4d8e..5a16666af 100644 --- a/backend/src/db/migrations/20250313124706_add-privilege-upgrade-field.ts +++ b/backend/src/db/migrations/20250313124706_add-privilege-upgrade-field.ts @@ -1,4 +1,5 @@ import { Knex } from "knex"; + import { TableName } from "../schemas"; export async function up(knex: Knex): Promise { diff --git a/backend/src/db/migrations/20250324142104_app-connection-is-platform-managed-credentials-col.ts b/backend/src/db/migrations/20250324142104_app-connection-is-platform-managed-credentials-col.ts new file mode 100644 index 000000000..79d455605 --- /dev/null +++ b/backend/src/db/migrations/20250324142104_app-connection-is-platform-managed-credentials-col.ts @@ -0,0 +1,19 @@ +import { Knex } from "knex"; + +import { TableName } from "@app/db/schemas"; + +export async function up(knex: Knex): Promise { + if (!(await knex.schema.hasColumn(TableName.AppConnection, "isPlatformManagedCredentials"))) { + await knex.schema.alterTable(TableName.AppConnection, (t) => { + t.boolean("isPlatformManagedCredentials").defaultTo(false); + }); + } +} + +export async function down(knex: Knex): Promise { + if (await knex.schema.hasColumn(TableName.AppConnection, "isPlatformManagedCredentials")) { + await knex.schema.alterTable(TableName.AppConnection, (t) => { + t.dropColumn("isPlatformManagedCredentials"); + }); + } +} diff --git a/backend/src/db/migrations/20250324142105_secret-rotation-v2.ts b/backend/src/db/migrations/20250324142105_secret-rotation-v2.ts new file mode 100644 index 000000000..0fd9b9881 --- /dev/null +++ b/backend/src/db/migrations/20250324142105_secret-rotation-v2.ts @@ -0,0 +1,57 @@ +import { Knex } from "knex"; + +import { TableName } from "@app/db/schemas"; +import { createOnUpdateTrigger, dropOnUpdateTrigger } from "@app/db/utils"; + +export async function up(knex: Knex): Promise { + if (!(await knex.schema.hasTable(TableName.SecretRotationV2))) { + await knex.schema.createTable(TableName.SecretRotationV2, (t) => { + t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); + t.string("name", 32).notNullable(); + t.string("description"); + t.string("type").notNullable(); + t.jsonb("parameters").notNullable(); + t.jsonb("secretsMapping").notNullable(); + t.binary("encryptedGeneratedCredentials").notNullable(); + t.boolean("isAutoRotationEnabled").notNullable().defaultTo(true); + t.integer("activeIndex").notNullable().defaultTo(0); + t.uuid("folderId").notNullable(); + t.foreign("folderId").references("id").inTable(TableName.SecretFolder).onDelete("CASCADE"); + t.uuid("connectionId").notNullable(); + t.foreign("connectionId").references("id").inTable(TableName.AppConnection); + t.timestamps(true, true, true); + t.integer("rotationInterval").notNullable(); + t.jsonb("rotateAtUtc").notNullable(); // { hours: number; minutes: number } + t.string("rotationStatus").notNullable(); + t.datetime("lastRotationAttemptedAt").notNullable(); + t.datetime("lastRotatedAt").notNullable(); + t.binary("encryptedLastRotationMessage"); // we encrypt this because it may contain sensitive info (SQL errors showing credentials) + t.string("lastRotationJobId"); + t.datetime("nextRotationAt"); + }); + + await createOnUpdateTrigger(knex, TableName.SecretRotationV2); + + await knex.schema.alterTable(TableName.SecretRotationV2, (t) => { + t.unique(["folderId", "name"]); + }); + } + + if (!(await knex.schema.hasTable(TableName.SecretRotationV2SecretMapping))) { + await knex.schema.createTable(TableName.SecretRotationV2SecretMapping, (t) => { + t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); + t.uuid("secretId").notNullable(); + // scott: this is deferred to block secret deletion but not prevent folder/environment/project deletion + // ie, if rotation is being deleted as well we permit it, otherwise throw + t.foreign("secretId").references("id").inTable(TableName.SecretV2).deferrable("deferred"); + t.uuid("rotationId").notNullable(); + t.foreign("rotationId").references("id").inTable(TableName.SecretRotationV2).onDelete("CASCADE"); + }); + } +} + +export async function down(knex: Knex): Promise { + await knex.schema.dropTableIfExists(TableName.SecretRotationV2SecretMapping); + await knex.schema.dropTableIfExists(TableName.SecretRotationV2); + await dropOnUpdateTrigger(knex, TableName.SecretRotationV2); +} diff --git a/backend/src/db/migrations/20250329002640_secrets-v2-unique-key-index.ts b/backend/src/db/migrations/20250329002640_secrets-v2-unique-key-index.ts new file mode 100644 index 000000000..f97bb9b6f --- /dev/null +++ b/backend/src/db/migrations/20250329002640_secrets-v2-unique-key-index.ts @@ -0,0 +1,29 @@ +import { Knex } from "knex"; + +import { TableName } from "@app/db/schemas"; + +const INDEX_NAME = "idx_unique_secret_v2_key"; + +export async function up(knex: Knex): Promise { + const hasKeyCol = await knex.schema.hasColumn(TableName.SecretV2, "key"); + const hasFolderIdCol = await knex.schema.hasColumn(TableName.SecretV2, "folderId"); + const hasTypeCol = await knex.schema.hasColumn(TableName.SecretV2, "type"); + + if (hasKeyCol && hasFolderIdCol && hasTypeCol) { + await knex.raw(` + CREATE UNIQUE INDEX ${INDEX_NAME} + ON ${TableName.SecretV2} ("key", "folderId") + WHERE type = 'shared' + `); + } +} + +export async function down(knex: Knex): Promise { + const hasKeyCol = await knex.schema.hasColumn(TableName.SecretV2, "key"); + const hasFolderIdCol = await knex.schema.hasColumn(TableName.SecretV2, "folderId"); + const hasTypeCol = await knex.schema.hasColumn(TableName.SecretV2, "type"); + + if (hasKeyCol && hasFolderIdCol && hasTypeCol) { + await knex.raw(`DROP INDEX IF EXISTS ${INDEX_NAME}`); + } +} diff --git a/backend/src/db/schemas/app-connections.ts b/backend/src/db/schemas/app-connections.ts index 8c9dff236..ee4282b73 100644 --- a/backend/src/db/schemas/app-connections.ts +++ b/backend/src/db/schemas/app-connections.ts @@ -19,7 +19,8 @@ export const AppConnectionsSchema = z.object({ version: z.number().default(1), orgId: z.string().uuid(), createdAt: z.date(), - updatedAt: z.date() + updatedAt: z.date(), + isPlatformManagedCredentials: z.boolean().default(false).nullable().optional() }); export type TAppConnections = z.infer; diff --git a/backend/src/db/schemas/index.ts b/backend/src/db/schemas/index.ts index 92fc47c23..5b78cf86f 100644 --- a/backend/src/db/schemas/index.ts +++ b/backend/src/db/schemas/index.ts @@ -3,6 +3,7 @@ export * from "./access-approval-policies-approvers"; export * from "./access-approval-requests"; export * from "./access-approval-requests-reviewers"; export * from "./api-keys"; +export * from "./app-connections"; export * from "./audit-log-streams"; export * from "./audit-logs"; export * from "./auth-token-sessions"; @@ -19,6 +20,7 @@ export * from "./certificate-templates"; export * from "./certificates"; export * from "./dynamic-secret-leases"; export * from "./dynamic-secrets"; +export * from "./external-group-org-role-mappings"; export * from "./external-kms"; export * from "./gateways"; export * from "./git-app-install-sessions"; @@ -97,13 +99,16 @@ export * from "./secret-references"; export * from "./secret-references-v2"; export * from "./secret-rotation-output-v2"; export * from "./secret-rotation-outputs"; +export * from "./secret-rotation-v2-secret-mappings"; export * from "./secret-rotations"; +export * from "./secret-rotations-v2"; export * from "./secret-scanning-git-risks"; export * from "./secret-sharing"; export * from "./secret-snapshot-folders"; export * from "./secret-snapshot-secrets"; export * from "./secret-snapshot-secrets-v2"; export * from "./secret-snapshots"; +export * from "./secret-syncs"; export * from "./secret-tag-junction"; export * from "./secret-tags"; export * from "./secret-v2-tag-junction"; diff --git a/backend/src/db/schemas/models.ts b/backend/src/db/schemas/models.ts index e626443c3..f2c61e0fa 100644 --- a/backend/src/db/schemas/models.ts +++ b/backend/src/db/schemas/models.ts @@ -140,7 +140,9 @@ export enum TableName { KmipClient = "kmip_clients", KmipOrgConfig = "kmip_org_configs", KmipOrgServerCertificates = "kmip_org_server_certificates", - KmipClientCertificates = "kmip_client_certificates" + KmipClientCertificates = "kmip_client_certificates", + SecretRotationV2 = "secret_rotations_v2", + SecretRotationV2SecretMapping = "secret_rotation_v2_secret_mappings" } export type TImmutableDBKeys = "id" | "createdAt" | "updatedAt"; diff --git a/backend/src/db/schemas/secret-rotation-v2-secret-mappings.ts b/backend/src/db/schemas/secret-rotation-v2-secret-mappings.ts new file mode 100644 index 000000000..5baf6942c --- /dev/null +++ b/backend/src/db/schemas/secret-rotation-v2-secret-mappings.ts @@ -0,0 +1,23 @@ +// Code generated by automation script, DO NOT EDIT. +// Automated by pulling database and generating zod schema +// To update. Just run npm run generate:schema +// Written by akhilmhdh. + +import { z } from "zod"; + +import { TImmutableDBKeys } from "./models"; + +export const SecretRotationV2SecretMappingsSchema = z.object({ + id: z.string().uuid(), + secretId: z.string().uuid(), + rotationId: z.string().uuid() +}); + +export type TSecretRotationV2SecretMappings = z.infer; +export type TSecretRotationV2SecretMappingsInsert = Omit< + z.input, + TImmutableDBKeys +>; +export type TSecretRotationV2SecretMappingsUpdate = Partial< + Omit, TImmutableDBKeys> +>; diff --git a/backend/src/db/schemas/secret-rotations-v2.ts b/backend/src/db/schemas/secret-rotations-v2.ts new file mode 100644 index 000000000..cecc58e07 --- /dev/null +++ b/backend/src/db/schemas/secret-rotations-v2.ts @@ -0,0 +1,38 @@ +// Code generated by automation script, DO NOT EDIT. +// Automated by pulling database and generating zod schema +// To update. Just run npm run generate:schema +// Written by akhilmhdh. + +import { z } from "zod"; + +import { zodBuffer } from "@app/lib/zod"; + +import { TImmutableDBKeys } from "./models"; + +export const SecretRotationsV2Schema = z.object({ + id: z.string().uuid(), + name: z.string(), + description: z.string().nullable().optional(), + type: z.string(), + parameters: z.unknown(), + secretsMapping: z.unknown(), + encryptedGeneratedCredentials: zodBuffer, + isAutoRotationEnabled: z.boolean().default(true), + activeIndex: z.number().default(0), + folderId: z.string().uuid(), + connectionId: z.string().uuid(), + createdAt: z.date(), + updatedAt: z.date(), + rotationInterval: z.number(), + rotateAtUtc: z.unknown(), + rotationStatus: z.string(), + lastRotationAttemptedAt: z.date(), + lastRotatedAt: z.date(), + encryptedLastRotationMessage: zodBuffer.nullable().optional(), + lastRotationJobId: z.string().nullable().optional(), + nextRotationAt: z.date().nullable().optional() +}); + +export type TSecretRotationsV2 = z.infer; +export type TSecretRotationsV2Insert = Omit, TImmutableDBKeys>; +export type TSecretRotationsV2Update = Partial, TImmutableDBKeys>>; diff --git a/backend/src/ee/routes/v1/secret-rotation-router.ts b/backend/src/ee/routes/v1/secret-rotation-router.ts index 936459fa1..1efc2c8aa 100644 --- a/backend/src/ee/routes/v1/secret-rotation-router.ts +++ b/backend/src/ee/routes/v1/secret-rotation-router.ts @@ -1,6 +1,7 @@ import { z } from "zod"; import { SecretRotationOutputsSchema, SecretRotationsSchema } from "@app/db/schemas"; +import { BadRequestError } from "@app/lib/errors"; import { removeTrailingSlash } from "@app/lib/fn"; import { readLimit, writeLimit } from "@app/server/config/rateLimiter"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; @@ -40,16 +41,10 @@ export const registerSecretRotationRouter = async (server: FastifyZodProvider) = } }, onRequest: verifyAuth([AuthMode.JWT]), - handler: async (req) => { - const secretRotation = await server.services.secretRotation.createRotation({ - actor: req.permission.type, - actorAuthMethod: req.permission.authMethod, - actorId: req.permission.id, - actorOrgId: req.permission.orgId, - ...req.body, - projectId: req.body.workspaceId + handler: async () => { + throw new BadRequestError({ + message: `This version of Secret Rotations has been deprecated. Please see docs for new version.` }); - return { secretRotation }; } }); diff --git a/backend/src/ee/routes/v2/index.ts b/backend/src/ee/routes/v2/index.ts index bede5a1cf..70e5005a4 100644 --- a/backend/src/ee/routes/v2/index.ts +++ b/backend/src/ee/routes/v2/index.ts @@ -1,3 +1,8 @@ +import { + registerSecretRotationV2Router, + SECRET_ROTATION_REGISTER_ROUTER_MAP +} from "@app/ee/routes/v2/secret-rotation-v2-routers"; + import { registerIdentityProjectAdditionalPrivilegeRouter } from "./identity-project-additional-privilege-router"; import { registerProjectRoleRouter } from "./project-role-router"; @@ -13,4 +18,17 @@ export const registerV2EERoutes = async (server: FastifyZodProvider) => { await server.register(registerIdentityProjectAdditionalPrivilegeRouter, { prefix: "/identity-project-additional-privilege" }); + + await server.register( + async (secretRotationV2Router) => { + // register generic secret rotation endpoints + await secretRotationV2Router.register(registerSecretRotationV2Router); + + // register service specific secret rotation endpoints (secret-rotations/postgres-credentials, etc.) + for await (const [type, router] of Object.entries(SECRET_ROTATION_REGISTER_ROUTER_MAP)) { + await secretRotationV2Router.register(router, { prefix: `/${type}` }); + } + }, + { prefix: "/secret-rotations" } + ); }; diff --git a/backend/src/ee/routes/v2/secret-rotation-v2-routers/index.ts b/backend/src/ee/routes/v2/secret-rotation-v2-routers/index.ts new file mode 100644 index 000000000..d641ec689 --- /dev/null +++ b/backend/src/ee/routes/v2/secret-rotation-v2-routers/index.ts @@ -0,0 +1,14 @@ +import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; + +import { registerMsSqlCredentialsRotationRouter } from "./mssql-credentials-rotation-router"; +import { registerPostgresCredentialsRotationRouter } from "./postgres-credentials-rotation-router"; + +export * from "./secret-rotation-v2-router"; + +export const SECRET_ROTATION_REGISTER_ROUTER_MAP: Record< + SecretRotation, + (server: FastifyZodProvider) => Promise +> = { + [SecretRotation.PostgresCredentials]: registerPostgresCredentialsRotationRouter, + [SecretRotation.MsSqlCredentials]: registerMsSqlCredentialsRotationRouter +}; diff --git a/backend/src/ee/routes/v2/secret-rotation-v2-routers/mssql-credentials-rotation-router.ts b/backend/src/ee/routes/v2/secret-rotation-v2-routers/mssql-credentials-rotation-router.ts new file mode 100644 index 000000000..4fea8869b --- /dev/null +++ b/backend/src/ee/routes/v2/secret-rotation-v2-routers/mssql-credentials-rotation-router.ts @@ -0,0 +1,19 @@ +import { + CreateMsSqlCredentialsRotationSchema, + MsSqlCredentialsRotationSchema, + UpdateMsSqlCredentialsRotationSchema +} from "@app/ee/services/secret-rotation-v2/mssql-credentials"; +import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { SqlCredentialsRotationGeneratedCredentialsSchema } from "@app/ee/services/secret-rotation-v2/shared/sql-credentials"; + +import { registerSecretRotationEndpoints } from "./secret-rotation-v2-endpoints"; + +export const registerMsSqlCredentialsRotationRouter = async (server: FastifyZodProvider) => + registerSecretRotationEndpoints({ + type: SecretRotation.MsSqlCredentials, + server, + responseSchema: MsSqlCredentialsRotationSchema, + createSchema: CreateMsSqlCredentialsRotationSchema, + updateSchema: UpdateMsSqlCredentialsRotationSchema, + generatedCredentialsSchema: SqlCredentialsRotationGeneratedCredentialsSchema + }); diff --git a/backend/src/ee/routes/v2/secret-rotation-v2-routers/postgres-credentials-rotation-router.ts b/backend/src/ee/routes/v2/secret-rotation-v2-routers/postgres-credentials-rotation-router.ts new file mode 100644 index 000000000..ab5ef5768 --- /dev/null +++ b/backend/src/ee/routes/v2/secret-rotation-v2-routers/postgres-credentials-rotation-router.ts @@ -0,0 +1,19 @@ +import { + CreatePostgresCredentialsRotationSchema, + PostgresCredentialsRotationSchema, + UpdatePostgresCredentialsRotationSchema +} from "@app/ee/services/secret-rotation-v2/postgres-credentials"; +import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { SqlCredentialsRotationGeneratedCredentialsSchema } from "@app/ee/services/secret-rotation-v2/shared/sql-credentials"; + +import { registerSecretRotationEndpoints } from "./secret-rotation-v2-endpoints"; + +export const registerPostgresCredentialsRotationRouter = async (server: FastifyZodProvider) => + registerSecretRotationEndpoints({ + type: SecretRotation.PostgresCredentials, + server, + responseSchema: PostgresCredentialsRotationSchema, + createSchema: CreatePostgresCredentialsRotationSchema, + updateSchema: UpdatePostgresCredentialsRotationSchema, + generatedCredentialsSchema: SqlCredentialsRotationGeneratedCredentialsSchema + }); diff --git a/backend/src/ee/routes/v2/secret-rotation-v2-routers/secret-rotation-v2-endpoints.ts b/backend/src/ee/routes/v2/secret-rotation-v2-routers/secret-rotation-v2-endpoints.ts new file mode 100644 index 000000000..cd3c8d4cb --- /dev/null +++ b/backend/src/ee/routes/v2/secret-rotation-v2-routers/secret-rotation-v2-endpoints.ts @@ -0,0 +1,429 @@ +import { z } from "zod"; + +import { EventType } from "@app/ee/services/audit-log/audit-log-types"; +import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { SECRET_ROTATION_NAME_MAP } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-maps"; +import { + TRotateAtUtc, + TSecretRotationV2, + TSecretRotationV2GeneratedCredentials, + TSecretRotationV2Input +} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-types"; +import { SecretRotations } from "@app/lib/api-docs"; +import { startsWithVowel } from "@app/lib/fn"; +import { readLimit, writeLimit } from "@app/server/config/rateLimiter"; +import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; +import { AuthMode } from "@app/services/auth/auth-type"; + +export const registerSecretRotationEndpoints = < + T extends TSecretRotationV2, + I extends TSecretRotationV2Input, + C extends TSecretRotationV2GeneratedCredentials +>({ + server, + type, + createSchema, + updateSchema, + responseSchema, + generatedCredentialsSchema +}: { + type: SecretRotation; + server: FastifyZodProvider; + createSchema: z.ZodType<{ + name: string; + environment: string; + secretPath: string; + projectId: string; + connectionId: string; + parameters: I["parameters"]; + secretsMapping: I["secretsMapping"]; + description?: string | null; + isAutoRotationEnabled?: boolean; + rotationInterval: number; + rotateAtUtc?: TRotateAtUtc; + }>; + updateSchema: z.ZodType<{ + connectionId?: string; + name?: string; + environment?: string; + secretPath?: string; + parameters?: I["parameters"]; + secretsMapping?: I["secretsMapping"]; + description?: string | null; + isAutoRotationEnabled?: boolean; + rotationInterval?: number; + rotateAtUtc?: TRotateAtUtc; + }>; + responseSchema: z.ZodTypeAny; + generatedCredentialsSchema: z.ZodTypeAny; +}) => { + const rotationType = SECRET_ROTATION_NAME_MAP[type]; + + server.route({ + method: "GET", + url: `/`, + config: { + rateLimit: readLimit + }, + schema: { + description: `List the ${rotationType} Rotations for the specified project.`, + querystring: z.object({ + projectId: z.string().trim().min(1, "Project ID required").describe(SecretRotations.LIST(type).projectId) + }), + response: { + 200: z.object({ secretRotations: responseSchema.array() }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const { + query: { projectId } + } = req; + + const secretRotations = (await server.services.secretRotationV2.listSecretRotationsByProjectId( + { projectId, type }, + req.permission + )) as T[]; + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + projectId, + event: { + type: EventType.GET_SECRET_ROTATIONS, + metadata: { + type, + count: secretRotations.length, + rotationIds: secretRotations.map((rotation) => rotation.id) + } + } + }); + + return { secretRotations }; + } + }); + + server.route({ + method: "GET", + url: "/:rotationId", + config: { + rateLimit: readLimit + }, + schema: { + description: `Get the specified ${rotationType} Rotation by ID.`, + params: z.object({ + rotationId: z.string().uuid().describe(SecretRotations.GET_BY_ID(type).rotationId) + }), + response: { + 200: z.object({ secretRotation: responseSchema }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const { rotationId } = req.params; + + const secretRotation = (await server.services.secretRotationV2.findSecretRotationById( + { rotationId, type }, + req.permission + )) as T; + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + projectId: secretRotation.projectId, + event: { + type: EventType.GET_SECRET_ROTATION, + metadata: { + rotationId, + type, + secretPath: secretRotation.folder.path, + environment: secretRotation.environment.slug + } + } + }); + + return { secretRotation }; + } + }); + + server.route({ + method: "GET", + url: `/rotation-name/:rotationName`, + config: { + rateLimit: readLimit + }, + schema: { + description: `Get the specified ${rotationType} Rotation by name and project ID.`, + params: z.object({ + rotationName: z + .string() + .trim() + .min(1, "Rotation name required") + .describe(SecretRotations.GET_BY_NAME(type).rotationName) + }), + querystring: z.object({ + projectId: z + .string() + .trim() + .min(1, "Project ID required") + .describe(SecretRotations.GET_BY_NAME(type).projectId), + secretPath: z + .string() + .trim() + .min(1, "Secret path required") + .describe(SecretRotations.GET_BY_NAME(type).secretPath), + environment: z + .string() + .trim() + .min(1, "Environment required") + .describe(SecretRotations.GET_BY_NAME(type).environment) + }), + response: { + 200: z.object({ secretRotation: responseSchema }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const { rotationName } = req.params; + const { projectId, secretPath, environment } = req.query; + + const secretRotation = (await server.services.secretRotationV2.findSecretRotationByName( + { rotationName, projectId, type, secretPath, environment }, + req.permission + )) as T; + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + projectId, + event: { + type: EventType.GET_SECRET_ROTATION, + metadata: { + rotationId: secretRotation.id, + type, + secretPath, + environment + } + } + }); + + return { secretRotation }; + } + }); + + server.route({ + method: "POST", + url: "/", + config: { + rateLimit: writeLimit + }, + schema: { + description: `Create ${ + startsWithVowel(rotationType) ? "an" : "a" + } ${rotationType} Rotation for the specified project.`, + body: createSchema, + response: { + 200: z.object({ secretRotation: responseSchema }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const secretRotation = (await server.services.secretRotationV2.createSecretRotation( + { ...req.body, type }, + req.permission + )) as T; + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + projectId: secretRotation.projectId, + event: { + type: EventType.CREATE_SECRET_ROTATION, + metadata: { + rotationId: secretRotation.id, + type, + ...req.body + } + } + }); + + return { secretRotation }; + } + }); + + server.route({ + method: "PATCH", + url: "/:rotationId", + config: { + rateLimit: writeLimit + }, + schema: { + description: `Update the specified ${rotationType} Rotation.`, + params: z.object({ + rotationId: z.string().uuid().describe(SecretRotations.UPDATE(type).rotationId) + }), + body: updateSchema, + response: { + 200: z.object({ secretRotation: responseSchema }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const { rotationId } = req.params; + + const secretRotation = (await server.services.secretRotationV2.updateSecretRotation( + { ...req.body, rotationId, type }, + req.permission + )) as T; + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + projectId: secretRotation.projectId, + event: { + type: EventType.UPDATE_SECRET_ROTATION, + metadata: { + rotationId, + type, + ...req.body + } + } + }); + + return { secretRotation }; + } + }); + + server.route({ + method: "DELETE", + url: `/:rotationId`, + config: { + rateLimit: writeLimit + }, + schema: { + description: `Delete the specified ${rotationType} Rotation.`, + params: z.object({ + rotationId: z.string().uuid().describe(SecretRotations.DELETE(type).rotationId) + }), + querystring: z.object({ + deleteSecrets: z + .enum(["true", "false"]) + .transform((value) => value === "true") + .describe(SecretRotations.DELETE(type).deleteSecrets), + revokeGeneratedCredentials: z + .enum(["true", "false"]) + .transform((value) => value === "true") + .describe(SecretRotations.DELETE(type).revokeGeneratedCredentials) + }), + response: { + 200: z.object({ secretRotation: responseSchema }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const { rotationId } = req.params; + const { deleteSecrets, revokeGeneratedCredentials } = req.query; + + const secretRotation = (await server.services.secretRotationV2.deleteSecretRotation( + { type, rotationId, deleteSecrets, revokeGeneratedCredentials }, + req.permission + )) as T; + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + projectId: secretRotation.projectId, + event: { + type: EventType.DELETE_SECRET_ROTATION, + metadata: { + type, + rotationId, + deleteSecrets, + revokeGeneratedCredentials + } + } + }); + + return { secretRotation }; + } + }); + + server.route({ + method: "GET", + url: "/:rotationId/generated-credentials", + config: { + rateLimit: readLimit + }, + schema: { + description: `Get the generated credentials for the specified ${rotationType} Rotation.`, + params: z.object({ + rotationId: z.string().uuid().describe(SecretRotations.GET_GENERATED_CREDENTIALS_BY_ID(type).rotationId) + }), + response: { + 200: z.object({ + generatedCredentials: generatedCredentialsSchema, + activeIndex: z.number(), + rotationId: z.string().uuid(), + type: z.literal(type) + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const { rotationId } = req.params; + + const { + generatedCredentials, + secretRotation: { activeIndex, projectId, folder, environment } + } = await server.services.secretRotationV2.findSecretRotationGeneratedCredentialsById( + { + rotationId, + type + }, + req.permission + ); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + projectId, + event: { + type: EventType.GET_SECRET_ROTATION_GENERATED_CREDENTIALS, + metadata: { + type, + rotationId, + secretPath: folder.path, + environment: environment.slug + } + } + }); + + return { generatedCredentials: generatedCredentials as C, activeIndex, rotationId, type }; + } + }); + + server.route({ + method: "POST", + url: "/:rotationId/rotate-secrets", + config: { + rateLimit: writeLimit + }, + schema: { + description: `Rotate the generated credentials for the specified ${rotationType} Rotation.`, + params: z.object({ + rotationId: z.string().uuid().describe(SecretRotations.ROTATE(type).rotationId) + }), + response: { + 200: z.object({ secretRotation: responseSchema }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const { rotationId } = req.params; + + const secretRotation = (await server.services.secretRotationV2.rotateSecretRotation( + { + rotationId, + type, + auditLogInfo: req.auditLogInfo + }, + req.permission + )) as T; + + return { secretRotation }; + } + }); +}; diff --git a/backend/src/ee/routes/v2/secret-rotation-v2-routers/secret-rotation-v2-router.ts b/backend/src/ee/routes/v2/secret-rotation-v2-routers/secret-rotation-v2-router.ts new file mode 100644 index 000000000..abdfc14f6 --- /dev/null +++ b/backend/src/ee/routes/v2/secret-rotation-v2-routers/secret-rotation-v2-router.ts @@ -0,0 +1,81 @@ +import { z } from "zod"; + +import { EventType } from "@app/ee/services/audit-log/audit-log-types"; +import { MsSqlCredentialsRotationListItemSchema } from "@app/ee/services/secret-rotation-v2/mssql-credentials"; +import { PostgresCredentialsRotationListItemSchema } from "@app/ee/services/secret-rotation-v2/postgres-credentials"; +import { SecretRotationV2Schema } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-union-schema"; +import { SecretRotations } from "@app/lib/api-docs"; +import { readLimit } from "@app/server/config/rateLimiter"; +import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; +import { AuthMode } from "@app/services/auth/auth-type"; + +const SecretRotationV2OptionsSchema = z.discriminatedUnion("type", [ + PostgresCredentialsRotationListItemSchema, + MsSqlCredentialsRotationListItemSchema +]); + +export const registerSecretRotationV2Router = async (server: FastifyZodProvider) => { + server.route({ + method: "GET", + url: "/options", + config: { + rateLimit: readLimit + }, + schema: { + description: "List the available Secret Rotation Options.", + response: { + 200: z.object({ + secretRotationOptions: SecretRotationV2OptionsSchema.array() + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: () => { + const secretRotationOptions = server.services.secretRotationV2.listSecretRotationOptions(); + return { secretRotationOptions }; + } + }); + + server.route({ + method: "GET", + url: "/", + config: { + rateLimit: readLimit + }, + schema: { + description: "List all the Secret Rotations for the specified project.", + querystring: z.object({ + projectId: z.string().trim().min(1, "Project ID required").describe(SecretRotations.LIST().projectId) + }), + response: { + 200: z.object({ secretRotations: SecretRotationV2Schema.array() }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const { + query: { projectId }, + permission + } = req; + + const secretRotations = await server.services.secretRotationV2.listSecretRotationsByProjectId( + { projectId }, + permission + ); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + projectId, + event: { + type: EventType.GET_SECRET_ROTATIONS, + metadata: { + rotationIds: secretRotations.map((sync) => sync.id), + count: secretRotations.length + } + } + }); + + return { secretRotations }; + } + }); +}; diff --git a/backend/src/ee/services/audit-log/audit-log-types.ts b/backend/src/ee/services/audit-log/audit-log-types.ts index 1214cc5a0..ab950f3bf 100644 --- a/backend/src/ee/services/audit-log/audit-log-types.ts +++ b/backend/src/ee/services/audit-log/audit-log-types.ts @@ -2,6 +2,13 @@ import { TCreateProjectTemplateDTO, TUpdateProjectTemplateDTO } from "@app/ee/services/project-template/project-template-types"; +import { SecretRotation, SecretRotationStatus } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { + TCreateSecretRotationV2DTO, + TDeleteSecretRotationV2DTO, + TSecretRotationV2Raw, + TUpdateSecretRotationV2DTO +} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-types"; import { SshCaStatus, SshCertType } from "@app/ee/services/ssh/ssh-certificate-authority-types"; import { SshCertTemplateStatus } from "@app/ee/services/ssh-certificate-template/ssh-certificate-template-types"; import { SymmetricEncryption } from "@app/lib/crypto/cipher"; @@ -54,6 +61,8 @@ export type TCreateAuditLogDTO = { projectId?: string; } & BaseAuthData; +export type AuditLogInfo = Pick; + interface BaseAuthData { ipAddress?: string; userAgent?: string; @@ -283,7 +292,15 @@ export enum EventType { KMIP_OPERATION_ACTIVATE = "kmip-operation-activate", KMIP_OPERATION_REVOKE = "kmip-operation-revoke", KMIP_OPERATION_LOCATE = "kmip-operation-locate", - KMIP_OPERATION_REGISTER = "kmip-operation-register" + KMIP_OPERATION_REGISTER = "kmip-operation-register", + + GET_SECRET_ROTATIONS = "get-secret-rotations", + GET_SECRET_ROTATION = "get-secret-rotation", + GET_SECRET_ROTATION_GENERATED_CREDENTIALS = "get-secret-rotation-generated-credentials", + CREATE_SECRET_ROTATION = "create-secret-rotation", + UPDATE_SECRET_ROTATION = "update-secret-rotation", + DELETE_SECRET_ROTATION = "delete-secret-rotation", + SECRET_ROTATION_ROTATE_SECRETS = "secret-rotation-rotate-secrets" } interface UserActorMetadata { @@ -2290,6 +2307,63 @@ interface RegisterKmipServerEvent { }; } +interface GetSecretRotationsEvent { + type: EventType.GET_SECRET_ROTATIONS; + metadata: { + type?: SecretRotation; + count: number; + rotationIds: string[]; + secretPath?: string; + environment?: string; + }; +} + +interface GetSecretRotationEvent { + type: EventType.GET_SECRET_ROTATION; + metadata: { + type: SecretRotation; + rotationId: string; + secretPath: string; + environment: string; + }; +} + +interface GetSecretRotationCredentialsEvent { + type: EventType.GET_SECRET_ROTATION_GENERATED_CREDENTIALS; + metadata: { + type: SecretRotation; + rotationId: string; + secretPath: string; + environment: string; + }; +} + +interface CreateSecretRotationEvent { + type: EventType.CREATE_SECRET_ROTATION; + metadata: Omit & { rotationId: string }; +} + +interface UpdateSecretRotationEvent { + type: EventType.UPDATE_SECRET_ROTATION; + metadata: TUpdateSecretRotationV2DTO; +} + +interface DeleteSecretRotationEvent { + type: EventType.DELETE_SECRET_ROTATION; + metadata: TDeleteSecretRotationV2DTO; +} + +interface RotateSecretRotationEvent { + type: EventType.SECRET_ROTATION_ROTATE_SECRETS; + metadata: Pick & { + status: SecretRotationStatus; + rotationId: string; + jobId?: string | undefined; + occurredAt: Date; + message?: string | null | undefined; + }; +} + export type Event = | GetSecretsEvent | GetSecretEvent @@ -2500,4 +2574,11 @@ export type Event = | KmipOperationLocateEvent | KmipOperationRegisterEvent | CreateSecretRequestEvent - | SecretApprovalRequestReview; + | SecretApprovalRequestReview + | GetSecretRotationsEvent + | GetSecretRotationEvent + | GetSecretRotationCredentialsEvent + | CreateSecretRotationEvent + | UpdateSecretRotationEvent + | DeleteSecretRotationEvent + | RotateSecretRotationEvent; diff --git a/backend/src/ee/services/dynamic-secret/dynamic-secret-fns.ts b/backend/src/ee/services/dynamic-secret/dynamic-secret-fns.ts index 02b83c0f9..5c5b9f30c 100644 --- a/backend/src/ee/services/dynamic-secret/dynamic-secret-fns.ts +++ b/backend/src/ee/services/dynamic-secret/dynamic-secret-fns.ts @@ -8,7 +8,8 @@ import { getDbConnectionHost } from "@app/lib/knex"; export const verifyHostInputValidity = async (host: string, isGateway = false) => { const appCfg = getConfig(); - // if (appCfg.NODE_ENV === "development") return ["host.docker.internal"]; // incase you want to remove this check in dev + + if (appCfg.isDevelopmentMode) return [host]; const reservedHosts = [appCfg.DB_HOST || getDbConnectionHost(appCfg.DB_CONNECTION_URI)].concat( (appCfg.DB_READ_REPLICAS || []).map((el) => getDbConnectionHost(el.DB_CONNECTION_URI)), diff --git a/backend/src/ee/services/license/license-fns.ts b/backend/src/ee/services/license/license-fns.ts index 21d378802..3f4af174b 100644 --- a/backend/src/ee/services/license/license-fns.ts +++ b/backend/src/ee/services/license/license-fns.ts @@ -39,7 +39,7 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({ trial_end: null, has_used_trial: true, secretApproval: false, - secretRotation: true, + secretRotation: false, caCrl: false, instanceUserManagement: false, externalKms: false, diff --git a/backend/src/ee/services/license/license-types.ts b/backend/src/ee/services/license/license-types.ts index 34e350cf6..c2bf42e2e 100644 --- a/backend/src/ee/services/license/license-types.ts +++ b/backend/src/ee/services/license/license-types.ts @@ -56,7 +56,7 @@ export type TFeatureSet = { trial_end: null; has_used_trial: true; secretApproval: false; - secretRotation: true; + secretRotation: false; caCrl: false; instanceUserManagement: false; externalKms: false; diff --git a/backend/src/ee/services/permission/project-permission.ts b/backend/src/ee/services/permission/project-permission.ts index 2637db994..4d3fff12a 100644 --- a/backend/src/ee/services/permission/project-permission.ts +++ b/backend/src/ee/services/permission/project-permission.ts @@ -77,6 +77,15 @@ export enum ProjectPermissionSecretSyncActions { RemoveSecrets = "remove-secrets" } +export enum ProjectPermissionSecretRotationActions { + Read = "read", + ReadGeneratedCredentials = "read-generated-credentials", + Create = "create", + Edit = "edit", + Delete = "delete", + RotateSecrets = "rotate-secrets" +} + export enum ProjectPermissionKmipActions { CreateClients = "create-clients", UpdateClients = "update-clients", @@ -142,6 +151,11 @@ export type SecretImportSubjectFields = { secretPath: string; }; +export type SecretRotationsSubjectFields = { + environment: string; + secretPath: string; +}; + export type IdentityManagementSubjectFields = { identityId: string; }; @@ -184,7 +198,13 @@ export type ProjectPermissionSet = | [ProjectPermissionActions, ProjectPermissionSub.Settings] | [ProjectPermissionActions, ProjectPermissionSub.ServiceTokens] | [ProjectPermissionActions, ProjectPermissionSub.SecretApproval] - | [ProjectPermissionActions, ProjectPermissionSub.SecretRotation] + | [ + ProjectPermissionSecretRotationActions, + ( + | ProjectPermissionSub.SecretRotation + | (ForcedSubject & SecretRotationsSubjectFields) + ) + ] | [ ProjectPermissionIdentityActions, ProjectPermissionSub.Identity | (ForcedSubject & IdentityManagementSubjectFields) @@ -300,12 +320,6 @@ const GeneralPermissionSchema = [ "Describe what action an entity can take." ) }), - z.object({ - subject: z.literal(ProjectPermissionSub.SecretRotation).describe("The entity this permission pertains to."), - action: CASL_ACTION_SCHEMA_NATIVE_ENUM(ProjectPermissionActions).describe( - "Describe what action an entity can take." - ) - }), z.object({ subject: z.literal(ProjectPermissionSub.SecretRollback).describe("The entity this permission pertains to."), action: CASL_ACTION_SCHEMA_ENUM([ProjectPermissionActions.Read, ProjectPermissionActions.Create]).describe( @@ -487,6 +501,12 @@ export const ProjectPermissionV1Schema = z.discriminatedUnion("subject", [ "Describe what action an entity can take." ) }), + z.object({ + subject: z.literal(ProjectPermissionSub.SecretRotation).describe("The entity this permission pertains to."), + action: CASL_ACTION_SCHEMA_NATIVE_ENUM(ProjectPermissionActions).describe( + "Describe what action an entity can take." + ) + }), ...GeneralPermissionSchema ]); @@ -541,6 +561,16 @@ export const ProjectPermissionV2Schema = z.discriminatedUnion("subject", [ "When specified, only matching conditions will be allowed to access given resource." ).optional() }), + z.object({ + subject: z.literal(ProjectPermissionSub.SecretRotation).describe("The entity this permission pertains to."), + inverted: z.boolean().optional().describe("Whether rule allows or forbids."), + action: CASL_ACTION_SCHEMA_NATIVE_ENUM(ProjectPermissionSecretRotationActions).describe( + "Describe what action an entity can take." + ), + conditions: SecretConditionV1Schema.describe( + "When specified, only matching conditions will be allowed to access given resource." + ).optional() + }), ...GeneralPermissionSchema ]); @@ -554,7 +584,6 @@ const buildAdminPermissionRules = () => { ProjectPermissionSub.SecretFolders, ProjectPermissionSub.SecretImports, ProjectPermissionSub.SecretApproval, - ProjectPermissionSub.SecretRotation, ProjectPermissionSub.Role, ProjectPermissionSub.Integrations, ProjectPermissionSub.Webhooks, @@ -678,6 +707,18 @@ const buildAdminPermissionRules = () => { ProjectPermissionSub.Kmip ); + can( + [ + ProjectPermissionSecretRotationActions.Create, + ProjectPermissionSecretRotationActions.Edit, + ProjectPermissionSecretRotationActions.Delete, + ProjectPermissionSecretRotationActions.Read, + ProjectPermissionSecretRotationActions.ReadGeneratedCredentials, + ProjectPermissionSecretRotationActions.RotateSecrets + ], + ProjectPermissionSub.SecretRotation + ); + return rules; }; @@ -727,7 +768,7 @@ const buildMemberPermissionRules = () => { ); can([ProjectPermissionActions.Read], ProjectPermissionSub.SecretApproval); - can([ProjectPermissionActions.Read], ProjectPermissionSub.SecretRotation); + can([ProjectPermissionSecretRotationActions.Read], ProjectPermissionSub.SecretRotation); can([ProjectPermissionActions.Read, ProjectPermissionActions.Create], ProjectPermissionSub.SecretRollback); @@ -873,7 +914,7 @@ const buildViewerPermissionRules = () => { can(ProjectPermissionActions.Read, ProjectPermissionSub.SecretImports); can(ProjectPermissionActions.Read, ProjectPermissionSub.SecretApproval); can(ProjectPermissionActions.Read, ProjectPermissionSub.SecretRollback); - can(ProjectPermissionActions.Read, ProjectPermissionSub.SecretRotation); + can(ProjectPermissionSecretRotationActions.Read, ProjectPermissionSub.SecretRotation); can(ProjectPermissionMemberActions.Read, ProjectPermissionSub.Member); can(ProjectPermissionGroupActions.Read, ProjectPermissionSub.Groups); can(ProjectPermissionActions.Read, ProjectPermissionSub.Role); diff --git a/backend/src/ee/services/secret-rotation-v2/mssql-credentials/index.ts b/backend/src/ee/services/secret-rotation-v2/mssql-credentials/index.ts new file mode 100644 index 000000000..3ee1cf450 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/mssql-credentials/index.ts @@ -0,0 +1,3 @@ +export * from "./mssql-credentials-rotation-constants"; +export * from "./mssql-credentials-rotation-schemas"; +export * from "./mssql-credentials-rotation-types"; diff --git a/backend/src/ee/services/secret-rotation-v2/mssql-credentials/mssql-credentials-rotation-constants.ts b/backend/src/ee/services/secret-rotation-v2/mssql-credentials/mssql-credentials-rotation-constants.ts new file mode 100644 index 000000000..670c98997 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/mssql-credentials/mssql-credentials-rotation-constants.ts @@ -0,0 +1,16 @@ +import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { TSecretRotationV2ListItem } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-types"; +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; + +export const MSSQL_CREDENTIALS_ROTATION_LIST_OPTION: TSecretRotationV2ListItem = { + name: "Microsoft SQL Server Credentials", + type: SecretRotation.MsSqlCredentials, + connection: AppConnection.MsSql, + template: { + createUserStatement: `CREATE LOGIN [my_mssql_user] WITH PASSWORD = 'my_temporary_password'; CREATE USER [my_mssql_user] FOR LOGIN [my_mssql_user]; GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::dbo TO [my_mssql_user];`, + secretsMapping: { + username: "MSSQL_DB_USERNAME", + password: "MSSQL_DB_PASSWORD" + } + } +}; diff --git a/backend/src/ee/services/secret-rotation-v2/mssql-credentials/mssql-credentials-rotation-schemas.ts b/backend/src/ee/services/secret-rotation-v2/mssql-credentials/mssql-credentials-rotation-schemas.ts new file mode 100644 index 000000000..3f02d8144 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/mssql-credentials/mssql-credentials-rotation-schemas.ts @@ -0,0 +1,41 @@ +import { z } from "zod"; + +import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { + BaseCreateSecretRotationSchema, + BaseSecretRotationSchema, + BaseUpdateSecretRotationSchema +} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-schemas"; +import { + SqlCredentialsRotationParametersSchema, + SqlCredentialsRotationSecretsMappingSchema, + SqlCredentialsRotationTemplateSchema +} from "@app/ee/services/secret-rotation-v2/shared/sql-credentials"; +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; + +export const MsSqlCredentialsRotationSchema = BaseSecretRotationSchema(SecretRotation.MsSqlCredentials).extend({ + type: z.literal(SecretRotation.MsSqlCredentials), + parameters: SqlCredentialsRotationParametersSchema, + secretsMapping: SqlCredentialsRotationSecretsMappingSchema +}); + +export const CreateMsSqlCredentialsRotationSchema = BaseCreateSecretRotationSchema( + SecretRotation.MsSqlCredentials +).extend({ + parameters: SqlCredentialsRotationParametersSchema, + secretsMapping: SqlCredentialsRotationSecretsMappingSchema +}); + +export const UpdateMsSqlCredentialsRotationSchema = BaseUpdateSecretRotationSchema( + SecretRotation.MsSqlCredentials +).extend({ + parameters: SqlCredentialsRotationParametersSchema.optional(), + secretsMapping: SqlCredentialsRotationSecretsMappingSchema.optional() +}); + +export const MsSqlCredentialsRotationListItemSchema = z.object({ + name: z.literal("Microsoft SQL Server Credentials"), + connection: z.literal(AppConnection.MsSql), + type: z.literal(SecretRotation.MsSqlCredentials), + template: SqlCredentialsRotationTemplateSchema +}); diff --git a/backend/src/ee/services/secret-rotation-v2/mssql-credentials/mssql-credentials-rotation-types.ts b/backend/src/ee/services/secret-rotation-v2/mssql-credentials/mssql-credentials-rotation-types.ts new file mode 100644 index 000000000..ed707c4e4 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/mssql-credentials/mssql-credentials-rotation-types.ts @@ -0,0 +1,19 @@ +import { z } from "zod"; + +import { TMsSqlConnection } from "@app/services/app-connection/mssql"; + +import { + CreateMsSqlCredentialsRotationSchema, + MsSqlCredentialsRotationListItemSchema, + MsSqlCredentialsRotationSchema +} from "./mssql-credentials-rotation-schemas"; + +export type TMsSqlCredentialsRotation = z.infer; + +export type TMsSqlCredentialsRotationInput = z.infer; + +export type TMsSqlCredentialsRotationListItem = z.infer; + +export type TMsSqlCredentialsRotationWithConnection = TMsSqlCredentialsRotation & { + connection: TMsSqlConnection; +}; diff --git a/backend/src/ee/services/secret-rotation-v2/postgres-credentials/index.ts b/backend/src/ee/services/secret-rotation-v2/postgres-credentials/index.ts new file mode 100644 index 000000000..aba568d1d --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/postgres-credentials/index.ts @@ -0,0 +1,3 @@ +export * from "./postgres-credentials-rotation-constants"; +export * from "./postgres-credentials-rotation-schemas"; +export * from "./postgres-credentials-rotation-types"; diff --git a/backend/src/ee/services/secret-rotation-v2/postgres-credentials/postgres-credentials-rotation-constants.ts b/backend/src/ee/services/secret-rotation-v2/postgres-credentials/postgres-credentials-rotation-constants.ts new file mode 100644 index 000000000..68a31e8c9 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/postgres-credentials/postgres-credentials-rotation-constants.ts @@ -0,0 +1,16 @@ +import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { TSecretRotationV2ListItem } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-types"; +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; + +export const POSTGRES_CREDENTIALS_ROTATION_LIST_OPTION: TSecretRotationV2ListItem = { + name: "PostgreSQL Credentials", + type: SecretRotation.PostgresCredentials, + connection: AppConnection.Postgres, + template: { + createUserStatement: `CREATE USER "my_pg_user" WITH ENCRYPTED PASSWORD 'temporary_password'; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "my_pg_user";`, + secretsMapping: { + username: "POSTGRES_DB_USERNAME", + password: "POSTGRES_DB_PASSWORD" + } + } +}; diff --git a/backend/src/ee/services/secret-rotation-v2/postgres-credentials/postgres-credentials-rotation-schemas.ts b/backend/src/ee/services/secret-rotation-v2/postgres-credentials/postgres-credentials-rotation-schemas.ts new file mode 100644 index 000000000..0527a6116 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/postgres-credentials/postgres-credentials-rotation-schemas.ts @@ -0,0 +1,41 @@ +import { z } from "zod"; + +import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { + BaseCreateSecretRotationSchema, + BaseSecretRotationSchema, + BaseUpdateSecretRotationSchema +} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-schemas"; +import { + SqlCredentialsRotationParametersSchema, + SqlCredentialsRotationSecretsMappingSchema, + SqlCredentialsRotationTemplateSchema +} from "@app/ee/services/secret-rotation-v2/shared/sql-credentials"; +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; + +export const PostgresCredentialsRotationSchema = BaseSecretRotationSchema(SecretRotation.PostgresCredentials).extend({ + type: z.literal(SecretRotation.PostgresCredentials), + parameters: SqlCredentialsRotationParametersSchema, + secretsMapping: SqlCredentialsRotationSecretsMappingSchema +}); + +export const CreatePostgresCredentialsRotationSchema = BaseCreateSecretRotationSchema( + SecretRotation.PostgresCredentials +).extend({ + parameters: SqlCredentialsRotationParametersSchema, + secretsMapping: SqlCredentialsRotationSecretsMappingSchema +}); + +export const UpdatePostgresCredentialsRotationSchema = BaseUpdateSecretRotationSchema( + SecretRotation.PostgresCredentials +).extend({ + parameters: SqlCredentialsRotationParametersSchema.optional(), + secretsMapping: SqlCredentialsRotationSecretsMappingSchema.optional() +}); + +export const PostgresCredentialsRotationListItemSchema = z.object({ + name: z.literal("PostgreSQL Credentials"), + connection: z.literal(AppConnection.Postgres), + type: z.literal(SecretRotation.PostgresCredentials), + template: SqlCredentialsRotationTemplateSchema +}); diff --git a/backend/src/ee/services/secret-rotation-v2/postgres-credentials/postgres-credentials-rotation-types.ts b/backend/src/ee/services/secret-rotation-v2/postgres-credentials/postgres-credentials-rotation-types.ts new file mode 100644 index 000000000..28e9fb29f --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/postgres-credentials/postgres-credentials-rotation-types.ts @@ -0,0 +1,19 @@ +import { z } from "zod"; + +import { TPostgresConnection } from "@app/services/app-connection/postgres"; + +import { + CreatePostgresCredentialsRotationSchema, + PostgresCredentialsRotationListItemSchema, + PostgresCredentialsRotationSchema +} from "./postgres-credentials-rotation-schemas"; + +export type TPostgresCredentialsRotation = z.infer; + +export type TPostgresCredentialsRotationInput = z.infer; + +export type TPostgresCredentialsRotationListItem = z.infer; + +export type TPostgresCredentialsRotationWithConnection = TPostgresCredentialsRotation & { + connection: TPostgresConnection; +}; diff --git a/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-dal.ts b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-dal.ts new file mode 100644 index 000000000..45809aae5 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-dal.ts @@ -0,0 +1,465 @@ +import { Knex } from "knex"; + +import { TDbClient } from "@app/db"; +import { TableName } from "@app/db/schemas"; +import { TSecretRotationsV2 } from "@app/db/schemas/secret-rotations-v2"; +import { DatabaseError } from "@app/lib/errors"; +import { + buildFindFilter, + ormify, + prependTableNameToFindFilter, + selectAllTableCols, + sqlNestRelationships, + TFindOpt +} from "@app/lib/knex"; +import { TSecretFolderDALFactory } from "@app/services/secret-folder/secret-folder-dal"; + +export type TSecretRotationV2DALFactory = ReturnType; + +type TSecretRotationFindFilter = Parameters>[0]; +type TSecretRotationFindOptions = TFindOpt; + +const baseSecretRotationV2Query = ({ + filter = {}, + options, + db, + tx +}: { + db: TDbClient; + filter?: { projectId?: string } & TSecretRotationFindFilter; + options?: TSecretRotationFindOptions; + tx?: Knex; +}) => { + const { projectId, ...filters } = filter; + + const query = (tx || db.replicaNode())(TableName.SecretRotationV2) + .join(TableName.SecretFolder, `${TableName.SecretRotationV2}.folderId`, `${TableName.SecretFolder}.id`) + .join(TableName.Environment, `${TableName.SecretFolder}.envId`, `${TableName.Environment}.id`) + .join(TableName.AppConnection, `${TableName.SecretRotationV2}.connectionId`, `${TableName.AppConnection}.id`) + .select(selectAllTableCols(TableName.SecretRotationV2)) + .select( + // environment + db.ref("name").withSchema(TableName.Environment).as("envName"), + db.ref("id").withSchema(TableName.Environment).as("envId"), + db.ref("slug").withSchema(TableName.Environment).as("envSlug"), + db.ref("projectId").withSchema(TableName.Environment), + // entire connection + db.ref("name").withSchema(TableName.AppConnection).as("connectionName"), + db.ref("method").withSchema(TableName.AppConnection).as("connectionMethod"), + db.ref("app").withSchema(TableName.AppConnection).as("connectionApp"), + db.ref("orgId").withSchema(TableName.AppConnection).as("connectionOrgId"), + db.ref("encryptedCredentials").withSchema(TableName.AppConnection).as("connectionEncryptedCredentials"), + db.ref("description").withSchema(TableName.AppConnection).as("connectionDescription"), + db.ref("version").withSchema(TableName.AppConnection).as("connectionVersion"), + db.ref("createdAt").withSchema(TableName.AppConnection).as("connectionCreatedAt"), + db.ref("updatedAt").withSchema(TableName.AppConnection).as("connectionUpdatedAt"), + db + .ref("isPlatformManagedCredentials") + .withSchema(TableName.AppConnection) + .as("connectionIsPlatformManagedCredentials") + ); + + if (filter) { + /* eslint-disable @typescript-eslint/no-misused-promises */ + void query.where(buildFindFilter(prependTableNameToFindFilter(TableName.SecretRotationV2, filters))); + } + + if (projectId) { + void query.where(`${TableName.Environment}.projectId`, projectId); + } + + if (options) { + const { offset, limit, sort, count, countDistinct } = options; + if (countDistinct) { + void query.countDistinct(countDistinct); + } else if (count) { + void query.select(db.raw("COUNT(*) OVER() AS count")); + void query.select("*"); + } + if (limit) void query.limit(limit); + if (offset) void query.offset(offset); + if (sort) { + void query.orderBy(sort.map(([column, order, nulls]) => ({ column: column as string, order, nulls }))); + } + } + + return query; +}; + +const expandSecretRotation = >[number]>( + secretRotation: T, + folder: Awaited>[number] +) => { + const { + envId, + envName, + envSlug, + connectionApp, + connectionName, + connectionId, + connectionOrgId, + connectionEncryptedCredentials, + connectionMethod, + connectionDescription, + connectionCreatedAt, + connectionUpdatedAt, + connectionVersion, + connectionIsPlatformManagedCredentials, + ...el + } = secretRotation; + + return { + ...el, + connectionId, + environment: { id: envId, name: envName, slug: envSlug }, + connection: { + app: connectionApp, + id: connectionId, + name: connectionName, + orgId: connectionOrgId, + encryptedCredentials: connectionEncryptedCredentials, + method: connectionMethod, + description: connectionDescription, + createdAt: connectionCreatedAt, + updatedAt: connectionUpdatedAt, + version: connectionVersion, + isPlatformManagedCredentials: connectionIsPlatformManagedCredentials + }, + folder: { + id: folder!.id, + path: folder!.path + } + }; +}; + +export const secretRotationV2DALFactory = ( + db: TDbClient, + folderDAL: Pick +) => { + const secretRotationV2Orm = ormify(db, TableName.SecretRotationV2); + const secretRotationV2SecretMappingOrm = ormify(db, TableName.SecretRotationV2SecretMapping); + + const find = async ( + filter: Parameters<(typeof secretRotationV2Orm)["find"]>[0] & { projectId: string }, + options?: TSecretRotationFindOptions, + tx?: Knex + ) => { + try { + const secretRotations = await baseSecretRotationV2Query({ filter, db, tx, options }); + + if (!secretRotations.length) return []; + + const foldersWithPath = await folderDAL.findSecretPathByFolderIds( + filter.projectId, + secretRotations.map((rotation) => rotation.folderId), + tx + ); + + const folderRecord: Record = {}; + + foldersWithPath.forEach((folder) => { + if (folder) folderRecord[folder.id] = folder; + }); + + return secretRotations.map((rotation) => expandSecretRotation(rotation, folderRecord[rotation.folderId])); + } catch (error) { + throw new DatabaseError({ error, name: "Find - Secret Rotation V2" }); + } + }; + + const findWithMappedSecretsCount = async ( + { + search, + projectId, + ...filter + }: Parameters<(typeof secretRotationV2Orm)["find"]>[0] & { projectId: string; search?: string }, + tx?: Knex + ) => { + const query = (tx || db.replicaNode())(TableName.SecretRotationV2) + .join(TableName.SecretFolder, `${TableName.SecretRotationV2}.folderId`, `${TableName.SecretFolder}.id`) + .join(TableName.Environment, `${TableName.SecretFolder}.envId`, `${TableName.Environment}.id`) + .join( + TableName.SecretRotationV2SecretMapping, + `${TableName.SecretRotationV2SecretMapping}.rotationId`, + `${TableName.SecretRotationV2}.id` + ) + .join(TableName.SecretV2, `${TableName.SecretRotationV2SecretMapping}.secretId`, `${TableName.SecretV2}.id`) + .where(`${TableName.Environment}.projectId`, projectId) + .where(buildFindFilter(prependTableNameToFindFilter(TableName.SecretRotationV2, filter))) + .countDistinct(`${TableName.SecretRotationV2}.name`); + + if (search) { + void query + .whereILike(`${TableName.SecretV2}.key`, `%${search}%`) + .orWhereILike(`${TableName.SecretRotationV2}.name`, `%${search}%`); + } + + const result = await query; + + // @ts-expect-error knex infers wrong type... + return Number(result[0]?.count ?? 0); + }; + + const findWithMappedSecrets = async ( + { search, ...filter }: Parameters<(typeof secretRotationV2Orm)["find"]>[0] & { projectId: string; search?: string }, + options?: TSecretRotationFindOptions, + tx?: Knex + ) => { + try { + const extendedQuery = baseSecretRotationV2Query({ filter, db, tx, options }) + .join( + TableName.SecretRotationV2SecretMapping, + `${TableName.SecretRotationV2SecretMapping}.rotationId`, + `${TableName.SecretRotationV2}.id` + ) + .join(TableName.SecretV2, `${TableName.SecretV2}.id`, `${TableName.SecretRotationV2SecretMapping}.secretId`) + .leftJoin( + TableName.SecretV2JnTag, + `${TableName.SecretV2}.id`, + `${TableName.SecretV2JnTag}.${TableName.SecretV2}Id` + ) + .leftJoin( + TableName.SecretTag, + `${TableName.SecretV2JnTag}.${TableName.SecretTag}Id`, + `${TableName.SecretTag}.id` + ) + .leftJoin(TableName.ResourceMetadata, `${TableName.SecretV2}.id`, `${TableName.ResourceMetadata}.secretId`) + .select( + db.ref("id").withSchema(TableName.SecretV2).as("secretId"), + db.ref("key").withSchema(TableName.SecretV2).as("secretKey"), + db.ref("version").withSchema(TableName.SecretV2).as("secretVersion"), + db.ref("type").withSchema(TableName.SecretV2).as("secretType"), + db.ref("encryptedValue").withSchema(TableName.SecretV2).as("secretEncryptedValue"), + db.ref("encryptedComment").withSchema(TableName.SecretV2).as("secretEncryptedComment"), + db.ref("reminderNote").withSchema(TableName.SecretV2).as("secretReminderNote"), + db.ref("reminderRepeatDays").withSchema(TableName.SecretV2).as("secretReminderRepeatDays"), + db.ref("skipMultilineEncoding").withSchema(TableName.SecretV2).as("secretSkipMultilineEncoding"), + db.ref("metadata").withSchema(TableName.SecretV2).as("secretMetadata"), + db.ref("userId").withSchema(TableName.SecretV2).as("secretUserId"), + db.ref("folderId").withSchema(TableName.SecretV2).as("secretFolderId"), + db.ref("createdAt").withSchema(TableName.SecretV2).as("secretCreatedAt"), + db.ref("updatedAt").withSchema(TableName.SecretV2).as("secretUpdatedAt"), + db.ref("id").withSchema(TableName.SecretTag).as("tagId"), + db.ref("color").withSchema(TableName.SecretTag).as("tagColor"), + db.ref("slug").withSchema(TableName.SecretTag).as("tagSlug"), + db.ref("id").withSchema(TableName.ResourceMetadata).as("metadataId"), + db.ref("key").withSchema(TableName.ResourceMetadata).as("metadataKey"), + db.ref("value").withSchema(TableName.ResourceMetadata).as("metadataValue") + ); + + if (search) { + void extendedQuery.where((query) => { + void query + .whereILike(`${TableName.SecretV2}.key`, `%${search}%`) + .orWhereILike(`${TableName.SecretRotationV2}.name`, `%${search}%`); + }); + } + + const secretRotations = await extendedQuery; + + if (!secretRotations.length) return []; + + const foldersWithPath = await folderDAL.findSecretPathByFolderIds( + filter.projectId, + secretRotations.map((rotation) => rotation.folderId), + tx + ); + + const folderRecord: Record = {}; + + foldersWithPath.forEach((folder) => { + if (folder) folderRecord[folder.id] = folder; + }); + + return sqlNestRelationships({ + data: secretRotations, + key: "id", + parentMapper: (rotation) => expandSecretRotation(rotation, folderRecord[rotation.folderId]), + childrenMapper: [ + { + key: "secretId", + label: "secrets" as const, + mapper: ({ + secretId, + secretKey, + secretVersion, + secretType, + secretEncryptedValue, + secretEncryptedComment, + secretReminderNote, + secretReminderRepeatDays, + secretSkipMultilineEncoding, + secretMetadata, + secretUserId, + secretFolderId, + secretCreatedAt, + secretUpdatedAt, + id + }) => ({ + id: secretId, + key: secretKey, + version: secretVersion, + type: secretType, + encryptedValue: secretEncryptedValue, + encryptedComment: secretEncryptedComment, + reminderNote: secretReminderNote, + reminderRepeatDays: secretReminderRepeatDays, + skipMultilineEncoding: secretSkipMultilineEncoding, + metadata: secretMetadata, + userId: secretUserId, + folderId: secretFolderId, + createdAt: secretCreatedAt, + updatedAt: secretUpdatedAt, + rotationId: id, + isRotatedSecret: true + }), + childrenMapper: [ + { + key: "tagId", + label: "tags" as const, + mapper: ({ tagId: id, tagColor: color, tagSlug: slug }) => ({ + id, + color, + slug, + name: slug + }) + }, + { + key: "metadataId", + label: "secretMetadata" as const, + mapper: ({ metadataKey, metadataValue, metadataId }) => ({ + id: metadataId, + key: metadataKey, + value: metadataValue + }) + } + ] + } + ] + }); + } catch (error) { + throw new DatabaseError({ error, name: "Find with Mapped Secrets - Secret Rotation V2" }); + } + }; + + const findById = async (id: string, tx?: Knex) => { + try { + const secretRotation = await baseSecretRotationV2Query({ + filter: { id }, + db, + tx + }).first(); + + if (secretRotation) { + const [folderWithPath] = await folderDAL.findSecretPathByFolderIds( + secretRotation.projectId, + [secretRotation.folderId], + tx + ); + return expandSecretRotation(secretRotation, folderWithPath); + } + } catch (error) { + throw new DatabaseError({ error, name: "Find by ID - Secret Rotation V2" }); + } + }; + + const create = async (data: Parameters<(typeof secretRotationV2Orm)["create"]>[0], tx?: Knex) => { + const rotation = await secretRotationV2Orm.create(data, tx); + + const secretRotation = (await baseSecretRotationV2Query({ + filter: { id: rotation.id }, + db, + tx + }).first())!; + + const [folderWithPath] = await folderDAL.findSecretPathByFolderIds( + secretRotation.projectId, + [secretRotation.folderId], + tx + ); + + return expandSecretRotation(secretRotation, folderWithPath); + }; + + const updateById = async ( + rotationId: string, + data: Parameters<(typeof secretRotationV2Orm)["updateById"]>[1], + tx?: Knex + ) => { + const rotation = await secretRotationV2Orm.updateById(rotationId, data, tx); + + const secretRotation = (await baseSecretRotationV2Query({ + filter: { id: rotation.id }, + db, + tx + }).first())!; + + const [folderWithPath] = await folderDAL.findSecretPathByFolderIds( + secretRotation.projectId, + [secretRotation.folderId], + tx + ); + + return expandSecretRotation(secretRotation, folderWithPath); + }; + + const deleteById = async (rotationId: string, tx?: Knex) => { + const secretRotation = (await baseSecretRotationV2Query({ + filter: { id: rotationId }, + db, + tx + }).first())!; + + await secretRotationV2Orm.deleteById(rotationId, tx); + + const [folderWithPath] = await folderDAL.findSecretPathByFolderIds( + secretRotation.projectId, + [secretRotation.folderId], + tx + ); + + return expandSecretRotation(secretRotation, folderWithPath); + }; + + const findOne = async (filter: Parameters<(typeof secretRotationV2Orm)["findOne"]>[0], tx?: Knex) => { + try { + const secretRotation = await baseSecretRotationV2Query({ filter, db, tx }).first(); + + if (secretRotation) { + const [folderWithPath] = await folderDAL.findSecretPathByFolderIds( + secretRotation.projectId, + [secretRotation.folderId], + tx + ); + + return expandSecretRotation(secretRotation, folderWithPath); + } + } catch (error) { + throw new DatabaseError({ error, name: "Find One - Secret Rotation V2" }); + } + }; + + const findSecretRotationsToQueue = async (rotateBy: Date, tx?: Knex) => { + const secretRotations = await (tx || db.replicaNode())(TableName.SecretRotationV2) + .where(`${TableName.SecretRotationV2}.isAutoRotationEnabled`, true) + .whereNotNull(`${TableName.SecretRotationV2}.nextRotationAt`) + .andWhereRaw(`"nextRotationAt" <= ?`, [rotateBy]) + .select(selectAllTableCols(TableName.SecretRotationV2)); + + return secretRotations; + }; + + return { + ...secretRotationV2Orm, + find, + create, + findById, + updateById, + deleteById, + findOne, + insertSecretMappings: secretRotationV2SecretMappingOrm.insertMany, + findWithMappedSecrets, + findWithMappedSecretsCount, + findSecretRotationsToQueue + }; +}; diff --git a/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-enums.ts b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-enums.ts new file mode 100644 index 000000000..178a12516 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-enums.ts @@ -0,0 +1,9 @@ +export enum SecretRotation { + PostgresCredentials = "postgres-credentials", + MsSqlCredentials = "mssql-credentials" +} + +export enum SecretRotationStatus { + Success = "success", + Failed = "failed" +} diff --git a/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-fns.ts b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-fns.ts new file mode 100644 index 000000000..20709e05a --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-fns.ts @@ -0,0 +1,222 @@ +import { AxiosError } from "axios"; + +import { getConfig } from "@app/lib/config/env"; +import { KmsDataKey } from "@app/services/kms/kms-types"; + +import { MSSQL_CREDENTIALS_ROTATION_LIST_OPTION } from "./mssql-credentials"; +import { POSTGRES_CREDENTIALS_ROTATION_LIST_OPTION } from "./postgres-credentials"; +import { SecretRotation, SecretRotationStatus } from "./secret-rotation-v2-enums"; +import { TSecretRotationV2ServiceFactoryDep } from "./secret-rotation-v2-service"; +import { + TSecretRotationV2, + TSecretRotationV2GeneratedCredentials, + TSecretRotationV2ListItem, + TSecretRotationV2Raw +} from "./secret-rotation-v2-types"; + +const SECRET_ROTATION_LIST_OPTIONS: Record = { + [SecretRotation.PostgresCredentials]: POSTGRES_CREDENTIALS_ROTATION_LIST_OPTION, + [SecretRotation.MsSqlCredentials]: MSSQL_CREDENTIALS_ROTATION_LIST_OPTION +}; + +export const listSecretRotationOptions = () => { + return Object.values(SECRET_ROTATION_LIST_OPTIONS).sort((a, b) => a.name.localeCompare(b.name)); +}; + +const getNextUTCMidnight = ({ hours, minutes }: TSecretRotationV2["rotateAtUtc"] = { hours: 0, minutes: 0 }) => { + const now = new Date(); + + return new Date( + Date.UTC( + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate() + 1, // Add 1 day to get tomorrow + hours, + minutes, + 0, + 0 + ) + ); +}; + +const getNextUTCMinute = ({ minutes }: TSecretRotationV2["rotateAtUtc"] = { hours: 0, minutes: 0 }) => { + const now = new Date(); + return new Date( + Date.UTC( + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate(), + now.getUTCHours(), + now.getUTCMinutes() + 1, // Add 1 minute to get the next minute + minutes, // use minutes as seconds in dev + 0 + ) + ); +}; + +export const getNextUtcRotationInterval = (rotateAtUtc?: TSecretRotationV2["rotateAtUtc"]) => { + const appCfg = getConfig(); + + if (appCfg.isRotationDevelopmentMode) { + return getNextUTCMinute(rotateAtUtc); + } + + return getNextUTCMidnight(rotateAtUtc); +}; + +export const encryptSecretRotationCredentials = async ({ + projectId, + generatedCredentials, + kmsService +}: { + projectId: string; + generatedCredentials: TSecretRotationV2GeneratedCredentials; + kmsService: TSecretRotationV2ServiceFactoryDep["kmsService"]; +}) => { + const { encryptor } = await kmsService.createCipherPairWithDataKey({ + type: KmsDataKey.SecretManager, + projectId + }); + + const { cipherTextBlob: encryptedCredentialsBlob } = encryptor({ + plainText: Buffer.from(JSON.stringify(generatedCredentials)) + }); + + return encryptedCredentialsBlob; +}; + +export const decryptSecretRotationCredentials = async ({ + projectId, + encryptedGeneratedCredentials, + kmsService +}: { + projectId: string; + encryptedGeneratedCredentials: Buffer; + kmsService: TSecretRotationV2ServiceFactoryDep["kmsService"]; +}) => { + const { decryptor } = await kmsService.createCipherPairWithDataKey({ + type: KmsDataKey.SecretManager, + projectId + }); + + const decryptedPlainTextBlob = decryptor({ + cipherTextBlob: encryptedGeneratedCredentials + }); + + return JSON.parse(decryptedPlainTextBlob.toString()) as TSecretRotationV2GeneratedCredentials; +}; + +export const getSecretRotationRotateSecretJobOptions = ({ + id, + nextRotationAt +}: Pick) => { + const appCfg = getConfig(); + + return { + jobId: `secret-rotation-v2-rotate-${id}`, + retryLimit: appCfg.isRotationDevelopmentMode ? 3 : 5, + retryBackoff: true, + startAfter: nextRotationAt ?? undefined + }; +}; + +export const calculateNextRotationAt = ({ + rotateAtUtc, + isAutoRotationEnabled, + rotationInterval, + rotationStatus, + isManualRotation, + ...params +}: Pick< + TSecretRotationV2, + "isAutoRotationEnabled" | "lastRotatedAt" | "rotateAtUtc" | "rotationInterval" | "rotationStatus" +> & { isManualRotation: boolean }) => { + if (!isAutoRotationEnabled) return null; + + if (rotationStatus === SecretRotationStatus.Failed) { + return getNextUtcRotationInterval(rotateAtUtc); + } + + const lastRotatedAt = new Date(params.lastRotatedAt); + + const appCfg = getConfig(); + + if (appCfg.isRotationDevelopmentMode) { + // treat interval as minute + const nextRotation = new Date(lastRotatedAt.getTime() + rotationInterval * 60 * 1000); + + // in development mode we use rotateAtUtc.minutes as seconds + nextRotation.setUTCSeconds(rotateAtUtc.minutes); + nextRotation.setUTCMilliseconds(0); + + // If creation/manual rotation seconds are after the configured seconds we pad an additional minute + // to ensure a full interval has elapsed before rotation + if (isManualRotation && lastRotatedAt.getUTCSeconds() >= rotateAtUtc.minutes) { + nextRotation.setUTCMinutes(nextRotation.getUTCMinutes() + 1); + } + + return nextRotation; + } + + // production mode - rotationInterval = days + + const nextRotation = new Date(lastRotatedAt); + + nextRotation.setUTCHours(rotateAtUtc.hours); + nextRotation.setUTCMinutes(rotateAtUtc.minutes); + nextRotation.setUTCSeconds(0); + nextRotation.setUTCMilliseconds(0); + + // If creation/manual rotation was after the daily rotation time, + // we need pad an additional day to ensure full rotation interval + if ( + isManualRotation && + (lastRotatedAt.getUTCHours() > rotateAtUtc.hours || + (lastRotatedAt.getUTCHours() === rotateAtUtc.hours && lastRotatedAt.getUTCMinutes() >= rotateAtUtc.minutes)) + ) { + nextRotation.setUTCDate(nextRotation.getUTCDate() + rotationInterval + 1); + } else { + nextRotation.setUTCDate(nextRotation.getUTCDate() + rotationInterval); + } + + return nextRotation; +}; + +export const expandSecretRotation = async ( + { encryptedLastRotationMessage, ...secretRotation }: TSecretRotationV2Raw, + kmsService: TSecretRotationV2ServiceFactoryDep["kmsService"] +) => { + const { decryptor } = await kmsService.createCipherPairWithDataKey({ + type: KmsDataKey.SecretManager, + projectId: secretRotation.projectId + }); + + const lastRotationMessage = encryptedLastRotationMessage + ? decryptor({ + cipherTextBlob: encryptedLastRotationMessage + }).toString() + : null; + + return { + ...secretRotation, + lastRotationMessage + } as TSecretRotationV2; +}; + +const MAX_MESSAGE_LENGTH = 1024; + +export const parseRotationErrorMessage = (err: unknown): string => { + let errorMessage = `Infisical encountered an issue while generating credentials with the configured inputs: `; + + if (err instanceof AxiosError) { + errorMessage += err?.response?.data + ? JSON.stringify(err?.response?.data) + : err?.message ?? "An unknown error occurred."; + } else { + errorMessage += (err as Error)?.message || "An unknown error occurred."; + } + + return errorMessage.length <= MAX_MESSAGE_LENGTH + ? errorMessage + : `${errorMessage.substring(0, MAX_MESSAGE_LENGTH - 3)}...`; +}; diff --git a/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-maps.ts b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-maps.ts new file mode 100644 index 000000000..c0d59332b --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-maps.ts @@ -0,0 +1,12 @@ +import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; + +export const SECRET_ROTATION_NAME_MAP: Record = { + [SecretRotation.PostgresCredentials]: "PostgreSQL Credentials", + [SecretRotation.MsSqlCredentials]: "Microsoft SQL Sever Credentials" +}; + +export const SECRET_ROTATION_CONNECTION_MAP: Record = { + [SecretRotation.PostgresCredentials]: AppConnection.Postgres, + [SecretRotation.MsSqlCredentials]: AppConnection.MsSql +}; diff --git a/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-queue.ts b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-queue.ts new file mode 100644 index 000000000..51946bfa7 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-queue.ts @@ -0,0 +1,193 @@ +import { ProjectMembershipRole } from "@app/db/schemas"; +import { TSecretRotationV2DALFactory } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-dal"; +import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { + getNextUtcRotationInterval, + getSecretRotationRotateSecretJobOptions +} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-fns"; +import { SECRET_ROTATION_NAME_MAP } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-maps"; +import { TSecretRotationV2ServiceFactory } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-service"; +import { + TSecretRotationRotateSecretsJobPayload, + TSecretRotationSendNotificationJobPayload +} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-types"; +import { getConfig } from "@app/lib/config/env"; +import { logger } from "@app/lib/logger"; +import { QueueJobs, QueueName, TQueueServiceFactory } from "@app/queue"; +import { TProjectDALFactory } from "@app/services/project/project-dal"; +import { TProjectMembershipDALFactory } from "@app/services/project-membership/project-membership-dal"; +import { SmtpTemplates, TSmtpService } from "@app/services/smtp/smtp-service"; + +type TSecretRotationV2QueueServiceFactoryDep = { + queueService: TQueueServiceFactory; + secretRotationV2DAL: Pick; + secretRotationV2Service: Pick; + smtpService: Pick; + projectMembershipDAL: Pick; + projectDAL: Pick; +}; + +export const secretRotationV2QueueServiceFactory = async ({ + queueService, + secretRotationV2DAL, + secretRotationV2Service, + projectMembershipDAL, + projectDAL, + smtpService +}: TSecretRotationV2QueueServiceFactoryDep) => { + const appCfg = getConfig(); + + if (appCfg.isRotationDevelopmentMode) { + logger.warn("Secret Rotation V2 is in development mode."); + } + + await queueService.startPg( + QueueJobs.SecretRotationV2QueueRotations, + async () => { + try { + const rotateBy = getNextUtcRotationInterval(); + + const currentTime = new Date(); + + const secretRotations = await secretRotationV2DAL.findSecretRotationsToQueue(rotateBy); + + logger.info( + `secretRotationV2Queue: Queue Rotations [currentTime=${currentTime.toISOString()}] [rotateBy=${rotateBy.toISOString()}] [count=${ + secretRotations.length + }]` + ); + + for await (const rotation of secretRotations) { + logger.info( + `secretRotationV2Queue: Queue Rotation [rotationId=${rotation.id}] [lastRotatedAt=${new Date( + rotation.lastRotatedAt + ).toISOString()}] [rotateAt=${new Date(rotation.nextRotationAt!).toISOString()}]` + ); + await queueService.queuePg( + QueueJobs.SecretRotationV2RotateSecrets, + { + rotationId: rotation.id, + queuedAt: currentTime + }, + getSecretRotationRotateSecretJobOptions(rotation) + ); + } + } catch (error) { + logger.error(error, "secretRotationV2Queue: Queue Rotations Error:"); + throw error; + } + }, + { + batchSize: 1, + workerCount: 1, + pollingIntervalSeconds: 0.5 + } + ); + + await queueService.startPg( + QueueJobs.SecretRotationV2RotateSecrets, + async ([job]) => { + const { rotationId, queuedAt, isManualRotation } = job.data as TSecretRotationRotateSecretsJobPayload; + const { retryCount, retryLimit } = job; + + const logDetails = `[rotationId=${rotationId}] [jobId=${job.id}] retryCount=[${retryCount}/${retryLimit}]`; + + try { + const secretRotation = await secretRotationV2DAL.findById(rotationId); + + if (!secretRotation) throw new Error(`Secret rotation ${rotationId} not found`); + + if (!secretRotation.isAutoRotationEnabled) { + logger.info(`secretRotationV2Queue: Skipping Rotation - Auto-Rotation Disabled Since Queue ${logDetails}`); + } + + if (new Date(secretRotation.lastRotatedAt).getTime() >= new Date(queuedAt).getTime()) { + // rotated since being queued, skip rotation + logger.info(`secretRotationV2Queue: Skipping Rotation - Rotated Since Queue ${logDetails}`); + return; + } + + await secretRotationV2Service.rotateGeneratedCredentials(secretRotation, { + jobId: job.id, + shouldSendNotification: true, + isFinalAttempt: retryCount === retryLimit, + isManualRotation + }); + + logger.info(`secretRotationV2Queue: Secrets Rotated ${logDetails}`); + } catch (error) { + logger.error(error, `secretRotationV2Queue: Failed to Rotate Secrets ${logDetails}`); + throw error; + } + }, + { + batchSize: 1, + workerCount: 30, + pollingIntervalSeconds: 0.5 + } + ); + + await queueService.startPg( + QueueJobs.SecretRotationV2SendNotification, + async ([job]) => { + const { secretRotation } = job.data as TSecretRotationSendNotificationJobPayload; + try { + const { + name: rotationName, + type, + projectId, + lastRotationAttemptedAt, + folder, + environment, + id: rotationId + } = secretRotation; + + logger.info(`secretRotationV2Queue: Sending Status Notification [rotationId=${rotationId}]`); + + const projectMembers = await projectMembershipDAL.findAllProjectMembers(projectId); + const project = await projectDAL.findById(projectId); + + const projectAdmins = projectMembers.filter((member) => + member.roles.some((role) => role.role === ProjectMembershipRole.Admin) + ); + + const rotationType = SECRET_ROTATION_NAME_MAP[type as SecretRotation]; + + await smtpService.sendMail({ + recipients: projectAdmins.map((member) => member.user.email!).filter(Boolean), + template: SmtpTemplates.SecretRotationFailed, + subjectLine: `Secret Rotation Failed`, + substitutions: { + rotationName, + rotationType, + content: `Your ${rotationType} Rotation failed to rotate during it's scheduled rotation. The last rotation attempt occurred at ${new Date( + lastRotationAttemptedAt + ).toISOString()}. Please check the rotation status in Infisical for more details.`, + secretPath: folder.path, + environment: environment.name, + projectName: project.name, + rotationUrl: encodeURI(`${appCfg.SITE_URL}/secret-manager/${projectId}/secrets/${environment.slug}`) + } + }); + } catch (error) { + logger.error( + error, + `secretRotationV2Queue: Failed to Send Status Notification [rotationId=${secretRotation.id}]` + ); + throw error; + } + }, + { + batchSize: 1, + workerCount: 5, + pollingIntervalSeconds: 30 + } + ); + + await queueService.schedulePg( + QueueJobs.SecretRotationV2QueueRotations, + appCfg.isRotationDevelopmentMode ? "* * * * *" : "0 0 * * *", + undefined, + { tz: "UTC" } + ); +}; diff --git a/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-schemas.ts b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-schemas.ts new file mode 100644 index 000000000..b1be4ea22 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-schemas.ts @@ -0,0 +1,76 @@ +import { z } from "zod"; + +import { SecretRotationsV2Schema } from "@app/db/schemas/secret-rotations-v2"; +import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { SECRET_ROTATION_CONNECTION_MAP } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-maps"; +import { SecretRotations } from "@app/lib/api-docs"; +import { removeTrailingSlash } from "@app/lib/fn"; +import { slugSchema } from "@app/server/lib/schemas"; + +const RotateAtUtcSchema = z.object({ + hours: z.number().min(0).max(23), + minutes: z.number().min(0).max(59) +}); + +export const BaseSecretRotationSchema = (type: SecretRotation) => + SecretRotationsV2Schema.omit({ + encryptedGeneratedCredentials: true, + encryptedLastRotationMessage: true, + rotateAtUtc: true, + // unique to provider + type: true, + parameters: true, + secretMappings: true + }).extend({ + connection: z.object({ + app: z.literal(SECRET_ROTATION_CONNECTION_MAP[type]), + name: z.string(), + id: z.string().uuid() + }), + environment: z.object({ slug: z.string(), name: z.string(), id: z.string().uuid() }), + projectId: z.string(), + folder: z.object({ id: z.string(), path: z.string() }), + rotateAtUtc: RotateAtUtcSchema, + lastRotationMessage: z.string().nullish() + }); + +export const BaseCreateSecretRotationSchema = (type: SecretRotation) => + z.object({ + name: slugSchema({ field: "name" }).describe(SecretRotations.CREATE(type).name), + projectId: z.string().trim().min(1, "Project ID required").describe(SecretRotations.CREATE(type).projectId), + description: z + .string() + .trim() + .max(256, "Description cannot exceed 256 characters") + .nullish() + .describe(SecretRotations.CREATE(type).description), + connectionId: z.string().uuid().describe(SecretRotations.CREATE(type).connectionId), + environment: slugSchema({ field: "environment", max: 64 }).describe(SecretRotations.CREATE(type).environment), + secretPath: z + .string() + .trim() + .min(1, "Secret path required") + .transform(removeTrailingSlash) + .describe(SecretRotations.CREATE(type).secretPath), + isAutoRotationEnabled: z + .boolean() + .optional() + .default(true) + .describe(SecretRotations.CREATE(type).isAutoRotationEnabled), + rotationInterval: z.coerce.number().min(1).describe(SecretRotations.CREATE(type).rotationInterval), + rotateAtUtc: RotateAtUtcSchema.optional().describe(SecretRotations.CREATE(type).rotateAtUtc) + }); + +export const BaseUpdateSecretRotationSchema = (type: SecretRotation) => + z.object({ + name: slugSchema({ field: "name" }).describe(SecretRotations.UPDATE(type).name).optional(), + description: z + .string() + .trim() + .max(256, "Description cannot exceed 256 characters") + .nullish() + .describe(SecretRotations.UPDATE(type).description), + isAutoRotationEnabled: z.boolean().optional().describe(SecretRotations.UPDATE(type).isAutoRotationEnabled), + rotationInterval: z.coerce.number().min(1).optional().describe(SecretRotations.UPDATE(type).rotationInterval), + rotateAtUtc: RotateAtUtcSchema.optional().describe(SecretRotations.UPDATE(type).rotateAtUtc) + }); diff --git a/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-service.ts b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-service.ts new file mode 100644 index 000000000..aecf8242a --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-service.ts @@ -0,0 +1,1230 @@ +import { ForbiddenError, subject } from "@casl/ability"; +import isEqual from "lodash.isequal"; + +import { ActionProjectType, SecretType, TableName } from "@app/db/schemas"; +import { TAuditLogServiceFactory } from "@app/ee/services/audit-log/audit-log-service"; +import { EventType } from "@app/ee/services/audit-log/audit-log-types"; +import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; +import { hasSecretReadValueOrDescribePermission } from "@app/ee/services/permission/permission-fns"; +import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service"; +import { + ProjectPermissionSecretActions, + ProjectPermissionSecretRotationActions, + ProjectPermissionSub +} from "@app/ee/services/permission/project-permission"; +import { SecretRotation, SecretRotationStatus } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { + calculateNextRotationAt, + decryptSecretRotationCredentials, + encryptSecretRotationCredentials, + expandSecretRotation, + getNextUtcRotationInterval, + getSecretRotationRotateSecretJobOptions, + listSecretRotationOptions, + parseRotationErrorMessage +} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-fns"; +import { + SECRET_ROTATION_CONNECTION_MAP, + SECRET_ROTATION_NAME_MAP +} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-maps"; +import { + TCreateSecretRotationV2DTO, + TDeleteSecretRotationV2DTO, + TFindSecretRotationV2ByIdDTO, + TFindSecretRotationV2ByNameDTO, + TGetDashboardSecretRotationsV2, + TGetDashboardSecretRotationV2Count, + TListSecretRotationsV2ByProjectId, + TQuickSearchSecretRotationsV2, + TRotateSecretRotationV2, + TRotationFactory, + TSecretRotationRotateGeneratedCredentials, + TSecretRotationV2, + TSecretRotationV2Raw, + TSecretRotationV2WithConnection, + TUpdateSecretRotationV2DTO +} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-types"; +import { sqlCredentialsRotationFactory } from "@app/ee/services/secret-rotation-v2/shared/sql-credentials"; +import { TSecretSnapshotServiceFactory } from "@app/ee/services/secret-snapshot/secret-snapshot-service"; +import { KeyStorePrefixes, TKeyStoreFactory } from "@app/keystore/keystore"; +import { getConfig } from "@app/lib/config/env"; +import { DatabaseErrorCode } from "@app/lib/error-codes"; +import { BadRequestError, DatabaseError, InternalServerError, NotFoundError } from "@app/lib/errors"; +import { OrderByDirection, OrgServiceActor } from "@app/lib/types"; +import { QueueJobs, TQueueServiceFactory } from "@app/queue"; +import { decryptAppConnection } from "@app/services/app-connection/app-connection-fns"; +import { TAppConnectionServiceFactory } from "@app/services/app-connection/app-connection-service"; +import { ActorType } from "@app/services/auth/auth-type"; +import { TKmsServiceFactory } from "@app/services/kms/kms-service"; +import { KmsDataKey } from "@app/services/kms/kms-types"; +import { TProjectBotServiceFactory } from "@app/services/project-bot/project-bot-service"; +import { TResourceMetadataDALFactory } from "@app/services/resource-metadata/resource-metadata-dal"; +import { TSecretQueueFactory } from "@app/services/secret/secret-queue"; +import { SecretsOrderBy } from "@app/services/secret/secret-types"; +import { TSecretFolderDALFactory } from "@app/services/secret-folder/secret-folder-dal"; +import { TSecretTagDALFactory } from "@app/services/secret-tag/secret-tag-dal"; +import { TSecretV2BridgeDALFactory } from "@app/services/secret-v2-bridge/secret-v2-bridge-dal"; +import { + fnSecretBulkDelete, + fnSecretBulkInsert, + fnSecretBulkUpdate, + reshapeBridgeSecret +} from "@app/services/secret-v2-bridge/secret-v2-bridge-fns"; +import { TSecretVersionV2DALFactory } from "@app/services/secret-v2-bridge/secret-version-dal"; +import { TSecretVersionV2TagDALFactory } from "@app/services/secret-v2-bridge/secret-version-tag-dal"; + +import { TSecretRotationV2DALFactory } from "./secret-rotation-v2-dal"; + +export type TSecretRotationV2ServiceFactoryDep = { + secretRotationV2DAL: TSecretRotationV2DALFactory; + appConnectionService: Pick; + permissionService: Pick; + projectBotService: Pick; + kmsService: Pick; + licenseService: Pick; + auditLogService: Pick; + keyStore: Pick; + folderDAL: Pick; + secretV2BridgeDAL: Pick< + TSecretV2BridgeDALFactory, + "bulkUpdate" | "insertMany" | "deleteMany" | "upsertSecretReferences" | "find" + >; + secretVersionV2BridgeDAL: Pick; + secretVersionTagV2BridgeDAL: Pick; + resourceMetadataDAL: Pick; + secretTagDAL: Pick; + secretQueueService: Pick; + snapshotService: Pick; + queueService: Pick; +}; + +export type TSecretRotationV2ServiceFactory = ReturnType; + +const MAX_GENERATED_CREDENTIALS_LENGTH = 2; + +const SECRET_ROTATION_FACTORY_MAP: Record = { + [SecretRotation.PostgresCredentials]: sqlCredentialsRotationFactory, + [SecretRotation.MsSqlCredentials]: sqlCredentialsRotationFactory +}; + +export const secretRotationV2ServiceFactory = ({ + secretRotationV2DAL, + folderDAL, + secretV2BridgeDAL, + secretVersionV2BridgeDAL, + secretVersionTagV2BridgeDAL, + secretTagDAL, + resourceMetadataDAL, + permissionService, + appConnectionService, + projectBotService, + licenseService, + kmsService, + auditLogService, + secretQueueService, + snapshotService, + keyStore, + queueService +}: TSecretRotationV2ServiceFactoryDep) => { + const $queueSendSecretRotationStatusNotification = async (secretRotation: TSecretRotationV2Raw) => { + const appCfg = getConfig(); + if (!appCfg.isSmtpConfigured) return; // comment out if testing email sending + + await queueService.queuePg( + QueueJobs.SecretRotationV2SendNotification, + { secretRotation }, + { + jobId: `secret-rotation-v2-notification-${secretRotation.id}`, + retryLimit: 5, + retryBackoff: true + } + ); + }; + + const listSecretRotationsByProjectId = async ( + { projectId, type }: TListSecretRotationsV2ByProjectId, + actor: OrgServiceActor + ) => { + const plan = await licenseService.getPlan(actor.orgId); + + if (!plan.secretRotation) + throw new BadRequestError({ + message: "Failed to access secret rotations due to plan restriction. Upgrade plan to access secret rotations." + }); + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.SecretManager, + projectId + }); + + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionSecretRotationActions.Read, + ProjectPermissionSub.SecretRotation + ); + + const secretRotations = await secretRotationV2DAL.find({ + ...(type && { type }), + projectId + }); + + return Promise.all( + secretRotations + .filter((rotation) => + permission.can( + ProjectPermissionSecretRotationActions.Read, + subject(ProjectPermissionSub.SecretRotation, { + environment: rotation.environment.slug, + secretPath: rotation.folder.path + }) + ) + ) + .map((rotation) => expandSecretRotation(rotation, kmsService)) + ); + }; + + const findSecretRotationById = async ({ type, rotationId }: TFindSecretRotationV2ByIdDTO, actor: OrgServiceActor) => { + const plan = await licenseService.getPlan(actor.orgId); + + if (!plan.secretRotation) + throw new BadRequestError({ + message: "Failed to access secret rotation due to plan restriction. Upgrade plan to access secret rotations." + }); + + const secretRotation = await secretRotationV2DAL.findById(rotationId); + + if (!secretRotation) + throw new NotFoundError({ + message: `Could not find ${SECRET_ROTATION_NAME_MAP[type]} Rotation with ID "${rotationId}"` + }); + + const { projectId, environment, folder, connection } = secretRotation; + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.SecretManager, + projectId + }); + + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionSecretRotationActions.Read, + subject(ProjectPermissionSub.SecretRotation, { + environment: environment.slug, + secretPath: folder.path + }) + ); + + if (connection.app !== SECRET_ROTATION_CONNECTION_MAP[type]) + throw new BadRequestError({ + message: `Secret Rotation with ID "${rotationId}" is not configured for ${SECRET_ROTATION_NAME_MAP[type]}` + }); + + return expandSecretRotation(secretRotation, kmsService); + }; + + const findSecretRotationGeneratedCredentialsById = async ( + { type, rotationId }: TFindSecretRotationV2ByIdDTO, + actor: OrgServiceActor + ) => { + const plan = await licenseService.getPlan(actor.orgId); + + if (!plan.secretRotation) + throw new BadRequestError({ + message: + "Failed to access secret rotation credentials due to plan restriction. Upgrade plan to access secret rotations credentials." + }); + + const secretRotation = await secretRotationV2DAL.findById(rotationId); + + if (!secretRotation) + throw new NotFoundError({ + message: `Could not find ${SECRET_ROTATION_NAME_MAP[type]} Rotation with ID "${rotationId}"` + }); + + const { projectId, environment, folder, connection, encryptedGeneratedCredentials } = secretRotation; + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.SecretManager, + projectId + }); + + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionSecretRotationActions.ReadGeneratedCredentials, + subject(ProjectPermissionSub.SecretRotation, { + environment: environment.slug, + secretPath: folder.path + }) + ); + + if (connection.app !== SECRET_ROTATION_CONNECTION_MAP[type]) + throw new BadRequestError({ + message: `Secret Rotation with ID "${rotationId}" is not configured for ${SECRET_ROTATION_NAME_MAP[type]}` + }); + + const generatedCredentials = await decryptSecretRotationCredentials({ + projectId, + encryptedGeneratedCredentials, + kmsService + }); + + return { + generatedCredentials, + secretRotation: secretRotation as TSecretRotationV2 + }; + }; + + const findSecretRotationByName = async ( + { type, rotationName, secretPath, environment, projectId }: TFindSecretRotationV2ByNameDTO, + actor: OrgServiceActor + ) => { + const plan = await licenseService.getPlan(actor.orgId); + + if (!plan.secretRotation) + throw new BadRequestError({ + message: "Failed to access secret rotation due to plan restriction. Upgrade plan to access secret rotations." + }); + + const folder = await folderDAL.findBySecretPath(projectId, environment, secretPath); + + if (!folder) + throw new BadRequestError({ + message: `Could not find folder with path "${secretPath}" in environment "${environment}" for project with ID "${projectId}"` + }); + + // we prevent conflicting names within a folder + const secretRotation = await secretRotationV2DAL.findOne({ + name: rotationName, + folderId: folder.id + }); + + if (!secretRotation) + throw new NotFoundError({ + message: `Could not find ${SECRET_ROTATION_NAME_MAP[type]} Rotation with name "${rotationName}"` + }); + + const { connection, id: rotationId } = secretRotation; + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.SecretManager, + projectId + }); + + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionSecretRotationActions.Read, + subject(ProjectPermissionSub.SecretRotation, { + environment, + secretPath + }) + ); + + if (connection.app !== SECRET_ROTATION_CONNECTION_MAP[type]) + throw new BadRequestError({ + message: `Secret Rotation with ID "${rotationId}" is not configured for ${SECRET_ROTATION_NAME_MAP[type]}` + }); + + return expandSecretRotation(secretRotation, kmsService); + }; + + const createSecretRotation = async ( + { + projectId, + secretPath, + environment, + rotateAtUtc = { hours: 0, minutes: 0 }, + ...payload + }: TCreateSecretRotationV2DTO, + actor: OrgServiceActor + ) => { + const plan = await licenseService.getPlan(actor.orgId); + + if (!plan.secretRotation) + throw new BadRequestError({ + message: "Failed to create secret rotation due to plan restriction. Upgrade plan to create secret rotations." + }); + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.SecretManager, + projectId + }); + + const { shouldUseSecretV2Bridge } = await projectBotService.getBotKey(projectId); + + if (!shouldUseSecretV2Bridge) + throw new BadRequestError({ message: "Project version does not support Secret Rotation V2" }); + + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionSecretRotationActions.Create, + subject(ProjectPermissionSub.SecretRotation, { environment, secretPath }) + ); + + const folder = await folderDAL.findBySecretPath(projectId, environment, secretPath); + + if (!folder) + throw new BadRequestError({ + message: `Could not find folder with path "${secretPath}" in environment "${environment}" for project with ID "${projectId}"` + }); + + const typeApp = SECRET_ROTATION_CONNECTION_MAP[payload.type]; + + // validates permission to connect and app is valid for rotation type + const connection = await appConnectionService.connectAppConnectionById(typeApp, payload.connectionId, actor); + + const rotationFactory = SECRET_ROTATION_FACTORY_MAP[payload.type]({ + parameters: payload.parameters, + secretsMapping: payload.secretsMapping, + connection + } as TSecretRotationV2WithConnection); + + try { + const currentTime = new Date(); + + // callback structure to support transactional rollback when possible + const secretRotation = await rotationFactory.issueCredentials(async (newCredentials) => { + const encryptedGeneratedCredentials = await encryptSecretRotationCredentials({ + generatedCredentials: [newCredentials], + projectId, + kmsService + }); + + return secretRotationV2DAL.transaction(async (tx) => { + const createdRotation = await secretRotationV2DAL.create( + { + folderId: folder.id, + ...payload, + encryptedGeneratedCredentials, + rotateAtUtc, + rotationStatus: SecretRotationStatus.Success, + lastRotationAttemptedAt: currentTime, + lastRotatedAt: currentTime, + nextRotationAt: calculateNextRotationAt({ + lastRotatedAt: currentTime, + isAutoRotationEnabled: Boolean(payload.isAutoRotationEnabled), + rotateAtUtc, + rotationInterval: payload.rotationInterval, + rotationStatus: SecretRotationStatus.Success, + isManualRotation: true + }) + }, + tx + ); + + const secretsPayload = rotationFactory.getSecretsPayload(newCredentials); + + const { encryptor } = await kmsService.createCipherPairWithDataKey({ + type: KmsDataKey.SecretManager, + projectId + }); + + const mappedSecrets = await fnSecretBulkInsert({ + folderId: folder.id, + orgId: connection.orgId, + tx, + inputSecrets: secretsPayload.map(({ key, value }) => ({ + key, + encryptedValue: encryptor({ + plainText: Buffer.from(value) + }).cipherTextBlob, + references: [] + })), + secretDAL: secretV2BridgeDAL, + secretVersionDAL: secretVersionV2BridgeDAL, + secretVersionTagDAL: secretVersionTagV2BridgeDAL, + secretTagDAL, + resourceMetadataDAL + }); + + await secretRotationV2DAL.insertSecretMappings( + mappedSecrets.map((secret) => ({ + secretId: secret.id, + rotationId: createdRotation.id + })), + tx + ); + + return createdRotation; + }); + }); + + await snapshotService.performSnapshot(folder.id); + await secretQueueService.syncSecrets({ + orgId: connection.orgId, + secretPath, + projectId, + environmentSlug: environment, + excludeReplication: true + }); + + return await expandSecretRotation(secretRotation, kmsService); + } catch (err) { + if (err instanceof DatabaseError) { + const error = err.error as { code: string; message: string; table: string }; + + if (error.code === DatabaseErrorCode.UniqueViolation) { + switch (error.table) { + case TableName.SecretRotationV2: + throw new BadRequestError({ + message: `A Secret Rotation with the name "${payload.name}" already exists at the secret path "${secretPath}"` + }); + case TableName.SecretV2: + throw new BadRequestError({ + message: `One or more of the following secrets already exists at the secret path "${secretPath}": ${Object.values( + payload.secretsMapping + ).join(", ")}` + }); + default: + throw err; + } + } + + throw err; + } + + throw new BadRequestError({ + message: parseRotationErrorMessage(err) + }); + } + }; + + const updateSecretRotation = async ( + { type, rotationId, ...payload }: TUpdateSecretRotationV2DTO, + actor: OrgServiceActor + ) => { + const plan = await licenseService.getPlan(actor.orgId); + + if (!plan.secretRotation) + throw new BadRequestError({ + message: "Failed to update secret rotation due to plan restriction. Upgrade plan to update secret rotations." + }); + + const secretRotation = await secretRotationV2DAL.findById(rotationId); + + if (!secretRotation) + throw new NotFoundError({ + message: `Could not find ${SECRET_ROTATION_NAME_MAP[type]} Rotation with ID ${rotationId}` + }); + + const { folder, environment, projectId, folderId, connection, secretsMapping } = secretRotation; + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.SecretManager, + projectId + }); + + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionSecretRotationActions.Edit, + subject(ProjectPermissionSub.SecretRotation, { + environment: environment.slug, + secretPath: folder.path + }) + ); + + if (connection.app !== SECRET_ROTATION_CONNECTION_MAP[type]) + throw new BadRequestError({ + message: `Secret Rotation with ID "${rotationId}" is not configured for ${SECRET_ROTATION_NAME_MAP[type]}` + }); + + const nextRotationAt = calculateNextRotationAt({ + ...(secretRotation as TSecretRotationV2), + ...payload, + isManualRotation: false + }); + + try { + const updatedSecretRotation = await secretRotationV2DAL.transaction(async (tx) => { + if (payload.secretsMapping && !isEqual(payload.secretsMapping, secretsMapping)) { + // update mapped secrets names + await fnSecretBulkUpdate({ + folderId, + orgId: connection.orgId, + tx, + inputSecrets: Object.entries(secretsMapping as TSecretRotationV2["secretsMapping"]).map( + ([mappingKey, secretKey]) => ({ + filter: { + key: secretKey, + folderId, + type: SecretType.Shared + }, + data: { + key: payload.secretsMapping![mappingKey as keyof TSecretRotationV2["secretsMapping"]] + } + }) + ), + secretDAL: secretV2BridgeDAL, + secretVersionDAL: secretVersionV2BridgeDAL, + secretVersionTagDAL: secretVersionTagV2BridgeDAL, + secretTagDAL, + resourceMetadataDAL + }); + + await snapshotService.performSnapshot(folder.id); + await secretQueueService.syncSecrets({ + orgId: connection.orgId, + secretPath: folder.path, + projectId, + environmentSlug: environment.slug, + excludeReplication: true + }); + } + + return secretRotationV2DAL.updateById( + rotationId, + { + ...payload, + nextRotationAt + }, + tx + ); + }); + + // queue for rotation if adjusted time falls before next cron + if (nextRotationAt && nextRotationAt.getTime() < getNextUtcRotationInterval().getTime()) { + await queueService.queuePg( + QueueJobs.SecretRotationV2RotateSecrets, + { rotationId, queuedAt: new Date(), isManualRotation: true }, + getSecretRotationRotateSecretJobOptions(updatedSecretRotation) + ); + } + + return await expandSecretRotation(updatedSecretRotation, kmsService); + } catch (err) { + if (err instanceof DatabaseError) { + const error = err.error as { code: string; message: string; table: string }; + + if (error.code === DatabaseErrorCode.UniqueViolation) { + switch (error.table) { + case TableName.SecretRotationV2: + if (payload.name) + throw new BadRequestError({ + message: `A Secret Rotation with the name "${payload.name}" already exists at the secret path "${folder.path}"` + }); + break; + case TableName.SecretV2: + if (payload.secretsMapping) + throw new BadRequestError({ + message: `One or more of the following secrets already exists at the secret path "${ + folder.path + }": ${Object.values(payload.secretsMapping).join(", ")}` + }); + break; + default: + throw err; + } + } + } + + throw err; + } + }; + + const deleteSecretRotation = async ( + { type, rotationId, deleteSecrets, revokeGeneratedCredentials }: TDeleteSecretRotationV2DTO, + actor: OrgServiceActor + ) => { + const plan = await licenseService.getPlan(actor.orgId); + + if (!plan.secretRotation) + throw new BadRequestError({ + message: "Failed to delete secret rotation due to plan restriction. Upgrade plan to delete secret rotation." + }); + + const secretRotation = await secretRotationV2DAL.findById(rotationId); + + if (!secretRotation) + throw new NotFoundError({ + message: `Could not find ${SECRET_ROTATION_NAME_MAP[type]} Rotation with ID "${rotationId}"` + }); + + const { folder, environment, projectId, encryptedGeneratedCredentials, connection, folderId, secretsMapping } = + secretRotation; + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.SecretManager, + projectId + }); + + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionSecretRotationActions.Delete, + subject(ProjectPermissionSub.SecretRotation, { + environment: environment.slug, + secretPath: folder.path + }) + ); + + if (connection.app !== SECRET_ROTATION_CONNECTION_MAP[type]) + throw new BadRequestError({ + message: `Secret Rotation with ID "${rotationId}" is not configured for ${SECRET_ROTATION_NAME_MAP[type]}` + }); + + const deleteTransaction = secretRotationV2DAL.transaction(async (tx) => { + if (deleteSecrets) { + await fnSecretBulkDelete({ + secretDAL: secretV2BridgeDAL, + secretQueueService, + inputSecrets: Object.values(secretsMapping as TSecretRotationV2["secretsMapping"]).map((secretKey) => ({ + secretKey, + type: SecretType.Shared + })), + projectId, + folderId, + actorId: actor.id, // not actually used since rotated secrets are shared + tx + }); + + await snapshotService.performSnapshot(folder.id); + await secretQueueService.syncSecrets({ + orgId: connection.orgId, + secretPath: folder.path, + projectId, + environmentSlug: environment.slug, + excludeReplication: true + }); + } + + return secretRotationV2DAL.deleteById(rotationId, tx); + }); + + if (revokeGeneratedCredentials) { + const appConnection = await decryptAppConnection(connection, kmsService); + + const rotationFactory = SECRET_ROTATION_FACTORY_MAP[type]({ + ...secretRotation, + connection: appConnection + } as TSecretRotationV2WithConnection); + + const generatedCredentials = await decryptSecretRotationCredentials({ + encryptedGeneratedCredentials, + projectId, + kmsService + }); + + await rotationFactory.revokeCredentials(generatedCredentials, async () => deleteTransaction); + } else { + await deleteTransaction; + } + + return expandSecretRotation(secretRotation, kmsService); + }; + + const rotateGeneratedCredentials = async ( + secretRotation: TSecretRotationV2Raw, + { + auditLogInfo, + jobId, + shouldSendNotification, + isFinalAttempt = true, + isManualRotation = false + }: TSecretRotationRotateGeneratedCredentials = {} + ) => { + const { + connection, + folder, + environment, + encryptedGeneratedCredentials, + activeIndex, + projectId, + type, + folderId, + id: rotationId, + parameters, + secretsMapping + } = secretRotation; + + let lock: Awaited> | undefined; + + try { + try { + lock = await keyStore.acquireLock([KeyStorePrefixes.SecretRotationLock(rotationId)], 60 * 1000); + } catch (e) { + throw new InternalServerError({ + message: "Failed to acquire rotation lock." + }); + } + + const appConnection = await decryptAppConnection(connection, kmsService); + + const generatedCredentials = await decryptSecretRotationCredentials({ + projectId, + encryptedGeneratedCredentials, + kmsService + }); + + const inactiveIndex = (activeIndex + 1) % MAX_GENERATED_CREDENTIALS_LENGTH; + + const inactiveCredentials = generatedCredentials[inactiveIndex]; + + const rotationFactory = SECRET_ROTATION_FACTORY_MAP[type as SecretRotation]({ + ...secretRotation, + connection: appConnection + } as TSecretRotationV2WithConnection); + + const updatedRotation = await rotationFactory.rotateCredentials(inactiveCredentials, async (newCredentials) => { + const updatedCredentials = [...generatedCredentials]; + updatedCredentials[inactiveIndex] = newCredentials; + + const encryptedUpdatedCredentials = await encryptSecretRotationCredentials({ + projectId, + generatedCredentials: updatedCredentials, + kmsService + }); + + return secretRotationV2DAL.transaction(async (tx) => { + const secretsPayload = rotationFactory.getSecretsPayload(newCredentials); + + const { encryptor } = await kmsService.createCipherPairWithDataKey({ + type: KmsDataKey.SecretManager, + projectId + }); + + // update mapped secrets with new credential values + await fnSecretBulkUpdate({ + folderId, + orgId: connection.orgId, + tx, + inputSecrets: secretsPayload.map(({ key, value }) => ({ + filter: { + key, + folderId, + type: SecretType.Shared + }, + data: { + encryptedValue: encryptor({ + plainText: Buffer.from(value) + }).cipherTextBlob, + references: [] + } + })), + secretDAL: secretV2BridgeDAL, + secretVersionDAL: secretVersionV2BridgeDAL, + secretVersionTagDAL: secretVersionTagV2BridgeDAL, + secretTagDAL, + resourceMetadataDAL + }); + + const currentTime = new Date(); + + return secretRotationV2DAL.updateById( + secretRotation.id, + { + encryptedGeneratedCredentials: encryptedUpdatedCredentials, + activeIndex: inactiveIndex, + lastRotatedAt: currentTime, + lastRotationAttemptedAt: currentTime, + nextRotationAt: calculateNextRotationAt({ + ...(secretRotation as TSecretRotationV2), + rotationStatus: SecretRotationStatus.Success, + lastRotatedAt: currentTime, + isManualRotation + }), + rotationStatus: SecretRotationStatus.Success, + lastRotationJobId: jobId, + encryptedLastRotationMessage: null + }, + tx + ); + }); + }); + + await auditLogService.createAuditLog({ + ...(auditLogInfo ?? { + actor: { + type: ActorType.PLATFORM, + metadata: {} + } + }), + projectId, + event: { + type: EventType.SECRET_ROTATION_ROTATE_SECRETS, + metadata: { + type, + rotationId, + connectionId: connection.id, + folderId, + parameters, + secretsMapping, + status: SecretRotationStatus.Success, + occurredAt: new Date(), + message: null, + jobId + } + } + }); + + await snapshotService.performSnapshot(folder.id); + await secretQueueService.syncSecrets({ + orgId: connection.orgId, + secretPath: folder.path, + projectId, + environmentSlug: environment.slug, + excludeReplication: true + }); + + return updatedRotation; + } catch (error) { + const errorMessage = parseRotationErrorMessage(error); + + if (isFinalAttempt) { + const { encryptor } = await kmsService.createCipherPairWithDataKey({ + type: KmsDataKey.SecretManager, + projectId + }); + + const { cipherTextBlob: encryptedMessage } = encryptor({ + plainText: Buffer.from(errorMessage) + }); + + const updatedRotation = await secretRotationV2DAL.updateById(secretRotation.id, { + rotationStatus: SecretRotationStatus.Failed, + lastRotationJobId: jobId, + lastRotationAttemptedAt: new Date(), + encryptedLastRotationMessage: encryptedMessage, + nextRotationAt: getNextUtcRotationInterval(secretRotation.rotateAtUtc as TSecretRotationV2["rotateAtUtc"]) + }); + + if (shouldSendNotification) { + await $queueSendSecretRotationStatusNotification(updatedRotation); + } + } + + await auditLogService.createAuditLog({ + ...(auditLogInfo ?? { + actor: { + type: ActorType.PLATFORM, + metadata: {} + } + }), + projectId, + event: { + type: EventType.SECRET_ROTATION_ROTATE_SECRETS, + metadata: { + type, + rotationId, + connectionId: connection.id, + folderId, + parameters, + secretsMapping, + occurredAt: new Date(), + status: SecretRotationStatus.Failed, + message: isFinalAttempt ? "See Rotation status for details" : "Rotation will be re-attempted shortly...", + jobId + } + } + }); + + throw new BadRequestError({ message: errorMessage }); + } finally { + await lock?.release(); + } + }; + + const rotateSecretRotation = async ( + { rotationId, type, auditLogInfo }: TRotateSecretRotationV2, + actor: OrgServiceActor + ) => { + const plan = await licenseService.getPlan(actor.orgId); + + if (!plan.secretRotation) + throw new BadRequestError({ + message: + "Failed to rotate secret rotation secrets due to plan restriction. Upgrade plan to rotate secret rotation secrets." + }); + + const secretRotation = await secretRotationV2DAL.findById(rotationId); + + if (!secretRotation) + throw new NotFoundError({ + message: `Could not find ${SECRET_ROTATION_NAME_MAP[type]} Rotation with ID "${rotationId}"` + }); + + const { projectId, environment, folder, connection } = secretRotation; + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.SecretManager, + projectId + }); + + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionSecretRotationActions.RotateSecrets, + subject(ProjectPermissionSub.SecretRotation, { + environment: environment.slug, + secretPath: folder.path + }) + ); + + if (connection.app !== SECRET_ROTATION_CONNECTION_MAP[type]) + throw new BadRequestError({ + message: `Secret Rotation with ID "${rotationId}" is not configured for ${SECRET_ROTATION_NAME_MAP[type]}` + }); + + const isRotationOccurring = Boolean(await keyStore.getItem(KeyStorePrefixes.SecretRotationLock(secretRotation.id))); + + if (isRotationOccurring) + throw new BadRequestError({ message: `A rotation is already in progress. Please try again shortly.` }); + + try { + const updatedRotation = await rotateGeneratedCredentials(secretRotation, { + auditLogInfo, + isManualRotation: true + }); + + return await expandSecretRotation(updatedRotation, kmsService); + } catch (err) { + throw new InternalServerError({ + message: (err as Error).message ?? "Failed to rotate secrets: check Rotation status for details." + }); + } + }; + + const getDashboardSecretRotationCount = async ( + { projectId, environments, secretPath, search }: TGetDashboardSecretRotationV2Count, + actor: OrgServiceActor + ) => { + // we don't check plan for dashboard like dynamic secret, actions will be prevented + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.SecretManager, + projectId + }); + + const permissiveEnvironments = environments.filter((environment) => + permission.can( + ProjectPermissionSecretRotationActions.Read, + subject(ProjectPermissionSub.SecretRotation, { environment, secretPath }) + ) + ); + + if (!permissiveEnvironments.length) return 0; + + const folders = await folderDAL.findBySecretPathMultiEnv(projectId, permissiveEnvironments, secretPath); + + if (!folders.length) { + throw new NotFoundError({ + message: `Folders with path '${secretPath}' in environments with slugs '${permissiveEnvironments.join( + ", " + )}' not found` + }); + } + + const count = await secretRotationV2DAL.findWithMappedSecretsCount({ + $in: { folderId: folders.map((folder) => folder.id) }, + search, + projectId + }); + + return count; + }; + + const getDashboardSecretRotations = async ( + { + projectId, + environments, + secretPath, + search, + limit, + offset = 0, + orderBy = SecretsOrderBy.Name, + orderDirection = OrderByDirection.ASC + }: TGetDashboardSecretRotationsV2, + actor: OrgServiceActor + ) => { + // we don't check plan for dashboard like dynamic secret, actions will be prevented + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.SecretManager, + projectId + }); + + const permissiveEnvironments = environments.filter((environment) => + permission.can( + ProjectPermissionSecretRotationActions.Read, + subject(ProjectPermissionSub.SecretRotation, { environment, secretPath }) + ) + ); + + if (!permissiveEnvironments.length) return []; + + const folders = await folderDAL.findBySecretPathMultiEnv(projectId, permissiveEnvironments, secretPath); + + if (!folders.length) { + throw new NotFoundError({ + message: `Folders with path '${secretPath}' in environments with slugs '${permissiveEnvironments.join( + ", " + )}' not found` + }); + } + + const folderIds = folders.map((folder) => folder.id); + + const secretRotations = await secretRotationV2DAL.findWithMappedSecrets( + { + $in: { folderId: folderIds }, + search, + projectId + }, + { + limit, + offset, + sort: orderBy ? [[orderBy, orderDirection]] : undefined + } + ); + + const { decryptor: secretManagerDecryptor } = await kmsService.createCipherPairWithDataKey({ + type: KmsDataKey.SecretManager, + projectId + }); + + const secretRotationsWithSecrets = await Promise.all( + secretRotations.map(async ({ secrets, ...rotation }) => { + const decryptedSecrets = secrets.map((secret) => { + const canDescribeSecret = hasSecretReadValueOrDescribePermission( + permission, + ProjectPermissionSecretActions.DescribeSecret, + { + environment: rotation.environment.slug, + secretPath: rotation.folder.path, + secretName: secret.key, + // TODO: scott/akhil our mapper seems to not propagate children's children types + // @ts-expect-error eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-assignment + secretTags: (secret.tags as { slug: string; name: string; color: string }[]).map((i) => i.slug) + } + ); + + if (!canDescribeSecret) { + return null; // return null so we know to display empty row in dashboard + } + + const secretValueHidden = !hasSecretReadValueOrDescribePermission( + permission, + ProjectPermissionSecretActions.ReadValue, + { + environment: rotation.environment.slug, + secretPath: rotation.folder.path, + secretName: secret.key, + // TODO: scott/akhil our mapper seems to not propagate children's children types + // @ts-expect-error eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-assignment + secretTags: (secret.tags as { slug: string; name: string; color: string }[]).map((i) => i.slug) + } + ); + + return reshapeBridgeSecret( + projectId, + rotation.environment.slug, + rotation.folder.path, + { + ...secret, + value: secret.encryptedValue + ? secretManagerDecryptor({ cipherTextBlob: secret.encryptedValue }).toString() + : "", + comment: secret.encryptedComment + ? secretManagerDecryptor({ cipherTextBlob: secret.encryptedComment }).toString() + : "" + }, + secretValueHidden && secret.type === SecretType.Shared + ); + }); + + const expandedRotation = await expandSecretRotation(rotation, kmsService); + + return { + ...expandedRotation, + secrets: decryptedSecrets + }; + }) + ); + + return secretRotationsWithSecrets as (TSecretRotationV2 & { + secrets: Awaited>[]; + })[]; + }; + + const getQuickSearchSecretRotations = async ( + { folderMappings, filters: { search, ...options }, projectId }: TQuickSearchSecretRotationsV2, + actor: OrgServiceActor + ) => { + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + projectId, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.SecretManager + }); + + const permissiveFolderMappings = folderMappings.filter(({ path, environment }) => + permission.can( + ProjectPermissionSecretRotationActions.Read, + subject(ProjectPermissionSub.SecretRotation, { environment, secretPath: path }) + ) + ); + + if (!permissiveFolderMappings.length) return []; + + const secretRotations = await secretRotationV2DAL.find( + { + projectId, + $search: { + name: `%${search}%` + }, + $in: { + folderId: permissiveFolderMappings.map(({ folderId }) => folderId) + } + }, + options + ); + + return secretRotations as TSecretRotationV2[]; + }; + + return { + listSecretRotationOptions, + listSecretRotationsByProjectId, + createSecretRotation, + updateSecretRotation, + findSecretRotationById, + findSecretRotationByName, + deleteSecretRotation, + findSecretRotationGeneratedCredentialsById, + rotateSecretRotation, + rotateGeneratedCredentials, + getDashboardSecretRotationCount, + getDashboardSecretRotations, + getQuickSearchSecretRotations + }; +}; diff --git a/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-types.ts b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-types.ts new file mode 100644 index 000000000..7102f7de3 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-types.ts @@ -0,0 +1,155 @@ +import { AuditLogInfo } from "@app/ee/services/audit-log/audit-log-types"; +import { TSqlCredentialsRotationGeneratedCredentials } from "@app/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-types"; +import { OrderByDirection } from "@app/lib/types"; +import { SecretsOrderBy } from "@app/services/secret/secret-types"; + +import { + TMsSqlCredentialsRotation, + TMsSqlCredentialsRotationInput, + TMsSqlCredentialsRotationListItem, + TMsSqlCredentialsRotationWithConnection +} from "./mssql-credentials"; +import { + TPostgresCredentialsRotation, + TPostgresCredentialsRotationInput, + TPostgresCredentialsRotationListItem, + TPostgresCredentialsRotationWithConnection +} from "./postgres-credentials"; +import { TSecretRotationV2DALFactory } from "./secret-rotation-v2-dal"; +import { SecretRotation } from "./secret-rotation-v2-enums"; + +export type TSecretRotationV2 = TPostgresCredentialsRotation | TMsSqlCredentialsRotation; + +export type TSecretRotationV2WithConnection = + | TPostgresCredentialsRotationWithConnection + | TMsSqlCredentialsRotationWithConnection; + +export type TSecretRotationV2GeneratedCredentials = TSqlCredentialsRotationGeneratedCredentials; + +export type TSecretRotationV2Input = TPostgresCredentialsRotationInput | TMsSqlCredentialsRotationInput; + +export type TSecretRotationV2ListItem = TPostgresCredentialsRotationListItem | TMsSqlCredentialsRotationListItem; + +export type TSecretRotationV2Raw = NonNullable>>; + +export type TListSecretRotationsV2ByProjectId = { + projectId: string; + type?: SecretRotation; +}; + +export type TFindSecretRotationV2ByIdDTO = { + rotationId: string; + type: SecretRotation; +}; + +export type TRotateSecretRotationV2 = TFindSecretRotationV2ByIdDTO & { auditLogInfo: AuditLogInfo }; + +export type TRotateAtUtc = { hours: number; minutes: number }; + +export type TFindSecretRotationV2ByNameDTO = { + rotationName: string; + secretPath: string; + environment: string; + projectId: string; + type: SecretRotation; +}; + +export type TCreateSecretRotationV2DTO = Pick< + TSecretRotationV2, + "parameters" | "secretsMapping" | "description" | "rotationInterval" | "name" | "connectionId" | "projectId" +> & { + type: SecretRotation; + secretPath: string; + environment: string; + isAutoRotationEnabled?: boolean; + rotateAtUtc?: TRotateAtUtc; +}; + +export type TUpdateSecretRotationV2DTO = Partial< + Omit +> & { + rotationId: string; + type: SecretRotation; +}; + +export type TDeleteSecretRotationV2DTO = { + type: SecretRotation; + rotationId: string; + deleteSecrets: boolean; + revokeGeneratedCredentials: boolean; +}; + +export type TGetDashboardSecretRotationV2Count = { + search?: string; + projectId: string; + secretPath: string; + environments: string[]; +}; + +export type TGetDashboardSecretRotationsV2 = { + search?: string; + projectId: string; + secretPath: string; + environments: string[]; + orderBy?: SecretsOrderBy; + orderDirection?: OrderByDirection; + limit: number; + offset: number; +}; + +export type TQuickSearchSecretRotationsV2Filters = { + offset?: number; + limit?: number; + orderBy?: SecretsOrderBy; + orderDirection?: OrderByDirection; + search?: string; +}; + +export type TQuickSearchSecretRotationsV2 = { + projectId: string; + folderMappings: { folderId: string; path: string; environment: string }[]; + filters: TQuickSearchSecretRotationsV2Filters; +}; + +export type TSecretRotationRotateGeneratedCredentials = { + auditLogInfo?: AuditLogInfo; + jobId?: string; + shouldSendNotification?: boolean; + isFinalAttempt?: boolean; + isManualRotation?: boolean; +}; + +export type TSecretRotationRotateSecretsJobPayload = { rotationId: string; queuedAt: Date; isManualRotation: boolean }; + +export type TSecretRotationSendNotificationJobPayload = { + secretRotation: TSecretRotationV2Raw; +}; + +// scott: the reason for the callback structure of the rotation factory is to facilitate, when possible, +// transactional behavior. By passing in the rotation mutation, if this mutation fails we can roll back the +// third party credential changes (when supported), preventing credentials getting out of sync + +export type TRotationFactoryIssueCredentials = ( + callback: (newCredentials: TSecretRotationV2GeneratedCredentials[number]) => Promise +) => Promise; + +export type TRotationFactoryRevokeCredentials = ( + generatedCredentials: TSecretRotationV2GeneratedCredentials, + callback: () => Promise +) => Promise; + +export type TRotationFactoryRotateCredentials = ( + credentialsToRevoke: TSecretRotationV2GeneratedCredentials[number] | undefined, + callback: (newCredentials: TSecretRotationV2GeneratedCredentials[number]) => Promise +) => Promise; + +export type TRotationFactoryGetSecretsPayload = ( + generatedCredentials: TSecretRotationV2GeneratedCredentials[number] +) => { key: string; value: string }[]; + +export type TRotationFactory = (secretRotation: TSecretRotationV2WithConnection) => { + issueCredentials: TRotationFactoryIssueCredentials; + revokeCredentials: TRotationFactoryRevokeCredentials; + rotateCredentials: TRotationFactoryRotateCredentials; + getSecretsPayload: TRotationFactoryGetSecretsPayload; +}; diff --git a/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-union-schema.ts b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-union-schema.ts new file mode 100644 index 000000000..0c4bbd014 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-union-schema.ts @@ -0,0 +1,9 @@ +import { z } from "zod"; + +import { MsSqlCredentialsRotationSchema } from "@app/ee/services/secret-rotation-v2/mssql-credentials"; +import { PostgresCredentialsRotationSchema } from "@app/ee/services/secret-rotation-v2/postgres-credentials"; + +export const SecretRotationV2Schema = z.discriminatedUnion("type", [ + PostgresCredentialsRotationSchema, + MsSqlCredentialsRotationSchema +]); diff --git a/backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/index.ts b/backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/index.ts new file mode 100644 index 000000000..1ab210d66 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/index.ts @@ -0,0 +1,2 @@ +export * from "./sql-credentials-rotation-fns"; +export * from "./sql-credentials-rotation-schemas"; diff --git a/backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-fns.ts b/backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-fns.ts new file mode 100644 index 000000000..17983eb43 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-fns.ts @@ -0,0 +1,232 @@ +import { randomInt } from "crypto"; + +import { + TRotationFactoryGetSecretsPayload, + TRotationFactoryIssueCredentials, + TRotationFactoryRevokeCredentials, + TRotationFactoryRotateCredentials +} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-types"; +import { getSqlConnectionClient, SQL_CONNECTION_ALTER_LOGIN_STATEMENT } from "@app/services/app-connection/shared/sql"; + +import { + TSqlCredentialsRotationGeneratedCredentials, + TSqlCredentialsRotationWithConnection +} from "./sql-credentials-rotation-types"; + +const DEFAULT_PASSWORD_REQUIREMENTS = { + length: 48, + required: { + lowercase: 1, + uppercase: 1, + digits: 1, + symbols: 0 + }, + allowedSymbols: "-_.~!*" +}; + +const generatePassword = () => { + try { + const { length, required, allowedSymbols } = DEFAULT_PASSWORD_REQUIREMENTS; + + const chars = { + lowercase: "abcdefghijklmnopqrstuvwxyz", + uppercase: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + digits: "0123456789", + symbols: allowedSymbols || "-_.~!*" + }; + + const parts: string[] = []; + + if (required.lowercase > 0) { + parts.push( + ...Array(required.lowercase) + .fill(0) + .map(() => chars.lowercase[randomInt(chars.lowercase.length)]) + ); + } + + if (required.uppercase > 0) { + parts.push( + ...Array(required.uppercase) + .fill(0) + .map(() => chars.uppercase[randomInt(chars.uppercase.length)]) + ); + } + + if (required.digits > 0) { + parts.push( + ...Array(required.digits) + .fill(0) + .map(() => chars.digits[randomInt(chars.digits.length)]) + ); + } + + if (required.symbols > 0) { + parts.push( + ...Array(required.symbols) + .fill(0) + .map(() => chars.symbols[randomInt(chars.symbols.length)]) + ); + } + + const requiredTotal = Object.values(required).reduce((a, b) => a + b, 0); + const remainingLength = Math.max(length - requiredTotal, 0); + + const allowedChars = Object.entries(chars) + .filter(([key]) => required[key as keyof typeof required] > 0) + .map(([, value]) => value) + .join(""); + + parts.push( + ...Array(remainingLength) + .fill(0) + .map(() => allowedChars[randomInt(allowedChars.length)]) + ); + + // shuffle the array to mix up the characters + for (let i = parts.length - 1; i > 0; i -= 1) { + const j = randomInt(i + 1); + [parts[i], parts[j]] = [parts[j], parts[i]]; + } + + return parts.join(""); + } catch (error: unknown) { + const message = error instanceof Error ? error.message : "Unknown error"; + throw new Error(`Failed to generate password: ${message}`); + } +}; + +const redactPasswords = (e: unknown, credentials: TSqlCredentialsRotationGeneratedCredentials) => { + const error = e as Error; + + if (!error?.message) return "Unknown error"; + + let redactedMessage = error.message; + + credentials.forEach(({ password }) => { + redactedMessage = redactedMessage.replaceAll(password, "*******************"); + }); + + return redactedMessage; +}; + +export const sqlCredentialsRotationFactory = (secretRotation: TSqlCredentialsRotationWithConnection) => { + const { + connection, + parameters: { username1, username2 }, + activeIndex, + secretsMapping + } = secretRotation; + + const validateCredentials = async (credentials: TSqlCredentialsRotationGeneratedCredentials[number]) => { + const client = await getSqlConnectionClient({ + ...connection, + credentials: { + ...connection.credentials, + ...credentials + } + }); + + try { + await client.raw("SELECT 1"); + } catch (error) { + throw new Error(redactPasswords(error, [credentials])); + } finally { + await client.destroy(); + } + }; + + const issueCredentials: TRotationFactoryIssueCredentials = async (callback) => { + const client = await getSqlConnectionClient(connection); + + // For SQL, since we get existing users, we change both their passwords + // on issue to invalidate their existing passwords + const credentialsSet = [ + { username: username1, password: generatePassword() }, + { username: username2, password: generatePassword() } + ]; + + try { + await client.transaction(async (tx) => { + for await (const credentials of credentialsSet) { + await tx.raw(...SQL_CONNECTION_ALTER_LOGIN_STATEMENT[connection.app](credentials)); + } + }); + } catch (error) { + throw new Error(redactPasswords(error, credentialsSet)); + } finally { + await client.destroy(); + } + + for await (const credentials of credentialsSet) { + await validateCredentials(credentials); + } + + return callback(credentialsSet[0]); + }; + + const revokeCredentials: TRotationFactoryRevokeCredentials = async (credentialsToRevoke, callback) => { + const client = await getSqlConnectionClient(connection); + + const revokedCredentials = credentialsToRevoke.map(({ username }) => ({ username, password: generatePassword() })); + + try { + await client.transaction(async (tx) => { + for await (const credentials of revokedCredentials) { + // invalidate previous passwords + await tx.raw(...SQL_CONNECTION_ALTER_LOGIN_STATEMENT[connection.app](credentials)); + } + }); + } catch (error) { + throw new Error(redactPasswords(error, revokedCredentials)); + } finally { + await client.destroy(); + } + + return callback(); + }; + + const rotateCredentials: TRotationFactoryRotateCredentials = async (_, callback) => { + const client = await getSqlConnectionClient(connection); + + // generate new password for the next active user + const credentials = { username: activeIndex === 0 ? username2 : username1, password: generatePassword() }; + + try { + await client.raw(...SQL_CONNECTION_ALTER_LOGIN_STATEMENT[connection.app](credentials)); + } catch (error) { + throw new Error(redactPasswords(error, [credentials])); + } finally { + await client.destroy(); + } + + await validateCredentials(credentials); + + return callback(credentials); + }; + + const getSecretsPayload: TRotationFactoryGetSecretsPayload = (generatedCredentials) => { + const { username, password } = secretsMapping; + + const secrets = [ + { + key: username, + value: generatedCredentials.username + }, + { + key: password, + value: generatedCredentials.password + } + ]; + + return secrets; + }; + + return { + issueCredentials, + revokeCredentials, + rotateCredentials, + getSecretsPayload, + validateCredentials + }; +}; diff --git a/backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-schemas.ts b/backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-schemas.ts new file mode 100644 index 000000000..7ec47741f --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-schemas.ts @@ -0,0 +1,39 @@ +import { z } from "zod"; + +import { SecretRotations } from "@app/lib/api-docs"; +import { SecretNameSchema } from "@app/server/lib/schemas"; + +export const SqlCredentialsRotationGeneratedCredentialsSchema = z + .object({ + username: z.string(), + password: z.string() + }) + .array() + .min(1) + .max(2); + +export const SqlCredentialsRotationParametersSchema = z.object({ + username1: z + .string() + .trim() + .min(1, "Username1 Required") + .describe(SecretRotations.PARAMETERS.SQL_CREDENTIALS.username1), + username2: z + .string() + .trim() + .min(1, "Username2 Required") + .describe(SecretRotations.PARAMETERS.SQL_CREDENTIALS.username2) +}); + +export const SqlCredentialsRotationSecretsMappingSchema = z.object({ + username: SecretNameSchema.describe(SecretRotations.SECRETS_MAPPING.SQL_CREDENTIALS.username), + password: SecretNameSchema.describe(SecretRotations.SECRETS_MAPPING.SQL_CREDENTIALS.password) +}); + +export const SqlCredentialsRotationTemplateSchema = z.object({ + createUserStatement: z.string(), + secretsMapping: z.object({ + username: z.string(), + password: z.string() + }) +}); diff --git a/backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-types.ts b/backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-types.ts new file mode 100644 index 000000000..6eada6019 --- /dev/null +++ b/backend/src/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-types.ts @@ -0,0 +1,14 @@ +import { z } from "zod"; + +import { TMsSqlCredentialsRotationWithConnection } from "@app/ee/services/secret-rotation-v2/mssql-credentials"; +import { TPostgresCredentialsRotationWithConnection } from "@app/ee/services/secret-rotation-v2/postgres-credentials"; + +import { SqlCredentialsRotationGeneratedCredentialsSchema } from "./sql-credentials-rotation-schemas"; + +export type TSqlCredentialsRotationWithConnection = + | TPostgresCredentialsRotationWithConnection + | TMsSqlCredentialsRotationWithConnection; + +export type TSqlCredentialsRotationGeneratedCredentials = z.infer< + typeof SqlCredentialsRotationGeneratedCredentialsSchema +>; diff --git a/backend/src/ee/services/secret-rotation/secret-rotation-service.ts b/backend/src/ee/services/secret-rotation/secret-rotation-service.ts index 8d458111a..df7b86a0b 100644 --- a/backend/src/ee/services/secret-rotation/secret-rotation-service.ts +++ b/backend/src/ee/services/secret-rotation/secret-rotation-service.ts @@ -16,8 +16,8 @@ import { TSecretV2BridgeDALFactory } from "@app/services/secret-v2-bridge/secret import { TLicenseServiceFactory } from "../license/license-service"; import { TPermissionServiceFactory } from "../permission/permission-service"; import { - ProjectPermissionActions, ProjectPermissionSecretActions, + ProjectPermissionSecretRotationActions, ProjectPermissionSub } from "../permission/project-permission"; import { TSecretRotationDALFactory } from "./secret-rotation-dal"; @@ -69,7 +69,10 @@ export const secretRotationServiceFactory = ({ actorOrgId, actionProjectType: ActionProjectType.SecretManager }); - ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Read, ProjectPermissionSub.SecretRotation); + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionSecretRotationActions.Read, + ProjectPermissionSub.SecretRotation + ); return { custom: [], @@ -99,7 +102,7 @@ export const secretRotationServiceFactory = ({ actionProjectType: ActionProjectType.SecretManager }); ForbiddenError.from(permission).throwUnlessCan( - ProjectPermissionActions.Create, + ProjectPermissionSecretRotationActions.Read, ProjectPermissionSub.SecretRotation ); @@ -208,7 +211,10 @@ export const secretRotationServiceFactory = ({ actorOrgId, actionProjectType: ActionProjectType.SecretManager }); - ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Read, ProjectPermissionSub.SecretRotation); + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionSecretRotationActions.Read, + ProjectPermissionSub.SecretRotation + ); const { botKey, shouldUseSecretV2Bridge } = await projectBotService.getBotKey(projectId); if (shouldUseSecretV2Bridge) { const docs = await secretRotationDAL.findSecretV2({ projectId }); @@ -254,7 +260,10 @@ export const secretRotationServiceFactory = ({ actorOrgId, actionProjectType: ActionProjectType.SecretManager }); - ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.SecretRotation); + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionSecretRotationActions.Edit, + ProjectPermissionSub.SecretRotation + ); await secretRotationQueue.removeFromQueue(doc.id, doc.interval); await secretRotationQueue.addToQueue(doc.id, doc.interval); return doc; @@ -273,7 +282,7 @@ export const secretRotationServiceFactory = ({ actionProjectType: ActionProjectType.SecretManager }); ForbiddenError.from(permission).throwUnlessCan( - ProjectPermissionActions.Delete, + ProjectPermissionSecretRotationActions.Delete, ProjectPermissionSub.SecretRotation ); const deletedDoc = await secretRotationDAL.transaction(async (tx) => { diff --git a/backend/src/keystore/keystore.ts b/backend/src/keystore/keystore.ts index 8ff07db26..ea26a2cf7 100644 --- a/backend/src/keystore/keystore.ts +++ b/backend/src/keystore/keystore.ts @@ -33,6 +33,7 @@ export const KeyStorePrefixes = { SyncSecretIntegrationLastRunTimestamp: (projectId: string, environmentSlug: string, secretPath: string) => `sync-integration-last-run-${projectId}-${environmentSlug}-${secretPath}` as const, SecretSyncLock: (syncId: string) => `secret-sync-mutex-${syncId}` as const, + SecretRotationLock: (rotationId: string) => `secret-rotation-v2-mutex-${rotationId}` as const, SecretSyncLastRunTimestamp: (syncId: string) => `secret-sync-last-run-${syncId}` as const, IdentityAccessTokenStatusUpdate: (identityAccessTokenId: string) => `identity-access-token-status:${identityAccessTokenId}`, diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index ec855168e..6802b6dcb 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -1,3 +1,8 @@ +import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums"; +import { + SECRET_ROTATION_CONNECTION_MAP, + SECRET_ROTATION_NAME_MAP +} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-maps"; import { AppConnection } from "@app/services/app-connection/app-connection-enums"; import { APP_CONNECTION_NAME_MAP } from "@app/services/app-connection/app-connection-maps"; import { SecretSync } from "@app/services/secret-sync/secret-sync-enums"; @@ -817,7 +822,8 @@ export const DASHBOARD = { includeSecrets: "Whether to include project secrets in the response.", includeFolders: "Whether to include project folders in the response.", includeDynamicSecrets: "Whether to include dynamic project secrets in the response.", - includeImports: "Whether to include project secret imports in the response." + includeImports: "Whether to include project secret imports in the response.", + includeSecretRotations: "Whether to include project secret rotations in the response." }, SECRET_DETAILS_LIST: { projectId: "The ID of the project to list secrets/folders from.", @@ -832,7 +838,8 @@ export const DASHBOARD = { includeSecrets: "Whether to include project secrets in the response.", includeFolders: "Whether to include project folders in the response.", includeImports: "Whether to include project secret imports in the response.", - includeDynamicSecrets: "Whether to include dynamic project secrets in the response." + includeDynamicSecrets: "Whether to include dynamic project secrets in the response.", + includeSecretRotations: "Whether to include secret rotations in the response." } } as const; @@ -1653,7 +1660,8 @@ export const AppConnections = { name: `The name of the ${appName} Connection to create. Must be slug-friendly.`, description: `An optional description for the ${appName} Connection.`, credentials: `The credentials used to connect with ${appName}.`, - method: `The method used to authenticate with ${appName}.` + method: `The method used to authenticate with ${appName}.`, + isPlatformManagedCredentials: `Whether or not the ${appName} Connection credentials should be managed by Infisical. Once enabled this cannot be reversed.` }; }, UPDATE: (app: AppConnection) => { @@ -1663,12 +1671,23 @@ export const AppConnections = { name: `The updated name of the ${appName} Connection. Must be slug-friendly.`, description: `The updated description of the ${appName} Connection.`, credentials: `The credentials used to connect with ${appName}.`, - method: `The method used to authenticate with ${appName}.` + method: `The method used to authenticate with ${appName}.`, + isPlatformManagedCredentials: `Whether or not the ${appName} Connection credentials should be managed by Infisical. Once enabled this cannot be reversed.` }; }, DELETE: (app: AppConnection) => ({ connectionId: `The ID of the ${APP_CONNECTION_NAME_MAP[app]} Connection to be deleted.` - }) + }), + CREDENTIALS: { + SQL_CONNECTION: { + host: "The hostname of the database server.", + port: "The port number of the database.", + database: "The name of the database to connect to.", + username: "The username to connect to the database with.", + password: "The password to connect to the database with.", + sslCertificate: "The SSL certificate to use for connection." + } + } }; export const SecretSyncs = { @@ -1785,3 +1804,70 @@ export const SecretSyncs = { } } }; + +export const SecretRotations = { + LIST: (type?: SecretRotation) => ({ + projectId: `The ID of the project to list ${type ? SECRET_ROTATION_NAME_MAP[type] : "Secret"} Rotations from.` + }), + GET_BY_ID: (type: SecretRotation) => ({ + rotationId: `The ID of the ${SECRET_ROTATION_NAME_MAP[type]} Rotation to retrieve.` + }), + GET_GENERATED_CREDENTIALS_BY_ID: (type: SecretRotation) => ({ + rotationId: `The ID of the ${SECRET_ROTATION_NAME_MAP[type]} Rotation to retrieve the generated credentials for.` + }), + GET_BY_NAME: (type: SecretRotation) => ({ + rotationName: `The name of the ${SECRET_ROTATION_NAME_MAP[type]} Rotation to retrieve.`, + projectId: `The ID of the project the ${SECRET_ROTATION_NAME_MAP[type]} Rotation is located in.`, + secretPath: `The secret path the ${SECRET_ROTATION_NAME_MAP[type]} Rotation is located at.`, + environment: `The environment the ${SECRET_ROTATION_NAME_MAP[type]} Rotation is located in.` + }), + CREATE: (type: SecretRotation) => { + const destinationName = SECRET_ROTATION_NAME_MAP[type]; + return { + name: `The name of the ${destinationName} Rotation to create. Must be slug-friendly.`, + description: `An optional description for the ${destinationName} Rotation.`, + projectId: "The ID of the project to create the rotation in.", + environment: `The slug of the project environment to create the rotation in.`, + secretPath: `The secret path of the project to create the rotation in.`, + connectionId: `The ID of the ${ + APP_CONNECTION_NAME_MAP[SECRET_ROTATION_CONNECTION_MAP[type]] + } Connection to use for rotation.`, + isAutoRotationEnabled: `Whether secrets should be automatically rotated when the specified rotation interval has elapsed.`, + rotationInterval: `The interval, in days, to automatically rotate secrets.`, + rotateAtUtc: `The hours and minutes rotation should occur at in UTC. Defaults to Midnight (00:00) UTC.` + }; + }, + UPDATE: (type: SecretRotation) => { + const typeName = SECRET_ROTATION_NAME_MAP[type]; + return { + rotationId: `The ID of the ${typeName} Rotation to be updated.`, + name: `The updated name of the ${typeName} Rotation. Must be slug-friendly.`, + description: `The updated description of the ${typeName} Rotation.`, + isAutoRotationEnabled: `Whether secrets should be automatically rotated when the specified rotation interval has elapsed.`, + rotationInterval: `The updated interval, in days, to automatically rotate secrets.`, + rotateAtUtc: `The updated hours and minutes rotation should occur at in UTC.` + }; + }, + DELETE: (type: SecretRotation) => ({ + rotationId: `The ID of the ${SECRET_ROTATION_NAME_MAP[type]} Rotation to be deleted.`, + deleteSecrets: `Whether the mapped secrets belonging to this rotation should be deleted.`, + revokeGeneratedCredentials: `Whether the generated credentials associated with this rotation should be revoked.` + }), + ROTATE: (type: SecretRotation) => ({ + rotationId: `The ID of the ${SECRET_ROTATION_NAME_MAP[type]} Rotation to rotate generated credentials for.` + }), + PARAMETERS: { + SQL_CREDENTIALS: { + username1: + "The username of the first login to rotate passwords for. This user must already exists in your database.", + username2: + "The username of the second login to rotate passwords for. This user must already exists in your database." + } + }, + SECRETS_MAPPING: { + SQL_CREDENTIALS: { + username: "The name of the secret that the active username will be mapped to.", + password: "The name of the secret that the generated password will be mapped to." + } + } +}; diff --git a/backend/src/lib/config/env.ts b/backend/src/lib/config/env.ts index 4ca9c1b12..0906e5269 100644 --- a/backend/src/lib/config/env.ts +++ b/backend/src/lib/config/env.ts @@ -58,6 +58,7 @@ const envSchema = z ROOT_ENCRYPTION_KEY: zpStr(z.string().optional()), QUEUE_WORKERS_ENABLED: zodStrBool.default("true"), HTTPS_ENABLED: zodStrBool, + ROTATION_DEVELOPMENT_MODE: zodStrBool.default("false").optional(), // smtp options SMTP_HOST: zpStr(z.string().optional()), SMTP_IGNORE_TLS: zodStrBool.default("false"), @@ -262,6 +263,7 @@ const envSchema = z isSmtpConfigured: Boolean(data.SMTP_HOST), isRedisConfigured: Boolean(data.REDIS_URL), isDevelopmentMode: data.NODE_ENV === "development", + isRotationDevelopmentMode: data.NODE_ENV === "development" && data.ROTATION_DEVELOPMENT_MODE, isProductionMode: data.NODE_ENV === "production" || IS_PACKAGED, isSecretScanningConfigured: diff --git a/backend/src/lib/knex/prependTableNameToFindFilter.ts b/backend/src/lib/knex/prependTableNameToFindFilter.ts index ee48dce5a..3fb1dabb3 100644 --- a/backend/src/lib/knex/prependTableNameToFindFilter.ts +++ b/backend/src/lib/knex/prependTableNameToFindFilter.ts @@ -7,7 +7,7 @@ export const prependTableNameToFindFilter = (tableName: TableName, filterObj: ob Object.fromEntries( Object.entries(filterObj).map(([key, value]) => key.startsWith("$") - ? [key, prependTableNameToFindFilter(tableName, value as object)] + ? [key, value ? prependTableNameToFindFilter(tableName, value as object) : value] : [`${tableName}.${key}`, value] ) ); diff --git a/backend/src/queue/queue-service.ts b/backend/src/queue/queue-service.ts index 94006b5a5..ae1a3e821 100644 --- a/backend/src/queue/queue-service.ts +++ b/backend/src/queue/queue-service.ts @@ -4,6 +4,10 @@ import PgBoss, { WorkOptions } from "pg-boss"; import { SecretEncryptionAlgo, SecretKeyEncoding } from "@app/db/schemas"; import { TCreateAuditLogDTO } from "@app/ee/services/audit-log/audit-log-types"; +import { + TSecretRotationRotateSecretsJobPayload, + TSecretRotationSendNotificationJobPayload +} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-types"; import { TScanFullRepoEventPayload, TScanPushEventPayload @@ -44,7 +48,8 @@ export enum QueueName { ProjectV3Migration = "project-v3-migration", AccessTokenStatusUpdate = "access-token-status-update", ImportSecretsFromExternalSource = "import-secrets-from-external-source", - AppConnectionSecretSync = "app-connection-secret-sync" + AppConnectionSecretSync = "app-connection-secret-sync", + SecretRotationV2 = "secret-rotation-v2" } export enum QueueJobs { @@ -73,7 +78,10 @@ export enum QueueJobs { SecretSyncSyncSecrets = "secret-sync-sync-secrets", SecretSyncImportSecrets = "secret-sync-import-secrets", SecretSyncRemoveSecrets = "secret-sync-remove-secrets", - SecretSyncSendActionFailedNotifications = "secret-sync-send-action-failed-notifications" + SecretSyncSendActionFailedNotifications = "secret-sync-send-action-failed-notifications", + SecretRotationV2QueueRotations = "secret-rotation-v2-queue-rotations", + SecretRotationV2RotateSecrets = "secret-rotation-v2-rotate-secrets", + SecretRotationV2SendNotification = "secret-rotation-v2-send-notification" } export type TQueueJobTypes = { @@ -213,6 +221,19 @@ export type TQueueJobTypes = { name: QueueJobs.SecretSyncSendActionFailedNotifications; payload: TQueueSendSecretSyncActionFailedNotificationsDTO; }; + [QueueName.SecretRotationV2]: + | { + name: QueueJobs.SecretRotationV2QueueRotations; + payload: undefined; + } + | { + name: QueueJobs.SecretRotationV2RotateSecrets; + payload: TSecretRotationRotateSecretsJobPayload; + } + | { + name: QueueJobs.SecretRotationV2SendNotification; + payload: TSecretRotationSendNotificationJobPayload; + }; }; export type TQueueServiceFactory = ReturnType; @@ -229,6 +250,7 @@ export const queueServiceFactory = ( const pgBoss = new PgBoss({ connectionString: dbConnectionUrl, archiveCompletedAfterSeconds: 60, + cronMonitorIntervalSeconds: 5, archiveFailedAfterSeconds: 1000, // we want to keep failed jobs for a longer time so that it can be retried deleteAfterSeconds: 30, ssl: dbRootCert @@ -247,15 +269,12 @@ export const queueServiceFactory = ( >; const initialize = async () => { - const appCfg = getConfig(); - if (appCfg.SHOULD_INIT_PG_QUEUE) { - logger.info("Initializing pg-queue..."); - await pgBoss.start(); + logger.info("Initializing pg-queue..."); + await pgBoss.start(); - pgBoss.on("error", (error) => { - logger.error(error, "pg-queue error"); - }); - } + pgBoss.on("error", (error) => { + logger.error(error, "pg-queue error"); + }); }; const start = ( @@ -283,7 +302,7 @@ export const queueServiceFactory = ( const startPg = async ( jobName: QueueJobs, - jobsFn: (jobs: PgBoss.Job[]) => Promise, + jobsFn: (jobs: PgBoss.JobWithMetadata[]) => Promise, options: WorkOptions & { workerCount: number; } @@ -297,7 +316,7 @@ export const queueServiceFactory = ( await Promise.all( Array.from({ length: options.workerCount }).map(() => - pgBoss.work(jobName, options, jobsFn) + pgBoss.work(jobName, { ...options, includeMetadata: true }, jobsFn) ) ); }; @@ -342,6 +361,15 @@ export const queueServiceFactory = ( }); }; + const schedulePg = async ( + job: TQueueJobTypes[T]["name"], + cron: string, + data: TQueueJobTypes[T]["payload"], + opts?: PgBoss.ScheduleOptions & { jobId?: string } + ) => { + await pgBoss.schedule(job, cron, data, opts); + }; + const stopRepeatableJob = async ( name: T, job: TQueueJobTypes[T]["name"], @@ -403,6 +431,7 @@ export const queueServiceFactory = ( stopJobById, getRepeatableJobs, startPg, - queuePg + queuePg, + schedulePg }; }; diff --git a/backend/src/server/lib/schemas.ts b/backend/src/server/lib/schemas.ts index 43a30760e..d09a2c40b 100644 --- a/backend/src/server/lib/schemas.ts +++ b/backend/src/server/lib/schemas.ts @@ -39,3 +39,10 @@ export const GenericResourceNameSchema = z ])(val), "Name can only contain alphanumeric characters, dashes, underscores, and spaces" ); + +export const BaseSecretNameSchema = z.string().trim().min(1); + +export const SecretNameSchema = BaseSecretNameSchema.refine( + (el) => !el.includes(" "), + "Secret name cannot contain spaces." +).refine((el) => !el.includes(":"), "Secret name cannot contain colon."); diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index dac88791f..6553dad96 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -76,6 +76,9 @@ import { secretReplicationServiceFactory } from "@app/ee/services/secret-replica import { secretRotationDALFactory } from "@app/ee/services/secret-rotation/secret-rotation-dal"; import { secretRotationQueueFactory } from "@app/ee/services/secret-rotation/secret-rotation-queue"; import { secretRotationServiceFactory } from "@app/ee/services/secret-rotation/secret-rotation-service"; +import { secretRotationV2DALFactory } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-dal"; +import { secretRotationV2QueueServiceFactory } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-queue"; +import { secretRotationV2ServiceFactory } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-service"; import { gitAppDALFactory } from "@app/ee/services/secret-scanning/git-app-dal"; import { gitAppInstallSessionDALFactory } from "@app/ee/services/secret-scanning/git-app-install-session-dal"; import { secretScanningDALFactory } from "@app/ee/services/secret-scanning/secret-scanning-dal"; @@ -406,6 +409,8 @@ export const registerRoutes = async ( const gatewayDAL = gatewayDALFactory(db); const projectGatewayDAL = projectGatewayDALFactory(db); + const secretRotationV2DAL = secretRotationV2DALFactory(db, folderDAL); + const permissionService = permissionServiceFactory({ permissionDAL, orgRoleDAL, @@ -1497,6 +1502,35 @@ export const registerRoutes = async ( permissionService }); + const secretRotationV2Service = secretRotationV2ServiceFactory({ + secretRotationV2DAL, + permissionService, + appConnectionService, + folderDAL, + projectBotService, + licenseService, + kmsService, + auditLogService, + secretV2BridgeDAL, + secretTagDAL, + secretVersionTagV2BridgeDAL, + secretVersionV2BridgeDAL, + keyStore, + resourceMetadataDAL, + snapshotService, + secretQueueService, + queueService + }); + + await secretRotationV2QueueServiceFactory({ + secretRotationV2Service, + secretRotationV2DAL, + queueService, + projectDAL, + projectMembershipDAL, + smtpService + }); + await superAdminService.initServerCfg(); // setup the communication with license key server @@ -1598,7 +1632,8 @@ export const registerRoutes = async ( secretSync: secretSyncService, kmip: kmipService, kmipOperation: kmipOperationService, - gateway: gatewayService + gateway: gatewayService, + secretRotationV2: secretRotationV2Service }); const cronJobs: CronJob[] = []; diff --git a/backend/src/server/routes/sanitizedSchemas.ts b/backend/src/server/routes/sanitizedSchemas.ts index 67bd26552..8bf6f7390 100644 --- a/backend/src/server/routes/sanitizedSchemas.ts +++ b/backend/src/server/routes/sanitizedSchemas.ts @@ -134,7 +134,9 @@ export const secretRawSchema = z.object({ membershipId: z.string().nullable().optional() }) .optional() - .nullable() + .nullable(), + isRotatedSecret: z.boolean().optional(), + rotationId: z.string().uuid().nullish() }); export const ProjectPermissionSchema = z.object({ diff --git a/backend/src/server/routes/v1/app-connection-routers/app-connection-endpoints.ts b/backend/src/server/routes/v1/app-connection-routers/app-connection-endpoints.ts index e23d52004..dfb451a4c 100644 --- a/backend/src/server/routes/v1/app-connection-routers/app-connection-endpoints.ts +++ b/backend/src/server/routes/v1/app-connection-routers/app-connection-endpoints.ts @@ -24,8 +24,14 @@ export const registerAppConnectionEndpoints = ; + updateSchema: z.ZodType<{ + name?: string; + credentials?: I["credentials"]; + description?: string | null; + isPlatformManagedCredentials?: boolean; }>; - updateSchema: z.ZodType<{ name?: string; credentials?: I["credentials"]; description?: string | null }>; sanitizedResponseSchema: z.ZodTypeAny; }) => { const appName = APP_CONNECTION_NAME_MAP[app]; @@ -208,10 +214,10 @@ export const registerAppConnectionEndpoints = { - const { name, method, credentials, description } = req.body; + const { name, method, credentials, description, isPlatformManagedCredentials } = req.body; const appConnection = (await server.services.appConnection.createAppConnection( - { name, method, app, credentials, description }, + { name, method, app, credentials, description, isPlatformManagedCredentials }, req.permission )) as T; @@ -224,7 +230,8 @@ export const registerAppConnectionEndpoints = { - const { name, credentials, description } = req.body; + const { name, credentials, description, isPlatformManagedCredentials } = req.body; const { connectionId } = req.params; const appConnection = (await server.services.appConnection.updateAppConnection( - { name, credentials, connectionId, description }, + { name, credentials, connectionId, description, isPlatformManagedCredentials }, req.permission )) as T; @@ -268,7 +275,8 @@ export const registerAppConnectionEndpoints = { diff --git a/backend/src/server/routes/v1/app-connection-routers/index.ts b/backend/src/server/routes/v1/app-connection-routers/index.ts index c2b688a43..906ffaee9 100644 --- a/backend/src/server/routes/v1/app-connection-routers/index.ts +++ b/backend/src/server/routes/v1/app-connection-routers/index.ts @@ -7,6 +7,8 @@ import { registerDatabricksConnectionRouter } from "./databricks-connection-rout import { registerGcpConnectionRouter } from "./gcp-connection-router"; import { registerGitHubConnectionRouter } from "./github-connection-router"; import { registerHumanitecConnectionRouter } from "./humanitec-connection-router"; +import { registerMsSqlConnectionRouter } from "./mssql-connection-router"; +import { registerPostgresConnectionRouter } from "./postgres-connection-router"; export * from "./app-connection-router"; @@ -18,5 +20,7 @@ export const APP_CONNECTION_REGISTER_ROUTER_MAP: Record { + registerAppConnectionEndpoints({ + app: AppConnection.MsSql, + server, + sanitizedResponseSchema: SanitizedMsSqlConnectionSchema, + createSchema: CreateMsSqlConnectionSchema, + updateSchema: UpdateMsSqlConnectionSchema + }); +}; diff --git a/backend/src/server/routes/v1/app-connection-routers/postgres-connection-router.ts b/backend/src/server/routes/v1/app-connection-routers/postgres-connection-router.ts new file mode 100644 index 000000000..8662f2e52 --- /dev/null +++ b/backend/src/server/routes/v1/app-connection-routers/postgres-connection-router.ts @@ -0,0 +1,18 @@ +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; +import { + CreatePostgresConnectionSchema, + SanitizedPostgresConnectionSchema, + UpdatePostgresConnectionSchema +} from "@app/services/app-connection/postgres"; + +import { registerAppConnectionEndpoints } from "./app-connection-endpoints"; + +export const registerPostgresConnectionRouter = async (server: FastifyZodProvider) => { + registerAppConnectionEndpoints({ + app: AppConnection.Postgres, + server, + sanitizedResponseSchema: SanitizedPostgresConnectionSchema, + createSchema: CreatePostgresConnectionSchema, + updateSchema: UpdatePostgresConnectionSchema + }); +}; diff --git a/backend/src/server/routes/v1/dashboard-router.ts b/backend/src/server/routes/v1/dashboard-router.ts index 901723647..813a8e3ab 100644 --- a/backend/src/server/routes/v1/dashboard-router.ts +++ b/backend/src/server/routes/v1/dashboard-router.ts @@ -8,6 +8,7 @@ import { ProjectPermissionSecretActions, ProjectPermissionSub } from "@app/ee/services/permission/project-permission"; +import { SecretRotationV2Schema } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-union-schema"; import { DASHBOARD } from "@app/lib/api-docs"; import { BadRequestError } from "@app/lib/errors"; import { removeTrailingSlash } from "@app/lib/fn"; @@ -101,12 +102,30 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { includeSecrets: booleanSchema.describe(DASHBOARD.SECRET_OVERVIEW_LIST.includeSecrets), includeFolders: booleanSchema.describe(DASHBOARD.SECRET_OVERVIEW_LIST.includeFolders), includeImports: booleanSchema.describe(DASHBOARD.SECRET_OVERVIEW_LIST.includeImports), + includeSecretRotations: booleanSchema.describe(DASHBOARD.SECRET_OVERVIEW_LIST.includeSecretRotations), includeDynamicSecrets: booleanSchema.describe(DASHBOARD.SECRET_OVERVIEW_LIST.includeDynamicSecrets) }), response: { 200: z.object({ folders: SecretFoldersSchema.extend({ environment: z.string() }).array().optional(), dynamicSecrets: SanitizedDynamicSecretSchema.extend({ environment: z.string() }).array().optional(), + secretRotations: z + .intersection( + SecretRotationV2Schema, + z.object({ + secrets: secretRawSchema + .extend({ + secretValueHidden: z.boolean(), + secretPath: z.string().optional(), + secretMetadata: ResourceMetadataSchema.optional(), + tags: SanitizedTagSchema.array().optional() + }) + .nullable() + .array() + }) + ) + .array() + .optional(), secrets: secretRawSchema .extend({ secretValueHidden: z.boolean(), @@ -127,6 +146,7 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { totalDynamicSecretCount: z.number().optional(), totalSecretCount: z.number().optional(), totalImportCount: z.number().optional(), + totalSecretRotationCount: z.number().optional(), totalCount: z.number() }) } @@ -144,7 +164,8 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { includeFolders, includeSecrets, includeImports, - includeDynamicSecrets + includeDynamicSecrets, + includeSecretRotations } = req.query; const environments = req.query.environments.split(","); @@ -166,11 +187,15 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { let dynamicSecrets: | Awaited> | undefined; + let secretRotations: + | Awaited> + | undefined; let totalFolderCount: number | undefined; let totalDynamicSecretCount: number | undefined; let totalSecretCount: number | undefined; let totalImportCount: number | undefined; + let totalSecretRotationCount: number | undefined; if (includeImports) { totalImportCount = await server.services.secretImport.getProjectImportMultiEnvCount({ @@ -322,6 +347,56 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { } } + if (includeSecretRotations) { + totalSecretRotationCount = await server.services.secretRotationV2.getDashboardSecretRotationCount( + { + projectId, + search, + environments, + secretPath + }, + req.permission + ); + + if (remainingLimit > 0 && totalSecretRotationCount > adjustedOffset) { + secretRotations = await server.services.secretRotationV2.getDashboardSecretRotations( + { + projectId, + search, + orderBy, + orderDirection, + environments, + secretPath, + limit: remainingLimit, + offset: adjustedOffset + }, + req.permission + ); + + await server.services.auditLog.createAuditLog({ + projectId, + ...req.auditLogInfo, + event: { + type: EventType.GET_SECRET_ROTATIONS, + metadata: { + count: secretRotations.length, + rotationIds: secretRotations.map((rotation) => rotation.id), + secretPath, + environment: environments.join(",") + } + } + }); + + // get the count of unique secret rotation names to properly adjust remaining limit + const uniqueSecretRotationCount = new Set(secretRotations.map((rotation) => rotation.name)).size; + + remainingLimit -= uniqueSecretRotationCount; + adjustedOffset = 0; + } else { + adjustedOffset = Math.max(0, adjustedOffset - totalSecretRotationCount); + } + } + if (includeSecrets) { // this is the unique count, ie duplicate secrets across envs only count as 1 totalSecretCount = await server.services.secret.getSecretsCountMultiEnv({ @@ -353,38 +428,44 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { offset: adjustedOffset, isInternal: true }); + } + } - for await (const environment of environments) { - const secretCountFromEnv = secrets.filter((secret) => secret.environment === environment).length; + if (secrets?.length || secretRotations?.length) { + for await (const environment of environments) { + const secretCountFromEnv = + (secrets?.filter((secret) => secret.environment === environment).length ?? 0) + + (secretRotations + ?.filter((rotation) => rotation.environment.slug === environment) + .flatMap((rotation) => rotation.secrets.filter((secret) => Boolean(secret))).length ?? 0); - if (secretCountFromEnv) { - await server.services.auditLog.createAuditLog({ - projectId, - ...req.auditLogInfo, - event: { - type: EventType.GET_SECRETS, - metadata: { - environment, - secretPath, - numberOfSecrets: secretCountFromEnv - } + if (secretCountFromEnv) { + await server.services.auditLog.createAuditLog({ + projectId, + ...req.auditLogInfo, + event: { + type: EventType.GET_SECRETS, + metadata: { + environment, + secretPath, + numberOfSecrets: secretCountFromEnv + } + } + }); + + if (getUserAgentType(req.headers["user-agent"]) !== UserAgentType.K8_OPERATOR) { + await server.services.telemetry.sendPostHogEvents({ + event: PostHogEventTypes.SecretPulled, + distinctId: getTelemetryDistinctId(req), + properties: { + numberOfSecrets: secretCountFromEnv, + workspaceId: projectId, + environment, + secretPath, + channel: getUserAgentType(req.headers["user-agent"]), + ...req.auditLogInfo } }); - - if (getUserAgentType(req.headers["user-agent"]) !== UserAgentType.K8_OPERATOR) { - await server.services.telemetry.sendPostHogEvents({ - event: PostHogEventTypes.SecretPulled, - distinctId: getTelemetryDistinctId(req), - properties: { - numberOfSecrets: secretCountFromEnv, - workspaceId: projectId, - environment, - secretPath, - channel: getUserAgentType(req.headers["user-agent"]), - ...req.auditLogInfo - } - }); - } } } } @@ -395,12 +476,18 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { dynamicSecrets, secrets, imports, + secretRotations, totalFolderCount, totalDynamicSecretCount, totalImportCount, totalSecretCount, + totalSecretRotationCount, totalCount: - (totalFolderCount ?? 0) + (totalDynamicSecretCount ?? 0) + (totalSecretCount ?? 0) + (totalImportCount ?? 0) + (totalFolderCount ?? 0) + + (totalDynamicSecretCount ?? 0) + + (totalSecretCount ?? 0) + + (totalImportCount ?? 0) + + (totalSecretRotationCount ?? 0) }; } }); @@ -445,7 +532,8 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { includeSecrets: booleanSchema.describe(DASHBOARD.SECRET_DETAILS_LIST.includeSecrets), includeFolders: booleanSchema.describe(DASHBOARD.SECRET_DETAILS_LIST.includeFolders), includeDynamicSecrets: booleanSchema.describe(DASHBOARD.SECRET_DETAILS_LIST.includeDynamicSecrets), - includeImports: booleanSchema.describe(DASHBOARD.SECRET_DETAILS_LIST.includeImports) + includeImports: booleanSchema.describe(DASHBOARD.SECRET_DETAILS_LIST.includeImports), + includeSecretRotations: booleanSchema.describe(DASHBOARD.SECRET_DETAILS_LIST.includeSecretRotations) }), response: { 200: z.object({ @@ -457,6 +545,23 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { .optional(), folders: SecretFoldersSchema.array().optional(), dynamicSecrets: SanitizedDynamicSecretSchema.array().optional(), + secretRotations: z + .intersection( + SecretRotationV2Schema, + z.object({ + secrets: secretRawSchema + .extend({ + secretValueHidden: z.boolean(), + secretPath: z.string().optional(), + secretMetadata: ResourceMetadataSchema.optional(), + tags: SanitizedTagSchema.array().optional() + }) + .nullable() + .array() + }) + ) + .array() + .optional(), secrets: secretRawSchema .extend({ secretValueHidden: z.boolean(), @@ -470,6 +575,7 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { totalFolderCount: z.number().optional(), totalDynamicSecretCount: z.number().optional(), totalSecretCount: z.number().optional(), + totalSecretRotationCount: z.number().optional(), totalCount: z.number() }) } @@ -488,7 +594,8 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { includeFolders, includeSecrets, includeDynamicSecrets, - includeImports + includeImports, + includeSecretRotations } = req.query; if (!projectId || !environment) throw new BadRequestError({ message: "Missing workspace id or environment" }); @@ -507,11 +614,15 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { let folders: Awaited> | undefined; let secrets: Awaited>["secrets"] | undefined; let dynamicSecrets: Awaited> | undefined; + let secretRotations: + | Awaited> + | undefined; let totalImportCount: number | undefined; let totalFolderCount: number | undefined; let totalDynamicSecretCount: number | undefined; let totalSecretCount: number | undefined; + let totalSecretRotationCount: number | undefined; if (includeImports) { totalImportCount = await server.services.secretImport.getProjectImportCount({ @@ -594,6 +705,53 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { } } + if (includeSecretRotations) { + totalSecretRotationCount = await server.services.secretRotationV2.getDashboardSecretRotationCount( + { + projectId, + search, + environments: [environment], + secretPath + }, + req.permission + ); + + if (remainingLimit > 0 && totalSecretRotationCount > adjustedOffset) { + secretRotations = await server.services.secretRotationV2.getDashboardSecretRotations( + { + projectId, + search, + orderBy, + orderDirection, + environments: [environment], + secretPath, + limit: remainingLimit, + offset: adjustedOffset + }, + req.permission + ); + + await server.services.auditLog.createAuditLog({ + projectId, + ...req.auditLogInfo, + event: { + type: EventType.GET_SECRET_ROTATIONS, + metadata: { + count: secretRotations.length, + rotationIds: secretRotations.map((rotation) => rotation.id), + secretPath, + environment + } + } + }); + + remainingLimit -= secretRotations.length; + adjustedOffset = 0; + } else { + adjustedOffset = Math.max(0, adjustedOffset - totalSecretRotationCount); + } + } + try { if (includeDynamicSecrets) { totalDynamicSecretCount = await server.services.dynamicSecret.getDynamicSecretCount({ @@ -629,7 +787,13 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { adjustedOffset = Math.max(0, adjustedOffset - totalDynamicSecretCount); } } + } catch (error) { + if (!(error instanceof ForbiddenError)) { + throw error; + } + } + try { if (includeSecrets) { totalSecretCount = await server.services.secret.getSecretsCount({ actorId: req.permission.id, @@ -663,34 +827,6 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { tagSlugs: tags }) ).secrets; - - await server.services.auditLog.createAuditLog({ - projectId, - ...req.auditLogInfo, - event: { - type: EventType.GET_SECRETS, - metadata: { - environment, - secretPath, - numberOfSecrets: secrets.length - } - } - }); - - if (getUserAgentType(req.headers["user-agent"]) !== UserAgentType.K8_OPERATOR) { - await server.services.telemetry.sendPostHogEvents({ - event: PostHogEventTypes.SecretPulled, - distinctId: getTelemetryDistinctId(req), - properties: { - numberOfSecrets: secrets.length, - workspaceId: projectId, - environment, - secretPath, - channel: getUserAgentType(req.headers["user-agent"]), - ...req.auditLogInfo - } - }); - } } } } catch (error) { @@ -699,17 +835,57 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { } } + if (secrets?.length || secretRotations?.length) { + const secretCount = + (secrets?.length ?? 0) + + (secretRotations?.flatMap((rotation) => rotation.secrets.filter((secret) => Boolean(secret))).length ?? 0); + + await server.services.auditLog.createAuditLog({ + projectId, + ...req.auditLogInfo, + event: { + type: EventType.GET_SECRETS, + metadata: { + environment, + secretPath, + numberOfSecrets: secretCount + } + } + }); + + if (getUserAgentType(req.headers["user-agent"]) !== UserAgentType.K8_OPERATOR) { + await server.services.telemetry.sendPostHogEvents({ + event: PostHogEventTypes.SecretPulled, + distinctId: getTelemetryDistinctId(req), + properties: { + numberOfSecrets: secretCount, + workspaceId: projectId, + environment, + secretPath, + channel: getUserAgentType(req.headers["user-agent"]), + ...req.auditLogInfo + } + }); + } + } + return { imports, folders, dynamicSecrets, secrets, + secretRotations, totalImportCount, totalFolderCount, totalDynamicSecretCount, totalSecretCount, + totalSecretRotationCount, totalCount: - (totalImportCount ?? 0) + (totalFolderCount ?? 0) + (totalDynamicSecretCount ?? 0) + (totalSecretCount ?? 0) + (totalImportCount ?? 0) + + (totalFolderCount ?? 0) + + (totalDynamicSecretCount ?? 0) + + (totalSecretCount ?? 0) + + (totalSecretRotationCount ?? 0) }; } }); @@ -747,7 +923,8 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { tags: SanitizedTagSchema.array().optional() }) .array() - .optional() + .optional(), + secretRotations: SecretRotationV2Schema.array().optional() }) } }, @@ -811,6 +988,17 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { req.permission ); + const secretRotations = searchHasTags + ? [] + : await server.services.secretRotationV2.getQuickSearchSecretRotations( + { + projectId, + folderMappings, + filters: sharedFilters + }, + req.permission + ); + for await (const environment of environments) { const secretCountForEnv = secrets.filter((secret) => secret.environment === environment).length; @@ -843,6 +1031,24 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { }); } } + + const secretRotationsFromEnv = secretRotations.filter((rotation) => rotation.environment.slug === environment); + + if (secretRotationsFromEnv.length) { + await server.services.auditLog.createAuditLog({ + projectId, + ...req.auditLogInfo, + event: { + type: EventType.GET_SECRET_ROTATIONS, + metadata: { + count: secretRotationsFromEnv.length, + rotationIds: secretRotationsFromEnv.map((rotation) => rotation.id), + secretPath, + environment + } + } + }); + } } const sliceQuickSearch = (array: T[]) => array.slice(0, 25); @@ -856,6 +1062,9 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { ? dynamicSecrets.filter((dynamicSecret) => dynamicSecret.path.endsWith(searchPath)) : dynamicSecrets ), + secretRotations: sliceQuickSearch( + searchPath ? secretRotations.filter((rotation) => rotation.folder.path.endsWith(searchPath)) : secretRotations + ), folders: searchHasTags ? [] : sliceQuickSearch( diff --git a/backend/src/server/routes/v3/secret-router.ts b/backend/src/server/routes/v3/secret-router.ts index f854baade..0f53b777a 100644 --- a/backend/src/server/routes/v3/secret-router.ts +++ b/backend/src/server/routes/v3/secret-router.ts @@ -7,6 +7,7 @@ import { RAW_SECRETS, SECRETS } from "@app/lib/api-docs"; import { BadRequestError, NotFoundError } from "@app/lib/errors"; import { removeTrailingSlash } from "@app/lib/fn"; import { secretsLimit, writeLimit } from "@app/server/config/rateLimiter"; +import { BaseSecretNameSchema, SecretNameSchema } from "@app/server/lib/schemas"; import { getTelemetryDistinctId } from "@app/server/lib/telemetry"; import { getUserAgentType } from "@app/server/plugins/audit-log"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; @@ -39,13 +40,6 @@ const SecretReferenceNodeTree: z.ZodType = SecretReference children: z.lazy(() => SecretReferenceNodeTree.array()) }); -const BaseSecretNameSchema = z.string().trim().min(1); - -const SecretNameSchema = BaseSecretNameSchema.refine( - (el) => !el.includes(" "), - "Secret name cannot contain spaces." -).refine((el) => !el.includes(":"), "Secret name cannot contain colon."); - export const registerSecretRouter = async (server: FastifyZodProvider) => { server.route({ method: "POST", @@ -630,6 +624,7 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { secretValue: z .string() .transform((val) => (val.at(-1) === "\n" ? `${val.trim()}\n` : val.trim())) + .optional() .describe(RAW_SECRETS.UPDATE.secretValue), secretPath: z .string() @@ -2049,6 +2044,7 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { secretValue: z .string() .transform((val) => (val.at(-1) === "\n" ? `${val.trim()}\n` : val.trim())) + .optional() .describe(RAW_SECRETS.UPDATE.secretValue), secretPath: z .string() diff --git a/backend/src/services/app-connection/app-connection-enums.ts b/backend/src/services/app-connection/app-connection-enums.ts index 9da622541..f5f921c4e 100644 --- a/backend/src/services/app-connection/app-connection-enums.ts +++ b/backend/src/services/app-connection/app-connection-enums.ts @@ -5,7 +5,9 @@ export enum AppConnection { GCP = "gcp", AzureKeyVault = "azure-key-vault", AzureAppConfiguration = "azure-app-configuration", - Humanitec = "humanitec" + Humanitec = "humanitec", + Postgres = "postgres", + MsSql = "mssql" } export enum AWSRegion { diff --git a/backend/src/services/app-connection/app-connection-fns.ts b/backend/src/services/app-connection/app-connection-fns.ts index fe5130ff1..b2d45e71f 100644 --- a/backend/src/services/app-connection/app-connection-fns.ts +++ b/backend/src/services/app-connection/app-connection-fns.ts @@ -1,30 +1,22 @@ import { TAppConnections } from "@app/db/schemas/app-connections"; import { generateHash } from "@app/lib/crypto/encryption"; -import { AppConnection } from "@app/services/app-connection/app-connection-enums"; -import { TAppConnectionServiceFactoryDep } from "@app/services/app-connection/app-connection-service"; -import { TAppConnection, TAppConnectionConfig } from "@app/services/app-connection/app-connection-types"; +import { BadRequestError } from "@app/lib/errors"; +import { APP_CONNECTION_NAME_MAP } from "@app/services/app-connection/app-connection-maps"; import { - AwsConnectionMethod, - getAwsConnectionListItem, - validateAwsConnectionCredentials -} from "@app/services/app-connection/aws"; -import { - DatabricksConnectionMethod, - getDatabricksConnectionListItem, - validateDatabricksConnectionCredentials -} from "@app/services/app-connection/databricks"; -import { - GcpConnectionMethod, - getGcpConnectionListItem, - validateGcpConnectionCredentials -} from "@app/services/app-connection/gcp"; -import { - getGitHubConnectionListItem, - GitHubConnectionMethod, - validateGitHubConnectionCredentials -} from "@app/services/app-connection/github"; + transferSqlConnectionCredentialsToPlatform, + validateSqlConnectionCredentials +} from "@app/services/app-connection/shared/sql"; import { KmsDataKey } from "@app/services/kms/kms-types"; +import { AppConnection } from "./app-connection-enums"; +import { TAppConnectionServiceFactoryDep } from "./app-connection-service"; +import { + TAppConnection, + TAppConnectionConfig, + TAppConnectionCredentialsValidator, + TAppConnectionTransitionCredentialsToPlatform +} from "./app-connection-types"; +import { AwsConnectionMethod, getAwsConnectionListItem, validateAwsConnectionCredentials } from "./aws"; import { AzureAppConfigurationConnectionMethod, getAzureAppConfigurationConnectionListItem, @@ -35,11 +27,20 @@ import { getAzureKeyVaultConnectionListItem, validateAzureKeyVaultConnectionCredentials } from "./azure-key-vault"; +import { + DatabricksConnectionMethod, + getDatabricksConnectionListItem, + validateDatabricksConnectionCredentials +} from "./databricks"; +import { GcpConnectionMethod, getGcpConnectionListItem, validateGcpConnectionCredentials } from "./gcp"; +import { getGitHubConnectionListItem, GitHubConnectionMethod, validateGitHubConnectionCredentials } from "./github"; import { getHumanitecConnectionListItem, HumanitecConnectionMethod, validateHumanitecConnectionCredentials } from "./humanitec"; +import { getMsSqlConnectionListItem, MsSqlConnectionMethod } from "./mssql"; +import { getPostgresConnectionListItem, PostgresConnectionMethod } from "./postgres"; export const listAppConnectionOptions = () => { return [ @@ -49,7 +50,9 @@ export const listAppConnectionOptions = () => { getAzureKeyVaultConnectionListItem(), getAzureAppConfigurationConnectionListItem(), getDatabricksConnectionListItem(), - getHumanitecConnectionListItem() + getHumanitecConnectionListItem(), + getPostgresConnectionListItem(), + getMsSqlConnectionListItem() ].sort((a, b) => a.name.localeCompare(b.name)); }; @@ -95,30 +98,22 @@ export const decryptAppConnectionCredentials = async ({ return JSON.parse(decryptedPlainTextBlob.toString()) as TAppConnection["credentials"]; }; +const VALIDATE_APP_CONNECTION_CREDENTIALS_MAP: Record = { + [AppConnection.AWS]: validateAwsConnectionCredentials as TAppConnectionCredentialsValidator, + [AppConnection.Databricks]: validateDatabricksConnectionCredentials as TAppConnectionCredentialsValidator, + [AppConnection.GitHub]: validateGitHubConnectionCredentials as TAppConnectionCredentialsValidator, + [AppConnection.GCP]: validateGcpConnectionCredentials as TAppConnectionCredentialsValidator, + [AppConnection.AzureKeyVault]: validateAzureKeyVaultConnectionCredentials as TAppConnectionCredentialsValidator, + [AppConnection.AzureAppConfiguration]: + validateAzureAppConfigurationConnectionCredentials as TAppConnectionCredentialsValidator, + [AppConnection.Humanitec]: validateHumanitecConnectionCredentials as TAppConnectionCredentialsValidator, + [AppConnection.Postgres]: validateSqlConnectionCredentials as TAppConnectionCredentialsValidator, + [AppConnection.MsSql]: validateSqlConnectionCredentials as TAppConnectionCredentialsValidator +}; + export const validateAppConnectionCredentials = async ( appConnection: TAppConnectionConfig -): Promise => { - const { app } = appConnection; - switch (app) { - case AppConnection.AWS: - return validateAwsConnectionCredentials(appConnection); - case AppConnection.Databricks: - return validateDatabricksConnectionCredentials(appConnection); - case AppConnection.GitHub: - return validateGitHubConnectionCredentials(appConnection); - case AppConnection.GCP: - return validateGcpConnectionCredentials(appConnection); - case AppConnection.AzureKeyVault: - return validateAzureKeyVaultConnectionCredentials(appConnection); - case AppConnection.AzureAppConfiguration: - return validateAzureAppConfigurationConnectionCredentials(appConnection); - case AppConnection.Humanitec: - return validateHumanitecConnectionCredentials(appConnection); - default: - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - throw new Error(`Unhandled App Connection ${app}`); - } -}; +): Promise => VALIDATE_APP_CONNECTION_CREDENTIALS_MAP[appConnection.app](appConnection); export const getAppConnectionMethodName = (method: TAppConnection["method"]) => { switch (method) { @@ -136,8 +131,11 @@ export const getAppConnectionMethodName = (method: TAppConnection["method"]) => return "Service Account Impersonation"; case DatabricksConnectionMethod.ServicePrincipal: return "Service Principal"; - case HumanitecConnectionMethod.API_TOKEN: + case HumanitecConnectionMethod.ApiToken: return "API Token"; + case PostgresConnectionMethod.UsernameAndPassword: + case MsSqlConnectionMethod.UsernameAndPassword: + return "Username & Password"; default: // eslint-disable-next-line @typescript-eslint/restrict-template-expressions throw new Error(`Unhandled App Connection Method: ${method}`); @@ -158,3 +156,24 @@ export const decryptAppConnection = async ( credentialsHash: generateHash(appConnection.encryptedCredentials) } as TAppConnection; }; + +const platformManagedCredentialsNotSupported: TAppConnectionTransitionCredentialsToPlatform = ({ app }) => { + throw new BadRequestError({ + message: `${APP_CONNECTION_NAME_MAP[app]} Connections do not support platform managed credentials.` + }); +}; + +export const TRANSITION_CONNECTION_CREDENTIALS_TO_PLATFORM: Record< + AppConnection, + TAppConnectionTransitionCredentialsToPlatform +> = { + [AppConnection.AWS]: platformManagedCredentialsNotSupported, + [AppConnection.Databricks]: platformManagedCredentialsNotSupported, + [AppConnection.GitHub]: platformManagedCredentialsNotSupported, + [AppConnection.GCP]: platformManagedCredentialsNotSupported, + [AppConnection.AzureKeyVault]: platformManagedCredentialsNotSupported, + [AppConnection.AzureAppConfiguration]: platformManagedCredentialsNotSupported, + [AppConnection.Humanitec]: platformManagedCredentialsNotSupported, + [AppConnection.Postgres]: transferSqlConnectionCredentialsToPlatform as TAppConnectionTransitionCredentialsToPlatform, + [AppConnection.MsSql]: transferSqlConnectionCredentialsToPlatform as TAppConnectionTransitionCredentialsToPlatform +}; diff --git a/backend/src/services/app-connection/app-connection-maps.ts b/backend/src/services/app-connection/app-connection-maps.ts index 8a6c65426..eb28070d5 100644 --- a/backend/src/services/app-connection/app-connection-maps.ts +++ b/backend/src/services/app-connection/app-connection-maps.ts @@ -7,5 +7,7 @@ export const APP_CONNECTION_NAME_MAP: Record = { [AppConnection.AzureKeyVault]: "Azure Key Vault", [AppConnection.AzureAppConfiguration]: "Azure App Configuration", [AppConnection.Databricks]: "Databricks", - [AppConnection.Humanitec]: "Humanitec" + [AppConnection.Humanitec]: "Humanitec", + [AppConnection.Postgres]: "PostgreSQL", + [AppConnection.MsSql]: "Microsoft SQL Server" }; diff --git a/backend/src/services/app-connection/app-connection-schemas.ts b/backend/src/services/app-connection/app-connection-schemas.ts index ef3c16cf8..0d3968637 100644 --- a/backend/src/services/app-connection/app-connection-schemas.ts +++ b/backend/src/services/app-connection/app-connection-schemas.ts @@ -3,6 +3,8 @@ import { z } from "zod"; import { AppConnectionsSchema } from "@app/db/schemas/app-connections"; import { AppConnections } from "@app/lib/api-docs"; import { slugSchema } from "@app/server/lib/schemas"; +import { APP_CONNECTION_NAME_MAP } from "@app/services/app-connection/app-connection-maps"; +import { TAppConnectionBaseConfig } from "@app/services/app-connection/app-connection-types"; import { AppConnection } from "./app-connection-enums"; @@ -14,7 +16,10 @@ export const BaseAppConnectionSchema = AppConnectionsSchema.omit({ credentialsHash: z.string().optional() }); -export const GenericCreateAppConnectionFieldsSchema = (app: AppConnection) => +export const GenericCreateAppConnectionFieldsSchema = ( + app: AppConnection, + { supportsPlatformManagedCredentials = false }: TAppConnectionBaseConfig = {} +) => z.object({ name: slugSchema({ field: "name" }).describe(AppConnections.CREATE(app).name), description: z @@ -22,10 +27,16 @@ export const GenericCreateAppConnectionFieldsSchema = (app: AppConnection) => .trim() .max(256, "Description cannot exceed 256 characters") .nullish() - .describe(AppConnections.CREATE(app).description) + .describe(AppConnections.CREATE(app).description), + isPlatformManagedCredentials: supportsPlatformManagedCredentials + ? z.boolean().optional().default(false).describe(AppConnections.CREATE(app).isPlatformManagedCredentials) + : z.literal(false).optional().describe(`Not supported for ${APP_CONNECTION_NAME_MAP[app]} Connections.`) }); -export const GenericUpdateAppConnectionFieldsSchema = (app: AppConnection) => +export const GenericUpdateAppConnectionFieldsSchema = ( + app: AppConnection, + { supportsPlatformManagedCredentials = false }: TAppConnectionBaseConfig = {} +) => z.object({ name: slugSchema({ field: "name" }).describe(AppConnections.UPDATE(app).name).optional(), description: z @@ -33,5 +44,8 @@ export const GenericUpdateAppConnectionFieldsSchema = (app: AppConnection) => .trim() .max(256, "Description cannot exceed 256 characters") .nullish() - .describe(AppConnections.UPDATE(app).description) + .describe(AppConnections.UPDATE(app).description), + isPlatformManagedCredentials: supportsPlatformManagedCredentials + ? z.boolean().optional().describe(AppConnections.UPDATE(app).isPlatformManagedCredentials) + : z.literal(false).optional().describe(`Not supported for ${APP_CONNECTION_NAME_MAP[app]} Connections.`) }); diff --git a/backend/src/services/app-connection/app-connection-service.ts b/backend/src/services/app-connection/app-connection-service.ts index e2e55bba0..200b2fe0c 100644 --- a/backend/src/services/app-connection/app-connection-service.ts +++ b/backend/src/services/app-connection/app-connection-service.ts @@ -6,25 +6,27 @@ import { generateHash } from "@app/lib/crypto/encryption"; import { DatabaseErrorCode } from "@app/lib/error-codes"; import { BadRequestError, DatabaseError, NotFoundError } from "@app/lib/errors"; import { DiscriminativePick, OrgServiceActor } from "@app/lib/types"; -import { AppConnection } from "@app/services/app-connection/app-connection-enums"; import { decryptAppConnection, encryptAppConnectionCredentials, getAppConnectionMethodName, listAppConnectionOptions, + TRANSITION_CONNECTION_CREDENTIALS_TO_PLATFORM, validateAppConnectionCredentials } from "@app/services/app-connection/app-connection-fns"; -import { APP_CONNECTION_NAME_MAP } from "@app/services/app-connection/app-connection-maps"; -import { - TAppConnection, - TAppConnectionConfig, - TCreateAppConnectionDTO, - TUpdateAppConnectionDTO, - TValidateAppConnectionCredentials -} from "@app/services/app-connection/app-connection-types"; import { TKmsServiceFactory } from "@app/services/kms/kms-service"; import { TAppConnectionDALFactory } from "./app-connection-dal"; +import { AppConnection } from "./app-connection-enums"; +import { APP_CONNECTION_NAME_MAP } from "./app-connection-maps"; +import { + TAppConnection, + TAppConnectionConfig, + TAppConnectionRaw, + TCreateAppConnectionDTO, + TUpdateAppConnectionDTO, + TValidateAppConnectionCredentials +} from "./app-connection-types"; import { ValidateAwsConnectionCredentialsSchema } from "./aws"; import { awsConnectionService } from "./aws/aws-connection-service"; import { ValidateAzureAppConfigurationConnectionCredentialsSchema } from "./azure-app-configuration"; @@ -37,6 +39,8 @@ import { ValidateGitHubConnectionCredentialsSchema } from "./github"; import { githubConnectionService } from "./github/github-connection-service"; import { ValidateHumanitecConnectionCredentialsSchema } from "./humanitec"; import { humanitecConnectionService } from "./humanitec/humanitec-connection-service"; +import { ValidateMsSqlConnectionCredentialsSchema } from "./mssql"; +import { ValidatePostgresConnectionCredentialsSchema } from "./postgres"; export type TAppConnectionServiceFactoryDep = { appConnectionDAL: TAppConnectionDALFactory; @@ -53,7 +57,9 @@ const VALIDATE_APP_CONNECTION_CREDENTIALS_MAP: Record + appConnectionDAL.transaction(async (tx) => { + const encryptedCredentials = await encryptAppConnectionCredentials({ + credentials: connectionCredentials, + orgId: actor.orgId, + kmsService + }); + + return appConnectionDAL.create( + { + orgId: actor.orgId, + encryptedCredentials, + method, + app, + ...params + }, + tx + ); + }); + + let connection: TAppConnectionRaw; + + if (params.isPlatformManagedCredentials) { + connection = await TRANSITION_CONNECTION_CREDENTIALS_TO_PLATFORM[app]( + { + app, + orgId: actor.orgId, + credentials: validatedCredentials, + method + } as TAppConnectionConfig, + (platformCredentials) => createTransaction(platformCredentials) + ); + } else { + connection = await createTransaction(validatedCredentials); + } return { ...connection, @@ -213,11 +241,18 @@ export const appConnectionServiceFactory = ({ OrgPermissionSubjects.AppConnections ); - let encryptedCredentials: undefined | Buffer; + // prevent updating credentials or management status if platform managed + if (appConnection.isPlatformManagedCredentials && (params.isPlatformManagedCredentials === false || credentials)) { + throw new BadRequestError({ + message: "Cannot update credentials or management status for platform managed connections" + }); + } + + let updatedCredentials: undefined | TAppConnection["credentials"]; + + const { app, method } = appConnection as DiscriminativePick; if (credentials) { - const { app, method } = appConnection as DiscriminativePick; - if ( !VALIDATE_APP_CONNECTION_CREDENTIALS_MAP[app].safeParse({ method, @@ -230,29 +265,58 @@ export const appConnectionServiceFactory = ({ } Connection with method ${getAppConnectionMethodName(method)}` }); - const validatedCredentials = await validateAppConnectionCredentials({ + updatedCredentials = await validateAppConnectionCredentials({ app, orgId: actor.orgId, credentials, method } as TAppConnectionConfig); - if (!validatedCredentials) + if (!updatedCredentials) throw new BadRequestError({ message: "Unable to validate connection - check credentials" }); - - encryptedCredentials = await encryptAppConnectionCredentials({ - credentials: validatedCredentials, - orgId: actor.orgId, - kmsService - }); } try { - const updatedConnection = await appConnectionDAL.updateById(connectionId, { - orgId: actor.orgId, - encryptedCredentials, - ...params - }); + const updateTransaction = (connectionCredentials: TAppConnection["credentials"] | undefined) => + appConnectionDAL.transaction(async (tx) => { + const encryptedCredentials = connectionCredentials + ? await encryptAppConnectionCredentials({ + credentials: connectionCredentials, + orgId: actor.orgId, + kmsService + }) + : undefined; + + return appConnectionDAL.updateById( + connectionId, + { + orgId: actor.orgId, + encryptedCredentials, + ...params + }, + tx + ); + }); + + let updatedConnection: TAppConnectionRaw; + + if (params.isPlatformManagedCredentials) { + if (!updatedCredentials) + // prevent enabling platform managed credentials without re-confirming credentials + throw new BadRequestError({ message: "Credentials required to transition to platform managed credentials" }); + + updatedConnection = await TRANSITION_CONNECTION_CREDENTIALS_TO_PLATFORM[app]( + { + app, + orgId: actor.orgId, + credentials: updatedCredentials, + method + } as TAppConnectionConfig, + (platformCredentials) => updateTransaction(platformCredentials) + ); + } else { + updatedConnection = await updateTransaction(updatedCredentials); + } return await decryptAppConnection(updatedConnection, kmsService); } catch (err) { diff --git a/backend/src/services/app-connection/app-connection-types.ts b/backend/src/services/app-connection/app-connection-types.ts index 7051ecb11..1690f13da 100644 --- a/backend/src/services/app-connection/app-connection-types.ts +++ b/backend/src/services/app-connection/app-connection-types.ts @@ -1,24 +1,9 @@ -import { AWSRegion } from "@app/services/app-connection/app-connection-enums"; -import { - TAwsConnection, - TAwsConnectionConfig, - TAwsConnectionInput, - TValidateAwsConnectionCredentials -} from "@app/services/app-connection/aws"; -import { - TDatabricksConnection, - TDatabricksConnectionConfig, - TDatabricksConnectionInput, - TValidateDatabricksConnectionCredentials -} from "@app/services/app-connection/databricks"; -import { - TGitHubConnection, - TGitHubConnectionConfig, - TGitHubConnectionInput, - TValidateGitHubConnectionCredentials -} from "@app/services/app-connection/github"; +import { TAppConnectionDALFactory } from "@app/services/app-connection/app-connection-dal"; +import { TSqlConnectionConfig } from "@app/services/app-connection/shared/sql/sql-connection-types"; import { SecretSync } from "@app/services/secret-sync/secret-sync-enums"; +import { AWSRegion } from "./app-connection-enums"; +import { TAwsConnection, TAwsConnectionConfig, TAwsConnectionInput, TValidateAwsConnectionCredentials } from "./aws"; import { TAzureAppConfigurationConnection, TAzureAppConfigurationConnectionConfig, @@ -31,13 +16,27 @@ import { TAzureKeyVaultConnectionInput, TValidateAzureKeyVaultConnectionCredentials } from "./azure-key-vault"; +import { + TDatabricksConnection, + TDatabricksConnectionConfig, + TDatabricksConnectionInput, + TValidateDatabricksConnectionCredentials +} from "./databricks"; import { TGcpConnection, TGcpConnectionConfig, TGcpConnectionInput, TValidateGcpConnectionCredentials } from "./gcp"; +import { + TGitHubConnection, + TGitHubConnectionConfig, + TGitHubConnectionInput, + TValidateGitHubConnectionCredentials +} from "./github"; import { THumanitecConnection, THumanitecConnectionConfig, THumanitecConnectionInput, TValidateHumanitecConnectionCredentials } from "./humanitec"; +import { TMsSqlConnection, TMsSqlConnectionInput, TValidateMsSqlConnectionCredentials } from "./mssql"; +import { TPostgresConnection, TPostgresConnectionInput, TValidatePostgresConnectionCredentials } from "./postgres"; export type TAppConnection = { id: string } & ( | TAwsConnection @@ -47,8 +46,14 @@ export type TAppConnection = { id: string } & ( | TAzureAppConfigurationConnection | TDatabricksConnection | THumanitecConnection + | TPostgresConnection + | TMsSqlConnection ); +export type TAppConnectionRaw = NonNullable>>; + +export type TSqlConnection = TPostgresConnection | TMsSqlConnection; + export type TAppConnectionInput = { id: string } & ( | TAwsConnectionInput | TGitHubConnectionInput @@ -57,11 +62,15 @@ export type TAppConnectionInput = { id: string } & ( | TAzureAppConfigurationConnectionInput | TDatabricksConnectionInput | THumanitecConnectionInput + | TPostgresConnectionInput + | TMsSqlConnectionInput ); +export type TSqlConnectionInput = TPostgresConnectionInput | TMsSqlConnectionInput; + export type TCreateAppConnectionDTO = Pick< TAppConnectionInput, - "credentials" | "method" | "name" | "app" | "description" + "credentials" | "method" | "name" | "app" | "description" | "isPlatformManagedCredentials" >; export type TUpdateAppConnectionDTO = Partial> & { @@ -75,7 +84,8 @@ export type TAppConnectionConfig = | TAzureKeyVaultConnectionConfig | TAzureAppConfigurationConnectionConfig | TDatabricksConnectionConfig - | THumanitecConnectionConfig; + | THumanitecConnectionConfig + | TSqlConnectionConfig; export type TValidateAppConnectionCredentials = | TValidateAwsConnectionCredentials @@ -84,10 +94,25 @@ export type TValidateAppConnectionCredentials = | TValidateAzureKeyVaultConnectionCredentials | TValidateAzureAppConfigurationConnectionCredentials | TValidateDatabricksConnectionCredentials - | TValidateHumanitecConnectionCredentials; + | TValidateHumanitecConnectionCredentials + | TValidatePostgresConnectionCredentials + | TValidateMsSqlConnectionCredentials; export type TListAwsConnectionKmsKeys = { connectionId: string; region: AWSRegion; destination: SecretSync.AWSParameterStore | SecretSync.AWSSecretsManager; }; + +export type TAppConnectionCredentialsValidator = ( + appConnection: TAppConnectionConfig +) => Promise; + +export type TAppConnectionTransitionCredentialsToPlatform = ( + appConnection: TAppConnectionConfig, + callback: (credentials: TAppConnection["credentials"]) => Promise +) => Promise; + +export type TAppConnectionBaseConfig = { + supportsPlatformManagedCredentials?: boolean; +}; diff --git a/backend/src/services/app-connection/aws/aws-connection-fns.ts b/backend/src/services/app-connection/aws/aws-connection-fns.ts index 00a44745a..767cb82fb 100644 --- a/backend/src/services/app-connection/aws/aws-connection-fns.ts +++ b/backend/src/services/app-connection/aws/aws-connection-fns.ts @@ -92,7 +92,7 @@ export const validateAwsConnectionCredentials = async (appConnection: TAwsConnec resp = await sts.getCallerIdentity().promise(); } catch (e: unknown) { throw new BadRequestError({ - message: `Unable to validate connection - verify credentials` + message: `Unable to validate connection: verify credentials` }); } diff --git a/backend/src/services/app-connection/aws/aws-connection-schemas.ts b/backend/src/services/app-connection/aws/aws-connection-schemas.ts index c06c6f0ed..8cb19ba26 100644 --- a/backend/src/services/app-connection/aws/aws-connection-schemas.ts +++ b/backend/src/services/app-connection/aws/aws-connection-schemas.ts @@ -48,11 +48,11 @@ export const SanitizedAwsConnectionSchema = z.discriminatedUnion("method", [ export const ValidateAwsConnectionCredentialsSchema = z.discriminatedUnion("method", [ z.object({ - method: z.literal(AwsConnectionMethod.AssumeRole).describe(AppConnections?.CREATE(AppConnection.AWS).method), + method: z.literal(AwsConnectionMethod.AssumeRole).describe(AppConnections.CREATE(AppConnection.AWS).method), credentials: AwsConnectionAssumeRoleCredentialsSchema.describe(AppConnections.CREATE(AppConnection.AWS).credentials) }), z.object({ - method: z.literal(AwsConnectionMethod.AccessKey).describe(AppConnections?.CREATE(AppConnection.AWS).method), + method: z.literal(AwsConnectionMethod.AccessKey).describe(AppConnections.CREATE(AppConnection.AWS).method), credentials: AwsConnectionAccessTokenCredentialsSchema.describe( AppConnections.CREATE(AppConnection.AWS).credentials ) diff --git a/backend/src/services/app-connection/azure-app-configuration/azure-app-configuration-connection-fns.ts b/backend/src/services/app-connection/azure-app-configuration/azure-app-configuration-connection-fns.ts index 9ccfc72b6..937a8a84f 100644 --- a/backend/src/services/app-connection/azure-app-configuration/azure-app-configuration-connection-fns.ts +++ b/backend/src/services/app-connection/azure-app-configuration/azure-app-configuration-connection-fns.ts @@ -57,7 +57,7 @@ export const validateAzureAppConfigurationConnectionCredentials = async ( tokenError = e; } else { throw new BadRequestError({ - message: `Unable to validate connection - verify credentials` + message: `Unable to validate connection: verify credentials` }); } } diff --git a/backend/src/services/app-connection/azure-key-vault/azure-key-vault-connection-fns.ts b/backend/src/services/app-connection/azure-key-vault/azure-key-vault-connection-fns.ts index 12b1b3f3b..8e8a6b2a7 100644 --- a/backend/src/services/app-connection/azure-key-vault/azure-key-vault-connection-fns.ts +++ b/backend/src/services/app-connection/azure-key-vault/azure-key-vault-connection-fns.ts @@ -129,7 +129,7 @@ export const validateAzureKeyVaultConnectionCredentials = async (config: TAzureK tokenError = e; } else { throw new BadRequestError({ - message: `Unable to validate connection - verify credentials` + message: `Unable to validate connection: verify credentials` }); } } diff --git a/backend/src/services/app-connection/databricks/databricks-connection-fns.ts b/backend/src/services/app-connection/databricks/databricks-connection-fns.ts index a12fe290c..fc8da062d 100644 --- a/backend/src/services/app-connection/databricks/databricks-connection-fns.ts +++ b/backend/src/services/app-connection/databricks/databricks-connection-fns.ts @@ -86,7 +86,7 @@ export const validateDatabricksConnectionCredentials = async (appConnection: TDa }; } catch (e: unknown) { throw new BadRequestError({ - message: `Unable to validate connection - verify credentials` + message: `Unable to validate connection: verify credentials` }); } }; diff --git a/backend/src/services/app-connection/databricks/databricks-connection-schemas.ts b/backend/src/services/app-connection/databricks/databricks-connection-schemas.ts index af1a75127..d876b9749 100644 --- a/backend/src/services/app-connection/databricks/databricks-connection-schemas.ts +++ b/backend/src/services/app-connection/databricks/databricks-connection-schemas.ts @@ -49,7 +49,7 @@ export const ValidateDatabricksConnectionCredentialsSchema = z.discriminatedUnio z.object({ method: z .literal(DatabricksConnectionMethod.ServicePrincipal) - .describe(AppConnections?.CREATE(AppConnection.Databricks).method), + .describe(AppConnections.CREATE(AppConnection.Databricks).method), credentials: DatabricksConnectionServicePrincipalInputCredentialsSchema.describe( AppConnections.CREATE(AppConnection.Databricks).credentials ) diff --git a/backend/src/services/app-connection/gcp/gcp-connection-fns.ts b/backend/src/services/app-connection/gcp/gcp-connection-fns.ts index 8f54735e4..8bde74062 100644 --- a/backend/src/services/app-connection/gcp/gcp-connection-fns.ts +++ b/backend/src/services/app-connection/gcp/gcp-connection-fns.ts @@ -4,10 +4,10 @@ import { GetAccessTokenResponse } from "google-auth-library/build/src/auth/oauth import { getConfig } from "@app/lib/config/env"; import { request } from "@app/lib/config/request"; import { BadRequestError, InternalServerError } from "@app/lib/errors"; +import { getAppConnectionMethodName } from "@app/services/app-connection/app-connection-fns"; import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; import { AppConnection } from "../app-connection-enums"; -import { getAppConnectionMethodName } from "../app-connection-fns"; import { GcpConnectionMethod } from "./gcp-connection-enums"; import { GCPApp, diff --git a/backend/src/services/app-connection/gcp/gcp-connection-schemas.ts b/backend/src/services/app-connection/gcp/gcp-connection-schemas.ts index 3c313f205..3637f06dc 100644 --- a/backend/src/services/app-connection/gcp/gcp-connection-schemas.ts +++ b/backend/src/services/app-connection/gcp/gcp-connection-schemas.ts @@ -37,7 +37,7 @@ export const ValidateGcpConnectionCredentialsSchema = z.discriminatedUnion("meth z.object({ method: z .literal(GcpConnectionMethod.ServiceAccountImpersonation) - .describe(AppConnections?.CREATE(AppConnection.GCP).method), + .describe(AppConnections.CREATE(AppConnection.GCP).method), credentials: GcpConnectionServiceAccountImpersonationCredentialsSchema.describe( AppConnections.CREATE(AppConnection.GCP).credentials ) diff --git a/backend/src/services/app-connection/github/github-connection-fns.ts b/backend/src/services/app-connection/github/github-connection-fns.ts index 391ba5f96..6ec675c0f 100644 --- a/backend/src/services/app-connection/github/github-connection-fns.ts +++ b/backend/src/services/app-connection/github/github-connection-fns.ts @@ -200,7 +200,7 @@ export const validateGitHubConnectionCredentials = async (config: TGitHubConnect }); } catch (e: unknown) { throw new BadRequestError({ - message: `Unable to validate connection - verify credentials` + message: `Unable to validate connection: verify credentials` }); } diff --git a/backend/src/services/app-connection/humanitec/humanitec-connection-enums.ts b/backend/src/services/app-connection/humanitec/humanitec-connection-enums.ts index a3f31ed66..8011999b2 100644 --- a/backend/src/services/app-connection/humanitec/humanitec-connection-enums.ts +++ b/backend/src/services/app-connection/humanitec/humanitec-connection-enums.ts @@ -1,3 +1,3 @@ export enum HumanitecConnectionMethod { - API_TOKEN = "api-token" + ApiToken = "api-token" } diff --git a/backend/src/services/app-connection/humanitec/humanitec-connection-fns.ts b/backend/src/services/app-connection/humanitec/humanitec-connection-fns.ts index 0eeb9bfbf..b8d257026 100644 --- a/backend/src/services/app-connection/humanitec/humanitec-connection-fns.ts +++ b/backend/src/services/app-connection/humanitec/humanitec-connection-fns.ts @@ -18,7 +18,7 @@ export const getHumanitecConnectionListItem = () => { return { name: "Humanitec" as const, app: AppConnection.Humanitec as const, - methods: Object.values(HumanitecConnectionMethod) as [HumanitecConnectionMethod.API_TOKEN] + methods: Object.values(HumanitecConnectionMethod) as [HumanitecConnectionMethod.ApiToken] }; }; @@ -40,7 +40,7 @@ export const validateHumanitecConnectionCredentials = async (config: THumanitecC }); } throw new BadRequestError({ - message: "Unable to validate connection - verify credentials" + message: "Unable to validate connection: verify credentials" }); } diff --git a/backend/src/services/app-connection/humanitec/humanitec-connection-schemas.ts b/backend/src/services/app-connection/humanitec/humanitec-connection-schemas.ts index 145f78b85..4e6cb0078 100644 --- a/backend/src/services/app-connection/humanitec/humanitec-connection-schemas.ts +++ b/backend/src/services/app-connection/humanitec/humanitec-connection-schemas.ts @@ -17,13 +17,13 @@ export const HumanitecConnectionAccessTokenCredentialsSchema = z.object({ const BaseHumanitecConnectionSchema = BaseAppConnectionSchema.extend({ app: z.literal(AppConnection.Humanitec) }); export const HumanitecConnectionSchema = BaseHumanitecConnectionSchema.extend({ - method: z.literal(HumanitecConnectionMethod.API_TOKEN), + method: z.literal(HumanitecConnectionMethod.ApiToken), credentials: HumanitecConnectionAccessTokenCredentialsSchema }); export const SanitizedHumanitecConnectionSchema = z.discriminatedUnion("method", [ BaseHumanitecConnectionSchema.extend({ - method: z.literal(HumanitecConnectionMethod.API_TOKEN), + method: z.literal(HumanitecConnectionMethod.ApiToken), credentials: HumanitecConnectionAccessTokenCredentialsSchema.pick({}) }) ]); @@ -31,8 +31,8 @@ export const SanitizedHumanitecConnectionSchema = z.discriminatedUnion("method", export const ValidateHumanitecConnectionCredentialsSchema = z.discriminatedUnion("method", [ z.object({ method: z - .literal(HumanitecConnectionMethod.API_TOKEN) - .describe(AppConnections?.CREATE(AppConnection.Humanitec).method), + .literal(HumanitecConnectionMethod.ApiToken) + .describe(AppConnections.CREATE(AppConnection.Humanitec).method), credentials: HumanitecConnectionAccessTokenCredentialsSchema.describe( AppConnections.CREATE(AppConnection.Humanitec).credentials ) diff --git a/backend/src/services/app-connection/mssql/index.ts b/backend/src/services/app-connection/mssql/index.ts new file mode 100644 index 000000000..81044d0aa --- /dev/null +++ b/backend/src/services/app-connection/mssql/index.ts @@ -0,0 +1,4 @@ +export * from "./mssql-connection-enums"; +export * from "./mssql-connection-fns"; +export * from "./mssql-connection-schemas"; +export * from "./mssql-connection-types"; diff --git a/backend/src/services/app-connection/mssql/mssql-connection-enums.ts b/backend/src/services/app-connection/mssql/mssql-connection-enums.ts new file mode 100644 index 000000000..335b00441 --- /dev/null +++ b/backend/src/services/app-connection/mssql/mssql-connection-enums.ts @@ -0,0 +1,3 @@ +export enum MsSqlConnectionMethod { + UsernameAndPassword = "username-and-password" +} diff --git a/backend/src/services/app-connection/mssql/mssql-connection-fns.ts b/backend/src/services/app-connection/mssql/mssql-connection-fns.ts new file mode 100644 index 000000000..3b6ecf98a --- /dev/null +++ b/backend/src/services/app-connection/mssql/mssql-connection-fns.ts @@ -0,0 +1,12 @@ +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; + +import { MsSqlConnectionMethod } from "./mssql-connection-enums"; + +export const getMsSqlConnectionListItem = () => { + return { + name: "Microsoft SQL Server" as const, + app: AppConnection.MsSql as const, + methods: Object.values(MsSqlConnectionMethod) as [MsSqlConnectionMethod.UsernameAndPassword], + supportsPlatformManagement: true as const + }; +}; diff --git a/backend/src/services/app-connection/mssql/mssql-connection-schemas.ts b/backend/src/services/app-connection/mssql/mssql-connection-schemas.ts new file mode 100644 index 000000000..1b659b658 --- /dev/null +++ b/backend/src/services/app-connection/mssql/mssql-connection-schemas.ts @@ -0,0 +1,65 @@ +import z from "zod"; + +import { AppConnections } from "@app/lib/api-docs"; +import { + BaseAppConnectionSchema, + GenericCreateAppConnectionFieldsSchema, + GenericUpdateAppConnectionFieldsSchema +} from "@app/services/app-connection/app-connection-schemas"; + +import { AppConnection } from "../app-connection-enums"; +import { BaseSqlUsernameAndPasswordConnectionSchema } from "../shared/sql"; +import { MsSqlConnectionMethod } from "./mssql-connection-enums"; + +export const MsSqlConnectionAccessTokenCredentialsSchema = BaseSqlUsernameAndPasswordConnectionSchema; + +const BaseMsSqlConnectionSchema = BaseAppConnectionSchema.extend({ + app: z.literal(AppConnection.MsSql) +}); + +export const MsSqlConnectionSchema = BaseMsSqlConnectionSchema.extend({ + method: z.literal(MsSqlConnectionMethod.UsernameAndPassword), + credentials: MsSqlConnectionAccessTokenCredentialsSchema +}); + +export const SanitizedMsSqlConnectionSchema = z.discriminatedUnion("method", [ + BaseMsSqlConnectionSchema.extend({ + method: z.literal(MsSqlConnectionMethod.UsernameAndPassword), + credentials: MsSqlConnectionAccessTokenCredentialsSchema.pick({ + host: true, + database: true, + port: true, + username: true + }) + }) +]); + +export const ValidateMsSqlConnectionCredentialsSchema = z.discriminatedUnion("method", [ + z.object({ + method: z + .literal(MsSqlConnectionMethod.UsernameAndPassword) + .describe(AppConnections.CREATE(AppConnection.MsSql).method), + credentials: MsSqlConnectionAccessTokenCredentialsSchema.describe( + AppConnections.CREATE(AppConnection.MsSql).credentials + ) + }) +]); + +export const CreateMsSqlConnectionSchema = ValidateMsSqlConnectionCredentialsSchema.and( + GenericCreateAppConnectionFieldsSchema(AppConnection.MsSql, { supportsPlatformManagedCredentials: true }) +); + +export const UpdateMsSqlConnectionSchema = z + .object({ + credentials: MsSqlConnectionAccessTokenCredentialsSchema.optional().describe( + AppConnections.UPDATE(AppConnection.MsSql).credentials + ) + }) + .and(GenericUpdateAppConnectionFieldsSchema(AppConnection.MsSql, { supportsPlatformManagedCredentials: true })); + +export const MsSqlConnectionListItemSchema = z.object({ + name: z.literal("Microsoft SQL Server"), + app: z.literal(AppConnection.MsSql), + methods: z.nativeEnum(MsSqlConnectionMethod).array(), + supportsPlatformManagement: z.literal(true) +}); diff --git a/backend/src/services/app-connection/mssql/mssql-connection-types.ts b/backend/src/services/app-connection/mssql/mssql-connection-types.ts new file mode 100644 index 000000000..ac8fa8f0f --- /dev/null +++ b/backend/src/services/app-connection/mssql/mssql-connection-types.ts @@ -0,0 +1,16 @@ +import z from "zod"; + +import { AppConnection } from "../app-connection-enums"; +import { + CreateMsSqlConnectionSchema, + MsSqlConnectionSchema, + ValidateMsSqlConnectionCredentialsSchema +} from "./mssql-connection-schemas"; + +export type TMsSqlConnection = z.infer; + +export type TMsSqlConnectionInput = z.infer & { + app: AppConnection.MsSql; +}; + +export type TValidateMsSqlConnectionCredentials = typeof ValidateMsSqlConnectionCredentialsSchema; diff --git a/backend/src/services/app-connection/postgres/index.ts b/backend/src/services/app-connection/postgres/index.ts new file mode 100644 index 000000000..23ddbba98 --- /dev/null +++ b/backend/src/services/app-connection/postgres/index.ts @@ -0,0 +1,4 @@ +export * from "./postgres-connection-enums"; +export * from "./postgres-connection-fns"; +export * from "./postgres-connection-schemas"; +export * from "./postgres-connection-types"; diff --git a/backend/src/services/app-connection/postgres/postgres-connection-enums.ts b/backend/src/services/app-connection/postgres/postgres-connection-enums.ts new file mode 100644 index 000000000..a29807987 --- /dev/null +++ b/backend/src/services/app-connection/postgres/postgres-connection-enums.ts @@ -0,0 +1,3 @@ +export enum PostgresConnectionMethod { + UsernameAndPassword = "username-and-password" +} diff --git a/backend/src/services/app-connection/postgres/postgres-connection-fns.ts b/backend/src/services/app-connection/postgres/postgres-connection-fns.ts new file mode 100644 index 000000000..39053dbf6 --- /dev/null +++ b/backend/src/services/app-connection/postgres/postgres-connection-fns.ts @@ -0,0 +1,12 @@ +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; + +import { PostgresConnectionMethod } from "./postgres-connection-enums"; + +export const getPostgresConnectionListItem = () => { + return { + name: "PostgreSQL" as const, + app: AppConnection.Postgres as const, + methods: Object.values(PostgresConnectionMethod) as [PostgresConnectionMethod.UsernameAndPassword], + supportsPlatformManagement: true as const + }; +}; diff --git a/backend/src/services/app-connection/postgres/postgres-connection-schemas.ts b/backend/src/services/app-connection/postgres/postgres-connection-schemas.ts new file mode 100644 index 000000000..3867ea8bf --- /dev/null +++ b/backend/src/services/app-connection/postgres/postgres-connection-schemas.ts @@ -0,0 +1,63 @@ +import z from "zod"; + +import { AppConnections } from "@app/lib/api-docs"; +import { + BaseAppConnectionSchema, + GenericCreateAppConnectionFieldsSchema, + GenericUpdateAppConnectionFieldsSchema +} from "@app/services/app-connection/app-connection-schemas"; + +import { AppConnection } from "../app-connection-enums"; +import { BaseSqlUsernameAndPasswordConnectionSchema } from "../shared/sql"; +import { PostgresConnectionMethod } from "./postgres-connection-enums"; + +export const PostgresConnectionAccessTokenCredentialsSchema = BaseSqlUsernameAndPasswordConnectionSchema; + +const BasePostgresConnectionSchema = BaseAppConnectionSchema.extend({ app: z.literal(AppConnection.Postgres) }); + +export const PostgresConnectionSchema = BasePostgresConnectionSchema.extend({ + method: z.literal(PostgresConnectionMethod.UsernameAndPassword), + credentials: PostgresConnectionAccessTokenCredentialsSchema +}); + +export const SanitizedPostgresConnectionSchema = z.discriminatedUnion("method", [ + BasePostgresConnectionSchema.extend({ + method: z.literal(PostgresConnectionMethod.UsernameAndPassword), + credentials: PostgresConnectionAccessTokenCredentialsSchema.pick({ + host: true, + database: true, + port: true, + username: true + }) + }) +]); + +export const ValidatePostgresConnectionCredentialsSchema = z.discriminatedUnion("method", [ + z.object({ + method: z + .literal(PostgresConnectionMethod.UsernameAndPassword) + .describe(AppConnections.CREATE(AppConnection.Postgres).method), + credentials: PostgresConnectionAccessTokenCredentialsSchema.describe( + AppConnections.CREATE(AppConnection.Postgres).credentials + ) + }) +]); + +export const CreatePostgresConnectionSchema = ValidatePostgresConnectionCredentialsSchema.and( + GenericCreateAppConnectionFieldsSchema(AppConnection.Postgres, { supportsPlatformManagedCredentials: true }) +); + +export const UpdatePostgresConnectionSchema = z + .object({ + credentials: PostgresConnectionAccessTokenCredentialsSchema.optional().describe( + AppConnections.UPDATE(AppConnection.Postgres).credentials + ) + }) + .and(GenericUpdateAppConnectionFieldsSchema(AppConnection.Postgres, { supportsPlatformManagedCredentials: true })); + +export const PostgresConnectionListItemSchema = z.object({ + name: z.literal("PostgreSQL"), + app: z.literal(AppConnection.Postgres), + methods: z.nativeEnum(PostgresConnectionMethod).array(), + supportsPlatformManagement: z.literal(true) +}); diff --git a/backend/src/services/app-connection/postgres/postgres-connection-types.ts b/backend/src/services/app-connection/postgres/postgres-connection-types.ts new file mode 100644 index 000000000..0c8bcff42 --- /dev/null +++ b/backend/src/services/app-connection/postgres/postgres-connection-types.ts @@ -0,0 +1,16 @@ +import z from "zod"; + +import { AppConnection } from "../app-connection-enums"; +import { + CreatePostgresConnectionSchema, + PostgresConnectionSchema, + ValidatePostgresConnectionCredentialsSchema +} from "./postgres-connection-schemas"; + +export type TPostgresConnection = z.infer; + +export type TPostgresConnectionInput = z.infer & { + app: AppConnection.Postgres; +}; + +export type TValidatePostgresConnectionCredentials = typeof ValidatePostgresConnectionCredentialsSchema; diff --git a/backend/src/services/app-connection/shared/sql/index.ts b/backend/src/services/app-connection/shared/sql/index.ts new file mode 100644 index 000000000..107929154 --- /dev/null +++ b/backend/src/services/app-connection/shared/sql/index.ts @@ -0,0 +1,2 @@ +export * from "./sql-connection-fns"; +export * from "./sql-connection-schemas"; diff --git a/backend/src/services/app-connection/shared/sql/sql-connection-fns.ts b/backend/src/services/app-connection/shared/sql/sql-connection-fns.ts new file mode 100644 index 000000000..b8a29fa77 --- /dev/null +++ b/backend/src/services/app-connection/shared/sql/sql-connection-fns.ts @@ -0,0 +1,113 @@ +import knex, { Knex } from "knex"; + +import { verifyHostInputValidity } from "@app/ee/services/dynamic-secret/dynamic-secret-fns"; +import { + TSqlCredentialsRotationGeneratedCredentials, + TSqlCredentialsRotationWithConnection +} from "@app/ee/services/secret-rotation-v2/shared/sql-credentials/sql-credentials-rotation-types"; +import { BadRequestError, DatabaseError } from "@app/lib/errors"; +import { alphaNumericNanoId } from "@app/lib/nanoid"; +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; +import { TAppConnectionRaw, TSqlConnection } from "@app/services/app-connection/app-connection-types"; +import { TSqlConnectionConfig } from "@app/services/app-connection/shared/sql/sql-connection-types"; + +const EXTERNAL_REQUEST_TIMEOUT = 10 * 1000; + +const SQL_CONNECTION_CLIENT_MAP = { + [AppConnection.Postgres]: "pg", + [AppConnection.MsSql]: "mssql" +}; + +export const getSqlConnectionClient = async ( + appConnection: Pick, + options?: Record +) => { + const { + app, + credentials: { host: baseHost, database, port, sslCertificate, password, username } + } = appConnection; + + const ssl = sslCertificate ? { rejectUnauthorized: false, ca: sslCertificate } : undefined; + + const [host] = await verifyHostInputValidity(baseHost); + + const client = knex({ + client: SQL_CONNECTION_CLIENT_MAP[app], + connection: { + database, + port, + host, + user: username, + password, + connectionTimeoutMillis: EXTERNAL_REQUEST_TIMEOUT, + ssl, + options + } + }); + + return client; +}; + +export const validateSqlConnectionCredentials = async (config: TSqlConnectionConfig) => { + const { credentials, app } = config; + + const client = await getSqlConnectionClient({ app, credentials }); + + try { + await client.raw(`Select 1`); + + return credentials; + } catch (error) { + throw new BadRequestError({ + message: + (error as Error)?.message?.replaceAll(credentials.password, "********************") ?? + "Unable to validate connection: verify credentials" + }); + } finally { + await client.destroy(); + } +}; + +export const SQL_CONNECTION_ALTER_LOGIN_STATEMENT: Record< + TSqlCredentialsRotationWithConnection["connection"]["app"], + (credentials: TSqlCredentialsRotationGeneratedCredentials[number]) => [string, Knex.RawBinding] +> = { + [AppConnection.Postgres]: ({ username, password }) => [`ALTER USER ?? WITH PASSWORD '${password}';`, [username]], + [AppConnection.MsSql]: ({ username, password }) => [`ALTER LOGIN ?? WITH PASSWORD = '${password}';`, [username]] +}; + +export const transferSqlConnectionCredentialsToPlatform = async ( + config: TSqlConnectionConfig, + callback: (credentials: TSqlConnectionConfig["credentials"]) => Promise +) => { + const { credentials, app } = config; + + const client = await getSqlConnectionClient({ app, credentials }); + + const newPassword = alphaNumericNanoId(32); + + try { + return await client.transaction(async (tx) => { + await tx.raw( + ...SQL_CONNECTION_ALTER_LOGIN_STATEMENT[app]({ username: credentials.username, password: newPassword }) + ); + return callback({ + ...credentials, + password: newPassword + }); + }); + } catch (error) { + // update/create service function will handle + if (error instanceof DatabaseError) { + throw error; + } + + throw new BadRequestError({ + message: + (error as Error)?.message?.replaceAll(newPassword, "********************") ?? + "Encountered an error transferring credentials to platform" + }); + } finally { + await client.destroy(); + } +}; diff --git a/backend/src/services/app-connection/shared/sql/sql-connection-schemas.ts b/backend/src/services/app-connection/shared/sql/sql-connection-schemas.ts new file mode 100644 index 000000000..9688d8d43 --- /dev/null +++ b/backend/src/services/app-connection/shared/sql/sql-connection-schemas.ts @@ -0,0 +1,12 @@ +import { z } from "zod"; + +import { AppConnections } from "@app/lib/api-docs"; + +export const BaseSqlUsernameAndPasswordConnectionSchema = z.object({ + host: z.string().trim().min(1, "Host required").describe(AppConnections.CREDENTIALS.SQL_CONNECTION.host), + port: z.coerce.number().describe(AppConnections.CREDENTIALS.SQL_CONNECTION.port), + database: z.string().trim().min(1, "Database required").describe(AppConnections.CREDENTIALS.SQL_CONNECTION.database), + username: z.string().trim().min(1, "Username required").describe(AppConnections.CREDENTIALS.SQL_CONNECTION.username), + password: z.string().trim().min(1, "Password required").describe(AppConnections.CREDENTIALS.SQL_CONNECTION.password), + sslCertificate: z.string().trim().optional().describe(AppConnections.CREDENTIALS.SQL_CONNECTION.sslCertificate) +}); diff --git a/backend/src/services/app-connection/shared/sql/sql-connection-types.ts b/backend/src/services/app-connection/shared/sql/sql-connection-types.ts new file mode 100644 index 000000000..bbfe4086c --- /dev/null +++ b/backend/src/services/app-connection/shared/sql/sql-connection-types.ts @@ -0,0 +1,6 @@ +import { DiscriminativePick } from "@app/lib/types"; +import { TSqlConnectionInput } from "@app/services/app-connection/app-connection-types"; + +export type TSqlConnectionConfig = DiscriminativePick & { + orgId: string; +}; diff --git a/backend/src/services/secret-sync/secret-sync-dal.ts b/backend/src/services/secret-sync/secret-sync-dal.ts index cc2cd1fcf..617393668 100644 --- a/backend/src/services/secret-sync/secret-sync-dal.ts +++ b/backend/src/services/secret-sync/secret-sync-dal.ts @@ -31,7 +31,11 @@ const baseSecretSyncQuery = ({ filter, db, tx }: { db: TDbClient; filter?: Secre db.ref("description").withSchema(TableName.AppConnection).as("connectionDescription"), db.ref("version").withSchema(TableName.AppConnection).as("connectionVersion"), db.ref("createdAt").withSchema(TableName.AppConnection).as("connectionCreatedAt"), - db.ref("updatedAt").withSchema(TableName.AppConnection).as("connectionUpdatedAt") + db.ref("updatedAt").withSchema(TableName.AppConnection).as("connectionUpdatedAt"), + db + .ref("isPlatformManagedCredentials") + .withSchema(TableName.AppConnection) + .as("connectionIsPlatformManagedCredentials") ); if (filter) { @@ -60,6 +64,7 @@ const expandSecretSync = ( connectionCreatedAt, connectionUpdatedAt, connectionVersion, + connectionIsPlatformManagedCredentials, ...el } = secretSync; @@ -77,7 +82,8 @@ const expandSecretSync = ( description: connectionDescription, createdAt: connectionCreatedAt, updatedAt: connectionUpdatedAt, - version: connectionVersion + version: connectionVersion, + isPlatformManagedCredentials: connectionIsPlatformManagedCredentials }, folder: folder ? { diff --git a/backend/src/services/secret-sync/secret-sync-service.ts b/backend/src/services/secret-sync/secret-sync-service.ts index 5c4a7e850..14a1a1cf0 100644 --- a/backend/src/services/secret-sync/secret-sync-service.ts +++ b/backend/src/services/secret-sync/secret-sync-service.ts @@ -119,14 +119,10 @@ export const secretSyncServiceFactory = ({ { destination, syncName, projectId }: TFindSecretSyncByNameDTO, actor: OrgServiceActor ) => { - const folders = await folderDAL.findByProjectId(projectId); - - // we prevent conflicting names within a project so this will only return one at most - const [secretSync] = await secretSyncDAL.find({ + // we prevent conflicting names within a project + const secretSync = await secretSyncDAL.findOne({ name: syncName, - $in: { - folderId: folders.map((folder) => folder.id) - } + projectId }); if (!secretSync) diff --git a/backend/src/services/secret-sync/secret-sync-types.ts b/backend/src/services/secret-sync/secret-sync-types.ts index 2044c7c17..bd28e1ee7 100644 --- a/backend/src/services/secret-sync/secret-sync-types.ts +++ b/backend/src/services/secret-sync/secret-sync-types.ts @@ -1,6 +1,6 @@ import { Job } from "bullmq"; -import { TCreateAuditLogDTO } from "@app/ee/services/audit-log/audit-log-types"; +import { AuditLogInfo } from "@app/ee/services/audit-log/audit-log-types"; import { QueueJobs } from "@app/queue"; import { ResourceMetadataDTO } from "@app/services/resource-metadata/resource-metadata-schema"; import { @@ -129,8 +129,6 @@ export type TDeleteSecretSyncDTO = { removeSecrets: boolean; }; -type AuditLogInfo = Pick; - export enum SecretSyncStatus { Pending = "pending", Running = "running", diff --git a/backend/src/services/secret-v2-bridge/secret-v2-bridge-dal.ts b/backend/src/services/secret-v2-bridge/secret-v2-bridge-dal.ts index b4619abd3..8d9e5f0cc 100644 --- a/backend/src/services/secret-v2-bridge/secret-v2-bridge-dal.ts +++ b/backend/src/services/secret-v2-bridge/secret-v2-bridge-dal.ts @@ -35,15 +35,25 @@ export const secretV2BridgeDALFactory = (db: TDbClient) => { `${TableName.SecretV2JnTag}.${TableName.SecretTag}Id`, `${TableName.SecretTag}.id` ) + .leftJoin( + TableName.SecretRotationV2SecretMapping, + `${TableName.SecretV2}.id`, + `${TableName.SecretRotationV2SecretMapping}.secretId` + ) .select(selectAllTableCols(TableName.SecretV2)) .select(db.ref("id").withSchema(TableName.SecretTag).as("tagId")) .select(db.ref("color").withSchema(TableName.SecretTag).as("tagColor")) - .select(db.ref("slug").withSchema(TableName.SecretTag).as("tagSlug")); - + .select(db.ref("slug").withSchema(TableName.SecretTag).as("tagSlug")) + .select(db.ref("rotationId").withSchema(TableName.SecretRotationV2SecretMapping)); const data = sqlNestRelationships({ data: docs, key: "id", - parentMapper: (el) => ({ _id: el.id, ...SecretsV2Schema.parse(el) }), + parentMapper: (el) => ({ + _id: el.id, + ...SecretsV2Schema.parse(el), + isRotatedSecret: Boolean(el.rotationId), + rotationId: el.rotationId + }), childrenMapper: [ { key: "tagId", @@ -79,6 +89,11 @@ export const secretV2BridgeDALFactory = (db: TDbClient) => { `${TableName.SecretTag}.id` ) .leftJoin(TableName.ResourceMetadata, `${TableName.SecretV2}.id`, `${TableName.ResourceMetadata}.secretId`) + .leftJoin( + TableName.SecretRotationV2SecretMapping, + `${TableName.SecretV2}.id`, + `${TableName.SecretRotationV2SecretMapping}.secretId` + ) .select( db.ref("id").withSchema(TableName.ResourceMetadata).as("metadataId"), db.ref("key").withSchema(TableName.ResourceMetadata).as("metadataKey"), @@ -87,7 +102,8 @@ export const secretV2BridgeDALFactory = (db: TDbClient) => { .select(selectAllTableCols(TableName.SecretV2)) .select(db.ref("id").withSchema(TableName.SecretTag).as("tagId")) .select(db.ref("color").withSchema(TableName.SecretTag).as("tagColor")) - .select(db.ref("slug").withSchema(TableName.SecretTag).as("tagSlug")); + .select(db.ref("slug").withSchema(TableName.SecretTag).as("tagSlug")) + .select(db.ref("rotationId").withSchema(TableName.SecretRotationV2SecretMapping)); if (limit) void query.limit(limit); if (offset) void query.offset(offset); if (sort) { @@ -98,7 +114,12 @@ export const secretV2BridgeDALFactory = (db: TDbClient) => { const data = sqlNestRelationships({ data: docs, key: "id", - parentMapper: (el) => ({ _id: el.id, ...SecretsV2Schema.parse(el) }), + parentMapper: (el) => ({ + _id: el.id, + ...SecretsV2Schema.parse(el), + rotationId: el.rotationId, + isRotatedSecret: Boolean(el.rotationId) + }), childrenMapper: [ { key: "tagId", @@ -332,6 +353,11 @@ export const secretV2BridgeDALFactory = (db: TDbClient) => { } const query = (tx || db.replicaNode())(TableName.SecretV2) + .leftJoin( + TableName.SecretRotationV2SecretMapping, + `${TableName.SecretV2}.id`, + `${TableName.SecretRotationV2SecretMapping}.secretId` + ) .whereIn("folderId", folderIds) .where((bd) => { if (filters?.search) { @@ -414,6 +440,11 @@ export const secretV2BridgeDALFactory = (db: TDbClient) => { `${TableName.SecretTag}.id` ) .leftJoin(TableName.ResourceMetadata, `${TableName.SecretV2}.id`, `${TableName.ResourceMetadata}.secretId`) + .leftJoin( + TableName.SecretRotationV2SecretMapping, + `${TableName.SecretV2}.id`, + `${TableName.SecretRotationV2SecretMapping}.secretId` + ) .where((qb) => { if (filters?.metadataFilter && filters.metadataFilter.length > 0) { filters.metadataFilter.forEach((meta) => { @@ -444,6 +475,7 @@ export const secretV2BridgeDALFactory = (db: TDbClient) => { db.ref("key").withSchema(TableName.ResourceMetadata).as("metadataKey"), db.ref("value").withSchema(TableName.ResourceMetadata).as("metadataValue") ) + .select(db.ref("rotationId").withSchema(TableName.SecretRotationV2SecretMapping)) .where((bd) => { const slugs = filters?.tagSlugs?.filter(Boolean); if (slugs && slugs.length > 0) { @@ -472,7 +504,12 @@ export const secretV2BridgeDALFactory = (db: TDbClient) => { const data = sqlNestRelationships({ data: secs, key: "id", - parentMapper: (el) => ({ _id: el.id, ...SecretsV2Schema.parse(el) }), + parentMapper: (el) => ({ + _id: el.id, + ...SecretsV2Schema.parse(el), + rotationId: el.rotationId, + isRotatedSecret: Boolean(el.rotationId) + }), childrenMapper: [ { key: "tagId", diff --git a/backend/src/services/secret-v2-bridge/secret-v2-bridge-fns.ts b/backend/src/services/secret-v2-bridge/secret-v2-bridge-fns.ts index b2fe923aa..71fff2949 100644 --- a/backend/src/services/secret-v2-bridge/secret-v2-bridge-fns.ts +++ b/backend/src/services/secret-v2-bridge/secret-v2-bridge-fns.ts @@ -666,6 +666,8 @@ export const reshapeBridgeSecret = ( name: string; }[]; secretMetadata?: ResourceMetadataDTO; + isRotatedSecret?: boolean; + rotationId?: string; }, secretValueHidden: boolean ) => ({ @@ -695,7 +697,8 @@ export const reshapeBridgeSecret = ( secretMetadata: secret.secretMetadata, createdAt: secret.createdAt, updatedAt: secret.updatedAt, - + isRotatedSecret: secret.isRotatedSecret, + rotationId: secret.rotationId, ...(secretValueHidden ? { secretValue: INFISICAL_SECRET_VALUE_HIDDEN_MASK, diff --git a/backend/src/services/secret-v2-bridge/secret-v2-bridge-service.ts b/backend/src/services/secret-v2-bridge/secret-v2-bridge-service.ts index dc975854f..dc209a794 100644 --- a/backend/src/services/secret-v2-bridge/secret-v2-bridge-service.ts +++ b/backend/src/services/secret-v2-bridge/secret-v2-bridge-service.ts @@ -25,6 +25,7 @@ import { TSecretApprovalPolicyServiceFactory } from "@app/ee/services/secret-app import { TSecretApprovalRequestDALFactory } from "@app/ee/services/secret-approval-request/secret-approval-request-dal"; import { TSecretApprovalRequestSecretDALFactory } from "@app/ee/services/secret-approval-request/secret-approval-request-secret-dal"; import { TSecretSnapshotServiceFactory } from "@app/ee/services/secret-snapshot/secret-snapshot-service"; +import { DatabaseErrorCode } from "@app/lib/error-codes"; import { BadRequestError, ForbiddenRequestError, NotFoundError } from "@app/lib/errors"; import { diff, groupBy } from "@app/lib/fn"; import { setKnexStringValue } from "@app/lib/knex"; @@ -414,6 +415,8 @@ export const secretV2BridgeServiceFactory = ({ }); if (!sharedSecretToModify) throw new NotFoundError({ message: `Secret with name ${inputSecret.secretName} not found` }); + if (sharedSecretToModify.isRotatedSecret && (inputSecret.newSecretName || inputSecret.secretValue)) + throw new BadRequestError({ message: "Cannot update rotated secret name or value" }); secretId = sharedSecretToModify.id; secret = sharedSecretToModify; } @@ -624,66 +627,79 @@ export const secretV2BridgeServiceFactory = ({ }) ); - const deletedSecret = await secretDAL.transaction(async (tx) => - fnSecretBulkDelete({ - projectId, - folderId, - actorId, - secretDAL, - secretQueueService, - inputSecrets: [ - { - type: inputSecret.type as SecretType, - secretKey: inputSecret.secretName - } - ], - tx - }) - ); + try { + const deletedSecret = await secretDAL.transaction(async (tx) => + fnSecretBulkDelete({ + projectId, + folderId, + actorId, + secretDAL, + secretQueueService, + inputSecrets: [ + { + type: inputSecret.type as SecretType, + secretKey: inputSecret.secretName + } + ], + tx + }) + ); - if (inputSecret.type === SecretType.Shared) { - await snapshotService.performSnapshot(folderId); - await secretQueueService.syncSecrets({ - secretPath, - actorId, - actor, - projectId, - orgId: actorOrgId, - environmentSlug: folder.environment.slug + if (inputSecret.type === SecretType.Shared) { + await snapshotService.performSnapshot(folderId); + await secretQueueService.syncSecrets({ + secretPath, + actorId, + actor, + projectId, + orgId: actorOrgId, + environmentSlug: folder.environment.slug + }); + } + + const { decryptor: secretManagerDecryptor } = await kmsService.createCipherPairWithDataKey({ + type: KmsDataKey.SecretManager, + projectId }); - } - const { decryptor: secretManagerDecryptor } = await kmsService.createCipherPairWithDataKey({ - type: KmsDataKey.SecretManager, - projectId - }); + const secretValueHidden = !hasSecretReadValueOrDescribePermission( + permission, + ProjectPermissionSecretActions.ReadValue, + { + environment, + secretPath, + secretName: secretToDelete.key, + secretTags: secretToDelete.tags?.map((el) => el.slug) + } + ); - const secretValueHidden = !hasSecretReadValueOrDescribePermission( - permission, - ProjectPermissionSecretActions.ReadValue, - { + return reshapeBridgeSecret( + projectId, environment, secretPath, - secretName: secretToDelete.key, - secretTags: secretToDelete.tags?.map((el) => el.slug) + { + ...deletedSecret[0], + value: deletedSecret[0].encryptedValue + ? secretManagerDecryptor({ cipherTextBlob: deletedSecret[0].encryptedValue }).toString() + : "", + comment: deletedSecret[0].encryptedComment + ? secretManagerDecryptor({ cipherTextBlob: deletedSecret[0].encryptedComment }).toString() + : "" + }, + secretValueHidden + ); + } catch (err) { + // deferred errors aren't return as DatabaseError + const error = err as { code: string; table: string }; + if ( + error?.code === DatabaseErrorCode.ForeignKeyViolation && + error?.table === TableName.SecretRotationV2SecretMapping + ) { + throw new BadRequestError({ message: "Cannot delete rotated secrets" }); } - ); - return reshapeBridgeSecret( - projectId, - environment, - secretPath, - { - ...deletedSecret[0], - value: deletedSecret[0].encryptedValue - ? secretManagerDecryptor({ cipherTextBlob: deletedSecret[0].encryptedValue }).toString() - : "", - comment: deletedSecret[0].encryptedComment - ? secretManagerDecryptor({ cipherTextBlob: deletedSecret[0].encryptedComment }).toString() - : "" - }, - secretValueHidden - ); + throw err; + } }; // get unique secrets count for multiple envs @@ -946,6 +962,7 @@ export const secretV2BridgeServiceFactory = ({ projectId }); + // scott: if any of this changes it also needs to be mirrored in secret rotation for getting dashboard secrets const decryptedSecrets = secrets .filter((el) => { const canDescribeSecret = hasSecretReadValueOrDescribePermission( @@ -1667,6 +1684,13 @@ export const secretV2BridgeServiceFactory = ({ secretTags: el.tags.map((i) => i.slug) }) ); + + if (el.isRotatedSecret) { + const input = secretsToUpdateGroupByPath[secretPath].find((i) => i.secretKey === el.key); + + if (input && (input.newSecretName || input.secretValue)) + throw new BadRequestError({ message: `Cannot update rotated secret name or value: ${el.key}` }); + } }); // get all tags @@ -1969,61 +1993,76 @@ export const secretV2BridgeServiceFactory = ({ ); }); - const secretsDeleted = await secretDAL.transaction(async (tx) => - fnSecretBulkDelete({ - secretDAL, - secretQueueService, - inputSecrets: inputSecrets.map(({ type, secretKey }) => ({ - secretKey, - type: type || SecretType.Shared - })), - projectId, - folderId, - actorId, - tx - }) - ); - - // await snapshotService.performSnapshot(folderId); - await secretQueueService.syncSecrets({ - actor, - actorId, - secretPath, - projectId, - orgId: actorOrgId, - environmentSlug: folder.environment.slug - }); - - const { decryptor: secretManagerDecryptor } = await kmsService.createCipherPairWithDataKey({ - type: KmsDataKey.SecretManager, - projectId - }); - return secretsDeleted.map((el) => { - const secretToDeleteMatch = secretsToDelete.find( - (i) => i.key === el.key && (i.type || SecretType.Shared) === el.type + try { + const secretsDeleted = await secretDAL.transaction(async (tx) => + fnSecretBulkDelete({ + secretDAL, + secretQueueService, + inputSecrets: inputSecrets.map(({ type, secretKey }) => ({ + secretKey, + type: type || SecretType.Shared + })), + projectId, + folderId, + actorId, + tx + }) ); - const secretValueHidden = - !secretToDeleteMatch || - !hasSecretReadValueOrDescribePermission(permission, ProjectPermissionSecretActions.ReadValue, { + await snapshotService.performSnapshot(folderId); + await secretQueueService.syncSecrets({ + actor, + actorId, + secretPath, + projectId, + orgId: actorOrgId, + environmentSlug: folder.environment.slug + }); + + const { decryptor: secretManagerDecryptor } = await kmsService.createCipherPairWithDataKey({ + type: KmsDataKey.SecretManager, + projectId + }); + return secretsDeleted.map((el) => { + const secretToDeleteMatch = secretsToDelete.find( + (i) => i.key === el.key && (i.type || SecretType.Shared) === el.type + ); + + const secretValueHidden = + !secretToDeleteMatch || + !hasSecretReadValueOrDescribePermission(permission, ProjectPermissionSecretActions.ReadValue, { + environment, + secretPath, + secretName: el.key, + secretTags: secretToDeleteMatch.tags?.map((i) => i.slug) + }); + + return reshapeBridgeSecret( + projectId, environment, secretPath, - secretName: el.key, - secretTags: secretToDeleteMatch.tags?.map((i) => i.slug) - }); + { + ...el, + value: el.encryptedValue ? secretManagerDecryptor({ cipherTextBlob: el.encryptedValue }).toString() : "", + comment: el.encryptedComment + ? secretManagerDecryptor({ cipherTextBlob: el.encryptedComment }).toString() + : "" + }, + secretValueHidden + ); + }); + } catch (err) { + // deferred errors aren't return as DatabaseError + const error = err as { code: string; table: string }; + if ( + error?.code === DatabaseErrorCode.ForeignKeyViolation && + error?.table === TableName.SecretRotationV2SecretMapping + ) { + throw new BadRequestError({ message: "Cannot delete rotated secrets" }); + } - return reshapeBridgeSecret( - projectId, - environment, - secretPath, - { - ...el, - value: el.encryptedValue ? secretManagerDecryptor({ cipherTextBlob: el.encryptedValue }).toString() : "", - comment: el.encryptedComment ? secretManagerDecryptor({ cipherTextBlob: el.encryptedComment }).toString() : "" - }, - secretValueHidden - ); - }); + throw err; + } }; const getSecretVersions = async ({ diff --git a/backend/src/services/secret-v2-bridge/secret-v2-bridge-types.ts b/backend/src/services/secret-v2-bridge/secret-v2-bridge-types.ts index 7f415bff8..1c23db183 100644 --- a/backend/src/services/secret-v2-bridge/secret-v2-bridge-types.ts +++ b/backend/src/services/secret-v2-bridge/secret-v2-bridge-types.ts @@ -132,7 +132,7 @@ export type TUpdateManySecretDTO = Omit & { secrets: { secretKey: string; newSecretName?: string; - secretValue: string; + secretValue?: string; secretComment?: string; skipMultilineEncoding?: boolean; tagIds?: string[]; diff --git a/backend/src/services/secret/secret-types.ts b/backend/src/services/secret/secret-types.ts index 6a5c097ed..5ea290b6a 100644 --- a/backend/src/services/secret/secret-types.ts +++ b/backend/src/services/secret/secret-types.ts @@ -297,7 +297,7 @@ export type TUpdateManySecretRawDTO = Omit & { secrets: { secretKey: string; newSecretName?: string; - secretValue: string; + secretValue?: string; secretComment?: string; skipMultilineEncoding?: boolean; tagIds?: string[]; diff --git a/backend/src/services/smtp/smtp-service.ts b/backend/src/services/smtp/smtp-service.ts index 68e0ecd22..0e7483ef8 100644 --- a/backend/src/services/smtp/smtp-service.ts +++ b/backend/src/services/smtp/smtp-service.ts @@ -40,7 +40,8 @@ export enum SmtpTemplates { ExternalImportSuccessful = "externalImportSuccessful.handlebars", ExternalImportFailed = "externalImportFailed.handlebars", ExternalImportStarted = "externalImportStarted.handlebars", - SecretRequestCompleted = "secretRequestCompleted.handlebars" + SecretRequestCompleted = "secretRequestCompleted.handlebars", + SecretRotationFailed = "secretRotationFailed.handlebars" } export enum SmtpHost { diff --git a/backend/src/services/smtp/templates/secretRotationFailed.handlebars b/backend/src/services/smtp/templates/secretRotationFailed.handlebars new file mode 100644 index 000000000..728798ce8 --- /dev/null +++ b/backend/src/services/smtp/templates/secretRotationFailed.handlebars @@ -0,0 +1,31 @@ + + + + + + Your {{rotationType}} Rotation "{{rotationName}}" Failed to Rotate + + + +

Infisical

+ + + +
+
+

Name: {{rotationName}}

+

Type: {{rotationType}}

+

Project: {{projectName}}

+

Environment: {{environment}}

+

Secret Path: {{secretPath}}

+
+ + {{emailFooter}} + + + \ No newline at end of file diff --git a/docs/api-reference/endpoints/app-connections/mssql/available.mdx b/docs/api-reference/endpoints/app-connections/mssql/available.mdx new file mode 100644 index 000000000..cb8949c4a --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/mssql/available.mdx @@ -0,0 +1,4 @@ +--- +title: "Available" +openapi: "GET /api/v1/app-connections/mssql/available" +--- diff --git a/docs/api-reference/endpoints/app-connections/mssql/create.mdx b/docs/api-reference/endpoints/app-connections/mssql/create.mdx new file mode 100644 index 000000000..d582d7219 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/mssql/create.mdx @@ -0,0 +1,4 @@ +--- +title: "Create" +openapi: "POST /api/v1/app-connections/mssql" +--- \ No newline at end of file diff --git a/docs/api-reference/endpoints/app-connections/mssql/delete.mdx b/docs/api-reference/endpoints/app-connections/mssql/delete.mdx new file mode 100644 index 000000000..af45cb416 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/mssql/delete.mdx @@ -0,0 +1,4 @@ +--- +title: "Delete" +openapi: "DELETE /api/v1/app-connections/mssql/{connectionId}" +--- diff --git a/docs/api-reference/endpoints/app-connections/mssql/get-by-id.mdx b/docs/api-reference/endpoints/app-connections/mssql/get-by-id.mdx new file mode 100644 index 000000000..9eb08c97d --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/mssql/get-by-id.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by ID" +openapi: "GET /api/v1/app-connections/mssql/{connectionId}" +--- diff --git a/docs/api-reference/endpoints/app-connections/mssql/get-by-name.mdx b/docs/api-reference/endpoints/app-connections/mssql/get-by-name.mdx new file mode 100644 index 000000000..c916d2219 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/mssql/get-by-name.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by Name" +openapi: "GET /api/v1/app-connections/mssql/connection-name/{connectionName}" +--- diff --git a/docs/api-reference/endpoints/app-connections/mssql/list.mdx b/docs/api-reference/endpoints/app-connections/mssql/list.mdx new file mode 100644 index 000000000..490bb497b --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/mssql/list.mdx @@ -0,0 +1,4 @@ +--- +title: "List" +openapi: "GET /api/v1/app-connections/mssql" +--- diff --git a/docs/api-reference/endpoints/app-connections/mssql/update.mdx b/docs/api-reference/endpoints/app-connections/mssql/update.mdx new file mode 100644 index 000000000..84522b9e4 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/mssql/update.mdx @@ -0,0 +1,4 @@ +--- +title: "Update" +openapi: "PATCH /api/v1/app-connections/mssql/{connectionId}" +--- \ No newline at end of file diff --git a/docs/api-reference/endpoints/app-connections/postgres/available.mdx b/docs/api-reference/endpoints/app-connections/postgres/available.mdx new file mode 100644 index 000000000..92e360d06 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/postgres/available.mdx @@ -0,0 +1,4 @@ +--- +title: "Available" +openapi: "GET /api/v1/app-connections/postgres/available" +--- diff --git a/docs/api-reference/endpoints/app-connections/postgres/create.mdx b/docs/api-reference/endpoints/app-connections/postgres/create.mdx new file mode 100644 index 000000000..8657954e8 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/postgres/create.mdx @@ -0,0 +1,4 @@ +--- +title: "Create" +openapi: "POST /api/v1/app-connections/postgres" +--- \ No newline at end of file diff --git a/docs/api-reference/endpoints/app-connections/postgres/delete.mdx b/docs/api-reference/endpoints/app-connections/postgres/delete.mdx new file mode 100644 index 000000000..927bfec49 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/postgres/delete.mdx @@ -0,0 +1,4 @@ +--- +title: "Delete" +openapi: "DELETE /api/v1/app-connections/postgres/{connectionId}" +--- diff --git a/docs/api-reference/endpoints/app-connections/postgres/get-by-id.mdx b/docs/api-reference/endpoints/app-connections/postgres/get-by-id.mdx new file mode 100644 index 000000000..3ee3f5996 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/postgres/get-by-id.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by ID" +openapi: "GET /api/v1/app-connections/postgres/{connectionId}" +--- diff --git a/docs/api-reference/endpoints/app-connections/postgres/get-by-name.mdx b/docs/api-reference/endpoints/app-connections/postgres/get-by-name.mdx new file mode 100644 index 000000000..c9b29cb66 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/postgres/get-by-name.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by Name" +openapi: "GET /api/v1/app-connections/postgres/connection-name/{connectionName}" +--- diff --git a/docs/api-reference/endpoints/app-connections/postgres/list.mdx b/docs/api-reference/endpoints/app-connections/postgres/list.mdx new file mode 100644 index 000000000..5d1be4664 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/postgres/list.mdx @@ -0,0 +1,4 @@ +--- +title: "List" +openapi: "GET /api/v1/app-connections/postgres" +--- diff --git a/docs/api-reference/endpoints/app-connections/postgres/update.mdx b/docs/api-reference/endpoints/app-connections/postgres/update.mdx new file mode 100644 index 000000000..19a206958 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/postgres/update.mdx @@ -0,0 +1,4 @@ +--- +title: "Update" +openapi: "PATCH /api/v1/app-connections/postgres/{connectionId}" +--- \ No newline at end of file diff --git a/docs/api-reference/endpoints/secret-rotations/list.mdx b/docs/api-reference/endpoints/secret-rotations/list.mdx new file mode 100644 index 000000000..8b3e931f0 --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/list.mdx @@ -0,0 +1,4 @@ +--- +title: "List" +openapi: "GET /api/v2/secret-rotations" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/mssql-credentials/create.mdx b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/create.mdx new file mode 100644 index 000000000..14249aced --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/create.mdx @@ -0,0 +1,4 @@ +--- +title: "Create" +openapi: "POST /api/v2/secret-rotations/mssql-credentials" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/mssql-credentials/delete.mdx b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/delete.mdx new file mode 100644 index 000000000..117948674 --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/delete.mdx @@ -0,0 +1,4 @@ +--- +title: "Delete" +openapi: "DELETE /api/v2/secret-rotations/mssql-credentials/{rotationId}" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-by-id.mdx b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-by-id.mdx new file mode 100644 index 000000000..e0fc208ee --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-by-id.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by ID" +openapi: "GET /api/v2/secret-rotations/mssql-credentials/{rotationId}" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-by-name.mdx b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-by-name.mdx new file mode 100644 index 000000000..442ab5bd7 --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-by-name.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by Name" +openapi: "GET /api/v2/secret-rotations/mssql-credentials/rotation-name/{rotationName}" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-generated-credentials-by-id.mdx b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-generated-credentials-by-id.mdx new file mode 100644 index 000000000..311715879 --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-generated-credentials-by-id.mdx @@ -0,0 +1,4 @@ +--- +title: "Get Credentials by ID" +openapi: "GET /api/v2/secret-rotations/mssql-credentials/{rotationId}/generated-credentials" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/mssql-credentials/list.mdx b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/list.mdx new file mode 100644 index 000000000..e79ee758b --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/list.mdx @@ -0,0 +1,4 @@ +--- +title: "List" +openapi: "GET /api/v2/secret-rotations/mssql-credentials" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/mssql-credentials/rotate-secrets.mdx b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/rotate-secrets.mdx new file mode 100644 index 000000000..543acb9e3 --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/rotate-secrets.mdx @@ -0,0 +1,4 @@ +--- +title: "Rotate Secrets" +openapi: "POST /api/v2/secret-rotations/mssql-credentials/{rotationId}/rotate-secrets" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/mssql-credentials/update.mdx b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/update.mdx new file mode 100644 index 000000000..e5404d049 --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/mssql-credentials/update.mdx @@ -0,0 +1,4 @@ +--- +title: "Update" +openapi: "PATCH /api/v2/secret-rotations/mssql-credentials/{rotationId}" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/options.mdx b/docs/api-reference/endpoints/secret-rotations/options.mdx new file mode 100644 index 000000000..9e1a4e544 --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/options.mdx @@ -0,0 +1,4 @@ +--- +title: "Options" +openapi: "GET /api/v2/secret-rotations/options" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/postgres-credentials/create.mdx b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/create.mdx new file mode 100644 index 000000000..76540dfdc --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/create.mdx @@ -0,0 +1,4 @@ +--- +title: "Create" +openapi: "POST /api/v2/secret-rotations/postgres-credentials" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/postgres-credentials/delete.mdx b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/delete.mdx new file mode 100644 index 000000000..7919313b6 --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/delete.mdx @@ -0,0 +1,4 @@ +--- +title: "Delete" +openapi: "DELETE /api/v2/secret-rotations/postgres-credentials/{rotationId}" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-by-id.mdx b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-by-id.mdx new file mode 100644 index 000000000..7914eac7e --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-by-id.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by ID" +openapi: "GET /api/v2/secret-rotations/postgres-credentials/{rotationId}" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-by-name.mdx b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-by-name.mdx new file mode 100644 index 000000000..f215a1d7b --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-by-name.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by Name" +openapi: "GET /api/v2/secret-rotations/postgres-credentials/rotation-name/{rotationName}" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-generated-credentials-by-id.mdx b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-generated-credentials-by-id.mdx new file mode 100644 index 000000000..34f308514 --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-generated-credentials-by-id.mdx @@ -0,0 +1,4 @@ +--- +title: "Get Credentials by ID" +openapi: "GET /api/v2/secret-rotations/postgres-credentials/{rotationId}/generated-credentials" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/postgres-credentials/list.mdx b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/list.mdx new file mode 100644 index 000000000..6c93a2790 --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/list.mdx @@ -0,0 +1,4 @@ +--- +title: "List" +openapi: "GET /api/v2/secret-rotations/postgres-credentials" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/postgres-credentials/rotate-secrets.mdx b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/rotate-secrets.mdx new file mode 100644 index 000000000..687c15279 --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/rotate-secrets.mdx @@ -0,0 +1,4 @@ +--- +title: "Rotate Secrets" +openapi: "POST /api/v2/secret-rotations/postgres-credentials/{rotationId}/rotate-secrets" +--- diff --git a/docs/api-reference/endpoints/secret-rotations/postgres-credentials/update.mdx b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/update.mdx new file mode 100644 index 000000000..7e4ec0883 --- /dev/null +++ b/docs/api-reference/endpoints/secret-rotations/postgres-credentials/update.mdx @@ -0,0 +1,4 @@ +--- +title: "Update" +openapi: "PATCH /api/v2/secret-rotations/postgres-credentials/{rotationId}" +--- diff --git a/docs/mint.json b/docs/mint.json index 478db0276..e0d15ed8f 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -823,6 +823,39 @@ "api-reference/endpoints/secret-imports/delete" ] }, + { + "group": "Secret Rotations", + "pages": [ + "api-reference/endpoints/secret-rotations/list", + "api-reference/endpoints/secret-rotations/options", + { + "group": "Microsoft SQL Server Credentials", + "pages": [ + "api-reference/endpoints/secret-rotations/mssql-credentials/create", + "api-reference/endpoints/secret-rotations/mssql-credentials/delete", + "api-reference/endpoints/secret-rotations/mssql-credentials/get-by-id", + "api-reference/endpoints/secret-rotations/mssql-credentials/get-by-name", + "api-reference/endpoints/secret-rotations/mssql-credentials/get-generated-credentials-by-id", + "api-reference/endpoints/secret-rotations/mssql-credentials/list", + "api-reference/endpoints/secret-rotations/mssql-credentials/rotate-secrets", + "api-reference/endpoints/secret-rotations/mssql-credentials/update" + ] + }, + { + "group": "PostgreSQL Credentials", + "pages": [ + "api-reference/endpoints/secret-rotations/postgres-credentials/create", + "api-reference/endpoints/secret-rotations/postgres-credentials/delete", + "api-reference/endpoints/secret-rotations/postgres-credentials/get-by-id", + "api-reference/endpoints/secret-rotations/postgres-credentials/get-by-name", + "api-reference/endpoints/secret-rotations/postgres-credentials/get-generated-credentials-by-id", + "api-reference/endpoints/secret-rotations/postgres-credentials/list", + "api-reference/endpoints/secret-rotations/postgres-credentials/rotate-secrets", + "api-reference/endpoints/secret-rotations/postgres-credentials/update" + ] + } + ] + }, { "group": "Identity Specific Privilege", "pages": [ @@ -922,6 +955,30 @@ "api-reference/endpoints/app-connections/humanitec/update", "api-reference/endpoints/app-connections/humanitec/delete" ] + }, + { + "group": "Microsoft SQL Server", + "pages": [ + "api-reference/endpoints/app-connections/mssql/list", + "api-reference/endpoints/app-connections/mssql/available", + "api-reference/endpoints/app-connections/mssql/get-by-id", + "api-reference/endpoints/app-connections/mssql/get-by-name", + "api-reference/endpoints/app-connections/mssql/create", + "api-reference/endpoints/app-connections/mssql/update", + "api-reference/endpoints/app-connections/mssql/delete" + ] + }, + { + "group": "PostgreSQL", + "pages": [ + "api-reference/endpoints/app-connections/postgres/list", + "api-reference/endpoints/app-connections/postgres/available", + "api-reference/endpoints/app-connections/postgres/get-by-id", + "api-reference/endpoints/app-connections/postgres/get-by-name", + "api-reference/endpoints/app-connections/postgres/create", + "api-reference/endpoints/app-connections/postgres/update", + "api-reference/endpoints/app-connections/postgres/delete" + ] } ] }, diff --git a/frontend/public/images/integrations/MsSql.png b/frontend/public/images/integrations/MsSql.png new file mode 100644 index 0000000000000000000000000000000000000000..108ed60f9171ac4c49217149deef3c6dadd2e252 GIT binary patch literal 13199 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�>wW3 z0a?vf;Mpm7IdNz^b&kAmL9SGdFK5w;T9UU(xoMMDC(ewMDS7Pe6GW|Ds}Y6dmWM{V zU<8Nz=L9t#cA~tD`11DjyQjzIJ6==$y7MI|wFA7JGj1x%18^TnDsun|`#ue#ldb$#dc;O@~!&>Me2 zuGnd2`xv%E$|*yIEu18fjb3bH>rYyaI+3VQ5zFFn`TkfRa zDOy+MYes1D1AL8_wz2X9eYr+Hm^y3cCyP-~f_`lhq$T~XAuDSv?wya!71K}H7sva| zX@EKoW?$oCc)8Yhl{vLdV?z9iovIpX1p$9U&fk2PN&CtQ>;*zTt(6xqW0e|FC z&+0b0_WMF=r!8oSW$gN$*Nbn_#g1+Hv9D9BZ**#-^2&R8Nr4v4iWD2nOkf0OjYih9 z`e^}?tanEXGTMkC0q?OOla!v8xGn*Uhz!B8ru#Vj-9C?eRd$v+az>5gEG?t_Nwq?j z4(_k`E>inLV^zRwSiX*$ZYREDzdnNI*Kj@?z&rOSei)3U`?+X7Rh!`KH+<#Bp4ny{ z+dI*>h2&HDvzsq@NZuB0$tM;pZi`oB^|x*~5MT;U&?Yz+5LHBG58kgg7@9q<(>jv{ zXJAo3RB$2#{%#;oKI8JGPi@gjVhwYCX|KRAclK&Y`2Y@Li9aZ%{W{#24*sLh1J%{E>@Xmf_oFKT{Zj6FDC=0-B=ZwS&$=yij-fNb;` zYkOM8yN`Kz@Re3%g8>6MeWGdH*(&;Q0bw*0+Ucuvzx4u?+qQ%nbfox`-KqN*fa@eE zVpS}Tk5(nI@Z1YfQ8dt`X#WLlb@RJ>2#)%lrZMwW*1QTGEn&eHxxrRuo(m5=<4g+I zCp?*Z`9+!P8A_K%{Sy4l% zjf+1Dc;lSkN|y%ah`ih4Vp9_H_l4Jgz4sHL=H6r`xG>Is1s6`UKVonuPn0E!7u?YT#vg953wN;1UTYdQ=^^WGWkW2eX zV}m4wB62>7Wpo0;4PQfx3IPp%H?~zOLD_o|Q2+T@4v#c<53B@B{)v*!F|d7MubJNP&8&IW zbpknv!AHC5uUp=!AH4hT9y08%oQ|u=XA{Eq=%DH>T$|t?qhP$x|E19aLBJI3QqinRXV}gQ)ZJ4rB&*V- zxjzYj`ja%x7gnh87a>O5!BWagpAB=;IF%H7@u@J&|7IB-=EHk*N#4l5&-t zm~kVkF|ZcDs2z*E$TVx&IpN*9uS;GjIi?5=Gi3&ed531PX6u#TJNziSoTIBr1)s>= zYDtPMfL*H7dQ^UZr9P9Eq*Tnc@T<9b-lNFNf}~bRzsEEMmNS1=2D7x=3qAkm%9RjX z{1GFAe1BwvhslRA*eJ*cIUeJDm&$Jt+t-1r@G}SDg*1Qa z<4Jx~e913=cmUkgaWz^a17UY?-iWGfV}Mr1Zki)Gv81$a52TVp%uHaO1$6>ARtd|}2G6A;)3p`o`mMCrQ8=w2ac&#{GSt^LB#P>MwN+w zS9|-d<(KREsVEXF%aBHR?DV|OfbC%d^qA`)2+ul5 zdEm*p3Ek1urJFC~NtIW@(6joS-7ZInX@W`hGk~8DJ znx8LGN#eyT%~3wuLYw55SFq6y8<_`ul#HHu2+KM(7|z+m%jW z$KT~sCi3%)zWbtGUAx1wt*#(w zC8%{Z9K^DOTl^L#C^4%DYdAg8#{-f9U-9_*=7rwcI_Q#chR+iSUU z$RuXj$zkC!-C3F-JTjNY>_ccN1t3p>dtG)71-~Bt;e>oyn-{zHD9I)iLGx5L4wU9O za%+q$tolJjA3}1yr6(CzC#D|;-^EKCB*aI>XP0^Cjbp9P}`&33ZQUX&PwxP%w zA~=QRK)$N1aBu#7A6npdQ#X6sRL<}8R9NoeO#EHHfFe6sJ_;&Y$f_+-MGH;+|7D;2 h9~mkZ%V`fj%QYP(XjUtq-!p7rWF!>Dt3-|b{|8G12ZI0r literal 0 HcmV?d00001 diff --git a/frontend/public/images/integrations/MySql.png b/frontend/public/images/integrations/MySql.png new file mode 100644 index 0000000000000000000000000000000000000000..d92befdbcc726ba83c1f8cb57b51f0e982f7e7b6 GIT binary patch literal 13007 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 Vfb-MthI7ynapO}s&9Rx~e*<*xtlj_s literal 0 HcmV?d00001 diff --git a/frontend/public/images/secretRotation/secret-rotations-v2-location.png b/frontend/public/images/secretRotation/secret-rotations-v2-location.png new file mode 100644 index 0000000000000000000000000000000000000000..6c0e7d8f1c57c39118d21a3bab4fe06ffec8d5c7 GIT binary patch literal 701711 zcmb??byQr>vMv%JgamgF1a}Qi2u^Sa?vnuqhXH~P0Rq7-5Zo;goWX(xcXxMZa2Ygj z@;m3_3GRu1$4{YSe4_}_mYF%evUBwRe4++6?taaWM#|MK`B z$$uXI(^*6vtPmjT%W9l(eoh|}@#@bdhl?LT6@|0d?+=X?E+_>V3TO(59O&h5|G z-#dU1qvrjONbf%~gi?Nfu77F$rM0xTCsnA^F0{oBJF687?JBgcmFj{Qg;7t z{i|sQ`ZGBqcIFON;&dJyAApwTZg#G85?TNkAmXoBJGzQ-{h3ZX(7$#3)B3+k#QvE% zk^kqH{?+5ZEeN9PzwRLx8euV9|79|W#(x~ z+A?jyWns*E$dy?k>9UpPrtIID4=mcsniP?ZuM>{beZa?=e#7@WgAL#Tq%8LUdi<@d zeWcB2Se-m=j~98Hgd#;Gv?qnw&yhnrhDdmFbJ~%i+2<>;r5C$cu;M`NgUpBDQ~VzH zKAcDjgq@%!9|z7(4CG%w>gk-3kz`mLC2HQh>Z(BI;8Dh1@6t?r+4EjAjj_iYDB;Y* z9uDRyaNrv>@Bv`CDCKXvg`|hPX{@IhaNRzv`cbnVWr?jd;v*@=WwBPpm#v!A9 z@KnqB3dS#Ac_OyJvB{dBXieigk{|uPZTJ~FM15cmCbDBqUXLN&OEX_`u-pk!tbEq# z+YSv;2oZSsNW0p1|5A=6IWESdLDHso$f_*`nJOgRBkdD+$cvZQ_}em{+2BxDDO?JR z`nRK?02Fu1PA^=p?H!D6Rv*Fea|^=C(O_4e@S@cb=gzA7alLDXxl`q!#{*>v!|doH zVqiDJTV?;*9Q7DnK>qqrswUOPoa*#h@uoCcj% zK1;{RLHSL3qnAe4AF2u8u)I$*V{t^Ud;v$HZPa%rChNpL$~O?&(D^1UUy^V+ewN zx9)tIJ$_EWyY@_umoT($J^ak zVy}#tTnQXhhzCi2$8QOZzPJn|tWmhDB(5i#bnSX@cKnW=;7qlMB(%!OjZJVJ6l?r) zKy#C$^w|RwtaWJh%a806deK;oD$coRyYq8}_oDA-%!xpyekIXjGtf1!>R@k3)W~i2 zt(XV)-5h~o1l6x$3#Q8RS&b6B(MsYHOxvC)#nY30FLpy?=`o8BHy@;_+9cOs80&)= z&eLtuz0zBH@1DUY@i9_vqwG@;<%V{Fm+*UZfptFvI#=;VdO03f>bVWJM z*yl1K3NgvOD0ze|($n;YG2|a;Tu6mO)8s{B4SP}ZNIWBb-tuUpO}&j&XLBX&f0JxY zO8!MvhHsR`8t*5raj;I-)UE>*Sv=H4raX6P7t0k1HHo(%Fxdi|6cu0|tM}|%RA}X# z9;Qyzdw`oBU(>K|r9%nMT?m0QxoQv9>ND)N4QEaXw9H7Zu9*$dQ}m`6tznYC?oJ(_ zu(rjRshzy4z*PMFyj}Y(Pj*^Gx>JY~`SLsQ&mU#zG`?7?xPG~|;N=My3apQ>_t#Ss zlRA7QL5Cfq@X9w%yf2kdaXsdlLRX$!-cla%IFTmKUSM2RTxeXiW{hT7oI0pQvtgVw ze?v((K7-Yl@yAz=zKl%;-e|G(rnIKWMdcQmqnCaK*6JlJ%ke@=#6ar&08M#em4uePbYm{o+t2gJ|YDSh=7IkZ<=IP|=l)1lw#TjIZ=r1Xy z=MQUSmYNhn^qSxKz6mVgF`(C^*98=Hb4H$%kMJv|=%o0khz$j$7z(I?By!C8!Q|oH z`5amHx#6CF_u!3Q@1HIOZPN~n zL@#`CD`y>fLf%HD!E5n5WFh!_cDi}Q+VhUmU|2A!T(?}C99^!PTw%m*gj>WzM0JEN z1(of)R4D}5e3^=N6pk9`xRztO%Rb@3T zw$e4HHOUrQ_TZs!)&mtowM%B+bJ#WDngQq!Xyb?I`Nlb{!`HJPqh3W^kg`zfi&qUu zb@}h9@2Vf1{L<**S#)jz<=%yS9&B&IOmYFUsE_FJ%IW!*;9~B+FKQeyK zAx8*c*+|1^>sSFq^=L##XEI?rMXSMJH4;H69>-oRwp$kb3LTrcRhZ&U#S+;uhwHisra<|DehC$ zo1tIuUzh&ZfrA0O0XBiRfyRMWPcomr{QNnnxd_@hrRD(uX9Rr3uLH58Rg_$>O$*B1Fw(ZzC z++7aKW~HFMzFmm*9p9Oa25#({%L zRuV)9`1`~9sY}W0ip>Rl-TLS!)Bdbb}9c%xkLPYF-j7tIuLEn!_LT}iAY z{ygq}tavEJAjR0nHlQvMkrCA%|HQBCxa&A*cj%zxurEgGRbMmr<7O1Ehh8))g}PL% zz}N1^x&Jh%2g5MT09`di^&)*x=;phd%R#!9Vqsa0Y@J&gwy5us@@TS_RkD@guxF;I z*Yf%O8dd~WB*_w|AhfZT=631wTAIp%>P6xrmw@qA{o8D8+XIQ83G=`=BJS6q8r z1qq6;-4v@ohS!Ug<7P^;+RO1pDy33~ZMTNbdA6&kzt zmS0QM>{Qn%raWdeC!EsPff)LB+geHPjVCfnyUTrl*IkWEA}PBsV}&&P$PYgq1Rxhl0hw8;jhlA&H zj^|}QO<%?AeO9mBDzZ*-C8hb%B~QFncj~=&Bi6NXK3BvX5&v7}zDc3EpDZ!N9~G;v zh@osMaP*4CfzyequQl?xO;e`3R6u11Goow9!qFyl#w6ic4#U)%MXW8Sr}bcO|Jg&W zyLO8Gq=~ugaB2EM*)2!AmK*pBEod#@B%j1>0CD;A%4e?Jht~tkbj-?WV0k6^*AlM_ zH-0T@8ExMRx7h*Pc+A4E9^MHAb*N#{82@Pi{Bhn#F6=aO--43=WR+8^0kzNrh7*$`vLB$ zB~P%jQ|W>CB33Iv!$YvLX&fT zWv9DP-b40iX107bu(z%gPw9JDA{Uif`K$Y4R*LHajfAl&s-4(3>PnUZX;nM8Qh8M3 zi3z%67#;^W){;c230*dizg}4Y9las28)?;>$^nvIacVU)PAc_DI*Lf4?u5lzRqyXC zN+{oQ^RZmg#zXh)=Zk-J1?7?7J_NEkN1W5wHT3i6_?7V^DU*ytnY8Fo=xG1qs(6p9 zcN|_1n=~A^Lq8NEax)bisIp?097!eKe}jeM@mloqCt%p;`No}yPehxS^>ZU0i7!FZ zeDaSG?~Dm03zIpOpj9l$ShKlddW6HWOOshq`b|k~t}sgT9%bRO$V<<9>y?y--li8J zz6?U&%}*(vL0z*Fm3mnt5J3M}+gCT$A6+Nh1WKH>Z)k)AEh(i+J|x-&S3-6}-5$c@ z*Jh*Lb-sPIDy2$7CF`UV`qJzUbd4rJD?}N8mA~2*RD)J?mGwql37m)JlAC#@l=7C> zJ{nk9A&zgXqIR{~+af+B+#XBg*Q3>s@r1&fQt`*8j3lf?nWkno_EkiGfuDa4<^4vN2&&4PT_)Q5x3}_DOp6Vo3p+M` zaT!Fdnla&lSKTbfGw?eJaX6XZc3eie|I!J4T@J%Xqtj+pu}wKi*c|y9({NJ$31CZ0 zsm!i$Nw*eV@{uZ4^AS>sJZq~=Sv~ajt7J}Y8m)|KZ(DO;>;u$_wQ!(Ge18&Cst2xe znP~b~TeXbYyH^#(lWOlT+1@1?$vxP)#&`QHUP4MNZF{`4KCcY=6&SA#^KXu}W%F zSgkJ+?aPo&#P8W-l7{>ft^S@E)3;$psR304B;T=nEEr~Xu_X3{WmUHaTX*K%Wd@;o zF+{j(rVfe?LzT(t43(QV8?F;!#rQ;%@zf#T$seuN#L)#Gq*a7DZyw^93d!a-3Hi*V z@f(Jw_<5t>CCg5|kd)8`Cp3v|qd+!=Oz8*ifn|^Or0W@WJLmDm+kr99DDRuUXAFQ^ zrpo8wUEV92Rg|A5j`Kmb6Dzum!_Ls2g!`wTuGH`D&j3m7wY58+2~$7=E8!uDrpkOY zxMvKN6C;HZ|{?Ec?vuU!df8ouDouFci0O8QlrBQm-k@@Rrliqv|8W`iNxlryN>R)|O77LcI)EX1v+yNEjin7S9 zn&nTLIE=O3T@Vk9%xRBq4#6iOV9DQ=vKtSwmn=LAlIpd-*%Itr@uy=n7*$Vkb8Q08 ze61Sxk?_VQmj}S<28>;U&p;u%b$tcYdu^ zP8TGpBMWb-)@H<7u)fga4erYS6rWRdaLH+%UDLM&qhGxj*xCyAqrXT%Mc`W1CcDO=C+o49In?uyQ^5B|+v()B=JdwMG8 z#~Enqs%n&YV%SvF_qOol@O6dw-gva-n6|q6Xhz{?Jkm)~wKY%1V)v9B6J$)akr^uj z5)vBV7V_!o-&}SoPo@D<{KQy=FeJsH4uMYnhAbgytIWbTp6gT$WIBlcw?X)%;F~B% zXFT%LyA*=+`-T|usa3PZ9MZ_#u@6yQBjLB{&$g=pb_U^XFHlGW0dt8u-K}DPH4aFl zf;b6vtoP~0V^>l!8Rko@JCdJ1Uv*K|q@2Q(&U_WzfPNW5FIG>I``6OS9(a|0d)j4= zkktl4cQK^{>F?$wiiL$c&CSb|_@IOfGhx7kBGWZFnPcd)><6 z!LrgBZN9@Q?B!R`jsj|I4+Uhz(cd}VCqnVBOk)Wa_?1MXXZNo#k`z2*0;r_e4c!@LOGjb2GmhvU@38ZL`s7KOhx<)99lcauw%y0B#bewen&mXavT%sYHGxHZX{HFt? z6RxG{?cT#lrL*BTHOGz9jHb63S5GBfQVWAjFAAHLo0Zc4=2VU7TZ@l!0N`oj(C@Zz zFtwpM$njN#re`_Zutfoftvk=|7yB?62}JQ1RSkl^FEtp3uIok|*kIoNbpE{VN-30K zriwWvK{KH=_Cu+(gS*9X^Q4m0n2O&J<|Z{QH7S5}jgKr$DNB#^^LEU}MVh-Ha)pyI zx-X|LQ>#h%R9L!nv+M4yx3)ePWB0ifh4AK`)r|N;gofx%Gu}q27dT-@;3>9UaB9(e z50m*1?z8a9T(=4ANYT%2n>BH9iE6ETH?k@Z5%045Oa(UZC0|P_gSfO07HtdDCjoOT z)ELK#y8B~(>b>O=tG##vkVUKY4eJGdA3x|mnhp$FjSfZfcLk{xUF$E~+X)5duu8^! zHNF5r1&cemK0)Ru`ZIEsOfo(VDN{7$$pn*!5=+AJiquu~43c?R@vJ zZ+BzVWAFsab-@oQhR4mKQzIUy=(WdwErsXc1jmv{si9=Y*-cqh)CCN4W^`Thf>t&y zX@#@GBhR!QP>}{x*%`da*eLiE zky*GVmX?*c3a5jorA8}WPozCfI6gK?4RwOd589TdtiQ;Z(KdxZ66btc^libCH);H{ zNOVVQN!tdn9A5~*YYC)xp5*1L83noas@KuhtPFJ%M@1Cw29x5 z7^o{PG|D*6N=){oy15+m1d&`G6G=IbMy-AA80YV}E@YrivtSmaMx@Lt^ngWt$flrf zADc~0^7!$`umw#?PtP~u@}j4?iY5aIBU(>hNlIAV-;E*MdlLTgOUTdFV}G|3NE$@* z#%xu;(r@UFE3H@jHrCX3Ld_&11-41s3N)zab>1|?@KXTO#1xn=%LJ=mW!mXB_1b4t zX^yBe;o&0x#pPf6`Inceon2RFoTY>KQ#Yn(vh=DgxQ*kOuN$+Id-_ism?hDpRHGRw zCtVWuE6{0<6#9{|chl=ra(g$H96S`x0Ki;DIXIz73|JVYywi zDP)8+lKSZ1|HSVE-j9aR5P1F2#eYxn`d|}|psdEWEAXf`zn&DXEgzoC*2^y059=+j z%+Tu84qn)Q2n$4bs9g1>0twU@ru{5R!eK%(r{vRvwR9gA=G2t}DYj`bHCsN&*+Vhv?%j^KI(}@)c#FzA%HY^Xuq-; zYOPjGg1_ZKGoKy%guEY2njJ>9$B5W`79OtHs%4s+ttN1+2nVmDz->>7d)sYIGDcJU zoRo$5!v-eC^XNWO%5KT z@;lmTtL`_Zn;O4Xg9VYC?|Ui$W^(xfz9xDruDr7elT`G?cJT%3VOB?YkjiiM+!$7I zKK$apd%|_9j2REyq2)r|Uqt z1xLj>74Dg0J$%Zy8*gU9-}(yDKc4rbljunPI7{U^te*?W!wBK6 z3)|KOG_mM%=H*`=)~68J_m3tRf9V>4_mvPZ{?&taPIX)>G#ziubmq;Ja3;5+eH51mII z8FIBtihBktCl^maoyW?0UHG6Ot^zVf0x+mfJeN-q5B^Lf@88b~W#oD-TBtNUV0h5J~T|xN+!k zz099DU!EseKa=UM8Ewxb0d$rvk5(3+%l&)itibw^p3Vr{{f6N7Y1sSVceK zAj#tcP8|CdL!dKRq;Wq4a;*xLT^bjBXq+fvId*H_fmh#k?vtJh6Ge6g3qC|LsZSL=n^~3gsIDAYw!c+!Yy*EQ& z{5qK!?nmiMbl0Q-bo6p9gw7P#28Gc_77CYToOpcw>&VXTf7!A=H{K&hl2&aIbY>RY z;HGFB&Q+IiJC-)7quOZCRIKH{hC#wm=&9*blG%-9V<1VTN<)GS&!@7({lsLuPli?6 z%pj)n7;(HWPUj#KNI$38y^fI%ooxzL;~bQRT*#ol*~;IN-$&nLzrMq( zXTrrJgzE8F6_V^ZCK}k-{XCXPj-w9Xv7bnwD3v@?+`rc3ADNyxqdjBiJ$7y-yuCMm zF6(6uzLcwSHNB2i^Qy>H}HC`WMZrj$Uj(DXiT^nS7oxFOPa<4a{!5(WNLW# zV;Nr0?QW~f;CBqBs?v?SF*GjZP1l3cew)1JTx&CDcJ?m$nN3e)1sh6BHg}Lq<0Kv< zlAFG<(ZoCri8PGWf|EGE8p$A+-0b`wMNliem`O1%T{CIvf2ihdlz686>ulFmDoRT! z%C4|^|E`>F11*;8;pUiWptRonC}kra*0AMVGKsSPS0Nl3Z`S5%$#qwcj%rC?_xOhr zCLA}^{Ps`+omJg1;6?>g3J)`ln^AX9yXSS|di*+A0IY+hB~VS#y`J^$hc-sHp7$VN zZvG9_>GUVgcAsd089QGM52Sb!;GqQysRx|OuTKNJ2=S~n?zI(Fx%autUu@-^P$rUU zJqjc)`>^)SF(-gu(X-wWB5VHZdr2|Z;l*&l3w)@q&B!}Z(YMZ^jQ zZJR5B66F5Dp1oC5@A8ueasmu9nLs#JT66v@Iro{+=XMSLGV2)*`;qBx(v#d3d(j|C z7MRA?U3e3Sgn_1I$2xkyiN@$_7I5WVy<=`4&Y3FX!|9~VQ+^^*FQ}mRxMT&H(2&+z zB>$X47-<_Yh2}SBjA`w|@EqKL4PwH%ZIe-#U_ad^1g);ha#D8A_A4rIiU^ByQn$?* zUiK5(U2RtO%uRNxO#e89b#J@Cc-m@6+%K=Mi~!xnclB<^hQpvv-02m?d~EsQS7Hn! zPiVpYxf5tNmw)o{wYuR@Q#cQ4=)vDwLCVvT9uyEeanuX61PdS!iDaXTl(RK^TlX0- zLh&G)o^V+3TX>9g;d(U%aeog_nf3M`%)ByY-cU?AG~6f#d){eI_oJM&kz93Yp#yR9 zost{B#qukD6{d|s50Jq~*O%zd^7gKPlZ;#%=9$<G~`p z5V%&CCV2f@N>GEvCk3K&vJh) zYjU*c0nwn~%TWKx29apK8H;zEF?Ppy`UDkpyk%v2NA)^m`u?|1RR}^ z=|=;<9~(}2_OjKV?%S6rth`nC@j>%4st$U26E)TV>}UL@@V<|gLpt6L9G<@$yT20$ z`|X4oO!lie%;Fx_)Nz%dBi&T~8f2SFvX3|G;Z0qeD1_u1V3Mq*S& z2~BvZG>mnyq-ahDQH&@UH9AX&JCN>MYHYRvXJzH^Ah`W~6{$GKMfa?cr6lgg4(N91@{JlDR{#d% z!NHbO#O0eD?sM0<0>1_?(kOt%T7;tWkg%?{M7gk0KlJxK`q*~{)?_=iYrgRc=XXbr zXpA<@S#izvw2vl#;AgU^CW?iEHs#Ba%9`{s+H|S*J46Y&s-%T_F%~P#_d^J5JW)N6^s*&i&hmA)Nf};nfdx75rk5r%XU86 zNPWSALH8=xc(Nmj%sK9T%ANz^NN!_Xru*2ouT@aohS5-iSpl`AElV8}zW&(uxjd)s zOmEz=)pnXQqr{#d$CknEC06@6iEwb{l?4N%HzbnArC;MbC_nz>c5&O${`T%?J@?s% zHZAw4xKBi>MkGIWJ{XTXsahEj&8ks0!&cU>R>{G+zey!s3}neP{uVoT`$L9BmVVRA ziOBD5c`_%E_>@Vkg)eV>(Oie`o8a|2804y~)3qfAnlBQV%+OIz=VhTbGB=Ucgkps#=TkVc>CJ`OhY_h{E?Xn0j`4(pirMA7yj$lBtbYr38Qt590{!&Q+n@fRL`tgG2p*@880q-b%5&NQ%zRG%fyR#9|a>3lieXo6) zrRtvh=Dwk**2{F~EpTUHi+#ZFq`7=a<9d@rX6`~{iVU_>O@qpq`2vyoM1bn023J`Qq_QSka^3~F1 zuOEs1oOm8l-(dQz=X;X|^Az9~r?@r#%I zaX4P(g~&IyyZL>{IqffPA5%R^eA=EmLBVSxw(KP>7T)kc=kOe^D7mkpmy`AEDa483 z*apzCbwN+NA0@4xttb_&EwRQYLl3^hsd>%AB5}TxXt@5E{JH>G4U%lrlaXXT+ zyY>%FMK9!EGh60|lw~e~Th?|ZxqLWv)k~7DWt!uOngyLGT8!{!esP`ZL@~cKhwQkpY?fmZ@Xyu}wu}PnQ|xyh+az+5&ri3nX*=St zEph_V>~fU*p0Tv5!a-_m^quvTeLv2rxSKKCjTw#XM0F3=Fd2_4=>vTh+?U^p{%L+B^ zCN=K|Bp(t=++nz@7LJsA@oGic;V_t9QOwf+G0g4B5@Ls07aE%ZvDCN13V-Xt2s)c4 zeAT{>ml%Afd8g+NdzT7(5~*eA$PSjH|F*TGD#4ws7joo2&Z-U@UQ!}#wJ_3sH##Fs zPgppBO12U_g~8Ysn{v+mF}w0CqO+&Fm~`OHQynT-EpL@xk&vJ0tDPMpbgl%M=A%>5 zI$tU9C+|)dx;AV5pgi4O(@}=} zTWUl9d6<#>p{2)NJ=C2jBQe8w8p@-)os_ff43#I;@<)k=PjPO~oE^?h9nU;K?de(yec!4c+7$LP7M8q_+zbI| z=6asA$g@J&Cnh;mq-_i6;Jx6jwr9G;VypIwB23X14BiIvSgnLZ~VKB$Nh<~aCxIW^+mRnv(Y$#7Ijgfx&* z$-gwIsx42jgzo>R+5|`7xc3GDHNw7SkpW2t$iw;-ll*42Y;o$G3z7`%#)Rd(NETZA`ZI{nu#H zG zQN<69tz&_j+T)%g^9wZ>s7DeWMJ&Pr3u1Yqn#3f-6}-C^MmJJz(?=ZR96J!TWINlK z_nSha@$@(PYulkaTrPVHfvs%QE1ncwo4C#PV)o#AN%AIXTW{6(-nDFy0Z8j6@ipNN zQmg=SzlSxGJnsNNcumb*_yr%ocL~yypOHpyUXI-Jc^90hIgL zxpis+{{hNvWazPVMQ?&Xks>pF^9PKHElrXV?(8l_N4rfNsfiG+=o&?L_UQe=&9@bu z0n`KI_~&+CyOoak$;V6PEEjW}iN=0}4jK0ho$LKFSz(lLDaW}QGGMHANXmP1a??%$ z%5?;BGVf#Jc0{X7lYjdmdjVg2N0h8#d3L9qdfnkY+bO<~E}Y2<>-{kV?v!(&cPP(- z2NJSyO(an|1JW?gT`=2UxEtmO1_x;*JO7hr1I0~rG)Ax?&-rvQCJJ2&7^c!aKE0#l zYe4aTK|6A~Qe9IBdGA4iX7%&yq!jX&D!8D;=Z)Cf>P|=QClk0Jd!b=53$ab-7_0am zhidnGi7eiF%g57Q6!HMs7sxv#visWOOtW0V*J#l(l^x|}J5?&8f4(op`gPvn4k5bJt=Nao1S{ z4eB-mnSbE+5a=4y;+v_<3`k_RhIlLY_XX)TH`!O_6_1!=Im1? z_wWA+Scz5F$yMvJs;lyEBRDfUjCX_Qr-@YZ;t)_nZkX2PYBfMqk_icj(5<{LyFHe) zZ4WnF^ZOuL243$mM$-Rbp>EO%49JhtmTjH;d5Jpd#tre)5JQy_8{Bv(h`$#7=-54B zlxt#cI<9mh=mDQC$$Dsqd#^rZix+j{;GG$h&*EW5CtUw1u(jv<12W4CPRO%sKT0HP zJU-;D`YzBFoD9UHRnfp^PyAN{JAJ!>kQN+GE3BC_<@bgj zFZMAFE6y68u+!`1i4vY*Bq9N+iDiGH!=TOCEI!e_)oV zzTPVK8Q#!nnp3U$iFfK;rgHqvh(~Qs`xjgynCWx3(r+bi59)^JRtl)$Z-`Ad%qA&qg z&zp26V}~ zSZ}4Q_r&chOt2CkTs@)xtw`;3xd?PBuDyH_^6Q$wJIdzr-c!_*E)f$!bQWb$b<;m( zJ^z|6y%tJ8M{u;54g)8w$@4?fTVlVt-gyk$(uOQ?{%?g&<9rq&IJFkzMXLyGbRhw*50?AJ3GCB%?vW7Rv*r)SvsWXR3|c$^yJ8 z=Y?A>$MYf61RL;sy4>mPiEJhFs5SK3T>YknfRJt#gZ#+YLBPg~+#81CJ z?TAK$N$Upmg*VQS`16%mxpKxH#zmN>xLKLdm;4@6}pGwg6WW~xmeb9I` z8AHQ>B?X&TS&00@g2icFQ270hv|A=yJ80@-i=#jwWerLu&*f9obf!DmHVoPw`!?)G z;YOap2~-e=fRxg19F{KY4b=t8qa9cJ+8u+MFGEVFC9|y;_d)(?bJR*17ZbxGZCn85 zHG|ZNQBym{2&2PZu|3n0O(l!Xgn-C1Y3#=&&Qa3x>c3s}w`R>;g0(glp}ckEpMw+g z4RB07j6o&cQP>HoOG5Y}#54yb9XM22zo?s|D$6LA@Mf`X8Z4;RLYZrsm++;r1mp_& z0-Qu_ralk6%^%z~9xT}?BbQX+3mMU`7+qj{sW**WUgOLI*G6z8Jc}W{c&{z8UQkr` zuMs7Kd?%V_E!Q5h1e2DQ)EZrPDoO^qf(}lvM1(v)TV11tQ66wZd!}qpAIDThZOu-} z#fj!~ZB&VQ^9R#l(Cp1Eg7;Suf6n32@5hx2_|^r87}jQf1zyP&y(sJ96T6ZYa#owQ zlwnFkM&-S4sO!p>1fef^(Ud3w2EX7+-c$2_n&;)1|Bycro$-YMf^|l`hIK zdtA#yVG{)_Eqc4J@A%cR~gqJb)=gkxZu5(rdew=QO$5 zmLL;rJJ~FQX^Y~zax)Vdj^g4V_?=nbhZBOM;-4deLwJ*SXKUu=p27VhYlxeT^$XYw zB8-)syPY5)-WnSm>6l?9LBisL)?G+Z2X=8^!-B1akiotGIk=+%KC}!$hxQ(y9?01O zrukv&&3G_jm;J@MzOQ7X2tWE$$A-0e+%aKTl=V!8`uTm^h_QQ)xR2VCoUO-t>16zW zh_KAp+sdLUzfR5tgy3_kn~Kl0C2&hs{HE7%IMt&zu6okJxf?M%2quiwZkh+@A$H)i ziV4B}wxK||&nrYxOMZyWwg122 zae|tAr@5xzXW)cq#{GP!7TRY6q*~IpU+Ev919zNoB5xD_&36{biHV}aIKps%NOoIj zlRl!DRZZpQ-QOP9o}nzjiycJGPkB`JH8O5i3%nA!9}ewF!zCbPUiA~IHFQFDgI|L$ z_+>*2b_1)goiE$g_FnLJq<#-E`*Mw0%BiI#2^j=fjc}}c;IuwpSfj;#T(cHvDqi^e;=|IiLf2LlJh0t`&3FsFA3X+AWK%t|<{)B) z6njmc`P}Gd%<2QCV^kg(dfcMyYrfqXx27{L}z4Wb%#7Wj0>W9)5^) z+aUc1)y*Uepd<`*X*C;gBRaqo6l*sy6kd>tcxR}4{mmeQ{1BS)>v>fp7s`2kK-AT7 zv_Q`yfIKppM!0(giDKt4OT#JdL|#McWeU%jg{Z&|1S;?5%sV9EwG}A5%N^^nq^RzSKavkc2@bb(D@B730(?U>!sZQHlaAuE=d!6ao?nolOihn_iw&wQUdC&Tl zAmq^t(`nY9%qQO1$l*@KOk@K?i2e#Th}lQLwsrtS0JB(CVK~ z*}1^lF|OA5a7(pbxx898laiSKzFhZ_71=A72mL__%&YlkfLTZMda3z{)D-QFA+>$*LRqcQ z68?w$BA||sX12~mWcPK~!gRarB11Oo`@D4Q?xC0^IEtIo0?*6IeXSa9Ob%ef0KO>8TPULPSb1tLk9=f1LUKxYsF zK<}?NusS<)hO$xh32jG2^v$qQtm!T}(9{lYyB^BBPwaLozy+2<}bL$6~gIvPO%(xYF>1N zctqC-KJcJ=or#ZaY`u>+Ro&hqiu&i>o&8w^IZ{uK=rE0JihedtnE-JUcA z@%;KV5>b|znns%OU~Pr=j8d7tWPg#cJHU!n-fFo|3gYp^DdNYa(tS?zERT}aU&1b> z{%>x^zj0|_ZH?FX&((6=<}`|Yu+HE(Kp zc}wu1&V}+RY*co!$-9du_$ymSEE}wy=ayul++u$BIfkEJk)ii*Ly85~apf{-b-}fi zGN55hwL@r$cZ>f%F1GM>d6srxmiqPiLySmd3zyK47z55(VYA%-A?-`Up?v?oE0szJ z6=kc4HYUl=Oj0Bv$-WFJJ7XW~OeG{+NGelafnkz*9R9+kbF! zef75M@%b52Hk!6`{j-7&_QdN~i<4#NBWOold0Ui$!*-u)zFqkGslmk}7(R&X^jHY_ z_NwUzI(KC7AZBK=t(+#Nj(rJkD!X zxbo2M(+S5C0>6ETB7LhpVE7F4s+{MRt?7v#5MSxigx9S>6q?eMz#WvAj!=hT&{Ofa zqk)x=28*_0G}ofgM{e5u9%U~JHI`@7KI4}nxqofpI;aaTF8A$r!{m;eo=wN!-o*|! zGN0Ux8>o~0-@>ztN2q#MuQU`)&!jFhtXHtG3sR=5;aayk;$;q-{}sWGw5CGnbE+P< z-jR?oi`BxY&^AixPOs|3nb+4t=Y!9I&Rd4)3!US;%Z?w4KS;rPQ5}YB<(Gkw3s)#xNd{AAQ+DK7%ckJF1LL18Vi#Wm z`J}DGwVzsjF}#<4b(2m%xF52lI?U$NJ`1-$8{XP1)F{4Q|NOR$7{$0to zFSC2_N(xr9GVE<}#y>>5vFt~l9T791C4tBP_*D$#^}e2ReT0&3%6V-5Lk#Wuo6H#% zx2@HY&%Em!1bQG1d2&X%v956Avs5AOW`JGg}vD{_mSe>H~gbeC%S z3ds8AfqWlcqbadjvp0*M3KAPzoRt2Nv{VP4U*wkrK~4U#srAtkq*fM0s_*(k;Haf8 zHoY_HO8=Pbkp6VQpT2))cx7fYhsnt4a!(L!{^WE-n++*KC$p~C(Lc2OxCiLC{|R^Z zlv2oX(9++XKI-cIqh*JV7zXVmH?>2&zv#gF+*r-DJtttuu|GK<|2OUig*X1=6Rh!2 z>fXfAQjae#@+@h z2|tk>i8OyfzWJe(d=3Tky?ZNq0up~HgwT?JUcr!3#m=S`C#|rYDAb zzwP^|<7?Lnx?|12c8zdErp=*4zh}R= zn75w${v;;bWng@btRF=DIQ+?n^g+;OSKup5|Mr;U_ghg#e`cFsLeA{Cr&P{>TUhCe z(lbKKN7M3UWn)9Bf*%6Fla?MnRhB&vcjIISgM^JCkYU- zO!0II3dtzN^w&C{}X!ukY9KIyX>eD){>*N}6KDj!JhnA43ZpA-p)PiDsar>nq> z1ZezxlgSt@C~bRSCTut-3JKAJ#_UCuDo(lC(ga13P5D~?ixD;V;c^8&k{f~g7!xhm znUmkoID3A-<4VYe$I$SNR&!qzEk{h>n&;<2J^O*aGXCY9(|*{aJA#z+a1ZDuu}J>a zRdDBpmyH8Gqr4`jkX#)D@LYGe*W^;3BjR?!M_}|ud&sdnpIy$y&&HkXbrCA5Wiw!Z zUbp^w zv-UA^kJsI2DweWMBt{6@c5migsW3Wv-ecnaTzi=OcoRWBi@K@ZSG_(b8ZeQKVBkHc zMZ@;mn{vgO6@>3@HYJF?Dm_H?05g*@uGI|kb3b)Njo9p4zfpz=P-E-8EZXD%td1Xx zug4;%E9|wzSi4!Q=5~B@$jf|P*g zkmZm%-*-!y7WG4gKB58Q!JkjBDi~h4>N>gkR8ir1?qhV-D$><9U=o~e>(N%#fY0%j z1%l64V`mL-uT)Q4cB0kICf&rvSHM#XcsWc*$WK#@#0a2MW~^OmN;o&xzf|es>lH{B+_J(I~`N@HjzC7D` zrN+wCc3EVv^ocvfa%4@dg}S7bAOFPN?EqTa*vw+;erG8M35yCDSHq6sYsYPKi|pIS zQjvSh1bZD&Rr_%XQDL1q3D)+!CpL`Sr^#FZfX7?bN6ULiRWT^qG}J$8W=X1XniI4K zz!25(7beFdPShN2Fgh!&xve&K`AC}Z8%)6TUz>o*0Yr>!le4d$KK0)caPFN)>$Wk< zb&vSnX1t5f#Yo%JP|l=2MSF*@cRt^WIxr8sE#-3IG#qs3MId-wvl{)r;61Ui)v6Qi z-|;%Wlk5o5l0P`B@69(HbsrD9j&u_Mt!Vu@+s(-~LC~ID501SM175lAeL;M9?t5^K zGLFGl02?^ z`O$52O_u>PpJ-*V{>27RTVN@0`I(x}BbPutEbbavNWSc(Cytlk$3Gyrm>>c?GT4&A$1x@8GHgx9p=U7J6Q7Bi4syz61zr1 zTLPxaoFC(Rw84^sFv$xfk%!~Yza)gORXV!;G3m;defJ$Tu?Kjr*UhTde%QB7`=G2L z+_}JN)JDA+Mp^S!i$!fvqGJ3svb%rN3Ie8pLupsEx6SIJY+vNU=uQr29X7UWY{Cs4 zW7BVhX+MAeXSGe7Qe#gXA_2aKYH|b9Eah`NTWo*_VAf#9-Y9^E8mCW| zj6Gj%@}J)8(x7PaZcfI;vR|!yL{A)KX5%d_SLlv>C=~wZn#{@7RqBO`ezMpOeLS)ez1aC5-6Tl27yaLeL3GXF5TN?B7)&DI> zW%9E9cv;?6_qVxu*ingxa;T4k#rv_uyyvc5)aJB|A7L;)af#5(vv3<9E3kG}ocxmf-ahv+^3oI1uA}ZRPiv#h4ewe39!EW5ddFa*k z9XrrPQ$o5D?c&pp$iXrTIBOo?^=^CXySML>By~x5h_UyxnAY4H|Hj4IKr+f<*Y)>& zqZp6jfKjnDsNNSJ3E{!ctehjxf&Yxg6Ke*Cw-vLEA*3=oAQC-L* z+-l25*37N11yy-XSqS{cKfT8IdWtI-e@Z$&=yBO5h>H9X=sgwj?M_4bu_4FHZlhNR z#0#x{k8kg|d8czp~4S3IF?~Dv)j&+yT3|-^l2zxXrC$(?=k6$a{X4c&$N7m4;;N<)t z($gJwgGQbd?1ICo@u~Dk<_mIAEuCVU#`aLtTE*t0L|ijtJa#S+G9~AHTQ;{6eZm?1Q8hmUCma)16fqStvGU?w3smylA7N# zs(G}DFii573AHc5H26PkHdc%z+Yk?gF&HAOKH{=$%Tf}76GYJ@4<>{)(IAydY9QCMqWZqPOh=S6751r%obxRT`@f>ypd8IW3XggxQ3>E-JLze2TxmOh?; zFJ`o!dvpm|6LF4cz8HHBt$W$e*w^=QH_d$UM@}_wUR#ZulJ{HDm3z6@o2FEPm0T-l zl5xMjpZyzl{r$-!4`MB&jOKNX@Nc)Wl9UB5(S*qhCVU3{|48mgJpzNOaXelYlfq~Lbev}-tXwqmHU9{;9oYIvmICbIra@|~%@7{%azHHBdI`112XYNiWyM~>)UO!wmGWDV= zkIh$ehvywN8~V|sLsOm_z9^HQL8{5gFL*w^)EdD4T=`fH|5!j81pt1{*kY9(f<;@O zSh4g8G%yioYtkjrEKT!~RhDLHL-FPoLW!24mmZo9e({rqV&8fM*YW3z+F1wh8g@c6 zjsTPf6s9CsaN@lm_IbY>>R;DYy+Aw?FCu|QMvdlRteWKrF* zpJI6*w5)C%al2X}CtRm2t!S0*GZc*sib3jU0|J?>jR;Snw5$wCB+!8Xoqi=%SXHY?H+{F5Qa57T*jH`$;7Q;P33MTT@U9;>3wnzRGrw`b_e;RN<7w^3GHcCRb`0s*@}$9)*83{|Zos#WJ-P&Ui2?tx zOQgoAnzy*eZB*R9ARc}~enbr|cx53(+zVYV--YyRpUA%MDUc<8*1L28z2ucgbwB*E z(4jDs#J_i5yq&HWT4V1HzJLWO@ryQtsn4EJt8~9j=2Cv+?__MRqdjo*sg*-}=ZlX| z!&I)yoGD*O1*ARs6Fv}nsrsX4=qLMiNqhRKUIqDwMlkJ4iRj_^kG3(<0?~&UH z`xV>G)p#k_z3|-y*w?CiL|mnMy1qbSkDJLdE&8$xFY>I(c3Z68v~MuA|9kMw+=;{u z{nPW*D%*^}qhl)HwPpf~!2n7U>3mS9N76GrOk-KgOvUX`xo%p!Bm zeedhn2aoA{=EOQ+gb!spjIIOd9mux2|kAs>8eob+GsT$}1i{Ig?jKruE?dwr7g zA58Jh(bks0w#ofe=#%AplXBAi1Gm+F9t1vZ)f6?o!WF9GWGsRTn0ur0hZj!CC9I*v zQaxUC+|YS^AG@fkdO<;9GnnEv9l{qiiuDR`<)z#2~_AacHe;sn}Y;^08sIH#ot z8MKbXq$pW8s?EP6`+-%qACSij8-o^lE$f??=P`<;7ZaWcyw7`$vML>@@buQ}MH&`V zsFpt!_))E|xq;f}$#$GB#)~5T6#Zuo#_HEi8BOB{`x^)?oZYQ@biHZf^by-kT&i1kl9@V#=qP* zg9rS0SDBPwQ0es60WGvyH|@!Onk`T$p1ql(QKUhmj9n1?BgW>}s%d>wK1d+YVCxpF z?Orz4{R=&ZDA&7%Ecvmxgz>JGDc@au|uOouN!{gli zh(Sb}57_4P$#kFJ>^>ZM7Ce>rh0p7Kf@ z5JO$5rNSnM0qMlw2*OmUA(4?05bFe)Kcw()L+9>BN5^O{0`!91 zb$tSjcr9bzO~zI{#2^#eW-J`e>PX*|)b_opbxl>wYt8^8N(fCMI7WG_mIeJyY0@B7 zJdAPq~^H5(&AzWKqxY?;qZ!!2TE?$1>ek?t*-L;?Py*%y!9rd zEvVW_V16R(824LEt^^~jBZF;Jd2FrN&pTBXaHTv`pT(}AJd({_N}+NXhDe@{0*rPy zZRKawod0BJu_Unx1o(U_?Zzx>i@fMyo*=uwfaSjq;yq2>R{Y!l&6yoJO?7^r<+_jj z{wCMU1OLs;t2omN=NPaM6{j_ea+)q5WOyyan+8~2^Z20w@eID7f)@z<;tcMLU-+#& zrOS6p=f4ykQ|-rw!hLtNPHsZ&E`WUgxV}CUV%HAdUZhO~z36Y?F1a~3H%F;BpKf92 z*CWC|f1O=HP~bIbI6Z2>4E?&dx#e(LnX3P2z`?ztc`2R6Pt0ESaSP2_x73`aN6@*{k)Evz7*e^$)oFieAS$NtL!Xnc@Q2vfdXX> zhIps4NrKBz3X_b=DxZ$YqAy8fb~9OR1Z}0JY$bhf&V3sKogyTio~XrbX=D@%jN3oCxcNg{SrQ5#gut zDl6WYo8Wz?WQi=2n&DS>H{mlxUfaDkf)f6wTo6Z!`%Ay&pfzZPr56w!mDE1W5%X zk0!H`B>02;KAc~g$Jk`*IZ~}YYQGMI7Y z&{XT4YC7WmuM@&_QeFBsDpS;AzhDCvux;pJU&ts=w(?{fiH<~L+`ZS>!;G*P{%3@` zL&%AdUGG;Tix4XYM$5+VtE>`?gFIT)ldEO3DhrCGk}fFD`WQAZD4Nzqup0ttmYbr! zSDZ4p`^sn$3g%A0$mi#g`t|zttT(97Xlwd#41$;u_Ico3|Cj4NZ=Et2NYZ9N%T5ZS zg)~)&*lOcyk~d^&ljUhs$9Q&pBqk}(I$@k5&RovplUFvuepukHAJ*w@_XJ>YU7^hT zUVYzz2Zn{IMkYJxpnyuDn)d7>+O+`8{%_L5SdUFNwo4e)ymkLU9UPcb9y_IrOyQ7CE3XUn7uM|#^@@elCaE4Pln~<~r%n){;v0tJ16bw#E025Ll=U*; zqs(cnYWtn&K2-#W~v<-B!7V+D5yZ$iO4vK6OVtRTv zUTt&2#vh!9!iE)vm3drjSj`c?{0<$>t=-@^us*dVj3mk>it@oCtG){bWrlN z&pnTHj9C0OPOl|MkveaLo^#t&p2rZ^wjk@RW+k>;&GQ8pNZ1}^{O)fMRf2Y9l)O7$ zF>$;?H$IrMv z+mL)zE^qK0hm?|sy}*>drwI6Ld-}xfT3n{t*K{Tdv_r(qh7dI-;{kRpoB4okeWMt~ z4;m!71cIkm_(nq4FZzVJe|5X(R~F)en&%&S!#Hb;N%o^{R`a&+?*)$|JjqCM`WzUz zp>VfL&z61#UUm_x$j1_&Wz7{j)SHe~prA^4fRy8kgatwx zmcC-Aen70p!k7;$s{0ShJWkL*GoZnAXvQ*nbdx1DblQ*l!1qw|GK_dZcMJKR89aE(vaR!Ufg0UUM{s#a&fY&ty{r zv$k2c9Z`(3S$r+d7GnrI5Mc3NRsO z;@6a}2fpsyCi;#5G1Zw+k20dHvHLGGb{5(R+Bj{C(F6Orl6i?LYDORWP8pOOPdmi9 ze`zgWK(!W~d%U;dd5j#tc;e!T?OULJcDxlMAEu%sTb2^}+Y2 z2(j`=i%d9IU4~3^aBFx1fv3q6Zoj5b9+p8kU*8lL)w%M$UW|1>7}5h26+~luB*b^$ zc@}1rKc~`C&ArH4(;xRz04xZ3o;R%ZVlRH;}h&!356i4H+e@8 zR1QTW4>`_;%}FlZJHgn%>tg1+>LQGdx{m+L4Vg#@_-066B*Kmvn|vWnTS zo@yBA=&cxbhz}|Toas19q)tQqzy}MsGg1fH#wM*{1o9;WFK2FvIJVje4`{u}NwcpI z*VW&8_?|Y)(!|6;f_K%;)?cPIc+RJSsM`-QRpZ4Q+6c?vg zZ`P>2=}B1h#O;IXIP8_4!|!%rrNN-P>c;| z0BfgQoG`o9rQ{E${*JEhZJ6igCD<~GL4AzM3URR3!HyYnK{&3=HzS-*ymg+2!poqc zP!ulA-FSbkk>vsLeL&txW!TqwzbU^I#^hp6+h7$}MeKx+Hn{AqD4{IK9nvE5)cndY zk427nJ=sP{xW&pRV?%$e!#LZlQushkBp->1CHY-~?n`KryFur5nqF54zzD z_MgfnY@}&z`Ckt$UGvQnhIy~_7zW>WJf!#~#C7<*V*RLa-4^KlRs@TYtGcgp-6+z ziDR*t?SAOC{$|iUfA7}AG(-gMz} zHBQTawIJ*I6QADdNArgM)tcNlE4Di5lA$MPH6IMv4!5j61nglK14tqZWR1G(gsE|) zDfw>{P!baV^H@%vR4Si zv}}~Kx|HNGeaJ`9aRgHv2Kp|Zi2<q_eCCu3A5d}G4BQ{ReQ3)sbM$3wSNu+DHn_NVFl-7R2KXVLQecHT*_`>c3St>fHa! zb5mRHs90_E^ATxu*|g%Opk34pi3fM3J0H7Y6yZ=it@Rw|Aq+kSX@MWaUS0B0`oQrt?+9yV?pJGDF?Tp3{N5qviB+g%<`K z-6}Lpp-ftumRCqXWoHsveQkp9m~`&#Lo|#gKB2*Azy&}8F(nAD{`yXc(N@moM(&sh zrHRyz9R*L1emX4S_U5q_Y$KBqy@xwa!uw)3meptTFk z&I-r6%*N`@pf=-#4dymO+AoW?DV-ZPAFPoo+n`|Fj4IIJ`s_*7zA%LPjcfO={l zOQ5$4)yM{T$%W>%tEf%e)oYRGqCiuMYDn2#UuNizp4oun5MD*lP<`yf{L<95EUh{+ zW%57f{GHCEo!?S=mKGNGj&^jFc3-D&li$J39DlTIB?{yo(8Ss1{48O2;8N3wqvrox zRCRGce`GGt=g|2%+Zj74RlT0nOBI1rD&92_z9G>ClUJ`)d_06K>x_HOrRLeD-CsWj z@MIK)*)MlX5Z%ESuTB0(RGnxu^t)~-aC52~+SM=fRpS)ipxAICbT%&Qd2a+8$fLWJxIU?&XTp0?A*{K+idJ>U3awz?4!`E`e-y7omh) z3uHCTuoX`zd0x+j5+`$T@wpgXuVG?H$ZO5H`9MP>;ad4WCCA?~N1!ucERn ze~u$&_nQ{u)#^fe^lVjwz+1KXPE)%z_U(}Yfl!JJFR^YiK$s?ewDBimzZ9b2j8-E) zoqiw9s`93HtDRI~jX@YIb|RvjVu5z#TeO@BE-)qM=3a>vdx;b)+$)zJuBh34L#9kP z-U^uTMvFG#)M*wNSrSrAZR=b)Z2}^AtKsBl#@7BTF*-`uSxboo6!Y#V-E}Ncl`X5U zrG%YTU2X zg7t@{(s2Au3@2y{NOSGSLJKp3t8noG2Q%%+C4u3*bWFERQ;fUO@+6kgzXYmrc+aY~ z=MAGca0=J;gNW&bWN{i`I&Tlfi~wk(yV9hmx`f^N-*0P%Zho^%+w{q|L4=VJ+J0sIUpVmDa?(CgedV`IFbvzxFcW&& zZ5~$9$nl86*jD-N_h|J&L5*OU)nBkLdB7Ve^qV*!iFiQTzYb&Mi23Zcd+@y?ILXYS zR>Q>(e*B6o<$`&^$X^X%HEKPX4xt_&IDJ~kM!XfB;k4{)q zQv9}l*!kmRJDg3~l8m!X!q4-9uUI53NoU zCxrby+Z^-x>)-eDsnddo`$hjiXB%;!$^!Otxd0-2DjPo`I;Z#cy!Zs{X^M>57y1%) zyhT&?(!iIWJPyWlgp3n%@!wXS01c~m*oWHKYQ5mgKU^>VyyFySzhmswo>?5>l-jOt zcr`w`^*%^#*!KG@!nH7CbZTWsONgjuoal(bMn70ziHaaS{4kSa4ppRd4cc*s4nQ1JwgLz)zyf`3bhcCgbkN{F!>!S+Q;?!OZH*jvK18x`}*H%PTvosE;z+| zPTY5LzqVuqQO_o_<)d*MTrejM6x!+MJ6X|5ukhv)mJhPy7*U%go&T2B0^4*D?^Pkx zXEC6=>l2+!+8xEkZI+@kj)wDN?HRIWTIS1VC&K89;zZfn^6mN7f)=*_qjI#Hc~$W; z+xS%9Pd6pULz}BZhSO%%w)9H>gS1xxwl1w}i-N4$naw}(?#;K6g)g<3x z4Tu&4mLd3BG84$=q}QFw5l^!(a;Ic}bY9afx$Z1&d)hn%f0jF?v-q2|yM2a|-ovh# z{I-d{`k9$W$lPOV~D*ji5BzbU?CjQD7Y}u?3>c z5-9>MLmm*%MAP6?*QH+$2W1%ofR@Mc6kB?sL&bZ z(r!E10Hx$@(eKvYAuWYMa{@^}B41XUt>{Lm+QcOE(x?};zHE;O%$M7J3}GQ5eYI`m zcpCQZ+?1OvSAu@nM7zoFpFW@U)7BKtzB*{xkiJ6Jp4O*L-->Bgtxx)_j%(x9GmSOU zrl&M7pkJT9Z97S;{b>fNv4FYwHGBQse@WO@pkIFtxI3G&M{jKLU&Hny=R11qZ?^Z+ zFRt~E(?hep!_G=>@m#&_I`YE{EW4c}(;K?-)xw_bf;br^c96d{IS_i|w1{$r59MBw z`EIf}>uJd?#+D997s#e6p-o+#81jt37#Kur`J*Onn8^=h6oo(UbRt${Yqf_9NJsL* zybPg6RI>bl>}r{HXixrOP~22!s;%kT(4fERalGWB7B5J|aUfH4>~qISNl@sbFnD;~ zRE&wx5nW5QPnRsZWmR`;%|vkjV4LQ}VlrN3G7r?!6Yv;BDtN5>Bzcj%Jw>7{CPaDE zT__XPcyS~%#Q!DJD7Wfm{MDrA@&VSLKP_%wW(7~Jtp)v__HNlIQ$4qR zl{M^-7|ZilW+pj*gRsfZagJj3+{^RpWVo^>y!dmZ1J$*qk^Q-F-s2tOitgrBHd5rU%?5AXEH4&gzK}&rt{@%Kdw*Y{ z@Vaqsi5%>Rwa7-1bwA2_!mWd z^y`p##m7lI$9ctmjz0p1Q09w*`vm{p8hPmrl=IDV7d>9^;xVVx;C9>Y%)dDsM zqv)BvQ9tpL%!?&A{-&a&qQ+Yf=|02kJ!(;JIEQhUszhtso(?oC@pM8u>)WZaI)Y28V_lZdzRhIXm z7U<*QijU*XY)J`z7)TsBf?Qfzu3$L=PT5cePyG%aGGiqTuRoZ^+^~)Xo;iblbPCuimp}Co{qnc+zqI5 zIGEa2{(F$$j=Bow-g$F@y5?m5OX0?ugXCepx|tWyZ)KT;#b)gOsiF|R5cJEJ;mV0I zoylh7$u*5L@hz*X*K7dY{2<(qXSfmWRcoL8hF$*38ikv=As2DM`R*D&yj$<>mW-vm z)~?rRl;saet^8VJ9%R#^picjwZjvgPYJR*+N_5cURB~CprmA#Y_;O|9z2u`GDPF&e z;4;rkU3{DoGfzc1LEw=f)=-%c@I*?T0d0ECK7kjeyjh8hx@*5`Ta;AgJa`4F%g;%K zd(Ft{0;JomVQZc9Br8Z6RdYuZ=}|LiXTr&24S^}}?*|mG z(Ya)wYy-)Y19@(eXWivzl5*|n?I)%4kz=w?drprAm7xghTYr~0Id04Wcea*pd;am5 z|9!JqV7hog|J&Wh-y)7Ex=%hP4xa(v?Ni)6Gf%~VAB`__J&)G9Z)y^PrOl@P!8G}o z1f6G4XFSGjlEjnLwh#s;Y0BQuQY<{AS!)9a8cRHnnzi=To)@OwS$pHv^H4C7m(Umm zML8`0w)Eygaa__p!QG=j8%)|vUw~e&ZI8=It}=WPgHCVrIR{j_v(B&l|HqyFr%qalZDu|5-iQ#~ z)QIcA3?{kH{P5oc=Cpl9mE#7|%q;THgdn%X1tX4eonIZ0N^>7_w%C;Zmw+o!knd4S z-LoSp=_xuTW)?cU7uz{GKl{pzY4KH${;hbdv>=6C7hAl4q1mW>Yd&nVToZS{c>@5t z5(1>{6}JB=wC!c?gvQ4lK4kt^DM@$XW&PU`PmU6fTle&r`9Bd~yTuZRJgqOEY2Ir! zTX8Txhcm9ft6oyG())pIbKGLDi+`itd4IsL%n{t6x+Yl-z9CjT6OzTzwm)ud&oe0c zOE&dgam`;Ly)4`Zl|Szkgvd80{Zl;c=MIuy3QcnjfC@RE`TykZy>YoGtZBJmqy5LA z&pqR@p)2PacVJ@e`FJtQx;IK#>vhbH@sBURPgaAUh(#DwzIYjo>haeU?A%i>{wesj z(_muid9)PQ+fy%Y&4vv-KLIbC3`1u?4P~n{ zGcSnIiIfU5n)m5+@y<9w>GLU5L*3CkZWA(=+GBeQ8-*bFBjvSv5O29|?Tx!zH}4K^ z16b5!34BT2OD4%)SyHxwviFB=tWo>hg_r($=br8MuL^g5bK6g)AyASyn`9uTvHE@`B^drYE4f&3@s;>n z&(v*&tiqwF<(Ku@CN1qL4GWR!uR+Ex5k(S~Q$Gcj7O)aX&2g(#f((&kKBE57hi|e+ z1vX1pN3E@}A3;&fOQXZapD4^ezs2)?lM-h{X9xo(7KV@??r8oq;l9Ei50%QcXQRRA zK!1u7>VhC@I;em}8|`&lR`po+sVh!qll->Wnw4k9|rA8k@vL z62scw3bS}%rlPMV&Yk!3wkLU#;lz&!sU5v99CXJVT z8=Y#6|C5DcmHd2`@nG3kO>o?XL@+`5e4#z>nQaN-l=P~}$6PmwLXzSj5g9`)Ya5eHfoPmL5MNbYu} zxu=)y3O?%o27+tO=8Xf8TQ90EM^_YUsNJlF5@%%^PYWyFwJ}U8wxopR6=yF9Bn_D+ zF12UwSd-U=3-5fbb9J8$n6QtEOtt-%@uX!5#cAXXiL-tyv7%yvY+tXvUe#Y5`3{XN zDJ`&>&}r$gP*&e+4Y$t<0~R2)qC72*I zlMkKz_;0Rer4xSD!(*d5iG8QeY`;#(+BJ$66d}Ys;~7}h3^j6-yuUOhCjLO-8`*K% zp}e-O(dlu{`#V3;t*YKz!hNqUa&+yKf2_Gg?~Q8RcsL+Me%KLYy{{rueWl4^C=iv~ zaVqqxLRBs9GI_$zP)w1foZs?7U;!}SR)enMfZWdI|NGb8DyoRrFj2Dj`uy63;r66_ zJs^y8J*qL?={hHTalhy5MGT1#hWcE?mbWZjE{+SzSpLv;h=z!) z_L7u!kNCJZR2@|m3QZZk!(${z{Y7i9o1O;W#o{@{Pa6WazjO@-?o>^4k{%P1ug<$n z^G(_g?=_tcN{m>%gg>MEdxz8tC#KMLg6|!{PH~Kx?5<`6Brn~T6kWde+HC&vsd=oD zwE(bbfT?;s1;NAI8E;!F%>2Z?t9wZfDBDf7x3K+sO4iUI`Q6>^Am^P2x?=~2o_urn zZ}&G_S7^vCl|5-gdn`KxeI0h~rC0jPLja-Sa0Fqu}~?se%2Ph%xB9t@Xn> zQ8HLp3n{AfdutJOUBYm{HV}_QN9_Trj~-1l>t|jg`#m7BZ~Iwh!X~N1{`XbAygSyg zra&t%?C0M!dAF~_F#vVJ&$1RbO#U2qQ%b@X0Pm{&`9${n2H^hWeEZ z4LOZ7$|#&aSAsNp@FRRfijRZt=ZTwq4W`n5{!|0kkFWL@B~w)D9rIuORhTfL$~|cc z;L7eENY&RpLR2`CV3>9ucu*PE{$(1%y;16fC2|};{g`VS^WVAKvsj@%LmM_fL0)#R#y4W{D7Bkvx!yfVbmHJw+?}AZVoQ|5 zX2Rp|#3Ht0-Y7Y3U34k#l&7;>S)(H&scy^$ig}$C%ze^I`q4R*MWbYO6{O{z*3TZ{ zVw2i2$3I^Zn`ryJLXr+^Il1J@)}UZTsLRD-$$Lls)kU;FQZ)4W>S^| z^;JLC6OurGS-zdz6KE=W>RYe%cfMRzrr@LuCqGJLTpHb@Jx0i<+vzVXC%F(yq^;ueO=jXMf4sv^%Epj<$a(SuWPJ z13_exUC&enWL#F#AFyp{C&L3nRqTcUEvwf0j>cNW^d(F_=PAc!4z-m#MTdNvrWw1J zuOd4t5}su6M{;8o{fJ1{3Fk#}ROZe&3u}Ibtl74|I;rL1^>C*@H_18GaO$^*{`eu( z{Iq*HJIGiHHwhbhuzY*_4Xw8A+-905GT*ei3gzl)w7L63h|i>na4{rg;uTp#?nz1E zyhW4Srbi|uCm`%FgsOY?B}bT~re~|_q-F;VjV-B%wowqqL+3NmZ-h@Lbs!6`o?d~R zbbGY?BQ#BcD{Sbe)v{{R>w+lF;dd6SnMOdAl2=7@gD6#x($ZcDI`|q{9Nf6q<|~=) zT@}z-DBbvmVQSSIW;seU9(YaWlG5xvKBHEX@1uP7WFj?BCQS9EO#bo@mJyn6{%W*0 zk5lR$+!kguQwO=b+q~5*-zK-CE|JZHk70vr3Zooe>~_uIyi?@X?VzGuUjXuNI()wI z9OCNPPK|SZ!khGOpAT%46ehMvde}(WiE#UAQuL6g#XdD*tBp?&O}^i3wExOdxa*Z$ zwRc&XpC?b-e$$;DJt2pNDncm6Hn&jWAaZ6dxYn=i)PuKUtLNwyk#w?)1jg(ItiQMP z|B&{TK~ctSzbYys0*cZIA|+kYsYsV}E=YIxQqt1hCEeY*NOvq9OV_f%0!zcfS>H2f z=6&At;f!-;_`otdv#>Y+d#_(!@l?l06jl9X#S5kmoz2m4L<&Fnr+B@8aisp+Jy94_NWkU2w zlyayDy=?kwik=WT=7aK220~m{<fbwnC!SUS#MqZnvS7~j+{2~E7@cf3s0xzdlR4BW7O{C)< zr!L}0+xItLmYjhz{FJFu!YY|YN8g)GM$F8@Yz?J^f3XQXukqL+s~kzOJX!wz2QX-~pfek6Q!mGJuTE=%Mqly0ez4EDjbV8| z?WGPit{?B}>8IVdSrU#xag}XUfYDxa_fl%vlq(TJ3MnU^V*%-s9}%sa!o>R1k*)cn z6UQggYR&7M!z8@Gq-kUqV%(gXlaS1Fts}lJ@Z}3_$=>?lLfP0%EC227FQDrJ%kD(c z#+Q~CjUcLr>?m&mf&2OCV=(48rPXXepb#hf0Or$(q4HU0B_~aPF)`uYF`^h=` zE-Y~`b(CpTA%%%Qhm5^7yiW5Tf*S9de{n!-{-FCVO}yNcr3?4Ap3Jd3d1h)^gU_dy zuvI-yez$G6qUqxpKdFaq+E6sRt$gGPF}2MLBiA`ys&_R^9GNnCFKZ}5#k>u|5m=yw z@PK^pJHmlsKDJHak76O`K=vbk$O<2jRCl-)>u#AdPQFfyPk|N=L~$D1d6&JY(cwl( zeAsCvtAik;)V8i?iaWBoJjKc8Fk!5#zg1r9$*_MX0S<57YnSOyrI~J9Z&vB&lY+sG z3R$d9dx>;slS&IvZV(ax9wy+IW>4VuoMYB$`aV-y*~~@i-qYC5;EA*h4$it?9gjUC z@VdRg%HrFLD`Ad#8A$-}4AG@5-fNZ6JSBY9Pv+=k494FXa3rek-m80#HNBRf3oCmG zI%-jSQ&LhX$VH{_p}LbH1qn4O<|AH8uHO905n>_fFw|HQKuzV(8P^jVHFe-Du?sqH zSn9@!Gq9a!IrB=(;d8H3YrpHlpY`vpOW#%ulqEB;L2#bhg^MV?H1U%PALBHdi zTSHhtS(-g4BjTy#&wu$^YnS_=x_FAV6^YhAXy_n7xxSn*8nZh4VJ`ogv~) zCU^<2&Z>Rz@IEiNs3_EpwZdYhigIy+*~K8aPnBsZI#prSq7U~#dzMAagx zT8N422zo<;eM<2-A(fR6mAl zuQrq$Z3{GsHYx0fXN^dlKS~;kBRIEwye-t%dg(6HD#0+gT{6uN#8&`nZBBu$oa8GEoKc{(i`j$U^l#lSHt$xO`>)4b+|4@7lnaWVA zpodGzQ$+K)H;usE@w6S(IH_=^qG8cuJ#?5ETQumEBFRqsen}}>$%kzEIm9^V^&RVj zNtz9@x67SE_rv=K#AmVwTOSySl!Sx$J*)S=*>+AY>};YEbT2MagT46si@($AypL%; zf~AR-6oJg;B&C;gXILd@OrkCk+$M>Ic;Cfk(M%n$YX`^4--&|xZ*y`HB4%MQan zUBSY46aeDPam$Ju(_~>EZ;@x^SX3uZ#*HjdNfwsrZ(kpONanv?Dq+_MZsUhV*GN>PX1^%irV@9y+ z?Tt4^{4Z_MRz`snO0pa{{0hStt1rW8qo1uf`t*3dQjL)-q}4o zcrRw{FS`hEvK32leeX3GTTbd8c3`==_0sYY4OxsmdV8}olJWj#7kk3cix^X;AE9bt zn&n-hA{vLciIa*AKi;M55(Sd@Umjw)0qbfHywpGc0j^GFFB)Q zWBvAfru1#-H~x!XJ!O83C$cE?5Zm$SyqowV%L_oP?k}(|^zC#EFsrVTtS|?HjH|OT z{>h4AShq>Gby$%WFaNM+4<&J~s0dRT;{@9zAf~oxQYNmq<1*e=I&B#^HsRQ8*6> zf5Yz0se(YEc8_2=u7$kUn+0k2CD+lX9IbaQt0X`?$n=y3VT;G_Q|}#xNdHc^EZz~RYJ!L-rYdB*JaTY zmXQT3=K}t|a3-ov-%Sas$NMo7!}2pJ5`M5nc^*gJjfSqZff`GUFjkaR$gfT{hBW8 zr^@z{X2W0{`AbTPMN?URkf+8z*#0tN)^R!$l27NM3nvrQGPG%hG_0R8+|xbC zwbZeqzbm_r%M$qDl)$;dD3#kN)e9<7yJs#r&HmR}>BsiR303*_fzWM@y3m?BH1J*+ zgf}F2+RVLJ*CfPV(A(yBB#;I4lMwqIHPK_(x_FhEOLUA~r7A|3;x-)`*L(2%Dy`+)FCo;BMVi^YzCEDs*I&x`sA4&CkWD%8=pu(P zND+(evut_Yaf%=}fFgPc-eD)OSeO*mZ->9%*$o> z;Iu6=FI3B5y3<*+9{W(>V!A>HnwO33C$@>%9g28Ra&(*Xk*1Fv9Gz5+yk*ADwbq_6 z)!Tq{&M^~6)H>ya*OKaR0lZr@;C8{EZk~5@kMLY%s3v$%Vk`(boMF$2um4><;Z{CWF<7=mPYLuK z%$s%=VJ|n+RQX!uM;yU}J|!vGQaY$NJcomraMk%zF!1|sx`+1{Te&}iJeO@b!m$}H zq=NLX!UyRjb%B(Zw+fagi;Hub2%np&EX>OlZXx8@I;<1^(RG=P#?#;d&GKd$9d~>H zgBCyTYEH{?lvNtncnCw=G}GCoX+4Mp(VfHvgSv z;H4ySogd3zz;hS*ld4efe#2D1{2uwXd20O1W8GcEVX92Cw$2CdnvwUY$?#>CsE{29 zDfGr0Wi1RMNACG_We1aO>})gB%B8+b9Q1gP1t0Im=2xjiuoO{U%v6$P%D$y}$G}k# z>Dt+g>Y_?hJLzR1D;sPWe9eLigE_=r10+>^I*B%l z@bl<-v5$QV)t)+NzW5CxZWK@p?m*Y8E0KL-<*5`H_X6WZ{Y+eOZH`jNt3C?*b}Yq3 zNY8J#euL#y_sL1C zbxX5TFAyD6SfGG8_E>dY+)9{F!0y4zzNvh~J)ErFQphS9xq(?A(fF12U6~>(59SDX zS1)0naZ%zCH;itVb@31nDa`J@4G_9yhz#6`K?qj$y;&o$RS`62t2yDrwM>c_@jmH2 zhLcoac=+7?9H9X8V(mEV7)q&*9$F`;R_9<@im^v?&n+pFla_HKRkF}j6Ku^R3P?~5P zN{g!lQG*!*kW=yyeU?-l4LVi+-G=Eyp_HC6xk?DHD!oyL^9AoV^9(ugYW;Y-8yg37 zbvH0kt7t*UI;gf;@G)n&xa^Q+hWuNdCwl@0_)adSk37XnkwDq|}m(pslOspqjvo{^qFKCnKTJNsurIp0C{vkB z6>yi9j{Rzo#eGMnZDV?eEIZyw8}8x;U7rt`lFYQ+Ul#TU+q+F}S#7cwaor{(- z&sL8HBQdF#<bWWzVLBKk>zlc9&(>RKU4*kI6mp;RJ5q0V$T^$Y%Hzp z=wnH0?LmZ&cf)%u^p~XlU=PSMpM2@1cvjb=<*Hu%v|y&j`L7TBkHY@chFa*rr%@fL z=-Sv2C81VySgH@BlwFk2MY4*phe}*_!-7duN3a*NFw0xqxR(L`Usk!cB!&Aax^=>9 z#&2D#1xoGkT_p^MSd}&4{WU>XRe4ZQwzf?Q&$zdFgPPmOIL^gNbif@l7et#S8rN+Y zrGTj*jI482jQtmp8l`BL_5au`>|A^X-e+fZDoGv1f|CBxX`i zj!HN0ddd82Jcf$FZtSXI%Vs0VN1%!pETD};#Ab`N=(PYpET!rQ2!q9IW34jFrkwpq zzHlo`e1~jEu#m~Dde)CZFP|!FxCENWlqox3@xLo;KWj@mvv<9trMA}Z$@K72F#!D@ zG;EO}T9Lu_Bs<-9*d z-TD$(4R1Z7SO)7fiNDQN-~bjHY=A>Ryh3d)c3*7#xt>Z1@*mZ-(!#NKr zzhV_QCZ~1mgTZ-#uC%UmKgY2b!9IwhboDls%u|(t-&owFq`-^)49|+z{TjQ601r;3 z%)V%fv;a}ijrFB{U<_=~sXZFQaq0PpTn5ouQs)ytQpvsp+`?YssSMHV%4Ukyf^&7FD=}q{9PT=?{joNpCZ(Lymy; zXIKL_b}4Qx?VmCVg+El#Y6k0lhNX(+l);vHJqq|)!ee)A^JvK5?ZSFw8^6zs;tA`e zc__wqw#Gb)RTCeA^Gf;=aatJ7o1g8m{>XTo`hx9fj34z6FSs(@5Yt&R7kr6bq{A+Y zeT+lM`e7tfkY6@FFF{?;t6u+=irNjzTwE|nq>V*V5`xdM{r&D6?+?9%c>kYCx-QN4 zpI>D9ndRs8$;pzC)Cq0^0*6m8DXD&_54& zD_?R;q`|Rf&AN737$?uCi97C{bBUD|f(kcGWt}=OcU;9DA9pJc@3f#cD{qdZa8MVY zmL1PjYR<5$ur6_25^cWSUv`CiC1BK>e_;7H zTKeZxwU;QZTWyBOh2JjRYweLEjVxXoS=~kVXi8MtFxc-H54{P~6a@RADBNpfWgk@s zJx(5>_O-KX-+%3PW+S%sBvd^#$}*hZ31ydw7IM)71}q^pfbqDDj!E_vrbp0|lihC( z*^Y_M^VJQl{SY#gkDpSFCK%otz(RVO!0I}7aD3D5<^ukDAT`UC|8j134IoD;tzQpSCxaAbtIVdir0x|bzq zPcDM)&hJrnoY1M8zV^AimCdGg?!>likL7bT4|7y&aT%^q-DQ6_)*QgtRy_l;+iLI*vixU-UoVijXhgeK33YKFM*Z%Ut^8-4>LVlGq$LjO-GLafqDgeDxsfVyjTV&}SIyZ(NXI_9fc6Qp?}bix`v zE+9y`%)2wYHWJquMc}IN644>`_95-!QQG+F^cig)xJ!vw$J!^wCr?E#?W*(Xq24ES zK6taG?7aJ&pg_2a(XG+dgv12~OWU!|9tDODir`W%O8@Dh~Oes^9d!L&Q=m z$9P^X>D^InW)1w2$SFYY?E8_4ImRnUdYhX?U9jSxy>R21!8|&wr>q0RuZ@ruFl1C{ zJDs0c*HnM`^D77zeV;yPb$`uBkj%H_qwP#oGTPs)t6qR5fiovJyQ^Ng+LdR|mJZ=k zJo6U|SOioi4vo6=n$A&BzlcqKJ#<~n90XJ%b^dwTnrW2xJ-4-8+~C5~v7Hy1Zbfh( z>c+Lg6H-v(CgFWe=hvi{!{i^l|gsOUz;DvW%xp z9XQ#Bk!#%V&MvJaHnW*)?@D}}t@OTjM8Yw`CD@nIFYco6$S!GAtczZ_Ugr}umz*{% z*|O{z8_$+$DtTF{Ei6O%GJ{EMZ(Ixe56wCgDD+Ep4GQ4zk(I+f-J|aA@`M~NR)oUd zU%S5*5a_zGrMqpAckc>6Xv!@kG?-6hKj>TDoE0vsP@YIIm1wQ#+8(;!YAaE+EFXdN z?w7sO-&*GjAdv?Qhl&PChB}FVHX+M%LS@Z~YnbkHKZfB;rxL0it9KWd z>udg?*FiYsnJe8#ts=1`m7pWN^&^kPdn9=BmPd--FvEREb6rHL<11LLgDK(LOh2{n z5z6ROyw&D*vSF7)mG`%!TpuyYUAdqxgkLH3PwExwHX-!)Hqkz$b&j1fS6)ViUU+`+ zS$86~=kdowMTE!ov)~C1X7L=mUjV+T><57cQlW_KZ&+38CVzaLKPMHe*AsqvA4=f3 z9__*P0m1}pB&z*XF&DG_tch$+eZ`0JefREI#@nN&^HqJEVux+((fZlMZ{_s>Io#XU z4KQZ+FpEq+6H)kCDEm7q4d=sDOJR$HJb zUX;XHIiNMphkWIiww0POeqYg?X<==m-2-`k38M`@ z9a{FX8q%=$mprfMFKct^%Q?DW9{3#n44QgMVTXl^z(3rT9q;>H>(|fR7Nb|_iTD8y zF7vPLqBwtKIE${%sJS|#l30(4HrmB_C9oHmy{#2XD!2@SC-uWw>!b~jEVDlc31K>D z=V7)-Kg7H=6%EG1vAh@;l-Q@u0JH`$1=%Fbo}#pJ>A;G7uKACWS>j5(ht(2YiMW{7 zNUZ09WP%=&^&!+b^#R&8Ekb7plN{l{LV}Mq>m{OCi#D$RAUw|T2!aDErJdO@DjPAU z;$<&w3fPxxcJ`T|+t zhfX2KovB#6la4BAK^p!&;opg7)`_zz;n9~u78GI`7kwsZE9t^_6)g(z>K{m>TEG&{ zfP6QHHpa?MD|=s(fAIO0t&p{%e}DJvw4X@Vj1vkQpk$!G-@)gWz&(rP+2H4uIo#eF zR3^UpV2>$WTHcUaHcme;E|m8hgzbdK#_O45Y@N5)jQ&c=EYZT zB`O3x9YC39@QTybY)t&m6=Vyam~a2}Jg;~^0i3I_VbgEgHOTOqr>i@f)Ng)pI2#+} z5f`vx)ZLcIpxAtoz;_^s^b=jZVUZR!PM;_o)l4uJGY#n=>q2+>-?5zl$tjh-s76M3 zA!6s?S-Z)zz!hL_EP%j2u&1|4H&$|h7j`BbjMCftuIdf`+_|sU31_`7kTzz-qGfws zke`3Uk~}BQDid~>?*PE+3pHOr;ZR=Fd+KGEVXVihbtS~~OzRW7bUt_18coNlX+nG- z#akMiEi*&~DA;sM{d?IY)vk_LZo9N^Ns#9!JhFjfsvD-<0F&5FLmTfFFp3M^bFKxx}@w@x9^FCajSN5I{{1JAu`fL;zFA^;I_91LY6Zeb%^bk7D zavDuf`x5Z##R(^yEZtdzplZNE4hDeU@-V`PEH-j0*aTe$lBcX;91saaEoB>-`^^v_L`ffX1ebPyk}$`pWUU)RUR ze)0_Z<(T9jOzlxK5?05ej*7snMn(j-qa%ozs5K6PO7U2}^9W}IS1dA7CVgHxr(#RG z3*#%`faJlR(RGxlOO?Hs2@2Ew208pVSy-+~1exNQV=#t&$?#{%(NcfX(9=Y8St}T_ zqm!`LyK~aa%Q+b_IZMr0D)NwLJc=im=_mru2$X z$p^?~1-k3S@MYezxm)4~Ma)jgjYsa;2GVHv_4fOkCGdCHPqWzvv@9!g(FjI7@-Mu1 zk9_ob4OsSYvw?{@5cNHMfUTMfY?kSjj*sZ|g2=AV4wUF|LNp`Mfcn~`j&0!?mIcq! zG0G+J(h^5QonES(Y-cosBonwFQf23>DsJ)ik)DD44LxKFXeu2AVDh4YJGW=l`00)A zh6ukHmDbaum0V2-c4$X}C2p1m&JVmG?H*B8e|~>)5OEWgoAq#+6~X{&gZCZwXY%=KnWZQG4Z^_5NY1YL)h4 zW{697;SC1}Mc``%?#0Tm;P~((!|`g9UH>o^HK7bUAlEY z`>T1i>(9ZtFXpjB`fmy0rlXn&nkSd!Kcut~F?BN*3}brj*~{53!dsPWX`X8i-NWO` zw80F)>X1hGupMfS^;}*$cNyBQ*4NW|OLC@q`+AOF8EB;)DdAEIJB+vG5MC9l1-qiq zJvR#pt)RP79Ia@xE}c5N_gHy5IL?NBWvn)Xy}vU3Oa;Mv2=5mMbMJarfGG3g5WP({ z;Om=9ag?-@sbZDeYBuBRSrfN`hwTp4fsCJ1d6~mMc;6$3^O!)q@qho=Dgz9wj%ySB zjK^qQs60qO((Z_6b(|v??g!uPuWQrF4?4eYJJE20YR82Nf8>7sH|I3!1%~59xS8T8 zIGmudk)on;KJEa7+Do77`!|;XB$XaCj5+<-jdb+8Ij?XDc9j{tL~Fk4%({a# zXuD>1&AQuHyTt%}!|TH>?0#>U2Hgxt>0RbZ^AU&$6bgCoP1c|ZC2ghBwI7vIAo;~$ zD{mXKJ1WRF;T#ayehB8hcAHzGL%L4^2DJcD>#5sG*9$i1cpl+*>3%ZWg1V!t=fqIB zIv}g9N!K(PaaL7f3KoW273_}-3jmJP88#&u#ch87Jgwh4cUg%HPYN7&O6zgwWXe$A zN}_kaN?l^~GQ^*_zP_#Hw9#;s108qcGL@Y1EBpwA6qZgTcvP%9twx_P_}ueygUrvJ z8u?kGQqRon+Kh`W|KNf}K#x1tP`QQKe1xOHp%lGig*%bD=$HSxmd9Lg+)$MZXx@Jh z--_VVgUdSR_4D4a?&NC2Zj_96cCch-CdVtgx`z=4Os#eL*v<>xSe^ssYbEM)(~(c*Xvh zEIl?H6O4vvdM=7W4!!Dx_UsTNzHiJW}X@&v6pxk8~GR< z%J*42N(jduu#-?;TVaFq17d?o>u5AJ;8Y<2Wx#C}9&hhqZ{Eeav!>$i`lo!vDZj8&YXV|GeZ=PT)@>b zq~c{0vqa|@@{gwkXo++cZV)@j3ff}FVO&qNin%zAk_NYRAU{=5o@>gdXMh_E=kLew z1kPGBrJ~Hd>)*8L8AoQZ^zfqWm1?CDtrfU;GQhee=0~qA2fsy-wL;3x%@vh-)V=7B z&v)8}T9%d=9pS472<;q07H69>$J1Rb$DHQ&iX(3f!1 zBtJJQLJ{6^Snfj~GqkA7!iln@OgprwxEE8Fvb^gchrs0$NOXZS)9oNws{JI-22zq|5lOEZLA1F6i=^U=C(@j1d}fF;U1Ujj)b5z?hR;);OI+5~{Y! zhpX?jP%h;d;?39f)gXnVmKzb4R2gx%#Yb(dwD-HfEz_1I%X~*CkRMsI zNDouJl)-p0^wc3SJ#!cRq2QcU_17fGsl#k+0R{?OD^v}-NhEv=|DF8f3w-pp zf$tfm|3Ag)P)~OHDN<6Gk4H=OI`qq$TdhJPo1A?{*CdeT%}(JO={xsstZE07x1`1)wR@)yo#x zDRm+rr~Bq9#DdPnw7RX<=|M40LLL85Dj48bswwEu(sRl>mRr^;$bxk5)taozV;|Fk zNSe6J$!Wdoq1(5qjIrK|S-vplaOYH5v3up7Y?3c=Y2Bnt9bvlz1xn-z zr)_`bg05TEz1iLJuAqhTSMSP=S`0xOe237BNN3Nf4BZOB8mYmzGXe_OR6;&(*yVUx z%05CF+Vvw|LIZwpD7~-D(y8i z3y%M}%;tYI-)KNFoDdE;0J~E?dG5_CCz|b{X{uV~DIUIv&3?kTBtoVZ=d>phIC+nM zXxJYP(&7h5;fzgU++G}#;WO)$%uQwKyrvOirM2QWD939gOpyvnxTEq9j(ZaZHKCZtK>~k(QtfyTWa6>DNZ37ebO#V2<4PO7jYo!@~>Qy=O=1H!T zj!;voSN8rpS`}B09vf}Ra!A%3kJhr4@nK@e7pzZ~E`m#TL?USIO^q9yUXVfXlJj(%#lf$&Tl=o##}PESOm*h(<3#C{FxktM18T16bvyNc_PV zCw8n|1ZsrcG3vvKVWJR~7>Y;Dz!_J!h=PLfEQFoVs7%>o26Moo)~GW2w}%m%*|R^m zGkMxqBZB)^cm2j*=B`E2Wt5a!Q-?$@^B^;suQx-)m_+O_QEoJTQ!|6(xzzxli$+q4ri@`l5IjMC-$Wa5F6 z{K^oW=zWV^R7VG?X;7&8wUkl>n^1+iPU}S$2iPb}&@Jw`9TghAQB4v~s8HW}hCK)a zeZos|wpaB@+0t15kG-r@10lQU7EZRKc(K0WG7o@DFI}mBZ4tTQsmR2{uyV=6 z1=2uNk|kW$T4udc@^(6<59vj@3U~8tMeZ11-LWxFL9iY1nUAPjN+Gw7>;x;_`1ye< z+N37P?_1Kl)1_@k7Y)NrykV9kQ|&ukiBr~Ndsd>^RIfEO-a`)EiMpX~)gFY&!}@8n z)Da|pW+PEsRC^jbUl3y4pTPww;;eGrBD$ENx zJd7b!F6;#q=+5!eur1D3WX()`?5_z(14?KXC!vBHvO}kALZ`~vz~w}p++Le=PX7+B z*<9`VUw@PfVKd<7tGo&VRJQ3?1MTEyfd%!)Z1N)-ODE_z(9#=GXO2aUGf|0mFJ@FZ zA%}93;l}@JlKCI!9OaqWv%pi%qYp|f8^|kGx_t7CV@nKX@|)x~3fF5wF44khkC3O+ z2K?NhC)9E{u|5DXo|#B<*F%dQ>~%>Ve>TjLN|xAmq6Su2coCr5>1S&VNI@Y z4!2k-D(n4`AoXqP3yrhsw?l}=BBND)1v6@$^Be&@GtPW1yr8!ckc1W(L*t)PW$S44&$kR15P)}~3m?J`oZVF@d?+k(niY-kW^6-YeHix2;C9ZA!^ zay#7pnZZl=2o9t{KDG;kjn%6)0*sMjkOAItW^gf5kx!wq)dp9-DGtmkskf0KM>25a zlnv@pB`?~?Y3pLe(N;Gg0xN-vn~h;#<81z%Sh&ok#Sp%6jUwXobF`2jQl`Y5;W^!K zeW7l0Nt7BdcU; zgeX|Sq`#GYe{?{8jX*ugONho_@9OywFh+(lQWMlG1$-4%ZpN^evqvHdoYu|8q&=M8 z1z)8&z9ltQqT;9P;{$iM>P6U;+HixK*j9f;IH7!`Cse|_YKa|;(*M}9^gm(%z6n{V zu`ICUHP16FMY_?l-OL%)ifK;ibkCs7yk}sID)T}tl}fyGhwXfY{9++Qpq!PD0qkpx!e_3 zKS6LRxW-I+46NJ?LkI`;{09aiB>}%HJ_UuG^w{Y0f2dXpsHHA-YBw)#J?H7`SF`+b z*uusQ5KXCN{3_A#(fPdDdoFG|q6e=ynxK(d5dG_|Y`^gns!*8JB0lEb?;je1A=TI3 zI!hV+(meyqyR*@r>#VSZ;kOepBm3jbQ={O*pITQ~ zT05Y6-im`!Ttvsx-G_Q@6Vo9_~+ zd|7>hGhzN8^zu*6`1PrRFeVsZ(`P=xD4VET$qQn^iVq8baj7%tRt=Y=dohD!H!BUc zrRq*sX_mbH)H~;%#Kar9`uWL7-Hh6HFjv8()uBCCZK$B_7soT9me4S&hv)${atp)^Jm z7&9V${)S+l#@quu$v1X>0|wT3&%tEQw&=EOfWsX4u8>W+J-*JLRxIX9{?U5#oQ z9K~h$_hin09$`1v*U@=Q@%|GvZ=My;P#E-L#D{;{w|^I;A1^&!`qPFTpw9?o6p7zx zda~$albT?%;Dqqj56iZs@?P@n}@L=?cC8o`mDYrTPk8E6# z+>ej+f;Pir{%UoQ% z(5`8Aw)TNIuBfwB{A5u95th!KkRsf@I)OwvH{QphZ zYY>s&X^Fnkh>@a~zJ{Zpuw$gk=_p#HVCUAk)8EdVQpB}BaJQbtFi7jVOrCw7DHLk7 zZ@CCV6BeWj2kla;vUIG49QSr}omXtrw<}3>ZFkDlnoO4)1-CD@gFV)Nh;^xV|9Xq< zZ<&A-1*>_dXIRA4cZtzckW^6^OTqTjb!VslS7HqrcM(Gz;bM8UwJ-H$OH|zLw)-`r zgdz0y+?tCeqDpwx7)3uH0b|Gd&8QvylC0-{-H7i?t^U5epZ?+Xf4Tr#u~Rk+;os+s zv5r$UAGnJ=r;c>`a;12m-QZD+wEN_)hle}TzgW{sJ*DR;b3L^E59@Xe7<88?)x6*HW#-1 z8%i3H_mpjX4-RBdQjZ#B6OA|vbO)iJNf2e^fAL?n=AIEd6)tdFv5)v&X&|_oN`32! z(BH#6qOWzE-#gIP8aZK4X&u9^!;SN(rJ+c|qp$ZM!ukBuaou;Dah{gQWaBVFgOxCxSnyU|O|61ZY zcGM!Zo1c1w!M3&%-gAoZE?By-V%qDMUShU>r}wXV_F$4=vwWy03sUL(H1zRNX^6fvrDp(+6A{`wbY_CXMFvy+4d!IfX90oh1V1e4)ecB^ zSD?&{_o%RGfT4GtT*UY(tBR_YdC1SW@VA98N!6meZN84?OhA{*V==KKU|!+ukWM9I zoG3VMwsQ&Cv!ZXEd4Hf}mqI&hbRx6@GYYd9M#IpRgL-r8!Cild?zeYIEL9y}se>)M z@sNffVn=({ga)4SQsyv|UAzSu)?y~gio^IZ7GceeJbeU7Bq@nior!;k|0lo0kiDQwop^b;S)qw$DdAaIuhB!g#s`u-c2FnAAAV(;?P^*0`XsJ`d)tBja zy{LiYVmk|Mko1Kg_RFiDOO(A2>@mWEaPs)Fb0sAS@kgZ!n95L;n3VYI`)duf=Q3b? z79HD4#z03rT#7%FY3(u`VW=B<^JV1yaXnkMjfSlbT)M)lW<4_`{rfy=nP2 z#pwXM+`5MPw6+?5jJIB4F+;k})4#*FVW^8lUM=OxlA53=0(`Ys+Qy^c5h^l%lVOOW zwqoz^oqzVO4~}-LNA{yM6v z{aqWz1ql&p0TB>ULP_cFZs`W;4(VDTQqoBGBBa-%bI~o`UDDmXsCRmvy}!TTIqw*I z?DP2kC5$;8y4IYZJFe@#uPgh2%5lL3jXJe!5($lXIVk$G$J_veRTm&Lx)$u%c1BHD z$pueM(8s!5JU0aNik#8(*IL|5KYOsrcVUm#;a}a^-Kl1r#_u`pThY?J# zB*!RZCc7r4)F&7xYwoc#sUhY4)^73mMz-;7cfY)s#$e)LL4@O4GiR43Q)a5T`rY5u zj370xx%(~@*v_yE%#lg(=g{+cOXs;euvZWL5b1*e8#&*gXhMS~L9VsVZLt*o^wl55 z%ZFCt*TmASYzY}jq4rWvxH*K^y%|F>ONCyDMeDJ*!RX1UJqk4<7}a(8v$5~;jj9>8 zOx6{sWuJ5LA`;{VkwYrH~=dLDL2a(i|##zE)4 zdVVyUC1x;FZo;g)9a<7`urzg`5BWj4w0aT{T*CX14y8`$zJC$(hh^RV+u;FBqCP}v zvl#mK-IgL6J5lR*`6&&81SzE2;*siV<>TP3g2yJJ`z?lvn3ggL4fqU=M?KHi*T!5h zQN2wiM~fJ$XKbPN(+~9`^~JTu9#_|gE>A!=E+r28tSR5)?A;k8=am+I+_d}{VAO%} zIlsYqn$~H|C_q;nY%ojDc+t#?OIW+Pcs6>@T^^yS{snE1s}z5x2wHM+y@jh5_xQBY z%St|@C*{{jfG4hckyht#MVef!q0Sg#nA-vZ{sJDa1Q$ION(<*Iw?pnScpR(!fF6?y$;N4A}?b|%^J4FGp*77SGz8_iPz%#tjX#q&F}D) z7i#9Yu8ng+Lx8BEm%@rCEn{c$gLj9kA+eL!`<+X3lA!C1itqo+U7!EfTtfHXd(d&G`n?%{~N{lKZ>S*^XsB6 z5=_fI2(ss==J^f(?QnwA3`eozvo?wyc|i^f^)GnN#O8xX{U~h~b(M9Fi%&RoE}cR^ zEqUzHQ{fE!$33k*>j$41{msCdv1fx#A5Gh+8Sxd7bn?BBojwJrMInnBwIV#I!~=-d z^pAQyuQT_tcSmBCPYWDH&901L&2GZ+AhGhFHMhcDsDl^V~-X^D7-HqHa!;pMN;8H)u#u z^xAh6OY06{v>%yBA{oQzS4_-%c8{kB<7H#|w*8dW=lgSfdrg}jazjiGXJ1Oy9@2Xr zfLb$mcm1+t3v8i7)(V{Hk`lG za(l?{(oD}~0@p(t8LyH>D5jOw(!`zWe~4bXK1Pt59o3R9qeGIWNwRIDk!VpHUwv1Lj(ip@5oTQ8Wr)!4 z&h@<>z_fn+ym|FOGWx5Ult*?b@F4sZe7slJ;!CFE!qVJ)E!E*A5lH=zH}Sq|{^ckM zPf4uWWM$><*xfIMcU~GbZ?lI+jNHSyJwBie{Me;ZG%30%EV6va z3g{~-OpPH*D1X+`Z(dm!S$86n+r=-V@IFA z=JA6!o;-KYF2*0tjE=qHd|s@|FMX>Wy5!TsJNPoeyW5l>lio;H1I}FYNBdb)!G&F!9cj{J)jG|D9y`H<$LQ zhX;E3Bp*>+WQYZyk-d{*mt-!FC13N>q|71cc`>R(?*6#|FuX)+fCaYsQaaQ?>U02o zA)|?-O9ZO$>IEi@JQH3~1>1=p<#h^1-BdAUUiJ-7;ZR#|Bub}b{ zO`{cGh}Joqtm})MP<9-Q8IiwZD@eWn&K~apVa4bhnK5?A?hmINBKSpJx3ix>;3j-y zNNeu9ZL{W>Y5AqaSZ+?buiRfp*_;z;58(3}>h9Tk1{Ha*`$(dCuJh=*JnxLee9T3g zF<4V2Hs$|KQ2&Q}Hln^L%s$1Bf>7Wwf3r`DQxC)O;|Nh^PxH^I(_|i?idWG(f#VW5 zi(DaE#s-dDPS%PRHLy***LUx0zJj*HQQS}rf*k?Sn*d4BxF7hI!p?pUJ*;~+alGg4x7v>6CaP{maVFG*W=erUjrh?so?N?Gx9 z(w3@~3uTYN+gLq`t1Puj)3Yu^Vf_2uqC+|hqvLzA&s+5vw@3He#MtD6O)q?r{GPeG z%>EbuAHp-1Z-?jgXyYLnIxZQ^QpUC68$gEs|Q8u$(OqjS&urnfM|r?KA5 zc%OhWm&mGd>Hn)@Y-xC1I>A2I!#u=yI^LjR+oUZrD0veab(@0{nNOXTmRCkL)cL{o zj>e_QuM73fpFA614usqI)o`9aWfnZhNPp6ao3N-5trsvnMbM`I4hDM8&{2A$JKa= zup0CKe4s~YtSE?50kS*-HdB)&13T_1sU>Q`edFeT_*^!y5C{4wm(1lOCL>CvwUb-? zP`g8Wf=6r*OiUO*&^E+atDV$gn`XW#|FZB*S8-GsGhh^zA?8N3eve5}s zHBYro9Z#sRq1$gU=f<#TOy~tsWdc{b+I04w2vxLk2=0ZF!5aRGIT@d^1szl!a^{Y- zn%S*3VFP`V)S;zff7Zqfe?wy(QlBpON~X%hRfbdsaD>FPVZ+nQ&iNk65lL%;-&3^T zo2qeM4_>b3)^#RWk9;c|xS#C4HtUX4*?Xe(B^DMET`GMg(;y!fS4Ht|WGX~+E3YFb zn6PhIC8gwye7UDIAg(IO4od(lSc|)Hdc(Dy|1T<$)fmwuLQUYs{%!T+u|ah{o4cjL zTVFJKE)L~tasi%8@jv@$A6*gU&T|X}aO|+&`clvS!gI|>^EH6r&IYYGqfGXJ^;a{;IQHBKxl0j#sD*e&kZ$=RLodUAm2<$NV^9 z`}{?%)F0N(FVR@V+)-~wn6X;hf=;lAityiz)3X?dL_TG|Qjyz4(H-NsS#dP7oL{^p zWIu8Txg5m_SP;AQCH}g^X{C{NI&&OGxk4g?oPF&SJ?w)h3kejzrO|k--vg%v<-g5^ zU^tp!VV{E%rxP&k{;Gn8-#yt%dNHWVMFtH&9iA-(0>p}ahnLDuGWQQ zFYgsKI=hNmTcV2C*Uoo=V`^sKu-?81RonRVbvz9_l<7<&EO9R#bPZE5ZD|}R!N_mNL!)>2Rz+SDN77| zp<`KAco719cJlX$3I8g1e@i#jy&S|;wTu)70;v#5e8ZHOdnafg^KU-DKitEHW4^P? zW1gYn9_4`5goPfX;WS{QCOjUlnDn*2W5Y)NAtFU$7Ac8mX^A&>?k4=FGTPn8%*T9W z)JO)8A2fVLTH}}FNyilsT(9o22CwMwbW*8H9SOh1EBEcis=E z=r=a}Ws)J-P8}s6a4y?%UAS4GN#c!5eCt;Jqh#nk=rj)!aU%a`2kL_W_K}o!<{Kp? zf;NE!#=9>~UYSMs$;@gC-(=g2O_QF=3_pRDz7>~sNYFhI5HM=3y>}SNv+X#N>TMBl zh>t!*<_|_zznY-ob{fX&XJ#KmgKHprPYh{oQ2>W3Cf`YldO}OF7p}3 zN=R#}_)5aGN(zFpgcDJy#nW;SbF~Ng;lFB%b?Y|{@>kWKPh6i*9>SInmQkCJdE+vs z>3-2YJQ21aJ|qD-hIVS`kuiq#F}HSMRfc)L$v=(ub|D+l?;>p`Tl2dNl}bIpCf$oA z{5!f+A(rjrSkGb#dLr&lneOw}oQ|6&z5F{X|3kI;PnQH&sfTr>#eZ?pMN&;u$sIi{ z%SE7^tQm(M61`==aL&rbbgxm#_@Zjjw)wg(k!Q8BKkE3X? zivvzYiLT8O6OZG5YLi1j_Z_im9N*a{ErToptuMepfW_OsX+NgN%O#;xSgmbY(hSs^ zltyqvV7gjyi<*v6)3pD*=;*KF$G1yJkk-ba#00bLSIz0%iZpz=p~`X0dNrd(_YX0Y zap{b@Miod8m$%l2uJMx4(o%1&GimThuK2DlEzS0BZvdR;;N$1rMpvp@kqDhdo5uFh z;E!)@`A$2`T|Jv|e!rked6Jx#9x09e^!U8xn)1Fdpz+{L8F;5Hq5ch~hist~A8W!G zR1}X^5DwRqR%v)^le5|#RZGpXM)1|(1a#OQ=h)r!|2tq9U_m%ZII6+D;4=^(-?6L* zV*FWqtNCW`OrU}<&mWS@`Eh@BQ2n^LLH6qqg&Q2RO1E~-1mov7{7T9JN|U=XwarPL z%r4WFY*o|v?X8z)jGX^Nw497x-P-zP{xrrGoi>FthE<&Lae!}~4hLmw}^s%jmomsx&c{$X8d zNj*%`!(K7k!@8`yl0`x?(BjMa6*pV=PzF86X&|kJCd*aVC0@ZLdF|e1PSSPLW?Qkc zy{n(VW;p$=Kvf1<`LvKr0kq{QrHHTHSgzK}?uSk@+^e-OOj4kl19vOadG&Vsbv$!n zUi~<}HTJ3WUES3*2G9sNI+9&MWS7*k{_3}U0~G{m4C5DaNxu+$x`Sz@D9HR-j2)gv zW5uG38>P%xOG@^a#wiwVs<1q;ohpaTt;ig{x3?s4pB3G4~*2lA!&-tZv( zQVC5Mp(h~6eH8?H+s(+qM-`MrhW5MoG{pEjwGV4N*&-ss5^vt$cEs|-!OEC8JROojKC2G$Aw;nto~(3!ZG~%IBv~qiT=w2)S}#?7R07g0 z%Wmf!>x!G`iImK4vjg~9c>)sHy9144`Le*0q#*V%3-0E-!K&1A`P0?mmrfB(KSTo)$)2!E$Way$8<@mHX8mT4V#`(t7P-4f8Z7AWa%dUf=J}56xYNoj z>EcVDL095cyF!-BIXz$_S-sjXQzoFfC9Gl6S!8`5kr^s(1F=I1YX(fetX)mtpTf)Z z+XU(l&$!F=)ma>v8IUfmQRX?&*BlUmGbm zb!t#8e3XGirUkjgBflGfqn!7{!n6lguW7?l5(ZOjcXqj5_TI^0l5h^|I!{cTI=B}D zjoAk>oEG=5eS>564IV*hQ_BWMK)DP}J2YU&_$x{NQ>yz1CZ@$pxP{tg+1bEneepfR zVC#s6oa$3YYg@h7IXtu!yKD5hvpIcJa{3#&7rJ`->BB+PYPr|ihB^3#w}GJu#+=9w z7e9#ZYB^Yq(_SdpbUp)OnvNFLKu<(4~pt^n1!uz}8W`I466s%5JIEm#@|vP{lhKSN0?f7+@j0umS`^ z?`D%R+Su(D`)!)8H}1R3gKu2MYiy5xT@rUR)uI8*yM~BLWup-@(bznXY+B$|nm0H8 z1G)bn;6#>Gkv_ogiVkj(E?E8xVeB2fRXd&kZYjkpNo}o1ekw>v6lz(j@AwproE$Xr zjHk!5#6N2 zRi~>aavCt5>SHK$ytTxI5LjiGsGT#VPIa>g${DuTUMSy}f+0&?nHl>XhN}Aoaf7_| z%O;*Ty^OOkXRDfr`}=>~kg^{WvAgK18qQWyp@^N-P@1d$Qf2NifE`hY@u`}DcY>&e@)$o~LZ z{{zndx4-&c2YykR9X(6_h=GX0h!=WZ^C`zrIsZ78EItvJBA+<(yP@jqt@Sf>B!@mi z@wIc7fYedM>zNnrapkzLbgFlsKOx%%Q}enR-qBqT`HQk;)27dV@RF9WiYHHduiV-` ziAF36=||%hEQm;YM@{s6Dhq87uQWX1iu>En^V(-1_Qo^SMAj&%w_tvDI4AV zo1GJRL-+^l3HlK-RpujY^v$;?w)Okfancf!vuy#r+JKHq8P92dg&`gBI@(^tX>n3( zCxLc9w0Y6PcGsrbrKlKI7}lEZqGboho}$L%Dd7er8q#;i3$jy~O$vztskH{J_+8)_ z_Xi=_%g=G`U`cZACcDv^nK=jsvJA^}SGh#YA-s3weS50y!{5;*@rRIEJn$V0M?_J* zyH-=W7XoFLbmb9}PcIo`wpD2xGQD9kHNm86DN!>O`Pfu0%uFb21t9s`&Q5%a!EmX7@KVDat`Ag>qwIN+wmJ&Q>7cU`} zo+Xe>0?*cUU56s$u~T8r>i3RCnvi1|-LYIbM<4(?f^HVqE@sU1FPDSJx}ax!Gs?Ji zS$^TkXtzi0fMT5)*tyXYys_wR_A#|)Qp>9If^p<(r>G>U^jzl4W-`SGFwW0Z@b&5V zplX>%`pRv8YK$uUl!$>J^N&I#-4Rl99<8KQ7efninq6)JIH*6Ii<3Vdpd?}3Xy2bpE{5p1)C~Af1658Ta8O3ohxUl zW7qJRg}zu^)ydFmo+-l^8*Pe&Ki#e!7pUO_LnMy%_)xw$0$#Kt6#ktzNxopTgcEWT zGw{?*^)}~_#ca?Ckmd|j_ytoev@;M0BJ)lp=CuDb19je=oFH`?7P6f&NpKFOEB^*K z=w{uV^p(s5@;%8?YSQR?)pNGCq4ey8Q|D7lznbphR<0*K)b+)>>c=l_L|646Jm$|2 zmjvY7QwKPf`b#RpF4;c6m56XEX*enL+{z3xl&$N^1#%SNIzwFp==AWY;NBc}lbH+v z4lv!I+hgkW+=-M2K$goXlJ}&Pg6<2>#RvBj;}M05+LPX*`AQ4r1%~>)l}SxA(jZG+ zKu*279*E)0o)(J@NpnEBSwJDS{uQrbh&Bb$WZ^JqL%Qst2G{Z&)V7BcUxKI>xq*Kt z=w{!}hju~Ru5kk6)ol}o$=;qKe z-0|#5?!*JQ=dha#H+7&V$+5mryz}wM5CeyvY9hkFX_^1wo^XFbNBV*_*Ihi%wWrl+ z%t;M+7UIF@^!wt(fs_VMPT45Ybo*6nG{dNOkute=QUt#@L9^M5zzS`>0;sr!XHN-; z6l%Y=en<|+=uuw|W?^)c$ry}t{!t(--D$OcW_|rK-$Du%EqTpRY;v1K6&u>-Bm<9U$n$6_GsxjAk8Gg^(S_5LIACrvQck)Hh6I zbQjZ2AkP}WECdETp9NiyZSZLO`C`{49&RTclf{Dblrv-VZ8;>ybfjqN~JSX{e66WJ8{~!|5g`nzhRe)uzkEZ5XOPr#d~?+%4su{bDcI z_K;~sMLpx-AFd~wCn6>9$aH!;x>>zoB#{Wk$SyH5nP-O(DBlLWuQjuNj@^pAHaE&f zi`R+D(KSk7b0aL%)$aj177hJGMvlkIEc;P^ILKE(^ao@IRh8^xA!D#sVyN?1`OJxt z`KZAWRTUAnZ@Wkfu}$DYMHzl)9&E9>$eD!}mfqT)T#T%H0r+8;_ZmS<)d<>b2K2DkbIOoTf+$hqoN18BqdRs;Xj)m+)6Xm^xnEkPy6tD!}K6L8tEx4!zxk8q)* zgwfEGrZcxX7jA&XLkb-x-Strn&e|c z>K)PN6pK`a^xE!y-Mt>y;TsoVO^FTTb0ea{UlI5I@V$q5pkBZ8P5yI3Y=cgF8RoQiT^`n!29)UK;@qq zN$=%_zGTy}T9L>P`uQ!?B5?=%Uw-1Vh25yz-v-54S-(!8wVJ_9ooU{XlRIX4tEkeC z(Uvi{dOBx8=)abu0>ww@7B@0{I7*Cq>G*jE z_AL}eJC!L&anSWqQ2=9wyfnayeAPhL|JLnPHK`tM%)9Lg4kVn;!0Bpd#_07r>B;*n zus>TBYQq}AwGmks=?`rJ*+m<_&n=8rW7{g^RObV@#Jbd4?KU|4aTN5 z4=3RoJwE^?Q!pmAM3IXawh?%Ny)Tk@uGf^Ur`Kb8t)k|PY232r!GTcNDLmnJnW+z*&e?ZoRi z^t|w1bl>EmC?|JEUvew~!ijw~q-ED(E}qtt53ofU~Nqg`5lTANNLHm4BtqKt-i zw6(;_(3D;8Mg!qqiI}a8^9^=rALQcY;9Wab427RlTs|;~2AhOd&Enw}N0q8N>3;5v zi}v>~13-{E0(!0I0d-gcw;!V;M*ZBrlTF0$2@5OT!-0Yl)D}(kuF865bh)qC3ID^^ zyz|rodu*AcmvGi|hCMr=_UH{8l0wCAkBS|sISj{)YuxhykQS(>VXNVIz9OYJCt$8t zwB>W$Nyvg`#{Pvymr%z((|JLf*4ZV0Sam;nZ0NZF%eEO{`ph3K8?R3Yo~fGB-7K!# z(9#dLQMeqDAX^uiruMy#Zn?g9m8OWzfnw503&?su}KozM$>lMluJ5Ho(daGN}Q+ltxRAs-^_j*!1gxw{r{c8X`27Uw=PbZu@TtY~$%*hL?ui9bmX!X*r)_*R&1bKAb%mF#zP#Y{K@DufKQ`?6a6mNf506 zX{y29@c|H8hnBX5*iM%kP=2=PPW8^+pQ~}r-wUvsgd|}OX&$`fJnD21Ig4rWl6xej zCZ-C^2X8G$rN$|=eZ?}mF7kP}Z#EC0pHqO7RGn4?3p`qfprab>%?W92e32a#vFSV= zCHUjPp)(|}Q39pFs1-lYopRe!Hyll)u}RNLVrWAi-B(QnImMG*H`iACH_wrx2K{ME zz-JZkLK^K@cc8s)ELEJ#Fr{2>HL=XHx`XYi%d|bsX!j^AIct>ZwWYX;B$Jp%8O=F? z=SXRIdwcco-OC9u#E{C%oyqxFr0!#Cs{tGma>^5hZ-E$VSIInDnmGmw@tUSdwV8n3 zShoweyZMM1p>tl^Bu|8@rPJYJ;|B|?u4hmuRSR3)?%8S^;yf?bN(Z()#-^(_=Yx68 zm9ZfLUJOc zSb=MXiMHOn_2|>xD+DycP;E(W<`io>Borp}_S)tQUl~=rl$TLuRC%Q;IWg zL%Sk~3A20mWB5Wx!gU?~APISHKIa;0DT`cjXGePtox#~aYhIQ;o;Ef%zU;d`*GWB3 zXl*c)QCA0W5JEd#bYF(jSDWj$ZN95E>H8r)y*0iVD%u@EO1OZ|*Z^d(Dkg`upZ&2! zET)_k^}s1nw{7`?V0*STl5`Anp%X%kgXGH7gXfVKg7K)ken70mXYfJpI6 zC#M7YhX3y7GSV@m%LfgdR&;$@u_yEbQ&MVj5^vsaj@s_VQDyM+HsziEN>VM=A7N5a zE%R@I;xBrQq&doD;u`>vR<-y~dI-Pz=%K+)={Y_Xi$gRT&MHi`ffU7s?6V`iOZe>O zr>Oeb9SSAmQ>7}K51K4=WO>Nv{-MUCV!C4zhWHoZX~qn@8#XkOu4FWJ0SUFrhfZcr zass`b;@Fkm_#l}J<`jfqn=35Uv^Va%n8{ztus#rz&26k(?*)qQ&Aq|+2`H%+M8Ec@ zmrG*q1dti;`31n}0)Gy$cW|}?v@`cOVo{=_xSe+>=C)_6tU7JzYvvt3-vZ=F#D3sp zA^`4d8{lwS6-dK8j2!Jg@gjY8;bUN`5@l{X!_368!oquDd?KI@< z^$|O$Rbj>35-DjfCS##Ox&%@sZ|6=pu4KuA2~Vi2e1Zi9w#)$T4kxn`KLPSCnK^bW z;ry$M_>@A7x0XUqv~%xP-`J-T4YnNUek{Wqif5l^-n`Uh-Q8Cn=3nYpLim3t^J|0cw?t8dXmn4IqG|(vKpfOX z0DWQa&(+J%$5B@?mm1IFXbk``ue3mPUA^ovDO4W{&8qB*{Fbp zE|D)vM^-rTGtYMuHO~FL@z%&QF_!UTQ|GTElM3zBHh;N0J!3zm&cg~nBg|DD4Pw4W zXILC&`dbTtV?>oClNpq)&q*YMr7e+KDQ$nWc)f_ZpZgPH$f*GGHVdDPug^`zRSswM@r7N^w&`mYO66M+-A=wQtW!;iCV@DQ43h(m)U5; zz_4?K7fX2sd9qw1STi6B~#*kSJnpS5a&wGqi17H08Po#mnA(0w65Qe0rO0jL3^LO zUHx@2&i?xK_>=`RFlgg904-$=fYr{r0G>fVkMWY#Je^9E-1isYGvSh;e^2-@!{$tS z8|wKOg?B3ulXU0)ve}?my@YKZXjbBxtZ{op0O@b;WQ+^=)vCh$g6q;MChyUsnYYmu zllnd&gPYT#n0YNL==N;QA@-$!^>k^pe?6zha3XL{fi~BL&-23Rx4eEn*l}>?cl~gX z=DK+75>~QUovH1<9=F%QtqvyDymlGkbYoKXqrZmEc$mGJ*!VyuNx65z-28;$o| zDQtbv)naUq3YnDLzRCr5fcDi%8#-M_K z3r(s1kV3^SmE5~Wd}?nXKMc4KTS{sPxMeBQNRLLB8)Iuf!?J{ppa^+}NW) zZ;cyBB8FIosCVF*Z9{X6@5cJ!@>=5DZcp%fXQr!A3^!XRvc%A9ZcqBub+!R;BK}8S zfpQ)}*WKCJ&;fu`x!%DSD0=kVM%*V<)#FNT{n7BcZq^F;-7j?xeSlQZP_mrP>Ts4MJqUaEt1aC3Av zKff}?HMy@{l1cpcocIgICEJ<>7s|es^&Y^tJfkD>sfD&(Mb*{!FV#T8k+}h0L5CP> z1%}`}Kco$6#Q53?jr5-AqBXCx&F0xX_gRXoRUva9tTMlm`^8UppVnn<>0Z|ki3?>o z7pWcm^22htx&CpU4tRKcRih_vE;u}oZaH65R;VYwxd1prkX|2a7eJXl$JUro*KFL% zI;FJ0^hhq`}aSb#tSMNKOwJ@UQhELR>&}U+?HS=w2QL7$^exoC+aG z^k;}FQb^#P=q+_khM{F^;nZ0L!Rc4QO6*g0@hNz@QrcP0Q`E|*zge4d4o#ZIh)a0g z3ALF?q|j6$C?m9w&TtJkW&0b|E0s+GDBgt)Zn@gGOB>DXkhsPhlXD^`{pkS7b!!dN zVxopUjf1uq(G`I4#~}cdQMz{ENWhd8_UW4(9DhmR=K%F@Cy;3xK3I2!5gnjC7_K9r zlB{{(UvJ9x1B*b0WS_;9@`wOWD2$^0g<7NE=iGcSMICo0w z^mL=1^%t|d^UYrCk-t}@7DiG0u=uZ9NCAXcDYK9wBg9CaUs=)!L~)AoikI_rX1ZK5 z>i00gJX1G`a_z&eU2Q7{31_MC0rxJ%2DcLU&N2K2;kReh+RN^i-h5b~u#RPt@hj`4 zTT9}fMh?WM2)@b+Ts{rfe*UtE0vP5WXijoaBFh|DG5^D>P?_rYgzmq6D^ zk@)xYS-$Y2xc!Lx)$a#>t$y=>{m)MIdCzqmZgt3-y(y&0L&5cM>Ci#{8ob`ecvGQm zUDg>QysiBOO~-Q}&IJ5w$&ur{F>{X-_1~cR|KpwwQeP@sNNw~G;&B0+B#KZVhJ&zl z{l?(*9(#L-tUnqRENMAbFlVMv>A9lVYqnIo_(ICKsw1VU$yn(DnzX2wkVXIW?c_L3 zG1zl&d$o`hF2~%P zvlxYihd_)N7t>5;Qm_9a2!N7hP@U@J6^{jYN3*TkGas^}gqrpl?#lfN( zZm^Y~>2BByrmSkTus6OWzUNcgQw!%cJhw}7vzy`@kkB97=!~!qT_2GpF1!_M+{7WY zjPgmxA$~4(T+(CLzU)Y@!Mj!P-KJxRSA*7*-*9a>@u^Mcu$@G>!-CqrCR3o_zdytO zxziCW=r}Nbf}Tl&%fKSXiuPn%#y);pCpsYop9%#)X@oIfY~n1yh{uxD38O{W%R8R0*Vhp6(#j8s@+(rw(|FN>wPJxgdPP^J~X^zhPo^^kKjI!IovaODeG5_6ZXE++NK=Ch853%5}jZI=(hT-IXv< zqVTvLQ~DIzx$m$EBl_^}JgMnp;7M4xZoFLFJZRcnEMGlcZPD{QShlUJJJh)*LSnqN zUYb7?4_fQTQ{Z>@7X4{f_}G_V;O-$@dEIiN+$8P^=3j&N|1gF2|GLzVj(Bea&Y~l3 zuB^SI*N}s?7Ipm`Kw~E&@NsGHvFefJQOZ;i9cBaJf58J1Z$bVkt5${z{t`mcwYX$^Hxcw#bgzG~3qc2fu93l-`_Sg=E}0{@{D4saZe+r);h3HO}to?`ow^3{(DlvA}?(n*)fKU zbxYT3^!H@8U>e#F0KXDQxpL$NrFS)vepx0NBKy|ko=-oLe;UE*ixk^}vRlG2g~;e_rN)`@`^)Cs#fZ z0+Ys1=frlRAEL{#f+vb2;|wZr3zicDj?7gFU9UbwAFrKJzN5qraxSz)0y#NYW*#&+AyG%H*O=UcN4){Ql0UF@+GVA0JV2`sIgTLaxBXi6}^A zq%Cygzc$xCxuE^5OXLwa-7L5`e-_80xB}Im89Zp>v}>g*oi+@u>wX0?FIK(m8ROgB zV_5+5N}6kh0wOw{ujfINV>+cZ(Hh&N#scsv^PKK&E>7myXdoRl9yWy#!?sprXd@h> z{`cL=r^Vkqj254ijM!BOmeK*aMrC^fOhgQADOkiCJjzg37+OF6y@jMwi5F`v+L{M!$<8yCb}gi+)nl!IzBeKc}(8?Z|p~V8W(6w8njMC zukK+hy+sR-L(LzV#ZmwF5I{=oV-aeiQQo2HB^8Tg%LMN>Zm1e0I1hjY`h}9i;9S2agydJ_5?~wXg&_@ zSXmSp&uDsQ9k7?7JrUsO&O>{pqs~xWx1MT4chpt1oOJF0M`V9TSd4eJZ#1||?IlXV zTU?yaTFx5>=F8I*;2rZ5A4=3fBY>wrh1uCIwzVq?1(c;U1 zcfjgisUXguEAZcLb=)n*;(H>oASe@)N^>7$9&5T8rQ%P_*Lhx02u zz?^W%8943bADTcnISWvZrM2H-JYdzrEPH{h$Zw zPV2pjsHS-T1k0Z=>a#(F&*zz?QMJGo`VleM_d%(dFmLR_Eb!np8V|NE1%BL)r+N=c znYK=AF3f!6oJC3r{v)YQa{lX_^*H@-cj30o_G@GYAhtg($C`=SnRDD?d5hwA|CCDW zJh1+W|7-2Ma_=`=+TO6i!cU+m2rgv5y;OUNj&+@x7{*HR5sdT^`U_|_3KXO)f6LZ< z5g@#C-^VgfHOZL-2fc4jn;V%0x)i%o@6ux(YBSvY$G#PVybEkL$tv-5$ssgabNi(+ zDw8xXIhI_P!d>e3s`Ds(&l`{7g;HC)N>k)e$%NwuumB`Y zZvPj;I;^sY_i_q9sFr&*-KF{?f6&i9xlmhpUt~*6z=k%kt0e#p)fAetR?`onmxUe> zUY>DJCh$prI$Aq(j)rPOz{xQ&(b0vz}b!L!N;ChPO`(84ZIO=3G8%HAAW%k03(8HSF>-h!bd#+O`vXzoy$0nalZ8MwPJlFG*NTA@v)x zy9)(*sVb~=O+Y*Vx<%+?fZ%Y{RnzQ*0{zf$yto#Cxdt(=?emF&aTX5u-dHV@4Nlu0 z$^?5pk2CuPb?u2NJ#+F);IG$43fy;qfQen(-q-?1hkOUB(|@2cWDI>#X~l3zGYDDDhIy1 zL-SibEr(#rwaxu@a*+jUu=mc#g~Y%24*wS`6@t!){1)hTBsVgEMvpY(L??P@KIZp| z?SuptM*5;hO5Wq7*78eck^!9#uxk0?nh#~=Ri#3TL2n_O=O%nU$|)05{%?rBbID1c zG36>GSLcGY2dOi*@uZpK$;SPmq5|OaKv8IA@qrqjfnXR^`9~xdEZrwLx?34ESF$Z( zXT8Pjet$t?!0L4m%TnrLFuy%pJy{W3!qQ-ojagP%n#}xbslm5PP>|O8I&D^8)_SZA z%tyWYU$9+|d(p8=aS91N+PL&5U^=$=1-$tIqli<_0x-;jtI5u`4Yj}Ie{T+~PSEzm zh55*Ftv z@KTq@lF}||fEU)c9j*$LG%GSdIv(mtt6f11501f0Bty+dSv&`Ba48pl4T ztxxSE7ySFOu6@v&PVYK#fFNDSA=KXj=9r0Vq7-;Tn@b$##*52z#|6v#g2--bjJNW$Bb@;}!!lUlP@|1Hh~%#O?eBqPieQlB ze4!JF$1?V2s`-`cRg>78srd#1O=Fyz*}@_<-IanoaMHd%J)Y0Q9hT1F*pSnd9w?{o zDSb4|Wzj<7a?9u;WOaXzkseJyZd%v%F1&bYpr(tfiZ$bMP`d=ku)WmLy70W_+UBL3 z$U=wHoy*qMNWMKafO1^+K4K}mJ9N3|Nq)PYRD2A%Trjgs*klKWpKFB8pdYSoD-`NX z5_EGvVhv6$xs8!}On*1&?!&lUZStId$uCqmf8N%TFkjZ4h8j| ztVMYIYOucO!UxFg{|{$x9t~yx|Bv65QVGS4BD5<@D%rP$Y#}jrCQ)``?AzQD%9>=! zzGNLcV`s8w-;HhT+Zbc)GiLo=-pl9w&i9Y+`SkrSr;f^8uj}=EtWPSQ*6nmQ{mxWl z9SsrQV+v^VC#qb$H11>gtTgTtKWm&j4LuT$Dxt2|&mJOYaBc?X?wWOr8>L77gcFWg z3gdKnSwK`vYM0KleKGVqW6R+A0R2C|jec#h>^Lue_wJU6{j>~zaAcuo$723?0v|sr z)^Nd>QL_Bi(Ba3H@PTWm+&-{jW*p#8blz$r?G(SL8zU!TI`nw)ZZ(EN-b;53->Y+c z0S!G$ZhzJfZc&2GJ<|Jr5O?8oeQv29%T&HS=4Y>K|8m3m}{C1xo}KFE5(@v=gq{ADbTareep z&~Q}Oi&Gzy9UjpoiNaETj{uxw63U)T*xjC5PxAzLD8cWEkNrbn8m}h<>9=qLlIumS z?LV{5e!V}G)62gdpG>N^FKKS&yM{s!NaD#^LrMN-4Q?(Jr}~y+_(W;%J<-*UuZb1o z@g~2K_<1OfN$%i09*}ZY+ti7M*}zA3HvrozfMF8htz+j?%0XC2Hf|$3y629gW|~Zg!F`jGCG%(ra+wsLBesm<0m4`OzU8>o9LBj%#J4yH z>?en*y-$_)^w9PHxYiIfchLQXfx}U9*~F!TZFT+r@=JG*sXD*culWT>+i^+QYE0zB+Vbad-?47M;`GwC5n!P?cRWQYC0F3WVCQW!@xUUa4_V%L) zrQ~tuSiMKt$s3s0w*I=p6A939^N^1j;{Qr@?MWrx2aKfRPw$@l)*QLhe$G4YYq?cZ zk?zwBy2v-mk|nHepeIFFmag0$4I_RXb(w;76mZS36)!MR%Fh2c1NfBXGEI5wi! zMEN>0!p0bpU=v8IegHx>OJaM{a@L*}P`76Fv9a@n^`Y)h_cEzzRg(6rPrUsqJU+ir z-Xuq+Ze@tiP06=fEY(bMgd3q@^6+~OtN8Ht!s43g5&wh5H#K%OPREPhb1I;8;SlJ( zmwTY7&5CO>qdOMqs##`cYvY{0zi{|cPM_h9gbDJ#4yccQtA-W`YMY?+OZ`x);SC_P z_!FnB+14qW1_BL$c~CE+o0-RL=#;lXt~_8x^Xy86_7X-?Lv~0vns}>Bs%*B+1JJ=q zEY+83Lv3*|gPZ8T$B#B$u}#P{5LDa@f?{-!DU$R!aX$sk1+;OyuPjzlq}jj3s#Y{n z>w7>I+Xz}q7-_Td?RwaOFkv8-W~Vr>yz3DNLdxsIEFHZ1Ph?$JgL5k@f8H<0@w_ z9mkG@YU3{^v)v!5aUYv710&nMRi}Yj4K|XTs-Ap`M5i23SG{)x7d6)C09S{>dZBWJ zP;P^Y@Nh!fOLaF*@K4Rl{F|yqF7Js_29}NiRh$oD8m9lpOb)q{S17-+qCK5uHpYQS zjlJ2)+sl$%8F~I}&GfVL5!})xn_4{nwR;SEptEZ?-ed-|e^U~;^K!gvJey>n{L2;^qQB0|1Z=$O)gYj`p{dbyqyIEBi*n?cQ#WtAx8M&F5ZTi z+ba5F?Raq(=m?VA^SgH1^Xn{EF~t44;SjE$3HNQ8IS)#b#T<>lATr5v_oos)Q`|ez zKzij!Suwa-ptL9@@sk=o@n>JXDQUaXvtvgs_Ff%_-@8U)^VhO3?V5LX#=C;8#ti&U zn_~2fFRp&w$%Ur#Uyl#7A^5+-PFpQA!h&n(o$77J6Qj7L^^00V3cYC*oG-}z>i@vq z|Mf58P5?&Lcb2)iyiY}i@pxDI1t7= z-P?2O6@;>-8;BMUu1?*a5c4kx2{gB(?Fk=RI=fgFL>8XkzT5(J?VfATNttiHdV}L8^RUO8UGAcYl*093rbDbwX4RtNW306INsNePuKGN(2daIaHtoYxUeq`V? z*8pOra7vyXRz?(YXkRHI0cv>sYJrD~CD5WR1ccH8=t}?%5Hsdt4GJG_odHgscc>DK z*a#R1G3T0hUiOa%p76_nTOOJ}DD;_~rR$u`5VYDo0UU5VrF9DfIZii&+o`ytuJW6p z0%n9N&ET*S%<6JFbh{u4c71g{9<%%-&5Il(Styo(oO7t$RJ*|&ATf5+1=d{JmF`to zxT0_381v;AgZ0!y^-@XL*dMwDl|B53!X!h_WzCKY_Kb^og*s~!>r{9zBO4LHEm~;D zg6iY~Y4fXxmsSo)p`Fx7Q`YIiyZr^0WICC*%H< zL*zAZb7k*<^qScZxqxbWwXMxr?~cC4EG;;EXTR^y^Zsk!fv$=@HeMxV+{8YOt|Ce) zyafM+OY~mrhn`Lg0{QM^s<};e$@v#%7mh5Ii608ti#iiQ(ItftmoB=>jV#`xkfjof z>2DV9H!mxGi7Qx(k@blt=T(1e{+#1viy}*nFca%n%d{q;WMn~;$-~ObWcSTC9TciTrf7X6n&-Qx9*)xTJXWP>U?7kM*_YYD(o`5&9io(!W(# zORju?t=!Ix^};z%3ihaQQT4jS5iP2OQ@r66kjSW$Mz^!R_ar*>1Ld1(+n?K*lZ)%d z@7?r1SUkn7#{k2-==rqbZHkdA-MSYAB-#3%hqHnebKt~!{mt3B!Z8XnJ0DCh)$s1Z znu${}%i=8H|4;s+@UgD}M-^Z0^$gGrwX+&;#=nZQ`SnlezD6x@Ph?o>LN;pGad?oP zArK3M>Aw>R1R{`{$a;5|cl_aK$SP=}NSw5AhL&&m&Q6Qn7~15H!r|v@UcFri7v>=L z*LAQbn^X=tl^?%n`eHKvP%j-8FH^G`Kc&>wxMoT7k-@!9|6@vd^X0QSk6mRRa`43~ z55g-{cL26#Q3Dka^$BfytyS<7+CfK|D=p$sVM!-2UqIn1Yv6a#h4CFr3lAfPQ)IOn zE6ZD#C)y|Ouw)U04Q&fTYM6F;x1g^K4G*Ny=i9neuLYyy~1+1 zhls5~r(PlP(mGd=P&nY--ec;v0Dg40eU9qZQ94kve9Z}{Z^BQ_1Nt8r2!VdG(?v1O zIImZu-eW3UPUwngnS*BpNkOiAXH=8OIOsgY6XhOV6fJuaR*d5d9v<~cH`Uz(Qt)!; zUjlRyPuu>5)coxngvnb~3(MbMnayyc18y^pi0m1cb=0i)I(Xwn1R?8@7}jAvz}A!E zj{Iph5W<<5x0d0!PC7cWf# z?tsZmw&fFv{~U7w;_XW_`j}U6C&mlDvG+7xJ?Fd=q<1nDSMUcnL%A1ud^Tc|Solio zi0U=%EE?Y(usA59rai%@ag(hJSC_YEE}*q` zu6aPaz_O8_Ca{^y{#M9aF1F;yCh0 zut9MXF$GXN-m}7$<|nS0bWxI>-o~=+oO(<95wYc&8FlmV^RG3?PvbGVq_1Tz5A%2vix zm1buuXHl`p+xE|#S=XMQR{u-wZ(1!b&8KCTf}d}wnZLF|Jsu>X+M;EQM>UR>84yo* zfc2+IO<^HfxXM8)--W*b92L>*w!8!oA6>k7sI7q-*B2R>2ROT(nVu!kuHd8SN?WGW zJS70vOn7VcW#9w^mTW-0$1h57n0kF_AST(1><`MW3wmxo;Ctt{DwQANHUoC{G%)ps zpEQPi%6vX{j;jatpAjFJS0$rLKt$I2OIFCv5!ta@g&-IsVO zrKCs%DZRCmJ$vTx)hPxwh^nigXP{ZbU3J#Ho(|+VZ8$VYqtG@-^lN*aI&ysEp=~tJ zVVpg%J^DgfYD0lok%B3sa z@CmJ7oQkb?#~Lq*t00n{-Sg62;@w3&#>Bz;6x7im72j|>TI!z2pcH}oaEvv&&V8bQ z?3dpdqEt!-q1SojRaA$RSnP)nTNV_YfOv^8C;u+sd1*Z)9!deppjXBAvx&~V0ou0% zy@Cf|e-GsR`R0So=f4c5pW8(vcJ4hfw*A)#A0787^|qpgU80b&jiP|1f0@^7efa2U zxm!8Rr-sk#hbS41!+9sv(9=@N#9Q~v`M*!#c~F*RwkJc|aBWm{$NODy*^fiLOP-O# z`Y*ttR`fc^17#Nb9KaP+u3%uL{M_B@G47Jy$8rB~j*mO%P>pP|N~(#SnYtqhiQlyn zvqu}{N4vrbZ6`dv|DzB*%f6XmEj-XPX0RsHF%|ka#dB4Nsr{h#kc;uWQ8qr56Yn+tr?egr`Png@k-iIGKPk62Za0;^R z%^`6|5mf(5@+4v%e3OK&an6*-`eCp&s1PnkM$Eo&Hqf+FupkgEI z@Gw0t=ZYWFm@SB9E4$LGMfz@G^v|<*Vu0^-#rn|PJ`OMmo9g9G`}I2V>z{AMO5#+`7R);}gYH={JXR%l^EtFY zXB<6$eQ$d8?$RZGGl05;0sn_O;8=q0evyjC5*oM*?>S_CGpze0B=~t=$Hb{A)pxnS zhQ9=Xt?ppEB7b}*`L6`_7F=hrtEo<1T+iKqJW4wEZjQAjkwHZE?a|xBqWJs@VbEsM@uoGnVRnO5afk>=bDHA-HKMIz1k@Kp~RrdCh z6&l&YEYYtn^mH@;-F^IJlx6ghilA1T8#wie97%e)?`-O?liT&xmmE3a#@{C%qq<}g zYNMI+xK5f159xKr4zVS*jCU4fNZ1R1>JlnmXm36m+3wElnVQ!S&L`ziSV@rYH z-;)b1xP}IpAL6>(!YPpZ=IsRogmGQrr9w7PLrFcq30jahT3zkXMW}p*h3y@nTjzx> zL!=};`VzxffSx9U(fZ9K4F3RTD6>g%?^TX{y8lt(Q=n(_==j_2zX!;7*MSskg*0KP ztv7_nj7c5U0m{6z8hl@wNQ>-?(Im(JE^)Qx6NT-ioP; zx5xP(l^Vvm#3-}7U`lJ8zKpSI>z5G2+AFf`VL~{ zI;o`}ETsOl8jfA!v|5f3cvFFvy7*=l%pLD~nMb{B=jLw{ZY?ACnX;NfOLo@BqSGvt zqG$Txgy4T{KKE||xAME_CpWzwUC9a-D;6+0usHuozWfPDW)1^i(Jnh53oVd*_pVTj zMFYcE1G7Js*&y37@=9DC@_4wLg#}j`jvD^Eaql7#>djImW(ahDWAEFr(egW6R z#t{nlm$*1T1&Dxjrn;}8x3S{1<#=Pe?y$?$ozOD^QFsLH6dvW7EztRs-Z$Oj#mSW8 zotLWamzVZhvil;dmNca=tef3d=T3WO7^sdRF6--keI%wDF}FAe#0*6>rFYwx1v*b+ z$g<>}Y&Of0Aigv|yN-30C*yC!h2qnm7)%4O^&JQW87L&n{uLN4N1fy*geuN1s*uZf zFtjKE&23oy2Zdj)3_^Mfnx=8h+TZf0oc+N$Bk^gvImG;bg4GSia8c|j3}~5 zVlFR(Q%@0~6+OHrq`YtwW9_)$o*H$x~4&*mfMyC00o3E639bxNK zc2gq7W;0$fXx*8Smw5AR%7y6#ve7O)--m%QC`?|QVDNdr7!JPK8On!wbBlQErlW03=qaeOfI=bPT)w@%m-F8j zv6q9+y7gC$U;S}wSq*#?0S8_{zTmRC|Ebb^q4;d@H_(Ra)^W{Xpy!z5t@?D`{uS%$ z=tbqz5cP%byfhC1N+GNPTUyi59h=uzVA@T7Xr}L?7<$P=*2hiwnutmQNWc7jW)qdz z987f`SWkmyz6Dlh-l^yppQ%boA;cK&<9%s5kMGHUE__79PcNlosvT$6^7OFsl)g%k zrQn+e#~R=p`0uoYUZkw1sER3M=>jvG{E1p!x9GE<{lpMH4^<`9u5U}j^tF9~1`D;l z^DL@+VECQT@x52E_q0o{PSm@v{wxWLwZG~xQ|)@o>~6fayxB3yF&fp&$DH~4bsfL? z0811%7U80U+P@VXL2<{qv})c3IP{#X;qj;*V-?x;R&*`0e9 zuytH#(d;!l5rPO!CJ7h-H^Z(r`wa5jT?QN`BbiGUb@p+f0FZ>51kE44 zDDu$QDl+;UEN!S4_iTQ?kLWZu$nf+6(Za}D%!rx4b_{UsnApUAk>aa?j&cZGG4g-# zB}OnoMrHDp`D`asRzG@X&)XjbhlaV5%X1M~C4gF5n&}!{9~h19dbhRfU^!f<8o`{j z3t@Jds2S9h7ru$J_A;qL9PIS{DEUH5Xx=ULA3SjUAC-OR{6a*lD1)`W#53%5#x58| z^v=6pa>xC&%GFM;=~0M$WXvyZdCH2G5?%nrTluKrlPK{kJzSk5{jC93CRU4O*#EAXB?MZs__> z@Cpo|#Cl|pO1n@98f99BHh)?5qEW75XoYXb;IG+6;B8qDwg-Ij0@6|HhCqp##?>T zQ`4f(+caF_6C{9b6Ev0hMRE##$DPasI{Q*2VRO)g?;3X8D^QNxUy3%2fy@kwMMH40 zGg5=4JW14k4QM(v{Ck_ndqt;ax09p*Yp;;O9!>HYm;LvKbIpX;bvKEBde^CD z4A89z-E5R|=oTMlzlS2IUU+da1}ZP<*1u`^RsH1$`{^rmU+44^$8;4kKFA_o%$A~) z4oNB>uiojmE9$?XtBb1jyE=kadlKIqBP6~18Ynw`5~s^`_+0!*S$??xj_>geG{;V9 zp)hPlXiJw}^KNX;!R}I>;IjO)$xqBlb5{s=c@wt(y5J{uooKGBzprHmDt2qs8^(7< z{17pP(4NRpb8ru+%DVr*N6b((3_Y6Ht7g3paSfQ3OoDstOnDoP2>U)0dwP0S+w$%| zp9nzaAy!zXtrM^`9L+d`fu1FVi$GD?^C`L@= z1pg`(eft3xTQmPR*obH%O?B#AW)Ry_WmTXP%*Ys_ zW61b;`Pq$A&o5uNc;_p%xFVf$FRuHTHL%yP@*u-<`T=BCIZTno2)u&n2n7C3u?{{87jPLcDF~=Fw z?1Ja_*HB5GQzSCJ;)z5^l*L5TVrLBH-gW;2YZGao=>XDr6z2VOu7>#CfK?dSo|9)9 zG4&psH_ez@`!37re0z7!aoMPrw5+rKT!MIO)56(7SbM&r_OH=VcK5bSS6GAjK^Di~ zv-I3vZ(0Vp>UC&7sw1ZuUyd=yV zm5k$MRui@H`D_O=tamd?6!RA%c@9&;Th%4K!~g4cir_fWhRYE;#?fi#ZJ`{i%-NI& z0<=J-;hi=oJ#wnjv#F4D_0yJ$&$RCok7^M1w9Sk43hRue^8Ah4`N$)=U`!J(z`zRw zMaZ(%_KTV1;h9&Hfj%|~p_=106j$V?SmIB*<(+;-xOd?!G2$8lak1xiwlnXCA(2*) z0okcNx%hp5iYO^j!$3ixdZ9I0E$7>-l4Ei%F(z>71HY{@uvxe}aC0PMBXp5Fq z&vTTy2{YgAa^IFFoSZL*!_@?{fV!sfQ3m%j8}TMiftf$Gr#;gT%;&f2tRH&@0In&g z-^qSJF~I*?0Q~o#ynXMHcl))(H_usA`K-`f$KsVaD4UrFH^qvqKexv!UgVc!F3oou zF|KwihzKbgsK+Gk1^?$+=>+J1N8|dHma^A8bS2V~z1l-zP}+fWHZ=$lE(@YP^V!}V zk;D)T?tB2EoxynMf}+J}f6XPZG!@fy`8pt_2iL+UlFZ9^`7J9_xwc@MCY2;QB>k#% zlav{zWPgW@w<6)F%vbV(p<=rX>meOHPod(oE3(oyA(Iw^7sUJO?l~Y(9@*b?V}bdy zKef($Z;8Xb^AhWaF`ZI$iboe&+Sqb!FrD|L@2&HyY^DRIxQ0JMo_2hg$8~c90+wKM zW{~0uV7_=ZvV1o-om%7`d>g#K*;?x)=+F>F>lB{}3FS#XdX(xa>;0NSn<>C5!N?(| zvW_40+d?XF=|@5B%OAniCryJ0z(l6m`u&0KH~Ue|WbNzHxY_hPiRS+-L;F8kLjEsb z1`gkNMLX!Tv3eghp8Shn2yDKk8UxZX2Kp*w@}xjmsqr#;-h- z^9JNdT@SiExoXjC1jRJ}vJTm!@`iK$C^!H0PdHJ=lje*+JRpi!5~aojwUP*QJMyK% zeE)2Ko~*vP?9XX7`1h_r<)Y`f%DCu2nilen2+AC8r|k7%cj=Ko7TzYchuA7Xo?#Xg zTV?nUV3D~_=hntfy(d(UYtG1)=`zT*%}CZjCg^If;^oG&DGL4WccnASX-uue{WH8ZLu#bn<-YWXaD%Z7Ck3Bjr zw#6Bi-Eeb!X0Q25q}FRUt88IF+Wy6J2^tw(O>O4(*togaBT)KnK5!j5fYiOUU-Zvb*|3epf4P!YfXTsnUd`4we4RQ zB18iL4&amf1VAvC!3k8-s?zU{=JiQD=ghhH$NM(EF^AeIPQQC*(9C>c{nTfztfExz zmva@V=LjKmb{87gQMi|UU&qcit_nHZ`>8fRY#zYp0UIJ@{MQ2A71sou*MK@gE>27L z1-U6YZ!!`w%qhYd24{baiE*C) zCRF~4mfR{yLHtTor~3%Ld9=3s;&EyHW^~g;1CR-AI~1S2?C~}7gFA9-DmfHAntK){ zNC-1%EPB}PM}!IltoDK(uk#8c=p)ZYwfwp!FC)@Ob)QmucYOB%|5|%SYB@rrO~ag= zH8HqfyWE_TE>(zIA4r`^!gX>v`Kbov?JLiISdNUuFYBi5Suvn|)A`o&e&P}2@nE#< zoT)F?-J%A?!ytl|BW*k4(urevcfiN}AShXPN;&z@ho6^k_CAX|YWZ~Mky^S^0#qbU z%-)gUZn&IXKa&O)2ZuMgbq6h;ItIfh?2{bkjG;k{t+#oORgb|p(iD5PwMNkvHZ@eKjaY zTzByzpqzyr$p+%}5v%UFCai4J!to$??`oH_lkDndFZdY1%;8ia2gLG2i^?gJP-efK zHjjE8gFqkRI4cjWwxrB_Ii0rTlIl`#yAuwUs1_;F{smy5T8}g8-rKui+WV<-8|Z%W zywmkjguAfs6k>)DdxXk+ybbhbmq(guo?2eTXB0G-@9;uilB}sc38Z_q3Dg-4&IE9U zRYB^x@vDzo1A!j49MLww`Z+5l#~!qvM%wSJlHM*0N_{B?$tLRZYRl~Y>;XD^j$JzP znEEpjXQj7aAuMz(0}iq)_5L3W!uc!E}{+0OcnfaC%aZ`IW%q|w+Xg5>t6b4MHjqjirwzXZDhdG&F#Y%PR$~7V7 zXu-={^FX@&u?*(NppB3-pr|n3>KNoPN-?Gkmqp|@@6ZRWRow-{~R zXDAQAV)n&&leOy3$h8Haz4yA?ZC6wdRNMTZm7_g!uj4#Q!W5r6;Rl#8e8XDaqC?sf z8VSJ`O@|Y(h!&TT?z|7SIUwm9>UFn1pKpcHQp;mc2c$D6?BtzXlM!|DG+fwV%;C1x@Oo3Yxn?303z`2d}n9Ak%ceUuhx1GWk_h6&@mM!DvPYIW}LCO~O_ff{B1d4QMU)Gkz{&td8}QV$$UgMp=+ZSNl+iqlAW zX@5^^fz(?>ovY`a8a{OJK4kW>GeEinJx}gO>4TZcW+k;tJ&mxP06fZrL8YnsxJnLn z=SX(y>Zp5U=zLHKr;0DRfiGn;@wL206K`&fpM1R*#_r`DZ!L*b7HKiLaAKa0~csN<~%r}X?yQA~8`0-oZZZt>>a(~laT z^CW`H-`4fy>1-sM8-#$N25kUpQ-xJ9hp{ zF0kV5;dNoi>K64Z2(hjz&-Axr#`jLv6j$=EaV!6^g8oUHdI0fxqV-H?VHRQ^Ay78 zDJ7m&X*N|}E{6(G)HAr(?$Sj6!)X7ll10%{xm$kwCi5j`90Lz@b3dh14z4G{eFkOm zzoE{D{b}%1*$d=d?EubrK_kvw0QZR{J6$FY1MQs+*kQkq+5t;IF!UbZK;wNJeX6Kn@ zmp@v-gXYkH6)WDa$}J68tt|sE$ERq&gXJc1ePCdOw2C)V$IEh4qU@NRhCzBZa!Eo4Z%0zQNXxSo=$mb zc^6PbptT3$38GQa6Tk4>JFDA}X92lM}dbfb$=bDMqfq5F0*@8w%*S`i-3H1xeNd)X)F6%PZ`>e_nIsI zJ{PiMD^+D?$*xU4!^bN{_}o_JxJmb(4Lm8p=CIkZ*_}yx?`xk_uE4=-?C>p1nXMFK zxTqLec|7Oc>Vfc<&v=>4=7hP|-K9b|r|opEyB>$2hEu9XI)q*=9!l}nNgsf$CG zi`v3=R)hU-IhHs#<0zVa+%ahbc~hXKX8O{Pk)q}ll@0rGkJ4ie@>Y$~`Y-T^Q`(5u z%D91O9{U%s$=sN5@l3W}ww!2Vn}>6@HWxjavZeU?&j3sOWPjRmTJplXLlEYvF}q_m z)BJngCjQPWY##EC>2wbb={$7C_hf+jA?|RkWyzT=u46j{%S|-B4qvMQ%ZAEA3MAlq ze9r?HGh{Pqi`yv?qWLcfBk=TJ5XqO%Z$|7vad{_a@os&=dJr#J_3oN5(wxhURd>dn zAOPl(!%t<;Ja>30&en)Yb#{)lpLRP82Un$UWvR*g_T>dRIoQ_&l%UEda0-5O2!0CP z%FuQ6U1-b`2s$n}7H<~lC78QfB+3<2zQghWD7G`on+{4oGayev4;FJ#*7_URGU0`M zvHgkV0a(L1AP!@&+TTNJWAfEnei7xjgNc$F32@$T-Xrw}K)k0!Z;^)9n*qFJ-gf$A zLT~+eToaNlzh6)WEHY^^8$MwCX$&W8jf*V4F5QmP;G|%OWQ+C#@e=4SYD1wx)>{4)`ktD_4t!{GjjJyjYRd zzu#%)QhEj)Pk!*y#D?0#N(!=vX1&T^9Jlyec{L6oS)1}r(xid zvT!>k!9JhwlKq9NnA(sAeTQpfE(F;GgBIWjC@!?z)o2~=x<14A^ku4)Xd}%ZcY$U| zsQEC{nB3|tjA$3LM(5^KLfu}}615FJA%tpWXURy(#i8}p-aqjKol zA8y*06dbk{@PW;C!uLNq-LY>NAT0iHY&$wm_n%;HGnpgjPWvh#kC!;)IOM41N18W* z?mdkAw6^`@oR;JL^?w1QyUvvbc?L~KzmdP!ioK6Y=V(M!!yYq&v1Z-}aw4*~oyY={ zAKDm`V!yu_kf$Xq0v&u0yh+I%;MwLYWe;Q12p$8`(AVO67%pHsh6hJx?gOpVYpYzkP0Hp=xi9fxFa3Cxtt zI5h~F0W-YK7?C83(W{)USnE4O zIpRknnfe%Qhm?KA9L=!p$L4St`B!o2N8zRN_+tY|fRV5!u288(5rmWffG#CqZte%C zr@el6HCz2T18}gjvkoMf*9b#C0U~0vzk8CUJ+}$>V?jmibZaPAOG9805YL`5FYS~6 z2`w>HyB&;>k_UDbS#ovto~gfLwYQ??;i}hHE^;2(ZWO?W-Yc|&!O?55p=cvn6eGb07=~6$-UiGoh{_W*!0j;4 zI5b!eF{ZScYkT*^wn^#hUI0e4 z-!CR-9NHXAOaoquzjkcGGI<-U`=b77Xgit_@AO}Vb%lC1k(%JkK1)bVadTu{AZzR) zA{p)Z3ei=c3Bw)oI{QH+0BzDIc;0O}#hmZJwn766F*@OhtJj*gr{z7K>wD$h|hrL$IssG3&=4kif4bZ=rM8@mVa$m^yRfieA?1+M7fzv0D zU9-Nhl423pLI}ozAh6j%O7h|bb&w(@xg6U;Y<@D)x#6-fAHrXp>$%>KL#@ibf!qZP z5wPhU6HTc$yK7qhi?vy7i{5V);<+B1n~Iez9!pF%fpSfbh3xL;y!&;bcg@Sz=xFdS z{%&mgx$(J!bba_~h)bEKyIl&ev(-^&Ca@m zM(R|3yz$w%k6YB)A1iULV=x0N9JncdPTtG)3of|xLdloW6+c92+O>*F;0g!7~cuQWIRV_e8_zvpkIwpg9zVP^cQ1hCm(#N6LNS+9ie+P2K&^pz< z72vdkRpg1o3fiXyz_i1OfaHQIW?4o}ZORnsi}rb7jf+buqlpji$RNkY%-w0Tv-lg^FoyWNieHHL=T5+ zMxI5G-_5`3{NwhMU%%*TZSCJ!(KuNTS_EY`e;Ne`MT+Ow9Y(M*2KD$d96l)X({viIt;n|@3Dt-jGL zb1z_EC=gu&c|G3ak%PdB&l-TtyydrkJ}H8TIvB$5y4A1lQe(Bh5lM@BvD1Aq`D`IF z_w^ivuLd*c#U!hzfv5D(9q)d`D!RaFJ<4|F)}uGam7 zd{)@h@jkPBbtM#)|Kj(J#j|NCW-B(qGd9EEMF(YXnpBsMK*2yaNuYXV$OUhY7#0gQ z8#6uQr*XRJf~m)`bDP4Tgv7=dbwFbeWDbzH?z^=vonT!1Av5)(C_7gVu+R&)sHQ!q zt@YJ-%Bag?(AT2YvgPAIt-=|0Ve{)pbNFrraXFbWvUEvnSyyW8UMXi%L5*7bg#JuAKfY?``BE3W5e3D&pMjB zzbdlM?RL*V!xp>S@`R1)2^BeKd*CKa>A!Zs32@ax6SCh3z?8iAY*Zd{pa`L@giGPp z5$DrMWRCq39p6&E%_b~j{_(43T?Et^M~Kx%%b`oPFR_ycJQ1Nae~Ri(v0QaOJzFKZ zsmiDNT#}-w%^tJ-%x)azWA~W}ng8|`6o_XwwcCo7NcL1~j&jrqswi7JT|3+rEOapW z=E^QC(|fT&M>O0@Yq<}Q1m1axHRee0O z_seOl*7anF<*v-iYAqR+&{ST3V>}gt(D%0!wcNLJT+b`zG0;mzL%8&OdfsoG z9(L0EG8_Snx?1o0I3h1LXe~dDGu(K#*)-*lOy7X;u{y(TnSI4u-J9$BqqME|yuMM$ zO)cMQ_&%p(OKCZ~_&M?|Ne;)NW&TjZ$S2k|ktrj7lhd&G{ZpLTP6od250`dnN{2VX zMdY`n#zAfcDVr%$T+}e1+VOvC`Z;6s{+c{2G$XEFlrCW7HB!yk8+o1ts$A{r?{QIP zidHo&qGNwX4!GB88Z9pgUr&~Rra+&l?{ColD#M$hiE!j zT^xiq*9#Rr@@R*FxelyKhHK{tx#FR$&7LDRKh-7O+9n|Bw5$)*<81s?-ioNR+#XGi z$DD{Oy*kSHJzbJmxhNSbE5Grge7IhY^25?6j|dEH6Vlb!B>=g)M>I00IQdF~Alh?! z0kB%}9QaZ`nDUZ`R9a!?{ww)ullfevG+JxIrCDI9n1@qoe=X7T8FZ%MAq9o2bTO3A zJAsvEXbG)9X2ld)7jla;hc$P;xN?3@dvvQSXsj^x5sNm{aAINc=-7P5_5_=Q)1~n0 zVh2bvnKRQ;5ylbUA1cc-Ugy#rK3%WG5Sr`aER-AG)ajNaqQ&*H*hE-I#5n5QIGbCe z4xBIivrC!DSm8iqn-;(2!g|5@1WP?ganHqW)07a)2xac5i0>LTl6100&5SHvSAv&q z@oMrE=azb4NXwx=yA+?3&qnE*?nxzXH7nP?F($Z^W z(LYHaOn2_ihkjA$1rx_g#i7`;7yAc%s0gpMAJ)M_HFI(&EE!K(;bkY_Zmn+F5Kl0Z z+nFWPVbK&`!mCN28SZm)f;n8KZf9Clmx>GcRyTefl89a1kG zc@9N4x-RAODNo^q$(8eu((fw`pkT}kw4{#5%v~(mej;}3TaKc5^0wgP8OehOHAg=N zrG5$(xx9qJoa^2>ElZqx*w9Fuj|HeY)?Cp|QKadpMCbp(VEr$?yvlg;GUWW5?+ugm zV|y$q z2Zm1rU z9lsC;)~3Eu2M`QW*5^&uSJqqD;c3Po#kW{l5X88l(5GM$At_CSClk{1ffF;b+G(K@ z`N=K#?R>?nKt-?#@qS+rO0ifxeBT&=S^{>m8yYFh(gl#qqh-DsM!Q0t;fm+Xkf*rv)EGsmSc=4-YePaq$3a_eCN^g(>^Q{xyjD&lBEyEe!lCCXH3ySkbs2? zm5d6}-dkxN7kjgm!_N%_U8rx_Frt^|+bUbO{OIJvX{GxkZRG$k%60p^=I+kP`@4VE zYkwyV-z+~1=u=I)wm9n)m-k*vbJ|SK#KD?_={tvmP->+pEvqBkq>IFK0_hnm#inHZ zwwBW`dCnczG>;b1qkh7%N783ySJmaSElPk%txL=g{lKWc&gN%=>)cxyc8l5sjGkD0 zrL$I(!Nca2*E5gyBCO>|7SeSaKnzv7@mRA=`~*O(%c% zZ?3=c{;TfL#V8%=?}b?i)Z7EK1qmR>hD9^|A-xL>0-C2|d5-fL$q!bC`+7`aLV-XTW2+qkpHAD@ zP;lmw{r^~d>!_&PwrdzcLT~`-MnJl|K}A5iyQMpXA%vj>1f;u_ZiX5fq@_fLq^ISh0vU}&sTukZH zA%D{J>dNsD)etLB71x)&pAU{NdBU~SiV5uv%BI3YYBI32tB+Ag7ItT&Qsh5mZg*wm4}Th{-~5Sa16plT%ZbMn>qhz`Iv75#jxAVWbWuf zVhCWvi%QP{!qIlxp~=1j@MgfDOcfI?ZMmE^skE~g^*TS#8iP1BW{mTW)~0Sc0^BBa zc=1yRIe41QuKI${WK4m-@`Cqaa?T+s!uDgQB%uM>qe@1Bu_wd#?f{0N1b|XOd*Daf zwQ5+Ozpt!vGquCbB$@wc@;HYwgO^TJboE6P+M}$K%4uf2a_Ta{J;AAR`fc80(oW3SuRX^mhGj zvG}FJU39PLBmM>KFw=Xqli#SG;j^Q)1<mTXSn&gwb_-9VbHc1s{3~_cnG}i# z@O3P1aaYb#%tc;4xfM%fa6ZvaEu%f})>JpS_luAr6?4)Df8O5VLq`??97*TS``0Fy zM2sX7Uegz|eQMV;n_M!ekZHTg+-u=5AU4xZp^y&MAU0TIWa0jGn)v^9Ue|O)RMR>- z1^l>Q{H7nc2veQhg^I&7gF4xm_|z0S@}H0<>LBY)URcZ6YsX3dDb^6UGJh|LG@E0n zvm!CeAfTAF4$BP9?L(dXNs|zCu3~!Ig`}T~pYoxigI&{RRnPLg?9PP0_;~E6dLog< z);P`;R1`C1FxCvZhcBY?rrTjTq{asyq$t~*E5;Ls67pLk#%Q0<$}5*#@jgzr=J!hy zBJ~p=dE|al=0W_OyAs7qyi`ilcF*i*Wrs8&$wEV?r+@%!)h^^foO=bzF>5O`pSmp#(~70d!e zBgq$jje>|CY^)|jVNWSzYp^#`qyjpGC?w;4QBb_~F9SaRoc;RuNBQTExt>$3SLNt~ zhPM@k($HMzX_f3<^~tT37>vzI#%5>YTOaw-t2s;j0vU$|lkdL@Z9J;bcEmUNm1JuRp>f4c%<23^dw=5H3XZ#Emv`p=r$L=Z687K zOENFs3gJ=E)xos)bFblk6R6n1|6ykvka{>uzO1fHclgXHTudzF0Bg0%)hEei-{^^c z2AOu7T?=L`@Lwp@P1LuZSE!+~38EL~%jRZ^IkdXmd%ud${Yno7W6fe{mkEJ3`@+un)uQz3=AG-+eK3Kh8 zBtSAEn&%L`+38_YK!#X^=g7oRtU=>!bi9Dc=(70|{LJc`zqz5!*o_{bW=ihp1*9&N zM(Kwy0$wjLAD#;|A@k07>@P&Uk5Nve>l5O8p&oKE;+e6irs7*Vm02@&RT=fBHnrU7 zkAl9_XmS#bXaWfgM84>B8SPsV(eoi{`Uf^CGCzXfLgA>BiQx1qk9cB9CCJmE**NVx zuTYz-Z`a*3zWN0F>-K@9zH2IbqwXq!28IdURa6I`TCZ5m^^~=|+C8rOaq*&eAW*jd z8~iI$l3;Se*S8PF2JeJs)z-HRN|t&}-*pFzTVG&U-pE<23J8241Ltc%bk)}K3&@nZ zZa#2gd3?8>-a!iEAhC1m=2{MNg|^!pvz{>j$qZEUm85y#{CX&(dn$+~&N{;(RXYo{ zD_DI%bbpLN+^2HYCeo488^ZVm{1JfkUYg3!N2Jv^v*^K>X_tma z7=>&blsU-Di*xTOtaz1gr<%S;yFL~_#y2ZAaoY9OQ1QHk{Y;qtdi?ZC5^}sJpEdVw zG%czN2)(Ak=^6M;DXg9{w3Bc*rk3mEVueUSbOjsrGRgrH5ep8rvknJM%Dx^G%i^Qc z8sn*=%jo+Y+=YIgO=Yp~sNRn4i_~I?kYt}mH?8H||sNjgrhV5e~uvzXI zO;S86Sk(y0dA4aN620kLzvLga0$4u&;Unnr@nE-vQ)DR6pyWWNy`3cb<^uKtx(`tr zpPp^{1=~>Pp39CCZiZa!m`ppFAcmDZ-FF1 z6w_uy=5*3)e?23~K!In^CMI~WLzp5aZhKeF*v515w^3rQWzcN$;%1KPm=5_%TJIkA zHh1*7grMQ67txYJKVn6fuL$X#R$2oyik5bWX{YaNe^hr>>|K@Zt+n58EeRPE{VZ!E zw@$o{SnShRR6gRbD6;A_s<@sU0HiB5@3IbHwJextcYet6_Fee3u79S#RWZ2iSE(ib ztoR@;O$O7oPryTaDEI!C$?X54SN#9o=b5Yx98!MSh2oDyD$DBu=nmwb?N2FWwc0RH0ogG*2^n9?-OE=(21?z zXKN1DI2XGU->n5&Wx(kr!c08U>I*2}z-6-SdB-kZBX zAhH#Tyrs&%X*0)DR;X>T6>T(hCYBIS&BR1p$3iK+fh6XLrWBE58bo(WJB^4w4@*9H z{;8^Mno(Kbys<%M_65X+H~Eip5=+!ih-EkzS<9uffkS_ur0OH38!GCCZGHP&| z6zGF~!00!9n*79qDC%s@im~lu#Z=gpiqcpehgjy0Ep^fO`F~kkYd(u(j?}{FIX2!M z8I|47G1Iy|Tn#u;4P+Ee+{vjV=uYD!D;ho)LgjWP(!VV}mYAiR$m2mI$uihGpUe#vp)<1(BK;H)9p zXgPI@9COK@#?DAWX6hO{m)f!Bg(k$`u`=+jW42IcY(+obDKm|9&G5pTk9_chU6E2D zpSiOK+jZg_+OM2GGqBVeR~DnNPLC8LizL!o%>OG+{vYY)fBTf<4O;1C8Vol50Xz-h z@ST9s3w|Q29>D{AOFYE);Vi34`aNYZ1w56<)5T-lYcJ>kHpgcNG$XN}u8y0Q?%DMD zw{F|x%6@SR@zGv8nXzCUcV0^WzGsP-S!J0$p}OC$dt?4NsyLUn8gJ7w&uq+xRv~{5 zZB=$?7kSUM;S~iqk=L&LV;XvD#(_xLNW z2Pk)$c5hZ>y3vXTLd^2DGcrsH0TCQ$!`9+r-46?XX&?z8-G)`HNxz~Vvh7pW(5S;^ z`_(*5jGkSml(ls6m`i>??o>oqw88^^3BwEYebUDvbA}T?k$v>1K%-I9q=Nd8Zl((K zBYY4`SPMcevNKwXg1wa?8Y}gvIbNOLl2*MKso0-#RD}`zb1dg9ckd1hr z3m4&8r?Z65_d;n|uQfC*wtB{{2#k`yzB6b)|I0nyzsv7`dNu$_O*2hFZ?Ck;Vfw@6 zK8G!!L*7+qouf2aGEd6rU=u#V%a>2VIjlE*bG=%doVl#C6K~kcO`;dMIcgstXkvUlO zC#5=j@SVhoz+8T|ht~pydXnT|;&ZVwHLbp17_6)qAq#3BLE044p!>u-#~PaGeY0{* z%*sG7u^;TBl47^sZRMb$C&$ar-%mu=3f5mr`7lSE+AlLUe@#oGAvMV^s|{7+?}?vC z9KJCj9DnXf41IIlNgm_Tz23)m(#fTO-pZG0Gj>`d+!CyId`i|oa6@H4-o`boE39co zY6-`U*2)_Ln`+Yyx^`cUpvOB;(?Z_QbyX}!F@6E?v}+={9eeiANel_=5MU=_0& z%>LxhSAK+^eNF_hnoHA}#GUp^6t0X?v>ZvB{V@1AF4whJ$j6}8>7{aC@hqnvXBURpo1_Z$o^$m|37Xv z)C*Ue6*w>5VfOo$5Pp8SzL#kh3ef??xwqNivug#Drjk8 zy|d1f4_{xq6&nr#?mts`KR?&U6FH_5p7Ob@Av-KNl?do1y zJPku8;c@)R zNO%(!{_=3)f7VIK^-p{5^I1hr09|?ukVKygAJnf&Jje_J62srVd*uLjHkL^w4%lY} zI1r^NYY8!RH8G{kJfp6(_SqM8z+$lS+F#%Ut%IK#|XF10PbvjIHr;2k& zp~R}$#xVDP6IzX{S(QRDGW7Z)(hu%Rtv|1uBOQydBN-`kjte+GyN(6w&%JQNM=|M; zSYL8GJwMNvJB*j}mnpZiUBi47)(XxIRUZVexrL{cE1jyLE^z_2&lB%yez8~k>%y3kOkIk^^-(n<&^2x`--MJdZQXwi(SdB!Pr*2I6m{H_{jb0F7x zLF67+)d4u3Op$PD#!dEkDcH9#mCF;FR(xODjpIDvM$!`2L8ZnuH`mNTX4kcSz zcQ-E@*NLp^vS7ug7EVCch166m31PJT2hL%rVQ=%YspLBHZx%Nf^c;u$_V%2gU>VRn zQdlCJflYxG>xymA4Ne;-uaA5LBn4oL z@o8XhCEi^=v!y%k_5s9?!^n`vllK@_syw-*R?WX-Q`KCI$$<84nEp=pIN2uL>p~ec zV!n^VtM}Dng6&N2#MlyDks`^QY3@sSNjRE7!=Kc8a|k;goQZ@qgz_c)uwOG!+_@t< zv2+T$TWxD}?{Iol!5-s`l+`{VSL-R-+7>F;+{OeBrK~sKEu$57L1c3pQ{5*~U#syN zF(VdtUCbqR%tCD{OlG~R#fuoSPzXE9b3lMmj1d;Le(?Is-XQ-Tm;Yy(t0|7S1{nhu zDw75Q@sxPxQA$|XdT_7;kSv(Ynx#BTYFW4I$NfodEc;DIVy18Z^p`vkJr2J*ozN!f zJ}|1$h1l0E@R6ORC;{~0{HRSDFbvc+SCgldx~HMyUa++=U_t~#{e5xb+XfZQDc#|8 zpL_Lfs`=uLI|Qdy;XiH?#~6|=4JYtn=+>loBq=8xN!rfL4? zs;g?UQRcdM5i&l(c?g(D6w{JUdz8rmqIXHo`{z9YTnP)sZTTx4wW)@QnAX8Qt zuH|Avmd8u$vpx*hQ+>$k9#VvegFg=Wqy=RqS`p>wvR1Lcp?ey1E2DL=I3@C9LVP#} zW>aw{9vr79x!lfF@Y;vZ=x-h*9lF1Bo3-ukc#+9&JY$cZ()1`uuWm_9yi|WD4R+Z2 z$wa%#wJ+I+LN1ZznLB&)oZ|JUB%M+w8BiZF6+l?4d8eXp^MAJC9x~Z8F{HFy5?#|= zPB(u040Zng#_dH@Hi10nv2n}Ig)7ddS+QFmQor)=bFa>=A6P^zX%r$>S0K4Td5q z8vU({$(c~~C7XVNnj0tjs4#cj#6!zIZy103O?R+t**W?8h!h1mRWmVyBNjjjyds_MjA}B3~x(Y452Jd!wghfU|y=<@HTOfU`V5|6L+m+ zgwo@flB8+u0P#VfNtlZiqV>mVz0!S-=bKD+nj(W?wz>Yd-o=$3 zzVW0_`LCJ5NRI{Lax&kbmCr^nI_O&rxLZcYiVy~2c`qKHe>!{Pua~3QW?ac(^o_mk zt$wKj={QKr>&76yh+VaIMM?L*Lq{xdD-?sT9zZlD%jmvS2ie*O4GGiE+4ceSAgcJh zmIAs15&xWUm3iuQf+ycBU|V|g%sY5eo924u!DdZ+KH!Y9`4VE z6_Iw22GDzd4(HV73$P1iTi5DN;%!SBH+Rg0(3+?PqJ8_D7@GW3z#-%uSB{GcBgfMp#OMkV?DE>78#^ z;5-t#6fl7yqa0W!=B|c{+3AY@CehauuQDgQWdQrf2d%z(rLHyhnyi>dbFWuM|0imb zi>f+E+Tc40DqD;=dQ?`aBX(s9S5ru0tJ8zeM39frH9#Yj6x(hVwX-o%!w;E$L7&z; zqre{m2=hCCjUTxxs~hTezSLdTU7fnPLy1%fyBoINk(G2nngec)4pV-2FNa@1y07eV zFewVy5g($PZJ99qM5NmU!lGrWht=R*_vY6gGd~LC7^wFH39IOYh5YJDmodbPzyIC) z@^6l8%zyxvn6AKnd88-iO7;MrFcfL&l~mKezg{P~6tu!iEgAo4 zkx&B4w1N&|SqE#_{vwrUrOj$-2O+TUgB>Eg%^NM=uR(JVOB^_=@T-E&6NP9f0h|(^ z5$%9&oA&_lV?hgrFXTu<$S0b*ON8=JKe+`N6p(yRhle$r2$9cN?QrjD98xe2o@$fr z%ePDOw=UyG5SPh*O)4QaMEbG0OoSMM~IjK$I zK=CjN@M0llwuEh$_x1%z-JObIJ@Zctml2!ldR)IK5mi3#0if1aqAGAZxNTDzQ*8Un zC?i5(;gv;Nry0t13hPcP-VP_GaFMC?N(cheUmlhCkEHZtSJn^6EK^DjrF)a~L;s|S z#fXohTJCtJCA%d~t#QLa1JvYcXy}~;k<$BV8hfu5yj)aP0zg-Ox`Hyy6tsACMQEWP zmNLM0zXzf-(Lr*AnQSZJJ9>6JW@xW4Vaza=Wu)MR!VWphd@kegF*vVHvzu~77Njt)7)ubpWZponZO`zU@g4m(sh-`tste_L zM@{3a`>7$dsju_P6c#SaTX+DHK$X?l3c1XM*Gni zcLQ+xjzQwJ+kNJWnC5j)z56ohfpVP!g}KyyAJ2$S#mZbvVcoPVi)w40X%(gF~C&%1Y zsx7inG}p^?GQ3Q^(iFK5OSm8*IG384iK&NGnnl02TPoQ?4e9dru3GgCG{=T*z;f5N zqad*@s+MOuwf$rKxL0(HRDz_N1#myOXIF(XZ+Kyon!eAgPnto0{7AS75^a@MxT`#& z+!OAevd}#|eb=+7p&|wW0PPHCBD{;TT}|0C@7@l_7v{Q{fzd6#T|?))0GG!m?O{YSc>MXAs)^R1gjV<2qrtt^=WfmX=WN33RVE&eD!< zSPA1~QQhr(_CaM4!e2Kv`X9Ih!c&jY$*0%Yy}8I_Ak~q2-P2As8#nDN)jDns-H9yd z6phv^LnY1=>kM7Ax*dpASXNTb7-~%k$RqH?EMdP3&z*mksAuFIZIjCfb-Vg8N>V9Z z1`i-?W02T7|FV)#?*W>Y>lHJS#|#mjFJtdX+~rZ0Vbc|XO->F9pmZRcmLYv)iIJ7k zKYym^r@!;lGwPPnN0E-TpnqrH{G&|6ygcd-=v=(GRLO`HPlDoRzzL&NKE4x7G~}Kb znGnLFf04yIeoIEj-CR)aveU6t*Bpg7FV-24_QU0nyJDGk{IzA|FOL*4vbY>W0^te$ z;POOS{Tq>$?aV>iB`lc=-pvV{j;f3>lr@Dy%4UN{o)}TCdX3b{ZnU1^-!@x+nIQRR z%V`{d4XAORoxX|mBAr&prUdtP9#6kgCJAoR@Ii{uES9<0{XJlrBR`Q3|^$08F@7`o(D zsX)SYldPNV^QA1B_l}gDxW8@WDy&EZ+`9bZD}AueiWiUxs7m#8AFd zTW6n6xos*2`Kq)q_zYQCJ(zXci)~r#g&UcsFCo}uX%jd$tatMzY+U2pl~MWlokFll zG0rFTJ7IWsT24D<&R+e9bLxgpMiUIzx}97O;83Gr$)2Drd-S-*_F+4nd>P?}%gvtG ze>1{NBmfpcW#w7(+EW>kh$lhDvw_>I0cBXQJ^VULSDRUUKZU2aemG7EIyFnDWs-&-JS9*H0CRQzJhL2fEs9xFnE_%?ao(mxFgQV>23 z9iMqww)B)d#9ntbi7zFgqkqge(AI)b@TN{li)1kB&R#Xts7f@WF1uayAV03^_`Y-v z)ggsi*8^Rgb;P;BzV=HeTvRY1%W>Mq0gY^gW4~DF&9STpwUV*@s70m%=*H`BQ@BJ= z>6E_mO?MXp{wru+`0C!ZFp+G>6(NVXd4htQz41oc?E!8`|2J?{-H zK6!*31od{mf_<<}Y^DS&j(q95agCU=P64$wR=aXxHc39t1ak~0p4NzEeyRwcAsLyn zqbb*`9gpuN#pTviQHdJrG1;mqdUJh7Qs9|GEbdk^>_x8b!=xHNKJ{fm1~Tn@kO^MZ z`1uW^_iIG)hLyyZzzntHN&!$5!Y+^EnDQTa^$A8TtlDUO{X=^R^r)Y!#*dN*p2tz( zcfcsHpOTL0As(u5K}?)^jpVxIA8r)54OL3@11&fO#Ux7J4aT=Cnu>p8HS9SjP}m#& zj?G-yWz_SMa$3gi`_HjSmRX_vq~JN;!XE3305hT>gNjLsa(de$)WqEkHjviT3xPU8`U8h9m2 zGQh-AJe6B<=vcK<_bQR0hp-@zBfTrAMq}=1|D6m8LS5@_xcQl?eWO*V(d8TBr}MA~ zz_>$gv>l~jWul}DfU&si1N8Sv_+Q(p^D|s*BzHdv0kAeD-)xYndWlM65GA;!|CRnN z-=gmhN~H|Rvh%VIY-M;nF2LxP8z+f*P8$W1HKg@7V^8Q?pv{akXRGCUTe# zT(%6|*2MA2U7~DvRKc=Ai+dwt<>=fBdL8K2nP}~;YgC7-ZfE^6m^Q)$AQr=HcD!V~ zj-5iv^Bs=Hv>dBnXsHj!4h3e^Bt+pU6A|Wg4WLiG^kd*fbNIqM%?l*g3OY@Mr_!oC z2+|gN!b`EarjicCSD03$Zl`JRepPLF5H%MS^q~!(8k^i1i!xsZqIAG zbzu~98PnXifs)rfpCy!}W>qvgZnvEG=BSSNM6RWSm)7}M?Hg9M?5d;4|J`E0iwe-d z;ciuvEhsvjhlov;Ysm-)A8@*7;MG~HPw;`>j|TJ$HCXPLtL9{6iyo_>@;H1h{N52iU0Ydw-K-8KId9PptAV*Soo{)|QN*jM)G8K#bF_D6KG z6(-Th{Kh5&B%$*NXyDPGSk@t`@c}3%X~k+4E3WJG){=*n0sF65ulE}KwF{h%B+7DchN21Qu}2)%Pz=i+)drnJ6E-*wfRXFC zdRlWRe3^+KvE+3{A)tdx z@l3edtSD~U81VrmC583qCo1#~MV43#Wla`x>LcSP@@(Q&Z2XEyw3mw|y~@>mlej<% zHMHvvE2}nBJnj5d6gjg>j8)xzH0F|;W?>xyRYP^2F|%cB*tNTMQ|}GYbb3uO9YLb? z&oMepb@gdCl7gabGI{2?v&Huwl3>o7}$`8 z{+f4kwa3rs)mC;qGSSOYwa0<-lSr{>OFu~XlWbi)nr@qj-~b}x`lpTD+V=+CPe zoiP}Mn}6&4wC&ud1~IQ-^a{5b-TT$^2VG?H@Q;d>w$@FH4(lm*4_={Sl<>xy7~9CK z$=o!T+u|vbwe}K!0E(E%zpDt}KS z3(#(phxr42SXutON0q6)LmfXFr2daFeMGY=!Su+BAy;ZbyZG0C6RArkdL(_zHU^SH zHkdVu4y=cN4WY3!MkI&}K0*b_M?DQ@8DCXWlR`-f%-&1q<)EeIi@Z@UEF}jjXRf zS`?p+uYq{v<#v9*Ts7|9vCw_1ltc-vrMIlMv7fF|);K<91sOJ!Syr!;dn|+O)I2LY zUZ6Hfj=VAG)b2#z?!~eunMmvN=!~4Do29OQUKU23gvz>$LUd==lT7Kv&scBL{6YHl zu`RpTg~q#E1MT!@Y>B_EiH-v7(_ONV?9^@&WlRzaj5{k7|5$jWOL|>cp+(SNOt^J_ zhxqjyb?G-g1&LL3v6RVI6gQ&68}W#-lWg;asA2cS}8Ch?>dfBc8eK(jLoEa4b5d|A6t`D2f?nwlcAOW;<5l3}VOm%J0FTcs`)%z8kP5AVHj($qpYTgI={l{NmOyR zQ<2hA59qmed!4J*0R?K4UW}r+p3+=yDtU8p7}jj|D@?F>*;eQV7a)z%Y9HZu{l+(f zBVGz{?z|T9t_$$g`bNt1=71Mj>E;nRjbDv=Bzo*jrW`U!$aa3}9iNv^9IbI?f9N#Q zkYhd+XiKIG+Uqr!a0cYr521e4iV!A;(UGR-&Kei^s=?aY`;F)K$i1zpCoW%74nY1( z-@>Q|=q(e(BD*SQqFO}(N&~exB5hJ%JaUFBbFF}~HdQm+3YcjwJPDjSJ-6Sv!*H;w z=?fNDQz+!^8m3~4bLfq=x7BM_=yb`pLVJiMU--Ky6yWS!zf{8usGXd49N92F9n@M* zn{Q=w0LI=o(Ktqy2esy=)3dd<4>!9dWiUO*rZTX1EqGSq?DnabcQP6HO|{AAH>`sc zLsMJh7ccHf5?-E3^Gd9B6+N=}*8gPjTUlSnZG*$dLn1DrE&lc2x;iH%$6PsW?62i) z+J%g4V!tyH<{~9oC5-}&#>btL$-Sf-H?0wnVrzbDz??F=p|&=m-28gW%&97n#+5N9 zMS$0P)Q(fGgxzanG{L@WqF6~`AYq_R|8x~HfIw(LfJatMoUD`6fpsU(Q+ zg8@k?Q@lvx3GiDAh@Qt|=TfR*kSMY2JN*$^lt9n+2WCMrEn$0jXPcFFsd|Hufdvnh zOCjCI5ie7ykROrX#0RUKB!4=|W%Ri<$Z|+BqcBtvfk&R0D6XEKL-NBiKdaXpcZx!@orc5W8lej2 z#t|aT&x;zmq_1RZP7n*^N3b{B!56H&x}QdXwBI2|qelE8IYVtIU-3H4?usT(hwB-* zC4io(a2gq+Bb0kk0wBdy-$QEF`Ww|Mz(rc(05~Ql-T2cPv7&uk{QEnMe~wV-F>$~M z9%m?a^#Q@^kFg`_yv?;`E!ZPU%)HC2sATdUqZJ5*3(>i@n>P(0Uk#s_K_jT}wK)cU zLkCuQN(72%De!Ir!^QV?4(P$c+z$0AIc<3=D#KV$CvrL3L?hUlL}TLzT0(dxo3+1Bic- z2m)Wr3T}gM=vH6o9OGA6??obG1Y|;asrc=z3#QeLvDz>W0y0F&qC%GBI-Qcnht)@h z6~|USttz*5*b(G_)dm9b?QN;Ce_+nk((`5z_O zVXrNEn|dz&Q^@a^^GMC?f=W&FJ}N^R5?+0OH4$`B+-8E4r2P^Y3z-=e*w3BKxY}o{ z<5u$3qsfpfXLcrlBkKW88VfKY%*f@LF4kl0}Pb|ts<{K7(EC5ocpkh5!mtRbbv47nI+J#b^nW< zN$mdXCf@&nY#6_N@u+oVJdq412-+)8GyStE?tgQ3gr;ZTpfL?BtL;SLw)o5sY@Bd9 zYPp(~7{94+J)-Z!odDi4nRbY2FA@hfOKr;=_|n}MhdbRqmLH{k_|UZzx8WsONe|f0 z1p^#X&|KU}tHJBIt^*SM3;JzyO_QNYVEnY>zCc_dFD}zQ%@0anTq_!VYi#x4^zsLU4vVT>FvhF{~#xfF%T7 ztDEj1vGbxp5dMMx0h$4A0(!zcUAaf+EKQ}+Fp(f64^aMt46Th7Ht2bA{nBra{d$Da zE3H3%2aor+X)@D?3=WLx%9I!hw0#V-R;`EV^WpWH0Mmg5ygUwG{U`6zE3nV}w2<27 zUFDe>>ZviCqcQmeK&7;hTX!tL@O0iY)52A0GdNWG42qAy()4VBjty zlVVK`e2e(wds&X8964)+F-HVdILe<%UX(au{fzmHiVFMf_A&i;z|uSfTenc=n87tgc!$9y<|nyGiKHOFiI-Zy(Nq7JDXn~ z&BYq6gsbwU38IuErY#I>l#r$8(H!5u{@1X70H;rFI@m zL3T(E;uFRsY;(6ACHLVs$DmdOQQs^aoFkUE8VM z81`?H9xn=DRxWTGpHrylFW-(=A}4DCuPCh%5Mb03Dp>{t^psYGnw>d1t*~s6bIFsS zs_9DQq8?l$aDB3+HI8e(F0Nr}`$kv?F;+5)g-#5WF&YtKu;1T*_^O5W_3Ditum?Nn z4)87;kk!v>Vy(MwNdtTY7vAAsBxE3jw|1%+Ui;(pR*)=z%E4h478= z1g!htu$PnRSfc)oxqrm?*%AWY<`OV!t)3>RERZhpfjm68a~%b}c_>~Bg_y#LWZDVMgEKS`bAxF{E!RnD_yPM z{>ti8l^yUy?UZo7c0@{!wK`~ls@OhN%;`o@{F*|Uqu4|0+K%%{n^lZ=qL-e{#`+!u z{Wm{{>NUbnBfZn1ofSWYO`7AMYwH_CHDl=J3VDL?)FDSQOY``(isyBSXCJS-e{B0H zO^ZIM;ZXN;v-Z5argadB?9<8*pp^ew&2SR`e8}=6a`S9*{HNA&r*qkNRU78s@#xnR zCsZ`36)+R=|HcXa<9)#KK*P~)rY4W%zHuVd?(f|p=A*w9O6Stzbrp6vegH=I^XA_a zzPivdYH)15*Mx8Ne)_^B!3mh_7VY;^LYB!7N8G$xI@|RH)PcU3FM!fimx&Uf*RJx}0PvJsOsso?nQ)2Gs{@#qjQ-FTFmrfjiHI$EUT+W=h% z@v!%_(2(m`V7*F?6k{!=#1Cwar_Z1K{Rg797eq%|vxsoC;@jIa$8$&cBKcbM#qn!t z^mn48xS8EdNR`bVXdQ)mBVTSvc>HABn+!awVzX9KjB+lzA!WFf9SCI?&Etu9r+Xj^ zXWMZ(xj#F3l*Op6HGjIkf87)!ny5};;+ftIM69QwRa?0ba6-kc5E+IGFczPK#H5R@_7-igp?CMxOcC^ny7Pegu*GBVG+zF8nOp*1X1i{!3=23vk4 z!vM-1W9nK&#afxdO?r_tQng6-U8=0^h}S&boXdo@pFth6vSeu|wMbuuy9)n)i27Hc zJAeAr>*BMbHf1By6OV2h+{rGMsvZNx4WS5+JRf0fe?a`L9bafkIkI=o==rOFeJoAb5o1$1Et4q zdo6Ip3ePr-UrFBl@RxSb8+Xsu%<^Wuu-E7wCLM^x|NRZ~Y1J(1ec$O|#XFygLM%6& zgvD2V5{Ndf&Bdf?BKMBo>B2uxCe!GVAEMxD*NN0U#U7-rJQ@YT)3uFBwuFRh6lB(4DB^!T9{WGpx zG>;K~`~;sXbG%x4B+5y$QfoAyX1*j#dpIgT?k>>IB zHl8&Kw_j+}0}jCqTC3=?uJEFsZ!p+fb-_&RvbZ>rETc})r+(BVt7o(%V}4m^o`R=> zaIWhww_IeQlq`P!UBgk-X4W#~8Ybh#;rr?r@IN{~ev4v*7A=7janV&IOs%EgSo$)1E#FRc=Ngl^9d)z@afOz zpW|$l5&=dYipkwngz2lhyC1~_^(dTAj>M%}8>_G61p1GX=4;pet>707@ zva*+N4MjIvnuM7;L1OiF%ooh$v?>VCseguz$QhEK)D9^x{_59VPwzmna*%H+GgM`MdZXJq9MNlQ zyw~N;U8(y~WNeu%iqe@S$I!EkLSY2{9HOc^Ct5lgjiWTVcPgv<;-#axz6>)Fc|j+c zL#1vUoUJ04mRu5-g09`@I8fmQtey%=CB70DCWEY^sm5?)9395kOFPgvHTI1bfuJ@B zw5lz&mwL6kKlR_cp=kfOq0)*kOYEowN{s$IlpD1jExa>2cWW`9VC8?q&cE^*DE3-A zOlix9+nll>w>r4?YiiE8>>i-E*u&?~6CM)O)i@c)KZL&ic|4dTZ?vFh{*D%rAX+IC zPlyLO)s&Hd!PQI2i#^2Xc(CGRu%e(Iu#TQU)_iGx* zxGfERd->w6n{Va*UQ0OfR54!V>q+&>>E3topdE$SxnaAXb zs?G(TYN8beEsnFXl_yF5YVT{X_gfmAld*c-X^Qc6#$HlHs}CU)r9W)*8O#K4-q#A+ ztJEp;FT6DJfBSR@+IZR#uXa94`GOa(s$DHxh1a7YHD5$Ya7h4?m-)3##PFhdyX%ji z5;;hKbLk4D4N9xv&)yfg%2FXaM&~m3z$A*$}pOxE@yi3~#K*cIv$Lth?x zF#Rr0R+MU>=ffDOJ!*Gxpmp@Yo#dsOQpx>Eh93s_P9; zt)Y@uy%CD=Tq3$KR^kX%5rp?gsTBo^b&>CQuI7>CrHeS*WED&Kvm+3qITtHhL#GI_ zpub}@ok~{}iJrQ*W6_<8AjqZzMNM**X{mH;GLF&`8l**EbZC{(BzG1e5}de>FySZp}V_58ipEjf3CC7xz<^0|JXm)FMh$rHQ#*i``q!|x02kh zYvk(3^tITEk+TW!;Su=Is454A_g|@^m(yzE({Ry#S(8{I8JsxmVd54G^K6W0@f@|I zq?wU(4Rvwy%hiUzm(%O`3g>0Bw+B*!VeWGw_pEg6Lky6-9B;Bb{=i<<_;oD7&rzRer`y*mW1isTQJ1Ms=Tl62swDjKT-oK!YSheM;lEcy`3x5z8~e`6 z^!g|~m8 zM4rka2GV~1%7&Re8&vQ+6p^c;96j;o469(U*^q08a1?+;YRRSlQ;?1mwf8eBtGQL{ zvdgkHzwlt}e&MK=tP|Tc^p%OjCrJi#dWms*UAh*>#Ik@ zG<4=gu8nToIF5XO@VoAvKKWle4Et$kman(-B2{a)3cq918PsM+adbulALn8Afb8NI zDHM?yiLTFidQ9QW{ZeID_4;J2x0w`Q&~@`cc9z*BQlfm1a|(1obXmiL1#ER}Joy|GuN$9ecx+9~xEyHggbmFhtcQ>L{dJ z`}k>)G0g}#oh|ZI|L5KKQaG-Abs}^Oox;pDA)Q)sXhIB z{rjSN4RKZN7eVf+>*HAcSH5!?i~2dmZ^otCzj-=C;f&>HD~X8+&Jkmgb2<$NiINwQ zkM87ZE5tJQA$e+Z*y_|3ZL0zZUT#{;Ru3 z1?{H_@9V`OyU0Id3u3FX(=X3;3^F_^n3cOwE@8}rENb{t9S>P2X|}=8S496NoYXiC zYDnJP3pOS?$Ooqzgur`C;N=db1xC5T+A?Io z8C!?6f%S$MPY`r*YV+q!ZpRItzTb}ug&xMK$aBj#K9cRWjO6P7y31 zL*mbdW~*}44D7Z7#<%8ERizB|qzq?t%v`+ht|(@Q-g*I)Rdz5nXaAeH#+0vQb6uX7 zUC!uESKWlldb9kTnWj4_2j@Zw|Jb^wQ2NwD^?ikCYL#H|r^g5V3WLjNt`?_5MWNw$ zwgXHBr8PZovHg^2z9BsRU^0}d&u45_w2Wf9WK?1Q$1CfJf!z3-RMDrKrfFQqO5wK{WFo#m1NO0$d%(7$shGY9I4oFveTHcnAAh^1LM$(Pk%c zM-8PWT4tudwR+I}K5Zfv(A>wj-;pXm*9ug9wa!gAWe^;I`vLh9e zN&U3HxRE)qQ6&CqO_t|K?TS7XpSuxX2=um(uQ$?tTD1rl2f$w0-EPR+XDFaI{l6Z! zgvfA4H?;We-G7S{?Z*Zmt7PoMh2aN<`!Bv04~t3-Pb+q4j&c{I=c4kf=AD0`%Yq6d zwSb%H40Zullzh(tCOmakQsm8-$nFB(H|xR8{R~-p zQTZp!0=xIqBJiP_&6uFCVZg(=c!ip%|CO|%-;PfU2IE_WPEt5@tBT}XnUsN@hPb+I z?$aXQoZ9>%sl4n&2RAOeuBzL7atPX9e*M|HoCGL3KCpd4!QD@`!4MaFY&2N{%4^GZ z!?{NV7e&td@+c-(nWW*vd|8X$vl*Jp=wP3{t2w8WsKVprmWDJ%kdjkN$==bDiXl((ZDr!;OrvT$^qYpSXas+NI;bi;yWNfQuS zHFEiP6Fe$*vnF+H-LxaKKXNvku^VX3(bD@MGh$Uzaiy*a{O8dFRVP({!)63_)1^?7 z3sNnay)(}`@4$`Y6|MUQ(6gTM!n$S=48IJwg>jtN1LmJr6>THS9=pDtDknZ5eLwZX zq4OMn(yz%YinN`x5a?Nu*Aq}}cZ%P&>?N6&kHdQt^w~5aLGv&amSs=e*OXw<{P&mB z-BC-!0j*#CD)gaFXltx%Nfzuqv=KGtv6H#@aHj05q7NS6IRJ`-C-B>jm`P_3EgHa^ zUTrd)j?k0O+;`V2R?2*nL)=AkJ;adQYoy`*PfgTgM5w*JdaFctJ|WFwI|6&bzwcm6 zJ3v(KF>sXF1R3s)Ia#rxk13WwQWIXig5o_(D8Ms{wFhA30t=)T>0pu7O+0G(Rx zY>*wN(pFkz$Buih;_BN}hRpYV?>=NpCon){JzCL z?)y$n6S9Gg@_@+b+16P&l3q?8;!LZTJIh_wYD)@jeOP^C02-b6K!!a1a?ZL&ahX7# zHRlgd^O!Ewf`S`?NF;_pxp3wrMSCw7tjbI!K6}JO@B#2JimGx%(CV)+iYfOHXMohR z33(2jlaOPuBqm5&S?nl&?qcQc_+$leu=TllqTue`h0uQHz@(HT40slE9S*q{HWs#D z6X(0ub7~^~jw9c*xME;EF3ppT_QJmXre|~(%n(pdpXr_(GX4$eVey!QMTvL*i!Dm0 z3t~Gd9Eq5f_F=z-qi6n(-3>vc{k9~A((Q2E))MvQhvu8Cr21{DcA(3w@u*>0#szvi zZ)Urz?>c#;^aun+YuTo}?7q0*9&J=t7HW&z=WgaqyqfdY2JGz6)XHc`Y@ra0GRg$a zI_E)CTc=0gu|NM<$RU?>b^>tfk-=O$d>#b9uE=yeCVV!z%#vRAT`*#}M(k#3PegNx z9Mw+B%%Ai|gf1?T(0=l{{aau=S4q4a`E;A)bvZrzDL%)V+30e@p6SzKr*zEaS)l9$8eiyJ|*N*62b{s4_ zE-tBHvSG+52@ht*6SJc(XCaVsiXAqdTUt#2W*Pr8O7Dv*HBvnW zM{MjE4@O0+f&0jBY(FtgT^6T(ZYRIPWpo?%d9}(-?>?Dc1S@T(ifEqlU&I6~#jh_k zhY6b=cRV4v{moB`r6@4Za}ZD>UBKy8u!KAEWm__nQ*-j}+{zq9hnoT?gt^`lSY-Z} zbI@f!eMYIQvr7j3Xq#7XbYtIh!@uwzN~CW7sn8%|gAXY6h6I^n#$cVX8UEUUp;!N9 zw$BcxHI(=)0!43FZ4=~hQ+>x!<$w5BUGR6$oRGa_)s)O@j47Q2LouRgku$9n4R~d7dLMO=MC9$ zXk=#+*Sl*0s5|DYjw8H>ADUc{~Em)4Mk z$Ns-r0Ga47uzREg5M=o>9NHCr+j5~E%}g&5rOCi!6~51;fl=#zA7@K1&3`yA-w>+E_Su~_8Es!ND}`X z*iOjw&k{z_iVFd|%YPSV!MHflcB0v5XUK$pL(-xnO`1Hc!E<#liVCbSgSgIbZ&o*b zU5o}Hm4dh~r$og!chc+}Xn}8Dp3Ih%gKZ`>jEM#f4CS;PbDW zTt`I@wCj$J|K01TS5A64-gJe=6(VkKQr~Y9;sy@?RJ8+f_vV!_2Uu32lcE7{MhV<> z&8r{mKX@9f>GKjh4*dR47TQl{f}Zoi5g z_nXw{td_NMA&YohM+_fiXI?F}ob@5rsEDtfpMYUlhKI2K_1x_5cNz(S9Usg7OvQox*q5bxD)JpJ7DhYWHu&VH41%|rwx_S zv%WE);WCud{||OB?Ls*rZxBD)`pLwn?+Rb)RiY(^^;kV{D|bziOiAmV3p+3uOuf4O z8OzGKvP%g2e>CYF`l)zTb6M)aLHDdtzwC4k8i;~GJH`hJh(CB*E5AFAg}Mq)bm9fb zGkA(@TTZWZ219mZHu+ZM)wnVGyq^{m9{;Mq9}v^Db^#^$ApyMcR~CN^zTM3Qyk}~Z z9km>vMZ#3s&W7PbvTOJY3TOZ3^CG*SiCODuYuZ+f*co$`yP+)GAxW+cNIu0*0w*5+7x`-LZTsLv@LiP5}w6Dx0K3S30rA1bAt60RG}rIC=Zs zl@&$=HwIP67Eqw5p2v4$pC3-NAa2BEnT%hJKkQ8t7IH zv2-_j18=W>hfiE1saZM~+MT$qmVj)A`yYqnzPu>cinc4y_TsbW7{C{AiHo>XUFfK_ zg#XE#6ka)=VSFMFbJH-{o(3_bvb;70x*LjOtOjFtS2dky2OGN&} zpp6{OrjF)w-GhU)?T?SQ{jzd9(L3M3s{!?%6MA4bg?<@j$}~Ft`ol1ci;F5Q-iiPK z;Pyz&Qdcpb=o@%kYP!KF+?s*2O(tvGz^5mH!g6`)f8*l+{9_FCkF}2)k5-p7u%_lj zH8|#BRtc#Q@^ERz8#$r*HFE0gs=X3kV9d(?vsiEZyV_6sTBE90G`Yxv$U&dQ+)=HW z=}-srj%ht{gX=6oyg%eda;;Y*uK>MFG-dzP6a)x|i*mvRgd$>(hRw%j6D zaZPUgF}hwLLY0X#rK(6eoTlGP3rWRiIXxgml&ciO^Q14(E-^yJMJ9~yUn%jdMt8h2 zuu1!lD!0TaD>{LSWsL?WSK*LolHs9J?`m;}dZzz4V@;^dR1+ZU8S~6UytJGEVD3Ao z-*m0KF9pF<`O~dPblX2N=nLft5oDL2FNNVX@i(3q*#g>1(mC%@s{Bdz-S2g?n_-sc zOWb6K@oP!zMp7k>s+9Hh@jr0o+urIWug0UfOog%2crYvYKtvRFaKO^;%+qGs1oy{1b+#o?Nv1gW2cBr zHZ0n;(00Xj4x013xM@pfA4XGuat-Tea9gx)Gezq)>N0R9)^pE6eb$=LpXJa?`o$$l z`^FK`Z5TXUxg{p7&|_Zdjjv;^D3IITlV69TPA&O9 zp$zRiIA=ClA%$Wz_M=-@bu9}#Hs7WH7QG*H&VxKL6UGE-5=M!wzrVg(oF}5;D!-od z<_qSEno`!10$P33nt?JCD+}VV-b-K#-v5>5Q zN;S-C{IgiALl*C^)15{I% zf`onB-HmoG_h6X2&`E8c&{g9mOV@YtK%mCDq`DRJ@f1VP_W|d4hLZB-V^^N_YZ7D; zETpspubIc%72walLk7TP@Cr)L5yWY@4%avF|6s2oS;V*?Tg1`z+QdXYeJ4Ah($BKh zqo@zpp>*$`gytJ05li`q;OT6!;3%SVUE0l7|A6*uk>(e^N&kWNN=XB$>ClyEYQ&Ib8VZy+jcbIUNa=UlfV{Slh z^mn%)G`-gGTKtqBscWC~qE@V?#rtO&>qBJK!+d&u_gvTH3O91UKOdGTPdss95Dm|v9x!OJvtgV59cU_U+_SfHo=;&WT4 zLDq?|kGIdCVD@Y$QKE@I3g(l7-E^betLpb?2tz%J(R<|LIy$lZPGj2tYy{MhF&tp} z6;b^uXs;_;G_2LenbJ?}e*Hidkwtczjn&M{F_CH)~{+ zn$WyDICMXvtEDe@d}P>r^)m;)LXIjWgDZ)zKehKwiN;n%DRq5o=A^CvQ4__J|VgNIp8NvFJRGlT%=l*|k zH*aZozT=ive4p3d?)vCd+Ag&%v%!njNDKo{%g8}4BxDtlVw&VWQEY$z;_ep z`mkoS3FtH}FAUom2C`wxeV=@qAI=A9<+Vxuo@tdNJ5PMnblvJxC1v1&p7|CRK@DL5 z%0Cvp-7~@Qr+9Pcwl4kJH4c|#Efc!WbPdd0mJeD!o|pUibE7=FAlvVxU+pVGA7g1{ zn*sAF%wbjmQqYU*kZId&0g&=-E=#R98{rG9Z^@he6-!)|1-9e;$1f~j^fD4g$w$p{ znY71oiA6}0hCK+uKu(PUyCfUEeT}4C8>ZLigB)g{2yP-~&I~dW3-zOj(2GyEH=EHE z?cxK0Ye*om4}Tqc?}3k5c~B@I_aN8>*zKVUi#9+}<;J8CQ>UdnR!X1GNA2Vb@ z-|_)mkS6@`4%{dFLtnZme*|&i&F^XE3!jC^2K6^K<+~5zqCbAKU&U231$jFS%5gdk zLWOr)xWce1{kpt#{0Rl^-+P|rC&}$v$D6P|z2Bh(`Oft=nFAapTiHqg!V_2EH5wk} zmgnGE6ffjv6>FKS7R^iG^*G*8!ES~x60bbrNQbZJ1IKYhM>_rPcBrOpN`8_n0IF0i zGR~Tw-F?{@8+~d!^*5=+D`%)2El4(g!KYh}!|A)O7pt7yQIO^;IGkyo+g|0KsPlCs z;%L{j_4HoH<K3kx^}rMLz!<#1b{i)R8Y!^rt6Ls?TaI5F2Ubr8la_MV4M7z6=_fqAE?Dv?kbPrx zNqv*Eb`q*YJ{=>8#yHKK;?p`G_sSVa7bQ3$@4LBJZ{DPR?7euILTeB5VJ<0JC-Y6# zE1+I$6e92!xVsSd-stXd>-Y=<$)pW1dh!w3Sz#9o(0-IivZA0j8SA6b{ z3JI%yZ@R9?sAdWc+OcP&?+)9v??Z4hnLyr$4rjO299ieT4cVI@f0poMBMJC&0-dvHiq zEWI8q2a?S4E8eSNeWJiD(_5>&!?H852s+Lir3o@gCgl9J`h(ZL97QxzZ5%-kd%05( z^jcTtxXiOD&8{i`RM!Sj%wDDhEr|;>7_YWIj0jD@RBe_&^Hx_CTIVNdMU0B5JZ3#D zZBu$|jnj-L2YangJ~@6DTKo23vSL|M#(X78h>#&~#D(#kqqfn(O5oy*-UUjrE5PGK=7jOIAl!R9GH zy=Eoet9&=ptDF{QqDelm#RQC*h)Wot457<8hA+TnzNCNEonvOylvYdejp=dE(E{f90 zEwU1zObrJU);q9ru9H$m1r=AD&PqW?f}FHjMhORdDYb}tT1CT4-`)ILvWocOL^VQq zv}9!nQvSy-J2u%WPXe{mbh~c8N;VhPL{20l;736(W|8PkkiTZ)nL<-WAbc!aqQ+vH z+38&`_n|2n?~s_3olCi$%VEK2)~d(u^2DR@6FdO#rceCV4`~5A>_NbA0x31n#Fgr4e z!BR+qF?+iD2#f^WSpNqavRQlRQ}n@(VMOOQ7WhMoR;IV%9g$w}0C#}QC}^-el#7Ek zcW$_FH+Ip~mR+uFZn?io^$XVd%^_e`p-=f@>@6GQWiD)D#ZWgPws*4cq9Sz7<4*b8 z?E_+WrR;*#>2zeUJ4ZSamO$zk zhxWi)0kF5g^mwi=Q&;yhy|v&l#_=OM3S^afgk_69q! zJe4a@A1QbV74fNLBL6v=e9fkUcZC{Po8DD1y)4nHL3^v_4|XV3YKwHYkX}AgjS{Y) z7n7*-H^Fg>lIhex4G4W){_0bHI0n9fToxnp za~0HME~u{are-cbzx@JqGii{-S6A|Z;^*#Famx0bA_t{4SQN2t^B%H%M)t0O*y)4k zm>iV#OO8%1se?&=!JELGW3ao%IL`=#kXIk?ib2E#AJkpzrhSUj+;d!dNzL}dg%kab zS$TKV?HsD_C$k<&YQVntm~K9VFi(t%s@~D1w}Y&Cm%Y%tvPIL`Wf!H;Fh_D=I?4R( zgV=s|O^&&+;L;%SmcX8J-g$D>vQq0873XRgZU6H1(m{FC&O)wnLl>@Zg!@|fdL(G9 z@)nDNj=kgXh1+P`wM@om>qoC(ju6^^DkpH1UU#gra#I3&&_*J~0nk*8vnob#WS2r;`&6cnQCN7uBP$`X6txrZCrd4+AZHJE6V^VkpJuo);GdOqrMh5{#h>P zwdy7jK$kP2JX=%X;;A-yF&Px`_zeZ`mmH4X+F69teG~xS>*qaL8bbK{iSuEUUPJ$c z;xC*-gEm(!ibPJCag&ay)tNvOu3){kz6%kXKVeT5j3O({#p13&OnEV#BU?@#;G_ML@;<=&3@58IVlYvPz@#hHm$3E9Zy?_HYF z`42sFV%t-bZ*eU<;+(#YTN3ln{@hJN!4u>+z|$c0N_%uAgdK!Vq1iqiK=_(iDwx;eCN2=3^mkcSbZ_wxM^U=?GZ)wNP23ZC5f=qRF9KZ*~k-hSQTHpt#$9qTz9 z04H}g6n1gbeK0HOp$8N!2N7S}w(Zx=VEkvu3^fHTf(^3LioAd}FVW%W;>6SK%DwA*+J9upw}ht>zOn6hXls2zUBR#x_m5+LEEc5gBE1E?1w)6M z>PiA-7B6wrf4i>Q5Iba3NUF!5Pf*OJnq_z^ts?~0bHcGf?hUIxE$+%vE-VABp@9b% zHKUIuQrUK*WwjeGY==3cH!?2)i;kn$pa&XmF(UBb`@z-?lap4EaQS+}qANL$?a(ax z6ENm94sK=UurT>Xx-Ff-TDovW-mDZ99TP#Zu2=3LZ9AQLQNNq&PJv73J^kT_ITgcx|CMIcvFBmQfp6Q_Qz%U zslUA^7&VMw=g;7mo)RESp`fsl)&nEZXC~6T$aR?h|5yHC;{cP8k4}A|qH(uvow(CH7 zanva?wc>R`s_1z!F1s8={HTbyhkyUq*_)YVLp}Q{AXk|0^l%SJ0Pg`lF(`Ku#JCu; zF{kg_<|1DuZ9kcyZLs}MH9ty`h@ugHk3Ab>U(2LHQ^#)9SPt6}%6oSifwWCb(P~G|HwD^62w0J)2+(AH8e7 z73LDV%JxmtcbzcIXgzbc1t_##;>>V(HPch@(;`6kOY|cyTDDTJ)dijoYfc_X@rS7Y z5r75Yu$ZIVK=>n|qG~XSiLmOEvpxYB{il1b&<09u*d1i&_Ng=AD)ro^D`0`MX|P=BA)s z7`@Aylx!n=p7#)}MnqV>L;MPiTroh<+gaiJz!D5cs)t+D47X3ZVSW;+IYg+mE8%y{ z8HYCmD>XvFZqKDL!B2>Trrm*u32o_~)Y(vA4v})u8({;heV7F9nKB?avr(z5NqBYj zo`;?h4mGM&oH2htY&ZH8Pv5Aeu7HYYjq8=NgYH{q)b-bVb#m@{QH_1~u)JJkKG zz=+ict^=X(&z5##k@F|xRfe?<>g5VWHT|&{TL48?!nrxS3k) z3gzL9;`HGe$J-P~)7Xkg*%zc5UqumW`;phpO%&!LlrIT~ft_*zI`($T;yj=1b~4s0 z4@HYY^6lEB1?}m-UPm6W_+{s#PyRD!mCp(Evvasr@etO*Q1TTLTlqoG0rF!T3}JYh z+A5u9$ui>_;iaVs1z6<_q0@>i*iN~v#++~g!IWM-t)QO%PAG6Lr^+*h*9w#0;uenZ z*E4w$tASgZs-1GnYk67gmJ_X#a9Z5lYc=_?>D)Nx(JC&N)|lUZk0i z(~ArX5$iiK>%b#|Vgd;Tmm6>yrH3Z9`(bmrq&Dz%}+Z_z2-#d{@6i`neu__x+jvMf_#3UMhc&G#|>$P8M5=Yyb>T%s~im^w9M{Y@jCju z)-A?6aWSd9%bS$cZMvBghGS1381QLd9HN28@)hL1_84U2VtM#m$Ab@34dB}Iuc%J# zxjiKC3Swl6UhrmAx5QFd%>N)5s$KQDn|f}Y|28gsa}5doaQ8JHF4$szZsE8)xzO@J zhWw%VogtPWV1DCjm^GMxHlT405C9vA1iJ_tbfmuZ!A11Lj;w=KLs7X)7nhbKX#NwG zfKp|yoT`6DN31CKTET~3gdXcel6pvfH#0+=Ga$-q%dcaZ6j&pKmpAq#e`2zI$3*NE*Rs8SsYA=?E28i`3*7YF7 zRz*V}Hs6U(p+Z&}B-eN>^U`#l$2eyLEv2!yi-%6EG?rL;Oc1%w-uF%x@l2MiGGV}2 zxVkdi31KrH}pL98(=w9JgLmlcAAHD|xTy1HQ4LVy^4pPSO!S)%*>1 zWL(s2KC1tmBv`(2)9K`YxqZVS-x2%GNBF6;Cbv2ek7tdn{4klLWVQ$@TqCj>QIjh; zB!RKPEXQA;T)DB@Q_T@ZaLjSNXb0glAIr`)&hSc1@JbfhB167w%m@^Cemxjj*)zcY z*}AF;&6C&4L;#U3E^5dEF{_d$o;G`Hiu5@K=CcHN#+GOteaEKX4cAWgJv?RxA$=Z; z^uFXqJnIBM-T3O;?4y^g{@o455SOIlqnLzKbh&pnk-+rb7}Ck@y+a(P_nO}9GLilZjjvFBluzLm)|tuVaHqgaP*@!??0Td}5ndl1&keXZ2$yVor$ z0RgCHNE@+*^OA8X$Y+i^#cEyHHe>C~8hiA70J(k)trvb@Ey#7)8Rip7uv1sQG|4+* zWBQ+koBt4tIen;A?k!TzO7OngG*EF$jFA;CIa?Oz>2M_xn{dJVO9BLEsQvOhk%Hn{ z>bD1{;go{NixD$g6aKCmaI4IBxhu6)#CLz4G%fuxUgWZMoY;x*z z66bQUp;MGcw{p5j*M^;q4L=h7H^)0kLRciY#KP0Sii~gsV3dgE74R8Pw|p@if9Bxa z|4bq+Hi>OCNqtqaEWLGN=`4+LBqU+`!2MFC2ukYHU1Yj|Du!pUM6t57a9ngYE<>}+ z{W5zByW{&d5P+dUf})xBlN12k`QyCvA9lqeLi_HJB=6_A&hy``5gT1t-ZLpqaYJn6 zJ?87bU^t^AJ8L{Dw6j0`!RlHvcX*#JV?ecr<*O%+#UZiw+okh4u_iAP2dQh9{L@xR zlr>68<8M_LdXKXqVh5Ir)*n#($Nc6B>v9_0c#P~1lU^t7EF&SK#d&lFVMBabPo8|v z)N2@!UZ3p*?b;Vwusyc=AvQ=0h47u>a6rH?TYvF8jy~<$k~h$PqLSCt7-*O!#cT2& z(iUsK{mx1T8I?P}V#@YIzrAc{#|qxX6T4BNs4$Da?M5pxq_#i0$6{v%p0S5}Xm?*BY^2t4H`<97=ruE9@-gZ!?%2KQY*J)`(07{sQu{?eF^=<3q6Ks zMvwORDM_}K6}E$A33GevS|t|qE7{ob2n@sQz4U!_N`kuF)3JRv^g~Rm61YmBNr;$2 z2DO5gZziX?RHxrv#6cc{rEqrM4H4J$$!nmh60q>!tXVZji)c9oN|2ZI33pFl{6odvLcV#2%0wFdHJT(Lg<#_+eJ z3aEIMR5taJT$y*xu%?3F;3pF9r*)ILN~2>P9T9W66sM|OlmLTMHPA>{FxcnI6td8a zj@MCNUPYJejma*zLlo%k7gzKGrYj_t(KYvPlRm&*laoy5&6WC=Nt#N0p14@ODYJH1 z^VeyQ+0Y>E7L>aUmEjLQrjqUljBN4W&$PTGnlEP-mj`KO_W`_9Mufup$N=e}yxQO# zhK&Mfg}8y-#_+QE-Lt>b+K_3Fi?-{P*-bP!npUgCpQ=XS#%LBY%`8i;q#+t%v-q=g z(H*DUtStKYK41ZmE|A!I=a!V(2cp;Bpaybw#zvTcJsQ7z0x>$K`K?LQAMtio_;qQ9 zIlHhu?=#@DP6;PbS<`=tU4ZkMj~TUmO)z-(BWm6Ckx)*lwYF2pVKE!Vvk&SlxN#P3 zRaKEzSZ{_*=ClE0!{{Y3teWnPJ6R`@g8jx0bLl6hqg!&@v0T8gN*^V30bhBVDUYR0 z$_`-0gfKup_OcMR??LnQ2s>^EN^I*TYMO$Gbve-v4Ud<*NQTYiK)I9$X&sB#Ac9= zw+#My_~{<|7QVI~)8Ahx^1K4L5jRkI3u!AiBoxJ}7F_=Q3MX)eghTZAssO_+C4lySR4CU^9=rOGvg$x_7nI(Bjzjr# zmRQ(sGnI08rW($B%oJlE>F*E)`0%(lR{}OMwi_D&IZJ36_}-xM{-Sui2v&HBa@hH> z_4FR^*lG>(ThBwPP+Ap#l&Vl0=fR3Yv?tDe=B#c5cmbIG&W_ILgO4%0O zVGu)n6o$~m5J_P0E!ms&w$_=_z2(>W^%pQky4uh6UJ{Q;{A~@KR)-|Q9r6wuP3bVN^zE1$6=Wcs<_L>2B@GzrgaG3&Lg(QJYXHlJfZ_d~kjd`ZxYKH}F1>xFiRH||J~ z9_wG+D(>9BGaBl`%);C}teZ7Z7nvO3A=MJw+}CoS2_!10ngDI}y8gLb@coj1uBoLj zohBoW^XW@YYM=XL0J zvk`^APVzemW|*?_Uh8w}cOQM3^{j6~@|DrYqYkbq0^b zWZMxUFlJXDAET!Ne=W)nh>%CA(w8#2g$wWg30wVy0L`+PV`1*rptYzcPp=aXI9E)l*WB$8=H!{whU}J?ZCHz}dHk*p z6k%NbfeGFY%E5OF0^9do?x)%O+MSshrqc4Ia~NJ>YT73j;m*3iFa4LGvws;Eq+)>b z4--XpZsy2w++j& zQ5TlSj#(ieNtv8+hbdvCC(m<@7u?%hDASTt#A$B^gF`Sl5be5AJH@myQrpaG<}-nE z&zZ6mS0>49yDR8Y*9tECq&(11;VNI*uJ*F?sKuCOzGAuW5Km+?Z78+R_*+jm=P7Jy z=Gkx8QfK-TZ_0&ao#&QESgw6mQxa9%_=6kEk;h3;$0?~qC^2&pM4ozHigI`G(pF)&FTU|gDdbEhM(Sl zu5{=j(*B$DmsBrA^Yws#J=H2kTKNLbF3CN0=UF(%AvlTS@Nu`ig-7hcuj@@OcrquL zlHKpc$q!8hVgqw(*xC1_01t+0#-(9$eG0;|)L`%A)o6E%aLxV@QqbN+HrtRa`J-jm z+!Tq!q2NtSS9j5MS8_1UP!K?ln$lOakY?OPiAhk9&(FBb>Q^AW!O)PF?9kFTC2~uM zaN^I`r*+~d&^q?3!6X1}R5bPOTFLZe5ozmjZG30GJ8a1c2oNCj|Fp&#NF)%mhJm|V z@Cq{UTD7z?MlhO| zAq}lJ>m=XcY9+X>Qwas`I?8Q~0ffc*I~Y`k8-VAyKV6oiV?$2gDBKSN!x{fcOL25S z;JNPymO*BmRvC}eoZzKpx79pE+5MXPSI^tOW^W}}ltmtDyBdXd_Gt4qskD}g$!ed= z%9i@W0v$Z|jAXxzZaT90S4C9xb3dq+dyxopr||Rt;uWQhVr0mGGD{~IFe!ciREHT= z@L{>llMuyZd7N2@`DcsZd(5na+yp~vQB>7?;5dywH8c4*T% zurv@lqvwMlvMr!+8*}1%i*F5pWh$3FKNF$dT~fN6s7`&A5s6ZJ}m(YC98)UDq#sKG{cL~l^@ z*A@y{%^8@jj5ZezY{#N8?R&&ZFC4npgDt*w0?xSHYdU*9cBe|aoT6X3{C4&{Or_~# zjO$HUS~&SqWMAxnbqHLRRUUbMV#nja!_}Tno{ZTsJ5))q+aVVh=T#B`=ycX;)b3Yv z{`tMg%2^`}OX*P~5RcW62qzQ5H7auU-eZksXMPe`Fb$w9LYWP)C)ncmFDKIaL`}Ga zx-_ZjamIy%>bG@$=elTfpawImA14a4s(--a|4?4C5@orQY!b4ltrfG=7&zSMyQ~b_ z_E<(S8Y27zJm(R32<;t?=#{#Q5h%Yz2PNx)j$|W}ZzaOU2nCEJ9z#T^wb6O0nx|Q` z0$2mwLYBNK{neUEDw?z?0!iomqj9Jj31EkSU3Lesl`S*+0Bd-bW8OoI^L=9AKMxe??s)u$ z9sFP#PRvdj#Iq@a1W$$XC-|iaS8p%AKU=xjL?G4dvg;z<*9Y6l)q&Q#FI|W=oBzeu zTSdhIbz8cDkO0BmAvnR^DT2GZy9Egjg$8$b5AN>n?(R~!yK7g@-+k}tbMI3P9vGuu zYVW<~n)92}c4cEAk(+Mkno7Rim^h}q)QPgzwU}>X7Co`T4`Qs z^ma2NfVu0B)LItE4=b0Zf<4so8<}=*zJM0TW_Z;2T%~%zfm++97#~y%@pl?;fG!x9 zj{hFbXxgxBO5>?ohJ)c{d&+qD`2~8>8wPQh(jz@^vea&D_n@xLW5mVjbO%4&fv)oI zQkssaF5qvAho<&<#tp<892wDp8wD4|wUbiEyj}Xj9=k7UB-eh^*o|%Y!`*_Gn5wC+ zP=D12*u<3wAzAj%duLHa4fF_xophNwLDhcIH=!ofgZbWm*RXoLZ+=XbLsQ;nI41g+ z7V-z@!lm@F>C+OPuK_l1)QLQAqv4cR;et8!u6MgZJZaC%{BFPJ>}zB&IcAXmC5 zux_W<`>ve*?|o8wLBw4x_vbS}HmO21$PA0qX4ZjoKbdV&eZ3s7q7!*7#Lmybv-CnI z)gUTr=gJe+ILi&}`CIJFR8vDBlExvM^o+J8?1wHx##T>cd|z!Yq? z2IW@Ak8MQ%(EDa?Com~SJn#F(^Lot2XU7(L@b&j{$NvbJh+p(z4R}Q@S?<7h@>4fS zz5nc_wcl<~@3z}2sK7Dz0L7bX{zpio`9cwa{~C6Fzs-$(Hd&B;1bU2I?8Y8Fc8DSW zFisMR>l&e`Au~QMN_iwWOAP^ldpauVsyyG~}Oc56J+TR8XyM4qWnEYv}Kmm{D{p0CR#B5^3gN3JX2 zmn9^e`XpmcToEdUz`w1UfGU@O)MWnf7tHr$H4k>f1?{I%4XTWWMB!3##;IwQ?j$eF zp8bXX#dl%xU&av8uS&{MjX0geU>4z>JuH$=>NTtJ%e99=B4x*nrhGzfU&tP7qBS-f z6nFS1UFl44{sSk-f)(Q69qgu~Z3x7ge=RW@v#RP&N=5FL6nOeWw@Vs*lDV~u=@y5a~<>2c=W>L!qxhnMD&Kf(x?K?sDk6yO1{G4~bH2J;Nb9*VYA>qeM zrMs5pc>Mzr@w+X>qf5;(&Ik{abCo8fU(a8($n$^S$tXRGCeljURY4Y-aX-Hfg*~H+ z$GUX+9$YGcCxVQf{MD-ZlK?c>+m*QuUv?v#8h;|Y62dec>bbNC{`a}TWUt5Upj>M1 z1*Xq55_w0ro#`4_RRQ*#a9BrjC(dp!J#Y-v@Q^K1zRHRRI-Fh3VyVPsx)AFyhT!$f z5}~R$*BgVG`4l!j-0V-4k$8nNm|m#CG9}qJmSu4!EJIm;2bS5%{^7_Y;^jtjEN`(e zBYA*6oW1SWgA%8$>QwPURQ&0g+wPz{S#yhK>zALXr=_>N(Au`|t>XCM$y-z77#PWm zu%XScG(e_xmyfr#aP))HT(TngZgy;~M@^6Ux|vWKVKc`$fvix-N-^;*4_tGfEu61R zU=JZSG&Efu0$yk&!ePf{Pp6N0k9yu`{u^!)ropc4(4%{v^R0sOK}wS^Oa-#Kwcl<1 zXle!c(`NzkHycgq$d@r+t-4jiowObDjJy^!+KfC4Uzk;xDZ7uV%;#Ccho$JB3L_c9 zYkzmX6~y9XV6U3PAgZJ{BJq`RKJKW(3i|Hw%=*@>h*P3PN#&1FrI8QiYjF9`C02z8H>M67;2Yv-A2VoywOwn=Dm~G`JrKuit3c5snj{Ml zo#5>Q_b~Yxi8mhWi1`B?4jw$2RWeR!1e@b=yCk6*hDWrdlZo*1y>;y^DD=Z>Y-?mQ zG@%jGV?-opRgM@hvRr3=Oj~eZ@XAH%mB~*JJFaBOO+r}-aHy(wN#mUk-e?VLeW!<*9f4hvKUqkpT)wQX4eT;ze_Qqbcsri! znV2=9^&>H;50K$l7jA4^b~}0Gg?l(r(*-8%b36m3RUu{h4}~;tA1=IKpf&g!K*Bm~ zAPo_2qOEu4{%AMRaBR?JH68^gPvK-kvRvqQwR8r>Ad5th7hY)>^Ey>`zlcvG%&Bx% z?Ksl`{xiy_1fy39K>5BB7TD&JHPql!KAs2Nwg^L=OyVbOvdh}fnyQ;&7m}4 z!8vgM(>lM7wFCnKIfM5KZWTquE9WBlL{_Iw_pW#Ao6acre)qMwS2B-F* zcif5KXr41IQ%o)ZtATViFciY_=HShf;2IG=*y({tqsT;@T%QoXu}C5x3ZYeu*cQ~a z7I9FV+&goikil(6SKYT=EiqR7&vLTc>|=!d1Y>F{c@dQ&_Kfsot_$ApjqsRotR6#& z$ji7z_B@?~y-FoYV4*La5-*=9#~XaX%@#$0mzu8o8}koH87q`WK^C^s>5enQ0XNs< zjccjR1Knb)Eu?f5L^MV{?G%u+VKZ5K+)Qtr6W>tFHmK^|qm8RmSApRyET{F_QL-GjAJg`(m>s~< zhOQ+01DJ0=7t&qt0meV{wx>&mx+&8`kf|$S@NcV27DtW8AfaOtCn)I&zNRYt%F$LH zi^wA$Vg);RL`vMl@BCwt<{rKt4ts&10@;^8R4rtPTL;o5S+|j&|10+WwapL!1XEph z#Ki+2o{B!N&DjzZ5?1n7+Cy~W@)Gi=126_qCAEJPdXO7S4=_{&fSm{0{2V#GU;Aq7ZM)j=H}K z2V|ci;W@Kb^_@P2H`ea$adb{S|2n7nsH+Cwb2Vw!D%rNq+8%Zv_C$KWgsX5M6R(eg zZ0Dq`508_@om7^+9zph$=$u{lx(4!4PTOG_((0a<{a^KVg5r=NQJZjaPn@v&sRd0e zk~wMUYRBd@;l-xT#goG>V+mj*>G(B_Q67X*)4SPAE6PNG@|+ok5EQmOW0P3%V$n?L zkkDW;$TY%hPX)7>PlR2>r^;u?6m0QVumP`bp0*o+Wx??Ua{OCe+Z~ z!6HF3&ftpH|6u_X|C0@3|FjyUv{f*h<4x$|d!JO)Msl+AYhbPUZvFMJwM%FKx%NR7 zF5PPWdCId*9BhV;%x!wpkN#G{wS~Vx+a6a|1EZlGg#IO%ZFaWIqnvFqoWxdg7}|Ej z`6a_9Wa|(KuWAI=mw!dV7Jy5|t*Qw|*&LUY8mBi^wJbHI+Y%%oRs3yl+84Q`@q;yu ztzIWMqSL4kiVRjaL5oyV+))?nh~b}FIw4DX_!=t_$ozlfHg5q zAp(|}BNR8AqbyTeEH#^$m|H62&;wU6Cvt zhcmdKRNbOm{n>(bq3Rn(W&h0}>jj7YJ{asnQK}e0Ri{3whZ=v=x@ldq$5{Y|-;g|g zA5{yuUe9=H;1v@1KE+^M56tVw)RO+(h!Y?9W(SrvSP}4rJ7@TC(IUgH)!Ag^8b4!D47pe9(qNyf{DJ<5Ai8pk9+E-&p4cpw% zrPm-p=pec3>&^`jKM2g6NS~h7fnV9Kee=LeMiYzjBH!jAYp&?Oib`lmK2Q9<#k%D4 z^jH1rh^tw*C)8ZL$)<%CR&a6bE5GZ&=zM#1D!wY?IP|w%B9~!xTFDGfGXp0T0KXU> zCv-d?Qm-c&fVQjp&yBGHWQU0Z`!0`xi$bf;@QypuVOK3$`o#z;|u=zii zUEGBlPLxqQ&4t0pZNbw&1AU06FBfnqns}PlqbY}~DhjeNoxG3oU)Tlk`^ z7Eu*uBffIL`)(dfSMKrd5eDr!>?g?*>sj55^M_X||F7H8nmHfzt^s-7T-LS4G{ey1 zJ&1yjoNMrpAqNSuy$|a8%b>va_w`csh{}pzozc**|DMrFXs;9*j?5hMbF+t7)_On_ z_KQk}blJ;vvh63?8IqA&g5J^O;=&YJLQQWP?5IR`&*s7o z>sQo&<6;dL(G>AGX)#VV=?G&j_a3JR0vVLFqP2T`(-iM@2RYGDPHKLAiL#6ma9gdH zw6uUL(|ooud_Sb{g6-N97+nMgYRjpV8wWjWuqohQacZKEfRnm**Y^L|O-k(Ig-k@h z0(Bw1DJ+x^I6z?cxh{S~Lj2+-Do#x4RfkYtr3x;cm2VdGWMjFLM{Nhv(AK9Z!Em!k z+s*9%LdkMMJwWj%e^a$aO+84-%4bc!8*-OiTgqn6d}2H18LJ!+!S;LRmBUXV+F~|@ zam4o#m7Q|E@~h;$7O|cG6d>SdI=aL)E$q41FWK&3AWFqJE6pP_Rv<*fjLZtw{QAYG zu|n|XEgIn?KiP&0r-Hc##x}4Ha`MSuM>w)ewxULq5Zsmei9Y1p$>Fi0>bmO-YXLjL_{7MQ1N?;if-&jT#sCK z12MqQze5e8OO7MwInJZknP8jFA@|;VkFsozQU0_ z-($UTv%<4D;lOC*_JZ<3oHzoXD>N-1eZmHQgBIiXC&YeK4u)b8Zse0RJb-xfN9c}A zZiE-XJQ&A>*kZrTcO8qb*E|j#F5LYMuQu=#Z78B8GA%UDSjb~(>}9<*l#&cJLm%`l z(RW9%XD~lBvV{4FH;UV0%SMHOpPdUTB8l9i8`oPK*3wYJCl{Pf!`ia)fjTIh{qRV2 z*TxsV==>0PXj@A1l4za3FU)i+QO{pa?gtVKDkVTs@^a40QS9IvwSN40mn@w-3x(ew zyQSGWI;Nis(^o6gAD)+8RQJ3aJEn^tokiey&0qb_$z2OiQ-(qAarWv19r_tIbk{qW z7wVl|l88(|Yn`njE1^rQqR$`03T$MfLhxvN==_+sWafOUPiwKXG72}4HmcZfFpVx7SCgCBg}=A;gSKXFQ*9qF2L^uw4$D(?B1S;i z+JSdT+iPIKUDf#mJhfdYl|?d(BYaUg71hTYL`&}&or#m1SA8EEg-`LcrGT4+xTY~T zhC(%6LGd5m19Y(nl( zwyWk`ri4?qcQw3amB^N(L_w3!zQRA}qw=&L@4!4$H~ejrma?BEq$d7rpI|}48&`Xo z{HBeY68?J{`6<$b%q+Q2+xYR@)ZY3XuU%gH3m&;gpRa(HN){Z)jGA)bjhq{R@alSq zq#B&oi)5A0p2z6A6hQcD4K^)$7u=vh`dq$Zz@90?vKHE9;J(0!ceQ;UL&5(Ob-Trl zXmLf3Y2@%+b~jqt5g(;fmWNH>v;}FG&>w(VQr^ZUndy+A<05QAuwvc-dD^;-#Z>qz zl&)-6Fh)D}HKOko?Vb?$O$ z#|_s1gXh(S4CYzi9^tH4>4M1u7a}H?tZHEWPo)qTf8e@LQ;wk&K8MBPnCBlF{R^BS zQ72Cs8k|gAJ^Mo^Gf3na{PN0Tmpb1gJ|w!L=Nr=SVsuuT5=2-PG$%&BN#u`}_qr`b zf3l$N?rCi_wMBehGRlx>7!!3l^c6V#erBrG{G%X!r2T58^gNwKwm`FSL~hYGjJ_lO zxcTV0be$Aw6Du`F(mWGW68c4kxy!owEKB*mrIg-Dj`v;M5W{X*6`H)W~IICkVU86&sEPJ!N$*s7{ zhDKrk>r%{8_QkqAP1$y$hL?#ar|02&EA-hn8$)*l{_%K2@t-na5Hm3bNE*DjRY`hv zWmS&V5a>yoBMSv?r(|M&3h{^hnm*Atu8J!7DbUc-kcuu@o=TCNPjleYNOGm4RMtI^2w57Y%>kE`VFeS-4_8*F}?*3*5}=nj0v;yQu} zs^K6z%+(lyj`|BwH9xF~=Z0xm9e6s>+d^FO<_BH@LQ4KPKy+w_@#j7C37|w~+djT; zhcU25@n_)j#K|#nsi@jVhxQ<_;~LEVXvJgIQ-gv=^uX|rU{j4UvE6zOD1-Fj=S=)g zbn`^cKHR@c;$rN^Ve|9j`uqA~x zSCkKK$dhdSz9NJ|@YDS;SK|CIx&9H$RV0(Z*RhiJdma)ojC*y=qP|GB6lj*|l*j}2 zTN9{l2qE_>)}(%V2b+={qdeAM5H;++dw2X=P}O^aK~_>b&>uTHscfwH8d?Z(HpkC? zNV45D^c|@#=+E?*{jAOki!$bbCkR-*ltF4k6-5PG=?+52b^8g4Rk+LbHJabvqfL4;dbHMtPk68(ymf z+fc6`r#jGo(M4u#9+60?DSSi!e8WaYW~7lAGvjqwn7x^sWjXK%je&0AlWUXDCr*Ea zYCxf*NC(4E>qDZ{et!i+n(l7LCQc{L(;i&)+1kpB&ySCff4kYMEnbEqLKPz@$Ap-> zwNp`#kI*#U!38KQtcR)EH$Af1`d%lPlctk}zDmj_sl!0NKu3a{WcJdpPfGCadPD9K zp1(YW><-bQM2~P~ecaAYBFo9BvjL=S$;Q$Wb9PFG&;cw)keu(h+Z#FBM8`Wg7%v(m z+!CuA(;RtifFI|3qaf{bpcV0P7@05v&wg@lK)HBQ!Eft&Zfj7=^AY4ZLq+Skn*%se z)Q69V%=8Xsr4*U-LlsD;XeuCH1ofq`dFZJY8wOkFhxAX~!Eyyj#An;u#ToOsdW}kg zZjd88kM9p=G=9ViV9vS!pRq#lUG)jdu&Ki;D%TO^R#p2ih&J-jj_NCp9z{f9I8a2%@< zBoY$wYxO#W6OGZ`?!=td#0FOo!kdEMNJrFGkyPb(naz_R^)?hXdpxXko<+A`hPyUe0~1tNSb#ahTZ4LL*@K< zccyQ?jGTd^Ps7Imh!%%GDUKjjC}S$jB#uY{LWwV2r4BhH)9#NZBfmx48DtC=h;MSUnSt)Va-$yHP+?Avt*d z@r!CRRHXnURx9&@7Rcb0(cX)RML80aL^+;vgI7GjPxeA{*RX73<`-o- zbbxvr(nvyGlm45>iYW$Cz8H%J3BF;)8e!;fHTthou|0C$#=X=+!J=+CHs#d%ySzrj z$jf?#Zisq~&#N$>E%y}I%CaKyK7S{m5hKu5C4?vcIyv*pR+#TRw-3o<->| zlxBao6nV(g{>~l+XpU-8d)S29=jT@fuLCn5$y~+)ror^X8-aT zB9Xt-r1CbgYUDe;36pkZQYEY*KX-9`x4o#t$L7)i=TbfXO47-~zW5Y zXgtUm&59+XfXcj9rbK>Wv}Bvsx5(RJYSx7omkU!_zCE&=Ng9TOg!7wwVr>%`hB8gKD;~G0g#_^zRJvr~@W-Sy~wN8to>mX?= zNWab1FKSymZ+bQw+i3vWf}WmFEKE#BF>IQ;zv9oEC-KWX4cR(hT{7Z zevv!Hn#gGlYPESq{y3+Gd3sn}3z-+yryxuTu zNd#J;l~n&m{<3Qr8VKH0Q-a@bnsZCK7Wo+Cdr7)u69>t*c*o^yy@4@ZQ1wB>J}0|M zvMfnD&LUPM`IPjTLaeE!Z3tc_ zc=mna7?{z9A^1}M1&}+z<<0smhtHPd-0Q8BBHuuE>wu#^v@!4j*Mmrzed9rlu&eAV z($jNGCxTWSUq!Y28r@?=9pzw(jghwin)Rg!<%sp&&c7L`?DT15+yU1(~ zyo=50eo+ z@31dY$c9Pqdk(@Ee(M(5SHEPY|I z?LZ5{2+0f(FRsm~Ma29SJ?C?NL0sqeOhBnb7oI^SZH`Q6R9bNz16b ze!SJloSX*LXkFqsUqN;ypLb|bD%=z4F|7Ic8qR}h8>Sl*6X|6jPAi&W?}+ud$=duW zv3zW1l-8_Z)L4Hy<*(IYC+U92@HZ`65 zsQ6&fXq4P4kyVSPYDsFD?%4*^-*Ha10{%%u0yU_asEos--L!KK%F?pe>_mbS^4T?o zac#Rn%FmNu;|M|EP#^r96q`btgoc`a;$@~FSLr>MbML+wc>+)zhQ6kiS1zF1e*dV5 zv^UoSL>kH$n5r5{o|5#6jnUTh`REbW2KYl0-6_1&hnAzxlczgLD=$zffFYGI+keW6MqFIFNbvboM3tVv<>Qp(oyvIP>;wpjbfo} zT@IYMU^7xW$m_Ao=jRX_DRewMI$@!|WiXaX=+ztyeUd!+BaQ2Rp~TBE@seYYCs}sy>%-p4+PUJj8`Dm`U@*gl%t5Ep!#-IO!58p8B%C_s0 zZlW9ktGa1Xe34wIlZE#spNV~R0SNGk#dkqejHp{*r)8a?IVfCzHb)%=OKSA~LxBOSnP?k9^iaBHP&AI#exCtzN zFwT5(@>gVEsp7#Azf zRo(1l-hshdOp=^P_*nqvFH!5v@rTJ7+==Yq_bYM{yWXc~==4T2uff5e(-ZhJrfleu zvPm<2vYb>>$D$~QnLyLvDz;fn$2YA=OtxrNo3)^t6iEZ^yVx=U=`dk!-bH4d9uK>$%2=yb8Mur=~0xTdy_% zNFtYfU;cu1~Bs3-gqjZnc#oyU6LxVCvm^DosT{FKmf?o6g<5mubv}@fUCUh({Nl#Qm5S z!)HR9_@sXNc~R94{uAJ)_hon26N-fRU3nrU1W*9lz?eYpoCbdNte`OX;053i7G{QoSpP`JuauuW-ZMgN-MqdI}tzoX7R82x$Su--A zP8}ausb@EKWNGs7(GcmEwtZzA!XI zg`;e6bY&F2I#NGMG;fg~`(v$@6!>D%KzZz4p{>;vJN8kd^XB`VN)J4Wx@xqsxc0zN zXq4CK`4_@ZB<d|MqHykTCLpkJi3&qAJ%+anv1| zMH2oRjWl+)+Bm9|-)&4Gn{LdQf=u(<(8RUuSCmSE`>p!m>gB0JerdHKiLZ39r9>Pg zO+NVfH7FcAA)uJ7Z6|*nKrc&lb|BK@MZ|vU^e*%Q27l%qtrkWtTXmUwq4t5p@sdPC zAL9onIRl8cHc}tan)PMjEN}~;LaNpieMmXRHx3aY!Jc{?Bm2S(XU1zLJVc2!o0@9i zV~m*PuYw{b)wATH;U!#ZnZhBL^0i$9=^3h|Dtmj*=9ctRUv>5X3OWR5L z6WXdHW!Y_%uANlaJ5<^cNrWRlM00NoQb{(XU;_ja;!hMNgMh$?t60Y`&S#6i{NP5Qn=3R5$o|#nx%e} z0{*XI)kVyQ?Qy_7VY<^<9$2?z=# zLie?huV_J|n zpIlkkNVlkI?{9=sV)c#11(NDydswp}8xM}vK$x+v=WOCW_5<|4g>?ZRl9pp_7T#$B~}Y+f4*nXs<;<2f9h6YJc& zwgtJnH5Si|`BJC-q6Ak^!O>4$p-wY6Cc0}+L)8ylX8tGH@|ipA20AohVni&zVM~q* zXrm26qZWlZTQb_7J0eX-D>S#?6h|hS--}oNbK2`2wsA(_4=0ibF}KZXC1MtS+vM3H z@F%kZHy|93ZR6heJ}8jgfQyRc`f%A~HpI5pUy_-OaQpVb>zB8Fs^A$4PxhN9MOynUjw5SI4H33<*eV|u(r*o`-0hq$YcChc9HQ_$ zX9+6}aDc5A)iRJWeR)k0OYC(Y%*cRL!iDLCv5$<~1BW$Z$e&UH#N~<)T8M=!;(9|> zx@!Uk6@TZW7DSo9PyBlH_J0{+UCGg|oAH?i40z>iQE@<|)GF5AXMJrl&$k@qYF%Q) z)7sRNa zlO;&1ZDr8cOO>ohj&Qm2+~fYs2@-Ar0snGRffZ|?lNfYQ17i`ekul8#B0^xz_%O*IuXDk)ob%Tp0?N5^`9@uA0Pz&f?lE&XdifYS2Ha z%pZ1CUB-<=Q^N}!p4f(w)2NY2V;!b0q5h~}JZ&eUzAK1&33i-o13D~Rv3M4Bf4d)M zHRu@xz#-~w$M3VC;bm|;-EsvNpcL5FPwyq^0cb<5cRrHv_!~^R2ObQY0PB93SVU2%>`LU5KV0Z3ZQ(*{X+2!J1+IJ1g+GXO* zCpd3t(Y*c!Iw)t}Zn$3!3-Or?S~vT{O1fXv7cQG!w7Y(>8oGx+)>k|$Z(PshB6gt* zMO4*03c%6}FP0S*55=HJ_Cw_UGwH{Pwf!4cL}7;YH_D%z@A#p;Lz=Ncl^I2j)Nfy*44OL`>K@f+lcxq!4uvHnvlmM+;6*(ij` zYiUkplqCb|yh-8MC|n)g6LGS<0E)PvCop-8lY3*8HAG`ZGGwSTR*wdORQUVMH6J(IU{QGNKgK3*y&-ajD~SkAIeEaO zeo@q6{S9+K-13!laFG}gHAm#4`GBx(=^LiDKwm70Vz8XTWKr@|)DWZXc?WH9541ZH zudVk*ovPYPm|KwI1S02@WXU{8=a_@F-!r`pt_RS(pK93-8;r~Rha_B0GWc5a=nWaa zjNCKR!476fE(6yf%*ApKbpjgX|0sceSC)8tHHhZPhA*^t9?-52fu~+qxaRw{>T^sk zIj9Az;MomYQRbu8ILspp`@T85arQarO9}FuHh4gK5`QG?cjw`37JoK>g<38P?P*p= z#m~^!DwNG23nPtir#KLuHu4@@s_rlmhR_^afa9>AeGfZ zap<_={}Q(UbA*$_7*B@NqR>%%CK5bv+fluFwq!^{+Q75iz`02T-lr6f{h$;hdJD6V zsGq~|p^){-N7d@X23c2+J}|Iq)9qVmT^sSvOYHoJx=D$>|Hhgw&T;WqgB5>QDhiJR5pIBG~`N0Z;97k)?!e*p=g9h#!1e)?#XcIkikbY zTjCXeS^Bj#X*!?FIljYzHHWL2pXWV)AL}006bUqb+t&)q`6ds;8rNbr5a|muGQ*5p zMQiq1n%Zw`o0+&(r#lyowQRfSxEsRXv zyI+#j2ul<|(3eLtLOgU&3ivZa74rbGiJ7EBC|xh}z;rsX6ncAHpyN_S{xI}dgJA0{ z3#^r6mr)~;OzeLGr$6=W1QGR?yZ)x)TE52Y$73?}(87tZpOkK({QW;B`wo8;o z;xRtA-S?j&(8zCDX|W1LCwt4{uT35s`U|~q8nVT#Y;k?o9b4*|jltOngrpq;HY(oe zKB7@w@jsLdOItpk{(gqX52~2~w}=IEnQdvjHa3STLM|uidG)Jxi#5MJY%bmmNBAKD zf=OC$+1h{L3TJJkQG|`-JO8O$7U5z3BM=)!z zd53qbe)S(Z^aDF8J?3{C4%+kWthv1e$Fpr#!uxHZ<3SwlQ_F5Ia2uSB+wBA+0a<5( zhzi_2WHbv{Y|er~+;tA8Ox}}qUrLY8#Y+qCvtjhxElz1W9u2cCnj6AuRyi=k7t4l6 zygy!I2v3|ALP*+x1a&@9g&?v#`?#bYw;G*3?9!8DWUb>g67E@sI+9MZ@F1`!DN?N^ zfmb+-^SG$9pQ2h~*;iVQ`wEKX@|5KXsT84*JiJ~a4say`9K_A>^Di~LkU=xnYLIpj z?B8waB(UQY<68=+05~6;Q(h`-Lg<9|`0ruTX~Jl6zJ=pQ@IR6Dd_qxoCN|raghk}Y z@Cz}Bqm&Eb>QX7G+^Z-4V_6n{ViY;iAsUW|k2N*ZV{&dLD1~gIJY%?<_XbwvF&q2| z?H)m2XuNZoozq737#LG6c_a;PP1BY=O)U>@LZl zV3Sl_M2K`D6Dx2FiAD7rmgW_P%=MtZu!KDWg$E{`p%sJVgdD&m+&cbu{XC{_*&zaF zqg0O*S-2JDlLWPb3mLzoeq7rxs+=XzD_Q}bP1_IS(iK9-UYTl3>hwP#7~BHBho$wX zC>`hF4$=09_m>V$I<#evy?6x9&OM3Xx;AtXzOoB+`Z|aMJK+aOspRi1A6_qc7;GbL zSh}vms{t=Wr!Qr&J-#7j_8kn z(ADDoA0)D68_l%`rR&(-w@=AvT?=!f3-1U{7qWvguCgAaSNMb@s?C|nl8*61wix7_Mt@arj+4k_2xZ5MCHaVhq zJB`9d5t;32&(+QnY||f|{R9Qonw+*`AovSTq zR5I;1peu_5k!yES!;t*Rbs)iIk#cGqK_kos)XeUPE&xR@A);No<%n>=Bhfmwtx!cr zXOP|GR~+?vo;uK70$v?as4`W;wC2a;42Zh&^*Yg?;N;IZp*mwMck=#w_Bec@oO*Vv zun2ZJcY1r5p98>RVRQ@PYFrfV;SvvyJmW0^WkK&%r5!8jWf$~JPf#pQ$I57;6dNv^ z?JOCvTCs6V9Sq`vWctnL;<_<)6_auzD>*Iyx1t38>#s9Z>Vj_lbE?)9Tw-CCTe_M- z|FM?qr$MqWZTj4of8NHF~KUG)%JnYZ% z{BlOs8C`%sjO6N14NBq~a(L=FD0D{6QGxJ0YP)qlO;#|yw`x^fEbxS`D%TEzqRp^; zzO9XeFdcuMZ{u;UQ?94zF`Wo`ZUhZD8=hBoz8g}=VE^`dJ%YY@nj5B_x8(CEig_1% za~x^28Rg;4(Z1QkQW~Ekmb05M4CCP7ITa>a9-e~9`k8zaA}2pIq*G7S@v-6Y zJS@D=zEStvA3E*VOVfU;&bS~P-59e_R(-=CA6ao26Nud#z4!~@Fj5gqxV=@)n`bP} z`Nc%517375f9d)NGs6?3AZi#FkUf$)Hr}cEn*dH}c2?>S<(B=j@d^uLQlgJ!3gEC@ zb{Q(0&RcYk>OxACW}5iIJQ_fB`Dba=O@Lhf3{&YWt_6?zU{So*H;kzt_C4;B{Zup{ z@+>%Or`8bXZmkR}r&zND+HQMge1#JH7fSGua@_LF7}-dG0mwO|fp4&1L)a(pWERnx zGdi|KC0uShqk2Am=b`q%8KG83Q<0HhB6vsZphtJ=eeNk#bX*-q3jiiIDnG8Fdx~IX z5OxJxQ%EaB53G9V8;pL=?Bn8(Xc@3-K7*E$0w}yEZIyp{E`=H6hv9uVb=X+iXYD=% zTh%GelKVXg*)I*?&^W3T51CngzIcPEJ95nvrY=7NCo{pTTrDd?hmP*S+xNGZ>2Gn< z-`p#sjnGMeff4|1Qlv@jRh!m`4`iYdmD-5;Z~QK$0!D`7oW+OD2Z048Jtf&-Xif}6 zZ^@{wXk65};-6s)FrBEe$|KXAy$k(IHlaQicbkNWN7sgJFM@x$%QHAu^@uTCEjL3l zzV&3&+2=nf=NC*S5>6ltHoNSQ*w19M+EF&!vr&9LYgnxyOsX96G2ZTz$gDKY1^?38 zQ&?rmh;c<$@-Xq`)GwjDp<|551{9eMV#CUM!fGZ_OT{Vo;yh4{%7U3<>Pi8w;VDvR zrL#L84&Y{q>5{voWSYvRv2hu)f)PtWdZf-1Q1uZ`ZZ&ET7A2eE;aA&w$s`!3qkzG)Q2-@QsI7H%Ax#Xr@IjW#DD z`)%Q9V?Et#q0hct#I`8idJdj(c zL^w2ogqJMZbY`BfaT0&G5g0+bfi_MPqBpNp(DQ+amo+ZNj7M(Kj z>l!M21M+SkCg58_P2k_o#%exK?)5MQW3uqy`cV!<1NO{kKhc7ELV|YuUS{*GhOn3# zdIMl=83I*y;$UUbR)1s3*hnTWCU~c)PG+I;GT^@+_&wrdJ0v$5gc76Y^|Xw&(}6jiUHw4@O1&NAx4{d$4;=1w!U>XlyRcB0 zM5Hi_y(tp@9t+87{+fX)_-BWE0PmgA4j_%)+JyA68Y7l0#n4=2wVPh0+w{glH^lhZ z@#2X&uxt?YmOyF~uxNzRl_$g5YE!4M`^V4y9o#c5EqpADw~ga;yZSrrvK^wLQ{6Eq zQJLsMeq@=+aCc~F*Oj-hQY;20?jVR>XMtJl{S4*<5f+hHWBPfdUQHOM0*BK~JeASF z7kEPVqH|TzdT}r7cla4It0*2Bhvdl%X7E&W7k!~pPfw2k1yXMkC>JPc%PS1UDDig4 z4V5u`0};t1%%13f^U-AId?hwKDs|Oyx&uq(Zr4V%Vp+*26=_0?X#0)NY{&EKh9ziS z2K&bpO_5>l&2h%KEYBIXCEOtIgx~s68!4>9Fu3)Bz#s+l3Q-u{OJ));b}JZL)Hc>5 z8~ATDq&j1V>Q{%E1@|nDPb>HGTJhh_eHd!kc1Y<)*}ZY5PwZqXJrr?>CA58x{87@? z_U^XZ1Pv`EF$o=JE3QkZdAk&JlPvtDzo#~~2c|TZQWk-;VebiUP)TPZ1~^bqrw8SE zJ#3D@wFY~zv-={uyW_fH5Onrd|6LotD3-ug4mQIzYo$Vm$ABRL@DmSW1WtLKgxk%pM}@g=hDwB*@$2TLMb$nhDdBd9VBMa9 zp$J7cw+j1vMO2e)qLj!z!=&d_o7aE4r-9r5i?X*2inDFkbdz8qSa1mL?(PZh1PSi0 z!QFy;W5M0sJ-9mrcbCSkaox}Rt(i45>)U(J%paZ1khF7{Ab5 zl1-`Fzs-J1MTov{i#fEEu^ha&~!b=Xl%Y zXf-WVMY~1uLASL0&k-$TB+$crK|V3pqUt)DQf^9y6%bjio5^&<$9a`tGErtEA3(3+ zVxZ?VBWcMi9DN>ab4_Dvn-Kyx@t9s0$KwAewYtmPuL&VycLa~wFGpEO$7alHu5?rr zaX4_d_XU!sm20vr-ZsHU&CKyGC2(!viVzuU`${1Djz8On=p5|yuwK{NxwCmMFT|o* zhkZ#qKIX7MYZx>nzneywOl8z*O-rm;##!Vyy-qWI4mqzw^GllhZ1nK1O7u;`JNFbj zM9}EAkXl!!K|NLXd!=!qe1SPqB#{Nha_h!B)wdfpy;O^zL5#+tHY|gz_lI&5c6c_^ zgFqoR`1+KM`!bK`!c`O3MZB%&k@?tq%Uft-wX)H)QTx)MZbW-)+L>on;zQvD3$(hl@HliTi%H9u&%O)vjS1w7utF zNzYd*h*$zWTC{FbA%Tc`rXdf1YPP_T&eg z>i3;74;s%hH`GX*ukcPe=n`e|3PqSnt~pQ6uxKzj6r#kw24+~YnXCy^;BBaSuY8o_ zIq+>DJW-mh*;w|I4Bj{_x?^SYvl3e@C9Xb^zAzy^pD8LS?%=Ch^@~n13p`66hO||;t-2_>mj5aG82KFPcVrc0%0kaN8$3D~$`#0wK2>~-=i7EHD z7nH@8eD9}Q*s=lX9(B))9A5;j*q&ibR5TM|EJ}SHr!Aqytv%&b{d!i0?SNqo1COAI zmE_O}_Fe+K&|iLmj(q9rRDT0gHR?=bZBAv5>huMki5XMoC-d$9KqXQHHe zzf0;vd;l|x`osq5)8EcF5l|j_kX(VfiEoiUt43+eXxmA+?*P8~=x}496$)vj`?(t|K;P>Ts#Vg|?;P$pDeg&AdA$>|Bq8kh4cKPPD? zGNL~wa&35|@${{c;Q1}|u-ZiIQw0~DQ99HGqP~xGj|r)Y9q$()cGVWoex59T zdzkcHvS{k1C0MkUmE15%$`}to+3ysR5ZgpA%w5k3E2{`@0^J zi|zHWm(-Sxl8dRYn9aP#$L%nN0D=76AwVAx&Ah&nVM=={;HWtY5**xnJ+mn`wn{g8mZte6nH0XSKlvSag`4FEAqBg%v+p9^?oJI zwu9p~y>(&TGgaVjIUq~nFXOUQCQ4=N&+mjcDXd&;UUfWotB!3i&0O6?>)zw(4+Kos zsJuB}r)I7hS)7vT~{?67?`#RLX&UdNfm8tYpPGa zh8?WW9ImbFxUTh1;wvSqH5T86P5%`69%(~AL~%}qO7hY1+r>|u*wVdMIK}Onivar2 zgf>E^8c|1=BLtfP^%h8FYj1gJQ`YNmCrh=)=?qxj#ud$wi0q*=Y45Ne4{e`Qi85MI#r* zEY?zQ)QJl9&<_#DBwLTs{i%Qey{DPewxd}iYJetPl45K9W}Hg`e)J9&=rHJd9a7Xy z4d7kzky1SYp18cay+&B9GlwmL50QS)Kw3kr#wZ}t*!7<9&Q%g8Pu=bV_!B+aT=-d8+#qB6 zll@sqmC7tc*?XzT1M`0owE!&$VxbRmkcfG?TCJu^Q$W+S?&GPbQFAuWW+3ZhScz+)WW(jo zI+xJfHCdfESKiL2t4hN33C#vwzfoNepU`nvObsd<5l)pbZ1V9`hTjiOL%9+5NLp0o z@cr}qe71PIPpwbuvl{@u*(UI+{*(`EUj)hRw^jxVZE)U4c>ai@?~EalFHkjqw%c~W zxw-yfK5^QG}{{j7l>jSoq7mdQe$BMp?@3MqF z&^313@Pdij0AVqQ+IENRx`O@kGZ07|h z(7j%bPZLt1u;l2Z)k@5i?p!MVGYF5=@MUp^4(}<)HkYWMt3fE^$^5@%fu4ozKzqyp z)PPv>rsQH~I=66o4a#|L7-21~3$@<33#v+=RJQ$SS+Da&G`U{Mqu2A*UDKm#E`3W zERv@{R!g3BK+wVNapK{jG9dj$E(<;2{uzC;e+vOz0Q9L9MUSG8aj(i-ZvPw`?Z7QC za2Hg_Onvw>)n~x{j#vSWv{Bn_tDk*}I-Hl%!~)}G6cX~o6jHeRRBk7%q)PxvTNQe9 z=TIQUZoOpu>8zPT1oAyDpUEI7$UgxrVSrZCv%R|I01!u}93S!$tWyoC|1xsshP69M z7r01I7N~0HjLfALrR&U7)JD+PI;aOxlN#W)M2?dD=6?<5#}iYmP$3x9!da`a&00?= zoz;3cx3})ag54|LshJ4Y;1lmbQ$EJa!Nraz2|D~+B2^fYraH320zCFvg} z&p#6AAq?D~dO9AZC#M=t<7AkaT72|-FwZnt>^L2UWFJx z&nwdlqZVfQh6~LEnItsYGx)IBql8Lr;y5;Q_10N7XXT*WX1UKV)rgtUHpCaT zFxewY9Rbzvnov2JHKV2;(4*iG3?4XnxfA$|-u>|Y+^0I*Y}()$P@kC=&8P=`!Ksf0 zGgon92vu1to}(A61?Nh^+0{pcovF{#$fCq38@r(du(l9VQSJ1io{)M3BX2+j{<-=& znS9Bhu!*wA!pSUDFt2jGNOV(}K}2>-yshj;FC%!Cw$+7EXi3%^>|B%KYE5}O7ZlQK zb>$rx3B^AXc%Cq|0eQ1GIP3q>#~9gQ*Nv|Ybuoc?-h6@h8N|iinx$~w5|@naJpRXj z-7IKwq8j!5+J1xluHTRgfBEds6QO}sE}-V#UF>=gdRSMie9P&@N*B<}KiJ( z6gSR3HW(~fNy1j{4Q)9DzBx16tA`T7QA0MV!o*YXc!eE{+ukh z+mj*qBV|cBubB0v$oRvra&$A@sIrugviX>MN*HAWi- zDNk@4JEuJoV9&EZ0T8~54lHFadLpMa4qYKugGmC{^?s&QbznfCAC6jBs$ppq9@xgQ zvNwa^u$A&DYsl1uoVdR-4oqghq9heaZl;Ld^H%q#z4jd427Y+l-It zEMCV7>hd^Jd7kRBD!@?b>=`KKDbKT$a-7s@mHc@a1UN*{t8b58)J};|5`!Ko< zvof+{i09lnyU*;veZ1l;GgAXeH6?L~c}!5H4CwZLwCxtIGkuXJViHd=eOnk)69eRC zK7Z3?&eG{e(jzF zp&55KDvk7128P8)5a}12AIsQNq=wP0yjwj@fo_KPNhofZ8%EGIY`vKJiF&E6Vi$QK zKS+l#80XbJ>MwoKe~I3R2BO%L&)TFK%-c-frRWSq)2;6A5!>M!Q1g0&fz#tqlt$8R}~oX$;i+avU0()kJ<#yaGHG)0q)5WG7@I49=oBYju>B zWb#0Gt(Cuh7+%-1KIOj?9xVcf$7f zwSF=@#bT9d-kk|_Uz2H(f518Z_(;tQQIbXO8o5r^4-ItuMB1eytqiVp0m!BGzG7EJsSoZVfse1nX@4l@4*67;%WBwLH;xerB8CPs2V|_kFpM zwj0>ZVX^>PB=&+&)(%n&W&MTJty|hKaH68Z2g?m*zL~OL+=%36iFl^P%OuZyhqf2* zV@Pe+T%Jxjs(Lj4HR8XI%B7T%mQM%tjyPI-O4M5N$Yn2j@}LAsHlnKXB*TmBG`5Qg}Ln+u>`X~sr^zCJ1M3%QSAMTt=7brd-MoD}b?YV{d?6|+} zR(!)CP$bnS(Nn@1er#I0bo^{wEquEKHMs|fGT!3Sxe-okln#9ly%JqO{e$Q6@`C;N zo?}z^ITY?0ID%f#okjqpkfEPEH4w9jte&oZL9N&j3O!FS2R^m+^pPr)IIW&a1qK{a zR{4lsm5;w4va)xpL!GpW{Dko{#7N^PF#e*GLPAg0zl<|zhk6xDpt-2pmB{H7{_ICS zf4(C)c<`H--Zw`4bAt_G0#!y{!FY%G15GcWnVJSgb0k@%D_|(ESxmQcCYZ{P2<|uj z^z`{>h=bjqo*OTP@DW^Ikx)bsHn*CdOe|tta-O#=yF?)Qs?4ybR7u1gm0fX{_w>)! z=V5mH_|1556pkvU9rju_u)ud)qpfKCkEv%)A8c;yS>5D%Is#P=Fe3NQqa`N8pQ$UW zrkR4SGk8;X71kp$;^Ve0AQ0MmAm=|XT)~S1*W07(LZ(N=%+#@d=HVM1u0meB zCQb}+8|~$LcdtF+Q1(>Ju!LCYnJ!sVN{?p$-J>1T-J_2bH=5s0Y`4IUbpmEFIzAjW3%0iNYJML5!`t zyTgtB<=lLOhxA?^Z*HFCcI|vY)Rr2kUq+&2ru@LvqT)+o)d{ZZO0b`- z?RC6DN!>~QNNJYtdy^iK`JZZ-p|JCv)|2sl+)0+Flr1OZzkf~cbyq6HCpuH$cH7p$ z!_rub$@QSf>fMZa=z>B?h!WTCC#Kj9!sG zf4{R(c_66z7#FhLfhu3tl`F93DJiYn`fC)>2}wmffC}!?SE^?+hCcOswy9YN4g!Wz zC5R{E6a~h@2=j=-{3Si$cKLc0S3gwq1}o;Z9#y#$HzM}F_bG@`$J%K)3*M2Nbe>|5 zAkBT^o1ui;Sn!Gx$lea2eJ3OjjuazUo{u!Z{(}FMOZ0sYN7ZuRr5g>y`ri;N>~DAx zGr8Y}1D{eB4mxl_q#7lmR#@vHI!;p*&nLlRoN*_R>#W6n zP+hki)Ts`?_Zazdz2f^D2Je@c`N8S(GG+l~qwTzifi=(~-bO6GPApQmD zbH5o-ShejiL_uexCFD*tJH z-ZsnXy`I?g+QC6tcIQ|=bTN(9?^Zwmkr>mwE=b+s;_vA7m{y&dRLE5;`8P!&JO2l{ zMC%%D_TC)A6+OV3H;x`H(8EBi{nWkt^@c%U=(kL0^7To~TMDMR2`#^yTwxfZUACnZ zNl2_$?xgRq=>=vz-)i) z{NP;65!hQ?D>82aIF#eb6hR>Xf;VlrEOEPlO^~q{-h3bucOSH3%OOA`om7s-dz;}p z#ImneH>mq`5mA_=hd;suy7WJ2zuPD>*RdJDs-MQ0?sA-D1621+wp@us<;ec*kQLhl zY~>LaekJNH8G_!l*I(hyy9nofp?fNt>C4i@nLKi52$1BIWo^YFSl8~1S$XT0nOv=SnNTJmo;VyLpHW-Qj#VuD+2wTq!-tn2n z%n{coj_G?33X1Ex@FQg;LRnfTk?)s^``XA9-Ul|v-Uc`rM|L066vzbc zlH5+y_(}U4iD`p;85?BC_l%3E?GD7VHS0IlJ8UtVMmBvbtlwZGzD&sWCkzcq*uIByoEDzJveL$~Fn6muvkirao1)Q6dYHD*=W>R>i_}2nH zL+LNN8r-IP5sZvUm*Odi(d_Ejv`FmInjJ>|Rq6LZ(aJP(u3zX{ywIvg88^bGy4oWs z#jsq4`K+lCnD_H<+N>|#rD&`q02MlRxhKJH5dJyE2WU=?HAxu z#eR7(bKtFFHQ0s#@NCh$uW}EW0>@F6u_CNvEXw=6*3p%NJdi^+3_*YX!ad_Tx zbgIdmC9wr_l8!3f4!Q*`$~2FA%U)7mSUTIH0qjDAdxBm2x9dVonp$YkRN% z1i=lLkUM(Bmo=TixiqT=Bi(r|bCU2sQyl>sPBmgn8vItZmKB`as|$s4Rv?E!7~g^T zI@K0Ok6MDrf*)!cL4%(uSGRSgl}(_XtXB?d=_=|;vjXgN`}%50&ry$g8!vr20aNQe zZ{*GyU>4oIb4j@SS%bzs;Bj-(jmncqOeNB$>2CyY?GZ4sVArVm89n_`_3*FXAT&P3 zU$8@oAgBaWt$smLw6#mXgPWuxo#94tU=s0c2@ySpYUb(b(Z{qn+9&_8&lx!$Z%YzE z0+wg}=tIAFMIS|V*H&!fb5cGG$z{h` z+TliZ-e)Y5;?Y(=%hPo1$>OZ?U;v33#Ej0Eb;$?7c4zjg0#5wIXB^5_fLzn!MT zsNAT8W%v7ywWRI`qFhC}iE=mY=e3P{8no6cw!ALp)Z9X@P1-YkS=P6_{5rN?U^~io z*3@F}$VtS_Q4|{!i@?HO@maDH1__n+2Hw^p5+TU_ZDv}QB@_4rCl|k*l_(?JR3{lOiCAD@2eT_4{ zj(qXwKA~0ycfQi{w0c=*`t0L=y79I>+U<~G>WCp|yofc6U}$1dHs7XFI+x>O;acMk zCCI+ru+`Ib$9lM1_lDzBF!)gmxQ8HRBL*fO+y)hZTdk1FI~_@lrbp)24oGN@mqKBjJ!a~Q#B;Z#Yp4%1Xx7> z?1#vdvRO{XM8(v;OIpWJaWYdT5iJg`--{}OFW~19%5EInGaBGgf^S$-?AQ| z!Q_(?lzORmT~=s}OOu^!Gp_?dn;Shh-yy0d3Fn9Sq}dn{Hs2x7G`;Q9hZbwtE!HOT zJ(WOf&2#ik-*7H+E6HlPWlu`u#X;7ALA55u=kVEO+UZNtj&TqxQS&*n(RrRnvE_8ZF&7U+vKFtmFHr@@Wva;r*P}j^pJJ6jtfu<9qp4 z48rDbVY}WTvuHuwVj~k&bTnsaU3HE`gk8UPJGE5#mce39!}&`3ENX++G}6`|G5A62 z_k>oOK?nm=!Gt(27ib*A)w0&!ky;TBx~Xk;?)s(=V?tpQd^y&l1wHxk+^LOrD}^2# zFP=`-gS$?@Dn<`1sX432Zm^YeDRbXViITKI>=a9M@vT4m15E^mk|0jL6D_w?%SFMg zh5avgo1Y?f7?uS$YN+P?A2*@?5*;W^yKel*lnnY2W2FPHvE1!Ugc>`YOByCi7!HGe zp|%kCn^*l%M4JDoGi&l?dZ=J4=5~@*%ePMK4X!+dt66#h6 zAy;yne2xqD~Cs@@}+B(oCyhFQ!J2lY; z(6IccRR})tHl7+PJL7sLe6BiP9C)(hmL59}G&(6r(o0z|Wp{hB3w2K;#od*=v6q$0 zpl6-cIS9>njMn-GKRJkVBrbV|PUW>RxFadXS`iuB9SAZTX2>3so zFm5s{zQAp^)p{Y*YKuq;ppT)aY$%IFzdZKQoiEZ)!*ZL;C4cWc zZ>@bIfEXy{EY!wjSbY4cN-qh=9eK%(BV;Dp2+6J+iMit64DBcNqcQF=b}vJJ5b&_+>UWFjy!=DQ^G7+(hiy$h zQMw9~ki&gb8S6PD)y|_^2vzq1)-wT~4JKXfX&tbIEik$^Jgm6FSmom-2 z)DC%UEfr~CR-1Q@Seow0ow7g}%L}#8kuD&OewDij~lh6#D_`%0fV31b~ zt???enerV9H}prodj2oc-34JqDl&LRC3>$lYD=w^Ez$lrR_Z?MmV%PD-Y{ojT{nec zkKsYeRMYjFPy7@UU?fwG;3jRJqx>sIz6?nU8ce|q2O@v*z-Z+XI^G1@4-n+{t9fL! zvj!mqU)Vm-eScj?Q+?p)wY%yHtOaV2yF1u`TQyX5;?MUNy(r^N-A8-Cz$Y0HYM%03 zh0vS(&1JYQnV1EzN;Sjb@?N_e{PUI!A7qq7g~%fhQ3Q*H1`8grh&jAE#J&#RdbJ+U zUWkYPB2@AkBOkHQZ30Qk!!^==aeb^0qphTTkKny2H9K505Ve7 z`;@~GU|QLK1WVt5oq7EI^uM_CHn50Ux8V-8{3Q|9$fSIBpv~dr`y3tCqO_dUxF=b5 zVSlt|(JLO1Vinwem3z46`c4Aq_*Y5T3sO=d`JS4rlv6t=7;I~Ym;0ZnVw99Tpvl+` zM~GyxC{y~HK0&=)Q@QcK4vCm%LB00;Svahz#N{!>S)h5id{OvK4v~5oL>FYW1$kxU z)pmE&N*m*SL7~4uZA=&Ik#Hsk364`x4Nsc;Z*!TJV9BHryw$@g54B&c&Xl7HmFvM`-q%w&fum~&~Z)!UhYDnfnOJdiOHfWHU zes4i_Z>jAu}m%h}zqfLJvg{tknvfEW{#uEy$u|WJR+U zL9@gw8H-3)KNtl4z{cbw9KSTBw4ID3q&N!QOiWtF%Jo?1tWWP!up58Lvo+ARkTxDM z(I-`9WssSIiNT_Ti)mOmi=)4No@P&})0W&L@_n8<@$LGyzv>8^3KWO?Lx!P@jpu@% zX$Dm&ToOc%=_!KVe-;*+IZx`{WE}^u@6n{2yIG*?)`Ld!T{1fv9nT10##Ck4Y1Sd- z0@SYj%c5vJTQVi%vEC1CVjBK46P6jOTnvegs1pP2Z}J%4QFEGWe{Dm4oq~h$?!I9a z0T^J4qsPe?<3xhMY~T5EJ-IqlgcN6sHW2=+rg`y?UmMjsij^4{p@xs~uYQ8J7XgLJ zV2<`39JOyNd~H@@pVP=fQh-!= zSaD|AS-rmt^}NL_lilvI2l@(AO>?QdX^RqQs$^PIul3o^t9a4Ef?7?A$-SB>t7gye;4G=D|h#t!Zq?71v^n?s|xRGGnHsN z)Y3>x50)h#+fk7u$`m-wlk}3%sKCa6VVDlHFJQK?OCdV2!SK&9L4h5CQg(6Ap-nsq zZd23_u|Ly#ePo9aFN|>a$yTAO(4-0cD6^RO&6!{OhNT{L*b{{DTn7ds08bP*H9q`t?K{x$y`6Ut`zId@^* z&FFC(j+by<0OCL6#CLc9XV0X*B(-e~UWRcEkGAxy;yidhMb za?#aMr(7B*2apQ2bz62>z{gj{tmAWp)8Ka=r51X>G-y~9B#gaf`V6c(K^RhwMtH2H zD7ejRI`-xZ9l`RZfYFmJ4F#tQSsU-WakV2{rU{7q>YQ|Ws5t7qu=1okBf!oD8Sek9 z$V%B(Iw36*)nqZsENU7o&X7`gI1znkL5J;XS>uCY9Zu(ynJWntdT96AoJ}MqoLS4n zFjg*yBTIVT4?z#HgNb#2?`Gz5Pf*r92b~W8fGn0uqbxdhmG+;`O*KVCSU+ zUVwWJYT23pwqH#aZRDw*?xfD)*XCGSJ+IiYli^XazvaI(qq=gYZ%lf79LgI!g3MGl zI4>@!>5!fm{1pCbT5#U^G@%V7P*`Tbq^B76a&z;I7{g;fX3cfgp`GWXc*omUBknja zlVq@*Xa9(fku@ZK3@s4yiLP;v+N{_%gDiWhaH-BL1(*vLJ(xZ&tQIZ~d}DHo-2G!Dh$+V!{We5^Z6MvX*kMR3jkE=a$*sn_ z;C{GyB$rhXsB>RyFVOMnl)6W^z*H=JI50(}B{Nj_!)^%n0XCRGAfQ|}z~Yutgax-= zQr++7PH>*Z8dA_?!Dg6DC|Q@veL}5@GRH8@7CPgt?IpjWS;t+ACN>%rUTpmOuK%K z-?y|O@mMf!kuvy-oxi7)dkiEc_8mLN_9=A5PQ~zpdH=Z{C6mpYygjq zfZbbrp>mP@eqJ~U_lWC7bS{*~HLZ1Yezdo=W+^-pNvF11EO~lgAWQd?hHV1hOGTVOUX;rB zHZ0`<7zghvF%0>ceUWR<*#2Y_kCuQitD0t|s?iYt&`XqBvx-MX?SMtKlFK!#@y=(l zjH!kUz0c!TbEA#<+Cr-rmo)^xy2nQ*Emm`S{AlO8jHxI!XHwAQ5oIw|4E&v)rWl%# zlLtTl%U&Kd2yYq|gk&r&NU9V?@KSg9CZ*z6v}Vnm`yLlHhrX^znvTy~AH^W09iJTf3G^ZG zq6A}Sv1G?#ONszo^f#OUL%Wt*c5jz6aPk|;2d@HN2uRGa$4vQpnh@3BYCMg&$+>jp6)Gir2$n2I%57#>%EMq5GrM5i(sv(ohxM;@$Zig`Og7B_3 z(aj@Y9X6&kTMU~lVBbPi4>E@^VA(l>drwaq@74KTh@nJPEZd%#`R6LPe2 z5b1YfpgDj5t^9-LLm*Ht@FM=J8m2~m&+mBTXlCzLO8IZ4@_$9Z?Yly!(k~hEq-<+f zc`x~PdXHNaWsccsd#>H=kNE1It^~x-Rd8*XW9c|4ve|Eo*7d8dI4t#J>*xbSDNj&y z!&9cGCtN9@5nSenbW$PZS_-`0qwgp0$m>4
oy+g=O;zG7#x$*5u{ri1z?p#Zruu{L#q-WB-@`NC zdGlO(=eoxUf8%R#+WqrD^%P*);)Ft0z;!%jgG4mwQFceDZn07G!9!!I*?oyIoR^;q zocud+2Ic2sUl(&^;(qweS%p4U6L9Gi1Q^y_aFj+ktIHx57bnnfMdXersZW!byy7>e9#hLPHBnl{ou{y+Q-D>`Pfs>tohlYOqwLmRb_9Lvjka_j;uY{&kZ6>tXq~ zKk9djW_PDIVriO_KvrYk?04zE!owBWc03Hw*Yu&Cln3#PLOqV=grp?t`oNU?#m~k^ z3mNh{9dtcM;<6#WE-URah}H-@g}*{IvIBz2{VM=2nL?rPBC42(J+PBYseriBigV3 zlYX;Ih3p7HmCDjc#V%I&V^*~Eps42k7YlDEb=k6<0FGPI;3{@H_Mf17;uhd2;oq$d)SgQnFgdqX{O_;HBi{OR^usbgR&$=#WqbV-F(*X zZFX%tce1!yv5uO|r+R=!MkYbyX3R~Ijw{e;jd=qWM~waSJTVb`xmM1^Xb0j*T`$%( z|HJHCTQ8O|g~64RCa>pai|K{;o#QOyV)F=XnOjl$jJy!res$0zAUdx3ht_?<-1zJ; zngTHX(mdfd%s!VOOqkoREzQ&9_xPlu34`%ddzjjF?R57@db;t$ym}f zR23^Nq#cs$BlT8V zz#M)Qs;jnki~2xa8LsJ->(Mi44+V!?|2Tf40Ua<*A_&v3}kI^ zV;IklevuDKoBXzf&t&GzeY5Jij{LniI3#CEXwkT3xnvG?4x6xaxOT|yXBp}FBZEWn z#0tptGEPsLXRtI|F2Xcjm~;$VFoE)-4vbjJ@BmNSEZG9!ZW?i^mQVn~!ry)ZXlL$( zi#R=sD7&2S)kqsMfOdoJwfJ>K;;dy?O)djjE!w7!(|Rw9mgY|wqtwegrU|CrRz`cB zP>uC%<&hPyZbe!kxJ`PK_EWU6X^ylAyeR(HInjSLZ2Wr`_HU1xf4#&H2G$QYqCPlL{9GjN6UeVly#;!SB9)6PUhsjOa{lLDg4`geET!hW%}DU=IYM2-$S_w@ zi;Xs!B343F)=h$k6@juDFa`c*iq%4!Q|d3!gpuw~&;PMym4_P~=9gd|^!lSTQ>hm>wFwPuYy4BE`{pML7}f zP_-8)sBTz=5u2=;dj*m$U)ueC&qM({?~R-U2dmJ|{DX(!b%9^Y3g7$icNBF0`Od;P zcuALwBvD{AoqKV}jxY&a|KU&U(}|nK|MT_#E2#xpcztYFFNJ*167GHkA!6W^CMpRzr~FI?+Wr??Z+Fe0GL;3y57L!VK4_xXmD z)Jv!MK$zZ9auA9RkZy~UMbgLWr!4o4HM`t)oh~tZCW~XCO*A6a8eFlsG~BLS5Pm;!#5)jvC9gfG<&|jI1_+F zIWL!fpvV02-_PO~k`KP-^L=BPL3r?T|E;5R6V)Y*z{Sz|%335p&i>L#X*yx+v0jND zs_E|cE!#qwmvH~!^7|iAhpQgEuJ9$RV%7d;yu5V{UFrS5EXGa5&46?CMs1o1^b7Ubf$aq ze>fu32Jgl1KQsNLBl5|mjHsn$QAoxh6gxn>h$9C+{o?qSeRri1Pk$uWs66H}vN$F; z3il8qY)3eHAJR;*c+0@MS-4q@40qpuFDcsxQFbaUB`2s);72y*h`VShQKr(I5}WV+?PH8z z@Vy(pLKyS_?K5SU>!3u)69&Wo10|!s{2$!Nf1X+h-G`%Uj?Ocl1}z{E?n^))9aRSj zmi5j*H-qQ)ABDdXG+Iii0_l!H(f?h#^EIOpYwShyYZWs`R#E;_$&+fys2K|VNQtBl z1GR|5tXf?Q{~AG1@~bY$Bcd;?EBwh?tvxV0EFQ_xBDeiikF%kW;_>(->hYA1c)P_M z{kHn^_rE(=FO}+NyyhHn<2A_fQatwIyQC}Ayv92Gz?7&Hr=z}?!8YU_{!4NZQO>IT zC#DB`T7ug7A4l1nKtkY|>X&s=NDr8}-TU&?4A2CLFtr(YjT?Gp*gv88qM4Uxir?FN zv$Uzw?nEKc6ZrZo_*mN4b{^zi*wfytiY!_a@i!c^2(gyiS}*AS-HkaO$i*oL7xOuU#=>~09#+`E9Z^^TqrqE<1K{HSOQy>Q>ts;g?K_pqE-Anl8#?9=1J5r1)Q-X^W=_t2lNg|FcX2SxS z8?}`;dAOwVv|BMRRogz;0;fOL8XkqgpyT3w0w^ZE0@+<9!fjZ>B_9NIQbeF`ayeC_ z(`qek+^eGonvs%{#v`;%J}I{ouCN$pU{cJEi0}2lv6lq^)-ttm7xo^MrJ>J-;U#Ala9#YhXbU=+Bma)#4OJ6hsNS!#cNIC! z(A>fF6e)L$MWPAH7gVa1;{9(w@Bh4G|C?7bXORJmDfS@*>RJ0_A3qkx7AfOdiEbDC zTHd{)aFT?_WPxYdwiKJ==~Y9wHw%l7{N3#t!J;g*b}{>$%sn@X9yVGUZD%J?GoI-3 zHM}fu+LuULqI5+-89sXKN<9QVt`8)CRRHzP1!t-ED>T2!aC3FgQrl3%_a22=Q$=zA zPX*fdI3~e9ULoXUQ(K~NKryb+<9T#}-Y}=EeyUUsWkA^|R>`X=O3rxlK040nuZD4k z+@f99&aJ4RAoxDsRHmdq!1u5SUf9Tf6u2r&Q^pj+JTy!>m>|8dK8n_&-%Vt^eN4ec ze8Ru-#+eG{3#s+~xi7f{{lr7n~c)gXkMj7{^@hr1f86n_&+t= z42>6;*(>3NP7ME)ktjvSF+-+?pxb9M)In*os$Cq5aQb_5Yp@{hy~%elSq) zoq=$DYt(-I0ev-=zF}s!yE`g75Vme(i`meuw{=8ybwaJFZhxmgp?}TTvmS{fG2A4D zecdk*2a{IGBch|T_l|5pYysyN%tT|c}fOAiL;vU?PZ#PZwLG;j)S zwiJX`VRnw~%tvw6chL;DTCa?L#?%ry65ER-DpFG34ZLGlGS)(Lv#!m5$Mn1Vj{6nn>@`JE0}?qDb#8 z)DV#pAQUM92_@h1@!8+r=N;pW{k}ejKk#E^uyWtCUh|rBj@S>~uD6TY(Z4F=D103* zny@>{%=s&&Vv~XUH8p96mAmwQ^Bop=`ylRC--5DN!0S}r2%kRE9%RweTzwf%cvcLuUqSrGU z>aLs#>tFWzeX!Cmdv*p*ShE8Y8dD{QBz4JFM%`1X18%FR<qS`JoWWSPw$5&;-bJ{bL?hWx? zI{MO8C=$li7nN`wki`fN>Ic8IMnp?MQJh^;+lpmE3Cp0;x3I~R#7%!&+Edm=xk=%% zyrj%8rO_@LyYe>s$um)HAE1ecoy*+^m}GWX^JRx5Ol)50L_X(U$YD;n_)AeKO;Ey6 zKH^Q`UrvUoL!h!Wpp(Ld>9dzdn-fr4fqm3#BZs&ZE2JCj0)tCRUz<(40eG}vL{ybV zO$eYa>g$jk(y+|!SPbN{MYslF|I`ZGhuZH?q*Jo}!~6K}k5`y84SRfE4L!(~zVY$` z(Q`_8-fk+}@~(hC1E&&a^wD#NYR;!u_1)v{W^Q|Q_}X%h*XLK=*Y6@{bIN|rqV%5k zPA|_ga01amsAh{;{7Biq6fMVo&R%41naw+t&Pp!IE8fVjOgxn+enV^IttG5q6@*-ziw!zC7uA5A-4q}JdjPQE%TcGguA)E zPeC{lv!!Lz*tP8>$60+ENhD!>##J3D&J{r8IU$>trK>e7Rz84xZM&Yr51T=D%Z613 zE4+Q)O+xm3%Qsr{mS&0C(y*OU)ND>={B4Q8dF!H% zW0QNV&?-z86jpcS6d@(ZG6WKZB!z31OdJAhW=e*drQvS@zbI*F4ojjhHn5E$1TwNAkVc2SP{2$><~0rvK3C$>lA^CXTLv8n5l? zMZXoD6-AT7Vk-wv`kVo$%{Alkk~t^j<>@*lsTr)E{z#sK9>$|Y**^@oup-~oAe$p9 z$HtFjUf*m`!JcmKpg*XsUj7QpY%34J`5jIdei@-k0D z@G$umNLrsCA^DMV{hofK!4TW`BP|c(T(TZS`t#iJJyUiX1{5;|ZbNPfu~xBC@ib+h zn1;4g(A9IRPuF{l;aH7f>SrMaTC=0xz;GNruF$ynKr84>7L{I;SZHg^d-O`c#S1=N z+qCebrlgFJ;jx_T_E4~+D&jq{Y58mt5wc#V&le*Gz+wyBUK+2Bp<(=xlQxjM{7Ux5HYgqO}lwS?jYJ1CJ7Uk~eZyiXGTuYzjkdkWlwYdIU zG`_Xnyh}?TzmO$2{pbNx4l64qx$S}p<&)$=xYg!u@Z@4!_?gb(m|$s9E^xt29Nlep z_UbSGkH!AK-mmS9Ww^Ta^+@{BMVfbrQLhwSVTW{1Mp^!7)o8JD7dS%a@}{e5K(H-{rY&CSqx>&qs7HDx$If2^>&JjBI%@5o?gv1tSG5c20o z6u|}@QN-!$LF*#Q{k1}NO!4GAONbt8wch$WuWGGK);;ZmTi1Szs5$!$gAao8Mmrby z8^Q7W^EDLKqgfK+)SE9Z%cQKAk@fbL$bF-1;HIfMibtgsvLi;N)Orr zRT62JuDGyVzCt=;#bn`W;y<*h1p_Z#f0xE8KI6a1E9kTwaSu@Udd3UC-9Xa(ML)mO zeg}GM*KcreT2N&{VdJJGZ;ni-<^KZ<6eeXSeM2MajvjhLs#dvqO4#5S>j~Ar=~$}{ zGOhKZ?Yr<>S|7MynbNYcO~semrkpJ!v})(a=Lc5y9z31cdB_M6Cja+6*1ueyIpW4@ zDle@Cqqe53d(djUdu;}7uIb?&cYle~C*!QaPa36hTiI8BpT$(`#SK}W%c*4|S}Uc1 zO+J$3;o7MRl2WGs&pqeg@A0thVt0+_%iy8hWl80?mz|2xn|>P|vpKcXMmD~FA5&B# z+8_UR#x_@i540vHHt&w3luUacGM4!13()-e6;P`JPJkN!dDFR8WG9UM!qpP2qTmOw zQ6A@LV-|t(hy!1NqQZ@B`cLG4%fSnxiIJ5rCRh{NF(2n`NnXp7+sE(e{#Y1YGH)^2 zVWm4{pj4A5Oeu8SrG7?kp;Ky0#K~<+Hf2`OI?npleUxa1-0!c?&i-MjHK1ZSL_h>N zv#1lHEwrvtB9a;h4B}FiM{tYCi^)soj(4I;i8!xk3)0v&Dm^^w5t}Is(eEez)9?v+7xfE7 zQ0@d?xPNELsvPXPV|iGG24P(aeiN0V?Jd@vbjQnVe^!N)-6cn~ROH1FJ-BZ6xf-^{ z=s>Hr(xAAo#q z^{(H)J6-kE0hv+Ll=vc*Xv>=>HFXxj`yfLQ^xDaLc0Br7?prAb?2x_0UFy85))|zs z?a-@=$F0f9tjs-lh(rb*__A-2+Cilamdv_b@l)tD-JoNQOHH5@k=nr1AIC3DJ5v7s zDsBDDH!yaOWEwMKXOhBk%FT_D?o#>xBu0|^s5entD;vTMMP_qaDmXVWqRlPgc2xu2ca+f7xIjzu z6rB=%2hWL(6443bLIO>pZY?m@LI06Xs$f(IA$G@_i40{l@?fn(QU#6kT`Io3B-VZ%q=AMtJ7IFtE`3&kJX zqNIDlEsy-%AKoD)ud2A$9J5g=>X0pB$Y`4`Etjb)Qjl?tzBaGXs;&59s$cOo)_Qj1 z>Er2Eo@e{+?jHIG`L;P;uA*5aH)4ND!(J+0YMfl1CTSd5+c&Kw=$rW{EO6G#3VF@q z&ctYyf1DvVoe(vZ+j_n+gD4OGgh~O<7f#>Xsvpx+R;8Fh^;DHwIvLq`)@8ZJuPCj|;2?^RBuce%I&-hgB;bP!F6t!X_GJ*oTL7@!_fhB98 zXx^AN-dWDraRx(?aSE?Va;$W69WL3qvR?r^zQ5Pmh)@@9Mlr<7_#AL%%b3pOWHaRa z9rXoMKQ@1^Y~cTF90+F_FiyIe%-8?PHQo+x>3%6(kj|+VlJ8KI(5bzCA7%p*L&lZ&wl{q(%22BM{=M3a>r>;%vE5LS?Ttz;Ft-bn;%bzK0a1#8He-Y6nB zeZeIy6%@5#Q0bd>+Kg@OiWB{g+=-=A4qI{08OH~ zKwIof+2!<9{45C7hy%@w>p=(fK5A**-&nx49tl<-Ft+t<7qxd*w7 z0~UK5EF;Ltb6oLWpfO&e1v_tOdI=jCm+w!8s(AN!)RQKjV>-lYG-Ae$>qbL7PD~%h z3$~QNv0hPwdW0Dv#fz0!DO0KRCTEB$qmxWRzdlQk!5k|EC{57g?%qBg*z9btSN>#P z>d91g$+66svx_mPDJ@`E#qG;ZSIniilMDEs@!F0Dnly@KgHo$&0J5voj z+jCsfpFC4VfSG-;vVnS~zZ{l%!_E7c0x0ase1`=!TF3!S@;$9=P@jJ8Wc~)GA<*R0 zpL@*ea9K26x=*iEtQ2%hfF3!ah(-R^RBZ3z>5k|lL7rNf`D-buw3TYrCFHJjZ? zds=tV#G~5WHoq*tWxLF+MkrR_kr1EL0-H0jo^pd0WUZIsi~>5x6zC}uYbW%Y#vFk; z%fd|RYO4r{e|@*4-lYB;7LcjBu&3}TDbz$rH96B%T)Jh$kPUmSq0goV_az5~rfZgQ zghHWJegh7^`#B7pn!dfU%efSq6&pq=hK^lP>4JiSFZ%dRYYdR3hO7nYe#Me!uF)ED zpw@%vn8AKFPA>{;U$B`@`?I(WJ9L&gl_}ZFM>pZ)H_`5 z&$AI}z=hh;k@voP#!^eU6Z=)CA z7*2mgP9(Tj2s_x2Wj3cG*pf3yiHbwDZm~b}$~YYsFnU2Bgp-&p(&9I5Jan=IGkieq zyt9zFKfVuf+SHni^qj$;7u}aw5~pz>nKF&n)b0Io@_gO5TLGt& zlSGI?pRMX;-yvuek5SDNVFN4@B-X7VhT@q-yM)XEqh(jRKeDMUogK>PMMj?_jlANw_jg5$k+zKi%JpY$3%BKo``14DNm(&cc=wPc|gx{=^ z4CSADDbkDhdxDTA`gPaU#_uS}t#+34v8o?F28&svB`ayxtu(sMBZ|ZLPHfBP+2Z3Bw52DST0ay;&Jkdadawjr z=~MgNk1_$3`}_L_ZOBVhfr^92Csa%8B|$Mh5l8dm@k^^|kEC|nw4Wx}N?{L|Ra%b~ z3{!~eP0y+ldk51cmetH!o^91FMxAa8bN{8AZ8a=6x-6uJjWBj@B4l4eCsg^63^+uj z+&_rlL~pFpYL19`h1FHkM)s?)(bnn`^Q4Zvo!MdfG+YE;s&xZhwQ(i!Pz?v{-n}=! z?A}1Z$&ab5{J^E!U7TZsB9mmFf4Bo8a&typHynnMm;#+P5b&m2?>vid&J+Y2d4g~= zOM`t2k>}I#mG1*R5V7BGVaHdFKS;K7{9M`7(bvDV#*2jq#Xh!_M7uc~r23jOgj4Y+ zj4|SGJX-V}s(e`n5(9sz9+Fn(Yu<31uCtGgh`8?UYNZo+7VfxI8lAzbf4X0=yDQ^Y zRBGa%)b!($Z8siAyCi`=E#H``%;}R%`3u7|N8Eb5SFZ38vj;nS!#242(6%h21+Czp zQ@*L96Rq-hzW?tco&O_kc+hxdzkek4%UV~Ytz6Y%jV9b^P9ZecPA4@G{9%YZ{VA5l z(?r+(jp}5)yA(FGg&c|Vm=?~rXf`~qnTBYaIf{0alJ)a;G?bI~K9*+2zHypr$RI14 zY{W`9nlxz36wQcRm<)I}_vzms+NgDyHUN!!%9|xt)=$sO8}mq|M&@hHfQ^bolsnZk zwU)${8bgDgH5kt(&jp?9cLg+);c%*}yEmTO+Rn#7`gAQQaT`i_UJq&C6cm0aoOL-Q zB&5os9b&&hz9d8lEWch*A4cc)R&vWVI^mc@yX98}ged%=!8XT{ zqF@OQgK0)d9o+Tp4q?1^;lc&CHF7>R!>Sh6)aRjPBb6hlashF1F52y>d+0M{?ecCP z>l%I0jcR4`1Qet0ytn}V5-Qbn5jnYh`@OyNz@OocE7XM;i7gKQy!p_|Q zd%rz}s3j_T!qxZa1xF4ewhpqMIGi^(hs+$?m8m1n$4fsp^Daz;x6hn4@TRiAZqZi3 ztzW3NuY5YSvt+)SqQUs-Y2}arh_(c4s0Ay2Ap%X3@qJumo4)Ea{cLAptI}_g&Fe
z1FTj@Rn~486K@S8j4b*1#tVFo;b&p_B;sV0`;e5|qJ~(XuD%Id=2?F$=%C`lCKdKq z{-0EI@jD$a#&*+q<3u{v%l>rY2y^U&B;P1{sNJ(D_NO3(4a2WUaJ{F8yzj2@kL1~zDTi0Xg^_8Mwm;-E4NFDl7< z3*i?I^$8~iQ@>dix)1cI(?Cu$RR!G5@XMU*}SA^d3@6?B@oI~$qvsIg**_X=vi8f{sztoooEW8gn&ARw8B$o?1 z>3)X;v)2s$q7JfO6z{rF1YQ>Aoi1f;k`Q!E=ARJXsb5|hAK7p8<(ylFfTw6`RQ}Z=hCoNwa2DFY#5I!T14QuRTBBG*t4j{A3gA#{)LdeyrLhxLj z7O@vu_taDp4-hX>0zqTz+`OX+3Oj8JeFBiKCx)jg-3zXhUH=sh<-%Y?cp$6c!lXeH znl?ALKXAiNv@B0P>m2RXHY=_SraK0IxCo(F&y@6k(`I_(t-CEA8|3cWO>I<@*JkLcO)OI6NRSv>I*^pyGIH~-yUFEues)da zSpqq~`|j(Vb2l3-9P#jEU%xvWx@Fpuj*vO}{>&GJ`XQF-oh&njWO|A+^4!yiV#QjN zDd#xaLnqy!*_qHhlqzGkf*Vqk1F=>Cs~MoCcA(L_)YLJ)dwA=!Cg0;yu?eCee2TsZ z5u#;xB7C{owq+sBjnwXvCc82cJE>90Z13iA@&gLvcuHO_1Tk8Vl z7PA#f0qqT{EOm(>% zLO@)sd3FxW&BT@RUQMGAM!y^sJ3MI}Af@fRs()v@Ix9cf?>$ayrB=26*v3<@4tq@( zH4B*(EtcZz+$MK))L4FXvnOBucAGGFbih~V+tJd;+n8RNCQK&HdC<(!G6`SYWYdAC zb(+nb_-;3=TKaGNWcBH%6H6JwVyg-NWeYlT3;DtIktu}0m4D#FiHV?#oL3ZKq++p( zOGd&eWrE=82w`VQ_Rs-wt;hgvixOR(2dA%Pr@pH^FI-F9qH)!|g4*&r#N(Fx(@SA9 zrr!tL^>neou>Z$yrA|`nJyPMgtrsecvD!^%YLr7h|~7RYe> zoi6soME{M0B{)WhUsSyMah)T=C*g93lUpM+W2asZ8~0ggi47rXf=bu#JHsUpWk_VD zw&Ew?Zn&W!KILWeGTjorUSMm;sOJeq5T3Gd9g{ai@!sgWrEmZRss*)CV>-%03`Gw_fbja66-Fy=Qie7h9L_I|iY5+3V3G z%6;FyeQLsM64V(^zFqDS$~Y7D9kwsX=ds;el4q1wYuR5W>Ggp=TFa$?q~^*xoJ_)p0Kw!`ALq@Uy#0 zDxu2K{dPLoS~$K^1skC>y8wtVuX~E}PaP(i5fL3DfM#*KAs>`X?AeVVeTpeOFZYQ?Hu0M8^I=`o7ETOi+k2jkX8G zmt^WWuvNIU#9rA{EOqDJH&cCNSFsCM*>XDp5m;nv;%hB zPTopRtV!TE;|t4`%?}Qin?^uprPrQLSdo0`FV*yI>v5Z2)>prOS^$HdzJ|_ZeO70b zz~uajYC0d1z7=0DWL*}BKGUfG_9c9&KPWH=f7;#J6&b_g>l## zF;6myjR(Fz+ZniI8u6IjDDM`vt$N#%$VXNa%x?Vxht-Gp#U#ru{ocJpfwzR{uneCH7iX~^l7UNPX8t>Jd>J4B&h?^B5Fs~@U!yc*2==;2l5OZs1VU0A4|fx4=TR56gp< zXcYERqy2JufK9hilHXk(1)v(@?iA@G%cRsz@gJ!+$6kcd`xOE~`Y-6wDOj8%Ga!2| zohZ0vFMZpvGcP7)0XmAF>;cuzryewqTbU9XCVL&t4vD8LEZR+b&i4EXm8|BDK0Z^g z>UEx7kj?}g639HB*a_aJX14o1>LqVFY!8pegX@T;(xJ$(B{qI&J$R<6p4Y+>y&pO$ zG9&WA(ax^0ruoF0fAh-J=-HKuv0$3EgZZF<=%#&Z0%`? zF&WRT-+LJyWV4&c(EvV;85z0tHSc(2!(4{YA>szyew=F);OD9%Wa(a3mi>ZM5YR2f zW(aNUKXZR(?-eR|tt>5+X)XzO<&>-PXzJq9Zs;npWjY7T7vG*pJ5p&+REI&h5 zPnM1fJ&u}8k))^HJa@=MCsjTk@p)KFTm++chL=4RtY;I8;HL4aV(_)OjaL5>4c}&P zHVwjmrA$?3@%^U8yOvFUh`fwrhjYtq+NcI{z3||Ud}-QDJC0yMR;;~AV~zp}g7eS8 zo$3mo!&FB5)<_Z}Fg@?@^wIX&A@gK>7D#9y{vg9zr?S=P1YQv0ZaA*CG!b&>I*ja+ zIa2Y(ahq8L+KUzkownNcECa!F=IKUIx30`-5nOX+2jlD?Zk;$5nf@4yhrxDG?D`>(d+MrW}RLQ?Db^ZgUp&QM zm5(YkMr@GOnGU{;A2%sxHc}*YOa)z85C>Eq-o)+oyXAb=6KQ)frT74g-BZUM%s*vuOuBCCa?{p)L8eSsw^>4 zoMy_GsQ8TUb8DN&5!2JV_n+oEJHbTJ1j8MN$%-Sv>}1)j?=Z;4p1SzF8Z4+ibxAw(B+2^wsE8>rNHSiZ zu$CDw0Q(tBFr0@qABg+TW)ilaPbQM^H9Zk^nz^@qhHb4m(0=MGo6~AK^0F-PWTdYV zUlMGlC2U@jv4aJ+0;znqVZ1XChXX|irIGsYgrB8ef^?+yOeqsqa(XMGGoVj_i|@o? zo#SQvPidF>4_lO-TGnjpS4*f8EB~?!(ZHpre5e7Pu3n(pP$BkJ*fB6X1O znPH~IP+gTVc(it5?Ix1gp+ogR=wuKddEG!@9IWn9a$X^8w!*%2B1C@b>b{90rmlQQ zFUELCY1Zs`kneR|dfYmd5NIe38*aHiPrVdR-$x-Y#%tf<=SUXjKSGT| z@_}(YF_GN7Q_+lyYKvd%S@k+}-E5(N$F)4plxrK@$w%mdT ze=`*R&qCL~!Q>1MiGOK3qk8yW>PnZpko~84;>EZtbR__r(k0zVOH$-KZ90SJY-l-D z{EMIveA8)vPe-WXZJDKmZiUWT|AKa;=f@Vd-r;($H6!Il7i-C3PT>=bW9Gr^dY*Cbh9I2-fb+*PY~} zKU&t#JX3Eh$_eZdYn>j+Cry##>7AOI;yWD&n`=De9YiZ%^bc~;1VGEU(Tq`! zUt^fLmEGedI&?SUFmDTOI|Z-B%Z7eWjFpE?sTSVRT_#c#GXWzL2Kx^4oKO8YKmwH?HIs4a3NEh^2PvS}X_wbp ztZiL1S@~ph(f^EksQOzzn_7awED!}R=P({o`I_=->qtpVwlf|)8_7i7AtjPn`k-6o zyO-{^niZC?Acn4LY1-cG`(`dgVX*2GDg-MUa`wlj<~SxE1Q(=LDa(Nve|`&F8fiVc zZ&>-_&6)#crLFYh+F!<5Y|bYq?U*q$R*mln$v2q?@EwvCE{+=7V!Sp3qAW+FRy^ox zup{#|Dur4zI3Hy~Tm0SbwAggx<4<_$M6{SYeEZ%(KVhCZ-;X&^FBEC^j1V>x*_CT~Ez{)h9LK z3vo4eISe8B?>4d6>Q6a9R{O4HsI$s-k^KmB2$jvir3o!H?X^5Z6n=gJto~39BFy=q zSQ`V5+-O_vMzRH+`x1DUp~YtF$?XRU{%g<44N^Dg2EOCI5Dvn2Bh^|s+uPeC?eUFn zC$3#RAoL0QqvKNYaAFTFrgOoDs!a4RyqvHHC$eKX1KcK9aXErpDz|B^p)}`HW!>yQ zm-p&0S#(-jc9B)vXkSOlt;fzRj=N#cBh^)=SA0d4d~0qg*5Fu#bXSuneCu_RlenND zX^-}m9g4MWs7+aKY-eY6`$ACOHd%eGI4fO0qC=U&+CJKJ5Lp?hG7Bm#=5sg5_mCPwY^rjwj56nXjQa7sxCz z@6xvJV0+?Sk3Jvr$1@U^T9?XC@49%HZ6Ad&;w%0td}=Av+n4{UBgbc+?b{x-K#mVS z>aNeC&!UV^aL($zC@ie?b0^9dlWu)7qD-$lUx2sXTNzN?EpOcV7$m+2&1)%11lE7r z=%Y-Ig>#UNgq7_jRMDXY=iZbhPL}cVIgv9P!m#+S)j_4dhu2X4(_ONiuNY@P2SE2hL!L*I+Bd*>HCZRz$ z+08#zr3}n_H$sPKyP}4pagek@QWO|<*@TN^`!Sk+mt?uvRvxsdCej+$@aO|(>9AqP z6<@lKJw3!7$0#!}5BUyOFU3UvBz3n&&A_WTFEI?%d@7R(*a=?(GIfL5_QMv!g`;jm z+wEJMp`^5`!^oS;bf%s2z8Dj?rJKqI&0^Lc8}>*0RMA$ZzxH;AmTB;K>k5A>vMQgR zXyb!ootxn`#e*4mL-y^3zF)o`$Ur8-=vcP>FocA~XqmzFf^@H9LxvkK+j!V28bkQ; z-u0&s$!EP1V^{w{LFjI9OB{Qr@nHVz2|J$;m!`+Hx$+X$-&bNnf1Kl{Pr2a6!pBjN zdo7&|G&%8z3*2!@@}g?$p12A+bYh=e=EUU}zQ7*sH_o~&M;`dWt|F4yb<>`jmNu4N z!mAs=##pFK_H~bDCR_L>Pu3F!A3jLREvEM$j+s1^+|xVYI)(*+2w>sbUO;Yj85^c3x%AF#jSt`Jnq!Brr&S~Cg<>XOT+Sk7u>h&x(-6s-?D zBq%JbgI`pfMIRu=fI`U0Grp%mLw4VC5@4n$o=34VXPF7X4%1b6yR!hqa%7YUHj$E& z+RfV=id|T+I9eMjPw;Nq<5v(e(m)ueA$=8%l*0o<4;#@VZi|s(p6O>P`mN6q;Cc{W z(<;k!Q+@A6Jw`g}>UGHaqVowJ)?>+Vnp)*j{;PlI$ZSJKxe=_^ zV-{;yd#8HMB1qA4VmW22;J^!s8X9)w^2wBLZiYb9*M2m4W1HRfG{mU%of?iP>ksGs z)u8!JX@m~`yrJ%p8vOIn(!ze=$s;A9 z;){z8SiL~`QkQrs(YtwZGa-FL(`=9HXulQO4aH} z+Dd+Fmq+Af=^t@Y*QTDkl0I)-2&IM4lh)zejtAoa;1$$-=7S&0NI5gy(eVY6E?H?@ zPjnxEHegYL#w54>U9LSZNd%x6QI3$vPeHjX9Mzy{yk9 z7j3A6J(4yvuy;Fh5W*l9DX5jwgpt(9@qZ`%uavScDzL_vb9VZB?P+r=-WP$s*;#BxtZh{k@YjG?*uvEK>NcTd3 zRXLW;g&Z1s_89{$WzO$;uT9n|3+JFPggxWFP|xLf8P%ZZ z(uxhklINeS;;NvHFkF5s7+N8QsYrO!MS>>i?ZGM2hQYjaEsD|rwzdy z-XGlOFP8!AW8_>)3+nHjmoa~ z#I^w&mYE;a`0Bq3;uP|kL0vW&bIy2hoU8A=dnR{ZB7ZDnzHF5H;F11xN)`7hx_YRp z6vQ9!nZ#?&i|zJ?V3gZ<@pAnq=SBKJsh)|wWr3r1I|4J-$S&QhdtAz z+1W(n@@CMPUSCz-bVcCi0(o`j!MDtlrPkbxBDG`hjVb1!llS_4k8Fd!5`7Z>sdgcg zLry?gBk>^iX4S9y>A?y-)h$A*ci9W&(C?gr;I1E z#Kf1a?p>MzD1UjGuGF-;63B`fz0-)kVqI?Qo{wy9LsEwTg%Hgm)4XoG+YncenZMnX zcbi>$iS2OSd$8xTX4S6#uvW?r;7WcsIr4`fQKf4mzszHG}3H>$E<_s^m5 zfYQ#4ig7};Rs3tfYOO}<5=}NOD@P5*$ELLc<@Op(j;oFSbM}^VP>6DndXq29?w+N`xvo2(9c(X` z^MbOAEG`ohFKrVR7!|ACJh{E+T*I1H;ILQ_61I(m1Z5Uw1|547hDR7(U(Jj_$Z=O` zwOy9E%}xv4+DXNbseO%Ghv8=UD#^nLDx(L6Yu)^bd2K`FXMJH-_b*{5!fi%Ivkkj5 z2w$jrJSR=ew)wVMSy^{Cw*&OgzA5srb${0--uV?#1Q5Aq^hyvuW6WRWX1r4VRV`A`MI-Sn?0Rv6r~G`W^b0F* zs7Zks>a8?>HOKnw-Kic}32yCpt-*~TRiM)=vCO@p)avY%X}6L#QmIA#^gQh> z!a05$dU))%lDr*DI76Fd5Va$__cDV*ualAW+Df~ZUneKGmiA50bv8|f*E(QO!Rsq( zBh*G!wFfq&_0~_3>9L~amcq|Urc_p`2JI6P3^;%cnoS}Do2(5-b&|` zQ~aKEP|NBNb6BaW`=rs0LOg@w1qs5>J22JYY^h(|?mnQ}Y)dd6e#yU?1DN~E=g&*= z?aAp!eJ=0HCF@7qHWO9v@bnfsvb;S}|J|b4XF6|_BBOxH|iasjq%?9}Hc!8v1l*HCUps10_3xxZc za`a|T8U{O%oDPOL`HaSUZeBqkeJ?JD60yCaj>b{%AljDo28taqMq@KfT;BpO6x6cf zyoy=d@^XE+mV1P-@@h;qz7BJY8xoSeO`EgjFCi|@QtLFuL^voKN)n=VYSa*x7z1DI@Wy?^+SH?AOQ*nM%54sPe zYI0AQ$Qlr&w~^)KyeLRoEd=ZC^LM+=zk#CuE1+Ke22inOImw%ww4JmM^RWw~$ zeF`X>VMko+HxFi)&@%qzJZ1=W2Exy-o}vQjVL_)~xWewHbC9x0Ro=e17e<^R|MtDU zD-%N$U;NB&3B>m*==x_DnzCLg(bBw@9+i8u1zS;Xlt2QhWqvkMykppb|l+)dC&p>3{LN1-##YXfuR&y)x@p z`BCrk8r7@&fN8R{1c534YZkztyQgIJww%oU-3sMTak5k}KZYy*nvFb2uesivS?O66 z2=ynHWsNpizlNqEK0Q!P+0;FAUUn<`v+f3If!Dip#uL)C2@@wKnWh_M`LJr(+0jIT zA-0!0=-w~;`ss2yJAcqo-%{OTbnJYK=@<#>MXa&uG`Q4K6zj+o6R8r(prbQ=t-^Qd zX-T-a9^=8xK>mC}V6h(vk#7+>pV84@SA+En;Y}8)jw**Zjzc2)1RM0Oto}TajwvHe zubQm9-Hd>Cd6BH7iUnot9}dN4++Gr!P`q&Y7&DM~w1?;QaXI!fb1$BhBmYf}zj|J3 zai4DDR=#JOqW8XctpKNogC_;%{J)CSznww$6BBW2e6aC(QlB)QpV{j$;Vx{L7&Xd# zAcOJ?tQL^gp9Oz7m^Oz?SGH41W!`GA@XS7grA|z!O{+oo_`^NSl$QYLFCpM;&+G$G zHFZdq32I3T#LF*P2kk#MtTWG=pF7wr4sBSQ*AqS7zOL2gBgmAOCdUuSG%iuy7EY?|6FHQ{mq*{#B%AT;k*mJ*O_E8ii1uK;K^(dMs}Tz<22Fp_ zXXR*F9k??)?p`J(mpB+eyA|rRHF!&LzMvk{GJ975=jGz^tc7r@wrn_rmom&CDjD>d zcmIn=)Y@<$PEwxo{?767@$&09*Uj_f52s&!-fB5!sNWw|vvzT@<60W|tEv=iugVnF zfjmDcUW*&=>mX|@1X?U52T{cgu@(QeaQ>#hY>-s5ZcY9W9! z8oEbsnb@wGwSXP;@5C^ke0vULwbHCG01dF3Z}Q#E<&aX5-g&3ly)xi!6qJE%XooQ5 zo`GYdvp`^^_l$2L7rrWf0-@(BPE#!EI;;;gYk88C8x-V~>0;jpcdP_wQB3GbiFt!r z6G&(m^GBodhxQY2*k$)j3C)b-G}|5kNMt7WpK9l6a{z-K^tRU4Vu0xiGuvN&74k7> zU6>^#X>HHy-DE`mZnXjlp#N?sd=q1FTwE8^z17Gv|?1QHjK3UDY*8%Ag zakMJXC0Dr#>+=#9B|lOTvNU|>-^EKS-myMlOHbh)5Au>!6!rB+sG#pzrvJQM;{?$N z?!KLW9waURuD464*`8}M+-g2FeRMEoxqMaA=hdYJJL6~=XnHZau{F(W#vYMPyg`?^ zPSd2zco%O2QQ1RMO(rjRJ0aW3R>U9u>JxssXI?+VH+OR4AtDM4b^8NbN+-jadTYx|=iS^={p*AMI zr{5c#G%qm&kNxxB?0!+AM`L;o@@afGYqxUZ_U3wbk?cbi6P4!Xkn?k9pPCl`6HM-4#=UeA8n$~%AP@{ zI>HmXf%QlZ5E{BX!-SRGZ@lqUxPGs7?{in48k%4nib`A8`1Um}v~fwi`&6FL@@_U~ zbfUOqHXOIkGD8_`F4~#@v*~+QRk^sfd*c>rho^e8L;r33i~h5!T9j96z$R^CH=MIV zwHm@}Ql$XUl=7|W0mf6DHKcmZr5)$i9x0aB)(SE4#Chk{*6ObenGM4;fttcEw!Ius zPNT%w0^1Ib^D>4c2(RMAX+7`!aK7*EVD@PSvwfZARmuON^X9!*`hk)*C7*H983E@z zDpPCbH%gd%dXpNM9h0@d3~-&|0OI!HI0z1bq|i}yaU+r{%DuPP*KY-^L@ zZtI-Q8DPIa_i6qIlOFEg?+HB(k362>AO?P~;k<8hDrGjuD|^tFNHBdW92xh*7+vf3 z`&Hz0MFoiUysWHr%3JUb^>|zTzMzc5OUKb5j&zS~y1<_cx}C)ibvQK8tWf2Njifx6 zdmglsj?bS}>uAP_IS+Se_b6@KVjU}gvD5iq7GzLvt4`{GOZ)1-y-tQV&3eeA!D{Hb z#u_PZf@QN+JbZv8b>?Id+(0008w3FZ7rEKB~l}ZAYA9@Vm@9~H86r!{@ud^z|nqj%kC~O zXfY;Wk#(n%J%ma0&i~ds=JMmluz4Af&rH7=46&VzMHdmn2DVMigA6uym;0=b4>q$8 z^~pSbP|A6tWUA{q+dllae&tgHkBr=;rlI=?BnwmCU0GQdXrE<$HsaPVjqBhXA^J6u zpzSlznfmMc+WgqJ1pw{=Rhav;=+rbdmdp31JCy{R*i-ryq zV={(gD1T`0Tk3R{PmCAHsRLj(FTZb(+EO=bbVXaTWOjQ*zRbJTY*>I|%gHjy5-{L8 zVOA9U0a!PorB`Z@(aBEf7u|s9Z)e)KLqWqT@OA~v9u4O#In*$r+` zN-c_0C>k#|hoLT6zX_abKxawBh)~7VC%kB;5nr&GZTW63({}--5F`wQ<Z*X^2HSp3QGy+kTT2bAMH_BC=8-hN` zX}cd|3|&%fcDL@Jsd9No+K#F?}?hh4}oHxx|Zrd2lh~lPQ}-2HDDdAk0gb zS$s2QekKS})KR&Zs1RD}R&Q`Y*Fj4KC1{!KFeguzns}}G1;}ri%)RBxW|m4r119%v zKWM>rI#@g{P&j6!>1b~`@KC}CD7D6<7?H(Y<%FJ0)s=!8^(b?9Xq`|@iQtp`fW?o_ z$Xb2(E`DuBZ-V8rHUBZI{#A&HI2xXDUnoIdZOp-4Cl}ONcI8XeBVOtFmj92mw~mUl zP11*P36?-`O$ZR&-9wPz?(XjH5+Jy{yEaba?hqijySuyOdouIR&i?l7?(DbwS2yQ8 z-G{#K(yOYjIvXk3AJnutz#h1iX0fHd9tB@pC7+FD7MiEJ1+ekevz1$adf9JG)GkYH z8|<+-`q?{|nW?Ro{QBN^BEI^hqNRbYfq~`Yl2PZPJ9<*Vh;sh#AB#%_LMVR=)`4*$ z$LYQYwa7Nl=LNa+u^!VXcb7DB;R%(n{YW^Pf6-LU!GT~3fC~f#!U6TyXj5deWmmOP z5*4XxWfY95S*J~==ZSDFW(-NjD~mb>go+IvvneReY3wVE_~0(0e*^}}T`>Iv1BQ-@ z(E0r*9-G~PVTRw{P&F2rm?7Zelo4ywK|nqD5z zy`QAEB(H5=yK9)^^w*@`$y$X8|!;ePmEo(2C%c)G3YS+%UEzB6o zUe>J?X|v4qj%G@%7B-6|w7^uz1i?{(HLW01xrJ)*O-(im?~4CxbiXpnx4#|K=7WoOOy{^!ZQoB7+&!L3o%$GeN+K zL#5K4gEGag!}#OPI~|y3kC4o>|Hq&Fo9zEHp|Y(4EL=9iJl=eh5F9)_S|aFdijUP7 zm=GsqqSuN}>Cnw#oGv$fBHdEvEw;`|H)i_h&2~b5V4yH+-#?OApto;wSyEoGzr#|i z_6&rz0jW6@uavFU7)cr8EuuyM?UL`Q1j?&K&j!ep~oZ*IU2A z=}yYIMyb41>I}CUAEHK4lueaVf4o~0Ot`>R&ppyEt&nXvKg`$XwHI4GoMcBFchx+0 zOSrTX8_y`=b7?Py?+_cYqcjdqA(Fx;?VcsytLFM(!>pD8Dll?TYPqSe0g=#LiNPC& zB%-`D&TBD+)F+1R48$2o7g)!6PM%~Ue)>N7xDd$1Kt5d#$R6wS$@9zL)2RAsAZirh zKGk0b`G;F&Ae(r9=xmV_XHTyPlu^mXcWBLtX)?AKRrKG-0ms~ae{!6}&q}~?oVkib zr@>htWG#c7MtfP63WyZhl~VWr-4zk2LcJV#G`w0iJ<;KctzoNFYFqg!;a&45;5GnF z{YImytYA(kFzT_%PxC+GOj5-Uh_mrA0sRroBY9|Zb#l(N>`|1y{fx-AbW7lIbHpx9 zG}I5C;sFQ6UQ-m;$&H*dsEhD$$%J|$%+jQ{`;!EZeT8l_RpKhpA=83kE#lDKyYJN_ z)WD8ErpwzCy%xfiC9u6v%H@Nn<3vKtmuBIb?v#Qe-TSL-^Fcb>!xC8G?n3-ZOcp5X zwI7;@PUKMTgp6yzV1mlO;&L;YY_HS4hXxIN?l5SkLsbOH*v?I1q^Yc+_;#?uEt22K zlFOj&aIeIF)0^-2A|t@eVTMbD_o-)=Z+%t(w7RODvcxYFf3Q26b|(l*RYxl=Q+Esa zXJaogFbNb;NuZ&*jiw5vumE&P8JKPbO6e?Q8tP5@Mw2O|d6X?!xZpw<%8$TF(tKh7 z8e;g6E(qRhh&S-FPJhOfNXwr!FDYdY<5h`cJ(Su}SDbVWwY)SpvNFyj=F(eoj~Sw- zH|PR7{G-w*cg5H8dt_XgAM!y5qJfi7%Z@oteU}LZ3v}{FZ`Y)!f<($ZShN;fpH5q* zl739Y;+CRlUN*0z3Xq!?=HXw@L?A1a(P zW*LMj1^Z|#t&j%^ROiI`55-nlaUOvi;*z@l5+7qYKS!9whFs6~hYRHl7w548M)R#F zL4qiNO>qnv%GHe+9S4Xx`@#?x7j=lco*%9ZUGW7qp2Fyx|7#KU_l1L@Rj(T?b(f2; zv4M%tfwQ8V@&KkY#A~dCWmnqW`Yrzn$od_86*v<3vgXxYAq? z)MYS8^>u49xGhm?4pk?gZX4Q3fpr}@A@a)=vPN1LAiWE3IOG`^<%R|29KqkdRyv71cR$B`l zalkg~I41wQSvH0j1k-*Ht&2@{HZ4ls;hOy%pUF}vf3#q&rCBcg-(zA)NnI+yV(2@$ z7jpaY$pptkMcETXXj9Ct7Y=?;D67ZGr@Bh8qT94l2b0z&ik`+>48_DyUGuJg!_*qQ zl3sW*wivq0q87Ef;Njt{e5Kc{6YxHnBcdB1@{ml*1|>6adH^#TgX|qQC&$v3bmLM= z7IH_8G}*%*SMzU*S<8MeDyRY5448mDl!1M4`GQ)1*Ut*u;Ust{etPaAN)eRl0HdCV-<(q^q14xtq9_LKMdfu>%=h!r@qyN5g?2B~!+N-`-nudX ztZ3rtDM{Dy9GdTvM3*I=#CkN!MKLo1wh}2LL)2JLi5!K_s2Q87W;2_c^*A|DwC|6s zvv0_*{6))_IK-9+8cI~b&t;IGfZ(g#J6$GX%E7o9S}YIx%L4yIfO@zuYsZpwT<^2a zT@PtbWVjK;BaP1N~4b7^H!(;aPm3g4^J!%St_NeL;!aFln1Kgj*d;A!4TD zX&HIc&qa3hMZ4nU+R(q1t6@L0BskLzRO<0ot28Z3FV5fZnuLkas$hliyHtuChd(~awXTe@ggTiJiQ*4kJB#K&<+m8Y7a)m2AWUQ7wD zYWgof|8Pm!zI~e<>SM!?z%aT&V>KFO?^mW3} zdCd4^l|>GcGnSWZoW)1;1=dF;qcwgd+O?0Re@yVfH1}jO;qV*KCOUJP+PK_&Hwz@EdclC@ZF3fr;31f@m*OBO`fS z1t0q+wI15@k+f3?0YJc6mS%4WxzU0^HKPBu=D+n72!OyI#N#ObH|h0L`<7iaaKMX|~ zHj#{UA7E1Ru(VWkcYl_dsNv-KOJ1hpJLmU{-LM97veHUQ?5d;{D>Eu1uGkiPq^Cx= zuwYP`pd9wb5}F)>ja*%~NtQU5{>S8Ex?qg`larJa4MU%Q1bm_-JB60QD=ej%3SXe( z>K2IgE<2Ogs@yCkC1(R%Yqaq!YHO{LEhZ-zom-kz&)8*3bCjKOGOxAtU!P%XoKF@V zW13CaT}qsCk5t%L3w9^o%Q_xCY5-&|gY0Ffvl5CH$~tN08MNeb7PFnSTJ+`g${Jz= z=7>l2%hR;`)KR06-vOox@0hTpDwLPHtm_;zmHEMPrI|E;Ve*czZE1vrxG|aD{$TS# zx4->N0NB@c{p>|7CfqTix}cC& z8HERTlcimg8i>s^i6#wppsCFm8%K>oqAVZ2Maa>g`t_3n9H%a6Y-=mFdpllB^%u8n zrz1H71Bb4O$`*kXeEQ55j}-oo=8U3x1N&U}y0nZjh;tMucwE0fkvV&%&h-=3zjKuT zKPpehw0`aBP}GvW^T{B29? zyP{^+KP4UN3^e;=Cq^dAlnDW98jtd8(?w7l4c;%u1*4>b&QZB2M#P^->MmMQ5lNk8JJ&T3=hu7B%hX+PLl;M3_TV}LXIJ%1KfgHoq z)he4tA+lSx9H&H`cUS8qZR8c~zOmG%lA}(ETEM0u3IM-TyXFHmgemowgew|&sh^Ht zOT-hLH0Q9YovvfxrA^BoZgk?9S`Wus%4w4bh;eYla3|djPnTa=V*kQXleJ-j;NStE z)ylhH+SQvp3xCh7MVnj4N)w=mY~pKkj%0u9>ua0=PU8QED^={XonL5pTiEmq1DShuei%Atbj{1{i(E!rMb*hC&KhfMvYDIAFX-Qzlpl~ zCPzw=Ax1<-G;6=PzgVZio_D`nv44HgsiV;-EbEzyT8XJxxK160;U!O)y`I)`OO84@ zIH*s_BW-R+scRO0_|a@tpMO!`i^nDlUFKO4c_N?7X=(LC!7dl;ddK$&HUB2{@k5>v zsLo1Aho4QWpaxEB;Jbi@cgb#&{CM+8GuxRYu4MmSRE!-pbNAnzROdBGHZGV(S7If^ z0pt}e1t!u6y^tFKnm49WJ6m79aitf)A|j$i^;sP7|1r}2ADmd{^`~fmuzf$gR8&4$ zINWo7Xb^0Q6)bE-5yB_5pwe>bs0S-<6R5UjO(x}?ok>_Tm;B*I%%kuTUY9k}yo1Ya zAcvuuFQS08iHL~U=^HST^qTP{b*btx9+HsVS#z)I; zb6Q~Ui3!HY5@V;tL`x0N8TJ!OwufBmMBQ?%v(PXJ5o7v0CbRl$gM}(#_StWbT*67! zjCu-6VIzUfs3DLGsXl5X-?=Q&OVOgtB}Z<$;_WOxYyHSb!nwP>DahtViXoFML2+G*G&0!TMRz{alZ@# z&|77-q$*-rC|Gyb^#O>Q+-t#^bPbt2-3zpK3t_2&UP#v(ej zZ>8l&-?isI5ltvRusQ5o)M^*EzXstO0tA>f)+_324bC7Mtr|rzKmlOog_19?((~w^ z@#s9t^*}s=m9}eskjAYtTdqy}#~{L5XTLh+}x0k5Dw*sTJf-}=^&qj#aSAHJHNAyhi%A> zF5Wghj>#L>#$2bEV?m#U>tur?P60?bHKFj}7Ubw0Y~C{)q~S4L)W7S+qO6EUVY-%v zBB^Y>sYG#UEPwLUPs#CJeEM!unvoy+ZG}{K&>SPn;gh})HQ%l=Z+sr>p@-R-fp>M- z(BiyNc+}%I=yi(X_mw-8#>*8qpC344M&Sv03p-P07H$s5W^V#!*?EBVQE23l)jPtS zrj?xyYhDz8&#uU6W3qy;FjmTK0;Fa(uSluGa(Sk7@;u7S0N_3>AATjh3i!QVpFs)r z^i1`VF8`-a{a+}GZsFVg5z2(g7soaZP1yE*r`!I5n?}V9dZMQUm$sziD}8U18K*Cm z^Ud1rwU(%ce$DMp6u+mJbT z!zZc}6N?5jol`*>n50q1y0H+7OcIx(^{U^Gm1Tw`un{FfN%OE(6D9rqxIS_<0V06A3s+{5o`U_ZTWQ&Es&L|~x9 z*$O4(mcF=hSdQfxprp6^w#gA`Fu?2G-w4$ohz^a_SD3m=7Wzhu1O`g+ExJv6%FFFq zM~1^`f`Ap)X-dYz!a~Z~+Hd~7!_)L?qbYl-+ZzVYR(*y_a`XbfpHeFrP5ile-Z7Ia zRKznJ%VH=c&s+{hu9xD=QGMXcL-w^1WZ; z+@y(fB+~wc=Q=zRpQuPhznw;Dmq+yQRpXpGleh-PGi>);lVyg9z;%?TP5eC`mve_5 zInCxPbQDjlpWNpAJ?3aX`BQe3hW6h-WX`5@>pyQ8Fw1x@mT-OQVdJ-lm9YzS9;knP zg&@AV3!}2(!@3%z2CXN>{&Y=gmfaj4nLBwYMj07(6p<&qvhhM!! z-I3arUB7&o+;2qH;n- z`jW0AaQv@dEO?;;+>o2xe=Lo;ZhdAR6UJ8}M?y3(^R~lNGvrtapZZCV*iMynvO&Vp zn?E_4N|+Y}7n!r?*f)&15zPNAH!ohQa{>%v>s{|p=q=KT#i)K={7* zFp&W}oJv7(f*T+4O6=qm3C8xgzH?Je9}kqNCg*8Q#(HTc9o~d`##0D2&YIRu{ZtON zXvNLJ#nJnUqIj1yD8cght8fex)+K|y6(k>7*1R_LTHdd+V*r6^r-^CNS?%t*yhgYc zk-2EuPZ+`4YjL=VnEq{Rn{-An9NQIv0_2b6CS7?MuVQMv+RPN0c+LXesgK0A!~0D3 zmTQeo0G8MemT&evw{-vl*EOO49;1Dm+Bif;MZ5uzGMw}++a)YnBywX!5drhW4;_OX z61m)T?B-zwYuzwGIQ71=;VH=Bp*w*bf1^4?CGBMA(9aj21}Ca1ptBkX4*C_wu?EUC zu@`)L3o=skX6{0IMF|EmWLi9`QCmgB;w=-3T05r0+1nRaG>-W%%S33=`&xpZ*f-Gc zR3a+ZMVH^0=aBJrC3BTRsFY91;LT(JveDV>*O@IC(0#7g(>-alu=m@k$LVeokR<|0 z(a!(F%Pa|0Y+WGfFMFKSgfE+%NB(^wh7%T(J)xM?o2^QuwkFZN z43em(A1N(U2qvFb&MFbtUdLRzV+$nmdiwCLJF<5>+>m(tG4{S<>E(t&?*xemD%A#s zrI=Sb%7e#^(vFXs^@)?j(K3ZP4=x_%dana}kKiD%2|wxN5@7Kr#8p<;#mWgq&f!n1 z#}~a|?u5vgE2<1{a8NO(tpzGw8V%nox1nQih0JMGvXv{WW-yW5YqseyyB5y|_8%Fm zBSsB|HZh^T>{8FA-NDk^0#}pW%Cs2+D=CwJ&W=xGTYfoRCb#gGWl6;81MW75Tb|K# zD136{Fw#I8?R+<_ ze{$<}tH#NkW52Amj@Kq6?S#C1+)ZQ%o8@s3UOo(O4ck@ikjIW`WOUqRU80REf| z>4KV05xII~heX@F8rr)TTS9k-ONuMP*wz z+ma9kbCWay>tq+-P3djZ8`Q)ygHRt9lP}T{@yvsRYOgt?JgJQ|8%azPTrGdg)4fhjh~4n%wc;hI zzYF2il(T6gEKVYzhhhle?H_-No?3F#BxUg^AbL<%@1~H7I%FCYSo{pV&GA4$e^V9? zxIK_bDfmspNBlf;llM80@L;ygOF!9EQ9i`oI2p-?&QgJB_#KoyNW)f6a|=xTyqHQ_ z;w~}!OORroxE`axDchyg^fHUo=|K0&XKb<=i+q&vqkY#4&j>8sU*`Sv>`8vnL}KT> zHcqRb;xQVuDeVfptCjt-h7BRhbKIofe%2X?Y9ynA?3RxR=2`Mdeg3MAUBhaA{~nuz zOK~E=#&nvwqK6u51m7*Mx4^|59P7;z{Hrd(Rj;v9oaK`eSI%ZoxhOb=7)1so)YLm=JPjwp5I7dcr>e?^CCc$J%1&?f9vo z@+dy|2Ij#aivL|^$K&C7X8>B@NkuDF_=>0Hyy3PO4IOIeZ?1P^gEBk}C~K+e;fZq8 zUTzN~dK0_==ko?KgNn5y-2||#@FbK6^_9)qi{gRCSQNN!2sklL+CCfXX4+R}w^rZXgnP}V?BzR5 zoT(d|_#)MUxZ5;Pr#Lu_mSXB48nQVC_mvM9y;-w}dpA~jWMDM~YS4ck2rih2& zLswkU^Vr zgo9toDmo`(#Hlxx%!Q7>yLu(7NSAIGak3H=CJ07Ly`KI;I{B@#7lYnOUH`+{meB`m ztEWm7{>|A0<#UajVKrx`d-3PS4z7*)AGPbS*eG;OsN2HXmqd1-yu}X)z*uyxV5$gx z3gA+!WCmq@nBqcB6$A8nxr27D+ZCN(M9nDYAbB^l@rlJq_Lswz)`$wa@WUG^l>x& z{60z1Ce)9^rW9N<5a=VQv!B%o>G|N@3wl*x0)M#oM!cV<6*f^8JagB!6UGo|9QGQAuI*!9o}{Vw&Mw z#|x=w97mt|eSsaZZN7{Nbh|uxFSlFbx{V~hoO~_R9%Foez~Od3>96B%E!tYzD(t87 z)z6sa;=M!qvp@-Lx6vT0e2WJ+AZ6~k3om7l+wUZLE5$>w@9-bKhG1Wi$>7<2%v42> zh_AYpv~riZmzya8uD?73A$xHaiJo4YJHw&!{}_<`@mruT0IpHed&THm#8w{zEbrG-jsSNBY%)`fI(E|3ppK@ z<@8=cV=DCq%dOzN`7~o%DB;?iRpo5Af+TbOrQii`CuB~p#dRNyG7urFT7Qp2LFu9y z+AsitllAZ>*_RKLu*JkVfK=*Wlo-j}j)P7`Y8Lk0?p9n4aXcKNaQG&IXGhBnd4Bm_ z7NWq;YcWk6wEi4bQ&;C3v@72xdRM=p2Kg=|ETpSmRyyhcu1q;Cv@dmd1!VYRG@?e4 z>{ED|wD*|f)XYl}Ccd70zgmJIHf3q6L^!GKCWsy$9m*p~m5YzwB^ApI1a1zi=7x{O zFYwBqvO85hy&eUTUMM(j7pyDg^5J2Pwmu-E;LBh_TgCpMjPf6p&u~?88xGrR0?B^* zhI#*PfNeNMoceyjLCbT?=#YZ;oC)DgdpNeI(2;mZl6e^4!yD_~GHxRQ<7ii=b?+_8 z`!2Fts;8t@1jVr(JlC6qEk-_y$j(Rq&TYybb)gi8-!-$<^s^A>)@^m3RxUFy z4*%E4mB5cRymQ@tGJ=4sKS$p#)Z~X?1oaQpVWh}l14*;1uadLIx7kQfB3rV8meq~v zX5=!xe5mC;5N3=qZQTN9Y`X#lIFXWAW&yv+oV0SIvy+UG@>=Bug$NAu?Y{m%E<^}F$5yCY`kXHR$^Fn9-e)oQm+TIWvi6_#SZDL>fy<<=&roN8JvnBssQfkkzQ#n1{t z5)SCAeh+%w8@>$hJ<9txnVjvmIXzVyl$Ev-?$_T{qC9iMB}~W$rWpD}^44@WgJ@Ui zKhj^|(f{)0y!ebna&otCnjizo5N+9vSAN+Hw@Ejka~|(fh@5`at7%yc=x}KClhnYF zNgXAFRxcEpw>vEUIjJ;sK{$C+49s!ymf`oh0sj}PrbI?%_1$B{QpJ1{9YtW7BzVSi)E;EA`J*r;e@d{}AJpGeL2m@v#0(=d?&TY5cde zDq95x&f+6-oxx71*!DBCH2M;w1#hc1=T|L7RDaYl;w>fhPa&y_^EGYeWJKJJ1POuj z6Q|*!UK#_5>ux687v-dO7md=_4T^FF48%?!7=qKN29lc>$|{6@m)(v^sDdEmx`GpU zZ9DOsoqutM<@q;Mo8+Y!(Z|1h|ZPG%fJuP?l%&az9Lj!Efz~g+9v!| zXu}z+uxZTBE!Cl64!%wA{OJ^u>K>M_Y;_3^hqM(8z+sY zuA)b-MM5wxC~T-_GF_0%Nef(Hy%j0El`=26Sf8(zw0{(x;N4qpEnr&oMr^?rsHf|& z#ZB8jIDU?dqyKEj)K++hbg$}B5%&F(LxG_CV`r9>D_>RUhm^6A7m+?s@8+ofaX=~%VH62_~M>J4v zgPYTfIJPN~+Oni)9xsn=LO@C!Gc-~i4IUY1?Fj{7;7@ju%%eV&m>v|O5xoAPk z0D*(#eVWW~so0yF8?&r$T4vciyPqtdF8^RA& zcZB~YV1G;B{k%V%pV)W_-Ixp~K>>t5I)`)1DiROnckSHA;3ey!XXbGp48GriKHr{8 zog+Cm&uxc?re=QD7>#tVdG4M)TG@}#HX!>vl*r_}>AWoZ1OlCjWbJcf#%Weqk=(a8 zdPNz|$Xf$ZXldaDxZ2v)A4!boTOM}PdPW1>Bgm`avPm^ur+co^RPRZ9)5 zpJn|^eFKLK_e5XEi#D;A!_i2c7IpmUoL!Uy8-9o}X8KpBDNFjo9Opt<&V;k64vnrg zEW}Si(jBId!{Rp8`@)o4KZH@sy6mt{T}Kx5MG4C*h8gwGs6+Y*Yq ziG_%9GT8m|SmI9Ah`b(@x@0n?Tq#5k#&68PYtv%PGHvKH9M!6pflZQ9-^n;1u!aQ; z*ODKo=vc6KXpO0s=&X8v^0e&ocv_koG0xV#=-OXG=T|a$W08=O7)8T+Q^n|+LNrjx zxRGM+{4t~E655Sr<)S5H;i=OM>OVh^l#T1`rgWkc$noX1p2uVJ#2ZRG6eTW{k7izOY+E2!!HDZqbJ0< zkFxqAO9GT9c6@F*Zxec$pNsWftZ;!i9b@!VColpjv6ulj%Qgf%-7^>S`Is&c5rl)?U=8+{5=d%4M0eDA09Hh$tdVPTKsk1*9EL?vBhCA-P%S)PXhxik&tA< zWTa{)o4p~BZ1o$*D-esta(Qp?nS8FQ)9#k|TV-A!vR=Qs!;@gX8n#=B)UDcJ-UW<+GBTx*&YfeowO(6 zR03D!&4$eAupZ;o6ZJ#}7q}UxidI|HG3b({sg-}?59B3SQf_A`9(hl(Xr=G+WL%Wy zB^CZQt{hoEtV@^+XAa}{L=U8Up3#%$z~|$X5dT!dS}6SfA}1;u)JS|P*g%yMrNpA& zbsBk?PeWZl8VFOzbF*I>NvJcXf7 zY~{pum6N`}H(Hb>apBhOk$6Z&YAMDFwqaK%&WNN7lxQa3eSSS04zkI2g^e*&FSyW0 zDN&FVJZ60Is}xqQGdp#kUUSlzv?a%0x}L%S)BZdyX&h<%4HHqX`J!+DA|dYEA240= zsRW(j4trK4ujy4jb?2%(e8>V85JqYvGP-)~(RW3DaxL1O)NKPCq}7 z-btT`0|3`snI&NctF7M3VTDXn{xh9+G&|f&SkM+cF&CL=3Vpf?ME+Itx=LT|Fow!- zNK$s?NGyf)OCjbnx<)%PqV?viG;W9c=LXS>ZQmGa4z^92`z{J~C62BzfgQ8XbFolx z>mN(b0#%&J8tuFtk_YX*yQ=frBVuha2F(U$BXh}FoDB<0+O~FI``5^*F5y=|%x&u3 z+PJJhY(=y3LQ;qtwZ<#--_(RzK_wRqR+;mCuR)4VNG7hgOD;N6a0{MSqdh-jNUz@> zh0(X;WO};`y6)#JY^-{mX-QOGTkOr26lJ1=-+J11-ofuZGn7Y{qLkGVI{xz0n=_l5 z-o{kX#@+py(!w>`0;(tQTX9}uMJ8loDfcuoqSdoF0yUr(wOveCUG(oj-!+P=s7%g! ztX)}i{^I{k<9WMq9;WkbFJRjCa$+L(W#Js~Sd-^lS!VurO+`6$q zc}%k^9k)(3M?8H`+m6Z;C+MT6EoVfp4_8@8K6iJ&-zE-v%myv4`pl~7jex+@=h!r= zZvhfn{H43BS=XzKK1qntd zKT5%owl{gzs6{)CrTTI@!loY3fV8||d%z@XJx7JsjIINfaIt$K){#$#%x<3Vo+VJyopegfN=jt* zY+S1!G<7tW<~Q#cNZ~$@V^c^p;OAwX=*bL%u^c<}fA>RdKL8It&)#jKvy^8CB_2E7 zHyWNyyIHlLJ$d8WT2X3(mkEU@$Po7es&aO)@=XEf(Zf%}e{cb47xjk8wS6qZ!u7Pt4z zolv`uoV2cD=7!4VhEOZ=OW~oVk9Li(k$ShFyXm$^;RFHbhP zwvAVR@cHE+jfeA?4v~z%V;#GUSFWUPUwtfm$-Im~6J7pSG*4}F99S08e@^cwj$&DI znZ?6Mb6{t&Tw0J-!-{f-_wxlsH_&&`0_S@a`JJ|IFVm}{&}Y#swkknMETm zL6JicpUH91*UGB>VV=P>PcZeKQkEGBoZGk-=S&bII#IJP9R*XxS*@YSQM)W>Xad&`$>Qo_J?yB`i z>XE2hH}$ZF+f_;rkeKStD3@NvV`uKO9ufI!EpmYJ>B6?};AhKEOt`2N2M!qMAs@Oo za7-2VKdyZ~(UGPeP;1fIOfX9rfUr`#XnJ2&F6URtJr1GIgG&_6vJr?2vhNz{2QWqY zF9}<)AittkN!)1hoj^}!GV5v5EK?-!R!OV)5&PD4+_x{JYxrc5L6NS67rCsLeOFbT z@2DMUPL|Ji-HvVupXGm__Qd`RG`G#RXasKt|58PPkd$c$zo{I z>e7_X=akkqgYAenRHl)YAIDPWv@2+J<=0m=T3&}%XEzTUroLcufL-&~VHrPQ9lq-@ zm0sSBZ15erlZ54OG_Bofek=2?xK)%OMCaxOjNnVe?F4||(g@if=N4n@VEN^&EFO?D z>t+s8AO1D8X@LhxZUhAVWGbaYO3dEer0WAq76F|@Q$l@) zO%oegc|FaP_uQnwvt$e35iz>cq&*Bu+|gd`n;Z|AUYNIl)eMtsMgvjA#H)AhcR|Fj z=L32G$<&d2@@X0AdFn@Bq4TG+hOCN^z43x1ty!lRvnl6qTn@WqQeKX-MrC62?qts! zg=sy2R1@`w<6`WNXX#8j_5VY;2j6v?G=0OMAfH%qS;LTBcxMG5GV*3lS+-ZS4TTp@ z^#SI^ZY__8Yi3G{!>4JS%+H5&*g+u}4TwHZDKbUF20*D7TPdCEkK9*{kuoF?M3)6O zo=7r9vTWUX<_(h=B4C(tg3<}iBMT%QMXb@_yAq-lBMPy(rBP4_8pcXqM})$>(uiIv z=Gm#aG=Oeh_42%tkVbuhw!Sy#%_O=XN*4Dv+$O*D?3(N2?AjA9l0}R}_r+QUg=*n0 z?md>qEfjbO^+o4PhfFs9Dm;q%N*KW`uhdQOnVR*BPuZ!<*48nHmI}HYk`g@GCVBza z&UOhoIF~bnJiMAV{xGJLDZTeo-5V*(<4>z~)Q33r)cszf?G)ya`L5F(>;kzpBGuu^ zWWGVM+(<#^pgSl{93QLJ&3RhXNwZmGOsaF>+9 zFcM&jq_h1+9`D&vEUEm0W#0cFKI&h2+5!}T&@rD`#ua{o<+M#B<75=uuze;g7mVb%QuGJ zkm+e8&Idnvnu*Edin=FEs_p9dKp{_fF^@(c3_8r`#;Kwavw*B1H19sN}|S4xv$B*H@Zy#im~P5Rtifp z)z+=QBQ(GKA@~{&8iEEc9K7%I&Siezqa9qWAyN>mIZR@qx2}?85wfp&UNI<+Rnw?e z3B>*Ixfs!@FW1JFNo8S72UZ(?2T@pplyG%`)*A+e(xunyqP^LKrw@K@)7!^uGTx81 zy}KE})*+f@x4jj4Ckq)&w3zW`D=T2%=Hb!pk_|T7isRJzUUs8u;8au-urc-jr*-Al&8}+ z85~|?N7r>f`0fs$2kL^Rmzx9&%chycp)o8C%XhD@XMB0j%WhZQfcC$zfIm3T-mO8i z_gXZ6=%tZiA>d3BnkjdL6jAS5WVGOJr-QzjcCs_(8Y?2KS7w56&}V2+AP6p6;YdH$ zAorD?K5(wX?-_laJKr^>HFf@@u1w)sG{M4?fx zz~8E^nxt*?!1kmWc>B$cVMTVlBpI`%K>UN9oHAcd8yAQp9zVAWk9PC(ZB(}sip;%h z2D5pEu-jtxL~U;oL~%uYPj7(dyQDsaRra7{t+qnfK1bo@{-n(WVULnt*fo0soao^r zNZUrA={h4chPTpZC{fC-;*d!GEW~CBHodfug>y8kGVkAEFY&@kD`mQ~0wuFZw!B6( zB<(qLvcnj9Ij(r9+-!7PGJ(y0l&^dfKZr+Be@rIGLo~hhLe9O3s&FT(_+g=`hGCM6 zc4!Stzd6l(V)wg#%iI-6OWu!bz)JAc+ilK96lv#bo$8#5(oOXjX_5QAm!Z!7+Mbb0 z-^bxrfcgCB!TBR8cLoy3cWf5_WIfU$>00BPkVc;L_qeOD-elV60by?p@(;skBsd?? zBThN~)K8tzfcmMs*@J!4*@frD|FD4C_R$v5q&w<^H;C%@T_4(R+9L4k&E^f`q~w!1 zXr8X8WGIL-l61T|v*o)aE_dw93F1{OK2vi4(F|x2-78wQxu(WFfQUl1Mgib<+PI*| z{2amgm)@)+IDT0_pCe2RN}|&$&AK7-x}K;4(v1?&%k3d`JESvyE33ii4;#!rS3Y%@ z1{KV5RIVF)zR!l5B5jS6IvT@1-ePT*g}9xrO5UtqiFD%=UoRGD?GTYtMu99q>i&KgIyiT7FLzq{b?Np9(%Cs4ftgFlts! z3^Pf&VqPNusX1}=!?_&SAidHJ(~j@tvy^d880m&c+KI?cEaX+x?KkEqeHB6l=m##Q zrRC2-dEZHI?iq9PE2!V2U)L<`TBQekg%B}UPCY3b+DCkZrP2(>n-K5wzKM1n&CzeZ z1zHfqxpc%KJ->B-91G<%6_(3SpAx4&B*R+8&5d}^wq@ob#h}R7EZg$-yyHAAcpHD3 z#sAA#nKFqHo${vPGOa#-qTovLgeZ`)Z^B7?DlDTz+;LJ?+5pWcBBbrn7-*PAJYR|j zY*Z5O%LGjq zfAqP`8%b(J5HXy~e1(HKuB?D#5Q0nAIvI89hXi%P%&*DDYA3$oQIqyV$+3O$QK{D4 z1@F4Os$7B-m8SJk@ysp`_bP|8B10+$# z?5;@gO>{?t(k}L)RII+}<%R0F`^anBxh%%zP%QSmlG1@#nv?o1c%at>QYh%4fh6V2 z#BBFcV4`4~+z?0?0-=RfNlhPhAU!t@9obRRAb+;o|Eyr-H-;dY zQDcs%;#U6$c}3Gnz1bNsX3AeR)&r1vmWqt&BE5#K}eX{0;`A64l6>JR81#-zT= zk@o>8vr*xRTm|-z(g;K%aY_urwn+{#VomKwS?7Wie%aC8mYu3DDHhP#F$mXazN0 zo0IlihR5qdsHg_)OEk!F^uIJ-Coj*Rk?8j~mQt8a5*?Rt6ty@ufAm0Gq7bsN@Z2ru zo&!`M#SsAGQoYoX8Y&NJ%o`L83Mu5Yhy}?DkJrGx9)RV%R0-Q&NUW3lCO%H-`Z6@B z$8GPW)sc;QPWU%RNo$u-hfm`HdCB6ru2KOhT6jYe^jh&R2FcgRdew6;bt>y+?w%<@SKg{!D|8e7>`3W<+0o$xR@t~8qE=c%^EU#P61q$}T z4<`?b)DwQkaazs`oX1T?<)nNzJgx>27zx4^ZKsd2ZT-Q-ug$*s{j~Z}SXiP^pC33K zc7u*8I@-4}aMn9}%Zv0kKkc4Sz|T+EHl|qtAW66DglJC^U#8FNIA^>mW}1;iQlJU! z+EFDu+bI0})HWTVCif?ZaD4hXY1GWhXbbo>U~z_l>tTugq)A$dA0LG@$14Z#_o!Zf zhjDIx$=E0Ts1=tv=-uKs_fHlTh%PHmE=x7v+Q<1kg0-Ai)gDIZeuKz|a&p(VPa5V* z=_Rn}5uFykA+##^SnHEeKRvY30mr$jKLQfy5&a(>b%&3*ym3 zQr)~mU-iLf0uw!zMfoZ(P8w|s8nU4C##jxM-AudgymbP}%Nn&4#RrubVo@X_dEhG@ zA9NY*U+UH#`u7o}n~<}{-CT_tuOa`it|RWLg5FJe*-los0qe-qbIx05!7q$z*zqjR z`4|nV-pf3RgbAH+$#)f1A(8&-EDr~75Wma{-7ry1gnB6{gx%`zTB2x)-Y`cEHOPMQ zDv5AaQbK%n!q5q1 zav7y|zYybtvw20|1>J?xmemd}z0LPGYj{2~_wQXlT`|5=t^Lrr7WNvqG4;zB#}-1X z!lwgjTzHtz*M~zA_%l1Tc9&$Sp4)*@{&bM&D%LocA^rIN#&BQbY$i+ARnC79fqd!? z+?Ik2MBOx-l)r^RvRfn952lRPT?&+>lCH&|W2!|aUaNZX`rO)xfF@^@tI`Fj^-H1FIjOZ4Wd()0 z{rtQ(@IFEjh+hsK^CM|s-TKR-wA_Tp(yvrRb$P$8mrDGtVqnc1UQRH{@E`=Fpp(~V zPexLE|FZlFv^B#(d3kwlB+n7&NsMRmY8-^Gjj3W(Se{#4Micrbvs%o;MTz1=j3i>} z1O=NzaJ*f-bwL>Hcv@StU@ox#L{CB)G(@2&q7NUN8h!0_bLNfxhpP`Y;d87(Wc*jS zPoK7}ia%L@kTYztY5>R-+nj**Z_Qu>-upK8Q&!gNv58)n|10tPUA&&{)byLx zyZF)^J>=l;GM+v7EEC%l{4Z+F#sEJNs@OhIkcdv52MF3&4!+;oze$(f@M|a4E1e5! zyPR!k=d|RTr4q7Rt;*?fe4&(ow|UEb`pXbKa>vo-TMg&oV2`lkI=K%VQkt0Nk{Htn z-_tSa-2LWkFLm!-g-aW0I1wusJHG7;Ne`c!{cBw8Pe(!3rkZr!`7AI0r;U{}cM}19 z?NyvTV29slkB3#;9VL~5Z4LroQFPsU#)CJnEM!(E%|~@CJ6-U!Zm1!==}B+~MbTST z0ux+%%;K>m4PHn2vmV7&ldDTEYhL+y!(F+unk^&^N85liyNzo=OVU|=;k8l9#8?`x z?_2FNdvmRQK!yg2 ze*xT|e3B2YTYAJn=}yZE*wej%WRLr_8~eEtlfuf2C_VgLSlF~wD_8;edJmZh5yX3x~FrGxl!bGYPeh zIm&5t)D{CBY+zC$7|g`g`bRZ?Mt~o39W912lp?%)g| zM2|h5wRdfIW!Ch%9(tX4kPV6h6bTdYZqcJ7;>HTy+dZ$DyoYD%VB=ehpuoJ13izIC zUAuVO@1H`Je+Yqo)av$N%^CkP3|z5D_mPhuB{ZuJ$gN!a>8UpqtaIH22@fxv(Vooo z-dDK9{$^byH@6QVgitecv5_$R9I36UUtpYIx}Fj2;UBd;a{FddpA8a+T(e>25R4l2 zEU;22&xnI?W{)d*O>xN<MD&z=+I6dBrmM?+(#K)> z+z@-vDaPfh*qBvj*fjX1Rg!gdH0;*{y<1FqX7A9W6rIw@1`)`Sa9VGH01&?4E&de` zP~cZITqp52!PU^C@2XT^om(c01B`9Em1XEW+f_x$mRaA_h-d*ZX861kiH`GkMoO`? z+>L4^Y#;1HjP!+x5!=8FOad%tIMh03&R1K;qb$C7DZvv+o{NA1MqH$cRcB*FtqNlh zI=USuy7*3PnRwoqd+JE%_joGf{3U@xDQ7 zyQ+nIYtELp#jE7Z`BodZ>uN9SH4B%mBrCVh*5`^z0%NMrR@%f0c3G;B{@YN>$|v$a z{$&G7fdPQ)}Wz$1>F`WOZ8&a3p4UHdtGDda>fJ&ySL?}QkcRL!~b1V`J&^m&QyqXvYuHEp}q zDJswAUUN-Da=x<|9ZY_i70wX+I!HDed=6Fqoy>8z5o4-M!L1TY8rlx0=rFt+8bXXo zJjSa15sPJ0nG_TuCF;K*44FQrk`NNUy_bH* z$pZgQ=g|6brXfWmqcY&GND%qM#LvBd=Yi3u4lFa=wiFAtfvEEzUSHbucS5k+#K+zC zc*fosXL>})qRe7R#WPdsXOX{q74Mru6l4ASV3Ru3y*%obrg+j|tbs~f^*3nkaek7t zK?%7jMm+em`G^Updrl&jW){1if$8{N7v_MbbplliFc-ORP#0ILSXz4=X-c9p5%lpB zQp6{i7{D7ZHc0Fq<@L&nud3xLW!d!5=aPd8t7ffQPC~Rv%b_qjZDe=%I4aldL#0(0 zIX!6cPW+G4_(3U?dFQk_qsXn=1%HgwTre5A4+?IFe0H&bB~X?b<98UOT=3EDquw)# z`|;Psl26o5piG>Bs8YL9tA-8NPUH92-%fLR2XJs@rA&HOahd5xM~z4R8GS6a;HG#hf`@(K`yPHf9Mt$p zD(m?w06*aQa?Xno0C7sXarsfH()|7rF_@D1+}Tcr3ocLPf6TK<0ppRF2n7h=IuXr= zU}T=iZ@d=RK&&v?nI*P{`_UBDd9*$JA#2qYz=5E;%H6`ez|_mmx(Ys5i{=&RWKWj@ zQ)Zdtgn)d;sj*65-nc25{>^YuRu2HuO!Mn_U-b!GBp$F}tnNj#-c&rp0^%C$&f45* z9}7m`R6TByJ?F94(zT6d@QIy}bD@KjCggvxMuGx}_tELhvpey;jQ81WOFruz2}(q? z$)Dm_NBlAO@qWVd)h&@%7tzcM4%b|-2njhTgvRY-kBp!)as1hI%J{;hUDWDrps?vh*EvnE4&QMp5{0{i+Dat9Yow4s1X zj<6wrXxe?zviZqH&&WY6(`#@D7-f%s4 zYwLIyHQKMg%n+Cp)~u3mC3k;r?F5=V5`NLo&CM!FPxIl_Ny zR@7QP*KN##WT6zE;C2drQ_fCFS5=~ucLF~Y-%&^WAH(;$-w59F0ALufB@@iAfh0vJ^w>J+$|z#AjU6~&|ZoDl3EXQ2Ch z@9^acLy`KBr#dKFy7RhVN;bCq@g<%F>hq;QVjy7hvQxtnXCXwL!B~u`H!)c4y6gn> zbG4FLR?EfO%4g39>K6OG5p+&ys2P@tc*IX^6l~@w@j%2sBbK?9=L-QFbM0-P^a5Um zB3?HjP9_OhCYt*0jEqdRh$r{k4wW?oE?Kv0$F|E?{Sz!=%oG!n0tOYuPX&=)*Akbv zlT%w-e#WJVdZ8$D?6b;L`j-6B{j7?LyuXEwYVNBZIx189-AMjM2MXDwX;&ad?4Utk z{uLI_-zde&+5L&!uHwQpie{&DA1=BIzPoL(j9tf%TY!(Qh@%#DYzG+Jy6yzpv$kVY z9^SqwZKc3%J$>^J|NG&a*AL5&gr+wuPE#8ryCr&VIySvud|dzdWI7R~lTw0>Wv ztmzV;M!#wVc!G#;0K?pGZ%IOvmZ6L$CCrXo2vH2_L=-{4MX2uo}iWLHprwJI4!RY?0smu)ewzRCd^vo^Jj46CwFu)2hcf3uh*m~qfc$8U&`Im7A zGP$0-i>m1SV{2e~zoF)q1QbTh&%>$BAR>f2m? zNnJ}}v}7WGStC_PX^IN&$(gnkUy`Kh#I(*vRu)6;8Mfyy!Jc^2yHlhEi)wk>Qqu|J zS0GuPBnoVML~}uDuDh^93(glKXfteC=&q5|@Iw9qJx}x=$Xz3hLW*^??1CnU#zFJ5 zg-|Zy%uKZ{%uH!}!c~)U?<*}3^q9(;lO+_m>Zh+W~BSa6p!(Dz+5(h?sC;`uW@L;a^k@Y6s3`%ex-6hh`w8JLmdPA8$)Qy+u#rf z;XcRU`6<`tysPGod0QXQ?rYF@!v)a{7X0S_d{4BTYvsSY5^)EZB|ZKC^M4^ zOHqi=d=x`(J)liim4H}6LimXTz+sY{-r662c~UQfL#dH%p*Sn{k$h9<%T1Sxop}D@ z+b^8}jhg1g(h}7KgLNOt&Aqb1zIxN_UWT)0v*&9c39<1uV#>iy41Vdi>;Ty{oK zdE?!#W}U`+?E3Mah`1F|T0QkcwVP3#hIy6`ua3577MYs1IZ~GWyNOt-jJ0h#n5)q& zhyx5F_*0A?WSr--<#y-Sp5&>2eJmqpZ^UOx@H>taxDfv4Ws=|@@6VWSH`Aa>m3+FV z(Ss43*f@4EEF$=B>=$dYI>}h@G81;aJSx_JGI(}-tMx`Vy6ap3aOEWhAwIW1o`n5E zxRGAXaM>IF=oeq{wB8lcMzCTXDg|_nOUs9j@ zqxUvMHP=ztQZ@qz~e7)n_jJX@;F+r@5>Fdn76e51a_15+>^1DQg zGZC<-f~Z>q7*B1+sR8VCzee_`b{qM8J7&`k6}Y%G7${F``r&(p&wsNpX)H;ld%%$= zW=J)V@e%c4CUYzQUM(Z5{%RH{=1u}9)R-T8`V@Lu&YIv1i0RGe$?cEsWezTYnMY7_ zsJ;8+oH|L{?lp8R>;-lM>_$pu8Di$%se=1%Z|*&UqA5Ko-S&oHHD>^WLD5JyH>Y}7 zRksFXnDRuyw@f2Kf)gr@szRsY(xK^-BN$9DrT8dpxubWGH6OLo*C;MtABIN5PKs!> z9$mk{T#Co1Ndt?{bL`H@)>1F@#iEZVpgUiDL#@%(Zh_VAVoQ>b`#_X{l-3l=HXPBT zdG0p(!5l)O2pIz5H8sCqG0|YE!E5a@!+TdAR3|<#XQIy78MB&7ufoZ|+6&6Ab0OX` zNCScZth5(>oWebuRBN(~F_Q3;m-4OAc=6SnU!;%;mx#QGnb=%+d}%IsEX6p9KOy1- zz5fUkZNi#-{45EXrH}Uztg%$iuH0#q7A1WBvg8~(&R83$YM9B!FVKy@IWOAufu1j) z;QYJ98}7#~bm)lW)a6^eDSPxbr)_kobR@Lw*Yn#v%85CBUJa|LQ1Mi)B_<#)*)AAS zM=3c;ol$T8vEiaf0odo2*yuMo+bw8{am1K}fP~CIK_yJ-go}w7p^bfDYnXug+z_Xb z?$%cKN)jE~U64fYf}V7Hl}Llt0wnwwKi|auC$GS^F%xJ&zGu;)`TsmA8<}wyJMV9H zy4$~+6?&y+c+`&*DliL8(X(q+wGX$dzp&&1kl69YK5KI;l`z}?txljL^~z{y%~=Nmu+A7)eZdDqx!8rT7^T<4u?K> z#eK~~gAE18IrbIQ>(lRx?PT8asgRN(1Cj;Jt_OjUXG zd#8$0%kvXTtspL)UX~t4Z@el-r)Tr&{ZXp4$qw~#y!*~Q@1=C~vI@v*iT2^RRZh`k zJ6cR|>GE+drpSJGX-s})BHlmwS5}a$r@U9zSgKCd59&%R@cLuQwx2mLpe{)$?m)|R zPHVR!B=#`5z^nfBznoWXRUxkvXu3xaU1Yb}tz(T9bjp~?j^v&Jv#_i?LuSxTm_cN` zuuyR~8~FCi;{(Il4H7z@3AR?b?uk&4W#|Zpaf4`dqc>HlnNSW1y~#)-ou(GgoV!X4 zhnRF_x1zE%7!Y9{2ta1HrCmUtQBwv3cim~(6lDd=rC#N1uYilm{uR5!DniG(F&dJBQd0qrDEjMSC2*rLkt&VCpX zi$AFslHNz=MWHOP_Jg+K8tG}Gj}+0=0xRSZc=#cMn;lG@y^sB;2 zS-8Q6v1C}84{(7JljX*oLA+P);yto(2Xj}uGr&e2bDtwJR`~RtXKctgqoAG}Y*~F& z&5f`^X9e=|@<#%H6@3zU>sZ2M`$~u86_qJ{J^XJ~8jG?@r0N^^FEv!AbU zg7v%Tl$TRIO(N+yv}m~+uoxw_6rE!=HdY&kR#B9nKrV%dB9zpjii`wgz3~ys^ja;P zGQ^~v^H}Cp%~iJ-UtxGtKb7~(MQV^bO`xPjpyZ{Vhc=SEDTm_!olarZ_M(z3QrGZ~ zVI7Q3{}f3TV7M5}IBhvVMAoxlLMXsTQc)uu(c_}QuaInpIadT3%ED-nSD3sIkAD~I zAJ6;Q!Ys75Q;|_|zTQQ=r&^kMdz-iz=`H>*I5(dXJ{HiTfxFl%=KA-In-PC+1%HQh zKw%T9sZoaZrS2|AU3F5UnmCtiH$dP6^^PI@dgX|Q$`r(&ZOOY6u1u4-y-f*Pf^}*e z@<}=xP3MU&exf`3UAW%Ii!(#XY;>o!doj*Qhq}oQ2Mq*x>ul7FG=vG{9>kR!8OREKGjE?*+kJXlqtGwXbpy#0?DnhA1 zT8MwEykk^OKzla*PEGEuOIeA9Z7Ulp*%P_vz@*`!;FQ2%g~S@z@_+lLeeijk6eq%9 zB*2=gou6R=^4$U%+RT#*h|dZN)s-=i+}p{SXMBil%?j&ss;nVrr2_gH_R^g(-H+Qe z=Or<(cTu&3kg-sM+D{!r4x087aI9cv;`BRbgh~a+)34R7tdEUS*$(AjYb!I(n+=t9 z?rK_;2YFu#)e8k;W}5|5G?f;yf`}#&TjD+*px|0AYOqZdOE6ay#Ya+h_*$BTW_~ym z#%BW8JGxwK_UIK;(O{6VYdO+b)yPQl`kXyTUa`QV-KUEb+&H=9&<>XL?5f?R1RxfA zlYUryNilX&(>K{z9`cZ!k=S49JY8Ke>(kd949C$w{E+hqXb_+rW41KbAXtBi_ z8*I~8{7^2$ETJi4SpSw3Fr}%??TXJ7^U+HnDC?|@p(@L%lawhrvVgM-Rt$)dl!Fic z4u1!`7?J-#9~-lrbi^QEn*wEKYR{*sCD95og$$_8G&N>e5F6i&Y!56ceb7-~c#;lO zd@{_&p$Wr^PJ95=ZiTWjtt5+C*pIb@-+oK&q|3rBLnnhd0@2jl zXlUCR(Vi37**@4fTDw)5B-W|A00&X!^@JXw7JXsW_xDiAo}dO8pqjZwIk#r4RNK$( zXPG3OH$t2mF`cWPy$7(SUk2I`YuK;HFkj(y_+z<%=NAP$d)Qb@XnyrZ$&5-+MMZ-3 zQSM58H={D~h?ke}aYkhw|EaelEsf0LWX&jC^i~{)*g&Fh##N1*^gD7@%_Juz;<7J# z7DHHy-R~NEi0sUrrEDnKvcdM0*G{sH5_XaxYRj0;LG=v=Q1S5ZVFWqV8#i z+kNr*IaI7Ot;v3K18m=@bs!dIo~9qhsq#s0-9;g|1Ur$_?2}XWn~(RpD{?a~Etd}S zZ>kkln+0;W_%7dJ`DyDHuXjBJxHuF-y*D!vgjYWSP#o4f6}sEv5n$*S*DdOX=7sP6wKRt2`*QWi}9OG z)7{B1+!)ZbzIEJ#3`v~p_7+0xrs}@l$?pV*U?2&m{qMTH_b8>+^ybcY_QFr@ z?m;4+Lzk18yrS($VEP*sgGNW>10)=qBLaunS3INfDploNioxTQ!w`O`=O&Qw=L+K7 zSrt+O^Th|}fC3`Fh(hMReYUY*xPLl)U3&ETqYoOW;-3{(ClvVhw3gWl6oA$}W}C}A z>>mBc&i_AixWp$DRR3s{)OQ5nYrp3QtgnDOsG;rRs=|@?J4$-wW55AR6voBUgz;z^ z;kjR+87j~SAUE&%a8iqn{;Md#VN!xN0W!QjfB;ktznX5Yk4_CMJ+L4jP)8wgkpGTb z20u5Ksq)L3T2mC2Lcq~1^#63|kUPfLP^4h!sQm1+QJCr3Ji#Bp$;k(%=Xo72`OZR| z)%EZIDdxOBKLnHW=d-dY3TP_IJ1B6w0EG-J{?OX?G20-5YF9dgSG_O`O(FB|g(32Ij2*u zA+UXmviOT!#1T8nmiVhpx6th@H`;dYg(EEXF<@MhTqL3ffdKm>-%~e^T)pgpG9PtA z72OyrQ^aEnw?-k|C(h7`S({Vav({_07O5EeQ-KUA(<$p%%C9z#4e(~n#K+~MM_}vG zbf26(Y$LE5d#5J!I_)+P2e}pogqCztZltNJ900jL>ecD)7^Z8rnN^-fx^1duso>A@ zt|v^M<3Fb*q7}elK%#Vo`-9_lbbTQ2m~%S2Oo<(1)J;Eh1;7h!WRvpK@61%npTuSw z^Z@`Ojs}f~lCHU#!*S%FrJrp>b+J3o`Se1?IklBui%+UZuN8k7EU$FCosak!T5_M= zz-bv~ux8ZPYZImA_)Vieh;8DSZ30_!ey(dr-`h!ItD4un9Pgy(cq!WPP2W}Xe8u7x zcUl6x^qz#WvwM)5T#1!AYMOOpNv_QC_hoE|rc4sL)hQ0Wr;$XWLB9CgGbSxSHE ztvkrs@w?8a!gS#czk2Zj+QE%RPf&W-1TvpI9eWgkZ(aXVvCCHkuGuVuUnS5{rsB`o z{hWP4F@BibUw{s4a*a0k<6VO;sUaP-NCCjeB=^*Dbkp8KlO=pVNgayV=K86bz%-u2 z)}O1B(z6i5Fd}}_Kr4@kIkC!{ZtBSA*Tvx?h`$*rjm}2Iu|+P#blW}mtNd5%do$&^ zV=ohV~j} z3yYrQ&E(k*7yP{WLj(O&7kzm*?i8{@5Qcy(ttE?;Yq-XFfaW%iNbRmqa2PXH>*Y8V z6RPUFgl!VnCLZb+T3m{&Hh{8^y@OHU!@4E*!9D*xefRC_J70~8Q6-&%+P7yaU$qGf z$;*XxJ~gK#Aq5fLA#iNQuU7mnc~ySPKJi8%T}%f*qTFe|ZTF`LR$Gp3hV24<7=9TB z{$R_bNrcKf1ft^mBH!B_jyLy!jnt9Mr|D*?fz(PM|JHAygb)|Id)A?gtS(_-PxQZJ zX^j&j6h#FH+23(w?mep47!_w1D-{M7D;4BHw3@DB^B4aFCN+w@i6XEEY%Kd7Q%Z7t z)E0~qS|+Zz_)|S(5)X6i5i=N^=6mUdfm;zCt(7D7QCU?N>*0pAu4zu(6VT09bfB`6 zG9?h%ZJTsV&Aba|5-**}R|Nwg>Mbpy`Ec664AQ{TrVU8IJT39KS)e^`S>rFBOf0s_ z)BWjDNwrG8aOR8d`7Xn45PJ++BiO8eJbM6L%c~wg!^>x7M)uP2-T=Ja|L#$CanUd_ zeG2=w^USAydCzJddakd4YG@K@y;tYD){4zdO|6kbipeZ5(6C4~)OYlFXrEJFWkgk! zV+U+YuV;P=m|1d`Cgx4KfvVO@E*N#kFg-gmX|^8;z~%!uyLO zrObQb$(HNpqyJdvyH$BEGZ`Q``WEn8+mza?TLZ(i^9*jG80h_!Jfp=_();i{GpO-) z@NsQG4w*Q-^(sNLD+Y5$w^%nHcnu&jdo7gmGRuR;E}be7fj5AX5>tyS;9xEo))=k! z5EWrC^Hzm^hZTf2`Ee7xNL~gyJpj^tM!Il6(=>A$#)>{&y1}Qz4!hycSgF~=-{&O1 z&M2+pKAW~@ontdjqP4kxAc_Q@jDtMfhy0xx$ij|*%ehSK5H*B2efXl!>v6pQ#X2vtWPzR!sLb0mR%@WIzm}f%U4ya{O z-_#@6ZeG!@Ng@dhOAkfkXAh2)ep_*I480%d`=w50mMt7i$yfA$60H!GAGcE-=>9{u z$_!$aXuDpH84uQ#i~IETJMy^h;9~*i;NbQaK)Ldq*e6C1%z2k`lH;pU>zDx(esF!p zRz*^prPc+$ZF?>E<}!|aDZ%yr6s;5^ycdE|YH{E_OGdW>SuH8(;-(9WCx}<`4$TuR z;9IhYEV<>d+2_r@AAT``!FCaQ2OhWcDFPW4V{^KzEFLE)DLf(MWxLV~*1vA9O_YVCr~BWb+`A-3ts>d>40TS z{<|Z!^2X+m)%c21Wx~#OKxn-}4{P~xF$tsCFaa`Hz$pXnaTOgzh6>#3V%aj{x-$#^ zRvu}t!Hl#UQcvnHplFl327UF#Wo$4;gZxtVpx$3IbwKk?S~pOfg5?j~3ElWU@q*`V z%1Ud0cKBAxIDL5tB(}0(Spj(hN4!CNr8S6Cv`s@0AVvxFkfb}KQ)3~IL53`n(4f$|>?!~IyH{4Ypx|Ia#$ z!Rp(o1>?-ABnBkD(#!_eOHvg)Q1`jW%Ug?(e~PgG;ij;IawV2dOCo_G`mk##FxnzMiS7R~DRnI&gqxGiPC z#R1)VC}`hN7+$y{oU84kSf{!fU|Oxqr%XzcMft7oIL0oSD8S=l3@$en(2yKVfjlA7 z8KHp}qH;bsyT0jGkRJG1mUT1&S}q(d58P)g`Svp}mAgE9Iq&)hMF}VgC&WH@s<}Kr ztl^)BzrPiW(%d0q+8q%1lKuCdspS}3o*npf-o)z8^W*V91CD>Urf0m3Ii18dLTd+Xa9j zzu9ws`6xi>(UjyjMPKxDD0awY8kqf1`5382;R#w~`@T6Tx&iseaYGD1v)OUjp$y&W zZ&1qerqzpx;3K^IuqzJaFoc5>@5hNf#d#HVHH!dhnoIEiOif$%0s&M#tN~h$j?hMG zB3sBsNr*0`K9j?%S&~<3SBL#LV(m1t_N{ZjsuD!bBfkwL4($p4H-m*a8$uuSDG7+y z^ih!+4=24df;)+Bw$>QE{oaY|Y2y+jp=Oz(=2#wD%l*<(Vy>^dOi7lD%Yxk~tkZU+ zZY~foH?AOu4<-&I4u?mDyfo3YtTU8c?EIlZb&$2eFn-KsU%PfR6p_;CD*#32d;j2P z?>VnlWwI?UHGeQ;1v*;@7^9ikCve7A=DyvO>#n9*njc|5Y6M60buzHab~^r4e2c06 z&-@#E`X%C5QGGY@=vlz#o9Vha9a_lT!OM%e*3-($zEh`lxA{uFlwU!Ir0Doe49Q&^ zhqAb-l7rE%7d`k0UpqQZWi3JFWY{{5m@)4kS~7X=KqLmB7+kxLPeA6V6!T{I28Fm6 zd25XSMoZ2d3WuRJ^)ZrLPv!-0WVolq*4Hl>>6f&EJY;K$bPy3;K`A_E%_RvgFA{sp zJG#e>GZ`}gyZ)`&=?2@2cIE@X>!JOYQ^k{ZU(BTAWltCV@$xL7FbwJ)XU;jqDi-lZl(ny_tKOmMy9^{ju}%h5)1+P0VR3vJ+t z?5;nE?I2AMDnKrgdUCyV_WGe`FfVr-e6!}cJGF84yg??FskwSL%0k^?ft6l8r{f;T zN4;=t{(Ob8qY!+Y7rQDi=^(_mFtl?c=vmKuzn{yh7i!){6@0)+JiS&AY18Lp{DO_& zdxmri4;+K9a#MPDGr~QCLq=*&6Vb+C4+R`zKP|t1&)jw@Sn%wq@5Z;q$VB_`7x#Vp zaY}(A944hAdi>g5bPGQ0tsa7G$~>{GW5mICM9^}}p;;P9gNi9HGQrFp3T(I5NU7tdEVJf9yM z)DJM~xm(k%J2h)(tcc@#Hftwg%FKbei4xkb_A?Y#72WX&In9clHJMZfGMW6^IQ8d| zRGIff?Fkl#sa@#I&>{lq)OsnGIlyQ;8Z~VCD`ablbM*O+xfAez(>QsHQok@HM%>RK z-5M`JC|Pku&eQqw(M^QZ&*U+$G|V{GvTyrk-UEB@T6`q_{BqR1O9v$w%8Y94Jm`&v zRc36r+4tu^v_6(x9y_`JK#p9+3bb5jFs?4~Diq~Uq-NkEhE+TM^ zwdW8dnVNXx?*+X#Qpl2R#&owGBLDDwE+OA{c6RjN%K}q3{!8TrH%20eTN#FBF?=hG z&Se7gvYAySZqB+LK`u>Kehuo@B=156lasdss8yA<#^s^9MeF2QIOKG6Yt>O ziNLy2S&slGHW8C+J1Rm#Gu5J6LUJBK)D@Hslos$xuX?)wX44D0E&k~KBWDD#!<+u(QkMom zUW@0s0#pbDh~O1Rhsk$L6`Jgr+1rb)ZF&3Fdki{piw`9_>t}(c){9Y6Fh^ z1_dmDlMH^#V@_kBQlTtrk@7X*eM~AR4=Yux5{y-~vEKN@yr^RLnt1MgkXIsuHl$Ig z?MBDlG@t2j35IcD{k(pt&DhF~|DB>?I0i}!txQ_pF+jp577brirYEvZb69S)1<)7m z)X+wkVBqGaWzQJomcwE^8skU_qLOzdkQ3Mnn0Fg0b1*19lph zlquc52>ZaQ8$V0W4n!*QB|jClO-iLQqa4x7d^^VC2JV-OW*H4@Z4b36nlpRCB^zvC zfV9?mt=ZC33cIDoq-z<^Jk~#LyZKmLqE-YKiiDnF>VP<7l+fSmn-^GMY`sN=4+Q!D zXoUWWA{Xie{_;e)CR6Zt=b;DF26iQWlrz8t0SO%YAx7qyM??7I{NxPoeA~GvkUHwV zRkLOMd_dNv=&IZ2PCk1)3#=7VS6ZwwS>y6eM_XhM=rYQkdnoU_fb;h?)+p+;CU*7T z$}|FEez5TEzL-ExCJ5N0--6jCjGwA|&hIiZCCHz48`?;o&II5dkT-$CE7qQm<|+GO zgV{x_2@mMc&kycva(D{1MD|G@7rbjFEossYLhA&gBR8e00*YT;?O#Yk6VaVXk2fgQF3>F$0-Fx5ir+ zD}UqdSGVXxKiPYvp0~H+U$HzM$98kE$Ulp2y&|_|PT8dv)?jynIY?;4AKhWyte4Fi8 z(#d(#ZINP+mvtf$LENJ}UjVRj3<(U_GVDld4`zFs*GFhf!c}7-*={-N@(N6kVxFK+ zyS;Zdq7TtA%%Ak@yn|J}K3hn<{qibKpX`0K2)|;yu;Uv%C@QflTXur9z@8(h7YWC{`_7x8Z%lGYW3`of@kPxwqtneBr(N>&ptiH;7=O&ar(l zNBETEMzE=lgQ~eZB)So9%?t9#w$4f&sN>#WM~pRjg5TZW>{9&(%D45gk?Hbe!h*%= zb=3*2+P5MgZgOxyXd$|ev6le~OUh^%K(yfrUGqYLctH(h;G!Ze+f1sFDiXK-4!Z<1 zl>;_5FtLL+X2T)l+n1>Ifs7t`@c9{n6P63AT`;gZrob<%WGjWM-VBdKV`8TM!jZH zLzXgf>TSY2pLN(zOf?W@xlx1Owb>Io;FQ;}qQgrc^=H8$l8hP!?n=-;Fc0CUO|dBd zys(LnzFdg{!Ekpsmax)N!Wcm1w6M0Ml+fqZj{Q*bbj$?0kS9F*gNXI|ES678hGJf~ zt>_7n%*D&)VQFl z;`2X5TtM7lq4mt``PgOxh_4;eJqJBML;{GWPeAYyKPJ`AOAm4WqXNCP^Qx;VrzTzB zF2>Oo%a1E{_W|l>9IM8QUah)4{#jj+?ikPW-hq826N4v36@%Q<(E_=u1E8p}MR+SO zhP1N|jg*E{B@q44M|Xh4+v-HekjmFJlL*pZnkKL=m{#HUd?{jLTbR4r4q(0EkSU$7 zP?4V4m=soHc{Xhjc2s8D77+^@M8vh2X@fytYS)U>-{ysUQa}`&^7&LW8hkx~=cI>2 zWW+HM^2o`MV#EwE+?9_@QZ(xE+feZogxmL{MiVC@SQ)L&esP6E6+`pX^3@1iYugFb z7*~trIuE|#mlZJCT2MR__)MnX)|36BdIs!US7gHbh%~K#C%-)!Wwe~NsSf=1F*tAW1{=T*Ki;`pAM9Ccgt?Ff3#lYB+1Ydud zYx$EEG>A>i+F(}uXY4qN>?6RBxQZy;$g6;LO3LH$=~zO;3wagzZ8kwgKu1L1r@eX5LtR00ghCl}7 zmT=+g6lDmqS0Y7&EE%xTxQ8M5zZ9mn=z1Nb8c4x!VtqD8V}@@HD&CHBp_q$Stg-CYa@dpSs zC9!eaT;`vCnp&+;8S9=qzhPHaYzC^RIy+EE@+g$e=2bB3a;h<7TB3flSte>%Z|ACZ z;;L#59B6EWdZqUMn7v8ATD95Jb~be^_(xhlEFb4Zvq@U{s7BlMQ?swPjN?2 z9?%NLCec{!_l9TQZWwzeUH85u%^~qN4_As}{o6+d|Ly`0?yGAigpg#LVLppSw9`HB zawM{i2E65jHCKL{1G3oc>%y!b1XrEON(%g6@lx3jPeDw{r5BwP=gmqO5wRiTQE&h1 zCoKDh2m^`#*P26EfA}vjX#I_;s*V8*K5CKHSB19s#Kr}UbMndb6_~z!&K=C2gsZRw z4pVrpSU9HFJuR7{1*z-ygtz}!WjUeF^g7kfFpEqPJyl;vPXH_vz|nrks%^|t{0Y{9 z^%R|PlEQJOCxJ|yeYF1cv*mj6XdZN5^mCZq?XO93`9;DPuO}tFZ1BbniSuIi^?*lg zG4^RwLz5k#IZYn;j{vHF8K}B`*)Fu!+GZ`&%kvDxx7+{dL-mmcv`Kmff@SMJT&P$2=aIWAp^ezgd-}4*07!BeZKh8i6SUA{ujQHX%m8aos5o-Fy8W@m>#gpy@akpZplj6#4^;_-oX?keQ1K6A~G zV|UvwUmT7155VLj_(nmm3|y2!DarDnMVqs1MJCl}WD<9hh?$yr{sgTz$JyIIjtf7YszE@i3du<ENV!7bX+u9*;<;9uBVQttBA{e@g3~P=5viRjg1p-&(oQNQFRbC6@w20Vo_G9 zq#BaCu)6kn@oS2~2j0w2R$hkh6n-fQdsvO(iu`yhaz0SN;EOD*67cc&vAHj~&+!A* z-CPC4Yh^FZ{d71z+5c5hV3Q-HrMdag{XT<7qS;z1NK!{?=Y2r(*x0mBUw;GinAcR1 z;OjDfk!m0=3|~R&s?i265^%~cCa#!cLeVh_`^p2=fIDuFXv%nU$4s;6&TOqC*<<9~ zBa1hOm30}Lp2`O+Hl0nImg6O%U|2z{q?+k=Nh_MV^|-i+2f6RA6!2U=pZS(==~a53 z*DMoU3|0cu${}-2qK=#TlPCiFkUVhsjh=R=M)%xDYx;trm77$aA!5$Ng=L<9KDn3R z_BN7wWw~IF2=OCuJ*B~yn9ybRxXbcD$XZ^ z88Bzc^Q2z)laKH;sc7q;)GP|HW7B-kunw9N8q%N+Hzc7^VGsYZ{7YVt8=Zf3Jl76M`aDN zH`#sc*s<~Unqr3eVLlR=&|XR3;taoK-99O>#}<4G~Jepc0T%};Z=Y5T&-wBLtJ zZ4pDCfN#{ARcPs0yEio(a`NaZ`~I=?;D~3NDrv-UD#y~r61^fpsqS2fVg3bZ`Gtms z``7Y|Qh=4@NwVs-9ew|%qd(YD;swL_!fV9b7O zK5AK`3RG$t-U%hjjCNhFhYxIBsA&Kf6+?@~ zXmomHoin^L-q)Ctouxx;uRB=pxWJ&xZecipnJQ_OG#?2DNt zX3Uze7m1wCr&#;eN|%zSDp_I@WjuH)zVaVpJUbSwk`6&vlEOhBw=jVR4uM@H51B$Q zJ0r&l0Sil?#_%E!IxuX2=4$KwX`-Dv?J*vIWXVIiKI@Nb7OUd)0F|xGiQ}bE?^I)| zgm>@Hi7+$J+`WsyuvT+$bb{L0U9Vd&Gtc0K3^Qkjdmjm)I&4>2R(@a%w~qOt{<$xd zS-pAKDztVF?jN`9Ex+f~2>9$&NB!q~`YDfD-}+(B&d&4pZ2 z6_<#@pWXu3>Gibb zg$AX$NPp~|w)40_W#eULHCj&SS3R@cU}xL^%0P%rc_2#o7BZnwCQ6-*!*$`0)9D58 zYngtt7G~FQY>k}{Cd zv?$Fiu=jN+WlpoSiLb}^BORPGQX_s_@_|&KU4K*NPQ~ToGURKak^V{kwuBZ~AVw2p z?9rN6XM^wg`?E}ogI)uv%T%ioHdFc^skj&H%4MhFnz3GM4PH?7c<~D?b*XJuA>;j+LS2=!f?hB^V(U5^bz;RNkSXYn31oE0sSzo*~LU6(b4zO3CZuKn`Bpd01=Sti5t;-o=TK`rLZTqJ+_+QZ%iu|#< zi0RpIT2KpA%7-95{~eqhRJ*sXJ0ACC$S63EV(|AA#6v!7IBUa@#$(d>R2VOFYKucV zzp-5#&R&h<7^UfaQ(5@dcC#0tIWa)hcZbX!V$q(fmfbej>TR)6WV<0t?_U|si`$L= zK-mu#hI2gdo=S36nYjINFJH(pV_@htD&qk1kwrW{mb1qT8)IHi_6_I|%_e7ncALb+ z-^b~gYMtQ7h@RBInVwg!<+fnm)lofQpNqjEJu>g``wAs>u+ut2oZaL8@AT@ien2US z!DpSCh-zB)8bh3=tLm(_!VwEcu#MT`UG>0amLFzZ&zXT?KdjZu=y2MmDNX)b*Y2B^ zbH2b>@M_z0N{<3K6Stz|TCJw9bIK^oKxp-DPxpV3_Lfm`hFh9w5+HaW5Gb4kf(3Vn z5Zv9}gS%Tua1HJj+@WxSyA#}{aCa@Bm@ntdneLw3Jw3DTPhc&6)vkB%M=@9Ft?C-@ zqg;O~2lldqkq-o;?|-VPXTi}XnzuLW70h$%89NaVUr-j7m1)F;zS}eww2o@s;%rB@ zTkv~!mLgbs&zxkRO1$GxXP~#y(~B+^8S8dEWZ$2$J(~GsQyI0}jP1_-)?GoMz4{y} zEzthSk@k+i;>4|Kbt`lYSwAB3oa;T@c+`jpJ>prEeH>dn5>XB)}BSXj}F@Ep0h-Ftl}42Jnf_?Cbdn+Sb=Fy91EG&z}p z3WY;SSKKzuaM)ZBrO5u=YbCIhxf=WYvGeoTH9U>q9C(&)i!{oul4*O{3sZm>rY-8$ z-y!mQlr&tdnR*55NYWO@WA&_s<=g<8n1B;C23yPyb{Gq4e?x} zEfCrc0q(*_1k}_qZ1#go)cZd#uLXvbx<>EwMYQoLgKi2qkMsQo`t`r6wlBa_s_Vdh zSA`N`kAnfg|3E)rb~&*PE$eQo{oeFdS^lbc6Tv-mmnuyPg^!Y*?#2C3wCI5*IG^Gk zYg62|T*@)u=ZUi5gfnt~H@O9ldcXAQo-%VWStBjl4<^Qgmp> zVb$!rQTn>F9y8OuvCeK<)8?f}|DAZW=>4IA85Z))DlQ@JFWi zMe#R;^j7*kLC>q#Ik~yyBk^(QnLamb;IaHF#T>%md3a{u<;FjhR9x$*Q4@YH36SpK z{XtePcC+&hQNw0y`&9Zg-`RTbgcxB^by`G1-FxY)+G3F2*C+g2AP-o4j^ab1*XfgZ z$$EHWwc&1xdBH)F)9p0IvBoL8)@)#11I9Z6r&n?>Iw>VHm9D84 z3}&->w?>WL6Ixq$Z@9N0f(8i6R2A(PaZerwVh;C^Y5(dzhfhy8?*6&^3|ftBo;$uG zbT@_xK3%cWk4J)7ZAai*)|iscdoKVJp4D~$=lmvrU|qCJe*3YDK zJ}vFFZ6~_M5(^Zz0z2>75E+xnfP$?10?YHp;p*}|4A#`jY20+YDEhgL2SGa9R30(P z|8q`u#1fMG1*#j4J$f^JbzkPs`OcP)f@M2{{2KMdNxG$`*YIzkyAvFu0L)}n!xe3th7JebBsc*7zbfSJxqAZQi{g`o~Tv%n!!uOn(TLwKc;(qvv-U7nO@i1WOy zSwR>cuBuIDM6?}9LdRL?i8>Y6VqMGJlBCM~2{U@NcEoaDFu3u>XzsyQxwr^~Ro{n} zjhJ!EEB;koZ4IRzOTD!a0XE$$aXeD~NmaL>zBX-42_z?S|k%*Gz@**O>)^xJ+a!nq_6_qB`=7FsZEk?qE}9(KFjGXAj%MeoUdBkS4CB+ z5pzZPxWRN>8Ug)5+2?*c7(oc)qgu zIge~*Xa8$*QLicmO|X@IUV&MRV_egMkG`-0R&w*yq|Sv<*6xI!Hs@L6Uryjx%EMs^ zDP%-Q!zn!t9OYP|Ytqs!tSXb^;6gaA?kADwzPkPeJhW|5O(hS8fa~pUlRwk5p``z~ zT+mzbZWFv()sSE4v9@-z+P8W09~P=n)f-)CK~S&K~uVYUe0{i`AXY*p69VuT#8|sJuChF zWjJ}>y@dyTg5Ze2)mbIbxK0D!AexAkw-~4;8R0NkT0B z8rf3vI8d%yd@8*a@bHJ8Q&x9muoyE{W!sbb!`~u!2=uTb$*u}t^IrOe6{nPugsL$U z=fUTLi5`en;)Ll6U8tMH%2Ifg!hw)23wV}uN^|^dkWp}M#75QpOIcy&M}H>6gVB$0 z2E5m}A7z*#aAQisCw0iAM;^(Dy{I&NZ1*J#5ebPZIi3gdo8p@!I_@=rdN7YN4h~B7c7Rv%n- zE8%L{(=8(2S|+6`%K8l?AbL+R)4+` zVmgZ5fow;Ox;5Mhz)Q2dA|%TA5aGv0;80Q6XtU zQ?8JueRRS|eY&pcRUzu`sG^pRuCsykc3r9J@FDN2LvlrQ-#+2rER%V^XU^ci3-P>R z@NqZ3c{*;}d%~)#t%T`ro&Ikw2ciePi zMwTQs_{z}j5P_lij}(V3S=D-*qE=fXtsfWYT(#s|h4PcWZ}|+cL=kcK4g8FM1e6CXfD7r1clKBr zO?XpoAeEvi>yCONtr{I8F*BMV+?MDAgrYz{p{E1-2&?{cRFUg7HonY0XDnvg*~9k! zBW{{kJlgWnAUW^n)}CL!n93>A(VpAB>T9>E8R=k?R|G-dKJ6)q+D0^_j6q-HpBi>Q zCN+zUwcg>W+9U1qL@tXRiC{B4Tzjt7q@nXMq z>oJVmiL6J2P(U!h&AdWJf3>#@Bl=Y@o@rQ2vM$d{swy=s4LZX6b903M_BQ+%hL+6; z|Aue9+^{PE*|6i=OQ^AcT9DQD@VC}7V)(I#g?p$SbU5)osJw17%KhDc{1C6_%YWvu zS-99dAUkSiU#Q>0lk7)W{4Wtx64(qppqsUYlYp3g{Pg8aZ&&v~p5gg01A- z30eSFXOH3PGmN}j2yw9CD#Z7oxG<1vTVs1uz*lEpc$J*X;*Gf78bAg>0Ne`2ExhOT zhk&q?wP)DvRSy`5D*m3?{g-bpko8i#CWY;Z8(wUsU8O$#9R6@o{`u77)T=AV@zuiL zzWb4s@!^T<=zvq$>23Zg+hsoA7WkuRj0gtL-Z%T6hgDGD0FB4-1--Dmz_m)_@$6Dp z^f*7~QOo5RWGV}q=WLA%dOp~&@5NCUrLuuMiIco-kD=Zx_TYj(gpjWlHf?OxwLfkr zo;AhE&oU1>ZR}(~Hv4_(B1i@G+#@DM7i!E#W83k5Gw9gE7`rC(rP=l7?OG=KAZcrl zK?eh<2!x^xuyB{97ap@XBjo{-%Ek+i^`~kLA{GA={NiGo3>0|# z;rF!`?(zrw9zD9q=9#L@Wvv7v{~Hgw(g`1#qWG6gVw&U21EoTJyzvLc!m*%7To>Yj zzW4(!`*5X^+A7lPg4nIEpI1IM)iR9AgQHJ=mf#K*H3P`C!7=%_QLXT&`0~2bK6jD- zI9LA##_f*$7LUqGX>sYAcUF12Va>rjnb*yB^2ulvOM{xq+T;I=j+aTjx+v^u1QYRU zDo|6~aM#lfB;xcIb$1!XXx6bZJLgK~2tFxXwwb2+bd%!Z3a2X=(X9$;hBO zfwO6u1MLOrm!;KL;amM#7c$(B&Ch2z3$vrY-xdW8?F29%Y>%*xqxdC8Qhn|2dv#s# z!=k3Oh=CFRvxR$*f8bu=8zby%>M)pMVBj(jgK4i|lfq>Cg#QEB51r(tJs&jRdS~ss z9L&hg0sEA2sjj`&m9|&o_e7K@T-zRhYH5n8nTkRd`2?m?TeZOcVo76gG|}5xUAqh> z_df=u@#>Bx$)F44OiKKiQS}I%!$AyzIJe&w&>*4AaWmzS;TE-vd~9gJSZAu_qB1U2 zHkFOWerkrJ(#wYHc9}HLP&jx}Nj@F$3fI^JtUv(kI23ICy_v;f!J(hn8C#JhG2E~_ zh{A7v%V|m$Y(cw$zdZ34P;pOI0rx1*?|>L`@u0D>P(z@)54HXGOo$>jaLUzK$;v=gHZR1e5xCN&ghb=_9Z)<|LYTsy*~DB?crUl;6e zk{2Ul%wIo&cySJAHQh3p%umw)G~MqEy51ad11YnDg8a`vKYhn*Unqd6gU=%fJNB?! z`l1OztI*kopi19sB15P)>Tf3g@TQG682qj33HtCEq#N$!aOn*{+d976{kHmE@~rLK zj{V|7UuGiU;6EzB+KeXV{OlUr^G+9x-Ob2iG{-0>0e>+h+kgtL}x)4ym zEQLS}J?1W$wA%)5>zC{>#`(zg)lUAi|Dsn9kD|Y#sA)&U_e1SQh#>to{^p* z`c_`Imv1jAwwp}?KM$5ie<(>eKal6Z7PDaIBe0U!&nB&ua21RE^YGitWALDvNpkI! zT=N8cAxn9nX&U{Z^^rpnF;r}07g;Pl~H{! zyz9|js8!Dh?Wd`r2E}A`Jz<7Nr%-j39^&?ZkX$^kfK8WHn|D*@r2v+`okP)v$qkH{_M0ceZ|53WT}=cXxElrZ`cG%se01}qSwi5ijRv68iLnU z=Wqj>XBj6o_QLVbe?;a}ue$(7-@QRI05>RYmKm3=s{+lh2Qb7hK0xo|u0`t7Z2OA8 za;zCVL{?^DuU-{!LX=SZ`e+R2uZHkCkX%W5Pq2-I#}vs{_r@~E6_dPDGVL6oN=X@t z_T+|aF~~#_3ZG&>9TqpdH~el`7ox&nqEN({f8iejvSFxg`Ws@M2MgYDXn`Ag!u* zgPgLnp0X;?Z&OL*JhTf2n|~TigtroagmK&+UC}%b1454`d@wd|; zP%_*+6X1w^lm`m`1cMMRcMF#;-r)NcW~}}^dIrjrA$iz>pu`Y-`ZhdnQ?A$t?xGw{Mj}32N_fg|cw3U%V~mqEl00|_+v64|ZQsrnqVKD}d6q(go|EA1qxf8)PJ(Ef|X5ZEWz^MyZi+8DOldpODJ<&M_%SmsJc&CIjZ zN@<7E*=W?GiBf<(#1U~+t*c(AOP|VGnmUs5iVbgZ-bmIPwa?6ITcFLS`zuG^ESTFZ zyu0vpN8wzy&#e`G*23<3O=ykzhX3kM5yC=Co$wys^xJkJK}w1*a}aTM{3IYrl5 zCXR$;qRt|TK#nR+V|yCJk5&$3J(saZs-<+ z?z>ka#I~Ldlc`gU`6r1vuAEe<%tpJ9;7I?;VjBaz--DE%j#JG2-b`r3JZwN65-McB zFzb!3WBQ%cg2eT*6Kj{Q+o}b#K$lT|YI*h4MHhEe^dwVWMXh*dAxbqY{ z5lZF5u*`N}5U}xfA^my{jJ#h$%QzR;Sk<&~N#!R1+&j-Q5Mqa(2c>7gdqtam5vVNM zfRy=kTLU?&%*3A6_iL>>ZF`{Pt?mBq8u*%D6=>J=sN60=kBxzUV|xpPHbchasDd-7 zWKrA(HL~tU&Mk~I9(*8$yBQ$ZLpSMcW*p`5JBF4$GQt8bq)Na>?yg(*g|H9zrL8!T zLqPgG2jw-_$z~SPty~jl{pS63;aO6e9rB#MU%Bm3S3#Mw{L>e%izm{M@sw#*Mtgk> z!N(9LmqiugmkIOkZj1Yc!K~w4!Ztj-RAGMMFG5><`#JNlNA!M9&9puLAPvi?V?5Nt z_4S1z7>3g~AT70=xB$&>Cuo;d`{*7!p*cJG9@L}LX;P5|2IBlu;r^9HA~NpmlC5%G zWaD$m^uI+hZqjjii`5@uosUufA8`p3^2Kw+y}Y_e^x1 zDXMAnTIfiK8p!gDgg?)`%O7Xlrn|Ywy0Id2YBo}5efAuVhAFkHbfQw4dAh7B+G&cp z4QBEL=WLxZ{G}|dkPJ3CeY39q|4bb)kN&Gz1Hc*Gh!{^DXIa-A(cC!S;xOubR7sm% zlT~IU3Z@^njaM=rb+~RxK9KT5v-P!+STOMv(~AtNJQ7k z!}T#XhzU~Z46mD!%zXD9Vbc}#og${mG{Ba_o242tMo8bRLkZJXnxn zPOmvCulHUyq&9}Yr4$eX!@YJ5!0dO#wYqv}$EY(E>ML z8v!X*_cFKBh~0+|JHtYkgIXgsidtW1yy+?hldK=cwe{q&OxB}DR!KirG@+(;iq*=&yRa=DPQx z7?uh&CIMlimGjbQ4qe}tCQYTcMQY^(oyMQ47uyb0D^Z9YU#ZPqFl?ss4fyz+2{lzt znGAGgJ9-?m&jn7kUFCc0Bce@nhp#6xXvXpx=()*R^GP0}f*mT>Cye6tBFCAf8+M^0 zI!_z-@4UjI9^zeQZ|PFRcEmXmZV!Syoh%j(N?X``R>eN0aMG~HF^hR^YDg88B*&2g zLo>MB=u+<2Mksz!HZ;%r=FKV{78h2=dt-#l5`|N|2qo(-vJj2@-I-G zTWX~~&vDjSE=LkS?Lmudk6Hi=f`1a}%eH5m?X6+P_E}c2OLh6u?`_(I&%9U-`syg9 zVbz|EReM~e4m3WGPeJWF(>Kw2OR!GB}nMnxEOk(h2}p4 zPnSusd-6fEdoBJOBy?Koh_D^%80;%*n|vOg-j}}=a`&V~YRppEV>no#?KgGWf&8v( zvK&g~r1naGB&jmW3MohRtC(zMVwg>o6MR3v$E`>m5AEs6qim|AJ%7PUG?R=e_N**gs)KRNRAYl=xO28f2(m6QHLf3h8p%Y30hKqPiC@ZT%AK zwIx$yA74`^?&%_kqZo$uRKDCX%==A!@%$YD)wvs&<0O)ZnPnt}mue^WVF?K;@2NtZ16>!8f*c1a+9yZ#0id!M(kJ*NDfhFxprX%Xj$S+k52`bj zc@vxERLyc>$nSA+FTyWrme$DPC3Rj(aZq;hLnP@_d!Dp*v98OX4qpGKBJ)99+lw4M zTGYp${5KMEnnPdj1Ye8U%9?KVyAG4_%n99nr^^$WFt^YHlO9a4cbQc$Bv=*QYA*he zT%je|!s0eXc5f1Jki48+)Qr|pAaI_wqSZ;&#Zt5>s1X?4>ks^kLLmD0h9?!QQOre! z@S*&d0@iO&QD{ap+(w^$lcR_Zi$Qx{>}0^EhIO+k-g&DX~=t@e6)un z^0zeXiKxO(=3~P0jFh%b_xX^;Km_5kD}zF*?nm;1@irQGx>q1|x_(RD!peHHpoGZ- z2E=!&ZxLIrJ5sO5CabFs2NI`t1&~UfT}!FJ+4c z^03!%mA$56vUp3*fE7J6!{>e>5hchI^=co>bt+U#$KZ$BW(Y71B*~kyln!U|4Jn zX@cS)UR5?4WzN8?!y%KhoZzVFt69EO$rnYPl9$Uwxg3{~oQu@f&HDw0ZPxPu5&~nO zvRgA>1dYThA_V zD-tM1$hW9;Cgn>ze0jY@4ocR>t`F zyoP&4Zy9DT+s>}8yr;KZ?^~Bm8Grd>`2C93t03X`&epM0tu7WsS2#_*$UlLk5$!~G z`ol8$$yE(389M&tIPw*xad1r5C<|~Cg;UHWU6I_WdZ@WLn(}*C)UTY8H;|YH>MMDz zOZY~{V)vXN3JP*Nc(yjl+!rf4EP`oiwj7gx5>XuBJ?+O5nUuaUgp-4aX3ufPtF(_#-H}^^ zwxcFD(??-%a(h00w)j-8X&jYe>NNb$nT=&Rm`h*0;(EpyB`S=%;9*58j4&8hv zz(G*kicQ5>SM@QRX_uF)i4dM`>_|k^sNe>5*ACPaZJN;8E^3MIv@{koD%mmj18R#Zl+m~6WK>Qs2z39oQd;e1R(yHrMu7{(_pf%XqX}o?aQ#u#U z;F2isfn=W|p62)@-Pd5cayF^yZ{$nGNqN)-;*z@g%Y?`(OVT`tiul+CWt39HSXG7< z`Pqjrlomkvt%@C@)e7U26$CD`N%;tYbIWkBxG~G}xT~V@09pCR$=xJJT(5h^+aIi( zrPn~AF@M@bi%Y19r)qMxixkmEO8`Y0-iy*pYs<3X@^b+|HFV6XILf(>4uQP?=bh+% z$2GSadlhivvK5h|eLY2jTS5$aX#JEQDXQu%Hn8+ z2)+&}riK&EwR>jx?3lR(p$MncBR`aE%7vDSFHJCY-!UdM(@5*=eL4T-cbLEtH&0Dt z-TVWQc!f(u+yOgb>_f);8P9#J-`n@fX_?8r9w}luB&Mm^HsA$Q3k@>C!}2+jSxxi2 z-pob%4<$0+JjcdgSxu*yBcbBbq0ySK0{!j6T~&tNS0KNLasi83k;DsCx&&{fwk82F z+Y|gM)uCkONg^igA+U+~rn}$*CBM6%tQp9XjL~|WzA@I*g@%Qa%Wk!W$#R;S{r6u@ zC*Vj$BrHP)jRlL7_=@;I;&~J4>*sZxI5Vo#dLHKiMC|J)7N=YaLVA(O6Ju91WRY)>3qZAigOg{;2YYhpk7pE=yNNh_)`!+8>a3=it46oJ=t+(GL zb_-}|f6DNDej{*~T?JfN!9a>k9m`s931QD2H+Ljv;R65twDKb0-597-l@yq08yMyr zP7aB5<(FvdWK$Z9^gL4ALTcbYROOi-o;2#oR$Eh91d!+&%v_&1TYjhQ-N4A?%)_o> zGxgj&ilySxkBq2tRj6D&vv98Uaptr1)#)VHtCFZ+^k^SrGZC5U=?@kJW)fLOWl^ zZZh!a4|AiPKHakv#hwT6KX#^$1IqWP5}Qy}9B`0IQe+=b1%vL2V&ijN+BfS(aPdzn z5glC}4d)1s(#ZA~y=&ipg|xrx^_>9wPBhFHrQE#@ZNi(;l60=B#w$ZiRJTGT_+0GN zb2Bf4GwHnpTzgHFM9%9kn-zf$3=g+PphvAc-m8!e5VRP&@z6@Jhi@_+eCgXz#}j#> zDaH6C$P-3}pgltiYr@kvMXtg(%JG~Kl&Mvr7|Bz&v)^WSp${~+g+#St*Z z+RoxQ)e<;loHED0Gf?K|$*mGGq9bBvS6i0!ibVc2_=8_|$1_q*&upM|y@7Fk3EQ^$ zo-y!Vi6p9xt1|ls&2WJuSd*QoUMNvM0PGbAwIrRI(Az=w`F-3V4x<0-I=egI-W_o9 z@O73;$E2t3Ay4nS#kNvSJjj`T*D(!dq0?z(iXh@vs{4y#sp~l8>u57HzkN+_6h%TV zo=jXq;-SLT>$#VYbvT#+{tD-JH;6z$C+rRj1a%>_-vvJEP%jRhjk&cbb68~*5e`>r z?u3x9g4!H!7AB1{t@5{$v#bsZgs21;73E{!QjSG5hMKTHDB1~iN@MuV!}06 zDFmZRQ#p~f>q&YUXwu2r8UTb#|Gl_et+eOXRCfQPW)_oL(^VdJm^856&r1iQz0FFeNr^7fxDycB>5xg(=;?pL)X6QGpsE?rxT|!(Ztrq~WE%FIYf}u^M?NL!u%c z8u*|nt3dG4{wHmOt?om46Bw564m|$LnWSh2`I2E+SB)g^0qjm zJ`f9BrfkB=p?vXOgU&unpuhSoPwVRW+ES6x1y`d!$HKY*-?Lv&Q%e7dQR=SC?^CWm zzpO~NydQV9cv>-d$ga2u z-Ni}Vn?SDbr^mxiMAIo1^^ScR@u7lP&ZAo8y`v+vG~0Sj02|ierniVlk6>?H*AWl% z9LY`dJ|BKsxm_kC@j9yhHU+v_F+T-34)MT-Hq+;`KK?bln`Nilv!J6<{o%ok*&a6R)vhhA>MDrvo-?N-!K-Rt{ z3z8?D2HvHC(={26XW2rKLw!N2mcy#_VuQ_m#x=e# zj=!oDgF^&*f-`|Cudxg0L^Mg-!KiFK?{#>g1m|U-`7~O(1a4X!oL*Jirv(PA%sW=s zBT9&1G&kkrowy)Unwx8%=crP}QWsF}_}hL?*DZe)NcWraJj^-{<8ho$gh_0rLCM#P zO7m95L#;8HP?p6sXEgO`%dL(oaS@VI!kcU>a?SG+Oh=Y7GbXhr1_Q6_csxFQdX(3t zxZVNmY=ZC>%~H}Rm6lW57HqXik^cU9^RyqY1*Ae%pAT!|@&0gLGwvw`pGBCHQaIL4 z$41c5BL0Jp1mr4YgxA$?*TVl_H>au{B>TX#pPj;!LG;$Mo`yRkOm-*BRU#ZVfIyAi z&ClE9pVP+l>W;3<97`bW3_o!E6Ky>~ebshvOzU^#c)7){1>AE9Vw9D+;JV%$R7^kg zFmT?6H*yUfw3v&!m@5gMfm*e5RH6N%i(G>m6-Jsg${Odo+H39fZLd6kFA4U1`+E&_ zErC=l<*`526pRmiQQyYFj1;+wjT=^OLzqq1wo8){zlhl-d=c6(3qtqT`j&60^7ks( z$(_#jJy#RcR;8rc`cjO3ALtvm)qy8jDXFU=DXE1yxoa+BvFStlbD9HS_3 zzNHLd~AQIpwq`YSAR{RQ7&ZLiOmqAA7XShaYJ`$X~7EGQpCdTY3K) zOWT7qFT<=@pG7D=1l?9G2my76Dh|-Kvo8b5(puv;w3W>~>GoacU?E!tJOOX_#=9g? z;9rBf;XR7RdjF%hEQj@RJy0zr>vc?#mLPz2<8`TBi(i<#;yfj5c-nfaw)Awf#OV!* zSMFkDXkp@m-C-MUMsm)|dIS^S$k~iD;^s#B2RKzLvg*sdu=n!axilOJGM;t^FmyB^ z15P*eu=(mD8~ISnb>-FPiK6mEm?y>?fi;_9PQce6Zp39LcpuhfW z_uoVZ`*oq<5?4e>X^%~WAWj+ z2rRJXU^URJsd7ES>t!IHAY1a5HFbz8DJE{lxa_JaUkA0hHh%H&O0^?;Ikt9-#eDR8 z!cUp`gOV1{a&b2aQB+eEU10C3GDBLwUF-E7noadT%>{I$|J$wouLtIzD_REuRn?ca zY3q&-e=EK>82?5>y60oBOQmP)PYastF(H6Iw;g#;{0gje=E`jU=VX@wVwf_GinNC2 zM3+Dax%g1(bfcEqY{zjj6fAT1XN>{_HkS-)eG&mMsHyDWDaKWW2L#yHnd z%u$B>)+#<(+FW2KwVU(vhP}BQ*wehK++>Fj!5POzHd$z&?%AOmhLtmlfuRW-Ykk$J z2}eb!4VPRYGG6TGc6wlaXmt19>$il34in8hJJQ_zE1wPY==Gw6C7< z&|2Hi9y6tSI6zQ^G`kQI(BSumS7!CYWBc>1X1P_e0M_seZf?tm;|A0vy9Ql6PTQ#} zd&q|Uv*0O)-}6KK*-?#hzP@%N^q}-_HXmjbtV0pJuoL;RP^fyn=a;%olc>9b+*9iL zGTM*Xp!bC zN}b@H-0+?v1xt`n0~~2{X6j9}*Yn$107$DEX5byxSyY=>Y0NRtv4mdjelgz_Img_( zs;Ueme7>Suxx3x2Ot(o}Mya>VGhXUxJOyY>4BxYE`=e^oiGqf~V!in)*QN3X$u$JS zIbB!ew1F0*&SmK0T)S;IIa*^e?yT`L+w+jnd#_RpRQ-p=xh{k*LWJ9G40U}RnCD?R z1Soh$2lfH+dE4JM-3kjuA>VI-`qVHJ(()(6V_+J5|3uC^38)kI^TWc;M zVCxmJsQzGJy$U{GBgSjGn);@!R5Sgp6w% zHPlZ1jL*uiq!a1tla>JC#N;KHDR*c`~|wUPwsx}Kj+(E6my-@c%=~s6vmJQ zXVTK*i2P1&ku0DwH95Rqy5#9gfay$gI&+0ZMAyLuizyEq{*y+{-CKS}oM_*CxzS%` zJRKKK8VZ)bUH@2?!B=v9&c$IbWn;zglr1fp;+h2c#2WVciw(aWQDaZ-{RG|JIN^)J z|09SSw&XtH&qLcHQHMLEq-^ToyA8v6DsU({3GzjC7mq&P<+@R)Tt;UJ8mAVxhRU`sqdOOs|qSJ!h$0BSQDe#3A{ ze6|$%uPp#6if75(!?MuO#@5;p$jgKg(KOiBG9TTJ|?X5?ghEuYDGv+R7w5X$4+if7I^tNr6 zzgV|<2Dg-I9L#sSoCTj=z-~Ry6nXuvp^bgLP$Sb1=CNX(c!*atJ+ST8cA0TDY6pwv z=*HmmU-9ifj$KM<(rylWVn4*RUz{~dvq_bk(h_%7Yu~1Spt91F$r9lAKKs$Xmpo8> z;#y4KT`B?f7x8<{<~!?X@3LuFA#q(%m1Bti9@oDLyJ^^WIY$`(cIxx|U>MUv^(So{ zqD4~=)lruAYTw>XS1Z{4beN(53{@Bx#TZ(ugc>XI0lh@B0UkY>Dk$)pBIBAu(}RST z{-MX}k*LUn6m+-$km_k@;5ej2aPH@vlzABgI>AFZq$h0A;=lf=S>F1GS?@|!?MWfJ z;w?w`Xax(Sqm?8Iqpv|Rzl+L}bFJ%E>{+(mc{fznioiV@NcWWv&%!l^Q102vf9VZounnGuwS_*W}|@) z8_7z-&z=aRMUupu$rD)wg$^iY8~VQ~EPQi0uZ!mpo{9QRgufk(_tgxS_z_BZao!;U zwlw3YnEhrdojmW@x^jRPuyf;^K@RQvrUlEytqdVKHYC^J^Dl#ZEQl ziDW!u#e)!BkXWa^A{mlS?zALbfPSrgPWqcGcR;uG%;nXp^DaKRp$zBPwhVN{c-8(phVWx`^XsyNgkXdm{0BdGZ#HHPtgw1W6_~YXEFUAm#+gIvwEZ%>pAy(PHG(c5 z0lBrautA93{6Uc1bDI57;(tGDt?*SeNcp+B#@BDIP%h*WO_s8zK|`si|K7)>L5PGF zAE(K?!4ryb2`WSX;DPq95%iRO?-MlmYr<6e((^)(_u>s;kF&w1v^Cu2-;;a?{;pw) z1H2sj;`1nAzJaOW@w&z_ZLfNDlU6<(C-b zP!2v7Kr1(=Rh3;RC^3QE%60&}NVI=l461O}(+@)n`ZmlLU%H%W9e+N409IEwbRa+k z0z{0*a-E`G?v66@&st*BwY>aEE;rhRY=a?ir!Zv~OpB)NnN>GP%F(dons#=e-mb+N z$Om}dA$losmw}*Q3rfkMMebKt#kX{T-b@9Mpc8gcbEljD!7xbAcl|!G;^z`_`2N@h z=5DPU{a+tw@o}HnrZm^6J(O^}3o|LSs}}m(HuD!U4Eb|4AMTka+lC(RMWj*)J+9SQ zaE}`j#|8TqwFk%7sIt7l4Z15ZoX^?9Z4Snb={tL-*O(n*PY9@>a+2MXnSZw#{p-{7 zAMPEjm)1-Kysl*jmpfw?(9`1LANtPH2HzeZE(Tm?Rnsh{3fR5REgCY?*fzp#f`_$U zFqXgF+r!HXVl|hsEB~R*{lCsBS>!yYdK2b3AWnEIuiOw!>7bZQrO$TyFB?IJbV3L4 zKPRT@cSchP^^*Ay^HYQRSL9zE?^Q|G1H`-)2N|EaAD+jXue87Tw9ky zk=W2(K$lO+%L1YuhFK4C_6h69Z122A+*#8J^|%;!SR^3skO|`!W9?^Nz|2nRpF5h< zVY{^>K6q3IRhOEsRE5y@*|A~L{-S$VqF53Cq7*if*PzVsKAgcm3`y!pk9?uigpk-l zOo36-p=ig^El)2v#CAGjv~H4RS5`;YWmcIoz&L!bg!I*x6v-s*=AOXj*w^HbkR5Y+r)q6RM5dC|cLtFU{N@ zJLWyYu}#50TBf*&S1qtjC_ej=+1-j~EqX%BD9XR!q#$Xn5RZ3`@u%HF^J$x3k5Imz zk<@V@ArBx=T!80H2rZdrqMuOW_h{W+IYkDte$6|O6+^_}RU!Ir&FZii zTuS)Lh5XYRb2MOv#p}Quy#~Z7^tnCRWeP6+Pq?(S}ly9IX%?%KF}aCi66 zxI1~BbIv{YyY;{O{(H}<+SS$6Zn`Me+H=h@=9pvZwD!wdj?)45|8aAxPy`~!Brp^S znJDmO?lNT|ORHfTR7Cge5*nGBUqQRV&PHE|gK=!sv*dE3rrAMvT4<@Dj3e;L=E%ta z+1-}@@sLX06$LI)v-*uw)(OsXp*;x== zt1-;X_1agrO+ay^4-{jCxv$f1)}m(Atfm_49ekF7u%0#aL5f2 zQNBfNG6&0Wd>QCEP?RWfd+ZI}7b=C60=KXGNL;;HByN4|No@;&fnyTC9luep9;`{h zEr_^pDJ^Kjrda=dQY?VHYJJTe{qlkcAdca?Gb&7Ixv()P_63iZYmtiHGr8IuJ|Q+a z5Z3L8-z$W!@C0BN_)X7HDdZD`Pw8%nIW@Y0DPDlJLad_CaO67Rw!h3gjxq$am*Q1p z7L5sbTARzBktJ#&Z;}T&mrweO@og+C%XOqB+G;+1oGwH+T_~)as{$J+XLSSS>WvXO zUgfKk_9)(fS*=K40gu<;q=Cc?=60XhTGy%uL3$@reN7nBW@{kphNfdsC^Tjr=VFm>EQtj+x6r06cA=$@>L>ESHJBXRcVI4L65T+_&udiO^#WE`pdAv$}h1Fasipw0jx0xP8|*+B2B$Bh%l5H z&KbcW86qy?&kYhCEG=Wxm5XfMb(oUri64%Si|K8F46u?a1xXUG)%)Y0uL< zC)g@@E#L(t!>2EAMlSfoh|>mIHDkl~CpuG$g|Mw8&Qwk8K3&E_Q79O%ib|I@uVHJxC0NcDKKhk zv|0>I!v*E>$6pR6! zJU{HC6$pBjk;{or<#KGN{8$7z5;nIB!RKIQ&7u25!?0&j|DH<|JU|89+_5}*&(PwC3({b}5<)t9 zWKdICHyj3I)b{j?-F8dL;n-7fKl|Kp>0(`PY>wXEtk-Z_F&b!)GjbTzwyVBh)_Nfn zwxD$;G&kM`-m9WeFIk1P16KbL8vna}+6~`+^B$7}78#FQ8sj2btD`M;sYb+gNq+!V zzvFsl%@b@+Zm`wuZ_shOU}d{U_m_~ZE(24;YVmay;L@I>9=sT1e(5(O|-~#LG@HjTB)VJ1hO}mF_-!ATXqBCPcIMGMt0cTlwUnj6Q$axf*8*RjMdZgPd zfU#6zow6LCJWyd?!W1n5F*@i2^hQO5xD?!nk~>Wmf>pFrT=?8|(rlmWQ?{0n>% z?Kl=40fpty;A^I%8FkC*c@uUCsAi=^?rKZtg%o2%uqB~NcxprcstBJ{o8_E_UhW|X}1oehZqI^zdT{m2!Rq@SNl?kwbHJEvt;v&~Dtl-&oV6T;=`f<90 zfln-RtCXwBeXzspf5fx@t99x>lU4=+r~w(lCGQ~QZ;|_miY?!d_ERp)hTk6(halm_ z%PysZwTcj<^9uH!i;i6I<8o`7M9%BQ|E%Q6Q*23@l?iLR{nMRQR~BX^E~-*t@JnJ{ zRQl4^;-`A$VUbyjZKh;dqgvO*Vbn~?A7rz_Y`zlMuMVl-hW47oeq(hJetudE-rFHT z9H^WdZA~y3>+Jmj_gfVDNNuq6!h-XW=4t=iW4vZq4uHUTpsO-h3<(=dE#}8cl$vN3 zpg*hSRhcSG9d#RXYe=<3rf8=1N@N5%yQd!>SUxd%8XKjphS1%_pbb6b08A~L!E&Fz zpv&Dp@Wd75z?Fb52*6G45IM@D>ARy*kCt{Tk5nEz-G}?G;?QW0jgm$N_U3JdZ(Y~x zzmdT`GV2_m*k2mBVzIbT2shzMNqdVsFyBZ%vNker5Gsn%i6??^_ED`T0s zYd?4;JDLF;Ln#CK6v@gVL`g*MQ{}6|P?+HaG}d1-57Rc~@$h9n5i<0i?r(8MEW?Ln zI*OrMSH}sMp$iP_cndeOj-3{MJ8_=Qt2ABlI#FK_h4;+r-!qX}VkW3$-Aasjf58G( zREaz8GtLnhN9CSf!!TjxJYz?82wCrbco)s>Vews2u47>Jo9*}kiGVLSAjY?U>VL~A zz#rQKnDlZ-Ru6z5hd zXB4XFBqzC^=Xk1gm=eCoxvoDJqRC@7anjzJSw6Nb=d2S%pS<28cQ75(SDXD*78ez? zQBsXWCRT+p7`saAY}@I9%VG+o?Gb}%(a#6_P&)O3)eA(~o>zEWI#w+*YD|Iq+{aZI z;KTd5W*=LN3S+QZ@rhm&sLqZiGmosrl9Pj#>_)d+F&239Ommp9Nm?jw4EA~I+-60o z&EF7fI++0eDk`h*WQgxfov$$v>gx@TR9_F=3u6V})sSrd{qn>k_>?NrbgmZ93?A^> zF!xNg$P5@OOEXTkwkxXdRJih(bfdVXU5*z(<(#$JlZql~xm7usWKkRedtRv3b<2T; zHSG?BHD=3;d#y)9f5+YgU+f(J+lBtis&|h@La>uP7UeFSAAvg)pxE2NZQd2PvgO_A z_ZHwmXpS?BTZ|<}^0*%fhTCD5r8#~w{pVr&NZ&kUiRvXZG?7NA_h#}sBfd4AokBLhkBli zY-(Aq`G+FM9<`ps-fRzWSqk~PMU^d1l6|*&r7#sQT$kw*cxtWw6D~NchIS3feY(B)Avy*`JFYww3AEnpWoDq`zi( z$>ydUG~_d@;#DT9sTAv+lV2M%fP50A)z@#wirEb)MTe&>$@7gdZdIs{+H@Vs8x_y< zz2hF4K&lk=d3?8>Qg?f8(Vmwc!{Ji_+M|zgTIKPq=5l;ejw3Ig4e(`8@4VA4$(j!0 z$;Sh77GJvaHtH||O9bPSdYi!c%=V`L{Gb1K4=>maP7kV+y5w!caC%8mW3tBm68$lL zHkjebwDPH>ec>;BOL;8Bg0U>PhZ0U53+ySPVHMIVz-8!bd3tUoiLaEtHc^j=W`#rF|^`SOT{-E5EI6MHR zh&6BT>S2#O@MjfpT9-MA_ftkBV3kwWzu?`n)b9ZW(3$VNj*6M}IE7dkx)V%cDbN(U z3QsH8HJ`X}0xmM_I`;b8;q?{$Bck+UoLyG0&%pPZ1;wfDm3CuzqZim;@dJ|-6-y=a z6#Pmj(<C$45)WBue(=P&9*yN|P5%-uOCg_JiwPub(m{ zJ=ks~K1@b3&~|>`d93atLP|zjS4J@uNbAUV8;@D2y6EX~FQLCe?DB5p&@NDSh%P2~ z62e};)*tWdCb>@>*rbXHM)DsWnHo3Bj*9L%#=$>{g#X88^G~6G%p?rPDA@D;DxWTN1HBo5nWZ`jotp%;pv|Cp_`P!rtZvl%Ma2K->A*@j)>;7 z>|`3>=p9MB^wkaP0+PQgl9d&B9sxSv8KevI<&r6SS8i(INV9pmRdMZ)f{9pFY{CJP zb48m!F5EkeOxeG3f9VZ{Uz+^he~8zM!FWCX=IG!TyrT-DV1HWTL@GY%YA+*xLy}8A zSZwbWGs!IZgrr@S7*o>&WjC^9XrLNm_Hv_@1j6K-ZXJ#LC|g6x$%jvhC5un ztu?u9K!5pru---rLzCVf913B{c^2eV_h3;~p`);2Xy#0zg5g-JcLVovWhP{%WbMJK0Rn}MjP8U75ry&fcwe6;}Llel`s+%0#OyNm zkJo*oKRwr-Na|^!1y4kD_>>>8#&#jvFK^@5mSX?rCAe4zro!f0$x+)#E5ThUn$#~J zK6OA94}MZSM*P#oh#k=NmjvLy$w2;cF#TtGJcSCysbjUreOv}-z0m6^yIC@in!E8g z0{MdZv)^P`(wCG_tS`x-?2lvSDbZR>?G0z1`MrLS(6@7yDO^x;c5LWij|_EzOet-d zF_Be@B&jwTP=xW(&o@e=(01)*?UXX6(%O)g6I8^GdD;;|j4J&|icO8=l}Mr^@s8T+ zD78zwjpk%cqLSZ+$lCe_?X6|p;%`Re_Wr#NCv_hhOvXeuhS{HnzBv#uaQ_}t+rJSFRe|e%pd`WZ@T!dtF7kJQ+9m@?j zZa^yRQ^1kvP^;Stt@@5Q+szhn1kwN=#9!B_A~5*amcd=B&y3UMlqY7|fp-k@%*R1o z5#?LMc(!qs>%1zB`Y!SL-SY?LKa+z58vx6!aq^|1R z${%Q0bC6BY7m160c&eczJR{6SUCPmjnW<0lxF|^)IJw_8+=iwA6V}oW7 zjrX0n=EXkjEq>gVlEgfM`eANCX;hE+7h>uE5!3#Ox&Gs5eG-NEZ0*pes>8GSz9!-ww22(YkR=S z3m^2B5arM((8sv^;bVXl#d8wPO*G^uBg~PKbf?nE-8s6e#i~0+yv`oqP6JcBKI}n@ z8##>A?@vQ31!8U$><#H5zuKz_JJD-oaUEtV6FY0Qvi0Jj+V)MESn@m)aX%j836K?L zkL|$19;cBUi`XU10^cFy(W35RZ7(0qDkwz=yI9ZRbACi3VpiVkPBqKNyDpc^CRZ67 z5;e%?6F(UGh0v<3@$>cjpD_T8o9EcK?n21rdx|p@?V0X$8#L9Td>f1#=MiJqh45nA zDy`+no=8$rb5)GmD%FSUZ7{NNuJY{lqI_-VeZxBiG*3Hy-~-J95NY_uK~-&Yg(||nuWPs#q-+URzhH> zP2dy;)U~fNp?ZR`kY(vru!+>Y)l*~GN0!Pzj=YsiJtu7L<$f@i*(tPlPJBw=gRLF* zRri|^r^SoZTl~=n%hUg}UahUJGZ?s62Uf~TMV?sgFnBSNl;r!yl)I=4SJ|NJCfF~ZoFwZ!-))FN_NS-FSJH|qs|&7VzlNbi>- z+2r5I;7+x!<74Jz;Dz&TZz(-o5~^j594ZM@zeg!>bPP~U@=(fuKbdd_joTdTEwA(F z7)?Qb3ZvpQwFFb^5%Czw^mB;J>uKK%gZs;`DcUf+AishM9Tc(WM6ub(%nw!F(~{+c zY*wemuloZpsRcaNVS+vyVie6a*`9*TKU9q^dJ`XOy>`&;;BJd%@{E>{P3Am%f@{<5?Ke#v z%_f=4M*W?x*J%Ub(0fxYc9OrrgAx+`U)UU>R@*!HE0) zxuX2uk}Kj;s23`9Qf@d7R;;Qh@zB+o{9U+v7pIH{+|8|@{nkkgJzD8<8qw6rD-ok@ zqFc^wNTsUzbn$*k+-@6Txx}mvM7m7zt4?s)V(AHi0({L~8xiFyVq=N;uAm$VDxp_k zYL%pkHV=jqgtryou-ES|vqD7eb`NdX^0+23lAfUK#;8^{{P6P1NDj6nE7Y#+_gF)4W|be4*8Z0C#G0tHz*^zPz{$qwx?QFpB8+OiRaO(bG}M z<69;Fn>iZl)mD6>F96H#0GfUl6vxZM*XLT9gNWJ|RD9voB@W%ls@ax(gIhbjL1WwA zFam$q9Ps%?-z;lu(RVc7Y7ubk7^=Dp+m>V+_m^=ypZ^J^uC>YMoy z213;@y{Bikp8CU+gprorlvBsRlL;|(q>MQpa)Yr#=pJO)-t5X=IVERaN0M$O{0gEq zUa4$}zb){jTCeSv8JOdi-*NPUT$Cl@-rrE3b7j{=@K}AkWF#P4K)5J`4>HCIf3PsOe zwi~u*p7CVN>SbrhzbW#anfdUO*y}?<<14m-y)wtQxEpILD>!FGH8#@HM15?(;-3O6 z?&^P_CxYdu5$4#Fh)(ag`?_P&oOn(oixGsqDw)P2;#?;M3HGOs)bjb2#hxBSeNdv0 zeKobTj_;@mPN5s{$$JY#Ra;103ug|)Lwkv5aStS{4jhBV6r3tw%16WH&lFztapudL z6N;4BSLPRg7ent_Dw4ULh3Z(?&xk+e@b!7(oz}=SNXqrU>f6PFmcsiS%bxV@azN&E zy;iJW9?ZuZDs6Wgo3wm~P}fA~59SgkE4h9(NKjeZ?Wg@?b^nKZlnA*gAwV8(QVk5J){^TzKb!<(BunzeR8|Ap6iiCY&0_(?e zl>8E85uSQ%tPf3%UhrAFp;(xVAu>PNjtLR@USBPnXiTIBdFNsDixUO&l&AFb!xAJ6 zkMBo7bzhdz;BMeYS9H*>(LIWJcJXdN7Qgd$^HbS^3+tK*?UmS?zw707GA|m=wV&g% zCC$5o=R%O$VQtatc*Zp8KfD0`*GI`me-*SpqZDn{ zz;2v+^X@30{(ctuQ$szi)|uK!K55lIhEOv!CUkT9yR`N%VJi zTmHpM9NEmYv7ix&2#mTWZPjh1by(O4gJY{lkry=wgk`W%P8mGGNevgz6{p46A-3{; zhnqJ2yDFzc_rzW=3S!rYlhbo&_A za;hrqL~~iG;dB%Ey=FSQZCbaD0Ma5=KHPu-K{X=aqP<&np4v&L!=_&O)j*8hLwnLm zKc7Bd1Ge^R&p7;t&Xri+k7lwW)fBU-rS~j(;+O^oW|at*?qI3YWI^S9-T}-i7Vm{e z5ML?2bgTjq^@m_V1$8?suL0DYp$+6a>s#yVd&N{PpQW-1_+XjU3$18FL!Tc%P3x4T ztLR1%w0b97D@)QyQqLgqrR{3VfckP}I6-xJl8JQrQ!L6hJx-jZJH~)~njCKGuQ}FK z?xxRTW2oEp?>;Z3d-)*Q*a><)Cg%Cn1~3dJwX_fD8qbQt=f`Qb*+W9iwxN~NZSFyAYtit=h{0j@8grVMK>qg)_MC5H@wSU7I@V6kM zj|TbDxYcAD$M7tk`?*Gzz&pAw`}Tcw7S%`yX5)!widdUmlenfHqafid^Hkoa3Ic8^ z0#u&9kL{&gUi?pnBQar{Ct->MlP+R;Mm#<4X9~UvC41PslHQZ6^$Wjj4?Vc~pP&L4 z50eJ#+|nE~o9OKqp&j5>2JW%0`2%CXL)tY=uoF!b2FM1VX|ppX4^jGD*Cu~)5brd| z4=jfCpt>S`p`=mf)5TUpEgz6lMVj`~xosp6zH1^ca@Ll|CDiz*fR zoyQ?$nCcDD=dZyzPRJWIh0`m14lK#b$eWo)nA{4uoI4(POBgTRHdTh6*OM*CkN&IL z1NUU#dM7rGu*5Dh3el%tv9F<r3s?X^ z&-|7+;SzKb|HUlf%K760irnSZ-QYWhJtVIK8_31dL%Rr)X1e(p5->lp#YERY#U6`$tx|ExD-?c?LcInzqdW<%ff5V#Fl4kAlbH6Q4lke9P;t-e}Ec zu_9M9{z60j5IT&ukT2xK_?7Ra?QWcia3Y6}0R(}~Ke$C>!*q4b^MQsgk6|mHZg90g zH(|@kxcFLnOL()qwG)M6?}04Syrsl2W*JNY2T>7xntDf#5@iMl^wHQV4{Yo!h0|s( zY(n3lc&w>F$2P#GGA1@s{j0RKGV}(0vc}KWyQjlJ9gI=Vn!n{0y5MMCIM_oZzK1g+ zu2w2RnF8YYRt&zm#5f{(Bu&;|YnT#zP8)mamZCJb{xXKYtxF9dO@%NFn-?ITdJ#xh zmV(Q!6-PPPhk{iL?cDwWxDsWE2`hk!HK~xkH%2z2V*mY>deL5=ei+XbrGVghxQQ)GE@ZhrV{AZ#k)`$QCg6*3{ zQaGyz&kod`WdkCdlk}@nQz}XG_zdXU>aC_B8U7?q>cT$@t9=TUAief6Shf_7^*Z{_ zx{Y9x{43PIbG1Q$gTJl@4jt+O<8dVSwAoC0U9OHQzEuW2X9#-{ee{AYQjlamp_JPd zUVrQ*+GI+=JGQwo*CyDLSV_#$~5}n-A(>KTi2bku zV^eK;KUVfT;SMFjshG*?$sbIJ9_1X?K!$m$rP(;JBB6KZdQL`Z)80?eU%ay3=N&K3 zMyWv&S3ruzz~rjb!$uqBS%Ef54Sbjs24U?wAX;9?qgD4i~a zf63ev`LRW3@Bv_=`S8fOWVD%bfX0Q>mAbt82RMx8bnWxHOyrWLY#pgswcUpfb&Gl} zfUb}Ijl2mc+jj2}X1nPTWciIx?nRww8RUAp%%g5-cmRD}@-R{GFYaf#!6~s{8gY;S z^$okBn+z8kEqNc>2<~<=4tGu?o1-1E06G!Gsb>HCbK$R8)ITe|n_I`w8nMvGqY=NA zwoT7Dnr&IVOnWftQoTR=@-ADE@9Uyg=;@_1J<&dX_(y#+SATMd9U+_ThSq&(Q69PM zYUj}~gBL=Et3h7e1qxgyZ^uZ=;yhQC13YL1e&W2mJfmB`1&81qR;%D~!;9JnV)7hB zmsqX5V`W295)B#t&U)27v^10Znrq=lD3%})p{I12+hJYCwr(vl2glM6bR|6`NW5w> z>vBZPb(O3E_9jD31Ro#wn5i>XY`#euNc)^AMO0$vXYGNk1wkP#^v2B9r;D{6z#aRF zmB=f04T4$YxB^J{H8}J@^*(l$ig4HZyNuuAC)4AamK;`1(zq!0JVq)6(5X3`0560I zJ_Bx_YIz)AuUWmez9_Jp_z+e$q3k`m@>wVmLgz#0k}jZ-kr%Qg-&3ELR0@gkc{Sk9 zU$l7*g&xa5c`~Fwg;ozA*im>By9(X;-dNe#bcw92Hsx}(%WP2NlL6DrcWqs#i0AFEpP9)S|vGJuN2rd^i60a71O)Il_W{;oX>0XQ_z-(Wl~@J&)vkS zkE@ubT#jTJbzT5*9pg%cyUVKZuHH8TFr(P5BM+%&j-SzF1W~kD8CXnVeb1APGojr- z=>qdS{GYD#Siot4o+yK|R7G=NKjTu7`$j;9abC;*AghiI_u@k!st&P`1kmQKNH7s4u!S%4QpRA+$u@u)J!)ltq;dxA)#FyK#*bhbZ(S zn4~DJd@DRF(oy~uY9vIrV(gt-ENPR~yDsXg4HVhz@G}@JwfM9dD)yC>FLhsDJ`^F? z8R*NEU)R=Wb}Ko}LW8)FZGfn3j@nm`1Lq>rX6KtnW9AGzW{*e%cRWd5_plJ|clczL z_`e}UZMiM(A7O`DG~GQO44YoM9jXqHQZAsIEC#Ok(RwDi9@0$@0T; zK65ks2O25;v80svP1$f7o}VZB9`1AlW5%I*F=8oqX=ZoCFxI3R$ry;l-@*`Wpe!|2 zyxETP$2e-=`v%FaiNF*1qv=6sbQ!nH&&$1aSEf#%#5px+=C_7wTGvLFk&30n6v?yY zdxeV{@+(i&2r1yK7;vnhCe+^AGp%LHH%m$1UMDP&q%5ef81$mvHCtMFqFm%ahXsh&vAh?5FwBOfA!CcUX9TW@GercDL39(V zyh@vIh20YthEfyQZbtqg2VA|L2o!BgDE0e1KecLz`jye96fN5 z>D~#-+2wakN8|(n^riyg; zGHhz18VPbz#q#!%jW@MMfr*C4DVzX>#|o3VW}0~TxmfL+l{HuH_CYjn!rxH+|0o~) zzkTuq9cE#<*PP1$*-1A))2%G5aJDjW|1i*h0#>S`{=mJ5ZpZ&qa=lqr7~*fj#pGV8 zH*_#%2<1}pd=SwOBvv}P$v>`cSe}FH*YLTuUst%~lZsv$Ja=oH3Eot1N4?elv>k)` z2lb;oG-vW?5OB=3D>=uPbXgpA zhVSE6XfK>=pPb{b=J5t5I@fPk+WTvl&`m87=Sq<{+uar}Ah-9JrvqtsD8sa~ygf`` zvYRsXdA#Ync8ZGL|?vRG;2OAh3(od`~a zZigkkj2O1nC=sYU44Zn80b3?2^jmN-QVqK)<9F=RS1?0)RNd#$fUZm4?R%HBC-Z-W z7yRpS;EDxx>|9z)7nPhq-=*4z8Cf+BDHW>~?N7R6j`(PFSr-)wAAK=M-)>A#d%IxT zaP!_~Y(?pcFg(_S5h>1@x;54oYql9>_t2Y2>e$v}CkSu#q4h#r%ejZkvz>jiD>l|# zo@AG)y)vUXa+9{M`dn`>wpm1q*QU?gm2TIDw5?UTAhJfO%mJI^^yRKM8D(lsY(9fR zfh($lt(oUU-eL|%=!FY!F}-VW>CIC?Zto~uvuY#YZEC`Ly^uvV6!>uaIs-_B?TLWXMXdpf; zm0<~#L)?kuBIy+=5Y~lq)iel6U8tF^A>Z9mQTDzLH!c(mq8ylU()k=}>^8K-iBmm* z@u#YoKhUgX#xa?H?sP`cx`U>DC`a!1TUE9hp7E~qzS8G#6dPdqZ2UKcX3J~;a_fwb z5fS#cjB@&Uo1}a7A!VpbBCnR_`5h|uE}r-;$6~p^YH@0NWrk?MdE9t~>ky-CAkT;A z_3{TcSBJo7?|E%CXJy#YW@>u#oEa<`iGMexYh(3yN!QVMsz8jMpAj`rZTz^Zhd6`w zI>F)g6Y7>ymV?;fN9~%9w4TcPP`zo+%0#*v$)+`z;J5-Z&nH_P5+3(G*gg9uDob~W z6PWztGqg?CXSebmqiJ`N&3bl2rkUM)?`z&Te}-R!QF-c##Iv7%^8*@-AK*}$06R)}^?&957vB9B?tcsH zRX_CNBVgEv0jQDT0lc11*R4WTUCiQui-d!A5noo&44Pu}8b@K+_1L!2+jxCJ?`r^EGsjdGi> zuS!L!#HKzxpz-q#`P=eEf4{B?EhPajSql<}bAx?szH#)QAQkfs%|5Ur#jHx*H` zF4=gR_t-lm^pStgLY$ zTZaobTx(=f_E+eV88I9toW*6Qk*y5b&uQ!g?x5Yo75 zVs?t08+2r;RH@6d+b_ni!dLstVJQtTG*YO(DE}w|1(8)iFsVhLz){g6??IjGG$EnAdYVcFk^oW+Ji`^LXnPmMiD0xJ>HV9R@vf z$5E}UhwvZ-5b4gG+|nvtWGj4Cl6Pt|ndzBu_3%jFfOU)x*a9j$#e6(Oe&Ew7{Y04bzc0xA6@2M0eyovA!C&n?qU{`O_ANEGMt0?3 z9AoZ0xj^gjVSD|VZcCIuUipbZjWz-$Dd_2;BkTHj$1vOE(x%6i?KJNpzLOACAvQ-^ zgv`1wC&=xq@n-7mrfE>*#xb@nvv#{8sY>@Zg_AV01mK8jPy{Qj;6VE&BoPT+y7unoS9r5D z+^p09Oj1bE)7O7swu(U3TmPgYuWzz=LCEB~B~~pXv8yWP3G!B*;`p|^;J-z#k=M*( zTx2yCAZZEPlu6|coVn&v6?qwcrbg<=x6sq%BeWC5N_nSNi?!PMqDfGz&z}yS%z!QC z^^LtMCf2kBuF->??Dt!)Q{ zoeFh5TE4^yFbg?Aiv(1fa`s{%qu=}N$nhjG$;6!x% zyAnMWejO34Td@CUeu$d-cLL)ws6kq#$rfl5fx{$TyF;IjB~WfAXZJUAOz^?=wI29g z{c6R_7Y~Ot68DNkqk4=)Oeli27YiCfF9LwZ5cZ4(c2 zE9aoMp^5GrI0_%oJoJ*Z%PZAZ4me&pnypAZ_^*1yqIQuwf!~xM2*{u*V3|z}6mR_t z_0|9KIOBZW;;|7SZM9WLT~rsbj;wcasa?`AJP&jI8g)Eqq~RD9dPD##uM2iMzntSCo!+Jxq?E;9yp$X?Jmtdh=mQc68Hu4uyh)o5M!Y-5qMpYn1R z!2=uS4(1>XSN**QW#rS8Q3L8HwJ|`CsCu6gYBBm)MST1RTlXO?t$|`X%W|3H0&_?* zas;=(fGlmcS*zh~IoVmjCLDs(XwP2u%7#8&PHFB8z|xPOH9OlFFrSa^w|}hLd!roE z6piA~cQ3Sn@*8^Wk`Q#6d-m?-02kvDjQLv|F|On&0!vDoSOqEEV=?bT8S7Qvk)eFE z;7v5Bt+&ZGl=+g~r!YSmBG8F0NUtx|{PK!}(f6)vL$vKM58m>__=4x>=C)A_@uT9Z#+X$TnXG@>SfN()rx`uQDd(G+6h zF59R7HmZJs@h+y*D2z(69ZBC){}fI1(f>0a>K5{ zr4#GuS6V*9?3h@3;9~ahz>$u3MyGH>Eis1`4$1731|VI_Ypfe6QnL8ulJTH%a4e?U~1_$O!x!#dsDIOzRgQ@8Vm;I~RGH4;!z z9=$QAtAI<@S#5w0zn;5n$nE1rxGUy|!dsr>+uMmomRR=7mlo02QC4?O+fqo^ARGQ_ zMDUOji#^kZr3~7YEtVVZ2LM`ENb!YLQ7~Qf0)HO6&pb+-0?Qt-7peybRr&y{r+)pi zk5vf)u#n?4djpi@Q!Rerzr~Grxex;H2er$YwB$xH(Yqb#HPQ~Hz;iQ9_QD5V%>ZVW zlNgc^xl5}RG7cHUmltZq2+ei*&yT7(dL+Mg$;S2=Z{!?-go)QzDI?ujpoBrri>tkN zf9iSxWG{zT89Ur-Ty@|kJyDisI+gOKi-a#^5u2AAqCBi2N`HmX|H6A$G^ozmWcr$9 zXfv-Lu#r_pah_(TdWTzN9ST)0BF#wh)9fX5?z#@V%i`c<`Nwhi`jMy_T`1}{_yzJ4ON1|Hf17tbVz&3dno89s@$^)t53 zWa6S%C>K|ZO+P)o{iKX7Ki9`p{(SPG(xjdE_f}Y-%P2gmtGQA&CtKtEkx`og7ZSRN zfVIk;-O;UU!Q7$%knQt6XO)8bS!fnp4bn-77IP9leRA7nrbC; zJ~8gOYSp`g63@onwIX+vl?LbV7+03LMpr&+RIWJ*xqPr-#=_)fi@z{!R9Ia~ibbfa zh+53n&1oj2Sjk$-8)X-TBtm%H>RvbabF$fqJ) z*|)pQD6x6TKG!Gi51xoRcP2kPdvn>BQ2v~bbs6|Ahh%4;X6Mr?GM|ZRHdRArm#0|U z_-EJrUw0z+s^3my&J>9FNp>jV(6bcp0|=bq`5mtNJw<$4Hm0A9C$QxP{qE*Z3igu{ zCqtJN*g@&#B?7;G?)n8Wjk>?`#YzxNY6XpNGmR^X7{tfwu0%5aRJ}Zq3t$6dSttmw zY6gld+CR_lCpAtO;j}k_gXH_ubkqo2nVSy0Sek8A~kz| zJ+u7pDl`C8M#2|QFem0h@0yI^o?JZf+yi}DQ_N-y#qVd6%8S&6(=1aH`9uWSaJtMj z`gvZQlf3lo8qwCN;UYd25qx@UkK@sA!`aRvI1;11TnuFSaun*1+hj*i?=ZZuiuB>8 z|7-lXe^z#Pha9JY0dfks08*2a_0N65BLH6EFQAeX6C)3Y`ZC;@yEG(mHY6A z>A;67lQ_3YIENoxXW}p7%#rg(*GUiKhF5VScapNGR7IDfN5^VOsMZA5fL$I34`aO< zdfWKGLp&BsS;t(yNs?1iyg)Cr`ev;}120y!j`^&qt;U*77Rwx`%X$DF{(6U}o0eRa zQl?ER=e%V|&>YTJAQ8K=(F)p1nmywD(tdauhDh5OW59jSnQMq&MfzZ`i2;_>N)(BMTNUtYIug8{zH zTz=g)N7-4ronB|f6p)n1S+|r)g*OzYK{Em)TcdPLnzSy_zp--{3Bp z#~RkHA;M^HXO*uIfAA;*Y|9C7H z>!2c{D8*L$1Wa$b#0*5AJN zpWgHEJ`naNGysY2F*pca*UsK9wQYAjdat+GLAtf?Q02rdPan3NR-Mut6;k)i2o2i6 zrErjrX0MvNMk*n_wFS@>)oPG=HEcg1^Kb0=*c6rf!C~na!gk*1Uewt!m7swM@$B-< zYaDA8^Rv0gfzt>622#g>tgd_GX37ldoSrxy>D4gOFP$CyN_e?Gzg^EW)y{z>gMg%mscRXUdg zm7xMJb2q^H$q6^b#j@WEcE4p;+C7|XSFt+F;GU~B8lv&g0BN^|TksUQ?y3ih852#V$iaanq z6tSZ6APp4;c~(Sr^GjS)$~pBHIVeA}vp!~>F-_Iy+J{j{=t0_q*e0G`XKBN{S@QXU zq6@t-=UwAOfmp4N?wFlZni%kS&C}QggFRhAlwe%K+?sdtZAZVh`1p&7mbLzr@*e7y zUeQ@4S5uk^566&5qe~QFG@XYVYVJIRY(9IY=hFJmnDHYtOp0n-~Q5HVE$hqJGait=CgwGagXK|)$Yq#5Z36$NP!0qGLy z?ivI{KuSb9M!G|~hwdI2VCZJ(j+ueEFTZ{EKKrbD?mc^-|K7EDfr0gn=lMLJu%`rI zgZE!$pv*d>{(7W=Libk}WELl;H*f0SR=?vSxvlbbg5uK{k*mNDA!n6`bYaBfL^%S} z+*i#Cfp5_-8MSSLQpWSUO`UN<;?9OtPwvF^t5YSN23CnF{>+^d&b>{EFt>BQD>)NU zn_oLkT#fIl3Z+7r8x$^VDi`#BeOdDbU;&*P$3Ew?q)=Lj^PO*2#}jNa(LN}5D79JY zwpsae(*7L9uPOdwuxPWer7ueOqY5Vs9cK~J{J){^r9}O86LnbZ<%4Wf4l5d z#e)^z!FPM;EvPL*!)m*F9;}EVpeEEFm)8NJO5L@~KNn>=0Pg(*O6y;46Pm96HEc2!Dju{xrYWVqhO- zj>x?gu0Al?!_>d%{@{2~m@v_;9Ka|Z=!m*pxTw}T@@lxr#}$oD7^VhuAgkDI;IYMC z51W@wj(>YSG~|$2bD({e+q3E&<*Q1YC1ZZmvdD!tc<+PQBaY*{d-}MdkB#!bbNW1J#F z@mOb6UI={_b@!NTE%Bc3eluFze^>ITuePUSAD`b-wcEI3Q0v}(uXAxtcgyyy%cW&- z=!G9FbIGIp4%5@^d-Y+{=DsUyGbxdhZxhR>Q!j@B8qhU2kO0<9XWlUcDMO(RAZ5m0 zT#p3Y75Cem__G#*uC6YqF{y8j7HU3-g3lXoLDUPz3x+H%I#rbTt4(!_49+dSU)A)S zmokb4{`)|rA@g(lRyIH(;CRx(d07tl@@0)1Je6=eNvS{@ZFe&+Ld-1ocU z-i>z7&D$y8-yXu=Ve%)qQsgS*8=8D`84snsznuxEbhBD+bY&5<}#5pelQHO+<(<*FEv|gT2b4VN5}Oo=@FHS;<#Br zl(vFt_T3o9Pp@5+pnp{A?bdd7@NL+;*SRGpRp;FwBP*`bQ1&}x8T;ne52Pfw6D*zN zn_Jc?V5mOk@HS|vb_RNVdkz0+I`Od&l$Dy%lmMdV#B1C5IoYR7&+AaR7qtCFhx2~9uui89g{ zydWTdiQkva<2$J>kN#*zJ+n{KI!G1xW#VOknk{biAO9)oe;>Zwe>U!9gi* z) z2c!WK%wIIN_z0()&kL4!!=`g^4imNqrX2a1(9wG+Bj|1(1q!Bf47<8C%+piaxG3fI zleI0tC$mI1OwW2donWSkTlh~?2p-|IaH-a<3zPH>36cZ~oIN@bz~MXd*qHO7d&WJG zb%i;p(u7Y$u5+>7f0g1yCW^!nr-aYWmyR@j$S_ovakRbhZqVi&B`r83N5xY3=^kDF z!dgIR_^Ds-?cc;sRM$jfnXxsPlK9>4@8LrCX^? znu|6W5EHpxT~ROQMCG7cn9dmwYRa$D!`}X2;UyhPVyeMh=nSf@7v{CtlF?l`S2A+k zpri4=>5=i^NN8i1Y-X6SK38(_ckp~rjCot-@&r~wqdJFDU_4?Sl>duI+m^kmh5dZ- z4BuO$_{sXs76ORLWaHAQ>iGx8)>pIkyjK&NC;{ZL?69qt68>$8(7t)%iWtS|bc{deSpuu_!*xwq%OZmv zBwj>z!Rd$zKbJrD;z(^WUpUYshO2uzzpbUpC;2TfqFXRdnj^xsb^zp`KVNv~A8?UB z3C=6uAa*g&H%8t9TjkvjYp)Jm6li{3fn3cE*7tsBKvA|OR%dt_L3zOR+Q}V0@@YAx zyz$0x`_Z|BAgY3S=X05=ROkfbhjl(DxyE`ow`o}+PBBpG9}-Ilef3tmYVp8}?J8C= z?W2!^JGF$*Y80F@t+38r=QTY88XqEM)%Lv;Q8hZS-c8Bb8Caca2;c`{p^W zn3j`s8hvUfKd_cHEvZ}SM55-K&IhQAvfZjLGqd&UNb!~fB%_AX?bENQPeKLJWNc=d zllc-h7D2PQk29(&`*IXW%CAaW2kpi?om$qG)VH##+jd<uqjZH=ch zygPro=qzUITr6f0l@`_fRvP4A=l=B)`})m&MrIZG)JC1A4jRP>ahgal94ywAjIacJ zAb&VF-^5+X17d3NtqDSROS8Ie)4Ln*>bN>YdeJ1L9vtUP@9KK(HM-RubW+2fPw8zp z0yUATloJ+pvIXOX9E3Ty-anHA^4%nCW<9Oyw#)iP=Tn>_Hmb|#Bae)i|8!-S4}mR3 zfV|OB)Cu}y1d#KihiavOnuGjj!RVa=CA;uKYR}PVC1qyGZ6gaHD6Bee-8rXRIr*&T z_-%;f8Q`=NVDIfIg4)P{fzi83wv9Vg&g1HuS@K-9Z$74qqAtV%EALSdbURBR5Zr{_ zh@AgPC~>}UeBLF_H49`5DSGvyvWdL+=~squ*Rx+qUhjxWvPv5&o7l&wDsu?*vD~Zv-P|ctPV0>7tJGsUC)O6 z>jP2)4cd!L+(Q7wxZFW2?O6neh_bO zlT$pb=%ev`Fk_N^dT}E9+3ltaLk1c7a7`cPqBai0U&*a=R8hN{ED42Y53q1hsmv>M ztXFP^z3u>AOmE;u7OJB;2(y$GP z9x9wSaHtgNz*Ugm8VL#zH*jF)i|+*b+OZ?!>)DY<<+fP1p7i5u<|p;eDtgY0rONl# z;husw59aODl)~e#cgoqznyDGxEnJ^lc$}$lZ~5 z8wR;h(5^<;9shE-kjFAC;m%;MkOc;4?d1vTA#C7!7GS_$WHDz|(m0xzlbT59I4X;r z-Se@734Ts??Cn7Yg4|!}pA|{~s$@5jgZ4+T5F+=Ns6OlkHiDpDZCd|yG_E_;n#g)> zjOGNVAR|JAOw67rw*O>Xx977P4L+D} z{0Q&AK)u`%I$sEIlmuPl>xP=o9*Wv{Sp3%!8tT$K-75 zip7G@p<5E*JTvO2W_n7+v4B$5v;uedaXc>K{0Y~GrD+jwMam0#2z}c1pqJts!&bKG zvnI7uJe$!phCEMPu|vRq=bfezw8QphY!HiN0B5 z_Z3cZ35tOuQ~mKr8~3fq9Y36SwB3j#iWBbT<9TqZ($d!EqWdg3u%#4GAdyr)5%IfQ z5LwEc*j8?TtAq@YA#|!&DgKVutf}`8$Ph}H|GL%+(3q5rJR|2#GQug~DJ`!x0ocW>LzR!(3(1sI9bT@u#0`?8qDBy9I*k5zX4Ci#X2mr+@w!7%~5xn$?A+-tXgB&#wP z$O$>99IB5%1+I&`?YC+WvQc<-%fB1)+I8B@ZaE2{KmL83PSIpPoJ##^wscSp`tlcg zHxs`o&DW>^qHT3~G6CgkT&paR7o2rgn-{m(W3M-ATy!Z>v|6S2PZd#;xL9#U?@VXc z6_3O2XCUyKWyS+JvDti4g~s059|P z-V!y0L^0iSrVu#w@wpNuy~T?pN@}aZ2cbFKY|5I}Gkg2=bB3=N=QP%T^-f|M)X#43 zW{GNQ+B)^TDd`>jFe0%Kc-l?THcOL7am@=zGN!wD)v(Ei+vrWCR}RU!~kP zsQc(dX7=Jp!qUsuv-9j`>GIJXZ}tfqi;7`c+XL2~d0aBd<#-!=PRmCj(HESl`pLb~ zRE!TjKC}?i->de?OwBnrN@T^+Jf`rnxT(R#vq9$F)+6B?oNIG|R;H@-S#@2^fdsdl z@#1Oab}R8TpV{ycc)SZ*qk?g17Rd#1Xq3!}+q^uFbF~{Vcxgm97mJ^bb&2)^Bf-W9O#i`Ci2HtTAUdj7kdYmCsn4KAJfQHL3at|=vrT%^^XBshWK z%#UK|mFIMVEILB+D%D~jk^iuD7-;c4SBPaYAxPKBy2D;}7zOk^l6-k3nm#rnPA?r^ zsFl=pOhJY20D)Cu-ax2ZHpus)5BXDGAS+1Xn4t;=Pp3#sY>~XR+@mbPD857-*&S7F zGabv-biQ<4JLDr_GgHGYzQVxFG@B`M%N{<9z8o>oHto>GQH-}b9123 zJ@ADoNWR2-yyP?X%6Lb+)~qahUv&P`7EytO6vg_YdNn--5!c(hRGt{X6rBAWg!^0N znf^>tSru<(bvND6>gsU+dT?WOv!JA{J#qIlLG@`2KceodmW}3Dml!%di(+YWdgvDU zyyKVyu>pm@PJLdg-19lLPEFWnLD~Y`3f;G~)U0MOoFh*NdD4xiP zv*OI*&)3f;ItGqb?$p&F=4O2F4^N>=C|621^m+77iJa$Lfy4v`D*~yhXAhdmI^q6k5C4YUYf$z1Za#f{rglEoLrZT%qf0n^&TL5vn(+bET&Nz7bkZAYDxI+R zrEcje<{thg_B!Tm4qxe8`_&b2eHA?pRPjdHSJ%6AizA*nX+9%oR(UJrP4rZ(siZ2- z;OGq>QJAD}f|MboY(!#M;r0jZaJH<%)}oVmTU_SzBu?fEK>-BywE~F?TpB9ijp*hn z3g-}MB^rWRs+$d)XgA_wVp*TI3}tBY8a{OfSQ7F+yW20QlNqY8J<$ztoyeq7yxFG3qB{_KU4A(4lwRRD&bx4sA4;|!#ZWlvYl3hZ`k z{0DUO&!pA=|8vcwdtw)1yop-QL7X%c`tC-aD~$9O*-iE*EVWnd9_wkMTd-8uDvq15 zjzF;YQPR8u^bBq1pCECOr#w}xX9l?(n}HjMZ5v6Zoc^NCx1RyBrjeT1lW5)!%tSbOjJttj48| zy!Oy@adYSO&}g81H?)FL)F??_h9Ga#pZ}f;RRW4C&AOb1mvKZ|GG|_Po@#SA^2^XY zAK#QYOpxyr(9}-MEDGP}fD_xcL9$$A=atm((N)$Jy=^8LcU^g{%(kA!`Ff+cBf-ZT zK9#RXmWQx?qN8!3nkQWgIM>6a?ae#J0F|ViV=E*{Q~aI-mW zjpp?I6ek38NO{3D%+Y05w0`bdLHAb^PFmwEH4z;XWD7Dh;5Q-%enjtpn79B~r%7aG zbvY2)qgQu|*cx4pGf3t7L5~HcU{{?x$mXL3T@JEc>AQ2rDehL}nCFp_QN$E%aBVtN zz8C-f**!oHevl%k^()oqBs~dixgHfis0MQY7}=^zu^wX#5#DVkFU^*5g*=bu!^^^7 zs9BzAHfB7W3{Tg=)UBuS5@)?<)|F&Vm8)<&d4L}*_aseqa9I5FAix3-nY9@UJY~Y+ zaHEIkuyPf-)!kS~$TDT-tU>#1Z$WHuiMlu{ITvq-!4R`A#Lmn9zD@t~ zXGitzQTAHaUgW6qYR?cBpEt6d-}>_yO*-O@nd zl(n9EN-vJla~(8C{o4Yb<_KncV5B67J0AC|$px7;b+sVr%>u2+3I~=_hP1&haMtfe zcWvyd*m-PCmxYHyvCX)ntU1ZagreIo`1tcdD&t*{tEuTDd>wNr&>(N)l*)*2s+uFX z8qu?RsmDVr3|1Zcqi~?97~Qr%nHmBMKugslv2B7_Rn+YKg^iZU8vYy|cr&jY0Fx<} zHUlkC>C>ihKJ|n)Vsod=zKP%y^%84@(RSn69CBES&@Vv(8wlb9S*I-n(=rHb8hfmK zSge0mH_<4)SAg=pObqI=0W+m9)kxQw4oZs-Z<6knS^yu=4i)% zY$gAu8o&9-cGPq?dlm1%CKDy?t@n8Ms8%ED^1al?O&9jWQWnXIdS92B+(P_}SC_bR zx4#!jo|Bu^4kAM2jW0OTN~N4$i{#KT3=h6J%Jh8r^&nvuZ{b2XF(2d@@7UGvIM27b zcr*josYRP=KJ5KwFcH3{5?&Mn_?<%{quOnb-_=vR2mmpWSQbnby9RII9+ zZEg&>fu=eSC&Q^>L*iSM$O?!sC#}=*$f+Yd>+tz8kgwb540Kd|5!%(g_`2vE#yy8j z8?^hFs!Z1Mr+)4(nv_BDvpv|wx^ItTs}j9%OLA^b5eV-Ifu^2=jb<^w@=5q^`euPl zj!{HMb;pW>*>P5`XI*QD)KlLaQ1R^LR!)bpn|zN_H+y!^a)wVx_{Bq}`mQ^*;?smI z)jB?wI6{9N`yzBHAuKVm>!W5pyrS@A`wBBr=4}c+x8pTv#;@Gm67{il2>nU%7U%QC zv}P6Sv4E~yr`~U0#diGkM6a8T5>vA?*#WA)pF<$9!Ha?6 zQ|7w0iTyC;J7B@iF{f9_G(8utnBMTjAo_;(>1;m&t^&=_n&UH)nQXEX&xXT`lT&W} zZeeMacZRHf*OAOSKqr9|m?};YwdU-2i~H|YNHu*Ahf|`nBb)|>-G(c98!Jw}GK)3! z_yUc|UC_mbq)IZ8*4Akzb4uzQ_6jlfYthkH!GWGnsNRR#unffz?Rmluc z^9!zQUA=ajMyLig83L^^#*k-bKrk+Dh;YW<@F1GsB@UE(1O%t`f^3R(>Z`(Z>;oy5 z`%Psr14(uY=sw9Ov-CkU+OAWhO^=ktMy`&*jXuNQ2z=D4PO`-5{>PypdHqkfdCo2qZ?x2oy@3ST=?%qlyAdLvMPWahKXOUtln&$Y1t80FYXnK`tc&@=G z7TPN0g-!NpnXu;X4LTOa#DzqN?$$h?y#_k}bcF>$JS~q#;dA4C8k@dA;Auk;q$gdXdT+K`bHu=;BI!QUha==EySz(|F| zv2cFtlo|h5D5BTPHJ1?`2RY}3aeBiVPK5<)`UCC}*B{?0WVKYux+|nJ3dfOj=NgJdimBZwBnBfLsN3l$?>x2yeyL4;KCBMk|PmA=h~t? zjjt2wy}~$(EHlm6{kRXWZsOGQ7$+LtnXZ}=@zTlQ%+bKT|FnVi5JW|D;|A3L0PfEt z-LpPU>fMaE$&(U6Affbjdy(J>bLh=vn~=lC5E*$hCH#CO)RH{+sQ2o$IiymBiJtnd zbn*P=;ZYUxd@O%U}DFEMB@J8x0Gw(H1Qpkg4(aWS*%4>D=ZTkM*V#+^uPEm73}wI zvk*_!aMl@1<*z577RJxAI#lDz-v@?0*oPY}>1CeFWqB5VCq{ zG7p8{j_mk81aa4TGfC{q1?>cV9=n4(-<9xfEtj{>lYh>b*4$umokEwJ=JchFZ6m$O zJQg(;<2q#1dKV4)cYWSgtpna7ixepMs*58rz*lJlWbP3G}PLBAF z^>o@6z>q85?$5F_>=HvUQaJoR{hY8SnQCYeA@bu}0b!xG^wL(VC&A7K=Tsr*T)IY2 zE9aPw)2iT^o9M@5#5W((FN%d}Z$1tRr|`-~Jawl0&QdI)R;+DBPVaNmRDn?(q6Sl8 z7Jn`JXdrqsz@dtg@#A3bWQI$uZBi!H=iO0r)zv1zO-j{l5)h~^3#``-N1%WLqiAy` z@nP%7=SJ!w+NH$PkE#w_=Z!!Q7*pVqAI9u%veQZ2+;w{p_vDcgd6iDioqo(yuZlLn zz-IOFVe46sF252_!bL!w!tkUdDSu?S;Q0d+)hTfc~15FKI0~&t^**##{vq8qoAV7_M-`_HJ%otztKWx18>6U|&_7&3PqlC1a0Fl@$ILt?4O=`*8;S_}Agtv`vbj&B3-ku$xv=R%kg! z=!jKW7P|wwY7MigTl~h6+Zy`8O>;iPWVti^k+`hBN}a6!2gC%*MYF(V3!XI%#LqAI z0=S~tu&Ws#W&u~yJiB(@XD_MAy9Gy)I;@`7`vn&)mQ&~OBs~;Z;X#Vko!G9UAv?s_ zFvT>`@I}6=7x3Qu&YtKx`)2h~SsvcsHnLyLHS*{kRm~;GWfgN^^7uP_m-Qx|i2fC*EJt+SbxkDsH}c* zVdu_91w8!NvAHtdck-7FoO|AuRj#372VL{LDc4gt59oe_vma(3nbh?0U88f(W1ZmH zXXYO1lrV~&m(JcNI5?qq34Q{hC|%S?@trBEb4mu>?cNLv#S)%Rigi4{nN+MC1ebs0 zrcdXXIQ2M0GiDSHvc}9jheR$=#5|bob;_%~2z{n)1>`oBpt^}|hqred$B(uN+#7#u zlK$9w`zmzTE-<4egKmt#OFJrIJn~jLpU>RR#^#&GK2nGo(Np2YmdLMOgz`HJi^zA1 zv=A<_QZ5zJSp0|&jkNPRH6x|W>h8#HOma)Cv=zN-l8WfbW0t2L)lh~{QLU7h%OVTH zE!T=WymqDcu_;;nEH^@i-g`s8l{c`EiZOAtmMFB~EE}O|k15PK(iMcI{>db(X2k6}u_3?Deg~#*XdUnr!TKE9lq-dfMiby_Yj8gx|W2Cw(CLe0fXY1Y+ zYq7Yx7`lTKFmH`hvhX*PEWj1$%R-P{Fe{i_Jn#-VNpsZ(3Uu?}{|`I_tk>uYOuJkSI0JXF()QXYg;WuV3lPrVB|lwtAog`e<{8h75Ph1 zL}L7WV^^0s_54eAkwDYcN$6-=5Z$IC&yc*qp**t44jqkPD$*){F20OZwnOZ4EH@~F z*~Cx(L=M2j*M+eHdiINfWerLbkeI&!{GG-jiP}X7_5yMQEb$@m?h!Jom7uE}a(RTr zfP5?-Vws@F^7fP)f~K0BJ|l_-?yzMeA~fOVjQ_mK_^s{$?D1rX4;Xa{lrf| zLn)Z|1FcR+Ovefk@vV$z7_Rom9)hrDb(^@F*+A0$X2^=iw*wave5NFa%Ra%TsJYAC zvq_@;+p97d{j$ali88Xx&&E?9l|+7*Ic?wjgm1ZN*}rUA(N@=%5XggVes)oe71PFs4v2N7}dsjR^ z>Zq~K&=co4+ApxSI7{6a5|B2pM(OYrXh0@S)~rA(%vHjG{cyY}YJApFD|?9?Stq$I z*V2cnU<;u%8po@Dk1uQt7|xP28FyAHq+`petRvvk=v;087|HGD4oExelzi6ywTMi| zmd$jhbUj7rsp}+c(?ni!I~}oJSq~W8m5ig91kv+sjFkso1<6H?2KUE5dAN*8lLnOJZabRU_6)D`>WtoRCA{r}O4!J}As2OVM z)U|UMr}|9Hoq;>mtHvzP?*OBPbseG#i4KMvF?Hco^>JFKEcZ2b z91>WjPDqKfS~uJJ>Dk>_{gYnJZc&5txB(~4rt@wYiJv7WOIK%5Uy)_moM{n<%In_r znEt8_l;d-DGFwxzGbq-Cz1++36f6X~XHesI7U)mIkFEf^^JeE$H3%N;cm|4nX`)Pt zYE^G!kAq+M$~L0>Q|NkkWpf~0y1Rm8t%wsQ4w}T}ErT;e|HGZ3i|V0RiVY&S zvzhg5il&8&jr5;?StH%Mp3PD`cB9r`2;wL>Y8|3>b)+P81~gSvR>?Y` zO_Yzh%rpgcw&2qL6tEQ&pykk!+$8Fkkvt8la4BdgH4WL6#p9hKRYz z6$`tvDDC|0dV5##Gl8e`pd#%ES?bwcin&W?M%S*P-Jmf2TprB_q0{Tnzs1;EoLTmA z0LEEFJOSb=B}Bj-aBZLTUUFMQ^+swW4$iM>y>T;G!t8kT7Uxc?ww=tR5n!K}Wx8Hy z5By67&G$W0$9HRywX2MrtJ2apc}iMSt-Dgb&|7PY(bK(YBUPev?TxSqgk1Dk$c2Zw zZgQ(U+nr_Sv`+?Qv;HNkWNuP++(qHU6EuEIAZVhKavxgA;e7ygYpLINlAM%?ZaiLg zd+x}2No) ziRkRcQ&<#4o!#Q}7_>15Oww4v3qqPs->x;?73mKn?}1tD384&TpJbT)I_~V3z&F&o z|89!@uL?K~*O~48t$7^aT4vdbRp5)SDP_L_lz35b4!fU5#D5y^Fy{eLsH-Q9V1_tI z*KMSS4q%3ZB$HFm+nJyF$i9o@w}NNKVS7t5fnaZbo9U_|k3T&$(n^x&6TXVrXCNA6 z=o=yMshO{U_>P70HL1Wv8+z4sR7UQo>a)Ce2?k*GtD=gahKlTL#XH`!)g# zdXHL5n{9j36h~AN)Wa7Abb>fec}-~XJz0?Z)lvEU<*pm_7+#HW0O)W777!me$Qwxz zFn18)mW@45f=0PXh+Z>xA<)aA(aH%uGY>k)Zia!&Ve}CebB6U>{0}EN27rPijL&f+ zP@o7E8&+IH=yH&C055Dr?C86~t?ZEeG~6nDUFA1ybZZy{mh$PGhy4IoC)>*N%RPgH z;+iEdq@{8~KdEUy5Hwj8PECj~l=R=UU{E+=)84GvG}4Q4 zWlE|KhZ9ELs!SuE$nc^`n&O(>y&+>mt{}xPlTzvW#CA%H$uW0ndXP==7viCe=8+RRCdQlFw$*R-8;z{?hg17gPd5|c4PH10ov>C{s+f6^| z?RTUy2i(pPC_aq`ecv%7gkIX5WzJsKksEV!YN*P}T{qZgwjKR1HE-();$Y1YA8Vmy zP zg*3ic9)+N%CN;_6Y|VA=@1P=1L{bo)5S!9$r+cca`HN>SEFHHq zI^6=om!^$C!wa8;Co`!uqy6tbsyw-;Rq6SQ1lN^}N^xOy+T7sJT?%?;vq>%fqS0dh zx*fcF)m0L3c4_%jFSh#}&r5B05FLcuO#cFw^UsA9z->%+SxZ2YmAGFh#Z^D|9)5+J zML;dEG9%dcnX)bvxRiW>Tcb(wQErLJwW#tV*T6%&*^T@;dS#zF3DCxDgf4 z9}Hp<+n=)t>)JkCw!&jH^{2Mq@!vaSw63{AZNcoYy8t*`;YsDARpe{5wG26bGa5Ig z;plx@4v`0vL9<#O7SY%LLZZ-n-s_^b>G?KLweuKdsHxTV$nyZx#uGneZbpRVZV>8f z+@O(t*86B+Du&{36N*APKa#C-3}-n;5D(YG=}I8^s*EqGKb^ zAFD=g9*i@~M0j7O%3H-iJ5GWbjp}9jD8$KuiU>NCF_DU<83$T0OSO=P?av~?c)JAXOo+q6ma)P#OkvBY4w_Xu>+IzxzA*olFP^=`(O8=66b*R9`YXstZ zT0Sa8k5ajie~WoLx;flJ-0`89+4*BmB3E!*xc_43&0p8}0BGS%$O zS>Nd2sQC{jm1@le;c17!R}F~ra(Z6UV^LFn~9>jz0oKw`Kn=)^lJT5vJ=I_A;8U(6c z2X#d^NXtkFlqB>CgdcpfTI88HZTV~2ukz^`MOxb5l0@5%jF|6{dXEs*Z~TB9y+NzE z6!Q2Pn8_C;&Z#DIPy(T8|hq$MKzP$ zawql)p|1aTS@K|oI|4Qc=bQm=vq66KF%!C@jqI&fe311v>$2;Vb;caOWf8`tlR3rt zy(@Ot4WwM+bxA#H8mAXKZJ!3hy}ZPg_;IzVwhtvBYO~3l`UOoVA9- zeH8ULPS;TubuxcGkga@_=w%&Ek-C`yf$k>N!6|0ujy+>@eVmYrV3x=LUUUQ=N zMusM)0ZQPWw;5_0dO4lxfLczpD(03rk=HOe*$UO`z1DMBd|Y*JJv{6KJ`s4JBum+M zjki_{gi7|TcgX&W)>_ZvHya^*nmS38!KvEx(k7}h&-!6nwtFsb1?{j-Wlq?}E$7dV z+{C~XAZf9cOo$u^d=NT1gz2|HX3$@L^t|XZ5Kde;->9QI1Dxt@uBp^JU3+Ufwz6&u zU2YsN4IE90X7?W2*2}`*vY&}WjbNzfi8FxYiGG{-?$&c$ddFOX`o%h{4x%%gToeV} zPG@+MlO($vwZQvMLMv2ZsP+V|S;Y>Px*O-o*M2Gzh0GK<~)^j87JjsaK%8>F`9J~~kv7;749 zg$Am(WuhtvXwg$&p6zCf$Ck{@_GfK`<#@KWfmo^mB`|w}#NRc@|DC_*kLJjz=9>qR z)%tEb{F0pq_LoP)kr)Y4osc9Oaqe0aQ*QWQ{{)6mhjCfaVQ_rb~Dv}4>fzWf`m+b*wOxT^%87Dh= z^!L6Tw;bw%E!!Ye9aJ9FI3{r8@sZJVv7%uL*JPZV);CbvB(*TYjP9XJrIdjr74=8> zYYJuhhXS7j=_7@1bNX2)I?GTG#o6aLhc;XkNKyg6QwHIS#X=g7Zd8=BpsrTdvd`wE zJQ)DjuUlWA+)ugV&+>#NH}_ccSN7AA$s2#Z5WFER9mUbV{f_MQy@$_!48NCUK{i$= zc^^ThrgD;C8X|VXGVqbq7*}v1RW2Dv z(&o@XGb+YK#`8xP8q^++cMy8c&@?x93Z54wBlSem?GLc zlFTypI`DjR+{(PIlVAyIl<{rsd!&`kcs^OB)pV?g>-J0Z?ldGqe9gS>sJI>p+;!QC zNdj50^#;DuFAP~azJI(q7oOh#U{S36!-w#@?EN2%uN3OH!4}N(@eeIXN)t5Y;bpj@ z=kkX`YdSku_EP*b5yDOZ9#J%r`7ZJtcUVa6i!M9djWRz;9*sJj+(=D7N|M#e3%0$~ zvbZk`f+pzeQpuF_iuaOWwgqB-RuzUbisY*mqSDC5^@vBP3o?68z zN`C9vH3?_4%R5rYcImAOTg&)v(JGfAxBadv#Pav3QOD$GaxRRS9V@XPlDY%UI0D?TCL3oG8296o48 z%2C;f%w^*Gy}MK&xiOMpnQctyX2wc-+O05ow@q)dhpSHRSOV5REKDa$qyt7WJIKhyq}k7%rk&q@!2oD z+?;Ey?@!@F8YPOjAnvmU=`TF~D^hRN>_UlAp>Ncf$Ir%>=_BFvGYmR-J!^hx7 z+2IkYcZ$EiTQo?QJph?`{vcP~JPH@$md#nsRIGM@$#?(qYW%8ZOa9F=Yd*lkKHy`s zjN0hqa!i;BYr^6s@loHi$4{%?WmJ51r-@s55}t+R|0$-mE&tBNcJFhZCjf+Rz#u46 zMX)W;KmxC_*yHL4%psNc%)FnsE^Esn!mAu$8NW6>kmoO-NLP@I*4fM)TfU1Y-6v!Z zKP0oG_RwDXiOlC2uW0?J|3> z_`zK0{hB+PR>7=8Lqa>TGvPyaE2Qp}%v+J33u?cqndN)4{+5mSf5#~P57CQW95+dA z7ssoWA(2c$S`BC8N&omkrDhLVCSbJgXeZm~L$0~|B}oHqaC6bSPxI?+5LF55%AK-9 zL+5{r;4R7@OuM|wb^sbu_`WsuHy6nop%1uL8bxX91sbvrO68via(&Q*72sJBs^+%> zCWN$#xU_sfJx@2^hEwzZG~rNH`1&ncptra8Jh(6BxRcs$^cSnzhA?;lazEF-}t3;>{P8IkU-*NzKW5yxDXP2JP6 zJ@VEZf;xZX8$)#Ju>vE@}3e|=gP;4BPSiXvttT$u3V zvmAT(I!o+(Wp*P5l-QzvR{nV?jZC+>G91mM4A{feD+yOxj3=V(N8mrwq%6+&FE_qi z68%>8UV0&sR*;a4I6a0b!^%wiOqu#hZYT%09p=e(-pQ|lat|3tCN1Q>m7(K~=nSW3 z7Oq%*)TYv0^?86QQPNkUk>^q!)kf=PAC-rpWcL$WEgY`L^l|Q-QgBlaOO=rP-h~`n{^|Hy*yTEE%H#b=7X(UTXXEOr%7=sqRUg|q zWi^{=*hsg9%==HVt7dClDgT*G{68PL|Cw|=DSFS{VSLVkUi=@ywDjLz3ZE)%bzZ&c zmbL)5xh`2pDX3)RDMTa=^78i&o!>Vp3r#IiQ>^COntC)zWt-a3{wr*ZQpm#UB(bu> zWlKW>Cy&Wzwa*OpgF(t1;#2p&?HfUs{SBNq)PlCZqAN8@^rc*Cp5%BOtvTLO>x<>A zEwv)0bzivYd>S{HEm-?yD@q3YN?G!flvAfpS80c>vPbNZ5|>Iy#5^98+A8f~tVLkXzrwx8Si8ZUyAf03J5mvM7lz`6!-8)UWdfLOB%AAQW|2`4xyFN&AiJUsMUi~Q}1E2+)1l8Uo`184bUFcEUOpBY7MO*|VH=J6kz47NmqNpc{@dh4c_5 zpVk5<$y?w~&feyNm(^FzeIJ&8#tH0>-v77H^1ml7|KrH_6Ndmh!7Srk`n&D8;Rz(yK?s2ES_=6`- zUbr$4(B{7yu0}I-@M}H9Or6cc(SfF=AQg2RhuNA_ukII}`#uAredrb1m3GpFQyZF! zUu{kBn0!U{aHipWRNk9y!n$q=nE3$=k7c#$)0}}M0VmZ75^!hs!J9kj)o-%yY5->X za}EO}_rKcqfk4sG+uPj3%mu2;&z;Xwe6!#-+VWzjRTi-4TylulKp`ED!!MMuJLk2R zU80Y1@jU3D7_ZouRxf}qJS*B?i0hvh`t`H5D}9~DNenp5mD6lP{wRAC{#0Hf^4<3l zro|g-F^Lp^9@@EAv>(Dbd?D;7gU=rFYvm2JBI42IXpz^Mt@GKe+eltciu81ikczg# zyK(=o%W`$;4wd&5u$^RaYV%D#9X*Ijt9$bX=4(yaJX!*aZlkiyqZEJ)=m5<^Q3FO# zYZ~EHO;J9gvxpF9iwKYzLZ z9T>mCK?KTL83WkflQF~<1&$8Xp$cR#so5sDqZ~*M`<6724yB7^STmrsmkj+74Ltk$ zo7Vbhp%SzmBPoR-_jq^Ru$G7O=kq3sjvL!?t|h1WnvPbL1zV|3Z78>cqr71K11L;RM;E#LfFw7Uh&ufSPr%J(8xdxqHi2#Bkv)=OaJZhl4d8{ z`P@0kV8IYW7m7*eT@>p6sk6^1H!E$`cDl~iZ_m&%AOh-Osf11NmfKRbtXrGyxh}GV z1)fTR=m<5cf-Y{-Pt@63^#7Aw(DRtnz_3P!Vp!hG0 znmV=zXRUogkGBybagiSx)Bx{5Px9R(6x!%uMqqX(b1KW$Se@mkcJ2gPb)Hvly}PzN z+JO8vd`SQOa|hT`c9iSu%<^DcM4Nl}$&;72;zD0L|41=k;CvCA;S_eC>kc;bRZm z{rH}7;Cn$Q`J1h>v%YiEAI!ZhUK8OYMqh_z007{>BM1qyXbVjLO!vO zr{XjC(PF&=VWwD}N$4y1 z+kMbF#GT3GwDm7)zD$CZTpCv{wH&_Fh7!@zn7H=0kJH!kpRLf?w;Mf1@tY3InhTL2 z1rT!dpAP29 z0x8Q;h~0j!dEDCq6M20IUFNafYSUyF5?b8Daa$GAmvNt`xSlR6vUd9W(G}s>WM_U4 z#Ru;ML7H2=mGpD85i+^#J+H`~I1R&U3S>oS5aGNQLxZ~gPxJC_4=(Svbv@vwA@fJQ>5~>87*U%X@sf9_c!J+LoS}{XlY|kZ)=Y?%EU$0>uZ+fql9yZ@uguJWVe^}4k<|JSloSoYI8m{e}%Z$H^ z#}X1{JiNc6iRf7f-m=gEv}0a$Ueq{3Z6R*v*A4w&UdI2)KP*_k zjyEo^If<74W#hHWL#Jc-l5XL3T9K`Nt!&t*DlIc`UsRbd`i7;*0)}ow0N&WBeY8SSNi1%KO@>MwS*}2R5hL%KiOJ?^)PMs;(`;I zb^FS5ucm4&fpm$kWk=h~{b(@^0GJgHmWU)21(4+IBt4ImI=e09gbs0C$&^U-FFPL+ zJ{hK_yJ;;^->Ce=vDl<9K`>-Ul|?swSmNiphG=5n8k&228|r%|=fB&bWD1E0{4OHZslT8?2NHV;?c|p2`WbJm2i~($eyzFIUcV9$sQ^8!wmjNl-vo8aZmn zy{Kw2HYh~Frm<_iS$gYno}1M0yPU>(f5KPTap99Diz&76WfPL&SS$CR=OOSi~#qtt_sX;c};e7iJ% zEBrP;Q^<1(69km^4eq@lifjCRt=@i@@Zxsk-PO~viM)BnHIndXWIM+W>f}J@yMynN z#M1d0E=6AQoiCx4z{`vH@ot`H`p~|mOb5}$lR4-u(HH3YCQr@%=`+Eq_qY&f3iz%L z(cOh_Zny9>7#t1KK+M$M$&6L>4govJH@ZAY%rbUgbBh^nj{Op?cByIcrN2V?DU+on z8L1i%ZFR5Y^4tRwY{a*cPRnA-2C3?MuSog6Smx$Nerhi=L9lmX6ungX-k^u@Ct9rFyg-ZlEyl4FRYnj&FY#4gQHU0b#@99!1_Hhwg2DO5Cocv{P(o|!aIIh z1SeBp-VynSsB8i|h$u~S>!OSu))n)bTbbu?(*Rz5{xEpwjTJnMeNQ29F{?z))(Toi zgpSWC^@f95F7+!=rHC?`$&nxouVkdd1Q#_vG82EvPPMHb963 z?kC}R9F0FMc!`GcZI1!pe5O#Dh7Ml54g}K8-FI?!a22NLQ%O7rHYcOhflzweRpRC) zefQD$NpEzg|2`kH#f+t!B$`Y5Dem}Fl}oQ{o%BdUav=t;+N#(w{4&vwHu&H3pU!&I z;s0*Rd0uy%@c8m~qKi-a^XloucS)jzO!)|Wu2{qhQLk@{y|_LJW7}Do;$gxD1U-2n zQJ)-tr`rW>h8jl-rItO7xv~pu)mjzSGdeUqNzP9uvl+8bP zIwU@DE>CV*!zMoSSKM_8*A^lNHW)#An}Mxr>>&pNC7qV5su&~3WUH}RRLTqA@M{M? zve6j}=rnh0f6MZ+!&t3Xo49mG12k}T9E3A?&ncOIEsa?pwmjYte5Av9M&MhK*~84u@rtwwcFDj)l&at&M!;tDYeht7zEnBLcom12E_!Lj6%fw`9(^OYRyeS~5WB7WUXA+*izVrJ zXa;h$?RtPtKV0JTg9_4h%-E7i1kvvB<&yNzHtZ&s`q;vy*;Fa686<1OTz1_0S;EH(>oMnH@JD9==+c>qxdYhT8E_3|{xAquy!Z`tsglJkBN1*|?2NeXzAbrQ1*q<@nik0o`wWU>0T zCyB?cv{dP8HbP;&s29n=@_7;=wxcOlwl5{syovJj$-ASjgo6V~iESn4^Ds;C2PgZy zLiJz%sPv<*YxXmv_I+`52mLjaffM#l9I^d=%;TT*537+wek)-{I`P}|dPXyTjT*O} z;i9h$NITPNwrfq7uSrI0xG2BYsZsx4DMmBo>A}tagC8f!F2M=jm^{jYJ@n52xw|?M zcRp~K3}48-@Z;MYA6}PfG1M6asj5vijmSkv5(zhiM3H_sF*zP$Xz$IJcYd=KlAuS` zw6q7(+jgygs{3t#*2^=e2xkR)nqXBj?ZkctB$$MhlZ|^`jljho@ShQ1(UtShp(2aG~C4D==ZsNGslB2JSLnBwVrNd{NlpzlkNfhvXZcP`?jLh{RaWC^S!OyRhlVzkk z#N4N0%SHEPSfv8C-;R@S>5iZBYo_>2A&)6lb#DRXiU6*&l!|ej-AKTP(RJa&wGBAK zVbN29;eSeUVC9>gK%wE!yQqUcm;E+ifb1FSOxys0TgJ=n#f}6a{m$ow%AkHk=AO*< zQ{eH>9Tvl2SNHQJ`K1yv6Ycyl<)x=;F$G7SVaky1LAXgKETl*E&XTh=nNzO<_g#9i zjyRr|YGE4DaEHtz>8BgUFx;2~ny~K~+9}xC@fk32lL7X~5ul5W}8-U)@W=!ahkDK$Jj=Ew22U9GoCFVJOdDi<=hWy$v4a>qdg8)9H zIn38h&Y;DMgc?AZy?B@{)lTxbJ{cXCTxE^qU5wPv&Ar2PH9~P(2zsiBFT%&_>vHfl zaZ0&ghOULmSn`g-^n~dS%|#yB(21J#N6>`V3)yeGNuGY*-5fI{@(LZ%h&Ut^6#%^i6j^x)zvvK9`e}9$wH>U%8)8*vu?Oy&A(B)J&BC@|edDU%Q zwvojrl<@YU?Xn%3*qG>(K7b1^$=*LX^g5Ux_>SV(xg&Z7(4F5C1x^->_njd3Hk|Fx zPxqExs5Db#L4@BViM%-Z&-h8KYwEe zA?9-Cw?vYH1evq>X|gB`1@~7yuc9{~@pztdwP|?wa+xfW5!*h-u zfe(e~x5BNxLgzX`@C8S&u30I-wzRr(T&e6I!mnsM%L=pLgg!%|F4}}XSCc;b_$xk( zrb#jM!7${rv|BhRgenMgEOnAvK8NR)2a4S(Ee+f>6Yva;VVMs@k~2 z@vXpPnb1R=0~0qL;4oqMt6f$qLK6|@g+dm}nkfa!y_YL*`^DlM5ln?TnG3yIjqgL6 zHbrk4+_C$%Wek>u+7_l`w&fL%IK&J*{?|N_zMoSFFFNdLJ!20^yWKxbn8+gUB)_iv z)ha*3H=E9q$;z@r!~5Qshe$1i>-R7N5sALGzk*wQV`ur*uMmF}^qg_8T^0U|V2Ye| zLtwqC0l}0q6~h3$;S>LLjk4wXPlQd1=EytrHCsMCWFdFt2`=QgvyUSxU1F@tDe(Ei zgL?Moq4d?B&l~aDedVyT&_ASNE4%uXcU>}G9pzk=L70LI$=CUy6mot<>ACLOJ}se? z9z@TEZ_;0Z-3S~LtahwOLdq8a#$ivCxyk>>wn$jZMPv3x3SV`4%O@pcaseNzF6Ba^~89#9zNbU=)rO9?1 zUowDIDABI{*cJ3|$NGWYT;S^7Z!)P_XAS-5BocV*IQH`FmkFF^$))j}vo~81Lu_1u zvj>6WF=gka_F&~c%GWmlAEisUmmR(D)8@g}3ILdbjHpx4ryEjTFE+@;$0fk#G7%1( z4T^Zb@hU$~oEGP3M6GFd)1Wc_|q|D81V3tWF}{ARYb(vMMQnT?H(QilMXeLdT%g zixuqL4sO=w{jBmntXcV)`hkpdPX`%70UZmYOgE(cg?9B2jK#a5+=NU`oLl2 zt386?v>{39=hx<`M6T#c#tr}OIvZ!jIJ2!(_RDun0Ysem6#kX?+~+l!1;CSp-LeVA zG)eridsLMfNmwDB`k~Qdh7G;B3ZE-JRK&zMJY=9>s`OXZnxx8 z6pXwZ|Br%^!gX5YRSVxgHTyp)p!^SNrQ+{NHA%(BM@mhXCX?!Q~fVoUM zeaR-%=a%X5T8ZXYXO9A#&!z~R%?Gd0Fz_$%H6x=g3BQIrcle^5p)ykBc5EkV+vNfw zCPx0PYV#>uFRizs)EL4R*bru?-#zro6=f|m?zvtXWpPePZ=MB z>vJ4yG2iG!Lu4%CkBp9a^Qp&D3s(m&LPxwZ$gOb_fU6I*l(eNNINZ@gI-D(z)VKDv z04Au{5bz#$ZeKW7Cb;6o@*MV) zSE?eC`De%$u~J>Kh*&(MUVBSaBz`?-SQZFNAJKe@><~_i=ar zgAi8x-Mf_B7L^}#m(}Og<0yZZ-6X0+5IS#v_*m7sphe6$^>P~#=fF*HZ}(Kg*Ha@1 z9KMeM1G>|niCdjy&VZA~J>f2C1&gx)wQmOnt;0i|{0UJKlwqS80zu%R{8zKZ>QUS_ z3!epC91Inc12wD`y{ln@1>IC8qHSb2vR{S=3j)Ims_EWnp5gbQ=yP2$skolAd*g`su)Wr+*gF5B|+y$Jp|>!&0)eOI)@~@#TDoPtOA} z6hSUlZ9?_}c1)q}6AhMD(_8q8<;SUBj%ZP0O7 z4BZjB?dd|kbOIuQq~PDv`KW%@U^6AI@3{uJkMTOezQxXWumTTHAp%lijMlnVqz(br49Rj_6rvBU%=dzcGN1@Ywhvc z9(W16EgWB-p%q!r;y52Yi93}cHY3V+#mkq^;J3{Gg<#weT|YGyI6C%^`}$eVnV5z0 zF%*_dMZ1n=6y*yGsrhgZ=4mbHag}Ld^D^W&`hFx%iOi;_Gep{-{}*SlGNYyVt<_PK z$EUJN<~1zWJe;`TLV9ptsg_cEg$Z3H4{*>P>~6Vo+L|BL*&R%uE9a`0d=vhwJgE-zpmt^qQ zw;N1b^Pn63zVfA=ogYg|y<=~dnry9;b;9cG78&zjBwV_=yAx&fMw(=|N@@4z^yVJ= zzLcog5Ta1V3;GbEaf@^JZtcsA21QBImVd-rg&cP_jR_k=yG?0@n8>Nf0pBy5qhp?Z zEUrFI0(U#N+&M}&@AAsz>q)hd^Ew9%A!#bUCy^g>4+ESSGN$d@jw*J40mc~@;YA6q+D65wt8j(`$wbSOhobZ0NpoyKxuPEy%o%-|ER;IMQkY5mefl@1c*^74j!9 zCvMHyxWwVh9vAi9*p2iD+Jn-<4+B#SHEu+TX)ZJ2y&vU^CIf*$F!@ux&7wrHTG@6S zcy1^}TQZzL#&y-Xd<0Lxg%L1kfVi(7QvfyXe$^EhdI>gpEc$X2&Kxq{prl~HH4_F5 z3oSDvF1hcyJMag=RQC=VmSisT=snIISPzU?;z&(lvFX}iT6`o?TQN75HKQJ9eZ zuEot!nar?gH@)+?ny!kJ9m--=&S4&@W85(4NNH4e#eJ+_Pkb$yq_$Jl=0tVNQd*SQ-_5pUXswHpmY;=Y%yxhxRaT zUwNO$=7LtEz&+)MFl#^vmKVClmdycN;3-96OBg^0#8CnN2g4(mxAkHcACrDvI6jXZ zc7ECRI0-44N?$_UEqI!#avk|HSLXhBdb+`Jt3h6lIhD&6nVv9QJbq;CX4&mSNb&>| zlV0!*Oj&-E(&Nanf56hbQ$zj*HgzY{1E*d5cGZuaH-=_6?u{0cSqrN9@ONdum^`+F`dCLOrS3I@a%*6!f9!++ZK_LM4SV%Y{6hP? z?%lB`eO1x|18${KZg4M_FGKw zI)1oqN98)iCUJM9X8k2yV8&=&CsbusE#i3G$~f(Jc9FTpK91#0QkuP8C1UDr2wl*xgeg%4;QoE`g{hl`)$(h&p@s|kajh4ULmgcmcv(dEO z?7=E@+8g_4&ZV+BA*&u0M7wKz(Uyw$9CnZ3cOEj;Eh!CKaQnhoGBVAV_}*vt)kmTa zfAN`^{UL;qA%(e3K0e{P&eaE;fpnkM4^g#T;6-fvN-2#*ec`quknC5z+e>&_+=#Uh~&aJtx`QXw2>V_tO`wr-tY_I)7jsVVzo`K;jM@-l*u&#%e( zka`uUwWq|j9gXG!2z-_!*0b$6g~{$HL2~Yd_Twx*r#;l*o#DoP+L{xgCK-KI!iz0# zeM%_WHYO%!$euSq$xqt!hJFN%*3L_$-{_c_RDiced3saeD&vz18g$+0E|!s5LCHrq zUs1d&*E5i+O0FO8)OmpU2&=%9*YsdnU5}0?ZLk4ZltGQM5p=pH<|Idx{>|hy1l!CO z;K=dX=Iq<}WbM*b-3;(&iXn6hUp^ev0C3&qxQGIWzE6f(t58^-EmQ(_i->| z;&#GG&LCO$bLr*?Y)R5 zDUkQY@t&9#vdj*|LpWEYpG8C`!A@s%%uRakA#s1GGqc?4KRDh48PCisuu2d_us+>D zE3g^X^qg3Ukf%LNGnO*2x@+%W5Y2V79oJ;I@%u8Nw!Ja`rqG#xl7342w>DP%|Sw@v+YO{wOi zS(s8qE*D25(!VN5QopRVIVQ~do!QIvkLLG1`3!h!M6Ym6-^+YH7|c02(;)=I z;e%U_LufM~d-9}qj&GYorcGI?BIDa=&El@ea42w z#UX;0;Vn62QSBJ5ED*)#;BMO43rQ@rNeGQnD&>-Sbz* zf}Rj9Aaq%U-QFo%tr{{tKgA?eCOn;Om@<(7mYoP_bTLnIJkJr*eu@0{HAOF98j;t! zUhzANGYjzPI%N3h5VUa5v6iIy*bg+xXtq=HprD1UweuuYH9!&?h&WFqVxn zfNHYKQ~`^fA=Q@W3|BJ>35~BI?(CJp+hzMa=jFQW`H>6~^D_|sg=MHQ=lgzBBM)`0%~yuF5kF8qqOMP6tJyJ$2()*>~3 zCusnHR0et1I!2C&-M1$f{#gmitxe8UeHHvsl~nyY^>#u{PyHgBU68l}VIPSSpQ#+l zD~>K9fQ`#Hj^a~0vL(b!cKEhdJ^mDz3BHpC)Juq?FQIUfLw3wr0{0w1>eC24RA?%q z3HKJ6mlJo&tHoM7x%TcPO(wO2xNB{vsiz@&bi=BA8@gWGIoqVghi-3wvCNozP){l= zJjVgIhx{#ECdF|t9t)WoyDm=Sh{xCkB2zl!s0mHO5}7Ojcy)3d0EF|5F>}gn{A+KU z<^8132>_28ecIX!hy?hIKaeeaJX%GUifbzZQ~8hU3!T>N_WVZWd)d)z`W zy~#XVA|eOlSYUvVfQQd)UcF0HHlj@&(R4~AA_l7qddCgGn-@)Az~jY#V|_N<#8ZzgKB>(hxD}R)yEu zEz_q71EFqlAoH1HDwCLa)o$z=kX}T^tPHNVhmHkk@NzMfL~CMvW3pP!``E5EtOfk- zEoIBZ@4fOumJGXCMCODJyYwP_K*&vSg9_X;NQ403QjSy?N5)d#kEl) zd4KAq2xsVR10GRPTow8_7Xyx^M3qANHn-i;2IzJtNy(O(m40q_+$RY9e80RO<#SiP z&A>f7GJjExl_$$WXMC6F8cbUN)X9EW{ zn*H5JE}I3`yem@N-UX)s#H@b^Mp)Isx5{Pxrwf|9nSA*Ts`fvhc0Uu~Oo*)r|=%-yjJNdPd5?+OyIYtImNzsR>7jHTk|Xy8i;8xp=9 zjLSJas&1E(Byl1v)e68WdXFm2Ms4(Y+2?tK^LWSSJV8P!WkisLT^nkm*+YoQb(>LK zo(Em~5%$UVv2ia$to@<4yvOb(Zc<)~_x+IlguHW(e5na#STKY7`?Q^D>E1wAItE0EXIlbs_;!T+5zgZ zYgg*?{Ip>_5XUsxF>BM&P5$-IDo>kZz>2F^9{4gX%>oFZP@&wv;Ido!RR-W>HvCK) z6+hKVx9?5gMIw>ooQ2mq4O^>U`Jw?^j9U#Xp)Zh_piryp3xqg>hQD3YN22~Id^WXg%rRFZkahE-s9|I zSCQD7e+nXyf6BhS+?(bX4p4t0yo+&jq4~enWjivZ4EiIFRg(VZ&K9ZmdH$^VX{|8Q zZS3+NaIxFA&1Dmi}1|HGb<1%|?05=3==3Ifr{wp+%yV-UlW(tzBo6XoL3tWZ$D8MiLk%L?Ul+MU=f)%JgmhLk4Bs-W-@??SmV4{g5wsocKJIzgad zBW&wRZ$K5=gTB3dvLz}$soBZ;`g&!g+-lJ^gkr7TtEJajn`*wdx>l z%+*#_p(Jr;Pkv;pxKl$zpoz+9|4Ce3QA*+3iJA`wb~8OobST#{N|Sy z^}O~kJ+3}o$iR{(Uc$v^Dn zdHBCnTGRcB=Vr35fn9^Ym*OTff6!&i^_+H2!+RPJAraFmL2U!44upHBvR2c#mpryh zUx8aFJJA$QQNEOGJB1tIw^S|XggdETw8ytae`?0F8)P#@Jassrr@>SWEKF1%LhzU) z6!fgrtjJ{Y%}hXpa-Q3(AlN@*qS+ z_@GDeApkeDQxPr*0L2e6zG>bXA_pH=|F1vIXAoHfhSSqh?Q-GS-A6|OSC7d#pNrOu zh5yj^Jn<18Y(%@q@$Kb*=e>gGFxlAl%o*BUBsL5bO}Js@$gbm+ED6Rrf|D&SRX2&! zX#G`CzR%hbV;M)F5Y+ba!xGo&-L{@b@Hi|13u30&T;X7`8n>0x7Js?OCx-4hjmJI@ z{g7v1P?}d7g`mnYbc&z3PxSi>9O-i7L!(N))nn^K{_v5j!a6p0FGN5m8XoY@v@R$LL zz7(wIN)qpr+3Oji`LOPr>8YSSJ1={qe8H zG8{0mVwMN3G-60txmaRImP1U9GABpTy`<1E5qs6<^)AJLtC?)#I?Fy}cjk>}`*xZr`HBfc zt{)*<*Q55jbcK294d;99zafuDG*$TW9sDN^TibWNNqSj9#CPpK3I2Yim}$&Qt1(ER zTsubPLH(=_zNa@tv|dTG_r4^!IxbEY5m;?tOG8V(HZybES$1u|7fS7ex=+1*E6{jd z-<};Oaw~lv5m$o22RC4|T&$vM?dnwn7~l(-&fjT(oo0NrU8?!xbQ@perCn`?4lv+? zE)?e4yQMtPEZ~*&Q?Vj|+o0oxyWyCwPEEp!B%XxT1LnIaHh-R3efOPuSkMM16L!`g z4YYDlw{&nm#c$yf&jb1Y z_VfH%?zPQgOGqlGt%PaqaG_c+#_FCj7K+{Be)-Y zlN8ZXeSWSN{<~0RgP6Z0L_IHh$q&QL^Rz2i?a3!mPIvXoG}!1ydZZYO&dRwv)7<59 zSa&DmpWT|I_$OlL$&d+xC~B;}X`-QqGj|_``o1b07MxSB@lK(m-6=V}Dzw8crI`K_7qeMfDZF^Qn5JZd{ zO649@puwou@~h45X0gU$qswUe7Q5ORbI-Nya+NiMX7EZ8`-7RLFG(M3dXh{c^B+JL z3fmn^QwI@kdqTbcPESe_iKW4}8Pix~&co@v?&cN17s`B^Ovf+AQBz9>Pw6i`rtFzG zR0}$B-@{$020z{vp_l(yjVep>;uyDo{Tdnu-R-KXU+WsQUZRJm#F}c zC?{47?L`&+#fVcsghDa;y?<0cv5#L_+g-C)DAAj$H_OeZt&+Ur$H3j9d9H4+uhEg7 zG$PQ=lv`7(!4RWeyz!r3?NOyzAJk;ak6t1NvFDpj#w&`9wM28?BFi_T(AGe9w6o zTi^xmV?U3B$-8%`$<)zvjnJ5KWeu}5|LThp$z0p(Dqgm4&LCb#%y`2$#d+8+zsf(; zt}i02yBnudGpnqW%w=7N{i8+58b|evWai>9VU{^=+G33VvU(;ntj=L`EUN4|Bt4KK z1_>i2q!50Y9k}{N<%#`X zD?TnYqf?^@x>@Ns%@AjMn^USlc!S!OL^D}ocrR^;5!#^VZrX%>Jen#Lq*kIa_PESp zcW}-z9eL_`y4Gq5s7N)>Pu&*nk2e(QdYr(p`J+e~BJ2$ha}^L881Lf}Y2kLdzd$v0 za6-h(P-pfMj&-n#wP$B&>_S!V4m#~8s3iqanT@fq~=+?O)`AzGgUG0Jnpmk|iYt5&9q@xke$$H9*;b=j~@9=5G z(+L_rqai5`H#T5_i>4heRLq4%t%egvf0@4&cUZE*mmXWQYv3(jdpXgB&apMRcf3@e zeSOG1p>5wT4wOt7rmkkvV|KZkL=g)$(3aF;8`=Wjy0MD=CeZOv{zSz3mmc<8*^yKs zfu?#>`ncNLnhN0uyu$wcbVeO`S-MogO`RW;rN^J6$<`o2ZMj>X^xvO<^jULQE?$@l zvejPLoyjNwrEyvoB>pvwqt0}|HN0GJ9|ELlEK7=;Ry&XHjX~!ecFhcNkYWjn4YL+2 zO63QD@DAV^!zt0iksbp-CDMbK*n69w&`@jkAlVjhKA`YOv0=GHlLIge(|-kL6-6C@ zN|pGwW=etk9|LDVfQwALQ;AU1%I~iL0`*xhu(+=_yXL#Dxd(w=4^PuW{(lvqXYp65 zT=rzZIl=0?cG|;dkwT;FyNw_c`O;hH=A_y=OGK?tP=7m}%}PzkT#25T%q=vu@*P6E zpo_g-KcN%n_3>~!C}COPl<_wTiI;=D{JhhDz!UM5KU=@upX;>|Kb$&eG=u)&Fln8E zn{;bDX6b>=|F7lKgR8~e6>LgM_+b7kweH8-^jw~ku$m-90z%m3{i(BUKGyQK4q5e0On zP`u+cF>r!yTWeQ*{{)2hez#vew`U&sko^3yJfRWx{9D=bdtwIS2NRW-9PuO@@A$NO zKfEg5R8z5W?z4yvz;NTV++`W+iDC4|a-voMM?SM>zeE4T`ZJPu^EKV85OI_v{kg6B z<7L+g0{b?(Fz`9U0kplm=a;h4T$yIExLyVNlXU>+-3?6UpV57PRQ+yrUAYOsL95cI zvi10);(fFwvlW~s!aq2y`7qHX#C=FH11FHV?!b>WI}GA%BoxZKZ!8m%n0BCZKtd|| zy)RYd;Y92{+KSAR6*7Yz+gcHbL%rD`X%0YD1++GD z0yjy(l*HiMHgLDQS+;*Yy4#g5uJfxV6%uglHS}K1vIB|spB@ER2p`^5pLI#=@;X}K zKT~Zy`gr~fd`m2war-r>NoR$MX;)v+*KeakU{L=u3^*tp*ymL$^4Gn>E{;3g0*DC8 z09NP6JXCRS%+0+R$qzDG^RhK00a|W<3UwR4VMepzac0NsbRK1T+(E1;P6;dnfzpa@g%qaO(~rg)c1Cbb4^% zg`SbKR~6w*NlCPB;%q5Q43p<+-p?8!{FgQFeZCoGbLzqJYA`+T+qej(&$-@2aV3$l zWinhcAtY*OKjVLv9LZ8jdFtr&hw*{yWHXKbMAkZsC*+yuYHqu00{smu!RowfBC##Z zzbXDKyDc@qLOA7{zTEA_o)>>xl8xz;$yz6stzT9VvmDo#LUE;ZTa&YFiO1YR%Zx)} ze+bvMv_u8gN8FWW2SiV91TS#oAB#`6mx-k$o}D;zqTfHwbwM^NxSuYBpBCRE1Hw(@ z=f5Ybs4Se#W6$oCJiV&_JKl8x9TDDJ2Iy2UCT$q9jT2R_&Z>&QK|wY=X`)T$?~3=k zQoUAJoEgJ+vF9CuAp2(@RM7r{uhtn0iiCFeePD&pz`rUh5)ofOsGC-AyD()Qvec~j z)JAcRKh&<{eYG#PpQsJiuKDc>oN?OxjbOcC@8?|x)PPqrCy`(w*yKq%f~$9#x~V-c zx=N!$YMY(^sZmGAuVVd}Vj)b;$`!Ts92XBolD`EnlV055B5s@_sqDLKK2RSRc@{bE zfvpT3-|q(5o-NcwMnLP_S50=F*bxFuT_(f4LdO6G?e>Z>osu(M*y*nD>XN``5Q(?g zLLI3*O)KAzVfTA9TZ+ELS@K&7iQ^I=G@|90@C3_;P`8g7PUnrbj17Akjmy~hug8V# zLMe4Du1ngM&+iimP| zy^vmA+H;){zHnRKk$|KL-9nRUo#C%N@_u?s2Uk=wiIafI&`E>PDoIP+<@45g)33xI zgFpCr%Z}4_wMq4<%YIAZi3x{LC$3Mf0D!4}q|O0Y>#e(1cbboW!aQ(wV?bQ-@->aZ z@wW1+%Q5|YsOCoJ;Vi9wYg`{i^v?SujHCf|98_zv-t?4%yH^7SZlBM;erBQP1G8bF z)yeE&K~CRW=)JR>CMn=0+AtK{VKyyuN3LJ7_qfj4raqa~yX^D3(OFN`MinmnH9LUG zkrJwsK^gOfCo=K3ES5rQMdPAw$VBd9Ri30}h-MIMc1yh@Ex%jrh(}0jD;SYNlT13< z{13+~tEx9(E^mViJ2@7*mx;VUTSaPVYj&Jdv}-~hZd}C+8e8A`!f%oX2R;9~n?!^N zHKy!6$Rnb>qtbvAC@8XsQ+wsqaIW{6j0lB2xtz_VqP5^remP0W*r%cED_KX|NUGN- zY^}jP_^QAcbT*a_Y-GDo;VPvpnUCVkIdtWi zQUp(~donD|Do+{Ci&dt0_d+|D_dp5nRAoOAL*-VEG$HZ&F;wgYaDGEgEe+U4sROi4 zA5PB&;60@yV3>~rZCmJnn;MRMUn$z?j?vg8oTJ%3Hr4)sj}s?{20f5``KhqX4pet5?N!{gqIDZ&(V5qq$O5&<;S$Fi_;Oj zMpE$gA$!eFI>^2!^8YdR)?rb;?bfh>ib$y_A*G^pBOp06C=Jpvbcb{g3KB|phaeyz z-Q67n4BZVwHw?@S-_39DXMcO|pIuD&ULN@?Ll@B7Zt>a4wjH^ zExrez69pMH{sQG~O@(x{ee+;q2{|^g{>R9!>!^Y+`~@UVQ7;j3z3Y4g7^naWfU(SP zSR40?fT#MDXMhLrx67I<%l4Z*t_UzH&XG+REi7r0QWQLX+jN9UaPSh6SFLQE_eUc%he1H66EllPVp{;ULYo?GXZ-=@U$Y>JjJ zHx)W99(b-C|A?@3ak&xPec2i_#041^$5h*SExOTDr`f*4b9>Aa8Yk00#If?E;DVe@ zcK$3n8i7-@&AL6$fRg;p94uOiN%jn;OvT&eS^m`=2eMgRKbFpW1Nl+5hReiQ`zOhc z&OD#c2fh4j*(*|@aLPV)aM8KRU;7nJy4c@7_r$3Enk{+Ezt@PuWV%U$*htmoJVpF# z7eUSE+mqC$JEw)=9mu~a7IwO}WB|NPb^cTqL-jNpHBV35F&O#oN_#Cc)cnQtzQ@48 zcaj?uw;#ng=k3|{(KgoIHXe<>MTa1X*TTd0I{b)+GtuF!M zDl8{T{+(ssa!Y6{Oi@T4(C)|m-91{0sIge|<98gDYq;2d^P{|+lOGidgY)t($pO{` zkiE|}&vr)f9v%F}rI0+=T zo2QBKMI*L0NIKp2#-sEz5d147yXOT<4)&BT486H5H@;5 ze6eR*b0AtVG)ZfFST)=u<&s21`|#wz150?EN7p%nD6q#7lE zWnKpXx%l0hl5Q~UQ+T&tIVVY}H|DSwGB3uVFWyH#wD{-vw<^!Ae^&DVy?md14VilIwB zt?w-e5^z56RYCcWmPdZZYg*Hfz+$U}jpd5M_ZiI^WuEa~Sx6|CM}=ZDG(RP!4f$-S zD`s!zj(r;h<$@~2lPJJ;U=4)8>R$xlsKj);5>%^RtSvcEtGO$WE|PcJ9L~nqy_Xna z)9(cR=zB^$1Wz)jP3YwUh0#Rc_wx{LX|&tq01uUvL;W?sclxta@R4CgajRYy1*iL} zNMbw5Rm9iICOMhsE}cCad$WFj!Uv5`5%41L({E36;7oF~Pk1S0#5`8Mps7kU2?0h0 zkU`{o(ScVosvb`gmfwV#0$pLqr}R`fP(hD}?5~}FCX_@(DP#xCR#!Go8LED z>Y#ns_SrWpJ7#Oz-%y2L6_uOPNnyFtezp*q_^iVGUG}NwFT15BKt>}m`{<`{J08>i^ny-o3BicAg~)dT^51 z+A^{Cu%Y;Gk*9x@ue!dle>ffFf&=Cx8$O`hX7DqOCy8$VVV%(`EtTnYd2pOi&;h^E z{o^vg(lP-agz`VG(cc31hWmCPfndI1?Gq}c%1PT%hOQN1pTk6n{?W00wHA>LC=dsHDGUy%Z?EWtqg`n=rVe9e#t8OINNp^F1~4r#k}KsG zG5-ASIb}{=j}04%StCLP@xg~SS95;*o|~hy2N4n9ETT_XJ-W`t(is-yx`vTSG%#5i zuY<>f{xFfYz>wbcKDm=Et!loSKPFp-F9WAabQDXD8MN)2&uOUx3ggO1yHSg6B|jA$oLi^)D}gj6B`;3vWZ)_f8tB zmUjDZ-@0@k@zf8o)4m2gxPS+6npVi<~w@x{)Hx{d-N@A)^{~;7Y{v@2}1NKx{*)F2y;|_Cg<_i z3=64VwqF0EEE!TANJy@3l^>0|vacXRZtbez-!^Uj`yF7B^m_{0hz&MhNnn}Ih)?ao z+By0AOl73oH1wElf@QKa-*>$?s`9WIm9KTWS$=4YDBn0k-y9PC?5MU`X`;w?1(JT0 zJ<=TENq|$XP*+QD-DmPHUuuxSvIto>Iv+HD9OMU6=6Bu}2@26spsKz;YuDpDCJ%}{CDU&5bWsKwUnS_ReScZ0 zW#2MHk)D09&;UDH>ByIzV*OmBKnYkE73~Gw**S&~cb>yx(kFfqYD^kqsLNYG7ri54 z+!OZV#}a?bcibmb-piue&E9;2zgt(2ItcUho4l0C(GQ$ccx>OWLyo%=wy_o~)U*oW zKJUSK>7JjEl5T(l@BKTyN8oXb?Q+6))$$g`rSHLf-JKV5f8vmTWgX>JEUz^{3+7cI zNCL8dMXrxZ-x`YFsmrf|A1!-vEu_1z_Gy;J9Y~iQ0ODpb^Hc|^Jv#s|coQBBZ;{+Q zKTeyiNPtLl+l&YEoL-KfykJ_7EeXIS>2~>~x7^@-wmk|^*VY9(CF$O`O)V%HuAx(H!C2n_?TPiUQm_S6coVd_k11r04Ltpk&8i zFChqIDxcHUl7aciC$vKG-zva!qdQzkx4AHi2BM4-6#l!+z_;N@o_3C?ST}#?EqJyp z4h(^M;~?IEb%Ma*Uk;xt|`U>t{<*x?SzAHF6fK{KTee1^F+KO zKlNY7vE=3|8)?EbM?I+76yETqxqW?Ir2)>?K|FFn2DDxs_rQQ%wspcjAdM9V5pe_v zK~AP0qh+JdPl9xi7Xg4OqaRFqb}$iBe^5c_vV41QsWb}?6BL8I~U zQ=sItaKtNGyWW>WZ;QVa=}c*1K5&lWf99!KYWGUMU8}(Gq4t{?CUTJoM9t9A8(;&( z`}ZQ};s)B%pzk!3m*Bzkm%eX`wiV~Kc$uDoxlI{kpCu$c;(n<4W-3di;l(m5!+PQJ z(sHF5Bt(^!bH(&qVWr?}w_}picoyVbYWsUG=ys#-uyszow(K%o#6RH;>b1OsHv6Fe zF~-K#jLZRfsCWz96_lgH%mP*(Y!o3DEU6C_>}kj12v8RyxbRSZcI-q`)=?Bz_?d}W z3G=&4o`3LWcUx|X{*TJ)Y4_DRNdcIpgS zRe4I)DhuRy$G&oe#Yyd!_~^OjInT%CK|vB6bREOB4LHtWiO+V1u88!@om z0+63+9?cM(FsZ(NDy1v})X{oK3-76mQj+CwEHk2wQ>yZR3tel;g8#z<%3{Gq879_fa z8K3J>f*{_Fbfm2x4qzpCv% zhSt)HLAP|bqNWQ*sLt@9+l8=Bag0BK@CVd-59lLZ>KDwQTt^%AevI92u^*b1YMewp zZLPD02D?Qhy{EsHF4@@7rq{jHzQ1973pZ{hO&6b9(7Pqkl<_?I-nNV($))~NL_j8$ zUgP&IttBr^;`rwMeft3@Hh|OOy1b1PI@R7Zer``)ptkPYNG;K$+BbsBu+}n~wp{lGppyb9QyU-@e?s zYgcx)A18fqm5XBN9QFHV@QU=&!+*YL=Hc}!=mgWTrB?2p2HG-m(MlJ7OMJr8GOX}n z!`&q)AIhU&#+`2WV-5N7O{(!ed=g#uW!LYNEf%~wU$pe(t38kV4lJE9<_)2OqDOzs zIdzg-|L~^^dH%w&Mh|j2WVu%}DB(_8-?y1>PxxY8v`EEt;kDDnaY^F77Yi ze0Jm&b;It}U9$^)j zLXxag<6hO-z4HFC!Rk-7re_Tm6_mS-BU~h5(-jKP8Xuv8r`Osp1bvMe6%9DM)ayOC zl}C=@1%B^7?Fy5!RYcN?3vdb@2L4dK>gY{EgC+Kk> z`98fl#d3)!>yNqWLBButCbWY{dd0x?39G2TX>6X^sTuyg^89oO)Niu4Lho3B*MJ@w5;o*7(>ij~6RF^EhW-s*qOS|C_<`ack>SHo-S(PQ!fH zrcYt{ZrF$bAj<=j*j&${>&2bKbq3#c^_p#l!(F!{XaHGC0u}ZC>fH@DUpKsZI9e|B zYU!0fp=S02tTqw$CwTY&uV1WVFuavdfyD7dk|hH%A=i#p-n0rs^XNuJ=21AJ4K6Wt({I__WGlp-bJkfdoAhQ6dr>QC|R;#Vx=euzhH( zFev1Ff``ncs$|HL<45dkI$_{WI$UGObGinKkx zfli>of9Omw9_BK#gZGZ}{$rWJU{X?G`+{4u#aP535{d?CGyUn_| zuKIIH*_!Q!(0Z7?XSQ&N6kiwS7@#H6gHxNXd}(NsJ)5@u^2cy5ijCj#kC*l}pqZfb zhjI!k0x5QGxlqVvMOv3S)EDB`rcOo*y>V+?+s|PP2maK59n(h-CpoanVZ@u%bI+|& z8O~Ana!GiH%++@9CH4JH<0Q_RP`uwLvn)EsJ*&y6fX8~H)iU^ ziEOfLy#AXd`Y&jC_8*>HV=vNUB^F>?vFU&m4p7hbQPU0qhZ zwOe?Ks^T!Wgm8FJ7&GpzfNm!0Q%LIV-wR3alnjGO&`L|~KU`O%IfBz>e(n7sx{Z45 z&Ga%fJLtS}RQl#ih|N~zp8>A1#FLC)FT4B+veP+-eyiT(u(s(Y(5o$UckABlclo^0 z!V_~EG}7T=O6F_t-C1>!_jpr@*+>QbB_7jh(H^YRA3i8^w%(ya*%1_~TEpT-Gq3X& zFIq|*kw?~yB44%{8)6+7lP??p)x=(&AV&M|jvDEmd7c94DtED14SAM| zAn5t)r0d6Y%Y?WQk@pbRCQ|~0<1xGq^=}1uts*dTu7T8}4N)IXf#+Y3DiU<9t{N!*8}wN_SEpRC)k+e&=)t_ZB99u}D@j_`-@*NGS;yH_I#z)Sh>0QREiJIziseaSOX+^ZckU z3?1gI!I#=IO&ee@pU9p869ORdEiJiv!L`9T^Qc==8`ngGy;@a~Pjb_SMP4<87;a92 ze8YbfmS&?Mj4(;w$*N3B@7eqPVfp+EKtIy$4Rd+<&%l+mrUUf`rU~LsyCrp|m9eMB z=9bXajUt3#gP=5v5%vsbZQzpp>+!HuWcQ%q;L|kU6MSfv8xWFKFR%g(*wR^Jx42yo z$tP%=e2@3qvXq5SS5C8V+2nxrqpUr4ck5Y?tu&Z@<2A1{FXP$%+f&(NNChBW3!Y7{ zTThxW|9v&@41XsJn=#KQa#A`L^zjosy~10qO?q?HY6s4{T_q{EY}<&2s>2cGI&V;G zN#2o-(msa`LpP7poq~i9M;OCSIJT!_|2+xUw^|^e%jv`1&VE&pv{Djh{k#Pt^ zpC!>x64-f2b8-IKWYWUffkeN!%*)7dcH}=F2lq}c3*#=G*BFao7 z4*L2LdS!XS#>`+1Nh!6av}+lCy(dH4f#o_s>Rp-$dtI9T+6$_0SfduMD_Q$Y9u;vO z9ul`6z<+5CtbM=44N~mxd1bHG25HeU^lVuFf;ShGp7PYMO@7VA(Cyvu&*QQ9{KL$n zJb3TG6RXOs495UD1`-KLu;|N=cuyJ*@=`|;*>i9jBM;+mu`gyoTom5up8|p8VXjh~ zxXen9Fb5XMi4Si+q;2$%DedFd7PPZqhK)VLVgqG_9qg!@u zR(X(V7qM^5n1aBGN-_k`mp5(v92*Brg zg{SLsu7*RjF;hM7IDl-}5GUY!%SI}88v(h>b{_jUl*PEW>X_plHM^^S>q!}obHE1a z3xWB1uYsIj-@CrbF`HJ##dV_sE|)+R?<_ex^9Fc#iu0I&$)J-*(&6F*k1n4}Ag%KH z@RZd6XgyT{x^^(inwmV3cYU+~R}gTXl%#-(^#JbOOt* z1Mj)H-w6~o((H!w@6c;io+oJ8Q5(D-qXQxGQ)!x~ufG#1$WS9ugqu)e0BHOUAqM<# z(l5Tm`Fb38!I{8_f=fMSr!ob3YD7%L`;3%NP{P~YAP?oq65txbp-W8^MoLppQbO6k z09hMQRHVk1ppiHDX4tJchQ##O?Ow&O0yT2^@Et4joMU0pNofi|B1e>cz{-fqT&aiw z?B^9C*52I}2m-7t-BV!Xsp46}+}xF=%(JHuoT1UQqh<*_(Q@})OpnRb$(dh-7cq-1 zPMd=t6Z#Xb*cOc)+HZRMPV|q(J)j01r%xKxQBXpZV!;@d(ZB-Pug+CyxesvvCOlBf zGk-yx+@#=2F)vL#Ui{-B1pU$VrhTiz2H5IVxE=`t#b(Sj9F#LPJkPk97cba4e%I3Y z)&~gn9Ofa>cUPVTc6edRCH#!LtN*k37%XtHlZRBCNgE{ue`YTtE%})!5k@0Dy;>_8 z97$;yW*lBpdYmn_UGeQfGS(l%HKokmS%@0XEn$&2yB8&@?fqAs7oIK~$jmP43)LQgE<2Z`i85BcT2_AF| zJ!#h<>NZj@C&;04X@!VA-?}!xS0&|shSndyFZ2dzAB_G)xRD8uE54(#+?J-1`y>#Y zyx3{Mk?hb*&iaSVWU8WtC-uPOVW7 ztX3(VZ=RZcZ>GW0yZ5m#Y9c2#NVObCL52RLI^iWIA4AHs`t&XD8il`kc!LXH?5<0w z(WM0k+$A0^=Y|p!GtZ9X?aBMH7j&T>f%aQK2^HDnSm;5NLuX0-HbX1yJo?}g`+}Ie=oG9?W zPwzkI;B|as?{^R)?7Q*9q*@y<6$5i3+xu_KBs!#e27dk6RFI^OAe}vF)jlhdI#FQT zk>RRPK1e_lRijI(e1<%Jeot4gp|{2+&Qq>vXqyFb_38gkalmsTuXHCxKM^AxytyFeNJ<8R!x1w3bwWT4I;gE<~C_$ z5|ZrZNAqjqoUu%Y^J?_@g8c5u?*z;u&+>a`y#(Ut6J`|ga6{f8)r;Qq^Kc606||=* zyCs=_;d;AhZ+GYkySCNh62mJxg^Iq&4tFdivox-*Nt~gBrsZngCo8K+dSDy3O&_hl^)UnGh|+eM$?OD;h;uHwQARrp$uuQ#f<) zbMKZe7mLQ1V}k5=HA3;>k$f63k#zJd_Qs-b8Fe_2BF~`#JDc#M^Lip!u3NDP|Joeo z5ZP#cR)c&!dg~oCSJOOnpx?R5=CtU3l7BTrh`TuSq z{#!%A-P;Om-|KmFe0QlvbltxW+qC`N5L8;y=@@;BM4UQJjmgIEgzEr0Nwo#81m=8K zHNNdk|8f>$gESg})KY-KdQSMFX3;FA@_h1q9ns$!5Fo%NmjH%%fHiWMPCH3zsz`K3 zuR^&L6gMzS^7AF(*SjU=Zc>9OWIsdFbo7zY2_|!C!~|?eD_;+ahk*Tck)@l~a$w*> zV`=Z-g@fjXnL6AI*;rc_s4*P3$A?eMw*#N|p5xpn*SS?zAuTfOJM=V6Rtq>f!a%pD zTh9*q%!O{W;C&~EO*5g83Lt(MdWP+Lg$)PtI-L)Tbz*3T&Bp=5(PUy)-Nfp+0L3}m z8lPEXs8E4k!Dg>{y^X+LDHh=iw%Sas4{EM|W5Y0y@boJ!l=IU^k4>=-U-0(7*`Nb$ zFzi(53gSH=J}h71TE94m+G~(-wbmu#8v`5skBhJMj5N{MDbMzC1FLtN`yiWLtE2+I zD>I#5NPyMGgKexw;lc{QDw^q!;!e^Yyn9gHz^9{Xc4&BJ^# zCW{}+Mm$4AY%43po-b}}zL)Hfm|W59-86Mx#yT0|ar<&Y`N2B&J8fJYqr$o3`*@t2 zhGASIarq@9k3~LP{?#EM=Z&j_=Tz+E?fpsnLdO^U*hNQNfmVawub)f8%}$~G7510e zuQ-%-D?gC(xVQkzX3EkFbZ+$SCcpOb_If)#ekoCjb&4^~SDGe{=waJhz?PyXNV*%E z<0mREN3y!3ydQ(Fbw3kwhI3ju@Y>qTpU^^GIb=s%w#MVvNXNQTN z{*)egMV`NfVkDRdFCXvh0eRSrxM#_wbDE_mn%+I$zixO}{@c4?5P#Dl>TqC#@=GfQ zyi!$h;AEsN=EAc1H9pUjo|_(;r+2rcq{ZPm_4`AB>h-7YbDo>J~? z<$+L^+LRzz82QD&CHw@_$uujsanuk42}{MCkXt>7A-k&x-;SEJTD1>mvnD<$wHI>0 zx0U?oZ=_UhorHE?tE65W*&xa>L=hfVoa%A8mTa?Kc)5a0V!IaJ(BumPJmeQ7s*-csQxwWbBtfD!){afa9V7Oxu z^x0$0sEzo!53W1k(d;B^{5bZ*|3QrYC4Xp=$8rNMXNin7PV?TQ=UZ-BEG@-3lj+}c zF>_?7H{F-U-g$DMiv`+&u8rxDn;Wh+&c@TfR1BVeyX{ez-JGT!X-AZoFSll~fQ8=u z#(0jXsb~Jq@>M15fy?b+0)nYPGR-#yEEijXyyM9CYmi*wMk`CxBw%r*wabNy3Ak=| zN?a#&0Idh2zahPVVFxK67%U-}IGIX}uZpjpE=o*B9^~%CYgV~6pobd3Ekgk&NgTHX zuFo`p5M8%C{eiESs@Pi8T$JFiV3B7^aEl#_DekC2%)vC~Som{;xVn1zsmxTwAE-zk zq{K_<&|A|zKd!uC10{V;D+ZN!nu=pmIwMKUa2g{F31{|BT2#aZIP+#~Ztq`ty1yQu za1LSi(Uc$u69k}+A)r7qv6BK6AMfuV#!<6CZ*($Y-z*}#VfeIs8UHEvjZpRpB8)3Q zQW#=JE4~t z@HVKPC7{!zcXWU%`O#tf+WM5cOs+Y#<>JQjzzjd;4OIG{b2o*zEIwH=EXcLrumsVj zOMe~IvV0W9&8A&Re@qUtbO*LE=#Y3-z$D0GFN;Oc{;u6a=**P5?|#L)DA7%abd$vi zDzw(5t?C?8!Cj{fgDfAbs;c6EGH$1!iURLgr`tuYf{FhPiGEjd>_}Vh-;}fHnBh7C z6kx7xj69Em+x&4R0SHKiIL%_AzgY6U1yV)ne$xrTKh}Q<;ZP7xBv|)3L7n6-Q#I7-(?L_IB;OP%(Hu1f7KiPb{2C#!-p<~sf zsrZ|p3$Us84(Mh4gVyViGVdXLbjBd|HxZhhpW^Q*^Z)Ao+)YR$)2i7+QimdR_~o*T zNt&D`(gawv-6TLyHZJ+ynBKGoZ692`Z|e=+=9$dMw0y zKDS1V<0&;rGJOHYpArdsD4qCW@zwon%2!_(c9_gtv^Ol85#ZUGAsAei4OH9ZDMLEgTZew7<`vZN0(}(n#VQ>|@(ta5u{NC{`JAusE z$M17f`OZyoqjbUJUG=A?ZTE4%AByc2l`KH(|L~q<4*h8OG2nv1!d13%&i&OB9CG+@ zNa*nLo8b%#?r%!dSGyV!wlhpdX&u4yt;V2ogA1UF%#Md(ONtfHfdF(zW%AAE0oOyM z0LJ?ijsmui3HOyTY(f(Z(Y-oSud~R4@=^!F)$zBVq4<|0 zj{li=9QU9GbVARrF3a zJxTA?Cim2ML&3bulwKV*_7XC}zTZ4#&CRE7BVMP_!AGp2n$mUt7gWw=+K}0|?6*by zl7n=~{-%!2Xd&Rn4`m_ts#+r?(8Z$M*W?n4uznTy(1cnUfj@rMKQB}Jx#2959_5?d!Z19oew$Wts&Ci*)Ux|nMPCuR>V_@EjFBBWkkeA zIKINu)o=m*5ZEoQP}zlz;?=yFdZ3t`7g)HXbQ?{|IR0^~HU5^?o<(to>$dyn=XrkL z)%Ii>RK0rJDu0G4c6bHIjh%i@q#J6;H;6LxiMJNszxIpUt%5``nbaJMXZ&%&(;H@O zJmp`t=;1i8LJV%!Q3+TyUi++_9|;@z)GaPvYnuDNx86SH*M#2R&bMONziHB2`jB+# zbkT>~qQ;^lMOmM)qUzPY)MYqM$ zbwGq!up0s0W=+hS5;kG5BR&h7)KcYbiGES@(oy9gUSEu9>8yac<;r03O38}&^?T)x zWA9moywq(Ohi%QNDjz9W#$%d8FY5_>Js1HyF;Su z0M$w7x_5Sq8NdT-&<(Qh_Fg5rRJfzh3@3y-v4?>ttq9?0Ds#Pi{bsfUcS{tR)c^LL z7{l-3R`v&IsH(=W%`^7=GGm^;hC6_KnB%DH{wEmuKg?{85>1zbNvNW(a?I&hfgWb4 zYB{7|z5gx$0f9>f5^@8eAt(yQ_u+h86&9k8G@>lucb&5wq+`~O)l2p0PC_JN57>db z#k+PlF1Ksu9c6P;^1sd=Au!zJXDoXtvGojVlFALAY6Gix@NxmIrNe8t>0kQKtGy8? z!X(y`HMGz*?T_rKz~^k$HeQCJk5z;Ze{VJTfu5;OV-FR)5(ZH&I5}3prB0I6xf&!DuyCm93@B&E%^Y}Yz8Yy1 zb#5F@fzifS%LZTm6T#Q3kqDxv1(pXI%y94&gMm$M7iBBU&s&?7afTw0c}b;TC^ zpJC{LB7&El-E*xbH&hTMtr_~K1I-5HN9LFDIPe1H7oT z(O)KER@{h}n-Puj->s8COp!01Xqj|mSp6m^UM^x$T?#SMg);~guz9SgnMsfD$khCn zY*zXVik6-yV%L!6%Vf4gG_GScF?Gm1tY&*oQ#7hN{AcBT7F8SeES^%w%}DCQ4gLG% z?kC*d)g;PgKnvL<)7+WC;~Sz}vwXx{ANgH%cpGWie*En2qQ-s5+I+R@3`EuEN`?@J{dEI! zTM$^5GFU=CY-{1?Z9&HIy;X-bR5v;nkrJfgC7>-{hbv6>ft6WOR%8UWFcymWYS7J_t zi-R|iNR$IOE9i*7j!0-in!>%7Q2H-CBZMwxfSq8)94|qflt*l*HS?c7Ro96VmUz<_ z#a^23#n05V?jLu`kH7p61g*sNwF?S3G%1kx4tG}YCT55D@GhFfIQN{)!J3+}oQ2-} zHZX8}XtrBZzAH(4%Z$;lIf1bdVF<*iYR9hq@~=NO79RiHI2w@^k(a@vU4szMkn*=5 zDhWt7pK7skW`4LMBTi96A^N>of}5jiTL@cv00*lvuaoLFJqy#%g5nb2bgspLes-*c z;C&ipJxwPU9U1wp>-}4^)olnI90eH+iP#?C4syuYoC)&CGZ)EdqUR}=_TEr2o&50F zFdTw|{h58n>IAYg#60)IqNg}dFq9Z8`^f+%$z-z3ubR&JVJld0amkJ(`Y#rCoQ<%& z-n0ijxfx%+e9lxb-$XgJ5UGIicdl~-{lFlN$;VqO%8f zFSmsgb3;Eb<`VYo@t8!Ulig zWoS1yhFVGHdG>ROpZJXucSLm7S>=ZH;{I?DM5MmvS4^frs<>9B%0hl)tzh2_Ny8ND zL@6xy!(+WhcPp(n;!f^GlgujHDH&xeP?uEwk@F!j)R|Q)Kh6A}d9R-+i-4g!isbs2 zpz#^MZDXTKItM=}*`N`qQ>|-1zGb&SoL^qP-UrU6lCmSfpPjQ#`;BUuPb^*6Sy)*e zi3g6s8R#-petL$26*8PI_$W~y9yE913k2h%8aImU$+nEbE{xk=xb_>RJX0uTFD&Wu zD-u>0Bl&lIS8KAV0a4OXcScdoqBeRn zyv)q4hwz#7vO}&h!yrm2<)DbJex+)K z*MQ&*{-#Tbubvv4RV|>jEOf{zodS}a#6Elp2t<~)W+I<`_@azvZK7zY4xa)#xdr4w zQw<`zv8ZN-_E5c|9%Aeba7t%fU)m7o2f;0;4J|Pj3-;hNx3;I`ww21)=U`v8EyT}& z3R7~oTYZm-xEYF&dO#C2#k_Ve1hRA-UZYW8{bklNPmNK~KZ=~#Ug$hu@neZ^$1Y41 zdn#n00Ap9=!;1O2S5Ndi*)g5PllbqK^m{xPCmM}{O>lX8ZR{jLesKf0B7_cW7ya7MmUsd|hJwMD78tnHr&HZc(WK|5wIY z-WC0=fL(-|Ha5W`8~LJ|IY^W2^Fd|a7q+xjvMGP*(p@nVp(yb`o6j^(o(Tk|Jx`+A z7a)66%_H4UHe-vbq_vNo8Nl;sa@~F5%g%a$8$Fwc)id+GZUaWWiGw#RCvBe z(S6!`-YMo8NfJ!UjEZG>EpOAya!y&fno>z`{@tl?<})pCa-XTZs{Zqhs_1;`ACBA~ zF-SkIQ^Ml&OCr53U!#!6&T>Ehd^=Ejvhi^L50fgG2Do#M=6CXFLi+6_omc8%v@+?l zoaa9wIWYj8V*HK-nV(+%FrJ=EbfB6~K9;LI^KY;}0Jz*K{+V{?8He-HQaW@#ZJIDr z-lp<8&^oUIh0+T^1y7k#>PkE8XiG(3ZT{0xPY#lsA6H*JfI+t9087p9Pi`1q+pm$U zD`iW8uJepc0(*#{oc#R!zwJS=vJUlJ8iId2k-~ z??>1 zEL+Bp24&oU;QrLerth^DSE!TMP@%UA?j86z0(H!>X?mN3NijVJ7^IHrzX9{54R~S( zMGS#&+lmzd=+I}$3x-urzuWwRX$+WzF!8$0J4j#mYc#9CufP8@ommZ#-nKKIUXf~v ztYAmBUHU4?>~4OMPw$!Ny8@;hvJGsDdU{_IBG7PYBKM~AcpX?m^I6V>1En#5O)`VN z0UP$L`!!1t1liB7&(f4Gv1kL0Lj3i*pst*K*OdSg^$@dB&;h!O^?Ql;22(|$ThonR zz2;?c!-1T@L9Owu-OauLw8Lf(yY~`!B%WxB7q|u)=uq=*Maz(`5+9EQ9_!t!ox+lM zwl%?qejEYol{}jWlWA} zS1;Og%kV^Qm6atGv&l?c?5lAm_Z7LC`+Ak1sVvI43H= z5_<5LcG{{sJeE$XWO8r8JcQSRyZgg)x-jeyu5}_qu9!)#p8}^-Y=pVVwm&aqCWS?s ze&`+{=uk_4$jRK(7KCmsK_~G=vt9pc)c%8WD)>rE-q~zhaKn#5zz_RO9@jQF0v0v= z=JS=YMKL)bOU$X>j0nvZ{JI|J3QQ}T2brS3?bCNom$yV0J=)h0+Q4~Q)n3DcFWz?6 zO&})+vVE&aq3F>~UuW<)B1k6&pTSG=A30Gv`w=^_H?i$RN7Z04k>UpqmKK!j&ld{v z^6$Krl&iUhw;>`!=ocs7_5r6YIc0|ypG&n)wrBm5@le4E{b`pShP?RA>j2ywqltnb zHJcj-+w1T=>!mGY+WL!d9b4+XiGdr}DNO03MD0u}aMuR3tn zp@%X-0fag$APE{=OmtjqrgKh}( zk*i$H#j_p>dSgVyECs|i3vP!^aBJ|5CpRSZs3HT!Y}lqfv)NzF1+YAq1Ll~wuRIK% zp_O!K!LxxBBc&tvgwLE7jaogn(o=?kWqh%U1A@CUoEGX!D=;3r^$fWzd*C|fQ#0W} zes?krz5=+${S|6|2_mTHyWm0@;z4dd-*5z%m^PrFLYanT$$uEHD4-iAIJJc*skK(bw(kKh3YAG&5Xqvxd6^i3L)!km{^#|RT`3g9Ec2B-er&HDgViWpjDt>dGIjuup5|1hb|a`}R~Dw_+Px zi)S~U&pWI6VUd0)CrYLgbKa>&AAiz;rg_4Lq%Vli#{G{80W9^M0DwumrCjU|`*;P- z9%RQqK9O+hkD)<)Uc^N+YB`eU`pW%c{_7OI7N~E8O)R6>$d=v_>8_>yHxplS!@>y692#=+NR3`3fxJcqxIs%Ou$yxyC8(=7g zMyIVJ^v{m!6bJN~uV9e=-mb$r)+{0v%0g{f?YfH0EXnFZHJ!opd42YDkZVHtKkaxI zs_-IKSr&5eL#cN?Y|8KkRl{~T0yJo?#v$KIe9o=GPkl zZoFNXbBW(;56JixX#cJYs&sRM(V|Juvp^AK^w-wMtEZ^hz09C6BJS>2iTsZl^Z)*i z-RYrvaU~lD`N>yFl`B0iV$w9v9ZNX!6snjg0V)R6rb|GEk%tD*_!0~YRL2^}vw_pY z(buDJKvm8%k+#NV+BPPNO&NPm0(KsqzN#5WC_}A*kj9=}OyH?7`FzxdRY8=g@mg0Im;?j1$nt?p-@XAH=|c zj#y_FSPL&8!KDMDTBm_<(*?aQ+Le|{vg`Khv0On`BCWJj&2ByJFGI^IM*|n7z6_Ku zwHLydbUCusPL~xijNTp97OU&CELYZP8Jr|Gp>Y4@J2sqjmWE>+0>D#s~GFx z92It*_7qG*{Nesb-&@sjZ&B7H;rDwle?FW;jsbgcwJT=8)OqqZt&m*eo0grQGo6X1 zdokfRn^c!vW1#eySh`E`Ll)otr0K#b7SV?kXZd{adXpsi|7ZvCCR;NP+r_XWK_J8s)KL!$x6l zQ3C6FOZC?whN##nyy~6&H$Xfpvq(@Fn?dqs)2J3*1!;7C230vEJWEjAq;1De5Y+Ub zLg|g_uBcfbYrpj~cmp-rkEU4j;N3)!nGi!c)8mpoXTdo4MDh&*Rzfo2%={KnVt+nr6e+o;W4!r}Y zmK8%hvH&X6@RSjLqDx{Mz9+-&i{89`y$MK1*C@(SVNrE71XMM6jcaL#GQgNG?b^6a zJt$h~|3J6?x4oHN7OZ)XmGF(4k{WK|^v84B{|{?#9TjJrrwIp7f`t&=13>~6+%*Ju zcXxL!EV#S7ySux)y9d|cF8icsroVT4XSQd0zrWy6RaBi*_x;mL(3j1CcWUZ5m|M1( z#gkq_-JC}!NPuo%byz<5rm%4RKDeg>XFkd3E(FTny!nKwYC+4}4#;77$$F7*&^Zul zZ(H_On~pFZEF154d#Lr7t-2AXXDnomPyKACN3+_2t%n`{L`1qE@2gOn;7l-#4NLq6 z-ji0Qz@Oa$u<$bjC|bsX%0@oDDvCh=x4>U`QUaV}3@W7vhc)L+stx7Dvc_E%x4gRN z5jpqC;4m>b?jvP3-1OwvLBSWjyt28a24K*Z>-e(EUj0h#3aIpHety_DzBkRV=OS}j zG3lI3S}SEn{%toG&+Wjo=I#a_2V>c=Ps^_cih=^OK!uV#Du%*@IN>NOh_6)}4 zbuJ1(#iA?-ZVPHCa!B`8(M1}3%igpTGCFcOhnsOQa4POkAqH6ss|)%pEp!3BPPc;j;5(h8sdX;AE&bcr?rBG4Y)h&MOhQR|ff>R| zmNW+JEL81|P2&I10#K}AKooU`zB%7TIm8)otFw%VOL4a5+zCla$q%d{MDpo@!-Uc^@$!=e&JT;8KdySumwfNoR?0k#&gB&bZ6y*UKAudTP=D9P( zrG4%H2tnM5dOd+DiRiIy{^2@glfuZbpz9Fgn>53QNtS-{eKsa0LPFm3`)a1NXCiZcc1ERIT)xGL;GB6ZCH_8h1v& zS_gQ++2v3TvF#mKPgCTlEU~)+@V2oBxEe1ZFp1%JdTHb%PT*CVw0wD zFyG@Mx^pH?GP1njC=snLeWrm8`de82bB|CFHaKC}S#;__E%PgG^Qop?=66oGv@~QM zk1Y~1af=Ho^XQQ9D6!>DyB5jMo}xoEd0B#^;y@wKsNqHu$@k7GMj#<6rJ%gfn=I&xG>l7bd8Z~BQF{P8tbB#V& z2MmOER1J^l%fKQk=1*gL^`?CK&%kxSx_6Z+w_71xSKN0H%1ir=oCu;oU_H<&gs4%& zW*-Uyy(FQYud?3T;x)r0jLk-EzFmJ;O-r6(!J?#QyWPdsCq`aTnt{XU$Aa??)+3<^hPsE?SU7f1*!ed!4& zyc}AvYnBw9*D!xz!PUaPs==*!q6?jBCd=ENXfF%yTCjc>6j}#qo!~!MNuMv6G9%HB z_!;vTR*_^&2bKzs_>ubcw$(GbCmY12YA9{yNt})L66Xx+z$FcSWcXOLzirZRW^kC^ zpmd*6dv=~?SMk5z`@{cLpu(%d@2548Ol5%4m$0#TR3i&-=Fi&Jl{se!`2 zj|Yi>w-$@R8+luj`B3@GG;>wj2gIo|MgQU9jd#P>OIGK~jk$lYfb(bCC@IJX^_yY1 z-vo;CIf&@g1mFdD{bnqDaYMqfGE=RtbGIl=iKq%fsY1X2NiYH9Jpk&XvSjI@F+UBn zAQiw83o>1S(q1o76!h$BtfU{51b*kVL>uw(Q zNqzY=t#0M!hw_I^DWv4p*6e$nLF(U%)&&l+ROgr#yeRJze{Z4Db#`cNR1Up)!OLOh z5dqdKhE3a1qEi|!Ctuht2AP9b+3cxcMwr8x*hAf!Wbj3Jk`4 z_*MTmuJ=Fo&VN0m|Na;`7R$jN*$%(z1oxkTGyxTucUcMDJQgvy(fz8MAhxL1-Sx$J zFP~WRu8UzFHkKFowtcEUj)ff3^#YXJ)Aek0g~q!ppLLhl(~b2p9$ zEqFW>L6$KisFAmvphdo6!RJEa5Cx2&Tn{H^)NtZduv|tMQ~z#(l~mEDkefWqng<@T zGddE7<(p?iIr$UKabL_2u~2w#*e^}@khCL8*$xCx=x~B{bZ4SNK$Eyv&FAC+W#%Ni zDJv!+W{d%)OTq#?_gDhLnTNMYc9>snoJoR08zU9j6?|lpytD7kuEfjnjn~AfZDf(5 z2AYfn8^0q6K0_6l9Q9)|Cu2q?@0u$g77xyZf1l&$j!}f8o$JTp!7uPg(eTrzdhSr$ zfn>y;sYqsG+oO}|uls<{xcfn5!XO7m5x@i0K)T{a3HW@pPT4s?)9a>5Ym7MsO@B?X zE9QV?OwDSKOFm@GVM#{H8rwy-u^x=P7@2f62^Di?+qYMhE)YvXQ#u!DRT&uGE{N0N z4%w$w07tks!nyb{gcu|`fN;l)d+gds`S18xO*GH-8BGcmVy5!wPWm#yR?OJlaN)nk z)s`~C@a{9xMbJ%$ruitT0Q&f~uctE5*o^^^!9{$D2VH(Nz1?|9FFF(zU8%GXR`cxL zdVr@=Kp}E8BO1w5$t^;USLyZ3Cqd7D(n9{F9`5W2!EAUqES`RSzIhd=R4gm$)2&o+ z>6`=LqLEzJgOa)W!*TL;rm9K+Vd5d)<9Xh0eAQ7g6R>MaW?FW=1ggs)$eb}R&+9Lo zsrGZqu_q6tBR9_PnhHA~6x3!=|841W7C_f=i{3WRku}J7){hHyEunf+3aX&=VSrj! z7I2J-!21eKo7%X*@>$h}?_{h$*v85*F|NI(J0dJnf=OIRBMHQvlRv^o7yZPxikn^< z37_ZiaTQ)IJAW&qprN1JH4`P7__o~rOIlV1;mf4=yUkJry#h?M%?-I16Vr(>Gcyz= z^X3;U!Brij;dWgw4vv-+!#-Kkdyblc%F?=h8H9JeUhuwGi*jV$AowK0C}viL|$WUvQ-37|P*+ zn$5gm}m#G z|C5?JGv`w+0ri%iUv{b?H)Im8H8g&y_yC#6wRMm(6X&Y6VS$QYW%?wM-uGxN`_2H( z3*&btya+!WW8i43zblwrea)qU{+^7>2uf;(yND^bJ;+zb*g1^sL2-GTOvZn+&nh#Q zv(tMgqai0hfZf0t(%nz!mxY*p9no$rBv~^Y=G?)99=98`581v1EqESx|A}|T;>~LE zRgk*%vwRgS`fws46f`W<5f+rIT}Fv=wPCKT1S=!3jJgFF1UTc%Ie74PDxN#(IlZST{) z@mLD$;Z>T;sc`+8jcC);1?ALvKS6rM^c?Y|MZ=5V)x5_u^8wJiivTnx%_Wm!(B+uw z0wB4%Y#}jmo5FS&H(gC zV(7odI{Lh(;?7bvF1?vyDL1K(d!t-sK}*>jEPc{Fg%Hhap4EtFPc~iuG*xn9=d;4x z*b-R%@S=PNwBoZ=fSEW_Vv&S7cbJeP$S%^_@nqh3EX2l_is!4bIyb12?c|4jHTjLK z2K~STY=k}SG%bwSbczP0p1Nthh5%MU^H4zI72&;<{B=Oy+T#g^EG3SD720>fO9Z@}#!D&m+dPxtY z^}oQf`b6Q9J{HXj&`vXW=g%p>HDm5yTxR7JIS*~ZeDFCDjw_yTl175iZaKkGCi+?M zc-0oMPdeb(V?Rbs56@PhH_jhrTBf=!8|z%X5Z7j2ca?3rni~GtRy%@jHb~#2y4DyT z^xrDfI)BkMWdn{&8CM+4)>}sr*XQ}^*QCBM~S!dB)b)F z>9u`mSOvn**R`*gka^P%Y7N0j04g`zQKQ%H@ZIvi|1UudC}7Q6Nov<^KQBgEX|A`1 zyA%tU_PT5^*skR5kc1FSBgnCvk4AYMYlYQ(b9&=s%!f*3PbR;dVvl1f+lT{)YiTqc z&8o~QXkA|?@WYHRFFhnnmR?YDJo9`Q&!Wg3Z=cnAI6A9qin`fal%YF`cnrxOR$RJy zC%5N#{kTeqp1{<)DSE>`=7Anq9AHioH`_YGzSC71T__}5EEe8uUo7f@ogV#A$6Le4 z=1`j^rNO*aslp&+OA(@h_6#;JL;mgPwhK`?i5mclJp9f;W|xiCAj|IE@-6AnI}o)$ zfxarmFjrJBSZ2N#3~$SBhSpPMJb#$CghDGNSl_nmepo0gc)MTv#&&MnyqkoWaw4)S z+d+gEh9D_p-&_fvHRU-5uENUF-|B1VZM*P~a`m=>X|c#iyC>}3@~;uT^^-^agB?Up z6Qn}UD&*d?Z5WHXL=RMh*=v$XvTj6`?cXo?Utk>4l`_dJ^|W`x1*wD0b7Z`B%>Lcclih@KMw;v5 zY_AfJ+$4|SjYX1p$ZqZJ?5W0?cId@nrhb{Lq}8i|hR92Tlorhyrr}SV2o!=^gMe$%vs@z)CHbMR#c%`V_NeE<3)NJ zemVx)ETY)&4y@QJC{Dar@!)>EU>Pb5b8k6GA%-Jp87v4#wg^OPvr#-lWEbgUN7Kz$jlD_}g9j5oV0OtL7(~5ar!PYq?y$c6ZK1TlE3kADQe29%R=4AQPy{K(svZr zz)Xaod;-wefISG~kU7ngA=(6Y1y}8sM-~!9Qg?U34db|9ly{Jod!b1LS@=#o}k-d@@`tu8Oybe5ey3{$B2tEQ;|~*{ zPHO)!1Mj^3ap=Rg>Rbns2xAbCmUG|ixQ>CJ39P{kUaSVCynLoX%%v7K-`6N&O6M71PX0*4WyNh}V}3rbFK>72|#rIslO z1;^r_!V3TXo&Q&7MN0sIf!+KdM^ECkPIx#))hs~KmMqxVe|)-`9m(&B9*NXO^+?c86<3GsJHc;_78m;` z97+Xa!_O|19GA=r5yVIP)WPhTF~X*9S^NAK!w@lKJ!29o&&E3?&TTdgbJr%ppGc-f zsON@)L(p6Eb~za5cX-^!l$_O-&GxJ-#$I@x|el#Vv%)vUz*{S6DRpU6N z)3pe9WB@_WhctYBJHNV{N&NV(reyojB2{Y5P=eAJH?&cK)oAs#1?kwt6Q?;FR{HLT zg?nQldpv(3SX9l|x+;(VF-7-=3j11$=w1gF&-o|!1rtRTPwjZ);P>D^zeiCw<*c}! zg0FcYoN)v70%59t9(*om7MJ=gb2H6*JIy%PB7@@&Yj=gAS8|We(PEI zMTu97rs9Q$&=Ch;(Pn(>yn!j13r+R*bSVU*?f?B7C&Wzf@dW3C#Bu~|x1mL|9N*iK zDKF!iCC3zA($7lLXQ6C@R1+ZBX)jfpd&4utVJu66Ptyj|nNF~fXhK(TS*4CycxX)V z<2Dgp*@g?K!U@dcrU|0a zHBk)4$7-?8J^_)Ngmy{uOmXln8`Mh)lL5z1x#+h;UMwWksM#TfebT@pS0Jv0#>777 zEn*b&pFOU%Wk)4A0&3`2nX|izVO&4DkcQufLX%6VAyh)K4od&x2HO3fP(Zgv?(a(+v=8agO-h-1tE0sKfK>KLRjlYA_Nx6ywMX znc&FS&H>*zmHVQM3(%d#m_#KzervL_Wd6fLRr1wN%$Z8X>eOsX$9D}}vCIBjZ0COY zEBU#?;KyNqY4t&I=2;k~`O5RDA-f8R;&OE!Cc}D7%uq$qm|=tfD#H0;gxZWv$c56) zm^cg064SRJd4hgOzQUUrq6~3V!}Gq1NxBw$clA7XDsX3<-?kX!iaC;^KT#{^fEP!n zf~PB2h1HNZxof8`lB9A>(eLk}Ardu6Q_=PqX{!m(&kLKj{~jl}!V}abA=YLoN)*Ra z8}`F(ZW~!g$UZaPZ1 z+LK$F{Z6px#gj@L;}Xz(eSGI1UC0W79>?;^0=qb?z@o#0QMm232Tg)Ra3O=$Vaug{ zSu4{AziDOFSmc4RYz9=YYb8>P+r)zMS!`7WtM0-O5Anf>K)@E!!cYLQM0Gr7AWX;X zn#rbKgRxwK68=ZYFO#e$-?P;PEcOV1n5e7Hqfm@0_sbp|y!PPi32kwR z8uy!;x&U;GHuNy7y(ys|Iytj=#>Yka13l$l=eYnY)P_1p20jyS2lDZ~YSR=kger4uk+h8O*65|!=F4|zOqvia>VG_M_MHZzms1xFL zX0T0~P;FD={ja;_Q-9#Rw{5r2R|oB{k6@cdOakZa$ODh3aPArHeuCH6sr2W2%^Y9$ zlbE)LS?c1`w#QRZK&NSVsvDVGY(D4;+4aO!GkNXu)Uog-EBKoTfO&k>?*eoSb5ncP z1-Tz0YXCGyKH%-0?~e~AUv<44Juu{ECvv-xO|NT8Nn`8udvkg`eVm~K6@nGxlLlp#)a%7k|FF?C8O$E zxoY#No?SWBU~D`qf0C>MLthek3|=D5IL;1I5Pglp_r($LbqJFoydZjGDAmvT=)`Mu zsZ3|4bj;L|h)zT);P{jU^GGm^ZmPFcaQ~yUPlu8-kXqfMqE1ujIy5{I@nprZV=x(ZTk-Q<#3JJpqw7p}|E2NM0i_A9Q<`d+ z6Qj!z-u82ntlguhwrhK)>JVZSS@6tp3IDUxRU`~8D{Euswku)%ZjG3z#U0&ks2NOj z`GL+@ge%gS;F@2gZ=&FZAP{8!`KkHuJ*C2(hDMc4a2VQnB(g6ULc_exF0e=r-mXZ$ zkE88Em#c>Qu^JN(fRLmKsWe=U8BYT{0(gvXGek+iZV{PdzvHSh{JHQCo%#8|^5td= zTYs(ZQqJERKt+gycPKT!K`~T9w!%uc--lX`+`wa;uJoWp?{WTiJ^+;W43;e0pQqwf zEhtRG4RR5gSEMeTpN}--+pb3~bHtfeb8do<8Pq&~iQ0$l-~14qW;os`xYyn5dn!a6 zkw&d_$m1Hu!1E?z`?+w(tY|gIAQG)ZU$rN6@4wb6jnA{ZBWhNwc>z5n>1_qGD6O8I zCg4|Uj|yrE^TaaCwbzqner}}`bTM2`k|+ci?RQdGZ@ELw4zswfg6WQo%arExEk@K< z4>1RxCYA7~>>-!dGjIau!u<3@jKjz5X^XymGdLsWK15oGTU9)z)>~*=^SeIFJmuKy zOX(KS+0;0hL94RoRu&MMGD+lc4w?#f7oz8-tO(>~&Av~g@JN#TCPqgUjMBPm7HGO2 zA?8L6zOl-Cj!7hl$9b4*(odNhYr5MAg_x}vk|a0-s=f> zW9jIV@WW2aLlAAmFz2HWv+-v6s+_&zzYTNKCy2AE*qOd4z3x4RdJ;p1_>DTwhZtJi z;d(+KSrVTe>{BwEQnlR}EcRS8>0D`jAp(4=Jp5~Vfk*+|f671n@5ZkV-4xHoCa8}N zo}FVTVJv;HAB$}GQfKke_I>&)u`HpMwpLa8H!yVrNt^g@;8B+f8V607C^>fqA9Ex< z4x@GGC|7OAIS&B&DfK3g-uKrg?z6>hEt`ntj+#@`7u>bWa!U@)=GB$u{}Qr2AWQL=xo0O=r4LE>;P6Wcr^}n7J}O z$C%<1bsA8We;lF0qrfOw6eCQ=gP%kYMEmUav6>=Bv+m>97pa6fCZf**0OyA>WiE`X z+YDt_NX{4e}yot#zAnXb>Cj4 z_Cmz@%^>^7cwC;c@B zPp5bPh6?|uUG4u_*ZyM#46LeH7Y-m$6PDQ}jXdSP>JYrG?2$l8-~$Et&7V3E>}!qT z4EK#^K;5bya}sq&QZCKRWL-6mKiej8x;Us1!Pjbl;OpYnE7ibM(YWZf!esztSaeAn z&_Dq6jLDhisFLLmIDfmxf5msd)4t9p+J^B+YZ;H8ZgIY3I2F}+n7RU#l!8u*>^glh z^5DNU5OQiyW?jwXb9}*bSh$=5pp5HAV^)24qmi?;qF}0TV3Kqy;bA=G^9Qs)a?)M`gOH3dVY>n1H|tNrQVlLLsO)1 zMd+E-ptyAb0#3+;N@A}J#4LN4bI7>NM8jP%YLPicpPhSeK z?MQhn;I|>Ma{2!50zoJWC2gCgG5xMc7yJDJEVpOfTAxQz8}wX_Ca4tv@fRj@24 zv1tN#t}HywiwKyJ3Dug!vL-uaa*&X6Ym&-nzDcVG$0g}#l9z#w>X?Fx+-oolP}TVs z%~#tF=oi=kXj@#RRV&{T2o8HkMWkX>vqfd=d$h74fyVFbheI>-MkO1ySP-wuc`EjO z`F$9iW_{=Vx2qxU2IN~}ozZQU=uh%=HVNM>Yv%R-rj+=Pr{!Opy3HBF?(Uyr$ZS%j z#!yuU;x!iJB}RuN_R*9~en~x58`an)F-%u7mrZAdQK5OHt!F!5L}m;Ti}T}tP)vQh zY~HN?aO?4?v-Ag{=Z(yju=ccDpQCEg#=1<0bgWpWmUs&Au4}Y9As4?KaUMu=-xy}) zYIXxC^+g)-cnz@e5)jKkX+51i=2Qc`P#Ba1DhG{90t2sZzui1k7;4E&8!UZe%g}e@ ztpoa~pMrkeBCnT3?1w>9g~6ev#uvK%Pyt)_%s;;BW2N| zk^=x6q60OEx8N&82mR%DKkCJ*5vcgLAZ1GbeimC87i{L5W26}S6}s`_>Kuenew3pIBG(F$)syzGS zDRf#j>_Vh1rH88C>2kV9+k4>FHVyScfc1}*+W$|72pP60wXR|U!ZzE!i=o4mBx%1o zpLMY5qj`(?>Ni|DcQY^@2J$xfseg3YXzSkA7W1m!^i^%ShrDBZmsiQU>wNPxnxaN* zt1dR{Q|vvy?QtcL-`s0Y{jT!~9uxf0;O`%!;#w$)8)E(Se)BIm3+c}Kfb3IsIWslhj-l>AY-fGH{$Y#q zbxp4XxYBsec+C6C&fkC7BOWM6UvJeG7$5gzpae_JE>H>0eY#)|_dM;1bPZM>V3 z^QA${MB9PDgeD}Zbvv5+?REguPr2&!3+T7eNbC58w#x7SQfMk*!c zZZ8X{nXJZ!%IaiRawMfDJ?ykZ2eNNk)#t@)U$xj8#87_POKNbE=iCWfkWHsGGK8>5 z8nK#LAt?L(iKi89z@jO0#fj0+*#n7)PC88WT8h&rwh=m2kL=qvQ=5BnxV<6#3f`VLJ9CXiPEjlNW9kl^`i{_RiGRAGJqCma-AQt8LL> ztWE&W&J?y8-eNzY6gK~_C9%InF(pZ?j?bk4VepG{q(ZaUw>25pK+vzQu2MjEn0q;o z2=4DBkPclRPm}yoQbV!QxLqxyVegC{hC`Fc;AEYo2E@c&CnORBj{yCXh#yFi_FOa- zH@o#M6wmGH&m+)`UBRpyn09Mz$2WGpXo@)iChe-OzU>Phur#zA0Wh|?Y;Rw$B-2Hy zT{lsR`qiwUGLc`U+0Iy8LHk0hVM{J$ zUsRV()h(d%rPzalM+$=mt?Ju?$)Fl^UYMCu{u2>f!F=ToypEA=PD5M6-w8RJvYJ({cgP;FU}b1D#-F)_e^vF+oEr@vI#X64dhL4*BWEw# zWf2!?FC*#vA(Bo-x}BmV%d4#DRKSuWBAh7-eAQBf!!sOOkkH6BEYI4m zr@aD}VD+mrQsr0A<_BtuBjbR=tkT-d`4b&dXFAjOJEP0^b>vvZl~jivNgvan+~Z}e zAZ3(4N|^uMuI(S6SrIvJ*txsq2 ze8#pduE**Mrw$$M@j$W{4m_Iy+bLPSz2f=y)7k?-Mo|UPY>4rqH|8j7umL!0q6gG3 zzsCRAw@p8R>c##LZvoc6hivE{p3+$RhF1%aFNZ|a&Oi$JsbCfG;;=?!9F?;H8{iH; z_3}t9tZG)tzXYgDO=Gm*-CwZ-l=_2hS&7*OM9tC2v7sB`wZrs!WcC(Cm@IHPHn%#?loDB;%J|r`9N0 z{r1f?9I`##n@?lbp|fh8d=?_1Y=BMS)-Q}0OjZ}C>u@$3{twame0`y@Sy7@{`B?qK zW}`+1@K8|cV?2jM&=BQ559OW7rC?fKsO}xHrS2qM4DKKa+W*UNs-lhNCyeSVx63+& zqoQ<8`?~`~A#!2D43S!dU zBq=@oIVzI9BUg5^(*VNCxMK&*Eq>5H7d^LhSvG9KYVV~wh#YABK1B}W{MK?krz(8o zZh;OQBC9)Xe^Ly?mt#ZishoV&_0v(uuonkR8m*s2nl2~yn?=Rt7Q=S?6PcSEmhQw< zpIxSD4MvmD@+4A|%1#}F22@VeH87dY^MI*ZT3Dl zuq3|72L|^$@yIyl3`8Mn4vQ5%zk>ZWTEV^t^aegaQz49;(s&=I+EjzjopZ$*LcHl#;(mWvALm21_Z2X0PBUz(2zKdkxs|jz7c`3%}2b6aA~zlUp5)r2&L*=U;gKt z`fw!0*XN`&f7@}SY{Bq2gTiuu9LpwFj@uR6A|7*@>Lk>%mct^e8EHX3F1H6CYB%e3 zs|$*JA4%7zEjBm6wNU9IPYl&SKFe{<-m&4bteG!g6_edz^lVF3@*NZ$QjA~4Z+}qz zN)bz@uf8%$76HAE4zIN+V|MSZ{qmE>WCwj9Y|fx1>Z^i~b#HX$x&WYD`)a0lP*j5^ zDSH@cDRS*B+JRK4^cA71ijO*1kUnw7xCnx{agR-IeIq-CgM#-cpr)&cdSrfZG(pjb zs2e*-YhhnA3pCRk4~|BBHW5gZ^Fas6Xvc)hVdcOP3HT~33^BN>aORYh56Nm|#Z~nB z5?s7hfsYo8+Z_}fLZIiM;(>vilx0SlW3%6=oE$EPC(wH`oVZ5sTM`kMXr zyn0*tJK|_h!))6}IZA|kq{70Y)I)ivhOP}8nlRTv-aPDkBFgoe6 zXvrBKdcp{#d$uCB(%GcMY8Adt4(D8XE{~Y$qlcqg`F37%kL~cs{YDFcSp?eO~=QD*Uyr` zgAnXMv4Y0^7k+5D3uY`;^csMeG_=zYRZ7rC)e`y%P8}CIvFm8Ucgyb!txc0l>m?Ay zODvbo>)v@hT&54UQ3r9Zm?d~+^JCzxuvOIY#ETMKXbgsO5e)c@uDYuw4mWbHG$AA*>ksTKwtbVhpo(m*1wPM{`z$+gnE? zffaz=f&KaVbd@~>la}|DY0+uRYEzSXipvkSH#|YB)qWna19odYoEx81GVKZFN5}AU z0r7-486hJsZf0_rKC|_T>j>w-fhL8G|h0;$OZQ{Ac%s-qjN665xmPB1X5I` zPHTm4nhR&tdow-rSv6CXq<%b?ZU-T2W8e-7x_&)1wf?$^WjmcxYYXGG3scu4eMa9h z`h%TJ)Yyqurg>L8F_XNu@xxb^j{!c42uXME-4SF31JlRo*=Hsoxr;x-j>3P@uuHrv z&~TMV_OH9gl*S4Fg<4f#Ve53^GJ6r7^Xq|f(^HMz+i(QY7=>GvzhLrx`4rpJ)NSY& zauWlB)tMygHuUiX-Rj@ezmx<)1+A=it_D=CMC*h7QeDimU-7pdihs>ANw#E-+eMLR zhcL|Yq_MKt|4SF)Zx_fD2GaA%r&N@>nJTr+_t%9%NsCfi8NXZF06*(7=}@5R@|~%+#)G*$M*aqH{?EH>hh) zTjB&JW&U_zAxuUSxub-tc&m7IE-VEl?R%@;arZS94~V&rrag@zz+P2-?sXB~s#YV3 zcp`u&yyZSm8yhE+Hbzb&EHF7I`6QMpTQA|*S?*Jvx-MWm8jQZ42ed)caU3N79X_=KyQd?w3ao`Fwov zzBa4Q5*gYh)HwPaTM9mSqK zyb5o7-ykVzv^OleXvwb}DQpu)y}f25{=%0|UN%?BMk74Ty^c>CRJe9DCPpZrA}ry$ zrGo77#B0plmIBE`49-M()niA&fgV|nOj@-mV$BH=zY=e)C`kqtfwW&r5g&#Nl-k9e zXiZ8apFYQy5Z;X~9NNjI*-wt8@TwF>yEgs|N?JJUEzSfEwqf8r8^|uy`D?_bb7zUB zX_S|UYe|6poNOE8C&r z+gN!}K~sUE@f3uEPagyrv<^@wd-x$l8fMVDAV247bcJ4?c@uG9gnZGWEl}9XJ5-qd zXcXBs?u;T+7Skf*yi8KbE76uAmXiJ(ug$9P{q`chJK~w* znJ*b$Omz6CM%@|NWFq%ca!zS#)?IP*w``?n#1?@foxZ6H(cv>i5a6u&z6VrBu8rLq ztAQzU>%+G!kYPW8oc}NUfPVvN1SnKMp*v6XlX9W+W=2UKa3GdOM4q z1xmWM7z?oAnJ!dl1ClcuMr_>N@S5O*T&r~4_g<6P{k#w^bCu(6g`3^_msm`(iwnSL zv^xZgzMEj2JNP} zS^3#TOnf(>FMy|@YCl`Cpc9DiF)4`_MmyP0fe>&a&PHPBkXv;W5K| z9dgFWx1JDtBjEJZ6Y&oZa1$YRE=^bszggX%fvKNsmGXIQqJ_gMj2lzu<~ zLU-J-h4iO1Ljp7o;&%tdX2141AMC{M3=9iv1G;vITm9kFg_0L9?toJU-r6q!E2M$n~(eC!YWcy{9?_jvi2~uz4kXOZa0@@;s$)ytT zwW7iyf2@(uLl98i&&8Yu5Z?jZ*Ci*Ivq1 z(|mdoX6zX!7TBlyQdX(r_Ijt(BoG*_f6*p6Hr17=?y2eNKVqCEpt@y@tWj=5lvZc5 zF|<2sOf2b49Lief^^q%-2Mlc^YO z_@@9>&M!8*k$02rvj1`g(}9xEj#7}8)tgs5Nm=@7!43v2!a*BM#{{m_hX3TD`7-1V zklwj3q1d+i7d6bcA4cfMeRAV9RBnQn)|h8}I9K488ouAuY1)p~BI^GsJ8*5zn7aoe ziKkZ#k}W=3y!LZ%Yel}2B(B$lcSK8aVV&J-hlA=DvOZm0O^?5Q1)p`2xB#M$*Y4Be zOz&KdD_x>2p93YGrWJU*Epa`=@gX@ISeI^u`V|Oi=o&(kYM{fhKP4B7-sluEF@)5N zcy-5H=Ijzy+VS9of$X4-2jzJ_j>pM6dF{VrbmWp8=CViRKi*sEVM~x_*au%@SvrfQ1rIbQV<62Gyx2-y6El{sciU7Brdm8s>>x zP(p|t2|_aO^oAx02M3POYd#ss+VdkCV;s$8Sv@QF8SzZA>yENC&GBV(i1#0>o=bzK zC9u%1l^|d=i)6)6Na%^zYq$~_u0>j7A0|FzH6DHGdsBGvxw{~MI2=)vN8~t3gsbtir za%C2s3|r!5Z}h+lh#$i)d+4R}kcqJ(?R-rZ_PsWzOn*2BW{K4OB4W7r`e-~&$xrSq z!};qAJsV$Y1KOu9HHkJq0Ya1Zc1+5{NV~+T^c-2d4~xqt^gY4g?Pjs+Tg7x7sJH?e ztnvmLi2VOyz?Lx$lKBrUfWL-$8cpJkJjzd=vUM~_oZA}}Q4Hpp(!t^?IcB>$vgk%@ zcQDJ*y58|@$^F!#RFzIjPMf~6aV**eg5mh!E_5H$5?azxK=B6%=3V&?tMcZRjsW9n z9VuM6dl?3($0?^7*4sT^E0*)QzTAaJac(?c$57%z+YIK$4|x(wlC>fq8UTgv<{hd8 zLjTLgWA8h$Dy#=vms6CsS8rX$v6qyd2U-8KNK z{Mi&MlbMX~P-yi4XNZ2q;qhb>D8?1n<*TpfHMz~IugT<|0B9q~&72Vwj8@ z%MS?;yGeAFS~Bso%fqb;8RtE|UU zG>zUs#83N%!=hrJwW_`shu+u=M}CSkpw_~4SkZ<%C{?1m`n@i>*6#@2Ke!pje){$` zqTO|ycA+Bh9stbnAZ;oO$XiC*JC&AvAqea63gbae`{^TqiD04kEq$BVC3weeezaej zES2FCBF=Fm4lDDgWu5SkBJ3kT65{iM^w~8(@!TiBZCPo;sTbYNKra8H!Uug%kyXztq!})z`w6a>_!tZ;W z!NP}=x>00pDc@DbM@o#95X|ZgIDHM68OSCi= zZsphYmk}&|q9`JZ+G?1^q?NTffwT+QuXlyX`w&Ng7Q&l|T?#D+vFFo$**4I&=ooLT z^*j+>5#4)A)rYS8q9dsk8x{U!Hkn_!FEi@Iz~4EC##Mibb2JMzt|`&n@0Y1Rz2}re znT%BZWi0>0;!-->GoNG9?^ba&{~)OOs#VbWoYRQ3_f|fZtSpql#H7q9?dy4u=ycT5 z0EUU2rAQ#o>PPA(V#yUYamu?dbx)X7%+R@NsAs|dT2=VB;50J+HUlCU3Q^UpgSQ*K zPb52dy6&Q{qzLhN1K#0IR~O@YSHGzgw<|JS)uNU0YM%m;q1&$z^RYou)4cX<;|KDN z3F570gf}y(Sb|j4?ZLF*tzCKb&C=!*{5SGZM%}(}0*sqAQ|iS&6|3mB}dIK@c z>W9P46x-K{5wo)4ir-Hz>#yHg&hH3(+nyf^UvuMCL~irOQ&{O+K>m?bUpV?5mMu`- zADh>sL6bn<Buu*b7@6{)GanKfIRR*09ql31c zW+DY)8Dd)j$m3>3HxlCWXHqM#=Le%>Ro#)pO~v*X@dm&!c9xmi8DW)sATT8B=9Tjz zpdy07WCv=2x^Wx$x~>O^!+i)|xAX7q@=q(#*|Gg`!AgSDZ2qVX4vRa{UpR3op;9IZ zYkPN-{WV{A>&4SiLz+|!?Mq9lE`~NmHCO7dQv49G)P|0d*ICF*s)oLP!J30kY6Uhi zvlXLEs{ZtP;+Yi4+1SL)+idE_xsz)(u~1vL@KlhiwU07P9Nuv+IeI&>S?X>S!2SHNxSCLus@hu{eWw-DUj-5ml1hv04@xHJTJ z2=4AqXx!Z$8V@vX4cwJ;?ya-W+ui?uNflLjpr99P&N03@MzB!vI8xi$InQAjDLJ~p ziQZn-_U%7OWuClAMBDz!(b%8ecF138SS9wjf{Qt7Lzp)@7KK8J*SM#@)EgF~s7zS+ z+5KXusB|ovZwN8_X!(lqJ`T3`C$zK*m{yocJ{n<^tRG_^q|^XvytV z#kcHgDe0Y6Camk)KiGsW5PhwB_)s0G{*wzrr$x^jOJH)V0<2ow#HiJ3(}OGZR#p^~ z;-b~z^}RNog?X1$Wad+fblOmk*;x**IfnB=;WaAc@P`O>avFuQrLxm5=#o(zdj zyHcbS1HNmUa_z9-I-;Z9-Vvu+bw>vO8thfdyUo_7wm6#t*Sm z9^;&;6VEk@jgLV}@{r%Z;069W+8Rm`Un+z#|ijIY{6(DW78g-*F=h+h}R4M`}+ z?faCojm7&5;krKjXX@bp7DevKUbCBNNFDAnS@rjHAL_JZaQ-qzhXd)6go+b-uzQQp z*kk6cw+jQw1Gcg|Kq50Tu!V(WjV1&+)w%M6=#n9~*)OYEzy^5lQ?=f4onNZ2*)f15 z_juCbUSeF9PYKcwo9XawsVT~5BOuH`cAe&DYzos?1C%j$NL)^7J3 zsOxb27~f$5q+eXAxDV5i&6Zae`c`ZK?;io^zI+K3p-Z~7kCtaVc*5D9HpeV<+@*r7#hyBtBxdbcEy_wBl1DT7& z+_?1@l_0&#Af*&(Y~0zei0>Iq%i1=4?DIhm+hA!1YmS11uhx5>dmOG}IAD{{_Lr|5 zGgwq&>Bx@*_A`2jj4(+(7nrcHtMDtxCrb-vDLJwvclvS#HKEq>2q)}?r#VY(s&fkcLJQ*>S&GxST6D>PZs@i7LMe?AYlZ|F{rN80>si5eK_ z4VJ0Nps4@JF6XM`<5xEe-6}~9zW|158=Mu-{U=s_W<l zJ&=RgG7W$!HG#H7|B$)~9;vjpO4Ktmkn!SW$V}`-&5PD8ie=c2FqjnDQ=(Gzd^hk< z6WUD33TpsD>OOUPnLfU23%1Deq|N}Sr7b|sK{*=?HzDCxum=94CO!|vc!d+aUJ2Qd zBdpnx-Ad;1<}Y!l^HmcE7rj#K(~FkAqZv13mOKd5P;q{wCL>)NhqT)EC5)cyJ8$w&}#8{PdTQW!&^K=cNA=NIBfuXS;*EEX&bzs-A$ z{1AlZ2;=&)<+7Or;>JCiWd^Ntu(&0ydIKbG#+K+i1EcL|?6gyW3gP-^im^q0McILb zorbBGjAH3D80UGF;-|3waKg{%b>rFZ$S|L%WxMiqo(t6Fo&!Pzaa?oJa$bG}T+dw@- zqB2KQN^)h*Q+*ABPi^&>d9%BO0`b<6i|3s$MD3WJVJEf6CJ&&!OuQcFT`nls^5vRe zSp|Lj@u`(Vb=$Z^x1+nDcSe4f<2!G{3@KP@AHGtiySU|thf1c;V**3d)jicm*>?Ow z(Nc?qSF_6a+EQD3Qtcm&cA~lGRL|iFtg?LaMO_vjOVV(WsEm~RKE}t}%bNW;*e~>| zy-pUCV)_c+w}~z8ovp?z70nNmi9)85o--_kk9zNgjC%t5kX118I0^?@ z>WP)cn;`Tnl_G1I-Q=PXJm9rvb&z00%?mF|x!i4&WqJqxWh48S>F;}??RoqL3`S7F z!>)>4uaeb_t^UFPv>uGZY5D**@*AFSkM3(+ zu~m~j2X;~=exd@-rEfTpDTjuVRU@F7)GCXM@2oxkq@rh!o>)onKA$t}SJ!!AdJizl z61y#1NktGH0LkD4UKT(hL!kmnsQ+=;XXicnxemZj-Mz{+1FJ}psYJ|eS~8=MjS|&u zdO>p|3*RN{JIQn(ekHLieps5ApeS=muNYC#^nYBzD*&)eO7A&E!TVY09gfnc^M(t4 zpl8nGX<+yx39E^C8hGq-LWum|dK@xnrBO9hqPoGmJ;?rYkcR_i1v)*rcdlmMD5myk zTg?`;Z=CEQh5Pn|(-hE^-)Cod$s#$kt3O@mMyexDKzh0iaTR&b?`9LYT89o@hm0ZS z3kHHZye%jS(n8!f&H2IR#eApjVp(mocnga(?&~~2Yf*1}xaNrHT`PBZ3krtlnQEokhy@*ejjV>4rSGY|*DS}@ z26L0`6*ckol0Qb*Zx^)&q^=a&VMIvn7ozx(X}VE4P%D6p^egPIUXU5KBf z^B}@7yr`WrZ94~iZV!Zxs8sz{U&a04 zEC^Ejixm2~ZhsVgrbuC7+yrKWz|wVLokAsaFb!Gam%UWOsm;p#bT<5|DCg4%5U-iH zdR1NX9u(%$*!N!wLMke2gLx-cw+2t-lg@FqXdUx-02z)ZSFF=lR;~aKrt8~j7E`tx z;#Ap{%h*P#m|2JiyYuG{Q_4m9+U58^F#hiG0$^_|tkJl6%9g&WC1o`ya#%q?AFIXS zv`+(T((YmQLz)JziMT`{)tA^AH}1;ji_+P8_$BjnyR@c8C~_fYMqnG9ql0h(7Iqvgip@WXsF6DW$A9uw<6&XC>Q#Umd+p{GLl$;Od>wa| z?+uRtC~A!5Up{aVwgejyB9Z04Ew>g87flvWo^TzU@Nf7`t2p|B6TRGoWTBU?uD7tQ z{4WB&;W&hSC02`7pqgH6xo>Qsrep&@Pnj^aw5%k_QnMr->Y;PS%hxYzh3#=ZO%bsx zl^r+B;Sz9jB|^_K+n#Jz(=%H@q%DdZQ-iw4!B*&X5W{$b*m>4>Aj1~ei_u~xV%@q? zK@Q$0&r8r$r89iy);kk{hKS4G+*CH+!ekc}!o?M@2l+^5LKfrLwi#8pQS7EJNui8e8o z4@VH5Xzo1V_TS4wrb~f@*=3PE9=|A&I%YLj+?j8u zDwf*`ZGR?a~B1zid;1=hcgVv-`Lih!K!~4rsuZGm||iEakPvPPuAbeornK z-&Nz%VL{~thCZyn@5`1v?zW_?(;M+8(o81rf+Y*gcN$k-&T}~Jw$uyTr}ly2nW@0_ zxS|O@qdGWXrhKybx|$u|__qiM&0zDarDYW(X^Th~DHc{hmqlHBYBM-^B^NR$!5-Sv%?6DNqyi!$b)T2>9=gKZG^Nqn7uS}rs1v&yg*-|U`b7z*P(X0n6{cSDFkZe@t-Wg?6Llwwm zd>q((lpFtNq*@7f8H4e^fkV&~)PQHp`>ccIe%xNupun;x$mb5aWxNPAZjqgN#QT<6 z@9m|dhRE#l7XR~GFDM+vcf{lim$o|0ocZ+EKba=N=@EcdqI}dWA2Ff1c7T^%K_7>XXW z_DU_wSkJ!22o5x{hysf;&LDKx@{$342XaDv3!7yt^TPcjQ%?mj&n}4A+fyoU_&4Ud{PcH zn0NEUcR7s))UqriZE0blk-Bl`l;zdjnM4K~xUEq| z>G-rY{I z@>(^Y#%xk8@pJ@n^alYM?}GYXOJ+nS=Ts4DjUV1qy4~4uAh5I+m-=A3Zoh3bH;o;Z zv27b}wX}$Ouac2JAKiJ({RV~ijlklnv3LFm&5wf+3z1hV;jGdiEOc_)RsD+ivA|5})#K17%_ij?x-f!02BhL29rsX|#e>%4O=cD4WdHrio>0M5% zviRnQTk`jkj2#JC)xlvF8RvCC6)%SLt#1ol2X#7gG6?77yTwxp5>#&+FDWhL%- zYqS&UWU}U6wfrU{I?mHgmHoyL7CfuEopahZI7(md>u#>}B&`wl${{Oea3L&@`uv!p z;mus~wgQ<*dba_yu#379GwGE2`-IQ*3APzik}1XWv3ds_nG>*Ym1;bIhYBe{+&ZFL zFjk9je-%9&Skd)U%lIKfF?)gaoW2UpVGOx+TLW@Q!Gxtx{IxPIz=HdTfm{Knb2nY} zx9Y9u#_nSu1%B2S*j0FfhZ?0Kd_ym>=kQ2^@S+}rV43jm1D{`K^aU)-@dU^!`ponV zO^v27-rnT1vIjgND#LBoui>0B@^$C`BY#8b-KKa^wBjFK86w^b706{vt9QmEUSn1I z)7hZoHnyVi@IVj}j#J~|QwXuGvi0&&I)~n$-+8{>Y8$2Y{YUE^-VqBYpJ)_w&--s^ z_uB@!`EC#C6XPQdz3w5Zm>KjpS8Nmc@x@o_g~fnIxtPx4WajK0Mbu!zy}N0j zqzIS3!YWAX|HKgL*M4vQ^pLW`^A&B4<#GNz6rs}hW}P95n2R|Wm=Qs$GnyO|`Lo-F zp&8R5Dh)3mj!$OV+#}1=lx~j~n(l+-NCRSMfe(53NWZEdWN}EXaf!4owPm0CFRLQL zRIa>B8#kBt@%MvomeMOpPPR#nY|IW$5z*4KlJMqXe`lb{mSUpj<2D!R_n|hnv@{%R z{H&Q+HND}_4JxlWm1ka)MtxDB=@Qm5cf62pw~;-D5ffE2KJGi`HghlKFJ>4;X#FYT zw(5mV`{$z4ESbl{^b$bwrn)d=(Tpd*2M7&0AP@l*SbO>Mz|u&dn4HZy4F# z0^C;i?P@w{s_syIA@e-nH|S>d{IaQ7SLYMB<93ZW%kzN{RR54N2evM&z|QiyD1l-| z+a5)@0Qy$IW z#o6l$L*~ppcs~!-d5?TDlkq+uHJ^Jy>z^iC+kLqvik-d@`j{=I)-9=pMB-0Z0j8oV zY(n2kG^O-*^nC2Gx-@5u-{tN;Js zguc3A5#2*Y8Kp%Q8cKblY+7Zn(@EWETWd-MEirf$|4!{OA-{~c#Dln!D$El*%(FyGCjOPqHjKJ{F>mc`o4i<@I()A_6M zcFU{SMuo0^EiG+F*^bg`ncKxW8R$>RIJ2X3=?XA7c@bOi~t||EaqQY5J?cPrEH~&D^)lJ5YB=5y- zjE%^KNzL%tcM-39KK_MPx@5SUF?RJ_Y?9ifbb>}IgjFr+|!=bBlD-sf)c}ZOmaA;KZA!~@F2NgM}7sz z71C&YvsDBQ5F;5{;lK_G4Tc?NEeNj@;0d_XzW))+!`Bl2H9@n!+lzw6I>~T}nd>(^ zWRU>hASQ<*3By);%bCKYkCWxWp{&4MFm{CliONYtHWndORe&QP#j@Y3yQ+7L^a81C zf+@TMWtyh2MjM`OvhD)$u^af-ooRlITyokocfYOB??BIxW!BamE! z^m^1@sdNwxe}3pltLVb63XrHXkS$Uq4dBGo_Q2vhYDLq~`cH*`yI)v?=@lMFn#^Ln zf7u;H?5|`Y@hu;~K(Fw~i8)!z_r|5d0{O|4^Lf4bZ>njS=8Ka#wIwL&kG8fz2h8;D zg`OF3^+Bcg%FJFrgB*D+t!C9}WN!5B(#oUa!G`~j@tykLWYe&#b?-BdgR0u$VYFHd z+3Fizn_z%P<8AR*Ae#N>JM~`fWxv2IQh1!JW?eV|IKH4`7+98(fly+BxqTu7+nT;z zOpxKw24xICwjV4$n>vfjvOb*vQBeW>@TbK7Jvd~J3ugQm_5J4${8y7=uigGe3Anx3 zF1pN^WM=z45N;V^2x{9rJP_OG7c!OKuGgafyHUyV-wKW!Q@84GeSRR8t&L8>XdUOj zNuYzwtdb=c3b3Eu0~=ky_{YgWBWu_ZnA7Z@Izgdd^rP+98Y-P$SZ!1YybS_>c)`43 zhc<1CZh6$jC(=DrcC|>)DSzu%VSZEZj6M6mm}H^a@HK0Q1=74s*sakF^?pJ*^%2S?FMn$zIaM1R4PU<$k39eZuvpS>LR?o`2C zDkrU-h`lft0KdYyHdt#C*ot;+U3E=}FEofyenA*7k9x1zxfHmAG&BvUGF-NiTu7e* zNM;Lm$x^HqGqI#8>lGtzeTr<2PPx(gsDM6 z*4R*6s#(KP-4M#RbCrEG)qTg>FjAR~%w{n<`z>j0*x4V+pn+(5@SspCO=yAf&1Xc5j`Y6)%ik$uLj6De6$@Aj{IBn($v3ZUpJN3KMFC^=*0!-aWus^*sE?ZY zVy<=B?x=M6iR-S@_feNp6ZLtV?<`0RU7(y3j~yY?F^wIruS3gppi*br_pl&YwGM?S zh;!{*yu*$HSE7pp??MV|S@JiYODH%dh$>0DM;v?K=Fy)6c2z&)jK`x=>U}p`*_QN; z9GA@x)?9sS=$*J~odLz1QZzq-DDb5|FExA9WWt!u4U5{?d{T$A7uDYXN(AL z3bSE14r@UZ{RQQ6Lh#X6+il5=;|u!fKd4!>Zf3NzbwlgwD~8V<|9$pL(2f#!jalQ| zOdg=z4=filwc{`_8)du=mE>c$HRh))vd#&>1O>f6uIe(p8wn=hw4>*T{-`?K-+sd2 z#{|N*vbO+*K_eZbRuK)8g=^izbddOqJ5Yh>kj7r7fp{cv^(zqWqV;zD5to2{l7qOz z>)MvuEtRrbm~v9g|8OuF%kSW;QO#f9My8qJ-#(8D;@Blt)9bXZJ4rSwDl^e18e$aA zYHltz+dU#O`avRYbV8;c66l(-)A-L;1?(YxlJ+2CD;X*C(&w63QiOa76KEV-En%Ns zfDj`C_E5GTjt1#bMBr$)BxQE+UWHkM2pvW6KwkbscXJq0a?hiGJd0F;Y& z_${|mCmJ$d(9}nDPvaxH(t56*VM-(A?f$(I00DV#5ay9^Ev0`{Ld8q7JtItso}kCk zoJ;?|{jN$?l<6yLd;6N_!7d?dJi2w)GyDJLSFuZNf)Qi zT>dZR+k^bwzwOyL^luYJjDnAR2XwchbflG}o$CUaLjO#AO{+e}3SM#K$ z^{n%ePu{dYig2rCKN|y3ffJ6l-cn?E{KJ^&{eeo~5MYL*y1zTI5W=DEV&?&xmc$dc z#EZe`0{L6ytBMFtm$zLn9kaHzK#G2_T_Yef936GpfYr#COxv^BPdDoeS~w8U->2LJ z^t@o#y1VZ>QG$VW3lm_RRFMPwGt<9!wtN~%jbv$I=dim@>=y|G?6MtJQJOD=>-1YL*95GpZo5J~&Vaa5TFBhNxqa zMY}%3wcGpo)ZWm*N!W1z=^U0Ha(fE}qtD%X_J&~@!|9xLJ&)OgGu_uyT_(Hxs2fzK zgATx0cg6qSrE&apKaElkcgfcD8C8`Dn?owKmc%~>MO(%7S4Ql9jXt?5Brm}8 z&SaNTcxvFKD@yf`#JNNa6iL%S`1o`z={faLqaiMbXH$k{u^U|`mo>;ve1R}tozrfn zOLgvZ7u_FZ!7-TgrSIQDhw~BR1DgW+?Ms$D2s-QK{>Ez~>s)MLFc9b8to&r*OVKNR zE#Zlhbw4e4`+ZG}>z)DvI8g=FzhJZ}tj?0StdzAqHc_R#VTQ8p5T&URzvujo1sK+ zJ(%eJi^MmVulsO9uq31JJXZXVN`C_>NPK?vJ&M04I%e}Yf+UGGJg4ZWyqnWiE@RWB z;m0P&+22=tyi&vcbo~xktgF16EZ)sMo=Y{0R z9Ui$u)WrQ>f``-VSS9vtsSI8v6%7(bWu4(R*)fa1`wh)z&Cw+Se}d3a5`urw%s@Ri znuR}MfqtosC_wBgg+lD|p>|l9g{R+2igS4MT$TwTJ|YTbckR?hg)qNqY_rl>8pSIrT`Q0n$8cdcr(LPO@U#;cC6ydUR9<)|`G9VvZm6y;kZj zedA6N7(UH~FA<4yKVPKK4>EJ7ye`tnSqe4<+6>Y8fVO*&{mdq@m*@F%jcXN%m7bLI zQ$+zCs{fc|Whg>+Ht>=*x0d1byx4^TXb9ezgyS9noHKK%QU!X%50s4KwYR$`x`y%e zf@KtY-2>73kI4>!TpN|k_w+^SIaqW}V`p1%K5-o3DswWeDT9)yMWyi*GS#E>LEfhw zT>9RB8;m2F8kKp{>H!`e(}1t4^P!Y;BF8gKP=w`fCR1pc3X*rVkfc3gFR@T` zG$H;|ZG&WPfwHCyiUENn&nTgc+kv<$Ye_Fk!Et=Ch9ec}ab8h9X@lr4bRk+ZCId4q}1w)ld5m?S-ee}Y2fa3^?0f&oxT5HX>YZCv~CbxHhT1JO@HIwv=JWD_*c*m zm!`R~7x6#O z{BxMybgPy$M`cHdI(f3OS&%28zm99eN*r2a`(3lHj)0FqPp@xkQF{PqkJY_|k1Ejf zC9CrRvTGVZuNhPG^^(l=gVYbIm&o9z{HZLU@8ip0pr|>TCUwOQ-5K)ShcL?iYMSi# z)VfmP1p7l$u!OlQN2_ydCoJ1#~U38I^lP`ADp8C3| z3~r5ds>gOX0SbjsGIV6k>_a}rCo!6zH2JYCJ5sC51y|Bf{BheOKSYV|-*9cu2^Vye zY!q%}W2-~{`hGos%~d4v+He1V0G6P9esf=Q2@x2q01QmL@BwS*PRPg>-UfqN2r6eTuJfzeUD@78kxF3L?W_J;i z?*Dw5Z4A^Y{YgMyj(eG_^2h1)9(C^l&O7N;m#d6kf*$2qIzHXAl!tOBBrJc$tRkut zW1H&IbLyuP{~HAWm305k|4ywv=%8qg~|njF6#LJ-$$oYT(ovxB=o`~ z?`bA`cLf}l5Wlng+k-!5yjWF%XThV8Ey$GNF+GGvWB2jq*5ARF`*e{!U#)x-kw*7i zy^Me2GXD@o!So(T&gkKK0$ccH4|EHp-A6xe#ayv}X16f@ZMcn;bpx>E7)9BR)Zzu_ z`+yw|O|0_a8Tz`Rr1(qEK(V{+gUnMumbL@dFR_4KII(BpzZi^-A6G2Gr?tC$>laCE z#lZ>Hc7*K@pT#nRX&(YmR(DG4O*RfNN}+nnt5S^t)Lp6mptt0coKl1wT`q6CN|UB= zm5OE~AHJ;huskKxMPYJH9}wgd4Tzh)+@OjlK>$ssD})DTC5c}K_Y#%I{!rkrI_j8$ zdOGGGl}ja3B$ma4H+~X*fv;{Fq1fh<6Wkh_B~bn`{NoF;OAZ;zP`J@g`I!e=`}_i4 zcpVOwIhHwEBjv?U0(gKEsuoX4>z>R8BvzeYV zx?4K?pi+Z=a1&MHu|zgSZOa!9=Y#b200P!EUG&(Zb~NN{hbq6Q&l!`sUJ5z!?T~MV zjFMNhB6H4K#nkfNpGZ&+kU_3;U-m+M@{^ni$q(FUL(9HZx%Uv@x{rAb%dv0clqIVE zt&FB_&m+6X*2u_}LP9W-u8QvA%w{>SQDnmK+Fi-F#u{S}@vJTjX&545ab7FbciQ&1 zmU@0to=@FBy8Uk+QvII=RaouqB!2bgvqm~nn&_msbem^pF5U6J3>fNAeyzbjJH1S+ zfqR#iM^A<6-*tyC4S5cWGxZ%sCxAo0RF|pVn)$_=aDU)lpl51>hnoL-R!v5-3lL+_ zlVASYZ?y|$8Kng(9sN+u78D@4{+kDv*7h}iVhqb~yI1NTR+W_zr#`CTn_z2_hhkQ@ z`;BUys{k90XETTgFjgtN3p^LW=;CH zR~YTzky2K*gb+{PGT%+}j%>s3CF$CZ&NBdqy-^f{qaJhFh~1MYuL5_ue(To#UKj}G zu6`!-y_)L3Mk3ku6nZ?V+ZuckpkH-5u2ArGX&9H3ADO60J40b<$5f2ltJ}}^@3bQG zpnhrJ&w_&N$*_OxH4F@WCD3;eNnr(wX3){BHP-F}>@VC*91@mWoTwHU|0y=YI9=aOkKndNbeysm8Bk=-qgl6m@QSgACLmABtdet_30t?Ae=RADkL;+248Gj!<{iI$p(LY>D1WLC zWmSilio2dax z;(c-p2K@i30j1NriOy-Pj(is$f4YA@sDRrgfWuFdgSm6B!)dZCb|9BEw}acY~VVm&|}wc7Yp8)p{M&XrncYvyPs4)xBMFM2;<1d@2sQq1IUqh zsHRBHnuhxs5=OI&xX$8t9tj0li%9F8z|Orht)kPrG0qK&_NN=ZU_<>^fb8Mdjn!RN zUR&!{oY(d;^a7*N_a1B5svTjm-)rG!=FksAxM!Y56}pz| zyx6>Z;Smm;q4FeF?oTJbed;GDGVJy~I9vga1X;!(H$}Ff*A| z;=4fomh5+Et*OIDml=h=9*O0}Sv-zBgDt7GF!FZc$#C_jUB*UcQ_ksKsi5~$9jsr+ zlydR>QS;QJ;xcr7t};jz!G$ccZaZ zARGoJ&eQ>JJfD;u^vf-LcDp|^I3E2n zftY+L1C>0S8J>HG52hL*$n?K+*?e0vp_iC_nf+(8twnMYn(q;)4lqaGxdAjlc3=&il$UYa zG&oAzE6C*{yJ#Tl3j%Gl2`Rwt-u2Q5k|}bZ=R0f#`zthee8}8j=zq^pUhTtuJ)0d= zVn5_qghkLq>xZKtnwXcAwampCzmuD!+DFgz2LP6B>@7hi-hN@o{&=bh}F5p5= zt?9_Q*JABs_KxKjykPA$4sm?<2hn#8x$x`q8TYYgM38;9j##DaylwofmHluWBl3$I z1a|hd+G^h62^)p#?wF(Aiea^NX*8OS+{We)wi<^xk;=*w#TtPn$P*a9E$8k6)SZ$Y z^3x^t!{a4}ySjdv^6@hzYC_BW{BWAwtOAlnRG?<#^7>h{zo8bXrSrL(i?-bM><7CL*zT~0llVEu4W2eI#YhQ zMdy1*&`8gff6g9#TvEEThBnIEYElaC7a)#*@h!~Z052wF)(8nSGydM z5D(K0V~g|W&qwvh5Q7AP$2;(^LfI#_$_|DN$o;jmASXeSmTe(N_H0{D#t%-zXTcXJ z<#bADFl6V6Vp5EYD>B(+#B(q1gOu!GqEoyJdwKQIM0<}>JtH3`9jEZhjhhB*V?82Y zYs}0la`w`v+uRc38I(xbX7{@;MGgC zQ_~Sjt7ny@*ebP>zQ58Q31lbu+pZ>i?8Fm{l#=Cq(-NSdS60=j+bv_vc1QVVG>`4e z&no^RwsCGI4%f zlPn(*SA+17!xHn+5_F~ApHn1Vm! zf+bFYGLe>(`@F--HW%zcGP|Yd43$;WY*!I9lEKdjqU7$edpAcIbt&T|tER&JHnW(y zY2ieX?Z0&kreycF>nBs3^Hb<#=%3A0pW>2sQjA9Ntf}nNx@3Q)(`#BSb@8aOxgvL2 zCl!0C7!k3pFR=+zfS%Eu<&6a&qMwD;@k=~I-$j_`k>zdRN?GLbWwNdHQ17rAWS)gd zMFX&_SOfKL>17;UG0auI?$x`Zhoq_+&5pTcdFC%{YEsQoYEu-EsK@{ejK22qmvOI8 zYQE2$=UCgMBr~t9`nO@O>3-fmT^AGpVz)MUN9iRuSfa=sfCPso=zl*FOoTkJpSy$z z9E)WqA>=2-4d!~b2PT0GrRJ^f0u~D1 z)K6@sY~EXp{b0MM6+!t$%XsKL%L(c8c?@41#%}xVy0@MpG!~YE>?BDh^e}Y}=w(gF zJN@>Uov_3wbu=l8Y#`R;phR<0vToL@D3gqH!)K&=D+tts6?dklqyQKYM*~G!*pgd| z+Cf-{X48xPHEWG4#Y%%5AZf(GLlf@s$er@K@rX-c6CQtPSq1l)_+O?Yh5|VSw6=7f zl|tX)tT5X$&5iYVVn^6_cq80oL_9LXUBGBu(rR6gYiB)@#P&pu4|nqs#@5U@ARtc* zgHkHG{%5adylKF2q$)8k{Un20tLb=8B+*(^E~<^!9%Tp?)_tYQClwfhGeP+LB$c%w zviF4pQWty`a7qpCKM}qXoCe$%$x>|Rk4+)EsiKt0@l{3Q$|um1b0ai~v3vgepJ_3` zRsTG0Blg>fSjo|DQ}JoMh}C!$SEbHlb_x?ehP&AOg&+ecKHz1LdDTF8Q`x9O5E-x0gBc;dOlc}VESaJIqou;9DL=q?tkp5 z8V@&0{6y5i8lEESNdB_T{_Y#5Def#xs_M(s!N#^RJuhuk*?81M^MTGUDXM!C- zFwRKG80Q+JZA;%?j=fMu(xQjgh01PUBh2%myOC$d$G~)>Y zp&|u!WhuCx*G4Nsn&LG1dr%;q3B4%WPcr4=0{8m-ATK7Uirhuny71>bS)2cSTmTKj zU=$=mtwHc9^##fQ=~!Z`qN&i_>mzWt@PZU6S4T9k(B-Er9JmM^XW^I+#Wogu#|Yf2 zlkuVqy@U(wrR2>a*24bU`_XJMZuH^nF#^MwRT;e1Ab;V_qBBMX&W&23JW`C%dHyh~ z|2p{uMmLdyS@xRmgu_ThQz~f!MN_m!7~#n9FxA4`Y9K_r8oU_&YOA zwxzt9N2yh9s!n2&p&HTJpVV<6L9ABvJ1ZTW#VucTRa6FQq3<~!Opkji~3bA|QlKV{Dkjz3Xg1UH{-8xLaYFVJ}bE+ad5Ey7wa#u#k!dfF1lD-I=Bc*FrIhb8HQLT zSa%F7W%$gwWuNj|1fG8FJ%0citJF>Z)X9tH9T`zsqri{uu@fF;ESu=|0*c+Le?Kvs;lieU~u+-s~6hn$iS4OYmQWx15Wdt}c{f&3f`U?(&N_GU~)f$Lp| zMdQ#QJS~0ZtJAqWX&E>xkM)AdG_?eZ#Gg&tLrC$JvjeS1#q%tj@DgD^H>}HItkm_H z6A);c7aoG1Z``|-oGs;bea=6o1s@HfS^-B4ZD*Z)tJDh8#qgI-bC1B0Co)Zj1I1h3 z{%F!Nr}021`Al98l3VbOLayR$y1YBeqpwCYTxP^lE;wSphX@3hq6m>m`r(mOlPL4omPS*(f&Jup4{u7BiN4SUmsptls? znE09dqF)=kKal)t$y6QuxbgCQYuvOZNLlpN4m->LlxHr+*euIKCQpatxT@)UTsq?T zk2Jwz4$Gz0O$h?D5gE#l8R;QYd0m%l)yDtQACRo|)TU$TM%&0&qMW0CQYI|!RVY~n~$X}jG9*AwEW+(o_2L3GUN^Jfs# zoi}%7e9NleO9RM6=*yfZqq{F;-~MJfl<0$|;4$EN0S_;aO*aO-1tv96DVWY*4P$f3 zb}AsNHN+$||Cmd0jJr^r(JopVN_4e()%Aadm;Y|io_M#r91hZd8J3`16y22Qf~&0KV)?ii2R{_=E!_gZ!E;ZsK2pWe%sk1m=biV$8a81wt!$SB|W!>!!7=r zwwtrxnnccfp=Ub!_LK=VDk0}lf3opS5=GUJu18-SL~X_7a60`R{z768T9~!D3g+P+ z2zzb|_xJVs?fN{{BcBsEMO{F2T?aifMdw`5Lx5+Iqz`4?qlC21-r<(HTBTZM9pSm5 zzN1_PbL}<+I>)MN9ULS|g?4m8@2i2z_K>AIi_nD)56X5ZEYi4tRHuetVw!(OAu5m2 zWWejl@|hotwssp9ToM9_r^{-|}iMGF`58`Fk`lA(vhx6Fx`H$${ zMffvOn7_)^5tbs)_)W>)g5w!Z@c)qZovb0X(Eu&BcdQ8O?q$A zdoO_?BE5<98WE(o(0k||A{{~rEg&^OXn_!ReD?Ex`+ffG`R;emT*Du@7-l$gu4Aor zl#5iGiEN|*%k|i@tY@I3&%QgHcYU5cy(dDZLBvVhU&GwpK6J_6*6|zMG$9^EvNVSZ z7~n|abWvt0j|i~;5<6d59`m>l9R;aOWLf8YHTziIq~n?@{4HjZ4e*sHjELac>+(BM zdX{BvJ7wT$?e)rWpx`5uNCG*RP+P4}Y?`RGWa?z|$pY*8N`n@atBX$po;Cg9!4x-y zCd+$MRMfivrXbZ4%pX*Wc!R!Yd5EJoe5a_Vz+bJNm1as3m5mTyQXP-sL0h?q@098Te2pKxC=~TxdJmz>$WW4N;<^e%9bLQbsDuZruY9uK$xOs<2hr4+ zDOWiy(cB_aOWP!<90f5VBcc_<&wg8N2%1Xevx+NwtSm$uG1vAO|AR57>8y}HLJLs| zT85&&mtYjRG$F*@yCVu1Ox(IpEuoWEVy-~SpM-Rs{eI2Pw;#s--HI*bn(|&e7R$u& zoGWuAa;Y%h;TgXdHfQ&za${bTnQoJRZV$rjjGY?)W5oNtMCfheNH~<<_DLoQ%gaE0 zy+xfty?KwIXSkQu+ced`KT&b?Q!~+q`;3Gz2<32jCgU!Up(mBe?K4??SQWZ*f=tc){3it3(=?9R8a(tzwb zMe9DlH!2vn+%W&KEC;$r*rJaI9QPdxW8zQWFbfAzuzzf5(^Z8TMr@Ay#>c5BwLF_R zeRyrv_UTm7*52Fspf4t8x;Q^U#8* z_p=u=dHsiII(WJc!jP?Job)&mPyE)#hlx83a2Ek){YoD<%1^#y4V`a>s(yU0FBtgb zmNsQxaz~~1zJSAAT|AAFB{8t3CHB+;NOYX1C@QPb^&+m*+!$JlR*1IV6TiRBx_x+K z_I_n@Fr~oSw)HbXHR33>7MN3?|M8XS(&0{R_+{Wkt)tP{gfZPn)8cbqz9jnbJ!uJX z1G}@shY!z!$x&vDhuw^hxoTxM`{4aoJ=5X)-D%etW?mdGSYrNa8M3fxjRjhE{eR8-`u49L&@0hFxT{k}t=ggnOApzY(YLOP0T^ zDZ}J}dA8A+CajWp5VPm>Vu!e2gBro^yP0~aWZl=@~&icCE|3*RjXMXd49t4;|$&c3BE*3wO@ao!GITn|& zlNL9YW8TfK|5v+BIY~!Z%Ywv za@9KPCjSFjz0B>84^kDce(HmFt43A$OXWRKVx;<^`e{fJ7psZ43^xt>wgysNE~|t+ z?;TgR?dN6GU{2(>6$6@3qN@O;yL*tMCHwLGTqc}H_^K50!zdS}&P=&z&I zXF`ZbeTRA{q8)fp80{tV+2QU(O(x;z+ebl&Eiyf;=?0?5N4pULWz;@YJ7+`r_7)BK z=B-q+3qS4h>i|+q)!~1< z%!b*P(h#Ln))8#dMHnqe;W!o{$)Bjn^|a?bchq~ACVnvyUbkoIrT2UOQb0V}#=W0A zC%PQ`l}3Zfg$%{S=?4yHGXXMe)Zr_n$Z0X;EG-!tEMv@W_-TnULyt(i2i zWF9g}7~u|)9-Rx`-)+PM6RpiB?3R80j5R73n2>X&XN_QvXC0~kI^n+9ACdc|>Xa)4 zzIaYFhvw|!e6P)grkM)s6$r#N?ly66S7G@~dKcSFW_M~RX#vxZiW`uHZ47f?CjE#W zx}~t1|AdrdGF~I{8oH=?E{*C!B`|_(a>YLVf(s{jsu@XUbK5 z=Xy7IoU-+nwb5Y=47L45;l7g9`r+OO@41PudOX`VRa_;H4|SxsW`;2Q=Kt?AoPPwL zUaiwCveXUh@x7y)TdI6Cv0DA_*9XOKHNi0twc#LYS5mTV)Y1MD+Z|=(cg4vsQgqVD zHznSka$n>l)AIwg-*iyzC#4O&^gmY#6T)k_IB zXQ($i>k0Ns;O^pJdy{&H7O0qO5+SWS*Cl4mj-`{UxKGq%3#zy_=9{{83oQ#>$f=Kq zDBY)Bt7X2dM;y*&XVdxKra!t1J&y+`Y<+=|mQYGOESrCEKU2|ovvB6@v()w1WG8Id z8H!}x^9>;Zfj5IyiN2*b6|f5Y)~lNnTQ>GyxI+i%?OAz23Z>WWWO|p%3^k>20@3|S zer41@=aV~M;|om~A(`lGzxvdlt@I-=)HF4&?3Zgh@ksGi0-Vl>+@%Y~3QD&XMZhF& z%?lWDm$u2B|6cc1eS?6RCUug&Ps)euY6{6mQTh(vZTDZklH&T%6{gc__%;Y?o@h|> zO~%gQF7wMzp=Yh;qdD@0wqM#wad)NIzIOi|_c+-+==Rwvq33H}9lcf5{Lr`P6)DAo zA3k*w`=`Ww;RtMGddo3!z!aP%6B3+RAw_hqWUZO;*~zUxvVGO=6qa#+%S7C}b zv%}K!5_*YPNPBhZq2ZpnPAR`IK%OG=`kH()$-|GIKi?{6NV-klg6K}WCMHgW z#Vw8j>>GIo3FO01_3QX9Uc8N7ya%a`qs4V8nx9TaIDSuPP=n}ve{JH;sWthmJ)G?zZnV$#=-S_>JiJxO-)K_;Z@iv)uCXOiWj0N28-juQS!sPdmNnkX zDRDZJFR$Itc~t(30>Or>Kbxfjf?7 z)4Ptz4lE~M7h-}u2FzBxa~|40sh%2Cm{m+yUw<*NG^7%`lbBW=Qa>A)=*yw!Up>iR z^xrqmvy|#m`%MD;Z^kPQ5KdW)~c$71VadaKo{1uvAP`$V?JfpD0v?hdJ0!VDUHyvE>*pD;Z2!_ZeQMHW%GJ*0mR{)yk_ z{kn8`suImVbF^6@i}xA6y#|4sraQY6#o0AwbNjQ$Lf^R8W9h**9zyRRj9Uy4ZwAh3 z=U}(c&$s^B(|UZvg*}F-kx8f#H9xn5@(b2oVzIwiCLaIm)A8uqqrISu^Y}}P)&;}a z%n0TNF&3X|jaV8%S*GzF++B4&MvODtVtZTMU9lRrUSF0-iR3$20f8ZD7B8nkYo*0E zW2yYKxMIG+5Swm&M%OK|z+0Zk0TtM-?NWzRiQ=_jX72*p80E#z@l+H!1BXEpXcDGX z#(UsRLh$e-=)=MhM-WrC{M3h?w&MK%pZf_4ez2G?J@L1bCXFSA&~Q0|1^+2SCFCqk%x{$@fFQK%no3Z?OAJ-F=CLwzi*&QtX}G-KsQTvV*b_ekzKA6W=G`E_w$ z)?OtYWL$SjD-D4B&Rjeqho3ea9AGY`jJD1B&w~#VjBuV8!G**fVyy(qp~WYjXg=2C zKIK=1KP)nm9N3s9+8h$w{vF`^rDvZc7EZf?-3L3J4aBg!=6T11_92}*lWpqD#ghTY z<_$%3W+Ubq!mE2MY63ezWLtI!X~_4*sq-&XZJ{+lM`P$I$PVcA4>2xawH}2l^-S0T zIs19HksB`JPG%L|MOvwq$vWI`2z6k{s9$hhRLN}yH}8>KJCUq^pg^J?Tq)x}TR97V z*Q6<)CvYK#e#xR`TN$ZyM9_ZdNauSN^0G!dj`+6tnTA>U1nVo`=?0i&0+xUZ>f0FVU>sfeswY8 z>lMPx=jLiL7ME+_`iH&_%C6$%-hg1PE>7d@^XN4&i=A1FUa3<=$Y{0}_%sV?_#K$S z-MTb9(ge`%k7bt|NP}$E4iHOr{ee6Gg)ZEB3xtQl>40|3Qu?-sqS_R4;rvu_3Zoe5 zhZcbgNs0&k*3@oupA}hzzRq1AOENS!a#|umR}AnC+zy{##cnNtMYN6cYI>oUIPs{i z*a}CKR0n(jDsmiAc76hgg2gV)A3u3E=jBGs1xg|&jCQ#*w}@H*TQ3lx!x%rqE&6O; z#QDNW%K=e1Ih$GK?&Ce|nz`biuIx8t3(56e69kIs9Wu%dECC)M(?nU|2i$O77JDYA z4!USLiDeozhv3nI%K$Ih|8(I}U@FYFWKtV*RCbwgfSi&Vz%G&ik1y7NME^3cVt*z3 z)^_D|F;!wcyTlxnpw4(%V$zBX2^S~~CWOCk;dGquv?qgttyxaN?(%$3PD+2_V)x`! z(IxcNuK(W2CE=0C!m=Ro7ZYBK`mQ>~C((42(boNJWYWLW`2kL?vlGmKo|4e_!u$1n zxsz_`Chy%Xs?_*A4JOh3vtgYtzRe|aYfLwk^-wE~ApCx`sliGnmfUwmyWBq6xwOgv z=jY%p3%GESUBNGuy_&wmSeA-zUHEL2QPY|D~w+Mft`F??oKl+_mr$+020)HR;3>`39Mm(;!w z9(p(6S?HZ5M<4gpy+*hep$#Q>I+rwiRj5~ zh@uy-qY!S|nYc*amV3Svi%gzX%fQ6=$+9Lhj(H|Hp4T{*kTBJx4KFwX-#sSPbY!SD zQ#zGFnJe2b?-LX0MO-HN%vM7#ySV!?gk4P6&@Bq3i_;#EVatVhOOfv?JF9?laY|7A z&>k`CnHgPj3R%7A5?rJpF3Xk}L)u620rq7_eg-ZG%_SRC1=6_vn;tlHpHES$ye% z8tAC-U{ecjQ3D!3=+`1BG+rf-To&;j^?A&%1|MPX!LQvZHtyT^2OYxkD+h&I7l)?G zizlFqYz%kZ{vFYM_*0%DCZwHHkZJFf;m2`nvj+?6_4=L4INV1-9qn71ol6xpZSkqz zk+m_|O*>y(O3he7RN4=dLneN+G(tf`-Y~h%J8A!>v`U(*m+Bo`gjISJ^BTs^B@61I zrq_X6eV-__J#@eR=R2F1Us&b(m4q4)_cEov3tt|4xTRvn3|Fg^vIUyM|0#g~&!3mj zzqJ}yW0x(ENnt{22-}%1ISh)GijHD)mEzJA%#5N@z6J~P{-Cw|hWr6tYgq16j!fH; zO-72!H+)NBdps0Ra?TcC6W-lPcs$&(ZJx7nA|bHMvUW0)+~J`~|DZ26a;tMz_vnXO z1Wf9s<5=>8_}F~$rbk#+(hh0!y_|1X^x1viOJ1h@s7&!tE9tXDJtAiq?AQ_j|I#g1 z9$+-ozV&gjdFW`v!s~&ZD^{$XQlxes0p&^rw3V&1V>zi;x{^~7<1K&cM-^pVR)YxCVX0`)!fjuHUU!0JU+}z-~w&Pugz*W zG%W?Y3{|rdy(6Nu&6HAF6iAhfa2iGi2!_Ud{GV495`?l#eDD|e06%;V8d(iKae&Kj zXR|gBvw0+d&Q?Ify_#3On@>6Tt6^(gccS4-QE)Ucn@G&}MvEdKO7)9huouttiGN;5 zzdSsp1nN*PyOFqk2!7GOZFfexX}$l2y+dFqCV-NDOmVzhcBM*95g$6X`!{;Z;k}Y1 z@JucoapNwS2=Zn}_s)zbad3$oY#yI-W z_mWzct@N!+_q)D>&&3T@m zSufd)-8T&p)zeu1c$Q*qrc1HEUKAIjN*q|3(%s)& z!Dfh}vCwHksJ7KR(H0Y9d=?1NwMn(j7dtJJrv3niYS`;Fvda*{SqF*#kv2-@>&y8! zI`Y9Yq#HR$Zp7&$5=A=L=d7kzwEhwnM+$y`t+*HH#(WEY#epcT+{vv`o-&v3D3Te) zLk^6~qG@1kQj#oyY-l6a6%B7f^Jbf8=e?WFGqRLZwCgRYru-hP}j9ei{y;H^sf6L;m;zAYG&?V`WICsArag<=l$PzOx^3I*;M`R~i?NGaj zCL za9+S%Vkw*hvRb3r$BlF6EO`I+ACCF{;{?6B(b7sb&SgI||B06IVC1of7%(efXB75O zOjxGeQQTs+3DVMNCJtcJ%ap$c?em2NG3r$cSUUagZE}{m5t-bFpMDe_HZC2k&voz; z1aJT+j%&Lm|Ih%;-5bUyM+71l&|)dTN!WAypJVULFNFJyMW6fys->gW*Rz}4Gak!# zviY+}-DjK+A>E-&sI;7LS(GJnYs0QEUdA#KbdH=@q55ULmcV=aB2H@oE{lVL^G^WL zM}Q0Q5kcx{G1B2eHPtD3N0D=e!`c=jg~0m2V>u7TT=1`9gU6~?nX&gQqXKN?#!n~C z_MO3fd&R}f{YivU9_+Qi|~G~%G!;5^W?;1i+)`k&hZy`g=s;Bk?Wu^ zfdg*Cb<4#KBcbQ_ZdBQ~S<&B?XCXj_Day!^{Yw*PxNZpXR!PZ3RaVK+ z#9JncS?6bXm#R;AdDqc1;YBhU;u8sBve*(Hq=vns__F(Hbmq|g*wv5qsjjO=*0U3z zC>IA+ulJ7U`sXn2vG*w6uRd=ZOXa+9P7sC+MTag}Jh`Av3-gw>N?YbVJrl46Dy?cc zGO%meGTCZf{$|<3IwM=kOB!|=wYp}z*|~Qwprw>^N_OYwBX>r6wcH(OtCXXBJBVspXwF@e6@xKh{;58E z3vBl8IOPIQ@t6rg+c6!E`ZdILQiWFqigij;2Jbq7lDgvbzsQb-4!Mg`vhXJ5EuP5a0*P@aHQhv-6(Gei9`@v?CJRgdBy7iuDVZWFF7JC_{PHO9$b zhQL<=C3shB+%9&rMdGDpXtojK4J{tt|Zv5F>dE=dnOz6 zzZU{~k7yPRRq&I4?gZHXy*{Dwi~OUd$+&7e-=%Rbobve!UK=X6xTmEcUbazkSy$r0sblF{ zqH}}=J$en6#z?v4&pEA7qFc^)E4hrApYr?TPKI**o@Njea+T|env#L6M$AKATBbcD zZRSRd)|V4&HQ&^(sBIxqdJ76qD0LcBQEuu|4T;Q(c@Ue0(A%%)>7QaxWypNS-R%^7Lq=|Mr9GHsi3?=wx z0L!TLJU@ZWc0ZlIvj5#fUj_K`h$&+<2U_!N;rl>$D)+b-GB9DszPW#ySwh6OEB1Km z@s3WH<+Y?=mZ4h+`@?IOk)`(E^b_xKoX0v^IsUkHl}pJ}T(N9o!E%QD_U%)GCDTqW z)6$T7m8E+tqQ`pnngaf`u{y_DX1i9 ze^0Xi{r~;nYoGu7*Yea>=X2^^=q}KHr-nBPsSZy~l>OhusOE9G?UVy`k7E=S&2(bx z?(q#uyZsuF#N&1X-r<#2^0Y^~Oo8?-sip=~mW5wb>tLx!Q;~@$Yct%w<@qK)pFXsQ zrqKx&xhI?C#>R*ZV%QCu1H)R@yfS)Y9`LY=4I|uN(c3n&vWnGuJSR+5NiNZ#3@KCLj4%7!<2yCH=d;AmlO3yB9Bp6&QH2IR;HP$4b zIA}xvP3sh7IC1KhYqL*3rV`H0$~v_LB$hL%t^&eM1v3y48zbEK>x}hNvu%AV62dzI zAnj1;?u2kd3APohvft7&#{lkvaE>9ZODo6R*lwHss^YK#3Oj|63Yr?F=6D8rQHf^d zU(JGVvvw}Oy(rGGUERa+NC-<6F`-m=2OqmjEU~z3?U1-OsGs~0Hn(Sum*@piE z*ipmbbofUVT4CvFSB&y#S^oF0Fb=!ouXn0fd5;TzYmlaw%YJ5zdwb*Fv}R<8y2|WV zU$?G3GCIN&$_Tfiu-UCGE`4_+EQ-SJj*Yz`(hI-Ej}4)AfGpX^ksL`u1lZi@M?hJsAUfui%ydrDQNA+(M*N|-pvjkilntkZjA zhyA1;TeV7-sbM!W^1HAiCHHHl>{qnsqFGPdSY4u$+WK)<4-mX(8#{JacBhD`qJ(vY zDG2Y1kb(WvF%9s#gcDV;wN=P>Y7j;NaFID^asz79Xw7fvbsQ`WsK|*EO#FNk?myOTHMNIba=y-Eta)BlRb){b zrs$ssyJaNsCkko%)c&bNlxO9JXLXX!>;?X!T*5j|@1h0KUUcyYtCvt(LqQ>t;RO=; z%^01#?_e_q*9}RL4YMa1WC9h~^~a>sO&}h$kgPC%%E{*6v$NUTkG^JsH_SKu55V#N z54?K3UhG{u?`I#D%G+M3tlh4-JSA*PO=morWcpWC3*fi8R>yi3&MUH~mo0OnhQs*s zWt)=eY%A09dBOa#V$a%#qcjVcDqqG*%<$S8T8w5UmMfF{>QVMu_Cs1z zcCcNDY>SQZK}|xeNir*Y$wDuyc#U5tQ()7~Qt2Ruv5}X8v34a{i^42tquhjb-(4l8 zto9oy|IJ&NVT;E=W<~qY&0HPn4}TIZFKn^YNgbm5VtHZ>L@4t~FWLcDV1V!h)O42u zjVAWI;&LlN9(XTeZqICgTOjFxj-}+!?fFJar!h^fk=I5m5IuJ9hM&}W@yGHC;C2>Q zuRpus4?C zax@lW(i&cM?IKLm+tZ~VQ3qFMF6j~_G6$u*qUEHl4%Hk)qgw5J7LI`LDFn0jDTu~F8rhE>S? z(D-Q#1t~KPvgk>Onax*OQ4y>-vu^ajBi%b`TXg#pu)Rg=at?aL&Fv~cm0K_5AI~g9 zTZeBk)k>xl_c*oNAndCd+qA8inFXc)55~MATLhAjLd^bsYQ8BWD@yw7$x^{tu>13V z*WFp?_9obYCDdG#ZaZOgv1LjJz*w$z*At=2##zIU?0##4mcT)sKoZk);9X;JFV6SB zW)9@8ed-c``loks?`b=5I#zBN4##Mi4*ka2t=!*AcQacNcTv%M9b?D&-BV6w1K3yl z2zu?02wl82&WJtVW00YS-dfB*6}!we$1tyQkt?w7QphCkG3q$CxlvNNPM&hIOb&Dy zHJw_iYv}Vw?7Ey;=gmG^R=G-zEZB~7cF-%Po^6U%qz&|#cE8i%J&$|>wHWSI5+5UC z5&_WIVZ-9^i`7U78=vOuij8&qV2Sg#vtGf9%G^F7y=>kUzYsr}H)O{BpDL$C_fj9qNCA z>=z}Y%Oxvy1{%KS?YC3D73nRT*^P8oz(9;{c8?#6Pu^UaI7XV1G@Y$xnGWy$Xbx}@ zg*pV!TKonPYxJ`Q7XQl=fIMRJGc+b{GQ872r!FBNSdlh8nB2;x<$U6* z5W+h!eQ)S~3jb_YN=$bvz}gNJCCkxA$HnPE_>If~P~$US2c3a7yfiC^Q?pgJ)J(Vmj;t~{6|u1R zMC)>zMbbOMq+~vk6PbZLy4K$?IbFRVC9$RKxl>^vNAs!?Q1_eujN}UukJL`7p%2HD zf%F6u|55jt`J8IoTFGn9CoJ%Stv@5|=)>kbQSNb-eah#~pz~~~2d@N56u~-^nDy(#tqQ0${<)w? z*e2>7^xOUskwi&H=WX@UPCgHA1pA2XNoW}wQcY<~eB!7ni0;|4QsdC-=D&cHuITiL z8y=lRa47r_K#a$mE0@xQMk!BA(e*j(fZ_Ihl?>2f=hiRIFyffGm0t4dTzMDjF23f^ zGd-ijq|WH8fBPe%j=^o3b|Jdzk6YBvI4s4t{F%?4aQitEs`Pinh4{@H%PGZ;2ez~{ zJ92gPN0RYo8m6xXPQ z88jb>58eJ?C!29+pw=!^V%=Can&R4C4FWN=Q##06U?-}iMEX^VN<*AELz2vFSG2mm z&iR_H3hQWEd(%zLWRh6M>aCCqsD%3{qKj~0nTSP*m$kNB{<%P}_Qj#A#*`}gEq$di zynj3G`kk8Di1}d+kJ-DBj9J^pg>#5xuS ziWCc0I*Co&zGLhr`i%r*#oeuS8cHfgZ4+0YPx`6BNZrfT@`AHZMvp`Q;#!KHM=^GS zO#%__pq&6J<#N&}Mi%FcB{_$*=SgP19nN^jW!7R~xqA!J1A%(rWDWrsIPu2Ek7@Lyg4^`Q{i%6%%P<#!7f zji_`cBh5yi;yr*;<3=b#L{Q60?5vdp{&>NCY`t5RG1@$e=0GoRu(PgLN;`nu`7^Ou z(_C->D&ZwF^ZnU)9Hi?%T%L&TeAvc3`bfpzAEFsJ6u0q#YhU&^4ZUaeF_dZ%ga<70h)nGF51PN8DdLf))=RDMNSQ|a1y z)eXqmwEr~N1H+dGg&{I)+<(rw4U|A+66d>xM4M@{sGHipDo6)(f`FEz4 z%O|FtLUKGFOe$=SG_2>j7_yKljybk??;zb%sAM=O3qJLW8cdsAjmPVpDkV&%(Tg+_ zdM#Zkm7?f&VBZnC!jSAhz!JjVs;G|9lM_+IpSc2{9kC4eIo7&#ZGdoUv!bDA&T{JXR*j&SS99ic1x^ z!=jI|udv?VqsZcLqkPIWX$RNickOgObR{0ttO~S~oEttyK|mgF(KXhnLp$+MS8OGC zM{?XR5ILu{6NFofE}2qfe|XTf`fWPXVC%s|9Bg`eyG?Y2qNzi6D@#_hrKV|`CAv4( zC9alh&!pwkwh(B*7~lpd28;UBZB8KXJ)i83?HIFL8QRJ|dck#7#daYD4^shCGOXa| zeq?gsqPU;Z0L#4!jMoCOsfH0zo2e8YEQLYG4n+13n{EjYmmi1zp z!90>!V0$3<+~rgnZ1cIrJkHWF;H?OqqWeBw&e&7yBb-&?$J@Dq5efKYU1oo zphQiHm;^(@oD);~&W3d0mhFan|6dfE_PpK)A2{eZ{)iDHeBLA9rsuTRK}0+@agq>C z(Yp$RZ@9>?74?s3I{rDO=PFAB@tarf5WC5_QTCJ{rG11H!_TV0YqOG z(9j8N`!;-f@|m4xiVd9RocNqtZ=@9DqN6zwc4;1fXD&)*vWnBwH_*N)wvXH%Ll2a$23- z>nwRK9OKBrx;8+^R#Fz4no?$?kPPk>eSFx~k6~Ql<$!jo;$qD<59Rr$1)_D=?%_=9 ztjC$%UI=bC7^3a5+pXQlKSrxcLav-M@*vJqlEU>xPCtEfn0U~+^~a|?U- zaA{FNfL6Du$2epR-kmv)u#PRsv-VK$)L4gpFwf4G;!RN|B9~xc*BVfhQCgcFd9~DK=U&c*6sKeHj5~` ztwW-56Z}tEJIQ<26C@tW5j!OIyq)_7=(d~lIsSPJqIoFP08>3)dnHm`%xa!@(%|HzFMJX9`x}a4|(qdkcM0V%=+&R2e#}(Pz1q&hnDH8 z$Geh44vVAndel@V=6^@W0U@LTaa>B%l)63rs*N)z#CF`RaGX9%x3quqv>g=&z$Qtp3_=Y93wC4805zdw2X-&*V%|FJ@K075IrgrKgx@^WA~m&4?I7 zZ4>FdJfeQXF-Xbm5Xfb%zXyxLr_XGE5055{B%;Ox~PE**n!qqW=IS7nL;t;;r@!91cGLFo8;D8T=-cs<#G5k1)SvcB+FV5jc9PHEzE@act_6?fz>tcsY5x{#9g+oq|U&|1C=aYh=QFx_yhZy%(msK{qoi zs;XQopYq&mD-OWfb#6b-HIY;ddY)|2u`D7R{$&wrQ#Vqk++SWb^l%pzHBI69i&@l^ zVns&0Vnujeb4d6m!1OHt?JWKNgo|!Vp8wAj@bqU_GXJl$Kk}^ow9>{zmB8d(49Uah zlJ^G>wHO6FB6ptgN3z?f9XWN!DLamVMzp!_b zHZ5;=k0^ENLop2Le**7gdhmaY1}1#09+tmCM%V~wkC5xCIJKRouN{ghfo0GYx5~`x z1ZpJt^rev7Ucl-N){%0K)Tqz}PX04%e%sYhByaYmWAW-5_xVpzs!WkNQs(JH%o_nx zxm z%5^_WpLR{lZ&FK+OgEB+v4WlZvn_HHNN63tmpqB0n zKH%zDQb^vES?0P2Bhe-}w6BEq?Gf+bNugE~qv70YuJyO1aR@!b zHW~kT1}%>Z!izjD0qdtf!5iCw1-SB28+XF%zW(U4cR`1`G7AdTVb&8wK6z9IT#bmDHcNunK*r9PhTU zmkKNLP{;&O3eKKv=X$KHV|9p><2=DQ^O(?t{;eT$egBJ+^)O+xw>-+3&iC6`R~`z$ zHp==DMV4=u(?LpV9er^FzlroE0rNO6*H~_0OW7o5_$f>6izJ;q3GZ~M>7t7 zg}nd5cK?I9``=d6j9bcz37UWikF%NkduTba|BG`1l8mE1SJU#5LdzuW;Xzl#Y~vuE-ZWu=|}&<6>nk)?}uDDaM>P#UYB= zDW4g+HS@{z-WyV4{ieaQrP(x$FT}CL{uKB;SzJmYtyu`2d#b*Mu&!g_l*5<~ewkzv z9p0$45omJm=@B4hoS`2to4QI(UHL`8bJ5UR`3!62Rr&gfyQ{oe@{(EC%qxyTS@8)M zIrvcKaax=u1G3m?)j>kL?+`n7)FV5p=vu4;OveR;L(=>|f#E*_o)>3HUq8Yo`yC(8 zk)hp`Mc%E~lm)c(TmaJu6JkqmS#C&!HTyUs9y+m=`B=~~aDuw4&3~FG%@%yuKxe8Ai3-+y0UUnllE1eZ|?LbRPX{&XDb%3{n5__S1zQ zq}EcD7ukSo}H7p^BfSTtS7?#Yn8Eaa+FGvO~^5Dm_z~8fEPv-3+$I`^l zQjmu+=jbD5u3n2M1_t4m4e3n`)Rz7O3<)O}oH5qdDNygYlt-6IpOw{}Nx~8`rX+_A zda@PZ%dcw=obTe5pjPH~Jr9?UTJKwzY2|WhA=Qp1%tZMFRSc<%V~;Jw5J?-1e~UZT z4M!=cqho95E@SsevoArE9$pqjuZ*(c;OZWWPFN-aL1P7n!s60>TZwM#No;2->}6t4 z)LWAnVRoJ;_^PCdv1zAn{tqh{+OfZ6McC+d$oIs+eq_1T367&jv3kEEJ+X9V;^js5&z+juWKPnsuQXGn`A?l&Yfviqfr79~eVYrNk{iwZOW>Qjzh} z*J5gtvL=^`d0$#k(}`9zKYa3;UThfiY; zefP_vW^0@obKT2;vW+%j$0qACsU8{Ax5!8*j8#-GQFe9g9y_p7NrhmZF(tuT9&ijT zd7CH?5(ypIoO*pdCF1!P!qw(;N?nEJq+;8o5arlS6EE0x$kZLpI$76`!!VwenGf$l zM7lOpZI+HS^6{T3{P9cG;6_Z}w!;8NnL*_h>B*CLB=-YfGJQS}$wNP4ZP zn>-ZW+lVn~u(<2Qen8apVNX>i`Iz|-Z~B<#=A-5wlV_I$5)-oW9+CDg{deu}t(1G@ ztS(pbUf(Hc!! z*Y|wV2)5^32ZQ<(%HSYQuCg}zw}$uLDsq-P=WJ`UD-6hhzoqiI5E)27jp3yK*Fzw2 zYrBMqoItB_PhOw?i1a;(6oox*2*ZTPKFv&9l3Od-aJed#@@w~Vckrfark4c?H1rEs z)|-~pN2uS-WXZMuFO}x=Gu$VdEWpi)pz(nRk`K5vlMx`F_ApY5jC!R{m3)>5=RVg> z>nqG*v8%`fxdnne%ODE0kt5aCiMWyf#Movnul{iL+n;$&d4iv(`y4iF_bF)8l2z@0 zvG&zLZMW;TEws=UYoWMXp|}PpR=ku#pcHqvU_pZxcXziIDDLi1EO>Btch_*!Z=XHq zT$z3L{qFrMnPGl}8Qwha^Q^U=wSHsBr;n`_3rz#65ga=0piAxpHQKwdxQnx@@s+?_ zS3k$N36H@D!^#@kVKbpGF)LMCkY*_-KdDJD?g4;&oP!coqpgwwt$8uYnj>sJLZ5 zyx6#C-}Ac6CK4VnoVvJcNA&nrRz;OL=*GbXMS8AloF;Mis_k85CzW4FYh^6~y+@V# z6WaV93XGDdVN=V$GM1Le^jYl?5>n1EPNiSvB7m~uQktUiF zpGeo%r{>O87EaG(S~UF~Vef^yh2#o3>zkM5ioq)%B@B=OCHQ+;jz$F-yz#bN@19#q? z7B!XNJL5{*-7kYSM%6iS0g&=`684YHRNE zz!rYlWHmtd-F{_#8KVc9i@|9%9i@XG-yQL!tt^e9(yQ-y+cNZdEkN|ni@y9sKxr=e zmhhw-Y>QrE5!*x{MZCL2ybsouLI&CVa3`8o;w1gLtXle}y-tY};V01`VLVICO}+nZ zw&e0xrKr1`Aq>kTIxkwq`Y4hd#>}8jOp@>5JYq$3lnZz;pk2DQr?%r666agx(KjO4 zELv0XluF}l**JCLw)BA2dD=XLfyUdgo_zZ|)VP@F^1j_=JhW7xQWM-qxRH7$$9Q*n z@aqxdA;3_C_8%nbwKwH=%XF#mRC=ccNYT98+34vGa6tug!Qmb)*8}(V2B^#WIMGgr zW4mNybyed&>iXX2x!IXQRn(_&vT3xV#7PLChO=P76xm*?K}r&+iu87i{LPd08zdm$tUJK>Oj;)oY4VeVCBBmuFKcZ^4ks;U*j-_)5X? z#OXoU+!+ziL)IigM&nC1DIZ`7vaP2UIbLdE+!Q1G#BrkR)vMw#J$6RdmeTSiQ9E@f zKA7ML#k_J>nmU^H0v)lgv-K9puIDp?hgO!}tG(c)7XW_J&GH;CUE94ae^mw$w(dMa zy_!N{dVzYNY;!9%y%l{btww06w^c?;I6e}IR(NUft+#OBcRZ!G-PGq3k@nvG#^F>+@K9;|s6m_x?X5CK=$;UY91fWOs%yh zdBWy!6HTOnvilC$ca;R=jQJJz2oL@*2^)&Zd*+Sj;~tG`aeo$l4@FJ~>FCc>_Y^>^uF8@($z zhY>SpH>eZk-pZw}R7i89eYP!a`_#|b7kg;toN@ShiW^r`4MpVQWQ@(Q4UDlc z?Ry80#Eb%`e7FZj$D};wM^=x%JbaS1KDR>VYshD>|2>+nRJ2085EbW^;800tYvie% zWir?jf4fJlHnp^SvQMpCll~#)Av{)ZKgE&aia3cQ3|N_}$C8h6>s&w_50-utf?Tg9 zhSwojDWQANBwssfN`ZFHy`!$H zlAbW#tT*V|%(~bSq_! z|K-jj49O)$C-fXvvO6(1?;?^ZNrLv7r^gH-C`~#Zireim_!)KxK_g>04;Auh#cFDC zN%><)649!$J_XX4dki4jx9njxKYK%7DnL!b*#UITOP<+!#*Hv$pH*dWj@feTcl%pN zwA^wKP^eJg3OZc)7iqqKoP&r3jK5m>l`+~Z(f z54NZXTn?P#A2n3M9R)ziO4Ocv&t_#cF8Z*_-_$3oeHDOocb^&u$JSIg%Bdy}_pXRT z7XW-cc&1i<-7)g_pUm!Z3{YwlR0f+GEf>?9U7?GDt_M~<4;$}+H_@jP2#bNsE2WKo z#?sK#%iC(5yXezCphrd1MzQDD#nX7<_Xy)PEk3vFGGWMGR}ju0)*KIa4yMJ~Y8_ge zd`%NRogG%SCYlEXo25zak4UzB8s$2*HQ=o-sbrjzY45(wuQAi;0b?ap@)c!3er-QP z&3G2QW8uUed=vkg8+5)aiBUR3q+(Q`Ym}9=nhDQGT4MYgHOLqritILy2as;oe)6{rg%Jsg=zP0qJ3H zYB#mD@%8Jfr{^^L#GX_DtsrLyAW0J7Vv2fSB``qwsUpGA;ltGsOGig z99!+I*%Oiqn8YY;jnkCwd1c;;s_U<L#x(^7I@YXJqck5!E`7LgbNM^9s_j|&Y{LRkBS?~fiEPf3^HmK%s1Ef&w4gd^r7 zkE_OmBf*Vu{zLjY2x9@L8iI+}pqV+Pl|k_p|1!wlNcgR z=MDNUh2BWaUj9-jE@he%k4LFkkf1VaGL#VLs{F<$>@nA)bFwYhGr#HOfJM3{tAXZ^ zemLSg-p$H5(D0xxHPSVdgif9$Lc%w9LB`l9xLtV>!o45y9CO^(W*V`J1P{`;{DBs> zzG-t5YD|9C3E0Nx&BMCwNAs)!>hQlR$%qiqQ4N9Dw>0B*=NOXsz+L%o!!T!f@_1Ya z{5-&FRVt_DpC#8op>Po+G>jN>*6&dVQ!?wT=av&{l+V3JM(56_{E3DMk`csf$Saz7 zik72X^#rlk=&W3e72cayU-)`al($jH3BYRKVvVFovFyzAgv~b#hu1@^i5B=?gvc&_ z)Stv|Eng}jW32jp$3Kh<_tI*mBqL~bKtSdOBn-#Y2|pLO7G*7Odp?hepe4~1y!}~s%<$31Kswu z1t~YY+Qv2iK=0R7v~6^ptKH1^xg>(%udQ@CKc+f-MlZEnPo5{8_7P08hWRAVb;yEH z&vdb_j-@}aQ<})T_1J-Qy1Se?VkB;@On-C|4CF@j=x97;JWX>wLG2?c8DYg-F zL20j)=e0BbruLN~F+lFX`CZ90y_MiuA1SW*)jBrF*~w#^W+w$|*=5~u`ebdUuyMId zp5d&K=Yjn#S?LrBF@tq>KWwl>#hit7qaq!nT1YMA!sGy?S5UDK$r_A7?TQH_g9W$Pd@0r#{}t3B|}AY+`Kd+i-Y zSrl{J%Ka0E%O6MSozVwwOls*%$sX;-^Pei?n=;M#*iO-0RC7JB1;hVLa9iexdKQGT z_LmREI0{VR0OUMQFiCc2rXuU{rBcxnnkh4Byz6w2_|oue-MI@c`wzq%X@r|RkD)Uw zUzvPD&7-L8i5HdwlybGh5P}EK@_RJh_9E8G{*t%hO`RN`gGFY>{QkS*N#CI^IZ!`%}6;jWov z{4r_RZPL2#whdKCRp@+*oWb*qhi5uqHnD^ zRFG;XH?Q@W*dvfDFwu?azL5n+T&Hn9PK#<*xBDhgI^m07r$G@qI*X4go=S&^c$91j(ZrK{f>596;`Ouu|-$eO9yv5)z{^OMtBDZ{Tm(Nd~k+%8{<*d&m6*r1@8 zzo1iD0tonYVe#9ieo+;c%+$Ir#Xv%WWwA0*inXWv)0kt9Vt8++(l)u+x7u55uTZO0 zq3>&}>TJaLP?0;+jol@Mba9tkB6pd|U8=urazM(8+P-)==ys5>@JI5BV*znKrW{F{ zqcIP{b1(z;n)Jc9b>=*R>(%AWVO}#h86&*gEU%*DX@qL#nyzhnZi==r7V&MRGgAIL zXd6+d0Vrk(Gp-5rbW4^v1f8YOblhiPxZ8#QfhpCtDj^nw{U8*vzg#>~!o>NY%Wp8p znPQ;^Ass3>IXzMu)@2;2vA?(j;O7oXBInOIs_q5enTCP{YqZ0VDu&N;j*USBr?*={L zafqmyc&tBGQvSr&Oc}T9bkIEE2eVdNG~i&v&7=mjJV(j`*GYB%VoFCx=(-&%&Z*^0 z>(aMG2D*`;qfK@<%?QmQKQr~zpL&j;s&jnKOhPAz7?79To&Ja;q0F_5U*Q=`k3Of9 zwQy;KzF)&lz@>9;x$K%IAv7>-Q^cyHbAH}tIBfpg=2pxom~UxYsMpxNWVxBcvx<}N zab**%K#sQ_H6<}mYKUyHzjJ|;=AabOu>5t=q*PXI)h>Y9f3N zBl|^rhH`qg;+H%;-pMOaXzL%4fs9t^@%PqoUPDP{!rMt zXBeMzV!kkAmW6OF9L{IuI);&%DJv2$2JERd|1BsA}=OXgPg`lA#d_Ifs zhMEuVVDfqPjLtp#D2tM^zL+}sz2nVa`OJ`*gejBiQ8Jy}%`NXjhn?F!NO5H|N%Q}m zquXC+Z$I!!dWFNr+R%Bu+lT&eY_sV9STI0;f!GQF&URQ2RI4og%(KLp-aasXcBx;< z0m#40HA>-}&k>OJ3LE6rG~nkl)+M%Y-GNwP*&ALx`=tNaDS4 zs&f&y!Pv6;+!)ujf1(+2=B%nx@~zHVH4bu%h8OK)mVP)O0)1kEGdSgkEq7#%Gp`~t ziKlvuB1iv>+RC&w(=y<5sI3F->GQy;8Fn`uK4nWM-bqoj4iS z&mJ46CR=Y2124i6SD^2Rcx;sHRkeXMJN81}CJE@t)~5losp0#m=H|;ibd^hohWi}Z z0|C7x%s<`X?dzc#c|Lb#X4F!d0_%J7Yev*Y4=Elm=4B42Q!B#}>IaxdWB+u5iAV)W zX)@thE`Nuuqyepmb`$GaI4EWO_BYXG4-#tdJhI(;(E9N1Zj)rz9?V4VU`Uu_@EGgs zWFX(Y?$7Ys>XWDg_wIQsb=gi)J~`rkcyr$3Q1s-Pi0m?NY0c-{2-{gD16~yiY*?=k zoHoUS1{%CYH1yfvz%)^hUs>Y~>Q;bKV-8=T!ht|7Z90yydhPx>omDIO0H>=S-gkC>F#9oh6a}yI*K5lQ0mV?63S6Jr&(AZi*F+^)+P&czpa`S0c7| zm8$&_0$3nFcSHMxiS0d7XR??Odi3A8w?VSYr;LcLWC0_Ye}Z@ds?RVNZ9VJHmf1aL z@jNVqoCmW|8LLm-qFztWrGNKI>n!)=t(ub+m^TDHEvMysd%_%{VcdN`53nN693%tD zSpiprOn_Y&OuaZ~t_#hsPBV>DgrP+9may$)`a;O`Ve3JahNW?%{aXqei+* zBMnTJ0N<9Pg=w5*Bm2EnUP$)*O?_j3nu?AVe0SGEpj|D3w@}k@$7sVg!W9I$UnAEk zx#b^bVuhT9xIe(;_>1>vs`)E5uD^KbuxbQ{ts(>QcwNSVFwTNV6`14uMVVX4-%qPV z)E+QZBX~X0CxmS3J(UO(4NeF)ZiUpRqP?4e@~m*HY@&&osfB%2`h!_(ymHeXrpe)G z3+H#maC088>WTG(v^rB{q#3XZFEuRpHT1sBC=Bkhfvb2&ng)~sbbqzs32}=mu$Z zHZ|{CYN|A?s-w}?%$$}wL8daa!gAELi@BZ!?L9gNegbn!_-hJ++C6{=MOkkPq1JnM zef3${zW2(`6u_Z=bb;#JNf`v4SBs$Yg6#(}<<_f;lhr_Ed8QP*PgjCr&KXNboMqp}O;K<+Kdf!cW2hA3)k@mf zxe~AB+HV&3H;pIVtCIGxu>#Uz;iDwAH#tgSNprti*cW3qM0G!u!A|)O!$&3f1NL|i zf!*O1Rq6y$FK%>yQW?k4 zQ(T4W4%JTU&`-j6g?>{gR5!ZnfY>W0`-d4_!@b*s+fEFMz>tL8ImD=&&Bk!IXL&2N z`;h&DLtxbQp<-l9mJ>04yIJP-jQ+3~Rfns9G zYe~iW%>1K;$E-{+39n;ji<{iW>Dpmm*sE7{r>-e*K*tiAsOnEE?PqRbrB@3vfBJ>sJ$c1~iUJe{c*|Q-m zP5U^g2Et&M=~k`-!1$QU^I}B&je5M6(PNAI29-uk&q3{ycK9uZflpB9MW|TDk|mvz zHCj2L0oimrxuaTp){I5=wMovn)|zYz3>dg=WBr*PMi)G-PyyivF4g^o$H zTxo_v^$!ktXkWGL+(i_;Kd07U><76&26&ZOg>bRuiFGqvZ4{Id-!_~vSYyj-=H|lZ zDtYG8uKuahL-ox;P_{Y0`ih>_H2K{RW8{UczG#OjAVOO_vXtI6aq$~I`Tp+QYGi5F zpQ>VQq;5T^*UjxK{@tQF!ZV_0uQPgTnAO}0@Br=a;EQmiZ*6tXHe)R~Az}vp(Fp$G z4~wZnh|etkus=YgB!p>1-9YZ=^n0NY^@E9{XQv$t5(p`JMpssU%wDksA6N^e^{kp%!kWufnz|L!PkV123x?ln|S#%3oWy z2d~P`uVxgBtt#_0PU?<3(4Z}xL%l}qJX_!V0!V!~3%Dn*E>dEGiCr&`=5(}g#}Z;2 z4?lb>X}Kk8RM^Laf(!P~QfgSl9fhqLF@Uolq9?$l#6(QcCM7#7<&<_Ce^laj_l7+R zg#+q5n|e8Rt)D`wSG{TJ|?#rWfBi*YNI5gJF-N?X1tB-4yy6r zk+Pb9!S%KIZ zd!j{WzXNVD5wUg9|CYR|&?xeX=krP3xrxsF2qTeAlknS~&ArMr3sd%St24tb44jYkFEUBAoRO)*AS%4C}{ zAa4uxWv%S;t2y<`cGbnr2%?%$G|hPDdSQz*yZDUOx?3;q5+6j1lHH9}J;7m`0((%X zBi;kChMZJ)C(j6^>-|{od-d)T>5qzOCKDl1-k0q`=olwZAEnhvX#u?`HA>pniZ^SHntL4RW$uC#VfrPCkf0|n|93FVr&%*hNxMq zd?n0ETZ$ljK%u3f89RxFzx=HDJsysj6aG#U{a=SaH$9wb4d|8Z;QTx&<>z4c<-zn? z>Ttn#FKP#nB#ntpjQxIG_|5e7z8zTqbFR;X^7=hf=DgF<3K)??9EUKhjumvhjFr-H zRO3S!P7&1n5^7W|t&S(2Ykjkmh5@iWTC8joSUHJcT{;t7($c=IW_^#y1@x$YxSWHY zto2wnuchC&c~$lskev|#A^X$i;IqNn>6jYKyN2>1uGS@$@5$yGY7{0}rX-xNRMIvn z(|UGI7IX2|9>t1)>cxcEdtJs?iMnQzTf(2$Z*p$=DqhxQ{Z@IVNb<`JVJ$snMx){U zo2cc4RILbkmJzp_vZ=KNX6X~fJOQpx>u*tSRU`J^|MUyt4wD<$k+dwrALnl5H(L7p zmhCRj((3GJHK?Fd%M-v?5pk!vJM5!C_KuqpuL1w9MP_U6sP(tVFvH0};xJb+Ra_}c z(?Kri!A>604qIT3Ex}A`x9u!(L8;|S2oY5+tI87QQd#nGlw#Fu?(mxn0oRoKdEsTA zit=srLs~0pVPeg(S^1VM%i!Aeit^diQGwZC?>r*Ea!HmBbLG5;ym@k<#_a(Y+#_7Q zwODG5s;Qj<)OCe<#O_M9WHozHJ=5e{IN*v(zpU`?I93)ww9CbQFopbw=kG^7sSE$H-P*9T8&zCU;Y82 zO#T5xk+b>dSP5SaK9(a=P4+#*1*e#?J%sr3atC{D$wHvdV(2cag3=GW`qnl|#GLM6 zHOF0r2v@_VWyyjUm6pTW3Ct-s`SYcuO8R`DC_r`4h?ZmLBqB0^b|VF0yAG9UJ^YDa zX0)708LXWj_lE8Y+G`I+w=2k*aa_DG(qmMQ|| z25-$OJXFRJQ46^ILNN{%um(sI^k~mn+tt=GtuF0mN9$`w=*>mLu_4N|+%qr}z4fcJ z8$78-Enr{Bj*HRbx~OaMZLqSsebxBXxNu3)MPmU_gE8+-YpEQQCGW5@2Kn@X%V57^ zMTh$K^gI8T>4}zy^q{oK;OXzc6iZ$Ej@*@*fa1{4ds{YsgC2q{fLQ3rP>taGcOcU{ z3`=eT*r~W>uiuGM<%;T}3(3>6`?Ygii`xCRVM%Y%C4!q#psPX{KF8!=g@|*P(cpED zc+z`+)FjTtwKMhlsH=a}A&Ly&u3clI-YjW@N)L|=PV$4kt3!0DBDOHI4nmFq{1fc`!`t7EmKFFL6!!nTCV}eJJe?Yfu|5A|pcy)yBOo{ylIhZA zDUv!YJJcyKT|&ai8v%*zS~Q@m`Q@6zH>+rQ^*N3@04rgy^wF^XxFh5r__*sL#ONp; z)?dEX6B!utV~935QFF+8`Zk(QxZZ7z$KBxOw)C;#v^Ru>0Tqjksr8J%Rb}y7!3x^Q+jnKMx5P-|Zd1eKLqA3%V;qNj!#Tg#FPfxBm6iKHSRdb< zW1}SaY!Od?8ieYnxtuD?Gu8B8HoS?qE(nu0K6a7)9rs+=s@MJ}#)Stv7B#YKHszTpxw%KU)BF>(M5WUWvn(xcJ499GH}Y95jQGv3?M@O9E%U<^ z@KAEeVbQoGWTdPb;=?JFu#!8&VM*;l?GuRjJWojUTJaIyDrs zm8Nqj;4D?Yww$(cU2ZT9CcRMC{;^nXq5|o_NtbWA&}jW_J>77TV!7JzBoRg#xns3>x#)I`L00fYbG& z`;W|*t#2|uPgzZubt@=d4i7UPT=e@h1vGEOJf}8Wo0_vDX+~e;rZ>5C?J2Cy3>?v>?kgqkFID( zUvF+-2{~;J3?xAgn~$IkCcIx2gM{xfzYkZSyNfrKQnsF+JtNDqj?U8Qe+f-4AD|c0 zk$}?fP%_3}%Xry#@=G0~3Lh(NVhK19rd%Uugb#h^Tt??b{(pZd`^+{%txTDcYV>S8 zCjMGoqMhyeH^rMk>gz&U#=-JsRz(N+rrJ>i?<%j!AxXp4;+-iak6s@Er!hJPvCtPE zDyw1b=AAZV%*+_z2QN&%b=}#(lwy~XMH%d|>WM_2FIdDMQp0bKNA0(>0*+s*`|SKo zFdoV1c}N-(ymE8#xV2YraxSNZrgsKl=CB*|^hY;cQZ-y1U4dEbit#2XACVYLih}4D zsn8OQY`C-%@xH4m;2u5&7C416R{XAZeYetxy#x~brlma6065t8P9i8BF3G7 zMb=Aa_*1B0N-f>GEwco*Pew8!(tTX0P{t6>>EKUUQ$lst@Qsk!=^_qtvZ4?ro3`nL z&L-@PU(L?oO%>d~kL)fY=a2}A9vs-EA7_Ss=9L&XtGEsn>d|G<6=GJPE{xNnRnz~L zok=Fn+Pja&ryr;gmBpH!Bu%2$5Jb*|+%ll))>Vw#Pej?2Rj;~RhuJG%_C|VYo5dUT z+N6TEB52$_6JTxZqJ<-Qj-5-JEL{cr`8xu&ggd-{g>aKFg)!SX z(GnSK*(Zjy$>Ay*PEe8GJ2FKvrw-;O7_iiSMiy_Qk)NC7?)VG-ydF@c##NRxA1DzN zNAE*EfNyjeD)1al;lwkV49po^Tu&gX{7grH7Vse+S1geLi-THJ>}PfUqVa6p%F*`! zmt*zka2BE<7s?QVUBm@;=u)332>$v6Ag}xhiZv!S>rxQDF6=^L>wc4FI!JD6>rCZe zUCFRNA1XlZFjZ!^HI#El?)-goAW6)kxEe2P0nB7sw_@XRy>cQh6Q3_jZZ-R1a~eyr zrx$b9X~}71x!q?65pR%Zk}LP~rwp%41lf40weW|Xb)4<*4@(jV$;A(~O5;)H+Ii8f z^ebUEjwvP$`QWvpnN$D?yLSxbl;jVaKEh_DNUtvO!9hgAt6YyO#I8hbq?9usD-qI~!>R+Iqy+ zkC$k}Sb6fFS^diQ3&BO?0#zaTth)3R&L$Tt5I?Ot_Fi!u$yM3jmXjOI;irW(7v{~* zaJ>YM=)!9cs!r9`4HXYEHd13KjO6(RH^put^GEDeVc8-|J%9M9{NaNY8Nidv>nI@Kkub0W|CxjOV&zfWSRb}cOYY@)3TsOwV@4YRM~M*HVymzPFKtN!BCeaEP_NocHbDw- z9>dZU{SQTPKogZV@3*)P3;pFh_gIFmYP+g}!LOv=?)M$+v?*#Nfov8XlTEWYtW936 z%BJ=2?h-?25TTQbvp-`|JhFgvb`C>2NlURYI(+{h%GX~-u&to&JHWCJZZKDs3Sc$B zsvP?L*@q@(75hARSNmww-be>EuXP$)+WP?Rf{gjJ3i$16c=haSP$1y_%J(IMjpZ# zWsFdVFYR*9Nr#9nQ+P1_f#Cs;r2_jc+>)rB&JCNysP0p~g+HK9 zq;>4-%|PW`LDKsDqJ*-{#KT4(s6sf}G#XxMT>g&VGBR)4c+YG zymvzDL9c~8gjuLP{ZR9d+osXpLSE>+mE}0c4F!FVqspc*klDoclzQ1axRzRQep2ixzr%xbv!eatRMHU z)n#E1ZIzQ>dXaAZ@wo8pIXv=v&VPStwh8-qA^uldxdt(q509v&f!uV!bdt{SMkCFp zOEi-}6n#F8Xj&G#m6L48 zk1zHU-M2IrWVS8z$={NOb~(G(?g%&vN)vLp=P5?KZp@n}ZbJuuU?o{>oZRKqKS`|h zyKV_wkvDN-e{1R#WRZ^t!cs)mS$=+w`~%H+w?-!##GFOVqo<7rY{K>`*bH^;ez zIAy^GR_}!>B)wmN=QyF|$oXX-voEUtOhKr3B>DQ~>w6-8O|50LQ3{n-lfj&7GJ)r= zZ^yK{&T?NWX9yp|gouDa%)JuNgqhzgNm0B8tG5|@&trO?iu*|1HMbo}3VNF%tP=}Z zPgLM7LwKTzNZu;b+z%eJ8uTR+WGRLkzQXPJ*LL>*`rQ0EQ>rWI_V)H8CmFmRex=lC zz3K#ar>&~?^L4iCgBrSBqyPQcOYs`7@>}R_s88aN;OwtibK9%5vd0q=PofB{r*+kj zv6oLVHPPHg*;a<%P_ak-ta4tVYSS*d#`lEHqd-2!lE%$$w8A5%WNgq3L(M%8(P9i=p@{OhlH?qb9jQ*|5(m?5CH6 z7^ixf3%Ytubs-HZj}II1Gn8rCFwG!kj#pxn@nJ`n`YSj7#69BQe#<9RzxeS%v3X_| z{9cX&DPBCEcr4nGL+{h=Z)+iyx?+y+eRD6r<8hKMj(;=8yq<00~ zUx)3QuSpxs8J2n|f0WSTGRW{IUjP2#y%~*A71?Bp#>Z#DIB}U}?Xjvaf@+Xr&ZNP#&EjxpK8voW==EP>y}x zZv;*H#P=&s==ZcqQ)7?)$!=<^!|5z(qc^>INg)9{lur0!=O3PUCi=|3())M1yE1*k zNaN!0@NnG5PjsU{ZDqRG^WG_Xyi%cK5!(3go5SOGMjumZK(HFO(-(9?%j*G|%%G)7 z*=aqP=l8PT8Z~10YcvXul6jWP8!_gHm}AiT(<--f#e`T!J`9WQ0YdvNEvHd`V$3{5 z*xDFEW8H?}tO_yjY7v^lw-1OIl#S+<$vSTRt`}CPL|vy}lLhaT1oif?JnNFvlLaJF z%H(-Y<46zr538sxhcWd2w0U49p5pS*Lgz{|}wSePV)41!~X3 zu;xCN;H{EKEaG<%i8VZS$7Is#qZDbiM78m(v?^-BIpHeFR*PH02qn{^~Az00qH>%oEagn%Zj z6}jIrzZe`Q@t;((X?VEtGVC%^5!7BO6<|4Ke#097I1*_%?$d(_zB8>yb$$ER`jh*@ zNx4;p53x2^FXhQQZS`H5`>tcJmJ0NAY$`puPiDi0$}<|weaS7-{w>}EK7}JKA1+nQeE>x47*%jR&`a3&;6s11-rHBbabS$b61}~nt1jYr*6f9--dC^C z3Dwr3T*PHbBbH0OErmQ)Yl6E2JWf$PJokS^eE}_k&6zvp2&P6?AATPZ#{cS9g45(F z%PQP7ZTRwn>DcOOuswhF)QUPm$lT1ji9iqqH92z>)peS+3dHKt#S*5Y<>R3#n?TQLt8lp|=`2FP) z(*YTWoqC>J=#gT9%H;Cns=pz*=e`bI+RAP#2jQ7i-Am6pZwk9jkX!5Kj!$Y zNWUHPrAI%De9j4%x0yi)&*gLHR(TT?AU^KrODqCJ!?qyeTYDs?{Sx~ARI0F}4S$~k z75;4;Y1U2eGZuP>B)Z`@!)->>=UGf|RpYaU6+p)%04m~NTFj?&y+OORz>mi-n}t-c zpFU?cfuGu(EWVQRGU*c}SDN7($*X;PJM_k_gSFU*$kGspHX!PgM14QGa|pqqyab+L zOD2t#bUdy5zX5?15umI;X3UR{mg{>vaTahzX`RN%AUIvCe*-*Wss!t8c)nLu13Rn=DTFoWoRfD%pQ7kaIR^JX}O$+G-r)dip~0C^L7x7 zW-h*Vsz?YvYw%5OjDGyr;q*e7HeyU^Jgg~9AG)B)n04UE*ypw#qk)dS!tC;WCI-*? ztVL$*Z!7s}RX7T{jG!MX4>F8p3;dd{`L2pTE9DsS&gxaEhO(OjbxT*-_m5g%m49QP zzgiD~G)C-eII~0-$tq$~4>&ak^`8dsQDy+%+)#hE;L6U{64T1>iL6xQx%|xPyO{ol- z-G5blLUipv@OeUGm7yw{n|Zp2gr5~%pnEIt8{2h7S&;DYBnws1Y|nhby;rT{n|n%{ z^>g=R=VzXll&D;dLpR9QVS!t+IO~CtV$+T{jMIMeH0_&5o_*TpY*pr8a&ShRP9C0@ z+5~8dXr(|mx@ZHgUAt9`_}EAto=JPqc@5$N0UoE)DfTZ<%mdy{`LIQ-*5Wpk9Tuy`wQ_one8(_jT? zZm2eWuiN&$RP0OdL=7s;(2hP_&@W}Ji-@2ygBN9qcNJFk5R$M(5GN6bA$=H8^-I#T z6)f2GNyJ#CV&0g(*?e^SWrS?%C&l!1(Y>OD1Z@wqKZ*@fR&!c5;XUU*w-U{ z0e88UdcDyFchM_|?C9s6dOwb<#3OLFBFii2`RRT_-R7Y6OcOe&qY2c1m}v>LrNi5tFq=thHF1#TPw0kAejOz-Y3AkNg_o8;&K>2{(iwn>HO?zq(#&X?8r9EaG1PhDy7WG zYx%jK7|Q2@4;|0f0rFpHnC6u*vwZ{RLpwwllTi_mh;ibss}EemAidEt&hP@$pzfvW zHXOr3(fdJ`eyEr5v2t6euqGg@xjF3&brB2--g5bG&q%75k%_JmXj)W>l$4Z4)@bee zk^G?ZzZ(von&?jGX9mPlyXL~Ac^Jxjdp%!D#2)-63?`3Qelr?t{)?R{oZxfQcNEHW zXVv{cV^g@kQnW-YP8r;7uXsM6JN@>2M@+-An%4bR@ln$K?&4>%J_C_ZX8AHOSRCwPKzsa0MadRmP z?#?D|Wk%xC)?D*s7DW#iGLZ{JN^b?Kovr9Pj=t-kU4;pK*4HPO&#G_H#oMh-wwJcs z8di2t2bEX!?{m7CQ9;%GHcf{$_)i??%nH#ME8|NYs+QTqhCvhR0PSc}L$RPt zyQh>q+2d~onF!+$nC{@$Xx!FU*%Sj}R#?m=CYguvYU=M|_)>T0J_gaQ3@qyV9v6Af z3s$+BD}cgYN8wKdYDxAfV*3jlDg+7j8Bd9Bnw_!pLlt5LM0wL#`^pNl%?BhNDCuGu ziv=mx)zKaN&8sDw{abvOf45lh>L&u}3pBCn-D6eNGc(bjK0pn(8v}#zLy`a(?4VCVu5OEyHQy1f%GXC zK7vXuEy4VpmqtmeAHCA1;&w3>X=~-5h$#c>kiTlV2r+Z^PPp*3bd|jSxMP-%X|+<1 z=IAwZ%vJWan4`EiqHZ z$qd771l5BqJc8sNYXL!Gr6gpR)cg4MTf7gM!0OXaP}O#uJr-}qA8$6Cy>PR>&+}O? z7kZ064G4DWecGPq4h;TE=0>(Ujsb7e5DlWHcGab+Ve;89UzhZteH+1RP1PSsI5C~4 zDe9j~Xe8-e@#fmU*ClN$!gxI|07vF55+~c{9#h1sJ5mnWbGckAcHaK`BZa87k~g5!`d*@Da5K^6RV57zoHM`xPmFqswMxu3(ebuoolWwFjq&~}N+ zQP=EJVWQ=A?nSZRrVJR75(0+;K!X{=870>frQ0=g)_D-?COv3n4i|bL1#yk#_}bTS zR!)6m0ulw!r)PD)ukj@GV<%tglj(p?WmhOge8x_D$!)!kf6aS-dG=)(nX&4l_D5c3 zLAuBbNFQQr7Wl%)#;EJz)!v>u7{i@9SxixoR+%$i#+Q5C?-m_WyqvrFS_I8d!a$%H ziH~AeL^6`Gx7{%IRgf_N3ak0b;iD=3R`)6)&7q;@dk2PCb3>RlWaX`v#9guQHz$wHh0t6_Y2bJ>6s;?OXaGjkA4!HtY@k9MpK!!b9qD zeP>`*;dD*BbnSV5yH_f)P@!4W3a7Ze-x?03^f>l8+fFiRfO{(b57OQ;D9&z88x0|W z1ef3*+#Q0u2MfX7-61%QySoz{g1fuBySrQC{yo{>nK`Fs-l^GD=WiE3x~N`jUH4^o zrspF^%Uer%9~S$W=;Jm)c{t;8>%n9W^lAHBmaE><#U_q?yXT8@@zM|1o7qJc%cY;L zCzY2DSEKXAWvfY6^CKO${pkw}*A!Z?4Tu}H^V)d@8Lk@V`@o&IglmD8yl9k)ci@N0 zTRv-1zdH8({VmR_`E*Y)my^C5%h{eeDy2>?kd62vKwkhKOt~D1rdqIMfxza&<`dYb zD=pBY|?72?+lkmEO^4@HbXQ*y+~Y+7zB=c9oO}zh^f8u-cXF`U7(o>etuniTsl=o$_1I$ zmk&loT*{aV+cqlvK%^f@JbvKoLJ($tPU@dOsdK$7k@Psr(xUFQ;shmg5Z{?kj4rdP z^8bLz9^{~KBtDsHFtT8c!(B&tqbP`VU-{OgOr+uP-na~7`mRvg(a?H%GhQJa$q`7I z^@(z1m-!K~Gj1XOHsu^mb&;5h?}E!V#LA`{rufovH8GFg!ziSZN;lgd%NEY*%YhTR z#=FxND5XfoBfKC`CN`&pupDK*+gktE5xNQ+aIe*wv}WA*jE3#KY*GLr}fCNu$-YIp$CbpUxTSpfPG@iq^ zm&f^bnu8|l>(gc{qSp@ZW5;4s^MwldBC*Jfls-`$#}|+o<~JLU$1RNUEsv99bjfJY zTjLBpNZqQD_O$uj+hL5Oz?@jQ^MaNP4x8m0o5mm!HL&u+DG}@708_Ey&JltQlRHi{ zd?{`1rcCG%paEm78aD47jfP8>O$%0wWHWiO_k+pFreNv6YwsoPzH4>6%L3LE^ZYq) zy(?z{z2e9xgswU*Hxr)MEo-gSDC+clG~Uqe|EnkN>7B^ZWonSvGob{W4lG;~;QA(P z46m;h~m=C%w5;KaXaGs&4*X<_F8k8 zpL0-{6R|@#SzDWRT=_Y2GKN%2k2J@fc9xXU7YxgeO zQjxuE@3h#={@B7+S8QzR=VRF2oEs9$#sn+HjYN(!9*&`-M`JR=>z)rhE`1TsejN~m z`HoXYuESb$+w%1#JNaDOqr$w?gFoxu%~8_^8WMl?S=FwKIKK4f{@|KZTqv!#*uola zcou{D)@x&kg^0=Iy@Eo!ZDRB_+rcOAJN6OPTq=zCxSOa{${uI59>)`Tz)tw=R zZ|Z3SaV&=IrTuZn4)q%Akp0C=pE1^zr?*`yB^sq@oekPpzM~`PdJlboEj6eXBBH9L zK>}v|qU(3w^s4Gm_eWG;EjFJ@HKIy?X98m17D?GgZat)KbKrejU3~3jp>v?$$5+U4 zTBLFH?-d7Yiuj$G285<0s;nhUHMqOg6hZ{Z=hR?x-H3HoKmW9fq0AjGqe9Lajg7?n zpY7<+wN3CF7{4}vII$X$FFE0X&A%bn*g)N`I%yLVb?}8Eo3036%{8c(*q&t8)|GGn zzrgrENT!ZIBOR0lX~?NR!JNA_B@(gtvkKJ{exwDqo7ioLpYJ zMJSHGJ9aEEEiV2r7;HVIa`UwQ_NTav_B4|3Rd}s$Md%a=v$8c^PZ88!AN~;#>(6&M zsmu(sqHpI8#rL=-08RpqbyG^+x^7}&^KJspcC9u*uXVI10D@-B>Co;T%89Csdh(U< zZ1-)X&?v%EVIF3egvx8|%R(oyO5(F(jpeK!<#M5ZqSz<7#7N6Qz`JC6w!&`G<@foz zI`c&XW7)i%r`Gnkq8lN{@#(IBZ|z#F>CGFuJ36I!lGD6g2w?4b*q!nCtwB#(HJbrA zQzfd^4LR5J*H=;?8C3jK@vC)bp(~kV6+9(G^89dAtiAYv7NK{JU*h3(nqpE=Wk)Y( zS9$*+*rHt0{waAc&7do%=bZ0(=oRzOh6P;Dl!y(KUb?{dS;J^)eOH07pP!bLBxXF}kYJ9FwP zADN%Wv4nO_N)x>MICLJ^Hm~<(4QIf4U9q${TShADIYnUXc)qq8=a0Jz_>r>6Xxi|K z5caMSZ^v~6|D@taFj5e9yfh&-Sd40cOkM>w`~8Rz`piCQZuGE9K2DHH3f+fcme`XY z7CXxyAi-6HU7Kwp$-YN;s$1tk=MOA1zcL>2BXx591VznRU>6+sh}eS9 zANLio14rlx4MaSTzsaZ54@`tsiDYpI_+ymuyxQIAWn-xdYGB5g^AeKR6a(-JxwE{I zJX-4N(-)%}Wa^|~z(8Vw|0~S3KPJpNWr>VYwLkEG7tXzyFX(ju(B-=$8}OUODl7O{ zJ1TuBc|nN7dOpi!Y2UW`rENGSdaJ zp-t>pz2tlk1pWb~9QIlT?a#aDmOVHuCXh?Ifvfj#efT1FKVrgWmCr?h3KS4{P=mZR zd04B+PP@ef8SrBiVF3=JIioT5yv=U0C~j*^Xz-x*IL{r;%c-@KV6Eilv@D;9_T!X9 z&2gFA6tHAeh`#l@i%KyQV;im|8EYb+mi8UF_J=UNLb~*{90LbDGs`6E{IEpe>d4XbA|+!r_kz_t+-szqtCPO>ee#=pVlt<;WAO`m zrO?fh7ce7ZnNjkG1OuRmK#S*e=$~n=modwjJ9(W059cmNd3$>~7xQflCEkMz)s^g~ z;UBiB8%cf&7;r-i=qe?lfe>ie7>QrKFO>ps99J@hhUR_M)BQ zXyqh?<761n`yg`19-Bg3sp(V587B=URr;>VCYd=7^t*0u@*X*U_rMuZe6stY&ZCI+ z*yPG#Be6=dUtU|XIwql(^39pQEC2h)JU`tv^evJ$Oga*+x0lK5)|f*f?*xQn*pF9K zmf*M(IhDVXJrBXA%R5==foF-HBq#%=KlsD515H+J)=Xbjl~fIsOnUyR=>ic89omm= z)xbOTQ6STRB=nC3%No){i z7FLi>&ngR{vn>03>uEVf`8i`za*3qZ+$o?UPOSuaI7!(fxV?)n(7;H#9=b)3_r=pE z{;RdLd&12Ia(g}cDBnNM3;%@}@s9tOYlQRvfloCq=DPz!)&F1>*%xnZ#*mTz$O6A^^WogFb~?x}F_iulA%DH5;k1rx3fsH{>k72# zzkhJ7%@>YNzsGZ+yYg#!bf#FD{;`jpF4yzrvA7QO<_!$8z9xNPi8^}?aBwslHBqnE z1;=K@?vK+26Tg;EzwG~7wk%hyGnER7Lv65Xxja%S|JN-))X8tQB*^>MIY0;t?wGTW z_mPR$MPL&d-pI5JsNijgg+=zx7IjFkDkIBpil~ff$YhBj zehG6XZo9vxo9v!Mox)TjI?9%#k&-GEe;kRyWO4Ci=rGO@zK>u+s7xfdC>&DH^0^q! z(&_-1)VbSX}-<269@#9JAse$nZf;z5bK2C0L- zM%NoGmd0Lr$($6(P?i5hk93&)Kg<9$gL-`fEMN0kowgx94t{Yq#eu}QyiG6&$K!MG zr`UZ)bDk6o88@VDAJKkXtMwmdg7Lw(6DFobLumZW{91!FVEJ1qbFs+6G_W3th9#@Q z3!PgZF=3ais0yz6eO)JkXMcxw42RoGIob!F3}!bjf1=dLPspwVt0JwRZwOGP)|67~ z>uU!HoQEoTQ_TOZUpI&r^69L(oQ$x*>fs-L)E!s{*pO3cafqfplH_K)%*AszzXg0v zR~<_QB&eF-yxS*_T9pcjgaXX7)U8`RmOmmAv?1fU>`c0H&Zn4{iP-OtWCgoZEtZ2` zLhJNPT5mZWX5>|1rDW&)2c?oUnEo@nX84e)pTmH*k`h zSMKlLJ&FcLR^<{Ra-H7Jn{?a0dPR*I8;JC)Qs%80a6`jE_SIn*EJ)Jhu_SAgZK*Ja zv4jQtta|*F#iqk`#yFhSWUZxf=tY`cQ|Rr!|K(%5H{^T)sw}snqlxGj-MiIw863-+ z;G^@FtMQdgn;fm}Zdc4TA^koJ>EqIRUIOlFbOJTzNTV@#iPTbj&wGd@s8HU`@jx}he0Q7*_va?Qk4eWw-x(#QKs|02&>mzWLgk%ChR_`11M?iYj~H=z0W|LO&AI*3`@ zk$f_cLx>U2pCSm}K55$aqB)G#&R-=Sx2V)xl|+7Asxz~V3wSRN>8Psu(kh8IKq7+1mMBIjuA5!LETPL?a5#^uxUEMU9n&g3 z8%!0M7zVg7toiLPWdC7w|1XahpbYKm^JCYO@v$b8$!4^GN%yh-!JAtV!z4Ff;Xhry zB%%5|%(!%^j%9(sdmki-J=Ie6cvO7ljdL#ValYnZ0@N+#iQ&5x>L{c0f}>@p@ZC-n zfN;OkUlQ%Kp}WkXx15f4WcG8jE%BHb->vBy`4X{=6r5?ul56ql0Y-bvx1+=xy^D>k za3Wx0`4!VX);AEHb1Q5YtN3$nnTK(&z$@pG@?Ya?G(~xsHGiH zv@?nb0B2|lgRc9TsDAxQ0F=FbLRj8P5VP6L9x#okilu6`y7ihj9>|nEV7pWZqAK%N zrj=vFRHa5P~tT{@o331q_|YGKJt_n7-wWAz3hM+svM+2DQbhYEyvGeHr+25<#O zQ1f>n*__{!MZn|wJa>$I})>!@#U!<6uo|WZ6U6o|J>?v?lg7R_O`xKa7nm= zm+oE90{I9_f|FibL?UFGf~*-~XKA(wV@VgX)t@4n=F`qG^O&0RfU$Mq_iZ4ILzJa< zm)JhfG@RA=OyhA?QF$_1`vqIm^8t+|u(_CV=MnJA=ahq26x-WV_9`v$bLrahi6BVu z9%Qi`C5?6jX+tn$SY$>;!+Vv|Snwx4gy$!svkM!#HNQV{&AV3-i|$s_8@=rP(CzLL zE;y1+V;>H}72jVHR%MsdF^9r>gpt(x^9A48fa#he8=;zdj)-%_DL@T~{mqcyi8`bR zQp2%+b(EfP0AtNS5JAJ4o0M(!SGlt3WFZ98{zAz?rp@<9L~uLKWL*5Wh}U|bCJl|g zx$nbfHzzP2Wab0tOwjXhEWc;+k(+!h)GvHXf&{;r2?Vs+e@T45PGjc-UT2#Oi)~fH zFpEP^wgZ-^+sNzF6RS%10Jq`U&>{#8EAF~3 zTRP=NdOZ6Hb}MxTy?xxNl8MCcB`flgChzJAj{IVT$bDgh&GjqQr%Y2oh7n-B+kcoY z484$!JGDPiaPCCi?HxJO*2dw~Z5cE~1#pryj(TV@fV1VJV3!@FDa=78LFLk1y_cj^$iX2fkPx0jo zgZjIThVh9`rR13!77J86{Vf^JTl=+*<-eUev7AGhqGXn~5{1P0(}cg&xKBY@GbJ>7 zRSBr=85~#YR?zfU7Fy^h@Q0$lr&v%${dM-SKipQ&%SPAh8!{_Byq_OSqdzSAk*PZ0 z>m}*+eEV8A-%n_BFY~g-2z-3L3@z6~(qqwH*F5gw%jrRqEUi*4LG<0GSQUrOu*x`! zd3-Q^fB$FPjs^rU{P2(jtsZe|kGIS7`}LDp8JWs=lx>Epjc@rfid%iqJQ<Z$y!Vi(Ye#@|xP^So9N^Z?0 z93)GAdfmii*uqJvh2>V0CHK62`?!udbOuXJfXefo+*Ba^F@@2fEHC%zUsjv$P{kN( z$DCIsl`Y}`MD_|A-#()r_?-_AD9@XHTW*y!LfQhJ1SDT&DEAaVPnVaM(d3qIHI3v2}ca3Tec7ByJr2MYz^1U4z zHwxCzVsXegx*q_eLHE1}5AiG8_Mdq&{^r~sJ*v@SEMz@jn~i0)zvj}I`=NjiIjSDj z2meLAsSe#k%AS5bu=}^DHziRhPEJno*XNqj_{%eAng8I~{xcU>!NkO1I^~z7q>Npc zJ)L^37c0$1%<=IPWPxex?NageQE|B(pusqr&E)4$ljC<9FH|63*VUgw%3q4`(jHm^ z@}mAozUD6%9LphcB*!@m(gI36ronCI=8rRi!+{V;;-_50P{W!6_((M(?RiNk_Sg>RJrEf(mq{-iCQ zvUY7yiRTnPY8;6FsMT~_rhd4aXxuws7qYl~>n;|DL9g|F>gTV1?LK)#-p1o7p*10) zK&!$lyQ2kL0={UOC%tHbZ`--_MV3?BsDP8Zph)?fw5h7yODE#kG-_VNw=Kx$c1DYk z-2Eziwb!&6Olys?p`jTlt>&)v&K6i2(k=01FQA@e$iK$~A7pBwAy^~AWnXGfaGn)8KL~`C?KQ5hTUiJXbR}Gpb<1}69Zpe_;Nd0yw zkCy3bhBA|`=VWdPLpA;sLmHY~-hNf&^7gyay=va`oSTBTADkvZye)!}zW$}_W~@U! z0OBPt`gGLPZ***72A526m=nz~LM$o7gmLCa6TnrGY2thxPB!^ctv_Pv+t& zq>UsA`G%H2;zG~zW~0?xBQ&An@tAw(OMYKCIqX#w(pjPcE5Z-#BM-c(G!c!m`Tw<1I>dHh_^#F0yAYu6ln8lnk`{UPab+L zCcA{X>JQc>?%dZa|2Bq;f~p;SbQ++w`eZ_nxVh)j< z>Z_=)8zR`l`*%ju|G|p4F*@EsVpVv5T@ZPuM0634TAvcIP!hKN+ZTa8H$JoCW1Laj&(~40R5D3&I)sQznlB_(K9w2<`*9VJbh5z)cx&(ex!+hBt;(9 zUJk(ni>A#c`>ZJTOl~wa0RTJEc^(YR_8RZjnmNXqw?C^L-x74ptD9WOodq77PUlat zw_WCS75!wYr)iW#jeVA2{$a7S_2RpWIvmwqwKb8|eF$6NS!?6Eh${O%OgHaUK8Gz5 z?DO&Jfu$5xT(0jg`RVa=n`7;9{KVLI%XQKvt@AG~NpH>0HE{(MYdW6?_2$n8BFE~< zAUXMw8ZewEzTVbz9Rgjgy!jGmqj8k76N|>$n2yWV?bTqCaalY*S(_G44>-9dl{q!3 z&7W~iz#9AewD6~^@R9kuuLL;Zn5z3noW>ip{rsG!)Cu^WI~V%Uj3dKr`m3HJ+A&%E z*(3oAeaV__zoJPm-ah_Uv$oFAk?TR+W(Q zRpiuTNK@uV{Bitnx*+l2|)N+p*FQ`vxfUpnY1=)L4Q&WvCMpWAAWY$@*wb!%X0oAuI0`2{{>Ce@V~ z>JfO6d*^*0?sPglvWqD3{MY*)SmXzo&K!*`L~b@B=b48j9OEe;zF|dN5@Rfp9tjP$ zepTpK9i^AH`cJesx}?DH>OPoW*_UGkIFN)}B2x&T1n4f6Hv&ih8gqwymJZR3=Qt8v zLhWu})k4t8{X&hT?T90>KpUl+H6q>TWcOwph%E*4Dxv?;1yCEhfp+WsI`n*K_xk_w zoBg-v{y)?3B|UH_&FgIrfYV4dnE86c>;v2o;SU^=zvINy3L+t6^obv`kYOpi9V zXw{sa%^iC8vIno8)UX|4dmZ6~%irCtrN2lYUb$@Lh9QI3d|b8+1Fv53G$`99RRA9R zq0nH(fk)ZSUI77QR_CeU)tTx`8o$1Rg*g^a)9l-DglRzEBzK zNKNo|m_paO_HvYFE|Oe)7$x?~O2;Eg?XL9}-1>m}@aR=UMI=y!`RpQ7C#{}l_Ks1c zr6yj}-CzgeL5+RSILT%2Qa7KdD^PR`8yzekS|u|+>jp-A(^Ko|7b%-8V5i-HB0LP4 z+aqJss&c423q4W4No>qHaDP~C1xIZPoAK!)kv2RB%USs`aU?mDZco! z(p$r$@z(CXDveeV6l}VUif6?<+T$YaGXhSZ=HWSCz$2mtVlmpqZ=rP| z#ML*arrVTtMnjX^sal6FFhmT5^uW$Vxf_m8qC zGBP)s!7gPpVielt%lOqtELZuZRPXhy`@Y|VU+^cDl(|~GaLHuY+f9_zTzFwIBzz;} z1&2*UQz1a5NYOeNklSC?#Vx`T|K0_}M|g48d@V#uks!|hZvFeu!~4I+IWCM0`DLJE zgy0x<{0iO0t7BLkOPZ}fiin$Jr0uE22-LmQPgV9m<5*+H zg+~bE5wrLHOhhhlzB%WM5{<+c>JAM5oz=~@qtMVGLH&fWbvLw@Lr4E(yW*>vCFh}( z%nzYyCC~So(rRUPP-{$ZCesN@p%^@bGHO-j7>h|GTnUDBI<-aADhb;ks0`Japf}pR z9`dbb)rO-ib&ZNK$)P4-dx~`MWfMO?9Hdm4xm`wQTIK8|!J@Ya6yKdl00ROP?G8mK zI_(58LZaQg`S`5zKB(cK$YnIMJqh%CPySrXBaCc}z!Wp#2pTb@i#|}d+b^MAB$_gI zR$K}0dEnJ0`S5H|EeJMlf{E&GeTEV?4)xlZZmIX^3iT+e_5pFzzUPNhxjR?~zb|Yx zCE~e*kdJ2rq7knvo&}l`GQCYZV(Y=HV7=w^tm0vwfoBou);V%P z3jPrXI(3@V0Asdg_r@d~Xxlex0rM5tnbZ(DxW6%n1nnlS-t5eg5!_L@R(YW15h%1zS$a1iH0i^9nfpbO!T8nDEnb? z_1}%q+R86x_^oh~-}zYz?!F&ZLSpA+K!=61v)8pCG@s|wmM6Feq9(}0lEmMEDjlkw z_gAMx&ig=PWiD$Ulyrycw7K0iv1TS7i&xNpNPDcK2 zmt1OhR9uhUa%sjyt1U{w6WB8GR;9MfI;TQ>r0rq(tA$Q`z*K$M{Cg&Exa?GuT(^Y6 z*qYmUKe@%J#BnJ*1s#zzjrQZ#;`O2euRs-nGhi&-vb0>V5OWv&sm%!-buF)c%jjl|CH%RqNC0c}_Gjdr{i^Iinz})Y2feOt-VeC3l0jHbj6Er(gn1 zlG(f#b_l5{ux_cUQK~F|4r+rYmB}A+nkbjHlG-g+>c4&LM-m&a*!Wx-MUaKWgW&@0 zs>!{WRAvM*JZY$2uksG|D(}9ICbOb%(O$7F*_zwXmqa5%iMTDz?7W zRh1&dnfr-0w++H%;K&^(i=i6o(2Nm%KaI1+VJcV|KS>8*P>erZupaV~oOhFHg2~%xe^-}^j2kw_g zuvBST6!lTKqkm5>La7M8Od}l{lsvg1ug1Hq_WMALiR=A*fsv95rkoG+AaSX+>4*OF zEdmXs<9z($$;W3zSL<~r(30Kpsd!2~@2_X$d%yDX6fR@JwO@(mQS%cIfNAUwkExBj7_+}H))n}uYHdYI)7XCj z|4744SNiU=7ITQ1sya+1id{yBa$*JTtDLwB3%W{zFWw&?ydCVgrJnE52}RMm%AqG3 z6G8}ul@E}z@tOj~8J#HTmjd!01@26s$JVlh6X@jbg!Xgw!OO-EvX&PGisGM{n!Npw zNR1H`O4?{(alq0LJUf0#6790-!XLC_+DqV6?LJ!_-i1m3q$gln_e#-BQPvM1zx78p zC~OW5`V1Nf%Z_1UI60NZ9x(K4{Wpxs|4C2%*C(%~5epCxht<$+ULTCF4rL?jYJ5Ah z0`VollF4%Crx83i#-{66k~6@sWo7)X`gc^A%By(+h}y0Q)Pc@ zquHaynVjX)Bkh#?4FQ%lxeU_`He`C2G$)aII8F9w5j+L{M)?8#Ft@aVE+bF}NvXd| zQP};%49bdSfAl?NwR56eI;2`qH9xT!nr>5ug!+FWASxqIcU{Lz;A<~(j$_^5wlCSxp-2c4ZPC)4$ ziZ$%t`k%e^NGjlSo*FLy0y&)65T~HTDe+UH40h?L7s9}gOS|-ogG-x-TT&OMilJ+J zz9J$4ykFOp!>PP|L5$y7`p>Zwy#Hmh{Am?(^u4ZE5ceYQ!S+YgHav_0%fLqI;e+`e zqTjdwA7HQ}HQswnWWuk(V5x`5+c>(2ys`Z-d0KXeq@8j5dS)|?m%Hn)6;S4i1 zOh4>-$`Sy-%J4a_I3i+HGKFL)SgY0b=0|VSu@SjEDQYV=gN{x;n9l$3=iedj&~5$A zn)7C+T(sG;epMp1ZfI2a#~UErqn>g$d!3&wmJ2hRW&jH{;4PU#hISpiZ;;Bk8oQia zveVd<_ACaXvi$aiWJtLl54I1cq(DDal&~u=!UhIS(&0^`x|7()Z*_#M{DlJGidigx zW&&R_8CO4mb&7e*_+6w>F!2#XBfFrWHe^2i0i;yAIymZ)=3W0DNF$RzMd&O0TgmK= zj)hf$IM-v-KFK4d{?vZ*3e;QJ(Wsy2;0$1B5?|1wwQp=6n1;B(g|Q0JBj0~ zlvS5yI-JM8$z;#^Nr{ze%}C;bbIk^|Cu5e4f!g1sRW?8Cv|)qb#h`gtE1FWmbZ#sN ziJ4zODdj?k_);mM_r1HKoZaX?5wx(gX%sTofIJ0;3MB=wjQ0y;ix>*Jdlz2Ng&`n= zs#Wyx?F6Zb(B%9?QeSlEqDa^v1rH7Rv?(NKlF{*>;mWxb0)=rpIDZ4o@^TfC)mZT%jhyFf;NsQ{ILMj4Seyw+& ze2Iw8eksIrxMsLd%!N)V*TutIBi~@H@&!%Tjw}eX>35t zyCZ_Vw(~%Z$e~Nkr+FNos7;sZKy_X-edhl_U3RZ}%5yeb?9^%H0`pd)mS{YNKa8ak zk2#S*{Ib{`sm;%08eEP#beB+jBMkR_VVum98`3N-yZyN%g!6HjwO>x5jcMGgbDeBf zf@btvPc#QJGeKhlCh}+wW+G{&ymn&@CdBBZgBgiE(eDQpch+&e;$V?U*=lK9WCD#P z&IHK0=r|_04OVK~`#pPJuGe(z!bVthNhLldC2e;l_p{6&;eiKA|?sje(~7X@5l zC_-=gQ+|$-K9yaSmv%Q{fU$nf$gMUpviYk99k)^$z<_~DBO2}+{6(Oj;-wFP6q;;I_*!I<* z&`J9Lq;QsNqabq-9ZBD)&`H#-^pZD-#Ptf33+Y!G*rl2T2i5m|3ij72>2_C^v+!*d zsMJa}S1pbG;)?a6b}(DY|1(+mzw!+gf0zj2)xq;;Q30iP(@M(E%bLcjCv!Ui ziCIDc{YXGl;if_!uaNf3QBf`E?UkVavYi&^jm$C|crzFuheXykNXTs^a^zhG4mAKT zl%^`)?q^i|i1{kn6Xr|~(!tF?Ku4>?PV_HKVZ$o;-WHdu>{-`i_-x&7QQ=1S%QGhe zMY+GT4h0|k>7p}j0TVo4N<$c`yX`{rx>)Ahv+@BTX^^WTZUYg-zPznTF@kZ@<+fUP zy{A*BIn;u-htcy1U{zXsIymuZcYZj<93OVxu~DzA`I~;9)b+(Zbar#v`@dFWQB}H~ zcVXX>%4I!{s^v%MWjGIE8^xWjGH&wa=bdL6nOHF-eYG?dGH?for1eiDcv~=9sP#o= zmf~+#=dhfMnSuD_p)q|9Bws*?JH8+0W#AH&9|6Oa3}3$C8%@ObkMf$x{S_4c9|Scr zVh?G&)Szoe4r`M9_*D7JcB|2aGEDIp4W;09@a;;K`NPQ=eUtU<-P41QgKR(LHX->D zl_|&_4splJl?jWkd>t~dch8`OyBTF=EU3^5A|F~?4E{kRhmxM^D`J7l6xIHro+`Cex_nx@&gqRvzQ{Y+T1k@*>N-NpGX zKTeSZ!}miP48^}w2B8tdi3)$91}s<@{z_L@&OZ2>5?=bg5xF<))G?VVMSY@LE_##h zl?kyCmV(iq58iO|CxKz`U=D?E0g|sVs}cs1{OmZ)j3Nxsh6jh0Y+H#mD11#(f#B;_ z@mQG4gTSw@I300+t@V<+C#|X~cR!*}BsyC4w z3l6sGXQ$ayY^Y5uO`$;5w^VLCOA;n*$p>CIiFKj$YuYQ%Hhfd|hR-}sY{@n{P2uII~K9;(beu0%K{py7SS13gP16)Bf%UEgm>KstIhi{>&@H~47-L+{b&^gR11bY7ye-f^#L2S@2eoWb4cU6E8QAkg zF8%YIW6QT@kSw*+51md!9N1T=9=H3IFWtO)^jT3R%Tc+ z9$1GNTHtota)pnUI`(C_cy4U&f&+j8CPq4r$uXG{i*;~c(%nDrVTw#onN=aH#f2dM zNITH6&He;ZfqMI6Vyr*|Z~T*{6zWqn&DE@+S5RI9r{%{(x^{rp{1WsM|hRc}iTXC`{{LdBNza&=W7^X6mSa8JOt6CQI z&Kv9!gYo9z?OZ&ZS&6oK_dmjDX0~F>u`Lnj@4V+|r}lUtpkl~yvr4%fhPezKht2kT zF0f~RoY2MjlZtEluvA=4D_k<)b5GgnjL^uEwQzoO`(hHwa~D0_SNVAKICR)T7wp3n zxy|chw@L86in8_j%w>P#*xjIHZZLCT@WkiK(cxq@^l4rHS`C0P53iru*M3tfkl9OA zz-oy^>#OONB8^kGL63y{#%Gixm7&@fcV{Run$zZJN${+mPrV>Iio`6%DR+k&hYIt` z@l$J2U3nv_XP8r8q9%47op7Y2{M=l zbS#U+zs)pT93}4Sim;!8m0^l!x1V^FmZ3m~yrFhmvNz(~Em(6q`plbS7gOm2f5QrM zif$KW>keB_mSu6^_z zwo)d7yLNsRj8DOlbo#eEGyi;ey%kd-(o$xRYDyGjIDADT>Das+ZsN*7=&{XLytD2r z4%4iSDsCRjmY^wxOa_+?Z?Or#&)bT?wz=}zz2r6z%ghRvCimNF?YV$tAP0<=61}0_ z2Mo8lpyzGR7*X6X;s%KQi|%z~hW#@<8H>qXIdeoaU%L06fjB}6k$;Wz~ zS9czcBI7!1OjsUX)A!Oq7()1QdHpOG=&tm+T{7pJm1waad%z#vZ0%w;ZWBH(w`jdVaOnJ)I5A8=KEu=f@`RDvan}BJ{x|RGk9qoO zn0Q`70|=hs<0n4#kjvyFdK_%e_}(F8fE#6xGA_S0!eMl+uR5*ExSdqWhJ6h;H_m(^ zjo%+ll>%-g7l*0ffJMfa*`V)~Q%`y2n!7X!DAd43e%bTZu0GePWxgWltO#?P- zSl8`v7guf2O|jHrS+f)4SP5#_7)*_h z<8c{QE%YTzpY_b|9M7<^;ix_l)yc0&R;#>+VwjRi$;8{1Q$tu)$q3?Hg5P6YwY`Q$ zimXtUhnWM`*AKZ)0%6lZjcL$OqEf>t=Cn=OkQ-5nu#KQYSv7!njY1>IElE^2E$WEK z$tT?)iflvK`(hiu}O^LsQds(4YQui2lz^&fVv7BBEK26xvpT zTmiIUADRM#{Fgs-{H7ry&eBvgJmBi*{z1fWFXOGK&rSM&HL_T1fv3I!5Xh0|?caS? z|6vI9R!o2Zil6vQwUSv5a78iQ!I zBw^{7UOcC;ZPE0|OD$!t2Qy&t&b&u?6-c!Y*r(e~E|cE-WarlV&WFTH0v6g>71 zoAcFv>_!+#^qshTDf$E_hX^pghNGUtji=q7qaEF#OO8Q2p!I6z4Kpn*ygSLd-$QkNsD8e0^&#K6?T&w_z zZBAjCOvYWf8;BbazHB98Ojq`MGSLx_i?@6Bl5s31Qp0O0BsGKYN3A_2fZ(8Uj@qr4 z6b}H=XrrO(DY^}gfrTQQvd6R^eix@D; zXhp+6)@8_;kqLCqCqxs6-)>>cQOB5yq zM}9u%gNh{Zaru?0qHddpHcQOsx=wp^=HcVdeX*JDX?<_o-Ulh#zcY9qSjr$EPYGm5 zS*{yT@# zJK`_v-RV6b!a=;{VL0aSWtBMc6RZ|cn0UA&u1+*~3pH?_zLTV15#~A&Li##o-?J!L zM#?+P8xp801bK6E?cEZm~GOLH-U8?2!c~z0}JdUL?dt&RZOlX)$3+!;`bZkGV}5) zf#lcY^yoaA%q{2RLF6=`f6=ihX4pCPh3~9fl;d?fCM&3grKBt$p zfcHsWT@-ZRUW<}1o7bP{IYVSGm(J6n(K3a`w*K;8A{Z}-dm7(I!*%}11`iI+d`ZgZz7dAO z1lK`FGQ)vClY=tmaB94l(r@DFg*_f1cut3nkCC$?dHxS+?;X@+qiqkXD5waCN-t4) z1*9V#LLwrd(rri=kRG~pLPVqpLPV4nnt&APy@k*NQpHdMBw#2~LMH)|z?XC8-rslb z{pQa1d(WNWkB1p1!!Qqfuf5jVd#PrILJz+!7F1q`EtZ^&2h`((0U|72APH z4_CQsc?K6@57fx!*0G!jFUNzZcy)utSXjVmeVDshdNuRR%fcJd-(cXy6XTQ93@iH+ zR=MC^@S9ac-@d!N_f@PPC1Z5H+#hEEqc4;moDml|e=g{SfpPI>@FA!Zdic`h`OuZ| z?tX7B=G$C#)XuS;CJ53uq1>BMpY7BqGxSyyzin;U3)cLP$>-Ra>+40Obr;g2&w&EJ zE%FGym)5x-bpApkw1lEw=#l1fEZn{-{wG57;LE9Y@yG3(Zamu*${xnBb998KP)6p} z*2}RU+f)C4=gzX#8HbM1Q$(JoXXcmEj~6l1RX#%hA42toALGyaBM82`?tp5oTXSb{ z^)=*oJvo9WS15%6Pb_++(qsD_ZjtBC(^n}6LKJ$oe#5RBjglEKg#2n1&!pJ5iH0TPHmby z$!bvwn~*H+QzN(dZkE0mi{a(I_~^E_aeJXNQTwcf=G|)_1hmZJ@{OJO^b24DQQYS~ zD7&W9oMmFNx%t>XJL&Z>cGt|ceHbueh`99iUD|T6N4aC^J`#hYP*6VZ97eubmg$>Q zYtRX^O|z4hR-X;&z}7OR<gXSV!KST{}l<+2V zOU7AxwnLGb)x)Ue*ZVzSMN4-w-$t?}+-FE-Lhw$=+&h}(%lIfXnsBeVEa2rXY1)HK z+4^3*9>E_B+@P3M$2ZV} z-GG_HlTY?CRv@r&qQ@p2w4i}8vAjI|v8EWh87!RsF& zt~zfkv#h!(>`Qemn)1oWZ+V!@#;?a5Rv>Wer92_y+9dBr&&M|&L+^px%Ip_!lZ>)j zu|ii49U&?`JBhX1VR5kgqYkAk5cr@)g2S*WcMYap!~M!~#?R=cTU z9LlC>nO{D8k$Nu9ITdhtVCzf zk4R>GkWF=1N#OGKrwg-FBh%(8ywb}_3C&2;nEn8Z)|m$6l$z3Sj*lM02f8mj>puF#h>Xqd5Z^r zaqa}Eds_XZUN`sZ>}bdCRQHWc_h}V02QMH7`>MxQp=|W6En_GW?)Pjb4}5})pIJ>) zz51`oZ~u4C4dPc1RTDqO#MUEQ*(GIO_zhtJqm{{4c6$BcmE#hFyu?$)X zCRMLzTnUdt8!WWTBEK+$5%FxHTYVS6BHnYSm8j{xUO6q9z1SFzu*A4G;F<{H{GeStWRiT(XV_;p2A9_t;GX6nFquMZh z1z@-O`clD>_IBA_>4B@=TNPFrnOsdjWhQJUOK_s2-uBZ=f7Y6gcpM=e>*u8OFRE!> z@_whS2-snV{MDo91bGfO&08Mpy0iVW4eQPCxc)uIf&UvnwqMmJ_Rp2$cz>$fs54tO z@F*4lZaMZi_HJrFwpn7kqzWi584&@l+`gLGi{2*Hqo$TC7&FOUN^1UmtU#HUiToZ4 z$Q5qRozL4cKwOKH;{#cBVJ2Pq@k>>)F>?|~W)HM+58!0Jzo7gmtz2$`0rLd4Q(S-# z+-COFaHQSTDS7?{x|P6=)#_n$S96Z#^3G_ zlh_|dk&6|eZ?Cf%{Iq(?SHhwb0r}kYZQhNV;$X7qz30fcX2#daql^x7^CPbwmC&%&I!=^)yb=EzuiQete(L+sgcj2< zX0Nw(w+(3RC9iej-KeYhu>+P)riK)&e7{bQfM z#&>VS71b1W2}cJHiYWu|Z-Jw0f(oR%(m$?ytF_sz<>$^Lt1_;wC1oZw*Uq{uVL%Rs zCanZF53jYYc_GZnk>qe1>w>0fom0TKP_(1E_Yt7=PbDal>DTd&0!(nCcbNiuB!Nso zhd9uVWYF{1qMEVJM8y2U-QiVuwQz*tI|130Z-b)sjWPto}YfMI(NvV z5XiNO43*y7HU)2F(q6FUZG)8K3;kx?O5SWYVm*~M6hZ5EFM;Zdnn&1T1Mc4s^q%C$ z=SBvj5gNgGUdb_FA?FIYw7rMW;)9)Tyum2$A0wEX#$7O5Xwv-B2WcWQO}dZWq$#vLi?6XA|y)t z2sgVET(uOw_T|R%n+RJ*Hr2xstltJf_oCwmrHj^+x~uL772&RnF$oL=kU7T^?1+ZX zpx-%sp4B)JxNJB~t%Iq|o}A8d@CyKdLIQ$jl7TiytL5}O>2P@K0sXQbQ>sxeAQ$bF zZ~Euz?w=^FZ>3SIaz+ z`Mv$@WN*dK1q8BI(3{*EKtVndWM`&Rbp1`Rg5eS>){wlqPCEzQ533>jG1V@ej*_}O zWGzXDXL35J1+$_{AyZf-zPJk2Om~LzD?{=biYuvgS;JBZ!PNHX@>HKSMOvM>s&wGR zWQ#zDD33+m=8;-P6`V_?R<5ZlCOZq;lR4_Gc)Q}BT@P;xJPU_*QbRfTgyfGS9AAu; z)d!87JWEp3H7U$zU4Z>FnoPayV+pz8+i(C~hdP+g@Atk<`6H z$o~Pa!xyKBOgx`T=L%y}drT@#u;0eGx;SVzr~WEB|F4P7fBU)3GNtVXivJ8H(aWj^ z>2?!;J|TV&{Dx(C%S*C~H%mGxJ0H|YimoMX_Q}C{D)8o=5_!6U~@Bk+znEr>P|a`V<{40OYPe(z_Lx^2*KGoI(PCgm1$k56_;c@+Q~sI^0RlTE!B&^opt zQ#&WRVOk$?pA*~c`dO6($X&c=Z>=_cX_+g7)D{Nx8xJ#lm<7~E%zUq67w-*IsAJhC zo8#Jw6=@DlBuZb>N|JenfU)zNwyH|`e&}PqDxTr>NAY{PmhyDu)gnILm+M+6(4|5n z@pX~Yo00J>C$hZ!4g$j=k0UmY#lEugFh}CfR{sXH7&Or4Rox{MZn>_P&Cyhd5 z1lyAFiKX4>UV+j;)>zS)hf5hnT#qmA*2*r(j((bm(!~w9lzC~#P4=3)M$U?etxd`- z<@WO$sI55G4B0>?lVzO%IxdgTFAC+f8J{!k{&JQJ%v*x}lA z#+?7ab7!mQa;yB2c5h9_aoD6utm%=!9trNvOUX9vFJ@ny||plR|GQMH82+NmG-B7lbGy zPWfGqKEes`x@C0Ept3pp5|DWKf*y~6X+$QI-?-vFHJf$1#hX%F;5z(PPJ^vA+g9wZk) zb{Q&8Pw9Y9T0OpA<(L@L>D32^ zn7DxxN#IVDs@yRHNlRGJ7O%J`xa5mrr7;4LHu;E0QV_0@kkz_X$_Bt)O zLBGLcpKd<)hR~x~d|*P0+gk7Ic?OW1>IsrLztb;ta14-jOwj=WEq%veY{SU%x_vSM zOkKyu;>C^GP2BMEWaM&)|H{O&ZY!i$d-n)+5YgK7S|y*1TF$`iX3{MADCOs-Oi8C{ z5m|?os?X3qqRgn(TtI5*&z;>A^6+ucBFAl7RmXbNQeir2A4#L4rcON)!)sP^x{-{T z?E`h{@3eDls4wd%~ZUL|n1<-5^BUY$QqKFB|Ut*r}v_D;j{;xB>{ z|8nW*Gi zp6XGt{)I=Okh|m;b&IB#IldUr^k}aHaXsXGfC(@^Q zOmRUP^h&{VJGkf9d>CN!vWi#UO&!OmG27^sFWdYZ3*+V<8B(o#Eu>vRKI_dM*S7F; zg*F;olyW0b!5L1ue$N7FK-Ba+lORkR}7q~ z%a(%FEUyHeq?0wC>Z*M*iLZH5>7c%Zp->SzJKC6O`pUF%dIeV%^4VBlQ4qAUT>`M z!an`Hs+0K>r!oJw=90gfeqKRKS@xS&9m$NvR>OG{b)FID&fy+s^U2;)Y)Th3Cdk(p zmr;s4ARRsQgKR55-jInaiOt$3X6%~39?$+SrQmN@k~Yhvwi}R_Jz=!I8N?<-$P;ZB zS?I42Xd(<^pp%Vo%e-<~{959+h1dBKVF3H143SqXYXXe3&uS-_Ygi-^=oHX=%Q=(#<}JEw(Iajl2;^>zu-7yC@1+YC`uyIUe*!hgg=;Uij7 z2x5z<{)?1N9b!1`U73=+MP>wQ7o{N9{_Xj1fpU_rU<;=|>+-o`({Spf$ou3_)0HH~ zovJ%Co)z#0|2}fn3LN@4cl3iDgW{jv8drwb_=ktWWuA5Ei;PxFGTy0EKZN=!)0jY- zM;#H$%YEoaou)1y5&^C6YfQ!hZd8S|I!$N8r3O+BmiHsm{r#B-Y39n=|N1}MB4bLrR zku)+#6kOsD3q##~kfN>SXCE{hKAG8`OEO#p62C883)O|O8QVbvVve85-8tByq){&p z2brq+;~ZVh0=0s$5bJ+qh`#W0Y5_!Ak6TNU)%i z0-bk3NLMAd$;;t(yZ9At;Sqa>4G}FS@XDV*{T2)1ffLuhdhG?;71s}*%^9Pjijk&% z7LE^o-rAF)6k`7}o8ya5y&0%A)*JSMKRj*4)Y7gx=wPbhbf$-k;mLr!6(`y|-OpHR zI1Jgd3jNHg63R9$e;3cK*}D znA`evjhQVn+Z*2z!$Eo%`R*ER@YZtowkGipdMjW6c-oM8eHC=9x$KmtB=; zjf3mRvV>S?>W=xw2z_K&$IB_M*hYwYt+!$qs!V@GczuIqLguf=-G^t!#u-ojbXryp z+_^Zum}3)3H2D!jzhaf{sm1yeHxP$(aGCElLOT~+5f@b6;XukV-@Ob%Ynv+fIG2m< z%sIJpFDO>)gRy$xCwW!5AEI~`(R#b@pLleEG@YfLKR=_*_ zt8B$@GfQYCt?M*t`UXj3@06 zBm1$-n*llb>3+VKdfy89&c()^q!jUH94&c01#bzH14FI5%1lbGT3%NornCJRdHgIs zjksp2=ZrD{$HejD4C z7&Cv*G!Dt*)FWrqpj5Mjr^pZKiT;+%Ltt0-ZYT7A`bSRe)gk2*oXZi3$@`_*`u;4B5NyN$cF|6Vi&r+ zu$7O2Mhg+spPI#ri>YF8(4b$YSJq(x^rK@4pRw_Pj+^XmJoG;~wFqC> zNc?&u6~Kp2h{YbtNRREC2Vc)BA$zx`p(x5r$|IFdNJI!xTjQ3egkrQZGULzV^{oV?|Z?fvb+)7!A%Z6NQ_h4#J(3+p_Bzt>Esh)H_!6jDP9 z=jE|h26FhROy~JK%MHs_Y&d%_wDIug%stUKit=W^mV(uBu(Dis_fBwQ-un)fAqqR& zb(K%XKi(5+V(V&s=4s9o>is{SexnXCo&&{jnRrqucYpC0v=p*{&C!7$pNwS!8cSWg ze}~*1T0or#|7;PsO&RZfy!&%#bgowj^^JJmG4F2^WB=LAk(D$obo$Go5c8G$Ib%xGc{-r{m*aQXmi+g* zIa5@(+R=Uko^l6z$p1FFvgg3Q3xlNa6UE zS#*xT%`5IM>xwac;hQ@v&NoL6r$L_dB)Wc0nj+&FTgvG@{Byc#pxbo^zq;Lyk2;|@ z#FH~S$G0KMN%gq%*OTYTP`-NAVeOK;=|_o@qKfE1*ayWPM;9tk|6vcsB{S5*y~bFJ zc5dalU7~CGg2_e!R`e5x)rh4X+dr7i)Fcn>oz*11m-A}3Vfcb-Yu5bPEHsDM=gG@_ zlf^rs;^(mMxj6gwn#JD=o!j~7IHM5S9RgDKJg0^rXgT8XgB#S~o|>BCp~J6{Q+O@D z`GC_VpFcqVk358x|elS-YqBk8xE?D?;*MU7XX6!5axsbfe(V2jImVq+u! zm$i8MpVVw4EB&_L6&}dwf{u$>`!M>qhUT6F$4~dsEabfs^~;yp!b}zay5N6)Fk{qp z>R{yAAB9FWmo`}pH>sQ0NfC9gnV=BJNm#|tZpn@4lN7$M3Z{%b+m&4l79b%}m`BJkFa zFN&kQ4yw4V*VE-ex)N~o+ql~`*Vt^^zbp2TbGsCeK^rjZC0kG2xM<)A+;7JRQ;a8a zp;IFLjE6ZSJTEdTk1IGRw+>eCSfRk-Pkg}UwhO{w-~;)3;`B1Xa|qA>bcdG+-LY$W z=4-akP+P}D{O(1^1vv3TM)g;MOR1ucZG&u2x*!Cdc&(O^fg9}qjZgZU-!_aS z@H5iCOUWY7mX%3Ck?y-F5cJNy^Vd$E;}638AR?y2C!|_Wp9{{~&7eHkA(5Ro46H1j zQG9?9I5#l%Yfb~6Qg%37$M)UiB16<>8;OVe7C5R16>|2#@m2MH32e!7v?Ms8;G9gW z>(if$9&e76Nk9D8)<5BQwXubY$!!6R$GtH#Pn9q+3U(m$A2Q_`ZwP}8klDVo>a8j z?xOlG>dw3R$=_E}ysMTAQ9eqY=C@u=K4<=P;&M;1A7*3dcw9l8{HcF4oclxYh2`3p zO`Ca42j`eK^G{ItKKuRvMefBHhL)Xmy>C342hmk+Uq^yqCA*rDza6=N>v!w+C_hZ@ zh>$y(;-A@T&exS{c;^9#IpWlS)bY>!D%NhCLq|@V`3u^o7P=udj;;QZ>dz-ZR)>vX zW_#U6!vWRKQvdj{_0L8*=a_?=<$uT$(?n+&xkgV zVKYx!;GK+fP0|dHgRgQbDi?S^@l~_9*ef}yxQr>XS9R^;k2mVNA37m4v!Lozj((W#VIym?ARP+SF5HS1hTWDk3~BN6Y&b@;71C&L26ywOp4zKm zLBR3xHU>$ni{otxX}NJ3m>cX2{wQa$lgeU9M z2|x9MO&V?!VMR%XO<5SZSA#(6v=zfF6cHA@w1*AIs}jAz)j40YDy>OMKErvgw6X2FPl4cm zXpRx(tJ>fQX?vbxqwyk`iuwSp%u;pN@Vm^k>?|b08fsm?;?0osvP~8{OZ-D)rM)<3 z31hC~>e~)vNXH=}>$hzfF0lpk!N(5EYzX~(MY-xb-fFJQGRViWy_7Z&VLr2J70?sH zGLmSg5B=tl=~v)BspA~YpxLPzzJTV7@*7#`si8bh>R@zkw!PeQ{Cb}Z?TqbrA1!GE z0Q<~lU~^gqYHRUiymnb$cqa8nQ4;6(E_PmjOp|_VjybB8NEMJZ8g=;?k-|8DoVVaX~*V#Vattz;~+1v@0uNULW z;vP5;d07{pHA&)U`?fGQBY_g^Ey-*Hg)jsF9lDSK2dgHbi^&DU$LquKAE`jfdUb&g z{kS$J*6M%{1E)>G4W&#j(v1PoMqp`~hXWo6 z-2R4t;PwmBTV|=PsP-Y1<;)RH#+!h;5Y0`W&0s^v%)q7BClowbtS38*ox2t=R5xkW zb+aZt@Mb+!ol>~!xYB&)bASHLGdhNMw7omd#d_`rT}pAAkXOV`=ecEX0zO^5(&^o> zYV0BAQ|f|KLY~y!rhEkuwf6P*pC=T7E5;^|-~D5EL&tqNIK! z1lUm?jg=|g@APE~MFL$P8Kn2bgf85vDMr(iW&_GKn6eaZay|&Q=iW#WV{>TKH$Yl% zyM0hoZHN>&+`s)Vq||>MO8&>0rUGyVC3%4o^`G=dTgLrUFxS`7ZB`ff@3;MKHKyuw zDKgXoV7o?QL+penMGA%khkqgGUSZL85Z91^0EyqND+p8(uwwrc9=fuZCmp=AcPp7H z6x=y(sApmg-G99`*S->rT5c|QVo;e>QKEIc#il+Cm~5hvrV9Xv34mIrT0yY-e$mOR zqcLk58)hU|r$BBW1jhW!Dp};ZkiYy}+G; z&A|D{L<0)divN>+>4PB_#a=5|M?A~2zl-f>Zotc?8dK4hvobSZSpeW)Jffz$6yR1QtM>`9U9dh zv;hDNdfkXv-tXG>1+KTz?S`YBEZwSdgURD;ssep zMOkSe5*dJ?$MPMmkgblYR!s570!haW>J`3ydtD-+k;I!v^K7t`9w23EcwfnLmL7wN zi2_mQR}M)($6M)F%b^=Nu~KOUV8ZKIjk6OAMN^>9F+Rrud-=|&tnik52~ja;2Xx&M z(KYY|`61#ceBieVv}B?5&`w>VQ5}|F`WrZ4F_I=Hwz|nS`d)#EneY>bl)Uju_VrZ? znPeA-Ol*~f)^PcLqr>Jur?+uBq<0)Ze&}4+SjK9=SuJA9Fn^17>4W)=8|-$=D#-6E zDD$VL?_vXQSv8k0>?$VleuA2v%W#Wy3=87Ln#%pkK4yu@nGd%!m2*rjxAJ=KW_ZWp zea9ntikZo)%JdJrdlf42D=tyyScjideKK7W6;iWxUJE;(E_pGv0humWP~F0Uj%2niw&HrWf>ypojsJxvWkDgAM{r*ScGL`*?AuBz0!S+)(eE5W> zh{|2{Zh&@()TLUCD%al} zspty-WLTR5pw*2@y752ISR3v_x_>C}a!IQ~uwy~Av+6aEcgk~o$zJh;on--QXXBqD z=R5RI-WdkjhRZEk#7;ucPjpcaJm>Cqkpm%Rd2#+m*V*pSO~r?T0rYL3H0*=K-Z|E@ibEHigUb=#%< z3P zM(DFCfVjZX{8pM^Jsb8ZAUh%Hju4zGi&=ykH_hErCah=0x+!N9|H3uRC>XzbCFlkX}CPR@e@Gf znpG-tk^$^(@dWoWy*G>Hf4|>DTLXm1xOFs^z4DSp1XSV;4v!W-_aHnTd7o-s= zYJcm%1gTN}^>~8tCKE;an;kb3wAc3w*4DAjAdfN8c@{JgfR~AevW|(~{S`wTnd- z{i&=j<&s(>$h2(o>zFu4l}+(m8yVUYbX^|OS~=pzH>M??_}`3~RHQpqc5#KCKd}B!qZW%sQk9km zLXg$DoA#NF4hC;EsM4dmtD1kG<$q~?76((Yx+tqpRwZw}-U!^*{tUhK_~U=b#+S|t zQh&-p-@#lXol|dCB)n;jxwu);>(=XsRx*1xWbJv{5Yega$mr*Q`f7i^#Gz|o?-rbNoU3y$f$lu5V2u{2>=~pV13eZHlg%J!)u6IAK00 zu74*^6jDMLb2tnA0)D~@`%F8+edVlYq?d@k5EDqD&PG>7qPHYmJmlq6Wq0O&PepVY zl%u&^Vq-b~AGK<-bKPAFmaA64rO;~f{NX$Muo6gZ>toOKS1-J*GwVu5@P){m-|%I_ z-5s=~Z+y}Vp}4$mM&t>RV4FR_K+km2^F^)-!zUdFWC@SW z2&JcJjvKW{OC=A&qP`kogugB4u;Q)hDwVi&^NQk@kdljkY~O$Pr2StsyveI!uH}u; zCh9M~0w&O(OD%4$h6@W4|3vT=?@!_8q8VUzTlLye=hwgdgJy~wt`0Xe%_Fgm98hlj z4m*3+;mp#7ZV|s%1$BsQw*ehGSOsYP8fe%`r|+!wt>~VNT&3ESN}ueA7&@kVq4yek zK;tmF8Mbc4UK)0|CkLigV@3!))Wg&F=@FSQ85+G24(^4YkeKp^57Tw@xhy=}_r4fH zzn@qH6KgTUG^#Y+tkx|KIai#x|5Z>;aOY#xf#Hj_EURzOyA+|iSi8tWC|)h({kQup zBl3LRw>$4eu@`3r#yT8lyIn{Nu@Wbuwkmd-%GFRAqGG2fd<92Ny?RBYTojA$hD?_u?9<(< z+qdFx%{LAXLG)aB{n0s6q|{i6ca4-uyb~gkoYnU>aMt-r0tP7@H)4|2>rl?>Fze5RQ;tCR_aI{6~%eR1;yBpcV*!QrM2xkeeA zl+>CPXzforcd9&+n6i#Z<1a1ga_ zN%t@B))?zbePF7snDbMkRoS4mOnN*c&pycCXp75^QFDdds6bxLe}=s;1o=ED@k&?Pj%ko11tL^TbL$FKVao6Vn_JH z(yrjZ4o{3wm3#OYFble8fs_?n^^ z^AcHlrsS6-%Viy+KhAKknV?+mF>YPH>7pqcrsX;Cc|xvWmsy3>TAcy3)cce zgqU!q*HRKCYT0oB$OqDQUhu0|6S}Rf>F-n;0m;@Co$%C|s_WSPNAV>u9m==tuyo~Z zXYj%L?aZ@p$K;<2*TWN&qb8Y%bggv$9Y-C!=Zjd)fd&tMx*VK&R!e}IYM zK!Vhn?i7(>x|?G}Jrwo>-v6^qbvcUnpkh>tx7J>8$85fSqF=)*(*W@AOpC&Al(MP& zu3!*!K6i5wv7YdN&7H_saONM1`&^!I8&ln>(=hYBq|(GAKjp7WY&P&ZkIBea-|vhA z^*Yr18Vl5*a%U0;E0+Vx2ILdkv@1vWri&~a9E1Lm6q;{MskP1uoegCLr~sk()w;0R7$Apu&PGBR=r*iry%dJ#!pQbs;9bk3KFFLq(G}``*0oS1OCfuM% zp}Z7vSXtRTYmqsBL-1um-0y2TW6HWY#QQ(^*w5d=d(+%3tNVrh`S6QhZ!ei;vp_Q7}T2-q5E&xFi2Xb*qk$hu9#`_d;v12uZ@Wy6diL5(`AB zHqAlz-;*D}39qi2?Cfpt0yEED$PZ^SOdYCHvYRCcItH?E@9vSj=+|iU!CM|M&!!y) zz}8Jcazjtk@VsW!x|^A!enFOB8YSnkbtmZL_p^4{QCP8hoWIFKBx2&^vt&d_?0VPnM)psR+4&6qGih?~Z6V_vjdkD6NAP9UJ5 zB{#=$fh3glu(OMpa><1|$Hy0w`u825ZO0d=L_~SU@u~uVe8RB77WyX@lZg5aLY)R6 zwkmn7qyFPFYtC-fp9WhW{P8J}KFHcwWP{8LoI5ao+j?8|{@i`KNz8NiUbHZmwwq98 zE4z>aw6bN=P9`chnQjl1TzZJNMXQM)py43HI9RWyAdoihf$B}BFP)$QkEZKeB*$N6 zukaLPZR}21`e#f~OB`vNq?h9phV}SR${w8(^HU813jXvKp(xX8gep^~hrprxW2995 zpY8gTtviob2tM@3vZ?A=PK7x*2U`!YW-}G`_+N+}qp2xoiW`-0hcx8I2 zxU3nKHM0bPd^&{5cW~2cE${p9Ra~QNSyV`hpq-zr@#%-u{k$OV9mow@=kBq4y_g8C zxQXRc;F4wS_u%cPOnK*UlChr613tDuk(d4ZcZeg)MOS$z=97nlm)P;X6Q2wxY z+{Yr6u|>k6UBo$Y&)&~|W80v-mO}I}OgcD!&ID$tbM#M-amnpR`$C3Jo7tYHO(L5! zgp+dr;V@S6s`WQUrS|u%=^Z>nuxBVzL(=Oa;%2_bJsgmBeH~_qAPdz@@-G32G?%iD z*Ye-~jehCRdK&4qCImnQ291InmiOA2GK_Ie5m62QhocuhlWZMC*h^Bfl(P&TBqC^l<8EQh-~zw8t3+ zkG<6@BFp|Pytn(jyE2Z516Em0Wx%W5<%>%?6{zK7|S z$q=T@#Z|SuH|$;~&N88&@7?d{j)ZJ1KR#Bw2J~+j7B^0vnS`92v>a^~m>}0RF$kRJ z;NCnN4mkT7V|4R(WSISt$;s-;PE@tk z(XV8^33|xiYYM%0E~onp(Ul>M66KctQjZMW-co(Qs17)2Y|oL-cxjFGfUHKW+{9cKw8li6;vt=k=3Sk<~S$5D#`*_-PEnuRxTSI;m!=MP20k7C#m zdVmKtvY5SW$GA#%wrcoynLF$pw;DRDY%kK`S?v1kyF+dw0Q6?Y%dk~un~$U?O<_;16nY)Lza8iN{q**)DP(s$vO_Cd3q zdu!y*4QA5BJ|Ar~v=dE>zBN*}oMWla>M?r0?m8K(Q4Pl`*{=77qAAUL$>iY5>eIL~ z&<0JXY-hjsxNa&Uipvh5w%b!an7KV_qgAAG41*wp$rl)jeo$CBm71N6zKZ5 zlSGH1UQjNH=Mi5_LSHkM-@g{FHQhrrcZhffzJ!Ky5SSJDEFYhoql*Q55!3R_wl;__ zD|gsj+}N8Fv^lEahaaZ zuJ`|z#R}%rFzkikbT6aM2h4_kll1#t7lEj7o9{ZG1K@ii_hv2tb^{E}3F_8)KY*Ft zcI+qr)EP@WPPi}%6BdNVA<&vcu-$m$aohNy5*|o5J+wgR-iE;ZL9O!(&8?K+d~0gA zb(##Esd)}YGIb25`c7CXsZ%IfalB5FqPsTq{dRU8F=CtxN~Lvl*epv{(D!CY^0Cnu zN`B6B03RfNm;)!f>bM?zZKjSV-rvtkusYxJ!B2fBaS2@xnXf;Z#-Z9-@eYGl9pj z*|^-hoh~Coy3}@yPPJ`YNtPZ?(tjoT8hT^u;I=@`!_AhX#}C%}$2aUkJQP2@W~YCq zgv4%;v6Uz@4k4U1=lZqgpSq*zPR*=N-y^#k_Nk-hjC9)>kTcu=L)v!-HPx>Bs;H<4 ze1g)83WCyW=%6A+5fBkVM?gwwq4xw)0V$zK6GD|Ly>|%GTWF!Th}6(aNN5Q+e*4?| zo^$q{ea=32W=&=>lQsO2cfIfP{MvISsWG34biN%_SBKoIYpvFeM*c7mw*s9OeN$Nu4^V!rMfuzjB>Dxr?}(fawHmwFchW4 z{2ySd`~s!eY_EkdD9V38auJJhRlvLE8iMQGeF)6+LaZ_#qm7yJ%|FQPNRVsff>UOE zci4U;W)-?kpOaRVHo}@4ozAjW)B`3YNaXcj;s9S?z8);jla#4q! zsKC|RE~c_vKh(HAUn6Kwnnaqq2vrELK4do5h8zcJ>pFb*11CxozXpdCK6<@4slE_MjFO4P)!&zi$U!i4H}~g(kjQW)_@Yh^ z$H=lfZo1T9+KrtgiqI;#Lh;qqGpk7?xj2s2drPM-r%S1gg-LQsD0GSpu@=Hw_%Ilm zh-tbYO44oxi^$RU4(!e2`lS>jO==Fp!G-EMF8nH?eq#qNqM8Vx`7{cYPC zK|IQLNiw!Na6i`=7C)!rvx_MUTaxT^o7q;_7qvExO3pX9Oa#`Bn2hH!r2%%j(#2do zkPfSR!qg7he1YZe|E@~wzkGkTi6q*Bwc>V>n;CqvQ6D+R(B>CW^@>-v&Vx#t+_o!Y}zD=puIL2k*s*vpBKM+fk62Is;Z8$muuI}`2w z10=lz^i3!w`VCmTFOqdr-lC08ZfRAz5V0*3dASS5aUftzi9K8DF8u@bvP`Z$50FjY)EM`BRALyZPgb? zMQl6~(|*>5BVRfP%EtSx{N*XQy|%u6H2m5>VpI54-@z~M?V9zbpuJkE*>6&xJ+K% zkr^q!$N8PAqI`p$8?z@Rk3sds(U>#c?LE*Kh>E&CWpx)nR2#jR)cI|!Wc0)QRj6go&JSyi7ZmTe(D!5 zl6rkIy3dR}64AbVPfx2G0sV*i730uvOC6=`RFgD0Cx@m@?BxO!Mh`P%;}R#X*eyJ~ zf-)Ijr?c*e;1h?fUOrz7uEz@LO@QNHPvq5RuV3LMnkbKbtdTw&7%cxbDNJ zKqeAc?NcNT9g_>*h>AWOFwWvwU|zuvWw$BeVSenw(m_>GQ-if0us{%-_A4P|XU%b~ z6HK<9Q~tUu+2SZr=GEP)G!f5>PuP;voALm9%+=SXVU8d#=HK3(Iu^oIXZ?7m)71#) z&0f*&J4BnggHIyHXVB`9m+15670C|=H?*gQ1g7VN;=49U02FdB@#@WZIc>o0%Ad)U z+v!WU)i}X-O9NceP$q90d<);=@!r!q@R$0AJ+d|QM`KS{wjmjP2YHlT^_@459ki{! znZ5(-{(PF8?hvZ&FT^_+Z4tt*_}?^Mo_qm)0uA={N58^$CbPIffYQ-_N<{Gl1Z38* zrckj-NwSjSLh6^}4YxO!V@?06ezwIf9T^5KPHN4_gcemwYrMF$m%~59x&{AC82}at z+Amfu0>8eYv1i55K&qpvI^a0N@`GX?ZxMlZU?IG|ES(?}0N-<>aHTCFbmnqbL)#yuBW&uTic5s}0&)QY~A=mn2i4>dl+lku2beTTu zz&42uYhw2=HiFN!j_A-cEr+qM&z{N{2sBgCw!1B}E;bTba*=rk!1jr~`GL)9`4iC+ z)~W^sUvULLW+-CDh@vVSFM6tn()XVlGBB-h#&z`Cc=opPPj`U^Us{30KG)!#vGB!Z zsMW&gZa&2NHnU!8weO>AkuUa_@fS%xuLYqv2I-mc;tA(@_7}6$;Bf_9*G@;V0Xpl> z^{!^TJ$Gb_eUrli>V2N+%!MeN(~qD|0}YNEB{(9j&^RsEL3#4J#}6E%V`O2(S~-*{|3;yOI8A*n{;5hA2_N z4|4${CJ?LkVKAEaZ~kRb`!j+wJ-B*XGRengBf{c8)~|o6q&VLi+BPSC>x)Q@7I;NQ0)^#$+>a zi_Wn6Fqv^#Gu)oI=2CxUqM*6x{d2}~!v_u2Gb*-APaui(VH22ccEtxJ!AVL=s^444 zyDo#Q(bqO-MWo9)Gr16_^>SBpV80fY)ZKc_Qyi~FIDsdw_o>M0EM;za%OQfT_EI^? znL@BIO{!Su=?tjpU0FLpdWZOgW;8&r^KRNc7?D|{q<_tz~}Zq1qJOeaPxQX`%u4w zm+BJ!iyEfD+pQ9d{qsW~=4L#?!S%bqwDxfSPG5=A44H|(@}}It%Vipsvl_0f&CfIU zcHM0T(YL>_G?{#;jAAMFcIeMZOan`r%^SU2KnkdV>AsUZ2#a=Tsn>#fH*d>4-b21= z9H_KrNOV+kmE7SD!!esRc;E%+_@`)eMsIui7OvoisQ=taRLxa-KPW%2Oofy^olY@$ zN?q}gJy%XNF?%>}2c{FmG>(?FijjPg0UDvIFwaQgjYK2t@1psZc~$l^(sGLmmKpPdRIxZ8Lyh+lexrT2AvXgfmfCD?4JD(+--EU8(kF6{V%>N;* z7zz7ZnhlfD8A^T~UGSd4lX?I{|J&kda|~fU7Ew=JK?5TOw`w!{jIAi$WMQV08%$wi z-qXcoh!jDUYL5TLNfe-|bE(8}mDhD=?I!y$Y_*WN5_|toCKw>H{VmAOTtnF8L$g}~wBA=?VU z0Z&IOFEh8A6MdWYUpr);ksrwMV`pPe1e^bu2us;8ZMGZa#PmxsDhWz5h<^`3m9@V>~{Uzlz=hqwZ z0CEqfEILtT2eNXdw?YynuGGFg+L!KY3NsGg32w37&)MAg*;IdwG{AXjso%!efLZWC zjhAFEeCSsSUN#SQ_quzrI@>ep7{XCqH%2*8@vMx^uheAtY41S!<{mmCf>g{%q#GVl8dr$%E#*V?1eXGGsLFtGH<+%6^)`iidg2bk&_GYA+K- zPF8|v6{nc(b-(b&GYfUqOjZyXI^9H<3AbpMPk-E?KNT~ju2}L`aNkZg8C@VcbZ5Tt zf7KT|QNnX|s~ehkMWtV$wgO?|trUM+^=?64``6F2RCHFyhl=^Y4;EHyF@$1U3}VL> zM;L4cb{+V1?t2skZ5TFF^ZIpXqeco+3eV&h1NjjXg<1%9WpSu5+pSvDS&~^#u;!z> zLOeZgrL!9*(b;dZpyJrT^V^`t!o11U!but#XtEI2C%oEaiOZ_ncLsD{#pO4m8y^?E z_b{Q$K_jlFtua-$a@G9Bx*vPO`i4?LZPemFcjk+ksY@YPrUYq4sl$R~duCY(K2{e%VPYMNCdzk zDGPhvLi(Vv!tW`yqmKMvNvKDo58jhkAJtI!_w5?B{&3#e%ym4@-_*G4^v8Msf`WTq znTEk+BdK<&eyq4fo+(M~9(hl*(^+iMF0~tDf)gGTZ5P$_Qob-SN9k@U&+{T570wg- zoZ3O`i}!~w63HUB==Lz->a-RNom%2kld9oQ7F5;2Y3-69zJIM~TYU;gC5JX9B3&bo z+mxABvVB4Y{3G5Z@_!|xnx4H1JN*_xn#JMU%d^!O-cSHssf%iw*Ce&V0Ctv&5pyp< zY8z@{_f?td-?ISPf^#bd<$a~k&knfHXk?v!zKsd|0Y8xuN^#kZ#gNeG!~q$+QJ-`D z`Tk|H9r90^0j0tbmGWsX8noJ<=^X)?H5%|3J0(@xuHic!=91D?!ZoW*ZBy10;H6#r zl{aT1?%@@K`9@3!Y-AnjtbIu@`_9TI4BRkbQ<+0Xvo6TZ!uEt8e&7nt2+wN94p#1> zx!mtiip6gI{kxR@E{&6)t1@d=8-=J#jK}6M?3CkP(*;a+9p=^F1f|yselBNG@<9}*LUmz+kfbXzRwxWg3_}eJ1xh2nD z{-th+TVez79OxeoHA)@5F(sw!?^-D@rgmT-s%_WN00 zLr>D!_L(bI9ly4lf_(5oC~qQghbI{Q4^?MIxy^O9su%+o;gW8Iuzy>69Qp3*2wVN?GLJ!gpFHSP*}HJTePC>7!U_sK*Fa%% zQvh?T^7ur7`n8LwCXy=(!-n&BUdRL*i$m5vvL_dNoyU>DY7-gOCIU{+Wi1%Lfw4|D zliGHW5=atg+-=2lM{}Tb;um*_+dDak3R(8k(@4XRt~HaBBs?o+yfaQ|w^F8Rq}%e9 zr(xPaLHO>1uc~i0y6S4EuSxm|LETT^=A58dGbM5QLZ;X*F~@MYPUiHpOyL%(eqrgR#hsPw_z@HIa zj*5Ruzo+@SESW5G@@yCAE7je2J#b!W(e(HK0B#xuomD?#E<~8t*}rpS+Kuz5BE&0mA4lw3%+OvUx2czHK>>21|*!}|@&T@YAqo}p$*TRfa`1SspPFGq{JYa_ftZ$pDe^Fm} zqgSS7;uGGvnM35Uoq=7LU9g*Kr-Yb==V5V(Ok@*FW7LbON3A5dK zOD4-3!l2fuNcO`55$FIFQ(qjlN+Lq zxT8e5CEJ$a_4+V_+IJ0$kR@PHw5hwZ;8W% z_tf^V`+IQipx04bPOjV*2nB?U0X1@`1-040&;!GqgvKS$-1D=pbIbaZMcmJL^-@6| zNI`ikiy1-d$I~>d;cEn~-~I9tjjCC%SDeMwkH&j9FpG|-*hZ)N5>0D_UO|urKTD$w zh(6_TW7{%`;VHia;`4W+ZwuFi_&y9F_%(>$rjjH!+VkoRQqkRfP(GM$bXvT)R8eT3 zOdOWby%rH`Db5c5v|Y(;smMzi!%_0K*tSop?dD9$mpgqAJ){;wS<;*O!;*FH6dC4= zXv)N~9Q$IQ9Y-7L;D%>~w4&&hBbG>&qNs6VF4D669^WmMIK4Md7cVRR-osaze(G~2Ks}l8KtxqS>(7*Zej;vDlEbs3ib#t21 z?>4pz^2YzCwf0Z$h1s6VCUIcc$VWr?lSMOr*~;vHD(d8gFW1tJ=`PNv8!^D=!8PQS z8VUp~hP3$Nf@|c3-9dN$>M$o$T8e6Be-pUs6~Unp!}D#>lD7m$DKUqCp7DEy1ov@{ z?P-FRt!z8(Y3w3e?Wocso;$cpeWs1eLALaVZ1Drl_S1K%PhC#E#_pL;Jx&p>ww%_! zU3FHbLG%^u1Ix6&)aO3%1T%ovL-@29<&Sgj*te`oFGR4;$&X-u!OdqmZiLxJ-`nhE zw9pfjK0q#*9F`8WkTZ8TWbU#Zte!{>O6M!nSuw}iJ@W?`_LkEwVe41c@jy`p1llK* zKG}aBE7-g^lPgI4)#XNQxF8Q5`Y4dvywT8%ikA^05ZN2e>-RdDEgWtKi@#>y`#hN3 zOx!>WuuYzD`Vpg{fpz)_-6E`;msM|Iw z>#pq8-`IMC`w>dY24wE7w%)ds*3EaU^tB{w^v_J|xXRKuSt7W)tw@SRl4i?>dF1dz z;;*hX$Bau@XUibg^qr37O1Wi7xxIs3%IkssSM7~kOjuXr(%DHkJ$v+J5KpdZgVkzz z=O9U9r=D_?%eg-`unTL#Y_!s6$@3c;?Ws70bX`qgHX~z>^Fx95@Nx-L>b!{ETvpy? z3!Q2s))B!aHa3ijK3EJF%71U|^s zGsEoMv$a2$kMK~oO8D8|=Cc8PGIL}ipxD)C&J5@MZz7Gh{VsVq705PPg6CVE_d4j& z#}xiIO5T%K3N&CvN?uXhL2j5njQcx2@wbN6)9%u2hlRSiDU1-@^i6VCxrn(KF)z`| zF6Hu0+HGyut#?72B$w0J^M?HO3bb&4Y$;n*$^8wbIwAwkp7R*J@xoOBP&eewO<`_|v|I3cT~lpJCP!<3iu*7(#H^y_DP z-{)1RgcZ)cUo1;sd-8oUZ{9XR2(q>@4Rv}FF)U!qeH8c$(l5@I&m_^IazzUfXjqtA zL7lfMvLNZebG~Q1S%|c_H9x88-3xq4?cM#6U{)~Eh^zYT(eO_#u3yi`EKvJSV#BS^ z4ltV)gQ?AHB;9fo9+IHpPnhse8O|0t?;_Is{WuqrBko1Q9jhlcnztOlY0!-h!Bmp; zR5|kWOP2!F=O>v0#3y|DC`REp215Ws@0R#B-58d$$4&8)!r;V)a51nd!VlL9m_D}c zqX$n3+*(+Hgs|AtTPZU;Du3mDfo~ijB{dy4WvMF(DC~d2m79wd(<6X(fG(Lsc~`lm z3}aMM17jE|puv)Zjvk{d@G@ah(M#Xavhn#KDuTWt!ysv;CCOQ#U2+S;<9&R?Qx;(p z#rkSWV|kSWKuNtzBJu?Dr94S)Yq|&#)F^oMeMv3e8FOST| zb4e2iN&SAWwxhSA8VwKWS_6Lah~d9A`{g{eBxO3f!O)-hQ;0ic)+_#lKE>M;yA`ov zq+ol6ftmFqQ#x7H<(9qH@9+2G?lWo(-;5yGKAZ5G{?}Ie08Pn@@{NbrP4y`LQ@``) z{>%4Ap3LV`Zwfjpw1Ta#?%pm*Eih-#ArV(3^MBLtk2r6AM!X@a^bwu1H*l%?V9Q+EAxVC5asTC0png-$_$xpJwW~( zQx#t_KjhF{ukPnpp*|&?7VtoD;`aB0?(vvE3*9k-(r7`)d>iqfD+V_~qDztvlxuiW~D>i{Lt7kApDETnJG zd)tn(8eM}tvWAXZYmg*0C7AL)fi#oj^Jd$VlJi4NuEzU#)*Y`^>}M6fAO-uw7SbV) zA=1waj!?G@)J-(yPzaKa{~~i5L$7iV42Ck%Squ)}^dX+|Nw)M5YR^7wrDosjjOz#d zWR!lOKthFqN6v}Ah4AXHwF)3qXWb6K2ZDnMm~N0i6EOdk#Yg+MCB3IGN)+3+fzv|KNNl3p%;kqMJ#?1t>-~SM>a=G z_lKH5ee5^Ohy=7iGiGu-XB1~vydRm-%5z>tX37%X!ug93P&C_~Oe3&>d~fc)XEiFj z5DFW2U>nyKpKt#XIC`cJw66`;;)oi;FU$y4(cMlo-vE5O?>}Y)QX_guVb`{+>R0R^ zA+$m&*#N%>6Zxri(~o?m03z37!B95m#1=y2$0|_B&jV3t#U4%HFs^C z*r#?mklATG$kEo6+dr@HWZU()Ge%6qDsyKfT>kJL`-?V~XaBZRthwUlTep>>al2sp zi)mLn@Tpg{v~In5rNx)`{=Tkkwf!xY-M z5s!qxJ+g0(M{er6YsQTdQdFwCnZ z@z#ZeO^=OMY0qG1F4JQXO0BHTxfKE$TQI$gw~S25c^B~Sg)_lCFSSf_#CN0iOD37W=^rAa-8X0z3_5HtjJ)U4Y zX5uChpZR=uLdh|G8%oHL@V#fxFL6HpeGN(nG-|1FB$xvC^gv$Yq82Tymje7obnQ^r zHOjArgnW9m$c^}H6;@<$Qiw7Nvh0gY*rMp<^e#B1u(SV!To<9GTP zp|yLwJL;NrGN%=3d+kfmVNXPYK=TpJMCRt%hjj)XWU8KUut@^%tH;?bURz(Hy(@f} z55+bL-sMP5b&8cdTz`6RSdS)>*gQkNG|1h*;a=TL{j0;>p$5P6V57;$Wt^wndADiD zTXWiVP;O+spd>Y@dv>fY8-AHRfp&I)uwIA3DGOGnLy-2J~)m(*V7&Z2}ou-vWq!kM{#hPo`Xx6v?HaM-YNtw})6 z7iPd0t*HL%w3oRsSm2su10n4JM;1)v(MWWO8_PVeR&vye^S4FJBQOgYXMO>;f!!tYC#`$Ijx7Erai`8>|`$8yLIE|9&b!)tRj#Z9ThWnC;Wo#BizwDS8!Dp_F&|1vi}Fq zF2K#Lp?le)v-RGY@)+!Pln}jz1K!XR1ej)})}JVI8FL?NY}QzE{T8jIRx-vsFvmI@ z8q4tDrBbBFJ5GtBII;c)9 zyZcyri@>g`DZBSfgQ9vaYb8BF4fg#Cz`YV5f58GOy*uNZ)-=LYP!jE?y+n$_(qFjq zM0D`Nt;Dzw>x>*IzG41Ftk&Gr0~#NlVg&JIT<*0-e?j%CSk}aJgDP_}xb&Igg3jXW zz0clLS~nEtys}p2IBV0{ed6iV{L=5P&1J>E1)J94|c^+(m`b~l%I>VcV_;Na8;NyF3-%WS1p*uS}DlD61%@TKN$ zB#?c1Otv{WZzo{$!9|+8q$|KW<^B2iNa-?0U-QGoG}p`f&kZLZWo$%R@OyJI)8;tu zU&+xj37XSuH+_R1Ox0`!)g63B#wZvpI`q^Ke~h`j_5SsaWl1~XwRV+|yBTktd*126 zgXL|6qG#Vl;)QVga{u-p&zW}7u}o~vM%6Tx^-jD{Im;u#bAt;ad$&@~EQDpV^Z{)v z@4c>F$Ln`0rqa7NLH1+us|&`n_wxtI%c?_$49!uou!LkT%|vs!id)497c)3^+`z6V zi@EG-_tnCMxR|n06W87Y(UrDBYpdKT*Okc-m4ZSM9)}7f1*#H*vgAlet&Ll9E6Rw2 z0iKFUV)IL|5-s=w4fQwB_hh!(H6Ce<(j}&6?1Eq7T`VYrotKL4l z$S@D@0ydvzS8fzH1d-EAN74%zeRZqINc|OL7sg+$iawuL!c>*WNy^D>V9p?@r8g+y zNs1sVnnrt(=V}tHTl|mCe$wqD6po+w8QRtU>Mf8>b^C^9dNWKhB0juvCYH%Cr3F}} z#qzngz7e3{miUB8X!l}G_BVaQe8?DB`1Nc?^Ox<=lPA$y_I9*I;0WVWJNDXE%I!aj zHLpu|&K=)=F|vJHe3=Rhmb~;yuyN{{jRG_W+OBY;iHu5q3@U)+T!`iRNbVNys#p z=&OA|Hn$AF%2U73PqSF-5e{?G0X31?TMi+wjI%pO3erRhk;LtWZ4J_VW;G@S=z-g$ zS#S$gG;?!P{dkaHg+(1Ihm|qyw3@0L zg$)`>@(w-*_4Xhp3CHA=pigJg5cv-pemDBdofSLp`HnNTnNf|o{V@@Wb%C5G>~M3# zD68U0Q|WW>DF#g*lyx=AL5?`sofoaXc_CMnqQu=RYqBb^H6>>EhaJlY9Wj;E_h-}P zqxUX$+}wB=Xldb<`u_M}F2hl+O0hwmn*Vu8vFs~_(x>1)65EztZMKm(RY8JYA^e1& zD3DzG%>=bu5Tn0x#GQp*)e^NghI;0Og5jCa54q`_-E60t^6-%5M9>~RA(y2 zd^zc8xIc<(GL<Xtv<0#~rN?b#@?TBhw)gFJ7du+Iveccs z*SyJUXIg0?f0tuTL&s1qT9sQ&FYH;}XCPcfBtLjQsU#`stYvG^-`RWGEO-m`RXEdO zaa@_%;VYe>iTSW{ID;eiCG|uRolTB5Bk*tuq0Jo>qYn5z+;IW42$Rs*ks{84rphh9 zOz&qg+hD~woA|hD^}<$uC4QVRqZHq5 zAnJ79^8?0rbMJKx-}QRqHAa8MZ%1l0PP)5U^cN~uvH|Gr@ z*6S)HH}s$uI`oB~simiIK%cMUD4IMCX^HyDjNbLBeL*dcedRNw1y&1tr=60`E#aHOyz?S;EGsxdus1?lsop3c)Si_d?u-Q1GC?2hVfW?C|!S7Uf_gvzDe z#n(G0!8+aDWVWaP{hlJ8xturI5ZjEta>MfAa|VNh5{fc@6R(2hnefbhp5@8Mh$)++ zU_R(V6(1MAV~sK_)Ze&tz7NrX*|>@?6_)=>?SO&je|xO|-W2^VJ8bpAxhk*4P;v*t z@v}C_wTK!7u+0Iu=q&dqilQbE&d?;uy|PODyl=MiVrLJCbYNvnzX&I1^J)QfE_JSd z#A?Q>i~8(Gr&b?^0?({RVj_bmnYm82#1>=e_zhyY)O~p7Ja-@_rULESc%HrHH_DJG zxeeH-Z>6@7X_VT8x+Q7SeYVsv(kelfzy6}bR@FpxOeb#EA`%|iVM zK^3oS=olBFKr{xS)FsplitBBYB*4%lS?|{*(*!gbdbnYF>@<2MxDBQ?(HalhQ!g1TBiqYxfEBc>?0>j$nU=Zct<_(wp?c8IDBAY`=9?)#UMAf8@Q2 zpGzS1K;EEEEMu#>NYy(Ii(yKO?7Le(P8Dy_SRCEzSZq&LE!?fF_4jl^FvErvf(c8k?%Ua!m9uvTQ9 zQuTf>;JD|T@kn@Zh^nce(pL7v72EZ(`=>&7RN8a-U0!RtVF>b#;CU?`*pb|j()8s6 zRR`*y59F+Xs5zG8Q0%iA>FJG;g3$)uOrYY^!vS4SRAVlc!vE$i{m1J{x*24?MAqq0 z9VjRluQce53X08zAv@L~y2h+Kc0&h8#N&|9E8H|TOBWTQAS>Dh>7Gx=d=}Wt*>b}y z#dikC>>TU8q6-_ah3V%8LRx-(k0H^1Ta+r3RpV?HimUxlu7))gsVUqJ?!rwcJ-F!? zEox&4OG-vrNr%#ftDwysc$WBtfeegEie`R91mph_;HLfsrearAr#t-|&{4?CtbCL6ptLZinnA$?04dU+smx|};Oe=Ws(^M@@mWcnn({nnd-axn zs!V>*ekG6H=jX%xL{|4DL(5E51Aj^|n-2+hW{s9V%An4gU~`MAn)6;Y9g&&$PL{*F z%Pi97&g4`%0_p?S9aPw3QvF^74wec=-8)ICiN0qu^QozRFC@r9$X?b)r4crBEf?qJ zr(6%7Y#f!K<^`EQraDrxOWD3TSvfYXp#&nGhXm`E$T0`2eiv=y4IPg^xXl9x)j4<% zxIBB?%%vDNu$sxyB<@3kq;cDRrFz?=$vzf^H1&aCE!Z`IM$Xx?;+tCpc*yM4EJ}&V zyM!g~gm3q@%DPfLM1by-1=M~zCzC1)NfMtd7rlo3A|-!yW4kjWy=p^$kYK%NT~mnr zu^xYdb`y~|#dTm+`XnGSnBBWQf6Aj_D;(URv#~d%NUcW8?n}~~Hz`R>W{bJ6kGci> zIhqjn6W|duPfFw_0Ue+ZAIYhoClJ@jL1f>XW)2(B=kh5Y)8{eU0E8j9X(|YrA_D|8 zHubOGVG-|#x1DCUO}tS3)HUQNJq-8`$mOVAL^J zL70>w%)@(I?$F$QY5E*`L@3DJ+`Av(czN8=(|E(6^et3^wmRnDDUf6}udVqAGzIl4 zWI?vZ4Xg4EI0?RUu3*P51+G-)qko)LyPDiWen;2(%tn@a&ap=8*So1`kF^)I7bVol zBljS;$B5MOM^5!G$Ngs5GHuDzfL~kQo@rTgEK?Wgk`H!Fv8=+p3_sAspP!hZOMPG9)OX|E}Nb-wC)beo!1_LEqz^D*!D9%HI{Oml= zQ=nD|JUxQ?N&*09r_VAS#XkA?PBcW=In<8Oc3!1oc?h??3iqGebnWRts|B;2oQUZI z8smHtay{{$XAjVt!QEbSLaV6PG*RBfc{~exx-@(5@V2ng3>aa2(m64x7TiRHjofC* zxgK#WR>ifp?sm9>?Fs!E0aixGJDbmYuzBIcTO4#7tuYG9L+Tqty`3GT- zJ5}{`v%!>!bJo3Wq1Dek9==oGH&8@r=u@9WRFNbq8XXXDHHbtL&)p0cpIJ9XJrO0C z?dkDgT1uA<@+9>TvXL!M5+{9d`x!uv=2I3eMJ%oIY_ zna-pDfGSEu+;Q}z+B=KHXhWLmb0*RgZ@wQzaK=r;<{=|MBejH|}@O?h8%EU#|hob?;k%DtI~Rh!!NOB&tRSQ(bFdpwoM& z=zdtX`#b-f=OuW$@!%CA3+={nMhO8ZVcRZU?Wm-0#Sr zZG3QNeLF(lZrrrC{Mx%!FbiMu)gS-OWP@m#5ZFLbW<>Lv+0cl6#I@%=X(-6~CN*@U zyq_E_C_VDo0|=jzE^z{Jjd^F4`L3k^o@0XIwF(NqR8PC~RW2wq_hO!H+JSS$e++9EWP7s@YZtOmQ|Hey+))5IiZ4OHZpI*~t08lOy=^3~GN) zV^`!(KXgn7SVajW)md;1cjL}w>)VGUd=uQy9B0-4HG2MF9-l)xnK`?p@w}!lEZ(V< z4V;P&9DPdG!)ag+G>uGM!uUJk)J<|nLyGYQ^Sg3ia@AkP#?$5ZMbvGoru zJz4F@jMPx&PH}Vbd8(nQ&AAi1*Tr_=A&T;Zr1!%}{I06TmXFw0-Gux&l;A#LAe#cV zsi10NoOoZ5uf84Y*oet-oA)*ilgcK%uEj!dsPmNS2!BRpg0V}_0})L@jTkPuxauh@ zIJP=7;sq&2zQ#ub?1O@5t#G3{%*i5O|(K&bsA*ai2D}3#C+<&zDNzUY;6l;@KJYRf{|x zc8Wo^+#(ExweKjfzlO302?UQ{Gw7I;g*^@&EZ!``sh? zC0T$HMv2qkrAe(_L6}8ZIfa7uQ~LMtGzK7Kp!kGIFjFqFp6tl^yQlFrHj(}J({68d zT?%@W!{m-UxT=OMXZZCG*dt_BCtm<4&*L`x?fB7F$!tUpC0eHO_0sO$X%qVhw(zmQ zbpTyR68)AASn2U$rvP5}(nvbRhTTrpS~W(smdUuxwMi>D7dW4PR4#N+Sg_%F)tFj# zYO|;hDSR=^q|#1$Kd&aop=L@~gUDz_s8x?!JYGSjC9tIk-J@ieyt`Gk$_C0!@p!2@ z=qEkr(#MY>u|H)=IR9fPh!hp1PGW1deU_qCQ0^0^30Ggl`)=1+OP?XZFMM9SIvmjs z+-^J&#K@rQgyuYE96(9-`}*a2HGxWU=0-&nTY0?xP?smfbepXkQ?HP@I8R%JleJ90 z!dY(BCJMT4kjfK-jZv7a535V}k7iIoo3HF)Yz$HvjGy!Lmp)$7-luqT&?j&T^06Js z!up?|Dp=LDQOy`W&npopW@#sX)Uz8%`+E*pOc6r{7Pt!W&5(o+UAfX>HO5EOC~~XHSOFzkv%di?fe&gv@54T znnc^9fm!2dX8YPFxB~cKp{XMw+A3=*SdIm9q{u#ytBEm^J>yr&@;<;qa>Y!sJCO5V z*sd9{COvfZ(hOhKN|IfUMTC?z399in&!~G;;(}RSf|cL0of1Lzo(__J1u+xAk1diC z-71gU*VtZE@L^}`v%_7!-c88TemGoH2V59DD?oYkr80Mt$ ziT>*O@S2axBR})B7%vxSPMC~p0hyCA~|KL|HiHno34-eM( zUodq4sAfqwyN&nmay#_gur^%crf3r%fboC2ESD<{BfkR93bx-;}q1W0$9D-h`;eCCzoJ)VN!+(Uh(2HA>*1 zdUwhhUw^*B{1Cc9l(RdW{yg!@{a(Gban|ZL=jEqf6Vv!01vsy599og#Q$&ng6mWRX zz0der{}$3OyaekJOJ>G90n7>G`qr#6jBDEsI~vyh+bmMXYg&E324uElwKL_v;3gNdL38fQ?fHk} znvrriz53H_-~Qm#XJV>=5KysCZ>%E&3Tf_hX~9m5NX zU!H6qHti6<%%NZ|Ov%b(CR1Un>GCZ_2%58Ad|lndhqlw+=YHoLN^9%7a>cb+i7TPi zd);#P7VgA+1;?kqyDWDJn_ybzs^O8q?6uA^LNQVR-mn=QQIG_Tv(~0LB_Pv3T5GHL z9uw9S!>EdzEW;}eu&0b=n-_hcPjoAt9J*iMO8Z}sK>zWPRPxJ9S^WCqg%rVuBY_>q z`?R{Y@OPunpl;r7W92tPbZLc6_}uGUU57n$#rvo1!c{n#!BE*!fy(O3JmuSi`T6hk zkrc>jUC#@Ms5(PF!VQJ!Fh>?A!CNJ6Vcs+TIC`^N2M<$APxmD>KYK;4k8kbG6oEgU^e#%%c9~g_Uhy$sTDF@l0u~t$6cI}@R z$`_W3NT=Oo{jXkhmSy=~Zs_pUo}$snOB;tv_>nwOM4F9?#PotgK~c?%f}-lAKvdFU zERSUlv*IXz>5=vbr_?>Wro(YjxWzotW9D`oEp5e|$(i{E3htQfeS*m?n5(LHqt&a@ zfbIXH-x+66;N3u;G(TFjOOW)%sF{9&R|X~QAkx28qj z?xDMD=oq?YXc%f>;EsErefGZRu66GDo&C?OVX>ICSns^=_xU{a5xp4?hoG(ANpUO& zTLqI)t%L=eYhyA&=i&w^y4M+USbAlR>}F$)$F&oc!56+MSM-5dPwUN~2sKb?u4d<) z(%dEBfw!x9Xie|MEDLSc@q6 zp8397gC0(z_z(k3uj~?T^k_mYiLC%jH^Us}`TntxhUB#C~b0=(9S`-Z*rq_%Nr8me;FEOkXtF!#l z7z?;=W?U^5d`WSdlNqB|P?{%E^{jhkIkdN+5SC00EiVH#@m`qUnbtL8;E;`sOh7?X zO#fr}D(kPtG3w6%r!s>tT4~ln@?QiddIk$b8=EghApztz2?*6($C0aa#5J%?UM267 zJPtAIr$JLrxs^eOm9`JcQ8Sq>aRUW%&N2&?rj>KD>jODFnApEk`?`bU`@(IvAT4uM z+qrq>!qI82CqanI_3*rC1$TpaljzV1A8A&!fK+acIC=D|BF%R+-C6IFl@kb)n<1(~~V@DxeAt6GGd)Hz&?daj~ zFyWuoPX zwDYXPi+;xRPonXmnk0Hoktsv9vtCjk(ywp$Ye{WOYNjilp@!x}VhI=peqS4>{SZ>&hR$;8`(Gyo2|Sf2zb zrg$R(^>^OMGXi;MPJA_O7f$u>j(=EbPj)pKRH?XNLLl^VMP?_=!nbz>c*Ob%_|rTf zR+nX)flMNFa)Oe%0U-6{lgTT3x#m?*rg+&1hzl8Uoz=VRIkj`?)_} zDSEQf>WT1~m(kV}S+2Rt10B=+-D&c_eRb7;_A(#%v*H8R?jkji2%d}4ES40Z6E}{I zjeq_m4$cp+8?jk8(muts-BEpmmT@1b=q0az3i&)dlss;oHl@lIAL__eY2cWEa&|Nn z*-(!asa(}yUX;wi`!*?|imye0lgF>LZx3J?PQI$lIM1d$!YPnH030^1N$3&hm7aNN z7`XeFFUq5f`gx2SSsSzz`YH-NTDH0^-w2$9D_MB)TYufFuc%BkvjAVTTti|t^yriG z)1*%~xByU!D3!^Z4P~zkt1ZYduRF{v&8RbA!Er{Xv~IG-Y7WBXv$UAa=!injXv{N| zzr$iw6y*(W*5Vq$I zvZpF5>;^Z4sV>DXp^a_1jwJm89k@ z#CRlD<;Vw0ZR8e{f3&NpF=P$IB~L0r#MCK&o=sE?jfA}5=f<1KS7JBsc)I^Kr{BhF zAeRymAu!#Oi~x`4CW&H)vx4320Jv|s-Q=pp58u*1J~J5sOK)bQQca$YqQqt8@!u*#SE6cp!QpIWF%d@af!L+^01y6Bt$RG zmAW2~cI+Vk4=>-pKA!)=`?k}dHbZEWVLYqE^mYXJvzCXGUZu>ee^>oW7DgcAWjO7- zByS-wVoRE8{N^JDgWZW--yWmjQK0mr+sb03xDmT5mO@Iu@{I>Hzx9h%_?f3*T9c`B z;%7d)=G}g#FPpF_)U`+C$k(2J3ciX55UHZ*pX8Y-Tx&$|C}#k)f~tn4?d(hB&(_&C7r-l>T`om($ldgfdem z{^qO;MYMv*m1@P&P_9C9T1jsxIj}}kT+rS&%-KmXm1lVVjK^k?PfpKkdz6+Suo|Ol z7EWrIm)+jZb&QS_`aCS`7bpp#M$fE`CEsuOiT7#vpYMuY&3(DKL=2#(soV9BY*7=5 zJaxnFaI49DB^Z;zmBajRC!C=z+8YQYQBodNa`fL8N!vlMzxz=Gc@GjmBSZCNC(SBPrOS+M{4?W zoW)N4v-6Do=U===mgc*uSlX(3akVguo>6_cjJ0v*}s4ca=LxnEB z;ibQ8%_HNa8t1^lM8#R8OXAb2YRGc~PLf^tW>y6PO7CDlcW!{2$0L8I29=sY?RK~T zd11tABJy`ro@ZK8J4AEy(cBWjEX5ZOIUjn*b7+(FEO^AQ(9>A2tEt65m~_!vJYZ*v z$*KD+mG3PVs@5z9;IYyq6Y)&2R!7^oblrO^dVi@w)fE?$xGWsBnaTCMPZx?NHe^&F zo#8@Jxr*s&JW!`-r_1E!7@j$k=<2Vl7;}$)R%HL93m}5Kk7r9&941++XHe}Z0Pm~I zMR$Vc)mX?`YeeE2gWs6_NNM8Ib*SWL+Rq2vqLHTDNTeWq|E;k}H`;%;oC38dS?0U* z93S);w3YBYK%)pr zUXzz1Ap9Xfw8G=;K25V5U2%qQH;?8O4U>qOH9rRx=nk4HG2OiLX(Nn7A7D@C<-d65 zEZ?YycI8fRn+~X6eX_CCbH+$P65#3<5;$AlBn**)g1jA{@shLE6{bJYuYioK{Fc;` z^1z;(@kB__fJa+fhKg1VXI#DL_2gA19v?#Kn8ys9s$Uc+4h)yEHsz2zGh`&k9D2#r zR|B&c;rodq#q_JTnioU8YMt}nygOQH z?$5DO2M4alJn@tyldxE?*w2=87v5(V2J4*AB_YJb*kZ%M&aUVRl_YD*8(KaRoy^n}#;b*oNu((3f zeX6KQ(NR+PEjBJ$g7@7u5W=l-$KbW z$js8EA*A9}0o+#lH~^&-qaD?Y;~z5qeV~!mR3UZ68-as*7j5}1eGe{q7h{L2;hr4YWp@cG^wX$p1Z`Iys^AYFQA`8n zZoeYlqRn={DN|AOO-zw?jz0r7&a1Ia)DZ6m-4^pQkC*oM`tz^(yAmH1&L$LuRUCjP z8~lK1{##gf8Fhe(& z%}GC;&a24df5SYS#LW~+B|OgqpUw1;(|q_tx6)MxxodEjbO64l8f;yH^0hO}?C$5g zyssAgaik~F)=!h%yc%lT$M}s!yIPt@MGqLu$7u3JeoKD0aeYK^V#FR}V%65$5jj=n zP49&XNkJQXQTRd;wUeQr9K1F<0a4Mp=p~$DiVJ3#KG4Al{&dk^1wL{Cr?2z&fs`hk z3k01U9_J}ecPI|;!IyW>Nqr_lEdoNyrd>uzL<|6IhvH>(1b67WO?Dkr71tDv(}F5- zn%!MC%*$~T*1yXLq>4gFl^KT%Gf*BCYUH8S-CwmrURQ$#F)E{yn#<^cnbzw_98lrB z%u*p#!j|kS8Af4&a&JT?0gHXILV2R1t3{$0?htvRIZUPX$^kMPZI=Kxccp`LMn~iJ z8!S7Za}Q%{BGRMvh9o|Zw`CRA0!@H%0eUG;&#SwMb@~F@IU$_NE_k#Rcmg}W5w{n2 z@z#YZ#!!jN(6aQyG;Wdx@3*HX*0zEJX%}9O0*`9f)yoEMS zU*1n9@iRepJ{h27-S>g`#Ny$3%8E7Dhl<_=VUVnFktDNE>8s#`c7lh6ydBk`ih_Bg zVn_kf5z5S-ndMX}@2v)o~z8**>XB%sT+{QV2?(gMiPnqz=5M!nVfxBgr z%`D_8!rH(c7C!M@s;T<~ZM;E2E?OE3LZ@6#Y37`A$OoKMBJ?Nn6cs0O<>T}2TdZ{j zIXEo%S=?M6PrD#t07YzoXZfU8bLw7po+zw`RkyCMsmdiA_c#-KHjH>wf;?7At>v(b zaKbbmMHd<(Z;D=wXO0}UE&cRI!a-YHWwp^<6|*ErC2`AZpdfF4OB{#rpw;1^!Gdwl z^>31=Y&tsnSJ_~#48Gb*o;X_VoIq2z47ciaBF$dc-*F(;btrb_&>xO$vTdFPgTJ(L z-mbD7TK(D(c3#xvyjt8IiNlSW=`*X!fT^S-oszN~3qdkgKgy(0#Vxzg-odTvvN;9` zsFgG7%%>bT0DXR>TRmEs;%UH*Av{GuGHyQdRkN>Yzi-iw+5wuU5E0(W@i8 zuZb=)%@v=UbUQ6qs-CELAN?+Y>z~EOPbq>&S~3I8k8PeKBOs>nv;B)j43G5faGLLw zjf)0bOdrFYt)Yw3oXCs|77xe$=7LX-8l@3wI%?q*)jbbI?SL{*GwA-e?9-o&)O~_K z9Mn7KMOVFHD5|o%$8?;1n(9J0AI?e~tbtAJQo}tsrL@W4lWb~Hg1fh-n3S9a7W`() zO+oSgoC>;-nSRR@wpSrsJPuh|*zh|^@=iu-XQ4J~_#GT#OY%mIHa?K_)H&JC;L_I` z^`1m@?-d3+^7gJd@1&Y?#`_eDyjL(HOGEpm&B({PL~1M)$viou&sr45c| zgD|PeRgrO3lP(>!q7B=*D9y`S!AR;o~UVr!*$g zE)R$RS_ubQIfmoi=BBhcEzPvBc2=BJ+}spZ`~#&XtmS7^`W1wZ zH_!_8U4p%J^VBr#=Csu&dCIZ}*YsqgAC{jLrZ8bXln=4C-$4+oM-SVfnbVAv%NqSo zpw1NGst5`;nwx(6i5It)4cdlSm-9*BS+whPHqY7o6Y$&ZV&6PNt7CoSjpuVNtz=T` zq^GOXIyOAEU?s~#uk+!i>J{O0R|{kZ$w-03X)ouf02A7F%E7x?W7uT#bkRILzQ(Eu z_xiBa2YGlWQZzs5uFsse(R>_gD~tAZHg(_C>IiFu*3@;KX!*`5>1I%}l&*(n5Fup; zR<@VuFc7g$=7diRP?&U(@4y{Y{A|;MrLkZM#a233EwNEAbau+%ap@&W5S?bY#mj-V zQv05v1(8Di@-{_W6t6^El+6D;{k*aq@U66S5}02MZF1f%(FU($q8F3z zE-PwIB>&+?IU1$=W6#79m6=Wztz#9=XUI_uU1p{f>bZzeJ-uG>!_OPcRhSZeS2*mc z{}{s$H{)BeZRK&z}~;w4*Uq@kbfHC<$-=F$$=&2|&Zb_x%Kg!I@!bBFa5aBYMwoQxfq>G3-^?5L&S zgFDOUQYDWMeP9x+LhM0#hB$;FIZU2y!6p3<^TMUA5CoCe>ErGV!#=C9TNM+W+liE- zlF=|g3GzR-_@Z6?)gJf>NAdFObUbJh>u3z9oHASe9yNw3r!;|{WXYbZB#HX8SkFQ< z-Iij5tQ0p-`Q9t!gW31dMk}6M(K|<<B3bV*@a{e>nkF3b9Risih1af>|sWB0NZMD95CkeX*7qhn*e zt41(Lj>DHJ#fd-KdYVzb4zED-$u|x3^s|=*i!Jl~xSPtNQ_C#Oe0X-bzMP!qjkK_T zLklX`z32c7f2wlG!hyGO-TYehYV~xhW zO1UESv(sP$U7I|8UqyL%Q)dqOi;}p3o5-tYUxx-n4U|*4k^l{QE+|~sX}Tz5s$GW% zFnP}zZO21YrK2#GsaH9O{n4&-j(nyN9nzn$w9xjjZCr2H^% z_{bXPkwfJnD)9N5_9>l+w>4Bqz2n1Sde`>I_h0enGTO)2QjV3kM6oMG>!14uWUrS# zG(?dj9~Q|7&FqqvQpx(t2HA(CU)jg}&*P+q;&WMZSMLj^*{Pt_NpuxX8E;|;Fz{o3f` z-O}i^G;SuS*9_F6qbmq?b1UuqWg6|yO6Hk0#N>Z$Y4fL%ej?_LN~Y?h-#`XQLq9`u zE?QbrdipRM4Ss~>Q!W#P;=P$32t0{8@O5~yFs)-9TN~w8WqAAD32m^mp{IGE-4Hr<8F%yROA>UQvQ3cy0dlB5#Q0R({dyZ)MF+G9zFmRT+C`q%8n* zSl-xacyYo~)9J)OF<-G{ResGV(i8FHu4ei?Yu{;t_~<>&dljkcs<$i#{n-GAGj4Uo z#=}}2fvtor(}|H0XM(9LLWXP$v_HN;E4a&_?MEx?g{$j^?4_1(opF@UsO13 zZU=fCe(8nhMZf8oV!(EgPv(p^W&?28mYJs~jb`G?_v-tLaYS!!H*;B`rb5;^Fnov>VU{~f1YQ-uaX-NZwEuQ|L|@fm3=boi=d9X<*YIn#U6-I zs{-5AI#3FkInCQosWGwKUbbTc6yp2ad7UE^i{f#a#0=lv=2v|HM`)Hs zA>v%ivEkxCP*XL`!7PL~x|WQV9Wx@3p4ND<(vkZq5inC;{nTOiB`{G9CF56sE46md zyHUoGh!;e?EtSY5eX#)bS;8fJyv0Y9j(j<%o<Av>+pL)kdv}X=w zw=ZxRj#5rJML7nxd_#(0O9#m}G{0vXsIGo>O4i1b?Vn8{q9nre63i3IQa9RsF()pM zb+R$>JwbmsSgWk5vzg@x#CD_FBndM!>d&Q9L0V zR(+@Ubhy#Sp6yu&h~1dpcbxeQm)NLAJxbG@cP}PmUOz*pEz~bbU+$1GJ?SX-mdnO@ zH72f()$w~6)O?MFvW-kIyY+hOy}FdW=uR~K;J)x>q9sgV)UvJ{BapRH<5C+uj1b&; z{cQcWOO&Ob+pOAKnws6$n<|W0J3|2vMvE~YJ@GG9ZpDcS)+2&q$gVGcC=7;AO*doh zpD7mPe!CrkL^C^&RWXM(Q|wG-Uw--rMEh6s;eY$y>)A^>FTkuJN`!g#pT|%N^*i_d z?N4t%ZOqZXo1OmXGG}63up>#?EM_*Pvsua%x)5Agu{F=D9CNJsQ}5>T^1kW&&eSxO z45f&`*Y5sL_}^=U1!oR+$@AP$%lB`)6Bu>Wseizv2d)cdY-4vgN(hwzN0QRzucxO z6r8dYc9fizR&!{KTjmy~U(?eDClR6vyq0&r*=XN>ks3&3qh8L3Pj%TOZeXv) z_NXaE-(Mw~+-Wt3>SWiKHFR3vep!y!q#WOS6EmGwI^2!pu}$Ca9BeiholEMcmuFG0 zpE-}6KKw8!6Friq7FlFVxqM;6q~^4eN2R?y0hw(*A6aZG%Ios1dO-h0KAwW?)UF#; zA_gpwvlACY#C2^?HRaP@OyCOgWdht?NL#Tt{ei5t4aI>7iq4jvqT#Y3TEDSV&^NY$ zoPT$`_5NeAsItZkAIN`Psh-KIJk69H8fmVgCP|W=2xl=kJLV~8*H3jKJES!hszkI! zDn2ddd$;TCn0_lPmXbc+*&4fv$qWlS?vh>rdVh4(i9IpdQ!O<5XnD_iqR5X~{`SRE z*JM*tS+0+d`8-ipaI`zc46>!Jr^DPlXjVNd&ZI^*AVND^hy-dqlw8~UQd(ZY8VKeY zFf|q{uSs^1rywy6S|9!A7Jesu!7(*)ymFe2 zog>){CZsjlyi%!AAbFDRru^#F(%q`M#ve93&jp4);w+SMeA)0mO{vk(a@0$UOwid7 z$*xz|!I_8?X{w%aQaX9(l@Ir7WLfvrl+rU!)EOPKemhF6qpc_T7_Bzh78Jn0o~~on z{;6*W4{eY9;p$+{s`Qh`QqbwtG(*;--ciuDr#v?9dFHCNnmr7pqs`qsg6k}TK`SU- z@R*A7!_HS*nTw1Xt(w$qhr(KM4bsly)*O$z@YwBlWwQ1D>0$2M8SGuD#4}^TlZ@tT z1n!KmbZT=ms%!@G1+@TMcIQSs5htBJ3UV&9R+IM{E5!pB~XI#M%;CEW1wPTxo45ua$djPATZ*4(eH|cS>EjuU@v}r22h^*Kg8{8u6ep*gT)M|)rA3UO$u;VV z2);MijAjXlr|bHP)qgw=*7oGLsAg&Nqi;Sbni#OGDVZ*u$laYy1EjqhRUdXqMxenF z>+!QXR(69303t3K4fQ0jGr898=$)cwjl(;CGw7V%57Z&D(z@u&7xYPsP+C8oO2L2U zx5owDJ?j>V|I{Qb8dCcQO1GosYJ=`%hfH@CiBr`Og45$m9? ztcR%Y<%9Gs*h;SurOK|bz8mmwbc=>dM6BH-mB^zFt<9`-*$1%vkHs*SFuhA(9UuCR z_-MT6>W<^UO*(HtJ^tz}zPEbwqJW%_%I|s#EZO_WT&t|8@Q{=$Q*+AGVS+v3yJw}1 zPUy}9vM;w+%#frez~5^Rwu$a#%s@>XZ$u;Q_DH4{!caMUP1UL-fnJ@#Ae4R#_x}U@q>dg)X@^ne2P9$79S-5ZMt6mRSr8@purOs?T&` z&O3TJ$nn7|?%^bx-!8ES#o1WGa&i==GE7eKV}dd@pS`__^yQ&@8`E(d9(2bLyk_Yp z*E&u)`{no$C-4#QWG@Fu*ZAf30~;iLUSR$@ZUv5@BcNEl@2(=L{o*gAAODV!KGPrN zpgk6e=&F;4Fn4+Ve}2FbKAqiFH4Mgvu6{cI?qitXLq6lT{{Tm)nwcqZGrR%56-|b9 zlR?5!^sZ75$CO=whkd8R$1xrI5)h&l`fg_J+fG|{G;(W_f8{@^|*NLe_HlnGdnVp`ZNe-u5H3qa6$Kwf{9U=8q-OxkRSI$i?pfeK{Zc7Vp6e7jy5Q zlW6Ai^~Irm6!Dj9kJpQcVM84q0O13FHM&ZsnemP(T_v^ z+SYGPw2Lbj01@;lhTx4VkokaSP+|OL_}{jFlcgKj?Y&{rzm)#V5ZW|UR#sy)Ej7*c za=iKuUX-KccUudJpp*N@CmroQf5~MRftB34(%|C|n|5%;c$K^!KVja*p<8_Hb?zz* zpv9f;hJx?u#8WNwJSIwgTl29GLzs>ybTW<^n63|cZaGEZZ5T|yMXlk~G=k;GRu>V+ zkVGwq2H;e>l43CtOgq1yw`AR&U{}xBUcctb!@HWH$aidh3t9UZjc;2meS4&nJ-c&v zio;vR-8v4@c}2mTVg3dmT)xCtn==Yn*8NP}@9`E(DiI$}e5%50q6(@mQfw3}JfB1d zSD4D0-omz6gzbTwY-d}EESmN2{-(11Q6hdR zfRoOM^eA@J3PwSVf`t3dHGvWgMpn~_O}*uz&yDifbq+bdZyJ43;U?*xVkOv8sv`{^ z6cPrN>r-c-+wx{|dJtW&P|Y#UJCr$7yQ?Jt@I%<=vdte|Iw+35sNkpFBT&#PO%E|c zfN7nuQ#duupR!WQV|x9AaSV>`H*%z`>`~=Cj0fO{*2j@N!0;}m_bQps{ygfYUU*L{ zqi>w+rwgBO+@(+HdD(h}GTtydWaPRe2YxM+Sv6f=;DKDl9@^Jmbc}_Oq_-}&KPE^) z+oZZn477uFsnsRF2go!`A?%>JekHD!WnA!9z2-ti{H2Izy{Vwvz@$%N zF(|c+CF(Z5|FR)kfp$?uBdFdCA+0!^3O%`#Y+;N6-d4^rn;hXTkjr-w~h0owbH zbpj9>jL*ps51cbMg;nM-fTE}GT`4t~^hZ^H=5fWP;;8Q2?rygD)I49ACR0%7m>P?p z#9!2`uoA)7T|{WRJ05lsF!Z}FJ7@XrtK?0aa8>vZ{rJAIU34EUPJVN_b925eJ^hoP zH`X>V$2V;r$Pz!Nr@NP^?1pJ{QYgz1pKbl#tB#fHjFS#v)BOHxI?L)*=A@#!_3K9T zfk=-A!xB?oUg=4c9l=)cq>ooE+$EXYk1Xj#LEd_2tT%sBQ&_i9#jPjaN+nh+Ptu4) zRwhMZwy!6|d|w-Wq~A)We@*&6{GQ#iPl4Jc`Q*%_H2s=d4>7)mwpi z&{KHz^TCNf6Iv3m^bNzHiQ{x;wbfiDmq}j)m+O(?b)uk)O_Bg8=~9z{)`T_$@q>!9Sj~D#x60dnxYMCq+&nzAJ6x{Hyh*(x zRbXm!OFF>%-Inx#clN_5hoQv$>pXl|T=|6|`~k~HxXLQj&3kKEieqVSQ$5=gPB&f~ z=FAouRe{BZFd7A;n22zKzzI{&$2p#x+EoSq3#iT8NW9|6BNoaz=~NRsZ-?(Ape=n z11GAS>DPYVgTompQVw5E>dZmYN0)4j&3uf^U+es*Ii6K^+22XO>s8V@F1p=?ptc_1 z+~fRlM+2(X$0fC7ypx42m-PkQrPK+s*d)8-k>Fo_oCe(h@ovv2Q!lnxSL+J4?c7A9 zgUL+w_$-D3!sNg7C?fSnxg6cp2KeK^Qk0SAw`HW&8rjnvp0huzU5_id+)iH9TlC+@ ze3-jhSpjTo`_ND}sWY6dr&uL2!>x4X%RiZGv#-!3;Y(Gi9G)OJ5e9KbQEImCy15>l zOAjM&95dPF7*Nb@#?B>mO5qY?vsaF0NsLze(tIZ@hrA>!_&MK1K%UDcE=mBnt`TXv z6h2$ckEO0@A4>n2r$tz5{G{o4H>R@@O#uA$R;$m9uZq;IV4=lM;~&wb4gV0P zZ$Xc`1ZKA!X15jYYaU-O_U~N9^&6sbwNLlevi+1tma0w+GaH?Wm&&J*UIV{lDWjji zY`rq(pNMA2CfCq}6H%r^2j07=8gS|*l`Poih~Ve(*V9I;o6C@R0|{8kZbA2JuYdRs z)cWXYmIg%BX0<)+`N{`-Rr4mEatX*XP`T>kMz>WhT)QY&`O`R5*hc!E*;rK!Hp+}W z%vvj56zoccU{dSy>=T-b*9B*Er-}9Y_{V@3M-KN-#`NVWN6~$rmA0~!C3p9^UZGDW z&6L4_Vmy$xm+J@ZRJ`~|5i$tpIXp)c{#`=vqogxjqVyRQEZ3UM>tsTZ8agDjy5$l4 zyFq^^VvTdry*U(_J<%xMAq1~gke3QYSoRh7h)+YoMy1UPO`Stew)c4r~Nzrw~O6wS@H4t zcXH1Tx2>Pw$MA$rOw^wgnumOSpo;HpWXH@YYztL1471YM>eKqZcWiZ~$Vd@X)!2-L zag_hi?c)6&@gCN|J;R3LPl15w(BtWX(n^o;r#^fQk~7AESu`wIfE~HsX8mwNvsIE? zYiiGKr3oJvg>F%TJvWG~e@ZBO>DucP-aDmVU>AYgY?mg+jUt?D;Mvct`8Aizx^{0) z4-ma5i`Bel^KWxf{43$9v-6wdTOlD&UeFJxC5TR{Em=`;*p=0KH=cVDEBjc&eAuAV zq){^jvpHD8i{;d=P~;5GN}dS%)3DALV&s~dD;tqyV|FQ&p}#}jIH^VuHq`hcA`lqq zusLc(H!FXr`;G7G%2#*|vUo{SILa3tQCg;S8dl-tZgjrCqt6bT=Ft0mFQ9QLRDASY zyFH3~G0+Mwub(Srqx6m|dS#<3%MJ)H2gzdc?|d)2vZ z|9QmxPfsEMMoVq3Xk0b*KY-BX_Vd2$C%0~I-kpdh{>ec_u?YoAgv;odF#BvI4$+ix zJ1@MvFS_dL-xtG|$S4CA`*TTbMG?k8f*)AO@|SK57;v5E?Sppvqrn8eJxj z1Fn8|K7tiq^!GlS#IZVptG&ByFU@sX!L~ugt~~KjR6jVTLi10b?N+z-R>0qt7w3S7 zG$ksSnws2@uD1dN!&tA5z5C{WJWdZavRkmV=>M3cq@pl`ERN7se?i<{6lbHcKSP`v z=#6ErRMKpqY!?1Pd2e54F{3$CCp$C#vC{oXd~a7_R4mze=_Aa)Z*eG-J95uH4lnDWs7PFn|W52alP#8L+3SV#yfB2pBmc4QOO<#ieWKXk1^cDc<0s#{j!?( z9)${xQ#D2Miq+EDz4~hH9R$K}7G<=s`1HemfNE&o(JN95UwCGLEBq#lzi@_kFH+8f zo6urk2_Rzr`ZsqoeJPSvpS^WlpC(yv1}Q)iF+5Ir@JnNI=3}Oa$!z02I-AOrra-gF z89n#H@o)^9yMbWexhLq}1{0U#4=jfbIDta=WT=(rc*hOcrRZwg0|Hw~iUHb7e&JNc zk(|HJHtvYxkH5aSf7FIkI#tim3uzVc{ecxs9N*GRk0w$O-y4ZyYcQZ{ZzhGMfMJtt z!s*%c(*l)*twca<#!GayZDsmt*_}{oICL{0x<*K+*~152Hm-GkdGnod(RpILlrho* zFHwDZd?_wX&LYsJvb~J22j`F`Cz0gejIx{teoL*+8O#AyR9ZhMm^8B{f>K$tSB89k zqoKcHB^#2DbD>uia{MS|3i+6d_|=!Mbb3_KpO2!y#J6BpUoAEvjMXCofTZN z*%vod5;wx$H(#6DlR?j{hQ&hA!iO4YwVt<#W)w`IpRL6!|tjswpLs8 zKc*haj`RzSGEy_rMf`aB>G5NX0SXh<_aDZBpOny88j$WS%%7hwE-1R(**DtOITz)# z@O^vw{k5yoyA>s8S!ud0lMGiJK9-p7Uop3Q~s!K$~tiVq8NRQ#&84j z13OnJ&uT6_w3U^;{on^X z;2SYg*hZa#j6T)Od!>sGhsv50a$;>JLwZb^*a;=xph2Vh9Ct=M@x+1_?t01KO3#NA zTlDFjGC?kwzCvP0Krp$K!Lrt~)+LqnSl~*0P`xJ4Qz^t<(JAcIHhC zGQAN{WE9zcJQr?o_&!NT_fx>tyC?C~3tkRY+W>pxE$2#U9ST6&{sfBCYylj(o}4_Y zc{Qegc=#@TY`0%Ek?jmo3gQyR&`5RVOBZFEZp_@XCBOmy94=RhQfXL@LXzF}C7cZ} zQY8s;aQqxM6zTg~sX%O)C3&dWXe;eCW<9>WR8~DYovf;zX_J4jH*&kxgEXVtHHNPL z5X7oDU|5*J0f+92v#Nj^Q?U{h6>YIJ6`e~zB3}jflkn}Xqx7^G!lipHcVWanNA=Iv z;STm0Rg0Gtq@vq#KjHn#W=_{XoVX|j&ny~hG5TX|UDIcTL>*G1H~MdLvt+B!WKMp) zj02rmA%&!dewOtHo2~~65|M{{N^C76IhB`3F2)Hf?S-L|PXkm8^k_(inlvSCR$-Ws zR&Nw;R>Mb%LZ{^Dq9fWmHPelxWm}J?o*TAj8rA6iHy)M?JU>iFLpnd6s2tBLBQ&GZ zVoj2W7hT9e*<~v>j^SX(?0929=VctxM9{~htb2$Z{#veQvt)xd8h-R=(xm!Xm+UPM zSDoIF*7euZq>k*6VUV!T*a?s)UsORglKX6bM6zptDZR< z+Ef$K2P(=2w}W5D&yY`KJ(26gY33`Uo4 z+}(3yIvYEiqRcLM2a$R7SLNyMu^X#O{q3B;@Xs4{M}Wj_s#xmp8j5wy3Mod15_!(v zJO(&u)jfz(p!l+Z%Ag_`*{KNlaA~;a=wS)aj>w{#x|LLde1mDC=l>)^o7Dby#|cdQV)iKAL3>;Q{nD8 z&q(s`TQhfxc@NUjj+H&!z+(IfL%hNG`x40i~jwQD8uI(K3x!`h6zDvzV> zYCR)?y)mMT(Q~YDDA=9$T0k-GNg)q23V!r-67j)x?UAF1#@7C5ufyCjUBES20b5kc z6aK3n`j=*K@_8+T&`AHBud@)}QS&o%y`dOn2m&djw2`2>=g`v9ekwflwRR-QPPd$O z0A>?Rl{hre4<;raYxLdamkGw=tJOZVy6==8Ly?xXZ~w{-%vRt-FG9@JIenC3Mx+%j zp3-Dwu|CuA?UzN*XrNMsu=vEVE{c~LQ)PY6yGu@?>WR_f>?#W~Rh;{KT*HV2dW=lNo_@w_s+IdAa z`L)~rZ$*@11(BxGL^?UIG$&F9{+FB25G-(p0*X&^w_72tCp}5kd{U zBtSwruirQJzS;ZpoH5Q#Mn-a%ylbuJna^DFmn4AoHAuyn$%B0t*lYzl{kGtBwdIbH zg+oney2|p{<|+jn?{9^K)gU;}xqh@O@Z)`S7P_KrG;BUCS)_LyK9Oq zyCl0v&0x-VGb?hjDVufSyAFphR+2ixMsra*)7Zlw4_}GK6}^d)j&YM+i|IeVw>qff z3#b0pVbU$5wC`p>5u%g5i_Y4!DQ{~1#?N_N>Ow7oT%b@`rNS-+!Sn6h%@tSJh4GMn z#6oSzx-q+=eYqN!;!8hGnsfeBi!wy@5}0eu3s?pn{Qv#?F`8yvnioFCNLskaNKNcY_n8@sy^=NTx+YAlDk8@j zxCl$Y;lk&CvS&KATn|70Y%ZPlty-xCpsOmco- z4RBad>VC88OW$kza^Y!DI?DKR+QNTj0aPyXt*XNk%0kAQwfRy9gQ6m~WaGNFcBY8U z-E?@XxuE5`fULqc@Dcw~+JUz9U@=_6vW3-d;2(I%N71mvms%*D-tqa%It7nb27>DwL3tI@~TuuO578|!Dul^A@omvY=X^RUqW zxsosXa}Y5V;yUNgjxZN!8q0Tv77Iw0S1p|R~vYRe?qsgV< zF{>UDswE04X|z7PX`>-7Pp!Y6p^AR+qT}%oZs!lf`}7{(pGK5VKdMageHI*rs$94L zdl2v3`Gg;OuJ{w}@`mm^E=`8)gSX7X>UWFOmJ$6aORR7xm6b0k2gPH1D)aP^x=8(ztK$p z-#2(3dG4txN3PC zESiUCUMcijRb5yV3aA$e<|S>7L(|RL57%VT~#_FNv z+@!v>=qiCOcg?V4N$jmLL5}Zy9Z@XdyDZ4Lil0`2>!xm{VW$*a4PS1rC@5+}^|lS- zxq(%6diegqTc5Xaw4|mTtlg{6iL4jr_ORX`pG*9FdI>aWhjNYB5UF;(MdV6kQA0F5 z(U{suQv|z)NuS3%$;6vJH$BvoJN36Ue`t2iyPGA7U-Ph-bB7xTTAXw}K3F_?$b0xX z{!k6H-OdHBl&)XynFkU{4gQz#JFp7B=oJ?292|)pw;Xf~6s_&MQa>cSI=Jnrq zl|}`*)5w0NI2B8wVv+83<;r44Pp4|44D+46;k!xw5v85pg*;I*Vvsnc2`jo^i7ZNj zVUZf0fv*>Gz4i1WKgF_0Jq@dsN1p#lYcn0R-z}Vhn^e8d^dP?8QRio|Z-&tM-N~ug zuvUlL%rTZ$4i^&N>r}j1o_8C*l0y9IFrTOO)~4~XUxS!shx#idbGMUg%#GJYXWPHv z1f*n|G*ZM1hSnj@L8x+T@j4rbK8?f=^z(%bHh1AY2>!rK49z@BPsL}Zvv%+uuh+gyuz17Q|AH*53Gjz2*tpu!+ zQsY1PuGbe#HmXmwWOrn_!;frQR^I;bf;A+ycZSJ|xBGFemuFVgC^^&&;LGuf)BvsA zXVlL6=E|~30*?fL&k~tM|5D(!@rT-(DK#oao{repzP-<}S{vQ)coKh@fZi|vwp2Dq z$RHojG!U`KaVJ$_L`xOoq*z_{&^0kedCbt{x#^?kbICH3q!(iBBp=#~`_D$bx2d;y z{DNiIz+*Fup2T+RV9o~3-p;vT>AME)KL@&z#4c`-%Krp#|M#hI`0(mznVk-3w+JI& znI0)iMB-e4+iOBtw$ic1dg9N#uHgbhJ~!{pVr<;e9v)96Puk(W&TW5;Ic-ZoQkj0rL5u_`vmf?=Em}arM3|a5=nEsR)HxrI{)#wPjn08Ibmb_d za<_LUpW7Yu44^u)y(%7D&&fWSZi#8->%NwzHtMRc{SY-VWyqeBVK|c9d%8aDTtacS z;v>WKxsmLf;WI(hB-u4pYbG{3y#nw*ObwjKrl6GaeGMiXnlX`2hql=efe6mKgAa0m z9qL*?49YjIEUxYDbvIjrnmzwvk?zl)RMJQ$r5;3FY>ymTl@AT;%c+PW+D#YNLWCumKI{xC`E{U`pdhXcZSY1LaFcW@|_E(Ld;9 z7DDlF|0#l-{;u;taP}9FCA(BsB+sBaSwNgIzcH9E6ZI=HI(qTj#EXjDeFw;swU(4n zd`j<>gp380@CCXucx|irQ@yk%y=^*I6WVI@7I+rA`zSkPX?G$s{*fH%{@UqFgjyW- zIqqT=|F@}ZMppC zv)Awyeb5~47veq`Lrll#*%4vrv(c)+ zI9GS=Pa;23IXGS7!g2G{9z!0&oeSe|t5Wk3E;GKA%ls(qHtKLCT0+C(@Y4f&+my4&Fh&JwWkY7NlO8p!? z`I?ZUsp@KVelSnXF$NCM&BhDSAn6QC--j2{^Ez|6|ow)KI za6q0boX`4clRDI+9b{#tFbotzyT`r>Y8COOS?)D zL7=XAv>|004(D>!5+C8E_B-p;xX7f6H&?;fajl(KLR8aOvLi-^q~Pq%zXRvDqNvf^ ztBdjzQjY8|$)lExZtX8e6S<@o%`Ar|P8Qhb39x`4MqWoA4x#1hYo*!UcZ3;aH{Wc> zWx+;sod1M+v>}pq)D1)E+>~*zOXX0dd79Xj=^KkrLyX$Y@2~$R>(*<-->zQ zAaiGOthKac`fl3ED-nE1dji?~RDOsj(e3k>rwWiq$q~NKhKKS-{OkRUo>v)W?-?HR zPP__vl(G=($gl6T@K&QNkSzzZ9vGRh^+Zdl9^!UB>eyyae=S`nElJkbsfs^Fc1`^= zw7ckC$T?Dx!~U}xIrGzW>lK5r?q$%zQ^&k#8q3F8&R;!~O$S>p+Hm(QgsbAsfbrCK zG%t%Hn4ztBD|dN?V@z$w6@>kuj66o%7-xyC+m6T{^J?MLL$8?Z{QRS?ft0=uZ*SlQ;hG z8ab^E)Mym(L@n;W>{%T9XEkJ(Gq$U+;6gV4%}3TizKe+Tq_<@?u~VQ6t8g3&a6c+{ z|B*l7*A(VUc7E)$2?U9(X?izb>(qj>&r{x;))yrMx?lKPfT@*RrIo6xLT5IX9h~uiJr?x(l*hA?%)dJ|Cwh)RQ6wfqROY)dNzaQ_e^9 zuLwT#toVH;601qw>05D`PKKpaOWPcfcp5 z5GZxL9^Lga* z86dLESGun7>3{CZ*I}ng8A5_yBS;qAq-tQjb4DS!+(@zdu~KMRBZI<~_NyOp-Q&ITjz*s?>JY z`Gd
FvGU1H$9he%estx_`C=vJF2Q<`bCOxbuWH6uD>}+><|3odrr>q$)VdOD|*Gth$m)@?! zc`+N(;wugBQ%^Rst=)Pv@_|G#f0BYE!pqzzXiq4flNa*IWzLB2_GGAfXLG1AKJh-0 zr-PMx)7OQh?0y(vmFyU5{myblSGu(k5U+8TB9P3b8^LPa?p3;1xhC`goecgp2S-S( zd(55~iEN7~1#Wi$DwmTx9}xNP6z|ctaxA(9=PaZ5hTEQt1kd3_s(9k8R142mGF1eY zcGtt0L!JJJ*kR*5vaK6Zb-#>?>r*k3FVxn}SGR}P=tYn2hiHsOh?G4xJSM+oNKUZp zlz>*7hiES#Twg9&r0I~f%civ5KRJ|Q8&C)E1ul;6 zORBr!juF<6df-Bk(sHK`AV!ZEeP_A*`XEYcH($!vPTx}ezV&GM6Kd<_xy{>Ol9bKA zCpAiQde4Nu-78-N|5pJ4S39!kxR^g&Uw8J?^*|X){3px@+`EU2eGxS`{$N_=O-Hj0 q>&%M8u-E@XoaetKJ^mm(cNiAXZn5mId|CI<9|ai|=?Y2Hp#KLf@~HR# literal 0 HcmV?d00001 diff --git a/frontend/src/components/secret-rotations-v2/CreateSecretRotationV2Modal.tsx b/frontend/src/components/secret-rotations-v2/CreateSecretRotationV2Modal.tsx new file mode 100644 index 000000000..8a824d101 --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/CreateSecretRotationV2Modal.tsx @@ -0,0 +1,79 @@ +import { useState } from "react"; + +import { SecretRotationV2Form } from "@app/components/secret-rotations-v2/forms"; +import { SecretRotationV2ModalHeader } from "@app/components/secret-rotations-v2/SecretRotationV2ModalHeader"; +import { SecretRotationV2Select } from "@app/components/secret-rotations-v2/SecretRotationV2Select"; +import { Modal, ModalContent } from "@app/components/v2"; +import { SecretRotation, TSecretRotationV2 } from "@app/hooks/api/secretRotationsV2"; +import { WorkspaceEnv } from "@app/hooks/api/workspace/types"; + +type SharedProps = { + secretPath: string; + environment?: string; + environments?: WorkspaceEnv[]; +}; + +type Props = { + isOpen: boolean; + onOpenChange: (isOpen: boolean) => void; +} & SharedProps; + +type ContentProps = { + onComplete: (secretRotation: TSecretRotationV2) => void; + selectedRotation: SecretRotation | null; + setSelectedRotation: (selectedRotation: SecretRotation | null) => void; +} & SharedProps; + +const Content = ({ setSelectedRotation, selectedRotation, ...props }: ContentProps) => { + if (selectedRotation) { + return ( + setSelectedRotation(null)} + type={selectedRotation} + {...props} + /> + ); + } + + return ; +}; + +export const CreateSecretRotationV2Modal = ({ onOpenChange, isOpen, ...props }: Props) => { + const [selectedRotation, setSelectedRotation] = useState(null); + + return ( + { + if (!open) setSelectedRotation(null); + onOpenChange(open); + }} + > + + ) : ( + "Add Secret Rotation" + ) + } + onPointerDownOutside={(e) => e.preventDefault()} + className={selectedRotation ? "max-w-2xl" : "max-w-3xl"} + subTitle={ + selectedRotation ? undefined : "Select a provider to create a secret rotation for." + } + bodyClassName="overflow-visible" + > + { + setSelectedRotation(null); + onOpenChange(false); + }} + selectedRotation={selectedRotation} + setSelectedRotation={setSelectedRotation} + {...props} + /> + + + ); +}; diff --git a/frontend/src/components/secret-rotations-v2/DeleteSecretRotationV2Modal.tsx b/frontend/src/components/secret-rotations-v2/DeleteSecretRotationV2Modal.tsx new file mode 100644 index 000000000..16f9a67d4 --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/DeleteSecretRotationV2Modal.tsx @@ -0,0 +1,102 @@ +import { useEffect, useState } from "react"; + +import { createNotification } from "@app/components/notifications"; +import { DeleteActionModal, Switch } from "@app/components/v2"; +import { SECRET_ROTATION_MAP } from "@app/helpers/secretRotationsV2"; +import { TSecretRotationV2 } from "@app/hooks/api/secretRotationsV2"; +import { useDeleteSecretRotationV2 } from "@app/hooks/api/secretRotationsV2/mutations"; + +type Props = { + secretRotation?: TSecretRotationV2; + isOpen: boolean; + onOpenChange: (isOpen: boolean) => void; + onComplete?: () => void; +}; + +export const DeleteSecretRotationV2Modal = ({ + isOpen, + onOpenChange, + secretRotation, + onComplete +}: Props) => { + const deleteSecretRotation = useDeleteSecretRotationV2(); + const [revokeGeneratedCredentials, setRevokeGeneratedCredentials] = useState(false); + const [deleteSecrets, setDeleteSecrets] = useState(false); + + useEffect(() => { + if (!isOpen) { + setRevokeGeneratedCredentials(false); + setDeleteSecrets(false); + } + }, [isOpen]); + + if (!secretRotation) return null; + + const { id: rotationId, name, type, projectId, folder } = secretRotation; + + const handleDeleteSecretRotation = async () => { + const rotationType = SECRET_ROTATION_MAP[type].name; + + try { + await deleteSecretRotation.mutateAsync({ + rotationId, + type, + revokeGeneratedCredentials, + deleteSecrets, + projectId, + secretPath: folder.path + }); + + createNotification({ + text: `Successfully deleted ${rotationType} Rotation`, + type: "success" + }); + + if (onComplete) onComplete(); + onOpenChange(false); + } catch { + createNotification({ + text: `Failed to delete ${rotationType} Rotation`, + type: "error" + }); + } + }; + + return ( + + + Revoke Credentials + +

+ Generated credentials will {revokeGeneratedCredentials ? "" : "not"} be revoked on deletion + {revokeGeneratedCredentials ? "" : " and remain active"}. +

+ + Delete Secrets + +

+ Rotation secrets will {deleteSecrets ? "" : "not"} be removed from your project on deletion. +

+
+ ); +}; diff --git a/frontend/src/components/secret-rotations-v2/EditSecretRotationV2Modal.tsx b/frontend/src/components/secret-rotations-v2/EditSecretRotationV2Modal.tsx new file mode 100644 index 000000000..e9efc27f2 --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/EditSecretRotationV2Modal.tsx @@ -0,0 +1,34 @@ +import { SecretRotationV2ModalHeader } from "@app/components/secret-rotations-v2/SecretRotationV2ModalHeader"; +import { Modal, ModalContent } from "@app/components/v2"; +import { TSecretRotationV2 } from "@app/hooks/api/secretRotationsV2"; + +import { SecretRotationV2Form } from "./forms"; + +type Props = { + isOpen: boolean; + onOpenChange: (isOpen: boolean) => void; + secretRotation?: TSecretRotationV2; +}; + +export const EditSecretRotationV2Modal = ({ secretRotation, onOpenChange, ...props }: Props) => { + if (!secretRotation) return null; + + return ( + + } + className="max-w-2xl" + bodyClassName="overflow-visible" + > + onOpenChange(false)} + onCancel={() => onOpenChange(false)} + secretRotation={secretRotation} + type={secretRotation.type} + secretPath={secretRotation.folder.path} + environment={secretRotation.environment.slug} + /> + + + ); +}; diff --git a/frontend/src/components/secret-rotations-v2/RotateSecretRotationV2Modal.tsx b/frontend/src/components/secret-rotations-v2/RotateSecretRotationV2Modal.tsx new file mode 100644 index 000000000..e2c931d49 --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/RotateSecretRotationV2Modal.tsx @@ -0,0 +1,88 @@ +import { createNotification } from "@app/components/notifications"; +import { Button, Modal, ModalClose, ModalContent } from "@app/components/v2"; +import { SECRET_ROTATION_MAP } from "@app/helpers/secretRotationsV2"; +import { TSecretRotationV2 } from "@app/hooks/api/secretRotationsV2"; +import { useRotateSecretRotationV2 } from "@app/hooks/api/secretRotationsV2/mutations"; + +type Props = { + secretRotation?: TSecretRotationV2; + isOpen: boolean; + onOpenChange: (isOpen: boolean) => void; +}; + +type ContentProps = { + secretRotation: TSecretRotationV2; + onComplete: () => void; +}; + +const Content = ({ secretRotation, onComplete }: ContentProps) => { + const rotateSecrets = useRotateSecretRotationV2(); + + const { id: rotationId, type, projectId, folder } = secretRotation; + const rotationType = SECRET_ROTATION_MAP[type].name; + + const handleRotateSecrets = async () => { + try { + await rotateSecrets.mutateAsync({ + rotationId, + type, + projectId, + secretPath: folder.path + }); + + createNotification({ + text: `Successfully rotated ${rotationType} secrets`, + type: "success" + }); + + onComplete(); + } catch (err) { + console.error(err); + + createNotification({ + text: `Failed to rotate ${rotationType} secrets`, + type: "error" + }); + } + }; + + return ( +
+

+ Are you sure you want to rotate the secrets for this {rotationType} Rotation? +

+
+ + + + +
+
+ ); +}; + +export const RotateSecretRotationV2Modal = ({ isOpen, onOpenChange, secretRotation }: Props) => { + if (!secretRotation) return null; + + const rotationType = SECRET_ROTATION_MAP[secretRotation.type].name; + + return ( + + + onOpenChange(false)} /> + + + ); +}; diff --git a/frontend/src/components/secret-rotations-v2/SecretRotationV2ModalHeader.tsx b/frontend/src/components/secret-rotations-v2/SecretRotationV2ModalHeader.tsx new file mode 100644 index 000000000..319607d70 --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/SecretRotationV2ModalHeader.tsx @@ -0,0 +1,49 @@ +import { faArrowUpRightFromSquare, faBookOpen } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; + +import { SECRET_ROTATION_MAP } from "@app/helpers/secretRotationsV2"; +import { SecretRotation } from "@app/hooks/api/secretRotationsV2"; + +type Props = { + type: SecretRotation; + isConfigured: boolean; +}; + +export const SecretRotationV2ModalHeader = ({ type, isConfigured }: Props) => { + const destinationDetails = SECRET_ROTATION_MAP[type]; + + return ( +
+ ); +}; diff --git a/frontend/src/components/secret-rotations-v2/SecretRotationV2Select.tsx b/frontend/src/components/secret-rotations-v2/SecretRotationV2Select.tsx new file mode 100644 index 000000000..d934dcb65 --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/SecretRotationV2Select.tsx @@ -0,0 +1,151 @@ +import { faWrench } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; + +import { createNotification } from "@app/components/notifications"; +import { Spinner, Tooltip } from "@app/components/v2"; +import { SECRET_ROTATION_MAP } from "@app/helpers/secretRotationsV2"; +import { SecretRotation, useSecretRotationV2Options } from "@app/hooks/api/secretRotationsV2"; + +type Props = { + onSelect: (type: SecretRotation) => void; +}; + +export const SecretRotationV2Select = ({ onSelect }: Props) => { + const { isPending, data: secretRotationOptions } = useSecretRotationV2Options(); + + if (isPending) { + return ( +
+ +

Loading options...

+
+ ); + } + + return ( +
+ {secretRotationOptions?.map(({ type }) => { + const { image, name } = SECRET_ROTATION_MAP[type]; + + let size: number; + + switch (type) { + case SecretRotation.MsSqlCredentials: + size = 50; + break; + default: + size = 45; + } + + return ( + + ); + })} + {/* templates for kubecon, remove once implemented */} + {[ + { + name: "MySQL Credentials", + image: "MySql.png" + }, + { + name: "SendGrid API Key", + image: "SendGrid.png" + }, + { + name: "AWS IAM User Credentials", + image: "Amazon Web Services.png" + } + ].map(({ name, image }) => { + let size: number; + + switch (name) { + case "MySQL Credentials": + size = 80; + break; + case "SendGrid API Key": + size = 50; + break; + default: + size = 45; + } + + return ( + + ); + })} + +

Infisical is constantly adding support for more services.

+

+ {`If you don't see the third-party + service you're looking for,`}{" "} + + let us know on Slack + {" "} + or{" "} + + make a request on GitHub + + . +

+ + } + > +
+ +
+ Coming Soon +
+
+
+
+ ); +}; diff --git a/frontend/src/components/secret-rotations-v2/SecretRotationV2StatusBadge.tsx b/frontend/src/components/secret-rotations-v2/SecretRotationV2StatusBadge.tsx new file mode 100644 index 000000000..ace829aae --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/SecretRotationV2StatusBadge.tsx @@ -0,0 +1,119 @@ +import { faBan, faRotate, faXmark } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { format, formatDistanceToNow } from "date-fns"; +import { twMerge } from "tailwind-merge"; + +import { Tooltip } from "@app/components/v2"; +import { Badge, BadgeProps } from "@app/components/v2/Badge/Badge"; +import { SecretRotationStatus, TSecretRotationV2 } from "@app/hooks/api/secretRotationsV2"; + +type Props = { + secretRotation: TSecretRotationV2; + className?: string; +}; + +export const SecretRotationV2StatusBadge = ({ secretRotation, className }: Props) => { + const { isAutoRotationEnabled, rotationStatus, nextRotationAt, lastRotationMessage } = + secretRotation; + + if (rotationStatus === SecretRotationStatus.Failed) { + let errorMessage = lastRotationMessage; + if (lastRotationMessage) { + try { + errorMessage = JSON.stringify(JSON.parse(lastRotationMessage), null, 2); + } catch { + errorMessage = lastRotationMessage; + } + } + + return ( + +
+
+ +
Failure Reason
+
+
{errorMessage}
+
+ {nextRotationAt && ( + + Next rotation attempt on {format(nextRotationAt, "MM/dd/yyyy")} at{" "} + {format(nextRotationAt, "h:mm aa")}. + + )} + + } + > +
+ + + Rotation Failed + +
+
+ ); + } + + if (!isAutoRotationEnabled) { + return ( + + + Auto-Rotation Disabled + + ); + } + + const daysToRotation = + (new Date(nextRotationAt).getTime() - new Date().getTime()) / (1000 * 60 * 60 * 24); + + let variant: BadgeProps["variant"]; + let label: string; + let tooltipContent: string; + + if (daysToRotation >= 7) { + variant = "success"; + label = `Rotates ${formatDistanceToNow(nextRotationAt, { addSuffix: true })}`; + tooltipContent = `Rotates ${format(nextRotationAt, "MM/dd/yyyy")} at ${format(nextRotationAt, "h:mm aa")}.`; + } else if (daysToRotation < 0) { + variant = "primary"; + label = "Rotating"; + tooltipContent = `Rotates on ${format(nextRotationAt, "MM/dd/yyyy")} at ${format(nextRotationAt, "h:mm aa")}.`; + } else if (daysToRotation < 1) { + variant = "primary"; + label = `Rotates ${formatDistanceToNow(nextRotationAt, { addSuffix: true })}`; + tooltipContent = `Rotates on ${format(nextRotationAt, "MM/dd/yyyy")} at ${format(nextRotationAt, "h:mm aa")}.`; + } else { + variant = "primary"; + label = `Rotates ${formatDistanceToNow(nextRotationAt, { addSuffix: true })}`; + tooltipContent = `Rotates on ${format(nextRotationAt, "MM/dd/yyyy")} at ${format(nextRotationAt, "h:mm aa")}.`; + } + + return ( + +
+ + + {label} + +
+
+ ); +}; diff --git a/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/ViewSecretRotationV2GeneratedCredentials.tsx b/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/ViewSecretRotationV2GeneratedCredentials.tsx new file mode 100644 index 000000000..79a431bc8 --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/ViewSecretRotationV2GeneratedCredentials.tsx @@ -0,0 +1,96 @@ +import { ReactNode } from "react"; +import { faRotate } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { format } from "date-fns"; + +import { Modal, ModalContent, Spinner } from "@app/components/v2"; +import { SECRET_ROTATION_MAP } from "@app/helpers/secretRotationsV2"; +import { + SecretRotation, + TSecretRotationV2, + useViewSecretRotationV2GeneratedCredentials +} from "@app/hooks/api/secretRotationsV2"; + +import { ViewSqlRotationGeneratedCredentials } from "./shared"; + +type Props = { + secretRotation?: TSecretRotationV2; + isOpen: boolean; + onOpenChange: (isOpen: boolean) => void; +}; + +type ContentProps = { + secretRotation: TSecretRotationV2; +}; + +const Content = ({ secretRotation }: ContentProps) => { + const { id: rotationId, type, nextRotationAt } = secretRotation; + + const { data: generatedCredentialsResponse, isPending } = + useViewSecretRotationV2GeneratedCredentials({ + rotationId, + type + }); + + if (isPending) { + return ( +
+ +

Loading generated credentials...

+
+ ); + } + + let Component: ReactNode; + switch (generatedCredentialsResponse!.type) { + case SecretRotation.PostgresCredentials: + case SecretRotation.MsSqlCredentials: + Component = ( + + ); + break; + default: + throw new Error("Unhandled View Generated Credential Rotation Type"); + } + + return ( +
+ {Component} + {nextRotationAt && ( +
+ + + Next rotation occurs on: {format(nextRotationAt, "MM/dd/yyyy")} at{" "} + {format(nextRotationAt, "h:mm aa")} + +
+ )} +
+ ); +}; + +export const ViewSecretRotationV2GeneratedCredentialsModal = ({ + isOpen, + onOpenChange, + secretRotation +}: Props) => { + if (!secretRotation) return null; + + const rotationType = SECRET_ROTATION_MAP[secretRotation.type].name; + + return ( + + { + event.preventDefault(); + }} + title="Generated Credentials" + subTitle={`View the current and retired ${rotationType}.`} + > + + + + ); +}; diff --git a/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/index.ts b/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/index.ts new file mode 100644 index 000000000..31aa279b4 --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/index.ts @@ -0,0 +1 @@ +export * from "./ViewSecretRotationV2GeneratedCredentials"; diff --git a/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/CredentialDisplay.tsx b/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/CredentialDisplay.tsx new file mode 100644 index 000000000..783510336 --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/CredentialDisplay.tsx @@ -0,0 +1,55 @@ +import { useReducer } from "react"; +import { faCheck, faCopy, faEyeSlash } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; + +import { GenericFieldLabel, IconButton, Tooltip } from "@app/components/v2"; +import { useTimedReset } from "@app/hooks"; + +type Props = { + children?: string; + label: string; + isSensitive?: boolean; +}; + +export const CredentialDisplay = ({ children, label, isSensitive }: Props) => { + const [showCredential, toggleShowCredential] = useReducer((prev) => !prev, !isSensitive); + + const [, isCopyingCredential, setCopyCredential] = useTimedReset({ + initialState: "Copy ID to clipboard" + }); + + return ( + + {children ? ( +
+ {showCredential ? children : "****************************"} + + { + setCopyCredential(children); + navigator.clipboard.writeText(children); + }} + ariaLabel="Copy credential" + variant="plain" + size="xs" + > + + + + {isSensitive && ( + + + + + + )} +
+ ) : null} +
+ ); +}; diff --git a/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/ViewSqlRotationGeneratedCredentials.tsx b/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/ViewSqlRotationGeneratedCredentials.tsx new file mode 100644 index 000000000..08068b1fc --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/ViewSqlRotationGeneratedCredentials.tsx @@ -0,0 +1,57 @@ +import { faCheck, faClockRotateLeft } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; + +import { CredentialDisplay } from "@app/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/CredentialDisplay"; +import { TViewSecretRotationGeneratedCredentialsResponse } from "@app/hooks/api/secretRotationsV2"; + +type Props = { + generatedCredentialsResponse: TViewSecretRotationGeneratedCredentialsResponse; +}; + +export const ViewSqlRotationGeneratedCredentials = ({ + generatedCredentialsResponse: { generatedCredentials, activeIndex } +}: Props) => { + const inactiveIndex = activeIndex === 0 ? 1 : 0; + + const activeCredentials = generatedCredentials[activeIndex]; + const inactiveCredentials = generatedCredentials[inactiveIndex]; + + return ( + <> +
+
+ + + Current Credentials + +
+

+ The active credential set currently mapped to the rotation secrets. +

+
+ {activeCredentials?.username} + + {activeCredentials?.password} + +
+
+
+
+ + + Retired Credentials + +
+

+ The retired credential set that will be revoked during the next rotation cycle. +

+
+ {inactiveCredentials?.username} + + {inactiveCredentials?.password} + +
+
+ + ); +}; diff --git a/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/index.ts b/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/index.ts new file mode 100644 index 000000000..b964f5bba --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/index.ts @@ -0,0 +1 @@ +export * from "./ViewSqlRotationGeneratedCredentials"; diff --git a/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ConfigurationFields.tsx b/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ConfigurationFields.tsx new file mode 100644 index 000000000..0fd14bb1f --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ConfigurationFields.tsx @@ -0,0 +1,124 @@ +import { Controller, useFormContext } from "react-hook-form"; +import { format, setHours, setMinutes } from "date-fns"; + +import { FilterableSelect, FormControl, Input, Switch } from "@app/components/v2"; +import { getRotateAtLocal } from "@app/helpers/secretRotationsV2"; +import { WorkspaceEnv } from "@app/hooks/api/workspace/types"; + +import { TSecretRotationV2Form } from "./schemas"; +import { SecretRotationV2ConnectionField } from "./SecretRotationV2ConnectionField"; + +type Props = { + isUpdate: boolean; + environments?: WorkspaceEnv[]; +}; + +export const SecretRotationV2ConfigurationFields = ({ isUpdate, environments }: Props) => { + const { control, watch } = useFormContext(); + + console.log(watch("rotateAtUtc")); + + return ( + <> +

+ Configure the connection rotation strategy for this Secret Rotation. +

+ {!isUpdate && environments && ( + ( + + option?.name} + getOptionValue={(option) => option?.id} + /> + + )} + /> + )} + + + ( + + + + )} + control={control} + name="rotationInterval" + /> + { + return ( + + { + const time = e.target.value; + if (time) { + const [hours, minutes] = time.split(":").map((str) => parseInt(str, 10)); + const newSelectedDate = setHours(setMinutes(new Date(), minutes), hours); + onChange({ + hours: newSelectedDate.getUTCHours(), + minutes: newSelectedDate.getUTCMinutes() + }); + } + }} + className="bg-mineshaft-700 text-white [color-scheme:dark]" + /> + + ); + }} + control={control} + name="rotateAtUtc" + /> + { + return ( + + +

Auto-Rotation {value ? "Enabled" : "Disabled"}

+
+
+ ); + }} + /> + + ); +}; diff --git a/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ConnectionField.tsx b/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ConnectionField.tsx new file mode 100644 index 000000000..7bfa62201 --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2ConnectionField.tsx @@ -0,0 +1,85 @@ +import { Controller, useFormContext } from "react-hook-form"; +import { faInfoCircle } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { Link } from "@tanstack/react-router"; + +import { FilterableSelect, FormControl } from "@app/components/v2"; +import { OrgPermissionSubjects, useOrgPermission } from "@app/context"; +import { OrgPermissionAppConnectionActions } from "@app/context/OrgPermissionContext/types"; +import { APP_CONNECTION_MAP } from "@app/helpers/appConnections"; +import { SECRET_ROTATION_CONNECTION_MAP } from "@app/helpers/secretRotationsV2"; +import { useListAvailableAppConnections } from "@app/hooks/api/appConnections"; + +import { TSecretRotationV2Form } from "./schemas"; + +type Props = { + onChange?: VoidFunction; + isUpdate: boolean; +}; + +export const SecretRotationV2ConnectionField = ({ onChange: callback, isUpdate }: Props) => { + const { permission } = useOrgPermission(); + const { control, watch } = useFormContext(); + + const rotationType = watch("type"); + const app = SECRET_ROTATION_CONNECTION_MAP[rotationType]; + + const { data: availableConnections, isPending } = useListAvailableAppConnections(app); + + const connectionName = APP_CONNECTION_MAP[app].name; + + const canCreateConnection = permission.can( + OrgPermissionAppConnectionActions.Create, + OrgPermissionSubjects.AppConnections + ); + + const appName = APP_CONNECTION_MAP[app].name; + + return ( + <> + ( + + { + onChange(newValue); + if (callback) callback(); + }} + isLoading={isPending} + options={availableConnections} + isDisabled={isUpdate} + placeholder="Select connection..." + getOptionLabel={(option) => option.name} + getOptionValue={(option) => option.id} + /> + + )} + control={control} + name="connection" + /> + {!isUpdate && availableConnections?.length === 0 && ( +

+ + {canCreateConnection ? ( + <> + You do not have access to any {appName} Connections. Create one from the{" "} + + App Connections + {" "} + page. + + ) : ( + `You do not have access to any ${appName} Connections. Contact an admin to create one.` + )} +

+ )} + + ); +}; diff --git a/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2DetailsFields.tsx b/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2DetailsFields.tsx new file mode 100644 index 000000000..573217f92 --- /dev/null +++ b/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2DetailsFields.tsx @@ -0,0 +1,51 @@ +import { Controller, useFormContext } from "react-hook-form"; + +import { FormControl, Input, TextArea } from "@app/components/v2"; + +import { TSecretRotationV2Form } from "./schemas"; + +export const SecretRotationV2DetailsFields = () => { + const { control } = useFormContext(); + + return ( + <> +

+ Provide a name and description for this Secret Rotation. +

+ ( + + + + )} + control={control} + name="name" + /> + ( + +
+ {`${destinationDetails.name} +
+ +

+ {isConfigured + ? `Edit ${destinationDetails.name} Rotation` + : `Rotate ${destinationDetails.name}`} +

+
+
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�rFMdy@?X5`A2X63%O43f)RME2o$`9J^u-k$7~et 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�~rv+vk`Rku2O^_}IhmIt72 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