From a69ba3fc38f0b0295d0e95a7d0357df322fceb98 Mon Sep 17 00:00:00 2001 From: StingRaptor Date: Mon, 25 Jan 2016 00:30:17 +0100 Subject: [PATCH] Added support for context menus in the listview + configured so that items are sorted by name in the listview. --- Server/Controls/RegistryValueLstItem.cs | 16 ++ Server/Forms/FrmRegistryEditor.Designer.cs | 197 +++++++++++++++++++-- Server/Forms/FrmRegistryEditor.cs | 36 +++- Server/Forms/FrmRegistryEditor.resx | 12 +- 4 files changed, 240 insertions(+), 21 deletions(-) diff --git a/Server/Controls/RegistryValueLstItem.cs b/Server/Controls/RegistryValueLstItem.cs index a555a1dd..71d1e81f 100644 --- a/Server/Controls/RegistryValueLstItem.cs +++ b/Server/Controls/RegistryValueLstItem.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,6 +7,21 @@ using System.Windows.Forms; namespace xServer.Controls { + //Comparer for comparing registry values (listview) + public class RegistryValueListItemComparer : IComparer + { + public RegistryValueListItemComparer() { } + + public int Compare(object x, object y) + { + if (x.GetType() == typeof(RegistryValueLstItem) && y.GetType() == typeof(RegistryValueLstItem)) + { + return String.Compare(((RegistryValueLstItem)x).RegName, ((RegistryValueLstItem)y).RegName); + } + return -1; + } + } + internal class RegistryValueLstItem : ListViewItem { diff --git a/Server/Forms/FrmRegistryEditor.Designer.cs b/Server/Forms/FrmRegistryEditor.Designer.cs index 2ecde63a..aeb04bdb 100644 --- a/Server/Forms/FrmRegistryEditor.Designer.cs +++ b/Server/Forms/FrmRegistryEditor.Designer.cs @@ -1,4 +1,5 @@ -namespace xServer.Forms + +namespace xServer.Forms { partial class FrmRegistryEditor { @@ -41,11 +42,11 @@ this.imageRegistryKeyTypeList = new System.Windows.Forms.ImageList(this.components); this.statusStrip = new System.Windows.Forms.StatusStrip(); this.selectedStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); - this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.tv_ContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.keyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.stringToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.stringValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.binaryValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.dWORD32bitValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.qWORD64bitValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -54,13 +55,31 @@ this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.renameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.selectedItem_ContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.modifyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.modifyBinaryDataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.deleteToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.renameToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.lst_ContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.newToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.keyToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.stringValueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.binaryValueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.dWORD32bitValueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.qWORD64bitValueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.multiStringValueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.expandableStringValueToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); this.splitContainer.Panel1.SuspendLayout(); this.splitContainer.Panel2.SuspendLayout(); this.splitContainer.SuspendLayout(); this.statusStrip.SuspendLayout(); - this.contextMenuStrip.SuspendLayout(); + this.tv_ContextMenuStrip.SuspendLayout(); + this.selectedItem_ContextMenuStrip.SuspendLayout(); + this.lst_ContextMenuStrip.SuspendLayout(); this.SuspendLayout(); // // tableLayoutPanel @@ -99,6 +118,7 @@ // tvRegistryDirectory // this.tvRegistryDirectory.Dock = System.Windows.Forms.DockStyle.Fill; + this.tvRegistryDirectory.HideSelection = false; this.tvRegistryDirectory.ImageIndex = 0; this.tvRegistryDirectory.ImageList = this.imageRegistryDirectoryList; this.tvRegistryDirectory.Location = new System.Drawing.Point(0, 0); @@ -125,13 +145,17 @@ this.hValue}); this.lstRegistryKeys.Dock = System.Windows.Forms.DockStyle.Fill; this.lstRegistryKeys.FullRowSelect = true; + this.lstRegistryKeys.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.lstRegistryKeys.HideSelection = false; this.lstRegistryKeys.Location = new System.Drawing.Point(0, 0); this.lstRegistryKeys.Name = "lstRegistryKeys"; this.lstRegistryKeys.Size = new System.Drawing.Size(818, 664); this.lstRegistryKeys.SmallImageList = this.imageRegistryKeyTypeList; + this.lstRegistryKeys.Sorting = System.Windows.Forms.SortOrder.Descending; this.lstRegistryKeys.TabIndex = 0; this.lstRegistryKeys.UseCompatibleStateImageBehavior = false; this.lstRegistryKeys.View = System.Windows.Forms.View.Details; + this.lstRegistryKeys.MouseUp += new System.Windows.Forms.MouseEventHandler(this.lstRegistryKeys_MouseClick); // // hName // @@ -170,22 +194,22 @@ this.selectedStripStatusLabel.Name = "selectedStripStatusLabel"; this.selectedStripStatusLabel.Size = new System.Drawing.Size(0, 17); // - // contextMenuStrip + // tv_ContextMenuStrip // - this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tv_ContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.newToolStripMenuItem, this.toolStripSeparator1, this.deleteToolStripMenuItem, this.renameToolStripMenuItem}); - this.contextMenuStrip.Name = "contextMenuStrip"; - this.contextMenuStrip.Size = new System.Drawing.Size(118, 76); + this.tv_ContextMenuStrip.Name = "contextMenuStrip"; + this.tv_ContextMenuStrip.Size = new System.Drawing.Size(118, 76); // // newToolStripMenuItem // this.newToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.keyToolStripMenuItem, this.toolStripSeparator2, - this.stringToolStripMenuItem, + this.stringValueToolStripMenuItem, this.binaryValueToolStripMenuItem, this.dWORD32bitValueToolStripMenuItem, this.qWORD64bitValueToolStripMenuItem, @@ -207,12 +231,12 @@ this.toolStripSeparator2.Name = "toolStripSeparator2"; this.toolStripSeparator2.Size = new System.Drawing.Size(196, 6); // - // stringToolStripMenuItem + // stringValueToolStripMenuItem // - this.stringToolStripMenuItem.Name = "stringToolStripMenuItem"; - this.stringToolStripMenuItem.Size = new System.Drawing.Size(199, 22); - this.stringToolStripMenuItem.Text = "String Value"; - this.stringToolStripMenuItem.Click += new System.EventHandler(this.createStringRegistryValue_Click); + this.stringValueToolStripMenuItem.Name = "stringValueToolStripMenuItem"; + this.stringValueToolStripMenuItem.Size = new System.Drawing.Size(199, 22); + this.stringValueToolStripMenuItem.Text = "String Value"; + this.stringValueToolStripMenuItem.Click += new System.EventHandler(this.createStringRegistryValue_Click); // // binaryValueToolStripMenuItem // @@ -270,6 +294,127 @@ this.renameToolStripMenuItem.Text = "Rename"; this.renameToolStripMenuItem.Click += new System.EventHandler(this.renameRegistryKey_Click); // + // selectedItem_ContextMenuStrip + // + this.selectedItem_ContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.modifyToolStripMenuItem, + this.modifyBinaryDataToolStripMenuItem, + this.toolStripSeparator3, + this.deleteToolStripMenuItem1, + this.renameToolStripMenuItem1}); + this.selectedItem_ContextMenuStrip.Name = "selectedItem_ContextMenuStrip"; + this.selectedItem_ContextMenuStrip.Size = new System.Drawing.Size(185, 98); + // + // modifyToolStripMenuItem + // + this.modifyToolStripMenuItem.Enabled = false; + this.modifyToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.modifyToolStripMenuItem.Name = "modifyToolStripMenuItem"; + this.modifyToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.modifyToolStripMenuItem.Text = "Modify..."; + // + // modifyBinaryDataToolStripMenuItem + // + this.modifyBinaryDataToolStripMenuItem.Enabled = false; + this.modifyBinaryDataToolStripMenuItem.Name = "modifyBinaryDataToolStripMenuItem"; + this.modifyBinaryDataToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.modifyBinaryDataToolStripMenuItem.Text = "Modify Binary Data..."; + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(181, 6); + // + // deleteToolStripMenuItem1 + // + this.deleteToolStripMenuItem1.Enabled = false; + this.deleteToolStripMenuItem1.Name = "deleteToolStripMenuItem1"; + this.deleteToolStripMenuItem1.Size = new System.Drawing.Size(184, 22); + this.deleteToolStripMenuItem1.Text = "Delete"; + // + // renameToolStripMenuItem1 + // + this.renameToolStripMenuItem1.Enabled = false; + this.renameToolStripMenuItem1.Name = "renameToolStripMenuItem1"; + this.renameToolStripMenuItem1.Size = new System.Drawing.Size(184, 22); + this.renameToolStripMenuItem1.Text = "Rename"; + // + // lst_ContextMenuStrip + // + this.lst_ContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripMenuItem1}); + this.lst_ContextMenuStrip.Name = "lst_ContextMenuStrip"; + this.lst_ContextMenuStrip.Size = new System.Drawing.Size(99, 26); + // + // newToolStripMenuItem1 + // + this.newToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.keyToolStripMenuItem1, + this.toolStripSeparator4, + this.stringValueToolStripMenuItem1, + this.binaryValueToolStripMenuItem1, + this.dWORD32bitValueToolStripMenuItem1, + this.qWORD64bitValueToolStripMenuItem1, + this.multiStringValueToolStripMenuItem1, + this.expandableStringValueToolStripMenuItem1}); + this.newToolStripMenuItem1.Name = "newToolStripMenuItem1"; + this.newToolStripMenuItem1.Size = new System.Drawing.Size(98, 22); + this.newToolStripMenuItem1.Text = "New"; + // + // keyToolStripMenuItem1 + // + this.keyToolStripMenuItem1.Name = "keyToolStripMenuItem1"; + this.keyToolStripMenuItem1.Size = new System.Drawing.Size(199, 22); + this.keyToolStripMenuItem1.Text = "Key"; + this.keyToolStripMenuItem1.Click += new System.EventHandler(this.createNewRegistryKey_Click); + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(196, 6); + // + // stringValueToolStripMenuItem1 + // + this.stringValueToolStripMenuItem1.Name = "stringValueToolStripMenuItem1"; + this.stringValueToolStripMenuItem1.Size = new System.Drawing.Size(199, 22); + this.stringValueToolStripMenuItem1.Text = "String Value"; + this.stringValueToolStripMenuItem1.Click += new System.EventHandler(this.createStringRegistryValue_Click); + // + // binaryValueToolStripMenuItem1 + // + this.binaryValueToolStripMenuItem1.Name = "binaryValueToolStripMenuItem1"; + this.binaryValueToolStripMenuItem1.Size = new System.Drawing.Size(199, 22); + this.binaryValueToolStripMenuItem1.Text = "Binary Value"; + this.binaryValueToolStripMenuItem1.Click += new System.EventHandler(this.createBinaryRegistryValue_Click); + // + // dWORD32bitValueToolStripMenuItem1 + // + this.dWORD32bitValueToolStripMenuItem1.Name = "dWORD32bitValueToolStripMenuItem1"; + this.dWORD32bitValueToolStripMenuItem1.Size = new System.Drawing.Size(199, 22); + this.dWORD32bitValueToolStripMenuItem1.Text = "DWORD (32-bit) Value"; + this.dWORD32bitValueToolStripMenuItem1.Click += new System.EventHandler(this.createDwordRegistryValue_Click); + // + // qWORD64bitValueToolStripMenuItem1 + // + this.qWORD64bitValueToolStripMenuItem1.Name = "qWORD64bitValueToolStripMenuItem1"; + this.qWORD64bitValueToolStripMenuItem1.Size = new System.Drawing.Size(199, 22); + this.qWORD64bitValueToolStripMenuItem1.Text = "QWORD (64-bit) Value"; + this.qWORD64bitValueToolStripMenuItem1.Click += new System.EventHandler(this.createQwordRegistryValue_Click); + // + // multiStringValueToolStripMenuItem1 + // + this.multiStringValueToolStripMenuItem1.Name = "multiStringValueToolStripMenuItem1"; + this.multiStringValueToolStripMenuItem1.Size = new System.Drawing.Size(199, 22); + this.multiStringValueToolStripMenuItem1.Text = "Multi-String Value"; + this.multiStringValueToolStripMenuItem1.Click += new System.EventHandler(this.createMultiStringRegistryValue_Click); + // + // expandableStringValueToolStripMenuItem1 + // + this.expandableStringValueToolStripMenuItem1.Name = "expandableStringValueToolStripMenuItem1"; + this.expandableStringValueToolStripMenuItem1.Size = new System.Drawing.Size(199, 22); + this.expandableStringValueToolStripMenuItem1.Text = "Expandable String Value"; + this.expandableStringValueToolStripMenuItem1.Click += new System.EventHandler(this.createExpandStringRegistryValue_Click); + // // FrmRegistryEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -291,7 +436,9 @@ this.splitContainer.ResumeLayout(false); this.statusStrip.ResumeLayout(false); this.statusStrip.PerformLayout(); - this.contextMenuStrip.ResumeLayout(false); + this.tv_ContextMenuStrip.ResumeLayout(false); + this.selectedItem_ContextMenuStrip.ResumeLayout(false); + this.lst_ContextMenuStrip.ResumeLayout(false); this.ResumeLayout(false); } @@ -309,18 +456,34 @@ private System.Windows.Forms.ColumnHeader hType; private System.Windows.Forms.ColumnHeader hValue; private System.Windows.Forms.ImageList imageRegistryKeyTypeList; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ContextMenuStrip tv_ContextMenuStrip; private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem keyToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; - private System.Windows.Forms.ToolStripMenuItem stringToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem stringValueToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem binaryValueToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem dWORD32bitValueToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem qWORD64bitValueToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem multiStringValueToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem expandableStringValueToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip selectedItem_ContextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem modifyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem modifyBinaryDataToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem1; + private System.Windows.Forms.ContextMenuStrip lst_ContextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem keyToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem stringValueToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem binaryValueToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem dWORD32bitValueToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem qWORD64bitValueToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem multiStringValueToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem expandableStringValueToolStripMenuItem1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; } } \ No newline at end of file diff --git a/Server/Forms/FrmRegistryEditor.cs b/Server/Forms/FrmRegistryEditor.cs index 01e1b55a..16856eeb 100644 --- a/Server/Forms/FrmRegistryEditor.cs +++ b/Server/Forms/FrmRegistryEditor.cs @@ -302,6 +302,9 @@ namespace xServer.Forms key.Tag = ValuesFromNode; } + //Deactivate sorting + lstRegistryKeys.ListViewItemSorter = null; + if (tvRegistryDirectory.SelectedNode == key) { RegistryValueLstItem item = new RegistryValueLstItem(value.Name, value.Type, value.Data); @@ -416,6 +419,8 @@ namespace xServer.Forms { //Select the clicked node tvRegistryDirectory.SelectedNode = e.Node; + //Activate sorting + lstRegistryKeys.ListViewItemSorter = new RegistryValueListItemComparer(); /* Enable delete and rename if not root node */ this.deleteToolStripMenuItem.Enabled = tvRegistryDirectory.SelectedNode.Parent != null; @@ -424,7 +429,7 @@ namespace xServer.Forms if (e.Button == MouseButtons.Right) { Point pos = new Point(e.X, e.Y); - contextMenuStrip.Show(tvRegistryDirectory, pos); + tv_ContextMenuStrip.Show(tvRegistryDirectory, pos); } } @@ -438,6 +443,29 @@ namespace xServer.Forms #endregion + #region lstRegistryKeys action + + private void lstRegistryKeys_MouseClick(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Right) + { + Point pos = new Point(e.X, e.Y); + //Try to check if a item was clicked + if (lstRegistryKeys.GetItemAt(pos.X, pos.Y) == null) + { + //Not on a item + lst_ContextMenuStrip.Show(lstRegistryKeys, pos); + } + else + { + //Clicked on a item + selectedItem_ContextMenuStrip.Show(lstRegistryKeys, pos); + } + } + } + + #endregion + #region ContextMenu private void createNewRegistryKey_Click(object sender, EventArgs e) @@ -541,6 +569,12 @@ namespace xServer.Forms } } + #endregion + + #region Registry Value edit + + + #endregion #endregion diff --git a/Server/Forms/FrmRegistryEditor.resx b/Server/Forms/FrmRegistryEditor.resx index 073c13f7..2397166c 100644 --- a/Server/Forms/FrmRegistryEditor.resx +++ b/Server/Forms/FrmRegistryEditor.resx @@ -125,7 +125,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADm - BwAAAk1TRnQBSQFMAwEBAAEIAQEBCAEBARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA + BwAAAk1TRnQBSQFMAwEBAAG4AQEBuAEBARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm @@ -169,7 +169,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk - CQAAAk1TRnQBSQFMAgEBAgEAASgBAAEoAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CQAAAk1TRnQBSQFMAgEBAgEAAdgBAAHYAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -215,9 +215,15 @@ 17, 17 - + 516, 17 + + 682, 17 + + + 907, 17 +