From 20ae282ddbebf9dfab08c5e80125df89246d2fad Mon Sep 17 00:00:00 2001 From: Jim Norman Date: Tue, 28 Nov 2006 06:37:07 +0000 Subject: [PATCH] Checkpoint micasad code for portable app on windows. --- CASA/micasad/cache/SecretStore.cs | 24 + CASA/micasad/common/SessionManager.cs | 21 +- CASA/micasad/common/User.cs | 14 + CASA/micasad/common/WinUser.cs | 11 +- CASA/micasad/init/UserInfo.cs | 256 ++++ .../init/WinSecretStoreClientService.cs | 38 +- CASA/micasad/micasad.csproj | 45 +- .../ChangeMasterPasswordForm.Designer.cs | 187 +++ .../winforms/ChangeMasterPasswordForm.cs | 88 ++ .../winforms/ChangeMasterPasswordForm.resx | 120 ++ .../winforms/EditSecretForm.Designer.cs | 304 +++++ CASA/micasad/winforms/EditSecretForm.cs | 159 +++ CASA/micasad/winforms/EditSecretForm.resx | 546 +++++++++ .../winforms/MasterPasswordForm.Designer.cs | 194 +++ CASA/micasad/winforms/MasterPasswordForm.cs | 58 + CASA/micasad/winforms/MasterPasswordForm.resx | 120 ++ CASA/micasad/winforms/MiCasaForm.Designer.cs | 689 +++++++++++ CASA/micasad/winforms/MiCasaForm.cs | 566 +++++++++ CASA/micasad/winforms/MiCasaForm.resx | 1074 +++++++++++++++++ CASA/micasad/winforms/WinCommon.cs | 100 ++ 20 files changed, 4600 insertions(+), 14 deletions(-) create mode 100644 CASA/micasad/init/UserInfo.cs create mode 100644 CASA/micasad/winforms/ChangeMasterPasswordForm.Designer.cs create mode 100644 CASA/micasad/winforms/ChangeMasterPasswordForm.cs create mode 100644 CASA/micasad/winforms/ChangeMasterPasswordForm.resx create mode 100644 CASA/micasad/winforms/EditSecretForm.Designer.cs create mode 100644 CASA/micasad/winforms/EditSecretForm.cs create mode 100644 CASA/micasad/winforms/EditSecretForm.resx create mode 100644 CASA/micasad/winforms/MasterPasswordForm.Designer.cs create mode 100644 CASA/micasad/winforms/MasterPasswordForm.cs create mode 100644 CASA/micasad/winforms/MasterPasswordForm.resx create mode 100644 CASA/micasad/winforms/MiCasaForm.Designer.cs create mode 100644 CASA/micasad/winforms/MiCasaForm.cs create mode 100644 CASA/micasad/winforms/MiCasaForm.resx create mode 100644 CASA/micasad/winforms/WinCommon.cs diff --git a/CASA/micasad/cache/SecretStore.cs b/CASA/micasad/cache/SecretStore.cs index af9f1be6..283e583f 100644 --- a/CASA/micasad/cache/SecretStore.cs +++ b/CASA/micasad/cache/SecretStore.cs @@ -708,6 +708,30 @@ namespace sscs.cache { keyChainList.Remove(id); return true; + } + + internal KeyChain GetKeyChainDefault(bool bCreateIfNotFound) + { + KeyChain kc; + + try + { + kc = GetKeyChainDefault(); + } + catch (Exception e) + { + if (bCreateIfNotFound) + { + kc = new KeyChain("SSCS_SESSION_KEY_CHAIN_ID\0"); + AddKeyChain(kc); + } + else + { + throw e; + } + } + + return kc; } internal KeyChain GetKeyChainDefault() diff --git a/CASA/micasad/common/SessionManager.cs b/CASA/micasad/common/SessionManager.cs index 41d12b84..1bb20b4d 100644 --- a/CASA/micasad/common/SessionManager.cs +++ b/CASA/micasad/common/SessionManager.cs @@ -66,9 +66,15 @@ namespace sscs.common { return sessionManager; } - } + } + + + internal static SecretStore CreateUserSession(UserIdentifier userId) + { + return CreateUserSession(userId, null); + } - internal static SecretStore CreateUserSession(UserIdentifier userId) + internal static SecretStore CreateUserSession(UserIdentifier userId, string userHome) { CSSSLogger.ExecutionTrace(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); SecretStore ss; @@ -84,7 +90,16 @@ namespace sscs.common { // Would create either windows/unix user // depending on the platform. - User user = User.CreateUser(userId); + User user; + if (userHome != null) + { + user = User.CreateUser(userId, userHome); + } + else + { + user = User.CreateUser(userId); + } + mutex.WaitOne(); sessionTable.Add(userId,user); mutex.ReleaseMutex(); diff --git a/CASA/micasad/common/User.cs b/CASA/micasad/common/User.cs index d3bd87ad..e244cd63 100644 --- a/CASA/micasad/common/User.cs +++ b/CASA/micasad/common/User.cs @@ -55,6 +55,20 @@ namespace sscs.common return secretStore; } + internal static User CreateUser(UserIdentifier userId, string userHome) + { + User user = null; +#if LINUX + user = new UnixUser(userId); +#endif +#if W32 + user = new WinUser(userId, userHome); +#endif + return user; + + } + + internal static User CreateUser(UserIdentifier userId) { User user = null; diff --git a/CASA/micasad/common/WinUser.cs b/CASA/micasad/common/WinUser.cs index bea86cef..9808f6e2 100644 --- a/CASA/micasad/common/WinUser.cs +++ b/CASA/micasad/common/WinUser.cs @@ -39,6 +39,14 @@ namespace sscs.common { } + internal WinUser(UserIdentifier winUserId, string userHome) + { + userId = winUserId; + secretStore = new SecretStore(this); + m_sUserHome = userHome; + } + + internal WinUser(UserIdentifier winUserId) { userId = winUserId; @@ -115,8 +123,5 @@ namespace sscs.common } } } - - - } } diff --git a/CASA/micasad/init/UserInfo.cs b/CASA/micasad/init/UserInfo.cs new file mode 100644 index 00000000..cd1ec9ef --- /dev/null +++ b/CASA/micasad/init/UserInfo.cs @@ -0,0 +1,256 @@ +// Begin of code sample +using System; +using System.Text; +using System.Runtime.InteropServices; +using System.Security.Permissions; +using System.Security.Principal; +using System.Diagnostics; + +// Forward declarations +using LUID = System.Int64; +using HANDLE = System.IntPtr; + +namespace sscs.init +{ + class UserInfo + { + public const int TOKEN_QUERY = 0X00000008; + + const int ERROR_NO_MORE_ITEMS = 259; + + enum TOKEN_INFORMATION_CLASS + { + TokenUser = 1, + TokenGroups, + TokenPrivileges, + TokenOwner, + TokenPrimaryGroup, + TokenDefaultDacl, + TokenSource, + TokenType, + TokenImpersonationLevel, + TokenStatistics, + TokenRestrictedSids, + TokenSessionId + } + + [StructLayout(LayoutKind.Sequential)] + public struct _LUID + { + public int LowPart; + public int HighPart; + } //LUID, *PLUID; + + + [StructLayout(LayoutKind.Sequential)] + public struct TOKEN_STATISTICS + { + public _LUID TokenId; + public _LUID AuthenticationId; + public int ExpirationTime; + public int TokenType; // enum ini in 1 TOKEN_TYPE + public int ImpersonationLevel; //SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + public int DynamicCharged; ////DWORD + public int DynamicAvailable; //DWORD + public int GroupCount; //DWORD + public int PrivilegeCount; //DWORD + public _LUID ModifiedId; + }// TOKEN_STATISTICS, *PTOKEN_STATISTICS; + + [StructLayout(LayoutKind.Sequential)] + struct TOKEN_USER + { + public _SID_AND_ATTRIBUTES User; + } + + [StructLayout(LayoutKind.Sequential)] + public struct _SID_AND_ATTRIBUTES + { + public IntPtr Sid; + public int Attributes; + } + [DllImport("advapi32")] + static extern bool OpenProcessToken( + HANDLE ProcessHandle, // handle to process + int DesiredAccess, // desired access to process + ref IntPtr TokenHandle // handle to open access token + ); + + [DllImport("kernel32")] + static extern HANDLE GetCurrentProcess(); + + [DllImport("advapi32", CharSet = CharSet.Auto)] + static extern bool GetTokenInformation( + HANDLE hToken, + TOKEN_INFORMATION_CLASS tokenInfoClass, + IntPtr TokenInformation, + int tokeInfoLength, + ref int reqLength); + + [DllImport("kernel32")] + static extern bool CloseHandle(HANDLE handle); + + [DllImport("advapi32", CharSet = CharSet.Auto)] + static extern bool LookupAccountSid + ( + [In, MarshalAs(UnmanagedType.LPTStr)] string lpSystemName, // name of local or remote computer + IntPtr pSid, // security identifier + StringBuilder Account, // account name buffer + ref int cbName, // size of account name buffer + StringBuilder DomainName, // domain name + ref int cbDomainName, // size of domain name buffer + ref int peUse // SID type + // ref _SID_NAME_USE peUse // SID type + ); + + [DllImport("advapi32", CharSet = CharSet.Auto)] + static extern bool ConvertSidToStringSid( + IntPtr pSID, + [In, Out, MarshalAs(UnmanagedType.LPTStr)] ref string pStringSid); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern uint GetLastError(); + + + static void DumpUserInfo(HANDLE pToken) + { + int Access = TOKEN_QUERY; + StringBuilder sb = new StringBuilder(); + sb.AppendFormat("\nToken dump performed on {0}\n\n", DateTime.Now); + HANDLE procToken = IntPtr.Zero; + if (OpenProcessToken(pToken, Access, ref procToken)) + { + sb.Append("Process Token:\n"); + sb.Append(PerformDump(procToken)); + CloseHandle(procToken); + } + Console.WriteLine(sb.ToString()); + } + + static StringBuilder PerformDump(HANDLE token) + { + StringBuilder sb = new StringBuilder(); + TOKEN_USER tokUser; + const int bufLength = 256; + IntPtr tu = Marshal.AllocHGlobal(bufLength); + int cb = bufLength; + GetTokenInformation(token, TOKEN_INFORMATION_CLASS.TokenUser, tu, cb, ref cb); + tokUser = (TOKEN_USER)Marshal.PtrToStructure(tu, typeof(TOKEN_USER)); + sb.Append(DumpAccountSid(tokUser.User.Sid)); + + Marshal.FreeHGlobal(tu); + return sb; + } + + + static string GetSID(HANDLE token) + { + TOKEN_USER tokUser; + const int bufLength = 256; + IntPtr tu = Marshal.AllocHGlobal(bufLength); + int cb = bufLength; + if (GetTokenInformation(token, TOKEN_INFORMATION_CLASS.TokenUser, tu, cb, ref cb)) + { + tokUser = (TOKEN_USER)Marshal.PtrToStructure(tu, typeof(TOKEN_USER)); + Marshal.FreeHGlobal(tu); + + string SidString = ""; + ConvertSidToStringSid(tokUser.User.Sid, ref SidString); + if (SidString.Length > 0) + { + return SidString; + } + else + { + return DumpAccountSid(tokUser.User.Sid); + } + } + else + { + uint error = GetLastError(); + } + + Marshal.FreeHGlobal(tu); + return null; + + } + + + internal static void GetLUID(ref int lowPart, ref int highPart, ref string sSID) + { + // first open our process token + int Access = TOKEN_QUERY; + HANDLE procToken = IntPtr.Zero; + + Process proc = Process.GetCurrentProcess(); + if (OpenProcessToken(proc.Handle, Access, ref procToken)) + { + GetLUID(procToken, ref lowPart, ref highPart); + sSID = GetSID(procToken); + CloseHandle(procToken); + } + } + + + private static void GetLUID(HANDLE token, ref int lowPart, ref int highPart) + { + TOKEN_USER tokUser; + const int bufLength = 256; + IntPtr tu = Marshal.AllocHGlobal(bufLength); + int cb = bufLength; + TOKEN_STATISTICS stats; + if (GetTokenInformation(token, TOKEN_INFORMATION_CLASS.TokenStatistics, tu, cb, ref cb)) + { + stats = (TOKEN_STATISTICS)Marshal.PtrToStructure(tu, typeof(TOKEN_STATISTICS)); + // copy low and high part + lowPart = stats.AuthenticationId.LowPart; + highPart = stats.AuthenticationId.HighPart; + } + + Marshal.FreeHGlobal(tu); + + } + static string DumpAccountSid(IntPtr SID) + { + int cchAccount = 0; + int cchDomain = 0; + int snu = 0; + StringBuilder sb = new StringBuilder(); + + // Caller allocated buffer + StringBuilder Account = null; + StringBuilder Domain = null; + bool ret = LookupAccountSid(null, SID, Account, ref cchAccount, Domain, ref cchDomain, ref snu); + if (ret == true) + if (Marshal.GetLastWin32Error() == ERROR_NO_MORE_ITEMS) + return "Error"; + try + { + Account = new StringBuilder(cchAccount); + Domain = new StringBuilder(cchDomain); + ret = LookupAccountSid(null, SID, Account, ref cchAccount, Domain, ref cchDomain, ref snu); + if (ret) + { + sb.Append(Domain); + sb.Append(@"\\"); + sb.Append(Account); + } + else + Console.WriteLine("logon account (no name) "); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + finally + { + } + string SidString = null; + ConvertSidToStringSid(SID, ref SidString); + sb.Append("\nSID: "); + sb.Append(SidString); + return SidString; + } + } +} +// End of code sample \ No newline at end of file diff --git a/CASA/micasad/init/WinSecretStoreClientService.cs b/CASA/micasad/init/WinSecretStoreClientService.cs index 7a1fde9b..4d58c184 100644 --- a/CASA/micasad/init/WinSecretStoreClientService.cs +++ b/CASA/micasad/init/WinSecretStoreClientService.cs @@ -32,6 +32,7 @@ using System.Configuration.Install ; using sscs.communication; using sscs.constants; using sscs.common; +using sscs.winforms; namespace sscs.init { @@ -110,9 +111,15 @@ namespace sscs.init return; } - if (opt != null && opt.ToLower() == "/standalone") + foreach (string arg in args) + { + System.Diagnostics.Trace.WriteLine("arg: " + arg); + } + + if (opt != null + && (opt.ToLower() == "/standalone" || opt.ToLower() == "/s")) { - MainInternal(args); + MainInternal(args); } else { @@ -213,7 +220,15 @@ namespace sscs.init CSSSLogger.DbgLog("Checking service: " + x.DisplayName); if (x.Status==System.ServiceProcess.ServiceControllerStatus.Stopped) { - x.Start(); + try + { + x.Start(); + } + catch (Exception e) + { + System.Diagnostics.Trace.WriteLine(e.ToString()); + System.Diagnostics.Trace.WriteLine(e.StackTrace.ToString()); + } } } } @@ -276,11 +291,20 @@ namespace sscs.init CSSSLogger.DbgLog("Client Side SecretStore Service has started."); - server = CommunicationFactory.CreateCommunicationEndPoint(); + if (true) + { + System.Windows.Forms.Application.Run(new MiCasaForm(args)); + System.Windows.Forms.Application.Exit(); + } + else + { + server = CommunicationFactory.CreateCommunicationEndPoint(); + + listeningThread = new Thread(new ThreadStart(StartServer)); + listeningThread.Start(); + listeningThread.Join(); + } - listeningThread = new Thread(new ThreadStart(StartServer)); - listeningThread.Start(); - listeningThread.Join(); } catch(Exception e) { diff --git a/CASA/micasad/micasad.csproj b/CASA/micasad/micasad.csproj index 6a52d0a8..acdcc823 100644 --- a/CASA/micasad/micasad.csproj +++ b/CASA/micasad/micasad.csproj @@ -17,7 +17,7 @@ Grid IE50 false - Exe + WinExe sscs OnBuildSuccess sscs.init.WinSecretStoreClientService @@ -208,6 +208,7 @@ Component + Component @@ -286,14 +287,56 @@ Code + + Form + + + ChangeMasterPasswordForm.cs + + + Form + + + EditSecretForm.cs + + + Form + + + MasterPasswordForm.cs + + + Form + + + MiCasaForm.cs + + ProjectInstaller.cs WinSecretStoreClientService.cs + + ChangeMasterPasswordForm.cs + Designer + + + EditSecretForm.cs + Designer + + + MasterPasswordForm.cs + Designer + + + MiCasaForm.cs + Designer + + diff --git a/CASA/micasad/winforms/ChangeMasterPasswordForm.Designer.cs b/CASA/micasad/winforms/ChangeMasterPasswordForm.Designer.cs new file mode 100644 index 00000000..d44ba655 --- /dev/null +++ b/CASA/micasad/winforms/ChangeMasterPasswordForm.Designer.cs @@ -0,0 +1,187 @@ +namespace sscs.winforms +{ + partial class ChangeMasterPasswordForm + { + /// + /// 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() + { + this.textBoxMP1 = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.labelError = new System.Windows.Forms.Label(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.textBoxDescription = new System.Windows.Forms.TextBox(); + this.buttonOk = new System.Windows.Forms.Button(); + this.textBoxCurMP = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.textBoxMP2 = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // textBoxMP1 + // + this.textBoxMP1.Location = new System.Drawing.Point(115, 54); + this.textBoxMP1.Name = "textBoxMP1"; + this.textBoxMP1.Size = new System.Drawing.Size(161, 20); + this.textBoxMP1.TabIndex = 3; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(28, 58); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(81, 13); + this.label2.TabIndex = 2; + this.label2.Text = "New Password:"; + // + // labelError + // + this.labelError.AutoSize = true; + this.labelError.ForeColor = System.Drawing.Color.Red; + this.labelError.Location = new System.Drawing.Point(56, 62); + this.labelError.Name = "labelError"; + this.labelError.Size = new System.Drawing.Size(0, 13); + this.labelError.TabIndex = 13; + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.Location = new System.Drawing.Point(205, 201); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 12; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // textBoxDescription + // + this.textBoxDescription.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBoxDescription.Location = new System.Drawing.Point(123, 10); + this.textBoxDescription.Multiline = true; + this.textBoxDescription.Name = "textBoxDescription"; + this.textBoxDescription.ReadOnly = true; + this.textBoxDescription.Size = new System.Drawing.Size(167, 33); + this.textBoxDescription.TabIndex = 14; + this.textBoxDescription.Text = "You can change your Master Password using this form"; + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.Location = new System.Drawing.Point(119, 201); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 23); + this.buttonOk.TabIndex = 11; + this.buttonOk.Text = "Ok"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // textBoxCurMP + // + this.textBoxCurMP.Location = new System.Drawing.Point(115, 24); + this.textBoxCurMP.Name = "textBoxCurMP"; + this.textBoxCurMP.PasswordChar = '*'; + this.textBoxCurMP.Size = new System.Drawing.Size(161, 20); + this.textBoxCurMP.TabIndex = 1; + // + // groupBox1 + // + this.groupBox1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBox1.Controls.Add(this.textBoxMP2); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.textBoxMP1); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.textBoxCurMP); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(4, 78); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(282, 112); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + // + // textBoxMP2 + // + this.textBoxMP2.Location = new System.Drawing.Point(115, 83); + this.textBoxMP2.Name = "textBoxMP2"; + this.textBoxMP2.Size = new System.Drawing.Size(161, 20); + this.textBoxMP2.TabIndex = 5; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(6, 87); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(103, 13); + this.label3.TabIndex = 4; + this.label3.Text = "Re-enter Password:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(18, 27); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(93, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Current Password:"; + // + // ChangeMasterPasswordForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(292, 234); + this.Controls.Add(this.labelError); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.textBoxDescription); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.groupBox1); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChangeMasterPasswordForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.Text = "Change Master Password"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBoxMP1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label labelError; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.TextBox textBoxDescription; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.TextBox textBoxCurMP; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox textBoxMP2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/CASA/micasad/winforms/ChangeMasterPasswordForm.cs b/CASA/micasad/winforms/ChangeMasterPasswordForm.cs new file mode 100644 index 00000000..7ff2978c --- /dev/null +++ b/CASA/micasad/winforms/ChangeMasterPasswordForm.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using sscs.cache; + +namespace sscs.winforms +{ + public partial class ChangeMasterPasswordForm : Form + { + private SecretStore m_ss; + + public ChangeMasterPasswordForm() + { + InitializeComponent(); + } + + internal void SetSecretStore(SecretStore ss) + { + m_ss = ss; + } + + private void buttonOk_Click(object sender, EventArgs e) + { + // check current + if (textBoxCurMP == null) + { + DisplayError("Enter your current Master Password"); + return; + } + + if (textBoxCurMP.Text.Length < 8) + { + DisplayError("Master Password must be at least 8 characters"); + return; + } + + if (textBoxMP1.Text == null) + { + DisplayError("Please enter and new Master Password"); + return; + } + + if (textBoxMP1.Text.Length < 8) + { + DisplayError("New Master Password must be at least 8 characters"); + return; + } + + // verify match + if (!textBoxMP1.Text.Equals(textBoxMP2.Text)) + { + DisplayError("New Master Passwords do not match"); + return; + } + + if (!m_ss.SetMasterPassword(textBoxCurMP.Text)) + { + DisplayError("Current Master Password is not correct"); + return; + } + + + // success + m_ss.ChangeMasterPassword(textBoxCurMP.Text, textBoxMP1.Text); + CloseWindow(); + + } + + private void CloseWindow() + { + this.Dispose(); + } + + private void DisplayError(string sMessage) + { + labelError.Text = sMessage; + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + CloseWindow(); + } + } +} \ No newline at end of file diff --git a/CASA/micasad/winforms/ChangeMasterPasswordForm.resx b/CASA/micasad/winforms/ChangeMasterPasswordForm.resx new file mode 100644 index 00000000..ff31a6db --- /dev/null +++ b/CASA/micasad/winforms/ChangeMasterPasswordForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CASA/micasad/winforms/EditSecretForm.Designer.cs b/CASA/micasad/winforms/EditSecretForm.Designer.cs new file mode 100644 index 00000000..4befc341 --- /dev/null +++ b/CASA/micasad/winforms/EditSecretForm.Designer.cs @@ -0,0 +1,304 @@ +namespace sscs.winforms +{ + partial class EditSecretForm + { + /// + /// 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(EditSecretForm)); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.tbSecretID = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.listViewKeyValues = new System.Windows.Forms.ListView(); + this.Key = new System.Windows.Forms.ColumnHeader(); + this.Value = new System.Windows.Forms.ColumnHeader(); + this.Linked = new System.Windows.Forms.ColumnHeader(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.label6 = new System.Windows.Forms.Label(); + this.tbNewValue = new System.Windows.Forms.TextBox(); + this.tbNewKey = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(9, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(216, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Manage Secrets and Key-Value pairs"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(85, 53); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(0, 13); + this.label2.TabIndex = 1; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(9, 93); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(65, 13); + this.label3.TabIndex = 2; + this.label3.Text = "Secret ID:"; + // + // tbSecretID + // + this.tbSecretID.Enabled = false; + this.tbSecretID.Location = new System.Drawing.Point(13, 110); + this.tbSecretID.Name = "tbSecretID"; + this.tbSecretID.Size = new System.Drawing.Size(364, 20); + this.tbSecretID.TabIndex = 3; + // + // groupBox1 + // + this.groupBox1.AutoSize = true; + this.groupBox1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBox1.BackColor = System.Drawing.SystemColors.ControlDark; + this.groupBox1.Controls.Add(this.listViewKeyValues); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.tbNewValue); + this.groupBox1.Controls.Add(this.tbNewKey); + this.groupBox1.Controls.Add(this.label5); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox1.Location = new System.Drawing.Point(15, 143); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(361, 223); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + // + // listViewKeyValues + // + this.listViewKeyValues.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listViewKeyValues.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.Key, + this.Value, + this.Linked}); + this.listViewKeyValues.FullRowSelect = true; + this.listViewKeyValues.GridLines = true; + this.listViewKeyValues.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listViewKeyValues.LabelEdit = true; + this.listViewKeyValues.Location = new System.Drawing.Point(3, 93); + this.listViewKeyValues.Name = "listViewKeyValues"; + this.listViewKeyValues.Size = new System.Drawing.Size(312, 111); + this.listViewKeyValues.Sorting = System.Windows.Forms.SortOrder.Ascending; + this.listViewKeyValues.TabIndex = 12; + this.listViewKeyValues.UseCompatibleStateImageBehavior = false; + this.listViewKeyValues.View = System.Windows.Forms.View.Details; + this.listViewKeyValues.MouseClick += new System.Windows.Forms.MouseEventHandler(this.listViewKeyValues_MouseClick); + // + // Key + // + this.Key.Text = "Key"; + // + // Value + // + this.Value.Text = "Value"; + // + // Linked + // + this.Linked.Text = "Linked"; + // + // button2 + // + this.button2.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button2.Location = new System.Drawing.Point(321, 92); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(34, 31); + this.button2.TabIndex = 11; + this.button2.Text = "-"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button1 + // + this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button1.Location = new System.Drawing.Point(321, 31); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(34, 31); + this.button1.TabIndex = 10; + this.button1.Text = "+"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label6.Location = new System.Drawing.Point(6, 71); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(99, 13); + this.label6.TabIndex = 8; + this.label6.Text = "Key-Value pairs:"; + // + // tbNewValue + // + this.tbNewValue.Location = new System.Drawing.Point(163, 33); + this.tbNewValue.Name = "tbNewValue"; + this.tbNewValue.Size = new System.Drawing.Size(152, 20); + this.tbNewValue.TabIndex = 7; + // + // tbNewKey + // + this.tbNewKey.Location = new System.Drawing.Point(9, 33); + this.tbNewKey.Name = "tbNewKey"; + this.tbNewKey.Size = new System.Drawing.Size(148, 20); + this.tbNewKey.TabIndex = 5; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.Location = new System.Drawing.Point(161, 16); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(43, 13); + this.label5.TabIndex = 6; + this.label5.Text = "Value:"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(6, 16); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(32, 13); + this.label4.TabIndex = 5; + this.label4.Text = "Key:"; + // + // checkBox1 + // + this.checkBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(21, 385); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(145, 17); + this.checkBox1.TabIndex = 5; + this.checkBox1.Text = "Show Values in clear text"; + this.checkBox1.UseVisualStyleBackColor = true; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // button3 + // + this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.button3.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button3.Location = new System.Drawing.Point(209, 400); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(87, 31); + this.button3.TabIndex = 12; + this.button3.Text = "Cancel"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button4 + // + this.button4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.button4.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button4.Location = new System.Drawing.Point(302, 400); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(87, 31); + this.button4.TabIndex = 13; + this.button4.Text = "Ok"; + this.button4.UseVisualStyleBackColor = true; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label7.Location = new System.Drawing.Point(10, 40); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(442, 13); + this.label7.TabIndex = 14; + this.label7.Text = "To change a value, click the key you want to change and enter a new value"; + // + // EditSecretForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(409, 441); + this.Controls.Add(this.label7); + this.Controls.Add(this.button4); + this.Controls.Add(this.button3); + this.Controls.Add(this.checkBox1); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.tbSecretID); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditSecretForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "EditSecretForm"; + this.TopMost = true; + this.Load += new System.EventHandler(this.EditSecretForm_Load); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox tbSecretID; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox tbNewValue; + private System.Windows.Forms.TextBox tbNewKey; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.ListView listViewKeyValues; + private System.Windows.Forms.ColumnHeader Key; + private System.Windows.Forms.ColumnHeader Linked; + private System.Windows.Forms.ColumnHeader Value; + private System.Windows.Forms.Label label7; + } +} \ No newline at end of file diff --git a/CASA/micasad/winforms/EditSecretForm.cs b/CASA/micasad/winforms/EditSecretForm.cs new file mode 100644 index 00000000..4c8da820 --- /dev/null +++ b/CASA/micasad/winforms/EditSecretForm.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +using sscs.cache; + +namespace sscs.winforms +{ + public partial class EditSecretForm : Form + { + internal SecretStore m_ss = null; + internal string m_keychainId = null; + internal Secret curSecret = null; + + public EditSecretForm() + { + InitializeComponent(); + } + + internal void SetID(SecretStore ss, string sKeyChain, string sSecretID) + { + m_ss = ss; + tbSecretID.Text = sSecretID; + if (sKeyChain != null) + { + m_keychainId = sKeyChain; + } + ShowKeyValues(sSecretID); + } + + private void ShowKeyValues(string sSecretID) + { + listViewKeyValues.Items.Clear(); + + // add current keyvalues + KeyChain kc; + + if (m_keychainId == null) + { + kc = m_ss.GetKeyChainDefault(true); + } + else + { + kc = m_ss.GetKeyChain(m_keychainId); + } + + + + Secret secret = kc.GetSecret(sSecretID); + curSecret = secret; + ArrayList al = secret.GetKeyList(); + for (int i = 0; i < al.Count; i++) + { + string[] stuff = new string[3]; + string sKey = (string)al[i]; + + stuff[0] = sKey; + + KeyValue kv = secret.GetKeyValue(sKey); + if (checkBox1.Checked) + { + stuff[1] = kv.GetValue(); + } + else + { + stuff[1] = "************"; + } + + Hashtable ht = secret.GetLinkedKeys(sKey); + if (ht != null && ht.Count > 0) + { + stuff[2] = "Yes"; + } + else + { + stuff[2] = "No"; + } + + ListViewItem item = new ListViewItem(stuff); + listViewKeyValues.Items.Add(item); + } + } + + + private void EditSecretForm_Load(object sender, EventArgs e) + { + + } + + private void button3_Click(object sender, EventArgs e) + { + this.Dispose(); + } + + private void button1_Click(object sender, EventArgs e) + { + + if (tbNewKey.Text != null && tbNewKey.Text.Length > 0 + && tbNewValue.Text != null && tbNewValue.Text.Length > 0) + { + string[] newKeyValue = new string[3]; + newKeyValue[0] = tbNewKey.Text; + newKeyValue[1] = tbNewValue.Text; + newKeyValue[2] = "No"; + + ListViewItem item = new ListViewItem(newKeyValue); + listViewKeyValues.Items.Add(item); + + tbNewKey.Text = tbNewValue.Text = ""; + } + } + + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + if (checkBox1.Checked) + { + if (WinCommon.VerifyMasterPassword(m_ss, "Enter your Master Password to view values")) + { + ShowKeyValues(tbSecretID.Text + '\0'); + } + else + { + checkBox1.Checked = false; + } + } + else + { + ShowKeyValues(tbSecretID.Text + '\0'); + } + } + + private void listViewKeyValues_MouseClick(object sender, MouseEventArgs e) + { + ListView.SelectedListViewItemCollection coll = listViewKeyValues.SelectedItems; + ListViewItem item = coll[0]; + + tbNewKey.Text = item.Text; + KeyValue kv = curSecret.GetKeyValue(item.Text); + if (checkBox1.Checked) + { + tbNewValue.Text = kv.GetValue(); + } + } + + private void button2_Click(object sender, EventArgs e) + { + ListView.SelectedListViewItemCollection coll = listViewKeyValues.SelectedItems; + if (coll.Count > 0) + { + ListViewItem item = coll[0]; + listViewKeyValues.Items.Remove(item); + } + } + } +} \ No newline at end of file diff --git a/CASA/micasad/winforms/EditSecretForm.resx b/CASA/micasad/winforms/EditSecretForm.resx new file mode 100644 index 00000000..07d31a2a --- /dev/null +++ b/CASA/micasad/winforms/EditSecretForm.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAQAAAAAAAAAAAAAACAAAAAAIAAAICAAAAAAIAAgACAAACAgACAgIAAwMDAAP8AAAAA/wAA//8AAAAA + /wD/AP8AAP//AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAId3eAAAAAAAAAAAAAAAAAAAAAAAAAAA+HeId48AAAAAAAAAAAAAAAAAAAAAAA + D4eO6IiHeAAAAAAAAAAAAAAAAHd3d3d3B36IiIiIhwAAAAAAAAAAAAAAAH////+HfoiIiIiIiId///8A + AAAAAAAAAH////d+6IiIiIiIiHd3j/8AAAAAAAAAAH//+HjuiIiIiIiIh3B3d48AAAAAAAAAAH/4d+7o + iIiIiIiIh3B3fncAAAAAAAAAAHh37uiIiIiIj4iIh3AHeOh4AAAAAAAACHfu7oiIiIiP//+IiHcHd4jn + gAAAAAAAh47uiIiIiIj/////iHcHd4iIeAAAAAAAiO7oiIiIiP///////4dwd4iIdwAAAAAIfuiIiIiI + j/////////iHeIiIdwAAAAh3iIiIiIiI/////////4iIiIiIdwAAAId4iIiIiIj/////////iIiIjoiI + dwAA+HiIiIiIiI//////////iIiHiI7odwAAh4iIeHiIj/////////+IiId3fo53jwAAeIh48HeP//// + /////4iIiOiIjocPAAAAd3dwAHh4/////////4iIh4joh4hwAAAAAHeAAH/4eP/////4iIeIh4jneP9w + AAAAAHd/AH//iI////+IiHd4iOd4//9wAAAAcHcHgH///4eP//iIiIh36Hj///9wAAAAh3gAB3////+H + j4iIiIiIeP////9wAAAACAdwAA////hwB4iIiI53j/////9wAAAAAId4cA///4AAAAiIjneP//////9w + AAAAAA+Hd3///4AAd3d3d4////////9wAAAAAAAPh3////h3eIj4j/////////9wAAAAAAAAAH////+I + j/////////////9wAAAAAAAAAH//////+IiIiIiIiIiIj/9wAAAAAAAAAI/4iIiP////////////j/9w + AAAAAAAAAI////////////////////9wAAAAAAAAAI////////////////////9wAAAAAAAAAI////// + +IiIiIiIiIiIj/9wAAAAAAAAAI/4iIiP////////////j/9wAAAAAAAAAI////////////////////9w + AAAAAAAAAI////////////////////9wAAAAAAAAAIMzMzMzMzMzMzMzMzMzMzNwAAAAAAAAAIiIiIiI + iIiId3d3dzMzMzNwAAAAAAAAAIiIiIiIiIiId3d3dzMzMzNwAAAAAAAAAIiIiIiIiIiId3d3dzMzMzNw + AAAAAAAAAIiIiIiIh3d3d3d3d3d3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////9fjf//////////////gf////////4Af/////// + +AA//////8AAAAAf////wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAD//A/4AAAAAH + /8D/AAAAAAP/gP8AAAAAA/8A/gAAAAAD/wD4AAAAAAP+APAAAAAAA/gAwAAAAAAD8ADAAAAAAAPAAMBA + AAAAD8AAwcAAAAAfwEDBwAAAAB/BwMDAAAAAH8HAwEAAAAAfwMDAAAAAAB/AQOAAAAAAH8AA8AAAAAAf + 4AD4AAAAAB/wAP4AAAAAH/gA/8AAAAAf/gD/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/A + AAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf + /8D/wAAAAB//wP/////////A//////////////////////////////////////////8oAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAIAAAAAAgAAAgIAAAAAAgACAAIAAAICAAICA + gADAwMAA/wAAAAD/AAD//wAAAAD/AP8A/wAA//8A////AAAAAAAAAAAPh4ePAAAAAAAAAAAAAAAPh47u + h48AAAAAAAABEREREYiOiO5xERERAAAAB///h3iIjoiI6HeP9wAAAAf/+HiIiIiIiIcXeIcAAAAH+HiI + iIiPiIiHB3hxAAAA8XiIiIiIj/+Ihxd454AAAIeIiIiIiP//+OgReO54AAh4iIiIiP/////4h3iOhw+H + iIiIiI///////46IiIf3eIiIiI///////4iIjo7neIh4iIj///////iIiIiOeIiIgY////////iIiIiO + h4B4fweI///////4iIiIh4cAF3AH+Ij///+IiIiOh4/3ABcYB//4iP/4iIiOh4//9wB3EHf///h4iOiI + h4j///cAgXEA//+HAXju6Hj////4AA93d///cRF4iHj/////+AAACIf//4d4j4j///////gAAAAI//// + j//////////4AAAACP////iIiIiIiIiP+AAAAAj4iIj/////////j/gAAAAI///////////////4AAAA + CP////iIiIiIiIiP+AAAAAj4iIj/////////j/gAAAAI///////////////4AAAACDMzMzMzMzMzMzMz + OAAAAAiIiIiIiId3d3czMzgAAAAIiIiIiIiHd3d3MzM4AAAACIiIiIiId3d3d3d3eAAAAAAAAAAAAAAA + AAAAAAAA//4D///4AP/4AAAD+AAAA/gAAAP4AAAD8AAAAfAAAADgAAAAgAAAAAAAAAAAAAAAAAAAAQgA + AAMYAAADCAAAAwAAAAMAAAADgAAAA+AAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gA + AAP4AAAD+AAAA/////8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAIAA + AAAAgAAAgIAAAAAAgACAAIAAAICAAICAgADAwMAA/wAAAAD/AAD//wAAAAD/AP8A/wAA//8A////AAAA + AAiIiAAAAHd3eI7nd3AAiIj4jud3cAB4iIj/iAeICI+I////iOeHj/////ju53h4///4iOh/d4+I/4jo + iHB3f/h4iIj/cPh/93iI//9wAI/4/////3AAj///////cACP//////9wAIiIh3dzM3AAiIiHd3MzcACI + iIiId3dw/g///8AB/g/AAcABwADAAYAAwAAAAIAAAAAAAAABAAAAAQABAAEAAcABAAHAAcABwAHAAcAB + wAHAAcABwAHAASgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAACAgIAqp5WAPLK + pgACXlYAVp7WAFbe/gD+vn4AAl5+AP7e1gACPioAgoKCAFb+/gCqfioAVr7WAFZ+fgACPlYAAh4qAMLe + wgCq3tYApqKiAPL6/gBWnqoAqr7WAKqefgBWXlYAVl5+AFY+KgCq/v4Aqn5WAFa+/gBWfqoAVj5WAFYe + KgD+3qoAqt7+AKq+qgD+/v4Aqp6qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJhYZDhkZ + CCYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYICg4EHR0EDhMUJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJBMODQUdDR0dHRUZJSYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJhgYGBgYGBgYGBgaHxUFIiINDQ0NHR0NHgkgGhoaGhoaGiYmJiYmJiYmJiYmJiYmJhgkJCQkJCQk + EQ4VBSIiIiIdDQ0NDQ0dHQ0OCggkJCQkGiYmJiYmJiYmJiYmJiYmJhgkJCQkJAgKDgUFIiIiIiIiDQ0N + DQ0NDRUOHhkTFCQkGiYmJiYmJiYmJiYmJiYmJhgkJCQUEw4NBQUiIiIiIiIiHQ0NDQ0NBBkQDx4EGSUU + GiYmJiYmJiYmJiYmJiYmJhgkFCMOBAUFBSIiIiIiIiIbIg0NDQ0NBBkQDwMVHR4OICYmJiYmJiYmJiYm + JiYmJhgWChUFBQUiIiIiIiIiIiIbFCIiDQ0NBB4JEBkHDR0NByMmJiYmJiYmJiYmJiYmERoeBQsFBSIi + IiIiIiIiGxsUFBQUIh0NDR4PEBkDFR0dHQ4RJiYmJiYmJiYmJiYIGQ0FBQUiIiIiIiIiIiIbFBQUFBQk + JBQiHQQZJg8DFR0NHQ0ZESYmJiYmJiYmJiYTDQsFBSIiIiIiIiIiIhsUFBQUFCQkFBQUFCIEBw8HBB0N + DR0eCiYmJiYmJiYmJiUYBQUiIiIiIiIiIiIbFBQUFBQkJCQUFBQUFBQiHQQEDQ0NDR0EGSYmJiYmJiYR + GB8KIiIiIiIiIiIiGxsUFBQUFCQkFBQUFBQUGxsbIiIdDQ0NDR0EGSYmJiYmJiMfChMjEiIiIiIiIiIb + FBQUFBQkJCQUFBQUFBQbGxsiDQ0iBQ0NDR0EGSYmJiYkIxgTIxYlEyIbIiIiIhsUFBQUFCQkFBQUFBQU + FBsbIg0iDQQdIiIFHQ0OCiYmJiYjGCMjFhMKCg4bGyIiGxQUFBQUJCQUFBQUFBQUGyINDQ0EBAQEHSIF + FQ4jFCYmJiYKEyMTCgokJh8KGxQUFBQUFCQkJBQUFBQUFCIiDQ0NDR0iDQ0NBQ0OEBQmJiYmJiYYCgoK + GCYmJgojCiMUFBQUJCQUFBQUFBQUFCINDSIiBA0NBRsNDgoIGiYmJiYmJiYaEAofEyYmJgokCBMKESQk + JBQUFBQUFBsWIiIEDSINBA0dBRUKFiQkGiYmJiYmJiYaJgoaHxQmJgokJCQIEwoUJBQUFBQUIg0NDQQE + BA0iIgUVDiMUJCQkGiYmJiYmJiYYEAofEB8RJgokJCQkJBEKExQUFBsiDRYiIiINBAQFDQ4lFCQkJCQk + GiYmJiYmJiYRGB8KEBAQChgkJCQkJCQUEQojGxsNDSIiIh0iIg0OExQkJCQkJCQkGiYmJiYmJiYmCBoZ + ChAQEBAkJCQkJCQRChoQGRYiDQ0NDQ0FFQoIJCQkJCQkJCQkHyYmJiYmJiYmJhEfGAofEBAkJCQkJBEQ + EBAQJhojIiIiBRUOFiQkJCQkJCQkJCQkHyYmJiYmJiYmJiYUChgKChgkJCQkJAgaIBofGAoKChUVDhMk + JCQkJCQkJCQkJCQkHyYmJiYmJiYmJiYmJggTChgkJCQkJBQTGAoKCiUIJBEjFCQkJCQkJCQkJCQkJCQk + HyYmJiYmJiYmJiYmJiYmJgokJCQkJCQUIxMRJCQkJCQkJCQkJCQkJCQkJCQkJCQkHyYmJiYmJiYmJiYm + JiYmJgokJCQkJCQkJCQkFhYWFhYWFhYWFhYWFhYWFhYWJCQkHyYmJiYmJiYmJiYmJiYmJgokJBMWFhMT + FiQkFCQkJCQkJCQkJCQkJCQkJCQWJCQkHyYmJiYmJiYmJiYmJiYmJgokJCQkJCQkJCQkFBQUFBQUFBQU + FBQUFBQUFBQUJCQkGCYmJiYmJiYmJiYmJiYmJgokJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk + GCYmJiYmJiYmJiYmJiYmJgokJCQkJCQkJCQkFhYWFhYWFhYWFhYWFhYWFhYWJCQkGCYmJiYmJiYmJiYm + JiYmJhMkJBMWExMWEyQkFCQkJCQkJCQkJCQkJCQkJCQWJCQkGCYmJiYmJiYmJiYmJiYmJhMkJCQkJCQk + JCQkFBQUFBQUFBQUFBQUFBQUFBQUJCQkGCYmJiYmJiYmJiYmJiYmJhMkJCQkJCQkJCQkJCQkJCQkJCQk + JCQkJCQkJCQkJCQkGCYmJiYmJiYmJiYmJiYmJhMMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM + GCYmJiYmJiYmJiYmJiYmJhMhISEhAgICAgICBgYGBgYXFwEBAQEBHBwcHAwMDAwMGCYmJiYmJiYmJiYm + JiYmJhMhISEhAgICAgIGBgYGBhcXFwEBAQEcHBwcHAwMDAwMGCYmJiYmJiYmJiYmJiYmJhMhISEhAgIC + AgIGBgYGBgYXFwEBAQEBHBwcHAwMDAwMGCYmJiYmJiYmJiYmJiYmJhMTExMTExMTCgoKCgoKCgoKCgoK + GBgYGBgYGBgYGBgYGCYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYm////////X43//////////////4H////////+AH////////gAP//////A + AAAAH////8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAA//wP+AAAAAB//A/wAAAAAD + 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 + HhETIg8eDw8PDyEWDAQMBQwcDB0kDx4KJSUJGRATJQoeHh4RExYPDw0hDCEWDAQcIRUTCB4eHgolJRgK + IyUYGB4eHh4eIgoSDQwcISEhIRUKCB4eHh4eCiUlERgKIxAQHh4eHhYYEBAKEhwcHBUKER4eHh4eHh4K + JSUlCAoKGRgeHh4eGBAJCRgKFQwKIg8eHh4eHh4eHgolJSUlJREKGB4eHh4WGAoKJAgIFg8eHh4eHh4e + Hh4eCiUlJSUlJSUKDx4eHh4PCB4eHh4eHh4eHh4eHh4eHh4KJSUlJSUlJQoeHh4eHh4eERERERERERER + EREREREeHgolJSUlJSUlEx4RIhEiER4ICAgICAgICAgICAgIER4eEyUlJSUlJSUTHh4eHh4eHh4eHh4e + Hh4eHh4eHh4eHh4TJSUlJSUlJRMeHh4eHh4eEREREREREREREREREREeHhMlJSUlJSUlEx4RFiIRFh4I + CAgICAgICAgICAgIER4eEyUlJSUlJSUTHh4eDx4eHh4eHh4eHh4eHh4eHh4PHh4TJSUlJSUlJRMLCwsL + CwsLCwsLCwsLCwsLCwsLCwsLCxMlJSUlJSUlEyAgICAgIAICBgYGBhcBAQEBGxsLCwsLEyUlJSUlJSUT + ICAgICAgAgIGBgYGFwEBAQEbGwsLCwsTJSUlJSUlJRMTExMTEwoKCgoKCgoKCgoKChgYGBgYGBMlJSUl + JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl//4D///4AP/4AAAD+AAAA/gAAAP4AAAD8AAAAfAA + AADgAAAAgAAAAAAAAAAAAAAAAAAAAQgAAAMYAAADCAAAAwAAAAMAAAADgAAAA+AAAAP4AAAD+AAAA/gA + AAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/////8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAAAAAh4qAKqeVgBWntYAql4qAFbe/gBWnqoAVn5+AMLewgCmoqIAVj4qAFa+ + 1gCqfioA8vr+AKq+qgCq/v4AVn6qAAI+VgCqvtYA/r5+AFZeVgCq3v4AgoKCAP7e1gCqnqoAVr7+AKp+ + VgD+/v4A8sqmAFY+VgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0dHR0dHR0NBQoIFh0dHR0dHRUVFRMGFAQYGA8TExMdHR0IFggK + DhQUGBgPEAUcHR0dBgoUFBQUDAwUAgAFChcdFwoOFBQODAwaDA4CAhgFCBwRDg4MDBoMDA4UGAQEBRwI + FRcMGhoMDBQKCgQCEwwcFQgaEREMDhQKGAoIFhMdFRwJDAwIExEECgUHGhoTHQwIExoaFRMICA0aGhoa + Ex0dHQgMFhYWFhYWFhYWGhMdHR0IGhoaGhoaGhoaGhoTHR0dCBoWFgwMDAwMDAwaEx0dHQgbGxISEgEB + GQsLAxMdHR0IGxsSEhIBARkLCwMTHR0dCAgICAgICAgVFRUVFR3+D1ybwAH+D8ABwAHAAMABgADAAAAA + gAAAAAAAAAEAAAABAAEAAQABwAEAAcABwAHAAcABwAHAAcABwAHAAcABKAAAADAAAABgAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Eyw2ui9xi/krZXzyDB0jogAAACUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQ0YG347cIDZT6/U/1DD8v9Rwu7/Qp7C/yJR + Zc0HEhZsAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIECgtlMFtozWa60P984/7/WMn2/026 + 5/9Qvur/U8f1/1HA7P87jq/5Gj9NvwABAVIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABYV1L/WFdS/1dWUf9XVlH/VlVQ/1VUT/9UU07/U1JN/1JRS/9QUEr/OTk1/yxDSf9Yo7n/e+L1/4ns + //+C3/7/VL3n/0q45P9OuuX/Trrl/1C/6/9Tw/H/Trnj/zd8l/8gMDX/Ly4p/zs5M/86ODL/OTcx/zg2 + Mf84NTD/NzUv/zc1L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABYV1L//////////////////////////////////v7+/9PT0/9lcnb/VJir/3Xb + 8/+C6P//huT//43j//+Q4v3/YMXs/0e34/9PuuX/Trrl/0665f9Ou+b/UL7q/1LD8P9Ltt7/PnqT/3F6 + ff/i4+T//////////////////////zc1L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYV1L///////////////////////7+/v/k5OT/fYWI/0uD + lP9u0+z/f+n//4Dh//+H4f//juP//5Xm//+g6P//gdX1/0i35P9MueX/Trrl/0665f9OuuX/Trrl/063 + 4v9Bk7b/MnKN/zV9mv89a37/kZaX/+vs7P///////////zc1L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYV1L/////////////////6+vr/5uf + of9MdYL/Y8Pf/33s//9+4///gt///4rh//+R4///meX//6Dn//+r6///qun9/2fH7P9DteL/Tbnk/0+6 + 5f9OuuX/T73o/0ekyv8uYXn/EB8o/x9FVv87jKz/QZ3B/0tpdf+tr7D/7+/v/zc1L/8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZWFP///////Ly + 8v+tsLH/WXR+/1Wqwv946f//fef//37e//+G4P//juP//5Xj//+c5v//o+j//6vq//+z7P//wvL//67n + +v9hw+n/QbTi/0i35P9OuuX/T73p/0WexP8yaoT/Cxcc/x1AT/8lUmX/PpW3/1bN+/84hKP/YHN5/ysq + Jf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABaWVX/wcHB/2t9hP9Gkqb/b9///3vs//983///gt7//4ni//+R5P//mOX//5/m//+n6f//ruv//7bt + //++7///yPH//9f3///E7vr/gM/u/0y55f9AteP/S7vm/0qq0P85fJr/FzE9/xQrNv8vZH3/J1pu/0y1 + 3/9Xz///Tbji/ylbbv8DBwlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACYyPD//SoeX/2bR6/968P//euT//33d//+F4P//jeL//5Tk//+b5v//o+j//6rp + //+y6///uu7//8Lw///K8f//0vP//9r2///t/f//8fz//8Lo9v93y+v/Rrfk/0Kz4P8+jK7/JEtd/wkT + GP8wZoD/JVJl/0Gavf9RwO3/UsPw/1PH9v8pYHfmAAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAIyJJVstcw9X/de3//3no//973v//gd///4fh//+P4///luX//57n + //+m6f//rev//7Xs//++7///xfH//83z///V9f//3/f//+b5///w+v/////////////t+f3/q+D0/2XG + 6/8/p9P/LGeC/wgOEf8hRVf/JVJl/z2Ttf9Rwe7/Trrk/1HC7/9NuOP/FTI/twABADIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRYcaFazy/9++f//eN///33d//+E4f//jOL//5Lj + //+a5v//oej//6np//+x6///uO3//8Hu///J8f//0vP//9r1///h9///6vr///X8///8/v//+/7///X9 + ///0/f//7/z//8/x/P+S2/f/TKXJ/yFZc/8cPk7/Jlhs/0es0/9QwOz/Trrl/0675v9TxvT/NX2b8Awa + II8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKDtC2HDQ7P9+6P//gN7//4jh + //+P5P//l+b//53n//+l6P//rOv//7Ts//+87v//xPD//8zx///V9f//3vb//+b4///v+///+P7///z/ + ///4/f//8fz//+n5///i9///3Pb//9v3///S9f//suv9/3nL6/9EnsH/QKXN/0686P9Ou+b/Trrl/066 + 5f9SwvD/RKLH/yFPYdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBISEq1JRUP1goyQ/4fZ + 8f+B5f//iuH//5Lk//+Z5v//oej//6jp//+w6///t+7//7/w///H8v//0PT//9j1///h9///6/r///P8 + ///7/v//+/7///T9///u+///5vn//9/2///Y9f//0PP//8vy///G8v//wfH//6nn/v+G2vn/Zsrw/0y5 + 5P9MuOT/Trrl/0665P9Swu//R6rR/yhgducAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQFOLi0t5HNx + cf+opKL/wr+//6HX6P+L6P//lOT//5zn//+l6P//rOr//7Pr//+77f//w/D//8zy///U9P//3Pb//+T3 + ///u+///+P3///z+///5/v//8fv//+v6///k+f//3Pf//9T1///O8v//x/L//8Hw/v+88P//s+v7/2y/ + 4P9avub/k+P+/37Y9/9XwOn/TLjk/0655P9TxvT/R6fO/yRWat8AAAAAAAAAAAAAAAAAAAAAAAAAAwAA + AEZCQUHrmZeW/7y7uv/Ixsf/sayq/4OWnviN2O3/pvP//6bo//+v6///uO3//77u///G8P//z/P//9j1 + ///g9///6Pn///L7///6/v//+/////b9///u+///5/n//+D4///Z9v//0fP//87z///I8///wPL//5vY + 7v92yOf/gNPx/2C52v9Fps7/Z8nv/4/m//+D3/z/Z9H2/1jL9v9QvOj/KmR84gsZIIoAAAAAAAAAAAAA + AAAAAAAABQUFRDw7O8yzsrL/wL+//8C/wP+WlZb8Pj08qwAAAHBScHj/t/v9/774//+67v//wu///8rx + ///T8///2/b//+T5///t+///9/3///7+///6/v//8vv//+r6///j+f//3Pb//9X1///P9P//z/X//7/w + /v+W2vL/fcrl/2zA4f9fs9X/Va7R/1Ks0f9WrM3/RKbO/2nL8f+E7v//euX8/1Kkvf8eRFHBAAMESwAA + AAoAAAAAAAAAAAAAAAAAAAAAMzMzsJiYmPewsLD/paSm/3x7fPcSEhJ/AAAAAwAAAABIR0b/b4uT/8Lx + 8//Z////0/n//9X0///e9v//6Pn///L8///6/v///f////f+///u+///5/n//+H3///Z9v//0/T//83z + ///C7/3/sOj6/3/J5f9csdP/abnZ/0213/97z+3/m+b7/3fL6f9et9r/Wbjd/2nR9P9fu9D/WH+L/ygp + Jv8AAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0pK5HFwcv9zcnT/iIiK/g4ODp8AAAAAAAAAAAAA + AABvbmr/t7e3/3R/gv+hu73/5f////T////t+///9v3///3////7/v//8/z//+v7///l+P//3fb//9f1 + ///S9P//0Pf//9D5//+z5fT/W7rg/1264P+e3vH/g9Ty/0qv2P9tw+P/bMjn/3ra+P+L9v//bcvp/1KF + lP+EjZD/2tra/0E/Of8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx4g6CEgI/93dnj/TU1P/QAA + AGcAAAAAAAAAAAAAAABxcG3//////+fn5/+anJ3/foSH/8vT0/////////////f+///v+///6Pn//+L3 + ///a9v//1PT//9b4///G8f//j8/n/4bU7v+G1PD/T6nO/1K23f+R5f//eMvo/1Kr0P9duNv/Ysfu/27T + 8v9NkJ7/dIKH/8bGxv///////////0JAO/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQkK1xEQ + E/96eXv/Ozo+/wUFB78AAAANAAAAAAAAAAB0c3D/////////////////3t7e/5CRkf+PkI//5+3v//// + ///p+///3fX//9f0///S9P//zPT//5nc9P9wvdz/fb/a/2a31v9LqM7/Vq7R/02ozf9St+D/gNf1/4Tk + +P933fz/VqC5/2R6gP+4urv/9vb2/////////////////0RBPf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAgIClwsKDe53d3r/T05R/xUUF/4ICAi2AQICKAAAAAB3dnL///////////////////////v7 + +//T09P/foCA/5Wgo//f+fv/4P///87z///J8f//htbz/1Wz2v+MzOP/p+f5/6Lm+P+N1/H/csTh/1So + zP9Vr9T/feD//2m+0/9Vdn7/qayt/+3t7f///////////////////////////0VDPv8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAKwEAAatDQ0b/jIuN/yMiJv8aGR3/EBAS4wQEBIpgYFz//v7+//// + ////////////////////////9vb2/8rLy/9scXL/mre+/8n5/f/C9f//X7XZ/1S54v+g5/z/p+3//5Di + /f9wyu3/gNj1/4np+v9yyuL/UXuJ/4+Tlf/r6+v//////////////////////////////////////0ZE + P/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMEAwXPbWtu/4OChP8oJiv/Gxof/xoZ + HP4XFhn////////////////////////////+/v7/1dXV/3Rzc/8xMTH/FBUX/1lsc/+eztn/ldjs/1y0 + 1v9VtNn/Xrjb/1a02P9gvt//dtLq/1qUov90fH//3t7e//7+/v////////////////////////////// + /////////////0dGQP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnBAMFtmFh + Y/iNjI3/S0pO/ygnK/8fHiH////////////////////////////U1NX/GBcb/xoZHf8cGx//GBcb/xMO + Ev81OD7/k7W//5zd6/+E1/X/gNr4/3vW8P9oq7z/YnV6/8PDw/////////////////////////////// + /////////////////////////////0lHQv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAACAAAAHM1NTXQfHt8+Ht6fP9gX2L////////////////////////////e3t7/MTA0/y8t + Mv81NDj/R0ZJ/19fYf9zcXL/e3Z1/3N9gP9qlaH/b6e1/2J+hv+lpaX///////////////////////// + /////////////////////////////////////////////0tJQ/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAaTExMaplZWT///////////////////////// + ///19fb/lJSW/2VlZ/91dHX/hISE/4mJif+pqan/29vb///////U1NT/v7+///Ly8v////////////// + /////////////////////////////////////////////////////////////0xKRf8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABycW7///////// + ////////////////////////8fHx/7i4t/+hoqH/0tLS//r6+v////////////////////////////// + /////////////////////////////////////////////////////////////////////////////0xM + Rv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACJiIX//////////////////////////////////////////////////////8fHxv/Hx8b/x8fG/8fH + xv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG//// + /////////////05NSP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACLiof///////////+Uk5H/x8fG/8fHxv+Uk5H/lJOR/8fHxv///////////+vr + 6v////////////////////////////////////////////////////////////////////////////// + ////////x8fG/////////////////1BOSf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNjIn///////////////////////////////////////// + /////////////+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr + 6v/r6+r/6+vq/+vr6v/r6+r/6+vq/////////////////1BQSv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPjoz///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////1JRTP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSkY7///////// + /////////////////////////////////////////////8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fH + xv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/////////////////1NS + TP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACUk5H///////////+Uk5H/x8fG/5STkf+Uk5H/x8fG/5STkf///////////+vr6v////////////// + ////////////////////////////////////////////////////////////////////////x8fG//// + /////////////1RTTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACWlZP//////////////////////////////////////////////////////+vr + 6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr + 6v/r6+r/6+vq/////////////////1VUT/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXlpT///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////1ZVUP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZmJb/qnc1/6p3Nf+qdzX/qnc1/6p3 + Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3 + Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/1dWUf8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACamZf/9dmn//XZ + p//12af/89el//HUov/v0p7/7c+b/+vLl//oyJP/5cSP/+LAiv/eu4X/27iA/9i0fP/Vr3b/0apx/86m + bP/Komb/x5xh/8SZXP/AlFf/vZBS/7qLTf+3iEn/tYRF/7KBQP+vfz3/rXw6/6t5OP+qdzX/qnc1/1dX + Uf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACcm5n/9dmn//XZp//12af/89ek//HUov/v0p7/7s+b/+vMmP/oyJP/5cSO/+HAiv/fvIX/27eA/9iz + e//Ur3b/0apw/86ma//KoWb/x51h/8OZXP/AlFf/vY9S/7qMTf+3iEn/tIRF/7KBQf+wfj3/rXs7/6x5 + N/+qdzX/qnc1/1hXUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACdnJr/9dmn//XZp//12af/9Nel//LVov/w0Z7/7c+c/+vMl//oyJP/5cSO/+HA + iv/fvIX/3LeA/9ize//Vr3b/0apx/86mbP/KoWb/xp1h/8SYW//AlFb/vZBS/7qMTv+3iEj/tIRF/7KB + QP+wfj3/rnw6/6t5N/+qdzX/qnc1/1hXUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACdnJr/nZya/5ybmP+amZf/mJiW/5eWlP+Uk5H/kpGP/5CO + jP+NjYn/iomH/4iHhP+FhID/goF9/39+e/98e3j/eXh1/3Z1cv9zc2//cW9s/21saP9qaWb/aGdj/2Vk + YP9jYl7/YWBc/15dWP9cXFf/W1pV/1lYVP9YV1L/WFdS/1hXUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA//////////////+B/////////gB////////4AD//////wAAAAB/////AAAAAH//A/8AAAAAf + /8D/wAAAAB//wP/AAAAAH//A/8AAAAAP/8D/gAAAAAf/wP8AAAAAA/+A/wAAAAAD/wD+AAAAAAP/APgA + AAAAA/4A8AAAAAAD+ADAAAAAAAPwAMAAAAAAA8AAwEAAAAAPwADBwAAAAB/AQMHAAAAAH8HAwMAAAAAf + wcDAQAAAAB/AwMAAAAAAH8BA4AAAAAAfwADwAAAAAB/gAPgAAAAAH/AA/gAAAAAf+AD/wAAAAB/+AP/A + AAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf + /8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/////////8D///////////// + /////////////////////////////ygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAASEyUqbzJwiOhCoMb/L3GK7A8iK3oAAQIXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACBg8RUjdnc8RrxNv+XdD8/1HE8/9Uyvj/SK3V/yZdcsoGERReCRQYAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4NTD/ODUw/zg1MP84NTD/ODUw/zg1 + MP84NTD/Li4r/ytCSP9fssX/huz//4zq//9Ywev/Sbfj/0+75/9SxPH/U8Ty/0Oewv8nRlH/Kywq/zg1 + MP84NTD/ODUw/zg1MP84NTD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5dWP/9/f3///////// + ////////2NjY/3yNkv9cobL/e+P8/4fq//+N5P//meb//2/M8P9GtuP/T7rl/0665f9Ou+b/U8Px/0mr + 0/82b4f/cIaO/9HS0v//////+vr6/15dWP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYWBc//39 + /f//////6urr/5Ganf9alqX/dN3x/4Xu//+I5P//j+L//5nm//+p6///oOT7/1O95/9DteP/Trrl/1C9 + 6P9Lr9j/LF51/xs6Sf81fZr/Romj/4iTmP/g4OD/YWBc/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABjYl7/8vLy/6Ooqv9dipj/aM7j/3/t//+D5f//i+L//5Tj//+f5///qer//7Ps///H8///peL3/1W9 + 5v8+s+L/Srzp/0yt1f8sXXT/DyAo/yVRZP9Bmrz/T7zn/059kP9ERkT/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAk1PTf9nho//W7nL/3nt//9/5v//hd7//4/j//+Z5v//ouj//63q//+47v//wvD//87y + ///h+v//0fD6/4nR7v9Mu+b/QrPg/zh+nP8TJi//I0te/yxlfP9PvOf/V9D//z6Nrf8JExleAAAAAAAA + AAAAAAAAAAAAAAAAAAANHiRtTJ2q/3Tq/P9+7f//geH//4jg//+S5P//nef//6fq//+x7P//ve7//8fy + ///R9P//3fb//+r5/////////f7//8fq9/90zvD/QKLN/xQ3Rv8VKjX/KFtv/0is0/9Swu//Vs///zBy + jeEBAgJBAAAAAAAAAAAAAAAAAAAAJDdyhNWA+v//fuT//4Tg//+O4///l+X//6Ho//+s6v//tu3//8Hv + ///M8v//2PX//+L3///v+///+v3///r+///1/f//8/3//9/4//+j4/r/U6C//yRZcP8vdpL/Trvn/0+8 + 5/9Rwu//SrHa/xo8SbMAAAAAAAAAAgcGBVUyLi3Lc6u8/4Lr//+H4f//kuT//5zn//+m6P//sOz//7ru + ///F8f//0PP//9z2///p+f//9fz///v+///3/f//7fv//+P3///Y9P//1PX//9L3//+28P//etHy/1S+ + 5/9KuOX/Tbnk/1C96f9PvOj/LnCJ5AAAAAkVFBSTY2Fg+rKppv+30tv/kOr//5Tm//+g5///q+r//7Tr + //+/7///yvL//9X1///g9///7vv///r+///7/v//8/v//+n6///e+P//1fX//8/1///E8f7/u/D+/5vc + 8/9mwun/h9/9/2vM8P9OueX/UcPw/1LB7v8rZX3jHh4ejJCOjf/JyMj/vrq6/2tsbdt1q7j/s/7//6/s + //+57P//xO///8/z///b9v//5vn///P7///8/v//9/7//+77///k+P//2fb//9P1///M9P//tuz6/5XX + 7f9twOD/Yrvd/0mnzP9gwOX/ieb//3rn//9ayPD/Lm+J3AkXHWqMjIzsv76+/56dn/84ODiYAAAAKUdM + TP+ayc3/0////9H6///T8///4Pf//+37///5/v///P////T8///p+f//3/f//9f1///O8///w/H+/5XW + 7v9rvNv/XLjd/3DF5f92yeX/XbTX/1W34P9v2vj/Yq28/0JTV/8BAwMtAAAAAHZ1d/eHhoj/Ly8vrQAA + AAMAAAAAeHd0/5yfoP+Lnp//1+/v//r////3////+/////n9///v/P//5Pj//933///Z9///zPT+/8X0 + /f96yef/Yr3h/5DY8P9VtNv/aMDi/3zb+v+E7P7/Y7bQ/2mIkf+6vLz/eXh1/wAAAAAAAAAANDM192Vl + aP8JCAmTAAAAAAAAAAB8e3j//v39/9jY2P+Vl5n/r7Ky//j5+f//////6vn//+D2///Z9v//0vb//6/k + 9v+Ex+L/ccXj/1Su0v9TtNr/f9b0/27G5P9pzvL/X7na/2KOl/+mqqv/9fX1//v7+v98e3j/AAAAAAAA + AAAsKy3yamls/xUUF+8BAgJhAAAAAH9+e//+/v3////////////Kysr/kpSU/7vCxP/q////2/z//8vz + //+I1PD/ccDe/5bX7P+Czuj/ar3d/0+ozf9myO7/geD3/2GYpv+UnJ7/6Ojo////////////+/v6/39+ + e/8AAAAAAAAAAA0MDrNvbnH/SklN/w4NEfwICQqsXVxZ//r6+v/9/f3////////////7+/v/sbKy/3J9 + f/+12t//vvb//1a13f93y+r/oOf5/4LW9P+A3Pv/gd30/16dr/+AjZL/39/f//////////////////// + ///7+/v/goF9/wAAAAAAAAAAAAAAJyIhIsh6eHv/UU9S/x8eI/8bGhz//v7+/////////////////8XF + xv9UU1X/FhMW/yMmK/9xj5j/k9bp/2/K7P9qyOz/aMnq/2Cqv/9zi5H/yMnK//////////////////// + //////////////v7+/+FhID/AAAAAAAAAAAAAAAAAAAAGxgYGZJjY2Psa2pt/1RTVf/8/Pz///////// + ////////YmFk/yYlKv8yMTX/Pzw//1lUV/9/ioz/dqOw/3K5zf9ri5P/t7y9//n5+f////////////// + ////////////////////////+/v7/4iHhP8AAAAAAAAAAAAAAAAAAAAAAAAAAAMDAzIpKSmEZWVl//7+ + /v/////////////////Dw8P/YWBj/3V0df+MjIz/rKur/+bm5v/f4OD/wMHB//Dw8P////////////// + ///////////////////////////////////7+/v/iomH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACJiYX/9fX1///////////////////////u7u7/2tra//////////////////////////////////// + //////////////////////////////////////////////v7+/+NjYn/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJCOjP/8/Pz//f39//7+/v/+/v7//v7+//39/f/7+/v/0NDP/9DQz//Q0M//0NDP/9DQ + z//Q0M//0NDP/9DQz//Q0M//0NDP/9DQz//Q0M//0NDP/9DQz///////+/v7/5COjP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAkpGP///////U1NP/sbCv/8/Pzv+xsK//19bW///////o6Oj/5OTj/+jo + 6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/l5eX/0NDP///////7+/v/kpGP/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUk5H//v7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////v7 + +/+Uk5H/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJeWlP/+/v7///////////////////////// + ////////0dHQ/9HR0P/R0dD/0dHQ/9HR0P/R0dD/0dHQ/9HR0P/R0dD/0dHQ/9HR0P/R0dD/0dHQ/9HR + 0P//////+/v7/5eWlP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmJiW///////U1NP/yMjI/7Oy + sf/JyMj/xMTC///////p6ej/5eXk/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np + 6f/m5ub/0dHQ///////7+/v/mJiW/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACamZf///////7/ + ///8////+Pz///z////7//////////3////5/f//+v7///r+///6/v//+v7///r+///6/v//+v7///r+ + ///6/v//+v7///n9///4/P////////////+amZf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyb + mP+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3 + Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/5ybmP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAnZya///irv//46///+Gs//zeqP/52qP/9tae//LQl//ty5D/6cSK/+S+gv/ft3z/2rFz/9aq + bP/QpGT/zJ5d/8eXVf/DkU7/v4xI/7qHQv+3gjz/tH44/7J7NP+ueTT/nZya/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACdnJr//+Ku///jr///4az//N6o//nao//21p7/8tCX/+3LkP/pxIr/5L6C/9+3 + fP/asXP/1qps/9CkZP/Mnl3/x5dV/8ORTv+/jEj/uodC/7eCPP+0fjj/sns0/655NP+dnJr/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJybmP+amZf/mJiW/5eWlP+Uk5H/kpGP/5COjP+NjYn/iomH/4iH + hP+FhID/goF9/39+e/98e3j/eXh1/3Z1cv9zc2//cW9s/21saP9qaWb/aGdj/2VkYP9jYl7/YWBc/5yb + mP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA//4D///4AP/4AAAD+AAAA/gAAAP4AAAD8AAAAfAAAADgAAAAgAAAAAAA + AAAAAAAAAAAAAQgAAAMYAAADCAAAAwAAAAMAAAADgAAAA+AAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gA + AAP4AAAD+AAAA/gAAAP4AAAD+AAAA/////8oAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMmKU9DjabLRqvS8CJQY5UGEBMhAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAf357/3x7eP95eHX/YGNi/094gP+A2uv/fuD//0i86/9TxvT/P4ik/0FQ + Vf9bW1j/Xl1Y/wAAAAAAAAAAAAAAAJ2cmv/d3t//haKp/3DI2f+P8P//oOz//7Dr/f9qxur/Qrvs/zmH + qP8jTWD/WZOp/0dOTv8AAAAAAAAAAAAAAABnc3T/a7zJ/4Pt//+U6///pOn//7ru///U9f//6Pn9/6ni + +P9MocT/ES49/z6Ss/9Pvun/ESgxYgAAAAAUEhNacsTT/472//+Z5f//rev//8Lw///c9v//8/v///v+ + ///1/v//yvT//2iqw/9EpMn/U8r7/zyOruM8OzqGS0pN/4y2wP+q9///ufD//8zy///m+f//+f7///P8 + ///i+v//xvD9/6Tg8/91yev/c9r+/2HQ9v8tbIa9S0pN/0xLS4+AgH7/l6+v/+D6+//9////+f///+37 + ///Y9v7/rOP1/3rJ5/9mw+j/cNLx/2WtxP9FUlP/AggKDktKTfoLCwx+nZya//////+/wMD/yMjI/+3/ + //++8f//k9Xs/2/E5P9oyu7/bLvV/4egqP/e39//YWBc/wAAAAArKiyhSkpN/z8+P//s7Oz/9vb2/6Ki + ov9cZWf/h8TY/37Z+v91yeT/fKCq/87R0v///////////2FgXP8AAAAAAAAABysrK29fX1////////// + //+Af4H/WldY/5OVl/+UqK3/tr2///////////////////////9hYFz/AAAAAAAAAAAAAAAAm5qY//Pz + 8//k5OT/4ODg/+Tk5P/m5ub/6Ojo/+jo6P/o6Oj/6Ojo/+bm5f//////YWBc/wAAAAAAAAAAAAAAAJ2c + mv///////////////////////////////////////////////////////////2FgXP8AAAAAAAAAAAAA + AACdnJr//////+bm5v/m5ub/8vT2/+Xp7v/o7PD/6Ozw/+js8P/o7PH/5enu//////9hYFz/AAAAAAAA + AAAAAAAAnZya/+nMmP/vzZX/6MWM/+C7f//XsHP/z6Rm/8aYWP+9jUr/tYI9/655M/+pbiL/YWBc/wAA + AAAAAAAAAAAAAJ2cmv/pzJj/782V/+jFjP/gu3//17Bz/8+kZv/GmFj/vY1K/7WCPf+ueTP/qW4i/2Fg + XP8AAAAAAAAAAAAAAACdnJr/nZya/5ybmP+amZf/mJiW/5eWlP+Uk5H/kpGP/5COjP+NjYn/iomH/4iH + hP+FhID/AAAAAP4PSbvAAQAAwAF8wMAAwAGAAMAAAACAAAAAAAAAAQAAAAEAAQABAAHAAQABwAHAAcAB + wAHAAcABwAHAAcABAAQ= + + + \ No newline at end of file diff --git a/CASA/micasad/winforms/MasterPasswordForm.Designer.cs b/CASA/micasad/winforms/MasterPasswordForm.Designer.cs new file mode 100644 index 00000000..0d712d43 --- /dev/null +++ b/CASA/micasad/winforms/MasterPasswordForm.Designer.cs @@ -0,0 +1,194 @@ +namespace sscs.winforms +{ + partial class MasterPasswordForm + { + /// + /// 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() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.numericUpDownRemberFor = new System.Windows.Forms.NumericUpDown(); + this.label4 = new System.Windows.Forms.Label(); + this.textBoxMP2 = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBoxMP1 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.labelError = new System.Windows.Forms.Label(); + this.textBoxDescription = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownRemberFor)).BeginInit(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.groupBox1.Controls.Add(this.numericUpDownRemberFor); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.textBoxMP2); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.textBoxMP1); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(12, 66); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(282, 60); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + // + // numericUpDownRemberFor + // + this.numericUpDownRemberFor.Location = new System.Drawing.Point(115, 93); + this.numericUpDownRemberFor.Name = "numericUpDownRemberFor"; + this.numericUpDownRemberFor.Size = new System.Drawing.Size(51, 20); + this.numericUpDownRemberFor.TabIndex = 5; + this.numericUpDownRemberFor.Visible = false; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(33, 95); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(76, 13); + this.label4.TabIndex = 4; + this.label4.Text = "Remember for:"; + this.label4.Visible = false; + // + // textBoxMP2 + // + this.textBoxMP2.Location = new System.Drawing.Point(115, 58); + this.textBoxMP2.Name = "textBoxMP2"; + this.textBoxMP2.Size = new System.Drawing.Size(161, 20); + this.textBoxMP2.TabIndex = 3; + this.textBoxMP2.Visible = false; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 62); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(103, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Re-enter Password:"; + this.label2.Visible = false; + // + // textBoxMP1 + // + this.textBoxMP1.Location = new System.Drawing.Point(115, 24); + this.textBoxMP1.Name = "textBoxMP1"; + this.textBoxMP1.PasswordChar = '*'; + this.textBoxMP1.Size = new System.Drawing.Size(161, 20); + this.textBoxMP1.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(18, 27); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(91, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Master Password:"; + // + // button1 + // + this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.button1.Location = new System.Drawing.Point(127, 138); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 4; + this.button1.Text = "Ok"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.button2.Location = new System.Drawing.Point(213, 138); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 5; + this.button2.Text = "Cancel"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // labelError + // + this.labelError.AutoSize = true; + this.labelError.ForeColor = System.Drawing.Color.Red; + this.labelError.Location = new System.Drawing.Point(64, 50); + this.labelError.Name = "labelError"; + this.labelError.Size = new System.Drawing.Size(0, 13); + this.labelError.TabIndex = 7; + // + // textBoxDescription + // + this.textBoxDescription.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBoxDescription.Location = new System.Drawing.Point(21, 12); + this.textBoxDescription.Multiline = true; + this.textBoxDescription.Name = "textBoxDescription"; + this.textBoxDescription.ReadOnly = true; + this.textBoxDescription.Size = new System.Drawing.Size(267, 33); + this.textBoxDescription.TabIndex = 9; + this.textBoxDescription.Text = "Description"; + // + // MasterPasswordForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(306, 178); + this.Controls.Add(this.textBoxDescription); + this.Controls.Add(this.labelError); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.groupBox1); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "MasterPasswordForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Master Password"; + this.TopMost = true; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownRemberFor)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox textBoxMP2; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBoxMP1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.NumericUpDown numericUpDownRemberFor; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label labelError; + private System.Windows.Forms.TextBox textBoxDescription; + } +} \ No newline at end of file diff --git a/CASA/micasad/winforms/MasterPasswordForm.cs b/CASA/micasad/winforms/MasterPasswordForm.cs new file mode 100644 index 00000000..0cc2cd2a --- /dev/null +++ b/CASA/micasad/winforms/MasterPasswordForm.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using sscs.cache; + +namespace sscs.winforms +{ + + public delegate void MasterPasswordEventHandler(string sMasterPassword, bool bIsValid); + + public partial class MasterPasswordForm : Form + { + public event MasterPasswordEventHandler MasterPasswordVerified; + + public MasterPasswordForm(string sDescription) + { + InitializeComponent(); + if (sDescription != null) + { + textBoxDescription.Text = sDescription; + } + else + { + textBoxDescription.Text = ""; + } + } + + internal void SetErrorMessage(string sMessage) + { + labelError.Text = sMessage; + } + + private void button2_Click(object sender, EventArgs e) + { + // user cancel + MasterPasswordVerified(null, false); + } + + private void button1_Click(object sender, EventArgs e) + { + SetErrorMessage(""); + + if (textBoxMP1.Text != null && textBoxMP1.Text.Length > 0) + { + // signal event handlers + MasterPasswordVerified(textBoxMP1.Text, true); + } + else + { + SetErrorMessage("Please enter your Master Password"); + } + } + } +} \ No newline at end of file diff --git a/CASA/micasad/winforms/MasterPasswordForm.resx b/CASA/micasad/winforms/MasterPasswordForm.resx new file mode 100644 index 00000000..ff31a6db --- /dev/null +++ b/CASA/micasad/winforms/MasterPasswordForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CASA/micasad/winforms/MiCasaForm.Designer.cs b/CASA/micasad/winforms/MiCasaForm.Designer.cs new file mode 100644 index 00000000..8cfb39b6 --- /dev/null +++ b/CASA/micasad/winforms/MiCasaForm.Designer.cs @@ -0,0 +1,689 @@ +namespace sscs.winforms +{ + partial class MiCasaForm + { + /// + /// 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 (true) + { + return; + }else{ + 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() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MiCasaForm)); + this.button1 = new System.Windows.Forms.Button(); + this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); + this.contextMenuStripNotify = new System.Windows.Forms.ContextMenuStrip(this.components); + this.cmOpen = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.cmLock = new System.Windows.Forms.ToolStripMenuItem(); + this.cmUnlock = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); + this.cmExit = new System.Windows.Forms.ToolStripMenuItem(); + this.button2 = new System.Windows.Forms.Button(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.listBox1 = new System.Windows.Forms.ListBox(); + this.label2 = new System.Windows.Forms.Label(); + this.button3 = new System.Windows.Forms.Button(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newSecretToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newKeyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.refreshStoresToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.lockSecretsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.unlockSecretsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.destroySecretsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.exportSecretsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.importSecretsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.quitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.linkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.changeMasterPasswordToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.preferencesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.policyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.aboutCasaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.listViewNative = new System.Windows.Forms.ListView(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.labelNativeInfo = new System.Windows.Forms.Label(); + this.comboBoxProfile = new System.Windows.Forms.ComboBox(); + this.comboBoxKeyChains = new System.Windows.Forms.ComboBox(); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.newToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.viewToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); + this.deleteToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.saveFileDialog = new System.Windows.Forms.SaveFileDialog(); + this.profilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); + this.contextMenuStripNotify.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + this.contextMenuStrip.SuspendLayout(); + this.SuspendLayout(); + // + // button1 + // + this.button1.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.button1.Location = new System.Drawing.Point(12, 84); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 1; + this.button1.Text = "Start"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // notifyIcon1 + // + this.notifyIcon1.BalloonTipText = "CASA"; + this.notifyIcon1.ContextMenuStrip = this.contextMenuStripNotify; + this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); + this.notifyIcon1.Text = "notifyIcon1"; + this.notifyIcon1.Visible = true; + this.notifyIcon1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseDoubleClick); + // + // contextMenuStripNotify + // + this.contextMenuStripNotify.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.cmOpen, + this.toolStripSeparator8, + this.cmLock, + this.cmUnlock, + this.toolStripSeparator9, + this.cmExit}); + this.contextMenuStripNotify.Name = "contextMenuStripNotify"; + this.contextMenuStripNotify.ShowImageMargin = false; + this.contextMenuStripNotify.Size = new System.Drawing.Size(143, 104); + // + // cmOpen + // + this.cmOpen.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); + this.cmOpen.Name = "cmOpen"; + this.cmOpen.Size = new System.Drawing.Size(142, 22); + this.cmOpen.Text = "Open Manager"; + this.cmOpen.Click += new System.EventHandler(this.cmOpen_Click); + // + // toolStripSeparator8 + // + this.toolStripSeparator8.Name = "toolStripSeparator8"; + this.toolStripSeparator8.Size = new System.Drawing.Size(139, 6); + // + // cmLock + // + this.cmLock.Name = "cmLock"; + this.cmLock.Size = new System.Drawing.Size(142, 22); + this.cmLock.Text = "Lock Secrets"; + this.cmLock.Click += new System.EventHandler(this.cmLock_Click); + // + // cmUnlock + // + this.cmUnlock.Enabled = false; + this.cmUnlock.Name = "cmUnlock"; + this.cmUnlock.Size = new System.Drawing.Size(142, 22); + this.cmUnlock.Text = "UnLock Secrets"; + // + // toolStripSeparator9 + // + this.toolStripSeparator9.Name = "toolStripSeparator9"; + this.toolStripSeparator9.Size = new System.Drawing.Size(139, 6); + // + // cmExit + // + this.cmExit.Name = "cmExit"; + this.cmExit.Size = new System.Drawing.Size(142, 22); + this.cmExit.Text = "Exit"; + this.cmExit.Click += new System.EventHandler(this.cmExit_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(373, 84); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 2; + this.button2.Text = ">>"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // listBox1 + // + this.listBox1.BackColor = System.Drawing.Color.White; + this.listBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listBox1.ItemHeight = 16; + this.listBox1.Location = new System.Drawing.Point(12, 119); + this.listBox1.Name = "listBox1"; + this.listBox1.Size = new System.Drawing.Size(436, 228); + this.listBox1.Sorted = true; + this.listBox1.TabIndex = 3; + this.listBox1.Visible = false; + this.listBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseDoubleClick); + this.listBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseClick); + this.listBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseUp); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(313, 22); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(10, 13); + this.label2.TabIndex = 4; + this.label2.Text = " "; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(145, 469); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(129, 23); + this.button3.TabIndex = 5; + this.button3.Text = "Start Logging"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Visible = false; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.editToolStripMenuItem, + this.optionsToolStripMenuItem, + this.profilesToolStripMenuItem, + this.helpToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(459, 24); + this.menuStrip1.TabIndex = 6; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripMenuItem, + this.refreshStoresToolStripMenuItem, + this.toolStripSeparator1, + this.lockSecretsToolStripMenuItem, + this.unlockSecretsToolStripMenuItem, + this.destroySecretsToolStripMenuItem, + this.toolStripSeparator2, + this.exportSecretsToolStripMenuItem, + this.importSecretsToolStripMenuItem, + this.toolStripSeparator3, + this.quitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(35, 20); + this.fileToolStripMenuItem.Text = "File"; + // + // newToolStripMenuItem + // + this.newToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newSecretToolStripMenuItem, + this.newKeyToolStripMenuItem}); + this.newToolStripMenuItem.Name = "newToolStripMenuItem"; + this.newToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.newToolStripMenuItem.Text = "New"; + // + // newSecretToolStripMenuItem + // + this.newSecretToolStripMenuItem.Name = "newSecretToolStripMenuItem"; + this.newSecretToolStripMenuItem.Size = new System.Drawing.Size(140, 22); + this.newSecretToolStripMenuItem.Text = "New Secret"; + // + // newKeyToolStripMenuItem + // + this.newKeyToolStripMenuItem.Name = "newKeyToolStripMenuItem"; + this.newKeyToolStripMenuItem.Size = new System.Drawing.Size(140, 22); + this.newKeyToolStripMenuItem.Text = "New Key"; + // + // refreshStoresToolStripMenuItem + // + this.refreshStoresToolStripMenuItem.Name = "refreshStoresToolStripMenuItem"; + this.refreshStoresToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F5; + this.refreshStoresToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.refreshStoresToolStripMenuItem.Text = "Refresh Stores"; + this.refreshStoresToolStripMenuItem.Click += new System.EventHandler(this.refreshStoresToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(173, 6); + // + // lockSecretsToolStripMenuItem + // + this.lockSecretsToolStripMenuItem.Name = "lockSecretsToolStripMenuItem"; + this.lockSecretsToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.lockSecretsToolStripMenuItem.Text = "Lock Secrets"; + this.lockSecretsToolStripMenuItem.Click += new System.EventHandler(this.lockSecretsToolStripMenuItem_Click); + // + // unlockSecretsToolStripMenuItem + // + this.unlockSecretsToolStripMenuItem.Enabled = false; + this.unlockSecretsToolStripMenuItem.Name = "unlockSecretsToolStripMenuItem"; + this.unlockSecretsToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.unlockSecretsToolStripMenuItem.Text = "Unlock Secrets"; + this.unlockSecretsToolStripMenuItem.Click += new System.EventHandler(this.unlockSecretsToolStripMenuItem_Click); + // + // destroySecretsToolStripMenuItem + // + this.destroySecretsToolStripMenuItem.Name = "destroySecretsToolStripMenuItem"; + this.destroySecretsToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.destroySecretsToolStripMenuItem.Text = "Destroy Secrets"; + this.destroySecretsToolStripMenuItem.Click += new System.EventHandler(this.destroySecretsToolStripMenuItem_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(173, 6); + // + // exportSecretsToolStripMenuItem + // + this.exportSecretsToolStripMenuItem.Name = "exportSecretsToolStripMenuItem"; + this.exportSecretsToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.exportSecretsToolStripMenuItem.Text = "Export Secrets"; + this.exportSecretsToolStripMenuItem.Click += new System.EventHandler(this.exportSecretsToolStripMenuItem_Click); + // + // importSecretsToolStripMenuItem + // + this.importSecretsToolStripMenuItem.Name = "importSecretsToolStripMenuItem"; + this.importSecretsToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.importSecretsToolStripMenuItem.Text = "Import Secrets"; + this.importSecretsToolStripMenuItem.Click += new System.EventHandler(this.importSecretsToolStripMenuItem_Click); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(173, 6); + // + // quitToolStripMenuItem + // + this.quitToolStripMenuItem.Name = "quitToolStripMenuItem"; + this.quitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Q))); + this.quitToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.quitToolStripMenuItem.Text = "Exit"; + this.quitToolStripMenuItem.Click += new System.EventHandler(this.quitToolStripMenuItem_Click); + // + // editToolStripMenuItem + // + this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.viewToolStripMenuItem, + this.linkToolStripMenuItem, + this.copyToolStripMenuItem, + this.toolStripSeparator4, + this.deleteToolStripMenuItem}); + this.editToolStripMenuItem.Name = "editToolStripMenuItem"; + this.editToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.editToolStripMenuItem.Text = "Edit"; + // + // viewToolStripMenuItem + // + this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; + this.viewToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F2; + this.viewToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.viewToolStripMenuItem.Text = "View"; + // + // linkToolStripMenuItem + // + this.linkToolStripMenuItem.Name = "linkToolStripMenuItem"; + this.linkToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.linkToolStripMenuItem.Text = "Link"; + // + // copyToolStripMenuItem + // + this.copyToolStripMenuItem.Enabled = false; + this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; + this.copyToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.copyToolStripMenuItem.Text = "Copy"; + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(135, 6); + // + // deleteToolStripMenuItem + // + this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; + this.deleteToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Delete; + this.deleteToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.deleteToolStripMenuItem.Text = "Delete"; + // + // optionsToolStripMenuItem + // + this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.changeMasterPasswordToolStripMenuItem, + this.toolStripSeparator5, + this.preferencesToolStripMenuItem, + this.toolStripSeparator6, + this.policyToolStripMenuItem}); + this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; + this.optionsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.O))); + this.optionsToolStripMenuItem.Size = new System.Drawing.Size(56, 20); + this.optionsToolStripMenuItem.Text = "Options"; + // + // changeMasterPasswordToolStripMenuItem + // + this.changeMasterPasswordToolStripMenuItem.Name = "changeMasterPasswordToolStripMenuItem"; + this.changeMasterPasswordToolStripMenuItem.Size = new System.Drawing.Size(207, 22); + this.changeMasterPasswordToolStripMenuItem.Text = "Change Master Password"; + this.changeMasterPasswordToolStripMenuItem.Click += new System.EventHandler(this.changeMasterPasswordToolStripMenuItem_Click); + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(204, 6); + // + // preferencesToolStripMenuItem + // + this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem"; + this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(207, 22); + this.preferencesToolStripMenuItem.Text = "Preferences"; + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size(204, 6); + // + // policyToolStripMenuItem + // + this.policyToolStripMenuItem.Name = "policyToolStripMenuItem"; + this.policyToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F3; + this.policyToolStripMenuItem.Size = new System.Drawing.Size(207, 22); + this.policyToolStripMenuItem.Text = "Policies"; + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.contentsToolStripMenuItem, + this.aboutCasaToolStripMenuItem}); + this.helpToolStripMenuItem.Enabled = false; + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(40, 20); + this.helpToolStripMenuItem.Text = "Help"; + // + // contentsToolStripMenuItem + // + this.contentsToolStripMenuItem.Name = "contentsToolStripMenuItem"; + this.contentsToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F1; + this.contentsToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.contentsToolStripMenuItem.Text = "Contents"; + // + // aboutCasaToolStripMenuItem + // + this.aboutCasaToolStripMenuItem.Name = "aboutCasaToolStripMenuItem"; + this.aboutCasaToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.aboutCasaToolStripMenuItem.Text = "About Casa"; + // + // pictureBox1 + // + this.pictureBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage"))); + this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.pictureBox1.Location = new System.Drawing.Point(0, 22); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(361, 56); + this.pictureBox1.TabIndex = 7; + this.pictureBox1.TabStop = false; + // + // pictureBox2 + // + this.pictureBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pictureBox2.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox2.BackgroundImage"))); + this.pictureBox2.Location = new System.Drawing.Point(359, 22); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(112, 56); + this.pictureBox2.TabIndex = 8; + this.pictureBox2.TabStop = false; + // + // listViewNative + // + this.listViewNative.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1, + this.columnHeader2}); + this.listViewNative.Location = new System.Drawing.Point(13, 377); + this.listViewNative.Name = "listViewNative"; + this.listViewNative.Size = new System.Drawing.Size(434, 86); + this.listViewNative.TabIndex = 9; + this.listViewNative.UseCompatibleStateImageBehavior = false; + this.listViewNative.View = System.Windows.Forms.View.List; + this.listViewNative.Visible = false; + // + // columnHeader1 + // + this.columnHeader1.Text = ""; + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + this.openFileDialog1.Filter = "*.casa|"; + // + // labelNativeInfo + // + this.labelNativeInfo.AutoSize = true; + this.labelNativeInfo.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelNativeInfo.Location = new System.Drawing.Point(142, 360); + this.labelNativeInfo.Name = "labelNativeInfo"; + this.labelNativeInfo.Size = new System.Drawing.Size(143, 13); + this.labelNativeInfo.TabIndex = 10; + this.labelNativeInfo.Text = ":: Native Information ::"; + this.labelNativeInfo.Visible = false; + // + // comboBoxProfile + // + this.comboBoxProfile.FormattingEnabled = true; + this.comboBoxProfile.Location = new System.Drawing.Point(261, 86); + this.comboBoxProfile.Name = "comboBoxProfile"; + this.comboBoxProfile.Size = new System.Drawing.Size(107, 21); + this.comboBoxProfile.TabIndex = 11; + this.comboBoxProfile.Visible = false; + this.comboBoxProfile.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); + // + // comboBoxKeyChains + // + this.comboBoxKeyChains.FormattingEnabled = true; + this.comboBoxKeyChains.Location = new System.Drawing.Point(93, 86); + this.comboBoxKeyChains.Name = "comboBoxKeyChains"; + this.comboBoxKeyChains.Size = new System.Drawing.Size(161, 21); + this.comboBoxKeyChains.TabIndex = 12; + this.comboBoxKeyChains.SelectedIndexChanged += new System.EventHandler(this.comboBoxKeyChains_SelectedIndexChanged); + // + // contextMenuStrip + // + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripMenuItem1, + this.viewToolStripMenuItem1, + this.toolStripSeparator7, + this.deleteToolStripMenuItem1}); + this.contextMenuStrip.Name = "contextMenuStrip"; + this.contextMenuStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional; + this.contextMenuStrip.ShowImageMargin = false; + this.contextMenuStrip.Size = new System.Drawing.Size(92, 76); + // + // newToolStripMenuItem1 + // + this.newToolStripMenuItem1.Name = "newToolStripMenuItem1"; + this.newToolStripMenuItem1.Size = new System.Drawing.Size(91, 22); + this.newToolStripMenuItem1.Text = "New"; + // + // viewToolStripMenuItem1 + // + this.viewToolStripMenuItem1.Name = "viewToolStripMenuItem1"; + this.viewToolStripMenuItem1.Size = new System.Drawing.Size(91, 22); + this.viewToolStripMenuItem1.Text = "View"; + // + // toolStripSeparator7 + // + this.toolStripSeparator7.Name = "toolStripSeparator7"; + this.toolStripSeparator7.Size = new System.Drawing.Size(88, 6); + // + // deleteToolStripMenuItem1 + // + this.deleteToolStripMenuItem1.Name = "deleteToolStripMenuItem1"; + this.deleteToolStripMenuItem1.Size = new System.Drawing.Size(91, 22); + this.deleteToolStripMenuItem1.Text = "Delete"; + // + // saveFileDialog + // + this.saveFileDialog.CheckFileExists = true; + // + // profilesToolStripMenuItem + // + this.profilesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripMenuItem2, + this.toolStripSeparator10}); + this.profilesToolStripMenuItem.Name = "profilesToolStripMenuItem"; + this.profilesToolStripMenuItem.Size = new System.Drawing.Size(54, 20); + this.profilesToolStripMenuItem.Text = "Profiles"; + this.profilesToolStripMenuItem.Visible = false; + // + // newToolStripMenuItem2 + // + this.newToolStripMenuItem2.Name = "newToolStripMenuItem2"; + this.newToolStripMenuItem2.Size = new System.Drawing.Size(158, 22); + this.newToolStripMenuItem2.Text = "New"; + // + // toolStripSeparator10 + // + this.toolStripSeparator10.Name = "toolStripSeparator10"; + this.toolStripSeparator10.Size = new System.Drawing.Size(149, 6); + // + // MiCasaForm + // + this.AcceptButton = this.button1; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.BackColor = System.Drawing.Color.Gainsboro; + this.ClientSize = new System.Drawing.Size(459, 510); + this.Controls.Add(this.comboBoxKeyChains); + this.Controls.Add(this.comboBoxProfile); + this.Controls.Add(this.labelNativeInfo); + this.Controls.Add(this.listViewNative); + this.Controls.Add(this.pictureBox2); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.label2); + this.Controls.Add(this.listBox1); + this.Controls.Add(this.button2); + this.Controls.Add(this.button3); + this.Controls.Add(this.button1); + this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MainMenuStrip = this.menuStrip1; + this.MaximizeBox = false; + this.Name = "MiCasaForm"; + this.Text = "MiCasa"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MiCasaForm_FormClosing); + this.contextMenuStripNotify.ResumeLayout(false); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + this.contextMenuStrip.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.NotifyIcon notifyIcon1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.ListBox listBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.ListView listViewNative; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem newSecretToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem newKeyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem refreshStoresToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem lockSecretsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem unlockSecretsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem destroySecretsToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem exportSecretsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem importSecretsToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem quitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem linkToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem changeMasterPasswordToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem preferencesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem policyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem contentsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem aboutCasaToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.Label labelNativeInfo; + private System.Windows.Forms.ComboBox comboBoxProfile; + private System.Windows.Forms.ComboBox comboBoxKeyChains; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem1; + private System.Windows.Forms.ContextMenuStrip contextMenuStripNotify; + private System.Windows.Forms.ToolStripMenuItem cmOpen; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; + private System.Windows.Forms.ToolStripMenuItem cmLock; + private System.Windows.Forms.ToolStripMenuItem cmUnlock; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; + private System.Windows.Forms.ToolStripMenuItem cmExit; + private System.Windows.Forms.SaveFileDialog saveFileDialog; + private System.Windows.Forms.ToolStripMenuItem profilesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator10; + } +} \ No newline at end of file diff --git a/CASA/micasad/winforms/MiCasaForm.cs b/CASA/micasad/winforms/MiCasaForm.cs new file mode 100644 index 00000000..e9ebec48 --- /dev/null +++ b/CASA/micasad/winforms/MiCasaForm.cs @@ -0,0 +1,566 @@ +using System; +using System.Collections; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; + +using sscs.cache; +using sscs.common; +using sscs.communication; +using sscs.init; +using sscs.winforms; + +namespace sscs.winforms +{ + public partial class MiCasaForm : Form + { + System.Threading.Thread listeningThread; + private static Communication server; + private bool bLogging = false; + SecretStore m_ss; + private static string mSelectedKeyChainID = null; + UserIdentifier userId; + string path; + + ToolStripMenuItem currSelectedMenuItem = null; + + public MiCasaForm(string[] args) + { + InitializeComponent(); + + // get our LUID + int low = 0; + int high = 0; + string sid = ""; + +#if W32 + UserInfo.GetLUID(ref low, ref high, ref sid); + userId = new WinUserIdentifier(low, high, sid); +#else + userId = new UnixUserIdentifier(0); +#endif + // set home directory to process path + Process proc = Process.GetCurrentProcess(); + path = proc.MainModule.FileName; + path = path.Substring(0, path.LastIndexOf("\\")); + + string profiledir = null; + // add profile directory if one is specified + for (int i = 0; i < args.Length; i++) + { + if (args[i].ToLower().StartsWith("/p:")) + { + profiledir = args[i].ToLower().Substring(args[i].IndexOf(":") + 1); + profiledir.Trim(); + } + } + + if (profiledir == null) + { + profiledir = "~home"; + m_ss = SessionManager.CreateUserSession(userId); + } + else + { + + // create dir for this profile. + System.IO.Directory.CreateDirectory(path + "/profile/" + profiledir); + + // start session using this profile + m_ss = SessionManager.CreateUserSession(userId, path + "/profile/" + profiledir); + + + // enum current profiles + string[] profiles = System.IO.Directory.GetDirectories(path + "/profile"); + + ToolStripMenuItem[] tsmi = new ToolStripMenuItem[profiles.Length]; + for (int i = 0; i < profiles.Length; i++) + { + comboBoxProfile.Items.Add(profiles[i].Substring(profiles[i].LastIndexOf("\\") + 1)); + string sProfileName = profiles[i].Substring(profiles[i].LastIndexOf("\\") + 1); + tsmi[i] = new ToolStripMenuItem(sProfileName); + if (sProfileName.Equals(profiledir)) + { + tsmi[i].Checked = true; + currSelectedMenuItem = tsmi[i]; + //tsmi[i].CheckState = System.Windows.Forms.CheckState.Checked; + } + tsmi[i].Click += new EventHandler(MiCasaForm_Click); + + } + + profilesToolStripMenuItem.DropDownItems.AddRange(tsmi); + profilesToolStripMenuItem.Visible = true; + + + + // add submenus + //this.profilesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + //this.defaultToolStripMenuItem, + //this.newToolStripMenuItem2}); + + + } + + if (WinCommon.VerifyMasterPassword(m_ss, "Enter your Master Password for:"+profiledir)) + { + server = CommunicationFactory.CreateCommunicationEndPoint(); + listeningThread = new Thread(new ThreadStart(StartServer)); + listeningThread.Start(); + button1.Text = "Stop"; + EnumKeyChains(); + } + } + + void MiCasaForm_Click(object sender, EventArgs e) + { + // uncheck cur + if (currSelectedMenuItem != null) + { + currSelectedMenuItem.Checked = false; + } + + currSelectedMenuItem = (ToolStripMenuItem)sender; + currSelectedMenuItem.Checked = true; + + + string profiledir = currSelectedMenuItem.Text; + if (m_ss != null) + { + SessionManager.RemoveUserSession(userId, true); + } + + // start session using this profile + m_ss = SessionManager.CreateUserSession(userId, path + "/profile/" + profiledir); + + // set master password + string sPassword = WinCommon.GetMasterPasswordFromUser(m_ss, true, "Enter your Master Password for:" + profiledir); + if (sPassword == null) + { + currSelectedMenuItem.Checked = false; + } + + mSelectedKeyChainID = null; + RefreshStore(); + } + + + private static void StartServer() + { + server.StartCommunicationEndPoint(); + } + + private void button1_Click(object sender, EventArgs e) + { + + if (server == null) + { + button1.Text = "starting server"; + server = CommunicationFactory.CreateCommunicationEndPoint(); + + listeningThread = new Thread(new ThreadStart(StartServer)); + listeningThread.Start(); + button1.Text = "Stop"; + + } + else + { + server.CloseCommunicationEndPoint(); + listeningThread.Abort(); + StopMicasa(); + } + + //Application.Exit(); + } + + private void StopMicasa() + { + // kill all running versions of CASA manager + System.Diagnostics.Process[] proc = System.Diagnostics.Process.GetProcessesByName("CASAManager"); + for (int i = 0; i < proc.Length; i++) + { + try + { + proc[i].Kill(); + } + catch { } + } + + notifyIcon1.Dispose(); + System.Diagnostics.Process curProc = System.Diagnostics.Process.GetCurrentProcess(); + curProc.Kill(); + } + + private void MiCasaForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (server != null) + { + server.CloseCommunicationEndPoint(); + listeningThread.Abort(); + listeningThread = null; + server = null; + } + StopMicasa(); + } + + private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) + { + + } + + private void button2_Click(object sender, EventArgs e) + { + if (!listBox1.Visible) + { + listBox1.Visible = true; + listViewNative.Visible = true; + labelNativeInfo.Visible = true; + //button3.Visible = true; + button2.Text = "<<"; + RefreshStore(); + } + else + { + listBox1.Visible = false; + listViewNative.Visible = false; + labelNativeInfo.Visible = false; + button3.Visible = false; + button2.Text = ">>"; + } + } + + private void button3_Click(object sender, EventArgs e) + { + listBox1.Items.Add("-----------------------"); + if (!bLogging) + { + //DebugStream ds = new DebugStream(listBox1); + //Debug.Listeners.Add(new TextWriterTraceListener(ds)); + listBox1.Items.Add("Logging started"); + button3.Text = "Stop logging"; + } + else + { + listBox1.Items.Add("Logging stopped"); + button3.Text = "Start logging"; + } + listBox1.Items.Add("-----------------------"); + bLogging = !bLogging; + } + + private void RefreshStore() + { + listBox1.Items.Clear(); + if (!m_ss.IsStoreLocked()) + { + KeyChain kc; + if (mSelectedKeyChainID == null) + { + kc = m_ss.GetKeyChainDefault(true); + } + else + { + kc = m_ss.GetKeyChain(mSelectedKeyChainID); + } + + EnumKeyChains(); + + IDictionaryEnumerator etor1 = (IDictionaryEnumerator)kc.GetAllSecrets(); + while (etor1.MoveNext()) + { + string sID = (string)etor1.Key; + listBox1.Items.Add((sID)); + } + } + } + + private void EnumKeyChains() + { + // clear current list + comboBoxKeyChains.Items.Clear(); + + // display keychain IDs + IDictionaryEnumerator etor = (IDictionaryEnumerator)m_ss.GetKeyChainEnumerator(); + while (etor.MoveNext()) + { + //keyChainIds.Append((string)etor.Key,0,(((string)(etor.Key)).Length)-1); + comboBoxKeyChains.Items.Add((string)etor.Key); + } + } + + private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e) + { + Console.WriteLine(listBox1.SelectedItem); + // show the Edit Form + EditSecretForm esf = new EditSecretForm(); + esf.SetID(m_ss, mSelectedKeyChainID, listBox1.SelectedItem.ToString()); + esf.Show(); + } + + + private void listBox1_MouseClick(object sender, MouseEventArgs e) + { + // show native info + listViewNative.Clear(); + + string[] info = new string[2]; + info[0] = "Created:" + DateTime.Now.ToLongTimeString(); + info[1] = DateTime.Now.ToShortTimeString(); + + ListViewItem item = new ListViewItem(info); + listViewNative.Items.Add(item); + + } + + private void refreshStoresToolStripMenuItem_Click(object sender, EventArgs e) + { + RefreshStore(); + } + + private void lockSecretsToolStripMenuItem_Click(object sender, EventArgs e) + { + m_ss.LockStore(); + SetupGUI(true); + RefreshStore(); + } + + private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) + { + ComboBox cb = (ComboBox)sender; + string profiledir = (string)cb.SelectedItem; + + + // create dir for this profile. + //System.IO.Directory.CreateDirectory(path + "/profile/" + profiledir); + if (m_ss != null) + { + SessionManager.RemoveUserSession(userId, true); + } + + // start session using this profile + m_ss = SessionManager.CreateUserSession(userId, path + "/profile/" + profiledir); + + // set master password + WinCommon.GetMasterPasswordFromUser(m_ss, true, "Enter your Master Password for:" + profiledir); + mSelectedKeyChainID = null; + RefreshStore(); + + } + + private void comboBoxKeyChains_SelectedIndexChanged(object sender, EventArgs e) + { + ComboBox cb = (ComboBox)sender; + string keychainID = (string)cb.SelectedItem; + if (keychainID != null) + { + mSelectedKeyChainID = keychainID; + RefreshStore(); + } + } + + + private void listBox1_MouseUp(object sender, MouseEventArgs e) + { + + if (e.Button == MouseButtons.Right) + { + Point p = this.Location; + p.Offset(e.Location.X + 10, e.Location.Y + 150); + contextMenuStrip.Show(p); + } + + } + + private void cmLock_Click(object sender, EventArgs e) + { + m_ss.LockStore(); + RefreshStore(); + } + + private void cmExit_Click(object sender, EventArgs e) + { + + } + + private void cmOpen_Click(object sender, EventArgs e) + { + + } + + private void exportSecretsToolStripMenuItem_Click(object sender, EventArgs e) + { + // open a verify master password form + byte[] baIV = null; + string sMasterPassword = WinCommon.GetMasterPasswordFromUser(m_ss, true, null); + + if (sMasterPassword != null) + { + saveFileDialog.InitialDirectory = @"c:\"; + try + { + saveFileDialog.FileName = ""; + saveFileDialog.DefaultExt = "casa"; + saveFileDialog.ShowDialog(); + string sFilePath = saveFileDialog.FileName; + if (sFilePath != null) + { + // save it + + byte[] baSecrets = m_ss.GetSecrets(sMasterPassword, ref baIV); + + // write em out + FileStream fs = new FileStream(sFilePath, FileMode.Create); + + // if a IV was set, write it out. + if (baIV != null) + { + fs.Write(baIV, 0, 16); + } + + // write the secrets now + fs.Write(baSecrets, 0, baSecrets.Length); + fs.Flush(); + fs.Close(); + } + } + catch (Exception e1) + { + + } + } + } + + private void importSecretsToolStripMenuItem_Click(object sender, EventArgs e) + { + byte[] baIV = new byte[16]; + byte[] baXMLSecrets = null; + openFileDialog1.InitialDirectory = @"c:\"; + + try + { + openFileDialog1.FileName = ""; + openFileDialog1.DefaultExt = "casa"; + openFileDialog1.ShowDialog(); + string sFilePath = openFileDialog1.FileName; + if (sFilePath != null && sFilePath.Length > 0) + { + string sMasterPassword = WinCommon.GetMasterPasswordFromUser(m_ss, false, "Enter Master Password that Encypts this file"); + + // let's read it + FileStream fs = new FileStream(sFilePath, FileMode.Open); + int iBytes = 0; + + // if a master password was sent, read the first 16 bytes as IV. + if (sMasterPassword != null) + { + baXMLSecrets = new byte[fs.Length - 16]; + iBytes = fs.Read(baIV, 0, 16); + iBytes = fs.Read(baXMLSecrets, 0, (int)fs.Length - 16); + } + else + { + baXMLSecrets = new byte[fs.Length]; + iBytes = fs.Read(baXMLSecrets, 0, (int)fs.Length); + } + + fs.Flush(); + fs.Close(); + m_ss.MergeXMLSecrets(baXMLSecrets, sMasterPassword, baIV); + RefreshStore(); + + } + } + catch (Exception e1) + { + + Console.WriteLine(e1.ToString()); + } + } + + private void destroySecretsToolStripMenuItem_Click(object sender, EventArgs e) + { + + // get the current keychain + KeyChain kc; + if (mSelectedKeyChainID != null) + { + kc = m_ss.GetKeyChain(mSelectedKeyChainID); + } + else + { + kc = m_ss.GetKeyChainDefault(); + } + + if (kc != null) + { + kc.RemoveAllSecrets(); + RefreshStore(); + } + } + + private void unlockSecretsToolStripMenuItem_Click(object sender, EventArgs e) + { + string sMasterPassword = WinCommon.GetMasterPasswordFromUser(m_ss, true, "Enter your Master Password to unlock your secrets"); + if (sMasterPassword != null) + { + m_ss.UnlockStore(null, sMasterPassword); + SetupGUI(false); + RefreshStore(); + } + } + + private void SetupGUI(bool bLock) + { + newToolStripMenuItem.Enabled = !bLock; + newSecretToolStripMenuItem.Enabled = !bLock; + refreshStoresToolStripMenuItem.Enabled = !bLock; + lockSecretsToolStripMenuItem.Enabled = !bLock; + unlockSecretsToolStripMenuItem.Enabled = bLock; + destroySecretsToolStripMenuItem.Enabled = !bLock; + importSecretsToolStripMenuItem.Enabled = !bLock; + exportSecretsToolStripMenuItem.Enabled = !bLock; + + editToolStripMenuItem.Enabled = !bLock; + optionsToolStripMenuItem.Enabled = !bLock; + + listBox1.Enabled = !bLock; + + comboBoxKeyChains.Enabled = !bLock; + comboBoxProfile.Enabled = !bLock; + } + + private void quitToolStripMenuItem_Click(object sender, EventArgs e) + { + server.CloseCommunicationEndPoint(); + listeningThread.Abort(); + StopMicasa(); + } + + private void changeMasterPasswordToolStripMenuItem_Click(object sender, EventArgs e) + { + + ChangeMasterPasswordForm cmp = new ChangeMasterPasswordForm(); + cmp.SetSecretStore(m_ss); + cmp.ShowDialog(); + + /* + // verify current password + string sCurPassword = WinCommon.GetMasterPasswordFromUser(m_ss, true, "Enter current Master Password"); + + if (sCurPassword != null && sCurPassword.Length > 0) + { + string sNewPassword = WinCommon.GetMasterPasswordFromUser(m_ss, false, "Enter a new Master Password"); + if (sNewPassword != null && sNewPassword.Length > 0) + { + m_ss.ChangeMasterPassword(sCurPassword, sNewPassword); + } + } + */ + } + } +} \ No newline at end of file diff --git a/CASA/micasad/winforms/MiCasaForm.resx b/CASA/micasad/winforms/MiCasaForm.resx new file mode 100644 index 00000000..9308d6ab --- /dev/null +++ b/CASA/micasad/winforms/MiCasaForm.resx @@ -0,0 +1,1074 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 593, 17 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAQAAAAAAAAAAAAAACAAAAAAIAAAICAAAAAAIAAgACAAACAgACAgIAAwMDAAP8AAAAA/wAA//8AAAAA + /wD/AP8AAP//AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAId3eAAAAAAAAAAAAAAAAAAAAAAAAAAA+HeId48AAAAAAAAAAAAAAAAAAAAAAA + D4eO6IiHeAAAAAAAAAAAAAAAAHd3d3d3B36IiIiIhwAAAAAAAAAAAAAAAH////+HfoiIiIiIiId///8A + AAAAAAAAAH////d+6IiIiIiIiHd3j/8AAAAAAAAAAH//+HjuiIiIiIiIh3B3d48AAAAAAAAAAH/4d+7o + iIiIiIiIh3B3fncAAAAAAAAAAHh37uiIiIiIj4iIh3AHeOh4AAAAAAAACHfu7oiIiIiP//+IiHcHd4jn + gAAAAAAAh47uiIiIiIj/////iHcHd4iIeAAAAAAAiO7oiIiIiP///////4dwd4iIdwAAAAAIfuiIiIiI + j/////////iHeIiIdwAAAAh3iIiIiIiI/////////4iIiIiIdwAAAId4iIiIiIj/////////iIiIjoiI + dwAA+HiIiIiIiI//////////iIiHiI7odwAAh4iIeHiIj/////////+IiId3fo53jwAAeIh48HeP//// + /////4iIiOiIjocPAAAAd3dwAHh4/////////4iIh4joh4hwAAAAAHeAAH/4eP/////4iIeIh4jneP9w + AAAAAHd/AH//iI////+IiHd4iOd4//9wAAAAcHcHgH///4eP//iIiIh36Hj///9wAAAAh3gAB3////+H + j4iIiIiIeP////9wAAAACAdwAA////hwB4iIiI53j/////9wAAAAAId4cA///4AAAAiIjneP//////9w + AAAAAA+Hd3///4AAd3d3d4////////9wAAAAAAAPh3////h3eIj4j/////////9wAAAAAAAAAH////+I + j/////////////9wAAAAAAAAAH//////+IiIiIiIiIiIj/9wAAAAAAAAAI/4iIiP////////////j/9w + AAAAAAAAAI////////////////////9wAAAAAAAAAI////////////////////9wAAAAAAAAAI////// + +IiIiIiIiIiIj/9wAAAAAAAAAI/4iIiP////////////j/9wAAAAAAAAAI////////////////////9w + AAAAAAAAAI////////////////////9wAAAAAAAAAIMzMzMzMzMzMzMzMzMzMzNwAAAAAAAAAIiIiIiI + iIiId3d3dzMzMzNwAAAAAAAAAIiIiIiIiIiId3d3dzMzMzNwAAAAAAAAAIiIiIiIiIiId3d3dzMzMzNw + AAAAAAAAAIiIiIiIh3d3d3d3d3d3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////9fjf//////////////gf////////4Af/////// + +AA//////8AAAAAf////wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAD//A/4AAAAAH + /8D/AAAAAAP/gP8AAAAAA/8A/gAAAAAD/wD4AAAAAAP+APAAAAAAA/gAwAAAAAAD8ADAAAAAAAPAAMBA + AAAAD8AAwcAAAAAfwEDBwAAAAB/BwMDAAAAAH8HAwEAAAAAfwMDAAAAAAB/AQOAAAAAAH8AA8AAAAAAf + 4AD4AAAAAB/wAP4AAAAAH/gA/8AAAAAf/gD/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/A + AAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf + /8D/wAAAAB//wP/////////A//////////////////////////////////////////8oAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAIAAAAAAgAAAgIAAAAAAgACAAIAAAICAAICA + gADAwMAA/wAAAAD/AAD//wAAAAD/AP8A/wAA//8A////AAAAAAAAAAAPh4ePAAAAAAAAAAAAAAAPh47u + h48AAAAAAAABEREREYiOiO5xERERAAAAB///h3iIjoiI6HeP9wAAAAf/+HiIiIiIiIcXeIcAAAAH+HiI + iIiPiIiHB3hxAAAA8XiIiIiIj/+Ihxd454AAAIeIiIiIiP//+OgReO54AAh4iIiIiP/////4h3iOhw+H + iIiIiI///////46IiIf3eIiIiI///////4iIjo7neIh4iIj///////iIiIiOeIiIgY////////iIiIiO + h4B4fweI///////4iIiIh4cAF3AH+Ij///+IiIiOh4/3ABcYB//4iP/4iIiOh4//9wB3EHf///h4iOiI + h4j///cAgXEA//+HAXju6Hj////4AA93d///cRF4iHj/////+AAACIf//4d4j4j///////gAAAAI//// + j//////////4AAAACP////iIiIiIiIiP+AAAAAj4iIj/////////j/gAAAAI///////////////4AAAA + CP////iIiIiIiIiP+AAAAAj4iIj/////////j/gAAAAI///////////////4AAAACDMzMzMzMzMzMzMz + OAAAAAiIiIiIiId3d3czMzgAAAAIiIiIiIiHd3d3MzM4AAAACIiIiIiId3d3d3d3eAAAAAAAAAAAAAAA + AAAAAAAA//4D///4AP/4AAAD+AAAA/gAAAP4AAAD8AAAAfAAAADgAAAAgAAAAAAAAAAAAAAAAAAAAQgA + AAMYAAADCAAAAwAAAAMAAAADgAAAA+AAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gA + AAP4AAAD+AAAA/////8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAIAA + AAAAgAAAgIAAAAAAgACAAIAAAICAAICAgADAwMAA/wAAAAD/AAD//wAAAAD/AP8A/wAA//8A////AAAA + AAiIiAAAAHd3eI7nd3AAiIj4jud3cAB4iIj/iAeICI+I////iOeHj/////ju53h4///4iOh/d4+I/4jo + iHB3f/h4iIj/cPh/93iI//9wAI/4/////3AAj///////cACP//////9wAIiIh3dzM3AAiIiHd3MzcACI + iIiId3dw/g///8AB/g/AAcABwADAAYAAwAAAAIAAAAAAAAABAAAAAQABAAEAAcABAAHAAcABwAHAAcAB + wAHAAcABwAHAASgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAACAgIAqp5WAPLK + pgACXlYAVp7WAFbe/gD+vn4AAl5+AP7e1gACPioAgoKCAFb+/gCqfioAVr7WAFZ+fgACPlYAAh4qAMLe + wgCq3tYApqKiAPL6/gBWnqoAqr7WAKqefgBWXlYAVl5+AFY+KgCq/v4Aqn5WAFa+/gBWfqoAVj5WAFYe + KgD+3qoAqt7+AKq+qgD+/v4Aqp6qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJhYZDhkZ + CCYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYICg4EHR0EDhMUJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJBMODQUdDR0dHRUZJSYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJhgYGBgYGBgYGBgaHxUFIiINDQ0NHR0NHgkgGhoaGhoaGiYmJiYmJiYmJiYmJiYmJhgkJCQkJCQk + EQ4VBSIiIiIdDQ0NDQ0dHQ0OCggkJCQkGiYmJiYmJiYmJiYmJiYmJhgkJCQkJAgKDgUFIiIiIiIiDQ0N + DQ0NDRUOHhkTFCQkGiYmJiYmJiYmJiYmJiYmJhgkJCQUEw4NBQUiIiIiIiIiHQ0NDQ0NBBkQDx4EGSUU + GiYmJiYmJiYmJiYmJiYmJhgkFCMOBAUFBSIiIiIiIiIbIg0NDQ0NBBkQDwMVHR4OICYmJiYmJiYmJiYm + JiYmJhgWChUFBQUiIiIiIiIiIiIbFCIiDQ0NBB4JEBkHDR0NByMmJiYmJiYmJiYmJiYmERoeBQsFBSIi + IiIiIiIiGxsUFBQUIh0NDR4PEBkDFR0dHQ4RJiYmJiYmJiYmJiYIGQ0FBQUiIiIiIiIiIiIbFBQUFBQk + JBQiHQQZJg8DFR0NHQ0ZESYmJiYmJiYmJiYTDQsFBSIiIiIiIiIiIhsUFBQUFCQkFBQUFCIEBw8HBB0N + DR0eCiYmJiYmJiYmJiUYBQUiIiIiIiIiIiIbFBQUFBQkJCQUFBQUFBQiHQQEDQ0NDR0EGSYmJiYmJiYR + GB8KIiIiIiIiIiIiGxsUFBQUFCQkFBQUFBQUGxsbIiIdDQ0NDR0EGSYmJiYmJiMfChMjEiIiIiIiIiIb + FBQUFBQkJCQUFBQUFBQbGxsiDQ0iBQ0NDR0EGSYmJiYkIxgTIxYlEyIbIiIiIhsUFBQUFCQkFBQUFBQU + FBsbIg0iDQQdIiIFHQ0OCiYmJiYjGCMjFhMKCg4bGyIiGxQUFBQUJCQUFBQUFBQUGyINDQ0EBAQEHSIF + FQ4jFCYmJiYKEyMTCgokJh8KGxQUFBQUFCQkJBQUFBQUFCIiDQ0NDR0iDQ0NBQ0OEBQmJiYmJiYYCgoK + GCYmJgojCiMUFBQUJCQUFBQUFBQUFCINDSIiBA0NBRsNDgoIGiYmJiYmJiYaEAofEyYmJgokCBMKESQk + JBQUFBQUFBsWIiIEDSINBA0dBRUKFiQkGiYmJiYmJiYaJgoaHxQmJgokJCQIEwoUJBQUFBQUIg0NDQQE + BA0iIgUVDiMUJCQkGiYmJiYmJiYYEAofEB8RJgokJCQkJBEKExQUFBsiDRYiIiINBAQFDQ4lFCQkJCQk + GiYmJiYmJiYRGB8KEBAQChgkJCQkJCQUEQojGxsNDSIiIh0iIg0OExQkJCQkJCQkGiYmJiYmJiYmCBoZ + ChAQEBAkJCQkJCQRChoQGRYiDQ0NDQ0FFQoIJCQkJCQkJCQkHyYmJiYmJiYmJhEfGAofEBAkJCQkJBEQ + EBAQJhojIiIiBRUOFiQkJCQkJCQkJCQkHyYmJiYmJiYmJiYUChgKChgkJCQkJAgaIBofGAoKChUVDhMk + JCQkJCQkJCQkJCQkHyYmJiYmJiYmJiYmJggTChgkJCQkJBQTGAoKCiUIJBEjFCQkJCQkJCQkJCQkJCQk + HyYmJiYmJiYmJiYmJiYmJgokJCQkJCQUIxMRJCQkJCQkJCQkJCQkJCQkJCQkJCQkHyYmJiYmJiYmJiYm + JiYmJgokJCQkJCQkJCQkFhYWFhYWFhYWFhYWFhYWFhYWJCQkHyYmJiYmJiYmJiYmJiYmJgokJBMWFhMT + FiQkFCQkJCQkJCQkJCQkJCQkJCQWJCQkHyYmJiYmJiYmJiYmJiYmJgokJCQkJCQkJCQkFBQUFBQUFBQU + FBQUFBQUFBQUJCQkGCYmJiYmJiYmJiYmJiYmJgokJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk + GCYmJiYmJiYmJiYmJiYmJgokJCQkJCQkJCQkFhYWFhYWFhYWFhYWFhYWFhYWJCQkGCYmJiYmJiYmJiYm + JiYmJhMkJBMWExMWEyQkFCQkJCQkJCQkJCQkJCQkJCQWJCQkGCYmJiYmJiYmJiYmJiYmJhMkJCQkJCQk + JCQkFBQUFBQUFBQUFBQUFBQUFBQUJCQkGCYmJiYmJiYmJiYmJiYmJhMkJCQkJCQkJCQkJCQkJCQkJCQk + JCQkJCQkJCQkJCQkGCYmJiYmJiYmJiYmJiYmJhMMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM + GCYmJiYmJiYmJiYmJiYmJhMhISEhAgICAgICBgYGBgYXFwEBAQEBHBwcHAwMDAwMGCYmJiYmJiYmJiYm + JiYmJhMhISEhAgICAgIGBgYGBhcXFwEBAQEcHBwcHAwMDAwMGCYmJiYmJiYmJiYmJiYmJhMhISEhAgIC + AgIGBgYGBgYXFwEBAQEBHBwcHAwMDAwMGCYmJiYmJiYmJiYmJiYmJhMTExMTExMTCgoKCgoKCgoKCgoK + GBgYGBgYGBgYGBgYGCYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYm////////X43//////////////4H////////+AH////////gAP//////A + AAAAH////8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAA//wP+AAAAAB//A/wAAAAAD + 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 + HhETIg8eDw8PDyEWDAQMBQwcDB0kDx4KJSUJGRATJQoeHh4RExYPDw0hDCEWDAQcIRUTCB4eHgolJRgK + IyUYGB4eHh4eIgoSDQwcISEhIRUKCB4eHh4eCiUlERgKIxAQHh4eHhYYEBAKEhwcHBUKER4eHh4eHh4K + JSUlCAoKGRgeHh4eGBAJCRgKFQwKIg8eHh4eHh4eHgolJSUlJREKGB4eHh4WGAoKJAgIFg8eHh4eHh4e + Hh4eCiUlJSUlJSUKDx4eHh4PCB4eHh4eHh4eHh4eHh4eHh4KJSUlJSUlJQoeHh4eHh4eERERERERERER + EREREREeHgolJSUlJSUlEx4RIhEiER4ICAgICAgICAgICAgIER4eEyUlJSUlJSUTHh4eHh4eHh4eHh4e + Hh4eHh4eHh4eHh4TJSUlJSUlJRMeHh4eHh4eEREREREREREREREREREeHhMlJSUlJSUlEx4RFiIRFh4I + CAgICAgICAgICAgIER4eEyUlJSUlJSUTHh4eDx4eHh4eHh4eHh4eHh4eHh4PHh4TJSUlJSUlJRMLCwsL + CwsLCwsLCwsLCwsLCwsLCwsLCxMlJSUlJSUlEyAgICAgIAICBgYGBhcBAQEBGxsLCwsLEyUlJSUlJSUT + ICAgICAgAgIGBgYGFwEBAQEbGwsLCwsTJSUlJSUlJRMTExMTEwoKCgoKCgoKCgoKChgYGBgYGBMlJSUl + JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl//4D///4AP/4AAAD+AAAA/gAAAP4AAAD8AAAAfAA + AADgAAAAgAAAAAAAAAAAAAAAAAAAAQgAAAMYAAADCAAAAwAAAAMAAAADgAAAA+AAAAP4AAAD+AAAA/gA + AAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/////8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAAAAAh4qAKqeVgBWntYAql4qAFbe/gBWnqoAVn5+AMLewgCmoqIAVj4qAFa+ + 1gCqfioA8vr+AKq+qgCq/v4AVn6qAAI+VgCqvtYA/r5+AFZeVgCq3v4AgoKCAP7e1gCqnqoAVr7+AKp+ + VgD+/v4A8sqmAFY+VgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0dHR0dHR0NBQoIFh0dHR0dHRUVFRMGFAQYGA8TExMdHR0IFggK + DhQUGBgPEAUcHR0dBgoUFBQUDAwUAgAFChcdFwoOFBQODAwaDA4CAhgFCBwRDg4MDBoMDA4UGAQEBRwI + FRcMGhoMDBQKCgQCEwwcFQgaEREMDhQKGAoIFhMdFRwJDAwIExEECgUHGhoTHQwIExoaFRMICA0aGhoa + Ex0dHQgMFhYWFhYWFhYWGhMdHR0IGhoaGhoaGhoaGhoTHR0dCBoWFgwMDAwMDAwaEx0dHQgbGxISEgEB + GQsLAxMdHR0IGxsSEhIBARkLCwMTHR0dCAgICAgICAgVFRUVFR3+D1ybwAH+D8ABwAHAAMABgADAAAAA + gAAAAAAAAAEAAAABAAEAAQABwAEAAcABwAHAAcABwAHAAcABwAHAAcABKAAAADAAAABgAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Eyw2ui9xi/krZXzyDB0jogAAACUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQ0YG347cIDZT6/U/1DD8v9Rwu7/Qp7C/yJR + Zc0HEhZsAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIECgtlMFtozWa60P984/7/WMn2/026 + 5/9Qvur/U8f1/1HA7P87jq/5Gj9NvwABAVIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABYV1L/WFdS/1dWUf9XVlH/VlVQ/1VUT/9UU07/U1JN/1JRS/9QUEr/OTk1/yxDSf9Yo7n/e+L1/4ns + //+C3/7/VL3n/0q45P9OuuX/Trrl/1C/6/9Tw/H/Trnj/zd8l/8gMDX/Ly4p/zs5M/86ODL/OTcx/zg2 + Mf84NTD/NzUv/zc1L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABYV1L//////////////////////////////////v7+/9PT0/9lcnb/VJir/3Xb + 8/+C6P//huT//43j//+Q4v3/YMXs/0e34/9PuuX/Trrl/0665f9Ou+b/UL7q/1LD8P9Ltt7/PnqT/3F6 + ff/i4+T//////////////////////zc1L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYV1L///////////////////////7+/v/k5OT/fYWI/0uD + lP9u0+z/f+n//4Dh//+H4f//juP//5Xm//+g6P//gdX1/0i35P9MueX/Trrl/0665f9OuuX/Trrl/063 + 4v9Bk7b/MnKN/zV9mv89a37/kZaX/+vs7P///////////zc1L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYV1L/////////////////6+vr/5uf + of9MdYL/Y8Pf/33s//9+4///gt///4rh//+R4///meX//6Dn//+r6///qun9/2fH7P9DteL/Tbnk/0+6 + 5f9OuuX/T73o/0ekyv8uYXn/EB8o/x9FVv87jKz/QZ3B/0tpdf+tr7D/7+/v/zc1L/8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZWFP///////Ly + 8v+tsLH/WXR+/1Wqwv946f//fef//37e//+G4P//juP//5Xj//+c5v//o+j//6vq//+z7P//wvL//67n + +v9hw+n/QbTi/0i35P9OuuX/T73p/0WexP8yaoT/Cxcc/x1AT/8lUmX/PpW3/1bN+/84hKP/YHN5/ysq + Jf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABaWVX/wcHB/2t9hP9Gkqb/b9///3vs//983///gt7//4ni//+R5P//mOX//5/m//+n6f//ruv//7bt + //++7///yPH//9f3///E7vr/gM/u/0y55f9AteP/S7vm/0qq0P85fJr/FzE9/xQrNv8vZH3/J1pu/0y1 + 3/9Xz///Tbji/ylbbv8DBwlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACYyPD//SoeX/2bR6/968P//euT//33d//+F4P//jeL//5Tk//+b5v//o+j//6rp + //+y6///uu7//8Lw///K8f//0vP//9r2///t/f//8fz//8Lo9v93y+v/Rrfk/0Kz4P8+jK7/JEtd/wkT + GP8wZoD/JVJl/0Gavf9RwO3/UsPw/1PH9v8pYHfmAAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAIyJJVstcw9X/de3//3no//973v//gd///4fh//+P4///luX//57n + //+m6f//rev//7Xs//++7///xfH//83z///V9f//3/f//+b5///w+v/////////////t+f3/q+D0/2XG + 6/8/p9P/LGeC/wgOEf8hRVf/JVJl/z2Ttf9Rwe7/Trrk/1HC7/9NuOP/FTI/twABADIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRYcaFazy/9++f//eN///33d//+E4f//jOL//5Lj + //+a5v//oej//6np//+x6///uO3//8Hu///J8f//0vP//9r1///h9///6vr///X8///8/v//+/7///X9 + ///0/f//7/z//8/x/P+S2/f/TKXJ/yFZc/8cPk7/Jlhs/0es0/9QwOz/Trrl/0675v9TxvT/NX2b8Awa + II8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKDtC2HDQ7P9+6P//gN7//4jh + //+P5P//l+b//53n//+l6P//rOv//7Ts//+87v//xPD//8zx///V9f//3vb//+b4///v+///+P7///z/ + ///4/f//8fz//+n5///i9///3Pb//9v3///S9f//suv9/3nL6/9EnsH/QKXN/0686P9Ou+b/Trrl/066 + 5f9SwvD/RKLH/yFPYdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBISEq1JRUP1goyQ/4fZ + 8f+B5f//iuH//5Lk//+Z5v//oej//6jp//+w6///t+7//7/w///H8v//0PT//9j1///h9///6/r///P8 + ///7/v//+/7///T9///u+///5vn//9/2///Y9f//0PP//8vy///G8v//wfH//6nn/v+G2vn/Zsrw/0y5 + 5P9MuOT/Trrl/0665P9Swu//R6rR/yhgducAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQFOLi0t5HNx + cf+opKL/wr+//6HX6P+L6P//lOT//5zn//+l6P//rOr//7Pr//+77f//w/D//8zy///U9P//3Pb//+T3 + ///u+///+P3///z+///5/v//8fv//+v6///k+f//3Pf//9T1///O8v//x/L//8Hw/v+88P//s+v7/2y/ + 4P9avub/k+P+/37Y9/9XwOn/TLjk/0655P9TxvT/R6fO/yRWat8AAAAAAAAAAAAAAAAAAAAAAAAAAwAA + AEZCQUHrmZeW/7y7uv/Ixsf/sayq/4OWnviN2O3/pvP//6bo//+v6///uO3//77u///G8P//z/P//9j1 + ///g9///6Pn///L7///6/v//+/////b9///u+///5/n//+D4///Z9v//0fP//87z///I8///wPL//5vY + 7v92yOf/gNPx/2C52v9Fps7/Z8nv/4/m//+D3/z/Z9H2/1jL9v9QvOj/KmR84gsZIIoAAAAAAAAAAAAA + AAAAAAAABQUFRDw7O8yzsrL/wL+//8C/wP+WlZb8Pj08qwAAAHBScHj/t/v9/774//+67v//wu///8rx + ///T8///2/b//+T5///t+///9/3///7+///6/v//8vv//+r6///j+f//3Pb//9X1///P9P//z/X//7/w + /v+W2vL/fcrl/2zA4f9fs9X/Va7R/1Ks0f9WrM3/RKbO/2nL8f+E7v//euX8/1Kkvf8eRFHBAAMESwAA + AAoAAAAAAAAAAAAAAAAAAAAAMzMzsJiYmPewsLD/paSm/3x7fPcSEhJ/AAAAAwAAAABIR0b/b4uT/8Lx + 8//Z////0/n//9X0///e9v//6Pn///L8///6/v///f////f+///u+///5/n//+H3///Z9v//0/T//83z + ///C7/3/sOj6/3/J5f9csdP/abnZ/0213/97z+3/m+b7/3fL6f9et9r/Wbjd/2nR9P9fu9D/WH+L/ygp + Jv8AAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0pK5HFwcv9zcnT/iIiK/g4ODp8AAAAAAAAAAAAA + AABvbmr/t7e3/3R/gv+hu73/5f////T////t+///9v3///3////7/v//8/z//+v7///l+P//3fb//9f1 + ///S9P//0Pf//9D5//+z5fT/W7rg/1264P+e3vH/g9Ty/0qv2P9tw+P/bMjn/3ra+P+L9v//bcvp/1KF + lP+EjZD/2tra/0E/Of8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx4g6CEgI/93dnj/TU1P/QAA + AGcAAAAAAAAAAAAAAABxcG3//////+fn5/+anJ3/foSH/8vT0/////////////f+///v+///6Pn//+L3 + ///a9v//1PT//9b4///G8f//j8/n/4bU7v+G1PD/T6nO/1K23f+R5f//eMvo/1Kr0P9duNv/Ysfu/27T + 8v9NkJ7/dIKH/8bGxv///////////0JAO/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQkK1xEQ + E/96eXv/Ozo+/wUFB78AAAANAAAAAAAAAAB0c3D/////////////////3t7e/5CRkf+PkI//5+3v//// + ///p+///3fX//9f0///S9P//zPT//5nc9P9wvdz/fb/a/2a31v9LqM7/Vq7R/02ozf9St+D/gNf1/4Tk + +P933fz/VqC5/2R6gP+4urv/9vb2/////////////////0RBPf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAgIClwsKDe53d3r/T05R/xUUF/4ICAi2AQICKAAAAAB3dnL///////////////////////v7 + +//T09P/foCA/5Wgo//f+fv/4P///87z///J8f//htbz/1Wz2v+MzOP/p+f5/6Lm+P+N1/H/csTh/1So + zP9Vr9T/feD//2m+0/9Vdn7/qayt/+3t7f///////////////////////////0VDPv8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAKwEAAatDQ0b/jIuN/yMiJv8aGR3/EBAS4wQEBIpgYFz//v7+//// + ////////////////////////9vb2/8rLy/9scXL/mre+/8n5/f/C9f//X7XZ/1S54v+g5/z/p+3//5Di + /f9wyu3/gNj1/4np+v9yyuL/UXuJ/4+Tlf/r6+v//////////////////////////////////////0ZE + P/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMEAwXPbWtu/4OChP8oJiv/Gxof/xoZ + HP4XFhn////////////////////////////+/v7/1dXV/3Rzc/8xMTH/FBUX/1lsc/+eztn/ldjs/1y0 + 1v9VtNn/Xrjb/1a02P9gvt//dtLq/1qUov90fH//3t7e//7+/v////////////////////////////// + /////////////0dGQP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnBAMFtmFh + Y/iNjI3/S0pO/ygnK/8fHiH////////////////////////////U1NX/GBcb/xoZHf8cGx//GBcb/xMO + Ev81OD7/k7W//5zd6/+E1/X/gNr4/3vW8P9oq7z/YnV6/8PDw/////////////////////////////// + /////////////////////////////0lHQv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAACAAAAHM1NTXQfHt8+Ht6fP9gX2L////////////////////////////e3t7/MTA0/y8t + Mv81NDj/R0ZJ/19fYf9zcXL/e3Z1/3N9gP9qlaH/b6e1/2J+hv+lpaX///////////////////////// + /////////////////////////////////////////////0tJQ/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAaTExMaplZWT///////////////////////// + ///19fb/lJSW/2VlZ/91dHX/hISE/4mJif+pqan/29vb///////U1NT/v7+///Ly8v////////////// + /////////////////////////////////////////////////////////////0xKRf8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABycW7///////// + ////////////////////////8fHx/7i4t/+hoqH/0tLS//r6+v////////////////////////////// + /////////////////////////////////////////////////////////////////////////////0xM + Rv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACJiIX//////////////////////////////////////////////////////8fHxv/Hx8b/x8fG/8fH + xv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG//// + /////////////05NSP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACLiof///////////+Uk5H/x8fG/8fHxv+Uk5H/lJOR/8fHxv///////////+vr + 6v////////////////////////////////////////////////////////////////////////////// + ////////x8fG/////////////////1BOSf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNjIn///////////////////////////////////////// + /////////////+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr + 6v/r6+r/6+vq/+vr6v/r6+r/6+vq/////////////////1BQSv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPjoz///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////1JRTP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSkY7///////// + /////////////////////////////////////////////8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fH + xv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/////////////////1NS + TP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACUk5H///////////+Uk5H/x8fG/5STkf+Uk5H/x8fG/5STkf///////////+vr6v////////////// + ////////////////////////////////////////////////////////////////////////x8fG//// + /////////////1RTTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACWlZP//////////////////////////////////////////////////////+vr + 6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr + 6v/r6+r/6+vq/////////////////1VUT/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXlpT///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////1ZVUP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZmJb/qnc1/6p3Nf+qdzX/qnc1/6p3 + Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3 + Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/1dWUf8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACamZf/9dmn//XZ + p//12af/89el//HUov/v0p7/7c+b/+vLl//oyJP/5cSP/+LAiv/eu4X/27iA/9i0fP/Vr3b/0apx/86m + bP/Komb/x5xh/8SZXP/AlFf/vZBS/7qLTf+3iEn/tYRF/7KBQP+vfz3/rXw6/6t5OP+qdzX/qnc1/1dX + Uf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACcm5n/9dmn//XZp//12af/89ek//HUov/v0p7/7s+b/+vMmP/oyJP/5cSO/+HAiv/fvIX/27eA/9iz + e//Ur3b/0apw/86ma//KoWb/x51h/8OZXP/AlFf/vY9S/7qMTf+3iEn/tIRF/7KBQf+wfj3/rXs7/6x5 + N/+qdzX/qnc1/1hXUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACdnJr/9dmn//XZp//12af/9Nel//LVov/w0Z7/7c+c/+vMl//oyJP/5cSO/+HA + iv/fvIX/3LeA/9ize//Vr3b/0apx/86mbP/KoWb/xp1h/8SYW//AlFb/vZBS/7qMTv+3iEj/tIRF/7KB + QP+wfj3/rnw6/6t5N/+qdzX/qnc1/1hXUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACdnJr/nZya/5ybmP+amZf/mJiW/5eWlP+Uk5H/kpGP/5CO + jP+NjYn/iomH/4iHhP+FhID/goF9/39+e/98e3j/eXh1/3Z1cv9zc2//cW9s/21saP9qaWb/aGdj/2Vk + YP9jYl7/YWBc/15dWP9cXFf/W1pV/1lYVP9YV1L/WFdS/1hXUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA//////////////+B/////////gB////////4AD//////wAAAAB/////AAAAAH//A/8AAAAAf + /8D/wAAAAB//wP/AAAAAH//A/8AAAAAP/8D/gAAAAAf/wP8AAAAAA/+A/wAAAAAD/wD+AAAAAAP/APgA + AAAAA/4A8AAAAAAD+ADAAAAAAAPwAMAAAAAAA8AAwEAAAAAPwADBwAAAAB/AQMHAAAAAH8HAwMAAAAAf + wcDAQAAAAB/AwMAAAAAAH8BA4AAAAAAfwADwAAAAAB/gAPgAAAAAH/AA/gAAAAAf+AD/wAAAAB/+AP/A + AAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf + /8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/////////8D///////////// + /////////////////////////////ygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAASEyUqbzJwiOhCoMb/L3GK7A8iK3oAAQIXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACBg8RUjdnc8RrxNv+XdD8/1HE8/9Uyvj/SK3V/yZdcsoGERReCRQYAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4NTD/ODUw/zg1MP84NTD/ODUw/zg1 + MP84NTD/Li4r/ytCSP9fssX/huz//4zq//9Ywev/Sbfj/0+75/9SxPH/U8Ty/0Oewv8nRlH/Kywq/zg1 + MP84NTD/ODUw/zg1MP84NTD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5dWP/9/f3///////// + ////////2NjY/3yNkv9cobL/e+P8/4fq//+N5P//meb//2/M8P9GtuP/T7rl/0665f9Ou+b/U8Px/0mr + 0/82b4f/cIaO/9HS0v//////+vr6/15dWP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYWBc//39 + /f//////6urr/5Ganf9alqX/dN3x/4Xu//+I5P//j+L//5nm//+p6///oOT7/1O95/9DteP/Trrl/1C9 + 6P9Lr9j/LF51/xs6Sf81fZr/Romj/4iTmP/g4OD/YWBc/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABjYl7/8vLy/6Ooqv9dipj/aM7j/3/t//+D5f//i+L//5Tj//+f5///qer//7Ps///H8///peL3/1W9 + 5v8+s+L/Srzp/0yt1f8sXXT/DyAo/yVRZP9Bmrz/T7zn/059kP9ERkT/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAk1PTf9nho//W7nL/3nt//9/5v//hd7//4/j//+Z5v//ouj//63q//+47v//wvD//87y + ///h+v//0fD6/4nR7v9Mu+b/QrPg/zh+nP8TJi//I0te/yxlfP9PvOf/V9D//z6Nrf8JExleAAAAAAAA + AAAAAAAAAAAAAAAAAAANHiRtTJ2q/3Tq/P9+7f//geH//4jg//+S5P//nef//6fq//+x7P//ve7//8fy + ///R9P//3fb//+r5/////////f7//8fq9/90zvD/QKLN/xQ3Rv8VKjX/KFtv/0is0/9Swu//Vs///zBy + jeEBAgJBAAAAAAAAAAAAAAAAAAAAJDdyhNWA+v//fuT//4Tg//+O4///l+X//6Ho//+s6v//tu3//8Hv + ///M8v//2PX//+L3///v+///+v3///r+///1/f//8/3//9/4//+j4/r/U6C//yRZcP8vdpL/Trvn/0+8 + 5/9Rwu//SrHa/xo8SbMAAAAAAAAAAgcGBVUyLi3Lc6u8/4Lr//+H4f//kuT//5zn//+m6P//sOz//7ru + ///F8f//0PP//9z2///p+f//9fz///v+///3/f//7fv//+P3///Y9P//1PX//9L3//+28P//etHy/1S+ + 5/9KuOX/Tbnk/1C96f9PvOj/LnCJ5AAAAAkVFBSTY2Fg+rKppv+30tv/kOr//5Tm//+g5///q+r//7Tr + //+/7///yvL//9X1///g9///7vv///r+///7/v//8/v//+n6///e+P//1fX//8/1///E8f7/u/D+/5vc + 8/9mwun/h9/9/2vM8P9OueX/UcPw/1LB7v8rZX3jHh4ejJCOjf/JyMj/vrq6/2tsbdt1q7j/s/7//6/s + //+57P//xO///8/z///b9v//5vn///P7///8/v//9/7//+77///k+P//2fb//9P1///M9P//tuz6/5XX + 7f9twOD/Yrvd/0mnzP9gwOX/ieb//3rn//9ayPD/Lm+J3AkXHWqMjIzsv76+/56dn/84ODiYAAAAKUdM + TP+ayc3/0////9H6///T8///4Pf//+37///5/v///P////T8///p+f//3/f//9f1///O8///w/H+/5XW + 7v9rvNv/XLjd/3DF5f92yeX/XbTX/1W34P9v2vj/Yq28/0JTV/8BAwMtAAAAAHZ1d/eHhoj/Ly8vrQAA + AAMAAAAAeHd0/5yfoP+Lnp//1+/v//r////3////+/////n9///v/P//5Pj//933///Z9///zPT+/8X0 + /f96yef/Yr3h/5DY8P9VtNv/aMDi/3zb+v+E7P7/Y7bQ/2mIkf+6vLz/eXh1/wAAAAAAAAAANDM192Vl + aP8JCAmTAAAAAAAAAAB8e3j//v39/9jY2P+Vl5n/r7Ky//j5+f//////6vn//+D2///Z9v//0vb//6/k + 9v+Ex+L/ccXj/1Su0v9TtNr/f9b0/27G5P9pzvL/X7na/2KOl/+mqqv/9fX1//v7+v98e3j/AAAAAAAA + AAAsKy3yamls/xUUF+8BAgJhAAAAAH9+e//+/v3////////////Kysr/kpSU/7vCxP/q////2/z//8vz + //+I1PD/ccDe/5bX7P+Czuj/ar3d/0+ozf9myO7/geD3/2GYpv+UnJ7/6Ojo////////////+/v6/39+ + e/8AAAAAAAAAAA0MDrNvbnH/SklN/w4NEfwICQqsXVxZ//r6+v/9/f3////////////7+/v/sbKy/3J9 + f/+12t//vvb//1a13f93y+r/oOf5/4LW9P+A3Pv/gd30/16dr/+AjZL/39/f//////////////////// + ///7+/v/goF9/wAAAAAAAAAAAAAAJyIhIsh6eHv/UU9S/x8eI/8bGhz//v7+/////////////////8XF + xv9UU1X/FhMW/yMmK/9xj5j/k9bp/2/K7P9qyOz/aMnq/2Cqv/9zi5H/yMnK//////////////////// + //////////////v7+/+FhID/AAAAAAAAAAAAAAAAAAAAGxgYGZJjY2Psa2pt/1RTVf/8/Pz///////// + ////////YmFk/yYlKv8yMTX/Pzw//1lUV/9/ioz/dqOw/3K5zf9ri5P/t7y9//n5+f////////////// + ////////////////////////+/v7/4iHhP8AAAAAAAAAAAAAAAAAAAAAAAAAAAMDAzIpKSmEZWVl//7+ + /v/////////////////Dw8P/YWBj/3V0df+MjIz/rKur/+bm5v/f4OD/wMHB//Dw8P////////////// + ///////////////////////////////////7+/v/iomH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACJiYX/9fX1///////////////////////u7u7/2tra//////////////////////////////////// + //////////////////////////////////////////////v7+/+NjYn/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJCOjP/8/Pz//f39//7+/v/+/v7//v7+//39/f/7+/v/0NDP/9DQz//Q0M//0NDP/9DQ + z//Q0M//0NDP/9DQz//Q0M//0NDP/9DQz//Q0M//0NDP/9DQz///////+/v7/5COjP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAkpGP///////U1NP/sbCv/8/Pzv+xsK//19bW///////o6Oj/5OTj/+jo + 6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/l5eX/0NDP///////7+/v/kpGP/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUk5H//v7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////v7 + +/+Uk5H/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJeWlP/+/v7///////////////////////// + ////////0dHQ/9HR0P/R0dD/0dHQ/9HR0P/R0dD/0dHQ/9HR0P/R0dD/0dHQ/9HR0P/R0dD/0dHQ/9HR + 0P//////+/v7/5eWlP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmJiW///////U1NP/yMjI/7Oy + sf/JyMj/xMTC///////p6ej/5eXk/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np + 6f/m5ub/0dHQ///////7+/v/mJiW/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACamZf///////7/ + ///8////+Pz///z////7//////////3////5/f//+v7///r+///6/v//+v7///r+///6/v//+v7///r+ + ///6/v//+v7///n9///4/P////////////+amZf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyb + mP+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3 + Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/5ybmP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAnZya///irv//46///+Gs//zeqP/52qP/9tae//LQl//ty5D/6cSK/+S+gv/ft3z/2rFz/9aq + bP/QpGT/zJ5d/8eXVf/DkU7/v4xI/7qHQv+3gjz/tH44/7J7NP+ueTT/nZya/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACdnJr//+Ku///jr///4az//N6o//nao//21p7/8tCX/+3LkP/pxIr/5L6C/9+3 + fP/asXP/1qps/9CkZP/Mnl3/x5dV/8ORTv+/jEj/uodC/7eCPP+0fjj/sns0/655NP+dnJr/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJybmP+amZf/mJiW/5eWlP+Uk5H/kpGP/5COjP+NjYn/iomH/4iH + hP+FhID/goF9/39+e/98e3j/eXh1/3Z1cv9zc2//cW9s/21saP9qaWb/aGdj/2VkYP9jYl7/YWBc/5yb + mP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA//4D///4AP/4AAAD+AAAA/gAAAP4AAAD8AAAAfAAAADgAAAAgAAAAAAA + AAAAAAAAAAAAAQgAAAMYAAADCAAAAwAAAAMAAAADgAAAA+AAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gA + AAP4AAAD+AAAA/gAAAP4AAAD+AAAA/////8oAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMmKU9DjabLRqvS8CJQY5UGEBMhAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAf357/3x7eP95eHX/YGNi/094gP+A2uv/fuD//0i86/9TxvT/P4ik/0FQ + Vf9bW1j/Xl1Y/wAAAAAAAAAAAAAAAJ2cmv/d3t//haKp/3DI2f+P8P//oOz//7Dr/f9qxur/Qrvs/zmH + qP8jTWD/WZOp/0dOTv8AAAAAAAAAAAAAAABnc3T/a7zJ/4Pt//+U6///pOn//7ru///U9f//6Pn9/6ni + +P9MocT/ES49/z6Ss/9Pvun/ESgxYgAAAAAUEhNacsTT/472//+Z5f//rev//8Lw///c9v//8/v///v+ + ///1/v//yvT//2iqw/9EpMn/U8r7/zyOruM8OzqGS0pN/4y2wP+q9///ufD//8zy///m+f//+f7///P8 + ///i+v//xvD9/6Tg8/91yev/c9r+/2HQ9v8tbIa9S0pN/0xLS4+AgH7/l6+v/+D6+//9////+f///+37 + ///Y9v7/rOP1/3rJ5/9mw+j/cNLx/2WtxP9FUlP/AggKDktKTfoLCwx+nZya//////+/wMD/yMjI/+3/ + //++8f//k9Xs/2/E5P9oyu7/bLvV/4egqP/e39//YWBc/wAAAAArKiyhSkpN/z8+P//s7Oz/9vb2/6Ki + ov9cZWf/h8TY/37Z+v91yeT/fKCq/87R0v///////////2FgXP8AAAAAAAAABysrK29fX1////////// + //+Af4H/WldY/5OVl/+UqK3/tr2///////////////////////9hYFz/AAAAAAAAAAAAAAAAm5qY//Pz + 8//k5OT/4ODg/+Tk5P/m5ub/6Ojo/+jo6P/o6Oj/6Ojo/+bm5f//////YWBc/wAAAAAAAAAAAAAAAJ2c + mv///////////////////////////////////////////////////////////2FgXP8AAAAAAAAAAAAA + AACdnJr//////+bm5v/m5ub/8vT2/+Xp7v/o7PD/6Ozw/+js8P/o7PH/5enu//////9hYFz/AAAAAAAA + AAAAAAAAnZya/+nMmP/vzZX/6MWM/+C7f//XsHP/z6Rm/8aYWP+9jUr/tYI9/655M/+pbiL/YWBc/wAA + AAAAAAAAAAAAAJ2cmv/pzJj/782V/+jFjP/gu3//17Bz/8+kZv/GmFj/vY1K/7WCPf+ueTP/qW4i/2Fg + XP8AAAAAAAAAAAAAAACdnJr/nZya/5ybmP+amZf/mJiW/5eWlP+Uk5H/kpGP/5COjP+NjYn/iomH/4iH + hP+FhID/AAAAAP4PSbvAAQAAwAF8wMAAwAGAAMAAAACAAAAAAAAAAQAAAAEAAQABAAHAAQABwAHAAcAB + wAHAAcABwAHAAcABAAQ= + + + + 124, 17 + + + 216, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAAWcAAAA4CAMAAAAWyckpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFAAAA//// + zry+zcbI9PP79fT7yMTq1tPvWU+/Y1rDZFvDbmXHb2bIeHDLenLMg3vPhX7QjYbTkIrUl5HXm5XZopzb + pqHdrKffsq3htrLjvbnlwb3ny8jr09Du3tzy4N7z6un36ej28/P0SE56naG4zc/Tjpaaqa+ytru9jJSX + 1EI100w/01VK0l9U0mhf0XFp0YR/0I2J0JeU3CQfz6Cez6qpzrOz////AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbXksQAAAAlwSFlzAAALEwAA + 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 + + + + 325, 17 + + + 455, 17 + + + 17, 36 + + + 56 + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAQAAAAAAAAAAAAAACAAAAAAIAAAICAAAAAAIAAgACAAACAgACAgIAAwMDAAP8AAAAA/wAA//8AAAAA + /wD/AP8AAP//AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAId3eAAAAAAAAAAAAAAAAAAAAAAAAAAA+HeId48AAAAAAAAAAAAAAAAAAAAAAA + D4eO6IiHeAAAAAAAAAAAAAAAAHd3d3d3B36IiIiIhwAAAAAAAAAAAAAAAH////+HfoiIiIiIiId///8A + AAAAAAAAAH////d+6IiIiIiIiHd3j/8AAAAAAAAAAH//+HjuiIiIiIiIh3B3d48AAAAAAAAAAH/4d+7o + iIiIiIiIh3B3fncAAAAAAAAAAHh37uiIiIiIj4iIh3AHeOh4AAAAAAAACHfu7oiIiIiP//+IiHcHd4jn + gAAAAAAAh47uiIiIiIj/////iHcHd4iIeAAAAAAAiO7oiIiIiP///////4dwd4iIdwAAAAAIfuiIiIiI + j/////////iHeIiIdwAAAAh3iIiIiIiI/////////4iIiIiIdwAAAId4iIiIiIj/////////iIiIjoiI + dwAA+HiIiIiIiI//////////iIiHiI7odwAAh4iIeHiIj/////////+IiId3fo53jwAAeIh48HeP//// + /////4iIiOiIjocPAAAAd3dwAHh4/////////4iIh4joh4hwAAAAAHeAAH/4eP/////4iIeIh4jneP9w + AAAAAHd/AH//iI////+IiHd4iOd4//9wAAAAcHcHgH///4eP//iIiIh36Hj///9wAAAAh3gAB3////+H + j4iIiIiIeP////9wAAAACAdwAA////hwB4iIiI53j/////9wAAAAAId4cA///4AAAAiIjneP//////9w + AAAAAA+Hd3///4AAd3d3d4////////9wAAAAAAAPh3////h3eIj4j/////////9wAAAAAAAAAH////+I + j/////////////9wAAAAAAAAAH//////+IiIiIiIiIiIj/9wAAAAAAAAAI/4iIiP////////////j/9w + AAAAAAAAAI////////////////////9wAAAAAAAAAI////////////////////9wAAAAAAAAAI////// + +IiIiIiIiIiIj/9wAAAAAAAAAI/4iIiP////////////j/9wAAAAAAAAAI////////////////////9w + AAAAAAAAAI////////////////////9wAAAAAAAAAIMzMzMzMzMzMzMzMzMzMzNwAAAAAAAAAIiIiIiI + iIiId3d3dzMzMzNwAAAAAAAAAIiIiIiIiIiId3d3dzMzMzNwAAAAAAAAAIiIiIiIiIiId3d3dzMzMzNw + AAAAAAAAAIiIiIiIh3d3d3d3d3d3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////9fjf//////////////gf////////4Af/////// + +AA//////8AAAAAf////wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAD//A/4AAAAAH + /8D/AAAAAAP/gP8AAAAAA/8A/gAAAAAD/wD4AAAAAAP+APAAAAAAA/gAwAAAAAAD8ADAAAAAAAPAAMBA + AAAAD8AAwcAAAAAfwEDBwAAAAB/BwMDAAAAAH8HAwEAAAAAfwMDAAAAAAB/AQOAAAAAAH8AA8AAAAAAf + 4AD4AAAAAB/wAP4AAAAAH/gA/8AAAAAf/gD/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/A + AAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf + /8D/wAAAAB//wP/////////A//////////////////////////////////////////8oAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAIAAAAAAgAAAgIAAAAAAgACAAIAAAICAAICA + gADAwMAA/wAAAAD/AAD//wAAAAD/AP8A/wAA//8A////AAAAAAAAAAAPh4ePAAAAAAAAAAAAAAAPh47u + h48AAAAAAAABEREREYiOiO5xERERAAAAB///h3iIjoiI6HeP9wAAAAf/+HiIiIiIiIcXeIcAAAAH+HiI + iIiPiIiHB3hxAAAA8XiIiIiIj/+Ihxd454AAAIeIiIiIiP//+OgReO54AAh4iIiIiP/////4h3iOhw+H + iIiIiI///////46IiIf3eIiIiI///////4iIjo7neIh4iIj///////iIiIiOeIiIgY////////iIiIiO + h4B4fweI///////4iIiIh4cAF3AH+Ij///+IiIiOh4/3ABcYB//4iP/4iIiOh4//9wB3EHf///h4iOiI + h4j///cAgXEA//+HAXju6Hj////4AA93d///cRF4iHj/////+AAACIf//4d4j4j///////gAAAAI//// + j//////////4AAAACP////iIiIiIiIiP+AAAAAj4iIj/////////j/gAAAAI///////////////4AAAA + CP////iIiIiIiIiP+AAAAAj4iIj/////////j/gAAAAI///////////////4AAAACDMzMzMzMzMzMzMz + OAAAAAiIiIiIiId3d3czMzgAAAAIiIiIiIiHd3d3MzM4AAAACIiIiIiId3d3d3d3eAAAAAAAAAAAAAAA + AAAAAAAA//4D///4AP/4AAAD+AAAA/gAAAP4AAAD8AAAAfAAAADgAAAAgAAAAAAAAAAAAAAAAAAAAQgA + AAMYAAADCAAAAwAAAAMAAAADgAAAA+AAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gA + AAP4AAAD+AAAA/////8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAIAA + AAAAgAAAgIAAAAAAgACAAIAAAICAAICAgADAwMAA/wAAAAD/AAD//wAAAAD/AP8A/wAA//8A////AAAA + AAiIiAAAAHd3eI7nd3AAiIj4jud3cAB4iIj/iAeICI+I////iOeHj/////ju53h4///4iOh/d4+I/4jo + iHB3f/h4iIj/cPh/93iI//9wAI/4/////3AAj///////cACP//////9wAIiIh3dzM3AAiIiHd3MzcACI + iIiId3dw/g///8AB/g/AAcABwADAAYAAwAAAAIAAAAAAAAABAAAAAQABAAEAAcABAAHAAcABwAHAAcAB + wAHAAcABwAHAASgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAACAgIAqp5WAPLK + pgACXlYAVp7WAFbe/gD+vn4AAl5+AP7e1gACPioAgoKCAFb+/gCqfioAVr7WAFZ+fgACPlYAAh4qAMLe + wgCq3tYApqKiAPL6/gBWnqoAqr7WAKqefgBWXlYAVl5+AFY+KgCq/v4Aqn5WAFa+/gBWfqoAVj5WAFYe + KgD+3qoAqt7+AKq+qgD+/v4Aqp6qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJhYZDhkZ + CCYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYICg4EHR0EDhMUJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJBMODQUdDR0dHRUZJSYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJhgYGBgYGBgYGBgaHxUFIiINDQ0NHR0NHgkgGhoaGhoaGiYmJiYmJiYmJiYmJiYmJhgkJCQkJCQk + EQ4VBSIiIiIdDQ0NDQ0dHQ0OCggkJCQkGiYmJiYmJiYmJiYmJiYmJhgkJCQkJAgKDgUFIiIiIiIiDQ0N + DQ0NDRUOHhkTFCQkGiYmJiYmJiYmJiYmJiYmJhgkJCQUEw4NBQUiIiIiIiIiHQ0NDQ0NBBkQDx4EGSUU + GiYmJiYmJiYmJiYmJiYmJhgkFCMOBAUFBSIiIiIiIiIbIg0NDQ0NBBkQDwMVHR4OICYmJiYmJiYmJiYm + JiYmJhgWChUFBQUiIiIiIiIiIiIbFCIiDQ0NBB4JEBkHDR0NByMmJiYmJiYmJiYmJiYmERoeBQsFBSIi + IiIiIiIiGxsUFBQUIh0NDR4PEBkDFR0dHQ4RJiYmJiYmJiYmJiYIGQ0FBQUiIiIiIiIiIiIbFBQUFBQk + JBQiHQQZJg8DFR0NHQ0ZESYmJiYmJiYmJiYTDQsFBSIiIiIiIiIiIhsUFBQUFCQkFBQUFCIEBw8HBB0N + DR0eCiYmJiYmJiYmJiUYBQUiIiIiIiIiIiIbFBQUFBQkJCQUFBQUFBQiHQQEDQ0NDR0EGSYmJiYmJiYR + GB8KIiIiIiIiIiIiGxsUFBQUFCQkFBQUFBQUGxsbIiIdDQ0NDR0EGSYmJiYmJiMfChMjEiIiIiIiIiIb + FBQUFBQkJCQUFBQUFBQbGxsiDQ0iBQ0NDR0EGSYmJiYkIxgTIxYlEyIbIiIiIhsUFBQUFCQkFBQUFBQU + FBsbIg0iDQQdIiIFHQ0OCiYmJiYjGCMjFhMKCg4bGyIiGxQUFBQUJCQUFBQUFBQUGyINDQ0EBAQEHSIF + FQ4jFCYmJiYKEyMTCgokJh8KGxQUFBQUFCQkJBQUFBQUFCIiDQ0NDR0iDQ0NBQ0OEBQmJiYmJiYYCgoK + GCYmJgojCiMUFBQUJCQUFBQUFBQUFCINDSIiBA0NBRsNDgoIGiYmJiYmJiYaEAofEyYmJgokCBMKESQk + JBQUFBQUFBsWIiIEDSINBA0dBRUKFiQkGiYmJiYmJiYaJgoaHxQmJgokJCQIEwoUJBQUFBQUIg0NDQQE + BA0iIgUVDiMUJCQkGiYmJiYmJiYYEAofEB8RJgokJCQkJBEKExQUFBsiDRYiIiINBAQFDQ4lFCQkJCQk + GiYmJiYmJiYRGB8KEBAQChgkJCQkJCQUEQojGxsNDSIiIh0iIg0OExQkJCQkJCQkGiYmJiYmJiYmCBoZ + ChAQEBAkJCQkJCQRChoQGRYiDQ0NDQ0FFQoIJCQkJCQkJCQkHyYmJiYmJiYmJhEfGAofEBAkJCQkJBEQ + EBAQJhojIiIiBRUOFiQkJCQkJCQkJCQkHyYmJiYmJiYmJiYUChgKChgkJCQkJAgaIBofGAoKChUVDhMk + JCQkJCQkJCQkJCQkHyYmJiYmJiYmJiYmJggTChgkJCQkJBQTGAoKCiUIJBEjFCQkJCQkJCQkJCQkJCQk + HyYmJiYmJiYmJiYmJiYmJgokJCQkJCQUIxMRJCQkJCQkJCQkJCQkJCQkJCQkJCQkHyYmJiYmJiYmJiYm + JiYmJgokJCQkJCQkJCQkFhYWFhYWFhYWFhYWFhYWFhYWJCQkHyYmJiYmJiYmJiYmJiYmJgokJBMWFhMT + FiQkFCQkJCQkJCQkJCQkJCQkJCQWJCQkHyYmJiYmJiYmJiYmJiYmJgokJCQkJCQkJCQkFBQUFBQUFBQU + FBQUFBQUFBQUJCQkGCYmJiYmJiYmJiYmJiYmJgokJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk + GCYmJiYmJiYmJiYmJiYmJgokJCQkJCQkJCQkFhYWFhYWFhYWFhYWFhYWFhYWJCQkGCYmJiYmJiYmJiYm + JiYmJhMkJBMWExMWEyQkFCQkJCQkJCQkJCQkJCQkJCQWJCQkGCYmJiYmJiYmJiYmJiYmJhMkJCQkJCQk + JCQkFBQUFBQUFBQUFBQUFBQUFBQUJCQkGCYmJiYmJiYmJiYmJiYmJhMkJCQkJCQkJCQkJCQkJCQkJCQk + JCQkJCQkJCQkJCQkGCYmJiYmJiYmJiYmJiYmJhMMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM + GCYmJiYmJiYmJiYmJiYmJhMhISEhAgICAgICBgYGBgYXFwEBAQEBHBwcHAwMDAwMGCYmJiYmJiYmJiYm + JiYmJhMhISEhAgICAgIGBgYGBhcXFwEBAQEcHBwcHAwMDAwMGCYmJiYmJiYmJiYmJiYmJhMhISEhAgIC + AgIGBgYGBgYXFwEBAQEBHBwcHAwMDAwMGCYmJiYmJiYmJiYmJiYmJhMTExMTExMTCgoKCgoKCgoKCgoK + GBgYGBgYGBgYGBgYGCYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm + JiYmJiYmJiYmJiYmJiYmJiYm////////X43//////////////4H////////+AH////////gAP//////A + AAAAH////8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAA//wP+AAAAAB//A/wAAAAAD + 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 + HhETIg8eDw8PDyEWDAQMBQwcDB0kDx4KJSUJGRATJQoeHh4RExYPDw0hDCEWDAQcIRUTCB4eHgolJRgK + IyUYGB4eHh4eIgoSDQwcISEhIRUKCB4eHh4eCiUlERgKIxAQHh4eHhYYEBAKEhwcHBUKER4eHh4eHh4K + JSUlCAoKGRgeHh4eGBAJCRgKFQwKIg8eHh4eHh4eHgolJSUlJREKGB4eHh4WGAoKJAgIFg8eHh4eHh4e + Hh4eCiUlJSUlJSUKDx4eHh4PCB4eHh4eHh4eHh4eHh4eHh4KJSUlJSUlJQoeHh4eHh4eERERERERERER + EREREREeHgolJSUlJSUlEx4RIhEiER4ICAgICAgICAgICAgIER4eEyUlJSUlJSUTHh4eHh4eHh4eHh4e + Hh4eHh4eHh4eHh4TJSUlJSUlJRMeHh4eHh4eEREREREREREREREREREeHhMlJSUlJSUlEx4RFiIRFh4I + CAgICAgICAgICAgIER4eEyUlJSUlJSUTHh4eDx4eHh4eHh4eHh4eHh4eHh4PHh4TJSUlJSUlJRMLCwsL + CwsLCwsLCwsLCwsLCwsLCwsLCxMlJSUlJSUlEyAgICAgIAICBgYGBhcBAQEBGxsLCwsLEyUlJSUlJSUT + ICAgICAgAgIGBgYGFwEBAQEbGwsLCwsTJSUlJSUlJRMTExMTEwoKCgoKCgoKCgoKChgYGBgYGBMlJSUl + JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl//4D///4AP/4AAAD+AAAA/gAAAP4AAAD8AAAAfAA + AADgAAAAgAAAAAAAAAAAAAAAAAAAAQgAAAMYAAADCAAAAwAAAAMAAAADgAAAA+AAAAP4AAAD+AAAA/gA + AAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/////8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAAAAAh4qAKqeVgBWntYAql4qAFbe/gBWnqoAVn5+AMLewgCmoqIAVj4qAFa+ + 1gCqfioA8vr+AKq+qgCq/v4AVn6qAAI+VgCqvtYA/r5+AFZeVgCq3v4AgoKCAP7e1gCqnqoAVr7+AKp+ + VgD+/v4A8sqmAFY+VgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0dHR0dHR0NBQoIFh0dHR0dHRUVFRMGFAQYGA8TExMdHR0IFggK + DhQUGBgPEAUcHR0dBgoUFBQUDAwUAgAFChcdFwoOFBQODAwaDA4CAhgFCBwRDg4MDBoMDA4UGAQEBRwI + FRcMGhoMDBQKCgQCEwwcFQgaEREMDhQKGAoIFhMdFRwJDAwIExEECgUHGhoTHQwIExoaFRMICA0aGhoa + Ex0dHQgMFhYWFhYWFhYWGhMdHR0IGhoaGhoaGhoaGhoTHR0dCBoWFgwMDAwMDAwaEx0dHQgbGxISEgEB + GQsLAxMdHR0IGxsSEhIBARkLCwMTHR0dCAgICAgICAgVFRUVFR3+D1ybwAH+D8ABwAHAAMABgADAAAAA + gAAAAAAAAAEAAAABAAEAAQABwAEAAcABwAHAAcABwAHAAcABwAHAAcABKAAAADAAAABgAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Eyw2ui9xi/krZXzyDB0jogAAACUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQ0YG347cIDZT6/U/1DD8v9Rwu7/Qp7C/yJR + Zc0HEhZsAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIECgtlMFtozWa60P984/7/WMn2/026 + 5/9Qvur/U8f1/1HA7P87jq/5Gj9NvwABAVIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABYV1L/WFdS/1dWUf9XVlH/VlVQ/1VUT/9UU07/U1JN/1JRS/9QUEr/OTk1/yxDSf9Yo7n/e+L1/4ns + //+C3/7/VL3n/0q45P9OuuX/Trrl/1C/6/9Tw/H/Trnj/zd8l/8gMDX/Ly4p/zs5M/86ODL/OTcx/zg2 + Mf84NTD/NzUv/zc1L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABYV1L//////////////////////////////////v7+/9PT0/9lcnb/VJir/3Xb + 8/+C6P//huT//43j//+Q4v3/YMXs/0e34/9PuuX/Trrl/0665f9Ou+b/UL7q/1LD8P9Ltt7/PnqT/3F6 + ff/i4+T//////////////////////zc1L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYV1L///////////////////////7+/v/k5OT/fYWI/0uD + lP9u0+z/f+n//4Dh//+H4f//juP//5Xm//+g6P//gdX1/0i35P9MueX/Trrl/0665f9OuuX/Trrl/063 + 4v9Bk7b/MnKN/zV9mv89a37/kZaX/+vs7P///////////zc1L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYV1L/////////////////6+vr/5uf + of9MdYL/Y8Pf/33s//9+4///gt///4rh//+R4///meX//6Dn//+r6///qun9/2fH7P9DteL/Tbnk/0+6 + 5f9OuuX/T73o/0ekyv8uYXn/EB8o/x9FVv87jKz/QZ3B/0tpdf+tr7D/7+/v/zc1L/8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZWFP///////Ly + 8v+tsLH/WXR+/1Wqwv946f//fef//37e//+G4P//juP//5Xj//+c5v//o+j//6vq//+z7P//wvL//67n + +v9hw+n/QbTi/0i35P9OuuX/T73p/0WexP8yaoT/Cxcc/x1AT/8lUmX/PpW3/1bN+/84hKP/YHN5/ysq + Jf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABaWVX/wcHB/2t9hP9Gkqb/b9///3vs//983///gt7//4ni//+R5P//mOX//5/m//+n6f//ruv//7bt + //++7///yPH//9f3///E7vr/gM/u/0y55f9AteP/S7vm/0qq0P85fJr/FzE9/xQrNv8vZH3/J1pu/0y1 + 3/9Xz///Tbji/ylbbv8DBwlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACYyPD//SoeX/2bR6/968P//euT//33d//+F4P//jeL//5Tk//+b5v//o+j//6rp + //+y6///uu7//8Lw///K8f//0vP//9r2///t/f//8fz//8Lo9v93y+v/Rrfk/0Kz4P8+jK7/JEtd/wkT + GP8wZoD/JVJl/0Gavf9RwO3/UsPw/1PH9v8pYHfmAAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAIyJJVstcw9X/de3//3no//973v//gd///4fh//+P4///luX//57n + //+m6f//rev//7Xs//++7///xfH//83z///V9f//3/f//+b5///w+v/////////////t+f3/q+D0/2XG + 6/8/p9P/LGeC/wgOEf8hRVf/JVJl/z2Ttf9Rwe7/Trrk/1HC7/9NuOP/FTI/twABADIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRYcaFazy/9++f//eN///33d//+E4f//jOL//5Lj + //+a5v//oej//6np//+x6///uO3//8Hu///J8f//0vP//9r1///h9///6vr///X8///8/v//+/7///X9 + ///0/f//7/z//8/x/P+S2/f/TKXJ/yFZc/8cPk7/Jlhs/0es0/9QwOz/Trrl/0675v9TxvT/NX2b8Awa + II8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKDtC2HDQ7P9+6P//gN7//4jh + //+P5P//l+b//53n//+l6P//rOv//7Ts//+87v//xPD//8zx///V9f//3vb//+b4///v+///+P7///z/ + ///4/f//8fz//+n5///i9///3Pb//9v3///S9f//suv9/3nL6/9EnsH/QKXN/0686P9Ou+b/Trrl/066 + 5f9SwvD/RKLH/yFPYdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBISEq1JRUP1goyQ/4fZ + 8f+B5f//iuH//5Lk//+Z5v//oej//6jp//+w6///t+7//7/w///H8v//0PT//9j1///h9///6/r///P8 + ///7/v//+/7///T9///u+///5vn//9/2///Y9f//0PP//8vy///G8v//wfH//6nn/v+G2vn/Zsrw/0y5 + 5P9MuOT/Trrl/0665P9Swu//R6rR/yhgducAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQFOLi0t5HNx + cf+opKL/wr+//6HX6P+L6P//lOT//5zn//+l6P//rOr//7Pr//+77f//w/D//8zy///U9P//3Pb//+T3 + ///u+///+P3///z+///5/v//8fv//+v6///k+f//3Pf//9T1///O8v//x/L//8Hw/v+88P//s+v7/2y/ + 4P9avub/k+P+/37Y9/9XwOn/TLjk/0655P9TxvT/R6fO/yRWat8AAAAAAAAAAAAAAAAAAAAAAAAAAwAA + AEZCQUHrmZeW/7y7uv/Ixsf/sayq/4OWnviN2O3/pvP//6bo//+v6///uO3//77u///G8P//z/P//9j1 + ///g9///6Pn///L7///6/v//+/////b9///u+///5/n//+D4///Z9v//0fP//87z///I8///wPL//5vY + 7v92yOf/gNPx/2C52v9Fps7/Z8nv/4/m//+D3/z/Z9H2/1jL9v9QvOj/KmR84gsZIIoAAAAAAAAAAAAA + AAAAAAAABQUFRDw7O8yzsrL/wL+//8C/wP+WlZb8Pj08qwAAAHBScHj/t/v9/774//+67v//wu///8rx + ///T8///2/b//+T5///t+///9/3///7+///6/v//8vv//+r6///j+f//3Pb//9X1///P9P//z/X//7/w + /v+W2vL/fcrl/2zA4f9fs9X/Va7R/1Ks0f9WrM3/RKbO/2nL8f+E7v//euX8/1Kkvf8eRFHBAAMESwAA + AAoAAAAAAAAAAAAAAAAAAAAAMzMzsJiYmPewsLD/paSm/3x7fPcSEhJ/AAAAAwAAAABIR0b/b4uT/8Lx + 8//Z////0/n//9X0///e9v//6Pn///L8///6/v///f////f+///u+///5/n//+H3///Z9v//0/T//83z + ///C7/3/sOj6/3/J5f9csdP/abnZ/0213/97z+3/m+b7/3fL6f9et9r/Wbjd/2nR9P9fu9D/WH+L/ygp + Jv8AAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0pK5HFwcv9zcnT/iIiK/g4ODp8AAAAAAAAAAAAA + AABvbmr/t7e3/3R/gv+hu73/5f////T////t+///9v3///3////7/v//8/z//+v7///l+P//3fb//9f1 + ///S9P//0Pf//9D5//+z5fT/W7rg/1264P+e3vH/g9Ty/0qv2P9tw+P/bMjn/3ra+P+L9v//bcvp/1KF + lP+EjZD/2tra/0E/Of8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx4g6CEgI/93dnj/TU1P/QAA + AGcAAAAAAAAAAAAAAABxcG3//////+fn5/+anJ3/foSH/8vT0/////////////f+///v+///6Pn//+L3 + ///a9v//1PT//9b4///G8f//j8/n/4bU7v+G1PD/T6nO/1K23f+R5f//eMvo/1Kr0P9duNv/Ysfu/27T + 8v9NkJ7/dIKH/8bGxv///////////0JAO/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQkK1xEQ + E/96eXv/Ozo+/wUFB78AAAANAAAAAAAAAAB0c3D/////////////////3t7e/5CRkf+PkI//5+3v//// + ///p+///3fX//9f0///S9P//zPT//5nc9P9wvdz/fb/a/2a31v9LqM7/Vq7R/02ozf9St+D/gNf1/4Tk + +P933fz/VqC5/2R6gP+4urv/9vb2/////////////////0RBPf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAgIClwsKDe53d3r/T05R/xUUF/4ICAi2AQICKAAAAAB3dnL///////////////////////v7 + +//T09P/foCA/5Wgo//f+fv/4P///87z///J8f//htbz/1Wz2v+MzOP/p+f5/6Lm+P+N1/H/csTh/1So + zP9Vr9T/feD//2m+0/9Vdn7/qayt/+3t7f///////////////////////////0VDPv8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAKwEAAatDQ0b/jIuN/yMiJv8aGR3/EBAS4wQEBIpgYFz//v7+//// + ////////////////////////9vb2/8rLy/9scXL/mre+/8n5/f/C9f//X7XZ/1S54v+g5/z/p+3//5Di + /f9wyu3/gNj1/4np+v9yyuL/UXuJ/4+Tlf/r6+v//////////////////////////////////////0ZE + P/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMEAwXPbWtu/4OChP8oJiv/Gxof/xoZ + HP4XFhn////////////////////////////+/v7/1dXV/3Rzc/8xMTH/FBUX/1lsc/+eztn/ldjs/1y0 + 1v9VtNn/Xrjb/1a02P9gvt//dtLq/1qUov90fH//3t7e//7+/v////////////////////////////// + /////////////0dGQP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnBAMFtmFh + Y/iNjI3/S0pO/ygnK/8fHiH////////////////////////////U1NX/GBcb/xoZHf8cGx//GBcb/xMO + Ev81OD7/k7W//5zd6/+E1/X/gNr4/3vW8P9oq7z/YnV6/8PDw/////////////////////////////// + /////////////////////////////0lHQv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAACAAAAHM1NTXQfHt8+Ht6fP9gX2L////////////////////////////e3t7/MTA0/y8t + Mv81NDj/R0ZJ/19fYf9zcXL/e3Z1/3N9gP9qlaH/b6e1/2J+hv+lpaX///////////////////////// + /////////////////////////////////////////////0tJQ/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAaTExMaplZWT///////////////////////// + ///19fb/lJSW/2VlZ/91dHX/hISE/4mJif+pqan/29vb///////U1NT/v7+///Ly8v////////////// + /////////////////////////////////////////////////////////////0xKRf8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABycW7///////// + ////////////////////////8fHx/7i4t/+hoqH/0tLS//r6+v////////////////////////////// + /////////////////////////////////////////////////////////////////////////////0xM + Rv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACJiIX//////////////////////////////////////////////////////8fHxv/Hx8b/x8fG/8fH + xv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG//// + /////////////05NSP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACLiof///////////+Uk5H/x8fG/8fHxv+Uk5H/lJOR/8fHxv///////////+vr + 6v////////////////////////////////////////////////////////////////////////////// + ////////x8fG/////////////////1BOSf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNjIn///////////////////////////////////////// + /////////////+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr + 6v/r6+r/6+vq/+vr6v/r6+r/6+vq/////////////////1BQSv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPjoz///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////1JRTP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSkY7///////// + /////////////////////////////////////////////8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fH + xv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/////////////////1NS + TP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACUk5H///////////+Uk5H/x8fG/5STkf+Uk5H/x8fG/5STkf///////////+vr6v////////////// + ////////////////////////////////////////////////////////////////////////x8fG//// + /////////////1RTTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACWlZP//////////////////////////////////////////////////////+vr + 6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr + 6v/r6+r/6+vq/////////////////1VUT/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXlpT///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////1ZVUP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZmJb/qnc1/6p3Nf+qdzX/qnc1/6p3 + Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3 + Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/1dWUf8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACamZf/9dmn//XZ + p//12af/89el//HUov/v0p7/7c+b/+vLl//oyJP/5cSP/+LAiv/eu4X/27iA/9i0fP/Vr3b/0apx/86m + bP/Komb/x5xh/8SZXP/AlFf/vZBS/7qLTf+3iEn/tYRF/7KBQP+vfz3/rXw6/6t5OP+qdzX/qnc1/1dX + Uf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACcm5n/9dmn//XZp//12af/89ek//HUov/v0p7/7s+b/+vMmP/oyJP/5cSO/+HAiv/fvIX/27eA/9iz + e//Ur3b/0apw/86ma//KoWb/x51h/8OZXP/AlFf/vY9S/7qMTf+3iEn/tIRF/7KBQf+wfj3/rXs7/6x5 + N/+qdzX/qnc1/1hXUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACdnJr/9dmn//XZp//12af/9Nel//LVov/w0Z7/7c+c/+vMl//oyJP/5cSO/+HA + iv/fvIX/3LeA/9ize//Vr3b/0apx/86mbP/KoWb/xp1h/8SYW//AlFb/vZBS/7qMTv+3iEj/tIRF/7KB + QP+wfj3/rnw6/6t5N/+qdzX/qnc1/1hXUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACdnJr/nZya/5ybmP+amZf/mJiW/5eWlP+Uk5H/kpGP/5CO + jP+NjYn/iomH/4iHhP+FhID/goF9/39+e/98e3j/eXh1/3Z1cv9zc2//cW9s/21saP9qaWb/aGdj/2Vk + YP9jYl7/YWBc/15dWP9cXFf/W1pV/1lYVP9YV1L/WFdS/1hXUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA//////////////+B/////////gB////////4AD//////wAAAAB/////AAAAAH//A/8AAAAAf + /8D/wAAAAB//wP/AAAAAH//A/8AAAAAP/8D/gAAAAAf/wP8AAAAAA/+A/wAAAAAD/wD+AAAAAAP/APgA + AAAAA/4A8AAAAAAD+ADAAAAAAAPwAMAAAAAAA8AAwEAAAAAPwADBwAAAAB/AQMHAAAAAH8HAwMAAAAAf + wcDAQAAAAB/AwMAAAAAAH8BA4AAAAAAfwADwAAAAAB/gAPgAAAAAH/AA/gAAAAAf+AD/wAAAAB/+AP/A + AAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf + /8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/////////8D///////////// + /////////////////////////////ygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAASEyUqbzJwiOhCoMb/L3GK7A8iK3oAAQIXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACBg8RUjdnc8RrxNv+XdD8/1HE8/9Uyvj/SK3V/yZdcsoGERReCRQYAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4NTD/ODUw/zg1MP84NTD/ODUw/zg1 + MP84NTD/Li4r/ytCSP9fssX/huz//4zq//9Ywev/Sbfj/0+75/9SxPH/U8Ty/0Oewv8nRlH/Kywq/zg1 + MP84NTD/ODUw/zg1MP84NTD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5dWP/9/f3///////// + ////////2NjY/3yNkv9cobL/e+P8/4fq//+N5P//meb//2/M8P9GtuP/T7rl/0665f9Ou+b/U8Px/0mr + 0/82b4f/cIaO/9HS0v//////+vr6/15dWP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYWBc//39 + /f//////6urr/5Ganf9alqX/dN3x/4Xu//+I5P//j+L//5nm//+p6///oOT7/1O95/9DteP/Trrl/1C9 + 6P9Lr9j/LF51/xs6Sf81fZr/Romj/4iTmP/g4OD/YWBc/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABjYl7/8vLy/6Ooqv9dipj/aM7j/3/t//+D5f//i+L//5Tj//+f5///qer//7Ps///H8///peL3/1W9 + 5v8+s+L/Srzp/0yt1f8sXXT/DyAo/yVRZP9Bmrz/T7zn/059kP9ERkT/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAk1PTf9nho//W7nL/3nt//9/5v//hd7//4/j//+Z5v//ouj//63q//+47v//wvD//87y + ///h+v//0fD6/4nR7v9Mu+b/QrPg/zh+nP8TJi//I0te/yxlfP9PvOf/V9D//z6Nrf8JExleAAAAAAAA + AAAAAAAAAAAAAAAAAAANHiRtTJ2q/3Tq/P9+7f//geH//4jg//+S5P//nef//6fq//+x7P//ve7//8fy + ///R9P//3fb//+r5/////////f7//8fq9/90zvD/QKLN/xQ3Rv8VKjX/KFtv/0is0/9Swu//Vs///zBy + jeEBAgJBAAAAAAAAAAAAAAAAAAAAJDdyhNWA+v//fuT//4Tg//+O4///l+X//6Ho//+s6v//tu3//8Hv + ///M8v//2PX//+L3///v+///+v3///r+///1/f//8/3//9/4//+j4/r/U6C//yRZcP8vdpL/Trvn/0+8 + 5/9Rwu//SrHa/xo8SbMAAAAAAAAAAgcGBVUyLi3Lc6u8/4Lr//+H4f//kuT//5zn//+m6P//sOz//7ru + ///F8f//0PP//9z2///p+f//9fz///v+///3/f//7fv//+P3///Y9P//1PX//9L3//+28P//etHy/1S+ + 5/9KuOX/Tbnk/1C96f9PvOj/LnCJ5AAAAAkVFBSTY2Fg+rKppv+30tv/kOr//5Tm//+g5///q+r//7Tr + //+/7///yvL//9X1///g9///7vv///r+///7/v//8/v//+n6///e+P//1fX//8/1///E8f7/u/D+/5vc + 8/9mwun/h9/9/2vM8P9OueX/UcPw/1LB7v8rZX3jHh4ejJCOjf/JyMj/vrq6/2tsbdt1q7j/s/7//6/s + //+57P//xO///8/z///b9v//5vn///P7///8/v//9/7//+77///k+P//2fb//9P1///M9P//tuz6/5XX + 7f9twOD/Yrvd/0mnzP9gwOX/ieb//3rn//9ayPD/Lm+J3AkXHWqMjIzsv76+/56dn/84ODiYAAAAKUdM + TP+ayc3/0////9H6///T8///4Pf//+37///5/v///P////T8///p+f//3/f//9f1///O8///w/H+/5XW + 7v9rvNv/XLjd/3DF5f92yeX/XbTX/1W34P9v2vj/Yq28/0JTV/8BAwMtAAAAAHZ1d/eHhoj/Ly8vrQAA + AAMAAAAAeHd0/5yfoP+Lnp//1+/v//r////3////+/////n9///v/P//5Pj//933///Z9///zPT+/8X0 + /f96yef/Yr3h/5DY8P9VtNv/aMDi/3zb+v+E7P7/Y7bQ/2mIkf+6vLz/eXh1/wAAAAAAAAAANDM192Vl + aP8JCAmTAAAAAAAAAAB8e3j//v39/9jY2P+Vl5n/r7Ky//j5+f//////6vn//+D2///Z9v//0vb//6/k + 9v+Ex+L/ccXj/1Su0v9TtNr/f9b0/27G5P9pzvL/X7na/2KOl/+mqqv/9fX1//v7+v98e3j/AAAAAAAA + AAAsKy3yamls/xUUF+8BAgJhAAAAAH9+e//+/v3////////////Kysr/kpSU/7vCxP/q////2/z//8vz + //+I1PD/ccDe/5bX7P+Czuj/ar3d/0+ozf9myO7/geD3/2GYpv+UnJ7/6Ojo////////////+/v6/39+ + e/8AAAAAAAAAAA0MDrNvbnH/SklN/w4NEfwICQqsXVxZ//r6+v/9/f3////////////7+/v/sbKy/3J9 + f/+12t//vvb//1a13f93y+r/oOf5/4LW9P+A3Pv/gd30/16dr/+AjZL/39/f//////////////////// + ///7+/v/goF9/wAAAAAAAAAAAAAAJyIhIsh6eHv/UU9S/x8eI/8bGhz//v7+/////////////////8XF + xv9UU1X/FhMW/yMmK/9xj5j/k9bp/2/K7P9qyOz/aMnq/2Cqv/9zi5H/yMnK//////////////////// + //////////////v7+/+FhID/AAAAAAAAAAAAAAAAAAAAGxgYGZJjY2Psa2pt/1RTVf/8/Pz///////// + ////////YmFk/yYlKv8yMTX/Pzw//1lUV/9/ioz/dqOw/3K5zf9ri5P/t7y9//n5+f////////////// + ////////////////////////+/v7/4iHhP8AAAAAAAAAAAAAAAAAAAAAAAAAAAMDAzIpKSmEZWVl//7+ + /v/////////////////Dw8P/YWBj/3V0df+MjIz/rKur/+bm5v/f4OD/wMHB//Dw8P////////////// + ///////////////////////////////////7+/v/iomH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACJiYX/9fX1///////////////////////u7u7/2tra//////////////////////////////////// + //////////////////////////////////////////////v7+/+NjYn/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJCOjP/8/Pz//f39//7+/v/+/v7//v7+//39/f/7+/v/0NDP/9DQz//Q0M//0NDP/9DQ + z//Q0M//0NDP/9DQz//Q0M//0NDP/9DQz//Q0M//0NDP/9DQz///////+/v7/5COjP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAkpGP///////U1NP/sbCv/8/Pzv+xsK//19bW///////o6Oj/5OTj/+jo + 6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/l5eX/0NDP///////7+/v/kpGP/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUk5H//v7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////v7 + +/+Uk5H/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJeWlP/+/v7///////////////////////// + ////////0dHQ/9HR0P/R0dD/0dHQ/9HR0P/R0dD/0dHQ/9HR0P/R0dD/0dHQ/9HR0P/R0dD/0dHQ/9HR + 0P//////+/v7/5eWlP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmJiW///////U1NP/yMjI/7Oy + sf/JyMj/xMTC///////p6ej/5eXk/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np + 6f/m5ub/0dHQ///////7+/v/mJiW/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACamZf///////7/ + ///8////+Pz///z////7//////////3////5/f//+v7///r+///6/v//+v7///r+///6/v//+v7///r+ + ///6/v//+v7///n9///4/P////////////+amZf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyb + mP+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3 + Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/5ybmP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAnZya///irv//46///+Gs//zeqP/52qP/9tae//LQl//ty5D/6cSK/+S+gv/ft3z/2rFz/9aq + bP/QpGT/zJ5d/8eXVf/DkU7/v4xI/7qHQv+3gjz/tH44/7J7NP+ueTT/nZya/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACdnJr//+Ku///jr///4az//N6o//nao//21p7/8tCX/+3LkP/pxIr/5L6C/9+3 + fP/asXP/1qps/9CkZP/Mnl3/x5dV/8ORTv+/jEj/uodC/7eCPP+0fjj/sns0/655NP+dnJr/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJybmP+amZf/mJiW/5eWlP+Uk5H/kpGP/5COjP+NjYn/iomH/4iH + hP+FhID/goF9/39+e/98e3j/eXh1/3Z1cv9zc2//cW9s/21saP9qaWb/aGdj/2VkYP9jYl7/YWBc/5yb + mP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA//4D///4AP/4AAAD+AAAA/gAAAP4AAAD8AAAAfAAAADgAAAAgAAAAAAA + AAAAAAAAAAAAAQgAAAMYAAADCAAAAwAAAAMAAAADgAAAA+AAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gA + AAP4AAAD+AAAA/gAAAP4AAAD+AAAA/////8oAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMmKU9DjabLRqvS8CJQY5UGEBMhAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAf357/3x7eP95eHX/YGNi/094gP+A2uv/fuD//0i86/9TxvT/P4ik/0FQ + Vf9bW1j/Xl1Y/wAAAAAAAAAAAAAAAJ2cmv/d3t//haKp/3DI2f+P8P//oOz//7Dr/f9qxur/Qrvs/zmH + qP8jTWD/WZOp/0dOTv8AAAAAAAAAAAAAAABnc3T/a7zJ/4Pt//+U6///pOn//7ru///U9f//6Pn9/6ni + +P9MocT/ES49/z6Ss/9Pvun/ESgxYgAAAAAUEhNacsTT/472//+Z5f//rev//8Lw///c9v//8/v///v+ + ///1/v//yvT//2iqw/9EpMn/U8r7/zyOruM8OzqGS0pN/4y2wP+q9///ufD//8zy///m+f//+f7///P8 + ///i+v//xvD9/6Tg8/91yev/c9r+/2HQ9v8tbIa9S0pN/0xLS4+AgH7/l6+v/+D6+//9////+f///+37 + ///Y9v7/rOP1/3rJ5/9mw+j/cNLx/2WtxP9FUlP/AggKDktKTfoLCwx+nZya//////+/wMD/yMjI/+3/ + //++8f//k9Xs/2/E5P9oyu7/bLvV/4egqP/e39//YWBc/wAAAAArKiyhSkpN/z8+P//s7Oz/9vb2/6Ki + ov9cZWf/h8TY/37Z+v91yeT/fKCq/87R0v///////////2FgXP8AAAAAAAAABysrK29fX1////////// + //+Af4H/WldY/5OVl/+UqK3/tr2///////////////////////9hYFz/AAAAAAAAAAAAAAAAm5qY//Pz + 8//k5OT/4ODg/+Tk5P/m5ub/6Ojo/+jo6P/o6Oj/6Ojo/+bm5f//////YWBc/wAAAAAAAAAAAAAAAJ2c + mv///////////////////////////////////////////////////////////2FgXP8AAAAAAAAAAAAA + AACdnJr//////+bm5v/m5ub/8vT2/+Xp7v/o7PD/6Ozw/+js8P/o7PH/5enu//////9hYFz/AAAAAAAA + AAAAAAAAnZya/+nMmP/vzZX/6MWM/+C7f//XsHP/z6Rm/8aYWP+9jUr/tYI9/655M/+pbiL/YWBc/wAA + AAAAAAAAAAAAAJ2cmv/pzJj/782V/+jFjP/gu3//17Bz/8+kZv/GmFj/vY1K/7WCPf+ueTP/qW4i/2Fg + XP8AAAAAAAAAAAAAAACdnJr/nZya/5ybmP+amZf/mJiW/5eWlP+Uk5H/kpGP/5COjP+NjYn/iomH/4iH + hP+FhID/AAAAAP4PSbvAAQAAwAF8wMAAwAGAAMAAAACAAAAAAAAAAQAAAAEAAQABAAHAAQABwAHAAcAB + wAHAAcABwAHAAcABAAQ= + + + \ No newline at end of file diff --git a/CASA/micasad/winforms/WinCommon.cs b/CASA/micasad/winforms/WinCommon.cs new file mode 100644 index 00000000..668f6cc5 --- /dev/null +++ b/CASA/micasad/winforms/WinCommon.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +using sscs.cache; +using sscs.winforms; + +namespace sscs.winforms +{ + class WinCommon + { + private static bool m_bVerify = true; + private static bool m_bIsVerifing = true; + private static bool m_bIsValid = false; + private static string m_sMasterPassword; + + private static SecretStore m_ss; + private static MasterPasswordForm mp; + + private static string VerifyAndReturnMasterPassword(SecretStore ss) + { + if (VerifyMasterPassword(ss, null)) + { + return m_sMasterPassword; + } + else + { + return null; + } + } + + public static string GetMasterPasswordFromUser(SecretStore ss, bool bVerify, string sDecription) + { + m_sMasterPassword = null; + m_bVerify = bVerify; + VerifyMasterPassword(ss, sDecription); + return m_sMasterPassword; + } + + public static bool VerifyMasterPassword(SecretStore ss, string sDecription) + { + + m_bIsVerifing = true; + m_ss = ss; + + // open the form + mp = new MasterPasswordForm(sDecription); + mp.MasterPasswordVerified += new MasterPasswordEventHandler(mp_MasterPasswordVerified); + mp.Show(); + Console.WriteLine(); + while (m_bIsVerifing) + { + System.Windows.Forms.Application.DoEvents(); + System.Threading.Thread.Sleep(100); + } + + mp.Dispose(); + return m_bIsValid; + + } + + static void mp_MasterPasswordVerified(string sMasterPassword, bool bIsValid) + { + //Console.WriteLine(sMasterPassword); + if (sMasterPassword != null) + { + if (sMasterPassword.Length < 8) + { + mp.SetErrorMessage("Master Password must be a least 8 characters"); + return; + } + + if (m_bVerify) + { + if (m_ss.SetMasterPassword(sMasterPassword)) + { + m_sMasterPassword = sMasterPassword; + m_bIsValid = true; + m_bIsVerifing = false; + } + else + { + mp.SetErrorMessage("Master Password not correct"); + } + } + else + { + m_sMasterPassword = sMasterPassword; + m_bIsVerifing = false; + } + } + else + { + m_bIsValid = false; + m_bIsVerifing = false; + } + } + } +}