From b21b0b340b1ced1b5c045ca1e47cbe8fe6303b55 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Wed, 30 Apr 2025 18:14:31 -0700 Subject: [PATCH] Complete preliminary ssh host group feature --- backend/src/ee/routes/v1/ssh-host-router.ts | 31 +++- .../services/license/__mocks__/license-fns.ts | 3 +- .../src/ee/services/license/licence-enums.ts | 1 + .../src/ee/services/license/license-fns.ts | 3 +- .../src/ee/services/license/license-types.ts | 1 + .../ssh-host-group/ssh-host-group-service.ts | 63 +++++-- .../ssh-host-group/ssh-host-group-types.ts | 15 +- .../src/ee/services/ssh-host/ssh-host-dal.ts | 163 +++++++++++++++--- .../ee/services/ssh-host/ssh-host-types.ts | 5 + backend/src/server/routes/index.ts | 4 +- .../src/server/routes/v2/project-router.ts | 9 +- .../endpoints/ssh/groups/add-host.mdx | 4 + .../endpoints/ssh/groups/create.mdx | 4 + .../endpoints/ssh/groups/delete.mdx | 4 + .../endpoints/ssh/groups/list-hosts.mdx | 4 + .../endpoints/ssh/groups/list.mdx | 4 + .../endpoints/ssh/groups/read.mdx | 4 + .../endpoints/ssh/groups/remove-host.mdx | 4 + .../endpoints/ssh/groups/update.mdx | 4 + .../endpoints/ssh/hosts/create.mdx | 4 + .../endpoints/ssh/hosts/delete.mdx | 4 + .../endpoints/ssh/hosts/issue-host-cert.mdx | 4 + .../endpoints/ssh/hosts/issue-user-cert.mdx | 4 + .../endpoints/ssh/hosts/list-my.mdx | 4 + .../endpoints/ssh/hosts/list.mdx | 4 + .../endpoints/ssh/hosts/read-host-ca-pk.mdx | 4 + .../endpoints/ssh/hosts/read-user-ca-pk.mdx | 4 + .../endpoints/ssh/hosts/read.mdx | 4 + .../endpoints/ssh/hosts/update.mdx | 4 + .../platform/ssh/host-groups.mdx | 56 ++++++ .../platform/{ssh.mdx => ssh/overview.mdx} | 2 +- .../platform/ssh/v2/ssh-group-add-group-1.png | Bin 0 -> 1125796 bytes .../platform/ssh/v2/ssh-group-add-group-2.png | Bin 0 -> 635484 bytes .../platform/ssh/v2/ssh-group-add-host-1.png | Bin 0 -> 611474 bytes .../platform/ssh/v2/ssh-group-add-host-2.png | Bin 0 -> 762301 bytes docs/mint.json | 40 ++++- frontend/src/hooks/api/sshHost/types.ts | 6 + frontend/src/hooks/api/sshHostGroup/types.ts | 2 +- frontend/src/hooks/api/subscriptions/types.ts | 1 + .../ProjectRoleModifySection.utils.tsx | 13 +- .../components/SshHostGroupHostsSection.tsx | 36 +++- .../components/SshHostGroupHostsTable.tsx | 2 + .../components/SshHostGroupsSection.tsx | 25 ++- .../components/SshHostGroupsTable.tsx | 2 +- .../SshHostsPage/components/SshHostModal.tsx | 88 ++++++++-- .../SshHostsPage/components/SshHostsTable.tsx | 12 +- 46 files changed, 561 insertions(+), 94 deletions(-) create mode 100644 docs/api-reference/endpoints/ssh/groups/add-host.mdx create mode 100644 docs/api-reference/endpoints/ssh/groups/create.mdx create mode 100644 docs/api-reference/endpoints/ssh/groups/delete.mdx create mode 100644 docs/api-reference/endpoints/ssh/groups/list-hosts.mdx create mode 100644 docs/api-reference/endpoints/ssh/groups/list.mdx create mode 100644 docs/api-reference/endpoints/ssh/groups/read.mdx create mode 100644 docs/api-reference/endpoints/ssh/groups/remove-host.mdx create mode 100644 docs/api-reference/endpoints/ssh/groups/update.mdx create mode 100644 docs/api-reference/endpoints/ssh/hosts/create.mdx create mode 100644 docs/api-reference/endpoints/ssh/hosts/delete.mdx create mode 100644 docs/api-reference/endpoints/ssh/hosts/issue-host-cert.mdx create mode 100644 docs/api-reference/endpoints/ssh/hosts/issue-user-cert.mdx create mode 100644 docs/api-reference/endpoints/ssh/hosts/list-my.mdx create mode 100644 docs/api-reference/endpoints/ssh/hosts/list.mdx create mode 100644 docs/api-reference/endpoints/ssh/hosts/read-host-ca-pk.mdx create mode 100644 docs/api-reference/endpoints/ssh/hosts/read-user-ca-pk.mdx create mode 100644 docs/api-reference/endpoints/ssh/hosts/read.mdx create mode 100644 docs/api-reference/endpoints/ssh/hosts/update.mdx create mode 100644 docs/documentation/platform/ssh/host-groups.mdx rename docs/documentation/platform/{ssh.mdx => ssh/overview.mdx} (99%) create mode 100644 docs/images/platform/ssh/v2/ssh-group-add-group-1.png create mode 100644 docs/images/platform/ssh/v2/ssh-group-add-group-2.png create mode 100644 docs/images/platform/ssh/v2/ssh-group-add-host-1.png create mode 100644 docs/images/platform/ssh/v2/ssh-group-add-host-2.png diff --git a/backend/src/ee/routes/v1/ssh-host-router.ts b/backend/src/ee/routes/v1/ssh-host-router.ts index 9db642d4d..739fec79a 100644 --- a/backend/src/ee/routes/v1/ssh-host-router.ts +++ b/backend/src/ee/routes/v1/ssh-host-router.ts @@ -3,6 +3,7 @@ import { z } from "zod"; import { EventType } from "@app/ee/services/audit-log/audit-log-types"; import { SshCertKeyAlgorithm } from "@app/ee/services/ssh-certificate/ssh-certificate-types"; import { loginMappingSchema, sanitizedSshHost } from "@app/ee/services/ssh-host/ssh-host-schema"; +import { LoginMappingSource } from "@app/ee/services/ssh-host/ssh-host-types"; import { isValidHostname } from "@app/ee/services/ssh-host/ssh-host-validators"; import { SSH_HOSTS } from "@app/lib/api-docs"; import { ms } from "@app/lib/ms"; @@ -24,7 +25,11 @@ export const registerSshHostRouter = async (server: FastifyZodProvider) => { response: { 200: z.array( sanitizedSshHost.extend({ - loginMappings: z.array(loginMappingSchema) + loginMappings: loginMappingSchema + .extend({ + source: z.nativeEnum(LoginMappingSource) + }) + .array() }) ) } @@ -54,7 +59,11 @@ export const registerSshHostRouter = async (server: FastifyZodProvider) => { }), response: { 200: sanitizedSshHost.extend({ - loginMappings: z.array(loginMappingSchema) + loginMappings: loginMappingSchema + .extend({ + source: z.nativeEnum(LoginMappingSource) + }) + .array() }) } }, @@ -119,7 +128,11 @@ export const registerSshHostRouter = async (server: FastifyZodProvider) => { }), response: { 200: sanitizedSshHost.extend({ - loginMappings: z.array(loginMappingSchema) + loginMappings: loginMappingSchema + .extend({ + source: z.nativeEnum(LoginMappingSource) + }) + .array() }) } }, @@ -192,7 +205,11 @@ export const registerSshHostRouter = async (server: FastifyZodProvider) => { }), response: { 200: sanitizedSshHost.extend({ - loginMappings: z.array(loginMappingSchema) + loginMappings: loginMappingSchema + .extend({ + source: z.nativeEnum(LoginMappingSource) + }) + .array() }) } }, @@ -240,7 +257,11 @@ export const registerSshHostRouter = async (server: FastifyZodProvider) => { }), response: { 200: sanitizedSshHost.extend({ - loginMappings: z.array(loginMappingSchema) + loginMappings: loginMappingSchema + .extend({ + source: z.nativeEnum(LoginMappingSource) + }) + .array() }) } }, diff --git a/backend/src/ee/services/license/__mocks__/license-fns.ts b/backend/src/ee/services/license/__mocks__/license-fns.ts index ca8fbcbc4..305c08d83 100644 --- a/backend/src/ee/services/license/__mocks__/license-fns.ts +++ b/backend/src/ee/services/license/__mocks__/license-fns.ts @@ -28,7 +28,8 @@ export const getDefaultOnPremFeatures = () => { has_used_trial: true, secretApproval: true, secretRotation: true, - caCrl: false + caCrl: false, + sshHostGroups: false }; }; diff --git a/backend/src/ee/services/license/licence-enums.ts b/backend/src/ee/services/license/licence-enums.ts index 047eb0a38..8812621f2 100644 --- a/backend/src/ee/services/license/licence-enums.ts +++ b/backend/src/ee/services/license/licence-enums.ts @@ -10,6 +10,7 @@ export const BillingPlanRows = { CustomAlerts: { name: "Custom alerts", field: "customAlerts" }, AuditLogs: { name: "Audit logs", field: "auditLogs" }, SamlSSO: { name: "SAML SSO", field: "samlSSO" }, + SshHostGroups: { name: "SSH Host Groups", field: "sshHostGroups" }, Hsm: { name: "Hardware Security Module (HSM)", field: "hsm" }, OidcSSO: { name: "OIDC SSO", field: "oidcSSO" }, SecretApproval: { name: "Secret approvals", field: "secretApproval" }, diff --git a/backend/src/ee/services/license/license-fns.ts b/backend/src/ee/services/license/license-fns.ts index 2870373c7..e347369b5 100644 --- a/backend/src/ee/services/license/license-fns.ts +++ b/backend/src/ee/services/license/license-fns.ts @@ -53,7 +53,8 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({ enforceMfa: false, projectTemplates: false, kmip: false, - gateway: false + gateway: false, + sshHostGroups: false }); export const setupLicenseRequestWithStore = (baseURL: string, refreshUrl: string, licenseKey: string) => { diff --git a/backend/src/ee/services/license/license-types.ts b/backend/src/ee/services/license/license-types.ts index 923ef2eba..743350814 100644 --- a/backend/src/ee/services/license/license-types.ts +++ b/backend/src/ee/services/license/license-types.ts @@ -71,6 +71,7 @@ export type TFeatureSet = { projectTemplates: false; kmip: false; gateway: false; + sshHostGroups: false; }; export type TOrgPlansTableDTO = { diff --git a/backend/src/ee/services/ssh-host-group/ssh-host-group-service.ts b/backend/src/ee/services/ssh-host-group/ssh-host-group-service.ts index 2d3580c2e..e88eee06e 100644 --- a/backend/src/ee/services/ssh-host-group/ssh-host-group-service.ts +++ b/backend/src/ee/services/ssh-host-group/ssh-host-group-service.ts @@ -8,9 +8,11 @@ import { TSshHostLoginUserMappingDALFactory } from "@app/ee/services/ssh-host/ss import { TSshHostLoginUserDALFactory } from "@app/ee/services/ssh-host/ssh-login-user-dal"; import { TSshHostGroupDALFactory } from "@app/ee/services/ssh-host-group/ssh-host-group-dal"; import { TSshHostGroupMembershipDALFactory } from "@app/ee/services/ssh-host-group/ssh-host-group-membership-dal"; -import { NotFoundError } from "@app/lib/errors"; +import { BadRequestError, NotFoundError } from "@app/lib/errors"; +import { TProjectDALFactory } from "@app/services/project/project-dal"; import { TUserDALFactory } from "@app/services/user/user-dal"; +import { TLicenseServiceFactory } from "../license/license-service"; import { createSshLoginMappings } from "../ssh-host/ssh-host-fns"; import { TAddHostToSshHostGroupDTO, @@ -23,7 +25,8 @@ import { } from "./ssh-host-group-types"; type TSshHostGroupServiceFactoryDep = { - sshHostDAL: TSshHostDALFactory; // TODO: Pick + projectDAL: Pick; + sshHostDAL: Pick; sshHostGroupDAL: Pick< TSshHostGroupDALFactory, | "create" @@ -33,24 +36,29 @@ type TSshHostGroupServiceFactoryDep = { | "transaction" | "findSshHostGroupByIdWithLoginMappings" | "findAllSshHostsInGroup" + | "findOne" + | "find" >; - sshHostGroupMembershipDAL: TSshHostGroupMembershipDALFactory; // TODO: Pick + sshHostGroupMembershipDAL: Pick; sshHostLoginUserDAL: Pick; sshHostLoginUserMappingDAL: Pick; userDAL: Pick; permissionService: Pick; + licenseService: Pick; }; export type TSshHostGroupServiceFactory = ReturnType; export const sshHostGroupServiceFactory = ({ + projectDAL, sshHostDAL, sshHostGroupDAL, sshHostGroupMembershipDAL, sshHostLoginUserDAL, sshHostLoginUserMappingDAL, userDAL, - permissionService + permissionService, + licenseService }: TSshHostGroupServiceFactoryDep) => { const createSshHostGroup = async ({ projectId, @@ -72,11 +80,38 @@ export const sshHostGroupServiceFactory = ({ ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Create, ProjectPermissionSub.SshHostGroups); + const plan = await licenseService.getPlan(actorOrgId); + if (!plan.sshHostGroups) + throw new BadRequestError({ + message: "Failed to create SSH host group due to plan restriction. Upgrade plan to create group." + }); + const newSshHostGroup = await sshHostGroupDAL.transaction(async (tx) => { + // (dangtony98): room to optimize check to ensure that + // the SSH host group name is unique across the whole org + const project = await projectDAL.findById(projectId); + if (!project) throw new NotFoundError({ message: `Project with ID '${projectId}' not found` }); + const projects = await projectDAL.find({ + orgId: project.orgId + }); + + const existingSshHostGroup = await sshHostGroupDAL.find({ + name, + $in: { + projectId: projects.map((p) => p.id) + } + }); + + if (existingSshHostGroup.length) { + throw new BadRequestError({ + message: `SSH host group with name '${name}' already exists in the organization` + }); + } + const sshHostGroup = await sshHostGroupDAL.create( { projectId, - name // TODO: check that this is unique across the whole org + name }, tx ); @@ -131,6 +166,12 @@ export const sshHostGroupServiceFactory = ({ ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.SshHostGroups); + const plan = await licenseService.getPlan(actorOrgId); + if (!plan.sshHostGroups) + throw new BadRequestError({ + message: "Failed to update SSH host group due to plan restriction. Upgrade plan to update group." + }); + const updatedSshHostGroup = await sshHostGroupDAL.transaction(async (tx) => { await sshHostGroupDAL.updateById( sshHostGroupId, @@ -280,8 +321,7 @@ export const sshHostGroupServiceFactory = ({ actionProjectType: ActionProjectType.SSH }); - ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Read, ProjectPermissionSub.SshHostGroups); - // TODO: look over permissioning + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.SshHostGroups); await sshHostGroupMembershipDAL.create({ sshHostGroupId, sshHostId: hostId }); @@ -296,10 +336,6 @@ export const sshHostGroupServiceFactory = ({ actorAuthMethod, actorOrgId }: TRemoveHostFromSshHostGroupDTO) => { - console.log("removeHostFromSshHostGroup args: ", { - sshHostGroupId, - hostId - }); const sshHostGroup = await sshHostGroupDAL.findSshHostGroupByIdWithLoginMappings(sshHostGroupId); if (!sshHostGroup) throw new NotFoundError({ message: `SSH host group with ID '${sshHostGroupId}' not found` }); @@ -326,7 +362,6 @@ export const sshHostGroupServiceFactory = ({ }); ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.SshHostGroups); - // TODO: look over permissioning const sshHostGroupMembership = await sshHostGroupMembershipDAL.findOne({ sshHostGroupId, @@ -339,10 +374,6 @@ export const sshHostGroupServiceFactory = ({ }); } - console.log("boom: ", { - sshHostGroupMembership - }); - await sshHostGroupMembershipDAL.deleteById(sshHostGroupMembership.id); return { sshHostGroup, sshHost }; diff --git a/backend/src/ee/services/ssh-host-group/ssh-host-group-types.ts b/backend/src/ee/services/ssh-host-group/ssh-host-group-types.ts index e5c78cce4..3485b5d26 100644 --- a/backend/src/ee/services/ssh-host-group/ssh-host-group-types.ts +++ b/backend/src/ee/services/ssh-host-group/ssh-host-group-types.ts @@ -1,5 +1,5 @@ import { TLoginMapping } from "@app/ee/services/ssh-host/ssh-host-types"; -import { TGenericPermission, TProjectPermission } from "@app/lib/types"; +import { TProjectPermission } from "@app/lib/types"; export type TCreateSshHostGroupDTO = { name: string; @@ -15,29 +15,30 @@ export type TUpdateSshHostGroupDTO = { usernames: string[]; }; }[]; -} & TGenericPermission; +} & Omit; export type TGetSshHostGroupDTO = { sshHostGroupId: string; -} & TGenericPermission; +} & Omit; export type TDeleteSshHostGroupDTO = { sshHostGroupId: string; -} & TGenericPermission; +} & Omit; + export type TListSshHostGroupHostsDTO = { sshHostGroupId: string; filter?: EHostGroupMembershipFilter; -} & TGenericPermission; +} & Omit; export type TAddHostToSshHostGroupDTO = { sshHostGroupId: string; hostId: string; -} & TGenericPermission; +} & Omit; export type TRemoveHostFromSshHostGroupDTO = { sshHostGroupId: string; hostId: string; -} & TGenericPermission; +} & Omit; export enum EHostGroupMembershipFilter { GROUP_MEMBERS = "group-members", diff --git a/backend/src/ee/services/ssh-host/ssh-host-dal.ts b/backend/src/ee/services/ssh-host/ssh-host-dal.ts index 3c9755e65..f655fa9d1 100644 --- a/backend/src/ee/services/ssh-host/ssh-host-dal.ts +++ b/backend/src/ee/services/ssh-host/ssh-host-dal.ts @@ -6,6 +6,8 @@ import { DatabaseError } from "@app/lib/errors"; import { groupBy, unique } from "@app/lib/fn"; import { ormify } from "@app/lib/knex"; +import { LoginMappingSource } from "./ssh-host-types"; + export type TSshHostDALFactory = ReturnType; export const sshHostDALFactory = (db: TDbClient) => { @@ -13,20 +15,22 @@ export const sshHostDALFactory = (db: TDbClient) => { const findUserAccessibleSshHosts = async (projectIds: string[], userId: string, tx?: Knex) => { try { - const user = await (tx || db.replicaNode())(TableName.Users).where({ id: userId }).select("username").first(); + const knex = tx || db.replicaNode(); + + const user = await knex(TableName.Users).where({ id: userId }).select("username").first(); if (!user) { throw new DatabaseError({ name: `${TableName.Users}: UserNotFound`, error: new Error("User not found") }); } - const rows = await (tx || db.replicaNode())(TableName.SshHost) + // get hosts where user has direct login mappings + const directHostRows = await knex(TableName.SshHost) .leftJoin(TableName.SshHostLoginUser, `${TableName.SshHost}.id`, `${TableName.SshHostLoginUser}.sshHostId`) .leftJoin( TableName.SshHostLoginUserMapping, `${TableName.SshHostLoginUser}.id`, `${TableName.SshHostLoginUserMapping}.sshHostLoginUserId` ) - .leftJoin(TableName.Users, `${TableName.Users}.id`, `${TableName.SshHostLoginUserMapping}.userId`) .whereIn(`${TableName.SshHost}.projectId`, projectIds) .andWhere(`${TableName.SshHostLoginUserMapping}.userId`, userId) .select( @@ -37,26 +41,66 @@ export const sshHostDALFactory = (db: TDbClient) => { db.ref("userCertTtl").withSchema(TableName.SshHost), db.ref("hostCertTtl").withSchema(TableName.SshHost), db.ref("loginUser").withSchema(TableName.SshHostLoginUser), - db.ref("username").withSchema(TableName.Users), - db.ref("userId").withSchema(TableName.SshHostLoginUserMapping), db.ref("userSshCaId").withSchema(TableName.SshHost), db.ref("hostSshCaId").withSchema(TableName.SshHost) - ) - .orderBy(`${TableName.SshHost}.updatedAt`, "desc"); + ); - const grouped = groupBy(rows, (r) => r.sshHostId); - return Object.values(grouped).map((hostRows) => { + // get hosts where user has login mappings via host groups + const groupHostRows = await knex(TableName.SshHostGroupMembership) + .join( + TableName.SshHostLoginUser, + `${TableName.SshHostGroupMembership}.sshHostGroupId`, + `${TableName.SshHostLoginUser}.sshHostGroupId` + ) + .leftJoin( + TableName.SshHostLoginUserMapping, + `${TableName.SshHostLoginUser}.id`, + `${TableName.SshHostLoginUserMapping}.sshHostLoginUserId` + ) + .join(TableName.SshHost, `${TableName.SshHostGroupMembership}.sshHostId`, `${TableName.SshHost}.id`) + .whereIn(`${TableName.SshHost}.projectId`, projectIds) + .andWhere(`${TableName.SshHostLoginUserMapping}.userId`, userId) + .select( + db.ref("id").withSchema(TableName.SshHost).as("sshHostId"), + db.ref("projectId").withSchema(TableName.SshHost), + db.ref("hostname").withSchema(TableName.SshHost), + db.ref("alias").withSchema(TableName.SshHost), + db.ref("userCertTtl").withSchema(TableName.SshHost), + db.ref("hostCertTtl").withSchema(TableName.SshHost), + db.ref("loginUser").withSchema(TableName.SshHostLoginUser), + db.ref("userSshCaId").withSchema(TableName.SshHost), + db.ref("hostSshCaId").withSchema(TableName.SshHost) + ); + + const directHostRowsWithSource = directHostRows.map((row) => ({ + ...row, + source: LoginMappingSource.HOST + })); + + const groupHostRowsWithSource = groupHostRows.map((row) => ({ + ...row, + source: LoginMappingSource.HOST_GROUP + })); + + const mergedRows = [...directHostRowsWithSource, ...groupHostRowsWithSource]; + + const hostsGrouped = groupBy(mergedRows, (r) => r.sshHostId); + + return Object.values(hostsGrouped).map((hostRows) => { const { sshHostId, hostname, alias, userCertTtl, hostCertTtl, userSshCaId, hostSshCaId, projectId } = hostRows[0]; - const loginMappingGrouped = groupBy(hostRows, (r) => r.loginUser); - - const loginMappings = Object.entries(loginMappingGrouped).map(([loginUser]) => ({ - loginUser, - allowedPrincipals: { - usernames: [user.username] - } - })); + const loginMappingGrouped = groupBy(hostRows, (r) => `${r.loginUser}|${r.source}`); + const loginMappings = Object.entries(loginMappingGrouped).map(([key]) => { + const [loginUser, source] = key.split("|"); + return { + loginUser, + allowedPrincipals: { + usernames: [user.username] + }, + source: source as LoginMappingSource + }; + }); return { id: sshHostId, @@ -101,20 +145,57 @@ export const sshHostDALFactory = (db: TDbClient) => { ) .orderBy(`${TableName.SshHost}.updatedAt`, "desc"); + // process login mappings inherited from groups that hosts are part of + const hostIds = unique(rows.map((r) => r.sshHostId)).filter(Boolean); + const groupRows = await (tx || db.replicaNode())(TableName.SshHostGroupMembership) + .join( + TableName.SshHostLoginUser, + `${TableName.SshHostGroupMembership}.sshHostGroupId`, + `${TableName.SshHostLoginUser}.sshHostGroupId` + ) + .leftJoin( + TableName.SshHostLoginUserMapping, + `${TableName.SshHostLoginUser}.id`, + `${TableName.SshHostLoginUserMapping}.sshHostLoginUserId` + ) + .leftJoin(TableName.Users, `${TableName.SshHostLoginUserMapping}.userId`, `${TableName.Users}.id`) + .select( + db.ref("sshHostId").withSchema(TableName.SshHostGroupMembership), + db.ref("loginUser").withSchema(TableName.SshHostLoginUser), + db.ref("username").withSchema(TableName.Users) + ) + .whereIn(`${TableName.SshHostGroupMembership}.sshHostId`, hostIds); + + const groupedGroupMappings = groupBy(groupRows, (r) => r.sshHostId); + const hostsGrouped = groupBy(rows, (r) => r.sshHostId); return Object.values(hostsGrouped).map((hostRows) => { const { sshHostId, hostname, alias, userCertTtl, hostCertTtl, userSshCaId, hostSshCaId } = hostRows[0]; + // direct login mappings const loginMappingGrouped = groupBy( hostRows.filter((r) => r.loginUser), (r) => r.loginUser ); - const loginMappings = Object.entries(loginMappingGrouped).map(([loginUser, entries]) => ({ + const directMappings = Object.entries(loginMappingGrouped).map(([loginUser, entries]) => ({ loginUser, allowedPrincipals: { usernames: unique(entries.map((e) => e.username)).filter(Boolean) - } + }, + source: LoginMappingSource.HOST + })); + + // group-inherited login mappings + const inheritedGroupRows = groupedGroupMappings[sshHostId] || []; + const inheritedGrouped = groupBy(inheritedGroupRows, (r) => r.loginUser); + + const groupMappings = Object.entries(inheritedGrouped).map(([loginUser, entries]) => ({ + loginUser, + allowedPrincipals: { + usernames: unique(entries.map((e) => e.username)).filter(Boolean) + }, + source: LoginMappingSource.HOST_GROUP })); return { @@ -124,7 +205,7 @@ export const sshHostDALFactory = (db: TDbClient) => { projectId, userCertTtl, hostCertTtl, - loginMappings, + loginMappings: [...directMappings, ...groupMappings], userSshCaId, hostSshCaId }; @@ -163,16 +244,50 @@ export const sshHostDALFactory = (db: TDbClient) => { const { sshHostId: id, projectId, hostname, alias, userCertTtl, hostCertTtl, userSshCaId, hostSshCaId } = rows[0]; - const loginMappingGrouped = groupBy( + // direct login mappings + const directGrouped = groupBy( rows.filter((r) => r.loginUser), (r) => r.loginUser ); - const loginMappings = Object.entries(loginMappingGrouped).map(([loginUser, entries]) => ({ + const directMappings = Object.entries(directGrouped).map(([loginUser, entries]) => ({ loginUser, allowedPrincipals: { usernames: unique(entries.map((e) => e.username)).filter(Boolean) - } + }, + source: LoginMappingSource.HOST + })); + + // group login mappings + const groupRows = await (tx || db.replicaNode())(TableName.SshHostGroupMembership) + .join( + TableName.SshHostLoginUser, + `${TableName.SshHostGroupMembership}.sshHostGroupId`, + `${TableName.SshHostLoginUser}.sshHostGroupId` + ) + .leftJoin( + TableName.SshHostLoginUserMapping, + `${TableName.SshHostLoginUser}.id`, + `${TableName.SshHostLoginUserMapping}.sshHostLoginUserId` + ) + .leftJoin(TableName.Users, `${TableName.SshHostLoginUserMapping}.userId`, `${TableName.Users}.id`) + .where(`${TableName.SshHostGroupMembership}.sshHostId`, sshHostId) + .select( + db.ref("loginUser").withSchema(TableName.SshHostLoginUser), + db.ref("username").withSchema(TableName.Users) + ); + + const groupGrouped = groupBy( + groupRows.filter((r) => r.loginUser), + (r) => r.loginUser + ); + + const groupMappings = Object.entries(groupGrouped).map(([loginUser, entries]) => ({ + loginUser, + allowedPrincipals: { + usernames: unique(entries.map((e) => e.username)).filter(Boolean) + }, + source: LoginMappingSource.HOST_GROUP })); return { @@ -182,7 +297,7 @@ export const sshHostDALFactory = (db: TDbClient) => { alias, userCertTtl, hostCertTtl, - loginMappings, + loginMappings: [...directMappings, ...groupMappings], userSshCaId, hostSshCaId }; diff --git a/backend/src/ee/services/ssh-host/ssh-host-types.ts b/backend/src/ee/services/ssh-host/ssh-host-types.ts index 7440300df..9846920b7 100644 --- a/backend/src/ee/services/ssh-host/ssh-host-types.ts +++ b/backend/src/ee/services/ssh-host/ssh-host-types.ts @@ -16,6 +16,11 @@ export type TLoginMapping = { }; }; +export enum LoginMappingSource { + HOST = "host", + HOST_GROUP = "hostGroup" +} + export type TCreateSshHostDTO = { hostname: string; alias?: string; diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index a53b24ec8..04c9482a5 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -855,13 +855,15 @@ export const registerRoutes = async ( }); const sshHostGroupService = sshHostGroupServiceFactory({ + projectDAL, sshHostDAL, sshHostGroupDAL, sshHostGroupMembershipDAL, sshHostLoginUserDAL, sshHostLoginUserMappingDAL, userDAL, - permissionService + permissionService, + licenseService }); const certificateAuthorityService = certificateAuthorityServiceFactory({ diff --git a/backend/src/server/routes/v2/project-router.ts b/backend/src/server/routes/v2/project-router.ts index d18034d0b..a223004a9 100644 --- a/backend/src/server/routes/v2/project-router.ts +++ b/backend/src/server/routes/v2/project-router.ts @@ -14,6 +14,7 @@ import { sanitizedSshCa } from "@app/ee/services/ssh/ssh-certificate-authority-s import { sanitizedSshCertificate } from "@app/ee/services/ssh-certificate/ssh-certificate-schema"; import { sanitizedSshCertificateTemplate } from "@app/ee/services/ssh-certificate-template/ssh-certificate-template-schema"; import { loginMappingSchema, sanitizedSshHost } from "@app/ee/services/ssh-host/ssh-host-schema"; +import { LoginMappingSource } from "@app/ee/services/ssh-host/ssh-host-types"; import { sanitizedSshHostGroup } from "@app/ee/services/ssh-host-group/ssh-host-group-schema"; import { ApiDocsTags, PROJECTS } from "@app/lib/api-docs"; import { readLimit, writeLimit } from "@app/server/config/rateLimiter"; @@ -632,7 +633,11 @@ export const registerProjectRouter = async (server: FastifyZodProvider) => { 200: z.object({ hosts: z.array( sanitizedSshHost.extend({ - loginMappings: z.array(loginMappingSchema) + loginMappings: loginMappingSchema + .extend({ + source: z.nativeEnum(LoginMappingSource) + }) + .array() }) ) }) @@ -666,7 +671,7 @@ export const registerProjectRouter = async (server: FastifyZodProvider) => { 200: z.object({ groups: z.array( sanitizedSshHostGroup.extend({ - loginMappings: z.array(loginMappingSchema), + loginMappings: loginMappingSchema.array(), hostCount: z.number() }) ) diff --git a/docs/api-reference/endpoints/ssh/groups/add-host.mdx b/docs/api-reference/endpoints/ssh/groups/add-host.mdx new file mode 100644 index 000000000..9f903eccd --- /dev/null +++ b/docs/api-reference/endpoints/ssh/groups/add-host.mdx @@ -0,0 +1,4 @@ +--- +title: "Add Host" +openapi: "POST /api/v1/ssh/host-groups/{sshHostGroupId}/hosts" +--- diff --git a/docs/api-reference/endpoints/ssh/groups/create.mdx b/docs/api-reference/endpoints/ssh/groups/create.mdx new file mode 100644 index 000000000..be4755d8e --- /dev/null +++ b/docs/api-reference/endpoints/ssh/groups/create.mdx @@ -0,0 +1,4 @@ +--- +title: "Create" +openapi: "POST /api/v1/ssh/host-groups" +--- diff --git a/docs/api-reference/endpoints/ssh/groups/delete.mdx b/docs/api-reference/endpoints/ssh/groups/delete.mdx new file mode 100644 index 000000000..19205f2eb --- /dev/null +++ b/docs/api-reference/endpoints/ssh/groups/delete.mdx @@ -0,0 +1,4 @@ +--- +title: "Delete" +openapi: "DELETE /api/v1/ssh/host-groups/{sshHostGroupId}" +--- diff --git a/docs/api-reference/endpoints/ssh/groups/list-hosts.mdx b/docs/api-reference/endpoints/ssh/groups/list-hosts.mdx new file mode 100644 index 000000000..2db1fd11f --- /dev/null +++ b/docs/api-reference/endpoints/ssh/groups/list-hosts.mdx @@ -0,0 +1,4 @@ +--- +title: "List Hosts" +openapi: "GET /api/v1/ssh/host-groups/{sshHostGroupId}/hosts" +--- diff --git a/docs/api-reference/endpoints/ssh/groups/list.mdx b/docs/api-reference/endpoints/ssh/groups/list.mdx new file mode 100644 index 000000000..089ab4096 --- /dev/null +++ b/docs/api-reference/endpoints/ssh/groups/list.mdx @@ -0,0 +1,4 @@ +--- +title: "List" +openapi: "GET /api/v2/workspace/{projectId}/ssh-host-groups" +--- diff --git a/docs/api-reference/endpoints/ssh/groups/read.mdx b/docs/api-reference/endpoints/ssh/groups/read.mdx new file mode 100644 index 000000000..060a75bce --- /dev/null +++ b/docs/api-reference/endpoints/ssh/groups/read.mdx @@ -0,0 +1,4 @@ +--- +title: "Retrieve" +openapi: "GET /api/v1/ssh/host-groups/{sshHostGroupId}" +--- diff --git a/docs/api-reference/endpoints/ssh/groups/remove-host.mdx b/docs/api-reference/endpoints/ssh/groups/remove-host.mdx new file mode 100644 index 000000000..6933e5c9f --- /dev/null +++ b/docs/api-reference/endpoints/ssh/groups/remove-host.mdx @@ -0,0 +1,4 @@ +--- +title: "Remove Host" +openapi: "DELETE /api/v1/ssh/host-groups/{sshHostGroupId}/hosts/{sshHostId}" +--- diff --git a/docs/api-reference/endpoints/ssh/groups/update.mdx b/docs/api-reference/endpoints/ssh/groups/update.mdx new file mode 100644 index 000000000..3e23bf4f9 --- /dev/null +++ b/docs/api-reference/endpoints/ssh/groups/update.mdx @@ -0,0 +1,4 @@ +--- +title: "Update" +openapi: "PATCH /api/v1/ssh/host-groups/{sshHostGroupId}" +--- diff --git a/docs/api-reference/endpoints/ssh/hosts/create.mdx b/docs/api-reference/endpoints/ssh/hosts/create.mdx new file mode 100644 index 000000000..5860b6b49 --- /dev/null +++ b/docs/api-reference/endpoints/ssh/hosts/create.mdx @@ -0,0 +1,4 @@ +--- +title: "Create" +openapi: "POST /api/v1/ssh/hosts" +--- diff --git a/docs/api-reference/endpoints/ssh/hosts/delete.mdx b/docs/api-reference/endpoints/ssh/hosts/delete.mdx new file mode 100644 index 000000000..c52129b33 --- /dev/null +++ b/docs/api-reference/endpoints/ssh/hosts/delete.mdx @@ -0,0 +1,4 @@ +--- +title: "Delete" +openapi: "DELETE /api/v1/ssh/hosts/{sshHostId}" +--- diff --git a/docs/api-reference/endpoints/ssh/hosts/issue-host-cert.mdx b/docs/api-reference/endpoints/ssh/hosts/issue-host-cert.mdx new file mode 100644 index 000000000..bb843e466 --- /dev/null +++ b/docs/api-reference/endpoints/ssh/hosts/issue-host-cert.mdx @@ -0,0 +1,4 @@ +--- +title: "Issue Host Certificate" +openapi: "POST /api/v1/ssh/hosts/{sshHostId}/issue-host-cert" +--- diff --git a/docs/api-reference/endpoints/ssh/hosts/issue-user-cert.mdx b/docs/api-reference/endpoints/ssh/hosts/issue-user-cert.mdx new file mode 100644 index 000000000..a16e03a65 --- /dev/null +++ b/docs/api-reference/endpoints/ssh/hosts/issue-user-cert.mdx @@ -0,0 +1,4 @@ +--- +title: "Issue User Certificate" +openapi: "POST /api/v1/ssh/hosts/{sshHostId}/issue-user-cert" +--- diff --git a/docs/api-reference/endpoints/ssh/hosts/list-my.mdx b/docs/api-reference/endpoints/ssh/hosts/list-my.mdx new file mode 100644 index 000000000..2b7ab51c0 --- /dev/null +++ b/docs/api-reference/endpoints/ssh/hosts/list-my.mdx @@ -0,0 +1,4 @@ +--- +title: "List My Hosts" +openapi: "GET /api/v1/ssh/hosts/" +--- diff --git a/docs/api-reference/endpoints/ssh/hosts/list.mdx b/docs/api-reference/endpoints/ssh/hosts/list.mdx new file mode 100644 index 000000000..3f61123e0 --- /dev/null +++ b/docs/api-reference/endpoints/ssh/hosts/list.mdx @@ -0,0 +1,4 @@ +--- +title: "List" +openapi: "GET /api/v2/workspace/{projectId}/ssh-hosts" +--- diff --git a/docs/api-reference/endpoints/ssh/hosts/read-host-ca-pk.mdx b/docs/api-reference/endpoints/ssh/hosts/read-host-ca-pk.mdx new file mode 100644 index 000000000..15ca53e9d --- /dev/null +++ b/docs/api-reference/endpoints/ssh/hosts/read-host-ca-pk.mdx @@ -0,0 +1,4 @@ +--- +title: "Read Host CA Public Key" +openapi: "GET /api/v1/ssh/hosts/{sshHostId}/host-ca-public-key" +--- diff --git a/docs/api-reference/endpoints/ssh/hosts/read-user-ca-pk.mdx b/docs/api-reference/endpoints/ssh/hosts/read-user-ca-pk.mdx new file mode 100644 index 000000000..a6f31e93f --- /dev/null +++ b/docs/api-reference/endpoints/ssh/hosts/read-user-ca-pk.mdx @@ -0,0 +1,4 @@ +--- +title: "Read User CA Public Key" +openapi: "GET /api/v1/ssh/hosts/{sshHostId}/user-ca-public-key" +--- diff --git a/docs/api-reference/endpoints/ssh/hosts/read.mdx b/docs/api-reference/endpoints/ssh/hosts/read.mdx new file mode 100644 index 000000000..112296a5a --- /dev/null +++ b/docs/api-reference/endpoints/ssh/hosts/read.mdx @@ -0,0 +1,4 @@ +--- +title: "Retrieve" +openapi: "GET /api/v1/ssh/hosts/{sshHostId}" +--- diff --git a/docs/api-reference/endpoints/ssh/hosts/update.mdx b/docs/api-reference/endpoints/ssh/hosts/update.mdx new file mode 100644 index 000000000..d5555b813 --- /dev/null +++ b/docs/api-reference/endpoints/ssh/hosts/update.mdx @@ -0,0 +1,4 @@ +--- +title: "Update" +openapi: "PATCH /api/v1/ssh/hosts/{sshHostId}" +--- diff --git a/docs/documentation/platform/ssh/host-groups.mdx b/docs/documentation/platform/ssh/host-groups.mdx new file mode 100644 index 000000000..5701b689d --- /dev/null +++ b/docs/documentation/platform/ssh/host-groups.mdx @@ -0,0 +1,56 @@ +--- +title: "Infisical SSH" +sidebarTitle: "Host Groups" +description: "Learn how to organize SSH hosts into groups and manage access policies at scale." +--- + +## Concept + +Infisical SSH lets you configure host groups to organize and manage multiple SSH hosts with shared access configuration. +These host groups can be created based on environments (`development`, `staging`, `production`), geographical regions (`us-east`, `eu-west`, `ap-northeast`), or functions (`web-servers`, `database-servers`, `worker-nodes`) to streamline access management across your infrastructure. + +Using a host group, you can define login mappings at the group level and have them be applied to all hosts assigned to that group. For example, you can specify that `john@acme.com` can login as `ubuntu` on all hosts assigned to the `production` host group. + +## Workflow + +The typical workflow for using Infisical SSH with host groups consists of the following steps: + +1. The administrator creates host groups based on logical groupings (environments, regions, functions, etc.). +2. The administrator configures login mappings at the host group level to define access policies. +3. The administrator registers remote hosts with Infisical using the Infisical CLI via the `infisical ssh add-host` command and assigns them to appropriate host groups either using the `--host-group` flag or by adding them to the host group via UI. +4. User(s) access the remote hosts using the Infisical CLI via the `infisical ssh connect` command, with access determined by the login mappings defined at both host and host group levels. + +## Admin Guide for Configuring Host Groups + +In the following steps, we'll walk through how to create and configure Host Groups in Infisical SSH, and how to add hosts to these groups. + + + + 1.1. Navigate to your Infisical SSH project and select the **Hosts** tab. + + 1.2. Click **Add Group** in the **Host Groups** section to create a new group. + + Enter a name (e.g., `production-servers` or `tokyo-region`) and login mapping(s) for the host group. + + A login mapping for a host group applies to all hosts assigned to the group and dictates what user(s) will be allowed access to the remote hosts + in that group under specific login user(s); in the allowed principals, you should select user(s) part of the Infisical SSH project that will + be allowed to login to the remote host as the login user. + + For instance, if you add a mapping to a host group with the login user `ec2-user` to some users John and Alice in Infisical, then they will be allowed to login to any remote host that is part of the group as `ec2-user` which is a system user that + exists on the remote host(s). + + ![ssh group add group](/images/platform/ssh/v2/ssh-group-add-group-1.png) + ![ssh group add group 2](/images/platform/ssh/v2/ssh-group-add-group-2.png) + + 1.3. Click **Add** to create the host group. + + + + + After creating the host group, you can assign a host to it from inside the host group page in the **SSH Hosts** section. Generally, this is where you'll manage the hosts in a group. + + ![ssh group add group - add host](/images/platform/ssh/v2/ssh-group-add-host-1.png) + ![ssh group add group - added host](/images/platform/ssh/v2/ssh-group-add-host-2.png) + + + diff --git a/docs/documentation/platform/ssh.mdx b/docs/documentation/platform/ssh/overview.mdx similarity index 99% rename from docs/documentation/platform/ssh.mdx rename to docs/documentation/platform/ssh/overview.mdx index 2bc433f75..e71eeabe1 100644 --- a/docs/documentation/platform/ssh.mdx +++ b/docs/documentation/platform/ssh/overview.mdx @@ -1,6 +1,6 @@ --- title: "Infisical SSH" -sidebarTitle: "Infisical SSH" +sidebarTitle: "Overview" description: "Learn how to securely provision user SSH access to your infrastructure using SSH certificates." --- diff --git a/docs/images/platform/ssh/v2/ssh-group-add-group-1.png b/docs/images/platform/ssh/v2/ssh-group-add-group-1.png new file mode 100644 index 0000000000000000000000000000000000000000..be023335f19360bea70c28fa84c23ffd05d48961 GIT binary patch literal 1125796 zcmbrlbzD?I+dd8|C8;P~f{03Ym&76nNO$Mb-7H8;qjZO|N_WE|u}dQjOT$va(#?Y3 z^@;a+KJV}S{pHznK4*4j?wL7f=AN1Ry6*Gwy$XQvA=N_+3=G1z3bN|xn-2yCjt?$2 zIz~`O&Hw|0Kp7|_^Zu=j48wajXKSE?6$XaF#}pkLUD7$S4h{9UxFk`*$v?9g7@32U zN%S#xI2Z9+D8|b0n+!2}j6#BAvWXL` z*KOG5M#2OnYj#gZG}o=4s_3k<-bx%*i$&#ONEPEfIDUu0=g%<8L1O)e7JGE$@_h0~ItF`e?d-8D7WHyj1IR!{Yrt>V|S2 z9MmF;H@i>Gu0%&wIzTy%d^!1~mq5XJv2UK7z1 zPJH==%=(BCClE29tHqH@GT1wwh*2-0o%)P8p7wA#157bQE1JZ-3Lsi3z0x}>_@!^A z8WwVQX~ve^-A!r_*3bI))KK zwWCcE80*6|>;v|`$j=((3FL#vMe9?pYftAws%$;QE{#breHcipK0I#l;CgC#|E+h6R~yZ3E`(An4{ zOM=tynr@vMQ72MDec>|$Am*L-4?eEoSw8+F0zV@PQ(jnz zF^hZqEde9;W0{XXWJMQ9E_&OKaD7fAhq1O+azlLs&RE2l>qzMyIgyCqdKW81Bf1M| zh(+>2hf;y#kaA)tLjJ`=j0Kz$8LRAY>U)5Nr}5prw<~>4i5rAH*uD&CGZs zSjoL;f&=LeKf7GA+6;bBiowR%BF0ZSzQ-R~O7!4z!?d$;6eGQJYM5+u{ocX{!9yHr z1_Id+K8XY`y0>dr#L_}{Oa*i?qNQKyVorxVtfF+lnlcrfC8m<%6~Y?{QCfM}gt^}} zH-TpyOm~PKAWIS!_VdvT^Wbzw?Wp@}Auc2)&v8FWnI~C3C+wH~67@JEj!jlENlO8% z2J5@@`LoER&wW^5Xq!XDWLpv?lZanNjK4RUq^Oq%6wxHdL=+uuKj$OOi6ASC`DtY< ztRKGrW_RrKHuEVq{6mM7KX)+Dlx>K>y+??GIHpUzir`)RaIaz&PuauL?#vbUjtEcF z#aaLCC|*~AeOw!tm$||CN5D(NfLF#Jbk@%oI2$v0(qNxxKdeuuf3%POmHrdfXmaLg z#=@a5Y+#2XJ~a*vkyrHJ;hNMX#QeFL%0^P`;Ayqd_Xlbw_O`a^_C9t!whDZk_R02p zQ$m$T@7KkZBdt}}$JBv}a2_}j91l(lw-?EAQoaC#f1d0NZu6gNoZ_5%XTDQrQSK;K zaL={=YTdr6HJnE9usiyP)jR7aJOdOs6ls);`cK&H*>h8+>?^dtPMeh*=(oe)A-Umd za9_Amy|S0Qa{YLHT*<)~< zbbWVie*5@V{95o-lA?+*gusnJn~INOL9mAqNoYX;rgq{HvzQfE_x^IBu-f-2=>~9T z9!51s-Agsh1Gk&Bo3wW@r!i;aHFgddXqpeRT66y7SOZ0*zfF5JF*&1Y-U2;s+HrOe z7f8z)q+>l|&b^Zx_624ITb^dxzrMA4L-3d^)KD#mN zSl4Qv0B@bMnbU!rcuCPN&^{-kriB9@$@|8CiZ7w^98B8m^JH@=^9+xI3u%}mn8(2~n9jb&ZNhD&A9PI>Oy8OsB&xiB^Iq;}sOibd&ihGPZgP7aIBdfdpnuN)wSI=*bhYrq=_OO=&3 zw=-8>oBz`JMe8jssk~}B@2Yx@SW>ter8a7&%CX?1$I_Acyt`L8^$SnSIA$;QJvtEa;X=g z3N4A<%8egbg+s-6yshhHBFrZH>23iC0tj-|*eY zP=*M@x{~e6@VEF`WR#qlknJPyXUkJ$_GE)G&g|#LZCCy%|NaX{B`Aj;1flft8^Zj% zJ5X;2{I%;Vc@V{k%oTCqAWv#NySGUP5X&{(qjxw3#9FEYtbA>F=5uyAb!I;W)G3%L{sI(^x;3jv`7vl|7D{l+QDDii z<*Ga36TP!D-kiFLm629MN>jb*?u6sV`H|b6tMAsWtLNj$JZ}YW4^5bMUd7S3?{mO9 zcVBk>(lR7GrDbyzmM0RYevYLt%z}jWT$Db0PZThz0KE9J_;u)}L|af4XS0PCfiV1pi`>MVZHWxu zW7omt)K>6|>=uy7rpJ87A@9~GcAmIry#M~CZ{Eo;c^d~!M_==-OaHBUV5z}wLEa)r zVsdjyJ7{j*ZT;yet1@yOo?vv=>UXTaQeQiBHN&|W)iws=UEM?)d~XzSigA*JeD>d( z;>3akw2A(vTQ%+vEWfcLj-}JQwY%8OCAx?&BEC=GAQA2FaZ!DE6vGnDk|#ng{#BCQ z-}<_2vw84jvtp%!6{3tPKMCLKh3&5`*9R>hj-PM*kVO5qMP~e*xKg|;IT-y~Noag< zIe1o?y0pE7<9xgn5MXdTvSM`RKXT(v|4BmZM(CDwN8`$-byV4;3$m~~xV!rq4-s-_ zf=TeLL4Xni)qEerj|byjlk*o9%>&{aLbU_n&7(_I-S)^mL2ry-E0Tfl1W~QcSe;9b z7`ifn@~<(*JTTV8F-5%g-cv6Oo*js4$%pxe(z67rj4I*$hEDpAJFn4!uwQHGaG_9~ z?Ds++j<-HEMB5jsR=RJkm6b7Gqryq# zuRQlKFd~5%5B`-$AASFGB%&|0^uO-+KSf~Rp#MEaUt#(8{+*l9C;$Gx!#HSb2LnS| zL+0&U^j*Wk&C1Hj-PYM7=sbT39f9Yfpy!T(LB{;&!hEa#{15}<-W*U<*F#tNors0A zBZrx#v$++AkE6?+&4d~(lbarC+Q?8l0v!{nRBjcZn z{^$5-JFR?x|EbBz{a=rTen8GYDV*FKT%7-xma@m&9`PV7%%BJY7d zRt~zdKu7eeMmJ4@myb_K>>u^~f0F*w(tnC-xm&r(I6I;xJtY3qS^pCL@5KKt_>VgE z{!=HnFgMSC*ZE&b|0Vk8Aw<-z+?^df|GY#kC!mJ}TI~Od{@+r1{}Gem=HvU9(0|AN zZwcN1Q{um4|F?vy8xZ{>%>Fb@g8N@J{CC{H@{4i)>HPm14F4Qy|A<8oHHn8}oc}Xy zB_1}u7IDD9kivK?E3N5+xz~<=Dxjyeq_-GA7--h7yca>%A`Lff!YaVDNtUu^PV&Lj zyO&fN_1WxIk$eUN6$4d-B{V(p5h>?`5UIqMLoYduthFPe3WK|u-GDz`fNIpP7}EL8 zb&Ium?HBG&T4&nrzbk+2SLWHZAIp_GH6_CXl186U<#biG*F?rX?Lf)9EqZ=OZQR`>Z50P-uxI6BxTtS>=!9X34Ts*5=Y>msmr3()>rpED z7!?3Fkt6}s<<0z^7#-?a^n-K-Ei#xFTo89d(Tb-|ravtRW7^@mk{5J$G0>H?e0gDC z*PjN0%Vogh66u@c1|Sd}V_)Xd&(XoSQGan}7d%k8;;?7kFRL{#5-@%{z&>N_*1}@9 z*c5LxDfFhY)@Y`q60R~?JePeNahMKniL{>IqH!he-4ZJZM9sc*r2LX~RC<2Y|7`GR z2X?s_gR!sz;c@&abN+VdL6j2t&@(y-uq#$iY|I@ zVzae)=aQpe-C#$R3xKYm{QQ<9yxSUcDB-;36FolI$Rpe&5ad8NXg2s_rgq?D2xX0B z*)1U%ChsMvG%M$>doaDQ(`#R5$-BExqelZ_ zOboy2s`ABAiS9c#s6=yFeo5cV?%QmqALk2M=T*&IA?TjWXhWNTLw5yrF)twFFDI0CE-@E{^^~6P73D+D5uE3zayIEJfPHHN=BfP}Ult)-G znofs})eGqoA)VHqG?P`+BirxPAArKlKMn6sgH$v99Cbmrmb|9N)ZRhrnuae$<#UHX%fqV2C$Cr~xxvYM{+mratFCWo*6Kf0@OH#U%;w7U379REREu%Dbd&x%?b4ST#vAT?s%KlE3LqZ@y$d zY&6^sJ`evyeOsq9b$M0irLU1!4g@cLr}lb{HD0ZmI2tx`uDYz!y8Td6rB*59q225X z`4cV-;WeQ$RJ&>8v6ux1b^H8C28ub0U~?TuVi5ni-)3y=6A`gxL~m6cv7NlEJ|dFR zwdYrcJwpAq&c+XMqLlmb+wqxUr>M4{kyhOdzgr11NBoefvHh1}j^^{Gv}LN9jGz_3 z=KwGJ{v<@#4+yEDcb#|Xk&H^btDHDMrS%K5V5`vaRnCzjLvLPZpJU}G)*Ieli=f|q zDT)=nOFxK(X%Jcca*`6w%oav}GjpS5vsWJskhcY_S3jNKpC`h9uu}fG_$q+Zy9CQt z`IHig``AXdXYg6Myy3{igH8@)_ygEwRCuUyobRC*Oq}sq*D7bwcatEGS#WzLV*&jpupjAN z>!lfW(`}|XEeJnt^ur}?Xkn^vW&}^Git@=9v^VbL0Zr4J10QGW_GR+OG)!>V^UxE&SXxA;lulY z7W=c+49S$SqHF&w!#RoCEIb!IV>r(`Nn_WwOAJr9VeLK`f}x%^`#ae0U+BS zltddb5v1Gy`PSc9?K9wnYg)9q{1rLLe78g)jptL$MsaA`OSHq3h!icnIZw>AzD4IPwuPIhw!NVR}`;w^HYDnRCue=mpKMHtZ) zZ%65clnKrES>>hlT3)6ROh$Ci*4(Jk^Rt=vWTumv~$*H`gg zZ8RZ6Ol#GO6~?VO4=ZD5-IyxZ>yGh7rs54RW`{R14-Q3`JJ{S*)bd zM?*fl4Gt%9qM9Ix!?VQo%ulTIN*oH-D=^P`o&J>DUGnDC=JF$&+o5VyZi3LqGldQE z;Y+bk>$Ve+vb}cHy_97O1L(#Do$$Wi^wNQgG@|DW;9r3mi&C6yTggk|H!=aY;#WUt z%U20yab-I}>;C|-Fz7oUMj1Iz9r)Fwzvxi(U=UizOXl>sl0OjA8=KvCn9oN}+D+`4 z{)}L%b4r3v-_=Mj->=e;ER5S)+?({g*cKaJU;lcaARlUb3P^sv1RGLU6*!x3o6leh zf__bH!aw3R@}IP2E88v=s!LuWkPBw{3;Wa&=;4~4#&9S!x! zXWbE61xf^1iJuDQH%pVvcM~g;crh`FiLBz9^BclxM!evx@UVnIDv4ss5eFjgM40C# zFwanU@z;qazVW6OSpZpEYiC*66J1|F6-p-p2#|%kc=);tYT2|V-CE*)NF`*h#6)&= zBy6m4C$(agm2Ul$^kgve{lj?LXby#LVvWXOT^&uz${nrO!w1s5JlExb=$l|KIKi`4^6W=-#}*s*iWLsvMOK3>@(PE{qXQ~Ox9-8N zPVw4i)60N~rT$S1{n_?`!#&77jzxPEQG$BuUu~$PIx}SQ1AdgwXE~l7X?-Z1{n}Q; zO)Io^79#IBQ}5kKS`UK~4i})hK0zjfxm~<*3RiI1O%A0^PS%+3>nv;0>YPf=tQE1u z_X$*VC9%J93|Owpduk!mGRk{sb{8wEv8M=Ad%W#?O1)?i>Q6>t@h}g!iVX5jrfSIh z=M{N-y6%^^Z)$I{5!N7;Z00r4)sHFw>y>4CL2ivoZAGBK5q105n@AdAWN{4x_4>MP zoIJQKZ6W;Gyx07eT z*>r?*GjgMXYxTdf?o?7lH0ZcnQUd(;=`WF8#Lsn{51&j(!MR9je)_E zW|ErVxn=wlXLqZs22dQmQ?gNv6QVn=}dS&og6SnCs4$WR^mWK6@-!F2;*N)$wIY%)R+ArVap!Bpd*b& ztZIgaWw~cKZfnk_pxL9lO3Yl7p5DJ=wUWibt>P%q)`G`L?I8FwU}rLN?t6)e75xZr zx(C?&0g<*M`^gm15_sMeLLfwXoGp;)cyGikRG)=&7U~m} z&BGg#pQ8xc1I&AVpzq$B8tPcUfotheh}T^lF*TN``Bk%LYbY>7?wT8#1NA-bRYG5I zlD+d!aQoqN?~yx!jK7w6#=97PE^!^zY^#*i{Ky|;9e|7%@&%B2FMS;Y=2RcYym>>N zu~C0Nhil?r_aNf4Oa1Lr(q07SX;oN2mqY;u-D!+4EH($VAN z*+(#!HqX`5tUDP$@k7?LL!1gBpC2Leq9{a-36siB-l|$OeU4* z3T4jcU2I4>c>zW4t+kh>QJOHaQ19nZ@$afn8uwO8YHhjW7gDF>Ss=Dxqm+*T$)2HQ z*r!U4zp|X99*kJt+rT$Qb;)(SSuv=t{vqVhx&~S=TnM0nJ8w0xj|QHwNqx-npv)7& zetE>s@rDUh$;@qkmb%};?WA@3gWEP!=?F&nTOt6cAM+y(j|*z^qrwA%O9?i*D~y{0 zqSKIS#!%|DG~l)Mb4${0%9h(V6!$GV1O()D;!^7dd*<@Gyr!0z8VanMAO}IAwY)4y> zm7l;DHm}(d8(6c2&R<>C{N4#FU~RU+_MxMkpRjtyG8K0Q+nMHXx|~xvyTBSs1lG-D z`)A#0ZQO6-iG@UFN1VSCCl{l0jZ}EV3G2~lsYo(#1S3TbMb8Bib-MI70P%ob>^~;X zr(=S0#L`mt0fWhUX!99YkQ4j`{ zB{e7&1;^lp_uVugCvKe(l(KHc!35yEa912Mdee+D9Ow&5Fn z6A-l14dZzq#yT;kJiM9ySZ^k7-RDP%=>SSPK2T=y)IW)E2NyUh-JT%nBt~39k#b_0 ztI(UEHZcs1hrk$`*-Y8K)$3K_;CDE>lUA&n<2?gE&h@gJ{*d;JF@U6O*Q+XW)sVv; z9=64-7DiWb#?Hn8|U37UqDQdoF(z2Wj?nB`tCfB|sx$ zR;}$EjYN@}q>_a+2WTP_S%Q$qs3V{9xjF~~M4!Qy%dCZmn&~=claR0)8n^v{NloeXruWCIR5~_tHalTtkVcosf$GB&?d}*2t?9_v%4Gk zi&9B%X)-t^K`G;^o6!m=Iz!FJoI!nd>iB^vjv2o(q29jq$#Buu7$9mUjX~C zlQ3cVQ@N^vO4cwee#MGCK@ zHOXw~#D?o(Ht`<0MO}E%A?ivDopbZ!io_2~0~p!BIjoy1B3^HEtL;{7{3}bvuG;)G zAH=&-T6^5I2%mYnI+p=jM;}CplwpZ65vua!EI)C~(4d+2eF1_+G zT$}7MW`DwNOpqjco0&nyi6BvPyd4*ayb)duK{g8@&1?b{h|{_cOoZleV{T=DAu8QrNujg>!I#0b-^0n@%t`h-`6R7NSbfdSQTZzvgyEhb=AQ|C@MiTY z^Ub#dU+gD)anOE2N5PggYeBvfsimDnFVVh6u3ayFO@?1~ zP%hwD3MNo;yJYB*pRJ6oNVGi(mRL9xhi1)D=J7xQ(V!;zB}bI&`lU9i;c<@@>Sq)^ zsb8tiV=ZdIUBo395$V`w6;{s1=S%k{!JB|b`|rK8NOy7E8>xDro^qmo7TB>}+%J`{ zfvxcGWHc7@XQA9h!vs5ELT1j8Vl>ltPQ^C6>d3?0$P28*E;7h zbtTJ=qMjgl#d)%x`O?zdX*VU-i8ok`l5Lyss=k|7?S-L|+y?|*Zz``FOpU){Q{Xl- zB`L(5G@W;{bMqOC(kN=GI7qrYv4Y;ww)W2JcgN?!Oc7eq>YVeEn$GR_Lb}sJX!P19 zb2U1zp)@CeHp9c~lKX{mh`j^Z+U_*`2jOi#Sa( zFTni##uOQY6Z=8%O^={3c78-FCY!A^Wq-)p%9~2wPT+5ONjF-@>webpZzu|{N;f|V zVg*NSQ`Z_-gZ{xt_{VcpbNNKlZjCl*OywqQ;A|658c`tB)_n{IMj5b|_T8lqFA$FRAZV%KQcB zjRwqDUPz-2GFGpUd28Ff$cBmWhHcxEO)Q~mIT5HEj>mZ~oi(xUx;N%{TpDeQlMG86 z<4-7T5Q{=8Zj2)A<*;wFVuY$t;11V%Z7()z3ITndy`44vy@h){{7@rC`7 z0=x3BK~;fObI!%WWtTwC*CFS!wFzvy~{umvu;%2Sp*z@%ZKEg<<6WNB45{K`}XqCx3~wg#OP;pI(Xmea`DbBl-M$eh`=a%bRSJ{1u%U>j9yj<$XUiTyV31Ec7E4Z zN8hh@?7znYtL2@MmgE@xf z9ssx6Z&2Lo9OU^Y>5S3pfz`GTp+?j8(~a{g9Ry0u#bd>gi6LgGYA$yXA$UQ6O5r1K zv(VBbi*)|8o$@4Pov3HG%GZ34C;mQ8HBxQ}zXCMJMc=)zb&McSQ{2CsCSlWzTo>9n zz=}-SYF?Fd!r`}pDhV_(g_Gfz(VZ`VyHCU;irP&=6Y`LW|tumu`^N~r)iKp zJ+r|$R0E$-k{~MR5kP^^RwAulFxpVU4VZRQFM?g_$sumT%GQi0z&Z8D7TZ z`+*dVFW>w)h}P(dQC?j#FaJp*KpsbS9;LEBC?bZ&yp>V5tI!J?x^a~>AYzCar2UKA zEt6+@ouk(zYA|lm^DceoJ?goY45R6!S!%|Dg7Mm8iwuS}@>IP?&^6q+rd8L9z%rTDW?6s&p+kASJ(R>|a{cSxfBL8QZLan& zX8q#gdar&-Y3;q)ln3fKNf6Z|=jO8Eg7dmgxqMN%C7N%3edkLROk}aSC`A|Fb{9YuYGP~jMDQU(X!w znpN@FyEtYoItihfNk+}8wB9XYLF^7#lLOxF;a`PUteCvE>H7ZougDLQ4_OaCXjFfg z8#oIb^-_$xJ)PZ*9Y%hypSukMSX8A#X*l-rFLAebXAEHw z>Y69{JupMBd}5+l?z!mEj=d=5a|y3h$i?0o7_9IfXl#qyX~bxOda)SA>z;h*HKwB} z@Fh!BAkiT0*#S3=dY3d|jLnixs@_)VMJtQQW9#P^wIFY}5S-s(xG}6=-Z{^n0Ki0q zh}Og2;JOALXcAMcx>n%4Fc9(+yvi{Y4nKLp>76S9`4&f6`Erp^GH(fGyLJpO7bvC% zh)(q+G~F&u?0M48JVTZ|N)*wP(A~=a`uKeF%G2T7vnwrroAs?_oC;C6TrJ6Q7SK)c732hM zs9W$yB3Eags^iz;rq{WNJJe2H8;sw14+FB6yABTwwU~Zh_7igA`wy=ZYrT3dm1r_V z<(`kQb=>ptc~@6COVj7o)5Q&6oznZuja#vNr}1G|g`24Qw?UJ4HBPf_4uRjBCFi|f zU0|;9W4haH7xecw-G%?Z2Hx{TCSMhv?Zu8(2`hD3pnl&cg8F(%)+hs;v+`69<`IROeclMp597p<9)hGI!v5H@2 zL$N}@DeD%TjRPKMYGg_GLC#afc>j7t$Xjd>!b^SQnkntGy`}GTXJz_*!DIL|DA4Ry zE`AjpsG9|zyF{Z-^@cs=IL4#>lQ;YVx9xNsv0}}M(|eDZKWJqc5|?g;O%8T$o7}|! z$|>6SmWR9AOk9R_1u9VDR>={hzDPCsISy|LDCBqRNnJq2sp`O5rj`}co8C_mz z+v7U8d7ymPP|!HRrJWh?13(K@$v9?de9ce#unq2AsHX^mr%1TpE9VjZmdvo`z!trxkVU}Q zF2?ILB_Xlf=hoK7eb*%2o@JU&$BDPnnXXM4G&x7!8gM_r;UT?X-OcO=NeFIehlB}w zu~y|0SUC7df28}inV8?Dxcg)6Z-=`akk@)#;bJ+UVvxzh2eT;bp!#$WhrbS)p)@L) zjp*`}^>2j7o$Tz@6-#JLsI*Qfz(TlOMQk})^8jS;T5XRlX4@4(OL^a`q~H}UYqMa) zz#WQ_oDM%iGRgWMK>B)B;^$v~STLLv$^z)|jk(GNlM+nP6&yt#JAs4^kN8 zF81SyK)V5!>bup(7zTO7?Z%+C!R;mem8L@*VsHfD_mK6QfJ9qoHj3kogXJOPl}H-> zTmu1(k03pU95&11uc3cUg}D6LbyfeK^YXs|`OPoI#w}Yn0ZGP@RN$m{4j<)J9aa+_ z(J0ivWc{Eocy8TlRCM`ty+uEy14a`lY($xk>7eP22Gbolx);Ks&{~pZlk3B3f-uuz zX~BB?H`BxTM3_yi9j$RazHHJ9ddi6_h$U)MA$Dk ze#Rm*sNjw)h@eq6Q3+2*bc%Y+sX3#xLI=@eO56?G;DIaq82g>KKjO&dw(+q#)2%qv14YW(8Sj-G0sCpQ*vW4)M79*$TJJ6-xp z!c#G>hMvYbiXtZ;{8$!0*yGi2r4J?A9HZg2qXhU%b3c7~7zIA(f+X442#!{w(RNu> z&N-fNb!iS&R(3Snq-KiOinIP*J{13KXLPlV(EV&l0<$vyXK|u$K`w7o)e5Ea`bKsc z4w{B-(SMSaiVVn&saXjC^~Z&e?tP#)U!N@gp!M;k*Z{rw#No-MJ-V=sB^**o*mL{sR6_+sCy ztWqL8a~+@V`<$GeXvCb2dMxrXJ5nD)LF#(dTRy;4Tx7K7Mi*luSi- zWU~sk0~2(KqaGd(xxEJ%>fEyUv!Ocb>T{d1MK8?w(Q`lhyx=)4A3)4J1UDB|%4i*Q*j3WcOa4IU z?T%uO?oE(YA$YFRgz?@G`(Af=lEwl}c2UsS1I@ypDu7H+y^2d-Hn3TQHRsb{h8t9P z+Jx~YnoUnmnSSEQ{1+aCXzxQ8>pw0?`b)&4Gf&Iu(aSuD66MC*gwQ^2=~TwK`IU2>Jru`$BJq4=-0`Fd&uo z12-Rz($fXH8P3y39|^d@_vyYU_$np6B05)^5L*TBX;63HNLxXRazMwY1AT)w&X?R- z;fDmR#kD)^)2mFo4I!>r9Il#KcXIqTTi~1lmw*vqWTD2A*{`zT`>etEJ)}e+2{G1A z8hf*y<;gdpntpM=TpRjPvz6OB2k8hQ_)Yy?{Luw;CIvmQoO-u}(mTW6dS=O=GC_#4<#H=LP20UJztdd!VKwd`1TKtx%@ znE-7dDvp}RMbHyUZcnnmgvd_*kfSM_rkBN=K2PzeW7nC9HJo%|#g(j!HF-&4)f&0!G$&YiGtC3_*Mb!@*|4XP9si3dpk5D2DJ-%^?Wg zzeX)vJ`uvow;_QA_LQp4t9r<}BJ9sxo z((vgcoRm><-nA2YGj<(`O1cF`>q~a44|@PnV`5mEh z6p66$+97U+yW?nIdmbbY&4lebP;(QYC-NkG>wPp327>b%`GdquaN{bj3)>dm(ncV1ta_0xt$=yk9rFEleMr^?6zoqXx)ZLf{16OT~+zyIZpY z^q@KAWc8=^UXM)1uW&Pa#cVuUeMH~j+UUy0>RX-THHOfUAKi=1rLFNj@2yDLafC01 zTM`ETUU_T$$M3uHlg%k-3ZUR?A|LZ#qGdK>A8IWIYo?~0UihPZG%hmTJL<79~Cg!S$m|sj;Ns#M4{}FGLQU+{&d;>GW*IXcPPDb7k zPK4J@qfO2hB49(mZuCp6Ec(bg^NLsO_&hYz`haHb#x%yksRztRCU6yL9Y&!)u+x>5 zH2gic+`oIdF}~f#Yf}qVr}K1fmPTUO&_egjyMfY*g2VdUZdQaNf*qbd*exG125vrY z9;VK8N4tnH@jpD(6XQT?)mQW}h;Xvvn@PgyYT41d3@)hu6 z!PJ+-z>Z&TbWhb^iG+#Tfe&pQV=FwcOw2sS5J>DX;P%B zs7vF^eRewXNc*!%x!nfYEt!MM(eJQp;zt}dZ9^aLcLf3S;?4I4lC)B_;Vjyfctu5I zliR<`Ube{jZx_a;&yA*dsVUJTt6cG1=anHGAjtOZ_AV^b`lQB%!~pHE)Xen??ZbMN zf#z}__1_)sys>HEM^pF^ma6W#!{}`B)JA}^)BJ`pv+6ku<@di_u9ZJ`z5=NgfgUnR z(cGDjkK=G(bG|>smzTTQ)WZlE!~*PKPY{57LQQmmem+6)GbQfTALOdXC1W)AMim1< zYGJN}QSZt|G$4GT+_O*iVdHhifCr|i5@8uA3kIkf3q5xmRZ(V};2w2Ybx25k%yWu8 zDzc@t-QSFPu8iWbrik{fO2V@L*YqD4a0d6tzvw3(w|i?mTh880DMC}ImZWr7sMi_$FN3xD*kw458T^5 zalWeV?7(=@p>!2qxn~HuoH|_PyW!h^@~QzMSq)c=QQmn(%sP|BVtWg;p*Th}+%&iD zz1iHn#Vn(`a)$u_^Ypn>@{N;UYLA3q7iNmycTRsi)3*NT8`P3AvQ11lzRq0X=Obr5?R#X0;h;l3w4Yp`~j!pmwWS&b1iMNpeqF(C%vyMS*(h!Wubk`kI}4056MNz2*8xx;|IWJwTAC| z&xOS-ASHKAg~N2x#71-KzVhGfiU6y2&_X2W4y5;cq?mq0q3!OjDp8Yc>G(LTED#6c zev-wGOAli>|&}n$}tE3}(V|2~4<8bZoxwN9*v|cF-e~-V$ zDdyW8=V&%<99Cln8k|#Uefic%71h)+ot!;OXP6jvUs1)n8QA`Z>Q=RSr2dztHg67E z`G19&h;^mzE)*`YdNI2f)v>Ce+3r?>1|FE8fZG92mNJu*gI9d{qAlBrRe)Fbi)*3O zr^B}2;V|@CkVFHUB`eMbD_w;j=OQ6PUF(jVAqG zyaa|oQNmHPngri{Uq0f*+oD3Zyy0EffiU4c7G8 z!L9BI(Gmu->0R=Z7(-vc<72Z5#E!EkmsP8<{jM`7;P@obtHkTw<5C=tG{@_h5qcpA zzZI=q`gjhc747xJukBZ05&jH(xu`ddYkcD=kf$>`@TtJ)MW4EkgB$HkUYZq{AB1T7 zejl=X6JvI?eycm(jvClTye+dII75HB zcXkmEq}5@#`lP#RwVHi!PZF^*=q4xL*p-#?NfN2X8}#un=X6Td6-@`z29dzuwK?j6 zMKzR8>h`ra{vy@PRG3wAkRB^=?C$;Qc{;Cb!?a9F=1G4<`ma}NsrQmEx2+;aDO+gD z^QvRt3JT0IVb^1y=1w8Rb|PH5eM*-Wo_96Lxd-6E@a-BR`98!3%_TZHIf-2;A4mw? z>uG)~O51dygtJ(1CNXm(ek^JVyEh0dqj!8@LTeqjB%xC=gB!I#V*Q?|DDPb5EI%si z)`CMctKH+&>Db&Gev@LFE$DmI10LnHGljA$dUub41tl~4tQz6zPBec!)y#!`R9nzg z^dBf(jvo}j5-zsb;G$)w>0c`~iua0sM?B74`HmQhQ zie#CqRi#XlotZYYh$Pufxa^EA>oAjqvPOw)QzGD=G`<435*avDvSM*~)iKv{KFYE6%>pESr^ahK}h3$>?a^w5kT;-gS zu2{;Ofc{G_>zvXvW6%L^GsPq4&I42Px5dYY$|#fPU^}UvmHVN5%!08rv6)VjwLKK@ zbDMDo&crKf?)p0~ZK%&ep4*m-x+RrOdgWTal=@$aqT}TUMulugpLyyZ^52fV`#{aZ zX?4>bP`v&3z&ll`8J-@XT~=hB_-AD`%a@*Skq@r-=eU8OS8oWiCBvL+|AJ1aD3WJ{ z#J`Vzr5?N;+IP!_eKRhx+n4>|C{l_qp`4_-**8b&<-*H}J6Oo7(~yY8_gsAYOVEJc4`f(@Ge< z^wH^#+(X~Fn;+|cw2O-M*n9yNT7IN{Qk^AQ6UvP*ApqGhM^ z-Y!ed#=?G`bx9&0Ori7&*}_nO9|cxV^*NS*;KPW7fd=7c!D15NGk|Iwrv4}yP`FHB ztN8XD*ozIqcO1$We>PFYNtwC|=-N-PpEj)wCnFwg^%Ep3IWLZ8_ubNd-LWGD{c_y6 zWfS2nvZaQPS7mR6RR8Tu+OaIV|87pL44>4St#AOpup>>S!wytRG~Yvb$0J^!cn?sQ zu=o1sPv6u1Z)i)vGaR}nuQs0cpuPm9)nF<{Y|hZL{VXmr;?$uQU`#Z0@|e_@9%2XN zo%kpnue4~Ef$w|{%vSDddoimJqm645q2MZF06l)}{oe}lcWd@y(3N_OX^nIC!ua6j zpzY7V-kJixwY}$sd@|$qsBc21Tc~i8Sj_Y>@7M0i)g$R0hv$`Qb)2u`-urx)=qHt- zemyN%@>;1A)A0MJk)0UYKRMV_?q|NTq<_((FWEP!*Xg^KuNxQG*Itc3opO!~XkM9f z^VD)_n~OiY(l~W51pc@RHDuXuCu&1xC*u@;4y$jj=NlPs>Mu!kqy$`SVQ6UBAgNhk z;J>*zG8K2fP|MeH=+6*6zjLD?Oh|_k^Ipo!Z-90WVeGkKKKrNdo@<#pNr)xrcmt!3 zPtmEW&5t(!>o()WUOggtf-2A!Gcl_V#{hFQ*VSQlFV-)(C76UbtDTT%Qx3kAee+rr zdb3vV<3RR|i)0-48t>b-3~$<7lQO7%=hbeJOD?^+{4?M?O4|I@e#H~>raZu_5?L~x z)!iQ%sM#rce^*DTWzn1@btu7DGxopWsQ=J-OZyB{jI5s0{Qc(g_f)E#z$AORZw~C= z$VE*wWD%=9Q!4NX|NSd5A1Tz_Rrcp6 zzIMF%$mB~n%9_V%MUrHj;xidXK>Zn8gfpK0;zSl-z0xAgxDwhAfiM&qqulv+*2DI# zwe0iSW$cx)NN9*&WHt0ZKC_KjZe-#5CY*Tbl__3Cr}eOo6SZA|V?8x@Pm5e)I4LSG zli$q-O$6~r-r;nJu9Ce|5ovwCITM8__myn2K!){pHk8f5=Ex%PUw!+t4s<4u; zil+)Wp)vqOP2U<6|H(NHk0sXWVC1Rv|2GQ&u#nG5GmLm^vh z6m{u8A9VcxOH|7M>op7WH3hJ{(~Y?{fifq&k!_si%CjT1Z*%%kD*e{GtsFwxP4nw{ zbNB7#gLlVUr>3O%655^m{_6%Sz3~Fv+;;qL8WC#@tyCipduUY<-oC#4yI(TntsrLX zy6v9eYqu>DK*sj>gErS1hVZ}2#6V@&@Z0mpvBX_d8?Q=6AB(D02&uP5kICI|pz7|A z9egpb{lR+>-v3)rQ01pK;bG4WQ{mX{qO$FrV62mqQo`Hq z+nH)Y&;N#BZSIU*;PFq}CC zEA4tJ=lq|I=2qh;q~Xzf?2ijazUU%559|NTu4%?s;OX^?u=JhVb5L;GC#-+6pj}i$qy5+hfSx74 zA77d6BnP%Dgdaui0Y-WN1;8Dp?A60Px)G%Mo(mXK01AYXP$S~wLDaxJ{x59=zvR6S zX~ma}5Y%L>>M6vO-FpkvAK9$TWmMQ*lg?IFtbOkUlFnO<_xyca#jWpoyW({aHmeV# z>yjvyD%a@1Wc>ZZ)4ZzHvS7QT+<_wuJ5!oq-u6M#bNs5&_d!kFoAn7d>clgR^$X60 z?d#Dj%`?%=VnLEjr`MIthDU!%W>tOB`iE9^yKBEKr4^UFBaWoMf*My-LbIODX_hTUIzE8>r zAhPqm?LAjt-NGDqXwG?H2sEQ7YLZhiOEIkueYMv$5yJN|F75R34yL4sL?;i>wgwz< z$SmLbWMXL_3fE0bIM(!4?=O#BZwy`gbLQWaG^Ude)dlFG};d|G8+8WLyiLK_w)SD26579>&J zZe(Tn`0T2Y%M!1SNL5(h2SxRF>9NiWO*OFQf(kyFM!|++?8&A$aB0iK9Z`jvQWQ?X zcgsbtJw(3BHZb=G91uHUNA`$@HqPUvrX*=jlTME3$BabdT%uy0Efc=f5#vtJ_}iTmo? zLWrRsQ1Kw2Q&zMY;GE8^L>lM9@8CY@AXl#G+uO~~?~-u{B_L*VyvA4%1@Npgto`z& z?~JQ?736v=m9!u{_-u`YEv#@JdRr!sb85uH=G-7D;KY4M#q$CHe zk)!H`Y9Ucq=E`6ZlD;h^xkT#^4_oiL`;DsNs&8>=hTdmz#$9iD$wF>2ELneP5B2}i zxliEwaWc3QNPf)SpZXX1Jn#CX{~@bA$K%obNvq~N0_vpZR+)kad^;WMBN}aI)b;r_ z`)|+{jQ_aBuC@54>t*Z_m3(yL8uta+?oVGS1=&fxxA*#mGY^0%xluB!u?M+2Wh7cG zSvUC)I7o;0dWxruhKc{{(Q2G|Ak&|Gf7MNje`PbX*e}D_{eZMN|LO1+Wakb$mzYjeN9%jgsHO66g|HEsT3H=-XR z>-aNwnsOo2&xs}5?K+mSxpdw^z)SCQ>YpFDLkx#=h!oQ@DAj+SCXJeKF>@5Mt<~Tl zv>?0HAb+0JHoKQsZe+CWCjqujnR1-fdGbM~qrc(Cd9!nGKLNYmdpFAwj_!=+^hnYa z#<(k$_n~(Xex1YG+Uiy)`X}I#*yw}lf&1Vrxt%wHMyW95_Op#4Gb68{7U{f^hE1#i ze@Y)xsaE6p= zEC}`QhOLHtub*xsMeQVy1e3Emjs`9{L)l|X1oxtep{?BUrGrL6nNYQ-YvW{y*Unlr zG}NU16XD+tSq-oDd63TrC=jS&BE3PkKjw6KtC5-)n3Sk?W%*Tg9IXBJwD~EGDgXU4pL&>1k@Y4S(~yLK z1uMqfoK?5MXAqXvCd}T5mC51TdAiUe%QK@Wxx257i}vK~Z3RS6*>3Vn<$=lJ%y!oH zGa%GN9$$_Zp>D@hA^;<$48SVqmy9O^Av31*d4`E^`(Bu^wT$yy_txT{f&W3dUfqca zLNW}^ojw|S?o_3WjR{Lr67dD@YwKlMoyt!RUwysV=?VvsnO{Dn?RlDV-X|OXzQplO zx4Cxp>E0GMX~1Hl)!B0zpsf>tiTZzO>z(d&fVTd=4H28rIBbv9)%*XDy+pt|S;hAdn>s8dPlXC57)I2IP zo0|!e%1ayLZx!(g&oIP^VJ5@kBCF^}`j#{PLMSt!uI#CdT370!i5^AvTwYg2zs|@1;cWYyZOZ(G6 zP1=S-uV}rKQBKV7A?nD%gxx9-@+ZAwB}GqkSM8TmB0N_W2jxlYr1HEsl5j^^2Fqpb zcxK*fuT-VLAO1I7k#XH!p>Z8C!8uw#M(v1CX=5&DY`MT`ZhqyiG^y)LeA=C6l~91i zvJxwkji#_9H5NAD@#g;4?RSvHb(fE+fXA2!&&6;Vqi+@lQbtmO87B(B$4ffsusfbXkcojNP4{A2~!FU`XB@jUZ1{iTh9OC55}wF-p09h zP%Qs#OFAudfBGE?x!2Fz$nhe!)8r^7xj*VbcTTNVLxI?oQ3-sLPoPb#+^&H4_6u6F zn-g*5oFfAIi;qIl@|t78`kcQG8?#xbQ|Vu&Vq+UBxtjWUBB7kU7lqa}jK==aFzBfh zLo=#H*26+#jpWY4hnra2>-!X(I|DmG8TbzH>mZhIj8r#wW91FC78>P*xO--Ag1^_O zOy4s%oy@b#3V@x4=qVbi=Dn`EVVPVebSZ7&Z}~|u0W-AgZ+nYqr?^U^5teJfDyTQuBb^W&ao>OLzbzK;B%sn{sVJe_YJZg6j!O$ti*KAJE`5w#;? z(bQJ3VWgzSaQ??pA^@R=?lOz=`4bDF>I@NUNTJNp#PRhp<&@YR}O>`tPqL751dyhUy!0SLg_mCpQ z=-W^LLi|IRYXROkR0YEJG?o`F(=-Ns7rKN781px`dKkr70^yN~`IQcXclQMxY3#9q zZI}kqLU>)KW)DC?e8F5l>eoWd`24_HKZDDS7kIi79CPr)X8G?MgDe1s2(aplZ^#0|>c~(Q-xZr}eTwCFH zmzE}$&jDL1O+iUs_7_2f;QEjR204d#q^k=ftgzZr`0 z?!Dr^LU7HyivNk3G@W~OB|@adnd0r@)y%kh==xfu!!x`{!FVU_{8@0uNJqck8ZY2l zrAhz*m|GmX@!QsJRO|35I}6UbOJX`Iokd9(ty9ho(Oq`yU%#J`V9x z*7MvwDE0GP>rL093y(T{_Bam77$Izo&t^Y=-^arA6IW`!9fo@4d5XWmS@(}t;td}h zA<;awD}+9Jq=DpzWNcY@+uuQ!C4Z4VhS|?E+-5ipzbh?S_7DH?>mr7s4PD+jUl%@L=6popoD%7T83M(a%*_?NLpO7A_NrFHSha{)P zC4rDm+nU29IrbJtvaYa5ed3FnFR6Vkc_f<0G|EfGa*nC_4%~zN>)Nw2Y6$6RO%~U71Ho(p8w@kHtKACf2BxldRI|LqGI;z4mT3wM_T@C7`f$+mc2{l zpt_hs?RBv{w_gsE=a9chHerUK9@b2PwRaX0WU_+PLyO&V9$|bN18L z*E7@4-x+?q)7}1lUF@7&1h%B#IaT(g&bjm3X^(H4moA|%xLrJbN~&rJ_7GRP4m^KP zi(<^x{x#2|uReLA((WYk?D5!JI#~mWLqJ`TH#zf!f1}VY%UbNzq0P95-V%-Ev`xj{ zT9Sm8POM;_Y}z@0z#o{8=vK$|-|B~&1toV|3nF>M7q(2V^T&fkbUhU@g-8PXn8Rh4 z){`Lc9(k=thM%+DZ@<>KdVs6%K5Wz8uXk7i0q!7xmviHp98Le;TvTr7sYe&ICvriT zev91wTK{w9 zXAW5G6A@=+h$6j5W;%Fn*v$IzND(k%83~nu?<~s!$(Tmny&!G=U`Bj_4L^y zwfd#N`zox@k_{{V4iNaCHl4NgLP*j4GHIm@w+UGcT&<}xrv?H|RY2{O8EWGh8ZpIw zs=cpztQY>o{uCrpYhuX|A0fwVToMVazO|k8k2Ld1)y`jus44bjpeCQgAm*-yT;`=t z@HX*W8VY-mL{ynN3>j#giqx81Pq5V*Zatf7J-Z<*r8n{K`uf`+kEloDbk}+=wz*5P z4hU?5s!m9RtcxG3u59V8%!~H`Tnq`bi^nr|+dm5xKiwcL?gOr2)-9dnw@`E0Hpu*? z!c?0p6PuOf+xESS(&Jx`G5Qmc$PgMR)GdUO!3*61^S4jq1t<9zJU~?hMvn%|phITu z;XR``nDD`(ETPeJaB+}yXIT2+$?6Ybp_R%!e>rF!Bv2XDu7~Jt!G`XG9wKqKEKXno zyzq&Se`e&Be{7u}yIn2S5NUU-`tQyS6*q$fDLqA3d~d)XR-ot)D`2s^W4jI0OOnj)Aj}ad*L^v+&cbcyo_lL(S z{s6mvqGU|b-w%oLSI~SK-WkI9Fu>c!p&G1VFrRyk%8Rq@YiEncBFKI)#OGZY}4HKwNJuQs3 zCE1WoeqoR(ep2Z0K;|m84ls@FeezMyNN>a z6CIUpCooAhO6dgQ5-M>l(=CHrmyz}DK_Dis`f+>5LWpoRGntVq&yUc0fMU}o8bARK z#h3WR$yFKl)-Zlvw046zNUM3aV}#vt#>XO;yO+8}t*OV}^}cx?5fLe$TG~J1@#Yd( z_^5~DQ(?htFF!3f-CwQIc7J8GI#~Kiu4?RNuUaaZ`%B7cON;Edf5gWgcj&caLl|LE zt|MxgQ-&CB*$CbQZn9XwX&I(khm0)srH=d8ZW6GW5LWawcXH_#sJ45}HulU4dYAcd zMzof@CXtR=6d|!h4a^$&Vfa5MUhb0R^OC+u{ov(0{csx*Gk57U zJzsm=29B2i+$HJ84)oIkZvW7fcYc*SyK(+-pApIOpYVn0SO??x>wte02!qvGV^qbw z!5{R}pFei+iPoXB*ok|#2Yq-5TvUB`^JnOG$@JJ%EJxR3<3AfM>i2U-e${CF<AA5QbinxBtOJNW%3L9H?oclNXW9W= z(ds6)^xB=}{5%*d5|$~)NYiJ_hA?v){6i>KQ>rsxFUY0Z1Xu*uP);BYuC;-Y2QxU1 z-^to!i+tFCCV4>(Ew@u8r#Ug%kiLP3GRoG~&grL4IhTQ0je-VSwPtnKpS&OnH2mHO zo7$?!Gtm5^JQ_EfUxV0=<^CowLDxj{P&_Pm^x2T9S-%aBykBOkxz3j_5aehyT$gASxs1+T8 zKksMfsW#2gulFeqs^bga@b3hI*Rxiy>8xvIYff+$s_saf+^Qa#T8qUIQZL#v%fM+6 z4{%7^+TT4JoOu|Wg!XM^8IX#mND#al>b^%p+ie^>36u`ms=+rK=b{frk`U>{n-ydOw3sqJ@J;6;p3Ja{e~** z5m-fIXgwrH%Ct*q$8${u$um6ai}P2zDE_Cu``R_Rt8(uQCDwfeR)PX}?`opc@2N3n z;2}*`n9I`I)~R=YLY2Q@@liksp6?GgC15d_3M>YjdhSnp73XN)SO5QoO0>FZ0%&T0 zD}zJVJ?Z=Ngtg0C@ezQ<+Y6nG%Wa9(R0eOHtHZxpB6p)12KYKyAPVgJ+^TS2- zg<9FcU_)VCzGcSOHXB-;@tpTMp z6*Jie`?!-Jk76@lpyR;LvOK}^VdOxhevK}8yC(GkdS@^%hTA*EiJzZWtmABCY*rL* z)sb~Jr^2DoiLC~d!w#W{OQTk8{#?r5swF?$!tg7WViYEA+AAf4YAAqKnuR2(**b?6 zrYSbCW|yRSlP$R>qbIrIXjUtez$aJWLELqaQD9AvO>Pl?2TP#_eOR^= zW$!HMf z6zi23HeQvYu_kb(PA1w}7^a26g{_h*pe!#)Q0?+9P?#Hu=kbsj2SiV-H{CCE~qN<`S6G5wi?l`OWR|;)jHMx3|i_(s#y(|6oM# z_gP%mjM`9_xRVXcg6Tq0c7{L%bp9vKWE$h?4VP9Q^X*7*z^$MtoqK-g>i#h?lae!{ zYk#7L_slo|Jc&xsAD={*>D{wcz*6v!-)Xxq2sACJ-Q{1HbbljIb=&U3v^rh&jY5a1 ztpsHk;Gh}|2ZFXVY%M;TQ7B;F11OG86W$_NcFz6(%jkPX1W%W0 zxo*IwNb@?Uq4+$0PghFo4j8#H-syGs^_`1*toE%X3pYqG)AUD*4o%F6NIrnF;`ojs z?a+`NW>RA4v)b7SS~hY!6{gHh=3)Y@VLt7w#2}WMk!XpeZDoSh)XuP#4g3gItvt1E z)w^F8|2F$EcDi!k(pxlV@IMWZ`%V>f1CM9$Mo`P(#}nNARmcP*dn*l?9Rdv#L+4I& z6l@kb34wJjwogOc)mC|17&Orw4CRsdZadQ;uCZ%}kWtX5<)lQ8#MT5Qd&@ekNeCN{ zL-F`ZfBH5?!+*45;^ZbwK2$cYL!Lhi&INJ%$%g0>e%XGRAd3~?d*?GJrnok6Sjf`Z zLiap{qB`H55)gZRfU{YJoj^yRc5?XtG^YX$Xt6$Y$0{$ifjR#bM-Z?*z+R<=xViE+ zV0+3@g8fyN_xXGuY;U=S>sEGXN!-NJO z;;EO?#1x;_8W(3hqXZXH-z?(i=FxQ!uM@202U~UP4qM)`)(l(8L8FmNLuSXU1w8RZ z-nO|@Dt@50RaE*u4ee-^<84EGl854u13ln~qPzi`^ax~$QOa=PUz zC)tO&TPu%@NhB(3ZNdVJ4%&F@#KmgwQ2%?=NIFs0SJQwVT%c zjI8WVL0Dgu3-ckC=AR@qc zUt)U8v4D-A#H1&lfkZ?0(38ZoPuTdvWf?#wWMqHvlz4UqTZu5JlM|t)^(SU=mc_+S z>t~1o`krHRW@_aHMXs#ewVDTtGx`R;7u^H`k%ar*8&SbmB8`swMMfOf|K`6DQ573t zZ15=Yf3m+F9v3w=o5-HZWrzgO1p#_cUw)D`SKWGee5UFyhbE;zwzf_qx+rUN%VRAs z0l_Lg%^nAQJAD2mfOme6>yDkJc}PD%Dt+iXReX2a0>_ibk5x{CHokdLcV@AC;DV7! z_>Ly~$6vfQAss9uO3e^g$wT?3aJPQXR5#3)+j;rKS{X>%2H8<+`(aaWZ0XJXq^9{z zmBL#cFk8Rg6@eln)D9jf-(9$|k=pFpTWAi|D4jRN;BPSBL~FNthNdh7{aV+h6;W+2 zs5i8L6o@1ro);+UX`q)@e#f+%VOYMB(rdn>`cQh(Qe_n;3$ymuG1#g-sBSJYHFvFf z$P?}-UF#gfLCwnBUSXiZyf+HI$#Y_~v*-E(8}Q6UW&dgP-LxzxOb?}g}`^bQhUjByAS1v~gu3^KO52W8r?cj&X@`=a!%8Yf% zsVzScikG+8F4 zkGWX*!s$F!w^y?Zhq`qoop+-vl3Jcm$n49b3uW+X>@OVxG64&_x`gzg1g#{dM@XVuDvxnv#1g@&jb}TeWHJrT~>L%msh4=aNt=i@7sB*o{qm)V^_lY zVBN7!WO=IpTjz6<+!X`%^JMT}XYzi0E84(M<~1E8ekLC|envxt2Uw(&0Zc1b#B14SQu76E0ctJ|Pjg z;?Tw|Oo5>6V4DQZN%rIx0l4{Pn_tD>oLou|)q^{OudizSkqc7cv{15E&qmPtY9KbR zS`p*H6{s4xEBPI z<#p612GmrKd&}Q#Tld;q?KKdmB5PFtPY5u|+BtSe-uugJ1_yrrP}(~De2rPoc=ea5 zP^mVS1F3pyKPKt-m@Fx5WmbmU`hsw&UdESOd~P5e*Bui z$t=v@CzD>ao>lZe_*Y>4ZJW=EU+L244ZrbfWnazRxrVp(j#&PBoKkkpf+cnXQ%7s~hZYERM~sxUr#ZxFkOK?0Y?jDn zPV(JsyL$*-x32mi!gpJu;g|M&*L#51Y{K>N87TZ?gwoT$;cEAgOnmkaNXDfFo8bBL zleJQ6F1ZK;G0i3|1*37N9Yli0wbTNEBd#f&w3pJ|t9CN1C_t@UQ-;h6iB_N#} z;dFAOJng&CFA0`I4d6Gxch~aiJz#J&q0e{p;L3D_sA93RY*pR-WjDra`D}B!?N0qC znELBFavd^$dGr}kw4TYowRI^U9NhyBHH3psGIETNY>kJZ_Od14S;c+g6BA)WnGlys|wooOoS$;fud*Hs{cA_o>ay=oyEfp<$5;fQINO%m>_I*jj zaLZY9U!_q=yOO;%g_h)a%Dz^%Vx2AHvzM5;+HtVs)dLiaa{aWcdQ*5WR&t+M05iUf z(bIqk2#BcAfmCXA!$*dOZuhqChywv|X@z2X$PaU|n1@mmKMl2z)ygI6tqK-Hx+ys& zK|EewY@Mc@@q6BOjMCFHWhvvw^)V)32dBZi`R=)hk8|l0iQWnF4Loky>txbr%Z?X@ z`vD(zMK?Lo`bm+}J>*lIl3C_n_?!w1Ll#wwklAM6MO0oT&>7r^`NOf*8$7a@g9@~L zk^mV#2U!^tKWzlLgI}>c8}1Lp3O@18oYPTys_=3-c00nI8DFP_oEyBT{N+@!<(|B( z&7>C~nfsNjg?BKN;daGaRK-fgi0vwoC^4Vu-E1^?JTM`%vZ7C|!N)Lo3&C^!;ybm0 z;d2Kk?88S!XA7OR8L2yO$6ibDa(`Jis(78xQ1jZ2x0KGMC z5_)5_*wd^O49wLZT533S5Ni*3pDdE)xuCeFIlYUGqW_km-YjgNzyPnS*I1e3zs#F$ zytL;&i%uBPE1$YxrRPppURe7qW2tq}?@j-pBlky=4Njgj*R&C0gi)WFiGHV6KSPLl z7Rqaq2E8VIq^n+^Y0;;d#-rGusy`@;sBTvDu0y!{cXrJ__Hxlad3?A2)lX&Ff{>@* zFJ;Wv(iS!L#V2;E~a)GT=t zJss9N9lsNXiE_cu#_G1Cgms0_9qm}lc^G$wWjQ{0Q0=M2bjMW_m5%0s1kX@akHhg} zS4we7+GO`P|HzbxP}knZZqOzMvOo1^IT@Mm#xyOdkVjKY+PAM<$^4Y{&5eCjOWxiF z7rVmJyFkc%KzOo0W%-&5hTxTRc#w!+Xaus2WjJLak!eP>wVzr-im18J^Vpx z*omEaj3}#jX8W?Xwm?jy%%0J&6cyAad0qj=b=%IzvdT_`&F08y1csX(u8gIc z<`vXv+0fi#F_nUtu&s%_%%ItvkgwU?71#w7Qy(?JXc`6FM%~}@cxvp7xYXbaqjnT` z7~8UD@pEjCiW$tNuwfzHms&CM-o$X*-wS)eC>n%h{aO{R89G_P#Y}PG_1OX8!RzXb zU&=xfiiTRnL4OI673-O7{LMMZe`Q=c5`J*cecsTu@%1d*A?p)Q;h~-$Xj>A+0htE< zJRxFOQnf#@u}Q64E%Xp4@plUd)vra6fQqSzX0PP+ka5~A(3=IgGMzw$ZvM}CuZD)iqRkVM zxX|IQy|_z$npM?W5dkDJQtN>U?a$R;CL*t`H2dL5P?@0ndbV{}{4N)>Uh-Q_yl>o%hcY%@7HcRXANGs+~XPtbH zVu8Erm7|}}Sc8J+lIHD1wLXP1b3lGjqb$sw-{9N1wD^nvwTGvIjMOrCfbM(`2ZFc|J^x!;)%`J}3`m;PO&@{fiqmqXUQorG{ zCqVb;@0pKLDbAX=?WOmr1t(LN644eQyp1lt0LysYKNb`I*T|lYhtOHK&es{Lpv&kOqyzOZ4)? z=0LK39p3x7KimI_e@M6bnj9Pdi_)L{<9LbgZ~!6x^W~Vx0Xe)uM9|oU0IR}yKh&3i z?Q#<_e0#r0d@xByiKKe5oH|sg;V-p#p8DNQ>DyzXtD2i53-wDS;UU2^ z?6+ZS%WRgbDpx$FxN_n$8e>)h&(t^?R;B88*z>V6C}GI$pTO<%ucwL+ggYeGo7J!< zP_3x!t?{Yz2%t(0mg{TJ&iIFmyiio6{R2-g?zWmvK{&DaY5{D1 z=j6pghWxlhEI*GLaBoQ=-Q4S2w)lp&bR?bpUeGH|v$0~*+q+MeKefh%nNBMuIy7Hc z`TfNn0<}i8ziAk`nN)~Ia*s`{Ex_PE!3>B6e4%KaTX8)eXWlRs5~yT_!4|gI}5$}xGmF7fD*GQtXrU(5MT;2PZ$(f zH%4Ti8akPGvs7!#EQ2R77>#cYc70b78?ZS;bGc;yb}x`bb?yNY@)zi(=-|Dm&zsr_ z6*^=cJ2mY(&!;(7EPa*q(uvcT;I*G4L(dH^3~9dG?}sLe)D zF6e3S0$96+_LoEjuh$)BrdTtVT&0XCS7(q&IC#O+|fT4hDe zpxbvLCA0aQDJGUkRfqe;W~4gvmx~^c08aLT5FN^_kaL!4F;Oz1MHE`6O?8Dr#S-`k z(l&M@V_pEv(%}a$-U3|}JN<8$AO@$O@{4-HP={WjLJis!kFr*)X?^BfPNy%j`;Kut zD_4CbPF#G%?G(*)T{U*|Ba56o79=qJwD*wg?>yo$PuBJN9~0L@)mOKa{B6S|e%8}p zoc>64lgECtIj#5nM2_3urDlig;<#I15_N)<%B841R;fK>Fi3vr5b{VRf4AU!2U?i5 z#>|ZT`>@T45pC8Rq)p9M7|qO(J&heb-ha3~-A%HEgRtPW=+U7b+YTKR-m+28La$n! z%C^WJEaOG$uqrdIAKw^)eZ_R*8@4)oqJ&`+hu;sP}4L|I4h z=+!B`ebuc=b- zDwPu)Pd#uJOS?O*3l4VGSZ~!&`8uAo*m*kf5`PCryKH9dqYLCvH<%3w$)@7 z-|8XvaYAb*d1!@kDm?HquvO$9lF*=D>;QD!3_4&|E%hC?fL;2dDc4YJRv!^2Fom_t zKj?j^(2<)hZSW=(cLZgEB-P}#azONH-wv(GPodjAunUsb-ZwPHcXrm%EFW^za}a#& z5rnsnm;6!i_rF}Y@A^}q^W~~p;Q$vchc+k64;fyX;D})Q@5JFsXY>lcXMHnn#4WUr z^h_ov=$K_5eK>t5YbP8L8_zN*S^RszWZfSld%@HKTjTR;8S=4ehjXPNcH>c&>(|r* zDD(H>=*^?^*FQg2E`HYPt@KX)$v4V=9L0ac#stFsZuG7U$9uG0V1h!|6Qa`sHycWh z?#(jYIJRd6_#jpZ?%k-cWhT8MDHMHZKv0ka@yOJ?vMPMhbB~Tv{|kob96W&P|8jN)o_J78 zS~*Up3?oq8E)HD}#GNz9z7?J+fh==5-p$rzxX=#JM7Yx+FQMIXoG0>ejyYgVtdiL-RgRZY#YKi@IL}49H72 zSXvS8gqB~*I1T`b!#MNV2*l9Rv5ENj2|FLjwbe2lWd4sO!Fm9A?~HAxH*%mmzkQ>% z#+&>K>o*DXY*dI>?^Lb7dvJ^Nq&c84O?giNHkCAb4K8dlaI0Cw7RIBe_UO=pjl8rL z(i}XhsvX=E6&sje!6}FdimlGn13OL!Dzx-zwxH~@hugpwumAPQr)q^}4fG+$*vqY! zOcr4TYdg6!j0NL@+VMI9LY-^M+Kp>Ne6otd51pSUt^Spl_9+gi=HTJ=rczm6TcwSe zzq2Zl+;iZT-xO7qP%2d*=HQ(8b$E}|QhY$n-#Fr1Bi6@B{?`{mp{7kKKXbqDjceb{ z{T3-#ci`HxNmBRDW9Ee16|OwjLvG}?*gxOb7r(_Fk%*=XrUp+ecI9bf>i{p@8d_dQ z0Ay(?+e!JpX(fF7liwQld!dvYVPD< zxmv2N$AE|tId9@ZVRDoLwVEZ0|Gz8%rTD3nx1HM`!=>zWwSC{81GleBUgG7R6$J?! z7RcuMAL(#Y!FQZ-w#aZPvgCfa9v~dRLLMg^U@Sf+=*X`5!C&QpZ2H?BEBq{rsoq#v z^^yiMh5Aj&Ee~Ox2IMf2?kTQh1`Nq?UOwQz{G7~XtlpIOaKEj^MT$O+R`zuzUaNag zRFVfA!`Br$?u=OMTlh-o$+ z4}58^IlS!!Rm83+j7sSSFgMGw(qQEl8)MRG(DoKR1kn)WF%QB%^Qe#w3>Id80b%HL zb6YtyIbK7uJ$?y*@G9u(BOD7rq3V%O2bV;;@ySLoWx_B7K@GB)!=rgc^!HVD6;HQ{ zX2JuTEnw>Tb&I;-3uH8kS8P%FFI^hH&J?eH%b~sMeImhne;hv9%%JIo{zTwPX-9hNwaCGp1sTt?# z4i_#bC<ZkVh81aAIt=Lqs-FZmw$X|3L<0~0yLX$inR_h9=IuU>0WZ& zM_J1$h0Ro_liBUKDd>{~?QO_sI&Jzl&yKzdl$N$nn@e^HoU@e zobMFs-lDa~OOKU2-Y0R+yLBd-U8wuV6cpMtk_XvXqIdB*j{&sOU7|3&k!tF!n>E?m z1aQw>01e>eYQ`w{u?&LSl~LabwTlPFISYa*rxVmaTl=)7{6DO{cTiLR);_8N0@6gJ zNQ;8fM2biaMWtD&BE5t34iZWzB28%#ks`e)y|>T<(v(o8CqU>R5IQ6f%H5uGJok6s zzwZ0>H^VTKnLUKPKYO)jt@S)4jZjs?>QSqWi6Wp#f4USxr?#y&vmJ)GXIkE=BXNj! zLAVpp04p7ZArjYuYo+Q`}v< zA{e0O)U$;_4L9s~X-XriHTb7GdNiUQ%{hOOLG!Z-|n`n^%WC;UO~_djT7U?-TncwIcrNJC&ZnC_Gz?IfAnllRhH zj_qa&L4KFOZt$s%;``uP;6>AbB#NCQ8D5)fjuSa%B{F#RwP@>__-MBclmLS-$-Yi~jSRIH_3hK&Dc4fJxpn^3TR;()^|Ov@E4ldjK`BLh>bbi8T{E8MWii z4J;MSTDRx&fn~-`z3I0~$Al{;lT~-Ig-5tsJ?IHr8-p{+f@zhiNh*fEk@j#!sAog! ziC&yogZWWBFJq<j!qac^Vl6SUGvseFO z=c%vc$EtB3nN!jQ;(Fx+qwFGNW>*4Rg>p$;DC+O04`iq#)zaAL?v#bbH+{TyE*m${ z6HgcU7AY3Q^c-*Fc6%V5S&mY;5-U3h2rf=ee`8MddtKKNU3OXE_|PckN162yz!ZHT zqnt8Li9L?I9{i1}U-(`wK#miisC#22To`XDrRZNg=HKC#%bE$WZkXB7wZ<4v{Gf>QM4hrDO;>xud?FW9i{|#9@`#;kW%@^+7LaK;Kn38IQqp(nZW(Gqr`FKc zN}D-ls=SUZ0HsZOK`2b(u}nAXzAm_Zd6K`oj$Z)KxUVB8w{;s=B{MbthtycD>`%<5 zHI*^3Kw$XX61d|iT!6pggO`D5nP2TIPQQN=mk~%Nhnu%^thUunP|8aBB{w2E|$HK zrdkbG)OQHly!S~)I1<41x%U?G8MXU?$EI7>yI4kx)m{?-mggC?UzkZ_)sApw3*!W+ z#0f#dLS!!&f4bDN%ag6(EFc}7dF{%uT0a20 z%`iIKx6P>!>C*`KYnlhjPwWe#MQ1tX4l_n2~ zA@?rTwysm--F@c4R;8e%1AUJ`J`axWLcd}}ZOPyzBCtjJT}#vMGkJ3mO;OVe{I zi@L(TYA>6Q7|p6^U4O>Eo$M3k+4@zUvxl_TVfljcx77AaXC{(G_1}j0ugiHHd$34y zTm~S*L#`(5iOzA8+X&iDEayZY?0gQ{+~Hd822v=rEa8aa3!d~XMV>8e&AH1(vwwKL zAyoa#qx7PYFpO)^NC)N@$=TUKK;R8Ir~BgX0}ts`T27EMeYqJFA9C!0C&`Mv#M_-3 z$o?Z97;5^66zG6$ncmx;?~DD%G$6mdSS#vI`SpwmiE6s4hMKO=dC&3NzML3Z>9T%rc(mLTpL#!o$h2hF2U$;*flxg1bZcuLNV43G$|JLkIb=Hhq8d0#4=}KCH)c)q zp3f-Kc;15Tv`;WpeEuahyK>h^SaBwo-o6`Y-wRMiczCwDuwl=f-to@eNLpVBxf-+&N^iu<6RrnPVC6JAyN@*f8B|52Z=od3&b2+WnIrmTLXyVF zu5alOw}1J(RQLT(rOZ8qr@Uz%Ngvj4v~r3fCAGsQ8k%DsTGP3A8`(ly z9ba(dAaj7?+~8St_opemR}3Uizi9XCwC(P$Yzf`D;TVs->h^Bi>|*e=SoFqf@OZ(b z`~k%1+vp^1y#=`bbs$2s?Myq+HJgfhh<)vlH9#g^%rRtKT7{GQ*VzrR1+MFo5|wI9 z!~N|yQ410E^GSu0pA#~abpx%%#f}tH(@LoNfasEH+&KQQiRSyMiA;EU-%!j4$$-VR zf4CO+rz@^UAa)GWou+HIb^vSP#~9+6og+J!=^=&YW+B_I;>@0IN+~O|SLzF5S4-Ya z6p%tTnc26XxUMXRyvd26j`L_+*K6 z!oIfid-;o~1uUynz!{wKV9LcZDQEG!1gcal(Ymr+=M`!E6M43%O4GN8eDr%Aa=pUw zhuOsG%r3c)wmUO@m=efxFH7VW(g-YXX;Mt&k1k;S zrq(?ikFt!AF6q&8wL7whsUK;mJf5;R{nKgp|HD+jPQbo#MHt`Se&ogniMQ>2?M1NM zAH-8%hZyuz+Os^!tEZa2G429IigP#k5DXF8>3dC$>Ugi}_JX%_SMiw(F)c(}*pr}I z&#vjwE9PFbem8+uNzE8&1lya>Li1>`vd{3ikMenq(hTk;OVC&JyD+g6F(EIgf~B~X zgh|3zncRf|2g-X&!tcdxYXSy?*_bEefaYn#V_A6<&)Ztuy^TZL?z)!ZCwkVJR-S6X zhe;pl(6%m-Qhs;q`Xe%_vG%Pqb zyEn>`x!v;Bx#ZH`Gv@`=iGTUUoX4lo*u!TTi1^(ixcL>+nJauY;Obvn=Lv5Os#O3g z4WRfmHZLQN2}t6w`R?$omi%zuHqV`1k7E)1G$@!YhR9!ap)wy+RI=DXuGIg50vjrd zoO2P5X-Td+%U%p&M%U9`$WV8^ge!E*`#yki8KXI(!g$GpFMSruUN)E-an^V`#nipo^q|6!~`#min+cfb>1K&TcX4%TXQJ%Bp_pYoabtW zFrV3-=0HV3>UvARM2pTbPy)`lV6-^a#ia!mZ#hI_YEq{WmO6*04!3G*P z4g>aD)a_$#f2IE7GTi)_Ezl&`>}pI2#&3loW{Hsul9KML#BhvmXW>w!$(eKjdNLVNtWlk5#|pdkoL{69`Yge z#?s6C!r5`wZzuDR*X8P!qN0ov{MPqts`8PaFZfWM~l88k5x zX6SXR?O*A+sF+s0oZGj;;+2ocIsbZ-h@x{vn9e?I*x82!>qfHszdLE3yixuZlrl{-!5|t=pSy-f4Q!=H}v73S9bs6%Pn@gw7wAcD&gRW4Yl~hwUwzDZ4ye^Li6%Tr0yZZ}$WvQ;XX2S%I$~ z^f$GV9-Il%Z>QcI`TWR3VR$4Z$L*n3AmkLjRkCHychFRK5@n$zUn|uCJg^ zt|;PBXrafjbx!fsn7$Yr2*haHJrGUL`o0zOZTnswNISk*f>V^EK?0RFU-(rC+HhH< zOemhE-r9-cP`2xVWW{u#BrTi>z@h}u=qbPZpp=`fnhL;xXEWwqaUGZgPV7Yzr!Ry$HyhVeEArBOp{h# zLW|wc2}93C8CAC{(Z54GhpC=liZJ@8aLu17A1L*|<|tm_6Bui$x~@~fJ1z1k!AD^? z$Y`p{wvXiAymIuFW_+LiIifDjW6FEM-Di(wpdd}=%qB(vKzTJs16Jfx4aG3!H7M}< zCGbZ)LYU;P@>o7qFRjI!hx#y~k5a!3`A?ReMhFkU*AHCTBHY=NJpm4ZUm(7PU&^;j zr!!W7*@~Q*dfiB=YTXhsvPJ6vvW@Lwlh2h#y(INK;aUmCLDp2%!}pt&`1pV^7}#AA z_n3UM;QeQu5zK(-ng%t$eV5r)^>fENx?SPe=_7KhCIUT={cE2^I#G{=F}3ra>+y|& z!s2B@-<*Wyxoq=ln+5KUBt zL&ulT&Kt%-%NpWuzI!E?54&sK5-pnJ;k1s4RD_J?PqT-yDcoN6S<_D!aYv>0P63X zs3RM6s?dUd%2|g_-(+pu{`;j_X$fU9t8a_SLe<8~_=?`_o+F`jNS@z?)hwA579Umn z%))@16+hQs{BW@i2R)j#BK^oAQmvNRINW?#LHeHN1C3b|B~neBvONaH&Xs4rMpOc! zZaTIT%x1NI9edLE>rAsIujBGqjXKJ&l%tB(oAm(93*2@}rOZr(!DD6q}3^9#hhkg|T`JZiyDM$=u@jx$H2~FCiE~-4srL zH$!(>`E#+&WvsSC|L{s!Wps2h#pL$_A7K}GUwA^D8oS-FoUX9)%cQLQp;}<+kM0L; zy+Tua5hU%+_~WN#lIoTb?3?X+tz5cYP{tbQ?(UEw8MgDfzNTRH(tP?2*1TG7gzd`1 zzIlaO#W+S{qV9=>5%{l+m$(sWkY$;Iw^X1FC*7Ees>zu+Nd-}g->L z6@KymWyUr3dlO=l^P*FLAAzi@dGauQJ6GvZu7k4(XJ>yp%J#N*mVtOM`WjR8+o^;y%~p8F-rHq_D}=a>irzi4Q+ds-Xb41loow(`FE6Bqh_^Yg$Bwp z+3uSv1tmDu9aXHurKspJTy_PHICRvDJBnRF~-;z*wb{ds3=E z_Wt?ukD$^gmd@!|A7B!>`ZaLHT?2z>C92fF_k|Yw;WuoOQ%_>N|35R9N1sM`P(?Z^ zbmv*NgqGGXmOX<}?$^_>M)QlFC-)_9Es}kQH}W zcg!mN0I25<9(@Crs*gfeD+FN zOxstDYEez?{@=Z7LiXn`B{j9pAN zAvnXAgjzT_Q+l>7T!(PF1xEZfSj;KWtB(U3M4y8Xk|G8#ukZ*zxzIg_65;4()?mEY ze(c&PIEpM+NZ4mGLWk-;Dn`fk_|-9#7j3`e7!pZhd)BgEHRG3t9&QTAoTS;W60AJX9X?;GySpXfy9rdJspHknj#7J+{ zF#Wx!Rxe0T=3U+?4$CPE=glf~J}Bv4%WJOV7+<-p%3eOL4vk;4R1~1z;yTU@>`dM( z_Nn&YSax#k=!FN{j+iX1s?P^A* z)(!q;R~)FL&D<+HmiQl*kmLwVzqH=u_wNSsr$*o1f$0j9z4@o=_41MnT8VW>wQ#?x zlW$d&&MM}ajT*~0!P~!Jbln&pkSR#>Q%dV(2*HmFd$V^1nlCR) zCw4?!@~BD_LPwn)sg~r1jbaWs3ALIijEBdW+2+;0E#Qb!o~Sya@==?3_=@BgcbDg8 zH!oD-D)Wl!rzR$4mWBvYYrQbYXo#@+uw0fbt(wU4;>tFGRVHtN`HmDz>>_=tl4E9N z;JTw3JErPaxQMe~htC&S*je4eFH;f(AnSX(M>kNVbUh5h=i4=8XQYbSAJEaclB{Ze zI7lx>BRRR<3s8^1Y-eulc09g05G-~wrOx8t<)l}CiJE#jTy&wATB?LGO+nsF87-95veW zpzh|~U0dkW|0`yUw0U2azGLNK|IS|uyP4G`K4^=y);a<32HpJB^kU>OZ7Rvt+F%$3 z!pr!mqg$Z3S$dOPdDOuq6+eOAsq{OFOic7>39zd1S`4MTFI)0fy)o|Dgzy#R_kffM zV8y*8=>8wgXrGW%1^)-ilp{r|JdN9WFRfB>55c|N7Vjw%OZ8!E%e;`jLjq#XyVKw0HPwjWv&ciS@_e;NnT0X7#IH|4quxO7L zfLj^V-;(=1Q8Vek=vK?hfF0#s9y@KOg>_)AJ3#z>zs&NW*$p?HDL(;m@fEonJBiKNj z&iOm+P;>^w*7Z>UCO5FwqAop!*>d+iv6s>EC!NCluk!z}yYeS{#?o!GHEj%Arr2$Y zUCh#lhg8Vi=>-w&qr^lSZ!tifIs&fi2whPSZ$DNYi)rw~G>RWSGxc0b*o_xF%UlU| zn+;<5oiw|hLouEvk_RNX^mmiAF%3D-+XE$!bo*k~``LYvO0$Nqw8*^rKW>}XW5PzJ zBDgGbsEo^HNBs{%E--1Yb-GIUH?qK@Z&&GN%5MAEjVX^u%j8#UNxJSSOA@1pCSuv4 z`6I899)Sr3XOfU%Ho+XZ>nxJ1)Jt15J3mc~j#Ac|;39}5jhLi|Yy86lryz&2XcgQxN{-yrbvz*gyUfd2_y;F zB0KNx9obR4`@PX@UcTrQ#N^#GEgERx0K3T9*;b2w`gvn_0x$%*6C9PM?09{{J`=AO zI77OAF+t=PqnW>7Q%tY{VcnV402_RWzc~{;9mkEp=n$Lc<><_uXH`z_$uvRxIha_rrmggdl z=CdUNwokZlJl$~j#6N&D@B)AD-TIH*Ag14qBu;qfr<^M1@gu&h*S)EOu5TB_&I5Mp z9qKDi9zWv~%fkCFWA6-T^99b`Piw;a4Vf4P2WMav(s$7Bgq5LD0Y7sQYgYmTe9=jW9i5*_vGJw#kQdu!tG{s99)cl5N3>8J^k%{}TGTO^xWLtaMB>PdN_}M8>ub^@CBjwY7Vq;P9*X^hh!y7+4++ zMfTKV8tglpjSf%Ok$G}HZa%9pjCE)IT~#J@n}c5PNRiZ5oo9dj+i38J|CPt}P4FvByi7q8-XAabZ+eKLQR75W4#C0GaSR z^#8uCAgq#^&-&PIJLs(3ak8?0%Jr0LsSB8O9$$Y&>Ni&rdT7yulZaGr($NoF`uY#a z4E_K=4#^MU!Hn?y)?`-Jk@DV-@ve$j-|0;`VFFAM3j9CcFOL))c%A6>0_dHOWaI~o z^nr;C)V66k-n6jPtN9cSwhChOnsB#W^)J7p!k;+*t)zm)u*p2@k<4aN;<~tc0VpGx z;NOn5q7GY7+_(;F3sIA$4kpO?u{XRwriVOPW3w)UcN!5k8(k*LaWl*)HrGn$eP^bExE|!u;UcuI&j4g*Qb#xXIlXAG0k_)y7DCGUis>3)B_E0DzEP~a-(Pph9(*P$8DxIdJhtu>_&<23VEu+(HcO`|%WIdnS> zAb`xUZos?1MHoE0jMlb#K4}jwUj2_91YuRpWEi|BonxU}RqB&Am{S$pL54$VOQ8|M zF0NS)o3>PT7tpL~mh^w(UDZjuCb^tH)0BV43t{+MG1_9cOY0R$mywPZ6;z|rEjcgp z%nkV8VjpD99U9omYtyJwsgK|ics`uAA}nKI=Y-IuWQW?3d6?gR?13+;6DG4E)=Xjy z@;&#;4Rsa|+^!Uvn8!T4IP7(_R^Yh>p(bi|t2?B8xgR#c>sZ->5!tshHc6}Rzx1F1=(1`xO0)QETt`&TF zi@C{Td$SEp)*U1c{tnsymTlR@y)$D!+Jq(0ZhfPl@a8=xi0lo59RKg2sst6h*tObF zg|+)50aBto&R!9(jc_S>5jA`bfErvpU_!P zM5@?LzS_~S#B&PR!zNehtgZ^nYogE0R|Gba-!7nv$_`;0aOdVBr#}g@a@1^V40RCQ`R%sZOM@J15A$ZS2-xn%BxzAcgX4XfalB=8OevnNhrV zg#i#0RfjWR%7|I zJvzqtEfZI#8aOUgL`1ekDw}u;tx2)kO0BF84I6)a;jEr|4QhukuGa+(=|}XGN{gYJ z`P?1+_B-^p=#*m2RGL3yb^K0`zczR<%I0ILe>IQ|{rmNJNbJmU$(zwFmJzaRU|_I| z%SF)bbxv$fgfdzV)Vgs}c0UuXe9iE8!AEbM*pIX<>2__T?Z42QxypYFvpZSiKLjT! z5f0Fo*z2a%LADHDY~HhBy9+d6zd6~>^HzD}EjS9^h1i;ASwD!WTg4WWxSt_{F7X)s z7rKFks7>!01mqQe_6(1Bn;y+%1mm&Hy_*r9-zIWhG>d@h=aF!(3y5Rzk|h7n=|e~^ z=`DtO(Z!q|%C%y??g&INS~LbTn%K*r-NUv<6`i&;xc@5HUJVje2e8M8=sT{?0e&gu zRa){E-Q4(Nh&2bRwvnYWcj}z{^8q>%jtMmU{8#X~@1uLib=>S$6z>iT51S&te)U}9 zl?&`<9@`|=Nki{^^CDchRnDgA;bUlOc_HRn;zg+%8wKYv#nxAHnwTwPhGNgE*NvRy zh0u++YyJlOF-$kCZ!lbM^m3Yjy5NkUeKF{Jec-`AXu8gmH(R;>j>7KKok&dHDUKVH z6Ui4gw`B;uF)w52g!uXA!heYAn5p0V*POi>RCR*1b3*MBhCW4Q^)-%CDfqGFfe0ba z)O$5b$^r4Ktvdj?HKv6Y{05<^LXaUrLtFF=?>yy2HRo@Vi7%m+>CFK+TSzGs;I~+5 z{Hwb?GyD&E37c@l)(7_kZC&A~e`r-2DT7jg^_br=pvQCE#8M6n5x$Q>u!uWPSuK|Z z{bl=agXz+9y}qS&fA?`R@j=E^i5C?wc`USS_$MA4@C(|HtSQUc)&w84qZS6HYI58Q z{N8#Q=XZu0{^nXiVL(V%8ZQ$4aZ}sTG7v=@{>cbB^yg`{y@x~q=RId1$t}1fNAzKx zfYZcmL5fRVoA#e~Z(@{emMxUTghgz_X-gXzSlhAaWwdTGJ!+^vPp)L-nkhT*v}bgt zd99n$*v0vmo@#+?;!+v@d)?8qUut(x-X!Zx*;zX4mO$Hy`T;rj2%fEB5mH+kYoxs2`T>km^hiK0pib^O=7d@tIG=p(; zAk5g|m^u0%4(|W?5^9cFiYAMrQ8Sx6&X^D-R=n*b!@SDI;u1(S1!Q_hIZKUmXu!j3 ze>YzScYU9Tjpr&t#8Y`2W~Et2@u*rLE@D~FXbG1!BM~lD5->iXaB*OPcfNsz71vm` z@Z2ks{jR0CpR~J>b@w~GQL!OnCZ*PSx<}womRkOtb{2ePtJv8_r3LSve}s9iW%@3d z@eXDsYK7Xgail|(=`WoP+p|^%@1<+E41+8koKFZA_Gk~kmMA^`$5*0Zv9u(Douv*z zXP0g^6e%V2KkTO0xLC)5Z71(%^GCh2uVXRmFeBIISu=d%0lq5hGx!wCA&ua&f=b+b z2kC0G%k$02v5d-R5iE>+>+9oddVh@q)FASSDoTcEN7b@yV(r7$qMH4w85- z#I$kYeqbAei=M3p47|K_+^4nHowr1GfJU-Xc1LF3iViwtC#7KD9MsMrlBFS1^!bzF zls8^w+I0NEcpEc5TFZFbVxh+FTvQRwx|xyPNI@F?xAilc{59B{N_TT#XTz+Gn&GH} zold*Y=6tW_$>14nh6LxONGRUUWA)4A!1P}6P4MhnMH4Esu9ss?nTO>*7WeeF-qs&I z@@aOPq(Q!1Qq6v&svJraKG@>5MVdzBu%W49lr9Q_c9soG^zha`#Fxp zuP?T~pyDd;aQ*D}b?hVVY?cMN)~oxEz#s3&@9&8b&*IHeDcTxnx|&mrV4^%O)(DP! z9k*O2Wa%|W~grO~H9rHf9dFtuI3%1w?u(-WoB)nL&X)n*yr=JZRgh%MO zrO92uHil|wGK*g%tr1SG5m&U_cyR6DLu-SMY#CwADy5-re}ZIm&#jWk2hwk@rq%J^ z;%hp%wHmiF2un0=@{kt>2MXo_qFDenKy z<0>Ry`760;gFGRADx7Qppi@CE8Dg5mL=L5o#w3Mt7un>gV5iSXq%rqGuDrZhJciBCCiSA4iFY`0}HEV(h~nH8tBbiaTVs<>?JT_* ze@KMaY%6tMjc35XV}Y48+it7xA-*|k|J$4RAJ;pizY*NtrAi0`^LwJ7GZAB~Icihi zmGHXb$Tx^XmnY(Xq8`k@bkL+4|i5*~Vy&E@NVx?+9NCsuPbX z9Im_LdI^!{`X%I$(j$~DLaN*_T8i$}+r0V~>rPrN_~REebcdN%Y*a}fX!|6)75v*j zydm3QAV%SAn`m~zqH(Wk_L?W5rYNLKLUbZ0%JVPX!G zlVf~1N-Y@+oVl-TNX>z@6v$sGJbSq#;%9lFziyf552A%G?hL^?rh;$Pb@{uhZn~wV z#(7OKGtI#$ZmNJrN?uO!?AP-Uq_gsu*7_u@C7N*qL{w;zUf?#D@aIIz!B>;~ z)K|c@ErQ{PpKvzOFh~=trs3cAu+rs$h-!`?2m8UvFk+XKF#SMMKxZBs?69a4-J5S? zQ+?|jeSMw%gKOjQ(JW4!W=9h>asL6mtx97w-_ z-vxb7?#q!k@G+QgvASY1E`0S#iLtlJaWk_;N?k46Qx%#tCe7Mm808-uDu-U3g?glS zK}VNEytv-Fk-MS$j$8Vc?UjrA|Hmu#zy0Wt2AJ75lV{VP6I>>*qn{`czx89u(-^4G zDq_Dj1hM{VotL|>q^3j=phqs9pY@TbZ0CyxR{lcl)UZTn3^Uno9$zdIg;G8^8c&nq z@Vo*Ku-p$8Ie{E5Yv7V)ib29|+|m@nLRuaY`V>b){nD^#SHYif%iH?>XwUzM6b4O) zK5Sawm9bZ9A|i!IEXcg~dUabA(knJSC(ekS4h`-4TXf5b*e^(TlY0oGSpaWVa2B}; zdaIgKKjc~^d0qBA{E>Sea2(}q;y=LK{OKN5bwcd{a`ybJJTH$Z=ea3}#OF zb3Enibnm=g;ac{+IA)x@N#|wiGw1J2bcHvs514XZ|GTPsB7iudeC6l;7Oq+>M}n%K zSMJL?a~ls!4${p*vK~D;mscE~U(U)Az))hgd!!+Md|U?fL1FRaLQNpVnU^4nK5NN2LFp>=6;7GVcF74=?m1_b1OliQ4Zou1Gx7fQ1iHWH-Yy&1qV zG#f_nSgC63_~STQH|5_nx^=!gy0nM~Rx^QgPzK4b6ZcmeEN{qwq08D<3gnxOIE&)5 zwze8EB4app221zHEHy0O)Q)N;V-Isn66t1Xi#Ymy#Ad@;_FxJIpXT04FUOA{5WLn< z(ymmgju8{}>&>+v?&X_BWSUEbpBIxDnq0ys=Zvw9luawZsTR(nJHpqa6!mGsbBu3Y zwvj7AQCfl-ycF?uV)El(|3rvg;(0d71;r%6hb@Ssx2ffO{zx2`XCi6l#ed(X8Jc(H z4;R2c_NR{Gz%AdEm0S+*);^_Ja9qS8&nnzs?T;NKU2L=q)24B$>Y9mB6^Qo2}L>#%; zp#-w}s=~luj-{@+(dpo{l;V~$!%DiE5`^1A?(Rp%bgi?kbwM6(=@Xr$Is)6v&DSeL zJ@;s4u97=#mqMH<1rUDEC2^?^NExvC`=XhL1FsDC}>k?=>R&c%pWsy5mcFqGh-*H@%LT2eREF0)o*RMzHBcaA_&FB+&*{+5%B{p*L zJ==WmjU|Z}FhB|O-_6`o8jSS3eG! z{$Hc6f1Gz}GAU;gL+OPs7)7Px2g5iY$hw7vetnih5n>v(1MT4cGAgX+r_VSNPr z(Wmj4mhF)o~?O&8YxAT$|gv4^3Mlv&Ak~63+}OdX|)q&-)*>V zP(CpHtOoRP0ir9QFXX2=((RBp$Qrbwm$pCd_C@Y1um_@=!=3h@)ibkk?%DItuLK_k z>h3B&S)vfe9?!5hnf_WKK=K=9Nuo9WvWX16syEL?ThUAA;O71ted)Mhe`w$ZREqKU zx)HBym5OI}=oL=qMjKT9X{zW%@1rj9kBoN1e?D==dIssSW?6!L6$w3Sq*O1l<7H^W zuh7ZMAxwV7s?im%0*Pc<<<`|!iO?O3pa=Hi#OTJL)T+J?!Deoo zUcvy&4C0(YT9{qk(%b1!^YwH`CZrXREb)6(zn8YvI2ek1Dn5|JP4!(fL#@{IuUDJ2DzW<%3@xN>5XyS7RjU(`@~7u=b5r1Q=b$@R?@)~>wcl4EYgwISX9!x=%p706eDGxl`{%~s;4up#oYXQ z-#G4Van&>1}ZgqQ16)cUlZX8#``tSg#xXWkpQD6ygy1K=idNJ`tvtiqjP}>m8J`% zf(ioL)~p!#L5&@wpDrLWC+hK6@o%E)U*Ky;5{Owh%_x>G^34gwD}wY5&`leGc!%V| zL%lBUzWgn)cr<TvMiEAS>}KxhlObWRsuP zzDbyVug2;BIIqq@;)Pe&4&oel7x^nMqeZ0Q1?b-ehQp_a#z~`1S1XuiFli@SRQCSE zohd>y*%#s22(QzieJ=@6E!QFO`p3pYh0cjzZZ}tyLLDT~IDT26U|{=V$yUZlsQV06$kS>LnA2W*cKZ zIAghFxnP$J-7E92691#`v4J8E+tO^wJ2LrdeBN#~-EQK1qa447M}8(f6-Dx?iAwkh9V8*|R{k+ju%x zR#pn<{Nip|Y|q@h3P)L*K0;WlNONC3X>mxRnqs0Mcv-6X4>n8t7N?tf1|Jx&Y`cp6g&?u^1Vu05vP6GUA z^}9WHk==3uzCO4{j4|M8jVyh3IOTRZm&OB6C7shDD7z&<-^f(*XfX~+#O`|TzTHNe zsG1@cU)6tX;d4-AYFz6$Iq%lZ=4EtLp8>U(-2KjpY$0qK{^rKq1*Bjqn$8Yf@`a0O zPSY@wHLRW^noD6U&OCYP$KWMEXiwYccsN66(|5cvL7rOji;>r~=MtbC%M(a|yYK^z zB1bJ-w^eT0=(8OK$J)bJX^uV12k|`5$n8<0N#*sZdVv| zDragT9mivOw5!_#FtWuvF$*~~FJQMOa;4D8(kBGjMs^Iz-O)+y(LWI8|9IE`|9&hN zBjfLMR?+jYEDCV_Lg{JIU8?t0#L_Z?=Q=X6yp|N1WD!kMg8|9<9x{wi-0G43mFo-V zBxXUDwwBsIoGQ| z_QqsmBP(x9n4ZK??d>3W9u%84-Z+%MTEHY{nZq7&9MydM0duq2{VM|9cF$)rGlyCE zoe885AiNg5N7zD`O70J~`@IqL`4Q<9J0^&`+*n<$djvXP!1V+Wuqy%lx%P5r7$~5x z06LpPBBwVYa1-{Zl<5uYmZY@;b(w;bF&CLYi;JV0%G0G&XNPc{G(QKxa}NUeA^E$$ zod8N#;Ryhja}UGYv=?fUOP_vIMy~Ein?Je{5F>Yn-%VXPIqrCTf231FXc?d!-;^Eu zdWW$0p&Ou>+=^^Dn-@H5GK-xAq^)cm4PsliLj`$g0Cg*0$^7Ue*1!|DB|t`4KrrwK zlu%UKP{_y$z_n&Lu5D7m)8M4mr(c^E*tU3zj8i>7o~B9vx_#Gz6rlI@-4PRHiVP|_ zF~XqzhEz3y0@31kfw+D?X(p(&)}#D|@~^_f)u8G4R$of#G2*43%<2;gOQVJ7mg7;c zhh^2-y`aC@_?`wti}-0f1m$X|rt;6$|5Ca&fmJVYFu@ByL=-Z&JlTE6Gg~1sX};-r zV<ddJ?|v=1MCFxl5(mU5h`S(4HwthDD#YkN2u zg&2eT%1U`CcolGSUAGd1`jnjlwmH->FR;-x3QQG{XqN>X6!ieK+LxYEeRa0^k5u*tM&P?OIgF?#V6Hm)Z$~hcVDVRLZ>>|AI3( z-B!K#tuD-qCXlit%Y!M2FlLiKDe<3X)c>}ZH6|5wP^+)7Int5#>4iU>%YjX6FSK!} zxZPLAGa~L_I@n+WNlpTlJAIqKVjk`5UDq6jyD{3tu&x7Odh21NIqKJ2$(gN3U9IAD zch+Jrq0jUM&ay7A$JmbzSP1y*MzuNU6RjVP5Z=|U-oLzYdJs8!ESbZ^xyC`e=FutvUd~{;2 z)1;Pc<9J;>-t=_TCJ~@z<6W{-hx+=Q6XZ17(*b$N;{!=R&aozA_fwo7yh7c7O-pnc zki4^OW^Zg|sy#X1Nb}0PqZog_F2nWF{LL+zr&nE7`Ll1{{PE@@QPH)L_{_I&OD(9$ zuAI3F7yFDG8^7wLr#IHnWYiy_zxb%~?xSz37v!zOf`053ZIO?Tj!xrdaLZI8F8D(s z|Kn7tgA%O_D5mHrC(@vr#}9}c@xmrM5xQNf<{4LTGf%plGpNh?`()DYTNkh0{EHvGBjPYO+mLjoTPrH9 zRdn26I+@)#NYv84mq0$Xyh~BDicJ~en^rOPeQG*7Mtz+6TJ`GX;Fq6RNu9N znz%;ihF<^&5=KVcPMS0Q=jggG8XZG3;Tq>HbM|Bq9&8Ng0ngsvrTuJ&osxWC^ z&ms=3jB7o$(-$oA#>SC9adI3+AD-LoE@Rk#vj zSRAHEA?X{VXjR1Rpm}TPvEi7e#erM(&MYY1TBz&uGzPUlF|E3vPWJ}^Vt$6e1R&C~a6+HbGV zkOELLl4VZd*XID1jjOf10nX)Hj+H;S<`+gv)dO~`l@Q>~I?hxG>et-X*`{X+cJ&P_ z!n!wU4n`HJYA{i*Z6c2GdwykZUts!s;^SQ*hq2=8-hdqI=X7NFdTFDY+KsylFhKYT zznh5o_^okMYT}0^@I{tM_pJ)|0g;<@$IWLP{|{+z9TnyJy$>5GA|fKvrP3|ZQVP-~ zARR+@cMXV=Qc{wFNOw03F@$u_(BpvQ&P-o)VdF4{h(>iA69fk92q$qWH^ydXotYm>$DR|TNr?pTdZmMKOOwn9Y zE=(LBv^XjJGVYAQ-&`GkvOIZRP51iNe|d^T0&pt7iSwPTg~>Gz-UG%mM-q#->sNV( zkx>Mfo8?zxl(-vps_eJl&`jUCLr)~L^t5hz?h)x2m6R;}khQ3>bcYz)=r?aYU+{Xo zZoN7}ZS73z2`+y(!N)^9b)C>>Ou;lSMKR2sDY#(h%J}CExfjz~t*w^ZwW8_7IvaUL zpV#R*PJS-tcr8$v{m$??6xsE|c)gim(Ahn7tbEx==puA5FdPiJ!oahrH_s0^?_tyU zI!+mfv&VK5Y3dP_Ht+WV?-B}yBELu&5E$&oCI%|{8>#h_I09sO zD4lx8Ok3kr9;?`F!z>+m@JslV=ThW_ijtxaP?n{h8{ki&yYUQK?o~u$b<^BLB&nzO zsoU@CO!9jKG?$G-qA;)K(ct#F;r=UREb(gx&aIO(Uu~}cbV9zgtpP^_)wv(#)ZFW` zykY*_2T>39k2)H)Q_#N2!IJv*#}cfk5-djTp2|FBGaTfn{oTV=ckS#hqeH1%Vte7e z^xYvhGo)!y?d|f16;+3ak0-?O6s_ki?dQG_9gZ@%-vATz+n1&m>&1W!{A4g-(d2TABj~*6%8)@QTv~M;$Y*_THxHN8s3%RT)_}fl}5i$mI`t9M? z;2C*6R(g^ubUa$V-H2L2CLEpbLh%nNDN+Y~KfzOMN~gI=B5lfAG!SXEfxxBedF%tE zK*SMX9C3&v$*p6_m|H$sMvEhQHrtg@sBFf1#IUz0`+t0S8w!TE81i-)m(umOQ|!bl z`jzd+234%GzTAV|K{qqckB^VdJsKhWQO);$Qh4`AD6N4cjMnwj#4l?_3l5>4@&x0SAJKU2X znIUoN9-g+mAV5pzY!c0d4FN_t(UXka(~>UhrO z)3KEeh>Q!Q*?-7=0sWzOZ}8Zk(KEfQ4l^8cvJ+Bon9J*JrVwEg`yWC(kQRiISf+sg zm*t2g5>@-4N5Sj1AS9i##KB}AEHbvDT3#a$vI@SzcbN1VEU;Pn(eH5~maUeRtd)8d znqWQ&iK)5$!#O||)IAU!3CY%#S=D^|{DZ20GEwk->%^v3HH~6 z+Jmnycfxg0Q`SW#rlpph41rz;)HZ|tpQ_9U<+gWs9qSiAv&IfzLm@`an~3tm891bt zF;Lyfh2;KGq*kTI3?_PTw}CUY)pSsv_4|Ojrm~8PSV=hMDfw6j1dmnk^Gkxw&XQpXWOm8yfD)3%_|Hv>H*2c{^F23-+xKMOaVr=24iv0 z(QoN(m)<a%N|Fm=nBVo1S8d8Ia>#k9XsFwr*o|Pg|g>(4mkk zvmm28j*A>XQD2!FMWbdKMfuP_Gisd_KuX82OLi6OCcD2ETGWmt?men%RV8#ylmJP6 zx+^tYeJCiEqsS69EF)o1H+ZH^-beVYF`7V#O&@xXFOgR z`o>!0P~LtQ*-5BmIbbsH23M?b@Lft>7xWj{ZM*H_kt4cOHN0T7|GT$@H_g+Sw-w+* z>Ui@WEShq+!gL*4UYK-0@Sr%VUy8yFp>o$s;-w$~nA(GD_#q6K(m-W72MI0&ms83`Qf3j}?<_mt|L;rN!g1HhrLb zbxQLxDPiwE*euBCtv>o0jZk5VE>3cK^t-iw&(LYm=m(C=PhDnGCAD6UHawMxU!BD1 z3g@*Zb9l>nR2SVYYM_E)EMG~fMsiT3YM!DZ9egFGT*no2hUn$L1_Bq1R|{u&tyrjT zVYlplFYo7QqNBmb7d?5me>`Opjo!rf*>14#Y{xxv^T?THR?7_rX4rXVMO~LUZR-Yp z7tU>jg4AI2s3Sl?%JAFTpKMx)jblCvqW6x0O=9=T*{| z+O+FbU77(Y&8>M4A52G?>5tDWofkhA6+7DPO6S(<;c1R8{}|*sG{@pP7-DMZ>skY$z4*>af+$vt~vKZ`EfTV%U`@ou-EyF&ZPVd8lOeZSg>gct{v ziq(_bwcyMBo8Mi|XIVvP?tLoxg-SAsdRXRvfx<-XhbjBMoCC%O#@0=0=mtsPi|`zt z!s><|MhowUp7@_YX>MJLo=p!EU;T~~BL=2ng_e8nJ>Dz3P9JSI&-xE!8Cw{IR|T6w zuFhJ;f(~K2{MUqRyrP=-k zewhG4AZe;7u5d^x?IkHmeehf0}xB@bbGs^$E71mXgkTY?Eo1<^S=UL z!{OG{?;zY(AIJ7qpx#(Mnaii;s|Ga&ACpYG7NJv@cn;NXY}C&j7Qr*sf`4P8eiYV)^xv`}d&N&Rv|=`1 z!s7U>%8ewod}P#)p7g+x2x|3iM@~8n)6H)6h9)&1#bEQ1V^$u7T^5?7OzYkq{=4xF z+pCx9I>MNov${=}P}x`wovp7BhFGkdBrLYh7wy=(?e3rO`0ky|?#uvqbNp`ExYC*F zZ!EuO11Y?$X&wt+HQT_zALi*tyv&faCg8gNV0`cz6gi=$oIq(CIO8(BdZ)P!Hxk$# znwKlL@I}xguX&fj8WU9x8oEH$*&%wiIZkT6x7dX=p%H2z*da>d->Goyz+nsq=1de- zw%c?B;#5|!ixCW*iS7S{B7r#((tnj4>2z4Wad6M%QismiL$1;*YZPkzOV_yg+Eo+_ zv6Q|#my7-*Gev67r&^2vl5-}QvaM2FYQ;^xTIiF^Q%HWiGMJhea-#6ZYnDPl+WnPi zzE1VqUiPdOy0j^Lv5HPzV}1(TYEOfwKb@|#SWsuuBb>OpK=OyFxrQ4(GaSw_Loy!= zg2SB(nU*Uv6&M4+|`fBS~6MBvD!(b57C%+x1J! zX!c=`CRZ!B%D1!3gvaw9Ab>VN5PlzZ&m30v_cjs$2)5ws`jkD0>zYr|GQ0O11=w75 z;A+t*Z&DXJW%$IC1GmcZqJg*C_x>ZQzR&og`Y>Y4b`|$QEwZ|vi;YoDtH>gu*1)b5 z9y<+7!>Q(ltIxc|+yl_Bi5lK>|pMJ;y@Dbi3}|N`VsS;k;ZApMJ*4>%R2&Bx8G< zE)m|9h+emOZ}@=9X?BaNc+6wNJ5KRb4KP(&KVef3I$mVkT(+7|%!)doVHihlfJ+ZMl)V_P&>~U+-@w zZZ8#YyCXY-kieAg#MUB=o>T19=R&ukG(qHNR`1q8Na2AI82FgV_P4x0YMTDK`jCHl z=cD2ItX7il5@f;J{T!~W_hOu!3b1wkw>+(Nf%Ee&XY>2H%jeE_UoQwp@mDowV3*M^ z@tRkuS9Mk`{D@|kd*sNv#qz~9ht}Y$l%9jSPA147-1yiTocN{1a7^!>DaPs%MXl-q zygHR&X9+VEct^HwEFJMQpufbMSbS1W)wVyF8Q8@M3b6;+b;%HOI51nV!J+wMLgGYD z+5O)yw=z5~4vxKeMMVi?x!%Q{X@Eqdf-HfJbp046F#MvZ*#C==DS>eMQsHKoeX;@{ zx3MUG==zVOSp-o4&J)lF;`AhGtQ%)KcNhbU&@Y3a#2@K$nC&1Skm`(FLn@4 zYrJlULwoy}{^0}LPM-ckRhMN!MESv>P&d$77YBV=?@4 zGxq8cSSXAuTkKA&#S{FhV>dfm#emk!FD4~$)356a?^gjG`F54hDzsChFjji#H^GS5 z*M0euJA<*?^QM6;9~qln=Bs1mp6tr8W##Tr)Ufap)QPScv1{KlE={$45-VUGFTVSs zV?Zhn^fxy$)~OFK**FU>=KxdbNyo>@Et<4YQjM&?KP89Des4W1T(*bmaO3?QT8lTZ ztQkGMDyUFyI@ls*6*p#HO^4<^^aUzH-Tvt##Z81?^bM}tVNdE^wV1nOY zeJLzVSv%((UOvb-8%U<>K*Tp~8u!9uI|~Vbt5E-)2X)d-mZLw240^Qi%7Z@de5vJjV}mUs4<{i>!%*Kp($;#R%l?V1q)5_EcYAm?cBvE$wX&Qe90NzaU!iL6YCsp-)%SE9N@P$s~v$4>gQ{r*jJGl zdwoR1iNLGX{O2!UNtCFf_RgP?Ay(JR*I(AJj|uF|&@ zzlE73VL+P$GHpFm8i25aXYHF>*v&dC@c8FmP#)LT1xh^h^78C^D1>FZzu`8|?c;s| znyMU@EhR}zTz-O+|d8q*T1GZy_EmL~7T_W?d zE=7g?%S52ws1kSr!(I?BNpR7nqua@`|CPqc!m+{X=!+?@@}h{R-5UTY76 za=MHV_ZX*a!G)KpuA{8o;rn{?o8%HT^Fl#&s*2RU;4=# z!ROb9Bf{j?DUN}JQ)Zmo*p**$_x)0p zGC05^JFT1;GtY4Z4b?Re&C6aDIrcU9iy0RCc^lnd1Y9ckTg)SRHPHV817DQY*G-rg zx{!@y2wD~Kz&|}p<{rM+L**|naP^VKW2GwKj}MXUy$2>P(HV<@7Pd=PHL*{0V<)3F zxG)@{>!i{baf_BOCQ9>#jn%}MQM)zT;C{POe7u&44T0NhKAcn|-4Pd0 z2_0Vb%pKRm68Cx7)R|~Y#!YRXkpHc?kB59g_kIn?+X6cY}m`@=Rk`{EP7`M|x~0wa;X9b3v!MpSDky z_||C|*n6!(6v{$Br$}{Xv$?6Cu{7pP<~G{fQASw#=afZ$B0WFne2;GJOL2aXs$|6t zj$uP17gdWI`9duh$^1LJ=}!M*M@G2bj0UFH7EQW;qgdSb&?=Ib3Q-!2e#rUHiCHk>Zpl+dywp)~Zfy>H>PwJ=~&uvbY+TZ{p|XX=u_s}jCI zURccBmsEnm8Bo@3yKcif*0cYe z75tKh%i!-=_=5W0dsKc|h}PL+hAkNFR+-pkoK$DBJpyn6%EY&(1gdB4hp7+NMYpV) z09v*y==S>M{*R0xUbvpi_qjK5!66|~W&eGU5m0y0RQD(SroyCXhR{X}*eX;z$B1Mc z&+T?``ikQ3CI9jHet@%vW55uqmauqAz^i;g8s})X^yZ0xwYZY~V;lVg9$DGX-qwVH zba{MA5x=RBZ9PxTjfB%|$E4ym8tvZBV7&zYl+Y}-tdho^JakLjhZ{{k`KsBwBt?ph)4c*jj=sR%H2vRJaa>VK4fm-=F-rw@K{Bzn#upBpt zIY46aC{#huyz|TPN}5a08!UAPF6AUA5ykbDqQf^&efj#vQQ>`JVrdj?WDC z2a5j?lPIw6$-Ef=IOM;|oK;&<^o40)xBl*0NAyNUaXJ2c#)%Kqp-M?Y9;G}WPvme% zL`j`e!F3!?;>y}rlQ?o5ALI||3MaORd1Mdx0BuCmNB{yCF#0e=dQ!KUmvZ{8vm*OJ zm)7+bN1GFYajl}@?z~$olWxfOmBZ&tWXM5jn%RU7fj?yu+L&+@+AhiGeFE8KJTs?k zXM@vhAI&Fb&3-MPmUi7tALB_v+X(smfNUmz7PMDuMZd%OC0kTvORhBbIpQmZm6zuG z=Lv6V>GPBlv(CUZk~`0CYnmPQu3Hu{e802fnuV9z)G5_&s*6_h_i>yzwKH^0kY~Hw z>&ivl9VY9!4ygY&EiaeEe;znUi`r35a~bk^yG=zoZhVa#kp6pFwGwcCqbyH%0^WPn zyw3e1dh&72=vW@LRZaJT56j?a?9=Vb())02#ChEZJc*0as;i|m$1&L*+yfG}{G3JC z;&Ejm-sa^g6YIUPcByJWu0ROZ4bkGKzgOH%g6UG!(5mdg;3QxRQueZKzaUg$r&LMVASkWoF|{n{q47i z8D6)B6;HUuSrKxo2WvnEB+I2ACO@wT4(l|nD=pz8DTk0!>zM27maHVDOsqHB&$_n! z(t{t`F(r{cPUzE__q3WgT&BA{0lV>ZL$xlfOVqodaDz7XTpUD4(2oXFR?JLGPWI_b z%Qf;<9tBX(uoi?XdX+gJAViLRL|l&iE)7IxdkXgogtn&C?o%|)@OdnM z1E%)eyh+jCSPD3`^NYfq{@ynK+MX7${PY^toOkA78VKB!;v3=N$@f;;A=xF4~9@UTA{o)%P?(Mn(NeJ|WQ3>YI z{QuvmA*-(5v8iM~TkeO$k)_3Tj3tT@v!P?j_iE8*1QSK^ge@LRO5vAXPfN{?RJT0G zsrt#>>QzD6QLFC-$Sh91?5*uj;l02*e$`rpUz1evgE_C&ftM4zVrSC}ZuV7!5mFgM z1WAx}bb4jgc4Lu+5V@1;6i{_dC5I690`fx1e~~mJqS~+o5jgzKA+}QbX+imz?Fv~8YGzra*<4Zz8pl@N$`)7i4O!NqMO z;dh3SbT3}ra`1-6hzKoW6=X$u$q%PB@0B?C_|z}era}X82=^VgPD7y}8YQ8Nt4U)( z7XsP%r5?oKgP*4P_A$<+sBS9r&p%n%&E*g2jbq5uy4-E*=NO(Rx;A1&qbK~@A!mV+ zd@01+tycl*UeYuNupvU&%0M!0YMb}{@|ZuyKb=?%hPqL@Vj#JM4p&GdqY3VX=T5>Bnh&Vo2zN_iORHHrAg+oKkKq}G61jLNUC4jzC zQlyAtecn3tnpn3bb(RHjMnwFn&#cz5BqsRpPo&{>tC9orYGYCZ_lNY|>gA7XmmlVn zrEV=nv;l_5@v22uKYz1p?}X3F??{)`A-vX$tsEmneLw+f2Jq`qC{C?qi}jx%?OGQO zO9`PzLbfzYuhuV+>C;uSamMKL1OK_{qqn>RX@cCsKso99FeI+7wDkxdS<=(eV$s5n zaF%Za{ex%!y&FrJ5(vRV`FXP0RZON!QFl#>cv65F5V3JuTls@CB*UeQ#LPz|%7AuD z9%`!59s4kpme;&~va}F6n9IOi$l!6(P#TrR1!pfg8Z{bafUJk>MLZ2|(kh}5ru!($ z#8;)-%pd^_EhU;9XP|4OA;Ja6aG-6LtSm;q+&X0VJTozoI65XU3ay&l(YP~um)Xvt zW-RRx?ph#TjX9}ECixozL{QwSylcXnSTkCD0!jByJ=-G2HG^C>irK#|fA^U5*-hJ* zV;LFSQDP_U_)Qc-I*{WF8rNz|Qj|uuJlA6&@ zO9l;q;VHaWg&Y^W#5Qz004ovMkSHn@37M|y@W0pv#$y0FX{v3d6T(m7Uq|165UN%M zR&Z^4g}##lmfq$Hvuy@p(dW(0O~#DZx>9^YOz5fw=a=d>^P+&U(jaHnyhfnCPq~dn z8Ew62ee>5?iH0()5T&_<#44F85k+cz+cwmH`tA2}<>87eDO@U5fuvWO+Ap766gC=M z#a4!HvcWZKIpqJca<;Q2N|veVU;9rwBYe{amn_ztYGXqg(de>&uMjV;^E(w^_cI5l z3GFmi263ZBUzJ%5$&lwMBeMTbhp-VG_J(mo=}E3U z*fn11+PCPp73k46Fes-#*>17W09rD@)6bCpOR}I-w+^8w{EYKXW-rU{7HQ{hJ1xgS zsM1zZJpepH{r!&hkV5ZP*{r?{+a0jik!ktBK=%08aFVaXFgjZ7(z710enTBNTX@cQ zL#~K8F6PZXxtS9GF*;0ol=Q(Pd~eaI#t3`%^X{dS(H^ldEyDDly8yU>ls0ph#a2<= zq%z^VokF3h^ zA8ti2pM9`pEk5^~65#p2>huKX?RthZgu`9y>NubbVHIW7!cMXs-;Vv5l>1f)&1vqn zNJP%v0!Ty-ojO9I%giEYhD#GN{2p%{+dl>wt&io1D8puu%tAbTp5Q%sP>fo!`M^}8 zg}xcBAGYDA**D|(_pqrvUjyCu35hxMNJ|@zW*k?NGjPSOBzN$h@4ezW znlW68B(38D3_*P>lytOTi|^-$3#8=aiKdD^AMps63Nz({!%aigF=Nt_!fDfu5ZEJ= zWIuJ6oK&3ej^}x1Z$I(XTl=8;1;#)<@uH8Q{^pVoK0e=QwCBywvZN9AxyXUY5MvzO znk}6syR9~8-&h|w{dmnA1^X_3WV^*Bdp23T()oybH{&-QE0V3$O7#bNFTnDe{{dkr_ZZ}&kxf5+oPdkV5EG%NGCwBceuDCMAFXY zT{_tLFSsZj+x+@VWdDgH|2hB#*x!N*Sc)rW$XH0OKO=k`QDVo}&6B1*?$k22xW?QW z8+7-1vSjK#3CiB&AlAWT#lf*`OfCyp9xP~gdnqSsS|Hh8Fp6*T5YVs(`h?%sjg>{3 zU|ziBuX@RevmO`qaUX?Qqz#T;)|e6}vG=3br_kehaoaL^lFQbXrspls;C`0c=~^k| zm;}_Jtv7D!icV1BZemNX|6t?ksm12-_f9V_B-rJ>Z=+#%fp)8&gu&IdZ-={$!-wZe ztz9fc=w4`G0bylAO^#prNMYS}6YjAe&s+lD0iZ@XRL%WiYwLa=>?r2$Ueh8`nWy#~ zshi1~hw-#b4R-I$GUc(_=dwSo5tvC%^jK%Z7Ox+~3h_Ez{K5luJaM zXYrk0+x6u$ve~ykxB{#xad_1UxYS2k4wvcGWXB*49Ko`Xb<2FgsLm35cEOcjVnt#t z1J=;rjcY}kEh^TLc)j;Ot;wd$WaHipxB0l-^;?)G>ZE)uZ##><_w|_X6uo@n_Z~UH z_1AY-BL7Aym`A(gp2VC6bCrI^LC{7`ov;lI(-ynmW|qwl?a?*02dT1#X^-n&RzThw zqE=&T$}RgDqop^^htj4epRDwZw>}hJqes$Xw+hdl^jx6^C}g2`DQq8cTrLko0Y{DW zn4N<2u+WaQQBg@9F6eBvEaddSC&QL+?SnMU;fmv!&!y3b>&l-OiXYm_)9F;cg3jrfA};j^cMKg#TK8B#25#uLZ+ zUl?S)TYvUrh9sK2pZ&QNWs$BD;@{d87zKzrCS2v#rrnyqZ<=*@k8-xPF5klu~pOdr~P}DjUZbzWmQC*5JJbkz&`W zF4vKEGa5fEtBuk?S?g_CZ@D4h(qXxW&g!W`sAmBc&v#eF5HPj-d7x7(FA+jr@-w^L z#zUA`9l9{&I<;Nb@i?>gt!e_N@ydY!bn$E8lPRehdW8h8%JBw&Vf+crt+|#cj4PYO>ix+b~JK$OZH&;pD-%y$d}VR1HPljy_!1YtSxqk%cPme} zQ%pd$qlB8%hzpgUC)4!+$Aa%6bA_p-WVNxiB4EX5r^*sdKYU|RP*5jY{X1HFo%T+b zWw@k_3kx{e&vjBRq2N*#>4zAiXc4vRyP$E_ zou?m25&}+W--v{DV19f~oJ<%*p1aMcvq zp@~a-ojOCibz6dGeGXJ^m^@7c8mor(yk)Xx^99@-;2_=^haZBj&KtAf9T z=Jv^HM$1HUJ-;g0%HcGgW{0!)5FpSsrW8FJaJ9F_8V~xHVRPQ^C{Rn1%5=El-}Nz} zbe%l-!yC0)XbB(l7}geDwlTm>iBHRzt?;ce_x}z9Yw8Ucomh*_Le_z?pccYZGF)EY zN`)OJ8Li8w7p4ix@2pQdG9#|E(w8PNperYT?0JF=@fq6qa9auzkdG(;T{n20)7)p< z65N&{Umf~J0ReOjz}q}0c)q#X3fyGcLzOYcZ(+uu=YC3r+@)P0O+RaHfi8B1`+TiL z22-GIEr5ovKQs8Z{ls~I>U})fEB7TdMEYloc}#wf+Ku;PZBM zEwp6#{Q^ZQ6ZvpRc2PV!;fcD{iE66r&+cCIDBY(M0a;Bs-bwGtn!O)i&$)^ux*nXv zNwF9AKHlJvRl_DHXR*!Xj1A2!n{#G;%zM!hmh~Gm@`kQ1cU6`2Hh5qoDJ427*hiNP zx9vIn{+j0@^VoJRZLjlEB|iyf5E5xF^(a7M@pcL!Q4myA!CL2dS8&6 zvPNaPMrD=o@#M^_P+kI5rZ(9Z{>NI1IBEXv%HBh^B{i`7G#5WZya85VM|h9wT0t6? zh+M_>KRS@wJQ71Zq4qX(Uqt{Gv(dG2;b%`#4N?5%iZdGHLQls; zAQUDZXWaQpgSa3xl~)AL%d4_8<`6+^%n~Ra$~Y?xvTnCr`$SfwMNo7D)Q@|;u3R&GJ1({WGx0^++h0rzz9bp_5VkI z5lY;!!G}FX%pGb8Uszn8_qbBA!G|Bx6zSU8v4eHRW?}t|=3gm;urwY9aEl#GLvEXl z!#IR?=J@eb%SHE*_(y}+{a(Dz^lGhLt$}TVW4F@;U1l4({z*^&I_Q*BVg)bH z;mj@O++CHeC&}3C3>&l7QcihIfq4ou8~s?@D2d%UDd#}+wMXwA=D8w$C#@RBEt1H91^{xq0Utukp{@F=F)|n zYA=DdWU08B#r#p&mATujugS;X`3X;{W2UUtmEG7BrKB?qF0Ui{l6x%tH?tZvn8J>Z zb6PoFSld7^lJ@`Ufn1Cq1_`um$}4cM*FjI90kzlT)RA5CDJXKZ{$XDq0}NbK`_Q-~ zUicU|T1kH$h->!Nad>lD#Dd>xv2(Xbo&#u^Iocd*&fBh5t3UT>#fxK5+!%Os?Kfg# zR7;T61c4RF3Qx;CyZSp0(wn5&VJmm zG^#TsRCbJ`e?sN9fDf6~#BRmLf3@}@-HZF`WtD{x#oy)Kzb{&)lng&o?$hxL%E&#L z=%V6eP3;<$PcA}|N&w0Eb!~%v%^)3%i4j`mO$8Wja;y_jvLqXeNWt_M`_&Z~a=u?t zrIDWSHGutAhky9>BuX4qAn?r{xZ}n0LD%Q|vmF+OV6sjJ@lth~o!tHx=B&T+MUJXY z+pW_-g(b*TX=G2*w(J(6r*0`06?Ab#FnS^1egf=5fnj?&`pu?0oHM$d|ClkfGO@~$ zo(s)hM(eTkgKpeXrY%vph7EpvU|mKqxW=CePcr{qr|8>d8x=I?B21`JkvMBHQ z0UR<{b=P*T@#IHF2*Am3_+H|I9wh3!OP(Jif9$5sd*JT?>h5hjNXLx~;Vre2rLx!MJFk{cr`t{rvfqAHQkHIY! zc+h9t9rY@JOr~zkVwyxX9*QPtqDv#Q%!tTnC(5M8^2FJrG~a$zYZWxO!ZR|?XzcPuXyyFd&|66BC_{lLbg%K zev3^DRDf@9b13b=AN{F(2Xf|G8!ZVnO9T-ZpcfO}<>oI}Q#*nw+#NpeN8u8)J*Y!C z`P8p&`*g$ujS+y5dw)Dv5#{4eiUE2#{8^h1Xcm@K@qFfaHG{~wYwbJxZ}5E{jAXpO zm@&vd@9W~(+s;{*bAEwn9V)!0Y{wP<=S)jq%r`0` zo9$7Qi%(R8yI5^RZ!` zko2)B2ksk9SO>!%dEBkBC6!xB;`9FH9G*8LFiHR_uGOMTS)09^ZK}>OKYBZHcBA+C z=r39PO|45j9UT!KRxsy{ikV)+ip%{#g5Irqb_qY*IB%h1kHh9}-lK2MJ%}N{8;HK14IKp-#h5Tt{IvEav=@`K#|m6~u+tq?DC4dS%)IIybqa4=oaGELY^)pJ8hs22h0)$ZsB z!iAmz6%X5(Z!=Jn;#arhUO{goB973lUOE!@D0)SAA#ok%sdg|+*4w(a6_Ra;7z4z~ ziuT+bud3z1A6ha3Zr*#awCvEF9|3Rcs!uSCaMi-=5oIux;(5e+!3QSeVrWV*7;9j@ zAriV$D;kv_`gP@fV`+wMi^-D&YP<`c^wBq83%WTlzlq5`OWCNAS%miG*3P;?Xj$vG zEa+XvI?vkH5l3)^9fmKBkM~gJ%TbAIR&%5gCO6YW8#3{T;(jNJO1Vix476~|9zToJJ1ci?=i0Ln9o&o$0P2Ke2BFq zg7nOm9FIJ=zF#4*$IUufdqQ2NJ2~-VQQ+nKx;x>Np%`*;%E5XsgME<&4O@T1?ReQ8TEf&>nvjsG;~ULiLO3DV z$Ox-n--#t?{Lx@%khK7C2VOkU@?jy2IJ_MPZXTnyLS2dd!hB#y# zWQe#(&DQgz-#@`Xqc??GJzCC0ZZ?=WQJq&xbex~!c8eEgIzjRHgYkWLp^*Z&|1~K3 zr*Q69HYBxp`>PyZ&(9!mrZG>Ji=nq1cAKx;nItMG&Tc$WluP1FF1k^)JGR_(&4rI` zCcBF*J(HngOfFKU`hje4*`WmN6^t##NnInum$ELwJ||l3HDyS zwj#*3MJ92uc;i%oeCZ8tUu-Vl`sdnOfN`5XDFC6>8FWx_XWEU`O`L+HBJQy&*;S(9 z5A63U%e5(JyHF)&?$E?HW;~-uUT(TYuY<$t_<(z*BUv20M)#1y>5WS_w`k)MeJ!;; zYQ9vqG9;cV8oV?gAWb;L@$x?w+R{>b$Ep+;ZX(y&;W$SVvt^1cLUr340|!$G)xg19 z1ulue7#qzA@=;FFUcDLHF69Fj5X;AVQ_#;!D?WP8Z1z^MoZxDTj>6Gd%!_mcNSwP+ z_?R_3FD?CSUL!e7oRNP}g^o+@5>?*KyyxbBXV=A^msRO(u)(wFtlwf(cde@|O4LJp zHJ6FSj~5{j#-KW<%%`#ABy4QCXQ#2dMDOJFNYnXu?@Y;W^SQCvNRK0pEiL9&{s=Xo+Dt@|dZyAUM-bBjy(l21R+ z6SdyQOf{A{wv_{lR9oK|2?DM43#bac>(V<<)FmSDs+Rre8C1$=jW}T=H&#?8`jsE7 zO(lOfq5dpElGHmvQg@%e7}CkBSokK&O`eZW9u!S`d$|7kcu$IF*P%W9Cx}&5dND-- zWlqP^=K4yjfsilIK~rf%MQDG7h$NKl$t(~wY}s-*j9dag_UN+l?7JUNdK>8k5r6WH zKCU&)I-e{odqzd*lt3{de!DVdrz*0vbDri~kmX^I_16HN6qi_n#qTZb8{$Ukc_}Pb zgrgncTer2oH7N*)ipz7v*&NW*+m!iwjd6@^`zgC(ty5lkz^O~tHWNEDT zt1eY(S%S)7at_x)bO-CENXN_GJS?)H^WuM@_n!&-Th6c_h+I= z;m1O9Qsy;JskqlahgxR}=>cM+deQbsY{Z=S6Npv`2#dbQZC=h{^vmN-9PqNTk;^>a zMZR^HCWbtgtf6rNmdm+htdM-mK1t3T7fka&XDm=JB6gZbDIzSsTDH+j7gF8-L1a-U zT1LiiS$>ODBsx6$^CJhHw>+g9zRc{HPg)T{0|R|b?2sOpBHJ3VMP3?mCh_9P7-0L< z4N17YRdS^-oi{5b?f>ngRZ`FwH=X4?8PAv;X1S&|eq28hs4(CZ4`YbKG?l>^^Gysx zg$?$$h6yfsK=hr_^VypN&#|GNbKsgGSzcQh*W{9?IQ*vFlLRsInp{$5-{?9WW(BwG zd2mHOA)%@wyAor*)03jhr^E$?nHRr0c4}v|YWTs`ncf%5>7B=(%HdwfVJ2W>U2bdg zeWmwxeNdos{eO=1oguZa7TeQ>*j5-CVA~LMJi}!EVlw9#_*})=#lSc-2360gar)kC zyC`A3t2sv7?5<+_52+V6ueVo<+=)EIsuq|sJzd0fkTd0>*6FbC2Z^=?1>5rO#11DF zcG>6EQVT$z<*ljE@tqVQ5Bt`5E<69n=w9zQ6o_pcVs&0VWfr?VVMf;^rWrRN z=_b7aDE{L_MRQstOnn^S7XrInGU`13y5R$m=}~faoqJ~+KudQ~8cXdmY&L3o-8eFU z^j~X+|A>t;Siyi)Y)|&EsLiKWpy*Z^cax%a3BH%PeDtyn2TLz{*0pM-a$*}@`!&kQ zXYI^Wk=KwamZY<*_NKdj9S7fsuKuMQ(TCVEMgzI{&QCCxib=J5461`^(wJ}NBXsY; zai2R>GgTV1Qiq|l*zK$1t|(G@#8SUSi=(EKf4n;nAv&z#P*qN>yM;yB$)Byn2HzZP zI_wVo=+40b3wDht?y!gdW-;rja`IVLbrI<`P(IZ5ft)2AA`*!>FD|q(>G10G^;VC0 z5}~0}!8&^sok-R;KP<}`ys;|nXQdt5+WKJ}&Kcc=uxhFPitt~k-Y-`E$?DizcX$Z2 zg6yE9s_AyKX?M|iSBfXI^X|Ap+klC7kdGUvpzKM@2_8^bN6zDO(S8p7c}) zv)9eNY+eh(4gw$f`Aq?Bpr!!&*5w=ky$~DnSE@&kA%cc|j}B#f5ei?AJYKMld z-F5TUQu%1L6|$m-8aECw{$IE5)~}}fbR6=}kwVVqcY=Co{C(ffDEzU5UrY3sgs#aa zO_X}G=iKU@BhkUi_H5CCpJ@4jA0E?`AuKPY3=B)=#Mui;Vhk|6IqhlPxCbW1JHBHA zDhN=vN4OmSjA`Q&;Z(o8Mg>4W250`tcx}5e;#99~J zy0kNrqJQ}{xs^t`ar@zaODs-RDP55k1Sy|QcQ=yP_+BjE<-AJ!NB#dZYQgZ3{>4pB zs(y-@F5LP4uSj0A<{?`R!b3BA)Gb=s7ZMm_o}ps#cXqy&$2s#FJInoTvWD6diF=EK zcDC=Oi*Xtt0Nr4p)3Bh@%m)UH=lZR4zm_n@Ic(?-v)W&TdpTaAeryT_?>Pf)KFS)N zY^suvyt~L0M|4oPobVSQ`nr78kF<1dP)$jos5CV#QYv_ghY z1=$B*US7DiwjPFc-r5W0EY`FBmg=uOw^JRH`137Z0=L+!4gM1R)vfKKLwvpFsp*UM z;)4TD1ro7Ds)<+d%uZGqT=XWV?^9H32AiNC<;Ce~`Id%Q!P|aDQpOu*=jr7g*j1MY zOn15o=J}Hq3{2;DYV&niZ-}iHR7vU0vS%TEgtf1{h}7@tUNtJn9V3QCBhC`slxEDd z|3B8=Dyq$Pix#fa7AvK=q=f=4THHyY6ewC+TniL;_fViX!QG3N;_ezCxNDFA!6A4E z7C8C7J@!Awxjei74Oe8q$ooFeT5Ha^=1dEAq?*)HLT)x=X|A{{`fKuQBS$^<%~nUM z3TM5ZGPnm~p|M0s{$YCNtw_Ez^Oe}y8m0R$NmVdhA8qu0RZJ(0gVzMPb45l!9Rxi+ z**j`<&PWMws%5gg{=$J~`(}fx*$Ym!qHf2nCH(ncCE))kefd_y^zQCK@~-8Cjp2Je zmua>;g;Q{TzWFnd$9VKi`Pc+I0OF*puf@GsyP=Z}OZZk3Vl(&#g#ue6VISJ2MM?Z| z=5L-6=Qe399IDkyW{2=Oin6Lz^L(A+S(aSP*O@45Sr+@ziXR)k%NX_r@$hYzthW#6 zl66X?OVQ$bfQMOko9+ZVLa`mO@2XX#{MJYXs_ucqg!$foP;u4$GtYryL|hXeZ%Y6}tK7;%K3hp-Tj9_TMw1-OaVtcZ*l z$MTZn!x8u_#7E{mYUrs(!Z4Zcrejfdz9lX15NKwjhDQ7*$T+=VqcG;pHUrRWDk_J-&5~0;ox5M7X)R z`#sS)V`(2$Icy$x-7Ngq9%7%q-CN@A!R?*8g1e}PrqR}ac_3o& zc1L`CX-EwxC!d)0u-2ux@9Al|w!3=s$CoXw>D!(uT2t|4&C22r-&@#W`m@Q{tK7nb z9hHG}eNV-$+(u=ww{Ca2UR$ddJGbhb1U$$&)hY2S5Z`FR9@F*lPl&UoVZ2FZSlzs& zRhV>Kq0%G}h%X)Q=Ng@nLh@+5=pfH7f<8`7t^)gXcZwnuKRxukd_UcG5T7=Jy_wra z=rp|Bj^3oSZGuJ15tA@%y2SE5$Dmmy!k@SG!DU#}$%Av<;`AFL1wOwRjKH@DGG}hV| z8sm1Ua?#6HMb(PucW<<8C`HNw+X|a~K)X#;=O5V1$+`E9tmTH&g80(#aPcpwY`5nO z8Sm3uf5~ynE6Y@vT0&a7TF!)Y+weI+V7+hmK_+8?`}HC6K^&AR8}3W^EiG5UC7<#^ z`>F9UtK95^Fz=dus>n$_bWH)vcfR3IT*4(Aeq|dCnVNRuob{iSX~d3M+14BW1-Fh? zzNiEE9#y{JF>S3?LGG)QDsib-?bm5;e!+m86m1k(5ZIMrUXX69SDmrlLhhUN&%+al zoQf^~fwieIPl_1Is>%MDL87akk28N}g-?Fvnf(#47(}dE#&mgJ_I^OV8|4Iy)Gr{h zU|l&(mj_cZ5Bv7E1LG3bu)0&tmzS8S_D z*!PLY^N%8+d$y#A7f+j^tfiSF27EM{1~QaPYG%;mpENT?niTnk91v)#Hboz_@JUyz zS{Wex)wJwa1kKc$sCdCBhkHFJPfOH1eIxY~6SPa}=ixY?Nijz-RHmb8T>WmIf9r

P^69~V;UIUJEzE*$m*9}NrP-#({ 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