diff --git a/trunk/CHANGELOG.txt b/trunk/CHANGELOG.txt index 1887af7bd..48589ae97 100644 --- a/trunk/CHANGELOG.txt +++ b/trunk/CHANGELOG.txt @@ -2,8 +2,10 @@ Process Hacker 1.3.2.5 * NEW: + * Process termination now uses KProcessHacker * CSR Processes tool - displays hidden processes (this does not detect Hacker Defender but does detect simple kernel-mode rootkits) + * Processes list in the notification icon menu, for quick actions on processes * Options window has a detailed description for each setting * Process window has descriptions for each field * File processing (signature verification, checks for packed images) is now @@ -11,7 +13,6 @@ Process Hacker certain programs. * Slightly different notification icon * GDI and USER handle counts - * Process termination now uses KProcessHacker * FIXED: * Disables "Show one graph per CPU" if there is only one CPU * Process tree weirdness for users with limited privileges diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs index 35dad3917..36a9fc685 100644 --- a/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs +++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs @@ -20,13 +20,14 @@ * along with Process Hacker. If not, see . */ +using System; using System.Collections.Generic; using System.Drawing; using Aga.Controls.Tree; namespace ProcessHacker { - public class ProcessNode : Node + public class ProcessNode : Node, IDisposable { private List _children = new List(); private ProcessItem _pitem; @@ -49,6 +50,12 @@ namespace ProcessHacker } } + public void Dispose() + { + if (_icon != null) + _icon.Dispose(); + } + public ProcessItem ProcessItem { get { return _pitem; } @@ -58,7 +65,14 @@ namespace ProcessHacker if (_wasNoIcon && _pitem.Icon != null) { - _icon = _pitem.Icon.ToBitmap(); + if (_icon != null) + _icon.Dispose(); + + _icon = new Bitmap(16, 16); + + using (Graphics g = Graphics.FromImage(_icon)) + g.DrawIcon(_pitem.Icon, new Rectangle(0, 0, 16, 16)); + _wasNoIcon = false; } } diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs index f690d1fc0..f079a0d39 100644 --- a/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs +++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs @@ -83,6 +83,8 @@ namespace ProcessHacker ProcessNode[] nodes = _roots.ToArray(); ProcessNode[] targetChildren = null; + targetNode.Dispose(); + foreach (ProcessNode node in nodes) { if (node.PID == item.PID) diff --git a/trunk/ProcessHacker/Components/VistaMenu/OwnerDrawnMenu.cs b/trunk/ProcessHacker/Components/VistaMenu/OwnerDrawnMenu.cs index 6c0cd3ecf..9127584c2 100644 --- a/trunk/ProcessHacker/Components/VistaMenu/OwnerDrawnMenu.cs +++ b/trunk/ProcessHacker/Components/VistaMenu/OwnerDrawnMenu.cs @@ -1,35 +1,35 @@ using System; -using System.Collections.Generic; -using System.Text; using System.ComponentModel; -using System.Windows.Forms; -using System.Drawing; -using System.Runtime.InteropServices; using System.ComponentModel.Design; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Runtime.InteropServices; +using System.Windows.Forms; + namespace wyDay.Controls { - public partial class VistaMenu : System.ComponentModel.Component, IExtenderProvider, ISupportInitialize + public partial class VistaMenu { [DllImport("user32.dll", CharSet = CharSet.Unicode)] private static extern int SendMessage(HandleRef hWnd, int Msg, IntPtr wParam, IntPtr lParam); - ContainerControl ownerForm = null; + ContainerControl ownerForm; //conditionally draw the little lines under menu items with keyboard accelators on Win 2000+ - private bool isUsingKeyboardAccel = false; + private bool isUsingKeyboardAccel; public VistaMenu(ContainerControl parentControl) : this() { - this.ownerForm = parentControl; + ownerForm = parentControl; } public ContainerControl ContainerControl { - get { return this.ownerForm; } - set { this.ownerForm = value; } + get { return ownerForm; } + set { ownerForm = value; } } public override ISite Site { @@ -41,7 +41,7 @@ namespace wyDay.Controls IDesignerHost service = value.GetService(typeof(IDesignerHost)) as IDesignerHost; if (service == null) return; IComponent rootComponent = service.RootComponent; - this.ContainerControl = rootComponent as ContainerControl; + ContainerControl = rootComponent as ContainerControl; } } @@ -58,7 +58,7 @@ namespace wyDay.Controls //#define WM_QUERYUISTATE 0x0129 //int ret = SendMessage(new HandleRef(((Menu)sender).GetMainMenu().GetForm(), ((Menu)sender).GetMainMenu().GetForm().Handle), 0x0129, IntPtr.Zero, IntPtr.Zero); int ret = SendMessage(new HandleRef(ownerForm, ownerForm.Handle), 0x0129, IntPtr.Zero, IntPtr.Zero); - + /* The return value is NULL if the focus indicators and the keyboard accelerators are visible. @@ -71,15 +71,12 @@ namespace wyDay.Controls //#define UISF_HIDEACCEL 0x2 - if ((ret & 0x2) != 0) - isUsingKeyboardAccel = false; - else - isUsingKeyboardAccel = true; + isUsingKeyboardAccel = (ret & 0x2) == 0; } - const int SEPARATOR_HEIGHT = 8; - const int BORDER_VERTICAL = 2; + const int SEPARATOR_HEIGHT = 9; + const int BORDER_VERTICAL = 4; const int LEFT_MARGIN = 4; const int RIGHT_MARGIN = 6; const int SHORTCUT_MARGIN = 20; @@ -87,52 +84,52 @@ namespace wyDay.Controls const int ICON_SIZE = 16; - void MenuItem_MeasureItem(object sender, MeasureItemEventArgs e) + static void MenuItem_MeasureItem(object sender, MeasureItemEventArgs e) { + Font font = ((MenuItem)sender).DefaultItem + ? new Font(SystemFonts.MenuFont, FontStyle.Bold) + : SystemFonts.MenuFont; + if (((MenuItem)sender).Text == "-") e.ItemHeight = SEPARATOR_HEIGHT; else { - e.ItemHeight = (SystemFonts.MenuFont.Height > ICON_SIZE) ? SystemFonts.MenuFont.Height : ICON_SIZE; - e.ItemHeight += BORDER_VERTICAL; + e.ItemHeight = ((SystemFonts.MenuFont.Height > ICON_SIZE) ? SystemFonts.MenuFont.Height : ICON_SIZE) + + BORDER_VERTICAL; + + e.ItemWidth = LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN + + //item text width + + TextRenderer.MeasureText(((MenuItem)sender).Text, font, new Size(0, 0), TextFormatFlags.SingleLine).Width + + SHORTCUT_MARGIN + + //shortcut text width + + TextRenderer.MeasureText(ShortcutToString(((MenuItem)sender).Shortcut), font, new Size(0, 0), TextFormatFlags.SingleLine).Width + + //arrow width + + ((((MenuItem)sender).IsParent) ? ARROW_MARGIN : 0); } - - e.ItemWidth = LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN - - //item text width - //edit by wj32 - fix for default items on XP - + ((((MenuItem)sender).DefaultItem) ? ( - TextRenderer.MeasureText(((MenuItem)sender).Text, - new Font(SystemFonts.MenuFont, FontStyle.Bold), new Size(0, 0), TextFormatFlags.SingleLine).Width - ) : ( - TextRenderer.MeasureText(((MenuItem)sender).Text, SystemFonts.MenuFont, new Size(0, 0), TextFormatFlags.SingleLine).Width - )) - + SHORTCUT_MARGIN - - //shortcut text width - + TextRenderer.MeasureText(ShortcutToString(((MenuItem)sender).Shortcut), SystemFonts.MenuFont, new Size(0, 0), TextFormatFlags.SingleLine).Width - - //arrow width - + ((((MenuItem)sender).IsParent) ? ARROW_MARGIN : 0); } void MenuItem_DrawItem(object sender, DrawItemEventArgs e) { - //MenuItem menuItem = (MenuItem)sender; - //MenuHelper menuHelper = new MenuHelper(menuItem, e.Graphics, this); + e.Graphics.CompositingQuality = CompositingQuality.HighSpeed; + e.Graphics.InterpolationMode = InterpolationMode.Low; + bool menuSelected = (e.State & DrawItemState.Selected) == DrawItemState.Selected; if (menuSelected) e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds); else e.Graphics.FillRectangle(SystemBrushes.Menu, e.Bounds); - + if (((MenuItem)sender).Text == "-") { //draw the separator - int yCenter = e.Bounds.Top + (e.Bounds.Height / 2); + int yCenter = e.Bounds.Top + (e.Bounds.Height / 2) - 1; - e.Graphics.DrawLine(SystemPens.ControlDark, e.Bounds.Left, yCenter, (e.Bounds.Left + e.Bounds.Width), yCenter); + e.Graphics.DrawLine(SystemPens.ControlDark, e.Bounds.Left + 1, yCenter, (e.Bounds.Left + e.Bounds.Width - 2), yCenter); + e.Graphics.DrawLine(SystemPens.ControlLightLight, e.Bounds.Left + 1, yCenter + 1, (e.Bounds.Left + e.Bounds.Width - 2), yCenter + 1); } else //regular menu items { @@ -188,12 +185,12 @@ namespace wyDay.Controls } - private string ShortcutToString(Shortcut shortcut) + private static string ShortcutToString(Shortcut shortcut) { if (shortcut != Shortcut.None) { Keys keys = (Keys)shortcut; - return System.ComponentModel.TypeDescriptor.GetConverter(keys.GetType()).ConvertToString(keys); + return TypeDescriptor.GetConverter(keys.GetType()).ConvertToString(keys); } return null; @@ -204,46 +201,55 @@ namespace wyDay.Controls string shortcutText = ShortcutToString(((MenuItem)sender).Shortcut); int yPos = e.Bounds.Top + (e.Bounds.Height - SystemFonts.MenuFont.Height) / 2; - Size textSize; - // fixed by wj32 for DefaultItems on XP - textSize = (((MenuItem)sender).DefaultItem) ? ( - TextRenderer.MeasureText(((MenuItem)sender).Text, - new Font(SystemFonts.MenuFont, FontStyle.Bold), new Size(0, 0), TextFormatFlags.SingleLine)) : - TextRenderer.MeasureText(((MenuItem)sender).Text, SystemFonts.MenuFont, new Size(0, 0), TextFormatFlags.SingleLine); + Size textSize = TextRenderer.MeasureText(((MenuItem)sender).Text, e.Font, new Size(0, 0), TextFormatFlags.SingleLine); + + Rectangle textRect = new Rectangle(e.Bounds.Left + LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN, yPos, + textSize.Width, textSize.Height); + + if (!((MenuItem)sender).Enabled && !isSelected) // disabled and not selected + { + textRect.Offset(1, 1); + + TextRenderer.DrawText(e.Graphics, ((MenuItem)sender).Text, e.Font, + textRect, + SystemColors.ControlLightLight, + TextFormatFlags.SingleLine | (isUsingKeyboardAccel ? 0 : TextFormatFlags.HidePrefix)); + + textRect.Offset(-1, -1); + } //Draw the menu item text - if (((MenuItem)sender).Enabled) - { - TextRenderer.DrawText(e.Graphics, ((MenuItem)sender).Text, SystemFonts.MenuFont, - new Rectangle(e.Bounds.Left + LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN, yPos, textSize.Width, textSize.Height), - isSelected ? SystemColors.HighlightText : SystemColors.MenuText, - TextFormatFlags.SingleLine | (isUsingKeyboardAccel ? 0 : TextFormatFlags.HidePrefix)); - } - else - { - ControlPaint.DrawStringDisabled(e.Graphics, ((MenuItem)sender).Text, SystemFonts.MenuFont, isSelected ? SystemColors.Highlight : SystemColors.Menu, - new Rectangle(e.Bounds.Left + LEFT_MARGIN + ICON_SIZE + RIGHT_MARGIN, yPos, textSize.Width, textSize.Height), - TextFormatFlags.SingleLine | (isUsingKeyboardAccel ? 0 : TextFormatFlags.HidePrefix)); - } + TextRenderer.DrawText(e.Graphics, ((MenuItem)sender).Text, e.Font, + textRect, + ((MenuItem)sender).Enabled ? (isSelected ? SystemColors.HighlightText : SystemColors.MenuText) : SystemColors.GrayText, + TextFormatFlags.SingleLine | (isUsingKeyboardAccel ? 0 : TextFormatFlags.HidePrefix)); + + //Draw the shortcut text if (shortcutText != null) { - textSize = TextRenderer.MeasureText(shortcutText, SystemFonts.MenuFont, Size.Empty, TextFormatFlags.SingleLine); + textSize = TextRenderer.MeasureText(shortcutText, e.Font, Size.Empty, TextFormatFlags.SingleLine); + textRect = new Rectangle(e.Bounds.Width - textSize.Width - ARROW_MARGIN, yPos, textSize.Width, + textSize.Height); - if (((MenuItem)sender).Enabled) + if (!((MenuItem)sender).Enabled && !isSelected) // disabled and not selected { - TextRenderer.DrawText(e.Graphics, shortcutText, SystemFonts.MenuFont, - new Rectangle(e.Bounds.Width - textSize.Width - ARROW_MARGIN, yPos, textSize.Width, textSize.Height), - isSelected ? SystemColors.HighlightText : SystemColors.MenuText, - TextFormatFlags.SingleLine); - } - else - { - ControlPaint.DrawStringDisabled(e.Graphics, shortcutText, SystemFonts.MenuFont, isSelected ? SystemColors.Highlight : SystemColors.Menu, - new Rectangle(e.Bounds.Width - textSize.Width - ARROW_MARGIN, yPos, textSize.Width, textSize.Height), TextFormatFlags.SingleLine); + textRect.Offset(1, 1); + + TextRenderer.DrawText(e.Graphics, shortcutText, e.Font, + textRect, + SystemColors.ControlLightLight, + TextFormatFlags.SingleLine | (isUsingKeyboardAccel ? 0 : TextFormatFlags.HidePrefix)); + + textRect.Offset(-1, -1); } + + TextRenderer.DrawText(e.Graphics, shortcutText, e.Font, + textRect, + ((MenuItem)sender).Enabled ? (isSelected ? SystemColors.HighlightText : SystemColors.MenuText) : SystemColors.GrayText, + TextFormatFlags.SingleLine); } } } diff --git a/trunk/ProcessHacker/Components/VistaMenu/VistaMenu.cs b/trunk/ProcessHacker/Components/VistaMenu/VistaMenu.cs index d2c8990f0..b58928a93 100644 --- a/trunk/ProcessHacker/Components/VistaMenu/VistaMenu.cs +++ b/trunk/ProcessHacker/Components/VistaMenu/VistaMenu.cs @@ -2,33 +2,38 @@ using System.Collections; using System.Collections.Generic; using System.ComponentModel; -using System.ComponentModel.Design; -using System.Diagnostics; using System.Drawing; using System.Reflection; using System.Runtime.InteropServices; using System.Windows.Forms; -//VistaMenu 1.1, created by Wyatt O'Day -//Visit: http://wyday.com/blog/2008/vista-menu-with-icons-in-c-sharp/ +//VistaMenu v1.2, created by Wyatt O'Day +//Visit: http://wyday.com/vistamenu/ namespace wyDay.Controls { - [ProvideProperty("Image", typeof(MenuItem))] - public partial class VistaMenu : System.ComponentModel.Component, IExtenderProvider, ISupportInitialize + //Properties for the MenuItem + internal class Properties { - private IContainer components = null; - private Hashtable properties = new Hashtable(); - private Hashtable menuParents = new Hashtable(); + public Image Image; + public IntPtr renderBmpHbitmap = IntPtr.Zero; + } - private bool formHasBeenIntialized = false; - private bool isVistaOrLater = false; + //enum WindowsType { VistaOrLater, XP, PreXP } + + [ProvideProperty("Image", typeof(MenuItem))] + public partial class VistaMenu : Component, IExtenderProvider, ISupportInitialize + { + private Container components; + private readonly Hashtable properties = new Hashtable(); + private readonly Hashtable menuParents = new Hashtable(); + + private bool formHasBeenIntialized; + private bool isVistaOrLater; #region Imports - public const int MIIM_BITMAP = 0x00000080; - [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern bool SetMenuItemInfo(HandleRef hMenu, int uItem, bool fByPosition, MENUITEMINFO_T_RW lpmii); @@ -48,7 +53,7 @@ namespace wyDay.Controls InitializeComponent(); } - public VistaMenu(System.ComponentModel.IContainer container) + public VistaMenu(IContainer container) : this() { container.Add(this); @@ -60,7 +65,7 @@ namespace wyDay.Controls /// private void InitializeComponent() { - + components = new Container(); } /// @@ -88,10 +93,20 @@ namespace wyDay.Controls bool IExtenderProvider.CanExtend(object o) { - if (o is MenuItem || o is Form) + if (o is MenuItem) + { + // reject the menuitem if it's a top level element on a MainMenu bar + if (((MenuItem)o).Parent != null) + return ((MenuItem)o).Parent.GetType() != typeof(MainMenu); + + // parent is null - meaning it's a context menu return true; - else - return false; + } + + if (o is Form) + return true; + + return false; } private Properties EnsurePropertiesExists(MenuItem key) @@ -111,7 +126,7 @@ namespace wyDay.Controls #region MenuItem.Image - + [DefaultValue(null)] [Description("The Image for the MenuItem")] [Category("Appearance")] public Image GetImage(MenuItem mnuItem) @@ -119,12 +134,12 @@ namespace wyDay.Controls return EnsurePropertiesExists(mnuItem).Image; } + [DefaultValue(null)] public void SetImage(MenuItem mnuItem, Image value) { Properties prop = EnsurePropertiesExists(mnuItem); - - prop.Image = value; + prop.Image = value; if (!DesignMode && isVistaOrLater) { @@ -163,21 +178,6 @@ namespace wyDay.Controls } } - private bool ShouldSerializeImage(MenuItem mnuItem) - { - if (GetImage(mnuItem) != null) - return true; - else - return false; - } - - private void ResetImage(MenuItem mnuItem) - { - SetImage(mnuItem, null); - } - - - #endregion @@ -186,7 +186,7 @@ namespace wyDay.Controls { } - MENUINFO mnuInfo = new MENUINFO(); + readonly MENUINFO mnuInfo = new MENUINFO(); void AddVistaMenuItem(MenuItem mnuItem) { @@ -197,17 +197,15 @@ namespace wyDay.Controls if (mnuBitmapChildren == null) { if (mnuItem.Parent.GetType() == typeof(ContextMenu)) - ((ContextMenu)mnuItem.Parent).Popup += new EventHandler(MenuItem_Popup); + ((ContextMenu)mnuItem.Parent).Popup += MenuItem_Popup; else - ((MenuItem)mnuItem.Parent).Popup += new EventHandler(MenuItem_Popup); + ((MenuItem)mnuItem.Parent).Popup += MenuItem_Popup; //intialize all the topmost menus to be of type "MNS_CHECKORBMP" (for Vista classic theme) SetMenuInfo(new HandleRef(null, mnuItem.Parent.Handle), mnuInfo); - mnuBitmapChildren = new List(); - - mnuBitmapChildren.Add(mnuItem); + mnuBitmapChildren = new List { mnuItem }; //set the new children list to the corresponding parent menuParents[mnuItem.Parent.Handle] = mnuBitmapChildren; @@ -223,9 +221,9 @@ namespace wyDay.Controls if (menuParents[mnuItem.Parent] == null) { if (mnuItem.Parent.GetType() == typeof(ContextMenu)) - ((ContextMenu)mnuItem.Parent).Popup += new EventHandler(PreVistaMenuItem_Popup); + ((ContextMenu)mnuItem.Parent).Popup += PreVistaMenuItem_Popup; else - ((MenuItem)mnuItem.Parent).Popup += new EventHandler(PreVistaMenuItem_Popup); + ((MenuItem)mnuItem.Parent).Popup += PreVistaMenuItem_Popup; menuParents[mnuItem.Parent] = true; @@ -235,8 +233,8 @@ namespace wyDay.Controls //add all the menu items with custom paint events foreach (MenuItem menu in mnuItem.Parent.MenuItems) { - menu.DrawItem += new DrawItemEventHandler(MenuItem_DrawItem); - menu.MeasureItem += new MeasureItemEventHandler(MenuItem_MeasureItem); + menu.DrawItem += MenuItem_DrawItem; + menu.MeasureItem += MenuItem_MeasureItem; menu.OwnerDraw = true; } } @@ -266,8 +264,8 @@ namespace wyDay.Controls { foreach (MenuItem mnuItem in ((Menu)parent.Key).MenuItems) { - mnuItem.DrawItem += new DrawItemEventHandler(MenuItem_DrawItem); - mnuItem.MeasureItem += new MeasureItemEventHandler(MenuItem_MeasureItem); + mnuItem.DrawItem += MenuItem_DrawItem; + mnuItem.MeasureItem += MenuItem_MeasureItem; mnuItem.OwnerDraw = true; } } @@ -287,7 +285,6 @@ namespace wyDay.Controls List mnuBitmapChildren = (List)menuParents[parentHandle]; MENUITEMINFO_T_RW menuItemInfo = new MENUITEMINFO_T_RW(); - menuItemInfo.fMask = MIIM_BITMAP; foreach (MenuItem menuItem in mnuBitmapChildren) { @@ -303,18 +300,11 @@ namespace wyDay.Controls } } - //Properties for the MenuItem - internal class Properties - { - public Image Image = null; - public IntPtr renderBmpHbitmap = IntPtr.Zero; - } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public class MENUITEMINFO_T_RW { public int cbSize = Marshal.SizeOf(typeof(MENUITEMINFO_T_RW)); - public int fMask; + public int fMask = 0x00000080; //MIIM_BITMAP = 0x00000080 public int fType; public int fState; public int wID; diff --git a/trunk/ProcessHacker/Forms/CSRProcesses.Designer.cs b/trunk/ProcessHacker/Forms/CSRProcesses.Designer.cs index bc1bcf138..35a15be66 100644 --- a/trunk/ProcessHacker/Forms/CSRProcesses.Designer.cs +++ b/trunk/ProcessHacker/Forms/CSRProcesses.Designer.cs @@ -36,6 +36,7 @@ this.buttonScan = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); + this.buttonTerminate = new System.Windows.Forms.Button(); this.SuspendLayout(); // // listProcesses @@ -56,6 +57,7 @@ this.listProcesses.TabIndex = 0; this.listProcesses.UseCompatibleStateImageBehavior = false; this.listProcesses.View = System.Windows.Forms.View.Details; + this.listProcesses.SelectedIndexChanged += new System.EventHandler(this.listProcesses_SelectedIndexChanged); // // columnProcess // @@ -115,11 +117,25 @@ " of the Client Server Runtime processes. This can be used to identify hidden pro" + "cesses."; // + // buttonTerminate + // + this.buttonTerminate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonTerminate.Enabled = false; + this.buttonTerminate.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.buttonTerminate.Location = new System.Drawing.Point(262, 358); + this.buttonTerminate.Name = "buttonTerminate"; + this.buttonTerminate.Size = new System.Drawing.Size(75, 23); + this.buttonTerminate.TabIndex = 4; + this.buttonTerminate.Text = "T&erminate"; + this.buttonTerminate.UseVisualStyleBackColor = true; + this.buttonTerminate.Click += new System.EventHandler(this.buttonTerminate_Click); + // // CSRProcessesWindow // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(511, 393); + this.Controls.Add(this.buttonTerminate); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Controls.Add(this.buttonScan); @@ -143,5 +159,6 @@ private System.Windows.Forms.Button buttonScan; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button buttonTerminate; } } \ No newline at end of file diff --git a/trunk/ProcessHacker/Forms/CSRProcesses.cs b/trunk/ProcessHacker/Forms/CSRProcesses.cs index 9df84aa3c..816fbbf7f 100644 --- a/trunk/ProcessHacker/Forms/CSRProcesses.cs +++ b/trunk/ProcessHacker/Forms/CSRProcesses.cs @@ -143,5 +143,33 @@ namespace ProcessHacker { this.Close(); } + + private void buttonTerminate_Click(object sender, EventArgs e) + { + if (MessageBox.Show("Are you sure you want to terminate the selected process?", + "Process Hacker", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes) + { + try + { + (new Win32.ProcessHandle( + int.Parse(listProcesses.SelectedItems[0].SubItems[1].Text), + Win32.PROCESS_RIGHTS.PROCESS_TERMINATE)).Terminate(); + + listProcesses.SelectedItems[0].Remove(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Process Hacker", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void listProcesses_SelectedIndexChanged(object sender, EventArgs e) + { + if (listProcesses.SelectedItems.Count == 1) + buttonTerminate.Enabled = true; + else + buttonTerminate.Enabled = false; + } } } diff --git a/trunk/ProcessHacker/Forms/HackerWindow.Designer.cs b/trunk/ProcessHacker/Forms/HackerWindow.Designer.cs index 8e4df6ad6..8f415f718 100644 --- a/trunk/ProcessHacker/Forms/HackerWindow.Designer.cs +++ b/trunk/ProcessHacker/Forms/HackerWindow.Designer.cs @@ -79,6 +79,7 @@ this.viewMenuItem = new System.Windows.Forms.MenuItem(); this.updateNowMenuItem = new System.Windows.Forms.MenuItem(); this.updateProcessesMenuItem = new System.Windows.Forms.MenuItem(); + this.updateServicesMenuItem = new System.Windows.Forms.MenuItem(); this.toolsMenuItem = new System.Windows.Forms.MenuItem(); this.csrProcessesMenuItem = new System.Windows.Forms.MenuItem(); this.windowMenuItem = new System.Windows.Forms.MenuItem(); @@ -118,9 +119,9 @@ this.startedSMenuItem = new System.Windows.Forms.MenuItem(); this.stoppedSMenuItem = new System.Windows.Forms.MenuItem(); this.DSMenuItem = new System.Windows.Forms.MenuItem(); + this.processesMenuItem = new System.Windows.Forms.MenuItem(); this.exitTrayMenuItem = new System.Windows.Forms.MenuItem(); this.vistaMenu = new wyDay.Controls.VistaMenu(this.components); - this.updateServicesMenuItem = new System.Windows.Forms.MenuItem(); ((System.ComponentModel.ISupportInitialize)(this.statusGeneral)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.statusCPU)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.statusMemory)).BeginInit(); @@ -488,6 +489,12 @@ this.updateProcessesMenuItem.Text = "Update &Processes"; this.updateProcessesMenuItem.Click += new System.EventHandler(this.updateProcessesMenuItem_Click); // + // updateServicesMenuItem + // + this.updateServicesMenuItem.Index = 2; + this.updateServicesMenuItem.Text = "Update &Services"; + this.updateServicesMenuItem.Click += new System.EventHandler(this.updateServicesMenuItem_Click); + // // toolsMenuItem // this.toolsMenuItem.Index = 2; @@ -508,7 +515,7 @@ // // statusBar // - this.statusBar.Location = new System.Drawing.Point(0, 352); + this.statusBar.Location = new System.Drawing.Point(0, 310); this.statusBar.Name = "statusBar"; this.statusBar.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] { this.statusGeneral, @@ -567,7 +574,7 @@ this.tabControlBig.Location = new System.Drawing.Point(0, 0); this.tabControlBig.Name = "tabControlBig"; this.tabControlBig.SelectedIndex = 0; - this.tabControlBig.Size = new System.Drawing.Size(804, 352); + this.tabControlBig.Size = new System.Drawing.Size(804, 310); this.tabControlBig.TabIndex = 6; this.tabControlBig.SelectedIndexChanged += new System.EventHandler(this.tabControlBig_SelectedIndexChanged); // @@ -577,7 +584,7 @@ this.tabProcesses.Location = new System.Drawing.Point(4, 22); this.tabProcesses.Name = "tabProcesses"; this.tabProcesses.Padding = new System.Windows.Forms.Padding(3); - this.tabProcesses.Size = new System.Drawing.Size(796, 326); + this.tabProcesses.Size = new System.Drawing.Size(796, 284); this.tabProcesses.TabIndex = 0; this.tabProcesses.Text = "Processes"; this.tabProcesses.UseVisualStyleBackColor = true; @@ -588,7 +595,7 @@ this.treeProcesses.Location = new System.Drawing.Point(3, 3); this.treeProcesses.Name = "treeProcesses"; this.treeProcesses.Provider = null; - this.treeProcesses.Size = new System.Drawing.Size(790, 320); + this.treeProcesses.Size = new System.Drawing.Size(790, 278); this.treeProcesses.TabIndex = 4; this.treeProcesses.DoubleClick += new System.EventHandler(this.treeProcesses_DoubleClick); this.treeProcesses.SelectionChanged += new System.EventHandler(this.listProcesses_SelectionChanged); @@ -600,7 +607,7 @@ this.tabServices.Location = new System.Drawing.Point(4, 22); this.tabServices.Name = "tabServices"; this.tabServices.Padding = new System.Windows.Forms.Padding(3); - this.tabServices.Size = new System.Drawing.Size(796, 326); + this.tabServices.Size = new System.Drawing.Size(796, 284); this.tabServices.TabIndex = 1; this.tabServices.Text = "Services"; this.tabServices.UseVisualStyleBackColor = true; @@ -612,7 +619,7 @@ this.listServices.Location = new System.Drawing.Point(3, 3); this.listServices.Name = "listServices"; this.listServices.Provider = null; - this.listServices.Size = new System.Drawing.Size(790, 320); + this.listServices.Size = new System.Drawing.Size(790, 278); this.listServices.TabIndex = 0; this.listServices.DoubleClick += new System.EventHandler(this.listServices_DoubleClick); // @@ -622,7 +629,7 @@ this.tabNetwork.Location = new System.Drawing.Point(4, 22); this.tabNetwork.Name = "tabNetwork"; this.tabNetwork.Padding = new System.Windows.Forms.Padding(3); - this.tabNetwork.Size = new System.Drawing.Size(796, 326); + this.tabNetwork.Size = new System.Drawing.Size(796, 284); this.tabNetwork.TabIndex = 2; this.tabNetwork.Text = "Network"; this.tabNetwork.UseVisualStyleBackColor = true; @@ -634,7 +641,7 @@ this.listNetwork.Location = new System.Drawing.Point(3, 3); this.listNetwork.Name = "listNetwork"; this.listNetwork.Provider = null; - this.listNetwork.Size = new System.Drawing.Size(790, 320); + this.listNetwork.Size = new System.Drawing.Size(790, 278); this.listNetwork.TabIndex = 0; // // menuService @@ -731,7 +738,9 @@ this.showHideMenuItem, this.sysInformationIconMenuItem, this.notificationsMenuItem, + this.processesMenuItem, this.exitTrayMenuItem}); + this.menuIcon.Popup += new System.EventHandler(this.menuIcon_Popup); // // showHideMenuItem // @@ -787,10 +796,15 @@ this.DSMenuItem.Index = 5; this.DSMenuItem.Text = "Deleted Services"; // + // processesMenuItem + // + this.processesMenuItem.Index = 3; + this.processesMenuItem.Text = "&Processes"; + // // exitTrayMenuItem // this.vistaMenu.SetImage(this.exitTrayMenuItem, global::ProcessHacker.Properties.Resources.door_out); - this.exitTrayMenuItem.Index = 3; + this.exitTrayMenuItem.Index = 4; this.exitTrayMenuItem.Text = "E&xit"; this.exitTrayMenuItem.Click += new System.EventHandler(this.exitTrayMenuItem_Click); // @@ -798,17 +812,11 @@ // this.vistaMenu.ContainerControl = this; // - // updateServicesMenuItem - // - this.updateServicesMenuItem.Index = 2; - this.updateServicesMenuItem.Text = "Update &Services"; - this.updateServicesMenuItem.Click += new System.EventHandler(this.updateServicesMenuItem_Click); - // // HackerWindow // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(804, 374); + this.ClientSize = new System.Drawing.Size(804, 332); this.Controls.Add(this.tabControlBig); this.Controls.Add(this.statusBar); this.DoubleBuffered = true; @@ -927,6 +935,7 @@ private System.Windows.Forms.MenuItem updateNowMenuItem; private System.Windows.Forms.MenuItem updateProcessesMenuItem; private System.Windows.Forms.MenuItem updateServicesMenuItem; + private System.Windows.Forms.MenuItem processesMenuItem; } } diff --git a/trunk/ProcessHacker/Forms/HackerWindow.cs b/trunk/ProcessHacker/Forms/HackerWindow.cs index af1e4d394..2c1f209e7 100644 --- a/trunk/ProcessHacker/Forms/HackerWindow.cs +++ b/trunk/ProcessHacker/Forms/HackerWindow.cs @@ -355,6 +355,126 @@ namespace ProcessHacker showHideMenuItem_Click(null, null); } + private void menuIcon_Popup(object sender, EventArgs e) + { + List processes = new List(); + + processesMenuItem.MenuItems.Clear(); + + foreach (var process in processP.Dictionary.Values) + { + if (process.PID > 0) + { + processes.Add(process); + } + } + + for (int i = 0; i < processes.Count && processes.Count > Properties.Settings.Default.IconMenuProcessCount; i++) + { + if (processes[i].CPUUsage == 0) + { + processes.RemoveAt(i); + i--; + } + else if (processes[i].Username != System.Security.Principal.WindowsIdentity.GetCurrent().Name) + { + processes.RemoveAt(i); + i--; + } + } + + processes.Sort((i1, i2) => -i1.CPUUsage.CompareTo(i2.CPUUsage)); + + if (processes.Count > Properties.Settings.Default.IconMenuProcessCount) + { + int c = processes.Count; + processes.RemoveRange(Properties.Settings.Default.IconMenuProcessCount, + processes.Count - Properties.Settings.Default.IconMenuProcessCount); + } + + foreach (var process in processes) + { + MenuItem processItem = new MenuItem(); + MenuItem terminateItem = new MenuItem(); + MenuItem suspendItem = new MenuItem(); + MenuItem resumeItem = new MenuItem(); + MenuItem propertiesItem = new MenuItem(); + + processItem.Text = process.Name + " (" + process.PID.ToString() + ")"; + processItem.Tag = process.PID; + + terminateItem.Click += new EventHandler((sender_, e_) => + { + if (MessageBox.Show("Are you sure you want to terminate the process?", "Process Hacker", + MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes) + { + try + { + (new Win32.ProcessHandle((int)((MenuItem)sender_).Parent.Tag, + Win32.PROCESS_RIGHTS.PROCESS_TERMINATE)).Terminate(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Process Hacker", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + }); + terminateItem.Text = "Terminate"; + + suspendItem.Click += new EventHandler((sender_, e_) => + { + try + { + (new Win32.ProcessHandle((int)((MenuItem)sender_).Parent.Tag, + Win32.PROCESS_RIGHTS.PROCESS_SUSPEND_RESUME)).Suspend(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Process Hacker", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + }); + suspendItem.Text = "Suspend"; + + resumeItem.Click += new EventHandler((sender_, e_) => + { + try + { + (new Win32.ProcessHandle((int)((MenuItem)sender_).Parent.Tag, + Win32.PROCESS_RIGHTS.PROCESS_SUSPEND_RESUME)).Resume(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Process Hacker", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + }); + resumeItem.Text = "Resume"; + + propertiesItem.Click += new EventHandler((sender_, e_) => + { + try + { + ProcessWindow pForm = Program.GetProcessWindow(processP.Dictionary[(int)((MenuItem)sender_).Parent.Tag], + new Program.PWindowInvokeAction(delegate(ProcessWindow f) + { + f.Show(); + f.Activate(); + })); + } + catch (Exception ex) + { + MessageBox.Show("Could not inspect the process:\n\n" + ex.Message, + "Process Hacker", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + }); + propertiesItem.Text = "Properties..."; + + processItem.MenuItems.AddRange(new MenuItem[] { terminateItem, suspendItem, resumeItem, propertiesItem }); + processesMenuItem.MenuItems.Add(processItem); + + vistaMenu.SetImage(processItem, (treeProcesses.Tree.Model as ProcessTreeModel).Nodes[process.PID].Icon); + } + } + private void showHideMenuItem_Click(object sender, EventArgs e) { this.Visible = !this.Visible; diff --git a/trunk/ProcessHacker/Forms/OptionsWindow.Designer.cs b/trunk/ProcessHacker/Forms/OptionsWindow.Designer.cs index 7445367c3..669bd0dda 100644 --- a/trunk/ProcessHacker/Forms/OptionsWindow.Designer.cs +++ b/trunk/ProcessHacker/Forms/OptionsWindow.Designer.cs @@ -48,6 +48,7 @@ this.checkStartHidden = new System.Windows.Forms.CheckBox(); this.checkHideWhenMinimized = new System.Windows.Forms.CheckBox(); this.checkShowTrayIcon = new System.Windows.Forms.CheckBox(); + this.textIconMenuProcesses = new System.Windows.Forms.NumericUpDown(); this.checkVerifySignatures = new System.Windows.Forms.CheckBox(); this.tabHighlighting = new System.Windows.Forms.TabPage(); this.label20 = new System.Windows.Forms.Label(); @@ -88,9 +89,11 @@ this.colorCPUKT = new ProcessHacker.Components.ColorModifier(); this.label22 = new System.Windows.Forms.Label(); this.toolTipProvider = new System.Windows.Forms.ToolTip(this.components); + this.label23 = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.textUpdateInterval)).BeginInit(); this.tabControl.SuspendLayout(); this.tabGeneral.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.textIconMenuProcesses)).BeginInit(); this.tabHighlighting.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.textHighlightingDuration)).BeginInit(); this.tabPlotting.SuspendLayout(); @@ -114,7 +117,7 @@ 0, 0, 0}); - this.textUpdateInterval.Location = new System.Drawing.Point(112, 6); + this.textUpdateInterval.Location = new System.Drawing.Point(134, 6); this.textUpdateInterval.Maximum = new decimal(new int[] { 10000, 0, @@ -139,7 +142,7 @@ // this.buttonClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonClose.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.buttonClose.Location = new System.Drawing.Point(362, 382); + this.buttonClose.Location = new System.Drawing.Point(362, 405); this.buttonClose.Name = "buttonClose"; this.buttonClose.Size = new System.Drawing.Size(75, 23); this.buttonClose.TabIndex = 2; @@ -151,7 +154,7 @@ // this.checkShowProcessDomains.AutoSize = true; this.checkShowProcessDomains.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkShowProcessDomains.Location = new System.Drawing.Point(6, 235); + this.checkShowProcessDomains.Location = new System.Drawing.Point(6, 261); this.checkShowProcessDomains.Name = "checkShowProcessDomains"; this.checkShowProcessDomains.Size = new System.Drawing.Size(156, 18); this.checkShowProcessDomains.TabIndex = 3; @@ -164,7 +167,7 @@ // this.checkWarnDangerous.AutoSize = true; this.checkWarnDangerous.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkWarnDangerous.Location = new System.Drawing.Point(6, 211); + this.checkWarnDangerous.Location = new System.Drawing.Point(6, 237); this.checkWarnDangerous.Name = "checkWarnDangerous"; this.checkWarnDangerous.Size = new System.Drawing.Size(228, 18); this.checkWarnDangerous.TabIndex = 4; @@ -176,7 +179,7 @@ // label2 // this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(6, 35); + this.label2.Location = new System.Drawing.Point(6, 61); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(80, 13); this.label2.TabIndex = 5; @@ -188,9 +191,9 @@ // this.textSearchEngine.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.textSearchEngine.Location = new System.Drawing.Point(112, 32); + this.textSearchEngine.Location = new System.Drawing.Point(134, 58); this.textSearchEngine.Name = "textSearchEngine"; - this.textSearchEngine.Size = new System.Drawing.Size(299, 20); + this.textSearchEngine.Size = new System.Drawing.Size(277, 20); this.textSearchEngine.TabIndex = 6; // // tabControl @@ -204,7 +207,7 @@ this.tabControl.Location = new System.Drawing.Point(12, 12); this.tabControl.Name = "tabControl"; this.tabControl.SelectedIndex = 0; - this.tabControl.Size = new System.Drawing.Size(425, 364); + this.tabControl.Size = new System.Drawing.Size(425, 387); this.tabControl.TabIndex = 7; // // tabGeneral @@ -219,8 +222,10 @@ this.tabGeneral.Controls.Add(this.checkStartHidden); this.tabGeneral.Controls.Add(this.checkHideWhenMinimized); this.tabGeneral.Controls.Add(this.checkShowTrayIcon); + this.tabGeneral.Controls.Add(this.label23); this.tabGeneral.Controls.Add(this.label1); this.tabGeneral.Controls.Add(this.textSearchEngine); + this.tabGeneral.Controls.Add(this.textIconMenuProcesses); this.tabGeneral.Controls.Add(this.textUpdateInterval); this.tabGeneral.Controls.Add(this.label2); this.tabGeneral.Controls.Add(this.checkVerifySignatures); @@ -229,7 +234,7 @@ this.tabGeneral.Location = new System.Drawing.Point(4, 22); this.tabGeneral.Name = "tabGeneral"; this.tabGeneral.Padding = new System.Windows.Forms.Padding(3); - this.tabGeneral.Size = new System.Drawing.Size(417, 338); + this.tabGeneral.Size = new System.Drawing.Size(417, 361); this.tabGeneral.TabIndex = 0; this.tabGeneral.Text = "General"; this.tabGeneral.UseVisualStyleBackColor = true; @@ -237,7 +242,7 @@ // buttonFont // this.buttonFont.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.buttonFont.Location = new System.Drawing.Point(6, 110); + this.buttonFont.Location = new System.Drawing.Point(6, 136); this.buttonFont.Name = "buttonFont"; this.buttonFont.Size = new System.Drawing.Size(75, 23); this.buttonFont.TabIndex = 15; @@ -248,15 +253,15 @@ // // textImposterNames // - this.textImposterNames.Location = new System.Drawing.Point(112, 58); + this.textImposterNames.Location = new System.Drawing.Point(134, 84); this.textImposterNames.Name = "textImposterNames"; - this.textImposterNames.Size = new System.Drawing.Size(299, 20); + this.textImposterNames.Size = new System.Drawing.Size(277, 20); this.textImposterNames.TabIndex = 14; // // label21 // this.label21.AutoSize = true; - this.label21.Location = new System.Drawing.Point(6, 61); + this.label21.Location = new System.Drawing.Point(6, 87); this.label21.Name = "label21"; this.label21.Size = new System.Drawing.Size(100, 13); this.label21.TabIndex = 13; @@ -267,7 +272,7 @@ // this.checkHideHandlesWithNoName.AutoSize = true; this.checkHideHandlesWithNoName.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkHideHandlesWithNoName.Location = new System.Drawing.Point(6, 283); + this.checkHideHandlesWithNoName.Location = new System.Drawing.Point(6, 309); this.checkHideHandlesWithNoName.Name = "checkHideHandlesWithNoName"; this.checkHideHandlesWithNoName.Size = new System.Drawing.Size(160, 18); this.checkHideHandlesWithNoName.TabIndex = 12; @@ -279,7 +284,7 @@ // this.checkEnableKPH.AutoSize = true; this.checkEnableKPH.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkEnableKPH.Location = new System.Drawing.Point(6, 307); + this.checkEnableKPH.Location = new System.Drawing.Point(6, 333); this.checkEnableKPH.Name = "checkEnableKPH"; this.checkEnableKPH.Size = new System.Drawing.Size(217, 18); this.checkEnableKPH.TabIndex = 12; @@ -300,7 +305,7 @@ "TB", "PB", "EB"}); - this.comboSizeUnits.Location = new System.Drawing.Point(112, 84); + this.comboSizeUnits.Location = new System.Drawing.Point(134, 110); this.comboSizeUnits.Name = "comboSizeUnits"; this.comboSizeUnits.Size = new System.Drawing.Size(67, 21); this.comboSizeUnits.TabIndex = 11; @@ -308,7 +313,7 @@ // label18 // this.label18.AutoSize = true; - this.label18.Location = new System.Drawing.Point(6, 87); + this.label18.Location = new System.Drawing.Point(6, 113); this.label18.Name = "label18"; this.label18.Size = new System.Drawing.Size(78, 13); this.label18.TabIndex = 10; @@ -319,7 +324,7 @@ // this.checkStartHidden.AutoSize = true; this.checkStartHidden.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkStartHidden.Location = new System.Drawing.Point(21, 187); + this.checkStartHidden.Location = new System.Drawing.Point(21, 213); this.checkStartHidden.Name = "checkStartHidden"; this.checkStartHidden.Size = new System.Drawing.Size(89, 18); this.checkStartHidden.TabIndex = 9; @@ -332,7 +337,7 @@ // this.checkHideWhenMinimized.AutoSize = true; this.checkHideWhenMinimized.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkHideWhenMinimized.Location = new System.Drawing.Point(21, 163); + this.checkHideWhenMinimized.Location = new System.Drawing.Point(21, 189); this.checkHideWhenMinimized.Name = "checkHideWhenMinimized"; this.checkHideWhenMinimized.Size = new System.Drawing.Size(131, 18); this.checkHideWhenMinimized.TabIndex = 9; @@ -344,7 +349,7 @@ // this.checkShowTrayIcon.AutoSize = true; this.checkShowTrayIcon.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkShowTrayIcon.Location = new System.Drawing.Point(6, 139); + this.checkShowTrayIcon.Location = new System.Drawing.Point(6, 165); this.checkShowTrayIcon.Name = "checkShowTrayIcon"; this.checkShowTrayIcon.Size = new System.Drawing.Size(136, 18); this.checkShowTrayIcon.TabIndex = 7; @@ -353,11 +358,29 @@ this.checkShowTrayIcon.UseVisualStyleBackColor = true; this.checkShowTrayIcon.CheckedChanged += new System.EventHandler(this.checkShowTrayIcon_CheckedChanged); // + // textIconMenuProcesses + // + this.textIconMenuProcesses.Location = new System.Drawing.Point(134, 32); + this.textIconMenuProcesses.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.textIconMenuProcesses.Name = "textIconMenuProcesses"; + this.textIconMenuProcesses.Size = new System.Drawing.Size(66, 20); + this.textIconMenuProcesses.TabIndex = 1; + this.textIconMenuProcesses.Value = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.textIconMenuProcesses.Leave += new System.EventHandler(this.textIconMenuProcesses_Leave); + // // checkVerifySignatures // this.checkVerifySignatures.AutoSize = true; this.checkVerifySignatures.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.checkVerifySignatures.Location = new System.Drawing.Point(6, 259); + this.checkVerifySignatures.Location = new System.Drawing.Point(6, 285); this.checkVerifySignatures.Name = "checkVerifySignatures"; this.checkVerifySignatures.Size = new System.Drawing.Size(254, 18); this.checkVerifySignatures.TabIndex = 3; @@ -393,7 +416,7 @@ this.tabHighlighting.Location = new System.Drawing.Point(4, 22); this.tabHighlighting.Name = "tabHighlighting"; this.tabHighlighting.Padding = new System.Windows.Forms.Padding(3); - this.tabHighlighting.Size = new System.Drawing.Size(417, 338); + this.tabHighlighting.Size = new System.Drawing.Size(417, 355); this.tabHighlighting.TabIndex = 1; this.tabHighlighting.Text = "Highlighting"; this.tabHighlighting.UseVisualStyleBackColor = true; @@ -624,7 +647,7 @@ this.tabPlotting.Location = new System.Drawing.Point(4, 22); this.tabPlotting.Name = "tabPlotting"; this.tabPlotting.Padding = new System.Windows.Forms.Padding(3); - this.tabPlotting.Size = new System.Drawing.Size(417, 338); + this.tabPlotting.Size = new System.Drawing.Size(417, 355); this.tabPlotting.TabIndex = 2; this.tabPlotting.Text = "Plotting"; this.tabPlotting.UseVisualStyleBackColor = true; @@ -754,7 +777,7 @@ // this.label22.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.label22.AutoSize = true; - this.label22.Location = new System.Drawing.Point(12, 387); + this.label22.Location = new System.Drawing.Point(12, 410); this.label22.Name = "label22"; this.label22.Size = new System.Drawing.Size(300, 13); this.label22.TabIndex = 10; @@ -768,12 +791,21 @@ this.toolTipProvider.IsBalloon = true; this.toolTipProvider.ReshowDelay = 50; // + // label23 + // + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(6, 34); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(122, 13); + this.label23.TabIndex = 0; + this.label23.Text = "Processes in icon menu:"; + // // OptionsWindow // this.AcceptButton = this.buttonClose; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(449, 417); + this.ClientSize = new System.Drawing.Size(449, 440); this.Controls.Add(this.label22); this.Controls.Add(this.tabControl); this.Controls.Add(this.buttonClose); @@ -789,6 +821,7 @@ this.tabControl.ResumeLayout(false); this.tabGeneral.ResumeLayout(false); this.tabGeneral.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.textIconMenuProcesses)).EndInit(); this.tabHighlighting.ResumeLayout(false); this.tabHighlighting.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.textHighlightingDuration)).EndInit(); @@ -860,5 +893,7 @@ private System.Windows.Forms.CheckBox checkHideHandlesWithNoName; private System.Windows.Forms.ToolTip toolTipProvider; private System.Windows.Forms.Label label22; + private System.Windows.Forms.NumericUpDown textIconMenuProcesses; + private System.Windows.Forms.Label label23; } } \ No newline at end of file diff --git a/trunk/ProcessHacker/Forms/OptionsWindow.cs b/trunk/ProcessHacker/Forms/OptionsWindow.cs index f21c30a47..abd8b031a 100644 --- a/trunk/ProcessHacker/Forms/OptionsWindow.cs +++ b/trunk/ProcessHacker/Forms/OptionsWindow.cs @@ -43,6 +43,7 @@ namespace ProcessHacker _font = Properties.Settings.Default.Font; buttonFont.Font = _font; textUpdateInterval.Value = Properties.Settings.Default.RefreshInterval; + textIconMenuProcesses.Value = Properties.Settings.Default.IconMenuProcessCount; textSearchEngine.Text = Properties.Settings.Default.SearchEngine; comboSizeUnits.SelectedItem = Misc.SizeUnitNames[Properties.Settings.Default.UnitSpecifier]; @@ -91,12 +92,27 @@ namespace ProcessHacker catch { MessageBox.Show("The entered value is not valid.", "Process Hacker", MessageBoxButtons.OK, - MessageBoxIcon.Error); + MessageBoxIcon.Error); textUpdateInterval.Focus(); } } + private void textIconMenuProcesses_Leave(object sender, EventArgs e) + { + try + { + Properties.Settings.Default.IconMenuProcessCount = Int32.Parse(textIconMenuProcesses.Value.ToString()); + } + catch + { + MessageBox.Show("The entered value is not valid.", "Process Hacker", MessageBoxButtons.OK, + MessageBoxIcon.Error); + + textIconMenuProcesses.Focus(); + } + } + private void buttonClose_Click(object sender, EventArgs e) { Properties.Settings.Default.Font = _font; diff --git a/trunk/ProcessHacker/Forms/OptionsWindow.resx b/trunk/ProcessHacker/Forms/OptionsWindow.resx index fb4813b39..35956e64b 100644 --- a/trunk/ProcessHacker/Forms/OptionsWindow.resx +++ b/trunk/ProcessHacker/Forms/OptionsWindow.resx @@ -120,4 +120,7 @@ 17, 17 + + 17, 17 + \ No newline at end of file diff --git a/trunk/ProcessHacker/Forms/ProcessWindow.resx b/trunk/ProcessHacker/Forms/ProcessWindow.resx index 39e08e896..8d379ee02 100644 --- a/trunk/ProcessHacker/Forms/ProcessWindow.resx +++ b/trunk/ProcessHacker/Forms/ProcessWindow.resx @@ -136,189 +136,189 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACG + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACE KgAAAk1TRnQBSQFMAgEBCQEAAQwBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABMAMAAQEBAAEgBgABMP8AEwABhwELAYAB/wGDAQYBRQH/AUYBAAFEAf8BQwEAAUMB/wFAAQABQgH/ - AcYBAQEAAf8BxgIAAf8BxAIAAf8BwAIAAf8BwAIAAf8BvwIAAf8BQwEWAQAB/wFBAREBAAH/AT4BDQEA - Af8BPAEJAQAB/wE6AQYBAAH/wAABCAEEAfMB/wGZAZsB/gH/AZYBmAH+Af8BkwGVAf4B/wGRAZMB/gH/ - AckBCgEAAf8B4AGTASQB/wHfAY8BIAH/Ad8BjQEcAf8B3gGKARgB/wHAAgAB/wGiAckBngH/AZ0BxgGZ - Af8BmAHDAZUB/wGUAcABkQH/AQABNAEAAf/AAAERAQ4B9QH/AZ4BoAH+Af8BIgElAf4B/wEdASAB/gH/ - AZUBlwH+Af8BzQETAQAB/wHhAZcBKgH/AdoBgAEIAf8B2QFEAQIB/wHfAY8BHwH/AcYCAAH/AagBzQGk - Af8BPgGwATgB/wE3AasBMQH/AZoBxAGWAf8BAAE9AQAB/8AAARoBGAH2Af8BogGkAf4B/wEpAS0B/gH/ - ASQBKAH+Af8BmQGbAf4B/wHPARwBAAH/AeMBnAEzAf8B3AGGAREB/wHbAYMBCwH/AeABlAElAf8BxgED - AQAB/wGvAdEBqwH/AYABtwFBAf8BQAGyAToB/wGgAcgBnAH/AQABgAEDAf/AAAIiAfgB/wGoAaoB/gH/ - ATIBNgH+Af8BLAEwAf4B/wGeAaAB/gH/AdEBJwEAAf8B5QGiATsB/wHeAYwBGgH/Ad0BiQEUAf8B4gGZ - AS0B/wHJAQwBAAH/AbUB1QGwAf8BigG9AYMB/wGDAbgBRAH/AacBzQGjAf8BBAGLAQsB/8AAASoBKwH6 - Af8BrAGvAf4B/wE5AT0B/gH/ATQBOAH+Af8BogGkAf4B/wHWATABAAH/AecBpwFCAf8B4AGSASMB/wHf - AY8BHQH/AeQBngE1Af8BzQEVAQAB/wG6AdkBtQH/AbcB1gGxAf8BswHTAa4B/wGuAdEBqQH/AQwBlgEU - Af/AAAExATMB/AH/AbABswH+Af8BQAFFAf4B/wE8AUAB/gH/AagBqgH+Af8B2AE7AQAB/wHoAa0BgwH/ - AeIBmAEsAf8B4QGVAScB/wHlAaMBPQH/Ac8BHgEAAf8BJwG8ATMB/wEjAbYBLgH/AR4BsAEoAf8BGQGo - ASMB/wEUAaEBHAH/wAABNwE6Af0B/wG0AbcB/gH/AYEBhQH+Af8BQwGBAf4B/wGsAa8B/gH/AdkBQgEA - Af8B6gGyAYoB/wHkAZ8BNQH/AeMBnAExAf8B5wGoAUQB/wHRASkBAAH/1AABOwE/Af4B/wG4AbsB/gH/ - AbYBuQH+Af8BswG2Af4B/wGwAbMB/gH/Ad8BhAEMAf8B7AG3AZIB/wHmAaUBPwH/AeYBogE6Af8B6QGt - AYUB/wHWATIBAAH/1AABOwE/Af4B/wE7AT8B/gH/ATkBPQH+Af8BNQE4Af0B/wExATMB/AH/AeEBjQEZ - Af8B7QG7AZkB/wHpAawBgQH/AecBqAFDAf8B6gGzAY0B/wHYATsBAAH/6AAB4gGSASMB/wHuAcEBoAH/ - AeoBsQGJAf8B6QGuAYUB/wHtAbcBlAH/AdsBQwEBAf/oAAHmAZsBLgH/AfABxQGmAf8B7AG2AZEB/wHr - AbMBjAH/Ae4BvAGbAf8B3wGFAQ4B/+gAAegBoAE3Af8B8gHIAawB/wHwAcYBqAH/AfABxQGmAf8B7wHC - AaIB/wHhAY4BGgH/6AAB6gGmAT4B/wHoAaQBOwH/AegBoAE1Af8B5gGdATIB/wHkAZkBLAH/AeIBlQEl - Af//AO0AAwoBDQEiAiEBMQMgAS8DBQEHGAADEQEXAasCAAH/AWIBWQFIAfYDKQE/NAADBgEIAUACPwFu - A1YBswFeAlgB3QFSAl0B9AFAAYQBpgH9AgABswH/AgABqAH/AkABnAH9AlIBXQH0AVoCWAHdA1YBswFA - Aj8BbgMGAQhQAAMYASEDUAGdAV0CVAHwA6EB/wOrAf8DpwH/A5UB/wFkAlwB5wNKAYoDEAEWDAABugIA - Af8BwAGJAQAB/wG/AYkBAAH/Aa8CAAH/AyoBQTAAAVsCWQHEAYcBtwHgAf8BlQHGAeYB/wGbAc0B6QH/ - AZwBzQHpAf8BmQHHAecB/wGVAcEB5AH/AY4BuAHgAf8BiQGwAd0B/wGBAacB1wH/AQABmwHPAf8BAAGM - AcIB/wIAAa4B/wFbAlkBxBAAAwkBDAJGAUcBgQJZAVwByQIAAegB/wMfAS0oAAMvAUoBZQJdAfQDzgH/ - A+0B/wP0Af8D9QH/A/QB/wPvAf8D4gH/A7oB/wFkAlwB5wMkATUIAAHDAYgBAAH/Ac8BogEAAf8BzQGi - AYEB/wHAAYwBAAH/AbACAAH/AU4CTQGVAzEBTgMmATkDFgEeAwMBBBwAAVsCWQHEAZgBuQHUAf8BxQHH - AcQB/wHsAdgBxwH/AfYB6wHjAf8B+gH1AfEB/wHzAecB3gH/Ad8BvwGmAf8B0AGkAYEB/wHLAZoBAAH/ - AcgBlwEAAf8BowGTAYwB/wIAAZwB/wFbAlkBxAwAAy0BRQJaAWAB3gENAQsB6wH/ASEBIgHnAf8CAAHp - Af8DHwEtAV0CWQHSAVwCWQHJAUcCRgGBAwkBDBgAAVwCVQHqA94B/wPzAf8D2wH/A9IB/wPbAf8D1gH/ - A8AB/wPJAf8D5gH/A8QB/wFcAlUB6ggAA0ABcQHMAZkBAAH/AdABowGBAf8BzwGkAYMB/wHKAZ4BAAH/ - AbwBhQEAAf8BrwIAAf8BpwIAAf8BngIAAf8BWwJYAcYDBwEJGAADHQEqAeYBwwGlAf8B7wHWAcAB/wH7 - AfIB6gH/Af4B/AH6Av8B/gH9Af8B/gH9AfwB/wH8AfYB8AH/AfgB6AHZAf8B9gHjAdEB/wH2AeIBzgH/ - AeYByAGtAf8BzgGgAQAB/wMdASoIAAM0AVQCFwHzAf8BMgE0Ae4B/wGUAZkB6wH/AY0BkQHpAf8CAAHs - Af8DHwEtAV0CWQHSAdYBjgEXAf8BuAEbAQAB/wFgAloB3gMuAUgUAAFcAlUB6gPwAf8D3gH/A9QB/wPS - Af8D2wH/A9YB/wO/Af8DsAH/A7MB/wPeAf8BXAJVAeoMAANBAXIBzgGdAQAB/wHVAawBjAH/AcsBmwEA - Af8BzAGgAQAB/wHIAZsBAAH/AcUBlQEAAf8BwAGPAQAB/wGsAgAB/wNCAXYcAAFYAlYBuQHtAdMBuwH/ - AfoB8AHlAf8B/QH5AfUB/wH+AfwB+gH/Af4B/QH8Af8B/QH5AfQB/wH2AeMBzwH/AfcB5QHTAf8B9gHj - AdEB/wHdAbkBmgH/AVcCVgG4CAADEAEVA18B8wGVAZkB8gH/AaUBqgHuAf8BMAGBAeYB/wGXAZoB6wH/ - AgAB7wH/Ax8BLQFdAVsBWQHSAdsBmQElAf8B5gGkATQB/wHLAYABDAH/AaYBCgEAAf8DNAFUEAABXAJV - AeoD8gH/A+IB/wPYAf8D1QH/A9wB/wPYAf8DwAH/A7MB/wO3Af8D4AH/AVwCVQHqEAABVgJVAbEB0wGo - AYYB/wHWAawBjgH/AckBmAEAAf8BxAGQAQAB/wG/AYoBAAH/AcIBjwEAAf8BvwGLAQAB/wFfAV0BRgH7 - Ax0BKRwAAVUCUwGwA38B/gH3AeoB3gH/Af4B+gH3Af8B/gH8AfkB/wH9AfcB8gH/AfoB7QHiAf8B6wHQ - AbcB/wJ/AX4B/gNUAa4MAAMNAREDTgGZAmIBagH5AYQBhQH0Af8BowGoAe8B/wGgAaUB7QH/AQQBAQHx - Af8DHwEtAl0BWQHSAd4BoQEuAf8B3gGJARAB/wHmAaYBNAH/AdABhwERAf8BXwJMAfMDEAEVDAABXAJV - AeoD8wH/A+cB/wPdAf8D2QH/A+AB/wPbAf8DxAH/A7gB/wO7Af8D4QH/AVwCVQHqEAADMQFOAdQBowEA - Af8B3AG1AZgB/wHQAaEBAAH/AcwBmgEAAf8BzwGkAYMB/wHIAZoBAAH/AQABjAEAAf8BAAG4AQAB/wFf - AU4BMAH7A1QBrwMHAQkYAAMnAToBYQJbAeEB8wHiAdIB/wH8AfQB7QH/AfsB8QHnAf8B6QHMAbUB/wFh - AlwB3AMmATgQAANCAXMDPAFmAxQBGwNKAY0CXQFfAfMBMQEzAfMB/wEOAQ0B9AH/Ax8BLQJdAVkB0gHh - AagBgQH/AeABkgEZAf8B2QEuAQEB/wHnAagBhAH/Ab4BJQEAAf8DSAGEDAABXAJVAeoD9AH/A+oB/wPh - Af8D3QH/A+MB/wPeAf8DyQH/A70B/wO/Af8D4gH/AVwCVQHqEAADJgE5AdsBqwGJAf8B4QG9AaIB/wHW - AaoBhwH/AdkBswGUAf8BzgGfAQAB/wFfAl0B+wEAAbwBAAH/AZMCAAH/AbACAAH/AaQCAAH/AWECXgHa - AwMBBBwAA1kBxwH0AeMB0AH/AfMB3wHNAf8BWwJZAcMYAAFZAVwBWQHPAZABvwGTAf8BVQFcAVUB6gNB - AXIDFQEdA0QBewNdAe0DHwEtAl0BWQHSAeQBsAGLAf8B4wGcASIB/wHdAYUBCQH/AeIBlgEcAf8B2gGX - ASIB/wFcAlkBzwwAAVwCVQHqA/UB/wPuAf8D5gH/A+IB/wPmAf8D4QH/A80B/wPCAf8DwgH/A+MB/wFc - AlUB6hAAAxYBHgHgAbEBjwH/AeYBxAGrAf8B4gG/AaQB/wHYAa0BjgH/A00B+gNDAXcDKwH8AbsBhAEA - Af8BwAGPAQAB/wG8AYoBAAH/AZwCAAH/AxYBHhwAAVsCWQHDAfQB4QHOAf8B8wHfAcwB/wFZAlcBwhgA - AVoCXQHwAcoB6AHIAf8BrwHZAasB/wGSAb8BlAH/A10B7QFFAUYBRQF+Aw8BFAMSARgCXQFZAdIB5wG3 - AZMB/wHnAaYBLAH/AeABkAESAf8B3gGOAREB/wHmAa0BiAH/AV8BVAFMAfMMAAFcAlUB6gP2Af8D6wH/ - A94B/wPWAf8D1QH/A9EB/wPDAf8DvAH/A8AB/wPlAf8BXAJVAeoQAAMDAQQBYQJeAdoB5AG7AZ8B/wHk - AbsBnwH/AysB/AEAAcEBAAH/AysB/AHHAZYBAAH/AcsBngEAAf8BvAGFAQAB/wHDAZIBAAH/AaYCAAH/ - AyYBORQAAyYBOAFeAlgB3QHzAd0ByQH/AfoB7gHiAf8B+QHrAd4B/wHtAdABtgH/AV8CWgHbAyYBOBAA - AWACagH5AbYB4AGxAf8BMAHMASQB/wGSAdIBiQH/Aa0B2QGpAf8BiQG4AYsB/wNQAZ0DNQFWAmIBSQH2 - Ae8ByAGpAf8B5gGmASgB/wHiAZsBHAH/AeIBmAEbAf8B5wGzAY8B/wFdAVwBTgHwDAABXAJVAeoD9wH/ - A+cB/wPvAf8D9gH/A/sB/wP6Af8D8AH/A94B/wPDAf8D5gH/AVwCVQHqFAADBwEJA1QBrwFqAmYB+QEA - AcUBggH/AbUBsAGBAf8B2AGwAZIB/wHXAa4BjwH/AckBlwEAAf8BwwGPAQAB/wHIAZsBAAH/AbECAAH/ - AzEBThAAA1QBrwN/Af4B+QHsAeAB/wH9AfgB9AH/AfsB8AHmAf8B+AHnAdcB/wH5AesB3gH/AfIB2gHF - Af8DfwH+A1QBrgwAA1wBzwG6Ad8BuAH/AS8BzAEiAf8BGwHGAQ4B/wEnAcgBGwH/AagB2gGjAf8BHQGo - ASIB/wMoATwDWwHDAeYBtQGOAf8B8AHMAawB/wHlAaYBJgH/AekBsQGEAf8B4wGvAYgB/wJcAVkBzwwA - AVwCVQHqA/gB/wP+Gf8D+wH/A+oB/wFcAlUB6hwAAxsBJgGoAaYBhAH9AeIBvgGjAf8B3wG3AZoB/wHV - AagBhgH/AdABoQEAAf8BywGaAQAB/wHOAaIBgQH/Ab8BiwEAAf8BTgJNAZUMAAFXAlYBuAH5AeMBzQH/ - AfsB8wHsAf8B/gH6AfcB/wH+AfsB+AH/AfwB9QHtAf8B9wHmAdUB/wH2AeEBzAH/AfkB7AHfAf8B+QHr - Ad0B/wHrAc4BtAH/AVcCVgG4CAADSAGEAbMB2gG1Af8BogHYAZoB/wEiAcoBFAH/ARsBxgENAf8BgAHM - ASoB/wGjAc4BowH/AVkBXAFZAc8DIgEyAVUBMAErAfwB8gHRAbIB/wHrAbkBjQH/AfAByQGqAf8B2AGc - ASUB/wNIAYQMAAFZAlcBvwPhAf8D/hn/A/sB/wPPAf8BUgJRAaEgAANCAXYB5AG6AZ0B/wHmAcQBqwH/ - AeIBvgGkAf8B3gG5AZwB/wHZAbIBkwH/AdEBowEAAf8B0QGmAYUB/wG7AgAB/wMpAT8EAAMdASoBwAHF - Ac0B/wGaAbcB3AH/AQABpgHVAf8BAAGVAcoB/wEAAYcBvgH/AgABswH/AgABqAH/AgABnwH/AgABmAH/ - AgABmgH/AQABgwGnAf8BiAGUAZoB/wMdASoEAAMNARIDXwHzAb4B4QG+Af8BlAHUAYkB/wEjAcoBFwH/ - ASMByQEVAf8BngHWAZcB/wGTAcEBlgH/Az0BaQNOAZYB5wG0AY4B/wHzAdMBtQH/AekBuwGYAf8CXwFM - AfMDDQESDAADHQEqAVwCWAHRA9AB/wPoAf8D8wH/A/0B/wP8Af8D7QH/A+AB/wPCAf8BWwJZAcMDFAEb - IAADBwEJAVsCWAHGAeMBtAGTAf8B3wGxAY4B/wHaAasBiQH/AdoBrQGMAf8B3AG1AZgB/wHXAa8BkAH/ - AcwBmwEAAf8DTQH6BAABXAJYAdEBhwG3AeAB/wGVAcYB5gH/AZsBzQHpAf8BnAHNAekB/wGZAccB5wH/ - AZUBwQHkAf8BjgG4AeAB/wGJAbAB3QH/AYEBpwHXAf8BAAGbAc8B/wEAAYwBwgH/AgABrgH/AVwCWAHR - CAADMgFRAaAB1QGoAf8BugHgAbsB/wGnAdoBoAH/ATIBzgElAf8BNAHNASgB/wGwAdkBrQH/A10B7QMZ - ASMDXQHtAesBwgGeAf8B3QGiASgB/wMyAVEUAAMFAQcBNQI0AVUDVAGuAWACWwHWAV8CXQH7AWoCZgH5 - AVwCWgHNA1IBqQMtAUYDAgEDKAADAwEEAxYBHgMmATkDMQROAZQB2AGnAYIB/wHXAawBiwH/AdMBpwGE - Af8BYgFcAUkB9gQAAVsCWQHEAYcBtwHgAf8BlQHGAeYB/wGdAc8B6gH/AaEB0wHsAf8BoAHRAesB/wGb - AcoB6AH/AZYBwgHlAf8BjwG6AeIB/wGHAbEB3QH/AQABowHUAf8BAAGQAcQB/wIAAa4B/wFbAlkBxAwA - AykBPwNgAd4BtAHcAbcB/wG8AeABugH/AbkB4QG1Af8BzgHqAcsB/wGkAc4BpgH/AU0CTgGWAz0BaQNg - Ad4DKQE/fAADKQE+AV8CXQH7AWICXAH2Ay4BSAQAAwYBCAFAAj8BbgNWAbMBXgJYAd0BZQJdAfQBQAGd - AaYB/QEAAZkB0QH/AQABkAHIAf8BQAGEAaYB/QFSAl0B9AFaAlgB3QNWAbMBQAI/AW4DBgEIEAADCQEM - A0YBfgNbAcYBKwFHASsB/AErAUEBKwH8A1sBxgNFAX0DAgEDAwcBChEAAZ0B2QH/AQABmQHYAf8BAAGU - AdcB/wEAAZAB1gH/AQABjAHVAf8BAAGIAdQB/wEAAYQB0wH/AQABgQHSAf8CAAHRAf8CAAHRAf8CAAHQ - Af8CAAHPAf8CAAHPAf8CAAHOAf9gAAM7AWMBWQJXAb8BWAJXAb8DOwFjIAADFQEdAyMBNAMkATYDJAE2 - AyQBNgMkATYDJAE2AyQBNgMkATYDJAE2AyQBNgMkATYDIwEzAxUBHQEAAaMB2gH/AbwB6wH6Af8BvAHr - AfwB/wG/Ae4B/gH/AcYB9AL/Ac4B+AL/AdMB+gL/AdAB+AL/AccB8gL/AboB6QH8Af8BswHkAfkB/wGw - AeIB+AH/AbAB4gH4Af8CAAHPAf9UAAMdASkDCgEOAwEBAgFcAlUB6gO9Af8DsgH/AVwCVQHqAwEBAgMK - AQ4DHQEpFAADIwE0A1kB9QGoAqYB/QP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/AagCpgH9 - AV8CXQHzAyMBMwEAAagB2wH/Ab8B7AH7Af8BAAHPAfUB/wEAAbAB7AH/AwAB/wIAAYkB/wEAAYkBvgH/ - AQABmgHIAf8BAAGuAecB/wEAAaUB5gH/AQABmgHhAf8BAAG4Ae4B/wGxAeMB+AH/AgAB0AH/CAADUgGp - AcMBjgEAAf8BwAGLAQAB/wG+AYgBAAH/AbsBhQEAAf8BuQGDAQAB/wG0AgAB/wGyAgAB/wGxAgAB/wGu - AgAB/wGtAgAB/wGrAgAB/wGpAgAB/wGpAgAB/wNSAakMAAFQAk8BmwNAAf0BZAJcAecDEgEZAWQCXAHn - A8sB/wPHAf8BYwJcAecDEgEZA1wB5wNAAf0BUAJPAZsIAAM3AVsBXQFUAU4B8AFiAVwBSAH2AeUBtwGa - Af8B+wL6Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8BqAKmAf0DJAE2AQABrQHc - Af8BwQHuAfsB/wEAAdMB9wH/AQAB2wH8Af8CAAGFAf8BlAHHAfkB/wGRAckB+QH/AQABhQHJAf8CAAGu - Af8BAAG9AewB/wEAAb4B7wH/AQABugHuAf8BswHjAfkB/wIAAdEB/wgAAcgBkgEANf8BqQIAAf8IAANE - AXsDvAH/A94B/wOmAf8BZQJdAfQDfwH+A8QB/wPCAf8BbgJtAf4BZQJdAfQDpgH/A9IB/wOBAf8DRAF7 - BAABYgJYAe8B5gG4AZwB/wHpAb8BpQH/AdwBmwEAAf8B5QG4AZ0B/wP8Af8D/AH/A/wB/wP7Af8D+wH/ - A/sB/wP7Af8D+wH/A/sB/wP8Af8DJAE2AQABsgHdAf8BwwHvAfsB/wEAAdYB+AH/AQABtgHsAf8BAAGJ - AaoB/wHgAfIC/wEAAZoB2AH/AgABvgH/AQABmAHFAf8BAAGGAcUB/wEAAZsB3gH/AQABvgHvAf8BtAHl - AfkB/wIAAdIB/wgAAcoBlAEAC/8B/gP/Af0B/wL+Af0B/wL+AfwB/wL+AfwB/wL+AfwB/wL+AfwB/wL+ - AfoB/wL+AfoB/wL8AfkF/wGqAgAB/wgAA0UBfQN/Af4D1QH/A8UB/wPLAf8D0QH/A8kB/wPHAf8DzAH/ - A8UB/wO9Af8DywH/AW8CbgH+A0UBfQQAAW0CZwH3AesBxAGtAf8B7AHIAbIB/wHqAcEBqQH/Ad4BngEA - Af8B5wG7AaEB/wP8Af8D+wH/A/sB/wP6Af8D+gH/A/oB/wP6Af8D+gH/A/wB/wMkATYBAAG3Ad4B/wHG - AfAB/AH/AQAB2QH4Af8BAAHiAf0B/wEAAbcB2QH/AQABtgHVAf8BkAG3AdEB/wEAAckB5AH/AQAB3wH1 - Af8BAAHQAe0B/wEAAZgB3AH/AQABugHtAf8BtgHnAfkB/wEAAYMB0wH/CAABzAGXAQAH/wH8A/8B/QH/ - Av4B/AH/Av4B/AH/Av4B+wH/Av0B+gH/Av0B+gH/Av0B+gH/Av0B+gH/AvwB9wH/AvsB9gX/AawCAAH/ - DAADSAGFA8UB/wPBAf8DxQH/A8cB/wOqAf8DpwH/A8EB/wO+Af8DtQH/A6oB/wNIAYUIAANCAXUBagJm - AfkB7AHHAbAB/wHtAcoBtQH/AesBwwGrAf8B3gGhAQAB/wHnAboBnwH/A/sB/wP7Af8D+wH/A/oB/wP6 - Af8D+AH/A/gB/wP8Af8DJAE2AQABuwHfAf8BxwHxAfwB/wEAAdwB+QH/AQABuwHtAf8BAAG9Ae8B/wEA - AcYB5wH/AQABuAHWAf8BwgH2Af0B/wEAAd8B9wH/AQAB4gH4Af8BAAHTAfAB/wEAAZcB3AH/AagB3AH1 - Af8BAAGIAdQB/wgAAdEBnAEABf8C/gH8Af8C/gH8Af8C/gH8Af8C/QH7Af8C/QH7Af8C/QH6Af8C/QH4 - Af8C+wH5Af8B+wH6AfcB/wH7AfoB9gH/AfsB+AH0Bf8BsAIAAf8EAAFcAloBzQFfAlgB4wFhAlYB7gPP - Af8DxgH/A8wB/wFbAlgBxgMsAUQDLAFEAVsCWAHGA8EB/wO8Af8DuQH/AWECVgHuAVsCWAHjA1oBzQQA - A0MBeAN/Af4B7QHIAbMB/wHtAc0BuAH/AekBvgGjAf8B1gGOAQAB/wP8Af8D/AH/A/wB/wP7Af8D+QH/ - A/kB/wP4Af8D/AH/AyQBNgEAAb8B4AH/AcgB8wH8Af8BAAHfAfkB/wGJAeYB/QH/AZUB5wL/AZoB5QL/ - AQABygHnAf8BAAHLAecB/wHHAfcB/QH/AQAB3AH1Af8BAAHhAfcB/wEAAdQB8QH/AQABmQHeAf8BAAGN - AdYB/wgAAdQBngEABf8C/gH8Af8C/QH7Af8C/QH8Af8C/QH7Af8C/QH5Af8C/AH4Af8B+wH5AfcB/wH7 - AfkB9QH/AfsB+AH0Af8B+wH3AfIB/wH7AfUB8gX/AbICAAH/BAABqAKmAf0D4gH/A9IB/wPGAf8DzQH/ - A7EB/wMsAUQIAAMsAUQDqAH/A8IB/wO3Af8DwAH/A9IB/wNAAf0HAAEBA0wBkgHgAakBiAH/AesBxwGw - Af8B3QGhAQAB/wG8AaUBlQH/A6wB/wPQAf8D1AH/A+8B/wP5Af8D9gH/A/YB/wP8Af8DJAE2AQABwgHh - Af8ByQHzAfwB/wHLAfMB/QH/AdQB9gH+Af8B1wH2Av8B2AH0Av8B4AH4Av8BqQHjAfUB/wEAAdMB7gH/ - AccB9wH9Af8BAAHcAfUB/wEAAeIB9wH/AQAB1gHyAf8BAAGYAd4B/wMhATAEAAHVAaABAAX/Av0B/AH/ - Av0B+wH/Av0B+gH/AvwB+QH/AfwB+wH3Af8B+wH5AfUB/wH7AfgB9AH/AfsB9wHzAf8B+wH1AfIB/wH6 - AfMB7wH/AfgB8gHsBf8BtQIAAf8EAAGoAqYB/QPpAf8D1gH/A8kB/wPOAf8DpQH/AywBRAgAAywBRAOs - Af8DxAH/A7oB/wPGAf8D3QH/A0AB/QcAAQEDJAE2AfAB1gHGAf8B3gGtAZAB/wHEAa8BowH/A9UB/wO7 - Af8DpgH/A6AB/wOQAf8DyQH/A/MB/wPyAf8D/AH/AyQBNgEAAcMB4QH/AYgBoAGoAf8DkQH/A44B/wEA - AbkB3AH/AQABuAHfAf8BAAG1Ad4B/wEAAbEB3QH/AQABsAHeAf8BAAHUAe4B/wHEAfYB/QH/AQAB3QH2 - Af8BAAHKAe0B/wEAAaMB1wH/AWACWQHsAxsBJgHYAaIBAAX/Av0B+gH/AvwB+gH/AfwB+wH5Af8B+wH6 - AfYB/wH7AfgB9QH/AfsB9wH0Af8B+wH2AfEB/wH4AfQB7gH/AfcB8gHrAf8B9wHwAeoB/wH2AewB6AX/ - AbcBgQEAAf8EAAFcAloBzQFfAlgB4wFhAlYB7gPYAf8DzQH/A7wB/wFbAlgBxgMsAUQDLAFEAVsCWAHG - A8MB/wPCAf8DzQH/AWECVgHuAV8CWAHjAVwCWgHNBwABAQMkATYD/AH/A/sB/wOsAf8DywH/A9IB/wPJ - Af8D0gH/A8YB/wOPAf8D7wH/A+0B/wP8Af8DJAE2BAABWwJZAcMDxgH/A5QB/wMGAQgQAAM3AVoBAAHT - AesB/wGyAeMB+QH/AYsBwAHnAf8BrgHTAfYB/wHEAeAB/AH/A2cB9wHZAaMBAAX/AfwB+wH5Af8B/AH7 - AfgB/wH7AfkB9wH/AfsB9wH0Af8B+gH3AfIB/wH5AfUB8AH/AfcB8wHtAf8B9gHvAeoB/wH1AesB5wH/ - AfMB6gHkAf8B8gHnAd4F/wG6AYUBAAH/DAADSAGFA9QB/wPMAf8DyQH/A7oB/wOcAf8DoQH/A8IB/wPG - Af8DwQH/A7cB/wNIAYUPAAEBAyQBNgP8Af8D+wH/A9sB/wOyAf8D1gH/A6AB/wOSAf8DwAH/A4oB/wPq - Af8D5gH/A/wB/wMkATYEAANUAa4DxAH/A6EB/wMdASkQAAMdASkBAAGZAakB/wEAAb4B5wH/AbQB0gHw - Af8B5QHzAv8BrAHSAe8B/wFfAlcB6AHbAaQBADX/Ab0BhwEAAf8IAANFAX0DfwH+A9wB/wPUAf8D2QH/ - A9sB/wPWAf8D1AH/A9kB/wPSAf8DywH/A8gB/wF6AnkB/gNFAX0LAAEBAyQBNgP8Af8D+QH/A9oB/wO1 - Af8D5gH/A5oB/wOwAf8DrwH/A70B/wP8Af8D/AH/A/wB/wMkATYEAANCAXUDugH/A78B/wFeAlgB3QMW - AR8DBAEFAwQBBQMWAR8BZQJeAeUDqAH/AQABpAGzAf8BAAGlAdgB/wGFAbEB2wH/AQABnQHQAf8DOAFe - AdwBpwEAAf8B3AGnAQAB/wHcAacBAAH/AdwBpwEAAf8B3AGnAQAB/wHcAacBAAH/AdwBpwEAAf8B3AGn - AQAB/wHcAacBAAH/AdwBpwEAAf8B3AGnAQAB/wHcAacBAAH/AdwBpwEAAf8B3AGnAQAB/wHAAYsBAAH/ - CAADRAF7A9wB/wPtAf8D2wH/AWUCXQH0A38B/gPWAf8D1AH/A38B/gFlAl0B9APLAf8D5wH/A7cB/wNE - AXsLAAEBAyQBNgP8Af8D9wH/A+8B/wOmAf8D4QH/A9IB/wO0Af8D6gH/A/wB/wP2Af8D9AH/AU0CTAGR - AxcBIAQAAwkBDAFfAloB2wPEAf8DvgH/A6EB/wOWAf8DkwH/A5cB/wOuAf8DrgH/AV8CWgHbAwcBCQwA - AagBpgGDAf0B6AG5AZIB/wHoAbkBkgH/AegBuQGSAf8B6AG5AZIB/wHoAbkBkgH/AegBuQGSAf8B6AG5 - AZIB/wHoAbkBkgH/AegBuQGSAf8B6AG5AZIB/wHoAbkBkgH/AegBuQGSAf8B6AG5AZIB/wGoAY4BQAH9 - DAABUAJPAZsBqAKmAf0BZAJcAecDEgEZAWQCXAHnA94B/wPdAf8BZAJcAecDEgEZAWQCXAHnAacCpQH9 - AVACTwGbEAADJAE2AagCpgH9A/QB/wP1Af8D1AH/A6UB/wOdAf8DvgH/A+kB/wP8Af8D5wH/AU0CTAGR - AxcBIAMBAQIIAAMhATABYAJaAd4DvAH/A8oB/wPMAf8DygH/A8IB/wOtAf8BYAJaAd4DIQEwEAADPgFr - AWUCXQH0AdwBpwEAAf8B3AGmAQAB/wHaAaQBAAH/AdgBogEAAf8B1QGgAQAB/wHUAZ4BAAH/AdIBnQEA - Af8BzwGaAQAB/wHOAZkBAAH/AcsBlgEAAf8ByQGUAQAB/wFlAl0B9AM+AWsQAAMdASkDCgEOAwEBAgFc - AlUB6gPlAf8D5AH/AVwCVQHqAwEBAgMKAQ4DHQEpFAADIwEzAV0CVAHwAagCpgH9A/wB/wP8Af8D/AH/ - A/wB/wP8Af8D/AH/A/gB/wFNAkwBkQMXASADAQECEAADCQEMAUcCRgGBAVcCVQG6AVwCWQHMAVwCWQHM - AVcCVQG6AUcCRgGBAwkBDGwAAzsBYwFZAlcBvwFZAlcBvwM7AWMgAAMUARwDIwEzAyQBNgMkATYDJAE2 - AyQBNgMkATYDJAE2AyQBNgMkATYDFwEgAwEBAggAAUIBTQE+BwABPgMAASgDAAFAAwABMAMAAQEBAAEB - BQABgAEBFgAD/wEAAv8/AAEfBwABHwcAAR8GAAH4AR8GAAH4AR8GAAH4AR8GAAH4AR8GAAL/BgAB/AE/ - AQ8B/wGAAQEC/wHgAgcB/wGAAQEB4AH/AcABAwEAAT8BgAEBAcABDwHAAQMBAAEfAYABAQGAAQcBwAED - AYABHwHAAQMBAAEDAcABAwHAAQ8B4AEHAQABAQHAAQMBwAEDAfABDwEAAQEBwAEDAcABAQH8AT8BAAEB - AcABAwHAAQEB/AE/AQABAQHAAQMBwAEBAfABDwEAAQEBwAEDAeABAQHgAQcBAAEBAcABAwH4AQEBwAED - AQABAQHAAQMB/AEAAYABAQEAAQEBwAEDAfwBAAGAAQEBgAEDAeABBwH+AQABgAEBAcABBwP/AfABgAEB - AeABDwEAAQMC/wH8AT8BwAIAAQMC/wHgAQcBwAIAAQMBAAEBAcABAwMAAQMBAAEBAYABAQMAAQMBAAEB - AYABAQMAAQMBAAEBAcABAwMAAQMBAAEBAgABgAIAAQMBAAIBAoACAAEBAQACAQKABAABAQIAAYABAAGH - AYABAAEBAcABAwGAAQABhwGAAQABAQGAAQEBgAEAAYACAAEBAYABAQGAAQABgAEHAQABAQHAAQMBwAEA - AcABDwEAAQEB4AEHAcABAQHgAR8C/wH8AT8BwAEDCw== + AwABMAMAAQEBAAEgBgABMP8AEwABhwEKAYAB/wGDAQUBRAH/AUUBAAFDAf8BQgEAAUIB/wE/AQABQQH/ + AcYCAAH/AcYCAAH/AcQCAAH/AcACAAH/AcACAAH/Ab8CAAH/AUIBFQEAAf8BQAEQAQAB/wE9AQwBAAH/ + ATsBCAEAAf8BOQEFAQAB/8AAAQcBAwHzAf8BmQGbAf4B/wGWAZgB/gH/AZMBlQH+Af8BkQGTAf4B/wHJ + AQkBAAH/AeABkwEjAf8B3wGPAR8B/wHfAY0BGwH/Ad4BigEXAf8BwAIAAf8BogHJAZ4B/wGdAcYBmQH/ + AZgBwwGVAf8BlAHAAZEB/wEAATMBAAH/wAABEAENAfUB/wGeAaAB/gH/ASEBJAH+Af8BHAEfAf4B/wGV + AZcB/gH/Ac0BEgEAAf8B4QGXASkB/wHaAYABBwH/AdkBQwEBAf8B3wGPAR4B/wHGAgAB/wGoAc0BpAH/ + AT0BsAE3Af8BNgGrATAB/wGaAcQBlgH/AQABPAEAAf/AAAEZARcB9gH/AaIBpAH+Af8BKAEsAf4B/wEj + AScB/gH/AZkBmwH+Af8BzwEbAQAB/wHjAZwBMgH/AdwBhgEQAf8B2wGDAQoB/wHgAZQBJAH/AcYBAgEA + Af8BrwHRAasB/wGAAbcBQAH/AT8BsgE5Af8BoAHIAZwB/wEAAYABAgH/wAACIQH4Af8BqAGqAf4B/wEx + ATUB/gH/ASsBLwH+Af8BngGgAf4B/wHRASYBAAH/AeUBogE6Af8B3gGMARkB/wHdAYkBEwH/AeIBmQEs + Af8ByQELAQAB/wG1AdUBsAH/AYoBvQGDAf8BgwG4AUMB/wGnAc0BowH/AQMBiwEKAf/AAAEpASoB+gH/ + AawBrwH+Af8BOAE8Af4B/wEzATcB/gH/AaIBpAH+Af8B1gEvAQAB/wHnAacBQQH/AeABkgEiAf8B3wGP + ARwB/wHkAZ4BNAH/Ac0BFAEAAf8BugHZAbUB/wG3AdYBsQH/AbMB0wGuAf8BrgHRAakB/wELAZYBEwH/ + wAABMAEyAfwB/wGwAbMB/gH/AT8BRAH+Af8BOwE/Af4B/wGoAaoB/gH/AdgBOgEAAf8B6AGtAYMB/wHi + AZgBKwH/AeEBlQEmAf8B5QGjATwB/wHPAR0BAAH/ASYBvAEyAf8BIgG2AS0B/wEdAbABJwH/ARgBqAEi + Af8BEwGhARsB/8AAATYBOQH9Af8BtAG3Af4B/wGBAYUB/gH/AUIBgQH+Af8BrAGvAf4B/wHZAUEBAAH/ + AeoBsgGKAf8B5AGfATQB/wHjAZwBMAH/AecBqAFDAf8B0QEoAQAB/9QAAToBPgH+Af8BuAG7Af4B/wG2 + AbkB/gH/AbMBtgH+Af8BsAGzAf4B/wHfAYQBCwH/AewBtwGSAf8B5gGlAT4B/wHmAaIBOQH/AekBrQGF + Af8B1gExAQAB/9QAAToBPgH+Af8BOgE+Af4B/wE4ATwB/gH/ATQBNwH9Af8BMAEyAfwB/wHhAY0BGAH/ + Ae0BuwGZAf8B6QGsAYEB/wHnAagBQgH/AeoBswGNAf8B2AE6AQAB/+gAAeIBkgEiAf8B7gHBAaAB/wHq + AbEBiQH/AekBrgGFAf8B7QG3AZQB/wHbAUIBAAH/6AAB5gGbAS0B/wHwAcUBpgH/AewBtgGRAf8B6wGz + AYwB/wHuAbwBmwH/Ad8BhQENAf/oAAHoAaABNgH/AfIByAGsAf8B8AHGAagB/wHwAcUBpgH/Ae8BwgGi + Af8B4QGOARkB/+gAAeoBpgE9Af8B6AGkAToB/wHoAaABNAH/AeYBnQExAf8B5AGZASsB/wHiAZUBJAH/ + /wDtAAMKAQ0BIgIhATEDIAEvAwUBBxgAAxEBFwGrAgAB/wFiAVkBSAH2AykBPzQAAwYBCAFAAj8BbgNW + AbMBXgJYAd0BUgJdAfQBQAGEAaYB/QIAAbMB/wIAAagB/wJAAZwB/QJSAV0B9AFaAlgB3QNWAbMBQAI/ + AW4DBgEIUAADGAEhA1ABnQFdAlQB8AOhAf8DqwH/A6cB/wOVAf8BZAJcAecDSgGKAxABFgwAAboCAAH/ + AcABiQEAAf8BvwGJAQAB/wGvAgAB/wMqAUEwAAFbAlkBxAGHAbcB4AH/AZUBxgHmAf8BmwHNAekB/wGc + Ac0B6QH/AZkBxwHnAf8BlQHBAeQB/wGOAbgB4AH/AYkBsAHdAf8BgQGnAdcB/wEAAZsBzwH/AQABjAHC + Af8CAAGuAf8BWwJZAcQQAAMJAQwCRgFHAYECWQFcAckCAAHoAf8DHwEtKAADLwFKAWUCXQH0A84B/wPt + Af8D9AH/A/UB/wP0Af8D7wH/A+IB/wO6Af8BZAJcAecDJAE1CAABwwGIAQAB/wHPAaIBAAH/Ac0BogGB + Af8BwAGMAQAB/wGwAgAB/wFOAk0BlQMxAU4DJgE5AxYBHgMDAQQcAAFbAlkBxAGYAbkB1AH/AcUBxwHE + Af8B7AHYAccB/wH2AesB4wH/AfoB9QHxAf8B8wHnAd4B/wHfAb8BpgH/AdABpAGBAf8BywGaAQAB/wHI + AZcBAAH/AaMBkwGMAf8CAAGcAf8BWwJZAcQMAAMtAUUCWgFgAd4BDAEKAesB/wEgASEB5wH/AgAB6QH/ + Ax8BLQFdAlkB0gFcAlkByQFHAkYBgQMJAQwYAAFcAlUB6gPeAf8D8wH/A9sB/wPSAf8D2wH/A9YB/wPA + Af8DyQH/A+YB/wPEAf8BXAJVAeoIAANAAXEBzAGZAQAB/wHQAaMBgQH/Ac8BpAGDAf8BygGeAQAB/wG8 + AYUBAAH/Aa8CAAH/AacCAAH/AZ4CAAH/AVsCWAHGAwcBCRgAAx0BKgHmAcMBpQH/Ae8B1gHAAf8B+wHy + AeoB/wH+AfwB+gL/Af4B/QH/Af4B/QH8Af8B/AH2AfAB/wH4AegB2QH/AfYB4wHRAf8B9gHiAc4B/wHm + AcgBrQH/Ac4BoAEAAf8DHQEqCAADNAFUAhYB8wH/ATEBMwHuAf8BlAGZAesB/wGNAZEB6QH/AgAB7AH/ + Ax8BLQFdAlkB0gHWAY4BFgH/AbgBGgEAAf8BYAJaAd4DLgFIFAABXAJVAeoD8AH/A94B/wPUAf8D0gH/ + A9sB/wPWAf8DvwH/A7AB/wOzAf8D3gH/AVwCVQHqDAADQQFyAc4BnQEAAf8B1QGsAYwB/wHLAZsBAAH/ + AcwBoAEAAf8ByAGbAQAB/wHFAZUBAAH/AcABjwEAAf8BrAIAAf8DQgF2HAABWAJWAbkB7QHTAbsB/wH6 + AfAB5QH/Af0B+QH1Af8B/gH8AfoB/wH+Af0B/AH/Af0B+QH0Af8B9gHjAc8B/wH3AeUB0wH/AfYB4wHR + Af8B3QG5AZoB/wFXAlYBuAgAAxABFQNfAfMBlQGZAfIB/wGlAaoB7gH/AS8BgQHmAf8BlwGaAesB/wIA + Ae8B/wMfAS0BXQFbAVkB0gHbAZkBJAH/AeYBpAEzAf8BywGAAQsB/wGmAQkBAAH/AzQBVBAAAVwCVQHq + A/IB/wPiAf8D2AH/A9UB/wPcAf8D2AH/A8AB/wOzAf8DtwH/A+AB/wFcAlUB6hAAAVYCVQGxAdMBqAGG + Af8B1gGsAY4B/wHJAZgBAAH/AcQBkAEAAf8BvwGKAQAB/wHCAY8BAAH/Ab8BiwEAAf8BXwFdAUYB+wMd + ASkcAAFVAlMBsAN/Af4B9wHqAd4B/wH+AfoB9wH/Af4B/AH5Af8B/QH3AfIB/wH6Ae0B4gH/AesB0AG3 + Af8CfwF+Af4DVAGuDAADDQERA04BmQJiAWoB+QGEAYUB9AH/AaMBqAHvAf8BoAGlAe0B/wEDAQAB8QH/ + Ax8BLQJdAVkB0gHeAaEBLQH/Ad4BiQEPAf8B5gGmATMB/wHQAYcBEAH/AV8CTAHzAxABFQwAAVwCVQHq + A/MB/wPnAf8D3QH/A9kB/wPgAf8D2wH/A8QB/wO4Af8DuwH/A+EB/wFcAlUB6hAAAzEBTgHUAaMBAAH/ + AdwBtQGYAf8B0AGhAQAB/wHMAZoBAAH/Ac8BpAGDAf8ByAGaAQAB/wEAAYwBAAH/AQABuAEAAf8BXwFO + ATAB+wNUAa8DBwEJGAADJwE6AWECWwHhAfMB4gHSAf8B/AH0Ae0B/wH7AfEB5wH/AekBzAG1Af8BYQJc + AdwDJgE4EAADQgFzAzwBZgMUARsDSgGNAl0BXwHzATABMgHzAf8BDQEMAfQB/wMfAS0CXQFZAdIB4QGo + AYEB/wHgAZIBGAH/AdkBLQEAAf8B5wGoAYQB/wG+ASQBAAH/A0gBhAwAAVwCVQHqA/QB/wPqAf8D4QH/ + A90B/wPjAf8D3gH/A8kB/wO9Af8DvwH/A+IB/wFcAlUB6hAAAyYBOQHbAasBiQH/AeEBvQGiAf8B1gGq + AYcB/wHZAbMBlAH/Ac4BnwEAAf8BXwJdAfsBAAG8AQAB/wGTAgAB/wGwAgAB/wGkAgAB/wFhAl4B2gMD + AQQcAANZAccB9AHjAdAB/wHzAd8BzQH/AVsCWQHDGAABWQFcAVkBzwGQAb8BkwH/AVUBXAFVAeoDQQFy + AxUBHQNEAXsDXQHtAx8BLQJdAVkB0gHkAbABiwH/AeMBnAEhAf8B3QGFAQgB/wHiAZYBGwH/AdoBlwEh + Af8BXAJZAc8MAAFcAlUB6gP1Af8D7gH/A+YB/wPiAf8D5gH/A+EB/wPNAf8DwgH/A8IB/wPjAf8BXAJV + AeoQAAMWAR4B4AGxAY8B/wHmAcQBqwH/AeIBvwGkAf8B2AGtAY4B/wNNAfoDQwF3AysB/AG7AYQBAAH/ + AcABjwEAAf8BvAGKAQAB/wGcAgAB/wMWAR4cAAFbAlkBwwH0AeEBzgH/AfMB3wHMAf8BWQJXAcIYAAFa + Al0B8AHKAegByAH/Aa8B2QGrAf8BkgG/AZQB/wNdAe0BRQFGAUUBfgMPARQDEgEYAl0BWQHSAecBtwGT + Af8B5wGmASsB/wHgAZABEQH/Ad4BjgEQAf8B5gGtAYgB/wFfAVQBTAHzDAABXAJVAeoD9gH/A+sB/wPe + Af8D1gH/A9UB/wPRAf8DwwH/A7wB/wPAAf8D5QH/AVwCVQHqEAADAwEEAWECXgHaAeQBuwGfAf8B5AG7 + AZ8B/wMrAfwBAAHBAQAB/wMrAfwBxwGWAQAB/wHLAZ4BAAH/AbwBhQEAAf8BwwGSAQAB/wGmAgAB/wMm + ATkUAAMmATgBXgJYAd0B8wHdAckB/wH6Ae4B4gH/AfkB6wHeAf8B7QHQAbYB/wFfAloB2wMmATgQAAFg + AmoB+QG2AeABsQH/AS8BzAEjAf8BkgHSAYkB/wGtAdkBqQH/AYkBuAGLAf8DUAGdAzUBVgJiAUkB9gHv + AcgBqQH/AeYBpgEnAf8B4gGbARsB/wHiAZgBGgH/AecBswGPAf8BXQFcAU4B8AwAAVwCVQHqA/cB/wPn + Af8D7wH/A/YB/wP7Af8D+gH/A/AB/wPeAf8DwwH/A+YB/wFcAlUB6hQAAwcBCQNUAa8BagJmAfkBAAHF + AYIB/wG1AbABgQH/AdgBsAGSAf8B1wGuAY8B/wHJAZcBAAH/AcMBjwEAAf8ByAGbAQAB/wGxAgAB/wMx + AU4QAANUAa8DfwH+AfkB7AHgAf8B/QH4AfQB/wH7AfAB5gH/AfgB5wHXAf8B+QHrAd4B/wHyAdoBxQH/ + A38B/gNUAa4MAANcAc8BugHfAbgB/wEuAcwBIQH/ARoBxgENAf8BJgHIARoB/wGoAdoBowH/ARwBqAEh + Af8DKAE8A1sBwwHmAbUBjgH/AfABzAGsAf8B5QGmASUB/wHpAbEBhAH/AeMBrwGIAf8CXAFZAc8MAAFc + AlUB6gP4Af8D/hn/A/sB/wPqAf8BXAJVAeocAAMbASYBqAGmAYQB/QHiAb4BowH/Ad8BtwGaAf8B1QGo + AYYB/wHQAaEBAAH/AcsBmgEAAf8BzgGiAYEB/wG/AYsBAAH/AU4CTQGVDAABVwJWAbgB+QHjAc0B/wH7 + AfMB7AH/Af4B+gH3Af8B/gH7AfgB/wH8AfUB7QH/AfcB5gHVAf8B9gHhAcwB/wH5AewB3wH/AfkB6wHd + Af8B6wHOAbQB/wFXAlYBuAgAA0gBhAGzAdoBtQH/AaIB2AGaAf8BIQHKARMB/wEaAcYBDAH/AYABzAEp + Af8BowHOAaMB/wFZAVwBWQHPAyIBMgFTAS8BKwH8AfIB0QGyAf8B6wG5AY0B/wHwAckBqgH/AdgBnAEk + Af8DSAGEDAABWQJXAb8D4QH/A/4Z/wP7Af8DzwH/AVICUQGhIAADQgF2AeQBugGdAf8B5gHEAasB/wHi + Ab4BpAH/Ad4BuQGcAf8B2QGyAZMB/wHRAaMBAAH/AdEBpgGFAf8BuwIAAf8DKQE/BAADHQEqAcABxQHN + Af8BmgG3AdwB/wEAAaYB1QH/AQABlQHKAf8BAAGHAb4B/wIAAbMB/wIAAagB/wIAAZ8B/wIAAZgB/wIA + AZoB/wEAAYMBpwH/AYgBlAGaAf8DHQEqBAADDQESA18B8wG+AeEBvgH/AZQB1AGJAf8BIgHKARYB/wEi + AckBFAH/AZ4B1gGXAf8BkwHBAZYB/wM9AWkDTgGWAecBtAGOAf8B8wHTAbUB/wHpAbsBmAH/Al8BTAHz + Aw0BEgwAAx0BKgFcAlgB0QPQAf8D6AH/A/MB/wP9Af8D/AH/A+0B/wPgAf8DwgH/AVsCWQHDAxQBGyAA + AwcBCQFbAlgBxgHjAbQBkwH/Ad8BsQGOAf8B2gGrAYkB/wHaAa0BjAH/AdwBtQGYAf8B1wGvAZAB/wHM + AZsBAAH/A00B+gQAAVwCWAHRAYcBtwHgAf8BlQHGAeYB/wGbAc0B6QH/AZwBzQHpAf8BmQHHAecB/wGV + AcEB5AH/AY4BuAHgAf8BiQGwAd0B/wGBAacB1wH/AQABmwHPAf8BAAGMAcIB/wIAAa4B/wFcAlgB0QgA + AzIBUQGgAdUBqAH/AboB4AG7Af8BpwHaAaAB/wExAc4BJAH/ATMBzQEnAf8BsAHZAa0B/wNdAe0DGQEj + A10B7QHrAcIBngH/Ad0BogEnAf8DMgFRFAADBQEHATUCNAFVA1QBrgFgAlsB1gFfAl0B+wFqAmYB+QFc + AloBzQNSAakDLQFGAwIBAygAAwMBBAMWAR4DJgE5AzEETgGUAdgBpwGCAf8B1wGsAYsB/wHTAacBhAH/ + AWIBXAFJAfYEAAFbAlkBxAGHAbcB4AH/AZUBxgHmAf8BnQHPAeoB/wGhAdMB7AH/AaAB0QHrAf8BmwHK + AegB/wGWAcIB5QH/AY8BugHiAf8BhwGxAd0B/wEAAaMB1AH/AQABkAHEAf8CAAGuAf8BWwJZAcQMAAMp + AT8DYAHeAbQB3AG3Af8BvAHgAboB/wG5AeEBtQH/Ac4B6gHLAf8BpAHOAaYB/wFNAk4BlgM9AWkDYAHe + AykBP3wAAykBPgFfAl0B+wFiAlwB9gMuAUgEAAMGAQgBQAI/AW4DVgGzAV4CWAHdAWUCXQH0AUABnQGm + Af0BAAGZAdEB/wEAAZAByAH/AUABhAGmAf0BUgJdAfQBWgJYAd0DVgGzAUACPwFuAwYBCBAAAwkBDANG + AX4DWwHGASsBRQErAfwBKwE/ASsB/ANbAcYDRQF9AwIBAwMHAQoRAAGdAdkB/wEAAZkB2AH/AQABlAHX + Af8BAAGQAdYB/wEAAYwB1QH/AQABiAHUAf8BAAGEAdMB/wEAAYEB0gH/AgAB0QH/AgAB0QH/AgAB0AH/ + AgABzwH/AgABzwH/AgABzgH/YAADOwFjAVkCVwG/AVgCVwG/AzsBYyAAAxUBHQMjATQDJAE2AyQBNgMk + ATYDJAE2AyQBNgMkATYDJAE2AyQBNgMkATYDJAE2AyMBMwMVAR0BAAGjAdoB/wG8AesB+gH/AbwB6wH8 + Af8BvwHuAf4B/wHGAfQC/wHOAfgC/wHTAfoC/wHQAfgC/wHHAfIC/wG6AekB/AH/AbMB5AH5Af8BsAHi + AfgB/wGwAeIB+AH/AgABzwH/VAADHQEpAwoBDgMBAQIBXAJVAeoDvQH/A7IB/wFcAlUB6gMBAQIDCgEO + Ax0BKRQAAyMBNANZAfUBqAKmAf0D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wGoAqYB/QFf + Al0B8wMjATMBAAGoAdsB/wG/AewB+wH/AQABzwH1Af8BAAGwAewB/wMAAf8CAAGJAf8BAAGJAb4B/wEA + AZoByAH/AQABrgHnAf8BAAGlAeYB/wEAAZoB4QH/AQABuAHuAf8BsQHjAfgB/wIAAdAB/wgAA1IBqQHD + AY4BAAH/AcABiwEAAf8BvgGIAQAB/wG7AYUBAAH/AbkBgwEAAf8BtAIAAf8BsgIAAf8BsQIAAf8BrgIA + Af8BrQIAAf8BqwIAAf8BqQIAAf8BqQIAAf8DUgGpDAABUAJPAZsDQAH9AWQCXAHnAxIBGQFkAlwB5wPL + Af8DxwH/AWMCXAHnAxIBGQNcAecDQAH9AVACTwGbCAADNwFbAV0BVAFOAfABYgFcAUgB9gHlAbcBmgH/ + AfsC+gH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8D/AH/AagCpgH9AyQBNgEAAa0B3AH/ + AcEB7gH7Af8BAAHTAfcB/wEAAdsB/AH/AgABhQH/AZQBxwH5Af8BkQHJAfkB/wEAAYUByQH/AgABrgH/ + AQABvQHsAf8BAAG+Ae8B/wEAAboB7gH/AbMB4wH5Af8CAAHRAf8IAAHIAZIBADX/AakCAAH/CAADRAF7 + A7wB/wPeAf8DpgH/AWUCXQH0A38B/gPEAf8DwgH/AW4CbQH+AWUCXQH0A6YB/wPSAf8DgQH/A0QBewQA + AWICWAHvAeYBuAGcAf8B6QG/AaUB/wHcAZsBAAH/AeUBuAGdAf8D/AH/A/wB/wP8Af8D+wH/A/sB/wP7 + Af8D+wH/A/sB/wP7Af8D/AH/AyQBNgEAAbIB3QH/AcMB7wH7Af8BAAHWAfgB/wEAAbYB7AH/AQABiQGq + Af8B4AHyAv8BAAGaAdgB/wIAAb4B/wEAAZgBxQH/AQABhgHFAf8BAAGbAd4B/wEAAb4B7wH/AbQB5QH5 + Af8CAAHSAf8IAAHKAZQBAAv/Af4D/wH9Af8C/gH9Af8C/gH8Af8C/gH8Af8C/gH8Af8C/gH8Af8C/gH6 + Af8C/gH6Af8C/AH5Bf8BqgIAAf8IAANFAX0DfwH+A9UB/wPFAf8DywH/A9EB/wPJAf8DxwH/A8wB/wPF + Af8DvQH/A8sB/wFvAm4B/gNFAX0EAAFtAmcB9wHrAcQBrQH/AewByAGyAf8B6gHBAakB/wHeAZ4BAAH/ + AecBuwGhAf8D/AH/A/sB/wP7Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP8Af8DJAE2AQABtwHeAf8BxgHw + AfwB/wEAAdkB+AH/AQAB4gH9Af8BAAG3AdkB/wEAAbYB1QH/AZABtwHRAf8BAAHJAeQB/wEAAd8B9QH/ + AQAB0AHtAf8BAAGYAdwB/wEAAboB7QH/AbYB5wH5Af8BAAGDAdMB/wgAAcwBlwEAB/8B/AP/Af0B/wL+ + AfwB/wL+AfwB/wL+AfsB/wL9AfoB/wL9AfoB/wL9AfoB/wL9AfoB/wL8AfcB/wL7AfYF/wGsAgAB/wwA + A0gBhQPFAf8DwQH/A8UB/wPHAf8DqgH/A6cB/wPBAf8DvgH/A7UB/wOqAf8DSAGFCAADQgF1AWoCZgH5 + AewBxwGwAf8B7QHKAbUB/wHrAcMBqwH/Ad4BoQEAAf8B5wG6AZ8B/wP7Af8D+wH/A/sB/wP6Af8D+gH/ + A/gB/wP4Af8D/AH/AyQBNgEAAbsB3wH/AccB8QH8Af8BAAHcAfkB/wEAAbsB7QH/AQABvQHvAf8BAAHG + AecB/wEAAbgB1gH/AcIB9gH9Af8BAAHfAfcB/wEAAeIB+AH/AQAB0wHwAf8BAAGXAdwB/wGoAdwB9QH/ + AQABiAHUAf8IAAHRAZwBAAX/Av4B/AH/Av4B/AH/Av4B/AH/Av0B+wH/Av0B+wH/Av0B+gH/Av0B+AH/ + AvsB+QH/AfsB+gH3Af8B+wH6AfYB/wH7AfgB9AX/AbACAAH/BAABXAJaAc0BXwJYAeMBYQJWAe4DzwH/ + A8YB/wPMAf8BWwJYAcYDLAFEAywBRAFbAlgBxgPBAf8DvAH/A7kB/wFhAlYB7gFbAlgB4wNaAc0EAAND + AXgDfwH+Ae0ByAGzAf8B7QHNAbgB/wHpAb4BowH/AdYBjgEAAf8D/AH/A/wB/wP8Af8D+wH/A/kB/wP5 + Af8D+AH/A/wB/wMkATYBAAG/AeAB/wHIAfMB/AH/AQAB3wH5Af8BiQHmAf0B/wGVAecC/wGaAeUC/wEA + AcoB5wH/AQABywHnAf8BxwH3Af0B/wEAAdwB9QH/AQAB4QH3Af8BAAHUAfEB/wEAAZkB3gH/AQABjQHW + Af8IAAHUAZ4BAAX/Av4B/AH/Av0B+wH/Av0B/AH/Av0B+wH/Av0B+QH/AvwB+AH/AfsB+QH3Af8B+wH5 + AfUB/wH7AfgB9AH/AfsB9wHyAf8B+wH1AfIF/wGyAgAB/wQAAagCpgH9A+IB/wPSAf8DxgH/A80B/wOx + Af8DLAFECAADLAFEA6gB/wPCAf8DtwH/A8AB/wPSAf8DQAH9BwABAQNMAZIB4AGpAYgB/wHrAccBsAH/ + Ad0BoQEAAf8BvAGlAZUB/wOsAf8D0AH/A9QB/wPvAf8D+QH/A/YB/wP2Af8D/AH/AyQBNgEAAcIB4QH/ + AckB8wH8Af8BywHzAf0B/wHUAfYB/gH/AdcB9gL/AdgB9AL/AeAB+AL/AakB4wH1Af8BAAHTAe4B/wHH + AfcB/QH/AQAB3AH1Af8BAAHiAfcB/wEAAdYB8gH/AQABmAHeAf8DIQEwBAAB1QGgAQAF/wL9AfwB/wL9 + AfsB/wL9AfoB/wL8AfkB/wH8AfsB9wH/AfsB+QH1Af8B+wH4AfQB/wH7AfcB8wH/AfsB9QHyAf8B+gHz + Ae8B/wH4AfIB7AX/AbUCAAH/BAABqAKmAf0D6QH/A9YB/wPJAf8DzgH/A6UB/wMsAUQIAAMsAUQDrAH/ + A8QB/wO6Af8DxgH/A90B/wNAAf0HAAEBAyQBNgHwAdYBxgH/Ad4BrQGQAf8BxAGvAaMB/wPVAf8DuwH/ + A6YB/wOgAf8DkAH/A8kB/wPzAf8D8gH/A/wB/wMkATYBAAHDAeEB/wGIAaABqAH/A5EB/wOOAf8BAAG5 + AdwB/wEAAbgB3wH/AQABtQHeAf8BAAGxAd0B/wEAAbAB3gH/AQAB1AHuAf8BxAH2Af0B/wEAAd0B9gH/ + AQABygHtAf8BAAGjAdcB/wFgAlkB7AMbASYB2AGiAQAF/wL9AfoB/wL8AfoB/wH8AfsB+QH/AfsB+gH2 + Af8B+wH4AfUB/wH7AfcB9AH/AfsB9gHxAf8B+AH0Ae4B/wH3AfIB6wH/AfcB8AHqAf8B9gHsAegF/wG3 + AYEBAAH/BAABXAJaAc0BXwJYAeMBYQJWAe4D2AH/A80B/wO8Af8BWwJYAcYDLAFEAywBRAFbAlgBxgPD + Af8DwgH/A80B/wFhAlYB7gFfAlgB4wFcAloBzQcAAQEDJAE2A/wB/wP7Af8DrAH/A8sB/wPSAf8DyQH/ + A9IB/wPGAf8DjwH/A+8B/wPtAf8D/AH/AyQBNgQAAVsCWQHDA8YB/wOUAf8DBgEIEAADNwFaAQAB0wHr + Af8BsgHjAfkB/wGLAcAB5wH/Aa4B0wH2Af8BxAHgAfwB/wNnAfcB2QGjAQAF/wH8AfsB+QH/AfwB+wH4 + Af8B+wH5AfcB/wH7AfcB9AH/AfoB9wHyAf8B+QH1AfAB/wH3AfMB7QH/AfYB7wHqAf8B9QHrAecB/wHz + AeoB5AH/AfIB5wHeBf8BugGFAQAB/wwAA0gBhQPUAf8DzAH/A8kB/wO6Af8DnAH/A6EB/wPCAf8DxgH/ + A8EB/wO3Af8DSAGFDwABAQMkATYD/AH/A/sB/wPbAf8DsgH/A9YB/wOgAf8DkgH/A8AB/wOKAf8D6gH/ + A+YB/wP8Af8DJAE2BAADVAGuA8QB/wOhAf8DHQEpEAADHQEpAQABmQGpAf8BAAG+AecB/wG0AdIB8AH/ + AeUB8wL/AawB0gHvAf8BXwJXAegB2wGkAQA1/wG9AYcBAAH/CAADRQF9A38B/gPcAf8D1AH/A9kB/wPb + Af8D1gH/A9QB/wPZAf8D0gH/A8sB/wPIAf8BegJ5Af4DRQF9CwABAQMkATYD/AH/A/kB/wPaAf8DtQH/ + A+YB/wOaAf8DsAH/A68B/wO9Af8D/AH/A/wB/wP8Af8DJAE2BAADQgF1A7oB/wO/Af8BXgJYAd0DFgEf + AwQBBQMEAQUDFgEfAWUCXgHlA6gB/wEAAaQBswH/AQABpQHYAf8BhQGxAdsB/wEAAZ0B0AH/AzgBXgHc + AacBAAH/AdwBpwEAAf8B3AGnAQAB/wHcAacBAAH/AdwBpwEAAf8B3AGnAQAB/wHcAacBAAH/AdwBpwEA + Af8B3AGnAQAB/wHcAacBAAH/AdwBpwEAAf8B3AGnAQAB/wHcAacBAAH/AdwBpwEAAf8BwAGLAQAB/wgA + A0QBewPcAf8D7QH/A9sB/wFlAl0B9AN/Af4D1gH/A9QB/wN/Af4BZQJdAfQDywH/A+cB/wO3Af8DRAF7 + CwABAQMkATYD/AH/A/cB/wPvAf8DpgH/A+EB/wPSAf8DtAH/A+oB/wP8Af8D9gH/A/QB/wFNAkwBkQMX + ASAEAAMJAQwBXwJaAdsDxAH/A74B/wOhAf8DlgH/A5MB/wOXAf8DrgH/A64B/wFfAloB2wMHAQkMAAGo + AaYBgwH9AegBuQGSAf8B6AG5AZIB/wHoAbkBkgH/AegBuQGSAf8B6AG5AZIB/wHoAbkBkgH/AegBuQGS + Af8B6AG5AZIB/wHoAbkBkgH/AegBuQGSAf8B6AG5AZIB/wHoAbkBkgH/AegBuQGSAf8BqAGOAUAB/QwA + AVACTwGbAagCpgH9AWQCXAHnAxIBGQFkAlwB5wPeAf8D3QH/AWQCXAHnAxIBGQFkAlwB5wGnAqUB/QFQ + Ak8BmxAAAyQBNgGoAqYB/QP0Af8D9QH/A9QB/wOlAf8DnQH/A74B/wPpAf8D/AH/A+cB/wFNAkwBkQMX + ASADAQECCAADIQEwAWACWgHeA7wB/wPKAf8DzAH/A8oB/wPCAf8DrQH/AWACWgHeAyEBMBAAAz4BawFl + Al0B9AHcAacBAAH/AdwBpgEAAf8B2gGkAQAB/wHYAaIBAAH/AdUBoAEAAf8B1AGeAQAB/wHSAZ0BAAH/ + Ac8BmgEAAf8BzgGZAQAB/wHLAZYBAAH/AckBlAEAAf8BZQJdAfQDPgFrEAADHQEpAwoBDgMBAQIBXAJV + AeoD5QH/A+QB/wFcAlUB6gMBAQIDCgEOAx0BKRQAAyMBMwFdAlQB8AGoAqYB/QP8Af8D/AH/A/wB/wP8 + Af8D/AH/A/wB/wP4Af8BTQJMAZEDFwEgAwEBAhAAAwkBDAFHAkYBgQFXAlUBugFcAlkBzAFcAlkBzAFX + AlUBugFHAkYBgQMJAQxsAAM7AWMBWQJXAb8BWQJXAb8DOwFjIAADFAEcAyMBMwMkATYDJAE2AyQBNgMk + ATYDJAE2AyQBNgMkATYDJAE2AxcBIAMBAQIIAAFCAU0BPgcAAT4DAAEoAwABQAMAATADAAEBAQABAQUA + AYABARYAA/8BAAL/PwABHwcAAR8HAAEfBgAB+AEfBgAB+AEfBgAB+AEfBgAB+AEfBgAC/wYAAfwBPwEP + Af8BgAEBAv8B4AIHAf8BgAEBAeAB/wHAAQMBAAE/AYABAQHAAQ8BwAEDAQABHwGAAQEBgAEHAcABAwGA + AR8BwAEDAQABAwHAAQMBwAEPAeABBwEAAQEBwAEDAcABAwHwAQ8BAAEBAcABAwHAAQEB/AE/AQABAQHA + AQMBwAEBAfwBPwEAAQEBwAEDAcABAQHwAQ8BAAEBAcABAwHgAQEB4AEHAQABAQHAAQMB+AEBAcABAwEA + AQEBwAEDAfwBAAGAAQEBAAEBAcABAwH8AQABgAEBAYABAwHgAQcB/gEAAYABAQHAAQcD/wHwAYABAQHg + AQ8BAAEDAv8B/AE/AcACAAEDAv8B4AEHAcACAAEDAQABAQHAAQMDAAEDAQABAQGAAQEDAAEDAQABAQGA + AQEDAAEDAQABAQHAAQMDAAEDAQABAQIAAYACAAEDAQACAQKAAgABAQEAAgECgAQAAQECAAGAAQABhwGA + AQABAQHAAQMBgAEAAYcBgAEAAQEBgAEBAYABAAGAAgABAQGAAQEBgAEAAYABBwEAAQEBwAEDAcABAAHA + AQ8BAAEBAeABBwHAAQEB4AEfAv8B/AE/AcABAws= diff --git a/trunk/ProcessHacker/Properties/Settings.Designer.cs b/trunk/ProcessHacker/Properties/Settings.Designer.cs index 64ce01b86..78a707c0d 100644 --- a/trunk/ProcessHacker/Properties/Settings.Designer.cs +++ b/trunk/ProcessHacker/Properties/Settings.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:2.0.50727.3053 +// Runtime Version:2.0.50727.3074 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -966,5 +966,17 @@ namespace ProcessHacker.Properties { this["CSRProcessesColumns"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("10")] + public int IconMenuProcessCount { + get { + return ((int)(this["IconMenuProcessCount"])); + } + set { + this["IconMenuProcessCount"] = value; + } + } } } diff --git a/trunk/ProcessHacker/Properties/Settings.settings b/trunk/ProcessHacker/Properties/Settings.settings index 9cd218538..05f59fe84 100644 --- a/trunk/ProcessHacker/Properties/Settings.settings +++ b/trunk/ProcessHacker/Properties/Settings.settings @@ -253,5 +253,8 @@ + + 10 + \ No newline at end of file diff --git a/trunk/ProcessHacker/app.config b/trunk/ProcessHacker/app.config index e79eb0a31..adb832daf 100644 --- a/trunk/ProcessHacker/app.config +++ b/trunk/ProcessHacker/app.config @@ -260,6 +260,9 @@ + + 10 + \ No newline at end of file