From 53afc7a803f4c34a33f71b04253af5ee118c46cc Mon Sep 17 00:00:00 2001 From: Lily Shen <115414357+lilyshen0722@users.noreply.github.com> Date: Wed, 16 Sep 2026 06:02:31 -0700 Subject: [PATCH 1/6] feat(catalog): project localized builtin descriptions --- .../integrations/manifestReadiness.test.js | 13 ++++ .../unit/routes/installables.test.js | 14 +++- .../unit/scripts/seed-builtin-tools.test.js | 1 + .../installableCatalogService.test.js | 54 ++++++++++++++++ .../unit/services/toolInstallables.test.js | 4 ++ backend/integrations/manifests.ts | 20 +++++- backend/models/Installable.ts | 18 ++++++ backend/routes/installables.ts | 4 +- backend/scripts/seed-builtin-connectors.ts | 20 ++++-- .../installable/installableCatalogService.ts | 64 +++++++++++++++++-- .../services/installable/toolInstallables.ts | 9 ++- 11 files changed, 205 insertions(+), 16 deletions(-) diff --git a/backend/__tests__/unit/integrations/manifestReadiness.test.js b/backend/__tests__/unit/integrations/manifestReadiness.test.js index 24cd249e2..f4581e99f 100644 --- a/backend/__tests__/unit/integrations/manifestReadiness.test.js +++ b/backend/__tests__/unit/integrations/manifestReadiness.test.js @@ -65,4 +65,17 @@ describe('installable connector manifest readiness', () => { expect(manifests.telegram.catalog.description).toBe('One Telegram chat, one pod.'); expect(manifests.telegram.catalog.description).not.toMatch(/ingest|summar/i); }); + + it('ships the first-party locale copy beside each canonical catalog description', () => { + expect(manifests.telegram.catalog.descriptions).toEqual({ + en: 'One Telegram chat, one pod.', + 'zh-CN': '一个 Telegram 聊天,一个 Pod。', + }); + expect(manifests.slack.catalog.descriptions).toEqual({ + en: 'Your Slack DM, every pod you\'re in.', + 'zh-CN': '你的 Slack 私信,你所在的每个 Pod。', + }); + expect(manifests.discord.catalog.descriptions['zh-CN']).toBe('接入 Discord 频道动态,发布 Pod 摘要。'); + expect(manifests.groupme.catalog.descriptions['zh-CN']).toBe('缓存 GroupMe 消息,汇总进 Pod。'); + }); }); diff --git a/backend/__tests__/unit/routes/installables.test.js b/backend/__tests__/unit/routes/installables.test.js index 1c4845e42..72fc07ce2 100644 --- a/backend/__tests__/unit/routes/installables.test.js +++ b/backend/__tests__/unit/routes/installables.test.js @@ -92,7 +92,19 @@ describe('installable connector routes', () => { expect(res.status).toBe(200); expect(res.body).toEqual({ installables: [{ installationId }] }); - expect(catalogService.catalogFor).toHaveBeenCalledWith('64b64c48c4f37a6b2f34c111'); + expect(catalogService.catalogFor).toHaveBeenCalledWith('64b64c48c4f37a6b2f34c111', 'en'); + }); + + it('passes the caller locale from Accept-Language to the catalog service', async () => { + catalogService.catalogFor.mockResolvedValue({ installables: [] }); + + const res = await request(app) + .get('/api/installables') + .set(auth) + .set('Accept-Language', 'zh-CN,zh;q=0.9,en;q=0.8'); + + expect(res.status).toBe(200); + expect(catalogService.catalogFor).toHaveBeenCalledWith('64b64c48c4f37a6b2f34c111', 'zh-CN,zh;q=0.9,en;q=0.8'); }); it('refuses an unavailable provider before reading a pod or claiming a parent', async () => { diff --git a/backend/__tests__/unit/scripts/seed-builtin-tools.test.js b/backend/__tests__/unit/scripts/seed-builtin-tools.test.js index b5150f331..e0bebeb7d 100644 --- a/backend/__tests__/unit/scripts/seed-builtin-tools.test.js +++ b/backend/__tests__/unit/scripts/seed-builtin-tools.test.js @@ -35,6 +35,7 @@ describe('seed-builtin-tools', () => { const rows = await Installable.find({ installableId: 'github' }).lean(); expect(rows).toHaveLength(1); expect(rows[0].source).toBe('builtin'); + expect(rows[0].descriptions['zh-CN']).toBe('装有 GitHub App 的那个仓库里的 issue 和 pull request,由 Commonly 的代理按 Pod 授权代为调用。'); expect(rows[0].components[0].enabledTools).toEqual(buildGithubToolInstallable().components[0].enabledTools); }); diff --git a/backend/__tests__/unit/services/installableCatalogService.test.js b/backend/__tests__/unit/services/installableCatalogService.test.js index 2c36f8c50..b127ea176 100644 --- a/backend/__tests__/unit/services/installableCatalogService.test.js +++ b/backend/__tests__/unit/services/installableCatalogService.test.js @@ -34,6 +34,10 @@ const githubTool = () => ({ installableId: 'github', name: 'GitHub', description: 'Issues and pull requests.', + descriptions: { + en: 'Issues and pull requests.', + 'zh-CN': '问题和代码审查请求。', + }, components: [{ name: 'commonly-grant-broker', type: 'mcp-server', enabledTools: ['github.list_issues', 'github.create_issue'] }], }); @@ -129,6 +133,53 @@ describe('installable catalog service', () => { expect(Integration.find).not.toHaveBeenCalled(); }); + it('projects first-party descriptions for zh-CN and falls back to canonical English', async () => { + mockInstallables([ + { + installableId: 'telegram', + name: 'Telegram', + source: 'builtin', + description: 'One Telegram chat, one pod.', + descriptions: { + en: 'One Telegram chat, one pod.', + 'zh-CN': '一个 Telegram 聊天,一个 Pod。', + }, + }, + { + installableId: 'slack', + name: 'Slack', + source: 'builtin', + description: 'Your Slack DM, every pod you\'re in.', + descriptions: { en: 'Your Slack DM, every pod you\'re in.' }, + }, + ]); + InstallableInstallation.find.mockReturnValue(lean([])); + + const zh = await catalogFor(userId, 'zh-CN'); + expect(zh.installables.find((entry) => entry.installableId === 'telegram').description) + .toBe('一个 Telegram 聊天,一个 Pod。'); + expect(zh.installables.find((entry) => entry.installableId === 'slack').description) + .toBe('Your Slack DM, every pod you\'re in.'); + + const fr = await catalogFor(userId, 'fr-FR'); + expect(fr.installables.find((entry) => entry.installableId === 'telegram').description) + .toBe('One Telegram chat, one pod.'); + }); + + it('never translates a non-builtin row even when it carries a locale map', async () => { + mockInstallables([], [{ + ...githubTool(), + source: 'marketplace', + descriptions: { en: 'Marketplace English', 'zh-CN': '不应投影' }, + }]); + InstallableInstallation.find.mockReturnValue(lean([])); + Integration.find.mockReturnValue(lean([])); + + const catalog = await catalogFor(userId, 'zh-CN'); + expect(catalog.installables.find((entry) => entry.list === 'tools').description) + .toBe('Issues and pull requests.'); + }); + it('the catalogue returns the GitHub tool Installable with its tools, broker and the caller\'s connections, on the tools list', async () => { process.env.GITHUB_APP_ID = 'app-1'; process.env.GITHUB_APP_PRIVATE_KEY = 'pem'; @@ -162,6 +213,9 @@ describe('installable catalog service', () => { installation: null, integration: null, }); + + const zhTool = (await catalogFor(userId, 'zh-CN')).installables.find((entry) => entry.list === 'tools'); + expect(zhTool.description).toBe('问题和代码审查请求。'); expect(Integration.find).toHaveBeenCalledWith(expect.objectContaining({ type: { $in: ['github-app'] }, createdBy: userId, status: 'connected', revokedAt: null, })); diff --git a/backend/__tests__/unit/services/toolInstallables.test.js b/backend/__tests__/unit/services/toolInstallables.test.js index f5a97dfb4..e50b88c8f 100644 --- a/backend/__tests__/unit/services/toolInstallables.test.js +++ b/backend/__tests__/unit/services/toolInstallables.test.js @@ -20,6 +20,10 @@ describe('the builtin GitHub tool Installable', () => { test('the builtin GitHub Installable enables exactly the broker\'s GitHub tools', () => { const installable = buildGithubToolInstallable(); + expect(installable.descriptions).toEqual({ + en: installable.description, + 'zh-CN': '装有 GitHub App 的那个仓库里的 issue 和 pull request,由 Commonly 的代理按 Pod 授权代为调用。', + }); const component = mcpComponentOf(installable); expect(installable).toMatchObject({ installableId: 'github', source: 'builtin', kind: 'app', scope: 'pod', status: 'active' }); expect(installable.components).toHaveLength(1); diff --git a/backend/integrations/manifests.ts b/backend/integrations/manifests.ts index 77b23c51e..26accddf5 100644 --- a/backend/integrations/manifests.ts +++ b/backend/integrations/manifests.ts @@ -16,6 +16,8 @@ interface IntegrationManifest { category: string; docsPath: string; description: string; + /** Locale-specific first-party copy; `description` remains the en source. */ + descriptions?: Record; capabilities: string[]; } | null; } @@ -60,6 +62,10 @@ const manifests: Record = { category: 'chat', docsPath: 'docs/discord/DISCORD.md', description: 'Ingest Discord channel activity and post pod summaries.', + descriptions: { + en: 'Ingest Discord channel activity and post pod summaries.', + 'zh-CN': '接入 Discord 频道动态,发布 Pod 摘要。', + }, capabilities: ['webhook', 'gateway', 'summary', 'commands'], }, }), @@ -81,7 +87,11 @@ const manifests: Record = { provider: 'slack', category: 'chat', docsPath: 'docs/slack/README.md', - description: 'Ingest Slack Events API messages into pod summaries.', + description: 'Your Slack DM, every pod you\'re in.', + descriptions: { + en: 'Your Slack DM, every pod you\'re in.', + 'zh-CN': '你的 Slack 私信,你所在的每个 Pod。', + }, capabilities: ['webhook', 'summary', 'commands'], }, }), @@ -95,6 +105,10 @@ const manifests: Record = { category: 'chat', docsPath: 'docs/groupme/README.md', description: 'Buffer GroupMe messages and summarize them into pods.', + descriptions: { + en: 'Buffer GroupMe messages and summarize them into pods.', + 'zh-CN': '缓存 GroupMe 消息,汇总进 Pod。', + }, capabilities: ['webhook', 'commands', 'summary'], }, }), @@ -114,6 +128,10 @@ const manifests: Record = { category: 'chat', docsPath: 'docs/telegram/README.md', description: 'One Telegram chat, one pod.', + descriptions: { + en: 'One Telegram chat, one pod.', + 'zh-CN': '一个 Telegram 聊天,一个 Pod。', + }, capabilities: ['webhook', 'summary', 'commands'], }, }), diff --git a/backend/models/Installable.ts b/backend/models/Installable.ts index e1927d547..5a25ac5f3 100644 --- a/backend/models/Installable.ts +++ b/backend/models/Installable.ts @@ -278,6 +278,8 @@ export interface IInstallable extends Document { installableId: string; name: string; description: string; + /** First-party locale copy; `description` remains the canonical English value. */ + descriptions?: Record; version: string; // Marketplace surface hint — which aisle to shelve this in. See @@ -529,6 +531,22 @@ const InstallableSchema = new Schema( }, name: { type: String, required: true }, description: { type: String, required: true, default: '' }, + descriptions: { + type: Schema.Types.Mixed, + default: undefined, + validate: { + validator: (value: unknown): boolean => ( + value === undefined + || (value !== null + && typeof value === 'object' + && !Array.isArray(value) + && Object.entries(value as Record).every(([locale, text]) => ( + locale.trim().length > 0 && typeof text === 'string' && text.trim().length > 0 + ))) + ), + message: 'descriptions must be a map of locale keys to non-empty strings', + }, + }, version: { type: String, required: true }, kind: { diff --git a/backend/routes/installables.ts b/backend/routes/installables.ts index 16e689e43..360219a47 100644 --- a/backend/routes/installables.ts +++ b/backend/routes/installables.ts @@ -141,7 +141,9 @@ router.get('/', listIntegrationsRateLimit, auth, async (req: AuthReq, res: Res) const userId = requesterId(req); if (!userId) return res.status(401).json({ error: 'Unauthorized' }); try { - return res.json(await catalogFor(String(userId))); + const header = req.headers?.['accept-language']; + const locale = Array.isArray(header) ? header[0] : header; + return res.json(await catalogFor(String(userId), locale || 'en')); } catch (error) { console.error('[installable] catalog read failed:', (error as Error).message); return res.status(500).json({ error: 'Could not load connector catalog' }); diff --git a/backend/scripts/seed-builtin-connectors.ts b/backend/scripts/seed-builtin-connectors.ts index b9e8b9e45..e59b350db 100644 --- a/backend/scripts/seed-builtin-connectors.ts +++ b/backend/scripts/seed-builtin-connectors.ts @@ -24,6 +24,7 @@ const TELEGRAM_CONNECTOR = { // package wrapper, so it must not fork a second source of truth. name: telegramCatalog.label, description: telegramCatalog.description, + descriptions: telegramCatalog.descriptions, version: '1.0.0', kind: 'app', source: 'builtin', @@ -58,7 +59,8 @@ if (!slackCatalog) { const SLACK_CONNECTOR = { installableId: 'slack', name: slackCatalog.label, - description: 'Link your Slack DM to Commonly — every pod you\'re in gets a voice where you already talk.', + description: slackCatalog.description, + descriptions: slackCatalog.descriptions, version: '1.0.0', kind: 'app', source: 'builtin', @@ -108,9 +110,15 @@ export const seedBuiltinConnectors = async (): Promise => { // create their uniqueness/TTL indexes during the deterministic boot seed // rather than discovering a missing index on the first external request. await Promise.all([ConnectorSecret.syncIndexes(), WebhookDelivery.syncIndexes()]); - await Promise.all([TELEGRAM_CONNECTOR, SLACK_CONNECTOR].map((connector) => ( - Installable.findOneAndUpdate( - { installableId: connector.installableId }, + await Promise.all([TELEGRAM_CONNECTOR, SLACK_CONNECTOR].map(async (connector) => { + const holder = await Installable.findOne({ installableId: connector.installableId }) + .select('source').lean() as { source?: string } | null; + if (holder && holder.source !== 'builtin') { + console.warn(`[builtin-connectors] installableId '${connector.installableId}' is held by a '${holder.source}' row; the builtin seed leaves it alone`); + return; + } + return Installable.findOneAndUpdate( + { installableId: connector.installableId, source: 'builtin' }, { $set: connector, $setOnInsert: { @@ -118,8 +126,8 @@ export const seedBuiltinConnectors = async (): Promise => { }, }, { upsert: true, new: true, setDefaultsOnInsert: true }, - ) - ))); + ); + })); console.log('[builtin-connectors] Telegram and Slack manifests ready'); } catch (error) { console.error('[builtin-connectors] seed failed:', (error as Error).message); diff --git a/backend/services/installable/installableCatalogService.ts b/backend/services/installable/installableCatalogService.ts index 5b6d8dde3..5ced8dd7d 100644 --- a/backend/services/installable/installableCatalogService.ts +++ b/backend/services/installable/installableCatalogService.ts @@ -18,6 +18,53 @@ type ProviderManifest = { readiness?: () => ProviderReadiness; }; +type LocalizedInstallable = { + description?: unknown; + descriptions?: unknown; + source?: string; +}; + +/** + * Return the most specific locale in a browser Accept-Language value. The + * catalog only translates first-party builtins; every other source keeps its + * canonical description even when it happens to carry a locale map. + */ +const localeCandidates = (locale?: string): string[] => { + const raw = typeof locale === 'string' ? locale : ''; + const candidates: string[] = []; + raw.split(',').forEach((part) => { + const token = part.trim().split(';', 1)[0]?.trim(); + if (!token) return; + const normalized = token.replace(/_/g, '-'); + const [language, region, ...rest] = normalized.split('-'); + if (!language) return; + const canonical = [language.toLowerCase(), region?.toUpperCase(), ...rest].filter(Boolean).join('-'); + if (canonical && !candidates.includes(canonical)) candidates.push(canonical); + const base = language.toLowerCase(); + if (!candidates.includes(base)) candidates.push(base); + }); + if (!candidates.includes('en')) candidates.push('en'); + return candidates; +}; + +const localizedDescription = (installable: LocalizedInstallable | null | undefined, locale?: string): string => { + const canonical = typeof installable?.description === 'string' ? installable.description : ''; + if (installable?.source && installable.source !== 'builtin') return canonical; + + const descriptions = installable?.descriptions; + if (!descriptions || typeof descriptions !== 'object' || Array.isArray(descriptions)) return canonical; + const read = (key: string): unknown => ( + descriptions instanceof Map + ? descriptions.get(key) + : (descriptions as Record)[key] + ); + for (const candidate of localeCandidates(locale)) { + const value = read(candidate); + if (typeof value === 'string' && value.trim().length > 0) return value; + } + return canonical; +}; + const providerInstallableIds = (): string[] => Object.values(manifests as Record) .filter((manifest) => typeof manifest.readiness === 'function') .map((manifest) => manifest.id); @@ -79,7 +126,7 @@ const publicConnection = (integration: any) => ({ * form needs — the allow-list projected from the broker's definitions, the * broker it names, and the caller's own Connections — and never a credential. */ -const toolEntriesFor = async (userId: string): Promise => { +const toolEntriesFor = async (userId: string, locale?: string): Promise => { const rows = (await Installable.find({ source: 'builtin', status: 'active', @@ -101,7 +148,7 @@ const toolEntriesFor = async (userId: string): Promise => { installableId: row.installableId, list: 'tools', label: row.name || row.installableId, - description: row.description || '', + description: localizedDescription(row, locale), available: readiness.available, ...(readiness.available ? {} : { unavailableReason: readiness.reason }), broker: { id: String(component?.name || '') }, @@ -115,7 +162,7 @@ const toolEntriesFor = async (userId: string): Promise => { }); }; -const catalogFor = async (userId: string): Promise<{ installables: unknown[] }> => { +const catalogFor = async (userId: string, locale = 'en'): Promise<{ installables: unknown[] }> => { const installableIds = providerInstallableIds(); const [installables, installations] = await Promise.all([ Installable.find({ @@ -144,7 +191,7 @@ const catalogFor = async (userId: string): Promise<{ installables: unknown[] }> (integrations as any[]).map((integration) => [integration.installationId, integration]), ); - const tools = await toolEntriesFor(userId); + const tools = await toolEntriesFor(userId, locale); return { installables: [...installableIds.map((installableId) => { const installable = installableById.get(installableId); @@ -154,7 +201,7 @@ const catalogFor = async (userId: string): Promise<{ installables: unknown[] }> installableId, list: 'channels', label: installable?.name || installableId, - description: installable?.description || '', + description: localizedDescription(installable, locale), available: readiness.available, ...(readiness.reason ? { unavailableReason: readiness.reason } : {}), installation: publicInstallation(installation), @@ -166,6 +213,11 @@ const catalogFor = async (userId: string): Promise<{ installables: unknown[] }> }; }; -module.exports = { catalogFor, providerReadiness, publicIntegration }; +module.exports = { + catalogFor, + providerReadiness, + publicIntegration, + localizedDescription, +}; export {}; diff --git a/backend/services/installable/toolInstallables.ts b/backend/services/installable/toolInstallables.ts index 1cd8c9990..985f990f8 100644 --- a/backend/services/installable/toolInstallables.ts +++ b/backend/services/installable/toolInstallables.ts @@ -68,10 +68,17 @@ const githubToolNames = (): string[] => toolDefinitions() .filter((definition) => definition.connectionType === 'github-app') .map((definition) => definition.name); +const GITHUB_DESCRIPTION = 'Issues and pull requests in the repository the GitHub App is installed on, called through Commonly\'s broker on a room grant.'; +const GITHUB_DESCRIPTIONS = { + en: GITHUB_DESCRIPTION, + 'zh-CN': '装有 GitHub App 的那个仓库里的 issue 和 pull request,由 Commonly 的代理按 Pod 授权代为调用。', +}; + export const buildGithubToolInstallable = () => ({ installableId: 'github', name: 'GitHub', - description: 'Issues and pull requests in the repository the GitHub App is installed on, called through Commonly\'s broker on a room grant.', + description: GITHUB_DESCRIPTION, + descriptions: GITHUB_DESCRIPTIONS, version: '1.0.0', kind: 'app', source: 'builtin', From 440a5253a9f2422c5e635c871cffbcb1256d8aeb Mon Sep 17 00:00:00 2001 From: Lily Shen <115414357+lilyshen0722@users.noreply.github.com> Date: Wed, 16 Sep 2026 06:06:58 -0700 Subject: [PATCH 2/6] test(catalog): add zh-CN description capture --- .../evidence/connectors-tools-zh-CN-1200.png | Bin 0 -> 98556 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/design/evidence/connectors-tools-zh-CN-1200.png diff --git a/docs/design/evidence/connectors-tools-zh-CN-1200.png b/docs/design/evidence/connectors-tools-zh-CN-1200.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6bfd9f27f2720763ef8645c0425f3b1ff9e384 GIT binary patch literal 98556 zcmb@ubx<5@_%4_L0Rjmw0fIXONN{&|cS&$3xD628EkJO05AG0TfIx5=7%aHU;Lh!n zoO6G*wYRovx3>S9>goRKlUJYjc{^NLQR+1cAp3+hVcE_Gx!~3IN**5 zPh8ZqXBf|9#6{FSG7gqrXyfRSBA$>JwyCJ9+k%h&xteD?wi?=iOYh*v4^i+B;nub; zcXyZ0jxP~caEQlaJ|5;4z%_N2_4JEi=J&X?f7qYPiA3YSUsQ;q6#ra#ZzKHU{`^T7 zYD`A;=iX568|3i6FVOw}{aET?Ny<*jTu@M7!G`JI$?QOK^C~Kes>&)$b1Mt!L9~Uy zjL9ufUq&ixsBlh0CdQSu)XYR_{!G_MM%36?-WDXSZR(_2>)(0gzQk3GBw8TC^x74b zjq=|SwYJvrafp&n3{sVK2D|g}Os3V7;-dkMabXeQQj_?~|Y@3{F zCJfAft_QqV7p@r2tev13K~rWyK@~AE1F}Dxa?50CT{1vRWeU3ag&tJZl+XDV+2?{; zkb=Qk@?d&K)2&|Rc%moAI#s@Ei<+9&8HeESYj$M6si=LVForh_Bv}@t2w9h|{H1Ko z3q^jEeHX33W5oY^G;|53PGsVC%7d&rtxkX5%*&uja8Ci9ksJPB@4F*O}<)j$M`|8u_A6T1GC!R=od32gLNjN}TZLyCp;rpXn-I#qh|@au5y~`MK6GSf)>@>{e6lOf zFSISF-a8y1mijA|wfdJYda^3zHPnOpsB(|RS?FKORy9k^9zTd0X#700%Mkvv3*tH~ zcW}9N`G}8(u92Vp@Dh&T96Hut{Mj{%A?A4;WDO0|?bIKA3CXqWbIq-tjo)PT+Yi*S zt;=L<9OU~UUFZpT6g4kBSp0@y zypd`hy6S^Itcrj4_u=!r7CGo#w6V@o0)GkXMZ=_lu$V8@~QmYikXGg>O3;Z#$fTgOXCAKV5HVUVVS3 zp)F^i@Y3(;z@o*jDlooNRv#oQ?eX=0c0rNvdAZvQoT2jhf}-bpK^+SzYk3~~`&W)W zw4Dz-V|A0*f6mz~^q?F=R5s$h87{ajqwY1rA>D=Oc0)@!S(P7Z4sDrI+g?7@t8a+Z0ax_>2PlM0aFE$u9p6_;Z+ z+pTFKMy+>uN#Ji)i(&F%FQt(9nrvu;kJ(K(uAT9#KIVzGs1BgpKTI0$a~{6s^KIph zMzV&qmc~6-;x}ww^7*{8W5vNS6LMiKd**(`V`^rl(%{s>+fb&Xn-UxnLM-TZ+qeLa zFdB2HTT<$KThQTqc68d1eqpUOw!JalF5~m}Bz)f@_8gq;)JUDV2?Pd+>elabIBW$~ zWkL(uv_C3;-%lc1b6JAU1ihOo^@-Fu`$pdK>2^F`jo?*KvVL`RHmg*Ip!cIwnI1X` zkEi7rB7&#`Y1gNGns7GKW+9n|H(O)@tbY~wLHkwEyu~JzNjfk^T3%jU+v{rCyQg`z zdGF%#p_C235Ik!;mz9z6P7w(yv_iLSQ;u{&8ONm8Tgz%%0enhoPALS`l;m$9pvwQFhU={--c zN5?d{I*0A|E=J3wdQ}h=D(D_EgL3=y+b9!x}kTp3?aB zGU_~Tc&VuiCz-)PMsafCd8p<}->Qy;Jox!3SeK}`$FeH!crY~Sv|6ve2>sQ)+n0dd zJecVDcr9;4Zu8HO4#F$;LktY-G`}!5Fl&^%@1am#PvXNqJ)_RkuixtH-%ma64Q7AC z+nPL|vdAKCdyP}vvD}GITeafCs8WSSbIQka1Z{Pi`8qH2Q-+?NUaNX#x$SAL{-??L zxeJcgT-}QFeWgx^DsaA0(XSja|Ez51D(R>HcS)W@YCj!YZj9SK1CTh)AzxW}<$+~> z47+wiRO5->4y4>!Tl;!3m=RKy!iZMkv|VOPH-U7dR0gr3W@hv1`{J07XaUNEIl@%Y z)Tu_NXD9nsilX-=#U(YW7xrdsSoD3KR;NUwDCi@zx;z@{j{N_&~|%bOuHD!|B$~xo{Ea(=`T>fWmipA6HgXBrZT@)1LN57OtDG?b{u8I? z!xqz!Z|=8JVk^#KgqOQGVCUyc8@o8E@T4fxB4QDGi1s1zhCUug)DEhitO<3{%)l zH-hT6S=RIND_xJbQu$jd3&7^11`L{fkct(zhc!$A0fT?-6FXv$?bjEzN_k`W=cgV zNr`IRHVK%fT7r_&_+5Ur-6Jby$T?;;6uNOVS<~?E^5NiDm2!=5CPlxADDwH9W&lb% zBs+f^^@;2kO-RVCtF@e--P#TmMC zdxLmQ&*pF|6%7sj=sE1-?)M?30n?$XK5Q0PX^=yU?^LDa!|W9)|LDFYZPvVKKq|0J z^^LWIc6L0r%E$LNZ@XF=U9Q9*VrxrMWd2AeLAP*<0?Nj4oA&~PBlKZ4!P-@iez~lw z%581DQQiG!XI-nrl*7^M3<@@aim)>Ybv+d;AauDT>onL86IHu6zab!amm;7u_yw41 z!BF(ipY#iEM@ov1PcLa38tQeMY^e+s8j@{`FPStnG;p>zT)$)gwFgL_$nF(#rY}z> zrqnE0GI_mW6A2cj_9F=kUcbK!6_yKjKH?h)Wv)?hbDzgL`uSNk6w&l248-CTBcbo) zdQ3GCx%VrikQa(fqiem(ny+$I1DkD)WQ6f%#Q6#0Le!bP>_fe15Q@O9LdutQNWv@l?mh3Yif?h@7iCE^bnEIsWL+F1Ur*a=@3e zJ1k7`bg5-$W$Loqn%&(B_0enE}r~Xebk2_^^HE^lok5Sz-RHz zZgvLrgGw&s_gs#SutEROm@Hn;TTxT>`ZWdOg@$YIo)VVKVUncY50pq02r+N?cuR5yu5AM0P%Q}UT`flmwk&t+wQlo z8TzH7sd*A8TR-hC9(xCnj$#2_NJvRkZ&2l-rhcC5xH`$fV&oa_E-x?N?sSNUXQ|!w z?SC{O*23Iczg;`G{>%q-kBda9;7;J`>gt#$U%H0f|Jq@uJy(Hbf0p>JfY*wA$X#!i zsUN`!n(CaaeAIiMogW%SxNM}m1xv6{C3`Di{G(YV5Et_ClRfWuhbGTR%|hrG+;Xl} z3Il@%`~9ysYJBdNt{1n5&&3A9*&q&3dXPwD(S@Cz)4z6^@*ja1NuM5|KD<9BG*een z(&AmX(;7vGK{n=%34&3oOfTE!N&td99iKUVK^EfLO^hbJLFr8XoD!ipf-2q_3AQC9F*6+MBELtjP;DAJJ=c9T0T%T@P`ctb_vYgH)(l zBd&Nz$%gJg|NEB&?hfx2%vDrqlNF7^@uKt2R6cu&fb(AVzflPHt018tmj+LyGiUQ> z$qm-(c(uWqc1KEk4e?4>8IW;9yw+R|fmdOge@W_d%+zW;~- zvlW&jm$zM#{5xCPoOjBcqHhVg50t>KI9HE(l9`S0S!a^n2$*yWevdLSu5>mBPG$sl z*tHHv5%7!;P3r#%#`E5O@qe!u{phRRmwdhaI^poYd~ogZ~H{S}BVz9ZH&pGy+%M*Ar=N9aU% zmDUv+Bg9tnTvlE_gWYvGibu{`y)uQiDXFC;HMO)REiJ9K)+x5?@C1L@+wWZBYZUSi zgOUHRfLNt4CF!u($k^zFZX;*4DUpXZ)YCHr!!FN(xxw*)v8SI?+iUqHB_(wB!s4ch z3rk2%OC*cUu2-is>ANJ>DRFV%t@g7j`7WF6W=uE6JB=8qA{aCsj1vZQGagk#K)1i@ zv{Rq5wF6WV{yFiT?SD*X+|J`0K8XxTtE0hA1*5m%neDjLq22a?6xaXAiTN= zY*JEI{`^_mQXd2|hIDH$zjTb%bj2l5ZXf6<`Y zX&~zVwPL0&BO~+n%^50f@16ac;Mbo&f9}Ra{B^kEPl_~1qSR*8xSR4MC6cecF)$3t z3TGl-Rn#QCYC}^L6HwALxMHU*2hP!BiHrO{QV|U6df`ip3TvYVgenk>cgpR zhqbk}r}fAv3$L+*E>C#Zaq2t1O$8Z%zjgcm{4c2y9O<-;f>>e z&X(Kr@-{V+>qIhAtCC4!eGThd^}@Pp#j~nqS3gdZ9$^#82PM?(HWC~x&G%jKqD38* z8p0oU!s{TiI3uy?qP-Nx#%u4Gy-^*dlw5wW(Fu0v);M!jF3&Dt26C% z{6UMW3+n1+(C5u9cr$8h4h|qRl?9pobWXPK0zGv4R-)`KM-&Gl2gMcTl^L5GhZWg1 zp+!6Er7EO1kr+LH_r+tjRN-N0(+que9iQ8CmT)%^lNdX)YfVFboh|T6xBVvznPvCs zp>xqInY%D_5&`trvA?n*oQDd?uNE#dc2@F}PF~Y_g(2SJ*!$D6X-Y@{=H9nzRM#y0EKGj4KU4o?I!;uH+w+H^WDUr z(b;jdh*&C}v&7sohtV*z$)!9d=3C>pE&RsWI-{#^9%NRdr>@?_hn27q*|zt~XkcnK zxOf_N{+r z^RuU6bV=Qb4ft{;O=acsW)o3>Rp_Ugbtkk#>c>kuovWKaeSOfKiZMN>M|}XV~F0<#M`F4 zSf!=r

BUBq7J>qS|2=f5P<2kym&HTalet4F;^|ZIamv0PJ`+gU(?>pLhC7os&uA zjXv7b+zI^}6MCQA>NSPv3S(lYt4||3yHiz4&v|WUd2%Qo?-%aca}-NU#L`mp z9;B^dk6*q+!X24<^A{5?l`qNaX@MnamNd$xAd=I<|AmB9|(-i|wc z)YCF3xS!*6)pu{V?(U$&cjv)GNkh0RKEGcri?C0R!-w~cWbH5-8{!m+nCx1-ak_i<+@MZNkN z^n3@3vGID-rfG5FXvJ?sv@Dcae;l*)mEC4Ln&&uj|3I^5LoHIQK~z*!|8Q_Ue@^m& zL3*2MWO$9g2R;I4`&L3f=(c`Lr~SpTdNGQ{WI~6HMI}wpwUEQ?nzO@84Zm>BdJ zS+5s49gT*D>TF^aGl0qh`VfihCTiWfd->*AJwCv*P!C2DO}HpgbN5ojWveGTV*mUS zw(|X92gyN5UMaJwQ=7b)cFb_5S_9KTKii(^B&^oR*E1QTcE1kaaIIr>@Tr=|YfrX} zsjqRhVRC9h)Z%rOwdF=nYzX&j&Xy6_Dt>iYNs06ow0<3cq@@q{Hrbs@_xCJqEKAlo zxVSj_>Va6ME7%q#h{ed;Zn3q=eq^ZRIojSzrCu`UfKsN^Ck!qiJn#I}k!Gn&O-pOk z>2-E~!zj>J@A$n5*Ow*CFzl1%;(FJDdT`NT$r}xh8Nwtv`cZM(qfW7HUCvT+&c^;% zhky<6-$`k{ZD7n<`sVgvu)w9Np&`NNFtP<7f>?`(NH|W{?P{r^bniek5;GyzmdCtp znatOfU?(nqKFoD&P`yM%rG#e560tOf#ZGa?^XT^_JLk7DyWq^sOwiM_boagc*Y)Ce z7nY?J6+y)n<&_P#hgq5mHbr_?B96}{3eDCDQzYNI`W>`*T#TycuC?XdJ3Xzk)jM(> z@@v+}PXH66FwA@M?)wqr;dYknAoly+!9mJp3?1_Y(Fg3@8vRlVBOM_WHOpWk!oAeg zH#bN@fK!WV@3OSZ$1t^G-scioAYQ?ABz-R*$&#D|E=I#i^qeRf;PW^v;*-rZHFmS0?*Q%Hn?<8&RwShd`FB_79NxRSx|tx)mOq*qnLpp%)0 zT1QI?RpB$gjR~ayc(!1tKU0ci?8ykbSMT%vxdzjSe&Ag_b{87Fcax+Kk!x&-D+4)i zL?roW=}!lVAH7C3)09WO;g(d)fe2w;+OHg_nSs=@%W@axw2_Y@uC(SkLybowoZ{sq zVos<30j=UX{1s5>b2G2O;i@ScDl(IwivznX@(l-I3 zYY(Agm^>lpcA;i{9DRNLOu8-knhmTGOU$GXaLJVmY!_pX9uS5^`UnV8_cMvX1^4Vc zF@zNbD;Y|7fnVK3{@aWlmEqyxX@rCxs7GynP+9^~T9>pOc(^GKpMtq}J#vs{L)>l9 zWsiFg%_@Z(my4x=60E3eyMmabxh}B=wzl44)OChoW(u;gR;MS%rA95ZOM`TJ%-aoR zG&Hs_VVLMg@I|h$fZAaJRP+bv?XHmUQ?rO1&dAt^5YhhG*~uSDba@6NWoCUmn5Uf~ zfO0pPJWZfpKa+DF#}6bGa9r^a=WZ8_@W*hSUbm={#q||2{F%JxO5v=w{#-!s)9Zz+ zjDy9Z=f2C{F4jPmejzq?MPm%flZ0onf`Rd!ZQZYY7Kr zX1=TJ{!pY2Ib$D2jfwxTfb7V7O@YLLrbB`76>YZQd;K3jHH(ATe2LTqjI122sm%)O z!4`mn4mMRI6F1q1VaG1mU#Z~Q&R2*4=pVGvHY(DCvFt5UY!=jS2caz3vc>mdFwO|m zT0|+kOT^-2j$Y2&#g<|)c0571!`Gj@sha;ATyC||c=tMf{CKOobpR_IlnaQqfM>ry z9)9@XIcr_-TBgMut%*v3u;)R?ylS{`H8klub*nM)a;e%|uAcu?TQ4Y7Dld=#9fyVG zF(-7ndzLWw=*L7P9XFX4Sx(-?7fJZ9Wt8b`TtY4>tvI7yZQrpx!Yxha}P!9?}dF?3WAoJH)U;q{y zPaI2zAS#fe)+u$IT7D#dxz5vQXUKPGj>D9QkI(Msh|lkHo)al$nhW0DCk=wUtwz^% zZ75GtxYBvc?^Y@ve{baZqJ7z?Lcf!HITL<>IVf17s7=0qWd(4{%FmJGNndK#e>8NV z{_X0$c|m^2J25N%9A$;LW>c$Jl7~HJB0kof)V`z5Arjk5qX(C zUX0sHT)aZf4~Et`tF7Lpz9Gt^2`}QT9SBnCh@__XhVY*zd*RX}8b9YV`tqEZlI8p< zq-v~IMIe_6QR3hYKjEe9Grr-S8K$qoV^N$4P?S<^b+ct!U=(R2ZEIil*nUhHwIeEO zqoy2S5p}_2BVS|h6p3g%HtuXlvKrvLi2n$SSG%*w#+QA#jw)Q3`RX_@rmxnXX5HnT z*r;gKtkdSD12153{&qE>x`k}zOf-(TC<}dM(YdM#miyIBpyTQ{foME8(@}Z25}NPl z{@A_Ly;|SL@*A=&X%h zVL>7O1;nqIu?S*}r19&M4QECma*7fhJh(t= z$&(Y=`nkJ3Oo@(~!$JFXbh~wuY_1uVP1??2+HY0JV}(Tew^0%%yJxzhw4;V%Q>4KG zvkEq=xRUGgW#m-F1v#JMtsti3n^HFuu!b#RP9A2O1Rulxu_Dm!s zlX|xkE;dz8=f~1gABl$aGke{R8MJnoUW|4<9b6UWCn4N)tB1+#K+us9DnUakL*;NrSZ0LBCz;fLOt1)l z%NYlWZ-cw$uwQu^e)uBuo%(7q+q2_ou1to>s^OAzHqg6C;u`cY%QtgcqLkMY!dYJr zP>493@f;*4<5>M#%QWAGqe8DN<0+pGcw7`~a-*BM-L$#Dn=q*C4T6NOJpM11JKmhj z)ARXs76I8}&ewQVi~fBvkedcb=w;4C(nDi z)UV+jx3$lW!Um!~H4J4lvh7gETdVcny3V!UT@S)gVV&m(ixt|RitEco+eMDy4cT{h zL`GYLbKCKC8z5aL=EOG$6$q=8${bKn2)m!T!$5 zX19}bNyr~9Imta^-pr}QHQB?wD89Tj3XwES{Te(n5(VVTfn;Tu4pPY?`E2XQEWBu% zc8d~vtvJr3g;n;}6bm|-^TN9(>rmi#&J(m z>7HFS)`pmXK%k|xO-y3gV}yIV)4E7`5eJyYS0`Ci%Ynb-X^gkO>x+JnELmBimi^+u zev~_c8J8oiQXl#Uf9(_^MiRTi5+Hq^^lCih3Ag6VqSt(bOTAz|9dL5cC-6}PrLpP3 z42h2nz4oLvcIeUY>;XO9F{wy-$Cvi6smzIkMNx;5 zu{8scT++K%vGC%f;{NQ1#7|junlJ{2pAO4DF47J`xEqEZK<1*=+I3@8~1s=wL8Mh|)-{2qMWAjN{-V{LEa412Goeqra7 zzV094hvo`#XrV+z-&>-gqmt*x!j)S~pgCkd+KJPk2{<>2j7E8hlHy%nsjP}to zCwcF;_B|w6sna^`;YWDbPE)*s|H-XFQ|ehVq*A59v+fokB=myUZ-&LB%nWwJ!bWev z#J%@uBtQi>VBaVoF_}?K^*Wm0^AhFLD?4QoL5z|$g=U5ksX!8@sOo|jm}?1hTG6M& z2h{1b_vAKT@)GOK&-|AS(jw2|5xXY8i^adLOnA~lPEf-c6DAuZ(zC423IAg0&shQh zB;-I)Cc#)&+EXRs_i8UO9wnCyovNp)ppB7+w-~Hqs=QCPQkd%TX0i?4H$oy-bTsC; z!v_-?ChPX@#Ofo7tsitQBrISS-D_55RMgYrXWEi98eL?r)y47xx|y{pI)FMX>29cU z>tb>FoLnA5@}C*1s&iK_IX&IJi8V@wU0rR=?}H;Zq}tr(TLtDssl?7{+LO^)V5cK@ zcSmDI_w!0#6XWY&deY`j`$J#fTs|NPsh2+z&Wky2uC0pE;YVssq{%DFe3ML~(<&Q0 zzadgaxrX#g{HE4#+awcYvV4p04_}kbb=lPp`A^OBROr`YQ`pophIi|3Ijs8_pneCMcESI$LaLLQDYmY8k{k zdxi-8)!_;Wi)*~7=M(soZ|QFU6@$q=_b0y=ludp6q5oD0{f*{BwvfJjd`n^yd{ z!t&fxpT^|sJHM!RzfG&P-{WjFbi3-IrxOyj;xL{h35QYX6pG4dd1k};o@5Dn3pgnk z-wZcOiAyqW9Ri?3Vp>~c!lCnB_kz-W$wm#Qm{8hX0{#e*hMGRD;H75;Q(yIRG+*p@ z>NWcgX`?YgbQ>Ied_SPh1N()s)34if_+B&e!p7(Ewbkr*Xo#IupKur}cPC`_Tam{i zElD-_=slPPHHvVO;1haw91ys#Gknc%cH+li_Tasa$}MZT8rM-%qqJgCw#8}{GVJsf za^Kag^P{nL(LO(zX4jadrpPl=+k_-u%M0pV95JbBt!4iXma zXt{kKX2Sb)^3S?$5m!TQ})=S;-myFe0>#l># z-NW8`3TbgZnxu16Dig`LDo2y?J!$Ay=|7>{TI%M4!?o{59F7d*#8MCjeW%k2|Pbw{w z5(kq9ap4=3<)Lptgn1Ya0)%!Ur|_$$ZA(MFflaYOY2kD)@|C~D2Dwlm)RY9Bw*fVg z?o(mv9@dhnqeZ_WCCFA!S1_l28=k95oAPasaG|AG`fz$uNg-KYKB>5tVZ3k%&M^g= zUjPlOZq;??D1R z9J)ehxXMDfb0w4=j^@LTZBZdcxT+^D1^mT=PSz8=>@3D>zHD`wU`S|t(h zYx}f6^@vP^JmfMPQ3~viXQX76tOANtR#)O9!}A@QwdMVC+OYQiy^$(EPu9YJSU|~_ z^(y#Ucr*c{uHFIR&fyw(!H$S++3w@AbN2Y^KB@XfR=rMp7LrZI>Sw-MOjG6GC=X4j zcPfQ{VWZpjw^cMhGu*fi3i>_%`5e!n?QpqTiV>9mfmDy$UK`j>!kv7v@1G;$oJ4%x z1`IRP$xnCptivhcXDW1g{S5iQ-5I?-7|5UA1**2z)x22f8Ue@ zUL;umr??s^d9_J2=zDVt<+7vVgWDdTn98bN{_WSPJHyyuKQY)nDtWDt3wb+3E1yG4 zG7`LLb2VM2iPuoneC=`JmsC-;*c_XO1RcNj)2(sj;M696jN_i)NP}@={ z`r5{S4Gy_vQw~?;uGTYuZ{ae_R<(@ACtADvNaiN{3} z1gVeT%#3=vbGiKt&s|&`o9A$cY;Cy!NSyIDyovBw()>oY0)Y}h)K}D@vQWilH~R%) z-U3;djSVw|B*JVZaTT&`;J(h!9)ud1e|q|Ze!>1H3*zXJ*RrV863d*ZH`1 zy6?7&js=RZ=P~Zn-ARZ9a{|}$b0STpv)!z?lz5{>By$u6thV-Clzi!W7^lje)j$I( z;kfAM;5IgU4|kXV@3t4wgLpIDGWCqcOGEY=JtUUoNv#zVD&cvwgj2HcMMu=Ib=H@(@clVh)4oT z$?iDWs~pdFgbf)~ARK4z387A0`v_a80Tn1r$oe|=$z8_&a6aAL3j}aq-^)`{gc?xv zN`?T^*xJ!#2S#~83L)-;)gS>ZJ#wstjPE1&hb8CKyrb>YF_A2ZxsSHwtjnFf+u#pQ z%7{v?->XW)bFZZQK&PRXcG=x5k&WLfo;G(%8Fy4}ZA{TO77A_L@&jwXBoLq8FH-CE z^yHWM2%0brWnGiXO6gr53a4^uNCj3#o0TQ`LB?JH%_LN{$8SVM+{Ob&QZV7YTy0`8 zJnqkfTOu_-6;)L!-pwjtphZW&3SLR``-n^^GuiCsNo<$J@6AN?QPR*(xE#*4?6|BY zS4v+=i5SDWp+YJ|&FTXc6$R;7Gw0D3G zm#>Aq7-r!oas}-kz3OKO3wUPHCRF(E(H&%+WS!bU>O?q9PjY9-mA`DbmTEkWjNZMc z!>N=s6%`Rgh{?~aSPFp)P{-|arq}4vshNlkA%PPz`~WMkwsxZHaI-ZK;y#~}KDU%P z7675;*1JyWx>*tW5rifNmLKL3?4=UOo4w4!FP_(PgSho>ezL@#8jO;=y6x~fOK|eHk(w3`bBa4q zGekse1tKj`@X1(D_SCNFJIY%CGsFEA{lP2DKMifdec&P#{POV8(U9C>V_W922S3?759O z*_l>`;#*d=?4b;J_L{F19^dJF716Ul6AKhXuE`QY%4MS_qK`_ z^7Y(F)6)qH33DV^eI5}(nhTsj148HTxc4>Q$X))(t%E_6w3j0bu{(}GCMiiYknB90)`zP zH)!Y#M}l!MmSJ$YJ$klBo)P-f#eon5Ukz>93Q(X=?04?BcqY&kHV)NIYdRL7*PNpd z%&z)%+d@W>XZx+vUpeSEq|T;I@lZFTjgDv_PxE4E{`>aoSdR88$cQ%%Q2}A`yu)NK zXX#5&INr;nxoRmnk!5}1(t-UBrO?@n@%KGXBfYnNWgme`3KJQfxQ>j~!)z}lqTBss z%kK$Z04lcZZA}7SvO}Mj93s33)%XU)baHOIp}Y%MSsDC|)%~&Fkc_i=t_n4)i6Mh9 z146<*0X{BVqWRILMy4Gyt-qe8T6 z0Qk>x@0jYcU<6|azdVhX@N%_o1w9zDPpdY3ttpdWbeGk_d~@PHG}mcFC_qiAtYrnM ztun}(t}IvYz4`coA0PJSyN{G$W{(~rGxCkaK&M)%q}Kt>3b;y>W8TrM)7Kv$UL?z_ z6>Q@hrSf2?K)*aCuYd=xmrd3@BsiF+}ZR0j2%1!{35-Dw?9Z@Eomi z0$cHm)l z0>^-sP1)lZAhgu<@PC-@D0|+`__NC8;Zo+9-ySuED~>qAa}|^EQ1q*IsKXILE=h2@55n zLZHVH;V>`4vcoWNAUcCw?X>8<_(<)@f#r;QlAH4Zp=dK z`^B;*0FI|z`0n8Tt%17ss<*?6v4n2^l}Mwv+t{p!W8;yae5{O_Wg=P}nad;gV>lqX?-0TVimeIP&jA&Df)LG?({E6{c;XqlPa?X4hZ9rr`yuB~vjqvQ zm4*P&^#nw(+&Z088}@~3 zI-qZfkor2Vdc{o}2BNk6q(lJGitEaqPZ4iuaL+M^g_Oak~I8&DT_-7S04ULLw<4jN7%WKg(M42DL zMo1&wKXNeW7jjxczUk}h!+p(}Q&j&-T5e83sxBb;$(?UCo02;0@nUxuR{(T6Nz-)W z_ttvNo1CTN>35_Tu`Yj#@99B9-IP#>5(cW~8vXG&mg>{#2Z^5KSmaw~BTqkxe`C(hb%aKM-ii$jh76vA)7FW1tcrv zaYtTQAP^3hBWh-2lDhZn`3?dmQXI|(DGx$H^((5#*w@U)n&+sej*w#_2l~bD+ zhf?HDA_sba9T5@jp{`IYlp6Rt5sEyf)-Rf=QG~4(FGC7gt$HG+x6ln{m#jw z%y%rl%wb`4k)i&FUMCf*`sU@|HfvS|8l;|$ieI)r zUj_Z;E~nBa#FER)D9Xsn;Efeu87cNZ#JUcd*M~n8$O(Si0=Q!Ab%JXZZ_RSyeFRQ3jLSW zJ%1#H*wb{}@h>y{R-}3OzxR@UZj;})8p2CC%-0;tHQ7TOkx-HUC3G{@a$sn_)3V+l zh2Q5omi3;3D)2QP3#zw>TK#QO3agc9JYt1*IHw2o1sUAMd~CIVxHWoKfN!J&y)Q{^ zAZ0R;n9Be7=y>x!uRdiT5yS9P$7eZXxjT1SP__ElfkXedx7zLIdEgKkwyvHo9?;0y zuG{?m>_nu4aJrKG-v>B{V*acR%qBm#Rinv&_3^XvAb6N-w9OE^nt_qt{dl@4r!L_? zE_--!=D(fjxwVuSKsG0VuV0PNxOT9OA7;hIwtnkc1}V`M`TImf->g8>_B<@!D zulYaOwi3gBxzqi)dwr6CMm14zgmk((-HW-Q11V;EsBlyb^WTpY#M-_N0_gM)lQ)QW zF2^MW1wk)-A;Kvc8Ng>8@QI0%0mAz~qRyKZ_wUEWGeYg$=WjHao}yGNiI{#@=R-v9k}hL0dGXH0_#pjOePWn}=p zi4ADpesJ2GiU!@>Va3I69Z5vioeNr{Qv zC9nP{%ETB;0(|b*+OH8#G}%L<{~y~pjxzsg<0x49b*e#x`mN-4VnFFy0iY7zAtA^n zfB8Y?_*jE&L7ATyoSnWP;7(Z{0C8yj(uj`DpK8xO;QTX5^xG(fB zLfInqhH8)78YT`758XR|UiX?A8*hR&>^{$}>n}vhb6~s7QRKAPY~BP@WE`tLb6jm@ zrLv=A{gGG)?qIH~O7@`1?oyYESz9P3F_kj*Gppi~lq!0a*U9?xm3+evbGx^x)*!4yWygU3(Qy2>xqeOZt*H|ML3J)**O; zc!>rF2L*`W4dFzXPE|_*GT=4-<7YP>I#E#Qsw*eD)%XP-PP?3pW;x{tlljoaFjYwT z(&e%rusKr>GQ;O2#rl!xdAodKqNa#~iDH3{#WlBD^A!V==G4ATVc8!#+e`slGm3v6*AnVK5XZhpIpu%jGyIu=<_R4e=mw%l8@nZDQ6O zk(OaTYp4h&3(kpHd-{HxOf;t|M@21*Zk~d_-be z={)TqPE5QlB@VU_zZ9t)(OfHB8=4ZR5}eE0IyIF0l&W>VzJ5W3ja zs?3CT)r-$M-;d&juStyS59$6;0q zuHo>bCgcj)8$T=W{2T1H0d|C8P1mbe&69)O#Jt0ZpSAJcjQ^@#g}Oljk+%|Bpk|A(jNTje7ldn`#gEOp@m>ZHAgY%Yh@*SblE1Q zYQ{h9T6X3t_xEZ@W@^s^Nm3FH%5*2ztfH+&BN>;6W6!ZVBCgKH1K*#a5LnC&p610W zLk*C4*GraFyPoi=($XqZ4_%EXHod&wcnSkJarxSxF(#0Qqdk1^RtoiA1HAj;4EbHx za}4*k$4$s^1?--*?ZeezH)$gngMkyxZYY)b_4F}D2&>7MUn`gyK4}@9tQ542qf7*S zkTEv?eOp}U*tFD~V)u}I@pMgW-QP*NOSQy=ny!Bc3{&`E5pDe$8953MucHM+HNFS( zl2E&tuyB2v55Pf0A5P<6$SEj9b2@+8jFQ{2C*U+MlsON-xjOo`=MeAm6*yUg|8>^Q z-t3zCY)GxvUWSuyYkfE`awN;Hf%Ke}gME~WI$h((_E0W=NjsL&o}!C|alU#Tm-C)# zgnuqh_Yaa*zRVsUmgtrMe5&D@+S*RPXp>f-kJnFR({ueq zcXo-&%E}&@Xvh@Vleu$YvVx7zd24P6?nhtW!U1p^#G**-+GmbUY;X_i<5>JG8vAMQYFQ#Q^JuOysX_+05>5JG&7XB3sd!=*HA}KzleHG5TdYl^jKp zSy#O&oqX0Oh6}59!|TJQJ@)bYPj^#>Z8mJCJ-8d8gmhJS$@Hik~R{2yU&b<-IKFmVsrY}ceVnX7bA#dP0`*%@i? z=L_6MUeh!6Jxs6q4Mopm@}%UC;F&yKX)BVaeU_@++}oRA7jiaN9FWiRRd4f|Tz8C( zpRYvVk_$Z`C%#v6ShL#gjP%!Utoss22=|5FoVdq2+i%niLaS+STnyRW++p_Xto_&^*lIm_{9Lfqc?JNErg)(9G`vRPdtopJ-l@UIL zKCfr3dursoxG8ihLn$7kKZ)7WNujbz%81<3x`+HamZPAhJrV5T1kP8t9MJF@MEUPH z&31(6j(amMc_%tOLe}k6pDgFyG)*h9)CV`Yp{m49^^-*3y7h))i{6KIg=0Hl(lB&o zhEnw<&()HJxnivz!i%J&WDJbQGMnossoIX0x4F+wwnnROf1}n=M-)O-anCD8E6_f# z{rU6r2-CSQHf1>snOqyLFt2h$F+-{2HThW6#QXSas%)OXJtBgvgugeJnoXf*Kpmrx z?oYr|q;&}1!t78=Ime@ex^_8Z<_|07o6+IKQz0SM#_$xT%YF}B*e$|J-@`@=_xge)}B;$?13@D;%0il3~ z&&6W4HW}-H%3?fJGx9}(v|Uk28Rn%MV=f0G9Wk6vvrC%}%XF%5YqoyPV(4~PH8(b< zIU()p)fD06mGd}~#G&o94@DCb&%AoQgJ>ELH;Fyxan6LIH63p>=WvAhwy%$WUvH~i zsp$Jo-Y{u7K{+$@SQVQs(yOttC8a7yy5Ou_v8}fG>vGFe`&iG-Y1^6*?5fYJ%DaUn z(Iutgc#RLu<(a7Y-2zL<@Wxa)``YxlJPWkt* zTo`DQ%jF_^@I_0;>?_$#M#LZN{q%aXvQ79}=b{+EKDuJ(#dorTf)XPUG%wR)spU-# z#>=<9Duwuce~3Ba_TzMq&2obksi^_6tQ$ZA5%lZkTPJz)_-8Lsq)XY%&Z+~MVybKf zVQYX#%5j_6{w)1!|Dk>o6;?-FSggJ>>u|>U5H27eI^!95iP{+?HyBx1NK zolR>)x3PS>*VQ(FgN_3(JOWO~uhkJe@gFOX1q;MmA5!Sk#U0xmW?@MXjw$8n@p5Vj zLnm9;!nWK)O*>F0fs<0p&XS#0g#d6D9Er_C$3p~tbOo+Bha+50>$A`TzVP4l{WBPE zXY=1Y$3aJbzVMK3`3Lkc|Cs^_$sKYa*uF9TsqMuLW#DRmqFj0$zrD?RZ<=a7h zQc`+q#pg;<^+XvdZMf>+S-?_)lcMxya3JqRkH7Z{`Rvs}iC>8w0?t(ssbf}FJ3>gg z{bi{wK~Yv%$9;j&CP{;dTK$S0Ul}|vPdJRduSzxuw3)-Q!rBE}8ll}KuM0`8`0?%E zPI(a#kq<7&;st(T*-S2C7{(`KQf|b=gdQ}`-%F$I6vKU$QDnHCNQRsi z%eGu;(L>xsmaULGnrAgo>-HA+*|P*M*{J-yG#$fe-Hy^4slGm_B&6iecE#N3@Rb*P zmi2yL3KrcH{)$_=FRP8j)wr;C({TS&JPuR9xS)pXU zdN!C%iQcAGK9`o0BAY9{Mr_etH9b5$OrwzXPWVAyDjvIa+hk{k)|l2@E_4`kjo|uq z#l>~sv;67#O71zIUvD7)jE1x?9iJeF_yxhyfQI$w!W-Z(ARttdCG>q%Cw- zbVR=V=1mbsNQl(uFkY;Q?^^goy5&ra154y93BGY|Ylg(8+XK9!U5(W~8~0-&LNjGG zwHkrldboi)Lnf%)YzVpS3v1)(?r5SOPwsD$21LvqjQN&@hK1dB<8R6qM`dk#z@eEW zefoI4jNk!^@52CZOP7tOPcY#bwVmC=H!A>NQU#`sxTvs?Z$N;bUxWLEQvfWk_4G2J z65ZsseZkFLV9*py=8J_+;cK01~P`P0e;_8~;nuk}n6i{4ZZ z_4m_IQtI#S9j14y9@rk$*VlKZ3iQE6_Gan2|3QJ=fDV17)%o;<&9vSAxI(`4EwseE ztJP}96``4*+Q*mR#<8tNLPn0*k}I?g@-xJyQ>|P|T0aCRL%IY(5x_gTCXTCj?Y9p% zu(5XzkrjcP1;?19<0TDkr!NjIbGZxJ0`u+`*SX(Aq=#!W>4vdUa=;M!mSJS{$-Bk4 z|J^V{fzjeyOes>*1vJCe)lwY zZO>G`(R8Uz^CTG{mgcmEs3LGA4#$3~=ML!7&!*chM$sCE_h2oYkCqvYP)~*3m=OoZ zL@1C(@}%sVXXfJ^YWeV`p+-9^dxGR*@Xk$FZ5zB0nKFXdL+Hq6CDw8g-#^s@MhMFP z!{*$o)#<)@;0;y1#fN~a!f{MOa6a3Eo( z(gLl6=t}HI!3P*h@AZ1Pcblv-1GPW)8n>YcxG6srqv_Ch0bf@mMx2zWy0&hrdy2X*5-!hHUmjZoM>brudHWS!T#vWPz_Aw2Z#^zTVuN z4|t=P@r$QBI4byS!U`@xP<6E2BbTpMnqaToQ!za}*y(|c{qhxyy!7Mol8le0A3fGc z9(X#S#y0Kw%5Pax%KynbFKS;D5fE&V%~usp$Vtggo~rn`p5zgGd2vTRcgp-^B@>W{ zNP8cbq#k2NjMZ$n##W)RALI2`IkY@=3CLB?mxK1cmsT!U*v{-0G$SI|qBRcJkA?$- zgOkdy9MA}Ip%}sdIFnqqbRu6xKaxAtQYQ?Q3YCo=BkJ$M5CdWwZ^JM{1V@}&t#Gu$ zSAmp-aX+R3CJY?F-^xs6^=4MgQgq%mpu8hWVP{(#w&d70eW&H@A>LuCN|lX1hkfHO z*4Q&{`-^KCvjft+BhMek1C!J#ECONP_x-k}+W zPDW;?=GBH>$44!#ml_FpG_Rju^zMqxSxTE1PF$u(+Fl+dGwXReg)F#jR?lfI^biNW(>gu_G2 zyX{&~;3j(=kBp2o9Hiws1U_u4WnEyuu%0b@#HDdk5)>{ZDX=W1F63bOBvIUZI;k~- zf*N_BDy%~xPf@pliKi_Z*r4+)@B`qp|wSCWH zfI5_V2*yS&67kg2vR6EWZ@j;zoS;{g-#&L|tN96eDN*|Kk3>_9`^!X(jz63OJ!lyEiG0%JPb zbS-Uz*;)Wq3jDTcSi7e%jJ~?vtyxf`Z9q1h?`n+vbG) z<9`ptaNBi$shvVc-N()=w>`Bt;!#JZsc>H86d3;Vr`J)C`hI9pVk7xxr`^?F`W+{J zzJ_(#YvzkWC@%^N`+J=?f&Syam*5tA*y>ui8{e&3otc^`m8oi`FZb>Jdr%;jFJI9R zQ51s$iXzc;%*qjDQSXqy*8gG(wdzIuq>x}V6BpYYfP2-vu2xc++l%<>WBY4rugBb` z1P=+h-apgB0gp*W9fC6ygBEAqqdj0p4gCZn!{j z6%n;JBR zRS&b=^=EjLY%d>Qi3mR6i03H4C2l-i>jDqm*0ha4pir$9^>TK0HjB}8(|m<)R@Ftz zn6q*hl*92RSTGtr1$jEEpFfb zdUuSMg{6<6zR^QOp(BjaZsu}#{Z*mXyAK}%=j^#{&tY7fr?Sl2kB8_m;d)s)W$o}& z>u?F+mI-{`U%XD^@~;>;`DHDcsX`(F6ZUrK(J97mzF78)uhk8;pLR*Ke)RFYOitJ3 zbUY}2EtMka3g;pdBcm+^{V#bMjb|<>C@2rGKikjk;`Qt=Qqy;4DkU>sX)&m&VH=yX zi}|U7C80q;(Kh8R-C?+xK?3W^+z?QjZ2EJwqJK6(L~txNAJ%u<5HcjJ^!L-`C-InlE+bjN06eaq{_U& zQU3Tn%tyiCBvq#4F``a*cg!S7u56Q=A;px#F6gDmt zI1z9kJ$#5d)Hi%)ArPRyKkWBp^u3VE4Q{EDUD>BZpxr>Lczq!GW5`=8gn%dX-2%5a zhH`82HGTn6E~;czy*>3LbeA*;!7L=TW@G9HgSHWLQX&dj*QrB*i_<;ZX!5bxu^?~t z++f96xFcj}XgK?d@X`>dUKFf89T`~}H=E7Xn53(uswk=?t+ zS)sU^E5YO^>i^>vaH}NS*@iM-vqt%q>C8mMvZSqmK&AfAViB`~UTy1_?)Kn|o7-kGc~5VbMw+adEPW7~3_kx! z^LlIzkiFR6>nSd*iJf;;Vs;zG!{iZcAkg4+Y1HNd@Tb4Pg`&yJQ)sDx6(`@m=G^;D zWY6w(JT@k7s=mhc8`JnN0O7%+j@j<6Atyz&dQ4GOY%=y_EXO$eMNxWyMu~L?^b;@l zJ(jaqLt5q{(xCz_x1ZSLEg*?MdKb@QD4o4j=!AW+P={a|-(ij2B%w6KPFr`X2*L~` z6cpUSd=3M*!}Z}e8l$Tg5j)ZIS1XjxOy|d|YnOfLCYv`jbt(H$k4{en%V509Jf=mG zGGUaXe`f*huKMW3CCm%E^oyN~RplQ@-1xtz^=I(XUZ@pnT?(D5$Cen%zb|<+#z^LV z4cASo?EA6%h1=6E<(5qd%qsJ9b6);2lGR3=7lPD?S4GZ9Fh0Iv1Z!a!kfhTSePEYT}a9ZqMdIe~Vea~3YqqJLF(Mx{M zY_?XtfT@Hjs*>7i0A);rPLI-0t%fBvCq%#IQWjIH^}~GS_pE_`0)ys9OeVSYPBiX6 zNbMLMEeE!>e8zN&@|3*ot$XcH!N##nGp3quUm;7LoUc?OI^;v9OFOiVH4b~y)2$H z@jqMwCW@_kpkCZ#V|%?=Ldco%@40qH~WCzUzpSx{2SUh0N{iF{lH$guk@hq=F1jb z%-{(wt#26Zzy8Y(tT_H-#w>YuxK+6Q$1J4;DgrZC*q9(+KV`3n`qU$M1Yk?cG>UYs z*-yW2e0i#i@iAHUTs;ZLv0sDq`pL14qM~h!$(=qbA8&8rckh0Ql`J5RK-(fqqjC1F z#g}pbhhqAXRjZtc?km&at1DT(4~uQa9=#`9H8!;*Sbdl#0E!6lwCa7qKmQPC^|{yB zKbv(ZhS=Znc|Ie#mY=m!rs#FcVi0?IzcQVes1+;fBSoMfSfD8^Y2(uBTo~%md6lElu^Gp)q*~*wg2&g~)>muY zl?9w~@v0@L4RMv()6WwC3`Z+hP+L%-`T29kpv&1s6SZZV=8MOqd8l|t=`i;SMYy9W z&S0*nftg%sW8%i_o&D|^9hr~iHU}TxajN5w;CdH%7(5IJ*?f6lA5~;@%C+aD^_W~ zIXt(xUWbXKIi2%u${x-4+c%T|Z=iZtT)FKwdMN>7-Ya*{;RfvUy z$@A!&95-Qu8+nO&TTTTNITdBwW16_aVn--P33@mSe)q)HVIuk@#JrIc6l6e=r;w2~ z`=vwf#W~mbOWoMK&4HOJjQT1y`PTYKp0{sh6cve9%kW`J$oPbw(!;F*R_?B#;?ULJ z-N6JUT{G_pV~%4}Sng`L7#joq7z>)6NB08>1-P8s@h~55yAVhz6&npT!_eZvwa=3a zMn>R@zDvTyi?WcAKkuH%SL8(`Ubj0(P*Qn<%##XT>iEQBkT_jDWgvn^-I27sR6*Ov z+z3}<=AZ$%{1fuiz2?+m%I^6=zc&ZttQwhZd7{iBw&KVA2LY{qaANS9R=U+}Dlk52 zY--|h*?k;f@*#o#!azK}%5o{juxl+0!~n$TeG>B`Llra9-T_`am(EK!x(sv7Q0z;HN`!`dOGmyA2!>lc zm`RhXfBY`VS&yigMf+#UzfZ~5FiII0%wBPxisKodj2~RZl|jy zfW+8L#UB!~?Smk&{A_f7i0fGQ_M=Pc8``(I=Qv9i)EA*2KN%8<3JcpGP453rPWOob zup*K`9iss6aSMHMF|&HD{q~0lmG|%4UX%$Qwx{CckAJ&3Qp@)F<`-T2p#crKW_e{paHZ#?F@_#l0WDj_70ljWpspu zT2g8<`J;8FILaP*JBy*k+h=8G#=Umf+_|s7Btt6dy$_OOdevH)WMTc3^6xo_`k%Lg zbAkUT;QHt^H%Ejx=cm{{I}24raQHX>Z!E0+glrihrKM^9rPym;iJFgy6CYi<62D74 z-5(bgX>MxyNY?gX+4Q@wuSBSj5Xl)1jQH|2*x5gJ2Qw|JUf#LwG2{Ou^L_5Kupop~ znJe^1QsRM5t~=H1a#(Um`9%Fg0%|5R$?_H!mfKU1`pkB-Vtrg+vU1NRn|}Gb z%{WkkP!&tcwjMGD(`I)V7H@Ld;th1VANcaw`uh7%6>JwrMQs=!Zn>FCYxM_@CEp!$ zjx&qMo4#y!0zZ@>k>hpWOyg*R^ywVMndVYtn~07Cfpl}Kq`;>G>U^|!VRQBO_Bj?x zdfe`7TqgkWaBM=^cOQE2=?ddJ`myj5pAF{e>1aLg`sU}WQK1?CpI0@8hU!lFHOHq= zYZDtEpH^F2`xBp&Q%xx?F0w#fXk%jv6OQT4xTb!x9N?Oil=U%W(eT+4Pa7oUGbQM* zo93mcckOiyZ`mCjq}sAD(>zva(wCD9bDmNW7KvkbNp@T%0lXqvc6bn#y8$GFuxC?b zZ*YHx5>p{6Brq^A#!k2B@786^>Zg59yns1sjnnb1JH(gfbQ*OL zGi`Zl`{VoJ#!O5sKHtBWzI@fT9=Ob*K-%Hn&m5d+DF?kp6d`!8*S7!>PEGs=IBF|; zF6^Heh$x=d4W#pGqrc!N&07Yo?1zN&y+cG}<1Xo@SO!RDKm;Q1Q=Xilo28VqDbH*4 zB!bsg^@ROHK`!E0-p(xGFHfhR#Cuh(lBc?M=}`LYmG)De?l?|?6X(`Ipx6{KzoL|4 z=2`P8w+GuM=qZ$k+TV3df-_iAlia;>bo2!JvPQ-#A`ZQsWagyKCTg2N5hwVj7}LN5 z_R6LWJ9-iuD8}5*uDW!S0w^*!zY~(VZ>!&~k~3B!wbze|_0=cdXdHvlYrPDQDzK+J zRngUhx-=P&9RDQZ5%jr0h_u~YR7?4wu8Jk`#C7Lr%WZopwk0_DlY_$x^7NP*+iZKX zu|J~CZ_fZkVKi3mX{#?=R#+Z);@()b)#HQJO&;yDYn$6wbE(WVJgqk-W)l%Y&K#JDOf+Sxf^ zP`7_XE#J%AYCm1eJB;0Y`*IjS!KqB>!jcF42pF|8pJXjReR?Pz?<364;wX#SMEU@3 z%#sr3-BkWvN!HxlA0leBQ;YX_C0`>2c~gk&@NkeM#k-#mjIa(bJyktvkwt1c5jx;_ zAB}MDv|`C)J3Tp<3p>U`ueFZpJgpA52DMqfkZ_AUuo`eN9`NM zWP>Ky3y4RR{-N%GlUj@6KbN@o-*_iDEC@#{j!u0?cE7F0XQ}Y3b+xrg2`VZ5eeOt- zaw2kD(1GlTX=(lV?|%%--JOpJVZ?u5ViKYMzZ`9^_Jun~{~w9B!`+C`98qJ+@9sD6 z4C;gzA$K&*<#kFwA@Kd@?{|i@wV0+;U?Z@wddd#LC#?@5_(WVB_0rxZTdAgSr(^F3<-hO6`2{2d^~6+-n)Xr< z%MdG0*DOQ$&W>Ei(r~7n+6l`|u?Vlbj^5e{B(^?`r=0HD!zPakMZ@!A{_`=Uw=F!F zg`KiHP00VywzHvwobiFui~l3D{eNlF+ZTAX87U-8sO5$vlrS;Mss8(^9i1__?s%^E zIoELb4n+R?H$<;+Bw$QiRz*ZaNJS;4`EDL4FK&K9Yiu9>-^6llLn3BIM#a+4o>2Oy zaTFV?XYxH29R)J<%typhcOe1PXIHw=di*{81%NQFf*3}rNThMeJ_Lhyh@serWP#Th z809`c%J2Ul?YZ+Wy5#v6-PQJ&)>%I?unDH>{(Vq3f^%J8a*{lDVPUSr;i3O`7GR!Q z^FHP&Hb8yXX}&Povt9ZhiEbZ}FfcG|Hn}EiL^!apu$oQ{ z3=ATH@$XDS^gsRyB#f)LkcsxWjRG~m!~mh1fsrvoHnDS+lp}|>i(EqE-#={Kw)N%- z9^Uv*J6$KIsRoBvwN7TsLm{{z6&xNIfZE>T9g@Ur-nyTpE!~`;c_1Jt_`Di5Vmj@t ze-o2KMm;=Jb1hjN6&U!^>1YmiME7}8K@woJ25Q%)Y+LJFuDq*s6($4z2?^+C;~<=D zXNh)ly!5z6sJpLHy6p!MC(e75TTVi?wV%z+A=k%n3oV|a+wpiB*YIRzKEnDGzY488 zrV3MHhkAVymII(sPR%xaWztd=vlYC%d*7u;(RRK2ZxGl@#NM5^Po3s=lZ11zhqC0K zKqyhMziyX?^KSo5*Y3I!frWv=VL8~yNY_+lW9;=ovcT~vOo}Zd96`F6lDV%VLAWiQ zM3JXnx5{eTm*ul4f;_W5<{JU831Y6OK$p{5Lwb92h6$(E>3G()ibjKynwn#=M2Nwq z%X8B^|JXFHpr|Xkob&c(hM5eg&(06GNLq`=7FPG6iy#jmq`W|c6DXF^iFcOo-V&X% z_9wmGQn?UI9DeaCyY=a=37bb3KA6_P3?3{0#&qZQZ8OL{K*L^{C>qGoccGlVH-?3K z6KMilZx`)5FRr-CL{}gCJsWJcl(jrKX)8iJ-tJ40inT1&Y+$v#%jvMClxlujT!wAl ztx%z*^jELAynp9*B9W3!z%Mi!Kl;~m!KbMBq(edJ^T;Z~G_IMPQ#i6Cu z%T4=5Pk82K_0daVtD2pBxmTiKB7|dxN~Pl)k*`u_=4ETu*jsy(dQ^*OU;~qvT#fWf z8Fj>hE!|IYl9gEbRPwJiCqIh@fP(mH?l{GH>Y4X2=mHw^eQImftK`KVV08veuCILX zx(7=KmEv`>X*HTQ5(wdE-bmjdGwTmYL0_?u~2M6CgYrFu-;myO20asA7h6NMG;N(kJbG$2V z#{*24M{H5AGU;~tQygICVGWN0RMp3Htf|b>}-CYVQ*bS!7 zp+P~vWdd+uD+VM3)2gZM-cq|P4=M4|#EoZP_YGTW2}y3x2pg0mdND3DK) zu<+V&no)IgDAz4H8J`cobh#_q1}bk#8h%`dQMaaRw#YhNR%*97qFNZEba>Mw*6V z9ngGzXS>c;<~dx3pToWurWOr&pZcW9e3c@jskm4AFmw?Qx24MD|DNhA=?A0`uqhk* z=D?SKC<9bPk#9cm(};?TJDYC@ho#z$QK3k=Ow^j4!Z;U16m)bsxv5H3I$>NB^7%8x z`w-=Hyz=Vyy|Qc^)O9_>*v+)@8rvoya>FV}GQ^pvy7J~qkS-TnQ* zQaso8GhEye(3{3hjr(dd430slS0&_woSd9Q4N+fn@nY{_ZhPC0z}M~3D5gzTwbL>0 zg!pCSDyTGP86nfHFjeGFn|!{s)b18+i^Y_!8U)I^joU-1wyckTkNZu?7*F_jQTt$1 zQaA=cfY>#QT`5tvKSHizjXr3W2gn21Y!?>F?=y81%%mpg`YDvdM0u`$ZnniXY7R9? z>uhb*30<9RcQQTlwcRHn&~?ulj%K!efJ`V*0Dj2csr)g9xjB+ubg(CkKF?EIdwtQA zZ7zqa`H_S)IWLC8dz5n8AS&JaM4XH~UC&VeaJBFL@1gZg2V{$)9dD$T9*&2}NZ;&D zFMA08fhr^^zANCN`z1mEl=o&L@;NwOk9lJa9P3PAh9xHUJw-+8iE5RWN#*ji`&KOc z+Lg_&e}AN?%FN9Cb|)qwFQZ%(*3B0n;X$KP01Z4P5L(BXDO%U`C!hq8PS+V~Oc9Xn zk@T7@m6BKF7v*E=pYBeBT^t0|prRnplxk*L(%+4Q8{&gUvL~9PD(>Fw)Ovbam-6?A z@)cTRf)?pdo~^)sT>bs~OkuLIyZ{IZoZ~KldH2rMitl|Z7M2U+p(Lr(!c=MF=w$vg zFB#|ijK%@A@pDi4mIl8ibCjM7DLuv-gwPp1$GlbIGx=Oq)F$@o+i;JEVrQ#n#*_=O zzi4blfeB@E=kGiAjtXx#ClkrkuLEkGLH$2h_3f32WBN~zSE>P99NO+xrp@U0vO1-S(3pcmP_8Eu7PLcHW)eUKGc_ zwA`4SO-`>me0tQn$!B6H!fSnC^w2;<&Va?`VBu*V>ekHsqG3M7Q#u{&;=VF?ndKXq znRFIlsy+Ml6gCi*=3P3w6f8Nq2i~`0If{i#o;o>LQOUj}oFhxaEm<)?i!p?~v#)@|udo!$HQ)$CEkyd_2}v{MTT66eN?nOX2RjOp9a!mG?TwFVvtM^H&+ed+@X z#@sBz;r4X3u>_oMna>rI)eS*G6G0bw6c%PQQ=Y?H6J<*YTJ6+_j%ypKk3PQmsMYv~ zTak?qpUS|Wko`EYo z`il8!X=$EMknWxSq=uA9@x4NVP)fDiE&&8QZjxU23$k?dPOf8F)r2vPL0eLvYB*7B z^u0ZDr(!TouQ{}Uf>?{pV@8%&sWnGJh{wud>B$+BKH>+~ohKIt=~T(w5I_W(wE zH*Fvf{a^pwrF-Eyr@KJi(}lZD+37v%R0_?4<08HN^*Nwo%ozEmP{Pb&Fp^_#yWMQZ zL@sRegK-v(1u}o@M@L7CsWCy1@_6nlb{)Gj?s+TPg-FRS5J!R@*(YlRiixjoJh5n! zqLCDG_g8tJ3E1s-+Km{#+DfTh^;ljH`k3ZjpbN{EyQk>%6lroa`{a0%GtF#F=sg_Ymr(cpso(h4!!5lO@G*q@I#dt z@?pOP2FwLwSq^Ym`m8LQEpNF&8BP0xN6t*gFAEFm7k8~tu+UW=GcvI#F>h}h$hF5; z5p|#exy7f9#8WJ`MDO!80pt~yKf@*Ou+^_awne%FAPZd1cGz-RZw19(f})%{r34mZ zz8wjH9s=%bNw!!lWjcQA^0@=%of-qGJp}04-boNP`6Kd)-&3}oKS3d$2xnELc{j0o zOQh>_rZwzC3b_+&_KP~>_`IaRW))2Ae$k}_nWT!g?v^YN3o!<;}inKQW3Ev$nw*VSIL6+vf$W@&TIL}H75sFgt-pt*5mW8 zcc-Y?QK!f8wjNS8Slo3o5OX#sMn~p5n~TSp(6T2NE!i~n)1G(Wt(BP!?=oN(26^i! zWdAJFDVkjz*tuN4nJxRMqa$4>j^YRzk04Ny@(*eQA;a%0*K^XFNZQ+d5=Q5FZg1Zr zKq#(!j1t@-&<;Zv^V3l&qWt6p4rGZacC>q3P1=nw_xFZyFIX;@-y=cGQ)1cVIpq+L zPz*-b@5OEl@@MK<`?4;=tH8@<<$}Ml) zdOmh?A~G1K=(sNpY+b5<)-TJx*xL<>J?3kVk@k=bOchWgZqU-w+7;(=*%dZ>K|*n* zZdvo?JHEMzcgz~@vVd)M%oQ9jX3$_5UWh%C4!uh@TQ;>lv52HN`Aa+)8X#~>hJy*1XDHM9I@unDaZORt4BI6lYE)Q`u!<;b^*3za^< z%dq{d2G^njeQa*I7r7`%hj$8?n3iaa$BGjz-}->cbawk3jqq=PXRYO;r+=w+MV6m> zjdOG)g#&h;zO{BXjS5zSJGbWkVIvn;`=t{RMwm@mxnMsv-hTW3DRnj=Ao{@RRKI)&Rcc4z zku;OeIm^GZfa=Wm$(3_RZ@yl{3bPzR?i0G!XtqI8|qURJy*BMXdY1dDC zl3%Ujuz(;kg;(?6P9cRY;R|+O7?L`9|4g-6SXSbY?(wn{i5U1Qt9$ zrh<-yk&2s6{h6@k$}e@eD_HGvE@!wd)&?F+jtYdbyzISE&4ZYzQSj3U1Rld?MqK}c{E`wsD1ped(Gk`5y@H~L=vwQkMci@yofCcbgR-kvTm zaCsOk?{UP;edlYnk+C3{JrCShviL$ zoCLSP!)hnD9NO>q&YWmfD*D>mYE5ztB5Tdox1fa!yi27(6aD-7XE?=oc3Qz;Q)?LC zoa6bV!nmb2OO9&6#{8YIuskP1Kh)c*RN?fwP z&E2KHt@S*u;1d+oqN3k%dd|wV4Gj4nIGBDO6m^MAb~$mie}3nZv_~ zHHWX&-d;O2OK(FZ3ckE1%35hJQF-SE(V_B_VX{HsYna>0%&c}?JOsU<>xCT_Aww>l zErLQqq;JD%)gCVjyE-HLRNcKk;&bG5-~NwP{_)@Z!D!vjnh1Odd`U)oeJyBqIdc1+ z8t+vFcxVyoP3K&!1q67$Z9j0o$p_TNpcdIL&5ioYWH=c3022S3pZ3K6z$Lyl{6nSP z?|M8J#NF1`roq1CtMq{N4yO=C6e^eq4iAI9e@@s-u@^Q~01{U`)+Pd2AJZ=upf@xqvK_Z1+_YDF* zr@8rfP7`n&zOks#igo#53DZN;F}s6`IIGcM3Pw8p2Q4tHQAc!2w?~-@KyEqZ*n4DS z;VMj=l`@N2A6)0HEIHvRLyPId($Z2L&~z-!REP4n(EW&hDo3LtS}k|>bE@K)nc{g4 z?4ce7Ntv15M~knmUcSmvaTu$RfKtD>m@&~rLgSU@#?J?fB8jFeQ0N+~u*7mYKeum> zV#(7r)}EbTkB^L`i2H%C$39x3r%dSjGti>8W@02oxu*g-f=i?J5hH)YSqX4|*etdf zUx<>B2$L0^e=lN0*V$}$(V*wlNEdd4+Vb;Jwc(>;-k4g`m?3TISK=oQ{zUXl%F2-d zzWrGsWts;4`BWix*mAiekl(S$PC%q z#0R z{qZe8B1gI4Q=8U3P+UXTKmF5ww$Ou#YQ(^k*_*AZtgYMO8~w)bsr7~iQltHd-$O7- z2zb_~At!eTRxwF78o7civ619Ep8hcWytq)Z2SXNL&&o4oh8 zteL{8=1%sOs>Me5H&u3O@L1LN2TByW&A&5N6w!KY@~52}i<5K1ibDL3Y^--k_dtAd z*lDNG^rQPU7TnL1>vM$O?h5pH-6!L$rZaAJrK}Ya_+y%yCO#yyU|a-CimT#{_w}0# zs>HE6Ogd?l3cyra^_w_R+zwwDlbX|P^7AU^>dwjPJ{z(;r~SqwOia~YHjR0N62ybe za1*;tP?Fv8x}+4R|G~pDq_pZB8j)X(zJp50QKR2g4>OZlEu&Ab&+_%1oo@lB#M1Jo zNQvVI$yVbsM8OAG6sqrr*@X`OxwV}funnq?yX`^W{SIRH$9xAsdm$SdmYUt{c{V3N zXH`-=rGjwJ3v!=8$%DJLzEsMp02y&*m)Gwf9piJm?E2uoKu1zx$vlPS@Y4uBE)JF{ zV4e|BTcrKoc!Yy9Q!>&Ey5-(g&x7d9i)Ql=HlFK$k=XK1h2!oLYG8U>3f-FHF#zMk4vr}>hC}$D!_}001bRM!Gs*ljK!xA zHLptjI(%?w2X%Wh7{hQ&P5O`udZ)Wz3_0Nr=X;!fy=diUicXra!NnEiUMQ_Qc=qd!j&AHr{Baim^C@-$7jMzMLiNWpE8sL0W2 zkWjIw*)K}p)+STK-|WU$!J*yQfGX2qGaLq{H!l2rsrv%&K>|_toTU*C!qL}9ZGA_O6bV0F-|(`tXY zPlnc0)*s^{R&eq{u*6haL4jI6g(!;j9j~D9kltVdYZNIgTsUmBjw7~$V`4bhdNOU1 zFqu6ct|(Q??!p{6j@xGS%B@AWTg{-anAg_!F7}&e0*3cDiJ4^PpIU^UoSYH9cGUV% zXF}$SBc(dw*;Uo(3G%e=tkfd+_%|OUcc3DyvNB;Z-g`nTCf0envQ9oNn`EmwQiRwn z5m#f@v9+Z(o{Hig+}r!PTC%coJW?G3%0ZymS52+l_%!z|pf3CgC!-*6dD4TrfPj?r z4qQX}McBv(xc5;Zz4apab!=$N1_Uv@P_MhB@OwIt;*3Sgf9cjj2Xdk`FbFORV==t! zohrB<^o`j5ygqTveZrBWfru4$9l+qmm>lBf=Vlz7>XBKI8Kj6iICB2V3uVBjZ(snQ ztGezr)!tuUiZ2%J^Vajeod#dgm8+fm?dAP@C#!}-)tbOa_uo`b5ck&j@_(CCa$a6J zAM6VDjMw5D0{j7+R>kXGh0bZrmtP66V+4pyjn1Jktd$xVrLkd2EbQUBlkWLHT`6^l z^)AMJlayWKM@Xose%{~5E0zOaYpGW-l6j%7spVUj6n7-wD%RTV3`wUa>GvLbS*(VR z#4x+tDWgY4jfQZ~+ca@9+2g*GV#YO?~lyIZ0^#x09rv$Kfl5udT~L3AJP?Sls7Z zP+aB@^FYiyRaG3zpdAy&e?R^enrA@Va};Kugx4maMqXbReRYNnMvvfxv~|(@r4TWL_bq@_!wyQHPNyG1}s8l<~hxbG!x$&R;Bt%Ksxwa%}X(K*#&;IBv72W*V59xl8m@#d6G^ zbG!ui!yXG8CMMjnXVLcer>SA9$b+lLNKg!`u@l4XM(xH3SC859% z#`t?gw?u2eDwYIzx<0>&Ft=Q%2Q|PT+wzvvvADrn`DtAzLFJOBW(qhM3v|H;UW2Sd zSeE=>6eLRH3fOD?L7Oas(?#6;^T+Hb=;bL>z(z;26WC}0>~p@4JBzvr?5qF5z=h{T zVbe8Q@K+fu`Z5{-Tk#qbbBheq`Q#7Rv2i)bX(P7Q+%~r4ozp_IeTI4G^d8j_)q|y# zLCJLUqL(}1zK94Gjm)7Wj%TZrXTGgy_dUh;bKs<;#BMVMQVYnjkwSzbRB>^LXn;bR zzuDjOYu@dkQl~+#+0xKj_1_Y4!oIdnG)A$#aEqpL=_X6^YLqX>Tcg>~N9f^EZ?dGy z$_kc3rpHXVn$32XMOR0DcDDatZlFUr2kJYw)nEQ*t#bL+8ceSbgO5Y*H+zx|R-~D2+FXGSi zw9?N*;@2c30Uee*JF8DDcdFUn0K0sD|FG-s^gx14*0P47;Y7Uv&CX2O5o|Yrd|s}0 zr+$$J6dx9rl*C#}#pCo|2pmwBV*X52dl`Xx7EMJRwSRh4W%k9MR{Gd4a*NewsTu1j z-?q6`2EUuGhJ;MjPf1O=AFfw*))Pfzf3eoU-}|+#xlW=3^8YsM;kUOU3@Ql=1NYDP3|Ya@JE(yB8OM9t&s@hxbSWME z7dBnbaSo#RpUqW$7QukyymN4^zCL38GkPyBY5t5k>FS8}_uTe;i*yE$8=V>q50W3?P#phK7xUyX_MEt(Kb85pvyuRdK&0n2k`{Uqyz2~2gQUKO? zIe%EqI>U6mI*jb6GUL8~VxD^8poH))N&<16sSz>(#F@DJ*;O(*kyZQGjEst^DvFJ8 zB<}(evL`IQ=H^Ml9c6!h4O|a5;L-n0f+AF|p|FWs;0_!4IH#z^$VSi0!Os>|=OHLT zG)Gl=N12J=pNA#kg?)X4oW106D*Vl*4!rU$0tEsf>DrUp3CHXekO2J4~)IaZirfL46TWNjEZ&^ z@J)<9o+*f0a3hgU?e6H99ctVBJUB2%v(>g&$4bV@e;tHCEHzw?kG#D$PIN_l9~ry| zel3nv)0AvcA`6}rabP1c_x=Ta;@F-aVpUBKiSHdIh0(9|DxA$fyRFvn7atSBq?)7U zKEL0dv<`N0r|b2iklIyUz|5tPH(yr1O7*S))XYq&$|8^7 z5^!{sE!V0smyK9D7mC&Y5%n{9MZ=aSKxu9hf=~tsEQ_CO;7{VHN z3U~RJ$OC5A-dFh!D$~+%3}V6Ys@vavXqJZ{=y$9)?|MMSZSdlN&#W(S`H*uE8Kgmg zTX?S7qFgn(9Dr$IuoM9DC0yzVNG=|iSpNE!hGnhA{-!HJOKmu($kxELtfJtjrOhDS z;A&t((016hQNun@ljWMP3#S@Lgm`Jo`ByK2P>7B+uK2su>&r$t?Mq;{W6X?uint}> zGx#(;1kcSi>RFZo4+}8eIA}}+NXQHN((gX{rz>AU98R3)UJt(^Cgh-{%@b?z-(s0> zv%$Oht|;^`_GiuhJ#xOy1y4E>JT4mbn*7QC*^csKeEjX_h9b;k)<+rmYSdHl(E#A$ z?O5gq*V*jcLc8Y0nrgPoGw*<2@HAA=gY(rwI{?q?x8dQFwuATp z0Vs6#hT~yjQ4M%K`x6=&h(k;aa0fVYauJ}|N<=Wn0`?Xgr0OgIi*D{C z3sSkAD7E}SWESYC-K7oIF_)CHDBWBRS0mx$bsKGe=shD8&^>U2v(`KKDk zEixQ{E)@sd)SN)6l@d-R3**GZqW%aCDTocX6?C zGWes*txD(JG&!N>Q^|yU zY|XdR4gyw@vQ>L;K>qBCA^~0fW1>D_60xcfH_Gq^FkoTDQ0D*rGs4fU1T)h8Xx z{-MU{_NOjyEv~UqS#a56BMv+3zH$z@L+nSOnmnbkUaGR2AA4F;5b1O+stD+L*lZ9! zyAH$W5BEp(Z#MUdjBN}U@663@B>n%K9&@sqdb4nF{;XK|WxIxMaj0l43J^TUM#2B^ zRMBLk$~kF_`_Kwa6G;7ZQWC4#AegpUvkMBifV={h$Q*X_rxWnqMra#Rwe22o9#AoG zfqmd7VzZZNCoo9LjYfne9;@zbe)FY-{xi^|rbGDj5lrN3jD`$I2re3LofQ$!#wp!Q|G_(kDCz{RrYDqT%)W8Sv zf@h*w)xnv5Sy54$1wX$Bq?g|`5CV+1!QqnErjz5;pMmoP7vH0cV{oSiHn)+fk5?w4 zw@x{GbjAdL*2gq|x%zx>qN*-GC|UTUCi$BG5jO}|07B?(g>aIbZm;=jr4C1~QB)_8 zJIFDc1>9A$t&71g`L{r75`V!dkwnjL`QE`>w5xCWwAcTfZW5148IzOOSsX+lZ&@r9 zqc1(QlTue>JK<=kXAajJyvID9;#a*UX1KU35w8Ud|F@Mrz1nV>0whuJK&=hc96G!C zjZ6Y18rnGoC8XNr?BR*et<~1{_D@>9&%glrpAj^N zm?ago1p5iQyMOHG8tol71PM0PV()D$?giUr55;`LIfM_dk!dluIIutB;{B@yG!%79KpGdFSoFtCApS<5 zC-QqP(^3AnaTZj{^L?>Xd^iA(C14{$dxfl9=R1Ez=hSn(Mm?%km2AjD?jfM+gv?6Qu`IRJmX4QQAd+oResyokl zH}M2T-FkPaYB1XQBBz$jRC52gA_A^74_c zE=r(=0=d)ybbqsRO>qB#_MTL>3I=}v6mluxv+@btT$;)SU2?zNE0gp4UCRRvZngs0 z*$t8xk;aOOeRy?^w_~55eon=B!v}#)FlsQ*jezI`h&Z+R-1R=!^YXadn#wDaSpj8o zs&}B9>DT6;riy){CftVyk6BRs3^L33PeFHs&?sc>1=5S47tew$Ei7N2c!%4_dwp{O zfetDw*ZH~6VH#D>o)kv2&YoOdDVQB!9GwB+jYq>pM838YT$v!Gx=-KeJE@QdGY6y2 zRr#B(-3T&1+5Z@3+E26dJ|0u1&o@L@G{-YiW8SBLd;U;D?71`fMlvB0M}>xFG!jJw zWUyyI(e=rvsRjIsS^rt5wfYvIVlk!8{P^)hNlmTOu!g|y(`+|eAw<8!zPH@ExQiD1 zVs8QW{8L~Rcr}OB4=!GBSNIG!Csiml#h-2YJ{CE*Qj3pGct`tgZ+4qucr&tT`{Fe+ zJtZ5VW|ehu>uNb|?g~rwLXv?lNMpBopLPx{JX3g9*Rv{q0xj znu;Aj?eD2y1*R_n65sBFJ}?If-4G0z(O{Yg$e`5hCPo7E-ueiS#>3bDcI=kQrJqdl zMEF(yEgXLU$KyEH{zP_y@Y$}4hRWz}G!0;!RP~o)J>>Bbmv*rd?X(ilQ2F zc(d>>5aObZZa_)Rbub_W9T#hE)@uoW8O)o#YWUQvL8N&9_c%%s8v53pmXy?QlfFAN z&XS+SO8K=nLYFH#zYO^t8GpWv3IU`av%x*3um-|6TiL#}@B5iV+e?+tpU zK~`k|@|37uvp{SC!6-2u-s=u%ZXt`?fzTqTDT;sdJcsdnUafN{$3NMZ`^4x8#rWYn z3JQmr962@mc+AN!T9P_oTyv|1M9i}PGTV&@JV``Ps&ZgF=&~+o3lEL)P2VvANjXIT z`Is|2X--Kvgi9D?_!5`lzp9wxj=4c@(sZ zwS5>upV%JeKJ4&yvl^ZXLcvv)`+-_8rn_7wGX2V=sq!&cw2faHkiWaBtUutv!Y9@I zJvep_6F7d)uLDw7@#HM&)1_)65)!2n{nSKm#0mS>7NF>G4bgWl7%_LWaB5>O`8l__ znnVsvd{ApabBB}aNp4e2e^H4yEMqIFQAXp?7k&Ujdj)8LLqkJ#rHM>>@0Od(gBKPu(YD5=&rfmw zEh2O548dQiVB0JpDu9-ZHo0N?$*>r0@Q=J;NKsNhCQ3dWs|~ZLj7hGyR2+qeNvBE| zHSncT`aG9C-GTSs8Q$>>dif4`C+f_zTWLj0N=(n@Q~F`V252idRGbdzu}S$&$kj!w zhFU3v0L^rSf!gUT`@?!xS#DI}*2dLZO=$Wk`*VPGWUO_v4vPxL0yZ(B;NK`sKm$@f z0df#<2(Q*+Fkoi>j~1|s74>=VD!H`y;C5xLFvc2F4(ZIA>5idjG?ElHy^l~S0I+k) zoWs~b|M%j8-@Nfxnnt&1RDTb)D?aXT3x*69?)M}IN9xDE(3E;^FxYwV(49m6%+h@Q z6>`LTjz8kxC#MF2!ar3gbfU7Cs?u%~U=kB#W>sAHEUWj{ko5KS+RZz4oz__g%Yq!( z23l$8=>ze&SepCo(&be$gZ?1!+k7&C8*P64_({O`Mw&~;AaVT3_1^c(Lvnc*-5PD) z??)hnI`Oqgu{<{XQ;N}Z-~uf{cw9|BJc+3*lQH;jY-pD-)p!XHLZ%2ma)zFrV!1Vq zG=j~6Hpfl>ipSXX9=~2|%=3YG+-Cr5E8biuAL00|75)00{nm$M$3;GpOFq&g(9g^8 z1&G3SY?k4y{|j5tPnRnb%I3STcuzQ+f6gO^1cE4#2DAQZ#w|Mt@k!h+3_}m3q@@i_ zqCi?@D;U^UlG0*xVom(tC;LbH8cKnv&p7Ld@q^RNCg(v> zWaR2+uSsxPJT}3Re$eJ|S!K3a5XRt#IMMB`t{yj0{BrkqpJvqWXzMw>QJ7|xB~@bW zTi24}k{r*UC13F~qiJo#Kxy-WP(aZuuA9?jY=e~_SgUH@XuT^o*f=-|?VH1qukzX= z@YF$D2YN=efBV5U3ik;Q?89cwve%V&A=mkTxu+r5m0>gv{&BtQqTuBN7; zDSVGPp}dj<~0|2|u>(=9#Q1!yIBBX%rI>Lrb*pqi?3$^8hF=7PH2S0|^B!?-my zlhF5}q$nNUry|-iu7+;j>xmVMUzkSCPPKO zcMh|8HyiyYgh!@cvVp5uKi`~!X1l~a#{(;8t-8)@$?H~HY|T3k%9n{jcF$K^5^TXo z1fXGLuQuF(O&4Sl^-Hyq=fb(xW){@>&)@6?z1&V~N|6Z|^JKmzt1y?g3cW z=d9&Kec|_xFsMSo-WesWDAkpC^o~0>3rrA=wz?}7qx{#HAqmL# z|4rTTV*fY)A2slQ4dVYtH9_zH-~Y@M$8MSYe~tKCW?kSO_0I$Y&Yfj~7C}(b@c&e& z@c;Yo{J;7t;EMmBUe9C}D)C0==}{K)#*Z;~*Xh5)nFUF4hNPvz+YaC%;Nv>h zCoGwKcr8<@i!}CS6>w)x3(z%`v3;>uuwrs)m^we&GSndFdj8j_@R0|!qxfWkG(TvH z)=T>|F*!5A_Wlpk>fUE?MEbW^d=QGN#)gKg z;Jfqu1ddk;fWOx_H$+54gX-9?jpO=ZzlDYN+dx$TfCJBL$n7N1YswCw0$d9#C+pbe zy8X#WZy_nmC-nW)1H*RT#~=tiqmEy^VMKiZM{HRDK{O#D0nhH__`GAwvmDTJ0Eqq- zGTQERdG}f&1chKE(-N&;KF!6s)@kg}`DP)XP>rFa*r!U%3)qsPqkn;AfBD=mlHKCZ z?as~NZO5L8@$q;031B_NGdoN_4UB$DO5UuEKtDnUE>J*G20@A0jliCd zfIFvJ`3SJ~9Kfmq^c7T9a}b2IGg45n(sEF8FtRZVid-QBWt066l$Gm`nu^i<*AQBy zl_WG9@d3q0gkxA(n>z z>XnEmRv{89N$^XJDxG3LhrlD_1=KAkc9j)AP*rX*Qy|f?lwK%L?6Wh{>w^@TPxKPY z7v{GAuo3_nV`9Mkh(RXc1E8c?e=(my!F^SH$OtdT8l(!bp12+GtY4p;w;@I8xwrRu zgEWSigu-&$W<^O3FYu274+-SXD=q%U&}i*@WXfldSF{#R%n-W)Y-zp*c!rOJ!z2JY z9zl2Km|AUDyMQm#=W3w)e9s^72Y-<9?aBE6Qtz%`Maf|H5zwvNY+$W2zP-X=#<{k1?sH}|fphd`bxnOQfs8Fhb5?(Q1E0(s@;v)y(26%_ziH84214tf?X#A^* zEGUwYu8mv^{{|tzmu3osdcq01`XS~99(D@wt?1PEzDe|Swl*}h#>6FdT^s8L$k~5Y zb-K+adq)SLB-daiX19T)j}0&dY*L|p&j{auS;hOZlbihgv!IVw3^je{^lR!CHUMrw z#^>|AlMP&n8h+BIbf`~PD`%jBo%N>YEvWvC5`3)wvjE+722j~q+3u#M^jhE`^{;w8 zAr2r?OI}-hYi5mfJ2UL4A;+} zmf5V`ognMnI5?kddvWLQ#c82RQ<>|NuB8St2TXcpzcMO-Kgvr!wQgXH3uDN+(eu0u z7%I|$K@-pjCY!`$TFp-J%ayU?H^$P)1$z);{a8z&dqh%P+yv~+BnSK=Nv#czA26QM z+pYEhd(kF~UOJG5DQWAycSeHT$+trX)a#sdf#wJ(!&>b>Wb(sIdQ&kol>Duyvg+eW zEA?7}Oh963wpn})6rgx}7UWV>3?0Bg+T_NDfLT`?U?qx+tK4yxCXbFnRLodHHN2cH zg4v3JdKv#_4c?y>#xe!`WVqZ!pn8CW-|#Le=IL;vi^Y5snO<8!3%9xXI(Eo}unndK z=-ZRLvLH_!s;40bm*KlY*n8j{R0h=pEEEaJDX&3aIP;pa`AQfGgujh4*AOf_bn6TU zK{$Ui!>&qJImcRp&$t)F|KDzhx}AaH`+0Akf14Ho9qqiw#J+!jpN#}I+zZ}W%1vf} z?72DFBEv3HFJ`)R2cM5d?$y@!@>p|(+|Ld8r$|KV6cpN@fVqMq1s z16auC>j;+9(9t0~NP-Hp*;&OaQb}77WfA_|&%d&^!f7#`Y-N54R%_Q1@Gwd!J-#|c-*+)>V=6<`tP9a8CL4P z1!fy!9GuePV*eIYLPR2YX;}fTYjL}4Z|g2W)aRsBN>ZZ@kY3BzBF(rU;kiNs=q&} zZCyiy2>Hmad4uEr2FM7m$cYg4l%wER_7xZ!!c#`w3z8Zg5z%MF5aM~wLM1QjdO6bF zkdOgj6F4F@5LAbMu`>d@Xvy}+n1qD&z_yKN#dUc&`COCWe^>1YTVMAG1#2LP)kEKH zQH$9qUR}T5vhZrV{KuLe;(7g&4hLY;vHdY|^bUPW3YyLlxtoTBW%@0KgE`kRFO>Sl zjJ7ToY0Pu_d;0bl+z2fc#WkB8?&)daB%s+)d+|W1T(`U|Jpvwfe%r(GIoq1mjHadK zfb?ZtQjPcGl9Z9BOcXHxct5N-IcP1+SsZ4c8WK*8&y?t7e>65e>t(P7n30}eDV}f1 z1eg8Jo=~T77HO4y6rt!A6&2M5%E0xIjD!S{5}F!|>TmV3rNGp?`==n4D+G{54oFJI z-)}~FbE@lrxek2OE=b?M>cp^+(82gN32YPe>UM0#!Vo$f1g%~fCUa4FXaflQpb_-; zxA|^|IQi17cohK~^{`dPmy2~^6$*30bi5$r7xXzvszo7SP?1>>bD8Vfrmf5V5<)Op zY%dOC5ZLfo_%7hXQ;uD4tp$IkWy<>CbJ%C`tOR(G44Q!rcvTj}?D9ID8(eor#KBIh zs|T2l4*;;v=rj!Uu>b^}3F!D~*E>+i5R`C{Z?24qc`OQT3a|DKXT0xk?6|$yV_a&} zN_e%&qMM)|P80OO?PhBXJe$hqexc!5aalh&t&Ug`M5PJ%H36ePD{JvB3V2R6IqWi1 z>r@V0+?Fe;T~O*Ydp}K3Ze@&78Xs1-70&1xp*k%Db@ne4x<}_PmKvSUV7=Xv9Uzb? z)_DXFLmjmp3~*V8V`QPhjGW>xrM|I7grOm{UhgrLso!%VI5LJ>FxoBbO;aK zCMTw7)fV31@y{LG6;zX&KNC9sT5Fl03v^2I0kN(*8E&BC8XFe{TV^ywmBj)?^K@N0 zqj+PyeFm>tdX)ZOiRDKNSOy9@JYiu#883PagIE1XID}rFj23p6&0E16(~5> z9|E^y)raz=xkzFmClIDzxwToS_Ueq~OnS{~TD|HG;vl`HD4Vj|pjT^dg6fxzdlqQ( z7HKEQCr9B|Id&TuKwhma_C8ARsG%NBVnfFP?7_D+Oxm=3sE+d$_i+Vd^I(ENct=KM z3bJUIJfn93InoYa74@$BjTjd|suU~hdZzcAR2Q~t^tSK);8x62AiDN$Gm~gfmngjn zY6sOmt0ln7a}};JA*OfCpkDj8ZyJS(Nie}s(cSxM%i_L(#v0kOO01YS zH%Ou3@H)s_`FLhcOag}+FjY8oja{h7ic*XZvSNU^{k+dvZqnKB)AQRU-Bf}RyC@4L zrU($(%li9XL=d;+1I|!0F0aRhRyX6DS%0Qs4I6%sja9H{ z27uA1vuc;_2~!(SkVc#A&n@HdK6{6I22j+Bsl3&8IAN+F3HGlLh6!t2NlZ*k2joZ; z`(2q7W4g~mCkcR!ODD&DC24Ecj72Z!j#eON^~`N>*BlBc1V0$RcL1(?@5MTUGJsN$ zkf@OBFZ~=P+ECVzSeyXx{4o+O9~h~zqX#2&VhRMqC1s_ZTXywwJ{yc6qhLr>IZrp2 zYmAYJVu5Z1N7yLSb1KqR+$ZoL3B8uLK|+bZgRgi0U`Bx zJMeo@e{b*ndey;XE=~oIrbMOiF`%U_*4(NB0=f%?q*xS74az}mU~cLC`C)ecpKZzF zmr0ERe8^iK-QDU(gz{lXX;~hq1^b3sT2WC@QbIY_v#~Ga{G?8&H30Z#U7df)@hub; zX*8fu(`)?R`0pMjMD{{-=$UV(Sh|#_L>(pElDzQ_%qFMCY)YE_+#7`QVNQB7G&J+4hLU>B%#V%MqvwDe z#Hd@1Np0<@{c`!K$D@Qyq=P7|mp=D*=jSe$Hu?;82*5lrmAfy6eib?pa{od5jYr;N zp9~bBgsdu8Zw1Lf6(!5`^y4mWDHwRevBxd``;v#Cm=X~`9 zc+XTPq8pVL!>%PcL6hY~8|Yp53i79!IA;HPxE6NVrhQ_{a*PaJ_XI;wUYP)6ixHwe z9f?`DJ#v;h!z0Hb048bm204&czCxF^QsW^8aEsj*!KMdmmQ>&v)2^4ndwte|6*C9d zW4|xGvJ#U80UBnGzrB?Y@17@*SUX%lep@Hxmo}8Z6xspU_xVGCAqPc|!zMwIj^Xoa zrF$4{L;JC(nVng{<=Ji&v#Iqz!7>vQ0IM{PkwZ6G{468+VEOtls_HrR7wR9M%v!M= znq}w#=_w*Kln<LXYI|!&O(XD+n#JdB(X3B(B29@ zvKY$8Y*HPaMvidh}BpKKczg;&u!bOwj zT6`jEyWaLg&PX`4t{Pr|OCgfZvwa2>h)6)<))nPdaB(+1xQOrowT4Itl%FS5S)d*63P5FzOdj5 zt>V_7KMS0vJ3HkUGJs745QNCE9lVv^89WpHr{ioT_6lF!qP#-B^gJxhFJ9R@d-%CK zNdShcwLKfg2vp}FKR9eZ7$D?2DGV@3+pdn3T$3`}GvxD6s3w>_9#&3)cZcR3^~L^7 zj<8_MoqYXg#Q0<)-5{N$)ph#bvrfG5^cLq*pacT2s~1LQlU^LjXwZk?*TsdUB&1kD zjUmZ+!+58NEf#dr+|pbV%ab|-F0dU89tuuhsNQu?-KbNFZ?V6Y2TQ}l1uuGIG%67( z-Y1GNhW_T@DRtx73})$m=gf?BkU0gtknYCiE~&1y7ITefo7o>x@UJ+&$m)2v&I?>x zx@b#VxdRUsELfQ1pAp~2hR#?P=5LHh;n#+dDUX8$C=ghDyzi8%_WsoKa7}PT?Tw%f z=my-lW%4@I%7ju1wA8UEl^uaFw83MCMCd?~xx;ISkObObel~M{zu)7aekQ&PPD@3U zIfWEWfRxH-;9B@EQ%bP@o8m1sD0GuL)-z;`ziRUd>8L5Z=X6*&0&DaWH4`(WrWH?B zU0>H8B|mv_MbNL(_8Hcjx8czL?A`vf zUfB=Ng$l)9oXL7kqClXacnTCrCT@VH&aE4{2H?i~cgpGi7QW&GEnfm|@Qg~oU*u%& zr!oDzlGli2URX+!q@=8)lb?ZsscMZf@(5PDN=d-+ukQd$S5oN4Y-Ah|)&4jsiOWvl zm0M`2)bR<$9ws`lwDQerCNimA{hT+lo>+F8F+@8)d5f*4rdp!m+WCxa1@Oz`Vq=xK z7Tm7V+)Kl%9YHyIP^Bd-i@qcV895Z>IyPA1(8e_ZBKRs0I09K%Ssj*Er<0D{4>UpB zN+sj={rF{1F-khD0n^F^9BH7v>xp;?i00mDhy`)?t z`SL5N=_^**u`9XEXPTm&1grFT zE!`ggVIt4d+~F#%W>Xg=gLI_v+k8(WFCJ!FP>yITxKO*r_$e|TAqQf9Yx(!X7bGe} zSNj2%wpLMkeDwhQ*owqqu2NJyH1IjMJlogL^7lEgYJn!tvDeh31|GC5kMO{TR`&TW zU!YEm{8q|wr+9u<3nT)1eY-X;O!;e{F~EE%kSBzbVRD$>;V$0fGjJ5z^YQU4HF?TD ze)QMmSr^OP;3@YMN0GVE0#fkzQX5^d@gLjR&UbrtJ9uIA4+L~Dko~|PNo^CIql~<$ zB;&2tDHg@vblvB}!o|jaQ{1$p(4{vn+N90t6SKuzTeh1rW6|G^b3!LE>cwo4uEkNY z@l%hTEiWF;%gv(RVE3_|zMlt&8htNSx>KBI!ZZ)+vM7CEI&4b6!^BTGYXf&OZH|9u zinhgKUIZ>i#Cky>#b}Y1UIMi_SF0T3EK#eKx1q|fA)c$z>F}VT);g_b%X5oqp0t~M zh(DXnwQ2#*D!?ePnXC7Lr^xNdX9!`C@fvyqf{%0}qowtoTmINoPo5>*QRpFWPy^T+ zVlhw%hM=X(m&MBY6X(h7ewx6P=IL@6T`8IGfA1+tceszlC^6jz$uefh4@neAEkqEy zd{p$f07Cw?XtsL9P;>Bl?^x=2IB`_-)m5m1`^Ugm#n5nU6p&C?&r?Li1=q``3%cFq zEt^12z8m}P2DzTp53mg0BcE9rxd2gwWz;A8SLycxQ_qZlX&kbGb=l0!WlaR3cjwpJla@$ZpdUW$L zkS<+c*q+xcSo@NcOvq`pbE!aasVsS6$%@(N;rE}G%eLjh&3g$2Ky%cYY=d(21hiXT zjtN?%?U^aODd{LMoTJ1W!bN_Cj)sQPP*v~fSgQePRCz;01W;ZDz&HvXLfMe+bmBd0 z8$CivcDo8j$2f?XFG6H{;zLRYzXvoBOTTSfG7NWsuE7i;qAch5CxduC$HAqEjx6$H zXZ|oWl9a1R0TO97W0!FEmTqg>7MnCLuij#}0=R0{M>5VY-<$?VCBJj&0>)my#RjXL zDfJGB&M({U`sd*qb=EUqHfoV8eVB`%saH(v7$#Y7tspM9SmtUxZI|k`$3M~0J)u1m zNspy?qx)M$jaEZhbYp<5oldPv5A>VL>b;4T;MRgb1HK;$6&3TxGwJHA7JXb^65y3A zOFucKr3(Y?cdb6DrqtASx6lnx+L&O)8TYBZwaMD1?3^riYyOv>9Nn2*62C5fIDwCY zdbzFhpN7}GhFt&y?+70-EfL^U6?MN+ggf`Eini}n6gatHh@MxuzG}^UVQTN7jA%lN$|M!^$QKU?1EZDlT=b94U4qZ#3O_IB zT$jgD4&S`Q8{J~8m>wcfI`WH2`$^-5&PgJbFEgZ*ZD63hD?6b)Rie6bcOs5BJqr2t zYg3u&N63$bS`&>$*z{Sqf~xA-42c(tw3KRPQoZdOmlHetcCq=>`7Wx`e0uG6YpHvP zYxN2!<+WRCo(HwG#%q4lG38?A{WD*PN z^*WFG%K0!z1&`0{6LYpoQw%^KnDN|eP znnQ^UCa2I=!V~;!q!+IHMacrIo!$MQjO15cU4?3U?SbUkG8LVX^d3lKH@6PPo~;LC zU-0YD$AS9FO2vwJ-jb3#@^_0;d}bGnj+xe9=8r-KG-`0u|3?e3;k%HglykK#ji(|Z z-UGut^JR4cF8_VTHMgyzw#UaM+@U;84Zu7x8;^FDZfTn1>Ol)jjZEF1v zwO`53FDWA$*~O;KEa*ATgzZ$$FsQ|XD_E@UT!Ty!n4d#)1pKteWtUU*7a>!FxziMW zLVv5aZ#y2$kRDzATGw~HL_Jg!QwHCDeoWh0hg#=x{_TlY4rgiik5has*D|uQDIJay zqM|t`zImUZRpMwkMn=yc9Ub52{(=8Z*=34)acfy%q*?2H4xH&5ELwDMt84w=b-NAN z*x1gw=idVZO&lSLh3eCnJfUBOUp~rg@xy(2{e(|E&hQH?5osd++hht;FmGMi^#xky z)y?iiR!{4Y2?`G%jD*kWd<92HGj48C+;OAkYqXEV7>%XO=ZU#_?!N*GpPnBXFzGez zPbauo#=AKFQhBt$UJ43XZVl{(EVwPEnKmk4tt26tgb}EaxuFh zM<7&nT>Wo8KVp7;{Ln+1=Mi9_y;R|V)<$}Y1sBCGnRRFV?U3k({M}(hRwN8MF;RPJ zu;M+J*GJnxKAM;9~D3OyoF8)f-Z}0sxfM9|=c``Mp_~Z$vSWvM| zQ&g0K`=mOE0v^Dmocik4J2m=ao;(s3Czl;}CHq_3ujBkZnIu0cdJB0MrQ!dLgrdU%!D z@=EXU3@waj)hAO>#x*=_Vx$2CbKN!%d={xSDwnmYy~|-sZHIpfm|9lX))M?gGR&__ z(2$Xlf%)g{zzW|VypmOa4x%T80*{#f6o!xfRW z;J7)mk<1eZJ6J9(<&Q5rjW$?wI~2&PH&PvEef8*(op8{5@za5=f32S;7Kk41FOcjS z^b4;1u=V<>F$)AUOS%Oi?um|Vb1!f;YF}owx`bm`_graq!k#8w4`bdV)3l?49&ZkI z_Bd46qoYu;pUrHsZ?avx7`z#|vhgn6K=UK!ao7$!_Zz#(_e?m!Ui!(b&*!zItfDf> z-&EaTKF?kg?6o3#y|=&b+-=>CF$W2oCOTX==LO+s!Z@9Y{KZBSXwzw;><_sY-rPAd z{pxEH7~^Osbot*A0p9^Y%6sJK5azZGE!9Ti=7vsNH4KP>C~EvI61T$K+}w~%qvw9X zfu?9ThmatjHqm|ISRyy{r%QPJ0~8wY$$Gg?pHLs|&H+3Ji}eHrZvJ46{tgZJ{^RGz z2G4D4c6OC0**8>wnLbx*p*K23`O6TuBIWldGW#i?+0a&w z_XnW|UNPk~7fXf?Geku)3i_L~1m2i0mA=cvZ7}tYUa~v6Wq_xUL`}UIPFlJTE=nz3 z>;ZhM6M|Aoo^rcN`NRA5lu+hA`6PM+DXzrc+*@v`#|Hb~%VT1c_O-Z=FOJjsUDWBR zrt^-wrx4gW0pCR1AL=Wss;cq|noxdX+#fIyB-S>Q^jVa~bC#%&B+?Yx!pnpb2ilCa z?h9Rq|CZc!^!>=BobIR_-qdS!c3J3Ip2%~EC8+RHwG05um>DMNia0MGQ4K=qChxA80LrJVY3DPE;kelh5 znZAXEGSBH(C&3`jKHmP6qp3>KzZHCgD#!}%N}RlYen*DlwZuH=}MTB%iXz&DiuV6?ujYOd}wi+`%l zXt#!d8K4#F^wKRKwjSkut+!qw!{0EC&~{D8>8vqBIP&>iCAIcqi>kBdC@ghNtg z(3O36Kxn}S=`PE>w8tY{HHFXUEh(wc9AbeShL zC?gY$B|Y636Cv+OG?=~Ar)f9%ot-vUQ=!QvQT}WUalh&9!MVIWpg)u&RA@4~+SzmV z=qr>G)3@r~U(O2MF(}KxZj4?1NDAaJ_7ix)E;&Qy^FZTs$-~$SA0$dh8eJRg$mfO< zQ_y?8)EuXvsmVgoel|ct(2{(L>eC{1Sbdvu2gesaE6#%lDC( zs4FD&OaYezOW`je;8JE>k1c+J&k`#^%Ik9gi-{wc+H7{bKd5B?DaBLK;z}Ipb(twS zu6$xPdm6$ak3LszT&A6y7EzaQAl3ag$98F4r#?|gp}r9EgsMHG#XVQ5twVuxq3QDK zeEyQ%R1#VyqDE&uR0RsRH^x>p+nuw^GTuxJIuY2#FQ}D#Myv*%mMt}It|rU_!mWps zS%MaPNNpFQ-xCnaOECBKjTT_eAt&0LYGwGr~Q`u5w9;i6jC@vV=4Uo*) zgmEUHU|W5e7K>bhX|6{&zBuTp59SQN93)pU{dou8cM^;T8GM-d(^$jE_LeFY=&`iP~YS=^etjht2;@z;6!TWa{ z3rk}+oknt!!|~&sE|%e0e|Im*u8RbKyLSrF+)A^zZ^NwL(&BuM?s5!^@ajNRS&#h5 zaC~<%h=^*ks#u6@xwq8|^OwmB zV`&|NcP+M-NDjwCOm$)_Pk2bZgy!A0oIx@zK%$-WfJNTz>=>odWz#@ZbhQZ-_e|;p ztxw2k*kRlkI5l&mxE(It_n(y1n2ym}9Q_@4vdp{>hJdnyBJ1M?ftGre+Nal&OPrjn zbb4if5CIay@$~f$!_3Qtz5>m)al*7DK;>>eN2o8>>m*}auB9RbsA`LB>Rc}sJpw{d@ z>MafP=hhOH+n?Akr`L4en}uo&Xq;8k53;xdQJX>0`UeS`(`Z2ypQns{1p03 z)aHq^n+y#VpOhg6sU`kf%G{}J5&?Zd{VA&SnyFgPJwncy81gxbwjzRA2FDi1RWFH$Js)8|kaW4v(X!hVUjubJB{TqGT@ytF-h?Pw-< z82f4Bi{zFQ-71q#yNUe+db41agM+ee{7`nSLRu3x0l`DhJj=Sr&kLK>d>2<+Sb=su zW3rdaF6JA&{0jwXX=TV;wYk~PhYPKDcR|Bq60(2F?|k}NQ6E;N`NjE+>f+7wDX?S= z6}(07=A06z!h=M+yG%#)KI}rM!0yS}xfT+=q!v4SCDp<3Ku}DT@u5*%8J%~~Z5;?V(C%yl-| zBr0)n6ITE3Gw|bnuVaw( z0*93Ha$Fw{nGkZIrZ4!4&O>X*4Ym<|E zy_J&oqJedq=~di2Dyf{@+yLF_uwM2&g*es#;ve}i3VzCynMI_qg74dgR&lVQp~aCA zRbH72E3Jq8Y}*5&Gv*`~35dL0o^Fo$5^EeH{sT>=JbiFqAB$*upwwK6^z+eZF5B(N zVt5ZY`mGllDc-;TywC1?a@Z`@2M~fIqYr`-P%wmltP)jjo$y-%Mh9tmmHB0FA?fQ5 ze&1E6>me899PE+xpW{sT*^9fz_kcDBuJ=nh7Wd!}7%*&uO}`VoU-nlV7=FW%r2(8+ zUcQ_kDA|;m`dzkXOSBSB4i{$hw10Z50AojfXGy}almG~HT4ftR;BOe>Cv{}q50?V? zo1BUgyLK3FoM3-e*77Oz=?8AJDs-y7_pfnUK1JM$cNtU=&lO=ldGx3i-yieg2lLuB zKUy@~7e&dWTK4Aq^iER#3pCVMO7j`Xu~7z!Ig+G{zEi>=vsqz2tka2nCHFsCKz8cQBsJE`Ln=`^?`yV=^D&U=^tIeWoUyCfbcY=S=cNzqAHXPUw< zpagI2hbqDdJRD+evhR4Ngx#ULD@#5SH|N{cP7wb>Uj!hHk_j6BPP>+YQ+SY7n;t7J zS)ZOuup28= z_TpQgA08y$-WfwOw3@9)XUQmzrVwy3Bp@U6J4AGE$n9nddMR}j-k1cAO*? z1~xt1^K#lgv8wc~(}?l%w9`&C=6S^&8ya$miAax{jdh`MAM!`n_Xrh>S!RgxvB`-V zcBP^hd|p{lKAvwnY=l0w14+u_1$0s#XpK{xcM~VFqFZ~>6x?=cW^duF^2y?0jYcfq zd#1Az4|R2XOHht|Q|AMErJav1E+WID>_DF!Xg2`dP!kid!!ocz4g?+4%D+lJx5uBT z!(Od~3)7l#-v{SS0N}^fSTRW$?hp-Uv*`1a3zDM%;=VJwHC!8usmpD43sjOR$U>Ja zP#ud6hk}ht^1WqSE=hbh$dU#Z<;K0&qJ0;7EP&RL;8rKxzF-N$ddFe!?(VJ~Y3Bb( z%Gi_^Pj{W&RXNrC!g}R6T||W5&7yXLM@PzwVDvqHNBc{3rrpLoCuK5a8SlPN zEL`zLxg7=v#K|28)1D_um0qrv%FQ1ii}Pu1XFM&$9rZ?yX*dv6ZLxv*nh%Y@9aSKF zYPIZC)NTBZw~Mz5Q{VSiw)H33oAX>I4xJ7w1r@wAiX*z7qwFm=QMXw&x56}UUtAng z?DzV~hlfXn{|FmOp*jW5NLM>ugL|mXDPRl7-vWznQMmH(&h(+zId%A_VuY{u4)?xd zk+F-5??r?8#ILdS5-njh)BQECN!hbtrl>-8&MGI*f@h8$N465^RTfgPpmC^r93v}wuWWj)-^ev zf6C~>3r{R9AN%t7PGe+LHur(IjbD8HhrjiOL&w46M|rf*MDL6&4devvGIRskwn9xuq#%jAc6OINo4w|7J4i7qn-xobTjdp@QBc*F`};Oiy`|7YCfzop z-e%p2rK-)@=<&%-W>|E5yeh3<s-I{7o+xF-F*<19Xi|#$I{htPfLIrA#Fs!@l|V!m@fE_e06BDX1=?O zicd_mgOG?CKgmcp_v4=n0KkH^0RscW#7!#Q64&djtg=HE;IB(Z6-2q0gRst7)#j=- z!{2&=sslpBLkPd(nyZ~(n~Cr1Np%lDBv_u!lZ|h5UwXTw;uz_sWssVC_3F(^H(W~5 zwvEJZ{c`j0FZ`nYU)24_6;F-@-7F7&j=1f7H|&#KXfy23bB@=I4$0TA?Q0rPJa)L-mWl9D^NI+ub5U+C%@9qr+vR|SMzDgLIZl#PgP3O<~DHMNbozszzt~z-{bK}$4 z7|$*yFANWAp-T&G^$NC*(Q!*yx&@{~%7(^NM?{)}im^SYsJodh;Xcf#-ZaLU$K}VO6?c4{ydJT)vjYKUr@AxBh0#xrrdXQYY{C zPH2+Oc!qQ8!N?s&RRP$)bESN(xaMWk4osF6f$>jv(o+EFfDblraiFp_(j+nm z39=`?_#G|d^L2!xzeKgVqfZZ(ard)s%8*AO)r3dyMv~&)xB~mGmib;Z%AoLR=FEZO zd80(~Ir|AuqPs+Kke20}=GoL}WW-S;s97LI1O)ZCqL@kW5BO%zmXdjX!&KU!^l5_lsp$B3|1eZ^FF}++TU#fBWA8AKT9-SgAYO3u!g3dSOqV)xU$fR8D>El6TZv50S9zq? zuSYER?Uz;9Tqo;z(%UpX%-d8~H@VCJGy`8L?^B4U3q()0rZNT~{ zzHB{TU!>{N_Vk~LFozO4w~LqjgjNO;X#K8r7)K{J4l50rcR2O2t}Z%eZWoa zeni~7mgVI&u6Tj#`xEBZtN~)6WI-A2EEFnATzhlQw=PWiu~j0K%S_GBCPs*+g{&!l z{^6ma)0yS|W3zb0#A=qHbJe;4_5zkfc$WxO$CKxQ%2+;9uD$Fp6y2C>=x^Dn=|xRJ z5zX7)l*iGYR8|ZmSLPIh%Xk}pxS?}TuQ@JNM02GHNWQl>61z| zc>`GW_OxK!Y!9i62PmvNHw(ETXLmAQO8C zubq_r*`#;&CXbZCL%&e zI0F&e7vUTnaqOUQYLS75C&Kqvy<#1vUWijb0_bzsfqiIWWt9H!U)(Q=bhouV-u}b1 z{0?6A>9|1t^fDASV56RL_7pv_edfDlWcx8PQZ z@O~_Oc)B0ZjAO9N%bSJw#lw4wdHV0FLHz%BkH;^P4i9k0tu!NUYkQva1zug>F;c_D*8CL<@&{2-*m}3Qv5a zxY~{2*t@YbUQ`tJHpF3icIi^&rS~BP6N||{>SrUB_A-I)RHAH{a6EU*0=estPQfPE03mN@v=~)nPvqa|?7@({2JAs%+Fg;W0YOPwNBd)#L zQxslSRuCJjJ02?>0M z=_;jvV$ zvaHkNFY?}N7zAHUUMnq&#lNqHB=0w;^78f*;B0eMWd+?*t{E9kDXu4~@=+ek)09iM z9a&F?6uzFC?#o8#2)*8aaekq5#wTJ`v&^*wn5S!^uZxxHye4o@g1N7peK2X2i|^mD zepn7GGxQxz!Za-a3F<_!((F~9dbJanY63EJ+9vv{C+=ckRDRTQGSSJUThwHfl*@Z< zhR@@M-G5ETW~nf~qI zRhQ#gGG@FeR@Ldz_pQ|xZiB^U3qZ*4?I5@q&yzhf`O*-rqK&`-6-UYD)AREwfR^J; zw$?MHGIylVGIGu_)p(3W{r13%tI*&j@hVYI#}}FTw=fs(a%B6khOzkV;4c0tyTXTfzhelWkN@zDyWyhRl^RTabk9FM&9c&q~R234__r7vV4dAoYJ5^TlrL+ukxZzB^QjG4jV! z5lN=+@20&h({f17@WI&`YI{*rhq0^rT7b0(t zu?qPSIB^!4wLc8B;j_(AOOXp+)oyQ-^Tsaw797H)Ue+VEC)2~l9ESgEz@Oif3!uy9 zaZpht$Huw*9T*ti*dRF`h${^SlchYEXA4t-e}m14v*dZa=7cb*`M-i~BGxBiFJ zXA5x8=f&<73L2VP0Ia1vfpiH>C`u6z6|idsa)!K|JT%mu=2yi_EIbBWoN^3G-g?}e z+NcfwXXW-Phx@s!S30$?F|3-RQQ^3~b>*3!?JBUJ#-M|bnY6YxKU~#*6H<^|6b|jC zYLDRsH0uDg*B;L;gdG&OJOU_!fEj%^28?ith``}DIzLe-S-^Q}WkW(sN5>Qpt3qu* zZD-Ol>+!G8%TetkmJBs+PELb0j#;yv58iL>Ee(Cs-Ec^Lebm@!J)QafeR*CG!o}qi z;EsR(mipJF@qHRIEu~|lRPdqq5{G_Ge}+W{S#6MJ#%&_hM6X10fxnE1kf*Ib(60xt zs`fk))PGVUSQ6P+LQz&r%{~1ytH|%tP7=S}^K7*&$i@_!_V?|}R*T_x+f)=)3=9aM z5}d9y7!!PGQ0h9kDBalDm=oPW&bi3yUQtn!4QV!J?W)5qEsl$BC-cXTrK_2g4g0Im zSKs|JYy8}=sE!J~tEW|Myo^tiW2dUBYQcE<`t|FCgeE*GEhm5+fip+BlPQq(%5jrn zxw()Q4J^#0gUgGqsG$aZ@8-HX1C)W3RA$Ba_;?4sU0i&bp`84Ev?#5K30Ar6M!pKM z+JLUMj=+<_mLge8H9sR2)Rv+@g&Fl(H8x3jB)NT?;EJm8y<_9sSN_?;KLsqEt<`uN z68|r28MCy>8Gv@R9}9gr$Ub}P&MUruR5M`;8NbffV24r-4^OJ@%Dd!xU^56l8D#$O z!eHa;{R>2AzhJ%#&wV8wJ-_eE1`I3tXx^YLboc-`9niX0Z)Fqz>p6ZHuLr2$^b^j1 z%9J-men3Tqf0sV~Z+gT?)iG{Ph85&fk(2nWrAKp<8Tr+KfI`I+-PbSDh8Msatm0Jh$#}#)Wmn0$L@vig+sKy+6I0J`r9cPkhxSpy9xVt`VY{?sD4?qipY+R^rs7v z=3|v@jfolj#aecAb!+W#dGEh<|m-Swo%*7gY6S@cV0swx~7u>@@jjhyk0u z=yA$x^L|!^rw-$Y@m6{jV~eJ)mASQXD9-_b4T#52=xni#)z%i`6wI&=7MZ(-lh#-_ zP$SSUo|Jb+{n8&$8Yr_=V>9_c%JJg46F7KA?7g(N=e4P;7}t-hnUjCwI1fyW_kE?E zs<_J`UUHv;BJtNoe^Hc{_74eh{R8?jzPJYiw}xFFb=k~b({-cD(nj|-uKAnJb%m3n zEqPzhZgjKj3n3c>i0L`TYWBc}z#kO>ZJFk1!IjW+i5hl;Y%TJr!Qvs-5nhh`b){=> zNb^UtbyD`Rx_ijvBAKo6KN}U8!#aTf zfPV-}X-?ryzkt6!6+RI>)b zd7$(`Nuj+rm)D9&4Os9*JdRyDzT7<6HdQC3SC=s#uUUwxpeeX4;^^qu!*C0gwx_;F zLcl?fq<-S0VQg0&H&?nUWNc!m{>?TlX7Guiu8lsoJOdM*ZFA-lDi-a1Fr3Idb4f>A zdyzVlFI#rxQf;TU@OslY14E06!3)#g4|$i-&tq6U=UWF{%WU=Zuf^O6>#|nY2$mdg zLy2!MITYG&pH}-Tkl7HLShEH`xaiDhqeLHhdbD+E%Q<3D@obIx!6_yrxY)Z<6I zyz4(>SyddZ$BNT)Dfb&9k|nV{SZOJ_i01oOUksCSj$%+l?G0l*f&L?3lg*{&6-!mZ zBWr*Q=3+JQlw348@jg8d^L=)m^0k06L(sQjBAD*2pqm-c&)r>@%587~pcij5tSA?s zS$5^kN*1}E3r3$?_|n#qN5EzS??cPELw#_ORVf}~E{UAWNrYY+TyZ7g)k=eqB8!%Y zT(NaZF#X}%+Q#qh+j9X{gm&e@ua;#0kYvM3D??CO^+_@NYTF52zY_JK_d<^P!#gy| zkCqq8_pT*H{TCMSv9y?JV~`7Xuf;QQq`$1JC?A+{xwVLeXL?>%zlgM)*^ zC?Av*tngKz_Y(sfCgL@#F9be?W{%Ns2S2&nocDX~Fz$12#jKNHdv(orxFnaBLO@`U zO4M7r`h(K4iILGAqt1pRi*_PX(pvW>qW}q1BBWZ+GKljsPYeyGX`FIEcE;VkRAqdG z>4?m)T>b6gieEr}>CM()urcRz@0nHqo`z6ieOE!pOkeX@%oCcBH;*?pt@J7#H}=We zFNRwsP;r^{M#v>nt{DnHzdE&bi&DrV-#GSxc|io3vuUeZt%mzrU9w*7+*6Rbew{XIQesH2M!zhF7YdjG61 zNOzCJpd4{9Jm%{?oaWZ0_cv2k%g>)G2c#~HPciudrTK2yM*XYr2JAiN+SWI%EmR4^ z)#3>CQgc;xWt4k|T26P$Z61I7wwwwaSrRKs@1z>;(jX#!#iVkl_35DXMDofs=kC0T z?Zm7j0zKT_^^}%D36wq3iwSXvLhfshdm!Q#Z8!CG0SJ)Iu;GOvG%=7pO(OwXG$Cmet5b ze4-vMd&saUPyYs94cws!yNO5l9=*`W*Qsr47%O?vRi(l$yRv%EhECgV#GBjXQncV6 zwXF1?Bwnh3w4X0%Q)^X2Uyzocl$)m72NCs0ASH#()aWDmO7>l0!2=sbh7~f(ExlWi zt3<%szrNa^5+=aix_-jA($5s1oAHj-y~S-^xWat_ltYSvM9o8`;%rT|m*VfBVx1S7 zZH_YIjH}3CvAQ(83Dh?jhMDrTUV(+*#`{Ex3FzZ@0{@ z$x8Gg)spNXncyRD&wNKLJ*0Z!rnq)X``w+)q$A1>5x%N#=K^}-Fs3M!TH4cmSgmC4 zEBl<=n(NnN(JuGeggJr<8Sm|-TXlaIArKT41g>F)PS|@eo~PIUs>d}}A1Tt&Es~^u zF#*;+I`qlG9=*zg@OtGlM%Sxir!jkR)!UWGlPEX|ihvi{nP-=4=JEeLFM-KedU zD&JPnWHHIGt+RD{?#znMT?jMH)VRL!TG(fq^e!23Vy@qSm_wF<%qr_Q6QjGj}WeIo9 zfn)X;wvPa5ARDWA8fsTaNJ%+T*89Ap*tEYIC4TIF#K)!DP#*CV(Qw>c*QzMrucf0U zb)rgzlDtdy_}q=NF}eU_^y5TQWWavhX8dcmeS2JxC;AG5*^jHVwWzl!wQ5szM03r0 zpA2~puO;g{@vY@UhY4pn;Vv~-Gi&2qb6IK2({pvZuB8qhrxNY>B$e)OhG#S>=pUvl zj)1*K+hpACQGpa z=;Y*Ah|?Xo^!#cNY7ILe#XqoT^~SzS^wHo@*LYhSw-y)vWm0@NZBEugo#axLd>DV1 zLfTln7W;HyH>j<>ovt2~HF-nDn$~aRmo=kSQw%BN%Ur?*5tU zT1Q4#M48XVq|s@s75nLmY~z;}mH6!Z)Ld59h(ca2f_s#dIaIdmMObJuQa4SvASopK z+Rf{t&Ziy+obTJ^CU#jjdpYj0i}>{Zg})`USe+V%Trdc)+4YHEXm5) zjYuP>BuMYryB8ouF1SnGnb@F;D|||I(xZoP-4Hc{Y9~+S>eW~$kimhy%g5PoT%`7< z+ikBG#%cL`&2MHeE0RvFtsoDEsSuN@SNrDY(;YnSLpmoHX>K@W4n??xK^Tz^`Z;Tu zIv=U=;Pw>+i}+H(hz3<0b`(v~pOqJ}2L-peJDbWzWG2k>=4Q)-b1ftE8)?U!M63zA z%MB`9>K5^8#bW2|Mm>~#$jJNhEFCOTVHV=i-1PlJ7#4EMXYVe3BUI=QqEo}F=LyU3 zIh{*;4!Gu#0^63i6;>1|0zc{SOhl-bCQdOMX;#GOW~zT@poFm>%zC1rSIg4z|CQ zO$@htQc>BW=Xawt?>BMyv(R&9Egc+OmX9g?0cvp7wTIXHSfeR<9P?+3ZM8??tU|&* z(*0RMoEa(IKUR%1ebu~uu3D#HsLG*xLpH8ACl^_fo0XL%L{30%?_iOq%Y07mW9DJ% zFDc6eVYAGL;n|YaQBS?DTjxAZyW7tn6s|DbA1z&xnmXq1W0})0Xd)|Nw8q?TPpH-C zN~*|m4R8D;IzYshAemRV+$rXt~26EkNp}2m_%Eh^q(y0cQ1BUeA}B`ic^=B#se$D;^SLPa1DM) ziotmx?X=Wrq>iR$=|R@U{*o-RO*cFy)YACD=DkR-bwxQjIVma2zBGv>J#CVLQP-9A z1~5cy)lgYi<#TiS3bK{(;`EWJ?3yGTJ~Oq1&10g(Juf51<&Gm#%Dk4b^MKI}pEtXRq49&^L`hy~Vx zwJ3s|Q|9jiTdJ>|zJ}9i?A;3b6cmK^%D5F(WP`hk9aV6T;t%ANn)}_-#p{rt+rk^o zxnVQG=YBx{aW>qqD>*^z{Myg3lUZ^4_;0lO_6_B%DS)66-mF8 zjqX=ANHiVK%)DD-&eSDKUZ^5y@^gfJ%+vF-JIQq}E>_m-bE)N?xBw!0GLJLh1LrS0 zP(6xOc)l0x779j{Hb*g&&&SGyEo55x%Vdnk|8#Yp{#goN&eg${1-JQ zV3u2p+qatk#BTZ=Z-4bJGv1A-FJHx^J&P_5h5@CCI?j23D;?C*z4(_uGXPaLeQ!Uy za^L6<@CmQsc~S0`W{EXC_^0!yDsj&5HWi_)-R&Puw7B|L-kf+|!B@`EJiM2m|L@1- z4ldlA=H|@3RVW6hQ0(%Bk&yT&?6{o3J<4VN8W9d%qPZHEmM=Rq~H=_J|+b_I*4m-f{E-kpZ zqb#KD%(AMIo0}ImRY{sP#4fpd;PS>N0=P7HX+&nG*0XE7VWIi@Og|j!wM_a1IW&L& zf&etnyo6|uupgZlI?yta*{`PR0hqcP0O~-Wz zvC4(j)!bUnd-v|iMm@ZB>(<%0iQGCrwZO>Bd&YAG?zOcsioeH(T_)m6naPGD&uy7M zAUKSE`hfqDg)6@7b?5R4C+jYhM?d{;+4aR{AipnP|7dHjRb^Dfbv5Q)LyDOH@W_a)KfP?! z3-Rjj_jcFEDxHwnWpzXsG*IkDO07MQcGp6vg;hqny1J&OrVhgjd`=FRdNMRe3ULko z__{hZJ0EA6G0_}`W%l}K%Pq}i-#^=2R>xoY5;+AdoA1sgb3J|>92|t`oSa^KnNutB z=*iAvOQ7}9`biU<6x^q`Z8x*+sC4@DD?B_w-Ze8bO@D<-#Akd=UR4AoGgCjO3sN%L zC1vXX)ccR5Ei*}7zjzY2dn|k}Zkr)n9}Dg7>Q*~$3{>lwy^^oA->!k9;R$z@Vm4p& z$Qj=9&ECRKhq%zRUrl4KJiSA&>x*&;XaghhC2!pWD)dS(2bu^F#?JXj)aNgGWcfqI zZXhngc!pCxLCkLfmI;yTi{6LGxB<`8;{z^>j^><>aK@0dx=T07BbZg^o5N^T(sPtj z>NAy7)1GAQwncL!!{(NEss8!JkUvp{DBHpbxNUxjM2iEjmBW){FDWrjF1}iY z#fP@B6EfoCN?s=B8WtO`Kp;&3o7&F}}mF;-I%Yr#mzWEWbpXkKX# z2mUu)3k4P(5h516_*R-ZYFmJwK^DpIeqMY(lz_oo8p&H&na4_b>*F=vBR_wd_N2?J^n{BW8ctwW239H( zh1^w0goTB%Wsy}Gyj4|IX@#1FrqWgm9f`UFb@lbeO~F*CM-w}%=gyt8>CcreJ%jPj zD453&?Iy|%4?Z7Xc#Dgv6!6q=JBjptW;9;YiNfx-%nCc0I86`m>z=jjJJl ztBpLXi(8?fCyZi3@r75ed{d2z3KV(mVo(zkUdTA<`w}m{CLj1*oG*+m1@D)4+`@B135$Ef??> zG&g{J;;g543^-Y#yLnqUt86<9+GVBbgws${&NB})7pTsp z`m=d)Oq0?lbl@lnZ1TR_Co(Jy6d2-8PmbPSCuKLN+K2m3Utj+SyTVBPyhK+?DU@h0 zTRn$iO}ETm`h2clxl^g_P#T`4jZLN3fz#6GV`pf?7t);Yz^m2Z7X9=1&J|HnU}NLb zRV6(4Xucd9LSuX(e=?TV1|$R^tCR3xw3B&Kg=@Ar7}i$^b_GIig^}`w^I~-SS%GEi zLd7K|?4f)kn?2Farr74`sZ!haTSI@og&0P)IS7^m?A$oowgbHe73`s1eOY6p1i>xC zk)l_=2~M7CVt^#JldGwZi(m6lsiWY_4f)kdTggCc)JdNhKAL7{W1^ob!yN50yfT48 z85_^cTGDSqfJ;XESk*ckaSvtR8UZWt)Q@|Xrva2gL$S~Vr}N&Q0uxjytudsBibs)%gc)qW&G7* z(iBXudv>gvGy#FM4;?m7r}Cf=>mQt;bZV%w-Woeb3wIzNVh}mI+EE=>M_0Slqw&$# zgyDpYj99Ex>AD;-Z)=(*?Yc28{NO=724g+n7TcGj z*@>bL>^3k?MRUU?HtIR2I5KqrCnPZ;|LlJZ z=cg=|hOvr!&$PD;=A6V^i8>9xNF_~J6rl7hOze2({S9UqI&<`D2BFq(je5vrrQ~sV zc=5G4=JTa;$|24y-_|~HRc%Z%S;(4?WhCs3|ZLx`u9d_NOS6Ldm=F749r zrA8VsrQXK;6UOHa590W|!koR54htrno_2j0w5KA^Vr64%V`FPajQ9i-6386K3%M6^ z=jP>&l-db8%{DhTOX=#iAAGBH+lY#U4Qi;!LX#^6kdrs(E~NRq-d!E4a^Kd-*BfeY zUuy|xq~Ns$HF}oTw=Y{re(%F#04m-n{{0kY&fSbpHNRjb$X0)7WNRDoInnT$nZ5aN zwpGxx24whd@8(1%YfoibmU><>(Qh~$1%uB8DDet3vVHVO!|y)5^E11k*%{fgH8etqDJjkk{(bZsO7YVaSnL%`jwU zd>XaZU`8t(?9(_o9UdXf+G4&*hEU5!v-5CrZf$Re?+;`s(wLaY&v8L#b6L)hV3zJk zT6+VgO?y0F^fjY=z4Bmc;cQn=#X{$n(7L*~0Ltix+Ft}e{P^*-9RKRoFi8qNd%3el z)c##4lh2fr)`LCLr7@olGi}jTW!KQx3nn}!f5x`9^vf#Q_J97!owUC%oyVanF)%pz zJ)nm~S63VMoeaC};mys>CPl;3xe#^?4>@p^@}Bv6?}Bfwq;J%dOYW8c1Bhsp;JTATTm@PA*tr_$yBH1xeC=BuSN}*q(jVFqY#c=YHsKT7$Sscluq)fY<(}X!n{2Wer5Oj z^D`Bb(Gr{J2+Fe^NxkX!@82+-{{H@?tQxt-zdqt7n0R1rz0Od3c7N()ipT7l=Doe6 zq`_V2j?Q40nHWG6A78x85)>(G?(vt`ba#RoM59q?tzN%fO> zAwf?^H#}^at{pvkmy#f=v8AqeC)I0Y3t2l3hwkx%5q7e+*4CV7ewSQbU7@m$=t$Z}v8Cv#fv%|e~fNn<`#xUbD=Ds0U{Rh}%0JU!W)s1<&BLF(%G!UP#K zLhs@3Ra!_vQF!%T@*+|ntZF1`ji}%Ag(?0x4JpW6%gkH^ZxgT$SZ)KKc1sJ3qoxQ) zgmv}Zc~fv?GHFy)mVHY=8_%1~W%+c&R-23UhvE2wU!1_5s-hxikigW|B0t<9Q&~zZ zrywC=Sm{ZVCL|?ggd}7!)Fs*n59s)o-zEsL@JOU0QOC)`p7V=~`@_wQ-;{!7lGM(H zP6OI-@BO{oH3f=fSBhqtiK(!i=Tov`m;B=6`0)TWB4Sl--H2t_h>eZqbx^@IZ5(CD z9(7Ba9uU>IkF3W!lO$Ju=6}oq?3&1;BT7n<{-=ritAC!|{L$1{%Y_&E{5bV#v$j@p zbF~c)N9W7ipH;g)g4l8>s&KLFL!0CjTO}B-!P$2>&4{WTDny4~#abY_z4?d3H@TL1 z+lP9>3_PL%j@HqNsa0Hf_g8!Fik|aDZ!c&3Ns}2EVyXM^EMFjfVUw(sj#HoE&R~?g z5C6?G&BPbFjQ1v@rGE6G0E5Q4Hz8uD@1=Rw@$n{$fZ==NZMEHUs8U1q%ez0CNI+s} zaV9bR7wiBq*UgYmKFc(6iMN0F)8n$6YuTnCXysPvHM~jZ1|C2r9zA}%`$`tv7Iy!% zaB<#$gWp^~DrfDt1teraC{lp8{QQSfvqg!E73IHZ#XA3=sV3?b=|n{CKYH@;$wMIq z1_j^ykNNlzUrSt_zVbYNtN|nPCgR;$N0Z!ZmGGrQ^l&?mJkW+{wmcS9@0De2@qc$2 zTXE*^b^G`+*nOH}a(-Ek0hZ6FAB}%#@!tXu_w$^RiXDqMDFcxr^A?&f_*$I4W0Ivp&Sv zukzw~@Ssq=lA3Cy#J2aVt2Jv5&kA2>QssA`V*(uucaSl~7SE@0nrM>2PAQC->cfI3 z&iY`5QL6+`-!JX!niI%HVIM8rrYa8n4#8{zQY<0(Cfqf}t6bvNdL)ZF%hK+4@kJ-x z$$-9jn;|hVv7MFG{Xl3Py0{kNj9$9UiD^|bL>`^~7Z%_i0(=?z!1;-aqd#AW-&XZ}b>H&Pg$?*HP)9*nC9+@cM{A(Fo zl%aU-rsw!ZJdHw<0N;M4540qDZ^`Sp1PAu0<&dyzGnai4zowireH3iK+Sab1KU3XN=E$U+Wt2QRQ2&~T+~eCr{FEO$CV zX>~Rh0Rd=K??ewc%|s1Q75JCrL~`*wE_WP}J$MDy<~|1|Q(wqLmq2Ro1{lHi*f5VW z>6{&zkoCvm8aG_nD3Z(8sj=2z2LD1OBwVLw{_Bcy0)_eh15T&9FOg8Hloow6D0fjv zIe%bkwriVop@!mH)^xso;;^gjM0cYAHVP~2b7I#|Q!5WKud7{qBhoXH!FNxJ(w>FL z*#jXD>;W}SOA>~-3~PKURfdcK_+KtS?)=+2@H(G-nes>=j zKq%wkt&$OevMx2|Jt`4wQx&m_MYwA`^+adPj>+D+RBLs%_;xN;uy;*HhHl;8Ke!Bv zcXl17jl4>HplIFWsUF#*zI4gIH%sGmKJn=N_5vptS0o(2wa%3wbu9c(Bo$h}u-}f0 zk469cJIla#Ho{i4t0I%<=A*`cHqSQQAx!f3ZfZZ1wrrzPJ9_vv#=rJAKlu3&-K^dM3>`v|{U zmoIOuWFfO9E`3t#Ns*r=dqX>{ja@!coGauUErqZOmbc zmisgXS4$GFk>xGN`AmdpQh-rRq97veFHzc5HTh+AbxoP&@TY^tJ|(6ZpVAZlbqUYD zPKsI2he%8`$izJx($@;VyPlAgI}CqM8s)QA8etPV+{tI>a~R7S`&^Ps#(!vm$ngjo zo^K1&Cyy=|2WN?|TT?e^M8}}cM9Q10x%gJ`?+m;X4jJ@ZOyf?QjG}jzK+Ls|>~$Jc zrQfQ25DEYLrb-HgA3E<2{R;NPg7NP?h01Kur?%wtkV-aX1(xW|eA8S9fF_mw7KMP)`2gU%!r-OL#YYO;kZ8LftqbcL z=jxPKy?_4;2>rSxmbqS6fVIPJ@TA~0E-DC@|3?1UE@?Q1bGMS}2vUd3w%Xq3#B!Bi z{L6Z}f7Q@maBzfL*nJ#?_!!G{1_m$%aNKm9lO>K7@}7d}6VH>GKc9n7Zy`KKyrB8x6H$vVsM^)cD?iQP4(i)BU=yUp>ey5@T~mgn3%8))I+!7wB}EOyByd^j;Sb}3MdEkg6) z%Au=GUztq~X6|F{VQ7^vz-*|aYi1uY#&G#ro6z1)Cz_u( zm&CVKcR*OH=V?|}*mwP$-FR;Q>zbLwEeblmf!a&n09;e>Ibvd+Nyj+TG)2-GMHIp5 zh%P8$h*MW92Innh_R*|mb^IX5Xv=bgovrWS5EIFwm*H_h${|mY;7ao(pZ%2EY#n0g zG5-Cq5h!>gM{xs-oB|MMD0;ec6c)bl;l^Ti(j6Ab!AjY{)C_jGgM{@2U92%)|BPc( zBXcVAa~GGkIx$H^pr9K~=+%Vh2JL&Cs1|7%WF3Hf>0{7_D@ltx}&^-J5DyOctXC;j>* zBVhSAr<@hDG_Rmme6gZDaKLV`w7_n=q9iBk$Y-Z_L*i7xXnz1^5HrnN(2ySMn=#6x0ZTsweb_ZLEB?l_uiSduG$v!l@J>acUBWqP~ z#`)dn1}ge5PO!cLX6Ui0cjWDO71ZLV^ zM?E$C=92WBA0$a`JK>uGaabFz+f|x0Bpu2L$yb`T zC25szGy+HznnyXNp3E!NC)%^}o(m}=o15Ui(z%-S42dS%F|E$+)t|{g&Klq+o3^al zpKggUFA$$q#yFJMs!M0+y0DP$IYiQCQx5Ge=P|f=-|Qk1D60B+?L!~{rCfUM!4QAN84~ zLFb+S_Nx5PUcLXh=S75_pS%z&gy;vWl3v$WubN{vRXdVuchWnc2&XyeAp+0VYX+sD zCdwPxTOX+Q5{1#7;DrNrPH4EKUK-%?h11AbzhG-;Cvmdh{ym@;yVzX{_Dfd- zt{UvooCw$jgNv(YRfNRi)Hh)PAOV6vcsh4h*0Lbvrv#6-#TTzjBXGRoJ zvDs0QvG_G88#2A_p{%{UPRRRntnBU6kIzD$)T*>nVEvO8e89QY6h>IP+*j^1wtVQ_ zZ$H?-om1DsE9CRa8H|Rp1AiTjOZ6|TJfkh$80H8nxODo&dH9_gXv`eGnvK{Ww8*47 z2C~~|wv~VpeE(GZhGgOs_k4{YndL9X-{*WFCAH#KQY=@A)etns|4~`|s3oAGNfy-H zok+)#k&~q7XX)h(fxg7rvpXWzDZFvWL=YTId+i4`_Cm8QV|7|w_tyr5k#|Q$hcFG2 zir@k>v$)wq@Q^ivweOq$bsMTWAac=D@mxDM+IBK^h?#mO{ySq4Z z8^H`WdeC~Wr-CSE@NvBSnGZ68ZC(&AnMb^&!WzBE2IHqY=N12{rk1!L8F zFS{eiRCt0y0^@}ptinH(C?*JjG;?8fmg%DU(yR6QNKncjD0G8^^zLK7BHH*T#wdNC-@er`II!{dGzVJ#X-k z?aSAm`x8bOU%HCo0k?fZGGcGsX#%zY#H~XM@*~k`@RiLIht9Y zk8QR|^R%k%1G!z-`M<+yrR6nkqg>Q42xQEnVmB;jzq1#8m6i^llvM`=Sfhm!`*Uv7+m#*tPv5*1(;5mk_!%CXQ!-E6-)ASHignp-P*@k?Q zfb&e0KJABF$6%G)UT14Co{K00z2z;k-ZJobLuK|QX+%ZA5qfc?NcGIh^LjLT_6edp zb6OmykOH(eX1E2JDZp-BlUj81z~lEHm}uI^>WYDXf6}RPX+QA~N%Nlk{g_L&2Lzyf z+4=n6l$`!nBZ8ErFT0f7rgDYV)gB*Bp1urCtAl&ae&nlGUcG*~#|*SEv^hPcbeDZ0 zU?J?O3Mfbgf`+L?!Qd?_Z}hW8*{+=~kMj6KPL^zs#Hjbz=c4zsEm>pXiYD-_XfoHp zDCw8;dK?oWaX%Ptu1L*$VS8nyjrVATP*-+Nz9!RMT{%BhCMJt3X%VX1!xudte6VMmRX|JwwL?66I@v6wFBO&+}&wgt+80a z08m=I)~ngiq5nu9^J(np7K=f?LQx}voHE*SN%Rk@p3Y~|~NxX4JfpP#oiYip$ezO9|1o=;RnM6cTqeCQl#@PU!I=9mxN zag{5M05@A>yEI+l%(*?+PS00DMNEuXYg_}XC}}}457L!h4FXAh{T^)`;xz5`pFiL7 z6C+|Wnc|*C0+2(2xs$zuUS$Xbl0roiZPQ8I5bexZi*-*O4 zHE=5%>F`#aneL^9)WLvNYtZ4f@M_}oFg>BmG1cDt1e(UxUhf~9e(|ch+RP5W^AUuS zmpzj+d_X}QJ320dUv=vcC(U)^OWkU{C9J4j=!GN=_^2(f4pY_jtkK6hFB%E39bcG!JCMp`A?dZ1znHD^OVyV%4l%>i2N0(&Ry zFq?Qd_yzy6udWRW9B^rk7hEVa-0R)o2lcxdOJDSHx%m*~3HH5A4L4!t zqN4U#+8pj~wCv2@!>40@F5xbFN1xn%I*)tM^0eYo0g3!Y7T#;E5r6Nm{0!3BeXV5<0hQIna)TCOio1 z%deXF%iP>WX4bg+zE&Q$ozWF%!!r?a z3DL{VWV`dgqhNgv{V}JsGpW|=aP^{9rj=4=^h22ngBokUUN*%90nHj6lad71nCi7(~R70DHg-Wy(0mRhA%W)XY4O})u3Yj%Qr%(zeh{Ozkq z62XfOb7sLfn?6#sp4;VS4{m0j(w)#ZJ0Ec^-s5IUg~a)_ia?WJ zLBGsmC#QJa1=Xz7(mz*t(UK#;23MDwGvE-$t#uEX6d7p2Ydy}-$zuKche4}Gesm=L zN75+!ZtWoM<)40p42lz9-Tm!F349GIaj?UXk&&&9djHsq7XkBAc{#b@|B>dlX^ z9t2nRW#iYcUliWzY-pH^Ik|8i61h=~np-wgY1B-8MKqW8R7vOl&^@6Na8g-Lc9_uX z&k1r~;1NqPZ%L4LCuJ@UrV;K1JKe;4A|<>r;M?AnwFs1o9j3R`acPY8g6f| z{)e&jC5=r@@iE6a$hox4N}G*mR$gOeBZ-xJAgNa3kXO4N)1Rf8bxt^tkN-~MH^oe^V)3$Jv}@|D`t4S=g((_EHz&DW&`WM ze_6QV{KE(n6DfD8pTy-hfLlJM2bdMi%*f;#?%mgUo$)?j@AQfib{$r)k|hv8=w2Av zl{lptY&QftwyIYvMf}s$JsRj4NPm(OGWYbo%*4KDD4iSDYWQHaJnsGNg_CGg<-QP# z(JbQ@aQHyl%4abt^z^A+k3iR+55OXZC38#16`B~H5xjxQg&$g0YrlUL#s)HBF}jNY z3uA@nn$DptwFH1e$0}YtWUR!aCx6T-BeKl2>uZS`HRSv1X59$~05-t0P+ClbR7Z1y zt88hbVZ6Z^sa1fcixqocxJk>jCG%CQ$Qha5Wt&z{FY;-14H&8Ns8|AD3_z0ibbCTk z=jPxJFpED%?l4mg6{u()6rP*pQzQL?V?njY97=dqg(gUveNy#W{SIXgl#!aKu%7}u zkM$n*F7!-TT2W81I{vBQ7rjpT0PnL>=cCb|(LFDb5dF`eXWRMXn0#^ux{_WY6nB<1 z>O@XXh#;;PrbU~lV?V4`78V41)X>1Gy#2hnVO*!LyJR@oirDnk@R;nDHpndkRE-x7 zF=9j{w4iVHrtj(XXCWsll_|o{bF6|RKY^udD;=rkmIt0!olRKOM=gEAJogSvFEK`!6OHM<>lJRs-^vkY zXI(u2@LKK|1ls+lrvss6Tk(%+f9O>=SuJmE0~W{jfiMo==>@V?UEwmQ@e_;jk~}TC z_3@Mi9{dS!FBA1TsYO4TSqnPI`BVv%;ufkW)@6`viwD#LO{QK$B$jEEPUAj6bgJOy6yX>R35U2G~ z-1J9{Y6&VgH<1P2tUKS@>@q!{zz8Wdc)D?~Emq@@-_WyxeD~RnwWz=QiCCYXy+!UW zb|AgrHR%#mxqL8W5GmKKKh?H-d7$m{rCUA=Dp={|E4#o6+mbJ@M4uq*Ojqo9*0`cVk-2M1X#!% z@e1}YJpV%+&eC6(C}6m@#jpZb&Ef&f93rQDH4tomhW|$l03vh`luLx9M5DeQRr*`_ zJA+6d!2umPn3(R9cz&;a%$n2G-ZI!e12)b$`bWPnCB=bu?V2D?r_OV&PakI>sL4hu zOQgG$o}LcirU^ARnz}zO`lQ>HyOf2jY)YUd5HdkDuXeGUaVX(2t}4Z&Q@^q?7tNhu z^mOHC?~*Z(jvPp>4jTQ$KxtW0S}x|X32|`vJu1Y_O^BYN#1^Ql>y{Ng=g?zHx{~e; ztQ-v4>nvN_&6h}5ebZ`}_HCMewUM`+eRwCrasn)gSdHn{wcPCT! zyGxJT*l^qFypDMJ$0&HsXnXJ1a~Id^8>c%!R`wJ7v{2^A33L~jaoWJ*udAzTZ|pz$ zRZ1w$O{aBHz!ORA>w2$Sd)_Oer_JtiI&VsFA7KV=9H%h#8`u3@4cdQ>G;%$Cx--gE z=ojj4VF@+v2@iPV-y>7bzEI;}!5kd5;o5fA&dmE@V}9|3lx|>O$mQ5Qw0=rxMBnqjt&9VmYLZ1 zn{N&B0*ES`5DB zt>&XD@7}+Y6<{lAL5?!);2Ya+o*KJa`bTcl&`08`8@<0j@mD9kutrSkXtqajGHpZ{ zbNh*h9#+6xU^x`iymrT(-vLc_^`TNieR2(UWp`hB|86HJjJfbD{lYylXnAS?NeVjw z1{oc7r4jnTBGMra_<8?dX?(;4xZ^~7YYf5E`&uJoV?gtvTW=@%khi)fUoTf^5me>z zLM>mO>3N+tWdV=+Mn95ATWU_ApEn(}yHdd59#q17n@-49FOUfssj~FwvFSXgG`*KZ z3-B4_Pxk=%+;s0J8;n zsZ~ecTo$JJC`cUw>zLN8GTV449g+~v54!U}o52P}WlDFGfxeW=)g}7UhmrZ?)3X`o z{UmqqMje1#NEL6hdoV#VactbCnyc<305TS(1NL+Q)|2SCOjRFCl>}sr~R*geLT+}hKvAOy^k7&?){0cDG zAYiq~MGxv2IG-&hSl835Wq+LfM{JH8_xQLosJYM{`2nQH*HVPbb7Ny-ttN^q-w+h0 zh}XGZKq~_Me?;cblFw!&^l{at(z0Y4*64vrI*`e`ukIbyU-guU_?P2~yp77TFRBzl zILAdc$5w1U3+j)O7jf@2SjfL}#b=()H<(cU(ff5y{%-+`$*{=CvX9*qM}g8qfNGLA z;qIQ){u!7}?9dH*ge2|NP$+U}a59RlA7Q2e1q@*_wtlqhpEI!3PAQY->%lQnC|79B zuP4BhGB9aX~n`=T{;9O|ZpWYP_q1 zvP(c!ect~Ee9B;xO4yKm^y-A>Z6}x88lz>1XxMP1mxA4T;Co&$>Zk|7d@Q66P|MCX)5z3V2-o;Bo1W@(T#^hAHLs*V~Fa0+in=Q4cCv;?!u5+l!!6us)q>L)hXL?7cG-ALc+n3w|J1E(b5-Dp;5K>_t2 zpgk2av~yDBTWXJ$Y1ab1L5k%;{&OkNV8vY4!Z4!UaD-`kK5wp9Ot5fZW{$^Ax;+U} zV~AM+B&mh%8RIqx4oK@ zV7ZDdh;GdikdSEXfulSZPx+6`&`#Kg0z>LF6`M(XmY-&>RC6FXa@TI88(hBZ4btRZ zu3YaT==XkQN6dxsmWXhXYWn*VDe#+7LGzt^{c6DESW;;JUK1GUowu zOrf^N&f!dldj3@D`9+!#RXAD%lK8$xqL`RCS%f*@6xz`MQ1{!blg=2pfk9+yzUy~s zlhv*LRamrJjyyG0-76*jSFh47mkMt`Xr-a1UW{U>0}X#rj8~SQ8N+*j#h5x060>~k z6E*`O`>i1N#@u9is|A!LQmdsOe#N2B#W1=#C-# zmdCTh;mJir^aUxvl<7)tKH2p=7^lh;B}Y}&uD=deV_P$fNnm@w6JBEbaq3`IHtP*U zz-qQ^KdypBTeEI+iaGNiu~|>ten*^u5_QC+}Zi~$dZ)JO^@;;F12 z0IQSD5cD5NNn-(Kj20jG3w<1O15_H(`@6gJ0EX1Zw%U~^G}fUDAjiQmPJq!-2t=<8WnjOXw!S&yS4#Nk%5<|QS- ze+snq&p*w-GiLFtBMMm+u0fe7UP}NLbbmZ2_Qx`qG@&U*JYW7a0 zJZ-=@i}1p2##e23!5CI;R0@c1WhO(@r_CJw3b|=^xSRyft)?7%(|ByTCFb4eew^bg zP#uph*t17+{5LFH6q_g`2cc4r%cItiZnZN06;b-*i!u(zw5)<%D-0un)<+<1ZDV7| z9`eBRLe6v6*g_%n7d{E;2KdY+v(ap;ir*K_-2R-COKdJ(ar=3IJ2|D70H{~>)Q9?L zYu|-#q{r+qeY)}FYoW19(}U@mxjykTt#XLa1YL0@EN8Yx5FCB+Rb8IwqV z8XC&1DbIm!fRth;EVLo#LN)Jzs*~*C^a$(0KbPFz?L{rhbYZ^LGzH{P*~;~0RuRVt za~b8SI^54|b0GC!84|RH;#zR%D1VMVkD+m95V3iFiHFv1fX=0u%i`DCN4e0n@T61 z!aV?#5^8AE7AHql9vKdJd03F#C`QhhUc}Z2xKD})Q$K~fH#IjKc56bPrWz!gqJLQS zl@Z3An74U2IbUm9-MxEP04O?x?1aHsH2*iJf}Wto3P|&`X=o6CvaswL8J}D=qSfS# zWotnEE6}TP*&d{OubrV&dyxSPFS_ z^OOS$fiAs26byX8mYx3mn6h=`LzbtT@h$J`J4?lKmrI)s4q92IpO&jHq}kdOO;y;g zXa`=143h3EQY}P+bzZSc|EsbuvIX!n8T|jMSyu-XL@qz_2NAhV;l)S5Fzt*lT@I)$ zL^+>?V1e&g((w_xVi%bwsF)~LSmAZ-G72uV^d&G^nk+d7V{WI-Nj&Mz!3l%y>dC>~ zopmtR803|1T06L+UoT(m2Oka)Tcd~^-p#xHgNS@}dF(-gM)B^^Xper<$ zbzXl}+Ari+avYgW*D=?CG1u}){+YRm(kbE}C|(NVC#>}ow7%-h`6AQ{Mx3{Lw=o@y zk*w-68>KdFt3Z67Ysn!Ow6~%Q`YK@-;<_RgiF}^FM(G4?wQ7bG+M~Is9v+M@<$z3b z0*q5Z0Sx?*D1q?Rz+gV=FaL-I`MGaXAE@giIrUye)WlsBk(vx(2tNcgQGUV4)vlPp z#nHc9Afe^Ndv$6(!2{_(IGA*z?!9?){-7Ptsf98EgJe_TL;lgu&wnjjGywDt#e zuyN0oc><6ufNla9TWVEq6P(bY9mFWl?C#eg`V z7d|)(oikF5`;Ql$L<^dc)__I3J{WT+2bxh*dgi8g$k?LT;UQy^{n}x=ciX^QnM|(5 z3f^&?`h8a;S9uW#7we8aytex>xAeV~#f*UgEf~Q=#~NGY!!L~#Dp3}mkQ&-H4a4UN zJIFOVc(Hp9Uw3TEP3a#ooS4CagwgD{rhm<{IUB$g4GclUPQ;CP*2hXCU2H+q$O z+;^gWkJg;alr)muyesB$@VWlA(C%UzTM)PcSB@|r>8G-;)~{Z`limBOeD57TSLX)E zsencGbY()r_1zpx&7;w7;9DF0p}$tP4%F0234CT_zRcpD=LiryG15+(Lc__LS)J98 z3Ja{9T&{7FD4H-G0OEN^yexkmX>JwU382-){|GR#t=7qV4{l&5||PHU+&*hvxz>)k8l4 z|K0vyJ16m}hGvFaoR6ug9f4~sNNj)=PZJo=XJkLR_b9#A8<}BP;+w5fKASP%24<4` z>!Vg}wWeKhLnpx4Cmgdt9Ja1oV}t~CQ#8!f_#~E%d~GmSc&>8WZmiZZB`mD31W7Zw zqbF-ws?Z{)xf8hxBn?%=ul~DBfP)F)D%N^jy=>*ZZe-Jr!Z{tN5!B0!;~m$B&H?s! zp(E<2t47B`-KMy6x=HSbw^*xjI^IvY)!#LNgzsx}9uuElo#Vhr+e|x#24sD1#Y=IO zp-Hb9Ls5n{$bHdcPnPd5Sy)=Kv$K=D5*ThN9LuCe>?FW;ca}QJ%{CS*5{~~hHL;Jj z|9ai*UmT&U(=R10eZDhhK@S%{YwQM~Y+#Vtp;0FT0f#n{aJ0MVI?%D#IzLpRd9}?i zyk(Fd==treEi9M-weP8EmRy|FPTU}wcBM)BfsohdXx!PItWXPhy@{0X9(RcmfK@~3 zBBem`kh7EqcHa@3!_bn-NWBcOpdGiK!^|c3sNM}<&m>rGQtgII0r8&UK1^>AvnGfX z1bJLUm!$<1y;2vRn;CfzRC&1h<$C}CZ%lyx_cWW>(tMepzmnffcx>^&-9*>T%e*j{ zd6oa$gsT?^9%PDz8}5=Kftkiecn$hkey8GhArso_^F7hpPyHfO9`b050ATEDTEbZ6 z@jKh9ob>r}B-@>lnnGb7x^wRwlz?Zf7t+U5U z_X^eO`oWZ-)*}%D8!I+PGZlmB4U^j~AO_K^@ys*O3UEQ63#&u?FY5ZUj%Y5nw{pUd z;(nzo;h@!@sm#{~K_e75mKQN@;31LvY#D`0=LHkR5sHUAvdTly{n2xgbKt5_e+$g6fW3*9SJ}vfF;j zg}Jv*7$57#OXi^VGo-no19+Ev@2-V&7z?}?IS3e++v)&Bhy*u0!b7J&GYp9WgUK4R zQK6FdI)`1-o9?Si@RAP_THmc&XMoRO*U{oF*!M<5p%OH1HhALPf0msJ=Vv4@70mD zQD4J#LVOAv%SG(XI^bFz%4H8zyB)fk1|kgTTgkZXqqu|!)Ivtf$(|=p1!4VpskF|E zqenhKzmWcfEf`p&qFp-$t*0hHL>y=OS7|=s08FVT_w<0K>J2rLJxT@sM86F*dwM7z zH1OyQ@3!g^^<4Y@8Z3G)nI?~O!|}N)#o0hxxN!dTMQ4wA?{MpI-`^p?4?j+%?;(*tt)_u5>6wmHmN?5-HyPFN3ad zMXr{n>g>rv<%k^|;K-Ac@8vv%1n>h(1MKF(TKz=*=9n5ac;#0+yawEu3ng|@on03V zv!2J^TXN5YZ05T4$;KuJ8J@5@OjIxin?;wGS3n5?rIgkdlb*|(ZOm6{|^~}bue5z3eCl!VtAjRw{Ejt0+3HY#L_<@n-ub2AOd=QGZvFeQ}$y4ib zPm`8J{r=_N62%p=>ybPvljB13o*fkvAe=-xFd<5BV`wxAl#LpO>E}}t+(^WL!KmIf zXVo#GteqK|%gXFOH45rkZxIHvehz{fs@lgd#JDR~s2r)5fqq8gUIX~+ijVR7KsFRg zC!R368Vr9k--gufAN|KA0$QL?gYG;m%vH%xjh!MR<6DXid5rG>{BBZOp_HLzSUI)H z4K^hEY@#JcoL~+X1n)}D_wwcZbwx##@b6_NV*@RCQ+M~;O-Qqbtc`*r*KFJ*hfB7xtjzq04^CE!BsfCu%h!dZFC#I&#XSdmLVqw%a*OXzGky z-SQuKL8YUXP2Wb+>TxrGfIR8LV&vt4o?fF=1{hC{4Lk{m9qdVkly;{wCRQuw#n42yNyFH9d!ugExhso+{_8o zNf8_$B~)T6#v!+w2TiFua7R&YI*Zl=L?>V&U%4fN;ZVzidiK;ef^IrM_VKYu>9A%G!Vy-bOl zv4TZJ?59}1Zfl_mf=3N8;nVs`DP<5PSC#V-b%2*DOE9&VQ9sCTFWbwUp?SGn{jdWHOY zLvx2Z5s_bQXzgXQfzHx-xGZPq5|=8Ox#Y8XX(9Djs13O};78hp~j$j4G^ zXk*)**qr}n6C3a2v~eJL>l;)i@@(laFB0z(`vt?-CZlU$@{rlxc1Cw{6 zt(#j|)kA z5SS_puQHD}hjMN1xStv6j#{|(V%Kr`)E|0MTG48oHZxhavl9o}VI|(RguyBUQr;zQ zVfVds;3*Iw3HG=&#Ik|nOHRcc@SLDAok+$pVAD6qxBm<}l?TmP2NEQjp+YuqWxHgs zr(rU@>x#&&GmU8Oz_xo>So}r-B|s7gd*HPx-W-hg#rasQ&W?qwBjm}_=ThDQ#L+8(g)M$U&9~vSL^ezRuI$> zsYP@95S`$vn@a=|znh6S+x*c6k|7c6nZU;*rDbN5TT5_b*7Fc|ji=}tvycH`QTGiC~T_lRb zt*&~mmhN>}Xl-ot&%J)um*EdR<|L}2zadpet;>lR%!)@#ES-Qv5OV;a z{jvN7Zkr7Yg*Q%F&k`QfI;7>^c9F3v6ipPY(_jvwthaMSgXzx^i`+xMyT_0tr}%{R zgmd<7mlLswH@{ex0IBKQdu3OAOb3FyQHW0a<9rcPrN?qPD~UEnyhm1dy{QH zvpPZjASl+{ujFT-w3e}3bsJHQ6UkM^z85bcyzyxk91DL15go{hv-J$^V%zP0adzRM z{)Y998syf(8f9|Do%yy*ZJrpL{$)bWUe7%Y;8kVFc*iesn--w$9EuQ5_Ogx-Mn;0L z7~Waf61R>9fd>pPq6;Uw5*SNgH-ncUBZ`cirqbpp3P;ABq z%8aq{nE86d1ceN9=#?estW4pcpraF z9|`|P+J=Ws`o^cyXSIsnB!blOktqv+xNf}-7kS+4OHxY3{LN}n~gPT*pA!Bcx z*CkIE1&@*BZhUKMDjgNST<9nE&+CE28kW5ndUx)sm&w}|b2 z{;qi{bHNRy#OE8>GCaL=2cBeS!T;3sLcqau(o?{oQ}ZckT+ni_p2dnP^NLGJI>NCR z&KPFV6(yOVHROKci)y3me>DlbGE+w}v%BG|$WWNekW(USE)m$nJ|&oTPSt1=zT{wf$t52-h?}QUIz0 zopyNK-$@6T^mi@PY8>?k47ZF{E%vRU=*=K+C1#ggO77JNB-u2Q;$MG%t&KP3-0`}I zyO!lOzi(=Vd!PNa_InfvG8xXVT#m!zM_z-5_gVRSyZ0w}ZuAVvLF^R-kj=P1czSLH ztWabYp2IhP$B4d+7k1k3JX+h(8oFQv>K!CqZ$QvguwQF%vQ=0+gkU!67Dwa`*K~T* zoe&x3+a^g3|hUZUDUh!O(;ss`&?1|5+NZ#JRX^q1&etMW^oENL8JFVV9F* zIi(ykNSE?ozbCeG(N$Y1AGCf^c1G*=Nr~lD3g*By&3r0xq7YoH6drkj+0N?0bQ%B7V>>|H9H+}-`F&ArvuAtR$)A)2&~GjZ-~5TTH(b|KxP|w zHF6QLdGsUuC@hz}c^Bjso$L?zXD?~LOKH4t{o42Xx~y|J?WD1QgsdwV z7J~K6g@-gWS&0m6^n4lhwt%(i9;HU$aj`dC>96p%vYk5sDQyCl3rz8DCfy&Eoq+-9 zLg56`lUW%Xr4e7d)G z#eSpKpH>@thd8J;Wm{i;sG@#xHkGZ7V=V@17Qqo&fN1IBF-)^57`M+KO4bW25E5UU(e@!kl>MUP(e+}%f(Wk|HO5L2mcDrg> z(8oOXic4u5WIykrzCI&A)heK{y8+T}L?)NjRBFX$3ik$qVDKXpui}e))LzF+lI%`kDlzU?z_op;C?omVCFrRhCmIcCXQ`ynFUPshwagl zV$%Wz8m4Da^Nc|g7?L&+S4F)=Z9#@1B5+irM&hw`VR zyoH5@{O@-c8VZ(4vB^m=mKfl-+`}(ut9mA>rhb?KdkOXSJz%B*EUgB!Jr#i3)sO=# zP8z!0pR$m{OR1OO|Mb-A!WRJGV)S%ZptQEIZU0S#l`8fB$g%=026X0IFv>6bOLRxs3Q# zSdQ{*gjvTeRZ5a&jIbqj7jr!-BBL=;I$qfAJ*_f+Yx~ZF4r;^BWGb%@UXw0I}}1g#v7#m>bPaL`T{#P58|AI1MXc@SjG;hcAuJ65xnd7{q#NsIxg zK!F{)EEMvv8?kd5ysNRvm#?iSda~!@JfA`yy(fZJ!lOWg zLS%g%xg2VEW;@s;dBX$Aq7m}j1tKj~=OCOnU-o$9wK)dhpdqS0 zNYcGDuh^F+Z+LEf1C~}*p1T!H+;{91TG1{i1+@`x#k@#MQ0^FChDJ}jj%h8h^#%3< z$LrnT4U<5MtoZ0e61a0ACMqn(Cg$?~$}OJhWk5%ScB3-oq8AmsZ5Cn`Kq+)ShlhI& zprr%s%9(BIN0*MjORiqZ0+X3K&)x1gc%_{Q9(8(T$8m^_f4t%9V8MwVE);{6n251R zyGaw(G&QB0mTFK_WrT|-feYyMfeX;kb|?Abi_40t+&8-05jDU)!}>#3Dxm_D_^qok z#YRYIe^df~V@QHM5GE9}oa~U!REa&>cH0MI(1qM0QMrToGYVDO4L&|}EP!F|%k1s*9DTGd(7Fczqr(}Av zdMkSsJvQx0K>s!>4-CKYpzBR!6!h=fXz~8pNhlL@6q_2S^(G}IogLY+&=FB;A9@*V z%0%lI6}!wOivb_9Nw2MC;JF2C&ADYU-QA8m-)5q@;iR{37r=@;|8lTN zNm!At7WY_e7$qK?m&Mq=jm{spS=r&gPVXO3TSmsrBOcAFokhzj$oqeV0X5_IxRG&hypt4#SAZ%G0Prx36v(lb*>sul1y>L}2@yj{H zV7_EA<;0#R?aKCcnN%_DlwaN?gp;ZxsudsV$nidRNWq+4;lcTzpXp6aeBC_05@(q` zQ~Y_|ma82KUU|TspoMsi{NAI-R1eZf;(zhRwXCyA!Y8}{Np?OH{jcw@<8Y&!5V&wxHD(5E3v^hQNY_P`fzL zRYu9mm<*5XMoW>Nb1QLoJ&7_h%G}Wj25@_o@&+Iul=)NRx-kTV5UOQ}?p$QY3X#MS zv#mo}p|ZLvJpA!fZ{@EAsKdhmQtz!f7sOX-^cBPyFu>VbhsBdzSDUAYp%b zk+9RZO9!9104^_XJ)ZI8B(cUHuafy;5}b$7#QNiT(=P;<6tdUpiXWJ~9DC#o+RxXL zLO$~_zuOniJ`de>6HlPv+AmB$&Q8DUyt1c98F~do7d7DX_!7xiU8b1kxSDod&cxT{ z6vUm?2fp}%gyG_oH)|wyK@Zrf+}3U@_+4>PN*ubI!!8~M)I|bT%5oFRU*TY!Aluln zma;xDhUMXdsZ!))-tZRdNmcHV(!0p0DPNh{-SX!jmDOR&E*vXTn9$K>w3<2ykNxC> zie|b8R0!)+nLS7X&;$&0HDinPf_?l#NDeh?qWUFWilCg>TgX}#b zt2<|7T&Q%7x&}`RElW$xH6OAbG^hZr1mIAnEuoci#U(ml2e+}i2dqjid%w+)d#LJ! zsZfQNqk|R9w6)_vCx2tO4n8|la(w{k63tTti++A6ZZq%XbY~e6D*`gUNuTmP2h`Ia*|vm`a=tR%~#+ z6)ugGSw9NkCmM$U$Mk1uZ9rFY7;WuT&2|_%JW|is|IBpjYG457TV0!~anAlm;fbU9 z4)#}Sz^z+UyqQUrHs4W)TYV7<+D>^JiW6wDDmUGu66W%;?jNB_MWvcSay6Cd!^I;1AIfRa zuPR6w3%{}bUaQhpd+M@y_C}Hv@sa0n)rE{x0caOzrWU$m6sX02#IwG@fxYPjkun`H zav4vLWQnnvA?q3$EP*=pVf(M63w7#by;#V0=k;y}SPT6k&*~W)86B^;x9&V-1DXxc zs8Mj&sZEvrRd^&9ebda!Xb~LdRfP6q+710weXpdK>S##^hrI<3Y|X*3`e;^9H3tClk})h%7I@Df`n@ z2-S8%TGo;Ds17bSye@NZ!TcD>_Lq-`3IY)q~O#AE&JJiMI4CUmu~i`5p5B z!EEPNo5oj$21Z>mH8xwVw;YTbvBLB%-3!YrGyet~ka+=rH&UOXh+~homo5x+F7eSS zS$=l?Vl0W2k8))3nb}E%WPm00S#QY~V1sr5_xxZ%5Khf&ci2mypiq$ivCm5k)t_v@ zE%Ip5kx>+xo&|>YmxQIkJxph{*VH{kvb_rZ>eX$M&vzM#22?1X;MYaQxk?xtgK;kx zHZJy7*2as^r0M0sE-5$nj9|VVKF_ZP3<(&~Vm#<+M=jU2pMSdVZw#H*vOTQ@L6W|? z8D3FdJY>RGU41l8^GPmY&2vN^D`N05>7;;R=D15_B?h!UGAc$UR(90$&k#F#bCd3K z$e|6lZfE1bydd(c7avpM@)d?ZrBKSOs?GxES9QMK8TggtLgT;A?v0*%xUPsCEviP`OM z^EJ(IHFfpv#$nFHb2hF}IuV!E&hMJMQ;A2Du)c|$Hl>7M8o^@W$An_Te1Z)mywtc( z5V7-Z1=q9r;DM>Nu}HEtg(xd=g$1U#HZ{CIEh6n|W0%SK?48D=?gHQJN3Rga(u2#R z%ndDLLGTsaTHP9t;~p&Foy3yC#Rp3cxJQA6J@3LKbdL8vvCbqIE>fU`#$If3_M4Rx zrG~n=xg4LksQw;xnwEiua-V*9c}&Y%^xlyKTX?j9&9{{J+92U$>d~@Q;hUhClWA;e z*+x$X6olT(zuEv_Vw9l7p4LBmR3*2tfQ(!|%+e^-%}Pz05rb8xlRd5DYaaY_2~EVK zodcVI)LB-oZ1oMdw?hJ5+;67SLLhQ%Z&u;36lDn0XCx#cF^m}*OC5FD@a0jIWlaGK zb11E7s>0fn8<%34Pm8WzGGXFoPIpFODq0?1VYmp|Z)pFJid_04HCudz0rfvs)+IjG z|M@jsy3|GSKSIl;H@x5fC)K*tEB^_+%TkcEz9Bm$T0d_Vo2ezgP;&5?VsF82UQQhR z9u!bHP%3>lu)VdtqrEMSU;L~>B-h-HM~TwR&-YMHK_Od3h3y2fHpxaVjYMjAqFp;$ za7rlLYqMaf9N4z~tx3g>(Xz8Yzwsf1wcC30UCcqD79;GgJ`*v!CS0s zzjb?;I={ji)-tM-uaiP?^V&bM;+gi@@STCB_h*`j|LX-5Is};L8=7_xe&?ku0QN1; zZq+Xo{#I9g%NHRHrWgG=x@ZKAk*_yuEYSEzGE;e@awn5#q$^V7ZpORIb1R#t6QSBy z+_mQyD5+@VmdQKXyRlvus?STY53fmlVZn%TK4&Sk+3-zhysY=^zS~Ar2qny5n-Z(bOvea@yW;5w`*D?& zJm;1(<9N=_3{sDLN$H*nlAV0RCxd1Ppv+9g?~nXu>sBNdHS%y&{Oil*=IXe%b+(#6 zAzYb3`e`ZgSNHvV?C$!?E{iL-*XwG|yndLAKQ$b3W6aRz1 za87VbfFC{u@KPbZ^iyLtS@Ykw#2Z$9p3cYw#%ki#0G95*`~l=gVvoBf$UK?y{PIMDsf6_I)>w6uo&lz+xn)YlHI!Z4W< zRS07~OubQ$yTa3lUZwNVzlQJBq5O8^8YE89+FL1vaDPa?5q0~9h-Ret#>Q{*a45Cd zJ?JnEzTpkMwG*k6ac=LXkWH!+erxOCFNMhfubuXhTOYQ$Z}MNU`3ZPP$}`botK+As zb1ZW!=I^|fQ#22a4^fUYyQE*)@?h1xuQh+=Vvnp zU<=ucr=9Dr#@+F{b7xu8>bM|A(Yjb?4qg%5R`ISDN&dV@n3#XA4JG$868hoB3FMjY zam(HxMsN0; zlsygm*>2^KJGL^SFLf|M>0!3vtGg?f(2aiRVa0gkeL`?eg+4xPT78o495+RUVh`Io z|B?6}hi&VtNG@s`U)Ll302!qaqvSmMK6><>c`AQYUXHy}G4A!~-|pD{Cm3tCV`yW0 zu9a2o1?bhpdHLn-t#`lkIhQ|K8!K!)r0Z6lJa0dn3b2AaXn&aGSWd0;)JaGSZDS={1rZQq$QFkZ`qqPv%aeZ^8Jg1dasO%{O~^fF zx^h6$I2&$v``ce{v17NJR0U28_`J&JYHiaWk6Fs>wF^gBqeNC?LKFr72gP- zI=A0++PmMEN$W*BL-XGYdH)K-8{Jg0fq4z7oehw+W!WS7yx%0#m%QZXTC2;^4-RHV zpVjkJA(c%0lL#NQY2>sB^}MbPzuvlcw{^2U7YN()x5%1Wa@T1n@Mt*{P%ASLa{5ax z7DC3G(!<4&(8(WLD`z zW!n8+eC)630)^xduZ6|c?(BR26u(NV*ijM)(eSl=WXq8gxIAwn%@HG=y7e1sPAAIZ z7hL|GSf3$+BV4r~2|;>_(lUL#_KAUTSKIZ0vK@e{N8;Y0%yBQ+%b?Ci7oRtl6WndW zlG|yiC1zfGYy?wq_IZ>v8fi^9-oKnX&sSG@oLZ~maU*yUB4KAMOO=o-IhG9WQx#;V z%~A-h#BvHW=Nw4pBDA*}{Kcl+Pj<&5q(wwV&rk?>*47ZeZru0k$W#i$);H%-9;r{E zR>sc}-njJK=dCKF>|BLEV~3ohbtRy;)ga8{e2-vhaxxIw7q3<~r5qFe`t1bvw^f~N z@^S}sU0gCe4Hd*Zy~sS$$+pkW{kq%xIhlH~MUO|tID5N?R_iBN1)&hM`^K|!Je{zt zh=Jjfs@umT?tlE03>T4`nhShT)O}j}kWlhtWfe{4Iii5RF-i~iQ}3_+`Gb34L;~JC z!A2xH`xvGJr6YHn@fis+?HXPpdbH`z!nkypbJ#>vxqBzj>#(OKl1Z9)1AMP$(r(%y zRC1jQdQqo_YbobNN$bxwXc6@m%eI;R9pB=m&W~#Ue0%fRn`()--YreTAD(=amuG?v z!&oEBq*(6_Mmn;Zmv7kw)VPbXCNpD>?+Q-HR|DIr-JPHU=E>E^eVLhe(!!ru(h3xb zGJDFld*4!@&3>%y!vYc zGn$r^CBB5hz{Sul&HlW9gJUJcX!=gl&>tVc+US~6C>)r z(yrjJ(5>j0)D;UIFg@8{uQEOPizgf(oIt#AY_Ja&l)>(m(12 zYg!n&gpduhj;ZG{NbRDXCE7@hB>JJT@lIHQ^2>3{pY+|DTIzZu++}JClDPz8?(PG9 zz@+(oPaOu!*E=Vg%4}y>b6PQ98ta#YcXM&&O)oM0S24tLzEzREKApPuM@~u79Pe?qaQ`@N zt>D?DRwHI@jWcPqcLjqq!Jv2gS_oWKTVBYiQ z08D*5N3L0HE#W>$vX4Nf$MNt?HRrQj^gkUx=>7i7%^9Q+V)|9>q4q z9xr{pe-^yv5P5{ln6VyzC71ujc$X17QcK*7S=7U(LO4OOW#SF%`~X!md&N;vcBXPJ)8}H(4i6Tr zY97Co)YHtB0V0V;Qc3!oS5LK`Bl3%~2OAnXx2ztS?t+hKm$SSq^rtw)NQX|q6aPMWlqhdLkN$vOGMg>5ws-w^ZWY)OLpuo zGZsCM2I5Yl8_rG}gWbS{w&{a>TTuxl1#152%ReqIQMZv?uD4EEN*{-hhE%f@JpbB! z{&Od~U<%SzR9ejU`nf1CK4Xb!YoMfKKG3p;WKB@FHk@Ke_|5rV^`|;{g&zoE+Kp$k z63IFRho5I+HE{~_#`(z#dtL9nEK{Z_$=y;wl)q?M{6DQ-X*^VM_aE7pLiU{`JK3{^ zv1M#y&j=A3Q+8QHlC>mzC}uFm5FrK`B&F zbsLqq&_tVegXEocKf1mYge7qfSTz4kQkT)yMFYHdCbxcQsAcNQ+PmclUR2>H%J*Hb z)F?ymgy;MD{;|a8B~cQjL?tn0O;fz>SPt6EGOuYfbycu!@GPM4j*V3b$f?#o15a1& z@eS-GCnnAgr02Z7=V?f=<-#qY@sRdsUmXu`OD-$BPe2dUR+E0t+^qGVZJYPP!vTGo zv9_XkYqUKm+``Aewv*M<<6#)b@pj==oFWVxlRBc?9%GeWN7Jd~x*x5qeD&VVRl{N! z=lo$Ls(wnU)9h9n2@uF84RD%Ia*kpaM}JWm8Yha1S-1CvF>}_C#+r7z&>UDK_<7-F z2fQhnZW%1z)MypEu)bBNv_4tCOBV2xngoENqsi^I3Sf@G!9offv=9+LbN<4Bpa$fK z@Dn6Obn68E{pY8sKhtCN zp>6Fcb~tVddMCaXfO!jxF4-#Y9UD{(4ow;Oqcu^Wt^0~S@2yuR8hoZ9eH>j~g}`}j zjDMy80@1%T(9yCSZ#=4dlNuIV@$QWeHIFLUiM7#}HXOPNI%eAR!T@L z4HCn1HLZ+B_Qv+DOuA;5SiV_A%tQ#uxUl4Qmu{BxFk2p8TX>q1-xb8k5p7QF(WjND z#_8q)5jQBL*Q6&%pMwrMz*d1D^x9awWiK!Y#PwLO6-hiQgj#6(M-L7aSI zbKQGzS%s3489-y9kIn0KER%bFRY<8B-ky;7)2%3m(%Q0PYuVzLl#QizaPV8GsyK!} zKg`?HLEuP!f7F&%&OP%fYI^zM8B*9n_1k({>t>bk=M6bb9+RPKF0}NSDAEQCy9Z+N$Psax{%Xfu} z=`{1k_u}E3E!FF%Fsl!di^}-PN6S|LQNJfM{VKlD65X=!mH)uJV~5jq6P1yZ{jBut zhF0IVS~v*{3q5cA@<63WW*p8RtgP}BEXW%AGsPOSOemE*O5?N0+*ui_w8W-%vbYT_ z7+n+6>4>$|{gnqXHr^tU1*9JE@gHt$jm<=GI!=0~D zHJOh#Z90b3zRH)0ASEF-ZORe0G|?!YwQ(Vxfe^AxUc_4EN3*S;H?zu8*a@U?mZ!DP zzo56)IaW-O?ToU-_zf<}2*SOJ5=cO;qlhDyOYM~X!t(_ek#7+|%*^JL$(fS;yJMA^ zU)F@l;MKBz8}=_&&VF;hF2GD3eY?kT&yOIJeC-;2J-E_)Oj>AyCrYg&=#xpC8MV}* z?|HPAxZx(CcmTx~gfF5!4}L)5an0eTVq^9Oc;ctr=MUefkoIF>d%^RA{HThZ*`?a1 z-I+4RsQhBz-Qi|TzwhXSm1@_vP-KyXI4zWBqP`~$KD-j z^ntX!iP76Eh`4V4{@F@UL=G5*4;M_okg7$8k3B4}l-?ieBbnU8SPFB?l@L1eaHWCar91zviz!ruf((fR2lmU zu9c@DDPWoTi!z?rG?xkpr+@s%UVd?cM}Iw&$x>{1l2K=jY*au3{v(Mt-~e}br)XAg zDqQ!j%ZFc@RZhcyZbcjnNXf@Fw?YY+vVBoz`#LY#1!Z*!4$q4SD*U1p$345N& z8{Dgs^)cbTVBRqO!rQa`j&}IQ2@xw#LYT|?2Eh~Uwr1DaA&xd5jKFWo^1wYWb$3dO zNtV7iY!j%fzOFSrh{`ydC1%!*$7OJma`4j685W7_xG#i}(%U0c`?D!LA!$x9oOfX0 zy^fylRYs2RtA}EtcLV}^Q5i4MP^4?MrNB@gD>4~b!q4)(_=ekEiTO!&yt>UR+AXiF zwELmGE!Rs*8nvUZCc_VYHlO)}-}0kaILp)L(K6szoWT2S{5$HGO{oIVPGSU6bKe8d zOmm!tThD1D2Fv`$`xpY|`g847KiD?`{Fw`ws1)1tU?E5dR6;^TY|nR^Q&@jI02Qe< zUB(unaBCHn3Y>KZ`;Qn&!X*z^?FyRP`WhCe(DptCdky=F z8USI4aA`?OPImU1KB4{dy0>4E#zSaI z;X?imRN;A*1CozZJ#D)yuVR=Pi9h<-^SxNpAs$!uoE)@dX4`(38|-Tc zpT;%Z#xT5WR!Ip`|9{7U@2&n3J$38x-CTED<=~~%1x9D~bcmngO2?fa`heKGGf&E{6cGx8JxIBSIiuXc=9xf5(~ z+8i5y2rpSOv%AQ=5oT=sM97le-_J*0F)oZgl?Iy#<`z+|7Ci3>b-jbYug(lQlfI1 z*#HC@q7!42B;88noXw%Be>nXUbNtSLAOm5Wq)2F~D-*H?Eu^&bZL(5(?3~wvI%QJW zcJ~HW?rOolK@Jimc64ubATl6#f8qH@#|Vk^?0}@DcQ3Uy1j)y%0Uui4ap(+i8So6*8 zIITvT13Xc0!y^>%5rzZRPMeT}17=^}_++xsxLS@-HOU9njucB>>9dJ|oemiUCSJMp z2!fW$h%30z8bJt#iZCzyVwtEQ_7d#^Y_oGRGcq>=Sy`D`fwe_X{}N-Sn(=kbV@$1! zbX)1xE*?gN?##WfAmzHi0K{kj*HGj>-6MozJ^6m<@8AYujGOGRcA~G}d0Dy~3Zh_K zRVjJe-flh39tV|>^Ey|mUf|-;RQIr`pqwz!4#xU$iJ1|h@Xz1GQ%o?^o26lq#2E8p z`ipnV^M-H5$_C~vnG1i*JmYC(=BZ{5d$Td#>%grLH^A@VALw^(eiRk~{<}9{Ko@ZJ z6|y3?qufvAp2*?hsSZ(N4|mXt;Zsd3JG<};*{r(VRk&X8=RR!Wl?1m>c;oFY{K)nz zTH;2Lu|N1kZh=4x;Kp9<>t;fj+40m*d%uIAm+)-VtKGsaz2?QzoK<@j`YvSZ!J7+w zGP>9lwXvN8;R;Mi+KE;P0zvf`)EP>Kv&HJoMVQ0YZ^vZDrka#uSL8!#F(M7AO>&|d zHmC>d?(IFw$pLm@NBO8t`jAw zj~TGDKM&6P-<5UA);$YFI0Lxnhg}2UIPMjxf!#t}Z~~4Btb3f9UW*aphJzUzOn)7y z3BlS=UsshN=7*&QJlMwF7Nrb|;$T$Y*MV305C=;bs*PP4FyiTCWY3#1OY~+X7;}5?6bV%^(7LDK)}q+TTaJSV@fdW=r%G&G)Dk`aWiL1w9a{H_u=oP zKDPDIFdo75t9ty*%nHBH+ZxzLUlXao$to!Tu7S%P$GM%rD-#l{fnBo6NVA65r~q31 zCl%JnXI4U~RvpX`G~lY2Jsr(B_S(g?YaiT-E)9H|m*~*uKm9V{MSa@mPo6+#f&X*w zw1z35yo>&qegAJC+m{ArKRV*!pojy0P#hcTq#${&j`A_Vy$i<+Gtf2BDF@$t_ Date: Wed, 16 Sep 2026 06:23:08 -0700 Subject: [PATCH 3/6] feat(catalog): project locale maps for in-app language --- .../unit/routes/installables.test.js | 6 +- .../installableCatalogService.test.js | 37 ++++++---- backend/routes/installables.ts | 4 +- .../installable/installableCatalogService.ts | 69 ++++++++----------- .../src/v2/components/V2ConnectorTools.tsx | 6 +- .../src/v2/components/V2ConnectorsPage.tsx | 4 +- .../localizeInstallableDescription.test.ts | 22 ++++++ .../utils/localizeInstallableDescription.ts | 20 ++++++ 8 files changed, 102 insertions(+), 66 deletions(-) create mode 100644 frontend/src/v2/utils/localizeInstallableDescription.test.ts create mode 100644 frontend/src/v2/utils/localizeInstallableDescription.ts diff --git a/backend/__tests__/unit/routes/installables.test.js b/backend/__tests__/unit/routes/installables.test.js index 72fc07ce2..6837ec76f 100644 --- a/backend/__tests__/unit/routes/installables.test.js +++ b/backend/__tests__/unit/routes/installables.test.js @@ -92,10 +92,10 @@ describe('installable connector routes', () => { expect(res.status).toBe(200); expect(res.body).toEqual({ installables: [{ installationId }] }); - expect(catalogService.catalogFor).toHaveBeenCalledWith('64b64c48c4f37a6b2f34c111', 'en'); + expect(catalogService.catalogFor).toHaveBeenCalledWith('64b64c48c4f37a6b2f34c111'); }); - it('passes the caller locale from Accept-Language to the catalog service', async () => { + it('does not let the browser Accept-Language header choose the catalog locale', async () => { catalogService.catalogFor.mockResolvedValue({ installables: [] }); const res = await request(app) @@ -104,7 +104,7 @@ describe('installable connector routes', () => { .set('Accept-Language', 'zh-CN,zh;q=0.9,en;q=0.8'); expect(res.status).toBe(200); - expect(catalogService.catalogFor).toHaveBeenCalledWith('64b64c48c4f37a6b2f34c111', 'zh-CN,zh;q=0.9,en;q=0.8'); + expect(catalogService.catalogFor).toHaveBeenCalledWith('64b64c48c4f37a6b2f34c111'); }); it('refuses an unavailable provider before reading a pod or claiming a parent', async () => { diff --git a/backend/__tests__/unit/services/installableCatalogService.test.js b/backend/__tests__/unit/services/installableCatalogService.test.js index b127ea176..b1804ff2e 100644 --- a/backend/__tests__/unit/services/installableCatalogService.test.js +++ b/backend/__tests__/unit/services/installableCatalogService.test.js @@ -133,7 +133,7 @@ describe('installable catalog service', () => { expect(Integration.find).not.toHaveBeenCalled(); }); - it('projects first-party descriptions for zh-CN and falls back to canonical English', async () => { + it('projects the complete first-party description map and keeps canonical English', async () => { mockInstallables([ { installableId: 'telegram', @@ -155,15 +155,18 @@ describe('installable catalog service', () => { ]); InstallableInstallation.find.mockReturnValue(lean([])); - const zh = await catalogFor(userId, 'zh-CN'); - expect(zh.installables.find((entry) => entry.installableId === 'telegram').description) - .toBe('一个 Telegram 聊天,一个 Pod。'); - expect(zh.installables.find((entry) => entry.installableId === 'slack').description) - .toBe('Your Slack DM, every pod you\'re in.'); - - const fr = await catalogFor(userId, 'fr-FR'); - expect(fr.installables.find((entry) => entry.installableId === 'telegram').description) - .toBe('One Telegram chat, one pod.'); + const catalog = await catalogFor(userId); + expect(catalog.installables.find((entry) => entry.installableId === 'telegram')).toEqual(expect.objectContaining({ + description: 'One Telegram chat, one pod.', + descriptions: { + en: 'One Telegram chat, one pod.', + 'zh-CN': '一个 Telegram 聊天,一个 Pod。', + }, + })); + expect(catalog.installables.find((entry) => entry.installableId === 'slack')).toEqual(expect.objectContaining({ + description: 'Your Slack DM, every pod you\'re in.', + descriptions: { en: 'Your Slack DM, every pod you\'re in.' }, + })); }); it('never translates a non-builtin row even when it carries a locale map', async () => { @@ -175,9 +178,11 @@ describe('installable catalog service', () => { InstallableInstallation.find.mockReturnValue(lean([])); Integration.find.mockReturnValue(lean([])); - const catalog = await catalogFor(userId, 'zh-CN'); - expect(catalog.installables.find((entry) => entry.list === 'tools').description) - .toBe('Issues and pull requests.'); + const catalog = await catalogFor(userId); + expect(catalog.installables.find((entry) => entry.list === 'tools')).toEqual(expect.objectContaining({ + description: 'Issues and pull requests.', + descriptions: { en: 'Issues and pull requests.' }, + })); }); it('the catalogue returns the GitHub tool Installable with its tools, broker and the caller\'s connections, on the tools list', async () => { @@ -203,6 +208,10 @@ describe('installable catalog service', () => { list: 'tools', label: 'GitHub', description: 'Issues and pull requests.', + descriptions: { + en: 'Issues and pull requests.', + 'zh-CN': '问题和代码审查请求。', + }, available: true, broker: { id: 'commonly-grant-broker' }, tools: [ @@ -214,8 +223,6 @@ describe('installable catalog service', () => { integration: null, }); - const zhTool = (await catalogFor(userId, 'zh-CN')).installables.find((entry) => entry.list === 'tools'); - expect(zhTool.description).toBe('问题和代码审查请求。'); expect(Integration.find).toHaveBeenCalledWith(expect.objectContaining({ type: { $in: ['github-app'] }, createdBy: userId, status: 'connected', revokedAt: null, })); diff --git a/backend/routes/installables.ts b/backend/routes/installables.ts index 360219a47..16e689e43 100644 --- a/backend/routes/installables.ts +++ b/backend/routes/installables.ts @@ -141,9 +141,7 @@ router.get('/', listIntegrationsRateLimit, auth, async (req: AuthReq, res: Res) const userId = requesterId(req); if (!userId) return res.status(401).json({ error: 'Unauthorized' }); try { - const header = req.headers?.['accept-language']; - const locale = Array.isArray(header) ? header[0] : header; - return res.json(await catalogFor(String(userId), locale || 'en')); + return res.json(await catalogFor(String(userId))); } catch (error) { console.error('[installable] catalog read failed:', (error as Error).message); return res.status(500).json({ error: 'Could not load connector catalog' }); diff --git a/backend/services/installable/installableCatalogService.ts b/backend/services/installable/installableCatalogService.ts index 5ced8dd7d..c10f54fd3 100644 --- a/backend/services/installable/installableCatalogService.ts +++ b/backend/services/installable/installableCatalogService.ts @@ -25,44 +25,27 @@ type LocalizedInstallable = { }; /** - * Return the most specific locale in a browser Accept-Language value. The - * catalog only translates first-party builtins; every other source keeps its - * canonical description even when it happens to carry a locale map. + * Project the locale map without choosing a language on the server. The page's + * in-app language is authoritative; `description` remains the canonical + * English fallback. Marketplace rows are never translated or persisted here. */ -const localeCandidates = (locale?: string): string[] => { - const raw = typeof locale === 'string' ? locale : ''; - const candidates: string[] = []; - raw.split(',').forEach((part) => { - const token = part.trim().split(';', 1)[0]?.trim(); - if (!token) return; - const normalized = token.replace(/_/g, '-'); - const [language, region, ...rest] = normalized.split('-'); - if (!language) return; - const canonical = [language.toLowerCase(), region?.toUpperCase(), ...rest].filter(Boolean).join('-'); - if (canonical && !candidates.includes(canonical)) candidates.push(canonical); - const base = language.toLowerCase(); - if (!candidates.includes(base)) candidates.push(base); - }); - if (!candidates.includes('en')) candidates.push('en'); - return candidates; -}; - -const localizedDescription = (installable: LocalizedInstallable | null | undefined, locale?: string): string => { +const projectDescriptions = (installable: LocalizedInstallable | null | undefined): Record => { const canonical = typeof installable?.description === 'string' ? installable.description : ''; - if (installable?.source && installable.source !== 'builtin') return canonical; - - const descriptions = installable?.descriptions; - if (!descriptions || typeof descriptions !== 'object' || Array.isArray(descriptions)) return canonical; - const read = (key: string): unknown => ( - descriptions instanceof Map - ? descriptions.get(key) - : (descriptions as Record)[key] - ); - for (const candidate of localeCandidates(locale)) { - const value = read(candidate); - if (typeof value === 'string' && value.trim().length > 0) return value; - } - return canonical; + if (installable?.source && installable.source !== 'builtin') return { en: canonical }; + + const raw = installable?.descriptions; + const entries = raw instanceof Map + ? Array.from(raw.entries()) + : raw && typeof raw === 'object' && !Array.isArray(raw) + ? Object.entries(raw as Record) + : []; + const projected = Object.fromEntries(entries.filter(([key, value]) => ( + typeof key === 'string' && key.trim().length > 0 + && typeof value === 'string' && value.trim().length > 0 + ))) as Record; + // Keep the canonical field authoritative if both fields contain English. + projected.en = canonical || projected.en || ''; + return projected; }; const providerInstallableIds = (): string[] => Object.values(manifests as Record) @@ -126,7 +109,7 @@ const publicConnection = (integration: any) => ({ * form needs — the allow-list projected from the broker's definitions, the * broker it names, and the caller's own Connections — and never a credential. */ -const toolEntriesFor = async (userId: string, locale?: string): Promise => { +const toolEntriesFor = async (userId: string): Promise => { const rows = (await Installable.find({ source: 'builtin', status: 'active', @@ -148,7 +131,8 @@ const toolEntriesFor = async (userId: string, locale?: string): Promise => { +const catalogFor = async (userId: string): Promise<{ installables: unknown[] }> => { const installableIds = providerInstallableIds(); const [installables, installations] = await Promise.all([ Installable.find({ @@ -191,7 +175,7 @@ const catalogFor = async (userId: string, locale = 'en'): Promise<{ installables (integrations as any[]).map((integration) => [integration.installationId, integration]), ); - const tools = await toolEntriesFor(userId, locale); + const tools = await toolEntriesFor(userId); return { installables: [...installableIds.map((installableId) => { const installable = installableById.get(installableId); @@ -201,7 +185,8 @@ const catalogFor = async (userId: string, locale = 'en'): Promise<{ installables installableId, list: 'channels', label: installable?.name || installableId, - description: localizedDescription(installable, locale), + description: typeof installable?.description === 'string' ? installable.description : '', + descriptions: projectDescriptions(installable), available: readiness.available, ...(readiness.reason ? { unavailableReason: readiness.reason } : {}), installation: publicInstallation(installation), @@ -217,7 +202,7 @@ module.exports = { catalogFor, providerReadiness, publicIntegration, - localizedDescription, + projectDescriptions, }; export {}; diff --git a/frontend/src/v2/components/V2ConnectorTools.tsx b/frontend/src/v2/components/V2ConnectorTools.tsx index b3605de75..bf181318b 100644 --- a/frontend/src/v2/components/V2ConnectorTools.tsx +++ b/frontend/src/v2/components/V2ConnectorTools.tsx @@ -16,6 +16,7 @@ import { useV2Api } from '../hooks/useV2Api'; import { useAuth } from '../../context/AuthContext'; import { V2Pod } from '../hooks/useV2Pods'; import { PlatformGlyph } from '../icons/platforms'; +import { localizeInstallableDescription } from '../utils/localizeInstallableDescription'; export type GrantWriteMode = 'read' | 'write' | 'write-with-confirm'; @@ -62,6 +63,7 @@ export interface ToolCatalogEntry { list?: 'channels' | 'tools'; label: string; description: string; + descriptions?: Record; available: boolean; unavailableReason?: string; broker?: { id: string }; @@ -484,7 +486,7 @@ const V2ConnectorTools: React.FC = ({ pods }) => { {entry.label} - {entry.description} + {localizeInstallableDescription(entry)} {!entry.available ? t('tools.notEnabled', { defaultValue: 'not enabled on this instance · ask your operator' }) @@ -584,7 +586,7 @@ const V2ConnectorTools: React.FC = ({ pods }) => {

{draft.replaces ? t('tools.changeAccess', { defaultValue: 'Change access' }) : t('tools.grant', { defaultValue: 'grant' })}

{draftEntry.label} · {podName(draft.podId)}

-

{draftEntry.description}

+

{localizeInstallableDescription(draftEntry)}

{!draft.replaces && podIds.length > 1 && (