From 2d9521898f84100e8fd7f11d7e9f27a3c1aeb3cf Mon Sep 17 00:00:00 2001 From: CSXFanMeng <105690322+CSXFanMeng@users.noreply.github.com> Date: Fri, 11 Sep 2026 23:20:05 +0800 Subject: [PATCH] feat(backup): support restoring selected MySQL tables --- .../SqlFileExecutionDialog.retry.spec.ts | 109 ++++- .../sql-file/SqlFileExecutionDialog.vue | 83 +++- apps/desktop/src/i18n/locales/az.ts | 9 + apps/desktop/src/i18n/locales/en.ts | 9 + apps/desktop/src/i18n/locales/es.ts | 9 + apps/desktop/src/i18n/locales/it.ts | 9 + apps/desktop/src/i18n/locales/ja.ts | 9 + apps/desktop/src/i18n/locales/ko.ts | 9 + apps/desktop/src/i18n/locales/pt-BR.ts | 9 + apps/desktop/src/i18n/locales/tr.ts | 9 + apps/desktop/src/i18n/locales/zh-CN.ts | 9 + apps/desktop/src/i18n/locales/zh-TW.ts | 9 + apps/desktop/src/lib/backend/api.ts | 2 + apps/desktop/src/lib/backend/http.ts | 5 + apps/desktop/src/lib/backend/tauri.ts | 10 + crates/dbx-core/src/sql.rs | 2 + crates/dbx-core/src/sql_file_import.rs | 213 +++++++++- .../src/sql_file_import/table_restore.rs | 395 ++++++++++++++++++ crates/dbx-core/tests/live_mysql57.rs | 3 + .../tests/live_mysql_database_export.rs | 69 +++ .../tests/live_postgres_all_schema_export.rs | 1 + .../tests/live_sqlserver_completion.rs | 1 + crates/dbx-web/src/main.rs | 1 + crates/dbx-web/src/routes/sql_file.rs | 23 +- docs/content/docs/database-backup.cn.mdx | 4 + docs/content/docs/database-backup.mdx | 4 + issue-assets/issue-8729-search-tables.png | Bin 0 -> 97784 bytes issue-assets/issue-8729-select-tables.png | Bin 0 -> 104797 bytes src-tauri/src/commands/sql_file.rs | 7 + src-tauri/src/lib.rs | 1 + 30 files changed, 1014 insertions(+), 9 deletions(-) create mode 100644 crates/dbx-core/src/sql_file_import/table_restore.rs create mode 100644 issue-assets/issue-8729-search-tables.png create mode 100644 issue-assets/issue-8729-select-tables.png diff --git a/apps/desktop/src/components/sql-file/SqlFileExecutionDialog.retry.spec.ts b/apps/desktop/src/components/sql-file/SqlFileExecutionDialog.retry.spec.ts index c515129bcc..c083fa55ba 100644 --- a/apps/desktop/src/components/sql-file/SqlFileExecutionDialog.retry.spec.ts +++ b/apps/desktop/src/components/sql-file/SqlFileExecutionDialog.retry.spec.ts @@ -12,6 +12,7 @@ const mocks = vi.hoisted(() => ({ listenSqlFileProgress: vi.fn(), openFileDialog: vi.fn(), previewSqlFile: vi.fn(), + inspectSqlFileTables: vi.fn(), progressHandler: undefined as undefined | ((progress: Record) => void), refreshDatabaseTreeNode: vi.fn(), requestConfirmation: vi.fn(), @@ -41,7 +42,7 @@ vi.mock("@/composables/useExportTracker", () => ({ useExportTracker: () => ({ addSqlFileTask: mocks.addSqlFileTask, updateSqlFileTask: mocks.updateSqlFileTask }), })); vi.mock("@/composables/useDatabaseOptions", () => ({ fetchSqlFileTargetOptions: mocks.fetchSqlFileTargetOptions })); -vi.mock("@/lib/connection/connectionLevelDatabaseBootstrap", () => ({ requiresSqlFileTargetDatabaseSelection: () => false })); +vi.mock("@/lib/connection/connectionLevelDatabaseBootstrap", () => ({ requiresSqlFileTargetDatabaseSelection: () => false, supportsConnectionLevelDatabaseBootstrap: (connection: any) => connection?.db_type === "mysql" })); vi.mock("@/lib/database/productionSafety", () => ({ productionContextForDatabase: () => ({ active: false, databases: [] }) })); vi.mock("@/stores/productionSafetyStore", () => ({ useProductionSafetyStore: () => ({ requestConfirmation: mocks.requestConfirmation }), @@ -59,6 +60,7 @@ vi.mock("@/lib/backend/api", () => ({ executeSqlFiles: mocks.executeSqlFiles, listenSqlFileProgress: mocks.listenSqlFileProgress, previewSqlFile: mocks.previewSqlFile, + inspectSqlFileTables: mocks.inspectSqlFileTables, })); vi.mock("@lucide/vue", () => { const Icon = passthrough("span"); @@ -77,7 +79,15 @@ vi.mock("@/components/ui/tooltip", () => ({ TooltipTrigger: passthrough("div"), })); vi.mock("@/components/ui/button", () => ({ Button: passthrough("button") })); -vi.mock("@/components/ui/input", () => ({ Input: passthrough("input") })); +vi.mock("@/components/ui/input", () => ({ + Input: defineComponent({ + props: ["modelValue"], + emits: ["update:modelValue"], + setup(props, { emit }) { + return () => h("input", { value: props.modelValue, onInput: (event: Event) => emit("update:modelValue", (event.target as HTMLInputElement).value) }); + }, + }), +})); vi.mock("@/components/ui/label", () => ({ Label: passthrough("label") })); vi.mock("@/components/ui/select", () => ({ Select: passthrough("div"), @@ -181,6 +191,11 @@ beforeEach(() => { } }); mocks.ensureConnected.mockResolvedValue(undefined); + mocks.inspectSqlFileTables.mockResolvedValue([ + { database: "app", name: "users" }, + { database: "app", name: "orders" }, + { database: "archive", name: "users" }, + ]); mocks.fetchSqlFileTargetOptions.mockResolvedValue([]); mocks.openFileDialog.mockResolvedValue(["/tmp/first.sql", "/tmp/second.sql"]); mocks.previewSqlFile.mockImplementation(async (filePath: string) => ({ @@ -296,3 +311,93 @@ describe("SqlFileExecutionDialog retries", () => { expect(root!.textContent).not.toContain("stale statement failure"); }); }); + +describe("SqlFileExecutionDialog selected-table restore", () => { + async function mountBackup() { + root = document.createElement("div"); + document.body.append(root); + app = createApp(SqlFileExecutionDialog, { open: true, prefillConnectionId: "mysql-1", prefillDatabase: "app", prefillFilePath: "/tmp/backup.sql.gz" }); + app.mount(root); + await vi.waitFor(() => expect(findButton("sqlFile.execute").disabled).toBe(false)); + root.querySelectorAll('input[type="radio"]')[1]!.click(); + await nextTick(); + } + + it("scans the backup and sends only checked table identities", async () => { + await mountBackup(); + await vi.waitFor(() => expect(root!.textContent).toContain("archive.users")); + expect(mocks.inspectSqlFileTables).toHaveBeenCalledWith("/tmp/backup.sql.gz"); + expect(findButton("sqlFile.execute").disabled).toBe(true); + const label = Array.from(root!.querySelectorAll("label")).find((label) => label.textContent === "app.users")!; + label.querySelector("input")!.click(); + await nextTick(); + mocks.executeSqlFiles.mockImplementationOnce(async (request) => { + mocks.progressHandler?.(progress(request.executionId, "done", { successCount: 2 })); + }); + findButton("sqlFile.execute").click(); + await vi.waitFor(() => expect(mocks.executeSqlFiles).toHaveBeenCalledWith(expect.objectContaining({ selectedTables: [{ database: "app", name: "users" }] }), ["/tmp/backup.sql.gz"])); + }); + + it("selects only search matches and preserves selections outside the search", async () => { + await mountBackup(); + await vi.waitFor(() => expect(root!.textContent).toContain("archive.users")); + const search = root!.querySelector('[aria-label="sqlFile.searchBackupTables"]')!; + search.value = "app."; + search.dispatchEvent(new Event("input")); + await nextTick(); + root!.querySelector('[data-table-restore] input[type="checkbox"]')!.click(); + await nextTick(); + search.value = "archive"; + search.dispatchEvent(new Event("input")); + await nextTick(); + expect(root!.querySelector('[data-table-restore] input[type="checkbox"]')!.checked).toBe(false); + mocks.executeSqlFiles.mockImplementationOnce(async (request) => { + mocks.progressHandler?.(progress(request.executionId, "done")); + }); + findButton("sqlFile.execute").click(); + await vi.waitFor(() => + expect(mocks.executeSqlFiles).toHaveBeenCalledWith( + expect.objectContaining({ + selectedTables: [ + { database: "app", name: "users" }, + { database: "app", name: "orders" }, + ], + }), + expect.any(Array), + ), + ); + }); + + it("blocks execution on scan failure and allows switching back to full restore", async () => { + mocks.inspectSqlFileTables.mockRejectedValueOnce(new Error("unsupported dump statement")); + await mountBackup(); + await vi.waitFor(() => expect(root!.querySelector('[role="alert"]')?.textContent).toContain("unsupported dump statement")); + expect(findButton("sqlFile.execute").disabled).toBe(true); + root!.querySelector('input[type="radio"]')!.click(); + await nextTick(); + expect(findButton("sqlFile.execute").disabled).toBe(false); + }); + + it("ignores a scan result after switching back to all contents", async () => { + let finish!: (tables: any[]) => void; + mocks.inspectSqlFileTables.mockImplementationOnce( + () => + new Promise((resolve) => { + finish = resolve; + }), + ); + await mountBackup(); + expect(findButton("sqlFile.execute").disabled).toBe(true); + root!.querySelector('input[type="radio"]')!.click(); + await nextTick(); + finish([{ database: null, name: "stale" }]); + await nextTick(); + expect(root!.textContent).not.toContain("stale"); + mocks.executeSqlFiles.mockImplementationOnce(async (request) => { + mocks.progressHandler?.(progress(request.executionId, "done")); + }); + findButton("sqlFile.execute").click(); + await vi.waitFor(() => expect(mocks.executeSqlFiles).toHaveBeenCalled()); + expect(mocks.executeSqlFiles.mock.calls[0]![0]).not.toHaveProperty("selectedTables"); + }); +}); diff --git a/apps/desktop/src/components/sql-file/SqlFileExecutionDialog.vue b/apps/desktop/src/components/sql-file/SqlFileExecutionDialog.vue index 9a2f52e4da..929f91a2ef 100644 --- a/apps/desktop/src/components/sql-file/SqlFileExecutionDialog.vue +++ b/apps/desktop/src/components/sql-file/SqlFileExecutionDialog.vue @@ -18,8 +18,8 @@ import { useProductionSafetyStore } from "@/stores/productionSafetyStore"; import { productionContextForDatabase } from "@/lib/database/productionSafety"; import { connectionIsEffectivelyReadOnly, ensureReadOnlyWriteAccess } from "@/lib/database/readOnlyWriteAccess"; import { fetchSqlFileTargetOptions } from "@/composables/useDatabaseOptions"; -import { requiresSqlFileTargetDatabaseSelection } from "@/lib/connection/connectionLevelDatabaseBootstrap"; -import { cancelSqlFileExecution, executeSqlFiles, listenSqlFileProgress, previewSqlFile, type SqlFilePreview, type SqlFileProgress, type SqlFileStatus } from "@/lib/backend/api"; +import { requiresSqlFileTargetDatabaseSelection, supportsConnectionLevelDatabaseBootstrap } from "@/lib/connection/connectionLevelDatabaseBootstrap"; +import { cancelSqlFileExecution, executeSqlFiles, inspectSqlFileTables, listenSqlFileProgress, previewSqlFile, type SqlFilePreview, type SqlFileProgress, type SqlFileStatus, type SqlFileTable } from "@/lib/backend/api"; import { buildDisplayFileNames, tooltipText as computeTooltipText } from "./sqlFilePreviewLabel"; import { useExportTracker, type ExportTask } from "@/composables/useExportTracker"; import { translateBackendError } from "@/i18n/backend-errors"; @@ -135,9 +135,59 @@ const sqlConnections = computed(() => store.connections.filter((c) => !["redis", const selectedConnection = computed(() => sqlConnections.value.find((c) => c.id === connectionId.value)); +const restoreSelectedTables = ref(false); +const backupTables = ref([]); +const selectedTableKeys = ref(new Set()); +const tableSearch = ref(""); +const loadingTables = ref(false); +const tableScanError = ref(""); +let tableScanGeneration = 0; +const canSelectTables = computed(() => previews.value.length === 1 && supportsConnectionLevelDatabaseBootstrap(selectedConnection.value)); +const tableKey = (table: SqlFileTable) => JSON.stringify([table.database, table.name]); +const tableLabel = (table: SqlFileTable) => (table.database ? `${table.database}.${table.name}` : table.name); +const filteredBackupTables = computed(() => backupTables.value.filter((table) => tableLabel(table).toLocaleLowerCase().includes(tableSearch.value.trim().toLocaleLowerCase()))); +const selectedTables = computed(() => backupTables.value.filter((table) => selectedTableKeys.value.has(tableKey(table)))); +const allFilteredTablesSelected = computed(() => filteredBackupTables.value.length > 0 && filteredBackupTables.value.every((table) => selectedTableKeys.value.has(tableKey(table)))); + +function toggleTable(table: SqlFileTable) { + const key = tableKey(table); + if (selectedTableKeys.value.has(key)) selectedTableKeys.value.delete(key); + else selectedTableKeys.value.add(key); +} + +function toggleFilteredTables() { + const deselect = allFilteredTablesSelected.value; + for (const table of filteredBackupTables.value) { + if (deselect) selectedTableKeys.value.delete(tableKey(table)); + else selectedTableKeys.value.add(tableKey(table)); + } +} + +watch([restoreSelectedTables, canSelectTables, () => previews.value[0]?.filePath, connectionId, open], async () => { + const generation = ++tableScanGeneration; + backupTables.value = []; + selectedTableKeys.value = new Set(); + tableSearch.value = ""; + tableScanError.value = ""; + loadingTables.value = false; + if (!canSelectTables.value) restoreSelectedTables.value = false; + if (!open.value || !restoreSelectedTables.value || !canSelectTables.value) return; + loadingTables.value = true; + try { + const tables = await inspectSqlFileTables(previews.value[0]!.filePath); + if (generation !== tableScanGeneration) return; + backupTables.value = tables; + } catch (error: any) { + if (generation === tableScanGeneration) tableScanError.value = error?.message || String(error); + } finally { + if (generation === tableScanGeneration) loadingTables.value = false; + } +}); + const canStart = computed(() => { const connection = selectedConnection.value; if (previews.value.length === 0 || !connection || running.value || loadingPreview.value || loadingDatabases.value) return false; + if (restoreSelectedTables.value && (loadingTables.value || tableScanError.value || selectedTables.value.length === 0)) return false; let hasDatabaseContext = false; const canExecuteWithoutSelectedDatabase = previews.value.every((item) => { if (!hasDatabaseContext && !item.canExecuteWithoutSelectedDatabase) return false; @@ -259,6 +309,7 @@ function resetState() { databaseOptions.value = []; loadingDatabases.value = false; continueOnError.value = false; + restoreSelectedTables.value = false; resetExecution(); } @@ -495,6 +546,7 @@ async function startExecution() { database: database.value.trim(), filePath: previews.value[0]!.filePath, continueOnError: continueOnError.value, + ...(restoreSelectedTables.value ? { selectedTables: selectedTables.value.map((table) => ({ ...table })) } : {}), }, previews.value.map((item) => item.filePath), ); @@ -702,6 +754,33 @@ watch( +
+ +
+ + +
+ +
+
{{ t("sqlFile.options") }} diff --git a/apps/desktop/src/i18n/locales/az.ts b/apps/desktop/src/i18n/locales/az.ts index eb242b1cb5..f988bcf6a1 100644 --- a/apps/desktop/src/i18n/locales/az.ts +++ b/apps/desktop/src/i18n/locales/az.ts @@ -6167,6 +6167,15 @@ export default withEnglishFallback({ generateDataComingSoon: "Tezliklə", }, sqlFile: { + restoreScope: "Bərpa əhatəsi", + restoreAll: "Bütün məzmun", + restoreSelectedTables: "Seçilmiş cədvəllər", + restoreTablesOnly: "Yalnız cədvəl strukturu və məlumatları bərpa olunur. Görünüşlər, saxlanılan prosedurlar, funksiyalar, triggerlər və hadisələr daxil edilmir. Mövcud xarici açarlar və triggerlər bərpaya təsir edə bilər.", + scanningTables: "Ehtiyat nüsxədəki cədvəllər skan edilir...", + searchBackupTables: "Ehtiyat nüsxədə cədvəl axtar...", + selectVisibleTables: "Görünən cədvəlləri seç", + selectedTableCount: "{selected} / {total} cədvəl seçilib", + noBackupTables: "Ehtiyat nüsxədə uyğun cədvəl yoxdur", title: "SQL faylını icra et", file: "Fayl", selectSqlFile: "SQL faylı seç", diff --git a/apps/desktop/src/i18n/locales/en.ts b/apps/desktop/src/i18n/locales/en.ts index 4dca25410e..8a5b0bd93d 100644 --- a/apps/desktop/src/i18n/locales/en.ts +++ b/apps/desktop/src/i18n/locales/en.ts @@ -6166,6 +6166,15 @@ export default { generateDataComingSoon: "Coming soon", }, sqlFile: { + restoreScope: "Restore scope", + restoreAll: "All contents", + restoreSelectedTables: "Selected tables", + restoreTablesOnly: "Restore table structure and data only. Views, routines, triggers and events are excluded. Existing foreign keys and triggers may affect the restore.", + scanningTables: "Scanning backup tables...", + searchBackupTables: "Search backup tables...", + selectVisibleTables: "Select visible tables", + selectedTableCount: "{selected} / {total} tables selected", + noBackupTables: "No matching tables in the backup", title: "Execute SQL File", file: "File", selectSqlFile: "Select SQL file", diff --git a/apps/desktop/src/i18n/locales/es.ts b/apps/desktop/src/i18n/locales/es.ts index e40fd93ad3..152bfeeb8a 100644 --- a/apps/desktop/src/i18n/locales/es.ts +++ b/apps/desktop/src/i18n/locales/es.ts @@ -5793,6 +5793,15 @@ export default withEnglishFallback({ generateDataComingSoon: "Próximamente", }, sqlFile: { + restoreScope: "Alcance de la restauración", + restoreAll: "Todo el contenido", + restoreSelectedTables: "Tablas seleccionadas", + restoreTablesOnly: "Solo se restauran la estructura y los datos de las tablas. Se excluyen las vistas, los procedimientos almacenados, las funciones, los disparadores y los eventos. Las claves foráneas y los disparadores existentes pueden afectar a la restauración.", + scanningTables: "Analizando las tablas de la copia de seguridad...", + searchBackupTables: "Buscar tablas en la copia de seguridad...", + selectVisibleTables: "Seleccionar las tablas visibles", + selectedTableCount: "{selected} / {total} tablas seleccionadas", + noBackupTables: "No hay tablas coincidentes en la copia de seguridad", title: "Ejecutar archivo SQL", file: "Archivo", selectSqlFile: "Seleccionar archivo SQL", diff --git a/apps/desktop/src/i18n/locales/it.ts b/apps/desktop/src/i18n/locales/it.ts index 995180a7d4..8444118f9f 100644 --- a/apps/desktop/src/i18n/locales/it.ts +++ b/apps/desktop/src/i18n/locales/it.ts @@ -5791,6 +5791,15 @@ export default withEnglishFallback({ generateDataComingSoon: "Prossimamente", }, sqlFile: { + restoreScope: "Ambito del ripristino", + restoreAll: "Tutto il contenuto", + restoreSelectedTables: "Tabelle selezionate", + restoreTablesOnly: "Ripristina solo la struttura e i dati delle tabelle. Viste, procedure memorizzate, funzioni, trigger ed eventi sono esclusi. Le chiavi esterne e i trigger esistenti possono influire sul ripristino.", + scanningTables: "Scansione delle tabelle nel backup...", + searchBackupTables: "Cerca tabelle nel backup...", + selectVisibleTables: "Seleziona le tabelle visibili", + selectedTableCount: "{selected} / {total} tabelle selezionate", + noBackupTables: "Nessuna tabella corrispondente nel backup", title: "Esegui File SQL", file: "File", selectSqlFile: "Seleziona file SQL", diff --git a/apps/desktop/src/i18n/locales/ja.ts b/apps/desktop/src/i18n/locales/ja.ts index 87ed47726c..6e73638bfa 100644 --- a/apps/desktop/src/i18n/locales/ja.ts +++ b/apps/desktop/src/i18n/locales/ja.ts @@ -5829,6 +5829,15 @@ export default withEnglishFallback({ generateDataComingSoon: "近日公開", }, sqlFile: { + restoreScope: "復元範囲", + restoreAll: "すべての内容", + restoreSelectedTables: "指定したテーブル", + restoreTablesOnly: "テーブル構造とデータのみを復元します。ビュー、ストアドプロシージャ、関数、トリガー、イベントは含まれません。既存の外部キーやトリガーが復元に影響する場合があります。", + scanningTables: "バックアップ内のテーブルをスキャン中...", + searchBackupTables: "バックアップ内のテーブルを検索...", + selectVisibleTables: "表示中のテーブルを選択", + selectedTableCount: "{total} テーブル中 {selected} テーブルを選択", + noBackupTables: "バックアップ内に一致するテーブルがありません", runInBackground: "バックグラウンドで実行", title: "SQLファイルを実行", file: "ファイル", diff --git a/apps/desktop/src/i18n/locales/ko.ts b/apps/desktop/src/i18n/locales/ko.ts index a83f6bf002..ecd704f177 100644 --- a/apps/desktop/src/i18n/locales/ko.ts +++ b/apps/desktop/src/i18n/locales/ko.ts @@ -5498,6 +5498,15 @@ export default withEnglishFallback({ generateDataComingSoon: "준비 중", }, sqlFile: { + restoreScope: "복원 범위", + restoreAll: "모든 내용", + restoreSelectedTables: "선택한 테이블", + restoreTablesOnly: "테이블 구조와 데이터만 복원합니다. 뷰, 저장 프로시저, 함수, 트리거 및 이벤트는 제외됩니다. 기존 외래 키와 트리거가 복원에 영향을 줄 수 있습니다.", + scanningTables: "백업의 테이블을 검색하는 중...", + searchBackupTables: "백업의 테이블 검색...", + selectVisibleTables: "표시된 테이블 선택", + selectedTableCount: "테이블 {selected} / {total}개 선택됨", + noBackupTables: "백업에 일치하는 테이블이 없습니다", title: "SQL 파일 실행", file: "파일", selectSqlFile: "SQL 파일 선택", diff --git a/apps/desktop/src/i18n/locales/pt-BR.ts b/apps/desktop/src/i18n/locales/pt-BR.ts index fb66ab124c..ca3e32c948 100644 --- a/apps/desktop/src/i18n/locales/pt-BR.ts +++ b/apps/desktop/src/i18n/locales/pt-BR.ts @@ -5793,6 +5793,15 @@ export default withEnglishFallback({ generateDataComingSoon: "Em breve", }, sqlFile: { + restoreScope: "Escopo da restauração", + restoreAll: "Todo o conteúdo", + restoreSelectedTables: "Tabelas selecionadas", + restoreTablesOnly: "Restaura apenas a estrutura e os dados das tabelas. Views, procedimentos armazenados, funções, gatilhos e eventos não são incluídos. Chaves estrangeiras e gatilhos existentes podem afetar a restauração.", + scanningTables: "Verificando as tabelas do backup...", + searchBackupTables: "Pesquisar tabelas no backup...", + selectVisibleTables: "Selecionar as tabelas visíveis", + selectedTableCount: "{selected} / {total} tabelas selecionadas", + noBackupTables: "Nenhuma tabela correspondente no backup", title: "Executar Arquivo SQL", file: "Arquivo", selectSqlFile: "Selecionar arquivo SQL", diff --git a/apps/desktop/src/i18n/locales/tr.ts b/apps/desktop/src/i18n/locales/tr.ts index c9a8170e6a..07f963f02a 100644 --- a/apps/desktop/src/i18n/locales/tr.ts +++ b/apps/desktop/src/i18n/locales/tr.ts @@ -6049,6 +6049,15 @@ export default withEnglishFallback({ generateDataComingSoon: "Yakında", }, sqlFile: { + restoreScope: "Geri yükleme kapsamı", + restoreAll: "Tüm içerik", + restoreSelectedTables: "Seçili tablolar", + restoreTablesOnly: "Yalnızca tablo yapısı ve verileri geri yüklenir. Görünümler, saklı yordamlar, işlevler, tetikleyiciler ve olaylar dahil edilmez. Mevcut yabancı anahtarlar ve tetikleyiciler geri yüklemeyi etkileyebilir.", + scanningTables: "Yedekteki tablolar taranıyor...", + searchBackupTables: "Yedekteki tabloları ara...", + selectVisibleTables: "Görünür tabloları seç", + selectedTableCount: "{selected} / {total} tablo seçildi", + noBackupTables: "Yedekte eşleşen tablo yok", title: "SQL Dosyasını Çalıştır", file: "Dosya", selectSqlFile: "SQL dosyası seçin", diff --git a/apps/desktop/src/i18n/locales/zh-CN.ts b/apps/desktop/src/i18n/locales/zh-CN.ts index 7082d589e9..f30bc5fba0 100644 --- a/apps/desktop/src/i18n/locales/zh-CN.ts +++ b/apps/desktop/src/i18n/locales/zh-CN.ts @@ -6150,6 +6150,15 @@ export default withEnglishFallback({ generateDataComingSoon: "即将推出", }, sqlFile: { + restoreScope: "恢复范围", + restoreAll: "全部内容", + restoreSelectedTables: "指定表", + restoreTablesOnly: "仅恢复表结构与数据,不包含视图、存储过程、函数、触发器和事件。现有外键和触发器可能影响恢复。", + scanningTables: "正在扫描备份中的表...", + searchBackupTables: "搜索备份中的表...", + selectVisibleTables: "选择当前列表中的表", + selectedTableCount: "已选择 {selected} / {total} 张表", + noBackupTables: "备份中没有匹配的表", title: "执行 SQL 文件", file: "文件", selectSqlFile: "选择 SQL 文件", diff --git a/apps/desktop/src/i18n/locales/zh-TW.ts b/apps/desktop/src/i18n/locales/zh-TW.ts index 951e0fe4ff..6229cd4ee7 100644 --- a/apps/desktop/src/i18n/locales/zh-TW.ts +++ b/apps/desktop/src/i18n/locales/zh-TW.ts @@ -5113,6 +5113,15 @@ export default withEnglishFallback({ generateDataComingSoon: "即將推出", }, sqlFile: { + restoreScope: "還原範圍", + restoreAll: "全部內容", + restoreSelectedTables: "指定資料表", + restoreTablesOnly: "僅還原資料表結構與資料,不包含檢視、預存程序、函式、觸發程序和事件。現有的外部索引鍵與觸發程序可能影響還原。", + scanningTables: "正在掃描備份中的資料表...", + searchBackupTables: "搜尋備份中的資料表...", + selectVisibleTables: "選取目前清單中的資料表", + selectedTableCount: "已選取 {selected} / {total} 張資料表", + noBackupTables: "備份中沒有符合的資料表", title: "執行 SQL 檔案", file: "檔案", selectSqlFile: "選擇 SQL 檔案", diff --git a/apps/desktop/src/lib/backend/api.ts b/apps/desktop/src/lib/backend/api.ts index 355d596f4f..3111426bcf 100644 --- a/apps/desktop/src/lib/backend/api.ts +++ b/apps/desktop/src/lib/backend/api.ts @@ -384,6 +384,7 @@ export const previewSqlFile = forward("previewSqlFile"); export const executeSqlFile = forward("executeSqlFile"); export const executeSqlFiles = forward("executeSqlFiles"); export const cancelSqlFileExecution = forward("cancelSqlFileExecution"); +export const inspectSqlFileTables = forward("inspectSqlFileTables"); export const listenSqlFileProgress = forward("listenSqlFileProgress"); export const pendingOpenSqlFiles = forward("pendingOpenSqlFiles"); export const pendingOpenDbFiles = forward("pendingOpenDbFiles"); @@ -967,6 +968,7 @@ export type { SqlFileStatus, SqlFileRequest, SqlFilePreview, + SqlFileTable, SqlFileProgress, TransferRequest, TransferProgress, diff --git a/apps/desktop/src/lib/backend/http.ts b/apps/desktop/src/lib/backend/http.ts index fc3b443ad0..ba5b0a0cff 100644 --- a/apps/desktop/src/lib/backend/http.ts +++ b/apps/desktop/src/lib/backend/http.ts @@ -121,6 +121,7 @@ import type { HistoryConnectionOption, SqlFileRequest, SqlFilePreview, + SqlFileTable, SqlFileProgress, TransferRequest, TransferProgress, @@ -2252,6 +2253,10 @@ export async function executeSqlFile(request: SqlFileRequest): Promise { return post("/api/sql-file/execute", { request }); } +export async function inspectSqlFileTables(filePath: string): Promise { + return post("/api/sql-file/tables", { filePath }); +} + export async function executeSqlFiles(request: SqlFileRequest, filePaths: string[]): Promise { return post("/api/sql-file/execute", { request, filePaths }); } diff --git a/apps/desktop/src/lib/backend/tauri.ts b/apps/desktop/src/lib/backend/tauri.ts index d39f644776..1eef2b9a28 100644 --- a/apps/desktop/src/lib/backend/tauri.ts +++ b/apps/desktop/src/lib/backend/tauri.ts @@ -4583,6 +4583,16 @@ export interface SqlFileRequest { database: string; filePath: string; continueOnError: boolean; + selectedTables?: SqlFileTable[]; +} + +export interface SqlFileTable { + database: string | null; + name: string; +} + +export async function inspectSqlFileTables(filePath: string): Promise { + return invoke("inspect_sql_file_tables", { filePath }); } export interface SqlFilePreview { diff --git a/crates/dbx-core/src/sql.rs b/crates/dbx-core/src/sql.rs index 559077e944..34da8c93c5 100644 --- a/crates/dbx-core/src/sql.rs +++ b/crates/dbx-core/src/sql.rs @@ -59,6 +59,8 @@ pub struct SqlFileRequest { pub database: String, pub file_path: String, pub continue_on_error: bool, + #[serde(default)] + pub selected_tables: Option>, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/crates/dbx-core/src/sql_file_import.rs b/crates/dbx-core/src/sql_file_import.rs index 85deca3d68..4122619151 100644 --- a/crates/dbx-core/src/sql_file_import.rs +++ b/crates/dbx-core/src/sql_file_import.rs @@ -27,6 +27,10 @@ use crate::sql::{ }; use crate::types::QueryResult; +mod table_restore; +pub use table_restore::SqlFileTable; +use table_restore::TableRestoreFilter; + #[derive(Debug, Clone)] struct SqlFileImportTarget { db_type: DatabaseType, @@ -340,11 +344,22 @@ pub async fn execute_sql_file_content( mut emit: impl FnMut(SqlFileProgress), ) -> Result<(), String> { let import_target = sql_file_import_target(state, &request.connection_id).await; - let statements = split_sql_file_import_statements_with_control( + validate_table_restore_target(request, import_target.as_ref(), 1)?; + let mut statements = split_sql_file_import_statements_with_control( file_content, import_target.as_ref().map(|target| target.db_type), ); + if let Some(selected) = &request.selected_tables { + let mut scan = TableRestoreFilter::default(); + for statement in &statements { + scan.inspect(&statement.sql)?; + } + let (tables, views) = scan.finish(); + validate_selected_tables(selected, &tables)?; + filter_restore_statements(&mut statements, &mut TableRestoreFilter::with_views(views), selected)?; + } + let planned_statements = optimize_controlled_sql_file_import_statements( &statements, import_target.as_ref().map(|target| target.db_type), @@ -403,6 +418,29 @@ pub async fn execute_sql_file_paths( import_target.as_ref().map(|target| SqlParsingOptions::for_database_type(target.db_type)).unwrap_or_default(); let database_type = import_target.as_ref().map(|target| target.db_type); let mut progress = SqlFileExecutionProgress::new(); + // Validate the entire dump before any SQL reaches the database. This also + // identifies view placeholders whose final CREATE VIEW appears later. + let restore_filter = async { + validate_table_restore_target(request, import_target.as_ref(), file_paths.len())?; + let Some(selected) = &request.selected_tables else { + return Ok(None); + }; + let (tables, views) = scan_sql_file_tables(file_paths[0], &token).await?; + validate_selected_tables(selected, &tables)?; + Ok::<_, String>(Some(TableRestoreFilter::with_views(views))) + } + .await; + let mut restore_filter = match restore_filter { + Ok(filter) => filter, + Err(error) => { + if token.is_cancelled() { + emit_sql_file_terminal_progress(request, &token, started_at, &progress, &mut emit); + return Ok(()); + } + emit(sql_file_execution_error_progress(&request.execution_id, started_at, &progress, error.clone())); + return Err(error); + } + }; let mut mysql_executor = match MySqlSqlFileExecutor::build(state, request, import_target.as_ref()).await { Ok(executor) => executor, Err(error) => { @@ -475,7 +513,23 @@ pub async fn execute_sql_file_paths( emit_sql_file_terminal_progress(request, &token, started_at, &progress, &mut emit); return Ok(()); } - pending_statements.extend(splitter.push_chunk(&chunk)); + let mut next_statements = splitter.push_chunk(&chunk); + if let Some(filter) = restore_filter.as_mut() { + if let Err(error) = filter_restore_statements( + &mut next_statements, + filter, + request.selected_tables.as_deref().unwrap_or_default(), + ) { + emit(sql_file_execution_error_progress( + &request.execution_id, + started_at, + &progress, + error.clone(), + )); + return Err(error); + } + } + pending_statements.extend(next_statements); if pending_statements.len() < SQL_FILE_STATEMENT_BATCH_SIZE { continue; } @@ -493,7 +547,18 @@ pub async fn execute_sql_file_paths( .await?; } - pending_statements.extend(splitter.finish()); + let mut next_statements = splitter.finish(); + if let Some(filter) = restore_filter.as_mut() { + if let Err(error) = filter_restore_statements( + &mut next_statements, + filter, + request.selected_tables.as_deref().unwrap_or_default(), + ) { + emit(sql_file_execution_error_progress(&request.execution_id, started_at, &progress, error.clone())); + return Err(error); + } + } + pending_statements.extend(next_statements); execute_sql_file_statement_batch( state, request, @@ -533,6 +598,79 @@ pub async fn execute_sql_file_paths( Ok(()) } +pub async fn inspect_sql_file_tables(file_path: &Path) -> Result, String> { + scan_sql_file_tables(file_path, &CancellationToken::new()).await.map(|(tables, _)| tables) +} + +async fn scan_sql_file_tables( + file_path: &Path, + token: &CancellationToken, +) -> Result<(Vec, std::collections::BTreeSet), String> { + let mut decoder = SqlFileStreamDecoder::open_for_target(file_path, true).await?; + let mut splitter = StreamingSqlFileSplitter::new(Some(DatabaseType::Mysql), SqlParsingOptions::mysql_compatible()); + let mut scan = TableRestoreFilter::default(); + while let Some(chunk) = decoder.next_chunk().await? { + if token.is_cancelled() { + return Err("Table inspection cancelled".to_string()); + } + for statement in splitter.push_chunk(&chunk) { + scan.inspect(&statement.sql)?; + } + } + for statement in splitter.finish() { + scan.inspect(&statement.sql)?; + } + Ok(scan.finish()) +} + +fn validate_table_restore_target( + request: &SqlFileRequest, + target: Option<&SqlFileImportTarget>, + file_count: usize, +) -> Result<(), String> { + let Some(selected) = &request.selected_tables else { + return Ok(()); + }; + if selected.is_empty() { + return Err("Select at least one table to restore".to_string()); + } + if file_count != 1 { + return Err("Selected-table restore requires exactly one SQL file".to_string()); + } + if !target.is_some_and(|target| { + crate::sql::supports_connection_level_database_bootstrap_target( + &target.db_type, + target.driver_profile.as_deref(), + ) + }) { + return Err("Selected-table restore is only supported for MySQL-compatible connections".to_string()); + } + Ok(()) +} + +fn validate_selected_tables(selected: &[SqlFileTable], available: &[SqlFileTable]) -> Result<(), String> { + if selected.iter().any(|table| !available.contains(table)) { + return Err("A selected table is no longer present in the backup; scan the file again".to_string()); + } + Ok(()) +} + +fn filter_restore_statements( + statements: &mut Vec, + filter: &mut TableRestoreFilter, + selected: &[SqlFileTable], +) -> Result<(), String> { + let mut filtered = Vec::new(); + for mut statement in std::mem::take(statements) { + if let Some(sql) = filter.filter(&statement.sql, selected)? { + statement.sql = sql; + filtered.push(statement); + } + } + *statements = filtered; + Ok(()) +} + pub async fn read_sql_file_preview(file_path: &Path, max_chars: usize) -> Result { let mut decoder = SqlFileStreamDecoder::open_with_detection_limit(file_path, Some(SQL_FILE_PREVIEW_ENCODING_SAMPLE_BYTES)) @@ -1916,6 +2054,74 @@ mod tests { path } + #[tokio::test] + async fn table_restore_scan_reads_beyond_preview_and_supports_gzip_and_utf16() { + let sql = format!( + "CREATE TABLE a (id INT); INSERT INTO a VALUES ('{}'); CREATE TABLE late_table (id INT);", + "x".repeat(1_100_000) + ); + let mut utf16 = vec![0xff, 0xfe]; + for unit in sql.encode_utf16() { + utf16.extend_from_slice(&unit.to_le_bytes()); + } + for path in [ + temporary_sql_file(sql.as_bytes()).await, + temporary_gzip_sql_file(sql.as_bytes()).await, + temporary_sql_file(&utf16).await, + ] { + let tables = inspect_sql_file_tables(&path).await.unwrap(); + tokio::fs::remove_file(&path).await.unwrap(); + assert_eq!(tables.iter().map(|table| table.name.as_str()).collect::>(), vec!["a", "late_table"]); + } + } + + #[test] + fn table_restore_stream_filters_each_statement_once_across_chunks() { + let selected = [ + SqlFileTable { database: None, name: "a".to_string() }, + SqlFileTable { database: Some("second".to_string()), name: "b".to_string() }, + ]; + let mut splitter = + StreamingSqlFileSplitter::new(Some(DatabaseType::Mysql), SqlParsingOptions::mysql_compatible()); + let mut filter = TableRestoreFilter::default(); + let mut statements = Vec::new(); + for chunk in ["INSERT INTO a VALUES (1); USE second;", "INSERT INTO b VALUES (2); INSERT INTO a VALUES (3);"] { + let mut next = splitter.push_chunk(chunk); + filter_restore_statements(&mut next, &mut filter, &selected).unwrap(); + statements.extend(next); + } + let mut next = splitter.finish(); + filter_restore_statements(&mut next, &mut filter, &selected).unwrap(); + statements.extend(next); + assert_eq!( + statements.iter().map(|statement| statement.sql.as_str()).collect::>(), + vec!["INSERT INTO a VALUES (1)", "USE second", "INSERT INTO b VALUES (2)"] + ); + } + + #[test] + fn table_restore_request_is_opt_in_and_rejects_empty_or_missing_selections() { + let mut request: SqlFileRequest = serde_json::from_value(serde_json::json!({"executionId":"test", "connectionId":"conn", "database":"app", "filePath":"backup.sql", "continueOnError":false})).unwrap(); + assert!(request.selected_tables.is_none()); + assert!(validate_table_restore_target(&request, None, 1).is_ok()); + request.selected_tables = Some(Vec::new()); + assert!(validate_table_restore_target(&request, None, 1).is_err()); + request.selected_tables = Some(vec![SqlFileTable { database: None, name: "a".to_string() }]); + assert!(validate_table_restore_target( + &request, + Some(&SqlFileImportTarget { db_type: DatabaseType::Postgres, driver_profile: None }), + 1 + ) + .is_err()); + assert!(validate_table_restore_target( + &request, + Some(&SqlFileImportTarget { db_type: DatabaseType::Mysql, driver_profile: None }), + 2 + ) + .is_err()); + assert!(validate_selected_tables(request.selected_tables.as_ref().unwrap(), &[]).is_err()); + } + fn test_progress(status: SqlFileStatus, statement_index: usize) -> SqlFileProgress { SqlFileProgress { execution_id: "test-execution".to_string(), @@ -2302,6 +2508,7 @@ mod tests { database: String::new(), file_path: path.to_string_lossy().to_string(), continue_on_error: true, + selected_tables: None, }; let mut progress = Vec::new(); diff --git a/crates/dbx-core/src/sql_file_import/table_restore.rs b/crates/dbx-core/src/sql_file_import/table_restore.rs new file mode 100644 index 0000000000..e8a55e18e1 --- /dev/null +++ b/crates/dbx-core/src/sql_file_import/table_restore.rs @@ -0,0 +1,395 @@ +use std::collections::BTreeSet; + +use serde::{Deserialize, Serialize}; +use sqlparser::dialect::MySqlDialect; +use sqlparser::tokenizer::{Token, Tokenizer}; + +/// The database is the scope in the dump, not the destination selected in the UI. +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct SqlFileTable { + pub database: Option, + pub name: String, +} + +#[derive(Default)] +pub(super) struct TableRestoreFilter { + database: Option, + pub tables: BTreeSet, + views: BTreeSet, +} + +enum Scope { + Table(SqlFileTable), + DropTables(Vec, bool), + Session, + DatabaseSession(String), + Skip, +} + +impl TableRestoreFilter { + pub fn inspect(&mut self, sql: &str) -> Result<(), String> { + match self.classify(sql)? { + Scope::Table(table) => { + self.tables.insert(table); + } + Scope::DropTables(tables, _) => self.tables.extend(tables), + _ => {} + } + Ok(()) + } + + pub fn with_views(views: BTreeSet) -> Self { + Self { views, ..Self::default() } + } + + pub fn finish(mut self) -> (Vec, BTreeSet) { + self.tables.retain(|table| !self.views.contains(table)); + (self.tables.into_iter().collect(), self.views) + } + + pub fn filter(&mut self, sql: &str, selected: &[SqlFileTable]) -> Result, String> { + let scope = self.classify(sql)?; + let includes = |table: &SqlFileTable| !self.views.contains(table) && selected.contains(table); + match scope { + Scope::Table(table) => { + let included = includes(&table); + self.tables.insert(table); + Ok(included.then(|| sql.to_string())) + } + Scope::DropTables(tables, if_exists) => { + let kept = tables.iter().filter(|table| includes(table)).map(quoted_table).collect::>(); + self.tables.extend(tables); + Ok((!kept.is_empty()) + .then(|| format!("DROP TABLE {}{}", if if_exists { "IF EXISTS " } else { "" }, kept.join(", ")))) + } + Scope::Session => Ok(Some(sql.to_string())), + Scope::DatabaseSession(database) => { + Ok(selected.iter().any(|table| table.database.as_ref() == Some(&database)).then(|| sql.to_string())) + } + Scope::Skip => Ok(None), + } + } + + fn classify(&mut self, sql: &str) -> Result { + // INSERT payloads can be gigabytes. Only tokenize the header; the existing + // streaming splitter remains responsible for statement boundaries. + let limit = sql.char_indices().nth(16_384).map_or(sql.len(), |(offset, _)| offset); + let mut tokens = Vec::new(); + let tokenized = Tokenizer::new(&MySqlDialect {}, &sql[..limit]).tokenize_with_location_into_buf(&mut tokens); + let tokens = tokens + .into_iter() + .map(|token| token.token) + .filter(|token| !matches!(token, Token::Whitespace(_) | Token::EOF)) + .collect::>(); + let mut cursor = Tokens { tokens: &tokens, index: 0 }; + if tokens.is_empty() && tokenized.is_ok() && limit == sql.len() { + return Ok(Scope::Skip); + } + if cursor.eat("INSERT") || cursor.eat("REPLACE") { + for modifier in ["LOW_PRIORITY", "DELAYED", "HIGH_PRIORITY", "IGNORE"] { + cursor.eat(modifier); + } + cursor.eat("INTO"); + return cursor.table(&self.database).map(Scope::Table).ok_or_else(|| unsupported(sql)); + } + // Object ownership is in the header even if a long definition was + // truncated inside a string literal by the tokenizer limit. + if cursor.eat("CREATE") { + if cursor.eat("TEMPORARY") { + return Err(unsupported(sql)); + } + if cursor.eat("TABLE") { + cursor.eat_if_not_exists(); + return cursor.table(&self.database).map(Scope::Table).ok_or_else(|| unsupported(sql)); + } + // Dumps may use CREATE ... DEFINER ... SQL SECURITY ... VIEW. + // Track views to exclude mysqldump's temporary table placeholders too. + if let Some(index) = tokens.iter().take_while(|token| **token != Token::LParen).position(|token| { + ["VIEW", "PROCEDURE", "FUNCTION", "TRIGGER", "EVENT"].iter().any(|kind| word_is(token, kind)) + }) { + if word_is(&tokens[index], "VIEW") { + cursor.index = index + 1; + self.views.insert(cursor.table(&self.database).ok_or_else(|| unsupported(sql))?); + } + return Ok(Scope::Skip); + } + } + tokenized.map_err(|_| unsupported(sql))?; + if limit != sql.len() { + return Err(unsupported(sql)); + } + cursor.index = 0; + if cursor.eat("USE") { + let database = cursor.identifier().ok_or_else(|| unsupported(sql))?; + self.database = Some(database.clone()); + return Ok(Scope::DatabaseSession(database)); + } + if cursor.eat("SET") { + if cursor.eat("STATEMENT") { + // MariaDB's SET STATEMENT ... FOR can wrap arbitrary mutations. + return Err(unsupported(sql)); + } + // Server-wide settings (including GTID_PURGED) are not part of a table restore. + return Ok( + if tokens.iter().any(|token| { + word_is(token, "GLOBAL") + || word_is(token, "@@GLOBAL") + || word_is(token, "PERSIST") + || word_is(token, "PERSIST_ONLY") + }) { + Scope::Skip + } else { + Scope::Session + }, + ); + } + if cursor.eat("BEGIN") { + cursor.eat("WORK"); + cursor.eat_token(&Token::SemiColon); + return if cursor.index == tokens.len() { Ok(Scope::Session) } else { Err(unsupported(sql)) }; + } + if cursor.eat("START") && cursor.eat("TRANSACTION") + || word_is(&tokens[0], "COMMIT") + || word_is(&tokens[0], "ROLLBACK") + { + return Ok(Scope::Session); + } + if word_is(&tokens[0], "LOCK") || word_is(&tokens[0], "UNLOCK") { + // The SQL-file executor already omits dump table locks. + return Ok(Scope::Skip); + } + cursor.index = 0; + if cursor.eat("CREATE") { + if cursor.eat("DATABASE") || cursor.eat("SCHEMA") { + // Keep only idempotent bootstrap, never destructive database DDL. + if cursor.eat("IF") && cursor.eat("NOT") && cursor.eat("EXISTS") { + return Ok(Scope::DatabaseSession(cursor.identifier().ok_or_else(|| unsupported(sql))?)); + } + return Ok(Scope::Skip); + } + cursor.eat("UNIQUE"); + cursor.eat("FULLTEXT"); + cursor.eat("SPATIAL"); + if cursor.eat("INDEX") { + if let Some(index) = tokens.iter().position(|token| word_is(token, "ON")) { + cursor.index = index + 1; + return cursor.table(&self.database).map(Scope::Table).ok_or_else(|| unsupported(sql)); + } + } + } + cursor.index = 0; + if cursor.eat("DROP") { + if cursor.eat("TEMPORARY") { + return Err(unsupported(sql)); + } + if cursor.eat("TABLE") { + let if_exists = cursor.eat("IF") && cursor.eat("EXISTS"); + let mut tables = vec![cursor.table(&self.database).ok_or_else(|| unsupported(sql))?]; + while cursor.eat_token(&Token::Comma) { + tables.push(cursor.table(&self.database).ok_or_else(|| unsupported(sql))?); + } + cursor.eat("RESTRICT"); + cursor.eat("CASCADE"); + cursor.eat_token(&Token::SemiColon); + if cursor.index != tokens.len() { + return Err(unsupported(sql)); + } + return Ok(Scope::DropTables(tables, if_exists)); + } + if ["DATABASE", "SCHEMA", "VIEW", "PROCEDURE", "FUNCTION", "TRIGGER", "EVENT"] + .iter() + .any(|kind| cursor.eat(kind)) + { + return Ok(Scope::Skip); + } + } + cursor.index = 0; + if cursor.eat("ALTER") && cursor.eat("TABLE") { + let table = cursor.table(&self.database).ok_or_else(|| unsupported(sql))?; + // Renaming/exchanging a table can also mutate an unselected table. + if tokens[cursor.index..].iter().any(|token| word_is(token, "RENAME") || word_is(token, "EXCHANGE")) { + return Err(unsupported(sql)); + } + return Ok(Scope::Table(table)); + } + Err(unsupported(sql)) + } +} + +fn unsupported(sql: &str) -> String { + format!("Cannot safely restore selected tables from this statement: {}", crate::sql::statement_summary(sql)) +} + +fn word_is(token: &Token, expected: &str) -> bool { + matches!(token, Token::Word(word) if word.quote_style.is_none() && word.value.eq_ignore_ascii_case(expected)) +} + +struct Tokens<'a> { + tokens: &'a [Token], + index: usize, +} + +impl Tokens<'_> { + fn eat(&mut self, word: &str) -> bool { + if self.tokens.get(self.index).is_some_and(|token| word_is(token, word)) { + self.index += 1; + true + } else { + false + } + } + + fn eat_token(&mut self, token: &Token) -> bool { + if self.tokens.get(self.index) == Some(token) { + self.index += 1; + true + } else { + false + } + } + + fn eat_if_not_exists(&mut self) { + if self.eat("IF") { + self.eat("NOT"); + self.eat("EXISTS"); + } + } + + fn identifier(&mut self) -> Option { + let Token::Word(word) = self.tokens.get(self.index)? else { + return None; + }; + self.index += 1; + Some(word.value.clone()) + } + + fn table(&mut self, database: &Option) -> Option { + let first = self.identifier()?; + if self.eat_token(&Token::Period) { + Some(SqlFileTable { database: Some(first), name: self.identifier()? }) + } else { + Some(SqlFileTable { database: database.clone(), name: first }) + } + } +} + +fn quoted_table(table: &SqlFileTable) -> String { + let quote = |name: &str| format!("`{}`", name.replace('`', "``")); + match &table.database { + Some(database) => format!("{}.{}", quote(database), quote(&table.name)), + None => quote(&table.name), + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::models::connection::DatabaseType; + use crate::sql::split_sql_statements_for_database; + + fn table(database: Option<&str>, name: &str) -> SqlFileTable { + SqlFileTable { database: database.map(str::to_string), name: name.to_string() } + } + + fn restore(sql: &str, selected: &[SqlFileTable]) -> Result, String> { + let statements = split_sql_statements_for_database(sql, DatabaseType::Mysql); + let mut scan = TableRestoreFilter::default(); + for statement in &statements { + scan.inspect(statement)?; + } + let (_, views) = scan.finish(); + let mut filter = TableRestoreFilter::with_views(views); + statements.iter().filter_map(|sql| filter.filter(sql, selected).transpose()).collect() + } + + #[test] + fn restores_only_selected_structure_and_data_with_session_context() { + let sql = "SET FOREIGN_KEY_CHECKS=0; CREATE TABLE `a` (id INT); INSERT INTO a VALUES (1, 'DROP TABLE b;'); CREATE TABLE b (id INT); INSERT INTO b VALUES (2); SET FOREIGN_KEY_CHECKS=1;"; + assert_eq!( + restore(sql, &[table(None, "a")]).unwrap(), + vec![ + "SET FOREIGN_KEY_CHECKS=0", + "CREATE TABLE `a` (id INT)", + "INSERT INTO a VALUES (1, 'DROP TABLE b;')", + "SET FOREIGN_KEY_CHECKS=1", + ] + ); + } + + #[test] + fn distinguishes_databases_and_escaped_identifiers() { + let sql = "USE first; INSERT INTO `a``b` VALUES (1); USE second; INSERT INTO `a``b` VALUES (2); INSERT INTO first.`a``b` VALUES (3);"; + let statements = restore(sql, &[table(Some("first"), "a`b")]).unwrap(); + assert_eq!(statements.iter().filter(|sql| sql.starts_with("INSERT")).count(), 2); + assert!(!statements.iter().any(|sql| sql.contains("(2)"))); + } + + #[test] + fn filters_multi_table_drop_without_dropping_unselected_tables() { + assert_eq!( + restore("DROP TABLE IF EXISTS a, b;", &[table(None, "a")]).unwrap(), + vec!["DROP TABLE IF EXISTS `a`"] + ); + } + + #[test] + fn excludes_view_placeholders_routines_and_global_changes() { + let sql = "CREATE TABLE v (id INT); DROP TABLE IF EXISTS v; CREATE VIEW v AS SELECT * FROM a; DROP DATABASE other; SET @@GLOBAL.GTID_PURGED='x'; CREATE TABLE a (id INT);"; + assert_eq!(restore(sql, &[table(None, "a"), table(None, "v")]).unwrap(), vec!["CREATE TABLE a (id INT)"]); + } + + #[test] + fn handles_version_comments_key_toggles_and_insert_modifiers() { + let sql = "/*!40000 ALTER TABLE a DISABLE KEYS */; INSERT IGNORE INTO a VALUES (1); REPLACE INTO b VALUES (2); /*!40000 ALTER TABLE a ENABLE KEYS */;"; + assert_eq!(restore(sql, &[table(None, "a")]).unwrap().len(), 3); + } + + #[test] + fn rejects_unknown_and_multi_target_mutations_before_execution() { + for sql in [ + "CALL remove_all()", + "UPDATE a JOIN b SET b.id=1", + "ALTER TABLE a RENAME TO b", + "RENAME TABLE a TO b", + "DROP TEMPORARY TABLE a", + "CREATE TEMPORARY TABLE a (id INT)", + "SET STATEMENT max_statement_time=1 FOR DELETE FROM b", + "BEGIN NOT ATOMIC DELETE FROM b; END", + ] { + assert!(restore(sql, &[table(None, "a")]).is_err(), "{sql}"); + } + } + + #[test] + fn identifies_large_insert_without_tokenizing_its_values() { + let sql = format!("INSERT INTO a VALUES ('{}');", "x".repeat(1_000_000)); + assert_eq!(restore(&sql, &[table(None, "a")]).unwrap().len(), 1); + assert!(restore(&sql, &[table(None, "b")]).unwrap().is_empty()); + } + + #[test] + fn identifies_large_definitions_without_parsing_their_bodies() { + let body = "x".repeat(100_000); + let ddl = format!("CREATE TABLE a (body TEXT COMMENT '{body}')"); + let sql = format!("{ddl}; CREATE VIEW v AS SELECT '{body}';\nDELIMITER ;;\nCREATE PROCEDURE p() BEGIN SELECT '{body}'; END;;\nDELIMITER ;\n"); + assert_eq!(restore(&sql, &[table(None, "a")]).unwrap(), vec![ddl]); + } + + #[test] + fn skips_mysqldump_view_placeholders_and_delimited_triggers() { + let sql = "/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; + CREATE TABLE a (id INT); + CREATE TABLE v (id INT); + DELIMITER ;; + /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER tr AFTER INSERT ON a FOR EACH ROW BEGIN INSERT INTO audit VALUES (NEW.id); END */;; + DELIMITER ; + DROP TABLE IF EXISTS v; + /*!50001 CREATE ALGORITHM=UNDEFINED */ /*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ /*!50001 VIEW v AS SELECT id FROM a */; + INSERT INTO a VALUES (1); + /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;"; + let statements = restore(sql, &[table(None, "a"), table(None, "v")]).unwrap(); + assert_eq!(statements.len(), 4); + assert!(statements.iter().any(|sql| sql == "INSERT INTO a VALUES (1)")); + } +} diff --git a/crates/dbx-core/tests/live_mysql57.rs b/crates/dbx-core/tests/live_mysql57.rs index 88ee0fe0f9..5a96ebe6d3 100644 --- a/crates/dbx-core/tests/live_mysql57.rs +++ b/crates/dbx-core/tests/live_mysql57.rs @@ -1173,6 +1173,7 @@ INSERT INTO install_check (id) VALUES (1), (2); .to_string_lossy() .into_owned(), continue_on_error: false, + selected_tables: None, }; let _ = execute_sql_statement( @@ -1258,6 +1259,7 @@ INSERT INTO children (parent_id) VALUES (LAST_INSERT_ID()); .to_string_lossy() .into_owned(), continue_on_error: false, + selected_tables: None, }; let _ = execute_sql_statement( @@ -1327,6 +1329,7 @@ async fn live_sql_file_import_preserves_raw_mysql_binary_literal_bytes() { database: String::new(), file_path: std::env::temp_dir().join(format!("mysql-binary-dump-{suffix}.sql")).to_string_lossy().into_owned(), continue_on_error: false, + selected_tables: None, }; tokio::fs::write(&request.file_path, script).await.unwrap(); diff --git a/crates/dbx-core/tests/live_mysql_database_export.rs b/crates/dbx-core/tests/live_mysql_database_export.rs index 79e74da41f..a89f0bf0e3 100644 --- a/crates/dbx-core/tests/live_mysql_database_export.rs +++ b/crates/dbx-core/tests/live_mysql_database_export.rs @@ -39,6 +39,74 @@ fn live_mysql_config(id: &str) -> ConnectionConfig { .expect("live MySQL export config should deserialize") } +#[tokio::test] +#[ignore = "requires a disposable MySQL endpoint"] +async fn live_mysql_selected_table_restore_preserves_unselected_tables() { + use dbx_core::sql_file_import::{inspect_sql_file_tables, SqlFileTable}; + use futures::FutureExt; + use std::io::Write; + + let suffix = uuid::Uuid::new_v4().simple().to_string(); + let connection_id = format!("selected-restore-{suffix}"); + let database = format!("dbx_restore_{suffix}"); + let dir = std::env::temp_dir().join(format!("dbx-selected-restore-{suffix}")); + std::fs::create_dir_all(&dir).unwrap(); + let storage = Storage::open(&dir.join("storage.db")).await.unwrap(); + let state = AppState::new(storage); + state.configs.write().await.insert(connection_id.clone(), live_mysql_config(&connection_id)); + execute_sql_statement(&state, &connection_id, "", &format!("CREATE DATABASE `{database}`"), None, None) + .await + .unwrap(); + + let outcome = std::panic::AssertUnwindSafe(async { + execute_sql_statement(&state, &connection_id, &database, "CREATE TABLE untouched (id INT PRIMARY KEY)", None, None).await?; + execute_sql_statement(&state, &connection_id, &database, "INSERT INTO untouched VALUES (99)", None, None).await?; + let script = format!("CREATE DATABASE IF NOT EXISTS `{database}`; USE `{database}`; SET FOREIGN_KEY_CHECKS=0; DROP TABLE IF EXISTS chosen, untouched; CREATE TABLE chosen (id INT PRIMARY KEY, body LONGTEXT); INSERT INTO chosen VALUES (7, '{}'); CREATE TABLE untouched (id INT PRIMARY KEY); INSERT INTO untouched VALUES (1); CREATE VIEW skipped_view AS SELECT id FROM chosen; SET FOREIGN_KEY_CHECKS=1;", "x".repeat(400_000)); + for compressed in [false, true] { + let path = dir.join(if compressed { "backup.sql.gz" } else { "backup.sql" }); + if compressed { + let mut writer = flate2::write::GzEncoder::new(std::fs::File::create(&path).map_err(|e| e.to_string())?, flate2::Compression::default()); + writer.write_all(script.as_bytes()).map_err(|e| e.to_string())?; + writer.finish().map_err(|e| e.to_string())?; + } else { + std::fs::write(&path, &script).map_err(|e| e.to_string())?; + } + let tables = inspect_sql_file_tables(&path).await?; + assert_eq!(tables.len(), 2); + let request = SqlFileRequest { + execution_id: format!("restore-{suffix}-{compressed}"), connection_id: connection_id.clone(), database: database.clone(), file_path: path.display().to_string(), continue_on_error: false, + selected_tables: Some(vec![SqlFileTable { database: Some(database.clone()), name: "chosen".into() }]), + }; + execute_sql_file_path(&state, &request, &path, CancellationToken::new(), std::time::Instant::now(), |_| {}).await?; + let rows = execute_sql_statement(&state, &connection_id, &database, "SELECT id, LENGTH(body) FROM chosen", None, None).await?; + assert_eq!(rows.rows, vec![vec![serde_json::json!("7"), serde_json::json!("400000")]]); + let untouched = execute_sql_statement(&state, &connection_id, &database, "SELECT id FROM untouched", None, None).await?; + assert_eq!(untouched.rows, vec![vec![serde_json::json!("99")]]); + let views = execute_sql_statement(&state, &connection_id, &database, "SHOW FULL TABLES WHERE Table_type = 'VIEW'", None, None).await?; + assert!(views.rows.is_empty()); + } + let path = dir.join("unsupported.sql"); + std::fs::write(&path, "DROP TABLE chosen; INSERT INTO chosen VALUES (1, 'bad'); CALL unexpected();").map_err(|e| e.to_string())?; + let request = SqlFileRequest { + execution_id: format!("invalid-{suffix}"), connection_id: connection_id.clone(), database: database.clone(), file_path: path.display().to_string(), continue_on_error: true, + selected_tables: Some(vec![SqlFileTable { database: None, name: "chosen".into() }]), + }; + let mut events = Vec::new(); + assert!(execute_sql_file_path(&state, &request, &path, CancellationToken::new(), std::time::Instant::now(), |event| events.push(event)).await.is_err()); + assert_eq!(events.last().unwrap().success_count, 0); + let rows = execute_sql_statement(&state, &connection_id, &database, "SELECT id FROM chosen", None, None).await?; + assert_eq!(rows.rows, vec![vec![serde_json::json!("7")]]); + Ok::<_, String>(()) + }).catch_unwind().await; + + let cleanup = + execute_sql_statement(&state, &connection_id, "", &format!("DROP DATABASE `{database}`"), None, None).await; + drop(state); + std::fs::remove_dir_all(&dir).unwrap(); + cleanup.unwrap(); + outcome.unwrap().unwrap(); +} + #[tokio::test] #[ignore = "requires a disposable MySQL endpoint"] async fn live_mysql_database_export_restores_dependent_views() { @@ -102,6 +170,7 @@ async fn live_mysql_database_export_restores_dependent_views() { database: String::new(), file_path: file_path.to_string_lossy().to_string(), continue_on_error: false, + selected_tables: None, }; execute_sql_file_path( &state, diff --git a/crates/dbx-core/tests/live_postgres_all_schema_export.rs b/crates/dbx-core/tests/live_postgres_all_schema_export.rs index 30f3982a46..06f390cf53 100644 --- a/crates/dbx-core/tests/live_postgres_all_schema_export.rs +++ b/crates/dbx-core/tests/live_postgres_all_schema_export.rs @@ -149,6 +149,7 @@ async fn live_postgres_all_schema_export_restores_one_sql_file() { database: target_database.clone(), file_path: export_path.display().to_string(), continue_on_error: false, + selected_tables: None, }, &export_path, CancellationToken::new(), diff --git a/crates/dbx-core/tests/live_sqlserver_completion.rs b/crates/dbx-core/tests/live_sqlserver_completion.rs index 5d3bc9b96a..e594bbcbc7 100644 --- a/crates/dbx-core/tests/live_sqlserver_completion.rs +++ b/crates/dbx-core/tests/live_sqlserver_completion.rs @@ -1290,6 +1290,7 @@ async fn live_sqlserver_sql_file_import_executes_go_batches() { database: database.clone(), file_path: "fixture.sql".to_string(), continue_on_error: false, + selected_tables: None, }; let done_seen = AtomicBool::new(false); diff --git a/crates/dbx-web/src/main.rs b/crates/dbx-web/src/main.rs index 9d69e660cb..ff1440490b 100644 --- a/crates/dbx-web/src/main.rs +++ b/crates/dbx-web/src/main.rs @@ -1021,6 +1021,7 @@ async fn main() { .layer(DefaultBodyLimit::max(routes::sql_file::sql_file_upload_hard_cap_bytes())), ) .route("/sql-file/execute", post(routes::sql_file::execute_sql_file)) + .route("/sql-file/tables", post(routes::sql_file::inspect_sql_file_tables)) .route("/sql-file/progress/{executionId}", get(routes::sql_file::sql_file_progress)) .route("/sql-file/cancel", post(routes::sql_file::cancel_sql_file)) // Table import diff --git a/crates/dbx-web/src/routes/sql_file.rs b/crates/dbx-web/src/routes/sql_file.rs index 70ec20868c..9bf1952720 100644 --- a/crates/dbx-web/src/routes/sql_file.rs +++ b/crates/dbx-web/src/routes/sql_file.rs @@ -5,7 +5,6 @@ use std::time::Duration; use axum::extract::{Multipart, Path as AxumPath, State}; use axum::response::sse::{Event, Sse}; use axum::Json; -use dbx_core::sql; use dbx_core::sql::{SqlFileProgress, SqlFileRequest, SqlFileStatus}; use dbx_core::sql_file_import::{ execute_sql_file_paths, sql_file_error_progress, sql_file_progress as build_sql_file_progress, @@ -63,6 +62,20 @@ pub struct CancelSqlFileRequest { pub execution_id: String, } +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct InspectSqlFileTablesRequest { + pub file_path: String, +} + +pub async fn inspect_sql_file_tables( + State(state): State>, + Json(body): Json, +) -> Result>, AppError> { + let path = validated_uploaded_sql_path(&state.data_dir, &body.file_path)?; + Ok(Json(dbx_core::sql_file_import::inspect_sql_file_tables(&path).await.map_err(AppError::from)?)) +} + pub async fn preview_sql_file( State(state): State>, mut multipart: Multipart, @@ -83,7 +96,8 @@ pub async fn preview_sql_file( std::fs::write(&file_path, &data).map_err(|e| AppError::from(e.to_string()))?; let size_bytes = data.len() as u64; - let content = sql::decode_sql_file_bytes(&data).map_err(AppError::from)?; + let content = + dbx_core::sql_file_import::read_sql_file_preview(&file_path, 1_000_000).await.map_err(AppError::from)?; let preview: String = content.chars().take(20_000).collect(); let bootstrap_analysis = dbx_core::sql_file_import::mysql_like_sql_file_bootstrap_analysis(&content); @@ -212,6 +226,9 @@ fn safe_uploaded_sql_path(tmp_dir: &Path, file_name: &str) -> Result { + format!("{}-{}.sql.gz", &stem[..stem.len() - 4], Uuid::new_v4()) + } Some(extension) => format!("{stem}-{}.{}", Uuid::new_v4(), extension), None => format!("{stem}-{}", Uuid::new_v4()), }; @@ -334,6 +351,8 @@ mod tests { assert!(second.starts_with(&tmp_dir)); assert_ne!(first, second); assert_eq!(first.extension().and_then(|extension| extension.to_str()), Some("sql")); + let compressed = safe_uploaded_sql_path(&tmp_dir, "backup.sql.gz").unwrap(); + assert!(compressed.file_name().unwrap().to_string_lossy().ends_with(".sql.gz")); let _ = std::fs::remove_dir_all(data_dir); } diff --git a/docs/content/docs/database-backup.cn.mdx b/docs/content/docs/database-backup.cn.mdx index 16ce121efb..fa582e0f13 100644 --- a/docs/content/docs/database-backup.cn.mdx +++ b/docs/content/docs/database-backup.cn.mdx @@ -124,6 +124,10 @@ orders_202? ## 恢复演练 +MySQL 兼容连接支持从单个 `.sql` 或 `.sql.gz` 备份中恢复指定表。在备份历史中展开文件列表并点击**恢复**,将**恢复范围**切换为**指定表**。扫描完成后,可以搜索并勾选表,再执行恢复。列表来自完整备份文件,因此目标数据库尚不存在的表也能选择;跨数据库同名表会分别显示。 + +指定表模式仅恢复所选表的结构、索引和数据,不恢复视图、存储过程、函数、触发器或事件。文件中的数据库上下文仍然生效,未显式指定数据库的表使用弹窗所选的目标数据库。现有外键或触发器可能影响恢复;需要完整恢复所有对象时选择**全部内容**。遇到无法确定作用范围的语句时,DBX 会在执行前拒绝选择性恢复。 + 生成的 `.sql` 文件可以通过 [SQL 文件执行](/cn/docs/sql-file) 导入。建议定期在隔离环境验证: - 文件可以完整读取和执行 diff --git a/docs/content/docs/database-backup.mdx b/docs/content/docs/database-backup.mdx index addc8d27be..2606e6f77c 100644 --- a/docs/content/docs/database-backup.mdx +++ b/docs/content/docs/database-backup.mdx @@ -124,6 +124,10 @@ Each schedule has a retention count. Older runs beyond the limit are pruned from ## Restore Drills +For MySQL-compatible connections, restore individual tables from a single `.sql` or `.sql.gz` backup. Expand a backup's file list, click **Restore**, then choose **Selected tables** under **Restore scope**. Once the full file has been scanned, search and select the tables to restore. Tables do not need to exist in the destination, and identically named tables in different source databases are listed separately. + +Selected-table mode restores table structure, indexes, and data, excluding views, routines, triggers, and events. Database context in the dump still applies; tables without an explicit database use the destination chosen in the dialog. Existing foreign keys or triggers can affect the restore. Choose **All contents** for a complete restore. Statements whose scope cannot be determined cause selective restore to fail before execution. + Generated `.sql` files can be imported through [SQL File Execution](/en/docs/sql-file). Regularly verify in an isolated environment that: - The complete file can be read and executed diff --git a/issue-assets/issue-8729-search-tables.png b/issue-assets/issue-8729-search-tables.png new file mode 100644 index 0000000000000000000000000000000000000000..204a388bc86ef66e367c08e95c25f677858f9956 GIT binary patch literal 97784 zcmdSBWmH{3*Cv<*5AN>4o!|rr4#By&YjAfD4#9&ZxCFhpySrb4yF+jYu5%)9_cv?J znqK|&{F(ZBs8hGjuC33ri*QAGN#xfAuV1`)fh;X0ru^asOxBAR(6aEafG2Bjb0=TC zKzkuACamI~cDM{@fTg-2bee49Ry{9wf~sFV3K_V}-hF~`t?4CG7s zljDLX)ZzKzc?Mb>>#z%)@3R;3`}v0-rMY{*H4q|A4T+V_=+Z?LUv(`#%N#d;CBGh4P=tUPwIunSAoUo=hMt_IuFe;qY(I zzTg)Y+seeVM?(ijdSps!D)HSw3ngo8ZA0P!gQdU+LK>Fl(m@k(qR~PpT2ch$u>-g!O?Uz`umtKspg#;k;H`^GnT22*8@ZW;fz`YVuGBQr} zFyAxkiF@L5U+K#-P8x&OtW;drSm)~PNb3=PAH;jw<-vH&wD`Tt&e74vy=aFI+)J0% z$qfxREiF2l%IQ1~8&8k-rp#o`khr)wa&K}rh-;o2v3-_1APhZK)hKq39HMW6h2zuw zNDRT5@N%q(X=n7oSvNP4WendoWid>V=S!_8nJJv$N+K91TwEsBWO1mvx+%R$-Wv>k zElMlV`4oRULIjSfDwf#1GhUf8866xvJ2?8$`6<`$`RV1$mtggBS6@Up#Y{mT1>Wt1 zC_-+&cI`SakB5<16Iy@L;g7d8)Dd0Ns_U5XQCB2MLjemFTZJ=6D}Eb2PjgGyUb83k zm=1yc`4NGV5qFh={cmP%>_5L|)lgpcRJ9wST(Qm!I2jl(;PaPY&WMdw)YSAxjR}qH zhFk0uJ{hUJd)5Es5ct;kL$#Kd(FVHe(V)r#%zdkVyKmS1YsAuF>aF9q$OOqt70faw z@<>9i_%Vl)i}`GP^4%&8d{7hk{P zS;K7+bUlUQz(EDrKWIAgk!%?a*n&DO7h&x+scr7EFuJZDBs3yrCz6fBiZknaklzx!`6Z_9k-wFOX ztQ(R^TfIgmJfg0vJDvAU={m?6idR=xH+|R*85Rom=BR$P$H9L&s&%skx8g)h^2GGO zpu>jr-h>v3V9k%+F4kS2%7j-D24u+)?s>qu=;#Wj9;RayF# zprj@9-0RaTLm4-cNc>qdMeA>j3%$L;uOmW5=GkD3b0guGa0vK2c)QGPZ6z#lh;L4L z;9>@M6vC*X|N1iRQNZE%*3+zFJC;bkE2j~S6aQ!ra#$yNlp$8e97|QBfhV$rIi$) z8~t_2)s}}qs8L6*abVy2RpsmoGJpEVj0_7Qk}rw6)|Ffq!PFKM$}yD2r7K0y0zAHl zhEgSwNhpRmKH|H?Ls~vkm*C+gIZZHSW^gVdoyph_aXKP&bcpop0yAc-on&t9bUP(s zg>_J8C*Rg9+P2sF)fyubxrQ4(;axxLk}>!V!Az6mG>{jQ$U2?H<>f52w6Q*{rqzuv zP2aZISB1KWk(w}cNm5W!1_lI_s4X79Cke*D!Fk^noROHA*d>WZo23z2YE~XQsih=- zLy)9Dvt(gz-czQu`uC%mj(U@9z)hwbI|Tq|1@yqVW*uZvx#$UdE&0z5qY#82lj{MeJa zZparC&mEq?#+Skhxn;};b3aYYuuY=ziL5YuSZk;IRV*tKt%L3Gq9jVyB3w`r5FB`4 zthm7QL}S?=F<_Z$7mch)pkte0Ng{4x?+g^qJmML$!{Fb`rOlmu9Zb>Uw($%qt6GcY zgW>TM`}+D?%gFSZ@+=9)k0yXZyWk^xutFM79}d3r)7QOe2JyM}S}RM-Q%Mm$zV{n? zIy#Z z>FLpkV0x;sSqb?vt%`odCtQX}l#3BEU}JkZxGL=uM5BU87ma{p(`jtqyD|+ez0~d}B>&*;axc2t=7WiWLFAdEQRcjPao*t%mGfgOiu^;blZRx? z7oMBg61iMOg;hhnD{2(}X8gD>2CqM?y!nM<*iHn#5W9lh;wzbv?Tfr99^)}-@>c+b zUdzBip?H(4si@517S;}hRFI|&LGTF(_BoX2#||4RjbT%(#7T9}?n>Api;dn<;E9G3 zYX-}t!D6KTDIG;-7*eO@#c3N{)A@aEj1O^iCi$d8LlTw-R<}8bgjKPtZjON$C#$Q| zWP(d5rI#RUY&Ph-q9l~&wW#X{vO3$ex#z%TM6KecX}zP!SXV=IoRZP6)uR%LFarB8deJpgk2VRF zi8#2mtE+#ZpBjS(wAm_6VNr;JC||-!xVqN0fG+T=ETwgHPUA?Dx}Y==h{`DFsw%B( zBU;s(oP2&l3ddH+tH5%D(u0^sh8lkNE=XRV44;?vgu29Sh(WkhYZd$iCWR>KjcHtU zi^^S=*QI0ZAESxi9G)z6)BTEjEn8;JLGS=W&mvTEA>0%>v0VA_cfLj}!>gozo$yl9 z#p#!)OztmZqhJLn6c5j(kHfjd#NMI5lo;@^l4Oj8u#6V$? zLU5-+VQH!ACBLUjYx_|ZZ`mMCsx0+1r->K#9eb$~o=v?{gRNKB3{%8K6?9^TMKd20 zScKMvBigXNTffZ25La<_c9?Rd85q(!^E(yG^F>&)O!~_>RvJRXm~< zt$cx2(Q?+`7wclg@l>(lq8ruW7*d%;MmcMnShLIY?YHpky-uCshZbRAZlsc~4rc8} zzP>3{%Uvp@13&QE!nC$kzLY_y8F4YaA|R^!p3ms9@zp^t=X{O){=IxXC3z{WeMap) zVY!J-I%R)k>qn5dDDL#y3%LYO)Iux!x#vnaj;rXBKpsY$6RjgRB#)GQBz82*fk@Gr zbmJx{;^8uqr1BQ<>$Ly*GG8|}&{@|}#chr|}c)v(O8?pdtlE=?W0 z7xs(G@~`O3l8E~6+or4)Qgphs+g@jNbww9-k%4ne<}Tu;p)t@(RCevQ6^k?7Y3X=` z8gsfUYIs&QHZ~lj$WWE(m$Pap{CXStV0mn(xg#Zv%k^5{A;o59+A&~fBuwE;()>V% ztbd}UrKM$J(j_WF+Ohw-VIOy`R&-aiuS1JF7gO`fpt(Dz;&Re+K6}Pcwt1%16>o)^ z-^#_+iXZDIIyh2w(!0zdkLqoZ1i`nbv$5Y*T7m< z_7Pk|3NfPb3JD1@lJZ~)LESyBYCafn?yesX!@fHAaCZ-C`UC<64y)r=d7wAiI9wgX zUkN7EarMN}uX|k|yX++edYDUh%J3i&84;A^T3cd)OQ4bYmd}P?1+lzBS(OiMN|`LP z*`@4?uJ2UR)=vHMCFk9iv~S>mE8OYN)%x*DRDY!vG z)hqtWuOz8V7Qxhb;Fvx7u*Bs`Ao#0sx{bmBp*exr^Y;s9!y4RW)qA#K4tH4%tAo`3 znKh~L5k|V2o`U+a95rwm5~UWYTn^$SUOeTQcDsXC`~=?7wY`S-410X@ba{EXol`|F zTqTnY8^UdPG$D~)kK@7#*pir)OI{sRA=601Fq7p}d!JTJJ+J&W`K^Sxr+2PFl?zM=hx5O6Naw6&?yyAFAx z#>?exQH;khN6N?&k%R8Y+~Q&_K{_>Z?V$vPsKiB_-afOjlmB1=7T-y7oPhWahlEFV z=z)2Tc-boQq23z#Mc~m&>;37vyzaS!9*bf5(~^m zyRk-Knk8ly06QYKq`4nnR6ajHx9`}@b?^=#j32Bq8z&Jiqdl_asp*HXrCSCjf^a! z%tWu65HvOGc(PoIB{u_RG{fkKJu6w-C)BFZR0?$UwPC6=41ZiTg~>?vhrj}efY;#Ut06Ftj03G6 zeaybt%WfJQRibYtW6Pzq=Y#3G&_&2qA&>XhQC0B*{Q5t2iRdzo^QPjfgfb`D4q|P6c#T&Dq)2 zg9+9GDjpn+J9uVb+URkSvcvG&i0W`N%3PYHFSfLj1~hM@QDBKI_j57(sk&Gf<1k1= z-^pI89j-Yi%+Jgp7o#NwAiE42!xE0<)Sb>%efT-{<$L&`QW$NtM-y22BM7%68Y}(~ zbUhI%lBUF9jk<VcF#69(%! zu%Y7`j5uz!*l4WW-1R)GN=dpJ_^YVG3Tm!a#zgG-!m<8?ymGxO^pc4aR;qBHBAO7c z>gW#%`?*FZ7FxkE7V%xK@iK+I#Sm9jWR#xnD*1TPCYsa&HDwd*`=?p~VjdZ~=g@o_ zZk&bThrHfF%zKn*hDD3^xB|=WIF*5f3=$GL%j+Q*{(L5E^{8PUTUu@6WM~snu-m-v zFB{A^Ty;(41I&HB*fT*38C#PJ+K>JMO$&8|s@AtMy2@5gjbKy+0PZ^H)zpeDWug}j zVbmJXj`aERinb|7K*@}gbNb3vAn<6s0<6X&r1qgM#Xlf?_dr3ftBAOc@WUFjov#uG zMdoTq?z_a9>_zqHMNe|~FRHpD9~U248V(DlGCFi(JqKd+bNa&WJZdi7Gf`)!Jpn+FOO3){UDu6TfahxmTZ6{vkk*&N1ft_BKG?RYuoHxyqA z@-ujy&RygtXT_Mxk{I)zzmP6SL9COxlZc9i5rWiB9+oJ3MLP=bM7Ru%9tl&_^AK5t?FMIttq_e)|Tl9Gsp92acV*uu%0Jd#6dQB3DujlLX}Wo?aISQjjI zMhn>6bjHurS^mZ`o3P}i4)Zh@owP?kzLnQftcl&F5tQW)YW=i-{HjD&HHc-vG)Yw? z4TR+Jay1lNLa_q@HAaynso)~n>W!5XJZa~)sJcR)b#OiFr&ILtgJ7Gz_{%TSuSG&z z-f7qP^A;;aPX7#$*GA9ThBRvh69V% zk4Pc4YpzOS7e*i!3KXxgF{g3;p^B;-@3}(qYJ@Bo8~dgp)YwCZ;%d8+2042;b}P+% z!&h4}v)pH?vDyokCyQkkF}w>~-E2DTRqXIzwQ?I*z7@OLAA&*VJbZ5R z7@U1ow?}>%E>BaZUj4aP$94bB{O1;HXDApKk0%zH z9gs3cd`?p^J^eJFqm{K*75NUwB^=KRk4TUX z7zo$mw&Xv5{#>OoQd>*&Gu~Hf4mEPmd=XdD&@lTqg1#>g6m1&%tFiGvsHRg|i*h02 zrQa4(U8p4baWPB7-$N#K4{uKJv}7v8dkeC!pH$4;9!40 zPHas*uoDd(at&Y|#KSzS%>e2fk%zGS)j&)vr-F)Fk@_vxe*{1Ek{FdICnv|5PuI{; z_#lX5LD1(;qjYqBK6DA&XEc#F^uvD45iZ6m&5U71$d^anGyK*~!ZcVl2+f83v^w!X zS%oL3sarPe9nI%g3UBv?V{OTF(5~q5x-x9vP*dYzV|$PwhQs>qY;V*0++7Sx$;pAi zU=V6ZdbD5_a|pkbMvYc!iI}V7Ulsk%MHWQOm&znF`Aawp#Ys{x|(rV6upB_?q{|U zJQaPV>7_Wj%qgIv?4LxwbS6T=W1TQyZAhbzem%m$%{|Ne)X|wcT}KiMXmFPm@N>~B zs7086Eynr$Os<0*Z2g9cDz~|zVPbuuP4bco>?D|KqPpRZa>~WS7Lmg*|tl;D`@I zuv>)4*wZtva`R|H_U~KHk0G|zseL@JpaKrl+SlxxF&%+-Ry1B6=sk z%`nFrB4~>#?`@x+3*shoSGe20>>;LFjt*uSdI}59{>*_rc9Qk9_MSKWX|Mnx`WDBl}MNXIQUc_zO;p#Ta|@?7LwFwf6WuoL&R9Oi>E|)7Si-Z$IHz}I(WVkBb0mzPeWaAzKl*i^g5iAbi@VQO)T#M zl2|*o024%DXjpgdEhk5ajrJe~)VQsUpQEQX3xUBoEg>$k*u;RUJ)+n9dZibKfCX$& zsEr|f-5Gel9jLohYb*0_OL~&8P_U?#^pKH|#N0$gzH}OxgYkp!z63VgaEI+-DtCc@ zsg(Nj%>pVHJ`3zp`A%ggDF{VHh@Fd(ouflVWxkCrG$KN(GB@{0 z{cEe5j7?O%susWmfPd7&D&fe)|9Tmi*QF3DIqumJ`Hyd%dL@3JjTF9NZeO8Sjw;-= z?jsZL**ae$LpVVrd~){)NC|3FJiPmtBKl;7|hbbkN4cOhQrOq^G!t zhexDb$zE)?>k8`X+}zyKq*1LFn-!4|%E>}zOMIBPr8<|t4peSX5Z+cfJ4bj}7}|d{ z{-+c&N`i=zgq*?&F&Y{G$n5$IMROSE0H%LQsUrJ<#8qE#NNp%|NS>8xz30FjDPnv1qBU6;xH5h zB&5lMz-bt*QngT-3*Ec4xQ^HXcsX71D9syLLL2*wH$HbJWax_Aq5cgoJH_<$qIc1^ zqolNK2ps^{*9Ax{o9W=aNPt-9uL9!`G9rf*g68#nJ|;Am7atIK35 z&j0s#^ZydV*w%7v-yZ%43;5@TDgG-vpFz!|!4f9#sa0Cn)~5H@Q^xsCa&U3M{|mPi zetp_1e~mkA;J?!LyFMN0WCJk{*MFivx{^Y^h1I7|@0(u`3i}r4!IUR`~ z-Y0}H;o#hQqAaEps4=)QxRy2fDWZKT!Rdj`5j|8D(PBmSOQZh#v6o00ucAL%RcB@N z;-GPG@_mG6*4LpeqpYZEHW=dI-APk0YRp^dzEO5 zRLu4|_ZDQjH$9&+FE3q=VLSGY(m$p~kN=ZSp_x6deHIa|R#V|o)IgAloSd*``k_1< ze8hwX!>{2btW4y}Rtj-(;3=6lC6-pYyjd+*>gdOBn$Xa&WCs)G0XiH57S9T~5CcXe zJ3Au~&Up;+$W?QJ4>1l7^*dOiE2uuUNb~A%k*BBdxeyHvjkRuzy5N7xs5Cxxb_EaM ztzBJ|&RS9PlPVxxRV^+0g?_YDqEghFsjX@A_}qXl&pffk&*jLWan53Iz6V*v;PdcN zQQb+^6G@~6nKVHr<_v83JPRaboMb>wAg5|3l|oav_mZ_E1NmE{OYKzTy+>YmH+*_)W6iURv!*3x~7Js zdOj^V+1QpNcZ-M^J4%q3m)9m5FEuTv9@{Y&^hIe(LPbd@_&ZeaV#>n?A9~!xaE6r% z_O2>jZkjbGj|fJ5Km;N~x=|2t`lXd;wF2K6UOtUcwhF#s zV=HRxRnr!mW6&Ynq@|~~HZR0IGOPSrI+OcS5`-y&ZytwPU;fH2{I6E#pzKR^pyT3( zidZNq9rU`I5bep!%8EU69XKRlZxJ_&i_clwixqqqTcF3*Kt`a0XlWlI8MfO|UCg~E z>YrLeOIm2z_yB=|38BgtH%x|pbB$m{JHTY8(q06yOf4N{{()RHfAwNIKP!tYS(VY6 zo2Yh<+Q`-#OAq0F69B1#)YL3l@y@(-)9JXlPy|qk`R4pRiLkLliSGc81|3aNPmkKW zb8^ujs&ZNxfu7q6^(=(?&(?F|Wh7rkSDc2myz3t#2xUMi`2M~2mjt#)bvQW}?}sVu z-9$Q09xfbAKaVnSzF) zOC(;Z)JheodAG1+R4XUuPQ}iS5sok!rPrz)aOrtrVQoGzKK>Rj${k!)CE~2&Se{Td z$zI*qX;R!Pa}&U{95yo;`f8pp$e{0Unc}ScQ>w$z$}JaC`PI5vUHsr^>eb~rPU4GF z<+r)D-Fkt!RSg{^CSnIRav#h=%GTi$PBMXIWo61!iQCspU##9o6lFw28oHy6}q4rh_?DQWN zOe)FN0EU;7lanNs*aZud5ZA;{j3J+hsAT$p&9K$;g_V<&ho+adBQLvc*|LO z0ejip1yW2qcd+Oa&J9W$Dg2Wo!MZPuFlG@XBlc4IH~tw#x;Zfdk7Y49CpRaNi|6}Z zA>M_Z(-NhPeHf*Jl2Tv&>{`Xt0Eg(~$FC)wh6TuS(g;VI3Q7pkAK>li8A_E>X3Q@ z>xDHI*G%*uj*z0%7U#^_QVEM&c??>xRBY>(zfqiwResLu)>{b^{p%S8!~p%8oSdww zsR62;ZtT#Qcj8pkjEp5&64tPII3~WqnJv;hRi)yCN)L>OG!~=!LdepV4yukma zdveN^i4XxFmK~)Bzs{9gB`VU0;wrS)RY%x2W3qI5-^j@5^XJ#%y90#ET7>ulBN7sS zLzFxpF_6y6%ggKN=zRE)QYwHV1Cn#Wo{XAGNN8zkS!mnbDBq4;$Ek*kQ!AMU zD)wFG^3jBD_JbW;YGB}{2nUZDuw~&p16`+x1AfI=Tk`-8c&rw{uR$gh{q`n0rT7iY ze;AfGLpnp=)oAHXRLZ4k*`!oj^QDhHS@9=D{mm$(N;hAIz6IHo7M1Q37Mo>F6;Xy4 z8zm!%r*C544sEoMEDe}zGhW@{^66GcfUUY%>j?C(0Yhngjd|@oTLl%_`wG@MumX?kLs!2aD#5T^<))1@rlv zZ{_|5hJE}cLDi`%Mdea?#TZPyt(yuBO)4?xSHF{z|FI_BS_k$ovM3h9pIMml;A!Zv z7oj3;(+gN=XcOy)FDQ+iWqU{qe)nksLqIeZg13L%isJ>9G{B>!m7-a`TApn{iiej4 zu{=ag5WrSPlg$^X75P9G8L?^Xe9Df<5zF1o?e$iXCg(}M>1&mTWuK|#&?viuP* z*S$C{6p$hXghjIeNJl?*PE%+Dc2e+E4`uYiJ6U^_kxE0cAo}3R3A#fN{ z2Z6f32JX27pqBGPP^ctcWJt<>iWaE!cgB~K0fSpca9A7+kBA%<7CG?`!-pBgOY@J_joI1gY;a?52?+^d&|L($*grVG1Ii#I z3DMj2^Rj5A-@+_RHMgut!;kld=LC~Dj>Zy!JezUC?puSM`^5vx5{X{Nnpbk}Ww;rc_ z6p$NMY1pYJ5*EmiFW58&{ob#)+f(IwLtRNqD(a)q-Wpi97sBoqiqz^*17ykMjiFIH6*HxB?QNv=Ce52# z*Lr5Xu{zF37OA<+u(6pxh=RNpJdeEyAgBlz=?;HIsGqQoQ9EmI-Vn>J=LT51xt4HA zO1bCg5vhMDB>Z_0OUO!N(v@0uGpzrlyg$Z>F~l2io+L%#;y+VSSqwE_5!|F>>T zij8F=Jz6`wE{*xz6>#_?m_N4WBEwZjdKcKL;)@Lj2LkPqATwaZQ1V z9~TL>j^{NebyP#gdiGeOSQAM~R7SsZHBVt>S|TZ+QM8xBeCAYD?W2;zD_yO3Q22&s z+RVLh5+6>?!6&NiITFS6vmjD|{WZ%JcG+?g(*U+iN+$tWTvG9ycq)kI?+1h}o$li# zo;zx@wdvvmu-yx*z`NOwra(0lqN{;!?NQZGs{k+YH$7pW9my{c(8+TuzZcU9uC&d~ zJPf6XZ7-iTOc+2Eb#z$vQFoGqucGDfc-XV&mlQ!DtqgS?%Q^)`TrAp>B)-rTg3yD} zB15g#wj&sNhH*NEa?!N71nME#I#~XIgzE$@otgqdgVbXkI`sTs#+3dP0BrCJNi z8Q(3a8H4nuA#R&p0phyiWk=Ls^CuruXYE#8$xiI$K%dz7YEMoflA3{W-Raz$8*0D-L13vrFaMVwNv|drAJ_ zldZeAhP{lOxZq^W+C(8xBDPMeq_msO){PQ!A2XI=c2*7+X`oftYC>B8-6d)pmz_ED zI_gK;>_u-8MJI30F#8rs3XHryziuMVKuk@-qN9IJoSCOw2c9CDx6^3KiWiCaQ+{t) zkSpQ-;#!lEl48e05*H6XvI?Q(DbmbzcmA04If=}tn(IT2sIYjcDkjb%4VUb!j`p_` zdpBvN;K5>qDESCPWLqv(+=UgJ$URQ`)2udWNo6FfX>#p*!UY3L*m8DGL}L|C+Pl#F zOm^3nez9ISa4~n`D8)rN2K6W|9}^Xs1?t|GGMks zc#U9gTk4K(UW7%FC60@0aQUF3CTi_iv!a!%uWX939?rII7?QQKu%S!ENkKtQCHq5B zNzqmx2Lv+r))8ya`(aeoj_5+cD9A_gj+z6_Fp`UhqfJ3MQZTFR!a!P1My{2bo{OHH znqFgyRB#Co12Z!gt=OW7VWGXeE3&cg;xh_@^~|0qWiG`wgU+m?jdCx2rA4c8X=r`2 z$~+tjs)E0{Pu4{6e3NolO_y?NsGAM8z+}MZ*%Ml2iQX@Ssi?R~^O;m2)k(aRl%(&Y z^~f?~0mY0=DIH0%@82v7=jpBt6iVb;SX$n*@eyO<;OK$0Df!;evHiUGF}Anr_vxH~ z*K+IXXmODfJ>j9eX}?%O=w9WC@8pY2hVPyJN2kpzV%x<>ag)>MjQbdB+KFz~Wl2+0 zD#4+*A4gd6q7G(Cow&aaW49mGt*$ytW9ixcd5 zu)Yb)d_m>mTG=bFP2yT!{%aVd<5aZd8J6RLHw36=X5bAR8!;o1pmS}IshsT~jdteToQ6+ zJ^0P%CG(;xYHQ!G1)`Sd*3V@7ovi%C9cwjT>k!@pI>2Z9GrgVnCfJaVDY#qqav~&< zNV8`T0M@ci>uGu@ks;BIrTyV^Lqh{LLz|Ud*smq0@o0Pj0v6QnNCHmSh^R!7Ype3M zkjz;}2hFfLWe`mq z`z?X3kk3lJXgWg^Ug7Y%AYpDNlWXLPXby<8RjjDJP6U(?yn3b za}-T|JzH3?x^uYqhTCzgP+iaCHc?$)>28F_ZYM`P;`3|7OpmL^vSFSK_lLoWiHhcv z#)GxaKzNkXbH|>yV?3J~&Cfs!JF_1#pYvWM{#!lov)*eVcm1nxj(rLICoONOsnwqN z+)vj)3IaC6Nld8kZr+>b9Yt&`IgLpxoam}(tdXyEY@~bc7agxWnr_oymg7X24t{yQ zeu5*t`1zv%xWggzbU~?R`Ot92#>QsXb{q1?qvd3Df%|*z)C`ObWelXMxrWGZ_QGZk zv+~-$Pc$MRTZyW=1U9pcx=f!BR#NQN*RITB@DNDz>@a@eOIEr&S{R@wm?D=B4;L3_ z)(X{Zxv3P7IQ~Vw>3%dldv|%j(yVm8dbL<5*m@rnvS2IQ{CLHGYUy*3tpD_o?3JjL z;4E4L=NJWpScZzs$*li0{o~o2z{j@f=MLgn``Y<%`COIDL54tcXgd30H2-mAWaQoD ztp0QLR-}c$oBBtR@bF(bInUy_dT*SN^L9tR zRaa~r9C24f5_2=t(`&WDtaxuS%~#s3>Zu+4k;1to4cQvnd0eGn=iw)L_F!?CF1>0f z{LaJqYFrlIhbEX=PdvS(=}h48dU~MqmIMLsfWz3Zo~ZuBaKQPnd7?nqO-ax(9>LNm z6-}jLA(EPtYa9t{?BQ|SeDYM@wsM8@VRPl zTn${RHGM7Qt*@zidny_eNg@Di2m*(W>|b=y*UnA4Rrn##?hRkP>Tey^*grRC`fN6KYg z`L()QcS=~~oBj?N?Ntn^knfLtJFt`WA^{}EPu^v2%`u+tmEBa(f^7;kyzh5x?4;Uu zz8bJ~QT=n5u6H1g5?80bqwzWN*T)SiZ+}!}@_l8Rd{{Vi7g59m#PH&2qKY6p%LIXM(Ay>JhA-Kau3uJha6EABt? zlJ(l`Rx|9{A6N~ebe&Q%ia@~g;w%4g!{!eKA>H!_ z3?KUnAY7T7S8#FjN2-E!m)FfMn6>Mihwwo=W37s?IP58!P1Z$x?O_U1VmXz@{dVkY zr%(BWzxQ0^eLGzRXsAmc`H!gH2wbL zgsbZ;ZDTVEcx`2M^@7=h?rusV2?Rt`$*b%(yI!vW%@x0AUB+L(t3RsgPESg4UtsF&e}4nY9!V-_~ce2^6> zJlj^+$HBqgxEx|&*|a;_8BJ}$S6?0|JbdfBbko!G-EGwicXkll0(3+;PE<6rP{TsYHC6X6#6Ez zMeA*s9mjZgN7B94`=SW-eJ&G0AsLfXQ$g$Ep=6POs9O#vhfghk;nOB!CsrY-!Vuz9 z0TSnQ>Fab39B5Cg06@3_uV8U;cy1FnBjtlu`W#V{__TxBQZK;p$J6*={JN~Htb$t8 z+8@B>$&8wl>-;>QBV>?ZMcX5N%`!alC#&1q+Vb*xt+^=AHCjK)85nfH;EoWp8mxWB zW+q#HC?*x17;+W;(c3o`@M>Bq6A z-k00#Iudg&rcO$R5WxDJ8@_=(l6Ba9A8u;brg}bpD918^J|@^X?E`$Q-_tFP369(2 z&tpIlb2m=cD=JRIF==XQ!bY|03_e}2`ng>cLPSGReD+D7HR^5C2UWm7EO*D!7w6_~ z)+I^lv1tJ)WL(Jac-|}%EX&J(Kam?Fux$n9U@M;=l7)aAY#EbAK1J~HooPv0+F`j$q7cB@ z5s~|+M;0Jwm zK)Xc;OlNr^ERJ$(RXy*>mTI{}+a~&{XHy{qh_qc9uK;}^A9_F)c!=$0&GbG$6Gasu zA|iU&PPSP!`b_)1uC7lP1>mDIpLRjdn&;23s3axR=5e+Ubw15amlH!npT)14ULzpH zL8+*!E8qzo?}K+&?H}cypW6KlrR*&A1`_G%>6`9Sz-h_QJ|+x=QtyGJG&7PHNb3h= zC?%tvrMQ8vNqgb2C?L^OQ8JVrJa;Thp)%)Pn6VxA!5gjrZ^b$_VOq;rsJ&UG(;wp8L<+^D6eg6xq~|-`HZC>&XJA>miRz2Sh0M8Au=#^l9YM zh)gIwNB)BaSR#q{({-~0z7#!z>}SK>zLnpNZ*N9x^S@7)4zvMaNPUmn#%x2w4?hU^ zI?DIx{G!66j+UDNUMa2ujuh;xN%t3VkXHjvzp1>bsfn~r-(hFU0yglaL*L=A@qXZ? z)u`~#w?7L=Ev+mkfV|bNYUnqr3EU$e`K{pfA#)V$e3p=$dnTOW=M@j_bfbY|!vd3i z(F>HQFZ82vzE8bo`}{h8f5?*_kkykgc$(s;{jHj)PoQ-I)*O%l{aG*VH*l&ytLr8z zA<+liK!3iQZ6DCz9TD_9THqW4{p)9t0`TD};z4bB!RL)?b^XWkNs#M!hR;)Oj396| z^5J}#h5pFlFSnMy^=e}i^MAG_dY1rk!qZW@Q4=`zO%05So_}lt3!%AB~|-_%rKBzcL^E#RGxCy za)vop@B!aK_1kikOiY~Le*!wT{xl>lV}E{hadF|X=q!q8HU$1@z$>x$E-tmFesvlJ zmFVEWL=3U1M^?Z_qPs-8_xI)gAUj^7-$>VC-S?FUIfj z)+kiHx?9G@$k4xXPQyL<#0cblKU#mha`aM%YdYl|0pwL{Y!sC8w6!$5N z@8r1o*!N(x{?v1yR3Y7ItT6}kH1AFOy1wsr;?0fwIE@g-lg9VFJh?O;CEwEZ?HIqa zaH)zoC5rYCq4gW%NR)`)^VR3Ji!++c20{$Gb!WqoJqRI}HJZSz`fxi5zwN`G5@mHY zDuVv6=^lp}mwk%@AjQ?^e@lEq6Y$bkv(d39EG~x-6m6o>>Ujx;D){NgP(O(m2f3gy zz69@p1A%8ZGPh-|*2TkKE^4OVIt=fp;U}8GI6sl4s#6@p7+z>}rQJ7g-efq9@jkon z)7>6$s_Uo6qCJmtuhK(d;o^Gm7WqBi>$|U)Z`Dgm_<5ggQpf*Pyvo+)cS}l0;E6Fp zLKe7Qa`IbjD^)lVRCszkdGHe6ng#U#mLY)w0}~UdHd$_DA}7~QeCzEu^G8WOHv?CB zCF1b%F3M;h+%Pq2A6njFnG2W*EIV!JT6XtE{m7RSyVt_KgMivKU;ZjQZB+&V#qHk!Q+mEQKi^&9-TUx<#Vyx0{k zO@Ew%*w$#-T6Z(N&dgveq#UFjXjnwhAP7A`ZyHNBe5mtg6t`aT zEdHq(p5NE$lMQ9A6=hs~r4CWHla`;m^nT~Tk1Fqd(sg`HjVH1?^_i=6QPrO&ho!b5 z{Up5!x?^4VW7y11dq(q2J z_0p!|*XwD^rnH8pjZdBki3B*bUdAQQk0*Y6<%|7gdpN zC8a^SyF*%1KuWqrx*L@4PALH?>8?dC8Uc~+?(T*?d7l6Kp0md|W9;)`@69)0ELiKl z?>VpQ`qd1b=2d^RYw(L-USEhQ+OX$b{}~@rkkm<;=D6}(IYWlLqg>S9!MeO_Wp#B#(Ci}ZlL{l6z1`0VILR2mh?L=xS)2V1d z(F2?v3w^!4Z5thXENftj?VmQ_*GFU}vZQBtb@5}4p}(h{$OXOxe5@HJ9`F7ES*b|8 z024`{hPN8ek~{{Xays7n0i$Md`48e_xfsscPUotKh#@DFU;tesx~ds;C(MzGfZSCM zP%D1FTTFVSe|)<<6Q!09RWA^0%kpfd_fZk)CcmQUoMdj@3ckadT_Qb^rJ>E@2@;-N zi1KY6g})%Ntyf)U_IY6MPc+MP;L@%9{MNjt(QdUn%hhjp=j!|hwpREtO8EGtsXO$X z`-h0rvIMSMob}R++gQrSn9(Gd95YkX4LzKDSg#Lo&}Ws{C_xWHvcZ&ysK^N}x2tzB zxy)GBO5Sk;d1=A=h5ZBQE+b#~6txR^zS0^k$Ar6nj(WDfkI!zVzyCqJlaRF^)`2;C zeQimfhzs@={TTxtUB?_h3noKr<#!oH#0qISx#}AsV@Q}m`EM$f68D=aB0qTaSpFBx zlvr)#WQNg#Pxvy|Kwtktr-sX%T~H8zN`l;?)RHHD=h;>Zd+SJ7an68v}k_)LKaw0nsP6J zy2q81A6>EfM*T$JC_Ba1UaefUH{24~w0vU>aq7v3*)1a0AYM++3*uclO6Icq4uw~% zf3$ps=@hUG4H7<&%0FtnEp1xc-6<+nkd_vC_h$rq-N z{Tm$(MfQmle%PYOBM|ov1rwZ)82Y&^AnHFbxe|7oDbcrz+ZJ-wIu0 zF)=xE5ZFHqSGFE5TOT8oyf2#qIu@LhY|){smArXNAL3pJCdeMspl+IZ}Z#^`m7c{#O88QY7bw%4Oc1~T-<=~5cFc^4{ zQ7Ty%wtaH3B&UgMvXnv2p#nxqcBi0j6yg#>is|poTy`YM0)K5oKAD=^I7?xtS zb8D@3aQ9{Zn3m5s`TQMSmZhg9M{$!t?eVAq1rOnMiJ&Th_O$iof=86{J}i7PWW{CS z%t0(7iwT_!tZex5R!GA{kQ~x6KA-Kc2ugKwJhKC|PnO-?l2rm!75-N=wC$)uM0qox zI#p#}y~Wjf2sMHBbds&v2lft=A=+O~za`&6Vw<-G2(;@I!G^S@1JYGv)58tym3xmm zWo)F|DN~G~4qEshHOa<)WIJ1fn7Vy03?=TTeXo^v^0XO$%49!~3ma>#D8JmWD^w*A zO~nl9Bn7MAJQ(sb+=7ZmyRgTJ_ua59EEON!&2d-M04;sOCMDLRd;X>5$Yho|VmvXy zplOnX<4DN3Blpwg)N9X!!eQ;d6(ebANTZMafp;h``Yj?PR+y_s>~uw zuhNI5B$YPg0l!Z1mfSTvSFfAC{L1o(4B3ZMlK5d0N}}9WHl)As3=pVxx$jmKjf}M? z1DDJ#GVVest)AhYV%R=>-8j1<1*t?i>jYxTcazBR{Xk{@*o*|9ZyvGcCYfi18k{uljUD+wN^cV zAJyBf+S28;aEeTvf3|6gwJObP3K^KeshkxfFx@8~$R+CKS(ERoT!$5ZX2sR968o2H z_Ea`Q{Xk6ZqSDeq9BspZd}l%xE0`>efKPBU&B4LmeyuGTcZ0|5g3u&&Rp%!cnvubH zc_gSVvO79Cx|$5v-|lGy z6{V%+q@_Q6B0GP!cv_3}lYo0=mY5okDz5L;Jg{6ZHY6lcl4qfm-zTKN!w?mXyw$&B zXE_vlWwcjmNl^wC9*U^W^XC#SSgyw0aB8LMMa$x3?CdJK_t93$dvgsI$E#t2b+5@H zIXp>I`)s#D5c@M^u-(t3>PeZ)2SoGS&2@&PYm<&I_zxMtHUQQ3Z@zxNUW<@fmgl~L zN6AO`hCW;F<*}5-kpZ(-KdB^$W7s=~JxXlS;$p!pj#Q?2Cd*`FY^z~E{Ms&sslg(& z115<&U@F7(bi`RCU43-D^ir;Y65hgpzi=!sW}KUF=yQT2bbi&+m}MD*yS`|W!lwNL z7mu2JDd!7h6F;LUBhGcQ&ArV`b?=93GZ_oE*ziUc%%lVc7Fs!sIBe^B{?CHUAuzmN zZhEoMd4m;c9c&kLH&y3vO~X_`f@phL5D%Iw;o;p zmh@413H=_7v8;(a_Cd%G#!I^u^mLWmVrQ5P#*?uW{(-9OSe ztgs2;h?ob>;g=TVSYBMM^sJYiWTEV2oLm!CcAkSO9Y)_xW4COG92#cS6OklK&%8~q zSe5izDYPC>L`^PQJvE^t^`?PLNKgK}(*&OY+B<8;ay$|C$PD?)mZd#N;(cYX){EJ{ zg$HZXcTK0L^v?J8H+Cd?(0SUq30LoJR4Rk}xyO>vp={UXgnU3a`nv zKi0Yd;X-j9wDj_BE}|#X^@VIHVV?{v()!%k@-nk@3@~hI$k2cU!GE&@D_7S#F)Mil zv^ou#b|~~N>=u?zj_K|DlNprZOrnhVdskKJ-9wRZ@Iv6aJ0{wG3V~{6sfZFDV!2RB zE5IO%7TCOcv_!BR*yJ~1@P2JWd7{^ieCL}E@vAR8Vjc5lrvRkKXLAhZxiDbr)jP6I z9S$HPKY3eT}e2M1@)@u{TS(7f_fiLWOk=|k@{%Sa!? zzh1(Bhjw%sA=m)e{Wn#5tVMa)S0h6){009 z>F?BrHIP9iX?D*AM(dt+t!?vd%G_MyZi(vSGZjTQLek}5MP=5ftQ8%)A&L_{X#gh0 zr!0CrB3lxPuCSOabr=%TDtKWXMD2jgOuRuvf}4~c$2dd5OWW|rTeSD9ABOX1rx{ZV z_EH*z6I$>T@@-dNX7~sPIDD7g7<{dhBTK!ItFU3Q2ZkEZ>bpd1KXrw~GZ^!YPDMvA z?2$?o%zhQ6vaQQq$8*@Np=T<;NA2qpemHi4j8UARza%oNNBY95#qkNmAhvYhu$GOhsc-ZePLWNft z>DFF@n3qo_dF=~4$k#73vqk^KtsEhoVqr@Ts-9pF{THtoLHuJ`16UNYf5viI*)U0{ z4c`++iC%KK-smlR2B~^;StL6q1eC_#zCld-%$@)RDS$nEAf0{oq}CJ$^SABJ%7Kn- zTtg5x-`NeutqkThaK&W)Glh?jO^El1KY8u5t%orTJHd$WA`ep63J^y8{I~onlzn?~ zEo(B9ZLZK@(6SE-Do@J0EK$+X|1syyYkd5Oh4h)n$&MQ!0tsD)tZz`Wr4Z23Z7>-% zXu*7r4qjvZtDs&af1H|<5^mS`2?|qk$sT#Rj77=B#YFSLFAirICMhxTOU(?}fFdO6 z?_N*fB9j1pG#=iEnbiz;*)gLdDxYj?q)9&e(@F}89B4;}k+0M9=fzEu;Hu3_fQ!;F zqOGH{nspGEU07HMG>rlRz53M zk_&j=3R3@m;i#}X2FQ{V)g5h#_>(uAJo_~nz?_Ok0`b~3)IJ%Se|f@Uj&QKS_1X^X zGL)<~s7+3>e)_QKB0Tu)vx>iM-2>w|z^!@pbUSIt$zS+L$y5ESn6!q;H{*E^E&L7u z*PthO)|drvcX#I>)ut2s|MZ)mquUJfIR5~4^C${`ZGTZc!8*WpHLoP{RlkYg>2l6v zDEz&0<5a4y}i97G?ACL&tHoSJ|6ghaZfI#$cK$q+ft;;72RC4B2s7l9H`qOpW42QRMM_S?JR)+@{P{)FuNA>l_~73$2J zzdm|1Rc3WZh5lFmS~mCdd4s7!w|gpfzK-)V;6@NB^3Y%1E|TD0`~-hu=xS{>YG-#B zSftr{Kb(YZkD3+qyy12h1;A;CmUUd~Cx*l*p_^xM%5Vs%s6?D!&c1UNfm8+WbPl_d z2fy2}u+XvB_?+%2-sHWuNhXeRU%v1S0g$f4Wq;v%x2*O1V8j+a0j|r9xf$^80eSo5 z74$NXPenwe?MJ&3aWiq1f`HH~+9%->W=>F05Tf2_kiYTS01X2J z2DQRu2@%lS+65jN9{nIoq&nq)^q}wj(Yn5&g(?YiGjNw(UHuYQVhk!JA(@+-yFcCB zlvitdeZowXhl7WQM@-CWKUNSfgb&^xI_fwj_2nB*cSpNE)^nz4>u`L*ZiD{x$vT_v zG+tcN@++%bn`Cb}xxF3|A3P!=hi%Bf>5091>7AYHMzC9w?!(2b4cZ%yqu;cnT-Gz6 z*;2ZrGBF4UZo6m0W?!GiM*zIzRpO9q^q zl(BK=xVql!uW?c3M<6rMK+7GTTYet#VO7=7@2vAd2N*c&K+oJd$!sg zku+~^zP&Zok#;sGTOdVfCVi?Ef%_!oD5wL z$}!58cd99Cy$&sI`lgq!n7PezS8Z-)GgY7UtI~d^y6T`|lNrs48wCy;&psrsi-BkC zVcZS^GE`JXof`GevDnydOwb4-9gU8n$&T%ghiKpTynOi*s7p+>CMK{KeS-9=(23;~ z4@*YANTHA@DJ$PyZ)TEb@Yw1LGbw$p`A#MlxW7 zePdNLhX&w{_Gch#)%_Xy2{YhQ+~0KK^Q4G$lUZ_W{bU(clc{ z4(0Y@*&__PKyWoI#e)5*XwC@D?PA?l*=s5}k+ZL|@9~ZoA1|5HsMCEOU`L1ez>Nga z2KbXf-%AF8=nv>ha56C-0Zeh9m}-*(;7qsMgXYUS{E%*k$3tEdrN^`UCPo|wC#Un= zQ>OjJvPCg;;p(HrfGX2LCI$vM85zFYJqL>~MSxZ}13UN_Mfe-R4G2YD=A6qSjE8gG zf;+F*O?d3zSiq?F>LsA8q}MHe?3O6~_Hr$BpzLO+h&drVr?&QDbXX`6o8xGASora6 zkkT*~%qpc(q+pYaK?|C!s@X3UQJh13uvIT(^3Xq#VI$4vt2d|wlN9G$39+%MsUCe@ zr-rL5&IdCMJ4t%Bh9J6Rk~t@HMBkEw`(i&;35X$WOzi?`ffR}C5Co3C#Jpw%8?vB` zxcEWyGb#7wCM`PHcJySS?&k`e0;o0aAai5%`XdJnI!hw8#>1c zclToE95fxaun(v0VAztDBcMkCn%~C=2M8=7PRk`7x~#@i<-ZSGZZ9$)Z_JFv*G3=j zCW}+5CQG!!v^RoCyj`!?A0Li~gfr~AQy%X&M_Y?OUGG&5pYO-T0OUZ#7$i&kJPb4^ zcdT?pDQ0-?OzQbGyDaM7@c{{wBj5Zf^BufH!%2Tp;FQf^I*Z*(t<~(>(WB>$9%}_F z;6w`YqviEUquQ`v+|B%%!oVh4x9_Ddh0HYED^1ng`8C1?C4s^+nwMVFE_A7B{}O*}h0I})#} z_HI-HuwobOHZxg_t>g!TNSbYGK8>re z5wq4!^WJ9WH+$2Y!k2UGxlCSK2*3pz zF9qJyV&EJGSR$&=3Z~ER46k;05{SC4Zl2t)td`|nn?!Y0b-3WR7z)Xu<|XoCZxfRM zQu0RtycGnATnp1%6j^F<2sXQ<4u;VI0n9lWStUQPaZ#gs-JWT>?jH8{%e3C?$lgV? z?z^=1XsKCLspTLdR?O?B0%@JoPPLwQg`lfM(fD_{Jg_!^?vd1DS4~s4BNy1ybI7oW zDp)H(j&Yitz|j(GjVg)fl1)EDc=rd83VhVD-h? z+`O9;|Jnj9_M3T7T=aaPzCdJZ1oS)g9qjgFTXl=>vVxua|YXVDruN^@*sTO zGDeVqF@k3|I5Gki74`Pv)@D6U#rbeS(DZCdx378Zxs-z}yMpwZ6KpemOOK}v?j)JDt)x;ESct~h%J(!1<2S^p7HRV#d7zG)v4qLo{H1TF>iL*%E z2W%N)aOmT^=e-CMHjIW<^#6qgXp~J74DounOH21cWSN>*PUxxR%IC9zNbT~kEHh{g z*`@hPQ-n#xHgK^(5kw*6VPPXbiC0ljGR1n8Exfx|#lmNbML^KxQMZaeKBU7RW6`Ur zpIpwO^`;U;f)&pI86&7y3^)TsE_1v#3j)Iy{>Uo4ybU>$5pM)sZ2@&ZRbeD66N>rg zNe?=2dmrHgp5nuY!{&{R4eAU}!`WH}G3nlA=sIY@>|OD=ER)mFhB7T@se|9K0Er9@ z4d`)KP7y=i)BILUbyoAzf%4n5ZrehoA0J?jl62-bL+Q&Bhds~#=0y;Aj+YmF0>fZo zt@Bm+Z;_^VF!19aC*uIsWeDD zr{rC~8GvLCB14vs)AZ4=Vlr1k_?6Hr?AH}R?tO=v7X{Iz)=^Os1v%#*bEmS_3%G}B z5bYP}^!5f?aUG|1)l9F8Xnf2I;D({!;~w(7>+6{u%6!})urUy4SoSzTW3_23hlVEOWVZrls5Hy5y=lP({>=L6~4|40-OgFAa za4%j#_g#ceeTK6Y6%=aQ7h1M$TCMmu=Nv#CY1L-A^n9w_exxPR!Lk}BcMeK1BcLN7 zY0)~~r@9>^BJsS^b(A|xcbQYw{={H&iE+^_1+oH@blu%lbJbm1ooVlKA8u01HU^tk z6nz>AT30NW{m>W0h7VgG5B?66UO`C?EX}QJIXJx@y7GCRUv12mZT@aq8dFiMQ57Hm zGEt(Jl$lhN@qGk?jwBwL=l#|Bq$(N=MvM<)aFim3ICb-qezRw7fntr2q#$pD`a6Sn zP2HWG{wqerZx3-+P^MP`2V6{w2(5&ua9*vvJ|iRBaVOc{ZVo7^_$#*44rVZ*u}Mme z)0$R;Apvn}o#r3x-tT^zvp;1V&Ck5tGKvC^6zA9^{k;y;dvW76u>T4w{vlvef0rVw zZ2uQD*a`Qpy0 z(e=XnI4UE&^<}CZvoaBL^FF}xjw~d;i}?xah)N!{400a9?60|)=;){4QP-4>JwLc4!Rjbn=Vu(w<-1Q^a zA$WQH0!+08kElGxv)QUVT7|{-uJmkdFAjw+rl8pb_0A790A@c}d^}!DWYiMB43tRc zF#k&tC6tz$`ef|ds<&WY;#tPCjYenv7aZbxAh1R7=#I(AI5=UP-k^DckFGIb&`tny zB-HstD1c)kOw=YqTB#GCG#9~JFIWCczw!eZ+yxwVk)10M9R(yU|Gu2>IjEkg__kMQ zHcDjw{UbkL(2x6i0v#KGwD^CXZ*!k^42Xqi{UcR*{enzHBNafW{&fWy=NMq1BVp11 zpro|yvgk#jK!f$zEiWYIjJsy~cr)s<#bdIT{7x)rAfu_)=HBWwaH_r&F<(*V^z_ms zSAvFKLD0qdqP=;GnNKFAEUo1;H3ONqJ8!mHe!64#^lY7FM@JLkGYf9V&H_E3n+e0( z`c#Ao_Z55<^~W=>=0dgY>Asq+@b_kE2}uq#n@d6?UD~CtlgFld^`oUZ|GZlrUykoo zMK!r8bp=-_PlN7Kan%sW3;{5PIw-|kaPitOCZ-VMI);iITaTOSZIEpg42MQE#jf8= zYa)zof`a!^Nq45t@U6^-Yu~HF#~pl&k*Yqgw@(imA00rbK)6>mhgPbF7c>dLVCOF@ zC%OSCCBa=~)?<@How4&FW$~{u*Z4Hk{NX~&d3Dtg0k5^Pr{T#kePUB;uv&hX{>X@( zD0cc%n?qPVCeA+Dp$FA&Y26)z_d5nk~iZ-(&U8@spDO6rzMi7x|DNzy0kGTBrPCp+*BF~x#enOO0Q zoUd%R`wv?xlNpCBmLY-(CeUBN9;jUCk|Q@bpjq93gQtA)(UdVC2NN@n*Evls2RbGb zhE#5{c0=b^m?U2`o_o0;M3#^viZ5q9{Ogx}(rw53CmIj6p^nc8PC|6?h|m?a1j?0Ys})JKm67)O7r%q~xQWkQA_p{B_u z&dXwP&xb{ExxcWyY#s1ZcN;aY5xvz@bKB4VMb}bU>lL0+mK^_acwyzoZGnTS5VO76 z1{g|XO^277aQy{%-m@F$JIPCSj;0(>GFr`8n>F|VvXs@d- z7o!{C65jn&}NQRwY7?LrmOYHQIRQ4P&bbGa}+@{1%Qt zz_PPaaY1GHMGkfTPotKtHm-J-sjB3eC_QEs8$xjD+!)Iz?Dy9~qX^lbxAKu-+xzyP zcualJxcbwJa3*f-7jE;Iq0_VJO$b)zPHnWsOITRgsqga`6I8Q4zRQ7Spr0e3j2}1= zRkaXl=r7SOyzutj(fSxq-blvrai{|ZCH%$O7`{V1Z+92<3f;}`hNS-ITY_^sfXWWoW zk=G?JsCmg+EW{`^1juM8T?mj;u-wU4t2j~s${vH!exsjDV50MmIsr#ZCt@RU!_-2h z3biVNsU46P+G5YX(NCcXCj9-8WIT@w{I;TnuL4xDG$jg4{_tC_O|9cm(3+C;lFwrluE@yv`iGF*{fXC)b*O!VD5Lt>c##783pnAxep=% zQiW_>?#TKUSU-ZBsOu0x{y#T)o0_h}%NMAJmyxnE1I!41kPzOn)BX9nnhSXH)cEQJ zuod-A0 z#EI{aiYi*X!1_Hxy?fNaRkCzyfWhy&_K!)d`q7Qle{mSzDVI5JE(1GAg7v0mFVc%j zh4!{AXpW&_fYc3!U-9Q31*OHEiVTXu3tKEKRAC`aC~ve&1Cj(RY0fV`x(7;0{z~E! zqSZWze=eqASLdpGfSfYl*)gDr(@N(LV{+phEKE!jr&Wi5?Y z+GPOyo(>^_#-g`hP{D0c6jBmo?!yx_J~po5=T|@-Jsg}cudc)CGvCPRaj}O(tziG< zrb}IiIkH)(%-T;(mpUpmwJ$7f=w)MakR`2N8NBdobLiLS!?b+oYmr! z+@@aOHRt_OUZ^MQnXhwz-w0M8`sQ_xO2v!Ue{GM~V2MV*YrqI$5H&Ipw4pKaK=KGH zx8FBL{+?_j^U22TF}TuIcc{aSg`vC>w$@6wjQh=+n&?CB+yXg)Cw3`U9$T_DR}vuf z_|?$z!Vk)swTDE}{F*bp^!22J-(9%y&_#cxscLJpuX1h3dMXnIMNcuW2-$JEw&lQX zqI;!bk<;7P*NlXOJi`h6AY*rTgd?!Av9V#YGXDswojxiXD(iY%H%Y!%kYS?f#RXJb z0sa5=eAB1xC41H2;l51hqOZNr!5ZVC__i3fjvDk5F)$He9>*ml^t_lJrJ$e~X||sK zF6iNmtmo=@w|xqaCL!geGCC;i9TAC}mqw6X;bl`y_q%m(c6h|@ye%uNCzC0N*`}b? z_L>_0SJ7JiDI1(&F$t3WO`w#gfR}Z+ka)_;Zd2W()BbS(nSqPRHKm@9?#R?qIf_#I z4f;?zI}4knCW_n#O$e9Sw@CK5(ekOo!^M&Z)zSd>JbR=jI<$dvdyN_i3m8bu=mdVu9X>z%T~ui2_J>b# z|KXM-*`Xb_a@Lsb{=Sd8RlD}%cHvpWdSbw7S(94MNcLts4E%I(YoN~o19+huMq>V4tYTr-lm9DuEI%CrhI6vs3J;Uco??a;k?$+N6qOxs)60I zmW#VnS#fG(xipU%-+W)kn_t;}dV+Qph1pN3ZoE&l?(3iVm*CL7PmO0)&tc$9O(Q|l zT5)M9PP(7+MDbaRndeQUa-bAPdC|$y9ri%Bub)z=$hK(W>-ci9Z?O)oN4-fdrt-4; z5oga;@QxoWDtRK1ck4 zxA(*X#^&2MAjq;~jHOH~DDq=j%NnF|Xu?`AbTVR77#}yK@#>sD z{^9ntw!p`!uF~!%8k6-{Cep7<(!kaH;yFY9+zXnjK9e?~4#^{kK>viw4e7kdwcB>q zeU-b}(qw?Jk6&gog4*4Fl_~S5(<(x|TaXrNxZzRuOLh`w!L84L#f6}s(in*-47(AV zq_it`bXZeG+i_y^kpJv*!+}iUV1N6djozZbL7F%n{gX?4o2Y2~SIE+OlCEeUp@~!c zGQdqnTERhlBT~dMm~f#tmA}ix@sLuY3Mk;@jC=oNp$i>-ePy8kOq?194i#$wpWS)y z41beszKuL<){u3eO9c)uF@@J+fdXL}lGUgy~*8zN-AC{0B_IN00&-VrSt%>NtiV(j zXf{bNw|V}S$R0U3QuKzMopF`qbv{Z&q(scHx<|f|?fFA>19#s+x`maJtmsVJ?!$$o zu_scay7virXv^uL4`-hGVzPhr$qHe*LK(Lt{$%r`?^c#?FfVZK>LM^(DGdDqAAUW1z0BZPfC{ z0QWd^FZ0m{?3J2H-KNthpUyE51u0ik!{%wnr)#>(dbmpwsXLKB9A)kdXIR(^FG4eAIM2 z8dG2B*BU%=lf*`$9qMbuv8@UUI|&|xqLA9(O*l4)9=RczNDg)JNeCX-bI|Y&bV9nG zd+Q+qf6Q#g+h6pU8m_{~DSnnr^nG;9T{M-OKYF){Wy_#)0nOFSlQbWTpks;ads54K zQ#t;7-*+;Z>R0Bgq8b#oAe9RP()h`n}6 z<29V4*mtkbx;5F?*@WGzg&q}+R$f>568pyH23@RDbH%eI${ujVbAMPNa@&|wC$2vk zu5#~lgkfslowh1!5hpq8X{vMzJSyj3GSzCG{(a00 zA#{|X|Tx4T5TFRie7GURL`I~y-+;_w@aZ!~YgQ}lJg67RoDy+;)cAN8S+mHI z{Hwa1Z0e+i-m>z{LXQ=+=;6BADs=+LnXj|^Fxb$5e1-SB> z_EVx~^bY3yT1zs#_sK^P56~bQ&CdnbCz@`0(}i?*M(Yl5B2te&U5wkWVS+@u09e=) zMy!m%2-BZ%{cY@~L!qIOLoX8ucdghN4Eiu?SE!)K2w8t0!m%9&Hi)^ zfkEhJ*+U_(jt=P9xp?)b`E%|Cn$0k2=_#Y6W{(Tf&v=5)zc1<4>Qk}oQ})Dy2wy$V z8M*ocMIR_MP~o}kd|@;W;uK9v#)nc_jR0RKb96j@Qg-Cfcgoxg>#(^)5!C3}aQh}i z=0Hy+)+$^Ea@D8z{mt&1FLVGviJ>oUe>djvmin^)H{mf*A2RTXQD0wkQjE|e3`yot15}XO z&}UnIa_}ayZb_lqv?zX~*6S@^Hr7gZJ*iqBe>7HL@(%d6Tj9DwmOaBl%MbPZnlYcF zmvau?+;4R4Q?f!Et0Q8r?XNDnvHKlsV`{X6R*riPBR*^R8p!8g$kjwF zG4V4`I{$i}NB1YrUCrN4A#eHBK>7MV5loe@nrTParPJH}K(C$JOC|2WQCU>?E%CoL zjBf;~rqnL8uTSTX_M0-y$av=tmSYEChOcq34|(UZR}@4=U-a*HEZq4kXSlRTbP+zB0A4k}W7>r%5Tk z%b{KZwjvV5;0e52BL$s{^p|)cX+_fvZlZ6!fJF8c>Cpj)G7)=7Wx>B`K86VU)L$lD zo>qA$+wYFNciPL50_+zyuwFibp~0CP^~d&lz;FT2zKM-gey@?;m1MO5^;P%<+PZLsAqZ@ zg*sB_7NXTn2-;q+(?6IQL1*KEUszQ8=pWIXUh=`MZ&Krg`)r_(DmE>34+)e|ke4QH zu?6#X`j{Ck8&p#c6|FtWW75pro z|AX=1(}Ao8HhxCSjNB9>$<7zk2j5F=sSZWn%gQ@>BWpg};I#cf;DXyP`Cd>x7~?{Q zP@22e#Ka8`u1c(%Y^Lnz&nZixJgP8%!nIcB7T242+Pb;Q5A%B6gsI$C8GKgX2N2yg z{c^JPZEgx2VyrFiS5ku4yx-^q1CY`l#0@JcVh|Gxng1;$;4Zx!KUJ~4XK%`T)1{we z5~%JxvqRlfWXQr;!`%-pv|(u94Od*ml(Kf+7Dz)v4-M^}YfcNWY<>|EPH3-UZYQIW z?EY-+4FYoX*pGs!?cR2bMIH|3m8_Z=Cg1(mhT?h~ajZsAOz=3~Rc?jJ-dFv-rQ?Qo z`kg5`m0@x8Cs2=MwtQnEi=w$ukLZ1HVXK-K^?p8gvqA zA3q##CIE97!mq#3j`fLdv;5+gcRB;l;BAW+Ncp5Rks;j~4h`jHu5J(CM$85+9JEdJ zeh@&7P8*A~$o`qkU3FhAfAM&6f|=V9EKAe9TG=XQKAp~V<8Nv;KjYK(tU(c%p05Q5ljy$!Kx%_&0|{kckD+UDi6{sWEag*1(Lu z(~t4miXJeg=4L+JB=LcOVIXbs1S1d9;L&uqlECb8zIsyST|mbdoVi78KjD-Iy{>$Y zw%jEZ1p)-=o+emoJZ@`W-Lf7R9R?2uqm!(gY*-5sFu6g-x zDl^S}{!$NkVLb1p6O2$oeA9wV`N7a7E{7fkjR(9Cg`#Q6XUj8toZfe1CF;EwoVrsj z5)C7!ss;~wlMf6QtRD#*%A^*4+k=(iLnNql!OOM?7nE?m!CJw*SSKb#rB*%KxYDr; zZ)Td1WY{82uA6LsuyUNwFF-R%&_D6|f`FvlIavAt3;}X#wT4G4@eUR1Non4Zo^lLu ziMKC!gP~9v9fif~k%oo3PmRm7ET|acNUmtD^R~VA zxjv0~Q&I8{Ysc3rahFm&TIbh3m`Mz-S5|gEmE<%phy@-9dBYMiAzKYhh)f}u+p{3} zLFwR4SLcLoOy=n*Y^_K9TA;mmaGA3DB9KH6)QE6>t7)U#TPP=Isu6Z)^0^NIy=kB} za>Ey5W0@lvPI8%G>M#-Cn4Raayl4&?`(Ntziw)#z*J^eU1SRk8cNNfO$ z30)xNbzcO7fKc@m!LV@aOXMR^HdiT09zs`|{|?bOb2wl6zmGH4C!1ZuC?$T~w04cV zhRWcY#ld7_^W2FNdD^(}L`2PnMdQ<#ox9yq>;MPYOTwDJSwHq;?P2-|TmByOk1^k!4EjgnTlAHFOI`^{MiHM!ogVW@fNGq6nof`JB=-0H^@3C}ib9Zpv*QBD{xtbrg zh-#ic|IMSoH^`WsJKg=I25ILFXfTYSZ~i$=XN_`V=?9v~FKi4vJS@E6%!xdzZbF@J z|IIBm;xKvFf>T@6EcEq%Nai3SpnR_6Ks=!p`bUfn=BF(lb8Bmm_5Pe(B*!EGhUCAG z<8jp1WJqlL+6F?w-?c#hqxA*`9&qF@(%ywZ5lnhCqYd^hoe1bNM01$OyZ)K$%hnwO@+U+kB=`D? zc8e#r369w@xYUl&bi^s%Xx0NXj~zYm!sGv3d&m>bMFVFpW#mNWu1?%AE z!cEnH>m;vRUcORd9>?RW(e>$2AeB1VR_xZjtbFv3ClKN5N6~!x1AvG%DU+ zmlv(2_nIj}d!-DmYrDhrZwLqz+vn@isy;B6xZ^P_fV$sMz(igDd4JgEV1a2)Bm_Zt zQ^&sID1czt=asPD&7Q8Er&}uyO>I|qH=S5EhR6Kk0*yfZ>bX>@N}%1eifDEWtLF)O zU8dgwz~*>v`X)6JAh=a7xb7T=G~r`=K)B~(u=tMq;p+S`-F>39 zwpd+g`)d0{wr%|&kuY+fmRmTLbz9U?V-S^IufgJRNAZu~?ZfcuZG>b`AbRH9O&7bp zv@tnAo!pPU-EtS}G2fChd2TIBO@P!ViYNhw;4R~X_~iJc%-K?<*tl3^q>~X${U+^U z*$c;bU6Q#!e*nn(6fmLqRa`9a4T1{L&wlv$QA0Qk;4aUxwU8(;8m3-mzSXS;Qjk9386r6tic#C;ZPcUhKvs2h7x)Hj@ zu_>DOapJ>fssCP^`bc-k`Z^%}2Ra^L;O=%aA3xq;ZSHv+wz~$kYhO49YD2}U$qe98 zT{kJ64DfEzVCSbW1o`5L{Jlbx8l(3NzOz+yRNR!QiIeI{BO*iX z67URr3rk`Isi|}Ck~8BzBd9V*rNQFdwy?e~7m(&I*Ox`#@9`ze=q)XDc3FC_QTscY z$3%iqNJ!B}Gf0f69p3a?io$L}U;x(sNbX2rQdL`GCfBl~Ne-E@wu-j@xdh2wsC+2u zuDyr#b>mB~a@hVIf}tDF5W;8tUF+J~-iY;gk@h^b>{LVYgdE#d@OeolHUvVq7i4BS zL0@5F;1}H8yvwG}49w<_KUry($_Yjrl9FqeFS%1LiS*!RdO42(-|bX2Ft*A*;o(jM zPa@ZNAVdhuEv%@h!e@~|s}B#4O&!2`CTJ(GrK{&;E-vR;(gi84KN`X`Vx=9X{2O^J zfUFXSpEMzXo6LK?ft-KW&J`B;D}S*?sOfW0_VuCV{N-q+D)UcjvQD)B*>NCjk z9W`|tn-)F;Yu=$#74gIu%XM%*CkH2_@$6g8Y!aUwDpB$aZ^#DF~H*z1{f5FdY)|njdss~^65(;@9W(Z~=TR!b* z0948{+MKb8e?#~mu*bKW&k>h!iir>Y_F#6-@-1ve9P@B(d=hE5sD6z4=o?j6q0b{e zx673y6^M8($P>5Qop$%uoz8ofGRTy(t`Xic-rQ>AoM`G^yj{Q|F_ zOU(pVeUYh*Pzq6^^{Z^TLtluHKFCLpkQ+>+gFyp1Gojn;Lj>&3#j$n*k9VF^m-!NbSoFww|zTv37eKO3{m1IU+vCSJA2=^q1UIg7zYXf!Y9BY#4E z%&<|iWAWZ9W|z`=I2ypE=s04*`x_+Gm$K9T=Nk`n83+4(EZUK@+;uaxM-(+?_TpY! zE9pB{>hbta68z5@y5G!@qs5|1p@fF+L*{EmO%rdW>*pwL<)pheJ%RdsoAQu{$znw+ zlcAE5B8}=bfe~*S2<4@W?!&rz2D}(1F0&I1A&jIvufu|sUdzqYui-~}8zs#2+S;E- ziDVRWI(3(DXoy&`cF%IE8E$z9tA}iP$d-6o6@WCnd+lDD zPJSGKqQptOjlnb2P|;p%F#U6=fPdcpptGasf7%0oXxJYnDZfWVe89_etSr;I%og$e zvd4!aq9Y^rR%yy*F`!Pc!R1tOi_2fK`1WRhM1}d*BIRKWr(!{g zYm9%Tnbw5s2LB>b_ns~1_21Y{v;-%?Vw|ea=<7__#g+CxNaO@R2{Z~TZ{Tv3!=V?B znge;IeeQ!U1K{NF`rB7WrY;0IuVSp@iKgyWeQ*?7FXs!^9$FcFFz?~h>?BV9j7EEf zr@LgjU&Y26#uZK&kOK%10D=8wPooC&lhcYC3rKT_b0Lu8tSmAPj*pI!kXEsYzv=*k zse3f0Swn;o8|Z7tEzwdqn=pB8Y!l!%l&7+=m}=S!;nw0zv4yY;!eav;`zkSdK;0SV6QD7+OtElX^Y^5<69L$FeZ zX|Y{y}hPp%D+#2R0!pclA$3;y^~i`%Gx4K!JOkZ^&Oaf zsXN_(EsTpod|(fbC+SMq9OF)0a_Y`M45r|QTtx%Tz|6MHDzebW56=1;t)uDCfVHWX zD>v{EqjHMV37Y(lQK_cqs!aOJ&cvp=%~bR|3QaLlh2QMX^RBq0%rS%3K4PX3iT5ja zw4K1ijp`NxcQ;a*l}2j|X)CG2mFAvepPT`r8e z*^{ZxCs0`p1-Q%dW@pOjx#Xm5Y%6n7DQHlG(PFUaOGzx7Lc|s%eA^H-1Lra(J?nn| z7^l-?-q{cNNUmlhBD(B$lhOKetZDXos+4hHd`nccWAzWwo75TOQsK1LqP;d#NVGMe zAPHjTn7Ma7Os=ZOK8AH^D=Qc4eg$XUb@=8)^)v#awP><*eboq@0;9n26#a;33`4l} z`Sa(ijnp!}M+EG8z;!PQdPElQl?YI&iJFTG@rouYjzu77U*0Fx-`w29$ZnxIjifvM zKt-E=_Un|Pv%<=jM!h$oOC@7>dYOv{Fx1aAyJ040Ga7$!ur(S&`2m0J+Cf|8La42y zWd`6K^z>W~+E1Q5x0A&avp6l9w>O!kp4aQQ&NLC>rWgG3f}Ad=|AV%-0IITW|3y&| zR7y$dmu`@5knZl5lJ0I5>27JHyE{d?rMtU37O-I7yzlq@WA8nCpE+mFnqg)+AfwOo zto!=abzNR}`(m4c_TL^|2b>a>%x2N2?yp3W>&7_1fi-#cDKN2$r!5{RbNA0G_2p^%P!y}FVEz#fz}-}?bjK}4*;{_86T2{o7d zdajIQddk8=x2S{r@zP$cIJn6>90>oB{`KkywP;0w zjW?zI>y3^ht{m1Q4v$b2Y3{p&Hhu^xq0HPfe7@R>SqkZ-i)wX?S)P$E$bGNdJz6 zn3D~BrW}2}Co7++3rv<=+|{@Td%91LVJ!vOX-<|PyO1m z=-`p9)CUtJ!0Qav0;Fv#-~zxG&^Z2n{eK%sH+3oY_1{{+-@opE8BQ04VAvh51OB1|r-EX@XytFK#AI;HhmVAAFFzIr1R=g>-LyGAY=kD-z~bx8 zFhqFS+n%N1eos$!gZgrOxBbiQeePW`ZT!{WT7fLfBXnoz2PeXE;tf?e)@IWYEd2|> zBxrC1gn7HZJbTd-mRxQ!QVJ$wz4`w=v2xVy^uy2HY_j9iDJU75C!3aGs^hwQ=3-t z!6)W^Tx-e;5N^i-{M&r!iF%ZWIHxPAi`D~>2c%{9a-@;&6o4MUp>S;Nw(|3ZFWnH| z7X=_EbQ}=O-V~+0%;lt{*5u@f)98KSA?5ZO(^bYUisy6Yx62!hD(5;^05sR>2G{iR zWLwS?j;kz+@WS)IMlqtHqQq@epuKlCI=A0OMUX zNEy_o++5^jCEM8}c!F)eH*;(*BzxbxpWZOX`ij**s@j>&4xp&SZy8FQI81IoV)TUE zqEXzrLPnK*uH7F5;{#ZbrR5P_sjZSl)F0{^5|R(`^L)e`v!mw{WF4*`pNuxA2risZmkaK*SS;kA#P^#ygD?b zul0&j#lXMc3ks3J5ZM94?GgyxZ{B(C@}Bi}*nb%G0(z}F2yq#BhJpTWuD+)P0};s4 z2O#t26c;PsyplCH$+_lTA9pcIl%E-~a8V)XcC%8p{UGaSM@}c_6X#&@ayU;R)5FbV zs(NCHgQ6QiKZu3pvR@KPII z;r-<_FrFt3+3`i0Fu58Y^+)8JOG#q)?Zf}>`)pHA<40#{fkkEau8@47qVqE@xaRZd z1=f(M`vdD~@yZEmG+0s+@wXfFMW&XW`X_ns*2@!4qa}jvl|QY$r)BK?a%A^ffc4_7cXdetCu@a4e%AZg&K*@ zxdTWf2}*y2(|X7ORY3*w@au0j-QOc_4VX)aTcDt@D}3Q6p;Cc*5w``-B~wyGTHuYC zcD!KV|Jm=tV9yTH*&SGwJU9dYs0?FD-UO4l{fj+4o9rc02$~v(W2Nv0 zNPdi)!JA*ZtsGA9gcWb`Rr3W<`=F*0K(I7$014w=@5}fH3DUu!7s_{riJ?CtAW7r!PMvc7A?Y$mwg`n;SnqKr z@}iT7eZ&igU#^d%q_*^V)mwZfT4o0=)%b1wjh7Aqa2!uz7LZo49aYC16wX_HbJ9Bl zn?Od-(DyCz_OIB6`Te77HHp;MVqN!N^U$Xf-|U$ized7>EH72PF#d#x>vibF61!@L zZVaReKA>0KUTIVj;xQKt8=R(yg@((#n%uL#v1=IXfdu|W|F9{NMSg{h(ze^f)*o*r z2-f@=L)jnCwa1_NBH?jghF}pYs|kIq1G)XZ0)3Z}yY)62sq@k0w>T9?`*mV+EgRE0 zWk|_9FZ`}{r|IWv_oOaA-PIOP>|Xen=kt&3k)dGRJGRyctA4cQh$kOu(BDXO&~san zL_BVQVjb(d7*ZH42bKQpM0!P4&bpDrWtqPu)Sbq8e2qL`#bT2_@H+Pbm)->yt^=<9 zBGpD=7Y6(Euk5$7dcC!QC%pnki31T433^+Gq7m&QAVul=!&}&%zo?gesJaI|YOtD?to$<9cI=3QP_%v$RC# z`-Wy5OP6|w5*#|*IN|IZu9#w`|htxM$hq{QtN+!+~ZFtvTS9^GetpUenuRwGWP|Jh@yb4z^uq{QVnP;yPsf2GgMt%IVi0?*js#b@59-8Ql$1BEy2+=JvuD zdQs^l^EfBXu2{y1os4Bi>t}(2&u@OmIxH`@HMNK(Re6)hGAHA*dES+7x4)%fNyIf- zzK}Q4WkQGYx~+?jJ*$alApUCU8Z@?SD%^ zmr|S8^ksd;ric-dDYucn$Z74wZ=rM~qoXHJM{i3v$#rNg@?-|(nAhnFde|BuK4W8V zR?ORc8DcWQi-7RPz|e5gOHwjeCRfubT?=c87%&UcUr!TA$jHf86(=VOOsKrT9BHsx z!_DLjdDA^ZXjZzm{S?$=5G|pV_0x%8u#H3E?8P-1ifzk8+&ynn2KjS0EGa*l_%qm+ zyN~gwYkAkji{91FEQ%=G?H^!t*8_&#@255cib5hx23H+81OW;~pPZaxW390e-Zp1t z68Okt_qZcLY3)X7tbZ(be?zBlV^yK&N-Em!XPV>wvX_dcgt{M-cSGw3Q?SFCLCtno zhdVFVgX737Uas#5LM~M}iN^X02syhMn6);m2|5b;7D#&e29-}gyj^_Vs(z)S79Jso zs`CjT_S+ODg{i=(y2QXE$*IL(*R|)@1g!)Vq@?Z;vV)V;(|ehDU6q%2p^SYpTelz% zY8Wbsh#Y3U4GYWkF7$E|EnJ3#jEo{7F0SAXr0Pv;8dDaufrdnZ%|{;Jdwe)sbyrfS zn@|R_=&Lo3yC$i{LqyEq?z*LI-MDCIzBe^}2rTlfH&4CoMr|IxnNZ~wSUOn~0?DJ} zjJ~2%0U=cLS2%<5w}ak!Ke>7Bddt1@uwwCTIZ1D?C5DB)zor;mWK?a|LvlQF!%k}j zkc{vm+PpEieuq_L@`B6@r}E^LsEP)W_Z6WVoVRS7bJWsK^8PAEFk1q~byy%O-?xEF z&KebV6ell2%wXrAnmy)X;>3|+y+WHw$MM+Jnwyc`YXEY8plPvzKg!amzM=?qy^Pv+ zcP(p?yN{DRzw#3!3+23H3U~l9J-;Fy{~u2-!bX##@WQA`NWKeu|HE2a|#ihocV840(-^284dl{w)-WaD6K>Npo}88tHd)!oB{lFZYw_`zwi zHuqynU7jcwUcwlP1sBk5ct=E#skq(*u(TGbZEV*|r@Y(f+CzGE#v|9c+0%2!;Na#E z+^o=*T6til;&lyGQXN?DlY??s-T0YxyVBFj?F>WMEPtU}}#nn=m&p3*SPcpCg z0TRe@eE4@eAYZrqL`LloD{c6FK<56;AAOUt0#!CEeW}s=;n&Z~;{4XlyT;=-<+|t< zTfHw;$kpwuf8P2sA=p{s;`NJo8=r1yt`M69%&)it!Q;_!bAVylr0Lpd$VRUhjw1z{ zblJBth>+F@?OE%XokzK+_VB)ej=ShxHsVeHlm1sr?oa7y0S-{yy!r=(OE3DRnR>JF zU8UR=(j_78tUb-^ey0Z@Z}V6k$+%iUca?-px!>IHnbfbDMnwdvEa|9eyFyn6i|vv=jZ;@pFtSA{dF3g~R zRE@y{A37NpT6%v$b~*9K-WxENaPwa&q)#5k$K8v;d)Qx_L(ni;|Weoa4sP z63<<308a$X0k;}*keUZBwo2>5#PuyFd+_)4o5;d8v&o2{u3sVAlOkhqaEdNYVEsC>fx!&fsuB_vo@xurx6G(%*-mFF)0g0U~{yNVeWbZh@6>bD&T; zfwTzd^}mec*+yOV@4sh^)wEBKxQ|`E$B-aXKPn6X&5Htg(wVnH(^0r?K&Ej&|7Zb^ z|Dau;QZR7*3rs3rg!J%xU$n#D??jc6l96w2)*Z9uKMnhTu4VL3ekA-4=#IwmoQhqN z2!D!kxTB}+JOWS%=*!5LtR}ZdUlgTrMLnO(nl$B3MYUJavF^l~9v|&ohF@Y8>(zzt ziYENV8h!+OZI&0EaWlU=^9I*2rz3cd64fc@;r`$rL!u43MR=$H{~xx2*y|6@R1CCghGTIFvqz?JY$WoRq;Wz%kFq|sr%YN* zFWC4Lg^l-IQI-d>^{d4LEJ)5C` zrxjcd!l%p*D}YgbzBjihYXa~6H~BX1FM`Dg?40} z&}~Eio_2T^+WGC2@>s`xx@u&>JN)E%a3I#w)ke?AViRafk~-ph1orLMv#b3G?QLt< z03H9-yNh@y!W3@!#j_u76W*{ORgjIB9^I6BcQorjPI0N2>n|h%bRl_VLWQ##QFu75 zBrlk(l*APOS>DQ1HBJO+2YKac`+J(I$n?}Fb7TdO%(L>)H&g3sgL8{(bOW;ybss`} zQn@aN^;$TDA9ro+JRv{&M2O4$ES^(la8_@9jHQ;se@UVDRm9b>ppN?U7pcgN4MHFXaFMZ!d zwY_w)KHYCJ)FCEE|D`++6-&py4}`i$C*+BSB}WghjnF~&NqhwcVt(yTTwBr7>+zdQuyc-sR+&Pi@t zF%gkZSgRRZn&1V;l00Rci2DJwk=!DM&q!FhxiVptaV0eYPg3=$_dtmJmAGi+U%gqG znHBHE=F&w&JHCETkXDR+fr8faDToNpF+xiGcaMN967=-E=RO5ANA=s0nS31?^)e*? zQ~@HhpHIJ!>%ETn1p``}K79cQ+e2Njcs-S*n|Lwu-OmmI8vb`bkUxKQ$-9*7pbokE z$cVu(ij-md0Gb_YK-1nFmr7Y2a^4E(yLC1$t6|Xt`H{)F%s=lRPN2ECd&oWl-bh7ZHWXVv(Qhb@z zhIVPo)g0&^0LcPW&cTB_{xYh*rN{jq(3?^z_uo2{U_qPUysmJ{*IvVu2}nBchZb57 zTv35XLcN=oavv??2i^Y+u=pbycjwAjeeMMPuukBNjY8nK?7Upft1ER$e4as38n{NC z-!y8+rDefbMnfg zx&o>mPp9sKlcE!2Y+7ym2{+W=D>~CAJ<5vqzcSXAK14}qmDi2qH~6J|37e{qi6)yE z77k)5ZN^2q@(kTdb&vT3Ae8jJLT%wo=Z}lbGs{#}Li0e++r#}L8RPyP(6L7A4Sh38 zkk}EBm9hdsB$&>WOZGtHaxR66HuR@Pvb~*dAz4@Yv-qj-UFy|tdy5+K`!&wq6HA~6 zfAa-q?51h^*XrE*S6zk)9eDwwf2j-f^v>Ln`ksDN@w-RQu&pU;w0AM)q-Ww*?*Hii z?c$jqJMDJxeM;B*i2BVrdx8<7;L<9@;p=}9nKJ&=e>$<1ZeX4lNb-3s^6i=bR@fii z{G=5HpY9mGis%j>$L)ws`_C{9qK0jTld+A@R`Nz`Eph(B`uoj(5eC%+tV>+)LXN8s zw(R2|ZkrEFPj51+f5Ude#*VAi=MX=KjqrGy*tL+MtC67f5&BNPHt4)RbL0kFt*zyT zyaC~ROLv&kW;-}#zVyAQH^oxE=li|y(#xdJNIX=`CGpvk=v8wt#UNMLzG2a)eC1$$Y$m}shO zu;F9zio?@EwS+ge{{F33a~AzgmGp4W5pv|p2AO37&ZDd|a0|qQ72${@ zCI$;cn!H6C_5bEf-3a)VpL;+@jC8u)62LKWp)Yp(Cd|e~BXDv&c@0{x7d(!`59e)k zT*0E{%=N!}uik>*E6}!0SO%IagJnA;ewM2Y^*TW4>63B-{MIiN9=JFQ)Q(sYPUo18 zHQjiT@~ZeTwlXg$4W0ecxi9#%du!kaY=>-w*cbvEAZ=e5ki7Tbd2q5m_e)gD_XTpo| zmez!GgnI<-g!U6Riafd*W+d{@*OYV<7jIz45H=p?y*}YNvr9dH=Dd2&R_5gFe2cjS z89wJ3-wUeqU=KIVx(+1T^@oLLYR%XYo@VP<*FxDHe{f;udrxF|;V4w;pVEvT;zs6p za$XAZ8V1 z68dzVa`vm!(?dF58}#9)zbi8{d8v|BSf!j5etMpC*VZ#;<=bjm$K%Y>@MyLoSK_HC z{o-iRt&Ukmxju?z7_P1_71`XpLa@RACe+c~9QM+FAEks=ApYL+j=r+J(&%tZoE&4R zeo_nNGLBt*iQKJf!j+_IOE-GQ7B#(sptFB$k;Mgq5{Wf|Zu@GO(Y3KjmexWs z7kdTY^INr#{PL5_8tb?hd*5CA{vsWYB$MJHieMU(oyY9U56{7mHzQ5k`QsDoT#6bT zs$g^drDCL4ye%V=_x19Ci;}ZgYjgX%Fr#zQOZnr`_~S>9?T#`H#~Q-`PyCGmGCjt1 z7s;37{M(F)c7v*6~7&T-?e+lxLbDn7neJN&g!gubDnmI4`E zBpBOEdEXcHn55)K3H;aq+JXT|9s&Xa?(Rv>uQw!XQj#?zY_QdBrWbQ9f=0;ir(l0& z1_h_2)fOy&l;zrNOymlwQHpQ+gocq^sOeV`Bx&ybki)LPX_MnkbYu+{KbKApzVju; zf7dQEA=QSb9TVFi2B)n1mq5qE1}v*+x*BT0A9uz=V*k?OW}~jD5mpBT^gh~ZDfvli zqj~%DF{TJItJ$i9Zt~oazO!n5^#L_<2BkQeY8pXF$)(n31KZ7+lW9shIf~}dH0PQ_ zEvU;%56U!N5Yk=~QLzf9N&tvwtn97ueHPn{E zW=+4nQK2Eqb+v4=qHx0lnE5*DQ^Xcb`&Z^L>*yJMnvRClmqh9W6FvwgUHrf&zk@v))Nqqkym5b_PrigSxednnav zt~OcIPt_q>!%~|`4bFZ%0*-}a{w`E^SCmslnZ^&@)d1T1Bjv59cqN;CRc=Qiy_FLax_hZhv`! zeKYv&#r{^#;cdaSkO^+p4Xod_kK=H+Tw1~^n=io_#qjVjH7#wqx}d1LyRB{cgEBEj zQW4BA4AEcDw3Wi~2k0pC{rVsGVwDY$L%zkB(?VUFWFzVhDJhECLR9R-WM$R)kNDMj zoynsAn8#gGD`Vwh8a;=E*zj(Yq0sSr zQ}0W58=|GA1k21uL#Ln-g|Gts;!0eOabpRo%CdZ)bXsqfnXeK44D!o= zHhZV8=SLE(S-I4a1MY1LsZ_kB>?BWRn_HzGL)UdR;bWiu2923l$=#cn==-{3nJRH! z7I+e|-K81TIb(8edV#d96Vm)bthtkpf@{eegGW^{l^V|ilc+^J5Kt%M@+WH85M!WsKiwT3Vcjho(iUP=~f3cF0=SG#4 zE$5ivQIojRmsSl)E*A26s;CWb;-qRThCjIG-e2C%Df0@jx)z9Bsr@YE%G;V2{9{N; z^-;skF8MPr%ejn}jrkNa?{)bQm9gh~AX_vT-tp(>CY||GbxNnV9jgV3y+Et3zyn|V z?bf6z2C#6Pj=Y#M7=CiqTF*wO#V_Srh0(~Q3=aJn#QMHz_p9E7*ULQbEhXVZx@R4TEeCJxHsfn7lbMbs^(RdA9ZDud|D!Bu39$B)=S#P2jkv> zb5#|I(A@8m+T4#+_2s5IuiscKc_|;QrmMi?W$HURy18jM zJIC7*wYRrp@9y4?OFardgE0@r!TVK{p_F$sqdso+N>Wm?_0fB_Kq;?U%6SAOq_y7o zM;ks#a0ttxL$*D>F5xzi`7ErR(Vau7B04_$};&>QX`^i z%bWGFP&(6#AtjF}Wm`p?&AW@iLFGao{_q* zIN^@LmXPbBQTUmKEvFzHY>Z1fLjT|zm|8gPZWFjR*=1H(_gim@;gIoO05acjyN{!@ z$+py?!WX&6R&iUDT*X9C|8uC+kWXbIT>m zP~$T8tTLp24)R7>B-h7sv43`}@Fw@0K@ESkV(Z>afs!vAQgu=!d%oGcbwo>(BKP!u z_E6sxgS%d3=xb&^8mhtNHYX9^oh>GN$bwo=+ew9aW@clivYV>Y4iec$#eSq+A%gV2 zigL_pTGm;Kn%dc=THWU7#mNcXNmPd{UqPzZxFG6AemSe!;!192{>g^uS zCGUaOs+L-)d0c$@Dw|*-XDjt?&6QKNn_V0gO+%soAw7VPL+8O3hp1cBy>}0GX!PmwiBR$!a2Xw7d9;?riA>4 zkyejI6#S}SA{{Q%Mx7p=Q-nI}{jUWU6}$Ccjc#=#>hy*aRtCl^f4coft!|gjBdn4j zY!!Q$)RN2IP|`zIZ&^|m#6mT>-{@YUx59qk{pTLrVPPhS6Cxw!k?N1!TwO7-uq$z>L%eprV~WSlZ*fVD>ret{ z*LM28OQ-Nem=(%U zCz{x^U{n=7AqP?vnKaVPkDOg~9C1A=6vtAI9Xkz#Lw41U9j?sEIx-fp+N!9CVfg&? zWSm`Y1DV}PO2OWG>W7VWj(uzXqoZKv$3ml(g-p@5dStQiSeQ@SdAJ=X8aYp-<3;`{ zg~B39ZF#x8{ab*TasXob@DmOm?1(80!okZInOMmeab$V}{tN??Lh$VA8!#}o?yz`& zzxlQM&i3y&FnMCXp8fsq|N290olXb!MzbKn_iRW)I+4j~p!V=geQ0+%l~d|r;$()3 zu%-D#yiUKZ?uTeM|GB=PX$PhXov?27>jOF8fuDtSgAJ;7iPA|dkbRL5dguVna<1Ds zmU<|Qw;c@37a=<^)_(HKep*0)30RPzIzUZBBl8GWS4fYDmyM=?0iXIXrJyocV5zfCsphA3}%UOMm-p>R(Ndm$@zG`SzE{Wlb7fm zFF$ScS4KL`Hh{-ue2TMghBpyV(zyz@@F%PN1}~M|?a>~;l))jE9q;BaxE(z#j!+bj zCNNxWP|I(R%sWj#R`6|ftM!hNgakgcB$l7bt$R}p_S#LO@Dj27c$S5uQCG>E*OerOcm<5Kq=(0+9EW)cf@va zmN+9y6j41@y>5*t(P~&%zq+6IuX$BmMjjcFkN3T2-g%;p=}aSTa`qlmxob;HwTZs| zO~_C@)GNnf#KY%a)wzGo6=xX%N;h8YZIXF^e{o#wskOZCHSb&08k19CbJU8~bD40# zP}x=11NKG`+?}VlrSR)LVj`wiQf7mGDBM;}*1HIE>2dlF59u2%9hZ@qM6vi5uFMnR zT)sp^OP!OsVVh-DrT&PI0ImqdQ0z9*HuPO!Gg!}+uXbUXn8K8*t?I89m{GANkrDF{ z^YY5TX=_WP;Mj)e<%vm16!_1r6h5={j<&wocNy?U+MnQ0sS%XK7cxk?xV?2yxg8ta zjPY{o=_yr5-B=|OL7Bdvy^Rd{+q&o#6j@A(&LNhKNZ|jgoOjoA3wU6m=o85ZhD>!*YPF}yk{Rh@#V`1PqDD^0eltE8|gmAI0(r(IHQQEE#LpqE;>fU~` z%x<209OZo3Ky_9an#gPt-bsdvzqd>anF8Bz*eu1Ll{JQTF&MZJ1UvlH35BfnuKRND)$~kXVv*P?lMqNn5b; z8zLeDUA>y-S@hCm-`(5VbE9Yr^iUPosaka#g=LNtVEvLIPXpmW^%JVRxO%<=u z&!v8&EQP6vv1&hR*~p70J6COnb#Gi1x6;}d$!o2qr0C@Rj}M>}zIdaFw9=yMJ1tLF+w-Vnh{(9uc5U=SAr0Iv48tl2q%5oHBUgy+@FOrzb%+G5#AZ5h3k}{sq$f<+MqV<#^tSYf?YMy`aJK-^rrO zGu)Jgo25C&{Xf10eokxs3XntLYtrBEnT*7fYpud?NtRPvp|^e4;-FwZ!{+v080(VC zpLz!KOGOw^L4gD{?*#x!X(YazGZXLn2fru%y)*Z@KGY0vbPEV!McIaDsgIExf^bIn zFBs|+Wt0mwy*>AdyyhOQyWvSLet~b$Vah0z;zg;vrzna_o~wo!Pt)Ixiw9l%HEBtn za(MrF@3pZgcTcn4o2Ew5Swv1fM@EyM&*4ff7hGHb!NN{Z_r$?yA^19^Q5o`PvxB*| zD-2u2Z&&0c^-B5q&$ywOUg;Lnb>qH~+T*d_gj zu-IQ^@$IajgaqmHNJg8(nM|EZcW}?|8&8j8+$DlXe?C&a=9ozTjGTAmb;UdR)89va z$G^*=5gEJAYV%&SWF1$SHKq*{|E~2?UaybUNY^c^NQp*FBid8E)g@ZB*Y4cTNv#dn zIXv$nUgeTI>oMDOOAmuJ1W#Hcso27{Be(mwm{DbPa8*ZN;43s3L*U)ec~y+^X83Qz z0x}2%kEicmqerSV|BUkv2|H5C52uypYhn`K7KiClJA7^&3!crbt^RBA7cem4-@m-D zbtfPoNK4Z_yPi}#-`u6ELktYFiu$2mQdFiA6*8$PUqP_URK8T&Bx8k1iuFf|7TkjD z=Fwd57Y*O(&HS`m*;M80oZHE%*;H!Y7@}cNeb949!>|ClQ5KUQ$!-(zw`BFuiG9c3 zqQa@}QeO*rXSWOm^`c(5iUBrn+xE>mvnfL#``<4O5hT<%P8kgOp{A!3IG3AtRHPFp zS4ir7+ZZLPUiB{9G^Z^O9=2twLft%4K4p4*cwDNCmQ7eHu$Nb- z80A|~Cs*OdL+AbRR+yz4@^riM`8Ze{y0a5$EP5L^@D)_NFS5rnSGAn#-EZ@AY0R3u z_n?1f3#BVsM8&F)Doz@_@x^#eQaC6m^6nRYj!W#l!^11)FZsOx0U%Nh07PZWz>fLs zYz|IN3Ahb2XXnpgq=K`V@*T26>iv1JZQ*O^`XN^V{cB6ilk60duJ=&M8gy2Rmbl;{ zm7TIeuJghbcL>X?(BZx!jbnov@v#^a6J*3Q1h=!+hV_8K`e;V6l9=nFjArR2`4WH2 zTtj#E%x+n1%hKurwRH0>0>UH+yy|68v`W4=JL$JkrDpt|%FU3!a$JV!XQKhkYeio^ z|JE`n-dI5jiF9^De1Cm#TD(z5*q}1GQqG)X{ws4bOJV1kwzi3( zZAOg6@EOOde=XZ~Tv3g^9rx{e;@R~6{z#1jlCF6aR3-n-3D)AqPcDPsnv>@dGfuW8 zLu%s=C_tJg+4VJ3S{F@-!y+77AOUpjGLn(xmXAP{UsPuIXb(fREr|B8c6j~54QMq= z-RcagWgjw?7{%Su zccqa=xMoH(emA`uCLwREwynLvzVqI0?cuzarx!dDfq}_a@Mv-+x(O2)*Q-39`t^(} zdh5h_+?YUO9EFG@KyjgJQr#P$A7uLG>&ram)5NQK*lG*|v$FQL9BsLj@~7>wAP+`Gjt-$hy?7Zx(5H`*Wo^8blHAjM`H00c zw~!kmW}_wiAR6X~M0#Wj zR^*u7V&3X^=*Yx)4Z?EKC{%-V+O^rL$BQDo=!%LhA}@^-$LHh0{qW9Qz<0CU?A-(C zxoS3^SFw(m&-F4Y<>Yx$V^jYaSx8S9F1u0h+ZJ48=vLX;45f8sqg(%1r*rFc{XGJa zMRHZR+CdMu6=np29~N(XYw2BOEJL7XAac76#fk|h@G?CkMPen5>NNCus1io48KdfM zh9KBGIE2}JcXwg4n)zhcfxb`mOuGXt)>9fcpHgHc<`G;x8Sd)3$auEx>h2yJ8*84A z#G>%*%YIbsQ1(5K{_ht!c%epe%qBzRi}j{b3AFK!hQBhtMhlxJh%ODi!C!!oaA#XXSuFGk+re8Ait#H%#EBlurDiHdyEbPtASSBUortqG^B>Rj9%J$@m5%4<(vg?m9_3wZ z@V!GKw3xO#2qrt*`xgV1`;14jb+ioi{GF7r<`Hf+su||Srawe+=Q4o$`MPyz;IdAS zh;_+bD)gLyhN{&8^4oeU697_HO54QFVw)DqU3SZSmtD6ZVoQc0sVd z&$a(q0(3HBuUY8MczLq(jE`P|FZ;M&nx}4grOw$>;k>^hPAr67yd?rqql>6642(Um zGV`jOj0YbS{${fd{~RgIBE}Yqha$6S?kW`PyQ?mJ^H4eYnO`QDu-{qvbW|&^Iw+8> zv?)pEk-bQ*JI9$mrP%MpiVzKP;mw^)7S8%inD1n6BZW7Z{TkP+Z*<$6&$THBJsf}2 z<0*>slh-UqeyMbf!}HYxCj@8@s?&?-Mq5$FW#N=OQ4LN5@taZ!i>&rW_L9NgJK*Nq z+JOfnPfb&^(e;$wT>W=ApVuu0I=X4XK^h^Z26{HDL+c-g#;A%6?yBvQThou=wQ9Z_HJHc4)EbJHN}A~!0=w$CSNRi6Ff34+${=dCGmwg4nCP&tdL-b-r* z#~a&VleK|9g%Il%)q~P4D*4ygKZLfjt@2G=P;Zevi*g3D#nd31)qFTEd-&7mZ3T5y z_+@==XD3Txe!jSz+&F#2_u`As4_~7tO|hiY9CZl>;>ARbHyxOj(3478Op={sy*z+H$0&i-pR*80Ao zvqIQ6g{?v|5`Sz*&n0(Gx(xAUjq#YmV?_#DB2BYMAHO5ILfGZyHWf0F+z>5hyWGtx zxdjyHuJ3Q65TydwcX25_sPD8~d1NMUA{QwBYA(P-V}-7Dg@D2yR^kDUm1agF{r=bj zfRxkkZ&dw+zG%85yja;FdmgB+Ql#rKkb~7nj zzHvV)pN~~^C@nPyw#xwTnKJp^Rf`$ZR>NwTg|d&ZJu#u0iv%O-L}WI&{6ly<=&=dV zl;oCub=j~?JY&m{sXe+oyBSK2gSD(&BJO9_z*0$zc}7VSXJ|%fe@j zr+Pz85nO4_V$2EWa@mBD_75isY8yEe{jf28j7`VdOw87;XPQnHhF-ek6m zriuQ)*j};)@;LEmUFO=YY)`T~;iA9Aqwmn5f>%amyzV+pYFI|HS^l!=pbJi|Vyn8y z{LfGB39k&lC!2k=v@qStp_sLbA$7mxlZP=?1I}$tnVk~l=r__)!ApE(RrTU<{{V=d zq*}!a(@f%9a7bxF#lIN0p@f_7*+0_gKC}b%fzPp@n6;aNviUK~fzA7@8Livv~IH_&TD+S+w+@YOA`CdWZh#4WXg?7fpU*o0tjtS5!dORi+D#xI>9& z&sWtf=oN_nVF)NBnpWL7eS6=9FW)5z>EaD2I)wtkp@So`!H10I;QRvxX9pKgXL?b} z;X|R;AHDeDF>bU)$l*L;Xjp7p&GDm#%6NI2)Z``jz+aLUauIVzdHXnvab-GD5#*Y9`5t$3X%h; z4%Ieq&D)Mc_wH{rw4>i?{=_|VdlK?k#vXFv-VyI0waL-tXRfID!S)Vr% zXZHTHk`eQ#g{nf7a1e6M!g%_S}UX5-k(r8m^Q zbsOcky4oMzd`K|%HEt_bBl6I9?`!5pjS^2G0_U3t(|O=tTh>3!p?I>w8!fAV>o- z3a{*nRbS~30Hud$Rm|iq7hlBPq=EQ@>-O2Q^`P5LY{6GimG)rtExn~iGvJb}Uu=^9 zTMIDiMp)XJ`2C+?-KakM!{hlhxiQ&%{dsBVy)kr*po1{BEw!laip?d>JVmWo=O%3k zlQR0tli!#Zk>2{IgxqM^Aw)_OZgPA+?>#qO)PzuYRbz7K!2`{fH_OD`jpgq>;I^m* zC@Nm`)7q~4^XC52pcHW!F5O`5yt}>LIoQ%6D{}57Y zE(*v(Zdm%o@Q@2n>%rtZRQ=xfv!9$uw4C-eyrvJ9gH#uhMXz+2ftzjB{WqJa(1rt! zSOEBE9iu-MZ4cUHUvrzao>>{c@w%T%>fGQbl{8_jCFxjzrtNihJ0 z3~Jr5c{#1?@Jp+r-y0yZ4K1I?rmotdx(v{%nzw6Xt-r6IVu{a^Wl_7dCH zG)huF3=I9`6rI)sbeKD}$+^UgInq3O>|y3~ogTz~H;nr#H<6RAd$*9@vz!3?Gi*M0 zF0U767Y_WN!v1%L;=~Gg2*K`V1%y)<#RDOEx((=adJa5av-uaK9jsySrug{f}~Ta@fOzgEyx= z$2D^&ik>4CbeaPn?L@jdRhIjH9W2$kH6(enPnl#do_7#qzaP)Mq&elCyy%e(KGtqM zIVp%SUs3?+DsBE83cw0(%zvHSrs>{BZ~x6JaJ(P}K1&r*%XC~|V^swb_;j7y;7);q zw-vkcqt`jGy0CZ9M&;Q&z){+rXU-5xqaroqvQ|IG5TfJp4;N9Zslr^-Lc!)Y@=q?x zbHAM|^r6?__pq%Ca=Chl!BJATKN}h$5bs|wbTBdgXf-Ld<<$2X_gdDf533GwACsV9 zL_IYtFT5|n!=*oSX`w*`GgEhnjy_6sZ=bn4-eeLV|#kKdbxO0)Qs)|aTApx_d`28Qo_Q1;B_i_-rCb#nPI>Wki zy$aVbV=KB9AL=7n?3{KWtkV?_^YgpSm0J+ouF~k&4L(~=TR;IL*7cC7Z7z7uF4I7sEg^ z8B_5a#p%(Vs+2P9Q>jTe^5~kZoo&R! zdTS@i-Lx@f8=j$7;n&!-IV>Sno^^S)7WKHXrMPbi5D+xo;LoomSCLv+=m*7Ij*h@& zZ*SiB7dmxp3OO-93ZA8y$EX{u!ud~>_VEmNZ8_~qZaQH`_U)1%nUT5)`6`t7FioEx zLG3G-$W`2qu{Tu$``_?4u!(QLuIXPe(;Wq)$$9Hl(>gKrb31E_4sBPhyP)b(DE1gO~m~ahP`0yfh1Fi-I@LSloYOB>Q zx9O@-javJI-wGtG)uq%pQ@V_4cSzw<=lMm^J8o#QBTA@LjaTXQ?sIk-?UBA{Dv;0b zfM!l{y+0k5*(ycM*!M$QMa7?|YIU_Jx?rj*d12EcUvP7}O_UJEi3FSf)|RdqWX9K& z7oBzik#G#WDtdOyZWk36kHPd1;%c{Mzw)2BUt%@SX@861|rXrirh(V4fI zdhW3V@OqFP#!rL zsmM^m73!V!R>L5wzY?XX4Opp{1~&?L;~Z?s ze&0tuo{xd%njxf~cK-nw973=s6oOuI4AbQ%RmQ_VVi>HR^BjllH|aR~`$wTX=nI5xxao`u#4at9>{Y)!~igp~@^w@<4o~rBXLMDWHoBRWw z-8Vq2^+_n)>v`U7Phlrtpfo1a&8DC{Ru_{agB1-`%JvW7f~eDS_kJOmHmzteOnBhp z)u1)EGx$<0{VvS~3X@&l5P0q;Q1bo=#K&iXil=wxJBVbUEUt+sVXm)$N>~FvBv{~Z zyQ4m_{9m$F9l5W0b)79q+w68FYL8oiBpRv?Je8rwwv~Cf4I7LoO52bV7X5}lN?%>( zBB?UZ;VXsrF{MtBUV&;oi|g;q{nIC5A853w>2ETi4aFv#5$%WBuvzN$ELA=A@)&#Z zJ5_+I2RxWZ*~Ns<@WmH!nC0iv(o=#N+lfLVOj9t~7xzhCF#Dkz$G+&+{1T>HETV^o zjm8H6u@wtm37q$3G-7p^q!Hd-2Kp!VV1rUO&m8F!__df@Z(1nCUJh5A?$eB>75ZuG z2opnKsOqNsrfTg z+|M$fB;P4R0UO)y9V%Oi1MgM4;mW7ls45M{u5AYNXEXqYHv@8&40pQNJ%dls^d5EU z%*z`MWoR({z+j|M^)qO}*)mIbmF#N<5KgD5(^8>BN`cNyKi>B0SVB?~c#jbg zrTcLxc77cn_w?3f+%GoVGav`}&NFWd4uT7i`n%*q0|c8kM32ySL;q+>FYR_Uy<;V* z*M7zbp6Ks_=(yF82I?dQMa#kNfWsqJnHQv=zdVq>M*Q5sXTWV*T65*3Vb7$ST@~K@ zHso%wMos$uXMI(Pg84!Rh~IaGuSA%mZ>+2mxfzY8)MmWKgBOrJ4 zQ;)O&K9GTGM(%U$oNdXZC_IkdKGH%8tq{<=_1_67Re*#<;}I-Oir_$CZ3>P2aS5qZ zd8YVrZ-|+y=b?n>E)H+Jy9k!8#OJHD@=mp1dLv<|RT%C940uP1{Au!Ahppb1;-f%d z*zr*O^ShM-3r6&PALWL#`v81p0f_Cy=l%rFIoIuGAiqo^!o)hGq}rQcjH`9XF%3&w zpi~N9uByfIqqW&|API?n778?%61sMSkjG&(ApPF4pWz;N@7Kw@6wRKlv3yW&=VZt) zuddz?d55mM(;x(!_}1X&H$P+u1X4$j%sRetzQM_(QVdqhcz)sTS7uObx6M#8Ikh!Q zb?W`|G-syGl)aprZsilfbWU16#nUpkg;NQ4*+7CdWk1hjHaqVZQ@sA~h&8GdaPn#g z;Q*`cs?ljZ1mN*h%KJX6FK{>yDr(%fHGV2LU3QFbnp^!igPaiN7Nvo0fpK321g#O3eLf4#_Yi)Atzi1!(nv`G zSC^Z#v&?7wp!$>VpDw(xHH5gy!=}s1${wSj2nz{k+G|0s9>SRNFNb>Em|gk}1Fy*P zsPqm!%AM=-7H)et=TXGP_3>p%6!p13bQoOsRrwvGOSVe$1!D z;mMYdHMIVt^ym$M;hQU(CqHHC)_=;;Q#hk!pr=pda0qZLcr{)yw0Sn=pgOS%(%$A1 zUwp!kj{uU7fFLJ5w)lo24M~h4Em9tyT>t0n8vdvMMV?+vTBz3vhwW2Pja6pqSdA>C z-T_X|_9Pp4F&F2`YDt;!+=VdWfv>|Ngou3dqr?QlJsFP-FkY%DJECRixbuyrmC z1;s;y3)kT^y3;ixHs`O`%3bL;t5GzHpf>(~58)$S7bOLS5@MknAn4oM+tnHJ^7Gkl zn8?Uj_{keY?Lm4|u&6(eTm7W|*@7KF#aQGt z<(X|@PAsqL&MdSG3t5U^lkWnMy1N&OXP z23Qp=JN%>GH42Fl;S?*tw{XfN3vGbY#^YpQ)PF{0Do)DChHtH_sYdSza2(ymuEIJj zUVL!CLx4{LB6b_7;p>1BIu=W{pKgPF`LpfZF%KgdwM#!R61|t+gABiCOMA9bus|qg ziX|ucc4Ts46o%G z?r%Gxqm2p-R%m(t0}B`|%>`+EFv$-T{OjiOkgD4~kPCL#eb=JF)NjMUKboS$Fr?fs zx{b+crL4jM}r2{MJ-7or3rqG4?Ez*d>0d>w?0%pWS`rz1l?b z&SZ*tmGfA4u=4FBmM{3sCqUv;aB`ldc1N-yOeFq?C6`Qv$jF$5jK)nU60cgLLW>t@;M2YyvnH(yrd`7kUl{XGD=n8gp8O^xLLuALdFxj@0viRI|}M z^ceTr2>9xI>5NiCDdMU&(J1N9VLB1WG!WK=B10uom)zhcIXs}+!y-x$5cOUs>4{fM zCd7#41gYCka2W}b5nGi7B>sr9MUE%J$5n5TbOr80UCol`%Cn$VqViLI5>F`b!v7L% zFo3J<^nL+r%OPWLiiE^Hx$7^5=9ou-G1oUjF(3g1oBRk`^n#ju+E^zfh8*YsuS7Vaw8l+!|CBul zuqjNJy8SyFf5ON7$KieNNOEPfFds+1*(6`fZoO0_^@l{Iq!5a_a7LmW!rr-DtxBUF zom%L6ChV9Gf>XKCDX5_Kt<*2g0X2)BpJ0^u0-$3d>B%}*OIUs!j8WxjfS1|iZhz2S z4>S=veA6wxO)Vd@o8Xp|q=m+UxTaK0BdKq{J|5(88VwNotHVh}F$NI+O34-x5`lc! zFE0-qr2$2iER^9(tb5Og@;ih zY7@QH_NOZHs`6Bsx&@UFE`0c07G{A9jHP~a!V1z5Brtm$-y~}-2bmcOd<9JzLS}rihe>K@%?pWdxOnw3(l$bl{nH^S_wl`k5 zZ97;wl~lBqZtVPpZ15gzZLTm>h#L7T3JG7y$43>CrzhcvXC0NLB>I!oKKhT)Grs3F zMISPP)f@G`cl{WU@t|=01n|-y4Ibzze5tR~6kfe{rnLeoAdsr4YwpG#za2q-w4=`p ztYbjxY<3vGFUDa(tZSBc>o50{PVx>#y9j7YqHcV;>MF0CE&UdU zz?r*2%Rio2k+>MGab~MH9|Oe*6>#dHLi5Etey(iOb$@nMcP6uI8O@qApDb*8Ev=vM z8i+P1=E6RR(*b3mgn4+vaiB69OPqwTem6DifMg3GrkLLkH3OFFBuEdW-NL@8CZm-F zHb=>>mz(@`PKpJHKrZ^}H7LqI<>e(56%`p;qK|$T{OZ`9(UlzsHT+#jeg}#`$tAge z2m&u=m`xLF)fp)hVR$sqFmmxPN!Z;6UVn;6nN&zZKO`r!pi!?}6IP}8*W=UU7?UyA z&P20yIikq@>(20FEsXlvzpb$3G`{#un;i)${4Z8e0%YthSos=H!d~xsajtkjWf7I- zq(JWOmMr-;G1or|#2rCV{s#I|s&sK$IAnUOMOmA^)w$9MI*z-g0>RI`Q-HITQgx-P zF6CUMBb=Y*7En_$&&Gu~$^jBnlu&ocr%C9d;h{MfOd=Fr#~@x(4OxweK?--QtdPS#nh>m zzPCa5bf!GSWOXiFz$F1G$U{{0@`2Be___8xJtqc}3#T_Zz5~JO6)0$9o#d!y4sX2n z-Ot$r8&&LCB(0s(tBAL*cHKtPG-e3_-P0Spv@_-n{H{%3?S;eX#VO@Lat?Rr5n;ik z#3N9;v!Pf{Jqa&Et2iwySt!Nl75lFf$VsR#8hh)Q1f!E&C|Bs{UluP!(7jA^@pOy; zocSNZDta|#$W(^qX^Lz3gPJCYoUDvEIC(C3`-xE^Jvl!=kbQ`4^dKXA+`b2rs^3Jn z$JMxY!=?S!7&jBsew+WwG-ae@mO^FuKSY9*DMnbHd9s$nKqQ)KvBeoimKmkLN?TR( z$iD)GL%t*z3VEK8)3vrBX_aO>FL5I@J6G>Wq)FFGeON}h`Sqb?n)c<|Vths)Kg)Nr zN8K!^)YLi5m-P`kU&aGB-B;vRSbBRTmCbK7k@S~=j4kRDa5m%nR=67+vOuuj){y}j z!s*|t!P7)qhUn4_Q2%PT)dNvOlmIN%d&^xA?lEPk95o6slv(=^9#flt^O)W&Hvy07 zvEbhxQ*EukJ*GzUz+*~n3d}tqx98X&x{dc7F?U_v-6xMvL|akfa-gTXm^hIns0dj& zU8y&;sO$dLj1-<7Vw5+)0xWKqS(e@uH94lAn(}pMYy73;)UZ`3*E!xx2@Lrn)5 zFQQhXN2@HWRm?Ku%)E@(q0EQ3J?AKu3NV>FNr#z{dOjc8plarTE$1AuZfjs&g zWt(lkLE93O)Fm~4!>AM2hypM1F)R8;07U#)>{*4rnveNBNHX(?`Nt$n^&btGa}*U% z@=X;1!OHaDx<2=z$1oj_RzM4eRNfzN=a#e#VNB99;i6f2qLf6*Qun#pwK{raP1rNV zqG_v4TS4j(jJ9BB*X_>}j-FSJf24$_Y;{``>E(;n^9H$?n3!AZ>&c0>+S%TJ3kn_k z0BX)i0vLgbs7i|&h>}vy>sltCo`=bS+va6cU!k@-u=Wd((5ylojyqY`iY6wqwjM!S zBpFJZ9>YFUu{YuHM7)alo|<1@EnP;;LWniKm1W2eM1(Vm3LS7E;f2rYGa~i*v~}rT zanJ!~j*9wk!{*{X7SP8t)j7_MWd$n>Q`@nwmR$5Vto|`c$v#qbFMnD*-P*G8ER+!HM_DoQYXF^R5ZAY%ReY)6KW(|I+?#}WO3^m&)MBLL$$t9T{x>c|D zK-^KftbW1$0yx_sFbc8KuCg-7i;js6zMemtpFS7E^Y=9HUkq2S=Z%-wW#{bJx zsYqnqrI|OL->}%Ab@lo>IfG#QCW0dK1ZN)=Fp!$1`oT3M}q+KVtxgkyo1LX>g({esCTw32LF{d7(;bm6K6c`$A|+5GZk zhH~3zCeggL&}VLX_Ml2k*?>rP+QZo!zvlf~g6uq}O25V*7J>`%&5VDa#L`RJs)H== zRi#}nI?db(kPzN#5dZ_ghVOaV8N|iGCVngNF!n^!4b@BT*0JzbU7|+40?+E2CItt$ zB5zrMC4tnOPk*;1t!#@x$c05^gb6IZq@3lO&d2L z{z!j2h;uBAl#g>>iKt0WNv5>2|E)GWy~GKh;yotGG%S**PKVZ^ffn_~7ZF?J6?PV# zt8_FvZ@7)OI!17+{G~T*C4qG)HzAu)m2>|Tuh$@>Rysd^WVRzi?(nIeSSrpmy2o3F-A^?pmpfaG zWgb^2lCqMV121hvk0vLXehyA_=0LuD@$Hc;hulN>K3?CrCl0Xl7pnswoO0ex5&i!)H#NAtYk8HZ=@drK%%n4xQs$gOpRF9bf+1O&dY; zR|4XJGv58@qiFtotHa+cf#LwLqz$*1WqptT z%{sDo@gdwM$QjUez!bOgocRwHpvq(cxY*XcYGE{79Gu46X*2k2U~}$Lloi-rSs^FK z^|(0!H62{D3^-LFg3<2_Z}k%kCj4NhjW=ZUOoPJ;PHW&fJFVx3B=O{imo{6>RQ2jl zsi~QA19SK}@OP*Mo~(BV9lk`7PbgpZBZ*QxpcP$5r_+4#ha|o&a$bjk*iKo2 zB)TcFCeNy8QN&Q;e_#R6o^7;rwm&-jNuZ|iF-)Zx!CD1 zUsRz*8n^1|qPV_K1)kBD2Dc#dmdw?Tp0TsF)pu7`9+za2C=pP)f1hS6kMD=BHmUe0 zk+v5PZj}o(WD|HGJ`dx$4PG)aogJJ+-}A`u0B&L+&{n2RP|?;tZSlI*Lq)eV9X0HF zGMcsuQ9H>(BiP9xFr7GN=1?(ecs!LWD2${LG!{DfQ4kSQOB&hEX3FL=@-~4$PVu$i z2gDRL>-Tefa3PAdI*>0V22tRm;Ciabg%yP!{Q8xnQgoZlpJm-LF)=tgN=Hj8Vdo5* zlVmvGE%}jj6-P}{q8o#P;uiYlAs9rU(T8cNcZMh|#+v^i>v~B?H`8R5l7R_R`)xL#6%*@;T{s<`<3cPI^Sxs{HpYK~(;7KQMI%he!9o*pP?-?*w@W=@P1 zEB`Kd=A1mQDo-TA3{fpLuOZa_eYfU+5q=zv{MZVENt1<6PU2|QIX1P`67=|wL;#2z zlzMiZIW_?HK0atkp3mEVo&>y17X+he70Ot_32alP7IoLT_w9fSy+@+=`0+y!TLDUW z*#_X~M^F{3iGd`XqeAtvaYKuT{*tqEb5#}#jGL`samOiSVhi0zS37(VxZ!#0iOECh$?M_(CRF0aqQm=#TLib%->gD2)IlFxB>p(*)L}b)*ZZ%`$oTwRg zyE80TiwD3E0|{4KwVJZkiB3YVIT&lgzix6fsJ)TV!`|ov(FWyEE>IVxj6~`INXGFI z)MXOf=*PSefXt54F)&1niF10Mf2cvdBB0gO6!sK2io;>Fr~nzQ&#ilcW_<26l}i7 z#s7%Cw2XC47757M5fQx=6csC`u~rBc*VL~n8Y(SkK(<&&s|>8!HIVJ`jx4-D+yqk| zrLuk0UCov7)T#x`GMb)zHC8~_0LA4l(`qY*K$yu6=VcE1RQQJPuq#2_R%Ek~Pz*F8 z3B;u?`BLrtq*o%a#jk*}x!i6to(EWJ0o8iHjvS=y1sK-m)S|Q@dcK}v|bAMAhr1-LW%MSeY(=jsYUt{ z>``42lq+Gy!VY1iUhzxBg|Jlhz#Og7fjO%2^{DZ@FafnI(64e;me&cSGT+#OLSouY z*B>)oqS*j80hqPZwD3V=1H7lBh>G49zm4l+h)^-I>^jj9_w9Wz>P4Ww z!6n8?j*n4DS0npDK1TTx7kAVfDRE_U6Chg9R1UC>Haolx*w*U|wR3P_4at|^MMVL@ zV#vxr?Kv-&gJY@FFk1RgPc}b$_4Nenq(k`1O{8= zQdRFami*xpir}%P*}?lGqBRT9x~LZ~df||RFI!}!g@0Y45!fi;|MR~gRNx=`Pr|4F z-z(Vxcsd#QPT+Arq_e%7Ab`t2I_n#0x@41Ue`AfBx$Nh2;g1NK-zKx7?M}oT$Bx?vYinzFH`irth*z-DRAH;Zo`LDaVsWJ96<&gDKKqR! zF_MPA=L-SajO+YcW! zgvHU7s)P&mZNX8pGdaO$2@c;lzW4oG}b^M<=KK z;dCSS>;ccl#`)K;aU@lbcRBS*;BPEM23Y}?nU|fLixiLR*x=yZ(VeF&J*Nt0SlvEx z!^TXJNg*JT!S@P*0c5FM*i!stnBREx|}u+E9T`wd6dRPqvVpQY8$NezKgJL zV4i@^sJV(_XkZc;SEDPLf~w@ONdisf@jc|l>K#t`ToNS#W*aXlDe{wYjWc3k*3s5f z(oa5kzpc#axH}Sj1%=<6iccVSFEpwNocp2jjtK3eodjR8*F<5GDOaTnij&isj@MLX zQ?2LR^dt@gxGVT9LMX&k?34H7;Z=DEB1ESFP)Q7owjNd9L&V~+qNSxhJUvw=r@ZCz z+;JYw>Nn1W|1?dJ2pgr^A>}oR7r&p`ep*^oRLu3Z&Rq@(;q{JA^4aM@cTbN38ialw zC{_@xA>XEp}eo$;rf&l$rRZ zh+y6Pe*O2Gr+~Ll@D+u1$bZV}oD?P1#6jg!=EhGqw`OD%T+ALdCg{# zn0gJ8tDbn2ZtdU}KK;`f#+q_96I+xWoras#+cUg>4h20U+W1q8x}c>vHtVyb6b)xz zw#NdT@54R5v`O^X$cShwe{#x!aFHG7;&;>-!! zYC{4Jmg=1xNb-voiBqdVb7ab&-+rK39ldFtY+i7ro#KgN4nd7--l$UHyQ%L*kupO) zK4GMN2ea0){{L+Pd3QDVg5>9St-NCZKkm0 z1L{+#hM*wJgI*}v&$^+{QgpC@+1UyqY2Ij4$lQ-Q=tUnpSHP~!u|}9)A*zC-XQ3W6 zcS*}w`zz@bO)0uD*s}(9gJS#R$wj7AQbjvKR|@lxv*Y8JG&C?d0#M$dn*2R_c7L$^C?mjmI$tOQ?u=t?vyrnz3CUBqqTK78!6Y7b(#qHOiTA{CSUV| z1a@DrGE3gWXQ&WrrO%67do*~0@2%gfY3m-;h)invmoNm))F6?U&|=xJ3shO6uUHtX z*pAn{Z@sFIVQWIe#WwzFA#)o3`Q-_;FV2`e_E)eeS>5XHF4U1#5k+9;(N`DgWYQCT ztX{U!WJBtnmV?6yYb~&z!Rur1V3}Z$?1$xWzS!oM(scdZN5LZ?g+)wH<69MRs!IF3 z@c1xmr~R>5wYZEYWJGoL}h2r^yu>?8bcJS}b~63`qL7O`_w7W2kV40_4cfaJ$4by0xS zS>qxFlc1=4*LND$GWoLqTkSVmgX$Wbq<4J|R=Utd1x(DfA|`e8ER%aJuOGOGH2(a_ z=_{<3tl~g~#l`u@Mp=C=VH+_b)qb|#xIQmZ!DcrYn`vOVMEdE0LYhG4X1`2dfdF5+ z?%;#_G0}8@#X-pI&@5v5V1pr)OkP2GeU|`xtstqO@q_7JYSph- zlusY{G&UM}qry~ItI&A|id=1!)#jO7%bIh--dHgVl^%-LFynGtG0(?n!vi zSU~2V22#yyKc`+$0sZS(caGE1dKRXe&A_Lz`sE!ggA&qD3b!0SkJfpRvw(rY*6FO2 z#ffG;Wn!>nikNq{qSU>BLRR*rxpHZ-d0K>u+%wGO_}B;|=7wBaKeuF)nv1LfcJm6< zlBXEoOs$`%!0Z@`y2?Pvb2f?`DYcd6wP7r|C@}QX_FggfL7A$YRGm2DXesw;6v3OK zq@0#lyd%omlswj``c_Fn&U{dX^tyERjSkub>Awa-2Im1%Og6<@l<~dre(xUJ{xzpZ zEau>lzv%Rx`qO9YSKo5fXnXk5bkhf$X#BOwe`wyLU^>~DI&i6RIr$+}FTn<5ZJ+YV zBULPTR25Kqc>jnN1mg_j;B>@Z6#5a=D|W6vY$=6+&uNGSbqnVONPZ?uq?q5&4UNo5 z3&DXC5l@7LG41m37??yx9xI}SykuaWxG}%W^7k9GQqmn3fS%Q0&(tU6w-YB?4CtyO z^g{|6{uQQ)UOqAzsjs2+skw5)IrkGwusV{*A$0T9!Ad6mG%wJNoRskN(NrFY?N zJ8xj^Kc|Wpt7yyZJIafUG{J0dRTTvutj33lF@8ANzSNlld}Ryt2y9Vsqt7>c-6w|>kFDe zB5vEa$sCrm&eLNitVRP;lZo${)lwR7sAQ8fLgS8x6Z`t|jcyOikq|-M{YTT8A|?j_0eDQKz^H z-FV*rxbhX%auNU8hJ2#kVzc8$uivsLNS}!Y2ix{Wn#@+D)w3)F?6kV5 ze=l-CLvM(c;~l8u52$rB`=l;oT4`neuDpu=RNt|3i*Rgo4#rTN$}BNtbjIfMV()ZZ z|1rCQbl?GxlTP$eEwS)JHNBN~8yE;}$dKGCG`lVKv9hhojjT zs`?};?$^1m-G43K)6>0=pdzVm8A9b1zplIGE6l25^p36Gb8pin+ubF%qr8&hDkrxu z#c9lRiE_%XU=(3R*Rz+Gz7(S$I{%hkr&NFXmX^ArgivENn@U-rnpp~pzw(SgB|O&k z{MsRNTJ2dO-hWQAeyiueVKbX}o9bw}>IAkzUZcUBYE86DA^;WRNo8VUO5r|Q!2H_P zF6%(4DDm*{UG2T*@NOo^+1^~Ro+l^+2aSKtPn{ETVyjtQ#_3pb;Gt!+$Y`g+-E>p&t8% z?cuQ3*)a(Ze|xd^*ZQdFI9Q$v6DKEUU@Qer9ESz;WS<&A^TS_+FBYrs8>ijpB7@AS zS1`x%xg0`ad8<2`0ry;q(8#&3Qur?J#!PM!tZub}HLDyOG_NzTc@X?4OLho~?ksv^ z`a462cwN~xhXwez_LhKtlXg>7N=g_n2db4U!X(m@%-_`b$|L^T8Mr|EFP$(!R*V6! z3fU~LtNloB^_29L+_TS%i+{Q8HHzJiNt(XdS1B?GjL}X`_P9J9@52>p{UMZFcdwa- z?__NBXx*d4V0+v|G23Fc{KHVQAUMH&dh)7My!I(3eoRC}+E3g=;i~tyv6wD=hh6E1 z*`iQw4yA~^j;_Hhz84TT&f!AJ5)k}7bJ@#d&e&ee|&hmG%^Z4^Jg1_VWPwN6SO zg6E^CpulD)@YXfuEht$93N)GB&yymy@K@f$kv~G|Oy%6ALwFe}4}z&ugBf@Ggxi?n zSX_fw7p)} zB5A0=tr7M>kK)BWdOA9b$ye*KI$q(-WeW-H2QA__>|9&0JQ5rnP$fwL$O2heywOHv z2pReP^2gtm(qg zFE*)GGAA(bnX^gS=Q2%A&767pKrpM}uj#x2||@3!^3 zghp8GfhuN)NG9=Q%chLWN&cOnH%G5;ZMoK_2?_6#F8;pMVgTsH!K>)vyG2kD2r7Ex zPoGY%-EU_3XSFmpEUs9f`T6v8482TUgT1_k_o_?JQxO->xgc*C;Fr(K%gX?Hn9@Ry z0hs6B5mKD=Y(M%N_73!@B|@W3s}nV~w#N%rw)Xd#GV}ZLj}H%R(VEvfF^CY1T5|6* zCas<`0z3zDW2vMh=d@xAuVAARk5gVNh9`ulFC9jD>C%>uQXhr@B&Ii9R$O`nLDTbk z=$)K1(5wPtP{~<4!5~O@#9A-}7In0PzYIe&GvlCmK*TKRk|F zk$s@FXuINv{&BRXP0=R;QxU>$S1MS0PZJ097qWiq+2|?K?t@>*#cjjwuoXqbR51K!Kz6I8A85tREJ>Im! zUWg?dmNa8GgHKbpgHIR#{p|lEbN5k^XZNWZK943b`|oi8Q$=PgNF~E;em$UB#vpmg zL4t*^6vuQxZ=?;73#jg!Yq6D_y7n{0gXePo>J;F_#~Vveor2YWt<|q|de(`h z$Htz`IW3eq?#5$*9*-e-`@1U^CFO^QhfGbH)*C~Dfd{+1ZMi-(3lSfLt#knPGG0c| zz0Phq23lJEjFf%72cmw%<;gA+4g$g$BUsrqFd7*^S=k1U3@t_2C)S#T$S&JCNRC2T zi!zWf_>YGUusZK92EDe(SC*GW?<|j#`P~-o76mwdZjIC&X*mUd4GQY(>iQ<&HQynf zFm?{$q7V{+M)4J@i;D}h@xqJcz`Nwv9-_(zR|3}``s2arO@$TOWBF5MRhBcS*LH(f z=jYEmo9P1lf^%oL)(~-<0b~Zcr7l<=e7SYv9K#|yC-zxM$ zerZqmK=|vr~0OPLP>maF95!?*g;gdOi`aXAFJo`AE<(i*aIpN&g+$NhQyVI4CAG%+x=7v@cu8Q9o!AIRT zupOV>c&M4{uxpr{7Aoh!nV;wRZkjBV7Asr~+is)CaqBtBlPAVczvi&L1z1@u8bHO` zdVW}*Nw});#yUl{@llA2RjlXdA0Hjr1OglSdmIme*HDjFmcjs8qd`_Xy0s`d0ZZAH+kON=~*R~MfnNUhE>xc!{N zV!CIgP>Yux0bTY1GMLP0gs^-1V z@GxQV?E7{F=2Wf6jPf>GSl_a5OaYF^l>=agyL4gqVf5YI;*d;i@P*St9(|L{D`j@J zfd8=O2G!w!gitUKC0<8%viLquCtn5`#+5{GPh>>I^z4}E$m4D*o;C+-C#S*g?s2K% z&bUvA$UT_@E=TLY)r--jcMcTNEG#VU9`06~UcE*sUJ9C;hpURRJyD!hX8YUQXRsed zO0}dQx#zcC?Fz9W+C?U$oe29Tj6|_M)Q6_;dDpyuce#}Z)j+!0SHkS|HikZ=cwUwuHH!x|o;Bul<>+|ctYr~cxo+heQ6L0cJ}+p(fAU;aS(|E8 z6jDZT6v%D&x?HtXoB8eis87C^xFS9x5ux^5&zZP4^QTx1F7AC2jHJF4iyEHBp02=CWFujB|d8s2i!X`2I)B}Qvg~jWzHQAtX z1~VJC57|#l07q6Xk*=KW&ZNXgOy91bVp`A6?iqG-IbL5M)t+o$-`vmm%X&h~DJvu6 z`qv7Ej>n0?N(Zy0rGtT}M_h#c>iVjyi;I@^u500k9e?4I7MqPB(nqi9f1m{Zwffm{ zcN*`>llOgGO0@^ORe=;!!w6i6Fx1tP2_1_C(t(Ky&JUwmb$j^o+RC>_1G_*p5&KuF zL2pcFDA8zk?Dx}TH_uAaLY9AE0kPFyO(Iy>{7rImUeNFquTv8c7DVs%=D|m%c6i2A z1%(Z;N}q@`>bnI+ieDehyOoWNkE1*WEuLc`s``xOQun}a4fejoZ_pN-X>x^q*H-?k z1Q0x7HMtTJrncth=5+~HGO~llBN+!H2EA^l8>!mU_1sG#yuMZDQ)$9}=u=Zu5ti?4 z4{nj~!kgCn;}>i?iO%NS7SI^1R2y6!MA}UzY8?h=GHM+FPr+Dy%Ik-*Kb1EDqD*{T z98HOcH&P32)5g%PAzqOzhsko=*RSuQeP2TT&{w`eb2Nnw2&rY0l{S%r6%nY@)WcDq zzmjVr@_&r0)c>`s>)oSgn0-XVd0WpxBBtYhpreNsjZ*Oj&;HkQrv4|kD z%u)<+t>6`MO4{_!Xc8XDxxA;wD;CfbacKuDWV*t_Y5Clr)rhvrd_EtUkbuK7itD@E z8L_Pc+XuVP83eNYCrZ}VH%-@TOvvcO&MQ_{gaS78Dudbr1?mp#eR1QQ^VKw@9}ZXj zXz2#sZ%!uU!{rk&IZSXz3g`N-PWPfe6&Js{S*LMDLqAax3JXbEHtORl8kG0vkh0LA zlF645AnFM6wnwz)=}@MCO3FhX09oza+?>bxFW%ms9s^ZYF;Z710>Muw6oy0`$LQj3 z#_FL+ex}Z83cf3yA>y`Ar(Y<=6d~idrhGS*@D~`HUfb+byQ>VLR(gQdKPw^P`G~cQ zh22gIBicV-yRJ4P<88-v{mM^KY5d-iY6E)kkO<)6SF@ieu-3>+Pl}CVhYO??Nv?!u z%0;_lC6Ss${La5VQs7>m_x1I)wY4>RTqfo6HMo?SlpMOo4kU@qvLAXK-KtbsCV>Iy z^}hn;B~VB@&J8%1nks!T zPGp@E!d-r}uTGZQ`n66piJ*|FH@tbdz^gvDV=})b^~?l1s2Z)^;2Iqrvn9*x5X3}J zJ6mTY`}XY@{4)0o1%JM2r?2S*pgkKS9Y{L-a|zmdKK?~GUWC)p2v8*2I?t)_goK%L z6UA*FT(gOS;J`p$`}6O${XLw4js5`v#H@yW9%plOPetWzy8TEztwBZ|S2llgdT`Op z>P5p;WbMFS0l65wx(k0NwEPGIsW;zs~(92~#jv)c- z_+k17`|^akI(*Pa>=)^Qn8SVa-D^+LdtBkJC!dw`&r5WgZlTD*&F=~j zjdrI!^SPY24t=CFzWoLgF-v>v$w`q%lj)(`XtK{%w6soU@|FDR{5oqL%qS*?`Ya%Q zoZ1&1-|F9eD|K4*XA=W^G8!=SFL6tzEBr!vQ#SzW!F8LN$o`p|r~ zx*Mcw$Y}WXl6OF-F;AaYY!?{mxN9jRDINVujKpIMO!f6Xr;{9Akfb`zu?rEO1jn)4 z#k_sRQf#v#+Q8u_rPFVZ`0)tXT_fpRJ7>l)N+{5S3D}8Wz5lL{1uYu{xnn4(CA~3Z zSRA+T=3dom%MBf_Ng|^@*B{mql}|N^2MKIM3eh9{plF(%;}%l-T6*^BDytMe#>;gx zk05%%qUXAA1=7LqzxNktF4RSCwgi%|t>d;2qtzuVd(|r;fXZyT+jCoS_Gfk6nf$=- zG2dOE;$$9s&!4v3bg1rO1-hVNf3n4JjW4s~J!>ubv#;#)k&yc#w>Otw2kl<4Z)fuf zlzJ5F?<8f-CMuKOKKFU>02zZ=>Bc~nQ~u!iSJ3v8DuQpSLm(tTi4pn zw!YsD5q~QQHQ{wQcxej!UF;#q{BEEI{seDW*!&d8EueLU%TTTvx5poQ{Xv~F5D4lN z=3!*y#jijBwKZ;2FeGDEz3lE@zjkhhz{m<3-f`syzJ>rR@{k{>{EUuk?f%qNmuz>Z zT8yB)Bky7ADpC=6NlvcViv4qU&5l+;2hlq2Kp44MT_J3C4*@KC>ihc?%1xs>pb{4@J8@y>n2-M}EjRX7-AM?JKmX@MxnNJXx zlEMG*f0^C?KXkGLLKSoqfItK63ywOW3S9pp0g{~Li{8=k$cD>_34rx<29p?hnXsst zs&4@(SrV-`y^&3Ac(wcP=lZ&#T?eQR<5=(bt!~}nA`Jw>=kQ&KBH?RjXso#|z-Gsb zsHmxH>fFBg_-yL!)m#yKsP^0bTKoi{qm1lq0fDs|a=k}NRY^9EkBy;iz`zu&}P^F6(;-o zcFgq=04PRrVRb6|aFiTF(44~ooTYsCp$thZfy3fo_e35L5Y*G(&mHZx1@c6opdr<( zG@mD2pwW&9*<{Vi%h5et6=$I;6h`(4l7TJCwPFV98yQHLm*}>K>UGRo?U=0u-g%_@ zQF*wYUHtM69m|6vi3tj}XxyFG{nktj!1WYw?|r(b7N?f_AvHo1m6)%szu#lAS;Pu+3%hAtJeD0CSWD$0y;hXZUYz%?Rp;{!rf4gEN zwQK|*P%!#GueIMJ^A`qi*yqonUlt$n&1iaiJ02v_XZR9D?#c6LttwQuav<0KyqM12!R4H zwm+Ud;bxw`-@PdEWAn#YZC7USEMc~*OMZ9f>j_>u_4=T7{hbRKt~ob*MK5Fw2_)O* zWgJ?T68u{em@JsgG2Nm;^?7=li5btww|B=2u4*f`2{=s?W0JE#I*IU+^*a&}aGdTg zaJn2)^d}mi;_>NEm*+l804IxX9d~SdxgF+Gf8It8t+{&*`nm^=S&^CT@F?+4eDGT( z+Hx!wB~ASR$c3IaAO$HQ5B>J-xy$j%Nz&o<7#!Dv{~AJY)Xd_>n1?pC0Gqf09;WtN z5mD&`9*fNp%1aMfbYi}t1~E?do5axdoMK^7fL2TIhp^Gm)Og-pcDxY&5eU{417gR3 zSg=wc_MZzTOTK%TgQR)J$Hx~K7+9gMtfppisq^-&zN=_0803%J5U@Se)*KWC25t%> z4jlZ0kpDZ{{0|z~!tejTDKr8B1iYFJ*5MFb9Z<<2n1VDE{x?lWAQ6eDnSRA@+|1pv ziW2*k>bHgrp?MQ7;4be-cf7!8Qo z#V}nlHY(PiNP_kQQL(G?DYhUMZS4aZ%#gVx$mM)Vz!Xp@Nh9`R(J;I z&SSPS)G1aBFNT@r_Qz2OArNuWrfvcsgiU zS%JP(lGAefe1P{ZLPc>@!Jt`Jew>^VxBBOv+m3lN?%mZ7-I%SgXXM4&-s~wdkxO53 zlH5Q4cr2@*wZA|w>o(8HzwbOyUv;Z*bsA271#mhr%LDr(!#3iY_zI}L0geSo=FA7Q zwY6W{tv3k^wK8@Vf;I%(a_|JhHC~j2uy`2^=%rChW;$q5@-?2_0v{W@#;_khp-5tD zxXeg4uESF!8XRubba1)w`0=4wP`xB8^;6b`Bz6!!zVtsjRO-0^+v26kS^x-4o&V&M zPP!wh&DMW-+1nrQoEhd)f?WX*H!t=AgP0FaUiOFKs{(3*uwWfN1?0ESMXZ7zJ@nt? zxV%{0AQ(HJjcWLRczf%(DBHGO)J8=>ML=3aKw3e%RHQqGhLJ|Ph7Ofd>F(~KLApUn zX@>4*=olJiU*q$>-}kM(*4}%qy?=Z0$HVWD;b!K(uj@L`^Ei*=I5&hmB@}~oCzHK|(r-zyr;^ z#X{^SLhb+c>sN4W77=++w*q4OKKJrz?*2&!b+ByAt}C#i^{`$P4XnR|lf>oOU?WPu zB_<|jHQRvD(*}7x1)F<^AEnz1o3^L|O-SOS?@yI^=QcJN@l80MOs6gO(x8J(20CLb zU$Tj|Wp7Q|AEZbi)FVEy-@G$pBrsFs6LcH0BMk8vFdp~^>E>p@yx&~ctg*lM8SVlp zCmVn?8nASVZ+&l`L;^2?;UQ!V74E zXG?dZ$NYEc_@XW+XGm7bDSW2zLndCB*5+iRoE*y%0`w5q@h3MqA;wcqv85Rq84Bq! zAX(@ZgcoWWs$ufMxu=+Q84(+a04=TI;bAy!h^iq8pHy)}^>-cA+Z}r)grWSUS&k(K z?DcCLV2O#?1u>c?IGi#rqs9Lb^-dh12v|<{R_yfW@rbK{G%1;c==maqE14sZNAbw& zyZQL(+zL%Ky(=^DJdHWLjE{$rfcuxA%BfhUu|>-0Gpb9v;=J_Y?8CbO?i0_;NGR%{pDUw zBDvwEwvkbmg8~RES8bMF;MjEU$sUTjTEu(A%zJvvhajm#de#bAq})b1ohXlBR?Z*K zZ+;^;W1D#Xl)hlMUc7 z;F_+NE@L9rc-iWFs~->mDHo9eO)3ELzGsl`!xNngCbLaekAtc~#RI6`r9&Tn2S%lc?ATGDz03pTRUgDNCXs=O~D{f3z3Uku) zGnoUXw7PUY#`y4IRWrfEy4&0rEYxMBTp}6E zC4Qz=h0)bT2jBL}w&el&&r@Pf4>pvDdL8wM)vw#cqmf}@j|mBl_~+UzMpP9Lc>bt6 zYG@ZVv}DISC9C8;C0+E1i7N8)?BYO9EV!ZX#7pp_YNuoVo25AgWcU6@v8~@zM z7q-lN?cQlaJ_}i>ipJUA6i?gx&?l}xk)gIZl0~m`o9M|CW%lWi zc1qQ&mxfRMOBZ|tH~etw7e}EEoz|j8E9k4^YMrylJ<~WKl@ga|OFPLRZuy2Re)&r1 zXl;=YKc_S*y3$cyeLPsmW3&-%LG$}}tKV#9m;PQN@6J>;^|NPhaf6s7yObRUpA$Up zG~Q42Y}D3LeqpFuzm#>~R-?RAH(Agfex*!)O9%>8PvMmZQ#{A0lKa-y){K)A^|Uia zPtQ-S#!J=N-SiA$ez@dhT$U}Bvu^2vFZOfg&+|sB#l^>7w99zPp&rV(2ODHxowSPu zikJ{vDZDIK`erfnvw9-KRV-NHCI`)i;v_Al(7oY++%J1}IpO;iiLGX6$hbPaZFjp4 z!MUL{I6=uAdM;v>8};{lYUcJr_f%Id8CY1(MjNkm?VwDLqvjo_P}BQ{?XqOy1(CPA zVvKs?yRGugXGpE;;4R$a>Kpoud@rH*Pffcy*S;rR-~w1-t+57KS>xcjdQb3Q6p?qG z_ws6MYqjzPoskhGKlQau-l$*|S0QV6H*QzrJT>9(8zIJ4Xj{nZAt5XMAsR^1?OgYp zMn1JAbaRu8h^XM5*B!QtrSLxUvEoAAR$s-o3S3Epx7r-#>ah0}JRBUE!hYO~9bsV$ z@s@S;GudSt(bCk*563BpqYmjBQ|7Kp7MY^#9?|IZXsty~HS9pWhr4yCkx3?_==9Y4vWi~| z6hd^v8Qyk%Hee~0K6S$-dnI1DDy0kirJZh&0Wa0vD=E1$SB9K%APsan4*Jj{kn173 z_43S=8tM^lDw!XdcJxg(ei&W-g2SJ`zn@@rwFPrm0P)eq<7dZ(M8D8v>FbH=hdpCU zA6WIxd|&m}9Q|m>J|hy#+Cv?L%Y-?qSj3Z&6>zG#;WC?Y=IZMu=+y6&0_$bnvpoO& z$He#KmmJ>)1-r?-Kr7~gKjW0ACX+X_R~@#a3d^~+=c`gMtTbMP+8BYGDDtV!zYj82 zQ;T`QcBWP8#%fnXB~fw}&S=*e!B%gC(tj@2Sv4qyPQFCDWCMJGFXf7%0q8ly)SI28^9sC-J z^)cf9qCz7|uhwO|banw0DoZt)46ig*1*2uc{LzXol(6F+CU_hv_A6V3Q4jpb^ndWk z*_bK}yGsYz)LlV~SNz9bu;-OF0iN=_SWyM@d5+a!W=NpwmSjFOY&v?b_3Uv@3H;k; ziq<=bEAu2Rk(1%%Qhj)p@%VmbX&JJs7%r-#tfhr85~q?Om^m!1;k5^-@!DW!yb69+ zu%yQqw-BZq&n~-)wLGFtg!zQ}OrK5{iv=gyt+?d~TCv4W>~WZ>tPiabtOt%xW=>V< zxA(Q(0IWL|e8uQh*BAPf3=M@NQ4Sn|E>-D3YqA#L1{J77YR>`4hi&8TqF_; z@-@%iOd)$dZtgxg9Q4$`JzBhI++g6&udi-R9;YZGj!ZY4<)K2{L>n)JA9PFH)O0`H z^Q?>^jmzRJgkNLSwsie|Bb4wo2!_JiAmOr@s6ZqmQDR`UowzbxBhvQQuqKEuf{V8N zz3#_`Y7LTSEoRG(6rd2j1;CSU8Dq5B)wT>wt+q0Xy({&-x5->mm3xDO!9@FxKIjQ5 z8nrPxDowY5h3Z;0)uU(ad>Si4nXY6!#`bKnK<+G%h6dvKjwLLQ5vgeMnlJ|CUuoOR z%osMW-yW1JmDR>M&z1sJVrB%^G4hb}!W+?ve2!#74qB2QfHZi|`dD7Wp(=_Ux?i6a@FWCuikfR?Z*5Kai7~4XmVRvJ-wMk$x{WN$5cE51fF2sReuYOp zHw%4U^Moj~$y^|CMyG9o&(NR@kBCFm{c!+C{F{Sl5!Nb_P6p9{r=Ju=#G$1ODe$7y zTNcPfNKYwC8nDNY&wOQWr*B`nn`J~O@nt6JgL~7PgY)Oj3Gi!agoQKQ^d;S+l18(& z#=+9h+IRgZ8&qNV$~Zwgo+rIAg(@(&!m;zr_YZqQ2y>qy^a%Ztoco>8%n2uc5@(ay zNME(lxqd!Hg`GI2cD+u9s?b?A9(z-1i_6}d*Q^sUBrgRCiM``lPojqpQ)0VA6i+rM zGUJi_a*`RgYz48T3C61iK5yFzx(Dw|;6*GxZ|LiDkQ;D_zY7G9Bg09l$isa@lxCv(#%I$hmXe?+ zMt}iDN;xaiyIBj{V4+c~eq*{hny!AZV%x0r<5pW{u0Vm2(rx$dOs8u1bIzeqR%Z3x zWq$g+H3(-Mmj%oB&pJ-U<3zqakF(%?`x~sahex*+$HL!-Mo16ynS_^Q=*NI8`{6Z- z5AT#gpZ5=FX?`90UWad(X{b>yA*#}-BcQ)XbSmD#x8KFc3U7U`+DOwcG1UlVp_Y2o zJEqulas|H;_UHMe7NqZ+;#@>ecb^c4-me_cbE|MF&*H!y#!?i7f%CiXYT23ipflSJ zA%#GjYlWCa)B|1$VoP8atw8%g*?7RF{=9Y_I!gVZ~L) z1-Sh_%x)tgbGZ)TTm;??`vL&nj#}6jQB@E74R82(D9By+V9#6DU8`W0uYM%#Vx>b> z?#IIZJB>!mf{V=@dkLdZuV=}+r#B?$AQ~F*_iyj90ysGt&|8$dgR*2O85o!%D0%O7 zusFH>WIXqP`04NoXA%(Zq@>*-LR_?~31oob*^bRA zHDeJE-yOaDEiIbF50mUth^w~4sh0_i_+rRsC<)^@Uof@K5k$Y}?e{;1=Rd#AL$BTK zk(-y^hMWa-2O_O}^ME?~wh)n-L>$tQ&U4sY|Cj5PxDl^y1vqJGMHeXQrEs^jaB$0m zO#^M6X3yH=;qD5xAX;^PTw${OAk1{pS&EUl;Uz?NnrO^txtub{a ziW}rM_QGwv+)gaMVk^n>id6$~yig*iy{D3B3AasmQ#OEt7AFh6lo{g0T-j55KZw-q zR!61iZv*&~`i_2ruTP$3eyBHFl|{W)5s1(EDT{{{=qGhs(bR$9XXm@{9iNEZWhv02 zz#Ad8YYtIp@ZI;Yn5w$UBAx6o(sJ zbk-Tn04hy)YB+V4=P+V2+xC7r)Rt_Cohi3#ec4T|!?;h#^+1&A)pO%O&3)J8SwP@jtDD2qFsmWWZRlIC-*$;Z>x+A*LbE-vfzYa_lO zm_IU&Rr~+2Q7bo*$N3sCl-CML*N_t3=ZSE8$Iiu~q?u;g_0wd0P!(XBb(;MbnWJ2De|}arPPfzBa`|H zUcweJdn^ou$6w38K@meZ8>8w>DtMOpX1T-vY;sNj3G(FFnecQ+56!Op_ zXj#q}pY8MPO~6Cciz7NKJ^a52)}JG_U*stM@EFOvzk1u}HgY1L_Y(#8$B+^{{`zZB z$fdP}=ppU0;+ru4s56)X&j9Pomm&Uvkm;`q>_n5wSU)yK3kp;llQw-Kkca|B$fxGM zQLaY7OlLtHy#J)0TQWKb3Y`Hu`P{&s16PQnFeIR|TEc~@XXE0E^)Tu}F=p>@KY@FX z3fB5ae>r%e&bk5>#`lX=09^CoCei=w_ar|3o>Q z7YjjsXOWp5nAaR$DiWYr3-9=)Q977$oPlbMG9EyHH~nyPY7->)T#q&#Iqb?3uX%co zixC)guJTlfV5=u?M(1n5zUwJy)y-Mxk&1FfOl9X)d#NF!e>?%xd)s$|Hki)lik;oS zfBVnf%4fe9ITZ4EJ(>2@sD3Xw!4Nmx3*$)@Y};q9Q1TKET|YnGYW&#j#@GCVOwl>u z`*#I_F!+h|PM_hgZwf?$f~vchY(c|tBk%y(m3!pdhAJktujLVL* zo?eemmK=J#FTf5_gT=PHUp1FTGd{S0I9%k1MhFulbyR2Mcs;1vDtvKL!% zP##s7`5?top1~OHl8kLz-8Y7n)NqUE-Vq8FnHOa1BQIbvR-CE@i+)}Du$tl}`<>A| z*4yGRLq!_$wwZ?o*sU&_j=$A{(-{;^6cV$$I_nc^H?o+)nwpc0v=mLw#sWH_-X%QIoJd)HP!WEUI9G-s~y)BU_+OUNqvvoPN%`@#rw zeCCUTnAG>Rzdb&!IPYLL`cV6+9)0BxI(O z%I&R3W^49a6YijDB;_#8$4#sW&nx6@UzKctY9N}m-gz`!$y63Lrz&YO##4O>g4aKH z_D1SMWLP^F|2WRRHne+(3Ix7hchzoljj&ugHt;3`+^Z1KV?GOqFL-O2xr3A+o|kB= z#}K`_lrgd}au1ntN{POxTz!F82YY_La3YBuz;X)HwkK9 zwFe6@a*euIdXTiWZ7ih2k=DeyHJ@{h0h%MvwIKxl}ez9}HyoSkQ? z6nrJ%dGh!+yf3xK8FgRF_N6jWbz5+W3J3k9R1H;fo_9}Hl=>OoS4m=X&b$(C!EMX! zp7?g1g5&Nnu0Rn;9H83e)y~kykS2Bx^fz90gGR<8C8dDJ=9moEOhyI!&dELXpjy9k z05G6tA@x1crm!?tb@vC-m9I-{Xu3quz1m#s6z`*;UqyN7VpDiT0hDG>Pt*>viZ@P8* z_iqu<3~53DlDN8xMiew8IoeU{=3EXqTd=@5b3#Ir`4yexlM?*Qc1cX{S&OEy5VU`7 zP{+s7jB>H+>mU^)xz;X>Ptf#EqQ>S-8u%p{eImw;a%w^-E7)krcFHc1vof-VhQGo2 zEDWrY|H?#&h_)~?5pY2=uU}*$A|ke7wArSZ3t`{~VDyo;@E!vh2Yp}*Qp%S7PgjwS z>DKz65mEHuXSk~vIS6Fv8aD+m@olnD(52U+#MrdVeO!7GI5~Me=sO7+_+Ri&*8dR= z|6dutHNlp8=UZ3%;)#fevcV$(z^BiDjG?u}$L7uh{G=(t&7(r?+Rj~HoQ+2H!yZ85 zySTjcdq82k+n+j8VEOVTQ-Y8uMqmawmA~5BD0pmNFfvLdPj`18Y%3i9tgY5o&>c|4 zZk(ur`*%(Synu=)6L zF6GP3?rz4T&2e`7ju0R{3Eml|&r(Q_Sjwo~CbK!;as-2cJNDMc(~S>|dH|)T0NgXJ z*`=_-y~TFZH~z`VP>+Un@BV*!5;0QGvpI(E0Bx9TE_C*aYuX;XKlHgtFPXE;PJKFt z1{gwxlGNgzhV9kR=%A2ns9dL_m{|z&TNIA`?!3+sY%U*C`0Gh+* zSV_8wKOx&xo%+GT!XPOi*-XRB`C)c2oV&ZhmQR^meMCe$JL%a%A`@X3CwpTnJv0KR zdwv8v@&7QRLcoSHhUh3zQTdQWec5M-8;gimP2h!9luIqg4zXxtk{s>tn-8RA3XV5> z`5kuJ7lBs)O?=uZoAX4_4UbQT?xMJ`g)R@3FxvuH=m5kfLQ+z)p1=ORuyA--P?r*M zNH*J`UMX;Wf(p&X#E6=frnsPxBQVG!w*URvlgZiMUW&&g6pxa^!psx6n3&A_Q{MSE zTplf}>fC#9_hKmd%Kp5V&tZG&6sVg1O4;T?5UMT`_dp(-jzwX@UsMh>gH^ZWK- z%@T%hja9eKvd$ehqU)ohS8=$e`m-H(cwy4BXP_QCcX9>dpO?h5KR*pcLp|10JMjSL zmUI<$fU3VtbAZ;$Q;ADY8~~wbomUed>nf|Twa_~M z8w*e|GBCI}*zyFPd!Z1wy+&5Bu<}%ZlJyKVIxFvv*=3*gZU3v;N5QCk$Xe6k-(h0` zha^4Y`Re8x8m6$UfWSbQqvK?)V-aWrW;K0oY72}9oH|28W8(HaOKxCN1mqN3MJ=Em zguZeI1TS#DHNjZ_GE0B`ox(vyr%zJ(-G@L<4sRoBrHUJ9J`>_E&EI$O#U6v^(a0iA z@mPs|`)%W*-oNCXIV3nRF<)~G);2agO1Y^Optp(nvL>hkR8QxX0AG#2Q3U)YhvT4!HBKj$h}%o3|| z0XoGldUdb4JFtzaE{V81!wLTWQi(M%&~Vq9o{~)#l&P`d>F=PlmIslBK34)GlDxRs zaINabOT*Bx@=^h*GymtNvd2~C@bvEC#TJ|(+hH`7JyK(tID801Cl);Lms2~1(uTi) z7IxJg%vAF%lU6X}yy^kaMuT_p|FOx5xxoL(kq1QDcJ{SiS2{t?->lDa;P>|Bl434L z{G}Str2n4oz)#Iu`e+D;s;KJ?q@LGwsbjgjAzX}uA85$|*{AQ+MAj|a$-i@03UHyS zEw@}2lm8UbdZ3DmIs;74fWA7NAJWRENXcqImF#|2t&xsWitW}r1(MuMo$_j3Q$lxb zNa#I-@cj14*{AW{)pIrA^Cxu*jS!+EHau+!2gaoD3^!(<32l#{6-l9`IuSjdBdoIx zIc1L)*JU894-y!z^@7Q4K{b>|8Q7HiS-Jo!X+QxW%qQ}NRpg+Z84$D zQGbyq1PBN2r-6<=Q+x(W`w$=*0*uh>T*;;!_&*a5t|`on*6aksW16IO(kwry?cAk13{?et5rb>HibW zy0j$Bjy7XPi+4*s{^kZ)C4l-^?~01*5QauvoEKc(+ZoFZHDhQY(99d?5qx9P zI*H`HH_)dTLEk4=z1K#nny*FQdU)+btvg8 zy0p^O)g_FUWa?1&5sCaUU3-iX{WH*p@W0P{F5k}z&7o&?DonS6fB`PjnubZ*&m-ZS zlPfh~3>8I3jG%ta1pnfva7pXlUc(t1;)6kdRw*5PAQoS_Iv-|2YRJGwGP3}659{kaeM!ozx1`OP9qL&c&7^K#w@_-o9@ZI-mNSaLzqz=K|LEbI=SfE>rKeWOem23r z^1eTi^l_Mvz2e~+=T>hI+Vk*e(5$fJ2#WB$1f~$iJub&fok|c3xKYFA-jL)_3pm%9 zDq?{cKmsFDe3uqTb08G)VAD`PK|k*Z{Qcq(m0eC zmSG1b2Ard5SoaC3zUh2=@4Ni<4`7@?C|*15KCFH1W<0Rpw-!fbA6kU#Zdo@kTVLJ?xM=)1OgA`dK z?jT!1l8f~mpW-PinkCQU_3#^p^APie%VTspt>y5`EJ&V8E9#xcpqCU?)vh-1lXnAd)C0<| zLVQlN&G7kLe^0#7PWdQw$n1O9_hvap)wOc=CF!QoQMtk@@n6rPA;XW8T#%pm(3^12 z^0Ly>ENS=Nh0M>_&?5z!MVgH>V}c?lXJ_7iel#@X(~X{vz+UIhVSlBUy&W!#pZI1EO2Bu(#{)l zih9P#Oiv%$&A|{9nhnU?;kx(4T3T9AmVyDAW>XaU_ypw!JTkA1$Pnt$AVjkKN;78B z7B`8}>g!L22k`*P7Ok`Qg)6g-u(Wh5XsrPo0ww&M%_bw$XZkm8dSTe$iZ`2hTF5(YGMUwLpp*ql1Su;DM$#idcSQEsBE-M*zsL;@ z$KoKu+=B(qlFy4Sd$R`{e%?}THXo1s*mlRTiH6iGpKLBGc81aT2U3TJD=mfnp0q-z zS7m%)hZcq8z1*i8_*|3r+>-&fA6j}sYKL}@jWzCjH5~hcq|pj3xM5*3@^c*ghSJDO z?7lyLhIbP5!fVbqv4^rP0Ij?90j!Ps0FIBVo|`}6Viq{5FVp*ef!Dscfw(tuz*;-j%UsUc zIaUOv7zlR!I407YgxN@+Him}TOhH>~Na3ZKH61C(UNjPZ7nAuUmTO8Hvv+$Iw&{qp zMsJ&0^Pi0+zp*19rtjdfW~IWs`s`T01ygU4I2S=(_Y6B%l{qS>l;SX3Bp z2rqjM%Oe7G$eN4Gi@a*E*X7B<39xhvIG5A{F+;uFjv$b6Fr%mP;>ZD&UJx9m6V+$& z$k|I@98!%#Jxg;3uDvGe$G~M)S<<^lk1Qh+SurM)`52A8;2FcGX37AB?EU7f7hCIQ0VLd_l3Z#>9yHuyI^oSi~Po@ zI*1v~z`Ue^VL`(Uqm56v^?)cSC;)B6ZR`fE(;>-?PJ=Q?b~aFrbVs|> z8Os1wytAThXm(NzCyWHFe)hk~@l_|j$Mtt-O7Z0WAjRvM0b0USE~oC1f_(=%8n+KPWbYvD`gNFW>1mytW72H#slVeKs*bbDh z!dI7(QY4&o;q2a^*gZlbG%st5AgzDYcY0&b2SD{^U6ZyjI$g``@_1`3SKr8J1cbK& zi%osuXCD~)QdT8kBgYA;om+1i!S;MBndpL<~-NS1OE{^SdT|WM41lHRq1qU z>SW83NAt1(&?L+(Z6dk5r~Q@xJcG# zFBWxEP?`UIwW@|sZn8o&7?=4=!R+6E|GsQ;Va{KbTI#>1Cl-DMe!CcX+dtMbpo+_d z)KvA~6Dy#a`+J=^hMfFidH+?*J(SVe()1*yd&6D#(?J=oXqshKUd;z*GsA2 zfphP3uy0|p-9QeT3{%5|ia@^3%9Q|B|mE9WHU z1J~fgq2_*OWLiY}Zj9vUJNO3&+8bEEq?uuh)vl~b?91yD$GP-i#?#q`)rnD~l_-w1 zlf=A_PqeDtaxpf`1E_*F@7B+uq6Q@L?zL;*sJ`4J`7X~D)th*=z4Ut0L)^s$h{v^U zZ5;whVs^t?u(4TL;ZU%n0eU9|%G+NdJlrX-omQ&{QZ2oGTKmZMGWk|3E%=;vJArTw z7-1`*x}*-8MF@lvH(rPDwf=q+9N&+vh0XrIGXh83XC4#c^4WbjuRo_%Y1r*3s&sJz&fFgElUs?r z?&%-3n^V4cY5X*K?SA$XD5%j#m5!Sw?MWam@>n)~2CDX*%*MvyBCFXDyorh))^T~; z!S8_7jLacqjsu*rWZSM!w{M$aj~3(!W}r(h@r3I7@`~ye6%|XD3BWUtqY{>dHs}EX zWg-?X+2MBWPN7!y{vaik)1=>~y4u;Fh?RujX}7ZX#K8#%7`6xi*EGRcw8X(mPwPF$ zS&QT4?r2Kbl7hg|#D)(MlzXQx6*R=uO7u=0d#`%y+3x;u4u2kqK322H}SM8>_5$VTsDmFbg1gMJLm0? zUo(j?t%jTr3WtTk8$@L)JSGybh{EcJJMidY49 z*V2O}BqeJuek4O3r^}CnYO?e5P04!-mNC{Qt=lXpCTzL^KazN=PBQ78-2h=7Qw+!BH8lM{3v>fxHUzC`7z6qrs{XoGWLQ=UTMi<*n$ zeoP1_ZE($tG6+ICp*j(d+nkg__8!oqmf9k^cB7Aq`9U`v&>iViDlFoKTn@c-fyjyH z#b<4YPxw(l7w7NKn8`+dmrElDA(bb&~pc00&lAFFqAkc@C0TSZ`zP#_0@Zj9IlE=eat$aLa%BIy@tX7S{S5a2ZheDqc5;CbhoH=n`#o3xHn#FjE&+xMC zwSyCN^DQ`y2Xj>g6a>Cf=fNhg6U~$dVi6J%frmgFH8d2TnVCtW!lG5RyIm_JB%$tn zI#q3VPU-rGGszg(-dIdzNStOhKa1}KgCh_{ma|nht^A#7AalB4somTk&X6FLlx*=Q=Gq=7W;c4_pr$DwqINg_ zePl<+iCgJl{^q82K_7e1h{N3y>Jr;-{0ftqy0aW>-$$x}Yd~B(AVxl2X*GM*e$=?o z)s0^O@{KVC{fXsPG0Wjs+jXmm?Ew?7Nz{`2Si4Ts|&B~pI zQ;P#Gp}wEFpl1lWR8kTW_d4f%NiC<4=`0*FvHL4O2pDC#ue?DTq6&3gzC4}Pu?C6hrS%YIQPj<3{Mlgi{3z>tih=}vpaNcqAd_lSSII>t6Py46I-q+jMa5+>b z9lEm6T3gTWqQc^M+%>t_Hjgg<^hOZxe$ID%TGZya-LU(y;Kgoo+?!8fWoEK}*So0o z+W?=o*T!8#V405{2~)V5Z_Ws~1XS(AlP~R0Ccc*Esj3QS?i~)vfyJ^~KB~i&wh51j zSfWe5H~_Pud10Gs-OepkRL`|+P9x{}zYFWQt^a0rjDM|vmQZcSayB4Bbg}#OE9^FQ zUe*}58;F|-KBlY9GT>lx@>Q3}R|V7{XEUxlf$p0n6Ij6!(b0Z~yF#<4$ssZ$g#{$} zd;OH?hdOObtF&}9G^`i)^NVu)C1{WHB>TZR0>&tzS7%rAt*praanu_EXIRlnZp(bS zn9!>WV<9{~&@FmFA#!hZcHg^zGcv_H8tTmRBz7kmeQDR=D663{0qFgYbmact2?-va z>PMT0K=7-Am3*jP{i))|OQFVTaJYMBQXfpNcn(mF23=OEtK?1K&B|Au`LZA982SPK z2ap&bE@H+^hT0pz^3Wa0kDa^{D;cMv_H;JGXdo)1qM`sSE0=RqvtCPvo}QknmPxz9 z98~fHqmfQ^hIzq1hD+&fPy$C|`U7dd<7F}x&J}<(6a=bdA3?y5%_S<3MWoF8aEd;HwRz&*Q zV4Cv*i*}9oKfe*{b(6%)F^QBMDXPYO@#hh=#?E81!V4=oAvPAZ*G>s3G9NERbb4V` z_Vl4o7K7=epF(wXX41ui>yM_)P;rQQ7ZffdNKYCQUmJ83^6)5SH(XvE^o{ZxY$uH4 z)5!oRdj`1-5)WD4Pu8GNxIa=z4&v8BpP*E}(0`k#{VD;8*stb#JbGqE_dOpX5ajEN zjXKta2|a4oK3^W2&7_H-V0kcL@iJ%A&Sf>=))qhvQpU>NI5}`0l;1XM99Sm>NnOI> za0d8@6rLA*^qrk$tAED#bCCG7g{6Ihu8qeawX0*l{6FVz0K)6<&+u+s`cOP1B_qSk z$mow0b#OR<`D`>SP>nWdw7KT%yPH_$CIfnBhoADmysa&(oiY7jfl;7np89mx+(`U&yRHQkJ6)}E+@Hd-C=?MJFYXOQtXt~nT$Pr=>SsU##I zv(HbWc`xHTdfUK;$mCH<@&K8|RqJ*Dr$EBv2FG=dmu~Ls7+)f3Ma98o)eE%_mjqna}UQIaD>`V7FkYm(5;px z>kz64?l!IAlJl*sEOUS)%qA&G0I$aM7v$y{p3}v5x{5kIkcNW$c*?h3McrsIsY`T~ zBYcjlYY1FDIy9~B8DGsfHgZ|dH31JR^3xvbWap#xV$Cs^OB7dvQ_DSk+5oG;7qH%h z>S$oxA%cq@-+ibK#(7s6bcXFNey2)EXk9oI{grWH9cvhP!N z(%C9qGTHgqnETPp>SkHvP=!S;@LRcd?Tr)2Mig^Meewk3`H^9NR3J*Q6$in&Vhbm3 znl%94cR?71Bky*X8TaXw8Nu`nCo4`tOn4dvRwJ(K0-(DxN4Mm(=> zaGK{NWxZi%to<}(l!-pQai#C~C*Qi|SC=CoH4KPRO60RLGhVKxd&+%yT*$oue*_|& z&{WWq_1Q}|MKKae^j&}5R9uz=IGcN6UB!<|_nCQ6sJd1kIa zXbh*jhKh1af^AZK z)h~>vS*>UIuDM2+NXw~%%CDYXUv!lv(e-fc(Gkzenm%ww6grvnid(&CthTFl*dlQN zWfsp;zwqM{YO=`L!f7OjSqq=QNr*6O!`i|~!K5;!?Qp1=Ov0;N5t8Uym% z@C0o;5HFwM2F!haiXEum86NnVkz*xM2j0T(`KlK78C#tn`_-Kc`fF};nvMLy*yez2 zj`Y>Xw|8;C4oSMGT&*M{Ra8*eYg#+^!)tUK{3RhF(TOdj?KHcyEoE*xk-zSRC-{V= z#KEE&l#2!09<`venVpe!u`cI{oXYH;cAQqy(W$V}SLf!}%3I;_1o#Gc7`5kxuD~ON zMYF<9TUS?&=cuIpXd%greA6M|6>6Or2#e|XxyLWa{ZHWl#aky-S8n)#V4?~6U&_+bPil{o zT(f18JA5J_UJ!wD@B&r{|fai>r*XhCD*qT(WBiLYPl|L8qg_U|7`1b)8r2?2)y#9da( zOi@|uC-9-^k_>jaac%P{SW3Y3w^O|DE{u9AL*%X33+uNxAv!uBwC@9pZBWf;XJyff ztdQNlHujn!y$kSC7Sa|FW-4NDg=wtcdZ|=3^gk5`NhGTwF2)<<+0m{4&EFKMQ|8x4 z%Foxc@tpTN>45hhag-|xc{yt1c{Nhm8~4g)s*8ZJVoHdb8o1O_F0HJLXsH9H)EYIO zANvRJmIJjFWo0dI@zn#r4}d<1O{#-~3E{c4TB&(4zOcq^`ja zCYo7FM)()+Zk6@QN=ad3gO;27+!wT}vNCAN3ftP*(#euhVjjX$Wsls{Ls}Y$yZ^`V z40z-BH`B$s!oQB5S-*|E^OXDX`{K2d(HUUpl^hycf_Ox>n&f(gMcIHJiAO)cj)#Q+ z;z{-(xX{D9Wabb_TU%38Q}Dcg9nC!=F!{#Pa54x|pbx2c_w-1EMf5`^{EWjiO zlx$$S*YgT|0JEmmZr4yNyyPT}-V2xVj8lsNLm^{cA6q$pjMsJmiC{RT>t-nCx0=Gz zUIMcvV9&0{2bR-2DdhlsIkGzY@j<|-e6b(``a~eK|569R4@{kSL^c^3{N3m2m|?WG z+0_{M*u4VB7vMVIvX?S4A|il=)qdaVmcHw&uQy3*LfFBwnep72J`4yz0#jtBA{{}H zgSL~w{?xRz6i;PA;(^f8*9pvO^ddltYG`PvJF7d3IR83YR8mfnym|2?61}+hlxR>t$&9o=@yLP!LM9=J`#Kn&_F7@WM&*UxHIr7XLG&CF>9K(U|ajt-w zvBF!pIfMN-#C8BQ=rolw7)YAzxp!&-E^Db>>xbd%41dRO_v5ym`ywEGE0)96=+?ES zAX@9qr54ZSPDof-c;3qNOFV`yMBtX}+-C+HX6pp^5wvvd{z$ezA+4x^d3CFi{u|6K zsBm^}Jil~jRLvL9|MZ^=hXWV9GnQLHfN7wDj)};y*|dLr@SQfsF+B*>iJ8|00cGoL zx&p^n{k^n~ySO=0f+DxU()=dy1vD4_fBQy~v$?q`a6Dy}Tz@={R2_TbFm_ZHc(GhS zq;0>aGU`|KYahVn{1@3`yfCD4y?pn$jw=eai(10>l-+c&-tnR&JNT$pD5$H3OLs3D zE@;|4S*p=@lEGnn5@81U$!ipLWYHI4uU65sr*!qUx32Gm%gEnRP^4ad? z4@OqJSQ zbwR;dCsJW~Dg&OYb2C_u$gxk!QY_@0n_>Wl-UiV~?X=zRDq@U;P{(zv`~wy-NN|~j zCCWi!=aci=^(db%`Q%`qpnJ4XozJy50Tf?8GJX`cYj)vuezrDkAyi5;E@oF3x4+MX zu2DlHK7z;B!0_d!gHCpWEi!Za zv0M4$;ffrVe^cYI#R&k~UtRr7?@?9jZSn2FXtNwrNN|0EjS(>28hZm;7`mrnQY;06 z!V7=q`BxKMF__Wc&l+PvNDGgKf)8LabU>fT>)^757{y=w0L=TzFIVpd(MUx-0G9b_ ztfb9*b1_)8_UjsIYEILzQD2i%P%<|DAMIUdRFiAA4&VSILWHBVP(->2h)9hPq(tdN zno>mIAmtpI2m%5D9Xi2+pvb{cq$((&5Q>6G5s)4!hbAHjkzS=FxjW9xU31s{F*9q{ ztTjL82S394l6>FJe)s$A=h^Sx>z^n3`}!L551wqaC5_JMnQ<^pzt2skt>j_Mgvx(z z>!Vbj*FwT_Zy1D~D%Uy_nL`ibe^MiL02TDsfX^|^qWdv@x+mT*IF1i)Vk^VCxMt?Qz5CsecoD@%<}R{_5|<te_P>lB<+Ym+v1y85if_n2UKf@=1 zVL}Bkp=SItcfvdG`klbfWp~|)A&XILi=vwAdmsW*#(3VT6%)@7UoGyPb?Q$2lcjJ( zFcD4LN~UZ$cY?9?Gq8SNzRX0wxH|S~FmSGKV{-(b!arMPUpv+~fW(B=!x2G6DmAay z70b}O=zoCNS#XD6*OFhwiww74J)D2*hUjTvxWD<5XzOAH*0(>g%RPXE>6ytPLX&np z6O{FJ98@; zdBXo?h`zpB2A zcDG&ba#uwdW2l*SB;ywj42wlMn^}#Q>Z(FJJp!)SNyH?b(c645jPB`-A_qDy)}CdxlD6& zb8iqdGQ7AUy1l)?i?3AQNq{!~*GIg!$oKD;_;3bJfsh7sS`~IE#a}<2fH_TB5wJBo z)dk}&oHHuk;bjWcVMO&40N#2$ARZ&{0lq~gIOU=1M5L94JEY3G_a_ zoy~>oqy8+l*S|eZOXF=e_4I^(=gP$J&2-yKAsWnr#rHwFVGjzOtjq#nQ;ZrO?ld+s zI*N!~@P6PJR8m;zP+JN8bB`9Eoy?g`n4X^8l+}Pa;vfXPTEdT4>vf}jJAF1pUl8lr4e3%%W=Bn}pxR`1KAg?Za4E|oJXBwH$cKt zbPjnhP#_spDDnUbg6X8SQuJc=4XZ*FcTXJS7wJ(K2Fty}tDaU?7GIfCEUhgK?RUIB zCZO`d-CTE!-7yzWpOP|<*et-jzSa;q)p&a(A{Yp1Vg#l7(e1(mvzSk}@u4zGCQ}1W z)RSfQF7qw3Y_u1ClQ$>ES2CIg*gXz0)`7=w`R2rkfnj%RI%$}U%BY4OQc$im=%5@i zO4|6A2)viz$6OFO^k+y5m9Qs<&)9Yfox$OHXM4Ax*umX5@R!*mYU6$ZQ1s>@dW%&A zKi;zh>G!V{;gGz;Bav;~7ZHLd88(dbc{82Xr0X);TJC22(=ButdTVs-`iOk7lUTq3 z(TL_RZQa^i4j%_$E_0c@`Lhp?RMxUFG_m5)*_p0g(eL4{T*CDp-RPy7+}2B4Tw3cd z9;L*;S!uys3fY+Mz(=_4Yf5310}=XdFg%hgenzk0VAbGW8Fg`?TQrn5T3u05k#QDn zwPBGQD-ya~If9L8!R^w-pir%8s(`2}0r}h3*a#9#SL5VRL8n3IfPF^({wr}$OT)It z1ST+aHtrtMpMM>1)q3o#Fi1vKK$L@P_*QC{Sx`gDoU28&HQZ40jx`c$TOF~!5;4$; z{S!Mb*S>1;mbvEk))u{f*|qZwD3~VQ9UWSvsv0JO#Z|ynr-I^<=IJopb6c+)DdyTC z%%%P*5(>OxYH(D~a`dPkQY(0Kc)||QQ8zxqVEu53-K$loR^Sg@TGD*Ebf-|{%!P*- z`cKGg9apz~jFosb+eawiLs@(oN?>k|vF4y&%_^X{7d%_kQGI^Vd;e9=3J3 zDCzv9Q*^R{{{n2x3bEG@| zP1?nZE6K#=!EbnfOF$q%!iVjo7c}Z-s5*TgmdTEUIzlmK7vmq_C8Ly$#bO82QhZE) zQ^=B8xhj+9=AoP`SO`4(c&X<4LHuO+C_Hv((3Y=C`n04=WQtJkB=NOYHw>JTrL=V z=~=Oi_H$Glg-*jGo8M@ePR7`vKcQBj+r zp=@V`GIUab!yOlKxZUGIz3T$~eDasbbq0y>zdRTM;%^CjNN=mC)_N-@2}M^iHU$+E zs(IRVw550{X8(^Kna-cs0I2n6n+J;jbu%v+r;R&Qd$Qii$@%fK;O8A`>D=b5iPrzal?V zpvk95O!{pkId!K26BTg#&>KxJ z+u5b~>HYQHQ1Kuxt}H8C^z#(9;tC65UZRoU^l`!IJnY_Bl2}rtrj(yfrrfb(MhVBD z&R*_VyW00LR>X?{cD0DfO+_>sJ-R;z)d)z7nT;F^XN}$5-SdAGZAC};3b7${#M54S z9`Gfta8%&|$xhmwV5VGxPUkj2OX-KkRaQO0rzU|^@a4<>`DgR@2&i|_?d=_w_fk^s z9mXOeTk>=2!t@LcVVwba0<|WIi3uDW7^F~!4;R&vk9;_arI?KSR48k;M<%}nMO;4> z*Vb~+^ug0}TgzLeOzWdrmVcprc))kD4)YJ*HSxZtLX$n1rBlYB$< zn6=Y;p>pzL4>L0}@7{frO}ReNV%l#i3F)`h*0`{)SssAu^^Pk5)Q>*~-vd4_?tO?Xn)is1R}SkusBNbXI?;^%?Twh D<7H;I literal 0 HcmV?d00001 diff --git a/issue-assets/issue-8729-select-tables.png b/issue-assets/issue-8729-select-tables.png new file mode 100644 index 0000000000000000000000000000000000000000..1f81511b0c65e9a35d5feba7aa849e9a3306622f GIT binary patch literal 104797 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

hj=q|DDTbvje4|+7xitblJWqIQzW*^C#Y$+->98 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 (Gn%mqm_N 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 ZF*wxp4vE)p$D$jQmQWDSyZ89z{{n5!tPKDF literal 0 HcmV?d00001 diff --git a/src-tauri/src/commands/sql_file.rs b/src-tauri/src/commands/sql_file.rs index 07fe298e0a..76e94bdec7 100644 --- a/src-tauri/src/commands/sql_file.rs +++ b/src-tauri/src/commands/sql_file.rs @@ -30,6 +30,13 @@ struct SqlFileSummary { failed_statement_index: Option, } +#[tauri::command] +pub async fn inspect_sql_file_tables( + file_path: String, +) -> Result, String> { + dbx_core::sql_file_import::inspect_sql_file_tables(std::path::Path::new(&file_path)).await +} + #[tauri::command] pub async fn preview_sql_file(file_path: String) -> Result { let path = PathBuf::from(&file_path); diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index fc00fccb88..dbf59c791b 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1960,6 +1960,7 @@ pub fn run() { commands::data_compare::prepare_data_compare_missing_target, commands::data_compare::build_data_compare_sync_plan, commands::sql_file::preview_sql_file, + commands::sql_file::inspect_sql_file_tables, commands::sql_file::execute_sql_file, commands::sql_file::execute_sql_files, commands::sql_file::cancel_sql_file_execution,