From f331c3ace6e9bce81c842b3a4fb76421a0a36771 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Sun, 11 Feb 2024 19:27:47 +0200 Subject: [PATCH 01/30] Add back edit button from view. --- src/view/app/Query/Update/update.tsx | 13 ++++++++++++- src/view/app/Query/query.tsx | 5 ++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/view/app/Query/Update/update.tsx b/src/view/app/Query/Update/update.tsx index 1025d0ed..6730e93c 100644 --- a/src/view/app/Query/Update/update.tsx +++ b/src/view/app/Query/Update/update.tsx @@ -266,7 +266,18 @@ const UpdatePopup: React.FC = ({ > {ProcessAction[action]} - ) : null} + ) : ( + } + onClick={() => { + setOpen(false); + updateRecord(); + }} + > + UPDATE + + )} { diff --git a/src/view/app/Query/query.tsx b/src/view/app/Query/query.tsx index b28131da..2d5a6daf 100644 --- a/src/view/app/Query/query.tsx +++ b/src/view/app/Query/query.tsx @@ -510,7 +510,10 @@ function QueryForm({ const [action, setAction] = useState(); const [readRow, setReadRow] = useState([]); - const readRecord = (row: string[]) => { + const readRecord = (row) => { + const selectedRowsSet = new Set(); + selectedRowsSet.add(row.ROWID); + setSelectedRows(selectedRowsSet); setAction(ProcessAction.Read); setReadRow(row); setOpen(true); From 5ab35f69a6aa7f76df37a2a01f73326757f22715 Mon Sep 17 00:00:00 2001 From: Antanas Valencius Date: Mon, 12 Feb 2024 11:39:00 +0200 Subject: [PATCH 02/30] 513: updated functionality tu reuse existing query windows --- src/extension.ts | 50 ++-- src/treeview/TableNode.ts | 18 +- src/treeview/TablesListProvider.ts | 1 + src/view/app/Query/query.tsx | 3 + src/webview/QueryEditor.ts | 264 +++++++++++--------- src/webview/queryEditor/queryEditorCache.ts | 39 +++ 6 files changed, 231 insertions(+), 144 deletions(-) create mode 100644 src/webview/queryEditor/queryEditorCache.ts diff --git a/src/extension.ts b/src/extension.ts index 16814858..f113c923 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -16,6 +16,7 @@ import { readFile, parseOEFile } from './common/OpenEdgeJsonReaded'; import { VersionChecker } from './view/app/Welcome/VersionChecker'; import { WelcomePageProvider } from './webview/WelcomePageProvider'; import { AblHoverProvider } from './providers/AblHoverProvider'; +import { queryEditorCache } from './webview/queryEditor/queryEditorCache'; export function activate(context: vscode.ExtensionContext) { let extensionPort: number; @@ -252,6 +253,30 @@ export function activate(context: vscode.ExtensionContext) { groupListProvider.onDidChangeSelection(e, tablesListProvider) ); + /** + * Creates a new query editor or if already open, then reveals it from cache and refetch data + */ + const loadQueryEditor = (node: TableNode): void => { + const key = tablesListProvider.node?.getFullName(true) ?? ''; + + const cachedQueryEditor = queryEditorCache.getQueryEditor(key); + + if (cachedQueryEditor) { + cachedQueryEditor.panel?.reveal(); + cachedQueryEditor.refetchData(); + return; + } + + const newQueryEditor = new QueryEditor( + context, + node, + tablesListProvider, + fieldsProvider + ); + + queryEditorCache.setQueryEditor(key, newQueryEditor); + }; + context.subscriptions.push( vscode.commands.registerCommand( `${Constants.globalExtensionKey}.addEntry`, @@ -277,12 +302,7 @@ export function activate(context: vscode.ExtensionContext) { `${Constants.globalExtensionKey}.query`, (node: TableNode) => { tablesListProvider.selectDbConfig(node); - new QueryEditor( - context, - node, - tablesListProvider, - fieldsProvider - ); + loadQueryEditor(node); } ) ); @@ -295,12 +315,7 @@ export function activate(context: vscode.ExtensionContext) { return; } - return new QueryEditor( - context, - tablesListProvider.node, - tablesListProvider, - fieldsProvider - ); + loadQueryEditor(tablesListProvider.node); } ) ); @@ -407,14 +422,13 @@ export function activate(context: vscode.ExtensionContext) { vscode.commands.registerCommand( `${Constants.globalExtensionKey}.dblClickQuery`, (_) => { + if (tablesListProvider.node === undefined) { + return; + } + tablesListProvider.countClick(); if (tablesListProvider.tableClicked.count === 2) { - new QueryEditor( - context, - tablesListProvider.node as TableNode, - tablesListProvider, - fieldsProvider - ); + loadQueryEditor(tablesListProvider.node); } } ); diff --git a/src/treeview/TableNode.ts b/src/treeview/TableNode.ts index c0052660..f3bdef4d 100644 --- a/src/treeview/TableNode.ts +++ b/src/treeview/TableNode.ts @@ -3,6 +3,7 @@ import { TableDetails } from '../view/app/model'; import { INode } from './INode'; export class TableNode implements INode { + public dbId: string; public tableName: string; public tableType: string; public connectionName: string; @@ -10,12 +11,14 @@ export class TableNode implements INode { public cache: TableDetails | undefined; constructor( - private context: vscode.ExtensionContext, - tableName: string, - tableType: string, - connectionName: string, - connectionLabel: string + private context: vscode.ExtensionContext, + dbId: string, + tableName: string, + tableType: string, + connectionName: string, + connectionLabel: string ) { + this.dbId = dbId; this.tableName = tableName; this.tableType = tableType; this.connectionName = connectionName; @@ -35,7 +38,8 @@ export class TableNode implements INode { return []; } - public getFullName(): string { - return this.connectionLabel + '.' + this.tableName; + public getFullName(includeId = false): string { + const dbString = includeId ? `${this.dbId}_` : ''; + return `${dbString}${this.connectionLabel}.${this.tableName}`; } } diff --git a/src/treeview/TablesListProvider.ts b/src/treeview/TablesListProvider.ts index f76f1a96..ac972905 100644 --- a/src/treeview/TablesListProvider.ts +++ b/src/treeview/TablesListProvider.ts @@ -208,6 +208,7 @@ export class TablesListProvider implements vscode.TreeDataProvider { this.tableNodes?.push( new tableNode.TableNode( Constants.context, + config.id, table.name, table.tableType, connectionName, diff --git a/src/view/app/Query/query.tsx b/src/view/app/Query/query.tsx index b28131da..2dbae9bf 100644 --- a/src/view/app/Query/query.tsx +++ b/src/view/app/Query/query.tsx @@ -134,6 +134,9 @@ function QueryForm({ case 'columns': setSelectedColumns([...message.columns]); break; + case 'refetch': + prepareQuery(); + break; case 'submit': if (message.data.error) { // should be displayed in UpdatePopup window diff --git a/src/webview/QueryEditor.ts b/src/webview/QueryEditor.ts index a5e1ed34..6d0ae854 100644 --- a/src/webview/QueryEditor.ts +++ b/src/webview/QueryEditor.ts @@ -9,9 +9,10 @@ import { DumpFileFormatter } from './DumpFileFormatter'; import { Logger } from '../common/Logger'; import { ProcessorFactory } from '../repo/processor/ProcessorFactory'; import { Constants } from '../common/Constants'; +import { queryEditorCache } from './queryEditor/queryEditorCache'; export class QueryEditor { - private readonly panel: vscode.WebviewPanel | undefined; + public readonly panel: vscode.WebviewPanel | undefined; private readonly extensionPath: string; private disposables: vscode.Disposable[] = []; public tableName: string; @@ -23,10 +24,10 @@ export class QueryEditor { private logger = new Logger(this.configuration.get('logging.node')!); constructor( - private context: vscode.ExtensionContext, - private tableNode: TableNode, - private tableListProvider: TablesListProvider, - private fieldProvider: FieldsViewProvider + private context: vscode.ExtensionContext, + private tableNode: TableNode, + private tableListProvider: TablesListProvider, + private fieldProvider: FieldsViewProvider ) { this.extensionPath = context.asAbsolutePath(''); this.tableName = tableNode.tableName; @@ -44,7 +45,9 @@ export class QueryEditor { enableScripts: true, retainContextWhenHidden: true, localResourceRoots: [ - vscode.Uri.file(path.join(context.asAbsolutePath(''), 'out')), + vscode.Uri.file( + path.join(context.asAbsolutePath(''), 'out') + ), ], } ); @@ -79,121 +82,130 @@ export class QueryEditor { (command: ICommand) => { this.logger.log('command:', command); switch (command.action) { - case CommandAction.Query: - if (this.tableListProvider.config) { - ProcessorFactory.getProcessorInstance() - .getTableData( - this.tableListProvider.config, - this.tableNode.tableName, - command.params - ) - .then((oe) => { - if (this.panel) { - const obj = { - id: command.id, - command: 'data', - columns: tableNode.cache?.selectedColumns, - data: oe, - }; - this.logger.log('data:', obj); - this.panel?.webview.postMessage(obj); - } - }); - } - break; - case CommandAction.CRUD: - if (this.tableListProvider.config) { - ProcessorFactory.getProcessorInstance() - .getTableData( - this.tableListProvider.config, - this.tableNode.tableName, - command.params - ) - .then((oe) => { - if (this.panel) { - const obj = { - id: command.id, - command: 'crud', - data: oe, - }; - this.logger.log('data:', obj); - this.panel?.webview.postMessage(obj); - } - }); - } - break; - case CommandAction.Submit: - if (this.tableListProvider.config) { - ProcessorFactory.getProcessorInstance() - .submitTableData( - this.tableListProvider.config, - this.tableNode.tableName, - command.params - ) - .then((oe) => { - if (this.panel) { - const obj = { - id: command.id, - command: 'submit', - data: oe, - }; - this.logger.log('data:', obj); - if ( - obj.data.description !== null && - obj.data.description !== undefined - ) { - if (obj.data.description === '') { - vscode.window.showErrorMessage( - 'Database Error: Trigger canceled action' - ); + case CommandAction.Query: + if (this.tableListProvider.config) { + ProcessorFactory.getProcessorInstance() + .getTableData( + this.tableListProvider.config, + this.tableNode.tableName, + command.params + ) + .then((oe) => { + if (this.panel) { + const obj = { + id: command.id, + command: 'data', + columns: + tableNode.cache + ?.selectedColumns, + data: oe, + }; + this.logger.log('data:', obj); + this.panel?.webview.postMessage(obj); + } + }); + } + break; + case CommandAction.CRUD: + if (this.tableListProvider.config) { + ProcessorFactory.getProcessorInstance() + .getTableData( + this.tableListProvider.config, + this.tableNode.tableName, + command.params + ) + .then((oe) => { + if (this.panel) { + const obj = { + id: command.id, + command: 'crud', + data: oe, + }; + this.logger.log('data:', obj); + this.panel?.webview.postMessage(obj); + } + }); + } + break; + case CommandAction.Submit: + if (this.tableListProvider.config) { + ProcessorFactory.getProcessorInstance() + .submitTableData( + this.tableListProvider.config, + this.tableNode.tableName, + command.params + ) + .then((oe) => { + if (this.panel) { + const obj = { + id: command.id, + command: 'submit', + data: oe, + }; + this.logger.log('data:', obj); + if ( + obj.data.description !== null && + obj.data.description !== undefined + ) { + if (obj.data.description === '') { + vscode.window.showErrorMessage( + 'Database Error: Trigger canceled action' + ); + } else { + vscode.window.showErrorMessage( + 'Database Error: ' + + obj.data.description + ); + } } else { - vscode.window.showErrorMessage( - 'Database Error: ' + obj.data.description + vscode.window.showInformationMessage( + 'Action was successful' ); } - } else { - vscode.window.showInformationMessage( - 'Action was successful' - ); + this.panel?.webview.postMessage(obj); } - this.panel?.webview.postMessage(obj); - } - }); - } - break; - case CommandAction.Export: - if (this.tableListProvider.config) { - ProcessorFactory.getProcessorInstance() - .getTableData( - this.tableListProvider.config, - this.tableNode.tableName, - command.params - ) - .then((oe) => { - if (this.panel) { - let exportData = oe; - if (command.params?.exportType === 'dumpFile') { - const dumpFileFormatter = new DumpFileFormatter(); - dumpFileFormatter.formatDumpFile( - oe, - this.tableNode.tableName, - this.tableListProvider.config!.label - ); - exportData = dumpFileFormatter.getDumpFile(); + }); + } + break; + case CommandAction.Export: + if (this.tableListProvider.config) { + ProcessorFactory.getProcessorInstance() + .getTableData( + this.tableListProvider.config, + this.tableNode.tableName, + command.params + ) + .then((oe) => { + if (this.panel) { + let exportData = oe; + if ( + command.params?.exportType === + 'dumpFile' + ) { + const dumpFileFormatter = + new DumpFileFormatter(); + dumpFileFormatter.formatDumpFile( + oe, + this.tableNode.tableName, + this.tableListProvider.config! + .label + ); + exportData = + dumpFileFormatter.getDumpFile(); + } + const obj = { + id: command.id, + command: 'export', + tableName: this.tableNode.tableName, + data: exportData, + format: command.params!.exportType, + }; + this.logger.log('data:', obj); + this.panel?.webview.postMessage(obj); } - const obj = { - id: command.id, - command: 'export', - tableName: this.tableNode.tableName, - data: exportData, - format: command.params!.exportType, - }; - this.logger.log('data:', obj); - this.panel?.webview.postMessage(obj); - } - }); - } - break; + }); + } + break; } }, undefined, @@ -204,6 +216,9 @@ export class QueryEditor { this.panel.onDidDispose( () => { + queryEditorCache.removeQueryEditor( + this.tableNode?.getFullName(true) + ); // When the panel is closed, cancel any future updates to the webview content this.fieldsProvider.removeQueryEditor(this); }, @@ -212,6 +227,14 @@ export class QueryEditor { ); } + public refetchData = (): void => { + const obj = { + command: 'refetch', + }; + this.logger.log('refetch:', obj); + this.panel?.webview.postMessage(obj); + }; + public updateFields() { const obj = { command: 'columns', @@ -222,16 +245,19 @@ export class QueryEditor { } private getWebviewContent(tableData: IOETableData): string { - // Local path to main script run in the webview + // Local path to main script run in the webview const reactAppPathOnDisk = vscode.Uri.file( path.join( vscode.Uri.file( - this.context.asAbsolutePath(path.join('out/view/app', 'query.js')) + this.context.asAbsolutePath( + path.join('out/view/app', 'query.js') + ) ).fsPath ) ); - const reactAppUri = this.panel?.webview.asWebviewUri(reactAppPathOnDisk); + const reactAppUri = + this.panel?.webview.asWebviewUri(reactAppPathOnDisk); const cspSource = this.panel?.webview.cspSource; return ` diff --git a/src/webview/queryEditor/queryEditorCache.ts b/src/webview/queryEditor/queryEditorCache.ts new file mode 100644 index 00000000..145f2805 --- /dev/null +++ b/src/webview/queryEditor/queryEditorCache.ts @@ -0,0 +1,39 @@ +import { QueryEditor } from '../QueryEditor'; + +const cache = new Map(); + +/** + * Gets the QueryEditor instance associated with a given table name. + * @param tableName The name of the table for which to retrieve the QueryEditor. + * @returns The QueryEditor instance if found; undefined otherwise. + */ +export const getQueryEditor = (tableName: string): QueryEditor | undefined => { + return cache.get(tableName); +}; + +/** + * Sets or updates the QueryEditor instance associated with a given table name. + * If a QueryEditor for the table already exists, it will be replaced. + * @param tableName The name of the table for which to set the QueryEditor. + * @param queryEditor The QueryEditor instance to associate with the table name. + */ +export const setQueryEditor = ( + tableName: string, + queryEditor: QueryEditor +): void => { + cache.set(tableName, queryEditor); +}; + +/** + * Removes the QueryEditor instance associated with a given table name from the cache. + * @param tableName The name of the table for which to remove the QueryEditor. + */ +export const removeQueryEditor = (tableName: string): void => { + cache.delete(tableName); +}; + +export const queryEditorCache = { + getQueryEditor, + setQueryEditor, + removeQueryEditor, +}; From f3d0fadea2668e3665e23b822fc2071f7f1f2899 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Mon, 12 Feb 2024 11:59:53 +0200 Subject: [PATCH 03/30] half-way --- .../Components/Layout/Query/QueryDropdownMenu.tsx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/view/app/Components/Layout/Query/QueryDropdownMenu.tsx b/src/view/app/Components/Layout/Query/QueryDropdownMenu.tsx index a4cf7504..3efb5649 100644 --- a/src/view/app/Components/Layout/Query/QueryDropdownMenu.tsx +++ b/src/view/app/Components/Layout/Query/QueryDropdownMenu.tsx @@ -41,9 +41,22 @@ const QueryDropdownMenu: React.FC = ({ keepMounted open={Boolean(anchorEl)} onClose={() => setAnchorEl(null)} + sx={{ + '& .MuiPaper-root': { + backgroundColor: 'var(--vscode-input-background)', + size: 'small', + }, + }} > {Object.values(FormatType).map((format) => ( - handleFormat(format)}> + handleFormat(format)} + sx={{ + color: 'var(--vscode-input-foreground)', + fontSize: '0.8em', + }} + > {selectedOption === format && } From acf323e65a20951f9896a123dc078d7e2c13c7c8 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Mon, 12 Feb 2024 12:20:01 +0200 Subject: [PATCH 04/30] Guide --- resources/images/DbConnection.png | Bin 18001 -> 28897 bytes resources/images/createEditTab.png | Bin 25762 -> 19710 bytes resources/images/queryWindow.png | Bin 37884 -> 72405 bytes resources/markdown/manual.md | 69 ++++++++++++++++------------- 4 files changed, 38 insertions(+), 31 deletions(-) diff --git a/resources/images/DbConnection.png b/resources/images/DbConnection.png index b1386877c9cca683f989325ac8f671e7e3aa4a2b..17f6dd7e2e632ce1245b56e8ca91390a686476d1 100644 GIT binary patch literal 28897 zcmb5VWmFtd*CvVucXxM}5ZocS1$Pe?+@)#UHF)sg?(XjH?jg{)JGb+GcV@m>>&~oo zf7Iz!)m5j@In}lIexxE)l%!D*2@xS6AW&pwB)>sGKze|;S9n`$p|Arac-L-YNU*AC8ng=N> zh?=IQx(su+D!rOz_WaFi{5>WA+VB=#F!~-P{W-W5|Nq;r z8TygCV;3oOBbL6MPWM`^#As#v;_Ah%@^n=l_3v!{a>9Lz!&=l_boS5bnXFyw)SdMwF4^+(zVgv`g&tXI7^Vv} zAO!bGd0N6f@D1aR-aruN6H$dS7t%5%+vb`F>9|e};?39L)#HShf4IpLQt^{`}Eh-*YzKsz>~^ zf5xmUnKhh3-&%(b`Q@;Pwc)V14l3<*a-L8cU~>cC0$-AqlA%{|q8+7yo3dOwnGq6Lvz3@psKFoC3&GQDYoGQDip%2sHct-H9 z8uEIH|2!ZcFu1syc38r+BZQoggFeT>ueh;4$2wfVQEF9U3-KJ$qdWlrvLZ_-g0@OO z_>GD&5VNz?wk%$V&tK4iUd*eqlPtP`Fo{o!i!zek!-;{NUm59OVsy2nj^$&jzx z60M>NN&3mbP;suSVvjwflto!TqWDxG!iWkOgNZSz;*B3l{Vs z?=xLny`K(rjEoIdf1V1wA|&pGiZX8ydeM}nIk9w(ap-THW*-ycW4zo2mV^yv+BU_# zvx_Tjg-DbmPT19@-Qxs1nNjAv!Y?gzPwF*2WD^sx!y@aJvcyL%H6W$DzH5dmzZ*Zy z?BwL2d&CEkiIjFdD8H{<`Jf~e`7O7)%Sm5FwogR1x}g4u2$Z$uaBZ^)d@9bePuCQ_ zf$-#q9tU3uI2)LKGEaWmD))b2mjtiPaLu3)4&QbcqD1#f49U6&Z`0e~orxiPF?JB< zaYT6emPJ&7T6EB3Jv4>z85$SW176&;SdpJxiKwC-Vki+3@JW9&Wl!$KB`ht1CQ)tS zjz#=wM5jv`BX+819|=uV%1!87Xk*vcH+6M8k^QtOOT|x|Q0|_74Ll+gLa~?|A_jor z;_VCeA@Kr+e7nl5In^IdWZ}J6a$D|Qp+`oZTeZo%xygB!^&Q&n%D%8jchT`X???CK z!gd&w2(s?tEiy#sqhFIx$Oo*=Tb0C7=DvnLj;l3=3k(TM`@MuTnD2V4$7COYzNsqX z-F($D=>!&&cRk*_dY(-xkH{W$l=yj4dqXr04Xm$2bl{T&-JI^9(GhyhzG;vY39DI( z97wI|Q0C72o^KM-*ziOw@=v>ql_)BsAx|6Z-QxMYttbr$siArn=^!fQw3~g6o~QFu zrX5?H4;&_;SZd1-*khsN(t~Q{2z>)y#0#2zf1{jew0!WK z8(yX#7r0c5UEK8&2x>ad1Nw=#QF+PvYe_u}wv<>2NQHmZRR>l?9#{KSpV1KBXh=I5 zsYjRfE6vGd0i1F$-|m;KO{QJYzT^mHdYxCwlJY>$PgM^xg-n~4XW_E?Mns^`8H}ol z`wGPFcmE>1>Uw6@e04}#Db@+Atu00M2=hDIM#Feeb1ckPqR-3OE*AN|V!Hj#FW{9e zKoQ)MwO7RESczdW_`(w7xk%AL^~}ri>}b^&7_{5XErTQ4s3M2=2p(y}c6l}DGIAKnMBgK@XW>bOG@z?Jh?Q*p z$ZyYb5GF|YUoYS!u?4Y;Sz-39A=3!W5F*u2`r{d7)3F($tKdWz93Q*ObiN4_3BI+i z$g`@?8weBwAu9i~E!dnGz>IMH4m^qdckrNqk|cx*`LI5UeNp&#t2?RRU66hznI#Yv z>t7F<>eRwctjIlE{O8;(NN`K zExkx79-JOJd*C}}MOJ2>`-y6scA(`^?#{8-$UTCuooek@C_RDL|Kvgh9Fh|KPmzE? zS$T&nI6xCiS@9Rh3LHKpO_MDv2V1?YapS3DAVAm-JQd;Vmq~G*c!;YrT6-wOl+BP` z3k%*atQdurCo%nL7i{0!YVgL-8GF2sVZ>+hzmE^l&^$-FFzv;sVe^NDTUFi0w+@!b zj0_2ih#@ zgn~{ll%+K%`LP9CkcLk`8=YJY^*@*yDB>0YMb?#&6v0m$Q48|j`!s93> zwh+7gAu`+@enXM?TSh>IFO!rcCzHXOnoi`Lu1GJ6_|%Gm+jomYhpX!GIM;HsvgZlg zEIkt05XSPhonVE7=;k?>&_Zp2P?S&f@v+qS`(gdf!6)&!b2fAZM~=eIQ?U|Hp_Hd{ ztiOzvp-=vXIuB%J<;ykv8w!u($En3ivYQq}KyxtQ`?HVs7t4e(0@`G5xs-q;lcwPH z6jv!7NV$QlL-dUv`YWkw_=(Vyi=5Acqej1Y?Q&2;_!U_mww5W5%<6Ua| zSk9W8J*K+nImf(lVB0d*g5>)(BASl*pv&$+s*b7MJxnG!MkOJgG6+6;ekCgS@@)zT zj^NB|v(3~3S!=*~N0vgb*9yh0Yy76qMT#fK!6@mAbe5kTD|t6fPGJS0Pt!zW=WQxfLb%3l)@rVvJ$s|BYzNC9)cXC$l`>%!h^q@Q z&fg5H0m#ArVbp!USnm6-3a)(JyjBO;|z|^7H4ojBZ<8oy&qOlP#V7MY*zFRCYvFq(0B~FkXuEt|I-QCJ`{TonL6@O z>*8CToj&Jx2z9%)4+kNJ17__&sBV`ft??`J5?h@;;u0JiK&UYS#pbUEmAXpObfa#h zJWKxA0Ry9H$;mL9GRgH@K_@)P9m@mLv59+xb_)w8+tmrySv3lmq_oI}<@~SH;kERP zH;DF3*Eh`a22qVM!w+YUlb)~pWBjSH#!3m87YJ=sR~V;vqXy5a`5OIMVg8-{|rwLTu|AdgNeRt#Kc`YFT zgqM_N_?NBh+e9})T5b}2UR)0h_%V$*X?@=e)jR4*<3u_TFG7w>|0S<*Bn* zg5qDE3P<|y?QsfpnO=A6*t;Y=ML}n@w~5UI&O;K8);dElIP4eN42|n<9H&qOqvOr_ zjSErW;8_|)x^OD>??BFK>Z(D<5^n@m7SgQLRpKgY+DOhggC{c*(c>I9816LhcvPw8 zcl#qh}9S787L)tEQ``igp3J2XJ; z)K{y_*V=ta zAkC@j%8D~_+~;9qaE+jZYTkMzHM}p(vZJUyd;5trXl8~| z3Eo8Syc93C&-k=guR56FR9pkW@ck10*+M@!>Uq_g&cB74sqLHNf8`4{%1C!nlnCdf zB+EgTMvU1z*o_i#_pZjSwy%Ee4G~ubW^1_9fKu=LgPICVO%rAd*2Ea z+y{P~&UoRlNOP23A#H3ftc21J?|_ClwJ57X3@&(fIO@q3;g)B-=?)5JLR-*=!WXoS zjXpJz)+Y9uKXfCl`xH2b8JJnLt421_c)wx8QzE2|5r-N|^rE&wP4oQ0o$>a0$#4qGBdeY?r!vT%m!Mts?xl$hUauE?(HO} zS2n0}+F**P1=s|HunVF&#gy?`&6HxaJj$nH)=1H@6_8))T60c<3b;)YKI1zDUN0C z?}_%$-E=>4*1nsR4wF?oh3?$+qNcEfJ8T3`=(UgSdPm$KG-?$xJLI&@-3T5TWN3U3 zLux=c>L_?Xr{T(8=w^voS1aiVy$mjAYu*V#9){a^YrI_I&IY-0oC~2Y6!lp&QdE>CR$CGBu}+r;aqFW|hDeq0x{4|;gqprQA8hA{&A z@*dH2!c_bJ_#qs7=3VXMWSAq|)W`~TBmlSv(DYq+d<%0mbTx{ue|Xyrx5EnIiosza z39?RH`;aa;Q(J0tvOQPNDlEML^4NqcYb+hkO9Q461^8uM<7*)Hbm)Ouw5FjeRX5+t&SU95Pm2h=qfx@mKL zzdRBQcXbh1gG)vZa#@EbI3$=FnYSCoBI=(uaqETE1x=(46sg zWAg{hmMoTGj5$<5+{@ssPFbu(T!JgqE{jOKH_ml&wD>7rd+qV6<(2!)<6;>WJ`al8 z6j^krvSDwcZPV{8F8bEjp3$#pjv;9V6hYR12C47%u|SNDTVG!ruILBf%yTVG!mBr* zcxtu;n_#u#Ox4vawQpueqJ%#^@adDD`B*FJfH;QS3f4|^>iT9iy{_5WMx^`|w)HKV z9W2N367*K4F4}BBho>!-#0P-hMXBp;CGRnAw**8EMB< z!jq;VjaqRtMN!b}VHkCp*2D{>H-V#YEYe)k+`hX0hhT|E7lxG=8_G4 zAS>)LYvz)N4~xgqe6W$u^t?12vxhQCWUOE%?}@eBv^Yr={Lx!<#iWVOIf7Aopsd^q zQB!xI<(G5F*bC`ZB&N$3=~S~rm+D+|vxv^h{*z%csom>E5=?h6q2y&0kyi`TnXx>! z@H=mAjZSjOzxZN3ZBO$ORWlO3*`cNm0jQQiTUNcyLu#QjhMRyoCU8{b;i|GK;MHS! zIe$TXmPO#6t>EUmr3~0?s_|%o`mKO^=uuAbMJD=O zczZ@HBdB}SY|v)G5@Tm1*r4X*j-16Avs>G^ z2DOc^XE^RA88)d7fbSi0z849xXr9(~t;4Z>Nyl0gIPF(siPKF!y*06>%nvTho94w0 zIlU1PyxMAJK+53wt$w&=A(9^F3odNF<*1sAVZG@rPZKaNKF8-dXn^oi$fG2#Db6yM ztrszg5j+Bty;T;7toLgrvD|DXc~evF!$bg|8?v(Zui~TK-JAE{q?yhg80;hEs=?^D z1V*}$z42hO3P%T@_Vao?N%L1Ke|#6fqX@qJAt?N?!d2b3SPb+(;yIgzQ^GYkb|Lc~ zH|z}An?IDOeW)J2rxW+)Pc@#}6Nt~U0%8k)(51ZZJgocxo?@GFIe|JwdKOCoPQDkm z+TPn_s%u4hJfiEF3nlJb^P^{{pYU^hJjc;8McceZ8$Sq8@cBCtBT|9(#SMQ}-n$+f ztmtjzU{@J}Z`F(TQh^f#aN8_BWBxe;ka{b_cK|GTvR8b(k4Ic{G9XHbh#%s`sty!Z z8Ov@H7ar0(`zOov=0g(V?HgsccV=@m6xSLkVCTM;=hpjQ8r=Oq?}%J%_*OvFxasXT zs&j*D-T3qnXBMo^ao5M3mob6M{97;;G=}n+i#5dOQ`tfU8}mloUv#n9^Xt#cnP@uUhBAzG0jx3E{cLa? z5R#!IKYMQ7tTK8Ok%D2!M{r}tH%S>y3;gtOuvekI?UVi5SenLXAvhKD0W;0^j`P0O z>(=U%)qA$Z287G|>x z3*n7yUEx^*BDHb1s8ubm&Y2v(yxHE*)&hs-vne~0l%{?#nC^-0zR>U8In{l`np5Pi zp(C)<9>*Koy8@n!Jsw{&Z=OAPd*SP;B0GsiIzDibUuuYlyT8C+G>#EPof3%jRv_K) zN05Es5(yah!et{Ki^IlN4UY8L$-GQ&diQ+huR=H$S&xV|Iu-5C8&h>YBPd=;Vq*i_;@w1YKN@aWE_8jHE-%PFf2o$&+w_d818UM7uG2wD` z?sKvGAfI~2Z*q|xu8m`?TMiVEkud?Hpb5>S)OdVxHi+9t=zKCVDlyAL-)#aCK{luQ z8vRA=ec~$G*_h_p$+Pfr+)%nXgqPELMP&nKM}RC{W5tfWoi4D}D|mpgewDcS?~fFr zn;m!&V~!tlffV@H8Q23$jh#C`#RjII`%2F6)H8E%{l=OdB(3&!Rt@1MeuamR44R6{{Wk z)-O8BH~D@xS5=`}W^xcWHa2vU-#EJjAAtBo5rvl9IE1MtH(POp_JS;I6TAU_9#h+=29Ljh-Vg28Eu@%m$CB+dERF6?yfkKH z`L!UlrFAli+IKA9FDzI`<(p^~N#RbNhxYNSY=`w-(QD1hi#adE(BBmyz9oB>8hqyA z$!{%1U>T0x4PB&i8ZDyEVxt#8+m(4GSB}>s6ZRSfHT&&1uRO{!PjzWCpO&`VLs_6y zySlQ$6{+mDy>at$~qopMeA zk=4>og+TZhx_0;DTM?lrYD_qqlN)`mE26f_pYKP>%4Rd<7tB${!;&lAUItYspSNa* z3pR~}Uzn!>f14U;PHE2yW>!<$=aZ>2y!ud6w%-17@3H#Uc8UnUU!|{H?Kt}Cc+WEK z)I3XzSC9(%;t!({i_X*K=bM3sA0+b8RSD@L)}G9Nvt} zx0Dr#gMpphi~CV{Q7u(fhEZMQUOb)eZCfJx9{BAdZ|X-l^1709IggKOZlq>9@>@b0 z8u(SgdX7s+f~gG>%$GiX>{<>4$H%-Hi!{9Br{7FTv9R*v9xk?(^`3uz2+S9oUG7Ly z)8!Q1bQbaB?e+u&JwALHpJ#?*wKzPMawLt4i(6LaE4*#ANcr_RXa$)PYT$D&CiXQ!v z?g$&I0bClwp1b_3u_t`_&9>4jeb{d|#{wR@#O24G9DS^&dajt=>|u_vKXs@$LgjmZ z)W{1`We`S?SuHT9b|{g3!mJP})p%uxiWmEQB--@m=f&}jO+qu^O*eP3`CfUuaYLl* zG5cn2enD-tS7>P-oMgOt_cSreSAW<|+G8|FYJW^|lKI`{;l7E6`$v`k?dk1N4JINa z6jWxf!+AgVXoLRgp7z=4#TCz#ZX?jC7Qe)wdrsxJ!wDYOxp1t zr@6%PR>gd0iD{}YFOo;#^e2XQNK4L7U;XKn(Z|+hBoB3i)(J;EpPBFu?W?djVzJIT zY$9FV8RGNJE05Vsr&i0Mh{uU)zW&Ert=%AHQ>XXO($ef_M7(5V`!Sk*YhMiUCTSjb z8|rH&kI%2jq4Rp4uqH)I&IsqA3lmbJqJRC8SYt8UK-*hF_lRl{q0Cd#c_=N;Id|%p z>6B3W)-cEt?#Arr+Uvz?9hQW&jN<(FMnZ0bNQjj%NRVL!Yw*)iRM&+!(z6j)K`<$s?zYzSys=cUg3L2B+tKm{Q`y}S4&6z0W0&^jB zFJy=Dmu!vh3Yn|iUtz|M3BqF+| zos8`$T1Pq@r)TODleH(N{4??5g5)_LZJ6mYrIRR4)DAPSu@NP(uIN!k3oM$q@ zD`0Qxg%#3Mj5ZryAp?jv>CSfA`|1Eqcs3Vj?@QZ5dkg-@z%|_3jcXqB--|ayu5QBD zu1}P=*U+fo(*CZ2q2Ya>#5bw<0 z`)-Ys^1RqkC9W*FIPcIC`?;}UXJP2;Etx^s^px>n{5g=)NqwmQ#$9;B8q!}=x#a{AL?^yYb{f4cI9QnTB5 zK}E}&lC_9L80uiQ5FO8NY_Oh*T=uELtJLymeEPMJ0Df6qXVs! zry-k}$y&>PEviA!B1Q%*(XN8Ou6~se{9=?7+{vbA3xwG_Z4Kja-}Ea`KqlqQKo@Tl z=$v9v>lT9jX!AfH`-3J9u-I{%e=h#K+wp=%(O%+HAq!Rj&S-L5q>Bxs8JeetGWlHC zk9_K##(C=FH2!)Hl!TZm2o41Fj2Y z&K~&O9kv5VUQRgJS>Wc24vnqQ8g3F<9eV!Kq3vvZ$^k*nr-4zRkS9FeYZEN=w~QKq zm!M%gErA9Q?Y!(5VIng#{I0ciB-zf1;TvtWc&{f&dn!<4M55M>xfx$0|Hw;HaL&0% zZKRBKF`=Sw_w{CaIE6*;vIiP1_xJBUB^sfakC*O`ehD-o?AdL0ZMfwGep%z!gElhO zHcBJ}@Z&!hS$uhlG`;_1skswJBk|j?o)M0ZDqxQLj}=B_^8yvsIKOSdVND){TJqoNM#>2c z@iqcKhm!9*Z92;oZtL})w}+eVzt|Dg{^*AUKWLf`4rwNE3nW*0OWd9Eg(cjR7!h&3 zLpZJ*^t3vZC>evnfUL6gLO6!!pJ(USvq&_z<%er6wbKp1@OE=w6x>a)!Aw9F-6@BM z9~H+o>5@eYfpX=+{I~CwI`)s6xH#sA6qlv^oA1zixF#p!?V8;;f3Iah2?E1ZqmW?V zk8Qn53RBz27S`KFn%@czhIt!sd%QGx^NDYg z`_)>5ZXPLGBPq|E4m#2cQBF6U7{?bzG(u%7{y|OmlV?8 z#R;}24EAM5bj+T>HEvMEjz_6RDja};L@pF4rUowepq}w=g+nkHO&DxyJfg6Wucc|) z56jnhptfuF=#~x>5gmercS82QQfnq8 ztUc=U`sf5WjbiJX0TYvf2O@V1YK^?S3DbOhd~Ku*R8Mtvb%IZscb&I$^3Q3R@-VUk zdUF=*?H+7ZZ6{@#76Sm|V7UQ{m-{n*!0}w+nrOn!!QtU?lU$qrjj?n?=|2$R&~f#( zT;}4>1=E0j08)0m~r}1oeIXT&r&1h=?sDo{sfggjv%tzg$p@go_D;#>hsVd9c6lO zR6Q>tPh<->tv~+(H4W}$twyZ08IyN0Q?w^3$r*EFROFBK@l{o%(^`memy@0R7l^^r z8f2;c`X=*czyw)R;x1>3N3lFW^K2=-@cO`;H)@gLH=E3smZ6u_Mbuq~%aKx+ z)_okQosgYIh5D!&jO4Z7^Kmh${H9LMjs6^JEh-+fb}kPFVX3@h3I@l;dNbP;-x0B$ zQ&b_tljY>E!%_+MC#hWF#~ws(ivIyu5?w|UCk7(0+yFe=zV+{!Nl68trW!!&+wVBsV&{1cqdJy)57X$UezL-&4r@59aA>3pBqgrQ zMG}ck2!9L_oei9~6-iyt%oDo{pEB;g>yBQ&^JEVfZT8G?@a#-oO!j696z`Z?44l(@ z;bvsX7d*7XFCRvWcCS@xH~&Tt3F#glS3s7eYCM5ja-@Tvp8S6pEuKWHC|qlVHg<`>Pq zz?3Zr~UJG`#(E}X5mKBmyR>0uja z6s1fq>1k?e+Q3ACPB}KTmprN6I)|D_YoBvZPDzYhx~}~|Ib#~r947i8Up3p}2TqN6 zOs~(N>fw!67eKbB%wt1SZF0!_eSO^CEZugX=khlPuKfNrmNO1@e&-F+TAuYwbG^(i)%{GSn5T9(Pgj;K0{7VgtiI=x4m zkKl+XeZ0`Bpx#Oqg^&uNb?cOLu;>Qt5N6`AjaLUQ(2+Wv`&UZJA1}dFZ)K4;S34&p zQ;&#^l0g7;YiDV+mN7H(VQF|s!{*_XnB3%kAFt>tv z%{R=ZtkrZX;0)z)S*51tZ))5t5A&0H4aeoCMNK6S`N^(sBHbA5;d_x=M&q>fG0&tb zRBK5G{{f>unqx{vQ<5lUqgcLanv8mqz$C8UMB!lOOo*I8vwCJ`CYMFoi7Nb#;dn|+ zjbeqvX?BE}-bKL?l@zxB00-C<-q2k#<`!j@0m4-MVoz|?Q*7P75vKAmz4PILMV$j| zYlS@)mAX9ygxRe(9h)f)$a$cikEsP@&LclRZ)0I*qJvtSIV5QB7!Q;QLWUkR%lCaM z8oH?1uLKeumHPEOPev!h58jlX#9jaVNT**MFWA(N>yv8Gx~f z5VuIIP8cbaX@&2Ap#h$PoF2D<5x328m*4B-6C=VCU7DmldLG-?LG~O$t&~M{kyS0g z%`1mFwc|(c^L8Gy8#)vj-VfM`7AH(vfD591dR}lRkY(&0BfZAs6H81_tjJ*AXCV81 z$KShvrV=KgpNkhY z+@gY=t^@N|=P}WZ&(xpTzJ#AC$t+W(w6)-yV=YVR=%l-gxLOVXsLpW6+S5bkRoi|m znPRl+4bk3rFtj*tXkEH%K))|?V#ZuaxOppVl4jN&86ZD;3O%1U7kPz9Shib0QP`*d z0)}1|gT1C`gDn<)SPwjA@mI+%j!QEzIjI?@d&&~WrK!f_wHWSl#-<{=QNfeljUpj` zB*XuibCYWT=WpMtzjk@49xFI?do}}+TRId?@M1F)qkdI?to_HFRBo-e5k^hb)`kqq zeiTAPI<%m%ZNI1#URm;O%PO}cRGR*JRwz;@M_hk?AU6IjPGE1n)|u$>CHo4Zia_g>FRb53}`*=B8oNH-mv!)d?)wUwakhrk0DmGjb z6L|+T?oTJ}K5omKCgAVgE#z7#qyHbUmtvq7x_CIzCDwxrJ7YfCvl#B9V?6TsYp#f_*5u!EVDY5>*s^~?sh?*G)Wfx zJl6A0r6YCyU%0NF`L`$-*YzuJ*w#KJb1vK~4r(+{_MmKM1~bfGCjc!Nf1`DVv3xW+ zk7g7n%q7&3n5;B+&Df`A#`rj`J?5`8=ZSpTjt`D3ymF6SLT(c^{hVcPem9D4JLoe5 z$wTcJ-WU?OZnIbQj~#{4fsoUDZGYJEkzjo|(L8YT#^Np!pa4dZy{FCe%`1M91z@H^4F37#POPDm8YXkBXpif~x1lM0(kv@nx>5Pio*6S`HA1TDjWY6@6O6M;wP zvbIiI#H(Ed)4x(v{2qJ+@5BjE`BNlP8%@n+1A2TzT|QpSVCEng=Cj?t^9TK3L0pJP z75ScJ#ag4gBz0ENeHN|*z3mE}WKPrX)ZCt`W~=|NJL#bDt7azQ1%sT54^l8W6kTnN zVW+%wtnq1rOXLakqVn@TC?br+!XAK;Dh^cUZbf$;GdGEr&7l zyj#?ABR^HaI4jgIfqyF!KH}&l$nAsii*Mo^2g@zI)yjb~BWoZ`sS%h|N7&8yrcfUR z$EHa#zG|+vZtH58`S@bS2m;1!FY9vjzkcB$$?Hfl@)Y-6Q0k$3)`J?9hfI9*#DqfD z^oL)X53_BJym_%G7(%6U8E6hB@z!BxN}LDW;2-0Y7)={cn38M+K2Un~Vcb`l>+P0$ z-mJ^=UKTap>g1U9R3M0!VY**c@PO499e|f!EJ;5~x%A#oMLWrlE40d^g1QwVE>HvHuQ`rlP`A!fW6oF-#E> zXvOL62{Du-`pou%B2{EQQ}5R&cVN~j#md5SW88z+>d*zeR#VT^L#4!tE)g{mo?tbF z*0dW)fFXt@tSl+Fq?dYID4%LWB{@Zf@mN^-lXdwt`hnmy4gMvDXDb|BW2=!Ry340^ zs&v_6Z5mz6XBBn6y*vyjP)Q4Ns7P$0Nz{N+Z^pO#lTy1^PZrDXw$dYggS3Vti9c1HA@$Mr7&<^|%=fvWt@+J0IM{MFGmL_MRNY&c)O3f3u%#G#_ zv|E_O-MQV?O)sZTC4U&OqZ{EachAX2WH1K0sq2XRlVcL=s(vlTc|No4&(JMImCH30 z%NhSTBXw%ggi=vGOB!H2y++W`3N%<8!oh?cKhh1TJ?wagu3W3+l0O{1(|sp$AGLV? znO#Dq>=oXik1s>d6VbpHPR>tt7o`%uXl0V< zAwNrcvAULdInZ}@kbEpOD7g7s(}J`ojR&dh?GF1bJFSFgHMIfj%nVKHnl~c8EVzS_ z5bu4J2!H*@-AS0EI$)P@0oS04G>?V@Th8jvI6vGsoPdQu)~V!qLVKS9|GaiCgcw=5 zOj=Q3Pc)S|vuwItYU}>aHed=a<&W+;nUU{wI+sGkw>wtQF~yv-P^Kuxiv&f$uNVuP z|AHDCLPLFxnooy^S41^#ioi0zJ|1qA+6 zQA%&-m{f{3KTFYV)j*Zvewa2cY6-C74}L^z#8O- zA862h;F5wCtUr9ZS`Ymv!Pf8fYS>Mh{+y+^B@U+5u$As-oU0HCp~@NJfcM`C$i-c? zxW5)~&!}}pFKG~~YS*ZHloqve1?pZ#@`6{KFf>=`=HCux=L5*t1U~86qnQSb?EIcE zpIyjb;4}WE9y?d?!yH5hxZntya3AHePh0zT0Z~Y*l3W@QE2e<4Q+#yXW**<N#ZO!$0k`vRR1yKeC@J8?Q+hU zV-YLHJ%T9?iUt4QR|Z5p@dWxQ{Fy-o;x#Y3IXp9W^1_y0AGS$848qso_;Au4LjE9q z4&v#$LYeMF_`JgWh*pC5=Xl_QDZD%UqCHyDyafi1H+*?J3a zsQep36;UvF*7nxcpi*E^rnIFeP;!}qxj5a{ zdUORTS3=c4hX=R8|KBo#blM#3< zP}DLa2E8+(Iw8SPG)*Bg6Qff44V4+#N=wdJ+iY83h1P`vDhyfDtKvT;!lNjIAu&qHQsrcdH1(twdcQ=UWS2==6MrXBmJlAFxEbjhpriK z(9sQFD+DZS5OnfXmZ0#cO@G3K#9LS^=7x&~2vVnoGIKGBkr@K+G)P4C0u9o3aNcG3 zuttp>VXy!B4`_LzHPaxl=Dt`GeC&`-fsn8(`b4y)TZUmQ*IyHEDxU3>Zk2);h z!6SID2tG;l*%AD@Mtd64|D45vJAZw{VW&`rYCfyBs_DtN_3Dm^+F>o#b?kzi#tkW> z(Z`y7_vg>|&*f}}wnnj)Jrc)TBU<}m>((sY%SwsW7h{R zOLVoWhhQo?Sn(efo!B!;tDadO9iEHOPDe=tYLIV}yvBo;nxaa0|9?v{Cc@LS2!0xj zxP!C?y}p}}YlEno@y__yZ^hOQU;~j8n1Ck9(SUaoLGGLQ@@4z_wH$9&(TjK=^VNrycck7(Vvk?RH*SD5b4l_#drjs`$%o zg$6ro0c?B;Pm6N%0@KI;PkUz-7e~8&>5$+M2p$M-4Z#8gr-9%uf#B{M+$}((jXS~J z-95MlcMlQ>?k-b&-;p{0nTwhGbJ2a#7hPR%{km%Hz1MnPQ>X^L)&Rf7480tY?*NnX zHUf!i$GXUm+!8gNWmoADDmfM`knDNME2i|A=;#{K?@mbtvc6|+5~+4xl`dOti5D}A zO(X%jvrJc_hf%bv#FQCK;UoEv& z0v z2yL?K1Y!Uz1b1&$?f1jg>a0EvB8F73*!#m+fgqY>(A)XYTDpS|W?J|bAIC1B4U%F6 zNb9#zZaEZD^Pf+<1)9<-sBXnYkd$#te@H!*^{kzhb%iEPM#kug$sYdhZ*fdwuzy@9 z;1PNFHWdeL1pzu#yX3lSm$|O34DB@ogDKk8;dQg=1jxlWB`BSnsr9ANf{Y@hYLL@# zn}^%?p4Tv&kg60?Yt_Q|oe+D|Bx~t!tBb&;;hCjgbHKTPSq{*KtUT;yFreqK#S3Z{ zxo?Uh72FKnWV+z)S_)>fOhbOw-r|k&U*CY9JNIP-8(GXjTeOUrwi1Z?r6KMjh>pXE z1zfmjvU?f}WV57R<{+!TixZELQ=iDaM6kQl81IBcf9<=W<$uUEyA%gBE3^XYh-4qL z?b-FXPLs-MS*Ywtr{nCFE@a{|U^)3@A861#+1}|QV4!5OA}9sQfwK~bc6bWZyxC!@ z@;8aPMF#cb#0xQ%8A-{M_kXeF8L`B!pi*__bVBoZi!IOI=O2`O?l<#i!Ts+%h8T|^b*K}H zv?C86Vdq?=_oOuvZA1vn#MiREq#MVeaI2Fb_sc53#0+|c z0?X42%tpZU=z~}J+>ynA8$h#WN8w6>-Bp!kk3vqY?h1_+Ao?WsC;Y0Rehf+PGF-Q> zH_qie*pa6AFdyPYaN3^gclf)|%na7)o)#_l#;G?Ho3t# z`~nVn5|bRr0g!*{W{ZSw3X>fcjyM4v32{wc?8_K2gzn|Mx|dYmYT(EJ-(rj+MqyMZ{Hb>S|%M*5-YmD*!YUa=}^cZq^kSN z0@pgH+}n`N7g!RQEOsBPexpj?+r2cePgpC=ilZqE+W)eJC8Fs@!AM`y;g3E`%3k_V z1_I>eh;VLB%A(z$pY?0&*ALgG*8C~<@bZ_#$gzoEvOn8>*yyESi-{OJ&b5!!yuwYp zJu@Dfp5VYqcSweY zbO+{ynmpp zRgUvN7L`oQaZ_7}jahW9Vw(=Ej&!v|^En@Cj@p&C`q#yGfRp+$5skkLj0orBIq#W^GILnLw1{c$ZT9y3A1a!g3S!!>mXWBG$|M0JxZTu~&u7(<3L3904)}(u zuBMK7>mMlPNg44ROX6~wEXEiAEHG?@{-!*rj2Qa8H)xwSIkN5i6B2po1I{1_o1)7% z7*xUhCZut4ucLF)=7G)gQbmg&DH|RJNOwW9HUN2FVkBBQnO<#H4l>01E z7t5D-ormI1Y7Ftlt3T$O_qW%e&m*wqHt;^j<)f~{?WNQL{@(Z|cincax4Xp{L_`Nj z+GMkvsODrtE6CJ|;thR*a62C?a-l<0!g?$RI0@n<-Mq@Pii(Qaiv;^#oU@VWP7l7- z_u)i5k%@_KkB_LtwX54&rmTG(5qu z+DRkb#6U7hE!UYdFd6BcjCl!B-=EWl&Q*ifdyB<(baBC9R{r_xKdnK(ek9MZ7<-1p zR8zkwl$`6SURhcSHKuy|ANH7!7c>`;f|xgM6{XfZl&P#9%cuIWP7-)<&4uwYV&Lu9hJBq+%w60UPGFJ)o-)I=w! z2-6W`F;pATXemAw^Y?isqmx|Lzf^ zQEPlT+I~!#_AvYDBeB)a=b=`*!bMy^XJe55p0CgKsau@9QI8Cc`{T~9F3z&H3Yl~d zUt=Rz=_ez?+nTeU=@9enm`^xPH;4sPQ|dIY^m|mM`zEn4Oc1gd-xmvLM&FKytbsUp z&(W1y_3(;PY&BoK;o#QLSSS_Tf)iP=JVH*zCe$E*fF8f2Tfv806+YtNH^-XSDcNpn z;vOaV)w}DcKL`mavfjlSZVW&tDKjXNP2n7`Zfo+u&BTz#pGPY`3U);h9vu13CY68z z)fl0`Jse5p0n1?@wcRnI5pm~S<%X(G`h-hpeOBI$mZ8@kVCn=}lu0cBzO_BzqL`E^ z?#4JJC05vZnOSgN2}Pd4Ha%kO(kd_D45%NSDv<@TeFYLJwkz+9XP(+1Ig&tc?z;zUgVMNu}lOG z-n7L;Tm1g)<8Sq;{0SIYOvR@0%KmBN7nMd1xKsTTzomsmzEX|Yh?+4nJSZTNWCezb zq^J2OkzdCdt#Ibb>a>u)sv!3E(A}*s$PdhE`KCzT)p?Y{)#ck*;zmqP-#Zw4pwfOD zCkF8)D}#^GVaNY~`wKMyF&Cp%Ac*RyM6N{3%&$g-k00<&riB+)BRM>*`$o+bOjOq4 z{b||q>Yx0^3r++f+O3bRA3FWRgkl?(n$BLuTqUxYW z^9|Uj>(=p+uDvX6YrZJFWeM_qIYgMP{bmY*g7g*!g;MXjwG2zNgn-NWfhhdxLW+2! z3E96P);GA`L3TYnrrmzE&GUloyF2x)8%q~T6VWX6?zm9wxR#$}>})Bu#S=>3q8r>q zh!GeP)a>z7WdAA!ZU2GuG=o^g-cCU?HO$r6DcIn{7ZN;@Mw7bGuuI!w?^N8TPP?mX z7Ek3%c6bqdD;^pyq*NVs$^9V6q6 zp#CmadwCAm3BO8)Qwjb9^>0- z61M}0OmiBhtivn8qQqJ}_I1)qsF6e$0-izFqwLiLnb+i%L62RC* zwM$!k{lkP$T)R;K`YMTn$*(i@hEiZ5qH+nykFtuhlXZuk6V(5wojjbb2OKN)+(Ld; z^DmUvzp+{prdj$Q`2S+f?HxqX@GO(?tU{gm=Cwl)BU*HCkjS)=WOYJ`ZGGG7w=150bQ!4%N($-uUdq1#CCHJ6@{&jdN`*<&V>P zO4$qF!wvFfp}nDe54t@wfR~*{^Cn<7xC5oZdu-WkG(xI zO(&q9o+`DYtlGElrk)+nRMr7;$E;i_>l%9x(Gd&YEvLVJ+uE!Ue6`HC`qrqnZ*IMe z+gAbbjxli)Uzrta2|uCm&Xu;AK^m}B+A;|eVhdE9QDq4+V+6NN`2mP#O0mk-WHMs2 zCv5G7IR269NIrS7Vwwn_yr4Nc@x>0F#{sOfIy0&Ufg>ZT80>ocTwE7AARFJDrn(MSTJgN-tn z>DvpMh9RA`xQbDxsZQ-2h-WKnfFozns0LCtZ0;Lpaf>Hc!m1=(*5VPGj zgyH~s(QWiNxOL%s7FSO}_gnMI_gb zI<2CRn=^#%i-PJfht<>_h)!e|eXd7~yO|h2RTcYb9E`wBSNJdI6_jLs+5dt*A@S$Z zBvX3V3GLP?5!Zc?A`*TT>A++!!(R}EFYhij65z@8Xua`CkAl*&QUDT0bklw)5+_O{ z8_{U6Y9yvG%IE;=AUvxN`P3)3>7h-Ln#Vt0w8b34Q&hg~pL>>d`^zc&;(dg*xUrzP z$|RXB3HK%La1tx%+G!g*G}?5sEECb*{sBSB)AO*S#Qg+1J9~@fl!jQ-4#t$y3a&Px zg>esW{=m49lY|%Z{aDvN`^ul{?z(8F?UMdGz@7+8$Ur1ZmFs3=rqcZQnzgrA@9EML z(fDoOf8YjZaKU?2)OZx@hZs9AY6$zL^59#ny<=;Qi2qFDZSYFreAF|MVkNftD!{D8 z0!jJ6O(?|Xx`Zmt(~et?%?B+7z_q_NPXgCv5y_$^iwz1e1%nn(g6_tk)cO+~Ah`K5 z!I?Ka6hQOgYXmMpXEI(3sNB{C*rvXg*^&0Gi|}H=psSU}mc(CbR8HW)olZej^{t^h zT=QM-`Z_e`Kp!AeHL;eRH=+}9Ppwb@Py!?brDy)1F#X}(>OyEplaeOR&K8w>vXj?K zw6<2ReX~eVbi=u*rmCtR3Q5@~O9GuLz;y=gXSkvu(OcG0-iQmMqCu)Fbw`%7S}?%d zA%5-(MDZ8(lqI5kYwbDJ( zON^+@#g*iUV$AQQ~DUntXa66UdYaQIyz6o@(Y~w?6*EzHXkOKco%J7=! z1N7ffiuY7oMe(%uWrC+5YrV5eUFAJ_!!RBMTe7o{dQWwwbCU}+U-42a@4pSl&sT$L zcy?+|#G;ssW$#w}Y4j!b^fnnj`a4(Z5LUcDsU%UO-F67%@1R7decw7LIN$K+XL z1DQM}4T!bU&?*gdSX6?3gi1_4^fbci)9ATC(3EoIsGQM27mr2_aX>EZ2LA&~>^YaN zu#>`TH95bY=HTjgSqn;W*YsvrYM((TVUYZR*PK0mR6~6bE^#Ajp&~7BJL{VeeA=@@ z_05ElMxdv21Qnu(D7R#fOaEykuhGe!zN43*ITV6IsN*N%cB50=HjK`IfvzU&o%W63 zj@uD|xoW8_@Xf^X4jW2fPj}tUPZErWp|r(v|8_l{k1J0Dq)L1Q)+DcE02UMHj1$u- zP>rm=$KFgv6gPKY;HXJOYOu0ugAp*sm873}`6V!xu5-g;n~VphKXJdbFW)1x*4JY| zkYdai77^xifSO5aQk)O6oX0d~T=`2|3VR2w%)y&JkGO)*I7mtTdW6b?O>AX&S49c8 z8(~l4og@6NDImU_RkgtKM>1bE@H8E{L8Ie8EP{LduHlNhQ?kCj?(4k!s-s?z~VZR~}6 z45roQjq0d2K(AcdYZ{A6oT!fdCKYLE1dN@pOAlVms@+_gh&;rvuX!D0bnY7&XI5Q; zPt;i>3+TN`*!KnFTKBr^Q{E?SuF}Tqs?@ehA^xd5FDi`uwrMr#>Ov2SnOV9_uZ ztX&tty^iepI>C$=Bi(l208$0r2oU5)Oq=!42sw4fs6D z-Hu~SasbRVh0yJ%lypEB$;EW%*Jn3{dPz;^xz z_3)nr#4F1GP10hln%!#edoV5B7`ihz@t^u`fglZNA?^{R|CF?D?(Fapb2k(F*km$D zkDf*0H`p$MZg6Fq8hNZVE^bzPahNzW<{|izq!Y$kqG1NpV%xh=~&xAKfHe0X$o9Y1N1LvaCAu%{2gmWvX?**-Cm9^4E9U{HpjTr z4f~Rj`ky*>@6cK?>nlbW>j79W$lW%oq21@sgsH2nr1>Rc3)MdB+`OYL>_SzU+#1UZJeGb*I+<;GAl$r<7R-icx>Wclu^-aRyn6nahI?MY%@g zq|--%Am>g?92&j2*C7h5aX+@nRUn>*t{{|V(##X3hs)m^{D9~#jQ$F3kt_Kkh{y%g zVE;Y`^ZL#NkJhIhrQR{PA}~1U{yVavp{t-?`UlbTlT;R0Z4y?5Dx}4~&mg}6h5VS+ zj@jsUF!m)OHa2d-lY3Iq7OP$r)T~3+o#}NO*1~82#vQJQ^c4?TSzqh=%GUKQkWXdE z()RVO5+1hCxs!(Oo2wI?6k!||w58$2k3e?=7sFm6!JIj4DTfQ%5>v zxBRphc3?3mot-$h0c%~~P3zmfw$PA*=Ar}kJB{HMr%WWCF9^qqak6@#9A^Q5(=4b7 z%K!j8ZJ9AN4vPp`SXgWTGRPt=E*l%$T)j03yY-4?ehs?%GhLYrgMrWq@V{8t+#MlDKs*Ppm)gE6s6dNEicqi`iY%8L)TiA+EVlhHa zbK9l8-vse@6y~Re0A)1>V1nt2k>d;2YIe%Z&4qiqoo%;S^}PBOukp2m$?F6~)20Ki zVZUlu?K?jGL z!xxn472Z!?4@W+)5YF2HX(vk$%&SC1;L2J~C3(-sgcjiJfza5VxA%EA$*<(qd+M*x zIlGhIcR^5SSDs9AWPE&p>)CHTAkuif=7+wo-b7;iC#<2O0v?Y~({JwM>Xz-ZXKAu* zo@L!U>L5ytxZ~+z^(nKm5`+KgX4H1ks^0AB7C22GU*DIhDvzb*{P-wMkl(T0#-aBL z42(d?k}QEuw?7d+)U{4MUj%(exmpldE&Ta}= zC)3X}{^&fO;(-%yH%Ok|PUgvU0TsZ>PIiR;o3p%ma@qdn&RSRC@qe~| z>B;$Hs|;7@b)AzIsvfl8Eg#vO?%>FIH78e z3s=OULPu%76G?stasZ?2!EBcI3d-0d4jA#uTTYQ@O4R(Uz3&#?in6b#jbxh}EZDy; z&Hch>(V{x+YP*0NNzy@4v)l61LG5mP9e?3v?3IdpquX*njqT3#g4@NZjw46MNTu`z z{#SV`q@`4Z>VBJt=S?Uox*v1Q|Js*gvGl^sV#ls+miCh*<%b4qd=QSs0{%UZ?i)Kn zaY_hy)N_BX(#?3d!w=!2oh9A#WW7gy4q$auSS_-H6-Dzt0oUQdsqj!}V(azWhfSE2 z<~4h;E&*2fI;My|i&@I--J=dIHkfhW*k|EsD%~^Pk&WwKr$L3ML4??9`a8CX4w0{gSwU=nI`VME^q(9w|Y;JGw z{fUX100=YJBSxfbPQtoZQd`+43wTW8ZRb3mrPmqp%|XqWKXL)oxZcJ>&=(#UHjBY1 zuK79_k$XZ{&k|DrFZ@@&neQjPCKPEpSJJRLN}(C=4zmq1St69?_GSwCN`Klw?N?R$ zm)~!+sV*)0X0K}o*68!kjN)$8Zgv+44_+%JOhqMpJ>W@)RR@D(jr0x-%O6&E3w_>9 zF#4(=KHOeR+Rv+$sQ$vZoS66=n~<<^F{?A%=5$gmMT$(Z-}#zjDdPzTrJYCN;us7+#HkE^0Jp&!E6;O3^bWbAjpdbExWK}NMu^{C zx*u|NLX!Vkq*m)nT^Va+Vn$4><(&U}_t{`;t}iSD?TYjrW#;Z2q^waK>iDo0(tA?! zr+UC<6I+n!uY%&+W0FfE1xD%{8xj2B$<}RZ?IqazGLshNt+?oX*QC!~{{+g&mgS@- zD`poHC-OSRx2E|HDOp_cI7K4bcUgXG6nS3CHCb5;xIb*heCqWAZ_aA38R~<#d{5NR z^{p1015Ubr?b#szOK5*mkYl)V5qcf+j+#+I!mZy4OOQK8dA-f^&Z*Vm$If{6#co6d z_%hM68>+h3e)H4%JjE&L=&|+4vwU&H$~l_1?9-Eb%^)oFkT>Kvy&x@16zhuYu~>Ia zo#;Tx*g`28uHCfBfsI5EkC5g&^7u4a5m;`iW_xvX^V?KbFotc~CFFg+WXK2i$oy|J zsWD9P&>p*?x#T||Ue+bQnV5%7Ww7rfayFG(^0slWxamHei$1};F zD=`WrNo_$*p{EI)#<4Vi3;E2F*@0g6pMMMaU{2baWO6{r+Y$XO=J75Ej969-$(orrHYSQe9y*e`)jKTK+$K8Rx zGk}pmuqpOiwUOb^OC8|3$j7SlJi+1DvF*W8tu>F+KCGvk3IDS{&(f7oJYKDPi)KEP zZgeTNt`c#Bnl*EOhJAk)-cf2i1n~+U`0k!|fZ?zmisvpm5dYpVqHb%*S`>O@iO=f1 z)M-)|^2s=-zXTJgVHFt86@;&_7-FZ(a&Cu(r z=dCpAPX?7tpv~ql0V~cd6P-w39W3@0cn{u`zXjt8Ft5p1o-27=F1_FpbFb`K=F*A; z9@;OSk1@~8BLCjY`J{A+@XB#-<`@6d8Gje{rRi{lvM>JfD#bns8ZWBbm%c9lo&T-7 z_BqbpLaFD;A>k^_%yO~8$xJ92(Hkc~!QH@OJ0m57?B_{b)?mQao|pUcZXFeQdDJ{& z?}USE%jhqjd&g7Y8A<+o1s%(WB$e)Ze%x}n_FKoJDe)wkvtQ*{O@=?>fZs(~y2KI# zlACF}Fz5^a^Cyxeu2e|)LIu|&bOnt6mw`s~9w4f$v#U26eO6SgwD~3YfEhy%OI>Zm zO~1d4jm!g>u1#%6hlVB<377z<6uo*4BLBl5ImfZrK!y;E#c*i2YwP@z<@2LC7!atFHk2%v7aDS zlXxe<3kWko89@+`+F1B^14!UCti8B~69~w+{(nB8!*+j+K|n+fC4>c)-E}XrV71ZJ zn!Y0Oam-O5G)xqPMdtll0^W=r!tJCFIc?Eo@Dj|EeQ#M5_N0?j6cSQxP`!uD44EvY zH#>~8;mJ%{EYaB$dm*E9Vd~)OSf>Sq+`i-%IyZDWXLWQotdHJG<&>TlXBP%P7C4U< zE0yRhEG!TL2%GjKzldQBNhkmiC@>Mwf)D|_g2?{4?#RM~|Er0(*j%8@LF!Sly^ zmmrA>>&IT1G9$x7#;5Xiq^})3fy9ykum{YpLU62nA&ntxfogxDBJ(Px@s4R5YQR0m zxy#zB(NH5oR;ej#|IFqgE@p}0yycL{gm+W+hLjpc#`N@bik^?hcq*gWWM&$V$8G%- z-`e7$sx$6z;1RvtJNZ~>)zo+Ms##^L)qAN!<=o>fyL7a z_1n{wae|)hQ{pUD&!EWfYg~_agy>#{z#E0FF{L`TVMxBD^%9Dn?o$##2D=@A$rwiG zkS3X4PqsVTXe^m_8ttM$o%61Idej+kZ5fB{hbVJ2dizUM{M#G_jlu z7Z!w#H8gm%+`ie^jIH)`Xi%Ra6yhKBy@vie&(zE3W2WRh{z;0z1~LGC?si9-%MO|l z@a%Qf`6NE`ox>!S=k_lW|GWL|zJ%rvwrQ^Z{(iUfWd#KV!E$NPluit4)x@Nvi}lt7 zRf`%&q(uV*2|IkYx{Mi=;X`I}N&ui$xP7J0Z98 z`OGHq+}s|GZ@+w3NqC%(k;fsRpne{#Hd={rk}??9_$F|JqOp5D+cWvTKi_=3JtcVX zValSUHkK-t#Cxbi^sXgRDs3_DY>e6lAeCtIEwsO=5M^8b3IS(b40 z8OM*6$>j6)oX!=5g@v_;Bw}Si%0Uk7EfMTzc#(P;w$mTg{}749#OL*F5JI!DvCB{s zve+VEr$|EHtl^!JbR#ga511X>I$DbAS?{(=0`Gy-cWTI)49%o@4*lT&#zARsxeYNh zXegBEbUIIY>(bTLB~0qI-TknrWhYo4=nH_bX0R)9>@i3XC%tyLHnK>9+QsW@?wR#{ z-y@i|jP3`AFM(kTmC+aa6PmT&?fbPm7>O*^^Sl2>sOY8$4u_cK;9{*gLB`9=>+}7H z-%5_7Vf8nOSRX*2@*K3m*lWBAEWNa<3hGX3ER!+>r!u)A^{vQ0dTx~tIa`_P0E?H0 z=W?Tc_@W1u%~_?rY&G$KJ@KMaGATW4-m-{A@nSB8Zn38{@`7i3F)!&64FyGz*vL*VHU#+wcT)cz#?IWObP zQ`hZs`ea;OICN>knGE2=Lw3dxPQbZAWA_C6X*(N`uQl1!S2(q}3e*S6N3dwCV>cb- zTt7a#UflQ%`pGGLV!baS7n1MxKc&aU8?+7zITC!`OuH zP!`4dn@t!8zbYy+GGWTtO9pT&2=Gz{xL34BtiipA<_kTuxGf+0Sm@~BTZ7dRooRP@ zVc&y`JckBsG~E(dCb{o_{uYstYhbRru-&xY>KW{ARok#sV+87;Odbgw;8p$-S5(#X zt%4P8JVBCN2oHg_T&jp5hL`<02xd4lnB_&v zz+@T1naT6syk*_*T7W@5Xby%iLjoViD9N3Qgj`83$|1VNo1*1aav-={GGfZ%F!*6& z`|h%EsZ40NZ&ZH%u_^qxNkh)Yh8DKiV&&%ggScfkz(@doGQX@0t_!^jr|Raq`)Zn= z$t|K{Jrha0??n~|7e=qC+u!!Tdcq@QF-R~mzNJlBhCi$y zm)!X$fSEZxp05lr<5|SZ?~9dMCnqPyXv=q_Nz^-NK4c9H_I51`4}RqwUV9|5 zJU_coR6}g?hG1P0(z#o7jfP`_4{a~cXjq`?JR~LI9A?8-^I$yplHHhxWKpAJ5B$=Y%_jYDduZAB-(T*gM~V1mTvKNuoA!>5px^Q!Cw|9y*v~FjXcXwc z)#l&O5(3S^W4+glV;CX`MPK%aL!U`@#ncyFKrcH^^)_MH8LQXxHPFD#QIXKRE7oyp zPlinpiNK4Fe@D4(Qh|=`;J&4F#ltNy)Xc~aIgT#8Y)*&(2zq`8?*0stKc|l8!Lcha zp=a5PP&^DCfLAmfSV2!b;xK5KxD9}#t5Lh+%I2bIKK|0(FR-q3`pRc49dKX=!{W81 zcBwJ3_dK~@Iz5fu?d8r!-;fK%0$R&Zgb8L1#bw$1mt;Oh>_8e0$?Bp0|~+Y zbJM_&A3uU8T?vfqptwQ_WlI_xgU53Z{twUOzi?Lm+ooOK_-S?`o1cbZShQ(^E6R=! z_rU>Vn&>cm@qW(4hWzo{Sa!jVAnaRz3mX_6x*Ea=H@^R-naXWgA^FLJ3)lT+##YHl z>M_*uy;QQ)*~O`T?USSDmZ!sWEt7+5>hI*2%Y|CHTOeSj#~dFcTp@HD?_Onzn9fH*BEI}>%%$D1?~;#Fh*Z%&KbM59 zJO(^8N*Wu~zC0tt2{8Ls2|{YOe9@pU_5Nmlok>!CZyK~-8~<=?W%`ioM`%A>TtKj) z_QaVZOkganC)jl9mnNCMj6mu}#o4;kLUaCgsEk-?S!5cDRJnt+iR= zVYkH`nAEW8s7%6Jsk=>}F+I-=ZJq76I=ly0xvL%)Yg(S`@bS9JJ-i0`M&|SBv|r<) zYEGj&C#S=-)CM^TDTqZT`0QOg4xuO8&L__|+a75wL1xr8goI?2d_S*DlHCEAx^T;LMCnw({SrrPzpiM zP;m3_n8xj0$3D3ooYXRwmnCg8J1Haazg=Y1BZv;0l3U|OXSA{G& zso{DDW@A5FOK%Mx8=Q4t`hM*wE4shm-3Q3JfB_#<)1o$rs!fvC(oIVkLpli zW_}y(tQ7QhSMKgaRfgNEEsYdhYKxWx`Vv;@n-t&A*m3o%vUM;`1O6s0K=*UQ{=oN1 zzvE(gZ`!on>({{wn$P*%Tq&-U_9v5BpP`th%^%4h-Bp?+vWx7L*DgtxNn&Tz>f7S-=ut+@q0A+k_vFSwP;7jZ>ry3wzF#8 zR8ah!AJdQhWUoUqI3U52|>tkVwvLRO&D)t$49tyin73FNQ(pL0myc>#ynu|JmWy=b!7@pWntiFZUMxM5dxtN8V z6>iqu()}Va$E`G?W_|KP*fHe4yqtifu;|0ZM7u$j_K5zRNF)C@T+@J($BO@2#~FCl5Gr{arN~@A|M}n&g__Xn5_I zv6)SPj^mi?9#;j^aFt|pdZ1gi=e zMyx`IFoOW943QJLHmHEKf@{#+4(~N){38PTgi;`**a=5KRtFIsX?6`(0bZF5*a{^e zjap$E(;mL1?bcLRwaq0*^h@-HP$vsIX?&FJ0hax+BxcA@BetphqOE+aU=vJ*aMnB9 z-=bbD#Jx!wOYJn8tPX;mL0KWq>9}EnB!tmbb~Q3MYe9AKPHB|)f$g>)Ekm8gxAkm+Nz87`Y2T%+nt>q z<4MUrsBehZifkKW?OH-s9IKX6)T`?qtLesdo`Iz+gG*CmjYY4v9*w%*HWHgJJe^tU zQdU+=-+xDQpk9}HVK?=^MwA1UT3xMky@)6u59xU(D?R$>#^N=heq}0UTMN?WXbA8G|I-$uV_#9BXH+MgNr*-B8-p3jO0`0Z_ zK+GU!=T9lSu1~0}MgFI20nI6*-^ZO&y->hDQ)091G(0q!S;Pee&?P)vW_UV1OeZh2 z?R-AoH!T91O#q;-+_g4*B=Pgr?+$jRNSl=Lz4d?UoxaNW9%i}aNHkAC8K^xBsJT_( z9LT{3_4UIqT@>F1gpYHiex-aL=cTVv+R4d?dqs^xZf?+=dZwZ z>d>yV*cESzrgvJ1`ySjS6)acJoQnnaE@7C`sCN&W+ofMIH8N#g+0wZ0jfJKXq;%aN z(ysOPyx3KFb9B5f|5!R9x%6$iEpTecCd6(tzL1*hAN5&(A7XE|$dafjZv!_p_35-5 zrbe@XO-;p=tCom=4)5@EqLJKB1Ro%!%Xcb{Bdvb*injGd8%8YF+vDe;%^C+a4YI_^ zP`%_8KcvY7(014Ty36KDI4R#}*Pp@gxW5l}s%Ylp73K-V?07t^L%-wK0xnv&bt-#U zGBBcX0SUiMSrA737MtD~lmVJNZYZOqU_dlJXWHq8-+UWj!@2HsWbbkmk=dHsVoJrL z=b=E7q&&5P&1E>6L=bu ztyrn;aIF5}xcTfqUYU^dL2OoK2HvidX1*P%&xfBmT8GYg);Q6WIzySv~oe)qJry&$Nt*og{WcPC8#TsF-4W zL+VJp-R=)};#kD|-+@8th2=lIR@~10)|#zS)8wwl)4~N3yS)qm)IdpF9CXvpU=Uw- zd3UXugR7PDl_Zj1UEC&ZKmNvQQ(D3j7{6?d6#z%0>w4eM|8)^k4f|m~D)G>9d+;hJ ztC5yTddK3CqplC(h7*oNHpQLNI_zA(NbbF>&lW&6z9I8ublmz9>uI~S^!6y2`(tXQ zI5O;y@EtR=o0DF_!@8@PJZ@5l*OxMFDdL|Jt$*_}v zK-GG3@IrE&tjbX3%Ro}yyt}HQy!96%^yY1sX2!`d`!$DO`>EC6hvT4-A;nrg24$Xb zKZ_4iMyXpPBVdSDq}9H2iYH~*r@Zz^^mmlz%LAEZiZd!?j{MeuNmsq$PRYvsvxds? zpb^w^gCo{%20y)4+q^j!7d#Z*QA)u+pQK&(b<(#H zv}Q)B{T1#HyNo*H1x{1rRqI-uYPy5suj;=~$U0(!O54mTX?`WTgUIr$dCg^SUcXvR zN$XGAHmh)s?@kmRX=W#Y&V*HMMa61NMZa2ys9!pP{}DzcB(oh6&3Y1%&VdBV`YFz% ze4NB{pC?+(5Nf0YWd>l<+%s4clT8K?@Hw4x(bK&-UUGGP)9Y$6u5?_!w4ie*RP*+D zta95X#c|P{xnyO|#(h|E=heTzoqAelQGjc87~phQ&R+%a%jn^;I*|J9kQu%b<{Ez0 z92){~cGNXnmlSV5R@TOIOXcM12nnul$dL?fbKa_gRGr0<(2+o1HSXSV7pcVv*kX<@ zb!5F*v#flyL4-JyMjrAcL?@Wo$O@~|;9n&m1?a!pF6ntAm@q3gq}rMuv^X!U<4C78 zwbe_$m}xfe8!QfVgWk87h9f$}Xf)d0|44k)uuEXY#-ZcCz2-hdLy3JS)cKAg_T5il zHpk}-b&4Oqrjxy zg09u^_WJ81UTJQ8p1rYAMY}yYBk5+)_kzc{v@oq=29#Ce?rneiZPnZZc>u~@pCTX( zCW*r4PBx!Bt`Ag!9tM5$Pvl?!0ail?d3<_rZeVBfK)bTDZTD?RsfzL& zOY@p4jt?LDG^<1@zTXjMg|Qtv1i6FlipBykDIZwO7L?&MMjj%u;H6D+>*0WhLpX;t zkB@^9IjP8VZIkGVvW}{vvbwUmh@KS&ayl|T76t~@gK-L*nl`@+ncg&RHSo|O&&P;u zDJT<4ASXw67Vz@ZrDYcvVq5an|_ATD=yld-CaW+W3mEw1S5`r5BNld3BDWYy=e?50^OAn3K&H%8e( z5>9Aut(0X|0InptaxP-$aUnEf@3gixF`uq=;j@Z-sR15q#m8QcTu|LQ3{{?}@ZzaO z=u^jLIqiDJi*?V<5bFSoA&T}61_9<=ye@qXnEs zw3Rg5Q9NIV$zq}I*GB*(cChhpk{=MJC8NO_vsHX+6~t%|JkA>I5HVi@k>qK5lk!^{8*bQ`h$@ z9mH-C;edtn5fqf)149b17(P!$(J9bc|BDg_Xf3z}g=AV~o-4xfsdtj1Tq3a#gjfR@baL*h*kI zF2TMiv6oO`I4FEB=VoA%@p^Shm!E;(QqeOq^N6`jpcKwow#v?DW2qQMUXZvk!S}0n zxi8n>kI2HJzlAk&lAu#r(5iCCf&>Ax!EJEtna@p1a(Sf;PJx*eJ){Xt#5|0^-5K{L z?h+BT$^Q<>H#)H)Vo0^dsM%`{kO0`p0CZCUj1QJ3d{9|yV zCRKGdPnO+W4_*M;KtiEnccr`#^?ADWwKM0TsVdU+XTzgeM(CJrq~V#OAM3LY_nL}$ zL<|~|!2MlY$(bD6<1?2456%HahKWtKq8)LbsfLb=x0RNXi%X!`)^skPzrTOix;{$q z`Q<}B7CZz6w0(fP0Owqi4!bAFfuE0gUWxvCIzAP^Fd0%?djK<5&ueub2$n@x)IA@@ zU%+Bp_6wi?2_0}KA;-(892lotjw&s3^FgRsjM$IQ`_f?m{c|Qqk#9f zhq?bu@MUHj+KRR~cxSli&-3YJoKg4y2Y(OODveuOQp4Kn)G*Kk1Mjh5oPv*Ol`|vv zz2F0l%Hrs?2}~Vc%!Wl7+{4Y`W2H<*{Dh~+o1iOc{5EK@E69cAFbM7{y2dMzNK!#9 zLJiTX)6IJl|sBlUQB4{6rl8bhkv0bO)Uo%F>gg5!qm?(e(gg-AwrCoJgM z{OKEaQL@{6gSFgr&&8^5#ft+zK77}1ZYN+6GsB0eE6bT@G@xC{u4@ga zDA1;W*#@c)aupB6xaNH+6~~EgER>{^SbDtt7N5)0toT``ROLL95a_M17d=A{Ha?>q zPmfRg?%Ry!v_CsYh4%?2I@Cp_@HWM@wb|p#*^J6W?P|)(n-XlH+b}l`NiXwX=!d(b z&!n?TMj*#!SDA{U2eV$CNR>a&`^k+3tcAOCa|KeN5aeK!58j=Ly6ehNi~V{jKh{Pg zOsb4aW9yQ=R}~2}9Z|g{Z5FGasoX0%XyStk_R zqn0{_N6$H7ev@O)n{T8I4}tJln0$PWr?*2s60LgS{r>9H)0_wHjojNF{9TCS=!#tb z(sOV%4{q|??HhKXIkjdp;-C<0s?ODm)TOV{n z8XEoA0|@Pzk%z@_s=Vy@I+m*JH@mLaiL-V`@#xB2cW1vG%=dkpYW1eE&dR=a$6-Pb zS-n)ZJG-;y`xxg_URzornsBr62wFLW1zm-V>Py{D-VDsl!44M!*^(ttzKK@7$}Lxa z%r*!dj|ToPSH}x>yCqpq_Gr#pTU?S8wq-LH3X{q98A2eP+`f4`jX!b5r==xFBgK?eqhyKRcnE)Y&C+DXd$I!F<_LTPa zCJH<;%22s0jM(y6CVg3p9Bi^zr}v?a*p+OIhPcii787X9&N#)73y``$LWhVk=3TGd zZET(f!=@z}S-QZ{uP=9tkRE_^Ht(q{oV$LFwG>AR3U<@qVw>iN(q7-R&z@jl5Fl7g zHdg+cAa`}9O2`tC;!;?CH1TfBOaxD9y?lc$_eC=&9uWx0G0Ig_IWWLNj=Z{0glo5^i?r0H3NT)U zWmmX3^!DT#!{w~CIYVebpe-Z}H(={vGCO_d?(ysYQU=~Fi?k;*^=N&)`~1v zOz6A~OuzA?4O_ca4I;!>I2yv2Vhwx4-;Cz^c=`>szokXOcCXc0E`%G(ipz(OG8Q*S zhRV0|*V!)|hm7lMHbs79sC7D5kQ%-&A~oYk!HoBjtsbQ}e)u}!dhf<-1Q+r#vqdxm z$6!~@=7cFNv=?o3n0}S|`H^ahJyDy}X_Ek1&+O)jn(&ro8Vt`pnaH3Jc+_XDtVd9M z38?(Cm16%L0Sesdj@gbN=txDKtL3{NLmX;v^?qU5$H zQUjaTypD*wXUt5n*xn>oOdvWD9}HNx6P^b`wU%m`Y9OeYZDmxK&kG;sy7*lSuq$>| zD}S7aM16h~gnvpa%@pC8Q9uja9M8BD{rTv^qFqK5KOQTeP%u(GMhG+7ZfN6X2hsEm zMWx~u^t6r^L(7(n~8d1e*i)OztDt3yO8QVMYw4 zb?j-nhX?cL5A#a&G5^t);%g(8>F3j1Mt6HJg4cc8lE%UM=<)#rP<3^As!nquMSzxF z{d=qt+TG&KUgmz15pin#`<2D-=(olVkh?{ha6`$vmSbY8H;<+aK`WM_iqxEaC9huX z`~15n^`Q!NtD9`3*bfined#%TgHz`6@ZU51*0h6lqQ!bO%t6lEAC1-C+5P8VXJhNM z3Yrb5IrkoWeH&I)A9rG8K0kjFvRKmR9Ck$MtjTh+Bso)4 z)VxB@JgcNWS@JoX<+k7Rb6@5YpfqhIBbTBJA-xf7FYZFIu7726_5`lx&ta_XKsgd0 zKN!yO+1j{)<(_1iKIQPHv*-5e=cHe<>K-+2q9jjm+)_V;2=jIGEAHxL_SQuKo-)klQ(i`4a$z3C?x6X1UP%S2>oo&o&z!pE(5)|~m}JgVroKpB@g1$yUs`+Ae3Hl&cmsLp zpDkzIT@E3R&$;dtjnIGNu#@Y$Nmaf1;^r*8Qx~c)etJS5H(~GYR;e~WB^ytN zflS*l!&5=mqW+UkE!1kWNiD}Y5gzcA0t>j;{qORu|4O~qUXfXBwahCBy*}MMLLio* z(>^@;OpH(=AB9UxIe*H`-mCHHaY}Oc$Yyswls+*TnC_-$P5rnV+F<=x9MaW4`3LUP zL{#2g2O{NbJ0u(uy>|1OJvD7eMuwpo^&6XO9}wi>zg7P{{~3h!%49IYJXAxkHZMd; z-C;jJbCq~yd{ZOCNouxs>n7_kc(2A5J*HiPA?KAX%7CV~QEQ1_uz;j?Pd~0+dr`hAwOE$KcKIRX7JtITH+tvH-#%Km8_omon&gW$f~Pk^T#M7@m3o6}*(@BmYxNX`;m@BFG#6nhtM`fExsC%O$1C@d zu#eDcl~vc{9;YP>n3?=a>d=4yU;8LBGwUTm;%<7R%=_^i=`*qT&-)Bt@f({KJyB{d z0aX5(GEDEXhWOtQHQ$!TgLN?<_n3a1&Ap-nJ)r*-6Rn`zg&bkCJrG_+ADFq%fkF z>)8sXednFt*wQU-cxFj{e)rHJvKvb66F6oAI|QpLUVHoXomSv!Xk*$nG7C} zQ8Nzdm6?(6SY1A(lw)i)qbql>u4hR?EA_5BV9`Nrw0TK16$-?azN+Gni;z}Nv!2X{ z!OW6g`n{hHR_W% zD*Jf6UWo^P^O&2@mUUbI8b~U!n#vr? z(F+Eq5idKnZ${G-HRf}CkD}99hiwqDoo|rhw#68{Xrjt(480U+&_*fl9O-4s71X)P zDmSz-04fvQEE46$+OFn|P%;r~w?Jo%IE#gCFCTp)|8X}}zgVokHCIe0_Z_f6BA8d> zF1HTkF5CKv$+iCtZzB=I8SXQPr!mrNQc=Ht9{K%?|48lc!EtRW`#C>euzCLQJBsbOy?qQCKmqvWp!qGZd~g9SwmR+y zb(?=ce8{T%6RJ%R7rI@I z>~@VOuaH5=m$tOUg8ZuO+ZVjcT6(N}-@DpwjEt~JIQo?GWwZFtEyqri4qRPl_z4lVxydy6Vu(? z;IZV)NB8$ZKhF!G8j}uG8Yige3Bpqf?aag6WCVk=NRqgF@^-`36%%So=gs{3$jfN0 zeP|1eajH_~y#4O^&M{-R{xTv3NoXh5<==@-u2WD`Q`3!Crw9i@KR-XemD*ye%st=* z1P-9FbQ)Z*nfNC>c+M4#O!UUiHz&IH375xhMyvAt^p0ong|#mGL)TXL3o37Swvq~_ zX#FD)dN$owcnelW->ic~x+PQhV-1ZhWvE-@aA9la8|7>kG8Mp1?vbm)d_j&~X+e}_ z1@V`R)zq`D7Gv(conV7CgnFUE)@Jx~ppXsKKfSYGF`L?DXUYA)Kzzi160mWZ|HkD( zS@NcMAwFK613#rtov1;6F@E^l>GoRemgA2a){l&HH{T2)Eb?@73kL&xqddPAXn6m( zwqW2+W0AkKh;gZ;a`oerzv#ln)~8=nyHh#}-ae%)pqMq$ z$6`^Gh!@vp+-O)vG2z4&!=;)2!>d)RXe}uwUW{Mu2lhPN9c>XHnBbv$$`J8SyE1lX zS=p8l6A+nB%3(_%MKLCftgam6hiIn|qz0y_uIZylz>iPh9IhVTf+wuxBb;UDT=<7M zBsB269n*6TG6l!;T$U>~%wrxIb7^xD?_#e5+7CCUVXJ_Ru}1< z+B+%l56e*|M4ImFf%(!{8FCr4W18jUf}CU-^jvS>kJeVwP8`fBIF723y*mpwX3HWv zEU=QyQ3SL|j)Qq)d#&11znnQ<&`GLLnc_jZQHrSSg&oj)_j6<teXf36xa_Po4*yFn%gKGr4IA#Zp1llSH-IB**8_1cnb}*f0YatTI;wH8v9r3 zRZ|##@Bb7p40peG{HjZnz%eXF{Xvs9NH$+g7ChF7&zrO#lhI;oDILhBHnQmwN^1;z zNxMv*Z9BPP)61?KVclX)j1r!bnRcY)RLAut+`H1 zJnT;BT?N8(rjn(D7?=3S3N2=vW1jp_B*m@EdF%T0nk$}qs&M9q2NS#7m|8=~u3u^oo zukFitdikiYQeNe|(f&K_1GD~GWT-tEpQg&yP3@N_6zfBlujOh7fmjPA?Zbdu+z6NF zV%LCnHg(YgQc6g~t5iij7L(EzV`O$x>KL7;HXW$vGNy6YWOppzg9SgVDD+8aM`epaYMCB(`$o5 z6ko+x2ZOZ>!xE|EQJWJ{s}n3j=6@M%&W$i^P8U^+YZY{K`926h3z$wUO>0s|aDLj$ zWKO(D#rN*12P2n=w}%;9&(-TAa)vrL{Uqq5xlOyOU>!AqbhRj6nU4t5m*+tjNqVbf z@4saWYEJavxrUtk%itKYAO|o0CoiwFO4j8nyRAW4MdRhojg*eev*v*zW2CJ(ajDMb zQ_(uEO9^6Z@?hj8T>OD;{%F2^II`vbx_Gu-M!VjLz$}HUWVl)^aCfHQu_4DQk6USI z6l$QK3Ysq?LyMYPYiw*yQYr}p!@Fw3t^SfPAzXSf#((Z~F|$X*db~dYIY^>VP3Fm# zGpnR$3KdaA+d1PqW76UIwMy13)p&}EQjdNSw|L48`K-%-L4Cv1iLVX19 zsOpIXPpg4*`6-#bLI3;7gS^O_FR6g3vY^p zP4GR4amu@sKsgUv_dqL&-|rJ(D!{34Ex?)k=j+ubC(7z$gpAGLC%8Dfa0edL2DVDM)X33CRrhxlH(k5$ zE|*Tycgmte3`qz|6ATabE{9%h_M1%kg<=qt&?g@Hp`dg2D@Q;J=+=Cq>$gQ_()DH| zpzBW1SWYeclcCWcY47OOrrU?RQ>Zi{^xo66am^Ifer>cHv4UI5<~RG(pvbBT(uXo=F*u7(;k!ddAibushqd~MF~(g7p% z&TZYYGmfB&O>RFPd{7(^Z(j4@FtpY>-fN_@m40dVmZ<&eUJ&8axS(Twb9I$Eapfk^ z9o615TTQlJXHVdBE_ss1t=>Eqc{Oz*z3oHIrM8f|Qmfwz#yGh16l&-Z=XgGWadx3A+Wn z^BFi7RyBUKeQ|JadBZ`h#_E=}Xxz0xHgBSIZmT_B44oT^P*+(0C|oa2|ADg-_wnwz z6(f`3<~7l^>Ng=?CRN^^D%CGV)`{mZR49jcPCvz6a@UG5caYlW^=)%gwi+{*#8HKQ zvtlg$&4TR<5tdQASZ9)cSDR872R~gW`c=fg9vEdz)gTqRig2+~s|nv;{u4-B7Xqd{ ze2}u+#B0qIole(_kwG6(N^@`!$&`W}Ddi=?B&G4UcWn(th9^&GXfl=8?Q#CMf=@%S z7NKjEWoL2n%cke%FFPP4VxLmt|97mxf19lakIcbv{VnxBxJ_^1&q%#lR1AEsR2#J6LD{629p~FC%f?$F!i>ny zbnZhY3(n$NGE}Q|k$YMXm;?a-PrF${lG|D@mo^a>8eP_YYrv}!7+f<-+r$Q zsRhMI3w)$*TfZ@%xnmHh+sER7aNFBc1*JaIH|Bcj&DA4fM4NcsPEb%|p#=7~R_>2l zGPZecD8#n+&UJVRi&^cB>=k;ZQ=i4o#-)E$GxWK%BxyCs;6h_RsG*(<$-jGbZnqC*OEg02?Dn zi9I003QPH0&UXFp=g{#Ui#NWSSesEnPl^~!Bq=4>AVINuxKng0Rl$NbX+1WefjaNS z-rX^$ntXYg9?3LJE2e+TgN4;8pvQGmA?dSs9ybb@-mxHo4yiGSlO&>U^|>+huQZTn zpHPXuM`&P-HAm_XM#RI}9&A|LqM#^YJv6WA_|@Jpql1IIeY7`6&cenv(D~w1G=AT2 zM&@7+7I#{p_!($>K}W|xnZC~D8A?B^HO+@`#L_I2GqhV?5|i1XO%vFE{VjqZUEr)8 z1Q_wFMV%Q?Qc_wnRASl2!XjAHJDr@QTC-;0hM5&XequcL^XqbPX>8C3Z2c*O4jDY@ z%LXQ72`QQZp+EwpAvU9J{Oe$}bWAMV{R6~Vks`|i`jMF)-LXA_pt|BJOg`>o)yadD z1|)vu1h8ylHhg)*U>hrk&BHixel8jUhR!xSzGwPx?&EDct7+hiU(1XIT4=CTr#7~U z(m`dU*wn$oY<~@6sOxvaFcXO4Y&e-TM&2Jo?RiYb^UI(0@8fbZc`Hgv=cZ&t)|H+<9x$6#CBYCJhX8Z4CsmWurWeoDKuVY5pF_5XuU}mp~FyBuGa-u*!?n zT2S`-6vu2;;i9m43`1@%9t~IrZll^#u?f^=17P)uYgAdXr$^i+YZ~mb7H<_mchw-- z(nG~(afYNsMEP5QGm3Q`4`aV5^qc1+EK*V%B~>+mD@*Ro#hzq6u`Z&{Q$%TD@QjUD z(wf)YZ*1wqde2i!|rqsqywZ0zpFbKT8&GMvpY(k3m{ z*U{-x6S~063e`&R1TWE>n&|v7_v;y&V~9{nT1Cy!mSaXgIE2`JW9$TEM}yiF(_=+Wee zjAorZRH0=TD#vd*4)V)^oj|HLv9-RrO`w*1s_$I1p6pQ)#?hFvB7bRf3O6^Ka*=sy zd5g!3u&lwu#_eNn7@rK}O3GCvLuwD{KWj4(g94=k(g5U884kmMLkM#GKSSjILHPQ= z6fFIhe$W3=*7V=@!uv{w=>9W*GotWmx&>D8r``MJXbhvl7~?q^q7cntQ45tz@!K{w zgZ+KO@4SW}!VM^Bt!zOcg*?ce>fdys9N|B>*ye1NC*S{>V!+jr;J-80tlif7P~%Ao z4+Fl7*nA$Wxio;}u7%ul1hv`x6O$($LI{gsVn)PEOUAsCQUexnN6YL=q_Y9JUHRtm zX+=dF%*N`Pryy;h0r&dWsIj5cEmjvUkYW>xGvf@l0Nre7aEOy$pr85gC0(_p&9wij zl`5)YCVOGOGknKLQu~(GHJJ3VJ4f~-*qwRQ^@kdpe@1&oUEcLOe|;rE-oIqKTai&1 z{ZiuFs=3lfHLzZ2O)<%573hdu7`Y9klYgJSCCq~PHuXPe^)KPA83DNH(N&~OE`gkQ znFb1&sDI>Kl`6JU#ll_s7f1AAHT>qAM0z?~m=>a78}sC)O{82-7Wz5mzr_Se{-q89 zoi;Fr^#7~y{r^@=w(Ok1;=JE50}g&JE1#Q)q05o3BP#{glTirN%X2b|!Gj$7%_^no zc!qP;f8V$|kpGfJzZ3Gn|2rY`-)b9Hqb8y+kVq&qx&h`z3VI@Z{Tl+J7VH08FOQx>4OO-2);3A~W`czI7UYHn|D9i5!Y%gV%2#3dzh7!8A}tFIQy z)lz7+M6D{p2LqjnV^F8oTb<0NvOjvjk$QMw4hO=~AR!?M^Zx$*o0ynbQ^WA5+xcV` z_)K7_|8%q6mYSZo%TN?{EdQswfdNr7c)7qoR#s>L{Py|0eoFtaB*%vfSn_xfym@ZhF1l8~P33b1#}b_pq{gGo91v@cv}(?CflWYY|xO!G#jaBLPQta8ijK8RKD=QS)FbfVM2C`Ja5>Z1c8=JNgd z?TvuLzGrX{5<;jDjFrCoooNQi+~Rz>7Wh{IP$jk(tBuzZO?9aMNPic3tRH&(+nTa@8P&GszE_qp3S2pqEq7+@!ihshL90RxCQ?r8Mu>$mSeYU#1p^*Sy2T5w8(Ksft zj{oR=m=SI4;(1VTa4$JUNo_5PHf!8ylg*j{C;!Ji+INBmPVr_@uNyyW0iImUd;s?8RMJ>VRrq@+%uil3i~7h|n(EIHQ*rg-?NjFU^uNbWo;~YRc-cy8=zj^PGdv*W$zSZ2i${yjaGTV7s zoZme>VB=zK08DKnNr|&&&2k6?s^3}mR%*N6*Vl5@Z#FJkq!g6QGh@N;ymc?ODaHyI z-Zi^$vXPk`I3ie-fBg9I>PVtsgBEXtMuiIi8`yPEztbGISc3(bzr~ALVh(Uq|6%nPuYiGTSNMn} zwn5>pyxrxzNrZ3?zb)kmGr_yN=X4Y8=B#uk#2lG@?x zZ0i140JYh2R3ByLQcPW{}pyIu(z^3Aca2s*` zIN*62Dlg4u*w_C%H`m(HPh2mi;@i#i|Ih3HwXbPbuoWt7d+syGqVVIRqbpagOifMw zZSjKXcth+};JW0utG0#P0GIu(4qH3Rx?Jzf`@6fpuU@}z)ykEM-7@T;WyD7W&jYjI zbp3cadHMNs=l(q^9zVyryic#d0JtMacw@K?F#Y-4eibpa*j@hq-;c-ro_mYIc|G<~ z<-ecL=T|)9oMBn}>&rabYQ4BU9Uv~cSwfmOd1%Yn9zIOSN)k9}GStP>B4$kBCsJPgEF?f1H zwqEku0c!qbJG=8@`?l`fztm^Tih~q-z=FI{1a4m~`;xcA2M!Dcv1gS$JJ1@5x>KZP z5h4^P7Z)cvSbFiI+2C;o|HuiYGfy|jYu|Ohcc~mX{^L_t=1_pl%FpgB?X|Inx4J9Y zJ-TZ*i;Ig-x&!082x|Mv;|KmzAU!S)96rl#0iR?KK7|4wetEJe1Oi35>_hN@K>PNz zC!ie?*3o>N8bhp2Bs$Fy(dnahQ4T?I-&ewV`bI>0!ekNwrhO2 zl)t^4jzi0E7h`LKXx5wGO%eN*g@J*J_NWQrzzx0+zewI6`RK-edP?VWmv#svleM~9 z-!3mNKibqT6FJJI;kcc(_eUnAzx+ID^6qXGf>lml+Ukwf6YY^AR&8}u4O0o_^hU~d z<@Q=6FGL4eGMClHlVoX8AKrQrZ&*T761Fh>fjue18|E(baDO0HG$QeX6?T(c^84FQ zbk~1AQTo=r-l|+n;h-olauPnz9mFn1E2B^8Ej?e#%p(j9HO`WQNic@*&XOm4??;F| z@WpKh4>gZxP_~MjH_6OkKF#^DaApl|Jr4K&m~mqL`zDXRqv7o894Y-527#F|3a`Hp zzflcj?FJQ+zCQm0_3`6bte~jrcS|!E47E+I;v$8-jFY5mdf<$JC&BJ>RO-i>nR`R5 zOTL_0ecr~>F<=9Tnj)58({s4#1Qkx{bic77!-}3Y~b~6*+qsQq>YD-!Tn>m-`S@p10;Xbee!C!RHq~4TFP& zkHtGtPK|@sDEsNhb=*_-bv{`H0-<46{%MXLoG8H9S<8d_Iw%|6Aw;Q=(Q)~H-ikhN zvi6Xaf~1B|rbA_QHJ-ao;gPW{ly7U#!K*zcdd3i@u?&2mxmX#o6vxoo!f1L!yL9-E zU^+4Ad$4 z%t+p*lgq)=K{;m6mh;TS?g+eEnrv^xZ-9^IY%jQz1p=}~j&gF0;EqAB-YB8*D+HXa zm}m5eZ^Wb|`?+bvQG|7*nU((3_t&Qye+IG_?CPX+O>f^M4Y7ems%q__vVa+nA?QO0 zlrP!-))qoOe*265))U&qxaWvQ^SntVF)Jdwc2arwYEL6;(19%A&3T;bCI$|&Tqmdw z`bRg>VZH%X*EXxRdue@3mhZVg1@-6B4t-a}9!^-u(<2j$onI$54^9r1xbUiYoGNw} zGvXA&h&l4O4!2E*Q`pnuMCpsg!vyp899Q{Tx%2GfSI?$(AE(^Ju$J%@E{ZZSG z4~q>5IlPS=(mRmlHT z9>zI#y0Dak)cA(aW}g?o56SZO_NJ9r=+W$Y{0k)K5{ee{uV*1Mkr!!68X*kFH64Lb znXR9KaGq;f&(e>#=bWyXeRkqA<})YZGbRu9JdB~m6%MiKzLAZ}qNf*{7u=KsE;SYv zwZdqYIh>U6Y=biXH&}xF&$0<*?nz`~xj|`e;p{dG%Bz6`-(bJZGL2g2oR}CqdsY99 z{F|Q8?tszlO-5tS*ivFhJt%VK$Dul`foN~w{R2vla|YQ4ZzK-Mj2eZ-3l{Jmoo|Uv z9LK^pM|pwJ^%n6_&T5fCyIIn_CS$Y#uWL->0o%&Z<`KbrW3@z|&NasSnMEUrXio++ z-{@ld*3ZvR7@_zQ(-5+^sD-j){ZH(-xlpe?tDN)DNbhEm)sSyhi5hBZ4MD+yf%WG^ z!*cZ28hUDmni)Ypyg;4RRs-fPIxc1!pT2Kf(Y+^|&e&W_jO;lr%Uf{QuV&GP8rP!O zP^Kzf2IL}}b!0OGw;?&yJ!`4mZ)Qb}bz^IFjq-ncpyLr2FRl7}S(9OX6=b?{mpl`M)Hz3v!Y>g7VB#rQ)vm~m)wSBJ!3Pugx zTw{hfIS#z+%FyW1o!L-6hJ4^n=E9M$&ZD`p(qZ59mR}|9slRI3x!sA|ip$ao?T2d* zeguN_fMOd?5H0iF6$F|qslI>i-j8QYr|U`0%c)iIOtGF1uI-MhC$C+yb7xi-x|AG^ zBZl%W6u+qA-wLN}j`0y}P09^6fn7$1q$(R9vC47d=vZkgs|B4Hm__Q<8JZnP-=-zx zM@^Xai6b@TuWtDK0xsB?4r_h{G4CpQU-t57bPU(R#iI9n3A}eDkm>-jG8b4Z&hYWS z#RB-fkuy;n|zOYRM!R$~2BW!NDS=d?4bL5=ea`1*+DmHqI0@lUhMsijr!zrH4CPo9@IJD{sg1-j7xCOtQ2q9k6fkldy91dL3-Ai5nz?H z(S!NyA!C)&@9u-pXugBjE8mZD&DgU*t*THy&Mo#SFoaZeUIB6}Q!*dlbxhX@T6#46 zg1s}Ljdo?+M(h?#SuxO3{K;`1$Lg9AD~XVcd+1%!cR|;046I$}v*&Xf9}f9&wSPI9ZCFR!(AxzPjqRS= z@T$<08E91=f%REtRP{wB=b0TbcUnz$Ivi8btHs(VeV=pqd6{is+xZ5?$j^-!$CL9% z^;m9fjjS@MdGDJU$+1v)fQ8yE$a&}q$qok!$2#QEOD%f^x%rJRdDC#47}}*04y5KL z))P$Lf@EfM1;15EJ1YQF0KcZj^V&49eNNwsxt&xIlb>b!S4*fI^>z$2yyfQ7{7cmu?Eo4q&OoN4-mFxf^6D%6-!S!}t zkr2O$Zc=(^@yTKyN;5Aq6KgTZyDFv=+4l-da7jaSa`pE0%`!yp#`*itV@{f@ znSXixoIRv(s=v!=E>ugZpz;{<4Ygz7jzX*IVBIz0mHbcHP}UH|hP+Soa*auIaNo<@ zVK>J^mL^(#ob}Xxm3U-GBP>bmg&+vA*CD~%Q88GT`8U*~xZ^AvA79@PJTYXOygbib zO#;g7N|}_H(reB?1VIN6W%c1zoV8e08QuKecZ)47JqWXj1`qP$2$d_{YKv7vc>t2qKui%W4i3~3PF$o6j%_nS zM21ZT+yrGUZ>W2XghUYVGA59XGyn)%u#?rok)a z3;c#>f2K_wERRHSXTq8}76n55Is#V`PFEm)VpM)WZF6_uDo`usM}0_AYl)78g(V`M z8cvFMIWP0qjQ0ktYV>P2O^9F{-2GuSNBblleJ^f{`f*=EZB~SQ!Nt)C zj!m9}uLbJdhR|uQjhWT>4`zk}S2B~|dwJ;As(mtUU}nv7K+2%Xsi)6$)e8+$=7nl0 zg=OR3->kAEtpkvCAjI)}*kc)}^%0Z2b${IAN$Q=Sk!?f1hL12-xW!_bhF%r-@2+`~ ztTlF3b#GP8yzTmf%E_V(_BD+@ig|lW2;|@b)Are5xz}T+bpbR$a^X}gl!dfukn!rH z4Sm$=&c_u|A_d&Diu=)fSlPQkdkXWDl%8Vu%MZ-m@p37=&K2^_eq4!|x>Sth2U zYZ%xGW4!2#@aJl^d6*l=%j1BeR`PM$kl%nw`)B5jBj6mWN0nD`i$y3}sK2f1WUGJk1Jp&X~<5~I^>2$1$8p=Z!lL=h@Y1L&x`+C`IP@Qy63K!mzV!i;P*2?sS2)h@v~`yL`#sTMIznv`xhoAh;|=90=4kXU~f-PKf&KXm8YWHIGiwt4|k$# zYHNwbCK(gP{RwQ*i^LSy@OLOA(q6_?JWF0Q?ttP)VM%q{@bK`Rr{EG3_mY~!>(tcL zMj8TU0TRY_>Dc_`aIh?@1Es6znFGywXBqvN`b*S#3sRx_br^)$m(72*+TY9ch6F%t zn3T+bWKjb~WvJ`gJL9uaqI+Hg5ceaqBGAiwUIiWFEvkPzf7&n$AZPwXj?7IIQI0}v z_&a3RtNlR6%P2qzD-sn)Azs&c)sB9NKZ$o;_sXKYn+b)7JQWhR-Ls?Pi%qpFX; z;!>+69OckyQnjwJxEk9Kr}MbmX{oSZ5?g$>(GTsl97bu>cqaeF4-gw0(nq(>1pwYZ zX9vbg=_5t~Wad#*Q?rx|Qqd~X-?Hxh$iZ~Ti8J1(@s+*D+q2PjA#PcOq{m` z#(>%GnzXb7+Wu2lb?VX?G{jP&t~~Q&Al!wEBoGxzfuPg}3+LPhOEOmVw z2&Nv@y5WiTAv#siB8ZK#YW=y5XBgw-je9R2xnO4k8R8dvy@w zZ;g>lU8U3X^I$=`9A zYh*}QHoF6mM`%L1P5WAZ*+F_467%|$Y3=srnuDpSsZL!^i{I*77eNteG%))H`6b1= z(TTLIvu-c4^xzm~!^%uowI`lq>U7#HB$&;OtXzy}mkOz8t%p**R3o_&bz{2(_pZ`! z*x00#iZgY?2N}(4&UJgDmaX>EJv$U|sn!>cbQsaIp8Qh4c=Xxkl6l_s+X{NAL;bI0 zVotoXSu3T_I~ZM1_B{kiDd;6PX6p_PI(Y`Mo+};jlS}A#;hp^>|NWbVn7qYvVAcwGI(q4DmNkUrqYHapWMl4(`b{R5INC^ z=~u?mexJ`D(kn+I7h0l)7(4=elid(XRo3zBKTfLgwqf$Vm@lGiHuJo`s(6s?dz?bZ z(}M-F6}>m74_!Q6q_;JuX%%y$v=UW)9rF7hkhbn!$b4%Da+JzJf$lW!b=TQfW4-F| zi;ZMYML2D~wgA=_I2~A?Xfs(y=ohyyaI+74;_lRxP4(=%EV`Ub80g*werjVeU4gc< zH(%Z2xKfTaKbtw;!J?Zam zN~b?`o_;!Z3et^?t4-Fa)jAo?H3Gfx1OkRSVrzYUEY)&RH+aD|qQ_C-A;4!UEplE~ zP<@PzW6Sp|+=ZS-IS_8kw5chcbMFr1@n1Zh(&r&!IFH&-ddp~XITT%Wqs0aN<5RQ} zVcTOYEII$BrlS3E+)?_I>>II5XZyJEH+>gzQyWX_j+zMx_a)QycPkaP^FhdxqhjN` zFc-h>K3w9F<(?l2yoQIV*1Ec3=2G-N=!w%@$yUBYpK1!cVEzMwSAa`(DRfm9q%i{QxYIh6qNw=Xk`5HIv|J{bw&?QI{| z?=kS>mF$gU#XcfSG-S>oNv)tR!|3;$G-wDI>J_A7^gDUcI?z+D7U(tGU_4qtF8oY6m@Tz8j8E=RfSVQ=-vY;l#uo2yPU z4RGbDb4=}@>Ob=}L9K}y^h4}z;QZ%3O2i53RmD!btnrP_int+*C8I%2!lRvZO z$C7uqbAqltSx*TUMF_UFmeUbtSADN=`g6(QA8dS?QJ>QqES~7#&W7psRrFgw4R3T@ zWiQdw7ra!@KG{w<@6|fD-nU=2YaqnN>5l>5kir4TrOz7rg}&wb^^${8CPZA`G37ak)7?J};MqrX#Wircr+ z5Jv*SPipn~n+_j%MxbTS^Ra`2)*5G@#K_;Upio-l#2e@TICZN&QYdtNJk|*`s1*Sk z3=l)G3=bhyHkA&1mtV=e5TNuM4&3-I$I++X>+3=OZjsThb+802-y3qQ~S3 zblD632BIlz9`U1>b1XEB9-Ky~nUG$vzwh5hC?86)#SN#`QG|oY+mq|TMn|j-OVutX zooI2%S>MCpzGJ+ z5o+i+kIQ+HW*X6U2|phIVv=Jm?Qsh#Mh7453GNK5L}j=elmh`g@dP1E7(B z<_rF#FlhAmG_C%Nsm<4pMy*RjuAT3Wu2E4gupPOPc*BFJly@%Tv}&;wmSsS0@wBh`+~bY+kO z|ExkX{O_CIkVd!x5N>dI*rVFLr`B(>tu=t}C&x^T)thIyQ#>^W(_j3fc$!!HZKsgD zD4{ZN2sr)^$#Td3Hi>)RlTYl7EGQ@_?fcz{2H=Tu?hTIJL?W@Gp*EhdNlDd)ulaa;d3^+O@d!Zd0X1M*As|2zE{Q>r&A>$k=^wMt z=6r+_Q_pW9ld3RUz&V#d%Na}djmG2{C~H?970@nKIHy-qzkJ%gCkPO1|3x9QP;bk+ z$HAvFT^zepv85+_l_$**Y}!L^i=C-75Ip-{vh7( z$u1a_>RFL@SF<&As;jB@s=(+DWYnPF5KduE2BL=(cOeOEJ?D|ycJ^VDifc}Xs0up; z75;u*v*(iQE5_8a&xpq#->JUSXS_X1X(B(77N^z-x~E3W^Ba8~n#s}<_rt=+^jJ$t zb+((UVdX25-zi4NBXNRfCfRwNtd6PzzLjp+`mU#hx*fCG!| zRvhugSM&^Ie!+)%cpsvXWY1AZ&w>pWo0UhEH%gfwtjzQwz`vu2#cQa7vtWE*#X0ge zjiyKCFFG4|#HU$GahEhxXJ7Q!`U&FZLsHarBuNnFtvRpSkl>L+-2HTYY^Zl6t>Txp z-S9Z<;o};3^5CG&2L?H5j*`Ze59VSaLxXm1AsIER%~3wu#C}OEExADg1j@acV!RF! zJLg*{7<6Lp{)peTkVg#0qcy>~`$>$Jcv=DFTBBO08#YF$o<{kB-*+&;ls zxicbd0^{{@QOIfpE|%s`dRBW!5zf~f@>K}teo_3{aFpw${0xxxbIWfbRIkn@J`Orx z;BPxG1t1owju3P#_LIiptiiPUt4br&moQ0;dAj_oUtbw!P2lbiTi3;6RgheCA3`Lu zBz8c&LX0@+TI3_#`V(Wc?mF%xybVtRpijq5yR{9e=Zx-PTCkJM?y~!s@gEaWsNAq? zl#xfftD>xlXIR3$0(X4iq2kG6H>S^&Th<9unDw8cAK4g+x3Z*?zM>Wd!hrWPf535_ zt_y>D;=N0Zmj*&Y4_+31x>kyR;7l2DZg$!|dL={vLQLp0#QLIUH)X_4rW5+o@`uj5 zoNNBfrS4&KDnBPZ2kw({_2IY%IEYGeI27I6aXDQu8nR6!F7rXgyvobtj`|~lhIdL! z^N9sXll=4;D2;w@R8qQ}wx4`*B5pN8MF~6@t-`kq~H3O#5uQR37&=TfMwuty9@FUb}+T zYM8je@{D&8h8)nX@eq&qy!;}qn-3m9Q>?T#?ps5u7X-C`X=b6qU#h0>-24(Xaw`8g zr;Va$t`Ee(DA3X|@zW5GEhk`d@rX;&lre7oQdu}6A8;JVYF>(lY9v<0Q1g4_ffVra z@d6vTEK23~f5oSfqO)afW%bn(xWhqI$B7jno=OAUJs_PQq5u)?lSk2yl7;l(5hN1H zS_gvRWk!sjzz2Be7 zAmv=vw0_{+OEnD*Ql(SlM8kYAP`Uv(c=>My_5Xt`E&nwI6Mxgh#6&4u>FtRdX|}Ge z1%OAw?&Ry|vjA_Dn+cdO09m*iaBh$q0^D^p$k(M2LnsIL9q3Lc)j8a_5vP3>SSPti zd9T5tArjy?sHmwSsKbb&`pM3Jf1PC$jevQC1b9gw79fUT%v9~c-o%pf=Jls15A z$h|#LDo*BFNiur_Vj~ENC}RVUk9Y0}>xk$;c-r(Ymg`}uRNz5TeI{>BN0jN;0XjwG zDH3=`pXN$_*zDaU`R|k{uQ-d^zGFHL*oci2bywmJ*j>4DrD=dwwB5_Kvax9osQdw| zBi{oG=s^52CqZBsm5z2+2-6%rSO_^Noj&}b0Du)wMC=U>4WSR4vUeu5HX4u=6dc?Z z5L5h88%9L0k9`{iCLT3@n&cy5oOt-dj^hG=Q?4WT)w6*j0<=fzuQDjkhc<``p3Mqr zTQf2uOAnlI;c>SI@%TS_=tW2-y^i98LZRSdmWts3GcXK%0myJj!b(ng(8=;ja6cw= zgQgkIt{{gqn=7@-U(k05hCvOt4$(RU47%yJ`14Yoj6H6)?)7LA@LdX7LDP3|0gMy$ zEE4Y8o*1;Y0*xC~4PCxV0~|YZ%()q-`UjsGjZD4psaM9MK)Q?acAIQVs10LL*PXRe zSpvS`0&w^rCvQGjgL^;@u9A+w56>iYx7XDz<|lF?I4&OfT{O#FJ@Luc-g0tr{=)dz%9t# zn@anl2UYjKK4~J+i^?}MlZj_`X3De#K_9(&p#lu_TMBF)@`ex%#SC|@^$^g=^6&DM z{2ymLKB&4U|8Uh4E|ynt()hUTl$M`#Il}95Q~kR_Q7oM63B(? zF|v5XT#H)J&|)6B%J8$zq$CjEUDiA9WK!$825TNYegS6>(u#t2#32%0*b zNG2a$9?H93A){?`$@a+khFiF%mO7bPn-$SJ+u!zVkghUfrSSo;X)m|@5GzCD?HeYE z+vVGq>+Tg$5aYT1Xp}O8>WWZ*-vzA7eF9Oiqq~n9GV(7XPU<~Za z(jKbyrT75xhat=NiB;HZ3x)bBSXaCUXcQ9K({k%7W{1h&!O(vP?3U4Y`tq;T-u|-N z+t)VT$ zojt}H4;gC;tp(gio%gDjG7&%qKo{Lew+Dc?PKhQ!IK*LZf$GNwvX!9Nrk^HsXH_dJ zt9rVqS2drkaOu{Jc`kN3&0!)Oq=Lx=tdtB4O^Niu)tCYUD49yKf)ObDoO`0sC(ui4 zfMEG`bjM5Bo+MKT#81l)0xDFuzf_z)7#TxgG_7<4sc~-gE%H~uvQw9xo&C^98REHP zN8Q2k-QBk|OgqQ?+NA*E^kE1OsM>;=&1*zJeHn%KX_c5{9H5*76ohAuW#xu&I9z9_ zqM+al;0f7Bp_Ndd=^e*lFlV$7K4U;OSpX74fXq>6E@wHt5AhHYxy40>P0UU+jk(@d zCrWyk_#U{a`;2;&+f*eoi!94XmNnjh{pVn>^GsbTuruH=6j1{bSCf6(vbdgY26%U; zxQYWO`44V)Xbs?Zlz#6L7$C>HQq7BZjO^?UQ1m7NJ#?3t`YHV!ug|;P1dB=$>ORJd5 zoZ$u*ieSGFm5RtWGp54$Tr}ks6v*kmHGm@~5EcD+0VrD?wF}hE>FGpuQ+jUN&?LAE zGvA59zNCfz0tIL}UH}SbrG|^H<1NujXTp#z@=uZb7o>C^_HJtj%-kHxRgjfG z!$HPM%r-KyjaBdbidK(|521qQQ^ueE_Q$B;Gr0lzg_Dwza5<02*GC|<3w{$%Gpv6S zxU?sefE2cCW`jiydPb=|4m}3ilg^JKRsh-u8{$vMKE241e^0zxb6ftvy7C4Xi$(EA z`I{dYuj>_%z--8)M8UQBo5*Bj#^X{yn`1bSzWj1z3J3h%#Y&Bx>I%sa8+`2~+cXu1 zrVuGxLqF%$IE(|_UDvj}SNRTsc3YOd$*sM1$%c%({Mm+X@iFW7Xv$RjmO&@zA~69_ zf2>Y7A68>{O%dEKk%a~pMbuM>1hW&Zk?%`i4?JmUgx29ar9pe#-rq6cj#TAg zf9|^2AQ3bk@}BDc@g34=OapKeAfJ{-`h1YPN*l;U9w)|NAfnaG45%-c?hj7^UWk?K z)nJ8{QZ~O_NWsZ1j?yk_$IFTdDprYju;OTiY=zeY?n-5hp33UyyqE6+YX~EsoePQ~ z%}Rr^EKo}^ZO?L*>AsrVR!{j-8qFaaglKVUQW}uMf7#u4#ZB+{$=HLIla=G}t!U}i zT#?=Ii^rAsEQzPAyXaV8>P>n~u|`gFC86Aw3!r)ljI9ly<^`<;-!FlFz8{F!LG{u` zkaft=W8H9e{q-uQP$2CSBjq`9huMMI6fYG)Ib4NB=Z_Qvf7dA{Pv zG=QQkgr<#^K)D0!uXYMs*(?8THh#eUAtolaBnm1ty-;J0E&=sdI1)>fV<=x@MMxc~ z3X|cWmwH|W1J*@SI|QjhI{Q3e+pp2fR>G{z_K@DGdEWmDkn| zzI*p>$FE=O)_Fi12r^q&wRS>%xxcsRIY8)bc!)VZSn1?lZjJKC>+0$ccw%ACGYe2e%f1v+m|NvqkvU(_FBce$LMKCYzoVs zu|mY{q7i=7gQuhM#WpJlr-7jKMd{5&R!-dg+ z7h$B@9R@(1rNf}BNygHlUlV2YeSk1Jb4D!6+;I{TehYxNyc{v(&3{q{$+3z31qX>!jb`bFSrZ8@|rZ@ zYTs6+JfgR`ouwNdOgW3ak;!HC^tl2E!GDGCsi##mR4o}?$4$xBPo0&#s2dExOQ~)>nfUPgrR?C+cESO95ATe8w;E?f{o5_S zX!J0@7>ejl4VL_@@RkPzp$X}sFap9mG}@oJlbcD&Q!87uQOpUxKL>(5V)X^pW<{15 zcyqGscdJNs$l-xcVebZY)X>=yGgD^)mSgV6Adqr77{0j~g#tZWd07UrrgNLtC^2^- zta1-w%z1wDUCy2kK$L)QC;DRMPlhjiXm^}ri`|9_up?yGj@T!6uFsy{Iyrv<)B<6T z+a#1SEplTVgzF`=g$;|1ba6eE65sC@R5^ScKO?5bz$#0D9F?Pu!WW%>(W!Zh#Z_S> zO5Y)8=NiV$=ybEB^8E6SO0WnRBX1yAh|C%=S%IG*O8R(6RgekpM*hv9mSoOi2G2zQ zT7uWv;TIAQC~wNgAw_op_smj3bnH?5UwE`A4-UCvC#(Z1e2e+LRQnNU-nkNf_|JEY zT%Ga1Fr+R&CqL|!-GT(~$H*z_FL0E8-`KsG*~>IHV$EZ&hfW2oHMNk>L<1Qlt~9KNoq(MWttzudgb9;>ZO>A zhL0fPN^`5JA|Jlr_5%|6@2ryUK)9Z zIHXub9z3`<7VZl@R=(Rp*vsGfh}XrOjUVpB?KKLMo!48d%X&@10lgznL}Z=*sb&S- zLx6n0tEy1f;@i#a-z^E&sn$WpW}Btz>;80lD!Sdvc&D-!H>*Kh+iOzn<(CW{%lYjL zS~uDqr_@triKfU0uOI14&N%|AbiRNtar*6Cm$jeWh23^hZ_bT`^?l+*#fw&(lB2$~HVAHk+l7;^RD(x7i{;uiG_T<#5c@GW) zZ7-=x=Q@XkL7xuVT@wd*f;&32j3WF+3 z{xebhr#s6samPJYb;h~r&z3v(!U(X^^$(Rmjxxx6X|2F-J8*KS(&?YzWb?^Cdlj$l ziqQgSkN>F##{bd=2Ler>N$<3CaLCwUvH==$vSHqOd9l%ltd*f1QVFAA$@cd4qn7}3 z_2P!5c{LV0W?f->8z2;GJ@LisuU0$$Ba2i1a~21P*ZiG?#vFqIbn#9~(+2!2K&g}p zBNniKid>72LGXsE&)_7kdEVh{)5Ct$XdYxdd5iK4eNh!IO^ZY)*pY{DFtf* zUKwC*Ln%NZ7P?fhi!e9{pxBy>?t9fc@K!^_#(m=JbD-6+u5}FefQV22<* z5z+GirtqMyk%1{!-baI)^3l^Ae4aD&Y*$a*0TQq}kh~x6-C3w>aDW*D3ZzP)4jO)S z%y^>V9#97Ybb%hgk@}0dMDIZHpZ zZO|HxMkC|;`})QK)>EGnJ$3E%NjspqG<;!o9-m%eNqVOadzXQIF#ebfbOW-#9ZRa; zBnqNtfechT_r__tzJwtL6a>K}yuUxtRM!Z^2|7?$F|eiYvPOrtSf08>Xml98+PU-5 zE99*DTRY?r=}$ z1-#hWMulqYkzP`pWXdTNRvdLwTH`$?z{Fi>oOmI<2>|b>@Ad zn zI3%^aX_?8^4PO9^2<%QMw?7&KxSwoy$WRMh?61lt zEcrnBgI@Y#5s)tHX-=&ER-O=CW9(r8=@c%0u;5c^r8Ll!v*ze>b2q$sugn48W|nnG z1X>@l`HtHif^|K0EAzox4FhP(ZSu`#c*FJ1Lm4au5bc6}-Qx30%HHV(g>w4SC&K4bs6Ha# zOe|3|rK6+cAyOq;Rc2Lm#_BU9+KSKN$Spqm@nJ!G#q!xw-h+=fqFX%jdNT?yRt9Y# zk;PYTTZ?wrY~Ll=lKN>TY^ZfKBoA--%<3Q^Kv%%{n)E3c^pX|23S42IP7%>JB}p)7 zrWR3y+;!MI%S#IAkz|E_A3_FsHWCx{^}-ea_MWl13GC67>nes>PL=tkW@VpBFTN>U zEHRrmosVl7GmEGhUb&4I41~boLm zAnC4+p38lqwV!K+%dxiM2M{14i(wiZS$~+)b@5Bnd_(KPNtOPgD%lL)VRA&|)MpRM z_D66F_y<)G=;JoK4w%GpxrH0>tFI$uZ?d0ADe3CtaHvw`h2$57Y>g2?JDPPWevQV$ zU;F+_1iZwjh0Az^IU`C$5Lm9HCnT71;9Xn=YaLM+zU5^yw1KE*NEW_8QkAco5MB6I7{?-ctMNG0`v{j=jP1^@EgMRe zSpY)q3)C5Lag}g#UnQKN--~Q<~fk0m7?`o zmj?B`oWLQ7n@(i3VzeW#p1&0D6)1_mjXJ{{P~+|4Y&TpHI=N1~}hw&0g~Aycu3> z$Nmja;p=aON!K~HZwD_u>KSQ$0*!P3)5Bk85wlZ;`LaWqA5~YNGL&6WferP%*MrrY z&44MW0H6`>P4@#d0_jP)S+CiytEx5TUgiCXJ6`@&lW+;1!+tF_LBMLi7bXU<1pa0R z=$>1?*Xs2=K`;HMd#wSgM@|qprUs)0mD)gNdpq(_05<^~b5VEx9g_X;YVN4R-d4+B z$(=KaA6T8$))&5t;4+!2o5N#q?9b%B%fFl8R9z!ETdL}aijfSQ#b}UgpeAp8WXTF( zp$zD=+BrEjya3w4jIGPn_uDFF^GAAQx<+OhxH;l2S>gV%Y>SOnH9yY%?!CI1)iT@p zYr%7QnOV&)jABoHUVC4ld&m+lNq21~Ua?%t)ilCj)sqk8X7o8^@hVZ&=ZtyxDMQU?Nw&8f2TnB_n9$LIF{h*WG*{sf=3|m z?n=Y%I8zosD0!#1|J>QZC68_dvs}Dl>5pdE%tVs&d*P6^Vdb6-#kXp0+4^zH>z~Yi z#a%6O*S+AH0lhFN{g9-oy=pu;ii1XU*@ky_?UD?J7;-5c74%4&ruIR_wStiNYO=3{ zH?I0U54Bx8>qcif50IuOY<$1l(qs|?RzSIqH&H)^>r3sl{W}&SllJOpv&)!Hf$oDR zFT+OhNWt1yRZx{SM%bk7W*;e>WI-|V!mhQIHtX!G`H;iw`T&R@8BhXgFK+(Ab|=(x zb5EhzxOf?UpTK|!R+A>t|Hb?XH+3+MK?%j5Wj_)d;Y&@xZRy)NY@k(xm(wqhxCL>+ zJ*NJ_u2u#xsPdDAr z$MBf$%EL_}*>y>XI^K^FnvcvRc20jjCY~H{#vK|*)T=47%$J4F22`^rO6e(5vHpX8 zC*9Q`hr%y8@i2q~Lsv-QrP}V4#BAoQ)89wFg5;=L>mG4+z()2tv)>A_+ezW0xC~~a zhh_Gg59zwiJeY&N?jHgaxnCly+sD{Bx@-~@>jKqz(ARdE&ODdjW*dAMdywoOe1vn; zL*JF%&13lO3|_7tG1+@X{4S4u#g4R=Hg=s3ZIY!CKO01xuui>QliOKM)X6u-}V zo~i5SC|X#us)ty$>fVcT*pls6^f%kT~P7Tg*^x|~X=WlO49~>iL3ppX-p5!MUx=s@Em2wqx?P7U5ET)X@ zW_Rk>&&lI3JQ0QJ!DYe81xkSke->j`RA2E%?-hr&BB9!!UuI#g#X{^yPP&7{SJfG( z+!nHKRI{n>&P28%s;eHn)c&rGSU09Q=*(SJO-nd{Fa13mqntTMWpaKt>df(LQ>Jg% z)6c!MKK@H#GAE~*AtZjEE!Yk9#}m4c7T?nMI-h}8Gqv7on z6_OUS0aXmCME51jb3VW3G!|sU0KWr~!`Lp;1RYegnuav46Xkl5bfAUZ$zHpy&8;i3 z6=Dxx%2~d={pn@Hs|Q3GdRA4fg?l@=?@Ew9t;5aO%jIwVM1>UjD+`mrUtG7wBo zl3i+NAM(UH!m^FRABF|BB?vWbS&wl*9qq@%y38b>H|JC!F?RO;VTdL2szt zxxpZa=DJz89vtesSz24Q5KjG*K0rZ2F=-leL-3dND-KHuu2kYIWv)~^rZeFa7_ zy)}Km+vJe=8-m`gxHR4+<8Cg^rCV5_%niHs>C^jnQm;SE65{<@ADc3nQeQMYHR-d?<8+hS{{X$b^Y>Km z2BiA)TQgdWq!N&9^M54!JQQHkZ(jd2yEB|Be~)s2ib{C`9Is0vL=as{4Bp)c5m3J| zEQN?f?-U)uK+$mz=vNwS$Deq$Ij?)KB=XK%$&(H<&n*k;vl4c+rNUXi&Kiol_}Z3! zYkEbsZr`tD* T>rw(H47zsZ*5yhAm&gAPAIS=r literal 25762 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 IXTsNi0|Q%*l>h($ diff --git a/resources/images/queryWindow.png b/resources/images/queryWindow.png index b62594529457361f9b64a14e52a5584bd24d0eed..e34503aff6a41c8d0e73d90b54291af7d5d84dc8 100644 GIT binary patch literal 72405 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

=q$X&(XJ6Y9tDz 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 z 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 diff --git a/resources/markdown/manual.md b/resources/markdown/manual.md index e2ca4a65..85f59713 100644 --- a/resources/markdown/manual.md +++ b/resources/markdown/manual.md @@ -1,36 +1,42 @@ -# **ProBro user manual** -This document provides guidelines how to use ProBro extension. +# **ProBro user manual** +This document provides guidelines how to use ProBro extension. ## **1. Opening ProBro extension:** + ![Db Connection](../images/DbConnection.png) - 1. ProBro extension image on sidebar. - 2. Create new db connection. - 3. Refresh db connection list. - 4. Delete existing connection. - 5. Edit existing connection. - 6. Group lists of databases. If no group is assigned to database, group is set to "Empty". +1. ProBro extension image on sidebar. +2. Create new db connection. +3. Refresh db connection list. +4. Delete existing connection. +5. Edit existing connection. +6. Launch data administration. +7. Launch data dictionary. +8. Launch procedure editor. +9. Refresh single connection. +10. Group lists of databases. If no group is assigned to database, group is set to "Empty". - Every db connection on start of extension or refreshing are testes if they are connected. Otherwise near the OpenEdge logo appears red sign. +The icon indicates current status of the connection. Every db connection on the start of the extension or upon refreshing are tested to check if they are connected. Otherwise near the OpenEdge logo a red circle appears which indicates that the connection is unsuccessful (Disabled). - ## **2. Creating new connection** +## **2. Creating new connection** - For creating and editing db connections is used same structure. For editing new tab with selected database information will be displayed. +For creating and editing db connections is used same structure. For editing new tab with selected database information will be displayed. - ![Db Create](../images/createEditTab.png) +![Db Create](../images/createEditTab.png) - - **Connection name:** name of your database which will appear in group list. - - **Group:** name of group where database will be assigned. Default group name is "EMPTY" - - **Physical name:** location of you databases .db file. - - **Description:** optional description of db. - - **Host name:** host of database - - Port: port for database - - **User ID** and **password:** optional credentials if needed to connect to database. - - **Other parameters:** optional credentials if needed to connect database. +- **Connection name:** name of your database which will appear in group list. +- **Group:** name of group where database will be assigned. Default group name is "EMPTY" +- **Physical name:** location of you databases .db file. +- **Description:** optional description of db. +- **Host name:** host of database +- **Port:** port for database +- **User ID** and **password:** optional credentials if needed to connect to database. +- **Other parameters:** optional credentials if needed to connect database. - ## **3. Table explorer** - Once selected database, table list is displayed. +## **3. Table explorer** + +Once the database is selected, table list is displayed. ![table Explorer](../images/tableExplorer.png) @@ -40,16 +46,16 @@ This document provides guidelines how to use ProBro extension. ## 4. Fields and Indexes explorer - - Select table to see fields and indexes. Fields and Indexes are displayed in panel view. By default, they are on separate tabs, but can be merged by dragging. +- Select table to see fields and indexes. Fields and Indexes are displayed in panel view. By default, they are on separate tabs, but can be merged by dragging. - - In fields explorer has multi-sorting and multi-filtering options. -Multi-sorting can be used by holding CTRL key and selecting preferred columns. +- In fields explorer has multi-sorting and multi-filtering options. + Multi-sorting can be used by holding CTRL key and selecting preferred columns. -- By selecting field rows, query columns can be shown/hidden. +- By selecting field rows, query columns can be shown/hidden. ## **5. Query window** @@ -58,9 +64,10 @@ In first launch of query, all records are displayed. ProBro extension uses server-side multi-sorting and multi-filtering. ![query window](../images/queryWindow.png) + 1. **Custom query** request can be written to filter records. Query should be formatted like WHERE statement. 2. **Export of records:** - - formats available for exporting: + - formats available for exporting: - JSON; - Excel; - CSV. @@ -70,12 +77,12 @@ ProBro extension uses server-side multi-sorting and multi-filtering. - Selection: export only selected rows of records. - When selected table or filter scopes, custom queried data will be exported. - Record are exported in user sorted order. -3. **Record display formats:** - - RAW - Json formatted data; - - RAW - OE formatted data. +3. **Format:** + - JSON - JSON formatted data; + - PROGRESS - OE formatted data. 4. **CRUD operations:** - CREATE - create record; - UPDATE - update record. Available only when there is one selected record. - DELETE - deletes one or more selected records. - READ - double clicked on record, all details are shown in popup box. -5. **Data retrieval information:** ProBro extension is using lazy loading for better performance with large tables. Information shows current number of records, recent number of records loaded and record retrieval time in ms. \ No newline at end of file +5. **Data retrieval information:** ProBro extension is using lazy loading for better performance with large tables. Information shows current number of records, recent number of records loaded and record retrieval time in ms. From 27516747a78171e4351df61b45f4581c00e8f6a8 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Mon, 12 Feb 2024 15:26:38 +0200 Subject: [PATCH 05/30] update queryWindow incorrect screenshot --- resources/images/queryWindow.png | Bin 72405 -> 72777 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/images/queryWindow.png b/resources/images/queryWindow.png index e34503aff6a41c8d0e73d90b54291af7d5d84dc8..2ca2946d1e5b63cdc733044a44fa1d98d2031a78 100644 GIT binary patch literal 72777 zcmce;2UJsA+b$YFR6s;GO+Y}m3J3x!2ueo~l#cX3Kt+UrfRxaa02Wl5QU#@V0z@RV zP@--H0fEqKh*BgFAe7J&lH7&++u#5F=ZrJXf5#o;&M`2_Ds#;_*E{F?KF@q!Us#wK z@^XuEgFqnOTQ~J@gFu`#5QxM2@Il}R`Nq2l;DasTw&8V9RnN%<;Ku=XT~l2Us5+5n z?=C0so9od{hX4@h=$HLJwp6*JVjvK!=$5{&b%^s4f#?0nxeOvp>yJOg&Q`~M89FS9 zdH?HA%(puaOL;Ful=lFJl`-4%8`B$Y*uA;I^qs^I2L1N?`A@$##Tx3AVT-99v?( zJ>iR^4EW-dE?&KQRrH*Ox`w<22hiBa9-1(+Ib37EbGaf1Xl%fzNx5tBN?bee4W#U9 zw6{MJzl+gx9qoU{Ss;B zDT_zqbq_V_u!>FJ=FfGdw_6pE64Y0oXCr6}q$m7lk8=LG7?d?+o$Er_`2Ob7nXskm z_UZF8&LKZJRn2qyxkAHkzkGW6!7&KE_tuy31d?H2M3d+k?% zq%YSO%;zAd;Q6^oWbS$bN(dfdmGCcfht)>osB!FyB+T zS;j&#ds#1fwCGEuhM5EuIl)k1Fa0TxutE4zb&S}E#%4A0Gne#WHanhg^%>%h9bvol zD=UY!n`7wPy8A#w5O_wU7q8mo+TppsOwX*{2k9h=J@*k6=jqkBbny@GK-c|e299WQ zQ^_&@^SwC~Ea4h!Z=(P@P}~^07(L&-(GwuQF@koXM6+md;Az}OkNS$zhlpMO5zgM1 zf^w64jI9Yp>|C1TWyeJ?_+mZlF`w2WUF3e>gnkg^)l`oP>GQzzbR?}_A?;o`SL*o27wc~i zf}gG|bwpaCVDZlDW3QooL;Rjr56;ql4gMtM?TGi6ny(Y4SB(1K^Y!sjIhq&WBF|z2 z?801r<_L4>^MtRw;gEd~~n&_cUehu6smqiG~N7sh_if-)|j6jy>>#oq7qpx)Eq zB3%BXMeU+M))iPulY`&z$46984MUsC3g*0sy}uU|LJ<)sx6KYk-KEVR0)b>A^QHH% z!h9!tg{Mm&Jbb%;`mX}30v?0n5c%w=#n3)R+e?PljZTU+sXZjvl>AlF_7I4g9rfwc zC$8S)@^d$m6clb*m6*Z)`UrxXvjc17o`IoZ!Ox#}Ra5%E4U)zhCX%HOhACZ5sjsqB z$q~;Gf_Pt%MBorXa^x9Studf584LAjB|91QMNO5KFd@98b~2?4Y$B_n!I zPfxEeL0o;(>-=NJ0h;tz_u%DiRHaKOdw}=FV+7@9$H06s$vhrOst7v+6!}XTLbc0v z(PaY0eS8+^q|QQ_3F<>-XM-%6J@n-3!|ORWERO0J8x#my&G_5MCKdP{LgQ!=~4CBe2n@PEcE_I;{uL8 zcf;Z@mAkmeru}!BYs7Q;Hv86$)W1-*`UBK z$mW)L#YAvZy!PolpKy=9BOuT#W8*hD{s{4=gF=d^gtTa(1x`7290rVDR-M+OvQJ}r|lW$EOW0j5F z_bQS14paBN8P@@tdW?=XO&6?oDAH$ooSQ0%UHQi~-Trr(OEl7c z#ea|rZ~^0ehOE8a4Z;sc9HK=m(pg860g@7fQ#lwVUshR8 zWRen{KJ5V$IAGvcPnKBsTUEvJ20z!pk8Fn;pyt{PO!yVBnKJxSG-uybIAwWCx@BwJ ztM3`F*yQ}a12Gq`_nxR5$8J>Yw_wO17iht85~~Zh*F}m`>UmC#Z)7p)1*vj&ZIsB4 zp@hJM6|oa1o@+7J5)FYxWkqzARFH@zvyB_mN2hOvFW1^(CVZM2{gjlI1zLbReVpj5 zd2Lpsn4!x0Nl^c0Rk*;c-Fw1iSc_T4&1`i&Qq!rONn zW4%4yW0^Q685bn~NbrJp?F}S}1)t9fo@A9oS`D*M4BVri*Xvo?NaikA`}fkG>WJO- z9l{%oYto(*SnXmRd^{V^It?Wfk1%kyiAEo&caw64uKCZzt6~}V*9%pv;YB5%2AGNX z2>MZ^s^XX%dA;xZ4uKfwINgFdWST*XY-Zj_M{R`m^JOv&?`L6)` zT*$$0wrmbNuE57l?=3shpmtt`-(SkU2L!aHKt!3yX}r;aK<3kA8#P zMPqGL7`E63E}p>WOGXB2;?bY06>`zd>qZ#pfYeBmbLBP=iJ1zoB7Z&=o}6dy^|B@f z?JK*)E!jTKn@i*QfJq*7UX;Y*WBt@_@U!`d-1$q=0J$BEoS&-qT$}#dH|Cxr4)igA zpFO$bPGFRI&rc%jiWR|_QlVMn34^|^lM$<*_|qtJ zI>>R>+xzqZzO&NXFT~GqlJ`Jf!yg$?^zhLy3$W3}kFQU4EOt zU`RxR8uu3MaOD#$DNIk$GW`KbieRX~6UTVcqWEs}$o_lv?Po40k7s8@ensl0nXp zf3k7=qmC~2J_r)U!>I>Ty3U68p)Z&t7kxZV!Uio@TB2d&2ArLkmV7(TBUgI)#_Oiv zxF+~To#yp?=lYQ4mD$ZA8EP*U!=j`0u+aRr>)a1z8v+2sZGz)vPL#U|&e~nHdg#FU zU?8FT9cI%&<*Bu+0#S=lg&fzMPyb{p!fIK zU-CxK26BQ_!&0}B;tw?G#)}&o7&yIGi)HUXvbK?wdjcIZ<;^-R=bCAYs6N1kopc)Q z7TVr2i5T6DaZ{+3E`soAVUEEL>Rt@Xbs0RD7`=d%DMKP!>cv2rRkp0f93mf8nm#=8 z>ifpq3@+rBzddj(D6UK3;wJQM?eZe`x#b6m(WT`s zSH!Gsjoq^(5wwwRkmmWSFt?;%WmDVxi*Imy7tX<&GY?Zp4ePl!KS+28RTV!pG_(1n z^%({fsCfGoYxOU_VCePTXFh+Nm&#jtrs_N8)bx5ZHt;CvBmgUHHQeIZ8J&r+sfCX8 zX2`6`Gr+B4S!cZQ&1U#&pTIMmpia-*>3O55+8t1V-7Y8A3mbB{YmA$@u(*v}kj8pHy zq5G?J9|xa?g{nuBSf#nP*{(ElUAk65^#)s!qfg^k&TWAmAx_rB!u}eW&!XlqlX-T! zYI?QE#S0xjT=u4gea2Y~97`4ZE7NO|`k)l?;ojGmT=W}|muCsE5r~hrCq6_1%a$Km z!B7}uJ9P2~J1oz&;!Y5$T?W=nrB+AVWgVFRS4wlpw@#V1hV9!6GGpgGq0zO%UvllrsaV!c8C6+QJ@Wj;2_t&8?v7#c4 zC9cz~2f9rYK{2(NGulC_YZod_ z4tl49XXQo-&)2mzpWdNrlbQ!ug|;lU-jtq~bWTPFDd)qB8D!SC4_iO? zZ87XK3#AbF(qkm7u(KVcGjC#)>mq^z-sAz8^boic^}cuk`*`iDlp6o+Y;n45cP^ zu5te;M@eYv=AMGe@jj!9-Cb1FY;@@dljS~Eux#{fQGuK3D-?B36G8pWCfoC}jb`GK zoZqDjTmm@tHK3Xy91?D(~6Zb{yl}&r*P2=IOZmr(BMUQv?8|wF;q&K)=U}EI zIo<5QV7%mxZ6w5vYWh~iEvTcwd)QsA(bV%wMH+*93FTFY-0)?Z%74olb~Bci2`OXZ zhmiHpDq4RHxrAN5vvBD1&^Sc51%Js*Yv?E1idd;r0WRGZ^{!!0aFE{;JZW2Bj)-OD zFPO3^R_e)b2x5>xU?PR_sF#-5dwV!+i0%^%-;`v{AS=YEtnxXSKMlF7$U5izC(ZzR zzJsq+?iD()aHBNiRDL!V&!qZZhdSvlb?k`0HrP9b+j`tKR1?X$+cX9-2jAJjG3r@q zs4F-RNyjDq$}QN*y|f=#iG{KwS%(5`lnm%5xRQaTWET*=3m7j&*_)+vt;A^qPTks7 z^R3>T^x^cq;}G6FrtqdF)~a0c%Ll{q*b2j^=LJuCJG9WWCsA%xJqR$ErBbObbI;Et zJa66ks%U^*6Gr|7d!u;X0-@r26`Ty`q`>SZhudQ7b$Oo~b0)YZAx@eAmD)6LEZi5u zP&Ot8uo&BhK!|9%+*$k<<03Fx|FN*m21h!$+#9RdIywXy)O>v~-V5wcRJ{i&EYv)n z3oCPeJ=ESpDvo0RN%M~OIaslQSMi#tLAdICx;vE7PfJPHSTH5#{b)rr=@PciHf2fpM~ZSHDkllg{m&ck639cnS1H4-`8n_>EWVCcdS>!-7P@>bUV zAReSwLpa3*2U)$WU2Q`mZMfdai(o7BybSb?Jy?i@S&0nOTiD4&b8}ee`9PNq}#cFiH>Ye;ZB5b`+Pm^bZ%M zF`)}CWLt>xpiG6y9%hyz$GHu_jEBKi7OVgvdK8pke_?%sQ?05qwtulRtY3fL2tD~^ z{qY`_Yp5)3Z+wKi9EFQ;ty~`Z_FkOrL2VCfv|Ye$<)5`erZl}Zdph? zS({#?9f0e2wOz&ql1aYB^BZp3SRMrhPTbNaW&;2DjhL>AkD$!BYI|kfJHh9c9=8wkLk&*ahVd74k zswXQ4tJcqYS3=x0STJSbqD!FWTBJ!lqB~6X`X{L7rHf+=4G@g>W?}SJ>athXyk}+3 zyy{6G?1EIiB12kVbWU*V%WF-`9|P5vKN`O!u0LR$K>K*q`v0XvwzzohqVk${-UtUI_+abggC#rm^Ld7Lo~v_4_xTSim5>9b17D4FXn%_m`m7PI|#yh z-Ffur(PzQsv7gYj(FWJz;rgU8fT|@BLIK;%^%Qv5?`t%7SNmY*)|uR_Vj~TvDg z@|Dm&V6otzFAFpB;~og`#w)uI-M+WXYL8y#)Zw zb~k5~Nv8~c{or#yzxn~X5>)>5H`o2j;w(P#UM8=Bj7(-dnXA_GT*%7~eSBrTeJ=6X zY)*tH7uuG5nu24shJ%mBzn%vj143-T*Re-2drqH-Lg=Vb zjH+kYOsj1RXdo|QF4Yc86T9GMkj4WSrux|o@3Z-lA3W6X+8P=smq)A5j5h{I3!Vm!ret?wWGBkwP#+Y4U!as51CZ@+ zgJo6(oo!9vcPTq3U2s+!PrMdL*!N@@mw%BxGSR>J89c%?`1gtZn?X`81M;-+vZic8 z(1g6Gh=|`z*kmRV;D|t=umL5#rmwCu2?TGM-}@8glvjF3U$lQ#c{qA3@k*Nd-~G?h z$=%;-U=;F4A^s->&+nJAUq2|telcxi1 z2VoaS&L1nLjY8DbQ zd;3+<(=V4iY$)P-{f=tBxR5=Kwk`A4h?3sz4QX`T$_~mkUu10p5-uOMh3<{53fDk5 z8U>j&stEYaEu->XAAI%w1Kj#-{=VC@Lgsh!cphZ_^NXhb_H)VETKI~#5z~^No4LK{ z^wa!{=eyqpRA!@{V#o6>vo_GgM6KnXWS`Va<)<|H)(4=An?y8g`SO~QYx^D7%TpIm zE5@Gd;mN%gKd|xUg`2cCAF9Y*J1ZO-tbwcBjDsYr!t1oOOP1m;U!8rWH(mXnS4`!L zYdo;qv>d!zQXr=-l32jI5;xqUp;AX-N+-lGVN1KS_!E1^Q9+k9{aA1UxlNc>nrjf| z<9ZLL??^?OXQ2cxw z<#YKf=O~}jCZAu;5`(Wsh8i^7uipuA4qPl(m-3bLi?BF&C`Xh~{e2OB7weEJ^!>v9 zk?l$_OfLnk%qC!+o()sFbB}`y5?rZ4|B{T0tMmF28=$|jRSt=1cl~oCzXg+BiHpmY z!5>52921c_!_Kf-RZTZEPFH~am3j44MN^9FfKWWx5OfZeVfS+$*&NrOOG-#m+6O4W5@@zFWL!$+s zuQWe=7`A5X!ocJN3+l*U%oCD%0l((E7IMR5YD(U=B1~tS8M9uTNA5{PmmwKT_Fwhn z>R;~wM?Aoce7bQ@)DT$`v zr;DE8+fg0Gc&-V8asp4Vx&ahmxviD`**G*{)X{6e6;~H z8$4~pwV_ta3u(%gDOpjM|HKoG2k+g~T@dT7ti?LI$vZ!sTAtywBD9QP9(8GG_6VTe z?eew~AUPw1!L`kHz2$`B?OpRlA1{BVLY@4Y1#$e2E5a8ws8a~0 zzH>^<*>>M4Q8}hElQqC3YEAUodRVg!hJUB_bPX?M0#?JBBdIQ2;Xem{Hi>Wzbd5m7 zu@u)@$2M`>*%;QR9&%g&dcoD_pLsVj={ zWyV7eC3TH!L8tAv-`+u7ZFTX2erH8!K=V`P9wNOO<0uu1c774qZc)3dja7$y&Kfj+ zc^C5eZdFBjWd~%h=3L)ByqSd8;C75oEwU)!Bw0s{nVl~Dd z$(KXCntSWR`NQs3qp_MttjV6Qy&*Rj$;I>XSxMCOEky=`@#g)`Kph zlLTNEuDerlf0-R|8i@QAUo;<3z*#G1HO2c00(~FEK_J|(m*9P%AKrLYVgy?6BiV#F z*?i}M8>*BK4%;Ha+%&? zK9W$)J-nF+Um2$$ZIDN{8M9Ak633Ro#HW6l84XKSMcP3fPn1(-l}yY0lSng)=dyy- zTT&lO#M*Io&@Mb2f`U@_sbOX zBHUMvXzzAB$(=IW&Ls1K7;x34&H1Qb(palZylGyJba;ahY#KbMLkRvJ zs|9az@g3dF%8B0?IthEd_~AnnA%$quYphZ96RYw8wmv z?ISMs{TY5?0P=`G_)6u|z9%mY(;yi?6x$^n`U|p#;W4aIYq)_bGqkA*?DATKM`E0| zND!&?t7Hd4OD`fv`w09G+Ady$U*QcofXTtityI4UF zCEMgp+k84}o!Q87)e445EWMQZNv}nFTMgc^+NLTxJMXZ+jGuFnGg-6N=lW;JsX<}` zP6^w*)e`j3#>eBQ{kE8~)r-CN%nmFB>1P)j-?J>eKFd{0IjQ}?(=Cmq_I&u<<3E}@ z&+^U5-JReMm}zkSWknpC4auPPkS2TEbocbfRaJ1q;(AUi6$A@@ZSw@__@Cgx7haaH z;4wpdK`p_MAp2l(1(z)QoD*Gq$>!ZuwvkFR9(t3AGizSQQP8y4PgTQq#osOaDts|a zJ%~fc%`x0xbEP{sk}KXh>g8!XG4?`;i`UxaUp>NYJk?*3fkS9(DT%LCaBiF!D`I)2 zd`b3V0^x=@kA&wg1~kpz{o!|-@`eCx4nE&Q1Kj~DQJ04mFAIDOtLOk`-q zQxfJGVdyAdI4uUMIT~xGX#~Bu*DzMl=JRItjK8Z?an9O|Cq!dsX~VoZHAtX2_Te&D z%1Oa21L)!%##QSr)+vISZ;S7}oS09;ZncsZMSb($6uWE%$iv&C8vSM}i=+<*#UZT} z5bNbX`1Cj9@Qow0)fIuF>%Pt5kgIW;4*cfZZVEA^$ma#WpB7 zzU+4PXCYk9TJ^J_pe)Z8o}}>sdqs&TrjMm# z`U^RI+9Y1o*;ct~e{-)?4Iq81t`ZF&3dSHY@)`7k_%O z>ISc1gHWxV9PIVF7?S(Kii+wta`de0@Z7{3{&Yx2!!?oBT`^CHRBGM#m)XjfG#zJR zAa*u5ItBuLG(8ZwH3lz$r}9mh$~3V(T5YcWVE^e3{KL`_>*G<(+tuF{6jFp*!$oR_ z`Tcm}?-LhwoxMJd`#a$LR~V(84bu6hZ`<1@69GCy0h&Y?+@9#m>EW zp*1Xa0x8;+W*q4IbF=TQN%C-XU7yy{cy-mAao5?ENuNn?bJM>x?%u1v1P+$B=v>Rt z=dC)FmurtpHx62UJ28Fmad|IisL0m-Lg06K(`BQQ`E#`U-h~qjmCA#n%E5B=ZM1vZtnN8}+5r{BS2=H&Qh#sx zipIoBD#b4LF;QncAkGWYfwK^{}^IsT;D5D zJlS?pvASGRl7(DYsx8$7m&IDYfXUmilud*fD(0R15u8mw{LI@i)m5N3FBYz8c4JE{ z`Js4U{M9M%a=YRWQ%AVV6xBIwl>aZV7GN7Rd*Xdo!F3LjJ^Ty77HwcQnrbtMii*?F zHOG_{ePGWCY~QC1sHu8Kubq|PnRtI!Ph_WeV$$Z-5E4f$Ok3_F#tjrxix*gcK;H}#Ujw%^LXi;npJfCMo3&0Or?5c!AL ziIXQ!#<%l`0FsXOb%$C{8x5g4fC~$`fcrN!@eeuhuV;XA?N0iCJH2K<3TQ~CtJ`En zNF#N}NrwHe4JAY>U2s~6^ePYR!4I#dum$Dx4C;X95_$3Gn>3zwl=^6IOZ<$L=1D7S zt_2ZNoHk=XJHGw%%LBBgVOS#jPUyj0{=mDL+DOFSQPPEe$6#xib}|AR1BYmy9Ps}c z0y{)+toMs3k8yn|ds>rYuD@1@k(Dx(&)Ua9Gv>KO1`4@}o+Njs$`QPTj7NYiHRQB& z)Pw(fQ{Ii$xVO9B)g1e`fE0w0{6CN=|2cmD6E^HWbw2+uU(f%K)!WG8wbj(X+y7{7 zb%t#I#QR1uqN3RT>lp3?U@s5Lcf%DqhupuvInK+=d*jTRGkvS8@81RitSgpnwbH5a zvV?I-peB+T(SLM2nmR0QL+CBcS-Ij`##|AnH+a*+`jyf}gcKu?kB$wyT0Hl8ZSm+Df_eExL@2weT>=jV_M6>^Ym zdsJu(_z~n&kXRCB;z}Vrv6bj^dGzW(S2A*os=_aPqtrk<7M7EoaLy%WSzw-(39pjY zeF|~EL^}7UY0(%znk4U-oB6ii*@JfYJo)<+2t*S0=AugP>h75F8hm2R{&QFdN4lAd zo9JiXJFxdpml?Sq{>x}-y64y#ZPAPajDMfbzx^MldH?JCemmRZaws0s<^S$cN7@61cE_!Nt^=q@3}rT;x#bla!{GT?1{Cvmt5PP zY(7i#lA>6=+65S4znLJPvkOW}?mdAM)I}7!&5FD`aiIgYJF!J}VPTUN`px<7vD^!E zkf=RZneHVQcE(|@xm!2WVd6)ZyB?7LL@;H2ag3mgI5W=&j&Np>G+J}{TaJa(@Fm`& zY6~^)qNmLZ2Rsav7Eoi<&Sq+8n^uhv0Xs;GMrWvTjTi7oF{^?J8yUS3QZUds4Fc%cQz6PtEr?Q=q=U#!?{TuF@M&dSA0w+6?B{GX(UOBPwl7oFzGlVKFrr**w`$?d~$WMIh zpaw+mL)H0Cbv@W|g40kSFW7zR6jEtoae%JWt5K7-T?7dq)ak8@KZTrk6SoqV6aTA1 zSqi!!lOnWU%%3aLU5I`#Ah*#!ziXzxtQ>qM_qe>FMgf>qAXyX$X!Ef`eB4Jm6Onta z!O{blwQBtxtMA=dxvqr2U^6c8NC^jQ+~xy&Gn(V!l$M$Ehpz#81iXSU#S-(PC3gvFSo@wZ#qBLD$$KB&%PhYx#*&=KCTw;YAb$20Doj-Re)%^*w`6G_p7i z&dB1{=-jcsX>%j<`(Z+{aw&I;q{ekML7l*=#gnGo-TbU~hcf$&MAv%*;=MG5zW1TH zCxAV17zLiUcUsxpdUW{OUE-PYAE??En@oY52*&0J#E$0%345Nlg3(EA(^Ea&d6R`= z_5v^ItJNYf+vU~Pznv*SN6g7ptrsvJM(v!11>_mM{zYDRej`?>QR90Fqx|hTnp0B3 zLR-8T*=KyIo`_Jmi2l*rL}_&#@i$JiLhj8-CTcsd4m?BFeB2>-8o87v{2BVk=j-&_ z^F{V|zB*sgG>7OzXdYorJ|E{aSHdXsl<}#3!LUzgUyw`0+E<^6z1)*hISJ4YlSyd_ z*P*9<)z~tR8@YtNylHJ_DRPTfXz*Cx-}62{!jTsVC`8Fx?#d9io2l1eC#_p;2xo4Q z>(y>ex#1lTQwvh8bqGin!%Gm_0=DDqe51^)$zfEaiImwmf9U7MyzPI(t}#3ylg&vGBlvK8A-n?Q`^gz~ zb9Zm}*YLO_xn}qpH^?QR`^rj$)kWlRg~N)H!GPf5@;?~nVc#A0826|X=4uCN?_||H zZ8Cx?Zm8N;d@TZZEY=|KQzZMMBHmkdoz^@Ty!^aAg?pEHgbPrG#SLM6_ss7+_mL{S zaDNY$M_d1O%i{t@5!PDPB$$O%Q{61z&YUV$$luqjDEPo?#@A_O?MWBEY&nzFQ&>*z9(~8+K ziE=~fE=0LY=><<1=Q8W9Z|hk6Ta4PR0ylj4{$Qp+%aXk0%>)YZe8)uM>4NtNFcVZD z$8vre*eFK!KEDOj_jEZ@|F&WDb>Zgl7v$sljOEg`2BJ8(Md z-nV&`^eG6Q2zKeo(I#?ce89d~eat2*teso%awNEQLp-=fr&7J%hp?#S+V6AO`suP5 zSFQ7=oJIV7xNW;^hDw~QcOJ#!qx|xysMk=L?hG?of}|L_es-3BJe~WQOs@?Sx?4Ks zXrbZ@(f`EHX=%L$y)iYD{oOsqTn2ZuV7M-GWU(&q+KoeKTHyW z2;9(BQi$Fq9S`QLvfefA%uI*%aD>(-J-a^NC}~}r`$F)uUYB6Ey1>Kj$MxJt$xhb* zX)0v<0w9rt%i~eoG|7zv9@cM0b|1(;Nn(S>lcgTRY%FgqO1rql1RcO&a7n2b#fkT~ zH4NIV&0Py^CQU9sqSXKD4?=aFGM*4^kl3uZ$bNF~!&Xs`n`Vpar(-SS0~$9L|Ad-b zUXi2tZEpm_aaHnARngjn@~K(**yg#k`~P;OGVle1(kax01kX)l50PJUIVI23Ja-Bd z&Q-3(wAq-ym$qZfMTC;C$;4D0qRD?ccPLj-*f}H*r6XsNr~CBOrp*OxE~&a5gYb*8 zJr7@q@#)8Q>8RK|sp;v!Ys}1%&;@%lebf*;DcHL#bcGDoTUyJ zqD$%n*N#`~L_V`Y**4lDJzpnpvKFeH7O~S1@S|`uRkv zeN{KHegTflR>8+}n{G5M_HDM&pl!1oUGjPR^C>S>2X%eH*i9hS#yZ=&UemVci2Ps8 z_cm;+oEF$O!+alO(<6X*YLdUgHXGxWy#5-E*hDE%ddrjV1NQXaHlF7SjNBzWpV~fI z0WUYsXICi>{rvgU!^1;HR9qa!QQjrn=2SK;)pMeW6wCAGkkq zFFho-65xrl6M1um9#gOPBtK}OC^np(v{}XSa)7Y;ShO zR1_s|J>H53<2;=PY_9cJk6=YpuO$)XIv8)$gwGC)_9B@9^$PSjWb>B<>0KjaXJ_)U zwE4-6ZMVyb+Z%lq*yq}iKr59LJNNS+Dl_+etO1d^RWI%Ic8{{1F3kD-n>toH)I@JC z%>am3eDpRVZQY6#y=Lz$OdyF5!`z%{8aXZxQtwaYk<*?mo`rT54r$}x0Xb`c+FeZL z;q!KYO3TGr{pJ+zTt0SlKYs%sXLf+LQ1EYD@!#YceXxI61rX%=$i8agcga2aKL7$K z>s%rtGF@_dU!k#IsIf)|Xo92C4gb_hGEC*A^6%`oV!u!yCmf(1I(Se`>jcj_{U7KB zV&uz5F)L0*_=l+XvjD#$I;(H)D_VXR zY7&sbgvf>bm2%!Hzs#y+_}MHyh!;vMpw#<>KRo%bt0EB>0Y+%l+Io_mk=)JBT5N5{ zu2%n-tfC_?MnW|4srTsn(-K}4X8@6fDZ);3I1^{*bNydcfbh`N!&KA_-05%s?w~Yq z#L){8y`OrtUm_7!G#%Wre={*ulo2Nl{vUAbe?w#U;F~;u=kx)$>)=XF{)>u1088%g zTK8$0{|~r-^y7~oKRh&?zkU3uqmkBIZi52!3Pr~0ZLYgMgYK96Xe>T1P9H#H zwF~=+vysgSS~LSp=ffAwe18Sx1086KBkwPtmss`^iq$ zb_JIK%9NA`WKR9d6oGKAAKV<`2T;fEh6BZ>0qraxv!%*S3&78@K%(qbRRtiW)+}(j zcEkYPvIW-Q^pMnUfv!;F#nx)`KuYov`wcq_jIDK z)Ad+NTO(#EgufEkAc{hW+z0S{J@8}$xJAv3NKppEI9Kv?o(9*#!<-f%;}SM+Hu3|@m*7!r6~ z7ZLcRe;UZL^@5rT_XC2?1_k+hlj6aXmJ@cOJ~+k}DHuo3QjgKwFcInXD&m|ohwj>B zvqYAMOhmb}=0%m6`*~NPYC%{nXa?TDdsbZbNvsyK`^t#^#(ZyZ)Y+W=;mO8;nc%Ub z>PzoQOgbf)d>cD}#Z-7?0SeSdfq()H`@f(u74LC@NmgY)*0*KTR@H}CrmNhNOpIsd z1*W7*pUzrW<O}qewA#d zc0LRcmy%_1QrFNG^R-1!=d;7BR<6j$KiN729(lMwUf2~9t$_TB1fy>)uc!%v6_gd@ zxhEuP_?Y~5iSX|&BkQuyQ8x8`?q&eUBYhQii7UD9*y!(8>6S3O2@GD-J}!$`za<=q z|4&?2VPBoEfX^3F0Wtwx_Or|fIj4s@JA5KYHk2!*0MR5>m+ublS%N@{o%i)0OT}+} z{L%Y~X_Kho(2Z`@CQ388s>w-oAlI+b1r4NorPC|=E^jf$g_7$OtQ}>{udCGtTAxAy zlV~mFQXX6cTPKIM&jNE!J4`7fA8cy}#e`uyu~Yg>`yf{ua7{kgIhh}FXj)*#E%pSjPs zR)o4~pi?EjaJy`I4w!l%bK&E!pY3fp&0v}K7Y)(eza$=gWLs%bOwm^ERJR_rrL8_T z;1(#WZ4s;!yoms`-udY+h_RO5uC2$d>hkykKhrKOm!$#CWm9{>Z&rD+{|7La5*2_v zcDvn-ORfg;$8rjN6oxAu=fS!Q3(u3ywZ^h~wU+G&7y9Ot0!?7w_ui_|SDMf~U(W9o z1pcg_y!~}&)HN~wH){J8E9=wdVrNUc4io4|J|;At9>i<1YYe-u!Kml!-V|6Qcz-T!;Lp!w44m|sesFP^M~va zn&jYimBdfGuMTJ^eC^rRq45Io|A2D<3hA-J8>UL~96SFCwQLP)EAh$`{2@Q;C3rrE zI6esu_ks`S8xoO!@v1gpN?xY>NbD#R&@$FhOles9X(r;*BE|ZXAKXk(yf)HAeK=pM zq7qh^*5{t6wkWebRRVuAbX#Q%YezWj5bN0V>5eK}ttK}uHlbi$Ae>zA2S2@#zcS0X~gbQM- z{pMopyblCO*%i>L65>1KJN7g&P6aUbN{~=xF@bfdC+iAL>#v|FC{=NYPrT z78||A+HT#}RP{-bK1-HEWY{a4Z$1s0EHrTcJ-!8&=SINqWb|m=z6k!_%91z}5mAxj zYPaNTQ;q_OfSp{zHYSA|mY?)BFJ}v6x_1UT%R!ug|35+jQaW8>*D?~AJdZR8zmoi{ zzh?upBAgVJV!?c+V$SJX+gf)gHu{^alUF#LTk8A{+E#`8vKx&5=b=<(1%!?v5v7Ck z5h~?OIl=TLQ!9m&$C zbMUPX1HDK1mT0Q;DfPt!&_laWDT<%@FQrcDB-P+}pQ~QZBAsBHLgiE&Vy(h-KjMxO z#>qnhUv9Absy}C4op)I0Pt1{x#kmaOPO&6&_Oo;G?uA3QezOLcK)?4NpGJ$7>o~IB zv|@%|=%_E`%iKViR1z2d1@O4LmE6?OHq~}KE^-$au8d8q_Ojx(WHa~i-mt5#4Ns>1 zX$_21U$frGHSG}8kN5rYV8dk~PpMC}buAv8Yex|b?Bvh2%pBYt03SZb(QkXnBDcJJ z(7ct|4&XiOF(cd0ff31sjT7Qln(?n~{ge=*{J1OWb&imO4jDH&Mhcihoyis^!>vak z6O58dQKXa9tI0=A+#;*L#KA}V5j8;jD_YkUvW_n z0~yKN#~diB6nh;oFdY?H8k++|8Q<0P4Z*TxkKOVSp3W*Dvl@V8MMrhy2G=bGJvck8 zZ`r;7i!{=fdi=PKo^a?S`%_l%&2d}OJeriwS`6|QAI zjNxyx*fG|W?EIDT;N0(Vnb<`ESvIh>voz$O;1h`)8qO8t`X zYnN~U$|}cM6W&)3d*1@5v&7hfn)TcDbtU0AadYZ#oP3>rIndj#74@SGp?V__;hCM* zH?L;-zhS=UD_F}sC|2bJ#8(+Tl^*g=OjXhYR=Ck-Af&kXM%6yFzseLV6|rFK;@^JGTG~>QVas|yb2GT6 z#d}{#uPmW>|IVFL5?#{17m>fWI<)}VabJZ)jT6pteeL>vz0jajCENWs{%hWHgWD2O+}0$PRhM|}>ZK0Y0@6b6 z)Ec_l=JjN{tl<3aCNMr5s7ZNnyqN{4cB zD-QPflh%x+V)aZ0;I~}>`ue@bd^S$;|6%XUR7*m?Dj4hoLAsKrSDkj5(8vBef_w^Z3o%8+ve&638_x-pZ zkNfu5Ido3rn$KrG*Xw${UeC9%ZO>>z%xn9LWCiPFNCj4%uir8=Xv*jw463fKkW@d> z*P>c~P6#)?f37Qw;-L*5%X_87TJujcr~7X+tUe2*47GVS3h(pbYxOcL8rerao+|%M zicqnIJ(t2MOMF90tK6hINdd<3pSSqFojzx~VbUAMm2*aGcpx;;iiDQC>Igs&fc_bL z{Tdnn;Z3I+(#T8FZAJU;{~+X#T|Y^$3m&cWp4$xN`JpeMXilWs2M2_(7XKY6B=dLb zh~S{_|Ei7vmX&=k&C~a*RcguyweR0f?I(&;QUq>(x4wS(rEFZ5dXW6AOyG*DtL8X8(eQPuLxas@0MQ2iq|hfHw-MLyS)bMu9erj*Sq8A*8fnb+QX~Z zpS(YwBY5^NEh%j+)~SUM$XaAlK)=(XFbrYUFTH~6fhKng{r=yz>cRtKJBQR}%79`N z4GRRP=jE1_NK=P^sgaJB4oiCx3gk)qHyw#trepRoam9?&S&)M8=? zl!c29_P66m=kk5DTU`(LWK5oGbedCOz6RI?!2nRikIXR|bidL~o_96Oeuw)yk-mqM z6GF$Ye#<_0n#vBZ-`Ws!|IM@&!++zbA%b7Or{Wu2&6cEIczn>n-XN(Dv#by?U+*MII2xN zYF{a-DcB57vV`$g&uX*8DrKyS&THQ&uH%w^`}Fsb5VFWIXlE8Y&B z`=S#`wD&B`PAV57j*AA)e(Y9B8tSe~m_c$TktFtfr?tB_IDP!1qO&jOMOzo>fYPv* zc6W2`9bj=fTr^qFumK`U%}35>^>D?Xg>lzV^)!i~4V@zb@dsnB74bBlm+9H8yYpj+ zA-W4#e4jcUu&eP``YL?JP=CIDbodHtOT!7^#I^AQ*R)&i+Ej<-4OTS@T{2zv*4z1h zda&BA@I@~!&Be15QhkhjlH)4h{@U7`|JkJvY9oKHH$$pYvt1}kSk7R}>tg2Q0@&Ua zPy;YsqN;b@duq+JlH!-upMIyeRwHIzmUXItfvz?Ik>>Ew(mz?&{h(3f=H}e(XmIu( z2}l22Zw3IAW<*{Q^@(5Q>vI~{NLn$PW01(>_IXG3tTqws@O8oQpSKFH zT90hA%7jsGel~r+!>3@vYLe{QbJV*kpQi#amK1G?DUE}P{qx!Rdamz^#FOQ-zi=!G z>qna{roCt?{Lmt5Pizt>_B!bYmB;*~2_dCqcRA*3h!HkL@2WE^>b=qoLai8LA)s0{ zM}&9I{k0WY8j!6q0GqeOKPPakIOQfx3ddy=V*XN>fk9n6|6lnpvwCMK`F$+>8G*Nk zS0HHtS#(xpbE*OH4Zx%{1>}%$t!Jc5CY2oD?3}U6aQMPvZ%@O}HA$h2eVL79o!iq6 zxhfeInsYP&i5g*S1B=c&k$BWKtY4t*busRgCn$-QH`Cakn-X2-I8lLw!IgJ9CFe+u79}yPr4O zK8QU<16MZ5FC|{!?Nl!&STy3cn`Z2T1xt1cbZ(T>4t`U#CwND6?B^ORZK%4ecRb(p zZ}0TDV`!K_$l1GH8a)U<&6R!nhF6rbg%#aAF|CkcS16zLA&Q|}P3zNXV<`a2;ReouVdkk}`EIDszt(ia5mV9;1Nl5hpC&6_b=<2m46;9=V4|BG}HPCod z46@F=?rkKhk6Bo4BiYM?hf%eDw(NF;t#(**OhJW48|s$%BeOaUs&$8IG%+wg#!0Ya zWx+kG!MjdIqC9L#aRK9*{vZxo8%+qbScD^AO_PfO&7EfNI;aFP~hfu$zJ7x53SN%kV3Hb>Q3f@LNBFkRwiY*)D33McZdt6mR&>$XVZfYY&Cjmq=j zyrB~I+q+VRcF)n1&1Au_H*Mcsva5vAGO=#K7DpNmqY9aSNvM4cp#U;pZet9jrtOk_ zqOpp(foVm#9RfrSgl7YK&wkcxi-;n=nXwKl*TVY6#k&T;cD*XR$|s^UczU@W9ol z&g&MrDZpjx@YQ$}BXCiH_JEm_?2GFR+w3GEaC%Zp5!35%W{>Jv&Wj}8wnyy_duY{NG$5|D-&e(2 z`bjI?jfMaR-7jx)pCJC0!6>#{m}C$|MLMH-IJ=;Qq^D^5j4@K7*@GJ|5gS0MWsVlB z81@r#__lrRP^iuqwRP957P&FzTwLYSIDG8Z_os(^SOXl6#Px_uIo<-7*;5}W%fgMH z`M9Rv8_u%ncRFKF{;Er6Pj;?Zvv#fSz&Fh`Yu0>v>d)w#JHV8@^Isc(MdT5aP&D40 z*044yHT4v_DoaIH%BgKUn)SNh67H1yH4Vl91h!tE!mzurJtJD4wf6+auE5U5Jw=+3 z;*1TI^6#LioDqRE_Pd5EH_v28=<#lv5Lc^|8B%Wx>k>Y}A zmMPvHRb%qR5JO!GrJ?h6U4}E+AL6AHY_WSq{P2zT$b`We0}syriS_!~Pg6MaLvFUy zf}Cr2MVg5qyimm0cawU2W*)kQXS*JsUugY8dS!Xu`Uo5BitbghN8OR7N9X#-Wo2Q% zJ@EEKG9Dha?sp|}A0-V9w_|l)ww7?zVw>f`nPEzbq8>vibHW~yeR-)~)`98tkV~#k zDgWOA{QnLh5ShO!`JaNt|0f*46-~;M6s={g4C3DyX}gMJN~|x>xX9B1=+wLmKDg}u zEkFk_26Ge5i1EHvqdLBg$eKJL9gYMljt%FeM8?V5i>eT`CUELC+PtHk0Fye+o3K?$ z%vxV7ZL0fe4`2YoY@-tDl_wwhOnff8tn3~=`3OM$bh_;PTqgn8(pFN zQpGfJZ;<9?t2zZ_*~_@8#we@CBk?C;Dw&P^o z;CUj@fsZ;tHfgi!{MSEQ!0$C?hg~V+NzrhdWse7qXS)~&4+Dnn-T2krhKqu5GJC@? zFq^)#?%q!ZXh&y|#T+f^7iEJO?3JNQw2Dnl`C(8h?S)Xnj_<4COqm5BL9{iYO1Dv= zI~l|aVIR|*p;T52z((3;_2zIeWADqpm0!Fqa`iMU|dd!5zNhNsas^b+Hz!)my1~W+`N13k= znW`4Xip;Brqu;&< zI7%+iYsVc+DT(rLX<*l$+Kkcb^Oti>^0FWT18{xtvqU#?eP!T?S&9b%J=CPw|D|f8 zuzbwpdqi^#2;8w}I*o5X5&c7Qmw4N$p1*?cMpMd34d2UQAn`5t_jVaa=i z|Ja8WGkrS%i&Dkp59^_DuyHib?3}j1nC_a3Q0%*77dYoIqb4g=Kre6OQ57oT2}03= zIyjj!zOA%xgMacPRLJv;Mq8>Qc;=JT{iDg?TGEnEYFAgA%C@Y%RB22GQYJc1wlMo6WRib0|Y6lfHbABLH%_bMh%nV&jt(l zb$C+q8ti3CKZKCagdux#mLr@{oS}BSwz#W$yK{Lng5$p=2!Rji(->7xHOlZfW^67g zMh52ddj)J(?6i5d`NHBAu5ZzoI&5j{g_XL3tH@>G`zdu!Y%8xV0r8!A&8gmCasOui zWp%+iappZDdZ{t7n*=^Q-CnZJOll9WIR5??C4z9$ghRG^#`LNHkzz}R|3yn7gTgLY zhZ^F}Sztp(Pi&if+Sw!IdD85ojetkWf`rs_>nB}sQ?+VR8ELwcS)d(N#knQyc4;Ub zZb$a{@JurROA9jf7W_26BSTHk>(s~<94+^VS@+ZJQ-8QpH-i15C>NoKWEs~TJPA}F zd2^9UjoYEqhje-}QmbjlaDKl5)6aa&B>ay7!iJ7`MWp7rw1B*clk5@tyqRdaCEd|} z<$Zv=JLC&eP|h{6QT~H_We5VQ9T~$y49}i8T_@WG;PEov5Y`Joeuw|7~ zPxi2tqE?F!xLU2Kbrsa4^U&u;hKd;m#V4@sX0e3+zYv7gGnF7koiU%jbxOi>M{r7KvN*Kn<@d@PfEhZ90+b9*#40Rm$xpiuY;}s z*HuoV*sE&Ad-<~Pig;G&`CUsQ5KkCY%63VB>(!qr57CD$w-!o~+pd9kIzaR~YxD%I8i8Sojo~fmH#`rr0>K z*Or&G1f1w%Z8@4a^Ss8DlOW!i^(rcFN?G+&;d3m!x{BhHH1k+?1FBHqF{(stdurP( zK-Vg!dC4(0K=*YT#h0Cm<2_mMn9GuTEn#~aG2*#SAFHI^}lLcKn3N&N^|#Mb?A(sz0V`#X%8i78RN+O(lpLZ#=dPJCJfM% zy!l@~r`mZ1f|7q#zWSXXUZAI0XKr$OA`d>!@$WKFDca54DWQ;0r%SlW#jA%RYT-6l zj|?=;oquT2_fhc+Wjzqv4%?`5zlcG8wb?U=+@CNqZ4*6D&bG!^4MrMrAMC%DgnVwy z0lZ8^9YYXsp#bfe$}|-b6ub*4NX~6XQWFZ!7Hkhsf88jGG`*E|?;?nLT^bko@ZcIW|t$%1~l-Ek~up6BW6wy^TCSm8l;{*f&Gy%-dcP_#jU)eEk=;9 zhA3M6pf|Zlr0OK82jy@>h|kaOx(}hWQUyU4txXpJSy9lJ_|J{547%vzcR_je=8vB0 zf7Becc%)t(xbtnGf4tbo|4|OKBjQxf+7w>qdVtzr{9>N8=3!fD%nnXo-B_FQ;{{R( zXxOC0jqy)wKPc}m3#{D4&tHCd_uC&COaOmptC!z8V3vIXQ1S76^)sVF(R9-2lkIF@ zF3Dj%P)!_F1#ETO%*c-{mO%Hk(A{h%fbbI{J8%|uJl*9+7EkFQtl_!_a7m@ zsLy_C8LL^BxJ69AztZe9^d<>ZI4>yxWIG^zlOfkq62c?jEiC;MMg!Z+2vLBkzBW=i z9yn7zHq~gqPy{le5QR1aI1U*xWIkw75=yv@$nQ=x5lF&-u`4OzqQ0~=S{-8Hsb7cR z6<{%y4-0{i=_q_uJ?DNO!|YPSG#23`WnO|=sb|N3W>iMwJo}pMk0>+{V!&QGrMh?F>iW61LEw@^v_5=WwBS|I z;$el^`ja{lWEoim)C}3j6Ys?xL6=nRowTJ%gNH`Y=ff%bBG>oCetQh)$1Q*+Y{P7! z1LCRr8OZwcPXTgU;uQ!Q`&6Um%K`6G+K=TpUNMB~w@CO~iCqV0{&ym^VJ z3&kBdGmgnV7o^7x%cp7j{yj&Ng+?l%QdrixhuGTJpklC{J2Ro{TA2=5Qi~sgFWN_I zyYvp+kYp6a`>l5tRf{GKu9pKMU>Hk_wR&JsF0~f00T&$w zRnc$TQUmnd@k?dA_R%_uk2JKkv#mJ`&Kt%8thVXzU06`R95L%~Wul}=>k6woF(4}_~qH@lcgFU=+Z>y8-c;!s8@DBV0ScXf% z5`03IAF7>0ec8>-{w4;s5g@-o9r7BUH%9D^Ww;?%_03qlB{Y4=ZEJX@boMhnoqnQOkz0Is|f zh*U4iyWY1IV5&l|<76NRJ(K3``8F)3J%2U)(mbBh-r_EP<(`bZXgp$&s4k^BcfVmT zJbc#S0NGQ!irjMW6FzKY?xi$UXWc3Kgrud?jN>(4>m#6QIQjupiSXO<4Bf6Wn-$5z?*q%+6 z-o%vWU+LQ6@8`a>1$H!T36RmR^90FmFGW{Cx<~AIX!&&rbTsiUWm9tyi8b%Au}Njgrw4fU~j`+aqZ2Yq2CbT3HQ zMbA{oJTn&3ALA!xn+=`wsID2ceVLp67j1`WV^8=q~;KM;1s5&YR>Hle~%sN-(q1%fN z);=kBW45M)Nxqa52O5**_Fhu$ z@KrWek#@Ly#)?`GwHLvn02pa(oXn<%iwcs@OnAGQ8_o8M!_MA>*QzVu?+a@?7X-7( z3;DPqsmq~LGUEIw|F*8Y2|1!2BG*}CtJKZgaZ+SFte90}&3hZ`7KvE6)}`7A4$$m3 zOpa8(Nds=4z-R1qL8!6(F8t-*^SO+3Nk+MtOkp zyX1Zs`w^SYHs$RbTk=(#GR~0SG^%`8abrW{%s^Y~RyPG_5maTp^>z&PtcY3fd&`o` ztL(lN4mp|xB$atZFw(n5mfIChFv#)tU{aligm=>KR ze-GZake|(62qk{dk{9oK86&w1UpG4Cgh!8_4z>Fe6l!e3RY|Yvm4YTu69gtngs9OItZ~b5H(qyz zrg5BZmoPm?Fs8ZTr8Ayz=5gdxz7fqaP_x0Ql7=Q4+tP^ZxyOI^(u=|xVn&MV8XiH< zhKqdwp>o6L23BHpzU#s;F$tQDlu(gy*2S=18ol5GOLnNg1 zrgkA|ynI`@P}YM2u>WBsM`^biXH4O)7id0%H}{md12i3Wc+tsA-fNZ8F@xg~7|}9g zsZ0ACdDy~q@&)dnPYQR4dmr!oF&7s3riOT>6|ICpIQ8eEGHZ|g&BDvhYCbQ-nrjXk z>vTx@78U>Y+rflR6Fw`@<7PbeTc|Sn{4EeH`3aw|_XH2`ACx@`%6!F-79zth=4YpX z=_4&A)$GyrUHdsKHdTA&9!BJtzGzzo_3Sr-VMJUbc;G6Zr)qV+s`-bb$8Gb0l|=ut zU;aOt+=NZ`@PB1!RY1FT@CBt4)vI|}t7n$-itJp#5#ix1{uun6@<5#f`eb!$&uIh( zegE!?RQq3In;=fD7{SMkkJze#qd zYgELNK%?+4DY?|3BC8Mfy)&nQ6kDd$$R7XMhg!^Rj^pak6Eh7b*DbwLCH$7)KoU)H zH8g&V`^C-#-*IU|-d`49?gnDC9m{&^dLSxKy*ert@%_&OwRZGJCKdt3Tnh++yJ^en zZwH9OF2Cfcf5UnDS+6a*bb5sO5BR{F-k?q20s=T05Cz)FDfg)D(*JD*N+*12Rag81 zYUv~u`dQ%70#TvTwqym-#@k#uPmuwH3Qx~^@%R$}|G=Fsg%t6I#ymmus9sl|x&_QG zS@e@LHJNVE-*LT96O_G407pRsoRml~-|}-L2W+TpEq7aL+X{RDVXDNiLrTtIid73Z z{u`=A0FL*L)xHaJL%n|OW|v0V&5#lO5q`|!oD5LcTiZ<68S;DP$b$M_PMQg7?3~|-G)v^s~x`b`85sfQ6ua?_vxCmYEYthnM_d6QMdP}>*={E zqJJ$k>jW=Y%+(nuysKW#+`NS=P{^CR<0A?W1U{;39$?R-p!r*80+ZT7`fz^ql$~Gq z14LSB!MTK-_dl9@UCzu^n*VI>Wt#MgROW$sM3VPYj;_#_Y*QMzcQ_sF>5oApLVELI z3Lr&!Kap_H;E@pTcFzQEVb4~nJ(cU)*%*fBdV{V(`!x0zG**N=>*viMqlc5~FhgD$ zSE}MsQ=Ac$)m)GiOUX0YSa*6jBHQ!?ZNRm2VB z+8I?u7Z43|aqh_;*K{PI-M$z0R2q*YE?mD~F?U~<8*!TupSX1pEt7w03$8rFyG0ja zfcf|$wD9E(dC|FHWRMU*w`ata4UeV6+M)Sd4c}kK=b+OA(M~tU#2;4vXcK6cMzB%KqutJz=Nu2S`GrRTp!bXfNS_&k(lX z4uCbT85Dz2b)D!1pxpoyAJT615-FYnL6CN{rxUhtwHuVB3=z34>g(hQrpRf7bg8=S zE<60=FH1m`-98g9p)pS_Kr`-N{RWy*FvHA41~gPUCn@&(KV!WqA0szr$?*wwF{jAD zgf8RiIfAR)kL;!!NZ!!83!&^L2;W8vsY6Zm4Deqc4zx5n+=JUS&L1?ZH6vIV1XQN; zTs3H6OgkkPTMr~Ex?i23h~Q(bJujk;UIR#zfddioF5>K!yTO?&^}+e&@MbGx4a8M> zBA*dy_yB}Ay>-WbE$lrXG!`=F4GXtF2fv>C+aICZMirlGhE;ZZ+CO?T2SS<-T@6*! z%V?F5vb8%eUH2QGh&Ke}6_AFl0&z|F$oIHr|FwY#8a3Yj>iC3dsKz8WuIVT++h_pr zDiU5TF*>~>J3)@Q1^kgQIO6by*SWl(V%nQtlD+88(n+V(=FZ1g&k^mto}EZBY?bSf zn{e;`0+1>)zvX<0Y7Oo8FccU7pAttG&a=1vo*;`W1**epcteNDKBOiH6?Pv{8SO4q zLCrPt?yxc5Ve~CeYW1>q18-vQZ13A?W|yYx%-m4QcySYd!yk;{hs-*IIvvFsF`vQB zimHYl$1&c_Rr_N3p)9XkLW3!MZ=O-!!(bW%&*s>-|sP!=GhiIx#7UbUh^n&J|oSNewg@r$RAw9MVPLtPLBm2w@~L4u@iFj zRKQ)qdFC@RCet;7Z3Nz+N~ec|ig+q`{qTFJ6V{2=F7Ehd^dybtUixtj=mLFfZCaI* z%@PQOQ#hGpu)q3cb=XPpV};Fm=^335Fm>qm+a%KCc6sI(6I~H%AB)KE^}2PRwIxn? zH$bc?{$6l4Yt)2d@3|A3v#8{ppJIMNtT@>A2<$ul_4%p{aE_C`-3S!&)IKrLEoQ1e ztGJ(wdAo|Z#k>T-l;4)rmHR&ZT!x3Ie2_cQMxs@0R|LZ-3w6ZY__uC!=)X{KLF0b? zR|a(Ev@HU}trjm;Q`77$gF@0VlUtJ@oxMMKgJ%lb`GAO>4;8yr2KP{pmydTVdx1^l z0GnK?gkwGj($p@#kD9sHZd+tP($(Y~)rI7ZnKv1?i9Yaa`BNmIl}}itDG6S*JfvR} zL{hQ5e;_|`UA3uuZ|&?#kpKdi=4F+-U1j^E97a(P_hLHYCYrz$$khSSuz=iiaXQ#y ziZ|`yO}Is;k{K{zBvdK(j6wZZ5=2?7yQ6K7HsaDq|6{YhgsZEJSMH#W;)`)_{NBgR z-DBJxY_iP|ev_aZK3<;&`gm?nWj?i!B2AsjGOuPK)P<;828jmlzo@r;DXaBh9hR*l zV>DZkxki(Zo&KO%!-q=62N|U%dYWttd<{o@cjI&f&X8`BLPG7>aZepohw_<0SQGAZ zh4pg{uZOqAj=5n`z1=DtU1+n2$W+zt zD5$9G<qSC-FxkE+xj3PjH3XkT+Ug8=tDsJicF#Wy#LMF*2VU3E>+# z5i7XBmDH#z1pd>l1<*1vHUdC_!qEnAfzuu1*>~O`o7&`=kKGy)pcoHu+U#bu{ua1Q zEM0EjwL-*|CmxMpq|eqJ_a+D|Al5*PsE{kxl#>jCuHR(r#+t;|<*MYl`4v1Cgz__= zRl%U|nu?l+n5(X)fnTB73?lJ5UeQFd^54W7vhU17YnI`_Q-5fLFaUg(RhfgKg6Tl7 zb$jyV?*FdV4E$8|z4v!Gi{mM)h&Mu%oK+Ju)vYZk+5LIOX;rH%33j$F>m8$6ZPVxa zu2fkFmOQ;%ra_mOtO_QBYc8B^(^hoQ^6`q>(}NoZK)lOH8F9kNg&9_3IM0bek=_`U zY(Pa?@H#-WDQ^|KFa8hD4Yckat)-F0)4=sv_IoAXC3xW!w-|t5jA=FEznHY zO6TAFmK?y;k%Uc?-h1x!-vdUQc3Te88_xu?;X@GN;*z>rapCjpN8e7fJfTjVesF*b zl~CjUZAm<-cVL0THUa>ftZCf!CCRk{WeGgC`hIAzBKM1H#1TFOdi?l?c{)9rxB{^< z==-^D#xXB>|8L>;_tcmzQKv?ZLcgI? zA82h2Je}SRU@Oe`Luxy0FV*luqr9P%+zG^N4ZpL12dWix#R$4!|Ml! z1pIqvp`q380d(sYsJPXaksM-%nVSb0Oaa$!;(;rDieQ3n>$oE)Xr?3uKzpGedr_Lp zDW|dv#kv}w0T%hMh@P?sna#PBTvuP<;|=6Z&AY}8g2o+diV$R5f4#^)@;4Sjn3riy z71P38;B2AkuA_eV1VAewRJa6Mi5?=${u}J2Yi#XbakeFHwxddYUp&E#{&@~ z`>eVS6AS+%@a4x=L)nPMR$YKaZ0%UH843)=PI8 z^`&W+(kAR#-CgO>F`xp~jJoi{ic1GZWgFgbD4{dUL7VxeZ5R81{&_F2UOv1h=X&BC;IVEVtzwNqgTzIU z8n2+Fq$-n^kr&Dvlnj5~7%v+&bZ>O1$auHDw7X@&X}PpL_MbWV7t!y!(k4_q!HNMQ znz51+wBytj_4$iSU6FDX47dP|Pi9Wh2M)Xg7}I2QqZpnJO*9`!_fi9OL$?$RrId$b z@qqw?B0lKK!3~o4$UIiX! zYGVg#F90$S`Kiy(b-QXIGg^0sPq!PdA2@>$QRMG^0974}M#^>SEF5kCRVba@IuEYo ze>iXTN_8XvS|Q$BBNA_%l-V-1u@bbj;Tn%3<&^~|?f#_gw3chM{U-#6LAJ8&;=7`229=n$Y;EwSoS(!J{9mF1i7AVS zmDo51d!+6`H1QSnkAGFP`-O~Y_#colo4xF9cP+;%|1B9aFY+m%xeE8bw=chnPfX5w zM}_Dr_mlT*!J3)tnBL$$a$+&Ax{toI%M-gB^|}4B@tlQM)INOw$Ug0nr!*0;qc(u2 zLbIw#VMIH8K2PHZf1;6w;`ff-=Ire(m;rkC%lM;6je}BWBu`(E#`-3~3>#7cr=O*C zz);QyF3wq6aR~CxbycU5hkOXfxiz~`=f#@cvKeQWV)D0uCC~FNn=28@{o7ur9C3+b z-D~mW4Z)q@#E4$m9#s81dphPxr_x(Y-TdEl>>6?7VSuXAP(NP@*7cX7 z-E{laC92As%ga<1D63o>!ProJs+Hz@i;IWMG&026xLi)(6&m=;pj9;VT!t$!j&OA8?Io3&}z7u?eptw zX98fQl3&w{kWviMne%EH{+e^zLZsr33X2lHru7}(UX^h~v9}km9#2L6(|Yraq%T@; z1x$lJ@F}{Mo2h(aQiJAZDhVIZE00QRt?t%X>eLNwa2{WKpPEb@Ss)fu6y@!C+-XV5Y-$TsgGRP`n|O9(a>}~oSBqk0^Fp!~+O#?0qIsR1)4x7HpiV!+gFq!X;ttMN$-P8yJ7aD_@ds3$@>_X4 zs6%Xn?CBcl2-5o{?ZJgbri%5St5T9pTU8LL>Hm!{7ki@z90hpsSw3lS+cbh2Dq*xx zyzEojPFiKSJaEgrK<)4eEk^abBWm;g^?F==;;QWNhrKd1+vW>>Ju9CECdkbdRONRv zVYS1*_oT`Uf=EqXx0zqnh4@urpiK zf+T4N6(q-_Dd3U89ZtH8RMEx0QE7+a*Y%R19jC25?&tlcdHi>x%3PGhfmNm#GL0}0 z2<_Q6)0Xu=BQ--o^{sRd8C2Zqq8nlhd=d()+yUtSW1rL=Ou)yu;A*zBKw3!bLUj?x z-l27|U1xhmb1_gk+Q=-ZvJ}XraFzm-&5n@F9a$M#=H@{;$5PyU>___;Joj z&X?(H?V>SXh7g=G>-d0Lgx%S?!>+cuY7I3_^<0Jb2=E%5atJK#VpJQb`@g330HWqi zmlzIvfswvqvybk~z943j?|@)|MU@xDaH|BJwP`E?yfe--uZYD_;W>eeY${qNshp)QL9ewj3r?}s~x z$UBh=CNgXtTw=~lCbq6+E>66K{1|1^Tz;~0TK&Fi<*um4ITW2?~sjr zqsIE;)J?>U%|gf7B$yAtc&&$RJn(@5a!y;XtvCL=)us#fs}NhW^qTXwN?_`>fc}th z<#e~px7cq1m4R&E5+lJ`P8UEkec%ZNm6ZxVv4q>7Aasa}mQ!Wi{u$7FT2FVKdD`U& z@DW3`qZRtCju$||=i~ct-)9+c%XFVz0)79k?DQZuVUJ_IhmDi{QF8XIgD4`(ojOY_ zQmy6Kbd&0uIc*JpI8_%+#t%L0E($C=2CP2^{#}F%jFKgICZqk)M5pCVy5>0Dw@Vc^ zn8T;O8M51?o~ta^=cer1uxUw`YX$QruAid3MD8$=xf;<6Y{;<+;zzJ7Q6P}oUpCP$ z`N3&ImP|`u&+=+X*Df?R+uq<8$YJ$&El8j~y*WPg_|}B6jZ;vuhbyHBoKO((mb{;# zjF)u2#sEMIIJs6bMWwewRLF3KP|FaZ>~n(C!u*`f{lPYlg7?__S=-`2Hz^;45?sAx zPf=%Ev<30a4Suy_WI%WBO-)=g-HS@&pz8Dm_A0Ld(252uG}WLVjFE7AUuAZ~$ycIU zn5_kXi%3m!0kme$$&3dDE@6z8t*4IFP}33!E)PQX<9DV|ii8xBNvb+2)pv??gSt<-%ei>4ch?tDTRCnDX@Y>fU2nxxZ~B-!azrL zO8E9x1(dU@C?07(7yx_h4*DONbu4i1E-*W@VIGyrrK)td0ICY0T+x8^3>UrjA(*UQ zfj<5&f*(ZC)&!i=VtfvV=Dw$cme!$mZf(0x+-*Qn68e9*xpoK4C-;f6Yec zSLE8fFOz?YEl?upSAb1tC(W_Et_RIQNcDI~)dw>WCU+=h@5kHhM9Y|;;z4IA#9?)R zEz>1gEtToMzd5Rlx+Kiu0zhR3z$ub@A0Ku+rNXN&YrOJA=sKy)-&H@m)f^N!e-E}F zc2*5cD;Rq$BZXRc2DeD_k(2>cm9nEwg0}AFhrn_6xtg7o@P~fSSFSCcQ41;qe75hk zx?BqWpS3#W=E+`ke3c`Jj=Ci{y_fxJ84Oq}$dPo32(t1qaMxu(gX2+w;Oxj`!(S44 z!lGG+Ngl0jnVHG#K-&T|>IAZa@*U1Bb$2F_gvke!I& zw7K-K#9yPA9miY2>Y8DzZNQ0@SIssIb#|MT#l)nQ^gx^Al6%)ZG>LF3Cy+;Q-B%rZ zOHa&*M`8LrE?b~~Ye;g+F&6a#CUGeSZkTs3Q$B0NcQM3zp30X{IB)wCSQB9-QIAW> zP~^7i4x3e<@!e-37-@%3ImEjUd}LIk#jOcGWVsa-TjwV3ID`|@wy3X^`~DY=R~`>g zd&fB=n45kPdjXYOfW_YY46+35cZDuD;>>n+p*w$`mH?x`^?EpI9Q~nSo$%Ws;mn#NC3yG<&x8LaPkWN`PP*8=rrWJ1}89VB8NRF{|}DEj6dE zOzwwpHV*1tw%)e*T{wtV6Oqs358@$RJimi8MfXqQD<^pb6t)?)?;Wr*UuW{ii4;`U z2_g1fhSYZw4-t%pYww}Y9VOlp+6oUHR%MUJJ;he-x-@6El$j@ zr8`XTi97b{C2r>?kMoj`oP;==Zw`|_JWY*iSupH7p9||z+@dry4>O1IVruPjh8YId zG-XdC2)hzz@hf&E&tExTW)G-KaXvq0SOC-}b@pal$IMV!tvFP;TWGT7)TS0&cZv9+ zSM~}hWv6*u&LFCnZB1&G3^MCBPfphuHvZm6Osm*Ew@=+Px9aRX^Y~&^71rP^=O}pJ zj=kM8aHUQ#KdKNvZnPo>iPZs<6z;x0D;>@mL@xZrE7zfVi?>Lj(4K=Vej&Yz)E-B4 zGu8x8FAwPH^~7yQYvA<;ejJ+e7wlsiRdb@%$&cMo8uF)7RJ)QhnBH<1a5vpcC$xg? zDlI7okQz2!#-nSwg7LfMm(o6pEBzOiUv#h^7rZI$F74{_DlyymBt#E6KiX()`&Upm z{3Q2E>T`L_d-Ft>ZosJ?BcWkcOr5#3moPSbBAXZ7q9w+nS-Xn*q$;ic4%(#RV`y(N zA~e_KvRxR3|E6TjQ&^eZ)SYw(e>GB=IaO(!@oI`K?CS94KT_VDIHXvjNc;|DQGS}NU&O%ReeIEjiR#6@_f*C@S#}A)W|2gT`pLz-+||O zMDc`WH4{r`7=bjfES27gh>v%VG4PHBex=W4r7Qi97Ucl z*X~B%4N+q*5W|F-NT{<2U_Q8T$$r!sRCVGWCBzYABY3Wa9i-b2OtPoXRW#ft_Qp95 zE9JRl_I~ZSitfvuk{Z`-z z(a@e5tt`?$E5ZAG7`HgLZ``Jax(XlSn8GC;`;$(ixaJ zI;cb+7CZcHLjG}28Yll1=U(mN29x1??h84ChXKk9qk+$-z+UOnuo>?MipLhTW5OWk z{*+Y!0dAZ|%$zsi#y0`a7^a82CUSDj5W9E0iscqBkwrD>Y}IGgGzUTW72YYLOpq#O zaR9?rY5i=uDK=hs<05?pS!l>U05(^rldm-Q$6I-A{zlNP_fNwP#E_s*KZm%3R-ck> z4D1r4she8g4C-fB@1brNktml5jmvm{_f%tp)+9WxianF&e;a_X=Ku-$u*Ad)+me0x zr_vKw4GL1*{@Jp#r2O|4JA-@M|7TJp-ze1{vFReBsxj&-&vy~S)CPmxU|+VrUlvOl z4QrU|=a{Cf#LwToi>D3u~fl8k8=D*x) zf1ovCU#-7ZTNW=Fd@G=w-?f4OCC0gm-puD!Bu3YVlI2MesUuMI(yRAeO@JS2xh!`b zmwzIBVQ_rOWn4j#1%J%)65{xhw4=zvTfC6y>nY2Y;XhNF{imO#{0MQ{o5O#EIII5? z$mxGjw!8QX*w(QFhXTV47hQHx7Z8FboN$AkKhHP;zk=~!a&%0GqbdhIMk7pMb1c4C> zLt_2J0e<41SX~Dwx&LY6Uci2dY*|oue0;SV(*jc6pS&YNBh%JIAi&PoEx9$j6}LFm?j@}AN52keKr;=_4^z)( zh3;a%E;{vlzs}e&1}88wRXuWy{b4O4SLBAJeZY}Yj`h-5yWJ0OUHx9J%l`reGI!wI zf8}WQw0>I;Nl~kwbCYF@gYCo#s@*$4geNL7M}uzOcjpa;^d<3N+s(MPigX~PWwSDV zQhxm{9zKlF^eG7=Q3#?53C0;FKu)z+I{QM`1-Biy(iif#whekU9LPBV@$~ZN4LYk- zz^*+5q(>WhYqjxwVAz6OntEIKWc2|_mq1`Yp8yFxKj-Aw_hL>6-fKTFoC@2OZW-J# z2semH?}Buf0wBTZk$)2?CiO?wC87U&h?+u(=d$C|sYjamRfBdL_5z0&iv$&xv?i!xJA>GgUOZ}g-Kb$>e%pvJr0)t(KRv5?zXCh36>Xtq zaa_Nv5*l*{`K4XmU_cQi+>Pk8E6Xj2WA$|`0sq3BG;!45+466lL=>#`Kj^ncLFBp23dc?#D$GTVXFE zo=f7t@DFCZ!1H``=_>RZ&aqmMYcK6|0D=zpMAduDW~MLR>x(!vfrh^L(}YcIl6KcN6da-MqV~2HC(y zP^kln0Z`xlHXAdAJTt4f;a+uN!DQ%&WVFO?FsDsxiVp&&c$ziyXX{DT<-96N$Z2*K zOi`mRjl3JX!W1L+Hk`Xy{>;rLofTcD;Qna8l=PkK&<0WU%?3y-pV)t4>Pfj%JgMXG zD%q#%r2*Lfz?EdcU5~>tC~!VEm_A#*IG;%h-yihv*ve&truYps_@<|m@4K)o4>Mn z(wj5>l&9oxX-vr#{$QpG7?E&h0bt7CJKoEd`psONnKJqC*(~ejm-l6DBCEJl5+b1~ z3BppH9;O(>WoG6bx9-{Yvkk3zyyK*#^u;tL>djM$Lnjosn(H6_n}QQo;+X5qy=xA% z*pN+IzneP6JrMG3f=dj~BS13UrtjkrU-~HOx*jpGTrPLCGold?iOQ}X{vFaI(Wq<; z@o~#!fya8vJuv!?5y!35IbHm@PWMD&WkF#oI|v#+ayceWmYA_{a|~pLO-3;1@59l=QRcz27GmA3C!&E-SL@jOp#Vl9mj=gPz(F!SYd{_)4Gt{_jwUb50{7KBo;0wRZN0<~G zWfd^aqpK*9%&lYymZ{I{KzjIWqaL9%L`H#M-Q76LBv=ZyXTmg?5`x7UNjY5z_%y8~ z@c2Y<2k`~!Fl*JERlcLw({uyEnh3F=`EOg%9**lpw3Z8YF0nGv+ZJczN%hh=#!|1r zz1+ukhd~Xy7!_$buO##CXWKRFuM=wpzC1028*bHily)1fv5 z-xDT+_Rx)&8g>aZ>3nRjeGHXxvbgoU6h>lxODD>pjPhBl{(wKheQ?Iw@r}4qLFX*t z>z}z8%{ofMA#@H0WGkqQ%nd26OhehqLGraNwmr~%1UyPgm=k18a>lw;=78}CLw7{~ zB!Te=q%$=<-bw9MrizE)Z(XVc7(dZb4*5-gnYEQ0*`iTrMm&W*-WuZKdscU1zTv?% zfoa&mC+yPuzu0^0s3_OIZCDX70Fy33L`u3tQb43zT0w*n8CnEswy26)#^-pxa)SCF?K&=Tbx=W~S%w_N9J?c_CvwaQ5C^zL{;^SdiQO@W= zTS;z*{_U8JY>dsEv?Stwu|>98lp2X5bTiA4y7}+=@n|~filktJSIjOnZ4Z>*n;|Lw zl*Z@rPjW#I+o@388{BJF2>N6C)^dPfiXLj$2K5MV*{b}r^SM+x{DqgF&Kyn2l>B<1 zwdDz~+8?qG)E`7f?w|wi+|Rknc{>_&?(JQlyH_nbUdi(h*2P zPCA%A#r#hw=J5-PP2_$QM^K7`D!gwOtA-;4QXD*3H*$<83IeiR_`W4q#%c_o@frRI zVo+Qcs{RSZ{%=W`U@ul;8L$2Pr};bF8}nINT9-E^pR9wt4k;!aBd0zgm9Fw7+2ROlJfj2$|#RNY8 zdsI2e_oE_J-CjXJ2T0G1@a&G0V}Hqh7GzAaT?YZm`8yMU!lOT>Xv8obGuC3)EJgY5n-g`gMuH^YlPudbXOmnv7U+eJD9(iss zqmL3$XjR-5;s0r^lSs_9{ZGz1T81CaxCk$a?v;b?a?3Um-yiw%av1wfe zIC|hbfhuyW);2{`dMjHs3W~>U{$v5p$ZO3>fHCY(dHSzTJMM&k>$EfVYjN*W7p)uA z^q$vU)W@~5r*wo&f*oB%ai3JJZ}Kq#Rhm6N=B z0K0g|cMzNf$-de>&GBcB2OSrk*O7{`)atq_L*0TvsCOGuQgYkwT^$RcUj6bPA6F?sn9H^MBW^212 zhtg;W-RfuA`j#6L&90egpHq%-vS9Lptg|enJ%9a_N_x* zPVh1)TB17)PwAqPx%h7=ybQa?e+PLWBJD>grgZLs+=%ypzTrT%B(9Ye$?KuE5(}$9 z6ZFC}q~=o}FFN(<#p=+gSl=92`?1DQC7#(j&%|rqrt> zBy5NDvy^lGH7{IzaHERSpqE9Q;q|ntq|5+XpXdzPzE$8Up+#^@srr&&zT&Eh#_5G0 z3X35to57cDU}Y0vzVU3AyjCB1b6uAs!@~pnnLXT&8&|CLZ6%QXN?kH9XiT_d*J$rg znR5Kp>rGel{~4>Yx+gm77$`~gPcI%1$4@U_${ZAx>2?>2$}D%_W~=%a{%-4X6v)bS zz5hS>JN?)FoP++t3aRQJx2-3Pp0UrBhDzON8}T<4U%Y}`CX-Tx5RiUGA; z?VUvX#Wmmy(WR$;w1io;pVr(<3UdT_GBpAt*feeX#Div!U zlQhU>d^d8v8yuQj-ny6>>JG@>9COZqGh+Qd4Vq3+vuo+f6%db{ymD?g7b7l*K=7oa z>1;pRlcursG7M@F>@BdMEeO5k$JB#h=XQv(EEs(lQ9%--r{awGJ-56{OjDqhj{5@z zz=XYiw4MF*o+__Lq-WGf-1JBt@6PO@H?%?CDgQa$#iTy+voL#j9( z6C;VJ6HqUO$TgrOXoR{i>; z^1_a3)iaj$Fb}#d7KKvS%|4DewtN}&9RWis>_hvDGn><~->QMDKN;Sqm>V@*nV24^LQW= z!@F&8oai=Q057)oRG#BWU*2bd-kgr&nsH;V1*?m8$%cDY{Sx$4`@IDvCdsztG-HL? zV@1=ksIEc<<2n$!+QC!$dQ0B$tdy~8VajR^=n2YspnfwX8R7ER{%BTu4-&+ZTbL^h zg}EM6Q1ss-eUWSSPVE?HJd8EUTWc?H#QY;GLED9*D3@BE^tTt(I#nHb%6+lCF?1q? z_vXt=R%Hk#ANgC!_dZ=JEv$vDPvbAIvDNUpxJ8UY+o-Rn0w(@^DNJUH^`d1xOHXD| zi~4BoSJXqL@ekYWk4evJ28khLcE6t4;p|gWO)!e$jZ@ZEVxGv5QmMJ7-Q5XRbAQGR z#3&3kFn2^b*-s{Z2T%GuDW1CRj>qFGsonK9r8My~tulSL;XXb-8G_?+b#-;!w;Vjl zX3`!_K2Iqhzk2m5IT%H9@92zG*%_9D6GRJ^G|`+~9#%zt;=y&+1htT+_7WhCYKav= z*E+E!8|X9=p0+XS+iG`R9|Jdeqb4>jn!Pb4z83}^>8}OUsIGG5@Vv}!PO=-ajx)R0 zBz%cb4~t0WDW0Cu*Dn=iE|DY;(7d+Rk3VAyy#(hmy*w8bb4|Czz)Cvyl@~8X9`c~% zWVWL5=3n#3O|nV?d6S-+Ue5WR_BT<+ ze1KWKzm3aXKsg2DbV^Yk-o0W%80LmcXp?Q}xFxaD0}l>F?pn%y?<5>$;{4@N`WrG9 zjrVK?xJ}Z1O-WZ(BQL{Pso5hgt3(QMEM!?kf-k_YY)Zji-ovjhtLTIb0fWNN-*Ddx z@%i~>q;aQg^Plgh|NEa+S5HrqIUXuAv8MTm_2*B%vg8Du-#XbM_}34=b?;+8@iy7+ z@87<;MX=|ZCAi2;;qMc;^XoMk2}a8L>YiV@C`JF;$TYs>%ARQfQAN-5#fmpz1;OA<4lX4)4tk9P^x_@F{vt#|&TPFv}Cw(+@DdoE~OU{?dE*9_7 zpeYZ2zR=6+^`DM!%MD&THyUP0u>a?~`L-V|_L`6U`b+L9;*J68voP@2KMd9dxtLG# zo$mYZ*B+2h27N|{KO#hexYT>`(r1U>UrQ~-h2Z@CIiZXAe}AnL@@IMSTMj?w!@r{6 zl6d>qr*NPD*xs+#Ru%96=VN{F&udM@VSJPZB?&A|l2(l#Kol1YxWD?(P2P{ofsoX) zEtH|A8{qHSd-RTOTq_v_DYsA2ee={=`{HOZ4ZZq;oIZD@;3?0 zcYDEb=#6K;0ja_WK@o}SIYYZfU?k)Lu6g7n_)~IQ9XsSPw`cfGK}~>liy18ynhJZB zK(-(*H4gi|uE)D%<@ts$pon=}SZ8WGc< zl1z9+OHX>JU44gl+f=JrVHul2y5)?B6mJ=Ony;@&o-8?Y;kIVjSD__~;$+j*Y|rwZ zf>|rL1;XRTm=Bz@ht$O@Xec$@hi8l@UZ(hkSjoWN7>fU;bsr8qsP3TC`n#C0Ts1FN zw$rF41=ZJ{=ov5C(8Q9}c_gZ#80UP!%QKR^vB&ht2{e9Ffou_uzB8o_Vd=y~xS9qG zH->8^VI#z1H#3>-B`sBRkJpS~OWOWwZa2B`*6?6c_2s4J=}6V!=7YVZmJRSRjico|)b~E3=lbNkJ#_fW0S%oM;ay9%@%gh6>Hs3h?)i;3lQ+nrW-t zPJy7%R)?%=lsV@~`?n4lG4Cn5iCa>{5gM&e++OvZn`rkF8LRET%fdjGIM`Kya5jZo z2snfzKk&7&)m%L`r9N_Da}-3HG{kQVm_2@UKFxzvT3Et&5PwzN(0=hpcv4*kf>cbh? zwOoAOZ}`#CR#u1Iyx>0#AXzEsf7sV*TGC%&X{zVxeYaUjF~3#3+YNGmas{pPfz!V6 z5y(d{^IFZi$jv3TFni*?VdH`|FBg||=PdRabhg?u3Eu1IIxlV5!Vi`G#f?^qfAKrk zv8ww0X@&Z*Gj1jAz-t-gyO*!D=V;!}7A28KmLOJhu>2hj@K2a^OuAddols2~lt5Td zg<5bAVoP#l2eb(D`h@i@~QT}yiABq^%aERm?)TE8vj#0IcQY7r) zh>ox=lU4ZZa3vWN@x%z-pzO|er*tpXv8>>=GsYGl@ACDQ8e9^bI;YI|Jcp@+Ybilv zMxlmCW@o5}QjpIWqt7)KX+R0uTW=~c=Zw^;K1slm+Iv0-KeZNOzM9!G@y5=z_&iZX zG&eS=FIq#Xs#M&E&^gQ6yA)T<6Iam9a^w1K5rXT4j$34eBf4Ii1m(^2H>4G&8h zKYrC@`%&S@=I%-lZ;xWY7IbQoxe%|xWSjUs=}{*Q*5@Rcvh#)=P0JEcz|u zqg0IB@k2tk7sU+JVI|w-r?|^9Tex8~57<642JC+k(;*IK<9ppji0=z8QSIx&b<9n# zv(An%9WEu@$ULcoHu-=p#Z@Q4J=^2hXLEw<{2EQvgIWmDG17reOelw#NOV@=)?>K% z%JG-FHBwQ|14-kn2!Rs}ny$04PUAX_oeH|+vU>p)w*3^J52!4>oWvPF@Ol=P+B(yK z+d@S9cd@HfB&RYP@Y1J*pmxH@Q~d4>I8LyP#6)DqACx9`GX`Da2u=~j*gltPXTN(c zI)u`hP=6~W4`+!mJ~{XW?J5xLtsbHldQtRD=J!#QCoY!6ZRN&}TF7k@xx1V<25w7E zDBw__P%{o-F?cCD>Ea6(vN=bxy*Qxg!{0kvEO`;!EbxLEi&x%NKJyMV#SK&v45;_n zh=Vl?y=k&2d7^fJVdSi4IUirDG&W;s(#_h{dB?f;$Nlj^Nl`?>jNtTzX(~5cdsKr+ zbQMB-G2Xe6cx+z}6D#Q3E9RzZk*(f=A^j+O2|Q(D=dI0o9KHxH>>%)Wo53~8^BaJv z1r6HDDIbj`RYOlto^vNK)bml00d-%6Qz}Y#L&(&lV78)68B` zaMkC3Imec^YeRmNd)-jj><{XiMq4JfhC`qWE5MGY4l?hHM)dJ{q{QAIj(gXy7$h!T zXYFGBQZKRDC1rY8$2}`zO%ta+UY#e2pm%^T_Sw@9dJ(sBki74M#Y$G`IAcTTG8%G6 zQcv7q0W08{rmTgmeh9u41*8Kg$nVV+Qk!bU z8xHc8WXH%U)_Q8pbenZM1;l@?oeJeT7KVKpP%Q>X>JGn)BaDMGoR-+a!In4E=ytxH z#L5pBjR)L9qD&kP!RT%fux-^?#~FU9K~oTh^`P%RU3z&3h|;Zb*Nn%6Qdp!u(Ghun zs=D(o2v2+SXe#`69y?!}|1zk0hRG5M7T>Knvkr8H-SzvuKOmP^Ax~{91i9)@S{|S+ zI7J_1x|vYmGA$`#T%lBASEN$axeAfNN%wl7b?f+slEYnkN1x^stB#`e^4+E3-8wtM z;6XX4k}C2=iKq`<;#oWXnQCSFnbl1@Zvr^|0ri~xB6Ljfy3cD}r;B2ZYhusRGWaL< z@?IPGgT2bbyo)+_l=Z=FDn2PK&0_AwhBX{sBKV1pGo>+|!dRx(t_n zN0dAo_ZV_rMD)p>72JNC;(G2w))Qg&2RUK7I)0h26}7%Bw_W6wvCHw~8$-9J?;t%J zPdbgkj2+4!E6rfuJ~B0DDNQw_z>ZoIj)eG4c7{ z>!yq~t|_%#g7@V%W@8=n151i-2cOJT3l5!n9(5&~YMu>e+xl?m2Y94Fym@z{tHo(! zDw>&1A?_qDyRuGjS}}zx;XTKzI2tt&IO3z1Rzfkl>b`YW#xdq`NN!QJ?IgBGgRn^%;|x(6(qm_Elj=*p}3u2enrGP^DPJWB8o9$XqBQ`!1xje>Jd0J!0f_uW6Yg5 z>;TL+s&6sN%qF`8gBbG)`ZjR;old~UN=HI;+vJbReXuX%k! zX;A1XY8hcaD`@wrsNH-6ZLj2JhOHh0zQK?kr^M`8)=BpY2WS8NJ2`D<0~aig?R6|8 z(alI4vGb0AyS=jKn99oLozNb>kqhV^{nBe$AJY1p5vzj`5Cita?iL7)nfE;xdM1aj z`Ei(i)|2g_5CwOOycJg-`ta6z$>S5#gJe1~rvXJ-5$^nsOq850*-?J0<1ylR0A;7u zCg^8)5N=`h?nwkmDy*p9!FOjQWR~?ERL49CG^@%Ur(O1?*ZOrsR@iSefX*iFxGYC# zLeSzteybZ`3f9@(Y|9Z%32gT8Zm|D^6Cj4TyQf}V&3Yr05?1$fHSR#qlPkL--=Su~ z=3C7^-ZVFEMpOe1GQGS0Ua1#`D+D^mn^NrrxRqbMH49Yo=*gm2-JHkawC~+DNqo54 zo(F5w2LhHzwEo~}3z8SqH8@K(MIBYUIO}frFg&!OWHlFyj2MaQWVv|9xHH5~@`ExY zr;PJpU*YIED+F$H)3MgK8(@zK(j);vN43&~wCe%vT!#lKv1@B7$KIN!nkWb~CEg)e zNkZQ%#YGd#Nz9A-qM(W0Y)*lP!i8AWfJ!2sU7cqKLT4av1cQT$R9Q>;fd*xrYaalZ z*eNh^dzyS|^d~lhmazrIghf^0RlnW=?Eop_iU5$hyS4^9OZ#_y2YnLAtKsj(Wx(!0 z4#tRbpAec-mf6-`2CC5LC!EBs36v|0K%nGILxvb!;a7h=HjTDeq@IbziK^><_Gwo& z*VzS0`aBb_q==l1-HuDU09z{+Wap6p5Dh%)Lb!cz4MIhPp@D7yV9Rj#s1UcF+*S7X zHU6Ho_04~mt@u6t!_RkGKx@5`7fAjyIsYs-Mt5}cOUwqTS7?Uk3Tv`+2S*DKji*wH z)z4*ybPPg?$`~$O11R4^E$xC1#QJzczV2-gZ*U#m@)0Rh^O6}kKMye5j9ZSc`ryma zrWXy!5*~STIcZOjcPquqC(yav&W-BT`@|H!)8*jv3g92E1%)57eQ`} zb84)z?ly{{?{#_314m##b3;ty+8c{>Y00s99ATMKI^3%K)3HwG2P^Vs<44wI+L$|D z(8s~u&Ra2jvr4xpzJ8P$Wk7}{JEwvC&mo0Ms*YdS5K_bQ9ve4I= zwm|xm>N2<`m3vJT)+*u0-253^`v?w%zSQ88<}!0no6$l!n=KF(RDpj5#mo>-7S7EC zGz1%HNii&kx;JF0S#hj$iK@=yg+e*nt~SD6fg4YpzZj=Mc1R_Ll46P_R4nrly767q z8~ushz8)T>BUjG5xt+u7;o|^%@2$c|ba+m(W=ykAAW!oKf^&(b)UokZmj@f5-@^dz zLL1%JQOKwpN+!DD(6HR&|BB0Tt4(F_6E80C=r0g+DQ z0e<>=!6%<7hGdaHQ6PYQtnfgeyL=5mQ_5q$4N8NY+DxiB6pk;I&4zLM!r;myb-`9k zgfVGXj^F#z@P$_C$Q8xmU;;0~$61$RZki-1+c|uq;`ZF!KUkmGH>s1!d*rmj)UsNc z$w#)S?uvWr3POh^S;e|%^X7U9Di&`AN*A$|TGB}GBn~zpywWT$id01xOFy|GD*tg( z1kU&VB}etsbQ!VGX#dHRq~Y%PyH+;_bFi~N7q&Q`M?QS|^|3Qo;q~9DTW)u7nJ)(m zlrlhfkggbEu>+a!{%4{+loLh$zOl-ZPfdqtKehDi>(Y8@u^1m14zYn0@g<-uOgKH3=5lAQDsZH-} zU_WHrDziU)_|W@cfLHx=w{pO9DS^~WwvOljQr|a;^1t>RcSjANZp>T+40t*y}qASoO(5os>E%qed9=J&!4dbVx zIa{jEJvVR6cGK8MN=fZYaEHSM&iH4G^6XyeFMUf=#$Pj0tG?#lR#QLbto^lw>orWs zQ{}OnGnUt#)CIMcgisMZM0gGvZv7zWHW#D$L^8Z$?Zg|gjZ!$cs{PijW+@qWAVY){oUf3)oR zCwu)OuDvinG4n6+XIH=O;5gxl*USx-4mq`Rc(Z`qU58U*G6`)0{|4z4ZJQcE`U^9rR|jYG4D6J zb&LH|iJ8fI4ie0ZpkaSVAB|9Bo?731{nT#>s}XyMF_FwG!YUg#x9dlh4^Yn9?aqz7C{>f$KC0 zjxEK4hq^*D4EY=FneBX*IYfKQbhbo)-A_y*9`IHX$5)_uxcU^$B%a4=EF51a8?)f+ z{zV`wFuKa?0A_I!yv9N-zw|s56upv{UKx@z- zvWaicnXlsDw#)g0`o=oKIM8yYalO$ZJ4U%e&k$0CT8*1p<#8)s*pq8rt5T7pVF&#H9%;(uUozJ9k9qT7Yiy zs{!U~%D8oFUX;2(wP1C^M5_ZSRw`%-5N$2YPwCMKh1wkqPvOoer9^AJ-JO0RHPtshEgZmgDAs7hpHn?`tWk;Y( zVSe4k_~GAhUCs#6N^Z=#wkl-vV{t_J15e=H7(_|r$dN@hV}2ZNy%70L;WtrxSKn1+ z#4Vxk8UgKvJjTHv>QEe!D|Js-yILp7@BoiIg>Ynm^&wn>z)H(2hCVBtX zZm#rNzU8|hGHWId#jiV{9bvJ-ZXIL~6g1GhMvA4~G9({0n$391Xxt>wi_VU_DWCM+ zL|kKHvsIKb?C7i+FZPaBQIdD)rUvn&K+P<9iTfQd8$JW)P-(wGVsiFjI59yKnW%2`jmtnDYuSMu$Og1K240fQXyxMt$GU%M1`0f0yy8{OOiI&?2HoV4fhK=#}CLOQn$>1@^FDCfADbY|KQ;=N}7^X zlj=OsWzHVtn27sE!OTB6{m~0Z;rQtEl~Hu`hlCGEAEaLs#t8*Fb$y(<4A2f8Lr#v+<#mh?s!}ZX3Ni$EK-c z4!4+@zcigc%{$sZHQar6b{agH0gP+2F}l)X)3=-Q&3hZ0OC{6x5UMl6h~&zN7dOoF z+ZQa&pzpy`g^ElWTXe6dC(F}3CngcP4xOU+XCe3|VSS?`nf`c3P5-rmTL;kgK79x> zs2QE6BW@k?M*>Woi-eN%``0zmchmKyXJN@TjkKB(1rg&R zZ^%>6UMfA5xM9{5c|Ena7`_N2ou+nWK$8h&pa@5GT)O&;C|;$6zp(0}3c@~hR>6pE zIFJ3zjLN(DSR0)Z&%UH_J>rb1_60ChGbxDkuUFeZ2kVE?0(f?rOu9iL~^z_igG{zkv8`SE~x2@78yCK*OWT7Al z*9Wic7WHyZznJ8gW21^iLaIs0#5ZR3-SwJg?)nk}*wYfGN0qS#l2|tfh@mT#F`gF6VP(Xorm|X z9zZbSXD*Gr-Dpc&jyzL77Ga~k_yu;1ph-=&e*UXx)Xow$cc~bn65j*uE>!$9XEO)V>5q{-<$xF+EfSaBGl2j8fd?hJeG@`6%2 z1Ibg8Qb|BS@fWN<$Y6uD*dhN*cuhY>_#^uHUU)25yawi(RSy!q)}QagTd-5Zb5Mvl z^yXoZlY-b~dHNot8*Ez`qtb!HjH+%}m+(ZIPZa)yZ1=|_XSlAq;M>`#z?3{L)g6c; z8L&t>zYh&oTY7z924$d+tFNm}NMa)^;6mEL1g5A)V2OUqwCZ~J6fVeH^4{}ig#~;D28r&bx!EO!dVMKj2_I6xxhg~ z!6c|AyBaD!6F&+1?6@C-3BG{6>BAxGsu(wz-Xy^z@N}bl)IRrcG3axeJBWLa#A5N9 zQp?wA9P5Fd5491sknGaU5emo#=LT4PlFzH{K6{HZo+UG%k|_NO2a`vg8?!?=rCq=T zJ$7nf1!&$t9Sym~=3A;@C>KM}E#Eci98Lm^Izu!8s)AaxIO4;p7uD8kLhM2!F^AS#Zh&8 zaAv()o1K^30Ei-QTz?~JAPv6b+3OO6>wr+- zpsN2CV5Y7%hxsoj!IAmN%EmLa?*-~G&MS#!dtX*&(|mo(L5c{z;f7PA>=Snuv}q+AstVu1x{*hPnXLW;(o3MbATK8NSPX2sz^BbKyh9p@5-1XV% zzz``MJ(L8nMu^=KqLjTtF;Wktn%(u8;8`vyVbznr(=~5V<9%(e?&kJoYDS+uoJE}6 zHqZ>`HdH&ld@g&U6ndg~aCdOWB^f?-@e{&NT|B7u>cJCEi1QMpi37)E2t;P4aCCjv z{D^<*<}`LFQEJkR5E&`~p0fr)YfmZgr!Wp@7NUfF#TUxn1%vRNicJ9AYc8MFwEJ9( zeap2(vq`V8Hlr#AP8uEQv=sUMid1HLO-%sr^I90q0)wWh&#Zg%&X~YU{(sBo#i9WG z#tw&%#6=h$T802XhV5+*Ht$!_Ymz}b+5o@o;Iop1vH7r32xK}(LUy^o?>}P+WtW+# zb~YRlV$cmWtC6rb+bTC1RvU4{4@M`;P# zL7R(3FpwC8VRp>RrEoL%6e#5UM&R}K^90uxY7EB1@m5m}LU6deK0X>Aj1NYpN8vR^cFi538QEw=vO7TBeP?WR}fcljnNQ zk7V@L?Xl&`3+P>bv$!|O*g?(I?1s^%>4xis29v^wKpq|T((E@8P7G;sgD5Y2+AW^& ziSnje=AxK3{>ga9qK|q$3#|5;CJe^&hCCO8iCLz(v#)hjO}_*O^T7itAq<&X?qdzS zS4T*+18g-?VTwFe!>Wvah!GGfo`lT6C8D(P{oNTV&?ETTk~L}29LXPE*-$Xca{|d< zY+Rl#>+;3_cyjF=?9&yNDC5xwYep5EyjhUOGwIhNLdNL{^b{pZ0Ej-ZMqJ*D(1e1w-1r z5#Ckzj{Pq#diN7kA008HQ`%W`AAPz$09sk0gQWzE z5UeBA9Y0A@b&>zRmR;WY(~0T zIPjs!wkw`etGzexNE*nfvi=$*{}G6#dlR@|=lfIY^~By}1-hYqEIHzP1@d{~MV_A^ zPPUF_!na8 zH@?QHx)BcZ!<=MdIb*Hw$%q2P2Nv(X-U4P@_iMajLh68|i!(r<(i2rr!`yP}oY#V( zypMBNIlqaw74Llg$jp#Fk*slAWnLX_5$Rw7VqLA9)EU9OAi-Qw>&b4Cl)GtL?!=n2 zOO)MRGm@?o#6#%E))9!r`N}%H6))^n3Akq#nn+(azU=T1;HR*razvdMJf4La6|?as z-028^MuLlaCAsB_nf(R>E~3U^ABmI*3#oHuWI3~7C`>g=S@4N&k-d9lyz6de&6Rt> zC0dhbD0E?3F^1#H%uM#imaB}6sESy=QbKOsv`VS&~ntLjA=7R z-_vC<2FT>%>UP2lhZ^pe<_d*i{3g*fEINcY3t*Stw6P%r6j9fW6r(*0# z1klrYsr7nSPO9bjb0XiRg9XS;Zq|d(1=5p~dnDJ9$=#@4ySC&3V3#&DJ@NwgU*DuX z@QCPZDp^+@;r*oATMv2PmZ|@E-`)8h^{i+Jb`;<^rD-E5IgG z!#CV{)mK=)Tq_>bIP|(rm>hcDVh+7-4f!QbN4eP&;>JH@RVe!A6PnJ$YyI4E4$i%< zMvoDHkUY8lea~R@uOFz66>}y)Kf(~-v88@C$O+y+T%tG{&LYDwxZGYGx68c$LKNSK z*bVZ!8wRL{Ra&< zmB<4bU?TXnpXIN+qlj4c*qj)j)R>UMoP|>A#R*^8wqJJ)S=olpdC>8p<kLmVXq{>r5=XfQHosUm64kbsUPT_~9<&RO%n!xlvz|fte7J8CPX}e)Hb$`W-wuQYRhX;d$eDQSKt~$-dgH^KIe& zQ<`6{xVwa5ZrNn>OQQ~A2s^|^*>Cje@G!uT&|U%zW`YJIy{69cO;N6Mve46`>5(*I zFcaLi%?D9^vM@W%An+7+UcSd_EridzQ=|Nju2N%!+y1o9={U~_)YCapX%FWo$uAZJVy05+i(&^8wWTJI<&A1<(i{na4{-qL&<-T3#QNzkap zQ&Kw_JPDe=zo~h58#du%@M|m=w{C19&r5?AJ4%Q=Fm$DZ)`1NEL(0kz%pREmCUFMv zI!x^3tF*lb%aA}!4D@t|fX{#mVmv_du~$}g1<%V<{uzhXFCa4)J;qBj);-qaz39>c zYI5~89s}c82;iJnK%3ce2;N)b46r)**7Y3h&dRtW)S7Ovf#Oo-t;f1`9`j~AWG&L; z;4rq`BtnWDH}7+GGrthf$@_Q+)v+w*P_Rk*q;+&F0xoE2_LScFMjZn<_sEK00|6TL zk+Bp&0lAye**qj#CwowawtBWX?gNgS-FzNnMZw+%+-;b3>yoAju2-c0fNZkY_5qt_ zJe$&*fsJ3+$pzLpyj2Ybjo%b9pQv&sZl8c|dekhO2>t`e5LXzmE4ElW)j?pCGAgweM8Fv{e1nDjK@UK70`~lTK0x*v zy;3U@9&`(lBscie8%VbKho7^)rij`9!OuN}6oi0WbWg3}>E@`GsSfd%6&ew>m-F#q zqsZD!*X-? z!m;zM#zOqtPns@AJInGqvj_0Zr*O>cdoJoMH++9fBIy!535B%UEEqv<`bDteyX)68 zoV~&6mJ-YwG;KOuoLBlK(dXoFvb4kCqUhL7d&|phe(ClbuA`xl`pzp&aL&^Og_#-1 z(9)!>`{{=Jo?1V zxedm&36Z_;qZNT8zjr()mTuE(+&XV-rZSvY9U1Hu)x%Q#@UoP`3mk-EjDoI72R`81+SE5R)AtGTYBv6qDST(z z!GFU6kQp6bEL~K>p6YGUR&7<{sfaJ}&M(A6GfH;jRg>rqJIFw0CBF9lwDZ7VB{q&lYl&DJi&Cqwjp+{fudY&KR zQD=Nl4fk!ujNl^+kZFvvQ>V^@_OyR2Sb|#88G-Kom%-enZ> zdZ}>D5JsSnko|DSJ@B766KgXzutGNa0~)@*IUT2$V7A;qK$n8X%sgS*Vr#Q-*I(HLOQS{Zfjbm+?0v;j`u(b zQ>C+*68(ix;lvJb;8Bs79&RJEL0?huYzz+qPxQ<;Cp<{3FVkM_J^O>%1ad!rY&3KG ziumbhhy2IWWopL67_n3@e0y=h)1FJ<0DUdsETIVcMQB^-qstL*Nq|dsEAooM+9;8K zLEfXYXH|Fp%F&TO8ki9W*SK=>&2=9;vnS%Bnt@s8hpnEXbDo8$ zoPrf}tRQJJRkoY)Zti9(`)lR0ni7mRaKqVuW4IAml$%JLb&0b0Xzt0a(_!LS@aFFm zn)Jt{l^q+f&yNEF4$ryHoTeVQ?(aPsJyXE#3-hOF3zRwo@o$`_OlDf$bs+4AYDEXH z!RgOz7KfO~!%JW`SZ7U2nm+2?qd7bxt{h}XX?TvmlrEuj9Z}kNp8vsc9>AYb>C90tAu9@`+ssxc@Rn+%oM0x)GD%gb3ub!)FxZ8$KNw7_IsGcF z8`1g!G@}R=&F2cl%jDbV2lhY%LSX?efsQ%L6aKOyd-7jM3@tg zqq&xxCtzJsTmDNK*5e?~3l;3um$eCd&GAj-3Y`6Hr%LYe?l+Jo$;z_;g)O(`?D>22*K&J0u`4IC!VxfHSof#!v z$Z}TnDyPhVYs+%+!=4MD2c=#{sD=!@_8v|Q`G!EH*CxE{wM#_1(q1X;(*a_Xv~8uT zPJxoCKAb0qmC)E1qUMb4_c;c{gR>t7>kuyQ;;j<7WM~kRtrKR1Fy7I9N%VnqkkNBmi$(M+=+3Q(eJLznxVdhuCr= zO9A3+twRZAvpXn+z&7B{a3_hS-cE@YpGQhgp1d-XBZ|*^;PmPVorrqOl~0N-SJ9Ls zH{I!&!kC$qReOB6;E5XVrrnG=p~*5?YtrG}s%|Y(rX_7zscA5JB0Q`Utv)XD71>2* zWxO?ec*CNdzIXHhdkjsyA~jC?#8mqFI3V3B*v8h+hTk)WMsT7_^M$3|Gi2JSFILhT zzCx^<`1oJeA6U==udbwVZx0yXRU@}72t)SW_YYC7d@vnD5aG^{)86a4c)m>H>t7cr zN%$%q)pzQ>Fb!@Ff8M45 z2l>CP3Xys4nwwHdiH*YBO7l8VYktC@1f1n)t{QoB3qJUs;`FO+rxze8q z5N4pJn4b2!>5cbKFo(XHI4s-j@B90=)T-&ea5#KH;Te;!#2>7qbbij^)LX;cFv}Cz zO0)WhF@2=?Uuhlpy0rZF?|)~29r2+rz|FeNcBh2M?LT4|-1zk;gj8l`W@nGzCvF~r z_l&dLIJU^|=eHvk@D1xpGl6uoTMnRVNGDzIt4M=2gih7}f^xL2pu|nWDofBY-B*VI zJL-6=>b^eBXc&*zr2a1`2NR8znKILW8D1lu@{E-I^=%a)5U66jdOUFV*LREr0Q|D; zatQym%tCemz&-s9y3j?51+u;!>HitL`CPZyDebjjeQwpjz+#u{t+rm|)FMl=hQpQy&zTeg(kz!Vi=Ny6_yA zv6{ZfTcBtB2T*hF~FrK{RKFl zY^o)SPQRb6A5i{3wVio9lxzRTb5fla+Nmh#pd==t>>08|Wy`*cBqvLjF}4{=N`$f& zS+WdL#!$AbWjM`*jI3kOXp%ifW-K%FT(>soJkR;Pp68F>>*X)oJ@<9r_jTQ$>+|`( zzpya<+W+jejo;f-x@L_aOjlFg0NmAaDU{a<8Rwq=Jl-aW(;fM52Htb&`G6m zUO7?#meW-+eaikA>fzwiUUj8?$FZrVVK(yjPpiIscE5RPPNir?*xsyZ!bN{TeAQ~6 zZr9Ze&$;|oZ?KIC6{9KI54ZcCQ}h#jWwY;9Q?vll!Tztq1y#rC8>{B{mBga;!hh7f z_5G#^@@bn)?hJqcDc^VFj2<6)&4~&1qF;ZC0m{Q?S?Hxnb5)$I`#E@a=QFtYGK8Lp z;@WHnk-4b|Y>@4Os#vm|&v*;08&+d(lpnIX?5zQ5^^W^5WpD1FIU|m?bv)}!D?rRp zXHk(uYsd(ITLjw%u^_VfYaw*vtm z?i~zOsAAndwLYA;z&uB66MlQ~P-5m4+p8~9kGs#84pbfA?@d=*mqtIxQ(Arb4;DE;0d zY<$!A+P0Ou6Kq4bJKU%am)SwHBH6FFi(B;q)^?1h$E#$_3e&9j)c`dHjo3vnVyCxV zuh+ilThOnfDT1;`z)JC9-@ElWW!`7tr}|n8+%CGuoEIgNELVln(W*Us;c>2hr?y5G14We@s`}ts(@Wt zuBiRHy{`Xha#uKC2q0NLXC#f7e2}XA5QmQpKJxTk9;N9j`>IB$gTB(qZBJ?ed97K9eLTwn@NkIz~!I#d@)@V4AE`hW;D`!{zhG0CzC5xi(C zB`+TknLni~R2Dz^<@TpUtrX!*;MwIR1}M9Z17hXj5iNc%-*Tf9m-`ZKcEW^&VQ~X{ zvO+b%4Fl^WR@)31qIP7OQwW(UD!@GbLnTtD$(aAf%Gsy1wte!*A`6AJ6Yi@ey^B50 zd@V6OzKQsCeFHN%hM|_Jz%#Hz@S{rB-|Now5|NmW$XEvhld|){TTww>h!I&p76~zF z;5}mfH>u>hPvbvJr8t2{Dm5BIo2unbwiv@o?~F6&s_bT27=h{`d8X#v#i2#P1tod9 z_=c-)6_p0%US46zGf>^TO4+L%Jy(m$;D}VcYB7qI+CIoQUQ$^cZKLt%B#)aS9#n~K zI&PVC@@*a1H||s4$G!U_rumEyUG(XbDti1&p-_BP(dl1nw>NG9yDgGo)&qYUW3!wc zRjym1cAfY(TSH-nXZquTRn@_f=EKYD#$fOh-=#Q zWOKd)Ch;74Iy2;`w)rMOgJS(EtNih)2(kP3`4eG=URl6K>v>1H$~At5BXZ3>_XW?k z2$4^(7z}H#j<50&q=EGef4WyQ7#ZS<1^i*_j7#;s=@T^h4!0shyj2Tr-2IXG<}mfgE>D zC9Nu#p#=OYQ=W|MEPX9;tBEgRk-L8yRzis!Xn;hGUf&r+j}_$cLF>QTQhd>_{OXbe zB(Cv-%_+yCQ>DDN>{VcMd!$%(UH@iX35jm-n7f+&o8H+<-y8^}m6z+i6gT>zVMcT} z*0*#A7oZP8ql6vLJ$R|FFaAAP6m6<4b@xWA{LwSn{<-3Sk8RAbCc^_k@iO5_k;}aR zLK}UOnx83TD>htKVYXoMGR{m7L@55QQ*izcOE* zETk=l)fi`eJL5OMgMYj+sVQpk5MIHM z+VPCfXTE8HOL!CR#f=lIys0bz9~AiE0JU7laW9T)yYy=SdgFS=cR5meNi>v=`7Ic+ zc=+aB{hwA$imArB#li+;4j0oazbK;{_$o=m$9jGUg@ceIvsSAKNuKNt;&!b+$y2}c zYV3^BnQkHzAV(ri3(XR-TO!QApCg7+AIkRPp4or{yf()#W1Y^0=wFt%FJ~l7#(&ds z;-J|Lgc5XGkR70DI>4jLP!u4$wL|Y;O zym8}{`G)TY2IJyOG3FnVANujx*BJ|}5;;IT!ZnKre`+MNbEc~dF4^yw{lcyNU3U5t5MIE{z5M4P+*jX0|8$7; zY*{;{AJ<)%m@RJR`9ESmdG>z-ea;5$S0D;95SnD_O`7D29-9X3uSEuHSLk^Fnh*s= z0A-!M=c?Q%cFyxGT~6q#_IAgy&thTo0rc85@v}8dj#9CIC#Uq0Ma|%WG;x3|HFQ6c ztXB%L;VNbc5=8GFQKzLI{j%~&oe}6I-~EC7*qV;d$_I6=Ty3sYe#FpP%ouRy z4DfX)XsvjbwvKIwS9YbS0! zg{8B}@%Uj5+aE{2otCBu&UstB-O=oqS3!(3(K*^EQT|YS9eccv4|E?loB>tT3C=iO zd>Med7~=86ZvPKLccMEl|p*3q$e%9Ol}% zB#n?<{ox>2;Do0~Nw|;GtAoC}Z7HvI521 z(HdLFUZg_&{uywD>aug4JY2KMfX&w%xS{UKjY0j5Ab~iPIh2@xH7>R5i zJ>25gTXspiuBS4{WkS)@;(3ki{KUo^kh-8rAQd1@vJz*QhJd>OT9aYh1}#iBpm7gP zfwTajaSU$eWuOCRWIJi)ZoMT;+h7LJ?bcA86+RX{mrZ33$4cedgG{XRFEs9@Mln?* zKDMR2`ZR}?8U^83mTi=TfT4t(0ntZTZ|xz$4?mKu)0~(5wT2*sdy-adF%4luo`6P$ z%UcG8$emHXWDAZxXR(`ViVZZa(zqr@ zSlfJR#8%el3wXFk$TND;;R6e!uhMW?ZVhlws74eVMW1ryaOl^lp+W=pD)hG-4M+9?E9 zB1EG3cZ$Bp=VQ~*Yap-6=X&q`=b{#tr*wq+@9Pl5T~jVAeT)c@TsyB`g{nz-?lfpx zSI+MS4-NMW9u~lZ4jEI_R1nLIlaU%0_Q??G_Cl9PD0t?Uj7Bcj;0z99p=S^eO{m^v#j;UVoe+ED{lfEl zl<6^y^@Do|sFz0?vaR#ExA4=C1nNvB(;YORgcF)165KoJxsS!o;IpcWiWR%c3VIrs zAjwX%tp!c)9|=O`kNEvM!XGo6g6(=Ag$6t{k>)@wo)}P}=&jTv&OONhi2$nYbfEcy z;?3~z@Yxqo?2`Jpu*k}W0m;3R&h!3c@<5qF1_BGMPkG8amZ4n_Z^a!KBE!^${UK1y z0FM((^koQpBxEXB7+W>@Buuk4deaV>wa8yrgn!L6%5y=nY#3PH?k6(Ha>bm2i#U(< zF&mK++Tlk7(yKVH4>qvW&T_)^6?2&5jA_{lDP7W@=qej+u9GmhAv=?{nTU{B((DcY zMcG;Yqj6;c-`iAQiKSvn!i*ys+(37YE`3Op5hXU3aYi`H8N>hwatEmU9V-8wU}|EP zpV>HqX45m0ml9Yn(RZ95gg|gW;`O%bxm+pRS;|D7oncq5aJ^T=@GL}u@dx`#cCC4{ zjXMi<%6Gn50`{b-3fRe@A&qfENF2wNxud7+kIK7)H~OVFBubUV5_BiRfYK@Iamhdt z7G5Phe{p;6j8;UR*kfwNTo4^>VSc%FXna9@dJD9{~6+pxY%%aX^a_L0p_ zqH))48T$mi!&~vQ2rl}eN(B*bG9U5$K(u>y|GuSM>wu&-=`_T<=a{xh^ZCt#L{AqL z!rlJj3W(xEvy>ye50;8Hr{3Qp0t=f>!=YUF-kH3xk8V7%b8Jh(_TIJxAMloDjZQ*s zqt)0bhFDMtceZQLedOfaaO3`1C@+g6HLdSB z6`>r|j^sz0_k<3$u7}I)K#7j^RGR#;LMC4jJzxdTP1OI)l#k7)E8gU=2RT6t6q8^_ z>-(*`^}M_$!IeI{$gQ^Vn6=6gP`lNrjiK%%Lq@&hH{D&V9m$p(#N2jg{2oeI>}nHP zqQ}6!9!N89fXv_Syu7f2AI1vP@-bWYOXggoK<{=pbNkv!;siY;-Im7NmA_|E0 z?p+YEioZO1kSW9&4w0OvFnT!~vnF)*#yQu|_Fs0e?v*kTCCU8Ok?nmilCYEM(RErq zjjghlF2dwhePz5|Ft*22p5og<^%`B55j%WJg!jm%nxS@xx7AEjSc)NN?fdCZ+E9V}Sf=0$k?9P5nR zvaIv%JY{?(qUfoWx3||tBX+)sLA7J=ty>(9X@O>y*&>^i`T~{4wA*_YD^un4?>%Vr z^SX7&>bc&&GSJ6V6_?GVaF)o_m{PPQFT?iB2o>8sVC}Y4-b`4i9tfD9jG_y%dS5y7 zt4cyACtu{fH~OH3OO+e^>1;F1U455E-8z=nZ3nrvut1WSiCAxObMQlF_Zasl$*42y zquYx{`2Im6riWW>>_OJhvJTA%g#=mddt0bXcOPZ^kGV%W0Ps~YYJgm!E zXUsK*EUp?~Z)-k2u=A~cdD?m%EC{OO;%j`yci7|ciUvUdQ8^K^9Ls6&bPg5C2Q;SL z=&I>uqCLCBf9-Xanxe`;DO|fZT%MGtFV1Oi3o)+A7NQUqLRse?c<*WstSo+-ExC3p z%ca`QaQVThW!+zt)8Q9}Vh&6zR#eX_=ti^&+ioBQ3~k8Uo#d;!;a;=Ec@-tWSaw{d zzl{Q$84aIzSgKfiTHAzG8Zm|(F)3HRioA7Nnkrwaf1NhEWLGOf@nc`U4)@F~X|>HA zQ&k66V;L@3Fq=6!*Nfk105_a4mcc4`M7Xl3TLZcUYs-4R%oR}$2A3IlGZysTjVG$I zBdP1I*c+;RNfwI=;c(ENg@Ctsvv>!sgefa|ga>DrI}|_SiYbNLQ>K9|5R!7B-X>0#6URTMHBY8J~#>l$97GF z5NjpuV(Psl+p&*GvS;T44wbO*m^Lw2ZaRF;_qGM>baqCG@pF~^#I8x%Vjj*SmSdGf zJKT)RXqa}gyuNh&j7MMXSQ&m=;8}I@6uAn~xLCMUt@|XltveBaTdzaUXz@j$EzS|V*q~e!Ip8^w_>OEl?tZDdbUmDZ{Ov;1k8 z2HI0^%lK|c<|I1*M20?p_`}5e=Zd!R(Y7C58AumPe(J=(>@@t7PF$9?13J@n4Yu$3 zBL zLk&w)n_3?Rl|Su$Us_=#67dl_Uy}E+6<%lb+uu1aB3PAaFZlT<$IgL=H7-Y*zH(MM z_wGv!Jik&-^`QyPy@Zb@LI+d%da&rmQ(hF07m=yT)4whYeU;@oUNT?*CH~aRQtN%_ z6r$r-2C=}?2d|}UzMFqCWxTq%6r>h&=|%Ugi^(fHFvORtP*a7R+U=i08hq4QBe)Ro zT!2}ldF7g&ALNUS#r7EmyLgz-jI<`WOdjz_Ctp}`TuCK=8S_=wd$s-f-)Q#LS=ay3 zUHyOf_ii4bV1IL(7c>me*E<;>slfKt*wiyxGn}=z9?NAI-+a0bY80=lrLS3Z%HjII E07op3d;kCd literal 72405 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

=q$X&(XJ6Y9tDz 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 z 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 Date: Mon, 19 Feb 2024 12:02:46 +0200 Subject: [PATCH 06/30] Update guide. --- resources/markdown/manual.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/resources/markdown/manual.md b/resources/markdown/manual.md index 85f59713..91948551 100644 --- a/resources/markdown/manual.md +++ b/resources/markdown/manual.md @@ -19,7 +19,13 @@ This document provides guidelines how to use ProBro extension. The icon indicates current status of the connection. Every db connection on the start of the extension or upon refreshing are tested to check if they are connected. Otherwise near the OpenEdge logo a red circle appears which indicates that the connection is unsuccessful (Disabled). -## **2. Creating new connection** +## **2 Creating new connection** + +### **2.1 Importing connections through openedge-project.json** + +Connections defined in **_openedge-project.json_** are automatically imported in the extension under seperate connections group. **_dbConnections_** Key must be defined for the connections to be imported. + +### **2.2 Creating new connection through the extension** For creating and editing db connections is used same structure. For editing new tab with selected database information will be displayed. @@ -36,7 +42,7 @@ For creating and editing db connections is used same structure. For editing new ## **3. Table explorer** -Once the database is selected, table list is displayed. +Once the database is selected, table list is displayed. When clicked on the table list view, press CTRL + F for the ability to search for a certain table. ![table Explorer](../images/tableExplorer.png) @@ -46,16 +52,17 @@ Once the database is selected, table list is displayed. ## 4. Fields and Indexes explorer -- Select table to see fields and indexes. Fields and Indexes are displayed in panel view. By default, they are on separate tabs, but can be merged by dragging. +- Select table to see fields and indexes. Fields and Indexes are displayed in the panel view. By default, they are on separate tabs, but can be merged by dragging. -- In fields explorer has multi-sorting and multi-filtering options. +- Fields explorer has multi-sorting and multi-filtering options. Multi-sorting can be used by holding CTRL key and selecting preferred columns. - By selecting field rows, query columns can be shown/hidden. + - RECID, ROWID fields are hidden by default. They can be enabled through the fields explorer. ## **5. Query window** @@ -68,9 +75,10 @@ ProBro extension uses server-side multi-sorting and multi-filtering. 1. **Custom query** request can be written to filter records. Query should be formatted like WHERE statement. 2. **Export of records:** - formats available for exporting: - - JSON; - - Excel; + - JSON. + - Excel. - CSV. + - dumpFile. - The scope for exporting records can be selected: - table: export all records. ; - Filter: export only filtered records; From 13618e1fed8e3bff5caa6620856dede049632319 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Mon, 19 Feb 2024 14:22:04 +0200 Subject: [PATCH 07/30] changes --- .../Layout/Query/QueryDropdownMenu.tsx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/view/app/Components/Layout/Query/QueryDropdownMenu.tsx b/src/view/app/Components/Layout/Query/QueryDropdownMenu.tsx index 3efb5649..9b07cc9c 100644 --- a/src/view/app/Components/Layout/Query/QueryDropdownMenu.tsx +++ b/src/view/app/Components/Layout/Query/QueryDropdownMenu.tsx @@ -54,13 +54,23 @@ const QueryDropdownMenu: React.FC = ({ onClick={() => handleFormat(format)} sx={{ color: 'var(--vscode-input-foreground)', - fontSize: '0.8em', }} > - - {selectedOption === format && } + + {selectedOption === format && ( + + )} - + ))} From f9d7154e1191502e5b9475243b77d64c38c07a6a Mon Sep 17 00:00:00 2001 From: Antanas Valencius Date: Tue, 27 Feb 2024 10:40:25 +0200 Subject: [PATCH 08/30] 378: added the option to choose not use delete triggers --- package.json | 7 +- resources/oe/src/oe.p | 2 +- resources/oe/src/oeCore.i | 28 +++++--- src/common/IExtensionSettings.ts | 23 +++--- src/view/app/Query/Update/update.tsx | 104 +++++++++++++++++++-------- src/view/app/model.ts | 3 +- 6 files changed, 113 insertions(+), 54 deletions(-) diff --git a/package.json b/package.json index 790874ee..4b32c1fa 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,11 @@ "default": "true", "markdownDescription": "Use write triggers" }, + "pro-bro.useDeleteTriggers": { + "type": "boolean", + "default": "true", + "markdownDescription": "Use delete triggers" + }, "pro-bro.tempfiles": { "type": "string", "markdownDescription": "Specifies path where temporary files are created." @@ -361,4 +366,4 @@ "reactjs-popup": "^2.0.5", "uuid": "^9.0.0" } -} \ No newline at end of file +} diff --git a/resources/oe/src/oe.p b/resources/oe/src/oe.p index 82fa125b..8daaa8d6 100644 --- a/resources/oe/src/oe.p +++ b/resources/oe/src/oe.p @@ -12,7 +12,7 @@ FIELD cKey AS CHARACTER SERIALIZE-NAME "key" FIELD cLabel AS CHARACTER SERIALIZE-NAME "label" FIELD cType AS CHARACTER SERIALIZE-NAME "type" FIELD cFormat AS CHARACTER SERIALIZE-NAME "format" -FIELD iExtent AS INTEGER +FIELD iExtent AS INTEGER . message PROPATH. diff --git a/resources/oe/src/oeCore.i b/resources/oe/src/oeCore.i index 265a7dfa..af2d3080 100644 --- a/resources/oe/src/oeCore.i +++ b/resources/oe/src/oeCore.i @@ -169,8 +169,8 @@ PROCEDURE LOCAL_GET_TABLE_DETAILS: DO WHILE qhField:GET-NEXT(): IF bhField::_order > iFieldOrder - THEN ASSIGN - iFieldOrder = bhField::_order. + THEN ASSIGN + iFieldOrder = bhField::_order. jsonField = NEW Progress.Json.ObjectModel.JsonObject(). jsonField:Add("order", bhField::_order). @@ -403,8 +403,8 @@ FUNCTION GET_COLUMNS RETURNS Progress.Json.ObjectModel.JsonArray (lDumpFile AS L END. END. END. - // Add ROWID and RECID - DO iCount = 1 TO 2: + // Add ROWID and RECID + DO iCount = 1 TO 2: CREATE bttColumn. bttColumn.cName = ENTRY(iCount,"RECID,ROWID"). bttColumn.cKey = bttColumn.cName. @@ -433,7 +433,7 @@ FUNCTION GET_MODE RETURNS CHARACTER (): END FUNCTION. FUNCTION GET_FORMATTED_COLUMN_NAME RETURNS CHARACTER (cTableName AS CHARACTER, cColumnKey AS CHARACTER): - IF cColumnKey NE "ROWID" + IF cColumnKey NE "ROWID" AND cColumnKey NE "RECID" THEN DO: RETURN SUBSTITUTE("&1.&2", cTableName, cColumnKey). END. @@ -497,7 +497,7 @@ FUNCTION GET_ORDER_PHRASE RETURNS CHARACTER (): IF inputObject:GetJsonObject("params"):has("sortColumns") THEN DO: jsonSort = inputObject:GetJsonObject("params"):GetJsonArray("sortColumns"). - DO iChar = 1 TO jsonSort:Length: + DO iChar = 1 TO jsonSort:Length: cOrderPhrase = SUBSTITUTE("&1 BY &2 &3", cOrderPhrase, GET_FORMATTED_COLUMN_NAME(inputObject:GetJsonObject("params"):GetCharacter("tableName"), @@ -771,7 +771,8 @@ PROCEDURE LOCAL_SUBMIT_TABLE_DATA: DEFINE VARIABLE bh AS HANDLE NO-UNDO. DEFINE VARIABLE fhKey AS HANDLE NO-UNDO. DEFINE VARIABLE cMode AS CHARACTER NO-UNDO. - DEFINE VARIABLE lUseTriggers AS LOGICAL NO-UNDO. + DEFINE VARIABLE lUseWriteTriggers AS LOGICAL NO-UNDO. + DEFINE VARIABLE lUseDeleteTriggers AS LOGICAL NO-UNDO. DEFINE VARIABLE i AS INTEGER NO-UNDO. @@ -787,9 +788,15 @@ PROCEDURE LOCAL_SUBMIT_TABLE_DATA: cMode = inputObject:GetJsonObject("params"):GetCharacter("mode"). - lUseTriggers = inputObject:GetJsonObject("params"):GetLogical("useTriggers"). + lUseWriteTriggers = inputObject:GetJsonObject("params"):GetLogical("useWriteTriggers"). + lUseDeleteTriggers = inputObject:GetJsonObject("params"):GetLogical("useDeleteTriggers"). IF cMode = "DELETE" THEN DO: + IF lUseDeleteTriggers = false THEN DO: + bh:DISABLE-LOAD-TRIGGERS(FALSE). + bh:DISABLE-DUMP-TRIGGERS( ). + END. + DO i = 1 TO jsonCrud:Length: IF qh:REPOSITION-TO-ROWID(TO-ROWID(jsonCrud:GetCharacter(i))) THEN DO: IF qh:GET-NEXT(EXCLUSIVE-LOCK, NO-WAIT) THEN DO: @@ -810,7 +817,7 @@ PROCEDURE LOCAL_SUBMIT_TABLE_DATA: END. ELSE DO: IF cMode = "INSERT" OR cMode = "COPY" THEN DO: - IF lUseTriggers = false THEN DO: + IF lUseWriteTriggers = false THEN DO: bh:DISABLE-LOAD-TRIGGERS(FALSE). bh:DISABLE-DUMP-TRIGGERS( ). END. @@ -818,7 +825,7 @@ PROCEDURE LOCAL_SUBMIT_TABLE_DATA: bh:BUFFER-CREATE(). END. ELSE IF cMode = "UPDATE" THEN DO: - IF lUseTriggers = false THEN DO: + IF lUseWriteTriggers = false THEN DO: bh:DISABLE-LOAD-TRIGGERS(FALSE). bh:DISABLE-DUMP-TRIGGERS( ). END. @@ -850,4 +857,3 @@ PROCEDURE LOCAL_SUBMIT_TABLE_DATA: END. END. END PROCEDURE. - diff --git a/src/common/IExtensionSettings.ts b/src/common/IExtensionSettings.ts index 81d90b65..271af415 100644 --- a/src/common/IExtensionSettings.ts +++ b/src/common/IExtensionSettings.ts @@ -1,16 +1,17 @@ export interface ISettings { - batchSize: number; - batchMaxTimeout: number; - batchMinTimeout: number; - initialBatchSizeLoad: number; - logging: ILogging; - useWriteTriggers: boolean; - filterAsYouType: boolean; - gridTextSize: string; + batchSize: number; + batchMaxTimeout: number; + batchMinTimeout: number; + initialBatchSizeLoad: number; + logging: ILogging; + useWriteTriggers: boolean; + filterAsYouType: boolean; + useDeleteTriggers: boolean; + gridTextSize: string; } export interface ILogging { - react: boolean; - node: boolean; - openEdge: string; + react: boolean; + node: boolean; + openEdge: string; } diff --git a/src/view/app/Query/Update/update.tsx b/src/view/app/Query/Update/update.tsx index 6730e93c..39158241 100644 --- a/src/view/app/Query/Update/update.tsx +++ b/src/view/app/Query/Update/update.tsx @@ -2,12 +2,19 @@ import { CommandAction, ICommand, ProcessAction } from '../../model'; import './update.css'; import { Logger } from '../../../../common/Logger'; import { getVSCodeAPI, getVSCodeConfiguration } from '@utils/vscode'; -import { Fragment, useState } from 'react'; +import { Fragment, MouseEvent, ReactNode, useState } from 'react'; import { ProBroButton } from '@assets/button'; import AddIcon from '@mui/icons-material/AddTwoTone'; import DeleteIcon from '@mui/icons-material/DeleteTwoTone'; import EditIcon from '@mui/icons-material/EditTwoTone'; import Popup from 'reactjs-popup'; +import { + Box, + Checkbox, + CheckboxProps, + FormControlLabel, + Typography, +} from '@mui/material'; export interface UpdatePopupProps { selectedRows: Set; @@ -23,6 +30,28 @@ export interface UpdatePopupProps { isWindowSmall: boolean; } +interface UpdateCheckboxProps extends CheckboxProps { + children: ReactNode; +} + +const UpdateCheckbox: React.FC = ({ + children, + ...otherProps +}) => { + return ( + + + {children} + + } + control={} + > + + ); +}; + const UpdatePopup: React.FC = ({ selectedRows, tableName, @@ -37,9 +66,13 @@ const UpdatePopup: React.FC = ({ isWindowSmall, }) => { const configuration = getVSCodeConfiguration(); - const defaultTrigger = !!configuration.useWriteTriggers; + const defaultWriteTrigger = configuration.useWriteTriggers ?? true; + const defaultDeleteTrigger = configuration.useDeleteTriggers ?? true; - const [useTriggers, setUseTriggers] = useState(defaultTrigger); // !! fixes missing setting issue + const [useWriteTriggers, setUseWriteTriggers] = + useState(defaultWriteTrigger); + const [useDeleteTriggers, setUseDeleteTriggers] = + useState(defaultDeleteTrigger); const vscode = getVSCodeAPI(); const logger = new Logger(configuration.logging.react); const table = []; @@ -201,24 +234,31 @@ const UpdatePopup: React.FC = ({ data: submitData, mode: ProcessAction[action], minTime: 0, - useTriggers: useTriggers, + useWriteTriggers: useWriteTriggers, + useDeleteTriggers: useDeleteTriggers, }, }; - setUseTriggers(defaultTrigger); + setUseWriteTriggers(defaultWriteTrigger); + setUseDeleteTriggers(defaultDeleteTrigger); logger.log('crud submit data', command); vscode.postMessage(command); }; - function listenForCheck() { - const checkbox = document.getElementById( - 'myCheckbox' - ) as HTMLInputElement; + const onTriggerCheckboxClick = (e: MouseEvent) => { + const target = e.target as HTMLInputElement; - checkbox.addEventListener('change', () => { - setUseTriggers(checkbox.checked); - }); - } + switch (action) { + case ProcessAction.Delete: + setUseDeleteTriggers(target.checked); + break; + case ProcessAction.Copy: + case ProcessAction.Insert: + case ProcessAction.Update: + setUseWriteTriggers(target.checked); + break; + } + }; return ( @@ -230,11 +270,19 @@ const UpdatePopup: React.FC = ({

@@ -281,7 +326,8 @@ const UpdatePopup: React.FC = ({ { - setUseTriggers(defaultTrigger); + setUseWriteTriggers(defaultWriteTrigger); + setUseDeleteTriggers(defaultDeleteTrigger); setOpen(false); }} > diff --git a/src/view/app/model.ts b/src/view/app/model.ts index cfd96a62..0b9bbb0a 100644 --- a/src/view/app/model.ts +++ b/src/view/app/model.ts @@ -141,7 +141,8 @@ export interface ITableData { }[]; mode?: string; exportType?: string; - useTriggers?: boolean; + useWriteTriggers?: boolean; + useDeleteTriggers?: boolean; } export interface TableCount { From fef129776daea59ffc7a44f6d5ace291c46faa3a Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Tue, 27 Feb 2024 11:51:28 +0200 Subject: [PATCH 09/30] Added the ability, to add tables to favorites. --- package.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/package.json b/package.json index 790874ee..f3f24345 100644 --- a/package.json +++ b/package.json @@ -177,6 +177,12 @@ "name": "Tables", "contextualTitle": "Tables", "title": "Tables" + }, + { + "id": "pro-bro-favorites", + "name": "Table favorites", + "contextualTitle": "Table favorites", + "title": "Table favorites" } ] }, @@ -234,6 +240,25 @@ { "command": "pro-bro.dblClickQuery", "title": "DblClickQuery" + }, + { + "command": "pro-bro.dblClickFavoriteQuery", + "title": "DblClickFavoriteQuery" + }, + { + "command": "pro-bro.addFavourite", + "title": "pro-bro: addFavourite", + "icon": "$(star-empty)" + }, + { + "command": "pro-bro.queryFavorite", + "title": "pro-bro: Query Favorite", + "icon": "$(play)" + }, + { + "command": "pro-bro.removeFavourite", + "title": "pro-bro: removeFavourite", + "icon": "$(star-full)" } ], "menus": { @@ -289,6 +314,21 @@ "command": "pro-bro.query", "when": "view == pro-bro-tables", "group": "inline" + }, + { + "command": "pro-bro.queryFavorite", + "when": "view == pro-bro-favorites", + "group": "inline" + }, + { + "command": "pro-bro.addFavourite", + "when": "view == pro-bro-tables", + "group": "inline" + }, + { + "command": "pro-bro.removeFavourite", + "when": "view == pro-bro-favorites", + "group": "inline" } ] } From 787748cae16e022c344909770153180cdeb9be96 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Tue, 27 Feb 2024 11:52:02 +0200 Subject: [PATCH 10/30] Added the ability to add tables to favorites --- package.json | 20 ++--- src/extension.ts | 90 ++++++++++++++++++++- src/treeview/FavoritesProvider.ts | 126 +++++++++++++++++++++++++++++ src/treeview/GroupListProvider.ts | 36 ++++++--- src/treeview/TablesListProvider.ts | 11 ++- src/webview/PanelViewProvider.ts | 2 + src/webview/QueryEditor.ts | 22 ++--- 7 files changed, 268 insertions(+), 39 deletions(-) create mode 100644 src/treeview/FavoritesProvider.ts diff --git a/package.json b/package.json index f3f24345..01dc266f 100644 --- a/package.json +++ b/package.json @@ -250,15 +250,15 @@ "title": "pro-bro: addFavourite", "icon": "$(star-empty)" }, - { - "command": "pro-bro.queryFavorite", - "title": "pro-bro: Query Favorite", - "icon": "$(play)" - }, { "command": "pro-bro.removeFavourite", "title": "pro-bro: removeFavourite", "icon": "$(star-full)" + }, + { + "command": "pro-bro.queryFavorite", + "title": "pro-bro: Query Favorite", + "icon": "$(play)" } ], "menus": { @@ -315,11 +315,6 @@ "when": "view == pro-bro-tables", "group": "inline" }, - { - "command": "pro-bro.queryFavorite", - "when": "view == pro-bro-favorites", - "group": "inline" - }, { "command": "pro-bro.addFavourite", "when": "view == pro-bro-tables", @@ -329,6 +324,11 @@ "command": "pro-bro.removeFavourite", "when": "view == pro-bro-favorites", "group": "inline" + }, + { + "command": "pro-bro.queryFavorite", + "when": "view == pro-bro-favorites", + "group": "inline" } ] } diff --git a/src/extension.ts b/src/extension.ts index f113c923..79df89ff 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -17,6 +17,7 @@ import { VersionChecker } from './view/app/Welcome/VersionChecker'; import { WelcomePageProvider } from './webview/WelcomePageProvider'; import { AblHoverProvider } from './providers/AblHoverProvider'; import { queryEditorCache } from './webview/queryEditor/queryEditorCache'; +import { FavoritesProvider } from './treeview/FavoritesProvider'; export function activate(context: vscode.ExtensionContext) { let extensionPort: number; @@ -224,7 +225,22 @@ export function activate(context: vscode.ExtensionContext) { const tablesListProvider = new TablesListProvider( fieldsProvider, - indexesProvider + indexesProvider, + context + ); + + const favoritesProvider = new FavoritesProvider( + fieldsProvider, + indexesProvider, + context + ); + + const favorites = vscode.window.createTreeView( + `${Constants.globalExtensionKey}-favorites`, + { treeDataProvider: favoritesProvider } + ); + favorites.onDidChangeSelection((e) => + favoritesProvider.onDidChangeSelection(e) ); const tables = vscode.window.createTreeView( @@ -250,7 +266,11 @@ export function activate(context: vscode.ExtensionContext) { ); groups.onDidChangeSelection((e) => - groupListProvider.onDidChangeSelection(e, tablesListProvider) + groupListProvider.onDidChangeSelection( + e, + tablesListProvider, + favoritesProvider + ) ); /** @@ -271,12 +291,33 @@ export function activate(context: vscode.ExtensionContext) { context, node, tablesListProvider, + favoritesProvider, fieldsProvider ); queryEditorCache.setQueryEditor(key, newQueryEditor); }; + context.subscriptions.push( + vscode.commands.registerCommand( + 'pro-bro.addFavourite', + (node: TableNode) => { + favoritesProvider.addTableToFavorites(node); + favoritesProvider.refresh(undefined); + } + ) + ); + + context.subscriptions.push( + vscode.commands.registerCommand( + 'pro-bro.removeFavourite', + (node: TableNode) => { + favoritesProvider.removeTableFromFavorites(node); + favoritesProvider.refresh(undefined); + } + ) + ); + context.subscriptions.push( vscode.commands.registerCommand( `${Constants.globalExtensionKey}.addEntry`, @@ -307,6 +348,16 @@ export function activate(context: vscode.ExtensionContext) { ) ); + context.subscriptions.push( + vscode.commands.registerCommand( + `${Constants.globalExtensionKey}.queryFavorite`, + (node: TableNode) => { + favoritesProvider.selectDbConfig(node); + loadQueryEditorForFavorite(node); + } + ) + ); + context.subscriptions.push( vscode.commands.registerCommand( `${Constants.globalExtensionKey}.queryFromCode`, @@ -419,6 +470,41 @@ export function activate(context: vscode.ExtensionContext) { } ); + const loadQueryEditorForFavorite = (node: TableNode): void => { + const key = node.getFullName(true) ?? ''; + + const cachedQueryEditor = queryEditorCache.getQueryEditor(key); + + if (cachedQueryEditor) { + cachedQueryEditor.panel?.reveal(); + cachedQueryEditor.refetchData(); + return; + } + const newQueryEditor = new QueryEditor( + context, + node, + tablesListProvider, + favoritesProvider, + fieldsProvider + ); + + queryEditorCache.setQueryEditor(key, newQueryEditor); + }; + + vscode.commands.registerCommand( + `${Constants.globalExtensionKey}.dblClickFavoriteQuery`, + (_) => { + if (favoritesProvider.node === undefined) { + return; + } + + favoritesProvider.countClick(); + if (favoritesProvider.tableClicked.count === 2) { + loadQueryEditorForFavorite(favoritesProvider.node); + } + } + ); + vscode.commands.registerCommand( `${Constants.globalExtensionKey}.dblClickQuery`, (_) => { diff --git a/src/treeview/FavoritesProvider.ts b/src/treeview/FavoritesProvider.ts new file mode 100644 index 00000000..28ac82f4 --- /dev/null +++ b/src/treeview/FavoritesProvider.ts @@ -0,0 +1,126 @@ +import * as vscode from 'vscode'; +import { TableNode } from './TableNode'; +import { INode } from './INode'; +import { TablesListProvider } from './TablesListProvider'; +import { PanelViewProvider } from '../webview/PanelViewProvider'; +import { IConfig, TableCount } from '../view/app/model'; +import { Constants } from '../common/Constants'; + +export class FavoritesProvider extends TablesListProvider { + public _onDidChangeTreeData: vscode.EventEmitter< + TableNode | undefined | void + > = new vscode.EventEmitter(); + readonly onDidChangeTreeData: vscode.Event = + this._onDidChangeTreeData.event; + public tableClicked: TableCount = { tableName: undefined, count: 0 }; + + constructor( + fieldsProvider: PanelViewProvider, + indexesProvider: PanelViewProvider, + context: vscode.ExtensionContext + ) { + super(fieldsProvider, indexesProvider, context); + } + + public getTreeItem(element: TableNode): vscode.TreeItem { + const treeItem = element.getTreeItem(); + + treeItem.command = { + command: `${Constants.globalExtensionKey}.dblClickFavoriteQuery`, + title: 'Open Favorite Table', + arguments: [element], + }; + + return treeItem; + } + + public async getFavorites(): Promise { + const favoritesData = this.context.globalState.get< + { + dbId: string; + tableName: string; + tableType: string; + connectionName: string; + connectionLabel: string; + }[] + >('favorites', []); + + const filteredFavorites = favoritesData.filter((favorite) => + this.configs?.some((config) => config.id === favorite.dbId) + ); + + const favorites = filteredFavorites.map( + (data) => + new TableNode( + this.context, + data.dbId, + data.tableName, + data.tableType, + data.connectionName, + data.connectionLabel + ) + ); + + return favorites; + } + + public addTableToFavorites(node: TableNode): void { + const favorites = this.context.globalState.get< + { + dbId: string; + tableName: string; + tableType: string; + connectionName: string; + connectionLabel: string; + }[] + >('favorites', []); + + const isAlreadyFavorite = favorites.some( + (fav) => fav.tableName === node.tableName && fav.dbId === node.dbId + ); + + if (!isAlreadyFavorite) { + favorites.push({ + dbId: node.dbId, + tableName: node.tableName, + tableType: node.tableType, + connectionName: node.connectionName, + connectionLabel: node.connectionLabel, + }); + + this.context.globalState.update('favorites', favorites); + vscode.window.showInformationMessage( + `Added ${node.tableName} to favorites.` + ); + } + } + + public removeTableFromFavorites(node: TableNode): void { + let favorites = this.context.globalState.get< + { + dbId: string; + tableName: string; + tableType: string; + connectionName: string; + connectionLabel: string; + }[] + >('favorites', []); + + favorites = favorites.filter( + (fav) => + !(fav.tableName === node.tableName && fav.dbId === node.dbId) + ); + this.context.globalState.update('favorites', favorites); + vscode.window.showInformationMessage( + `Removed ${node.tableName} from favorites.` + ); + } + + public async getChildren(element?: TableNode): Promise { + if (!element) { + return this.getFavorites(); + } else { + return []; + } + } +} diff --git a/src/treeview/GroupListProvider.ts b/src/treeview/GroupListProvider.ts index fc34c727..0807dbfa 100644 --- a/src/treeview/GroupListProvider.ts +++ b/src/treeview/GroupListProvider.ts @@ -6,28 +6,32 @@ import { IConfig } from '../view/app/model'; import { TablesListProvider } from './TablesListProvider'; import { DbConnectionNode } from './DbConnectionNode'; import { IRefreshCallback } from './IRefreshCallback'; +import { FavoritesProvider } from './FavoritesProvider'; export class GroupListProvider -implements vscode.TreeDataProvider, IRefreshCallback + implements vscode.TreeDataProvider, IRefreshCallback { - private _onDidChangeTreeData: vscode.EventEmitter = - new vscode.EventEmitter(); + private _onDidChangeTreeData: vscode.EventEmitter< + INode | undefined | void + > = new vscode.EventEmitter(); readonly onDidChangeTreeData: vscode.Event = this._onDidChangeTreeData.event; constructor( - private context: vscode.ExtensionContext, - private tables: vscode.TreeView + private context: vscode.ExtensionContext, + private tables: vscode.TreeView ) {} onDidChangeSelection( e: vscode.TreeViewSelectionChangeEvent, - tablesListProvider: vscode.TreeDataProvider + tablesListProvider: vscode.TreeDataProvider, + favoritesProvider: vscode.TreeDataProvider ): any { if (e.selection.length) { if ( e.selection[0] instanceof DbConnectionNode && - tablesListProvider instanceof TablesListProvider + tablesListProvider instanceof TablesListProvider && + favoritesProvider instanceof FavoritesProvider ) { const nodes = e.selection as DbConnectionNode[]; const configs: IConfig[] = []; @@ -38,10 +42,12 @@ implements vscode.TreeDataProvider, IRefreshCallback console.log('GroupList', configs); tablesListProvider.refresh(configs); + favoritesProvider.refresh(configs); return; } } (tablesListProvider as TablesListProvider).refresh(undefined); + (favoritesProvider as FavoritesProvider).refresh(undefined); } refresh(): void { @@ -63,12 +69,12 @@ implements vscode.TreeDataProvider, IRefreshCallback private async getGroupNodes(): Promise { const connections = this.context.globalState.get<{ - [key: string]: IConfig; - }>(`${Constants.globalExtensionKey}.dbconfig`); + [key: string]: IConfig; + }>(`${Constants.globalExtensionKey}.dbconfig`); const workspaceConnections = this.context.workspaceState.get<{ - [key: string]: IConfig; - }>(`${Constants.globalExtensionKey}.dbconfig`); + [key: string]: IConfig; + }>(`${Constants.globalExtensionKey}.dbconfig`); const groupNodes: groupNode.GroupNode[] = []; const groupNames: string[] = []; @@ -80,7 +86,9 @@ implements vscode.TreeDataProvider, IRefreshCallback } if (groupNames.indexOf(group) === -1) { groupNames.push(group); - groupNodes.push(new groupNode.GroupNode(this.context, group, this)); + groupNodes.push( + new groupNode.GroupNode(this.context, group, this) + ); } } } @@ -93,7 +101,9 @@ implements vscode.TreeDataProvider, IRefreshCallback } if (groupNames.indexOf(group) === -1) { groupNames.push(group); - groupNodes.push(new groupNode.GroupNode(this.context, group, this)); + groupNodes.push( + new groupNode.GroupNode(this.context, group, this) + ); } } } diff --git a/src/treeview/TablesListProvider.ts b/src/treeview/TablesListProvider.ts index ac972905..b7f0eee1 100644 --- a/src/treeview/TablesListProvider.ts +++ b/src/treeview/TablesListProvider.ts @@ -19,16 +19,19 @@ export class TablesListProvider implements vscode.TreeDataProvider { public tableNodes: tableNode.TableNode[] = []; public filters: string[] | undefined = ['UserTable']; public tableClicked: TableCount = { tableName: undefined, count: 0 }; + context: vscode.ExtensionContext; constructor( - private fieldsProvider: PanelViewProvider, - private indexesProvider: PanelViewProvider - ) {} + public fieldsProvider: PanelViewProvider, + public indexesProvider: PanelViewProvider, + context: vscode.ExtensionContext + ) { + this.context = context; + } public displayData(node: TableNode, useCache = true) { this.fieldsProvider.tableNode = node; this.indexesProvider.tableNode = node; - console.log('displayData', node.tableName); if (useCache && node.cache) { this.fieldsProvider._view?.webview.postMessage({ id: '1', diff --git a/src/webview/PanelViewProvider.ts b/src/webview/PanelViewProvider.ts index 6aa1d768..aa3ad67e 100644 --- a/src/webview/PanelViewProvider.ts +++ b/src/webview/PanelViewProvider.ts @@ -4,12 +4,14 @@ import { Constants } from '../common/Constants'; import { CommandAction, ICommand, TableDetails } from '../view/app/model'; import { TableNode } from '../treeview/TableNode'; import { TablesListProvider } from '../treeview/TablesListProvider'; +import { FavoritesProvider } from '../treeview/FavoritesProvider'; export class PanelViewProvider implements vscode.WebviewViewProvider { public static readonly viewType = `${Constants.globalExtensionKey}-panel`; public _view?: vscode.WebviewView; public tableNode?: TableNode; public tableListProvider?: TablesListProvider; + public favoritesProvider?: FavoritesProvider; public readonly configuration = vscode.workspace.getConfiguration( Constants.globalExtensionKey ); diff --git a/src/webview/QueryEditor.ts b/src/webview/QueryEditor.ts index 6d0ae854..14a61487 100644 --- a/src/webview/QueryEditor.ts +++ b/src/webview/QueryEditor.ts @@ -10,6 +10,7 @@ import { Logger } from '../common/Logger'; import { ProcessorFactory } from '../repo/processor/ProcessorFactory'; import { Constants } from '../common/Constants'; import { queryEditorCache } from './queryEditor/queryEditorCache'; +import { FavoritesProvider } from '../treeview/FavoritesProvider'; export class QueryEditor { public readonly panel: vscode.WebviewPanel | undefined; @@ -27,6 +28,7 @@ export class QueryEditor { private context: vscode.ExtensionContext, private tableNode: TableNode, private tableListProvider: TablesListProvider, + private favoritesProvider: FavoritesProvider, private fieldProvider: FieldsViewProvider ) { this.extensionPath = context.asAbsolutePath(''); @@ -39,7 +41,7 @@ export class QueryEditor { this.panel = vscode.window.createWebviewPanel( 'queryOETable', // Identifies the type of the webview. Used internally - `${this.tableListProvider.config?.label}.${this.tableNode.tableName}`, // Title of the panel displayed to the user + `${this.favoritesProvider.config?.label}.${this.tableNode.tableName}`, // Title of the panel displayed to the user vscode.ViewColumn.One, // Editor column to show the new webview panel in. { enableScripts: true, @@ -83,10 +85,10 @@ export class QueryEditor { this.logger.log('command:', command); switch (command.action) { case CommandAction.Query: - if (this.tableListProvider.config) { + if (this.favoritesProvider.config) { ProcessorFactory.getProcessorInstance() .getTableData( - this.tableListProvider.config, + this.favoritesProvider.config, this.tableNode.tableName, command.params ) @@ -107,10 +109,10 @@ export class QueryEditor { } break; case CommandAction.CRUD: - if (this.tableListProvider.config) { + if (this.favoritesProvider.config) { ProcessorFactory.getProcessorInstance() .getTableData( - this.tableListProvider.config, + this.favoritesProvider.config, this.tableNode.tableName, command.params ) @@ -128,10 +130,10 @@ export class QueryEditor { } break; case CommandAction.Submit: - if (this.tableListProvider.config) { + if (this.favoritesProvider.config) { ProcessorFactory.getProcessorInstance() .submitTableData( - this.tableListProvider.config, + this.favoritesProvider.config, this.tableNode.tableName, command.params ) @@ -168,10 +170,10 @@ export class QueryEditor { } break; case CommandAction.Export: - if (this.tableListProvider.config) { + if (this.favoritesProvider.config) { ProcessorFactory.getProcessorInstance() .getTableData( - this.tableListProvider.config, + this.favoritesProvider.config, this.tableNode.tableName, command.params ) @@ -187,7 +189,7 @@ export class QueryEditor { dumpFileFormatter.formatDumpFile( oe, this.tableNode.tableName, - this.tableListProvider.config! + this.favoritesProvider.config! .label ); exportData = From 24be4211780bdb1e1d252fa69e82071d265787e4 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Tue, 27 Feb 2024 13:17:57 +0200 Subject: [PATCH 11/30] Added switch to determine which config to use. --- src/treeview/FavoritesProvider.ts | 8 +++--- src/treeview/TableNode.ts | 5 +++- src/treeview/TablesListProvider.ts | 3 ++- src/webview/QueryEditor.ts | 39 +++++++++++++++++++----------- 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/treeview/FavoritesProvider.ts b/src/treeview/FavoritesProvider.ts index 28ac82f4..dcf4f2f1 100644 --- a/src/treeview/FavoritesProvider.ts +++ b/src/treeview/FavoritesProvider.ts @@ -1,9 +1,8 @@ import * as vscode from 'vscode'; import { TableNode } from './TableNode'; -import { INode } from './INode'; import { TablesListProvider } from './TablesListProvider'; import { PanelViewProvider } from '../webview/PanelViewProvider'; -import { IConfig, TableCount } from '../view/app/model'; +import { TableCount } from '../view/app/model'; import { Constants } from '../common/Constants'; export class FavoritesProvider extends TablesListProvider { @@ -34,7 +33,7 @@ export class FavoritesProvider extends TablesListProvider { return treeItem; } - public async getFavorites(): Promise { + private async getFavorites(): Promise { const favoritesData = this.context.globalState.get< { dbId: string; @@ -57,7 +56,8 @@ export class FavoritesProvider extends TablesListProvider { data.tableName, data.tableType, data.connectionName, - data.connectionLabel + data.connectionLabel, + 'favorites' ) ); diff --git a/src/treeview/TableNode.ts b/src/treeview/TableNode.ts index f3bdef4d..d4817045 100644 --- a/src/treeview/TableNode.ts +++ b/src/treeview/TableNode.ts @@ -9,6 +9,7 @@ export class TableNode implements INode { public connectionName: string; public connectionLabel: string; public cache: TableDetails | undefined; + public source: 'tables' | 'favorites'; constructor( private context: vscode.ExtensionContext, @@ -16,13 +17,15 @@ export class TableNode implements INode { tableName: string, tableType: string, connectionName: string, - connectionLabel: string + connectionLabel: string, + source: 'tables' | 'favorites' ) { this.dbId = dbId; this.tableName = tableName; this.tableType = tableType; this.connectionName = connectionName; this.connectionLabel = connectionLabel; + this.source = source; } public getTreeItem(): vscode.TreeItem { diff --git a/src/treeview/TablesListProvider.ts b/src/treeview/TablesListProvider.ts index b7f0eee1..645e63ea 100644 --- a/src/treeview/TablesListProvider.ts +++ b/src/treeview/TablesListProvider.ts @@ -215,7 +215,8 @@ export class TablesListProvider implements vscode.TreeDataProvider { table.name, table.tableType, connectionName, - connectionLabel + connectionLabel, + 'tables' ) ); } diff --git a/src/webview/QueryEditor.ts b/src/webview/QueryEditor.ts index 14a61487..07b7a980 100644 --- a/src/webview/QueryEditor.ts +++ b/src/webview/QueryEditor.ts @@ -1,6 +1,6 @@ import path = require('path'); import * as vscode from 'vscode'; -import { ICommand, CommandAction } from '../view/app/model'; +import { ICommand, CommandAction, IConfig } from '../view/app/model'; import { IOETableData } from '../db/Oe'; import { TableNode } from '../treeview/TableNode'; import { TablesListProvider } from '../treeview/TablesListProvider'; @@ -35,13 +35,25 @@ export class QueryEditor { this.tableName = tableNode.tableName; this.fieldsProvider = fieldProvider; - if (tableListProvider.config) { - this.readOnly = tableListProvider.config?.isReadOnly; + let config: IConfig | undefined; + switch (this.tableNode.source) { + case 'tables': + config = this.tableListProvider.config; + break; + case 'favorites': + config = this.favoritesProvider.config; + break; + default: + return; + } + + if (config) { + this.readOnly = config?.isReadOnly; } this.panel = vscode.window.createWebviewPanel( 'queryOETable', // Identifies the type of the webview. Used internally - `${this.favoritesProvider.config?.label}.${this.tableNode.tableName}`, // Title of the panel displayed to the user + `${config?.label}.${this.tableNode.tableName}`, // Title of the panel displayed to the user vscode.ViewColumn.One, // Editor column to show the new webview panel in. { enableScripts: true, @@ -85,10 +97,10 @@ export class QueryEditor { this.logger.log('command:', command); switch (command.action) { case CommandAction.Query: - if (this.favoritesProvider.config) { + if (config) { ProcessorFactory.getProcessorInstance() .getTableData( - this.favoritesProvider.config, + config, this.tableNode.tableName, command.params ) @@ -109,10 +121,10 @@ export class QueryEditor { } break; case CommandAction.CRUD: - if (this.favoritesProvider.config) { + if (config) { ProcessorFactory.getProcessorInstance() .getTableData( - this.favoritesProvider.config, + config, this.tableNode.tableName, command.params ) @@ -130,10 +142,10 @@ export class QueryEditor { } break; case CommandAction.Submit: - if (this.favoritesProvider.config) { + if (config) { ProcessorFactory.getProcessorInstance() .submitTableData( - this.favoritesProvider.config, + config, this.tableNode.tableName, command.params ) @@ -170,10 +182,10 @@ export class QueryEditor { } break; case CommandAction.Export: - if (this.favoritesProvider.config) { + if (config) { ProcessorFactory.getProcessorInstance() .getTableData( - this.favoritesProvider.config, + config, this.tableNode.tableName, command.params ) @@ -189,8 +201,7 @@ export class QueryEditor { dumpFileFormatter.formatDumpFile( oe, this.tableNode.tableName, - this.favoritesProvider.config! - .label + config!.label ); exportData = dumpFileFormatter.getDumpFile(); From 68dd089340db14f99a9156cd9a8ba18b84cd1972 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Tue, 27 Feb 2024 14:21:57 +0200 Subject: [PATCH 12/30] fix --- src/treeview/FavoritesProvider.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/treeview/FavoritesProvider.ts b/src/treeview/FavoritesProvider.ts index dcf4f2f1..64fc4db3 100644 --- a/src/treeview/FavoritesProvider.ts +++ b/src/treeview/FavoritesProvider.ts @@ -2,7 +2,7 @@ import * as vscode from 'vscode'; import { TableNode } from './TableNode'; import { TablesListProvider } from './TablesListProvider'; import { PanelViewProvider } from '../webview/PanelViewProvider'; -import { TableCount } from '../view/app/model'; +import { IConfig, TableCount } from '../view/app/model'; import { Constants } from '../common/Constants'; export class FavoritesProvider extends TablesListProvider { @@ -11,7 +11,7 @@ export class FavoritesProvider extends TablesListProvider { > = new vscode.EventEmitter(); readonly onDidChangeTreeData: vscode.Event = this._onDidChangeTreeData.event; - public tableClicked: TableCount = { tableName: undefined, count: 0 }; + public configs: IConfig[] | undefined; constructor( fieldsProvider: PanelViewProvider, @@ -123,4 +123,11 @@ export class FavoritesProvider extends TablesListProvider { return []; } } + + public refresh(configs: IConfig[] | undefined): void { + if (configs !== undefined) { + this.configs = configs; + } + this._onDidChangeTreeData.fire(); + } } From 18d2198b5be996b913348a57807407d53db2cacc Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Wed, 28 Feb 2024 10:30:25 +0200 Subject: [PATCH 13/30] Removed vscode api from props --- src/view/app/Connection/connectionForm.tsx | 176 ++++++++++++--------- src/view/app/Connection/index.tsx | 3 - src/view/app/Indexes/index.tsx | 2 - src/view/app/Indexes/indexes.tsx | 48 +++--- 4 files changed, 126 insertions(+), 103 deletions(-) diff --git a/src/view/app/Connection/connectionForm.tsx b/src/view/app/Connection/connectionForm.tsx index 72d59a5c..d2b7cf9e 100644 --- a/src/view/app/Connection/connectionForm.tsx +++ b/src/view/app/Connection/connectionForm.tsx @@ -5,23 +5,23 @@ import FileUploadRoundedIcon from '@mui/icons-material/FileUploadRounded'; import { PfParser } from '../utils/PfParser'; import { Logger } from '../../../common/Logger'; import { ISettings } from '../../../common/IExtensionSettings'; +import { getVSCodeAPI } from '@utils/vscode'; interface IConfigProps { - vscode: any; - initialData: IConfig; - configuration: ISettings; + initialData: IConfig; + configuration: ISettings; } interface IConfigState { - config: IConfig; + config: IConfig; } function ConnectionForm({ - vscode, initialData, configuration, ...props }: IConfigProps) { + const vscode = getVSCodeAPI(); const oldState = vscode.getState(); const initState = oldState ? oldState : { config: initialData }; const [vsState, _] = React.useState(initState); @@ -74,15 +74,18 @@ function ConnectionForm({ const messageEvent = (event) => { const message = event.data; switch (message.command) { - case 'group': - setGroupNames(message.columns); - if (groupNames.length === 0) { - getGroups(); - } else { - createListener(document.getElementById('input'), groupNames); - } + case 'group': + setGroupNames(message.columns); + if (groupNames.length === 0) { + getGroups(); + } else { + createListener( + document.getElementById('input'), + groupNames + ); + } - break; + break; } }; @@ -176,7 +179,8 @@ function ConnectionForm({ if (e.key === 'Enter' && selected !== null) { e.preventDefault(); - const selectedText = document.querySelector('.selected').textContent; + const selectedText = + document.querySelector('.selected').textContent; setGroup(selectedText); createListener(document.getElementById('input'), groupNames); @@ -195,7 +199,9 @@ function ConnectionForm({ item.classList.remove('selected'); }); if (selected.previousElementSibling === null) { - selected.parentElement.lastElementChild.classList.add('selected'); + selected.parentElement.lastElementChild.classList.add( + 'selected' + ); } else { selected.previousElementSibling.classList.add('selected'); } @@ -219,7 +225,9 @@ function ConnectionForm({ }); if (selected.nextElementSibling === null) { - selected.parentElement.firstElementChild.classList.add('selected'); + selected.parentElement.firstElementChild.classList.add( + 'selected' + ); } else { selected.nextElementSibling.classList.add('selected'); } @@ -244,23 +252,28 @@ function ConnectionForm({ } function mouseoverListener() { - document.querySelectorAll('.autocomplete-list li').forEach(function (item) { - item.addEventListener('mouseover', function () { - document - .querySelectorAll('.autocomplete-list li') - .forEach(function (item) { - item.classList.remove('selected'); - }); - this.classList.add('selected'); - }); - item.addEventListener('click', function () { - setGroup(this.innerHTML); - document.getElementById('input').focus(); - setTimeout(() => { - createListener(document.getElementById('input'), groupNames); - }, 301); + document + .querySelectorAll('.autocomplete-list li') + .forEach(function (item) { + item.addEventListener('mouseover', function () { + document + .querySelectorAll('.autocomplete-list li') + .forEach(function (item) { + item.classList.remove('selected'); + }); + this.classList.add('selected'); + }); + item.addEventListener('click', function () { + setGroup(this.innerHTML); + document.getElementById('input').focus(); + setTimeout(() => { + createListener( + document.getElementById('input'), + groupNames + ); + }, 301); + }); }); - }); } function hideSuggestions() { @@ -276,26 +289,26 @@ function ConnectionForm({ return ( -
-
-
Connect to server
+
+
+
Connect to server
{!workState && ( } > - Import .pf + Import .pf )}
-
-
-
-
+
+ +
+
{ setLabel(event.target.value); @@ -303,11 +316,11 @@ function ConnectionForm({ disabled={workState} />
-
+
{ getGroups(); @@ -323,12 +336,15 @@ function ConnectionForm({ disabled={workState} onKeyDown={handleKeyDown} /> -
    +
      -
      +
      { setName(event.target.value); @@ -337,11 +353,11 @@ function ConnectionForm({ />
      -
      -
      +
      +
      { setDescription(event.target.value); @@ -350,11 +366,11 @@ function ConnectionForm({ />
      -
      -
      +
      +
      { setHost(event.target.value); @@ -362,10 +378,10 @@ function ConnectionForm({ disabled={workState} />
      -
      +
      { setPort(event.target.value); @@ -373,10 +389,10 @@ function ConnectionForm({ disabled={workState} />
      -
      +
      { setUser(event.target.value); @@ -384,10 +400,10 @@ function ConnectionForm({ disabled={workState} />
      -
      +
      { setPassword(event.target.value); @@ -395,10 +411,10 @@ function ConnectionForm({ disabled={workState} />
      -
      +
      { setParams(event.target.value); @@ -407,15 +423,23 @@ function ConnectionForm({ />
      -
      +
      {!workState && ( -
      - +
      +
      )} {!workState && ( -
      - +
      +
      )}
      diff --git a/src/view/app/Connection/index.tsx b/src/view/app/Connection/index.tsx index 458a98d1..3cfbeb9b 100644 --- a/src/view/app/Connection/index.tsx +++ b/src/view/app/Connection/index.tsx @@ -13,13 +13,10 @@ declare global { } } -const vscode = window.acquireVsCodeApi(); - const root = createRoot(document.getElementById('root')); root.render( ); diff --git a/src/view/app/Indexes/index.tsx b/src/view/app/Indexes/index.tsx index f69e6975..35b13252 100644 --- a/src/view/app/Indexes/index.tsx +++ b/src/view/app/Indexes/index.tsx @@ -11,13 +11,11 @@ declare global { configuration: ISettings; } } -const vscode = window.acquireVsCodeApi(); const root = createRoot(document.getElementById('root')); root.render( ); diff --git a/src/view/app/Indexes/indexes.tsx b/src/view/app/Indexes/indexes.tsx index 8f6dd65f..9ee98f81 100644 --- a/src/view/app/Indexes/indexes.tsx +++ b/src/view/app/Indexes/indexes.tsx @@ -6,24 +6,24 @@ import type { SortColumn } from 'react-data-grid'; import * as columnName from './column.json'; import { Logger } from '../../../common/Logger'; import { ISettings } from '../../../common/IExtensionSettings'; +import { getVSCodeAPI } from '@utils/vscode'; interface IConfigProps { - vscode: any - tableDetails: TableDetails + tableDetails: TableDetails; configuration: ISettings; } type Comparator = (a: IndexRow, b: IndexRow) => number; function getComparator(sortColumn: string): Comparator { switch (sortColumn) { - case 'cName': - case 'cFlags': - case 'cFields': - return (a, b) => { - return a[sortColumn].localeCompare(b[sortColumn]); - }; - default: - throw new Error(`unsupported sortColumn: "${sortColumn}"`); + case 'cName': + case 'cFlags': + case 'cFields': + return (a, b) => { + return a[sortColumn].localeCompare(b[sortColumn]); + }; + default: + throw new Error(`unsupported sortColumn: "${sortColumn}"`); } } @@ -31,7 +31,7 @@ function rowKeyGetter(row: IndexRow) { return row.cName; } -function Indexes({ tableDetails, configuration, vscode }: IConfigProps) { +function Indexes({ tableDetails, configuration }: IConfigProps) { const [rows, setRows] = useState(tableDetails.indexes); const [dataLoaded, setDataLoaded] = useState(false); const [sortColumns, setSortColumns] = useState([]); @@ -40,14 +40,19 @@ function Indexes({ tableDetails, configuration, vscode }: IConfigProps) { ); const [windowHeight, setWindowHeight] = React.useState(window.innerHeight); const logger = new Logger(configuration.logging.react); + const vscode = getVSCodeAPI(); const windowRezise = () => { setWindowHeight(window.innerHeight); }; - window.addEventListener('contextmenu', e => { - e.stopImmediatePropagation(); - }, true); + window.addEventListener( + 'contextmenu', + (e) => { + e.stopImmediatePropagation(); + }, + true + ); React.useEffect(() => { window.addEventListener('resize', windowRezise); @@ -79,15 +84,16 @@ function Indexes({ tableDetails, configuration, vscode }: IConfigProps) { const message = event.data; logger.log('indexes explorer data', message); switch (message.command) { - case 'data': - setRows(message.data.indexes); - setDataLoaded(true); + case 'data': + setRows(message.data.indexes); + setDataLoaded(true); } }); }); const refresh = () => { const obj = { + id: '2', action: CommandAction.RefreshTableData, }; logger.log('Refresh Table Data', obj); @@ -96,12 +102,10 @@ function Indexes({ tableDetails, configuration, vscode }: IConfigProps) { return (
      - {!dataLoaded ? ( - - ) : rows.length > 0 ? ( Date: Fri, 1 Mar 2024 13:47:14 +0200 Subject: [PATCH 14/30] Fixed sorting bug --- src/view/app/Query/query.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/view/app/Query/query.tsx b/src/view/app/Query/query.tsx index d03706f5..90b50163 100644 --- a/src/view/app/Query/query.tsx +++ b/src/view/app/Query/query.tsx @@ -79,6 +79,7 @@ function QueryForm({ const [initialDataLoad, setInitialDataLoad] = useState(true); const [recordColor, setRecordColor] = useState('red'); const logger = new Logger(configuration.logging.react); + const [procBusy, setProcBusy] = useState(false); window.addEventListener( 'contextmenu', @@ -177,6 +178,9 @@ function QueryForm({ } break; case 'data': + if (procBusy) { + setProcBusy(false); + } if (message.data.error) { setErrorObject({ error: message.data.error, @@ -536,6 +540,7 @@ function QueryForm({ }; logger.log('make query', command); vscode.postMessage(command); + setProcBusy(true); } function isAtBottom({ currentTarget }: UIEvent): boolean { @@ -569,7 +574,7 @@ function QueryForm({ } function onSortClick(inputSortColumns: SortColumn[]) { - if (isLoading) { + if (isLoading || procBusy) { return; } setSortAction(true); From 6fe3f1c8ad3409a14403d0d0716766b93f880e91 Mon Sep 17 00:00:00 2001 From: jkniuksta Date: Fri, 1 Mar 2024 13:47:14 +0200 Subject: [PATCH 15/30] Fixed sorting bug --- src/view/app/Query/query.tsx | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/view/app/Query/query.tsx b/src/view/app/Query/query.tsx index bf422454..cc5212b4 100644 --- a/src/view/app/Query/query.tsx +++ b/src/view/app/Query/query.tsx @@ -1,6 +1,7 @@ import { CSSProperties, Fragment, + UIEvent, useEffect, useRef, @@ -11,7 +12,9 @@ import DataGrid, { SortColumn, SelectColumn, CopyEvent } from 'react-data-grid'; import { IOETableData } from '@src/db/Oe'; import { CommandAction, ICommand, ProcessAction } from '../model'; + import { Logger } from '@src/common/Logger'; + import { getOEFormatLength } from '@utils/oe/format/oeFormat'; import { OEDataTypePrimitive } from '@utils/oe/oeDataTypeEnum'; import { IErrorObject, emptyErrorObj } from '@utils/error'; @@ -29,6 +32,7 @@ const filterCSS: CSSProperties = { }; interface IConfigProps { + tableData: IOETableData; tableName: string; isReadOnly: boolean; @@ -41,8 +45,10 @@ interface IStatisticsObject { } function QueryForm({ + tableData, tableName, + isReadOnly, ...props }: IConfigProps) { @@ -93,6 +99,7 @@ function QueryForm({ const setFilters = (data) => { filtersRef.current = data; _setFilters(data); + }; const windowResize = () => { @@ -266,6 +273,7 @@ function QueryForm({ textOverflow: 'ellipsis', }} + > {column.name} @@ -350,7 +358,9 @@ function QueryForm({ row[field.name] = row[field.name].toString(); } }); + }); + } setRawRows([...rawRows, ...message.data.rawData]); setRowID( @@ -408,6 +418,8 @@ function QueryForm({ ); }; + + function reloadData(loaded: number) { setLoaded(0); setRawRows([]); @@ -440,6 +452,7 @@ function QueryForm({ }; logger.log('make query', command); vscode.postMessage(command); + setProcBusy(true); } function isAtBottom({ currentTarget }: UIEvent): boolean { @@ -473,7 +486,7 @@ function QueryForm({ } function onSortClick(inputSortColumns: SortColumn[]) { - if (isLoading) { + if (isLoading || procBusy) { return; } setSortAction(true); @@ -501,6 +514,7 @@ function QueryForm({ ); } else { setSortAction(false); + } } @@ -520,6 +534,7 @@ function QueryForm({ setAction(ProcessAction.Read); setReadRow(row); setOpen(true); + }; function filterColumns() { @@ -547,6 +562,8 @@ function QueryForm({ } } + + const calculateHeight = () => { const rowCount = isFormatted ? formattedRows.length : rawRows.length; let minHeight; From b7e63bfffdce385e4024ef20e106b708e6e123fe Mon Sep 17 00:00:00 2001 From: jkniuksta Date: Fri, 1 Mar 2024 15:39:27 +0200 Subject: [PATCH 16/30] Fixed sorting bug again --- src/view/app/Query/query.tsx | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/src/view/app/Query/query.tsx b/src/view/app/Query/query.tsx index cc5212b4..805a7f08 100644 --- a/src/view/app/Query/query.tsx +++ b/src/view/app/Query/query.tsx @@ -1,7 +1,6 @@ import { CSSProperties, Fragment, - UIEvent, useEffect, useRef, @@ -32,7 +31,6 @@ const filterCSS: CSSProperties = { }; interface IConfigProps { - tableData: IOETableData; tableName: string; isReadOnly: boolean; @@ -45,7 +43,6 @@ interface IStatisticsObject { } function QueryForm({ - tableData, tableName, @@ -99,7 +96,6 @@ function QueryForm({ const setFilters = (data) => { filtersRef.current = data; _setFilters(data); - }; const windowResize = () => { @@ -273,7 +269,6 @@ function QueryForm({ textOverflow: 'ellipsis', }} - > {column.name} @@ -358,9 +353,7 @@ function QueryForm({ row[field.name] = row[field.name].toString(); } }); - }); - } setRawRows([...rawRows, ...message.data.rawData]); setRowID( @@ -418,8 +411,6 @@ function QueryForm({ ); }; - - function reloadData(loaded: number) { setLoaded(0); setRawRows([]); @@ -450,9 +441,11 @@ function QueryForm({ minTime: minTime, }, }; + if (!isLoading) { + setIsLoading(true); + } logger.log('make query', command); vscode.postMessage(command); - setProcBusy(true); } function isAtBottom({ currentTarget }: UIEvent): boolean { @@ -486,7 +479,7 @@ function QueryForm({ } function onSortClick(inputSortColumns: SortColumn[]) { - if (isLoading || procBusy) { + if (isLoading) { return; } setSortAction(true); @@ -514,7 +507,6 @@ function QueryForm({ ); } else { setSortAction(false); - } } @@ -534,7 +526,6 @@ function QueryForm({ setAction(ProcessAction.Read); setReadRow(row); setOpen(true); - }; function filterColumns() { @@ -562,8 +553,6 @@ function QueryForm({ } } - - const calculateHeight = () => { const rowCount = isFormatted ? formattedRows.length : rawRows.length; let minHeight; From 39ede65179e09fa343171c654ac2e733a4a650c9 Mon Sep 17 00:00:00 2001 From: Antanas Valencius Date: Tue, 5 Mar 2024 10:45:12 +0200 Subject: [PATCH 17/30] 295: added ability to highlight a column doubleclicking a field --- src/common/commands.ts | 6 ++ src/db/DatabaseProcessor.ts | 24 +++++--- src/repo/processor/database/DbProcessor.ts | 15 +++-- src/treeview/TablesListProvider.ts | 2 + src/view/app/Fields/fields.tsx | 14 +++++ src/view/app/Query/Update/update.tsx | 3 +- src/view/app/Query/query.tsx | 64 ++++++++++++++++------ src/view/app/model.ts | 2 + src/webview/FieldsViewProvider.ts | 35 ++++++++++++ src/webview/QueryEditor.ts | 13 +++++ 10 files changed, 149 insertions(+), 29 deletions(-) create mode 100644 src/common/commands.ts diff --git a/src/common/commands.ts b/src/common/commands.ts new file mode 100644 index 00000000..1a89447d --- /dev/null +++ b/src/common/commands.ts @@ -0,0 +1,6 @@ +import { ICommand } from '../view/app/model'; + +export interface IHighlightFieldsCommand extends ICommand { + column: string; + tableName: string; +} diff --git a/src/db/DatabaseProcessor.ts b/src/db/DatabaseProcessor.ts index 39f49922..1a819a09 100644 --- a/src/db/DatabaseProcessor.ts +++ b/src/db/DatabaseProcessor.ts @@ -77,7 +77,7 @@ export class DatabaseProcessor implements IProcessor { } } - public getTableDetails( + public async getTableDetails( config: IConfig | undefined, tableName: string | undefined ): Promise { @@ -87,19 +87,27 @@ export class DatabaseProcessor implements IProcessor { command: 'get_table_details', params: tableName, }; - return this.execShell(params); + return { + ...(await this.execShell(params)), + tableName: tableName ?? '', + }; } else { - return Promise.resolve({ fields: [], indexes: [] }); + return Promise.resolve({ + fields: [], + indexes: [], + tableName: tableName ?? '', + }); } } private execShell(params: IOEParams): Promise { const cmd = `${Buffer.from(JSON.stringify(params)).toString('base64')}`; if ( - // if process is running and not timed out + // if process is running and not timed out DatabaseProcessor.processStartTime !== undefined && - DatabaseProcessor.processStartTime + DatabaseProcessor.processTimeout > - Date.now() + DatabaseProcessor.processStartTime + + DatabaseProcessor.processTimeout > + Date.now() ) { // then return error vscode.window.showInformationMessage('Processor is busy'); @@ -109,7 +117,9 @@ export class DatabaseProcessor implements IProcessor { if (DatabaseProcessor.errObj.isError) { // vscode.window.showErrorMessage(DatabaseProcessor.errObj.errMessage); - return Promise.resolve(new Error(DatabaseProcessor.errObj.errMessage)); + return Promise.resolve( + new Error(DatabaseProcessor.errObj.errMessage) + ); } DatabaseProcessor.processStartTime = Date.now(); diff --git a/src/repo/processor/database/DbProcessor.ts b/src/repo/processor/database/DbProcessor.ts index 858e5eee..f66e2917 100644 --- a/src/repo/processor/database/DbProcessor.ts +++ b/src/repo/processor/database/DbProcessor.ts @@ -120,9 +120,16 @@ export class DbProcessor implements IProcessor { command: 'get_table_details', params: tableName, }; - return this.execRequest(config, params); + return { + ...(await this.execRequest(config, params)), + tableName: tableName ?? '', + }; } else { - return Promise.resolve({ fields: [], indexes: [] }); + return Promise.resolve({ + fields: [], + indexes: [], + tableName: tableName ?? '', + }); } } @@ -133,9 +140,9 @@ export class DbProcessor implements IProcessor { const cmd = `${Buffer.from(JSON.stringify(params)).toString('base64')}`; if ( - // if process is running and not timed out + // if process is running and not timed out this.processStartTime !== undefined && - this.processStartTime + this.processTimeout > Date.now() + this.processStartTime + this.processTimeout > Date.now() ) { // then return error vscode.window.showInformationMessage('Processor is busy'); diff --git a/src/treeview/TablesListProvider.ts b/src/treeview/TablesListProvider.ts index ac972905..5a4b5b3d 100644 --- a/src/treeview/TablesListProvider.ts +++ b/src/treeview/TablesListProvider.ts @@ -78,6 +78,8 @@ export class TablesListProvider implements vscode.TreeDataProvider { node.cache = oeTableDetails; + console.log('node.cache', node.cache); + updateAllColumnsCache(this.node, fieldNames); this.fieldsProvider._view?.webview.postMessage({ diff --git a/src/view/app/Fields/fields.tsx b/src/view/app/Fields/fields.tsx index 7fd05d19..8324ddd4 100644 --- a/src/view/app/Fields/fields.tsx +++ b/src/view/app/Fields/fields.tsx @@ -18,6 +18,7 @@ import { Logger } from '../../../common/Logger'; import * as columnName from './column.json'; import { OEDataTypePrimitive } from '@utils/oe/oeDataTypeEnum'; import { getVSCodeAPI, getVSCodeConfiguration } from '@utils/vscode'; +import { IHighlightFieldsCommand } from '@src/common/commands'; interface FieldsExplorerEvent { id: string; @@ -306,6 +307,7 @@ function Fields({ tableDetails }: Readonly) { ) ); } + break; } } ); @@ -332,6 +334,17 @@ function Fields({ tableDetails }: Readonly) { vscode.postMessage(obj); }; + const onRowDoubleClick = (row: FieldRow) => { + const obj: IHighlightFieldsCommand = { + id: 'highlightColumn', + action: CommandAction.FieldsHighlightColumn, + column: row.name, + tableName: tableDetails.tableName, + }; + logger.log('highlight column', obj); + vscode.postMessage(obj); + }; + return (
      {!dataLoaded ? ( @@ -354,6 +367,7 @@ function Fields({ tableDetails }: Readonly) { sortColumns={sortColumns} onSortColumnsChange={setSortColumns} style={{ height: windowHeight }} + onRowDoubleClick={onRowDoubleClick} /> ) : null}
      diff --git a/src/view/app/Query/Update/update.tsx b/src/view/app/Query/Update/update.tsx index 39158241..41d7ae23 100644 --- a/src/view/app/Query/Update/update.tsx +++ b/src/view/app/Query/Update/update.tsx @@ -119,8 +119,7 @@ const UpdatePopup: React.FC = ({ processRecord(ProcessAction.Copy); }; - logger.log('crud action', action); - if (action !== ProcessAction.Delete) { + if (action >= 0 && action !== ProcessAction.Delete) { switch (action) { case ProcessAction.Update: case ProcessAction.Insert: diff --git a/src/view/app/Query/query.tsx b/src/view/app/Query/query.tsx index bf422454..f6b22a38 100644 --- a/src/view/app/Query/query.tsx +++ b/src/view/app/Query/query.tsx @@ -7,7 +7,12 @@ import { useState, } from 'react'; -import DataGrid, { SortColumn, SelectColumn, CopyEvent } from 'react-data-grid'; +import DataGrid, { + SortColumn, + SelectColumn, + CopyEvent, + DataGridHandle, +} from 'react-data-grid'; import { IOETableData } from '@src/db/Oe'; import { CommandAction, ICommand, ProcessAction } from '../model'; @@ -21,6 +26,7 @@ import QueryFormHead from '@app/Components/Layout/Query/QueryFormHead'; import { IFilters } from '@app/common/types'; import { getVSCodeAPI, getVSCodeConfiguration } from '@utils/vscode'; import { green, red } from '@mui/material/colors'; +import { IHighlightFieldsCommand } from '@src/common/commands'; const filterCSS: CSSProperties = { inlineSize: '100%', @@ -72,6 +78,7 @@ function QueryForm({ const [initialDataLoad, setInitialDataLoad] = useState(true); const [recordColor, setRecordColor] = useState('red'); const [selectedRows, setSelectedRows] = useState>(new Set()); + const queryGridRef = useRef(null); const configuration = getVSCodeConfiguration(); const logger = new Logger(configuration.logging.react); @@ -127,10 +134,28 @@ function QueryForm({ }; }, []); + const highlightColumn = (column: string) => { + // + 1 because columns start from index 1. Rows start from index 0. + const columnIdx: number = selectedColumns.indexOf(column) + 1; + + if (!columnIdx || columnIdx < 0) { + return; + } + + const cellHeight = getCellHeight(); + const rowIdx = Math.floor(scrollHeight / cellHeight); + + // scrollToColumn doesn't work, so a workaround is to use selectCell and rowIdx + queryGridRef.current?.selectCell({ idx: columnIdx, rowIdx: rowIdx }); + }; + const messageEvent = (event) => { const message = event.data; logger.log('got query data', message); switch (message.command) { + case 'highlightColumn': + highlightColumn((message as IHighlightFieldsCommand).column); + break; case 'columns': setSelectedColumns([...message.columns]); break; @@ -442,24 +467,26 @@ function QueryForm({ vscode.postMessage(command); } - function isAtBottom({ currentTarget }: UIEvent): boolean { + const isAtBottom = ({ + currentTarget, + }: UIEvent): boolean => { return ( currentTarget.scrollTop + 10 >= currentTarget.scrollHeight - currentTarget.clientHeight ); - } + }; - function isHorizontalScroll({ + const isHorizontalScroll = ({ currentTarget, - }: UIEvent): boolean { + }: UIEvent): boolean => { return currentTarget.scrollTop === scrollHeight; - } + }; - async function handleScroll(event: UIEvent) { + const handleScroll = (event: UIEvent) => { + setScrollHeight(event.currentTarget.scrollTop); if (isLoading || !isAtBottom(event) || isHorizontalScroll(event)) { return; } - setScrollHeight(event.currentTarget.scrollTop); setIsLoading(true); makeQuery( loaded, @@ -470,7 +497,7 @@ function QueryForm({ configuration.batchMaxTimeout, configuration.batchMinTimeout ); - } + }; function onSortClick(inputSortColumns: SortColumn[]) { if (isLoading) { @@ -547,18 +574,22 @@ function QueryForm({ } } - const calculateHeight = () => { - const rowCount = isFormatted ? formattedRows.length : rawRows.length; - let minHeight; + const getCellHeight = () => { if (configuration.gridTextSize === 'Large') { - minHeight = 40; + return 40; } else if (configuration.gridTextSize === 'Medium') { - minHeight = 30; + return 30; } else if (configuration.gridTextSize === 'Small') { - minHeight = 20; + return 20; } + return 30; + }; + + const calculateHeight = () => { + const rowCount = isFormatted ? formattedRows.length : rawRows.length; + const cellHeight = getCellHeight(); const startingHeight = 85; - const calculatedHeight = startingHeight + rowCount * minHeight; + const calculatedHeight = startingHeight + rowCount * cellHeight; return calculatedHeight; }; @@ -609,6 +640,7 @@ function QueryForm({ /> { + if (queryEditor.panel?.active) { + queryEditor.panel?.reveal(); + queryEditor.highlightColumn(command.column); + revealedEditorFound = true; + } + }); + + // if no active panels were found, then try to reveala first panel and then highlight + if (!revealedEditorFound && this.queryEditors.length > 0) { + const firstEditor = this.queryEditors.find( + (val) => val.tableName === command.tableName + ); + + firstEditor?.panel?.reveal(); + firstEditor?.highlightColumn(command.column); + } + } + public resolveWebviewView( webviewView: vscode.WebviewView ): void | Thenable { @@ -56,6 +86,11 @@ export class FieldsViewProvider extends PanelViewProvider { ); this.notifyQueryEditors(); break; + case CommandAction.FieldsHighlightColumn: + this.highlightQueryEditorsColumn( + command as IHighlightFieldsCommand + ); + break; } }); } diff --git a/src/webview/QueryEditor.ts b/src/webview/QueryEditor.ts index 6d0ae854..adbd491b 100644 --- a/src/webview/QueryEditor.ts +++ b/src/webview/QueryEditor.ts @@ -244,6 +244,19 @@ export class QueryEditor { this.panel?.webview.postMessage(obj); } + /** + * Creates a request to the frontend to highlight a column + * @param {string} column column name to highlight for the table + */ + public highlightColumn(column: string) { + const obj = { + command: 'highlightColumn', + column: column, + }; + this.logger.log('highlighColumn:', obj); + this.panel?.webview.postMessage(obj); + } + private getWebviewContent(tableData: IOETableData): string { // Local path to main script run in the webview const reactAppPathOnDisk = vscode.Uri.file( From b649fb9924d96f341a65c0514f676d8e9e4c17e9 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Tue, 5 Mar 2024 11:03:38 +0200 Subject: [PATCH 18/30] Fixes --- src/extension.ts | 35 ++++++------------------------ src/treeview/FavoritesProvider.ts | 26 +++++++++++++++------- src/treeview/TableNode.ts | 9 ++++++-- src/treeview/TablesListProvider.ts | 7 +++--- src/webview/QueryEditor.ts | 6 ++--- 5 files changed, 38 insertions(+), 45 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 79df89ff..7e617aa7 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -277,7 +277,7 @@ export function activate(context: vscode.ExtensionContext) { * Creates a new query editor or if already open, then reveals it from cache and refetch data */ const loadQueryEditor = (node: TableNode): void => { - const key = tablesListProvider.node?.getFullName(true) ?? ''; + const key = node.getFullName(true) ?? ''; const cachedQueryEditor = queryEditorCache.getQueryEditor(key); @@ -300,7 +300,7 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push( vscode.commands.registerCommand( - 'pro-bro.addFavourite', + `${Constants.globalExtensionKey}.addFavourite`, (node: TableNode) => { favoritesProvider.addTableToFavorites(node); favoritesProvider.refresh(undefined); @@ -310,7 +310,7 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push( vscode.commands.registerCommand( - 'pro-bro.removeFavourite', + `${Constants.globalExtensionKey}.removeFavourite`, (node: TableNode) => { favoritesProvider.removeTableFromFavorites(node); favoritesProvider.refresh(undefined); @@ -353,7 +353,7 @@ export function activate(context: vscode.ExtensionContext) { `${Constants.globalExtensionKey}.queryFavorite`, (node: TableNode) => { favoritesProvider.selectDbConfig(node); - loadQueryEditorForFavorite(node); + loadQueryEditor(node); } ) ); @@ -470,44 +470,23 @@ export function activate(context: vscode.ExtensionContext) { } ); - const loadQueryEditorForFavorite = (node: TableNode): void => { - const key = node.getFullName(true) ?? ''; - - const cachedQueryEditor = queryEditorCache.getQueryEditor(key); - - if (cachedQueryEditor) { - cachedQueryEditor.panel?.reveal(); - cachedQueryEditor.refetchData(); - return; - } - const newQueryEditor = new QueryEditor( - context, - node, - tablesListProvider, - favoritesProvider, - fieldsProvider - ); - - queryEditorCache.setQueryEditor(key, newQueryEditor); - }; - vscode.commands.registerCommand( `${Constants.globalExtensionKey}.dblClickFavoriteQuery`, - (_) => { + () => { if (favoritesProvider.node === undefined) { return; } favoritesProvider.countClick(); if (favoritesProvider.tableClicked.count === 2) { - loadQueryEditorForFavorite(favoritesProvider.node); + loadQueryEditor(favoritesProvider.node); } } ); vscode.commands.registerCommand( `${Constants.globalExtensionKey}.dblClickQuery`, - (_) => { + () => { if (tablesListProvider.node === undefined) { return; } diff --git a/src/treeview/FavoritesProvider.ts b/src/treeview/FavoritesProvider.ts index 64fc4db3..2c44a589 100644 --- a/src/treeview/FavoritesProvider.ts +++ b/src/treeview/FavoritesProvider.ts @@ -1,8 +1,8 @@ import * as vscode from 'vscode'; -import { TableNode } from './TableNode'; +import { TableNode, TableSourceEnum } from './TableNode'; import { TablesListProvider } from './TablesListProvider'; import { PanelViewProvider } from '../webview/PanelViewProvider'; -import { IConfig, TableCount } from '../view/app/model'; +import { IConfig } from '../view/app/model'; import { Constants } from '../common/Constants'; export class FavoritesProvider extends TablesListProvider { @@ -20,7 +20,11 @@ export class FavoritesProvider extends TablesListProvider { ) { super(fieldsProvider, indexesProvider, context); } - + /** + * + * @param element + * @returns + */ public getTreeItem(element: TableNode): vscode.TreeItem { const treeItem = element.getTreeItem(); @@ -57,7 +61,7 @@ export class FavoritesProvider extends TablesListProvider { data.tableType, data.connectionName, data.connectionLabel, - 'favorites' + TableSourceEnum.Favorites ) ); @@ -79,7 +83,9 @@ export class FavoritesProvider extends TablesListProvider { (fav) => fav.tableName === node.tableName && fav.dbId === node.dbId ); - if (!isAlreadyFavorite) { + if (isAlreadyFavorite) { + return; + } else { favorites.push({ dbId: node.dbId, tableName: node.tableName, @@ -96,7 +102,7 @@ export class FavoritesProvider extends TablesListProvider { } public removeTableFromFavorites(node: TableNode): void { - let favorites = this.context.globalState.get< + const favorites = this.context.globalState.get< { dbId: string; tableName: string; @@ -106,11 +112,15 @@ export class FavoritesProvider extends TablesListProvider { }[] >('favorites', []); - favorites = favorites.filter( + if (favorites.length === 0) { + return; + } + + const filteredFavorites = favorites.filter( (fav) => !(fav.tableName === node.tableName && fav.dbId === node.dbId) ); - this.context.globalState.update('favorites', favorites); + this.context.globalState.update('favorites', filteredFavorites); vscode.window.showInformationMessage( `Removed ${node.tableName} from favorites.` ); diff --git a/src/treeview/TableNode.ts b/src/treeview/TableNode.ts index d4817045..935d2567 100644 --- a/src/treeview/TableNode.ts +++ b/src/treeview/TableNode.ts @@ -2,6 +2,11 @@ import * as vscode from 'vscode'; import { TableDetails } from '../view/app/model'; import { INode } from './INode'; +export enum TableSourceEnum { + Tables = 'tables', + Favorites = 'favorites', +} + export class TableNode implements INode { public dbId: string; public tableName: string; @@ -9,7 +14,7 @@ export class TableNode implements INode { public connectionName: string; public connectionLabel: string; public cache: TableDetails | undefined; - public source: 'tables' | 'favorites'; + public source: TableSourceEnum; constructor( private context: vscode.ExtensionContext, @@ -18,7 +23,7 @@ export class TableNode implements INode { tableType: string, connectionName: string, connectionLabel: string, - source: 'tables' | 'favorites' + source: TableSourceEnum ) { this.dbId = dbId; this.tableName = tableName; diff --git a/src/treeview/TablesListProvider.ts b/src/treeview/TablesListProvider.ts index 645e63ea..92430365 100644 --- a/src/treeview/TablesListProvider.ts +++ b/src/treeview/TablesListProvider.ts @@ -3,7 +3,7 @@ import { INode } from './INode'; import * as tableNode from './TableNode'; import { IConfig, TableCount } from '../view/app/model'; import { ProcessorFactory } from '../repo/processor/ProcessorFactory'; -import { TableNode } from './TableNode'; +import { TableNode, TableSourceEnum } from './TableNode'; import { PanelViewProvider } from '../webview/PanelViewProvider'; import { getAllColumnsCache, @@ -19,12 +19,11 @@ export class TablesListProvider implements vscode.TreeDataProvider { public tableNodes: tableNode.TableNode[] = []; public filters: string[] | undefined = ['UserTable']; public tableClicked: TableCount = { tableName: undefined, count: 0 }; - context: vscode.ExtensionContext; constructor( public fieldsProvider: PanelViewProvider, public indexesProvider: PanelViewProvider, - context: vscode.ExtensionContext + public context: vscode.ExtensionContext ) { this.context = context; } @@ -216,7 +215,7 @@ export class TablesListProvider implements vscode.TreeDataProvider { table.tableType, connectionName, connectionLabel, - 'tables' + TableSourceEnum.Tables ) ); } diff --git a/src/webview/QueryEditor.ts b/src/webview/QueryEditor.ts index 07b7a980..361070cc 100644 --- a/src/webview/QueryEditor.ts +++ b/src/webview/QueryEditor.ts @@ -2,7 +2,7 @@ import path = require('path'); import * as vscode from 'vscode'; import { ICommand, CommandAction, IConfig } from '../view/app/model'; import { IOETableData } from '../db/Oe'; -import { TableNode } from '../treeview/TableNode'; +import { TableNode, TableSourceEnum } from '../treeview/TableNode'; import { TablesListProvider } from '../treeview/TablesListProvider'; import { FieldsViewProvider } from './FieldsViewProvider'; import { DumpFileFormatter } from './DumpFileFormatter'; @@ -37,10 +37,10 @@ export class QueryEditor { let config: IConfig | undefined; switch (this.tableNode.source) { - case 'tables': + case TableSourceEnum.Tables: config = this.tableListProvider.config; break; - case 'favorites': + case TableSourceEnum.Favorites: config = this.favoritesProvider.config; break; default: From 4c6c33ea6fad3c5a812dec5ae5741c0cb409b002 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Tue, 5 Mar 2024 11:24:48 +0200 Subject: [PATCH 19/30] add comments --- src/treeview/FavoritesProvider.ts | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/treeview/FavoritesProvider.ts b/src/treeview/FavoritesProvider.ts index 2c44a589..7f1c6ba7 100644 --- a/src/treeview/FavoritesProvider.ts +++ b/src/treeview/FavoritesProvider.ts @@ -21,9 +21,9 @@ export class FavoritesProvider extends TablesListProvider { super(fieldsProvider, indexesProvider, context); } /** - * - * @param element - * @returns + * Gets the tree item for a given table node. Adds a command to open the favorite table when double-clicked. + * @param element The table node to get the tree item for. + * @returns The tree item for the provided table node. */ public getTreeItem(element: TableNode): vscode.TreeItem { const treeItem = element.getTreeItem(); @@ -36,7 +36,10 @@ export class FavoritesProvider extends TablesListProvider { return treeItem; } - + /** + * Retrieves the list of favorite table nodes. + * @returns A promise that resolves to an array of TableNode objects representing the favorites. + */ private async getFavorites(): Promise { const favoritesData = this.context.globalState.get< { @@ -67,7 +70,10 @@ export class FavoritesProvider extends TablesListProvider { return favorites; } - + /** + * Adds a table to the list of favorites. + * @param node The table node to add to favorites. + */ public addTableToFavorites(node: TableNode): void { const favorites = this.context.globalState.get< { @@ -100,7 +106,10 @@ export class FavoritesProvider extends TablesListProvider { ); } } - + /** + * Removes a table from the list of favorites. + * @param node The table node to remove from favorites. + */ public removeTableFromFavorites(node: TableNode): void { const favorites = this.context.globalState.get< { From eedd642e7dfb219e2d3b9ff9bb7deaf5f67e5761 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Tue, 5 Mar 2024 11:29:02 +0200 Subject: [PATCH 20/30] Fixes --- src/treeview/FavoritesProvider.ts | 33 ++++++++++++++++-------------- src/treeview/TableNode.ts | 6 +++--- src/treeview/TablesListProvider.ts | 4 ++-- src/webview/QueryEditor.ts | 6 +++--- 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/treeview/FavoritesProvider.ts b/src/treeview/FavoritesProvider.ts index 7f1c6ba7..0e28578a 100644 --- a/src/treeview/FavoritesProvider.ts +++ b/src/treeview/FavoritesProvider.ts @@ -1,5 +1,5 @@ import * as vscode from 'vscode'; -import { TableNode, TableSourceEnum } from './TableNode'; +import { TableNode, TableNodeSourceEnum } from './TableNode'; import { TablesListProvider } from './TablesListProvider'; import { PanelViewProvider } from '../webview/PanelViewProvider'; import { IConfig } from '../view/app/model'; @@ -20,6 +20,7 @@ export class FavoritesProvider extends TablesListProvider { ) { super(fieldsProvider, indexesProvider, context); } + /** * Gets the tree item for a given table node. Adds a command to open the favorite table when double-clicked. * @param element The table node to get the tree item for. @@ -36,6 +37,7 @@ export class FavoritesProvider extends TablesListProvider { return treeItem; } + /** * Retrieves the list of favorite table nodes. * @returns A promise that resolves to an array of TableNode objects representing the favorites. @@ -64,12 +66,13 @@ export class FavoritesProvider extends TablesListProvider { data.tableType, data.connectionName, data.connectionLabel, - TableSourceEnum.Favorites + TableNodeSourceEnum.Favorites ) ); return favorites; } + /** * Adds a table to the list of favorites. * @param node The table node to add to favorites. @@ -91,21 +94,21 @@ export class FavoritesProvider extends TablesListProvider { if (isAlreadyFavorite) { return; - } else { - favorites.push({ - dbId: node.dbId, - tableName: node.tableName, - tableType: node.tableType, - connectionName: node.connectionName, - connectionLabel: node.connectionLabel, - }); - - this.context.globalState.update('favorites', favorites); - vscode.window.showInformationMessage( - `Added ${node.tableName} to favorites.` - ); } + favorites.push({ + dbId: node.dbId, + tableName: node.tableName, + tableType: node.tableType, + connectionName: node.connectionName, + connectionLabel: node.connectionLabel, + }); + + this.context.globalState.update('favorites', favorites); + vscode.window.showInformationMessage( + `Added ${node.tableName} to favorites.` + ); } + /** * Removes a table from the list of favorites. * @param node The table node to remove from favorites. diff --git a/src/treeview/TableNode.ts b/src/treeview/TableNode.ts index 935d2567..9a944f4a 100644 --- a/src/treeview/TableNode.ts +++ b/src/treeview/TableNode.ts @@ -2,7 +2,7 @@ import * as vscode from 'vscode'; import { TableDetails } from '../view/app/model'; import { INode } from './INode'; -export enum TableSourceEnum { +export enum TableNodeSourceEnum { Tables = 'tables', Favorites = 'favorites', } @@ -14,7 +14,7 @@ export class TableNode implements INode { public connectionName: string; public connectionLabel: string; public cache: TableDetails | undefined; - public source: TableSourceEnum; + public source: TableNodeSourceEnum; constructor( private context: vscode.ExtensionContext, @@ -23,7 +23,7 @@ export class TableNode implements INode { tableType: string, connectionName: string, connectionLabel: string, - source: TableSourceEnum + source: TableNodeSourceEnum ) { this.dbId = dbId; this.tableName = tableName; diff --git a/src/treeview/TablesListProvider.ts b/src/treeview/TablesListProvider.ts index 92430365..45b3650f 100644 --- a/src/treeview/TablesListProvider.ts +++ b/src/treeview/TablesListProvider.ts @@ -3,7 +3,7 @@ import { INode } from './INode'; import * as tableNode from './TableNode'; import { IConfig, TableCount } from '../view/app/model'; import { ProcessorFactory } from '../repo/processor/ProcessorFactory'; -import { TableNode, TableSourceEnum } from './TableNode'; +import { TableNode, TableNodeSourceEnum } from './TableNode'; import { PanelViewProvider } from '../webview/PanelViewProvider'; import { getAllColumnsCache, @@ -215,7 +215,7 @@ export class TablesListProvider implements vscode.TreeDataProvider { table.tableType, connectionName, connectionLabel, - TableSourceEnum.Tables + TableNodeSourceEnum.Tables ) ); } diff --git a/src/webview/QueryEditor.ts b/src/webview/QueryEditor.ts index 361070cc..b31c0278 100644 --- a/src/webview/QueryEditor.ts +++ b/src/webview/QueryEditor.ts @@ -2,7 +2,7 @@ import path = require('path'); import * as vscode from 'vscode'; import { ICommand, CommandAction, IConfig } from '../view/app/model'; import { IOETableData } from '../db/Oe'; -import { TableNode, TableSourceEnum } from '../treeview/TableNode'; +import { TableNode, TableNodeSourceEnum } from '../treeview/TableNode'; import { TablesListProvider } from '../treeview/TablesListProvider'; import { FieldsViewProvider } from './FieldsViewProvider'; import { DumpFileFormatter } from './DumpFileFormatter'; @@ -37,10 +37,10 @@ export class QueryEditor { let config: IConfig | undefined; switch (this.tableNode.source) { - case TableSourceEnum.Tables: + case TableNodeSourceEnum.Tables: config = this.tableListProvider.config; break; - case TableSourceEnum.Favorites: + case TableNodeSourceEnum.Favorites: config = this.favoritesProvider.config; break; default: From 5eb00f19f6aa0100c1cddb615678c181c8ba7363 Mon Sep 17 00:00:00 2001 From: Antanas Valencius Date: Tue, 5 Mar 2024 16:18:36 +0200 Subject: [PATCH 21/30] 295: updated interfaces and fixed few issues --- src/common/commands/fieldsCommands.ts | 6 +++++ src/view/app/Fields/fields.tsx | 16 +++++------ src/view/app/Fields/index.tsx | 4 +-- src/view/app/Query/query.tsx | 4 +-- src/webview/FieldsViewProvider.ts | 39 +++++++++++---------------- src/webview/PanelViewProvider.ts | 9 ++----- 6 files changed, 33 insertions(+), 45 deletions(-) create mode 100644 src/common/commands/fieldsCommands.ts diff --git a/src/common/commands/fieldsCommands.ts b/src/common/commands/fieldsCommands.ts new file mode 100644 index 00000000..1d5c37ed --- /dev/null +++ b/src/common/commands/fieldsCommands.ts @@ -0,0 +1,6 @@ +import { ICommand } from '../../view/app/model'; + +export interface HighlightFieldsCommand extends ICommand { + column: string; + tableName: string; +} diff --git a/src/view/app/Fields/fields.tsx b/src/view/app/Fields/fields.tsx index 8324ddd4..6b8c7245 100644 --- a/src/view/app/Fields/fields.tsx +++ b/src/view/app/Fields/fields.tsx @@ -18,7 +18,7 @@ import { Logger } from '../../../common/Logger'; import * as columnName from './column.json'; import { OEDataTypePrimitive } from '@utils/oe/oeDataTypeEnum'; import { getVSCodeAPI, getVSCodeConfiguration } from '@utils/vscode'; -import { IHighlightFieldsCommand } from '@src/common/commands'; +import { HighlightFieldsCommand } from '@src/common/commands/fieldsCommands'; interface FieldsExplorerEvent { id: string; @@ -26,10 +26,6 @@ interface FieldsExplorerEvent { data: TableDetails; } -interface IConfigProps { - tableDetails: TableDetails; -} - const filterCSS: React.CSSProperties = { inlineSize: '100%', padding: '4px', @@ -72,13 +68,14 @@ function rowKeyGetter(row: FieldRow) { return row.order; } -function Fields({ tableDetails }: Readonly) { - const [rows, setRows] = useState(tableDetails.fields); +function Fields() { + const [rows, setRows] = useState([]); const [dataLoaded, setDataLoaded] = useState(false); const [sortColumns, setSortColumns] = useState([]); const [selectedRows, setSelectedRows] = useState>(); const [windowHeight, setWindowHeight] = useState(window.innerHeight); const [filteredRows, setFilteredRows] = useState(rows); + const [tableName, setTableName] = useState(''); const vscode = getVSCodeAPI(); const configuration = getVSCodeConfiguration(); @@ -263,6 +260,7 @@ function Fields({ tableDetails }: Readonly) { : 'no'; } }); + setTableName(message.data.tableName); setRows(message.data.fields); setFilteredRows(message.data.fields); setDataLoaded(true); @@ -335,11 +333,11 @@ function Fields({ tableDetails }: Readonly) { }; const onRowDoubleClick = (row: FieldRow) => { - const obj: IHighlightFieldsCommand = { + const obj: HighlightFieldsCommand = { id: 'highlightColumn', action: CommandAction.FieldsHighlightColumn, column: row.name, - tableName: tableDetails.tableName, + tableName: tableName, }; logger.log('highlight column', obj); vscode.postMessage(obj); diff --git a/src/view/app/Fields/index.tsx b/src/view/app/Fields/index.tsx index bee34421..882bcdfb 100644 --- a/src/view/app/Fields/index.tsx +++ b/src/view/app/Fields/index.tsx @@ -1,14 +1,12 @@ import { createRoot } from 'react-dom/client'; import './fields.css'; import Fields from './fields'; -import { TableDetails } from '@app/model'; declare global { interface Window { acquireVsCodeApi(): any; - tableDetails: TableDetails; } } const root = createRoot(document.getElementById('root')); -root.render(); +root.render(); diff --git a/src/view/app/Query/query.tsx b/src/view/app/Query/query.tsx index f6b22a38..a318ab7a 100644 --- a/src/view/app/Query/query.tsx +++ b/src/view/app/Query/query.tsx @@ -26,7 +26,7 @@ import QueryFormHead from '@app/Components/Layout/Query/QueryFormHead'; import { IFilters } from '@app/common/types'; import { getVSCodeAPI, getVSCodeConfiguration } from '@utils/vscode'; import { green, red } from '@mui/material/colors'; -import { IHighlightFieldsCommand } from '@src/common/commands'; +import { HighlightFieldsCommand } from '@src/common/commands/fieldsCommands'; const filterCSS: CSSProperties = { inlineSize: '100%', @@ -154,7 +154,7 @@ function QueryForm({ logger.log('got query data', message); switch (message.command) { case 'highlightColumn': - highlightColumn((message as IHighlightFieldsCommand).column); + highlightColumn((message as HighlightFieldsCommand).column); break; case 'columns': setSelectedColumns([...message.columns]); diff --git a/src/webview/FieldsViewProvider.ts b/src/webview/FieldsViewProvider.ts index 7fcd950e..9b47d9f4 100644 --- a/src/webview/FieldsViewProvider.ts +++ b/src/webview/FieldsViewProvider.ts @@ -4,7 +4,7 @@ import { CommandAction, ICommand } from '../view/app/model'; import { PanelViewProvider } from './PanelViewProvider'; import { Logger } from '../common/Logger'; import { updateSelectedColumnsCache } from '../repo/utils/cache'; -import { IHighlightFieldsCommand } from '../common/commands'; +import { HighlightFieldsCommand } from '../common/commands/fieldsCommands'; export class FieldsViewProvider extends PanelViewProvider { private queryEditors: QueryEditor[] = []; @@ -31,31 +31,22 @@ export class FieldsViewProvider extends PanelViewProvider { /** * Highlights the QueryEditors column - * @param {IHighlightFieldsCommand} command command object + * @param {HighlightFieldsCommand} command command object */ - public highlightQueryEditorsColumn(command: IHighlightFieldsCommand) { - let revealedEditorFound = false; - - console.log('highlightQueryEditorsColumn', command); - - // highlight the active panels - this.queryEditors.forEach((queryEditor) => { - if (queryEditor.panel?.active) { - queryEditor.panel?.reveal(); - queryEditor.highlightColumn(command.column); - revealedEditorFound = true; - } - }); + public highlightQueryEditorsColumn(command: HighlightFieldsCommand) { + const firstEditor = this.queryEditors.find( + (val) => val.tableName === command.tableName + ); - // if no active panels were found, then try to reveala first panel and then highlight - if (!revealedEditorFound && this.queryEditors.length > 0) { - const firstEditor = this.queryEditors.find( - (val) => val.tableName === command.tableName - ); + console.log( + 'highlightQueryEditorsColumn', + firstEditor, + command.tableName, + this.queryEditors + ); - firstEditor?.panel?.reveal(); - firstEditor?.highlightColumn(command.column); - } + firstEditor?.panel?.reveal(); + firstEditor?.highlightColumn(command.column); } public resolveWebviewView( @@ -88,7 +79,7 @@ export class FieldsViewProvider extends PanelViewProvider { break; case CommandAction.FieldsHighlightColumn: this.highlightQueryEditorsColumn( - command as IHighlightFieldsCommand + command as HighlightFieldsCommand ); break; } diff --git a/src/webview/PanelViewProvider.ts b/src/webview/PanelViewProvider.ts index 6aa1d768..dcd6457e 100644 --- a/src/webview/PanelViewProvider.ts +++ b/src/webview/PanelViewProvider.ts @@ -28,11 +28,7 @@ export class PanelViewProvider implements vscode.WebviewViewProvider { ), ], }; - this._view.webview.html = this.getWebviewContent({ - fields: [], - indexes: [], - selectedColumns: [], - }); + this._view.webview.html = this.getWebviewContent(); this._view.onDidChangeVisibility((ev) => { if (this._view?.visible) { @@ -53,7 +49,7 @@ export class PanelViewProvider implements vscode.WebviewViewProvider { }); } - private getWebviewContent(data: TableDetails): string { + private getWebviewContent(): string { // Local path to main script run in the webview const reactAppPathOnDisk = vscode.Uri.file( path.join( @@ -83,7 +79,6 @@ export class PanelViewProvider implements vscode.WebviewViewProvider { From 4e996b1c3b1d1e6f3825c3e6c0463b0ff202a425 Mon Sep 17 00:00:00 2001 From: Antanas Valencius Date: Tue, 5 Mar 2024 16:19:22 +0200 Subject: [PATCH 22/30] 295: removed commands.ts --- src/common/commands.ts | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 src/common/commands.ts diff --git a/src/common/commands.ts b/src/common/commands.ts deleted file mode 100644 index 1a89447d..00000000 --- a/src/common/commands.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ICommand } from '../view/app/model'; - -export interface IHighlightFieldsCommand extends ICommand { - column: string; - tableName: string; -} From 2a0b844ef011c0480190222adb0191d5cc82be90 Mon Sep 17 00:00:00 2001 From: Antanas Valencius Date: Tue, 12 Mar 2024 11:58:57 +0200 Subject: [PATCH 23/30] 295: removed console logs --- src/treeview/TablesListProvider.ts | 2 -- src/webview/FieldsViewProvider.ts | 7 ------- 2 files changed, 9 deletions(-) diff --git a/src/treeview/TablesListProvider.ts b/src/treeview/TablesListProvider.ts index 5a4b5b3d..ac972905 100644 --- a/src/treeview/TablesListProvider.ts +++ b/src/treeview/TablesListProvider.ts @@ -78,8 +78,6 @@ export class TablesListProvider implements vscode.TreeDataProvider { node.cache = oeTableDetails; - console.log('node.cache', node.cache); - updateAllColumnsCache(this.node, fieldNames); this.fieldsProvider._view?.webview.postMessage({ diff --git a/src/webview/FieldsViewProvider.ts b/src/webview/FieldsViewProvider.ts index 9b47d9f4..52a563ea 100644 --- a/src/webview/FieldsViewProvider.ts +++ b/src/webview/FieldsViewProvider.ts @@ -38,13 +38,6 @@ export class FieldsViewProvider extends PanelViewProvider { (val) => val.tableName === command.tableName ); - console.log( - 'highlightQueryEditorsColumn', - firstEditor, - command.tableName, - this.queryEditors - ); - firstEditor?.panel?.reveal(); firstEditor?.highlightColumn(command.column); } From 5e0c9e1814e9f31a5b287108f1f6f3c54cbed2a3 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Mon, 18 Mar 2024 14:52:50 +0200 Subject: [PATCH 24/30] fix indexes not working --- src/view/app/Indexes/indexes.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view/app/Indexes/indexes.tsx b/src/view/app/Indexes/indexes.tsx index 9ee98f81..4039d394 100644 --- a/src/view/app/Indexes/indexes.tsx +++ b/src/view/app/Indexes/indexes.tsx @@ -32,7 +32,7 @@ function rowKeyGetter(row: IndexRow) { } function Indexes({ tableDetails, configuration }: IConfigProps) { - const [rows, setRows] = useState(tableDetails.indexes); + const [rows, setRows] = useState(tableDetails?.indexes || []); const [dataLoaded, setDataLoaded] = useState(false); const [sortColumns, setSortColumns] = useState([]); const [selectedRows, setSelectedRows] = useState>( From 0c992fadfe270b8e78dc7b677f31ac3be7ea51b7 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Mon, 18 Mar 2024 14:53:35 +0200 Subject: [PATCH 25/30] Revert "fix indexes not working" This reverts commit 5e0c9e1814e9f31a5b287108f1f6f3c54cbed2a3. --- src/view/app/Indexes/indexes.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view/app/Indexes/indexes.tsx b/src/view/app/Indexes/indexes.tsx index 4039d394..9ee98f81 100644 --- a/src/view/app/Indexes/indexes.tsx +++ b/src/view/app/Indexes/indexes.tsx @@ -32,7 +32,7 @@ function rowKeyGetter(row: IndexRow) { } function Indexes({ tableDetails, configuration }: IConfigProps) { - const [rows, setRows] = useState(tableDetails?.indexes || []); + const [rows, setRows] = useState(tableDetails.indexes); const [dataLoaded, setDataLoaded] = useState(false); const [sortColumns, setSortColumns] = useState([]); const [selectedRows, setSelectedRows] = useState>( From 767f510278d80486c9f51bc4c66f2744cda6385b Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Mon, 18 Mar 2024 14:54:20 +0200 Subject: [PATCH 26/30] fix indexes not working --- src/view/app/Indexes/indexes.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view/app/Indexes/indexes.tsx b/src/view/app/Indexes/indexes.tsx index 9ee98f81..4039d394 100644 --- a/src/view/app/Indexes/indexes.tsx +++ b/src/view/app/Indexes/indexes.tsx @@ -32,7 +32,7 @@ function rowKeyGetter(row: IndexRow) { } function Indexes({ tableDetails, configuration }: IConfigProps) { - const [rows, setRows] = useState(tableDetails.indexes); + const [rows, setRows] = useState(tableDetails?.indexes || []); const [dataLoaded, setDataLoaded] = useState(false); const [sortColumns, setSortColumns] = useState([]); const [selectedRows, setSelectedRows] = useState>( From 77aa38f8666bef6f9304885c0bc64c9a9432eddf Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Tue, 19 Mar 2024 10:38:58 +0200 Subject: [PATCH 27/30] get rid of unnecessary props --- src/view/app/Indexes/index.tsx | 17 +---------------- src/view/app/Indexes/indexes.tsx | 17 ++++++----------- src/webview/PanelViewProvider.ts | 4 ++-- 3 files changed, 9 insertions(+), 29 deletions(-) diff --git a/src/view/app/Indexes/index.tsx b/src/view/app/Indexes/index.tsx index 35b13252..350b6592 100644 --- a/src/view/app/Indexes/index.tsx +++ b/src/view/app/Indexes/index.tsx @@ -1,21 +1,6 @@ import { createRoot } from 'react-dom/client'; -import { TableDetails } from '@app/model'; import './indexes.css'; import Indexes from './indexes'; -import { ISettings } from '@src/common/IExtensionSettings'; - -declare global { - interface Window { - acquireVsCodeApi(): any; - tableDetails: TableDetails; - configuration: ISettings; - } -} const root = createRoot(document.getElementById('root')); -root.render( - -); +root.render(); diff --git a/src/view/app/Indexes/indexes.tsx b/src/view/app/Indexes/indexes.tsx index 4039d394..0ce122b5 100644 --- a/src/view/app/Indexes/indexes.tsx +++ b/src/view/app/Indexes/indexes.tsx @@ -1,17 +1,11 @@ import * as React from 'react'; import { useState, useMemo } from 'react'; -import { CommandAction, IndexRow, TableDetails } from '../model'; +import { CommandAction, IndexRow } from '../model'; import DataGrid from 'react-data-grid'; import type { SortColumn } from 'react-data-grid'; import * as columnName from './column.json'; import { Logger } from '../../../common/Logger'; -import { ISettings } from '../../../common/IExtensionSettings'; -import { getVSCodeAPI } from '@utils/vscode'; - -interface IConfigProps { - tableDetails: TableDetails; - configuration: ISettings; -} +import { getVSCodeAPI, getVSCodeConfiguration } from '@utils/vscode'; type Comparator = (a: IndexRow, b: IndexRow) => number; function getComparator(sortColumn: string): Comparator { @@ -31,16 +25,17 @@ function rowKeyGetter(row: IndexRow) { return row.cName; } -function Indexes({ tableDetails, configuration }: IConfigProps) { - const [rows, setRows] = useState(tableDetails?.indexes || []); +function Indexes() { + const [rows, setRows] = useState([]); const [dataLoaded, setDataLoaded] = useState(false); const [sortColumns, setSortColumns] = useState([]); const [selectedRows, setSelectedRows] = useState>( () => new Set() ); const [windowHeight, setWindowHeight] = React.useState(window.innerHeight); - const logger = new Logger(configuration.logging.react); const vscode = getVSCodeAPI(); + const configuration = getVSCodeConfiguration(); + const logger = new Logger(configuration.logging.react); const windowRezise = () => { setWindowHeight(window.innerHeight); diff --git a/src/webview/PanelViewProvider.ts b/src/webview/PanelViewProvider.ts index 26466107..c7cfb2a2 100644 --- a/src/webview/PanelViewProvider.ts +++ b/src/webview/PanelViewProvider.ts @@ -1,7 +1,7 @@ import path = require('path'); import * as vscode from 'vscode'; import { Constants } from '../common/Constants'; -import { CommandAction, ICommand, TableDetails } from '../view/app/model'; +import { CommandAction, ICommand } from '../view/app/model'; import { TableNode } from '../treeview/TableNode'; import { TablesListProvider } from '../treeview/TablesListProvider'; import { FavoritesProvider } from '../treeview/FavoritesProvider'; @@ -32,7 +32,7 @@ export class PanelViewProvider implements vscode.WebviewViewProvider { }; this._view.webview.html = this.getWebviewContent(); - this._view.onDidChangeVisibility((ev) => { + this._view.onDidChangeVisibility(() => { if (this._view?.visible) { if (this.tableNode) { this.tableListProvider?.displayData(this.tableNode); From cec988e92b0ea36e70fb8f402bb74e4748e62616 Mon Sep 17 00:00:00 2001 From: mmarkauskas Date: Tue, 19 Mar 2024 10:52:50 +0200 Subject: [PATCH 28/30] change --- src/view/app/Indexes/index.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/view/app/Indexes/index.tsx b/src/view/app/Indexes/index.tsx index 350b6592..6f49d067 100644 --- a/src/view/app/Indexes/index.tsx +++ b/src/view/app/Indexes/index.tsx @@ -1,6 +1,14 @@ import { createRoot } from 'react-dom/client'; import './indexes.css'; import Indexes from './indexes'; +import { ISettings } from '@src/common/IExtensionSettings'; + +declare global { + interface Window { + acquireVsCodeApi(): any; + configuration: ISettings; + } +} const root = createRoot(document.getElementById('root')); root.render(); From 5b411ac5737415b4a402fef5f57679df32c9d07a Mon Sep 17 00:00:00 2001 From: PauliusKu Date: Tue, 9 Apr 2024 12:33:33 +0300 Subject: [PATCH 29/30] docker version change --- docker/.env | 4 ++-- docker/docker-compose.yml | 8 ++++---- docker/openedge-project.json | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docker/.env b/docker/.env index ca3b54e1..a304921d 100644 --- a/docker/.env +++ b/docker/.env @@ -3,7 +3,7 @@ DB_NAME=sports2020 DB_PORT=30000 DB_MIN_PORT=28020 # Port range must not include ports defined in /etc/services/ DB_MAX_PORT=28050 -IMAGE_NAME_126=gitlab.baltic-amadeus.lt:5005/progress/progress-docker/progress-build:12.6.0-centos +IMAGE_NAME_128=gitlab.baltic-amadeus.lt:5005/progress/progress-docker/progress-build:12.8.1-ubuntu DB_NAME2=sports20201 DB_PORT2=30001 @@ -11,4 +11,4 @@ DB_MIN_PORT2=28051 # Port range must not include ports defined in /etc/services/ DB_MAX_PORT2=28080 # Other Configuration Section -PROGRESS_BASE_IMAGE=gitlab.baltic-amadeus.lt:5005/progress/progress-docker/progress-build:12.6.0-centos \ No newline at end of file +PROGRESS_BASE_IMAGE=gitlab.baltic-amadeus.lt:5005/progress/progress-docker/progress-build:12.8.1-ubuntu \ No newline at end of file diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 29612829..6084784c 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,11 +1,11 @@ version: '3.7' services: - sports-db-126: + sports-db-128: build: context: "./" dockerfile: "./Dockerfile" args: - - IMAGE_NAME=${IMAGE_NAME_126} + - IMAGE_NAME=${IMAGE_NAME_128} - DB_NAME=${DB_NAME} environment: - DB_NAME=${DB_NAME} @@ -15,12 +15,12 @@ services: ports: - ${DB_PORT}:${DB_PORT} - ${DB_MIN_PORT}-${DB_MAX_PORT}:${DB_MIN_PORT}-${DB_MAX_PORT} - sports-db-126-2: + sports-db-128-2: build: context: "./" dockerfile: "./Dockerfile" args: - - IMAGE_NAME=${IMAGE_NAME_126} + - IMAGE_NAME=${IMAGE_NAME_128} - DB_NAME=${DB_NAME2} environment: - DB_NAME=${DB_NAME2} diff --git a/docker/openedge-project.json b/docker/openedge-project.json index a3a79920..8db88284 100644 --- a/docker/openedge-project.json +++ b/docker/openedge-project.json @@ -1,7 +1,7 @@ { "name": "pro-bro", "version": "1.0", - "oeversion": "12.6", + "oeversion": "12.8", "graphicalMode": false, "charset": "utf-8", "extraParameters": "", From 0849711cc6d24fef5d011ed0217f1d93be337513 Mon Sep 17 00:00:00 2001 From: PauliusKu Date: Tue, 9 Apr 2024 12:34:04 +0300 Subject: [PATCH 30/30] release prep --- .vscode/settings.json | 2 +- CHANGELOG.md | 11 +++++++++++ README.md | 3 ++- package.json | 4 ++-- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 65ef9279..aef762fd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -19,7 +19,7 @@ "editor.formatOnSave": true, "editor.tabSize": 4, "editor.codeActionsOnSave": { - "source.fixAll.eslint": true + "source.fixAll.eslint": "explicit" }, "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" diff --git a/CHANGELOG.md b/CHANGELOG.md index 88f9634f..85968f90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Change Log +## 1.7.0 (2024-04-08) + +### Changed + +- Reuse existing tabs when opening query grid windows. +- Fixed various small bugs. + +### Added + +- Favourite tables. + ## 1.6.0 (2024-02-07) ### Changed diff --git a/README.md b/README.md index bcf51d8d..cfd96d3e 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ This open source project is in active development. Our goal is to simplify the a - Launch query - Launch query on double click - Select tables form multiple databases + - Favourite tables (_new_) - Indexes - Fields - Filtering @@ -37,7 +38,7 @@ This open source project is in active development. Our goal is to simplify the a - Suggest field names - View record on double-click - Enable/disable filtering as you type - - Query grid table size management (_new_) + - Query grid table size management - Export - Formats - .D file diff --git a/package.json b/package.json index d32e077a..e0525cfb 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "DB", "Explorer" ], - "version": "1.6.0", + "version": "1.7.0", "repository": { "type": "git", "url": "https://github.com/BalticAmadeus/ProBro" @@ -406,4 +406,4 @@ "reactjs-popup": "^2.0.5", "uuid": "^9.0.0" } -} +} \ No newline at end of file