From 1f50ab74c99a3a346e5563cc819bb24a12207823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damian=20B=C3=BCchel?= Date: Wed, 24 Jul 2024 20:31:08 +0200 Subject: [PATCH] SEBWIN-902: Implemented fix for GHSA-9cr5-q96r-887f and refactored various integrity aspects. --- .../ClientControllerTests.cs | 7 +- SafeExamBrowser.Client/ClientController.cs | 101 +- SafeExamBrowser.Client/CompositionRoot.cs | 3 +- .../DataMapping/SecurityDataMapper.cs | 11 + .../ConfigurationData/DataValues.cs | 2 + .../ConfigurationData/Keys.cs | 1 + SafeExamBrowser.I18n.Contracts/TextKey.cs | 3 + SafeExamBrowser.I18n/Data/de.xml | 9 + SafeExamBrowser.I18n/Data/en.xml | 9 + SafeExamBrowser.I18n/Data/es.xml | 9 + SafeExamBrowser.I18n/Data/et.xml | 9 + SafeExamBrowser.I18n/Data/fr.xml | 9 + SafeExamBrowser.I18n/Data/id.xml | 9 + SafeExamBrowser.I18n/Data/it.xml | 9 + SafeExamBrowser.I18n/Data/nl.xml | 9 + SafeExamBrowser.I18n/Data/ru.xml | 9 + SafeExamBrowser.I18n/Data/zh.xml | 11 +- ...afeExamBrowser.Monitoring.Contracts.csproj | 3 + .../System/Events/SentinelEventArgs.cs | 21 + .../System/Events/SentinelEventHandler.cs | 15 + .../System/ISystemSentinel.cs | 78 ++ .../SafeExamBrowser.Monitoring.csproj | 4 + .../System/Components/Cursors.cs | 152 +++ .../System/Components/EaseOfAccess.cs | 95 ++ .../System/Components/StickyKeys.cs | 175 ++++ .../System/SystemSentinel.cs | 85 ++ SafeExamBrowser.Runtime/CompositionRoot.cs | 4 +- .../Operations/SessionIntegrityOperation.cs | 136 +-- .../Security/SecuritySettings.cs | 5 + .../INativeMethods.cs | 20 + .../IStickyKeysState.cs | 31 + ...afeExamBrowser.WindowsApi.Contracts.csproj | 1 + SafeExamBrowser.WindowsApi/Constants/SPI.cs | 13 + .../Constants/StickyKeysFlags.cs | 64 ++ SafeExamBrowser.WindowsApi/NativeMethods.cs | 85 +- .../SafeExamBrowser.WindowsApi.csproj | 3 + .../Types/STICKYKEYS.cs | 23 + .../Types/StickyKeysState.cs | 22 + SafeExamBrowser.WindowsApi/User32.cs | 3 + SebWindowsConfig/SEBSettings.cs | 5 +- .../SebWindowsConfigForm.Designer.cs | 128 +-- SebWindowsConfig/SebWindowsConfigForm.cs | 6 + SebWindowsConfig/SebWindowsConfigForm.resx | 949 +++++++++--------- 43 files changed, 1678 insertions(+), 668 deletions(-) create mode 100644 SafeExamBrowser.Monitoring.Contracts/System/Events/SentinelEventArgs.cs create mode 100644 SafeExamBrowser.Monitoring.Contracts/System/Events/SentinelEventHandler.cs create mode 100644 SafeExamBrowser.Monitoring.Contracts/System/ISystemSentinel.cs create mode 100644 SafeExamBrowser.Monitoring/System/Components/Cursors.cs create mode 100644 SafeExamBrowser.Monitoring/System/Components/EaseOfAccess.cs create mode 100644 SafeExamBrowser.Monitoring/System/Components/StickyKeys.cs create mode 100644 SafeExamBrowser.Monitoring/System/SystemSentinel.cs create mode 100644 SafeExamBrowser.WindowsApi.Contracts/IStickyKeysState.cs create mode 100644 SafeExamBrowser.WindowsApi/Constants/StickyKeysFlags.cs create mode 100644 SafeExamBrowser.WindowsApi/Types/STICKYKEYS.cs create mode 100644 SafeExamBrowser.WindowsApi/Types/StickyKeysState.cs diff --git a/SafeExamBrowser.Client.UnitTests/ClientControllerTests.cs b/SafeExamBrowser.Client.UnitTests/ClientControllerTests.cs index da96385b..f77b33d8 100644 --- a/SafeExamBrowser.Client.UnitTests/ClientControllerTests.cs +++ b/SafeExamBrowser.Client.UnitTests/ClientControllerTests.cs @@ -36,7 +36,6 @@ using SafeExamBrowser.Settings; using SafeExamBrowser.Settings.Monitoring; using SafeExamBrowser.Settings.UserInterface; using SafeExamBrowser.SystemComponents.Contracts.Network; -using SafeExamBrowser.SystemComponents.Contracts.Registry; using SafeExamBrowser.UserInterface.Contracts; using SafeExamBrowser.UserInterface.Contracts.FileSystemDialog; using SafeExamBrowser.UserInterface.Contracts.MessageBox; @@ -67,8 +66,8 @@ namespace SafeExamBrowser.Client.UnitTests private Mock messageBox; private Mock networkAdapter; private Mock operationSequence; - private Mock registry; private Mock runtimeProxy; + private Mock sentinel; private Mock server; private Guid sessionId; private AppSettings settings; @@ -102,8 +101,8 @@ namespace SafeExamBrowser.Client.UnitTests messageBox = new Mock(); networkAdapter = new Mock(); operationSequence = new Mock(); - registry = new Mock(); runtimeProxy = new Mock(); + sentinel = new Mock(); server = new Mock(); sessionId = Guid.NewGuid(); settings = new AppSettings(); @@ -132,11 +131,11 @@ namespace SafeExamBrowser.Client.UnitTests messageBox.Object, networkAdapter.Object, operationSequence.Object, - registry.Object, runtimeProxy.Object, shutdown.Object, splashScreen.Object, systemMonitor.Object, + sentinel.Object, taskbar.Object, text.Object, uiFactory.Object); diff --git a/SafeExamBrowser.Client/ClientController.cs b/SafeExamBrowser.Client/ClientController.cs index 00cf42f9..0e7300ff 100644 --- a/SafeExamBrowser.Client/ClientController.cs +++ b/SafeExamBrowser.Client/ClientController.cs @@ -31,6 +31,7 @@ using SafeExamBrowser.Logging.Contracts; using SafeExamBrowser.Monitoring.Contracts.Applications; using SafeExamBrowser.Monitoring.Contracts.Display; using SafeExamBrowser.Monitoring.Contracts.System; +using SafeExamBrowser.Monitoring.Contracts.System.Events; using SafeExamBrowser.Proctoring.Contracts; using SafeExamBrowser.Proctoring.Contracts.Events; using SafeExamBrowser.Server.Contracts; @@ -38,7 +39,6 @@ using SafeExamBrowser.Server.Contracts.Data; using SafeExamBrowser.Settings; using SafeExamBrowser.SystemComponents.Contracts.Network; using SafeExamBrowser.SystemComponents.Contracts.Network.Events; -using SafeExamBrowser.SystemComponents.Contracts.Registry; using SafeExamBrowser.UserInterface.Contracts; using SafeExamBrowser.UserInterface.Contracts.FileSystemDialog; using SafeExamBrowser.UserInterface.Contracts.MessageBox; @@ -63,11 +63,11 @@ namespace SafeExamBrowser.Client private readonly IMessageBox messageBox; private readonly INetworkAdapter networkAdapter; private readonly IOperationSequence operations; - private readonly IRegistry registry; private readonly IRuntimeProxy runtime; private readonly Action shutdown; private readonly ISplashScreen splashScreen; private readonly ISystemMonitor systemMonitor; + private readonly ISystemSentinel sentinel; private readonly ITaskbar taskbar; private readonly IText text; private readonly IUserInterfaceFactory uiFactory; @@ -94,11 +94,11 @@ namespace SafeExamBrowser.Client IMessageBox messageBox, INetworkAdapter networkAdapter, IOperationSequence operations, - IRegistry registry, IRuntimeProxy runtime, Action shutdown, ISplashScreen splashScreen, ISystemMonitor systemMonitor, + ISystemSentinel sentinel, ITaskbar taskbar, IText text, IUserInterfaceFactory uiFactory) @@ -115,11 +115,11 @@ namespace SafeExamBrowser.Client this.messageBox = messageBox; this.networkAdapter = networkAdapter; this.operations = operations; - this.registry = registry; this.runtime = runtime; this.shutdown = shutdown; this.splashScreen = splashScreen; this.systemMonitor = systemMonitor; + this.sentinel = sentinel; this.taskbar = taskbar; this.text = text; this.uiFactory = uiFactory; @@ -223,8 +223,10 @@ namespace SafeExamBrowser.Client ClientHost.Shutdown += ClientHost_Shutdown; displayMonitor.DisplayChanged += DisplayMonitor_DisplaySettingsChanged; networkAdapter.CredentialsRequired += NetworkAdapter_CredentialsRequired; - registry.ValueChanged += Registry_ValueChanged; runtime.ConnectionLost += Runtime_ConnectionLost; + sentinel.CursorChanged += Sentinel_CursorChanged; + sentinel.EaseOfAccessChanged += Sentinel_EaseOfAccessChanged; + sentinel.StickyKeysChanged += Sentinel_StickyKeysChanged; systemMonitor.SessionChanged += SystemMonitor_SessionChanged; taskbar.LoseFocusRequested += Taskbar_LoseFocusRequested; taskbar.QuitButtonClicked += Shell_QuitButtonClicked; @@ -248,8 +250,10 @@ namespace SafeExamBrowser.Client applicationMonitor.ExplorerStarted -= ApplicationMonitor_ExplorerStarted; applicationMonitor.TerminationFailed -= ApplicationMonitor_TerminationFailed; displayMonitor.DisplayChanged -= DisplayMonitor_DisplaySettingsChanged; - registry.ValueChanged -= Registry_ValueChanged; runtime.ConnectionLost -= Runtime_ConnectionLost; + sentinel.CursorChanged -= Sentinel_CursorChanged; + sentinel.EaseOfAccessChanged -= Sentinel_EaseOfAccessChanged; + sentinel.StickyKeysChanged -= Sentinel_StickyKeysChanged; systemMonitor.SessionChanged -= SystemMonitor_SessionChanged; taskbar.LoseFocusRequested -= Taskbar_LoseFocusRequested; taskbar.QuitButtonClicked -= Shell_QuitButtonClicked; @@ -365,24 +369,19 @@ namespace SafeExamBrowser.Client timer.Interval = TEN_MINUTES + (new Random().NextDouble() * FIVE_MINUTES); timer.Start(); + if (!Settings.Security.AllowStickyKeys) + { + sentinel.StartMonitoringStickyKeys(); + } + if (Settings.Security.VerifyCursorConfiguration) { - if (registry.TryGetNames(RegistryValue.UserHive.Cursors_Key, out var names)) - { - foreach (var name in names) - { - registry.StartMonitoring(RegistryValue.UserHive.Cursors_Key, name); - } - } - else - { - logger.Warn("Failed to start monitoring cursor registry values!"); - } + sentinel.StartMonitoringCursors(); } if (Settings.Service.IgnoreService) { - registry.StartMonitoring(RegistryValue.MachineHive.EaseOfAccess_Key, RegistryValue.MachineHive.EaseOfAccess_Name); + sentinel.StartMonitoringEaseOfAccess(); } } @@ -451,7 +450,7 @@ namespace SafeExamBrowser.Client private void TerminateIntegrityVerification() { - registry.StopMonitoring(); + sentinel.StopMonitoring(); } private void ApplicationMonitor_ExplorerStarted() @@ -782,22 +781,16 @@ namespace SafeExamBrowser.Client splashScreen.UpdateStatus(status, true); } - private void Registry_ValueChanged(string key, string name, object oldValue, object newValue) + private void Runtime_ConnectionLost() { - if (key == RegistryValue.UserHive.Cursors_Key) - { - HandleCursorRegistryChange(key, name, oldValue, newValue); - } - else if (key == RegistryValue.MachineHive.EaseOfAccess_Key) - { - HandleEaseOfAccessRegistryChange(key, name, oldValue, newValue); - } + logger.Error("Lost connection to the runtime!"); + + messageBox.Show(TextKey.MessageBox_ApplicationError, TextKey.MessageBox_ApplicationErrorTitle, icon: MessageBoxIcon.Error); + shutdown.Invoke(); } - private void HandleCursorRegistryChange(string key, string name, object oldValue, object newValue) + private void Sentinel_CursorChanged(SentinelEventArgs args) { - logger.Warn($@"The cursor registry value '{key}\{name}' has changed from '{oldValue}' to '{newValue}'! Attempting to show lock screen..."); - if (coordinator.RequestSessionLock()) { var message = text.Get(TextKey.LockScreen_CursorMessage); @@ -805,7 +798,8 @@ namespace SafeExamBrowser.Client var continueOption = new LockScreenOption { Text = text.Get(TextKey.LockScreen_CursorContinueOption) }; var terminateOption = new LockScreenOption { Text = text.Get(TextKey.LockScreen_CursorTerminateOption) }; - registry.StopMonitoring(key, name); + args.Allow = true; + logger.Info("Cursor changed! Attempting to show lock screen..."); var result = ShowLockScreen(message, title, new[] { continueOption, terminateOption }); @@ -823,14 +817,12 @@ namespace SafeExamBrowser.Client } else { - logger.Info("Lock screen is already active."); + logger.Info("Cursor changed but lock screen is already active."); } } - private void HandleEaseOfAccessRegistryChange(string key, string name, object oldValue, object newValue) + private void Sentinel_EaseOfAccessChanged(SentinelEventArgs args) { - logger.Warn($@"The ease of access registry value '{key}\{name}' has changed from '{oldValue}' to '{newValue}'! Attempting to show lock screen..."); - if (coordinator.RequestSessionLock()) { var message = text.Get(TextKey.LockScreen_EaseOfAccessMessage); @@ -838,7 +830,8 @@ namespace SafeExamBrowser.Client var continueOption = new LockScreenOption { Text = text.Get(TextKey.LockScreen_EaseOfAccessContinueOption) }; var terminateOption = new LockScreenOption { Text = text.Get(TextKey.LockScreen_EaseOfAccessTerminateOption) }; - registry.StopMonitoring(key, name); + args.Allow = true; + logger.Info("Ease of access changed! Attempting to show lock screen..."); var result = ShowLockScreen(message, title, new[] { continueOption, terminateOption }); @@ -856,16 +849,40 @@ namespace SafeExamBrowser.Client } else { - logger.Info("Lock screen is already active."); + logger.Info("Ease of access changed but lock screen is already active."); } } - private void Runtime_ConnectionLost() + private void Sentinel_StickyKeysChanged(SentinelEventArgs args) { - logger.Error("Lost connection to the runtime!"); + if (coordinator.RequestSessionLock()) + { + var message = text.Get(TextKey.LockScreen_StickyKeysMessage); + var title = text.Get(TextKey.LockScreen_Title); + var continueOption = new LockScreenOption { Text = text.Get(TextKey.LockScreen_StickyKeysContinueOption) }; + var terminateOption = new LockScreenOption { Text = text.Get(TextKey.LockScreen_StickyKeysTerminateOption) }; - messageBox.Show(TextKey.MessageBox_ApplicationError, TextKey.MessageBox_ApplicationErrorTitle, icon: MessageBoxIcon.Error); - shutdown.Invoke(); + args.Allow = true; + logger.Info("Sticky keys changed! Attempting to show lock screen..."); + + var result = ShowLockScreen(message, title, new[] { continueOption, terminateOption }); + + if (result.OptionId == continueOption.Id) + { + logger.Info("The session will be allowed to resume as requested by the user..."); + } + else if (result.OptionId == terminateOption.Id) + { + logger.Info("Attempting to shutdown as requested by the user..."); + TryRequestShutdown(); + } + + coordinator.ReleaseSessionLock(); + } + else + { + logger.Info("Sticky keys changed but lock screen is already active."); + } } private void Server_LockScreenConfirmed() diff --git a/SafeExamBrowser.Client/CompositionRoot.cs b/SafeExamBrowser.Client/CompositionRoot.cs index d5bfbaa6..6bae424b 100644 --- a/SafeExamBrowser.Client/CompositionRoot.cs +++ b/SafeExamBrowser.Client/CompositionRoot.cs @@ -119,6 +119,7 @@ namespace SafeExamBrowser.Client var explorerShell = new ExplorerShell(ModuleLogger(nameof(ExplorerShell)), nativeMethods); var fileSystemDialog = BuildFileSystemDialog(); var hashAlgorithm = new HashAlgorithm(); + var sentinel = new SystemSentinel(ModuleLogger(nameof(SystemSentinel)), nativeMethods, registry); var splashScreen = uiFactory.CreateSplashScreen(); var systemMonitor = new SystemMonitor(ModuleLogger(nameof(SystemMonitor))); @@ -158,11 +159,11 @@ namespace SafeExamBrowser.Client messageBox, networkAdapter, sequence, - registry, runtimeProxy, shutdown, splashScreen, systemMonitor, + sentinel, taskbar, text, uiFactory); diff --git a/SafeExamBrowser.Configuration/ConfigurationData/DataMapping/SecurityDataMapper.cs b/SafeExamBrowser.Configuration/ConfigurationData/DataMapping/SecurityDataMapper.cs index 37bf2f18..9ca77bb3 100644 --- a/SafeExamBrowser.Configuration/ConfigurationData/DataMapping/SecurityDataMapper.cs +++ b/SafeExamBrowser.Configuration/ConfigurationData/DataMapping/SecurityDataMapper.cs @@ -26,6 +26,9 @@ namespace SafeExamBrowser.Configuration.ConfigurationData.DataMapping case Keys.Security.AllowReconfiguration: MapAllowReconfiguration(settings, value); break; + case Keys.Security.AllowStickyKeys: + MapAllowStickyKeys(settings, value); + break; case Keys.Security.AllowTermination: MapAllowTermination(settings, value); break; @@ -78,6 +81,14 @@ namespace SafeExamBrowser.Configuration.ConfigurationData.DataMapping } } + private void MapAllowStickyKeys(AppSettings settings, object value) + { + if (value is bool allow) + { + settings.Security.AllowStickyKeys = allow; + } + } + private void MapAllowTermination(AppSettings settings, object value) { if (value is bool allow) diff --git a/SafeExamBrowser.Configuration/ConfigurationData/DataValues.cs b/SafeExamBrowser.Configuration/ConfigurationData/DataValues.cs index 55ce6d3d..df5eb9f6 100644 --- a/SafeExamBrowser.Configuration/ConfigurationData/DataValues.cs +++ b/SafeExamBrowser.Configuration/ConfigurationData/DataValues.cs @@ -132,6 +132,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData settings.Applications.Blacklist.Add(new BlacklistApplication { ExecutableName = "remoting_host.exe", OriginalName = "remoting_host.exe" }); settings.Applications.Blacklist.Add(new BlacklistApplication { ExecutableName = "RPCService.exe", OriginalName = "RPCService.exe" }); settings.Applications.Blacklist.Add(new BlacklistApplication { ExecutableName = "RPCSuite.exe", OriginalName = "RPCSuite.exe" }); + settings.Applications.Blacklist.Add(new BlacklistApplication { ExecutableName = "sethc.exe", OriginalName = "sethc.exe" }); settings.Applications.Blacklist.Add(new BlacklistApplication { ExecutableName = "Skype.exe", OriginalName = "Skype.exe" }); settings.Applications.Blacklist.Add(new BlacklistApplication { ExecutableName = "SkypeApp.exe", OriginalName = "SkypeApp.exe" }); settings.Applications.Blacklist.Add(new BlacklistApplication { ExecutableName = "SkypeHost.exe", OriginalName = "SkypeHost.exe" }); @@ -250,6 +251,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData settings.Security.AllowApplicationLogAccess = false; settings.Security.AllowTermination = true; settings.Security.AllowReconfiguration = false; + settings.Security.AllowStickyKeys = false; settings.Security.ClipboardPolicy = ClipboardPolicy.Isolated; settings.Security.DisableSessionChangeLockScreen = false; settings.Security.KioskMode = KioskMode.CreateNewDesktop; diff --git a/SafeExamBrowser.Configuration/ConfigurationData/Keys.cs b/SafeExamBrowser.Configuration/ConfigurationData/Keys.cs index 224e16e3..721359a3 100644 --- a/SafeExamBrowser.Configuration/ConfigurationData/Keys.cs +++ b/SafeExamBrowser.Configuration/ConfigurationData/Keys.cs @@ -262,6 +262,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData internal const string AdminPasswordHash = "hashedAdminPassword"; internal const string AllowApplicationLog = "allowApplicationLog"; internal const string AllowReconfiguration = "examSessionReconfigureAllow"; + internal const string AllowStickyKeys = "allowStickyKeys"; internal const string AllowTermination = "allowQuit"; internal const string AllowVirtualMachine = "allowVirtualMachine"; internal const string ClipboardPolicy = "clipboardPolicy"; diff --git a/SafeExamBrowser.I18n.Contracts/TextKey.cs b/SafeExamBrowser.I18n.Contracts/TextKey.cs index 72532e7c..0272400b 100644 --- a/SafeExamBrowser.I18n.Contracts/TextKey.cs +++ b/SafeExamBrowser.I18n.Contracts/TextKey.cs @@ -83,6 +83,9 @@ namespace SafeExamBrowser.I18n.Contracts LockScreen_EaseOfAccessMessage, LockScreen_EaseOfAccessTerminateOption, LockScreen_SessionIntegrityMessage, + LockScreen_StickyKeysMessage, + LockScreen_StickyKeysContinueOption, + LockScreen_StickyKeysTerminateOption, LockScreen_Title, LockScreen_UnlockButton, LockScreen_UserSessionContinueOption, diff --git a/SafeExamBrowser.I18n/Data/de.xml b/SafeExamBrowser.I18n/Data/de.xml index 8792889c..24957363 100644 --- a/SafeExamBrowser.I18n/Data/de.xml +++ b/SafeExamBrowser.I18n/Data/de.xml @@ -207,6 +207,15 @@ Die letzte Sitzung mit der momentan aktiven Konfiguration oder Start-URL wurde nicht ordnungsgemäss beendet! Geben Sie bitte das korrekte Passwort ein, um SEB zu entsperren. + + Zustand der Sticky-Keys temporär erlauben. Dies gilt nur für die momentan laufende Sitzung! + + + Ein verbotener Zustand der Sticky-Keys wurde detektiert. Bitte wählen Sie eine der verfügbaren Optionen aus und geben Sie das korrekte Passwort ein, um SEB zu entsperren. + + + Safe Exam Browser beenden. WARNUNG: Sie werden keine Möglichkeit haben, Daten zu speichern oder weitere Aktionen auszuführen, SEB wird sofort beendet! + SEB GESPERRT diff --git a/SafeExamBrowser.I18n/Data/en.xml b/SafeExamBrowser.I18n/Data/en.xml index 53ecac42..458c9e17 100644 --- a/SafeExamBrowser.I18n/Data/en.xml +++ b/SafeExamBrowser.I18n/Data/en.xml @@ -207,6 +207,15 @@ The last session with the currently active configuration or start URL was not terminated properly! Please enter the correct password to unlock SEB. + + Temporarily allow the state of the sticky keys. This applies only to the currently running session! + + + A prohibited state of the sticky keys has been detected. In order to unlock SEB, please select one of the available options and enter the correct unlock password. + + + Terminate Safe Exam Browser. WARNING: There will be no possibility to save data or perform any further actions, the shutdown will be initiated immediately! + SEB LOCKED diff --git a/SafeExamBrowser.I18n/Data/es.xml b/SafeExamBrowser.I18n/Data/es.xml index 82547f08..7ce24834 100644 --- a/SafeExamBrowser.I18n/Data/es.xml +++ b/SafeExamBrowser.I18n/Data/es.xml @@ -207,6 +207,15 @@ La última sesión con la configuración activa o la URL de inicio no se ha cerrado correctamente. Por favor, introduzca la contraseña correcta para desbloquear SEB. + + Permitir temporalmente el estado de las teclas adhesivas. Esto sólo se aplica a la sesión que se está ejecutando en ese momento. + + + Se ha detectado un estado prohibido de las teclas adhesivas. Para desbloquear SEB, seleccione una de las opciones disponibles e introduzca la contraseña de desbloqueo correcta. + + + Finalizar Safe Exam Browser. ADVERTENCIA: No habrá posibilidad de guardar datos o realizar ninguna otra acción, ¡el cierre se iniciará inmediatamente! + SEB BLOQUEADO diff --git a/SafeExamBrowser.I18n/Data/et.xml b/SafeExamBrowser.I18n/Data/et.xml index 124621a0..07b04997 100644 --- a/SafeExamBrowser.I18n/Data/et.xml +++ b/SafeExamBrowser.I18n/Data/et.xml @@ -207,6 +207,15 @@ Viimast seanssi hetkel aktiivse seadistuse või algus-URL-iga ei suletud korrektselt! Palun sisestage SEB'i avamiseks õige parool. + + Lubab ajutiselt kleepuvate võtmete oleku. See kehtib ainult hetkel käimasoleva seansi kohta! + + + Avastati kleepuvate võtmete keelatud olek. SEB avamiseks valige üks olemasolevatest võimalustest ja sisestage õige avamisparool. + + + Sulge Safe Exam Browser. HOIATUS: andmete salvestamise ega edasiste toimingute tegemise võimalust ei ole, sulgemine käivitatakse kohe! + SEB ON LUKUSTATUD diff --git a/SafeExamBrowser.I18n/Data/fr.xml b/SafeExamBrowser.I18n/Data/fr.xml index 80044a09..c6107dd1 100644 --- a/SafeExamBrowser.I18n/Data/fr.xml +++ b/SafeExamBrowser.I18n/Data/fr.xml @@ -207,6 +207,15 @@ La dernière session avec la configuration ou l'URL de démarrage actuellement active n'a pas été terminée correctement! Afin de déverrouiller SEB, veuillez entrer le mot de passe de déverrouillage correct. + + Autoriser temporairement l'état des clés autocollantes. Cela ne s'applique qu'à la session en cours! + + + Un état d'interdiction des clés autocollantes a été détecté. Pour déverrouiller SEB, veuillez sélectionner l'une des options disponibles et saisir le mot de passe de déverrouillage correct. + + + Terminate Safe Exam Browser. WARNING: There will be no possibility to save data or perform any further actions, the shutdown will be initiated immediately! + SEB VEROUILLE diff --git a/SafeExamBrowser.I18n/Data/id.xml b/SafeExamBrowser.I18n/Data/id.xml index c9a54b44..bfde68f4 100644 --- a/SafeExamBrowser.I18n/Data/id.xml +++ b/SafeExamBrowser.I18n/Data/id.xml @@ -207,6 +207,15 @@ Sesi terakhir dengan konfigurasi yang sedang aktif atau URL awal tidak diakhiri dengan benar! Silakan masukkan kata sandi yang benar untuk membuka kunci SEB. + + Mengizinkan status tombol tempel untuk sementara waktu. Ini hanya berlaku untuk sesi yang sedang berjalan! + + + Kondisi kunci tempel yang dilarang telah terdeteksi. Untuk membuka kunci SEB, pilih salah satu opsi yang tersedia dan masukkan kata sandi buka kunci yang benar. + + + Menghentikan Safe Exam Browser. PERINGATAN: Tidak akan ada kemungkinan untuk menyimpan data atau melakukan tindakan lebih lanjut, penghentian akan segera dilakukan! + SEB TERKUNCI diff --git a/SafeExamBrowser.I18n/Data/it.xml b/SafeExamBrowser.I18n/Data/it.xml index f9b8c8bc..8df3f6a6 100644 --- a/SafeExamBrowser.I18n/Data/it.xml +++ b/SafeExamBrowser.I18n/Data/it.xml @@ -207,6 +207,15 @@ L'ultima sessione con la configurazione o l'URL di avvio attualmente attiva non è stata terminata correttamente! Per sbloccare SEB, inserisci la password di sblocco corretta. + + Consente temporaneamente lo stato dei tasti adesivi. Questo vale solo per la sessione in corso! + + + È stato rilevato uno stato non consentito dei tasti adesivi. Per sbloccare SEB, selezionare una delle opzioni disponibili e inserire la password di sblocco corretta. + + + Terminare Safe Exam Browser. ATTENZIONE: Non sarà possibile salvare i dati o eseguire ulteriori azioni, la chiusura verrà avviata immediatamente! + SEB BLOCCATO diff --git a/SafeExamBrowser.I18n/Data/nl.xml b/SafeExamBrowser.I18n/Data/nl.xml index b9edafd2..887d27b1 100644 --- a/SafeExamBrowser.I18n/Data/nl.xml +++ b/SafeExamBrowser.I18n/Data/nl.xml @@ -207,6 +207,15 @@ De laatste sessie met de huidige actieve configuratie of start URL is niet goed afgesloten! Voer het juiste wachtwoord in om SEB te ontgrendelen. + + Tijdelijk de toestand van de sticky keys toestaan. Dit geldt alleen voor de huidige sessie! + + + Er is een verboden toestand van de sticky keys gedetecteerd. Om SEB te ontgrendelen, selecteert u een van de beschikbare opties en voert u het juiste ontgrendelwachtwoord in. + + + Beëindig de Safe Exam Browser. WAARSCHUWING: er is geen mogelijkheid om gegevens op te slaan of verdere acties uit te voeren, de browser wordt onmiddellijk afgesloten! + SEB VERGRENDELD diff --git a/SafeExamBrowser.I18n/Data/ru.xml b/SafeExamBrowser.I18n/Data/ru.xml index 4a62fd91..6dc4f9f0 100644 --- a/SafeExamBrowser.I18n/Data/ru.xml +++ b/SafeExamBrowser.I18n/Data/ru.xml @@ -206,6 +206,15 @@ Последний сеанс с текущей активной конфигурацией или URL-адресом запуска не был завершен должным образом! Пожалуйста, введите правильный пароль, чтобы разблокировать SEB. + + Временно разрешить состояние липких ключей. Это относится только к текущему сеансу! + + + Обнаружено запрещенное состояние липких клавиш. Чтобы разблокировать SEB, пожалуйста, выберите один из доступных вариантов и введите правильный пароль разблокировки. + + + Завершить работу Safe Exam Browser. ВНИМАНИЕ: Сохранить данные или выполнить какие-либо дальнейшие действия будет невозможно, завершение работы будет инициировано немедленно! + SEB ЗАБЛОКИРОВАН diff --git a/SafeExamBrowser.I18n/Data/zh.xml b/SafeExamBrowser.I18n/Data/zh.xml index bb723938..fd387d37 100644 --- a/SafeExamBrowser.I18n/Data/zh.xml +++ b/SafeExamBrowser.I18n/Data/zh.xml @@ -193,7 +193,7 @@ 检测到禁止的显示配置。 要解锁 SEB,请选择可用选项之一并输入正确的解锁密码。 - 终止安全考试浏览器。 警告:将无法保存数据或执行任何进一步操作,将立即启动关机! + 终止安全考试浏览器。警告:将无法保存数据或执行任何进一步操作,将立即启动关机! 暂时允许轻松访问的配置。这只适用于当前运行的会话! @@ -207,6 +207,15 @@ 当前激活的配置或启动URL的最后一个会话没有被正确终止! 请输入正确的密码以解锁SEB。 + + 暂时允许粘性按键的状态。这仅适用于当前运行的会话! + + + 已检测到粘滞键处于禁用状态。要解锁 SEB,请选择一个可用选项并输入正确的解锁密码。 + + + 终止安全考试浏览器。警告:将没有可能保存数据或执行任何进一步的行动,关闭将立即启动! + 防作弊考试专用浏览器已锁定 diff --git a/SafeExamBrowser.Monitoring.Contracts/SafeExamBrowser.Monitoring.Contracts.csproj b/SafeExamBrowser.Monitoring.Contracts/SafeExamBrowser.Monitoring.Contracts.csproj index b397fa71..6b6e264e 100644 --- a/SafeExamBrowser.Monitoring.Contracts/SafeExamBrowser.Monitoring.Contracts.csproj +++ b/SafeExamBrowser.Monitoring.Contracts/SafeExamBrowser.Monitoring.Contracts.csproj @@ -70,8 +70,11 @@ + + + diff --git a/SafeExamBrowser.Monitoring.Contracts/System/Events/SentinelEventArgs.cs b/SafeExamBrowser.Monitoring.Contracts/System/Events/SentinelEventArgs.cs new file mode 100644 index 00000000..5e9a9501 --- /dev/null +++ b/SafeExamBrowser.Monitoring.Contracts/System/Events/SentinelEventArgs.cs @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2024 ETH Zürich, IT Services + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +namespace SafeExamBrowser.Monitoring.Contracts.System.Events +{ + /// + /// The event arguments used for the fired by the . + /// + public class SentinelEventArgs + { + /// + /// Indicates whether a configuration or state change shall be allowed. + /// + public bool Allow { get; set; } + } +} diff --git a/SafeExamBrowser.Monitoring.Contracts/System/Events/SentinelEventHandler.cs b/SafeExamBrowser.Monitoring.Contracts/System/Events/SentinelEventHandler.cs new file mode 100644 index 00000000..f1efb674 --- /dev/null +++ b/SafeExamBrowser.Monitoring.Contracts/System/Events/SentinelEventHandler.cs @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2024 ETH Zürich, IT Services + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +namespace SafeExamBrowser.Monitoring.Contracts.System.Events +{ + /// + /// The default handler for events of the . Normally indicates that a configuration or state has changed. + /// + public delegate void SentinelEventHandler(SentinelEventArgs args); +} diff --git a/SafeExamBrowser.Monitoring.Contracts/System/ISystemSentinel.cs b/SafeExamBrowser.Monitoring.Contracts/System/ISystemSentinel.cs new file mode 100644 index 00000000..33fe02fa --- /dev/null +++ b/SafeExamBrowser.Monitoring.Contracts/System/ISystemSentinel.cs @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2024 ETH Zürich, IT Services + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +using SafeExamBrowser.Monitoring.Contracts.System.Events; + +namespace SafeExamBrowser.Monitoring.Contracts.System +{ + /// + /// Provides the possibility to suppress and surveil various system components and functionalities. + /// + public interface ISystemSentinel + { + /// + /// Event fired when the cursor configuration has changed. + /// + event SentinelEventHandler CursorChanged; + + /// + /// Event fired when the ease of access configuration has changed. + /// + event SentinelEventHandler EaseOfAccessChanged; + + /// + /// Event fired when the sticky keys state has changed. + /// + event SentinelEventHandler StickyKeysChanged; + + /// + /// Attempts to disable the sticky keys. Returns true if successful, otherwise false. + /// + bool DisableStickyKeys(); + + /// + /// Attempts to enable the sticky keys. Returns true if successful, otherwise false. + /// + bool EnableStickyKeys(); + + /// + /// Attempts to revert the sticky keys to their initial state. Returns true if successful, otherwise false. + /// + bool RevertStickyKeys(); + + /// + /// Starts monitoring the cursor configuration. + /// + void StartMonitoringCursors(); + + /// + /// Starts monitoring the ease of access configuration. + /// + void StartMonitoringEaseOfAccess(); + + /// + /// Starts monitoring the sticky keys state. + /// + void StartMonitoringStickyKeys(); + + /// + /// Stops all monitoring operations. + /// + void StopMonitoring(); + + /// + /// Verifies the cursor configuration. Returns true if permitted, otherwise false. + /// + bool VerifyCursors(); + + /// + /// Verifies the ease of access configuration. Returns true if permitted, otherwise false. + /// + bool VerifyEaseOfAccess(); + } +} diff --git a/SafeExamBrowser.Monitoring/SafeExamBrowser.Monitoring.csproj b/SafeExamBrowser.Monitoring/SafeExamBrowser.Monitoring.csproj index 7c363d8b..39f8618b 100644 --- a/SafeExamBrowser.Monitoring/SafeExamBrowser.Monitoring.csproj +++ b/SafeExamBrowser.Monitoring/SafeExamBrowser.Monitoring.csproj @@ -67,7 +67,11 @@ + + + + diff --git a/SafeExamBrowser.Monitoring/System/Components/Cursors.cs b/SafeExamBrowser.Monitoring/System/Components/Cursors.cs new file mode 100644 index 00000000..c1bb2155 --- /dev/null +++ b/SafeExamBrowser.Monitoring/System/Components/Cursors.cs @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2024 ETH Zürich, IT Services + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +using System; +using System.Linq; +using System.Threading.Tasks; +using SafeExamBrowser.Logging.Contracts; +using SafeExamBrowser.Monitoring.Contracts.System.Events; +using SafeExamBrowser.SystemComponents.Contracts.Registry; + +namespace SafeExamBrowser.Monitoring.System.Components +{ + internal class Cursors + { + private static readonly string SYSTEM_PATH = $@"{Environment.ExpandEnvironmentVariables("%SystemRoot%")}\Cursors\"; + private static readonly string USER_PATH = $@"{Environment.ExpandEnvironmentVariables("%LocalAppData%")}\Microsoft\Windows\Cursors\"; + + private readonly ILogger logger; + private readonly IRegistry registry; + + internal event SentinelEventHandler CursorChanged; + + internal Cursors(ILogger logger, IRegistry registry) + { + this.logger = logger; + this.registry = registry; + } + + internal void StartMonitoring() + { + registry.ValueChanged += Registry_ValueChanged; + + if (registry.TryGetNames(RegistryValue.UserHive.Cursors_Key, out var names)) + { + foreach (var name in names) + { + registry.StartMonitoring(RegistryValue.UserHive.Cursors_Key, name); + } + + logger.Info("Started monitoring cursors."); + } + else + { + logger.Warn("Failed to start monitoring cursor registry values!"); + } + } + + internal void StopMonitoring() + { + registry.ValueChanged -= Registry_ValueChanged; + + if (registry.TryGetNames(RegistryValue.UserHive.Cursors_Key, out var names)) + { + foreach (var name in names) + { + registry.StopMonitoring(RegistryValue.UserHive.Cursors_Key, name); + } + + logger.Info("Stopped monitoring cursors."); + } + else + { + logger.Warn("Failed to stop monitoring cursor registry values!"); + } + } + + internal bool Verify() + { + logger.Info($"Starting cursor verification..."); + + var success = registry.TryGetNames(RegistryValue.UserHive.Cursors_Key, out var cursors); + + if (success) + { + foreach (var cursor in cursors.Where(c => !string.IsNullOrWhiteSpace(c))) + { + success &= VerifyCursor(cursor); + } + + if (success) + { + logger.Info("Cursor configuration successfully verified."); + } + else + { + logger.Warn("Cursor configuration is compromised!"); + } + } + else + { + logger.Error("Failed to verify cursor configuration!"); + } + + return success; + } + + private void Registry_ValueChanged(string key, string name, object oldValue, object newValue) + { + if (key == RegistryValue.UserHive.Cursors_Key) + { + HandleCursorChange(key, name, oldValue, newValue); + } + } + + private void HandleCursorChange(string key, string name, object oldValue, object newValue) + { + var args = new SentinelEventArgs(); + + logger.Warn($@"The cursor registry value '{key}\{name}' has changed from '{oldValue}' to '{newValue}'!"); + + Task.Run(() => CursorChanged?.Invoke(args)).ContinueWith((_) => + { + if (args.Allow) + { + registry.StopMonitoring(key, name); + } + }); + } + + private bool VerifyCursor(string cursor) + { + var success = true; + + success &= registry.TryRead(RegistryValue.UserHive.Cursors_Key, cursor, out var value); + success &= !(value is string) || (value is string path && (string.IsNullOrWhiteSpace(path) || IsValidCursorPath(path))); + + if (!success) + { + if (value != default) + { + logger.Warn($"Configuration of cursor '{cursor}' is compromised: '{value}'!"); + } + else + { + logger.Warn($"Failed to verify configuration of cursor '{cursor}'!"); + } + } + + return success; + } + + private bool IsValidCursorPath(string path) + { + return path.StartsWith(USER_PATH, StringComparison.OrdinalIgnoreCase) || path.StartsWith(SYSTEM_PATH, StringComparison.OrdinalIgnoreCase); + } + } +} diff --git a/SafeExamBrowser.Monitoring/System/Components/EaseOfAccess.cs b/SafeExamBrowser.Monitoring/System/Components/EaseOfAccess.cs new file mode 100644 index 00000000..43cd09d9 --- /dev/null +++ b/SafeExamBrowser.Monitoring/System/Components/EaseOfAccess.cs @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2024 ETH Zürich, IT Services + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +using System.Threading.Tasks; +using SafeExamBrowser.Logging.Contracts; +using SafeExamBrowser.Monitoring.Contracts.System.Events; +using SafeExamBrowser.SystemComponents.Contracts.Registry; + +namespace SafeExamBrowser.Monitoring.System.Components +{ + internal class EaseOfAccess + { + private readonly ILogger logger; + private readonly IRegistry registry; + + internal event SentinelEventHandler EaseOfAccessChanged; + + internal EaseOfAccess(ILogger logger, IRegistry registry) + { + this.logger = logger; + this.registry = registry; + } + + internal void StartMonitoring() + { + registry.ValueChanged += Registry_ValueChanged; + registry.StartMonitoring(RegistryValue.MachineHive.EaseOfAccess_Key, RegistryValue.MachineHive.EaseOfAccess_Name); + + logger.Info("Started monitoring ease of access."); + } + + internal void StopMonitoring() + { + registry.ValueChanged -= Registry_ValueChanged; + registry.StopMonitoring(RegistryValue.MachineHive.EaseOfAccess_Key, RegistryValue.MachineHive.EaseOfAccess_Name); + + logger.Info("Stopped monitoring ease of access."); + } + + internal bool Verify() + { + logger.Info($"Starting ease of access verification..."); + + var success = registry.TryRead(RegistryValue.MachineHive.EaseOfAccess_Key, RegistryValue.MachineHive.EaseOfAccess_Name, out var value); + + if (success) + { + if (value is string s && string.IsNullOrWhiteSpace(s)) + { + logger.Info("Ease of access configuration successfully verified."); + } + else + { + logger.Warn($"Ease of access configuration is compromised: '{value}'!"); + success = false; + } + } + else + { + success = true; + logger.Info("Ease of access configuration successfully verified (value does not exist)."); + } + + return success; + } + + private void Registry_ValueChanged(string key, string name, object oldValue, object newValue) + { + if (key == RegistryValue.MachineHive.EaseOfAccess_Key) + { + HandleEaseOfAccessChange(key, name, oldValue, newValue); + } + } + + private void HandleEaseOfAccessChange(string key, string name, object oldValue, object newValue) + { + var args = new SentinelEventArgs(); + + logger.Warn($@"The ease of access registry value '{key}\{name}' has changed from '{oldValue}' to '{newValue}'!"); + + Task.Run(() => EaseOfAccessChanged?.Invoke(args)).ContinueWith((_) => + { + if (args.Allow) + { + registry.StopMonitoring(key, name); + } + }); + } + } +} diff --git a/SafeExamBrowser.Monitoring/System/Components/StickyKeys.cs b/SafeExamBrowser.Monitoring/System/Components/StickyKeys.cs new file mode 100644 index 00000000..12d3d56e --- /dev/null +++ b/SafeExamBrowser.Monitoring/System/Components/StickyKeys.cs @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2024 ETH Zürich, IT Services + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +using System.Threading.Tasks; +using System.Timers; +using SafeExamBrowser.Logging.Contracts; +using SafeExamBrowser.Monitoring.Contracts.System.Events; +using SafeExamBrowser.WindowsApi.Contracts; + +namespace SafeExamBrowser.Monitoring.System.Components +{ + internal class StickyKeys + { + private readonly ILogger logger; + private readonly INativeMethods nativeMethods; + private readonly Timer timer; + + private IStickyKeysState original; + + internal event SentinelEventHandler Changed; + + internal StickyKeys(ILogger logger, INativeMethods nativeMethods) + { + this.logger = logger; + this.nativeMethods = nativeMethods; + this.timer = new Timer(); + } + + internal bool Disable() + { + var success = nativeMethods.TryGetStickyKeys(out var state); + + if (success) + { + success = nativeMethods.DisableStickyKeys(); + + if (success) + { + original = state; + logger.Info($"Disabled sticky keys (original state: {ToString(state)})."); + } + else + { + logger.Error($"Failed to disable sticky keys (original state: {ToString(state)})!"); + } + } + else + { + logger.Error("Failed to retrieve sticky keys state!"); + } + + return success; + } + + internal bool Enable() + { + var success = nativeMethods.TryGetStickyKeys(out var state); + + if (success) + { + success = nativeMethods.EnableStickyKeys(); + + if (success) + { + original = state; + logger.Info($"Enabled sticky keys (original state: {ToString(state)})."); + } + else + { + logger.Error($"Failed to enable sticky keys (original state: {ToString(state)})!"); + } + } + else + { + logger.Error("Failed to retrieve sticky keys state!"); + } + + return success; + } + + internal bool Revert() + { + var success = true; + + if (original != default) + { + success = nativeMethods.TrySetStickyKeys(original); + + if (success) + { + logger.Info($"Successfully reverted sticky keys (original state: {ToString(original)})."); + } + else + { + logger.Error($"Failed to revert sticky keys (original state: {ToString(original)})!"); + } + } + + original = default; + + return success; + } + + internal void StartMonitoring() + { + timer.AutoReset = true; + timer.Elapsed += Timer_Elapsed; + timer.Interval = 1000; + timer.Start(); + + logger.Info("Started monitoring sticky keys."); + } + + internal void StopMonitoring() + { + timer.Elapsed -= Timer_Elapsed; + timer.Stop(); + + logger.Info("Stopped monitoring sticky keys."); + } + + private void Timer_Elapsed(object sender, ElapsedEventArgs e) + { + if (nativeMethods.TryGetStickyKeys(out var state)) + { + if (state.IsEnabled || state.IsHotkeyActive) + { + HandleStickyKeysChange(state); + } + } + else + { + logger.Error("Failed to monitor sticky keys state!"); + } + } + + private void HandleStickyKeysChange(IStickyKeysState state) + { + var args = new SentinelEventArgs(); + + logger.Warn($"The sticky keys state has changed: {ToString(state)}."); + + Task.Run(() => Changed?.Invoke(args)).ContinueWith((_) => + { + if (args.Allow) + { + StopMonitoring(); + } + }); + + if (nativeMethods.DisableStickyKeys()) + { + logger.Info($"Disabled sticky keys."); + } + else + { + logger.Error($"Failed to disable sticky keys!"); + } + } + + private string ToString(IStickyKeysState state) + { + var availability = state.IsAvailable ? "available" : "unavailable"; + var status = state.IsEnabled ? "enabled" : "disabled"; + var hotkey = state.IsHotkeyActive ? "active" : "inactive"; + + return $"functionality {availability} and {status}, hotkey {hotkey}"; + } + } +} diff --git a/SafeExamBrowser.Monitoring/System/SystemSentinel.cs b/SafeExamBrowser.Monitoring/System/SystemSentinel.cs new file mode 100644 index 00000000..60e09750 --- /dev/null +++ b/SafeExamBrowser.Monitoring/System/SystemSentinel.cs @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2024 ETH Zürich, IT Services + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +using SafeExamBrowser.Logging.Contracts; +using SafeExamBrowser.Monitoring.Contracts.System; +using SafeExamBrowser.Monitoring.Contracts.System.Events; +using SafeExamBrowser.Monitoring.System.Components; +using SafeExamBrowser.SystemComponents.Contracts.Registry; +using SafeExamBrowser.WindowsApi.Contracts; + +namespace SafeExamBrowser.Monitoring.System +{ + public class SystemSentinel : ISystemSentinel + { + private readonly Cursors cursors; + private readonly EaseOfAccess easeOfAccess; + private readonly StickyKeys stickyKeys; + + public event SentinelEventHandler CursorChanged; + public event SentinelEventHandler EaseOfAccessChanged; + public event SentinelEventHandler StickyKeysChanged; + + public SystemSentinel(ILogger logger, INativeMethods nativeMethods, IRegistry registry) + { + this.cursors = new Cursors(logger, registry); + this.easeOfAccess = new EaseOfAccess(logger, registry); + this.stickyKeys = new StickyKeys(logger, nativeMethods); + } + + public bool DisableStickyKeys() + { + return stickyKeys.Disable(); + } + + public bool EnableStickyKeys() + { + return stickyKeys.Enable(); + } + + public bool RevertStickyKeys() + { + return stickyKeys.Revert(); + } + + public void StartMonitoringCursors() + { + cursors.CursorChanged += (args) => CursorChanged?.Invoke(args); + cursors.StartMonitoring(); + } + + public void StartMonitoringEaseOfAccess() + { + easeOfAccess.EaseOfAccessChanged += (args) => EaseOfAccessChanged?.Invoke(args); + easeOfAccess.StartMonitoring(); + } + + public void StartMonitoringStickyKeys() + { + stickyKeys.Changed += (args) => StickyKeysChanged?.Invoke(args); + stickyKeys.StartMonitoring(); + } + + public void StopMonitoring() + { + cursors.StopMonitoring(); + easeOfAccess.StopMonitoring(); + stickyKeys.StopMonitoring(); + } + + public bool VerifyCursors() + { + return cursors.Verify(); + } + + public bool VerifyEaseOfAccess() + { + return easeOfAccess.Verify(); + } + } +} diff --git a/SafeExamBrowser.Runtime/CompositionRoot.cs b/SafeExamBrowser.Runtime/CompositionRoot.cs index b78d9abe..0b464351 100644 --- a/SafeExamBrowser.Runtime/CompositionRoot.cs +++ b/SafeExamBrowser.Runtime/CompositionRoot.cs @@ -26,6 +26,7 @@ using SafeExamBrowser.I18n.Contracts; using SafeExamBrowser.Logging; using SafeExamBrowser.Logging.Contracts; using SafeExamBrowser.Monitoring.Display; +using SafeExamBrowser.Monitoring.System; using SafeExamBrowser.Runtime.Communication; using SafeExamBrowser.Runtime.Operations; using SafeExamBrowser.Server; @@ -82,6 +83,7 @@ namespace SafeExamBrowser.Runtime var remoteSessionDetector = new RemoteSessionDetector(ModuleLogger(nameof(RemoteSessionDetector))); var runtimeHost = new RuntimeHost(appConfig.RuntimeAddress, new HostObjectFactory(), ModuleLogger(nameof(RuntimeHost)), FIVE_SECONDS); var runtimeWindow = uiFactory.CreateRuntimeWindow(appConfig); + var sentinel = new SystemSentinel(ModuleLogger(nameof(SystemSentinel)), nativeMethods, registry); var server = new ServerProxy(appConfig, keyGenerator, ModuleLogger(nameof(ServerProxy)), systemInfo, userInfo); var serviceProxy = new ServiceProxy(appConfig.ServiceAddress, new ProxyObjectFactory(), ModuleLogger(nameof(ServiceProxy)), Interlocutor.Runtime); var sessionContext = new SessionContext(); @@ -101,7 +103,7 @@ namespace SafeExamBrowser.Runtime sessionOperations.Enqueue(new VersionRestrictionOperation(logger, sessionContext, text)); sessionOperations.Enqueue(new DisclaimerOperation(logger, sessionContext)); sessionOperations.Enqueue(new RemoteSessionOperation(remoteSessionDetector, logger, sessionContext)); - sessionOperations.Enqueue(new SessionIntegrityOperation(logger, registry, sessionContext)); + sessionOperations.Enqueue(new SessionIntegrityOperation(logger, sentinel, sessionContext)); sessionOperations.Enqueue(new VirtualMachineOperation(vmDetector, logger, sessionContext)); sessionOperations.Enqueue(new DisplayMonitorOperation(displayMonitor, logger, sessionContext, text)); sessionOperations.Enqueue(new ServiceOperation(logger, runtimeHost, serviceProxy, sessionContext, THIRTY_SECONDS, userInfo)); diff --git a/SafeExamBrowser.Runtime/Operations/SessionIntegrityOperation.cs b/SafeExamBrowser.Runtime/Operations/SessionIntegrityOperation.cs index 3e8a6d36..acbcf37f 100644 --- a/SafeExamBrowser.Runtime/Operations/SessionIntegrityOperation.cs +++ b/SafeExamBrowser.Runtime/Operations/SessionIntegrityOperation.cs @@ -6,31 +6,26 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -using System; -using System.Linq; using SafeExamBrowser.Core.Contracts.OperationModel; using SafeExamBrowser.Core.Contracts.OperationModel.Events; using SafeExamBrowser.I18n.Contracts; using SafeExamBrowser.Logging.Contracts; -using SafeExamBrowser.SystemComponents.Contracts.Registry; +using SafeExamBrowser.Monitoring.Contracts.System; namespace SafeExamBrowser.Runtime.Operations { internal class SessionIntegrityOperation : SessionOperation { - private static readonly string USER_PATH = $@"{Environment.ExpandEnvironmentVariables("%LocalAppData%")}\Microsoft\Windows\Cursors\"; - private static readonly string SYSTEM_PATH = $@"{Environment.ExpandEnvironmentVariables("%SystemRoot%")}\Cursors\"; - private readonly ILogger logger; - private readonly IRegistry registry; + private readonly ISystemSentinel sentinel; public override event ActionRequiredEventHandler ActionRequired { add { } remove { } } public override event StatusChangedEventHandler StatusChanged; - public SessionIntegrityOperation(ILogger logger, IRegistry registry, SessionContext context) : base(context) + public SessionIntegrityOperation(ILogger logger, ISystemSentinel sentinel, SessionContext context) : base(context) { this.logger = logger; - this.registry = registry; + this.sentinel = sentinel; } public override OperationResult Perform() @@ -39,8 +34,11 @@ namespace SafeExamBrowser.Runtime.Operations StatusChanged?.Invoke(TextKey.OperationStatus_VerifySessionIntegrity); - success &= VerifyCursorConfiguration(); - success &= VerifyEaseOfAccessConfiguration(); + success &= InitializeStickyKeys(); + success &= VerifyCursors(); + success &= VerifyEaseOfAccess(); + + LogResult(success); return success ? OperationResult.Success : OperationResult.Failed; } @@ -51,43 +49,60 @@ namespace SafeExamBrowser.Runtime.Operations StatusChanged?.Invoke(TextKey.OperationStatus_VerifySessionIntegrity); - success &= VerifyCursorConfiguration(); - success &= VerifyEaseOfAccessConfiguration(); + success &= InitializeStickyKeys(); + success &= VerifyCursors(); + success &= VerifyEaseOfAccess(); + + LogResult(success); return success ? OperationResult.Success : OperationResult.Failed; } public override OperationResult Revert() { + FinalizeStickyKeys(); + return OperationResult.Success; } - private bool VerifyCursorConfiguration() + private void FinalizeStickyKeys() + { + sentinel.RevertStickyKeys(); + } + + private bool InitializeStickyKeys() + { + var success = true; + + sentinel.RevertStickyKeys(); + + if (!Context.Next.Settings.Security.AllowStickyKeys) + { + success = sentinel.DisableStickyKeys(); + } + + return success; + } + + private void LogResult(bool success) + { + if (success) + { + logger.Info("Successfully ensured session integrity."); + } + else + { + logger.Error("Failed to ensure session integrity! Aborting session initialization..."); + } + } + + private bool VerifyCursors() { var success = true; if (Context.Next.Settings.Security.VerifyCursorConfiguration) { - logger.Info($"Attempting to verify cursor configuration..."); - - success = registry.TryGetNames(RegistryValue.UserHive.Cursors_Key, out var cursors); - - if (success) - { - foreach (var cursor in cursors.Where(c => !string.IsNullOrWhiteSpace(c))) - { - success &= VerifyCursor(cursor); - } - } - - if (success) - { - logger.Info("Cursor configuration successfully verified."); - } - else - { - logger.Warn("Failed to verify cursor configuration or configuration is compromised! Aborting session initialization..."); - } + success = sentinel.VerifyCursors(); } else { @@ -97,65 +112,22 @@ namespace SafeExamBrowser.Runtime.Operations return success; } - private bool VerifyCursor(string cursor) + private bool VerifyEaseOfAccess() { - var success = true; - - success &= registry.TryRead(RegistryValue.UserHive.Cursors_Key, cursor, out var value); - success &= !(value is string) || (value is string path && (string.IsNullOrWhiteSpace(path) || IsValidCursorPath(path))); + var success = sentinel.VerifyEaseOfAccess(); if (!success) { - if (value != default) - { - logger.Warn($"Configuration of cursor '{cursor}' is compromised: '{value}'!"); - } - else - { - logger.Warn($"Failed to verify configuration of cursor '{cursor}'!"); - } - } - - return success; - } - - private bool IsValidCursorPath(string path) - { - return path.StartsWith(USER_PATH, StringComparison.OrdinalIgnoreCase) || path.StartsWith(SYSTEM_PATH, StringComparison.OrdinalIgnoreCase); - } - - private bool VerifyEaseOfAccessConfiguration() - { - var success = false; - - logger.Info($"Attempting to verify ease of access configuration..."); - - if (registry.TryRead(RegistryValue.MachineHive.EaseOfAccess_Key, RegistryValue.MachineHive.EaseOfAccess_Name, out var value)) - { - if (value is string s && string.IsNullOrWhiteSpace(s)) + if (Context.Current?.Settings.Service.IgnoreService == false) { + logger.Info($"Ease of access configuration is compromised but service was active in the current session."); success = true; - logger.Info("Ease of access configuration successfully verified."); } else if (!Context.Next.Settings.Service.IgnoreService) { + logger.Info($"Ease of access configuration is compromised but service will be active in the next session."); success = true; - logger.Info($"Ease of access configuration is compromised ('{value}'), but service will be active in the next session."); } - else if (Context.Current?.Settings.Service.IgnoreService == false) - { - success = true; - logger.Info($"Ease of access configuration is set ('{value}'), but service was active in the current session."); - } - else - { - logger.Warn($"Ease of access configuration is compromised: '{value}'! Aborting session initialization..."); - } - } - else - { - success = true; - logger.Info("Ease of access configuration successfully verified (value does not exist)."); } return success; diff --git a/SafeExamBrowser.Settings/Security/SecuritySettings.cs b/SafeExamBrowser.Settings/Security/SecuritySettings.cs index fcf1a353..1249021e 100644 --- a/SafeExamBrowser.Settings/Security/SecuritySettings.cs +++ b/SafeExamBrowser.Settings/Security/SecuritySettings.cs @@ -37,6 +37,11 @@ namespace SafeExamBrowser.Settings.Security /// public bool AllowReconfiguration { get; set; } + /// + /// Determines whether the user may use the sticky keys feature of the operating system. + /// + public bool AllowStickyKeys { get; set; } + /// /// Determines whether the user is allowed to use the system clipboard, a custom clipboard or no clipboard at all. /// diff --git a/SafeExamBrowser.WindowsApi.Contracts/INativeMethods.cs b/SafeExamBrowser.WindowsApi.Contracts/INativeMethods.cs index c86d9cf0..1700190c 100644 --- a/SafeExamBrowser.WindowsApi.Contracts/INativeMethods.cs +++ b/SafeExamBrowser.WindowsApi.Contracts/INativeMethods.cs @@ -46,6 +46,11 @@ namespace SafeExamBrowser.WindowsApi.Contracts /// void DeregisterSystemEventHook(Guid hookId); + /// + /// Attempts to disable the sticky keys feature of the operating system. Returns true if successful, otherwise false. + /// + bool DisableStickyKeys(); + /// /// Empties the clipboard. /// @@ -54,6 +59,11 @@ namespace SafeExamBrowser.WindowsApi.Contracts /// void EmptyClipboard(); + /// + /// Attempts to enable the sticky keys feature of the operating system. Returns true if successful, otherwise false. + /// + bool EnableStickyKeys(); + /// /// Retrieves the current position of the mouse cursor. /// @@ -204,5 +214,15 @@ namespace SafeExamBrowser.WindowsApi.Contracts /// otherwise false. /// bool SuspendThread(int threadId); + + /// + /// Attempts to retrieve the state of the sticky keys feature of the operating system. Returns true if successful, otherwise false. + /// + bool TryGetStickyKeys(out IStickyKeysState state); + + /// + /// Attempts to set the state of the sticky keys feature of the operating system. Returns true if successful, otherwise false. + /// + bool TrySetStickyKeys(IStickyKeysState state); } } diff --git a/SafeExamBrowser.WindowsApi.Contracts/IStickyKeysState.cs b/SafeExamBrowser.WindowsApi.Contracts/IStickyKeysState.cs new file mode 100644 index 00000000..dc779afd --- /dev/null +++ b/SafeExamBrowser.WindowsApi.Contracts/IStickyKeysState.cs @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2024 ETH Zürich, IT Services + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +namespace SafeExamBrowser.WindowsApi.Contracts +{ + /// + /// Represents a state of the sticky keys feature of the operating system. + /// + public interface IStickyKeysState + { + /// + /// Indicates whether the feature is available. + /// + bool IsAvailable { get; } + + /// + /// Indicates whether the feature is enabled. + /// + bool IsEnabled { get; } + + /// + /// Indicates whether the hotkey for the feature is active. + /// + bool IsHotkeyActive { get; } + } +} diff --git a/SafeExamBrowser.WindowsApi.Contracts/SafeExamBrowser.WindowsApi.Contracts.csproj b/SafeExamBrowser.WindowsApi.Contracts/SafeExamBrowser.WindowsApi.Contracts.csproj index 8458cdd3..fd1d2e68 100644 --- a/SafeExamBrowser.WindowsApi.Contracts/SafeExamBrowser.WindowsApi.Contracts.csproj +++ b/SafeExamBrowser.WindowsApi.Contracts/SafeExamBrowser.WindowsApi.Contracts.csproj @@ -73,6 +73,7 @@ + diff --git a/SafeExamBrowser.WindowsApi/Constants/SPI.cs b/SafeExamBrowser.WindowsApi/Constants/SPI.cs index 78d2bc91..e262221e 100644 --- a/SafeExamBrowser.WindowsApi/Constants/SPI.cs +++ b/SafeExamBrowser.WindowsApi/Constants/SPI.cs @@ -9,6 +9,7 @@ namespace SafeExamBrowser.WindowsApi.Constants { /// + /// See https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfow. /// See http://www.pinvoke.net/default.aspx/Enums/SPI.html?diff=y. /// internal enum SPI : uint @@ -20,6 +21,12 @@ namespace SafeExamBrowser.WindowsApi.Constants /// GETDESKWALLPAPER = 0x73, + /// + /// Retrieves information about the StickyKeys accessibility feature. The pvParam parameter must point to a STICKYKEYS structure + /// that receives the information. Set the cbSize member of this structure and the uiParam parameter to sizeof(STICKYKEYS). + /// + GETSTICKYKEYS = 0x3A, + /// /// Retrieves the size of the work area on the primary display monitor. The work area is the portion of the screen /// not obscured by the system taskbar or by application desktop toolbars. The pvParam parameter must point to a @@ -35,6 +42,12 @@ namespace SafeExamBrowser.WindowsApi.Constants /// SETDESKWALLPAPER = 0x14, + /// + /// Sets the parameters of the StickyKeys accessibility feature. The pvParam parameter must point to a STICKYKEYS structure + /// that contains the new parameters. Set the cbSize member of this structure and the uiParam parameter to sizeof(STICKYKEYS). + /// + SETSTICKYKEYS = 0x3B, + /// /// Sets the size of the work area. The work area is the portion of the screen not obscured by the system taskbar /// or by application desktop toolbars. The pvParam parameter is a pointer to a RECT structure that specifies the diff --git a/SafeExamBrowser.WindowsApi/Constants/StickyKeysFlags.cs b/SafeExamBrowser.WindowsApi/Constants/StickyKeysFlags.cs new file mode 100644 index 00000000..ed1c6f56 --- /dev/null +++ b/SafeExamBrowser.WindowsApi/Constants/StickyKeysFlags.cs @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2024 ETH Zürich, IT Services + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +using System; + +namespace SafeExamBrowser.WindowsApi.Constants +{ + /// + /// See https://learn.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-stickykeys#members + /// + [Flags] + internal enum StickyKeysFlags : int + { + /// + /// If this flag is set, the StickyKeys feature is on. + /// + ON = 0x1, + + /// + /// If this flag is set, the StickyKeys feature is available. + /// + AVAILABLE = 0x2, + + /// + /// If this flag is set, the user can turn the StickyKeys feature on and off by pressing the SHIFT key five times. + /// + HOTKEYACTIVE = 0x4, + + /// + /// A confirmation dialog appears when the StickyKeys feature is activated by using the hot key. + /// + CONFIRMHOTKEY = 0x8, + + /// + /// If this flag is set, the system plays a siren sound when the user turns the StickyKeys feature on or off by using the hot key. + /// + HOTKEYSOUND = 0x10, + + /// + /// A visual indicator should be displayed when the StickyKeys feature is on. + /// + INDICATOR = 0x20, + + /// + /// If this flag is set, the system plays a sound when the user latches, locks, or releases modifier keys using the StickyKeys feature. + /// + AUDIBLEFEEDBACK = 0x40, + + /// + /// If this flag is set, pressing a modifier key twice in a row locks down the key until the user presses it a third time. + /// + TRISTATE = 0x80, + + /// + /// If this flag is set, releasing a modifier key that has been pressed in combination with any other key turns off the StickyKeys feature. + /// + TWOKEYSOFF = 0x100, + } +} diff --git a/SafeExamBrowser.WindowsApi/NativeMethods.cs b/SafeExamBrowser.WindowsApi/NativeMethods.cs index 8d9edbbc..ca510e4c 100644 --- a/SafeExamBrowser.WindowsApi/NativeMethods.cs +++ b/SafeExamBrowser.WindowsApi/NativeMethods.cs @@ -69,7 +69,7 @@ namespace SafeExamBrowser.WindowsApi { var hook = KeyboardHooks.Values.FirstOrDefault(h => h.Id == hookId); - if (hook != null) + if (hook != default) { var success = hook.Detach(); @@ -86,7 +86,7 @@ namespace SafeExamBrowser.WindowsApi { var hook = MouseHooks.Values.FirstOrDefault(h => h.Id == hookId); - if (hook != null) + if (hook != default) { var success = hook.Detach(); @@ -103,7 +103,7 @@ namespace SafeExamBrowser.WindowsApi { var hook = SystemHooks.Values.FirstOrDefault(h => h.Id == hookId); - if (hook != null) + if (hook != default) { var success = hook.Detach(); @@ -116,6 +116,22 @@ namespace SafeExamBrowser.WindowsApi } } + public bool DisableStickyKeys() + { + var success = TryGetStickyKeys(out var state); + + if (success) + { + (state as StickyKeysState).Flags &= ~StickyKeysFlags.AVAILABLE; + (state as StickyKeysState).Flags &= ~StickyKeysFlags.HOTKEYACTIVE; + (state as StickyKeysState).Flags &= ~StickyKeysFlags.ON; + + success = TrySetStickyKeys(state); + } + + return success; + } + public void EmptyClipboard() { var success = true; @@ -130,6 +146,22 @@ namespace SafeExamBrowser.WindowsApi } } + public bool EnableStickyKeys() + { + var success = TryGetStickyKeys(out var state); + + if (success) + { + (state as StickyKeysState).Flags |= StickyKeysFlags.AVAILABLE; + (state as StickyKeysState).Flags |= StickyKeysFlags.HOTKEYACTIVE; + (state as StickyKeysState).Flags |= StickyKeysFlags.ON; + + success = TrySetStickyKeys(state); + } + + return success; + } + public (int x, int y) GetCursorPosition() { var position = new POINT(); @@ -172,7 +204,7 @@ namespace SafeExamBrowser.WindowsApi public IntPtr GetShellWindowHandle() { - return User32.FindWindow("Shell_TrayWnd", null); + return User32.FindWindow("Shell_TrayWnd", default); } public uint GetShellProcessId() @@ -187,7 +219,7 @@ namespace SafeExamBrowser.WindowsApi { const int MAX_PATH = 260; var buffer = new String('\0', MAX_PATH); - var success = User32.SystemParametersInfo(SPI.GETDESKWALLPAPER, buffer.Length, buffer, 0); + var success = User32.SystemParametersInfo(SPI.GETDESKWALLPAPER, buffer.Length, buffer, SPIF.NONE); if (!success) { @@ -462,5 +494,48 @@ namespace SafeExamBrowser.WindowsApi Kernel32.CloseHandle(handle); } } + + public bool TryGetStickyKeys(out IStickyKeysState state) + { + var stickyKeys = new STICKYKEYS(); + + state = default; + stickyKeys.cbSize = Marshal.SizeOf(typeof(STICKYKEYS)); + + var success = User32.SystemParametersInfo(SPI.GETSTICKYKEYS, stickyKeys.cbSize, ref stickyKeys, SPIF.NONE); + + if (success) + { + state = new StickyKeysState + { + Flags = stickyKeys.dwFlags, + IsAvailable = stickyKeys.dwFlags.HasFlag(StickyKeysFlags.AVAILABLE), + IsEnabled = stickyKeys.dwFlags.HasFlag(StickyKeysFlags.ON), + IsHotkeyActive = stickyKeys.dwFlags.HasFlag(StickyKeysFlags.HOTKEYACTIVE) + }; + } + + return success; + } + + public bool TrySetStickyKeys(IStickyKeysState state) + { + var success = false; + var stickyKeys = new STICKYKEYS(); + + if (state is StickyKeysState stateWithFlags) + { + stickyKeys.cbSize = Marshal.SizeOf(typeof(STICKYKEYS)); + stickyKeys.dwFlags = stateWithFlags.Flags; + + success = User32.SystemParametersInfo(SPI.SETSTICKYKEYS, stickyKeys.cbSize, ref stickyKeys, SPIF.NONE); + } + else + { + success = state.IsEnabled ? EnableStickyKeys() : DisableStickyKeys(); + } + + return success; + } } } diff --git a/SafeExamBrowser.WindowsApi/SafeExamBrowser.WindowsApi.csproj b/SafeExamBrowser.WindowsApi/SafeExamBrowser.WindowsApi.csproj index 070c515c..b181c020 100644 --- a/SafeExamBrowser.WindowsApi/SafeExamBrowser.WindowsApi.csproj +++ b/SafeExamBrowser.WindowsApi/SafeExamBrowser.WindowsApi.csproj @@ -57,6 +57,7 @@ + @@ -90,6 +91,8 @@ + + diff --git a/SafeExamBrowser.WindowsApi/Types/STICKYKEYS.cs b/SafeExamBrowser.WindowsApi/Types/STICKYKEYS.cs new file mode 100644 index 00000000..cd83a1f7 --- /dev/null +++ b/SafeExamBrowser.WindowsApi/Types/STICKYKEYS.cs @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2024 ETH Zürich, IT Services + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +using System.Runtime.InteropServices; +using SafeExamBrowser.WindowsApi.Constants; + +namespace SafeExamBrowser.WindowsApi.Types +{ + /// + /// See https://learn.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-stickykeys. + /// + [StructLayout(LayoutKind.Sequential)] + internal struct STICKYKEYS + { + internal int cbSize; + internal StickyKeysFlags dwFlags; + } +} diff --git a/SafeExamBrowser.WindowsApi/Types/StickyKeysState.cs b/SafeExamBrowser.WindowsApi/Types/StickyKeysState.cs new file mode 100644 index 00000000..ec3f6c0a --- /dev/null +++ b/SafeExamBrowser.WindowsApi/Types/StickyKeysState.cs @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2024 ETH Zürich, IT Services + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +using SafeExamBrowser.WindowsApi.Constants; +using SafeExamBrowser.WindowsApi.Contracts; + +namespace SafeExamBrowser.WindowsApi.Types +{ + public class StickyKeysState : IStickyKeysState + { + internal StickyKeysFlags Flags { get; set; } + + public bool IsAvailable { get; internal set; } + public bool IsEnabled { get; internal set; } + public bool IsHotkeyActive { get; internal set; } + } +} diff --git a/SafeExamBrowser.WindowsApi/User32.cs b/SafeExamBrowser.WindowsApi/User32.cs index 85e21e9d..e61a25e9 100644 --- a/SafeExamBrowser.WindowsApi/User32.cs +++ b/SafeExamBrowser.WindowsApi/User32.cs @@ -107,6 +107,9 @@ namespace SafeExamBrowser.WindowsApi [DllImport("user32.dll", SetLastError = true)] internal static extern bool SystemParametersInfo(SPI uiAction, uint uiParam, ref RECT pvParam, SPIF fWinIni); + [DllImport("user32.dll", SetLastError = true)] + internal static extern bool SystemParametersInfo(SPI uiAction, int uiParam, ref STICKYKEYS pvParam, SPIF fWinIni); + [DllImport("user32.dll", SetLastError = true)] internal static extern bool SystemParametersInfo(SPI uiAction, int uiParam, string pvParam, SPIF fWinIni); diff --git a/SebWindowsConfig/SEBSettings.cs b/SebWindowsConfig/SEBSettings.cs index 374cad5e..57601c54 100644 --- a/SebWindowsConfig/SEBSettings.cs +++ b/SebWindowsConfig/SEBSettings.cs @@ -385,6 +385,7 @@ namespace SebWindowsConfig public const String KeyEnableCursorVerification = "enableCursorVerification"; public const String KeyEnableSessionVerification = "enableSessionVerification"; public const String KeyLockScreenBackgroundColor = "lockScreenBackgroundColor"; + public const String KeyAllowStickyKeys = "allowStickyKeys"; // Group "macOS specific settings" public const String KeyMinMacOSVersion = "minMacOSVersion"; @@ -877,7 +878,8 @@ namespace SebWindowsConfig "obs32.exe", "spotify.exe", "Microsoft.Media.Player.exe", - "vlc.exe" + "vlc.exe", + "sethc.exe" }; // Default settings for group "Network - Filter" @@ -1027,6 +1029,7 @@ namespace SebWindowsConfig SEBSettings.settingsDefault.Add(SEBSettings.KeyEnableCursorVerification, true); SEBSettings.settingsDefault.Add(SEBSettings.KeyEnableSessionVerification, true); SEBSettings.settingsDefault.Add(SEBSettings.KeyLockScreenBackgroundColor, "#ff0000"); + SEBSettings.settingsDefault.Add(SEBSettings.KeyAllowStickyKeys, false); // Default selected index and string in combo box for minMacOSVersion SEBSettings.intArrayDefault[SEBSettings.ValMinMacOSVersion] = 4; diff --git a/SebWindowsConfig/SebWindowsConfigForm.Designer.cs b/SebWindowsConfig/SebWindowsConfigForm.Designer.cs index 19322c5d..7389238f 100644 --- a/SebWindowsConfig/SebWindowsConfigForm.Designer.cs +++ b/SebWindowsConfig/SebWindowsConfigForm.Designer.cs @@ -30,8 +30,8 @@ namespace SebWindowsConfig { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SebWindowsConfigForm)); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); this.openFileDialogSebConfigFile = new System.Windows.Forms.OpenFileDialog(); this.saveFileDialogSebConfigFile = new System.Windows.Forms.SaveFileDialog(); this.imageListTabIcons = new System.Windows.Forms.ImageList(this.components); @@ -360,6 +360,10 @@ namespace SebWindowsConfig this.labelNewWindowPosition = new System.Windows.Forms.Label(); this.listBoxNewBrowserWindowPositioning = new System.Windows.Forms.ListBox(); this.tabPageAppearance = new System.Windows.Forms.TabPage(); + this.groupBox22 = new System.Windows.Forms.GroupBox(); + this.lockscreenColorButton = new System.Windows.Forms.Button(); + this.lockscreenColorTextbox = new System.Windows.Forms.TextBox(); + this.label34 = new System.Windows.Forms.Label(); this.spellCheckerGroupBox = new System.Windows.Forms.GroupBox(); this.dictionariesDescriptionLabel = new System.Windows.Forms.Label(); this.spellCheckerDescriptionLabel = new System.Windows.Forms.Label(); @@ -481,10 +485,7 @@ namespace SebWindowsConfig this.editDuplicateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.configureClientToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.applyAndStartSEBToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.groupBox22 = new System.Windows.Forms.GroupBox(); - this.lockscreenColorButton = new System.Windows.Forms.Button(); - this.lockscreenColorTextbox = new System.Windows.Forms.TextBox(); - this.label34 = new System.Windows.Forms.Label(); + this.checkBoxAllowStickyKeys = new System.Windows.Forms.CheckBox(); this.tabPageHookedKeys.SuspendLayout(); this.groupBoxFunctionKeys.SuspendLayout(); this.groupBoxSpecialKeys.SuspendLayout(); @@ -530,6 +531,7 @@ namespace SebWindowsConfig this.groupBox11.SuspendLayout(); this.groupBoxNewBrowserWindow.SuspendLayout(); this.tabPageAppearance.SuspendLayout(); + this.groupBox22.SuspendLayout(); this.spellCheckerGroupBox.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.spellCheckerDataGridView)).BeginInit(); this.groupBox16.SuspendLayout(); @@ -545,7 +547,6 @@ namespace SebWindowsConfig this.groupBoxExitSequence.SuspendLayout(); this.tabControlSebWindowsConfig.SuspendLayout(); this.menuStrip1.SuspendLayout(); - this.groupBox22.SuspendLayout(); this.SuspendLayout(); // // openFileDialogSebConfigFile @@ -1138,6 +1139,7 @@ namespace SebWindowsConfig // // tabPageSecurity // + this.tabPageSecurity.Controls.Add(this.checkBoxAllowStickyKeys); this.tabPageSecurity.Controls.Add(this.checkBoxEnableSessionVerification); this.tabPageSecurity.Controls.Add(this.checkBoxEnableCursorVerification); this.tabPageSecurity.Controls.Add(this.groupBox21); @@ -1167,7 +1169,7 @@ namespace SebWindowsConfig // checkBoxEnableSessionVerification // this.checkBoxEnableSessionVerification.AutoSize = true; - this.checkBoxEnableSessionVerification.Location = new System.Drawing.Point(230, 336); + this.checkBoxEnableSessionVerification.Location = new System.Drawing.Point(919, 278); this.checkBoxEnableSessionVerification.Name = "checkBoxEnableSessionVerification"; this.checkBoxEnableSessionVerification.Size = new System.Drawing.Size(179, 17); this.checkBoxEnableSessionVerification.TabIndex = 112; @@ -1178,7 +1180,7 @@ namespace SebWindowsConfig // checkBoxEnableCursorVerification // this.checkBoxEnableCursorVerification.AutoSize = true; - this.checkBoxEnableCursorVerification.Location = new System.Drawing.Point(230, 317); + this.checkBoxEnableCursorVerification.Location = new System.Drawing.Point(919, 259); this.checkBoxEnableCursorVerification.Name = "checkBoxEnableCursorVerification"; this.checkBoxEnableCursorVerification.Size = new System.Drawing.Size(173, 17); this.checkBoxEnableCursorVerification.TabIndex = 111; @@ -2069,8 +2071,8 @@ namespace SebWindowsConfig // // Type // - dataGridViewCellStyle11.BackColor = System.Drawing.Color.Silver; - this.Type.DefaultCellStyle = dataGridViewCellStyle11; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.Silver; + this.Type.DefaultCellStyle = dataGridViewCellStyle3; this.Type.HeaderText = "Type"; this.Type.Name = "Type"; this.Type.ReadOnly = true; @@ -4735,6 +4737,49 @@ namespace SebWindowsConfig this.tabPageAppearance.Text = "User Interface"; this.tabPageAppearance.UseVisualStyleBackColor = true; // + // groupBox22 + // + this.groupBox22.Controls.Add(this.lockscreenColorButton); + this.groupBox22.Controls.Add(this.lockscreenColorTextbox); + this.groupBox22.Controls.Add(this.label34); + this.groupBox22.Location = new System.Drawing.Point(529, 176); + this.groupBox22.Name = "groupBox22"; + this.groupBox22.Size = new System.Drawing.Size(689, 59); + this.groupBox22.TabIndex = 88; + this.groupBox22.TabStop = false; + this.groupBox22.Text = "Lock Screen"; + // + // lockscreenColorButton + // + this.lockscreenColorButton.Location = new System.Drawing.Point(226, 22); + this.lockscreenColorButton.Name = "lockscreenColorButton"; + this.lockscreenColorButton.Size = new System.Drawing.Size(75, 23); + this.lockscreenColorButton.TabIndex = 118; + this.lockscreenColorButton.Text = "Choose"; + this.lockscreenColorButton.UseVisualStyleBackColor = true; + this.lockscreenColorButton.Click += new System.EventHandler(this.lockscreenColorButton_Click); + // + // lockscreenColorTextbox + // + this.lockscreenColorTextbox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lockscreenColorTextbox.ForeColor = System.Drawing.Color.White; + this.lockscreenColorTextbox.Location = new System.Drawing.Point(102, 23); + this.lockscreenColorTextbox.MaxLength = 7; + this.lockscreenColorTextbox.Name = "lockscreenColorTextbox"; + this.lockscreenColorTextbox.Size = new System.Drawing.Size(111, 20); + this.lockscreenColorTextbox.TabIndex = 117; + this.lockscreenColorTextbox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.lockscreenColorTextbox.TextChanged += new System.EventHandler(this.lockscreenColorTextbox_TextChanged); + // + // label34 + // + this.label34.AutoSize = true; + this.label34.Location = new System.Drawing.Point(6, 26); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(92, 13); + this.label34.TabIndex = 116; + this.label34.Text = "Background Color"; + // // spellCheckerGroupBox // this.spellCheckerGroupBox.Controls.Add(this.dictionariesDescriptionLabel); @@ -4854,8 +4899,8 @@ namespace SebWindowsConfig // spellCheckerDictionaryFilesColumn // this.spellCheckerDictionaryFilesColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.spellCheckerDictionaryFilesColumn.DefaultCellStyle = dataGridViewCellStyle12; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.spellCheckerDictionaryFilesColumn.DefaultCellStyle = dataGridViewCellStyle4; this.spellCheckerDictionaryFilesColumn.HeaderText = "Files"; this.spellCheckerDictionaryFilesColumn.Name = "spellCheckerDictionaryFilesColumn"; this.spellCheckerDictionaryFilesColumn.ReadOnly = true; @@ -6253,48 +6298,18 @@ namespace SebWindowsConfig this.applyAndStartSEBToolStripMenuItem.Visible = false; this.applyAndStartSEBToolStripMenuItem.Click += new System.EventHandler(this.applyAndStartSEBToolStripMenuItem_Click); // - // groupBox22 + // checkBoxAllowStickyKeys // - this.groupBox22.Controls.Add(this.lockscreenColorButton); - this.groupBox22.Controls.Add(this.lockscreenColorTextbox); - this.groupBox22.Controls.Add(this.label34); - this.groupBox22.Location = new System.Drawing.Point(529, 176); - this.groupBox22.Name = "groupBox22"; - this.groupBox22.Size = new System.Drawing.Size(689, 59); - this.groupBox22.TabIndex = 88; - this.groupBox22.TabStop = false; - this.groupBox22.Text = "Lock Screen"; - // - // lockscreenColorButton - // - this.lockscreenColorButton.Location = new System.Drawing.Point(226, 22); - this.lockscreenColorButton.Name = "lockscreenColorButton"; - this.lockscreenColorButton.Size = new System.Drawing.Size(75, 23); - this.lockscreenColorButton.TabIndex = 118; - this.lockscreenColorButton.Text = "Choose"; - this.lockscreenColorButton.UseVisualStyleBackColor = true; - this.lockscreenColorButton.Click += new System.EventHandler(this.lockscreenColorButton_Click); - // - // lockscreenColorTextbox - // - this.lockscreenColorTextbox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lockscreenColorTextbox.ForeColor = System.Drawing.Color.White; - this.lockscreenColorTextbox.Location = new System.Drawing.Point(102, 23); - this.lockscreenColorTextbox.MaxLength = 7; - this.lockscreenColorTextbox.Name = "lockscreenColorTextbox"; - this.lockscreenColorTextbox.Size = new System.Drawing.Size(111, 20); - this.lockscreenColorTextbox.TabIndex = 117; - this.lockscreenColorTextbox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.lockscreenColorTextbox.TextChanged += new System.EventHandler(this.lockscreenColorTextbox_TextChanged); - // - // label34 - // - this.label34.AutoSize = true; - this.label34.Location = new System.Drawing.Point(6, 26); - this.label34.Name = "label34"; - this.label34.Size = new System.Drawing.Size(92, 13); - this.label34.TabIndex = 116; - this.label34.Text = "Background Color"; + this.checkBoxAllowStickyKeys.AutoSize = true; + this.checkBoxAllowStickyKeys.Location = new System.Drawing.Point(230, 321); + this.checkBoxAllowStickyKeys.Name = "checkBoxAllowStickyKeys"; + this.checkBoxAllowStickyKeys.Size = new System.Drawing.Size(166, 17); + this.checkBoxAllowStickyKeys.TabIndex = 113; + this.checkBoxAllowStickyKeys.Text = "Allow to use sticky keys (Win)"; + this.toolTip1.SetToolTip(this.checkBoxAllowStickyKeys, "Indicates whether the sticky keys accessibility feature of the operating system m" + + "ay be used while SEB is running."); + this.checkBoxAllowStickyKeys.UseVisualStyleBackColor = true; + this.checkBoxAllowStickyKeys.CheckedChanged += new System.EventHandler(this.checkBoxAllowStickyKeys_CheckedChanged); // // SebWindowsConfigForm // @@ -6398,6 +6413,8 @@ namespace SebWindowsConfig this.groupBoxNewBrowserWindow.ResumeLayout(false); this.groupBoxNewBrowserWindow.PerformLayout(); this.tabPageAppearance.ResumeLayout(false); + this.groupBox22.ResumeLayout(false); + this.groupBox22.PerformLayout(); this.spellCheckerGroupBox.ResumeLayout(false); this.spellCheckerGroupBox.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.spellCheckerDataGridView)).EndInit(); @@ -6425,8 +6442,6 @@ namespace SebWindowsConfig this.tabControlSebWindowsConfig.ResumeLayout(false); this.menuStrip1.ResumeLayout(false); this.menuStrip1.PerformLayout(); - this.groupBox22.ResumeLayout(false); - this.groupBox22.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -6888,6 +6903,7 @@ namespace SebWindowsConfig private System.Windows.Forms.Button lockscreenColorButton; private System.Windows.Forms.TextBox lockscreenColorTextbox; private System.Windows.Forms.Label label34; + private System.Windows.Forms.CheckBox checkBoxAllowStickyKeys; } } diff --git a/SebWindowsConfig/SebWindowsConfigForm.cs b/SebWindowsConfig/SebWindowsConfigForm.cs index 834a4a3e..6c4669b2 100644 --- a/SebWindowsConfig/SebWindowsConfigForm.cs +++ b/SebWindowsConfig/SebWindowsConfigForm.cs @@ -818,6 +818,7 @@ namespace SebWindowsConfig checkBoxEnableCursorVerification.Checked = (Boolean) SEBSettings.settingsCurrent[SEBSettings.KeyEnableCursorVerification]; checkBoxEnableSessionVerification.Checked = (Boolean) SEBSettings.settingsCurrent[SEBSettings.KeyEnableSessionVerification]; lockscreenColorTextbox.Text = (String) SEBSettings.settingsCurrent[SEBSettings.KeyLockScreenBackgroundColor]; + checkBoxAllowStickyKeys.Checked = (Boolean) SEBSettings.settingsCurrent[SEBSettings.KeyAllowStickyKeys]; if (String.IsNullOrEmpty(textBoxLogDirectoryWin.Text)) { @@ -4835,5 +4836,10 @@ namespace SebWindowsConfig SEBSettings.settingsCurrent[SEBSettings.KeyLockScreenBackgroundColor] = raw; } } + + private void checkBoxAllowStickyKeys_CheckedChanged(object sender, EventArgs e) + { + SEBSettings.settingsCurrent[SEBSettings.KeyAllowStickyKeys] = checkBoxAllowStickyKeys.Checked; + } } } diff --git a/SebWindowsConfig/SebWindowsConfigForm.resx b/SebWindowsConfig/SebWindowsConfigForm.resx index 7d41d760..41ad3b3a 100644 --- a/SebWindowsConfig/SebWindowsConfigForm.resx +++ b/SebWindowsConfig/SebWindowsConfigForm.resx @@ -130,8 +130,8 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC+ - 1QAAAk1TRnQBSQFMAgEBDAEAAYABDAGAAQwBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC6 + 1QAAAk1TRnQBSQFMAgEBDAEAAYgBDAGIAQwBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA AwABgAMAAQEBAAEgBwABAf8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A0QABjgGLAQAB/wGOAYsBAAH/AY4BiwEAAf8BjgGLAQAB/wGO @@ -566,484 +566,483 @@ AbIBqAH/AcsBugGxAf8B0QHCAboB/wHoAeEB3QH/BAAB+QH3AfYB/wHcAdEBywH/AdYByQHBAf8B3QHS AcwB/wHXAcoBwwH/AdIBxAG9Af8B0AHCAbsB/wHeAdUB0QH/A/4B/wHlAd4B2wH/AbcBpAGfAf8BmAGD AQAB/wMzAVEIAANQAZ0BAAG9AQAB/wEAAcEBAAH/AQABuQEAAf8BAAG3AQAB/wEAAbEBAAH/AQABqwEA - Af8BAAGmAQAB/wEAAaABAAH/AQABmgEAAf8BAAGUAQAB/wEAAY4BAAH/AQABiAEAAf8BAAGCAQAB/wFk - AWUBZAHxAwYBBwMMAQ8DSgGJA0QBeQNEAXkDRAF4A10B0QEAAb4BAAH/AQABtgEAAf8BAAGxAQAB/wEA - Aa4BAAH/AQABqgEAAf8DWAG3A0QBeANEAXkDRAF5A0MBdhAAAyUBNgPqAf8EAAPhAf8D4AH/A+cB/wPi - Af8D5AH/A+YB/wPgAf8D5gH/A+EB/wPfAf8B4QHgAeEB/wPjAf8D4AH/A94B/wPlAf8D4AH/A9wB/wPd - Af8D5gH/BAADPgFrGAADKQE+A2oB+QPgAf8D9wH/AfQB9QH0Af8D9AH/AfMC9AH/AfMC9AH/AfMC9AH/ - AvMB9AH/AfUB9AHyAf8B9wH1AfIB/wLzAfIB/wPuAf8B6AHqAesB/wHoAukB/wHcAtgB/wHtAt4B/wHi - Ac0BygH/AwAB/wMAAf8CAAGdAf8CAAGcAf8BuAG5AcsB/wNqAfkDIgExGAADRQF8AZICAAH/AaIBjAGH - Af8BpgGQAYsB/wGqAZQBjQH/AckBuQGzAf8BuQGjAZkB/wHBAa4BpQH/AdcBywHEAf8BzAG7AbMB/wHR - AcMBuwH/AdIBxAG8Af8BzAG9AbQB/wHUAccBwAH/AfMB8AHuAf8B5gHeAdoB/wG9AagBngH/AcABrQGj - Af8ByQG5AbAB/wG4AaEBlgH/AbgBoQGXAf8BtwGiAZcB/wG+AawBpAH/AeMB2wHZAf8BxgG4AbQB/wG/ - Aa4BqQH/AaEBjgGKAf8DRgF+CAADQQFyA0IBdQNCAXQDQgF0A1MBqgEAAbUBAAH/AQABsAEAAf8BAAGp - AQAB/wEAAaQBAAH/AQABogEAAf8DYAHbA0IBdANCAXQDQgF0A0kBhQMLAQ4DBgEHA14B8AEAAcsBgwH/ - AQABxQEAAf8BAAHEAQAB/wEAAcIBAAH/AQABuwEAAf8BAAG4AQAB/wEAAbQBAAH/AQABrwEAAf8BAAGr - AQAB/wEAAagBAAH/AQABoQEAAf8BAAGdAQAB/wEAAZIBAAH/AU8BUAFPAZsQAAMlATYD6QH/BAAD9gH/ - A/YB/wP1Af8D9QH/A/UB/wP0Af8D9AH/A/MB/wPzAf8D8wH/A/IB/wPyAf8B8gHxAfIB/wPxAf8D8QH/ - AoYB9gH/AgAB9gH/AesB6gHrAf8B7QHsAe0B/wP+Af8DPgFrFAADBQEGA1gBvAPqAf8D4wH/A/cB/wHz - AvQB/wLzAfQB/wLzAfQB/wPzAf8B8gLzAf8B8gLzAf8D8gH/AfAC8QH/Ae4C7wH/AesB7AHtAf8B6QHq - AesB/wHnAukB/wHlAugB/wHfAeAB2gH/AcIBuwHgAf8CAAHEAf8CAAGdAf8CAAGTAf8CAAGnAf8B4gHl - AeIB/wNfAc4DBQEGGAADTgGYAYwCAAH/AZoBhAEAAf8BoAGJAYQB/wGkAYwBhQH/AcoBuwG1Af8ByAG3 - AbAB/wHuAekB5wH/AeUB3QHZAf8BwwGwAacB/wG6AaQBmwH/AbYBnwGUAf8BtQGeAZMB/wG2AZ8BlQH/ - Ab0BqAGfAf8BzQG9AbYB/wGzAZsBkQH/AcYBtAGsAf8BuQGjAZoB/wG0AZ0BkwH/AbQBnQGTAf8BuQGj - AZgB/wGvAZgBjgH/Ab4BrQGoAf8BoAGKAYQB/wGhAYoBhAH/AZQBgAEAAf8DTwGZGAADLgFHAQABtAEA - Af8BAAG0AQAB/wEAAawBAAH/AQABpwEAAf8BAAGnAQAB/wFVAVcBVQGxGAADGQEiAQABugEAAf8BAAHM - AYMB/wEAAcIBAAH/AQABvwEAAf8BAAG8AQAB/wEAAboBAAH/AQABtgEAAf8BAAGyAQAB/wEAAa0BAAH/ - AQABqQEAAf8BAAGkAQAB/wEAAaQBAAH/AV4BYQFeAeIUAAMlATYD6AH/BAAD1QH/A9AB/wPiAf8D7QH/ - A/EB/wPvAf8D7gH/A+8B/wPsAf8D7gH/A+8B/wPvAf8D7QH/A+4B/wLNAe4B/wIAAfoB/wIAAf0B/wLG - AfIB/wHsAe0B7AH/AfsC+gH/Az4BaxQAAzgBWwQAA9UB/wPtAf8D9QH/A/MB/wHyAvMB/wHyAfMB8gH/ - A/IB/wHxAvIB/wHxAvIB/wHwAvEB/wHvAvAB/wHuAu8B/wHsAe0B7gH/AeoB6wHsAf8B5wHpAeoB/wHl - AucB/wHlAegB5gH/Ac4B0AHdAf8BjwGMAeYB/wGMAYsBwgH/AgABlwH/AYABAAG4Af8B+AH7AfQB/wNK - AYscAANSAaABgwIAAf8BkQIAAf8BlgIAAf8BqAGRAYsB/wHpAeIB4AH/AeEB2AHVAf8B0wHFAb8B/wG5 - AaMBmgH/AbEBmAGOAf8BsAGWAY0B/wGxAZgBjgH/AbEBmAGOAf8BsQGYAY8B/wGuAZQBigH/AcEBrQGl - Af8B1AHHAcIB/wHGAbQBrQH/Aa4BlAGLAf8BsQGXAY4B/wGyAZgBjgH/AbsBogGWAf8BrwGXAY0B/wG8 - AasBpgH/AZoBhAEAAf8BmgGDAQAB/wGGAgAB/wNSAaAYAAM7AWMBAAG2AQAB/wEAAbYBAAH/AQABrgEA - Af8BAAGqAQAB/wEAAakBAAH/AVgBWgFYAb0cAAFOAk8BlwEAAcgBgQH/AQABwwEAAf8BAAG/AQAB/wEA - Ab4BAAH/AQABuwEAAf8BAAG4AQAB/wEAAbQBAAH/AQABsAEAAf8BAAGqAQAB/wEAAaoBAAH/AQABnAEA - Af8DKwFCFAADJQE2A+YB/wQAA8sB/wO+Af8DzwH/A9oB/wPZAf8D2QH/A90B/wPYAf8DzAH/A9wB/wPc - Af8D1AH/A9MB/wPcAf8CvgHYAf8C4QHkAf8CvQH2Af8CAAH9Af8CugHxAf8B9gH3AfYB/wM+AWsQAAMM - ARADXwHYA+4B/wPWAf8D8gH/AfIC8wH/A/IB/wHxAvIB/wHxAvIB/wHwAvEB/wLwAfEB/wHvAvAB/wHu - Au8B/wHtAe4B7wH/Ae0C7gH/AewB7QHuAf8B6gLsAf8B5wHpAeoB/wHlAecB6AH/AeMB5QHmAf8B4wHm - AeUB/wHrAe8B4AH/AZoBmwG3Af8CAAGfAf8BuAG7AcwB/wH5AfsB+AH/Ay0BRRwAA04BlQMAAf8BhgIA - Af8BoQGNAYgB/wGzAaEBmwH/AboBpwGhAf8BzAG8AbcB/wG+AakBogH/AaoBjgGFAf8BrwGVAYsB/wGs - AZEBiAH/AawBkgGJAf8BrAGSAYkB/wGtAZIBiQH/AaoBjgGFAf8BxwG1AbAB/wQAAeIB2QHWAf8BrAGR - AYkB/wGsAZEBiQH/Aa0BkwGKAf8BtAGaAZAB/wGpAY8BhwH/AbgBpQGhAf8BkQIAAf8BjgIAAf8DAAH/ - A04BlhgAAzsBYwEAAbgBAAH/AQABuQEAAf8BAAGxAQAB/wEAAa0BAAH/AQABrQEAAf8BWAFaAVgBvRwA - AwYBBwFBAmoB+QEAAcwBgwH/AQABwAEAAf8BAAG/AQAB/wEAAb0BAAH/AQABugEAAf8BAAG2AQAB/wEA - AbIBAAH/AQABrwEAAf8BAAGvAQAB/wNZAb4YAAMlATYD5AH/BAADygH/A64B/wO1Af8DxwH/A74B/wO1 - Af8DvwH/A7cB/wOsAf8DvAH/A7gB/wOxAf8DtAH/A7kB/wO0Af8DvAH/A80B/wIAAdIB/wIAAfQB/wPy - Af8DPgFrEAADRgF+BAAD3AH/A9wB/wP1Af8C8QHyAf8B8AHxAfIB/wHwAvEB/wHvAvAB/wHuAe8B8AH/ - Ae4C7wH/Ae0B7gHvAf8B7AHtAe4B/wHsAu0B/wHrAewB7QH/AeoC7AH/AekC6wH/AegC6gH/AeYB5wHo - Af8B4wHlAeYB/wHhAeMB5AH/AecB6gHkAf8BjAGLAbwB/wIAAbUB/wHhAeQB4QH/A2IB4QMMARAcAAND - AXYDAAH/AYsCAAH/AZgBgwEAAf8BjQIAAf8BqwGUAY4B/wHzAfAB7wH/AdUByAHEAf8BrQGSAYoB/wGw - AZQBjQH/AawBjwGIAf8BqQGMAYUB/wGnAYkBgQH/AacBiQGBAf8BpgGIAYAB/wG6AaMBnQH/AfEB7QHs - Af8B3gHTAc8B/wGoAYoBgwH/AagBigGDAf8BqgGOAYYB/wGrAZABhgH/AaYBjAGFAf8BrwGdAZgB/wGF - AgAB/wGHAgAB/wMAAf8DRAF5GAADOwFjAQABugEAAf8BAAG6AQAB/wEAAbQBAAH/AQABrwEAAf8BAAGw - AQAB/wFYAVoBWAG9IAADPQFoAQABwwEAAf8BAAHGAQAB/wEAAb8BAAH/AQABvgEAAf8BAAG7AQAB/wEA - AbgBAAH/AQABtAEAAf8BAAG2AQAB/wEAAaMBAAH/AxYBHhgAAyUBNgPjAf8EAAPXAf8D0gH/A90B/wPb - Af8D3AH/A9wB/wPXAf8D3QH/A9gB/wPWAf8D1wH/A9oB/wPXAf8D1AH/A9sB/wPUAf8DzwH/A88B/wPZ - Af8D6QH/Az4BaxAAAy4BSANdAcwD+wH/A+YB/wHzAvQB/wHvAvAB/wHvAvAB/wHvAvAB/wHuAu8B/wHu - Au8B/wHtAu4B/wHsAe0B7gH/AesC7QH/AesC7AH/AeoB6wHsAf8B6AHqAesB/wHoAekB6gH/AecB6QHq - Af8B5gLoAf8B5AHmAecB/wHiAeQB5QH/AeAC4wH/AdEB0wHbAf8BzwHRAdgB/wHvAvEB/wNSAaQgAAMt - AUUDAAH/AwAB/wMAAf8BjwIAAf8B0QHFAcMB/wQAAfMC7wH/AcABqwGlAf8BvQGnAaEB/wG+AakBogH/ - AcABqwGlAf8BvQGnAaEB/wG1AZwBlQH/AaoBjQGGAf8BqAGLAYMB/wG4AaEBmwH/AbcBnwGYAf8BtwGf - AZkB/wGhAYIBAAH/AaYBiQGAAf8BoAGDAQAB/wGmAY4BiAH/AaABjAGIAf8DAAH/AYECAAH/AwAB/wMv - AUkYAAM7AWMBAAG7AQAB/wEAAb0BAAH/AQABtgEAAf8BAAGyAQAB/wEAAbIBAAH/AVgBWgFYAb0kAAFb - AmEB3gEAAcwBgwH/AQABwAEAAf8BAAG/AQAB/wEAAb0BAAH/AQABugEAAf8BAAG5AQAB/wEAAbYBAAH/ - A00BkhwAAyUBNgPhAf8EAAPtAf8D7QH/A+wB/wPsAf8D7AH/A+sB/wPrAf8D6wH/AesC6gH/A+sB/wPq - Af8D6AH/AuUB5gH/A+MB/wHhAeIB4QH/A98B/wPdAf8D2wH/A9gB/wPaAf8DPgFrFAADBgEHA0ABcQNa - AfUC8wH0Af8B7gHvAfAB/wHuAu8B/wHtAu8B/wHsAu4B/wHsAu0B/wHrAewB7QH/AeoB6wHsAf8B6QLr - Af8B6AHqAesB/wHoAekB6gH/AecB6AHpAf8B5gLoAf8B5QLnAf8B5AHmAecB/wHjAuYB/wHiAeQB5QH/ - Ad8B4gHjAf8B3wLiAf8B3ALfAf8B9wL5Af8DOAFcIAADDAEQA1sB5AMAAf8BgwIAAf8BlgGBAQAB/wGq - AZgBlAH/AfQB8gHxAf8B2QHNAcoB/wGcAgAB/wGgAYEBAAH/AaEBgwEAAf8BpgGIAYEB/wGsAZEBigH/ - AbYBnQGXAf8BvQGoAaIB/wHSAcMBvwH/AcgBtgGyAf8BnQIAAf8BuQGjAZwB/wGyAZkBkgH/AZkCAAH/ - AZQCAAH/AacBkwGNAf8BjwIAAf8DAAH/AwAB/wNcAecDDgESGAADOwFjAQABvAEAAf8BAAG+AQAB/wEA - AbgBAAH/AQABtAEAAf8BAAG1AQAB/wFYAVoBWAG9JAADKAE8AQABvQEAAf8BAAHIAYEB/wEAAb8BAAH/ - AQABvgEAAf8BAAG7AQAB/wEAAcEBAAH/AUgCYgH2AwQBBRwAAyUBNgLeAd8B/wL+Af0B/wH0AfMB6gH/ - AuwB6wH/AuoB6wH/AecB5gHrAf8C9QHoAf8C9wHnAf8C5QHqAf8D6gH/A+oB/wPpAf8D5wH/AeQC5QH/ - A98B/wPUAf8DywH/A8oB/wPMAf8DxwH/A7sB/wPQAf8DOgFiGAADDwETA14B7QHxAfIB8wH/Ae0C7gH/ - AewB7QHuAf8B6wHsAe0B/wHqAuwB/wHqAesB7AH/AekC6wH/AegB6QHrAf8B5wLpAf8B5gLoAf8B5QHn - AegB/wHkAeYB5wH/AeMC5gH/AeMB5QHmAf8B4gHkAeUB/wHhAuQB/wHgAeIB4wH/Ad8C4gH/AdwB3wHg - Af8B3QHgAeEB/wNeAfADFgEeJAADTAGRAwAB/wMAAf8DAAH/AwAB/wGvAZ0BmAH/AbwBqQGlAf8BnQIA - Af8BnwGBAQAB/wGjAYUBAAH/AaYBiAGCAf8BpwGJAYMB/wGnAYkBgwH/AaYBiQGCAf8BygG6AbYB/wHY - AcwByQH/AboBowGeAf8BpAGHAYAB/wG4AaIBnAH/AaUBjQGHAf8BjgIAAf8BpwGTAY4B/wMAAf8DAAH/ - AwAB/wNOAZUcAAM7AWMBAAG+AQAB/wEAAcABAAH/AQABuQEAAf8BAAG2AQAB/wEAAbgBAAH/AVgBWgFY - Ab0oAAFXAlkBuQEAAcsBgwH/AQABwgEAAf8BAAG/AQAB/wEAAcEBAAH/AQABuwEAAf8DOwFjIAADJQE2 - At8B3gH/AvYB/AH/AuIB6QH/AvEB6AH/AuYB6QP/AecB/wK5Ae0B/wKdAfAD/wHnAf8B6AHpAegB/wPn - Af8B5QLmAf8D5AH/AeIC4QH/A9UB/wG4AbkBuAH/A5wB/wOUAf8DlQH/A4oB/wOpAf8DYgHvAxUBHRgA - Ay0BRQP9Af8B7ALtAf8B6wHsAe0B/wHqAesB7AH/AekC6wH/AegB6QHrAf8B5wHpAeoB/wHnAegB6QH/ - AeYC6AH/AeUC5wH/AeQB5gHnAf8B4wHlAeYB/wHiAeQB5QH/AeEC5AH/AeAB4wHkAf8B3wHiAeMB/wHe - AeEB4gH/Ad0B4AHhAf8B3QHgAeEB/wHbAd4B3wH/AekC7AH/A1kBuygAAxsBJQJNAT4B+gMAAf8DAAH/ - AwAB/wGZAYUBgAH/AZoBhAEAAf8BtQGgAZsB/wGcAgAB/wGlAYkBhAH/AakBjQGHAf8BqQGOAYgB/wGp - AY4BiAH/AagBjAGGAf8BswGbAZYB/wGyAZoBlAH/AbUBnQGYAf8BxgGzAa4B/wGkAYoBhAH/AakBlAGP - Af8B4AHYAdYB/wG4AawBqgH/AwAB/wMAAf8BTQI+AfoDHQEoHAADOwFjAQABvwEAAf8BAAHBAQAB/wEA - AbsBAAH/AQABuQEAAf8BAAG6AQAB/wFYAloBvSgAAxMBGgEAAbUBAAH/AQABygGCAf8BAAG/AQAB/wEA - AccBAAH/AV8CYQHaJAADJQE2At8B3AP/AfoB/wIAAfQB/wLVAegD/wHkA/8B4QH/AgAB9AH/AoMB8gP/ - AeQB/wLrAeYB/wHmAeUB5AH/AuIB4wH/A+EB/wPfAf8DzwH/A6EB/wMAAf8DAAH/AwAB/wOZAf8DvAH/ - Ay8BSRwAA0IBdAH+A/8B6QHqAesB/wHpAeoB6wH/AegC6gH/AecC6QH/AeYB6AHpAf8B5QLnAf8B5AHm - AecB/wHjAuYB/wHjAuUB/wHiAeQB5QH/AeEB4wHkAf8B4AHiAeMB/wHfAeEB4gH/Ad4B4QHiAf8B3QHg - AeEB/wHcAd8B4AH/AdsB3gHfAf8B2gHdAd4B/wHYAdsB3AH/AfUB9wH4Af8DQgF1LAADTAGQAwAB/wMA - Af8DAAH/AZMBgQEAAf8BgwIAAf8BuQGqAacB/wGpAZIBjgH/AZ8BhgGCAf8BpAGKAYYB/wGmAYsBhwH/ - AacBjAGHAf8BpwGLAYcB/wGzAZsBlgH/AbYBoAGbAf8BrAGQAYsB/wGxAZkBlAH/AbwBrQGpAf8BkgIA - Af8B1QHNAcwB/wGzAagBpgH/AwAB/wMAAf8DTQGTIAADOwFjAQABvwEAAf8BAAHCAQAB/wEAAb0BAAH/ - AQABugEAAf8BAAG9AQAB/wFYAloBvSwAA0sBjAEAAccBgAH/AQABywGDAf8BAAG7AQAB/wMmATgkAAMl - ATYD2wP/AfUB/wKGAfEB/wIAAfgB/wK/AesB/wKOAe8B/wIAAfYB/wLjAeYB/wLhAeYB/wLYAeUB/wLf - AeIB/wLiAeAB/wPfAf8D3AH/A8IB/wOaAf8DzAH/A90B/wPyAf8D5wH/AzABSiAAA1IBpAH3AvkB/wHm - AegB6QH/AeYB6AHpAf8B5gHnAegB/wHlAecB6AH/AeQB5gHnAf8B4wHlAeYB/wHiAeUB5gH/AeIB5AHl - Af8B4QHjAeQB/wHgAeIB4wH/Ad8C4gH/Ad4B4QHiAf8B3QHgAeEB/wHcAd8B4AH/AdsB3gHfAf8B2gHd - Ad4B/wHZAd0B3gH/AdgB2wHcAf8B2AHcAd0B/wNfAfsDIgExLAADCgENA10B1AMAAf8DAAH/AYkCAAH/ - AZcBhQGBAf8BpgGTAZAB/wHLAbwBuQH/AaIBjQGJAf8BowGMAYgB/wGlAY0BiQH/AaUBjQGJAf8BpAGM - AYgB/wGoAZMBjwH/AbUBogGfAf8BogGMAYkB/wGeAYoBhgH/AaIBkQGOAf8B0wHKAckB/wGgAZEBjwH/ - AwAB/wMAAf8DXAHWAwsBDiAAAzsBYwEAAcABAAH/AQABwwEAAf8BAAG+AQAB/wEAAbwBAAH/AQABwAEA - Af8BWAJaAb0sAAQCA2IB7gEAAdIBiAH/A1YBsygAAyUBNgPZA/8B9QH/AssB6AH/AgAB9wH/ApcB7QH/ - AgAB/AH/Aq4B6wH/AtgB5gH/AgAB8wH/AgAB8AH/AsMB4wH/Au4B2wH/A9sB/wPZAf8DuwH/A5gB/wPy - Af8EAAP1Af8DMAFKIAADBgEHA2EB2gHwAvIB/wHlAucB/wHjAuYB/wHjAeUB5gH/AeMB5QHmAf8B4gLl - Af8B4gHkAeUB/wHhAeMB5AH/AeAB4gHjAf8B3wLiAf8B3gHhAeIB/wHdAeAB4QH/AdwB3wHgAf8B2wHe - Ad8B/wHaAd0B3gH/AdkB3AHdAf8B2AHcAd0B/wHXAdsB3AH/AdYB2QHaAf8B4AHjAeQB/wNeAdIDBQEG - MAADHQEpA2AB6AMAAf8DAAH/AakBnQGbAf8BngGNAYsB/wG4AaoBpwH/Ab4BsgGwAf8BnAGKAYcB/wGd - AYoBhwH/AZ0BigGHAf8BnAGJAYYB/wGiAY8BiwH/AbcBpwGlAf8BoAGPAY0B/wGiAZIBjwH/AZ8BkAGN - Af8B5gLhAf8BnAGQAY4B/wMAAf8DXQHqAx4BKyQAAz4BawEAAcYBgAH/AQABzAGDAf8BAAHGAQAB/wEA - AcUBAAH/AQAByAEAAf8DXQHMMAABQQJCAXMBAAGoAQAB/wMSARgoAAMlATYD2AH/AvUB9gH/AvkB4gH/ - AgAB8AH/AqUB6gH/AgAB8AH/AucB4wH/A+IB/wLUAeIB/wLTAeAB/wLZAdwB/wLbAdoB/wPZAf8D1gH/ - A7EB/wOYAf8EAAPwAf8DMAFLJAADDAEPA1gBvANeAe0C/QH+Af8B+wH8Af0B/wH0AfUB9gH/AeoB7AHt - Af8B4wHlAeYB/wHfAuIB/wHdAuAB/wHcAd8B4AH/AdwB3wHgAf8B2wHeAd8B/wHbAd4B3wH/AdoB3QHe - Af8B2QHcAd0B/wHYAdsB3AH/AdcB2gHbAf8B1gHZAdsB/wHVAdkB2gH/AdIB1gHXAf8B7gHwAfEB/wNM - AY44AAMiATEDWwHeAwAB/wGhAZUBkwH/AasBnwGdAf8BpAGWAZQB/wG9AbEBrwH/Ab4BswGxAf8BoAGR - AY4B/wGhAZEBjgH/AaYBlQGSAf8BpAGTAZAB/wGyAaUBowH/Aa4BoQGfAf8BpQGXAZQB/wG9AbIBsAH/ - AaEBlgGTAf8DAAH/A2AB4AMkATQoAAM5AV4BWgJnAfIBWgJnAfIBWgJnAfIBWgJnAfIBWgJnAfIDVgGz - MAADDAEPAzQBVCwAAyUBNgPXAf8C9AH1A/8B3wH/AroB6AH/AgAC/wKWAewD/wHcAf8D3wH/AuIB3QH/ - AuAB2wH/AtoB2QH/AtYB1wH/A9cB/wPQAf8DoAH/A7sB/wPvAf8DMAFKLAAEAQMTARoDKQQ+AWsDUQGc - A10ByQNlAewB+gL7Af8B9wL5Af8B7wHxAfIB/wHkAecB6AH/AdwB3wHgAf8B2AHbAdwB/wHVAdkB2gH/ - AdQB2AHZAf8B1AHYAdoB/wHUAdgB2QH/AdMB1wHZAf8B0wHWAdgB/wHRAdUB1gH/AfcC+AH/Ay4BRzwA - AxUBHQNWAbIDAAH/AZQBiAGGAf8BuAGtAasB/wGxAaUBowH/AcEBtwG1Af8BxgG9AbsB/wGwAaIBoAH/ - AagBmgGYAf8BqAGcAZoB/wGuAaIBoAH/AcIBuAG2Af8BwQG3AbUB/wGqAaABngH/AwAB/wNVAbQDFgEe - rAADJQE3A9cB/wP0Af8C6AHiAf8C7AHiAf8CAAH2Af8CugHlAf8C8QHdAf8D3QH/A9oB/wPYAf8D1wH/ - A9UB/wPSAf8DwAH/A7UB/wPIAf8DMAFLSAADEgEYAygBPAM+AWoDUAGbA1oBxwNdAeoB+AL5Af8B9AL2 - Af8B6gHtAe4B/wHeAeIB4wH/AdUB2QHbAf8B0QHVAdYB/wHNAdIB0wH/AdQB2QHaAf8DZQHlAwwBEEQA - AzYBWANdAckDAAH/AaMBmAGWAf8BvQGzAbEB/wHTAcoByAH/Ad4B1gHVAf8B0wHKAckB/wHLAcEBwAH/ - AcIBtwG2Af8BtwGuAa0B/wGiApoB/wNbAcoDNwFatAADIAEtA6gB/QwAAv4C/xAAA/0B/wP7Af8D9gH/ - AekC6gH/A98B/wPFAf8DMAFMYAADEQEWAycBOgM9AWgDTwGZA1sBxQNjAekB9gH3AfgB/wHvAfIB8wH/ - AfUB9wH4Af8DVgGrTAAEAgMqAT8DSQGHA1gBvQNdAdwDYQHrA2EB6wNhAdwDWQG+A0kBiAMqAUAEArgA - AwsBDgNIAYMDTgGUA0oBigNKAYoDSgGKA0oBigNKAYoDSgGKA0oBigNKAYoDSgGKA0oBigNMAZADTAGP - AyABLXgAAw8BFAMmATgDPAFmA1EBnAMuAUj/ADEACAFYAAgBGAAEAQMDAQQDAwEEAwMBBAMDAQQDAwEE + Af8BAAGmAQAB/wEAAaABAAH/AQABmgEAAf8BAAGUAQAB/wEAAY4BAAH/AQABiAEAAf8BAAGCAQAB/wNl + AfEDBgEHAwwBDwNKAYkDRAF5A0QBeQNEAXgDXQHRAQABvgEAAf8BAAG2AQAB/wEAAbEBAAH/AQABrgEA + Af8BAAGqAQAB/wNYAbcDRAF4A0QBeQNEAXkDQwF2EAADJQE2A+oB/wQAA+EB/wPgAf8D5wH/A+IB/wPk + Af8D5gH/A+AB/wPmAf8D4QH/A98B/wHhAeAB4QH/A+MB/wPgAf8D3gH/A+UB/wPgAf8D3AH/A90B/wPm + Af8EAAM+AWsYAAMpAT4DagH5A+AB/wP3Af8B9AH1AfQB/wP0Af8B8wL0Af8B8wL0Af8B8wL0Af8C8wH0 + Af8B9QH0AfIB/wH3AfUB8gH/AvMB8gH/A+4B/wHoAeoB6wH/AegC6QH/AdwC2AH/Ae0C3gH/AeIBzQHK + Af8DAAH/AwAB/wIAAZ0B/wIAAZwB/wG4AbkBywH/A2oB+QMiATEYAANFAXwBkgIAAf8BogGMAYcB/wGm + AZABiwH/AaoBlAGNAf8ByQG5AbMB/wG5AaMBmQH/AcEBrgGlAf8B1wHLAcQB/wHMAbsBswH/AdEBwwG7 + Af8B0gHEAbwB/wHMAb0BtAH/AdQBxwHAAf8B8wHwAe4B/wHmAd4B2gH/Ab0BqAGeAf8BwAGtAaMB/wHJ + AbkBsAH/AbgBoQGWAf8BuAGhAZcB/wG3AaIBlwH/Ab4BrAGkAf8B4wHbAdkB/wHGAbgBtAH/Ab8BrgGp + Af8BoQGOAYoB/wNGAX4IAANBAXIDQgF1A0IBdANCAXQDUwGqAQABtQEAAf8BAAGwAQAB/wEAAakBAAH/ + AQABpAEAAf8BAAGiAQAB/wNgAdsDQgF0A0IBdANCAXQDSQGFAwsBDgMGAQcDXgHwAQABywGDAf8BAAHF + AQAB/wEAAcQBAAH/AQABwgEAAf8BAAG7AQAB/wEAAbgBAAH/AQABtAEAAf8BAAGvAQAB/wEAAasBAAH/ + AQABqAEAAf8BAAGhAQAB/wEAAZ0BAAH/AQABkgEAAf8BTwFQAU8BmxAAAyUBNgPpAf8EAAP2Af8D9gH/ + A/UB/wP1Af8D9QH/A/QB/wP0Af8D8wH/A/MB/wPzAf8D8gH/A/IB/wHyAfEB8gH/A/EB/wPxAf8ChgH2 + Af8CAAH2Af8B6wHqAesB/wHtAewB7QH/A/4B/wM+AWsUAAMFAQYDWAG8A+oB/wPjAf8D9wH/AfMC9AH/ + AvMB9AH/AvMB9AH/A/MB/wHyAvMB/wHyAvMB/wPyAf8B8ALxAf8B7gLvAf8B6wHsAe0B/wHpAeoB6wH/ + AecC6QH/AeUC6AH/Ad8B4AHaAf8BwgG7AeAB/wIAAcQB/wIAAZ0B/wIAAZMB/wIAAacB/wHiAeUB4gH/ + A18BzgMFAQYYAANOAZgBjAIAAf8BmgGEAQAB/wGgAYkBhAH/AaQBjAGFAf8BygG7AbUB/wHIAbcBsAH/ + Ae4B6QHnAf8B5QHdAdkB/wHDAbABpwH/AboBpAGbAf8BtgGfAZQB/wG1AZ4BkwH/AbYBnwGVAf8BvQGo + AZ8B/wHNAb0BtgH/AbMBmwGRAf8BxgG0AawB/wG5AaMBmgH/AbQBnQGTAf8BtAGdAZMB/wG5AaMBmAH/ + Aa8BmAGOAf8BvgGtAagB/wGgAYoBhAH/AaEBigGEAf8BlAGAAQAB/wNPAZkYAAMuAUcBAAG0AQAB/wEA + AbQBAAH/AQABrAEAAf8BAAGnAQAB/wEAAacBAAH/AVUBVwFVAbEYAAMZASIBAAG6AQAB/wEAAcwBgwH/ + AQABwgEAAf8BAAG/AQAB/wEAAbwBAAH/AQABugEAAf8BAAG2AQAB/wEAAbIBAAH/AQABrQEAAf8BAAGp + AQAB/wEAAaQBAAH/AQABpAEAAf8BXgFhAV4B4hQAAyUBNgPoAf8EAAPVAf8D0AH/A+IB/wPtAf8D8QH/ + A+8B/wPuAf8D7wH/A+wB/wPuAf8D7wH/A+8B/wPtAf8D7gH/As0B7gH/AgAB+gH/AgAB/QH/AsYB8gH/ + AewB7QHsAf8B+wL6Af8DPgFrFAADOAFbBAAD1QH/A+0B/wP1Af8D8wH/AfIC8wH/AfIB8wHyAf8D8gH/ + AfEC8gH/AfEC8gH/AfAC8QH/Ae8C8AH/Ae4C7wH/AewB7QHuAf8B6gHrAewB/wHnAekB6gH/AeUC5wH/ + AeUB6AHmAf8BzgHQAd0B/wGPAYwB5gH/AYwBiwHCAf8CAAGXAf8BgAEAAbgB/wH4AfsB9AH/A0oBixwA + A1IBoAGDAgAB/wGRAgAB/wGWAgAB/wGoAZEBiwH/AekB4gHgAf8B4QHYAdUB/wHTAcUBvwH/AbkBowGa + Af8BsQGYAY4B/wGwAZYBjQH/AbEBmAGOAf8BsQGYAY4B/wGxAZgBjwH/Aa4BlAGKAf8BwQGtAaUB/wHU + AccBwgH/AcYBtAGtAf8BrgGUAYsB/wGxAZcBjgH/AbIBmAGOAf8BuwGiAZYB/wGvAZcBjQH/AbwBqwGm + Af8BmgGEAQAB/wGaAYMBAAH/AYYCAAH/A1IBoBgAAzsBYwEAAbYBAAH/AQABtgEAAf8BAAGuAQAB/wEA + AaoBAAH/AQABqQEAAf8BWAFaAVgBvRwAAU4CTwGXAQAByAGBAf8BAAHDAQAB/wEAAb8BAAH/AQABvgEA + Af8BAAG7AQAB/wEAAbgBAAH/AQABtAEAAf8BAAGwAQAB/wEAAaoBAAH/AQABqgEAAf8BAAGcAQAB/wMr + AUIUAAMlATYD5gH/BAADywH/A74B/wPPAf8D2gH/A9kB/wPZAf8D3QH/A9gB/wPMAf8D3AH/A9wB/wPU + Af8D0wH/A9wB/wK+AdgB/wLhAeQB/wK9AfYB/wIAAf0B/wK6AfEB/wH2AfcB9gH/Az4BaxAAAwwBEANf + AdgD7gH/A9YB/wPyAf8B8gLzAf8D8gH/AfEC8gH/AfEC8gH/AfAC8QH/AvAB8QH/Ae8C8AH/Ae4C7wH/ + Ae0B7gHvAf8B7QLuAf8B7AHtAe4B/wHqAuwB/wHnAekB6gH/AeUB5wHoAf8B4wHlAeYB/wHjAeYB5QH/ + AesB7wHgAf8BmgGbAbcB/wIAAZ8B/wG4AbsBzAH/AfkB+wH4Af8DLQFFHAADTgGVAwAB/wGGAgAB/wGh + AY0BiAH/AbMBoQGbAf8BugGnAaEB/wHMAbwBtwH/Ab4BqQGiAf8BqgGOAYUB/wGvAZUBiwH/AawBkQGI + Af8BrAGSAYkB/wGsAZIBiQH/Aa0BkgGJAf8BqgGOAYUB/wHHAbUBsAH/BAAB4gHZAdYB/wGsAZEBiQH/ + AawBkQGJAf8BrQGTAYoB/wG0AZoBkAH/AakBjwGHAf8BuAGlAaEB/wGRAgAB/wGOAgAB/wMAAf8DTgGW + GAADOwFjAQABuAEAAf8BAAG5AQAB/wEAAbEBAAH/AQABrQEAAf8BAAGtAQAB/wFYAVoBWAG9HAADBgEH + AUECagH5AQABzAGDAf8BAAHAAQAB/wEAAb8BAAH/AQABvQEAAf8BAAG6AQAB/wEAAbYBAAH/AQABsgEA + Af8BAAGvAQAB/wEAAa8BAAH/A1kBvhgAAyUBNgPkAf8EAAPKAf8DrgH/A7UB/wPHAf8DvgH/A7UB/wO/ + Af8DtwH/A6wB/wO8Af8DuAH/A7EB/wO0Af8DuQH/A7QB/wO8Af8DzQH/AgAB0gH/AgAB9AH/A/IB/wM+ + AWsQAANGAX4EAAPcAf8D3AH/A/UB/wLxAfIB/wHwAfEB8gH/AfAC8QH/Ae8C8AH/Ae4B7wHwAf8B7gLv + Af8B7QHuAe8B/wHsAe0B7gH/AewC7QH/AesB7AHtAf8B6gLsAf8B6QLrAf8B6ALqAf8B5gHnAegB/wHj + AeUB5gH/AeEB4wHkAf8B5wHqAeQB/wGMAYsBvAH/AgABtQH/AeEB5AHhAf8DYgHhAwwBEBwAA0MBdgMA + Af8BiwIAAf8BmAGDAQAB/wGNAgAB/wGrAZQBjgH/AfMB8AHvAf8B1QHIAcQB/wGtAZIBigH/AbABlAGN + Af8BrAGPAYgB/wGpAYwBhQH/AacBiQGBAf8BpwGJAYEB/wGmAYgBgAH/AboBowGdAf8B8QHtAewB/wHe + AdMBzwH/AagBigGDAf8BqAGKAYMB/wGqAY4BhgH/AasBkAGGAf8BpgGMAYUB/wGvAZ0BmAH/AYUCAAH/ + AYcCAAH/AwAB/wNEAXkYAAM7AWMBAAG6AQAB/wEAAboBAAH/AQABtAEAAf8BAAGvAQAB/wEAAbABAAH/ + AVgBWgFYAb0gAAM9AWgBAAHDAQAB/wEAAcYBAAH/AQABvwEAAf8BAAG+AQAB/wEAAbsBAAH/AQABuAEA + Af8BAAG0AQAB/wEAAbYBAAH/AQABowEAAf8DFgEeGAADJQE2A+MB/wQAA9cB/wPSAf8D3QH/A9sB/wPc + Af8D3AH/A9cB/wPdAf8D2AH/A9YB/wPXAf8D2gH/A9cB/wPUAf8D2wH/A9QB/wPPAf8DzwH/A9kB/wPp + Af8DPgFrEAADLgFIA10BzAP7Af8D5gH/AfMC9AH/Ae8C8AH/Ae8C8AH/Ae8C8AH/Ae4C7wH/Ae4C7wH/ + Ae0C7gH/AewB7QHuAf8B6wLtAf8B6wLsAf8B6gHrAewB/wHoAeoB6wH/AegB6QHqAf8B5wHpAeoB/wHm + AugB/wHkAeYB5wH/AeIB5AHlAf8B4ALjAf8B0QHTAdsB/wHPAdEB2AH/Ae8C8QH/A1IBpCAAAy0BRQMA + Af8DAAH/AwAB/wGPAgAB/wHRAcUBwwH/BAAB8wLvAf8BwAGrAaUB/wG9AacBoQH/Ab4BqQGiAf8BwAGr + AaUB/wG9AacBoQH/AbUBnAGVAf8BqgGNAYYB/wGoAYsBgwH/AbgBoQGbAf8BtwGfAZgB/wG3AZ8BmQH/ + AaEBggEAAf8BpgGJAYAB/wGgAYMBAAH/AaYBjgGIAf8BoAGMAYgB/wMAAf8BgQIAAf8DAAH/Ay8BSRgA + AzsBYwEAAbsBAAH/AQABvQEAAf8BAAG2AQAB/wEAAbIBAAH/AQABsgEAAf8BWAFaAVgBvSQAAVsCYQHe + AQABzAGDAf8BAAHAAQAB/wEAAb8BAAH/AQABvQEAAf8BAAG6AQAB/wEAAbkBAAH/AQABtgEAAf8DTQGS + HAADJQE2A+EB/wQAA+0B/wPtAf8D7AH/A+wB/wPsAf8D6wH/A+sB/wPrAf8B6wLqAf8D6wH/A+oB/wPo + Af8C5QHmAf8D4wH/AeEB4gHhAf8D3wH/A90B/wPbAf8D2AH/A9oB/wM+AWsUAAMGAQcDQAFxA1oB9QLz + AfQB/wHuAe8B8AH/Ae4C7wH/Ae0C7wH/AewC7gH/AewC7QH/AesB7AHtAf8B6gHrAewB/wHpAusB/wHo + AeoB6wH/AegB6QHqAf8B5wHoAekB/wHmAugB/wHlAucB/wHkAeYB5wH/AeMC5gH/AeIB5AHlAf8B3wHi + AeMB/wHfAuIB/wHcAt8B/wH3AvkB/wM4AVwgAAMMARADWwHkAwAB/wGDAgAB/wGWAYEBAAH/AaoBmAGU + Af8B9AHyAfEB/wHZAc0BygH/AZwCAAH/AaABgQEAAf8BoQGDAQAB/wGmAYgBgQH/AawBkQGKAf8BtgGd + AZcB/wG9AagBogH/AdIBwwG/Af8ByAG2AbIB/wGdAgAB/wG5AaMBnAH/AbIBmQGSAf8BmQIAAf8BlAIA + Af8BpwGTAY0B/wGPAgAB/wMAAf8DAAH/A1wB5wMOARIYAAM7AWMBAAG8AQAB/wEAAb4BAAH/AQABuAEA + Af8BAAG0AQAB/wEAAbUBAAH/AVgBWgFYAb0kAAMoATwBAAG9AQAB/wEAAcgBgQH/AQABvwEAAf8BAAG+ + AQAB/wEAAbsBAAH/AQABwQEAAf8BSAJiAfYDBAEFHAADJQE2At4B3wH/Av4B/QH/AfQB8wHqAf8C7AHr + Af8C6gHrAf8B5wHmAesB/wL1AegB/wL3AecB/wLlAeoB/wPqAf8D6gH/A+kB/wPnAf8B5ALlAf8D3wH/ + A9QB/wPLAf8DygH/A8wB/wPHAf8DuwH/A9AB/wM6AWIYAAMPARMDXgHtAfEB8gHzAf8B7QLuAf8B7AHt + Ae4B/wHrAewB7QH/AeoC7AH/AeoB6wHsAf8B6QLrAf8B6AHpAesB/wHnAukB/wHmAugB/wHlAecB6AH/ + AeQB5gHnAf8B4wLmAf8B4wHlAeYB/wHiAeQB5QH/AeEC5AH/AeAB4gHjAf8B3wLiAf8B3AHfAeAB/wHd + AeAB4QH/A14B8AMWAR4kAANMAZEDAAH/AwAB/wMAAf8DAAH/Aa8BnQGYAf8BvAGpAaUB/wGdAgAB/wGf + AYEBAAH/AaMBhQEAAf8BpgGIAYIB/wGnAYkBgwH/AacBiQGDAf8BpgGJAYIB/wHKAboBtgH/AdgBzAHJ + Af8BugGjAZ4B/wGkAYcBgAH/AbgBogGcAf8BpQGNAYcB/wGOAgAB/wGnAZMBjgH/AwAB/wMAAf8DAAH/ + A04BlRwAAzsBYwEAAb4BAAH/AQABwAEAAf8BAAG5AQAB/wEAAbYBAAH/AQABuAEAAf8BWAFaAVgBvSgA + AVcCWQG5AQABywGDAf8BAAHCAQAB/wEAAb8BAAH/AQABwQEAAf8BAAG7AQAB/wM7AWMgAAMlATYC3wHe + Af8C9gH8Af8C4gHpAf8C8QHoAf8C5gHpA/8B5wH/ArkB7QH/Ap0B8AP/AecB/wHoAekB6AH/A+cB/wHl + AuYB/wPkAf8B4gLhAf8D1QH/AbgBuQG4Af8DnAH/A5QB/wOVAf8DigH/A6kB/wNiAe8DFQEdGAADLQFF + A/0B/wHsAu0B/wHrAewB7QH/AeoB6wHsAf8B6QLrAf8B6AHpAesB/wHnAekB6gH/AecB6AHpAf8B5gLo + Af8B5QLnAf8B5AHmAecB/wHjAeUB5gH/AeIB5AHlAf8B4QLkAf8B4AHjAeQB/wHfAeIB4wH/Ad4B4QHi + Af8B3QHgAeEB/wHdAeAB4QH/AdsB3gHfAf8B6QLsAf8DWQG7KAADGwElAk0BQAH6AwAB/wMAAf8DAAH/ + AZkBhQGAAf8BmgGEAQAB/wG1AaABmwH/AZwCAAH/AaUBiQGEAf8BqQGNAYcB/wGpAY4BiAH/AakBjgGI + Af8BqAGMAYYB/wGzAZsBlgH/AbIBmgGUAf8BtQGdAZgB/wHGAbMBrgH/AaQBigGEAf8BqQGUAY8B/wHg + AdgB1gH/AbgBrAGqAf8DAAH/AwAB/wFNAkAB+gMdASgcAAM7AWMBAAG/AQAB/wEAAcEBAAH/AQABuwEA + Af8BAAG5AQAB/wEAAboBAAH/AVgCWgG9KAADEwEaAQABtQEAAf8BAAHKAYIB/wEAAb8BAAH/AQABxwEA + Af8BXwJhAdokAAMlATYC3wHcA/8B+gH/AgAB9AH/AtUB6AP/AeQD/wHhAf8CAAH0Af8CgwHyA/8B5AH/ + AusB5gH/AeYB5QHkAf8C4gHjAf8D4QH/A98B/wPPAf8DoQH/AwAB/wMAAf8DAAH/A5kB/wO8Af8DLwFJ + HAADQgF0Af4D/wHpAeoB6wH/AekB6gHrAf8B6ALqAf8B5wLpAf8B5gHoAekB/wHlAucB/wHkAeYB5wH/ + AeMC5gH/AeMC5QH/AeIB5AHlAf8B4QHjAeQB/wHgAeIB4wH/Ad8B4QHiAf8B3gHhAeIB/wHdAeAB4QH/ + AdwB3wHgAf8B2wHeAd8B/wHaAd0B3gH/AdgB2wHcAf8B9QH3AfgB/wNCAXUsAANMAZADAAH/AwAB/wMA + Af8BkwGBAQAB/wGDAgAB/wG5AaoBpwH/AakBkgGOAf8BnwGGAYIB/wGkAYoBhgH/AaYBiwGHAf8BpwGM + AYcB/wGnAYsBhwH/AbMBmwGWAf8BtgGgAZsB/wGsAZABiwH/AbEBmQGUAf8BvAGtAakB/wGSAgAB/wHV + Ac0BzAH/AbMBqAGmAf8DAAH/AwAB/wNNAZMgAAM7AWMBAAG/AQAB/wEAAcIBAAH/AQABvQEAAf8BAAG6 + AQAB/wEAAb0BAAH/AVgCWgG9LAADSwGMAQABxwGAAf8BAAHLAYMB/wEAAbsBAAH/AyYBOCQAAyUBNgPb + A/8B9QH/AoYB8QH/AgAB+AH/Ar8B6wH/Ao4B7wH/AgAB9gH/AuMB5gH/AuEB5gH/AtgB5QH/At8B4gH/ + AuIB4AH/A98B/wPcAf8DwgH/A5oB/wPMAf8D3QH/A/IB/wPnAf8DMAFKIAADUgGkAfcC+QH/AeYB6AHp + Af8B5gHoAekB/wHmAecB6AH/AeUB5wHoAf8B5AHmAecB/wHjAeUB5gH/AeIB5QHmAf8B4gHkAeUB/wHh + AeMB5AH/AeAB4gHjAf8B3wLiAf8B3gHhAeIB/wHdAeAB4QH/AdwB3wHgAf8B2wHeAd8B/wHaAd0B3gH/ + AdkB3QHeAf8B2AHbAdwB/wHYAdwB3QH/A18B+wMiATEsAAMKAQ0DXQHUAwAB/wMAAf8BiQIAAf8BlwGF + AYEB/wGmAZMBkAH/AcsBvAG5Af8BogGNAYkB/wGjAYwBiAH/AaUBjQGJAf8BpQGNAYkB/wGkAYwBiAH/ + AagBkwGPAf8BtQGiAZ8B/wGiAYwBiQH/AZ4BigGGAf8BogGRAY4B/wHTAcoByQH/AaABkQGPAf8DAAH/ + AwAB/wNcAdYDCwEOIAADOwFjAQABwAEAAf8BAAHDAQAB/wEAAb4BAAH/AQABvAEAAf8BAAHAAQAB/wFY + AloBvSwABAIDYgHuAQAB0gGIAf8DVgGzKAADJQE2A9kD/wH1Af8CywHoAf8CAAH3Af8ClwHtAf8CAAH8 + Af8CrgHrAf8C2AHmAf8CAAHzAf8CAAHwAf8CwwHjAf8C7gHbAf8D2wH/A9kB/wO7Af8DmAH/A/IB/wQA + A/UB/wMwAUogAAMGAQcDYQHaAfAC8gH/AeUC5wH/AeMC5gH/AeMB5QHmAf8B4wHlAeYB/wHiAuUB/wHi + AeQB5QH/AeEB4wHkAf8B4AHiAeMB/wHfAuIB/wHeAeEB4gH/Ad0B4AHhAf8B3AHfAeAB/wHbAd4B3wH/ + AdoB3QHeAf8B2QHcAd0B/wHYAdwB3QH/AdcB2wHcAf8B1gHZAdoB/wHgAeMB5AH/A14B0gMFAQYwAAMd + ASkDYAHoAwAB/wMAAf8BqQGdAZsB/wGeAY0BiwH/AbgBqgGnAf8BvgGyAbAB/wGcAYoBhwH/AZ0BigGH + Af8BnQGKAYcB/wGcAYkBhgH/AaIBjwGLAf8BtwGnAaUB/wGgAY8BjQH/AaIBkgGPAf8BnwGQAY0B/wHm + AuEB/wGcAZABjgH/AwAB/wNdAeoDHgErJAADPgFrAQABxgGAAf8BAAHMAYMB/wEAAcYBAAH/AQABxQEA + Af8BAAHIAQAB/wNdAcwwAAFBAkIBcwEAAagBAAH/AxIBGCgAAyUBNgPYAf8C9QH2Af8C+QHiAf8CAAHw + Af8CpQHqAf8CAAHwAf8C5wHjAf8D4gH/AtQB4gH/AtMB4AH/AtkB3AH/AtsB2gH/A9kB/wPWAf8DsQH/ + A5gB/wQAA/AB/wMwAUskAAMMAQ8DWAG8A14B7QL9Af4B/wH7AfwB/QH/AfQB9QH2Af8B6gHsAe0B/wHj + AeUB5gH/Ad8C4gH/Ad0C4AH/AdwB3wHgAf8B3AHfAeAB/wHbAd4B3wH/AdsB3gHfAf8B2gHdAd4B/wHZ + AdwB3QH/AdgB2wHcAf8B1wHaAdsB/wHWAdkB2wH/AdUB2QHaAf8B0gHWAdcB/wHuAfAB8QH/A0wBjjgA + AyIBMQNbAd4DAAH/AaEBlQGTAf8BqwGfAZ0B/wGkAZYBlAH/Ab0BsQGvAf8BvgGzAbEB/wGgAZEBjgH/ + AaEBkQGOAf8BpgGVAZIB/wGkAZMBkAH/AbIBpQGjAf8BrgGhAZ8B/wGlAZcBlAH/Ab0BsgGwAf8BoQGW + AZMB/wMAAf8DYAHgAyQBNCgAAzkBXgFaAmcB8gFaAmcB8gFaAmcB8gFaAmcB8gFaAmcB8gNWAbMwAAMM + AQ8DNAFULAADJQE2A9cB/wL0AfUD/wHfAf8CugHoAf8CAAL/ApYB7AP/AdwB/wPfAf8C4gHdAf8C4AHb + Af8C2gHZAf8C1gHXAf8D1wH/A9AB/wOgAf8DuwH/A+8B/wMwAUosAAQBAxMBGgMpBD4BawNRAZwDXQHJ + A2UB7AH6AvsB/wH3AvkB/wHvAfEB8gH/AeQB5wHoAf8B3AHfAeAB/wHYAdsB3AH/AdUB2QHaAf8B1AHY + AdkB/wHUAdgB2gH/AdQB2AHZAf8B0wHXAdkB/wHTAdYB2AH/AdEB1QHWAf8B9wL4Af8DLgFHPAADFQEd + A1YBsgMAAf8BlAGIAYYB/wG4Aa0BqwH/AbEBpQGjAf8BwQG3AbUB/wHGAb0BuwH/AbABogGgAf8BqAGa + AZgB/wGoAZwBmgH/Aa4BogGgAf8BwgG4AbYB/wHBAbcBtQH/AaoBoAGeAf8DAAH/A1UBtAMWAR6sAAMl + ATcD1wH/A/QB/wLoAeIB/wLsAeIB/wIAAfYB/wK6AeUB/wLxAd0B/wPdAf8D2gH/A9gB/wPXAf8D1QH/ + A9IB/wPAAf8DtQH/A8gB/wMwAUtIAAMSARgDKAE8Az4BagNQAZsDWgHHA10B6gH4AvkB/wH0AvYB/wHq + Ae0B7gH/Ad4B4gHjAf8B1QHZAdsB/wHRAdUB1gH/Ac0B0gHTAf8B1AHZAdoB/wNlAeUDDAEQRAADNgFY + A10ByQMAAf8BowGYAZYB/wG9AbMBsQH/AdMBygHIAf8B3gHWAdUB/wHTAcoByQH/AcsBwQHAAf8BwgG3 + AbYB/wG3Aa4BrQH/AaICmgH/A1sBygM3AVq0AAMgAS0DqAH9DAAC/gL/EAAD/QH/A/sB/wP2Af8B6QLq + Af8D3wH/A8UB/wMwAUxgAAMRARYDJwE6Az0BaANPAZkDWwHFA2MB6QH2AfcB+AH/Ae8B8gHzAf8B9QH3 + AfgB/wNWAatMAAQCAyoBPwNJAYcDWAG9A10B3ANhAesDYQHrA2EB3ANZAb4DSQGIAyoBQAQCuAADCwEO + A0gBgwNOAZQDSgGKA0oBigNKAYoDSgGKA0oBigNKAYoDSgGKA0oBigNKAYoDSgGKA0wBkANMAY8DIAEt + eAADDwEUAyYBOAM8AWYDUQGcAy4BSP8AMQAIAVgACAEYAAQBAwMBBAMDAQQDAwEEAwMBBAMDAQQDAwEE AwMBBAMDAQQDAwEEAwMBBAMDAQQDAwEEAwMBBAMDAQQDAwEEAwMBBAMDAQQDAwEEAwMBBAMDAQQDAwEE - AwMBBAMDAQQDAwEEAwMBBAQBNAADEwEaAzgBXANQAZsDWgHHA10B3wNhAesDYQHrA10B3wNaAccDUQGc - AzgBXAMTARooAAMDAQQDJAE0AzMBUQMzAVADMwFQAzMBUAMzAVADMwFQAzMBUAMzAVADMwFQAzMBUAMz + AwMBBAMDAQQDAwEEBAE0AAMTARoDOAFcA1ABmwNaAccDXQHfA2EB6wNhAesDXQHfA1oBxwNRAZwDOAFc + AxMBGigAAwMBBAMkATQDMwFRAzMBUAMzAVADMwFQAzMBUAMzAVADMwFQAzMBUAMzAVADMwFQAzMBUAMz AVADMwFQAzMBUAMzAVADMwFQAzMBUAMzAVADMwFQAzMBUAMzAVADMwFQAzMBUAMzAVADMwFQAzMBUAMz - AVADMwFQAzMBUQMkATUDAwEEEAADDgESAyoBPwMoATsDJwE6AycBOgMnAToDJwE6AycBOgMnAToDMwFR - A08BlwNcAcgDZQHlA14B8ANlAewDXwHVA1UBrAM+AWsDJwE6AycBOgMnAToDKAE7AyoBPwMPARMEARAA - BAEDDwEUAyEBMAMnAToDJwE6AycBOgMnAToDJwE6AycBOgMnAToDJwE6AycBOgMnAToDJwE6AycBOgMn - AToDJwE6AycBOgMnAToDJwE6AycBOgMnAToDJwE6AycBOgMnAToDJwE6AycBOgMhATADDwEUBAEkAAMh - AS8DUQGcA14B7QHiAa8BAAH/AdUBnAEAAf8ByQGKAQAB/wHAAgAB/wG7AgAB/wG6AgAB/wG+AgAB/wHG - AYcBAAH/AdMBmQEAAf8B4QGuAQAB/wNeAe0DUAGdAyEBLyAAAwYBBwNdAc8DkAH/A5IB/wOSAf8DkgH/ - A5IB/wORAf8DkQH/A5EB/wORAf8DkQH/A5EB/wORAf8DkQH/A5EB/wORAf8DkQH/A5EB/wORAf8DkQH/ - A5EB/wORAf8DkQH/A5EB/wGRApIB/wOSAf8DkgH/A5IB/wOPAf8DXQHPAwYBCBAAAzQBUwQAA/gB/wP2 - Af8D9gH/A/YB/wP2Af8D9QH/A+YB/wPAAf8DlwH/A4kB/wMAAf8DAAH/AwAB/wMAAf8DjQH/A64B/wPe - Af8D8AH/A/YB/wP3Af8EAAM4AVsUAAMUARsDUQGkA1oB8gMAAf8DfQH+A30B/gN9Af4DfQH+A30B/gN8 - Af4DdgH+A2IB/gNPAf4DgAH+A4AB/gOAAf4DgAH+A4AB/gOAAf4DgAH+A4AB/gOAAf4DgAH+A4AB/gOA - Af4DgAH+AwAB/wNnAfIDUQGkAxQBGxwAAwoBDQNLAYwCbQFsAfcB3AGmAQAB/wHFAYYBAAH/AbwCAAH/ - AbwCAAH/AbkCAAH/AbUCAAH/AawCAAH/AagCAAH/AagCAAH/AacCAAH/AagCAAH/Aa0CAAH/Ab0CAAH/ - AdgBoAEAAf8CbQFsAfcDSwGMAwoBDRgAAwYBBwOdAf8B7wLwAf8D6wH/Ae8B8AHxAf8B7wLxAf8D6wH/ + AVADMwFRAyQBNQMDAQQQAAMOARIDKgE/AygBOwMnAToDJwE6AycBOgMnAToDJwE6AycBOgMzAVEDTwGX + A1wByANlAeUDXgHwA2UB7ANfAdUDVQGsAz4BawMnAToDJwE6AycBOgMoATsDKgE/Aw8BEwQBEAAEAQMP + ARQDIQEwAycBOgMnAToDJwE6AycBOgMnAToDJwE6AycBOgMnAToDJwE6AycBOgMnAToDJwE6AycBOgMn + AToDJwE6AycBOgMnAToDJwE6AycBOgMnAToDJwE6AycBOgMnAToDJwE6AyEBMAMPARQEASQAAyEBLwNR + AZwDXgHtAeIBrwEAAf8B1QGcAQAB/wHJAYoBAAH/AcACAAH/AbsCAAH/AboCAAH/Ab4CAAH/AcYBhwEA + Af8B0wGZAQAB/wHhAa4BAAH/A14B7QNQAZ0DIQEvIAADBgEHA10BzwOQAf8DkgH/A5IB/wOSAf8DkgH/ + A5EB/wORAf8DkQH/A5EB/wORAf8DkQH/A5EB/wORAf8DkQH/A5EB/wORAf8DkQH/A5EB/wORAf8DkQH/ + A5EB/wORAf8DkQH/AZECkgH/A5IB/wOSAf8DkgH/A48B/wNdAc8DBgEIEAADNAFTBAAD+AH/A/YB/wP2 + Af8D9gH/A/YB/wP1Af8D5gH/A8AB/wOXAf8DiQH/AwAB/wMAAf8DAAH/AwAB/wONAf8DrgH/A94B/wPw + Af8D9gH/A/cB/wQAAzgBWxQAAxQBGwNRAaQDWgHyAwAB/wN+Af4DfgH+A34B/gN+Af4DfgH+A30B/gN3 + Af4DYwH+A1AB/gOAAf4DgAH+A4AB/gOAAf4DgAH+A4AB/gOAAf4DgAH+A4AB/gOAAf4DgAH+A4AB/gOA + Af4DAAH/A2cB8gNRAaQDFAEbHAADCgENA0sBjAJtAWwB9wHcAaYBAAH/AcUBhgEAAf8BvAIAAf8BvAIA + Af8BuQIAAf8BtQIAAf8BrAIAAf8BqAIAAf8BqAIAAf8BpwIAAf8BqAIAAf8BrQIAAf8BvQIAAf8B2AGg + AQAB/wJtAWwB9wNLAYwDCgENGAADBgEHA50B/wHvAvAB/wPrAf8B7wHwAfEB/wHvAvEB/wPrAf8D6gH/ A+oB/wPqAf8D6gH/A+oB/wPqAf8D6gH/A+oB/wPqAf8D6gH/A+oB/wPqAf8D6gH/A+oB/wPqAf8D6gH/ - A+oB/wPqAf8D6gH/AuoB6wH/Au8B8AH/A/EB/wLrAe0B/wPwAf8DnQH/AwYBCBAAAzMBUhQAA/gB/wPX - Af8DpwH/AwAB/wORAf8DuQH/A64B/wOYAf8DAAH/AwAB/wMAAf8DAAH/A4AB/wPAAf8D8QH/CAADNwFa - EAADBQEGA1ABmgMAAf8BvAG9AbwB/wHHAsgB/wPCAf8DwgH/A8IB/wPCAf8DwgH/A8IB/wO3Af8DnAH/ - AwAB/wP7Af8LAAH/A8oB/wQAA/UB/wMAAf8DygH/AwAB/wPnAf8DAAH/A5QB/wMAAf8DpQH/A5QB/wNQ - AZoDBQEGFAADHgErA1wBzQHjAbABAAH/AcoBiwEAAf8BuQIAAf8BvQIAAf8BoQGHAQAB/wEAAY4BwwH/ - AQABiwG1Af8BhwGFAQAB/wGtAgAB/wG3AgAB/wGrAgAB/wGrAgAB/wGrAgAB/wGqAgAB/wGoAgAB/wGp - AgAB/wG9AgAB/wHgAa0BAAH/A1wBzQMeASsUAAMGAQcDogH/A+0B/wLpAeoB/wHNAcwBygH/AdIBzwHO - Af8B6wHsAe0B/wPnAf8D5QH/A+QB/wPkAf8D5AH/A+QB/wPkAf8D5AH/A+UB/wPmAf8D5gH/A+UB/wPl - Af8D5QH/A+UB/wPkAf8D5AH/A+UB/wLqAesB/wHUAdIB0QH/Ac0BywHJAf8D6wH/A+4B/wOiAf8DBgEI - EAADMwFSEAAD+QH/A88B/wOeAf8DgQH/A5MB/wPIAf8DwAH/A70B/wPDAf8DsAH/A4kB/wMAAf8DAAH/ - AwAB/wMAAf8DtAH/A/AB/wQAAzcBWhAAAwwBEANIAfYDAAH/Ab0CvgH/AcIBwwHCAf8DvgH/A74B/wO+ - Af8DvgH/A74B/wO+Af8DtAH/A5cB/wMAAf8D9AH/A/4B/wcAAf8DiQH/BAADvAH/AwAB/wPnAf8DAAH/ - AwAB/wMAAf8B+gH7AfoB/wO7Af8DAAH/A4QB/wNiAfYDDAEQEAADJQE3A2UB5wHdAacBAAH/AcIBgAEA - Af8BvAIAAf8BwQIAAf8BqgGKAQAB/wEAAZAB8wH/AQABhgH9Af8BAAGEAfsB/wEAAYMB/QH/AQABhgHr - Af8BAAGHAZoB/wG2AgAB/wGxAgAB/wGqAgAB/wGrAgAB/wGrAgAB/wGrAgAB/wGnAgAB/wGuAgAB/wHV - AZwBAAH/A2UB5wMlATcQAAMGAQcDoAH/A/AB/wHTAdAB0QH/AaYBoQGbAf8DAAH/AcUBwgG/Af8C7QHv - Af8D5QH/A+UB/wPlAf8D5QH/A+UB/wPlAf8D5QH/A+UB/wPmAf8D4wH/A+AB/wPhAf8D5AH/A+YB/wPl - Af8D5QH/A+oB/wHVAtQB/wGcAZYBkQH/AYICAAH/AbcBsgGvAf8B8wL0Af8DoQH/AwYBCBAAAzMBUhAA - A9UB/wOmAf8DlQH/A5EB/wOdAf8DygH/A78B/wO5Af8DsgH/A7gB/wPAAf8DsgH/A4oB/wMAAf8DAAH/ - AwAB/wO8Af8D9gH/AzcBWhAAAw4BEgMAAf8DAAH/Ab0CvAH/AcQBxQHEAf8DwQH/A8EB/wPBAf8BxAHC - Ab4B/wHEAcIBvgH/A78B/wO2Af8DmgH/AwAB/wP0Af8D/AH/BAAD0wH/AwAB/wMAAf8DAAH/A7AB/yAA - A64B/wMOARIMAAMdASkDYAHoAdsBpAEAAf8BwwGBAQAB/wHAAgAB/wG/AgAB/wHIAgAB/wEAAZMBpwH/ - AQABiwL/AQABiAHxAf8BAAGFAfEB/wEAAYMB8QH/AgAB8wH/AgAB/gH/AQABiAHGAf8BnwIAAf8BtgIA - Af8BtAIAAf8BqwIAAf8BqwIAAf8BqwIAAf8BqQIAAf8BqQIAAf8B0AGVAQAB/wNgAegDHQEpDAADBgEH - A6EB/wPwAf8CxgHHAf8C6AHpAf8BvwG8AboB/wGzAbABrQH/Ae4C8AH/A+YB/wPmAf8D5gH/A+YB/wPm - Af8D5gH/A+cB/wPmAf8D3wH/A9UB/wPOAf8D0gH/A9wB/wPlAf8D5gH/A+YB/wLrAewB/wLIAccB/wHm - AucB/wG+AroB/wGmAaIBnwH/AvQB9QH/A6IB/wMGAQgQAAMzAVIMAAPoAf8DuAH/A54B/wOfAf8DnQH/ - A6sB/wPHAf8DxwH/A7sB/wO3Af8DswH/A7IB/wO+Af8DuQH/AwAB/wMAAf8DAAH/AwAB/wPUAf8DNwFa - EAADDgESAUcBIgE1Af4DAAH/Ab8CwQH/AcgCyQH/A8QB/wHKAcgBxAH/AdQB0gHDAf8BwQHCAcoB/wHB - AcIBygH/AdQB0gHDAf8BvgG8AbcB/wKbAZwB/wMAAf8D9AH/A/wB/wH6AvkB/wQAAvoB+wH/As8BzgH/ - A/EB/wQAA/oB/wP5Af8D+gH/AfsC+gH/AfYB+QH3Af8B9gH5AfcB/wL7AfwB/wQAA4AB/gMOARIIAAMJ - AQwDXwHQAd4BqQEAAf8BxQGFAQAB/wHEAYMBAAH/AcMBgQEAAf8BwAIAAf8ByAIAAf8BAAGTAa0B/wEA - AY0B/AH/AQABigHyAf8BAAGHAfEB/wEAAYQB8QH/AQABgQHwAf8CAAHwAf8CAAH4Af8BAAGDAfYB/wEA - AYcBywH/AYYBgwGAAf8BsgIAAf8BrQIAAf8BqwIAAf8BqwIAAf8BqgIAAf8BqQIAAf8B1QGcAQAB/wNf - AdADCQEMCAADBgEHA6EB/wPvAf8D3wH/A7UB/wG7AboBuQH/A+AB/wPqAf8D5wH/A+cB/wPnAf8D5wH/ - A+cB/wPoAf8D7gH/A+cB/wPTAf8DvQH/A7EB/wPAAf8D1QH/A+MB/wPoAf8D5wH/A+kB/wPiAf8DxQH/ - Ab4CvQH/AdcC2AH/A/EB/wOhAf8DBgEIEAADMwFSCAAD/QH/A8sB/wOrAf8DqAH/A6oB/wOPAf8DAAH/ - AwAB/wOCAf8DzAH/A7kB/wO0Af8DswH/A7UB/wO2Af8DAAH/AwAB/wMAAf8DAAH/A6EB/wNPAZkQAAMO - ARIBRgEhATUB/gMAAf8BwwLEAf8BywLNAf8CzQHIAf8CzgHJAf8BAAGBAeIB/wIAAfcB/wIAAfcB/wEA - AYIB4AH/AcMBwgG9Af8BpAGjAZ8B/wMAAf8C9QH0Af8B/AH7AfwB/wHsAfUB9wH/AeoB9wH6Af8B7QH6 - Av8B9gP/AfwC/gH/A/kB/wP5Af8D+QH/AfcB+QH3Af8B7wH4AfAB/wHrAfsB8wH/AesB+wHzAf8B7wH5 - AfMB/wQAA4AB/gMOARIIAANLAY0B5QGzAQAB/wHLAY0BAAH/AccBhwEAAf8BxgGFAQAB/wHDAYIBAAH/ - AcECAAH/AckCAAH/AQABlQGtAf8BAAGOAfwB/wEAAYsB8gH/AQABiAHxAf8BAAGFAfEB/wEAAYIB8QH/ - AgAB8AH/AgAB8AH/AgAB8QH/AgAB+AH/AQABgAL/AQABigHJAf8BrwIAAf8BrAIAAf8BqwIAAf8BqwIA - Af8BqQIAAf8BrgIAAf8B4AGsAQAB/wNLAY0IAAMGAQcDoQH/A+0B/wPrAf8D6QH/AekC6gH/A+sB/wPn - Af8D5wH/A+cB/wPnAf8D5wH/A+cB/wPrAf8D1gH/A8cB/wOrAf8BkQGSAZEB/wObAf8DtQH/A9IB/wPj - Af8D5wH/A+cB/wPnAf8D6gH/A+kB/wPpAf8D7QH/A+0B/wOhAf8DBgEIEAADMwFSCAAD7gH/A8AB/wOs - Af8DrAH/A7kB/wMAAf8DAAH/AwAB/wMAAf8DyAH/A70B/wO2Af8DswH/A8QB/wOgAf8DAAH/AwAB/wMA - Af8DAAH/AwAB/wNgAdsDIQEvDAADDgESAUQBIAEzAf4DAAH/A8UB/wHPAdEBzwH/Ad0B2QHJAf8CAAHQ - Af8CAAH8Af8BqwG7Af4B/wGtAbsB/gH/AgAB/AH/AgABxgH/AbEBrwGfAf8DgQH/AfYB9AH1Af8B7wH2 - AfkB/wHhAfAB9wH/AeoB+QL/AewB+AL/AeEB8AH3Af8B6gHwAfUB/wH6AvkB/wH6AfkB+gH/AfoC+QH/ - AeoB9QHuAf8B5AH3AesB/wHtAf8B9AH/Ae0B/wH0Af8B5QH4AesB/wHyAf0B+AH/A4AB/gMOARIEAAMf - ASwCagFoAfkB1QGcAQAB/wHJAYsBAAH/AckBigEAAf8BxgGGAQAB/wHFAYMBAAH/AcIBgAEAAf8BygIA - Af8BAAGWAagB/wEAAZAB/QH/AQABjQHyAf8BAAGKAfIB/wEAAYYB8QH/AQABhAHxAf8BAAGAAfAB/wIA - AfAB/wIAAfAB/wIAAfAB/wIAAfAB/wEAAYIC/wGXAgAB/wGwAgAB/wGrAgAB/wGrAgAB/wGrAgAB/wGn - AgAB/wG9AgAB/wJqAWgB+QMfASwEAAMGAQcDowH/A+8B/wPoAf8D6QH/A+kB/wPoAf8D6AH/A+kB/wPp - Af8D6QH/A+kB/wPqAf8D7wH/AZUBlgGVAf8BjgGPAY4B/wGUAZYBlQH/AwAB/wOIAf8DsAH/A9IB/wPn - Af8D6gH/A+kB/wPpAf8D6AH/A+kB/wPpAf8D6AH/A+4B/wOjAf8DBgEIEAADMwFSCAAD4QH/A7gB/wOs - Af8DrgH/A7IB/wORAf8DAAH/AwAB/wMAAf8DxgH/A8QB/wPFAf8DuwH/A6AB/wOSAf8DsgH/A5UB/wMA - Af8DAAH/AwAB/wMrAfwDQQFyDAADDgESAUEBHgExAf4DAAH/A8gB/wLZAdQB/wHJAcgBxwH/AgABvQH/ - AgAB7wH/AgAB9QH/AgAB9QH/AgAB7wH/AgABswH/AaABnwGcAf8BhwGGAYUB/wLyAfQB/wHmAe4B8gH/ - Ad4B6wHyAf8B5wH1AfsB/wHkAfMB+QH/Ad4B6wHyAf8B5AHuAfIB/wH5AfcB+QH/A/wB/wH8Af4B/AH/ - AeYB9gHuAf8B4QH0AekB/wHmAfoB7QH/AeoB/AHwAf8B4AH1AegB/wHsAfsB8QH/A4AB/gMOARIEAANR - AZ4B4gGvAQAB/wHNAZABAAH/AcwBjgEAAf8BygGLAQAB/wHHAYgBAAH/AcUBhQEAAf8BwwGBAQAB/wHL - AgAB/wGEAZYBngH/AQABkgH+Af8BAAGOAfIB/wEAAYsB8gH/AQABiAHxAf8BAAGFAfEB/wEAAYIB8QH/ - AgAB8AH/AgAB8AH/AgAB8AH/AgAB8AH/AQABggH7Af8BlQIAAf8BsAIAAf8BqwIAAf8BqwIAAf8BqwIA - Af8BqwIAAf8BqAIAAf8B2AGgAQAB/wNRAZ8EAAMGAQcDpAH/A/AB/wPqAf8D6gH/A+oB/wPqAf8D6gH/ - A+oB/wPqAf8D6gH/A+oB/wPqAf8D9QH/AcsBygHLAf8DzwH/A9oB/wOuAf8DAAH/A64B/wPXAf8D6QH/ - A+sB/wPqAf8D6gH/A+oB/wPqAf8D6gH/A+oB/wPwAf8DpAH/AwYBCBAAAzMBUgQAA/4B/wPXAf8DzwH/ - A8EB/wOtAf8DqAH/A7sB/wMAAf8DAAH/AwAB/wPUAf8DuwH/A5kB/wMAAf8DAAH/A7wB/wPAAf8DvAH/ - AwAB/wMAAf8DAAH/A64B/wNPAZcMAAMOARIBPQEdAS0B/gMAAf8BywLNAf8C2wHXAf8BzwHOAckB/wIA - AY4B/wIAAcsB/wIAAekB/wIAAekB/wIAAcoB/wIAAYUB/wKmAaEB/wGJAYgBhwH/AvIB9AH/AeUB7AHw - Af8B4AHtAfEB/wHhAfAB9QH/AeIB8gH5Af8B5wH1AfoB/wHnAe8B8QH/AfwB+wH8Af8EAAPsAf8BzQHY - AdEB/wHhAfMB6AH/AesB/QHyAf8B6gH7AfAB/wHpAfwB8QH/AewB9wHwAf8DgAH+Aw4EEgEYA14B8AHY - AaABAAH/Ac0BkQEAAf8BzQGQAQAB/wHLAY0BAAH/AckBigEAAf8BxgGGAQAB/wHEAYMBAAH/AcwBgwEA - Af8BAAGZAbgB/wEAAZIB/AH/AQABjwHyAf8BAAGMAfIB/wEAAYoB8gH/AQABhgHxAf8BAAGEAfEB/wEA - AYEB8AH/AgAB8AH/AgAB8AH/AgAB8QH/AQABhAH1Af8BoAIAAf8BrgIAAf8BqwIAAf8BqwIAAf8BqwIA - Af8BqwIAAf8BqAIAAf8BvQIAAf8DXgHwAxIBGAMGAQcDpAH/A/AB/wPqAf8D6gH/A+oB/wPqAf8D6gH/ - A+oB/wPqAf8D6gH/A+oB/wP1Af8DsgH/A74B/wgAA7sB/wMAAf8DuAH/A90B/wPrAf8D6gH/A+oB/wPq - Af8D6gH/A+oB/wPqAf8D6gH/A/AB/wOkAf8DBgEIEAADMwFSBAAD/QH/A+EB/wPyAf8D8gH/A9IB/wOs - Af8DsgH/A7wB/wMAAf8DAAH/A8AB/wMAAf8DgwH/A5kB/wOjAf8DvQH/A7MB/wO7Af8DhgH/AwAB/wMA - Af8DqAH/A1EBogwAAw4BEgE7ARwBLAH+AwAB/wHOAs8B/wPXAf8B7QHqAd4B/wMAAf8CAAHDAf8CAAH8 - Af8CAAH8Af8CAAHEAf8DAAH/Ab4BvAGxAf8DhgH/A/UB/wHwAfQB9QH/AesB+AH8Af8DAAH/AeAB7QHy - Af8B2wHmAesB/wMAAf8D5QH/A5kB/wMAAf8DAAH/AdEB4QHYAf8BvQHLAcIB/wMAAf8B5gH2AesB/wMA - Af8DgAH+Aw4BEgM4AVwB5gG1AQAB/wHTAZkBAAH/Ac8BlAEAAf8BzgGSAQAB/wHMAY4BAAH/AcoBiwEA - Af8BxwGIAQAB/wHGAYMBAAH/AccBigEAAf8BAAGbAdwB/wEAAZMB+AH/AQABkQHzAf8BAAGOAfIB/wEA - AYsB8gH/AQABiAHxAf8BAAGFAfEB/wEAAYIB8AH/AgAB8AH/AgAB8AH/AgAB/gH/AQABiAHFAf8BuAIA - Af8BswIAAf8BrQIAAf8BqwIAAf8BqwIAAf8BqwIAAf8BqgIAAf8BrQIAAf8B4QGuAQAB/wM4AVwDBgEH - A6QB/wPxAf8D6wH/A+sB/wPrAf8D6wH/A+sB/wPrAf8D6wH/A+sB/wPrAf8D/AH/A5gB/wOjAf8IAAOp - Af8DAAH/A8cB/wPkAf8D7QH/A+sB/wPrAf8D6wH/A+sB/wPrAf8D6wH/A+sB/wPxAf8DpAH/AwYBCBAA - AzMBUgQAA/wB/wPVAf8DrgH/AwAB/wMAAf8DswH/A7oB/wPpAf8DAAH/AwAB/wMAAf8DkwH/A7AB/wPD - Af8DugH/A7EB/wOzAf8DugH/A4YB/wMAAf8DAAH/A64B/wNQAZoMAAMOARIBOgEfASwB/gMAAf8B0ALR - Af8D2gH/AtsB2QH/AdwB2gHQAf8CAAGPAf8CAAGjAf8CAAGjAf8CAAGQAf8BzwHNAcQB/wKvAa0B/wOH - Af8D9QH/Av4B/AH/AfoB/gL/AwAB/wHrAfEB9gH/AwAB/wMAAf8D0QH/AwAB/wOUAf8BvAK9Af8B9gH+ - AfkB/wEAAYIBgAH/AwAB/wGKAY4BiwH/AwAB/wOAAf4DDgESA1ABnQHhAa4BAAH/AdIBmAEAAf8B0QGW - AQAB/wHOAZMBAAH/Ac0BkAEAAf8BywGNAQAB/wHIAYkBAAH/AcoBhAEAAf8BtgGTAQAB/wEAAZsB9QH/ - AQABlQH1Af8BAAGSAfMB/wEAAY8B8gH/AQABjAHyAf8BAAGJAfEB/wEAAYYB8gH/AQABggH2Af8BAAGA - AfsB/wEAAYAB/gH/AQABiAHSAf8BsgIAAf8BpQIAAf8BhQGCAQAB/wGoAgAB/wGvAgAB/wGrAgAB/wGr - AgAB/wGrAgAB/wGoAgAB/wHSAZkBAAH/A1ABnQMGAQcDpQH/A/IB/wPsAf8D7AH/A+wB/wPsAf8D7AH/ - A+wB/wPsAf8D7AH/A+wB/wP9Af8DoAH/A5gB/wP8Af8D/gH/A5oB/wMAAf8D1gH/A+oB/wPtAf8D7AH/ - A+wB/wPsAf8D7AH/A+wB/wPsAf8D7AH/A/IB/wOlAf8DBgEIEAADMwFSA7gB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/A4gB/wPqAf8DtAH/AwAB/wMAAf8DAAH/AwAB/wPTAf8DwwH/A7oB/wO7Af8DuQH/A7wB/wOA - Af8DAAH/AwAB/wOAAf4DRAF4DAADDgESATwBIQEuAf4DAAH/A9YB/wHaAtsB/wPVAf8B3wHdAdoB/wHq - AecB2wH/AcUBwwHBAf8BxQHEAcEB/wHoAecB2wH/AdMB0AHOAf8CqQGrAf8DhwH/A/YB/wsAAf8DAAH/ - AwAB/wMAAf8DywH/AwAB/wGXApYB/wMAAf8BzQLLAf8DAAH/AbYBtwG2Af8DAAH/A6YB/wOAAf4DDgES - A10ByQHjAasBAAH/AdsBmgEAAf8B2AGWAQAB/wHPAZQBAAH/Ac4BkQEAAf8BzAGOAQAB/wHJAYsBAAH/ - AdABhwEAAf8BkQGbAZgB/wEAAZoB/gH/AQABlwH0Af8BAAGTAfMB/wEAAZEB8wH/AQABjQHyAf8BAAGK - AfoB/wEAAYsB+AH/AQABjAHbAf8BAAGKAawB/wGQAYMBAAH/AbwCAAH/AZkCAAH/AQABhQH0Af8CAAL/ - AQABiQHgAf8BqwIAAf8BrQIAAf8BqwIAAf8BqwIAAf8BpwIAAf8BxgGHAQAB/wNdAckDBgEHA6YB/wPz - Af8D7QH/A+0B/wPtAf8D7QH/A+0B/wPtAf8D7QH/A+0B/wPtAf8EAAOiAf8DlQH/A/kB/wP7Af8DlgH/ - AwAB/wPjAf8D7gH/A+4B/wPtAf8D7QH/A+0B/wPtAf8D7QH/A+0B/wPtAf8D8wH/A6YB/wMGAQgQAAMz - AVIDAAH/AwAB/wOXAf8DsQH/A/AB/wODAf8DAAH/A4AB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A6EB/wO+ - Af8DuQH/A6oB/wO0Af8DmgH/AwAB/wMAAf8DAAH/A2AB4AMlATcMAAMOARIBPAEjAS4B/gMAAf8BwQG8 - Ab4B/wHsAfMB8AH/A9wB/wHaAtwB/wPcAf8B4QHiAeAB/wHhAeIB4AH/AtsB3AH/A9AB/wGuAq8B/wOL - Af8D9wH/CwAB/wMAAf8D9wH/AwAB/wPWAf8DyAH/AwAB/wOPAf8D8gH/A4AB/wcAAf8D6gH/A4AB/gMO - ARIDYAHgAZoBtQGwAf8BgQGwAcEB/wG0AacBhQH/AdcBlwEAAf8BzgGSAQAB/wHNAZABAAH/AcoBjAEA - Af8B0QGNAQAB/wEAAaEByAH/AQABmwH8Af8BAAGYAfQB/wEAAZUB8wH/AQABkQH0Af8BAAGQAf0B/wEA - AZMByQH/AaMBiAEAAf8BvQIAAf8BwQIAAf8BuQIAAf8BrAIAAf8BAAGGAesB/wIAAfYB/wIAAfAB/wIA - Av8BAAGEAZAB/wG1AgAB/wGrAgAB/wGrAgAB/wGoAgAB/wG+AgAB/wNgAeADBgEHA6YB/wP0Af8D7gH/ - A+4B/wPuAf8D7gH/A+4B/wPuAf8D7gH/A+4B/wPuAf8EAAOkAf8DAAH/A9gB/wPYAf8DAAH/AwAB/wPv - Af8D8QH/A+4B/wPuAf8D7gH/A+4B/wPuAf8D7gH/A+4B/wPuAf8D9AH/A6YB/wMGAQgQAAMzAVIDlQH/ - AwAB/wPzAf8D8QH/A/YB/wOzAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wOcAf8DmAH/ - AwAB/wMAAf8DAAH/AwAB/wMAAf8DnAH/A1EBohAAAw4BEgE5ASQBLAH+AwAB/wMAAf8ByQHCAcUB/wHk - AuUB/wHhAeAB4QH/AeEB4AHhAf8B4QHgAeEB/wHhAeAB4QH/AeEC4AH/AdUC1AH/AbQCswH/AYsBjQGL - Af8D9gH/CwAB/wOdAf8HAAH/A8sB/yAAA4AB/gMOARIDZQHsAQABtwHZAf8BAAG0Av8BAAGzAv8BqwGo - AY8B/wHdAZMBAAH/Ac4BkAEAAf8BzAGNAQAB/wHNAZEBAAH/AQABogHZAf8BAAGcAfoB/wEAAZkB9AH/ - AQABlgH0Af8BAAGUAfoB/wEAAZYBrQH/AcQCAAH/AcACAAH/AawBgAEAAf8BqgIAAf8BxAIAAf8BAAGH - AZkB/wIAAf4B/wIAAfAB/wIAAfAB/wIAAfsB/wEAAYUBpgH/AbYCAAH/AasCAAH/AasCAAH/AagCAAH/ - AboCAAH/A2UB7AMGAQcDpgH/A/QB/wPvAf8D7wH/A+4B/wPuAf8D7gH/A+4B/wPuAf8D7gH/A+4B/wQA - A6UB/wMAAf8DxQH/A8UB/wMAAf8DhgH/A/cB/wPyAf8D7gH/A+4B/wPuAf8D7gH/A+4B/wPuAf8D7gH/ - A+4B/wP0Af8DpgH/AwYBCBAAAzMBUgPbAf8DAAH/A+EB/wPsAf8D3AH/A9wB/wMAAf8DAAH/AwAB/wOY - Af8DnQH/AwAB/wOOAf8DuQH/A8gB/wOzAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wPOAf8DOAFdEAADDgES - ATIBIQEmAf4DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8B5gHj - AeUB/wHyAfAB8QH/Ae0C7AH/AusB6gH/AfYB9AH1Af8B8AHtAe8B/wHqAegB6gH/AewB6wHsAf8B7QHr - AewB/wHsAeoB6wH/AewB6gHrAf8B6wHqAesB/wHsAeoB7AH/AewB6gHrAf8B7QHsAe0B/wH1AfQB9QH/ - A4AB/gMOARIDZQHsAQABuAHVAf8BAAG1Av8BAAGyAfwB/wEAAbEB8gH/AaEBqQGaAf8B1AGWAQAB/wHP - AYwBAAH/AckBlQEAAf8BAAGjAeQB/wEAAZ0B+QH/AQABmwH0Af8BAAGYAfwB/wEAAZoBwwH/AdEBgAEA - Af8BwAIAAf8BwgIAAf8BpgGEAQAB/wEAAZIB1wH/AacBigEAAf8BAAGFAdQB/wIAAfUB/wIAAfAB/wIA - AfAB/wIAAfsB/wEAAYUBpgH/AbYCAAH/AasCAAH/AasCAAH/AagCAAH/AboCAAH/A2UB7AMGAQcDqgH/ - A/kB/wP0Af8D8gH/A/IB/wPxAf8D8AH/A/AB/wPvAf8D7wH/A+8B/wQAA6EB/wOiAf8IAAOhAf8DkQH/ - A/4B/wPxAf8D7wH/A+8B/wPvAf8D7wH/A+8B/wPvAf8D7wH/A+8B/wP1Af8DpwH/AwYBCBAAAzMBUgcA - Af8DmAH/A/IB/wPZAf8EAAOQAf8DAAH/A9YB/wPpAf8D4AH/A90B/wPXAf8D0QH/A84B/wOdAf8DAAH/ - A4AB/wMAAf8DAAH/A7MB/wP0Af8DNwFaEAADDgESASsBHgEiAf4DAAH/AwAB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8B5wHlAeYB/wPxAf8B7AHnAeoB/wHwAesB7QH/Ae0B6gHs - Af8B7AHnAeoB/wHwAesB7QH/Ae0B6gHsAf8B7AHqAesB/wHsAeoB6wH/AewB6gHsAf8B7QHrAewB/wHt - AesB7QH/Ae8B6wHtAf8B8AHtAe8B/wH3AfUB9wH/A4AB/gMOARIDYAHgAYQBuAHMAf8BAAG2Av8BAAGz - AfkB/wEAAbAB+wH/AQABsAL/AYwBqgGxAf8B2QGUAQAB/wHUAZQBAAH/AQABpQHfAf8BAAGeAfoB/wEA - AZwB9AH/AQABmQH5Af8BAAGZAdoB/wGkAZEBAAH/AbABiQEAAf8BpQGJAQAB/wG4AYcBAAH/AQABjwHF - Af8BAAGHAfsB/wEAAYEB8QH/AgAB8AH/AgAB8AH/AgAB8AH/AgAB+wH/AQABhAGkAf8BtgIAAf8BqwIA - Af8BqwIAAf8BqAIAAf8BvgIAAf8DYAHgAwYBBwOqAf8D+QH/A/QB/wP0Af8D9AH/A/QB/wP0Af8D8wH/ - A/MB/wPzAf8D8gH/BAADogH/AaoCqQH/CAADqQH/A50B/wQAA/EB/wPwAf8D8AH/A/AB/wPwAf8D8AH/ - A/AB/wPwAf8D8AH/A/YB/wOoAf8DBgEIEAADMwFSBAADiAH/AwAB/wPwAf8D6QH/A6oB/wMAAf8DAAH/ - A64B/wPjAf8DygH/A8sB/wPOAf8DyAH/A50B/wOBAf8DhgH/AwAB/wMAAf8DqwH/A+cB/wQAAzcBWhAA - Aw4BEgEgARgBGwH+AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ - AusB8AH/AvYB/gH/Au8B9AH/AfAB7wH0Af8B8AHuAfUB/wHwAe4B9QH/AfAB8QH1Af8B8AHxAfUB/wHw - AfEB9QH/AvEB9QH/AfEB8AH3Af8B8QHyAfcB/wLyAfYB/wLyAfkB/wH0AfIB+gH/AfsB+gL/A4AB/gMO - ARIDXQHJAZcBuQG4Af8BAAG4Av8BAAG1AfkB/wEAAbIB+QH/AQABrwH5Af8BAAGtAf4B/wEAAaoBwwH/ - AZ0BpAGYAf8BAAGkAe4B/wEAAaAB9wH/AQABnQH1Af8BAAGaAfMB/wEAAZcB+AH/AQABlgH6Af8BAAGV - AfQB/wEAAZIB+QH/AQABkAHxAf8BAAGJAfEB/wEAAYUB8wH/AQABgwHxAf8BAAGAAfAB/wIAAfAB/wIA - AfAB/wIAAf0B/wEAAYQBlQH/AbUCAAH/AasCAAH/AasCAAH/AacCAAH/AcYBhwEAAf8DXQHJAwYBBwOr - Af8D+gH/A/QB/wP0Af8D9AH/A/QB/wP0Af8D9AH/A/QB/wP0Af8D9AH/BAADpgH/AwAB/wPEAf8DxAH/ - AwAB/wOkAf8EAAPxAf8D8QH/A/EB/wPwAf8D8AH/A/AB/wPwAf8D8AH/A/AB/wP1Af8DpwH/AwYBCBAA - AzMBUgQAA8gB/wMAAf8DhwH/AwAB/wMAAf8DAAH/AwAB/wPLAf8D2wH/A88B/wPEAf8DrAH/A5oB/wOL - Af8DhwH/AwAB/wOAAf8DtwH/A+cB/wPxAf8EAAM3AVoQAAMOARIBHQEXARkB/gMAAf8DAAH/AwAB/wMA - Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wHgAtwB/wHsAeoB6wH/AeYB4wHmAf8B5gHj - AeYB/wHmAeMB5gH/AeYB4wHmAf8B5gHjAeYB/wHmAeMB5gH/AeYB4wHmAf8B5wHjAeYB/wHnAuYB/wHn - AeUB5gH/AecB5QHmAf8B5wHlAeYB/wHoAeYB6AH/AfEC7QH/A4AB/gMOARIDUAGdAbUBugGZAf8BAAG5 - Av8BAAG2AfkB/wEAAbMB+QH/AQABsAH4Af8BAAGuAfgB/wEAAasB/gH/AQABqQL/AQABpAH3Af8BAAGi - AfUB/wEAAZ8B9QH/AQABnAH0Af8BAAGZAfQB/wEAAZYB9AH/AQABkgH0Af8BAAGQAfMB/wEAAYwB+gH/ - AQABjAH5Af8BAAGHAfAB/wEAAYMB9gH/AQABgQH7Af8CAAH5Af8CAAH4Af8BAAGDAf4B/wGXAgAB/wGw - AgAB/wGrAgAB/wGrAgAB/wGoAgAB/wHSAZkBAAH/A1ABnQMGAQcDqwH/A/sB/wP1Af8D9QH/A/UB/wP1 - Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wQAA74B/wMAAf8DAAH/AwAB/wMAAf8DvgH/BAAD9gH/A/UB/wP1 - Af8D9AH/A/QB/wPzAf8D8wH/A/MB/wPyAf8D+AH/A6oB/wMGAQgQAAMzAVIEAAPuAf8DAAH/AwAB/wMA - Af8DqAH/A9kB/wPwAf8D2QH/A88B/wPTAf8D0AH/A6AB/wOSAf8DlQH/A5gB/wOsAf8D1AH/A+gB/wPt - Af8D7gH/BAADNwFaEAADDgESAYABcQFzAf4B0QG5AbwB/wHKAbMBtgH/AckBsgG1Af8ByQGyAbUB/wHJ - AbIBtQH/AckBsgG1Af8ByQGyAbUB/wHJAbIBtQH/AckBsgG1Af8ByQGyAbUB/wHJAbQBuwH/AcYCrAH/ - AcwCAAH/AcoCAAH/AcoCAAH/AcoCAAH/AcoCAAH/AcoCAAH/AcoCAAH/AcoCAAH/AcoCAAH/AcoCAAH/ - AcoCAAH/AckCAAH/AckCAAH/AckCAAH/AcoCAAH/AdICAAH/AYABNQETAf4DDgESAzgBXAHXAbkBAAH/ - AQABugH2Af8BAAG3AfwB/wEAAbUB+QH/AQABsgH5Af8BAAGvAfgB/wEAAawB+AH/AQABqQH3Af8BAAGm - AfYB/wEAAaMB9gH/AQABoAH1Af8BAAGdAfUB/wEAAZoB9AH/AQABmAH0Af8BAAGUAfMB/wEAAZIB/QH/ - AQABkwHUAf8BnQGUAQAB/wEAAY8B7AH/AQABiwHaAf8BAAGKAacB/wEAAYgBvwH/AQABhwHRAf8BAAGH - AZsB/wGzAgAB/wGrAgAB/wGrAgAB/wGqAgAB/wGtAgAB/wHhAa4BAAH/AzgBXAMGAQcDrAH/A/wB/wP2 - Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP4Af8D+wH/A/MB/wHxAvMB/wHxAvMB/wPz - Af8D+wH/A/gB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/cB/wP8Af8DrAH/AwYBCBAA - AzMBUgQAA+0B/wPTAf8DygH/A+sB/wPrAf8D6wH/A+sB/wPkAf8D2gH/A9UB/wPOAf8DwgH/A8IB/wPL - Af8D2gH/A+IB/wPjAf8D4wH/A+MB/wPjAf8D/gH/AzgBWxAAAw4BEgGAAWsBbQH+AcYBqgGsAf8BvwGj - AaUB/wG+AaIBpAH/Ab4BogGkAf8BvgGiAaQB/wG+AaIBpAH/Ab4BogGkAf8BvgGiAaQB/wG+AaIBpAH/ - Ab4BogGjAf8BvgGjAagB/wG+AaIBoQH/AdACAAH/AdACAAH/AdACAAH/AdACAAH/AdACAAH/AdACAAH/ - AdACAAH/AdACAAH/AdACAAH/AdACAAH/AdACAAH/AdACAAH/AdACAAH/AdACAAH/AdECAAH/AdgCAAH/ - AYABNgETAf4DDgQSARgDXgHwAYQBugHNAf8BAAG5Av8BAAG2AfkB/wEAAbMB+QH/AQABsAH4Af8BAAGu - AfgB/wEAAaoB9wH/AQABqAH3Af8BAAGkAfYB/wEAAaIB9gH/AQABngH1Af8BAAGcAfQB/wEAAZkB9AH/ - AQABlgH8Af8BAAGYAbUB/wHDAYIBAAH/AcUCAAH/AaQBiwEAAf8BtQIAAf8BvwIAAf8BvAIAAf8BuQIA - Af8BtgIAAf8BqwIAAf8BqwIAAf8BqwIAAf8BqAIAAf8BvQIAAf8DXgHwAxIBGAMGAQcDqwH/A/wB/wP3 - Af8D9wH/A/cB/wP3Af8D9wH/A/cB/wP3Af8D9wH/A/cB/wP3Af8D+gH/A/0B/wP+Af8D/gH/A/0B/wP6 - Af8D9wH/A/cB/wP3Af8D9wH/A/cB/wP3Af8D9wH/A/cB/wP3Af8D9wH/A/wB/wOrAf8DBgEIEAADMwFS - BAAD7AH/A+oB/wPqAf8D6gH/A+oB/wPqAf8D6gH/A+oB/wPmAf8D4AH/A9oB/wPaAf8D3QH/A98B/wPb - Af8DzwH/A8cB/wPFAf8DxwH/A8IB/wPXAf8DNQFVEAADDgESAYABaQFsAf4BxQGnAaoB/wG+AaABpAH/ - Ab0BnwGjAf8BvQGfAaMB/wG9AZ8BowH/Ab0BnwGjAf8BvQGfAaMB/wG9AZ8BowH/Ab0BnwGjAf8BvQGf - AaEB/wG9AaABpwH/Ab0BngGgAf8B0gIAAf8B0gIAAf8B0QIAAf8B0wIAAf8B0gIAAf8B0gIAAf8B0QIA - Af8B0wIAAf8B0QIAAf8B0wIAAf8B0QIAAf8BzwIAAf8B1QIAAf8B1gIAAf8B0wIAAf8B2wIAAf8BgAE6 - ARQB/gMOARIEAANRAZ8BwQG6AYwB/wEAAboB/gH/AQABtwH6Af8BAAG0AfkB/wEAAbIB+AH/AQABrwH4 - Af8BAAGsAfgB/wEAAakB9wH/AQABpgH2Af8BAAGjAfYB/wEAAaAB9QH/AQABnQH1Af8BAAGaAfsB/wEA - AZwBywH/AdIBhAEAAf8BygIAAf8BvQGBAQAB/wGaAY4BAAH/AbcCAAH/AbQCAAH/AbICAAH/AbACAAH/ - Aa0CAAH/AawCAAH/AasCAAH/AasCAAH/AagCAAH/AdgBoAEAAf8DUQGfBAADBgEHA6wB/wP8Af8D+QH/ - CAAD+QH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4 - Af8D+AH/A/gB/wP4Af8D+AH/A/kB/wL+Av8EAAH5AvsB/wP8Af8DrAH/AwYBCBAAAzMBUgQAA+oB/wPo - Af8D6AH/A+gB/wPoAf8D6AH/A+gB/wPoAf8D6AH/A+gB/wPoAf8D6AH/A+kB/wPiAf8DzAH/A6MB/wOL - Af8DhwH/AwAB/wOMAf8DYgHvAwkBCxAAAw4BEgGAAWwBbgH+AcYBqwGtAf8BvwGkAaYB/wG+AaMBpQH/ - Ab4BowGlAf8BvgGjAaUB/wG+AaMBpQH/Ab4BowGlAf8BvgGjAaUB/wG+AaMBpQH/Ab4BowGlAf8BvgGk - AakB/wG/AqMB/wHYAgAB/wHZAgAB/wHXAgAB/wH5AeMBygH/AeIBkAEAAf8B1gIAAf8B2wIAAf8B+gHo - AdQB/wHbAgAB/wH2Ad4BwwH/Ad0CAAH/AekBrAEAAf8B9wHZAbgB/wHxAcIBjAH/AeABggEAAf8B4QIA - Af8BgAE+ARQB/gMOARIEAAMfASwCagFoAfkBgwG6Ac8B/wEAAbkC/wEAAbYB+QH/AQABswH5Af8BAAGw - AfgB/wEAAa0B+AH/AQABqgH3Af8BAAGoAfcB/wEAAaQB9gH/AQABoQH1Af8BAAGeAfUB/wEAAZsB+gH/ - AQABnAHMAf8BmAGUAYUB/wGPAZQBjQH/AQABlQHPAf8BAAGQAv8BkgGNAQAB/wG9AgAB/wGzAgAB/wGx - AgAB/wGvAgAB/wGtAgAB/wGrAgAB/wGnAgAB/wG9AgAB/wJqAWgB+QMfASwEAAMGAQcDrgH/A/wB/wQA - AeIB3wHeAf8B5AHiAeAB/wQAA/oB/wP5Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP5 - Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP5Af8D+gH/BAAB5AHjAeEB/wHgAd4B2wH/BAAD/AH/A64B/wMG - AQgQAAMzAVIEAAPoAf8D5gH/A+YB/wPmAf8D5gH/A+YB/wPmAf8D5gH/A+YB/wPmAf8D5gH/A+YB/wPn - Af8D3gH/A78B/wMAAf8DAAH/AwAB/wOQAf8DogH/AyEBMBQAAw4BEgGAAW8BcQH+AcoBrgGwAf8BwwGn - AakB/wHCAaYBqAH/AcIBpgGoAf8BwgGmAagB/wHCAaYBqAH/AcIBpgGoAf8BwgGmAagB/wHCAaYBqAH/ - AcIBpgGoAf8BwgGnAa0B/wHDAaUBpgH/Ad4CAAH/AeACAAH/Ad0CAAH/Af4B8gHmAf8B6wGdAQAB/wHe - AgAB/wHiAgAB/wH+AfsB9gH/AeACAAH/AfsB7AHaAf8B6AGSAQAD/wH+Af8B7AGsAQAB/wHnAZcBAAH/ - AeQCAAH/AegCAAH/AYABQgEUAf4DDgESCAADSwGNAdUBuQEAAf8BAAG5AfIB/wEAAbcB/QH/AQABtAH5 - Af8BAAGxAfgB/wEAAa4B+AH/AQABrAH3Af8BAAGpAfcB/wEAAaYB9gH/AQABowH2Af8BAAGgAfUB/wEA - AZ0B9AH/AQABmgH4Af8BAAGYAv8BAAGVAf4B/wEAAZAC/wEAAZMB/AH/AaYBiQEAAf8BuwIAAf8BtAIA - Af8BsgIAAf8BsAIAAf8BrgIAAf8BqgIAAf8BrgIAAf8B4AGsAQAB/wNLAY0IAAMGAQcDrwH/A/wB/wHf - Ad4B3QH/AasBpQGgAf8DAAH/AdMBzwHNAf8EAAP6Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/ - A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP6Af8EAAHoAecB6AH/AbsBtQGxAf8DAAH/AcMBvQG7 - Af8D/AH/A68B/wMGAQgQAAMzAVIEAAPnAf8D5QH/A+UB/wPlAf8D5QH/A+UB/wPlAf8D5QH/A+UB/wPl - Af8D5QH/A+YB/wPmAf8D1wH/A7YB/wPmAf8D7QH/BAAD7AH/AyUBNxgAAw4BEgGAAXQBdgH+Ac8BtAG2 - Af8ByAGtAa8B/wHGAawBrgH/AcYBrAGuAf8BxgGsAa4B/wHGAawBrgH/AcYBrAGuAf8BxgGsAa4B/wHG - AawBrgH/AcYBrAGuAf8BxQGtAbIB/wHGAasBrAH/AegCAAH/AegCAAH/AecCAAH/AfsB6gHVAf8B+gHh - AcEB/wH1AcEBhAH/AekCAAH/Af4B/wH+Af8B6AIAAf8B+gHqAdIB/wHtAZEBAAH/AfwB9AHqAf8B8gGx - AQAB/wQAAe4BlgEAAf8B8AIAAf8BgAFGARYB/gMOARIIAAMJAQwCXwFbAdABugG5AZMB/wEAAbgB/QH/ - AQABtgH8Af8BAAGzAfkB/wEAAbAB+AH/AQABrQH4Af8BAAGqAfcB/wEAAacB9wH/AQABpAH7Af8BAAGh - AfYB/wEAAZ4B9QH/AQABmwH0Af8BAAGYAfQB/wEAAZQB/AH/AQABmAHkAf8BngGRAQAB/wHAAgAB/wG3 - AgAB/wG1AgAB/wGzAgAB/wGxAgAB/wGuAgAB/wGrAgAB/wHVAZwBAAH/A18B0AMJAQwIAAMGAQcDsAH/ - A/wB/wPJAf8B1QHUAdUB/wGyAbEBrgH/AbkBtgGzAf8EAAP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7 - Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8EAAPZAf8BzAHNAcwB/wHJAccBxQH/ - AbUBsgGuAf8D/AH/A7AB/wMGAQgQAAMzAVIEAAPmAf8D5AH/A+QB/wPkAf8D5AH/A+QB/wPkAf8D5AH/ - A+QB/wPkAf8D5AH/A+UB/wPjAf8D0wH/A7IB/wP5Af8EAAPpAf8DKAE7HAADDgESAYABegF8Af4B1AG7 - Ab0B/wHMAbQBtgH/AcsBswG1Af8BywGzAbUB/wHLAbMBtQH/AcsBswG1Af8BywGzAbUB/wHLAbMBtQH/ - AcsBswG1Af8BywGzAbUB/wHKAbQBuwH/AcsCswH/AfACAAH/AfECAAH/Ae4CAAH/Af4B8gHmAf8B8gGa - AQAB/wHtAgAB/wHuAgAB/wH6AccBiwH/AfACAAH/AfwB7wHeAf8B8QGMAQAB/wHyAZkBAAH/AfkB0AGe - Af8B9wG9AQAB/wHxAgAB/wH4AYMBAAH/AYABSwEWAf4DDgESDAADHQEpA2AB6AGwAbkBnwH/AQABtwH9 - Af8BAAG0Af0B/wEAAbEB+AH/AQABrgH4Af8BAAGrAf0B/wEAAawBxQH/AQABqQG9Af8BAAGjAfoB/wEA - AaAC/wEAAZ4C/wEAAZwC/wEAAZ0B2wH/AboBjQEAAf8BxgIAAf8BugIAAf8BuAIAAf8BtgIAAf8BtAIA - Af8BsQIAAf8BrgIAAf8B0QGXAQAB/wNgAegDHQEpDAADBgEHA7EB/wP9Af8D9QH/Ac8B0QHQAf8C1AHV - Af8D9QH/BAAD/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/ - A/wB/wP8Af8D/AH/BAAD+AH/AcMCxAH/AtIB0QH/A/EB/wP9Af8DsQH/AwYBCBAAAzMBUgP9Af8D5AH/ - A+IB/wPiAf8D4gH/A+IB/wPiAf8D4gH/A+IB/wPiAf8D4gH/A+IB/wPjAf8D4QH/A84B/wOyAf8EAAPk - Af8DKAE8IAADDAEQAYYCAAH/AdkBwgHDAf8B0AG6AbwB/wHQAbkBuwH/AdABuQG7Af8B0AG5AbsB/wHQ - AbkBuwH/AdABuQG7Af8B0AG5AbsB/wHQAbkBuwH/AdABuQG7Af8BzwG6AcAB/wHQAbkBuAH/AfYBggEA - Af8B9wGBAQAB/wH2AgAB/wH8AeABvQH/AfwB4AG+Af8B/AHXAasB/wH3AZsBAAH/AfoByAGNAf8B9wGC - AQAB/wH+AfUB7gH/AfgBnAEAAf8B9gIAAf8B9gIAAf8B9gIAAf8B9wGBAQAC/wGKAQAB/wGpAgAB/wMM - ARAQAAMlATcCZQFcAecBuQG4AZMB/wEAAbYB8gH/AQABsgL/AQABrwH5Af8BAAGtAfoB/wEAAaoB7QH/ - AZYBrAGpAf8BpAGqAZgB/wGbAaEBlQH/AZABnAGaAf8BoQGYAYIB/wHDAYoBAAH/AcQCAAH/Ab0CAAH/ - AbwCAAH/AbkCAAH/AbcCAAH/AbICAAH/AbUCAAH/AdcBnwEAAf8DZQHnAyUBNxAAAwQBBQOuAf8D+AH/ + A+oB/wPqAf8C6gHrAf8C7wHwAf8D8QH/AusB7QH/A/AB/wOdAf8DBgEIEAADMwFSFAAD+AH/A9cB/wOn + Af8DAAH/A5EB/wO5Af8DrgH/A5gB/wMAAf8DAAH/AwAB/wMAAf8DgAH/A8AB/wPxAf8IAAM3AVoQAAMF + AQYDUAGaAwAB/wG8Ab0BvAH/AccCyAH/A8IB/wPCAf8DwgH/A8IB/wPCAf8DwgH/A7cB/wOcAf8DAAH/ + A/sB/wsAAf8DygH/BAAD9QH/AwAB/wPKAf8DAAH/A+cB/wMAAf8DlAH/AwAB/wOlAf8DlAH/A1ABmgMF + AQYUAAMeASsDXAHNAeMBsAEAAf8BygGLAQAB/wG5AgAB/wG9AgAB/wGhAYcBAAH/AQABjgHDAf8BAAGL + AbUB/wGHAYUBAAH/Aa0CAAH/AbcCAAH/AasCAAH/AasCAAH/AasCAAH/AaoCAAH/AagCAAH/AakCAAH/ + Ab0CAAH/AeABrQEAAf8DXAHNAx4BKxQAAwYBBwOiAf8D7QH/AukB6gH/Ac0BzAHKAf8B0gHPAc4B/wHr + AewB7QH/A+cB/wPlAf8D5AH/A+QB/wPkAf8D5AH/A+QB/wPkAf8D5QH/A+YB/wPmAf8D5QH/A+UB/wPl + Af8D5QH/A+QB/wPkAf8D5QH/AuoB6wH/AdQB0gHRAf8BzQHLAckB/wPrAf8D7gH/A6IB/wMGAQgQAAMz + AVIQAAP5Af8DzwH/A54B/wOBAf8DkwH/A8gB/wPAAf8DvQH/A8MB/wOwAf8DiQH/AwAB/wMAAf8DAAH/ + AwAB/wO0Af8D8AH/BAADNwFaEAADDAEQA0gB9gMAAf8BvQK+Af8BwgHDAcIB/wO+Af8DvgH/A74B/wO+ + Af8DvgH/A74B/wO0Af8DlwH/AwAB/wP0Af8D/gH/BwAB/wOJAf8EAAO8Af8DAAH/A+cB/wMAAf8DAAH/ + AwAB/wH6AfsB+gH/A7sB/wMAAf8DhAH/A2IB9gMMARAQAAMlATcDZQHnAd0BpwEAAf8BwgGAAQAB/wG8 + AgAB/wHBAgAB/wGqAYoBAAH/AQABkAHzAf8BAAGGAf0B/wEAAYQB+wH/AQABgwH9Af8BAAGGAesB/wEA + AYcBmgH/AbYCAAH/AbECAAH/AaoCAAH/AasCAAH/AasCAAH/AasCAAH/AacCAAH/Aa4CAAH/AdUBnAEA + Af8DZQHnAyUBNxAAAwYBBwOgAf8D8AH/AdMB0AHRAf8BpgGhAZsB/wMAAf8BxQHCAb8B/wLtAe8B/wPl + Af8D5QH/A+UB/wPlAf8D5QH/A+UB/wPlAf8D5QH/A+YB/wPjAf8D4AH/A+EB/wPkAf8D5gH/A+UB/wPl + Af8D6gH/AdUC1AH/AZwBlgGRAf8BggIAAf8BtwGyAa8B/wHzAvQB/wOhAf8DBgEIEAADMwFSEAAD1QH/ + A6YB/wOVAf8DkQH/A50B/wPKAf8DvwH/A7kB/wOyAf8DuAH/A8AB/wOyAf8DigH/AwAB/wMAAf8DAAH/ + A7wB/wP2Af8DNwFaEAADDgESAwAB/wMAAf8BvQK8Af8BxAHFAcQB/wPBAf8DwQH/A8EB/wHEAcIBvgH/ + AcQBwgG+Af8DvwH/A7YB/wOaAf8DAAH/A/QB/wP8Af8EAAPTAf8DAAH/AwAB/wMAAf8DsAH/IAADrgH/ + Aw4BEgwAAx0BKQNgAegB2wGkAQAB/wHDAYEBAAH/AcACAAH/Ab8CAAH/AcgCAAH/AQABkwGnAf8BAAGL + Av8BAAGIAfEB/wEAAYUB8QH/AQABgwHxAf8CAAHzAf8CAAH+Af8BAAGIAcYB/wGfAgAB/wG2AgAB/wG0 + AgAB/wGrAgAB/wGrAgAB/wGrAgAB/wGpAgAB/wGpAgAB/wHQAZUBAAH/A2AB6AMdASkMAAMGAQcDoQH/ + A/AB/wLGAccB/wLoAekB/wG/AbwBugH/AbMBsAGtAf8B7gLwAf8D5gH/A+YB/wPmAf8D5gH/A+YB/wPm + Af8D5wH/A+YB/wPfAf8D1QH/A84B/wPSAf8D3AH/A+UB/wPmAf8D5gH/AusB7AH/AsgBxwH/AeYC5wH/ + Ab4CugH/AaYBogGfAf8C9AH1Af8DogH/AwYBCBAAAzMBUgwAA+gB/wO4Af8DngH/A58B/wOdAf8DqwH/ + A8cB/wPHAf8DuwH/A7cB/wOzAf8DsgH/A74B/wO5Af8DAAH/AwAB/wMAAf8DAAH/A9QB/wM3AVoQAAMO + ARIBSAEjATYB/gMAAf8BvwLBAf8ByALJAf8DxAH/AcoByAHEAf8B1AHSAcMB/wHBAcIBygH/AcEBwgHK + Af8B1AHSAcMB/wG+AbwBtwH/ApsBnAH/AwAB/wP0Af8D/AH/AfoC+QH/BAAC+gH7Af8CzwHOAf8D8QH/ + BAAD+gH/A/kB/wP6Af8B+wL6Af8B9gH5AfcB/wH2AfkB9wH/AvsB/AH/BAADgAH+Aw4BEggAAwkBDANf + AdAB3gGpAQAB/wHFAYUBAAH/AcQBgwEAAf8BwwGBAQAB/wHAAgAB/wHIAgAB/wEAAZMBrQH/AQABjQH8 + Af8BAAGKAfIB/wEAAYcB8QH/AQABhAHxAf8BAAGBAfAB/wIAAfAB/wIAAfgB/wEAAYMB9gH/AQABhwHL + Af8BhgGDAYAB/wGyAgAB/wGtAgAB/wGrAgAB/wGrAgAB/wGqAgAB/wGpAgAB/wHVAZwBAAH/A18B0AMJ + AQwIAAMGAQcDoQH/A+8B/wPfAf8DtQH/AbsBugG5Af8D4AH/A+oB/wPnAf8D5wH/A+cB/wPnAf8D5wH/ + A+gB/wPuAf8D5wH/A9MB/wO9Af8DsQH/A8AB/wPVAf8D4wH/A+gB/wPnAf8D6QH/A+IB/wPFAf8BvgK9 + Af8B1wLYAf8D8QH/A6EB/wMGAQgQAAMzAVIIAAP9Af8DywH/A6sB/wOoAf8DqgH/A48B/wMAAf8DAAH/ + A4IB/wPMAf8DuQH/A7QB/wOzAf8DtQH/A7YB/wMAAf8DAAH/AwAB/wMAAf8DoQH/A08BmRAAAw4BEgFH + ASIBNgH+AwAB/wHDAsQB/wHLAs0B/wLNAcgB/wLOAckB/wEAAYEB4gH/AgAB9wH/AgAB9wH/AQABggHg + Af8BwwHCAb0B/wGkAaMBnwH/AwAB/wL1AfQB/wH8AfsB/AH/AewB9QH3Af8B6gH3AfoB/wHtAfoC/wH2 + A/8B/AL+Af8D+QH/A/kB/wP5Af8B9wH5AfcB/wHvAfgB8AH/AesB+wHzAf8B6wH7AfMB/wHvAfkB8wH/ + BAADgAH+Aw4BEggAA0sBjQHlAbMBAAH/AcsBjQEAAf8BxwGHAQAB/wHGAYUBAAH/AcMBggEAAf8BwQIA + Af8ByQIAAf8BAAGVAa0B/wEAAY4B/AH/AQABiwHyAf8BAAGIAfEB/wEAAYUB8QH/AQABggHxAf8CAAHw + Af8CAAHwAf8CAAHxAf8CAAH4Af8BAAGAAv8BAAGKAckB/wGvAgAB/wGsAgAB/wGrAgAB/wGrAgAB/wGp + AgAB/wGuAgAB/wHgAawBAAH/A0sBjQgAAwYBBwOhAf8D7QH/A+sB/wPpAf8B6QLqAf8D6wH/A+cB/wPn + Af8D5wH/A+cB/wPnAf8D5wH/A+sB/wPWAf8DxwH/A6sB/wGRAZIBkQH/A5sB/wO1Af8D0gH/A+MB/wPn + Af8D5wH/A+cB/wPqAf8D6QH/A+kB/wPtAf8D7QH/A6EB/wMGAQgQAAMzAVIIAAPuAf8DwAH/A6wB/wOs + Af8DuQH/AwAB/wMAAf8DAAH/AwAB/wPIAf8DvQH/A7YB/wOzAf8DxAH/A6AB/wMAAf8DAAH/AwAB/wMA + Af8DAAH/A2AB2wMhAS8MAAMOARIBRQEhATQB/gMAAf8DxQH/Ac8B0QHPAf8B3QHZAckB/wIAAdAB/wIA + AfwB/wGrAbsB/gH/Aa0BuwH+Af8CAAH8Af8CAAHGAf8BsQGvAZ8B/wOBAf8B9gH0AfUB/wHvAfYB+QH/ + AeEB8AH3Af8B6gH5Av8B7AH4Av8B4QHwAfcB/wHqAfAB9QH/AfoC+QH/AfoB+QH6Af8B+gL5Af8B6gH1 + Ae4B/wHkAfcB6wH/Ae0B/wH0Af8B7QH/AfQB/wHlAfgB6wH/AfIB/QH4Af8DgAH+Aw4BEgQAAx8BLAJq + AWgB+QHVAZwBAAH/AckBiwEAAf8ByQGKAQAB/wHGAYYBAAH/AcUBgwEAAf8BwgGAAQAB/wHKAgAB/wEA + AZYBqAH/AQABkAH9Af8BAAGNAfIB/wEAAYoB8gH/AQABhgHxAf8BAAGEAfEB/wEAAYAB8AH/AgAB8AH/ + AgAB8AH/AgAB8AH/AgAB8AH/AQABggL/AZcCAAH/AbACAAH/AasCAAH/AasCAAH/AasCAAH/AacCAAH/ + Ab0CAAH/AmoBaAH5Ax8BLAQAAwYBBwOjAf8D7wH/A+gB/wPpAf8D6QH/A+gB/wPoAf8D6QH/A+kB/wPp + Af8D6QH/A+oB/wPvAf8BlQGWAZUB/wGOAY8BjgH/AZQBlgGVAf8DAAH/A4gB/wOwAf8D0gH/A+cB/wPq + Af8D6QH/A+kB/wPoAf8D6QH/A+kB/wPoAf8D7gH/A6MB/wMGAQgQAAMzAVIIAAPhAf8DuAH/A6wB/wOu + Af8DsgH/A5EB/wMAAf8DAAH/AwAB/wPGAf8DxAH/A8UB/wO7Af8DoAH/A5IB/wOyAf8DlQH/AwAB/wMA + Af8DAAH/AysB/ANBAXIMAAMOARIBQgEfATIB/gMAAf8DyAH/AtkB1AH/AckByAHHAf8CAAG9Af8CAAHv + Af8CAAH1Af8CAAH1Af8CAAHvAf8CAAGzAf8BoAGfAZwB/wGHAYYBhQH/AvIB9AH/AeYB7gHyAf8B3gHr + AfIB/wHnAfUB+wH/AeQB8wH5Af8B3gHrAfIB/wHkAe4B8gH/AfkB9wH5Af8D/AH/AfwB/gH8Af8B5gH2 + Ae4B/wHhAfQB6QH/AeYB+gHtAf8B6gH8AfAB/wHgAfUB6AH/AewB+wHxAf8DgAH+Aw4BEgQAA1EBngHi + Aa8BAAH/Ac0BkAEAAf8BzAGOAQAB/wHKAYsBAAH/AccBiAEAAf8BxQGFAQAB/wHDAYEBAAH/AcsCAAH/ + AYQBlgGeAf8BAAGSAf4B/wEAAY4B8gH/AQABiwHyAf8BAAGIAfEB/wEAAYUB8QH/AQABggHxAf8CAAHw + Af8CAAHwAf8CAAHwAf8CAAHwAf8BAAGCAfsB/wGVAgAB/wGwAgAB/wGrAgAB/wGrAgAB/wGrAgAB/wGr + AgAB/wGoAgAB/wHYAaABAAH/A1EBnwQAAwYBBwOkAf8D8AH/A+oB/wPqAf8D6gH/A+oB/wPqAf8D6gH/ + A+oB/wPqAf8D6gH/A+oB/wP1Af8BywHKAcsB/wPPAf8D2gH/A64B/wMAAf8DrgH/A9cB/wPpAf8D6wH/ + A+oB/wPqAf8D6gH/A+oB/wPqAf8D6gH/A/AB/wOkAf8DBgEIEAADMwFSBAAD/gH/A9cB/wPPAf8DwQH/ + A60B/wOoAf8DuwH/AwAB/wMAAf8DAAH/A9QB/wO7Af8DmQH/AwAB/wMAAf8DvAH/A8AB/wO8Af8DAAH/ + AwAB/wMAAf8DrgH/A08BlwwAAw4BEgE+AR4BLgH+AwAB/wHLAs0B/wLbAdcB/wHPAc4ByQH/AgABjgH/ + AgABywH/AgAB6QH/AgAB6QH/AgABygH/AgABhQH/AqYBoQH/AYkBiAGHAf8C8gH0Af8B5QHsAfAB/wHg + Ae0B8QH/AeEB8AH1Af8B4gHyAfkB/wHnAfUB+gH/AecB7wHxAf8B/AH7AfwB/wQAA+wB/wHNAdgB0QH/ + AeEB8wHoAf8B6wH9AfIB/wHqAfsB8AH/AekB/AHxAf8B7AH3AfAB/wOAAf4DDgQSARgDXgHwAdgBoAEA + Af8BzQGRAQAB/wHNAZABAAH/AcsBjQEAAf8ByQGKAQAB/wHGAYYBAAH/AcQBgwEAAf8BzAGDAQAB/wEA + AZkBuAH/AQABkgH8Af8BAAGPAfIB/wEAAYwB8gH/AQABigHyAf8BAAGGAfEB/wEAAYQB8QH/AQABgQHw + Af8CAAHwAf8CAAHwAf8CAAHxAf8BAAGEAfUB/wGgAgAB/wGuAgAB/wGrAgAB/wGrAgAB/wGrAgAB/wGr + AgAB/wGoAgAB/wG9AgAB/wNeAfADEgEYAwYBBwOkAf8D8AH/A+oB/wPqAf8D6gH/A+oB/wPqAf8D6gH/ + A+oB/wPqAf8D6gH/A/UB/wOyAf8DvgH/CAADuwH/AwAB/wO4Af8D3QH/A+sB/wPqAf8D6gH/A+oB/wPq + Af8D6gH/A+oB/wPqAf8D8AH/A6QB/wMGAQgQAAMzAVIEAAP9Af8D4QH/A/IB/wPyAf8D0gH/A6wB/wOy + Af8DvAH/AwAB/wMAAf8DwAH/AwAB/wODAf8DmQH/A6MB/wO9Af8DswH/A7sB/wOGAf8DAAH/AwAB/wOo + Af8DUQGiDAADDgESATwBHQEtAf4DAAH/Ac4CzwH/A9cB/wHtAeoB3gH/AwAB/wIAAcMB/wIAAfwB/wIA + AfwB/wIAAcQB/wMAAf8BvgG8AbEB/wOGAf8D9QH/AfAB9AH1Af8B6wH4AfwB/wMAAf8B4AHtAfIB/wHb + AeYB6wH/AwAB/wPlAf8DmQH/AwAB/wMAAf8B0QHhAdgB/wG9AcsBwgH/AwAB/wHmAfYB6wH/AwAB/wOA + Af4DDgESAzgBXAHmAbUBAAH/AdMBmQEAAf8BzwGUAQAB/wHOAZIBAAH/AcwBjgEAAf8BygGLAQAB/wHH + AYgBAAH/AcYBgwEAAf8BxwGKAQAB/wEAAZsB3AH/AQABkwH4Af8BAAGRAfMB/wEAAY4B8gH/AQABiwHy + Af8BAAGIAfEB/wEAAYUB8QH/AQABggHwAf8CAAHwAf8CAAHwAf8CAAH+Af8BAAGIAcUB/wG4AgAB/wGz + AgAB/wGtAgAB/wGrAgAB/wGrAgAB/wGrAgAB/wGqAgAB/wGtAgAB/wHhAa4BAAH/AzgBXAMGAQcDpAH/ + A/EB/wPrAf8D6wH/A+sB/wPrAf8D6wH/A+sB/wPrAf8D6wH/A+sB/wP8Af8DmAH/A6MB/wgAA6kB/wMA + Af8DxwH/A+QB/wPtAf8D6wH/A+sB/wPrAf8D6wH/A+sB/wPrAf8D6wH/A/EB/wOkAf8DBgEIEAADMwFS + BAAD/AH/A9UB/wOuAf8DAAH/AwAB/wOzAf8DugH/A+kB/wMAAf8DAAH/AwAB/wOTAf8DsAH/A8MB/wO6 + Af8DsQH/A7MB/wO6Af8DhgH/AwAB/wMAAf8DrgH/A1ABmgwAAw4BEgE7ASABLQH+AwAB/wHQAtEB/wPa + Af8C2wHZAf8B3AHaAdAB/wIAAY8B/wIAAaMB/wIAAaMB/wIAAZAB/wHPAc0BxAH/Aq8BrQH/A4cB/wP1 + Af8C/gH8Af8B+gH+Av8DAAH/AesB8QH2Af8DAAH/AwAB/wPRAf8DAAH/A5QB/wG8Ar0B/wH2Af4B+QH/ + AQABggGAAf8DAAH/AYoBjgGLAf8DAAH/A4AB/gMOARIDUAGdAeEBrgEAAf8B0gGYAQAB/wHRAZYBAAH/ + Ac4BkwEAAf8BzQGQAQAB/wHLAY0BAAH/AcgBiQEAAf8BygGEAQAB/wG2AZMBAAH/AQABmwH1Af8BAAGV + AfUB/wEAAZIB8wH/AQABjwHyAf8BAAGMAfIB/wEAAYkB8QH/AQABhgHyAf8BAAGCAfYB/wEAAYAB+wH/ + AQABgAH+Af8BAAGIAdIB/wGyAgAB/wGlAgAB/wGFAYIBAAH/AagCAAH/Aa8CAAH/AasCAAH/AasCAAH/ + AasCAAH/AagCAAH/AdIBmQEAAf8DUAGdAwYBBwOlAf8D8gH/A+wB/wPsAf8D7AH/A+wB/wPsAf8D7AH/ + A+wB/wPsAf8D7AH/A/0B/wOgAf8DmAH/A/wB/wP+Af8DmgH/AwAB/wPWAf8D6gH/A+0B/wPsAf8D7AH/ + A+wB/wPsAf8D7AH/A+wB/wPsAf8D8gH/A6UB/wMGAQgQAAMzAVIDuAH/AwAB/wMAAf8DAAH/AwAB/wMA + Af8DiAH/A+oB/wO0Af8DAAH/AwAB/wMAAf8DAAH/A9MB/wPDAf8DugH/A7sB/wO5Af8DvAH/A4AB/wMA + Af8DAAH/A4AB/gNEAXgMAAMOARIBPQEiAS8B/gMAAf8D1gH/AdoC2wH/A9UB/wHfAd0B2gH/AeoB5wHb + Af8BxQHDAcEB/wHFAcQBwQH/AegB5wHbAf8B0wHQAc4B/wKpAasB/wOHAf8D9gH/CwAB/wMAAf8DAAH/ + AwAB/wPLAf8DAAH/AZcClgH/AwAB/wHNAssB/wMAAf8BtgG3AbYB/wMAAf8DpgH/A4AB/gMOARIDXQHJ + AeMBqwEAAf8B2wGaAQAB/wHYAZYBAAH/Ac8BlAEAAf8BzgGRAQAB/wHMAY4BAAH/AckBiwEAAf8B0AGH + AQAB/wGRAZsBmAH/AQABmgH+Af8BAAGXAfQB/wEAAZMB8wH/AQABkQHzAf8BAAGNAfIB/wEAAYoB+gH/ + AQABiwH4Af8BAAGMAdsB/wEAAYoBrAH/AZABgwEAAf8BvAIAAf8BmQIAAf8BAAGFAfQB/wIAAv8BAAGJ + AeAB/wGrAgAB/wGtAgAB/wGrAgAB/wGrAgAB/wGnAgAB/wHGAYcBAAH/A10ByQMGAQcDpgH/A/MB/wPt + Af8D7QH/A+0B/wPtAf8D7QH/A+0B/wPtAf8D7QH/A+0B/wQAA6IB/wOVAf8D+QH/A/sB/wOWAf8DAAH/ + A+MB/wPuAf8D7gH/A+0B/wPtAf8D7QH/A+0B/wPtAf8D7QH/A+0B/wPzAf8DpgH/AwYBCBAAAzMBUgMA + Af8DAAH/A5cB/wOxAf8D8AH/A4MB/wMAAf8DgAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DoQH/A74B/wO5 + Af8DqgH/A7QB/wOaAf8DAAH/AwAB/wMAAf8DYAHgAyUBNwwAAw4BEgE9ASQBLwH+AwAB/wHBAbwBvgH/ + AewB8wHwAf8D3AH/AdoC3AH/A9wB/wHhAeIB4AH/AeEB4gHgAf8C2wHcAf8D0AH/Aa4CrwH/A4sB/wP3 + Af8LAAH/AwAB/wP3Af8DAAH/A9YB/wPIAf8DAAH/A48B/wPyAf8DgAH/BwAB/wPqAf8DgAH+Aw4BEgNg + AeABmgG1AbAB/wGBAbABwQH/AbQBpwGFAf8B1wGXAQAB/wHOAZIBAAH/Ac0BkAEAAf8BygGMAQAB/wHR + AY0BAAH/AQABoQHIAf8BAAGbAfwB/wEAAZgB9AH/AQABlQHzAf8BAAGRAfQB/wEAAZAB/QH/AQABkwHJ + Af8BowGIAQAB/wG9AgAB/wHBAgAB/wG5AgAB/wGsAgAB/wEAAYYB6wH/AgAB9gH/AgAB8AH/AgAC/wEA + AYQBkAH/AbUCAAH/AasCAAH/AasCAAH/AagCAAH/Ab4CAAH/A2AB4AMGAQcDpgH/A/QB/wPuAf8D7gH/ + A+4B/wPuAf8D7gH/A+4B/wPuAf8D7gH/A+4B/wQAA6QB/wMAAf8D2AH/A9gB/wMAAf8DAAH/A+8B/wPx + Af8D7gH/A+4B/wPuAf8D7gH/A+4B/wPuAf8D7gH/A+4B/wP0Af8DpgH/AwYBCBAAAzMBUgOVAf8DAAH/ + A/MB/wPxAf8D9gH/A7MB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A5wB/wOYAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wOcAf8DUQGiEAADDgESAToBJQEtAf4DAAH/AwAB/wHJAcIBxQH/AeQC5QH/ + AeEB4AHhAf8B4QHgAeEB/wHhAeAB4QH/AeEB4AHhAf8B4QLgAf8B1QLUAf8BtAKzAf8BiwGNAYsB/wP2 + Af8LAAH/A50B/wcAAf8DywH/IAADgAH+Aw4BEgNlAewBAAG3AdkB/wEAAbQC/wEAAbMC/wGrAagBjwH/ + Ad0BkwEAAf8BzgGQAQAB/wHMAY0BAAH/Ac0BkQEAAf8BAAGiAdkB/wEAAZwB+gH/AQABmQH0Af8BAAGW + AfQB/wEAAZQB+gH/AQABlgGtAf8BxAIAAf8BwAIAAf8BrAGAAQAB/wGqAgAB/wHEAgAB/wEAAYcBmQH/ + AgAB/gH/AgAB8AH/AgAB8AH/AgAB+wH/AQABhQGmAf8BtgIAAf8BqwIAAf8BqwIAAf8BqAIAAf8BugIA + Af8DZQHsAwYBBwOmAf8D9AH/A+8B/wPvAf8D7gH/A+4B/wPuAf8D7gH/A+4B/wPuAf8D7gH/BAADpQH/ + AwAB/wPFAf8DxQH/AwAB/wOGAf8D9wH/A/IB/wPuAf8D7gH/A+4B/wPuAf8D7gH/A+4B/wPuAf8D7gH/ + A/QB/wOmAf8DBgEIEAADMwFSA9sB/wMAAf8D4QH/A+wB/wPcAf8D3AH/AwAB/wMAAf8DAAH/A5gB/wOd + Af8DAAH/A44B/wO5Af8DyAH/A7MB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A84B/wM4AV0QAAMOARIBMwEi + AScB/gMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wHmAeMB5QH/ + AfIB8AHxAf8B7QLsAf8C6wHqAf8B9gH0AfUB/wHwAe0B7wH/AeoB6AHqAf8B7AHrAewB/wHtAesB7AH/ + AewB6gHrAf8B7AHqAesB/wHrAeoB6wH/AewB6gHsAf8B7AHqAesB/wHtAewB7QH/AfUB9AH1Af8DgAH+ + Aw4BEgNlAewBAAG4AdUB/wEAAbUC/wEAAbIB/AH/AQABsQHyAf8BoQGpAZoB/wHUAZYBAAH/Ac8BjAEA + Af8ByQGVAQAB/wEAAaMB5AH/AQABnQH5Af8BAAGbAfQB/wEAAZgB/AH/AQABmgHDAf8B0QGAAQAB/wHA + AgAB/wHCAgAB/wGmAYQBAAH/AQABkgHXAf8BpwGKAQAB/wEAAYUB1AH/AgAB9QH/AgAB8AH/AgAB8AH/ + AgAB+wH/AQABhQGmAf8BtgIAAf8BqwIAAf8BqwIAAf8BqAIAAf8BugIAAf8DZQHsAwYBBwOqAf8D+QH/ + A/QB/wPyAf8D8gH/A/EB/wPwAf8D8AH/A+8B/wPvAf8D7wH/BAADoQH/A6IB/wgAA6EB/wORAf8D/gH/ + A/EB/wPvAf8D7wH/A+8B/wPvAf8D7wH/A+8B/wPvAf8D7wH/A/UB/wOnAf8DBgEIEAADMwFSBwAB/wOY + Af8D8gH/A9kB/wQAA5AB/wMAAf8D1gH/A+kB/wPgAf8D3QH/A9cB/wPRAf8DzgH/A50B/wMAAf8DgAH/ + AwAB/wMAAf8DswH/A/QB/wM3AVoQAAMOARIBLAEfASMB/gMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA + Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wHnAeUB5gH/A/EB/wHsAecB6gH/AfAB6wHtAf8B7QHqAewB/wHs + AecB6gH/AfAB6wHtAf8B7QHqAewB/wHsAeoB6wH/AewB6gHrAf8B7AHqAewB/wHtAesB7AH/Ae0B6wHt + Af8B7wHrAe0B/wHwAe0B7wH/AfcB9QH3Af8DgAH+Aw4BEgNgAeABhAG4AcwB/wEAAbYC/wEAAbMB+QH/ + AQABsAH7Af8BAAGwAv8BjAGqAbEB/wHZAZQBAAH/AdQBlAEAAf8BAAGlAd8B/wEAAZ4B+gH/AQABnAH0 + Af8BAAGZAfkB/wEAAZkB2gH/AaQBkQEAAf8BsAGJAQAB/wGlAYkBAAH/AbgBhwEAAf8BAAGPAcUB/wEA + AYcB+wH/AQABgQHxAf8CAAHwAf8CAAHwAf8CAAHwAf8CAAH7Af8BAAGEAaQB/wG2AgAB/wGrAgAB/wGr + AgAB/wGoAgAB/wG+AgAB/wNgAeADBgEHA6oB/wP5Af8D9AH/A/QB/wP0Af8D9AH/A/QB/wPzAf8D8wH/ + A/MB/wPyAf8EAAOiAf8BqgKpAf8IAAOpAf8DnQH/BAAD8QH/A/AB/wPwAf8D8AH/A/AB/wPwAf8D8AH/ + A/AB/wPwAf8D9gH/A6gB/wMGAQgQAAMzAVIEAAOIAf8DAAH/A/AB/wPpAf8DqgH/AwAB/wMAAf8DrgH/ + A+MB/wPKAf8DywH/A84B/wPIAf8DnQH/A4EB/wOGAf8DAAH/AwAB/wOrAf8D5wH/BAADNwFaEAADDgES + ASEBGQEcAf4DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8C6wHw + Af8C9gH+Af8C7wH0Af8B8AHvAfQB/wHwAe4B9QH/AfAB7gH1Af8B8AHxAfUB/wHwAfEB9QH/AfAB8QH1 + Af8C8QH1Af8B8QHwAfcB/wHxAfIB9wH/AvIB9gH/AvIB+QH/AfQB8gH6Af8B+wH6Av8DgAH+Aw4BEgNd + AckBlwG5AbgB/wEAAbgC/wEAAbUB+QH/AQABsgH5Af8BAAGvAfkB/wEAAa0B/gH/AQABqgHDAf8BnQGk + AZgB/wEAAaQB7gH/AQABoAH3Af8BAAGdAfUB/wEAAZoB8wH/AQABlwH4Af8BAAGWAfoB/wEAAZUB9AH/ + AQABkgH5Af8BAAGQAfEB/wEAAYkB8QH/AQABhQHzAf8BAAGDAfEB/wEAAYAB8AH/AgAB8AH/AgAB8AH/ + AgAB/QH/AQABhAGVAf8BtQIAAf8BqwIAAf8BqwIAAf8BpwIAAf8BxgGHAQAB/wNdAckDBgEHA6sB/wP6 + Af8D9AH/A/QB/wP0Af8D9AH/A/QB/wP0Af8D9AH/A/QB/wP0Af8EAAOmAf8DAAH/A8QB/wPEAf8DAAH/ + A6QB/wQAA/EB/wPxAf8D8QH/A/AB/wPwAf8D8AH/A/AB/wPwAf8D8AH/A/UB/wOnAf8DBgEIEAADMwFS + BAADyAH/AwAB/wOHAf8DAAH/AwAB/wMAAf8DAAH/A8sB/wPbAf8DzwH/A8QB/wOsAf8DmgH/A4sB/wOH + Af8DAAH/A4AB/wO3Af8D5wH/A/EB/wQAAzcBWhAAAw4BEgEeARgBGgH+AwAB/wMAAf8DAAH/AwAB/wMA + Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AeAC3AH/AewB6gHrAf8B5gHjAeYB/wHmAeMB5gH/ + AeYB4wHmAf8B5gHjAeYB/wHmAeMB5gH/AeYB4wHmAf8B5gHjAeYB/wHnAeMB5gH/AecC5gH/AecB5QHm + Af8B5wHlAeYB/wHnAeUB5gH/AegB5gHoAf8B8QLtAf8DgAH+Aw4BEgNQAZ0BtQG6AZkB/wEAAbkC/wEA + AbYB+QH/AQABswH5Af8BAAGwAfgB/wEAAa4B+AH/AQABqwH+Af8BAAGpAv8BAAGkAfcB/wEAAaIB9QH/ + AQABnwH1Af8BAAGcAfQB/wEAAZkB9AH/AQABlgH0Af8BAAGSAfQB/wEAAZAB8wH/AQABjAH6Af8BAAGM + AfkB/wEAAYcB8AH/AQABgwH2Af8BAAGBAfsB/wIAAfkB/wIAAfgB/wEAAYMB/gH/AZcCAAH/AbACAAH/ + AasCAAH/AasCAAH/AagCAAH/AdIBmQEAAf8DUAGdAwYBBwOrAf8D+wH/A/UB/wP1Af8D9QH/A/UB/wP1 + Af8D9QH/A/UB/wP1Af8D9QH/BAADvgH/AwAB/wMAAf8DAAH/AwAB/wO+Af8EAAP2Af8D9QH/A/UB/wP0 + Af8D9AH/A/MB/wPzAf8D8wH/A/IB/wP4Af8DqgH/AwYBCBAAAzMBUgQAA+4B/wMAAf8DAAH/AwAB/wOo + Af8D2QH/A/AB/wPZAf8DzwH/A9MB/wPQAf8DoAH/A5IB/wOVAf8DmAH/A6wB/wPUAf8D6AH/A+0B/wPu + Af8EAAM3AVoQAAMOARIBgAFyAXQB/gHRAbkBvAH/AcoBswG2Af8ByQGyAbUB/wHJAbIBtQH/AckBsgG1 + Af8ByQGyAbUB/wHJAbIBtQH/AckBsgG1Af8ByQGyAbUB/wHJAbIBtQH/AckBtAG7Af8BxgKsAf8BzAIA + Af8BygIAAf8BygIAAf8BygIAAf8BygIAAf8BygIAAf8BygIAAf8BygIAAf8BygIAAf8BygIAAf8BygIA + Af8ByQIAAf8ByQIAAf8ByQIAAf8BygIAAf8B0gIAAf8BgAE2ARQB/gMOARIDOAFcAdcBuQEAAf8BAAG6 + AfYB/wEAAbcB/AH/AQABtQH5Af8BAAGyAfkB/wEAAa8B+AH/AQABrAH4Af8BAAGpAfcB/wEAAaYB9gH/ + AQABowH2Af8BAAGgAfUB/wEAAZ0B9QH/AQABmgH0Af8BAAGYAfQB/wEAAZQB8wH/AQABkgH9Af8BAAGT + AdQB/wGdAZQBAAH/AQABjwHsAf8BAAGLAdoB/wEAAYoBpwH/AQABiAG/Af8BAAGHAdEB/wEAAYcBmwH/ + AbMCAAH/AasCAAH/AasCAAH/AaoCAAH/Aa0CAAH/AeEBrgEAAf8DOAFcAwYBBwOsAf8D/AH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/gB/wP7Af8D8wH/AfEC8wH/AfEC8wH/A/MB/wP7 + Af8D+AH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9wH/A/wB/wOsAf8DBgEIEAADMwFS + BAAD7QH/A9MB/wPKAf8D6wH/A+sB/wPrAf8D6wH/A+QB/wPaAf8D1QH/A84B/wPCAf8DwgH/A8sB/wPa + Af8D4gH/A+MB/wPjAf8D4wH/A+MB/wP+Af8DOAFbEAADDgESAYABbAFuAf4BxgGqAawB/wG/AaMBpQH/ + Ab4BogGkAf8BvgGiAaQB/wG+AaIBpAH/Ab4BogGkAf8BvgGiAaQB/wG+AaIBpAH/Ab4BogGkAf8BvgGi + AaMB/wG+AaMBqAH/Ab4BogGhAf8B0AIAAf8B0AIAAf8B0AIAAf8B0AIAAf8B0AIAAf8B0AIAAf8B0AIA + Af8B0AIAAf8B0AIAAf8B0AIAAf8B0AIAAf8B0AIAAf8B0AIAAf8B0AIAAf8B0QIAAf8B2AIAAf8BgAE3 + ARQB/gMOBBIBGANeAfABhAG6Ac0B/wEAAbkC/wEAAbYB+QH/AQABswH5Af8BAAGwAfgB/wEAAa4B+AH/ + AQABqgH3Af8BAAGoAfcB/wEAAaQB9gH/AQABogH2Af8BAAGeAfUB/wEAAZwB9AH/AQABmQH0Af8BAAGW + AfwB/wEAAZgBtQH/AcMBggEAAf8BxQIAAf8BpAGLAQAB/wG1AgAB/wG/AgAB/wG8AgAB/wG5AgAB/wG2 + AgAB/wGrAgAB/wGrAgAB/wGrAgAB/wGoAgAB/wG9AgAB/wNeAfADEgEYAwYBBwOrAf8D/AH/A/cB/wP3 + Af8D9wH/A/cB/wP3Af8D9wH/A/cB/wP3Af8D9wH/A/cB/wP6Af8D/QH/A/4B/wP+Af8D/QH/A/oB/wP3 + Af8D9wH/A/cB/wP3Af8D9wH/A/cB/wP3Af8D9wH/A/cB/wP3Af8D/AH/A6sB/wMGAQgQAAMzAVIEAAPs + Af8D6gH/A+oB/wPqAf8D6gH/A+oB/wPqAf8D6gH/A+YB/wPgAf8D2gH/A9oB/wPdAf8D3wH/A9sB/wPP + Af8DxwH/A8UB/wPHAf8DwgH/A9cB/wM1AVUQAAMOARIBgAFqAW0B/gHFAacBqgH/Ab4BoAGkAf8BvQGf + AaMB/wG9AZ8BowH/Ab0BnwGjAf8BvQGfAaMB/wG9AZ8BowH/Ab0BnwGjAf8BvQGfAaMB/wG9AZ8BoQH/ + Ab0BoAGnAf8BvQGeAaAB/wHSAgAB/wHSAgAB/wHRAgAB/wHTAgAB/wHSAgAB/wHSAgAB/wHRAgAB/wHT + AgAB/wHRAgAB/wHTAgAB/wHRAgAB/wHPAgAB/wHVAgAB/wHWAgAB/wHTAgAB/wHbAgAB/wGAATsBFQH+ + Aw4BEgQAA1EBnwHBAboBjAH/AQABugH+Af8BAAG3AfoB/wEAAbQB+QH/AQABsgH4Af8BAAGvAfgB/wEA + AawB+AH/AQABqQH3Af8BAAGmAfYB/wEAAaMB9gH/AQABoAH1Af8BAAGdAfUB/wEAAZoB+wH/AQABnAHL + Af8B0gGEAQAB/wHKAgAB/wG9AYEBAAH/AZoBjgEAAf8BtwIAAf8BtAIAAf8BsgIAAf8BsAIAAf8BrQIA + Af8BrAIAAf8BqwIAAf8BqwIAAf8BqAIAAf8B2AGgAQAB/wNRAZ8EAAMGAQcDrAH/A/wB/wP5Af8IAAP5 + Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4 + Af8D+AH/A/gB/wP4Af8D+QH/Av4C/wQAAfkC+wH/A/wB/wOsAf8DBgEIEAADMwFSBAAD6gH/A+gB/wPo + Af8D6AH/A+gB/wPoAf8D6AH/A+gB/wPoAf8D6AH/A+gB/wPoAf8D6QH/A+IB/wPMAf8DowH/A4sB/wOH + Af8DAAH/A4wB/wNiAe8DCQELEAADDgESAYABbQFvAf4BxgGrAa0B/wG/AaQBpgH/Ab4BowGlAf8BvgGj + AaUB/wG+AaMBpQH/Ab4BowGlAf8BvgGjAaUB/wG+AaMBpQH/Ab4BowGlAf8BvgGjAaUB/wG+AaQBqQH/ + Ab8CowH/AdgCAAH/AdkCAAH/AdcCAAH/AfkB4wHKAf8B4gGQAQAB/wHWAgAB/wHbAgAB/wH6AegB1AH/ + AdsCAAH/AfYB3gHDAf8B3QIAAf8B6QGsAQAB/wH3AdkBuAH/AfEBwgGMAf8B4AGCAQAB/wHhAgAB/wGA + AT8BFQH+Aw4BEgQAAx8BLAJqAWgB+QGDAboBzwH/AQABuQL/AQABtgH5Af8BAAGzAfkB/wEAAbAB+AH/ + AQABrQH4Af8BAAGqAfcB/wEAAagB9wH/AQABpAH2Af8BAAGhAfUB/wEAAZ4B9QH/AQABmwH6Af8BAAGc + AcwB/wGYAZQBhQH/AY8BlAGNAf8BAAGVAc8B/wEAAZAC/wGSAY0BAAH/Ab0CAAH/AbMCAAH/AbECAAH/ + Aa8CAAH/Aa0CAAH/AasCAAH/AacCAAH/Ab0CAAH/AmoBaAH5Ax8BLAQAAwYBBwOuAf8D/AH/BAAB4gHf + Ad4B/wHkAeIB4AH/BAAD+gH/A/kB/wP5Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP5 + Af8D+QH/A/kB/wP5Af8D+QH/A/kB/wP6Af8EAAHkAeMB4QH/AeAB3gHbAf8EAAP8Af8DrgH/AwYBCBAA + AzMBUgQAA+gB/wPmAf8D5gH/A+YB/wPmAf8D5gH/A+YB/wPmAf8D5gH/A+YB/wPmAf8D5gH/A+cB/wPe + Af8DvwH/AwAB/wMAAf8DAAH/A5AB/wOiAf8DIQEwFAADDgESAYABcAFyAf4BygGuAbAB/wHDAacBqQH/ + AcIBpgGoAf8BwgGmAagB/wHCAaYBqAH/AcIBpgGoAf8BwgGmAagB/wHCAaYBqAH/AcIBpgGoAf8BwgGm + AagB/wHCAacBrQH/AcMBpQGmAf8B3gIAAf8B4AIAAf8B3QIAAf8B/gHyAeYB/wHrAZ0BAAH/Ad4CAAH/ + AeICAAH/Af4B+wH2Af8B4AIAAf8B+wHsAdoB/wHoAZIBAAP/Af4B/wHsAawBAAH/AecBlwEAAf8B5AIA + Af8B6AIAAf8BgAFDARUB/gMOARIIAANLAY0B1QG5AQAB/wEAAbkB8gH/AQABtwH9Af8BAAG0AfkB/wEA + AbEB+AH/AQABrgH4Af8BAAGsAfcB/wEAAakB9wH/AQABpgH2Af8BAAGjAfYB/wEAAaAB9QH/AQABnQH0 + Af8BAAGaAfgB/wEAAZgC/wEAAZUB/gH/AQABkAL/AQABkwH8Af8BpgGJAQAB/wG7AgAB/wG0AgAB/wGy + AgAB/wGwAgAB/wGuAgAB/wGqAgAB/wGuAgAB/wHgAawBAAH/A0sBjQgAAwYBBwOvAf8D/AH/Ad8B3gHd + Af8BqwGlAaAB/wMAAf8B0wHPAc0B/wQAA/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/ + A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wQAAegB5wHoAf8BuwG1AbEB/wMAAf8BwwG9AbsB/wP8 + Af8DrwH/AwYBCBAAAzMBUgQAA+cB/wPlAf8D5QH/A+UB/wPlAf8D5QH/A+UB/wPlAf8D5QH/A+UB/wPl + Af8D5gH/A+YB/wPXAf8DtgH/A+YB/wPtAf8EAAPsAf8DJQE3GAADDgESAYABdQF3Af4BzwG0AbYB/wHI + Aa0BrwH/AcYBrAGuAf8BxgGsAa4B/wHGAawBrgH/AcYBrAGuAf8BxgGsAa4B/wHGAawBrgH/AcYBrAGu + Af8BxgGsAa4B/wHFAa0BsgH/AcYBqwGsAf8B6AIAAf8B6AIAAf8B5wIAAf8B+wHqAdUB/wH6AeEBwQH/ + AfUBwQGEAf8B6QIAAf8B/gH/Af4B/wHoAgAB/wH6AeoB0gH/Ae0BkQEAAf8B/AH0AeoB/wHyAbEBAAH/ + BAAB7gGWAQAB/wHwAgAB/wGAAUcBFwH+Aw4BEggAAwkBDAJfAVsB0AG6AbkBkwH/AQABuAH9Af8BAAG2 + AfwB/wEAAbMB+QH/AQABsAH4Af8BAAGtAfgB/wEAAaoB9wH/AQABpwH3Af8BAAGkAfsB/wEAAaEB9gH/ + AQABngH1Af8BAAGbAfQB/wEAAZgB9AH/AQABlAH8Af8BAAGYAeQB/wGeAZEBAAH/AcACAAH/AbcCAAH/ + AbUCAAH/AbMCAAH/AbECAAH/Aa4CAAH/AasCAAH/AdUBnAEAAf8DXwHQAwkBDAgAAwYBBwOwAf8D/AH/ + A8kB/wHVAdQB1QH/AbIBsQGuAf8BuQG2AbMB/wQAA/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7 + Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wQAA9kB/wHMAc0BzAH/AckBxwHFAf8BtQGy + Aa4B/wP8Af8DsAH/AwYBCBAAAzMBUgQAA+YB/wPkAf8D5AH/A+QB/wPkAf8D5AH/A+QB/wPkAf8D5AH/ + A+QB/wPkAf8D5QH/A+MB/wPTAf8DsgH/A/kB/wQAA+kB/wMoATscAAMOARIBgAF7AX0B/gHUAbsBvQH/ + AcwBtAG2Af8BywGzAbUB/wHLAbMBtQH/AcsBswG1Af8BywGzAbUB/wHLAbMBtQH/AcsBswG1Af8BywGz + AbUB/wHLAbMBtQH/AcoBtAG7Af8BywKzAf8B8AIAAf8B8QIAAf8B7gIAAf8B/gHyAeYB/wHyAZoBAAH/ + Ae0CAAH/Ae4CAAH/AfoBxwGLAf8B8AIAAf8B/AHvAd4B/wHxAYwBAAH/AfIBmQEAAf8B+QHQAZ4B/wH3 + Ab0BAAH/AfECAAH/AfgBgwEAAf8BgAFMARcB/gMOARIMAAMdASkDYAHoAbABuQGfAf8BAAG3Af0B/wEA + AbQB/QH/AQABsQH4Af8BAAGuAfgB/wEAAasB/QH/AQABrAHFAf8BAAGpAb0B/wEAAaMB+gH/AQABoAL/ + AQABngL/AQABnAL/AQABnQHbAf8BugGNAQAB/wHGAgAB/wG6AgAB/wG4AgAB/wG2AgAB/wG0AgAB/wGx + AgAB/wGuAgAB/wHRAZcBAAH/A2AB6AMdASkMAAMGAQcDsQH/A/0B/wP1Af8BzwHRAdAB/wLUAdUB/wP1 + Af8EAAP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/ + A/wB/wP8Af8EAAP4Af8BwwLEAf8C0gHRAf8D8QH/A/0B/wOxAf8DBgEIEAADMwFSA/0B/wPkAf8D4gH/ + A+IB/wPiAf8D4gH/A+IB/wPiAf8D4gH/A+IB/wPiAf8D4gH/A+MB/wPhAf8DzgH/A7IB/wQAA+QB/wMo + ATwgAAMMARABhgIAAf8B2QHCAcMB/wHQAboBvAH/AdABuQG7Af8B0AG5AbsB/wHQAbkBuwH/AdABuQG7 + Af8B0AG5AbsB/wHQAbkBuwH/AdABuQG7Af8B0AG5AbsB/wHPAboBwAH/AdABuQG4Af8B9gGCAQAB/wH3 + AYEBAAH/AfYCAAH/AfwB4AG9Af8B/AHgAb4B/wH8AdcBqwH/AfcBmwEAAf8B+gHIAY0B/wH3AYIBAAH/ + Af4B9QHuAf8B+AGcAQAB/wH2AgAB/wH2AgAB/wH2AgAB/wH3AYEBAAL/AYoBAAH/AakCAAH/AwwBEBAA + AyUBNwJlAVwB5wG5AbgBkwH/AQABtgHyAf8BAAGyAv8BAAGvAfkB/wEAAa0B+gH/AQABqgHtAf8BlgGs + AakB/wGkAaoBmAH/AZsBoQGVAf8BkAGcAZoB/wGhAZgBggH/AcMBigEAAf8BxAIAAf8BvQIAAf8BvAIA + Af8BuQIAAf8BtwIAAf8BsgIAAf8BtQIAAf8B1wGfAQAB/wNlAecDJQE3EAADBAEFA64B/wP4Af8D/AH/ A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/ - A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D+AH/A64B/wMFAQYQAAMz - AVID+wH/A+MB/wPhAf8D4QH/A+EB/wPhAf8D4QH/A+EB/wPhAf8D4QH/A+EB/wPhAf8D3wH/A9sB/wO8 - Af8DzQH/A+oB/wMoATskAAMFAQYDWgH1AeIBzQHPAf8B2QHBAcMB/wHSAbwBvgH/AdIBvAG+Af8B0gG8 - Ab4B/wHSAbwBvgH/AdIBvAG+Af8B0gG8Ab4B/wHSAbwBvgH/AdIBvAG+Af8B0QG+AcQB/wHUAbwBuwH/ - AfwBgwEAAv8BggEAAf8B/AGCAQAB/wH8AYEBAAH/Af0BhgEAAf8B/QGKAQAB/wH8AYQBAAH/Af0BlQEA - Af8B/AGCAQAB/wH9AZkBAAH/Af0BiQEAAf8B/AGCAQAB/wH8AYMBAAH/AfwBgwEAAv8BiQEAAv8BkwEA - Af8BWgJWAfUDBQEGFAADHgErAlwBWwHNAdUBuAEAAf8BAAG1Ac0B/wEAAbEB/gH/AQABrgL/AQABqwH7 - Af8BAAGoAf4B/wEAAacB7wH/AZoBogGXAf8B1QGKAQAB/wHMAYIBAAH/AcUBgAEAAf8BwQIAAf8BvwIA - Af8BvAIAAf8BuAIAAf8BtgIAAf8BxQGEAQAB/wHiAa4BAAH/A1wBzQMeASsYAANaAcIDwwH/A8IB/wPC + A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP4Af8DrgH/AwUBBhAAAzMBUgP7 + Af8D4wH/A+EB/wPhAf8D4QH/A+EB/wPhAf8D4QH/A+EB/wPhAf8D4QH/A+EB/wPfAf8D2wH/A7wB/wPN + Af8D6gH/AygBOyQAAwUBBgNaAfUB4gHNAc8B/wHZAcEBwwH/AdIBvAG+Af8B0gG8Ab4B/wHSAbwBvgH/ + AdIBvAG+Af8B0gG8Ab4B/wHSAbwBvgH/AdIBvAG+Af8B0gG8Ab4B/wHRAb4BxAH/AdQBvAG7Af8B/AGD + AQAC/wGCAQAB/wH8AYIBAAH/AfwBgQEAAf8B/QGGAQAB/wH9AYoBAAH/AfwBhAEAAf8B/QGVAQAB/wH8 + AYIBAAH/Af0BmQEAAf8B/QGJAQAB/wH8AYIBAAH/AfwBgwEAAf8B/AGDAQAC/wGJAQAC/wGTAQAB/wFa + AlcB9QMFAQYUAAMeASsCXAFbAc0B1QG4AQAB/wEAAbUBzQH/AQABsQH+Af8BAAGuAv8BAAGrAfsB/wEA + AagB/gH/AQABpwHvAf8BmgGiAZcB/wHVAYoBAAH/AcwBggEAAf8BxQGAAQAB/wHBAgAB/wG/AgAB/wG8 + AgAB/wG4AgAB/wG2AgAB/wHFAYQBAAH/AeIBrgEAAf8DXAHNAx4BKxgAA1oBwgPDAf8DwgH/A8IB/wPC Af8DwgH/A8IB/wPCAf8DwgH/A8IB/wPCAf8DwgH/A8IB/wPCAf8DwgH/A8IB/wPCAf8DwgH/A8IB/wPC - Af8DwgH/A8IB/wPCAf8DwgH/A8IB/wPCAf8DwgH/A8IB/wPCAf8DwwH/A1sBxBQAAzMBUgP6Af8D4gH/ - A+AB/wPgAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPbAf8DzwH/A8wB/wPMAf8DKAE7 - LAADSAGDAbQCoQH/Ae8B3gHfAf8B7AHaAd0B/wHsAdoB3AH/AewB2gHcAf8B7AHaAdwB/wHsAdoB3AH/ - AewB2gHcAf8B7AHaAdwB/wHsAdoB3AH/AesB3QHiAf8B6wHZAdcC/wGgAQAC/wGdAQAC/wGfAQAC/wGd - AQAC/wGdAQAC/wGdAQAC/wGdAQAC/wGaAQAC/wGeAQAC/wGZAQAC/wGdAQAC/wGeAQAC/wGfAQAC/wGg - AQAC/wGjAQAB/wHRAgAB/wFIAkcBgxwAAwoBDQNLAYwCbQFRAfcBvwG3AYwB/wEAAbIBzAH/AQABrQHz - Af8BAAGpAv8BAAGlAv8BAAGnAfYB/wHDAZIBAAH/AcYBggEAAf8BwgGAAQAB/wG/AgAB/wG+AgAB/wG/ - AgAB/wHJAYoBAAH/AdwBpQEAAf8CbQFsAfcDSwGMAwoBDagAAzQBUzgAA8gB/wMnATo0AANHAYIDXgHt - AZQBhQGGAf8DgAH+A4AB/gOAAf4DgAH+A4AB/gOAAf4DgAH+A4AB/gOAAf4BgAFZARsB/gGAAVYBGQH+ - AYABWAEaAf4BgAFYARoB/gGAAVgBGgH+AYABWAEaAf4BgAFYARoB/gGAAVgBGgH+AYABWAEaAf4BgAFY - ARoB/gGAAVgBGgH+AYABWAEaAf4BgAFYARsB/gGwAgAB/wNeAe0DRwGCKAADIQEvA1ABnQNeAe0B1gG4 - AQAB/wGvAbQBmAH/AY0BsAG3Af8BsgGrAYoB/wHUAZgBAAH/Ac8BkgEAAf8B0AGUAQAB/wHTAZkBAAH/ - AdoBowEAAf8B5AGxAQAB/wNeAe0DUAGdAyEBL7AAAxsBJQNNAZMDSAGEA0gBgwNIAYMDSAGDA0gBgwNI - AYMDSAGDA0gBgwNIAYMDSAGDA0gBgwNJAYgDRwGBAxgBINgAAxMBGgM4AVwDUQGcA1oBxwNdAd8DYQHr - A2EB6wNdAd8DWgHHA1EBnAM4AVwDFAEbKAABQgFNAT4HAAE+AwABKAMAAYADAAGAAwABAQEAAQEGAAEI - FgAD//8A/wADAAT/BAABgAIAAQEF/wH4AQcB/wgAAfACAAEPAf8B4AEAAf8IAAHwAgABDwH/AYABAAE/ - CAAB8AIAAQ8B/gIAAR8BHAHnBgAB8AIAAQ8B/AIAAQ8BHAHnBgAB8AIAAQ8B/AIAAQcBHAHnBgAB8AIA - AQ8B+AIAAQMIAAHwAgABDwHwAgABAwEcAeADAAEBAeABAAHwAgABDwHwAgABAQEcAeADAAEGATABAAHw - AgABDwHgAgABAQEcAeMBwAIAAQwBGAEAAfACAAEPAeADAAEcAeMBwAIAAggBAAHwAgABDwHgBAABAwHA - AgABEAEIAQAB8AIAAQ8BwAMAARwBAAEBAwABCAEAAfACAAEPAcADAAEcAQABAwGAAgABGAEAAfACAAEP - AcADAAEcAXgBAwHAAgABMAEAAfACAAEPAcADAAEcAXgB4QGAAgABYAEAAfACAAEPAcAEAAF4AeACAAEB - AYABAAHwAgABDwYAAeACAAEBAYABAAHwAgABDwkAAQcBwAEAAfACAAEPCQABDwHgAQAB8AIAAQ8DAAEB - AwABgAEAAR8B8AEAAfACAAEPAwABAQIAAQEBwAEAAR8B+AEAAfACAAEPAwABAQIAAQMBwAEAAT8B+AEA - AfACAAEPAYgCAAEDAgABYQGABAAB8AIAAR8BgAIAAQcCAAHwAgABPwH4AQAB8AIAAT8BgAIAAQ8CAAFw - BQAB8AIAAX8BwAIAAR8CAAEgBQAB8AIAAf8BwAIAAT8IAAHwAQABAQH/AcMBwAEAAf8IAAHwAQABAwL/ - AfgBAwH/CAAB8AEAAQcF/wQAAYACAAEBAfABAAEPCv8BxwH/AccB/wHAAQMF/wHwAgABDwH/AcEB/wHD - Af4CAAF/BP8B8gIAAS8B/AEQAf8BwwHwAgABDwH+AX8B+AEPAfMB/wH8Ae8B/AEAATsBwwHgAgABBwH8 - AX8B+AEPAfICAAFvAf0BAAEHAccBwAIAAQMB/AE/AfgBDwHyAgABbwH8AwABwAIAAQMB+AE/AfgBDwHy - AgABLwH4AwABwAIAAQMB+AEfAfgBDwHyAgABLwH4AwABwAIAAQMB8AEfAfgBDwHyAgABLwH4AwAB4AEB - AQABBwHgAQ8B+AEPAfICAAEvAfgDAAHwAgABDwHgAQ8B+AEPAfICAAEvAfIDAAHwAgABDwHAAQcB+AEP - AfICAAEvAfACAAEHAeACAAEHAcABAwH4AQ8B8gIAAS8B8AIAAQcB4AIAAQcBgAEDAfgBDwHyAgABLwHg - AgABBwHAAgABAwGAAQEB+AEPAfICAAEvAeACAAEPAcABAAGAAQMEAAHyAgABLwHAAgABDwHAAgABAwQA - AfICAAEPAYACAAEPAcACAAEDAfABHwGAAQEB8gIAAQ8BoAIAAR8BwAIAAQMB8AEfAcABAQHyAgABDwMA - AR8BwAEAASABAwHwAR8BwAEDAfICAAEPAUACAAEfAcACAAEDAfABHwHgAQMB8gIAAQ8DAAE/AcABgAEA - AQMB8AEfAfABBwHyAgABDwGAAgABPwHAAgABAwHwAR8B8AEHAfACAAEPAcACAAE/AeACAAEHAfABHwH4 - AQ8B8AIAAQ8BwAIAAX8B4AIAAQcB8AEfAfgBHwHwAgABHwHAAgABfwHwAgABDwHwAR8B/AEfAfACAAE/ - AcACAAF/AfACAAEPAfABHwH8AT8B8AEAAQIBfwGAAgABfwH4AgABHwHwAR8B/gE/AfABAAEEAf8BgAIA - Af8B/AIAAT8B8AEfAf4BfwHwAQABAQH/AcACAAH/Af4CAAF/BP8B8AEAAQMC/wIAAv8BgAEBBf8B8wG8 - AQcC/wH4AQEC/wHAAQMF/wHwAQABDwP/AcEJ/wHnAv8B5wHgAgABBwH/AcABAwH/BAAB8AIAAQcBgAIA - AQEB/wIAAf8EAAH0AgABLwGAAgABAQH8AgABPwQAAfcBwAEAAW8BAAEBAZABAAH4AgABHwQAAfcBgAEA - AS8CAAGQAQAB8AIAAQ8EAAH3AYABAAEPAgABgwH8AeACAAEHBAAB9wIAAQ8CAAFEAQQBwAIAAQMEAAH2 - AgABDwMAAQQBwAIAAQMEAAH2AgABBwQAAYACAAEBBAAB9gIAAQcEAAGAAgABAQQAAfQCAAEHAgABAgYA - AQEBgAEAAfQCAAEHCQABAQGAAQAB9AIAAQcMAAHwAgABBwEAAQEBgAYAAQgCAAHwAgABBwEAAQEBgAEQ - BQABCAIAAfACAAEPAQABAQGTAfwFAAEIAgAB8AIAAQ8JAAEJAYABAAH0ASABAAEPCQABCQGQAQAB9AIA - AS8JAAEIARABAAH0AgABLwkAAQgBEAEAAfQCAAEvDAAB9AIAAQ8MAAH0AgABDwQAAYACAAEBAQwCAAEQ - AfQCAAEPBAABgAIAAQEBEgIAAUgB9AIAAR8EAAHAAgABAwEBAgABgAH0AQABAQE/AwABEAHAAgABAwEB - AgABgAH0AQABAgF/BAAB4AIAAQcBAQIAAYAB8AEAAQQB/wQAAfACAAEPBAAB8AEAAQEB/wQAAfgCAAEf - AYACAAEBAfABAAEDAf8BgAIAAQEB/AIAAT8E/wH3Af8B5wH/AcACAAEDAf8CAAX/AfABAAEPBv8BwAED - Af8L + Af8DwgH/A8IB/wPCAf8DwgH/A8IB/wPCAf8DwgH/A8IB/wPDAf8DWwHEFAADMwFSA/oB/wPiAf8D4AH/ + A+AB/wPgAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D4AH/A9sB/wPPAf8DzAH/A8wB/wMoATssAANI + AYMBtAKhAf8B7wHeAd8B/wHsAdoB3QH/AewB2gHcAf8B7AHaAdwB/wHsAdoB3AH/AewB2gHcAf8B7AHa + AdwB/wHsAdoB3AH/AewB2gHcAf8B6wHdAeIB/wHrAdkB1wL/AaABAAL/AZ0BAAL/AZ8BAAL/AZ0BAAL/ + AZ0BAAL/AZ0BAAL/AZ0BAAL/AZoBAAL/AZ4BAAL/AZkBAAL/AZ0BAAL/AZ4BAAL/AZ8BAAL/AaABAAL/ + AaMBAAH/AdECAAH/AUgCRwGDHAADCgENA0sBjAJtAVEB9wG/AbcBjAH/AQABsgHMAf8BAAGtAfMB/wEA + AakC/wEAAaUC/wEAAacB9gH/AcMBkgEAAf8BxgGCAQAB/wHCAYABAAH/Ab8CAAH/Ab4CAAH/Ab8CAAH/ + AckBigEAAf8B3AGlAQAB/wJtAWwB9wNLAYwDCgENqAADNAFTOAADyAH/AycBOjQAA0cBggNeAe0BlAGF + AYYB/wOAAf4DgAH+A4AB/gOAAf4DgAH+A4AB/gOAAf4DgAH+A4AB/gGAAVoBHAH+AYABVwEaAf4BgAFZ + ARsB/gGAAVkBGwH+AYABWQEbAf4BgAFZARsB/gGAAVkBGwH+AYABWQEbAf4BgAFZARsB/gGAAVkBGwH+ + AYABWQEbAf4BgAFZARsB/gGAAVkBHAH+AbACAAH/A14B7QNHAYIoAAMhAS8DUAGdA14B7QHWAbgBAAH/ + Aa8BtAGYAf8BjQGwAbcB/wGyAasBigH/AdQBmAEAAf8BzwGSAQAB/wHQAZQBAAH/AdMBmQEAAf8B2gGj + AQAB/wHkAbEBAAH/A14B7QNQAZ0DIQEvsAADGwElA00BkwNIAYQDSAGDA0gBgwNIAYMDSAGDA0gBgwNI + AYMDSAGDA0gBgwNIAYMDSAGDA0kBiANHAYEDGAEg2AADEwEaAzgBXANRAZwDWgHHA10B3wNhAesDYQHr + A10B3wNaAccDUQGcAzgBXAMUARsoAAFCAU0BPgcAAT4DAAEoAwABgAMAAYADAAEBAQABAQYAAQgWAAP/ + /wD/AAMABP8EAAGAAgABAQX/AfgBBwH/CAAB8AIAAQ8B/wHgAQAB/wgAAfACAAEPAf8BgAEAAT8IAAHw + AgABDwH+AgABHwEcAecGAAHwAgABDwH8AgABDwEcAecGAAHwAgABDwH8AgABBwEcAecGAAHwAgABDwH4 + AgABAwgAAfACAAEPAfACAAEDARwB4AMAAQEB4AEAAfACAAEPAfACAAEBARwB4AMAAQYBMAEAAfACAAEP + AeACAAEBARwB4wHAAgABDAEYAQAB8AIAAQ8B4AMAARwB4wHAAgACCAEAAfACAAEPAeAEAAEDAcACAAEQ + AQgBAAHwAgABDwHAAwABHAEAAQEDAAEIAQAB8AIAAQ8BwAMAARwBAAEDAYACAAEYAQAB8AIAAQ8BwAMA + ARwBeAEDAcACAAEwAQAB8AIAAQ8BwAMAARwBeAHhAYACAAFgAQAB8AIAAQ8BwAQAAXgB4AIAAQEBgAEA + AfACAAEPBgAB4AIAAQEBgAEAAfACAAEPCQABBwHAAQAB8AIAAQ8JAAEPAeABAAHwAgABDwMAAQEDAAGA + AQABHwHwAQAB8AIAAQ8DAAEBAgABAQHAAQABHwH4AQAB8AIAAQ8DAAEBAgABAwHAAQABPwH4AQAB8AIA + AQ8BiAIAAQMCAAFhAYAEAAHwAgABHwGAAgABBwIAAfACAAE/AfgBAAHwAgABPwGAAgABDwIAAXAFAAHw + AgABfwHAAgABHwIAASAFAAHwAgAB/wHAAgABPwgAAfABAAEBAf8BwwHAAQAB/wgAAfABAAEDAv8B+AED + Af8IAAHwAQABBwX/BAABgAIAAQEB8AEAAQ8K/wHHAf8BxwH/AcABAwX/AfACAAEPAf8BwQH/AcMB/gIA + AX8E/wHyAgABLwH8ARAB/wHDAfACAAEPAf4BfwH4AQ8B8wH/AfwB7wH8AQABOwHDAeACAAEHAfwBfwH4 + AQ8B8gIAAW8B/QEAAQcBxwHAAgABAwH8AT8B+AEPAfICAAFvAfwDAAHAAgABAwH4AT8B+AEPAfICAAEv + AfgDAAHAAgABAwH4AR8B+AEPAfICAAEvAfgDAAHAAgABAwHwAR8B+AEPAfICAAEvAfgDAAHgAQEBAAEH + AeABDwH4AQ8B8gIAAS8B+AMAAfACAAEPAeABDwH4AQ8B8gIAAS8B8gMAAfACAAEPAcABBwH4AQ8B8gIA + AS8B8AIAAQcB4AIAAQcBwAEDAfgBDwHyAgABLwHwAgABBwHgAgABBwGAAQMB+AEPAfICAAEvAeACAAEH + AcACAAEDAYABAQH4AQ8B8gIAAS8B4AIAAQ8BwAEAAYABAwQAAfICAAEvAcACAAEPAcACAAEDBAAB8gIA + AQ8BgAIAAQ8BwAIAAQMB8AEfAYABAQHyAgABDwGgAgABHwHAAgABAwHwAR8BwAEBAfICAAEPAwABHwHA + AQABIAEDAfABHwHAAQMB8gIAAQ8BQAIAAR8BwAIAAQMB8AEfAeABAwHyAgABDwMAAT8BwAGAAQABAwHw + AR8B8AEHAfICAAEPAYACAAE/AcACAAEDAfABHwHwAQcB8AIAAQ8BwAIAAT8B4AIAAQcB8AEfAfgBDwHw + AgABDwHAAgABfwHgAgABBwHwAR8B+AEfAfACAAEfAcACAAF/AfACAAEPAfABHwH8AR8B8AIAAT8BwAIA + AX8B8AIAAQ8B8AEfAfwBPwHwAQABAgF/AYACAAF/AfgCAAEfAfABHwH+AT8B8AEAAQQB/wGAAgAB/wH8 + AgABPwHwAR8B/gF/AfABAAEBAf8BwAIAAf8B/gIAAX8E/wHwAQABAwL/AgAC/wGAAQEF/wHzAbwBBwL/ + AfgBAQL/AcABAwX/AfABAAEPA/8BwQn/AecC/wHnAeACAAEHAf8BwAEDAf8EAAHwAgABBwGAAgABAQH/ + AgAB/wQAAfQCAAEvAYACAAEBAfwCAAE/BAAB9wHAAQABbwEAAQEBkAEAAfgCAAEfBAAB9wGAAQABLwIA + AZABAAHwAgABDwQAAfcBgAEAAQ8CAAGDAfwB4AIAAQcEAAH3AgABDwIAAUQBBAHAAgABAwQAAfYCAAEP + AwABBAHAAgABAwQAAfYCAAEHBAABgAIAAQEEAAH2AgABBwQAAYACAAEBBAAB9AIAAQcCAAECBgABAQGA + AQAB9AIAAQcJAAEBAYABAAH0AgABBwwAAfACAAEHAQABAQGABgABCAIAAfACAAEHAQABAQGAARAFAAEI + AgAB8AIAAQ8BAAEBAZMB/AUAAQgCAAHwAgABDwkAAQkBgAEAAfQBIAEAAQ8JAAEJAZABAAH0AgABLwkA + AQgBEAEAAfQCAAEvCQABCAEQAQAB9AIAAS8MAAH0AgABDwwAAfQCAAEPBAABgAIAAQEBDAIAARAB9AIA + AQ8EAAGAAgABAQESAgABSAH0AgABHwQAAcACAAEDAQECAAGAAfQBAAEBAT8DAAEQAcACAAEDAQECAAGA + AfQBAAECAX8EAAHgAgABBwEBAgABgAHwAQABBAH/BAAB8AIAAQ8EAAHwAQABAQH/BAAB+AIAAR8BgAIA + AQEB8AEAAQMB/wGAAgABAQH8AgABPwT/AfcB/wHnAf8BwAIAAQMB/wIABf8B8AEAAQ8G/wHAAQMB/ws=