From 27d1508ce67ea2f2c78eb8c5b35a8dd90262b1a6 Mon Sep 17 00:00:00 2001 From: Manuel Kamper Date: Fri, 27 Dec 2019 23:04:14 +0100 Subject: [PATCH] =?UTF-8?q?Projektdateien=20hinzuf=C3=BCgen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mk0.Software.OnlineUpdater.sln | 25 + Mk0.Software.OnlineUpdater/App.config | 6 + .../DownloadUpdateDialog.Designer.cs | 88 ++ .../DownloadUpdateDialog.cs | 324 ++++++ .../DownloadUpdateDialog.resx | 799 +++++++++++++++ .../Mk0.Software.OnlineUpdater.csproj | 130 +++ Mk0.Software.OnlineUpdater/OnlineUpdater.cs | 914 +++++++++++++++++ Mk0.Software.OnlineUpdater/Program.cs | 22 + .../Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 224 ++++ .../Properties/Resources.resx | 172 ++++ .../Properties/Settings.Designer.cs | 30 + .../Properties/Settings.settings | 7 + .../RemindLaterForm.Designer.cs | 146 +++ Mk0.Software.OnlineUpdater/RemindLaterForm.cs | 72 ++ .../RemindLaterForm.resx | 433 ++++++++ .../Resources/Unzipper.exe | Bin 0 -> 104448 bytes .../Resources/clock_go.png | Bin 0 -> 965 bytes .../Resources/clock_go_32.png | Bin 0 -> 2585 bytes .../Resources/clock_play.png | Bin 0 -> 959 bytes .../Resources/download.png | Bin 0 -> 574 bytes .../Resources/download_32.png | Bin 0 -> 1128 bytes .../Resources/hand_point.png | Bin 0 -> 620 bytes .../Resources/update.png | Bin 0 -> 4467 bytes .../UpdateForm.Designer.cs | 133 +++ Mk0.Software.OnlineUpdater/UpdateForm.cs | 197 ++++ Mk0.Software.OnlineUpdater/UpdateForm.resx | 955 ++++++++++++++++++ 27 files changed, 4713 insertions(+) create mode 100644 Mk0.Software.OnlineUpdater.sln create mode 100644 Mk0.Software.OnlineUpdater/App.config create mode 100644 Mk0.Software.OnlineUpdater/DownloadUpdateDialog.Designer.cs create mode 100644 Mk0.Software.OnlineUpdater/DownloadUpdateDialog.cs create mode 100644 Mk0.Software.OnlineUpdater/DownloadUpdateDialog.resx create mode 100644 Mk0.Software.OnlineUpdater/Mk0.Software.OnlineUpdater.csproj create mode 100644 Mk0.Software.OnlineUpdater/OnlineUpdater.cs create mode 100644 Mk0.Software.OnlineUpdater/Program.cs create mode 100644 Mk0.Software.OnlineUpdater/Properties/AssemblyInfo.cs create mode 100644 Mk0.Software.OnlineUpdater/Properties/Resources.Designer.cs create mode 100644 Mk0.Software.OnlineUpdater/Properties/Resources.resx create mode 100644 Mk0.Software.OnlineUpdater/Properties/Settings.Designer.cs create mode 100644 Mk0.Software.OnlineUpdater/Properties/Settings.settings create mode 100644 Mk0.Software.OnlineUpdater/RemindLaterForm.Designer.cs create mode 100644 Mk0.Software.OnlineUpdater/RemindLaterForm.cs create mode 100644 Mk0.Software.OnlineUpdater/RemindLaterForm.resx create mode 100644 Mk0.Software.OnlineUpdater/Resources/Unzipper.exe create mode 100644 Mk0.Software.OnlineUpdater/Resources/clock_go.png create mode 100644 Mk0.Software.OnlineUpdater/Resources/clock_go_32.png create mode 100644 Mk0.Software.OnlineUpdater/Resources/clock_play.png create mode 100644 Mk0.Software.OnlineUpdater/Resources/download.png create mode 100644 Mk0.Software.OnlineUpdater/Resources/download_32.png create mode 100644 Mk0.Software.OnlineUpdater/Resources/hand_point.png create mode 100644 Mk0.Software.OnlineUpdater/Resources/update.png create mode 100644 Mk0.Software.OnlineUpdater/UpdateForm.Designer.cs create mode 100644 Mk0.Software.OnlineUpdater/UpdateForm.cs create mode 100644 Mk0.Software.OnlineUpdater/UpdateForm.resx diff --git a/Mk0.Software.OnlineUpdater.sln b/Mk0.Software.OnlineUpdater.sln new file mode 100644 index 0000000..caf77b3 --- /dev/null +++ b/Mk0.Software.OnlineUpdater.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29613.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mk0.Software.OnlineUpdater", "Mk0.Software.OnlineUpdater\Mk0.Software.OnlineUpdater.csproj", "{F59DCD1B-931C-4A49-9D55-DEAA229218F6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F59DCD1B-931C-4A49-9D55-DEAA229218F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F59DCD1B-931C-4A49-9D55-DEAA229218F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F59DCD1B-931C-4A49-9D55-DEAA229218F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F59DCD1B-931C-4A49-9D55-DEAA229218F6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {46EFBFE7-956E-4236-AEB1-200F0C7AE661} + EndGlobalSection +EndGlobal diff --git a/Mk0.Software.OnlineUpdater/App.config b/Mk0.Software.OnlineUpdater/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/Mk0.Software.OnlineUpdater/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Mk0.Software.OnlineUpdater/DownloadUpdateDialog.Designer.cs b/Mk0.Software.OnlineUpdater/DownloadUpdateDialog.Designer.cs new file mode 100644 index 0000000..1eb26a5 --- /dev/null +++ b/Mk0.Software.OnlineUpdater/DownloadUpdateDialog.Designer.cs @@ -0,0 +1,88 @@ +namespace Mk0.Software.OnlineUpdater +{ + partial class DownloadUpdateDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DownloadUpdateDialog)); + this.pictureBoxIcon = new System.Windows.Forms.PictureBox(); + this.progressBar = new System.Windows.Forms.ProgressBar(); + this.labelInformation = new System.Windows.Forms.Label(); + this.labelSize = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcon)).BeginInit(); + this.SuspendLayout(); + // + // pictureBoxIcon + // + this.pictureBoxIcon.Image = Properties.Resources.download_32; + resources.ApplyResources(this.pictureBoxIcon, "pictureBoxIcon"); + this.pictureBoxIcon.Name = "pictureBoxIcon"; + this.pictureBoxIcon.TabStop = false; + // + // progressBar + // + resources.ApplyResources(this.progressBar, "progressBar"); + this.progressBar.Name = "progressBar"; + // + // labelInformation + // + resources.ApplyResources(this.labelInformation, "labelInformation"); + this.labelInformation.Name = "labelInformation"; + // + // labelSize + // + resources.ApplyResources(this.labelSize, "labelSize"); + this.labelSize.Name = "labelSize"; + // + // DownloadUpdateDialog + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.labelSize); + this.Controls.Add(this.labelInformation); + this.Controls.Add(this.progressBar); + this.Controls.Add(this.pictureBoxIcon); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "DownloadUpdateDialog"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DownloadUpdateDialog_FormClosing); + this.Load += new System.EventHandler(this.DownloadUpdateDialogLoad); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcon)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureBoxIcon; + private System.Windows.Forms.ProgressBar progressBar; + private System.Windows.Forms.Label labelInformation; + private System.Windows.Forms.Label labelSize; + } +} \ No newline at end of file diff --git a/Mk0.Software.OnlineUpdater/DownloadUpdateDialog.cs b/Mk0.Software.OnlineUpdater/DownloadUpdateDialog.cs new file mode 100644 index 0000000..383020e --- /dev/null +++ b/Mk0.Software.OnlineUpdater/DownloadUpdateDialog.cs @@ -0,0 +1,324 @@ +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Net; +using System.Net.Cache; +using System.Net.Mime; +using System.Security.Cryptography; +using System.Text; +using System.Windows.Forms; +using Mk0.Software.OnlineUpdater.Properties; + +namespace Mk0.Software.OnlineUpdater +{ + internal partial class DownloadUpdateDialog : Form + { + private readonly string _downloadURL; + + private string _tempFile; + + private MyWebClient _webClient; + + private DateTime _startedAt; + + public DownloadUpdateDialog(string downloadURL) + { + InitializeComponent(); + + _downloadURL = downloadURL; + + if (AutoUpdater.Mandatory && AutoUpdater.UpdateMode == Mode.ForcedDownload) + { + ControlBox = false; + } + } + + private void DownloadUpdateDialogLoad(object sender, EventArgs e) + { + var uri = new Uri(_downloadURL); + + if (uri.Scheme.Equals(Uri.UriSchemeFtp)) + { + _webClient = new MyWebClient { Credentials = AutoUpdater.FtpCredentials }; + } + else + { + _webClient = new MyWebClient(); + + if (uri.Scheme.Equals(Uri.UriSchemeHttp) || uri.Scheme.Equals(Uri.UriSchemeHttps)) + { + if (AutoUpdater.BasicAuthDownload != null) + { + _webClient.Headers[HttpRequestHeader.Authorization] = AutoUpdater.BasicAuthDownload.ToString(); + } + + _webClient.Headers[HttpRequestHeader.UserAgent] = AutoUpdater.GetUserAgent(); + } + } + + _webClient.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); + + if (AutoUpdater.Proxy != null) + { + _webClient.Proxy = AutoUpdater.Proxy; + } + + if (string.IsNullOrEmpty(AutoUpdater.DownloadPath)) + { + _tempFile = Path.GetTempFileName(); + } + else + { + _tempFile = Path.Combine(AutoUpdater.DownloadPath, $"{Guid.NewGuid().ToString()}.tmp"); + if (!Directory.Exists(AutoUpdater.DownloadPath)) + { + Directory.CreateDirectory(AutoUpdater.DownloadPath); + } + } + + _webClient.DownloadProgressChanged += OnDownloadProgressChanged; + + _webClient.DownloadFileCompleted += WebClientOnDownloadFileCompleted; + + _webClient.DownloadFileAsync(uri, _tempFile); + } + + private void OnDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) + { + if (_startedAt == default(DateTime)) + { + _startedAt = DateTime.Now; + } + else + { + var timeSpan = DateTime.Now - _startedAt; + long totalSeconds = (long)timeSpan.TotalSeconds; + if (totalSeconds > 0) + { + var bytesPerSecond = e.BytesReceived / totalSeconds; + labelInformation.Text = + string.Format(Resources.DownloadSpeedMessage, BytesToString(bytesPerSecond)); + } + } + + labelSize.Text = $@"{BytesToString(e.BytesReceived)} / {BytesToString(e.TotalBytesToReceive)}"; + progressBar.Value = e.ProgressPercentage; + } + + private void WebClientOnDownloadFileCompleted(object sender, AsyncCompletedEventArgs asyncCompletedEventArgs) + { + if (asyncCompletedEventArgs.Cancelled) + { + return; + } + + if (asyncCompletedEventArgs.Error != null) + { + MessageBox.Show(asyncCompletedEventArgs.Error.Message, + asyncCompletedEventArgs.Error.GetType().ToString(), MessageBoxButtons.OK, + MessageBoxIcon.Error); + _webClient = null; + Close(); + return; + } + + if (!string.IsNullOrEmpty(AutoUpdater.Checksum)) + { + if (!CompareChecksum(_tempFile, AutoUpdater.Checksum)) + { + _webClient = null; + Close(); + return; + } + } + + ContentDisposition contentDisposition = null; + if (_webClient.ResponseHeaders["Content-Disposition"] != null) + { + contentDisposition = new ContentDisposition(_webClient.ResponseHeaders["Content-Disposition"]); + } + + var fileName = string.IsNullOrEmpty(contentDisposition?.FileName) + ? Path.GetFileName(_webClient.ResponseUri.LocalPath) + : contentDisposition.FileName; + + var tempPath = + Path.Combine( + string.IsNullOrEmpty(AutoUpdater.DownloadPath) ? Path.GetTempPath() : AutoUpdater.DownloadPath, + fileName); + + try + { + if (File.Exists(tempPath)) + { + File.Delete(tempPath); + } + + File.Move(_tempFile, tempPath); + } + catch (Exception e) + { + MessageBox.Show(e.Message, e.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); + _webClient = null; + Close(); + return; + } + + AutoUpdater.InstallerArgs = AutoUpdater.InstallerArgs.Replace("%path%", + Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)); + + var processStartInfo = new ProcessStartInfo + { + FileName = tempPath, + UseShellExecute = true, + Arguments = AutoUpdater.InstallerArgs + }; + + var extension = Path.GetExtension(tempPath); + if (extension.Equals(".zip", StringComparison.OrdinalIgnoreCase)) + { + string installerPath = Path.Combine(Path.GetDirectoryName(tempPath), "ZipExtractor.exe"); + + try + { + File.WriteAllBytes(installerPath, Resources.Unzipper); + } + catch (Exception e) + { + MessageBox.Show(e.Message, e.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); + _webClient = null; + Close(); + return; + } + + StringBuilder arguments = + new StringBuilder($"\"{tempPath}\" \"{Process.GetCurrentProcess().MainModule.FileName}\""); + string[] args = Environment.GetCommandLineArgs(); + for (int i = 1; i < args.Length; i++) + { + if (i.Equals(1)) + { + arguments.Append(" \""); + } + + arguments.Append(args[i]); + arguments.Append(i.Equals(args.Length - 1) ? "\"" : " "); + } + + processStartInfo = new ProcessStartInfo + { + FileName = installerPath, + UseShellExecute = true, + Arguments = arguments.ToString() + }; + } + else if (extension.Equals(".msi", StringComparison.OrdinalIgnoreCase)) + { + processStartInfo = new ProcessStartInfo + { + FileName = "msiexec", + Arguments = $"/i \"{tempPath}\"" + }; + if (!string.IsNullOrEmpty(AutoUpdater.InstallerArgs)) + { + processStartInfo.Arguments += " " + AutoUpdater.InstallerArgs; + } + } + + if (AutoUpdater.RunUpdateAsAdmin) + { + processStartInfo.Verb = "runas"; + } + + try + { + Process.Start(processStartInfo); + } + catch (Win32Exception exception) + { + _webClient = null; + if (exception.NativeErrorCode != 1223) + throw; + } + + Close(); + } + + private static String BytesToString(long byteCount) + { + string[] suf = { "B", "KB", "MB", "GB", "TB", "PB", "EB" }; + if (byteCount == 0) + return "0" + suf[0]; + long bytes = Math.Abs(byteCount); + int place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024))); + double num = Math.Round(bytes / Math.Pow(1024, place), 1); + return $"{(Math.Sign(byteCount) * num).ToString(CultureInfo.InvariantCulture)} {suf[place]}"; + } + + private static bool CompareChecksum(string fileName, string checksum) + { + using (var hashAlgorithm = HashAlgorithm.Create(AutoUpdater.HashingAlgorithm)) + { + using (var stream = File.OpenRead(fileName)) + { + if (hashAlgorithm != null) + { + var hash = hashAlgorithm.ComputeHash(stream); + var fileChecksum = BitConverter.ToString(hash).Replace("-", String.Empty).ToLowerInvariant(); + + if (fileChecksum == checksum.ToLower()) return true; + + MessageBox.Show(Resources.FileIntegrityCheckFailedMessage, + Resources.FileIntegrityCheckFailedCaption, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + else + { + if (AutoUpdater.ReportErrors) + { + MessageBox.Show(Resources.HashAlgorithmNotSupportedMessage, + Resources.HashAlgorithmNotSupportedCaption, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + return false; + } + } + } + + private void DownloadUpdateDialog_FormClosing(object sender, FormClosingEventArgs e) + { + if (_webClient == null) + { + DialogResult = DialogResult.Cancel; + } + else if (_webClient.IsBusy) + { + _webClient.CancelAsync(); + DialogResult = DialogResult.Cancel; + } + else + { + DialogResult = DialogResult.OK; + } + } + } + + /// + public class MyWebClient : WebClient + { + /// + /// Response Uri after any redirects. + /// + public Uri ResponseUri; + + /// + protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result) + { + WebResponse webResponse = base.GetWebResponse(request, result); + ResponseUri = webResponse.ResponseUri; + return webResponse; + } + } +} diff --git a/Mk0.Software.OnlineUpdater/DownloadUpdateDialog.resx b/Mk0.Software.OnlineUpdater/DownloadUpdateDialog.resx new file mode 100644 index 0000000..cf4702a --- /dev/null +++ b/Mk0.Software.OnlineUpdater/DownloadUpdateDialog.resx @@ -0,0 +1,799 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 14, 14 + + + + 4, 4, 4, 4 + + + 59, 62 + + + CenterImage + + + + 0 + + + pictureBoxIcon + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + 81, 45 + + + 4, 4, 4, 4 + + + 319, 26 + + + 1 + + + progressBar + + + System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + True + + + Segoe UI, 9pt + + + 78, 14 + + + 4, 0, 4, 0 + + + 128, 15 + + + 2 + + + Update wird heruntergeladen... + + + labelInformation + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Right + + + 265, 14 + + + 135, 15 + + + 3 + + + MiddleRight + + + labelSize + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 7, 15 + + + 413, 90 + + + Segoe UI, 9pt + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wEAAAADAAAAAwAAAAMAAAADAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAAkAAAANAAAADwAAABEABQ0TAEqmPQAAAA0AAAAJAAAABf///wH///8B////Af// + /wH///8BAAAABwAAAA0ASKJBBVGsWwAAAB0AAAAhCV2/hxBv2MUAAAAZAAAAFQAAAA8AAAAHAAAAA/// + /wH///8BAAAAAwAAAAkAAAARAEqnVyuO7/8Xbc2vA0ibbxuF7vsVfur7ACBILwAAABkAFzQZADR2GQAA + AAX///8B////Af///wEAAAAJAAAADwBKo0sokvT/IJH3/yeO8P8Wi/f/HYz1/xRs0LkWdt7LFHbj9wBT + u0cAAAAD////Af///wEAXM4RAFrITxJpzW8eddWlMpn0/x+U+P8ilvj/UrH6/xeN9/8Xi/b/DIP1/xh5 + 480AAAUF////Af///wH///8BAFzPDS+F4sU/ovj/LJz4/yea+P8nmvn/f8f8//H5/v8/pvr/Foz3/x+N + 9f8KZtNt////Af///wH///8B////Af///wEAXM4TM4vm0zOh+f8toPn/Qab5//P5/v//////yef9/x2R + 9/8YjPb/IYbt+Rp13ZUAXM4b////Af///wH///8B////ASB32otEqfj/M6X6/0Ok+f+Uyfv//////2Wz + +v8olff/FIv3/xeJ9v8nh+z5D2nVj////wH///8B////ASB32nNGpPX/L6L6/zao+v86q/v/aLb6//// + //8nm/j/HZL4/yuV9v8ged2pAFvOH////wH///8B////AQBbzR8yhN+3QJXp10Ga7fdGrfr/Naf6/0un + +f+q0vv/IJX4/xyR9/8ikff/KH3ei////wH///8B////Af///wH///8B////Af///wEAXM5DS6v4/y6h + +f84pPn/Jpr4/zCd+P81k+3/M5f1/zuQ6usAW84J////Af///wH///8B////Af///wH///8BAFzOU1Wv + +f9Gne7vOovjxTWf+P88mfH/AFvNMQJfz0kieNuFAFzOM////wH///8B////Af///wH///8B////AQNf + z2M/jeKtAFzOGwBbzg87kOjbP5Loz////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAW8wH////Af///wH///8BBWHQMxhu1nf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAAAAUAAAAFAAAABwAAAAcAAAAHAAAABwAA + AAcAAAAFAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAAAAkAAAALAAAACwAAAA0AAAANAAAADwAA + AA8AAAANAAAADQAAAA0AAAALAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAFAAAABwAAAAsAAAANAAAADwAAABEAAAATAAAAEwAA + ABUAAAAVAAAAFQAPJhkAWci7ACxgIQAAABEAAAARAAAADwAAAAsAAAAJAAAABwAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAADAAAABwAAAAkAAAANAAAADwBHnj0AH0YdAAAAFwAA + ABkAAAAbAAAAHQAAAB0AAAAdAFW+mQ5v3P0ATq5rAAAAGQAAABcAAAATAAAAEQAAAA0AAAALAAAABwAA + AAX///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAJAAAADQAAAA8AAAATAFfEpQhj + 0N8ARpxVAAAAHwAAACEAAAAjAAAAJQBIoGsTduL9JIz0/wJYwa8AAAAdAAAAGwAAABcAAAAVAAAAEQAA + AA8AAAALAAAABwAAAAX///8B////Af///wH///8B////Af///wEAAAADAAAABwAAAAsAAAAPAAAAEQAA + ABUAVsCbOpfz/x984f0BVr2lABg4MwAAACkALmhJDWvX8SKO9v8XiPb/DmvY8QAIFSUAAAAfAAAAGwAA + ABcAAAATAAAAEQAAAA0AAAAJAAAABf///wH///8B////Af///wH///8B////AQAAAAMAAAAHAAAACwAA + AA8AAAATAAAAFQBUvZEylPL/IZD3/zKR8P8PadLlAESYcQZgy9ktk/T/EIb2/xCF9v8efuX9AEGPWQAA + AB8AAAAbAAAAFwAAABUAOH4pAE2tQQAAAAkAAAAFAAAAA////wH///8B////Af///wH///8BAAAAAwAA + AAcAAAALAAAADwAAABEAAAAVAFW8iTeW8f8WjPf/GY33/zOa9/8ng+X/MZDv/xqN9/8RiPb/EIf2/yqO + 8f8AVLufAD6JSwBRtX0AWMStCGbU4RBu3P8AWsvBAAAACQAAAAX///8B////Af///wH///8B////Af// + /wH///8BAAAABQAAAAkAAAANAAAADwAAABMAVbx9O5fw/xqP9/8aj/f/Go/3/ySU9/8hkvf/Foz3/xWL + 9/8Tivf/J5P3/xt43/8efOP9JYjt/yKL9f8difb/GXnk/QBTuUkAAAAHAAAAA////wH///8B////Af// + /wH///8B////Af///wEAAAADAAAABQAAAAkAAAALABUtEwBXwYk/mO7/HZL4/x6T+P8dkvj/HZL4/xyR + +P8tofn/HpP3/xaM9/8Vi/f/IZD3/xaJ9v8Mg/b/CYH1/x+L9f8JZdLRAAAKBwAAAAX///8B////Af// + /wH///8B////Af///wH///8BAFzOQQBczokAXMynDWfTwxlz2eUie979LYTi/02l9P8hlvj/IZb4/yGW + +P8glfj/L6H6/7Pf/f9Ksfv/GpD3/xeN9/8Uivf/EYj2/w6F9v8NhPb/J4Xq/QBYyGUAAAAD////Af// + /wH///8B////Af///wH///8B////Af///wEAXM81EGvW62ez+P9Jp/n/P6P5/zig+P8xnvj/J5r4/yWZ + +f8lmfn/JZn5/yqd+f+Jzv3//////8jo/v8vofr/GY/3/xaM9/8Tivf/EIf2/yWQ9v8Tb9npAFi/Cf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM45Hnfb81Gr+f8ilvj/I5j4/yWZ + +f8nm/n/KJz5/ymc+f8pnPn/VLX7//b7/v///////////5DR/f8kmPn/GI73/xWL9/8SiPb/NpTx/wBc + zrcAWs8J////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM5HJn7e91Su + +v8mmvn/KZz5/yqe+f8sn/n/LaD5/yuc+P/S6v3/////////////////+Pz+/1a1+/8ckfj/F433/xOK + 9/8ok/f/NI7s/RJu2OUAW85tAF7QB////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAXM5VL4bi/VSw+v8rn/n/LqH6/y+i+v8kmPn/i8X6////////////////////////////1+z+/yiZ + +P8Yjvf/FYv3/xGI9v8Sh/b/K5L3/zCL6/0Qa9fhAFzOZQBZzAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAXM6xYrD0/zCh+v8xpPr/M6X6/xmI9v+m0Pv/qtL7/+Pw/v///////////6zU + +/+t1fz/Vqv5/xiO9/8WjPf/Eon3/w+F9v8Lgvb/EIT1/0Cb9/8jet/9AFzNvf///wH///8B////Af// + /wH///8B////Af///wH///8BAFvNeUeX6P9Pr/r/MKP6/zOm+v82qPv/K575/ySZ+f8Xjvf/rNP8//// + ////////I5f5/xiN9/8WjPf/Go/3/xeN9/8Tiff/FIj2/zGV9/83j+z9FG3Y5wBbzXMAWcwL////Af// + /wH///8B////Af///wH///8B////AQBczm1Bk+f/VLD6/y2g+v8xpPr/Naf6/ziq+/87rPv/Oav7/yWY + +f+s0/z///////////8vofr/I5f4/x+U+P8bkPj/F433/zSa+P9Alu39F3HZ5wBbznMAXNEL////Af// + /wH///8B////Af///wH///8B////Af///wEAXM5jO43k/Vix+v8qnfn/LqD6/zGk+v81p/r/OKr7/zus + +/85q/v/JZj5/6zT/P///////////yqd+P8jl/j/H5T4/xuQ+P8Xjff/S6Dy/wBczbEAXNEL////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFvNUxlz2P13uvb/aLj5/2O3+v9atPv/ULH6/z6q + +v82qPv/OKn7/zeo+/8jmPj/rNP8////////////JJj4/yKX+P8ek/j/G5D3/xeN9/8/n/j/GXHY2wBt + 2wP///8B////Af///wH///8B////Af///wH///8B////Af///wEAW84nAFzOYwBczYEAXM6fEGrTvSR7 + 3OMyhd/9cr34/zOl+v80pvr/M6X6/yWa+f86l/f/VaX4/1Wl+P8Zj/f/IZb4/x2S+P8aj/f/Foz3/xuN + 9/9Ckuj/AFzOS////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBczn9ptfX/L6L6/zCj+v8wovr/LqH6/yyf+f8pnfn/Jpr5/yOX+P8ml/j/PKH5/yeW + 9/8Vi/f/EYj2/0qi9v8NZdGz////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAFvOjWm39/8sn/n/LaD5/y2g+f9Nrfr/OqX5/yeb+f8kmPj/IZb4/1iu + +f8wg+D/QpHm/VSk8v9Sp/j/Uaf4/zSG4v0AW84j////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAXM6babj5/yic+f85pPn/bLj4/ziJ4f1osfT/Lpz5/yGW + +P8flPj/X6nw/wBczXEAW845AF3OdQVg0K8dddvtLX/e/wBczov///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQBczqtqufr/V7H6/1ii7P8QadTBAFzPORZv + 199ntvn/IJT4/zSd+P8+jOL9AFvNG////wH///8B////Af///wEAW84pAFzOP////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BBWLRt3y89v8rfdzvAFzPZf// + /wH///8BAFvOOS6D4PlRq/n/U6v5/xlw1sf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wECXc7RCmTSqwBb + zhn///8B////Af///wH///8BAFvNc02b6v9orvP/AFzOef///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBb + zBv///8B////Af///wH///8B////Af///wH///8BBWHRsy5+3f0AXM4n////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAW84TAFzOs////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAADAAAAAwAAAAMAAAADAAAABQAAAAUAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAA + AAcAAAAFAAAABQAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAAUAAAAFAAAABwAAAAkAAAAJAAAACwAAAAsAAAANAAAADQAAAA0AAAANAAAADQAA + AA0AAAANAAAADQAAAAsAAAALAAAACwAAAAkAAAAJAAAABwAAAAUAAAAFAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAAMAAAAFAAAABwAAAAkAAAAJAAAACwAAAA0AAAANAAAADwAAAA8AAAARAAAAEQAA + ABEAAAARAAAAEQAAABEAAAARAEWaNQBGnjcAAgQPAAAADwAAAA0AAAANAAAACwAAAAkAAAAJAAAABwAA + AAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAACwAAAA0AAAANAAAADwAAABEAAAARAAAAEwAA + ABMAAAAVAAAAFwAAABUAAAAVAAAAFQAAABUAG0UfAFrL1wBWwZUAI04fAAAAEwAAABEAAAARAAAADwAA + AA0AAAANAAAACwAAAAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAsAAAALAAAADQAPIRMAP40vABo7GwAA + ABUAAAAXAAAAGQAAABkAAAAZAAAAGwAAABsAAAAdAAAAGwAiTykAV8KpCWnX/QVgzdMAPYc9AAAAFwAA + ABcAAAAVAAAAEwAAABEAAAAPAAAADQAAAA0AAAALAAAABwAAAAcAAAAD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAABQAAAAcAAAAHAAAACwAAAA0AAAAPAAAAEQA1 + dScAWMavAFS8iQA2ejUAAQMbAAAAHQAAAB0AAAAfAAAAHwAAACEAAAAhABQsKQBQsoEHZ9bvIIbv/w5t + 2vcASKFdAAAAGwAAABkAAAAZAAAAFwAAABUAAAATAAAADwAAAA8AAAANAAAACQAAAAkAAAAHAAAAA/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAADQAA + AA8AAAARAAAAEwA3fS8AWsrRD2zY9wFax8MARppXAAAAHwAAACEAAAAjAAAAJQAAACUAAAAlAEGQWwVi + 0OUeg+v/IYz1/xZ34f8BVLmTAAAAHwAAAB0AAAAbAAAAGQAAABcAAAAVAAAAEwAAABEAAAAPAAAACwAA + AAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAA + AAsAAAALAAAADQAAABEAAAATAAAAFQAsYykAWcnNN5Xy/y2K6v0Pa9f9AVS4lwAxb0MABxEpAAAAJwAA + ACkAKF1DBGDN5R+B6P0hjfb/EIX2/x+D6/8GYc/hAAYPJQAAACEAAAAdAAAAGwAAABkAAAAXAAAAFQAA + ABMAAAAPAAAADQAAAAsAAAAJAAAABwAAAAX///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAAFAAAABwAAAAkAAAANAAAADwAAABEAAAATAAAAFQAfRyMAWcjLM5Px/zWZ9/8yk/H/HHfe+wdf + ycsAR6B1AAYPLQAfRj8AUrmxGXri/ymR9f8Sh/b/D4X2/yOL8/8LaNf/ADNyQwAAACEAAAAfAAAAHQAA + ABkAAAAXAAAAFQAAABMAAAARAAAADwAAAAsAAAAJAAAABwAAAAMAAAAD////Af///wH///8B////Af// + /wH///8B////AQAAAAMAAAAFAAAABwAAAAkAAAANAAAADwAAABEAAAATAAAAFQANIh0AWcfHMJHv/yeT + 9/8djvf/NZf1/y6L6v8NaNLrAFO3pQBQtKENa9b1Mpb1/xuM9v8Phvb/DoX2/yKO9v8Xdd/9AE6rfwAA + ACEAAAAfAAAAHQAAABkAAAAXAAAAFwAdPRsAR6A9AFS+bQBAkSMAAAAJAAAABwAAAAMAAAAD////Af// + /wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAAAAkAAAALAAAADwAAABEAAAATAAAAFQAA + ABcAWsfDMZDu/yuW9/8Vi/b/F4z3/yqV9/88nfb/IHzg/RJv2v80lPH/I5H3/xKI9/8Rh/b/EIf2/xyM + 9v8piez/AFjFxQAkUTMAL2k5AECRSwBMqmMAVb6PBF/NyQdk1PUHZdX/AFvN6wBUvl0AAAAJAAAABwAA + AAX///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABwAAAAkAAAALAAAADQAA + AA8AAAARAAAAFQAAABcAWse5MZDs/zCZ+P8Yjff/GI73/xiO9/8ikvf/Npz3/zmb9f8vmPf/FYv3/xSK + 9/8Tiff/EYj2/xaK9v8ylvX/BV7M6wBWwbEDXMe/DGnW6RFw3f0XduH/HH/p/SKG7/8be+b9AFrKrwAw + bBUAAAAJAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAA + AAcAAAAJAAAACwAAAA8AAAAPAAAAEQAAABUAWsexMo7r/zSc+P8aj/f/Go/3/xqP9/8aj/f/HZH3/yGT + 9/8bj/f/F433/xaM9/8Vi/f/FIr3/xOJ9v8vl/f/KIXo/yWE6P8sjO39LI/y/yWN9P8cifX/FIT1/yKK + 9P8Oa9n/AFS7UwAAAAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAAUAAAAHAAAACQAAAAsAAAANAAYNDwAdQRkAWsevMY3p/zug+f8dkvj/HZL3/x2S + +P8ckvj/HJH3/xyR+P8bkfj/JZn4/ySY+P8Zjvf/Foz3/xSL9/8Wi/f/KZT3/yOQ9v8Xivb/DIP2/wqB + 9v8IgPX/E4X1/yGB6f8GYtDPAAARCQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAF3FBwBVvBkAVr8tAFbBRwBWwVsAWMRvAFjFhQBYxZUAW8znM47p/z+j + +f8flPf/H5T3/x+U+P8flPf/HpP3/x6T+P8lmvn/Ubf7/1e4+/8lmvj/GI73/xaM9/8Vi/f/E4n3/xGI + 9v8Phvb/DYT2/wuD9v8Jgfb/JYz0/xd03vsBWcZtAAAABQAAAAMAAAAD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAXM6PAFzOwwBbzcsBXc7TDmnU3Rt02uklf+D1MYnl/TuS + 6f9Fmu3/U6n1/zig+P8hlvf/IZb4/yGW9/8hlvf/IZX4/ySY+P83qPv/u+P9/7He/f9Gr/v/HJH4/xiO + 9/8Xjff/FIv3/xOJ9/8RiPb/D4X2/wyE9v8Rhfb/L43v/wtm09EAU74xAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM9zC2bT8Uia7f9ntPn/WK75/1Ss + +f9Oqvn/Rab5/z6j+P83oPj/LJv4/ySY+f8kmPj/JJj4/ySY+f8kmPj/JZn5/zin+/+S0f3///////v9 + /v+Y1P3/MaP6/xyR9/8Yjvf/Foz3/xSK9/8Siff/EIf2/w+G9v8qk/b/IHvh+QBczIEAV78H////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAVdUDAV3PgR92 + 2u9Yp/L/QKP5/yGU+P8glPj/IZb4/yOX+P8kmPj/JZn5/yaa+f8mmvn/J5v5/yeb+f8nmvn/MKL6/23C + /P/k8/7////////////v+P7/Ybz8/ymd+f8bkPf/F433/xaM9/8Uivf/EYj2/xiL9v85mPX/CmXT2wBb + zjn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAFzOEwJf0I8adNr1XbD4/zmh+P8ilvj/I5j4/ySZ+P8mmvj/J5v4/yic+P8pnPj/KZz4/ymc + +P8qnfj/SrD7/8Hl/f/8/v7/////////////////w+b+/0iw+/8ilfj/GY/3/xeN9/8Vi/f/E4n2/ySR + 9/81j+3/AFzO4QBbzlMAWs8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQBd0QkAXM6JIHnb+Vut9f8/pPn/JZn4/yeb+f8pnPj/Kp35/yue + +f8rn/n/LJ/5/yue+f8rnfj/otX8//7///////////////7+/v//////+vz+/6XZ/P88qfr/HJH4/xiO + 9/8WjPf/E4r3/xmM9/84m/f/Mo3q/xZx2v0HY9LHAFzOSwBbzhcAXs8D////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAWssNBWHQpSqC4PlgsPf/OqT5/ymd + +f8qnvn/LJ/5/y2g+v8toPn/LaD5/yOX+f9csPn/9vr+///////+/v7////////////+/v7//////+v2 + /v9ywPv/I5f4/xqP9/8Xjff/FIv3/xKJ9/8Vifb/KZL3/zaV9P8vien9FXDZ7wRf0KkAXM1ZAFnSCf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzNIwVi + 0a8uheL9Z7n6/zql+f8sn/n/LaH6/y+i+v8wo/r/J5v4/zKZ+P/F4vz///////7+/v////////////// + ///////////////////a7v7/L534/xyS+P8Yjvf/FYz3/xOJ9/8RiPb/D4b2/xSH9v8jjvf/OZXy/y6H + 6P0Qa9bnAFzOqQBbzTsAWcsF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBbzisAW87VUKPv/1ay+v8vofr/MKP6/zGk+v8zpfr/E4b2/3i4+f/S5/3/1Oj9/9zs + /f/4+/7/////////////////1en9/9bq/f/W6v3/hcL6/xqP9/8Zj/f/Foz3/xSK9/8RiPf/D4X2/w2E + 9v8Kgvb/DIL1/yqQ9v9CnPb/LILk/QVg0P0AW82X////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAFzPEQBczn8fd9rvaLb3/0es+v8wovr/MaT6/zOl+v80p/r/GIz3/yqS + 9/8zl/f/MZb2/1Gk+P/c7P3//v7+////////////PJ74/zWY9/80mPf/LZX3/xeM9/8Zjvf/F433/xWL + 9/8SiPf/D4b1/w2E9v8Rhfb/J5D2/zaV9P8wiOn9GnLb8wVg0LMAW81b////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFvNdR112e9msPL/Tq76/zGj+v8xo/r/M6b6/zWn + +v83qfv/M6X6/y+h+v8tofr/JZn4/zSX9//V6f3///////7+/v/+/v7/LKD6/x6T+P8dkff/G5D3/xqQ + 9/8aj/f/F433/xWL9/8Siff/E4j2/ymS9/9Dnvj/No7r/xhx2v0IY9LNAFrNUQBbzRsAWcwD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQBczQsAXM1rIHfb/2ay9f9Sr/r/LaD6/y+i + +v8xpPr/NKb6/zeo+/84qvv/Oqz7/zqr+/84qvv/LqD6/zaY+P/V6f3/////////////////M6b6/ySY + +f8ilvj/H5T4/x2S+P8akPf/F433/xmN9/8ul/j/SaD0/z6S6/8ZctntAFvOtwBczk0AXNEJ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFrNCwBbzWcWcNjpZbD0/1ax + +v8voPn/LaD6/y+i+f8ypPr/NKf6/zeo+/85q/v/PK36/zus+/85q/v/LqH6/zaY+P/V6f3//v7+//// + ////////MaP5/ySY+P8il/j/H5T3/x2S+P8akPj/F433/y6Y9/9MoPP/Hnbb8wdi0bEAXM5jAFvRD/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzOWRNu + 1+deqPD/WrL6/y2e+f8qnfn/LaD6/y+i+v8xpPr/NKb6/zeo+/84qvv/Oqz6/zqr+/84qvv/LqD6/zaY + +P/V6f3///////7+/v/+/v7/LKD5/yOY+P8ilvj/H5T4/xyS9/8akPj/F433/zGZ+P9MnvD/AFzNzwBc + zSUAXNED////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBY + ywMAW81RC2fT+1ai7P+Bwfj/XbP5/1ax+v9Mrfn/RKr6/0Kq+v9Aqvr/O6n6/zWn+v83qfv/OKn7/zip + +/83qPv/LKD5/zaY+P/V6f3/////////////////Jpr4/yKX+P8ilvj/H5T4/x2S+P8akPf/F433/xyP + 9/9Tqfj/GnLY5QBdzlH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBdzwcAW86bCWPR3yt/3fEzheD9Po3j/0mV5v1WoOr9Yqvw/2ey9P9ruPf/ar37/0Ks + +v81p/r/Nqj6/zan+/81p/r/K575/y6U9/+y1vz/1Oj9/9To/f/U6P3/IZb4/yGV+P8hlvj/HpP3/xyR + +P8aj/f/F433/xWL9/85nPj/QZHo/QNfz5UAXc4N////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAW84dAFzOMQFdzjkAW81HAFzOawNfzocLZdKlEmzVzxZv + 1u0acdf9ZbP0/1e1+v8zpfr/M6X6/zOl+v8ypfr/LJ/5/xaK9v8ji/b/Ko/2/yqP9v8qj/b/Eor3/yGV + 9/8glfj/HZL4/xyR9/8Zj/f/Foz3/xSK9/8ZjPf/VqTx/xdv19cAXM4t////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAXM6/X63y/1Wz+/8wo/r/MKP6/zCj+v8wovr/L6L6/y6h+v8sn/n/Kp35/yic + +f8mmvj/JJj4/yGW+P8klvj/LZr4/yeW+P8ekff/FYz3/xOJ9/8RiPb/Q5/2/zeH4v8FYM97////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQBZ2QUAW87DZLH0/1Cw+v8uofr/LqH6/y6h+f8uofr/LKD5/yyf + +f8qnfn/KJz4/yeb+f8lmfn/Ipf4/yGW+P9Lqfn/Xa31/1ut9/9Uq/j/QaD4/zCY+P8fj/b/KJL2/02c + 7v0RadTZAFnMCf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQBb0Q8AW87HabX2/0ut+v8rn/n/LJ/5/yyf + +f8toPn/V7L6/2G2+v83o/n/J5v5/yWZ+f8jl/j/IZb4/y2b+P9tuPn/G3LX/xpx2P8sf9/7SJns/1mo + 9P9hr/j/Xa35/2iw9/8keNv7AFvORf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBdzxsAXM7Nbrn4/0Oo + +f8pnPn/Lp/5/0aq+v9uuvj/XKXs/1Kf6/9vufn/LJz5/yOX+P8hlvj/H5T4/0Sl+f9bpe7/AFzNsQBa + zCkAW85fAF3OpQBczckJY9LXJn3f80SS6P06iuP/AFzOtQBf0gv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBd + zyUAXM7Rcrz6/z6l+f8yoPn/XbT6/2ix8/89jOL9B2LQvQ1o1NNWou3/WbH6/yaY+P8flPj/IpX4/1iu + +f87ieH9AFzOY////wH///8BAF3QAwBdzRMAW805AFzOZwBbzYsCXc6vAFzOuwBczh////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBbzy8AXM7Vd7/6/1aw+v9wvPr/Up7r/xtx1+8GYdGFAFzPIQBbzlsRatXnb7j3/0Sm + +f8elPj/Kpj4/2Gu9v8ec9f9AFnNGf///wH///8B////Af///wH///8B////AQBZywcAW84ZAFzNKQBc + zQf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQBczjkFYtLXhcT5/2uv8f8uf9zxAFzPqQBczi////8B////Af// + /wEAW851I3nb+Wmz9/83nvj/OJ74/1ih7P0RatS7////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQBbzkMIY9HfSJTl/Rtx1tUBXc51AFrOD/// + /wH///8B////Af///wEAV84LB2PRsz6P5f9ksvj/WKz4/0GN4/8FYM5v////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBbzVcBXM7rCGLRowBb + zzMAWs4H////Af///wH///8B////Af///wH///8BAFvNNwxm0tFXo+7/cbX2/yt+3esAXM47////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBZ + zA8AXMwt////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBczk8KZdLhU5vp/w1l + 0a8AW84Z////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBd + zwcAXM55CmPR/wBczYkAXM0F////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAW84PAFzOmwBbzTf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAADAAAABQAAAAUAAAAFAAAABQAA + AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAAAAUAAAAFAAAABQAAAAcAAAAHAAAABwAA + AAcAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAHAAAABwAAAAcAAAAHAAAABQAA + AAUAAAAFAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAAFAAAABQAAAAcAAAAHAAAACQAA + AAkAAAAJAAAACwAAAAsAAAALAAAACwAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAALAAAACwAA + AAsAAAALAAAACQAAAAkAAAAJAAAABwAAAAcAAAAFAAAABQAAAAMAAAAD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAUAAAAHAAAABwAA + AAkAAAAJAAAACwAAAAsAAAANAAAADQAAAA0AAAAPAAAADwAAAA8AAAAPAAAADwAAABEAAAARAAAAEQAA + AA8AAAAPAAAADwAAAA8AAAAPAAAADQAAAA0AAAANAAAACwAAAAsAAAAJAAAACQAAAAcAAAAHAAAABQAA + AAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABQAA + AAcAAAAJAAAACQAAAAsAAAALAAAADQAAAA0AAAAPAAAADwAAABEAAAARAAAAEQAAABMAAAATAAAAEwAA + ABMAAAATAAAAEwAAABMAAAATAAAAEwBIn0EAWcirAAwYFQAAABEAAAARAAAADwAAAA8AAAAPAAAADQAA + AA0AAAALAAAACQAAAAkAAAAHAAAABQAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAA + AAMAAAAFAAAABwAAAAkAAAAJAAAACwAAAA0AAAANAAAADwAAAA8AAAARAAAAEwAAABMAAAATAAAAFQAA + ABUAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAnYicAXM7/AFzO/wBKoU0AAAAVAAAAFQAA + ABMAAAATAAAAEQAAABEAAAAPAAAADQAAAA0AAAALAAAACQAAAAkAAAAHAAAABQAAAAUAAAAD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAkAAAALAAAACwAAAA0AAAAPAAAAEQAAABEAAAATAAAAEwAA + ABUAAAAXAAAAFwAAABkAAAAZAAAAGQAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAACRsAWcfBAmHR+wZi + 0f0AVr6VAAAAGQAAABcAAAAXAAAAFQAAABUAAAATAAAAEQAAABEAAAAPAAAADQAAAA0AAAALAAAACQAA + AAcAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAkAAAALAAAADQAAAA8AAAAPAAAAEQA5 + eSkAWMWrAD6NOwAAABcAAAAXAAAAGQAAABsAAAAbAAAAHQAAAB0AAAAdAAAAHwAAAB8AAAAfAAAAHwAA + AB8AUbaLAF3P/R6E7v8UdeL/AFzM4QAAABsAAAAbAAAAGQAAABkAAAAXAAAAFQAAABUAAAATAAAAEQAA + AA8AAAAPAAAADQAAAAsAAAAJAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAkAAAALAAAADQAA + AA8AAAARAAAAEQAAABMAS6dPAFzO/wBczv8AU7mFAAkaHwAAABsAAAAdAAAAHwAAAB8AAAAhAAAAIQAA + ACEAAAAjAAAAIwAAACMARZddAF3P/RR65v8nj/b/JIbu/wBczv8ANnU9AAAAHQAAABsAAAAbAAAAGQAA + ABcAAAAXAAAAFQAAABMAAAARAAAAEQAAAA8AAAANAAAACwAAAAkAAAAJAAAABwAAAAUAAAAD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAAFAAAABwAA + AAkAAAALAAAADQAAAA8AAAAPAAAAEQAAABMAAAAVAEWdRwBczv8aeOH/A1/Q/QBbydcAPYVHAAAAHwAA + ACEAAAAjAAAAIwAAACUAAAAlAAAAJQAAACcAKlw9AFvM8Q1v3f0skvb/HYv2/ymR9v8GYtD9AE+wgQAA + AB8AAAAfAAAAHQAAABsAAAAZAAAAGQAAABcAAAAVAAAAEwAAABEAAAARAAAADwAAAA0AAAALAAAACQAA + AAcAAAAFAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AAMAAAAFAAAABwAAAAkAAAALAAAACwAAAA0AAAAPAAAAEQAAABMAAAAVAAAAFwA/jj0AXM7/N5Ty/zyZ + 8/8Tb9n7AFzO/QBTt5EADSApAAAAJQAAACcAAAAnAAAAKQAAACkACxwvAFnG0Qdl1Psukvb/Io73/wmB + 9v8pkfb/E3Hd/wBZx8kAAAAjAAAAIQAAAB8AAAAdAAAAGwAAABkAAAAZAAAAFwAAABUAAAATAAAAEQAA + AA8AAAANAAAADQAAAAsAAAAJAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAACwAAAA0AAAAPAAAAEQAAABEAAAATAAAAFQAA + ABcAN3gzAFzO/zSS8P9Bn/j/QJ/4/yqH6P8FYND9AFvJ3wA6hlUAAAApAAAAKQAAACsAAAAtAFC1owFe + z/0rjvH/LZX3/w6E9v8Lgvb/Io73/yOE6/8AXM79ABtAMQAAACEAAAAhAAAAHwAAAB0AAAAbAAAAGQAA + ABcAAAAVAAAAEwAAABMAAAARAAAADwAAAA0AAAALAAAACQAAAAcAAAAFAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAACQAAAAsAAAANAAAADwAA + ABEAAAATAAAAFQAAABUAAAAXACZZKQBczv8uju7/NJr3/x+P9/88nfj/Ppr0/xdy2/0AXc/9AFG1nwAP + JDMAAAAtAEOXcwBczf8jher/N5r4/xWI9v8Nhfb/DIT2/xiJ9v8xlPb/A17Q/wBJoW0AAAAjAAAAIQAA + AB8AAAAdAAAAGwAAABkAAAAXAAAAFwAAABUAAAATAAAAEQAAAA8AAAANAAAACwAAAAkAAAAHAAAABQAA + AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAA + AAkAAAALAAAADQAAAA8AAAARAAAAEwAAABMAAAAVAAAAFwARKx8AXM7/LY7t/zqc+P8Tivf/Fov3/zCY + +P9Fovn/MIzr/wdi0P0AXMrlAEijfwBczfcXd+D/Pp74/x+P9/8Qh/b/D4b2/w6F9v8Phfb/NJj3/xJv + 2vsAVr2vAAAAIwAAACEAAAAfAAAAHQAAABsAAAAZAAAAFwAAABcAAAAVADZyJwBQtVkAWcehAE+zSwAA + AAsAAAAJAAAABwAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAADAAAABQAAAAcAAAAJAAAACwAAAA0AAAAPAAAADwAAABEAAAATAAAAFQAAABcAAAAZAF3O/S2M + 7P9AoPj/FYv3/xWL9/8Vi/f/IZH3/0Cg+P9Dn/X/G3fd/QBczv8LaNb9P5/4/y+X+P8Siff/EYj3/xGH + 9v8Qh/b/D4b2/y2V9/8kgub/AFzN8wAHDiUAAAAhAAAAHwAAAB0ACRIdAEGRQwBRuHcAWMSpAFvM4wBc + zv8AXM7/AFzO/wBbzNcAAAALAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAACQAAAAkAAAALAAAADQAAAA8AAAARAAAAEwAA + ABUAAAAXAAAAFwBdzvUriun/RaT5/xeN9/8Xjff/F433/xeN9/8Zjvf/M5v4/0mm+f84lvH/Pp32/zyf + +P8Wi/f/FIr3/xOK9/8Siff/EYj3/xCH9v8ij/f/N5Xy/wFdzv8AR6FlAEedXwBUuY8AWcjHAFzN9wBc + zv8CXs79DGva+xN24/8jhO3/Hn/q/wBczv8AS6ozAAAACwAAAAkAAAAHAAAABQAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAACwAA + AA0AAAAPAAAADwAAABEAAAATAAAAFQAAABcBXc7rKojo/0un+f8Zjvf/GY/3/xmP9/8Zj/f/GY/3/xmO + 9/8jk/f/O5/4/zad+P8cj/f/Foz3/xaM9/8Vi/f/FIr3/xOK9/8Siff/F4v2/z6e+P8NZNH/AFzO/wBc + zv8IZNP5FHTf/x6A6P8oi/H/LpL3/y2S9/8pj/f/KY/3/xJu2vsAW8y/AAAACwAAAAkAAAAHAAAABQAA + AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAA + AAUAAAAFAAAABwAAAAkAAAALAAAADQAAAA8AAAAPAAAAEQAAABMAAAAVAV3N4SiF5v9Rq/r/G5D4/xuQ + +P8bkPj/G5D4/xuQ+P8bkPj/GpD4/xqQ9/8Zj/f/GY/3/xiO9/8Xjff/F433/xaM9/8Vi/f/FIr3/xKJ + 9/83m/j/NZTy/yyM7f84mPX/Opv4/zeZ+P8sk/f/IIz2/xSG9v8Jf/X/F4b2/ymL8f8CXc7/AFS4TwAA + AAkAAAAHAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAABQAAAAcAAAAHAAAACQAAAAsAAAANAAAADQAAAA8AAAARAAAAEwFd + zNclg+X/WK76/xyS+P8dkvj/HZL4/x2S+P8dkvj/HJL4/xyR+P8ckfj/G5H4/xuQ+P8dkvj/I5j4/xmO + 9/8Xjff/Foz3/xWL9/8Uivf/GYz3/zKY+P8wl/f/JJD3/xeK9v8Ng/b/C4L2/wmB9v8IgPX/B3/1/yyS + 9/8ad+D/AFzN3QAAGgsAAAAHAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABQAAAAcAAAAJAAAACwAA + AAsAAAANADVyHQBIoTkAXM7/IoDi/12x+v8fk/j/HpP4/x+U+P8flPj/H5T4/x6T+P8ek/j/HpP4/x2S + +P8elPj/Oaz7/z6v/P8wo/r/GY/3/xiO9/8Xjff/FYz3/xSK9/8Tiff/Eoj3/xCH9v8Phvb/DYT2/wyD + 9v8Kgvb/CYH2/xiI9v80k/T/BmHQ/QBYw2sAAAAHAAAABQAAAAUAAAAD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBmzAUAYM8hAFnGPwBb + yV8AWsp9AFvMmwBczLkBXc7dAF3P9QBczv8AXM7/AFzO/ymG5f9fs/r/Ipb4/yCV+P8glfj/IJX4/yCV + +P8glfj/IJX4/x+U+P8flPj/M6X7/1G3/P+z4P7/Pq/8/yWb+f8Zj/f/GI73/xeN9/8WjPf/FIv3/xOJ + 9/8RiPf/EIf2/w6F9v8NhPb/C4P2/wqB9v8vlPf/JIHm/wBcz/MAOY4TAAAABQAAAAMAAAAD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBc + zv8AXM7/AFzO/wBczv8CXs/9DmnV+Rt12/sngOH/M4zn/z+V7P9KoPD/VKn1/2Cy+f9jtfr/Sqn5/yKW + +P8il/j/Ipf4/yKX+P8il/j/Ipf4/yKW+P8hlvj/LJ/6/z+v/P/K6f7//////4nO/f88rfz/H5T5/xqP + 9/8Yjvf/F433/xWM9/8Uivf/E4n3/xGI9v8Qhvb/DoX2/wyE9v8WiPb/PJr3/w5n1PsAWsuNAAAABQAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAXc/JAFzO/ziP6v9lsff/Z7X6/2a1+v9ntfr/ZLT6/12x+v9Urfr/TKr5/0Sm + +f88o/n/M574/yOY+f8kmPn/JJj5/ySY+f8kmPn/JJj5/ySY+f8jmPn/J5r5/z2t/P+S0v3///////// + ///2+///Wbr8/zWn+/8bkPj/Go/3/xiO9/8Xjff/FYv3/xSK9/8Siff/EYf2/w+G9v8Nhfb/L5X3/zGM + 6/8AXc79AFi/If///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFXVBwBczrcFYtL7Z7D1/2m2+v80nfn/JJX4/x6T + +P8glPj/IZX4/yKW+P8jl/j/JJj5/ySZ+f8lmfn/Jpr5/yaa+f8mmvn/Jpr5/yaa+f8mmvn/Jpn5/ziq + /P9fvf3/+fz//////////////////9Xu/v9BsPz/K5/6/xuQ+P8Zj/f/GI73/xaM9/8Vi/f/E4r3/xKI + 9/8Qh/b/FYj2/0Of+P8Xcdr7AFzPq////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAZswLAF3PyQll + 0vtcrPb/YLL6/ySW+P8glfj/IZb4/yKX+P8jmPn/JJn5/yWZ+f8mmvn/J5v5/yeb+f8onPn/KJz5/yic + +f8onPn/KJv5/zKk+/9Dsfz/3PH+////////////////////////////oNf+/z2u/P8il/j/G5D4/xmP + 9/8Xjff/Foz3/xSL9/8Tiff/EYj2/y2V9/9AmPH/AV3O/wBbzTn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBVzA8BXtDXDmnV+2Oy+P9es/r/JZj4/yKX+P8kmPn/JZn5/yaa+f8nm/n/KJz5/ymc + +f8pnfn/Kp35/yqd+f8qnfn/Kp35/yuf+f81p/v/ptn9//////////////////////////////////3+ + //9pwf3/OKr8/x2R+P8akPj/GY73/xeN9/8Vi/f/FIr3/xKI9/88nfj/MIjn/wBczv8AXM+lAFrPJf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAF3RFwFdz+ESbtb7arb4/12z+v8nmfn/JZn5/yaa + +f8om/n/KZz5/yqd+f8qnvn/K575/yuf+f8sn/n/LJ/5/yyf+f8qnvn/Y7j7//7///////////////// + ////////////////////////5fT+/0Wx+/8vovr/G5H4/xmP9/8Yjvf/Foz3/xSL9/8Tiff/JpP3/0yl + +P84kez/EmvW+wBdzv0AXM+fAGDPIf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAWssjAV3P6Rh1 + 2/twu/r/XbP7/yea+f8onPn/KZ35/yqe+f8rn/n/LJ/6/y2g+v8toPr/LqH6/y6h+v8lmfn/MZz4/+j0 + /v////////////////////////////////////////////////+y3f3/M6X6/yOX+f8akPj/GY73/xeN + 9/8Vi/f/E4r3/xKI9/8ejvf/PJz4/0uj+P81juz/D2rW+wBczvsAW86XAF7QG////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBbzC0BXM/xIHve/XS9+/9bs/r/KZ35/yqe+f8sn/n/LaD6/y6h+v8vofr/L6L6/y+i + +v8nmvr/FYv3/7PZ/P///////////////////////////////////////////////////////////2+9 + +/8qnfn/HJL5/xmP9/8Yjvf/Foz3/xSK9/8Siff/EIf2/w+G9v8djPf/PJv4/0mh+P8xi+r/DWfU+wBc + z/kAXM2RAFnTF////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAF3MNwBdz/koguH9ecH7/1Wx+v8sn/r/LaD6/y6h + +v8vovr/MKP6/zGk+v8tofn/DYX3/2ey+f////////////////////////////////////////////// + ///////////////////v+P//OaH5/yGV+P8akPj/GI73/xaN9/8Vi/f/E4n3/xGI9v8Phvb/DYT2/wuD + 9v8civf/PJv3/0ef9/8viOn/C2bT+wBdzvcAXM6JAFnMFf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAW85DAFzO/zuT + 6f99xPv/MqL6/y+h+v8wo/r/MaT6/zKk+v8zpfr/EIf2/yKL9v/y+P7///////////////////////// + /////////////////////////////////////////////8Lh/f8aj/f/G5D4/xmP9/8Xjff/FYv3/xOK + 9/8RiPf/EIb2/w6F9v8Mg/b/CoL2/wiA9f8bifb/Opn3/0Wd9v82i+n/CmTS+wBczv8AXM1t////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAF3PhQBczv9XqPL/esP8/y+h+v8wovr/MaT6/zKl+v80pvr/NKf6/wR89v8vkvf/Vab4/1Wm + +P9Vpvj/Vab4/5HF+////////////////////////////1qq+P9bq/n/XKz5/12t+f9ervn/II/3/xWM + 9/8Zj/f/F433/xaM9/8Uivf/Eoj3/xCH9v8Ohfb/DIT2/wqC9v8IgPb/GIj2/zqZ9/9In/j/PpHt/w9p + 1fsAXM7/AFzOjf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAFzPewBczv9Qoe7/gMX7/0ar+/8vovr/MaP6/zKl+v80pvr/Naf7/zao + +/8nm/n/E4r3/xKJ9/8Siff/EYn2/wZ+9f9aqPn///////////////////////////8jl/n/EIb3/w2E + 9v8NhPb/DYT2/w+H9v8aj/j/Go/3/xiO9/8WjPf/FIr3/xKJ9/8Qh/b/DoX2/wyE9v8di/f/QJz4/0+k + +P84j+z/EmvW+wBbzv8AXM6nAFnMKf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFvObQBczf9JnOz/g8b7/0ms+/8uofr/MKP6/zKk + +v8zpvr/Naf7/zeo+/84qvv/Oar7/zmq+/84qvv/N6n7/zao+/8Siff/Wqj5//////////////////// + ////////Nqn7/yOY+f8kmPn/Ipb4/yCV+P8ek/j/HJH4/xqQ9/8Yjvf/Foz3/xSL9/8Siff/EIf2/yKP + 9/9FoPj/Vqj5/z2T7f8TbNb7AFvO/wBczqcAWcwp////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzNYQBczv9Dl+v/hcf8/06u + +v8toPr/LqH6/zCj+v8ypfr/NKb6/zao+/84qfv/Oav7/zqs+/87rPv/Oqv7/ziq+/83qPv/E4n4/1qo + +f///////////////////////////zmr+/8mmvn/JJj5/yKW+P8glfj/HpP4/xyR+P8akPj/GI73/xaM + 9/8Ui/f/JpP4/0uk+P9crfn/Qpbt/xVu1/sAW87/AFzOpwBc0Sf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzNVwBd + z/09kuj/h8f8/1Kw+v8rnvn/LaD6/y+i+v8xo/r/M6X6/zSn+v82qPv/OKr7/zqs+/88rfv/PK77/zus + +/85q/v/N6n7/xOJ+P9aqPn///////////////////////////84qfv/JZn5/ySY+f8il/j/IJX4/x6T + +P8ckvj/GpD4/xiO9/8Wjff/N5z4/2Kw+v9Gmu7/Fm7X+wBdz/0AXM6nAFzRJ////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAFvNTQBczvs2jOb/iMf8/1ex+v8pnfn/K575/y2g+v8vovr/MaP6/zOl+v80p/r/Nqj7/ziq + +/86rPv/PK37/zyu+/87rPv/Oav7/zep+/8Tifj/Wqj5////////////////////////////NKX6/yOY + +P8kmPn/Ipf4/yCV+P8ek/j/HJL4/xqQ+P8Yjvf/Fo33/1ar+f86j+n/AFzO/wBczqcAXNEn////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAF3NQwBdz/kvh+P/h8b8/12z+/8nm/n/KZz5/yue+f8toPr/L6H6/zCj + +v8ypfr/NKb6/zao+/84qfv/Oav7/zqs+/87rPv/Oqv7/ziq+/83qPv/E4n4/1qo+f////////////// + /////////////y+i+v8jmPf/JJj5/yKW+P8glfj/HpP4/xyR+P8akPj/GI73/xaM9/9Kpvn/UqDv/wBc + zv8AXswf////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFvNOQBdzvcoguD9icb7/4rI+/9Xsfr/S6z6/0Cn + +v81o/n/LZ/6/y6h+v8wo/r/MqT6/zOm+v81p/v/N6j7/ziq+/85qvv/Oar7/ziq+/83qfv/Nqj7/xKJ + 9/9aqPn///////////////////////////8qnfn/IZf4/ySY+f8ilvj/IJX4/x6T+P8ckfj/GpD3/xiO + 9/8WjPf/J5X4/2iz+f8Vbdb7AF3Oh////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFnMFQBczv8AXM7/P5Hn/2Sq + 7/9osPP/eLz4/4jH+/+Myvz/jcv8/43L/P+Cxvz/dsL8/2u9+/9bt/v/Nqf6/zWn+/82qPv/N6n7/zep + +/83qPv/Nqj7/zSn+v8SiPf/Wqj5////////////////////////////Jpr5/yCV+P8jmPn/IZb4/x+U + +P8ek/j/HJH4/xqP9/8Yjvf/Foz3/xSK9/9ZrPn/Q5Pp/wBdz+8AbdsH////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBt + 2wcAW86XAFzOtwFdz9UBXc7zAFzO/wBczv8AXM7/D2nT+SR62/s3iuP/SZrq/1uo7/9ttvT/i8v8/2u+ + +/80pvr/Naf6/zWn+/81p/v/Naf7/zSm+v8zpfr/Eon3/zyZ9/+q0vz/qtL8/6rS/P+q0vz/qtL8/x+V + +f8ek/j/I5f4/yGV+P8flPj/HZL4/xuR+P8Zj/f/F433/xaM9/8Uivf/NJn4/2ex9/8JYtD/AFzOX/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQBVzA8AXtAxAFvNUQBdzXEAW86RAF7PtQFe + 0NkBXM73AFzO/0+k7/+DyPz/MqX6/zOl+v8zpfr/M6b6/zOl+v8ypfr/MaT6/yGW+f8CevX/AHn1/wB5 + 9f8AefX/AHn1/wB59f8Jgvb/IZX4/yKX+P8glfj/HpP4/x2S+P8bkPj/GY/3/xeN9/8Vi/f/E4r3/xSJ + 9/9lsvn/M4bj/QBdzs3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQBdzv1UpO7/fcX8/zCj+v8xpPr/MaT6/zGk+v8xpPr/MaP6/zCj + +v8vovr/LqH6/yyg+v8rnvn/KZ35/yic+f8mmvn/JZn5/yOX+P8hlvj/H5T4/x6T+P8ckfj/GpD4/xiO + 9/8Wjff/FYv3/xOJ9/8RiPb/Q6D4/2Co8/8CXc7/AF3ONf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQCA/wMAXM7/XKrx/3fC/P8vovr/L6L6/y+i + +v8vovr/L6L6/y+i+v8uofr/LaD6/yyf+v8rnvn/Kp35/yic+f8nm/n/JZn5/ySY+f8il/j/IJX4/zig + +f9fsvr/Wq/6/0Kj+P8ql/j/F4z3/xSK9/8Siff/EIf2/xuM9v9ttfr/JXfY+wBczqH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAVdUTAFzO/2Ov + 8/9wvvz/LaD6/y2g+v8uofr/LqH6/y2h+v8toPr/LKD6/yyf+f8rnvn/Kp35/yic+f8nm/n/Jpr5/ySY + +f8jl/j/IZb4/ySX+P98wPv/Xqnx/12p8v92uvj/er76/3O5+v9arfn/QaD5/ymU9/8Sh/b/Uqf5/1Gd + 7v8AXM/5AFnMFf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAF3RIQBczv9rtPX/abv7/yue+f8rn/n/LJ/5/yyf+f8sn/n/LqH5/161+v9+w/v/arv7/yye + +f8nm/n/Jpr5/ySZ+f8jl/j/IZb4/yCV+P9BpPn/f8D5/whh0P8AXM7/AV3P/xlw2fk1iub/UaDv/2my + 9/91ufr/cbf6/3G3+v9vtPn/EmrU+wBcz3X///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQBe0DEAXM7/crr3/2G2+/8pnfn/Kp35/yqd+f8qnfn/Qqj6/37E + +/+Fxfr/TJvq/4LD+v9ouPv/JZn5/ySY+f8jl/n/Ipb4/yCV+P8flPj/YrP6/2Go7v8AXc73AFjKHQBb + zVEAXM+PAF7PzwBdzv0AXM7/DmjV+SqB4v9Fluz/cLP2/0GQ5v8AXc/jAID/A////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM9BAFzO/3i++f9as/r/J5v5/yic + +f8un/n/ZLj7/4zK/P9kq+//D2jS+wBczv8shOL9isj8/02r+v8jl/j/Ipb4/yCV+P8flPj/IZT4/4HC + +/85h+D9AFzOrf///wH///8B////Af///wEAXdELAF3NQwBbzn8AXc+/AFzO9wBczv8EX8//AFzO/wBd + z0v///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAF7PTwBc + zv9/w/v/Uq76/yaa+f9Fqfr/gcT8/3/A+P8yhOD9AF3P/QBdz48AXM9RAF3P/U6e7f+Gxvv/NJ/5/yCV + +P8flPj/HpP4/zuh+f+Ewvr/DWXS/QBczln///8B////Af///wH///8B////Af///wH///8B////AQBV + qgMAWs0zAFzPbwBczssAXM4v////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBbz18BXc/9hcX7/1Sv+v9qufv/isj7/1ei7f8JY9H9AV3P1wBbzzX///8B////AQBb + zoMCXs/9bLT1/3i/+/8kl/j/HZP4/xyS+P9csPr/aKzw/wBczvsAVcwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAXc5vBGHS+YnH+/+Jx/v/d7n1/yZ52vsAXc/5AF3PeQBA + vwX///8B////Af///wEAVaoDAFzPxRBq1ft9wPr/YbP6/xyR+P8ckPj/fL/6/z2N4/0AXc+7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFvOfw1q1fmHxfr/V5/p/wVf + 0P8BXc7DAFrPJf///wH///8B////Af///wH///8B////AQBYzhsBXs/tKYLh/YXE+/9Fpfn/M5z4/4PC + +v8TadP9AF3NZ////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBc + zo0HYM//HHHX+wBdz/MAW85j////Af///wH///8B////Af///wH///8B////Af///wH///8BAF3NRwBb + zv9Km+z/gcL7/2m1+v9usfP/AFvO/wBgyhn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAXM25AFzO/wBdz6sAWdMX////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAXM2FAl7P/Wex9f+Dwvv/RpPm/wBdz8v///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFnMKQBdzUP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFWqAwBdz8cQa9X7gsD6/xlu1PsAXM91////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXtAbAF3P7x1x + 2P8AXM7/AFzNJf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBbzkkAXM7/AFzO/////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAF3PjwBczT3///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + + 4, 2, 4, 2 + + + CenterParent + + + Software Update + + + DownloadUpdateDialog + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Mk0.Software.OnlineUpdater/Mk0.Software.OnlineUpdater.csproj b/Mk0.Software.OnlineUpdater/Mk0.Software.OnlineUpdater.csproj new file mode 100644 index 0000000..a3feaca --- /dev/null +++ b/Mk0.Software.OnlineUpdater/Mk0.Software.OnlineUpdater.csproj @@ -0,0 +1,130 @@ + + + + + Debug + AnyCPU + {F59DCD1B-931C-4A49-9D55-DEAA229218F6} + Library + Mk0.Software.OnlineUpdater + OnlineUpdater + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + Form + + + DownloadUpdateDialog.cs + + + Form + + + RemindLaterForm.cs + + + Form + + + UpdateForm.cs + + + + + + DownloadUpdateDialog.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + RemindLaterForm.cs + + + UpdateForm.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Mk0.Software.OnlineUpdater/OnlineUpdater.cs b/Mk0.Software.OnlineUpdater/OnlineUpdater.cs new file mode 100644 index 0000000..39aca0c --- /dev/null +++ b/Mk0.Software.OnlineUpdater/OnlineUpdater.cs @@ -0,0 +1,914 @@ +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Net; +using System.Net.Cache; +using System.Reflection; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using System.Xml; +using Mk0.Software.OnlineUpdater.Properties; +using Microsoft.Win32; + +namespace Mk0.Software.OnlineUpdater +{ + /// + /// Enum representing the remind later time span. + /// + public enum RemindLaterFormat + { + /// + /// Represents the time span in minutes. + /// + Minutes, + + /// + /// Represents the time span in hours. + /// + Hours, + + /// + /// Represents the time span in days. + /// + Days + } + + /// + /// Enum representing the effect of Mandatory flag. + /// + public enum Mode + { + /// + /// In this mode, it ignores Remind Later and Skip values set previously and hide both buttons. + /// + Normal, + + /// + /// In this mode, it won't show close button in addition to Normal mode behaviour. + /// + Forced, + + /// + /// In this mode, it will start downloading and applying update without showing standarad update dialog in addition to Forced mode behaviour. + /// + ForcedDownload + } + + /// + /// Main class that lets you auto update applications by setting some static fields and executing its Start method. + /// + public static class AutoUpdater + { + private static System.Timers.Timer _remindLaterTimer; + + internal static String ChangelogURL; + + internal static String DownloadURL; + + internal static String InstallerArgs; + + internal static String RegistryLocation; + + internal static String Checksum; + + internal static String HashingAlgorithm; + + internal static Version CurrentVersion; + + internal static Version InstalledVersion; + + internal static bool IsWinFormsApplication; + + internal static bool Running; + + /// + /// Set it to folder path where you want to download the update file. If not provided then it defaults to Temp folder. + /// + public static String DownloadPath; + + /// + /// Set the Application Title shown in Update dialog. Although AutoUpdater.NET will get it automatically, you can set this property if you like to give custom Title. + /// + public static String AppTitle; + + /// + /// URL of the xml file that contains information about latest version of the application. + /// + public static String AppCastURL; + + /// + /// Login/password/domain for FTP-request + /// + public static NetworkCredential FtpCredentials; + + /// + /// Opens the download URL in default browser if true. Very usefull if you have portable application. + /// + public static bool OpenDownloadPage; + + /// + /// Set Basic Authentication credentials required to download the file. + /// + public static IAuthentication BasicAuthDownload; + + /// + /// Set Basic Authentication credentials required to download the XML file. + /// + public static IAuthentication BasicAuthXML; + + /// + /// Set Basic Authentication credentials to navigate to the change log URL. + /// + public static IAuthentication BasicAuthChangeLog; + + /// + /// Set the User-Agent string to be used for HTTP web requests. + /// + public static string HttpUserAgent; + + /// + /// If this is true users can see the skip button. + /// + public static Boolean ShowSkipButton = true; + + /// + /// If this is true users can see the Remind Later button. + /// + public static Boolean ShowRemindLaterButton = true; + + /// + /// If this is true users see dialog where they can set remind later interval otherwise it will take the interval from + /// RemindLaterAt and RemindLaterTimeSpan fields. + /// + public static Boolean LetUserSelectRemindLater = true; + + /// + /// Remind Later interval after user should be reminded of update. + /// + public static int RemindLaterAt = 2; + + /// + /// AutoUpdater.NET will report errors if this is true. + /// + public static bool ReportErrors = false; + + /// + /// Set this to false if your application doesn't need administrator privileges to replace the old version. + /// + public static bool RunUpdateAsAdmin = true; + + /// + /// Set this to true if you want to ignore previously assigned Remind Later and Skip settings. It will also hide Remind Later and Skip buttons. + /// + public static bool Mandatory; + + /// + /// Set this to any of the available modes to change behaviour of the Mandatory flag. + /// + public static Mode UpdateMode; + + /// + /// Set Proxy server to use for all the web requests in AutoUpdater.NET. + /// + public static IWebProxy Proxy; + + /// + /// Set if RemindLaterAt interval should be in Minutes, Hours or Days. + /// + public static RemindLaterFormat RemindLaterTimeSpan = RemindLaterFormat.Days; + + /// + /// A delegate type to handle how to exit the application after update is downloaded. + /// + public delegate void ApplicationExitEventHandler(); + + /// + /// An event that developers can use to exit the application gracefully. + /// + public static event ApplicationExitEventHandler ApplicationExitEvent; + + /// + /// A delegate type for hooking up update notifications. + /// + /// An object containing all the parameters recieved from AppCast XML file. If there will be an error while looking for the XML file then this object will be null. + public delegate void CheckForUpdateEventHandler(UpdateInfoEventArgs args); + + /// + /// An event that clients can use to be notified whenever the update is checked. + /// + public static event CheckForUpdateEventHandler CheckForUpdateEvent; + + /// + /// A delegate type for hooking up parsing logic. + /// + /// An object containing the AppCast file received from server. + public delegate void ParseUpdateInfoHandler(ParseUpdateInfoEventArgs args); + + /// + /// An event that clients can use to be notified whenever the AppCast file needs parsing. + /// + public static event ParseUpdateInfoHandler ParseUpdateInfoEvent; + + /// + /// Set if you want the default update form to have a different size. + /// + public static Size? UpdateFormSize = null; + + /// + /// Start checking for new version of application and display dialog to the user if update is available. + /// + /// Assembly to use for version checking. + public static void Start(Assembly myAssembly = null) + { + Start(AppCastURL, myAssembly); + } + + /// + /// Start checking for new version of application via FTP and display dialog to the user if update is available. + /// + /// FTP URL of the xml file that contains information about latest version of the application. + /// Credentials required to connect to FTP server. + /// Assembly to use for version checking. + public static void Start(String appCast, NetworkCredential ftpCredentials, Assembly myAssembly = null) + { + FtpCredentials = ftpCredentials; + Start(appCast, myAssembly); + } + + /// + /// Start checking for new version of application and display dialog to the user if update is available. + /// + /// URL of the xml file that contains information about latest version of the application. + /// Assembly to use for version checking. + public static void Start(String appCast, Assembly myAssembly = null) + { + try + { + ServicePointManager.SecurityProtocol |= (SecurityProtocolType)192 | + (SecurityProtocolType)768 | (SecurityProtocolType)3072; + } + catch (NotSupportedException) { } + + if (Mandatory && _remindLaterTimer != null) + { + _remindLaterTimer.Stop(); + _remindLaterTimer.Close(); + _remindLaterTimer = null; + } + + if (!Running && _remindLaterTimer == null) + { + Running = true; + + AppCastURL = appCast; + + IsWinFormsApplication = Application.MessageLoop; + + var backgroundWorker = new BackgroundWorker(); + + backgroundWorker.DoWork += BackgroundWorkerDoWork; + + backgroundWorker.RunWorkerCompleted += BackgroundWorkerOnRunWorkerCompleted; + + backgroundWorker.RunWorkerAsync(myAssembly ?? Assembly.GetEntryAssembly()); + } + } + + private static void BackgroundWorkerOnRunWorkerCompleted(object sender, + RunWorkerCompletedEventArgs runWorkerCompletedEventArgs) + { + if (!runWorkerCompletedEventArgs.Cancelled) + { + if (runWorkerCompletedEventArgs.Result is DateTime) + { + SetTimer((DateTime)runWorkerCompletedEventArgs.Result); + } + else + { + var args = runWorkerCompletedEventArgs.Result as UpdateInfoEventArgs; + if (CheckForUpdateEvent != null) + { + CheckForUpdateEvent(args); + } + else + { + if (args != null) + { + if (args.IsUpdateAvailable) + { + if (!IsWinFormsApplication) + { + Application.EnableVisualStyles(); + } + + if (Mandatory && UpdateMode == Mode.ForcedDownload) + { + DownloadUpdate(); + Exit(); + } + else + { + if (Thread.CurrentThread.GetApartmentState().Equals(ApartmentState.STA)) + { + ShowUpdateForm(); + } + else + { + Thread thread = new Thread(ShowUpdateForm); + thread.CurrentCulture = thread.CurrentUICulture = CultureInfo.CurrentCulture; + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); + thread.Join(); + } + } + + return; + } + else + { + if (ReportErrors) + { + MessageBox.Show(Resources.UpdateUnavailableMessage, + Resources.UpdateUnavailableCaption, + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } + else + { + if (ReportErrors) + { + MessageBox.Show( + Resources.UpdateCheckFailedMessage, + Resources.UpdateCheckFailedCaption, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + } + + Running = false; + } + + /// + /// Shows standard update dialog. + /// + public static void ShowUpdateForm() + { + var updateForm = new UpdateForm(); + if (UpdateFormSize.HasValue) + { + updateForm.Size = UpdateFormSize.Value; + } + + if (updateForm.ShowDialog().Equals(DialogResult.OK)) + { + Exit(); + } + } + + private static void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e) + { + e.Cancel = true; + Assembly mainAssembly = e.Argument as Assembly; + + var companyAttribute = + (AssemblyCompanyAttribute)GetAttribute(mainAssembly, typeof(AssemblyCompanyAttribute)); + if (string.IsNullOrEmpty(AppTitle)) + { + var titleAttribute = + (AssemblyTitleAttribute)GetAttribute(mainAssembly, typeof(AssemblyTitleAttribute)); + AppTitle = titleAttribute != null ? titleAttribute.Title : mainAssembly.GetName().Name; + } + + string appCompany = companyAttribute != null ? companyAttribute.Company : ""; + + RegistryLocation = !string.IsNullOrEmpty(appCompany) + ? $@"Software\{appCompany}\{AppTitle}\AutoUpdater" + : $@"Software\{AppTitle}\AutoUpdater"; + + InstalledVersion = mainAssembly.GetName().Version; + + WebRequest webRequest = WebRequest.Create(AppCastURL); + + webRequest.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); + + if (Proxy != null) + { + webRequest.Proxy = Proxy; + } + + var uri = new Uri(AppCastURL); + + WebResponse webResponse; + + try + { + if (uri.Scheme.Equals(Uri.UriSchemeFtp)) + { + var ftpWebRequest = (FtpWebRequest)webRequest; + ftpWebRequest.Credentials = FtpCredentials; + ftpWebRequest.UseBinary = true; + ftpWebRequest.UsePassive = true; + ftpWebRequest.KeepAlive = true; + ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile; + + webResponse = ftpWebRequest.GetResponse(); + } + else if (uri.Scheme.Equals(Uri.UriSchemeHttp) || uri.Scheme.Equals(Uri.UriSchemeHttps)) + { + HttpWebRequest httpWebRequest = (HttpWebRequest)webRequest; + + httpWebRequest.UserAgent = GetUserAgent(); + + if (BasicAuthXML != null) + { + httpWebRequest.Headers[HttpRequestHeader.Authorization] = BasicAuthXML.ToString(); + } + + webResponse = httpWebRequest.GetResponse(); + } + else + { + webResponse = webRequest.GetResponse(); + } + } + catch (Exception exception) + { + Debug.WriteLine(exception); + e.Cancel = false; + return; + } + + UpdateInfoEventArgs args; + + using (Stream appCastStream = webResponse.GetResponseStream()) + { + if (appCastStream != null) + { + if (ParseUpdateInfoEvent != null) + { + using (StreamReader streamReader = new StreamReader(appCastStream)) + { + string data = streamReader.ReadToEnd(); + ParseUpdateInfoEventArgs parseArgs = new ParseUpdateInfoEventArgs(data); + ParseUpdateInfoEvent(parseArgs); + args = parseArgs.UpdateInfo; + } + } + else + { + XmlDocument receivedAppCastDocument = new XmlDocument { XmlResolver = null }; + try + { + receivedAppCastDocument.Load(appCastStream); + + XmlNodeList appCastItems = receivedAppCastDocument.SelectNodes("item"); + + args = new UpdateInfoEventArgs(); + + if (appCastItems != null) + { + foreach (XmlNode item in appCastItems) + { + XmlNode appCastVersion = item.SelectSingleNode("version"); + + try + { + CurrentVersion = new Version(appCastVersion?.InnerText); + } + catch (Exception) + { + CurrentVersion = null; + } + + args.CurrentVersion = CurrentVersion; + + XmlNode appCastChangeLog = item.SelectSingleNode("changelog"); + + args.ChangelogURL = appCastChangeLog?.InnerText; + + XmlNode appCastUrl = item.SelectSingleNode("url"); + + args.DownloadURL = appCastUrl?.InnerText; + + if (Mandatory.Equals(false)) + { + XmlNode mandatory = item.SelectSingleNode("mandatory"); + + Boolean.TryParse(mandatory?.InnerText, out Mandatory); + + string mode = mandatory?.Attributes["mode"]?.InnerText; + + if (!string.IsNullOrEmpty(mode)) + { + UpdateMode = (Mode)Enum.Parse(typeof(Mode), mode); + if (ReportErrors && !Enum.IsDefined(typeof(Mode), UpdateMode)) + { + throw new InvalidDataException( + $"{UpdateMode} is not an underlying value of the Mode enumeration."); + } + } + } + + args.Mandatory = Mandatory; + args.UpdateMode = UpdateMode; + + XmlNode appArgs = item.SelectSingleNode("args"); + + args.InstallerArgs = appArgs?.InnerText; + + XmlNode checksum = item.SelectSingleNode("checksum"); + + args.HashingAlgorithm = checksum?.Attributes["algorithm"]?.InnerText; + + args.Checksum = checksum?.InnerText; + } + } + } + catch (Exception) + { + e.Cancel = false; + webResponse.Close(); + return; + } + } + } + else + { + e.Cancel = false; + webResponse.Close(); + return; + } + } + + if (args.CurrentVersion == null || string.IsNullOrEmpty(args.DownloadURL)) + { + webResponse.Close(); + if (ReportErrors) + { + throw new InvalidDataException(); + } + + return; + } + + CurrentVersion = args.CurrentVersion; + ChangelogURL = args.ChangelogURL = GetURL(webResponse.ResponseUri, args.ChangelogURL); + DownloadURL = args.DownloadURL = GetURL(webResponse.ResponseUri, args.DownloadURL); + InstallerArgs = args.InstallerArgs ?? String.Empty; + HashingAlgorithm = args.HashingAlgorithm ?? "MD5"; + Checksum = args.Checksum ?? String.Empty; + + webResponse.Close(); + + if (Mandatory) + { + ShowRemindLaterButton = false; + ShowSkipButton = false; + } + else + { + using (RegistryKey updateKey = Registry.CurrentUser.OpenSubKey(RegistryLocation)) + { + if (updateKey != null) + { + object skip = updateKey.GetValue("skip"); + object applicationVersion = updateKey.GetValue("version"); + if (skip != null && applicationVersion != null) + { + string skipValue = skip.ToString(); + var skipVersion = new Version(applicationVersion.ToString()); + if (skipValue.Equals("1") && CurrentVersion <= skipVersion) + return; + if (CurrentVersion > skipVersion) + { + using (RegistryKey updateKeyWrite = Registry.CurrentUser.CreateSubKey(RegistryLocation)) + { + if (updateKeyWrite != null) + { + updateKeyWrite.SetValue("version", CurrentVersion.ToString()); + updateKeyWrite.SetValue("skip", 0); + } + } + } + } + + object remindLaterTime = updateKey.GetValue("remindlater"); + + if (remindLaterTime != null) + { + DateTime remindLater = Convert.ToDateTime(remindLaterTime.ToString(), + CultureInfo.CreateSpecificCulture("en-US").DateTimeFormat); + + int compareResult = DateTime.Compare(DateTime.Now, remindLater); + + if (compareResult < 0) + { + e.Cancel = false; + e.Result = remindLater; + return; + } + } + } + } + } + + args.IsUpdateAvailable = CurrentVersion > InstalledVersion; + args.InstalledVersion = InstalledVersion; + + e.Cancel = false; + e.Result = args; + } + + private static string GetURL(Uri baseUri, String url) + { + if (!string.IsNullOrEmpty(url) && Uri.IsWellFormedUriString(url, UriKind.Relative)) + { + Uri uri = new Uri(baseUri, url); + + if (uri.IsAbsoluteUri) + { + url = uri.AbsoluteUri; + } + } + + return url; + } + + /// + /// Detects and exits all instances of running assembly, including current. + /// + private static void Exit() + { + if (ApplicationExitEvent != null) + { + ApplicationExitEvent(); + } + else + { + var currentProcess = Process.GetCurrentProcess(); + foreach (var process in Process.GetProcessesByName(currentProcess.ProcessName)) + { + string processPath; + try + { + processPath = process.MainModule.FileName; + } + catch (Win32Exception) + { + // Current process should be same as processes created by other instances of the application so it should be able to access modules of other instances. + // This means this is not the process we are looking for so we can safely skip this. + continue; + } + + if (process.Id != currentProcess.Id && + currentProcess.MainModule.FileName == processPath + ) //get all instances of assembly except current + { + if (process.CloseMainWindow()) + { + process.WaitForExit((int)TimeSpan.FromSeconds(10) + .TotalMilliseconds); //give some time to process message + } + + if (!process.HasExited) + { + process.Kill(); //TODO show UI message asking user to close program himself instead of silently killing it + } + } + } + + if (IsWinFormsApplication) + { + MethodInvoker methodInvoker = Application.Exit; + methodInvoker.Invoke(); + } +#if NETWPF + else if (System.Windows.Application.Current != null) + { + System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => + System.Windows.Application.Current.Shutdown())); + } +#endif + else + { + Environment.Exit(0); + } + } + } + + private static Attribute GetAttribute(Assembly assembly, Type attributeType) + { + object[] attributes = assembly.GetCustomAttributes(attributeType, false); + if (attributes.Length == 0) + { + return null; + } + + return (Attribute)attributes[0]; + } + + internal static string GetUserAgent() + { + return string.IsNullOrEmpty(HttpUserAgent) ? $"AutoUpdater.NET" : HttpUserAgent; + } + + internal static void SetTimer(DateTime remindLater) + { + TimeSpan timeSpan = remindLater - DateTime.Now; + + var context = SynchronizationContext.Current; + + _remindLaterTimer = new System.Timers.Timer + { + Interval = (int)timeSpan.TotalMilliseconds, + AutoReset = false + }; + + _remindLaterTimer.Elapsed += delegate + { + _remindLaterTimer = null; + if (context != null) + { + try + { + context.Send(state => Start(), null); + } + catch (InvalidAsynchronousStateException) + { + Start(); + } + } + else + { + Start(); + } + }; + + _remindLaterTimer.Start(); + } + + /// + /// Opens the Download window that download the update and execute the installer when download completes. + /// + public static bool DownloadUpdate() + { + var downloadDialog = new DownloadUpdateDialog(DownloadURL); + + try + { + return downloadDialog.ShowDialog().Equals(DialogResult.OK); + } + catch (TargetInvocationException) + { + } + + return false; + } + } + + /// + /// Object of this class gives you all the details about the update useful in handling the update logic yourself. + /// + public class UpdateInfoEventArgs : EventArgs + { + /// + /// If new update is available then returns true otherwise false. + /// + public bool IsUpdateAvailable { get; set; } + + /// + /// Download URL of the update file. + /// + public string DownloadURL { get; set; } + + /// + /// URL of the webpage specifying changes in the new update. + /// + public string ChangelogURL { get; set; } + + /// + /// Returns newest version of the application available to download. + /// + public Version CurrentVersion { get; set; } + + /// + /// Returns version of the application currently installed on the user's PC. + /// + public Version InstalledVersion { get; set; } + + /// + /// Shows if the update is required or optional. + /// + public bool Mandatory { get; set; } + + /// + /// Defines how the Mandatory flag should work. + /// + public Mode UpdateMode { get; set; } + + /// + /// Command line arguments used by Installer. + /// + public string InstallerArgs { get; set; } + + /// + /// Checksum of the update file. + /// + public string Checksum { get; set; } + + /// + /// Hash algorithm that generated the checksum provided in the XML file. + /// + public string HashingAlgorithm { get; set; } + } + + /// + /// An object of this class contains the AppCast file received from server. + /// + public class ParseUpdateInfoEventArgs : EventArgs + { + /// + /// Remote data received from the AppCast file. + /// + public string RemoteData { get; } + + /// + /// Set this object with values received from the AppCast file. + /// + public UpdateInfoEventArgs UpdateInfo { get; set; } + + /// + /// An object containing the AppCast file received from server. + /// + /// A string containing remote data received from the AppCast file. + public ParseUpdateInfoEventArgs(string remoteData) + { + RemoteData = remoteData; + } + } + + + /// + /// Interface for authentication + /// + public interface IAuthentication + { + } + + /// + /// Provides Basic Authentication header for web request. + /// + public class BasicAuthentication : IAuthentication + { + private string Username { get; } + + private string Password { get; } + + /// + /// Initializes credentials for Basic Authentication. + /// + /// Username to use for Basic Authentication + /// Password to use for Basic Authentication + public BasicAuthentication(string username, string password) + { + Username = username; + Password = password; + } + + /// + public override string ToString() + { + var token = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{Username}:{Password}")); + return $"Basic {token}"; + } + } + + /// + /// Provides Custom Authentication header for web request. + /// + public class CustomAuthentication : IAuthentication + { + private string HttpRequestHeaderAuthorizationValue { get; } + + /// + /// Initializes authorization header value for Custom Authentication + /// + /// Value to use as http request header authorization value + public CustomAuthentication(string httpRequestHeaderAuthorizationValue) + { + HttpRequestHeaderAuthorizationValue = httpRequestHeaderAuthorizationValue; + } + + /// + public override string ToString() + { + return HttpRequestHeaderAuthorizationValue; + } + } +} \ No newline at end of file diff --git a/Mk0.Software.OnlineUpdater/Program.cs b/Mk0.Software.OnlineUpdater/Program.cs new file mode 100644 index 0000000..b32ad7e --- /dev/null +++ b/Mk0.Software.OnlineUpdater/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Mk0.Software.OnlineUpdater +{ + static class Program + { + /// + /// Der Haupteinstiegspunkt für die Anwendung. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new UpdateForm()); + } + } +} diff --git a/Mk0.Software.OnlineUpdater/Properties/AssemblyInfo.cs b/Mk0.Software.OnlineUpdater/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..912b432 --- /dev/null +++ b/Mk0.Software.OnlineUpdater/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("OnlineUpdater")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("mk0.at")] +[assembly: AssemblyProduct("OnlineUpdater")] +[assembly: AssemblyCopyright("Copyright © 2019-2020 by mk0.at")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("f59dcd1b-931c-4a49-9d55-deaa229218f6")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// indem Sie "*" wie unten gezeigt eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Mk0.Software.OnlineUpdater/Properties/Resources.Designer.cs b/Mk0.Software.OnlineUpdater/Properties/Resources.Designer.cs new file mode 100644 index 0000000..1d94f01 --- /dev/null +++ b/Mk0.Software.OnlineUpdater/Properties/Resources.Designer.cs @@ -0,0 +1,224 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.42000 +// +// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +// der Code erneut generiert wird. +// +//------------------------------------------------------------------------------ + +namespace Mk0.Software.OnlineUpdater.Properties { + using System; + + + /// + /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// + // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert + // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. + // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Mk0.Software.OnlineUpdater.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap clock_go { + get { + object obj = ResourceManager.GetObject("clock_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap clock_go_32 { + get { + object obj = ResourceManager.GetObject("clock_go_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap clock_play { + get { + object obj = ResourceManager.GetObject("clock_play", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap download { + get { + object obj = ResourceManager.GetObject("download", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap download_32 { + get { + object obj = ResourceManager.GetObject("download_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Herunterladen bei {0}/s ähnelt. + /// + internal static string DownloadSpeedMessage { + get { + return ResourceManager.GetString("DownloadSpeedMessage", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Checksumme ist unterschiedlich ähnelt. + /// + internal static string FileIntegrityCheckFailedCaption { + get { + return ResourceManager.GetString("FileIntegrityCheckFailedCaption", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Die Dateiintegritätsprüfung ist fehlgeschlagen und hat einige Fehler gemeldet. ähnelt. + /// + internal static string FileIntegrityCheckFailedMessage { + get { + return ResourceManager.GetString("FileIntegrityCheckFailedMessage", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap hand_point { + get { + object obj = ResourceManager.GetObject("hand_point", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Nicht unterstützter Hash-Algorithmus ähnelt. + /// + internal static string HashAlgorithmNotSupportedCaption { + get { + return ResourceManager.GetString("HashAlgorithmNotSupportedCaption", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Der in der XML-Datei enthaltene Hash-Algorithmus wird nicht unterstützt. ähnelt. + /// + internal static string HashAlgorithmNotSupportedMessage { + get { + return ResourceManager.GetString("HashAlgorithmNotSupportedMessage", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. + /// + internal static byte[] Unzipper { + get { + object obj = ResourceManager.GetObject("Unzipper", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap update { + get { + object obj = ResourceManager.GetObject("update", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Update Check fehlgeschlagen ähnelt. + /// + internal static string UpdateCheckFailedCaption { + get { + return ResourceManager.GetString("UpdateCheckFailedCaption", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Es gibt ein Problem beim Erreichen des Aktualisierungsservers. Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es später noch einmal. ähnelt. + /// + internal static string UpdateCheckFailedMessage { + get { + return ResourceManager.GetString("UpdateCheckFailedMessage", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Update nicht verfügbar ähnelt. + /// + internal static string UpdateUnavailableCaption { + get { + return ResourceManager.GetString("UpdateUnavailableCaption", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Es ist kein Update vorhanden. Bitte versuchen Sie es später noch einmal. ähnelt. + /// + internal static string UpdateUnavailableMessage { + get { + return ResourceManager.GetString("UpdateUnavailableMessage", resourceCulture); + } + } + } +} diff --git a/Mk0.Software.OnlineUpdater/Properties/Resources.resx b/Mk0.Software.OnlineUpdater/Properties/Resources.resx new file mode 100644 index 0000000..87e3169 --- /dev/null +++ b/Mk0.Software.OnlineUpdater/Properties/Resources.resx @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\clock_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\clock_go_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\clock_play.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\download.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Herunterladen bei {0}/s + + + ..\Resources\download_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Checksumme ist unterschiedlich + + + Die Dateiintegritätsprüfung ist fehlgeschlagen und hat einige Fehler gemeldet. + + + ..\Resources\hand_point.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Nicht unterstützter Hash-Algorithmus + + + Der in der XML-Datei enthaltene Hash-Algorithmus wird nicht unterstützt. + + + ..\Resources\Unzipper.exe;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\update.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Update Check fehlgeschlagen + + + Es gibt ein Problem beim Erreichen des Aktualisierungsservers. Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es später noch einmal. + + + Update nicht verfügbar + + + Es ist kein Update vorhanden. Bitte versuchen Sie es später noch einmal. + + \ No newline at end of file diff --git a/Mk0.Software.OnlineUpdater/Properties/Settings.Designer.cs b/Mk0.Software.OnlineUpdater/Properties/Settings.Designer.cs new file mode 100644 index 0000000..dc51a3e --- /dev/null +++ b/Mk0.Software.OnlineUpdater/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Mk0.Software.OnlineUpdater.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Mk0.Software.OnlineUpdater/Properties/Settings.settings b/Mk0.Software.OnlineUpdater/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Mk0.Software.OnlineUpdater/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Mk0.Software.OnlineUpdater/RemindLaterForm.Designer.cs b/Mk0.Software.OnlineUpdater/RemindLaterForm.Designer.cs new file mode 100644 index 0000000..5b7280f --- /dev/null +++ b/Mk0.Software.OnlineUpdater/RemindLaterForm.Designer.cs @@ -0,0 +1,146 @@ +namespace Mk0.Software.OnlineUpdater +{ + partial class RemindLaterForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RemindLaterForm)); + this.labelTitle = new System.Windows.Forms.Label(); + this.pictureBoxIcon = new System.Windows.Forms.PictureBox(); + this.labelDescription = new System.Windows.Forms.Label(); + this.radioButtonYes = new System.Windows.Forms.RadioButton(); + this.radioButtonNo = new System.Windows.Forms.RadioButton(); + this.comboBoxRemindLater = new System.Windows.Forms.ComboBox(); + this.buttonOK = new System.Windows.Forms.Button(); + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcon)).BeginInit(); + this.tableLayoutPanel.SuspendLayout(); + this.SuspendLayout(); + // + // labelTitle + // + resources.ApplyResources(this.labelTitle, "labelTitle"); + this.tableLayoutPanel.SetColumnSpan(this.labelTitle, 2); + this.labelTitle.Name = "labelTitle"; + // + // pictureBoxIcon + // + resources.ApplyResources(this.pictureBoxIcon, "pictureBoxIcon"); + this.pictureBoxIcon.Image = Properties.Resources.clock_go_32; + this.pictureBoxIcon.Name = "pictureBoxIcon"; + this.tableLayoutPanel.SetRowSpan(this.pictureBoxIcon, 2); + this.pictureBoxIcon.TabStop = false; + // + // labelDescription + // + resources.ApplyResources(this.labelDescription, "labelDescription"); + this.tableLayoutPanel.SetColumnSpan(this.labelDescription, 2); + this.labelDescription.Name = "labelDescription"; + // + // radioButtonYes + // + resources.ApplyResources(this.radioButtonYes, "radioButtonYes"); + this.radioButtonYes.Checked = true; + this.radioButtonYes.Name = "radioButtonYes"; + this.radioButtonYes.TabStop = true; + this.radioButtonYes.UseVisualStyleBackColor = true; + this.radioButtonYes.CheckedChanged += new System.EventHandler(this.RadioButtonYesCheckedChanged); + // + // radioButtonNo + // + resources.ApplyResources(this.radioButtonNo, "radioButtonNo"); + this.tableLayoutPanel.SetColumnSpan(this.radioButtonNo, 2); + this.radioButtonNo.Name = "radioButtonNo"; + this.radioButtonNo.UseVisualStyleBackColor = true; + // + // comboBoxRemindLater + // + resources.ApplyResources(this.comboBoxRemindLater, "comboBoxRemindLater"); + this.comboBoxRemindLater.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxRemindLater.FormattingEnabled = true; + this.comboBoxRemindLater.Items.AddRange(new object[] { + resources.GetString("comboBoxRemindLater.Items"), + resources.GetString("comboBoxRemindLater.Items1"), + resources.GetString("comboBoxRemindLater.Items2"), + resources.GetString("comboBoxRemindLater.Items3"), + resources.GetString("comboBoxRemindLater.Items4"), + resources.GetString("comboBoxRemindLater.Items5"), + resources.GetString("comboBoxRemindLater.Items6")}); + this.comboBoxRemindLater.Name = "comboBoxRemindLater"; + // + // buttonOK + // + this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + resources.ApplyResources(this.buttonOK, "buttonOK"); + this.buttonOK.Image = Properties.Resources.clock_play; + this.buttonOK.Name = "buttonOK"; + this.buttonOK.UseVisualStyleBackColor = true; + this.buttonOK.Click += new System.EventHandler(this.ButtonOkClick); + // + // tableLayoutPanel + // + resources.ApplyResources(this.tableLayoutPanel, "tableLayoutPanel"); + this.tableLayoutPanel.Controls.Add(this.pictureBoxIcon, 0, 0); + this.tableLayoutPanel.Controls.Add(this.labelTitle, 1, 0); + this.tableLayoutPanel.Controls.Add(this.radioButtonNo, 1, 3); + this.tableLayoutPanel.Controls.Add(this.comboBoxRemindLater, 2, 2); + this.tableLayoutPanel.Controls.Add(this.radioButtonYes, 1, 2); + this.tableLayoutPanel.Controls.Add(this.labelDescription, 1, 1); + this.tableLayoutPanel.Controls.Add(this.buttonOK, 2, 4); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + // + // RemindLaterForm + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.tableLayoutPanel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "RemindLaterForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.Load += new System.EventHandler(this.RemindLaterFormLoad); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcon)).EndInit(); + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label labelTitle; + private System.Windows.Forms.PictureBox pictureBoxIcon; + private System.Windows.Forms.Label labelDescription; + private System.Windows.Forms.RadioButton radioButtonYes; + private System.Windows.Forms.RadioButton radioButtonNo; + private System.Windows.Forms.ComboBox comboBoxRemindLater; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + } +} \ No newline at end of file diff --git a/Mk0.Software.OnlineUpdater/RemindLaterForm.cs b/Mk0.Software.OnlineUpdater/RemindLaterForm.cs new file mode 100644 index 0000000..31a50aa --- /dev/null +++ b/Mk0.Software.OnlineUpdater/RemindLaterForm.cs @@ -0,0 +1,72 @@ +using System; +using System.Windows.Forms; + +namespace Mk0.Software.OnlineUpdater +{ + internal partial class RemindLaterForm : Form + { + public RemindLaterFormat RemindLaterFormat { get; private set; } + + public int RemindLaterAt { get; private set; } + + public RemindLaterForm() + { + InitializeComponent(); + } + + private void RemindLaterFormLoad(object sender, EventArgs e) + { + comboBoxRemindLater.SelectedIndex = 0; + radioButtonYes.Checked = true; + } + + private void ButtonOkClick(object sender, EventArgs e) + { + if (radioButtonYes.Checked) + { + switch (comboBoxRemindLater.SelectedIndex) + { + case 0: + RemindLaterFormat = RemindLaterFormat.Minutes; + RemindLaterAt = 30; + break; + case 1: + RemindLaterFormat = RemindLaterFormat.Hours; + RemindLaterAt = 12; + break; + case 2: + RemindLaterFormat = RemindLaterFormat.Days; + RemindLaterAt = 1; + break; + case 3: + RemindLaterFormat = RemindLaterFormat.Days; + RemindLaterAt = 2; + break; + case 4: + RemindLaterFormat = RemindLaterFormat.Days; + RemindLaterAt = 4; + break; + case 5: + RemindLaterFormat = RemindLaterFormat.Days; + RemindLaterAt = 8; + break; + case 6: + RemindLaterFormat = RemindLaterFormat.Days; + RemindLaterAt = 10; + break; + } + + DialogResult = DialogResult.OK; + } + else + { + DialogResult = DialogResult.Abort; + } + } + + private void RadioButtonYesCheckedChanged(object sender, EventArgs e) + { + comboBoxRemindLater.Enabled = radioButtonYes.Checked; + } + } +} diff --git a/Mk0.Software.OnlineUpdater/RemindLaterForm.resx b/Mk0.Software.OnlineUpdater/RemindLaterForm.resx new file mode 100644 index 0000000..029701a --- /dev/null +++ b/Mk0.Software.OnlineUpdater/RemindLaterForm.resx @@ -0,0 +1,433 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + True + + + 3 + + + + Fill + + + + 3, 3 + + + 79, 90 + + + CenterImage + + + 1 + + + pictureBoxIcon + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 0 + + + True + + + Bottom + + + Segoe UI, 9pt, style=Bold + + + 91, 138 + + + 6, 3, 3, 3 + + + 406, 19 + + + 4 + + + Nein, Update jetzt herunterlanden (empfohlen) + + + radioButtonNo + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 2 + + + Bottom + + + nach 30 Minuten + + + nach 12 Stunden + + + nach 1 Tag + + + nach 2 Tagen + + + nach 4 Tagen + + + nach 8 Tagen + + + nach 10 Tagen + + + 375, 102 + + + 10, 3, 10, 3 + + + 115, 23 + + + 5 + + + comboBoxRemindLater + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 3 + + + True + + + Bottom + + + Segoe UI, 9pt + + + 91, 106 + + + 6, 3, 3, 3 + + + 271, 19 + + + 3 + + + Ja, erinnere mich bitte wieder: + + + radioButtonYes + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 4 + + + True + + + Bottom + + + Segoe UI, 9pt + + + 88, 51 + + + 409, 45 + + + 2 + + + Du solltest das Update jetzt ausführen. Dies dauert nur sehr kurze Zeit (abhängig von deiner Internetgeschwindigkeit) und stellt neue Funktionen zur Verfügung, schließt mögliche Sicherheitslücken. + + + + labelDescription + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 5 + + + Fill + + + 375, 163 + + + 10, 3, 10, 3 + + + 115, 32 + + + 6 + + + OK + + + MiddleRight + + + ImageBeforeText + + + buttonOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 6 + + + Fill + + + 0, 0 + + + 5 + + + 499, 198 + + + 7 + + + tableLayoutPanel + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="pictureBoxIcon" Row="0" RowSpan="2" Column="0" ColumnSpan="1" /><Control Name="labelTitle" Row="0" RowSpan="1" Column="1" ColumnSpan="2" /><Control Name="radioButtonNo" Row="3" RowSpan="1" Column="1" ColumnSpan="2" /><Control Name="comboBoxRemindLater" Row="2" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="radioButtonYes" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelDescription" Row="1" RowSpan="1" Column="1" ColumnSpan="2" /><Control Name="buttonOK" Row="4" RowSpan="1" Column="2" ColumnSpan="1" /></Controls><Columns Styles="Absolute,85,Absolute,280,Absolute,135" /><Rows Styles="Absolute,32,Absolute,64,Absolute,32,Absolute,32,Absolute,16" /></TableLayoutSettings> + + + Bottom + + + Segoe UI, 10.5pt, style=Bold + + + 88, 13 + + + 409, 19 + + + 0 + + + Willst du das Update später herunterladen? + + + labelTitle + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel + + + 1 + + + True + + + 7, 15 + + + 499, 198 + + + Segoe UI, 9pt + + + 3, 4, 3, 4 + + + CenterParent + + + Später an Update erinnern + + + RemindLaterForm + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Mk0.Software.OnlineUpdater/Resources/Unzipper.exe b/Mk0.Software.OnlineUpdater/Resources/Unzipper.exe new file mode 100644 index 0000000000000000000000000000000000000000..4e233482921f39ddbf276604402c35cf453bd019 GIT binary patch literal 104448 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 literal 0 HcmV?d00001 diff --git a/Mk0.Software.OnlineUpdater/Resources/clock_go.png b/Mk0.Software.OnlineUpdater/Resources/clock_go.png new file mode 100644 index 0000000000000000000000000000000000000000..2bebf2f214eafcd5d94da433075ea7f422443d14 GIT binary patch literal 965 zcmV;$13LVPP)x|y1X>8VLw!T!$%4F8Yhf3x;tRx%Bq$YwITb9-) z6gmzH2e3&>$|24x=RD`RyUAX@c5U~r``-2bzy7xpKJo~Pt~3Dc4n1Y)uGkk1dw0~^ zLPJ$;Y+FTDQgm$J-D$;KbqPyLO5a9di4GJ6T|OGrG?&j@Q2?0=2U^{ADJxzVPa4uL z5JJH;k{mdB51X4K=<~vepPTZf=A$x{4rRXk!G!y^e8Wbe>D~3*m{ZKwO(hf+IQd7$ zrxx&id4a3f#%Oz`7ZpL|{B%;b=upC6RSWl07tge9q0Hl9{n|oK5676APRYoYzg7B`;Oi-4F-}cdvTrDSw5Df#bG?U|kjd&*mw0>6E_OE8P+qo-M8d+* zU~ssAGiQp(%?R;%=V>~>xwlAkuMMahs*eRyNd<=-`DzdP1EBTs>R$~6kDWd|D>Olm3Ol1buaI{*T?9H zMB8}_hHQ09RWnO+zb0DNLUdy}iA|;Gs%@j%g1JB9a%Jf>K2kU+w)l2X@IWCNGQ=OgXK14 z235^r_;M%J9xs}{|M63POg$Vi2}c9_^b2WC*^*0LUCVGwKy(S*Y{Jh^lRf|P!4`)l z9&mPMKMzzs$@e4sYBhiRB`R(|nK$BJ@$i*d2XQOH*m)P1v)`wx+(}4WL^nZm$PrX| zBzFyY|8abf$#IS=p@Y?Eij{QTy-wfOn9uLAJk0D2LZv$h<@_Ma$`LKF7QkD(*ab}d z3IhWi8F-Tyl-W=3lVlJ=SCgp|{^^#zhnfrXGV>cX;dGL6pa>m%!4? literal 0 HcmV?d00001 diff --git a/Mk0.Software.OnlineUpdater/Resources/clock_go_32.png b/Mk0.Software.OnlineUpdater/Resources/clock_go_32.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4c9d97a3c7c6dcc433154106f5f1c6db67ad33 GIT binary patch literal 2585 zcmV+!3g-2RP)KtjX|P!uT<*oDAKBp^{lL_Er)1Ql1;(xOyqt@YR~MPLOv)}ZBqT#^JOKJOi{svhn1%_ch2U>mMC;JqXtfPCq`(Y7fYT7z=WBic*(`@~E zL)c_8hqxQ-(SG9S7n5GQ`?>VgtVIygRAR|6K;MiAw=hK*H8AvT7aGsLzVo$B@3?bs zya%bhNu7WZ(h#byN84%7mnnB`o7vqN=9Vfx%6qh5cJB}D1N%bg8iddQyM~I>J+b!V zOf+~iF=O&TT$_`Efte1(=r{kItMa4#R1-GuIES+I=1Y+roH6Yo$ z<<4f?fD9-InFkjvn~J{uhGO2mxj0o7#IZAe1W2!8NESd?u9w4{r;X5dMrB{qr_i)GupUci*Clfb9-7d5REi@wVAak$pvRBK{WG#rvZoF09R{3^Ao6bg9yeWc z21z{)#3j1nOiaScPY+=1_>r(XRV4NZAg5my(o-5yb1@BGpM=vMKW0oyM`evbMTH+X zr_1&E95 ze!M$=(pa+iLKxn59WF-zg_FyXkm|BMf{OL%VnG$>9d z+{tk$%qutfSq{r%xh$Xc!~!sCfOgA>=hAwoxQAtDC!?x1jBr@Ol<^+KCzFSyRMT{n zmL0?LRo}tsa!@;vv2ej%gl;l|us{eRJTOU+=sfc=Kg(fxESKf89@f|00HtrQ5etXk zkcR5|Ac6#xjC3Ee28OX@Wg z<<}-Z%VBvem*umbtAQ}?y6ibiMvUwi-_mA7Ck1HYgjOUbc4E}cxe?E(ZQMTQ8eFJv zCL{iV#zrsh7|5Q6iD4q5FYH*lD41Rx@7^!0sr`;u>`BlpR!^D6_zu^EWeR(cb zfWW3LdnsB0EPmwyic-itCz1EE%xMv3W0D<_=cY)3d4qHkdn3#^QJWdi4l)!R%X3`4{G1v9!jCCe9vapmZYhAj{b znFkH?P!LZ&QShq>$TT5khl+RK{Q{e}?!~lex8v1UA4Awr@g>g%4=BO_^F<>7aAYEF zI~WYd4Bze%ATasO2naR-dQgevkwIp_1el^IcyH+zd|i4N`FGxi7himc&iT!hG5T3{ z6fZ(>G{~rc9kSsjA_oI)kn}5;2QEVr5^TKG+{tmE@ENE)PmH8cmK1VMwu(ijk~A>s zH#d>;M`+H6Ol7g9$i(MOKH@)rJ`ttvcpOwS&`{S#vp_Ul&492!(6sMTQwQ{r-!x#~ zJ_0JW+SMO^Wwu;yJQNHpeD)qZ|H2#+6f&Rry)4`4sGTCjM4i&+z}j`C#P7uZy*;2% zWJV0Qj30VVgwGrJw);Y2x+Wl9Ojd`@aVOhhbGUHvqJ-QW1LG#-nyof!tHB}E4D()= z*;_k#>LQAVkeOWc$&HaCN20aPh0+~ys8ko@#VLP4OYj?h|Ole9uEt?(nm)`HXwCwx8y%a<8c zN{Wf{qN1&&Fy90$v)OIjPvWroNEwQs{VTlT?WA1kLb|XF;+;Vl$@o{@=a_usJc?3L zfp{GozF7obb~VK+)Q+QPKiWT}&rPK*HQ9NAa4iN5?vLhXfxo=1VeW$xDW4uWDn(Mj zEtiAGo_B^@aNx{WU3*gOWmdi@0S!@TJekPbVr)R8r1^)a?u`eb0{%*936>oNmEJ!hQD@M6f^-e0p6Zkyjx>ffD>nuF`&r zisnx+D)(A`p32Kmv@IHiWBaI1t;eu;-}@HNJUs!mo+MO;Jm}S@ClYDl@YLv7vpPVf z=a2LTGQ>`0rzY}%uY;^!t<6}%t@`I^=}G{H&y*wR#co7k5~+r5uiUaUAv@znDcOlB z1;^p9)=~ab3W6aY+I(J8N=v6I;Bu?xud0%AD!KDn%;Wv`LQM2+W8c8nkIewg`q>Sy~11~Ahr^lLD<-mUi?*HmaA{t;B vU2AQ{p{xDx`2Tf9+GXVObyv>UzXcco9Ofo**H;_*00000NkvXXu0mjfhlcSe literal 0 HcmV?d00001 diff --git a/Mk0.Software.OnlineUpdater/Resources/clock_play.png b/Mk0.Software.OnlineUpdater/Resources/clock_play.png new file mode 100644 index 0000000000000000000000000000000000000000..d6aaf79a4f1c851d111f55c64b87d449887d75a0 GIT binary patch literal 959 zcmV;w13>(VP)OGps@~acl+S z3q(xZ<|ZT)I_M&mtsR~1ZF|@D-s{r^{p?BpxzBT+^FQ~T|2dLAxD82_T7b_Ss;Q|( znXg)UUTd~&1zEPREE!oc@$Ws@m(LV6W%Ei-#O|^4wjW7C6_*ydxX9;vuo6loj&+wb znR%nh$Z6u;#MC#>KGDOr!-Bzmzz+HCuAuO3gx|^#d<=EMLXb zjWtwPI{DW^;RSrhFB6-)!r|9XBV&{LBa#y(Iwbw;Ep|yo5zifdk~+5=Z+#UPCNhL0 zrl1x=Eh<+iY^Zf{`n#))kB#z4>ldVEGnlp_$?-XT*f&tilCo+xcvf;EnB@MNNjhFR zi^Fc?jhBX5b?+tmhf?DGE)iFQZ=j9>PtN5<-B7i&VIZ`t+0AUy#k#fE={j_PjV`jI5=+ROidS3-q1ZTy3AMpOT;0a%RfRNjOByu{e0vC3th+HaZUu zF)|TDb1ua&9egzY2vg-U!Srsd^fGpA8k^eQ{ULI(YM{w^=I7H`w#m^WK^|W70Q=u+ z=H0FUqrcrCG#6rW#^CwKdRSWi4e7de(%V;)ZLBSf+CsK$=KnUt$V{GjcBkmd!K>|` z)A@D_p7jr*sxHJtF>*E9Z&R;vgR?iElO7BxYPvVmGl#6J5=IHcgop>xtAOK@yLN%Q92fh{G60U_c z6yeH=1clWbz0r%;(;li64Jp@cZ|8QO;$A0BK3pgG1(K&-?qL(Qt1*l3K8)lUU&b64*DBi!E3VgHQx2 zE>$APt&evz#Z8~LuR2& literal 0 HcmV?d00001 diff --git a/Mk0.Software.OnlineUpdater/Resources/download.png b/Mk0.Software.OnlineUpdater/Resources/download.png new file mode 100644 index 0000000000000000000000000000000000000000..df01f3393bb4b16e34ac4ffdcf493f4142320893 GIT binary patch literal 574 zcmV-E0>S->P)OOG|gux0JymO zNgWIciZaD4E`>mL=cFdcg#v6uC6ZYCnfFNIKgBHG`8W+5v3V;%70K#{XsoYLNgsfJ<+#MsH7t zcg0Wh-!b(j&cD4v(b(Sf3w)l>;<#XNenqpPB>rA%FUMGv8xsg}MoZ)}Jy=;WaU;MVBgc}v8tWXyN zqcbU28-MHsmx$sBTi-T~r$aqqZfHFCorMss^ia58XsX-h&5Zy906#I=g|1uBtN;K2 M07*qoM6N<$f;^7_g#Z8m literal 0 HcmV?d00001 diff --git a/Mk0.Software.OnlineUpdater/Resources/download_32.png b/Mk0.Software.OnlineUpdater/Resources/download_32.png new file mode 100644 index 0000000000000000000000000000000000000000..e3e037723656cc2c390198b21856a5fae01dd93d GIT binary patch literal 1128 zcmV-u1eg1XP)EaZ)V!6n%TFrhS_=V&2}>B>F(;PUswIAdWO9B_^#N%-IrYJ|aURA+ovvh01ID&q-uxIumTDOH3ILd%`Mafhf!oFPG5|wjIEKZS zv)5r*0}W_AWks*#2NAu!0#JL-g?OYn3~OY91_0oZq?w+g-d+GeAiFTYNVA~;25ky} z^`L}HZW;Rs!U)Y~0+YwFZx65zwy%21xa^jpE`p&3MpjWx60)8~1SV3S0NV3+PflKG z#z~y9Y2X|LE?b9n$-n&pSbgpL=J{hEVWrwz?;q|DKpdyq|28+54NOZD~4fxKB`mRPe)rqD653}q#@YtW;UdbDH7eZNS6 zic($)fM^kbbdj?-bpBUN{cuBxP2GwIj6MG-KHmN`?#D^NZcPA2s}SYUAVh&>PHQUxP156MxB>+k?WPS z)gdsp@J`*aWdOrbpax?GVDow{>tuXRz!d->r}4-NnGn+1>}ZY+hGD2=Gz`Gy0A$^1 z=A;@Hs_g+*EFdDs2Kh0e)ypYn)nVw=1H_hOEc1rFvWkh@<~s5qPW3vj=K-4;-+S&V zCcpcWW6vk#W6ify29$+BJRoD4-@1Dm?Zl(CWj*$eZ&DC7Ltt64!580N!>)I>aVR_t zpX%ou571x_2uU4}|GLw`yE|V(%Hx!)-oaCsuz$yMh%2s9)5~QdY4y{Q?Kph;BJRb6 z3%}gK)qmO?fNK>R(+r~RF?*zi6K5{sg(uf!#si1I zIqf4Rq|D2@$cen{ll}EPpw))>G)%NkirI-*@yXe*@XX^Q2!e>8P@z z1;BFr4M|!V{k%%quQNx-aq{dmo>i$d*XEc3E1aw0GLWdA?_e76*nmSCfWpR1mJ zXC;`K*nv+!yMV?}q`iz~Ue{@HkICzXuX7m@`6a;OgqhEUW@h4bjK23d=1%NX<1)`V zvgE3!iY%zU3rb=r1;+T4jlaRD@`6JPcSrU9N&pLb4A*vJD&3^FrdeL3KMpu+v68J! zUzrEICI9=IA0FEfCkg8OpUTO_xafNr7pdg$cr|yU{H*P%R#Z2+5N`4_$Iq>z%`yP| uFNI;;?u2`~Vl`*uzRl8o8_00001)9RzKJF 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 FV1kWcxe@>X literal 0 HcmV?d00001 diff --git a/Mk0.Software.OnlineUpdater/UpdateForm.Designer.cs b/Mk0.Software.OnlineUpdater/UpdateForm.Designer.cs new file mode 100644 index 0000000..4df7d53 --- /dev/null +++ b/Mk0.Software.OnlineUpdater/UpdateForm.Designer.cs @@ -0,0 +1,133 @@ +namespace Mk0.Software.OnlineUpdater +{ + partial class UpdateForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UpdateForm)); + this.webBrowser = new System.Windows.Forms.WebBrowser(); + this.labelUpdate = new System.Windows.Forms.Label(); + this.labelDescription = new System.Windows.Forms.Label(); + this.labelReleaseNotes = new System.Windows.Forms.Label(); + this.buttonUpdate = new System.Windows.Forms.Button(); + this.buttonRemindLater = new System.Windows.Forms.Button(); + this.pictureBoxIcon = new System.Windows.Forms.PictureBox(); + this.buttonSkip = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcon)).BeginInit(); + this.SuspendLayout(); + // + // webBrowser + // + resources.ApplyResources(this.webBrowser, "webBrowser"); + this.webBrowser.Name = "webBrowser"; + this.webBrowser.ScriptErrorsSuppressed = true; + // + // labelUpdate + // + resources.ApplyResources(this.labelUpdate, "labelUpdate"); + this.labelUpdate.Name = "labelUpdate"; + // + // labelDescription + // + resources.ApplyResources(this.labelDescription, "labelDescription"); + this.labelDescription.Name = "labelDescription"; + // + // labelReleaseNotes + // + resources.ApplyResources(this.labelReleaseNotes, "labelReleaseNotes"); + this.labelReleaseNotes.Name = "labelReleaseNotes"; + // + // buttonUpdate + // + resources.ApplyResources(this.buttonUpdate, "buttonUpdate"); + this.buttonUpdate.Image = Properties.Resources.download; + this.buttonUpdate.Name = "buttonUpdate"; + this.buttonUpdate.UseVisualStyleBackColor = true; + this.buttonUpdate.Click += new System.EventHandler(this.ButtonUpdateClick); + // + // buttonRemindLater + // + resources.ApplyResources(this.buttonRemindLater, "buttonRemindLater"); + this.buttonRemindLater.Image = Properties.Resources.clock_go; + this.buttonRemindLater.Name = "buttonRemindLater"; + this.buttonRemindLater.UseVisualStyleBackColor = true; + this.buttonRemindLater.Click += new System.EventHandler(this.ButtonRemindLaterClick); + // + // pictureBoxIcon + // + this.pictureBoxIcon.Image = Properties.Resources.update; + resources.ApplyResources(this.pictureBoxIcon, "pictureBoxIcon"); + this.pictureBoxIcon.Name = "pictureBoxIcon"; + this.pictureBoxIcon.TabStop = false; + // + // buttonSkip + // + resources.ApplyResources(this.buttonSkip, "buttonSkip"); + this.buttonSkip.DialogResult = System.Windows.Forms.DialogResult.Abort; + this.buttonSkip.Image = Properties.Resources.hand_point; + this.buttonSkip.Name = "buttonSkip"; + this.buttonSkip.UseVisualStyleBackColor = true; + this.buttonSkip.Click += new System.EventHandler(this.ButtonSkipClick); + // + // UpdateForm + // + this.AcceptButton = this.buttonUpdate; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.pictureBoxIcon); + this.Controls.Add(this.labelReleaseNotes); + this.Controls.Add(this.labelDescription); + this.Controls.Add(this.labelUpdate); + this.Controls.Add(this.webBrowser); + this.Controls.Add(this.buttonUpdate); + this.Controls.Add(this.buttonSkip); + this.Controls.Add(this.buttonRemindLater); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "UpdateForm"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.UpdateForm_FormClosed); + this.Load += new System.EventHandler(this.UpdateFormLoad); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxIcon)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonRemindLater; + private System.Windows.Forms.Button buttonUpdate; + private System.Windows.Forms.Button buttonSkip; + private System.Windows.Forms.WebBrowser webBrowser; + private System.Windows.Forms.Label labelUpdate; + private System.Windows.Forms.Label labelDescription; + private System.Windows.Forms.Label labelReleaseNotes; + private System.Windows.Forms.PictureBox pictureBoxIcon; + } +} + diff --git a/Mk0.Software.OnlineUpdater/UpdateForm.cs b/Mk0.Software.OnlineUpdater/UpdateForm.cs new file mode 100644 index 0000000..1333166 --- /dev/null +++ b/Mk0.Software.OnlineUpdater/UpdateForm.cs @@ -0,0 +1,197 @@ +using System; +using System.Diagnostics; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Windows.Forms; +using Microsoft.Win32; + +namespace Mk0.Software.OnlineUpdater +{ + internal partial class UpdateForm : Form + { + public UpdateForm() + { + InitializeComponent(); + UseLatestIE(); + buttonSkip.Visible = AutoUpdater.ShowSkipButton; + buttonRemindLater.Visible = AutoUpdater.ShowRemindLaterButton; + var resources = new System.ComponentModel.ComponentResourceManager(typeof(UpdateForm)); + Text = string.Format(resources.GetString("$this.Text", CultureInfo.CurrentCulture), + AutoUpdater.AppTitle, AutoUpdater.CurrentVersion); + labelUpdate.Text = string.Format(resources.GetString("labelUpdate.Text", CultureInfo.CurrentCulture), + AutoUpdater.AppTitle); + labelDescription.Text = + string.Format(resources.GetString("labelDescription.Text", CultureInfo.CurrentCulture), + AutoUpdater.AppTitle, AutoUpdater.CurrentVersion, AutoUpdater.InstalledVersion); + + if (AutoUpdater.Mandatory && AutoUpdater.UpdateMode == Mode.Forced) + { + ControlBox = false; + } + } + + public sealed override string Text + { + get { return base.Text; } + set { base.Text = value; } + } + + private void UseLatestIE() + { + int ieValue = 0; + switch (webBrowser.Version.Major) + { + case 11: + ieValue = 11001; + break; + case 10: + ieValue = 10001; + break; + case 9: + ieValue = 9999; + break; + case 8: + ieValue = 8888; + break; + case 7: + ieValue = 7000; + break; + } + + if (ieValue != 0) + { + try + { + using (RegistryKey registryKey = + Registry.CurrentUser.OpenSubKey( + @"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", + true)) + { + registryKey?.SetValue(Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName), + ieValue, + RegistryValueKind.DWord); + } + } + catch (Exception) + { + // ignored + } + } + } + + private void UpdateFormLoad(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(AutoUpdater.ChangelogURL)) + { + var reduceHeight = labelReleaseNotes.Height + webBrowser.Height; + labelReleaseNotes.Hide(); + webBrowser.Hide(); + Height -= reduceHeight; + } + else + { + if (null != AutoUpdater.BasicAuthChangeLog) + { + webBrowser.Navigate(AutoUpdater.ChangelogURL, "", null, $"Authorization: {AutoUpdater.BasicAuthChangeLog}"); + } + else + { + webBrowser.Navigate(AutoUpdater.ChangelogURL); + } + } + + var labelSize = new Size(Width - 110, 0); + labelDescription.MaximumSize = labelUpdate.MaximumSize = labelSize; + } + + private void ButtonUpdateClick(object sender, EventArgs e) + { + if (AutoUpdater.OpenDownloadPage) + { + var processStartInfo = new ProcessStartInfo(AutoUpdater.DownloadURL); + + Process.Start(processStartInfo); + + DialogResult = DialogResult.OK; + } + else + { + if (AutoUpdater.DownloadUpdate()) + { + DialogResult = DialogResult.OK; + } + } + } + + private void ButtonSkipClick(object sender, EventArgs e) + { + using (RegistryKey updateKey = Registry.CurrentUser.CreateSubKey(AutoUpdater.RegistryLocation)) + { + if (updateKey != null) + { + updateKey.SetValue("version", AutoUpdater.CurrentVersion.ToString()); + updateKey.SetValue("skip", 1); + } + } + } + + private void ButtonRemindLaterClick(object sender, EventArgs e) + { + if (AutoUpdater.LetUserSelectRemindLater) + { + var remindLaterForm = new RemindLaterForm(); + + var dialogResult = remindLaterForm.ShowDialog(); + + if (dialogResult.Equals(DialogResult.OK)) + { + AutoUpdater.RemindLaterTimeSpan = remindLaterForm.RemindLaterFormat; + AutoUpdater.RemindLaterAt = remindLaterForm.RemindLaterAt; + } + else if (dialogResult.Equals(DialogResult.Abort)) + { + ButtonUpdateClick(sender, e); + return; + } + else + { + return; + } + } + + using (RegistryKey updateKey = Registry.CurrentUser.CreateSubKey(AutoUpdater.RegistryLocation)) + { + if (updateKey != null) + { + updateKey.SetValue("version", AutoUpdater.CurrentVersion); + updateKey.SetValue("skip", 0); + DateTime remindLaterDateTime = DateTime.Now; + switch (AutoUpdater.RemindLaterTimeSpan) + { + case RemindLaterFormat.Days: + remindLaterDateTime = DateTime.Now + TimeSpan.FromDays(AutoUpdater.RemindLaterAt); + break; + case RemindLaterFormat.Hours: + remindLaterDateTime = DateTime.Now + TimeSpan.FromHours(AutoUpdater.RemindLaterAt); + break; + case RemindLaterFormat.Minutes: + remindLaterDateTime = DateTime.Now + TimeSpan.FromMinutes(AutoUpdater.RemindLaterAt); + break; + } + + updateKey.SetValue("remindlater", + remindLaterDateTime.ToString(CultureInfo.CreateSpecificCulture("en-US").DateTimeFormat)); + AutoUpdater.SetTimer(remindLaterDateTime); + } + } + + DialogResult = DialogResult.Cancel; + } + + private void UpdateForm_FormClosed(object sender, FormClosedEventArgs e) + { + AutoUpdater.Running = false; + } + } +} diff --git a/Mk0.Software.OnlineUpdater/UpdateForm.resx b/Mk0.Software.OnlineUpdater/UpdateForm.resx new file mode 100644 index 0000000..5a15fec --- /dev/null +++ b/Mk0.Software.OnlineUpdater/UpdateForm.resx @@ -0,0 +1,955 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Top, Bottom, Left, Right + + + + 94, 120 + + + 2, 2, 2, 2 + + + 23, 23 + + + 538, 432 + + + + 0 + + + webBrowser + + + System.Windows.Forms.WebBrowser, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + True + + + Segoe UI, 10.5pt, style=Bold + + + 91, 14 + + + 550, 0 + + + 227, 19 + + + 5 + + + Eine neue Version von {0} ist verfügbar! + + + labelUpdate + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + True + + + Segoe UI, 9pt + + + 91, 50 + + + 550, 0 + + + 479, 15 + + + 6 + + + {0} {1} ist jetzt verfügbar. Es ist die veraltete Version {2} installiert. Soll die neue Version jetzt heruntergeladen werden? + + + labelDescription + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + True + + + Segoe UI, 9.75pt, style=Bold + + + 91, 90 + + + 98, 17 + + + 7 + + + Versionshinweise: + + + labelReleaseNotes + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Bottom, Right + + + Segoe UI, 9pt + + + 479, 573 + + + 2, 2, 2, 2 + + + 153, 28 + + + 2 + + + Update + + + MiddleRight + + + ImageBeforeText + + + buttonUpdate + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + Bottom, Right + + + Segoe UI, 9pt + + + 322, 573 + + + 2, 2, 2, 2 + + + 153, 28 + + + 3 + + + Später erinnern + + + MiddleRight + + + ImageBeforeText + + + buttonRemindLater + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + + + 12, 14 + + + 70, 66 + + + CenterImage + + + 8 + + + pictureBoxIcon + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + Bottom, Left + + + Segoe UI, 9pt + + + 95, 573 + + + 2, 2, 2, 2 + + + 153, 28 + + + 1 + + + Version überspringen + + + MiddleRight + + + ImageBeforeText + + + buttonSkip + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + True + + + 7, 15 + + + 643, 612 + + + Segoe UI, 9pt + + + + AAABAAQAEBAAAAAAIABoBAAARgAAACAgAAAAACAAqBAAAK4EAAAwMAAAAAAgAKglAABWFQAAQEAAAAAA + IAAoQgAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wEAAAADAAAAAwAAAAMAAAADAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAAkAAAANAAAADwAAABEABQ0TAEqmPQAAAA0AAAAJAAAABf///wH///8B////Af// + /wH///8BAAAABwAAAA0ASKJBBVGsWwAAAB0AAAAhCV2/hxBv2MUAAAAZAAAAFQAAAA8AAAAHAAAAA/// + /wH///8BAAAAAwAAAAkAAAARAEqnVyuO7/8Xbc2vA0ibbxuF7vsVfur7ACBILwAAABkAFzQZADR2GQAA + AAX///8B////Af///wEAAAAJAAAADwBKo0sokvT/IJH3/yeO8P8Wi/f/HYz1/xRs0LkWdt7LFHbj9wBT + u0cAAAAD////Af///wEAXM4RAFrITxJpzW8eddWlMpn0/x+U+P8ilvj/UrH6/xeN9/8Xi/b/DIP1/xh5 + 480AAAUF////Af///wH///8BAFzPDS+F4sU/ovj/LJz4/yea+P8nmvn/f8f8//H5/v8/pvr/Foz3/x+N + 9f8KZtNt////Af///wH///8B////Af///wEAXM4TM4vm0zOh+f8toPn/Qab5//P5/v//////yef9/x2R + 9/8YjPb/IYbt+Rp13ZUAXM4b////Af///wH///8B////ASB32otEqfj/M6X6/0Ok+f+Uyfv//////2Wz + +v8olff/FIv3/xeJ9v8nh+z5D2nVj////wH///8B////ASB32nNGpPX/L6L6/zao+v86q/v/aLb6//// + //8nm/j/HZL4/yuV9v8ged2pAFvOH////wH///8B////AQBbzR8yhN+3QJXp10Ga7fdGrfr/Naf6/0un + +f+q0vv/IJX4/xyR9/8ikff/KH3ei////wH///8B////Af///wH///8B////Af///wEAXM5DS6v4/y6h + +f84pPn/Jpr4/zCd+P81k+3/M5f1/zuQ6usAW84J////Af///wH///8B////Af///wH///8BAFzOU1Wv + +f9Gne7vOovjxTWf+P88mfH/AFvNMQJfz0kieNuFAFzOM////wH///8B////Af///wH///8B////AQNf + z2M/jeKtAFzOGwBbzg87kOjbP5Loz////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAW8wH////Af///wH///8BBWHQMxhu1nf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//ygA + AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAAAAUAAAAFAAAABwAAAAcAAAAHAAAABwAA + AAcAAAAFAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAAAAkAAAALAAAACwAAAA0AAAANAAAADwAA + AA8AAAANAAAADQAAAA0AAAALAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAFAAAABwAAAAsAAAANAAAADwAAABEAAAATAAAAEwAA + ABUAAAAVAAAAFQAPJhkAWci7ACxgIQAAABEAAAARAAAADwAAAAsAAAAJAAAABwAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAADAAAABwAAAAkAAAANAAAADwBHnj0AH0YdAAAAFwAA + ABkAAAAbAAAAHQAAAB0AAAAdAFW+mQ5v3P0ATq5rAAAAGQAAABcAAAATAAAAEQAAAA0AAAALAAAABwAA + AAX///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAJAAAADQAAAA8AAAATAFfEpQhj + 0N8ARpxVAAAAHwAAACEAAAAjAAAAJQBIoGsTduL9JIz0/wJYwa8AAAAdAAAAGwAAABcAAAAVAAAAEQAA + AA8AAAALAAAABwAAAAX///8B////Af///wH///8B////Af///wEAAAADAAAABwAAAAsAAAAPAAAAEQAA + ABUAVsCbOpfz/x984f0BVr2lABg4MwAAACkALmhJDWvX8SKO9v8XiPb/DmvY8QAIFSUAAAAfAAAAGwAA + ABcAAAATAAAAEQAAAA0AAAAJAAAABf///wH///8B////Af///wH///8B////AQAAAAMAAAAHAAAACwAA + AA8AAAATAAAAFQBUvZEylPL/IZD3/zKR8P8PadLlAESYcQZgy9ktk/T/EIb2/xCF9v8efuX9AEGPWQAA + AB8AAAAbAAAAFwAAABUAOH4pAE2tQQAAAAkAAAAFAAAAA////wH///8B////Af///wH///8BAAAAAwAA + AAcAAAALAAAADwAAABEAAAAVAFW8iTeW8f8WjPf/GY33/zOa9/8ng+X/MZDv/xqN9/8RiPb/EIf2/yqO + 8f8AVLufAD6JSwBRtX0AWMStCGbU4RBu3P8AWsvBAAAACQAAAAX///8B////Af///wH///8B////Af// + /wH///8BAAAABQAAAAkAAAANAAAADwAAABMAVbx9O5fw/xqP9/8aj/f/Go/3/ySU9/8hkvf/Foz3/xWL + 9/8Tivf/J5P3/xt43/8efOP9JYjt/yKL9f8difb/GXnk/QBTuUkAAAAHAAAAA////wH///8B////Af// + /wH///8B////Af///wEAAAADAAAABQAAAAkAAAALABUtEwBXwYk/mO7/HZL4/x6T+P8dkvj/HZL4/xyR + +P8tofn/HpP3/xaM9/8Vi/f/IZD3/xaJ9v8Mg/b/CYH1/x+L9f8JZdLRAAAKBwAAAAX///8B////Af// + /wH///8B////Af///wH///8BAFzOQQBczokAXMynDWfTwxlz2eUie979LYTi/02l9P8hlvj/IZb4/yGW + +P8glfj/L6H6/7Pf/f9Ksfv/GpD3/xeN9/8Uivf/EYj2/w6F9v8NhPb/J4Xq/QBYyGUAAAAD////Af// + /wH///8B////Af///wH///8B////Af///wEAXM81EGvW62ez+P9Jp/n/P6P5/zig+P8xnvj/J5r4/yWZ + +f8lmfn/JZn5/yqd+f+Jzv3//////8jo/v8vofr/GY/3/xaM9/8Tivf/EIf2/yWQ9v8Tb9npAFi/Cf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM45Hnfb81Gr+f8ilvj/I5j4/yWZ + +f8nm/n/KJz5/ymc+f8pnPn/VLX7//b7/v///////////5DR/f8kmPn/GI73/xWL9/8SiPb/NpTx/wBc + zrcAWs8J////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM5HJn7e91Su + +v8mmvn/KZz5/yqe+f8sn/n/LaD5/yuc+P/S6v3/////////////////+Pz+/1a1+/8ckfj/F433/xOK + 9/8ok/f/NI7s/RJu2OUAW85tAF7QB////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAXM5VL4bi/VSw+v8rn/n/LqH6/y+i+v8kmPn/i8X6////////////////////////////1+z+/yiZ + +P8Yjvf/FYv3/xGI9v8Sh/b/K5L3/zCL6/0Qa9fhAFzOZQBZzAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAXM6xYrD0/zCh+v8xpPr/M6X6/xmI9v+m0Pv/qtL7/+Pw/v///////////6zU + +/+t1fz/Vqv5/xiO9/8WjPf/Eon3/w+F9v8Lgvb/EIT1/0Cb9/8jet/9AFzNvf///wH///8B////Af// + /wH///8B////Af///wH///8BAFvNeUeX6P9Pr/r/MKP6/zOm+v82qPv/K575/ySZ+f8Xjvf/rNP8//// + ////////I5f5/xiN9/8WjPf/Go/3/xeN9/8Tiff/FIj2/zGV9/83j+z9FG3Y5wBbzXMAWcwL////Af// + /wH///8B////Af///wH///8B////AQBczm1Bk+f/VLD6/y2g+v8xpPr/Naf6/ziq+/87rPv/Oav7/yWY + +f+s0/z///////////8vofr/I5f4/x+U+P8bkPj/F433/zSa+P9Alu39F3HZ5wBbznMAXNEL////Af// + /wH///8B////Af///wH///8B////Af///wEAXM5jO43k/Vix+v8qnfn/LqD6/zGk+v81p/r/OKr7/zus + +/85q/v/JZj5/6zT/P///////////yqd+P8jl/j/H5T4/xuQ+P8Xjff/S6Dy/wBczbEAXNEL////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFvNUxlz2P13uvb/aLj5/2O3+v9atPv/ULH6/z6q + +v82qPv/OKn7/zeo+/8jmPj/rNP8////////////JJj4/yKX+P8ek/j/G5D3/xeN9/8/n/j/GXHY2wBt + 2wP///8B////Af///wH///8B////Af///wH///8B////Af///wEAW84nAFzOYwBczYEAXM6fEGrTvSR7 + 3OMyhd/9cr34/zOl+v80pvr/M6X6/yWa+f86l/f/VaX4/1Wl+P8Zj/f/IZb4/x2S+P8aj/f/Foz3/xuN + 9/9Ckuj/AFzOS////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBczn9ptfX/L6L6/zCj+v8wovr/LqH6/yyf+f8pnfn/Jpr5/yOX+P8ml/j/PKH5/yeW + 9/8Vi/f/EYj2/0qi9v8NZdGz////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAFvOjWm39/8sn/n/LaD5/y2g+f9Nrfr/OqX5/yeb+f8kmPj/IZb4/1iu + +f8wg+D/QpHm/VSk8v9Sp/j/Uaf4/zSG4v0AW84j////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAXM6babj5/yic+f85pPn/bLj4/ziJ4f1osfT/Lpz5/yGW + +P8flPj/X6nw/wBczXEAW845AF3OdQVg0K8dddvtLX/e/wBczov///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQBczqtqufr/V7H6/1ii7P8QadTBAFzPORZv + 199ntvn/IJT4/zSd+P8+jOL9AFvNG////wH///8B////Af///wEAW84pAFzOP////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BBWLRt3y89v8rfdzvAFzPZf// + /wH///8BAFvOOS6D4PlRq/n/U6v5/xlw1sf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wECXc7RCmTSqwBb + zhn///8B////Af///wH///8BAFvNc02b6v9orvP/AFzOef///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBb + zBv///8B////Af///wH///8B////Af///wH///8BBWHRsy5+3f0AXM4n////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAW84TAFzOs////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAADAAAAAwAAAAMAAAADAAAABQAAAAUAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAA + AAcAAAAFAAAABQAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAAUAAAAFAAAABwAAAAkAAAAJAAAACwAAAAsAAAANAAAADQAAAA0AAAANAAAADQAA + AA0AAAANAAAADQAAAAsAAAALAAAACwAAAAkAAAAJAAAABwAAAAUAAAAFAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAAMAAAAFAAAABwAAAAkAAAAJAAAACwAAAA0AAAANAAAADwAAAA8AAAARAAAAEQAA + ABEAAAARAAAAEQAAABEAAAARAEWaNQBGnjcAAgQPAAAADwAAAA0AAAANAAAACwAAAAkAAAAJAAAABwAA + AAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAACwAAAA0AAAANAAAADwAAABEAAAARAAAAEwAA + ABMAAAAVAAAAFwAAABUAAAAVAAAAFQAAABUAG0UfAFrL1wBWwZUAI04fAAAAEwAAABEAAAARAAAADwAA + AA0AAAANAAAACwAAAAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAsAAAALAAAADQAPIRMAP40vABo7GwAA + ABUAAAAXAAAAGQAAABkAAAAZAAAAGwAAABsAAAAdAAAAGwAiTykAV8KpCWnX/QVgzdMAPYc9AAAAFwAA + ABcAAAAVAAAAEwAAABEAAAAPAAAADQAAAA0AAAALAAAABwAAAAcAAAAD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAABQAAAAcAAAAHAAAACwAAAA0AAAAPAAAAEQA1 + dScAWMavAFS8iQA2ejUAAQMbAAAAHQAAAB0AAAAfAAAAHwAAACEAAAAhABQsKQBQsoEHZ9bvIIbv/w5t + 2vcASKFdAAAAGwAAABkAAAAZAAAAFwAAABUAAAATAAAADwAAAA8AAAANAAAACQAAAAkAAAAHAAAAA/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAADQAA + AA8AAAARAAAAEwA3fS8AWsrRD2zY9wFax8MARppXAAAAHwAAACEAAAAjAAAAJQAAACUAAAAlAEGQWwVi + 0OUeg+v/IYz1/xZ34f8BVLmTAAAAHwAAAB0AAAAbAAAAGQAAABcAAAAVAAAAEwAAABEAAAAPAAAACwAA + AAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAA + AAsAAAALAAAADQAAABEAAAATAAAAFQAsYykAWcnNN5Xy/y2K6v0Pa9f9AVS4lwAxb0MABxEpAAAAJwAA + ACkAKF1DBGDN5R+B6P0hjfb/EIX2/x+D6/8GYc/hAAYPJQAAACEAAAAdAAAAGwAAABkAAAAXAAAAFQAA + ABMAAAAPAAAADQAAAAsAAAAJAAAABwAAAAX///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAAFAAAABwAAAAkAAAANAAAADwAAABEAAAATAAAAFQAfRyMAWcjLM5Px/zWZ9/8yk/H/HHfe+wdf + ycsAR6B1AAYPLQAfRj8AUrmxGXri/ymR9f8Sh/b/D4X2/yOL8/8LaNf/ADNyQwAAACEAAAAfAAAAHQAA + ABkAAAAXAAAAFQAAABMAAAARAAAADwAAAAsAAAAJAAAABwAAAAMAAAAD////Af///wH///8B////Af// + /wH///8B////AQAAAAMAAAAFAAAABwAAAAkAAAANAAAADwAAABEAAAATAAAAFQANIh0AWcfHMJHv/yeT + 9/8djvf/NZf1/y6L6v8NaNLrAFO3pQBQtKENa9b1Mpb1/xuM9v8Phvb/DoX2/yKO9v8Xdd/9AE6rfwAA + ACEAAAAfAAAAHQAAABkAAAAXAAAAFwAdPRsAR6A9AFS+bQBAkSMAAAAJAAAABwAAAAMAAAAD////Af// + /wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAAAAkAAAALAAAADwAAABEAAAATAAAAFQAA + ABcAWsfDMZDu/yuW9/8Vi/b/F4z3/yqV9/88nfb/IHzg/RJv2v80lPH/I5H3/xKI9/8Rh/b/EIf2/xyM + 9v8piez/AFjFxQAkUTMAL2k5AECRSwBMqmMAVb6PBF/NyQdk1PUHZdX/AFvN6wBUvl0AAAAJAAAABwAA + AAX///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABwAAAAkAAAALAAAADQAA + AA8AAAARAAAAFQAAABcAWse5MZDs/zCZ+P8Yjff/GI73/xiO9/8ikvf/Npz3/zmb9f8vmPf/FYv3/xSK + 9/8Tiff/EYj2/xaK9v8ylvX/BV7M6wBWwbEDXMe/DGnW6RFw3f0XduH/HH/p/SKG7/8be+b9AFrKrwAw + bBUAAAAJAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAA + AAcAAAAJAAAACwAAAA8AAAAPAAAAEQAAABUAWsexMo7r/zSc+P8aj/f/Go/3/xqP9/8aj/f/HZH3/yGT + 9/8bj/f/F433/xaM9/8Vi/f/FIr3/xOJ9v8vl/f/KIXo/yWE6P8sjO39LI/y/yWN9P8cifX/FIT1/yKK + 9P8Oa9n/AFS7UwAAAAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAAUAAAAHAAAACQAAAAsAAAANAAYNDwAdQRkAWsevMY3p/zug+f8dkvj/HZL3/x2S + +P8ckvj/HJH3/xyR+P8bkfj/JZn4/ySY+P8Zjvf/Foz3/xSL9/8Wi/f/KZT3/yOQ9v8Xivb/DIP2/wqB + 9v8IgPX/E4X1/yGB6f8GYtDPAAARCQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAF3FBwBVvBkAVr8tAFbBRwBWwVsAWMRvAFjFhQBYxZUAW8znM47p/z+j + +f8flPf/H5T3/x+U+P8flPf/HpP3/x6T+P8lmvn/Ubf7/1e4+/8lmvj/GI73/xaM9/8Vi/f/E4n3/xGI + 9v8Phvb/DYT2/wuD9v8Jgfb/JYz0/xd03vsBWcZtAAAABQAAAAMAAAAD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAXM6PAFzOwwBbzcsBXc7TDmnU3Rt02uklf+D1MYnl/TuS + 6f9Fmu3/U6n1/zig+P8hlvf/IZb4/yGW9/8hlvf/IZX4/ySY+P83qPv/u+P9/7He/f9Gr/v/HJH4/xiO + 9/8Xjff/FIv3/xOJ9/8RiPb/D4X2/wyE9v8Rhfb/L43v/wtm09EAU74xAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM9zC2bT8Uia7f9ntPn/WK75/1Ss + +f9Oqvn/Rab5/z6j+P83oPj/LJv4/ySY+f8kmPj/JJj4/ySY+f8kmPj/JZn5/zin+/+S0f3///////v9 + /v+Y1P3/MaP6/xyR9/8Yjvf/Foz3/xSK9/8Siff/EIf2/w+G9v8qk/b/IHvh+QBczIEAV78H////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAVdUDAV3PgR92 + 2u9Yp/L/QKP5/yGU+P8glPj/IZb4/yOX+P8kmPj/JZn5/yaa+f8mmvn/J5v5/yeb+f8nmvn/MKL6/23C + /P/k8/7////////////v+P7/Ybz8/ymd+f8bkPf/F433/xaM9/8Uivf/EYj2/xiL9v85mPX/CmXT2wBb + zjn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAFzOEwJf0I8adNr1XbD4/zmh+P8ilvj/I5j4/ySZ+P8mmvj/J5v4/yic+P8pnPj/KZz4/ymc + +P8qnfj/SrD7/8Hl/f/8/v7/////////////////w+b+/0iw+/8ilfj/GY/3/xeN9/8Vi/f/E4n2/ySR + 9/81j+3/AFzO4QBbzlMAWs8H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQBd0QkAXM6JIHnb+Vut9f8/pPn/JZn4/yeb+f8pnPj/Kp35/yue + +f8rn/n/LJ/5/yue+f8rnfj/otX8//7///////////////7+/v//////+vz+/6XZ/P88qfr/HJH4/xiO + 9/8WjPf/E4r3/xmM9/84m/f/Mo3q/xZx2v0HY9LHAFzOSwBbzhcAXs8D////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAWssNBWHQpSqC4PlgsPf/OqT5/ymd + +f8qnvn/LJ/5/y2g+v8toPn/LaD5/yOX+f9csPn/9vr+///////+/v7////////////+/v7//////+v2 + /v9ywPv/I5f4/xqP9/8Xjff/FIv3/xKJ9/8Vifb/KZL3/zaV9P8vien9FXDZ7wRf0KkAXM1ZAFnSCf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzNIwVi + 0a8uheL9Z7n6/zql+f8sn/n/LaH6/y+i+v8wo/r/J5v4/zKZ+P/F4vz///////7+/v////////////// + ///////////////////a7v7/L534/xyS+P8Yjvf/FYz3/xOJ9/8RiPb/D4b2/xSH9v8jjvf/OZXy/y6H + 6P0Qa9bnAFzOqQBbzTsAWcsF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBbzisAW87VUKPv/1ay+v8vofr/MKP6/zGk+v8zpfr/E4b2/3i4+f/S5/3/1Oj9/9zs + /f/4+/7/////////////////1en9/9bq/f/W6v3/hcL6/xqP9/8Zj/f/Foz3/xSK9/8RiPf/D4X2/w2E + 9v8Kgvb/DIL1/yqQ9v9CnPb/LILk/QVg0P0AW82X////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAFzPEQBczn8fd9rvaLb3/0es+v8wovr/MaT6/zOl+v80p/r/GIz3/yqS + 9/8zl/f/MZb2/1Gk+P/c7P3//v7+////////////PJ74/zWY9/80mPf/LZX3/xeM9/8Zjvf/F433/xWL + 9/8SiPf/D4b1/w2E9v8Rhfb/J5D2/zaV9P8wiOn9GnLb8wVg0LMAW81b////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFvNdR112e9msPL/Tq76/zGj+v8xo/r/M6b6/zWn + +v83qfv/M6X6/y+h+v8tofr/JZn4/zSX9//V6f3///////7+/v/+/v7/LKD6/x6T+P8dkff/G5D3/xqQ + 9/8aj/f/F433/xWL9/8Siff/E4j2/ymS9/9Dnvj/No7r/xhx2v0IY9LNAFrNUQBbzRsAWcwD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQBczQsAXM1rIHfb/2ay9f9Sr/r/LaD6/y+i + +v8xpPr/NKb6/zeo+/84qvv/Oqz7/zqr+/84qvv/LqD6/zaY+P/V6f3/////////////////M6b6/ySY + +f8ilvj/H5T4/x2S+P8akPf/F433/xmN9/8ul/j/SaD0/z6S6/8ZctntAFvOtwBczk0AXNEJ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFrNCwBbzWcWcNjpZbD0/1ax + +v8voPn/LaD6/y+i+f8ypPr/NKf6/zeo+/85q/v/PK36/zus+/85q/v/LqH6/zaY+P/V6f3//v7+//// + ////////MaP5/ySY+P8il/j/H5T3/x2S+P8akPj/F433/y6Y9/9MoPP/Hnbb8wdi0bEAXM5jAFvRD/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzOWRNu + 1+deqPD/WrL6/y2e+f8qnfn/LaD6/y+i+v8xpPr/NKb6/zeo+/84qvv/Oqz6/zqr+/84qvv/LqD6/zaY + +P/V6f3///////7+/v/+/v7/LKD5/yOY+P8ilvj/H5T4/xyS9/8akPj/F433/zGZ+P9MnvD/AFzNzwBc + zSUAXNED////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBY + ywMAW81RC2fT+1ai7P+Bwfj/XbP5/1ax+v9Mrfn/RKr6/0Kq+v9Aqvr/O6n6/zWn+v83qfv/OKn7/zip + +/83qPv/LKD5/zaY+P/V6f3/////////////////Jpr4/yKX+P8ilvj/H5T4/x2S+P8akPf/F433/xyP + 9/9Tqfj/GnLY5QBdzlH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBdzwcAW86bCWPR3yt/3fEzheD9Po3j/0mV5v1WoOr9Yqvw/2ey9P9ruPf/ar37/0Ks + +v81p/r/Nqj6/zan+/81p/r/K575/y6U9/+y1vz/1Oj9/9To/f/U6P3/IZb4/yGV+P8hlvj/HpP3/xyR + +P8aj/f/F433/xWL9/85nPj/QZHo/QNfz5UAXc4N////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAW84dAFzOMQFdzjkAW81HAFzOawNfzocLZdKlEmzVzxZv + 1u0acdf9ZbP0/1e1+v8zpfr/M6X6/zOl+v8ypfr/LJ/5/xaK9v8ji/b/Ko/2/yqP9v8qj/b/Eor3/yGV + 9/8glfj/HZL4/xyR9/8Zj/f/Foz3/xSK9/8ZjPf/VqTx/xdv19cAXM4t////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAXM6/X63y/1Wz+/8wo/r/MKP6/zCj+v8wovr/L6L6/y6h+v8sn/n/Kp35/yic + +f8mmvj/JJj4/yGW+P8klvj/LZr4/yeW+P8ekff/FYz3/xOJ9/8RiPb/Q5/2/zeH4v8FYM97////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQBZ2QUAW87DZLH0/1Cw+v8uofr/LqH6/y6h+f8uofr/LKD5/yyf + +f8qnfn/KJz4/yeb+f8lmfn/Ipf4/yGW+P9Lqfn/Xa31/1ut9/9Uq/j/QaD4/zCY+P8fj/b/KJL2/02c + 7v0RadTZAFnMCf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQBb0Q8AW87HabX2/0ut+v8rn/n/LJ/5/yyf + +f8toPn/V7L6/2G2+v83o/n/J5v5/yWZ+f8jl/j/IZb4/y2b+P9tuPn/G3LX/xpx2P8sf9/7SJns/1mo + 9P9hr/j/Xa35/2iw9/8keNv7AFvORf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBdzxsAXM7Nbrn4/0Oo + +f8pnPn/Lp/5/0aq+v9uuvj/XKXs/1Kf6/9vufn/LJz5/yOX+P8hlvj/H5T4/0Sl+f9bpe7/AFzNsQBa + zCkAW85fAF3OpQBczckJY9LXJn3f80SS6P06iuP/AFzOtQBf0gv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBd + zyUAXM7Rcrz6/z6l+f8yoPn/XbT6/2ix8/89jOL9B2LQvQ1o1NNWou3/WbH6/yaY+P8flPj/IpX4/1iu + +f87ieH9AFzOY////wH///8BAF3QAwBdzRMAW805AFzOZwBbzYsCXc6vAFzOuwBczh////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBbzy8AXM7Vd7/6/1aw+v9wvPr/Up7r/xtx1+8GYdGFAFzPIQBbzlsRatXnb7j3/0Sm + +f8elPj/Kpj4/2Gu9v8ec9f9AFnNGf///wH///8B////Af///wH///8B////AQBZywcAW84ZAFzNKQBc + zQf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQBczjkFYtLXhcT5/2uv8f8uf9zxAFzPqQBczi////8B////Af// + /wEAW851I3nb+Wmz9/83nvj/OJ74/1ih7P0RatS7////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQBbzkMIY9HfSJTl/Rtx1tUBXc51AFrOD/// + /wH///8B////Af///wEAV84LB2PRsz6P5f9ksvj/WKz4/0GN4/8FYM5v////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBbzVcBXM7rCGLRowBb + zzMAWs4H////Af///wH///8B////Af///wH///8BAFvNNwxm0tFXo+7/cbX2/yt+3esAXM47////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBZ + zA8AXMwt////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBczk8KZdLhU5vp/w1l + 0a8AW84Z////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBd + zwcAXM55CmPR/wBczYkAXM0F////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAW84PAFzOmwBbzTf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//KAAAAEAAAACAAAAAAQAgAAAA + AAAAQgAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAADAAAABQAAAAUAAAAFAAAABQAA + AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAAAAUAAAAFAAAABQAAAAcAAAAHAAAABwAA + AAcAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAHAAAABwAAAAcAAAAHAAAABQAA + AAUAAAAFAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAAFAAAABQAAAAcAAAAHAAAACQAA + AAkAAAAJAAAACwAAAAsAAAALAAAACwAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAALAAAACwAA + AAsAAAALAAAACQAAAAkAAAAJAAAABwAAAAcAAAAFAAAABQAAAAMAAAAD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAUAAAAHAAAABwAA + AAkAAAAJAAAACwAAAAsAAAANAAAADQAAAA0AAAAPAAAADwAAAA8AAAAPAAAADwAAABEAAAARAAAAEQAA + AA8AAAAPAAAADwAAAA8AAAAPAAAADQAAAA0AAAANAAAACwAAAAsAAAAJAAAACQAAAAcAAAAHAAAABQAA + AAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABQAA + AAcAAAAJAAAACQAAAAsAAAALAAAADQAAAA0AAAAPAAAADwAAABEAAAARAAAAEQAAABMAAAATAAAAEwAA + ABMAAAATAAAAEwAAABMAAAATAAAAEwBIn0EAWcirAAwYFQAAABEAAAARAAAADwAAAA8AAAAPAAAADQAA + AA0AAAALAAAACQAAAAkAAAAHAAAABQAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAA + AAMAAAAFAAAABwAAAAkAAAAJAAAACwAAAA0AAAANAAAADwAAAA8AAAARAAAAEwAAABMAAAATAAAAFQAA + ABUAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAnYicAXM7/AFzO/wBKoU0AAAAVAAAAFQAA + ABMAAAATAAAAEQAAABEAAAAPAAAADQAAAA0AAAALAAAACQAAAAkAAAAHAAAABQAAAAUAAAAD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAkAAAALAAAACwAAAA0AAAAPAAAAEQAAABEAAAATAAAAEwAA + ABUAAAAXAAAAFwAAABkAAAAZAAAAGQAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAACRsAWcfBAmHR+wZi + 0f0AVr6VAAAAGQAAABcAAAAXAAAAFQAAABUAAAATAAAAEQAAABEAAAAPAAAADQAAAA0AAAALAAAACQAA + AAcAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAkAAAALAAAADQAAAA8AAAAPAAAAEQA5 + eSkAWMWrAD6NOwAAABcAAAAXAAAAGQAAABsAAAAbAAAAHQAAAB0AAAAdAAAAHwAAAB8AAAAfAAAAHwAA + AB8AUbaLAF3P/R6E7v8UdeL/AFzM4QAAABsAAAAbAAAAGQAAABkAAAAXAAAAFQAAABUAAAATAAAAEQAA + AA8AAAAPAAAADQAAAAsAAAAJAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAABwAAAAkAAAALAAAADQAA + AA8AAAARAAAAEQAAABMAS6dPAFzO/wBczv8AU7mFAAkaHwAAABsAAAAdAAAAHwAAAB8AAAAhAAAAIQAA + ACEAAAAjAAAAIwAAACMARZddAF3P/RR65v8nj/b/JIbu/wBczv8ANnU9AAAAHQAAABsAAAAbAAAAGQAA + ABcAAAAXAAAAFQAAABMAAAARAAAAEQAAAA8AAAANAAAACwAAAAkAAAAJAAAABwAAAAUAAAAD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAAFAAAABwAA + AAkAAAALAAAADQAAAA8AAAAPAAAAEQAAABMAAAAVAEWdRwBczv8aeOH/A1/Q/QBbydcAPYVHAAAAHwAA + ACEAAAAjAAAAIwAAACUAAAAlAAAAJQAAACcAKlw9AFvM8Q1v3f0skvb/HYv2/ymR9v8GYtD9AE+wgQAA + AB8AAAAfAAAAHQAAABsAAAAZAAAAGQAAABcAAAAVAAAAEwAAABEAAAARAAAADwAAAA0AAAALAAAACQAA + AAcAAAAFAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AAMAAAAFAAAABwAAAAkAAAALAAAACwAAAA0AAAAPAAAAEQAAABMAAAAVAAAAFwA/jj0AXM7/N5Ty/zyZ + 8/8Tb9n7AFzO/QBTt5EADSApAAAAJQAAACcAAAAnAAAAKQAAACkACxwvAFnG0Qdl1Psukvb/Io73/wmB + 9v8pkfb/E3Hd/wBZx8kAAAAjAAAAIQAAAB8AAAAdAAAAGwAAABkAAAAZAAAAFwAAABUAAAATAAAAEQAA + AA8AAAANAAAADQAAAAsAAAAJAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAACwAAAA0AAAAPAAAAEQAAABEAAAATAAAAFQAA + ABcAN3gzAFzO/zSS8P9Bn/j/QJ/4/yqH6P8FYND9AFvJ3wA6hlUAAAApAAAAKQAAACsAAAAtAFC1owFe + z/0rjvH/LZX3/w6E9v8Lgvb/Io73/yOE6/8AXM79ABtAMQAAACEAAAAhAAAAHwAAAB0AAAAbAAAAGQAA + ABcAAAAVAAAAEwAAABMAAAARAAAADwAAAA0AAAALAAAACQAAAAcAAAAFAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAACQAAAAsAAAANAAAADwAA + ABEAAAATAAAAFQAAABUAAAAXACZZKQBczv8uju7/NJr3/x+P9/88nfj/Ppr0/xdy2/0AXc/9AFG1nwAP + JDMAAAAtAEOXcwBczf8jher/N5r4/xWI9v8Nhfb/DIT2/xiJ9v8xlPb/A17Q/wBJoW0AAAAjAAAAIQAA + AB8AAAAdAAAAGwAAABkAAAAXAAAAFwAAABUAAAATAAAAEQAAAA8AAAANAAAACwAAAAkAAAAHAAAABQAA + AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAA + AAkAAAALAAAADQAAAA8AAAARAAAAEwAAABMAAAAVAAAAFwARKx8AXM7/LY7t/zqc+P8Tivf/Fov3/zCY + +P9Fovn/MIzr/wdi0P0AXMrlAEijfwBczfcXd+D/Pp74/x+P9/8Qh/b/D4b2/w6F9v8Phfb/NJj3/xJv + 2vsAVr2vAAAAIwAAACEAAAAfAAAAHQAAABsAAAAZAAAAFwAAABcAAAAVADZyJwBQtVkAWcehAE+zSwAA + AAsAAAAJAAAABwAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAADAAAABQAAAAcAAAAJAAAACwAAAA0AAAAPAAAADwAAABEAAAATAAAAFQAAABcAAAAZAF3O/S2M + 7P9AoPj/FYv3/xWL9/8Vi/f/IZH3/0Cg+P9Dn/X/G3fd/QBczv8LaNb9P5/4/y+X+P8Siff/EYj3/xGH + 9v8Qh/b/D4b2/y2V9/8kgub/AFzN8wAHDiUAAAAhAAAAHwAAAB0ACRIdAEGRQwBRuHcAWMSpAFvM4wBc + zv8AXM7/AFzO/wBbzNcAAAALAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAACQAAAAkAAAALAAAADQAAAA8AAAARAAAAEwAA + ABUAAAAXAAAAFwBdzvUriun/RaT5/xeN9/8Xjff/F433/xeN9/8Zjvf/M5v4/0mm+f84lvH/Pp32/zyf + +P8Wi/f/FIr3/xOK9/8Siff/EYj3/xCH9v8ij/f/N5Xy/wFdzv8AR6FlAEedXwBUuY8AWcjHAFzN9wBc + zv8CXs79DGva+xN24/8jhO3/Hn/q/wBczv8AS6ozAAAACwAAAAkAAAAHAAAABQAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAcAAAAJAAAACwAA + AA0AAAAPAAAADwAAABEAAAATAAAAFQAAABcBXc7rKojo/0un+f8Zjvf/GY/3/xmP9/8Zj/f/GY/3/xmO + 9/8jk/f/O5/4/zad+P8cj/f/Foz3/xaM9/8Vi/f/FIr3/xOK9/8Siff/F4v2/z6e+P8NZNH/AFzO/wBc + zv8IZNP5FHTf/x6A6P8oi/H/LpL3/y2S9/8pj/f/KY/3/xJu2vsAW8y/AAAACwAAAAkAAAAHAAAABQAA + AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAA + AAUAAAAFAAAABwAAAAkAAAALAAAADQAAAA8AAAAPAAAAEQAAABMAAAAVAV3N4SiF5v9Rq/r/G5D4/xuQ + +P8bkPj/G5D4/xuQ+P8bkPj/GpD4/xqQ9/8Zj/f/GY/3/xiO9/8Xjff/F433/xaM9/8Vi/f/FIr3/xKJ + 9/83m/j/NZTy/yyM7f84mPX/Opv4/zeZ+P8sk/f/IIz2/xSG9v8Jf/X/F4b2/ymL8f8CXc7/AFS4TwAA + AAkAAAAHAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAABQAAAAcAAAAHAAAACQAAAAsAAAANAAAADQAAAA8AAAARAAAAEwFd + zNclg+X/WK76/xyS+P8dkvj/HZL4/x2S+P8dkvj/HJL4/xyR+P8ckfj/G5H4/xuQ+P8dkvj/I5j4/xmO + 9/8Xjff/Foz3/xWL9/8Uivf/GYz3/zKY+P8wl/f/JJD3/xeK9v8Ng/b/C4L2/wmB9v8IgPX/B3/1/yyS + 9/8ad+D/AFzN3QAAGgsAAAAHAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABQAAAAcAAAAJAAAACwAA + AAsAAAANADVyHQBIoTkAXM7/IoDi/12x+v8fk/j/HpP4/x+U+P8flPj/H5T4/x6T+P8ek/j/HpP4/x2S + +P8elPj/Oaz7/z6v/P8wo/r/GY/3/xiO9/8Xjff/FYz3/xSK9/8Tiff/Eoj3/xCH9v8Phvb/DYT2/wyD + 9v8Kgvb/CYH2/xiI9v80k/T/BmHQ/QBYw2sAAAAHAAAABQAAAAUAAAAD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBmzAUAYM8hAFnGPwBb + yV8AWsp9AFvMmwBczLkBXc7dAF3P9QBczv8AXM7/AFzO/ymG5f9fs/r/Ipb4/yCV+P8glfj/IJX4/yCV + +P8glfj/IJX4/x+U+P8flPj/M6X7/1G3/P+z4P7/Pq/8/yWb+f8Zj/f/GI73/xeN9/8WjPf/FIv3/xOJ + 9/8RiPf/EIf2/w6F9v8NhPb/C4P2/wqB9v8vlPf/JIHm/wBcz/MAOY4TAAAABQAAAAMAAAAD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBc + zv8AXM7/AFzO/wBczv8CXs/9DmnV+Rt12/sngOH/M4zn/z+V7P9KoPD/VKn1/2Cy+f9jtfr/Sqn5/yKW + +P8il/j/Ipf4/yKX+P8il/j/Ipf4/yKW+P8hlvj/LJ/6/z+v/P/K6f7//////4nO/f88rfz/H5T5/xqP + 9/8Yjvf/F433/xWM9/8Uivf/E4n3/xGI9v8Qhvb/DoX2/wyE9v8WiPb/PJr3/w5n1PsAWsuNAAAABQAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAXc/JAFzO/ziP6v9lsff/Z7X6/2a1+v9ntfr/ZLT6/12x+v9Urfr/TKr5/0Sm + +f88o/n/M574/yOY+f8kmPn/JJj5/ySY+f8kmPn/JJj5/ySY+f8jmPn/J5r5/z2t/P+S0v3///////// + ///2+///Wbr8/zWn+/8bkPj/Go/3/xiO9/8Xjff/FYv3/xSK9/8Siff/EYf2/w+G9v8Nhfb/L5X3/zGM + 6/8AXc79AFi/If///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFXVBwBczrcFYtL7Z7D1/2m2+v80nfn/JJX4/x6T + +P8glPj/IZX4/yKW+P8jl/j/JJj5/ySZ+f8lmfn/Jpr5/yaa+f8mmvn/Jpr5/yaa+f8mmvn/Jpn5/ziq + /P9fvf3/+fz//////////////////9Xu/v9BsPz/K5/6/xuQ+P8Zj/f/GI73/xaM9/8Vi/f/E4r3/xKI + 9/8Qh/b/FYj2/0Of+P8Xcdr7AFzPq////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAZswLAF3PyQll + 0vtcrPb/YLL6/ySW+P8glfj/IZb4/yKX+P8jmPn/JJn5/yWZ+f8mmvn/J5v5/yeb+f8onPn/KJz5/yic + +f8onPn/KJv5/zKk+/9Dsfz/3PH+////////////////////////////oNf+/z2u/P8il/j/G5D4/xmP + 9/8Xjff/Foz3/xSL9/8Tiff/EYj2/y2V9/9AmPH/AV3O/wBbzTn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBVzA8BXtDXDmnV+2Oy+P9es/r/JZj4/yKX+P8kmPn/JZn5/yaa+f8nm/n/KJz5/ymc + +f8pnfn/Kp35/yqd+f8qnfn/Kp35/yuf+f81p/v/ptn9//////////////////////////////////3+ + //9pwf3/OKr8/x2R+P8akPj/GY73/xeN9/8Vi/f/FIr3/xKI9/88nfj/MIjn/wBczv8AXM+lAFrPJf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAF3RFwFdz+ESbtb7arb4/12z+v8nmfn/JZn5/yaa + +f8om/n/KZz5/yqd+f8qnvn/K575/yuf+f8sn/n/LJ/5/yyf+f8qnvn/Y7j7//7///////////////// + ////////////////////////5fT+/0Wx+/8vovr/G5H4/xmP9/8Yjvf/Foz3/xSL9/8Tiff/JpP3/0yl + +P84kez/EmvW+wBdzv0AXM+fAGDPIf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAWssjAV3P6Rh1 + 2/twu/r/XbP7/yea+f8onPn/KZ35/yqe+f8rn/n/LJ/6/y2g+v8toPr/LqH6/y6h+v8lmfn/MZz4/+j0 + /v////////////////////////////////////////////////+y3f3/M6X6/yOX+f8akPj/GY73/xeN + 9/8Vi/f/E4r3/xKI9/8ejvf/PJz4/0uj+P81juz/D2rW+wBczvsAW86XAF7QG////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBbzC0BXM/xIHve/XS9+/9bs/r/KZ35/yqe+f8sn/n/LaD6/y6h+v8vofr/L6L6/y+i + +v8nmvr/FYv3/7PZ/P///////////////////////////////////////////////////////////2+9 + +/8qnfn/HJL5/xmP9/8Yjvf/Foz3/xSK9/8Siff/EIf2/w+G9v8djPf/PJv4/0mh+P8xi+r/DWfU+wBc + z/kAXM2RAFnTF////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAF3MNwBdz/koguH9ecH7/1Wx+v8sn/r/LaD6/y6h + +v8vovr/MKP6/zGk+v8tofn/DYX3/2ey+f////////////////////////////////////////////// + ///////////////////v+P//OaH5/yGV+P8akPj/GI73/xaN9/8Vi/f/E4n3/xGI9v8Phvb/DYT2/wuD + 9v8civf/PJv3/0ef9/8viOn/C2bT+wBdzvcAXM6JAFnMFf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAW85DAFzO/zuT + 6f99xPv/MqL6/y+h+v8wo/r/MaT6/zKk+v8zpfr/EIf2/yKL9v/y+P7///////////////////////// + /////////////////////////////////////////////8Lh/f8aj/f/G5D4/xmP9/8Xjff/FYv3/xOK + 9/8RiPf/EIb2/w6F9v8Mg/b/CoL2/wiA9f8bifb/Opn3/0Wd9v82i+n/CmTS+wBczv8AXM1t////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAF3PhQBczv9XqPL/esP8/y+h+v8wovr/MaT6/zKl+v80pvr/NKf6/wR89v8vkvf/Vab4/1Wm + +P9Vpvj/Vab4/5HF+////////////////////////////1qq+P9bq/n/XKz5/12t+f9ervn/II/3/xWM + 9/8Zj/f/F433/xaM9/8Uivf/Eoj3/xCH9v8Ohfb/DIT2/wqC9v8IgPb/GIj2/zqZ9/9In/j/PpHt/w9p + 1fsAXM7/AFzOjf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAFzPewBczv9Qoe7/gMX7/0ar+/8vovr/MaP6/zKl+v80pvr/Naf7/zao + +/8nm/n/E4r3/xKJ9/8Siff/EYn2/wZ+9f9aqPn///////////////////////////8jl/n/EIb3/w2E + 9v8NhPb/DYT2/w+H9v8aj/j/Go/3/xiO9/8WjPf/FIr3/xKJ9/8Qh/b/DoX2/wyE9v8di/f/QJz4/0+k + +P84j+z/EmvW+wBbzv8AXM6nAFnMKf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFvObQBczf9JnOz/g8b7/0ms+/8uofr/MKP6/zKk + +v8zpvr/Naf7/zeo+/84qvv/Oar7/zmq+/84qvv/N6n7/zao+/8Siff/Wqj5//////////////////// + ////////Nqn7/yOY+f8kmPn/Ipb4/yCV+P8ek/j/HJH4/xqQ9/8Yjvf/Foz3/xSL9/8Siff/EIf2/yKP + 9/9FoPj/Vqj5/z2T7f8TbNb7AFvO/wBczqcAWcwp////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzNYQBczv9Dl+v/hcf8/06u + +v8toPr/LqH6/zCj+v8ypfr/NKb6/zao+/84qfv/Oav7/zqs+/87rPv/Oqv7/ziq+/83qPv/E4n4/1qo + +f///////////////////////////zmr+/8mmvn/JJj5/yKW+P8glfj/HpP4/xyR+P8akPj/GI73/xaM + 9/8Ui/f/JpP4/0uk+P9crfn/Qpbt/xVu1/sAW87/AFzOpwBc0Sf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFzNVwBd + z/09kuj/h8f8/1Kw+v8rnvn/LaD6/y+i+v8xo/r/M6X6/zSn+v82qPv/OKr7/zqs+/88rfv/PK77/zus + +/85q/v/N6n7/xOJ+P9aqPn///////////////////////////84qfv/JZn5/ySY+f8il/j/IJX4/x6T + +P8ckvj/GpD4/xiO9/8Wjff/N5z4/2Kw+v9Gmu7/Fm7X+wBdz/0AXM6nAFzRJ////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAFvNTQBczvs2jOb/iMf8/1ex+v8pnfn/K575/y2g+v8vovr/MaP6/zOl+v80p/r/Nqj7/ziq + +/86rPv/PK37/zyu+/87rPv/Oav7/zep+/8Tifj/Wqj5////////////////////////////NKX6/yOY + +P8kmPn/Ipf4/yCV+P8ek/j/HJL4/xqQ+P8Yjvf/Fo33/1ar+f86j+n/AFzO/wBczqcAXNEn////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAF3NQwBdz/kvh+P/h8b8/12z+/8nm/n/KZz5/yue+f8toPr/L6H6/zCj + +v8ypfr/NKb6/zao+/84qfv/Oav7/zqs+/87rPv/Oqv7/ziq+/83qPv/E4n4/1qo+f////////////// + /////////////y+i+v8jmPf/JJj5/yKW+P8glfj/HpP4/xyR+P8akPj/GI73/xaM9/9Kpvn/UqDv/wBc + zv8AXswf////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFvNOQBdzvcoguD9icb7/4rI+/9Xsfr/S6z6/0Cn + +v81o/n/LZ/6/y6h+v8wo/r/MqT6/zOm+v81p/v/N6j7/ziq+/85qvv/Oar7/ziq+/83qfv/Nqj7/xKJ + 9/9aqPn///////////////////////////8qnfn/IZf4/ySY+f8ilvj/IJX4/x6T+P8ckfj/GpD3/xiO + 9/8WjPf/J5X4/2iz+f8Vbdb7AF3Oh////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFnMFQBczv8AXM7/P5Hn/2Sq + 7/9osPP/eLz4/4jH+/+Myvz/jcv8/43L/P+Cxvz/dsL8/2u9+/9bt/v/Nqf6/zWn+/82qPv/N6n7/zep + +/83qPv/Nqj7/zSn+v8SiPf/Wqj5////////////////////////////Jpr5/yCV+P8jmPn/IZb4/x+U + +P8ek/j/HJH4/xqP9/8Yjvf/Foz3/xSK9/9ZrPn/Q5Pp/wBdz+8AbdsH////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBt + 2wcAW86XAFzOtwFdz9UBXc7zAFzO/wBczv8AXM7/D2nT+SR62/s3iuP/SZrq/1uo7/9ttvT/i8v8/2u+ + +/80pvr/Naf6/zWn+/81p/v/Naf7/zSm+v8zpfr/Eon3/zyZ9/+q0vz/qtL8/6rS/P+q0vz/qtL8/x+V + +f8ek/j/I5f4/yGV+P8flPj/HZL4/xuR+P8Zj/f/F433/xaM9/8Uivf/NJn4/2ex9/8JYtD/AFzOX/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQBVzA8AXtAxAFvNUQBdzXEAW86RAF7PtQFe + 0NkBXM73AFzO/0+k7/+DyPz/MqX6/zOl+v8zpfr/M6b6/zOl+v8ypfr/MaT6/yGW+f8CevX/AHn1/wB5 + 9f8AefX/AHn1/wB59f8Jgvb/IZX4/yKX+P8glfj/HpP4/x2S+P8bkPj/GY/3/xeN9/8Vi/f/E4r3/xSJ + 9/9lsvn/M4bj/QBdzs3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQBdzv1UpO7/fcX8/zCj+v8xpPr/MaT6/zGk+v8xpPr/MaP6/zCj + +v8vovr/LqH6/yyg+v8rnvn/KZ35/yic+f8mmvn/JZn5/yOX+P8hlvj/H5T4/x6T+P8ckfj/GpD4/xiO + 9/8Wjff/FYv3/xOJ9/8RiPb/Q6D4/2Co8/8CXc7/AF3ONf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQCA/wMAXM7/XKrx/3fC/P8vovr/L6L6/y+i + +v8vovr/L6L6/y+i+v8uofr/LaD6/yyf+v8rnvn/Kp35/yic+f8nm/n/JZn5/ySY+f8il/j/IJX4/zig + +f9fsvr/Wq/6/0Kj+P8ql/j/F4z3/xSK9/8Siff/EIf2/xuM9v9ttfr/JXfY+wBczqH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAVdUTAFzO/2Ov + 8/9wvvz/LaD6/y2g+v8uofr/LqH6/y2h+v8toPr/LKD6/yyf+f8rnvn/Kp35/yic+f8nm/n/Jpr5/ySY + +f8jl/j/IZb4/ySX+P98wPv/Xqnx/12p8v92uvj/er76/3O5+v9arfn/QaD5/ymU9/8Sh/b/Uqf5/1Gd + 7v8AXM/5AFnMFf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAF3RIQBczv9rtPX/abv7/yue+f8rn/n/LJ/5/yyf+f8sn/n/LqH5/161+v9+w/v/arv7/yye + +f8nm/n/Jpr5/ySZ+f8jl/j/IZb4/yCV+P9BpPn/f8D5/whh0P8AXM7/AV3P/xlw2fk1iub/UaDv/2my + 9/91ufr/cbf6/3G3+v9vtPn/EmrU+wBcz3X///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQBe0DEAXM7/crr3/2G2+/8pnfn/Kp35/yqd+f8qnfn/Qqj6/37E + +/+Fxfr/TJvq/4LD+v9ouPv/JZn5/ySY+f8jl/n/Ipb4/yCV+P8flPj/YrP6/2Go7v8AXc73AFjKHQBb + zVEAXM+PAF7PzwBdzv0AXM7/DmjV+SqB4v9Fluz/cLP2/0GQ5v8AXc/jAID/A////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXM9BAFzO/3i++f9as/r/J5v5/yic + +f8un/n/ZLj7/4zK/P9kq+//D2jS+wBczv8shOL9isj8/02r+v8jl/j/Ipb4/yCV+P8flPj/IZT4/4HC + +/85h+D9AFzOrf///wH///8B////Af///wEAXdELAF3NQwBbzn8AXc+/AFzO9wBczv8EX8//AFzO/wBd + z0v///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAF7PTwBc + zv9/w/v/Uq76/yaa+f9Fqfr/gcT8/3/A+P8yhOD9AF3P/QBdz48AXM9RAF3P/U6e7f+Gxvv/NJ/5/yCV + +P8flPj/HpP4/zuh+f+Ewvr/DWXS/QBczln///8B////Af///wH///8B////Af///wH///8B////AQBV + qgMAWs0zAFzPbwBczssAXM4v////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBbz18BXc/9hcX7/1Sv+v9qufv/isj7/1ei7f8JY9H9AV3P1wBbzzX///8B////AQBb + zoMCXs/9bLT1/3i/+/8kl/j/HZP4/xyS+P9csPr/aKzw/wBczvsAVcwP////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAXc5vBGHS+YnH+/+Jx/v/d7n1/yZ52vsAXc/5AF3PeQBA + vwX///8B////Af///wEAVaoDAFzPxRBq1ft9wPr/YbP6/xyR+P8ckPj/fL/6/z2N4/0AXc+7////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAFvOfw1q1fmHxfr/V5/p/wVf + 0P8BXc7DAFrPJf///wH///8B////Af///wH///8B////AQBYzhsBXs/tKYLh/YXE+/9Fpfn/M5z4/4PC + +v8TadP9AF3NZ////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQBc + zo0HYM//HHHX+wBdz/MAW85j////Af///wH///8B////Af///wH///8B////Af///wH///8BAF3NRwBb + zv9Km+z/gcL7/2m1+v9usfP/AFvO/wBgyhn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAXM25AFzO/wBdz6sAWdMX////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAXM2FAl7P/Wex9f+Dwvv/RpPm/wBdz8v///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFnMKQBdzUP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAFWqAwBdz8cQa9X7gsD6/xlu1PsAXM91////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAXtAbAF3P7x1x + 2P8AXM7/AFzNJf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQBbzkkAXM7/AFzO/////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAF3PjwBczT3///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + + 2, 2, 2, 2 + + + CenterParent + + + {0} {1} ist verfügbar! + + + UpdateForm + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file