From faff3b1116c15c12220b13a421b8aba8ce6887db Mon Sep 17 00:00:00 2001 From: rene Date: Wed, 14 Sep 2022 10:57:51 +0200 Subject: [PATCH] Zwischenstand 2022.0914 10.57 --- BeWo/BeWo.csproj | 3 + BeWo/MainWindow.xaml | 2 +- BeWo/MainWindow.xaml.cs | 33 +- BeWo/Properties/Resources.Designer.cs | 2 +- BeWo/Properties/Settings.Designer.cs | 2 +- BeWo/app.config | 50 +- BeWoLauncher/.vs/BeWoLauncher/v15/.suo | Bin 0 -> 11264 bytes BeWoLauncher/.vs/ProjectSettings.json | 3 + BeWoLauncher/.vs/VSWorkspaceState.json | 6 + BeWoLauncher/.vs/slnx.sqlite | Bin 0 -> 557056 bytes BeWoLauncher/App.config | 3 + BeWoLauncher/BeWoLauncher.csproj | 475 ++++++++++-------- BeWoLauncher/LauncherApp.xaml | 68 +-- BeWoLauncher/LauncherApp.xaml.cs | 11 +- BeWoLauncher/{ => Logic}/ConnectionProfile.cs | 2 +- .../Logic/Controller/DownloadController.cs | 37 ++ .../{ => Controller}/ProcessController.cs | 40 +- .../Logic/Controller/ViewController.cs | 358 +++++++++++++ .../Converter/BoolNullCheckConverter.cs | 0 .../Converter/BoolReverseConverter.cs | 0 .../Converter/BoolVisibilityConverter.cs | 0 .../BoolVisibilityHiddenConverter.cs | 0 .../Converter/BoolVisibilityMultiConverter.cs | 0 .../CollectionCountToBoolConverter.cs | 0 .../CollectionCountToVisibilityConverter.cs | 0 .../Converter/DataContract2StringConverter.cs | 0 .../Date2CalendarWeekStringConverter.cs | 0 .../{ => Logic}/Converter/DateConverter.cs | 0 .../DateNullValueToEmptyStringConverter.cs | 0 .../{ => Logic}/Converter/DecimalConverter.cs | 0 .../Converter/EnumToDescriptionConverter.cs | 0 .../Converter/IListT2DataTableConverter.cs | 0 .../Converter/IndexBoolConverter.cs | 0 .../Converter/Int2DecimalConverter.cs | 0 .../Converter/NullableBoolToBoolConverter.cs | 0 .../Converter/ObjectBoolConverter.cs | 0 .../Converter/ObjectVisibilityConverter.cs | 0 .../Converter/OneWayToSourceSwitch.cs | 0 ...erseValueEqualsParamVisibilityConverter.cs | 0 .../Converter/StringBrushConverter.cs | 0 .../Converter/StringFormatConverter.cs | 0 .../Converter/StringFormatMulitConverter.cs | 0 .../StringLengthVisibilityConverter.cs | 0 .../StringLengthVisibilityMultiConverter.cs | 0 .../ValueEqualsParamVisibilityConverter.cs | 0 .../MultitenancyEndpointBehavior.cs | 0 .../Multitenancy/MultitenancyHeader.cs | 0 .../Multitenancy/MultitenancyInterceptor.cs | 0 .../Security/LauncherSecurityHeader.cs | 0 .../LauncherSecurityHeaderEndpointBehavior.cs | 0 .../LauncherSecurityHeaderInterceptor.cs | 0 .../ServiceProxy/LauncherGenerated.cs | 9 + .../ServiceProxy/LauncherServiceFacade.cs | 0 BeWoLauncher/{ => Logic}/Utils/BeWoHelper.cs | 1 + BeWoLauncher/Logic/Utils/BeWoLocalConfig.cs | 33 ++ BeWoLauncher/{ => Logic}/Utils/BeWoPaths.cs | 39 +- .../Logic/Utils/Download/DownloadManager.cs | 155 ++++++ .../{ => Logic/Utils}/LauncherUtils.cs | 0 BeWoLauncher/Logic/ViewController.cs | 188 ------- BeWoLauncher/PageImp/02 UpdatePage.xaml | 86 ---- BeWoLauncher/PageImp/02 UpdatePage.xaml.cs | 147 ------ BeWoLauncher/PageImp/UpdateInfo1.xaml | 88 ---- BeWoLauncher/PageImp/UpdateInfo1.xaml.cs | 59 --- BeWoLauncher/Properties/Settings.Designer.cs | 12 + BeWoLauncher/Properties/Settings.settings | 3 + BeWoLauncher/{ => Styles}/OrangeBlack.xaml | 63 ++- .../Utils/Update/UpdateFileManager.cs | 157 ------ .../Components/ConfirmDemoDialog.xaml | 2 +- .../Components/ConfirmDemoDialog.xaml.cs | 0 .../Components/EnterTenantDialog.xaml | 2 +- .../Components/EnterTenantDialog.xaml.cs | 0 .../Components/ExceptionMessageBox.xaml | 0 .../Components/ExceptionMessageBox.xaml.cs | 1 + .../{ => View}/Components/MessageDialog.xaml | 2 +- .../Components/MessageDialog.xaml.cs | 0 .../Components/PasswortAenderungsView.xaml | 0 .../Components/PasswortAenderungsView.xaml.cs | 0 .../Components/ProfileEditView.xaml | 2 +- .../Components/ProfileEditView.xaml.cs | 3 +- .../{ => View}/Components/ProxyLoginView.xaml | 0 .../Components/ProxyLoginView.xaml.cs | 0 .../Components/PwVergessenView.xaml | 0 .../Components/PwVergessenView.xaml.cs | 0 .../{ => View}/Components/WaitLayer2.xaml | 0 .../{ => View}/Components/WaitLayer2.xaml.cs | 0 .../{ => View}/Icons/16_bulleted_list.png | Bin BeWoLauncher/{ => View}/Icons/16_employee.png | Bin BeWoLauncher/{ => View}/Icons/16_euro.png | Bin BeWoLauncher/{ => View}/Icons/16_female.png | Bin BeWoLauncher/{ => View}/Icons/16_male.png | Bin BeWoLauncher/{ => View}/Icons/16_report.png | Bin BeWoLauncher/{ => View}/Icons/Add24.png | Bin BeWoLauncher/{ => View}/Icons/Alarm.png | Bin .../{ => View}/Icons/AlertsDisabled.png | Bin .../Icons/AnonymousUserDisabled.png | Bin BeWoLauncher/{ => View}/Icons/Archiv.png | Bin BeWoLauncher/{ => View}/Icons/ArrowLeft.png | Bin BeWoLauncher/{ => View}/Icons/ArrowRight.png | Bin BeWoLauncher/{ => View}/Icons/Calendar 1.png | Bin .../{ => View}/Icons/Calendar1Day24.png | Bin .../{ => View}/Icons/Calendar31Day24.png | Bin .../{ => View}/Icons/Calendar5Day24.png | Bin .../{ => View}/Icons/Calendar7Day24.png | Bin .../{ => View}/Icons/CalendarDisabled.png | Bin .../{ => View}/Icons/CashStackDisabled.png | Bin .../{ => View}/Icons/ChartBarDisabled.png | Bin .../{ => View}/Icons/ChartLineDisabled.png | Bin .../{ => View}/Icons/ClipboardDisabled.png | Bin .../{ => View}/Icons/CoinsDisabled.png | Bin .../Icons/ConfigurationDisabled.png | Bin .../Icons/ConfigurationToolsDisabled.png | Bin .../{ => View}/Icons/ContactCardDisabled.png | Bin .../Icons/ContactCardWebDisabled.png | Bin BeWoLauncher/{ => View}/Icons/Copy.png | Bin BeWoLauncher/{ => View}/Icons/Cut.png | Bin BeWoLauncher/{ => View}/Icons/Delete24.png | Bin BeWoLauncher/{ => View}/Icons/Document48.png | Bin .../{ => View}/Icons/DocumentWithAdd.png | Bin .../{ => View}/Icons/DocumentWithAdd2.png | Bin BeWoLauncher/{ => View}/Icons/Email.png | Bin BeWoLauncher/{ => View}/Icons/Favorites16.png | Bin BeWoLauncher/{ => View}/Icons/Favorites32.png | Bin .../{ => View}/Icons/FavoritesDisabled32.png | Bin BeWoLauncher/{ => View}/Icons/Folder.png | Bin BeWoLauncher/{ => View}/Icons/Haeckchen.png | Bin BeWoLauncher/{ => View}/Icons/Help.png | Bin .../{ => View}/Icons/HelpDisabled.png | Bin BeWoLauncher/{ => View}/Icons/History24.png | Bin .../Icons/HistoryDisabled - Kopie.png | Bin .../{ => View}/Icons/HistoryDisabled.png | Bin BeWoLauncher/{ => View}/Icons/Home.png | Bin .../{ => View}/Icons/HomeDisabled - Kopie.png | Bin .../{ => View}/Icons/HomeDisabled.png | Bin .../Icons/IDBadgeDisabled - Kopie.png | Bin .../{ => View}/Icons/IDBadgeDisabled.png | Bin .../Icons/InternetDisabled - Kopie.png | Bin .../{ => View}/Icons/InternetDisabled.png | Bin BeWoLauncher/{ => View}/Icons/Keywords.png | Bin .../{ => View}/Icons/KeywordsDisabled.png | Bin BeWoLauncher/{ => View}/Icons/Light Bulb.png | Bin .../{ => View}/Icons/Logout - Kopie.png | Bin BeWoLauncher/{ => View}/Icons/Logout.png | Bin .../{ => View}/Icons/LogoutDisabled.png | Bin .../Icons/ManufacturingDisabled - Kopie.png | Bin .../Icons/ManufacturingDisabled.png | Bin .../{ => View}/Icons/MenuDisabled.png | Bin BeWoLauncher/{ => View}/Icons/Newspaper.png | Bin .../{ => View}/Icons/ObjectsDisabled.png | Bin .../Icons/OfficeBulidingBlackDisabled.png | Bin BeWoLauncher/{ => View}/Icons/Paste.png | Bin BeWoLauncher/{ => View}/Icons/Paste24.png | Bin .../{ => View}/Icons/RSS Newsfeed - Kopie.png | Bin .../{ => View}/Icons/RSS Newsfeed.png | Bin .../{ => View}/Icons/Redo - Kopie.png | Bin BeWoLauncher/{ => View}/Icons/Redo.png | Bin .../{ => View}/Icons/Rename24 - Kopie.png | Bin BeWoLauncher/{ => View}/Icons/Rename24.png | Bin BeWoLauncher/{ => View}/Icons/SMS24_2.png | Bin .../{ => View}/Icons/Save - Kopie.png | Bin BeWoLauncher/{ => View}/Icons/Save.png | Bin .../{ => View}/Icons/Search - Kopie.png | Bin BeWoLauncher/{ => View}/Icons/Search.png | Bin .../{ => View}/Icons/Symbol Delete.png | Bin BeWoLauncher/{ => View}/Icons/Symbol Edit.png | Bin BeWoLauncher/{ => View}/Icons/Symbol Help.png | Bin .../{ => View}/Icons/SymbolRefresh32.png | Bin .../Icons/SymbolRefresh32Disabled - Kopie.png | Bin .../Icons/SymbolRefresh32Disabled.png | Bin .../Icons/TechSupportWhiteDisabled.png | Bin .../{ => View}/Icons/Undo - Kopie.png | Bin BeWoLauncher/{ => View}/Icons/Undo.png | Bin .../{ => View}/Icons/User Business Male.png | Bin .../{ => View}/Icons/User Home Boy.png | Bin .../{ => View}/Icons/User Home Girl.png | Bin .../UserBusinessMaleDisabled - Kopie.png | Bin .../Icons/UserBusinessMaleDisabled.png | Bin .../UserGroupBusinessDisabled - Kopie.png | Bin .../Icons/UserGroupBusinessDisabled.png | Bin .../Icons/UserGroupDisabled - Kopie.png | Bin .../{ => View}/Icons/UserGroupDisabled.png | Bin .../{ => View}/Icons/UserGroupHome24bw.png | Bin .../{ => View}/Icons/UserHomeBoyDisabled.png | Bin .../{ => View}/Icons/UserHomeMaleDisabled.png | Bin .../Icons/UserHomeMaleDisabled32.png | Bin .../Icons/UserMaleBlackDisabled.png | Bin .../Icons/WeitereNachrichtLaden.png | Bin .../{ => View}/Icons/adobe-pdf-icon.png | Bin .../{ => View}/Icons/bewologo_big.gif | Bin .../{ => View}/Icons/bewoplaner_logo_big.png | Bin .../Icons/bewoplaner_logo_small.png | Bin BeWoLauncher/{ => View}/Icons/bslogo.gif | Bin BeWoLauncher/{ => View}/Icons/delete.png | Bin BeWoLauncher/{ => View}/Icons/edit.png | Bin BeWoLauncher/{ => View}/Icons/excel.png | Bin BeWoLauncher/{ => View}/Icons/glucklicher.png | Bin .../{ => View}/Icons/klient-avatar.png | Bin BeWoLauncher/{ => View}/Icons/massnahme.png | Bin .../{ => View}/Icons/mitarbeiter-avatar.png | Bin .../Icons/mitarbeiter-team-avatar.png | Bin BeWoLauncher/{ => View}/Icons/new.png | Bin BeWoLauncher/{ => View}/Icons/sortiert.png | Bin .../{ => View}/Icons/trauriges-smiley.png | Bin BeWoLauncher/{ => View}/Icons/unsortiert.png | Bin .../{ => View}/Icons/warning-16x16.png | Bin BeWoLauncher/{ => View}/Icons/word.png | Bin BeWoLauncher/{ => View}/Icons/ziel.png | Bin .../{PageImp => View/Pages}/01 LoginPage.xaml | 4 +- .../Pages}/01 LoginPage.xaml.cs | 74 +-- .../Pages/BeWoLoginBorder.xaml} | 7 +- .../Pages/BeWoLoginBorder.xaml.cs} | 15 +- .../View/Pages/GenericProgressInfo.xaml | 17 + .../View/Pages/GenericProgressInfo.xaml.cs | 72 +++ BeWoLauncher/View/Pages/InfoScreen.xaml | 20 + BeWoLauncher/View/Pages/InfoScreen.xaml.cs | 54 ++ BeWoLauncher/View/Pages/InstallInfo.xaml | 51 ++ BeWoLauncher/View/Pages/InstallInfo.xaml.cs | 104 ++++ .../View/Pages/InstallProgressInfo.cs | 114 +++++ BeWoLauncher/View/Pages/LoadingScreen.xaml | 15 + .../Pages/LoadingScreen.xaml.cs} | 13 +- .../Pages/UninstallInfo.xaml} | 7 +- .../Pages/UninstallInfo.xaml.cs} | 19 +- .../View/Pages/UninstallProgressInfo.cs | 86 ++++ .../Pages/UpdateInfo.xaml} | 25 +- BeWoLauncher/View/Pages/UpdateInfo.xaml.cs | 52 ++ BeWoLauncher/View/Pages/UpdateProgressInfo.cs | 113 +++++ .../{ => View}/WindowImp/LauncherWindow.xaml | 7 +- .../WindowImp/LauncherWindow.xaml.cs | 27 +- .../{ => View}/WindowImp/PopUpWindow.xaml | 0 .../{ => View}/WindowImp/PopUpWindow.xaml.cs | 0 .../Security/SecurityContextInitializer.cs | 6 +- .../ServiceContracts/IDownloadBeWoService.cs | 4 + .../DownloadBeWoServiceImp.cs | 157 +----- Service/ServiceUtils/Paths/ServerFilePaths.cs | 4 +- .../Update/DownloadPlanerResponseBuilder.cs | 37 +- .../ServiceUtils/Update/UpdateConfigReader.cs | 2 +- .../DataContract/DownloadPlanerResponseDC.cs | 1 + .../DownloadPlanerResponseInfoDC.cs | 35 ++ .../DataContract/PlanerFileInfoDC.cs | 2 + SharedLauncher/Extensions/PathExtensions.cs | 4 + .../Extensions/PlanerFileExtension.cs | 34 ++ .../Extensions/PlanerPackageExtension.cs | 10 +- .../Information/BeWoPathFileConfig.cs | 6 +- SharedLauncher/Logic/FileController.cs | 64 ++- SharedLauncher/SharedLauncher.csproj | 2 + SharedLauncher/Update/FileEventArgs.cs | 20 + SharedLauncher/Utils/NonspecificTools.cs | 34 +- 246 files changed, 2138 insertions(+), 1327 deletions(-) create mode 100644 BeWoLauncher/.vs/BeWoLauncher/v15/.suo create mode 100644 BeWoLauncher/.vs/ProjectSettings.json create mode 100644 BeWoLauncher/.vs/VSWorkspaceState.json create mode 100644 BeWoLauncher/.vs/slnx.sqlite rename BeWoLauncher/{ => Logic}/ConnectionProfile.cs (97%) create mode 100644 BeWoLauncher/Logic/Controller/DownloadController.cs rename BeWoLauncher/Logic/{ => Controller}/ProcessController.cs (76%) create mode 100644 BeWoLauncher/Logic/Controller/ViewController.cs rename BeWoLauncher/{ => Logic}/Converter/BoolNullCheckConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/BoolReverseConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/BoolVisibilityConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/BoolVisibilityHiddenConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/BoolVisibilityMultiConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/CollectionCountToBoolConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/CollectionCountToVisibilityConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/DataContract2StringConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/Date2CalendarWeekStringConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/DateConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/DateNullValueToEmptyStringConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/DecimalConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/EnumToDescriptionConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/IListT2DataTableConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/IndexBoolConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/Int2DecimalConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/NullableBoolToBoolConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/ObjectBoolConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/ObjectVisibilityConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/OneWayToSourceSwitch.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/ReverseValueEqualsParamVisibilityConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/StringBrushConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/StringFormatConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/StringFormatMulitConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/StringLengthVisibilityConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/StringLengthVisibilityMultiConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Converter/ValueEqualsParamVisibilityConverter.cs (100%) rename BeWoLauncher/{ => Logic}/Multitenancy/MultitenancyEndpointBehavior.cs (100%) rename BeWoLauncher/{ => Logic}/Multitenancy/MultitenancyHeader.cs (100%) rename BeWoLauncher/{ => Logic}/Multitenancy/MultitenancyInterceptor.cs (100%) rename BeWoLauncher/{ => Logic}/Security/LauncherSecurityHeader.cs (100%) rename BeWoLauncher/{ => Logic}/Security/LauncherSecurityHeaderEndpointBehavior.cs (100%) rename BeWoLauncher/{ => Logic}/Security/LauncherSecurityHeaderInterceptor.cs (100%) rename BeWoLauncher/{ => Logic}/ServiceProxy/LauncherGenerated.cs (95%) rename BeWoLauncher/{ => Logic}/ServiceProxy/LauncherServiceFacade.cs (100%) rename BeWoLauncher/{ => Logic}/Utils/BeWoHelper.cs (86%) create mode 100644 BeWoLauncher/Logic/Utils/BeWoLocalConfig.cs rename BeWoLauncher/{ => Logic}/Utils/BeWoPaths.cs (69%) create mode 100644 BeWoLauncher/Logic/Utils/Download/DownloadManager.cs rename BeWoLauncher/{ => Logic/Utils}/LauncherUtils.cs (100%) delete mode 100644 BeWoLauncher/Logic/ViewController.cs delete mode 100644 BeWoLauncher/PageImp/02 UpdatePage.xaml delete mode 100644 BeWoLauncher/PageImp/02 UpdatePage.xaml.cs delete mode 100644 BeWoLauncher/PageImp/UpdateInfo1.xaml delete mode 100644 BeWoLauncher/PageImp/UpdateInfo1.xaml.cs rename BeWoLauncher/{ => Styles}/OrangeBlack.xaml (98%) delete mode 100644 BeWoLauncher/Utils/Update/UpdateFileManager.cs rename BeWoLauncher/{ => View}/Components/ConfirmDemoDialog.xaml (95%) rename BeWoLauncher/{ => View}/Components/ConfirmDemoDialog.xaml.cs (100%) rename BeWoLauncher/{ => View}/Components/EnterTenantDialog.xaml (96%) rename BeWoLauncher/{ => View}/Components/EnterTenantDialog.xaml.cs (100%) rename BeWoLauncher/{ => View}/Components/ExceptionMessageBox.xaml (100%) rename BeWoLauncher/{ => View}/Components/ExceptionMessageBox.xaml.cs (98%) rename BeWoLauncher/{ => View}/Components/MessageDialog.xaml (96%) rename BeWoLauncher/{ => View}/Components/MessageDialog.xaml.cs (100%) rename BeWoLauncher/{ => View}/Components/PasswortAenderungsView.xaml (100%) rename BeWoLauncher/{ => View}/Components/PasswortAenderungsView.xaml.cs (100%) rename BeWoLauncher/{ => View}/Components/ProfileEditView.xaml (96%) rename BeWoLauncher/{ => View}/Components/ProfileEditView.xaml.cs (97%) rename BeWoLauncher/{ => View}/Components/ProxyLoginView.xaml (100%) rename BeWoLauncher/{ => View}/Components/ProxyLoginView.xaml.cs (100%) rename BeWoLauncher/{ => View}/Components/PwVergessenView.xaml (100%) rename BeWoLauncher/{ => View}/Components/PwVergessenView.xaml.cs (100%) rename BeWoLauncher/{ => View}/Components/WaitLayer2.xaml (100%) rename BeWoLauncher/{ => View}/Components/WaitLayer2.xaml.cs (100%) rename BeWoLauncher/{ => View}/Icons/16_bulleted_list.png (100%) rename BeWoLauncher/{ => View}/Icons/16_employee.png (100%) rename BeWoLauncher/{ => View}/Icons/16_euro.png (100%) rename BeWoLauncher/{ => View}/Icons/16_female.png (100%) rename BeWoLauncher/{ => View}/Icons/16_male.png (100%) rename BeWoLauncher/{ => View}/Icons/16_report.png (100%) rename BeWoLauncher/{ => View}/Icons/Add24.png (100%) rename BeWoLauncher/{ => View}/Icons/Alarm.png (100%) rename BeWoLauncher/{ => View}/Icons/AlertsDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/AnonymousUserDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/Archiv.png (100%) rename BeWoLauncher/{ => View}/Icons/ArrowLeft.png (100%) rename BeWoLauncher/{ => View}/Icons/ArrowRight.png (100%) rename BeWoLauncher/{ => View}/Icons/Calendar 1.png (100%) rename BeWoLauncher/{ => View}/Icons/Calendar1Day24.png (100%) rename BeWoLauncher/{ => View}/Icons/Calendar31Day24.png (100%) rename BeWoLauncher/{ => View}/Icons/Calendar5Day24.png (100%) rename BeWoLauncher/{ => View}/Icons/Calendar7Day24.png (100%) rename BeWoLauncher/{ => View}/Icons/CalendarDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/CashStackDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/ChartBarDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/ChartLineDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/ClipboardDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/CoinsDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/ConfigurationDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/ConfigurationToolsDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/ContactCardDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/ContactCardWebDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/Copy.png (100%) rename BeWoLauncher/{ => View}/Icons/Cut.png (100%) rename BeWoLauncher/{ => View}/Icons/Delete24.png (100%) rename BeWoLauncher/{ => View}/Icons/Document48.png (100%) rename BeWoLauncher/{ => View}/Icons/DocumentWithAdd.png (100%) rename BeWoLauncher/{ => View}/Icons/DocumentWithAdd2.png (100%) rename BeWoLauncher/{ => View}/Icons/Email.png (100%) rename BeWoLauncher/{ => View}/Icons/Favorites16.png (100%) rename BeWoLauncher/{ => View}/Icons/Favorites32.png (100%) rename BeWoLauncher/{ => View}/Icons/FavoritesDisabled32.png (100%) rename BeWoLauncher/{ => View}/Icons/Folder.png (100%) rename BeWoLauncher/{ => View}/Icons/Haeckchen.png (100%) rename BeWoLauncher/{ => View}/Icons/Help.png (100%) rename BeWoLauncher/{ => View}/Icons/HelpDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/History24.png (100%) rename BeWoLauncher/{ => View}/Icons/HistoryDisabled - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/HistoryDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/Home.png (100%) rename BeWoLauncher/{ => View}/Icons/HomeDisabled - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/HomeDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/IDBadgeDisabled - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/IDBadgeDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/InternetDisabled - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/InternetDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/Keywords.png (100%) rename BeWoLauncher/{ => View}/Icons/KeywordsDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/Light Bulb.png (100%) rename BeWoLauncher/{ => View}/Icons/Logout - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/Logout.png (100%) rename BeWoLauncher/{ => View}/Icons/LogoutDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/ManufacturingDisabled - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/ManufacturingDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/MenuDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/Newspaper.png (100%) rename BeWoLauncher/{ => View}/Icons/ObjectsDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/OfficeBulidingBlackDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/Paste.png (100%) rename BeWoLauncher/{ => View}/Icons/Paste24.png (100%) rename BeWoLauncher/{ => View}/Icons/RSS Newsfeed - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/RSS Newsfeed.png (100%) rename BeWoLauncher/{ => View}/Icons/Redo - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/Redo.png (100%) rename BeWoLauncher/{ => View}/Icons/Rename24 - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/Rename24.png (100%) rename BeWoLauncher/{ => View}/Icons/SMS24_2.png (100%) rename BeWoLauncher/{ => View}/Icons/Save - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/Save.png (100%) rename BeWoLauncher/{ => View}/Icons/Search - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/Search.png (100%) rename BeWoLauncher/{ => View}/Icons/Symbol Delete.png (100%) rename BeWoLauncher/{ => View}/Icons/Symbol Edit.png (100%) rename BeWoLauncher/{ => View}/Icons/Symbol Help.png (100%) rename BeWoLauncher/{ => View}/Icons/SymbolRefresh32.png (100%) rename BeWoLauncher/{ => View}/Icons/SymbolRefresh32Disabled - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/SymbolRefresh32Disabled.png (100%) rename BeWoLauncher/{ => View}/Icons/TechSupportWhiteDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/Undo - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/Undo.png (100%) rename BeWoLauncher/{ => View}/Icons/User Business Male.png (100%) rename BeWoLauncher/{ => View}/Icons/User Home Boy.png (100%) rename BeWoLauncher/{ => View}/Icons/User Home Girl.png (100%) rename BeWoLauncher/{ => View}/Icons/UserBusinessMaleDisabled - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/UserBusinessMaleDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/UserGroupBusinessDisabled - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/UserGroupBusinessDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/UserGroupDisabled - Kopie.png (100%) rename BeWoLauncher/{ => View}/Icons/UserGroupDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/UserGroupHome24bw.png (100%) rename BeWoLauncher/{ => View}/Icons/UserHomeBoyDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/UserHomeMaleDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/UserHomeMaleDisabled32.png (100%) rename BeWoLauncher/{ => View}/Icons/UserMaleBlackDisabled.png (100%) rename BeWoLauncher/{ => View}/Icons/WeitereNachrichtLaden.png (100%) rename BeWoLauncher/{ => View}/Icons/adobe-pdf-icon.png (100%) rename BeWoLauncher/{ => View}/Icons/bewologo_big.gif (100%) rename BeWoLauncher/{ => View}/Icons/bewoplaner_logo_big.png (100%) rename BeWoLauncher/{ => View}/Icons/bewoplaner_logo_small.png (100%) rename BeWoLauncher/{ => View}/Icons/bslogo.gif (100%) rename BeWoLauncher/{ => View}/Icons/delete.png (100%) rename BeWoLauncher/{ => View}/Icons/edit.png (100%) rename BeWoLauncher/{ => View}/Icons/excel.png (100%) rename BeWoLauncher/{ => View}/Icons/glucklicher.png (100%) rename BeWoLauncher/{ => View}/Icons/klient-avatar.png (100%) rename BeWoLauncher/{ => View}/Icons/massnahme.png (100%) rename BeWoLauncher/{ => View}/Icons/mitarbeiter-avatar.png (100%) rename BeWoLauncher/{ => View}/Icons/mitarbeiter-team-avatar.png (100%) rename BeWoLauncher/{ => View}/Icons/new.png (100%) rename BeWoLauncher/{ => View}/Icons/sortiert.png (100%) rename BeWoLauncher/{ => View}/Icons/trauriges-smiley.png (100%) rename BeWoLauncher/{ => View}/Icons/unsortiert.png (100%) rename BeWoLauncher/{ => View}/Icons/warning-16x16.png (100%) rename BeWoLauncher/{ => View}/Icons/word.png (100%) rename BeWoLauncher/{ => View}/Icons/ziel.png (100%) rename BeWoLauncher/{PageImp => View/Pages}/01 LoginPage.xaml (99%) rename BeWoLauncher/{PageImp => View/Pages}/01 LoginPage.xaml.cs (93%) rename BeWoLauncher/{PageImp/MainPage.xaml => View/Pages/BeWoLoginBorder.xaml} (95%) rename BeWoLauncher/{PageImp/MainPage.xaml.cs => View/Pages/BeWoLoginBorder.xaml.cs} (75%) create mode 100644 BeWoLauncher/View/Pages/GenericProgressInfo.xaml create mode 100644 BeWoLauncher/View/Pages/GenericProgressInfo.xaml.cs create mode 100644 BeWoLauncher/View/Pages/InfoScreen.xaml create mode 100644 BeWoLauncher/View/Pages/InfoScreen.xaml.cs create mode 100644 BeWoLauncher/View/Pages/InstallInfo.xaml create mode 100644 BeWoLauncher/View/Pages/InstallInfo.xaml.cs create mode 100644 BeWoLauncher/View/Pages/InstallProgressInfo.cs create mode 100644 BeWoLauncher/View/Pages/LoadingScreen.xaml rename BeWoLauncher/{PageImp/UpdateInfo2.xaml.cs => View/Pages/LoadingScreen.xaml.cs} (65%) rename BeWoLauncher/{PageImp/UpdateInfo3.xaml => View/Pages/UninstallInfo.xaml} (79%) rename BeWoLauncher/{PageImp/UpdateInfo3.xaml.cs => View/Pages/UninstallInfo.xaml.cs} (52%) create mode 100644 BeWoLauncher/View/Pages/UninstallProgressInfo.cs rename BeWoLauncher/{PageImp/UpdateInfo2.xaml => View/Pages/UpdateInfo.xaml} (60%) create mode 100644 BeWoLauncher/View/Pages/UpdateInfo.xaml.cs create mode 100644 BeWoLauncher/View/Pages/UpdateProgressInfo.cs rename BeWoLauncher/{ => View}/WindowImp/LauncherWindow.xaml (62%) rename BeWoLauncher/{ => View}/WindowImp/LauncherWindow.xaml.cs (88%) rename BeWoLauncher/{ => View}/WindowImp/PopUpWindow.xaml (100%) rename BeWoLauncher/{ => View}/WindowImp/PopUpWindow.xaml.cs (100%) create mode 100644 SharedLauncher/DataContract/DownloadPlanerResponseInfoDC.cs create mode 100644 SharedLauncher/Update/FileEventArgs.cs diff --git a/BeWo/BeWo.csproj b/BeWo/BeWo.csproj index cbb0ec68e..cd4a6971f 100644 --- a/BeWo/BeWo.csproj +++ b/BeWo/BeWo.csproj @@ -93,6 +93,9 @@ + + true + False diff --git a/BeWo/MainWindow.xaml b/BeWo/MainWindow.xaml index c747c2c45..39c5a6d77 100644 --- a/BeWo/MainWindow.xaml +++ b/BeWo/MainWindow.xaml @@ -2,7 +2,7 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="BeWoPlaner" Height="768" Width="1024" WindowStartupLocation="CenterScreen" WindowState="Maximized" - BorderThickness="1" Closing="MainWindow_OnClosing" Closed="Window_Closed"> + BorderThickness="1" Closing="MainWindow_OnClosing" Closed="Window_Closed" Loaded="Window_Loaded" Activated="Window_Activated" SourceInitialized="Window_SourceInitialized"> diff --git a/BeWo/MainWindow.xaml.cs b/BeWo/MainWindow.xaml.cs index 66524e5dc..cb5cd92e8 100644 --- a/BeWo/MainWindow.xaml.cs +++ b/BeWo/MainWindow.xaml.cs @@ -2,6 +2,7 @@ using System.ComponentModel; using System.Threading; using System.Windows; +using System.Windows.Threading; using BeWo.Core.Config; using BeWo.MultiLanguage; using BS.Shared.Translation; @@ -29,7 +30,7 @@ namespace BeWo private void ShowMainControl() { - + Translator t = new Translator(new ServiceTranslator()); //WebRequest.DefaultWebProxy //System.Net.WebRequest.GetSystemWebProxy() @@ -134,5 +135,35 @@ namespace BeWo { // Environment.ExitCode = 10; } + + bool _shown; + protected override void OnContentRendered(EventArgs e) + { + base.OnContentRendered(e); + + if (_shown) + return; + + _shown = true; + + Dispatcher.BeginInvoke(new Action(() => Activate()), DispatcherPriority.ContextIdle, null); + } + + private void Window_Loaded(object sender, RoutedEventArgs e) + { + + } + + private void Window_Activated(object sender, EventArgs e) + { + + } + + private void Window_SourceInitialized(object sender, EventArgs e) + { + Console.WriteLine("GUI geladen"); + + Thread.Sleep(500); + } } } diff --git a/BeWo/Properties/Resources.Designer.cs b/BeWo/Properties/Resources.Designer.cs index 16aed7ba5..1c308de68 100644 --- a/BeWo/Properties/Resources.Designer.cs +++ b/BeWo/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace BeWo.Properties { // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/BeWo/Properties/Settings.Designer.cs b/BeWo/Properties/Settings.Designer.cs index 9d1e82165..2e2820382 100644 --- a/BeWo/Properties/Settings.Designer.cs +++ b/BeWo/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace BeWo.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.0.1.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/BeWo/app.config b/BeWo/app.config index 13732b9a4..da18d8e34 100644 --- a/BeWo/app.config +++ b/BeWo/app.config @@ -1,4 +1,4 @@ - + - - + + - + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - - + + diff --git a/BeWoLauncher/.vs/BeWoLauncher/v15/.suo b/BeWoLauncher/.vs/BeWoLauncher/v15/.suo new file mode 100644 index 0000000000000000000000000000000000000000..adb6ea2a533ef5d08b91662d9e75b8b77aff69c5 GIT binary patch literal 11264 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�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�kgdqxc{+cRot*`85D%l3>K8rw5c|DdrwBT#J5 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

`y*--aT=R=LucvivB^!Yt)I+!r^1ra37I=Kq8L* zc>l;Se*Y3~6+^zauKsK37}`BLh*E-D%-*5+PQU{<+jX9Jz+APJ8Kqo{C#r^6S;KXh z5#cMKF3~m)opwbn*XdZLvTA~PqmCC1rd6MobIRH${P>VLDyTNWSrh@1%D+UV()w0? zLN@2nf+~O)WWpSwwN2Nwdmo>{)!IO0V>@mVSC)XNJN2>S5v+sM8xvsFpiSHQF)3U= zO&d1z{Yp<9jPFZf9SiFpNQAEiq~L1>rcCFyz~9N);+xaC3I!QvV#500RK~R_#beps z8>hndfUS92+Z)1M7ENm>k$n+ZK56~@u{XlyQt(r4Ka|JSBh>W}vL}a|Z$dDg5Joe& zS%jL+upq{`Y8_%QCj@i3#e|-V8F5-RH`fg=lzA>=)a%qIE{hUMA%H)20h4L)I`yw2 zZiU*m7QM@Ud>Tm%KtnRIWZ1fc9i(25a{0&$ZBY{{xNX=DXsL-ghD3_oFp%(5&_54! zJ5*o7wK`y>-PWRz-Cy+(o9k!I`j|jKJBpT;c*l zi*hlUfo3leVy7^Dip9lT3r(A`9DGR@k;!L9GtpT{CLba=`Hd_fl88`eZ;|-{ZX!ja zRgNIK`%CU5%~;`@mt=e*S4PohOP-&sWY(l?;jRL1nS!cs)z+L^zNB{ZgVf*4xK{Hv z+HT(Udz5|uAoaIo_x*#^Ysu~V2dP(!xK);c*iDYSeWwTWl4{1T!~+j{#0^)1E?W7E zI!L`TnX51ls}lSW0Pt7BQIjUyeoM5wXa9Q52AnK0Fhm($*-IKSGej1&Uw`y1hSL7`kmhOOjSQ=am zX{cv%JKjvTG$^$@8*lQ%8Y_SwK#)zLPNDNC`e>GBK8XG`dM`T&(fvE3P0^w#6?s4M z7+V=Ri*1c8k4%mDz!TsP;oIOHz$xLw!?oc6-0B|){XF!e(CML((7Mp9!7OA#^vm>B!u`Teg$sne zkwIY#y@{T~W(bYK9ASzO3VaxNA@G3z?Z8dU9_9%2_Ya&B=nAw3>H^sTnmxz=d;bmo z3;cWiTl};AMZW*~UiSUQ_fxp-k21IUT75Hpsqm8EQT}H7EQmC427e554ZJ8Q;J)CV z<9@-N%kAd2a?7|%E-g61e#V?h=Ye0rix7EW1zV{p0Ag_TW!4T1ZX8s+kBG}l4t-n> z9QPP)w=jTUPUO(XX2R9L37SJ6L+%=yRsf6zph-ZJKfRCMPugl7>gexQ4CAD&Od3vZ z3lr4Z6fdQv9i3o-hl&~WFuBKTebE+)E&>}W=QbMaDqc*A^McvkVKRMm71!>D>)^*Q znI6o8GqFC*wz!cvv_6?0AR}sl08M6{#15j|FqNm%9fUJRR;#!C1@z%jE{kDQk1Dt_ z*O3zfxKgE&OCAzZKY?ClYm6&r7!w4Tynx<9W?@2udm_1JBrb#eQItT#cDR#tQQJ&# zSJ@Y%k0J}0lNY0^JvhY`f!rsn=>y~>Z+BW$!7|~2+3QjTok+GT?JMKLMJ@-=(kBpM zGxAN<;^ffB6UlJ&9ig6ZVK?;=T~3-ZQY1}%L{GB;$PMHpx@-chukeAuZA{7S8m6vJ zfpt+SB9~(7DsoHl@KFVk5o+?eMw<3O5~`KUu+g_e(vMZHe5gKx+Sf~^K);DsAj+^wrVmo@g}5vVMo!@AM6qF53TiYx%KLN? z`3MG>qKJH-E+oetw|5O|is253ScBw1KEm#5J0pD~h zSndBi%q^U?L=y1u@9_v?6`6o$+c5Q`2&f1c%_2AW1 zndRX;vi1Uw<3p{LWV$;)&ssqiT+c^Y%gKUkaZ6D8b}m_oEFg2&&LN^oT&}}p+8P}a z6e`~)Cro3xnZ((|l%=~TP-l@2S^NzYQfHD5SwLoLXOKn0?0`U>u5``nc0hegXR3RXLNqM8uq$7%qZdOyszx!20&nGzJQ6C;yGy2%C`8;-*gj3q23dK;iS~l~lfCKX5sKvs!~I1+ree zPW^`*O5^)FRR?J5q(W{PO?$s`Tt-v__A|T2z3Jr8;|v$dl`h%dGwGbG_e6kEe+F04 zT*gkGaIKnN;&G#Z+Ml|BRfhaK$b3ni%q*aypF+;RN7z%NzW|^5$Cz6n)1S;Ni0)$k z1~2TTXlrzSv^<&tHvdl|Z$_Sq{4R215b&FYaC%ngQa4gC<_3iLzl!0ONhu>8Ly{$9L991+)WE5%~2AoykQ&+LDLzvMm$ zUdg=_JeOGh*95DAlOUqt6T%I``NBS-N7y7R7D|Maz^8$i0}ljl3|tV{ALtA$45S7a z|A(yK|BV0V{)^a|{{8Ib{%vfhe~G`qFZw?8J?pz2?Ejbf&h_>BntU_hRl#Tc`}`mI zhxpt11MIK(LH;m)G4~{2#BAVWyub`GUCdIZiYbQI1n+=Pz|ZN6=wW&by^OB#XRxyv zZQs!5Brbc@g{kaR9YRVjKwRsdK_KVnv&}Y$afPJL%VOu#E_=z!47Ltn4i9}-MU1Vsc>=(l=>jZw&~WUZ#Fkr~ z7wDc$w$4IComcdccKQgS+mW?SZVU7g>Ff+Ugx*dnIJqorW~-o=L)XF4}T zU{WpHbBJyVbPcQ|DG75PU0uYk8p}a}t}0>Ic_FFZ3G|GqY>O8j@fn~iXRsY6EI7b> z_$AO4RcxmdzME45Jw43k=)y;+!UbPMOATNzxUdc@kSeP>mP+rV_S|6prBr&{)W>Lc9*b zL%8YH*x&s(h-{YT0QVe;0JB^E)7feb zU^M*au#2(S+3r6rlb!1VE%Tc9)FoIU4tmCJ-mn{vi2u2x;gT zGLC70RB#zLGu2zD^u zFF@Hsn4{@_zMq{)4EKm-waX9pb@Y;#UptY$6{=e85g|-2p zHU2NQ0YGV~Q(?iOoh+yqve|`Z)~FWnQFyAzxe#+R!9QQYZZ|W{%l`gn+s7Tl`2HuW zT&brfI0YFj@6X{PW%{lPS=RQwI}BF$Kic?UfaYhj^W9uJ>2#c{W@~(BDqCW<#qYp% zFJX!Ah_Z!7JA57i>kri#lrC2z{E@iY+D-87cr?%r@NfsHb}+whCrFy{{c!B3$@IPr zJ7zGvZ&fi8X7?>BhGuj>Y$983HMwub?Z(OAzRC3pl4ifj_9wfitGI)Gi5|o?Q&W1I(P5g?19+n}*`ev9aH%v|&k=D4 zBAQC+4wNCY9hZ3OAI^l>EX@{4*Ws>>W;v7;lf|4MZ^di7sTdmDQpRp%9JeIJb)NV% zV4_<3u)y^c3cof&U2%$i9zrr2#5{JQJJEwN&`0AU=A;B8CZNyQ!zf>KKk`MRhBgW^ zkxszVv{Ow`(te6C7zRca!AH#`ypnn|U&$VZ?6cb2pw}lBu*-mZUKZ%(>;)9R*1cs~ zMxIz{6MioRYa`!c`j})K=jF2Xj>=E9zfFWgpxPvH+EmgF1N#)k#3^o2Li>OhcjjdMut#|6ToInqAtQu^^Mw3SNlQCKoTT``Zh|9rVPYVlhW{PTpBf-5p@=BTNbkr zQ9hoD%0~;pMCS~g3MOk2bvk}o)UX*Zfz-E1gQ}&7I*n8_+KH%BaV4`@iKtVOlThld zWF(Y&6K~fEOAd819-wqXjn-YoU_%|i{^&rpP&O4RHXKUIWgBTH1B|LGt;9o|8@$4M z;h_HOwKPzlyFrOM;y<|K>Gl-rB)pb+T2q$c3D3S7tK*oC>J(>adFW(n&?z(mbscVI zY9ul0SyUjYKOjhP4gi!m3DmVHH2BLTUDx21#3@K%B?_!#GMNxL$ z7Xaa8q-k6uHC6ZV)}@Llx{t&C!_oz<#<33FBbAOpQbz9}QVKeug*qv#3n4w6^lm;C z&+CbOKSsD`*+11T&cw5@l}`w(_1JWMuFU0~AY?`7RERA=67@t1TZkV-^Gc(xMsXzt zWbL^Mm1!;?OdUlH&O8s4>aouP>{w#Kcp#7w(uU(2^&U#N<|l?yVEEXYn;2bWl>$Pi z5I>iTgV-9>myF>aMqQZ)HYUZrE1`rk>W*4ShjttV4}?s?il{4aW;;8Etp>A10MDQJ zHN3sTR^g&<@(H7UguGEb!l)nOQfKtkGM^%;XK?d3!gX&j>S-Lm5#(@Ir=CK+yAf#; zembLs7m~g_?&pFc&@ld+%Ag2 zUj@5^Yl1aFL3mlXRX9uN1poeU;FZ9wkOyFQpec~?nY{ERsZasbvd+4R3aAMg|UOuC0&3Y~roI&b{Wpb(R}Pk=B^dW5Y(p@DH)>;C~H@uy?hyh`pmFn8Jo+OA(W2|$J|=J43T^g#}GtX zZR>T71-UW=@WIbv!hx0y7!bh6fA)t=~mbuMu!f5I-Ill>``N}t8G!qe0 zi)9FVMHT_eHOM+0i)09ZMP|1R(KsKAWC(-hgl3+Q6*5G`T85L`OAnb?&B|p6jMeCc zZ|p?53{kQ?u+4obk|AUkcG>A@n&?7-1o5+Qr?8?KTP~0wl$IUI+~70`!fMq6B`1}K zmG7kzgx6Z=ifnAWRDvj5Zm8xilu8hBi=eu=b|%JMEJ6G&ln}dOgPhC~`-ue6xSSEK zjYD`YY#gp$7QYnh=!+!?*o8EmP>o|RmLOc0Gorci3<=_OOARyE9OsHmPfr@CThZB1>(oTi$piaASX)i*UZ)YLZ3tuawdmmnq> zvO@_tpXhu{f;eDV08sDo2}pqivA;$_30M7mqJLFV4`dvHroAf}yRt~y<)eC_${|Ko(mR?dbwdC<;8wy-Dbb-B z($3_L{5rX6DGu>Bp+81jx#g0eMQP9kyGH67>zaT;ut;1ay`d_pQ{k0ILzXJ@r5!%1 z)6%!fgu=}^JcHKDJgGzZ=*9+>Kn)s7sdS{WbeK?#4j_8>%cORQv}f&$$s5FgdxV1P z?);(S=1JQfdWqg1I?6oha39rSZCY_>a0_8&sJzX!vYP{kUU`nR)kkf2Zn@Gqnu5mK z`O+4LZ#RZ(hu(0NbeLUOU^N-U3;-rS54}pMwAtZXb{L#HbkuZd69#(JGj60|r!fgd zkU2;lN54ojA9BYqw=owp$1z8+dwpkfdA_54Ilj64(fpVEU-<_i693suJ>SO9=40H& z+~?ejU_HMr`XTcwL-O4saPmH#MMSn&#H_Au;8Tnh}X||M&M(&B+0C52aBC8?= z;g7;^g#X0t4nGwBY50<`6y6!0AD$fgD0G8=cc{x>7|QlN9}4>(6+aOF1aAax4oHDr z^oxNOF2KGUm>I}oQUVlvkiEnIy8kiy6aUTZ73^u^MdESd4so_P0rC#q6TCEdLa-y) z5G)8%!b`$4!nMM;g*{A}aD;D*(8RR}l|owJ^T6|gM+0~G?g(5T_?}69@PF80VajC%<@x%oDEcWS-Ys=%|zt2kJ_O!jqE z$0^Jt;VGP;LM?f9D0w%0Z0g$$P@K z_{a#nK^?9fR{x06{p5Y14lp=5#OOZq08|UgLgMB?tbktf@;Fgys2%yur8-fi%Th%FrPH0$xsC8bUhk-3 z|1k`RIC{*d4a=45OZeo~6%l{SNSfPgOqf-c9kLZb*9&?>9PT zRMTt8qd?8F7pATyy|>!-!qhd2{8`9o@;673KL@B#=g~e0SjbW6$xNxHPjdxAP0>dl zzyU*z3CGl$-*T*}oWAKGd1Yp)s10Q{i8tl|6lRfk$QFqHU0U3s&{@H$ujKM;m;a=8pRTd66b;JxJnB4Fyx<5_zCG9E4*%vZc` zJWJ2>q?7C|<5_yHC!J*P7SGZkwh$`QxF9H>6JER*SXOUkSqDJA4M14_9-U_)rWp{S zPOhbnvK0VeiVdI=%drqcExDrNrn4<|GzB`HWdo?hGRYj*9PPr?W8}ByY8R&dVEO(B zsgFpANL?awNZ0}QyfxILWU;qrtDznt5f}{Xm^RJkkuXaZfH2p2*@Fobb(#cF9ZaBDst>Ory%BG{fqhkC#aG|1e2dRIMFYKA1hx#Q6V_->|W0tDhr$P8z#s$SJ1GkZb zmjzW3rCZ6HeKls zxWShHc`b?CVM-rF{hS1zGA0e8en!Iev>B2)W`wyM7`z&vY%+TA5k+u7g``RP&F6`wxk-tR>#e4f=YhA+Ct=)%n))m-@1OH2)_5 z7=MfZJN!vt|6j>h@@d?s+^gI{?)TiC+!frpz6X6bM<0v+3?c-a9NiN=BDyA8AFc9z z*C)fxKOFfW@(kn-JTuY`nE;mi_C)4@-+n0kN%+O^t>Fv9L*a_R#?Tvql+cy_M?x3- z?+zUw>JDuQHG{`~23HiKA(Gz`@on)Sw^qE%Kh2*iUMrr*%@g z1u_g?7(5y>1k4Xkft&uz!f%D!!K+|YIFj2btm2LpX8H$&JVAi?flmkS58UQIEpXlc z^}GK6IpxJS1N#362hejUao|xb|sjv|7P_@+q#oB4E z5YdMoXts+x)cKZE9m3KeI$2t(sCSpy=vn3fnuQ*bmU6Y%E$$$}p>L!Ir#k@1hYk3D z25(3-wTH-NsG1=9419El!t>%Z#o7=uRB0VIruUZu2V-$5dSgy}Oq`y z2((@7sRv9Tq7RIDf_YWHHeC2UZ`vR>z@ z-{R{BHw+W4d(h(+G0j(b>Tdj?iE{NKPyGhB3sS7LtzYA*y9g^L<427D?fw~z*Tg6N$9H?L5V|b&w zA+e)V?+4ioP1S(WWSn&eRTfiVix@rO6BqTHo)K778+4Tz4O*lC;tpar; zP7bS1fw}=pjhX}U;eLYawXxLny|1rkyAMs9&>H5usWsFesOa<2Uq&yA4n|v|)4+cJ zO61PSDR76M8%Yhn7k&g{`t1srhyES9FLWN?7pe_W;v?b#-&`>kygxV`-0G9y2HqEV zEAaim68}H^$N72R<-RtbpMQeC3F7WI@VTHvILO_^ox}BUtGHs0V_#zLVlQF$vWKzN zY%23M^AK}6vxAw=_~;ktJLpU4y%2M6F`Y^M3p$s~|M0FfRR;e(%=WAKMJa~@&CHpj zd1@5M;Jk-*GwFL>sn2kX};#bj{V%K^U%4JliLWXa&8hgojX(MHes zr$O^&aLdDlyu=O16pBozkS&8p9wt;p96g?#4$hUq4-a#-8s2}Ak!EU*l*r(Xhbd^a zVXA_g$Q__z7Rrz+6O-<0n7Vft>`56KR;>)_GB+BqG`V-oC!p1uBSZSkcGp@C&#WeE zRZC^?pTnfeTDQy%Lf>@MJQ+OdFgvk+XV9(^F^yWGtftk}Q4IG49V3O5XM#JC$(F&n4nLkLbc0T1iVSXan1)vKX3~;5YMm{R!D$Xf)Zyxqt|8^h z;24J@U`5g~3S{t(Gn3J;G&)kQ3=VN-GOEjf)=+^A?r&x?`c=n32Hf4uWK=f-jZCf# z-ff7XzkyMY**cAE89dmKZ6*vITqJ|{8ZzJfaK%a`Uk1-LoLzP_om8O=9&0G_rY9*@ zN_jH)s-alfuyjHNGWe?DI$?a+tDeLbXe0Mkf{S!Trd(}vWPBD;CcVGojeHqA&+yd> z4qaWitYmU!a52*!5$QN^Y}6Z?DT5o?M(j;eJ{wy9iezvlLl^ME3E2Yn2IK}sEi4beE% z3VC@F?+^@Qxu2@^dRbr|Q<1#X{bfOds1T#360x+uEJz?tlbgnRG>||RE}=HLz63D$ z5m3urQO(RRmFpFUO{bRtX7&s3P-QM}0nE*p%8M16aLRRj3y>I;*hBTZxcHlC!cj_T z+)mRxAh*ej6Fgm>Z+Z(rW;Fs@<$2zI_Q_uA3>4>jQ%v@TXP`L8n_{xpJ)NR>9hGTv z`PU%@@@!=T(M~xAmwz28G(r{H{Q2>#Q94SEJTqy3e!WtaT$`jnzg}gLTr)0zew_e_ zSB}-6UkCnAp75exM9EpKZ3Q}BE*7oMh(+}M_TxUvw zT<&(ppgz)ulqXMvGX`!>hIC~_L<}fpb`+e_2`W?NQe{)pq)|U+-~yGvE0jx=?Z$>@ z#wvEiGPgNXo|^ojh5Dy9;6k}bA#S(y;Bz*18tX($D9fx=$nIa)dU zBwi=y$@vN$GZKtef1#Zx=h;!nP<507IoH~h-enyrPo83>qbTu=P3728tW9NGo6^*K z2|D=xKQlC!ioO{ARrEX2qod2Cxsi_}k3=qy41v#nQTU7SbK$$gmxf2e>%&#yaOkbj z!=YF&0f>g< z9BIXXc+slC;sdmTXxD@q5sQY44}gKkJ$#Bfri+S(3*-|Oad*>IPrC5G$LGlq1qTID zn>mU~P}BBJI`BwsfebNl&?INn_NeA7-G-ej9|v?CkaP^Z|F5E+qN2}6Z;PHA?Tt1> zGb1lXZi$>6IXqGmp~5eOe*lkKm}2s4p>i@up2rcn9mDbV)_zFX)VbS;50NSQ1_%1%{UgKhr_}&quPgA= zD$;j1Ljwz?RHXr1wf5Bm9bNIR7PYY%)Yye8*6x(UMIIkY6=dM#m*|uw7Z}ZU5z>sNlnyBDfqGJfrmh5>;##?tq z_PoX8t-CyX#UiL%(XNOA^a_NlW29%GzrA^1&xmW+t%w32txuo7Q0WE{+1CCx2(ddd zI_OG6#}K$^asKQDP&unb;T?n=7=}K$R#o9*v}nqb`A~1FI+1~+LnC8VHX@19!YS4B zfI{Iy^Hhcby0sq7&n%gXjgB>qquJu3Ie?h6O&QgO0oCWtn0yK3)sh8ILleZwd28#S z{)|3--k4EMJ+u?Dl?Y-qW!`L{n4$7(L%hGE-~5$rl`0h^Q4GiC%`((QKPGVK^&X3Y zB#NQf?3qwEtxXxpnvTBs7&Q?^6vf!WTI9eAeR3ZP2Si~)NexsV^Gk_-v9ucAu$6$< z3rKHUPj^2!n)U3A504C+eu!)%UsVN|Gr%7OFf|t~9otqQvP<~sGoVH}cp5=zd*Z#uzeRQ?UsMiwg@punF4XYkXC0iz83%3y?RdpkyU4h;2e=z!=ZBj#Ts zTgk7U3b?CQ5nSz~f;9JZ^!6M>7D(0F*b^Tf11z%Td~p#_8by;2yl4$`|7sP<4ca>59KHeC!>g-Rj>W zTf|Sx0lcKXK_Ndg8*ppkd=1|V@*R#0gP-~!MC)np@4!qa4n-oH$Ir`xT64hz6~FT6 zj^3W(U7O*X4Rzr$sW(0n?{Y2`*<5~RW}-znYZ_+B26zfR;!q^AQ}~(;s8tQVZqTBk zinZspS!63m7_jL4b?C%*Fb|@0r7(Z=-wO4vA_36e4Y(*WtBAd<^ zqynxg>k7G+fv$MsFOf~-OH%+xUFj8w%0kl*k)6aBMFCTtjVo~R>g`=RG|*@GQ)DOd z*%83X$|7H11*!iL*$I3>IME|j?lunfCjJuHRK6+%IO>;LF}yjx!zkId0+CJOOGT)m zj-d%edZ@3bzh`))r_=O9WTSj>5HQDFc_MtJ0C*K}O~qLQ;qD-L1g@XUMti!3t-nP! z%$EidJwVZ_?}bgX5AGnQA0iv#=lKCsosY_DyL1RPcZedhTb&`!r6Mcx#lA%EHTMoY z85sW-*&tuaCwj9URtm%!9_;9hn|_F_z!z|UX<7|&n95Fre~D~>FJb{l{qE}6kq?GH zMb^(xVE{{AGqwFg`>)9Q_)b-+$i|2m zzA@Ymartf!tr7n!UIDj!E_iV;MYv5^6L=>u6sYxo;Qyh&)pyXh9byAs#n(eDz&ZdKvKhe&T&oS8ajLa2TkJ^Nu((AZ{Ik>ea_918Uvfv0u5Lk9Ds%E2`}E1itF1^rMf4YxXi} zqDp))-rq1ZuoqM&u=DkG^mny4cJw#zgAg1e*3-BCZ7uD1k$@(<()$LX$wn#a+N9c^ zt0rO01~mfE+_vu^po%P3t&KJI8Hm6e zhr>WEog5JrS*Ti)wyhVKnkA(vUHOV%Yy}*8DpeXnRb9rwZla4(PQgq^*iB^qBUgf0Ay(I#at=LH9RI6v8p82 z+6DY988%JiCb+l_bSKw{Nz{d^%#_y7ua)40lqEZm;ATZ!P0c0M!>W|bg&ja)oV!p} zMBH~Ie4J*fP?0&vfD|8IyBG45!ZxITB=7Y=MH{J)_jkqN8qz&X!h?E|68M^(=|{Fh z%N3HSv|Qgi0xfUuj&~3;R#lX~ExEL2tqv`;r|&!hTBy}E+q>eOyR|XFbF$IiLv5td zP666!Nk42mv@;cy+W3!A_~5OacN+y6yHXV>&q$ZJ!-4cVX@)`?&#>fuzw&`v21bYD ztK&OIlzj{zJ-SJaOM_z*gl-h4@7@Nzm@CDUiR4V{5LtbtS9i5 z)6#dW0p``h>Q9bQ4pm%7=#W#}p}J5RO4-r!ziuO#vU)Xer?yjBV;uT%D8mS3;{Csh zdW4Ez7hM67`!0&C4Sx>z|E*yrbZ_Y7(0s__ceB_prU$mHxDb4;ME=HQF}Jj;GZyG0*k=- z_}RdVhf4*7pHXGL85rWyo5q3OUeNr3hPZKHw0~s70B9n6ojJNBJ+?v0Cmi*g$vbm2 zInu%sA=V**HG*ETSK+C5y>X3W3Gx*z8sp>Z5+3Aq%Av_AvN4gY*AjNc@L7b#DHGRA zImyduGK7W2V(NAYY$>{&dew5_s8^N6LUg_aR+sVdbFp9CCS?+ShRuRxzZPoq-rSqz zJzZUKyw<9d*T~RCxv@4WgD{jgQ+F2Aq$mrEg0Xf9EI9PCQAJ8Ut0l!!%ODm7Kt{pZ zGd`X!@`)Rzbiz~GJnCe5>deiBxv|v}Sc&K?)j3OJbu!GfkrWmN;p2cIiJq?>*UfCy zD+ zBEf&474_DFSwmfD_yRv?YRU!)Y_z}Pw7Va(%Tv!bAWxhleg7^1d*$Bv

FbXNa%Ji=XU277y%`G=6B^hc%$}UmcpTE)qROTToE%MNc6#>0 zV}ZyxHO#Y9#o=RM@mL1RLuG;}CSzFbM}`J^+Z*G(y=Xp$xMSdD=Ful7JF_zpfuFfB zefxfBv|1u<(waG2iI_N+BssNYs0rlD(>Lt{mVmL`IHdZnuJMr8ssY{nbmjhkGZj52 zS`+z040p&ap`c(%AO_+{|Q;5y-B;g>?MP!M<`aDJe{|FQoH zf0y6q`-N|lZ!-TIzK@>>G5&UPLG~I5d-xQyo2j5*qA#TDX_mVAYrOuqNSlEd+7YC+ zKfbwRKRB)qj1G0i+xGU1beeth6WhEK>KZ(-Z324Z(i^PtiEE{eP`l7_CUrlsweCRw z7Cbm5I;Q@G$_8O|acsGS%EzpulR1BQkP}u5aFjs>WNn9X_;5hBOaSc~8*Ag)XSjX*unOim-< zMNe260*wGZAJVpCCu|p{Iiaq^$%{{l#x;3Y`ovZV9~Bi^?(Xh_w*p)U_POuIE7D@i zBz#+xHIR(Bxlue8bE5^1Z-LHCpi`l` zn_4kl_+&*}is!xB@p5M=FRqkokUOdk-5@4z9e};vS*)7UV+|5KlA^QXNwLO>kkAy2 zEtcT@6kW1Wkt94L>Fp)crzV_sGser2CSE*3swC5HqInb^0s~#F0fifQ>2wTjj>mU< zoqZc~Vwx++>1EsRDZ|B1XFc{*};k=jTuyb|~%{A&2|@UO$yhA#-87~UP;9BvHH2xo=;p?`*63Oxev2d)gA z6FL_1`?ZA@hsr~-5G%efJ}*899tA%T&lLBHonosvUn~(Pf_~xc;2(qc1%FCk2O5Ku z=w5hnaAL48xFfhMSQ$(c{wusMJSRK|S^lmT&J&Io`h@Mma-mk30y+LZ54;k12x1L< zH*j)bAh0#CB2X9z`TynroByEye*dlTR^crFh=03(xqqfV8!{8T<9pioOUO@fmhV{K zF5i0Jd|#0-$p3?XmcNt#34a-XI=`Ra#c$@9@-z7YK85>&dxd*|yPo?tH^gn?=5aY3 z#lFfu!2Xy$iydIsv$NRA%zu~{ncp&3F{d#{F)d6L#4z}n{u6ztS?hsmQrbH~4;Akp zQQo-oCpnZI<4`u@P_`4Z^H{#Vrub$a@B;qQ14zH@1^lxY@Ch&A!(PC9ynuIj0e|iV zyv_@FnHTUpFW@O&z+=3C175%`FW`1B;3h9%s~2#&2ar113n*bC6&L9{)&n-|0qgL9 z9p(Xp+*w1z=SWxF>o(fOPCw1C3K^$WD#bCG16IPEtqR9sKHb*SVc+f!PQM* zOUUn~9pEO6ufe!Am=q3CND;RfbJ5_>N+pdiBV+ochIs$z$T47YgI8z$8{+#wv$&7X zc7w3ZZV>tfSIC{10;nMlroDI@97OP4COl4O-*PObGca!rYBIZrz>TM?r3d3sFj*7W zGTQu3G=?lOKBn{G0P*qZ{-xmd7$4$(j%mb50i-_~>>!HWT^)OR28P&AT|qR1NsmY^ zP>#b&+Yndl{M!XU)0q3s@alDw5&|LvQzjaU!Fo;J$4fjA8Z@HwaA;Nax6CM=!jP?2iwvhHN|d zJ-FY5*enK3eWRVbxaUZF@FU*23*N2~2WdX+P{=wJ(pNcP(q|*z+jV;;_XqMDL$82! zr(-|+1liQrkM?7{gZkn9{hhu;UW;;B|0hXa>I~;}4bT-UAj5Ejy zK;d*W0C4`}vw{9D?$IC{V<4nY=Wgy~G7iWM-l;x|W}n0aS?yqo8yx8AAAv6msdk3r z!`vyPym54B2!tom5$+L(W6*YovULt+s~yUk9m*Cvl$AJ?Cd>`->1L)m_ZGKXV5GvI)?%b~2@q3ke+vLy~>bq;0a z4rSR6WezgV2zEUB1BbF#9m@XVQ1(ZMvOhSKJ?Kz&mqXd@4rLBn+XaM?#0FE~lbv}J56@4}OK=jAa zv!Vmh_0d_;$#Cy~G4k8URgu#oM@3p9)seLDr{TYZe;d9!d^-3CtP9TyXN3M6`fKR^ z(2qlBhmH;W&6tuw1BwHwB*sUJg7ExB)y1_63dzGzF#wQozIDPyRdoKk}dI-|b)R zukfe&{_Fdj?{^SG@GRe;Z-Z}+4>BC^ukjD@H_(^z7xUlZd-?VJEPev_5AHece(o3C z54f|q6SzTc2e*M+26y)gE{|i`580R5yV)z)bJ-KvUUnkOnI@JhT6W z7kpjZQ4VF>(%2ca?GgCy2%B#xJqiP|$Xa^kaHbKF#ohtu*|gZ#Dk70htVS z8hZzZ<9xdD7dylFi@weD>qeBO9c`-zx(Cz~C*Nc%VprLU=vVATkD{=HS#-p0b%$}!dcYoXhp{(%z^?Ux{m320T;l;d+XHr*2kbbU z1g3>j3B#(TWaX~MDQZXH?r!m)q#0{)rEsL^7v7Bbu7#?s>oInouf!4=Z#3R&(7ndSyz z|KkdI)D`l3SI7gdkb7JqzjB3K;0oz;gD`ttAw#Z^-L8-wu8?i6kVaR?JXc7iE2O{` zlIaQwxk2cUTp@qA%`>uugH@%YzjHsG?hWQV!PFPFxexnMPbXdKQZ71|Q=i!uti)pf zu?Or!57>Jiu(v#5fA@gB;sJZn1NLVRn0>=ZjQuH(dXIR(9`u0S=K;Ih1NLhV*zF!L z`^K0U-%ma2{lo)i-%t}Yuk@(*0}t4x9A76&hdbqY1?y9x2;46=Nr6$d0xOw zFJP({koN#`pLqfQ=>>el3uxbX6HH)Nc+_MYy@0h|z!EQ@7ZaHG(Eq=Zx{`|C5!;L((Etyl8S zo6b~5aHa8wf=fN^o6sQRyQjsA=>XDmt?dd3Q%`f^VKNJj8aWs)0I7g~dQTVl)3{bL z^+i*7Yo@76t-3%xH92iaW`J~^1mTd8G%;ma4PfJJ$B`B^Ix($ZrlHYVcyX6#)NDWd zDovUxL4%RBK^ans)3YEBl+vJsRcE{{I*@`UgJ~TSKFMm{Zx)Kh^84HCZ5 z`YOWpluvAu@MRXp14IE(^*p9NkwZzPcEf?K0u3}^VXIV;1?urg_67+bW0iw1ERxZX zA#^t!_RWznT*+A~iPYnvlBE(p&#HzHVn(uwJ|xvq>hWO4Oz9XTRP8VkNr&u&!qnpd zu|vYAR)_Eyf;=8+J{l~5!^C8mxclpStjWo1V+K5i*avMS`5595=nEV1F~nY=tv`lH zqPB?Ue+m$gTvV$x58)x%wA*@U$T< zW2-bmxSfD*<(``)(2slU{F-eHQT+8CqtdOz8>WkgQAX0ZrA(7 z?NT3MqvbV|yQ{79$93jq+oae=NePr{dEsKzsU+$qNn2*HgCk>tix%`lA-xVcwsX83TZd6S;>fY2qk1Ucy#eC>?{a3?+SJq)QWrAJ z^7z0@0G;UxYlEpR5{4Po-taiJ?#V7Q;k5yHR)JAQ$2E7?`rrXx2bsG`KfqI7t0s0E zXP&i`zyrJ^k!Kdkb>`WaM1__hJiu!Qg4zQ-*D5aDbH#5#fjeTnENt58)+4OI@Z|z)fFOxw>EgV3_sV zEy#>7Qcva-Z}XLD-E@I>dDOTR=LWVc+FQLUIWB4 zfcOk&;?-Y?cr_589B!2>fzKK6Tra_uagzm#v2cqFsh{W=tg+1HJU{ zdKsS{RX{WZqa0}lL8W%Esx&0IU5zfReF6J--4c>a%N^G%dZ z4Cbk~V-+lCUVBbwD+!RBH&HgT?L5;&YaFfEWb;jwO^osRzmd&1Q8pp@+BjwNO;L=? z80B*YtTtro*xt&R)@-9u!ekX7>t|SMq(Ld+Ii+h}^#ts|$c*u=W&j?_9Ne9YbMLqtEU)(BV7|?16hK1czUUk5-+X-(6 z98$-k`5pt6A=q$4v{w@t>WN)b4wEq`=nM!4hs0O)^s3KBR0^h1D|@<~wyhSD-acik zjFCaLev=%vrd}jP+g=Tc*G=h=CxC3!L0A-J$HNS`+To*Z*XT%>HCKaM=Sc(Bn%G7S zw2^9T!_mz%sX;i_#5M}2td%jqXbA+lOMG1QiA++Y6^^PkM4ozLa!#9!F-FTlwS*+q zS0&mAlOk%VBT`SK7dFZmdlVxQ7^of!HK3AKxK_qkqvqiril~_c2!}f{uSv#$qcb4N z0pXxk@{{Qz^+YP1Aw?i_XlKYLqGFF6Br>9&AzS-5gNqxS2O*_5We`j?^Ky!dSGGDkAlCUaVCP0IghzXc-2NM?x)_3=|XJ3`0g+b8fS-`e&{R!~;|C z{y&o%p`y1(2cuIXPeq0!6T)|e2g45lLEx#+ zHqGgfcYqAkqE!fcvjTFKl61fjz(n=1NuIDnWr6yv0d{>%>{JGMH?RqFpn~M7o9n@S z_Otovt7KHW=BR6WZ%_a3)sU1qd74@c_|Tutu4s`_=ZZ;Hu%9FQMjR%-&X!>Z&gxZ= zUS-V+88xk#_yp-S<1JR9=$*LBhDd!@212tPXpL8BJ}U&FIUERl4MOuN3Jt1F|A#{J zDGCj0N56KV`4oi)HK$*T(0qzQgF4f%NoYPrp}`=eUxUzmib8_{NXIKQpQ6xU4ALZp z2G*6GJwts>@xB2?zzr+SCmTU%HjGnf?1UXxnosIMXfP`2p$Uzhx^1QTWF833dZ3)F z(Aa4jR+>*{RjiXSB@zUaQ&(_EOQO7`aa+3V1W7Ivr4p<*pHx(@kkk@#lBP_3 zf?HH8&>FAce1col8X)jB2+qeSI7;%PL*JroOsI4eoR3j(RzrWkcER}=1!omd{#pd* zV-%c~K<#T3oR3j(FnH+KAUGeR;9%U)@e0nz1!A>~;X%`usYg=Kdz%DTyIg_4VI?ZX z1?t`P*{$+Ys8g$6m>fQ_D+vc&pjeZ(RBi@}W!sebXugb1> zkX;y}^HA9J4zdd)bB@ifcM8Qu8AEP@bw*$qP~JnpjO45{8m2%!Nqs+ig^b}g3%eC6 zpu5z}Gse&3Y?m=0Bdv1_m&zD!GhdZm0K@y$en<4U5Stfo zUkSvqIp|yu8rYD1xQsD3>%bWX&)b?R$n+q1Z2FGXfP7Q-S{Z|KmaErp9QPr0+)@EZ z&d6RaV_Z%mNzh}0p~P<+yPpPRAXSpxBx7jK+)iciMAwG)y|D@Ds6Zw^d#Q|(IW>9I zyu%&6dd=p;$^pLs1Vf->0H)M(>B%e`iGZM?0e}(b>`5XdvkMcp&(z;0?ha1kVqi z65I!Ri6esRf=$7?;Iv>)FeS)>mf}s}1>tewUg1{ZI^j~`+kzyF2;HE$XclG)g~9}Z z4*VnVQsA+`T@ZEP(!d#k{efM9&4HzXS%IR!!~o;}!2h!UasO}pH~KI0pXoow-{U{b zzsx_|Kh;0U&-&i?J@0$aceC#j-^mb*;Ben^h$C3(%izD{|H9wSU&SBGAH^Teui@wL zA?{1=E$&(FUhXH{ce&HymBawVBiP8z;?mfEu?N}P*o)Z_b{$*Eip-nLgUnA*NAk@- z7h0nU121uyip^pAxb-hwv=e9v$CGLVTG0w+_ z-)=ONW-cBZ_2VP$+?f}% z9>*wm)`-c}Ef`*_DZXR08+{;3Ouuq5?gD|e?eE(G(X^(NvTY2;;KgtN#4Eu$zXkOu zhBq(;E2e%nm2DwKUg3198;Hz%q$#DY!bi4^pimy@+uSpCYd>BD} zYAsNkO<;Ur#dz0R@TRrkZ`OjpS_}SSE%=kQ;GnhONo&Dl)`Ewv1rJyY?zI;D##*2< zIWhd(tQfzr7TjblxZYZDjkVwkYr*%e1>dt4e8*aFzO~@nWUeSNLa2Wme|%*8@ekvV zcZ@&YF#dSW_~T{cj~9$To-_V<#`xn2j;Qk+XUjiRhb;Uhzn|U*D7C;hq zAq0egWG953Kvp0mkc6vzt*=VjiT%w!qD=lA;pzxSW}-o5ADclUelSw1!f-Zuu`G6baK#=!TC zfxC@?BgR07F<|^2DcAU9fiaM53>b4Q>YWU~M|{-~O?=T9U^YPMv&H+2PrhOde90K- zG6wb;16LUX#%dI|8=q`71}cn!4aUGyV_>c^Fv}RY)EF>Uqo^642p<>&e>DbPHwIoa z23|G>^q~PuRCv<(tFfaL5=iR=v<>e9~YHR2c(h#z2WNuxh-tP=Go$ zpK^c+QV>C?&can>uZQxVL*5o23wc{841GI~I=cDAnIZ2k8zxP&vwYOHHZ$%D%^6k9 z=xJ4(To@;nKu&|4qK8m&u^f$+@_NTKIkmAIVOd6tT(o{;mR;pv;rV}p$4S^>D`0(phdo(63;O@dRg3K*Tcyou{l3*} zoud3gX;wto-xf>%l@3d3;%~)zalG(*;btM<@;Q(ns=xep6#a^&Gj-h{9LNKh7$}C* zUy>N0lP*I7n^w>x#J|UwWJTnN>NXOdr)&Y?dEO4yYj&7eLWbzA^SZ!51ieil;Q8*eU z!@Zu0wk3nvfNpK5^&{gcaJDFjyVGmhJ?v}|lrpinL$LJ+Nj(GwyC80jx}x0;FNy#0yVLlFCbaw9*xbVX zy_%Kx4Xr)QCj_O&H>^!8ZP(xpvAV$EDlb@dFGPFdW}TJ(sT)!v8wB_t7iUs~$=b{o8JDu{Ej_wjz;*xJ;`AQq-tjY*Mqd`eNf6^dvsc(lh) z37u?k#U+S1ke~sUNCy%zR?BKfiz{Hyf_-s61Bq#{3ydF@&v&GkwM#%Jg_M;-bpCMP zW~Lb;q22O%WmHkS2;}3yWiytZx!(_rvN;W$Eq=Z+I=@{2s``{=U^EPjq#*$a5PZHi zX+^sQ=;>2d!M2LFzGV{3-yVpM)K(?s>_?j@`jn-MKMX8udTgYW4H7nJ`9%LtYJ1gv zv}$w43<;1POwIez2#WrlfvI+2c?-lxYA`kLM_VZRcj}Yvz-Z~QkrGVJ`_cSKryqY(WgTtS5*9U{5i z@>xaHhW%*wBu<}j%zb4rFEFQsUiR6B=+*nt%1I2ZRaz=H)x#lZuu7j{;0~4XKq{!| z&q`AB_qPJg2{azSQ{XOFZ5vEZ^)yH?Ke=Ro3(%WN0+v;rMZx$DgQ00mhjg>%y3|H)xuA8l<-{b@hHUV4|1h%8EAN3$KC2>|k;kNQE?KClu}94m5{U=Jzv{`9+H+ zLnQP28Op_=J(EcLA@WKA<ikdU~~U^ITNhw{|NXNpNY4E{rq9V^We)b z#c~E-(Es0>c9iCtM#F6ry1S_)?^fZy5IC&6+L(w1+iaTBz>3(uG`X-HCA+55M9Ctc z#~fH542C8pL6Y;5m$#$b*F@qOFp?Rt0UQiHjE}^Uld{`UGHe{N3>dM36@wvFumTCq zNXl$Sak04du>XZcL7}N&21XCaOdY?d9c9EK903LUWG$y1Wy8RS?Lby0g*(9mKrPJF z-i9DgcePIx!&{+dgT9j1Mj?!lO*TU$6=TWf#Mms43C1_5CbkkDu z+EM&W|5|;2G*F6qe54hhkkyWsUZ5Rwo`tz&21rt{B9{U^L`T|;t+CLI6M=wU?EP>l zV1UK44AG1gY{qD@B}LcR3(*z__+23d;ROYoF`8}BE7sf~2TI$V3Pvskn=u-1(JNMO zmII}z$A^kluoH*OCHOVJ;@uUP7)t8g02qTzd(*_Gql- zqH*md4KdeVLazN}c*Br$?Iq;e$3VN$+3Nx3d)V$k9~X4s6G#aCLPDz1^L>zH0|}8Va_!Mj%l{>=y@XtQG}>|zxb_lq?I%DH4Jp@N!hvKwP>pmTk&tVT zHdii;YcE)kYd;p~TokUoU_q|^7$85CTzkQST>H^LRp(|KnDF7+t(lu`NC55Cf?Rtv zsiJeU16=rlkqg8}YQVK`j|OTwH(Te!4~&)`8!2VOY;O^+Q(`QhPdxwjybD?YfARd$ z^Qz|+&(A?0;7QM8o`*f(_uS*T3v>g%?zzEp(9`a@#eu=Wm@aJ5M^Fa{kEqvGaZB zKb#LczX!SscQ|i$9&#RZ?ss10Y;o2*Yn+>$>zu1WZ(*5pfpfMq-Z{-V$vMV30(2M7 zYHw)2b81dm`%L?f_ABj0?OE*!?NQ*O+^c=l@d0pB{_6OX<5kBg$Mf2)pxy9gtxMaZ z?b5buTQ!fSYJ%gxT9sC&m4LoOjxZWRJ7Q*vHt1+rj9j z`my?+`nLLp`kMNR`n>v-`k4BldartydW(9adQja5x)a+~pIV`=S68cfYKA&jO;Y33 z7-eSGcdeFMh z+GgEu^;s*d>#eJ;dDaZ;Tx*gw&KhGKV;yd_TLtA~#3?b#7-hI(R|NTE`91k<`3?Cs`4#zj z`6>A^`9b+!`7Y4sxDhlu_Q`GXcG)La$m`|Ra-N(a&y|zpI5|chBM+DDvLJmdy(hgb zy&=6Oy&^p?JtaLRJt*BP-6h>3-6$PotTCGex^AlQYrb!efNT2_GeV zgz$%iKOlUV@FBtn87jgt!UqWNC;UF)_XzJJ{4U|Wghv@l!aam{6Ml#A+l1dD{3hXD zghvSPB)o(0cEZ~jiozkn8wjr_{4(K}2(Kf&mhd3q0m5#=F2YWR7U5RHZxG%>c$n~J z!kY-cPWUy#uM&QR@J2+-=RyZzJK=u9eS~`n_Ym$TyoT^BrSKVdWBcETpYMuwjX4TSZCb%fgpw-WjYw-DA6))0CLs~P@Rs3NQ+tRUP>xQVcw z@Ct?>3uS~G2{#a~CtOEZO1PHcM?wi@D*Vp z;R3?>g!2gJ5~dT*AxtBjO_)lULYPdLM3_jJKp0Ori|}&7nS?V4;|QlSJS9XCjwHN< za0KCS!eN9SLN}p{&`GE-J! zu*UKphjSd>kAV9R7~5+VVDsvmD;y@Hd1)%U?OX$>A>?{)~`sd4t0l z4zF|g6GDOIj~xEM;rASVhp@`>8i&&yUghvxgq4=xaQHQcUvc;)LYCzf4yQQ0%;6Ut zUgGc~ho2+lT3+DrJcpAUok!f{*K#<>;Q)tj4qY5NIdmY* zv$S*A&tV@znq{v7(s*fm*mXC%Uc;_ev+GrOO}&y`+t_s%yY6Jy9qii5t}X29$7^CU zyKZOKCU$LP*9La2XV*G*-Nvq4+11CcTiCUhU2E9Y%dXYzTE(uF>{@}>uPo_#A|#3yRKr_e0E*Qt}F05 zVmZ6!v1=~7=HPWkHoIoAYbLucW7nm4^<=Q?5_Vn8u8Y`pA-gVM*ZJ%^k6q{DRZC~r zIqaIouCv)Sm0eTVH5so`61yg{YXZB*v+FE&y_{WVvg-_Xjbqp8>^hBIFJsrK>^g;A zW7%~wyT-8VBzB$1u9vdw1a=+IuH)EsEW3_j*U{`cie01GHHuwFvg;-6I)Yt?v+FQ+ z^{}g(U0v+zWLJ${9qejnSCw6D>}q9Kg?Jj1RD3lU|(u+oOhgaoOPUWoOYbj4rvFpy|8O-(za-uofhr9b`EyF zXSCDWDQBTG*SW-*?o0%m04H51T*qC<0wqUTtjtjolxfODWt8GkY@l`jk^HXwmi#(+CwN(Y&i0Y* zUE5o>*KMzYR{wLhCqaVY0oy&cJ8d`HZm@OR_SkmX8f~?&s%W#u{LNw6UB0Qgn7Q@L5WLFtyegyV6_I>(Z;z%hGewlTx>|N7^YhO109X(gV^x(w$&) z;09@vR0=j4bEL)gQFf2rrhcw|q`vDs?>y%`>pbH;?K}nCkP{#Wa?E+uc?4`W9C99T z?se{RHi2fyX5fKL2foK>=P;)V_8LxT$AQanR6C*_*4Al-S}t%e(zQhJ9eL7m!g1Vj z%yHCl1o#z)90weG!D7Q`u+pG9EcWxjqd03nV?S*_Ek>)8diD7Sbvd)9dh zJ-MDGo^NRFB1d-hIw})_ul(+StxL=R9XUXFR7pr#vTJlU$=+!#pQE z$34efs^_TZh|A(REQx_#`*iU-T%8Hi#cK%<5*{GzW;jLcBJ3pWAZ#bx&v2T!k8m&H z9>U#(*AQOKaI$z6A=@1alSQ^W1Z2BIK(;#+Vnnt(1Z2BIK(;#sWV=H^wmTFiifnfX z$aaT-YOKhk)DI`^Sr034MfH2x|#z2)%^WgjIx<3@;Tc2saaMA}lAo zg0PHmBg5e$+Z_tSMYcNxWV=H^wmSr5yF);>I|O9ALqN7W1Z2BIK(;#sWV=H^wmSr5 zyF);>I|O9AL%${gxQ2ygqeiP7>*N{5@rxCAzVzjh>-1)gmEI}Qs z5+K_p31dXIO9EuOBtW)H0%W@+K(;enR+P!jB2h6MjVaAHshVe#mg7 z@B!ibgzpiaBYc(p@2H_coPT_UJ zKN0?s@DGH)C;S~lRd|i?G~ug+zhyW>ypiw_;SGe>6MmWDbn#0J-NMU+zaV^x@I}I( z6TZOEE<8_olJGggpAkMw_zdCGgg+&Gitq$OO?Z;<3BsQcK2G>!!XNR5nJw}P&lY)w zXN$bTvqfIv*&?s-Y>`)Zw#X|yTjUj0xt+rxQ@L@6s{#aNO*v-o3M+p zlVLdaYNp65CR5}UlPUg&#m^LfP53LqUlP7Tc#4o$Os2>yCR5}UBMIMR&n4k5!Xt!t z65c_0JK=2%`(ra_h`hoxL|)+;BCqfakym(z$SXWU5-F zMmJxYPdJZoE@3+19Ktlh*@UTtDelvjLSenc+vj?Tx6kzw?`P{J-p@)UUf-n>ukTWc z*LSJJ>$_Cq^<66Q`d%(2Gy2P=B*H|(1j2a2S%jAp&Lo^c7)LmraGK|^Wi!;H!ouaU zOehhGgaV<3qx3o9{|G-L{FLw$hGi1(XSvca7S5GCglKXd|=| zD$p)4|KkDI0gh$&%jGc;&V}$O3P%%0!Tm(IKb*omU*$5-SGmmdRW9>OzT22mE>I0>5rsh(XVDmEUVRfY=gEAz#q&rYUF|&OaN?&a1Ne*J? zez4GDl9&idf+8ZBMTtw>cLJG-S8y`5pxe)M5Bj0f6Ay``B`j@6O*JEtO(;n?03s|N z5{XYpYe&_ziFstO7L8o?GDq6$dxQ~jW7FGF2W|H3-bQQVDSoJoxP%e0+LCruGaHB2 zc0t)VlzgoIMsA4|LjgTQVWj2y^tJ7%S(ZW$JNlE04M8qM61y<+%BcKyR4)XdInM~$+nUjAjEx3a9Usjb;pyCrmsF%-QqF48JbUEE#|v{(%SIgp55TG4EF zA{nB{DH>8(3-&VVfWkD=Z^X$i~Pw*Vcz=J9FxE^f$9 zPeh~=pOD_p)V)^lJ|2kIPi};f*vrww%HVtX$XIP@JGxOBM`anRmm9QbODlZfWU9^E zoNVamp5^K5+tGJQ3OUmW(P>TJ5Sn0!RCd9W7FF1eZdKyQ1dO@!4uGsV0rYlHLiDQk zN+3B+SKcUsQN6JrEeXSyR~q9()p=$lENHI)f-$SPZcZR>|M`RDsFAZ7l1D1K=|PPg zbdjQq-uF|9;gztQsDxDxa<37oGMF`zLaQ=3Q3>k`$g3{gZ?2wjWfGT%R*0S5zW0lhk*k6^K)B_EDSKXRk-oB32xG;Ee ze>2sP9avo(Roq^R6;56?%vBe*!p)@3iJ-pKg6K8vYk{mueN>mfA0Snj>2|g0X`myk z%hT4hmjn~NK%G<-byACg=+Nn;s;HA%1SE$-CsjqA)HOg%Z%V9GBG5@yQ73gZ5V|m( zR2BP1A&`l5I8-OYoQ8f8QKBPjsqO}PZ`Pq&b~Yi z_y4mkH&{T@zs94%8S6H;3X<}Tu2_(RZ*|6Lf6?yLRyaO!d=sPtrrQ5*|F*r%K2m*A z-K{RLowI${R%45{{=|Bvb+K|@`KGc={shjYOMu<-qV#pJY3~9Kz#eh7@SgC1Pyu$3 zUVvBi^_Sj(dX0l$xQ>a{7IvWO;y7XvglZr9rbPDxVwm?v?@ll7Ky}3w@*5Fi@-odL zy=a98Pjjat#cbQfv=W}dkErf7}}licX4=*1mOV{tw0m_m8d>ydKytrG|Wj_LPp1wAR6KK zekK|^cV~2bLTX1W(3p_JcYb=TKEFj64ZFS$aOV+0=NS$5q&k@LAMJqflls{CqIL4x zX0VuEo$o_y$?<{sPzKSf6G}T!=WiC-Re%MAt}4xpj)we>UNnPKA?3oPypD-jx@27f z-y6Pkdy(vkj0PN8B^q5oGbDO>dRYgm?+sMHEiBED14wjgR8a@& z@eM$~EiC0;14;C(=*$jO?wdshMuR_aKvg6}&wwU}x_yHmucLvT*nxU`5wjDcke%3p zN_s=hPK*L}Vh3vL4G}vr3fPGqOkYnQp86WL1ALx%!@wN{?8J^J$dk@g>KTzkR+WKB zPef?+QNT{@7ztE{fSnix?8J^sfL6rp#3*1Vc8mZDL&8ps0(N4@aG<8M?*dH1{)#9N z6UzwLi5m867sDIf2ex^Z}tCT6#1_;}IA*tU!YuI6=O8#)E!{^u%LS?uUT`jlfQ=;$LT6 z$@N3X7?shwJ2kHZ?ZN7_DqCAx8XGp%;UQK(w2V<1tvix7b)Zey`MB1Auk)j?K)&86 z^45W+dOYN7>5pufRO}5mEzRpdv#@$@p`v!R6@z`>V9TcZ^c!e-#;A_7nxj<}2v1@i_hXp9=N1N=GD=R7oMvO&7I=d4$x1$}{ zg;znw;6ISTC0kDs0*Ah`aX=p&G8w*NN6MOZG!UCWYfSwWgZO$zyC*&pZJ3?gehm<1 zl@rMK01E)=^%Ox(;<|P;5j&eq#To3;ZtD4MvhsK>}TnM}v;@lhWp_Tb<{5 zkU6;4;{yrrX`bQkcU0N^lH+gMOvek_LeP!hZ5sztU59OtX=}vK+>fip?(f-N(V`rm zyKe%?@2&1)wbS+wb(?s*=mnbrY3^wt32t}&7j*t#aya{ z)|KU&4LbjdW4d~`nyDUE)13ctz6Db5&x5}IeaPRf%ON-@%K@lz;Hiv|5| zh4w|atj_0cXpvhyQmnwNw65_sfm!$1QBsN!!X)j=pm;OG#9I~Se*S1FMGQe#{6&}t zLQ}X0-bvCjF;92Kg-w<`(kmJMGyV2=cW@CP9ov)>-&dVLxeFt+9xXB#weY@Wp_V*j3x!)Mu`;F1mZ;Zx?QU-5} zjhSA5RkN=Nr$pGl?f?f(-e${j^b3;J06&Yp4d6SEJIWBB3wc}qFyw8aJoN2S^nB8b z_L`7)S35vj$cy!6>EgApv!M<=w&Yhdz>=`p@+mr7(pz6%LrtT+uh*SjqokysIPi&R z<*p9We!|@)a)QQ|%RA$qz8~-I`|&k>Kfb!}$5-|J_)51lvFD4D<-O+M&Sa?;o)$Mk zi>=y%>)fK2)|wjVgAFaYU;{7%+dg!I;w?UZz8Bp4Rm(Bh?O0=O@j(mMJzY~*_Or%) z;}mH{A8~lEI5a~lHAD*CkvY9vm|sQgRqUN%qH?l_(eGa`C!Z`^*M)y{Z6B^dZ|LLM z^=vQ+Dg=EzyCU3RvJQPe<^`pai?MF9(Yqx2ew1_2X=B!|7H`q))hx3aN{IT4cQ;V2CESGCrA zn|)PSu`~uI()aLN+0BjhyvNH4Gz?}`gR9Mw<~n&AzC2f#SK3t2K&}^8RqXK9f`>;r z+9gd8bG;~pRNN?!z+sh#kg7Z!M}wTK;#FD2`B_Cp897;-O4h8D-7IHW#YM###U(|? zCoU{2NKlluW^L9Q7TJk!*rLBd!#D5{dxOKdTc`@LuM@AtZw&RIHQWO>--Sxy3zuSZ zxCiUQJ;(_6AU)iJ%fmgG5bnX~a1R_|9tiJ;d+;WEfX%sQ52!R_4FvcSN*zA#;Y29g z%&|A>PuX5bDb<6F8=*b!>$Yu3hQA1)tt49M}Ic>E?Yx9gY!**2#|dmCo0n`;pR_q zw1b=E0A25x*lvrwEx7I|Xa;w+I8ew>;`n1Au*U0e0w1>ELKWt>M=8_#2k8&xM?%bx z@4%1_u({@w-Ws97ANCaRa^nCbpwk8FpJ<3 zebN*Cj0@6l`it-rQ`JkiId8LgdK#H@z4_@LSCsK-t?8*)Vh+wW2jk4aD09$i3JUL< z8@F_mtJ*Rw(AcE|=I3HeP}pM*3vVNNOwU@h)Z}`?;t2%TnVyQ-=3tUJIMoysKGK7% zb4Xuz{ee^F!EW=@M$cQur{-QLW|<<3iRR!Gb8w9M~b)h7vXFDL=YzT7h&84X`vWyJs|xJ{bgqZLnEWkSKCkzn@m-c#=)M_ zTh-d)t%FVJm=L3=_$HqJr&(^cz;3+Lli~iv{V-?%Om+Rm^>x=G=l`5fJG-2DV9D+t ztp@hqKL)++g$^0?^slt1s2{4|S2utz{10rKte;wcXsxo2Qho?l)Fyzw{a5A1pn-mq zR4k1V{~#U|=Lv5MHwY_*;g(;+%liMD*MS10QFNFeRz9AebKr296pxXBr!hW0VO|GH zh{om{1!q~Dkc<`s4PiX;x=|K%@VxHvc%p?;pX2D1ht3H5d8biu_R_WKr5z~wnbJBi z**l#D75IeY&|;RCE{$5%fg+)CbaHBDVE3Cxb9CT$UphZ}Wk)#>oJInN{3yMq)mvLx zVRnTODwC$zP-&N@B^Gv|80bvm4nl;i=9qYOy)ZU<%u zcOmj8T#D@gB|8V-4lczr50vGM^vq*8JM%zc&LKYY7|zZ-)&b$6IrA9K&OA_-bLh@I zhO;vd6y%Kj%wxC(&pc3W^Fq!%hFkE=g9&P0@R`SO3!ZtPgrmIa0{M!pyZ~WTjN1SKe;tVWx2&O4;0@Vsxyz_7CiGnc}|`8&0aY` zmOprl!NU>E8Ju}^phV}zJM$P0XC56W*g2GE9>d|xqXR`dFZ|47IGlNOpit+~pLq<2 zGmj1w_#C=3kKu6U(SahMdc6mZGWuzgfrwb|tCAOV$-xA?qlxl1qx`(V&XPWhbxfSOf$jS!^YtA}k27(9#UaErP|?LLe8} zVv7+pF3yl-8Z5RJ0Le&J?Bj67J|7bIUa9q^oXA%6!Z>V&^C0oyTj4mA8J-JCBa|5) zgEGVEkbY=ohR2}H@Ejl;Hxx3%V^C%|4X90sRAzV#$_&p23Kt+VJO*WkQ-Q_>%M6b} znc)I?%y0tG7@W-Tn7FZA|NnjqSotsaOmM&GZgwZQK6E|ms&+*=pK)$=PSgIWJ)o6q zvg0X7mm?4CwcTOgXde$&{JyNtv7NRZ0-Jd$)_+*PVcl$vQU0KOMOh&KQU1ETRvsmt zmOA0c<4y59Vz%&S;YyHby1)Oee_t^wI!A-*M%+FRNKwFl&gIDjK_5JpSXWVBr*m$q zk!9;|s;KhD_uT5uwuv_r07LC537302N5MO0?Yo4(1DLjjMn+ZyZwV%W@0lLs?Tj|Q z2l!SO`kr7C_@0>9iq5FsWu_l_NANYg%ya_yjxn)iohVhhY&++;^ikr2f1i*ta?FBG z6f~VXmm4hzO(XPOmyn`qOFL1@v@i9qQeQ)L<4&|6!6ejq(6HK=u_}FiCkmGiRQ)S7 z!4T(6c45Z6sKQPZI30lcS7@@mRva@@q8D_c>}eFOIC?SALK7ku+Kl*w1)V5z8oQcT zsG(3y<61~6!i>1F3p!EORIjkmX+qz12{XX+Oee~l_9dAgc(Z;E%kLQKYA*nB{^`E5W2MDgT7vm4b#f> zgoLG?D3BUQGXCbM1EMEPp8-{g5~z_?<@71qoK6%z9k+r8>_!k3s$!Na;)`0^>b(B= z0uTzS^)9W0<2pm-P02}L)rkV9DOG*4LPJprSzS|7qOv+s>NJklLFS^z;s`~{919qq zQ!bBA>O_gt*!jF~81f&6h%jZw*vmRmhBP)dV0MMxW=P`_rc8mRj{>3>*z~7i(?_w; zi_`R{LDTO*anT`d`qQB4cc6sm1vmX^(DXY{Ec8N}{xoR%9VieQS<|031-7^-^f|aK zZi=A~OwNWaE(&=@zQs)my~UlJ3|rhbETBk^15$c#aVO7=p4WjUmU?gDQcNRFZ)SUn zFd4USJ0bDlw{Vk@k+1`jMqbJ>Sjw$HV#rH521~gGC=XRB$6zV@fnX%19D}9Y42cI{ z$}w2V+ac-TO4)d{H4%@tnt(*)r5xsHYa$+PH3H>`N;$cATb_tVTMa-k5^hU!FK)|3 zJld)Ua*=Uc7{MTJ%S1fdssoa}+d=PPCW4jt zVc;d;oc1Po2zU`J#eZM>hSm*M1uMYI-F$7j7Nv=f_Z@$B{1SZJJp`5pzT(*LXm(VB zN4rIi8DJ^i3S5W3+y7wyh5dy6A+SJj6Ida<(q3mTw-?%%+EeY9*+<(Q>Zj_z)HCWY z)o0X4)ce#U;3?oLwNAZ4T?O|06TuhVFx$Vt|J*aSAK8xC?zY`#yB_oqnr+o!!!XyD zZkuj%TmNZ2ZT+eB5%4T`oAp}jE^Cdo$hyQj%R1Jof(N-*!7l$dm9K)|fo)2qvQAkA z9tRSYNy;$ABA){<1HX`eB7aZ5PTmSW;F9IZ@(5X!-j{way(B#>-6mZx`K5JI21o{d z4jhqJ#TUfK#P5o?ieD115gWyFF<)FD&J>6D#r+uaXDBmf-WDjkP)akDB8%`TirW~T z$o~wwA-*4UL-=~|jom2Lsnd|&cS|usVMVjwySmle+?I#Ig4UL%RxUyt2%_)~NOb8> zF&KlS4Qp?)-6>5F3P8HO-gl*Ux-l?mtTY#%cpH{BH|_+9AW&wiuV|=--F}@9C5C!G z+C*YA)gWJ=6YBZ0iUx|ZJz7c%5n~GqD;G4BHv3vYM5qG97*HM^q;mYyhhZNH4wp1h zC};p3ujZE4riCa+ThO3$g-|ZJ)>|!4!5S)P@RnAz6*m?&wl-IJi+1{2sch2#E$ib zLSMcat2_`PSuEVbh&`=!auoM&)?lM0Yu0>I|9^Rt#o+&7(b}5QI zmCotE1e+>F378@kds}|1zon!BnuEUunxOPrSOp8mH$#UTz3Tze3SAqSt@| zd-)YjDErnUZ|{%3M4AbAx%l1+ZyP>Mz|O4STLzMez8W7$&3lWtwANQPHACsdW7k3k zJ7?HH6I@o;=totdm$4lLo=8W7!r#P!O=rz3CB~5SxGD4_V@OOeg<_2%VJ5aAq$!`# ze~HKRUqVjLucau_%T5!DTC1wOet%7Co%C6Vn?f2k3m#Kfj^&cix|Fi~6YMZ728bJ@ zh;k~n6Ltf)ZputkQ1+OD(x>KNgDEIxnu5Z=+3bT#zt}s9E4FzX%^8bk7bOrdv7p*M{o>2_0S zuQ4QkU8)SZ2r_q|(=ih7Kn?N~_^FiUi<8Wm`S1n)8KWRdcjk1E4IstEsRbNEM_!apj% zOe!#ZS5+%4lH2&g#jv)K&Y~hs;PZ{qf>$%re^B`+bX@75s7#??eAb$n8Vg*(p1!bn`9F13GPf5P5sk5%8bwp!zq-zeS6EbxMUjc5~oENl}dK=Oh8 z8}bb-BUsvrf`)O|@FOPkiH(W*3>!aCufk1Od{(f=b8kLi#{B3NohWZOVLPX+PsjtO zsi%PBxQw(}`JE_sIFam2fOHq%rwyE3PZFdTpPbi;a)=3=_&HRsFB&jiAtP?=qD~Y> zjMO@3MyzIiM4SzbL9$>9O-?`O)B6V;Z1hq3lmHB>Em@mxu?TMihj5>*&!fMA5e|76 zxMV5#%Mdy*LZewSKN={{9HK_EByAS7@IMY&qgfK44D`M{B#mZC+*qKM5qYCo607BP zqEzDm8x0L(ncn(Fz8^Ill`SqwujpI|VlI(1n%;y%Hk!p5QKg+I<2bmHrZ;u-2nA=# zi|4^eg94BP9cg;gG>kNhXU|&Qi4u{qWMO+5SZZwHOrUUMLT`eGL@?Sco|Tl>iK3GF zXwxgffGG=$r^9H2Vv~`MHj5`~+RNhHA!#^^N^rD!=b|>8MHx8S9J~k(XVE+yZ4!p4 z;Vhbsqs<#b+He-lN-~c)7tnAPO~1eqXVGLWsS_nFqjLDnf=eb-!`0^$Sj@%aL%Wc+ zW_&>>N>-+L2R0iSNrW6n(vqXHJL7?390_Nc$Ahr>F-L=8BW-4Ma_1}{6uXcw0SvDW zM@2}B8#}%8a!53FYCsl6PiRc#64JmKNasw5dLfc?Gf{GG1`xRjl5;araxM;N51r)P zOq86P4kRO!oSTV~bJHMsWRi0;QF87wNFJHY$;?=d4+n#2-?P`Ci?L6Juzk-?MrUOA zUU>VSJrhPZ%jUtg@7Ziw0t>MI+xP5Pt*UbpEE;C+8_rkw8P(NUJ79m13%q$S928ol zv`>NJAPOKIn>sh9qH`j=9Y^q%UQ)}cD78Ee`r5^jT24i&<*|mY96HaT@4AFk4cg`yD1nRGHdE%txa410 zW(rqZ;N-v1<8eO;+W%3mXI=HK31Anm&S}+-gU!1<@F@SFQ~|8`=fyTLR(M9ZTHC3` zIG%Ns*#Bq0$DXhLLp`X**-qFRZSmH>fiA#Y<&VlP<#NkG!$0WEef+KOyb3;d>OP5g zMJ~zO*xD3qb<(hnBt}L{h8IuNS{rKpcpktE0px&ra!d+q*PQqi_{N)IQ1y{CbA{i( z6O8VelNske<6brNON5-bu|V|#wm&&2=8Ph9eaU(nKGt-6X4v{V|0Ee3f;x_Fbw+LqXZW~PXegp?6pZNI#JXvhU^Cf z4z$D7tC?INK2lqil+%fFcDf|0zPlP2Ej>0;$_B0v3f<}7sq^0YXw~M784@79MQJNK zQ4&x8PGAX9{DI{y5Fe?fCFgXaP@evsy7>6OXz8($QhY*2Cko+BBVlvXM+}IZkd0g@ zl)H;`Uzm-{A4@s(C}Od}UZYPg)GjN~!F+9EQ6d?_^E7!Cf@h7Rr*Vp>G8f z4wV*PlAXN13zzS+h%-v@i0jz6YoHkqPKUG?C6{;2fDcI8C-Cu_BC(^~5XO=F&%Plg zz920*uM3ybD z8U_T$p|xuG-%kS#J@pvcXzuRxnl2AiLkg^5*{6jV!^3`F$Z0UNz5+d1bAZs^}&8Tbf`U`jVF*k)P?w*85c2Qb=mkQ-Dci$+U-4+-SD(f1n zwr%plV3-XyUR&XeYLHnEO$6VUmb$*n2JgEFYscL9l%g(FU>ef3V=fLPsN59kK#~g% zdpgnZ&XCM>nXTznook^012Y|%l4Zuxzy=^4+JvjE5Jts9478CPxssl6(* z1LvLsf-}Vs>j|L9(jdM3odrNMmK+S=u{X?qXrXy9L=DN1>a0ciovVOq zN)?@f_O5|JP!}@sWFjBvMcOYjC&Q5z+U6PHkyfuWTf^L*u@;WBRSWau>P0p{I~OnbA|Sy_El}UJyZQey-8hU`-AN(w$-)~ z)~Bou))C4}((gk56FtU%eeC)}J^KH0;b*b94@0}SK=-^Wx8kPc7!K7J$31Um*G6c* zx^1I?;UrTx(v|pn#6sf(5usZauYyx%p(9cYOU2oVkUT4p3mBWge$8MlEEO*TGM4|r z**V!`?AtU);9Gj);ise}0FlScM8ezVFcZ;@a}>uTkrp5_NDE8FjF&w>5>>6@SS_au zC&UZ(0bZ~?-QFnxJO85j053?3f;Z&A%77+s^Ym_NdWPw?UmxHF3DGdPy=&NIFZDLG zwp_`bt~B(w%MNm19x5%gkb)V>@RDoU=8|oUg0eNh+ykMh z$;-RY$lgRc8(<`n2{{;g7$1oxCuMh`y*<4tF=7QP21BY~1rnN(l-ZREgyPoI5N9fw zfzbmpIKZUWQA?LK^TVYN^5wSte zX+gAmEmW3QMdx*)7@2;aQQ5+D3&XOf3WF%>@u6OqmnY?Pp#Yg)p75*)+&%SCp{9c< zijI`lCOO1;mLCZ>IAuw8$#1$(yI*iW?!Mo4gKeL+LU~M{Dvy$V%3Hz>?%UkgT8ArN za#y+MyW_;C#3k-aJui4lUtJAKoY~p0`~^uKChfNpfATtnqkVBb*;OUv)m@JRl`H z>z!9P^R167i=B&|N!AzTe>pF6j&pjn542a6e_Lm3PpRedOV+!^G1}eQLG5bsVQs6n zPRj(p2j|6qjgG#ydWhUUdB3aat;L zJf~i3`y1%$zu}2-JYxIE_N4S<>AN=3@g3X!w%es!zyU}m*d(}8xZSbMvC*+Y&XRUX zOFW7r)e)oI;n1W?(2)4E{T1u)=f8QR^nybMq8ZvB(PW;Yvrk^!^;?3Fa@Csm40-kw4p8&S%hr@$s%By`{m0}v8D*z zoc3ZK87Ohi+9s|b&SO0u)|BR~8-4$m3C6o3=M2-L zaY(PB9xA$g1;ddQZPIB}p8+Oqa|DL(M>5wZT z{Sx&ic^J<*yw%dnNQd7ssOSD7DBVk_{KI3RUE37t=fO8#FyBa)P6pq2F3?;ueg17l zX#G-p#vCh2`f2cur%;g?+nn@6{g+Z{Y=_dlrqH+W6Je@c*4Wh6j4r^WTZ2C4Yx3O| z8Se$84P>S`sJCqS@4aa3Mm6^^et4y;mATN?nz2bjg9zsXMP7(S9o%N67NzI2n0~Cz zl2EWzbDW{pJI8Z?e#^24F(Ot3=C?*_TU>e=qniJVyrnI_ZnH;3}#8jVr2zS zRKna5Qk=l=q8CVCv$r}54a@Lbh2TW1u^On<)wPYp52V{L6^br%Sa=H!`0(ebc{-eB zqp2E}2TbdCM@3x;96S3j3A|9hKf>HJQiLS)jbtIwd?QInz^1}q#^+&S9_m-~J6R2A zgQj{IwnKhLh&K%m!X|T&*(`uwMZ>A^HT*O~_?lh~li5#z7(J7us07Cm{)I-0z=Tf= zm>#K3A1^J0Ky57;$I3`$+HG-C2@D`u z5-Yt8wJlo$EuERMfldN~apAk_@FX$BJZ+QBYPcx z9(eQ?+JNCnmqNGL5_s|#Y!qye!)`02vh^uW^k#MMOE_(~udCG*ZE0-*^U@8%2yBBz z;Ga#mLgP>BYm}9+ba5`nrKJGIOC}0EGkb<9w8RuzjAIqVY;K{_osZ)RtekNEst+|; z3E=h)mJLCZo^UDFdl6fC%*L#*ff)F^cx(nTu6~3&u*aD0bYp?=JHBe+VN>Y4rqEYSp{sFcwFbs@Fg3QeBDfW|}p>8V~bG)yQh z@^L7cTwi5;bzNQAZ1%3Jf{n7O3tE%?Q{d0+Cf%pkVv;f3aC%?pOTrxEB9nbAl`6 zFSIDu{Xg*jmA;1UUrZrz+iL!$75-j}!D?@1YwgUy5|xGLfvL;7z&$+X0$WU=Y_|Rt8&z7GKq* z3~({t=J)ya+pyw>S5AU8KE%oQHTddV>(_Xzz?w1YzgFWze>~;NxS031R{Gh(68AsQ z*XO0hCng5I19q^mA)g0DWcs|;mYQ_1mj}j}15sHq`l^5g77O3@#zQy|quL95^m@pf zAHE<^TLE#dvNE>1ZLT-i@!5r)uFBs-#Tc7dE@bhicTC#RLq$Q^p?P7(7lC(hc7d6! zDKhN`2NE^Fj2K+(Twisyw_$K;%#u6|F%8lFa+Jr89h0$`ijlY2Z+z&myG-VXnB~d$`VP>w6dl%vWK<*@az^^o;|buV}WXtHhrABXF#h1Oi~3XpD1v`)89vW~V61MdKb zlmp6Muz1jFz}LboV6pX!kI;>bAJfyUw}Jy3V*xyH0^U#}lsOu4AsF zt|P9)u0yT^uDz~Zt|r$O*Jjr`SD`D{wZxU~N_0(kO>&KP4Rfh3i}Sqmob#;njPtbf zl=GzXg!8!bnDZ#;gB*4qavpH*b?$ODfq#e1&UMa0XRdRJGabA6Y6pGn0gdEI~-OIsRz`(>MpfO-J)(**QteSuDZn7 z2Ew&x>q+Yg>v8Kb>rv|wTOxRUm}DDm8)j2&mcg}j;G3~On@IQqAX4oiwNcaKa z`-JZio+Esh@Lz=Q5dM?!9}KrkeU5WZusA$h@8Jk$F4cBlC8?N9OH(kIdWo z9+|iEeKK$7`()nE_sP7S?~{2u-zW2SzE9@u{5oYJd;fLH0>b%(^9bh>rW4K~Oe364 zm`a#Jm`s>Nm`IpF7*9Bh@N&YLgfkc(P~r%u6HX(%%zn;tLg-LzEZm`32^EIzicBaG zii858g`@mA;r|FfBm9)`6T<&8+%JDjc%JYhLO!nTm;X)S4+%eTPgd&}h! zgu@Ak5qb#Sgf2oSp+@K+v=gd?yu8b0Uf$(0FYj`hmv_0$%e!3Wz?_s!J zx|{Gjgx@Co7U4Gu?_yXg9U;7v@D9S;32!63mGB#cw-6pCyqWMO!mks4jqs}s{W8zD zU*`Gt%RJwHndjRt^L+bdo^QX*^X->;zWp-Kw_oP@_RBoqewpXnFY|o+Wu9-p%=7J+ zdA|KJ&$nOZ`S!~^-+r0r+b{Ec`(>VQzpUr`E0q5m2@et8KzKdjmkGZ_cpc%jga-)^ z5Ox!G5q1)G5VjNUXV@(7Biu{4hj2IHHH23aUPX8%VH@Et!kvUW2wMqT2>pc3gxd+5 z2pb6-2~=A@mYf6IKyc5>^myCfr0=PIv`j8R1644TS3n*AbQy zt|crXEG8@>Ttm2;u#m8Ta1~)b;Yz|4gv$x@2y+Q@2(t;Z2r~(n5iTXnAY4MYm~as+ z{)Y)WP>Pvr*rQt4SpV6^NvnBTN->IE6y9#oGYWo_Mtnu-0Y>zxNgHNdDAck~0w3~L)^ zIqnf30VSMG++N2P@bl1&5&9$26A`J@%myk=pdI8Ts~-j-uKoxa1-_70c`DEX#kp~0 z=@%q)msT_<^+$%HA%(SRj(dbZg9217&kg9p2i(T=N5>QysjW%`YF`5-xr!cY#9ti% zDT;}7vXRb86CIK?8UP)NiF6hr9XUV;RquJ__D3fW6X~QSKr4PcQ1kdSyq3P9`Se6Y zD)C5V2jpf2wo_M zD6#x0eQh^-Bv086dcHs*gkn?34+u~Tk-`pyUx>=@Mz`g0*!Y03S*xiZn&!x$t6gGw zI(l_CdN-eidSE~g+Bu%spoKgp`P2`^;OJ0iC6*_WGP=>z`2_4@KvN$O`k|#qV>BL_ zwX6%>nKMffK%-|o=!Zy8JVxdI*?C>)zIye@Qg zuICmiYF8WSVf6Fm#;A9x-KYtB z<;sdmui5fY?@tayL^`_@H+P}A)`euj2%ci&?I}Vyw5kM;mS(GpA&G`ehOgL>vZf0y zxh4d(NLk!Le7!k75^b2B+lBU9S>-^PQoaXR07#ETMN&11>$=cr>uge-C2Mfi@YS1o ze#60_F83PW`}2FE8ImCB^0dM(wBO2x2FPWw7EeF*9vmG>u1(JDLL;tvy$5X6^g}EV z5y`AdUeJXWT*s6`w%|WZs^Dy`9}+wgCeKdH>|zF6X;A`C`kE>OV{#xOl3A3vv1q(etThaWU=M` z*+At`V5TrmeEoDOV^ru7#g@BMfmUXKmT}_ihn6uaqjd+Aka+&$&5^~Ho0h^GZVKd< zO)e45k;Rtl!M>KbeCX!LVoMj)ivZuRkClO`ub+|(M8tC3jh4F}yqI%j@s1RD#j2s5 zBa0j0^DQ4!!d{_@cO9%n=>J386t45607WhxkX^|MYIOA2j$Gp=Ox2xjPGz&L>-%)T4b3 z{uaA0{2_tEv}A7j!cNLG|2x5>M8nS=}$`p!jy7Iw`84 z8!ZLRB#J>g8vRlXimwUPlSk!rF9nLRy11aSjH@~cq`lBRN zj~ScZy#x{uz9OqfYB}ADA?Z|NNi5|%o$$4%ySa=v#)SH+Oo&eEMt5?a6?~!Q3z_ep zr%$-3uYjGBT{3tFw$imkHG!y?)Sl+Tp7OS*E_J^^p+s78kv!8?6IPSkK#% zo{PST>apxX<@jN_-RL21S`{Y%OVBJ|14tTyAW`VWsGd096jc){$Bs(vM*BY#a(GSa z5&O)GP&pdv814HEzK$y|(Ux|j6`#Hg({ahqy!xhi#tPs;kg(U;9A)4~svE8L4Ad}P zXo4X*9cAE0svFJs48Sm5XtKSS9cAE0svC{?MCM1T4E#uSqv@W={7997AE|CM*%O%` zsj^tjGZN?V3#qV;tI~l;-9@Rejq{>__OPL>u#G9vo{^THL|S1R;}anH?noz)qziYW*Tg}h+; zr6X*>K8D^PBI{!tu*%TY+XYnFdaSakKx62uY&}-l6d*lhRkj|hEEXtExR5Gak5x7q zs6#@pWAaP_>wmw!{(me^1v*R4#O@``aI?Ic%t}tYn#7ZsK1FwD}kVx?ltdoTx z7qW|$UJ1PVOM!44S(r9=8B=o(LDL)?I#{VcI-`36(7S*GxzdJN%euz{jSD)EE3KKG z*NuMKhTuT1v^;fjH#%jD_&~07ZQ6?NF+gER4&+K#C1!Px25J|0AXl0VbVix!^u=W~ zG)@znv2+p8i8jy)9JBS;f&wvNU@c8cSk@f{bo83<;UEr#jBYo(G(I7{dnD#&&g+li5Su%hz5B+(t{`koEGl{%98vOtSpR;(6NB z=2_$s+>g4ic4xT$<@%Ouqss%b-`&n7+HbUd+Dylrj_VxD9WMJ*_ImqN^%eEY>PmIE z?Frk}wi(u+Sr1w#Di12lKt|vpd6Vpv9*}CmuGq6;t7sQq6iVS0U%=mv?w!nzZ~`A~ z!F<+IP&EYAVP;JSb(PF+Xo|d5t4)ghr>=bH-#miqZ=p96db|(7S9@K{p=ROl;$=rpMyRpfcE#3MgJWDXSY# zZ=xCl6bDTV=tNK2(A@~N6bD{1nY*uiu-jAuEP!TUdo@%KiljLy5O-f%*v$@h$O?bG zUc`eU+mi|w5sl8#h241M10~7M&g%729vn$M6_Rv}Ufo>>BRE%KFEnD$*#sWpfJHZ<&k|0xjdbXb&H3P$UTwRfMo`4A^tQZ9fje(7@RGC+M@ z+}bmEGXym2Wcxq`0_8PN55P!kbI<;p82xA4Fspm><%Gg*SaaXa2O;xPYyYCpclzcz zAP{^ER1BMIoPBWJ0p77>KgQYuL3QG3F}IZ|%mGL5kJxh6{Ws5Iv9MXm_D|IFZz+0c z@XH_rf>eR9i!8CUBuxFk7!1|%EbeCpyf-?2BG^5PAz1M zR3Ol{uKy;6)>Gujw~A77w=OjI{a8s^lpluSI8M=I}?+8nt& z9!S>Jb=|~pLDskEkJQ2z9istR-=aUV87>Vm>QCXdXKRr%P{-QxfI8*%^N zWP7fyDpwTN0%=;+w{b5+Kc^fsuJTOE(?66mlX7MDOT2%t|;kZ0iFZ4}^;}<0D zwn#nWuX<`r&PPi7{;p)NSkFCi)qMG5WSs2icZn#U1^Rg z%qm$0PpJl~&t&na9o_&i9T$dlC?T#v5C}@yRee3X3EI**8qFE1Pu`8AZ`lhlPfPLR z@WjTPxdhj0<*3@liJ$HfrUYi;lYA(!1iAqyWMtBQsE;nWQA<*AC zUVnOHX)Z$vc13bhRv!db)jX>r%f}L|isYoM-djDE#Ty3NJ)vF5RW*YzB&^gDmjUUf ztB+*y$^nLTxXe%R(eQFmife z#GI^oEE2na{ry=V5Toy&p#4vqYY++yN!+)-KU)DL6r*33W}-#pfk@`y`r}zIkfEy= zkOZDq$z8?-DJ>Yu-Mjv1wj9VQ?^W`MlC7PGBB=vFs*EEwcli=}ZXceS64=bCt*eQL zBB}1`<5>?^$XE*8o3^zNCr?P1^~XvDOEfJQ$#qp9&AK_sCg>bChm&Hd8c5(%zI%63GnDicg9yx zwFWtmaC5_bH=h8)^id}eJ~`eyactmRiDJtrB+#^N=;n2%KRP~w^mtlra?7Gad+ZPI zZ5g_GjiX0fdVVKgLNFZ~=q@ubscS01P@wkTIaaZNTDtE}V`)n`M{2&xo5LMPR*pZTjXs zux=%d9BZ(GhHKa5W2~hIYy)d69RFZ@vEz8T`=w>mu5IA$?VbLY_^*|H*>ec|yN#B; z+W9=^kDdSQ`kM2V&QJLJ{H^YHlr5HD15a<|zMq1Jx6k`N4Bq};TmClJj{@%sygKj) zWj5bSeZT8o?XK}%@=f|q`1X6M!Ox$);`E7nJD&2s!ux#Bv)nF-sCU6T z<~i^FxVPWi=I$%I%UkOWl>egq+n(pUe^~x>`G-Am_m^FtaedVF2G_g6@5sl?Hc~3Y?TnQ_Eb>R`U`k)c7%%F@hx2RNpI>Hd*}ao|rR4l)EK5?p z%Yl#1uOLeKAYbk{zk0WGry}wE0-m|Jc4Jr&exczi!<=*#0I^$GM60CRk2&F#CvWfX z+U5SJ%`+U=D^Ws%{OOXb4t1|RA#!cs<2+|_6YtuD!FH6|6l^kG>roEAB35BBbXDg3 zZ*U7~+(0fGG>|C_H#3JD`{843JNE=eNBG{Z!b*-1rpi=3Cj%#6eEv+kUxOev^1j<6n3nBL!xl)zF)7*DsEGb#YbPqm8NoL?8 zou+vTL~?fNMRIm(bnomal+f9RicmC0V-d;65YD|Av`9{2;|MfS=N^p9B!9(zrl5Bl z6u`Ml*Bso}wYBN)C{~;9cEj3q(?E5y2((eSTSc|$Zqe4JyIED6G7z}$LCKY0^043p zH>=PgDHp=Au-wHRRi&yHg!G?=7VGh4M#j6|A<^ij=kM?kcB2 z&|v7CgJ=Q}eh5bXH=~5I5sd3i{_opXgH9ksrF{11tfMSu!f~*yo0sUA_yLUDq!4kv zr9cK}x30n*uT@2no4Nhzf-fH}Y*zNq7<~H>#-2N==^)n%KV8)}5eE$oN=ruT+F?_r zR{Em-^M#*2rm7!D9X7_We#ES}H^N8|U9swu%q?s9H0$T{M z7J9sJjI_VQ;M*HHvB6xFQm2yuFa_h4luRANKl-`J#<80FVgI4N)j!YcTxX{*dXJ0!cSXhUCAg1wnpZ?AL656%uD+!95gj?>?Q{0V`=-^JXDs~PUAY} zrys|lb^x>gf;McqkISQ#{gp-^e@8q**}22pVT7l?>9i&ZW?`j4sB_8<(ry56MH3C&{Cj7{xrTZHXtsaW{3^MgCLo zcor>|8qmlbM5Zfpx?Bxk)SXTjp{~t^bYI~;pG6ahNI;P>0D2-W6b^NUhOB5s|qpNbyPUkt~`wZMw)P%JJ6CN-4vU z(u=$US+s82iC1JGo2ED>>A8T;3+{S2izZF&=vo5k7@bO(AlGD+4@^grw&$!L&7$Gc z9$AUdY=mdK#)@pxW$^&j8%K|3(I%=k2E_--=@>Bv0b9(}cvBwjvnNyQdb4O0wMo7N zHS!TD5KJ}6OHQtnvV+iz4$@u(0u91bepu(DaXWaN%QG~iOHp1B_SCwEvuH`xDI0%l zp%z3p%m@tbUw1f*23FhTi(IvDn-N?E1EGCgC$i}7WT*TJL=C=%VPnh?(_{dG+j~Z{ z13(ZO5;aWD>-2C;n$cb)3F=Fi1+E^FHS346{Xn%|Hc6FLXqqICM|xY=&t?0dAsiu9 zOiZn!brP7-Ls0_Aa`XB}v%SEwhgw+_v^`!z>-_lK$ZX^KQ(5$!(txHn@IST6O>0b> z18J`BK9{{8Xa?nnGm;Xg51Wc>;4NZInIgKn+j{OsK-1T)nY3dmrRJ zbja|PS$@_QQmeEleZEJt2cdrYpnlk31rfmoZ!a`-#?vtM!owKwF_?g$^Dvjdr6RuH z5assTFKycVX!c&7*%2|^1hXQ!fm!wDGg|n3V~99L#u+o~gB?wSCFt_uqVCEQv+=`ha4W9>NaykRnps7@8i=4s?lU zGP4kcHG(sdl*FZO2_cQLP};rg&t&%jZN=CTfQ%>_oX7{kI7Eaq@yN84G;l*|kb_d* zzW#i+2`DQjrOZN@5r@F)rf3`HLF$fgfWc}bM;+s|!%B`GnZX6tSmH38q?J&LVIE5T zeP9B*m(vO&+5Lm0T$7ogt;<0vzp8pTy9X#MK6!N)ZzZVe(3IkDS0BrwLl|lbg==hf zmB%i|%+X_5N=*X$X>7G1_D^}wEY49>x^B3w6Wx1@z*m<~-T?xgSk@3H;4t?CU` zCj#FI{B9sv`T5FZWwrk={U?3j@FjiDia)66_I}NK4eb8^ynLkWM`gcN*5vs+&m-<% zx-YqY^@8?o3%R8?JJR%lI0`^dm(_A(S; zo4j*YxP?+Z0lS<_K(!q=wgRSS@8Upoj))Oax@1v%zjTo`N%S zbcoK+9~y~iY|uPVPGc>uNlOIVOwT%E&!T6A0n*CkFGgUAY>SaZA?{rTLZnt$h)xtD zxxzxUpb(F(un>(X#M}xC(XeVVn}BXLu)qehVr^(?%@P{kJsU4%?RzwOvtMfxC;sq64zDT-_AQ#p!MG3xB!HFem!PUCURAWlR3ka7MbYL)2LG}4Y*qpWb<|x9 zR5pbeY+_85fy;`de*~nXJZbJq#;V|4RwVs{gEQF(knU7wW<#Y~WnxGK*?ni#Om_12 zvHKTb7ruS$z6$Ifxqa;Z3D`~CK6X#98p}Qm19Im@HisEjvc;AHP2w{f&t=h3hdR#d z>6VynWD&%}XUsDZhVzGG`y03_Slo z==zH5A?Mee#~mMV4A?&jp}4*RWQ_hU<+g(Edq^#tQ2P_gz7PeMr=FhFLOdcah^{{! z4oAQpAM6uFl)Uzo?OmHM<+iK@XTr<`9*q8gsJnFMn9w)-6EHYv{% zTYU+EC{>i`w>DqR;mhwM`J*yp#Vk>dBE*pWbAdg+245lei<__H)~f7bD(p`b5!m|J zQ-m0l{yK19vtryI-@K4p4crH)1CSzRUs{haF1kD(#5XMD?p`6@;my}_cLDD~(g0nM zmRsp8x+&xtjs-^4pw=JU{6uaQ@IOZOl;Xd{J|`-U(&+eu3M_?*#Cxyp8-G0Dk`4$nWsxi#Z?gW4mA4f_0i-T9-8-0=2h)!^K?1ZR6Is zc_!zTxlvOYoltC9XLTetBm%43)Xr5GbLD*D*bNx2IHja~XC`TH&59j_$cs)xBB06* zn;*`V0XIDOqJ^7~ZR=@&v&=@D8|-#c>o%Xwd4K_)<}e2IGOI5fnbuw!n9zZ(a&90URJ=b=D9@yqtfoQ=$Y{;}2Xg4FV4Z9p1D+it+VI?FgvU%}_SD^5M|0?^ zfbRZ5C58>bVr#OeR&D6bq342UV&Iet_#V#LL80|<8ck1gm5oaAYc>UiLd%MfFP4-P zde;WWlvj_R&Dns#Hsusl0Tel5RUl&O;7=}TzkGB)`vj0)feY5;s`>2om0>*#tgo#M z>uF$pb!Avbz?TmM6ew@CReh)GlU47m`lG5FRgYGks_LrRR^579Df9i8r{J_`gTlB?zpYZ+K z|3LYR%deM95LKYnoAQo&+r4*tJ>}mk|5EwK%KyyhVByZUI~us7fjb(wqk%gbxTAsF zrh)a&R(Q-4OUJ@9vBxER^_Yl*xt*Jc60V36GNObFqJ)R>5u?uT-T5t}j~~Hz@iG$a zf~)XBvHY8l?J$*@v3L2Ln-pwdyYqJ0;65x!aC}gZ;1<<~cTvJOMG0RMCH#{p;gh0-kBbuiLX_|xQG%$6+Fv8e@lsL3^F;}wq0c@q z$}uZSm=qSk42;2VMG1rAhxu`*M+!T;y}ao;a} zZ}(04HdK7LB2}^0`(AGp_T#TAKUVhjvW2n=&ucxSp3UxWxnJsTaec}4kZY6kz0Ql^ z(c*KC8;(Z%XY4Pu57~YQq^7lYLEWZ@xUp|?*l`NE7ye_caw4#Pn-oMG?iv_hGZ+YOk#Joy*~4dw*vVLcwGp4~c>!$-`G^7Cq7&-~DUa}qPMYQR8m6zJjeWg~h8#+wFZSLq=b z=#6Y0$n^oedf9I_$S0RV=f>86mI?$qC$=8T^#YwelB&JDnoE=7u|VyCtrIzXbbLsT zQ3y{);e8rD`O+hqA(Y5=-YfKhfk2Von!LK)>tJZRZ&1;@8-vIhu~cE95tn7 zjZr5ZF3dp)jJ`IUGzx&Gml(8ff&?(%v~@g(@08o+$M!vubS6B*DiRjq@KN+mxnpRm$VyQ(8NK#}rnM8fR=M&O&n8KAiYmBJDyGE}iS?EY z6I|(BR+Oyd0dgA~#&Y<9G4p;tX!f>h= zzo5xz;zB;369$5m{i|Ef=XL?*dd0+@_PHg}=JQhOpW712?F8zL%0n+2`74=BB#rzP zn2=tdpK^K4mUFp#fD1FW08?6J;h~SKYJvfmmC{bug>&^ldk-D^shKWVb;Z(Px4J~z zEKPRG`~Mc(D{NISs~QUYEbyX0d*vr8 zrOFEbd;K&1M&JMSy}|de@9v6^SG>Gpx?-F66W*72&wBmk?25^yN`e;heSz5R>!C+$aV{|-zn|DDQV&uNn4A5aqHV z)yDgVav0U3RUY9DKkCa1MP2v{G9mP@BQ!k9oodnZ5SK-nD0P=sKW5Ir)je zi40sS9S6q_x(JQ=;v0xPp~(lkpTz^!$8zXCV2kXY3xWh)JPsj>%uB4~fQnx1XdKFA zfZ8_M0eIVx4awmjnWv zDX02!Ix%mK7?%O*-Pds}cabY6G;d|_x(Fbqo|ueD*gka|J) zBKu(&jsj(~!*C%@t`U>=##6ZnP^-Jlx&znuL{(czkjn%OhBO8TbCW<*8Hx)sn5Jwe zIDdzM)>0b|+3pMG9svStkFX(hC>+!Jq){#x;8>su6TSB9Bb$eF6OgA>K4CVfVoecv z5(ZeH*s}I;4&PTdoG&@j^27>i|N5TlmK?sQt~;o`8Ug7=BH6DuY}}O#L8kip!mTc! ztI~eG&UYk-Po8V#O9VJmhU&uw1P^S=-{?@+`SNX19_+PW+p~5shYy_V(AyA{ngg03 z#i4=LJ*x(D_@H??Xsut>lRFEvHpziEdmv~8#B(+wlZ^D)uT`(TH;3<&>tsidoV2Cs z*sraDt0{bfytJ#SYgN7na_IUSCPb>){HcL}xzeQMYRcoi_AA%dp2(rc@A}6WG5(mq z963G*5R9)qn;Qj!`{Yx)zL`WylCK}Bp3G4#$OfcOua$BmFmNAG*3Wq2fXx%)3-+Y) zcZudW2r>ho`+(1>+rVf4+J|!J1YEgCMTuxBdf|rgLK2oi+UYvq>vT10kP-G9SN6ea z|1gxJot{iVAH?yE5rI&}sA2sXm5_r`PGqsWdL(xOiU3PU+7`8fnX3qG9?<{hRmXDZ zI9yrrP2iCi>^^npyh35~c)U&CxOp;n9JJ7>KKJ2T3Ml%B1x0f=-B?E~D>B(Y{r_FG z{lr%FGQqt{xk5!zz9U>|ohC&%b&;OhQO~j6!-iNIDtLBx4W_y)iWlE<6_y);LXJr#RS{6qz2)%*{b?w=>f* zxQ2MTIjp!Z#hh=>pv9tRQICn@4UAq^H*05My_6cgkyDbP#|!kl9A=0|AqJ}!B5Xtbqm zq6JeoP0-XvK2-`QBh#2z_b^R_uq0~zj?zS485Kmk5*i+?&TKgx5Fh^wP2j8^>ts9>Z{ld}o@C z!Hx2y1idcVn3lq`jp0k+N}bZ#d4i$`I66E!53C)cKwgVOQaq!P`8b8}GS5P^pm=zC zmNu>3$7uR7ju+elWv0Slo{$7p@w8eVpxE=JuzW4n4bnV((+5KX3|qpDHJgr75Z`$i z2z6I?L_mROv+XbiwR55!$AI)TQ00?IW%~dH@B_d_>Xen!dwoB}@Xh*|v~W3*jB1*} zmOcvOJBI>8PW8P7R0i=hGY)1_U@-B zUU(gfXScPRqWOj`quCf$+eOngg@fsWXSku0LNpS~Gs@PELh4~~5Cu=0<5;4acAC!5 zNf%}^5ol6?pq+SA8%6MKnq7rs_Fb(s@d(#k4~H)$k}w*mO|6yAD>W?zj8vqI2#OKG z4&=76nIibHQi8B2Gc;{qK^pZgh-n*|Xd15{NuE#Z8)*{XRr(VV@TVS6V^|`1rA?*Z zv6sU5ir2xA&$c}j#dlr>)z*c8ExRdz?{RF}W>vkZfhO~+j?&0^n0Ngyn#d2zeHl8T zZ`esw_~P{?=IB~!&pkA0h^rsmAHks52XVE|NRxas+Eq`%d}VTA9=UG^MUHF9Ld1wn zlG=ZbB_O~%pJ8_$&A^Y&Ksuj+$8O(FvHS?vmx#qR^zNypm_A;Bnb_Q90!qcxx~HZP zHw{)z$KjrW$JKA6IKCNxk2bJ=3MYBkJzEROg;Ue8+BCNutrh0NeF6JK|3~55Z^u(O07W^RkuM%Di7MWo`U#BtdOb+Vnf`tjso~r zI+>b*xv=R%Y-)EkP2?+jQo5XArgIaBnn=xtXK0t*wU%P}_NK>9LJ$&QS-XZJ`7scY zlpI2U@wU|z!i(JlwhNa>aP~wRTkoa-ew?L%T88v_)?4`n?w;p8kbtE(&^5RN7$rN+7FRAUTw zRS4SXFC+ki6RONQY{nliXIXQSK>8N#9&b`LA=kPotd@3hJdA~c!+-(% zRNP{+HKiP_D<-8vvaxHbDaEW_Q@flL$Xb_jq#zrWz}8Q~*lJR$X)>JN<=~L~5yiw9 z$el=rlMApeYMPsx-)*Nz)(kYrU;(xgcF1G4kK3yLx$0e2FRYra>ZmFUd@AtAfkfa) zU|Z!+EB~(Y<&}?B4pr7xdi>w_f7<^_|Du1$zsC0;5E<|feUh)k=c@RJiWgOcDz2VW=G?)V$Wiyf1W7W=>3-wiwZaeJ-pKS5Bz-(JG6 z#qu{qA?hUMc;Z4VjzMIb=EJiyO_9`2!WLt41+hRaq2^!>MPl#-1sNo4O?HmfFh|(n zj$g^sOxWU#ZHagjp^&bMWv4Qc)Lz0CZEQJanB|BB0o1^HGYax|5w?1}K&2XmNT0Bn zS>UL%4@V)chLofWU5vYyNJ7?wge~PBGm{k#UFTp{gJbmR@TC~d-$>X}k1eH3um*lD zgsuD7K8E_Qf`j=mgbWPvKeR$N61E~_On96o6DuDu=_G80DA7U*@rK1=D@VqOt6yk1 z7?}l+H29XYkFdogTUBuQf~$L_HEbemQOU+^r2#NI)ktb9VGBw&3@WKOlE_VU7h&s3 zHbkhWhav9tJ`ZKfO9qugfP|V`YM9d^zFBW0Y_-W|B3R|1c?bkPkV_3JZ6j>aIiYX( z@&&Li@~$GoUcwfktRd4HvL ztON>cJelU}V>@AsRkohQQ796^W(PHc_XIFALn-PBTcEN@iGiTPv|*%aY1!hG$;NO> z9cTz1AZ&#?E7x%xJY&J$IRpV&Gt$6g@M0nb*7f1p(=mu08Uq`}1<1}Yz~)}U)~yL$ z?$IyEu$aOp-;d%2+yt& zKbFwv+Dq8_T3-wp<6HWrNDS6!Jd@poEwR~xMNJ6}#-q}_o_3J1Rkps&gU2z1RtpA5 z97D-eGPJ$0Ww*Y)P(PN5ekm16#%NShKGQD3mf~zMRZ~I+1vo(1s$AcVKo|)%MJsg6Siz;y;@BPVQ%#o;JOG~va>l~O`*6JW%F}Jk}ejqXd`SPuZ-nN zLqTl;A-KPYq+1HJ-AmXSU*Ey|a6qEd1+}3VOBgq`4#HOd5nbac$gZ#BHo~?BdT|k# zXH_tuv=g>t2N>{X_&By21OW5v0-@q}4+~Ik66Jgtp zQ3JuSeb85Pe1<)Q?LL%FD!bT7g)~-7$_xX(F8L&0jUCzl^JTwC5JK>ZR;x`jb(!3;pzuFUD=sP*?Xd!Hm(qpTaGxkf9nF|Hk z=vO7vR>HO`Z0-h;aU~)}YveU>Dzux}xc$sfERsy560jRSA*GuR!{h{8?BvC!)~5ER z(UZXqPf#p7WuglS`f#oZHl!P_b4l#l?{SEei(AbN*9wyG92%2$U*(vyTxaMtf^-5r zFG4)SX}IHs28Gz|S16Xv;S75@oQ%U{*cj}XXQzX^A1|PX#>7Lgtu44G*|R{gtQ9bN zh{bbW#4Fo*b}-p6Pr-w;UG6fu!=Q<~yfN6^tzaQv}zQ%a2Q&43{Q#JyAUA^nad#j_DdM_-TU`7}O8^Rcx- zKA)0>*EX_gpQCU#&=iOBTRa%YRfN1>_D0ITTzkFLQm*b;z~e`A5!Gjyc%9N5KoglY(u#@bd^kV_dt9th3o*Ea}@HIx~2pfB4L3 zh#LR~#zN`<5W3XX)ZEnC+#2lWAh2CJJl_NteHWy3%9SQ)kqbm&A;5^j>iGf;AvG9z zGgY%|zN@1lpSuR;8dw6?jHWZuSR&NY9PA9yUEW+W27}?yXm2Jq6AcC1o0>ztFiPen zL$+sCwxoif?XKOnSayr~o){QY71AVIFP(xKNZ^?zmA1=bE%aEgWc6$}^|f`;2525bVCS#O47s6)j%f;QgJwrZD?vD#p? zLj^mMigN8q{?Y{d!`OxR7}k?2S~WpaaS(0Wiip-X3fF#fhLSl58lFRKU0zPf)Inn; zk(ycHr#eMT*qrnFu@kgj2PrbQM+#XXS|MBn&EaoH|6$c3>_2Eje>?gQ6GLgF*9n^3 z17Fy_FJHgScb^j(c-hQWKkCOO`mu@4Auu_h{r)YP9N37dozCeXMp+A|2oza6+A>iS z1fLIpu3!hSe7d5&Ca)WLm}MMW$%Ax)WlPbfrVv)16jk=(x}R`L0ofjP?jYxAu0wQ} zcM_HfaA1oUi{QT?kxAlJAy|vf*O9Zz>IRhfW}%*( z=5WdhcHy<`La>?k0mYLt!BeF3)z6qZG`V2Up0#L#@5!2!$%=Yk5Hm9xCIB z)?RYh7;bz3wwnxaQggjSy`5)MKD~3lT`#Du~oAVn7{OV|6d5h$>_4CW)P=91dTEiBW|#oq_`wxEiMB zluct&3VjGQQBYpYjzuRE6Yg|w^#ZH7CW}bR7L_^$+ZG+H38t1)a#eewBFku{7m(UT zJJTK<U{1Dt z;^rHm`mZK9l5C=9+TchBY_#y$nD6J9EIa9xeZJ!Q3U(6dVX$!kFAcD-P@8NALDxMn zE-h<^S7qgf9}`mR3x)1&sNlGWo5`TzQ(p3Bf)0W}a##khxV{S{*Bl$G+O8w$e(2WC z0;=B4w2=atRWWxE^lAiR!WL`!RBOD=mYE9XQ=>+cZvuXT&XYh+-*U=18okJOCwO#m z5w;lcH8e>tlJZKHlT^KJC-Y1m*uAc--ek!PCjbvY7fx`9^2BmT$xcf;LxcSTA@*;h zK}nuI*|enUYYjn{Pf&lGmO~QdqED?KqeameJSxPs4>vF=pVW30CFnZ}6r?u)C9Rat zfW5=iOyV-_XL+TlY>0=TPpRdq2&MSy8L+B{rc#oeBIu9`1X-)p!;%Vo7LB%*%1sgU zQ3W*NWMi58g7!K>!}Tmdk5<67PT{(wlAysAx-Em{vRa_W33{^v(iarc%eKkT7RZP> zZsEW$oX+fT``*fm8u;4|^CV2|xD^Q%Gb%L1$E7o2*c6P?bIH-mu{6BSj--sBmTV-A z2r$#N0-H=Rw9wqM6t=*gRGdL?`Kl^WP<$r6K39Qxn-N2EW~FLQW(usDVS`|K<6=Ds z8exH9u^v-kp{xRw1J;n{gq2r-ipZb(sy5SwWbz=@0=pPUwdYnr%qX0iqN!HlMu}R( zawCLdnyyb%EUZJSe)DGTDwaF;3>7z|=du(U=c|dT77LH#d1dEM7>(WysMM5`dhYo_ zK^j#gPn$22@DYSchDSpaGkRj7Vrdsp9*bxmei%IDFp*1rE@A?!eUGAMP~W=<-rDer zDTOUoh*Eil;?YAiQ0)9dNEMNPImDI32r8e0sqd0hIA3p~>j1v+`G#rmsLGHk6K5FBP3k}W(VS7BVQP+C5BN5wM-*_4~MknSj7rN(0nF9!^fMt2S>uz!CDAFxr^ z7$G`#u?Q3F-|WANpEns2Pd2Rt4!Q`?`oQ!+-G7;z7E>sAA0eUMq=C(DgO5THRt8cF&ORW%yjg>f!G{O-#kG&87m%0fY^5a zF$|mdw~tYKb=+qlU=mErm1$jLhzk#J!KEfx6v^HPYGfs$nNj|9E5w=JYc(7~Q~Y*ZxJY2*lBTX!s9|1oW+t>< zUEAzSDh&3Awqs4+dMVUK(6l0=j4psbwOM-ip!%Ts4U$9-thT}uffeaWRt`NQTTuZd z^g)82omNy2E2@HI_%fOhtfUNs!_ZG>=U@nrjXf^y;XY;3`{~J;@`%0QIeH$O%z(+alrFX)RWCnvuS41MQ2u==>^|US zDYc4&eF3h6BQ?r1MCEfRGy*K)t$UiTt>dxT%XDl?g) zt4X+>!wG7CM^kfiz8vhXbU!Fb-6Ozd-o8wFstbI<&Sf}_QANfgKtlUkK2IzP4$qRa zu{ikGh(+>>lT`8#*|W_(~7 zY3|OQKFn3>0eAi!`p%ucc1mTdDX_$YqqD@^_#FGKI0aH$7JopipKF!0J9qljeWrS0 zuH3#C8Vo2Y`O9_X3&Y;I(+8We{M9p@>GIci`u3-R>h9r+VYv%6J&fxWO6wMM43O=A z$eq5rbK&&`D=M9HFU{S^5^nVk*)0FPz9Ad!p5T_01nPTP@AeJLaVu{34H?~{`+b#{ zIst2(BHyZt;RlIZ!$UW^+!7|-u(WLS)p}UAoBqNo&abha`CWf8>d*YPzZmsre&4TB z7f&L~U$4u1=WkR5es#EP@+*_;a@_l?LjUi&`In0=JHliOcB8w0RXxjc`>*AS@Bi1> zVz#Q62EG$`(!bO91#f5hTg$#&=JSk#pZ*Tl>s-6QCx4~m35cv$3&5rRk@hwC%3=Hf z`kiySy1K$0Qg?f#u}f<2YHVw6?rQ9wf`3KZg2C4IaHO?kDk48Tfq5GZAp2uU_%8%8 zx`O5x+fRVwPqdB@fMjhBTmnzl=rf;gsu6ExT?BR;*T~V;RPOG@yOt*RVK~Dj5f6 z1AzgW4pU5^W-85QKb58v zU-DU!1_m=UwZevwYHcypiWVZ2MPM?8;$8Jo=^BaKqI4&~`380AZ77(UDwK&;ReJ?x zZ+)bvF_|+EG_Kf4uLlW*u{_cbd8ynD=$h10rNT2i;Rr9M38fTNBWGz>`l3;Jp~;-F zp)Xq6NKcisX0W)=VtMGDrLaV5>PnQ!O?}Obw-T$fF_pU57{CLBCBrwcsN0XN@<426 z`*=Oct+O>aT^((a=8o1#cVn~E5^QYih;%iETiPcZ+uEebuGY!6_Nho1tyyOvZWKCT zWBm(`bKnX)iecV*k{77yrfgceFP@0t`OXC<30~g9oj3Rr-yiI34(^5jXl}z(>F7*s zGJiL_4nT(~um?=*46WSli|Xu+LBGz0~i;EY5}PQg?G( zu%oN7JqrJ6i*|Q6PELkf8mFRD&E3J~j;?T5o4oDB)$@@|ESh3NHvK2s*vkWTM{_jN z6>M#5lqSRNjcu)yU5%3wmjXfQ0ha21a209wMgS`Wdhuhl*+S`Mj z-JQJy*XZJ^s)0(@Nx(U^ImylpjXp3cOCea|8bXB9J^-P~M``FHl<4X%Dp0-o9U9L~ zt1CW5$o|X&a$%@G>UUE1qXfFFIen7 z5K50&%S4b!{nz6`|9o~2H?j3m%%t^`;p-?DB4n47*3lckBd6H`S;yLR;UJ_lvi#U~{iMepS!@AZ(!i z#M4X;p?*qjBKWg2`5`Ca+ zEzgAcM$I(4#0oKyt+dRo>#59Pa>!a8OTKhy|B#}sK z1<_9B>fptoLh0ni3%n@8Ws%rp5Xz7H|E;!<*s5|>?!dDv|D*D%|84$zeIN4O3ugdF zy`S-pmw&1Jk+Od(JLUPDXW0E&_mJzOt^>|DJL?^lSbm|Vt!U+|kna?P;-(weIU4F>e4A;8RM^5h zVD+<@rF`{EoC8$B^~8yXab}u0B|f?^JDHf#?S=RhA!lVurC`}S=J9?iM1%P|O{Etz zZyH*CYtw{+;At{cGI94&<`!<9;5Ax01#he7z{GeUj&FE$hZzO{p%{ujh_9E*Vc`<| zWM&esoTksj9)~3b?9k_C;5DC46k|+jX*@l$R!pB8z`PFjV&E~HE_TKshPrORGXMzX zP`d>2+)o7wqMKQB4V06@@J_HWT_{En!j3jK?WXO-aY)t(_>HzK2)vkz;ag5^OXVa{ z0Af*4h%5I|85+#bzdac+tIEU;o2fQU$XRWn_JfrBKJ%xLL*Y5x1gKkW-GEV$TvCRs z_sR!NfHX6w!cgVcVT>e^j>9~KI+;l7nhvCsUXgg6{K}uZ+aTHt^rOwRz>SNhkACF+knSc|Ii1(13fW&V zbJu(Az?H*21I=v%ee{<1Fx>L?w>I`3ZtI0x-oECx!=2p&hkN_z9pd~xx$2x|I}J{h zJ?IVt{X=Q1PLm`o1A5WG1+A}%vbM00WUFY^gPP&0$rvLP2HnJ=G*2{AVd{zLb);gi ziFK$|1D_&f%-T!FD`9JJ@>tw(nkweh z4b%6R#+DGCWRobB&xgJE2>-%HuVlT>&kXicpWra-WRL0VBcaBiGCDON4xr^z| zNd0-ii{&gW`PEZY@_jcLZro} zVsNV=jZJ4}C+Cte{q|fD)DS8Z`*2(5K=(jTM{CDGUw^Q_tGm0oy{o6WwWqba4L-K? zboBRh3=Gg+G$}hStJd_v2zR$I2+xhQs?{Y5Wz63(H-Q^Ts>z09RFY$)!R&>h(vmce zeC547_?_2ERst-P6z?)nKK@$q@&i=VI`jQ;0N+fF&^J?BvA6`G2w=g4kE}ol;u@5z z%k-iW%=_U57MMh&(&4!Na9)=vlz@NWBJcnGwx?`m<(`Y~U%8)f{iEx!^Nr5+j%oYX zz}Ek%m0$3a)e)+w9`jGc;TG{|B9+GLP8czggHt`1!ZGSdQCnkToKSu0U|Kgxr5Y!u zAB*-SB^V%-fk256MGuksr8)5Tni|%1K{GjolF~+27N%0}BOA;v6QJAoODULhq~zhm zOjJs0RaTHJHUE~mbT7e4Fg+d%y;ho9y@>k!PgtUROAr>rcdi;h-{?x?goUz!fr0kYfPA2)0 z_pKJma0AJQs%p}0BVqA4mpWkWr3Sz8k)6scuVM{LAwMzG$)BcSt(Kt#O&KtmzYWDG zRvAiRZhg-^%SAt5mO``I=?sMi`v)*OC@xskK~)>$i#}bGpOM{~j>+1OI%FvC@MQIZ zjJQ)z(?d3X+<>Z)ABE&4zcm7?qLpG_D*ZQIJWXrACCz*JREh5bz>GAFyQrBAzMT0D z)2_T4IT?;zg!Pgl?(ijWNfC=eOpjZwU%BJzdl&tzFvoRI1#Iw7I9_h6`a;zktDaRg zUeyrzRp2v$R|ggXLxI}LpH}{D<;yD{s~o7@;QyijL;e@}WB!BwyL{jBz1R1LQ*o}MvBK{Cy!Z9qYu;1d`tqNbf1>rRQ9p5mz2$x^^~pk zeAn|q&kH<~r`uEM{)YRV?wtD}chK#2ebM!17jccd8l1m!e#ZG~=Yn&{S?lo$J&2w0sG$;u)nf^{VxmHUs}Na!UFc^7O+3Ffc;Mk z*#EGA{iy})Pb^@6Yytc47O+3Efc-ZM*#Bn%`+qH9e`o>w0}I&iTflzL0`|KWu>WcS z`yC6|Z(G2A%L4YB7O?-v0`^}lV83Aj`*jQ0f3|@Ang#4vEnvT50sCbO*e_YYe$fK< zpDbYi(E|1h7OdU2)?*&(Vo)=#3mpxx z;q^MrI1Oa`|0iv(ldc`kpE>`*`6te_^Qdz(c>DWk)zek4tGZfsvT8@*XMukR{7E1k zI2zbo`EQjUt$ea_rt<#EHQ+7q1ODIhNBv!Xzwhh5clfftkgwV2s`#ghH&r~VVyt49 z_rJWK_P)wH?>+9VDgR0N$IJhye6GB|e0|vu%KobC56Y&??k!v8`KISRp5O62;%W1g zyT9W8GxxLIXWe_Av*pb+8!cmZ9q28hvun`N` zNekGp1?(dhuoD)r4_m-KWC0tpfIV*k`=ABvISbgc7O-b5U{71Xj$6QvS-_53z>ZkJ zp0a>FX#qQI0eiv%cE|$uxCQJn3)lxNUz}{;Cd%yyAzXfc!1#FiEY^McmhXriA1#FuIY^w!qiv?`Z0=C%# zcAo`olLc&}1?*l6*gY1oyDeZFEMRw8!0xnwy~hH!-U4=q1#BJj|9=7f{~xG)zCY&s zTi>3F8{Y4GkCpeAz2EZ_Pu%@+cfadN=TDr+9q)J4Kn%bOOL!ANIv1#UO7U)%6m1Qfx&wx7TW?!d)KHHa?XJH}i*Lc` zT<5fsndKT*R57GbDb#Z>6)kXyie}yDoW9ZI?8&vwN48AYgMlEMifmc^4RVb$sqNJ>&Mg>clAY_+tPNN-94@=uc279y712f@e>( zFTf+b)8MiZoO=$(XBGzIqtl7Y@Eic2sp_8BSkEskLw>mN#Az`atUOVg%v`ttFS};K zmlC>{UG!C?nkHl~zjaX1*!C7(vs92Hi&xCHJ=yFZO`Da6a4FTjv9>c5g$l)7)~S=T zTZQ`0z{{X?CK^kC!LRb5fp)aG4! zDwl<~TKwZNxem-fZxdt?O0DW|Q;fd4N!d5XD7AURvH9n>0*O zEuA6lX0^l~#i7$VaFshJMNvJe!|>ENla$onsT)ZWnPfyNkwvIEr9Uh>Br0p?4fCG< zX+`ycv(yrGse=e*S=L(Qo-&OjQZoyNo;^TzO@$qdQYEw#(=i9IY_RXbr|F`1-v$Vw z3MP7GBeVsMBNbJ{(r5# z!&Y@Pkgj~n|EK=dzAY8kz5ngK?zNR?;FkWP=Nq1|`%|vBJD+q+**^}@JAXD3AS@nw z(EM9g)dzv%dtNt_7N!fU9Kui3^qm~v3-0On&UY}ks2d3jkbcPg?9Te2>e6#C3QY&x znCPGU3t>X}n)s(gbcNVNSitmyH%y0-SWQ?E_h;&Kjz4VDs?N~q91p)eIy4omFwM^SXj|GqSbX_s>~)SW ztC4D!bZ)q;?Mtg0CJ*m*j+TILHZU-;Aodmx#hBOeQ7Mv1#?lLHV+Y+%s}TW6*hJJ_ z>NUcm(ASywhc9n2PsgOoS|PXuA!8Xs_uzDQ;UP-Mc+>8M!EaY=YGHhCCJ~NGQG@Ng z0YE5_s)_5wLzfDB%sYEH48Z^<;R#_MI6;8roK_pUM4ZiA;xMI(Jqg zl(5`%thf$ulp(UjF$-~crS#N1?y_VrIZ7c77my%yF|bfJYjwg&qpJvTc%TYuTphz# zsRC}1BU$kx$ciIbo{CUq%E19Sb%mDbRymU8h0#u#MT@kg<(^um_Qz?Nmd}xFsZ!+q zvFbd~@)=9k1@8aX*@!LhlR&U?&i_K+yL>w<79sB6*7C-(C(CL)ukvhnUvquWHQJ4vhA2|&wqC=ricG~Q4v;>(ayGVPU}$sSZ>a}yS{yVLw)PAl7J^kU&rsv$%u z8&y&{VL`S#&CeHFE^^7VUDXgG6hu+V-Gl|!K4?DBvzAfuLlC9T@+hH1a#NxjdWf(n z*`14~&%V`D8LT43ZHQJwh7h4V!ud+QIH}3|Tjl1cP)Oy2ON)Uq?xzyKh13!jU%T79 zJ8GtOl~|FEqQ?k}sF6TTxtKH)?T3AF`~t3N;QlH?oy}+~LWB|u zs!kfUWDA`&hDoE@@dc(ZaC{R>&nyhg&xPaB{5`_qa0Irix>LoH@RCA4L0GKqM)TX& z(adCO0ZyW44STjeRVYD6Q!^cg7YK{2ZNX{w(b$FQfp{9uz!y&UXlqN8B;>7BQHHQM z*cRfcolK&q&DNIQm@Y&Umr#-~xr?xX)!n4dY|~&}N{Y(MUPI*@V}#;B=V@+gZEg*A z(}8T3u!z({i$|;prS{>`{$tpaM3?=#QK0}W6jV68sYkRmKn$Fl$>VY;bSVgNJ9|PQ z8qpWWwX-#CO&v|a8Y-W>0o+GeH0yEm0~;6_f!o&vT(v+4rCn8tNu`dox;|2o!~t4Ijij26Dd$PI**XFN%*deaMibn~O#L%^n3?Xe*DoKBz5gi`6UJxK0mWh*15k6nsNq}$j%lfsoERl0Ns z$z8M|T_l6nDo(WDGgTbZnM)Vo5LrbFFiVatwE(5GsO=-HZu2E5mAhmS7RyN$EkfrF z(^mooS}xo=8A61@n3%Abtyzs?Y}V2o1fQL-s*#cqU?K&ld$Rqsa{Q-@MZ&Mu4PD9N zbbXrAP>C6B&eZDj}`m#EOOZ9yEW*P@J!}Z577~#bYN{HH5|eK4#twgyV--ooGb{ z`(4$ou2485uu!_DC|$A96>2+SLBWT~xY=&V$;g&|V1h^^BC(U0wC+l>BwQ$`#$PsQ z0#=rAm6C{4!8-|yDSpoU!wF6jumM-7nU=mt9&<&ISeRF`ny{GU7NV#qVRlNbuEjW^ zi0ayZ4`JcT2h1-fEGTUY+hLf=iF*wOp?)|jwrXX1;1sH6Dy|z4f z-b2OcHXo8r<)bOKKo$)~D3Gd_JO2Mv*Z+TM!EeG}SipYJ0`>zIu(Ku)k*k`+N)7 z=UKr1t_AGxSit_a1?+EGz~(Gqvlg&7EnuH(0s9;a*k@b7-mrjOw16cRu+Or9eZm6v zx&`bt3)rg`uvaW#AGd&Auz;PnfW2%1d&vSeV*#7CfK6GzCfWV}n{8Enfu|~e051T3 z>QDQ==ZjT*ui~Qjqu$-+FDQ4EErN&sM)%7hN?+Xhd(L%^-?snSe!}+V+kX8|wh$IV z+JcK6`Gh?QXS$aY$%{QH*=V9j1Z~yyNe>ntr}P~kVXyET2@4}_!T1giY*MkPlvK`` zdhqZq0)BuJ$)03nI+m6qg>OGiW)cdlp3Rk$Gx9;9X;T;z;u%7O!hjnCdNfu}PE%QG z%{x$%?|ur7v-97DT=^qyxae(~<6r(=BIERYyTP>m1$Vs!ZzFYwb9r+`NE1p#mGB@L zqe_S^x=kNbDmSoT02GC*`w=M`OG2wjQA3DX_ywM&;M$QL4eCU*lvgNvV)D^YNVZ?m zT+`r{V}u^&($cLaqw?veX&*{_A($JgLPHZ{j45fUSZl}#70bdgK6qVGuN6)t`ewqZ z)Q~hgDJ6Bbl46`ty!`copPZ7_wZUv-z_%io;UPa{8JqEG-; zJ3cZbH?nn>1duCK)sU_NsT>8E(&DTo$Ei5m$beaK`evkX9NW2eY*RlAnQDeAcB9;c zbdH0cgPutmS{l4P%~MZFq?#O~g7ukykIRozZG_SsE{tQ)y^d$sm=o&ipmts2tq8;M$l=5c1tU4*hj17MG&bwDBrA zx>WWB%L|1)B$#D?ogAU;>&^Q?QMeS&cYKOj0f>hjrV=!ozj;*nV4oo+U zTSzZuUPnwjYLy4@!Y0Ti2w7XRfi@V7>Edh)>7i2Bns=)$3s+EG`R~glGZnC#+|LAD z^qHNp*siottNHKCBp|=b(I{B9s=@vLYTGMqRrdz|AW&WT+R6(5V_^Niv*N1vgXMow zmU9ofrkxXxk2{XoPXlZv{>VPU9P2(r4w%(1bBYNY9(V#eGZ>#rBxjkqjS0V)rE>}E zMw#l!EMdNO2Nun{Sf_p)%y>kGEyZjiZj2O)cB|f-u=fhr3G?A=!M7EvITp`=uVd;! zO1s?9B??QGUjwZs%sa0I1Lwn;8Sp+0Z*^f+FDWZD9A$MYSusv17iPh+VbM*PTi!E^ zrY(lSgLvXHyy8_P8GYcHRgy>iLz%M{7iibXOe$-g%8YeyX z&nrh`@ig*2oJ`E(Mx4i8(H)<{jLLTG8j#8+F#`vgDI^3P7!3IK->OkZ$5C#Ed(qc} zMzRs<0&L}y3;RbCQ|Zg$BtDvpMUsgW{M5O#pqcmT2oKC_$mvowX-9hcG`~l}mz8BR z|DB(Z`S!CIB+Q-i=nc~kLv`XXog>qHd(jT7CNc=y*A-pnm9Awvs$3z={qmv3$4rkZ zN}phjHLo<2suC*b_O^9e`~xIHSDrm2VYc}43KOOjToft&qc@z=ZTQ7Fp#lv1nA+X6 z{uikDJIN#!ztemm4)tzEEV&`Xn$Q|gGE~%R5|%|Z9XvtTUq&-iQ?dD?jf_ErqUs0^ z%u~tsl1Hdy=gj+iI3rD}tBVQd+4Z<|Asks4xCD0TaDy-e&cb!aisteNWzR3v){+S- zZ=ZRSc>~^~r;g(xm2SQ)0u)N7uGu$`hpAvk%=`2<;0Iew^t)bgN?a6LQn(rN5PNTt zG274kVb!>R&M~wtPW>!oiH+(C2~kz-G=C;7Z>^0Y%V?5>eBqfPG(Os-caZax{iyl# zOywwq4O{BPt@sAjL)E!x+LM+#hPoyG%La(zEC(8C3Pvn(RL!JR+?r(IKwtKNLZZIgNs$BS1Czp z4h~BWCz5pN6%2DQ>KdYi0vC*n2jGjk6H&G|bYwjMzhLotJQlw=B&EY}m=(q$=sIB` zRxO+}(-Od*MqY(#HLXh&O0KS#k|a$R;`OF)(7@18pg%rE$eERz1w*x3YSdm&1l^Yy zlsca%a!=_ce@Ls*zo3x--$4#j+d-3z6J@)+Vw z$TdP(VAICMpxHh)0&l6oEK1Zibg4oalrzMd8s-;GCd(c0QZpFtH&qDto4WqfXQQ?5 zCoE8^mAA@rH+g=mOTs44Dy`1~*< zuttN^07o~kR~RlZwgd$EB`;16!-sCwr|=hKj43^ z@0Y&&yp!dBR`&5Sx92hUH{82i$DGe|d>E4dNB`Y;aFO|Yj6K)1O|?2i;VNV-Hmfw` z1={VX6Y%^ci*9_gme)jUxa}8u%HjGlU7HE6!mODGi7w8_(M1-Eagwz$=Fv`!;*zwx+xrL1XpS>>ujO(h-o<*bCXPm{36IqeG zTedaUZpph=Td`%!mK@uO5_>fBB#k|qQD(8NBu+AK7MTel&ITz2nzE)8Xj-;FX&Xvt z(-KMwfu@u~T9$^ELV!S1pzz=A&Aj*Ky_tJu`wITre}A6i`QClsId?zz+;emVEgWmO zM4T>hE4`gdGReRWqI(5N2c%0#GMXHZ@$_0>Sw(?@iQMyu69Ct&;>7ydfx_B^0eTj#(7|9}1aZId?*Oj8!%!+>_#gTPP z@$0fxWw}vU1_MpEV57u#o#I#I1F$5i8dF^LtCzZ3ol5p$jk&JytCSLZe-cm_2I)1y z;Rhs;knckV{HKJtv{AuZYb6EL8oNZC$nsQ*I)5SfCLXDvtVcqLDe_;+$wy}>VSHJ) z))9HDh;v^u9L6ZVPs6c*DN99c5pg2S1L*^_qZer!C5^Q3Mdc_~5w1(H*kVB=0lNY6 zMa4{1Xj}F5$45Yz-$V(m9&{0pWM~h_ci-@)n;MSWM6v4>oC+i|umUr?M4Y~}dv2Ci zYoyy0`?QX_^l=n=l1SFq7yl+%r{dA@>0&@ed5@#g?xh==NJ%(TW>Fuqnj{EmY|_LO zMhMl_+tOlyQAV=_Vt!NUMN*us9FPYArIXRk{G{;?5n)t_7wzndbpwq5H)MLwP<40J zaMddF8|D|xPnr|vJ?3Sm*G$iOU-CZXz1utNUFCVh^MdC|Pr|duv&{XP`#JaH?y!58 z`&!qluFtqGxPq=um&^Hz^JC8Q&M{|`v&!+Z<3o=79HWkP_Fvgww7=JW*1pePZ+qSL zyzL3wjIGbM)cOPKv(`tgQ`T+PMIgSwGu3adK2hCPZL@sC^0XymIcnKxF;u-&^_1yx zQ`of2bgl7K<7bQ)j6q|k(Pemr)*yjnA#`^7JA|(GKx3!S-r3mJ)YRG7H39w>Y-?_A zZTAOSJ0=3gLk!r14A@}?>;VSseg^Ci19l$+b}s|=CI;*v19lHR*6<4k?Ef%e-(bN0 zHv{(P4A`GBU|(mz{*(dx69(*$8L+R>V~yJwuv;0hTNtoi4A@Qv>}CdR2Lra90o%ra zZDqi=FkqV*uuTluO$=Bc1GbR?yO9CAfdRXo0o%ZUUB`f3%Ya?OfL+aiUB!T1$$(wK zfL+djt!Kd2F<@_Gz}7NgmoZ>#7_c`mV6SJuE@i-8$ADeJfL+Xhy_Nxc4FmRS2JBS~ z*hLIjF9X)YfORuqT?|+!1J=QSwKHIC3|K1zwweKJVZc@~V9g9z69d-BfHlx#4ZmT) z{+a>%zYN%4F<^fQ&;PG7v>QC%^9(!x#IeEtxb3^PYpf@$e^?!~e8v1x)B8*&W7zPY z08;#uY7uclbAO6Dq51I9C}Da5m!u_nDCy zxK6}L$cIuJXsw7+J*v!<-HAjjG@eYTt`b&4>#~>5Fhz%mbC3%nW8%hw1(lrXO18WL z(>S!kD_fjOsIqVBQm=RfHY!ZdsBa*XjNRMeHD+HaRgi-TnSGauI3IfB9DRf=?1!mi z>?QtUg=-6X$hd8q;CIpC1i+9G*@0UJ2EIVUrE!gHoV!9*p% z;S6{t7yealLk70=hyb$22t=g8$V^gktb@(ar4Dk(p^wi)%=Y>N zQ*who^uj9l1!VCp1!(@WOcmg0K@I`B8#syrAA$rmQe~hH?G|y)`knO2e+Zj>p}<)b zE1=L6lwCs?rrTl=p=uH5vTsdM2N?zJ2I#y0tPlXhNp~FPWLHwr0O*n^jKH%Z&R@Tl zK4%&@$HxAZr2~cHC*6-rgIH>{h;zxe(%*K5EeQ*%TOlO?T_QAH302pA5oeI!AW}~V zWl5@j)FlXT@Nh^P_+%X%9jU>ekrQmsEJ<^_wQ#5e+RE0VvbIWRD&U`yM4LpMV&0$H zOgqKlDZe)vPeiAs5lUi!V#Mgx2=afWc~4glh_YA23FjHErvb%5XGMQ(5*}-VU?Msc z^>Jk>rA^{B_=0qX+R=`jy3#1FEL4}6H1Og0HO2qMGNLiEA4Fvh24O%Q+u{**kh|vB(5B9nD4~E2m-ulM0lc_4Tk}WNXB$Q7!Cz6ZKUCm1_0cg)U52`%tBz z$Ch=ZxEVV4A+PL$bEQlRz)vFvVqJqPD#*J+3sRIHhP;CAbV(4(7~Lxw_Q&JRveGmG zEiyo{tYXENEwKngV+tj<1l9r;EJMHp5Hu_l&__n8_ysugqCmo-i4b=2(uBcsq_zwv zNx0qt`qRV~~#nH&6Nmso+zEvA)cV zuM5*{o`rc|Tp}()tc0|Yb^_=VB-d}!%B8w1aMkNaEN|*^mz0X!{|eg}G_1>N3Am0F z=t%t37(%~*Q=I?9{r@$FIfM5uugNp%-s(E&eBSXFj!pJ=*j}<-ZQWCSmF0BR2J;^R ze}IDkcDeqf2Sl6#xIK3jZ3U4S@9-Xu&P1n$pins2n2>G-lA+@?CSf9Hnar@(z!_qu2BB zmK>HL5tWsVuW>1PqE2$1h_gly($A6w>EsvPbW~d&tE*~AO>7l$Lg`~^>L3(g7Sa#v zuS1dU9bKxDvg_-?w5Qzl$n?+87c(^=ZbU1LIDM32yaT`)mqP(~9~;`WpeDP6!4O>2 z`NL>-7@PnjMm#iL65t-+wL~eKDGSh5Xko3C+9BdR+ow`{sk=EMvd13_&RYuVmnkIZ z6>(PXF40OW0a+eHyQ1!WeQk^`pJEf0P2j4;7ZPSG_-Zc*y4DS zmycvq6RSm>)Vn)PeX~|4NFCFYA(*v{_$Y#(pD#&`h~bT!kb(nC_xgIT`XxZ^!Eir+1safTxhB za44cy>TJpJ2%R!DTBo{ba7H87Rq8r%CDK(teO$5;(DLz3NT~}HPcM~Cpd3zvXG=l z_y3Ju22Yzi=lYSW$N7lkS^MkuHMR$=FI0ch5~wno-U)ub@<*)!@q~zzX(Th$Q%_$s zkVK&<;M$H{`N0$Q?pQQAgZng2F;(c_$_6%{5_H>u)Isa(WgS}cAJK-HIp9gTmAS4_ zO8Pz;VNZxS^#_BF3j-1G%z&8`Va_o&9nYtP-(el!F5>JZ@eK9&hb~Uzeark*JdXl? zhc!Gb?nL9fkfx5_3p<>2DUhx8vb^~_tkbK+9Z09WY3fVW@{JK1Z}sf=Wq@oN<2Y=h zrT2DmJ5tK-)HL-{21fG;f*c7Yt*j*SE4oIn2h~*!8R+GA@Z(!GZf7F_7K_`60JYQt zfVCLfP*Mm`4yr2vB6gFw6%o5N6{jTzoEa0q9FMr^%|j(RrhG}4Y|%u4+8&9bD02xw z((DnpAZd=#hr7T&Fl@rmy>pSW91y#ZEVt3;G^3i}OR9$UEoynRPGnK_Y!Ew%NUgMu zjcQ$3A`e#FXy*S?wjd=Cyz$) zn4U~Pze45OTpy=PN!o>_){E_k))0LhiLw)YiSjC;bt$Sw6jvC8`F$W3K&SD|hMxf7Mf^#bM4aG#6MY6)xl#OJGNew3Q1Y{GdnuY-mWYQ@ z>t)E}EB_2$XN*R{R1KV;RIcu2fE3Kui8%NB;S{)SL1)8Nd=RAmj)j84p=4ONIRws& zLLd+cXimyuislUpu5BXD;qK2vSHF3;WJ=(s;D zFP=Ehrb*5ZeU(72v3=3W@|_LZJr9MzfoEiL5G1mL(bfy+^JN919DDS`lZ9-4_KGDU&MrUC`4XOP&XQ5_Xk2xRL#|mBkb+rA#2Muq z#pCno45c?ZG)sz=Yg}};2dYzy<5cT>l^4(azUShnHi}}WouRbrYmQm6@V*v zIDh>h{YkrAo3LSmLvbn0WZ6|oDOQ&sP3Xu=Q4wQfkQ6-DN3I#7O&maL$PtnHDui4c zxVoj9k(5$qYSwu{S1+8}C!Fua8^nI3i`F!CdTzNcDo&IHa9L#?8bSLu21QIoF5Q(4oD47OYO}bn zmhBZa|FPVTTYs;8@rQypiM>dp$J0^TQ6HX*Bim((4$GdlQor`Qt4+B7Ut;*E!SgfE zu=_o(Z@3OQ|IWF}@fQ2H?Z<2%x7}!+t)8?zS@qB6|1n>0YBGM@xCMY0_D{+zhEW4p zouW=9KI)I30#=#P=qW*!3rGHoZZ){~!MJN!CxJ&N?z12bsu}pO*cg`)M*dqTL<1f{(uK7gy5uzKVe> zbqs>^@98qv9Jq8Z%}8h@=$JU=G#HJCQ+E1T{D3h?vjRMTVuc{xJ+ntZvX}sHjl~zp zr0nDSWs#9Jr@)IVOIIU>o#gG}B$m%fZwV>O317x7ry!+u)kkX4ACRvMD1JC)MK_r11jCI>401Ho~rRFpMx@3kz zkl^{-ax84!Q)@+> zas6iX)_dqbCNVN$wU#5ve^(%*|xP@Mrc%?09ZQHGx! zrc0`*z!lY@k9XF;{D|MPaImm;g`{9*B~B4&F{$kjsDtnXjjpaDFfW`VW0HMB{k|>>L9&$AHZ;U^5KZGy_&-z@`|m_c37a zWx(FUfIY{6y_*4h7X$WA2J9>Y_ACST3Y0_6`Q@3L< zrx~ze2J9&Y>`4Y}hygprfSqK(PB35v25gW48(_eWGhqD;*b@xc;|$o_8L+oGMh)wY zW+B+wHW6(1H?|2vb7NauXIEoaFc@rX4hGvgCMLQzPc*aS(AdGiV2lBKD+Bfx2JA5g z>`?~n5eDqd4A{dA*inPQw8&(pxq)u{LxysnV!(cY0sDRi?E4t7?`6QghXMO;2J9a& zV4q~b{yqctT@2U}2J9gQ>_Gf&f#uq;W3MP2x`46KWVY6di=agZR=zrjnm^4LO(Vc*#E<>}W&AKw}!` z{A36kfzR`x5M>UUWk2gmS1|Hf(gtKdV+l3`a-An&phghHM(0cjI7gO3bjcuX^o#c* zB8OAdzCiM?$Ro~3cXCRrpXLo+n$hu-V`J#P+t`>8oIWdk23R*ya2@R3nQ9R4!4}EX zAZ?>PE)|7OX5`^zl@`-7Kwa93s|k}na7hDSSVCHF63-#BgY2w`RXfw6c_e}gxI8jns(?;bWsnV0D!Xx<%K~UITCjZ6sTO%6I9Zy zcqh^kL#BekxGa#EvPUU?(v`a~ye|`HN&lv=phLnPNpMwXs29fMR)@P*vH{~!8LTe7 z;<=trJd60!gch{`v*oeJp~K@tozY+U$d{J zqlvf*rd;A_^yx18>n_q5gU&q*5!sch(Z=YK@=cQacjv?;qO*Zs6Tnpjb(O(LJmC+k zE|92x)Fn`8+XgX#2sF^g^u>!77`Ul)u2TM{`+340ALvHKxE*>H*4#@w6KOUD@{hXT zY%V&C-YLeA&}->^Rrf^WiNQ!uEP4ibGb-y|@ssZ7i`}(GyaRoGJMh-&@2O2<1QEQAe)#SV zpYhMe$+{3PWspBVa7Yqn{4n8DUvwJeMNqa6+P8EmOYJ3fvp9_?ZxX2!$Q1UI(%MYP zt>kB25?~1u2V)Ov|An{W8|z8`-%cFEH`bG^INKva62yHEZ>&cV6#|mq`*tlacDVn) z#xQO0ZudOq{+N5I>n`V~9WObqwGZ1qX#G#?-s&fT_x~g2`%F<|3cxPzkGLp}^YAp& zul$DMqe47^uE}ZcUQ2)1RpcezoEQ9@buJ3Q+kKF^+%;7CH-#VQ$uv&%GbDD?P6vI$ z1i0xh1ZAmJkWU%x5^!s!Y-yFyy84oDUB||{ds}*&yL-ADdwT~uz==&?TVrQ)%jU-R z&d!0pw!WtB&W@%=y>Cf3*+q96=MajEep+dzr3UH!!D7l7&@`rJpwMs(1S@kmJr72J zZj=g`M*);NDQtM8PoO2!@%FCP&Hj$fO^rUX)PHb*zX%6~ZgF$~Y zSr3WcG*0J}6a$xDA;ktVUyT$?xHy$GwRZG2^|bdiHn(+x^S;)W*2d1hmZrwef%fjc z-kz4$zOEKYCH6Erl86ANuYknx9f@(_S?54yLHBx!Uqb)1b2E%VTxr)|yIF%hDc1bvJz?RqfAf zF89kqb&1Mujit7x-H6{%ih8IirZSS7O7ShqQbTDav@T2eOfv{0 z#bqt*qACY*Z45Kt!aN1bgEQwo5c;uu90W1~@z)D7Y)dQoRfx6( z3dH>ROT}pNA5Ys6|IH$G3KPh`u(*ah92lZmIaFvubS1c?i%r=@qvA=>_OuO2c_c+W zO==m|3u_o@f>26L^@_e0h}B=RR!iSN9s2sT6$!92)yUG!N(h(EXt1g@VY)=+9UPHc znyyCV`ctb}$Pv>f*{Y&ega#m`QXxM*q%OsxLFKlz1uIUZjuWP6yizS_E3VKD4T4!d|q=`tA}D?SYHq8rsUkGm@gBG0Qdjb8U_rWe{+A@z0#F({?vJg(KJqIGbAp)1k914nwmI5SK_UaT$M;v`U^0z zbsrc-a(UA@GY&MmQpOTgDXLH%N_q59x^hTHH1XCnPEm7PhB|C$VSfQ`)hf3$aps!EEqZ|PFLq?31njocIj6D&c)d1-@W7jB0#Y z8YkY_n_5d-GQ{m^DP0cr_M@OWt?CD- ztm+WFmGQbP7plq&lzm!FLSZSaN#h(kUG!PZL4@a1LX1S#m2RS`PC2zPx{AVkHB|1{ z*i3Rf9Ewk&_IG0%C(`Lp(Z_*C#ZYZ6%OGi}LWbh%G)}m)oj$c8R!(6_q%+{?p>&yD z($+Q-JO##%Vnf1geBhtQ#>PP+iQw3n&sP{)N^nKt3PZ_Qx*n}-rbX)9HiaZpV17t| z0G_)+=GiH76B{^C#c-}Ey+s-8+q#PFKN|=qK?qz-f-Eku16+K&G!vzq={h7ILl!$y zB2pGGQGhe2a9B_uM&qxlFuGg|be5!VBy^}ZLWB;?7Z8dhg#!_Et6Vu?Yh!fjz#Hn_ z5fBp;7m51x#&j)Wb}U7m;*3~~K@?(84hR_#1ZP(up}7DOTTah_4H1e;tQvyo-qB@V z+!@uSmm$6k5nPFuK+FP|gb*H5o&`1$c-W7lxM}KC7p==ts_c8yHHcwj%1Jv*6NVt# zL^2i!I~z?#gO~FGWrSAKWKE`ASY4A|iWoBF3>b_TIHF|=GPQvnst{C?)W_-alp2z_ zDt#TI)tWv)+meusN@hwv8US4)mvj!3S-9X_CH;ReW`Ja-AaLqnUq1}K2>(mIU@lB% zV`GRqdB~Sd;tlB~NKftbX&Q&1E8ST#duWaWS_nRxl8LMtp;E?Nz9<0ye3S?T_6?{} z!V%s9HuML;{eSw~|E^A#%lV4)W6tx=F=vyr%JH(}Lyr3#qn9fx0NZVUZTrNPfBo&y z0K?6cFEU_XV8DKX0sD6h*uQ1KKF@&t8wTuOGhjc@fPIbu`#A>eUol`m%Yc2B0sEH> z*uP-F{y78oGYr^2W59lz0sAQi>@y75PcmRX!GQfZ1NLJK*pD(`|C9myCk)u98L)rM zfc*#q_QMR=4>4f>XnmFOFx~xs3q91#z~F-n*emzb@%`Q__tUW+-pSB*o?yVfg8}|3|zKsF%EECV*ffK4-CMFwmNp8qc~Bn;l`JQ?@J9YnALwO0|4G%4 zmxwzmmDou^v`WZ)HoYC0#29XuqEhfdirR>&_(_*^!ESj?8Yg*PO`k6YeL>R>C;vtF z)0fmzS;_u}7|AVf2SFMr5Z3@*Ve!E$A;A6Ihfs1eWlBin6w|BelUbocK=^T;zCeEY zEm8~WHLKD%`*b&bu3Kc=#q~cFjfB9F_Gol4auOs4)G%Lb;&hb&kKKF0dF4jwI@M{A z=ZExeoLPD#HNs?H$KNmbRL~OEdtn~TH>Ys|>4Ws%Sm00qI!Pf#6EiU!G7@o}8;zCm zy1dD&WbiHIEJ6cQ>gqI3Cf!W$6Iyc6sB%0m{au&ZnNVaa`2US(J3H``1YPl@an|Ur z6m?#De3GI*1J!7*CG^U%gUm=L!U>}f(8qK?u1$$J`*cTDeW@axif4Bkr-}}M&Q5vv zSLefEdQQN5z_@#jBqt_9XO-$?cu|+Tq+rDj;nnF@G+mC+d$tTlkRL*!Qx}{0KrA|q zYC=h#;sssO($t#rrdtqE2B$xmV+_#&b9-2Tm)w!lvZ@d1p(<0lKHZEcHPavOB07pu zT&b$k-*sug(Y;Uy#UY-!q=C_<36blj@7F#4I36WS`mK_rK2Db`75aG^#9msFiK_SG zj---W_2WDQml7so?mm!*2b|i2|J@IUkJBK#Dg1X|OIu5GvwSUF04SvMrZ*tzy6GKK z`l5+KS^GlcFx->otvP+1uFR+p3hDKT(pHf=9v9#<0rIuRB+n;J#p{4{$>_H{tqPER zU8Qx9pt3+ru6w-yKX33RJag{%xqjpPs&mA#!+w+P!yxkC$?7jv-(vZqrMYU({8e+C z=>g;SjXMnIFLL{@`Fg4)eHbac4rE&c3x$sHrirGG=FZ0Pwzi4JHow2Mv8$!a-zc=T z1jbwaoq?8?Kw(bBBky2Bn1(mNS8S|3Y3J z5)yupRmKlqx$7L*J1bTOYty5I^}&T?O+&RlJwmAV@}=4r^Mjdfl7{2T^dZ7=kTXXV zmk_RgXlT}^4-%T&In#vgaHHE%U%#Skv-G8h3Bluh3Bo%gp~)l&$O5iU`bg9x8pdnV z2MFT>3&@y;>C*Im!nBnuQyOme^bq2ooRue+# z^q=;JlOX&Kj75?}L$9=UjHUOXC|Ap=qg)+MOmt$?sPg;8f3Nt_)OG2-NCSiP3B-;U z?nMw!c;p-h*YBlvwenb9dT2?pCVdm4)=i)APy2JF%W8d`E~SFd#N{8gVvxZ$Enbx# zKr%09w&jD%d&-7^zJnaEb*0c>3`<#c>#<90y_B`RrKuS>5BEnBLTn}$ii3SgA$ezE zyQLGr3GtDyqRZIv75?J)ru&gj8tC)zp>Kix3&{8gP6{;iQus|@H!*PQIp9ZE0mU_G zoOFIC{Y5840XkTNNnl?nB6PV_q;jA#W0u9P5(m0uXcWOIRr^S;dTILkR)2KL2oUX1k zl!I8_p6)?Ss*!#-it3Xz_R@Jw{i`k`4mE)!45hnqr=bsng=9ddYC7^2e&Zt@)qsM8 zwWW6DaAJj}vyhY{c@2!G+UL9kL2@_KLKhP~FYR zwk4+uk0@wZ)}~Jomb}cbM?#Sx2!sx8LNo+-r;lTT;#Hi~NX{}~z$XoY&|nNq#w6lc z5F0;=4FjBofH09@Wm;cfa=@`XeLK;0KVMP6L78t)A~B;Ojt0rw7KY@}>97xMmhYe; zS(_f?+-gaqpzT&G(zglBnexY|>UvrF7Q%8X-v$Zlnx>l9q>mAPoDVX{ z807Og-(6xn+Z|Q z2X8E!J~?B!|6gqQTZ4DR^8t^=eVgmku4|lO$M4&J1@`|Ru>MK)-&nqD*;I9x`8l)I zwAc6mfc|#=N$twu#CSELm9~vw;~a?_B6lAkKai$bIOCEz4}ewbX(0y8$}lPghy)aX z2cErA;O{va1vY3B<)(mw(Yz_nZMS4_UcDM{p@7l};xft51LDxJvhPgeWPCNLGkn=Y zvPGp2CBumjEBCH6&c9canq5flAczi#m&8iGH4Wl;z=T4n>4hZEO1mkIQ}Wf&yZl_5 z)(+dtAp!K?IE*=p`!Qt?ZAs(Ybv3C|{8ha_84mYO34v3rtZz@_Y;rZgeUQhv0&){Z z;Moy4J_CW=L3r0bV2O-Q`p$y=iMFE276l)Cf>#fN5}=b->HFIIl!-J>Syv;DaF!6% z#Y8AJ-6u>(=Pjjn8QPM@(m46uW)UT_q;Zs!4h+hqT zn3d@`*&X!r6{dnQrGzHV7FY)ymH6tsyg5Zhvo4L(3i4~cl?^H?imTE%wIIKNfYPL* z;(22lrwptEmvng7xW=pj4SXtw>(V%9U>!*Q!j&P7Sw+RQA&rv-)`9fce7VvXR+MC6 z{J)L1nadOZ?+H-wl|NTBa76=GG;l=&S2S=%1OMkWKp&gP@Iwade=%Txz<~Wv2JC+@ zV873ReU$|4RmMABg|=kM3(-LFWe@KX&Z2 z-*0=-R%;DbKW+J*rKRee`E%wf(=OvV!d z5(e2lz%foD2E74d+J{^vj%zzJi}ArN$g{-bT(01=fNtyd-vJ`i#bGL=>Eh`*>(Sz_ z%(X-W&TbbYi5Q3~uuq6gCZ>w?=XLnMHFFI)KR?H}8nk6#t%8os)r5Y0A?QPgGk*do zK9pc(-kiCLFb^#pb5_z#nMH*3Wm&+H5vuT!gr=5X9%>gtj^3 zB$ShUDMRNR|9Dt{q(`Ikq282nEKJh|ag|&8gg|K8&+PN(%h(C$0AFqdf=hdUjAfTdi`Mm20l6>2&d+!?9Pmd@aOFK4960n>_p5TNVLq0JKXZth>rWcIgGp+@|i~f^p&fw6BH7Op8ezYM3 z>0JGhz$|b_g}&kBzxD_qA1CcjeQTzHR56b&qMW9Zbbll`6AeWYJ;Id#bSO$oe>}4e z(+9DMco-Ur4!|Hf$^?im)*lRkb*OM=9xlLIB@`S(<#$<96PdL{O5RSuD8kSvY-Ndg zI{|B#p)Ki+nKh(2@^I*u9DNTbLg6^&o@XMnnqyr^3?)}&ZIXIU=IXbxOPbOpxfewK z(5{PPnN>v6E)IPQ`=fzSWgvY?bms63{_pv8E7jZD!rhu#Nra=mYkd(*w_$Kq0EyPr zQh#_R2$mA?U*;iP>HFH^t;nn({fN)F7>VGUVq{FyZl)z>;+f2HQVD!4PO{M(#NIv= zjU~Fl3Q341Ba`v@4&wR+Y1d41rk>Ock5vL1*@}kz;@^h+5zqo@r`hG1IzpN{e(go{ z7D5{3E&_4WXh-I?nHveo!yLvd8A%Wl9vK)wgjmXkzamphsPgEZGOBxoFbG*k$?`~M z8D=TAb5LkujKl-vU}PfNI*$=j{kC>5Jd&wdSkYQ8N;Leoo@h5LtZ2;_B^rKPTeO3j z>xpO$JR9VYAEu(3*LYvnWb1LkdEo{Z(+#EE}ZSq2Akznw;^*KVamhyLYRUT zMF8BjWF>pW|No*58dnOqqJb+KxT1k88n~i?D;lVv0S2Ga&oW@2Wx)O=1NJW%uz${g z{R{*4&ls?uX25=m0s9OC_LB_QPcUFV&VcfBXBiuV4reS;xRk*bQYSJv$2*L} z#e;Y8Ag45rmbP(Q?})VY{eqQFCF4{Er+0^uxcJHl>gjSv;!?^g-jKm5;%h+qqswoT z1SUR`M`vtoL`WpS^@q4m3YAs1I=hpJD2TxYqi>DIK$`4`(tRL2}fXx6^}0 z0fiP$CHm1!I}v>|hbn}VmJ~_xh(DCr=bsf~^Enbzy{z3l$1`n2HXf&~a@mH@fCOig z;P^s_%-6p_qXca!Ph?t&l)E|CAQ->T&cfrGc?(%ufVPasGA%?#9xh3R6X~YrdL-UF z4*^SF*B0(%rkM!Gvp}CTH=cuKQ zjY*>=`PTt|0C>!5Pao>ZKh>1kM0oS?S<>b$W!4N*a^9Bl5zajP&_{$o5+rQ|Udcs0 z3Iw0M;-w32HCj?o1=;8Fnshr9A(6x+*tkHj+x<;rLal5-3|vM`i;d&Esy4 zzI!-xo5A=0-)->T1or=52KWC*oo{ix=oFCu*-r-NCm8=5gy*MZGzL^SIZfgoU6^d96}Kx+}AfjDbnMq~~?>RzvRh&0xaB_L>-EtoHZ&lPgGdTTxO)Ab;-SfGD ztK#m<;Oz7@De4@Qm&RmHe+O5^xI2S$%h!NgxLjw@i@JrY5@JIJCxfp^9pf)V;ow4l z6|17VBZCvi*QD;{Pj`Mdaa9s*$>4_~TF^F+y$^5A>?G^3S-#p=vZqdErD{CwnH_}w z^g_~S*LzE5J0Z?_p9=L(pUz6DZtVX*XYhX2`$6x$-cfIZ=hvREc%Jf{^BnT5b^pr! z5AOH7?{W{jSG#`U`jYFtu36W9*GlJqJHO!keP`Uc+gaoIk>hiYw>eHZb~>)H|GWLq z><`)l_RV&u?OV2w+U9s$3$A?ciUzJ|;ED#WXyA$lu4v$QMgt5ki;ps3A7Q{g%z%A} z0egV~`yd1MEezNP7_e_L{_P+I1 z#=}N)XQ#hI=xPr%b_(sCjcrX$osC@+;BUdU=H}LRf1tHvB5*G~^d5TXIeO^b^w7KL zp?A_lXX&A5>7i%np{MDgNqT649vY{I#^|AU&_ieFp;3BhgdRFg4-L~pPtik9(nCWy z{@*7J-a*d;!2iG6)$M%9@o$a}aQ-h^-&g&7b-g8C^+MHRbDimo@vVkW{+6sLQnzLV zY-|y`I9Q2fE~u9&=$6tdle#SvB;rwL=Dmp1nxX^WP$hM1#!qS|#G!WPAACzidu8SXp*_ft zHbwX?70rgsaYFMjUz$__xKw0UWo{>Ad302U5L_yr$1=BJo*)R<$T5MfY z{kC3zJeC<-SmEY#=b$K@DhyXi&E2}N!d=opTq@y4GPe-n8hAEKMLaFGHmP`3uR*TM z9K&LPU|g5Kw=o9eQdPl*%u&LXhYJRKI4%|4jhQ2a?ydY(%aXxL#kV_iGil+R-E=N0 zr;JL7p3Gq)1ZTes>|;FNELJKhwr563(>ceX=@d@L!EIE{TwDc!_5cL0jHm?Y%#08L zI6K&30oXEGskpah4iWA=*31RnO3KIF3;#^3a=8D$#&Fu;z1B11&bXd%{Y({VKD$#)Onm-QAo!Az1!$7Aawm+ms(hgH?$ zcqT#Q+|9WbFYAq1m6W$;;zUXw7Q?~@vE))KTT?B0U9Yi*Gch6_k7c90vFhDtWfN4d z6g_!6GIwBk!M)hazXQ>}UrKo|R@D$&GBboZ50j!cbBdd>D%LwPQNo&sXLzM+nN;^2 zRTA`OBBY1dxwM!|bvsriMr&r8R0NN8W~GYI?&O+F`!J!+V`+bpH)Kmxeu|^Y^|@Ed zSf!%9J#&)K=CK{rr%itmTqQs-6T$+3tW}qPjF-=8U}17OvsS6(oXSiQIeA#qm z(E?s|ea3ac6?ApFT+UaVA9J2}jyap0RgRY(A9CF17tx+v~RH zZBN){Y<;$+)*o1(wLWT{vTn03s{T&(Gu3adK2hCPZL@sC^0XymIcnKxF;u-&^;Ff} zrpHZT(=OAs##fD>F( zB5|Urup~}26_&(_roxgq(NtIxCz=XN;zUznNt|dZEQu3Mg(Y#KX|QH9eI1)k3|J!r z)tKzRrOCDFgN=4A>tt zU|(av{)hqlLk8@BF<^hdfc;Mf?0+y|zt4bul>z(j3|PvQ4w|#R%TVrj7_i@F!2TNp z_FoyWuP|W0#en@L1NL7Su-{<7{xbvi>kQa`V!*!4fc-}X?AI8uUuD3)#DM(@1NO@d z*neQazQ}<65(D<{8L(euz`nqM{Q?8_?-;Ou%Yc2J0sA)$*uQ4Lex3pQ90T@q4A{S7 zzcR|b6iot|1Jvuuhz);`tUvXUM75%6E;Uq{z4FaAA!by+=ocxT^RF}9o zqVV7=hJ=J4B(L@ZEGk=>NnDE9UI;u*4r8J*SoY9JPcjq^Zh=<1P*^ABxRA9jl%OQ< zC?`S3v(-eHWw_%3#()q@>QsJg;^;l9&w(@v*T3F@I!I=n4A+r%?Q2($p_| zvz^RV5jm+NH_uB>xrJNp>!DkvWqTodOQ##d(W4~%aX4!xq6(L_;mSqT@*2^v+Dj|% zsjP{}8{j9eMmTg%)jN?j5^XUwZ zmZfjF1T*YR=3XN9G`IGw>jJ~6s>7Lkh|C=Gg=wO91KB$cmT`RzDW!bY--iLlgJ11?%v&U;Rk#M9YpiNw_L z?=N0ruDec^z*E_4h``i$S?47%e2M$MQzdIMdo_`j+GBWLvda5zxmX#OZ`G<2JeIwR z2u>XV`Jx41fW4PU7Gk(%S^#dr6qk~p085{dnnb-5vL;9U2gDtTwJ9wIOG&4r6^ z*D#6Ns1Wf-5`7_mI68T`4c;X(ySdBEeGjUVc{1xFGGAUZzw9!sIx3g`hWpZ*7$&n$ zE}|Cawt6Ik+eT!d#ClA)t{|iVwtXb&ipBJmFbA_Ljd&uUT@Mzhwqm$Ek7z=bLdX(rJoEc+X3#3aZWXB-@-_OUP2^*qs+yc*7?E4aAcgN+hOH zt@%mogjuv^*I?4=8rsu~d6Cw%^2UWkA{3d7>&u}SjwS2x2zVzf3;@5D;?HPX1&-GD z`Qr)juLqKenPdWb!bmUqcpLh2JNU06QY0-~$95LNUF z$_}g`x;DF#5T#zi%}b*SqSW12PF1`3a#I;6B(#eahAGCAu(oxtYdZR&_Zc+S(R=-d!#kXdcW9882&Q*(k$&?cg z1%yZ(%y-}~TDmEn@Wkt~^@X~n?AVu$eo^lWRk!kHpX$oi6>4^&RYOy=3i6@sjfnhW zk$QD7FH3-IFTrt#sOp2EY%LdI7iN#B5;mM&Mufe*HZ57rO0zPbU7||f$!ragmwNXw zua;b>+@j0zW#1>3h{{K2dx54vM&o=i1u5Y`x zJ0AlX{dU{mWBa-75Xb=VW;;tXAXrXrxLU}U6t)3M2C3l6cODgOi=S&p6w(&xef!}vA|U5 zG_5k5vYQD>uERigBpR8Wjwa)W<3g-26!(vZg&-~GhHMAn%yri44hykFoRw^Sww;je z=h|As{@66VLfaNXq5fcWTxgsLPBezVDu$M9eYSN$6dDZDud7yNTL?$4LsWCe@t6RP zC#Z+071?IObC74_1U$jCFVNQbs%+B&X>&qg;khEaX@RsUBx6xpZLZ1s2utcqq?ck5 z1?n6eorR;b0(HG_$TkwD)Mocf#B@9v4h!Ix^YL&fPTiSWvl|iJ#q=?F=XFYOvFB#W zEw5iFwhMp9~ZZvljg1OsNdK|9`W=JK}l2`@h}0U5`6ob#^-5Y=7Ba zXPdS@V_jSwxBR_jZPh*I7tPB}_ZYu!>@d8!xc$GBe@m^&;!G{IDXtxLz<)X#3nhej za|i8^QlG_1T53~V*Equ2fIz)>tk2@aESx#^Py0jE9P6?;?@Dc|m*;dW1Vhw=+=eVp zs#2TcIwto;1IcM2k~k7dOm%~m7;Vd3pT#LuIGf{CbZObH&f=sgoGn}u+qOn+p~KKV`|s1OR*vc zjDeR}GUiW&qLI;PG|X&;Y0BP2h;ub_DTuQwdtG*raHfufb7_cPHkD~He`DVU9JXj>5zFd;~8_$LXvG~Aq(UGj~Xxh?!^Cp*f?q2X1t0v z{y&QBKfb=oc-Uy}?DTgCUG0I!PNBWCv8}18v$1Oe{4Lnl+}zsk543hn1YGn`Cq2|b z4W*CWXgouzMM>H!)xb8L)d8u)7(s0}R-H25cV#wwD3h!+`B(!0uwe?qtC3V8Cu? zz;0u}Ze_r3VZe4VU^^MGn;Ebj4A^!CY#Rf%l>ytrfNf^LHZfo~F<^ZR*hU8IMh5H# z2JCtUYy$&!9RqeP19lAqb~OWb6$5r919k-ib~yvKo&j6OfW46cTg!l5#(=G1z}~=s zy`BNPlmUAk19k}mb}<9?S_bSj4A`p~uval)7vb~&`wiZkJ@0k@#(miJVV48M0Q{uG zXdkgXZT(;Cq3S0rKeTMFI&c10bBifw{1;=B;r>f`>R%`;wLFVc40HA(-v_+1>5qmQ zvN(${=L-awWPM}(-snt-+Mj537Uv4)e7w33Iycw%B*Wvhr&;T=I6H7{imT=SR5%2V z*c<()L9&JzE!PcMoDG<>LjVZBa3&fHG9Of|%;GG-wJEMA*AiWNt>Rq2oVAJ)iAMww z9E!~&yEThb_SU9O@jU)f(`6kH)@O0{UC!PigMB^z;3V@IP)io);jK+khpfI7=YcA= ztU6ws6^Qwt>kXJa(P?G{Z^{Mc6U{&@6Va@fv0bxz=khL~@obcp37zp7R)`n1*y`50y z+p_>w+Mcy4d)tE4x?c#K3QP&qH+I%!#|TfZj?9zcWB@E_0aNP5?DFibgeg~t!GUNv zNKew2y@inE>NZyJ3zvFQE43Hyn(VQKXaEJq)JzNe{}IpI+~0O@bzN|N%h}+VvwzFp zY&&E9inXy?w0z6bRP`qF*UTGC_g&Wge-0;m4N!D4i zE{7AYadxjC@t>w%EUnGqL}|4tt`j7r$g0h?Ih^B+Gu1;QBlY`*Gw}(5{=)F49L`Tx zo8r2#ms4fc?#diaG{)IZaR|hQo@Vf{-;l+L!8qF~B$}*Rt;^z^UYtjOLqd@Hdgj_J zPQ%5!TLFr!+FX&vIkak1TyGD9tOP8VKmu(e0>(@km77YJ1~Ay2(SlZSd~3X7NT7D$#A}!@z2mN@o&tY zAw0R>35p13XzRTtdzvuhYA2Zvfuo6W0bEawH6{fAG~;1KV>U@xALrT6b}kOQJ2NJ+wqY7>-G({ z`>g+BZL3aO{?W3&>Xi9orq@l|j2Qs_E&r3+n8QIxYg1hBX2Hl#yJOKLv*oodhl7aL zrlxr|_7c9V4ZSUgBZ4jz@1A5F+$@VTABk_v;qacdsdEdWZ#8dLy|?CYo=VP#&#=8n z)Q7-DF2-F&Xv3_?bMjcpVT@L4hS2SX-3qME;Vg`t-Kvt2IEZu>0x|h$iPq(C3PsM= zpTiLb>rW0RJLGKrffQK>fDJjEp^&rbFA?*DCG?~aZ;VfaG!fL@sx^nx3v!+%MuouC zNOA@SE%N3&XUZAw+uj>U6oBuQ)&EJntNHHaV*tFFQWuxX&@_ zSZDv0{YCqG?Pu-#?De+SZO_}Du+7-|Y)h>_us&;j)H-F|W?fYMo$6<*-&}p7x~PQ_ZhJ7V!*zW0s904_8kn^w=-aWj{*BQ1NLnU z*tarZA7j8i%7A@@0sAlm_8|uB1qSSc4A{3YU>{(>zL^1gKLa+;fPE7K_B;c2jscrv zz-Ae+83t^c0V^_KQw-Sq7_j#;VDDkTo@2n?&49g&0edF{c9sEqmH~T)0ehMOn`FQy z7_e~$Y>WYW2LpD70UKq&Mi{Wu4A?LO_7ns5Bm*|YfSqE%PBLI87_b5ZHpqYtFkr_S zuzm*Y2?p$O2JGz&*xMMeV+`0^vH$;hgLl~TF86=BJ6xjkYt9vpd+pz_Z?U}zod361 z-*5T0rK{=@^LNZUOb;6W$=G5zU)+0Ns=uYyxsdfw?->wy;3ne)_Z z=hAA*Enf)zLiaD|^fj+bK+U;&!kKIK704O70?NHFsjqscHs$IFX|9(-wMf(UJzwrd zLYeE$e~B`1Vq|p$+L)^)j2FiD95#=ZwsG2PO?dym-QYd!dCL8|dxz_7&L23pJ07rq z)4s`ekM#v>O?AlfNsGN|#QeDFJElhCdBb-M+sUpUY=xyHGhDaA71K?rX6pK!lvk#k z=Q5~#!YLKU2AIdf)DJf))El9O`FaJ4+Krk+x6vaN~yC{d^hB_ETno_>8{On5xNH! zLcR6PWww1P&92OK5~^Hx7US_Shz9PP3{B|R*HkoHa+?WFu1lS9;Y@S}nF5bPzQ^O! z{&2agfhyKbxemgb>v~wtdOS2q-yj-t?S%6P&$bIWBNaok)XidTu8ol8+R@Nq_8}O2 zom#JW|9_9cd&Ki0_pjW0UGH}poVPeW;xO6w+dg3ZrS)L-hb+Ib9Ikq&`M=D2Oph49 zXY?8Fxn!sQ8*@_dS*`=VD#A0hwo+|5DeP>BXDd|krMTXu>hTS^Vi;PEi*IO*V&D2U z=cGWi0iH^hlV#WN@|+Z!maF{+lBRFI8*@@zTCUwq73-OvZ(B}^PRq5ssra%thBY}U zU@g~^Y?|oQB?E&LsFv%r3NKNz4-Ct5N6ECxw~v*-@u|}2n%ogWl5gEp#Hdy=U6;F= zFy-nUKo_N2#dT%wFyYE|KTt7FwTfm_Zj{jEy0R|BeU|!E*+W4U=XJS}g=hu^&TL!{ zEhyKrr`jsLuE-rET)Dcj31RvteS|O9ZMDR=t&^VW>fByJ zbuZ673=X7FHa&^5(c=C8euHB3K|cyG!{NnMZg>~V756$4PKC^zJ! z6t7(82g(rCDza;GQi@luy^JOZwTfv=PRjAh^{h-Yq%-|OZc9$e_L}6`el=OMuO2q! zq~xz$-4&=qQLCEB%AAx0maCNq)1_|{8*)h#L=gxhmc z&eu~srwKJ-=D`8R{~I=4Fqp40eb4k~rVCZqm|r#jx%px9q^)>6~t#7wRt$o((tAAMix$4KOr>lFaue1EX@>$DUyHjB}rJx#Q=K zFF2lbBpo+7>g=!E|JMF4d)&UqUTgb_?QcLF!8`OU4p;vD|1S;DhsLX+hu%OBy`CPr zlpeaA9$HTit)qwDNDr;0hc2UsHqb-Y(L>kLL)XwlSJOjR(L-0#Ls!s4x6nho=%JnT z(9QJF4ti)iJ+zG;+DZ>?p@%lpL!0QKo9LlFdT1j(bR#`<13h#-J#>;DIzbN==%GP+ zXn-C%P7n3dLr>5{kJCeMr-$A~4;`b2-bxR>g&um09(t4>dW0T&Gd=V$J#>^FIzkUU zL=Qbk4;`k59-xQrr-u&FL-)}`_tHaeqK6LBL-)`_chf@$=%M}e&^~%-FFmw}9@yqS&Csf}~h3*nfk z;!kh=UpHqVe7Snklk7{;GCzXop`Z+V<%5@z<^ja}1m5S}^ITK;a z^>mFQFO`busyQPe%GIZ^a%L(O&y{lq!jr2zz=+_F1*YhG|AySXgeF&a08Ep8a9y6e zhtTD^ARF~ylJAT zqq(zjysd4bvCZ#qZR~34@;3@?ErIb?e`lbjC2*v7U`R;#gZ_m7F1Mq;e#Kxym>!*- z5ms!eUm^RE1Q_W*?GGpY2_ZNb351hDgaVPwB0>QCTm6U-I~@uL@v$+TcqC%;9FFwb zn2ypi9F9d#g5p80TOlSy0zxTGHKGhxpKokzWXc~Cg8Tf*NMK5cssGy-h|hp8Y6t+; z0~AEQ2K93n;MCL}*xc19GzEi=ZLQ7Cjh*9NO^yD}pntP49-L_Hm^g=v0&ngIy%WBs zBvANyI2Jk$R0|QKv81p9e(#*yaZX$|heOV`rgzdRttT2y#K9JLW=4n&`va%^lNx%{ z0F_bQP$&?K#-kGn-+m$C8;Aj6KwRQezE)qmZ)CVxUtu?g;-T>{l54;pjteq@qrqe# zA*sc;zkjs8P;Naax4uv=Y?zUF0>q7h>X|^rNcu_D&q?8J`8dQ=g|=4BW6S5HXtrFJ zF%^Pamynd=*K#FUA-uJUWXqfsvX-l3Hfw-u73=kL%g9X2b#F);;#$SFWv+&><*H+7 zV`d3*tzz9ecLQNP$#bnJgZMVo%**fh74kmedXKq5^S>RP2} z-`sVCGuJ4jkn`?XG&uvK-&6>8UBY?Se9w z&ekLe==xRMo$z-@uFtMmA;)82(?(GU!ofm(n>z9^S61Di-42-)zE!>uIV5Y|d z(MST2+7|_>X@ZnRD_^n#-UpT(%EL@bYm>NGU@SO0JL8YX!7fHwdj&B{)S!3=)a3b_ zIu7Mw@*_o|<3c2vxD$*}@^)3BQ0X05Xiv*<9;Pc=9hWhM7Q)0?CZgmOSmc(LoAS`a zR5vXvvU_}-i6g|r!djXK^3WP2H6^5#1AAG-J+K!Rw7$774=p4O$Ly#_DjOYLd7zlp z%XZ|UAz|xQjb2gIyH0s-ky9xmk!!3h}rQQFV^Fn>vr@Z$zEL z%-%Uv#cKABxsJt$^Kc*CFpIe=8@i5+zF}3_%C|uGnA@~uJiiPuZ%s?UcbL(3M@^FK?;Z{=NN?Me~gMwg{!#(4Ct9%YtIo!R`R(UKs5ef_N zSXou&xd~9^OXpkVs$w;(Ja-6GIotp-R=KL|k}A*bT{4)5+mu=|D2yi}z2RtF(5(hl zi4q>vY;K@=cOGsaBz=P4;2{@7Q4kJG+R=PC4;S>3v|x0Bst0{C5sQXt3sk-Z%k5|# z%){ljBrTk@cY`GWZHW>dmgU>jpN9)y(2mg*2nH^B^Pnu!m}|IUM;@+2=i7{PE1moE za2;4fMuSQt7n$z5g-B3{B_oq@Rcp@N(>am%qSkyB`v9h0x@M!!oLqcc-UB|=kg_rj zWZK^-Y22B>lH++dD1SrBj?0I$mjDh9B0b4OBC1^U6({=+K*m5NkvgGP|Kz4>_F zCI5o7n3#!u?la)bL$?)Ze?j#&{KCymNAgbag_U5bg(k@TLQ;qip8+Fr3uEcBH(|;9 zJ4W-+yKniu>VoH8E-ZEc6bpUuq++|n3Bs4L*y4+@*c~0yc^l9}SL!-UHvy)j@o+S7 z>NpIYHvnS%C1XOI@f+HO!0&am9m`w6_g1IO_A{31bfn^ZbBmuq1_6X@@ zXCQ9|3T#a|nMV<=qBVz*w14p}c@y|bgVa5gqkx_cwLYMH6Rd~Qw=6lBhwe+u$;g@* zKR!)l)mheSm0NrZ)P4GJ+fW|58r7052>2BojRj7zFqPhcT(*WKm z^~YjS-O)#jrTjfuZvWGH-DM^>-OIRRsg&06SiAyi>+U`zSDYB^)IVG zSUp_rwtU(0n57Tc0X|R_u4*^`*!*D-L!i#|RntSJ17J)1LE}l|Cc{s_r!M}_mOKo$ zu=q%E3{X^*WGOg20}kPZ!N^3k*#~<&koaNWrY(6tczNXz?&UH}r80~U!(ILf@G|=@ z|KXL+?fK*2)fz%ts~bzahy0-kGH?(O*xWyKPv>YJM#XQ9()HVtvNU_@LnjyS&BM6$ z4FcAsvb$+&q`*#z1zq!@z>=ML7+}8k7%nXwikyO}x5}3zp+NOKbbDiW9)^6cyA_u( z1^gyr5Kz8|0t}XMbNlW*48OkGkIMj?^InkUFb4BtlrKh(geC27>(9gR=qr!ol1O(f zS)7(ATLy&X3~cJn!^q{!iGd4rL9kJcgHgIXpCS&HvZJXx4?~Mfx+$2y$`?|A!7@5F zb?0HwZ+RK|R!!jfz*+affZFv}syLLD3LK3Ph4dX+w^T6QP?49SKmCjvx7^Av| z=&xMoDR$^q*~E8Ypz}x`hK_Dcvh^Q%ahhG|Ld)X)c^K%qf!HXN-9l3-@ZwJeD5-g|yDn^*8MTHQT}i9gBza{h;iIC?1xT zm8(#-cCpGAK%aYH(~|x9K2YRZ$>K5sOzcr0c{$UDO!9F#9#q}~>o;x7_kseKAH)W= zBDOL=@H#Z3^?=vsyKQ)2g>z@V8x&9jr(%=Qq*aMh!zr9{$hz|VhHrM>oZkgXXuSi} zASgkjE)=4amZtHB-FUy@?-mc`cY=Z&CNVW-ZB!^z2?kYnzu|LWL$Cvs*9Zq-K$KXR zph<8zI&*lYLWycPsJ;6Qf6?5X-ww*Gh3gPdrnE+>P?iKkWqhKsH@^*(flj1A8HGhk zg+dBARLV!%2lHD&DXRmRiF}Pxp&&UFmG%C%!Tc6kS>wpy0#nFUJZqCfQCaT-MwTv6 z)>gO;1JcE(qGyP;ZA1tI_fojJNoX%{iVaTZE%b%A_6+7bWo$u3ot@RPcbB$2ITV%k zmX-tg&7iCeaJ0v5 z({v)=4vN`+7a#`y4-^9pmIW1p0c<>~Hg0G#)O-zo;&khwd>i=0CNj23pJ0$4m0iHY zLL=>a@~xmy)GUj1e(M6xB{F9K_HU1X3R_{9V4aFBQK4lf432-rg~s zZw5u9p#iWYt>-vAEQiM@6*`a_4vW0Gr7zzEij?YocyK>mn=ArhG5cG#=&N|y2-*vp%G3apEKX1RwzS{QJwtH+lZ3gRStr6?hpnxlX zu4v$j2Cit}iUzJ|V4*b7bH549iRJdKM?#Tc^bB+(Lt6vLlfn6#*Pgr@7 zoO!|h5`Lv}DaOYdZrGMT2VU>$((vyod|A6BxAC!+&i*{SI9mfZg5dwO_NawYe3By| z{uf!DJ$j&XEPod$r}bVsTZ3+yn$`B`*2N?FJ3;XcLXV{RtmOs=OX_nM!D|hml}@XN>nO}il6b(^`I)xfI{Y1m5;6hw!_ol z^%}BY)~ZTr*^cdK@V{i0_=w>xz}}DqMYP80YEh#&&H8)fPGE0HK>ZL+E9*j`AB{4V zXi#&H#FupEgL%ZasWX2Pve_#?#)NvUP>k^rXc-QH zSJ^GYkH8ZGnE8V3grHg0%^#isCj>AX#r#hQnzc^|9zFz42qr+u^Ex4DExr7J(*iUkJ%Rul+iCfX~r;6)ejG}?8^s10rNRxXf8Qocz6dmVhDiZ=6A$^3RE32 zJlp{+83x1G?M(*n8{XHvuX=z*F8Qy^nh@c+Y$9^Pct2c&EH4 zz%7Ac?;h_iZ>P7(yUtthUFu!rwRsJmH$1O-UIqRGFMD3}Jnwnd^Ni&r#2?XOCx>r_hcP@1~Gj#v%hM8#s0GWMf>yiXYJ3} zpSC|`f71TA{eu0x{XY9y`;2|ce!_m#J`D0A?6P-)O1tvsiUzJ|;ED#WXyA$lu4sUZ z2CQaqeE66}B+nFi-bbGIlIK0-c@8}vwcJgfcai6v8XUX#ndOl(~O`b{eOps@s zJY(c}2YJqrXOui62gtLZJp0JAmppsW^L|S=dF~?5o#eTLJhzkQHuBs` zo?FPXi#$8Yb2E8%kY_u2wvlHmdA5*eGkG?V=O*&>k!K@$ZY0kQ^VCTtS}8$+I3k=PY&Pc_Vq&lIJq=tRc@E&@*Sbo;;V5=XK<{ggh6M z=e6W{4S8Noo>!q~#st!o+k1% zlBWSbtA0bCzb4QBCC^`x=P$|g7w9Qg{SSG*L7x9joki>Je%Xa4n% zr=EE1Z-05@VSF*X`o+(F@?$&|dVX-%9pC#dz7TGG<7;2}(icAWnNNM4G<$_qx}->YTIAc*Vt<8 literal 0 HcmV?d00001 diff --git a/BeWoLauncher/App.config b/BeWoLauncher/App.config index e520f7975..ddbd19381 100644 --- a/BeWoLauncher/App.config +++ b/BeWoLauncher/App.config @@ -56,6 +56,9 @@ + + False + \ No newline at end of file diff --git a/BeWoLauncher/BeWoLauncher.csproj b/BeWoLauncher/BeWoLauncher.csproj index 3b786249f..a6defc59b 100644 --- a/BeWoLauncher/BeWoLauncher.csproj +++ b/BeWoLauncher/BeWoLauncher.csproj @@ -96,127 +96,163 @@ MSBuild:Compile Designer - + + + + + + + LoginView.xaml + + + ConfirmDemoDialog.xaml - + MessageDialog.xaml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MainPage.xaml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + InfoScreen.xaml - - UpdateInfo1.xaml + + LoadingScreen.xaml - - UpdateInfo2.xaml + + + + + GenericProgressInfo.xaml - - UpdateInfo3.xaml + + BeWoLoginBorder.xaml - - - - + + InstallInfo.xaml + + + UpdateInfo.xaml + + + UninstallInfo.xaml + + + + + + PasswortAenderungsView.xaml - - - 02 UpdatePage.xaml - - + + PopUpWindow.xaml - + MSBuild:Compile Designer - - Designer - MSBuild:Compile - - + MSBuild:Compile Designer - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - + Designer MSBuild:Compile - + MSBuild:Compile Designer - + MSBuild:Compile Designer - + MSBuild:Compile Designer - - MSBuild:Compile - Designer - - + Designer MSBuild:Compile - + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + Designer MSBuild:Compile - + + MSBuild:Compile + Designer + + Designer MSBuild:Compile - + Designer MSBuild:Compile - + Designer MSBuild:Compile - + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + MSBuild:Compile Designer @@ -224,45 +260,41 @@ LauncherApp.xaml Code - - + + EnterTenantDialog.xaml - + ProfileEditView.xaml - - - - - - - - - + + + + + + + + + ExceptionMessageBox.xaml - + 01 LoginPage.xaml - + ProxyLoginView.xaml - + PwVergessenView.xaml - + WaitLayer2.xaml - + LauncherWindow.xaml Code - - Designer - MSBuild:Compile - - + Designer MSBuild:Compile @@ -300,127 +332,127 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -442,5 +474,10 @@ + + + + + \ No newline at end of file diff --git a/BeWoLauncher/LauncherApp.xaml b/BeWoLauncher/LauncherApp.xaml index 796779d36..a360f8211 100644 --- a/BeWoLauncher/LauncherApp.xaml +++ b/BeWoLauncher/LauncherApp.xaml @@ -3,70 +3,18 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:BeWoLauncher" - StartupUri="WindowImp/LauncherWindow.xaml" Exit="Application_Exit"> + xmlns:viewModel="clr-namespace:BeWoLauncher.MVVM.ViewModels" + xmlns:view="clr-namespace:BeWoLauncher.MVVM.View" + StartupUri="View/WindowImp/LauncherWindow.xaml" Exit="Application_Exit"> - + - + + + + diff --git a/BeWoLauncher/LauncherApp.xaml.cs b/BeWoLauncher/LauncherApp.xaml.cs index a2eae9b56..d246f971a 100644 --- a/BeWoLauncher/LauncherApp.xaml.cs +++ b/BeWoLauncher/LauncherApp.xaml.cs @@ -1,8 +1,8 @@ using BeWoLauncher.Components; using BeWoLauncher.Logic; +using BeWoLauncher.Logic.Controller; using BeWoLauncher.ServiceProxy; -using BeWoLauncher.Utils; -using BeWoLauncher.Utils.Update; +using BeWoLauncher.Store; using BeWoLauncher.WindowImp; using BS.SharedLauncher; using BS.SharedLauncher.Information; @@ -34,9 +34,16 @@ namespace BeWoLauncher /// public partial class LauncherApp : Application { + private readonly NavigationStore _navigationStore; + public static string ShortVersion => "3"; public static string Version => "Version 3.0"; + public LauncherApp() + { + _navigationStore = new NavigationStore(); + } + protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); diff --git a/BeWoLauncher/ConnectionProfile.cs b/BeWoLauncher/Logic/ConnectionProfile.cs similarity index 97% rename from BeWoLauncher/ConnectionProfile.cs rename to BeWoLauncher/Logic/ConnectionProfile.cs index b0074e8c2..22f134da6 100644 --- a/BeWoLauncher/ConnectionProfile.cs +++ b/BeWoLauncher/Logic/ConnectionProfile.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace BeWoLauncher +namespace BeWoLauncher.Logic { public class ConnectionProfile { diff --git a/BeWoLauncher/Logic/Controller/DownloadController.cs b/BeWoLauncher/Logic/Controller/DownloadController.cs new file mode 100644 index 000000000..7bfd21d98 --- /dev/null +++ b/BeWoLauncher/Logic/Controller/DownloadController.cs @@ -0,0 +1,37 @@ +using BeWoLauncher.Utils.Download; +using BS.SharedLauncher.Update; +using BS.SharedLauncher.Utils; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeWoLauncher.Logic.Controller +{ + public static class DownloadController + { + public static DownloadManager Manager { get; set; } + + public static long FreeSpace { get; set; } + public static long NeededSpace => Manager.ResponseInfo.DownloadSize; + + public static void Start() + { + Manager = new DownloadManager(); + } + + public static string UpdateDiskSpace(string path) + { + FileInfo f = new FileInfo(path); + string drive = System.IO.Path.GetPathRoot(f.FullName); + FreeSpace = NonspecificTools.GetTotalFreeSpace(drive); + string txt; + if (FreeSpace >= 0) + return NonspecificTools.SizeSuffix((ulong)FreeSpace); + else + return "error"; + } + } +} diff --git a/BeWoLauncher/Logic/ProcessController.cs b/BeWoLauncher/Logic/Controller/ProcessController.cs similarity index 76% rename from BeWoLauncher/Logic/ProcessController.cs rename to BeWoLauncher/Logic/Controller/ProcessController.cs index a521e91db..865b0f714 100644 --- a/BeWoLauncher/Logic/ProcessController.cs +++ b/BeWoLauncher/Logic/Controller/ProcessController.cs @@ -7,12 +7,12 @@ using System.IO; using System.IO.Pipes; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Threading; -using static BeWoLauncher.Logic.ViewController; -namespace BeWoLauncher.Logic +namespace BeWoLauncher.Logic.Controller { public static class ProcessController { @@ -43,10 +43,16 @@ namespace BeWoLauncher.Logic MessageBox.Show("BeWo Prozess läuft bereits"); StartLauncherShutdown(); } + + Process[] processes2 = Process.GetProcessesByName("BeWoPlaner"); + + if (processes2.Length > 0) + { + MessageBox.Show("BeWo Prozess läuft bereits"); + StartLauncherShutdown(); + } } - - - + internal static void StartLauncherShutdown() { Current.Shutdown(); @@ -65,7 +71,13 @@ namespace BeWoLauncher.Logic { PlanerProcess.StartInfo.Arguments = pipeServer.GetClientHandleAsString(); PlanerProcess.StartInfo.UseShellExecute = false; + PlanerProcess.StartInfo.CreateNoWindow = false; + PlanerProcess.StartInfo.RedirectStandardOutput = true; + PlanerProcess.OutputDataReceived += MessageFromPlanerClient; + PlanerProcess.Start(); + + PlanerProcess.BeginOutputReadLine(); pipeServer.DisposeLocalCopyOfClientHandle(); @@ -87,8 +99,6 @@ namespace BeWoLauncher.Logic } } - - ViewController.LauncherWindow.Hide(); } internal static void KillPlanerProcess() { @@ -110,14 +120,24 @@ namespace BeWoLauncher.Logic if (PlanerProcess.ExitCode == 100) { - CurrentLauncher.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)delegate { - ViewController.ShowPage(LauncherPageType.Login); - ViewController.LauncherWindow.Show(); + CurrentLauncher.Dispatcher.BeginInvoke(DispatcherPriority.Render, (Action)delegate { + Thread.Sleep(500); + ViewController.RestartView(); }); return; } CurrentLauncher.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)StartLauncherShutdown); } + + private static void MessageFromPlanerClient(object sender, DataReceivedEventArgs args) + { + var data = args.Data; + + if (data == "GUI geladen") + { + ViewController.LauncherWindow.Dispatcher.BeginInvoke(DispatcherPriority.Render, (Action)(() => ViewController.LauncherWindow.Hide())); + } + } } } diff --git a/BeWoLauncher/Logic/Controller/ViewController.cs b/BeWoLauncher/Logic/Controller/ViewController.cs new file mode 100644 index 000000000..5120f3eb2 --- /dev/null +++ b/BeWoLauncher/Logic/Controller/ViewController.cs @@ -0,0 +1,358 @@ +using BeWoLauncher.Logic.Controller; +using BeWoLauncher.Utils; +using BeWoLauncher.View.Pages; +using BeWoLauncher.WindowImp; +using BS.SharedLauncher.Extensions; +using BS.SharedLauncher.Information; +using BS.SharedLauncher.Logic; +using System; +using System.Collections.Generic; +using System.Configuration; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Controls; +using System.Windows.Threading; + +namespace BeWoLauncher.Logic.Controller +{ + public static class ViewController + { + static bool isBeWoLoginBorderPresent = false; + static BeWoLoginBorder BeWoLoginBorder = null; + static LauncherPageType currentPage; + + private static Exception error; + + public enum LauncherPageType + { + Login, + InstallInfo, + InstallProgress, + InstallFailed, + UpdateInfo, + UpdateProgress, + UpdateFailed, + UninstallInfo, + UninstallProgress, + UninstallFailed, + UninstallSuccessful, + LoadingScreen, + NoPermissionInfo + } + + + + public static LauncherWindow LauncherWindow { get; set; } + + public static Dispatcher Dispatcher => LauncherWindow.Dispatcher; + + public static void StartView() + { + ShowPage(LauncherPageType.Login); + } + public static void RestartView() + { + ShowPage(LauncherPageType.Login); + LauncherWindow.Show(); + LauncherWindow.Activate(); + } + + public static void StartWaiting() => LauncherWindow.StartWaiting(); + public static void EndWaiting() => LauncherWindow.EndWaiting(); + + public static bool CheckForPermissions(string path) + { + return FileController.IsDirectoryWritable(path, false); + } + public static void CheckForNewestVersion() + { + Task.Run(() => + { + DownloadController.Start(); + DownloadController.Manager.StartDownloadInfo(); + + Dispatcher.BeginInvoke(DispatcherPriority.Render, + (Action)delegate + { + if (DownloadController.Manager.ResponseInfo.HasSomethingToDo) + { + if (BeWoLocalConfig.GetFirstInstallationSuccess() && + File.Exists(BeWoPaths.GetPlanerExePath())) + { + ShowPage(LauncherPageType.UpdateInfo); + } + else + { + ShowPage(LauncherPageType.InstallInfo); + } + } + else + { + ShowPage(LauncherPageType.LoadingScreen); + } + + EndWaiting(); + }); + }); + } + + public static void InstallationFailed(Exception exception) + { + error = exception; + ShowPage(LauncherPageType.InstallFailed); + } + public static void UpdateFailed(Exception exception) + { + error = exception; + ShowPage(LauncherPageType.UpdateFailed); + } + public static void UninstallFailed(Exception exception) + { + error = exception; + ShowPage(LauncherPageType.UninstallFailed); + } + + public static void CheckForAutoLogin(object sender, EventArgs e) + { + var autologin = bool.TryParse(ConfigurationManager.AppSettings.Get("AutoLogin"), out bool c) && c; + + if (autologin) + if (sender is LoginPage loginPage) + loginPage.ClickLogin(); + } + public static void LoginSuccessful(object sender, EventArgs e) + { + #region confirm demo +#if DEBUG + //if (ConnectionInformation.Tenant == "demo") + //{ + // var dlg = new ConfirmDemoDialog(); + // dlg.ShowDialog(); + //} +#else + if (ConnectionInformation.Tenant == "demo") + { + var dlg = new ConfirmDemoDialog(); + dlg.ShowDialog(); + } +#endif + #endregion + + BeWoPaths.ActualPlanerLocation = BeWoPaths.GetInstallLocationFromSetting(); + + if (BeWoPaths.ActualPlanerLocation is object && !CheckForPermissions(BeWoPaths.ActualPlanerLocation)) + { + ShowPage(LauncherPageType.NoPermissionInfo); + } + else + { + CheckForNewestVersion(); + } + } + + private static UserControl GetNewPage(LauncherPageType type) + { + switch (type) + { + case LauncherPageType.Login: + var login = new LoginPage(); + + login.Loaded += CheckForAutoLogin; + login.LoginSuccessful += LoginSuccessful; + + return login; + + case LauncherPageType.InstallInfo: + var install = new InstallInfo(); + + install.Accept += (s, e) => + { + if (CheckForPermissions(install.InstallLocation)) + { + BeWoPaths.SetAndSaveInstallLocation(install.InstallLocation); + BeWoLocalConfig.SetFirstInstallationSuccess(true); + ShowPage(LauncherPageType.InstallProgress); + } + else + { + ShowPage(LauncherPageType.NoPermissionInfo); + } + }; + install.Abort += (s, e) => { ShowPage(LauncherPageType.Login); }; + + return GetControlInBorder(install); + + case LauncherPageType.InstallProgress: + var installprogress = new InstallProgressInfo(); + + installprogress.InstallSuccessful += (s, e) => + { + BeWoLocalConfig.SetFirstInstallationSuccess(true); + ProcessController.StartPlanerProcess(); + }; + + return GetControlInBorder(installprogress); + + + case LauncherPageType.InstallFailed: + var installError = new InfoScreen(); + + installError.Title = "Installation fehlgeschlagen!"; + installError.Text = error.ToString(); + + installError.Button1Click += (s, e) => { ShowPage(LauncherPageType.Login); }; + + return GetControlInBorder(installError); + + case LauncherPageType.UpdateInfo: + var update = new UpdateInfo(); + + update.Accept += (s, e) => { ShowPage(LauncherPageType.UpdateProgress); }; + update.Abort += (s, e) => { ShowPage(LauncherPageType.Login); }; + + return GetControlInBorder(update); + + + case LauncherPageType.UpdateProgress: + var updateProgress = new UpdateProgressInfo(); + + updateProgress.UpdateSuccessful += (s, e) => { ShowPage(LauncherPageType.LoadingScreen); }; + + return GetControlInBorder(updateProgress); + + + case LauncherPageType.UpdateFailed: + var updateError = new InfoScreen(); + + updateError.Title = "Update fehlgeschlagen!"; + updateError.Text = error.ToString(); + + updateError.Button1Click += (s, e) => { ShowPage(LauncherPageType.Login); }; + + return GetControlInBorder(updateError); + + + case LauncherPageType.UninstallInfo: + var uninstall = new UninstallInfo(); + + uninstall.Accept += (s, e) => { ShowPage(LauncherPageType.UpdateProgress); }; + uninstall.Abort += (s, e) => { ShowPage(LauncherPageType.Login); }; + + return GetControlInBorder(uninstall); + + + case LauncherPageType.UninstallProgress: + var uninstallProgress = new UninstallProgressInfo(); + + uninstallProgress.UninstallSuccessful += (s, e) => { ShowPage(LauncherPageType.UninstallSuccessful); }; + + return GetControlInBorder(uninstallProgress); + + + case LauncherPageType.UninstallFailed: + var uninstallFailed = new InfoScreen(); + + uninstallFailed.Title = "Deinstallation fehlgeschlagen!"; + uninstallFailed.Text = error.ToString(); + + uninstallFailed.Button1Click += (s, e) => { ShowPage(LauncherPageType.Login); }; + + return GetControlInBorder(uninstallFailed); + + + case LauncherPageType.UninstallSuccessful: + var uninstallSuccessful = new InfoScreen(); + + uninstallSuccessful.Title = "Deinstallation erfolgreich!"; + uninstallSuccessful.Text = "Kehre zum Login zurück..."; + uninstallSuccessful.CollapseCopyButton(); + + + uninstallSuccessful.Button1Click += (s, e) => { ShowPage(LauncherPageType.Login); }; + + return GetControlInBorder(uninstallSuccessful); + + + case LauncherPageType.LoadingScreen: + var loading = new LoadingScreen(); + + loading.Loaded += (s, e) => + { + Task.Run(() => ProcessController.StartPlanerProcess()); + }; + + return GetControlInBorder(loading); + + + case LauncherPageType.NoPermissionInfo: + var noper = new InfoScreen(); + + noper.Title = "Keine Rechte auf Speicherort!"; + noper.Text = "Es liegt eine neue Version. Sie besitzen aber nicht die benötigten Rechte, um diese anzuwenden. Bitte wenden Sie sich an Ihren System-Administrator!"; + + noper.Button1Click += (s, e) => { ShowPage(LauncherPageType.Login); }; + + return GetControlInBorder(noper); + } + + throw new NotImplementedException(); + } + private static UserControl GetControlInBorder(UserControl uc) + { + if (isBeWoLoginBorderPresent) + return uc; + + BeWoLoginBorder = new BeWoLoginBorder(); + isBeWoLoginBorderPresent = true; + + BeWoLoginBorder.contentGrid.Children.Clear(); + BeWoLoginBorder.contentGrid.Children.Add(uc); + + return BeWoLoginBorder; + } + private static void ShowPage(LauncherPageType type) + { + bool before = isBeWoLoginBorderPresent; + + var page = GetNewPage(type); + + if (type == LauncherPageType.Login) + { + isBeWoLoginBorderPresent = false; + BeWoLoginBorder = null; + + Dispatcher.BeginInvoke(DispatcherPriority.Render, + (Action)delegate + { + LauncherWindow.SetMainContent(page); + }); + } + else + { + // Neu Laden + if (!before) + { + Dispatcher.BeginInvoke(DispatcherPriority.Render, + (Action)delegate + { + LauncherWindow.SetMainContent(page); + }); + } + // Bereits geladen + else + { + Dispatcher.BeginInvoke(DispatcherPriority.Render, + (Action)delegate + { + BeWoLoginBorder.contentGrid.Children.Clear(); + BeWoLoginBorder.contentGrid.Children.Add(page); + }); + } + } + + currentPage = type; + } + } +} diff --git a/BeWoLauncher/Converter/BoolNullCheckConverter.cs b/BeWoLauncher/Logic/Converter/BoolNullCheckConverter.cs similarity index 100% rename from BeWoLauncher/Converter/BoolNullCheckConverter.cs rename to BeWoLauncher/Logic/Converter/BoolNullCheckConverter.cs diff --git a/BeWoLauncher/Converter/BoolReverseConverter.cs b/BeWoLauncher/Logic/Converter/BoolReverseConverter.cs similarity index 100% rename from BeWoLauncher/Converter/BoolReverseConverter.cs rename to BeWoLauncher/Logic/Converter/BoolReverseConverter.cs diff --git a/BeWoLauncher/Converter/BoolVisibilityConverter.cs b/BeWoLauncher/Logic/Converter/BoolVisibilityConverter.cs similarity index 100% rename from BeWoLauncher/Converter/BoolVisibilityConverter.cs rename to BeWoLauncher/Logic/Converter/BoolVisibilityConverter.cs diff --git a/BeWoLauncher/Converter/BoolVisibilityHiddenConverter.cs b/BeWoLauncher/Logic/Converter/BoolVisibilityHiddenConverter.cs similarity index 100% rename from BeWoLauncher/Converter/BoolVisibilityHiddenConverter.cs rename to BeWoLauncher/Logic/Converter/BoolVisibilityHiddenConverter.cs diff --git a/BeWoLauncher/Converter/BoolVisibilityMultiConverter.cs b/BeWoLauncher/Logic/Converter/BoolVisibilityMultiConverter.cs similarity index 100% rename from BeWoLauncher/Converter/BoolVisibilityMultiConverter.cs rename to BeWoLauncher/Logic/Converter/BoolVisibilityMultiConverter.cs diff --git a/BeWoLauncher/Converter/CollectionCountToBoolConverter.cs b/BeWoLauncher/Logic/Converter/CollectionCountToBoolConverter.cs similarity index 100% rename from BeWoLauncher/Converter/CollectionCountToBoolConverter.cs rename to BeWoLauncher/Logic/Converter/CollectionCountToBoolConverter.cs diff --git a/BeWoLauncher/Converter/CollectionCountToVisibilityConverter.cs b/BeWoLauncher/Logic/Converter/CollectionCountToVisibilityConverter.cs similarity index 100% rename from BeWoLauncher/Converter/CollectionCountToVisibilityConverter.cs rename to BeWoLauncher/Logic/Converter/CollectionCountToVisibilityConverter.cs diff --git a/BeWoLauncher/Converter/DataContract2StringConverter.cs b/BeWoLauncher/Logic/Converter/DataContract2StringConverter.cs similarity index 100% rename from BeWoLauncher/Converter/DataContract2StringConverter.cs rename to BeWoLauncher/Logic/Converter/DataContract2StringConverter.cs diff --git a/BeWoLauncher/Converter/Date2CalendarWeekStringConverter.cs b/BeWoLauncher/Logic/Converter/Date2CalendarWeekStringConverter.cs similarity index 100% rename from BeWoLauncher/Converter/Date2CalendarWeekStringConverter.cs rename to BeWoLauncher/Logic/Converter/Date2CalendarWeekStringConverter.cs diff --git a/BeWoLauncher/Converter/DateConverter.cs b/BeWoLauncher/Logic/Converter/DateConverter.cs similarity index 100% rename from BeWoLauncher/Converter/DateConverter.cs rename to BeWoLauncher/Logic/Converter/DateConverter.cs diff --git a/BeWoLauncher/Converter/DateNullValueToEmptyStringConverter.cs b/BeWoLauncher/Logic/Converter/DateNullValueToEmptyStringConverter.cs similarity index 100% rename from BeWoLauncher/Converter/DateNullValueToEmptyStringConverter.cs rename to BeWoLauncher/Logic/Converter/DateNullValueToEmptyStringConverter.cs diff --git a/BeWoLauncher/Converter/DecimalConverter.cs b/BeWoLauncher/Logic/Converter/DecimalConverter.cs similarity index 100% rename from BeWoLauncher/Converter/DecimalConverter.cs rename to BeWoLauncher/Logic/Converter/DecimalConverter.cs diff --git a/BeWoLauncher/Converter/EnumToDescriptionConverter.cs b/BeWoLauncher/Logic/Converter/EnumToDescriptionConverter.cs similarity index 100% rename from BeWoLauncher/Converter/EnumToDescriptionConverter.cs rename to BeWoLauncher/Logic/Converter/EnumToDescriptionConverter.cs diff --git a/BeWoLauncher/Converter/IListT2DataTableConverter.cs b/BeWoLauncher/Logic/Converter/IListT2DataTableConverter.cs similarity index 100% rename from BeWoLauncher/Converter/IListT2DataTableConverter.cs rename to BeWoLauncher/Logic/Converter/IListT2DataTableConverter.cs diff --git a/BeWoLauncher/Converter/IndexBoolConverter.cs b/BeWoLauncher/Logic/Converter/IndexBoolConverter.cs similarity index 100% rename from BeWoLauncher/Converter/IndexBoolConverter.cs rename to BeWoLauncher/Logic/Converter/IndexBoolConverter.cs diff --git a/BeWoLauncher/Converter/Int2DecimalConverter.cs b/BeWoLauncher/Logic/Converter/Int2DecimalConverter.cs similarity index 100% rename from BeWoLauncher/Converter/Int2DecimalConverter.cs rename to BeWoLauncher/Logic/Converter/Int2DecimalConverter.cs diff --git a/BeWoLauncher/Converter/NullableBoolToBoolConverter.cs b/BeWoLauncher/Logic/Converter/NullableBoolToBoolConverter.cs similarity index 100% rename from BeWoLauncher/Converter/NullableBoolToBoolConverter.cs rename to BeWoLauncher/Logic/Converter/NullableBoolToBoolConverter.cs diff --git a/BeWoLauncher/Converter/ObjectBoolConverter.cs b/BeWoLauncher/Logic/Converter/ObjectBoolConverter.cs similarity index 100% rename from BeWoLauncher/Converter/ObjectBoolConverter.cs rename to BeWoLauncher/Logic/Converter/ObjectBoolConverter.cs diff --git a/BeWoLauncher/Converter/ObjectVisibilityConverter.cs b/BeWoLauncher/Logic/Converter/ObjectVisibilityConverter.cs similarity index 100% rename from BeWoLauncher/Converter/ObjectVisibilityConverter.cs rename to BeWoLauncher/Logic/Converter/ObjectVisibilityConverter.cs diff --git a/BeWoLauncher/Converter/OneWayToSourceSwitch.cs b/BeWoLauncher/Logic/Converter/OneWayToSourceSwitch.cs similarity index 100% rename from BeWoLauncher/Converter/OneWayToSourceSwitch.cs rename to BeWoLauncher/Logic/Converter/OneWayToSourceSwitch.cs diff --git a/BeWoLauncher/Converter/ReverseValueEqualsParamVisibilityConverter.cs b/BeWoLauncher/Logic/Converter/ReverseValueEqualsParamVisibilityConverter.cs similarity index 100% rename from BeWoLauncher/Converter/ReverseValueEqualsParamVisibilityConverter.cs rename to BeWoLauncher/Logic/Converter/ReverseValueEqualsParamVisibilityConverter.cs diff --git a/BeWoLauncher/Converter/StringBrushConverter.cs b/BeWoLauncher/Logic/Converter/StringBrushConverter.cs similarity index 100% rename from BeWoLauncher/Converter/StringBrushConverter.cs rename to BeWoLauncher/Logic/Converter/StringBrushConverter.cs diff --git a/BeWoLauncher/Converter/StringFormatConverter.cs b/BeWoLauncher/Logic/Converter/StringFormatConverter.cs similarity index 100% rename from BeWoLauncher/Converter/StringFormatConverter.cs rename to BeWoLauncher/Logic/Converter/StringFormatConverter.cs diff --git a/BeWoLauncher/Converter/StringFormatMulitConverter.cs b/BeWoLauncher/Logic/Converter/StringFormatMulitConverter.cs similarity index 100% rename from BeWoLauncher/Converter/StringFormatMulitConverter.cs rename to BeWoLauncher/Logic/Converter/StringFormatMulitConverter.cs diff --git a/BeWoLauncher/Converter/StringLengthVisibilityConverter.cs b/BeWoLauncher/Logic/Converter/StringLengthVisibilityConverter.cs similarity index 100% rename from BeWoLauncher/Converter/StringLengthVisibilityConverter.cs rename to BeWoLauncher/Logic/Converter/StringLengthVisibilityConverter.cs diff --git a/BeWoLauncher/Converter/StringLengthVisibilityMultiConverter.cs b/BeWoLauncher/Logic/Converter/StringLengthVisibilityMultiConverter.cs similarity index 100% rename from BeWoLauncher/Converter/StringLengthVisibilityMultiConverter.cs rename to BeWoLauncher/Logic/Converter/StringLengthVisibilityMultiConverter.cs diff --git a/BeWoLauncher/Converter/ValueEqualsParamVisibilityConverter.cs b/BeWoLauncher/Logic/Converter/ValueEqualsParamVisibilityConverter.cs similarity index 100% rename from BeWoLauncher/Converter/ValueEqualsParamVisibilityConverter.cs rename to BeWoLauncher/Logic/Converter/ValueEqualsParamVisibilityConverter.cs diff --git a/BeWoLauncher/Multitenancy/MultitenancyEndpointBehavior.cs b/BeWoLauncher/Logic/Multitenancy/MultitenancyEndpointBehavior.cs similarity index 100% rename from BeWoLauncher/Multitenancy/MultitenancyEndpointBehavior.cs rename to BeWoLauncher/Logic/Multitenancy/MultitenancyEndpointBehavior.cs diff --git a/BeWoLauncher/Multitenancy/MultitenancyHeader.cs b/BeWoLauncher/Logic/Multitenancy/MultitenancyHeader.cs similarity index 100% rename from BeWoLauncher/Multitenancy/MultitenancyHeader.cs rename to BeWoLauncher/Logic/Multitenancy/MultitenancyHeader.cs diff --git a/BeWoLauncher/Multitenancy/MultitenancyInterceptor.cs b/BeWoLauncher/Logic/Multitenancy/MultitenancyInterceptor.cs similarity index 100% rename from BeWoLauncher/Multitenancy/MultitenancyInterceptor.cs rename to BeWoLauncher/Logic/Multitenancy/MultitenancyInterceptor.cs diff --git a/BeWoLauncher/Security/LauncherSecurityHeader.cs b/BeWoLauncher/Logic/Security/LauncherSecurityHeader.cs similarity index 100% rename from BeWoLauncher/Security/LauncherSecurityHeader.cs rename to BeWoLauncher/Logic/Security/LauncherSecurityHeader.cs diff --git a/BeWoLauncher/Security/LauncherSecurityHeaderEndpointBehavior.cs b/BeWoLauncher/Logic/Security/LauncherSecurityHeaderEndpointBehavior.cs similarity index 100% rename from BeWoLauncher/Security/LauncherSecurityHeaderEndpointBehavior.cs rename to BeWoLauncher/Logic/Security/LauncherSecurityHeaderEndpointBehavior.cs diff --git a/BeWoLauncher/Security/LauncherSecurityHeaderInterceptor.cs b/BeWoLauncher/Logic/Security/LauncherSecurityHeaderInterceptor.cs similarity index 100% rename from BeWoLauncher/Security/LauncherSecurityHeaderInterceptor.cs rename to BeWoLauncher/Logic/Security/LauncherSecurityHeaderInterceptor.cs diff --git a/BeWoLauncher/ServiceProxy/LauncherGenerated.cs b/BeWoLauncher/Logic/ServiceProxy/LauncherGenerated.cs similarity index 95% rename from BeWoLauncher/ServiceProxy/LauncherGenerated.cs rename to BeWoLauncher/Logic/ServiceProxy/LauncherGenerated.cs index 07bcb7e73..d7c9e0f13 100644 --- a/BeWoLauncher/ServiceProxy/LauncherGenerated.cs +++ b/BeWoLauncher/Logic/ServiceProxy/LauncherGenerated.cs @@ -332,6 +332,10 @@ namespace BeWoLauncher.ServiceProxy [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IDownloadBeWoService/Download2", ReplyAction="http://tempuri.org/IDownloadBeWoService/Download2Response")] [System.ServiceModel.FaultContractAttribute(typeof(BeWoLauncher.ServiceProxy.BeWoFault), Action="http://tempuri.org/IDownloadBeWoService/Download2BeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] BS.SharedLauncher.DataContract.DownloadPlanerResponseDC Download2(BS.SharedLauncher.DataContract.DownloadPlanerRequestDC request); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IDownloadBeWoService/DownloadInfo", ReplyAction="http://tempuri.org/IDownloadBeWoService/DownloadInfoResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWoLauncher.ServiceProxy.BeWoFault), Action="http://tempuri.org/IDownloadBeWoService/DownloadInfoBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + BS.SharedLauncher.DataContract.DownloadPlanerResponseInfoDC DownloadInfo(BS.SharedLauncher.DataContract.DownloadPlanerRequestDC request); } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] @@ -372,5 +376,10 @@ namespace BeWoLauncher.ServiceProxy { return base.Channel.Download2(request); } + + public BS.SharedLauncher.DataContract.DownloadPlanerResponseInfoDC DownloadInfo(BS.SharedLauncher.DataContract.DownloadPlanerRequestDC request) + { + return base.Channel.DownloadInfo(request); + } } } diff --git a/BeWoLauncher/ServiceProxy/LauncherServiceFacade.cs b/BeWoLauncher/Logic/ServiceProxy/LauncherServiceFacade.cs similarity index 100% rename from BeWoLauncher/ServiceProxy/LauncherServiceFacade.cs rename to BeWoLauncher/Logic/ServiceProxy/LauncherServiceFacade.cs diff --git a/BeWoLauncher/Utils/BeWoHelper.cs b/BeWoLauncher/Logic/Utils/BeWoHelper.cs similarity index 86% rename from BeWoLauncher/Utils/BeWoHelper.cs rename to BeWoLauncher/Logic/Utils/BeWoHelper.cs index c6ab11472..2e9263238 100644 --- a/BeWoLauncher/Utils/BeWoHelper.cs +++ b/BeWoLauncher/Logic/Utils/BeWoHelper.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Configuration; using System.Linq; +using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; diff --git a/BeWoLauncher/Logic/Utils/BeWoLocalConfig.cs b/BeWoLauncher/Logic/Utils/BeWoLocalConfig.cs new file mode 100644 index 000000000..2683efed2 --- /dev/null +++ b/BeWoLauncher/Logic/Utils/BeWoLocalConfig.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeWoLauncher.Utils +{ + public static class BeWoLocalConfig + { + public static string GetInstallLocation() + { + return Properties.Settings.Default.InstallLocation; + } + + public static void SetInstallLocation(string path) + { + Properties.Settings.Default.InstallLocation = path; + Properties.Settings.Default.Save(); + } + + public static bool GetFirstInstallationSuccess() + { + return Properties.Settings.Default.FirstInstallationSuccess; + } + + public static void SetFirstInstallationSuccess(bool b) + { + Properties.Settings.Default.FirstInstallationSuccess = b; + Properties.Settings.Default.Save(); + } + } +} diff --git a/BeWoLauncher/Utils/BeWoPaths.cs b/BeWoLauncher/Logic/Utils/BeWoPaths.cs similarity index 69% rename from BeWoLauncher/Utils/BeWoPaths.cs rename to BeWoLauncher/Logic/Utils/BeWoPaths.cs index 5c89103bf..3d6df0a96 100644 --- a/BeWoLauncher/Utils/BeWoPaths.cs +++ b/BeWoLauncher/Logic/Utils/BeWoPaths.cs @@ -17,7 +17,7 @@ namespace BeWoLauncher.Utils //private static readonly string versionXml = "bewo.version"; public static string LoginSelectionPlanerLocation { get; set; } - public static string ActualPlanerLocation { get; private set; } + public static string ActualPlanerLocation { get; set; } ///

/// Holt den Install Ort aus den Properties Settings. @@ -26,41 +26,52 @@ namespace BeWoLauncher.Utils /// public static string GetInstallLocationFromSettingOrDefault() { - var installLocation = Properties.Settings.Default.InstallLocation; + var installLocation = GetInstallLocationFromSetting(); if (string.IsNullOrWhiteSpace(installLocation)) { - installLocation = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "data"); + installLocation = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, BeWoPathFileConfig.SubDirectory); } return installLocation; } - public static void CheckPathForInstallation(string newLocation) + + public static string GetInstallLocationFromSetting() + { + return BeWoLocalConfig.GetInstallLocation(); + } + + /// + /// + /// + /// + /// Gibt true aus, wenn der Path sich verändert hat. + public static bool ChangePath(string newLocation) { var info = new DirectoryInfo(newLocation); if (LoginSelectionPlanerLocation == newLocation) { - return; + return false; } - if (info.GetDirectories().Any() || info.GetFiles().Any()) - { - MessageBox.Show($"Ordner muss leer sein! Es sind {info.GetDirectories().Count()} Ordner und {info.GetFiles().Count()} Datei(en) enthalten"); - return; - } + //if (newLocation.Exists() && (info.GetDirectories().Any() || info.GetFiles().Any())) + //{ + // MessageBox.Show($"Ordner muss leer sein! Es sind {info.GetDirectories().Count()} Ordner und {info.GetFiles().Count()} Datei(en) enthalten"); + // return false; + //} // Annahme: Ordner ist leer und neuer Ort - LoginSelectionPlanerLocation.ClearFolder(); - LoginSelectionPlanerLocation = newLocation; + + return true; } + public static void SetAndSaveInstallLocation(string path) { ActualPlanerLocation = path; - Properties.Settings.Default.InstallLocation = ActualPlanerLocation; - Properties.Settings.Default.Save(); + BeWoLocalConfig.SetInstallLocation(path); } public static string GetDownloadPath() diff --git a/BeWoLauncher/Logic/Utils/Download/DownloadManager.cs b/BeWoLauncher/Logic/Utils/Download/DownloadManager.cs new file mode 100644 index 000000000..9e4ad20b1 --- /dev/null +++ b/BeWoLauncher/Logic/Utils/Download/DownloadManager.cs @@ -0,0 +1,155 @@ +using BeWoLauncher.ServiceProxy; +using BS.SharedLauncher; +using BS.SharedLauncher.DataContract; +using BS.SharedLauncher.Exceptions; +using BS.SharedLauncher.Extensions; +using BS.SharedLauncher.Information; +using BS.SharedLauncher.Logic; +using BS.SharedLauncher.Update; +using BS.SharedLauncher.Utils; +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using System.Xml.Serialization; + +namespace BeWoLauncher.Utils.Download +{ + public class DownloadManager + { + public DownloadPlanerRequestDC Request { get; set; } + public DownloadPlanerResponseInfoDC ResponseInfo { get; set; } + public DownloadPlanerResponseDC Response { get; set; } + public string DownloadZipPath { get; set; } + + public string DownloadFolder => BeWoPaths.GetDownloadPath(); + public string ApplyFolder => BeWoPaths.GetApplyPath(); + + public DownloadManager() + { + Request = null; + ResponseInfo = null; + Response = null; + } + + public void StartDownloadInfo() + { + CreateDownloadRequest(); + + GetDownloadResponseInfo(); + } + + private void CreateDownloadRequest() + { + Request = new DownloadPlanerRequestDC(); + + if (Request.PlanerRootFolderExists = BeWoPaths.ActualPlanerLocation.Exists()) + { + if (Request.DownloadFolderExists = DownloadFolder.Exists()) + if (!(Request.DownloadFolderIsEmpty = DownloadFolder.IsFolderEmpty())) + Request.DownloadedPackages = FileController.LoadInfos(DownloadFolder); + + if (Request.ApplyFolderExists = ApplyFolder.Exists()) + if (!(Request.ApplyFolderIsEmpty = ApplyFolder.IsFolderEmpty())) + { + var files = FileController.GetPlanerFiles(ApplyFolder); + + if (files is object) + files.ForEach(file => file.LoadHash()); + + FileController.TryGetPackageInfo(ApplyFolder, out var package); + + if (package == null) + package = new PlanerPackageInfoDC(); + + package.Files = files.ToPlanerFileInfoDCList(); + + Request.ApplyPackage = package; + } + } + } + + private void GetDownloadResponse() + { + Response = LauncherServiceFacade.DoDownloadBeWoServiceSync(x => x.Download2(Request)); + } + + private void GetDownloadResponseInfo() + { + ResponseInfo = LauncherServiceFacade.DoDownloadBeWoServiceSync(x => x.DownloadInfo(Request)); + } + + public void StartDownload(bool skipLock) + { + GetDownloadResponse(); + + if (!Response.HasToDo()) + { + // Macht das Sinn? + // Ne, wahrsch. Fehler + return; + } + + if (Response.HasToDoNewZip()) + { + DownloadFolder.CreateFolder(); + + DownloadFolder.Lock(skipLock); + + DownloadZipPath = FileController.GetNewZipPath(BeWoPaths.GetDownloadPath()); + + FileController.SaveDZip(DownloadZipPath, Response.NewZipData); + FileController.SaveInfo(DownloadZipPath, Response.NewZipInfo); + FileController.SaveInfo(BeWoPaths.GetDownloadPath(), Response.LatestApplicationInfo); + + Response.NewZipData = null; + + DownloadFolder.Unlock(); + } + } + + public void StartApply(bool skiplock, Action apply) + { + ApplyFolder.CreateFolder(); + + ApplyFolder.Lock(skiplock); + + if (Response.HasToDoDownload2Keep()) + { + FileController.ApplyDZip(Response.DownloadFilesToKeep, ApplyFolder, apply); + } + + if (Response.HasToDoNewZip()) + { + FileController.ApplyDZip(DownloadZipPath, ApplyFolder, apply); + } + + if (Response.HasToRemoveFiles) + { + apply(3, null); + + Thread.Sleep(500); + + FileController.RemoveUnsuedFiles(Response.LatestApplicationInfo, ApplyFolder, apply); + } + + DownloadFolder.ClearFolder(); + + ApplyFolder.Unlock(); + } + + public void StartUninstall(Action apply) + { + apply(3, null); + + Thread.Sleep(500); + + FileController.RemoveFiles(BeWoPaths.ActualPlanerLocation); + } + } +} diff --git a/BeWoLauncher/LauncherUtils.cs b/BeWoLauncher/Logic/Utils/LauncherUtils.cs similarity index 100% rename from BeWoLauncher/LauncherUtils.cs rename to BeWoLauncher/Logic/Utils/LauncherUtils.cs diff --git a/BeWoLauncher/Logic/ViewController.cs b/BeWoLauncher/Logic/ViewController.cs deleted file mode 100644 index 9b57d7b88..000000000 --- a/BeWoLauncher/Logic/ViewController.cs +++ /dev/null @@ -1,188 +0,0 @@ -using BeWoLauncher.PageImp; -using BeWoLauncher.Utils; -using BeWoLauncher.WindowImp; -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Controls; -using System.Windows.Threading; - -namespace BeWoLauncher.Logic -{ - public static class ViewController - { - static bool isMainPagePresent = false; - static MainPage MainPage = null; - - public enum LauncherPageType - { - Login, - Update, - UpdateInfo1, - UpdateInfo2, - UpdateInfo3, - } - - public static LauncherWindow LauncherWindow { get; set; } - - public static Dispatcher Dispatcher => LauncherWindow.Dispatcher; - - public static void StartView() - { - //ShowPage(LauncherPageType.Login); - ShowPage(LauncherPageType.UpdateInfo1); - } - - public static void LoginLoaded(object sender, EventArgs e) - { - var autologin = bool.TryParse(ConfigurationManager.AppSettings.Get("AutoLogin"), out bool c) && c; - - if (autologin) - if (sender is LoginPage loginPage) - loginPage.ClickLogin(); - } - public static void LoginSuccessful(object sender, EventArgs e) - { - #region confirm demo -#if DEBUG - //if (ConnectionInformation.Tenant == "demo") - //{ - // var dlg = new ConfirmDemoDialog(); - // dlg.ShowDialog(); - //} -#else - if (ConnectionInformation.Tenant == "demo") - { - var dlg = new ConfirmDemoDialog(); - dlg.ShowDialog(); - } -#endif - #endregion - - BeWoPaths.SetAndSaveInstallLocation(((LoginPage)sender).InstallLocation); - - ShowPage(LauncherPageType.Update); - } - public static void UpdateSuccessful(object sender, EventArgs e) - { - ProcessController.StartPlanerProcess(); - } - public static void UpdateFailed(object sender, EventArgs e) - { - throw new NotImplementedException(); - } - - public static UserControl GetNewPage(LauncherPageType type) - { - if (type == LauncherPageType.Login) - { - var login = new LoginPage(); - - login.Loaded += LoginLoaded; - login.LoginSuccessful += LoginSuccessful; - - return login; - } - else if (type == LauncherPageType.Update) - { - bool showDelay = bool.TryParse(ConfigurationManager.AppSettings.Get("ShowUpdateDelay"), out bool b) && b; - bool forceUpdate = bool.TryParse(ConfigurationManager.AppSettings.Get("ForceUpdate"), out bool c) && c; - - var update = new UpdatePage(showDelay, forceUpdate); - - update.UpdateSuccessful += UpdateSuccessful; - update.UpdateFailed += UpdateFailed; - - return update; - } - else if (type == LauncherPageType.UpdateInfo1) - { var update = new UpdateInfo1(); - - return GetMainPage(update); - } - else if (type == LauncherPageType.UpdateInfo2) - { - var update = new UpdateInfo2(); - - return GetMainPage(update); - } - else if (type == LauncherPageType.UpdateInfo3) - { - var update = new UpdateInfo3(); - - return GetMainPage(update); - } - - throw new NotImplementedException(); - } - - public static UserControl GetMainPage(UserControl uc) - { - if (isMainPagePresent) - return uc; - - MainPage = new MainPage(); - isMainPagePresent = true; - - MainPage.contentGrid.Children.Clear(); - MainPage.contentGrid.Children.Add(uc); - - return MainPage; - } - - public static void ShowPage(LauncherPageType type) - { - bool before = isMainPagePresent; - - var page = GetNewPage(type); - - if(type == LauncherPageType.Login) - { - isMainPagePresent = false; - MainPage = null; - - Dispatcher.BeginInvoke(DispatcherPriority.Normal, - (Action)delegate - { - LauncherWindow.rootGrid.Children.Clear(); - LauncherWindow.rootGrid.Children.Add(page); - }); - } - else if(type == LauncherPageType.Update) - { - - Dispatcher.BeginInvoke(DispatcherPriority.Normal, - (Action)delegate - { - //LauncherWindow.MainPage.contentGrid.Children.Add(page); - }); - } - else - { - // Neu Laden - if(!before) - { - Dispatcher.BeginInvoke(DispatcherPriority.Normal, - (Action)delegate - { - LauncherWindow.rootGrid.Children.Clear(); - LauncherWindow.rootGrid.Children.Add(page); - }); - } - // Bereits geladen - else - { - Dispatcher.BeginInvoke(DispatcherPriority.Normal, - (Action)delegate - { - MainPage.contentGrid.Children.Clear(); - MainPage.contentGrid.Children.Add(page); - }); - } - } - } - } -} diff --git a/BeWoLauncher/PageImp/02 UpdatePage.xaml b/BeWoLauncher/PageImp/02 UpdatePage.xaml deleted file mode 100644 index 7fc91dd2e..000000000 --- a/BeWoLauncher/PageImp/02 UpdatePage.xaml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BeWoLauncher/PageImp/02 UpdatePage.xaml.cs b/BeWoLauncher/PageImp/02 UpdatePage.xaml.cs deleted file mode 100644 index 819fb46ca..000000000 --- a/BeWoLauncher/PageImp/02 UpdatePage.xaml.cs +++ /dev/null @@ -1,147 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Deployment.Application; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; -using BeWoLauncher.ServiceProxy; -using BeWoLauncher.Utils; -using BeWoLauncher.Utils.Update; -using BS.SharedLauncher; -using BS.SharedLauncher.DataContract; -using BS.SharedLauncher.Information; -using Path = System.IO.Path; - -namespace BeWoLauncher.PageImp -{ - /// - /// Interaktionslogik für UpdateView.xaml - /// - public partial class UpdatePage : UserControl - { - public event EventHandler UpdateSuccessful; - public event EventHandler UpdateFailed; - - private bool _ShowDelay; - private bool _ForceUpdate; - - public UpdatePage(bool showDelay, bool forceUpdate) - { - InitializeComponent(); - - _ShowDelay = showDelay; - _ForceUpdate = forceUpdate; - - //UpdateFileManager.ApplyFileEventHandler += ApplyFile; - //UpdateFileManager.DownloadFileEventHandler += DownloadFile; - } - - public string Message - { - get { return lblMessage.Content as string; } - set { lblMessage.Content = value; } - } - - public string SubMessage - { - get { return lblSubmessage.Content as string; } - set { lblSubmessage.Content = value; } - } - - private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e) - { - System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo((sender as Hyperlink).NavigateUri.ToString())); - } - - private async void startUpdateAsync() - { - //try - //{ - // Message = "Update wird vorbereitet..."; - // SubMessage = ""; - // UpdatePathManager.GetDownloadDirInfo().ClearFolder(); - // if (_ForceUpdate) - // UpdatePathManager.GetApplyDirInfo().ClearFolder(); - // await showDelay(5000); - - // Message = "Update wird heruntergeladen..."; - // SubMessage = ""; - // await showDelay(1000); - - // //UpdateFileManager.DownloadUpdateSync(); - - // Message = "Update wird installiert..."; - // await showDelay(1000); - - // //await UpdateFileManager.ApplyUpdate(); - - // Message = "Update wurde installiert!"; - // SubMessage = "Starte BeWoPlaner..."; - // await showDelay(1000); - - // //UpdateFileManager.UpdateData = null; - // UpdateSuccessful(this, new EventArgs()); - - // UpdatePathManager.GetDownloadDirInfo().ClearFolder(); - // //UpdateFinished(this, null); - //} - //catch (Exception e) - //{ - // Message = "Update fehlgeschlagen!"; - // SubMessage = string.Empty; - - // throw e; - //} - } - - private async void startUpdateAsync2() - { - var skipLock = bool.TryParse(ConfigurationManager.AppSettings.Get("SkipLock"), out bool c) && c; - - - var manager = new UpdateFileManager(); - - manager.StartUpdate(skipLock); - - try - { - - } - catch (Exception e) - { - Message = "Update fehlgeschlagen!"; - SubMessage = string.Empty; - - throw e; - } - } - - private async Task showDelay(int millisec) - { - if (_ShowDelay) - await Task.Delay(millisec); - } - - private void UserControl_Loaded(object sender, RoutedEventArgs e) - { - double top = (this.ActualHeight - 400) / 3; - this.gridUpdate.Margin = new Thickness(0, top, 0, 0); - - //startUpdate(); - Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, (Action)startUpdateAsync2); - } - } -} diff --git a/BeWoLauncher/PageImp/UpdateInfo1.xaml b/BeWoLauncher/PageImp/UpdateInfo1.xaml deleted file mode 100644 index 9c87f345f..000000000 --- a/BeWoLauncher/PageImp/UpdateInfo1.xaml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BeWoLauncher/PageImp/UpdateInfo1.xaml.cs b/BeWoLauncher/PageImp/UpdateInfo1.xaml.cs deleted file mode 100644 index d5b75ea64..000000000 --- a/BeWoLauncher/PageImp/UpdateInfo1.xaml.cs +++ /dev/null @@ -1,59 +0,0 @@ -using BeWoLauncher.Utils; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; - -namespace BeWoLauncher.PageImp -{ - /// - /// Interaktionslogik für UpdateInfo1.xaml - /// - public partial class UpdateInfo1 : UserControl - { - public UpdateInfo1() - { - InitializeComponent(); - } - - public string InstallLocation - { - get - { - return BeWoPaths.LoginSelectionPlanerLocation; - } - set - { - txtLoc.Text = value; - BeWoPaths.LoginSelectionPlanerLocation = value; - } - } - - private void button_installLoc_Click(object sender, RoutedEventArgs rea) - { - // https://stackoverflow.com/questions/11624298/how-to-use-openfiledialog-to-select-a-folder - using (var fbd = new System.Windows.Forms.FolderBrowserDialog()) - { - fbd.SelectedPath = InstallLocation; - - System.Windows.Forms.DialogResult result = fbd.ShowDialog(); - - if (result == System.Windows.Forms.DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath)) - { - InstallLocation = fbd.SelectedPath; - //BeWoPaths.ChangeLoginSelectedLocation(fbd.SelectedPath); - } - } - } - } -} diff --git a/BeWoLauncher/Properties/Settings.Designer.cs b/BeWoLauncher/Properties/Settings.Designer.cs index 0fef9d9e3..3dbb00994 100644 --- a/BeWoLauncher/Properties/Settings.Designer.cs +++ b/BeWoLauncher/Properties/Settings.Designer.cs @@ -34,5 +34,17 @@ namespace BeWoLauncher.Properties { this["InstallLocation"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool FirstInstallationSuccess { + get { + return ((bool)(this["FirstInstallationSuccess"])); + } + set { + this["FirstInstallationSuccess"] = value; + } + } } } diff --git a/BeWoLauncher/Properties/Settings.settings b/BeWoLauncher/Properties/Settings.settings index 94532871f..f4fc75103 100644 --- a/BeWoLauncher/Properties/Settings.settings +++ b/BeWoLauncher/Properties/Settings.settings @@ -5,5 +5,8 @@ + + False + \ No newline at end of file diff --git a/BeWoLauncher/OrangeBlack.xaml b/BeWoLauncher/Styles/OrangeBlack.xaml similarity index 98% rename from BeWoLauncher/OrangeBlack.xaml rename to BeWoLauncher/Styles/OrangeBlack.xaml index eba9d6d01..5bbf9aa49 100644 --- a/BeWoLauncher/OrangeBlack.xaml +++ b/BeWoLauncher/Styles/OrangeBlack.xaml @@ -1738,7 +1738,7 @@ - + @@ -1887,7 +1887,7 @@ - + @@ -3960,7 +3960,64 @@ - +