[mapguide-commits] r7858 - in branches/maestro-5.0.x: Generated Maestro Maestro.Base Maestro.Base/Editor Maestro.Base/UI Maestro.Editors Maestro.Editors/Common/Expression Maestro.Editors/Generic Maestro.Editors/Generic/XmlEditor Maestro.Editors/Generic/XmlEditor/AutoCompletion Maestro.Editors/Properties Maestro.Editors/Resources MaestroAPITests OSGeo.MapGuide.MaestroAPI OSGeo.MapGuide.MaestroAPI/Commands OSGeo.MapGuide.MaestroAPI/ObjectModels OSGeo.MapGuide.MaestroAPI/Schemas OSGeo.MapGuide.MaestroAPI.Http OSGeo.MapGuide.MaestroAPI.Http/Commands Thirdparty/Xsd2Code Thirdparty/Xsd2Code/Xsd2Code.Addin Thirdparty/Xsd2Code/Xsd2Code.Console Thirdparty/Xsd2Code/Xsd2Code.CustomTool Thirdparty/Xsd2Code/Xsd2Code.Library Thirdparty/Xsd2Code/Xsd2Code.Setup Thirdparty/Xsd2Code/Xsd2Code.SetupLibrary Thirdparty/Xsd2Code/Xsd2Code.SetupLibrary/bin Thirdparty/Xsd2Code/Xsd2Code.TestUnit

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Sat Sep 14 09:22:06 PDT 2013


Author: jng
Date: 2013-09-14 09:22:05 -0700 (Sat, 14 Sep 2013)
New Revision: 7858

Added:
   branches/maestro-5.0.x/Generated/RuntimeMap-2.6.0.designer.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedName.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedNameCollection.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionData.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataCollection.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataProvider.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlElementPath.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlParser.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaAssociation.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionData.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionDataCollection.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaManager.cs
   branches/maestro-5.0.x/Maestro.Editors/Resources/document-code.png
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/Commands/HttpCreateRuntimeMap.cs
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/Commands/HttpDescribeRuntimeMap.cs
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Commands/CreateRuntimeMap.cs
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Commands/DescribeRuntimeMap.cs
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/RuntimeMapImpl.cs
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/RuntimeMapInterfaces.cs
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Schemas/RuntimeMap-2.6.0.xsd
Removed:
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedName.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedNameCollection.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionData.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataCollection.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataProvider.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlElementPath.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlParser.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaAssociation.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionData.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionDataCollection.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaManager.cs
Modified:
   branches/maestro-5.0.x/Maestro.Base/Editor/XmlEditor.cs
   branches/maestro-5.0.x/Maestro.Base/Strings.Designer.cs
   branches/maestro-5.0.x/Maestro.Base/Strings.resx
   branches/maestro-5.0.x/Maestro.Base/UI/ResourceIdNavigator.cs
   branches/maestro-5.0.x/Maestro.Editors/Common/Expression/FdoExpressionCompletionDataProvider.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditorCtrl.cs
   branches/maestro-5.0.x/Maestro.Editors/Generic/XmlTextEditorControl.cs
   branches/maestro-5.0.x/Maestro.Editors/Maestro.Editors.csproj
   branches/maestro-5.0.x/Maestro.Editors/Properties/Resources.Designer.cs
   branches/maestro-5.0.x/Maestro.Editors/Properties/Resources.resx
   branches/maestro-5.0.x/Maestro/Maestro.csproj
   branches/maestro-5.0.x/MaestroAPITests/RuntimeMapTests.cs
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/HttpCapabilities.cs
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/HttpServerConnection.cs
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/OSGeo.MapGuide.MaestroAPI.Http.csproj
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/RequestBuilder.cs
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Commands/CommandType.cs
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Schemas/
   branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/SiteVersion.cs
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Addin/
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Addin/Xsd2Code.Addin.csproj
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Console/Xsd2Code.csproj
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.CustomTool/
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.CustomTool/Xsd2Code.CustomTool.csproj
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Library/Xsd2Code.Library.csproj
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Setup/
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Setup/Xsd2Code.Setup.vdproj
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.SetupLibrary/
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.SetupLibrary/Xsd2Code.SetupLibrary.csproj
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.SetupLibrary/bin/
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.TestUnit/
   branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.TestUnit/Xsd2Code.TestUnit.csproj
Log:
Merge the following revisions from trunk: r7844, r7846, r7849, r7850, r7853, r7854, r7855, r7857
This affects the following tickets: #2357, #2360, #2361

Copied: branches/maestro-5.0.x/Generated/RuntimeMap-2.6.0.designer.cs (from rev 7846, trunk/Tools/Maestro/Generated/RuntimeMap-2.6.0.designer.cs)
===================================================================
--- branches/maestro-5.0.x/Generated/RuntimeMap-2.6.0.designer.cs	                        (rev 0)
+++ branches/maestro-5.0.x/Generated/RuntimeMap-2.6.0.designer.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,3143 @@
+// ------------------------------------------------------------------------------
+//  <auto-generated>
+//    Generated by Xsd2Code. Version 3.3.0.2211
+//    <NameSpace>OSGeo.MapGuide.ObjectModels.RuntimeMap</NameSpace><Collection>BindingList</Collection><codeType>CSharp</codeType><EnableDataBinding>True</EnableDataBinding><EnableLasyLoading>False</EnableLasyLoading><HidePrivateFieldInIDE>True</HidePrivateFieldInIDE><EnableSummaryComment>True</EnableSummaryComment><IncludeSerializeMethod>True</IncludeSerializeMethod><UseBaseClass>False</UseBaseClass><GenerateCloneMethod>True</GenerateCloneMethod><GenerateDataContracts>False</GenerateDataContracts><CodeBaseTag>Net20</CodeBaseTag><SerializeMethodName>Serialize</SerializeMethodName><DeserializeMethodName>Deserialize</DeserializeMethodName><SaveToFileMethodName>SaveToFile</SaveToFileMethodName><LoadFromFileMethodName>LoadFromFile</LoadFromFileMethodName><GenerateXMLAttributes>True</GenerateXMLAttributes><AutomaticProperties>False</AutomaticProperties><DisableDebug>False</DisableDebug><CustomUsings></CustomUsings><ExcludeIncludedTypes>False</ExcludeIncludedTypes><EnableInitializ
 eFields>False</EnableInitializeFields>
+//  </auto-generated>
+// ------------------------------------------------------------------------------
+namespace OSGeo.MapGuide.ObjectModels.RuntimeMap {
+    using System;
+    using System.Diagnostics;
+    using System.Xml.Serialization;
+    using System.Collections;
+    using System.Xml.Schema;
+    using System.ComponentModel;
+    using System.IO;
+    
+    
+    /// <summary>
+    /// Describes information about a Runtime Map, so that client applications can interact with it
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.3.0.2272")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
+    public partial class RuntimeMap : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string siteVersionField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string mapDefinitionField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string backgroundColorField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string displayDpiField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string iconMimeTypeField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private CoordinateSystemType coordinateSystemField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private Envelope extentsField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<RuntimeMapGroup> groupField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<RuntimeMapLayer> layerField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<double> finiteDisplayScaleField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        /// <summary>
+        /// The MapGuide Site Version
+        /// </summary>
+        public string SiteVersion {
+            get {
+                return this.siteVersionField;
+            }
+            set {
+                if ((this.siteVersionField != null)) {
+                    if ((siteVersionField.Equals(value) != true)) {
+                        this.siteVersionField = value;
+                        this.OnPropertyChanged("SiteVersion");
+                    }
+                }
+                else {
+                    this.siteVersionField = value;
+                    this.OnPropertyChanged("SiteVersion");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The name of the runtime map. This is the value required for any mapagent operation that require a MAPNAME parameter
+        /// </summary>
+        public string Name {
+            get {
+                return this.nameField;
+            }
+            set {
+                if ((this.nameField != null)) {
+                    if ((nameField.Equals(value) != true)) {
+                        this.nameField = value;
+                        this.OnPropertyChanged("Name");
+                    }
+                }
+                else {
+                    this.nameField = value;
+                    this.OnPropertyChanged("Name");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The resource id of the Map Definition from which this runtime map was created from
+        /// </summary>
+        public string MapDefinition {
+            get {
+                return this.mapDefinitionField;
+            }
+            set {
+                if ((this.mapDefinitionField != null)) {
+                    if ((mapDefinitionField.Equals(value) != true)) {
+                        this.mapDefinitionField = value;
+                        this.OnPropertyChanged("MapDefinition");
+                    }
+                }
+                else {
+                    this.mapDefinitionField = value;
+                    this.OnPropertyChanged("MapDefinition");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The map's background color in ARGB hex string format
+        /// </summary>
+        public string BackgroundColor {
+            get {
+                return this.backgroundColorField;
+            }
+            set {
+                if ((this.backgroundColorField != null)) {
+                    if ((backgroundColorField.Equals(value) != true)) {
+                        this.backgroundColorField = value;
+                        this.OnPropertyChanged("BackgroundColor");
+                    }
+                }
+                else {
+                    this.backgroundColorField = value;
+                    this.OnPropertyChanged("BackgroundColor");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The number of dots per inch of the map display
+        /// </summary>
+        [System.Xml.Serialization.XmlElementAttribute(DataType="integer")]
+        public string DisplayDpi {
+            get {
+                return this.displayDpiField;
+            }
+            set {
+                if ((this.displayDpiField != null)) {
+                    if ((displayDpiField.Equals(value) != true)) {
+                        this.displayDpiField = value;
+                        this.OnPropertyChanged("DisplayDpi");
+                    }
+                }
+                else {
+                    this.displayDpiField = value;
+                    this.OnPropertyChanged("DisplayDpi");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The mime type of all inline icons
+        /// </summary>
+        public string IconMimeType {
+            get {
+                return this.iconMimeTypeField;
+            }
+            set {
+                if ((this.iconMimeTypeField != null)) {
+                    if ((iconMimeTypeField.Equals(value) != true)) {
+                        this.iconMimeTypeField = value;
+                        this.OnPropertyChanged("IconMimeType");
+                    }
+                }
+                else {
+                    this.iconMimeTypeField = value;
+                    this.OnPropertyChanged("IconMimeType");
+                }
+            }
+        }
+        
+        public CoordinateSystemType CoordinateSystem {
+            get {
+                return this.coordinateSystemField;
+            }
+            set {
+                if ((this.coordinateSystemField != null)) {
+                    if ((coordinateSystemField.Equals(value) != true)) {
+                        this.coordinateSystemField = value;
+                        this.OnPropertyChanged("CoordinateSystem");
+                    }
+                }
+                else {
+                    this.coordinateSystemField = value;
+                    this.OnPropertyChanged("CoordinateSystem");
+                }
+            }
+        }
+        
+        public Envelope Extents {
+            get {
+                return this.extentsField;
+            }
+            set {
+                if ((this.extentsField != null)) {
+                    if ((extentsField.Equals(value) != true)) {
+                        this.extentsField = value;
+                        this.OnPropertyChanged("Extents");
+                    }
+                }
+                else {
+                    this.extentsField = value;
+                    this.OnPropertyChanged("Extents");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("Group")]
+        public BindingList<RuntimeMapGroup> Group {
+            get {
+                return this.groupField;
+            }
+            set {
+                if ((this.groupField != null)) {
+                    if ((groupField.Equals(value) != true)) {
+                        this.groupField = value;
+                        this.OnPropertyChanged("Group");
+                    }
+                }
+                else {
+                    this.groupField = value;
+                    this.OnPropertyChanged("Group");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("Layer")]
+        public BindingList<RuntimeMapLayer> Layer {
+            get {
+                return this.layerField;
+            }
+            set {
+                if ((this.layerField != null)) {
+                    if ((layerField.Equals(value) != true)) {
+                        this.layerField = value;
+                        this.OnPropertyChanged("Layer");
+                    }
+                }
+                else {
+                    this.layerField = value;
+                    this.OnPropertyChanged("Layer");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("FiniteDisplayScale")]
+        public BindingList<double> FiniteDisplayScale {
+            get {
+                return this.finiteDisplayScaleField;
+            }
+            set {
+                if ((this.finiteDisplayScaleField != null)) {
+                    if ((finiteDisplayScaleField.Equals(value) != true)) {
+                        this.finiteDisplayScaleField = value;
+                        this.OnPropertyChanged("FiniteDisplayScale");
+                    }
+                }
+                else {
+                    this.finiteDisplayScaleField = value;
+                    this.OnPropertyChanged("FiniteDisplayScale");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(RuntimeMap));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string info) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(info));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current RuntimeMap object into an XML document
+        /// </summary>
+        /// <returns>string XML value</returns>
+        public virtual string Serialize() {
+            System.IO.StreamReader streamReader = null;
+            System.IO.MemoryStream memoryStream = null;
+            try {
+                memoryStream = new System.IO.MemoryStream();
+                Serializer.Serialize(memoryStream, this);
+                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
+                streamReader = new System.IO.StreamReader(memoryStream);
+                return streamReader.ReadToEnd();
+            }
+            finally {
+                if ((streamReader != null)) {
+                    streamReader.Dispose();
+                }
+                if ((memoryStream != null)) {
+                    memoryStream.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes workflow markup into an RuntimeMap object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output RuntimeMap object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool Deserialize(string xml, out RuntimeMap obj, out System.Exception exception) {
+            exception = null;
+            obj = default(RuntimeMap);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out RuntimeMap obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static RuntimeMap Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((RuntimeMap)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current RuntimeMap object into file
+        /// </summary>
+        /// <param name="fileName">full path of outupt xml file</param>
+        /// <param name="exception">output Exception value if failed</param>
+        /// <returns>true if can serialize and save into file; otherwise, false</returns>
+        public virtual bool SaveToFile(string fileName, out System.Exception exception) {
+            exception = null;
+            try {
+                SaveToFile(fileName);
+                return true;
+            }
+            catch (System.Exception e) {
+                exception = e;
+                return false;
+            }
+        }
+        
+        public virtual void SaveToFile(string fileName) {
+            System.IO.StreamWriter streamWriter = null;
+            try {
+                string xmlString = Serialize();
+                System.IO.FileInfo xmlFile = new System.IO.FileInfo(fileName);
+                streamWriter = xmlFile.CreateText();
+                streamWriter.WriteLine(xmlString);
+                streamWriter.Close();
+            }
+            finally {
+                if ((streamWriter != null)) {
+                    streamWriter.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes xml markup from file into an RuntimeMap object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output RuntimeMap object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool LoadFromFile(string fileName, out RuntimeMap obj, out System.Exception exception) {
+            exception = null;
+            obj = default(RuntimeMap);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out RuntimeMap obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static RuntimeMap LoadFromFile(string fileName) {
+            System.IO.FileStream file = null;
+            System.IO.StreamReader sr = null;
+            try {
+                file = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read);
+                sr = new System.IO.StreamReader(file);
+                string xmlString = sr.ReadToEnd();
+                sr.Close();
+                file.Close();
+                return Deserialize(xmlString);
+            }
+            finally {
+                if ((file != null)) {
+                    file.Dispose();
+                }
+                if ((sr != null)) {
+                    sr.Dispose();
+                }
+            }
+        }
+        #endregion
+        
+        #region Clone method
+        /// <summary>
+        /// Create a clone of this RuntimeMap object
+        /// </summary>
+        public virtual RuntimeMap Clone() {
+            return ((RuntimeMap)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.3.0.2272")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class CoordinateSystemType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string wktField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string mentorCodeField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string epsgCodeField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double metersPerUnitField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public string Wkt {
+            get {
+                return this.wktField;
+            }
+            set {
+                if ((this.wktField != null)) {
+                    if ((wktField.Equals(value) != true)) {
+                        this.wktField = value;
+                        this.OnPropertyChanged("Wkt");
+                    }
+                }
+                else {
+                    this.wktField = value;
+                    this.OnPropertyChanged("Wkt");
+                }
+            }
+        }
+        
+        public string MentorCode {
+            get {
+                return this.mentorCodeField;
+            }
+            set {
+                if ((this.mentorCodeField != null)) {
+                    if ((mentorCodeField.Equals(value) != true)) {
+                        this.mentorCodeField = value;
+                        this.OnPropertyChanged("MentorCode");
+                    }
+                }
+                else {
+                    this.mentorCodeField = value;
+                    this.OnPropertyChanged("MentorCode");
+                }
+            }
+        }
+        
+        public string EpsgCode {
+            get {
+                return this.epsgCodeField;
+            }
+            set {
+                if ((this.epsgCodeField != null)) {
+                    if ((epsgCodeField.Equals(value) != true)) {
+                        this.epsgCodeField = value;
+                        this.OnPropertyChanged("EpsgCode");
+                    }
+                }
+                else {
+                    this.epsgCodeField = value;
+                    this.OnPropertyChanged("EpsgCode");
+                }
+            }
+        }
+        
+        public double MetersPerUnit {
+            get {
+                return this.metersPerUnitField;
+            }
+            set {
+                if ((metersPerUnitField.Equals(value) != true)) {
+                    this.metersPerUnitField = value;
+                    this.OnPropertyChanged("MetersPerUnit");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(CoordinateSystemType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string info) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(info));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current CoordinateSystemType object into an XML document
+        /// </summary>
+        /// <returns>string XML value</returns>
+        public virtual string Serialize() {
+            System.IO.StreamReader streamReader = null;
+            System.IO.MemoryStream memoryStream = null;
+            try {
+                memoryStream = new System.IO.MemoryStream();
+                Serializer.Serialize(memoryStream, this);
+                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
+                streamReader = new System.IO.StreamReader(memoryStream);
+                return streamReader.ReadToEnd();
+            }
+            finally {
+                if ((streamReader != null)) {
+                    streamReader.Dispose();
+                }
+                if ((memoryStream != null)) {
+                    memoryStream.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes workflow markup into an CoordinateSystemType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output CoordinateSystemType object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool Deserialize(string xml, out CoordinateSystemType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(CoordinateSystemType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out CoordinateSystemType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static CoordinateSystemType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((CoordinateSystemType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current CoordinateSystemType object into file
+        /// </summary>
+        /// <param name="fileName">full path of outupt xml file</param>
+        /// <param name="exception">output Exception value if failed</param>
+        /// <returns>true if can serialize and save into file; otherwise, false</returns>
+        public virtual bool SaveToFile(string fileName, out System.Exception exception) {
+            exception = null;
+            try {
+                SaveToFile(fileName);
+                return true;
+            }
+            catch (System.Exception e) {
+                exception = e;
+                return false;
+            }
+        }
+        
+        public virtual void SaveToFile(string fileName) {
+            System.IO.StreamWriter streamWriter = null;
+            try {
+                string xmlString = Serialize();
+                System.IO.FileInfo xmlFile = new System.IO.FileInfo(fileName);
+                streamWriter = xmlFile.CreateText();
+                streamWriter.WriteLine(xmlString);
+                streamWriter.Close();
+            }
+            finally {
+                if ((streamWriter != null)) {
+                    streamWriter.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes xml markup from file into an CoordinateSystemType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output CoordinateSystemType object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool LoadFromFile(string fileName, out CoordinateSystemType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(CoordinateSystemType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out CoordinateSystemType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static CoordinateSystemType LoadFromFile(string fileName) {
+            System.IO.FileStream file = null;
+            System.IO.StreamReader sr = null;
+            try {
+                file = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read);
+                sr = new System.IO.StreamReader(file);
+                string xmlString = sr.ReadToEnd();
+                sr.Close();
+                file.Close();
+                return Deserialize(xmlString);
+            }
+            finally {
+                if ((file != null)) {
+                    file.Dispose();
+                }
+                if ((sr != null)) {
+                    sr.Dispose();
+                }
+            }
+        }
+        #endregion
+        
+        #region Clone method
+        /// <summary>
+        /// Create a clone of this CoordinateSystemType object
+        /// </summary>
+        public virtual CoordinateSystemType Clone() {
+            return ((CoordinateSystemType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.3.0.2272")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class RuleInfo : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string legendLabelField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string filterField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string iconField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public string LegendLabel {
+            get {
+                return this.legendLabelField;
+            }
+            set {
+                if ((this.legendLabelField != null)) {
+                    if ((legendLabelField.Equals(value) != true)) {
+                        this.legendLabelField = value;
+                        this.OnPropertyChanged("LegendLabel");
+                    }
+                }
+                else {
+                    this.legendLabelField = value;
+                    this.OnPropertyChanged("LegendLabel");
+                }
+            }
+        }
+        
+        public string Filter {
+            get {
+                return this.filterField;
+            }
+            set {
+                if ((this.filterField != null)) {
+                    if ((filterField.Equals(value) != true)) {
+                        this.filterField = value;
+                        this.OnPropertyChanged("Filter");
+                    }
+                }
+                else {
+                    this.filterField = value;
+                    this.OnPropertyChanged("Filter");
+                }
+            }
+        }
+        
+        public string Icon {
+            get {
+                return this.iconField;
+            }
+            set {
+                if ((this.iconField != null)) {
+                    if ((iconField.Equals(value) != true)) {
+                        this.iconField = value;
+                        this.OnPropertyChanged("Icon");
+                    }
+                }
+                else {
+                    this.iconField = value;
+                    this.OnPropertyChanged("Icon");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(RuleInfo));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string info) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(info));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current RuleInfo object into an XML document
+        /// </summary>
+        /// <returns>string XML value</returns>
+        public virtual string Serialize() {
+            System.IO.StreamReader streamReader = null;
+            System.IO.MemoryStream memoryStream = null;
+            try {
+                memoryStream = new System.IO.MemoryStream();
+                Serializer.Serialize(memoryStream, this);
+                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
+                streamReader = new System.IO.StreamReader(memoryStream);
+                return streamReader.ReadToEnd();
+            }
+            finally {
+                if ((streamReader != null)) {
+                    streamReader.Dispose();
+                }
+                if ((memoryStream != null)) {
+                    memoryStream.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes workflow markup into an RuleInfo object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output RuleInfo object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool Deserialize(string xml, out RuleInfo obj, out System.Exception exception) {
+            exception = null;
+            obj = default(RuleInfo);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out RuleInfo obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static RuleInfo Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((RuleInfo)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current RuleInfo object into file
+        /// </summary>
+        /// <param name="fileName">full path of outupt xml file</param>
+        /// <param name="exception">output Exception value if failed</param>
+        /// <returns>true if can serialize and save into file; otherwise, false</returns>
+        public virtual bool SaveToFile(string fileName, out System.Exception exception) {
+            exception = null;
+            try {
+                SaveToFile(fileName);
+                return true;
+            }
+            catch (System.Exception e) {
+                exception = e;
+                return false;
+            }
+        }
+        
+        public virtual void SaveToFile(string fileName) {
+            System.IO.StreamWriter streamWriter = null;
+            try {
+                string xmlString = Serialize();
+                System.IO.FileInfo xmlFile = new System.IO.FileInfo(fileName);
+                streamWriter = xmlFile.CreateText();
+                streamWriter.WriteLine(xmlString);
+                streamWriter.Close();
+            }
+            finally {
+                if ((streamWriter != null)) {
+                    streamWriter.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes xml markup from file into an RuleInfo object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output RuleInfo object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool LoadFromFile(string fileName, out RuleInfo obj, out System.Exception exception) {
+            exception = null;
+            obj = default(RuleInfo);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out RuleInfo obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static RuleInfo LoadFromFile(string fileName) {
+            System.IO.FileStream file = null;
+            System.IO.StreamReader sr = null;
+            try {
+                file = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read);
+                sr = new System.IO.StreamReader(file);
+                string xmlString = sr.ReadToEnd();
+                sr.Close();
+                file.Close();
+                return Deserialize(xmlString);
+            }
+            finally {
+                if ((file != null)) {
+                    file.Dispose();
+                }
+                if ((sr != null)) {
+                    sr.Dispose();
+                }
+            }
+        }
+        #endregion
+        
+        #region Clone method
+        /// <summary>
+        /// Create a clone of this RuleInfo object
+        /// </summary>
+        public virtual RuleInfo Clone() {
+            return ((RuleInfo)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.3.0.2272")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class FeatureStyleInfo : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string typeField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<RuleInfo> ruleField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        [System.Xml.Serialization.XmlElementAttribute(DataType="integer")]
+        public string Type {
+            get {
+                return this.typeField;
+            }
+            set {
+                if ((this.typeField != null)) {
+                    if ((typeField.Equals(value) != true)) {
+                        this.typeField = value;
+                        this.OnPropertyChanged("Type");
+                    }
+                }
+                else {
+                    this.typeField = value;
+                    this.OnPropertyChanged("Type");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("Rule")]
+        public BindingList<RuleInfo> Rule {
+            get {
+                return this.ruleField;
+            }
+            set {
+                if ((this.ruleField != null)) {
+                    if ((ruleField.Equals(value) != true)) {
+                        this.ruleField = value;
+                        this.OnPropertyChanged("Rule");
+                    }
+                }
+                else {
+                    this.ruleField = value;
+                    this.OnPropertyChanged("Rule");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(FeatureStyleInfo));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string info) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(info));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current FeatureStyleInfo object into an XML document
+        /// </summary>
+        /// <returns>string XML value</returns>
+        public virtual string Serialize() {
+            System.IO.StreamReader streamReader = null;
+            System.IO.MemoryStream memoryStream = null;
+            try {
+                memoryStream = new System.IO.MemoryStream();
+                Serializer.Serialize(memoryStream, this);
+                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
+                streamReader = new System.IO.StreamReader(memoryStream);
+                return streamReader.ReadToEnd();
+            }
+            finally {
+                if ((streamReader != null)) {
+                    streamReader.Dispose();
+                }
+                if ((memoryStream != null)) {
+                    memoryStream.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes workflow markup into an FeatureStyleInfo object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output FeatureStyleInfo object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool Deserialize(string xml, out FeatureStyleInfo obj, out System.Exception exception) {
+            exception = null;
+            obj = default(FeatureStyleInfo);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out FeatureStyleInfo obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static FeatureStyleInfo Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((FeatureStyleInfo)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current FeatureStyleInfo object into file
+        /// </summary>
+        /// <param name="fileName">full path of outupt xml file</param>
+        /// <param name="exception">output Exception value if failed</param>
+        /// <returns>true if can serialize and save into file; otherwise, false</returns>
+        public virtual bool SaveToFile(string fileName, out System.Exception exception) {
+            exception = null;
+            try {
+                SaveToFile(fileName);
+                return true;
+            }
+            catch (System.Exception e) {
+                exception = e;
+                return false;
+            }
+        }
+        
+        public virtual void SaveToFile(string fileName) {
+            System.IO.StreamWriter streamWriter = null;
+            try {
+                string xmlString = Serialize();
+                System.IO.FileInfo xmlFile = new System.IO.FileInfo(fileName);
+                streamWriter = xmlFile.CreateText();
+                streamWriter.WriteLine(xmlString);
+                streamWriter.Close();
+            }
+            finally {
+                if ((streamWriter != null)) {
+                    streamWriter.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes xml markup from file into an FeatureStyleInfo object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output FeatureStyleInfo object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool LoadFromFile(string fileName, out FeatureStyleInfo obj, out System.Exception exception) {
+            exception = null;
+            obj = default(FeatureStyleInfo);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out FeatureStyleInfo obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static FeatureStyleInfo LoadFromFile(string fileName) {
+            System.IO.FileStream file = null;
+            System.IO.StreamReader sr = null;
+            try {
+                file = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read);
+                sr = new System.IO.StreamReader(file);
+                string xmlString = sr.ReadToEnd();
+                sr.Close();
+                file.Close();
+                return Deserialize(xmlString);
+            }
+            finally {
+                if ((file != null)) {
+                    file.Dispose();
+                }
+                if ((sr != null)) {
+                    sr.Dispose();
+                }
+            }
+        }
+        #endregion
+        
+        #region Clone method
+        /// <summary>
+        /// Create a clone of this FeatureStyleInfo object
+        /// </summary>
+        public virtual FeatureStyleInfo Clone() {
+            return ((FeatureStyleInfo)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.3.0.2272")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class ScaleRangeInfo : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double minScaleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double maxScaleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<FeatureStyleInfo> featureStyleField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public double MinScale {
+            get {
+                return this.minScaleField;
+            }
+            set {
+                if ((minScaleField.Equals(value) != true)) {
+                    this.minScaleField = value;
+                    this.OnPropertyChanged("MinScale");
+                }
+            }
+        }
+        
+        public double MaxScale {
+            get {
+                return this.maxScaleField;
+            }
+            set {
+                if ((maxScaleField.Equals(value) != true)) {
+                    this.maxScaleField = value;
+                    this.OnPropertyChanged("MaxScale");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("FeatureStyle")]
+        public BindingList<FeatureStyleInfo> FeatureStyle {
+            get {
+                return this.featureStyleField;
+            }
+            set {
+                if ((this.featureStyleField != null)) {
+                    if ((featureStyleField.Equals(value) != true)) {
+                        this.featureStyleField = value;
+                        this.OnPropertyChanged("FeatureStyle");
+                    }
+                }
+                else {
+                    this.featureStyleField = value;
+                    this.OnPropertyChanged("FeatureStyle");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(ScaleRangeInfo));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string info) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(info));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current ScaleRangeInfo object into an XML document
+        /// </summary>
+        /// <returns>string XML value</returns>
+        public virtual string Serialize() {
+            System.IO.StreamReader streamReader = null;
+            System.IO.MemoryStream memoryStream = null;
+            try {
+                memoryStream = new System.IO.MemoryStream();
+                Serializer.Serialize(memoryStream, this);
+                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
+                streamReader = new System.IO.StreamReader(memoryStream);
+                return streamReader.ReadToEnd();
+            }
+            finally {
+                if ((streamReader != null)) {
+                    streamReader.Dispose();
+                }
+                if ((memoryStream != null)) {
+                    memoryStream.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes workflow markup into an ScaleRangeInfo object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output ScaleRangeInfo object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool Deserialize(string xml, out ScaleRangeInfo obj, out System.Exception exception) {
+            exception = null;
+            obj = default(ScaleRangeInfo);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out ScaleRangeInfo obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static ScaleRangeInfo Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((ScaleRangeInfo)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current ScaleRangeInfo object into file
+        /// </summary>
+        /// <param name="fileName">full path of outupt xml file</param>
+        /// <param name="exception">output Exception value if failed</param>
+        /// <returns>true if can serialize and save into file; otherwise, false</returns>
+        public virtual bool SaveToFile(string fileName, out System.Exception exception) {
+            exception = null;
+            try {
+                SaveToFile(fileName);
+                return true;
+            }
+            catch (System.Exception e) {
+                exception = e;
+                return false;
+            }
+        }
+        
+        public virtual void SaveToFile(string fileName) {
+            System.IO.StreamWriter streamWriter = null;
+            try {
+                string xmlString = Serialize();
+                System.IO.FileInfo xmlFile = new System.IO.FileInfo(fileName);
+                streamWriter = xmlFile.CreateText();
+                streamWriter.WriteLine(xmlString);
+                streamWriter.Close();
+            }
+            finally {
+                if ((streamWriter != null)) {
+                    streamWriter.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes xml markup from file into an ScaleRangeInfo object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output ScaleRangeInfo object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool LoadFromFile(string fileName, out ScaleRangeInfo obj, out System.Exception exception) {
+            exception = null;
+            obj = default(ScaleRangeInfo);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out ScaleRangeInfo obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static ScaleRangeInfo LoadFromFile(string fileName) {
+            System.IO.FileStream file = null;
+            System.IO.StreamReader sr = null;
+            try {
+                file = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read);
+                sr = new System.IO.StreamReader(file);
+                string xmlString = sr.ReadToEnd();
+                sr.Close();
+                file.Close();
+                return Deserialize(xmlString);
+            }
+            finally {
+                if ((file != null)) {
+                    file.Dispose();
+                }
+                if ((sr != null)) {
+                    sr.Dispose();
+                }
+            }
+        }
+        #endregion
+        
+        #region Clone method
+        /// <summary>
+        /// Create a clone of this ScaleRangeInfo object
+        /// </summary>
+        public virtual ScaleRangeInfo Clone() {
+            return ((ScaleRangeInfo)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.3.0.2272")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class FeatureSourceInfo : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string resourceIdField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string classNameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string geometryField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public string ResourceId {
+            get {
+                return this.resourceIdField;
+            }
+            set {
+                if ((this.resourceIdField != null)) {
+                    if ((resourceIdField.Equals(value) != true)) {
+                        this.resourceIdField = value;
+                        this.OnPropertyChanged("ResourceId");
+                    }
+                }
+                else {
+                    this.resourceIdField = value;
+                    this.OnPropertyChanged("ResourceId");
+                }
+            }
+        }
+        
+        public string ClassName {
+            get {
+                return this.classNameField;
+            }
+            set {
+                if ((this.classNameField != null)) {
+                    if ((classNameField.Equals(value) != true)) {
+                        this.classNameField = value;
+                        this.OnPropertyChanged("ClassName");
+                    }
+                }
+                else {
+                    this.classNameField = value;
+                    this.OnPropertyChanged("ClassName");
+                }
+            }
+        }
+        
+        public string Geometry {
+            get {
+                return this.geometryField;
+            }
+            set {
+                if ((this.geometryField != null)) {
+                    if ((geometryField.Equals(value) != true)) {
+                        this.geometryField = value;
+                        this.OnPropertyChanged("Geometry");
+                    }
+                }
+                else {
+                    this.geometryField = value;
+                    this.OnPropertyChanged("Geometry");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(FeatureSourceInfo));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string info) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(info));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current FeatureSourceInfo object into an XML document
+        /// </summary>
+        /// <returns>string XML value</returns>
+        public virtual string Serialize() {
+            System.IO.StreamReader streamReader = null;
+            System.IO.MemoryStream memoryStream = null;
+            try {
+                memoryStream = new System.IO.MemoryStream();
+                Serializer.Serialize(memoryStream, this);
+                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
+                streamReader = new System.IO.StreamReader(memoryStream);
+                return streamReader.ReadToEnd();
+            }
+            finally {
+                if ((streamReader != null)) {
+                    streamReader.Dispose();
+                }
+                if ((memoryStream != null)) {
+                    memoryStream.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes workflow markup into an FeatureSourceInfo object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output FeatureSourceInfo object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool Deserialize(string xml, out FeatureSourceInfo obj, out System.Exception exception) {
+            exception = null;
+            obj = default(FeatureSourceInfo);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out FeatureSourceInfo obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static FeatureSourceInfo Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((FeatureSourceInfo)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current FeatureSourceInfo object into file
+        /// </summary>
+        /// <param name="fileName">full path of outupt xml file</param>
+        /// <param name="exception">output Exception value if failed</param>
+        /// <returns>true if can serialize and save into file; otherwise, false</returns>
+        public virtual bool SaveToFile(string fileName, out System.Exception exception) {
+            exception = null;
+            try {
+                SaveToFile(fileName);
+                return true;
+            }
+            catch (System.Exception e) {
+                exception = e;
+                return false;
+            }
+        }
+        
+        public virtual void SaveToFile(string fileName) {
+            System.IO.StreamWriter streamWriter = null;
+            try {
+                string xmlString = Serialize();
+                System.IO.FileInfo xmlFile = new System.IO.FileInfo(fileName);
+                streamWriter = xmlFile.CreateText();
+                streamWriter.WriteLine(xmlString);
+                streamWriter.Close();
+            }
+            finally {
+                if ((streamWriter != null)) {
+                    streamWriter.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes xml markup from file into an FeatureSourceInfo object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output FeatureSourceInfo object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool LoadFromFile(string fileName, out FeatureSourceInfo obj, out System.Exception exception) {
+            exception = null;
+            obj = default(FeatureSourceInfo);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out FeatureSourceInfo obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static FeatureSourceInfo LoadFromFile(string fileName) {
+            System.IO.FileStream file = null;
+            System.IO.StreamReader sr = null;
+            try {
+                file = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read);
+                sr = new System.IO.StreamReader(file);
+                string xmlString = sr.ReadToEnd();
+                sr.Close();
+                file.Close();
+                return Deserialize(xmlString);
+            }
+            finally {
+                if ((file != null)) {
+                    file.Dispose();
+                }
+                if ((sr != null)) {
+                    sr.Dispose();
+                }
+            }
+        }
+        #endregion
+        
+        #region Clone method
+        /// <summary>
+        /// Create a clone of this FeatureSourceInfo object
+        /// </summary>
+        public virtual FeatureSourceInfo Clone() {
+            return ((FeatureSourceInfo)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.3.0.2272")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class RuntimeMapLayer : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string typeField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string legendLabelField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string objectIdField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string parentIdField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool displayInLegendField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool expandInLegendField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool visibleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool actuallyVisibleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string layerDefinitionField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private FeatureSourceInfo featureSourceField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<ScaleRangeInfo> scaleRangeField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        /// <summary>
+        /// The name of the layer
+        /// </summary>
+        public string Name {
+            get {
+                return this.nameField;
+            }
+            set {
+                if ((this.nameField != null)) {
+                    if ((nameField.Equals(value) != true)) {
+                        this.nameField = value;
+                        this.OnPropertyChanged("Name");
+                    }
+                }
+                else {
+                    this.nameField = value;
+                    this.OnPropertyChanged("Name");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The type of this layer. Can be tiled or dynamic. Uses the value of MgLayerType
+        /// </summary>
+        [System.Xml.Serialization.XmlElementAttribute(DataType="integer")]
+        public string Type {
+            get {
+                return this.typeField;
+            }
+            set {
+                if ((this.typeField != null)) {
+                    if ((typeField.Equals(value) != true)) {
+                        this.typeField = value;
+                        this.OnPropertyChanged("Type");
+                    }
+                }
+                else {
+                    this.typeField = value;
+                    this.OnPropertyChanged("Type");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The layer's legend label
+        /// </summary>
+        public string LegendLabel {
+            get {
+                return this.legendLabelField;
+            }
+            set {
+                if ((this.legendLabelField != null)) {
+                    if ((legendLabelField.Equals(value) != true)) {
+                        this.legendLabelField = value;
+                        this.OnPropertyChanged("LegendLabel");
+                    }
+                }
+                else {
+                    this.legendLabelField = value;
+                    this.OnPropertyChanged("LegendLabel");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The layer's unique id. Use this value for turning on/off this layer in a GETDYNAMICMAPOVERLAYIMAGE request
+        /// </summary>
+        public string ObjectId {
+            get {
+                return this.objectIdField;
+            }
+            set {
+                if ((this.objectIdField != null)) {
+                    if ((objectIdField.Equals(value) != true)) {
+                        this.objectIdField = value;
+                        this.OnPropertyChanged("ObjectId");
+                    }
+                }
+                else {
+                    this.objectIdField = value;
+                    this.OnPropertyChanged("ObjectId");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The layer's parent group id. Use this value for determining parent-child relationships when building a layer/group hierarchy
+        /// </summary>
+        public string ParentId {
+            get {
+                return this.parentIdField;
+            }
+            set {
+                if ((this.parentIdField != null)) {
+                    if ((parentIdField.Equals(value) != true)) {
+                        this.parentIdField = value;
+                        this.OnPropertyChanged("ParentId");
+                    }
+                }
+                else {
+                    this.parentIdField = value;
+                    this.OnPropertyChanged("ParentId");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Indicates whether this layer should be displayed in the legend
+        /// </summary>
+        public bool DisplayInLegend {
+            get {
+                return this.displayInLegendField;
+            }
+            set {
+                if ((displayInLegendField.Equals(value) != true)) {
+                    this.displayInLegendField = value;
+                    this.OnPropertyChanged("DisplayInLegend");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Indicates whether this layer should be initially expanded (if layer is themed) in the legend
+        /// </summary>
+        public bool ExpandInLegend {
+            get {
+                return this.expandInLegendField;
+            }
+            set {
+                if ((expandInLegendField.Equals(value) != true)) {
+                    this.expandInLegendField = value;
+                    this.OnPropertyChanged("ExpandInLegend");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Indicates whether this layer is potentially visible. Note that this may be true even though the layer is not visible. This will occur if the visible flag of one of the groups this layer is organized within is not visible or when the current viewScale property of the map is outside the scale ranges defined for this layer.
+        /// </summary>
+        public bool Visible {
+            get {
+                return this.visibleField;
+            }
+            set {
+                if ((visibleField.Equals(value) != true)) {
+                    this.visibleField = value;
+                    this.OnPropertyChanged("Visible");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Indicates the actual visibility of the layer. The visibility depends on the visible property of the group, and the visible property of each group this group is organized within.
+        /// </summary>
+        public bool ActuallyVisible {
+            get {
+                return this.actuallyVisibleField;
+            }
+            set {
+                if ((actuallyVisibleField.Equals(value) != true)) {
+                    this.actuallyVisibleField = value;
+                    this.OnPropertyChanged("ActuallyVisible");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The Layer Definition from which this runtime layer was created from
+        /// </summary>
+        public string LayerDefinition {
+            get {
+                return this.layerDefinitionField;
+            }
+            set {
+                if ((this.layerDefinitionField != null)) {
+                    if ((layerDefinitionField.Equals(value) != true)) {
+                        this.layerDefinitionField = value;
+                        this.OnPropertyChanged("LayerDefinition");
+                    }
+                }
+                else {
+                    this.layerDefinitionField = value;
+                    this.OnPropertyChanged("LayerDefinition");
+                }
+            }
+        }
+        
+        public FeatureSourceInfo FeatureSource {
+            get {
+                return this.featureSourceField;
+            }
+            set {
+                if ((this.featureSourceField != null)) {
+                    if ((featureSourceField.Equals(value) != true)) {
+                        this.featureSourceField = value;
+                        this.OnPropertyChanged("FeatureSource");
+                    }
+                }
+                else {
+                    this.featureSourceField = value;
+                    this.OnPropertyChanged("FeatureSource");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("ScaleRange")]
+        public BindingList<ScaleRangeInfo> ScaleRange {
+            get {
+                return this.scaleRangeField;
+            }
+            set {
+                if ((this.scaleRangeField != null)) {
+                    if ((scaleRangeField.Equals(value) != true)) {
+                        this.scaleRangeField = value;
+                        this.OnPropertyChanged("ScaleRange");
+                    }
+                }
+                else {
+                    this.scaleRangeField = value;
+                    this.OnPropertyChanged("ScaleRange");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(RuntimeMapLayer));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string info) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(info));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current RuntimeMapLayer object into an XML document
+        /// </summary>
+        /// <returns>string XML value</returns>
+        public virtual string Serialize() {
+            System.IO.StreamReader streamReader = null;
+            System.IO.MemoryStream memoryStream = null;
+            try {
+                memoryStream = new System.IO.MemoryStream();
+                Serializer.Serialize(memoryStream, this);
+                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
+                streamReader = new System.IO.StreamReader(memoryStream);
+                return streamReader.ReadToEnd();
+            }
+            finally {
+                if ((streamReader != null)) {
+                    streamReader.Dispose();
+                }
+                if ((memoryStream != null)) {
+                    memoryStream.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes workflow markup into an RuntimeMapLayer object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output RuntimeMapLayer object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool Deserialize(string xml, out RuntimeMapLayer obj, out System.Exception exception) {
+            exception = null;
+            obj = default(RuntimeMapLayer);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out RuntimeMapLayer obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static RuntimeMapLayer Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((RuntimeMapLayer)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current RuntimeMapLayer object into file
+        /// </summary>
+        /// <param name="fileName">full path of outupt xml file</param>
+        /// <param name="exception">output Exception value if failed</param>
+        /// <returns>true if can serialize and save into file; otherwise, false</returns>
+        public virtual bool SaveToFile(string fileName, out System.Exception exception) {
+            exception = null;
+            try {
+                SaveToFile(fileName);
+                return true;
+            }
+            catch (System.Exception e) {
+                exception = e;
+                return false;
+            }
+        }
+        
+        public virtual void SaveToFile(string fileName) {
+            System.IO.StreamWriter streamWriter = null;
+            try {
+                string xmlString = Serialize();
+                System.IO.FileInfo xmlFile = new System.IO.FileInfo(fileName);
+                streamWriter = xmlFile.CreateText();
+                streamWriter.WriteLine(xmlString);
+                streamWriter.Close();
+            }
+            finally {
+                if ((streamWriter != null)) {
+                    streamWriter.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes xml markup from file into an RuntimeMapLayer object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output RuntimeMapLayer object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool LoadFromFile(string fileName, out RuntimeMapLayer obj, out System.Exception exception) {
+            exception = null;
+            obj = default(RuntimeMapLayer);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out RuntimeMapLayer obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static RuntimeMapLayer LoadFromFile(string fileName) {
+            System.IO.FileStream file = null;
+            System.IO.StreamReader sr = null;
+            try {
+                file = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read);
+                sr = new System.IO.StreamReader(file);
+                string xmlString = sr.ReadToEnd();
+                sr.Close();
+                file.Close();
+                return Deserialize(xmlString);
+            }
+            finally {
+                if ((file != null)) {
+                    file.Dispose();
+                }
+                if ((sr != null)) {
+                    sr.Dispose();
+                }
+            }
+        }
+        #endregion
+        
+        #region Clone method
+        /// <summary>
+        /// Create a clone of this RuntimeMapLayer object
+        /// </summary>
+        public virtual RuntimeMapLayer Clone() {
+            return ((RuntimeMapLayer)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.3.0.2272")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class RuntimeMapGroup : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string typeField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string legendLabelField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string objectIdField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string parentIdField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool displayInLegendField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool expandInLegendField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool visibleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool actuallyVisibleField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        /// <summary>
+        /// The name of the group
+        /// </summary>
+        public string Name {
+            get {
+                return this.nameField;
+            }
+            set {
+                if ((this.nameField != null)) {
+                    if ((nameField.Equals(value) != true)) {
+                        this.nameField = value;
+                        this.OnPropertyChanged("Name");
+                    }
+                }
+                else {
+                    this.nameField = value;
+                    this.OnPropertyChanged("Name");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The type of this group. Can be tiled or dynamic. Uses the value of MgLayerGroupType
+        /// </summary>
+        [System.Xml.Serialization.XmlElementAttribute(DataType="integer")]
+        public string Type {
+            get {
+                return this.typeField;
+            }
+            set {
+                if ((this.typeField != null)) {
+                    if ((typeField.Equals(value) != true)) {
+                        this.typeField = value;
+                        this.OnPropertyChanged("Type");
+                    }
+                }
+                else {
+                    this.typeField = value;
+                    this.OnPropertyChanged("Type");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The group's legend label
+        /// </summary>
+        public string LegendLabel {
+            get {
+                return this.legendLabelField;
+            }
+            set {
+                if ((this.legendLabelField != null)) {
+                    if ((legendLabelField.Equals(value) != true)) {
+                        this.legendLabelField = value;
+                        this.OnPropertyChanged("LegendLabel");
+                    }
+                }
+                else {
+                    this.legendLabelField = value;
+                    this.OnPropertyChanged("LegendLabel");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The group's unique id. Use this value for turning on/off this group in a GETDYNAMICMAPOVERLAYIMAGE request
+        /// </summary>
+        public string ObjectId {
+            get {
+                return this.objectIdField;
+            }
+            set {
+                if ((this.objectIdField != null)) {
+                    if ((objectIdField.Equals(value) != true)) {
+                        this.objectIdField = value;
+                        this.OnPropertyChanged("ObjectId");
+                    }
+                }
+                else {
+                    this.objectIdField = value;
+                    this.OnPropertyChanged("ObjectId");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The group's parent group id. Use this value for determining parent-child relationships when building a layer/group hierarchy
+        /// </summary>
+        public string ParentId {
+            get {
+                return this.parentIdField;
+            }
+            set {
+                if ((this.parentIdField != null)) {
+                    if ((parentIdField.Equals(value) != true)) {
+                        this.parentIdField = value;
+                        this.OnPropertyChanged("ParentId");
+                    }
+                }
+                else {
+                    this.parentIdField = value;
+                    this.OnPropertyChanged("ParentId");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Indicates whether this group should be displayed in the legend
+        /// </summary>
+        public bool DisplayInLegend {
+            get {
+                return this.displayInLegendField;
+            }
+            set {
+                if ((displayInLegendField.Equals(value) != true)) {
+                    this.displayInLegendField = value;
+                    this.OnPropertyChanged("DisplayInLegend");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Indicates whether this group should be initially expanded in the legend
+        /// </summary>
+        public bool ExpandInLegend {
+            get {
+                return this.expandInLegendField;
+            }
+            set {
+                if ((expandInLegendField.Equals(value) != true)) {
+                    this.expandInLegendField = value;
+                    this.OnPropertyChanged("ExpandInLegend");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Indicates whether this group is potentially visible. Note that this may be true even though the group is not visible. This will occur if one of the groups this group is organized within is not visible.
+        /// </summary>
+        public bool Visible {
+            get {
+                return this.visibleField;
+            }
+            set {
+                if ((visibleField.Equals(value) != true)) {
+                    this.visibleField = value;
+                    this.OnPropertyChanged("Visible");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Indicates the actual visibility of the group. The visibility depends on the visible property of the group, and the visible property of each group this group is organized within.
+        /// </summary>
+        public bool ActuallyVisible {
+            get {
+                return this.actuallyVisibleField;
+            }
+            set {
+                if ((actuallyVisibleField.Equals(value) != true)) {
+                    this.actuallyVisibleField = value;
+                    this.OnPropertyChanged("ActuallyVisible");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(RuntimeMapGroup));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string info) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(info));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current RuntimeMapGroup object into an XML document
+        /// </summary>
+        /// <returns>string XML value</returns>
+        public virtual string Serialize() {
+            System.IO.StreamReader streamReader = null;
+            System.IO.MemoryStream memoryStream = null;
+            try {
+                memoryStream = new System.IO.MemoryStream();
+                Serializer.Serialize(memoryStream, this);
+                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
+                streamReader = new System.IO.StreamReader(memoryStream);
+                return streamReader.ReadToEnd();
+            }
+            finally {
+                if ((streamReader != null)) {
+                    streamReader.Dispose();
+                }
+                if ((memoryStream != null)) {
+                    memoryStream.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes workflow markup into an RuntimeMapGroup object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output RuntimeMapGroup object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool Deserialize(string xml, out RuntimeMapGroup obj, out System.Exception exception) {
+            exception = null;
+            obj = default(RuntimeMapGroup);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out RuntimeMapGroup obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static RuntimeMapGroup Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((RuntimeMapGroup)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current RuntimeMapGroup object into file
+        /// </summary>
+        /// <param name="fileName">full path of outupt xml file</param>
+        /// <param name="exception">output Exception value if failed</param>
+        /// <returns>true if can serialize and save into file; otherwise, false</returns>
+        public virtual bool SaveToFile(string fileName, out System.Exception exception) {
+            exception = null;
+            try {
+                SaveToFile(fileName);
+                return true;
+            }
+            catch (System.Exception e) {
+                exception = e;
+                return false;
+            }
+        }
+        
+        public virtual void SaveToFile(string fileName) {
+            System.IO.StreamWriter streamWriter = null;
+            try {
+                string xmlString = Serialize();
+                System.IO.FileInfo xmlFile = new System.IO.FileInfo(fileName);
+                streamWriter = xmlFile.CreateText();
+                streamWriter.WriteLine(xmlString);
+                streamWriter.Close();
+            }
+            finally {
+                if ((streamWriter != null)) {
+                    streamWriter.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes xml markup from file into an RuntimeMapGroup object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output RuntimeMapGroup object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool LoadFromFile(string fileName, out RuntimeMapGroup obj, out System.Exception exception) {
+            exception = null;
+            obj = default(RuntimeMapGroup);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out RuntimeMapGroup obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static RuntimeMapGroup LoadFromFile(string fileName) {
+            System.IO.FileStream file = null;
+            System.IO.StreamReader sr = null;
+            try {
+                file = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read);
+                sr = new System.IO.StreamReader(file);
+                string xmlString = sr.ReadToEnd();
+                sr.Close();
+                file.Close();
+                return Deserialize(xmlString);
+            }
+            finally {
+                if ((file != null)) {
+                    file.Dispose();
+                }
+                if ((sr != null)) {
+                    sr.Dispose();
+                }
+            }
+        }
+        #endregion
+        
+        #region Clone method
+        /// <summary>
+        /// Create a clone of this RuntimeMapGroup object
+        /// </summary>
+        public virtual RuntimeMapGroup Clone() {
+            return ((RuntimeMapGroup)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.3.0.2272")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class Envelope : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private EnvelopeLowerLeftCoordinate lowerLeftCoordinateField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private EnvelopeUpperRightCoordinate upperRightCoordinateField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public EnvelopeLowerLeftCoordinate LowerLeftCoordinate {
+            get {
+                return this.lowerLeftCoordinateField;
+            }
+            set {
+                if ((this.lowerLeftCoordinateField != null)) {
+                    if ((lowerLeftCoordinateField.Equals(value) != true)) {
+                        this.lowerLeftCoordinateField = value;
+                        this.OnPropertyChanged("LowerLeftCoordinate");
+                    }
+                }
+                else {
+                    this.lowerLeftCoordinateField = value;
+                    this.OnPropertyChanged("LowerLeftCoordinate");
+                }
+            }
+        }
+        
+        public EnvelopeUpperRightCoordinate UpperRightCoordinate {
+            get {
+                return this.upperRightCoordinateField;
+            }
+            set {
+                if ((this.upperRightCoordinateField != null)) {
+                    if ((upperRightCoordinateField.Equals(value) != true)) {
+                        this.upperRightCoordinateField = value;
+                        this.OnPropertyChanged("UpperRightCoordinate");
+                    }
+                }
+                else {
+                    this.upperRightCoordinateField = value;
+                    this.OnPropertyChanged("UpperRightCoordinate");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(Envelope));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string info) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(info));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current Envelope object into an XML document
+        /// </summary>
+        /// <returns>string XML value</returns>
+        public virtual string Serialize() {
+            System.IO.StreamReader streamReader = null;
+            System.IO.MemoryStream memoryStream = null;
+            try {
+                memoryStream = new System.IO.MemoryStream();
+                Serializer.Serialize(memoryStream, this);
+                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
+                streamReader = new System.IO.StreamReader(memoryStream);
+                return streamReader.ReadToEnd();
+            }
+            finally {
+                if ((streamReader != null)) {
+                    streamReader.Dispose();
+                }
+                if ((memoryStream != null)) {
+                    memoryStream.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes workflow markup into an Envelope object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output Envelope object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool Deserialize(string xml, out Envelope obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Envelope);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out Envelope obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static Envelope Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((Envelope)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current Envelope object into file
+        /// </summary>
+        /// <param name="fileName">full path of outupt xml file</param>
+        /// <param name="exception">output Exception value if failed</param>
+        /// <returns>true if can serialize and save into file; otherwise, false</returns>
+        public virtual bool SaveToFile(string fileName, out System.Exception exception) {
+            exception = null;
+            try {
+                SaveToFile(fileName);
+                return true;
+            }
+            catch (System.Exception e) {
+                exception = e;
+                return false;
+            }
+        }
+        
+        public virtual void SaveToFile(string fileName) {
+            System.IO.StreamWriter streamWriter = null;
+            try {
+                string xmlString = Serialize();
+                System.IO.FileInfo xmlFile = new System.IO.FileInfo(fileName);
+                streamWriter = xmlFile.CreateText();
+                streamWriter.WriteLine(xmlString);
+                streamWriter.Close();
+            }
+            finally {
+                if ((streamWriter != null)) {
+                    streamWriter.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes xml markup from file into an Envelope object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output Envelope object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool LoadFromFile(string fileName, out Envelope obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Envelope);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out Envelope obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static Envelope LoadFromFile(string fileName) {
+            System.IO.FileStream file = null;
+            System.IO.StreamReader sr = null;
+            try {
+                file = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read);
+                sr = new System.IO.StreamReader(file);
+                string xmlString = sr.ReadToEnd();
+                sr.Close();
+                file.Close();
+                return Deserialize(xmlString);
+            }
+            finally {
+                if ((file != null)) {
+                    file.Dispose();
+                }
+                if ((sr != null)) {
+                    sr.Dispose();
+                }
+            }
+        }
+        #endregion
+        
+        #region Clone method
+        /// <summary>
+        /// Create a clone of this Envelope object
+        /// </summary>
+        public virtual Envelope Clone() {
+            return ((Envelope)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.3.0.2272")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    public partial class EnvelopeLowerLeftCoordinate : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string xField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string yField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public string X {
+            get {
+                return this.xField;
+            }
+            set {
+                if ((this.xField != null)) {
+                    if ((xField.Equals(value) != true)) {
+                        this.xField = value;
+                        this.OnPropertyChanged("X");
+                    }
+                }
+                else {
+                    this.xField = value;
+                    this.OnPropertyChanged("X");
+                }
+            }
+        }
+        
+        public string Y {
+            get {
+                return this.yField;
+            }
+            set {
+                if ((this.yField != null)) {
+                    if ((yField.Equals(value) != true)) {
+                        this.yField = value;
+                        this.OnPropertyChanged("Y");
+                    }
+                }
+                else {
+                    this.yField = value;
+                    this.OnPropertyChanged("Y");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(EnvelopeLowerLeftCoordinate));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string info) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(info));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current EnvelopeLowerLeftCoordinate object into an XML document
+        /// </summary>
+        /// <returns>string XML value</returns>
+        public virtual string Serialize() {
+            System.IO.StreamReader streamReader = null;
+            System.IO.MemoryStream memoryStream = null;
+            try {
+                memoryStream = new System.IO.MemoryStream();
+                Serializer.Serialize(memoryStream, this);
+                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
+                streamReader = new System.IO.StreamReader(memoryStream);
+                return streamReader.ReadToEnd();
+            }
+            finally {
+                if ((streamReader != null)) {
+                    streamReader.Dispose();
+                }
+                if ((memoryStream != null)) {
+                    memoryStream.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes workflow markup into an EnvelopeLowerLeftCoordinate object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output EnvelopeLowerLeftCoordinate object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool Deserialize(string xml, out EnvelopeLowerLeftCoordinate obj, out System.Exception exception) {
+            exception = null;
+            obj = default(EnvelopeLowerLeftCoordinate);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out EnvelopeLowerLeftCoordinate obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static EnvelopeLowerLeftCoordinate Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((EnvelopeLowerLeftCoordinate)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current EnvelopeLowerLeftCoordinate object into file
+        /// </summary>
+        /// <param name="fileName">full path of outupt xml file</param>
+        /// <param name="exception">output Exception value if failed</param>
+        /// <returns>true if can serialize and save into file; otherwise, false</returns>
+        public virtual bool SaveToFile(string fileName, out System.Exception exception) {
+            exception = null;
+            try {
+                SaveToFile(fileName);
+                return true;
+            }
+            catch (System.Exception e) {
+                exception = e;
+                return false;
+            }
+        }
+        
+        public virtual void SaveToFile(string fileName) {
+            System.IO.StreamWriter streamWriter = null;
+            try {
+                string xmlString = Serialize();
+                System.IO.FileInfo xmlFile = new System.IO.FileInfo(fileName);
+                streamWriter = xmlFile.CreateText();
+                streamWriter.WriteLine(xmlString);
+                streamWriter.Close();
+            }
+            finally {
+                if ((streamWriter != null)) {
+                    streamWriter.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes xml markup from file into an EnvelopeLowerLeftCoordinate object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output EnvelopeLowerLeftCoordinate object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool LoadFromFile(string fileName, out EnvelopeLowerLeftCoordinate obj, out System.Exception exception) {
+            exception = null;
+            obj = default(EnvelopeLowerLeftCoordinate);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out EnvelopeLowerLeftCoordinate obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static EnvelopeLowerLeftCoordinate LoadFromFile(string fileName) {
+            System.IO.FileStream file = null;
+            System.IO.StreamReader sr = null;
+            try {
+                file = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read);
+                sr = new System.IO.StreamReader(file);
+                string xmlString = sr.ReadToEnd();
+                sr.Close();
+                file.Close();
+                return Deserialize(xmlString);
+            }
+            finally {
+                if ((file != null)) {
+                    file.Dispose();
+                }
+                if ((sr != null)) {
+                    sr.Dispose();
+                }
+            }
+        }
+        #endregion
+        
+        #region Clone method
+        /// <summary>
+        /// Create a clone of this EnvelopeLowerLeftCoordinate object
+        /// </summary>
+        public virtual EnvelopeLowerLeftCoordinate Clone() {
+            return ((EnvelopeLowerLeftCoordinate)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.3.0.2272")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    public partial class EnvelopeUpperRightCoordinate : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string xField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string yField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public string X {
+            get {
+                return this.xField;
+            }
+            set {
+                if ((this.xField != null)) {
+                    if ((xField.Equals(value) != true)) {
+                        this.xField = value;
+                        this.OnPropertyChanged("X");
+                    }
+                }
+                else {
+                    this.xField = value;
+                    this.OnPropertyChanged("X");
+                }
+            }
+        }
+        
+        public string Y {
+            get {
+                return this.yField;
+            }
+            set {
+                if ((this.yField != null)) {
+                    if ((yField.Equals(value) != true)) {
+                        this.yField = value;
+                        this.OnPropertyChanged("Y");
+                    }
+                }
+                else {
+                    this.yField = value;
+                    this.OnPropertyChanged("Y");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(EnvelopeUpperRightCoordinate));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string info) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(info));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current EnvelopeUpperRightCoordinate object into an XML document
+        /// </summary>
+        /// <returns>string XML value</returns>
+        public virtual string Serialize() {
+            System.IO.StreamReader streamReader = null;
+            System.IO.MemoryStream memoryStream = null;
+            try {
+                memoryStream = new System.IO.MemoryStream();
+                Serializer.Serialize(memoryStream, this);
+                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
+                streamReader = new System.IO.StreamReader(memoryStream);
+                return streamReader.ReadToEnd();
+            }
+            finally {
+                if ((streamReader != null)) {
+                    streamReader.Dispose();
+                }
+                if ((memoryStream != null)) {
+                    memoryStream.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes workflow markup into an EnvelopeUpperRightCoordinate object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output EnvelopeUpperRightCoordinate object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool Deserialize(string xml, out EnvelopeUpperRightCoordinate obj, out System.Exception exception) {
+            exception = null;
+            obj = default(EnvelopeUpperRightCoordinate);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out EnvelopeUpperRightCoordinate obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static EnvelopeUpperRightCoordinate Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((EnvelopeUpperRightCoordinate)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current EnvelopeUpperRightCoordinate object into file
+        /// </summary>
+        /// <param name="fileName">full path of outupt xml file</param>
+        /// <param name="exception">output Exception value if failed</param>
+        /// <returns>true if can serialize and save into file; otherwise, false</returns>
+        public virtual bool SaveToFile(string fileName, out System.Exception exception) {
+            exception = null;
+            try {
+                SaveToFile(fileName);
+                return true;
+            }
+            catch (System.Exception e) {
+                exception = e;
+                return false;
+            }
+        }
+        
+        public virtual void SaveToFile(string fileName) {
+            System.IO.StreamWriter streamWriter = null;
+            try {
+                string xmlString = Serialize();
+                System.IO.FileInfo xmlFile = new System.IO.FileInfo(fileName);
+                streamWriter = xmlFile.CreateText();
+                streamWriter.WriteLine(xmlString);
+                streamWriter.Close();
+            }
+            finally {
+                if ((streamWriter != null)) {
+                    streamWriter.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Deserializes xml markup from file into an EnvelopeUpperRightCoordinate object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output EnvelopeUpperRightCoordinate object</param>
+        /// <param name="exception">output Exception value if deserialize failed</param>
+        /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
+        public static bool LoadFromFile(string fileName, out EnvelopeUpperRightCoordinate obj, out System.Exception exception) {
+            exception = null;
+            obj = default(EnvelopeUpperRightCoordinate);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out EnvelopeUpperRightCoordinate obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static EnvelopeUpperRightCoordinate LoadFromFile(string fileName) {
+            System.IO.FileStream file = null;
+            System.IO.StreamReader sr = null;
+            try {
+                file = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read);
+                sr = new System.IO.StreamReader(file);
+                string xmlString = sr.ReadToEnd();
+                sr.Close();
+                file.Close();
+                return Deserialize(xmlString);
+            }
+            finally {
+                if ((file != null)) {
+                    file.Dispose();
+                }
+                if ((sr != null)) {
+                    sr.Dispose();
+                }
+            }
+        }
+        #endregion
+        
+        #region Clone method
+        /// <summary>
+        /// Create a clone of this EnvelopeUpperRightCoordinate object
+        /// </summary>
+        public virtual EnvelopeUpperRightCoordinate Clone() {
+            return ((EnvelopeUpperRightCoordinate)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+}

Modified: branches/maestro-5.0.x/Maestro/Maestro.csproj
===================================================================
--- branches/maestro-5.0.x/Maestro/Maestro.csproj	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Maestro/Maestro.csproj	2013-09-14 16:22:05 UTC (rev 7858)
@@ -237,6 +237,10 @@
       <Link>Schemas\LayerDefinition-2.3.0.xsd</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
+    <None Include="..\OSGeo.MapGuide.MaestroAPI\Schemas\LayerDefinition-2.4.0.xsd">
+      <Link>Schemas\LayerDefinition-2.4.0.xsd</Link>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
     <None Include="..\OSGeo.MapGuide.MaestroAPI\Schemas\LoadProcedure-1.0.0.xsd">
       <Link>Schemas\LoadProcedure-1.0.0.xsd</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
@@ -305,6 +309,10 @@
       <Link>Schemas\Role-1.0.0.xsd</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
+    <None Include="..\OSGeo.MapGuide.MaestroAPI\Schemas\RuntimeMap-2.6.0.xsd">
+      <Link>Schemas\RuntimeMap-2.6.0.xsd</Link>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
     <None Include="..\OSGeo.MapGuide.MaestroAPI\Schemas\SelectAggregate-1.0.0.xsd">
       <Link>Schemas\SelectAggregate-1.0.0.xsd</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
@@ -414,7 +422,7 @@
     </Content>
     <Content Include="..\OSGeo.MapGuide.MaestroAPI\ConnectionProviders.xml">
       <Link>ConnectionProviders.xml</Link>
-      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="changelog.txt">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>

Modified: branches/maestro-5.0.x/Maestro.Base/Editor/XmlEditor.cs
===================================================================
--- branches/maestro-5.0.x/Maestro.Base/Editor/XmlEditor.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Maestro.Base/Editor/XmlEditor.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -70,6 +70,8 @@
 
             _edSvc = service;
             _edSvc.RegisterCustomNotifier(editor);
+            var path = Path.Combine(this.XsdPath, _edSvc.GetEditedResource().ValidatingSchema);
+            editor.LoadAutoCompletionData(path);
             editor.Bind(_edSvc);
             editor.ReadyForEditing(); //This turns on event broadcasting
             this.Title = Strings.XmlEditor + " " + ResourceIdentifier.GetName(this.EditorService.ResourceID); //NOXLATE

Modified: branches/maestro-5.0.x/Maestro.Base/Strings.Designer.cs
===================================================================
--- branches/maestro-5.0.x/Maestro.Base/Strings.Designer.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Maestro.Base/Strings.Designer.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -749,15 +749,24 @@
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to Go.
+        ///   Looks up a localized string similar to Open.
         /// </summary>
-        internal static string Label_Go {
+        internal static string Label_Open {
             get {
-                return ResourceManager.GetString("Label_Go", resourceCulture);
+                return ResourceManager.GetString("Label_Open", resourceCulture);
             }
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Open as XML.
+        /// </summary>
+        internal static string Label_OpenAsXml {
+            get {
+                return ResourceManager.GetString("Label_OpenAsXml", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Open this resource.
         /// </summary>
         internal static string Label_OpenResource {
@@ -767,6 +776,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Open this resource with the Generic XML editor.
+        /// </summary>
+        internal static string Label_OpenResourceAsXml {
+            get {
+                return ResourceManager.GetString("Label_OpenResourceAsXml", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Resource ID:.
         /// </summary>
         internal static string Label_ResourceID {

Modified: branches/maestro-5.0.x/Maestro.Base/Strings.resx
===================================================================
--- branches/maestro-5.0.x/Maestro.Base/Strings.resx	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Maestro.Base/Strings.resx	2013-09-14 16:22:05 UTC (rev 7858)
@@ -956,8 +956,8 @@
   <data name="ConnectionTestOk" xml:space="preserve">
     <value>Connection Test OK</value>
   </data>
-  <data name="Label_Go" xml:space="preserve">
-    <value>Go</value>
+  <data name="Label_Open" xml:space="preserve">
+    <value>Open</value>
   </data>
   <data name="Label_OpenResource" xml:space="preserve">
     <value>Open this resource</value>
@@ -971,4 +971,10 @@
   <data name="XmlReloadedFromSource" xml:space="preserve">
     <value>XML content reloaded from source</value>
   </data>
+  <data name="Label_OpenAsXml" xml:space="preserve">
+    <value>Open as XML</value>
+  </data>
+  <data name="Label_OpenResourceAsXml" xml:space="preserve">
+    <value>Open this resource with the Generic XML editor</value>
+  </data>
 </root>
\ No newline at end of file

Modified: branches/maestro-5.0.x/Maestro.Base/UI/ResourceIdNavigator.cs
===================================================================
--- branches/maestro-5.0.x/Maestro.Base/UI/ResourceIdNavigator.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Maestro.Base/UI/ResourceIdNavigator.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -44,6 +44,7 @@
         private ToolStripLabel _atLabel;
         private ToolStripComboBox _cmbActiveConnections;
         private ToolStripButton _btnGo;
+        private ToolStripButton _btnOpenAsXml;
 
         private ServerConnectionManager _connMgr;
         private OpenResourceManager _omgr;
@@ -84,13 +85,20 @@
             _cmbActiveConnections.ComboBox.SelectedIndexChanged += OnActiveConnectionChanged;
             _cmbActiveConnections.ComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
 
-            _btnGo = new ToolStripButton(Strings.Label_Go);
+            _btnGo = new ToolStripButton(Strings.Label_Open);
             _btnGo.Image = Properties.Resources.arrow;
             _btnGo.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
             _btnGo.TextImageRelation = TextImageRelation.TextBeforeImage;
             _btnGo.ToolTipText = Strings.Label_OpenResource;
             _btnGo.Click += btnGo_Click;
 
+            _btnOpenAsXml = new ToolStripButton(Strings.Label_OpenAsXml);
+            _btnOpenAsXml.Image = Properties.Resources.arrow;
+            _btnOpenAsXml.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
+            _btnOpenAsXml.TextImageRelation = TextImageRelation.TextBeforeImage;
+            _btnOpenAsXml.ToolTipText = Strings.Label_OpenResourceAsXml;
+            _btnOpenAsXml.Click += btnOpenAsXml_Click;
+
             UpdateConnectionList();
             UpdateNavigationState();
 
@@ -100,7 +108,8 @@
                 _cmbResourceId,
                 _atLabel,
                 _cmbActiveConnections,
-                _btnGo
+                _btnGo,
+                _btnOpenAsXml
             });
         }
 
@@ -139,9 +148,9 @@
 
         void OnResourceIdKeyUp(object sender, KeyEventArgs e)
         {
-            if (_btnGo.Enabled && (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return))
+            if (_btnGo.Enabled && _btnOpenAsXml.Enabled && (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return))
             {
-                DoNavigate();
+                DoNavigate(false);
             }
         }
 
@@ -171,7 +180,7 @@
 
         private void UpdateNavigationState()
         {
-            _btnGo.Enabled = ResourceIdentifier.Validate(_cmbResourceId.Text) && !ResourceIdentifier.IsFolderResource(_cmbResourceId.Text);
+            _btnGo.Enabled = _btnOpenAsXml.Enabled = ResourceIdentifier.Validate(_cmbResourceId.Text) && !ResourceIdentifier.IsFolderResource(_cmbResourceId.Text);
         }
 
         void OnConnectionRemoved(object sender, string name)
@@ -186,11 +195,16 @@
 
         void btnGo_Click(object sender, EventArgs e)
         {
-            DoNavigate();
+            DoNavigate(false);
         }
 
-        private void DoNavigate()
+        void btnOpenAsXml_Click(object sender, EventArgs e)
         {
+            DoNavigate(true);
+        }
+
+        private void DoNavigate(bool useXmlEditor)
+        {
             var conn = GetActiveConnection();
             if (conn != null)
             {
@@ -208,7 +222,7 @@
                     }
                     else
                     {
-                        _omgr.Open(resId, conn, false, _siteExp);
+                        _omgr.Open(resId, conn, useXmlEditor, _siteExp);
                     }
                 }
             }
@@ -230,7 +244,7 @@
         private void UpdateConnectionList()
         {
             var connNames = _connMgr.GetConnectionNames();
-            _btnGo.Enabled = connNames.Count > 0;
+            _btnGo.Enabled = _btnOpenAsXml.Enabled = connNames.Count > 0;
             _cmbActiveConnections.ComboBox.Items.Clear();
             if (connNames.Count > 0)
             {

Modified: branches/maestro-5.0.x/Maestro.Editors/Common/Expression/FdoExpressionCompletionDataProvider.cs
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Common/Expression/FdoExpressionCompletionDataProvider.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Maestro.Editors/Common/Expression/FdoExpressionCompletionDataProvider.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,4 +1,23 @@
-using ICSharpCode.TextEditor;
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using ICSharpCode.TextEditor;
 using ICSharpCode.TextEditor.Document;
 using ICSharpCode.TextEditor.Gui.CompletionWindow;
 using OSGeo.MapGuide.MaestroAPI;


Property changes on: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion
___________________________________________________________________
Added: bugtraq:number
   + true

Deleted: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedName.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedName.cs	2013-09-06 17:39:32 UTC (rev 7850)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedName.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,167 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2013, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-// 
-// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
-// Copyright 2002-2010 by
-//
-//  AlphaSierraPapa, Christoph Wille
-//  Vordernberger Strasse 27/8
-//  A-8700 Leoben
-//  Austria
-//
-//  email: office at alphasierrapapa.com
-//  court of jurisdiction: Landesgericht Leoben
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-// 
-#endregion
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Xml;
-
-namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
-{
-    /// <summary>
-    /// An <see cref="XmlQualifiedName"/> with the namespace prefix.
-    /// </summary>
-    /// <remarks>
-    /// The namespace prefix active for a namespace is 
-    /// needed when an element is inserted via autocompletion. This
-    /// class just adds this extra information alongside the 
-    /// <see cref="XmlQualifiedName"/>.
-    /// </remarks>
-    public class QualifiedName
-    {
-        XmlQualifiedName xmlQualifiedName = XmlQualifiedName.Empty;
-        string prefix = String.Empty;
-
-        public QualifiedName()
-        {
-        }
-
-        public QualifiedName(string name, string namespaceUri)
-            : this(name, namespaceUri, String.Empty)
-        {
-        }
-
-        public QualifiedName(string name, string namespaceUri, string prefix)
-        {
-            xmlQualifiedName = new XmlQualifiedName(name, namespaceUri);
-            this.prefix = prefix;
-        }
-
-        public static bool operator ==(QualifiedName lhs, QualifiedName rhs)
-        {
-            bool equals = false;
-
-            if (((object)lhs != null) && ((object)rhs != null))
-            {
-                equals = lhs.Equals(rhs);
-            }
-            else if (((object)lhs == null) && ((object)rhs == null))
-            {
-                equals = true;
-            }
-
-            return equals;
-        }
-
-        public static bool operator !=(QualifiedName lhs, QualifiedName rhs)
-        {
-            return !(lhs == rhs);
-        }
-
-        /// <summary>
-        /// A qualified name is considered equal if the namespace and 
-        /// name are the same.  The prefix is ignored.
-        /// </summary>
-        public override bool Equals(object obj)
-        {
-            bool equals = false;
-
-            QualifiedName qualifiedName = obj as QualifiedName;
-            if (qualifiedName != null)
-            {
-                equals = xmlQualifiedName.Equals(qualifiedName.xmlQualifiedName);
-            }
-            else
-            {
-                XmlQualifiedName name = obj as XmlQualifiedName;
-                if (name != null)
-                {
-                    equals = xmlQualifiedName.Equals(name);
-                }
-            }
-
-            return equals;
-        }
-
-        public override int GetHashCode()
-        {
-            return xmlQualifiedName.GetHashCode();
-        }
-
-        /// <summary>
-        /// Gets the namespace of the qualified name.
-        /// </summary>
-        public string Namespace
-        {
-            get { return xmlQualifiedName.Namespace; }
-            set { xmlQualifiedName = new XmlQualifiedName(xmlQualifiedName.Name, value); }
-        }
-
-        /// <summary>
-        /// Gets the name of the element.
-        /// </summary>
-        public string Name
-        {
-            get { return xmlQualifiedName.Name; }
-            set { xmlQualifiedName = new XmlQualifiedName(value, xmlQualifiedName.Namespace); }
-        }
-
-        /// <summary>
-        /// Gets the namespace prefix used.
-        /// </summary>
-        public string Prefix
-        {
-            get { return prefix; }
-            set { prefix = value; }
-        }
-
-        /// <summary>
-        /// Returns a string that represents the QualifiedName.
-        /// </summary>
-        public override string ToString()
-        {
-            if (xmlQualifiedName.Namespace.Length > 0)
-            {
-                string prefixToString = String.Empty;
-                if (!String.IsNullOrEmpty(prefix))
-                {
-                    prefixToString = prefix + ":";
-                }
-                return String.Concat(prefixToString, xmlQualifiedName.Name, " [", xmlQualifiedName.Namespace, "]");
-            }
-            else if (!String.IsNullOrEmpty(prefix))
-            {
-                return prefix + ":" + xmlQualifiedName.Name;
-            }
-            return xmlQualifiedName.Name;
-        }
-    }
-}

Copied: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedName.cs (from rev 7850, trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedName.cs)
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedName.cs	                        (rev 0)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedName.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,167 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
+// Copyright 2002-2010 by
+//
+//  AlphaSierraPapa, Christoph Wille
+//  Vordernberger Strasse 27/8
+//  A-8700 Leoben
+//  Austria
+//
+//  email: office at alphasierrapapa.com
+//  court of jurisdiction: Landesgericht Leoben
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Xml;
+
+namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
+{
+    /// <summary>
+    /// An <see cref="XmlQualifiedName"/> with the namespace prefix.
+    /// </summary>
+    /// <remarks>
+    /// The namespace prefix active for a namespace is 
+    /// needed when an element is inserted via autocompletion. This
+    /// class just adds this extra information alongside the 
+    /// <see cref="XmlQualifiedName"/>.
+    /// </remarks>
+    public class QualifiedName
+    {
+        XmlQualifiedName xmlQualifiedName = XmlQualifiedName.Empty;
+        string prefix = String.Empty;
+
+        public QualifiedName()
+        {
+        }
+
+        public QualifiedName(string name, string namespaceUri)
+            : this(name, namespaceUri, String.Empty)
+        {
+        }
+
+        public QualifiedName(string name, string namespaceUri, string prefix)
+        {
+            xmlQualifiedName = new XmlQualifiedName(name, namespaceUri);
+            this.prefix = prefix;
+        }
+
+        public static bool operator ==(QualifiedName lhs, QualifiedName rhs)
+        {
+            bool equals = false;
+
+            if (((object)lhs != null) && ((object)rhs != null))
+            {
+                equals = lhs.Equals(rhs);
+            }
+            else if (((object)lhs == null) && ((object)rhs == null))
+            {
+                equals = true;
+            }
+
+            return equals;
+        }
+
+        public static bool operator !=(QualifiedName lhs, QualifiedName rhs)
+        {
+            return !(lhs == rhs);
+        }
+
+        /// <summary>
+        /// A qualified name is considered equal if the namespace and 
+        /// name are the same.  The prefix is ignored.
+        /// </summary>
+        public override bool Equals(object obj)
+        {
+            bool equals = false;
+
+            QualifiedName qualifiedName = obj as QualifiedName;
+            if (qualifiedName != null)
+            {
+                equals = xmlQualifiedName.Equals(qualifiedName.xmlQualifiedName);
+            }
+            else
+            {
+                XmlQualifiedName name = obj as XmlQualifiedName;
+                if (name != null)
+                {
+                    equals = xmlQualifiedName.Equals(name);
+                }
+            }
+
+            return equals;
+        }
+
+        public override int GetHashCode()
+        {
+            return xmlQualifiedName.GetHashCode();
+        }
+
+        /// <summary>
+        /// Gets the namespace of the qualified name.
+        /// </summary>
+        public string Namespace
+        {
+            get { return xmlQualifiedName.Namespace; }
+            set { xmlQualifiedName = new XmlQualifiedName(xmlQualifiedName.Name, value); }
+        }
+
+        /// <summary>
+        /// Gets the name of the element.
+        /// </summary>
+        public string Name
+        {
+            get { return xmlQualifiedName.Name; }
+            set { xmlQualifiedName = new XmlQualifiedName(value, xmlQualifiedName.Namespace); }
+        }
+
+        /// <summary>
+        /// Gets the namespace prefix used.
+        /// </summary>
+        public string Prefix
+        {
+            get { return prefix; }
+            set { prefix = value; }
+        }
+
+        /// <summary>
+        /// Returns a string that represents the QualifiedName.
+        /// </summary>
+        public override string ToString()
+        {
+            if (xmlQualifiedName.Namespace.Length > 0)
+            {
+                string prefixToString = String.Empty;
+                if (!String.IsNullOrEmpty(prefix))
+                {
+                    prefixToString = prefix + ":";
+                }
+                return String.Concat(prefixToString, xmlQualifiedName.Name, " [", xmlQualifiedName.Namespace, "]");
+            }
+            else if (!String.IsNullOrEmpty(prefix))
+            {
+                return prefix + ":" + xmlQualifiedName.Name;
+            }
+            return xmlQualifiedName.Name;
+        }
+    }
+}

Deleted: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedNameCollection.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedNameCollection.cs	2013-09-06 17:39:32 UTC (rev 7850)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedNameCollection.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,310 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2013, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-// 
-// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
-// Copyright 2002-2010 by
-//
-//  AlphaSierraPapa, Christoph Wille
-//  Vordernberger Strasse 27/8
-//  A-8700 Leoben
-//  Austria
-//
-//  email: office at alphasierrapapa.com
-//  court of jurisdiction: Landesgericht Leoben
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-// 
-#endregion
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
-{
-    /// <summary>
-    ///   A collection that stores <see cref='QualifiedName'/> objects.
-    /// </summary>
-    [Serializable()]
-    public class QualifiedNameCollection : CollectionBase
-    {
-
-        /// <summary>
-        ///   Initializes a new instance of <see cref='QualifiedNameCollection'/>.
-        /// </summary>
-        public QualifiedNameCollection()
-        {
-        }
-
-        /// <summary>
-        ///   Initializes a new instance of <see cref='QualifiedNameCollection'/> based on another <see cref='QualifiedNameCollection'/>.
-        /// </summary>
-        /// <param name='val'>
-        ///   A <see cref='QualifiedNameCollection'/> from which the contents are copied
-        /// </param>
-        public QualifiedNameCollection(QualifiedNameCollection val)
-        {
-            this.AddRange(val);
-        }
-
-        /// <summary>
-        ///   Initializes a new instance of <see cref='QualifiedNameCollection'/> containing any array of <see cref='QualifiedName'/> objects.
-        /// </summary>
-        /// <param name='val'>
-        ///       A array of <see cref='QualifiedName'/> objects with which to intialize the collection
-        /// </param>
-        public QualifiedNameCollection(QualifiedName[] val)
-        {
-            this.AddRange(val);
-        }
-
-        /// <summary>
-        ///   Represents the entry at the specified index of the <see cref='QualifiedName'/>.
-        /// </summary>
-        /// <param name='index'>The zero-based index of the entry to locate in the collection.</param>
-        /// <value>The entry at the specified index of the collection.</value>
-        /// <exception cref='ArgumentOutOfRangeException'><paramref name='index'/> is outside the valid range of indexes for the collection.</exception>
-        public QualifiedName this[int index]
-        {
-            get
-            {
-                return ((QualifiedName)(List[index]));
-            }
-            set
-            {
-                List[index] = value;
-            }
-        }
-
-        /// <summary>
-        ///   Adds a <see cref='QualifiedName'/> with the specified value to the 
-        ///   <see cref='QualifiedNameCollection'/>.
-        /// </summary>
-        /// <param name='val'>The <see cref='QualifiedName'/> to add.</param>
-        /// <returns>The index at which the new element was inserted.</returns>
-        /// <seealso cref='QualifiedNameCollection.AddRange'/>
-        public int Add(QualifiedName val)
-        {
-            return List.Add(val);
-        }
-
-        /// <summary>
-        ///   Copies the elements of an array to the end of the <see cref='QualifiedNameCollection'/>.
-        /// </summary>
-        /// <param name='val'>
-        ///    An array of type <see cref='QualifiedName'/> containing the objects to add to the collection.
-        /// </param>
-        /// <seealso cref='QualifiedNameCollection.Add'/>
-        public void AddRange(QualifiedName[] val)
-        {
-            for (int i = 0; i < val.Length; i++)
-            {
-                this.Add(val[i]);
-            }
-        }
-
-        /// <summary>
-        ///   Adds the contents of another <see cref='QualifiedNameCollection'/> to the end of the collection.
-        /// </summary>
-        /// <param name='val'>
-        ///    A <see cref='QualifiedNameCollection'/> containing the objects to add to the collection.
-        /// </param>
-        /// <seealso cref='QualifiedNameCollection.Add'/>
-        public void AddRange(QualifiedNameCollection val)
-        {
-            for (int i = 0; i < val.Count; i++)
-            {
-                this.Add(val[i]);
-            }
-        }
-
-        /// <summary>
-        ///   Gets a value indicating whether the 
-        ///    <see cref='QualifiedNameCollection'/> contains the specified <see cref='QualifiedName'/>.
-        /// </summary>
-        /// <param name='val'>The <see cref='QualifiedName'/> to locate.</param>
-        /// <returns>
-        /// <see langword='true'/> if the <see cref='QualifiedName'/> is contained in the collection; 
-        ///   otherwise, <see langword='false'/>.
-        /// </returns>
-        /// <seealso cref='QualifiedNameCollection.IndexOf'/>
-        public bool Contains(QualifiedName val)
-        {
-            return List.Contains(val);
-        }
-
-        /// <summary>
-        ///   Copies the <see cref='QualifiedNameCollection'/> values to a one-dimensional <see cref='Array'/> instance at the 
-        ///    specified index.
-        /// </summary>
-        /// <param name='array'>The one-dimensional <see cref='Array'/> that is the destination of the values copied from <see cref='QualifiedNameCollection'/>.</param>
-        /// <param name='index'>The index in <paramref name='array'/> where copying begins.</param>
-        /// <exception cref='ArgumentException'>
-        ///   <para><paramref name='array'/> is multidimensional.</para>
-        ///   <para>-or-</para>
-        ///   <para>The number of elements in the <see cref='QualifiedNameCollection'/> is greater than
-        ///         the available space between <paramref name='arrayIndex'/> and the end of
-        ///         <paramref name='array'/>.</para>
-        /// </exception>
-        /// <exception cref='ArgumentNullException'><paramref name='array'/> is <see langword='null'/>. </exception>
-        /// <exception cref='ArgumentOutOfRangeException'><paramref name='arrayIndex'/> is less than <paramref name='array'/>'s lowbound. </exception>
-        /// <seealso cref='Array'/>
-        public void CopyTo(QualifiedName[] array, int index)
-        {
-            List.CopyTo(array, index);
-        }
-
-        /// <summary>
-        ///    Returns the index of a <see cref='QualifiedName'/> in 
-        ///       the <see cref='QualifiedNameCollection'/>.
-        /// </summary>
-        /// <param name='val'>The <see cref='QualifiedName'/> to locate.</param>
-        /// <returns>
-        ///   The index of the <see cref='QualifiedName'/> of <paramref name='val'/> in the 
-        ///   <see cref='QualifiedNameCollection'/>, if found; otherwise, -1.
-        /// </returns>
-        /// <seealso cref='QualifiedNameCollection.Contains'/>
-        public int IndexOf(QualifiedName val)
-        {
-            return List.IndexOf(val);
-        }
-
-        /// <summary>
-        ///   Inserts a <see cref='QualifiedName'/> into the <see cref='QualifiedNameCollection'/> at the specified index.
-        /// </summary>
-        /// <param name='index'>The zero-based index where <paramref name='val'/> should be inserted.</param>
-        /// <param name='val'>The <see cref='QualifiedName'/> to insert.</param>
-        /// <seealso cref='QualifiedNameCollection.Add'/>
-        public void Insert(int index, QualifiedName val)
-        {
-            List.Insert(index, val);
-        }
-
-        /// <summary>
-        ///  Returns an enumerator that can iterate through the <see cref='QualifiedNameCollection'/>.
-        /// </summary>
-        /// <seealso cref='IEnumerator'/>
-        public new QualifiedNameEnumerator GetEnumerator()
-        {
-            return new QualifiedNameEnumerator(this);
-        }
-
-        /// <summary>
-        ///   Removes a specific <see cref='QualifiedName'/> from the <see cref='QualifiedNameCollection'/>.
-        /// </summary>
-        /// <param name='val'>The <see cref='QualifiedName'/> to remove from the <see cref='QualifiedNameCollection'/>.</param>
-        /// <exception cref='ArgumentException'><paramref name='val'/> is not found in the Collection.</exception>
-        public void Remove(QualifiedName val)
-        {
-            List.Remove(val);
-        }
-
-        /// <summary>
-        /// Removes the last item in this collection.
-        /// </summary>
-        public void RemoveLast()
-        {
-            if (Count > 0)
-            {
-                RemoveAt(Count - 1);
-            }
-        }
-
-        /// <summary>
-        /// Removes the first item in the collection.
-        /// </summary>
-        public void RemoveFirst()
-        {
-            if (Count > 0)
-            {
-                RemoveAt(0);
-            }
-        }
-
-        /// <summary>
-        /// Gets the namespace prefix of the last item.
-        /// </summary>
-        public string LastPrefix
-        {
-            get
-            {
-                if (Count > 0)
-                {
-                    QualifiedName name = this[Count - 1];
-                    return name.Prefix;
-                }
-                return String.Empty;
-            }
-        }
-
-        /// <summary>
-        ///   Enumerator that can iterate through a QualifiedNameCollection.
-        /// </summary>
-        /// <seealso cref='IEnumerator'/>
-        /// <seealso cref='QualifiedNameCollection'/>
-        /// <seealso cref='QualifiedName'/>
-        public class QualifiedNameEnumerator : IEnumerator
-        {
-            IEnumerator baseEnumerator;
-            IEnumerable temp;
-
-            /// <summary>
-            ///   Initializes a new instance of <see cref='QualifiedNameEnumerator'/>.
-            /// </summary>
-            public QualifiedNameEnumerator(QualifiedNameCollection mappings)
-            {
-                this.temp = ((IEnumerable)(mappings));
-                this.baseEnumerator = temp.GetEnumerator();
-            }
-
-            /// <summary>
-            ///   Gets the current <see cref='QualifiedName'/> in the <seealso cref='QualifiedNameCollection'/>.
-            /// </summary>
-            public QualifiedName Current
-            {
-                get
-                {
-                    return ((QualifiedName)(baseEnumerator.Current));
-                }
-            }
-
-            object IEnumerator.Current
-            {
-                get
-                {
-                    return baseEnumerator.Current;
-                }
-            }
-
-            /// <summary>
-            ///   Advances the enumerator to the next <see cref='QualifiedName'/> of the <see cref='QualifiedNameCollection'/>.
-            /// </summary>
-            public bool MoveNext()
-            {
-                return baseEnumerator.MoveNext();
-            }
-
-            /// <summary>
-            ///   Sets the enumerator to its initial position, which is before the first element in the <see cref='QualifiedNameCollection'/>.
-            /// </summary>
-            public void Reset()
-            {
-                baseEnumerator.Reset();
-            }
-        }
-    }
-}

Copied: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedNameCollection.cs (from rev 7850, trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedNameCollection.cs)
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedNameCollection.cs	                        (rev 0)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/QualifiedNameCollection.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,310 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
+// Copyright 2002-2010 by
+//
+//  AlphaSierraPapa, Christoph Wille
+//  Vordernberger Strasse 27/8
+//  A-8700 Leoben
+//  Austria
+//
+//  email: office at alphasierrapapa.com
+//  court of jurisdiction: Landesgericht Leoben
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
+{
+    /// <summary>
+    ///   A collection that stores <see cref='QualifiedName'/> objects.
+    /// </summary>
+    [Serializable()]
+    public class QualifiedNameCollection : CollectionBase
+    {
+
+        /// <summary>
+        ///   Initializes a new instance of <see cref='QualifiedNameCollection'/>.
+        /// </summary>
+        public QualifiedNameCollection()
+        {
+        }
+
+        /// <summary>
+        ///   Initializes a new instance of <see cref='QualifiedNameCollection'/> based on another <see cref='QualifiedNameCollection'/>.
+        /// </summary>
+        /// <param name='val'>
+        ///   A <see cref='QualifiedNameCollection'/> from which the contents are copied
+        /// </param>
+        public QualifiedNameCollection(QualifiedNameCollection val)
+        {
+            this.AddRange(val);
+        }
+
+        /// <summary>
+        ///   Initializes a new instance of <see cref='QualifiedNameCollection'/> containing any array of <see cref='QualifiedName'/> objects.
+        /// </summary>
+        /// <param name='val'>
+        ///       A array of <see cref='QualifiedName'/> objects with which to intialize the collection
+        /// </param>
+        public QualifiedNameCollection(QualifiedName[] val)
+        {
+            this.AddRange(val);
+        }
+
+        /// <summary>
+        ///   Represents the entry at the specified index of the <see cref='QualifiedName'/>.
+        /// </summary>
+        /// <param name='index'>The zero-based index of the entry to locate in the collection.</param>
+        /// <value>The entry at the specified index of the collection.</value>
+        /// <exception cref='ArgumentOutOfRangeException'><paramref name='index'/> is outside the valid range of indexes for the collection.</exception>
+        public QualifiedName this[int index]
+        {
+            get
+            {
+                return ((QualifiedName)(List[index]));
+            }
+            set
+            {
+                List[index] = value;
+            }
+        }
+
+        /// <summary>
+        ///   Adds a <see cref='QualifiedName'/> with the specified value to the 
+        ///   <see cref='QualifiedNameCollection'/>.
+        /// </summary>
+        /// <param name='val'>The <see cref='QualifiedName'/> to add.</param>
+        /// <returns>The index at which the new element was inserted.</returns>
+        /// <seealso cref='QualifiedNameCollection.AddRange'/>
+        public int Add(QualifiedName val)
+        {
+            return List.Add(val);
+        }
+
+        /// <summary>
+        ///   Copies the elements of an array to the end of the <see cref='QualifiedNameCollection'/>.
+        /// </summary>
+        /// <param name='val'>
+        ///    An array of type <see cref='QualifiedName'/> containing the objects to add to the collection.
+        /// </param>
+        /// <seealso cref='QualifiedNameCollection.Add'/>
+        public void AddRange(QualifiedName[] val)
+        {
+            for (int i = 0; i < val.Length; i++)
+            {
+                this.Add(val[i]);
+            }
+        }
+
+        /// <summary>
+        ///   Adds the contents of another <see cref='QualifiedNameCollection'/> to the end of the collection.
+        /// </summary>
+        /// <param name='val'>
+        ///    A <see cref='QualifiedNameCollection'/> containing the objects to add to the collection.
+        /// </param>
+        /// <seealso cref='QualifiedNameCollection.Add'/>
+        public void AddRange(QualifiedNameCollection val)
+        {
+            for (int i = 0; i < val.Count; i++)
+            {
+                this.Add(val[i]);
+            }
+        }
+
+        /// <summary>
+        ///   Gets a value indicating whether the 
+        ///    <see cref='QualifiedNameCollection'/> contains the specified <see cref='QualifiedName'/>.
+        /// </summary>
+        /// <param name='val'>The <see cref='QualifiedName'/> to locate.</param>
+        /// <returns>
+        /// <see langword='true'/> if the <see cref='QualifiedName'/> is contained in the collection; 
+        ///   otherwise, <see langword='false'/>.
+        /// </returns>
+        /// <seealso cref='QualifiedNameCollection.IndexOf'/>
+        public bool Contains(QualifiedName val)
+        {
+            return List.Contains(val);
+        }
+
+        /// <summary>
+        ///   Copies the <see cref='QualifiedNameCollection'/> values to a one-dimensional <see cref='Array'/> instance at the 
+        ///    specified index.
+        /// </summary>
+        /// <param name='array'>The one-dimensional <see cref='Array'/> that is the destination of the values copied from <see cref='QualifiedNameCollection'/>.</param>
+        /// <param name='index'>The index in <paramref name='array'/> where copying begins.</param>
+        /// <exception cref='ArgumentException'>
+        ///   <para><paramref name='array'/> is multidimensional.</para>
+        ///   <para>-or-</para>
+        ///   <para>The number of elements in the <see cref='QualifiedNameCollection'/> is greater than
+        ///         the available space between <paramref name='arrayIndex'/> and the end of
+        ///         <paramref name='array'/>.</para>
+        /// </exception>
+        /// <exception cref='ArgumentNullException'><paramref name='array'/> is <see langword='null'/>. </exception>
+        /// <exception cref='ArgumentOutOfRangeException'><paramref name='arrayIndex'/> is less than <paramref name='array'/>'s lowbound. </exception>
+        /// <seealso cref='Array'/>
+        public void CopyTo(QualifiedName[] array, int index)
+        {
+            List.CopyTo(array, index);
+        }
+
+        /// <summary>
+        ///    Returns the index of a <see cref='QualifiedName'/> in 
+        ///       the <see cref='QualifiedNameCollection'/>.
+        /// </summary>
+        /// <param name='val'>The <see cref='QualifiedName'/> to locate.</param>
+        /// <returns>
+        ///   The index of the <see cref='QualifiedName'/> of <paramref name='val'/> in the 
+        ///   <see cref='QualifiedNameCollection'/>, if found; otherwise, -1.
+        /// </returns>
+        /// <seealso cref='QualifiedNameCollection.Contains'/>
+        public int IndexOf(QualifiedName val)
+        {
+            return List.IndexOf(val);
+        }
+
+        /// <summary>
+        ///   Inserts a <see cref='QualifiedName'/> into the <see cref='QualifiedNameCollection'/> at the specified index.
+        /// </summary>
+        /// <param name='index'>The zero-based index where <paramref name='val'/> should be inserted.</param>
+        /// <param name='val'>The <see cref='QualifiedName'/> to insert.</param>
+        /// <seealso cref='QualifiedNameCollection.Add'/>
+        public void Insert(int index, QualifiedName val)
+        {
+            List.Insert(index, val);
+        }
+
+        /// <summary>
+        ///  Returns an enumerator that can iterate through the <see cref='QualifiedNameCollection'/>.
+        /// </summary>
+        /// <seealso cref='IEnumerator'/>
+        public new QualifiedNameEnumerator GetEnumerator()
+        {
+            return new QualifiedNameEnumerator(this);
+        }
+
+        /// <summary>
+        ///   Removes a specific <see cref='QualifiedName'/> from the <see cref='QualifiedNameCollection'/>.
+        /// </summary>
+        /// <param name='val'>The <see cref='QualifiedName'/> to remove from the <see cref='QualifiedNameCollection'/>.</param>
+        /// <exception cref='ArgumentException'><paramref name='val'/> is not found in the Collection.</exception>
+        public void Remove(QualifiedName val)
+        {
+            List.Remove(val);
+        }
+
+        /// <summary>
+        /// Removes the last item in this collection.
+        /// </summary>
+        public void RemoveLast()
+        {
+            if (Count > 0)
+            {
+                RemoveAt(Count - 1);
+            }
+        }
+
+        /// <summary>
+        /// Removes the first item in the collection.
+        /// </summary>
+        public void RemoveFirst()
+        {
+            if (Count > 0)
+            {
+                RemoveAt(0);
+            }
+        }
+
+        /// <summary>
+        /// Gets the namespace prefix of the last item.
+        /// </summary>
+        public string LastPrefix
+        {
+            get
+            {
+                if (Count > 0)
+                {
+                    QualifiedName name = this[Count - 1];
+                    return name.Prefix;
+                }
+                return String.Empty;
+            }
+        }
+
+        /// <summary>
+        ///   Enumerator that can iterate through a QualifiedNameCollection.
+        /// </summary>
+        /// <seealso cref='IEnumerator'/>
+        /// <seealso cref='QualifiedNameCollection'/>
+        /// <seealso cref='QualifiedName'/>
+        public class QualifiedNameEnumerator : IEnumerator
+        {
+            IEnumerator baseEnumerator;
+            IEnumerable temp;
+
+            /// <summary>
+            ///   Initializes a new instance of <see cref='QualifiedNameEnumerator'/>.
+            /// </summary>
+            public QualifiedNameEnumerator(QualifiedNameCollection mappings)
+            {
+                this.temp = ((IEnumerable)(mappings));
+                this.baseEnumerator = temp.GetEnumerator();
+            }
+
+            /// <summary>
+            ///   Gets the current <see cref='QualifiedName'/> in the <seealso cref='QualifiedNameCollection'/>.
+            /// </summary>
+            public QualifiedName Current
+            {
+                get
+                {
+                    return ((QualifiedName)(baseEnumerator.Current));
+                }
+            }
+
+            object IEnumerator.Current
+            {
+                get
+                {
+                    return baseEnumerator.Current;
+                }
+            }
+
+            /// <summary>
+            ///   Advances the enumerator to the next <see cref='QualifiedName'/> of the <see cref='QualifiedNameCollection'/>.
+            /// </summary>
+            public bool MoveNext()
+            {
+                return baseEnumerator.MoveNext();
+            }
+
+            /// <summary>
+            ///   Sets the enumerator to its initial position, which is before the first element in the <see cref='QualifiedNameCollection'/>.
+            /// </summary>
+            public void Reset()
+            {
+                baseEnumerator.Reset();
+            }
+        }
+    }
+}

Deleted: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionData.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionData.cs	2013-09-06 17:39:32 UTC (rev 7850)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionData.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,145 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2013, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-// 
-// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
-// Copyright 2002-2010 by
-//
-//  AlphaSierraPapa, Christoph Wille
-//  Vordernberger Strasse 27/8
-//  A-8700 Leoben
-//  Austria
-//
-//  email: office at alphasierrapapa.com
-//  court of jurisdiction: Landesgericht Leoben
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-// 
-#endregion
-using ICSharpCode.TextEditor;
-using ICSharpCode.TextEditor.Gui.CompletionWindow;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
-{
-    /// <summary>
-    /// Holds the text for  namespace, child element or attribute 
-    /// autocomplete (intellisense).
-    /// </summary>
-    internal class XmlCompletionData : ICompletionData
-    {
-        string text;
-        DataType dataType = DataType.XmlElement;
-        string description = String.Empty;
-
-        /// <summary>
-        /// The type of text held in this object.
-        /// </summary>
-        public enum DataType
-        {
-            XmlElement = 1,
-            XmlAttribute = 2,
-            NamespaceUri = 3,
-            XmlAttributeValue = 4
-        }
-
-        public XmlCompletionData(string text)
-            : this(text, String.Empty, DataType.XmlElement)
-        {
-        }
-
-        public XmlCompletionData(string text, string description)
-            : this(text, description, DataType.XmlElement)
-        {
-        }
-
-        public XmlCompletionData(string text, DataType dataType)
-            : this(text, String.Empty, dataType)
-        {
-        }
-
-        public XmlCompletionData(string text, string description, DataType dataType)
-        {
-            this.text = text;
-            this.description = description;
-            this.dataType = dataType;
-        }
-
-        public int ImageIndex
-        {
-            get
-            {
-                return 0;
-            }
-        }
-
-        public string Text
-        {
-            get
-            {
-                return text;
-            }
-            set
-            {
-                text = value;
-            }
-        }
-
-        /// <summary>
-        /// Returns the xml item's documentation as retrieved from
-        /// the xs:annotation/xs:documentation element.
-        /// </summary>
-        public string Description
-        {
-            get
-            {
-                return description;
-            }
-        }
-
-        public double Priority
-        {
-            get
-            {
-                return 0;
-            }
-        }
-
-        public bool InsertAction(TextArea textArea, char ch)
-        {
-            if ((dataType == DataType.XmlElement) || (dataType == DataType.XmlAttributeValue))
-            {
-                textArea.InsertString(text);
-            }
-            else if (dataType == DataType.NamespaceUri)
-            {
-                textArea.InsertString(String.Concat("\"", text, "\""));
-            }
-            else
-            {
-                // Insert an attribute.
-                Caret caret = textArea.Caret;
-                textArea.InsertString(String.Concat(text, "=\"\""));
-
-                // Move caret into the middle of the attribute quotes.
-                caret.Position = textArea.Document.OffsetToPosition(caret.Offset - 1);
-            }
-            return false;
-        }
-    }
-}

Copied: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionData.cs (from rev 7850, trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionData.cs)
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionData.cs	                        (rev 0)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionData.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,145 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
+// Copyright 2002-2010 by
+//
+//  AlphaSierraPapa, Christoph Wille
+//  Vordernberger Strasse 27/8
+//  A-8700 Leoben
+//  Austria
+//
+//  email: office at alphasierrapapa.com
+//  court of jurisdiction: Landesgericht Leoben
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using ICSharpCode.TextEditor;
+using ICSharpCode.TextEditor.Gui.CompletionWindow;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
+{
+    /// <summary>
+    /// Holds the text for  namespace, child element or attribute 
+    /// autocomplete (intellisense).
+    /// </summary>
+    internal class XmlCompletionData : ICompletionData
+    {
+        string text;
+        DataType dataType = DataType.XmlElement;
+        string description = String.Empty;
+
+        /// <summary>
+        /// The type of text held in this object.
+        /// </summary>
+        public enum DataType
+        {
+            XmlElement = 1,
+            XmlAttribute = 2,
+            NamespaceUri = 3,
+            XmlAttributeValue = 4
+        }
+
+        public XmlCompletionData(string text)
+            : this(text, String.Empty, DataType.XmlElement)
+        {
+        }
+
+        public XmlCompletionData(string text, string description)
+            : this(text, description, DataType.XmlElement)
+        {
+        }
+
+        public XmlCompletionData(string text, DataType dataType)
+            : this(text, String.Empty, dataType)
+        {
+        }
+
+        public XmlCompletionData(string text, string description, DataType dataType)
+        {
+            this.text = text;
+            this.description = description;
+            this.dataType = dataType;
+        }
+
+        public int ImageIndex
+        {
+            get
+            {
+                return 0;
+            }
+        }
+
+        public string Text
+        {
+            get
+            {
+                return text;
+            }
+            set
+            {
+                text = value;
+            }
+        }
+
+        /// <summary>
+        /// Returns the xml item's documentation as retrieved from
+        /// the xs:annotation/xs:documentation element.
+        /// </summary>
+        public string Description
+        {
+            get
+            {
+                return description;
+            }
+        }
+
+        public double Priority
+        {
+            get
+            {
+                return 0;
+            }
+        }
+
+        public bool InsertAction(TextArea textArea, char ch)
+        {
+            if ((dataType == DataType.XmlElement) || (dataType == DataType.XmlAttributeValue))
+            {
+                textArea.InsertString(text);
+            }
+            else if (dataType == DataType.NamespaceUri)
+            {
+                textArea.InsertString(String.Concat("\"", text, "\""));
+            }
+            else
+            {
+                // Insert an attribute.
+                Caret caret = textArea.Caret;
+                textArea.InsertString(String.Concat(text, "=\"\""));
+
+                // Move caret into the middle of the attribute quotes.
+                caret.Position = textArea.Document.OffsetToPosition(caret.Offset - 1);
+            }
+            return false;
+        }
+    }
+}

Deleted: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataCollection.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataCollection.cs	2013-09-06 17:39:32 UTC (rev 7850)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataCollection.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,330 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2013, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-// 
-// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
-// Copyright 2002-2010 by
-//
-//  AlphaSierraPapa, Christoph Wille
-//  Vordernberger Strasse 27/8
-//  A-8700 Leoben
-//  Austria
-//
-//  email: office at alphasierrapapa.com
-//  court of jurisdiction: Landesgericht Leoben
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-// 
-#endregion
-using ICSharpCode.TextEditor.Gui.CompletionWindow;
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
-{
-    /// <summary>
-    ///   A collection that stores <see cref='XmlCompletionData'/> objects.
-    /// </summary>
-    [Serializable()]
-    internal class XmlCompletionDataCollection : CollectionBase
-    {
-
-        /// <summary>
-        ///   Initializes a new instance of <see cref='XmlCompletionDataCollection'/>.
-        /// </summary>
-        public XmlCompletionDataCollection()
-        {
-        }
-
-        /// <summary>
-        ///   Initializes a new instance of <see cref='XmlCompletionDataCollection'/> based on another <see cref='XmlCompletionDataCollection'/>.
-        /// </summary>
-        /// <param name='val'>
-        ///   A <see cref='XmlCompletionDataCollection'/> from which the contents are copied
-        /// </param>
-        public XmlCompletionDataCollection(XmlCompletionDataCollection val)
-        {
-            this.AddRange(val);
-        }
-
-        /// <summary>
-        ///   Initializes a new instance of <see cref='XmlCompletionDataCollection'/> containing any array of <see cref='XmlCompletionData'/> objects.
-        /// </summary>
-        /// <param name='val'>
-        ///       A array of <see cref='XmlCompletionData'/> objects with which to intialize the collection
-        /// </param>
-        public XmlCompletionDataCollection(XmlCompletionData[] val)
-        {
-            this.AddRange(val);
-        }
-
-        /// <summary>
-        ///   Represents the entry at the specified index of the <see cref='XmlCompletionData'/>.
-        /// </summary>
-        /// <param name='index'>The zero-based index of the entry to locate in the collection.</param>
-        /// <value>The entry at the specified index of the collection.</value>
-        /// <exception cref='ArgumentOutOfRangeException'><paramref name='index'/> is outside the valid range of indexes for the collection.</exception>
-        public XmlCompletionData this[int index]
-        {
-            get
-            {
-                return ((XmlCompletionData)(List[index]));
-            }
-            set
-            {
-                List[index] = value;
-            }
-        }
-
-        /// <summary>
-        ///   Adds a <see cref='XmlCompletionData'/> with the specified value to the 
-        ///   <see cref='XmlCompletionDataCollection'/>.
-        /// </summary>
-        /// <remarks>
-        /// If the completion data already exists in the collection it is not added.
-        /// </remarks>
-        /// <param name='val'>The <see cref='XmlCompletionData'/> to add.</param>
-        /// <returns>The index at which the new element was inserted.</returns>
-        /// <seealso cref='XmlCompletionDataCollection.AddRange'/>
-        public int Add(XmlCompletionData val)
-        {
-            int index = -1;
-            if (!Contains(val))
-            {
-                index = List.Add(val);
-            }
-            return index;
-        }
-
-        /// <summary>
-        ///   Copies the elements of an array to the end of the <see cref='XmlCompletionDataCollection'/>.
-        /// </summary>
-        /// <param name='val'>
-        ///    An array of type <see cref='XmlCompletionData'/> containing the objects to add to the collection.
-        /// </param>
-        /// <seealso cref='XmlCompletionDataCollection.Add'/>
-        public void AddRange(XmlCompletionData[] val)
-        {
-            for (int i = 0; i < val.Length; i++)
-            {
-                this.Add(val[i]);
-            }
-        }
-
-        /// <summary>
-        ///   Adds the contents of another <see cref='XmlCompletionDataCollection'/> to the end of the collection.
-        /// </summary>
-        /// <param name='val'>
-        ///    A <see cref='XmlCompletionDataCollection'/> containing the objects to add to the collection.
-        /// </param>
-        /// <seealso cref='XmlCompletionDataCollection.Add'/>
-        public void AddRange(XmlCompletionDataCollection val)
-        {
-            for (int i = 0; i < val.Count; i++)
-            {
-                this.Add(val[i]);
-            }
-        }
-
-        /// <summary>
-        ///   Gets a value indicating whether the 
-        ///    <see cref='XmlCompletionDataCollection'/> contains the specified <see cref='XmlCompletionData'/>.
-        /// </summary>
-        /// <param name='val'>The <see cref='XmlCompletionData'/> to locate.</param>
-        /// <returns>
-        /// <see langword='true'/> if the <see cref='XmlCompletionData'/> is contained in the collection; 
-        ///   otherwise, <see langword='false'/>.
-        /// </returns>
-        /// <seealso cref='XmlCompletionDataCollection.IndexOf'/>
-        public bool Contains(XmlCompletionData val)
-        {
-            if (val.Text != null)
-            {
-                if (val.Text.Length > 0)
-                {
-                    return Contains(val.Text);
-                }
-            }
-            return false;
-        }
-
-        public bool Contains(string name)
-        {
-            bool contains = false;
-
-            foreach (XmlCompletionData data in this)
-            {
-                if (data.Text != null)
-                {
-                    if (data.Text.Length > 0)
-                    {
-                        if (data.Text == name)
-                        {
-                            contains = true;
-                            break;
-                        }
-                    }
-                }
-            }
-
-            return contains;
-        }
-
-        /// <summary>
-        ///   Copies the <see cref='XmlCompletionDataCollection'/> values to a one-dimensional <see cref='Array'/> instance at the 
-        ///    specified index.
-        /// </summary>
-        /// <param name='array'>The one-dimensional <see cref='Array'/> that is the destination of the values copied from <see cref='XmlCompletionDataCollection'/>.</param>
-        /// <param name='index'>The index in <paramref name='array'/> where copying begins.</param>
-        /// <exception cref='ArgumentException'>
-        ///   <para><paramref name='array'/> is multidimensional.</para>
-        ///   <para>-or-</para>
-        ///   <para>The number of elements in the <see cref='XmlCompletionDataCollection'/> is greater than
-        ///         the available space between <paramref name='arrayIndex'/> and the end of
-        ///         <paramref name='array'/>.</para>
-        /// </exception>
-        /// <exception cref='ArgumentNullException'><paramref name='array'/> is <see langword='null'/>. </exception>
-        /// <exception cref='ArgumentOutOfRangeException'><paramref name='arrayIndex'/> is less than <paramref name='array'/>'s lowbound. </exception>
-        /// <seealso cref='Array'/>
-        public void CopyTo(XmlCompletionData[] array, int index)
-        {
-            List.CopyTo(array, index);
-        }
-
-        /// <summary>
-        ///   Copies the <see cref='XmlCompletionDataCollection'/> values to a one-dimensional <see cref='Array'/> instance at the 
-        ///    specified index.
-        /// </summary>
-        public void CopyTo(ICompletionData[] array, int index)
-        {
-            List.CopyTo(array, index);
-        }
-
-        /// <summary>
-        ///    Returns the index of a <see cref='XmlCompletionData'/> in 
-        ///       the <see cref='XmlCompletionDataCollection'/>.
-        /// </summary>
-        /// <param name='val'>The <see cref='XmlCompletionData'/> to locate.</param>
-        /// <returns>
-        ///   The index of the <see cref='XmlCompletionData'/> of <paramref name='val'/> in the 
-        ///   <see cref='XmlCompletionDataCollection'/>, if found; otherwise, -1.
-        /// </returns>
-        /// <seealso cref='XmlCompletionDataCollection.Contains'/>
-        public int IndexOf(XmlCompletionData val)
-        {
-            return List.IndexOf(val);
-        }
-
-        /// <summary>
-        ///   Inserts a <see cref='XmlCompletionData'/> into the <see cref='XmlCompletionDataCollection'/> at the specified index.
-        /// </summary>
-        /// <param name='index'>The zero-based index where <paramref name='val'/> should be inserted.</param>
-        /// <param name='val'>The <see cref='XmlCompletionData'/> to insert.</param>
-        /// <seealso cref='XmlCompletionDataCollection.Add'/>
-        public void Insert(int index, XmlCompletionData val)
-        {
-            List.Insert(index, val);
-        }
-
-        /// <summary>
-        /// Returns an array of <see cref="ICompletionData"/> items.
-        /// </summary>
-        /// <returns></returns>
-        public ICompletionData[] ToArray()
-        {
-            ICompletionData[] data = new ICompletionData[Count];
-            CopyTo(data, 0);
-            return data;
-        }
-
-        /// <summary>
-        ///  Returns an enumerator that can iterate through the <see cref='XmlCompletionDataCollection'/>.
-        /// </summary>
-        /// <seealso cref='IEnumerator'/>
-        public new XmlCompletionDataEnumerator GetEnumerator()
-        {
-            return new XmlCompletionDataEnumerator(this);
-        }
-
-        /// <summary>
-        ///   Removes a specific <see cref='XmlCompletionData'/> from the <see cref='XmlCompletionDataCollection'/>.
-        /// </summary>
-        /// <param name='val'>The <see cref='XmlCompletionData'/> to remove from the <see cref='XmlCompletionDataCollection'/>.</param>
-        /// <exception cref='ArgumentException'><paramref name='val'/> is not found in the Collection.</exception>
-        public void Remove(XmlCompletionData val)
-        {
-            List.Remove(val);
-        }
-
-        /// <summary>
-        ///   Enumerator that can iterate through a XmlCompletionDataCollection.
-        /// </summary>
-        /// <seealso cref='IEnumerator'/>
-        /// <seealso cref='XmlCompletionDataCollection'/>
-        /// <seealso cref='XmlCompletionData'/>
-        public class XmlCompletionDataEnumerator : IEnumerator
-        {
-            IEnumerator baseEnumerator;
-            IEnumerable temp;
-
-            /// <summary>
-            ///   Initializes a new instance of <see cref='XmlCompletionDataEnumerator'/>.
-            /// </summary>
-            public XmlCompletionDataEnumerator(XmlCompletionDataCollection mappings)
-            {
-                this.temp = ((IEnumerable)(mappings));
-                this.baseEnumerator = temp.GetEnumerator();
-            }
-
-            /// <summary>
-            ///   Gets the current <see cref='XmlCompletionData'/> in the <seealso cref='XmlCompletionDataCollection'/>.
-            /// </summary>
-            public XmlCompletionData Current
-            {
-                get
-                {
-                    return ((XmlCompletionData)(baseEnumerator.Current));
-                }
-            }
-
-            object IEnumerator.Current
-            {
-                get
-                {
-                    return baseEnumerator.Current;
-                }
-            }
-
-            /// <summary>
-            ///   Advances the enumerator to the next <see cref='XmlCompletionData'/> of the <see cref='XmlCompletionDataCollection'/>.
-            /// </summary>
-            public bool MoveNext()
-            {
-                return baseEnumerator.MoveNext();
-            }
-
-            /// <summary>
-            ///   Sets the enumerator to its initial position, which is before the first element in the <see cref='XmlCompletionDataCollection'/>.
-            /// </summary>
-            public void Reset()
-            {
-                baseEnumerator.Reset();
-            }
-        }
-    }
-}

Copied: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataCollection.cs (from rev 7850, trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataCollection.cs)
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataCollection.cs	                        (rev 0)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataCollection.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,330 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
+// Copyright 2002-2010 by
+//
+//  AlphaSierraPapa, Christoph Wille
+//  Vordernberger Strasse 27/8
+//  A-8700 Leoben
+//  Austria
+//
+//  email: office at alphasierrapapa.com
+//  court of jurisdiction: Landesgericht Leoben
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using ICSharpCode.TextEditor.Gui.CompletionWindow;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
+{
+    /// <summary>
+    ///   A collection that stores <see cref='XmlCompletionData'/> objects.
+    /// </summary>
+    [Serializable()]
+    internal class XmlCompletionDataCollection : CollectionBase
+    {
+
+        /// <summary>
+        ///   Initializes a new instance of <see cref='XmlCompletionDataCollection'/>.
+        /// </summary>
+        public XmlCompletionDataCollection()
+        {
+        }
+
+        /// <summary>
+        ///   Initializes a new instance of <see cref='XmlCompletionDataCollection'/> based on another <see cref='XmlCompletionDataCollection'/>.
+        /// </summary>
+        /// <param name='val'>
+        ///   A <see cref='XmlCompletionDataCollection'/> from which the contents are copied
+        /// </param>
+        public XmlCompletionDataCollection(XmlCompletionDataCollection val)
+        {
+            this.AddRange(val);
+        }
+
+        /// <summary>
+        ///   Initializes a new instance of <see cref='XmlCompletionDataCollection'/> containing any array of <see cref='XmlCompletionData'/> objects.
+        /// </summary>
+        /// <param name='val'>
+        ///       A array of <see cref='XmlCompletionData'/> objects with which to intialize the collection
+        /// </param>
+        public XmlCompletionDataCollection(XmlCompletionData[] val)
+        {
+            this.AddRange(val);
+        }
+
+        /// <summary>
+        ///   Represents the entry at the specified index of the <see cref='XmlCompletionData'/>.
+        /// </summary>
+        /// <param name='index'>The zero-based index of the entry to locate in the collection.</param>
+        /// <value>The entry at the specified index of the collection.</value>
+        /// <exception cref='ArgumentOutOfRangeException'><paramref name='index'/> is outside the valid range of indexes for the collection.</exception>
+        public XmlCompletionData this[int index]
+        {
+            get
+            {
+                return ((XmlCompletionData)(List[index]));
+            }
+            set
+            {
+                List[index] = value;
+            }
+        }
+
+        /// <summary>
+        ///   Adds a <see cref='XmlCompletionData'/> with the specified value to the 
+        ///   <see cref='XmlCompletionDataCollection'/>.
+        /// </summary>
+        /// <remarks>
+        /// If the completion data already exists in the collection it is not added.
+        /// </remarks>
+        /// <param name='val'>The <see cref='XmlCompletionData'/> to add.</param>
+        /// <returns>The index at which the new element was inserted.</returns>
+        /// <seealso cref='XmlCompletionDataCollection.AddRange'/>
+        public int Add(XmlCompletionData val)
+        {
+            int index = -1;
+            if (!Contains(val))
+            {
+                index = List.Add(val);
+            }
+            return index;
+        }
+
+        /// <summary>
+        ///   Copies the elements of an array to the end of the <see cref='XmlCompletionDataCollection'/>.
+        /// </summary>
+        /// <param name='val'>
+        ///    An array of type <see cref='XmlCompletionData'/> containing the objects to add to the collection.
+        /// </param>
+        /// <seealso cref='XmlCompletionDataCollection.Add'/>
+        public void AddRange(XmlCompletionData[] val)
+        {
+            for (int i = 0; i < val.Length; i++)
+            {
+                this.Add(val[i]);
+            }
+        }
+
+        /// <summary>
+        ///   Adds the contents of another <see cref='XmlCompletionDataCollection'/> to the end of the collection.
+        /// </summary>
+        /// <param name='val'>
+        ///    A <see cref='XmlCompletionDataCollection'/> containing the objects to add to the collection.
+        /// </param>
+        /// <seealso cref='XmlCompletionDataCollection.Add'/>
+        public void AddRange(XmlCompletionDataCollection val)
+        {
+            for (int i = 0; i < val.Count; i++)
+            {
+                this.Add(val[i]);
+            }
+        }
+
+        /// <summary>
+        ///   Gets a value indicating whether the 
+        ///    <see cref='XmlCompletionDataCollection'/> contains the specified <see cref='XmlCompletionData'/>.
+        /// </summary>
+        /// <param name='val'>The <see cref='XmlCompletionData'/> to locate.</param>
+        /// <returns>
+        /// <see langword='true'/> if the <see cref='XmlCompletionData'/> is contained in the collection; 
+        ///   otherwise, <see langword='false'/>.
+        /// </returns>
+        /// <seealso cref='XmlCompletionDataCollection.IndexOf'/>
+        public bool Contains(XmlCompletionData val)
+        {
+            if (val.Text != null)
+            {
+                if (val.Text.Length > 0)
+                {
+                    return Contains(val.Text);
+                }
+            }
+            return false;
+        }
+
+        public bool Contains(string name)
+        {
+            bool contains = false;
+
+            foreach (XmlCompletionData data in this)
+            {
+                if (data.Text != null)
+                {
+                    if (data.Text.Length > 0)
+                    {
+                        if (data.Text == name)
+                        {
+                            contains = true;
+                            break;
+                        }
+                    }
+                }
+            }
+
+            return contains;
+        }
+
+        /// <summary>
+        ///   Copies the <see cref='XmlCompletionDataCollection'/> values to a one-dimensional <see cref='Array'/> instance at the 
+        ///    specified index.
+        /// </summary>
+        /// <param name='array'>The one-dimensional <see cref='Array'/> that is the destination of the values copied from <see cref='XmlCompletionDataCollection'/>.</param>
+        /// <param name='index'>The index in <paramref name='array'/> where copying begins.</param>
+        /// <exception cref='ArgumentException'>
+        ///   <para><paramref name='array'/> is multidimensional.</para>
+        ///   <para>-or-</para>
+        ///   <para>The number of elements in the <see cref='XmlCompletionDataCollection'/> is greater than
+        ///         the available space between <paramref name='arrayIndex'/> and the end of
+        ///         <paramref name='array'/>.</para>
+        /// </exception>
+        /// <exception cref='ArgumentNullException'><paramref name='array'/> is <see langword='null'/>. </exception>
+        /// <exception cref='ArgumentOutOfRangeException'><paramref name='arrayIndex'/> is less than <paramref name='array'/>'s lowbound. </exception>
+        /// <seealso cref='Array'/>
+        public void CopyTo(XmlCompletionData[] array, int index)
+        {
+            List.CopyTo(array, index);
+        }
+
+        /// <summary>
+        ///   Copies the <see cref='XmlCompletionDataCollection'/> values to a one-dimensional <see cref='Array'/> instance at the 
+        ///    specified index.
+        /// </summary>
+        public void CopyTo(ICompletionData[] array, int index)
+        {
+            List.CopyTo(array, index);
+        }
+
+        /// <summary>
+        ///    Returns the index of a <see cref='XmlCompletionData'/> in 
+        ///       the <see cref='XmlCompletionDataCollection'/>.
+        /// </summary>
+        /// <param name='val'>The <see cref='XmlCompletionData'/> to locate.</param>
+        /// <returns>
+        ///   The index of the <see cref='XmlCompletionData'/> of <paramref name='val'/> in the 
+        ///   <see cref='XmlCompletionDataCollection'/>, if found; otherwise, -1.
+        /// </returns>
+        /// <seealso cref='XmlCompletionDataCollection.Contains'/>
+        public int IndexOf(XmlCompletionData val)
+        {
+            return List.IndexOf(val);
+        }
+
+        /// <summary>
+        ///   Inserts a <see cref='XmlCompletionData'/> into the <see cref='XmlCompletionDataCollection'/> at the specified index.
+        /// </summary>
+        /// <param name='index'>The zero-based index where <paramref name='val'/> should be inserted.</param>
+        /// <param name='val'>The <see cref='XmlCompletionData'/> to insert.</param>
+        /// <seealso cref='XmlCompletionDataCollection.Add'/>
+        public void Insert(int index, XmlCompletionData val)
+        {
+            List.Insert(index, val);
+        }
+
+        /// <summary>
+        /// Returns an array of <see cref="ICompletionData"/> items.
+        /// </summary>
+        /// <returns></returns>
+        public ICompletionData[] ToArray()
+        {
+            ICompletionData[] data = new ICompletionData[Count];
+            CopyTo(data, 0);
+            return data;
+        }
+
+        /// <summary>
+        ///  Returns an enumerator that can iterate through the <see cref='XmlCompletionDataCollection'/>.
+        /// </summary>
+        /// <seealso cref='IEnumerator'/>
+        public new XmlCompletionDataEnumerator GetEnumerator()
+        {
+            return new XmlCompletionDataEnumerator(this);
+        }
+
+        /// <summary>
+        ///   Removes a specific <see cref='XmlCompletionData'/> from the <see cref='XmlCompletionDataCollection'/>.
+        /// </summary>
+        /// <param name='val'>The <see cref='XmlCompletionData'/> to remove from the <see cref='XmlCompletionDataCollection'/>.</param>
+        /// <exception cref='ArgumentException'><paramref name='val'/> is not found in the Collection.</exception>
+        public void Remove(XmlCompletionData val)
+        {
+            List.Remove(val);
+        }
+
+        /// <summary>
+        ///   Enumerator that can iterate through a XmlCompletionDataCollection.
+        /// </summary>
+        /// <seealso cref='IEnumerator'/>
+        /// <seealso cref='XmlCompletionDataCollection'/>
+        /// <seealso cref='XmlCompletionData'/>
+        public class XmlCompletionDataEnumerator : IEnumerator
+        {
+            IEnumerator baseEnumerator;
+            IEnumerable temp;
+
+            /// <summary>
+            ///   Initializes a new instance of <see cref='XmlCompletionDataEnumerator'/>.
+            /// </summary>
+            public XmlCompletionDataEnumerator(XmlCompletionDataCollection mappings)
+            {
+                this.temp = ((IEnumerable)(mappings));
+                this.baseEnumerator = temp.GetEnumerator();
+            }
+
+            /// <summary>
+            ///   Gets the current <see cref='XmlCompletionData'/> in the <seealso cref='XmlCompletionDataCollection'/>.
+            /// </summary>
+            public XmlCompletionData Current
+            {
+                get
+                {
+                    return ((XmlCompletionData)(baseEnumerator.Current));
+                }
+            }
+
+            object IEnumerator.Current
+            {
+                get
+                {
+                    return baseEnumerator.Current;
+                }
+            }
+
+            /// <summary>
+            ///   Advances the enumerator to the next <see cref='XmlCompletionData'/> of the <see cref='XmlCompletionDataCollection'/>.
+            /// </summary>
+            public bool MoveNext()
+            {
+                return baseEnumerator.MoveNext();
+            }
+
+            /// <summary>
+            ///   Sets the enumerator to its initial position, which is before the first element in the <see cref='XmlCompletionDataCollection'/>.
+            /// </summary>
+            public void Reset()
+            {
+                baseEnumerator.Reset();
+            }
+        }
+    }
+}

Deleted: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataProvider.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataProvider.cs	2013-09-06 17:39:32 UTC (rev 7850)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataProvider.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,272 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2013, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-// 
-// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
-// Copyright 2002-2010 by
-//
-//  AlphaSierraPapa, Christoph Wille
-//  Vordernberger Strasse 27/8
-//  A-8700 Leoben
-//  Austria
-//
-//  email: office at alphasierrapapa.com
-//  court of jurisdiction: Landesgericht Leoben
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-// 
-#endregion
-using ICSharpCode.TextEditor;
-using ICSharpCode.TextEditor.Gui.CompletionWindow;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-
-namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
-{
-    /// <summary>
-    /// Provides the autocomplete (intellisense) data for an
-    /// xml document that specifies a known schema.
-    /// </summary>
-    internal class XmlCompletionDataProvider : ICompletionDataProvider
-    {
-        XmlSchemaCompletionDataCollection schemaCompletionDataItems;
-        XmlSchemaCompletionData defaultSchemaCompletionData;
-        string defaultNamespacePrefix = String.Empty;
-
-        public XmlCompletionDataProvider(XmlSchemaCompletionDataCollection schemaCompletionDataItems, XmlSchemaCompletionData defaultSchemaCompletionData, string defaultNamespacePrefix)
-        {
-            this.schemaCompletionDataItems = schemaCompletionDataItems;
-            this.defaultSchemaCompletionData = defaultSchemaCompletionData;
-            this.defaultNamespacePrefix = defaultNamespacePrefix;
-            DefaultIndex = 0;
-        }
-
-        public class XmlCompletionDataImageList
-        {
-            XmlCompletionDataImageList()
-            {
-            }
-
-            public static ImageList GetImageList()
-            {
-                ImageList imageList = new ImageList();
-
-                return imageList;
-            }
-        }
-
-        public ImageList ImageList
-        {
-            get
-            {
-                return XmlCompletionDataImageList.GetImageList();
-            }
-        }
-
-        /// <summary>
-        /// Overrides the default behaviour and allows special xml
-        /// characters such as '.' and ':' to be used as completion data.
-        /// </summary>
-        public CompletionDataProviderKeyResult ProcessKey(char key)
-        {
-            if (key == '\r' || key == '\t')
-            {
-                return CompletionDataProviderKeyResult.InsertionKey;
-            }
-            return CompletionDataProviderKeyResult.NormalKey;
-        }
-
-        public ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
-        {
-            this.PreSelection = null;
-            string text = String.Concat(textArea.Document.GetText(0, textArea.Caret.Offset), charTyped);
-
-            switch (charTyped)
-            {
-                case '=':
-                    // Namespace intellisense.
-                    if (XmlParser.IsNamespaceDeclaration(text, text.Length))
-                    {
-                        return schemaCompletionDataItems.GetNamespaceCompletionData(); ;
-                    }
-                    break;
-                case '<':
-                    // Child element intellisense.
-                    XmlElementPath parentPath = XmlParser.GetParentElementPath(text);
-                    if (parentPath.Elements.Count > 0)
-                    {
-                        return GetChildElementCompletionData(parentPath);
-                    }
-                    else if (defaultSchemaCompletionData != null)
-                    {
-                        return defaultSchemaCompletionData.GetElementCompletionData(defaultNamespacePrefix);
-                    }
-                    break;
-
-                case ' ':
-                    // Attribute intellisense.
-                    if (!XmlParser.IsInsideAttributeValue(text, text.Length))
-                    {
-                        XmlElementPath path = XmlParser.GetActiveElementStartPath(text, text.Length);
-                        if (path.Elements.Count > 0)
-                        {
-                            return GetAttributeCompletionData(path);
-                        }
-                    }
-                    break;
-
-                default:
-
-                    // Attribute value intellisense.
-                    if (XmlParser.IsAttributeValueChar(charTyped))
-                    {
-                        string attributeName = XmlParser.GetAttributeName(text, text.Length);
-                        if (attributeName.Length > 0)
-                        {
-                            XmlElementPath elementPath = XmlParser.GetActiveElementStartPath(text, text.Length);
-                            if (elementPath.Elements.Count > 0)
-                            {
-                                this.PreSelection = charTyped.ToString();
-                                return GetAttributeValueCompletionData(elementPath, attributeName);
-                            }
-                        }
-                    }
-                    break;
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// Finds the schema given the xml element path.
-        /// </summary>
-        public XmlSchemaCompletionData FindSchema(XmlElementPath path)
-        {
-            if (path.Elements.Count > 0)
-            {
-                string namespaceUri = path.Elements[0].Namespace;
-                if (namespaceUri.Length > 0)
-                {
-                    return schemaCompletionDataItems[namespaceUri];
-                }
-                else if (defaultSchemaCompletionData != null)
-                {
-
-                    // Use the default schema namespace if none
-                    // specified in a xml element path, otherwise
-                    // we will not find any attribute or element matches
-                    // later.
-                    foreach (QualifiedName name in path.Elements)
-                    {
-                        if (name.Namespace.Length == 0)
-                        {
-                            name.Namespace = defaultSchemaCompletionData.NamespaceUri;
-                        }
-                    }
-                    return defaultSchemaCompletionData;
-                }
-            }
-            return null;
-        }
-
-        /// <summary>
-        /// Finds the schema given a namespace URI.
-        /// </summary>
-        public XmlSchemaCompletionData FindSchema(string namespaceUri)
-        {
-            return schemaCompletionDataItems[namespaceUri];
-        }
-
-        /// <summary>
-        /// Gets the schema completion data that was created from the specified 
-        /// schema filename.
-        /// </summary>
-        public XmlSchemaCompletionData FindSchemaFromFileName(string fileName)
-        {
-            return schemaCompletionDataItems.GetSchemaFromFileName(fileName);
-        }
-
-        ICompletionData[] GetChildElementCompletionData(XmlElementPath path)
-        {
-            ICompletionData[] completionData = null;
-
-            XmlSchemaCompletionData schema = FindSchema(path);
-            if (schema != null)
-            {
-                completionData = schema.GetChildElementCompletionData(path);
-            }
-
-            return completionData;
-        }
-
-        ICompletionData[] GetAttributeCompletionData(XmlElementPath path)
-        {
-            ICompletionData[] completionData = null;
-
-            XmlSchemaCompletionData schema = FindSchema(path);
-            if (schema != null)
-            {
-                completionData = schema.GetAttributeCompletionData(path);
-            }
-
-            return completionData;
-        }
-
-        ICompletionData[] GetAttributeValueCompletionData(XmlElementPath path, string name)
-        {
-            ICompletionData[] completionData = null;
-
-            XmlSchemaCompletionData schema = FindSchema(path);
-            if (schema != null)
-            {
-                completionData = schema.GetAttributeValueCompletionData(path, name);
-            }
-
-            return completionData;
-        }
-
-        public string PreSelection
-        {
-            get;
-            private set;
-        }
-
-        public int DefaultIndex
-        {
-            get;
-            private set;
-        }
-
-        public bool InsertSpace
-        {
-            get;
-            set;
-        }
-
-        public bool InsertAction(ICompletionData data, ICSharpCode.TextEditor.TextArea textArea, int insertionOffset, char key)
-        {
-            if (InsertSpace)
-            {
-                textArea.Document.Insert(insertionOffset++, " ");
-            }
-            textArea.Caret.Position = textArea.Document.OffsetToPosition(insertionOffset);
-
-            return data.InsertAction(textArea, key);
-        }
-    }
-}

Copied: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataProvider.cs (from rev 7850, trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataProvider.cs)
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataProvider.cs	                        (rev 0)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlCompletionDataProvider.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,265 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
+// Copyright 2002-2010 by
+//
+//  AlphaSierraPapa, Christoph Wille
+//  Vordernberger Strasse 27/8
+//  A-8700 Leoben
+//  Austria
+//
+//  email: office at alphasierrapapa.com
+//  court of jurisdiction: Landesgericht Leoben
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using ICSharpCode.TextEditor;
+using ICSharpCode.TextEditor.Gui.CompletionWindow;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
+{
+    /// <summary>
+    /// Provides the autocomplete (intellisense) data for an
+    /// xml document that specifies a known schema.
+    /// </summary>
+    internal class XmlCompletionDataProvider : ICompletionDataProvider
+    {
+        XmlSchemaCompletionDataCollection schemaCompletionDataItems;
+        XmlSchemaCompletionData defaultSchemaCompletionData;
+        string defaultNamespacePrefix = String.Empty;
+
+        public XmlCompletionDataProvider(XmlSchemaCompletionDataCollection schemaCompletionDataItems, XmlSchemaCompletionData defaultSchemaCompletionData, string defaultNamespacePrefix)
+        {
+            this.schemaCompletionDataItems = schemaCompletionDataItems;
+            this.defaultSchemaCompletionData = defaultSchemaCompletionData;
+            this.defaultNamespacePrefix = defaultNamespacePrefix;
+            DefaultIndex = 0;
+        }
+        
+        static ImageList smImageList;
+
+        public ImageList ImageList
+        {
+            get
+            {
+                if (smImageList == null)
+                {
+                    smImageList = new ImageList();
+                    smImageList.Images.Add(Properties.Resources.document_code);
+                }
+                return smImageList;
+            }
+        }
+
+        /// <summary>
+        /// Overrides the default behaviour and allows special xml
+        /// characters such as '.' and ':' to be used as completion data.
+        /// </summary>
+        public CompletionDataProviderKeyResult ProcessKey(char key)
+        {
+            if (key == '\r' || key == '\t')
+            {
+                return CompletionDataProviderKeyResult.InsertionKey;
+            }
+            return CompletionDataProviderKeyResult.NormalKey;
+        }
+
+        public ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
+        {
+            this.PreSelection = null;
+            string text = String.Concat(textArea.Document.GetText(0, textArea.Caret.Offset), charTyped);
+
+            switch (charTyped)
+            {
+                case '=':
+                    // Namespace intellisense.
+                    if (XmlParser.IsNamespaceDeclaration(text, text.Length))
+                    {
+                        return schemaCompletionDataItems.GetNamespaceCompletionData(); ;
+                    }
+                    break;
+                case '<':
+                    // Child element intellisense.
+                    XmlElementPath parentPath = XmlParser.GetParentElementPath(text);
+                    if (parentPath.Elements.Count > 0)
+                    {
+                        return GetChildElementCompletionData(parentPath);
+                    }
+                    else if (defaultSchemaCompletionData != null)
+                    {
+                        return defaultSchemaCompletionData.GetElementCompletionData(defaultNamespacePrefix);
+                    }
+                    break;
+
+                case ' ':
+                    // Attribute intellisense.
+                    if (!XmlParser.IsInsideAttributeValue(text, text.Length))
+                    {
+                        XmlElementPath path = XmlParser.GetActiveElementStartPath(text, text.Length);
+                        if (path.Elements.Count > 0)
+                        {
+                            return GetAttributeCompletionData(path);
+                        }
+                    }
+                    break;
+
+                default:
+
+                    // Attribute value intellisense.
+                    if (XmlParser.IsAttributeValueChar(charTyped))
+                    {
+                        string attributeName = XmlParser.GetAttributeName(text, text.Length);
+                        if (attributeName.Length > 0)
+                        {
+                            XmlElementPath elementPath = XmlParser.GetActiveElementStartPath(text, text.Length);
+                            if (elementPath.Elements.Count > 0)
+                            {
+                                this.PreSelection = charTyped.ToString();
+                                return GetAttributeValueCompletionData(elementPath, attributeName);
+                            }
+                        }
+                    }
+                    break;
+            }
+
+            return null;
+        }
+
+        /// <summary>
+        /// Finds the schema given the xml element path.
+        /// </summary>
+        public XmlSchemaCompletionData FindSchema(XmlElementPath path)
+        {
+            if (path.Elements.Count > 0)
+            {
+                string namespaceUri = path.Elements[0].Namespace;
+                if (namespaceUri.Length > 0)
+                {
+                    return schemaCompletionDataItems[namespaceUri];
+                }
+                else if (defaultSchemaCompletionData != null)
+                {
+
+                    // Use the default schema namespace if none
+                    // specified in a xml element path, otherwise
+                    // we will not find any attribute or element matches
+                    // later.
+                    foreach (QualifiedName name in path.Elements)
+                    {
+                        if (name.Namespace.Length == 0)
+                        {
+                            name.Namespace = defaultSchemaCompletionData.NamespaceUri;
+                        }
+                    }
+                    return defaultSchemaCompletionData;
+                }
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// Finds the schema given a namespace URI.
+        /// </summary>
+        public XmlSchemaCompletionData FindSchema(string namespaceUri)
+        {
+            return schemaCompletionDataItems[namespaceUri];
+        }
+
+        /// <summary>
+        /// Gets the schema completion data that was created from the specified 
+        /// schema filename.
+        /// </summary>
+        public XmlSchemaCompletionData FindSchemaFromFileName(string fileName)
+        {
+            return schemaCompletionDataItems.GetSchemaFromFileName(fileName);
+        }
+
+        ICompletionData[] GetChildElementCompletionData(XmlElementPath path)
+        {
+            ICompletionData[] completionData = null;
+
+            XmlSchemaCompletionData schema = FindSchema(path);
+            if (schema != null)
+            {
+                completionData = schema.GetChildElementCompletionData(path);
+            }
+
+            return completionData;
+        }
+
+        ICompletionData[] GetAttributeCompletionData(XmlElementPath path)
+        {
+            ICompletionData[] completionData = null;
+
+            XmlSchemaCompletionData schema = FindSchema(path);
+            if (schema != null)
+            {
+                completionData = schema.GetAttributeCompletionData(path);
+            }
+
+            return completionData;
+        }
+
+        ICompletionData[] GetAttributeValueCompletionData(XmlElementPath path, string name)
+        {
+            ICompletionData[] completionData = null;
+
+            XmlSchemaCompletionData schema = FindSchema(path);
+            if (schema != null)
+            {
+                completionData = schema.GetAttributeValueCompletionData(path, name);
+            }
+
+            return completionData;
+        }
+
+        public string PreSelection
+        {
+            get;
+            private set;
+        }
+
+        public int DefaultIndex
+        {
+            get;
+            private set;
+        }
+
+        public bool InsertSpace
+        {
+            get;
+            set;
+        }
+
+        public bool InsertAction(ICompletionData data, ICSharpCode.TextEditor.TextArea textArea, int insertionOffset, char key)
+        {
+            if (InsertSpace)
+            {
+                textArea.Document.Insert(insertionOffset++, " ");
+            }
+            textArea.Caret.Position = textArea.Document.OffsetToPosition(insertionOffset);
+
+            return data.InsertAction(textArea, key);
+        }
+    }
+}

Deleted: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlElementPath.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlElementPath.cs	2013-09-06 17:39:32 UTC (rev 7850)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlElementPath.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,191 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2013, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-// 
-// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
-// Copyright 2002-2010 by
-//
-//  AlphaSierraPapa, Christoph Wille
-//  Vordernberger Strasse 27/8
-//  A-8700 Leoben
-//  Austria
-//
-//  email: office at alphasierrapapa.com
-//  court of jurisdiction: Landesgericht Leoben
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-// 
-#endregion
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
-{
-    /// <summary>
-    /// Represents the path to an xml element starting from the root of the
-    /// document.
-    /// </summary>
-    public class XmlElementPath
-    {
-        QualifiedNameCollection elements = new QualifiedNameCollection();
-
-        public XmlElementPath()
-        {
-        }
-
-        /// <summary>
-        /// Gets the elements specifying the path.
-        /// </summary>
-        /// <remarks>The order of the elements determines the path.</remarks>
-        public QualifiedNameCollection Elements
-        {
-            get { return elements; }
-        }
-
-        /// <summary>
-        /// Compacts the path so it only contains the elements that are from 
-        /// the namespace of the last element in the path. 
-        /// </summary>
-        /// <remarks>This method is used when we need to know the path for a
-        /// particular namespace and do not care about the complete path.
-        /// </remarks>
-        public void Compact()
-        {
-            if (elements.Count > 0)
-            {
-                QualifiedName lastName = Elements[Elements.Count - 1];
-                if (lastName != null)
-                {
-                    int index = FindNonMatchingParentElement(lastName.Namespace);
-                    if (index != -1)
-                    {
-                        RemoveParentElements(index);
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// An xml element path is considered to be equal if 
-        /// each path item has the same name and namespace.
-        /// </summary>
-        public override bool Equals(object obj)
-        {
-            if (!(obj is XmlElementPath)) return false;
-            if (this == obj) return true;
-
-            XmlElementPath rhs = (XmlElementPath)obj;
-            if (elements.Count == rhs.elements.Count)
-            {
-
-                for (int i = 0; i < elements.Count; ++i)
-                {
-                    if (!elements[i].Equals(rhs.elements[i]))
-                    {
-                        return false;
-                    }
-                }
-                return true;
-            }
-
-            return false;
-        }
-
-        public override int GetHashCode()
-        {
-            return elements.GetHashCode();
-        }
-
-
-        /// <summary>
-        /// Gets a string that represents the XmlElementPath.
-        /// </summary>
-        public override string ToString()
-        {
-            if (elements.Count > 0)
-            {
-                StringBuilder toString = new StringBuilder();
-                int lastIndex = elements.Count - 1;
-                for (int i = 0; i < elements.Count; ++i)
-                {
-                    string elementToString = GetElementToString(elements[i]);
-                    if (i == lastIndex)
-                    {
-                        toString.Append(elementToString);
-                    }
-                    else
-                    {
-                        toString.Append(elementToString);
-                        toString.Append(" > ");
-                    }
-                }
-                return toString.ToString();
-            }
-            return String.Empty;
-        }
-
-        /// <summary>
-        /// Removes elements up to and including the specified index.
-        /// </summary>
-        void RemoveParentElements(int index)
-        {
-            while (index >= 0)
-            {
-                --index;
-                elements.RemoveFirst();
-            }
-        }
-
-        /// <summary>
-        /// Finds the first parent that does belong in the specified
-        /// namespace.
-        /// </summary>
-        int FindNonMatchingParentElement(string namespaceUri)
-        {
-            int index = -1;
-
-            if (elements.Count > 1)
-            {
-                // Start the check from the the last but one item.
-                for (int i = elements.Count - 2; i >= 0; --i)
-                {
-                    QualifiedName name = elements[i];
-                    if (name.Namespace != namespaceUri)
-                    {
-                        index = i;
-                        break;
-                    }
-                }
-            }
-            return index;
-        }
-
-        /// <summary>
-        /// Returns the qualified name as a string. If the name has a 
-        /// prefix then it returns "prefix:element" otherwise it returns
-        /// just the element name.
-        /// </summary>
-        static string GetElementToString(QualifiedName name)
-        {
-            if (name.Prefix.Length > 0)
-            {
-                return name.Prefix + ":" + name.Name;
-            }
-            return name.Name;
-        }
-    }
-}

Copied: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlElementPath.cs (from rev 7850, trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlElementPath.cs)
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlElementPath.cs	                        (rev 0)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlElementPath.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,191 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
+// Copyright 2002-2010 by
+//
+//  AlphaSierraPapa, Christoph Wille
+//  Vordernberger Strasse 27/8
+//  A-8700 Leoben
+//  Austria
+//
+//  email: office at alphasierrapapa.com
+//  court of jurisdiction: Landesgericht Leoben
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
+{
+    /// <summary>
+    /// Represents the path to an xml element starting from the root of the
+    /// document.
+    /// </summary>
+    public class XmlElementPath
+    {
+        QualifiedNameCollection elements = new QualifiedNameCollection();
+
+        public XmlElementPath()
+        {
+        }
+
+        /// <summary>
+        /// Gets the elements specifying the path.
+        /// </summary>
+        /// <remarks>The order of the elements determines the path.</remarks>
+        public QualifiedNameCollection Elements
+        {
+            get { return elements; }
+        }
+
+        /// <summary>
+        /// Compacts the path so it only contains the elements that are from 
+        /// the namespace of the last element in the path. 
+        /// </summary>
+        /// <remarks>This method is used when we need to know the path for a
+        /// particular namespace and do not care about the complete path.
+        /// </remarks>
+        public void Compact()
+        {
+            if (elements.Count > 0)
+            {
+                QualifiedName lastName = Elements[Elements.Count - 1];
+                if (lastName != null)
+                {
+                    int index = FindNonMatchingParentElement(lastName.Namespace);
+                    if (index != -1)
+                    {
+                        RemoveParentElements(index);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// An xml element path is considered to be equal if 
+        /// each path item has the same name and namespace.
+        /// </summary>
+        public override bool Equals(object obj)
+        {
+            if (!(obj is XmlElementPath)) return false;
+            if (this == obj) return true;
+
+            XmlElementPath rhs = (XmlElementPath)obj;
+            if (elements.Count == rhs.elements.Count)
+            {
+
+                for (int i = 0; i < elements.Count; ++i)
+                {
+                    if (!elements[i].Equals(rhs.elements[i]))
+                    {
+                        return false;
+                    }
+                }
+                return true;
+            }
+
+            return false;
+        }
+
+        public override int GetHashCode()
+        {
+            return elements.GetHashCode();
+        }
+
+
+        /// <summary>
+        /// Gets a string that represents the XmlElementPath.
+        /// </summary>
+        public override string ToString()
+        {
+            if (elements.Count > 0)
+            {
+                StringBuilder toString = new StringBuilder();
+                int lastIndex = elements.Count - 1;
+                for (int i = 0; i < elements.Count; ++i)
+                {
+                    string elementToString = GetElementToString(elements[i]);
+                    if (i == lastIndex)
+                    {
+                        toString.Append(elementToString);
+                    }
+                    else
+                    {
+                        toString.Append(elementToString);
+                        toString.Append(" > ");
+                    }
+                }
+                return toString.ToString();
+            }
+            return String.Empty;
+        }
+
+        /// <summary>
+        /// Removes elements up to and including the specified index.
+        /// </summary>
+        void RemoveParentElements(int index)
+        {
+            while (index >= 0)
+            {
+                --index;
+                elements.RemoveFirst();
+            }
+        }
+
+        /// <summary>
+        /// Finds the first parent that does belong in the specified
+        /// namespace.
+        /// </summary>
+        int FindNonMatchingParentElement(string namespaceUri)
+        {
+            int index = -1;
+
+            if (elements.Count > 1)
+            {
+                // Start the check from the the last but one item.
+                for (int i = elements.Count - 2; i >= 0; --i)
+                {
+                    QualifiedName name = elements[i];
+                    if (name.Namespace != namespaceUri)
+                    {
+                        index = i;
+                        break;
+                    }
+                }
+            }
+            return index;
+        }
+
+        /// <summary>
+        /// Returns the qualified name as a string. If the name has a 
+        /// prefix then it returns "prefix:element" otherwise it returns
+        /// just the element name.
+        /// </summary>
+        static string GetElementToString(QualifiedName name)
+        {
+            if (name.Prefix.Length > 0)
+            {
+                return name.Prefix + ":" + name.Name;
+            }
+            return name.Name;
+        }
+    }
+}

Deleted: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlParser.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlParser.cs	2013-09-06 17:39:32 UTC (rev 7850)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlParser.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,942 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2013, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-// 
-// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
-// Copyright 2002-2010 by
-//
-//  AlphaSierraPapa, Christoph Wille
-//  Vordernberger Strasse 27/8
-//  A-8700 Leoben
-//  Austria
-//
-//  email: office at alphasierrapapa.com
-//  court of jurisdiction: Landesgericht Leoben
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-// 
-#endregion
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Xml;
-
-namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
-{
-    /// <summary>
-    /// Utility class that contains xml parsing routines used to determine
-    /// the currently selected element so we can provide intellisense.
-    /// </summary>
-    /// <remarks>
-    /// All of the routines return <see cref="XmlElementPath"/> objects
-    /// since we are interested in the complete path or tree to the
-    /// currently active element.
-    /// </remarks>
-    internal class XmlParser
-    {
-        /// <summary>
-        /// Helper class.  Holds the namespace URI and the prefix currently
-        /// in use for this namespace.
-        /// </summary>
-        class NamespaceURI
-        {
-            string namespaceURI = String.Empty;
-            string prefix = String.Empty;
-
-            public NamespaceURI()
-            {
-            }
-
-            public NamespaceURI(string namespaceURI, string prefix)
-            {
-                this.namespaceURI = namespaceURI;
-                this.prefix = prefix;
-            }
-
-            public string Namespace
-            {
-                get { return namespaceURI; }
-                set { namespaceURI = value; }
-            }
-
-            public string Prefix
-            {
-                get { return prefix; }
-                set
-                {
-                    prefix = value;
-                    if (prefix == null)
-                    {
-                        prefix = String.Empty;
-                    }
-                }
-            }
-
-            public override string ToString()
-            {
-                if (!String.IsNullOrEmpty(prefix))
-                {
-                    return prefix + ":" + namespaceURI;
-                }
-                return namespaceURI;
-            }
-        }
-
-        static readonly char[] whitespaceCharacters = new char[] { ' ', '\n', '\t', '\r' };
-
-        XmlParser()
-        {
-        }
-
-        /// <summary>
-        /// Gets path of the xml element start tag that the specified
-        /// <paramref name="index"/> is currently inside.
-        /// </summary>
-        /// <remarks>If the index outside the start tag then an empty path
-        /// is returned.</remarks>
-        public static XmlElementPath GetActiveElementStartPath(string xml, int index)
-        {
-            QualifiedNameCollection namespaces = new QualifiedNameCollection();
-            return GetActiveElementStartPath(xml, index, namespaces);
-        }
-
-        /// <summary>
-        /// Gets path of the xml element start tag that the specified
-        /// <paramref name="index"/> is currently located. This is different to the
-        /// GetActiveElementStartPath method since the index can be inside the element
-        /// name.
-        /// </summary>
-        /// <remarks>If the index outside the start tag then an empty path
-        /// is returned.</remarks>
-        public static XmlElementPath GetActiveElementStartPathAtIndex(string xml, int index)
-        {
-            QualifiedNameCollection namespaces = new QualifiedNameCollection();
-            return GetActiveElementStartPathAtIndex(xml, index, namespaces);
-        }
-
-        /// <summary>
-        /// Gets the parent element path based on the index position.
-        /// </summary>
-        public static XmlElementPath GetParentElementPath(string xml)
-        {
-            QualifiedNameCollection namespaces = new QualifiedNameCollection();
-            XmlElementPath path = GetFullParentElementPath(xml, namespaces);
-            path.Compact();
-            return path;
-        }
-
-        /// <summary>
-        /// Checks whether the attribute at the end of the string is a
-        /// namespace declaration.
-        /// </summary>
-        public static bool IsNamespaceDeclaration(string xml, int index)
-        {
-            if (String.IsNullOrEmpty(xml))
-            {
-                return false;
-            }
-
-            index = GetCorrectedIndex(xml.Length, index);
-
-            // Move back one character if the last character is an '='
-            if (xml[index] == '=')
-            {
-                xml = xml.Substring(0, xml.Length - 1);
-                --index;
-            }
-
-            // From the end of the string work backwards until we have
-            // picked out the last attribute and reached some whitespace.
-            StringBuilder reversedAttributeName = new StringBuilder();
-
-            bool ignoreWhitespace = true;
-            int currentIndex = index;
-            for (int i = 0; i < index; ++i)
-            {
-
-                char currentChar = xml[currentIndex];
-
-                if (Char.IsWhiteSpace(currentChar))
-                {
-                    if (ignoreWhitespace == false)
-                    {
-                        // Reached the start of the attribute name.
-                        break;
-                    }
-                }
-                else if (Char.IsLetterOrDigit(currentChar) || (currentChar == ':'))
-                {
-                    ignoreWhitespace = false;
-                    reversedAttributeName.Append(currentChar);
-                }
-                else
-                {
-                    // Invalid string.
-                    break;
-                }
-
-                --currentIndex;
-            }
-
-            // Did we get a namespace?
-
-            bool isNamespace = false;
-
-            if ((reversedAttributeName.ToString() == "snlmx") || (reversedAttributeName.ToString().EndsWith(":snlmx")))
-            {
-                isNamespace = true;
-            }
-
-            return isNamespace;
-        }
-
-        /// <summary>
-        /// Gets the attribute name and any prefix. The namespace
-        /// is not determined.
-        /// </summary>
-        /// <returns><see langword="null"/> if no attribute name can
-        /// be found.</returns>
-        public static QualifiedName GetQualifiedAttributeName(string xml, int index)
-        {
-            string name = GetAttributeName(xml, index);
-            return GetQualifiedName(name);
-        }
-
-        /// <summary>
-        /// Gets the name of the attribute inside but before the specified
-        /// index.
-        /// </summary>
-        public static string GetAttributeName(string xml, int index)
-        {
-            if (String.IsNullOrEmpty(xml))
-            {
-                return String.Empty;
-            }
-
-            index = GetCorrectedIndex(xml.Length, index);
-            return GetAttributeName(xml, index, true, true, true);
-        }
-
-        /// <summary>
-        /// Gets the name of the attribute and its prefix at the specified index. The index
-        /// can be anywhere inside the attribute name or in the attribute value.
-        /// The namespace for the element containing the attribute will also be determined
-        /// if the includeNamespace flag is set to true.
-        /// </summary>
-        public static QualifiedName GetQualifiedAttributeNameAtIndex(string xml, int index, bool includeNamespace)
-        {
-            string name = GetAttributeNameAtIndex(xml, index);
-            QualifiedName qualifiedName = GetQualifiedName(name);
-            if (qualifiedName != null && String.IsNullOrEmpty(qualifiedName.Namespace) && includeNamespace)
-            {
-                QualifiedNameCollection namespaces = new QualifiedNameCollection();
-                XmlElementPath path = GetActiveElementStartPathAtIndex(xml, index, namespaces);
-                qualifiedName.Namespace = GetNamespaceForPrefix(namespaces, path.Elements.LastPrefix);
-            }
-            return qualifiedName;
-        }
-
-        /// <summary>
-        /// Gets the name of the attribute and its prefix at the specified index. The index
-        /// can be anywhere inside the attribute name or in the attribute value.
-        /// </summary>
-        public static QualifiedName GetQualifiedAttributeNameAtIndex(string xml, int index)
-        {
-            return GetQualifiedAttributeNameAtIndex(xml, index, false);
-        }
-
-        /// <summary>
-        /// Gets the name of the attribute at the specified index. The index
-        /// can be anywhere inside the attribute name or in the attribute value.
-        /// </summary>
-        public static string GetAttributeNameAtIndex(string xml, int index)
-        {
-            if (String.IsNullOrEmpty(xml))
-            {
-                return String.Empty;
-            }
-
-            index = GetCorrectedIndex(xml.Length, index);
-
-            bool ignoreWhitespace = true;
-            bool ignoreEqualsSign = false;
-            bool ignoreQuote = false;
-
-            if (IsInsideAttributeValue(xml, index))
-            {
-                // Find attribute name start.
-                int elementStartIndex = GetActiveElementStartIndex(xml, index);
-                if (elementStartIndex == -1)
-                {
-                    return String.Empty;
-                }
-
-                // Find equals sign.
-                for (int i = index; i > elementStartIndex; --i)
-                {
-                    char ch = xml[i];
-                    if (ch == '=')
-                    {
-                        index = i;
-                        ignoreEqualsSign = true;
-                        break;
-                    }
-                }
-            }
-            else
-            {
-                // Find end of attribute name.
-                for (; index < xml.Length; ++index)
-                {
-                    char ch = xml[index];
-                    if (!IsXmlNameChar(ch))
-                    {
-                        if (ch == '\'' || ch == '\"')
-                        {
-                            ignoreQuote = true;
-                            ignoreEqualsSign = true;
-                        }
-                        break;
-                    }
-                }
-                --index;
-            }
-
-            return GetAttributeName(xml, index, ignoreWhitespace, ignoreQuote, ignoreEqualsSign);
-        }
-
-        /// <summary>
-        /// Checks for valid xml attribute value character
-        /// </summary>
-        public static bool IsAttributeValueChar(char ch)
-        {
-            if ((ch == '<') ||
-                (ch == '>'))
-            {
-                return false;
-            }
-
-            return true;
-        }
-
-        /// <summary>
-        /// Checks for valid xml element or attribute name character.
-        /// </summary>
-        public static bool IsXmlNameChar(char ch)
-        {
-            if (Char.IsLetterOrDigit(ch) ||
-                (ch == ':') ||
-                (ch == '/') ||
-                (ch == '_') ||
-                (ch == '.') ||
-                (ch == '-'))
-            {
-                return true;
-            }
-
-            return false;
-        }
-
-        /// <summary>
-        /// Determines whether the specified index is inside an attribute value.
-        /// </summary>
-        public static bool IsInsideAttributeValue(string xml, int index)
-        {
-            if (String.IsNullOrEmpty(xml))
-            {
-                return false;
-            }
-
-            if (index > xml.Length)
-            {
-                index = xml.Length;
-            }
-
-            int elementStartIndex = GetActiveElementStartIndex(xml, index);
-            if (elementStartIndex == -1)
-            {
-                return false;
-            }
-
-            // Count the number of double quotes and single quotes that exist
-            // before the first equals sign encountered going backwards to
-            // the start of the active element.
-            bool foundEqualsSign = false;
-            int doubleQuotesCount = 0;
-            int singleQuotesCount = 0;
-            char lastQuoteChar = ' ';
-            for (int i = index - 1; i > elementStartIndex; --i)
-            {
-                char ch = xml[i];
-                if (ch == '=')
-                {
-                    foundEqualsSign = true;
-                    break;
-                }
-                else if (ch == '\"')
-                {
-                    lastQuoteChar = ch;
-                    ++doubleQuotesCount;
-                }
-                else if (ch == '\'')
-                {
-                    lastQuoteChar = ch;
-                    ++singleQuotesCount;
-                }
-            }
-
-            bool isInside = false;
-
-            if (foundEqualsSign)
-            {
-                // Odd number of quotes?
-                if ((lastQuoteChar == '\"') && ((doubleQuotesCount % 2) > 0))
-                {
-                    isInside = true;
-                }
-                else if ((lastQuoteChar == '\'') && ((singleQuotesCount % 2) > 0))
-                {
-                    isInside = true;
-                }
-            }
-
-            return isInside;
-        }
-
-        /// <summary>
-        /// Gets the attribute value at the specified index.
-        /// </summary>
-        /// <returns>An empty string if no attribute value can be found.</returns>
-        public static string GetAttributeValueAtIndex(string xml, int index)
-        {
-            if (!IsInsideAttributeValue(xml, index))
-            {
-                return String.Empty;
-            }
-
-            index = GetCorrectedIndex(xml.Length, index);
-
-            int elementStartIndex = GetActiveElementStartIndex(xml, index);
-            if (elementStartIndex == -1)
-            {
-                return String.Empty;
-            }
-
-            // Find equals sign.
-            int equalsSignIndex = -1;
-            for (int i = index; i > elementStartIndex; --i)
-            {
-                char ch = xml[i];
-                if (ch == '=')
-                {
-                    equalsSignIndex = i;
-                    break;
-                }
-            }
-
-            if (equalsSignIndex == -1)
-            {
-                return String.Empty;
-            }
-
-            // Find attribute value.
-            char quoteChar = ' ';
-            bool foundQuoteChar = false;
-            StringBuilder attributeValue = new StringBuilder();
-            for (int i = equalsSignIndex; i < xml.Length; ++i)
-            {
-                char ch = xml[i];
-                if (!foundQuoteChar)
-                {
-                    if (ch == '\"' || ch == '\'')
-                    {
-                        quoteChar = ch;
-                        foundQuoteChar = true;
-                    }
-                }
-                else
-                {
-                    if (ch == quoteChar)
-                    {
-                        // End of attribute value.
-                        return attributeValue.ToString();
-                    }
-                    else if (IsAttributeValueChar(ch) || (ch == '\"' || ch == '\''))
-                    {
-                        attributeValue.Append(ch);
-                    }
-                    else
-                    {
-                        // Invalid character found.
-                        return String.Empty;
-                    }
-                }
-            }
-
-            return String.Empty;
-        }
-
-        /// <summary>
-        /// Gets the text of the xml element start tag that the index is
-        /// currently inside.
-        /// </summary>
-        /// <returns>
-        /// Returns the text up to and including the start tag < character.
-        /// </returns>
-        static string GetActiveElementStartText(string xml, int index)
-        {
-            int elementStartIndex = GetActiveElementStartIndex(xml, index);
-            if (elementStartIndex >= 0)
-            {
-                if (elementStartIndex < index)
-                {
-                    int elementEndIndex = GetActiveElementEndIndex(xml, index);
-                    if (elementEndIndex >= index)
-                    {
-                        return xml.Substring(elementStartIndex, elementEndIndex - elementStartIndex);
-                    }
-                }
-            }
-            return null;
-        }
-
-        /// <summary>
-        /// Locates the index of the start tag < character.
-        /// </summary>
-        /// <returns>
-        /// Returns the index of the start tag character; otherwise
-        /// -1 if no start tag character is found or a end tag
-        /// > character is found first.
-        /// </returns>
-        static int GetActiveElementStartIndex(string xml, int index)
-        {
-            int elementStartIndex = -1;
-
-            int currentIndex = index - 1;
-
-            for (int i = 0; i < index; ++i)
-            {
-
-                char currentChar = xml[currentIndex];
-                if (currentChar == '<')
-                {
-                    elementStartIndex = currentIndex;
-                    break;
-                }
-                else if (currentChar == '>')
-                {
-                    break;
-                }
-
-                --currentIndex;
-            }
-
-            return elementStartIndex;
-        }
-
-        /// <summary>
-        /// Locates the index of the end tag character.
-        /// </summary>
-        /// <returns>
-        /// Returns the index of the end tag character; otherwise
-        /// -1 if no end tag character is found or a start tag
-        /// character is found first.
-        /// </returns>
-        static int GetActiveElementEndIndex(string xml, int index)
-        {
-            int elementEndIndex = index;
-
-            for (int i = index; i < xml.Length; ++i)
-            {
-
-                char currentChar = xml[i];
-                if (currentChar == '>')
-                {
-                    elementEndIndex = i;
-                    break;
-                }
-                else if (currentChar == '<')
-                {
-                    elementEndIndex = -1;
-                    break;
-                }
-            }
-
-            return elementEndIndex;
-        }
-
-        /// <summary>
-        /// Gets the element name from the element start tag string.
-        /// </summary>
-        /// <param name="xml">This string must start at the
-        /// element we are interested in.</param>
-        static QualifiedName GetElementName(string xml)
-        {
-            string name = String.Empty;
-
-            // Find the end of the element name.
-            xml = xml.Replace("\r\n", " ");
-            int index = xml.IndexOf(' ');
-            if (index > 0)
-            {
-                name = xml.Substring(1, index - 1);
-            }
-            else
-            {
-                name = xml.Substring(1);
-            }
-
-            return GetQualifiedName(name);
-        }
-
-        /// <summary>
-        /// Gets the element namespace from the element start tag
-        /// string.
-        /// </summary>
-        /// <param name="xml">This string must start at the
-        /// element we are interested in.</param>
-        static NamespaceURI GetElementNamespace(string xml)
-        {
-            NamespaceURI namespaceURI = new NamespaceURI();
-
-            Match match = Regex.Match(xml, ".*?(xmlns\\s*?|xmlns:.*?)=\\s*?['\\\"](.*?)['\\\"]");
-            if (match.Success)
-            {
-                namespaceURI.Namespace = match.Groups[2].Value;
-
-                string xmlns = match.Groups[1].Value.Trim();
-                int prefixIndex = xmlns.IndexOf(':');
-                if (prefixIndex > 0)
-                {
-                    namespaceURI.Prefix = xmlns.Substring(prefixIndex + 1);
-                }
-            }
-
-            return namespaceURI;
-        }
-
-        static string ReverseString(string text)
-        {
-            StringBuilder reversedString = new StringBuilder(text);
-
-            int index = text.Length;
-            foreach (char ch in text)
-            {
-                --index;
-                reversedString[index] = ch;
-            }
-
-            return reversedString.ToString();
-        }
-
-        /// <summary>
-        /// Ensures that the index is on the last character if it is
-        /// too large.
-        /// </summary>
-        /// <param name="length">The length of the string.</param>
-        /// <param name="index">The current index.</param>
-        /// <returns>The index unchanged if the index is smaller than the
-        /// length of the string; otherwise it returns length - 1.</returns>
-        static int GetCorrectedIndex(int length, int index)
-        {
-            if (index >= length)
-            {
-                index = length - 1;
-            }
-            return index;
-        }
-
-        /// <summary>
-        /// Gets the active element path given the element text.
-        /// </summary>
-        static XmlElementPath GetActiveElementStartPath(string xml, int index, string elementText, QualifiedNameCollection namespaces)
-        {
-            QualifiedName elementName = GetElementName(elementText);
-            if (elementName == null)
-            {
-                return new XmlElementPath();
-            }
-
-            NamespaceURI elementNamespace = GetElementNamespace(elementText);
-
-            XmlElementPath path = GetFullParentElementPath(xml.Substring(0, index), namespaces);
-
-            // Try to get a namespace for the active element's prefix.
-            if (elementName.Prefix.Length > 0 && elementNamespace.Namespace.Length == 0)
-            {
-                elementName.Namespace = GetNamespaceForPrefix(namespaces, elementName.Prefix);
-                elementNamespace.Namespace = elementName.Namespace;
-                elementNamespace.Prefix = elementName.Prefix;
-            }
-
-            if (elementNamespace.Namespace.Length == 0)
-            {
-                if (path.Elements.Count > 0)
-                {
-                    QualifiedName parentName = path.Elements[path.Elements.Count - 1];
-                    elementNamespace.Namespace = parentName.Namespace;
-                    elementNamespace.Prefix = parentName.Prefix;
-                }
-            }
-            path.Elements.Add(new QualifiedName(elementName.Name, elementNamespace.Namespace, elementNamespace.Prefix));
-            path.Compact();
-            return path;
-        }
-
-        static string GetAttributeName(string xml, int index, bool ignoreWhitespace, bool ignoreQuote, bool ignoreEqualsSign)
-        {
-            string name = String.Empty;
-
-            // From the end of the string work backwards until we have
-            // picked out the attribute name.
-            StringBuilder reversedAttributeName = new StringBuilder();
-
-            int currentIndex = index;
-            bool invalidString = true;
-
-            for (int i = 0; i <= index; ++i)
-            {
-
-                char currentChar = xml[currentIndex];
-
-                if (IsXmlNameChar(currentChar))
-                {
-                    if (!ignoreEqualsSign)
-                    {
-                        ignoreWhitespace = false;
-                        reversedAttributeName.Append(currentChar);
-                    }
-                }
-                else if (Char.IsWhiteSpace(currentChar))
-                {
-                    if (ignoreWhitespace == false)
-                    {
-                        // Reached the start of the attribute name.
-                        invalidString = false;
-                        break;
-                    }
-                }
-                else if ((currentChar == '\'') || (currentChar == '\"'))
-                {
-                    if (ignoreQuote)
-                    {
-                        ignoreQuote = false;
-                    }
-                    else
-                    {
-                        break;
-                    }
-                }
-                else if (currentChar == '=')
-                {
-                    if (ignoreEqualsSign)
-                    {
-                        ignoreEqualsSign = false;
-                    }
-                    else
-                    {
-                        break;
-                    }
-                }
-                else if (IsAttributeValueChar(currentChar))
-                {
-                    if (!ignoreQuote)
-                    {
-                        break;
-                    }
-                }
-                else
-                {
-                    break;
-                }
-
-                --currentIndex;
-            }
-
-            if (!invalidString)
-            {
-                name = ReverseString(reversedAttributeName.ToString());
-            }
-
-            return name;
-        }
-
-        /// <summary>
-        /// Gets the element name at the specified index.
-        /// </summary>
-        static string GetElementNameAtIndex(string xml, int index)
-        {
-            int elementStartIndex = GetActiveElementStartIndex(xml, index);
-            if (elementStartIndex >= 0 && elementStartIndex < index)
-            {
-                int elementEndIndex = GetActiveElementEndIndex(xml, index);
-                if (elementEndIndex == -1)
-                {
-                    elementEndIndex = xml.IndexOfAny(whitespaceCharacters, elementStartIndex);
-                }
-                if (elementEndIndex >= elementStartIndex)
-                {
-                    return xml.Substring(elementStartIndex, elementEndIndex - elementStartIndex);
-                }
-            }
-            return null;
-        }
-
-        /// <summary>
-        /// Returns a name and its prefix.
-        /// </summary>
-        static QualifiedName GetQualifiedName(string name)
-        {
-            if (name.Length == 0)
-            {
-                return null;
-            }
-
-            QualifiedName qualifiedName = new QualifiedName();
-            int prefixIndex = name.IndexOf(':');
-            if (prefixIndex > 0)
-            {
-                qualifiedName.Prefix = name.Substring(0, prefixIndex);
-                qualifiedName.Name = name.Substring(prefixIndex + 1);
-            }
-            else
-            {
-                qualifiedName.Name = name;
-            }
-            return qualifiedName;
-        }
-
-        /// <summary>
-        /// Gets the parent element path based on the index position. This
-        /// method does not compact the path so it will include all elements
-        /// including those in another namespace in the path.
-        /// </summary>
-        static XmlElementPath GetFullParentElementPath(string xml, QualifiedNameCollection namespaces)
-        {
-            XmlElementPath path = new XmlElementPath();
-            IDictionary<string, string> namespacesInScope = null;
-            using (StringReader reader = new StringReader(xml))
-            {
-                using (XmlTextReader xmlReader = new XmlTextReader(reader))
-                {
-                    try
-                    {
-                        xmlReader.XmlResolver = null; // prevent XmlTextReader from loading external DTDs
-                        while (xmlReader.Read())
-                        {
-                            switch (xmlReader.NodeType)
-                            {
-                                case XmlNodeType.Element:
-                                    if (!xmlReader.IsEmptyElement)
-                                    {
-                                        QualifiedName elementName = new QualifiedName(xmlReader.LocalName, xmlReader.NamespaceURI, xmlReader.Prefix);
-                                        path.Elements.Add(elementName);
-                                    }
-                                    break;
-                                case XmlNodeType.EndElement:
-                                    path.Elements.RemoveLast();
-                                    break;
-                            }
-                        }
-                    }
-                    catch (XmlException)
-                    {
-                        namespacesInScope = xmlReader.GetNamespacesInScope(XmlNamespaceScope.All);
-                    }
-                }
-            }
-
-            // Add namespaces in scope for the last element read.
-            if (namespacesInScope != null)
-            {
-                foreach (KeyValuePair<string, string> ns in namespacesInScope)
-                {
-                    namespaces.Add(new QualifiedName(String.Empty, ns.Value, ns.Key));
-                }
-            }
-
-            return path;
-        }
-
-        /// <summary>
-        /// Finds the namespace for the specified prefix.
-        /// </summary>
-        static string GetNamespaceForPrefix(QualifiedNameCollection namespaces, string prefix)
-        {
-            foreach (QualifiedName name in namespaces)
-            {
-                if (name.Prefix == prefix)
-                {
-                    return name.Namespace;
-                }
-            }
-            return String.Empty;
-        }
-
-        /// <summary>
-        /// Gets path of the xml element start tag that the specified
-        /// <paramref name="index"/> is currently inside.
-        /// </summary>
-        /// <remarks>If the index outside the start tag then an empty path
-        /// is returned.</remarks>
-        /// <param name="namespaces">Returns the namespaces that are
-        /// exist in the xml.</param>
-        static XmlElementPath GetActiveElementStartPath(string xml, int index, QualifiedNameCollection namespaces)
-        {
-            XmlElementPath path = new XmlElementPath();
-            string elementText = GetActiveElementStartText(xml, index);
-            if (elementText != null)
-            {
-                path = GetActiveElementStartPath(xml, index, elementText, namespaces);
-            }
-            return path;
-        }
-
-        /// <summary>
-        /// Gets path of the xml element start tag that the specified
-        /// <paramref name="index"/> is currently located. This is different to the
-        /// GetActiveElementStartPath method since the index can be inside the element
-        /// name.
-        /// </summary>
-        /// <remarks>If the index outside the start tag then an empty path
-        /// is returned.</remarks>
-        static XmlElementPath GetActiveElementStartPathAtIndex(string xml, int index, QualifiedNameCollection namespaces)
-        {
-            // Find first non xml element name character to the right of the index.
-            index = GetCorrectedIndex(xml.Length, index);
-            if (index < 0) // can happen when xml.Length==0
-                return new XmlElementPath();
-            int currentIndex = index;
-            for (; currentIndex < xml.Length; ++currentIndex)
-            {
-                char ch = xml[currentIndex];
-                if (!IsXmlNameChar(ch))
-                {
-                    break;
-                }
-            }
-
-            string elementText = GetElementNameAtIndex(xml, currentIndex);
-            if (elementText != null)
-            {
-                return GetActiveElementStartPath(xml, currentIndex, elementText, namespaces);
-            }
-            return new XmlElementPath();
-        }
-    }
-}

Copied: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlParser.cs (from rev 7850, trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlParser.cs)
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlParser.cs	                        (rev 0)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlParser.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,942 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
+// Copyright 2002-2010 by
+//
+//  AlphaSierraPapa, Christoph Wille
+//  Vordernberger Strasse 27/8
+//  A-8700 Leoben
+//  Austria
+//
+//  email: office at alphasierrapapa.com
+//  court of jurisdiction: Landesgericht Leoben
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Xml;
+
+namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
+{
+    /// <summary>
+    /// Utility class that contains xml parsing routines used to determine
+    /// the currently selected element so we can provide intellisense.
+    /// </summary>
+    /// <remarks>
+    /// All of the routines return <see cref="XmlElementPath"/> objects
+    /// since we are interested in the complete path or tree to the
+    /// currently active element.
+    /// </remarks>
+    internal class XmlParser
+    {
+        /// <summary>
+        /// Helper class.  Holds the namespace URI and the prefix currently
+        /// in use for this namespace.
+        /// </summary>
+        class NamespaceURI
+        {
+            string namespaceURI = String.Empty;
+            string prefix = String.Empty;
+
+            public NamespaceURI()
+            {
+            }
+
+            public NamespaceURI(string namespaceURI, string prefix)
+            {
+                this.namespaceURI = namespaceURI;
+                this.prefix = prefix;
+            }
+
+            public string Namespace
+            {
+                get { return namespaceURI; }
+                set { namespaceURI = value; }
+            }
+
+            public string Prefix
+            {
+                get { return prefix; }
+                set
+                {
+                    prefix = value;
+                    if (prefix == null)
+                    {
+                        prefix = String.Empty;
+                    }
+                }
+            }
+
+            public override string ToString()
+            {
+                if (!String.IsNullOrEmpty(prefix))
+                {
+                    return prefix + ":" + namespaceURI;
+                }
+                return namespaceURI;
+            }
+        }
+
+        static readonly char[] whitespaceCharacters = new char[] { ' ', '\n', '\t', '\r' };
+
+        XmlParser()
+        {
+        }
+
+        /// <summary>
+        /// Gets path of the xml element start tag that the specified
+        /// <paramref name="index"/> is currently inside.
+        /// </summary>
+        /// <remarks>If the index outside the start tag then an empty path
+        /// is returned.</remarks>
+        public static XmlElementPath GetActiveElementStartPath(string xml, int index)
+        {
+            QualifiedNameCollection namespaces = new QualifiedNameCollection();
+            return GetActiveElementStartPath(xml, index, namespaces);
+        }
+
+        /// <summary>
+        /// Gets path of the xml element start tag that the specified
+        /// <paramref name="index"/> is currently located. This is different to the
+        /// GetActiveElementStartPath method since the index can be inside the element
+        /// name.
+        /// </summary>
+        /// <remarks>If the index outside the start tag then an empty path
+        /// is returned.</remarks>
+        public static XmlElementPath GetActiveElementStartPathAtIndex(string xml, int index)
+        {
+            QualifiedNameCollection namespaces = new QualifiedNameCollection();
+            return GetActiveElementStartPathAtIndex(xml, index, namespaces);
+        }
+
+        /// <summary>
+        /// Gets the parent element path based on the index position.
+        /// </summary>
+        public static XmlElementPath GetParentElementPath(string xml)
+        {
+            QualifiedNameCollection namespaces = new QualifiedNameCollection();
+            XmlElementPath path = GetFullParentElementPath(xml, namespaces);
+            path.Compact();
+            return path;
+        }
+
+        /// <summary>
+        /// Checks whether the attribute at the end of the string is a
+        /// namespace declaration.
+        /// </summary>
+        public static bool IsNamespaceDeclaration(string xml, int index)
+        {
+            if (String.IsNullOrEmpty(xml))
+            {
+                return false;
+            }
+
+            index = GetCorrectedIndex(xml.Length, index);
+
+            // Move back one character if the last character is an '='
+            if (xml[index] == '=')
+            {
+                xml = xml.Substring(0, xml.Length - 1);
+                --index;
+            }
+
+            // From the end of the string work backwards until we have
+            // picked out the last attribute and reached some whitespace.
+            StringBuilder reversedAttributeName = new StringBuilder();
+
+            bool ignoreWhitespace = true;
+            int currentIndex = index;
+            for (int i = 0; i < index; ++i)
+            {
+
+                char currentChar = xml[currentIndex];
+
+                if (Char.IsWhiteSpace(currentChar))
+                {
+                    if (ignoreWhitespace == false)
+                    {
+                        // Reached the start of the attribute name.
+                        break;
+                    }
+                }
+                else if (Char.IsLetterOrDigit(currentChar) || (currentChar == ':'))
+                {
+                    ignoreWhitespace = false;
+                    reversedAttributeName.Append(currentChar);
+                }
+                else
+                {
+                    // Invalid string.
+                    break;
+                }
+
+                --currentIndex;
+            }
+
+            // Did we get a namespace?
+
+            bool isNamespace = false;
+
+            if ((reversedAttributeName.ToString() == "snlmx") || (reversedAttributeName.ToString().EndsWith(":snlmx")))
+            {
+                isNamespace = true;
+            }
+
+            return isNamespace;
+        }
+
+        /// <summary>
+        /// Gets the attribute name and any prefix. The namespace
+        /// is not determined.
+        /// </summary>
+        /// <returns><see langword="null"/> if no attribute name can
+        /// be found.</returns>
+        public static QualifiedName GetQualifiedAttributeName(string xml, int index)
+        {
+            string name = GetAttributeName(xml, index);
+            return GetQualifiedName(name);
+        }
+
+        /// <summary>
+        /// Gets the name of the attribute inside but before the specified
+        /// index.
+        /// </summary>
+        public static string GetAttributeName(string xml, int index)
+        {
+            if (String.IsNullOrEmpty(xml))
+            {
+                return String.Empty;
+            }
+
+            index = GetCorrectedIndex(xml.Length, index);
+            return GetAttributeName(xml, index, true, true, true);
+        }
+
+        /// <summary>
+        /// Gets the name of the attribute and its prefix at the specified index. The index
+        /// can be anywhere inside the attribute name or in the attribute value.
+        /// The namespace for the element containing the attribute will also be determined
+        /// if the includeNamespace flag is set to true.
+        /// </summary>
+        public static QualifiedName GetQualifiedAttributeNameAtIndex(string xml, int index, bool includeNamespace)
+        {
+            string name = GetAttributeNameAtIndex(xml, index);
+            QualifiedName qualifiedName = GetQualifiedName(name);
+            if (qualifiedName != null && String.IsNullOrEmpty(qualifiedName.Namespace) && includeNamespace)
+            {
+                QualifiedNameCollection namespaces = new QualifiedNameCollection();
+                XmlElementPath path = GetActiveElementStartPathAtIndex(xml, index, namespaces);
+                qualifiedName.Namespace = GetNamespaceForPrefix(namespaces, path.Elements.LastPrefix);
+            }
+            return qualifiedName;
+        }
+
+        /// <summary>
+        /// Gets the name of the attribute and its prefix at the specified index. The index
+        /// can be anywhere inside the attribute name or in the attribute value.
+        /// </summary>
+        public static QualifiedName GetQualifiedAttributeNameAtIndex(string xml, int index)
+        {
+            return GetQualifiedAttributeNameAtIndex(xml, index, false);
+        }
+
+        /// <summary>
+        /// Gets the name of the attribute at the specified index. The index
+        /// can be anywhere inside the attribute name or in the attribute value.
+        /// </summary>
+        public static string GetAttributeNameAtIndex(string xml, int index)
+        {
+            if (String.IsNullOrEmpty(xml))
+            {
+                return String.Empty;
+            }
+
+            index = GetCorrectedIndex(xml.Length, index);
+
+            bool ignoreWhitespace = true;
+            bool ignoreEqualsSign = false;
+            bool ignoreQuote = false;
+
+            if (IsInsideAttributeValue(xml, index))
+            {
+                // Find attribute name start.
+                int elementStartIndex = GetActiveElementStartIndex(xml, index);
+                if (elementStartIndex == -1)
+                {
+                    return String.Empty;
+                }
+
+                // Find equals sign.
+                for (int i = index; i > elementStartIndex; --i)
+                {
+                    char ch = xml[i];
+                    if (ch == '=')
+                    {
+                        index = i;
+                        ignoreEqualsSign = true;
+                        break;
+                    }
+                }
+            }
+            else
+            {
+                // Find end of attribute name.
+                for (; index < xml.Length; ++index)
+                {
+                    char ch = xml[index];
+                    if (!IsXmlNameChar(ch))
+                    {
+                        if (ch == '\'' || ch == '\"')
+                        {
+                            ignoreQuote = true;
+                            ignoreEqualsSign = true;
+                        }
+                        break;
+                    }
+                }
+                --index;
+            }
+
+            return GetAttributeName(xml, index, ignoreWhitespace, ignoreQuote, ignoreEqualsSign);
+        }
+
+        /// <summary>
+        /// Checks for valid xml attribute value character
+        /// </summary>
+        public static bool IsAttributeValueChar(char ch)
+        {
+            if ((ch == '<') ||
+                (ch == '>'))
+            {
+                return false;
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// Checks for valid xml element or attribute name character.
+        /// </summary>
+        public static bool IsXmlNameChar(char ch)
+        {
+            if (Char.IsLetterOrDigit(ch) ||
+                (ch == ':') ||
+                (ch == '/') ||
+                (ch == '_') ||
+                (ch == '.') ||
+                (ch == '-'))
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+        /// <summary>
+        /// Determines whether the specified index is inside an attribute value.
+        /// </summary>
+        public static bool IsInsideAttributeValue(string xml, int index)
+        {
+            if (String.IsNullOrEmpty(xml))
+            {
+                return false;
+            }
+
+            if (index > xml.Length)
+            {
+                index = xml.Length;
+            }
+
+            int elementStartIndex = GetActiveElementStartIndex(xml, index);
+            if (elementStartIndex == -1)
+            {
+                return false;
+            }
+
+            // Count the number of double quotes and single quotes that exist
+            // before the first equals sign encountered going backwards to
+            // the start of the active element.
+            bool foundEqualsSign = false;
+            int doubleQuotesCount = 0;
+            int singleQuotesCount = 0;
+            char lastQuoteChar = ' ';
+            for (int i = index - 1; i > elementStartIndex; --i)
+            {
+                char ch = xml[i];
+                if (ch == '=')
+                {
+                    foundEqualsSign = true;
+                    break;
+                }
+                else if (ch == '\"')
+                {
+                    lastQuoteChar = ch;
+                    ++doubleQuotesCount;
+                }
+                else if (ch == '\'')
+                {
+                    lastQuoteChar = ch;
+                    ++singleQuotesCount;
+                }
+            }
+
+            bool isInside = false;
+
+            if (foundEqualsSign)
+            {
+                // Odd number of quotes?
+                if ((lastQuoteChar == '\"') && ((doubleQuotesCount % 2) > 0))
+                {
+                    isInside = true;
+                }
+                else if ((lastQuoteChar == '\'') && ((singleQuotesCount % 2) > 0))
+                {
+                    isInside = true;
+                }
+            }
+
+            return isInside;
+        }
+
+        /// <summary>
+        /// Gets the attribute value at the specified index.
+        /// </summary>
+        /// <returns>An empty string if no attribute value can be found.</returns>
+        public static string GetAttributeValueAtIndex(string xml, int index)
+        {
+            if (!IsInsideAttributeValue(xml, index))
+            {
+                return String.Empty;
+            }
+
+            index = GetCorrectedIndex(xml.Length, index);
+
+            int elementStartIndex = GetActiveElementStartIndex(xml, index);
+            if (elementStartIndex == -1)
+            {
+                return String.Empty;
+            }
+
+            // Find equals sign.
+            int equalsSignIndex = -1;
+            for (int i = index; i > elementStartIndex; --i)
+            {
+                char ch = xml[i];
+                if (ch == '=')
+                {
+                    equalsSignIndex = i;
+                    break;
+                }
+            }
+
+            if (equalsSignIndex == -1)
+            {
+                return String.Empty;
+            }
+
+            // Find attribute value.
+            char quoteChar = ' ';
+            bool foundQuoteChar = false;
+            StringBuilder attributeValue = new StringBuilder();
+            for (int i = equalsSignIndex; i < xml.Length; ++i)
+            {
+                char ch = xml[i];
+                if (!foundQuoteChar)
+                {
+                    if (ch == '\"' || ch == '\'')
+                    {
+                        quoteChar = ch;
+                        foundQuoteChar = true;
+                    }
+                }
+                else
+                {
+                    if (ch == quoteChar)
+                    {
+                        // End of attribute value.
+                        return attributeValue.ToString();
+                    }
+                    else if (IsAttributeValueChar(ch) || (ch == '\"' || ch == '\''))
+                    {
+                        attributeValue.Append(ch);
+                    }
+                    else
+                    {
+                        // Invalid character found.
+                        return String.Empty;
+                    }
+                }
+            }
+
+            return String.Empty;
+        }
+
+        /// <summary>
+        /// Gets the text of the xml element start tag that the index is
+        /// currently inside.
+        /// </summary>
+        /// <returns>
+        /// Returns the text up to and including the start tag < character.
+        /// </returns>
+        static string GetActiveElementStartText(string xml, int index)
+        {
+            int elementStartIndex = GetActiveElementStartIndex(xml, index);
+            if (elementStartIndex >= 0)
+            {
+                if (elementStartIndex < index)
+                {
+                    int elementEndIndex = GetActiveElementEndIndex(xml, index);
+                    if (elementEndIndex >= index)
+                    {
+                        return xml.Substring(elementStartIndex, elementEndIndex - elementStartIndex);
+                    }
+                }
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// Locates the index of the start tag < character.
+        /// </summary>
+        /// <returns>
+        /// Returns the index of the start tag character; otherwise
+        /// -1 if no start tag character is found or a end tag
+        /// > character is found first.
+        /// </returns>
+        static int GetActiveElementStartIndex(string xml, int index)
+        {
+            int elementStartIndex = -1;
+
+            int currentIndex = index - 1;
+
+            for (int i = 0; i < index; ++i)
+            {
+
+                char currentChar = xml[currentIndex];
+                if (currentChar == '<')
+                {
+                    elementStartIndex = currentIndex;
+                    break;
+                }
+                else if (currentChar == '>')
+                {
+                    break;
+                }
+
+                --currentIndex;
+            }
+
+            return elementStartIndex;
+        }
+
+        /// <summary>
+        /// Locates the index of the end tag character.
+        /// </summary>
+        /// <returns>
+        /// Returns the index of the end tag character; otherwise
+        /// -1 if no end tag character is found or a start tag
+        /// character is found first.
+        /// </returns>
+        static int GetActiveElementEndIndex(string xml, int index)
+        {
+            int elementEndIndex = index;
+
+            for (int i = index; i < xml.Length; ++i)
+            {
+
+                char currentChar = xml[i];
+                if (currentChar == '>')
+                {
+                    elementEndIndex = i;
+                    break;
+                }
+                else if (currentChar == '<')
+                {
+                    elementEndIndex = -1;
+                    break;
+                }
+            }
+
+            return elementEndIndex;
+        }
+
+        /// <summary>
+        /// Gets the element name from the element start tag string.
+        /// </summary>
+        /// <param name="xml">This string must start at the
+        /// element we are interested in.</param>
+        static QualifiedName GetElementName(string xml)
+        {
+            string name = String.Empty;
+
+            // Find the end of the element name.
+            xml = xml.Replace("\r\n", " ");
+            int index = xml.IndexOf(' ');
+            if (index > 0)
+            {
+                name = xml.Substring(1, index - 1);
+            }
+            else
+            {
+                name = xml.Substring(1);
+            }
+
+            return GetQualifiedName(name);
+        }
+
+        /// <summary>
+        /// Gets the element namespace from the element start tag
+        /// string.
+        /// </summary>
+        /// <param name="xml">This string must start at the
+        /// element we are interested in.</param>
+        static NamespaceURI GetElementNamespace(string xml)
+        {
+            NamespaceURI namespaceURI = new NamespaceURI();
+
+            Match match = Regex.Match(xml, ".*?(xmlns\\s*?|xmlns:.*?)=\\s*?['\\\"](.*?)['\\\"]");
+            if (match.Success)
+            {
+                namespaceURI.Namespace = match.Groups[2].Value;
+
+                string xmlns = match.Groups[1].Value.Trim();
+                int prefixIndex = xmlns.IndexOf(':');
+                if (prefixIndex > 0)
+                {
+                    namespaceURI.Prefix = xmlns.Substring(prefixIndex + 1);
+                }
+            }
+
+            return namespaceURI;
+        }
+
+        static string ReverseString(string text)
+        {
+            StringBuilder reversedString = new StringBuilder(text);
+
+            int index = text.Length;
+            foreach (char ch in text)
+            {
+                --index;
+                reversedString[index] = ch;
+            }
+
+            return reversedString.ToString();
+        }
+
+        /// <summary>
+        /// Ensures that the index is on the last character if it is
+        /// too large.
+        /// </summary>
+        /// <param name="length">The length of the string.</param>
+        /// <param name="index">The current index.</param>
+        /// <returns>The index unchanged if the index is smaller than the
+        /// length of the string; otherwise it returns length - 1.</returns>
+        static int GetCorrectedIndex(int length, int index)
+        {
+            if (index >= length)
+            {
+                index = length - 1;
+            }
+            return index;
+        }
+
+        /// <summary>
+        /// Gets the active element path given the element text.
+        /// </summary>
+        static XmlElementPath GetActiveElementStartPath(string xml, int index, string elementText, QualifiedNameCollection namespaces)
+        {
+            QualifiedName elementName = GetElementName(elementText);
+            if (elementName == null)
+            {
+                return new XmlElementPath();
+            }
+
+            NamespaceURI elementNamespace = GetElementNamespace(elementText);
+
+            XmlElementPath path = GetFullParentElementPath(xml.Substring(0, index), namespaces);
+
+            // Try to get a namespace for the active element's prefix.
+            if (elementName.Prefix.Length > 0 && elementNamespace.Namespace.Length == 0)
+            {
+                elementName.Namespace = GetNamespaceForPrefix(namespaces, elementName.Prefix);
+                elementNamespace.Namespace = elementName.Namespace;
+                elementNamespace.Prefix = elementName.Prefix;
+            }
+
+            if (elementNamespace.Namespace.Length == 0)
+            {
+                if (path.Elements.Count > 0)
+                {
+                    QualifiedName parentName = path.Elements[path.Elements.Count - 1];
+                    elementNamespace.Namespace = parentName.Namespace;
+                    elementNamespace.Prefix = parentName.Prefix;
+                }
+            }
+            path.Elements.Add(new QualifiedName(elementName.Name, elementNamespace.Namespace, elementNamespace.Prefix));
+            path.Compact();
+            return path;
+        }
+
+        static string GetAttributeName(string xml, int index, bool ignoreWhitespace, bool ignoreQuote, bool ignoreEqualsSign)
+        {
+            string name = String.Empty;
+
+            // From the end of the string work backwards until we have
+            // picked out the attribute name.
+            StringBuilder reversedAttributeName = new StringBuilder();
+
+            int currentIndex = index;
+            bool invalidString = true;
+
+            for (int i = 0; i <= index; ++i)
+            {
+
+                char currentChar = xml[currentIndex];
+
+                if (IsXmlNameChar(currentChar))
+                {
+                    if (!ignoreEqualsSign)
+                    {
+                        ignoreWhitespace = false;
+                        reversedAttributeName.Append(currentChar);
+                    }
+                }
+                else if (Char.IsWhiteSpace(currentChar))
+                {
+                    if (ignoreWhitespace == false)
+                    {
+                        // Reached the start of the attribute name.
+                        invalidString = false;
+                        break;
+                    }
+                }
+                else if ((currentChar == '\'') || (currentChar == '\"'))
+                {
+                    if (ignoreQuote)
+                    {
+                        ignoreQuote = false;
+                    }
+                    else
+                    {
+                        break;
+                    }
+                }
+                else if (currentChar == '=')
+                {
+                    if (ignoreEqualsSign)
+                    {
+                        ignoreEqualsSign = false;
+                    }
+                    else
+                    {
+                        break;
+                    }
+                }
+                else if (IsAttributeValueChar(currentChar))
+                {
+                    if (!ignoreQuote)
+                    {
+                        break;
+                    }
+                }
+                else
+                {
+                    break;
+                }
+
+                --currentIndex;
+            }
+
+            if (!invalidString)
+            {
+                name = ReverseString(reversedAttributeName.ToString());
+            }
+
+            return name;
+        }
+
+        /// <summary>
+        /// Gets the element name at the specified index.
+        /// </summary>
+        static string GetElementNameAtIndex(string xml, int index)
+        {
+            int elementStartIndex = GetActiveElementStartIndex(xml, index);
+            if (elementStartIndex >= 0 && elementStartIndex < index)
+            {
+                int elementEndIndex = GetActiveElementEndIndex(xml, index);
+                if (elementEndIndex == -1)
+                {
+                    elementEndIndex = xml.IndexOfAny(whitespaceCharacters, elementStartIndex);
+                }
+                if (elementEndIndex >= elementStartIndex)
+                {
+                    return xml.Substring(elementStartIndex, elementEndIndex - elementStartIndex);
+                }
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// Returns a name and its prefix.
+        /// </summary>
+        static QualifiedName GetQualifiedName(string name)
+        {
+            if (name.Length == 0)
+            {
+                return null;
+            }
+
+            QualifiedName qualifiedName = new QualifiedName();
+            int prefixIndex = name.IndexOf(':');
+            if (prefixIndex > 0)
+            {
+                qualifiedName.Prefix = name.Substring(0, prefixIndex);
+                qualifiedName.Name = name.Substring(prefixIndex + 1);
+            }
+            else
+            {
+                qualifiedName.Name = name;
+            }
+            return qualifiedName;
+        }
+
+        /// <summary>
+        /// Gets the parent element path based on the index position. This
+        /// method does not compact the path so it will include all elements
+        /// including those in another namespace in the path.
+        /// </summary>
+        static XmlElementPath GetFullParentElementPath(string xml, QualifiedNameCollection namespaces)
+        {
+            XmlElementPath path = new XmlElementPath();
+            IDictionary<string, string> namespacesInScope = null;
+            using (StringReader reader = new StringReader(xml))
+            {
+                using (XmlTextReader xmlReader = new XmlTextReader(reader))
+                {
+                    try
+                    {
+                        xmlReader.XmlResolver = null; // prevent XmlTextReader from loading external DTDs
+                        while (xmlReader.Read())
+                        {
+                            switch (xmlReader.NodeType)
+                            {
+                                case XmlNodeType.Element:
+                                    if (!xmlReader.IsEmptyElement)
+                                    {
+                                        QualifiedName elementName = new QualifiedName(xmlReader.LocalName, xmlReader.NamespaceURI, xmlReader.Prefix);
+                                        path.Elements.Add(elementName);
+                                    }
+                                    break;
+                                case XmlNodeType.EndElement:
+                                    path.Elements.RemoveLast();
+                                    break;
+                            }
+                        }
+                    }
+                    catch (XmlException)
+                    {
+                        namespacesInScope = xmlReader.GetNamespacesInScope(XmlNamespaceScope.All);
+                    }
+                }
+            }
+
+            // Add namespaces in scope for the last element read.
+            if (namespacesInScope != null)
+            {
+                foreach (KeyValuePair<string, string> ns in namespacesInScope)
+                {
+                    namespaces.Add(new QualifiedName(String.Empty, ns.Value, ns.Key));
+                }
+            }
+
+            return path;
+        }
+
+        /// <summary>
+        /// Finds the namespace for the specified prefix.
+        /// </summary>
+        static string GetNamespaceForPrefix(QualifiedNameCollection namespaces, string prefix)
+        {
+            foreach (QualifiedName name in namespaces)
+            {
+                if (name.Prefix == prefix)
+                {
+                    return name.Namespace;
+                }
+            }
+            return String.Empty;
+        }
+
+        /// <summary>
+        /// Gets path of the xml element start tag that the specified
+        /// <paramref name="index"/> is currently inside.
+        /// </summary>
+        /// <remarks>If the index outside the start tag then an empty path
+        /// is returned.</remarks>
+        /// <param name="namespaces">Returns the namespaces that are
+        /// exist in the xml.</param>
+        static XmlElementPath GetActiveElementStartPath(string xml, int index, QualifiedNameCollection namespaces)
+        {
+            XmlElementPath path = new XmlElementPath();
+            string elementText = GetActiveElementStartText(xml, index);
+            if (elementText != null)
+            {
+                path = GetActiveElementStartPath(xml, index, elementText, namespaces);
+            }
+            return path;
+        }
+
+        /// <summary>
+        /// Gets path of the xml element start tag that the specified
+        /// <paramref name="index"/> is currently located. This is different to the
+        /// GetActiveElementStartPath method since the index can be inside the element
+        /// name.
+        /// </summary>
+        /// <remarks>If the index outside the start tag then an empty path
+        /// is returned.</remarks>
+        static XmlElementPath GetActiveElementStartPathAtIndex(string xml, int index, QualifiedNameCollection namespaces)
+        {
+            // Find first non xml element name character to the right of the index.
+            index = GetCorrectedIndex(xml.Length, index);
+            if (index < 0) // can happen when xml.Length==0
+                return new XmlElementPath();
+            int currentIndex = index;
+            for (; currentIndex < xml.Length; ++currentIndex)
+            {
+                char ch = xml[currentIndex];
+                if (!IsXmlNameChar(ch))
+                {
+                    break;
+                }
+            }
+
+            string elementText = GetElementNameAtIndex(xml, currentIndex);
+            if (elementText != null)
+            {
+                return GetActiveElementStartPath(xml, currentIndex, elementText, namespaces);
+            }
+            return new XmlElementPath();
+        }
+    }
+}

Deleted: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaAssociation.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaAssociation.cs	2013-09-06 17:39:32 UTC (rev 7850)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaAssociation.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,195 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2013, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-// 
-// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
-// Copyright 2002-2010 by
-//
-//  AlphaSierraPapa, Christoph Wille
-//  Vordernberger Strasse 27/8
-//  A-8700 Leoben
-//  Austria
-//
-//  email: office at alphasierrapapa.com
-//  court of jurisdiction: Landesgericht Leoben
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-// 
-#endregion
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
-{
-    /// <summary>
-    /// Represents an association between an xml schema and a file extension.
-    /// </summary>
-    public class XmlSchemaAssociation //: IXmlConvertable
-    {
-        string namespaceUri = String.Empty;
-        string extension = String.Empty;
-        string namespacePrefix = String.Empty;
-
-        public XmlSchemaAssociation(string extension)
-            : this(extension, String.Empty, String.Empty)
-        {
-        }
-
-        public XmlSchemaAssociation(string extension, string namespaceUri)
-            : this(extension, namespaceUri, String.Empty)
-        {
-        }
-
-        public XmlSchemaAssociation(string extension, string namespaceUri, string namespacePrefix)
-        {
-            this.extension = extension;
-            this.namespaceUri = namespaceUri;
-            this.namespacePrefix = namespacePrefix;
-        }
-
-        public string NamespaceUri
-        {
-            get
-            {
-                return namespaceUri;
-            }
-
-            set
-            {
-                namespaceUri = value;
-            }
-        }
-
-        /// <summary>
-        /// Gets or sets the file extension (e.g. '.xml').
-        /// </summary>
-        public string Extension
-        {
-            get
-            {
-                return extension;
-            }
-
-            set
-            {
-                extension = value;
-            }
-        }
-
-        /// <summary>
-        /// Gets or sets the default namespace prefix that will be added
-        /// to the xml elements.
-        /// </summary>
-        public string NamespacePrefix
-        {
-            get
-            {
-                return namespacePrefix;
-            }
-
-            set
-            {
-                namespacePrefix = value;
-            }
-        }
-
-        /// <summary>
-        /// Gets the default schema association for the file extension. 
-        /// </summary>
-        /// <remarks>
-        /// These defaults are hard coded.
-        /// </remarks>
-        public static XmlSchemaAssociation GetDefaultAssociation(string extension)
-        {
-            XmlSchemaAssociation association = null;
-
-            switch (extension.ToLowerInvariant())
-            {
-                case ".wxs":
-                    association = new XmlSchemaAssociation(extension, @"http://schemas.microsoft.com/wix/2003/01/wi");
-                    break;
-                case ".config":
-                    association = new XmlSchemaAssociation(extension, @"urn:app-config");
-                    break;
-                case ".build":
-                    association = new XmlSchemaAssociation(extension, @"http://nant.sf.net/release/0.85/nant.xsd");
-                    break;
-                case ".addin":
-                    association = new XmlSchemaAssociation(extension, @"http://www.icsharpcode.net/2005/addin");
-                    break;
-                case ".xsl":
-                case ".xslt":
-                    association = new XmlSchemaAssociation(extension, @"http://www.w3.org/1999/XSL/Transform", "xsl");
-                    break;
-                case ".xsd":
-                    association = new XmlSchemaAssociation(extension, @"http://www.w3.org/2001/XMLSchema", "xs");
-                    break;
-                case ".manifest":
-                    association = new XmlSchemaAssociation(extension, @"urn:schemas-microsoft-com:asm.v1");
-                    break;
-                case ".xaml":
-                    association = new XmlSchemaAssociation(extension, @"http://schemas.microsoft.com/winfx/avalon/2005");
-                    break;
-                default:
-                    association = new XmlSchemaAssociation(extension);
-                    break;
-            }
-            return association;
-        }
-
-        /// <summary>
-        /// Two schema associations are considered equal if their file extension,
-        /// prefix and namespaceUri are the same.
-        /// </summary>
-        public override bool Equals(object obj)
-        {
-            bool equals = false;
-
-            XmlSchemaAssociation rhs = obj as XmlSchemaAssociation;
-            if (rhs != null)
-            {
-                if ((this.namespacePrefix == rhs.namespacePrefix) &&
-                    (this.extension == rhs.extension) &&
-                    (this.namespaceUri == rhs.namespaceUri))
-                {
-                    equals = true;
-                }
-            }
-
-            return equals;
-        }
-
-        public override int GetHashCode()
-        {
-            return (namespaceUri != null ? namespaceUri.GetHashCode() : 0) ^ (extension != null ? extension.GetHashCode() : 0) ^ (namespacePrefix != null ? namespacePrefix.GetHashCode() : 0);
-        }
-
-        /// <summary>
-        /// Creates an XmlSchemaAssociation from the saved xml.
-        /// </summary>
-        public static XmlSchemaAssociation ConvertFromString(string text)
-        {
-            string[] parts = text.Split(new char[] { '|' }, 3);
-            return new XmlSchemaAssociation(parts[0], parts[1], parts[2]);
-        }
-
-        public string ConvertToString()
-        {
-            return extension + "|" + namespaceUri + "|" + namespacePrefix;
-        }
-    }
-}

Copied: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaAssociation.cs (from rev 7850, trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaAssociation.cs)
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaAssociation.cs	                        (rev 0)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaAssociation.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,195 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
+// Copyright 2002-2010 by
+//
+//  AlphaSierraPapa, Christoph Wille
+//  Vordernberger Strasse 27/8
+//  A-8700 Leoben
+//  Austria
+//
+//  email: office at alphasierrapapa.com
+//  court of jurisdiction: Landesgericht Leoben
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
+{
+    /// <summary>
+    /// Represents an association between an xml schema and a file extension.
+    /// </summary>
+    public class XmlSchemaAssociation //: IXmlConvertable
+    {
+        string namespaceUri = String.Empty;
+        string extension = String.Empty;
+        string namespacePrefix = String.Empty;
+
+        public XmlSchemaAssociation(string extension)
+            : this(extension, String.Empty, String.Empty)
+        {
+        }
+
+        public XmlSchemaAssociation(string extension, string namespaceUri)
+            : this(extension, namespaceUri, String.Empty)
+        {
+        }
+
+        public XmlSchemaAssociation(string extension, string namespaceUri, string namespacePrefix)
+        {
+            this.extension = extension;
+            this.namespaceUri = namespaceUri;
+            this.namespacePrefix = namespacePrefix;
+        }
+
+        public string NamespaceUri
+        {
+            get
+            {
+                return namespaceUri;
+            }
+
+            set
+            {
+                namespaceUri = value;
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets the file extension (e.g. '.xml').
+        /// </summary>
+        public string Extension
+        {
+            get
+            {
+                return extension;
+            }
+
+            set
+            {
+                extension = value;
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets the default namespace prefix that will be added
+        /// to the xml elements.
+        /// </summary>
+        public string NamespacePrefix
+        {
+            get
+            {
+                return namespacePrefix;
+            }
+
+            set
+            {
+                namespacePrefix = value;
+            }
+        }
+
+        /// <summary>
+        /// Gets the default schema association for the file extension. 
+        /// </summary>
+        /// <remarks>
+        /// These defaults are hard coded.
+        /// </remarks>
+        public static XmlSchemaAssociation GetDefaultAssociation(string extension)
+        {
+            XmlSchemaAssociation association = null;
+
+            switch (extension.ToLowerInvariant())
+            {
+                case ".wxs":
+                    association = new XmlSchemaAssociation(extension, @"http://schemas.microsoft.com/wix/2003/01/wi");
+                    break;
+                case ".config":
+                    association = new XmlSchemaAssociation(extension, @"urn:app-config");
+                    break;
+                case ".build":
+                    association = new XmlSchemaAssociation(extension, @"http://nant.sf.net/release/0.85/nant.xsd");
+                    break;
+                case ".addin":
+                    association = new XmlSchemaAssociation(extension, @"http://www.icsharpcode.net/2005/addin");
+                    break;
+                case ".xsl":
+                case ".xslt":
+                    association = new XmlSchemaAssociation(extension, @"http://www.w3.org/1999/XSL/Transform", "xsl");
+                    break;
+                case ".xsd":
+                    association = new XmlSchemaAssociation(extension, @"http://www.w3.org/2001/XMLSchema", "xs");
+                    break;
+                case ".manifest":
+                    association = new XmlSchemaAssociation(extension, @"urn:schemas-microsoft-com:asm.v1");
+                    break;
+                case ".xaml":
+                    association = new XmlSchemaAssociation(extension, @"http://schemas.microsoft.com/winfx/avalon/2005");
+                    break;
+                default:
+                    association = new XmlSchemaAssociation(extension);
+                    break;
+            }
+            return association;
+        }
+
+        /// <summary>
+        /// Two schema associations are considered equal if their file extension,
+        /// prefix and namespaceUri are the same.
+        /// </summary>
+        public override bool Equals(object obj)
+        {
+            bool equals = false;
+
+            XmlSchemaAssociation rhs = obj as XmlSchemaAssociation;
+            if (rhs != null)
+            {
+                if ((this.namespacePrefix == rhs.namespacePrefix) &&
+                    (this.extension == rhs.extension) &&
+                    (this.namespaceUri == rhs.namespaceUri))
+                {
+                    equals = true;
+                }
+            }
+
+            return equals;
+        }
+
+        public override int GetHashCode()
+        {
+            return (namespaceUri != null ? namespaceUri.GetHashCode() : 0) ^ (extension != null ? extension.GetHashCode() : 0) ^ (namespacePrefix != null ? namespacePrefix.GetHashCode() : 0);
+        }
+
+        /// <summary>
+        /// Creates an XmlSchemaAssociation from the saved xml.
+        /// </summary>
+        public static XmlSchemaAssociation ConvertFromString(string text)
+        {
+            string[] parts = text.Split(new char[] { '|' }, 3);
+            return new XmlSchemaAssociation(parts[0], parts[1], parts[2]);
+        }
+
+        public string ConvertToString()
+        {
+            return extension + "|" + namespaceUri + "|" + namespacePrefix;
+        }
+    }
+}

Deleted: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionData.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionData.cs	2013-09-06 17:39:32 UTC (rev 7850)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionData.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,1607 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2013, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-// 
-// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
-// Copyright 2002-2010 by
-//
-//  AlphaSierraPapa, Christoph Wille
-//  Vordernberger Strasse 27/8
-//  A-8700 Leoben
-//  Austria
-//
-//  email: office at alphasierrapapa.com
-//  court of jurisdiction: Landesgericht Leoben
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-// 
-#endregion
-using ICSharpCode.TextEditor.Gui.CompletionWindow;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Xml;
-using System.Xml.Schema;
-
-namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
-{
-    /// <summary>
-    /// Holds the completion (intellisense) data for an xml schema.
-    /// </summary>
-    /// <remarks>
-    /// The XmlSchema class throws an exception if we attempt to load 
-    /// the xhtml1-strict.xsd schema.  It does not like the fact that
-    /// this schema redefines the xml namespace, even though this is
-    /// allowed by the w3.org specification.
-    /// </remarks>
-    public class XmlSchemaCompletionData
-    {
-        string namespaceUri = String.Empty;
-        XmlSchema schema;
-        string fileName = String.Empty;
-        bool readOnly = false;
-
-        /// <summary>
-        /// Stores attributes that have been prohibited whilst the code
-        /// generates the attribute completion data.
-        /// </summary>
-        XmlSchemaObjectCollection prohibitedAttributes = new XmlSchemaObjectCollection();
-
-        public XmlSchemaCompletionData()
-        {
-        }
-
-        /// <summary>
-        /// Creates completion data from the schema passed in 
-        /// via the reader object.
-        /// </summary>
-        public XmlSchemaCompletionData(TextReader reader)
-        {
-            ReadSchema(String.Empty, reader);
-        }
-
-        /// <summary>
-        /// Creates completion data from the schema passed in 
-        /// via the reader object.
-        /// </summary>
-        public XmlSchemaCompletionData(XmlTextReader reader)
-        {
-            reader.XmlResolver = null;
-            ReadSchema(reader);
-        }
-
-        /// <summary>
-        /// Creates the completion data from the specified schema file.
-        /// </summary>
-        public XmlSchemaCompletionData(string fileName)
-            : this(String.Empty, fileName)
-        {
-        }
-
-        /// <summary>
-        /// Creates the completion data from the specified schema file and uses
-        /// the specified baseUri to resolve any referenced schemas.
-        /// </summary>
-        public XmlSchemaCompletionData(string baseUri, string fileName)
-        {
-            StreamReader reader = new StreamReader(fileName, true);
-            ReadSchema(baseUri, reader);
-            this.fileName = fileName;
-        }
-
-        /// <summary>
-        /// Gets the schema.
-        /// </summary>
-        public XmlSchema Schema
-        {
-            get
-            {
-                return schema;
-            }
-        }
-
-        /// <summary>
-        /// Read only schemas are those that are installed with 
-        /// SharpDevelop.
-        /// </summary>
-        public bool ReadOnly
-        {
-            get
-            {
-                return readOnly;
-            }
-
-            set
-            {
-                readOnly = value;
-            }
-        }
-
-        /// <summary>
-        /// Gets or sets the schema's file name.
-        /// </summary>
-        public string FileName
-        {
-            get
-            {
-                return fileName;
-            }
-            set
-            {
-                fileName = value;
-            }
-        }
-
-        /// <summary>
-        /// Gets the namespace URI for the schema.
-        /// </summary>
-        public string NamespaceUri
-        {
-            get
-            {
-                return namespaceUri;
-            }
-        }
-
-        /// <summary>
-        /// Converts the filename into a valid Uri.
-        /// </summary>
-        public static string GetUri(string fileName)
-        {
-            string uri = String.Empty;
-
-            if (fileName != null)
-            {
-                if (fileName.Length > 0)
-                {
-                    uri = String.Concat("file:///", fileName.Replace('\\', '/'));
-                }
-            }
-
-            return uri;
-        }
-
-        /// <summary>
-        /// Gets the possible root elements for an xml document using this schema.
-        /// </summary>
-        public ICompletionData[] GetElementCompletionData()
-        {
-            return GetElementCompletionData(String.Empty);
-        }
-
-        /// <summary>
-        /// Gets the possible root elements for an xml document using this schema.
-        /// </summary>
-        public ICompletionData[] GetElementCompletionData(string namespacePrefix)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            foreach (XmlSchemaElement element in schema.Elements.Values)
-            {
-                if (element.Name != null)
-                {
-                    AddElement(data, element.Name, namespacePrefix, element.Annotation);
-                }
-                else
-                {
-                    // Do not add reference element.
-                }
-            }
-
-            return data.ToArray();
-        }
-
-        /// <summary>
-        /// Gets the attribute completion data for the xml element that exists
-        /// at the end of the specified path.
-        /// </summary>
-        public ICompletionData[] GetAttributeCompletionData(XmlElementPath path)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            // Locate matching element.
-            XmlSchemaElement element = FindElement(path);
-
-            // Get completion data.
-            if (element != null)
-            {
-                prohibitedAttributes.Clear();
-                data = GetAttributeCompletionData(element);
-            }
-
-            return data.ToArray();
-        }
-
-        /// <summary>
-        /// Gets the child element completion data for the xml element that exists
-        /// at the end of the specified path.
-        /// </summary>
-        public ICompletionData[] GetChildElementCompletionData(XmlElementPath path)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            // Locate matching element.
-            XmlSchemaElement element = FindElement(path);
-
-            // Get completion data.
-            if (element != null)
-            {
-                data = GetChildElementCompletionData(element, path.Elements.LastPrefix);
-            }
-
-            return data.ToArray();
-        }
-
-        /// <summary>
-        /// Gets the autocomplete data for the specified attribute value.
-        /// </summary>
-        public ICompletionData[] GetAttributeValueCompletionData(XmlElementPath path, string name)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            // Locate matching element.
-            XmlSchemaElement element = FindElement(path);
-
-            // Get completion data.
-            if (element != null)
-            {
-                data = GetAttributeValueCompletionData(element, name);
-            }
-
-            return data.ToArray();
-        }
-
-        /// <summary>
-        /// Finds the element that exists at the specified path.
-        /// </summary>
-        /// <remarks>This method is not used when generating completion data,
-        /// but is a useful method when locating an element so we can jump
-        /// to its schema definition.</remarks>
-        /// <returns><see langword="null"/> if no element can be found.</returns>
-        public XmlSchemaElement FindElement(XmlElementPath path)
-        {
-            XmlSchemaElement element = null;
-            for (int i = 0; i < path.Elements.Count; ++i)
-            {
-                QualifiedName name = path.Elements[i];
-                if (i == 0)
-                {
-                    // Look for root element.
-                    element = FindElement(name);
-                    if (element == null)
-                    {
-                        break;
-                    }
-                }
-                else
-                {
-                    element = FindChildElement(element, name);
-                    if (element == null)
-                    {
-                        break;
-                    }
-                }
-            }
-            return element;
-        }
-
-        /// <summary>
-        /// Finds an element in the schema.
-        /// </summary>
-        /// <remarks>
-        /// Only looks at the elements that are defined in the 
-        /// root of the schema so it will not find any elements
-        /// that are defined inside any complex types.
-        /// </remarks>
-        public XmlSchemaElement FindElement(QualifiedName name)
-        {
-            foreach (XmlSchemaElement element in schema.Elements.Values)
-            {
-                if (name.Equals(element.QualifiedName))
-                {
-                    return element;
-                }
-            }
-            return null;
-        }
-
-        /// <summary>
-        /// Finds the complex type with the specified name.
-        /// </summary>
-        public XmlSchemaComplexType FindComplexType(QualifiedName name)
-        {
-            XmlQualifiedName qualifiedName = new XmlQualifiedName(name.Name, name.Namespace);
-            return FindNamedType(schema, qualifiedName);
-        }
-
-        /// <summary>
-        /// Finds the specified attribute name given the element.
-        /// </summary>
-        /// <remarks>This method is not used when generating completion data,
-        /// but is a useful method when locating an attribute so we can jump
-        /// to its schema definition.</remarks>
-        /// <returns><see langword="null"/> if no attribute can be found.</returns>
-        public XmlSchemaAttribute FindAttribute(XmlSchemaElement element, string name)
-        {
-            XmlSchemaAttribute attribute = null;
-            XmlSchemaComplexType complexType = GetElementAsComplexType(element);
-            if (complexType != null)
-            {
-                attribute = FindAttribute(complexType, name);
-            }
-            return attribute;
-        }
-
-        /// <summary>
-        /// Finds the attribute group with the specified name.
-        /// </summary>
-        public XmlSchemaAttributeGroup FindAttributeGroup(string name)
-        {
-            return FindAttributeGroup(schema, name);
-        }
-
-        /// <summary>
-        /// Finds the simple type with the specified name.
-        /// </summary>
-        public XmlSchemaSimpleType FindSimpleType(string name)
-        {
-            XmlQualifiedName qualifiedName = new XmlQualifiedName(name, namespaceUri);
-            return FindSimpleType(qualifiedName);
-        }
-
-        /// <summary>
-        /// Finds the specified attribute in the schema. This method only checks
-        /// the attributes defined in the root of the schema.
-        /// </summary>
-        public XmlSchemaAttribute FindAttribute(string name)
-        {
-            foreach (XmlSchemaAttribute attribute in schema.Attributes.Values)
-            {
-                if (attribute.Name == name)
-                {
-                    return attribute;
-                }
-            }
-            return null;
-        }
-
-        /// <summary>
-        /// Finds the schema group with the specified name.
-        /// </summary>
-        public XmlSchemaGroup FindGroup(string name)
-        {
-            if (name != null)
-            {
-                foreach (XmlSchemaObject schemaObject in schema.Groups.Values)
-                {
-                    XmlSchemaGroup group = schemaObject as XmlSchemaGroup;
-                    if (group != null)
-                    {
-                        if (group.Name == name)
-                        {
-                            return group;
-                        }
-                    }
-                }
-            }
-            return null;
-        }
-
-        /// <summary>
-        /// Takes the name and creates a qualified name using the namespace of this
-        /// schema.
-        /// </summary>
-        /// <remarks>If the name is of the form myprefix:mytype then the correct 
-        /// namespace is determined from the prefix. If the name is not of this
-        /// form then no prefix is added.</remarks>
-        public QualifiedName CreateQualifiedName(string name)
-        {
-            int index = name.IndexOf(":");
-            if (index >= 0)
-            {
-                string prefix = name.Substring(0, index);
-                name = name.Substring(index + 1);
-                foreach (XmlQualifiedName xmlQualifiedName in schema.Namespaces.ToArray())
-                {
-                    if (xmlQualifiedName.Name == prefix)
-                    {
-                        return new QualifiedName(name, xmlQualifiedName.Namespace, prefix);
-                    }
-                }
-            }
-
-            // Default behaviour just return the name with the namespace uri.
-            return new QualifiedName(name, namespaceUri);
-        }
-
-        /// <summary>
-        /// Converts the element to a complex type if possible.
-        /// </summary>
-        public XmlSchemaComplexType GetElementAsComplexType(XmlSchemaElement element)
-        {
-            XmlSchemaComplexType complexType = element.SchemaType as XmlSchemaComplexType;
-            if (complexType == null)
-            {
-                complexType = FindNamedType(schema, element.SchemaTypeName);
-            }
-            return complexType;
-        }
-
-        /// <summary>
-        /// Handler for schema validation errors.
-        /// </summary>
-        void SchemaValidation(object source, ValidationEventArgs e)
-        {
-            // Do nothing.
-        }
-
-        /// <summary>
-        /// Loads the schema.
-        /// </summary>
-        void ReadSchema(XmlReader reader)
-        {
-            try
-            {
-                schema = XmlSchema.Read(reader, new ValidationEventHandler(SchemaValidation));
-                schema.Compile(new ValidationEventHandler(SchemaValidation));
-
-                namespaceUri = schema.TargetNamespace;
-            }
-            finally
-            {
-                reader.Close();
-            }
-        }
-
-        void ReadSchema(string baseUri, TextReader reader)
-        {
-            XmlTextReader xmlReader = new XmlTextReader(baseUri, reader);
-
-            // Setting the resolver to null allows us to
-            // load the xhtml1-strict.xsd without any exceptions if
-            // the referenced dtds exist in the same folder as the .xsd
-            // file.  If this is not set to null the dtd files are looked
-            // for in the assembly's folder.
-            xmlReader.XmlResolver = null;
-            ReadSchema(xmlReader);
-        }
-
-        /// <summary>
-        /// Finds an element in the schema.
-        /// </summary>
-        /// <remarks>
-        /// Only looks at the elements that are defined in the 
-        /// root of the schema so it will not find any elements
-        /// that are defined inside any complex types.
-        /// </remarks>
-        XmlSchemaElement FindElement(XmlQualifiedName name)
-        {
-            XmlSchemaElement matchedElement = null;
-            foreach (XmlSchemaElement element in schema.Elements.Values)
-            {
-                if (name.Equals(element.QualifiedName))
-                {
-                    matchedElement = element;
-                    break;
-                }
-            }
-
-            return matchedElement;
-        }
-
-        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaElement element, string prefix)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            XmlSchemaComplexType complexType = GetElementAsComplexType(element);
-
-            if (complexType != null)
-            {
-                data = GetChildElementCompletionData(complexType, prefix);
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaComplexType complexType, string prefix)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            XmlSchemaSequence sequence = complexType.Particle as XmlSchemaSequence;
-            XmlSchemaChoice choice = complexType.Particle as XmlSchemaChoice;
-            XmlSchemaGroupRef groupRef = complexType.Particle as XmlSchemaGroupRef;
-            XmlSchemaComplexContent complexContent = complexType.ContentModel as XmlSchemaComplexContent;
-            XmlSchemaAll all = complexType.Particle as XmlSchemaAll;
-
-            if (sequence != null)
-            {
-                data = GetChildElementCompletionData(sequence.Items, prefix);
-            }
-            else if (choice != null)
-            {
-                data = GetChildElementCompletionData(choice.Items, prefix);
-            }
-            else if (complexContent != null)
-            {
-                data = GetChildElementCompletionData(complexContent, prefix);
-            }
-            else if (groupRef != null)
-            {
-                data = GetChildElementCompletionData(groupRef, prefix);
-            }
-            else if (all != null)
-            {
-                data = GetChildElementCompletionData(all.Items, prefix);
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaObjectCollection items, string prefix)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            foreach (XmlSchemaObject schemaObject in items)
-            {
-
-                XmlSchemaElement childElement = schemaObject as XmlSchemaElement;
-                XmlSchemaSequence childSequence = schemaObject as XmlSchemaSequence;
-                XmlSchemaChoice childChoice = schemaObject as XmlSchemaChoice;
-                XmlSchemaGroupRef groupRef = schemaObject as XmlSchemaGroupRef;
-
-                if (childElement != null)
-                {
-                    string name = childElement.Name;
-                    if (name == null)
-                    {
-                        name = childElement.RefName.Name;
-                        XmlSchemaElement element = FindElement(childElement.RefName);
-                        if (element != null)
-                        {
-                            if (element.IsAbstract)
-                            {
-                                AddSubstitionGroupElements(data, element.QualifiedName, prefix);
-                            }
-                            else
-                            {
-                                AddElement(data, name, prefix, element.Annotation);
-                            }
-                        }
-                        else
-                        {
-                            AddElement(data, name, prefix, childElement.Annotation);
-                        }
-                    }
-                    else
-                    {
-                        AddElement(data, name, prefix, childElement.Annotation);
-                    }
-                }
-                else if (childSequence != null)
-                {
-                    AddElements(data, GetChildElementCompletionData(childSequence.Items, prefix));
-                }
-                else if (childChoice != null)
-                {
-                    AddElements(data, GetChildElementCompletionData(childChoice.Items, prefix));
-                }
-                else if (groupRef != null)
-                {
-                    AddElements(data, GetChildElementCompletionData(groupRef, prefix));
-                }
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaComplexContent complexContent, string prefix)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            XmlSchemaComplexContentExtension extension = complexContent.Content as XmlSchemaComplexContentExtension;
-            if (extension != null)
-            {
-                data = GetChildElementCompletionData(extension, prefix);
-            }
-            else
-            {
-                XmlSchemaComplexContentRestriction restriction = complexContent.Content as XmlSchemaComplexContentRestriction;
-                if (restriction != null)
-                {
-                    data = GetChildElementCompletionData(restriction, prefix);
-                }
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaComplexContentExtension extension, string prefix)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            XmlSchemaComplexType complexType = FindNamedType(schema, extension.BaseTypeName);
-            if (complexType != null)
-            {
-                data = GetChildElementCompletionData(complexType, prefix);
-            }
-
-            // Add any elements.
-            if (extension.Particle != null)
-            {
-                XmlSchemaSequence sequence = extension.Particle as XmlSchemaSequence;
-                XmlSchemaChoice choice = extension.Particle as XmlSchemaChoice;
-                XmlSchemaGroupRef groupRef = extension.Particle as XmlSchemaGroupRef;
-
-                if (sequence != null)
-                {
-                    data.AddRange(GetChildElementCompletionData(sequence.Items, prefix));
-                }
-                else if (choice != null)
-                {
-                    data.AddRange(GetChildElementCompletionData(choice.Items, prefix));
-                }
-                else if (groupRef != null)
-                {
-                    data.AddRange(GetChildElementCompletionData(groupRef, prefix));
-                }
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaGroupRef groupRef, string prefix)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            XmlSchemaGroup group = FindGroup(groupRef.RefName.Name);
-            if (group != null)
-            {
-                XmlSchemaSequence sequence = group.Particle as XmlSchemaSequence;
-                XmlSchemaChoice choice = group.Particle as XmlSchemaChoice;
-
-                if (sequence != null)
-                {
-                    data = GetChildElementCompletionData(sequence.Items, prefix);
-                }
-                else if (choice != null)
-                {
-                    data = GetChildElementCompletionData(choice.Items, prefix);
-                }
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaComplexContentRestriction restriction, string prefix)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            // Add any elements.
-            if (restriction.Particle != null)
-            {
-                XmlSchemaSequence sequence = restriction.Particle as XmlSchemaSequence;
-                XmlSchemaChoice choice = restriction.Particle as XmlSchemaChoice;
-                XmlSchemaGroupRef groupRef = restriction.Particle as XmlSchemaGroupRef;
-
-                if (sequence != null)
-                {
-                    data = GetChildElementCompletionData(sequence.Items, prefix);
-                }
-                else if (choice != null)
-                {
-                    data = GetChildElementCompletionData(choice.Items, prefix);
-                }
-                else if (groupRef != null)
-                {
-                    data = GetChildElementCompletionData(groupRef, prefix);
-                }
-            }
-
-            return data;
-        }
-
-        /// <summary>
-        /// Adds an element completion data to the collection if it does not 
-        /// already exist.
-        /// </summary>
-        void AddElement(XmlCompletionDataCollection data, string name, string prefix, string documentation)
-        {
-            if (!data.Contains(name))
-            {
-                if (prefix.Length > 0)
-                {
-                    name = String.Concat(prefix, ":", name);
-                }
-                XmlCompletionData completionData = new XmlCompletionData(name, documentation);
-                data.Add(completionData);
-            }
-        }
-
-        /// <summary>
-        /// Adds an element completion data to the collection if it does not 
-        /// already exist.
-        /// </summary>
-        void AddElement(XmlCompletionDataCollection data, string name, string prefix, XmlSchemaAnnotation annotation)
-        {
-            // Get any annotation documentation.
-            string documentation = GetDocumentation(annotation);
-
-            AddElement(data, name, prefix, documentation);
-        }
-
-        /// <summary>
-        /// Adds elements to the collection if it does not already exist.
-        /// </summary>
-        void AddElements(XmlCompletionDataCollection lhs, XmlCompletionDataCollection rhs)
-        {
-            foreach (XmlCompletionData data in rhs)
-            {
-                if (!lhs.Contains(data))
-                {
-                    lhs.Add(data);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Gets the documentation from the annotation element.
-        /// </summary>
-        /// <remarks>
-        /// All documentation elements are added.  All text nodes inside
-        /// the documentation element are added.
-        /// </remarks>
-        string GetDocumentation(XmlSchemaAnnotation annotation)
-        {
-            string documentation = String.Empty;
-
-            if (annotation != null)
-            {
-                StringBuilder documentationBuilder = new StringBuilder();
-                foreach (XmlSchemaObject schemaObject in annotation.Items)
-                {
-                    XmlSchemaDocumentation schemaDocumentation = schemaObject as XmlSchemaDocumentation;
-                    if (schemaDocumentation != null)
-                    {
-                        foreach (XmlNode node in schemaDocumentation.Markup)
-                        {
-                            XmlText textNode = node as XmlText;
-                            if (textNode != null)
-                            {
-                                if (textNode.Data != null)
-                                {
-                                    if (textNode.Data.Length > 0)
-                                    {
-                                        documentationBuilder.Append(textNode.Data);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-
-                documentation = documentationBuilder.ToString();
-            }
-
-            return documentation;
-        }
-
-        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaElement element)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            XmlSchemaComplexType complexType = GetElementAsComplexType(element);
-
-            if (complexType != null)
-            {
-                data.AddRange(GetAttributeCompletionData(complexType));
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaComplexContentRestriction restriction)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            data.AddRange(GetAttributeCompletionData(restriction.Attributes));
-
-            XmlSchemaComplexType baseComplexType = FindNamedType(schema, restriction.BaseTypeName);
-            if (baseComplexType != null)
-            {
-                data.AddRange(GetAttributeCompletionData(baseComplexType));
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaComplexType complexType)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            data = GetAttributeCompletionData(complexType.Attributes);
-
-            // Add any complex content attributes.
-            XmlSchemaComplexContent complexContent = complexType.ContentModel as XmlSchemaComplexContent;
-            if (complexContent != null)
-            {
-                XmlSchemaComplexContentExtension extension = complexContent.Content as XmlSchemaComplexContentExtension;
-                XmlSchemaComplexContentRestriction restriction = complexContent.Content as XmlSchemaComplexContentRestriction;
-                if (extension != null)
-                {
-                    data.AddRange(GetAttributeCompletionData(extension));
-                }
-                else if (restriction != null)
-                {
-                    data.AddRange(GetAttributeCompletionData(restriction));
-                }
-            }
-            else
-            {
-                XmlSchemaSimpleContent simpleContent = complexType.ContentModel as XmlSchemaSimpleContent;
-                if (simpleContent != null)
-                {
-                    data.AddRange(GetAttributeCompletionData(simpleContent));
-                }
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaComplexContentExtension extension)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            data.AddRange(GetAttributeCompletionData(extension.Attributes));
-            XmlSchemaComplexType baseComplexType = FindNamedType(schema, extension.BaseTypeName);
-            if (baseComplexType != null)
-            {
-                data.AddRange(GetAttributeCompletionData(baseComplexType));
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaSimpleContent simpleContent)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            XmlSchemaSimpleContentExtension extension = simpleContent.Content as XmlSchemaSimpleContentExtension;
-            if (extension != null)
-            {
-                data.AddRange(GetAttributeCompletionData(extension));
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaSimpleContentExtension extension)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            data.AddRange(GetAttributeCompletionData(extension.Attributes));
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaObjectCollection attributes)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            foreach (XmlSchemaObject schemaObject in attributes)
-            {
-                XmlSchemaAttribute attribute = schemaObject as XmlSchemaAttribute;
-                XmlSchemaAttributeGroupRef attributeGroupRef = schemaObject as XmlSchemaAttributeGroupRef;
-                if (attribute != null)
-                {
-                    if (!IsProhibitedAttribute(attribute))
-                    {
-                        AddAttribute(data, attribute);
-                    }
-                    else
-                    {
-                        prohibitedAttributes.Add(attribute);
-                    }
-                }
-                else if (attributeGroupRef != null)
-                {
-                    data.AddRange(GetAttributeCompletionData(attributeGroupRef));
-                }
-            }
-            return data;
-        }
-
-        /// <summary>
-        /// Checks that the attribute is prohibited or has been flagged
-        /// as prohibited previously. 
-        /// </summary>
-        bool IsProhibitedAttribute(XmlSchemaAttribute attribute)
-        {
-            bool prohibited = false;
-            if (attribute.Use == XmlSchemaUse.Prohibited)
-            {
-                prohibited = true;
-            }
-            else
-            {
-                foreach (XmlSchemaAttribute prohibitedAttribute in prohibitedAttributes)
-                {
-                    if (prohibitedAttribute.QualifiedName == attribute.QualifiedName)
-                    {
-                        prohibited = true;
-                        break;
-                    }
-                }
-            }
-
-            return prohibited;
-        }
-
-        /// <summary>
-        /// Adds an attribute to the completion data collection.
-        /// </summary>
-        /// <remarks>
-        /// Note the special handling of xml:lang attributes.
-        /// </remarks>
-        void AddAttribute(XmlCompletionDataCollection data, XmlSchemaAttribute attribute)
-        {
-            string name = attribute.Name;
-            if (name == null)
-            {
-                if (attribute.RefName.Namespace == "http://www.w3.org/XML/1998/namespace")
-                {
-                    name = String.Concat("xml:", attribute.RefName.Name);
-                }
-            }
-
-            if (name != null)
-            {
-                string documentation = GetDocumentation(attribute.Annotation);
-                XmlCompletionData completionData = new XmlCompletionData(name, documentation, XmlCompletionData.DataType.XmlAttribute);
-                data.Add(completionData);
-            }
-        }
-
-        /// <summary>
-        /// Gets attribute completion data from a group ref.
-        /// </summary>
-        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaAttributeGroupRef groupRef)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-            XmlSchemaAttributeGroup group = FindAttributeGroup(schema, groupRef.RefName.Name);
-            if (group != null)
-            {
-                data = GetAttributeCompletionData(group.Attributes);
-            }
-
-            return data;
-        }
-
-        static XmlSchemaComplexType FindNamedType(XmlSchema schema, XmlQualifiedName name)
-        {
-            XmlSchemaComplexType matchedComplexType = null;
-
-            if (name != null)
-            {
-                foreach (XmlSchemaObject schemaObject in schema.Items)
-                {
-                    XmlSchemaComplexType complexType = schemaObject as XmlSchemaComplexType;
-                    if (complexType != null)
-                    {
-                        if (complexType.QualifiedName == name)
-                        {
-                            matchedComplexType = complexType;
-                            break;
-                        }
-                    }
-                }
-
-                // Try included schemas.
-                if (matchedComplexType == null)
-                {
-                    foreach (XmlSchemaExternal external in schema.Includes)
-                    {
-                        XmlSchemaInclude include = external as XmlSchemaInclude;
-                        if (include != null)
-                        {
-                            if (include.Schema != null)
-                            {
-                                matchedComplexType = FindNamedType(include.Schema, name);
-                            }
-                        }
-                    }
-                }
-            }
-
-            return matchedComplexType;
-        }
-
-        /// <summary>
-        /// Finds an element that matches the specified <paramref name="name"/>
-        /// from the children of the given <paramref name="element"/>.
-        /// </summary>
-        XmlSchemaElement FindChildElement(XmlSchemaElement element, QualifiedName name)
-        {
-            XmlSchemaElement matchedElement = null;
-
-            XmlSchemaComplexType complexType = GetElementAsComplexType(element);
-            if (complexType != null)
-            {
-                matchedElement = FindChildElement(complexType, name);
-            }
-
-            return matchedElement;
-        }
-
-        XmlSchemaElement FindChildElement(XmlSchemaComplexType complexType, QualifiedName name)
-        {
-            XmlSchemaElement matchedElement = null;
-
-            XmlSchemaSequence sequence = complexType.Particle as XmlSchemaSequence;
-            XmlSchemaChoice choice = complexType.Particle as XmlSchemaChoice;
-            XmlSchemaGroupRef groupRef = complexType.Particle as XmlSchemaGroupRef;
-            XmlSchemaAll all = complexType.Particle as XmlSchemaAll;
-            XmlSchemaComplexContent complexContent = complexType.ContentModel as XmlSchemaComplexContent;
-
-            if (sequence != null)
-            {
-                matchedElement = FindElement(sequence.Items, name);
-            }
-            else if (choice != null)
-            {
-                matchedElement = FindElement(choice.Items, name);
-            }
-            else if (complexContent != null)
-            {
-                XmlSchemaComplexContentExtension extension = complexContent.Content as XmlSchemaComplexContentExtension;
-                XmlSchemaComplexContentRestriction restriction = complexContent.Content as XmlSchemaComplexContentRestriction;
-                if (extension != null)
-                {
-                    matchedElement = FindChildElement(extension, name);
-                }
-                else if (restriction != null)
-                {
-                    matchedElement = FindChildElement(restriction, name);
-                }
-            }
-            else if (groupRef != null)
-            {
-                matchedElement = FindElement(groupRef, name);
-            }
-            else if (all != null)
-            {
-                matchedElement = FindElement(all.Items, name);
-            }
-
-            return matchedElement;
-        }
-
-        /// <summary>
-        /// Finds the named child element contained in the extension element.
-        /// </summary>
-        XmlSchemaElement FindChildElement(XmlSchemaComplexContentExtension extension, QualifiedName name)
-        {
-            XmlSchemaElement matchedElement = null;
-
-            XmlSchemaComplexType complexType = FindNamedType(schema, extension.BaseTypeName);
-            if (complexType != null)
-            {
-                matchedElement = FindChildElement(complexType, name);
-
-                if (matchedElement == null)
-                {
-
-                    XmlSchemaSequence sequence = extension.Particle as XmlSchemaSequence;
-                    XmlSchemaChoice choice = extension.Particle as XmlSchemaChoice;
-                    XmlSchemaGroupRef groupRef = extension.Particle as XmlSchemaGroupRef;
-
-                    if (sequence != null)
-                    {
-                        matchedElement = FindElement(sequence.Items, name);
-                    }
-                    else if (choice != null)
-                    {
-                        matchedElement = FindElement(choice.Items, name);
-                    }
-                    else if (groupRef != null)
-                    {
-                        matchedElement = FindElement(groupRef, name);
-                    }
-                }
-            }
-
-            return matchedElement;
-        }
-
-        /// <summary>
-        /// Finds the named child element contained in the restriction element.
-        /// </summary>
-        XmlSchemaElement FindChildElement(XmlSchemaComplexContentRestriction restriction, QualifiedName name)
-        {
-            XmlSchemaElement matchedElement = null;
-            XmlSchemaSequence sequence = restriction.Particle as XmlSchemaSequence;
-            XmlSchemaGroupRef groupRef = restriction.Particle as XmlSchemaGroupRef;
-
-            if (sequence != null)
-            {
-                matchedElement = FindElement(sequence.Items, name);
-            }
-            else if (groupRef != null)
-            {
-                matchedElement = FindElement(groupRef, name);
-            }
-
-            return matchedElement;
-        }
-
-        /// <summary>
-        /// Finds the element in the collection of schema objects.
-        /// </summary>
-        XmlSchemaElement FindElement(XmlSchemaObjectCollection items, QualifiedName name)
-        {
-            XmlSchemaElement matchedElement = null;
-
-            foreach (XmlSchemaObject schemaObject in items)
-            {
-                XmlSchemaElement element = schemaObject as XmlSchemaElement;
-                XmlSchemaSequence sequence = schemaObject as XmlSchemaSequence;
-                XmlSchemaChoice choice = schemaObject as XmlSchemaChoice;
-                XmlSchemaGroupRef groupRef = schemaObject as XmlSchemaGroupRef;
-
-                if (element != null)
-                {
-                    if (element.Name != null)
-                    {
-                        if (name.Name == element.Name)
-                        {
-                            matchedElement = element;
-                        }
-                    }
-                    else if (element.RefName != null)
-                    {
-                        if (name.Name == element.RefName.Name)
-                        {
-                            matchedElement = FindElement(element.RefName);
-                        }
-                        else
-                        {
-                            // Abstract element?
-                            XmlSchemaElement abstractElement = FindElement(element.RefName);
-                            if (abstractElement != null && abstractElement.IsAbstract)
-                            {
-                                matchedElement = FindSubstitutionGroupElement(abstractElement.QualifiedName, name);
-                            }
-                        }
-                    }
-                }
-                else if (sequence != null)
-                {
-                    matchedElement = FindElement(sequence.Items, name);
-                }
-                else if (choice != null)
-                {
-                    matchedElement = FindElement(choice.Items, name);
-                }
-                else if (groupRef != null)
-                {
-                    matchedElement = FindElement(groupRef, name);
-                }
-
-                // Did we find a match?
-                if (matchedElement != null)
-                {
-                    break;
-                }
-            }
-
-            return matchedElement;
-        }
-
-        XmlSchemaElement FindElement(XmlSchemaGroupRef groupRef, QualifiedName name)
-        {
-            XmlSchemaElement matchedElement = null;
-
-            XmlSchemaGroup group = FindGroup(groupRef.RefName.Name);
-            if (group != null)
-            {
-                XmlSchemaSequence sequence = group.Particle as XmlSchemaSequence;
-                XmlSchemaChoice choice = group.Particle as XmlSchemaChoice;
-
-                if (sequence != null)
-                {
-                    matchedElement = FindElement(sequence.Items, name);
-                }
-                else if (choice != null)
-                {
-                    matchedElement = FindElement(choice.Items, name);
-                }
-            }
-
-            return matchedElement;
-        }
-
-        static XmlSchemaAttributeGroup FindAttributeGroup(XmlSchema schema, string name)
-        {
-            XmlSchemaAttributeGroup matchedGroup = null;
-
-            if (name != null)
-            {
-                foreach (XmlSchemaObject schemaObject in schema.Items)
-                {
-
-                    XmlSchemaAttributeGroup group = schemaObject as XmlSchemaAttributeGroup;
-                    if (group != null)
-                    {
-                        if (group.Name == name)
-                        {
-                            matchedGroup = group;
-                            break;
-                        }
-                    }
-                }
-
-                // Try included schemas.
-                if (matchedGroup == null)
-                {
-                    foreach (XmlSchemaExternal external in schema.Includes)
-                    {
-                        XmlSchemaInclude include = external as XmlSchemaInclude;
-                        if (include != null)
-                        {
-                            if (include.Schema != null)
-                            {
-                                matchedGroup = FindAttributeGroup(include.Schema, name);
-                            }
-                        }
-                    }
-                }
-            }
-
-            return matchedGroup;
-        }
-
-        XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaElement element, string name)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            XmlSchemaComplexType complexType = GetElementAsComplexType(element);
-            if (complexType != null)
-            {
-                XmlSchemaAttribute attribute = FindAttribute(complexType, name);
-                if (attribute != null)
-                {
-                    data.AddRange(GetAttributeValueCompletionData(attribute));
-                }
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaAttribute attribute)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            if (attribute.SchemaType != null)
-            {
-                XmlSchemaSimpleTypeRestriction simpleTypeRestriction = attribute.SchemaType.Content as XmlSchemaSimpleTypeRestriction;
-                if (simpleTypeRestriction != null)
-                {
-                    data.AddRange(GetAttributeValueCompletionData(simpleTypeRestriction));
-                }
-            }
-            else if (attribute.AttributeSchemaType != null)
-            {
-                XmlSchemaSimpleType simpleType = attribute.AttributeSchemaType as XmlSchemaSimpleType;
-
-                if (simpleType != null)
-                {
-                    if (simpleType.Name == "boolean")
-                    {
-                        data.AddRange(GetBooleanAttributeValueCompletionData());
-                    }
-                    else
-                    {
-                        data.AddRange(GetAttributeValueCompletionData(simpleType));
-                    }
-                }
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaSimpleTypeRestriction simpleTypeRestriction)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            foreach (XmlSchemaObject schemaObject in simpleTypeRestriction.Facets)
-            {
-                XmlSchemaEnumerationFacet enumFacet = schemaObject as XmlSchemaEnumerationFacet;
-                if (enumFacet != null)
-                {
-                    AddAttributeValue(data, enumFacet.Value, enumFacet.Annotation);
-                }
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaSimpleTypeUnion union)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            foreach (XmlSchemaObject schemaObject in union.BaseTypes)
-            {
-                XmlSchemaSimpleType simpleType = schemaObject as XmlSchemaSimpleType;
-                if (simpleType != null)
-                {
-                    data.AddRange(GetAttributeValueCompletionData(simpleType));
-                }
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaSimpleType simpleType)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            XmlSchemaSimpleTypeRestriction simpleTypeRestriction = simpleType.Content as XmlSchemaSimpleTypeRestriction;
-            XmlSchemaSimpleTypeUnion union = simpleType.Content as XmlSchemaSimpleTypeUnion;
-            XmlSchemaSimpleTypeList list = simpleType.Content as XmlSchemaSimpleTypeList;
-
-            if (simpleTypeRestriction != null)
-            {
-                data.AddRange(GetAttributeValueCompletionData(simpleTypeRestriction));
-            }
-            else if (union != null)
-            {
-                data.AddRange(GetAttributeValueCompletionData(union));
-            }
-            else if (list != null)
-            {
-                data.AddRange(GetAttributeValueCompletionData(list));
-            }
-
-            return data;
-        }
-
-        XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaSimpleTypeList list)
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            if (list.ItemType != null)
-            {
-                data.AddRange(GetAttributeValueCompletionData(list.ItemType));
-            }
-            else if (list.ItemTypeName != null)
-            {
-                XmlSchemaSimpleType simpleType = FindSimpleType(list.ItemTypeName);
-                if (simpleType != null)
-                {
-                    data.AddRange(GetAttributeValueCompletionData(simpleType));
-                }
-            }
-
-            return data;
-        }
-
-        /// <summary>
-        /// Gets the set of attribute values for an xs:boolean type.
-        /// </summary>
-        XmlCompletionDataCollection GetBooleanAttributeValueCompletionData()
-        {
-            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
-
-            AddAttributeValue(data, "0");
-            AddAttributeValue(data, "1");
-            AddAttributeValue(data, "true");
-            AddAttributeValue(data, "false");
-
-            return data;
-        }
-
-        XmlSchemaAttribute FindAttribute(XmlSchemaComplexType complexType, string name)
-        {
-            XmlSchemaAttribute matchedAttribute = null;
-
-            matchedAttribute = FindAttribute(complexType.Attributes, name);
-
-            if (matchedAttribute == null)
-            {
-                XmlSchemaComplexContent complexContent = complexType.ContentModel as XmlSchemaComplexContent;
-                if (complexContent != null)
-                {
-                    matchedAttribute = FindAttribute(complexContent, name);
-                }
-            }
-
-            return matchedAttribute;
-        }
-
-        XmlSchemaAttribute FindAttribute(XmlSchemaObjectCollection schemaObjects, string name)
-        {
-            XmlSchemaAttribute matchedAttribute = null;
-
-            foreach (XmlSchemaObject schemaObject in schemaObjects)
-            {
-                XmlSchemaAttribute attribute = schemaObject as XmlSchemaAttribute;
-                XmlSchemaAttributeGroupRef groupRef = schemaObject as XmlSchemaAttributeGroupRef;
-
-                if (attribute != null)
-                {
-                    if (attribute.Name == name)
-                    {
-                        matchedAttribute = attribute;
-                        break;
-                    }
-                }
-                else if (groupRef != null)
-                {
-                    matchedAttribute = FindAttribute(groupRef, name);
-                    if (matchedAttribute != null)
-                    {
-                        break;
-                    }
-                }
-            }
-
-            return matchedAttribute;
-        }
-
-        XmlSchemaAttribute FindAttribute(XmlSchemaAttributeGroupRef groupRef, string name)
-        {
-            XmlSchemaAttribute matchedAttribute = null;
-
-            if (groupRef.RefName != null)
-            {
-                XmlSchemaAttributeGroup group = FindAttributeGroup(schema, groupRef.RefName.Name);
-                if (group != null)
-                {
-                    matchedAttribute = FindAttribute(group.Attributes, name);
-                }
-            }
-
-            return matchedAttribute;
-        }
-
-        XmlSchemaAttribute FindAttribute(XmlSchemaComplexContent complexContent, string name)
-        {
-            XmlSchemaAttribute matchedAttribute = null;
-
-            XmlSchemaComplexContentExtension extension = complexContent.Content as XmlSchemaComplexContentExtension;
-            XmlSchemaComplexContentRestriction restriction = complexContent.Content as XmlSchemaComplexContentRestriction;
-
-            if (extension != null)
-            {
-                matchedAttribute = FindAttribute(extension, name);
-            }
-            else if (restriction != null)
-            {
-                matchedAttribute = FindAttribute(restriction, name);
-            }
-
-            return matchedAttribute;
-        }
-
-        XmlSchemaAttribute FindAttribute(XmlSchemaComplexContentExtension extension, string name)
-        {
-            return FindAttribute(extension.Attributes, name);
-        }
-
-        XmlSchemaAttribute FindAttribute(XmlSchemaComplexContentRestriction restriction, string name)
-        {
-            XmlSchemaAttribute matchedAttribute = FindAttribute(restriction.Attributes, name);
-
-            if (matchedAttribute == null)
-            {
-                XmlSchemaComplexType complexType = FindNamedType(schema, restriction.BaseTypeName);
-                if (complexType != null)
-                {
-                    matchedAttribute = FindAttribute(complexType, name);
-                }
-            }
-
-            return matchedAttribute;
-        }
-
-        /// <summary>
-        /// Adds an attribute value to the completion data collection.
-        /// </summary>
-        void AddAttributeValue(XmlCompletionDataCollection data, string valueText)
-        {
-            XmlCompletionData completionData = new XmlCompletionData(valueText, XmlCompletionData.DataType.XmlAttributeValue);
-            data.Add(completionData);
-        }
-
-        /// <summary>
-        /// Adds an attribute value to the completion data collection.
-        /// </summary>
-        void AddAttributeValue(XmlCompletionDataCollection data, string valueText, XmlSchemaAnnotation annotation)
-        {
-            string documentation = GetDocumentation(annotation);
-            XmlCompletionData completionData = new XmlCompletionData(valueText, documentation, XmlCompletionData.DataType.XmlAttributeValue);
-            data.Add(completionData);
-        }
-
-        /// <summary>
-        /// Adds an attribute value to the completion data collection.
-        /// </summary>
-        void AddAttributeValue(XmlCompletionDataCollection data, string valueText, string description)
-        {
-            XmlCompletionData completionData = new XmlCompletionData(valueText, description, XmlCompletionData.DataType.XmlAttributeValue);
-            data.Add(completionData);
-        }
-
-        XmlSchemaSimpleType FindSimpleType(XmlQualifiedName name)
-        {
-            XmlSchemaSimpleType matchedSimpleType = null;
-
-            foreach (XmlSchemaObject schemaObject in schema.SchemaTypes.Values)
-            {
-                XmlSchemaSimpleType simpleType = schemaObject as XmlSchemaSimpleType;
-                if (simpleType != null)
-                {
-                    if (simpleType.QualifiedName == name)
-                    {
-                        matchedSimpleType = simpleType;
-                        break;
-                    }
-                }
-            }
-
-            return matchedSimpleType;
-        }
-
-        /// <summary>
-        /// Adds any elements that have the specified substitution group.
-        /// </summary>
-        void AddSubstitionGroupElements(XmlCompletionDataCollection data, XmlQualifiedName group, string prefix)
-        {
-            foreach (XmlSchemaElement element in schema.Elements.Values)
-            {
-                if (element.SubstitutionGroup == group)
-                {
-                    AddElement(data, element.Name, prefix, element.Annotation);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Looks for the substitution group element of the specified name.
-        /// </summary>
-        XmlSchemaElement FindSubstitutionGroupElement(XmlQualifiedName group, QualifiedName name)
-        {
-            XmlSchemaElement matchedElement = null;
-
-            foreach (XmlSchemaElement element in schema.Elements.Values)
-            {
-                if (element.SubstitutionGroup == group)
-                {
-                    if (element.Name != null)
-                    {
-                        if (element.Name == name.Name)
-                        {
-                            matchedElement = element;
-                            break;
-                        }
-                    }
-                }
-            }
-
-            return matchedElement;
-        }
-    }
-}

Copied: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionData.cs (from rev 7850, trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionData.cs)
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionData.cs	                        (rev 0)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionData.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,1607 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
+// Copyright 2002-2010 by
+//
+//  AlphaSierraPapa, Christoph Wille
+//  Vordernberger Strasse 27/8
+//  A-8700 Leoben
+//  Austria
+//
+//  email: office at alphasierrapapa.com
+//  court of jurisdiction: Landesgericht Leoben
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using ICSharpCode.TextEditor.Gui.CompletionWindow;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Xml;
+using System.Xml.Schema;
+
+namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
+{
+    /// <summary>
+    /// Holds the completion (intellisense) data for an xml schema.
+    /// </summary>
+    /// <remarks>
+    /// The XmlSchema class throws an exception if we attempt to load 
+    /// the xhtml1-strict.xsd schema.  It does not like the fact that
+    /// this schema redefines the xml namespace, even though this is
+    /// allowed by the w3.org specification.
+    /// </remarks>
+    public class XmlSchemaCompletionData
+    {
+        string namespaceUri = String.Empty;
+        XmlSchema schema;
+        string fileName = String.Empty;
+        bool readOnly = false;
+
+        /// <summary>
+        /// Stores attributes that have been prohibited whilst the code
+        /// generates the attribute completion data.
+        /// </summary>
+        XmlSchemaObjectCollection prohibitedAttributes = new XmlSchemaObjectCollection();
+
+        public XmlSchemaCompletionData()
+        {
+        }
+
+        /// <summary>
+        /// Creates completion data from the schema passed in 
+        /// via the reader object.
+        /// </summary>
+        public XmlSchemaCompletionData(TextReader reader)
+        {
+            ReadSchema(String.Empty, reader);
+        }
+
+        /// <summary>
+        /// Creates completion data from the schema passed in 
+        /// via the reader object.
+        /// </summary>
+        public XmlSchemaCompletionData(XmlTextReader reader)
+        {
+            reader.XmlResolver = null;
+            ReadSchema(reader);
+        }
+
+        /// <summary>
+        /// Creates the completion data from the specified schema file.
+        /// </summary>
+        public XmlSchemaCompletionData(string fileName)
+            : this(String.Empty, fileName)
+        {
+        }
+
+        /// <summary>
+        /// Creates the completion data from the specified schema file and uses
+        /// the specified baseUri to resolve any referenced schemas.
+        /// </summary>
+        public XmlSchemaCompletionData(string baseUri, string fileName)
+        {
+            StreamReader reader = new StreamReader(fileName, true);
+            ReadSchema(baseUri, reader);
+            this.fileName = fileName;
+        }
+
+        /// <summary>
+        /// Gets the schema.
+        /// </summary>
+        public XmlSchema Schema
+        {
+            get
+            {
+                return schema;
+            }
+        }
+
+        /// <summary>
+        /// Read only schemas are those that are installed with 
+        /// SharpDevelop.
+        /// </summary>
+        public bool ReadOnly
+        {
+            get
+            {
+                return readOnly;
+            }
+
+            set
+            {
+                readOnly = value;
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets the schema's file name.
+        /// </summary>
+        public string FileName
+        {
+            get
+            {
+                return fileName;
+            }
+            set
+            {
+                fileName = value;
+            }
+        }
+
+        /// <summary>
+        /// Gets the namespace URI for the schema.
+        /// </summary>
+        public string NamespaceUri
+        {
+            get
+            {
+                return namespaceUri;
+            }
+        }
+
+        /// <summary>
+        /// Converts the filename into a valid Uri.
+        /// </summary>
+        public static string GetUri(string fileName)
+        {
+            string uri = String.Empty;
+
+            if (fileName != null)
+            {
+                if (fileName.Length > 0)
+                {
+                    uri = String.Concat("file:///", fileName.Replace('\\', '/'));
+                }
+            }
+
+            return uri;
+        }
+
+        /// <summary>
+        /// Gets the possible root elements for an xml document using this schema.
+        /// </summary>
+        public ICompletionData[] GetElementCompletionData()
+        {
+            return GetElementCompletionData(String.Empty);
+        }
+
+        /// <summary>
+        /// Gets the possible root elements for an xml document using this schema.
+        /// </summary>
+        public ICompletionData[] GetElementCompletionData(string namespacePrefix)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            foreach (XmlSchemaElement element in schema.Elements.Values)
+            {
+                if (element.Name != null)
+                {
+                    AddElement(data, element.Name, namespacePrefix, element.Annotation);
+                }
+                else
+                {
+                    // Do not add reference element.
+                }
+            }
+
+            return data.ToArray();
+        }
+
+        /// <summary>
+        /// Gets the attribute completion data for the xml element that exists
+        /// at the end of the specified path.
+        /// </summary>
+        public ICompletionData[] GetAttributeCompletionData(XmlElementPath path)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            // Locate matching element.
+            XmlSchemaElement element = FindElement(path);
+
+            // Get completion data.
+            if (element != null)
+            {
+                prohibitedAttributes.Clear();
+                data = GetAttributeCompletionData(element);
+            }
+
+            return data.ToArray();
+        }
+
+        /// <summary>
+        /// Gets the child element completion data for the xml element that exists
+        /// at the end of the specified path.
+        /// </summary>
+        public ICompletionData[] GetChildElementCompletionData(XmlElementPath path)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            // Locate matching element.
+            XmlSchemaElement element = FindElement(path);
+
+            // Get completion data.
+            if (element != null)
+            {
+                data = GetChildElementCompletionData(element, path.Elements.LastPrefix);
+            }
+
+            return data.ToArray();
+        }
+
+        /// <summary>
+        /// Gets the autocomplete data for the specified attribute value.
+        /// </summary>
+        public ICompletionData[] GetAttributeValueCompletionData(XmlElementPath path, string name)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            // Locate matching element.
+            XmlSchemaElement element = FindElement(path);
+
+            // Get completion data.
+            if (element != null)
+            {
+                data = GetAttributeValueCompletionData(element, name);
+            }
+
+            return data.ToArray();
+        }
+
+        /// <summary>
+        /// Finds the element that exists at the specified path.
+        /// </summary>
+        /// <remarks>This method is not used when generating completion data,
+        /// but is a useful method when locating an element so we can jump
+        /// to its schema definition.</remarks>
+        /// <returns><see langword="null"/> if no element can be found.</returns>
+        public XmlSchemaElement FindElement(XmlElementPath path)
+        {
+            XmlSchemaElement element = null;
+            for (int i = 0; i < path.Elements.Count; ++i)
+            {
+                QualifiedName name = path.Elements[i];
+                if (i == 0)
+                {
+                    // Look for root element.
+                    element = FindElement(name);
+                    if (element == null)
+                    {
+                        break;
+                    }
+                }
+                else
+                {
+                    element = FindChildElement(element, name);
+                    if (element == null)
+                    {
+                        break;
+                    }
+                }
+            }
+            return element;
+        }
+
+        /// <summary>
+        /// Finds an element in the schema.
+        /// </summary>
+        /// <remarks>
+        /// Only looks at the elements that are defined in the 
+        /// root of the schema so it will not find any elements
+        /// that are defined inside any complex types.
+        /// </remarks>
+        public XmlSchemaElement FindElement(QualifiedName name)
+        {
+            foreach (XmlSchemaElement element in schema.Elements.Values)
+            {
+                if (name.Equals(element.QualifiedName))
+                {
+                    return element;
+                }
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// Finds the complex type with the specified name.
+        /// </summary>
+        public XmlSchemaComplexType FindComplexType(QualifiedName name)
+        {
+            XmlQualifiedName qualifiedName = new XmlQualifiedName(name.Name, name.Namespace);
+            return FindNamedType(schema, qualifiedName);
+        }
+
+        /// <summary>
+        /// Finds the specified attribute name given the element.
+        /// </summary>
+        /// <remarks>This method is not used when generating completion data,
+        /// but is a useful method when locating an attribute so we can jump
+        /// to its schema definition.</remarks>
+        /// <returns><see langword="null"/> if no attribute can be found.</returns>
+        public XmlSchemaAttribute FindAttribute(XmlSchemaElement element, string name)
+        {
+            XmlSchemaAttribute attribute = null;
+            XmlSchemaComplexType complexType = GetElementAsComplexType(element);
+            if (complexType != null)
+            {
+                attribute = FindAttribute(complexType, name);
+            }
+            return attribute;
+        }
+
+        /// <summary>
+        /// Finds the attribute group with the specified name.
+        /// </summary>
+        public XmlSchemaAttributeGroup FindAttributeGroup(string name)
+        {
+            return FindAttributeGroup(schema, name);
+        }
+
+        /// <summary>
+        /// Finds the simple type with the specified name.
+        /// </summary>
+        public XmlSchemaSimpleType FindSimpleType(string name)
+        {
+            XmlQualifiedName qualifiedName = new XmlQualifiedName(name, namespaceUri);
+            return FindSimpleType(qualifiedName);
+        }
+
+        /// <summary>
+        /// Finds the specified attribute in the schema. This method only checks
+        /// the attributes defined in the root of the schema.
+        /// </summary>
+        public XmlSchemaAttribute FindAttribute(string name)
+        {
+            foreach (XmlSchemaAttribute attribute in schema.Attributes.Values)
+            {
+                if (attribute.Name == name)
+                {
+                    return attribute;
+                }
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// Finds the schema group with the specified name.
+        /// </summary>
+        public XmlSchemaGroup FindGroup(string name)
+        {
+            if (name != null)
+            {
+                foreach (XmlSchemaObject schemaObject in schema.Groups.Values)
+                {
+                    XmlSchemaGroup group = schemaObject as XmlSchemaGroup;
+                    if (group != null)
+                    {
+                        if (group.Name == name)
+                        {
+                            return group;
+                        }
+                    }
+                }
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// Takes the name and creates a qualified name using the namespace of this
+        /// schema.
+        /// </summary>
+        /// <remarks>If the name is of the form myprefix:mytype then the correct 
+        /// namespace is determined from the prefix. If the name is not of this
+        /// form then no prefix is added.</remarks>
+        public QualifiedName CreateQualifiedName(string name)
+        {
+            int index = name.IndexOf(":");
+            if (index >= 0)
+            {
+                string prefix = name.Substring(0, index);
+                name = name.Substring(index + 1);
+                foreach (XmlQualifiedName xmlQualifiedName in schema.Namespaces.ToArray())
+                {
+                    if (xmlQualifiedName.Name == prefix)
+                    {
+                        return new QualifiedName(name, xmlQualifiedName.Namespace, prefix);
+                    }
+                }
+            }
+
+            // Default behaviour just return the name with the namespace uri.
+            return new QualifiedName(name, namespaceUri);
+        }
+
+        /// <summary>
+        /// Converts the element to a complex type if possible.
+        /// </summary>
+        public XmlSchemaComplexType GetElementAsComplexType(XmlSchemaElement element)
+        {
+            XmlSchemaComplexType complexType = element.SchemaType as XmlSchemaComplexType;
+            if (complexType == null)
+            {
+                complexType = FindNamedType(schema, element.SchemaTypeName);
+            }
+            return complexType;
+        }
+
+        /// <summary>
+        /// Handler for schema validation errors.
+        /// </summary>
+        void SchemaValidation(object source, ValidationEventArgs e)
+        {
+            // Do nothing.
+        }
+
+        /// <summary>
+        /// Loads the schema.
+        /// </summary>
+        void ReadSchema(XmlReader reader)
+        {
+            try
+            {
+                schema = XmlSchema.Read(reader, new ValidationEventHandler(SchemaValidation));
+                schema.Compile(new ValidationEventHandler(SchemaValidation));
+
+                namespaceUri = schema.TargetNamespace;
+            }
+            finally
+            {
+                reader.Close();
+            }
+        }
+
+        void ReadSchema(string baseUri, TextReader reader)
+        {
+            XmlTextReader xmlReader = new XmlTextReader(baseUri, reader);
+
+            // Setting the resolver to null allows us to
+            // load the xhtml1-strict.xsd without any exceptions if
+            // the referenced dtds exist in the same folder as the .xsd
+            // file.  If this is not set to null the dtd files are looked
+            // for in the assembly's folder.
+            xmlReader.XmlResolver = null;
+            ReadSchema(xmlReader);
+        }
+
+        /// <summary>
+        /// Finds an element in the schema.
+        /// </summary>
+        /// <remarks>
+        /// Only looks at the elements that are defined in the 
+        /// root of the schema so it will not find any elements
+        /// that are defined inside any complex types.
+        /// </remarks>
+        XmlSchemaElement FindElement(XmlQualifiedName name)
+        {
+            XmlSchemaElement matchedElement = null;
+            foreach (XmlSchemaElement element in schema.Elements.Values)
+            {
+                if (name.Equals(element.QualifiedName))
+                {
+                    matchedElement = element;
+                    break;
+                }
+            }
+
+            return matchedElement;
+        }
+
+        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaElement element, string prefix)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            XmlSchemaComplexType complexType = GetElementAsComplexType(element);
+
+            if (complexType != null)
+            {
+                data = GetChildElementCompletionData(complexType, prefix);
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaComplexType complexType, string prefix)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            XmlSchemaSequence sequence = complexType.Particle as XmlSchemaSequence;
+            XmlSchemaChoice choice = complexType.Particle as XmlSchemaChoice;
+            XmlSchemaGroupRef groupRef = complexType.Particle as XmlSchemaGroupRef;
+            XmlSchemaComplexContent complexContent = complexType.ContentModel as XmlSchemaComplexContent;
+            XmlSchemaAll all = complexType.Particle as XmlSchemaAll;
+
+            if (sequence != null)
+            {
+                data = GetChildElementCompletionData(sequence.Items, prefix);
+            }
+            else if (choice != null)
+            {
+                data = GetChildElementCompletionData(choice.Items, prefix);
+            }
+            else if (complexContent != null)
+            {
+                data = GetChildElementCompletionData(complexContent, prefix);
+            }
+            else if (groupRef != null)
+            {
+                data = GetChildElementCompletionData(groupRef, prefix);
+            }
+            else if (all != null)
+            {
+                data = GetChildElementCompletionData(all.Items, prefix);
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaObjectCollection items, string prefix)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            foreach (XmlSchemaObject schemaObject in items)
+            {
+
+                XmlSchemaElement childElement = schemaObject as XmlSchemaElement;
+                XmlSchemaSequence childSequence = schemaObject as XmlSchemaSequence;
+                XmlSchemaChoice childChoice = schemaObject as XmlSchemaChoice;
+                XmlSchemaGroupRef groupRef = schemaObject as XmlSchemaGroupRef;
+
+                if (childElement != null)
+                {
+                    string name = childElement.Name;
+                    if (name == null)
+                    {
+                        name = childElement.RefName.Name;
+                        XmlSchemaElement element = FindElement(childElement.RefName);
+                        if (element != null)
+                        {
+                            if (element.IsAbstract)
+                            {
+                                AddSubstitionGroupElements(data, element.QualifiedName, prefix);
+                            }
+                            else
+                            {
+                                AddElement(data, name, prefix, element.Annotation);
+                            }
+                        }
+                        else
+                        {
+                            AddElement(data, name, prefix, childElement.Annotation);
+                        }
+                    }
+                    else
+                    {
+                        AddElement(data, name, prefix, childElement.Annotation);
+                    }
+                }
+                else if (childSequence != null)
+                {
+                    AddElements(data, GetChildElementCompletionData(childSequence.Items, prefix));
+                }
+                else if (childChoice != null)
+                {
+                    AddElements(data, GetChildElementCompletionData(childChoice.Items, prefix));
+                }
+                else if (groupRef != null)
+                {
+                    AddElements(data, GetChildElementCompletionData(groupRef, prefix));
+                }
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaComplexContent complexContent, string prefix)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            XmlSchemaComplexContentExtension extension = complexContent.Content as XmlSchemaComplexContentExtension;
+            if (extension != null)
+            {
+                data = GetChildElementCompletionData(extension, prefix);
+            }
+            else
+            {
+                XmlSchemaComplexContentRestriction restriction = complexContent.Content as XmlSchemaComplexContentRestriction;
+                if (restriction != null)
+                {
+                    data = GetChildElementCompletionData(restriction, prefix);
+                }
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaComplexContentExtension extension, string prefix)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            XmlSchemaComplexType complexType = FindNamedType(schema, extension.BaseTypeName);
+            if (complexType != null)
+            {
+                data = GetChildElementCompletionData(complexType, prefix);
+            }
+
+            // Add any elements.
+            if (extension.Particle != null)
+            {
+                XmlSchemaSequence sequence = extension.Particle as XmlSchemaSequence;
+                XmlSchemaChoice choice = extension.Particle as XmlSchemaChoice;
+                XmlSchemaGroupRef groupRef = extension.Particle as XmlSchemaGroupRef;
+
+                if (sequence != null)
+                {
+                    data.AddRange(GetChildElementCompletionData(sequence.Items, prefix));
+                }
+                else if (choice != null)
+                {
+                    data.AddRange(GetChildElementCompletionData(choice.Items, prefix));
+                }
+                else if (groupRef != null)
+                {
+                    data.AddRange(GetChildElementCompletionData(groupRef, prefix));
+                }
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaGroupRef groupRef, string prefix)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            XmlSchemaGroup group = FindGroup(groupRef.RefName.Name);
+            if (group != null)
+            {
+                XmlSchemaSequence sequence = group.Particle as XmlSchemaSequence;
+                XmlSchemaChoice choice = group.Particle as XmlSchemaChoice;
+
+                if (sequence != null)
+                {
+                    data = GetChildElementCompletionData(sequence.Items, prefix);
+                }
+                else if (choice != null)
+                {
+                    data = GetChildElementCompletionData(choice.Items, prefix);
+                }
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetChildElementCompletionData(XmlSchemaComplexContentRestriction restriction, string prefix)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            // Add any elements.
+            if (restriction.Particle != null)
+            {
+                XmlSchemaSequence sequence = restriction.Particle as XmlSchemaSequence;
+                XmlSchemaChoice choice = restriction.Particle as XmlSchemaChoice;
+                XmlSchemaGroupRef groupRef = restriction.Particle as XmlSchemaGroupRef;
+
+                if (sequence != null)
+                {
+                    data = GetChildElementCompletionData(sequence.Items, prefix);
+                }
+                else if (choice != null)
+                {
+                    data = GetChildElementCompletionData(choice.Items, prefix);
+                }
+                else if (groupRef != null)
+                {
+                    data = GetChildElementCompletionData(groupRef, prefix);
+                }
+            }
+
+            return data;
+        }
+
+        /// <summary>
+        /// Adds an element completion data to the collection if it does not 
+        /// already exist.
+        /// </summary>
+        void AddElement(XmlCompletionDataCollection data, string name, string prefix, string documentation)
+        {
+            if (!data.Contains(name))
+            {
+                if (prefix.Length > 0)
+                {
+                    name = String.Concat(prefix, ":", name);
+                }
+                XmlCompletionData completionData = new XmlCompletionData(name, documentation);
+                data.Add(completionData);
+            }
+        }
+
+        /// <summary>
+        /// Adds an element completion data to the collection if it does not 
+        /// already exist.
+        /// </summary>
+        void AddElement(XmlCompletionDataCollection data, string name, string prefix, XmlSchemaAnnotation annotation)
+        {
+            // Get any annotation documentation.
+            string documentation = GetDocumentation(annotation);
+
+            AddElement(data, name, prefix, documentation);
+        }
+
+        /// <summary>
+        /// Adds elements to the collection if it does not already exist.
+        /// </summary>
+        void AddElements(XmlCompletionDataCollection lhs, XmlCompletionDataCollection rhs)
+        {
+            foreach (XmlCompletionData data in rhs)
+            {
+                if (!lhs.Contains(data))
+                {
+                    lhs.Add(data);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Gets the documentation from the annotation element.
+        /// </summary>
+        /// <remarks>
+        /// All documentation elements are added.  All text nodes inside
+        /// the documentation element are added.
+        /// </remarks>
+        string GetDocumentation(XmlSchemaAnnotation annotation)
+        {
+            string documentation = String.Empty;
+
+            if (annotation != null)
+            {
+                StringBuilder documentationBuilder = new StringBuilder();
+                foreach (XmlSchemaObject schemaObject in annotation.Items)
+                {
+                    XmlSchemaDocumentation schemaDocumentation = schemaObject as XmlSchemaDocumentation;
+                    if (schemaDocumentation != null)
+                    {
+                        foreach (XmlNode node in schemaDocumentation.Markup)
+                        {
+                            XmlText textNode = node as XmlText;
+                            if (textNode != null)
+                            {
+                                if (textNode.Data != null)
+                                {
+                                    if (textNode.Data.Length > 0)
+                                    {
+                                        documentationBuilder.Append(textNode.Data);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+
+                documentation = documentationBuilder.ToString();
+            }
+
+            return documentation;
+        }
+
+        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaElement element)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            XmlSchemaComplexType complexType = GetElementAsComplexType(element);
+
+            if (complexType != null)
+            {
+                data.AddRange(GetAttributeCompletionData(complexType));
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaComplexContentRestriction restriction)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            data.AddRange(GetAttributeCompletionData(restriction.Attributes));
+
+            XmlSchemaComplexType baseComplexType = FindNamedType(schema, restriction.BaseTypeName);
+            if (baseComplexType != null)
+            {
+                data.AddRange(GetAttributeCompletionData(baseComplexType));
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaComplexType complexType)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            data = GetAttributeCompletionData(complexType.Attributes);
+
+            // Add any complex content attributes.
+            XmlSchemaComplexContent complexContent = complexType.ContentModel as XmlSchemaComplexContent;
+            if (complexContent != null)
+            {
+                XmlSchemaComplexContentExtension extension = complexContent.Content as XmlSchemaComplexContentExtension;
+                XmlSchemaComplexContentRestriction restriction = complexContent.Content as XmlSchemaComplexContentRestriction;
+                if (extension != null)
+                {
+                    data.AddRange(GetAttributeCompletionData(extension));
+                }
+                else if (restriction != null)
+                {
+                    data.AddRange(GetAttributeCompletionData(restriction));
+                }
+            }
+            else
+            {
+                XmlSchemaSimpleContent simpleContent = complexType.ContentModel as XmlSchemaSimpleContent;
+                if (simpleContent != null)
+                {
+                    data.AddRange(GetAttributeCompletionData(simpleContent));
+                }
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaComplexContentExtension extension)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            data.AddRange(GetAttributeCompletionData(extension.Attributes));
+            XmlSchemaComplexType baseComplexType = FindNamedType(schema, extension.BaseTypeName);
+            if (baseComplexType != null)
+            {
+                data.AddRange(GetAttributeCompletionData(baseComplexType));
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaSimpleContent simpleContent)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            XmlSchemaSimpleContentExtension extension = simpleContent.Content as XmlSchemaSimpleContentExtension;
+            if (extension != null)
+            {
+                data.AddRange(GetAttributeCompletionData(extension));
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaSimpleContentExtension extension)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            data.AddRange(GetAttributeCompletionData(extension.Attributes));
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaObjectCollection attributes)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            foreach (XmlSchemaObject schemaObject in attributes)
+            {
+                XmlSchemaAttribute attribute = schemaObject as XmlSchemaAttribute;
+                XmlSchemaAttributeGroupRef attributeGroupRef = schemaObject as XmlSchemaAttributeGroupRef;
+                if (attribute != null)
+                {
+                    if (!IsProhibitedAttribute(attribute))
+                    {
+                        AddAttribute(data, attribute);
+                    }
+                    else
+                    {
+                        prohibitedAttributes.Add(attribute);
+                    }
+                }
+                else if (attributeGroupRef != null)
+                {
+                    data.AddRange(GetAttributeCompletionData(attributeGroupRef));
+                }
+            }
+            return data;
+        }
+
+        /// <summary>
+        /// Checks that the attribute is prohibited or has been flagged
+        /// as prohibited previously. 
+        /// </summary>
+        bool IsProhibitedAttribute(XmlSchemaAttribute attribute)
+        {
+            bool prohibited = false;
+            if (attribute.Use == XmlSchemaUse.Prohibited)
+            {
+                prohibited = true;
+            }
+            else
+            {
+                foreach (XmlSchemaAttribute prohibitedAttribute in prohibitedAttributes)
+                {
+                    if (prohibitedAttribute.QualifiedName == attribute.QualifiedName)
+                    {
+                        prohibited = true;
+                        break;
+                    }
+                }
+            }
+
+            return prohibited;
+        }
+
+        /// <summary>
+        /// Adds an attribute to the completion data collection.
+        /// </summary>
+        /// <remarks>
+        /// Note the special handling of xml:lang attributes.
+        /// </remarks>
+        void AddAttribute(XmlCompletionDataCollection data, XmlSchemaAttribute attribute)
+        {
+            string name = attribute.Name;
+            if (name == null)
+            {
+                if (attribute.RefName.Namespace == "http://www.w3.org/XML/1998/namespace")
+                {
+                    name = String.Concat("xml:", attribute.RefName.Name);
+                }
+            }
+
+            if (name != null)
+            {
+                string documentation = GetDocumentation(attribute.Annotation);
+                XmlCompletionData completionData = new XmlCompletionData(name, documentation, XmlCompletionData.DataType.XmlAttribute);
+                data.Add(completionData);
+            }
+        }
+
+        /// <summary>
+        /// Gets attribute completion data from a group ref.
+        /// </summary>
+        XmlCompletionDataCollection GetAttributeCompletionData(XmlSchemaAttributeGroupRef groupRef)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+            XmlSchemaAttributeGroup group = FindAttributeGroup(schema, groupRef.RefName.Name);
+            if (group != null)
+            {
+                data = GetAttributeCompletionData(group.Attributes);
+            }
+
+            return data;
+        }
+
+        static XmlSchemaComplexType FindNamedType(XmlSchema schema, XmlQualifiedName name)
+        {
+            XmlSchemaComplexType matchedComplexType = null;
+
+            if (name != null)
+            {
+                foreach (XmlSchemaObject schemaObject in schema.Items)
+                {
+                    XmlSchemaComplexType complexType = schemaObject as XmlSchemaComplexType;
+                    if (complexType != null)
+                    {
+                        if (complexType.QualifiedName == name)
+                        {
+                            matchedComplexType = complexType;
+                            break;
+                        }
+                    }
+                }
+
+                // Try included schemas.
+                if (matchedComplexType == null)
+                {
+                    foreach (XmlSchemaExternal external in schema.Includes)
+                    {
+                        XmlSchemaInclude include = external as XmlSchemaInclude;
+                        if (include != null)
+                        {
+                            if (include.Schema != null)
+                            {
+                                matchedComplexType = FindNamedType(include.Schema, name);
+                            }
+                        }
+                    }
+                }
+            }
+
+            return matchedComplexType;
+        }
+
+        /// <summary>
+        /// Finds an element that matches the specified <paramref name="name"/>
+        /// from the children of the given <paramref name="element"/>.
+        /// </summary>
+        XmlSchemaElement FindChildElement(XmlSchemaElement element, QualifiedName name)
+        {
+            XmlSchemaElement matchedElement = null;
+
+            XmlSchemaComplexType complexType = GetElementAsComplexType(element);
+            if (complexType != null)
+            {
+                matchedElement = FindChildElement(complexType, name);
+            }
+
+            return matchedElement;
+        }
+
+        XmlSchemaElement FindChildElement(XmlSchemaComplexType complexType, QualifiedName name)
+        {
+            XmlSchemaElement matchedElement = null;
+
+            XmlSchemaSequence sequence = complexType.Particle as XmlSchemaSequence;
+            XmlSchemaChoice choice = complexType.Particle as XmlSchemaChoice;
+            XmlSchemaGroupRef groupRef = complexType.Particle as XmlSchemaGroupRef;
+            XmlSchemaAll all = complexType.Particle as XmlSchemaAll;
+            XmlSchemaComplexContent complexContent = complexType.ContentModel as XmlSchemaComplexContent;
+
+            if (sequence != null)
+            {
+                matchedElement = FindElement(sequence.Items, name);
+            }
+            else if (choice != null)
+            {
+                matchedElement = FindElement(choice.Items, name);
+            }
+            else if (complexContent != null)
+            {
+                XmlSchemaComplexContentExtension extension = complexContent.Content as XmlSchemaComplexContentExtension;
+                XmlSchemaComplexContentRestriction restriction = complexContent.Content as XmlSchemaComplexContentRestriction;
+                if (extension != null)
+                {
+                    matchedElement = FindChildElement(extension, name);
+                }
+                else if (restriction != null)
+                {
+                    matchedElement = FindChildElement(restriction, name);
+                }
+            }
+            else if (groupRef != null)
+            {
+                matchedElement = FindElement(groupRef, name);
+            }
+            else if (all != null)
+            {
+                matchedElement = FindElement(all.Items, name);
+            }
+
+            return matchedElement;
+        }
+
+        /// <summary>
+        /// Finds the named child element contained in the extension element.
+        /// </summary>
+        XmlSchemaElement FindChildElement(XmlSchemaComplexContentExtension extension, QualifiedName name)
+        {
+            XmlSchemaElement matchedElement = null;
+
+            XmlSchemaComplexType complexType = FindNamedType(schema, extension.BaseTypeName);
+            if (complexType != null)
+            {
+                matchedElement = FindChildElement(complexType, name);
+
+                if (matchedElement == null)
+                {
+
+                    XmlSchemaSequence sequence = extension.Particle as XmlSchemaSequence;
+                    XmlSchemaChoice choice = extension.Particle as XmlSchemaChoice;
+                    XmlSchemaGroupRef groupRef = extension.Particle as XmlSchemaGroupRef;
+
+                    if (sequence != null)
+                    {
+                        matchedElement = FindElement(sequence.Items, name);
+                    }
+                    else if (choice != null)
+                    {
+                        matchedElement = FindElement(choice.Items, name);
+                    }
+                    else if (groupRef != null)
+                    {
+                        matchedElement = FindElement(groupRef, name);
+                    }
+                }
+            }
+
+            return matchedElement;
+        }
+
+        /// <summary>
+        /// Finds the named child element contained in the restriction element.
+        /// </summary>
+        XmlSchemaElement FindChildElement(XmlSchemaComplexContentRestriction restriction, QualifiedName name)
+        {
+            XmlSchemaElement matchedElement = null;
+            XmlSchemaSequence sequence = restriction.Particle as XmlSchemaSequence;
+            XmlSchemaGroupRef groupRef = restriction.Particle as XmlSchemaGroupRef;
+
+            if (sequence != null)
+            {
+                matchedElement = FindElement(sequence.Items, name);
+            }
+            else if (groupRef != null)
+            {
+                matchedElement = FindElement(groupRef, name);
+            }
+
+            return matchedElement;
+        }
+
+        /// <summary>
+        /// Finds the element in the collection of schema objects.
+        /// </summary>
+        XmlSchemaElement FindElement(XmlSchemaObjectCollection items, QualifiedName name)
+        {
+            XmlSchemaElement matchedElement = null;
+
+            foreach (XmlSchemaObject schemaObject in items)
+            {
+                XmlSchemaElement element = schemaObject as XmlSchemaElement;
+                XmlSchemaSequence sequence = schemaObject as XmlSchemaSequence;
+                XmlSchemaChoice choice = schemaObject as XmlSchemaChoice;
+                XmlSchemaGroupRef groupRef = schemaObject as XmlSchemaGroupRef;
+
+                if (element != null)
+                {
+                    if (element.Name != null)
+                    {
+                        if (name.Name == element.Name)
+                        {
+                            matchedElement = element;
+                        }
+                    }
+                    else if (element.RefName != null)
+                    {
+                        if (name.Name == element.RefName.Name)
+                        {
+                            matchedElement = FindElement(element.RefName);
+                        }
+                        else
+                        {
+                            // Abstract element?
+                            XmlSchemaElement abstractElement = FindElement(element.RefName);
+                            if (abstractElement != null && abstractElement.IsAbstract)
+                            {
+                                matchedElement = FindSubstitutionGroupElement(abstractElement.QualifiedName, name);
+                            }
+                        }
+                    }
+                }
+                else if (sequence != null)
+                {
+                    matchedElement = FindElement(sequence.Items, name);
+                }
+                else if (choice != null)
+                {
+                    matchedElement = FindElement(choice.Items, name);
+                }
+                else if (groupRef != null)
+                {
+                    matchedElement = FindElement(groupRef, name);
+                }
+
+                // Did we find a match?
+                if (matchedElement != null)
+                {
+                    break;
+                }
+            }
+
+            return matchedElement;
+        }
+
+        XmlSchemaElement FindElement(XmlSchemaGroupRef groupRef, QualifiedName name)
+        {
+            XmlSchemaElement matchedElement = null;
+
+            XmlSchemaGroup group = FindGroup(groupRef.RefName.Name);
+            if (group != null)
+            {
+                XmlSchemaSequence sequence = group.Particle as XmlSchemaSequence;
+                XmlSchemaChoice choice = group.Particle as XmlSchemaChoice;
+
+                if (sequence != null)
+                {
+                    matchedElement = FindElement(sequence.Items, name);
+                }
+                else if (choice != null)
+                {
+                    matchedElement = FindElement(choice.Items, name);
+                }
+            }
+
+            return matchedElement;
+        }
+
+        static XmlSchemaAttributeGroup FindAttributeGroup(XmlSchema schema, string name)
+        {
+            XmlSchemaAttributeGroup matchedGroup = null;
+
+            if (name != null)
+            {
+                foreach (XmlSchemaObject schemaObject in schema.Items)
+                {
+
+                    XmlSchemaAttributeGroup group = schemaObject as XmlSchemaAttributeGroup;
+                    if (group != null)
+                    {
+                        if (group.Name == name)
+                        {
+                            matchedGroup = group;
+                            break;
+                        }
+                    }
+                }
+
+                // Try included schemas.
+                if (matchedGroup == null)
+                {
+                    foreach (XmlSchemaExternal external in schema.Includes)
+                    {
+                        XmlSchemaInclude include = external as XmlSchemaInclude;
+                        if (include != null)
+                        {
+                            if (include.Schema != null)
+                            {
+                                matchedGroup = FindAttributeGroup(include.Schema, name);
+                            }
+                        }
+                    }
+                }
+            }
+
+            return matchedGroup;
+        }
+
+        XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaElement element, string name)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            XmlSchemaComplexType complexType = GetElementAsComplexType(element);
+            if (complexType != null)
+            {
+                XmlSchemaAttribute attribute = FindAttribute(complexType, name);
+                if (attribute != null)
+                {
+                    data.AddRange(GetAttributeValueCompletionData(attribute));
+                }
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaAttribute attribute)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            if (attribute.SchemaType != null)
+            {
+                XmlSchemaSimpleTypeRestriction simpleTypeRestriction = attribute.SchemaType.Content as XmlSchemaSimpleTypeRestriction;
+                if (simpleTypeRestriction != null)
+                {
+                    data.AddRange(GetAttributeValueCompletionData(simpleTypeRestriction));
+                }
+            }
+            else if (attribute.AttributeSchemaType != null)
+            {
+                XmlSchemaSimpleType simpleType = attribute.AttributeSchemaType as XmlSchemaSimpleType;
+
+                if (simpleType != null)
+                {
+                    if (simpleType.Name == "boolean")
+                    {
+                        data.AddRange(GetBooleanAttributeValueCompletionData());
+                    }
+                    else
+                    {
+                        data.AddRange(GetAttributeValueCompletionData(simpleType));
+                    }
+                }
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaSimpleTypeRestriction simpleTypeRestriction)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            foreach (XmlSchemaObject schemaObject in simpleTypeRestriction.Facets)
+            {
+                XmlSchemaEnumerationFacet enumFacet = schemaObject as XmlSchemaEnumerationFacet;
+                if (enumFacet != null)
+                {
+                    AddAttributeValue(data, enumFacet.Value, enumFacet.Annotation);
+                }
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaSimpleTypeUnion union)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            foreach (XmlSchemaObject schemaObject in union.BaseTypes)
+            {
+                XmlSchemaSimpleType simpleType = schemaObject as XmlSchemaSimpleType;
+                if (simpleType != null)
+                {
+                    data.AddRange(GetAttributeValueCompletionData(simpleType));
+                }
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaSimpleType simpleType)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            XmlSchemaSimpleTypeRestriction simpleTypeRestriction = simpleType.Content as XmlSchemaSimpleTypeRestriction;
+            XmlSchemaSimpleTypeUnion union = simpleType.Content as XmlSchemaSimpleTypeUnion;
+            XmlSchemaSimpleTypeList list = simpleType.Content as XmlSchemaSimpleTypeList;
+
+            if (simpleTypeRestriction != null)
+            {
+                data.AddRange(GetAttributeValueCompletionData(simpleTypeRestriction));
+            }
+            else if (union != null)
+            {
+                data.AddRange(GetAttributeValueCompletionData(union));
+            }
+            else if (list != null)
+            {
+                data.AddRange(GetAttributeValueCompletionData(list));
+            }
+
+            return data;
+        }
+
+        XmlCompletionDataCollection GetAttributeValueCompletionData(XmlSchemaSimpleTypeList list)
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            if (list.ItemType != null)
+            {
+                data.AddRange(GetAttributeValueCompletionData(list.ItemType));
+            }
+            else if (list.ItemTypeName != null)
+            {
+                XmlSchemaSimpleType simpleType = FindSimpleType(list.ItemTypeName);
+                if (simpleType != null)
+                {
+                    data.AddRange(GetAttributeValueCompletionData(simpleType));
+                }
+            }
+
+            return data;
+        }
+
+        /// <summary>
+        /// Gets the set of attribute values for an xs:boolean type.
+        /// </summary>
+        XmlCompletionDataCollection GetBooleanAttributeValueCompletionData()
+        {
+            XmlCompletionDataCollection data = new XmlCompletionDataCollection();
+
+            AddAttributeValue(data, "0");
+            AddAttributeValue(data, "1");
+            AddAttributeValue(data, "true");
+            AddAttributeValue(data, "false");
+
+            return data;
+        }
+
+        XmlSchemaAttribute FindAttribute(XmlSchemaComplexType complexType, string name)
+        {
+            XmlSchemaAttribute matchedAttribute = null;
+
+            matchedAttribute = FindAttribute(complexType.Attributes, name);
+
+            if (matchedAttribute == null)
+            {
+                XmlSchemaComplexContent complexContent = complexType.ContentModel as XmlSchemaComplexContent;
+                if (complexContent != null)
+                {
+                    matchedAttribute = FindAttribute(complexContent, name);
+                }
+            }
+
+            return matchedAttribute;
+        }
+
+        XmlSchemaAttribute FindAttribute(XmlSchemaObjectCollection schemaObjects, string name)
+        {
+            XmlSchemaAttribute matchedAttribute = null;
+
+            foreach (XmlSchemaObject schemaObject in schemaObjects)
+            {
+                XmlSchemaAttribute attribute = schemaObject as XmlSchemaAttribute;
+                XmlSchemaAttributeGroupRef groupRef = schemaObject as XmlSchemaAttributeGroupRef;
+
+                if (attribute != null)
+                {
+                    if (attribute.Name == name)
+                    {
+                        matchedAttribute = attribute;
+                        break;
+                    }
+                }
+                else if (groupRef != null)
+                {
+                    matchedAttribute = FindAttribute(groupRef, name);
+                    if (matchedAttribute != null)
+                    {
+                        break;
+                    }
+                }
+            }
+
+            return matchedAttribute;
+        }
+
+        XmlSchemaAttribute FindAttribute(XmlSchemaAttributeGroupRef groupRef, string name)
+        {
+            XmlSchemaAttribute matchedAttribute = null;
+
+            if (groupRef.RefName != null)
+            {
+                XmlSchemaAttributeGroup group = FindAttributeGroup(schema, groupRef.RefName.Name);
+                if (group != null)
+                {
+                    matchedAttribute = FindAttribute(group.Attributes, name);
+                }
+            }
+
+            return matchedAttribute;
+        }
+
+        XmlSchemaAttribute FindAttribute(XmlSchemaComplexContent complexContent, string name)
+        {
+            XmlSchemaAttribute matchedAttribute = null;
+
+            XmlSchemaComplexContentExtension extension = complexContent.Content as XmlSchemaComplexContentExtension;
+            XmlSchemaComplexContentRestriction restriction = complexContent.Content as XmlSchemaComplexContentRestriction;
+
+            if (extension != null)
+            {
+                matchedAttribute = FindAttribute(extension, name);
+            }
+            else if (restriction != null)
+            {
+                matchedAttribute = FindAttribute(restriction, name);
+            }
+
+            return matchedAttribute;
+        }
+
+        XmlSchemaAttribute FindAttribute(XmlSchemaComplexContentExtension extension, string name)
+        {
+            return FindAttribute(extension.Attributes, name);
+        }
+
+        XmlSchemaAttribute FindAttribute(XmlSchemaComplexContentRestriction restriction, string name)
+        {
+            XmlSchemaAttribute matchedAttribute = FindAttribute(restriction.Attributes, name);
+
+            if (matchedAttribute == null)
+            {
+                XmlSchemaComplexType complexType = FindNamedType(schema, restriction.BaseTypeName);
+                if (complexType != null)
+                {
+                    matchedAttribute = FindAttribute(complexType, name);
+                }
+            }
+
+            return matchedAttribute;
+        }
+
+        /// <summary>
+        /// Adds an attribute value to the completion data collection.
+        /// </summary>
+        void AddAttributeValue(XmlCompletionDataCollection data, string valueText)
+        {
+            XmlCompletionData completionData = new XmlCompletionData(valueText, XmlCompletionData.DataType.XmlAttributeValue);
+            data.Add(completionData);
+        }
+
+        /// <summary>
+        /// Adds an attribute value to the completion data collection.
+        /// </summary>
+        void AddAttributeValue(XmlCompletionDataCollection data, string valueText, XmlSchemaAnnotation annotation)
+        {
+            string documentation = GetDocumentation(annotation);
+            XmlCompletionData completionData = new XmlCompletionData(valueText, documentation, XmlCompletionData.DataType.XmlAttributeValue);
+            data.Add(completionData);
+        }
+
+        /// <summary>
+        /// Adds an attribute value to the completion data collection.
+        /// </summary>
+        void AddAttributeValue(XmlCompletionDataCollection data, string valueText, string description)
+        {
+            XmlCompletionData completionData = new XmlCompletionData(valueText, description, XmlCompletionData.DataType.XmlAttributeValue);
+            data.Add(completionData);
+        }
+
+        XmlSchemaSimpleType FindSimpleType(XmlQualifiedName name)
+        {
+            XmlSchemaSimpleType matchedSimpleType = null;
+
+            foreach (XmlSchemaObject schemaObject in schema.SchemaTypes.Values)
+            {
+                XmlSchemaSimpleType simpleType = schemaObject as XmlSchemaSimpleType;
+                if (simpleType != null)
+                {
+                    if (simpleType.QualifiedName == name)
+                    {
+                        matchedSimpleType = simpleType;
+                        break;
+                    }
+                }
+            }
+
+            return matchedSimpleType;
+        }
+
+        /// <summary>
+        /// Adds any elements that have the specified substitution group.
+        /// </summary>
+        void AddSubstitionGroupElements(XmlCompletionDataCollection data, XmlQualifiedName group, string prefix)
+        {
+            foreach (XmlSchemaElement element in schema.Elements.Values)
+            {
+                if (element.SubstitutionGroup == group)
+                {
+                    AddElement(data, element.Name, prefix, element.Annotation);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Looks for the substitution group element of the specified name.
+        /// </summary>
+        XmlSchemaElement FindSubstitutionGroupElement(XmlQualifiedName group, QualifiedName name)
+        {
+            XmlSchemaElement matchedElement = null;
+
+            foreach (XmlSchemaElement element in schema.Elements.Values)
+            {
+                if (element.SubstitutionGroup == group)
+                {
+                    if (element.Name != null)
+                    {
+                        if (element.Name == name.Name)
+                        {
+                            matchedElement = element;
+                            break;
+                        }
+                    }
+                }
+            }
+
+            return matchedElement;
+        }
+    }
+}

Deleted: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionDataCollection.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionDataCollection.cs	2013-09-06 17:39:32 UTC (rev 7850)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionDataCollection.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,431 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2013, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-// 
-// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
-// Copyright 2002-2010 by
-//
-//  AlphaSierraPapa, Christoph Wille
-//  Vordernberger Strasse 27/8
-//  A-8700 Leoben
-//  Austria
-//
-//  email: office at alphasierrapapa.com
-//  court of jurisdiction: Landesgericht Leoben
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-// 
-#endregion
-using ICSharpCode.TextEditor.Gui.CompletionWindow;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
-{
-    /// <summary>
-    ///   A collection that stores <see cref='XmlSchemaCompletionData'/> objects.
-    /// </summary>
-    [Serializable()]
-    public class XmlSchemaCompletionDataCollection : System.Collections.CollectionBase
-    {
-
-        /// <summary>
-        ///   Initializes a new instance of <see cref='XmlSchemaCompletionDataCollection'/>.
-        /// </summary>
-        public XmlSchemaCompletionDataCollection()
-        {
-        }
-
-        /// <summary>
-        ///   Initializes a new instance of <see cref='XmlSchemaCompletionDataCollection'/> based on another <see cref='XmlSchemaCompletionDataCollection'/>.
-        /// </summary>
-        /// <param name='val'>
-        ///   A <see cref='XmlSchemaCompletionDataCollection'/> from which the contents are copied
-        /// </param>
-        public XmlSchemaCompletionDataCollection(XmlSchemaCompletionDataCollection val)
-        {
-            this.AddRange(val);
-        }
-
-        /// <summary>
-        ///   Initializes a new instance of <see cref='XmlSchemaCompletionDataCollection'/> containing any array of <see cref='XmlSchemaCompletionData'/> objects.
-        /// </summary>
-        /// <param name='val'>
-        ///       A array of <see cref='XmlSchemaCompletionData'/> objects with which to intialize the collection
-        /// </param>
-        public XmlSchemaCompletionDataCollection(XmlSchemaCompletionData[] val)
-        {
-            this.AddRange(val);
-        }
-
-        /// <summary>
-        ///   Represents the entry at the specified index of the <see cref='XmlSchemaCompletionData'/>.
-        /// </summary>
-        /// <param name='index'>The zero-based index of the entry to locate in the collection.</param>
-        /// <value>The entry at the specified index of the collection.</value>
-        /// <exception cref='ArgumentOutOfRangeException'><paramref name='index'/> is outside the valid range of indexes for the collection.</exception>
-        public XmlSchemaCompletionData this[int index]
-        {
-            get
-            {
-                return ((XmlSchemaCompletionData)(List[index]));
-            }
-            set
-            {
-                List[index] = value;
-            }
-        }
-
-        public ICompletionData[] GetNamespaceCompletionData()
-        {
-            List<ICompletionData> completionItems = new List<ICompletionData>();
-
-            foreach (XmlSchemaCompletionData schema in this)
-            {
-                XmlCompletionData completionData = new XmlCompletionData(schema.NamespaceUri, XmlCompletionData.DataType.NamespaceUri);
-                completionItems.Add(completionData);
-            }
-
-            return completionItems.ToArray();
-        }
-
-        /// <summary>
-        ///   Represents the <see cref='XmlSchemaCompletionData'/> entry with the specified namespace URI.
-        /// </summary>
-        /// <param name='namespaceUri'>The schema's namespace URI.</param>
-        /// <value>The entry with the specified namespace URI.</value>
-        public XmlSchemaCompletionData this[string namespaceUri]
-        {
-            get
-            {
-                return GetItem(namespaceUri);
-            }
-        }
-
-        /// <summary>
-        ///   Adds a <see cref='XmlSchemaCompletionData'/> with the specified value to the 
-        ///   <see cref='XmlSchemaCompletionDataCollection'/>.
-        /// </summary>
-        /// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to add.</param>
-        /// <returns>The index at which the new element was inserted.</returns>
-        /// <seealso cref='XmlSchemaCompletionDataCollection.AddRange'/>
-        public int Add(XmlSchemaCompletionData val)
-        {
-            return List.Add(val);
-        }
-
-        /// <summary>
-        ///   Copies the elements of an array to the end of the <see cref='XmlSchemaCompletionDataCollection'/>.
-        /// </summary>
-        /// <param name='val'>
-        ///    An array of type <see cref='XmlSchemaCompletionData'/> containing the objects to add to the collection.
-        /// </param>
-        /// <seealso cref='XmlSchemaCompletionDataCollection.Add'/>
-        public void AddRange(XmlSchemaCompletionData[] val)
-        {
-            for (int i = 0; i < val.Length; i++)
-            {
-                this.Add(val[i]);
-            }
-        }
-
-        /// <summary>
-        ///   Adds the contents of another <see cref='XmlSchemaCompletionDataCollection'/> to the end of the collection.
-        /// </summary>
-        /// <param name='val'>
-        ///    A <see cref='XmlSchemaCompletionDataCollection'/> containing the objects to add to the collection.
-        /// </param>
-        /// <seealso cref='XmlSchemaCompletionDataCollection.Add'/>
-        public void AddRange(XmlSchemaCompletionDataCollection val)
-        {
-            for (int i = 0; i < val.Count; i++)
-            {
-                this.Add(val[i]);
-            }
-        }
-
-        /// <summary>
-        ///   Gets a value indicating whether the 
-        ///    <see cref='XmlSchemaCompletionDataCollection'/> contains the specified <see cref='XmlSchemaCompletionData'/>.
-        /// </summary>
-        /// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to locate.</param>
-        /// <returns>
-        /// <see langword='true'/> if the <see cref='XmlSchemaCompletionData'/> is contained in the collection; 
-        ///   otherwise, <see langword='false'/>.
-        /// </returns>
-        /// <seealso cref='XmlSchemaCompletionDataCollection.IndexOf'/>
-        public bool Contains(XmlSchemaCompletionData val)
-        {
-            return List.Contains(val);
-        }
-
-        /// <summary>
-        ///   Copies the <see cref='XmlSchemaCompletionDataCollection'/> values to a one-dimensional <see cref='Array'/> instance at the 
-        ///    specified index.
-        /// </summary>
-        /// <param name='array'>The one-dimensional <see cref='Array'/> that is the destination of the values copied from <see cref='XmlSchemaCompletionDataCollection'/>.</param>
-        /// <param name='index'>The index in <paramref name='array'/> where copying begins.</param>
-        /// <exception cref='ArgumentException'>
-        ///   <para><paramref name='array'/> is multidimensional.</para>
-        ///   <para>-or-</para>
-        ///   <para>The number of elements in the <see cref='XmlSchemaCompletionDataCollection'/> is greater than
-        ///         the available space between <paramref name='arrayIndex'/> and the end of
-        ///         <paramref name='array'/>.</para>
-        /// </exception>
-        /// <exception cref='ArgumentNullException'><paramref name='array'/> is <see langword='null'/>. </exception>
-        /// <exception cref='ArgumentOutOfRangeException'><paramref name='arrayIndex'/> is less than <paramref name='array'/>'s lowbound. </exception>
-        /// <seealso cref='Array'/>
-        public void CopyTo(XmlSchemaCompletionData[] array, int index)
-        {
-            List.CopyTo(array, index);
-        }
-
-        /// <summary>
-        ///    Returns the index of a <see cref='XmlSchemaCompletionData'/> in 
-        ///       the <see cref='XmlSchemaCompletionDataCollection'/>.
-        /// </summary>
-        /// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to locate.</param>
-        /// <returns>
-        ///   The index of the <see cref='XmlSchemaCompletionData'/> of <paramref name='val'/> in the 
-        ///   <see cref='XmlSchemaCompletionDataCollection'/>, if found; otherwise, -1.
-        /// </returns>
-        /// <seealso cref='XmlSchemaCompletionDataCollection.Contains'/>
-        public int IndexOf(XmlSchemaCompletionData val)
-        {
-            return List.IndexOf(val);
-        }
-
-        /// <summary>
-        ///   Inserts a <see cref='XmlSchemaCompletionData'/> into the <see cref='XmlSchemaCompletionDataCollection'/> at the specified index.
-        /// </summary>
-        /// <param name='index'>The zero-based index where <paramref name='val'/> should be inserted.</param>
-        /// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to insert.</param>
-        /// <seealso cref='XmlSchemaCompletionDataCollection.Add'/>
-        public void Insert(int index, XmlSchemaCompletionData val)
-        {
-            List.Insert(index, val);
-        }
-
-        /// <summary>
-        ///  Returns an enumerator that can iterate through the <see cref='XmlSchemaCompletionDataCollection'/>.
-        /// </summary>
-        /// <seealso cref='IEnumerator'/>
-        public new XmlSchemaCompletionDataEnumerator GetEnumerator()
-        {
-            return new XmlSchemaCompletionDataEnumerator(this);
-        }
-
-        /// <summary>
-        ///   Removes a specific <see cref='XmlSchemaCompletionData'/> from the <see cref='XmlSchemaCompletionDataCollection'/>.
-        /// </summary>
-        /// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to remove from the <see cref='XmlSchemaCompletionDataCollection'/>.</param>
-        /// <exception cref='ArgumentException'><paramref name='val'/> is not found in the Collection.</exception>
-        public void Remove(XmlSchemaCompletionData val)
-        {
-            List.Remove(val);
-        }
-
-        /// <summary>
-        /// Gets the schema completion data with the same filename.
-        /// </summary>
-        /// <returns><see langword="null"/> if no matching schema found.</returns>
-        public XmlSchemaCompletionData GetSchemaFromFileName(string fileName)
-        {
-            foreach (XmlSchemaCompletionData schema in this)
-            {
-                if (IsEqualFileName(schema.FileName, fileName))
-                {
-                    return schema;
-                }
-            }
-            return null;
-        }
-
-        static string NormalizePath(string fileName)
-        {
-            if (string.IsNullOrEmpty(fileName)) return fileName;
-
-            int i;
-
-            bool isWeb = false;
-            for (i = 0; i < fileName.Length; i++)
-            {
-                if (fileName[i] == '/' || fileName[i] == '\\')
-                    break;
-                if (fileName[i] == ':')
-                {
-                    if (i > 1)
-                        isWeb = true;
-                    break;
-                }
-            }
-
-            char outputSeparator = isWeb ? '/' : System.IO.Path.DirectorySeparatorChar;
-
-            StringBuilder result = new StringBuilder();
-            if (isWeb == false && fileName.StartsWith(@"\\") || fileName.StartsWith("//"))
-            {
-                i = 2;
-                result.Append(outputSeparator);
-            }
-            else
-            {
-                i = 0;
-            }
-            int segmentStartPos = i;
-            for (; i <= fileName.Length; i++)
-            {
-                if (i == fileName.Length || fileName[i] == '/' || fileName[i] == '\\')
-                {
-                    int segmentLength = i - segmentStartPos;
-                    switch (segmentLength)
-                    {
-                        case 0:
-                            // ignore empty segment (if not in web mode)
-                            // On unix, don't ignore empty segment if i==0
-                            if (isWeb || (i == 0 && Environment.OSVersion.Platform == PlatformID.Unix))
-                            {
-                                result.Append(outputSeparator);
-                            }
-                            break;
-                        case 1:
-                            // ignore /./ segment, but append other one-letter segments
-                            if (fileName[segmentStartPos] != '.')
-                            {
-                                if (result.Length > 0) result.Append(outputSeparator);
-                                result.Append(fileName[segmentStartPos]);
-                            }
-                            break;
-                        case 2:
-                            if (fileName[segmentStartPos] == '.' && fileName[segmentStartPos + 1] == '.')
-                            {
-                                // remove previous segment
-                                int j;
-                                for (j = result.Length - 1; j >= 0 && result[j] != outputSeparator; j--) ;
-                                if (j > 0)
-                                {
-                                    result.Length = j;
-                                }
-                                break;
-                            }
-                            else
-                            {
-                                // append normal segment
-                                goto default;
-                            }
-                        default:
-                            if (result.Length > 0) result.Append(outputSeparator);
-                            result.Append(fileName, segmentStartPos, segmentLength);
-                            break;
-                    }
-                    segmentStartPos = i + 1; // remember start position for next segment
-                }
-            }
-            if (isWeb == false)
-            {
-                if (result.Length > 0 && result[result.Length - 1] == outputSeparator)
-                {
-                    result.Length -= 1;
-                }
-                if (result.Length == 2 && result[1] == ':')
-                {
-                    result.Append(outputSeparator);
-                }
-            }
-            return result.ToString();
-        }
-
-        private bool IsEqualFileName(string fileName1, string fileName2)
-        {
-            return string.Equals(NormalizePath(fileName1),
-                                 NormalizePath(fileName2),
-                                 StringComparison.OrdinalIgnoreCase);
-        }
-
-        /// <summary>
-        ///   Enumerator that can iterate through a XmlSchemaCompletionDataCollection.
-        /// </summary>
-        /// <seealso cref='IEnumerator'/>
-        /// <seealso cref='XmlSchemaCompletionDataCollection'/>
-        /// <seealso cref='XmlSchemaCompletionData'/>
-        public class XmlSchemaCompletionDataEnumerator : System.Collections.IEnumerator
-        {
-            System.Collections.IEnumerator baseEnumerator;
-            System.Collections.IEnumerable temp;
-
-            /// <summary>
-            ///   Initializes a new instance of <see cref='XmlSchemaCompletionDataEnumerator'/>.
-            /// </summary>
-            public XmlSchemaCompletionDataEnumerator(XmlSchemaCompletionDataCollection mappings)
-            {
-                this.temp = ((System.Collections.IEnumerable)(mappings));
-                this.baseEnumerator = temp.GetEnumerator();
-            }
-
-            /// <summary>
-            ///   Gets the current <see cref='XmlSchemaCompletionData'/> in the <seealso cref='XmlSchemaCompletionDataCollection'/>.
-            /// </summary>
-            public XmlSchemaCompletionData Current
-            {
-                get
-                {
-                    return ((XmlSchemaCompletionData)(baseEnumerator.Current));
-                }
-            }
-
-            object System.Collections.IEnumerator.Current
-            {
-                get
-                {
-                    return baseEnumerator.Current;
-                }
-            }
-
-            /// <summary>
-            ///   Advances the enumerator to the next <see cref='XmlSchemaCompletionData'/> of the <see cref='XmlSchemaCompletionDataCollection'/>.
-            /// </summary>
-            public bool MoveNext()
-            {
-                return baseEnumerator.MoveNext();
-            }
-
-            /// <summary>
-            ///   Sets the enumerator to its initial position, which is before the first element in the <see cref='XmlSchemaCompletionDataCollection'/>.
-            /// </summary>
-            public void Reset()
-            {
-                baseEnumerator.Reset();
-            }
-        }
-
-        XmlSchemaCompletionData GetItem(string namespaceUri)
-        {
-            XmlSchemaCompletionData matchedItem = null;
-
-            foreach (XmlSchemaCompletionData item in this)
-            {
-                if (item.NamespaceUri == namespaceUri)
-                {
-                    matchedItem = item;
-                    break;
-                }
-            }
-
-            return matchedItem;
-        }
-    }
-}

Copied: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionDataCollection.cs (from rev 7850, trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionDataCollection.cs)
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionDataCollection.cs	                        (rev 0)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaCompletionDataCollection.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,431 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
+// Copyright 2002-2010 by
+//
+//  AlphaSierraPapa, Christoph Wille
+//  Vordernberger Strasse 27/8
+//  A-8700 Leoben
+//  Austria
+//
+//  email: office at alphasierrapapa.com
+//  court of jurisdiction: Landesgericht Leoben
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using ICSharpCode.TextEditor.Gui.CompletionWindow;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
+{
+    /// <summary>
+    ///   A collection that stores <see cref='XmlSchemaCompletionData'/> objects.
+    /// </summary>
+    [Serializable()]
+    public class XmlSchemaCompletionDataCollection : System.Collections.CollectionBase
+    {
+
+        /// <summary>
+        ///   Initializes a new instance of <see cref='XmlSchemaCompletionDataCollection'/>.
+        /// </summary>
+        public XmlSchemaCompletionDataCollection()
+        {
+        }
+
+        /// <summary>
+        ///   Initializes a new instance of <see cref='XmlSchemaCompletionDataCollection'/> based on another <see cref='XmlSchemaCompletionDataCollection'/>.
+        /// </summary>
+        /// <param name='val'>
+        ///   A <see cref='XmlSchemaCompletionDataCollection'/> from which the contents are copied
+        /// </param>
+        public XmlSchemaCompletionDataCollection(XmlSchemaCompletionDataCollection val)
+        {
+            this.AddRange(val);
+        }
+
+        /// <summary>
+        ///   Initializes a new instance of <see cref='XmlSchemaCompletionDataCollection'/> containing any array of <see cref='XmlSchemaCompletionData'/> objects.
+        /// </summary>
+        /// <param name='val'>
+        ///       A array of <see cref='XmlSchemaCompletionData'/> objects with which to intialize the collection
+        /// </param>
+        public XmlSchemaCompletionDataCollection(XmlSchemaCompletionData[] val)
+        {
+            this.AddRange(val);
+        }
+
+        /// <summary>
+        ///   Represents the entry at the specified index of the <see cref='XmlSchemaCompletionData'/>.
+        /// </summary>
+        /// <param name='index'>The zero-based index of the entry to locate in the collection.</param>
+        /// <value>The entry at the specified index of the collection.</value>
+        /// <exception cref='ArgumentOutOfRangeException'><paramref name='index'/> is outside the valid range of indexes for the collection.</exception>
+        public XmlSchemaCompletionData this[int index]
+        {
+            get
+            {
+                return ((XmlSchemaCompletionData)(List[index]));
+            }
+            set
+            {
+                List[index] = value;
+            }
+        }
+
+        public ICompletionData[] GetNamespaceCompletionData()
+        {
+            List<ICompletionData> completionItems = new List<ICompletionData>();
+
+            foreach (XmlSchemaCompletionData schema in this)
+            {
+                XmlCompletionData completionData = new XmlCompletionData(schema.NamespaceUri, XmlCompletionData.DataType.NamespaceUri);
+                completionItems.Add(completionData);
+            }
+
+            return completionItems.ToArray();
+        }
+
+        /// <summary>
+        ///   Represents the <see cref='XmlSchemaCompletionData'/> entry with the specified namespace URI.
+        /// </summary>
+        /// <param name='namespaceUri'>The schema's namespace URI.</param>
+        /// <value>The entry with the specified namespace URI.</value>
+        public XmlSchemaCompletionData this[string namespaceUri]
+        {
+            get
+            {
+                return GetItem(namespaceUri);
+            }
+        }
+
+        /// <summary>
+        ///   Adds a <see cref='XmlSchemaCompletionData'/> with the specified value to the 
+        ///   <see cref='XmlSchemaCompletionDataCollection'/>.
+        /// </summary>
+        /// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to add.</param>
+        /// <returns>The index at which the new element was inserted.</returns>
+        /// <seealso cref='XmlSchemaCompletionDataCollection.AddRange'/>
+        public int Add(XmlSchemaCompletionData val)
+        {
+            return List.Add(val);
+        }
+
+        /// <summary>
+        ///   Copies the elements of an array to the end of the <see cref='XmlSchemaCompletionDataCollection'/>.
+        /// </summary>
+        /// <param name='val'>
+        ///    An array of type <see cref='XmlSchemaCompletionData'/> containing the objects to add to the collection.
+        /// </param>
+        /// <seealso cref='XmlSchemaCompletionDataCollection.Add'/>
+        public void AddRange(XmlSchemaCompletionData[] val)
+        {
+            for (int i = 0; i < val.Length; i++)
+            {
+                this.Add(val[i]);
+            }
+        }
+
+        /// <summary>
+        ///   Adds the contents of another <see cref='XmlSchemaCompletionDataCollection'/> to the end of the collection.
+        /// </summary>
+        /// <param name='val'>
+        ///    A <see cref='XmlSchemaCompletionDataCollection'/> containing the objects to add to the collection.
+        /// </param>
+        /// <seealso cref='XmlSchemaCompletionDataCollection.Add'/>
+        public void AddRange(XmlSchemaCompletionDataCollection val)
+        {
+            for (int i = 0; i < val.Count; i++)
+            {
+                this.Add(val[i]);
+            }
+        }
+
+        /// <summary>
+        ///   Gets a value indicating whether the 
+        ///    <see cref='XmlSchemaCompletionDataCollection'/> contains the specified <see cref='XmlSchemaCompletionData'/>.
+        /// </summary>
+        /// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to locate.</param>
+        /// <returns>
+        /// <see langword='true'/> if the <see cref='XmlSchemaCompletionData'/> is contained in the collection; 
+        ///   otherwise, <see langword='false'/>.
+        /// </returns>
+        /// <seealso cref='XmlSchemaCompletionDataCollection.IndexOf'/>
+        public bool Contains(XmlSchemaCompletionData val)
+        {
+            return List.Contains(val);
+        }
+
+        /// <summary>
+        ///   Copies the <see cref='XmlSchemaCompletionDataCollection'/> values to a one-dimensional <see cref='Array'/> instance at the 
+        ///    specified index.
+        /// </summary>
+        /// <param name='array'>The one-dimensional <see cref='Array'/> that is the destination of the values copied from <see cref='XmlSchemaCompletionDataCollection'/>.</param>
+        /// <param name='index'>The index in <paramref name='array'/> where copying begins.</param>
+        /// <exception cref='ArgumentException'>
+        ///   <para><paramref name='array'/> is multidimensional.</para>
+        ///   <para>-or-</para>
+        ///   <para>The number of elements in the <see cref='XmlSchemaCompletionDataCollection'/> is greater than
+        ///         the available space between <paramref name='arrayIndex'/> and the end of
+        ///         <paramref name='array'/>.</para>
+        /// </exception>
+        /// <exception cref='ArgumentNullException'><paramref name='array'/> is <see langword='null'/>. </exception>
+        /// <exception cref='ArgumentOutOfRangeException'><paramref name='arrayIndex'/> is less than <paramref name='array'/>'s lowbound. </exception>
+        /// <seealso cref='Array'/>
+        public void CopyTo(XmlSchemaCompletionData[] array, int index)
+        {
+            List.CopyTo(array, index);
+        }
+
+        /// <summary>
+        ///    Returns the index of a <see cref='XmlSchemaCompletionData'/> in 
+        ///       the <see cref='XmlSchemaCompletionDataCollection'/>.
+        /// </summary>
+        /// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to locate.</param>
+        /// <returns>
+        ///   The index of the <see cref='XmlSchemaCompletionData'/> of <paramref name='val'/> in the 
+        ///   <see cref='XmlSchemaCompletionDataCollection'/>, if found; otherwise, -1.
+        /// </returns>
+        /// <seealso cref='XmlSchemaCompletionDataCollection.Contains'/>
+        public int IndexOf(XmlSchemaCompletionData val)
+        {
+            return List.IndexOf(val);
+        }
+
+        /// <summary>
+        ///   Inserts a <see cref='XmlSchemaCompletionData'/> into the <see cref='XmlSchemaCompletionDataCollection'/> at the specified index.
+        /// </summary>
+        /// <param name='index'>The zero-based index where <paramref name='val'/> should be inserted.</param>
+        /// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to insert.</param>
+        /// <seealso cref='XmlSchemaCompletionDataCollection.Add'/>
+        public void Insert(int index, XmlSchemaCompletionData val)
+        {
+            List.Insert(index, val);
+        }
+
+        /// <summary>
+        ///  Returns an enumerator that can iterate through the <see cref='XmlSchemaCompletionDataCollection'/>.
+        /// </summary>
+        /// <seealso cref='IEnumerator'/>
+        public new XmlSchemaCompletionDataEnumerator GetEnumerator()
+        {
+            return new XmlSchemaCompletionDataEnumerator(this);
+        }
+
+        /// <summary>
+        ///   Removes a specific <see cref='XmlSchemaCompletionData'/> from the <see cref='XmlSchemaCompletionDataCollection'/>.
+        /// </summary>
+        /// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to remove from the <see cref='XmlSchemaCompletionDataCollection'/>.</param>
+        /// <exception cref='ArgumentException'><paramref name='val'/> is not found in the Collection.</exception>
+        public void Remove(XmlSchemaCompletionData val)
+        {
+            List.Remove(val);
+        }
+
+        /// <summary>
+        /// Gets the schema completion data with the same filename.
+        /// </summary>
+        /// <returns><see langword="null"/> if no matching schema found.</returns>
+        public XmlSchemaCompletionData GetSchemaFromFileName(string fileName)
+        {
+            foreach (XmlSchemaCompletionData schema in this)
+            {
+                if (IsEqualFileName(schema.FileName, fileName))
+                {
+                    return schema;
+                }
+            }
+            return null;
+        }
+
+        static string NormalizePath(string fileName)
+        {
+            if (string.IsNullOrEmpty(fileName)) return fileName;
+
+            int i;
+
+            bool isWeb = false;
+            for (i = 0; i < fileName.Length; i++)
+            {
+                if (fileName[i] == '/' || fileName[i] == '\\')
+                    break;
+                if (fileName[i] == ':')
+                {
+                    if (i > 1)
+                        isWeb = true;
+                    break;
+                }
+            }
+
+            char outputSeparator = isWeb ? '/' : System.IO.Path.DirectorySeparatorChar;
+
+            StringBuilder result = new StringBuilder();
+            if (isWeb == false && fileName.StartsWith(@"\\") || fileName.StartsWith("//"))
+            {
+                i = 2;
+                result.Append(outputSeparator);
+            }
+            else
+            {
+                i = 0;
+            }
+            int segmentStartPos = i;
+            for (; i <= fileName.Length; i++)
+            {
+                if (i == fileName.Length || fileName[i] == '/' || fileName[i] == '\\')
+                {
+                    int segmentLength = i - segmentStartPos;
+                    switch (segmentLength)
+                    {
+                        case 0:
+                            // ignore empty segment (if not in web mode)
+                            // On unix, don't ignore empty segment if i==0
+                            if (isWeb || (i == 0 && Environment.OSVersion.Platform == PlatformID.Unix))
+                            {
+                                result.Append(outputSeparator);
+                            }
+                            break;
+                        case 1:
+                            // ignore /./ segment, but append other one-letter segments
+                            if (fileName[segmentStartPos] != '.')
+                            {
+                                if (result.Length > 0) result.Append(outputSeparator);
+                                result.Append(fileName[segmentStartPos]);
+                            }
+                            break;
+                        case 2:
+                            if (fileName[segmentStartPos] == '.' && fileName[segmentStartPos + 1] == '.')
+                            {
+                                // remove previous segment
+                                int j;
+                                for (j = result.Length - 1; j >= 0 && result[j] != outputSeparator; j--) ;
+                                if (j > 0)
+                                {
+                                    result.Length = j;
+                                }
+                                break;
+                            }
+                            else
+                            {
+                                // append normal segment
+                                goto default;
+                            }
+                        default:
+                            if (result.Length > 0) result.Append(outputSeparator);
+                            result.Append(fileName, segmentStartPos, segmentLength);
+                            break;
+                    }
+                    segmentStartPos = i + 1; // remember start position for next segment
+                }
+            }
+            if (isWeb == false)
+            {
+                if (result.Length > 0 && result[result.Length - 1] == outputSeparator)
+                {
+                    result.Length -= 1;
+                }
+                if (result.Length == 2 && result[1] == ':')
+                {
+                    result.Append(outputSeparator);
+                }
+            }
+            return result.ToString();
+        }
+
+        private bool IsEqualFileName(string fileName1, string fileName2)
+        {
+            return string.Equals(NormalizePath(fileName1),
+                                 NormalizePath(fileName2),
+                                 StringComparison.OrdinalIgnoreCase);
+        }
+
+        /// <summary>
+        ///   Enumerator that can iterate through a XmlSchemaCompletionDataCollection.
+        /// </summary>
+        /// <seealso cref='IEnumerator'/>
+        /// <seealso cref='XmlSchemaCompletionDataCollection'/>
+        /// <seealso cref='XmlSchemaCompletionData'/>
+        public class XmlSchemaCompletionDataEnumerator : System.Collections.IEnumerator
+        {
+            System.Collections.IEnumerator baseEnumerator;
+            System.Collections.IEnumerable temp;
+
+            /// <summary>
+            ///   Initializes a new instance of <see cref='XmlSchemaCompletionDataEnumerator'/>.
+            /// </summary>
+            public XmlSchemaCompletionDataEnumerator(XmlSchemaCompletionDataCollection mappings)
+            {
+                this.temp = ((System.Collections.IEnumerable)(mappings));
+                this.baseEnumerator = temp.GetEnumerator();
+            }
+
+            /// <summary>
+            ///   Gets the current <see cref='XmlSchemaCompletionData'/> in the <seealso cref='XmlSchemaCompletionDataCollection'/>.
+            /// </summary>
+            public XmlSchemaCompletionData Current
+            {
+                get
+                {
+                    return ((XmlSchemaCompletionData)(baseEnumerator.Current));
+                }
+            }
+
+            object System.Collections.IEnumerator.Current
+            {
+                get
+                {
+                    return baseEnumerator.Current;
+                }
+            }
+
+            /// <summary>
+            ///   Advances the enumerator to the next <see cref='XmlSchemaCompletionData'/> of the <see cref='XmlSchemaCompletionDataCollection'/>.
+            /// </summary>
+            public bool MoveNext()
+            {
+                return baseEnumerator.MoveNext();
+            }
+
+            /// <summary>
+            ///   Sets the enumerator to its initial position, which is before the first element in the <see cref='XmlSchemaCompletionDataCollection'/>.
+            /// </summary>
+            public void Reset()
+            {
+                baseEnumerator.Reset();
+            }
+        }
+
+        XmlSchemaCompletionData GetItem(string namespaceUri)
+        {
+            XmlSchemaCompletionData matchedItem = null;
+
+            foreach (XmlSchemaCompletionData item in this)
+            {
+                if (item.NamespaceUri == namespaceUri)
+                {
+                    matchedItem = item;
+                    break;
+                }
+            }
+
+            return matchedItem;
+        }
+    }
+}

Deleted: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaManager.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaManager.cs	2013-09-06 17:39:32 UTC (rev 7850)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaManager.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,321 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2013, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-// 
-// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
-// Copyright 2002-2010 by
-//
-//  AlphaSierraPapa, Christoph Wille
-//  Vordernberger Strasse 27/8
-//  A-8700 Leoben
-//  Austria
-//
-//  email: office at alphasierrapapa.com
-//  court of jurisdiction: Landesgericht Leoben
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// 
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-// 
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-// 
-#endregion
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Text;
-
-namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
-{
-    /// <summary>
-    /// Keeps track of all the schemas that the Xml Editor is aware
-    /// of.
-    /// </summary>
-    public class XmlSchemaManager
-    {
-        public const string XmlSchemaNamespace = "http://www.w3.org/2001/XMLSchema";
-
-        static XmlSchemaCompletionDataCollection schemas = null;
-        static XmlSchemaManager manager = null;
-
-        public static event EventHandler UserSchemaAdded;
-
-        public static event EventHandler UserSchemaRemoved;
-
-        XmlSchemaManager()
-        {
-        }
-
-        /// <summary>
-        /// Determines whether the specified namespace is actually the W3C namespace for
-        /// XSD files.
-        /// </summary>
-        public static bool IsXmlSchemaNamespace(string schemaNamespace)
-        {
-            return schemaNamespace == XmlSchemaNamespace;
-        }
-
-        public static XmlSchemaManager Instance
-        {
-            get
-            {
-                if (manager == null)
-                    manager = new XmlSchemaManager();
-
-                if (schemas == null)
-                    schemas = new XmlSchemaCompletionDataCollection();
-
-                return manager;
-            }
-        }
-
-        /// <summary>
-        /// Gets the schemas that SharpDevelop knows about.
-        /// </summary>
-        public XmlSchemaCompletionDataCollection SchemaCompletionDataItems
-        {
-            get
-            {
-                return schemas;
-            }
-        }
-
-        /// <summary>
-        /// Gets the schema completion data that is associated with the
-        /// specified file extension.
-        /// </summary>
-        public XmlSchemaCompletionData GetSchemaCompletionData(string extension)
-        {
-            XmlSchemaCompletionData data = null;
-
-            XmlSchemaAssociation association = GetSchemaAssociation(extension);
-            if (association != null)
-            {
-                if (association.NamespaceUri.Length > 0)
-                {
-                    data = SchemaCompletionDataItems[association.NamespaceUri];
-                }
-            }
-            return data;
-        }
-
-        /// <summary>
-        /// Gets the namespace prefix that is associated with the
-        /// specified file extension.
-        /// </summary>
-        public static string GetNamespacePrefix(string extension)
-        {
-            string prefix = String.Empty;
-
-            XmlSchemaAssociation association = GetSchemaAssociation(extension);
-            if (association != null)
-            {
-                prefix = association.NamespacePrefix;
-            }
-
-            return prefix;
-        }
-
-        /// <summary>
-        /// Gets an association between a schema and a file extension.
-        /// </summary>
-        /// <remarks>
-        /// <para>The property will be an xml element when the SharpDevelopProperties.xml
-        /// is read on startup.  The property will be a schema association
-        /// if the user changes the schema associated with the file
-        /// extension in tools->options.</para>
-        /// <para>The normal way of doing things is to
-        /// pass the GetProperty method a default value which auto-magically
-        /// turns the xml element into a schema association so we would not 
-        /// have to check for both.  In this case, however, I do not want
-        /// a default saved to the SharpDevelopProperties.xml file unless the user
-        /// makes a change using Tools->Options.</para>
-        /// <para>If we have a file extension that is currently missing a default 
-        /// schema then if we  ship the schema at a later date the association will 
-        /// be updated by the code if the user has not changed the settings themselves. 
-        /// </para>
-        /// <para>For example, the initial release of the xml editor add-in had
-        /// no default schema for .xsl files, by default it was associated with
-        /// no schema and this setting is saved if the user ever viewed the settings
-        /// in the tools->options dialog.  Now, after the initial release the
-        /// .xsl schema was created and shipped with SharpDevelop, there is
-        /// no way to associate this schema to .xsl files by default since 
-        /// the property exists in the SharpDevelopProperties.xml file.</para>
-        /// <para>An alternative way of doing this might be to have the
-        /// config info in the schema itself, which a special SharpDevelop 
-        /// namespace.  I believe this is what Visual Studio does.  This
-        /// way is not as flexible since it requires the user to locate
-        /// the schema and change the association manually.</para>
-        /// </remarks>
-        static XmlSchemaAssociation GetSchemaAssociation(string extension)
-        {
-            extension = extension.ToLower();
-            return XmlSchemaAssociation.GetDefaultAssociation(extension);
-        }
-
-        /// <summary>
-        /// Removes the schema with the specified namespace from the
-        /// user schemas folder and removes the completion data.
-        /// </summary>
-        public void RemoveUserSchema(string namespaceUri)
-        {
-            XmlSchemaCompletionData schemaData = SchemaCompletionDataItems[namespaceUri];
-            if (schemaData != null)
-            {
-                if (File.Exists(schemaData.FileName))
-                {
-                    File.Delete(schemaData.FileName);
-                }
-                SchemaCompletionDataItems.Remove(schemaData);
-                OnUserSchemaRemoved();
-            }
-        }
-
-        /*
-        /// <summary>
-        /// Adds the schema to the user schemas folder and makes the
-        /// schema available to the xml editor.
-        /// </summary>
-        public static void AddUserSchema(XmlSchemaCompletionData schemaData)
-        {
-            if (SchemaCompletionDataItems[schemaData.NamespaceUri] == null)
-            {
-
-                if (!Directory.Exists(UserSchemaFolder))
-                {
-                    Directory.CreateDirectory(UserSchemaFolder);
-                }
-
-                string fileName = Path.GetFileName(schemaData.FileName);
-                string destinationFileName = Path.Combine(UserSchemaFolder, fileName);
-                File.Copy(schemaData.FileName, destinationFileName);
-                schemaData.FileName = destinationFileName;
-                SchemaCompletionDataItems.Add(schemaData);
-                OnUserSchemaAdded();
-            }
-            else
-            {
-                Debug.WriteLine("Trying to add a schema that already exists.  Namespace=" + schemaData.NamespaceUri);
-            }
-        }
-        
-        /// <summary>
-        /// Reads the system and user added schemas.
-        /// </summary>
-        void ReadSchemas()
-        {
-            // MSBuild schemas are in framework directory:
-            ReadSchemas(RuntimeEnvironment.GetRuntimeDirectory(), true);
-            ReadSchemas(SchemaFolder, true);
-            ReadSchemas(UserSchemaFolder, false);
-        }
-         */
-
-        /// <summary>
-        /// Reads all .xsd files in the specified folder.
-        /// </summary>
-        public void ReadSchemas(string folder, bool readOnly)
-        {
-            if (Directory.Exists(folder))
-            {
-                foreach (string fileName in Directory.GetFiles(folder, "*.xsd"))
-                {
-                    ReadSchema(fileName, readOnly);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Reads an individual schema and adds it to the collection.
-        /// </summary>
-        /// <remarks>
-        /// If the schema namespace exists in the collection it is not added.
-        /// </remarks>
-        public void ReadSchema(string fileName, bool readOnly)
-        {
-            try
-            {
-                string baseUri = XmlSchemaCompletionData.GetUri(fileName);
-                XmlSchemaCompletionData data = new XmlSchemaCompletionData(baseUri, fileName);
-                if (data.NamespaceUri != null)
-                {
-                    if (schemas[data.NamespaceUri] == null)
-                    {
-                        data.ReadOnly = readOnly;
-                        schemas.Add(data);
-                    }
-                    else
-                    {
-                        // Namespace already exists.
-                        Debug.WriteLine("Ignoring duplicate schema namespace " + data.NamespaceUri);
-                    }
-                }
-                else
-                {
-                    Debug.WriteLine("Ignoring schema with no namespace " + data.FileName);
-                }
-            }
-            catch (Exception ex)
-            {
-                Debug.WriteLine("Unable to read schema '" + fileName + "'. ", ex);
-            }
-        }
-
-        /*
-        /// <summary>
-        /// Gets the folder where the schemas for all users on the
-        /// local machine are stored.
-        /// </summary>
-        static string SchemaFolder
-        {
-            get
-            {
-                return Path.Combine(PropertyService.DataDirectory, "schemas");
-            }
-        }
-
-        /// <summary>
-        /// Gets the folder where schemas are stored for an individual user.
-        /// </summary>
-        static string UserSchemaFolder
-        {
-            get
-            {
-                return Path.Combine(PropertyService.ConfigDirectory, "schemas");
-            }
-        }
-        */
-
-        /// <summary>
-        /// Should really pass schema info with the event.
-        /// </summary>
-        static void OnUserSchemaAdded()
-        {
-            if (UserSchemaAdded != null)
-            {
-                UserSchemaAdded(manager, new EventArgs());
-            }
-        }
-
-        /// <summary>
-        /// Should really pass schema info with the event.
-        /// </summary>
-        static void OnUserSchemaRemoved()
-        {
-            if (UserSchemaRemoved != null)
-            {
-                UserSchemaRemoved(manager, new EventArgs());
-            }
-        }
-    }
-}

Copied: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaManager.cs (from rev 7850, trunk/Tools/Maestro/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaManager.cs)
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaManager.cs	                        (rev 0)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditor/AutoCompletion/XmlSchemaManager.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,321 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// Original code from SharpDevelop 3.2.1 licensed under the same terms (LGPL 2.1)
+// Copyright 2002-2010 by
+//
+//  AlphaSierraPapa, Christoph Wille
+//  Vordernberger Strasse 27/8
+//  A-8700 Leoben
+//  Austria
+//
+//  email: office at alphasierrapapa.com
+//  court of jurisdiction: Landesgericht Leoben
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace Maestro.Editors.Generic.XmlEditor.AutoCompletion
+{
+    /// <summary>
+    /// Keeps track of all the schemas that the Xml Editor is aware
+    /// of.
+    /// </summary>
+    public class XmlSchemaManager
+    {
+        public const string XmlSchemaNamespace = "http://www.w3.org/2001/XMLSchema";
+
+        static XmlSchemaCompletionDataCollection schemas = null;
+        static XmlSchemaManager manager = null;
+
+        public static event EventHandler UserSchemaAdded;
+
+        public static event EventHandler UserSchemaRemoved;
+
+        XmlSchemaManager()
+        {
+        }
+
+        /// <summary>
+        /// Determines whether the specified namespace is actually the W3C namespace for
+        /// XSD files.
+        /// </summary>
+        public static bool IsXmlSchemaNamespace(string schemaNamespace)
+        {
+            return schemaNamespace == XmlSchemaNamespace;
+        }
+
+        public static XmlSchemaManager Instance
+        {
+            get
+            {
+                if (manager == null)
+                    manager = new XmlSchemaManager();
+
+                if (schemas == null)
+                    schemas = new XmlSchemaCompletionDataCollection();
+
+                return manager;
+            }
+        }
+
+        /// <summary>
+        /// Gets the schemas that SharpDevelop knows about.
+        /// </summary>
+        public XmlSchemaCompletionDataCollection SchemaCompletionDataItems
+        {
+            get
+            {
+                return schemas;
+            }
+        }
+
+        /// <summary>
+        /// Gets the schema completion data that is associated with the
+        /// specified file extension.
+        /// </summary>
+        public XmlSchemaCompletionData GetSchemaCompletionData(string extension)
+        {
+            XmlSchemaCompletionData data = null;
+
+            XmlSchemaAssociation association = GetSchemaAssociation(extension);
+            if (association != null)
+            {
+                if (association.NamespaceUri.Length > 0)
+                {
+                    data = SchemaCompletionDataItems[association.NamespaceUri];
+                }
+            }
+            return data;
+        }
+
+        /// <summary>
+        /// Gets the namespace prefix that is associated with the
+        /// specified file extension.
+        /// </summary>
+        public static string GetNamespacePrefix(string extension)
+        {
+            string prefix = String.Empty;
+
+            XmlSchemaAssociation association = GetSchemaAssociation(extension);
+            if (association != null)
+            {
+                prefix = association.NamespacePrefix;
+            }
+
+            return prefix;
+        }
+
+        /// <summary>
+        /// Gets an association between a schema and a file extension.
+        /// </summary>
+        /// <remarks>
+        /// <para>The property will be an xml element when the SharpDevelopProperties.xml
+        /// is read on startup.  The property will be a schema association
+        /// if the user changes the schema associated with the file
+        /// extension in tools->options.</para>
+        /// <para>The normal way of doing things is to
+        /// pass the GetProperty method a default value which auto-magically
+        /// turns the xml element into a schema association so we would not 
+        /// have to check for both.  In this case, however, I do not want
+        /// a default saved to the SharpDevelopProperties.xml file unless the user
+        /// makes a change using Tools->Options.</para>
+        /// <para>If we have a file extension that is currently missing a default 
+        /// schema then if we  ship the schema at a later date the association will 
+        /// be updated by the code if the user has not changed the settings themselves. 
+        /// </para>
+        /// <para>For example, the initial release of the xml editor add-in had
+        /// no default schema for .xsl files, by default it was associated with
+        /// no schema and this setting is saved if the user ever viewed the settings
+        /// in the tools->options dialog.  Now, after the initial release the
+        /// .xsl schema was created and shipped with SharpDevelop, there is
+        /// no way to associate this schema to .xsl files by default since 
+        /// the property exists in the SharpDevelopProperties.xml file.</para>
+        /// <para>An alternative way of doing this might be to have the
+        /// config info in the schema itself, which a special SharpDevelop 
+        /// namespace.  I believe this is what Visual Studio does.  This
+        /// way is not as flexible since it requires the user to locate
+        /// the schema and change the association manually.</para>
+        /// </remarks>
+        static XmlSchemaAssociation GetSchemaAssociation(string extension)
+        {
+            extension = extension.ToLower();
+            return XmlSchemaAssociation.GetDefaultAssociation(extension);
+        }
+
+        /// <summary>
+        /// Removes the schema with the specified namespace from the
+        /// user schemas folder and removes the completion data.
+        /// </summary>
+        public void RemoveUserSchema(string namespaceUri)
+        {
+            XmlSchemaCompletionData schemaData = SchemaCompletionDataItems[namespaceUri];
+            if (schemaData != null)
+            {
+                if (File.Exists(schemaData.FileName))
+                {
+                    File.Delete(schemaData.FileName);
+                }
+                SchemaCompletionDataItems.Remove(schemaData);
+                OnUserSchemaRemoved();
+            }
+        }
+
+        /*
+        /// <summary>
+        /// Adds the schema to the user schemas folder and makes the
+        /// schema available to the xml editor.
+        /// </summary>
+        public static void AddUserSchema(XmlSchemaCompletionData schemaData)
+        {
+            if (SchemaCompletionDataItems[schemaData.NamespaceUri] == null)
+            {
+
+                if (!Directory.Exists(UserSchemaFolder))
+                {
+                    Directory.CreateDirectory(UserSchemaFolder);
+                }
+
+                string fileName = Path.GetFileName(schemaData.FileName);
+                string destinationFileName = Path.Combine(UserSchemaFolder, fileName);
+                File.Copy(schemaData.FileName, destinationFileName);
+                schemaData.FileName = destinationFileName;
+                SchemaCompletionDataItems.Add(schemaData);
+                OnUserSchemaAdded();
+            }
+            else
+            {
+                Debug.WriteLine("Trying to add a schema that already exists.  Namespace=" + schemaData.NamespaceUri);
+            }
+        }
+        
+        /// <summary>
+        /// Reads the system and user added schemas.
+        /// </summary>
+        void ReadSchemas()
+        {
+            // MSBuild schemas are in framework directory:
+            ReadSchemas(RuntimeEnvironment.GetRuntimeDirectory(), true);
+            ReadSchemas(SchemaFolder, true);
+            ReadSchemas(UserSchemaFolder, false);
+        }
+         */
+
+        /// <summary>
+        /// Reads all .xsd files in the specified folder.
+        /// </summary>
+        public void ReadSchemas(string folder, bool readOnly)
+        {
+            if (Directory.Exists(folder))
+            {
+                foreach (string fileName in Directory.GetFiles(folder, "*.xsd"))
+                {
+                    ReadSchema(fileName, readOnly);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Reads an individual schema and adds it to the collection.
+        /// </summary>
+        /// <remarks>
+        /// If the schema namespace exists in the collection it is not added.
+        /// </remarks>
+        public void ReadSchema(string fileName, bool readOnly)
+        {
+            try
+            {
+                string baseUri = XmlSchemaCompletionData.GetUri(fileName);
+                XmlSchemaCompletionData data = new XmlSchemaCompletionData(baseUri, fileName);
+                if (data.NamespaceUri != null)
+                {
+                    if (schemas[data.NamespaceUri] == null)
+                    {
+                        data.ReadOnly = readOnly;
+                        schemas.Add(data);
+                    }
+                    else
+                    {
+                        // Namespace already exists.
+                        Debug.WriteLine("Ignoring duplicate schema namespace " + data.NamespaceUri);
+                    }
+                }
+                else
+                {
+                    Debug.WriteLine("Ignoring schema with no namespace " + data.FileName);
+                }
+            }
+            catch (Exception ex)
+            {
+                Debug.WriteLine("Unable to read schema '" + fileName + "'. ", ex);
+            }
+        }
+
+        /*
+        /// <summary>
+        /// Gets the folder where the schemas for all users on the
+        /// local machine are stored.
+        /// </summary>
+        static string SchemaFolder
+        {
+            get
+            {
+                return Path.Combine(PropertyService.DataDirectory, "schemas");
+            }
+        }
+
+        /// <summary>
+        /// Gets the folder where schemas are stored for an individual user.
+        /// </summary>
+        static string UserSchemaFolder
+        {
+            get
+            {
+                return Path.Combine(PropertyService.ConfigDirectory, "schemas");
+            }
+        }
+        */
+
+        /// <summary>
+        /// Should really pass schema info with the event.
+        /// </summary>
+        static void OnUserSchemaAdded()
+        {
+            if (UserSchemaAdded != null)
+            {
+                UserSchemaAdded(manager, new EventArgs());
+            }
+        }
+
+        /// <summary>
+        /// Should really pass schema info with the event.
+        /// </summary>
+        static void OnUserSchemaRemoved()
+        {
+            if (UserSchemaRemoved != null)
+            {
+                UserSchemaRemoved(manager, new EventArgs());
+            }
+        }
+    }
+}

Modified: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditorCtrl.cs
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditorCtrl.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlEditorCtrl.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -97,6 +97,12 @@
 
             txtXmlContent.TextChanged += new EventHandler(OnTextContentChanged);
         }
+
+        public void LoadAutoCompletionData(string xsdPath)
+        {
+            txtXmlContent.SchemaCompletionDataItems = Maestro.Editors.Generic.XmlEditor.AutoCompletion.XmlSchemaManager.Instance.SchemaCompletionDataItems;
+            txtXmlContent.DefaultSchemaCompletionData = new XmlEditor.AutoCompletion.XmlSchemaCompletionData(xsdPath);
+        }
         
         private string _origText;
         

Modified: branches/maestro-5.0.x/Maestro.Editors/Generic/XmlTextEditorControl.cs
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Generic/XmlTextEditorControl.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Maestro.Editors/Generic/XmlTextEditorControl.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -30,6 +30,7 @@
 using ICSharpCode.TextEditor.Gui.CompletionWindow;
 using Maestro.Editors.Generic.XmlEditor;
 using System.Drawing;
+using Maestro.Editors.Generic.XmlEditor.AutoCompletion;
 
 namespace Maestro.Editors.Generic
 {
@@ -83,6 +84,275 @@
             else
                 action();
         }
+
+        #region XML auto-completion stuff
+
+        protected override void InitializeTextAreaControl(TextAreaControl newControl)
+        {
+            base.InitializeTextAreaControl(newControl);
+
+            //primaryTextAreaControl = newControl;
+
+            newControl.TextArea.KeyEventHandler += new ICSharpCode.TextEditor.KeyEventHandler(HandleKeyPress);
+            /*
+            newControl.ContextMenuStrip = contextMenuStrip;
+            newControl.SelectionManager.SelectionChanged += new EventHandler(SelectionChanged);
+            newControl.Document.DocumentChanged += new DocumentEventHandler(DocumentChanged);
+            newControl.TextArea.ClipboardHandler.CopyText += new CopyTextEventHandler(ClipboardHandlerCopyText);
+
+            newControl.MouseWheel += new MouseEventHandler(TextAreaMouseWheel);
+            newControl.DoHandleMousewheel = false;
+             */
+        }
+
+        CodeCompletionWindow codeCompletionWindow;
+        XmlSchemaCompletionDataCollection schemaCompletionDataItems = new XmlSchemaCompletionDataCollection();
+        XmlSchemaCompletionData defaultSchemaCompletionData = null;
+
+        /// <summary>
+        /// Gets the schemas that the xml editor will use.
+        /// </summary>
+        /// <remarks>
+        /// Probably should NOT have a 'set' property, but allowing one
+        /// allows us to share the completion data amongst multiple
+        /// xml editor controls.
+        /// </remarks>
+        public XmlSchemaCompletionDataCollection SchemaCompletionDataItems
+        {
+            get
+            {
+                return schemaCompletionDataItems;
+            }
+            set
+            {
+                schemaCompletionDataItems = value;
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets the default schema completion data associated with this
+        /// view.
+        /// </summary>
+        public XmlSchemaCompletionData DefaultSchemaCompletionData
+        {
+            get
+            {
+                return defaultSchemaCompletionData;
+            }
+            set
+            {
+                defaultSchemaCompletionData = value;
+            }
+        }
+
+        char GetCharacterBeforeCaret()
+        {
+            string text = Document.GetText(ActiveTextAreaControl.TextArea.Caret.Offset - 1, 1);
+            if (text.Length > 0)
+            {
+                return text[0];
+            }
+
+            return '\0';
+        }
+
+        bool IsCaretAtDocumentStart
+        {
+            get
+            {
+                return ActiveTextAreaControl.TextArea.Caret.Offset == 0;
+            }
+        }
+
+        /// <summary>
+        /// Called when the user hits Ctrl+Space.
+        /// </summary>
+        public void ShowCompletionWindow()
+        {
+            if (!IsCaretAtDocumentStart)
+            {
+                // Find character before cursor.
+
+                char ch = GetCharacterBeforeCaret();
+
+                HandleKeyPress(ch);
+            }
+        }
+
+        /// <summary>
+        /// Captures the user's key presses.
+        /// </summary>
+        /// <remarks>
+        /// <para>The code completion window ProcessKeyEvent is not perfect
+        /// when typing xml.  If enter a space or ':' the text is
+        /// autocompleted when it should not be.</para>
+        /// <para>The code completion window has one predefined width,
+        /// which cuts off any long namespaces that we show.</para>
+        /// <para>The above issues have been resolved by duplicating
+        /// the code completion window and fixing the problems in the
+        /// duplicated class.</para>
+        /// </remarks>
+        protected bool HandleKeyPress(char ch)
+        {
+            if (IsCodeCompletionWindowOpen)
+            {
+                if (codeCompletionWindow.ProcessKeyEvent(ch))
+                {
+                    return false;
+                }
+            }
+
+            try
+            {
+                switch (ch)
+                {
+                    case '<':
+                    case ' ':
+                    case '=':
+                        ShowCompletionWindow(ch);
+                        return false;
+                    default:
+                        if (XmlParser.IsAttributeValueChar(ch))
+                        {
+                            if (IsInsideQuotes(ActiveTextAreaControl.TextArea))
+                            {
+                                // Have to insert the character ourselves since
+                                // it is not actually inserted yet.  If it is not
+                                // inserted now the code completion will not work
+                                // since the completion data provider attempts to
+                                // include the key typed as the pre-selected text.
+                                InsertCharacter(ch);
+                                ShowCompletionWindow(ch);
+                                return true;
+                            }
+                        }
+                        break;
+                }
+            }
+            catch (Exception e)
+            {
+                ErrorDialog.Show(e);
+            }
+
+            return false;
+        }
+
+        bool IsCodeCompletionEnabled
+        {
+            get
+            {
+                return true;
+            }
+        }
+
+        /// <summary>
+        /// Checks whether the caret is inside a set of quotes (" or ').
+        /// </summary>
+        bool IsInsideQuotes(TextArea textArea)
+        {
+            bool inside = false;
+
+            LineSegment line = textArea.Document.GetLineSegment(textArea.Document.GetLineNumberForOffset(textArea.Caret.Offset));
+            if (line != null)
+            {
+                if ((line.Offset + line.Length > textArea.Caret.Offset) &&
+                    (line.Offset < textArea.Caret.Offset))
+                {
+
+                    char charAfter = textArea.Document.GetCharAt(textArea.Caret.Offset);
+                    char charBefore = textArea.Document.GetCharAt(textArea.Caret.Offset - 1);
+
+                    if (((charBefore == '\'') && (charAfter == '\'')) ||
+                        ((charBefore == '\"') && (charAfter == '\"')))
+                    {
+                        inside = true;
+                    }
+                }
+            }
+
+            return inside;
+        }
+
+        /// <summary>
+        /// Inserts a character into the text editor at the current offset.
+        /// </summary>
+        /// <remarks>
+        /// This code is copied from the TextArea.SimulateKeyPress method.  This
+        /// code is needed to handle an issue with code completion.  What if
+        /// we want to include the character just typed as the pre-selected text
+        /// for autocompletion?  If we do not insert the character before
+        /// displaying the autocompletion list we cannot set the pre-selected text
+        /// because it is not actually inserted yet.  The autocompletion window
+        /// checks the offset of the pre-selected text and closes the window
+        /// if the range is wrong.  The offset check is always wrong since the text
+        /// does not actually exist yet.  The check occurs in
+        /// CodeCompletionWindow.CaretOffsetChanged:
+        /// <code>[[!CDATA[	int offset = control.ActiveTextAreaControl.Caret.Offset;
+        ///
+        ///	if (offset < startOffset || offset > endOffset) {
+        ///		Close();
+        ///	} else {
+        ///		codeCompletionListView.SelectItemWithStart(control.Document.GetText(startOffset, offset - startOffset));
+        ///	}]]
+        /// </code>
+        /// The Close method is called because the offset is out of the range.
+        /// </remarks>
+        void InsertCharacter(char ch)
+        {
+            ActiveTextAreaControl.TextArea.BeginUpdate();
+            Document.UndoStack.StartUndoGroup();
+
+            switch (ActiveTextAreaControl.TextArea.Caret.CaretMode)
+            {
+                case CaretMode.InsertMode:
+                    ActiveTextAreaControl.TextArea.InsertChar(ch);
+                    break;
+                case CaretMode.OverwriteMode:
+                    ActiveTextAreaControl.TextArea.ReplaceChar(ch);
+                    break;
+            }
+            int currentLineNr = ActiveTextAreaControl.TextArea.Caret.Line;
+            Document.FormattingStrategy.FormatLine(ActiveTextAreaControl.TextArea, currentLineNr, Document.PositionToOffset(ActiveTextAreaControl.TextArea.Caret.Position), ch);
+
+            ActiveTextAreaControl.TextArea.EndUpdate();
+            Document.UndoStack.EndUndoGroup();
+        }
+
+        void CodeCompletionWindowClosed(object sender, EventArgs e)
+        {
+            codeCompletionWindow.Closed -= new EventHandler(CodeCompletionWindowClosed);
+            codeCompletionWindow.Dispose();
+            codeCompletionWindow = null;
+        }
+
+        bool IsCodeCompletionWindowOpen
+        {
+            get
+            {
+                return ((codeCompletionWindow != null) && (!codeCompletionWindow.IsDisposed));
+            }
+        }
+
+        void ShowCompletionWindow(char ch)
+        {
+            if (IsCodeCompletionWindowOpen)
+            {
+                codeCompletionWindow.Close();
+            }
+
+            if (IsCodeCompletionEnabled)
+            {
+                XmlCompletionDataProvider completionDataProvider = new XmlCompletionDataProvider(schemaCompletionDataItems, defaultSchemaCompletionData, string.Empty /* defaultNamespacePrefix */);
+                codeCompletionWindow = CodeCompletionWindow.ShowCompletionWindow(ParentForm, this, FileName, completionDataProvider, ch, true /* showDeclarationWindow */, false);
+
+                if (codeCompletionWindow != null)
+                {
+                    codeCompletionWindow.Closed += new EventHandler(CodeCompletionWindowClosed);
+                }
+            }
+        }
+
+        #endregion
     }
 
     public class TextEditorProperties : ITextEditorProperties
@@ -286,8 +556,8 @@
                 ShowInvalidLines = true,
                 ShowMatchingBracket = true,
                 IsIconBarVisible = true,
+                IndentStyle = ICSharpCode.TextEditor.Document.IndentStyle.Smart,
                 IndentationSize = 2,
-                IndentStyle = ICSharpCode.TextEditor.Document.IndentStyle.Smart,
                 DocumentSelectionMode = ICSharpCode.TextEditor.Document.DocumentSelectionMode.Normal,
                 LineViewerStyle = ICSharpCode.TextEditor.Document.LineViewerStyle.FullRow,
                 ConvertTabsToSpaces = true,

Modified: branches/maestro-5.0.x/Maestro.Editors/Maestro.Editors.csproj
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Maestro.Editors.csproj	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Maestro.Editors/Maestro.Editors.csproj	2013-09-14 16:22:05 UTC (rev 7858)
@@ -545,6 +545,17 @@
     <Compile Include="Fusion\WidgetSettingsCtrl.Designer.cs">
       <DependentUpon>WidgetSettingsCtrl.cs</DependentUpon>
     </Compile>
+    <Compile Include="Generic\XmlEditor\AutoCompletion\QualifiedName.cs" />
+    <Compile Include="Generic\XmlEditor\AutoCompletion\QualifiedNameCollection.cs" />
+    <Compile Include="Generic\XmlEditor\AutoCompletion\XmlCompletionData.cs" />
+    <Compile Include="Generic\XmlEditor\AutoCompletion\XmlCompletionDataCollection.cs" />
+    <Compile Include="Generic\XmlEditor\AutoCompletion\XmlCompletionDataProvider.cs" />
+    <Compile Include="Generic\XmlEditor\AutoCompletion\XmlElementPath.cs" />
+    <Compile Include="Generic\XmlEditor\AutoCompletion\XmlParser.cs" />
+    <Compile Include="Generic\XmlEditor\AutoCompletion\XmlSchemaAssociation.cs" />
+    <Compile Include="Generic\XmlEditor\AutoCompletion\XmlSchemaCompletionData.cs" />
+    <Compile Include="Generic\XmlEditor\AutoCompletion\XmlSchemaCompletionDataCollection.cs" />
+    <Compile Include="Generic\XmlEditor\AutoCompletion\XmlSchemaManager.cs" />
     <Compile Include="Generic\XmlEditor\XmlEditorOptions.cs" />
     <Compile Include="Generic\XmlEditor\XmlFoldingStrategy.cs" />
     <Compile Include="Generic\XmlEditor\XmlFormattingStrategy.cs" />
@@ -2277,6 +2288,7 @@
     <Content Include="OdbcDriverMap.xml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>
+    <None Include="Resources\document-code.png" />
     <None Include="Resources\document-search-result.png" />
     <None Include="Resources\arrow-split.png" />
     <None Include="Resources\folder-horizontal-open.png" />

Modified: branches/maestro-5.0.x/Maestro.Editors/Properties/Resources.Designer.cs
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Properties/Resources.Designer.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Maestro.Editors/Properties/Resources.Designer.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.18047
+//     Runtime Version:4.0.30319.18052
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
@@ -417,6 +417,16 @@
         /// <summary>
         ///   Looks up a localized resource of type System.Drawing.Bitmap.
         /// </summary>
+        internal static System.Drawing.Bitmap document_code {
+            get {
+                object obj = ResourceManager.GetObject("document_code", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
         internal static System.Drawing.Bitmap document_copy {
             get {
                 object obj = ResourceManager.GetObject("document-copy", resourceCulture);

Modified: branches/maestro-5.0.x/Maestro.Editors/Properties/Resources.resx
===================================================================
--- branches/maestro-5.0.x/Maestro.Editors/Properties/Resources.resx	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Maestro.Editors/Properties/Resources.resx	2013-09-14 16:22:05 UTC (rev 7858)
@@ -144,17 +144,17 @@
   <data name="blueprints" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACLklEQVQ4T4WSTUhUURTHz8q2
-        BW2azURMJFkQBIEQjqsoaJHmQIuWWREMlZl9qOnCTS6UgoohZ1pUZpPDUFEUVkrqaM2FMiVnkomk6cOQ
-        t3Dec56r0/lfmsfzMdWFH9zLfed/fufyKBhboNpbvzTY/zlH5KzKURUKBbY2NFBlfT1tqaujUoETUtP3
-        gwTVNlnkxNwKnxle5lMvinxyqMiHB/IsxceEwF8DYLA7klfJ3AqPfrV54KPF/TMW3/lg8YG+DGNJ8XFh
-        s9tglXIw+tPaf2+RQ/FFPprI6pATTw2u6U45+MLPlEDQ/adyy+0n3JjIcPfEkg6BCcbZdTWnBILuf5XD
-        0UfcOJjh8HNDj4M32dmTVQJR9fV5oC6mTI7P4tIoq1zVPurc4WF3XJ5RAhE0oNM6UeB4xnJCvMp7o/N8
-        +qXB96VJy2uLt3W9UwIRNKDTNlngsbzNTa8Mvjll6m5u5dobOafB+TGTKzvTSiCCBnTa3xR4MGvxAwEh
-        6FYaB8r7InPyTxg65MK4yYHWlBKIoAGdS28LPP7N5uYRQ3/Yk15apbzn2qxuAMtkzuaNZ0eUQAQN6HSk
-        xeCTpQNi06bTDQ8L5ereaYblw882d6plXn8kqSp824mgAZ0O6ZiQgFIIurmV/c3D1pqDMVWiIniun4g2
-        0YZDVwg6j7/YnPpu6xCMggC3sr9paEoKfB7WyZnWQqfrvckIgQnGwZt4leVbXeBdftG569Yrt3eUPdW/
-        Ab7ReT9BDLTyAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACIElEQVQ4T4WQTUhUYRSGz8q2
+        BW2azURMJFkQBIEQjqsoaJHmgAuXWREMlZn9qOnCTS6MgoohZ1pUZpPDUFEUVkrqaM0HZUrOJBOJ0y9y
+        F869znX1ds6Hc7kzTHjg4d6Pc897nu+SP/KHau/+1cj72jnEqHJUBQK+nQ0NVFlfTzvq6qgoQKjp/yWo
+        jqk8YvOrODeygjOv8zg9nEfTYBY8fILx/TdAzvtDWRXPrGJs0cbgFwsDsxbuf7ZwpD8FKR4+yWx3BxQp
+        +8O/rcMPlxCILuF4LK1DTr0wUNObcPAEXyqG1lVuu/cczbEUeieXdYiYSG/fjYxiSHTXVQ6Gn6J5KIXg
+        K0P3ZMHevrRiiKpvLQjqcsJEdE6aRlnlqs4xpyeWe67OKoZINESnfTKHaMpyQkqVD4YXcPaNgUfcb3tn
+        YVfPR8UQiYbodEzlMJ610fLWwJ1pU4e4lWtvZ5wFF8dNVHYnFUMkGqLT+T6HobSFx4yEyDa38qHQPD8N
+        HXJpwoSvPaEYItEQnSsfcpj4YaN11NAf9iWXi5QP3JzTC8QynrGx9fyoYohEQ3S6kmzw1dIBkRnT2VZQ
+        rr42A7F88s1Gt1rB5mNxVeHZTSQaotPFG2McUAiRbW5lb+uIteFoRBWo8F8YIKJttKXxOonOs+82Ej9t
+        HSJXkQC3srdleJoHPCVsYmij6PR8MiEhYiLXkX9SqlwYKC0v6zxw65XDUS4qon++0Xk/qAJ7LQAAAABJ
+        RU5ErkJggg==
 </value>
   </data>
   <data name="icon_clearselect_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -175,16 +175,16 @@
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
         YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACLUlEQVQ4T52ST0iTYRzHn0vB
-        qK4h3YQu4aEOFmMYmQ461ASTdRDyojRzltFbzFZrik2DIKJDdik6dAg6BHXokIo61prOVzfX2GROUZes
-        xXRs7/64d/v2/F7aG4MdxAe+vL/fC58vH573ZUa73cBz44AxsA6bzYQDHmJZu9XaW+YFei/QOl9Gy1wJ
-        Fz0yLrj3cN6VR5MzC92sBO10GuemUjg7uYvGiR0QQyxrs1j65HJZKXiahFLgSMh48ruoFNhjWdg2M0qB
-        dT2FweiOUkAMseyyIJgLpZJq0CNKcPgTGFmKY1jcxpA3hsfzW3jk2YDVvY4H39cw6IqCGGLZpYGBWzlZ
-        Vg1G/X+wx3eKKxhU52mfT50nFhZADLFMbzbfzhSLqgEVeFZW4A6FsBSNwhkIYHZ5GV7+bmpxEZOiCCpQ
-        GM6yZpPpTqpQqDKQ+E4hg8pMBpWZCoghljV1d99N5vM1DcTVVdVgLhyuMiCGWKbt6hISuVyVQYrvFDKo
-        zGRA8+hMEs+/BUEMsayxs/N+PJutaeCNRFSDH/xO6A6uvoso+Rjgn5Oz7IzRaPklSVUGSb5TyODh5zUY
-        34Rx5ZVfeVLGY0AHf57uf/GBnTIYrFuZTE0DKmh95sbLTaDvJ3Dd9z9CCDh572uM1el0w3F+oxvpdM30
-        v/eh2TFTFa2L/7FjTtS1C5+Ypr7+5pGGhrH95ti119uUoy09X4hl/Gh4jvOc2E8Ot42/PaQf6f3HaP4C
-        dRjFo//0njYAAAAASUVORK5CYII=
+        qK4h3YQu4aEOFmMYmQ461ASLdRDyojRzltFbzN5aS2waBBEdskvRoUPQIahDh1TUsdZ0vrq5xiZzirpk
+        LWZje/fH/fn2/F7YGy/sIL7w5fn9Xvh8+fC+DzM7HCae6/uMiV2x2y3Y50Ms6xTFvipfjD6gfb6KtrkK
+        znvLOOfZxVl3AS2uHAyzMvTTGZyZSuP05F80T+yAGGJZh83WX65WlYKnKSgFzmQZT36XlAJHPAf7ZlYp
+        ENfTGIrtKAXEEMsuCoK1WKmoBr2SDGcgiZGlBIalbTz2xfFofgsPvRsQPeu4/30NQ+4YiCGWXRgcvJkv
+        l1WD0cAf7PKd4g6F1Hna71fniYUFEEMsM1qtt7KlkmpABd6VFXjCYSzFYnAFg5hdXoaPv5taXMSkJCkF
+        CsNZ1mqx3E4XixoDme8UMqjNZFCbqYAYYllLT8+dVKFQ10BaXVUN5iIRjQExxDJ9d7eQzOc1Bmm+U8ig
+        NpMBnaMzKTz/FgIxxLLmrq57iVyuroEvGlUNfvCdDC6/iyr5GOS/k7PslNls+yXLGoMU3ylk8ODzGsxv
+        Irj0KqCclPE4v4X8PDnw4gM7YTKJW9lsXQMqaH/mwctNoP8ncM3/P0IYOH73a5w1GAzDCf5FNzKZuhl4
+        70erc0YTvZvf2DEXGjqFT0zX2HjjUFPT2F5z5Orrbcrhtt4vxDL+6HiO8hzbSw52jL89YBzp4zNnmO4f
+        dRjFo0T6AokAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="icon_panright" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -240,30 +240,30 @@
   <data name="sum" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAtElEQVQ4T2P4//8/AyWYIs0g
-        iweZAYyMjAxA3AjEa3BgkByKq1E4UAM4gXQPEK8HYh2oGMhgEBskRtAAkGKQIROAeAsQ6yEZokusASBD
-        uIB4ChDvBGJ9JENwu4ABCqCKDYD0fiCeATUMZCgYI6cbVA7CACOgwqNAPBemGSQFZIPECRpgAlR0BogX
-        gzTDXAWkYeJ4DeAEKlwPxA9x4A1AcS58XgAZIAzEUjiwKF4DyMlUA58XALSICQGuLQH3AAAAAElFTkSu
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAtElEQVQ4T6XMKw4CMRSF4Y6c
+        WoJhDbxC2CAegUBgUFiSQWBQKBybYCXlvzMl6UnahEKTLzPntPe6EMJfsmWNbFkjW9aQ0DSN2eBcYHcy
+        I8Eu0WKLDtPYGfu3TmYkJI9tyQ5XzGNnZvZNZyQkD43HHjcsYtdLZzTEEx8ucccBtqxqwQoPHNEPJ73O
+        SBjOmkdPnOBjZ+fT64wE51p0eBVc4GVGwrBghEnBGOUFv8iWNbLl94J7A7SICQEtnzdJAAAAAElFTkSu
         QmCC
 </value>
   </data>
   <data name="map--arrow" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC5ElEQVQ4T53STUzTZwDH8ecy
-        E52e57yZnRaiWRZdCPHgYdHDhtMwdkA0MQ0UeauA0A55UQSRYJEgL4KCQIq2EMGmCgEE5K0DLGwoXUFR
-        wLYgEtm0BSQi3z1PYrKYeDA+yef2+/6T////iNDMzGAp8jME/5qRIURIerqWzziqk4Q4lJoatS4fUNeX
-        RtNQDn1jxTgn63BMtmF6OEb2oAdDj5eEVi9xNi/RjV7UXnWSEAf0+ui19XWudabQPmlk0FPOkKucxZVO
-        /vZNYJ7zk2H3ctYJaQ6ItnpRe9VJQvyUlBSz+u4d5a0J3Hado/NpIa0jRp77brGwbGfgnxny70+R9whO
-        P4BYmxu1V50kxH6dLm5lbY1iWwwVbYnU3kvFOpxL12ghD8ZrGZxoxuxykWWfJqVrBl3LDGqvOkmIH2Ni
-        4v1v33LxZhRmxymsY2cxdZ/iD/dlphYtvFzuoMPZgWXuNcYn6yS2T6P2qpOE2KvVnni1uorxeiQmu576
-        kXSutidz98lFhmcrmX3VxLCrQb7KNJXuVQxdU6i96iQh9mg0iYtv3lBQpaWmO5m6QQOld3TcGT/Pvaki
-        nC9qcYxV4vY7aF2Y53TPY9RedZIQgUePJi2srFBYGk1+dQQXzBGUNMdR1nyCqrsG6nuzsDtLcTysoW20
-        hWONT2ka96E6SYhdYWHJ88vLFBfGYbIaqOk4yQVLBJbhNKzObPlrC2jsz8Hz701eLPXwS/UEh80efkip
-        uPF9QpkQ34WG6meXlijJ12GpT6f2dgrnTRpMA3oa/sxAc93GvqJuDl4ZIOSqg59Lhyjzws4z/Z4dOX+F
-        i2+Dg1M9fj8lefFcyo/HeCmKvEoNeXUajA1agrJtFLnlBZIX6cjo/5LG4Zvfex1ia1DQmXn5VZ/5fB8V
-        axplb073BwL7YWvEjdmvY1vCxcbt249/GRCQ+6m2/HZ5TtkUGFa8efdhoc4m6Stp26fYcKCs6ot9uZHv
-        O/EfeeONT9E6bWgAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC30lEQVQ4T53SW0hTcQDH8f9L
+        QbfnLm/RU0QRUSHSQw9RD2UXyh7sAjF05m2p6Zap3TQTW4l5yUpLmbUpaWOlqKlpudRmZbmmZalt00yy
+        y6Ymmd/+/6cIeogOfOBw+H0fzjl/EXziRJAU9h+C9qSmCrE7JUXLf1yqk4TYlZQUPiMflD1KpqojnUfd
+        uTj7ynD01WF62U1auwdDi5fYWi/RNi8RlV7UXnWSENv1+ojpmRmuNyZS32ek3VNIh6uQsclGXvl6MQ/7
+        SbV7OeOEZAdEWL2oveokIbbGx0dO/fxJYW0sd11naXyXTe1TIx98dxidsNP2eZCsJ/1kvoaTLyDK5kbt
+        VScJsUWni56cnibXFsmVujhKHyRh7cygqSubFz2ltPdWY3a5OG0fILFpEF3NIGqvOkmITZGRMf4fP7h4
+        Oxyz4zjW7jOYmo/z2H2Z/jELnyYaaHA2YBn+hvHtDHH1A6i96iQhNmq1R75OTWG8GYbJrqf8aQrX6hO4
+        //YinUNFDH2totNVIV9lgCL3FIamftRedZIQGzSauLHv37lQrKWkOYGydgP593Tc6znHg/4cnB9LcXQX
+        4fY7qB0d4WTLG9RedZIQAQcPxo9OTpKdH0HWjVDOm0PJq46moPoIxfcNlD88jd2Zj+NlCXVdNRyqfEdV
+        jw/VSUKsDQlJGJmYIDc7GpPVQEnDUc5bQrF0JmN1pslfe4HK1nQ8X27zcbyFHTd62Wf2sD7xyq01sQVC
+        rA4O1g+Nj5OXpcNSnkLp3UTOmTSY2vRUPEtFc9PG5pxmdl5tY/c1B9vyOyjwwqpTrZ6V6c/3i+VBQUke
+        v5+8zBguZcVgvBROZpGGzDINxgotgWk2ctzyAMmDdKDrt/geWHbsoUMsCgw8NSK/6nuf76+iTF1sTG/+
+        Q0ArLAq9NbQ4qma/mLN06eF5K1Zk/KsFey8PK3MDQnLnr9sn1DVXWigt+ReztxcUz9qcESbvZSfEL3nj
+        jU/YIEHvAAAAAElFTkSuQmCC
 </value>
   </data>
   <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
@@ -273,15 +273,15 @@
   <data name="application-import" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABx0lEQVQ4T6XUPWgaYRgH8Afc
-        LIJjySiCOOrkopOCDoKKDiV0jW0phVJoh1BwcXdyUgRxEAQHEYyIuly0EZJKk+LgpPj9gYKC4te/7yMI
-        BQ0Y8sKPO47//+55D+4IAL0Gud3uPY/HoxLeCVdn4qyKXC7XwWWpVHqq1+uo1Wp4fPyDh4d73N39wu1t
-        CZJUFscKyuXfqFT+4uZGehLdS3I4HAcfc7kcstksMpkM0uk0UqkUkskkEokE4vE4YrEYotEoIpEIQqEQ
-        ZDLZFY9+4BXv4kVLdL1ktVrJ6XSyD9vtVoxXQT6fR7vdxmazeRZnuUMmk4ksFgvZ7fZPq9VqPzYvSZLQ
-        6/WwXC5P4ix3yGg0esRNvjLeJ+v3++AnVKtVjEYjzOfzI4vFAjab7TPpdLofpza+Xq/BodlshslkcoSv
-        m83mL6RWq9+rVKqfLBAIgLVaLfCIxWIRjUYDw+HwyHQ6BU9Nosg3IYPB8G08HsPv92O32yEcDu+30Ol0
-        TuIsd0ir1ZJer2ffB4MBgsEgfD4fCoUCms3mszjLHdJoNAfXPGq32z0LZ0X3muRy+Z5CofAqlUr/S3CH
-        /ltycf5WuDgTZ9+86lPm38A/lieNoGpgVUMAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABwklEQVQ4T6XTPWgacRgG8Bfc
+        LIJjyHgI4qiTi04KOggqOoSSNWlLKZRCO5SCi7uTkyKIgyA4iGBE1OWijZBUmhQHJ8XvDxQUFL+e3nsg
+        lGjA0Bd+HBzPc//3PxwB+C/k8XhkXq9XkFxIrk7EWYHcbvfe21Kp9FSv11Gr1fD4+BsPD/e4u/uJ29sS
+        RLEsPSsol3+hUvmDmxvxiTvkdDr33udyOWSzWWQyGaTTaaRSKSSTSSQSCcTjccRiMUSjUUQiEYRCISgU
+        iitefe9autOrhjtks9nI5XKxd9vtVlqvgnw+j3a7jc1m8yLOcofMZjNZrVZyOBwfVquVvDaPKIro9XpY
+        LpdHcZY7ZDKZvNJHPjO+J+v3+/IJ1WoVo9EI8/n8wGKxgN1u/0h6vf6bfOSzWa/Xcmg2m2EymRzg9xaL
+        5RNpNJpLQRB+sEAgANZqteQVi8UiGo0GhsPhgel0Ct6apCJ/hIxG45fxeAy/34/dbodwOCxfodPpHMVZ
+        7pBOpyODwcC+DgYDBINB+Hw+FAoFNJvNF3GWO6TVave+82rdbvcknOUOKZVKmUqlular1f7X4A79M0rJ
+        meT8RJx9c/QXPR3oL5YnjaBUK8UhAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_plotdwf_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -320,34 +320,34 @@
   <data name="database--plus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACQUlEQVQ4T5WST2iSYRzHn5qK
-        Hhq1oMLLoINsbC4wki6CXUZ/NsHES0SnGhTrFJIDDy47OnaoLd6pzbk5nU77N6evUzcyK927IQt0NMrt
-        jd7I/hBdOn573rEO5qL5wIeHh9/v+4Xny5eYzWayQy+9+/aIuLut+yMmBoOhr1qtolKpoFQqYW3tDdLp
-        V5ibyyGVWkU+v4Fy+TME4Rfo7g2j0UhEagwEQUCxWKTCNFg2icnJCFzuMKYDCSTYApa5d9jifzZgMBXB
-        GDXwB+cRT75GgdvAJv+jEYNZMJ4ZTAVjmE++RJ5bR4X/9k+Dk/39/c9cLhcYhsHw8DBsNhusVivsdjuc
-        TifEmcViidMMtLtm8HeIqUwOT+YXEU/nkC0Usbb+HpvC171/wecP48G4H95QFE8XMsitFLHBf2zAYDqE
-        0fFJjIfCeJxawIuVFbzl+QYMAiGMeCfwMDyDR6kEeuOX0RHTQTnUllUPaEn7bU1ND/4bYqvvBK5+t0Di
-        PVomE4cJ8bQQYjKZtunp6alrYmopi0g8gQvRS1AFTqF95jTMX/ogHz22RcUccbcwRKvVku7ubqLX66/V
-        NpGFLxjEPZ8HrWNdOPPpYh1k5CBHxKNSqYharb6+u4EbOuYsjo92QTWmQSevg/TuIZ44mzky1MyIegXl
-        iFKpvFXXg6XnmE3MIboYA7ucQdt9DZSVDjRZD3wQNTtaQpMgnQqF4qZcLh+USqWDEolE5A7FQd8OmUzm
-        oDNH03nZ6r4rMmH/OSkraigtvwEKQSNnrT8HPgAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACN0lEQVQ4T5WQTWiScRzH/zUV
+        PTTKoMLLoINsbC4wki4Du4xeNsHES0SnEop1CsnBDi47OjzUjMeXdDo3X6a9+T51kVnpHocYzJGU2xM9
+        kb0QXTp+e55RwdqC+YfP4c//9/3w/32JXq//wyiHYZfws5u5vwKNRmNot9totVpYXV1Fvf4a+fxLxOMl
+        5HIrKJebaDQ+gWV/gpu9ptVqCc8WAcuyqNVqXDCPTCYLvz8KpyuCufk00pkKlum32GB+dCCYjcLBCQLB
+        JFLZV6jQTawz3zsRLIByhzAbTCCZfYEyvYYW8/W/guNjY2NPnE4nKIqCzWbDxMQETCYTzGYzrFYr+Dej
+        0ZjiZlU7/uDfEnOFEh4ll5DKl1Cs1FBfe4d19svuV/AFIrjnCcAbjuHxYgGlag1N5kMHgrkw7B4/POEI
+        HuYW8bxaxRuG6UAwH8a0dwb3IyE8yKUxmrqI/sQQZFO9RcW4ivTdVHZWYo/vGC5/M0LgPdwgMwcJcUsJ
+        0el0m4yMjGwv8WkR0VQa52IXIJ8/gb7QSeg/GyC2H9ngwjRxSSmiUqnI8PAwUavVV7aukIEvGMQdnxs9
+        jkGc+nh+G2R6P034I5fLiUKhuLqzwIUh6jSO2gchdygxwAxBePsAQ6zdNJnqpvi8hOOQTCa7sX2FZ1hI
+        xxFbSiCzXEDvXSVkrX50mfa95zO/s4RrggxIJJLrYrF4UigUTgoEAp5bHBbubhGJRBbuzdJ1VrSy55KI
+        3XtGmOEzhBDpLwpBI2fkOXsyAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="printer" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACYklEQVQ4T42SX0hTYRjGX1To
-        omIggdDVLvJi5o0IJjrI5ZgtNuG4KVsodtPZGSNScirHzY2mTIQSDPVK8MKBN6JSyVTUGAkTuqyLBInU
-        iQRZ+OdChz5978nBxJTew+/84/c853zwkbO7mzLUh0J2gXwJdxzBIEldXecgfpmF51c6jdTBATb29/F9
-        b09jJpGAcDyCwgsFkqpSFsrvoyNs7O7i684Ovmxv43MqhdjsLHiEp1hbW/UmRSGmzuMhcjgcVCfLVNvR
-        wXj3j4/xQ3w1u+TN+DgyFFqtAQE9qK/XstrJ6XSSo6mJbG1tvgNR8PPw8EIJ/wkvhx12tcxZQY54sAs8
-        eXl5r/x+P66CHXY5IwpySJKkW6qqhnbEmhVFQSQSQTAYvEAgEEA4HNacra0tdHZ2hjhLNpvNMDg4OLa2
-        tgaXy4X29nbIsozm5mZIUh2qq82orDSirOwerNZHmjM3t4yent4xzlJNTU3V5OTk8urqKsxmswh7YLFY
-        YTRWieD9c5jNDzVnZmYBAwPDy5wlk8nkSiaT60tLSygpKUFDQ6OQ7P/EYqnVHFkcExPv1zlLFRUVz+Lx
-        OGKxGPR6PZzOJ7DbH18KO6Ojo5iamgJnqbS01J9IfMT0dBw+33P09w+jr28I0ehwFiPi/i9ebysWFj5p
-        cJYMBoO6uLiC+fkVuN3u/yJTwFnS6XQt+fn5vUxubm5fSmyY6mgKr9+mMPTuAypfuHG3UYXRO4Jvm5tg
-        J+NzlsTcFNxmCsrLX2qbPmtOTk/BpE9OkBZXdjL+WZY7iK4VFNCN4uKn14uKolfBDruZ+QOvqgI74xfB
-        qAAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACXklEQVQ4T42ST0iacRjHf6xg
+        h20EMRB28rAOti4htDBhOcXm0OBVCx2Fu+xVkbFiafKmGaswgi1wVKegQ0KXKNkWVlRDFiTsuB0WxFhp
+        xGBt9OdQUt/9nrcUoxV7Xj7K6/v5PO8rvMze3V2gKRKxcMRLuGsLh5nQ1XUORj8W4f6dyyG7v4+NvT38
+        2N2VSaRSoGucigsLBEkqxvPn8BAbOzv4tr2Nr1tb+JLNIj47Cxq6bmpvV+o8HkZY3W7+BDYbs4oia+zs
+        JLx7R0f4ye9avOTtxESBCpMpxGEPm5rkVv6w2+3M1trKzB0dvn2+4NfBwYUl9CT0d8ghV27OFlzjJxaO
+        u7S09LXf78dVkEMuNdQyQRBuS5IU2eZ38ng86O3tRTgcvkAoFEJPT4/sZDIZBIPBCLXMbDarYrHY+Nra
+        GhwOBwKBAERRhMvlgiBYodcbUFenRU3NfZhMj2Vnbm4ZfX3949SyhoaG+qmpqeV0Og2DwcBjN4xGE7Ta
+        eh4+OIfB8Eh2EokFDA2NLFPLdDqdY3V1dX1paQnV1dVobm7hkuWfGI2NsiPyY3Lywzq1TKPRPE8mk4jH
+        41AqlbDbn8JieXIp5IyNjWF6ehrUMrVa7U+lPmFmJgmf7wUGB0cwMDCMaHSkiNECXm87FhY+y1DLVCqV
+        tLi4gvn5FTidzv8iv4BaVlZW1lZeXt5PlJSUDGT5C6OPZvHmXRbD7z+i7qUT91okaL2j+L65CXLyPrWM
+        zy3OHUJRW/tKfumL5vjkRCZ3fIwc/yYn75+1p3NdoWA3q6qe3aisjF4FOeSeDmN/Aa+qAjvcCoH6AAAA
+        AElFTkSuQmCC
 </value>
   </data>
   <data name="icon_measure" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -389,19 +389,19 @@
   <data name="database_share" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACqklEQVQ4T5WSa0iTURjHz6oP
-        Db8EpfghDLpRKH5RhBXJGIE52VzNVaybEGibFZZ9UNIuGDgIxRRzF3NL1FDx0tzm5iWdl3nZ61Rkajd1
-        inOogRJlkPDvvAMTh4Ed+MF5Xt73d97n/xwik8lIACJap+wC9j0S+DERi8UpS0tLmJ6ehtvtBsOMwmzu
-        hdU6hL6+SfrMi4WFnxCJREqJRLKzwOv1wuVyob29HSaTBbqyWhgqjGg29WJg8CNmPav/K6iBvqIJRnM3
-        +ocmMOP5tiXg8xO2tUFbiFIoFM1arRZqtRoqlQqZmZnIzs7270tLS5GRkdFCW4jxtxASEhMoCMhgBKYW
-        O0y2HnQ5hjHi/ozZheWtPyAkfJuEDTEwA62+GrrKGtRbrOh2Mvjkmd8uYCWbo9xJoNFXQVv1DnUtZnQ5
-        BzE1N/NvQXLiuV1lIBQKYxISEghd4cMsUqk0lcUgP2gbe6OEU6uEqyEfTocdzbYONLbaYOu3Y2DChSnv
-        V/D5/FSBQEBIenoRJJKH2NjYgNFoBL7U+Pk9WYn51jy0qpJQnnsbakMxqqz1aGM6MT43gcjIyLQs4WFC
-        4uPTwONdh8/nQ3V1NdZdOqz1Ff3lB6PBVH0WGp/Go+r1Ixhr82EpkKNQxHV0JO9Tkujoy4iISPRfXY1G
-        g+8DJRgtT4O94BraVDKMGe5h+cNL/KLit/fPgCm7g1V6AFs3yffqSFycAlFRMiwuLiI0NPT5K2nw+GDJ
-        jRXP+ydgNCmw5Eqgv8uDNjUanflyzBtz1nvyLrgbFMe69Bf3XKEhnlhjCQoKyuNyuQ/OhpGbj2NJXeGl
-        Q+OOwqsrPksuNmHr4qTgkRcCTsn5oxye+BSHnQIJo5ymRFCOU05SoqjoFit6xifMJjmxpDb2CKH3lxyg
-        7Kdw/gAsOxzv+3rD2AAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACnElEQVQ4T5XRa0hTYRzH8WfV
+        i4ZvglJ8EQbdKBLfTIQVyRiBubG5mqtYVwi0zQrLXihpFwwchGKKuYu5JW6h4qW5zc1LOi/zsuNUZGo3
+        dYpzqIESZZDw65yBicvCXnzhPIfDh/P8/0Qmk4UmokvZRsx35A9ALBanLCwsYHJyEl6vFxQ1DKu1G3b7
+        AHp6xul3fszNfYdIJFJKJJKtAb/fD4/Hg9bWVlgsNujKqmGoMKPR0o2+/veY9i3/L1AFfUUDzNZO9A6M
+        Ycr3ZQPg8YShAEehUDRqtVqo1WqoVCpkZmYiOzs7+FxaWoqMjIwmGogLAhERcaFAyAyGYGlywuLoQodr
+        EEPej5ieW9z4A0JObEK2uoJWb4Kusgq1Njs63RQ++GY3A0z/AjR6I7TGN6hpsqLD3Y+Jmam/AzeSTm9r
+        BgKBIE4oFAaBQSapVJrKZJDvdYy8UsKtVcJTlw+3y4lGRxvqmx1w9DrRN+bBhP8zeDxeKp/PJyQ9vQgS
+        yX2sra3BbDYDn6qC/RyvxGxzHppVySjPvQm1oRhGey1aqHaMzowhJiYmLUuwn5DExDRwuVcQCARgMpmw
+        6tFhpafod98oDSZqs1D/OBHGlw9grs6HrUCOQhHb1XZjl5LExl5AdHRScG0ajQZf+0owXJ4GZ8FltKhk
+        GDHcweK75/hBw6/vngRVdgvLNMycG+Q7dSQhQQEOR4b5+XlERkY+fSENH+0vubrke/sIlCYFtlwJ9Le5
+        0KbGoj1fjllzzmpX3llvneJQh/7cjov0EI+sMIWFheWx2ex7p6LItYfxpKbw/L5RV+GlpYAtF+sx5+Lk
+        8KFnfFbJmYMsrvgYi9kCiaI7ThdNd5juKB2Hhq4z0BMeodbLiSfV8QcIs/w9dLsJIaxfLDsc751acxMA
+        AAAASUVORK5CYII=
 </value>
   </data>
   <data name="icon_selectpolygon" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -415,16 +415,16 @@
   <data name="images_stack" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACAElEQVQ4T6WRXUiTURjHz03o
-        lK0EE1SwL9JCvJj4dZF14S5sMEVJB13YRYiitpjKbt7cuhGxZJDlLoKapkwqxUVRM9YkEwTPhR8QTENE
-        /ID0ItLEhrp/5znqcFim+MKf83J4nv/v/fEyAOw4YSVWK7vR0LD3NIi7ikPGEFZQYrOxIkWpFF+E4H9C
-        MzS7j1ysKK5+zvH86bV/5pUzA5vBIAwWS5UsOCr5hVOH31tbuG4211CBdN4l6x9wFLRwFNs5DA85bj7m
-        uOXguNfN0ebxS7KrS49fGxvQVVebjuTc+WlEkjvaC/EjEMDV8nIzIw9qHe2N/UtOh+5o5uXAsCQ3N2Vh
-        eX0dOWVldYw8qHWs7yz875Mw+WE7Ux/PYHrgPL55z2HSkyTJLq9Pku+atFhcW0O60Whh5EGtt3VX4LRl
-        YO7zJcwPXsbyRDYCK0b8nNFhYShVkq2vvZLscLuxJIpS9HqFkQe15iYmoiAtFfY76ehpyYR/uFT86Uas
-        fDdhdjBbkmvb+yX5Yn6+75RW26hOTq5g5EGtbnuUSDTePlLjXasGX1wxWPiagHFPHHzPToaRL+TlNTPG
-        EkRUjDyo9UltZChtdSo476sw9EaN3tYoOOoj95FPaDRiXzzkQT7zq6sHhmbCyNvrjJEH+RwmNBsi7xaI
-        M0IkfseJvA6Kas+efP0DD+tcAk1PV7wAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB7UlEQVQ4T6WPTUiTcRzH/5fI
+        GVsFKaRgb2SGeJhYdsg8uIMNpiTpwIMdRJTUxTR2eXLzIuILAy13CHJasuhFXCg6Y058gYH/QyUIs4iI
+        NDAPoiY2zH37//6iOWa+9YMPz3N4ns+HLwPwX7B8q5XdrqnZ/jQISveJIUyQb7OxW4pSJswI7QEdfRtR
+        zlMU1yDnaH+c+U9eOtPwOxSCwWK5e6jyU6cOv9bXcdNsrogo6xs5cpo58uwchiaOwoccdxwcD55ztHkC
+        suzq0uPn2hp05eWmA5WfDU3IcmdHLhaCQdwoKTEz2kHWd92ndiBm652+eTHsl+WG+quYX13FtaKiakY7
+        yPq+5ywC/QmYHtjg49sz+Dx8Hp+85zDtSZBll9cny/dMWnxfWUGq0WhhtIOsxbrrcNrS8G0kCTOjlzE/
+        mY7gkhGLX3SYHU+WZesrryw73G78EKJLer3CaAdZM+LjkZOSDHtlKl43X0HAXyBW12FpzoSvo+myXNUx
+        KMsXs7N9J7TaOnViYimjHWR126MFx9DbokZfqwZjrpOYnYrDB08sfE+Oh5UvZGU1MMbiBCpGO8j6qCpq
+        i7ZqFZy1Koy/UaO7NRqO+1ER5SMajfhfHO0g68zy8q5ElDePbGTdD2HlbXdUcFpA5r34W5bH2B8P61wC
+        XKQHIAAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="icon_selectradius" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -448,76 +448,75 @@
   <data name="edit-indent" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABjElEQVQ4T5XTS0sCURQH8OOm
-        rVmL1E0UGhRWJqGGBUapQZE9NpWQSBBtg4i2EkF9iXa10srHFJHUWNGDgmhTqyjaRASt293+Z3AmXyM0
-        8PPO3Hse98oMCSHIYDCwOCQgWbCHcR8OIAVpyIIEW5zDucpPocC/x/IC3LlWV+oNrClcQ6vkHFzR3wEH
-        qMHquLj5TaqFjS+Kxj/+CjQ7Y8Ts7iVlIbb+KSNI6OH1kgL983li3rlTCi8/MXH+8KOL1zlO+w/cMzkC
-        4RhP+z2zOeqLnMn8rIfXuaFWwB5KELyB4PvO8BG1j6YrdIxlyTl1yM2UHWsFbMEUgWgdTvjtoQyKZWR+
-        Lsfz9pBEXRPH1DN9UrwDCUkStY1I1D15w6qen+cL60qctoNGW4RYvdlLjuAutvcqD0TfRTmedwR2yNjk
-        Ib5030ST1UctrpUKJotPSVSv8gIy3sQ8XMAlXME13MId3MMjkp/hpeYO9L6NkvbFR8C9EUnbNbomEWMt
-        sGBsgDrtCFwAzEVBanC1saTAL88kUjz8yRfZAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABdklEQVQ4T5XS3ytDYRgH8Gc3
+        bmdc2HYj2hQNs7RNoya2KTI/brCylpJbJbldUvwT7rjasF8k4viRH1Fyw5XIjaRcu3t9n7ft2I4dy1uf
+        Oud9nvf7vKcOCSHIYDCwOCQgmbcF27ADKUhDFnKwBvJsccC/aQMqTaXOwJLk6lskZ++C/g24odBcMLv6
+        qZpZ+aBo/O0noN4Zk+zuOVmILb8raBJ6uF4S0D19Inmnjig8/8DE6d2XLq5znxrgnjhkwjGc9nsmD6kr
+        cqzwux6u80A1wB5KsBcQ/Nwa3qPmwfQvLUNZco7tyoElAbZgionG/oTfHsogLKPwuxbv20M5ahvZp47x
+        g+Ib5KSmgRy1j16xst/O+/m6pAbU2iJStdlLjuAmrves9ERfhRbvOwIbZKzzEC81QPsfmKw+anAt/GKy
+        +OTBwtIGKHACZ3AOF3AJ13ADt3CPc4/wVC6gIu1SA7CMaFgHvalJsOZZoAaqSgLADIWmvxQFCPoGzyRS
+        PHSKlsAAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="gear--exclamation" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        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
 </value>
   </data>
   <data name="application--minus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABbklEQVQ4T6XUsUsCYRzG8ZdT
-        BwdBl4ZGFycRnJycXBwEFYTiwFErIgihpamhqX9BRBBMEOTgSEShKfVCowSlBCchDxRRUDgR5en9jRUG
-        b77wgZf33i+878EdA8D2wWKxmJM75hKCqHGyaDQqNxqN7mAwQL//gV6vh07nDe12G5qmgT9DvU6e+fwF
-        zWYHrdY7KpWnLrUsHA6f1mo1VKtVvlhBuVyGqqpQFAWlUgnFYhGFQgH5fB65XA7ZbBaZTAbpdBomkylB
-        V0jyd/CvQS2LRCIn2+0Wm81GCDXUslAodLZer7FarYRQQy0LBoPnhmFguVwKoYZaFggELhaLBWazmRBq
-        qGV+v/9yPp9jMpkIoYZa5vP5UtPpFKPRSAg11DKv13s1Ho8xHA53epRlqG73Nw8eD24cDo25XK5rOr6u
-        6zvd881GPP7LncXyyWw2W9Jut9/+RTabX1OSpP90JEkK48PKHXCHgqix7vUp02/gC8LYywg0EW0TAAAA
-        AElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABbUlEQVQ4T6XTv0uCQRzH8eNR
+        BwdBl4ZGFycRnJycXBwEFYTiAUf7QQQhtDQ1NPUviAiCCYI88JCIQlPqExolKCU4CfmAIgoKj4jy6b5j
+        P4yuDl5w3N0b7oZjAP6FxWIxJ7fPJQRR42TRaFSu1+udfr+PXu8V3W4X7fYzWq0WNE0D30OtRh74/BGN
+        RhvN5gvK5fsOtSwcDh9Vq1VUKhW+WEapVIKqqlAUBcViEYVCAfl8HrlcDtlsFplMBul0GqlUCiaTKUFP
+        OOBv+dOglkUikcPNZoP1ei2EGmpZKBQ6Xq1WWC6XQqihlgWDwRPDMLBYLIRQQy0LBAKn8/kc0+lUCDXU
+        Mr/ffzabzTAej4VQQy3z+XzJyWSC4XAohBpqmdfrPR+NRhgMBlvdyTJUt/uDW48Hlw6Hxlwu1wVdSdf1
+        rW74YSMe/+LaYnljNpvtwG63X/1ENpufkpKkf7YnSQrjw8rtcLuCqLF++0V/D+wdwtjLCFHUMDoAAAAA
+        SUVORK5CYII=
 </value>
   </data>
   <data name="drive-upload" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        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
 </value>
   </data>
   <data name="arrow-270" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB6UlEQVQ4T6WPT0hUYRTFPyYH
-        QkkJMpgBNSYEiRY2SiAyFvhnUy0Cy4GeQpS6UDeaiQ4oucqVQiKOWIumRdMgWlHSX7UYXXhdCLpSU2FM
-        Z1NYDI4gc7p3cOS9N86qD35c7jnnO+97CoD6H+KXrzzdMXD1WdjLkA6vOZP4aLzANbJlhgY3gP6VGJ6s
-        A+yTOWMoKBnaVCaob/kAnrkoHi8dgD0yZwwFF3oXVPHAih56tBBFy4c/6JnfA3uk9yVvKMhr+6ryPUFV
-        2LeUgDxzETS8+YWu2QhYp4QnOcknFZxrn1LnO78raWeofWYXNb51NL4NQXbRxZdcygIxHR0zKr8rSHfH
-        1lAxQKj1r0J20cU/tiC39YuXW0mPO/ADZYOLuOVfg9mTvOEX7M2Tmq3pPTUHd3F9YhvXxn/C9WIThSOr
-        KPVtoDIQQsWrEKrfhSE5yRsKWFTZ9RPamfvjdPvbX+T6wkmUT/6G+JKTfFIBmyqrzq9l1r6ksul9ZAYi
-        R1z6GIXo4ksuqeDU5Tsq3elWGVXdKsPt09JrnlPBVAyW1zE4Pscgu+jiW20XlRzDC+LK4bGcLVBproea
-        9eYo2T8BMmUXXX+OK7ByIIdxMkUW570HlhvDJFP2Qxw8T6Z6wQk2shgbY0/BadbT9AX/ADWhA8f0EOn9
-        AAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB3ElEQVQ4T6WMT0iTcRzGf6wN
+        YkMlyGCDliwEiQ46IxDZErIu6UHwz6B3QaR50C6ViRsYdXKnBko0KQ/Og2uIVqj0d1lMD/48BHra/AfL
+        3MWwGE6QPf2+Y4v3z3byB5/35fk+Dx8G4FhkP1de7SpoGEsGBFxGQL1RCByjP9XwkS3gWSyD4U2AsqpX
+        Cuqeb6vhvrUjeJfSGFo9AmVVrxRceLrCLvljcviTlTTuvf+Dx8sHoCzvaa8QnHvwhVV6o6zat5qHe5dS
+        uPt2D57FFCjnO9rRXiOo6Iuw8wPfs3YB71vYR0dwE93vEqBMd+ppV1RA2PoXWKUnym9PraPRz+EOxUGZ
+        7vmNRmC9/zkgjlyOK7wB58gPtIXWoe5orxBYeuclc88c743uo2nmF25M78AxsY3q0Tjqg1u4Fk6g8XUC
+        rbNJ0I72CoE4svKuGel05zRv//YX1mBSw9X536CedrTXCETJym6FpFL3JHd+PURpOPWfmg9p0J162mkE
+        JZdvMqPdxUzXB5nJFZSMHeO8KpKB7k0Gtk8ZUKY79QbzRUZPIZA/3Zkqpnc8kgwtL7nlI0B/ynSXv0IC
+        g+CswC6o1dnvPNQ1v+D0p5zDJjgpKCg4ISgTmAWWIpwS6AU5Adg/NaEDx/iBYXYAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="icon_panleft_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -559,17 +558,16 @@
   <data name="tick" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACHElEQVQ4T2P4//8/AyWYIs0g
-        i8EGMEwXZGCYLcTAMAeIQTSIv0iYgWGpCAQvA+IVogwMK0XlGVaJngFiD4blIhC9OA2YCTRkPtAwEIYY
-        JgDUtCHtXfl/IH0GiD1IMYCNYbHIPMNjzk+jHmX/j39Z8BvIP0OsAYwMC4RbFXYY3wu4kfjf+2rML54V
-        cpcYFgr7oBvgAfT/GSD2AIfBZH5Y2GQKr1K54XY+/J/L2dC/AssVrwHDKhloKFIYTBMEaTqT9Kr4L4hm
-        APFBBkwT9OGYK3FZZ5vtb7X15v/4FsjfAspXM8yABDrCBZP4z8Q8zf3lcSHyf8TDzD8MQD4Q57JMFT6t
-        vMXkh+Imo//88+XvA8V6GKYIMDFMFWAAYYQBfXweDL18Z/xvxv9U2mP83+FCwA8QX2qT1mfpHTr/+RfJ
-        PQHy5zH083MADQBrZvDmQDKgl4+BoYPXg6Gd94zxKedvEoc1/2ucsfwvfkjjP/8quVdA8XUMXbwCQAMY
-        GLw4GGAA4QJ3dgaGVC4GhmZuD4Ym7jPSB7S+CJ9V+c+3TfY9YzPPboZWHmkGV6AaNIAwACahwMzAEM7m
-        wVDEfoZrmdgLxjKOI0C+JoMcE4ZmkACyASAVQPcxyAOxLoMxUxpDPNMZBm3GUCBfE4iVgFgKiIFJkoEH
-        iNmAmBHZAEagAMhzwNBhEIcqloSygZmAARhvDLxADPQnWDPQqUgGUJKdAYAsiHz3wn5/AAAAAElFTkSu
-        QmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACE0lEQVQ4T2P4//8/RRirICkY
+        QkwXZGCYLcTAMAeIQTSIv0iYgWGpCAQvA+IVogwMK0XlGVaJngFiD4blIgQMmAnE84FsEIYYJgDUtCHt
+        Xfl/IH0GiD1IMYCNYbHIPMNjzk+jHmX/j39Z8BvIP0OsAYwMC4RbFXYY3wu4kfjf+2rML54VcpcYFgr7
+        oBvgAcRnwDSIP5kfJp4pvErlhtv58H8uZ0P/CixXvAa0KBloKFIYTBMEaTqT9Kr4L4gG80EGTBP04Zgr
+        cVlnm+1vtfXm//gWyN8CylczzAAbjGTAJP4zMU9zf3lciPwf8TDzD4gPxLksU4VPK28x+aG4yeg//3z5
+        +0CxHoYpAkwMUwUYQBhhQB+fB0Mv3xn/m/E/lfYY/3e4EPADxJfapPVZeofOf/5Fck+A/HkM/fwcQAPA
+        mhm8OZAM6OVjYOjg9WBo5z1jfMr5m8Rhzf8aZyz/ix/S+M+/Su4VUHwdQxevANAABgYvDgYYQBjgzs7A
+        kMrFwNDM7cHQxH1G+oDWF+GzKv/5tsm+Z2zm2c3QyiPN4ApUgwYQBsCAAjMDQzibB0MR+xmuZWIvGMs4
+        jgD5mgxyTFAFqADZAJAKoPsY5IFYl8GYKY0hnukMgzZjKJCvCcRKQCwFxMAkycADxGxAzIhsACMQgzwH
+        DB0GcSAGKZaEsoGZgAEYbwy8QAz0J1gz0KlIBpCP/zMAAIAsiHxWMptuAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_zoomrect_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -639,15 +637,15 @@
   <data name="arrow-090" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB1klEQVQ4T6WQTyjkYRzG32ax
-        WlK7xvhzsNnNxko7RYkiBzkoBwfZWtMmm4ucJIuTPeHCblgkB8q/SRPbYvewbStcvnsQ7QEzWOYgcVAT
-        iXn2faZ+mjEzqH3r09v3eZ73eX/vTwFQ/4Pv8MsPv5W1c0Pl9myp/P49VTjkVsUjh9Ua4c6ZOn3mmDcu
-        DVfAQzLoBrhrqu9f0LfLsHzeB9pWz9H/F+Ccr/W7v6B7kyHp2/Oi4dvpNR+dV6Ceq/2wT3jVsU5TPrmu
-        UDd3EkTXnwvQZy7oH2S2C0Xp3rpE64oHLcse1C8co2psB28mXKh17OKt3YnmpSMwx3zAT3zRtjKY3ros
-        /tTMOFHSI7BNbeOmx3xAgQ6o5++XfDxr/qWeNv6Q13YXinrXUDnlBGfqRob5kAVpTT9Vcv08kbIZN6xD
-        2yidPgBn6vRZErJA36LM7xwGkjd7gtSxQ+Q4jqF1MTzmggriC2tVtLVSxdkmDST96xni7B6kfdG7bVIM
-        LyIpS3EFPMGn6PXAkqkeVY0SsSx6YZr14smCF5yp0zdWyAKapoQMFVkxLJbvQOw88HgR4Ezdf4UqeKgD
-        TOWYChrHTeUDco2eqWuyNTHhnhChDbMm5RYStRflX/AP4Mv/7H+tMgIAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAByUlEQVQ4T6WNT0jTYRzGX9as
+        MBHMNc2DYmJkEQ0WRMLCg3QQPHiQBTUiFl2k04jVPNWpvGxFmzqig4NqDhkaudkhojG7vB2i6JDbmtoO
+        EvMQDEPcHt9n+Btbmyn0hc9enj+/ZwLAf1H8Of3gkzA9+irOe5bERd+ysPgzou/52jWF5EtNnzl77O81
+        wI/kZAbgS73/AW+aZTm+Cox+/APfCkBNf+8B93eWpHe5gNsLv0s8TuZBn/muA+cefmEon6TyuDW3XsXY
+        t00wZ69qoOe+pCndS1twLeZwL57DSCQLa+AHrr5MwR5O43ooCWfsF9hjv2Lg5OjiZLcrLsu5MZNEv0fC
+        Fkzg74z9igFliq67sSInnB9Eh+OdvBJK4dLTzxgOJkFNX+uwX3Og8857cXxknsiBmQxM/gQuT/8ENX3m
+        uw6ofxGGm2ENeWF2He2BNZjDWVBrGXtVA80WuzhsGhaNtlcasvvNBhpDOXS+Vq/SWqZvPSN4FQPaHTD2
+        iHrrFJHGaAG62QKORgqgps9cu5oDPN2xU6Ju6Jk0vgUa5oGmKEBNv/xqDRxSsGXW9Tpe6AYnZAml6SvO
+        Ko4oag7oFQZF2z9oURxU7AxAbAPgy//sQfE9hAAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="icon_null" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -660,95 +658,94 @@
   <data name="globe--minus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADSklEQVQ4T4WRbUxTVxzGD+1M
-        JGYuMSFmiyMOQQuaiDUqGwsRGG+aoCRkKpHOlymKi2SZQkKmbAxtKC8FtUoDErRQFalhzhpe3PaBqZRC
-        G7RNKavWKbRAJZQi2lXWZ/9zxU9+8Ca/PPee//M859x7mejYfSYqMjLxL38zsfyfhWLF6FfiCpeCaCO6
-        51UhrPM5+bif57JKvmXCjVBQal9OQ/Wmhqdm+V/PPVqrz3/T7gsOTM/5WxwvPSlal5nPue9tAc++KSg0
-        LP+oxNxe8NtT13XbFPp9c2ixTqPeNIV7E37YAoDtX6DaOOniPu4XckJBnj5UlN/VWND+yF3e40aX208F
-        QbRYpqCz+9Az7kefdw59s8C9F8DpHpeb+4Vcnp6xkN3atJjiDus314Zx6KYTl+wvUPrHCE78PoIrQzP4
-        cxI4qXdAQ+s3xoC2Z68Rdfy2ledCcjRUkHXhjOyiaSq90YaUpiFs0wxhR6sDubrHONzuxO6mB8g8a4By
-        MIBiatune4Ic8vMcwRhLK+/4Xj8WSFRZsFY5gLg6C+LrLUhosOJLlRkynQtFd//Dd92zSFCaEFthxJY6
-        U4DnCCpI/NkQV3InmNw4iqhTBkgqBxBdaUJMlQnRCiOkChMSamzI1s3i02OdkFZReWVvkOcIKtj8U2e8
-        whj4rLQXkfJ+RFFg1TwS0qiyXmyscSC1ZRbhBZ3YqgOyNOMBniOoIPnUudVFHd6V5Q8gqXiINdUWxCot
-        kNZaBWKrBrGp1oG1ZYOIV48hrQ1IVj3y8hxBBelVGUtyNcPrySQlvlA9RpLaibQGJ9IvPkFqvROJFxzY
-        cNqMr29DYNnhG8OrN+ZnZEemUkHm+VC2Xd0sOdnnSVK7kdk0jl3aCexp9WD/dY+g8qRcqMLXoEGynjT6
-        dc2isEltiMikZUzN2I7LjO1sjvggt7VLKrd4ZFe9ONLuww+3ZlConxFUGbkOr2Syd6hjrJ+OQNfSGHqV
-        sgi299fmZYV37dvqR735uunA8Vsvg1yPxO98dTRshf/o4o8nfxQveEifrp9TJpyAMTERRkSzD5fGsc8P
-        HmCy1kZ2sKOb5XUZBOXPfJ3PGaPdWFg45fg/4JeIWDRf8gnp++CbcT/Psf8BxLcXab+EC34AAAAASUVO
-        RK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADQ0lEQVQ4T42Re0iTaxzHH7eC
+        RCo4IFGUVEdP04JsUtnxIKmlVmAJ0UVy3bMskqgUorLMGk5tdlk5NPGc6SpzYZeFly5/2MU53bA25jyr
+        dSo3bUecM2st27ffs4r+6J8e+PB93+f3/X7f531fJjjwhAny9Ex44l8mlP43TijrXSIsdsiIeqLlm8oC
+        +3xOPu7nufT8bexHQYF1Og2VCytfGaUP/3epzR7vTavH3zk06q21vXctVTuMfM593ws4Xy9yddMn5hsb
+        cm69clyzDKLDM4pa8xAqDIN4/NYLiw+wfARO6wcc3Mf9PwqytMGC7OaqnIbnzqJWJ5qdXirwo9Y0CI3V
+        g9Z+L9rdo2gfAR6/A061OpzcH8hlaRkL2qBOiTrUaN54tQc7b9rxt/UdCu6/wZF7b3C5exgPBoCjWhtU
+        tH+9D6h//QkRB++YeS4oQ0UF6RfPSi4ZBlOrLFha3Y2Vqm6srbMhU/MCuxrs2FD9FGnndJB3+XCI2rZo
+        XiKD/DxHMMZSihr3aft8CQoT5so7EVtuQlyFCfGVZvylMEKicSDv0WfsaRlBvNyA6GI9lpcbfDxHUEHC
+        cV1s/l1/UlUvIk7qICrpRGSJAVGlBkTK9BDLDIgvs2C1ZgTTDjRBXErlJW1+niOoYPGxpjiZ3jejoA3h
+        0g5EUGDWN0RERGEbFpTZkFw7grCcJqzQAOmqfh/PEVSQdPL87LxG9x9FTyEqfoY5p02IlpsgPmMOEF3a
+        hYVnbJhb2IU4ZR9S6oEkxXM3zxFUkFq67LdMVU8MmcTEn4oXSFTakVJpR+qll0iusCPhog3zTxmx5g4C
+        TN11vWf2guxlq8OTqSDtQjBbpawRHW13JSqdSKvux3r1W2yqc2HrNVdApYmZUITNQaUohjTyU1lI6IA6
+        SGBQM6ZkbO0/jK2rmTkms65ZLDW5JFfc2N3gwf7bw8jVDgdUHj4PHySSnyhnrIOOQGtSFL1K4Uy2+UbN
+        1NxH1pUVve5szZDv4O33fq6749Z92Bv6u3fvhMkDh4Vjn9Gn6+AUBk7AmJAIJSLZ+EmxbNGO7UxSV8V2
+        NLawrGZdQPk93+dzxuhpLDSMcvwf8CUgQgheMuUX4D7upxxjXwDEtxdpCOfy3wAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="ui_menu" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
         YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABG0lEQVQ4T53OvYqDQBDA8anS
-        iO0VV+YVxCCxt7OyEbnC6hK4T0E4swiGIFgIQQiE+Bq+kVXQRCFIuujcTp7AdeBfbPGbHdhutybvfWIm
-        hGG4wolDFjabzWoYBjydTtj3/ejIkAXf99cEH4+HUGTIgqZp6zzPnxccj0c8HA6YZRnu93tM0xSTJME4
-        jnG322EURcjPRsYYBkGAy+WSwWKxeC6gEV3AP2egKMrkC1RVZeC67sf9fseu64QiQxYcx/m83W7oeR5e
-        r9fRkSELlmV90aNtW6HIkAXTNL+LosApkQXDMH6apsG6roUiQxZ0Xf+tqgpt28ayLEdHhizM53P/crng
-        +XwWigxZkCTpTZblvymRBT4z3gvvVTAys38hdsO4G3bw/gAAAABJRU5ErkJggg==
+        iO0VV/oKYhDt7axsJFxhdQncpyCcESEhCBZCEAIhvoZvZCWJHyBip845eQLXgX+xC7/dgePxqE+9L0wH
+        3/e3uHDIwn6/347jiLfbDYdhmB0ZsuA4zo4u+r5nigxZkGV5lyTJc4Pr9YqXywXjOMbz+YxRFGEYhhgE
+        AZ5OJzwcDrQ2ep6HruuioigerNfr5wM0rA9Mn3sgiuLiDSRJ8sCyrI+u67BtW6bIkIXNZvPZNA3ato1l
+        Wc6ODFkwDOOLDnVdM0WGLOi6/p2mKS6JLGia9lNVFT4eD6bIkAVVVX/v9zuapolZls2ODFkQBMEpigLz
+        PGeKDFngOO6N5/m/JZGFaVZTL1OvjE0GVv8hdsO4fy0mJQAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="sql-join-left" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        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
 </value>
   </data>
   <data name="application--arrow" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABpElEQVQ4T6XQTUgCQRjG8QEh
-        iBK8VNAxAukWHsKTJy8Wkit56ItOfRJRBF2iLtE5kCAiEUMSwRJBENGOaYb2sdCSgZeMlBRRUFBEeZo3
-        ggoK3HrhB7uz/IfZYQDYfzCLxdLHjXNzMlHTx8xm82Q0Gr1PpVJ4fExCkiSI4h0SiQRisRj4N0Qi5Io/
-        X+PyUkQ8/oBg8OKeWmYymRbD4TBCoRBfDCIQCMDv98Pn88Hr9cLj8cDtdsPlcsHpdMLhcMBut8Nms0Gh
-        UMzRL8zzO/jTUMsEQVhoNptoNBqyUEMtMxqNS/V6HbVaTRZqqGUGg2G5Wq2iUqnIQg21TK/Xr5TLZRSL
-        RVmooZbpdLq1UqmEfD7fkp3zV5zd5kANtUyr1a4XCgVkMpmWTJ48gZzevIJaptFoNnK5HNLp9I82PEmY
-        D6VvDl6AsaMHDE5su5lard6k42ez2R8N78VhfQaWJGBa/LSeBPpX/S9MqVTOq1Sq3d90jWzd9swcZ7/S
-        RgB6Vw2N7zM+7Vw319sK5YRTJJ2CdfajpT1aG8XAKGsTbIfcVIfJ+h69AbnIrwah7HLvAAAAAElFTkSu
-        QmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABqklEQVQ4T6XPMWhaURTG8QNC
+        oKSCS1vIKAHpVhyKk5OLCVKfxEFN6FRtQwkNgSylXUrnghSCRMQgEcFWBEFEO1Zj0dY88BEDLrFEiSIK
+        CoooX+/pkgQS8CUHftz37uUP9xKAeyGn06kXXIJXJW705HA4PIVCoVqv13F6WoOiKJDlY5TLZRSLRYgz
+        5PPsl/j+jaMjGaXSCTKZn1VuyW63v8nlcshms2Izg3Q6jVQqhWQyiUQigXg8jlgshmg0ikgkgnA4jFAo
+        hGAwCI1G4+Un+MRb7jTckiRJr2ezGabTqSrccEs2m21zMplgPB6rwg23ZLVa345GIwyHQ1W44ZYsFsvW
+        YDBAr9dThRtuyWw2b/f7fXQ6nbl8+nGB75U2uOGWTCbTTrfbRbPZnIvn8Oy/b38uwC0ZjcbddruNRqNx
+        o914DY6Acs3eObC2f4Jn7o8xMhgM7/lqrVbrRitfSvD/BTYVYEO+tFMDlt+lzkmr1fp0Ot3n2zxa/VB5
+        8vKgdZUpD/Cqe+76SmIeCI+FpXlo3RGZPZT8r8Q/t/OP5ukLWpCCAWF90e4XO0T/ALnIrwbTp6lgAAAA
+        AElFTkSuQmCC
 </value>
   </data>
   <data name="document_task" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACBklEQVQ4T42SPWhTYRSGz1rc
-        FH+WgpWkYBFFOhgcLAiCARXFCB26dKhtaENJCA2ttgUXBQcRRxEcWhAdxCWLReMF6RIIgg4OIkZTSwnR
-        5v//9H0vOYL0Sr3wcHMv3/PmnHOPhJaWhNxYXr4Mbu6B7/riolxbWJCr8/Muwhc9Jivttv5qNHSrWtVc
-        uazZUkm/FYsurxxHcW4S+P8K4EOPqVKzqXmIP7e39Ws+r583N/XTxoZ+zOV0NZlUXjg7Bfx/KriSSEiP
-        cBkBhUrFM+TRyooa/mDwNhAil+JxY7raaulvlP+vEFbCduBMmycXo1FjpoYZOD8cN+RtNqXDz4/taocB
-        cGbMkwuRiBGpI+D0s6P6MHPfvbMS/uvLVErfZDL6Ym3NHSyciHlyPhw2ZpudjlYxh5Or/Vqs1Tzb4deB
-        M2uenJuYMKItBNQxB4aU63XPkC0Ew4maJ2fHx41Yu9vV95gBQ5zv7/T40yO7QrgncGLmyZmxMSPeQcDg
-        k4P6IH3PvbOSL4WCvk6n9UM2q8n1dS3iHZy4eTI8OmrMdbEobbThe3xAGxioVztcNjhz5olvZEROhUIk
-        wU3rogqGcB5eIRW0x7N06LpXfyAgg8HgLXdX9wjhsvEsHbv68OPQ4UDgjgW4IYAz4WBZDT8x96SBZ56l
-        A+jKfnCib2Agtm9o6O7/wLN06O4ALt15PeGOvdAAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB/ElEQVQ4T42ST0hUURTGz1ba
+        KWYbQWNGcIgiXDi0SAgEB0yMJnDhxoXpYEOMDA1aKrRJcBHRUoQWClGLaDObpKYH4WZgEHThIqLRMZFh
+        0vn//3i+yxxBfFoXfjzu5fu+d+65h7zz84ZHCwv3hcf/wPFwbo4ezM7S8MyMgXDQYCJXrfLfUokP83lO
+        ZLMcz2T4dzpt+GxZDI3gPBOATYPJTLnMSTH+OT7mX8kk7xwc8Pb+Pm8lErwWDjMWdILzNGAoFFJ8WQlI
+        5XK2IW9XV09xejwvBAI0GAwqU/lKhY+k/ItCUAmuA636aCAQUJ4UpAfWnmVCvsUj3PPh+rkQBECrPur3
+        +xV/UQJuv+/gN7El80Ul+OunSIS/xmL8cX3dNBZa9dE9n095Wq7VOC99uLnWzulCwfY6eB1o1Ud3x8eV
+        QEUCitIHhGSLRduQQzmDVn10Z2xMma7W6/xDeoAQa/c7d7+7di4EcwKt+qh3dFQJ1iSga6WVX0cXzReV
+        /Eyl+Es0ypvxOIc3NjgtZ9Cqj3pGRpRndRmUqlzDsdzCJWmo3XUwbNCqjxx9fXTL6wUhTFpdqkAI+mEX
+        kpM9tPDAa1a7201dHs9zBGBdFoJhgxYeXU3C1Ta3+2XDbxaug56gsQjCE2NOSrKHFp6Gl5qFG02dndNX
+        XK5X/wO08BBR8wku3Xk930xtLAAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="sort-number" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABuElEQVQ4T42TTUsCYRSFJwMJ
-        QWoXCFKEtAhqE/4EN4E7V+nGELUsAyUcUdC9W8Ef4cKtG3+BuJGgtQiCX/iFIn7d7rk5Mg4JCg/nfe89
-        58yIqKiqqiSTyT3S6bSSyWQcTBCKu9GDHBEpyoEChEJsICjjOFiQSCRuuOSZCenZbDa0Xq8JatzBj5y8
-        QTwe97Zare/VakV6lsslaRh38CMnBdFo9HWxWNB8Pj8a+JGTgnA4/IbwdDqlUqlEhUJBznoqlYrMoZjD
-        j5wU+P3+yGw2o/F4LORyud3ZONN28CMnBV6v930ymdBgMBBSqZRovV7fnYvFopy1HfzISYHH4/kYjUbU
-        6/WESCSyO2szaLVapVgsJjv4kZMCt9sdxRPb7TZls1ny+XyiuGvk83kKBAJULpdlBj9yUuByuT77/T7x
-        T3M08CMnBU6n86VWq/10u13qdDo7ms0maejn8MGPnBTY7fZbm80WZL70DIdDajQaBDXu4EdOCviiWCyW
-        Pcxm8x2j4rtCcTd6rFbr359p+zGxnjNXzD3zaDKZnhgVijvzwFwzF8wpcvqCE76fbZeXrLZ/wBxh+PBA
-        KfgFcqFa2BgtJlQAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABsUlEQVQ4T42TS0sCARSFJwMJ
+        QWoXCFJEtAhqE/4EN4E7V+rGELWmDJRwREH3bgV/hAu3bvwF4kaC1iIIvvCFIr5u99xyGIcChY/7OucM
+        w6CiaZqSSqX2yGQySjabvWbCqJjNGviISPkvAKYICwgVs1mjBySTySsefEzEyHa7pc1mQ6jmG+ODTwIS
+        iYS/3W5/rtdrMrJarXTMN+jhk4BYLPa8XC5psVgcDPTwSUA0Gn3BcjabUblcpmKxKL2RarUqe1TM0MMn
+        AcFgUJ3P5zSZTIR8Pq/35t2uQg+fBPj9/tfpdErD4VBIp9NSG42G3pdKJel3M/TwSYDX630bj8fU7/cF
+        VVX13kitVqN4PC499PBJgMfjiSG10+lQLpejQCAgFfOOQqFAoVCIKpWKzNDDJwFut/t9MBjg0xwM9PBJ
+        gMvleqrX61+9Xo+63a5Oq9XSMe6hgx4+CXA6nTcOhyPMfBgZjUbUbDYJ1XxjwvBJAA+KzWbbw2q13jIa
+        3hUVs1ljt9t//gu/Pwtzylwwd8yDxWJ5ZDRUzMw9c8mcMcfMXsARc8LgeM44/gB73KHDAzmAlG9yoVrY
+        r1VqEQAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="icon_pan" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -766,33 +763,32 @@
   <data name="tick-circle-frame" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC5UlEQVQ4T12Q60uTYRiHHzIZ
-        HlssW6Em62BQikPE0cyJg6W20h0cgc2gxMAYfVACFbEDJkIRnb4IrukyM1kuJhqK6NJEreHUPDWXEydK
-        +g/47dd7Pw1jPXC93Nz377rf531ZSUkJ0+l0zGAwMKPRyEpLSxNMJpNKgE5FCKpVNKMMZckhlz9CC0TC
-        MLempqZ2ampqfmdnB1tbWxyqJycn56urq2spIywQ/b9ApNfrr9pstg4S2mbtuDNxDznDWg7V1NvcDMJq
-        tXZQVlgg4jcoLi4m8oSBPRAIQDdyA+pvRph+3cb1oIVT6q9E/rSBz/z+VbS2ttrJIZdptVqpxWJpWF8P
-        oHioDJfnymDwVUD7wxyG/uctXJq5xjMrKyuoqqpqIJcVFhaqR0dHFp6Pv4bq61UUCQvyJnVhZA1rQOfd
-        715ccBfh2ZeX6OtzLZDLNBqNma5l7q9EgfCG9H4VskcKIB/Mx5nebCR1pmNjYwPBYBDb29s451LyrMfz
-        HeQytVpt8Xq9yPiYA43HhL29PSS+T4O4QwbxGxnW1tb4Avq5YqsMiT1pPDs+Pg5ymUqluuvxeJD2QQFH
-        wIXFxUXs7u4i/m1KmBxvT0FsdzKOOE7zrNvtBrlMqVTe9HpnYXKU4+RQJl/g8/nC5LiuE4j+lMg53Cvj
-        Wbd7DOQyhUJR0NPjWH78+SlSHOchdoRfO7YnGaLBY/tIu0+haeAJbDb7MrksKyvruF5vbJ6ZWcDFTg0k
-        Lhlincn8m6OdiTg4lrDPIWcSz0xPz0Kn0zeTy+RyOcvIyChsbHzkmJtbhaJNhbj2o4gclCBi4i9Ux7Yn
-        8JnX60NDw0MHOeQyqVTKZDJZVGpqqrmu7oFzaWkTLQMvcMVqgLhJwqGaektLQdTV3XdSlhxy6RwQiBaJ
-        REkSiaRcqcx91dXl8vt8u8LP/Af1aEYZIZtMTshlEUIhEUgVyIyMjFRHRUVVxsTE1Au0hKinHs0oI3A2
-        5ET8AeUdBAROQKmSAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC3klEQVQ4T12Q60vTYRTHHzIZ
+        XlssW6Em67KgFEXE0cyJg6W20l0cgc2gxMAYvVACFbELJkIR3d4IrukyM1kuJhqK6NJkWsOpeWuaEydK
+        +g/47tvvPIq1DnzgcM73c34PP1ZUVMR0Oh0zGAzMaDSy4uLiOJPJpBKgKtuDSkU7ylCWHHL/PSASltlV
+        VVXV4+PjM1tbW9jY2OBQ7/F4ZiorK6spQ9n/D4j0ev1Vm83WRkLLlB13xu4ha1DLoZ5m6+tBWK3WNsqS
+        ww8UFhYSOcLCHggEoBu6AfU3I0y/buN60MIpXi5H7oSB75aXl9Dc3Gwnh1ym1WqlFoulbnU1gMKBElye
+        LoHBXwbtD3MI+p+3cGnyGs8sLi6ioqKijlyWn5+vHh4emn0++hqqr1dRIBzI8ehCyBjUgOrd725ccBfg
+        2ZeX6OlxzZLLNBqNmZ5l7i1HnvCFlF4VMofykNafizPdmUhoT8Ha2hqCwSA2NzdxzqXkWa/3O8hlarXa
+        4vP5kPoxCxqvCTs7O4h/nwxxmwziNzKsrKzwA/RzxVYZ4ruSeXZ0dBTkMpVKddfr9SL5gwKOgAtzc3PY
+        3t5G7NukEDnWnoTozkQccZzmWbfbDXKZUqm86fNNweQoxcmBdH7A7/eHyDEdJxD5KZ5zuFvGs273CMhl
+        CoUir6vLsfD481MkOc5D7Ah9dnRXIkT9x/aRdp5CQ98T2Gz2BXJZRkbGcb3e2Dg5OYuL7RpIXDJEOxO5
+        HOmMx8GRuH0OORN4ZmJiCjqdvpFclpaWxlJTU/Pr6x85pqeXoGhRIab1KML7JQgb24X66NY4vvP5/Kir
+        e+ggh1wmlUqZTCaLkMvl5pqaB875+XU09b3AFasB4gYJh3qazc8HUVNz30lZcsilOiAQKRKJEiQSSalS
+        mf2qo8O17PdvCz/zLzSjHWWEbCI5ey4LE5AIyAXSw8PD1REREeVRUVG1Ak171NKMdpQROLvrsLA/5R0E
+        BM6iflMAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="control-stop-square" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABcUlEQVQ4T8XTO0hCYRjG8Q8M
-        6YKE2RC1VRANQVNDQi65RVC0hDQEBS2F4FBQSy2BQxdrUOg6mDWEBJZJUdBSw1cEZYNh2AUywgiHEBSf
-        3ldQ+ChJcGj4cc6B/3nOtxwBQBSjqJf5w5mBjtWoMK29uYgsgIv77KkzN0bXC5PLEWD+Pq2YC6WR5XgA
-        uONeGWhzhAWR9rsUJs8Tec3eJMEd98pAqz0oiJy5SmA0EM8Z8cUwuPuKgZ0nWDwRWI/fwR33ykDztBRE
-        Tl18YXgvhn73I7qctzAvXqJzQeZYPCFwx70yUD9+Joi0nn7A7AzCtHT9q153CNxxrwzUjQUEkT2+KFpW
-        wnmZtp/BHffKQPWQVxDZ7o+jxhPLq8n7Ce64VwZ0li1BZONRClpvMq8qXxLcca8MlPatCyIbTgBDANAf
-        ApV+QEcqDoByUrZPz3TlTmuaUAeEEBqN0bah6XbJPxltm9SXKCfgAaIntQUw/Bj417/xG49phw+gF0Mn
-        AAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABZElEQVQ4T6XMTyiDcRzH8dWj
+        5U9LMwdxQ8lBOTlYeS52kyIXLQdFudBqB4oLF7WDP+Owp/w9zDhoqTGLKBcOX1LMYZrmT5k0aQettnz8
+        vg7TL3sy7Vev39Pz693HAKAgOR//4/tqW44b1JUXTaA8aNxLA1btidFiDJi9/ZTMRH647wDuuJcGWtxR
+        Rq6bDMZPU7qmr9LgjntpoNkVZjR1kcJwKJk1FEigf/sZfVsPsPticBy+gjvupYHGSWI0cfaBwZ0Eer33
+        6PBcwzZ/jvY5yrL7IuCOe2mgdvSEkeP4DTZPGOrCZU7d3gi4414aqBkJMeoKxNG0FNWlbj6CO+6lgcoB
+        P6PWYBJVvoSuBv87uONeGjDZNxjVH2Rg9Kd1VQTS4I57aaC4Z5VR3RFgCQHmfaA8CJiEsj2gVCjZFf/i
+        y51RHZMHxFEUq3NN6dToT1bnuuiLfg0IZqE6DxZBHihEzsf8wfAFj2mHD3XhXHEAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="icon_zoomnext" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -813,28 +809,27 @@
   <data name="application--plus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABq0lEQVQ4T6XQz0vacRzH8Tda
-        gwjD7dAhdvLiYS3Bk7H1pcCLB0EFD8ODEKFzW8EY26EgunToTwhEBJkIMnEI4vSq5tBoQrIFwkCYX1BM
-        QUER5dXn3Y9TlH3bGx68P9/vlyd8v18CQP+DnE6nTngjeBTiRkcOh8OVz+dPq9Uqzs7+oFKpoFz+hVKp
-        hEKhAPEMuRz7Kc7HODoqo1j8jVQqe8ot2Ww2XyaTQTqdFjdTSCaTSCQSiMfjiMViiEajiEQiCIfDCIVC
-        CAaDCAQC8Pv9UKvVHv4Er/gHjxpuyW63vx2PxxiNRopwwy1ZrdZ3w+EQg8FAEW64JYvF8qHf76PX6ynC
-        DbdkNpu3ut0u2u22ItxwS5Ikfex0Omg2mxO5s+9hSK6CNzfckslk+tRqtVCv1yda+i5h4/wzeHPDLRmN
-        xi+NRgO1Wu1Orh8evIy+vuRsXp0N3yQ83X5eIL1ev8OvL8vynQxfX2FNdtwyffDsH2k0Gq9Wq92/z9T6
-        3Ilqd05mi7UV3JxV7tk4iZkR5oWFifZmywt/X4DEvm64feAsTxFtPjkk33TpcvO1mAsmbJya11eQ2wAA
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABq0lEQVQ4T6XPz0vacRzH8Tdq
+        gyGK7dAhOnnx0Jbgydj6ssCLB0EFD6NDMMJmv2CM7bBg7LLD/oRARJBEkMQQxPRaamSUkKxACIT8gl+c
+        goIiymuft2OnUfbdPvDg/fl8vzzh8yEA/4V8Pp9ZeCP4VeLGTF6vdyWfz19Vq1Xc3FyjUqmgXL5EqVRC
+        sViE+IeTE3Yq9ucoFMo4O/uBTOb4iltyu92BXC6HbDYrPmaQTqeRSqWQTCaRSCQQj8cRi8UQjUYRiUQQ
+        DocRCoUQDAah1Wr9/IR18ZZ/WtySx+N5NxqNMBwOVeGGW3K5XBuDwQD9fl8Vbrglp9O51ev10O12VeGG
+        W3I4HDudTgetVksVbrglSZLet9ttKIoy0erxJqzp1+PJDbdkt9s/NJtN1Ov1iRYOJaz9/Die3HBLNpvt
+        U6PRQK1Wu9fKkR8v4q/GfMrvvfVAwvTnuSJZLJZdvp4sy/ey7r/Esuz9y9T3Z3dkMBjWTSbTt4fo3hov
+        NF+MMnteW8KfvWZVnySxngozwuxEX/Xl2dt58BRnbrh95FrUEW0/2aPAVGk8+UxEvwAmbJyauUwqoQAA
         AABJRU5ErkJggg==
 </value>
   </data>
   <data name="applications_stack" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABc0lEQVQ4T5WSMWvCQBiGv8Ut
-        pZMIxcVMri4ZI4hjBhUdikvpYKmLS5cu/Qv5Bw4OdXCRokYQHKoGETooLhldgw5ZxMm399kkikZJAw+5
-        cHdv7uU5IvdJp9NULBZ9SqWSLHgUVK7AczJFo1E63VwoFMilbJrm0rIsLBZzzGYzTCYmxuMpptM5DON7
-        KdaVz/96+M7lcszrYDBAv99Hp9NBu91Gq9VCs9lEo9FAvV5HJBKpXASIYxEjgl72+z1uwWuu9s7n85+G
-        YaDb7foMh0OsVitst1vsdjtomlY9BITtPRr9oNfrYb1ew3EcZDKZmnfc0L11XYdt29hsNlAU5e0Q8J/e
-        qqp+JRKJDyYejz/zZt93mN7ZbPZdXJ0Hl3vuf9N3UO9UKuXdPwrl+7y36E7JZPIvJIzv896xWIwYSZKI
-        2CU7ZbdB8NxF72MBInbJTtltEJ5vWZZPtx3H7JKdstsgfN9Ed4EJwuWT5/XaW6yputouMn4B8esdOkQY
-        S3EAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABXklEQVQ4T52SPWvCUBSG7+Jm
+        6RSE4pJMri6OCsExgwlxKF1KB0tdXLp06V/wH2RwqIOLFPMBgkPVIEIHxcXRVczgIk55e48xoU1jqb7w
+        cAn3nHPzcC8LUyqVmK7rEdVqVeLccmonoD2JCYLwo1nTtJA713UXy+US8/kM0+kU47GL0WiCyWQG2/5Y
+        UE381MNaqVSIp36/D8dx0Ov10O120el00G630Wq1YBgGUqlU7deAEP796Ps+/oJq4gMib1VV32zbhmma
+        EYPBAKvVCrvdDvv9Hoqi1A+N//UeDj9hWRY2mw222y1kWW6c7d1sNrFer+F5HgqFwvPZ3sVi8V0UxVci
+        m80+nO1dLpdf+LO5OXJ9kXc+n6e3F+QSbw7L5XLBgEu8M5kMI9LpNGN0l+RGjkkken8POZEbOSYRekuS
+        dOyIhZzIjRyTiO6bsaugIxbudB/6nYLX1Hkp/X4sjH0B8esdOufNXnwAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="icon_zoomout_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -942,63 +937,63 @@
   <data name="layer" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABwElEQVQ4T6XS6ytDcRzH8e8z
-        yTMkUUpJLsntP/AP8ERJuSV3kdwe+QvkkrtaybXUMcPmNilmdjEP7IHNZbScmWNnmLtH8/sclvFAR1av
-        zvme832fXRr5/X76D8pu10Ick8sUyoRdNERZbeuQZzrxrlz73iyC79X8G+xgFw1aymxdgyLh7nXP6XnS
-        yoFdNGgpo2UVit23L4Zz4XFNDuyiQUvpzStQ6vI+60/dD8tyYBcNWkpr0kAZ++g6G3+vDnbgvFPq7eKE
-        1no1pN6/7J03851gPPHOoEFLqY1LUH4mPG1Znb4F2D+75Vg0OmfiuznjRZfE8EVn80yhQUspDYtQcex+
-        2GShcvvQMzlvdvVxBr6XM0p6pCPmj2s9Ops4gwYtJdWroOqQv9/YsArj7F0H5ozf9LM5QLrHHjCLBi0l
-        1iqhxuK40ShN/Agz/AnnwTOuS7PO7uHQoKWEag7q9EeiSmV2KQLY11AA5p/nO3ZRhQYtxVfMQgP7ZTUL
-        FteYZO/zGJiDj+wedtGgpZDoZIotmayc3nKssr/o8u6RqP4NdrCLBi1e4WFpuTkR+YNNkQWKDjmwiwYt
-        HhDKRDExf4Qm9B0h5nPvHST9+wAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABuklEQVQ4T6XS6SsEcRzH8e8z
+        yTMkUUpJjuT6D/wDPFFSruQWyfXIXyBHrqWUnKXGHuy6Voq19rAe2Ad23W1mrbGzWLdH6/cZZJU0svVq
+        Zn77fc/VUCAQ+BfKbtdDHJPLFMqEWTREWW2rkGc58i1d+V9tgv/F+hvMYBYNWspsXYEi4fZlx+V91MuB
+        WTRoKaNlGYo9N8+mM+FhRQ7MokFL6c1LUOr2PRmPPfeLcmAWDVpKa9JBGbs1g4O/0wbbc90qjU5xQm+/
+        HNLuXvSqrHwnmI98M2jQUmrjApSfCo8bdpdfA7unNxyLRuYsfDdnPu+SmL4YHN4pNGgppWEeKg499+ss
+        VG7ueydVVncfZ+J7ObOkR9ri+H2tx+AQZ9CgpaR6NVTt83dra3ZhnF11YM78TX8QaY2dYBYNWkqsVUKN
+        7eRap7Tww4ziA/aDjz/XFAanl0ODlhKqOagzHohqtdU9+ok9huSn/S2nqEaDluIrZqGBvVmdxuYek+x8
+        bH/C/sMsGrQUEp1MsSWTldMbJ8vsE13cPhC1v8EMZtGgxS88LC03JyJ/sCmyYLRDDsyiQYsThDJRTMwf
+        sYZC3wAh5nPvZl53vQAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="sql-join" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACXklEQVQ4T6WTW0jTYRjGPwy6
-        CHLZKsjALhYVkkhJtJvqoiN0EUGSXaQX0oIEc4oNR+ga2kRUxJ106lquaOps03by72GosZzhVonWdJuu
-        nZxa2WhBV+t7ZEL3G/z4Xp73+b27+pNkMknSIS0Zf0zyq6zkdPUIOfOYYRUIRrmUm5S7qfccfcH/GRdd
-        OHB3DuRcr5+81+cIKgIbf2wb8b+u0U8xzQ3J9COAGRl26KBLD+TsHGBdEdtLFoK/9N82ExOr6wnGE42P
-        FLW+E84HtqwAMzLs0EEXDj3AInl883nt1IpiZT0x6l37baWlsWf6z9KesWU1MoAZGXboIIMDl+SWDxd9
-        CcVNiyn8sYT9Wp1N5Pb/NI7Px7reOEMtFlek86LQXGtyRaQvpwMNg85Qs8Oz2QuXnCgz8OjVyY+rWwbw
-        NRxnjvF0NVZXVKlkvHXA4o4qOPd1Naa5SIeC8dYqRrYzFVzCeTBQPOf/YXR6v+ut7rVu42xYya0yiPsd
-        AWWbeUkEMCMbeB+UbWeWJdHgTFAOlxwtfX213bSoGvoQ7m4e9og7GF8TTzbVJuydlclsy40AMzLsmoY8
-        T+U2b6NI526FS46UaNmnyvorX9h90pa3HolYvyDSTPg6z1YMSNTj3h6AGRl26KCb+7CPD5fszb9Fsi4L
-        Th7nvaoWaJzt6gmfUj8T1DT0u1WcUm09wIzsOd2hgy4cuPjtohzYnZ1XwLokKGbflley73Q9YRcqKzIv
-        lBcCOvOR7ac7dNCFk3JJBh32pIJs+h6mHKTso2SmyKLvodQOHchwMtL/mNL5lOH+A5i6WIwCDkE+AAAA
-        AElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACXElEQVQ4T6WTW0iTYRzGXwy6
+        CNJsFWRQF4sKSaRE8qa66AhdRJBkF+mFtCDBnGLDEbqGNhEVcSedupYr0jnbtJ3cdEMNc4ZbJVrTb9O1
+        g8fKRgu6Wu8jn9CFF0mDH3t4/s/vvftIIpH4L7YstwPJLLOSU+UD5PRDe0qWwJFDuU65zf6fYfm7y8EW
+        DtzNBw5frR6+0z0WUgRXf9lWY789jg/LmmuS0QcAGR1u2GALZ/OBlEtiV8F06If+y1rcubASt/sWYwN5
+        jW+EU8F1K0BGhxs22MKBSzL45rPakXnF/ErcwSz9tNLR4BP9R2nH4JwaHUBGhxs26ODAJenF/XmfwjHT
+        DEtgOe66UmUTeQPfjUNTy22v3OEGiyfael5orjR5otLno8GaXne4fsy31gmXHC8y8Oirw+8X1g3gcyRm
+        P8rrqrB6FpVKO1MFLN5FBfduV4VpMtqisDOVioGNTgWXcO/15E8GvhndzFe91bvUbpyIKHPKDGLdWFDZ
+        ZJ4VAWR0PW9Dso3OMivqHQ/J4ZIjhS8vN5tmVH3vIu31/T5xi91fx5ONNAk7J2Qy21wtQEaHW12f77Hc
+        xtSKuryNcMmhAi3nZJGu9JnLL2147ZOI9dMijdPfml3SI1EPMR0AGR1u2GCbfr+bD5fszrxBUi8KThzj
+        vSgXaNzNaqdfqR8PaWp0XhW3UFsNkNE9pTdssIUDF78dlH070zKyUi4I8jk35aWcW22POLnKkuRzxbmA
+        Zj66vfSGDbZwWJckUXaxRRrlIGU/ZQ8lmSWVcoCCGzbYwkna8gPZDluW/06C/AGYuliMcYMAOwAAAABJ
+        RU5ErkJggg==
 </value>
   </data>
   <data name="property" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACXUlEQVQ4T5WQUUiTURTHj7bH
-        BF8C6XGEwnoIpg/rIcEY2QhlW86USMjKUoa1LIO0h8AoRRSVolFWkFmuaUaBzW1awkZue+hh1pgJMWiL
-        rbGFC4fM/t1zSfEhaF34cb5zv//vfPe7ZDKZiHGfVEjmmhXV882K/n/BuTdNCpIyc76hinhDMJILPcHK
-        i24ERtuAzxPgPubuQ/zdAFLeEWQCVnBu5oTiyNYAHmI+VkXWhpLaqcYdo/77rch9GoPzlknWxHw/lsYs
-        WJm8iq8zPfgues7xAKWgUdDCXKqrGJy6WBHKfhiVctozLCv3sdmbCE904sv0NSw9OB1/fLTwGRmNxuNe
-        rze4vLwM78t7cPfV4+f723ho3o+Eqxe2K1pZeQjX0HjHr1fd2uRAdcHckK6gifR6favT6YTD4cDdU/vw
-        Y2EQY5YDuHO5Dr31SnwTx+UhXKe6DmP4jAaH9hTaeg7SbjFEXuJZ/FlhzzQemTXgyuvjwiSsLeWIvr4u
-        h7iejiAQCIAdvjNL7V4ig8FwbmNjA7lc7q8E3z6XQ2bHh+Dz+eD3+8GOgF2impqatvX1dZTblMhms+Df
-        4a8Eg0GEw2G5tx3OsiNgl0in05nX1taQyWTygrPsCNgl0mq17aurq1iwtCOVSsHlcsHj8Wyx2W9WzrIj
-        YJeosrLSkk6nkUgk8oKz7AjYJdJoNB3JZBItViAajcLtdsNut8u6/XlxcVG+5yw7AlKpVERqtbozHo8j
-        EonkBWfZKS0tJbnKysq6+PixWCwvOMuOUHcJdlJRUVFbcXHxjf9BOBeELM5PJb8B18GBdzrX/msAAAAA
-        SUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACWklEQVQ4T5WQUUhTYRiGP22X
+        DXYTSJcSDuwimF6siwRjZCMmas6USMjKUoa1LIO0i8AoRRQdRaNWQWZpakaB6TatwUa6XXQxS2ZCCG2x
+        NbbYYmNsvf3fT4oXQeuHh/f857zPd/5zyGg0SpwnFZKFFkXVYoti4F9w702zgrYGnG+sJL4hsGRXn2D9
+        RQ98tnbg8zh4H3L2I/xuEDGPBUmfFdybPaE4sjWAMR2rJGtjUfV00w6b934bsp9GYb9llBlZHMDKqBnr
+        U1fxdbYX38WeeywWC5oErcyl+vKh6Yvlq+kPNinH3SMyeR+av4nAeBe+zFzDyoPT4cdHC59RXV3dcY/H
+        419bW4Pn5T04+xvw8/1tPDTtR8TRh4krOpk8hHN1rPPXqx5ddLCqYGFYX9BMNTU1bXa7HXNzc7h7ah9+
+        uIYwaj6AO5fr0ddQjG/iuDyEc7r7MEbOaHFoT+FE70HaLYbIn3gWf1bAPYNHJq1MXh9dU7C2liH4+roc
+        4nhqgc/nAzsCMlfvJaqtrT2Xy+WQzWb/iv/tczlkfmwYy8vL8Hq9YEfALpHBYGjPZDIomyhGOp0Gfw6/
+        xe/3IxAIyHvb4S47AnaJ9Hq9KZVKIZlM5gV32RGwS6TT6ToSiQRc5g7EYjE4HA643e4tNvebyV12BOwS
+        VVRUmOPxOCKRSF5wlx0Bu0RarbYzGo2i1QoEg0E4nU5MTk7K3H69tLQkn3OXHQGVlpYSaTSarnA4jI2N
+        jbzgLjslJSUkl1qt7uajhUKhvOAuO0LdJdhJSqWyXaVS3fgfhHNByOL8VPQb18GBdynqi84AAAAASUVO
+        RK5CYII=
 </value>
   </data>
   <data name="application-export" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABzklEQVQ4T6WTO2hiURCGB+0M
-        go0YtrwKaqlphKCVhQ/EB1qE9Ek2CYElsFvErRZ7KytBEAtBsFDBqK2P5MpmIckiaCGIKCqi+MAHyuyZ
-        W66Fhgx85zTzDWd+OICI8BnA5/NxjDPGxYFQL+f1eoEAj8dzXi6X3xuNBtZqNXx7e8WXl9/4/PyEpVIZ
-        i8UKu3msVP4gz//Fx8fiOzkMcgFcLtfXQqGAuVwOs9ksZjIZTKVSmEwmMZFIYDwex1gshtFoFCORCIbD
-        YRSLxRcikQgIWuGSZfChIodBLoDb7b7abre42Wz2wvM85vN5ZE+/cjqdYLFYABwOx/V6vcblcrkXWo3K
-        brff2Gw2nclkArBarbeLxQJns9kO/X4f6/U6C7Ek5EJ59Ho9YQiTvxmNxhMwm8130+kUR6PRDpPJBOfz
-        Oa5WK6Q1/y+dTvcDaNJ4PMbBYLBDs9nEarWK6XRaSD8YDGK73RbmcBz3U6VSGcBgMNwPh0PsdDp7CQQC
-        giyXy38pFIpTNgRAr9d/p11brdZeQqEQ+v1+1Gg0D0qlErRaLYBarX6g53e73YOgXnIY5AJIpdJLmUwW
-        +AjkSCQSIKjoPGZ8ORDqPRJMqs98ZXL/Ad8QklT8D+CBAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABy0lEQVQ4T6XQO4haURAG4EE7
+        g2AjhpQqqKWmEYJWFj4QH2gR0u9uHgRCICnWVMHeykoQxEIQLFRw1dZH9ko2kN0gaCGIKCqi+MAHyp9z
+        brpY6LID373N/MOZIQBPQsFgUM28Zi7OxHvVgUCAOPL7/W9qtdpDu91Gs9nE/f1v3N39xO3tD1SrNVQq
+        dfYXUK//giD8wc1N5YFnGJ4l8nq9b8vlMorFIgqFAvL5PLLZLDKZDNLpNFKpFJLJJBKJBOLxOGKxGKRS
+        6YVEIiGOr3DJdnlU8QzDs0Q+n+/qcDhgv9+fJAgCSqUS2NOvPB4P2e12Irfb/W6322Gz2ZzEV+Plcrne
+        O51Oo9VqJXI4HB/W6zWWy+WR0WiEVqvFjlgVw/wew+FQHMLCnywWy0uy2WwfF4sFptPpkfl8jtVqhe12
+        C77m/2U0Gr8SnzSbzTAej490Oh00Gg3kcjnx+pFIBL1eTwyr1epvWq3WTGaz+fNkMkG/3z8pHA6LYaVS
+        +V2lUr1iQ4hMJtMXvmu32z0pGo0iFApBr9dfazQaMhgMRDqd7po/dzAYnIX38gzDs0RyufxSoVCEH4Nn
+        ZDIZcbz49znz4ky89xnzr9hNngD0F98QklS9cXDvAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_buffer" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1014,50 +1009,49 @@
   <data name="arrow-return-180" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAClUlEQVQ4T6XSe0hTcRQH8IPm
-        Y1ZWPnK2yqt/NMpHPqMkUaNCqn8iMYSbZGFhSMtCS6RBD4VmDxqVjCywP9QwLa5GPkK9PVDHtVrlkx6z
-        1WbhH5kSE7d7OnduK8T6p8GHc36/e8733j8GiAj/A1JvjTmk3f6qI8I/6OkZR9Q0z6TcNENy5ScAqXES
-        rhkRL4+I87pE9+VvbdYCfsqytXqMp510R8CmG6MugvaDiJoBm9uFfhu6lL+eQbV+Gku7rVjS+3Myreoz
-        T7sMbNC+d9ElXX0n/E2q7qMhp+mbqfjplF3VPom5zeNmmlW7A+gAiVdGIFbT7yD1f4q/OKiIqxjQZN+z
-        mApavmNhx4SVzhwo1b2w9owAUedfOvqocy9Yoos82we05A6Jo9DosleKpIo3hpyGUcxrtiDt6EF+5CGs
-        VLVBxEke1pzuYSlEcAKmqAtWFT52iDj1RHquiCnrM+yoM+Kuu0akud8B4cVdLIUIWqMdpRp2osO9LAUw
-        RZ0KutdsrBw0RdeYcXPdFyududkvONrK0lcIpUM2zOqeRqmfK7yEN0RdHzIp70/Y5fU/MLJy2EwzagjJ
-        b84gQq5BRK8HM7iuw4479SJu6xEx5bmIibzdcRfWZkP/Jhv6cTO4unZ8Uq5q5enlDAQcaMggwnY9/ac5
-        xCWPEBXtiKFE3oa4nAS1Iga2iBjcOGWVa4ctgflNfODBxvTgwxzAsv314L+vjl3M1gpJz2YXpX4eerrj
-        iJrmGXopLEzMBpDFZoFPTCb47b3DyrKqBWUnolR9t5SCd/Seefmsz4S5P0+6kC1IPnbIa3eVIKHzCqdQ
-        qiEkiCwli4gv8SIeriBvagJImEdCnsoj+XgN9QlO8VRjiJIwRO4MklH1/AWgVvXWOcn9vQAAAABJRU5E
-        rkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACjElEQVQ4T6XSWUhUYRQH8IPm
+        MlZWLjk2laMPDeWSa5QkalRI9RKJIdwkCwtDmiy0RBpoUWhsoaGSIQvswQXT4mrkEuptQR2u1VSutIxN
+        zVj4kCkx4sw9nXsdxxDrpQ9+fOf77jn/7+UCIv4XSL4zKkm5+01P+H8wEJZoqF+ZdNsCieWfAcTCib9h
+        Qrw6LCzoCil9Z7flcZPW7ZWjHPWnSgFbbo3M4nUfBdT2210u9c0pfTONGsMUFnfZsKjn10RKxReOZpSw
+        Sfdhlj7h+nv+b5L1n4xZjd/Nhc8mHeq2CcxuGrPQvcYVQAeIvzYM0do+iVj/KfbygCKmrF+bed9qzmv+
+        gfnt4zY6s6DS9MD6czxEXHwl1REXXjJEH36+VxxyBcRQaGTJa0VC2VtjVv0I5jRZkWYMID/2CFarWyHs
+        NAfrznYzFMI7gbKgE9bkP5GEnXkqfldElfQad9WYcE+tCalnLiC0sJOhEF5ncqC4h5xqdw2LlAUdCrrX
+        bi4fMEdWWXBrzVcbndmZgOMtDIXwxYN2zOiaQrGeL7SIM0bcHDSrHow75HU/Mbx8yEL3GgjKbUojfLZR
+        QI+H07ih3YG7DQLu6BYw6YWA8ZxDugtptaNvox192GlcWz02IVe3cPS4EvwO1acRfqeB/ksWcdljREUb
+        YjCRtyKuJAEtiP7NAgY2TNrkuiGrf24j53+4ITXwKAuw4mAd+B6oYZYy1XzC85lBsV6AgbBEQ/1KehQW
+        x2cCyKIzwCsqHXz232NkGZW8qgNR3L23FYNn5L4FeW1Mh/nLncgWJZ444rG3ghfReZVTMAkiAWQ5WUK8
+        iQdxI9LyJH4kxC0uR+2WeLKK6jinWBJFVERJ5EQMkgGA+2+gVvXWL25IBwAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="exclamation" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACDklEQVQ4T6XTz2vTYBgH8OcN
-        is6LqAM7cXpxwlAsHnSIiF6ml/0FIlgRhUEOO2g30JPgPCi402C4grP+3rSz/qqpWKtlunXQt7GzrO1W
-        Bk2wdLWDukJdx+P7hKVka0HQwIc8ffL9Jj0kgIjwP4COi6cZTL6ssVnshlfQvCpDHQIDvXXLFL6gxR1c
-        i5/lNNd5gHFDmHjBaoS9rDni2+qpLI6UK4tPyxHfFg/t6mXhq4fVGB9lV7IzXcml/C1cyt/EbEpO0q5e
-        FsaesVW+PGd27t+t/F4YXHY6nUjKhf5lrjQrdG1tHj4PMyspNML6cukerZjpRlmWDcXMZcwmZY2uibxk
-        7UDwMav69IS1R9/vD/36cQMX0p3ocDgMNBe1q8iVlhBlrB348ICZGgKPJHcu3V0ozHaKJ55Du92ONpsN
-        Y+FTqE6cxNhkR4EyotNg9uDdEDP43eyMGmjj+bkuTE11oMpPoHhFDFF+3BBT23HszS5OWbMHvruMNPrv
-        b/DqyfOlROwYxr8dMcxnrxnM33SeihwqKe51XupQF165GLx2sUuRwIHE3PRRnP1+sMr8B9YdzWF/U4I6
-        1IXRAbbHd29jUE8crujT+9DKvMHafSbeWnk7tD5IXXh4G1zqx536/Ewr5lJ7hZaq0s8eJNadOUcD23Xq
-        wmAv9N+5DuP/grr0MUrCJmGb0CTs+AvKNK50pD9EZQJEPplB2AAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACB0lEQVQ4T6XSy2sTURQG8HOD
+        4mMjasG0WN1YoSgGF1pEpG6qm/4FIhgRhcIsutC0oCvBulCwq0KxAdv4bjU1vuJEjNFQbVPIZEwNTdKG
+        QmYwpDGF2EBsyuk9FydMkoKgAz+4c873zcxiABH/i7gunWEw/bLONm70DzpX7alDYLCvemFyUYvZFS12
+        TqFzza4Cpl6wOiEPaw57d7jLy2Ol8vLTUti73U2z9bLw1c3qTI6zq5m57sRK7jau5G5hJiklaLZeFiae
+        sSpfnjOb4tsr/14aWnU4HEhK+YFVRW6WaVebh8+jzMwSHGP92VSvVkj3oCRJQiF9BTMJSaMdZcwdCDxm
+        FZ+esI7I+4PBXz9u4lKqC+12u0DngnYNFbklSBlzBz48YIYt/kcWVzbVk8/Pd/E3nkebzYZWqxWjodOo
+        Tp3C6HRnnjKUNXrwbpgJPhc7q/rblNxCNyZnOlFVTtJfIkSUdiGqduDEmz0KZY0eeO8x0uC7v8mjJy4U
+        49ETGPt2TFjMXBeMezITPlKUXRs81KEuvHIyeO1kl8P+Q/GF2eM4//1whfEF5hkJ+Rrj1KEujA+yfd6R
+        zQE9frSszx5AM+MBtfN0rLX8dnhjgLrw8A441Y+79cW5Vswm93MtFcWfvYJ5Zoj4d+nUhaE+GLh7Ayb/
+        BXX5F4KF28rt5Bq5pr+gTAPHO2BZA0RlAkRncDeTAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="document--pencil" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACMklEQVQ4T4WSTWgTURDHZ4/V
-        Ww4KhRwCjWgIegjFrVLbSq1djaKYQg/10ENMQxs0JRhSbRu8iBc9eBLUXuJFlFCsi7YiGL/wXrURTGgw
-        aZRQbb423+PMtg+CtPHBD5bH/H/Mmx1wzMwAMzQ7e4a49B86LkxPw/mpKTgXCMD+7m4AvtjCVajV8He5
-        jL+KRUzm85jI5XA1m9WZj0SQ6lyEWQhYotu2GMtVKpih4NrGBsYzGYym0/g5lcLlZBIfqSryodoxwsxh
-        XXDW7xe48yRYLxS2ldwNhVBgVpTrBDBg9/kE48VqFf9Q+ztJuBN+DmXGRQ4GvV7BhEYzyGpaSwkLKDPB
-        uVtdXQAnPB6Bp0SCfKnUUsKDpYxn0WiET5IEcNztFlyu1OtYpDm0kvDfuWK334lJUviDJPXCMadT4K2S
-        oERzaCVZjsXQ2d+vYjCI85L0Bo6Mjgoma40GlukZO0ni8Zf4OBxGjeY00N5+ew5gAA6PjAh8dRJwF9tJ
-        EqtLGHk2iFoqgAc6O18YDIaD94GObXhYcLVBi1Ijwb+SZOIVvl1Q9PCTh314+uLReyabDVxWK0BHTw8c
-        cjgYP29ag7polqR/vMZ3C6c2ww968Vt0EbmWM5zVj1GWYZ+iXNN3tUmy/vMrvn++GX5K4ZUvKvKycS1n
-        xGmjjz17ZfmGEOgS4qMaRMxHMTzXh9+jS8h7UqYOuZYzBGfBQFjbTKbJ3RbLzWboHodO7lqxyMZQ8z3X
-        coazfwEpq4JeDHDvFwAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACKUlEQVQ4T4WSPWhTYRSGzx2r
+        2x0UChkCjWgIOoTirVLbSlt7NYpiCh3q0CHWoEFTgiGtbYOLuOjgJKhd4iJKKNagrQjGP9yrNoIJDSZG
+        CdUmN/8/x3Nu85UgbTzwLB/v+/D9gX1mRmd4dvYkcf4/dJydnoYzk5Nw2ueDvd3dALzQYDxXreLvUgl/
+        5fOY0DSMZ7O4msnozIfDyBnCJASMbmtwIVsuY5qKP9bXMZZOYySVwk/JJC4nEvgwFEIezhGmTcEpr1fg
+        1EiwlsttKbkTCGxiUtVrBDBg83gEF/OVCv6h7W8n4Z3wcTgrejDkdgsuFegOMoVCSwkLOMudm11dAAMu
+        l8BVJIFWLLaU8MVydtFggI+SBHDU6RRcLtdqmKd7aCXh17lis92OSlLwvST1whGHQ+CukKBI99BKshyN
+        oqO/P4R+P85L0ms4NDYmmKjW61iiY2wnicVe4KNgEAu0NtjefmsOYBAOjo4KPDUS8C62ksRXlzD8dAgL
+        SR/u6+x8Lsvy/ntAYx0ZEVyt00epkuBfSSL+Et8sqHr58YM+PHHu8F2j1QrjFgtAR08PHLDbGS//tDrt
+        olmS+v4K3y4c3yjf78WvkUXkLHe4q49BUWCPqk6xgEdI1n5+wXfPNspPqLzyOYT82TjLHTFtxK7dinK9
+        0deHj/Mh5EfUIhic68NvkSXkf1IiOWe50+iCTFjajMaJnWbzjWZoHYeP7VgxK4ZA8zpnuQMA8l8pq4Je
+        +8ojoAAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="icon_zoomrect" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1078,16 +1072,16 @@
   <data name="folder--plus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACDUlEQVQ4T43OXUjTYRTH8XNh
-        gRJDd7Gk2yICZSu8C8K8qJsuIiG66E0rFkJXUZG4lK2xaavVYuKWbikT7U1p9EIks6JXdWbQC5GhlKYb
-        0/VvLnOp+3Ue6dlFqz8d+HAGO9+HPw3UEwnheqpk5v9UKTvqt5NkwfcgkOhWxzfcWGRHfTaSrPh2A+mp
-        TlXihhur7OiZlSTbYvwqFqLtqsQNNzbZ0ZPTJDUsxDowP9GmStxw0yA7emQmyTEfCSA15lMlbrhxyI56
-        60hypr74MTvqUfUz0gZunL21RCFGPacyXD8+NSM57P6n1LgfIw9N4MbFSu6b+IF7NRnu2ZEmJN5f+Cvx
-        38dQNTuJxXQa3LlFS7sduWR05lKpV/N2wy09Knq2QHnjyJL8cBFDXVUQe2ZuDneqqYnx+LS0/LKWCv0F
-        sUPx4zB0FWH6lT1L4p0T4WtGiD2hKAieoEuMp0Xr5UfChZ78qZ0xIwyd65bsu1mK2KAlQ3l9Bi86DkDs
-        4WgU3cfIx3ga88Nlk+X4k6F1LaL9dRlf+aueBvZD7LK+NK4fpVbGc07jpbOa8Er7injx503Qe9Ys2du+
-        EZHnpoz4SytCzbsgtv5uEoEjdKWmXDxAlMd0uto8ZdVoEda7VmN6wJxFGbIheH4bxG48SLcrNtOO3y1p
-        +Udxwfacx7rDy2ZKjDmTjj30QE3VVmoRDdP+AgqRc9vLR4PDAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACBElEQVQ4T43OXUhTYRwG8P+F
+        BUoMPRdLui0iULbCuyDMi7rpIhKii760YiF0FRWJS5mNzVqtDMUt3VIm2pfS6INIZkWf6imDPogMpS/d
+        mK7TXOZS9/S+L533otWhP/x4Ls7zvBwaaiBBbaBKxvGfKvUdDbqlenwPA8leY6zDu/qOBlySE9+uIjPZ
+        bYh3eFff0WOn5FpIXMJ8rNMQ7/CuvqOHx6UT8/EuzI13GOId3tV3dN8heeaiIaQ/BQzxDu/qO+qvk7zp
+        L0HMjPkM/Yx2gHf7a4kiDPUdkxp/fGhFaqTpn9Kfgxi9ZwfvMiV37OyB2zVS08xoC5Jvz/4V//Y+Us0c
+        xUImA97nO9ruySWbN5dK/abXa65bUNG3AdorT5bUu3MY7qkSOT07i5vV1MKwCyi0+IJChcGC+L7EYVh7
+        ijD1wp0l+cYL9bJN5LimIXyEzjPs2hQ/e0Qt9OVPbo3bYO1eJey6Vor4s3pJe3kST7v2iByJxdB7iAIM
+        u+Z8tWyiHH+ytq9EbLBO+sr+4lFot8iygQyuHKR2ht1pk59OmdSl7iWJ4o/rYPGtEHZ2rkX0iV1KPHci
+        0rpNpOVWCqEDdLGmnD9AlMeYzbV52rKxIqxuXI6pIUcWbdiF8JlNIpv30o2K9bTl95YUprhgc84D8/5F
+        0yW2nAnPDrprpGojtfENESm/AAqRc9toKh4FAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_refreshmap" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1143,17 +1137,17 @@
   <data name="magnifier" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACPklEQVQ4T2Pw8/NjwIYDAwMZ
-        QkJCBENDQx2AOAqIU6G0A0gcJA/Sh1UzSAKoQDEuITlpyuKN3UevPlt//9WX4zcfv926aM22PpA4SB5s
-        gI+PDwb29fUVjIqNT1l38OrCIzdeH3r05tvZJ2+/nQNhEHvHiZtLomMTUkDqGDw9PbFh54nz1/btvvTi
-        wNXHH0/ANMPoa08+nZi+ZMNEoF5nBmdnrDhh2+kHa0AG4MIHLz/ZBNSbwGBnZ4cN5++78nIfTDO6C0D8
-        E7ffHgXqzWewsLDAhlP3nH+4EWQANs0gsVM3nu8A6k1lMDQ0xIY9J89dMX3/1VeH77/8ehrdEGBAnpu3
-        bO1coF5PBicnJwYHBwewN2xtbRlsbGwYzM3NVVzc3KuPXLy37+azzygGPHv//eLlm/d3WNvYlqipqYlg
-        GGBtbS0PNKR47dr1/zU0tdsnTp+79PGLd0fefv557emr90fnLVi8UkNDs1ZQUFBLTk6OAcUAoEYtNzf3
-        mh079vwXFRVrZmFh0QLiMCCuBOJ2KA3ii/Hx8TGgGAB0vkVgYHDbkSNn/isqKvUAFakCMQMuzMXFxcDB
-        wcEA8793QkLKhIsX7/7X0zOYBtRkzMzMzMDIyMjAxMSEgRmQAcgZwEAruXXr1X97e+d5QM0uII2kAA5R
-        UVEXERGRFqDmbKBGfSDWAWINIFYBYnkglgZiMSAWBGIeIAa6nYEViJlAFrFAJaWAtCQQS0D5IkBaCIgF
-        gJgPiLmBmBOI2aB6mIE0IwDSnmBluZcHuwAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACN0lEQVQ4T2Pw8/PDigMDAxlC
+        QkIEQ0NDHYA4CohTobQDSBwkD1KHoRGGgQoU4xKSk6Ys3th99Oqz9fdffTl+8/HbrYvWbOsDiYPkQeoY
+        fHx8MLCvr69gVGx8yrqDVxceufH60KM3384+efvtHAiD2DtO3FwSHZuQAlLH4OnpiQ07T5y/tm/3pRcH
+        rj7+eAKmGYavPfl0YvqSDRNB6hicnbHihG2nH6wBGYALH7z8ZBNIHYOdnR02nL/vyst9MMXoLgDhE7ff
+        HgWpY7CwsMCGU/ecf7gRl2YQPnXj+Q6QOgZDQ0Ns2HPy3BXT9199dfj+y6+n0TUDA/LcvGVr54LUMTg5
+        OTE4ODiAnW5ra8tgY2PDYG5uruLi5l595OK9fTeffUYx4Nn77xcv37y/w9rGtkRNTU0EwwBra2t5oCHF
+        a9eu/6+hqd0+cfrcpY9fvDvy9vPPa09fvT86b8HilRoamrWCgoJacnJyDCgGADVqubm51+zYsee/qKhY
+        MwsLixYQhwFxJRC3Q2kQX4yPj48BxQCg7RaBgcFtR46c+a+oqNQDVKQKxAy4MBcXFwMHBwcDzHbvhISU
+        CRcv3v2vp2cwDajAmJmZmYGRkZGBiYkJA6MAkDOAgVZy69ar//b2zvOAml1AGkkBHKKioi4iIiItQM3Z
+        QL4+EOsAsQYQqwCxPBBLA7EYEAsCMQ8QA93OwArEYOewADFIUgqIJYFYAsoXAWIhIBYAYj4g5gZiTiBm
+        A2KQHmYGBgZGANKeYGU4uD9WAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_forward" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1170,42 +1164,42 @@
   <data name="arrow" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB6UlEQVQ4T2P4//8/AyUYrFmv
-        /RKDfsdlOLaf+4IBhh3mvZwJxDE2s54yWEx9wGDcdxOsXqP+FFgvVgOMe28wgDRA8RkgDcIxRBsAco1R
-        z3WwjUB8ZsaT//9BtMWU+zFEuQDmHcOuqyAnn+m8+uf/lAf//oPYQNfFYHhBt+3iTKDgGVy48eyP/0X7
-        vvzvvfnnP0gNUH0MShgAOUBbfv2vPfntf82Jb/+rj38F46pjX/9XHv36v2DPp/8ZW96DcfP5H/9B6tXr
-        TsbAA1Gp/NAZkIa0Te/gOGHdq//BSx7+95x947/LtMv/HSdfAGMQO2PHi/8gPXADZPJ2nmk8+/1/2aEv
-        /wsPfP4fvePdf88NL/67rnv+33nts/+mSx//15z3EIx9t77+D1Ivm78L4QLx9E0zxdI2nsGFVbd+/8+3
-        +ut/o13f/4PUANXHAA1BpAOgIINIynoMLJy8jkEgftUZoZ3//8vt+f8fxBZMWB0DUo9iALdxJAOXUQQG
-        5o5YzADEZyR2/f8Ponkil8TwuNczsErqMIAAPAzAPCyASVSDgS1o7hkQZrUri2EW00RRhWwAE1CGD4hl
-        gFgLiI1hmMmqeBmTUXIJlK8NpGWBmB+ImZENYAQKsEMNEQXSUjiwGFQzB5BmghtASXYGADrJ+mn64PZ5
-        AAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB4ElEQVQ4T2P4//8/RRhM6LVf
+        YtDvuAzH9nNfwLHDvJczgTjGZtZTBoupDxiM+26C1WvUn8JtgHHvDQaQBig+A8UxRBsAwkY918E2AvGZ
+        GU/+/wfRFlPuxxBtAAgbdl0F2Xim8+qf/1Me/PsPYgNdF4NhgG7bxZlAwTO4cOPZH/+L9n3533vzz38Q
+        H6g+BsUAIAdoy6//tSe//a858e1/9fGvYFx17Ov/yqNf/xfs+fQ/Y8t7MG4+/+M/SL163ckYuAFK5YfO
+        gDSkbXoHxwnrXv0PXvLwv+fsG/9dpl3+7zj5AhiD2Bk7XvwH6YEbIJO3E+jM7//LDn35X3jg8//oHe/+
+        e2548d913fP/zmuf/Tdd+vi/5ryHYOy79fV/kHrZ/F0IF4inb5oplrbxDC6suvX7f77VX/8b7fr+H8QH
+        qo8BGoIIA6Agg0jKegwsnLyOQSB+1Rmhnf//y+35/x/EFkxYHQNSj2IAt3EkA5dRBAbmjlgMwmckdv3/
+        D6J5IpfE8LjXM7BK6jCAANwAXIBJVIOBLWjuGRBmtSuLYRbThMpAALIBTEDMB8QyQKwFxMYwzGRVvIzJ
+        KLkEytcGYlkg5gdiZmQDGIGYHYhBhogCsRQOLAbEIM0cQMwEN4B8/J8BADrJ+mnlo424AAAAAElFTkSu
+        QmCC
 </value>
   </data>
   <data name="cross" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABfUlEQVQ4T6WTu0vDUBTGz1+g
-        VBtB1KBgdSsUNFvHQoZChw4upWoRupYO7a6giw66KCj4wgciuAiKg5M4XcFBUHAVBxdXcfD4fTGJqaZT
-        hx+353yPezNUVFU6oaMwL/YKDkXkCJyIuMDw5LzvE6cx87eAIaPNpvIEbqTA0z5qtVBrKfCN5qvR0Id8
-        Xj/rdcXOAJYQ81apeNpLqRRovy/YxXOAuwPje7Wq146jr+WyciaPhYK3u8vlvB29zISfwAGCbEHYhOG5
-        WNSLdFpvs1m9ymR027L02LaVGj30xhbAIBswrMN4nkrpXiLhcZBMKnfU6PlXsIjlElgBqzCtwXyGW08R
-        DuCOGj30MhN+QlCw/GMwlwjGQY2edgUUzA3CAZzb7NyWF8zjOcDcIxzAeQG3kTiNmfATbAxTMNYRekIJ
-        T87D2JM4jZmwAL8HwdiEyNw0wpMis5hHwRAYACOOyAw1ejCPMxMt6MKiF/T79OHsAd2AWgJYET3JfVjQ
-        yd/5G8s+qAWdGU8YAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABcUlEQVQ4T6WNvUtCYRTGz19g
+        3PIGkUlB1iYI5eYoOAgODi1iJYGr3EH3glpqqKWgoC/6IIKWoGhoiqY3aAgKWqOhpTUaOj3P7d6b5nWo
+        hJ8v5zy/81xR1X8RuvwN7t++iByAI5EcMHw573qEZbz5WcDAaKOhfDk3FbjZW60WZC0Fnmg+6nW9y+f1
+        3XGUM2AJMS+Vips9lUp+9l2wjQHkthC8Vqt6mU7rc7msnMl9oeDubrJZd0eXNy0FCGQDwTqEx2JRz5JJ
+        vc5k9CKV0k3b1sN4XJnRoRtaAEHWIKxCPE0kdMeyXPaiUeWOGZ22gnkMC2AJLENagXyCrx7j2Ic7ZnTo
+        8qatYPFLMOc4CIMZnU4FDMwVRB/OHXa5loJZDMDcQvDhPAeRhGW8CQriGCYgOggeIPDlPIg9Cct4ExTg
+        FwMjYyIzkxDGRaYxD4MB0A+G0iJTzOhgHgWx5oII6AF9Hr2gG3QBZhawgZ9HQSQo+Dsqn8s+qAWjmxJ/
+        AAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="layer-shape-curve" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABlklEQVQ4T6WS2y/CYRjHH4uN
-        ZbRSU8sqM1FSsdEF5sKFzYXIoTJuwozKMcw9rurSDS64YWbOZ/+C/ynf5+33tn5lDvPbPr/v8x6e7/u8
-        B+rceu8CcUUJmscZTZPW6qHiTx9Mk2HykLLZLFHH5lsCwQcr4Hae9rUnalt5IPfyvcAxtk/G7gipDPyp
-        1wBIKkpQgUwuNGATV/KOmhYuyTx9kquAJ/s2XsJABzhWJX9l0Jq4JUYYeNefmUHg4lU9q4+iXE6UyC3I
-        ClQGnARsYALJWjn51wa8IoOEPjAKAyvQIO4BKdZvKygY1CD2gTCIgW2+HValzf0+HKJGtYVCd7lHPmlM
-        6gU7rGiXQxvAOOhvid8QIw7RFIiK+5VGnKwYiEm8WkG72rl0PQUczYtXOQP58YtjM34oDCdKA3toT8Sc
-        BLwgWGJQ8l6LOqosbvGAgAHMNc5fqCv4yYDHa/0hssXOBuyz57uscgtlGNOAClAJtKAG6IAe1AETqAdm
-        y8xphm9HUbHunwwMI5nhuvDRgTFyPCQq4N9/+ATdd0wu3kGkzgAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABeklEQVQ4T53SSy8DURQH8CMl
+        IRWavqJNpa2IoqotCV0gFhYSC6UebYVNEaGtZxF7rNqlDRZsiIj321fodxr/c800U4rWTX49986c87+L
+        DnVuvXdBXK58znFF06S1eejr0gfTZJg8JEmSiDo23xLYZLkCn3Pa156obeWB3Mv3gnNsn0zdkfwAf+o1
+        AEm58llQhtUBrDV5R40Ll2SZPskFkG/jJQw64H3ecKGAlsStIAK8689sEFp50LP6KBqLDuAhsMMEhrVK
+        Y9EBfCNDYx+MoskGGux7IMX11wDVSw34IAwx2EZDlqt85uc+BGh+ChD4BvmWXtjhinM5aj2MQ39z/IaY
+        CDAHouL/LRAgmriqztWupespcDYtXn0GKIu/OA7jD4WpAxyhPbHnIfBC8FvAX6vK6hYfEBhgrmH+orQA
+        XrX+ENljZwOO2fNdrkpAGWigAipBCzWgAz0YwQx1YLHOnGYwmJUrHpUYYBjJDBvDRwemyPGQCOCf/5Po
+        A913TC5y9DpLAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_printablepage_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1241,16 +1235,16 @@
   <data name="block" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB80lEQVQ4T4WSUUhTURjH//fV
-        hwgiRBnSi8xxG0qlBZZtajK0xir30MCQYI/51AQzFEXSUQ8JiiAqiGLMh0HhQ4U1aNBDHoiIZbYpRKWE
-        DaHe/Tzf8d7rdu/ACz8+/ud83++ce7nQWrqhjb0/Ip4OavH0VgmCRX1yjogAbSRlZ7Xh5c7/zrV9MuEs
-        +1btvUrQ7euCNvC6kJz/1S6dX9604Cx7cra+wxukADyr8kLrfWGSvbKyQ3XPv1twlvvZgh7o45EjgZK4
-        dGg9CWbjUvIHnV34asGZ1419+GZ0hJdRLFCSSg+06Pz6uUSO3HOfLTjzugS+aY8atgTvgIBEmETqQts8
-        4F1ct1CCyFTGN+W2hi3BGyC53XE9vx/rJWbhXh+FQ/2Kmmt39iq6DtEfXP3dmYAoIKA+4oo8/V99G/3B
-        GQfDtyDGRCsl8tEi4l/8+dAikkqQlIK/3ib6CZeDR0GIxx+baXLjJnE14dw+A6EES1Lwq7qBsqhwEGuH
-        GP7QROOZG8TVhHPrhCGYk4Itl5cyOO3gfhvEYLqRnn4KEFcTzpefGIJJKchV1dK3U9UOon6I/tRFdXWu
-        JpwvDBmCu8DsQykpxe1GiL639TS61lL0Cpz1mCGQ/0+ZpFxSacN9ohlLJ8MQpZB7s+ojHvPYpWbmA8tY
-        cADrXMqIVYe9mAAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB6UlEQVQ4T33PX0hTYRjH8d+5
+        9SKCEFGGdCNLTiPJNEGzTU2G5ZjlLhoYIuzSrppgRqFEKXWRkAihQijKvBgYXlRUg4Qu8oWImH+XEJkS
+        NQK79+l93p33uJ0zOvDh5XnP+37PBqO1F8bo+yNjKyFpp4hQwTl5j4gA437K6U39i/2/3auHpPHM+45z
+        uUCvvwfG3Vf5MoGXv6h28auNZ953nMsFUgCeVPpgDCxp2xeW96lmYcvGM+/nnYE5Hj0KqIjHhHEzwTYb
+        kt/o9OyajWfet97DP2UisojCgIpUVMOIPV8/m8iQd+azjWfel+B/Vq0u24F3QFASWrQmvMcXfHPrNhWI
+        Tqb9k177sh14DST3Ll/JHsYHiM32DVIkPKScunT9T3lPjnnr4o/uBESeoAosy68e1LXTT5x0GbkKMSra
+        KJGNFRj7EsiG55BUgaQM/PY103d4XO6EIB58bKGJzS7iVeO5YwpCBeZlYLeqnrZR7hLvgBj50Ezj6U7i
+        VeO57akVmJGBHY+P0ih16W+HuLfSSI8/BYlXjeemR1ZgQgYylWdo40SVSywAMZQ6r342rxrP54atwA1g
+        +raMFHOtEWLwbR09XG0t+As8m3ErIJ8SqUyqcPAea8H88QhEMfLdtA7873FGNf5gCRHhH+tcyohrphD2
+        AAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_forward_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1265,18 +1259,18 @@
   <data name="gear--plus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACeklEQVQ4T6WQUUhTURzGz9zm
-        GNMxJSasHFEbKzZDNmhbESNLRnMPc9pzDCKR6ikaFC1EKBEsCvWhslBovtSL4lNmgskV3IVtbrikpWts
-        Tgx6k9CXf+e7d4VGPXXhx/nz/b/v29lhRMT+BykcCARYMBhknZ2dLBwOS2d3d7eX01PFu38HLzLgQEEo
-        FDrDjb38PIxzb2+PdnZ2aL8Gz18LOjo6zkaj0Sfb29sUiUTuctP1zc0yAczQsIMH3gM38Pv9jHOzUChQ
-        IrFM5XKJZmZmPpdKJQKY8/m8tIMH3mpG/gter5f5fL4jXV1d99PpFKVSSVpf/0LF4lcJzNCwgwdeZNxu
-        t1zg8Xh8XLgFJibG89lshiYn4zmHwzEKMEPD7pcPmd8FTqczKooJmp//QEtLAq2srFBLy6kBpVLJAGZo
-        2MEDLzIc+QZ2u/3O4uIizc7OEs5MZpVaW539CoWCAczQ9nuQ4cgFVqu13WKx3APDwyMbyWSWpqffJ12u
-        0zGAGdqFt6Fd1fOmcn3MlECGIxeYzWbW3Nx81Ol0DQmCSHNzH2ltrURbWz8kMEM78cZLV7/fJsX4oYy2
-        z8jYy0a5wGg0gn5BSNHU1DtaWBBpZORFYXk5S+BiPLxri7vJMuGiy9+ukfJx4yYPi2ys8ZlU0NDQAC61
-        tbW/TiQ+kc128qnBYHggCBkCNQ8NlfOVMP0JGzWIUgE+lUrFtFptQKfTDWg0mmM4c7kKf9AiqSL1ScWg
-        PqOI6SuO4jliQ3pR4pFevgHynCYOf1bmAmq1+govGgSYJT2mWzVt2In11aXZcf6LQ3r5DfhXw6nj8Jdh
-        pn/SW/uK9ajT7EbtWDXDfgLZQt8vMfwSKAAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACeUlEQVQ4T6WQUUhTYRzFv7nN
+        MaZjSkywlKiJxWbIBs0VMbJE2vYwpz3HIBKpnqJB0UKEEsGiUB8qCwfpS70oPrVMMLmC98I2NzRp6Rqb
+        kwW9jXAv/75zr8WMeurC737/e/7nnI2PEdF/Ib88Hg/z+Xysp6eHBQIB+ezr63Nx+vdxVe7gRQYcKPD7
+        /We4YYCfh3GWy2UqlUpUqcHz1wKv13s2FAo9KRaLFAwG73LT9Z2dPAHM0LCDB94DBd3d3eBmJpMhUVyl
+        fD5H8/Pzn3O5HAHM6XRa3sED735GKXC5XMztdh/p7e29n0jEKR6P0dbWF8pmv8pghoYdPPAi43Q6lYKO
+        jg43F26BSGQqnUolaWZmesNms00AzNCw++VD5neB3W4PSZJIi4sfaGVFoLW1NWprOzWsVqsZwAwNO3jg
+        RYajFFit1jvLy8sUjUYJZzK5Tu3t9iGVSsUAZmiVHmQ4SkFLS0uXxWK5B8bGxrdjsRTNzb2PORynwwAz
+        tAtv/Xua5w352nCjiAxHKWhubmZNTU1H7XbHqCBItLDwkTY3c7S7+0MGM7QTb1x09fttUk0dSuoHzYy9
+        rFcKzGYzGBKEOM3OvqOlJYnGx19kVldTBC5OB/Zap51kiTjo8rdrpH5cv8PDEpusfyYX1NXVgUudnV2v
+        RfETtbaefGoymR4IQpJA1UNT4XwhQH/CJkySXIBHo9EwvV7vMRgMwzqd7hjOjY0Cv9AsaYK1MdWIMakK
+        Gwu27Dlio0ZJ5pFR+QfIcxo4/FqZA2i12iu8aARglvWwYb1x20pssCbBjvNfHDUqd8CfKk4Nh98Ma/wn
+        A9WvWL82wW5UT/JvnmHsJ9lC3y9ayCOwAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_selectpolygon_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1290,17 +1284,17 @@
   <data name="layer--plus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACHUlEQVQ4T6XSXUhTcRjH8Qel
-        QrwJDZWlUhBR2ZzpbV7UZQRGIERhrRdXahhS1lVedRFEKdVyg1XUaiCczVmbL80CG2svzgtHuMxUTp7T
-        2nbmNs2yq9P/d1xkXtigwYf/nvF8z84ZI1mW6X9QzTUXlDN1zPEsYRcNUfXVV3DEP5UYiKV/BqPp5cB6
-        sINdNGhpX/sQNERTy6N8fMmVDeyiQUtVVwbhZCT5wzsb/TaUDeyiQUuaywOgFRPfPZ8ii/3ZwC4atKRu
-        c8JpduvusLDgWG2cT9k8H6SnrtDXB46xL129AeEW+KYSFjRoqeLSSzg7E10aCfHpPhibSXIsMlr9wh3O
-        N3db4f3DHY4/Q4OW9rS+gMaPkcU3LLS9nYibewPiXc4rdHE+RadyYl75rNMdlixo0NKui3Y4PyEsDA+H
-        ok/Yt963+v5yj82K/Y6G90VWTezQ6zM8GrS0s9kGTcHpeafNLxiY7gy8Xz13F/doYufm2+UyriaJpvCG
-        lmjHBQ5aPJOS3R4QTb+xxzAB5lruRLjYXBmH+rhOLrNUJ3MN23gyFRhpe2MPtLJf1tkXFB8rRjNnZi55
-        qJYORI7Ka5F+c5A2leymrafMuucj04PsL9r/blJyrHWY04rlhqoU7P1cK6v0lencm6U8Necbib0K8tV1
-        Bwvr9W1bjpmuryeno1RUzVbIOR2qOTRocYE8pohR/VPTxkek2zBOOFeavF/hwGWQJJEHwAAAAABJRU5E
-        rkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACG0lEQVQ4T6XSb0gTcRzH8S9K
+        hfgkNFSWSkFEZXOmT/NBPYzACIQorPXHlRqGlPUoH/UgiFKq5QarqNVAuM1Zm3+aBTbW/jgfOMJlpnJ5
+        17r9cZtm2aPr97kmmQ9s0MGL393xfd8/jmRZ/i9Uc80F5UwdczxLmEVDVH31FRzxTyUGoumfQSm9HFgP
+        ZjCLBi3tax+CBim1PMrHllzZwCwatFR1ZRBORpI/vLPSt6FsYBYNWtJcHgCtmPju+RRZ7M8GZtGgJXWb
+        E06zR3OHhQXHauN8yub5EH/qCn194Bj70tUbEG6BbyphQYOWKi69hLMz0tJIiE/3wdhMkmOR0eoX7nC+
+        udsK7x/ucOwZGrS0p/UFNH6MLL5hoe3tRMzcGxDvcl6hi/MpOpUVx7/PdbrDcQsatLTroh3OTwgLw8Mh
+        6Qm7632r7y/3Vux3NLwvsmqih16f4dGgpZ3NNmgKTs87bX7BwHRnYH/1cXdxjyZ6br5dLuNqkmgKb2iJ
+        dlzgoMUzGbfbA6JpBXsNBfZruRPhYnNlDOpjOrnMUp3MNWzjyVRgpO2NPdDKvqyzLyg+Voxm1oySh+r4
+        gchReS3Sbw7SppLdtPWUWfd8ZHqQ/aL97ybjjrUOc1qx3FCVgr2fa2WVvjKde7OUp+Z8I7GtIF9dd7Cw
+        Xt+25Zjp+npyOkpF1WyFnNOhmkODFhfIY4oY1T81bXxEug3jyqo0lPcL4cBlkH5AnMoAAAAASUVORK5C
+        YII=
 </value>
   </data>
   <data name="icon_zoom_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1321,64 +1315,64 @@
   <data name="image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACAElEQVQ4T6XTT0iTYRzA8efk
-        Jbp0EOpQFy9drIMXVyhaEbWsjBUxTCmQOf8wojcYMWcmZKM/tsoKCXSXVtiqJdlaRmVeKjH7Y5pKUNvK
-        zD+DuS3X5rfnWaeObi98eZ8Xns/z4zm8AhDZlBVWg8X+pqYymSnDysQ+m61GnpTRo6zYY7WaU0tL6M7B
-        5vNQchG2XYbiNii6ALuugbETKl1w8iF0D4F7EJRRVug1rS6RSmG+BZY7YJebLj2HEw+g5dG/tVPW3Aue
-        YZj8Be9DoIyyYrvF0hBPJmnpGeD2YAj/KDz+JJPv4SD45PqehD0f4MUEjPyAr3OgjLJiS22tJZJIUNx8
-        mB2OOpz+Pt7JCWrjhJw2Pk36OzAPX2YgGIa5KCijrCiqrj46v7jI6kObWF+vR2er4JTHRWf/M3wfJxn6
-        NsvoVJSAhGkck9P/gDLKisKqqmMz8Tirdh8gt9zIWuMRNtZrFGqNbLWfYa/jChXtXZhdHqx3n9D+coTe
-        sTDKKCsKjMbjU7EYBaYOdA1dlGhu9HYvB88+xdTxGmv3GI6+ENffhLn5+TfeYAqfvFraSCs2GAzW7wsL
-        /x2ws/E+hlY/lc4BzDfeornHsXuDtPpnaeuPcvVVEmWUFetKS+0/5X0CkciyUkZZsSIvr2Zlfv7pTFJW
-        yCdHlitbs8yUycn6b/wLvnCph/venGUAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACBElEQVQ4T6XTT0jTUQDA8Xfy
+        El06CHWoi5cu1sGLKxStiFr2jxUxTCmQOf8wol8wYs5MyEZ/bJUVEugurbBVS7K1jMq8VGL2xzSVoLaV
+        lX8Gc1uuzW/vrVPgoa0HX37v9+N93uMdfgL4rxb9mEliT2NjmcyUZWVit81WLXfKaigrdlit5tTCArrT
+        sP4MlJyDTReguBWKzsK2y2DsgAoXHLsHXYPgHgBllBV6TatNpFKYr4PlJtjlovNP4OhdaL7/Z+6UNfWA
+        ZwgmfsCbECijrNhssdTHk0mau/u5MRDCPwIP3svkcygIPjm/LWH3W3g6DsNf4dMMKKOs2FBTY4kkEhQ3
+        HWCLoxanv5fX8gS1cFyeNvad9HtgFj5OQTAMM1FQRllRVFV1aHZ+nuX717G6To/OVs5xj4uOvsf43k0w
+        +HmakckoAQnTOCZP/wXKKCsKKysPT8XjLNu+l9xdRlYaD7K2TqNQa2Cj/SQ7HRcpb+vE7PJgvfWQtmfD
+        9IyGUUZZUWA0HpmMxSgwtaOr76REc6O3e9l36hGm9hdYu0Zx9Ia48jLMtQ8/8QZT+OTV0kZascZgsH6Z
+        m/trg60NdzC0+Klw9mO++grNPYbdG6TFP01rX5RLz5Moo6xYVVpq/ybvE4hEMkoZZcWSvLzqpfn5J7JJ
+        WSFHjixXtiLDlMlZ9A/79xC/Ab5wqYdFIGATAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="document--plus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACEklEQVQ4T4WSS0hUYRSAD5NF
-        gyA5mFJRMOBEmJSPRYM43SyChh70mAEXEkw+B73KyNjglBpCtKlNUSAlQdimTQQh2HI2bmbRohatJGtm
-        xAYf834fz7nM2ahzu/BtLv/33f8/9wfH9DQwzpmZm8TAf2i8NzUFd/x+uD05CWdsNgB+UWYwWSjgZjaL
-        66kUhhIJXI3H8XcspvElEEBaN0hYJMARrVZmKJ7LYZTEyPY2rkSj+GttDX+Gw/gjFMKPi4vID60dIiws
-        a4FbPp/gTlBgI5ncN/JqYQEFi93+mAAGbni9wnAqn8ct2n6lCO+Ej0POsHhwzeMRRtI0g1g6rRvhADkj
-        4sFVVRXUDAUSmYxuhAdLjioeXHa7hbFcsYgpmoNehP8OOWPiwcX+fsGTp0CG5qAXWacjkuMRDzpcLmG8
-        UCphlo5RKXJ/eRRblq5g3ctzy+ZZBU496QC40NMjeIsU4F1UirR87cK+jQk8NH/ij+H9UYB5E0B7d7fw
-        sEQXpUCB3ZEHAfry50uEgs5/A3jwzbG/JAfhnWkOGhUFzjscjI9vWol2sTvS+knBrsjdPcDrI0Hg56TV
-        Cqft9kfaXd0n0rukYusHm0bzqg2rntaF4HlNEF7UzLFvJOobrNZZCWgRgmfCg+Uj8S9ue9uJx1fO4gF/
-        bZidsgs0CWg2ms3j1U1Nz/SoctZ+N7iMEcP1w9/YIUw7Q/B728HeTjIAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACDUlEQVQ4T4WSS2hTURCGf2IV
+        g1BsqIqKQqARqUVbuzAU47WKYPCBjwS6KELUVoNNJSUaGm0rBXGjG0WhaBGkbtyIIIW6zKabLFzowlWx
+        mqTUUG3e7+nMJaeLaK4D3+Yy/3fnzDlwjY/ruCcmzjGD/6Ht8tgYLoZCuDA6iv0OByAfatzIlMv0u1Cg
+        5WyWouk0LaZS9D2Z1PkQDpP0MDYlEHRbjZupYpESHIyvrtJCIkHflpboayxGX6JRejs7S1LSx9jWBeeD
+        QYU3zYKVTOafkmczM+vYnM77DAScDQQUt7KlEv3h8RtJZBI5jvSqHE77/YqhHO8gmcsZSkQgvSqHUz6f
+        wpdnQTqfN5TIYqVX5XDC61XcLlYqlOU9GEnkdqRX5XBsYEDhL7Egz3swkizzN+lVOfR4PIqRcrVKBT5G
+        I8mV+WHqnDtJrU8PzlsnNex90AMc6e9XBCoskCkaSTo/9tL1lTu0aXr3D9PrbcC0Beju61PcrfJDKbOg
+        XnI1zH9+f5zRyP1rkDa+2PmTwxG8skyhTdNwyOUSgvLSqjxFvaTrnUa98Ut/gedbI5DaY7djn9N5TwRS
+        9ZJrcz7qeuPQ6Vh0UNPD1igeN0fwpHlK8mZm+w67fbKW10uOIzuRxYpIrvjwy6O0a+EAbQi1xCRTy4I3
+        gQ6z1Tqypb39kRFN7pbPJo85bjqz+ZNkAFjWAEPwe9vSE1Y8AAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="function" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABIElEQVQ4T6WTsU4CQRRFdwnE
-        EIkxKBL5BkKjDRQWFljQEwq0pCI2FFT8ABV+gB0dxMrEBAsTowmVxs5f8CvWc/GtWcdZDWGSk3nvvnl3
-        Zmd3gyiKgk0IwjD00UafG4q967Sxr3BMww2cQtXitQx6NM1gL23nWE87wYQFV/81q+4ajBHvHGqJvGum
-        ZdO6vhPUKd6DZj33hc0d03UvU2j6TqCGS1hAyXmEBvmD8X2hvhNcs0i4t95CewK9oVQD7foIA8dA38HS
-        OPvL4ITiC2gONJiHpilW7dwMFH+9hcQYEb9B2bQ+83uiHufSWtKTBnXyZ7j9Yfk7KSCJ1YgNPojFKxzB
-        PhRhF3ZgG/KwBTnIQgbC2KBCcgg6+sHaBpv8yur9BCINtCQt9llRAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABC0lEQVQ4T6XSPUpDQRiF4bkh
+        IsEgwb+gawg2pomFhUUs0gcLtbQSGwsrN5BKF2Bnp1gJAS0EUUil2LmFrOLmPZPvhmGYW5gMPJlvDsPJ
+        zY/L83whLsuylD6ejObUndKCNp5xiJbNqXulBed4xHqQJZUV3OIuypLiggGGkd1gPoHuNYtz6gk6eLNd
+        5zPbj6Fc38sDukh+hEu8YjPIZB/vZpanCu5NnPfwCf1Cszwu0Lt+4CrIRP+DkTmyzIsLDvBtu9Niv7ZM
+        s/bTYJ4WBOsGv2j6k3MX+JuOfhVn6SkICzr4wos/la+68asoGJsf7GEDa2hgFSuoYRlLqKKCrCjYwTb0
+        6Fv4X4Fe5pe7CSINtCR/xwMpAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="folder--minus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB3klEQVQ4T43SS0hUYRjG8Wfd
-        SlwEZbTOiBZJy6A2bdyUmzZhWRAIrSIiccpmmkZtYMqYUvNCMjJOacZAihhjF7qpUwZFRIYilcygTqdp
-        vIyXeXpf8TuLmA4e+PEe+N7/x1kcjNYBKl6HCuHepArTYaQWhofzUTLd60x2pPGYDsM+GF7+7mFutsuR
-        7kjjNR1ee2H41lL3uZrsdKQ70vhMh5dXYdSvzoS5Mt3hSHekqTcdnrth+FcSIWa/tznSHWn8psNQDYxA
-        9mc7FyabHC0nOihNYOgyEBN4csnWsDjVwsx48L+yP9o58cxFaRpEyaBLLhiotgUXJhqZ/nIzLz37FqsS
-        F7mWy1G6oLZ4dADoq1rXmPl6i9Ynf156Nvawkjr/LC1R97VDl+jZCUQv4G76c4BzH2rz0rP4gzPUOW1Z
-        1H0BhIFmuSQeKcBs/+4d7Cvevu5F2X7OvPPYrI/X+TZ8ijrHk0n2nkebAJokXiwv578iu7YxOVJj+yVf
-        9ip0gjoPDefYfQ73BCA/YvMVueRaAVJ3iosYlFB1H9nHxBuXLfXey1jLMerc259h6Cwi1WVygTxbxNbb
-        p/HYGvNxbtSdl55Fb5RSp+6ePIijGy0K5WVP5WG0+o/j6Wborjai8C+upHqE/vhN6AAAAABJRU5ErkJg
-        gg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB00lEQVQ4T43STUhUYRQG4Hfd
+        SlwIWrhOCReFS8E2bdqUGzfhT0IguAqRxCkdnUZrwDKm1ExJJsZJTRlIiWI0xTR11KCIyFCikhnU8TqO
+        P5M6x3M+ut8ixosXHs7ivO/hW1zMNkEJNqGU2U+o1OxhplGrp20/UXTAGmcka/Yw7dQctNlPibUeS5KR
+        rNnDpENzHkZe0kH4hSXJSNbsYaJBu3ew6qX9lW5LkpGs2cOYXXPthzwU/9VpSTKSNXsYqdWa43+6aGe5
+        zdLfUDdJduQOEGB4d1tr2f3ZQbFF97Hiv7to6b2NJMsuvLXxgTc1mntnqZWi3x4mJbsfgWp2iw4TCZK8
+        9DCYBwxVK62x74/I+OJKSnYLr8rV3NrbI8lLDz2sPxPwV+Fp9GszrX9qTEp2wd4baq4YBkmeAV6gnY8E
+        fSlYG84+Q0NZGcp4QS6tztVrxuf79NF7Xc3FcJgGKtHJgDYu7xYV0f98Z9MpPFOrbfArPniK1bw4naC+
+        m3jOAP6Z2uv4yN0URJ5knSY3F0XflfMUmrJpkXkHBToK1cwZjpGnAr6aAj7A3ymW9rgMr40FJ63P2pOS
+        nf/BZTUlW5KPq/+6SGXnyi/hmesaRk9CstIBkHoErqR6hFnddsMAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="ui-separator" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAKklEQVQ4T2P4//8/AyWYIs0g
-        i0cNoEYYMDExVVCCR2OBGrFASUYaHHkBAGwz1S9OnHZ7AAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAPUlEQVQ4T6XMoQ0AQAzDwCpT
+        //bpAgZvFRwx8LQ9wWhgNDAaGA2MBkZjkrwLvBoYDYwGRgOjgdHAaGD811lsM9UvSFbKxAAAAABJRU5E
+        rkJggg==
 </value>
   </data>
   <data name="icon_zoomselect_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1399,18 +1393,17 @@
   <data name="plus-circle" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACY0lEQVQ4T6WPX0hTcRTHT3eW
-        C93W3dTVlbLdoQbTejCMKDP/lJBs+CewJBnUY3vsvSACDXrpoYfCyig1IxekQWRei4WTscK2NbQ9bLt7
-        GMzXe9nL5XR+V9u1KHroBx/4/s453+/v/AAR4X/QzfDEAfCsCmCaeF4twEx1gJgkQlswHdB7bIbNkkf3
-        /hbgNb+slY6EO2Vfyq8My1e1i4Tvu185vNwhl1OPArx/C/Bag66ob92vDqxfQd83P7Yv9+kw3b92GXvX
-        RlTL7MEoBXh/3WDCIZRPCVJv8pLa8+UCnv08hMc/nKPlNg/TrMZ6Z74Oqbsm90lAHuMLD+2BJqlN7oqc
-        x7ZPPp2Wd92lAKZ/1jtWBrD+basM5DEC7vNTpyP9SutiDzbPn9JpmD2GhUIBs9ksVo3Xo/2BW6fmUSO6
-        Xx1VgDxGwL09oc7IoOZ5fRKLxSJmMhlMJBKYTCYxlUphOp3GXC6H+Xwe+cci1s40aUAeI+CuLdQe7tPE
-        YAvG43GMxWJ/NG9sbCA/KaJz9pAG5DEC7linPO9PKPY5N/LT4iZPxdLLTJfqc6SDLgXIYwSMWQKOaVGu
-        XmpAfpEGGPOisTbpUp16uyecMpDHCLhVKZhu2yTnUqNqD9MWYTIsiPqf9bVJ6zXCtlCncmMWCchjBNys
-        ALhe4S0btUb5kEu1r1LIKhnebME0Yft4QDWNWqJsFshjBACdOhPA4E4vd80smccdsjW0X+HjLo3BNKux
-        HpvRZ+lsDyiju5PwgLCjC7q5GzDMvYARLqTDNKuxHkAzsZco2x7AUaGSqCGEf8AeYrMcC/gB3xr3gK0n
-        sEUAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACVUlEQVQ4T6WOX0hTcRTHf10t
+        F7qtuzlXk7LdoQZqPRhGlJl/Skg2/BNYkgzqsT32XhCBBr300ENhZZQuoy1Ig8i8FjecjBW2raHtwXn3
+        IGyv97KXy+mc69o1MHrowOfy5Zzv93t/DAD+i63PMztjL6oZCyIvHS424wggU4hUhHRAv5GHvJjZqcBr
+        el0rHot0yb60XxmRr2uXEd9Pv3J0qVOuwBt5/lbgtYTdMd+aXx1cuwa+H37oWOrXIT2wehX6VkdVc+hw
+        jLx/FkzaXRXTLrEvdUXt/XYJzn8dhpOfLuBpa0jTjm7nvg+re6YOiJTBU7HgsS3QLLbL3dGL0P7Fp9P6
+        oUcP05D+ve9cHoT6920yZfBULHjIT5+NDihtC73QMndGpyF0AnK5HGxsbED1RD3YHnl0ap40gufNcYUy
+        RsGDfVJXdEhrensaCoUCZDIZSCaTkEqlIJ1Ow/r6OmSzWdjc3AT+qQC1M80aZYyC+1apI9KvCeFWSCQS
+        EI/Hdwzn83ngpwRwho5olDEK7lmmmz6eUmyzHuCDwhbPhVKYdGk/i4TdCmWMgnFzwB4UZMdiA/ALaCDm
+        BOPZqEt7ZO+kU6aMUXCnylV21yo6FxtVWwRfEUHjvGA8G7W+Q6zzdSo3bhYpYxTcrmTsZqW3fMwS4yW3
+        alvBkhUMvCtCGrF+PqSWjZlj5KWMUUBTV8bY0G4vd8MkmibsskU6qPAJt0aQph3dyKN7cbYXlCNOpIm5
+        dnWzHu4WG+FesVFO0iFNO7ox1oLsp8z2Ag6pQmoQ1z+gH5GXAwD2C98a94C4gBufAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_search" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1453,17 +1446,17 @@
   <data name="scissors-blue" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        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
 </value>
   </data>
   <data name="icon_zoomselect" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1487,78 +1480,77 @@
   <data name="sql-join-right" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC50lEQVQ4T2P4//8/AyWYIs0g
-        ixn0i7czGJbuZDAq28VnXL7bAoj9gTgSRHvUXghMbnu9MKXtzX0g/gWl5yW1vNKIrH7I4FdwFW6AnEfL
-        wdiVxx5Pe/j6247Xn36eW7j95ZGougfvY5oeXG5f8vr82gNfHs3e9OFO7axXz6NrHz6PqLofBDOA37Vp
-        f/zVxx/XPHrzdd+DV193Hb709kRA0aVPfctfPVqw/cOVpJ676xfv+nh12Z5P15bv/XSjd9mru775l557
-        ZJ3XYNAt3Gq7+ND9afdffd1958WX7UAD9mS1nbuf3XH9xdLdn66BcMuSZ0crZj/eBzTg+pJdH6+AxLI7
-        bjy3ijkwj0Erb1PE9SeftlyD4nsvv+43Ct3ysWvJ0+sT17450r7s1e6eVa8OhTVf29S98vW+pkUvtwHF
-        djXPf3xBx2/TfQb17PVpQJsPXnjwYT0I33j6aZeK++o/ncteHqqe+2wTCPesen3Au+ri+p6Vrw/CxDqX
-        vzyi4rb6F4Ny+uq4s/febTh55+2a7edfzNlw6ul0de/1H0un3DtVMefpZhBuW/biYHDD5a1Am/fDxEqn
-        3j+p5LL2PoN88nK3SVuuzdp4+umcnk03m2bsutvll3/4Vkjp+UfV855tB+HCaff3Z/Tf3lM7//nOsllP
-        N4PEQksvPFD33DGPQTp+sZBO9qqihfvvTu7dfLO9ac3Vhp7Vt1aahJ34nN/34HLTomdHA+subgfSh4pn
-        PAa5aHte38PzRiEnn+sFHNNg4NUPZBB0KVdXS1taWr7g5KR5++5OX3Pi8YKiydf3WsZe++SUdfVWdt/9
-        M21LXxwvnfb0VGzdw4fWsTdfaDkvCpLUSmMAAWYgFmGT1DHmdyqLEw6ZWiQcPrtGOHR6oYRDXZZlxLnV
-        DknPHjgmP//lkPT0oXnIsdXiKiFuID1QvQxMQAYXVEAKSEsCsSgQCwAxHxQLAmkxqBxIDUgzSA8T5ZmJ
-        kqwM0gsAucRqK8NQIioAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC6UlEQVQ4T2P4//8/RRirICmY
+        Qb94O4Nh6U4Go7JdfMbluy2A2B+II0G0R+2FwOS21wtT2t7cB+JfUHpeUssrjcjqhwx+BVfhBsh5tByM
+        XXns8bSHr7/teP3p57mF218eiap78D6m6cHl9iWvz6898OXR7E0f7tTOevU8uvbh84iq+0EwA/hdm/bH
+        X338cc2jN1/3PXj1ddfhS29PBBRd+tS3/NWjBds/XEnqubt+8a6PV5ft+XRt+d5PN3qXvbrrm3/puUfW
+        eQ0G3cKttosP3Z92/9XX3XdefNkONGBPVtu5+9kd118s3f3pGgi3LHl2tGL2431AA64v2fXxCkgsu+PG
+        c6uYA/MYtPI2RVx/8mnLNSi+9/LrfqPQLR+7ljy9PnHtmyPty17t7ln16lBY87VN3Stf72ta9HIbUGxX
+        8/zHF3T8Nt1nUM9enwa0+eCFBx/Wg/CNp592qbiv/tO57OWh6rnPNoFwz6rXB7yrLq7vWfn6IEysc/nL
+        Iypuq38xKKevjjt7792Gk3fertl+/sWcDaeeTlf3Xv+xdMq9UxVznm4G4bZlLw4GN1zeCrR5P0ysdOr9
+        k0oua+8zyCcvd5u05dqsjaefzunZdLNpxq67XX75h2+FlJ5/VD3v2XYQLpx2f39G/+09tfOf7yyb9XQz
+        SCy09MIDdc8d8xik4xcL6WSvKlq4/+7k3s0325vWXG3oWX1rpUnYic/5fQ8uNy16djSw7uJ2IH2oeMZj
+        kO3b8/oenjcKOflcL+CYBgOvfiCDoEu5ulra0tLyBScnzdt3d/qaE48XFE2+vtcy9tonp6yrt7L77p9p
+        W/rieOm0p6di6x4+tI69+ULLeVGQpFYaAwgwA7EIm6SOMb9TWZxwyNQi4fDZNcKh0wslHOqyLCPOrXZI
+        evbAMfn5L4ekpw/NQ46tFlcJcQPpgeplYAJiLqiAFBBLArEoEAsAMR8UCwKxGBCD5EBqQGpBepiwZhBS
+        MFZB4vF/BgC5xGorvamwnQAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="drive-download" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        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
 </value>
   </data>
   <data name="cross-script" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACFElEQVQ4T6WTT0iTcRjHn3D6
-        5nJbr+2dZo3Ci0KE6EC9rpNEl52yS4HFhKyItJIKCwnBlVYUFh0a2b95yYJRHdYunYJJZBZEeogxhJAu
-        ecnSt88zt5cF0WWDz37P832e5/v7A6/Yti3lUNawbpw3SIjIlEgXZArcfII2CXfhHjwE+nZRH4JnEHUM
-        tAiZ3wMD9nJf39pMe3tO8/slBg9ERhNVVe/QXz8S2QsbHIM4jRBlp8zbjo7ct54eO9vdvTIdCHziBKEp
-        rzeebm5eoJ6kb4duiEH+9Pk/NdBj3qF5QiQGmZlw+PvnSGT1ZVNTNt3SkkV7jlm99v7PQK7TMIbROCap
-        1tYfqVBo5XZ19Ry5XANdlb9OcAmhyLCINcIjJRoaFpONjT/HDWM27vd/HausnKUmF2CwgHOFonCewpDI
-        jceWlUsHg6sxw5i7KHIY7ektt3ue9cW5fxmcRFROi/ROeDzzmbo6e9Lny51FYkh06AzGMZfrI+tIP/mp
-        0kc8RnKc1z3Bvd9b1q83prlMnMTUVGM9oQ6gDcMresM641whSgJX4253bqG21h6sqPjQy0NG0Iu/ToKj
-        632XYfSIiMsxqKdwiN2/mObadE3NEvGVrSXDpWHbem9/l0ibY4C2ncLBA5jsF0kFRPag7QRC8YEHNoMF
-        24IinbtF9pUaeCn4QTdWdFAHNsFGMAqr5tprwhbHoJzP+Q95lHpGrVHH8wAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACCUlEQVQ4T6WQT0iTYRyAf+H0
+        y+W2Pts3zRqFF4UIsYF2XSeJLjtllwKLCVkSaSUVFhKCK60oLDo0sn/zkgWjOqxdOgWfRGZBpIcYH0FE
+        l7xk6dfzi+1LQYLqhWfv+/v3vPtecV33v1gx+Tf8+smIyLhIG9hFrtwnNwY34CbcAfq2UOuHh5D0BFoE
+        +0dvrzvX1bU42dLiaHxrieC2yFCmouIl+Wd3RXbCKk+QpgGSNNovWludTx0dbqG9fX4iEnmLIDYeDKbz
+        jY2z1LP0bdILEfz+BBXoLddpHhVJgT0Zj395l0gsPGloKOSbmgrkHiGr1d4/CeQSDCMaQZJrbv6ai8Xm
+        r1VWThPLRdBdWSY4S1BiQMQa5JEydXUfs/X130YMYyodDn8YLi+foianoa+IJyglTkG/yOV7luXko9GF
+        lGFMnxHZT+7BVb9/hv3xyWLvMsERAuWYSOdoIDBj19S4Y6GQc4IUQ6JDxxGnfL437IM9xEfBExwiOMzr
+        dvPdryzr+3PTnOOcRWqqWG/TAXID8JTeuM54giQBXEj7/c5sdbXbV1b2upOHTJAvre1wEOg7B0MHRHye
+        oJbCPm5/b5qLE1VVnzmfX69TK6xtQL2njaMnYG2ksHcPkt0iuYjIDnKbgaOEIABrwYINUf7QVpFdSwVB
+        CINerOigDqyB1WAUd42114R1nuDfceUneZR6RqCIHXQAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="sql" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABE0lEQVQ4T82Tv2rCUBjFb+ji
-        IF1KKfgATtJBtFOW6gOIi2hBEAJm8QncpHXxBRwEB0cVRHBx0Uknh76CD+AzpOeEc+EmSJd06IUf5/tz
-        vi83hJgoikwWMg3zwf9gged5PliDqdRAX8Cn8jm0CXhGqtHfAobmDWiDkmLWxmACnkBd9VcOOH7G8YId
-        CNTsSFnrKn6Q58Pp2The8A72oCYDa8ztgnSe6MXX0DWPUuaMe85CN0/0aLbXHyA+aYjad16BufW5cZkL
-        LsaYCjRkrKEZdIE6v0ZD9ap69ISa4ay5grM0gBbAG9iq9g0dqr5UjTNkxQU58AieZeICy5eWF1M9ejnD
-        2V9PHt0DuAH/rjPLn/gnP9MPy8pUmKBE2kMAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABEUlEQVQ4T6XSPUoDQRjG8Vls
+        UoQ0IgEPkCqkELVKox5A0kgUBCFgGk9gJ2rjBVIELCxVkICNjVZaWXgFD+AZ1v+zPAOTOIiLA7+d933m
+        g12SUJblv2TDOrJhHdmwjlAURR/3mHhW1sa5+2sMoHEGZbKH6oIHDNF1rewSV1jGDpT3kO5XXV3wiJGD
+        fc/KDl0vuT9wn9bVBVt4wnYM3ccLFvu5tbhBr/niWb3qI9eL/dyaHvH1T/DqWvOxa32C+rgvrdf0eA8h
+        rDOPVXthihty/Rq7zjdQ7cfYZ3Q2fOLN8wir2MTM2QdOofzWWXSH0EALK9Cm1AV0eSfJRHt1Rmd/HU08
+        4wt9BT9G7u9ZRzb8uzJ8A8vKVJj1/8sZAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="gear" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACHElEQVQ4T6WQT4gScRTHf66K
-        iB30YlEpEcoSaiwjhFMHYWGR1IP/7uEpIjoFQlEdFmIJOhRrpy4t1N538ZRtC5vMgiPoOpIt2WYybot3
-        Cby83nfIYRaCDg18eI/v+36/MyqISPwPRjidTotsNivy+bwoFArGLJVKMnP7D7L1Bi8yyJ4qyOVy19l4
-        h+cFzNlsRtPplKwaPH8tyGQyNyqVyovJZELlcvkhm+4eH48JYIeGGzzwnvqCVColmHvD4ZBUtUnjsU61
-        Wu2rrusEsA8GA+MGD7zImD9BlmWRTCYvFovFJwcHHep02nR09I1Gox8G2KHhBg+8yJgFiUQiycJ9sLHx
-        ZtDrabS5+a4fjUZfAezQcJv7kDELJEmqtFoq7e5+pP19hbrdLsViV9fsdrsA2KHhBg+8yJgFkUjkQaPR
-        oHq9Tpia9pmWlqRVm80mAHZoVg8yZkE4HF4JhUKPwPp69Xu73aPt7Q/tePzaY4AdGm5zHzJmQTAYFIFA
-        4JIkxZ8rSot2dj7R4aFOJye/DLBDww0eeJExC/x+v2BWFaVDW1vvaW+vRdXq62Gz2SOAHRpu8MCLjFng
-        8/kEc3N5eeWtqn6hxcUrL71e71NF0TigEXZouMEDLzJmgeDH4XAIt9ud9ng8ay6X6zJmv/+T/9ARWTV4
-        4MVjLYBylokwceB0Om9x0TOAfa7zjDHn8E5rwQILZxg/c/4f4EXwLqDgN4SU6ia8nlT3AAAAAElFTkSu
-        QmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACFklEQVQ4T6WQT2iScRjHf05F
+        xA56sVEpI5QRaoxXGL51EAZDph78dw9PEdEpEIrqMIgRdFjMnXZpULtveMrWYMk78BV0vpKNbJm8ruFd
+        Ai9Pv+9L/nijoMOEj7+H7/N5voKMiC6E8ZVMJlk6nWbZbJblcjnjLRQKMufub2TzDi5u/irIZDK3uHCP
+        v1fxTiYTGo/HZM7g/LMglUrdLpVK66PRiIrF4mMu3T87GxLAjAw7OHD/KEgkEuBBv98nVa3TcKhTpVL5
+        ous6Acy9Xs/YwYGLG1EgyzKLx+PX8vn8s+PjFrVaTTo9/UqDwXcDzMiwgwMXN6IgFovFefAQbG+/7nU6
+        Gu3svO2Gw+FNgBkZdlMPN6JAkqRSo6HSwcEHOjpSqN1uUyRyc81qtTKAGRl2cODiRhSEQqFHtVqNqtUq
+        4dW0T7SwIK1aLBYGMCMzO7gRBcFgcDkQCDwBGxvlb81mh/b23jej0cWnADMy7KYebkSB3+9nPp9vTpKi
+        LxWlQfv7H+nkRKfz858GmJFhBwcubkSB1+sFq4rSot3dd3R42KByeatfr3cIYEaGHRy4uBEFHo8HrCwt
+        Lb9R1c80P3/jldvtfq4oGj/QCDMy7ODAxY0owMdmszGn05l0uVxrDofjOt5u9wf/QwdkzuDAxcdcgOQy
+        J8SJArvdfocfvQCYpzknwpnl2MwFM5xLHC/nyn/AD8GdISL2C4SU6iawP8yWAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_print_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1583,37 +1575,37 @@
   <data name="minus-circle" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACC0lEQVQ4T6WSP2gTYRjGP5JA
-        EyhNc0M8SotbAxU7pNDsNRA6hLQIpXiVzi0d3RVEaAUXBwexYgT7T9EKcfHfWQlSJJfmUFAhZOgJRocM
-        yh1ZjtfnCXq0pY2DgR+8933v87v3u3xKRNT/0AnfV0o9ABtgU6mBLaWWwBoo/4H1EvfYw15mmD0qyD+O
-        xcxaJuP8mJtzfy0u+j8XFvzvhuHujY873IMgf5Ig/7S/32oahvdtfl4cwzgE177Oznrb8bgFQf7QBEWO
-        Fo2a+zMz3pfpaflUKBzL56kpqRcK3npPj8lMcIS7ON+7dNqxJyfl/cREV/ZyOXk1MuIwEwhuK7X+IZdz
-        zUxG/vI8nZbtVErWBgflXjIpdzStA+tSKuUyEwhu4Wvj7f6LsTFpt9vSaDSkWq2KbdtSr9el2WxKq9Xq
-        UEwk5NHQkM9MILiJByub9Z8ND0utVpNKpXJsmIItCJ7ous9MILiBcd6MjroljLiBhm6UKNA0l5lAsMKL
-        k0zu7+B8r9HwL4qxmMNMILiGv+R6OGzu6Lq3iyl2ITmJl/G4txIKmcwEgqu4lpdxOZYjEausaZ4NiQ3J
-        Ud4ivBwOW+xlJhCgVqfBeWxcgn01GnXKfX3ux0TCJ6y5xj32sJe/g4IInk+BMwNKncsqdeWCUg8v4ksT
-        1lzjHnrOAh1EDgpCWOgFSYC+rvBF7A1R8BuYvt7nXvKiFAAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACBklEQVQ4T6WSTWgTURSFL0mg
+        CZSmmcU4lBZ3DVTsIoVmXwOhi5IWoRSn0nVLl+4VRGiFbrpwIVaM0B9raSvEjX9jJUiRTJpBQYWQRUcw
+        ushCmSGb4XpP0EcraVw48A133j3nvJ95xMz/Rev1kIjWhS3hEVHfNtGisCEUf4N6ET1ooIWnXcDEbixm
+        VdJp9/vsrPdzYSH4MT8ffDNN72h01EUPmrMCJp709tp10/S/zs2xa5qnwNiXmRl/Px63oT0VkMfSolHr
+        eHra/zw1xR9zubZ8mpzkai7nb3Z1WfCogPuyv7eplOuMj/O7sbGOHGWz/HJoyIVHBdwl2nyfzXpWOs1/
+        eJZK8X4yyRv9/fxA1/meprVAXUgmPXhUwB05aZk9eD4yws1mk2u1GpfLZXYch6vVKtfrdW40Gi3yiQTv
+        DAwE8KiAVfmwM5ng6eAgVyoVLpVKbc1gWwL2DCOARwWsyHJeDw97BVnilgg6URD2NM2DRwUs4+Lo+vGB
+        7O+VCP5FPhZz4VEBt+SX3A6HrQPD8A9lFYciOosX8bi/HApZ8KiAm3IprsvlWIpE7KKm+Y6EOCL+mzdi
+        XgqHbWjhUQF4zguXpXFN0teiUbfY0+N9SCQCgBpj6EEDLZ6TARHhnHChj+hShujGFaLHV+WkAWqMoSea
+        i4IBz8mAkNAt6ILoOoKJoA0xM/0CmL7e56qYTa4AAAAASUVORK5CYII=
 </value>
   </data>
   <data name="globe--plus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADV0lEQVQ4T3WPf1DTdRzG327K
-        5WnY4RWnZ51pU0AvuXUlanJNVDDvILs8y5MpWaDmxWkCd96pSQgxmGBGOgc7ajBtuo7MdfxQ+wM1xmAT
-        227MpjOSTVwEDLG1cI/vz+KuP7y+d697Pt/353me7/tLkn0/k6TIStLPfiVp2W9PSVX9q6UVPhVzjmmb
-        UFV0Lu7ZJ/zRHPPvQRQUu+fypWZpbZ+97MofAYMzGDrvDka6R8ZDjZ6HgTUGn13cC9+TBYWWuTMO2Zvy
-        f+jznXUNoSs4jkbnCLS2IVy7H4IrDLj+Bo5aB33CJ2H/fxvkmadKdrXq8ptu+cvb/Wj1h7gggkbHEEzu
-        INoHQugcHkfnGHDtAVDa7vMLv0Tk8sxEk7YY0pP2Nzu3fnsTO8578bX7AYov38WBS3dxuncUPw0CB80e
-        6Hn+3T3g3O//QFbwo1PkJm3Wc8GGE18o62xDGToX1tT3Ikvfi01GD7JNt7GzyYst9TeQedyCqp4w9nPb
-        +6Y72Mx+kWOIKL28eY/5XlhR48CSqm6knHRghdaB1FonXq+xQ2nyoejqI+xuG0NqlQ3JFVa8edIWFjmG
-        CxSHLSmHLkbSdP2QHbEgobIbiZU2JKltSFRZIVfZkFrtwjumMTy/rwVyNZdXdkREjuGCNz5tWaGyhl8s
-        7sBLZV2QcWDhBAmsspIOvFbtwdrGMbyQ34L1JmCDfiAscgwXpB35clFR8/CC8htIqPgFi486kFzlgPyY
-        M0qyugdLj3mwpKQHM7U5iDWuxizdtpDIMVyQoV4Xl62/+Qqb5MzymttYpfEivdaLjLo7WKv1QnHCg1dL
-        7Yg7k4YP/ixAzKnkECk/Xkd7s7gg86up9JamIeFgZ2CVxo/M+gG8Z7iPbcYAtp8NRHV+/Q7M0C5HvEGB
-        jYFc0HHZINXNtFFtnIZo0zdE7zbMm5xtbJWXOQLKM8P4qCmITy6MotA8GtXntCuh8L/9BFTzTBevwE98
-        Ev9KyTzK+b5hTuFVd5a2f3iXaSRccOFhROic6py/pnz+cohKZYOL+1aCKmO7oqhjeQMiKfMsk0hPx6fQ
-        stwPSWnUUW5zG+W1WqIq3sX8wHTXbO8i0OHp12n+ZCmXRL8vYaZNlMxm/X92xugob8p12h2jncjRY8Vf
-        HJIr03vAAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADUklEQVQ4T32PbUyTZxSGj1TJ
+        jA4XjBKNW5yuDtAoqVGZTrKKCmoCumxxGqmyTfArkm0CiYk6GYIUKjiH2BUaXKFz1S7M2YUPt/1gOkqh
+        FW1Tqp11TFqxY0AR13Ws987TmPjDxDe5cvKc576vPC9FHfqVogotJPnsDklKf39BouxfKyn3KplLTNuT
+        qYzsxT3nRD7SY54Kilxz+VK9orbPVvrLn369IxC87AqEu0fGg43ux/51eq9N3Ivcs4IC89xpx2xNed/3
+        eS86h9AVGEejYwQa6xCuPwzCGQKc/wCnLINekRP5p4Jc0+Sofa3avKbffGXtPrT6giwIo9E+BKMrgPaB
+        IDqHx9E5Blx/BJS0e30iH+nlmogm7NCnJR5uduz85jb2XPbgvOsRin66jyM/3sfXvaP4eRA4anJDx/tv
+        HwCX/vgX0vwfHKI3YbuOBVtqPlfUWYfStU6sq+9Fpq4XWw1uZBnvYm+TBzvqbyLjjBmVPSEcZtv7xnvY
+        znnRY4goraz5I9ODkLzajiWV3Ug+Z8cqjR0ptQ68WW2DwuhF4bX/cKBtDCmVViSVW7DxnDUkegwL5MfN
+        yceuhlO1/ZCeMCO+ohsJFVYkqqxIUFogU1qRUuXEO8YxvHyoBTIVyys6wqLHsOCtT1tWKS2hV4s68Fpp
+        F6RceP0J8Yy0uAPLq9xY3ziGV/JasMkIbNENhESPYUHqiS8WFjYPLyi7ifjyW1h0yo6kSjtkpx0RklQ9
+        WHHajSXFPZiuyUaMYS1maXcFRY9hQbpqQ2yW7vZSDsmYldV3sUbtQVqtB+l197Be44G8xo1lJTbEXkjF
+        h3/lI/rLpCApDm6gjzNZkHF2Mm1WN8Qf7fSvUfuQUT+AbfqH2GXw44OL/sicX78H0zQrEaeX411/DuiM
+        dJDqplupNlZNtPUrovca5k3MMrTKSu1+xYVh7G8K4JMroygwjUbmTM1qyH1vPwNVv9TFT+AvLpF/pXge
+        ZX/XMKfgmitT0z+8zzgSyr/yOCzmnKrsvyedXBykEungor7VoIqYrgiqGH4BkYSZwSTQi3HJ9EbOblIY
+        tJTT3Ea5rebIFGexPzLVOduzEHR86g2aP1HCEtGnKGYKIySzn8veaC3lTrpBB6I1fOYe0f/FXxySylY+
+        MQAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="icon_pandown_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1649,14 +1641,13 @@
   <data name="server" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABaUlEQVQ4T42SMWvCUBRGr+LU
-        jqVQujh1dtDFxSVDBhFB9DdokCAigpNDBscundw7+A8cRDAEFKQiySAYXESy+Ceu95Z3H0IerYGTId+5
-        ZwogIjSbzV9arVaNaP9DTXy+BX41Gg2hc71eMUkSI7yR2xFfB+r1Oiicy+WCcRwb4Y08R3wdqFaroOj6
-        vo/r9doIb+R1xdcB27ZB4Z7PZzydTkZ4I88VXwcsywJF73g84n6/N8IbeT3xdaBSqYCiP5/PcbFYGOGN
-        vL74OlAul0ExOBwOGIahEd7IG4ivA6VSCRTD3W6HQRCkmE6nyBt5Q/F1oFAogGK03W5xtVqliKIIeSNv
-        JL4O5PN5UIw3mw0ul0sjvJE3Fl8HstksKGb0G+NfkDcTXwcymQzkcjnmy3VddBwnRfGniLyxwy7f6ADQ
-        Q9UPGj4nkwl6nmeEN3bY5Zv7wAsV2zR8PwK5Hbp/vQ880Yc34v1B2H3mwA1XqPmpzb5U7wAAAABJRU5E
-        rkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABVUlEQVQ4T42SsWrCUBSGE3Fq
+        x1IoXZw6O+ji4pLBIUggxGfQUEIppdCpQwbHLp2yd+gbZAiBSEBBGsQMQoJLkCy+xOn9hXMRcmkNfFn+
+        73zT1YhIcxznxGQyGQum/zBmH7enn23bzOx4PFJd10qwwWFfBizLYtzD4UBlWSrBBod9GTBNk3lcLBa0
+        XC6VYIPDvgyMRiPGq6qK9vu9Emxw2JcBwzCYp6IoaLPZKMEGh30ZGA6HzHMYhhRFkRJscNiXgcFgwLzs
+        djvabrdKsMFhXwb6/T7zmmUZpWnaIAgCwgaHfRnodrvM23q9piRJGuR5TtjgsC8DnU6HeV+tVhTHsRJs
+        cNiXgVarxXyLp0p/AYd9GdB1XWu32+DT8zxyXbdB76dH2ODAxY0M4BPFBzF8zOdz8n1fCTY4cHFzHrgR
+        xakYvi5BuDNxc3seuBLcCe4vBO41EWm/V6j5qYaWq90AAAAASUVORK5CYII=
 </value>
   </data>
   <data name="icon_buffer_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1671,24 +1662,24 @@
   <data name="grid" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAApklEQVQ4T6WTMQrCQBBFZ0+Q
-        NljkrjYpU3oKEUFQhBQpAjZewAt4jXX+kpG/3V8S+PAW/r6dKWI5Z9sTSykhR8+5IeiXh0Nw2UQ4y8yC
-        KwlkZsHNBZFRYHSrFe40gcw8wZMEMrNgdkFkEhjdaoWFJpCZJ1hJIDMLXi6InARGt1rhTRPIXCbYvs+f
-        zGQOweCXH55vQ9AfQtD5ofccGoJ+VwR7fmXc/QGbydmsomqW4QAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAkElEQVQ4T6WMMQrCQBREd0+Q
+        VixyVxtLS08hEggkCBYWgo0X8AJeY/0TJjDb7cSFt/OKz0ullL9IOWdwCC4GuK8CV67lGhi4lmtgFI4N
+        DqrAxLVcAzeu5Rq4C6cGB1XgwbVcA0+u5Rp4CecGB1XgzbV8CfB9uHjNvgb6YA6+Brjv10AX7IK9Ae67
+        JYBvOyX9AJvJ2axM6V30AAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="ruler" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB3UlEQVQ4T2PYn8jCsD+JheFA
-        EksGEHdDcQZIbG0EM0gcJw3SywAiQIqAdM/fm8v+/7qy8D+IjU8jzGCwAfsSWTJBGpaFMF98sLnh/9dT
-        0//vTWQ5AxJbE8E8Bx8N0suwPZZlyu9ri/9fnej+/8fFef8/n5gKZ9/fWAcWw0aD9ID0MgBtmf92f8//
-        baUm/+9tqP3/8eik/6dbrP4/29aMF4P0gPQyzAtgap7lx7QRyLn/9fSM/+8P9YMk7oPECGGQXgagIjCe
-        5MY0787aqv8gkzdHM88AiU30ZMSLQWoYloYwM2yIAuPZIOe/2tP5H8QGic30xW8I2IBOeyYYXnhzZdn/
-        FzvbwH4DYlD4MMzAYwjYgJVhzDC8COR8UOABxRYhiTNM98HuErABjZaMMLz0+tKi/0+AaWFZKNNSIGaA
-        YS0xRgZ0oCrMyOCrDhRfHMwEwytfAZ3/CBiVQLGVMHFNUUzNKIaJsTEwVBgxgvDqK4vy/z9YV/1/rj/T
-        eiBm0CCkGWYSyDkTPBn3vAa64NmWxv8gNkiMWCAPVGiUasywsM2Z4TgIA9nzgGLKQCwHxBJALAzEfEDM
-        CcSsQAwMPQQQADIloRikWAyIRYBYCIj5gZgHiLmAmB2qmRlIw50HAIdyTYaOb/frAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABxUlEQVQ4T42SWShEYRTHz10Q
+        CVkmXniQLI944cWDImUrSyIPoxRPSpGIiJQoS2Rso6GZmuwRKYyUCC/KkpKZpEkkSUqk45zbXLvLqd/9
+        zv3f7//v3O9esOllsJXIsF4ilxHtLspYmyqQWP91Za9ycd10vJxY8OnAhNxrGT8FrOnlcjZYcqV9x3wj
+        Puz046pe3mNtskAa1lrZC0vFcu/z0Tgedqfi474R77f73nr7XMOvK3vYC5Q2emPrwMWqeDybrce7zR7c
+        bUlE52KzJuxhLxizxebBTHGObuwPuwa83ejkB3bW/oK9QI1CT4poPJ2qVZLniyQDa91pgia8B8y5EswW
+        Kgzx+Fcrbcg9awMZ2iFKQFuSqGI6sVbj5XKr8m4Enw8YNEKUAGu+pDLG4/MBcf9Bh/70n0OUgKYEQcV8
+        bK7EC/oXLHmimQCVGJ0AXysiQICMSNLHc0QV6xWNf06fkntVjw76bv5UOneAmliBmTgYq0DHdB2OZIkz
+        BET9ZVaLx+lKE1auaQLnQhNyz9p/K4yILY0DU2sybDHUG0kLJ0KJYCKA8CE8CTeCTu+9/IgQF7xZRwQS
+        /oQv4U14ER4EmyXCNR7AK4dyTYa1Y09BAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_print" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1736,18 +1727,18 @@
   <data name="question" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        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
+        BI8SEnFZTeEGAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_tasks_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1763,20 +1754,20 @@
   <data name="map--plus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC6klEQVQ4T53Rf0zUdRzH8fdq
-        1srNWv2R6eZy8x9Hg9babKRTNmd/FG5l9Idbru2Cw8PjBII7EfAHKjI8ZcJR14DidjQOhniB2ImAml2C
-        h07lPH+gB3IHIpMyTpCJPP186s/Wan63xz7/vJ7f7fv9SMqOHclK2jNI/qyoSGRDYaGRZ3h0p4h8kp+f
-        PqdeUH+2gJbevZztryQ4UE9g4ATuK/3s6YlgOxMlyxfF3BrFdCSK3utOEVlvtZpm5+b4viuPjgE7PREn
-        vSEnE9NdXJ28TsNojCJ/lOIgFATA5I2i97pTRD7KycmYefIEpy+LttA+um6X47tg5+7kUcan/Jz7fYiy
-        82FKb8DOy7CldRi9150i8qHFYp6enaWyNYPvTmTjOpWPt6+E7kvlXL7moud6Ow2hELv9g+R1D2E5PoTe
-        604RWZuRkRl7/JhDzek0BLbj7S/GfXo7vw1/S3jCw/2pTjqDnXhG/8R+a47sjkH0XneKyBqjceuDmRns
-        P6bh9ltpvFBIdUcuJ28dom+khpEHLfSFmtSnDFIzPIOtO4ze604RWWkwZE88esTBWiN1p3Op77FRdczC
-        sWv7ORU+TPCei0B/DcOxAL7xMXaeuYne604ReX/Tppzx6WnKq0yU/ZDKgYZUHO1mvmnfSu1JG42/7MYf
-        rCJwpY6PfZ+z5GgiX/ZmoTtF5L2NG3PHpqaoLDfj9tqo6/yaA55UPH0FeIN71NUe5Mive4n80UxC2wq+
-        mshVZxK6W1ywQuSdlBTryMOHOMoseBoLcbXlsd9twH3OStPFInW1JSQ1riSuOZ6ElndJGU8jvmU18xxv
-        RqT6NacsT07Oj8RiOEozqSjLxF6RTmmNgdJ6A/YmIxU/mXmrehlJo5/+gzheDcjCxMRdY+qv3pmc/Fdf
-        /LyF+LoP/vL2nVUkuFbxfPHrI2Jf4JSXli7dPD8uruT/eG7bK6OLwnHoU3ey7kXRz8vKG8qi/7T5hVpJ
-        m3dJTOr8u5Onl817ThS42NsAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC6UlEQVQ4T53RYUzUdRzH8e9s
+        5rKtXD4odWu59cThwLk2G+qSrdUDpa2UHrjl3E44PDxOILgLAU1UZHjKgsOuAcrtcBwM8QLJEwE1u4QO
+        m8p1WtiB3EHEpJQTZCLvfj+ftmbzv7322/77vB/8/z9J2bs3WUl7DslbiopENhcWGnmOR3eKyMf5+elz
+        6kX9lQJaeg9ypb+S4EA9gYHzuG/2c6Angu1ylCxfFHNrFNPpKHqvO0XkI6vVNDs3x4muPDoG7PREnPSG
+        nExMd/HL5G0aRmMU+aMUB6EgACZvFL3XnSKyMScnY+bJE5y+LNpCh+j6vRzfNTt/TJ5hfMrP1b+GKPsp
+        TOmvsO8G7GodRu91p4h8aLGYp2dnqWzN4Jvz2bgu5uPtK6H7ejk3brnoud1OQyjEfv8ged1DWL4bQu91
+        p4i8n5GRGXv8mGPN6TQE9uDtL8Z9aQ8/Dn9NeMLDvalOOoOdeEYfYL8zR3bHIHqvO0Vkg9G4+/7MDPZT
+        abj9VhqvFVLdkcuFO8foG6lh5H4LfaEm9SmD1AzPYOsOo/e6U0TWGQzZE48ecbTWSN2lXOp7bFSdtXD2
+        1mEuhr8i+KeLQH8Nw7EAvvEx9l3+Db3XnSLy7rZtOePT05RXmSg7mcqRhlQc7WaOt++m9oKNxu/34w9W
+        EbhZxybfp7x5JpHtvVnoThF5Z+vW3LGpKSrLzbi9Nuo6P+eIJxVPXwHe4AF1tUc5/cNBIn83k9C2hh0T
+        uepMQnfLCtaIrEpJsY48fIijzIKnsRBXWx6H3QbcV600/VykrraEpMZ1xDXHk9CympTxNOJb3mO+Y0lE
+        ql9zyork5PxILIajNJOKskzsFemU1hgorTdgbzJS8a2Zt6rfJmn0k38Rx6KAvJGY+OWY+qt3Jyf/02fn
+        dhFft/aplXfXk+BazwvFi0fE/opTXlq+fOfLcXEl/8e8L14dXRqOQ5+6kw8WiH4WKq8rS59p54u1kjb/
+        upjU+bQT+QeXzXtObOCHlAAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="icon_popupscrollup" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1844,18 +1835,18 @@
   <data name="gear--pencil" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        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
 </value>
   </data>
   <data name="icon_select" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1886,16 +1877,15 @@
   <data name="document-copy" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB70lEQVQ4T42SPUubYRSGz+Kg
-        IphFqCAFY4YiWboIUkyLhZjQWhULWVwcNJUgRqpECWazP6DkF9S2UkTqoAjBqnF3dOtQBC1YNOb7+/Tc
-        Dz3yECvkgQteeN735lz3eWlybY3exmKvhZkH6JuIRmlsZQXvGUYnh8nf30aurhYiXArBXLXK18Ui/87n
-        +TyT4V/pNO8kk4w7wWUHaOCg10MmWXiXLZf5TzbLF6kU/7y64rPLS/68t8c4uBdcOoEGvIlEiF4tLYG5
-        XKXCN7mcCUmcnvLXoyNejcfveBEMfv+neKdkAkbCYRAqiMJtoWBCtk9OuBklE/AyFALzJQnISgcI2Rb3
-        ZpRMwPPZWbBQrtU4Lz0gZOv4mG0l7eXjxgYrLp8vKhA9m54Gi9V6nYvSA0K2Dg/ZVmosFxuCNvRpYGoK
-        vK9JQEU0EPLt4IBtJS1XJzmXoqENfXoaCIDluqyrKhoI2Uwk2FbScnUS/CvQhj65x8dBBPuuyxQI+bK/
-        z7aSlquT3JRKDG3oU6vDQT0eT8z8MQgRPu3usq2k5eokaekJ2tDHedzudIY73O4PSp/X+8NW0nJ1EqwY
-        2tDH6RQeCd3KE79/3VbScnWSvBQN7d6hIRPQeDoblaCDTlAstlOSZ7wjHzr+F3BPydbTZ2jLx71/Ad5i
-        gsnRJ2HiAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB1klEQVQ4T42RyyuEURiH340F
+        UmajKCnMQpqNjZIMUcPkHjWb2VgwNMkIDU0zO/4A+Qtc0zSxIDW5DPtZ2llIochlzP32en8fo89BOfXU
+        mb7zPp3nDI14vTTq8/UJ439QP+zx0ODiIs5p9I90krWxhIwVRUT4KDhi2Sw/JZN8H4/zzdsbX0civH9+
+        zvgmGPWCgrDFYiZtI0xG02l+jEb59uWFrx4e+PLujjcPDxkL3wWjKhhwu4l65+fBVCyT4edYTJMEw2He
+        PjvjpbW1Lzocjj0Z/pakCbpdLuBMSMJrIqFJAhcX/J8kTdDldILplAxEZQCSgBz8T5ImaJ+YADPpXI7j
+        MgSJPxRifVJBsrqx8YWxp8cjELWOjYHZbD7PSRmCxH96yvok9SbIQTbyqdluB3M5EWRkCJLd42PWJ6mS
+        G9kjG/nUZLOBhby0ZSUDkp1gkPVJqgQPi2zkk2loCLjxOHm5BSRbR0esT1Ilz6kUIxv5VGwwULXZ7IMA
+        CzdZPzhgfZIqichvZAuEVVNaV+cqM5lWCtRbLCf6JFWCvxjZyMcqFyqFqgINVuuydpvPJFUSlz2ya9va
+        5PjPVa4mIQdvgofFv5OSPc7IWcPHyPf1I+k3cIaIat8B3mKCyYSeIBwAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="icon_invokescript_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1913,19 +1903,19 @@
   <data name="map--minus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        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
 </value>
   </data>
   <data name="icon_popupscrolldown_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1950,13 +1940,13 @@
   <data name="folder_horizontal" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABLUlEQVQ4T6XUvUoDQRSG4a/K
-        JVh4EXsPVl6FVQrBykJEQZEkrIn/GBSMEIQIoogiFinEFIKgxoiCiGBABTG66MrihpC47B7nExt1txhT
-        PMWZM285AxFBO1BOI1IlA0NJRDDYMo4rqSh+EIjbbErNcaRqWdJ1EohRrMv3/TiOTJjibkvgbP7AM+ts
-        4svvHWfu2eIwhYxvr4v3VPjDVxdrZVNu94dCscVBAlOetSqth3yoD7UL472uCVuUxjDbelyRxt2SFjZs
-        sTeCbOM+J+5NVgsbtigOY7FeXRDnakYLG7bYHUTu/XpO7Iu0FjZssTWAvHM5KS+VpBY2bLHRj8Lb+bg8
-        H49qYcMWy73YcdRgnya1sGGLvm7MT/eg9B9s1WtATOlQOjWxibX1lPkNfAJSiLGOr2CqXQAAAABJRU5E
-        rkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABK0lEQVQ4T6XTzysEcRjH8c9p
+        /wQHf8T8D07+Cqc9KCcHiSLtbmPX72yUVZtaJRLJYQ+yB6WwdqMkZQsly8RoMtu2a9r5+D7igJny5fA6
+        fL/P8z4+IPkvKCbDlVIwlFgIQ3ZkMaokwrR8n26jwarjsGJZ7DjyaeRr/JhHcWDCpLtJ31n/Qv6s8ti7
+        77PPubTYTyDVslfp3ed+aKnFatHk1e5AIGmxF8OEZy2zeZsN9KpmQbynFUqLwgimm3dLrF8vaJFGWuwM
+        IV2/ydC9TGuRRlrkBzFfq8zROZ/SIo202O5H5uVihvZpUos00mKjD1nnbJyPpbgWaaTFWi9yzyejfDgc
+        1iKNtFjsxpajHvZxXIs00qKnE7OTXSj8hbTqGhBR2pR2TdJEAk/094g3UoixjopQ+mgAAAAASUVORK5C
+        YII=
 </value>
   </data>
   <data name="icon_select_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -1991,15 +1981,15 @@
   <data name="table" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABzUlEQVQ4T52RzUtiUQDF71ba
-        R7RrGW5aVIQUNVPQYjCIwU2LNg3ZjMwUSViPzGKmmf6oiigcs+zZF5FSFn3iGJbo8yOfnrnnwXskuMkL
-        B8598Dv8uE+4AgGnzGSDcYrPfr8bDR6yYlRRpqpyYCgCDO5X8XGvgg9hHf2hV/QFi+jdycOxraFnK4vu
-        zQy6Nl7Quf4MMmTFiM/3Ta9WjYG1NIyB1ZSOX//KxkDgPg//bc4YUK4zmE88GwNkyIpPXq+nVKlYBl9U
-        DavHKfw8TGJFfcRy5B5L+3dYDN9ACV1j4e8V5oMJkCErhqenvxd03TL4ffyEV3lngmdnVt86OrL6+sEB
-        yJAVQx7Pj1y5bBlwIByPI3R+jsNEAjunp9g+OUFEftuMRrGhquCAwUhWDLjdM5lSqcZAk3eGBmangdk5
-        QIas6J2YmE0Xi3UN1MtLy2AvFqsxIENW9IyPe1OFQo1BRt4ZGpidBmanARmyonNsbC6Zz9c1iFxcWAa7
-        8k3evgEZsqLD5fI9aFqNQVreGRqYnQZmpwEZsqLd6VTucrm6Bhww/wIH3hqQIStaHI6VpHzRm2z2XSFD
-        Vtja2r422e1/GglZIY9Nplmm9Z0hY/sP0fXQjui6fQYAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABzElEQVQ4T52QS0sbYRiF323o
+        vkh3LoubLmyRYGm1QhcSQSQbF26UphrU0iCxQ2MUb/1RKqLENBrHK6KiUby0xJTYkEwuZpLjdwZmMJCN
+        +eDAeQeew8OINxz2qHxpMB7pC4V8aPCRlV5N+1pVR1cc+LRVRedmBR0xEx+iD3gfKaJ9PQ/3moG21Sze
+        rWTwdvk/WpfuQYas9ASDI2a1ag38SsMamE+ZmLsrWwPh2zxC1zlrQLvMYDJxbw2QISvdgYC/VKk4BkO6
+        gfn9FGZ3k5jR/2I6fouprRv8jF1Bi17ix8YFJiMJkCErn8fHRwum6Rgs7P/Dg7qZyNGR01f39py+tL0N
+        MmSly+8fy5XLjgEHYqeniB4fYzeRwPrhIdYODhBX31Z2drCs69aAxShWPvp83zKlUo2BoW6GBnangd05
+        QIastA8Ofk8Xi3UN9PNzx2Dz5KTGgAxZaRsYCKQKhRqDjLoZGtidBnbnABmy0trfP5HM5+saxM/OHIPf
+        6n5qQIasvPF6g38Mo8YgrW6GBnangd05QIasvPZ4tJtcrq4BB2wDDjw1IENWmtzumaT6o1fZ7LNChqy4
+        mpuHX7S0LDYSsqKeS+WlyqtnRjHiegTR9dCO4+5C7wAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="icon_fitwindow_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -2032,36 +2022,36 @@
   <data name="globe--arrow" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADYklEQVQ4T32QfUxTZxTGX1td
-        ZgyaLDHoMg1+sAFzkxSVKqYR/IBtBjRZ5nS0cy6KVhNiQIgmfiGFUKgojEFTIGABJ9qNKXUFnPsDUUpp
-        a6VNqVTrFy1YCVDEdBX77NxK4h8mu8kv573nPM/znnsZL/sO4+UaGP/MAOMXPv6QLx/cxC92y4krRMd0
-        lYf63Jx0nD7kI94euIA8RwQNlfHVT8yFt154m2w+/1WHL2gcn/I3Ol95Nze5zdyc070fkKOPmHfS3JJ5
-        7Yn7sn0Uvb4pNNrGoTKN4vZzP+wBwP4vcNYw4uZ0PNK/2yBDO5snba/NbHngKer0oN3jp4AgGq2j0Dh8
-        6Bz2o2dsCj2TwO2XQEGn28PpeZwvQ8vYjPSm5JhjOtuPl+5j/1UX6h0vkXfzGY7//QwX+yfwzwhwQuuE
-        mvq/DwFXnr5G5JHrNs43Y5eaArZXlklqTKMptXZsrutHmrofO5qdEGse4kCLC+l195BarkepJYBjlLZH
-        8wi7SM/5CMZYcpHusHYokFhhxcpSI4RVViSorBBV27C+wgyJxo3crjc41DEJUakJscUGfF1lCnA+ggIS
-        T+uFJ28EN9YOIlKmR1SJEdElJsQoTIiWGyCQmyA6Z8e3mkksym6DQEHhJd1BzkdQwIZTbQlyQ2BJXjeW
-        F/YikgyfTRNFNTK/G2vOObGlcRKLM9vwjQbYrh4OcD6CAjbKfvk8Vzf2adE9RBX3YcVZK2JLrRCct4WI
-        VVgQf96JlfkWJCiHkKQeh6h8YILzERSQovjqI7H6fhyJBMS6iodIUrqQXO1CSs0jbFG5kFjpxOoCM767
-        DohUbsQp7P6IrBtnwjP+oIDUX2ezbcqGqBM93iSlB6l1w9jZ9By7m734+bIXieUDiFfYsaqIfi6d44r7
-        XlcOAl8WWExfyO6mM7bjAmPfNyydKW5uFxRavZLfxnCwxYes1gnkaCcQJzOi7CkgtQFiyzuy+oFlRzt7
-        aQV6wmPoU/KXsp/+bPgkp8uRphock2rGA0daXwWFMuObZdk3pxYc1PnnH2gdCZdq+4RdwAKptnfhob9o
-        A8b4xHwimoWFC9nafXuZpLmW7dN1sIx2fahy71yf5mE7661hPzTcnSu+KKGQ0P08Ys50yMdU/5cP0qpq
-        Zm0t2z3tY/8BOAMvdn6kKfgAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADXklEQVQ4T4WQbUyTVxiGj3Rb
+        NIYtWWJQo4bp2ACdkrJJJ0szcAr7CGhidCqtX5nMakIWEDKT6YYUQqGiMAZNgeAKqGg3VKoF/PiBKKW0
+        tdKmVDrrFy3YEaCI6Sr23nMaE37sx97kyjnvee77ynlfFpF3h0UUGJng+BATlDyaK1AMfyEo8yiIC0TX
+        61URPudzyvF8uEfMCgqd0TRUJdU9tpTc+tvXYvcHLjn9IdPkTKDZ9cK3ocVj4XOe+68g3xD9zjFLW87l
+        x57zjnH0+2fQbJ+E2jyO288CcAQBxz/ACeOYh+d4flaQrZsXIetsyGn7y1va7UWnN0CCEJpt49A6/ege
+        DaBvYgZ908Dt50Bxt8fL8+Feto6xOVktafFH9PZd5+7j+0tunHY+R+GNp/jp+lOcGZzCzTHgqM4FDZ3/
+        MQJcePISMYev2Hlvzg4NCTbXVErrzePpDQ5saBxEpmYQ21pdkGgf4ECbG1mN95BRZUCFNYgjZNurfYgd
+        lOc9gjGWVqr/QTcSTKm2YU2FCaJaG5LVNojr7Pis2gKp1oOCnlc41DUNcYUZCWVGfFVrDvIeQYKUXwyi
+        Y9dC6xuGESM3ILbchLhyM+KVZsQpjBAqzBCfdGCLdhpL8zogVJK8vDfEewQJPv+5I1lhDL5X2Iv3S/oR
+        Q4UPXxNLxBT1Yu1JFzY2T2NZTge+1gKbNaNB3iNIsF7+68oC/cQHpfcQWzaAVSdsSKiwQXjKHiZBaUXS
+        KRfWFFmRrBpBqmYS4qqhKd4jSJCu/PJdieZ+IoWExLrqB0hVuZFW50Z6/UNsVLuRUuPCJ8UWbL0CiNUe
+        JCodgejca8ejsv8kQcZv89gmVVPs0T5fqsqLjMZRbG95ht2tPuw770NK1RCSlA58XEo/l/aJZQMva4aB
+        1cVW80fyu1mMbfudsW+blr8hae0Ulth80rMTONjmR277FPJ1U0iUm1D5BJDZAYl1ltxBYMWP3f10BXqi
+        4ulTipazPRebluT3ODPVwxMy7WTwcPuLkEhuerUi78bMwoP6wIID7WNRMt2AqAdYKNP1Lzp0lW7AmIBY
+        QMSxyCgR+3T/d0za2sD267tYdqchvPJ3fk7zyO2nbZE7m+6+LTkjJQnvswhiPsEli/+PtzJr69/8pnI3
+        7anH2L84Ay92Z9FcXAAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="MgCooker" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAJcEhZcwAADsEAAA7BAbiRa+0AAAHrSURBVDhPhZLtS1NhGMb9T/rQx6ACyUVDyQjDaKAGQYOB
-        Ew2K9ilifrA+LDAMablFb1IM03DbMXMwj4O15VZ5iPly2Go0yzCzF0iwr4OdX3seOxK1owcunofzPPfv
-        vq77nLo6i2d44j0Xb8elgk90rO7VfN80dB13coLmyUFalCMcHjvJ+fBnHkdLu4Psty5wKhZgz9022tUw
-        9oiHpuQy+1IG7umNnQGdfkV2bA4fq3ZtpCP+EI9u4NAM6mMJDkaDuPoj1pCGgUt/LDfiSYV4sFzGm6/g
-        zBkcGOtj/4gTm/+cNeBqvIBttIeexDDqlwqhjxX6ixVcc1/lHITawn5rwBVlVRa0x4ZoVc7i1V5JBx3p
-        nIwk4wU6rQG+e3m8ehlnMrodxaGOc+K1gS21waHRMzh6B3cepHDRrf2UHe3jp2mZXaf+hcHeRBnxeXf9
-        H4L3Z3HfnOJoyMVxtUSD+ovW55t03SnguzZNOp2xhiws6GjaPJPPXnLDn8Hnn6NvIMvl3qcEApHq2Rsp
-        SxcCUHj7QUrsTaAo0vUSi0vv5JklxCwUl0Wxuf4NE3vLGCuf1rdtii7Z7JZlASoWV1G6uslEpsjlFmvH
-        WFv7wcxM6j8JZ9++bzL/aISV/Ja7mnNYqmY07YouQubg/l1NwG/XLb2y/7oFegAAAABJRU5ErkJggg==
+        YQUAAAAJcEhZcwAADsAAAA7AAWrWiQkAAAHrSURBVDhPjZHvS1phFMf9T3qxl4MaxDKSoiKKIqEaBAlC
+        Rg2KfBWhL9peOCiK2F0abSs2xFWk3n4JdhVMS2tdhv246CazreiHa4OCeit4v/N5vA5He2oHvpyH+5zz
+        Od/zXBUrZha/on/SS2Wbl6B8/r+omhiBIbCImuVx1PMVKJ9rQq/zFB/cyftBmld9aPZYUfS6Ba2CExqX
+        EVWBQzwMyjCsXd0N6OR4OrHGWZudWok27zsYJRlaUUapx49Hbhv0wy42pGx0QLFcCWPQjunDNEyxDHRR
+        GSVzQyh26KDmnrIBz71xqGd70OOfgXCegf17BsOJDPQ7P+g7ELU4OTbgGX9CG1o9E2jkO2ASt6mDtlCU
+        uqLrWTvZAMubGExSGrqA+88qWmEBDR9lqINXeDzbDq15/O6HJC66xUvarFl4gvrNFEo3ZDzwp0F+r1LG
+        DtvbTRherqLarkedkESZcIPG9Wt0TcVhebGGUCjMhuztSRDFXSyvbGGMC8PC7WBoNIJB8xKsVlf27hOV
+        Un47CCD++RsVOeeBpEmSktg/+ELvmJB8IykuzIUwkplrHB2nKD2vSCSXCSiROAHf1Y2waxXR6P6/AWdn
+        v+DzBW+JOLv4eY3d9w4cxXKulJa/4yC7Y94umUJU6KhQuQ6V6jfXLb2yZTPz9wAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="icon_pandown" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -2088,30 +2078,29 @@
   <data name="document" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABp0lEQVQ4T42SzUoCYRSGz1ba
-        tahVC0FbSNCiRdIiIQgSKooMWrhxUSk6yIgoVhq06QK6BbuANl5A11CLVlGgRUjl//h7es/gCYIa++CB
-        meE8L+c7cyhUKJCwf36+BY4m4NnL52n35IR2cjkbkg9jjluDAX90u/zWbnO52eTnRoOf6nWbm9tbRt0x
-        8P4IkJcx0Uavx1WIL7UaP1ar/PD6yveVCt+Vy3xdKrEc1EaB97uD7WyWxsSaCHhvtX4NuSoWWfEGg2eA
-        BNpMp5V4u9/nT7T/V4h0IteBE1ePNkxTSXQwg3qn4xgiAXAS6tG6YSiGhYCmZTmGyGDhGOrRWiymJHvD
-        IbcxB6cQ+TtwkurR6uGhYvYRYGEOTiFvuCIcUz1aiUSU1GA04i6u4RQiewInpR4th8NKeogA6cIppI4r
-        wkmrR0sHB0pmhEUZIMApRJYNTkY98gQCtBgKCVnZtBG6cAppYUZSK4649pnz+2k+GDy1d3VCiCyb1Iqj
-        x4WHmVm//0ID7BAgM5HBypXkF8uedPEuteIAcWkaLLjc7tSUz3f5H6RWHHG/API/kG3WfDzsAAAAAElF
-        TkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABnElEQVQ4T42SP0tCURjG31Xa
+        HGpqELRBgoaGpCEhCLpQUWTg4OJgJSWhSKKlQksfoK9gH6DFD+BnqKEpCjQRqbz+vf47vc/lvkFQpw78
+        hnt4nh/nvPdQqFCwOSgWt5nDP/Du5/O0l8vRbjZrQ9hwOOqOx+rdslSj11PVTke9tNvq2TRt7ioVhQzj
+        +ybAh8NxezhUTS6+tlrqqdlUj/W6eqjV1H21qm7LZYWFHOP7EuxkMkK8w4K3bvdHyU2p9IXPMC4ZArSV
+        TgsnvdFIffDxf5PgJLgOstKjzWRSOO3zDMx+XyuBAFnp0UYiISQGLOgMBloJBous9Gg9HhfOhpOJ6vEc
+        dBL8HWSlR2uxmJAcsWDAc9BJGryHrPRoNRoVUuPpVFl8DZ0E7wRZ6dFKJCKkJyzAKXQSk/eQlR4th8PC
+        +ZQfypgFOgkeG7LSI28wSEuhEMjgpU35FDpJl7+RRQdde80HArRgGBcQYOkkeGzIoiPLxczOBQJXTt9e
+        uA5mgsFChF+Md2LxN7LoOF1yM4sujyc14/df/wdk0SEi9yfyP5Btd7QayAAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="databases-relation" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACD0lEQVQ4T42SvW8ScRzGb+B9
-        0oSBl8EAIWGAOLIhgyMkLCxOJgaNbwlDBzGVsz3BPwAxosH42qiHl1LbhuRsKJQ3y3bm0pqI9dQj7VWM
-        k+vj3UktR7DyS57ll3ue3+f73JeIx+PEFDorf3NzkqYxE5FI5LwkSej1euB5HrXaJlZWWlhf5zB1QL/f
-        R7fbBcuyePFyEQ+KJZSYNTVgIpp8r2CrDygE4wH3izRohgUxjsRxXyGKvxCNRi/FYjFCOW63O5RIJN4U
-        CgXk83mQJIlUKgWKokCMIzWaPD4LP9UAn8+n+E9mb2dpTQcb71BerYKtdQ4DDpA2Whx2hIEaoJipbIb+
-        /mMAzQivGNx79BwLi0sgxpFyuRySyWTF6/WemcvconcH+0iTZFUTQDO4+/gJnpWZYQcjSF1uGzuiBDJD
-        0d/29zBLpqsej+fc0R2MIK21O/ggfIEg7eJ6+kZVp9OdCoVCCU0HjTaYSgXL9bfDDkaQ2HYTW8InXEvP
-        qman00n4/f6LmhFKr3HnaREPlxb+3UEwGDxttVoJk8lE2O32GS1BC6XKMsr1yrCDEaTG+01six8RDocv
-        uFwu5TeeMJvNV4xG45xMdCBKr9dTBoOB+rMHI0irHRacwCMQCFy22WxKwDFZdlmOiVI3sXGIVOea4MUt
-        OByOGdlwXF3Fo84Q6y+SPPO8xWKZl7GvKlv8P/9vysUMoJZl8vEAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACCElEQVQ4T42RvW8ScRjHb+B9
+        0oSBl6EBQsIAcWRDBkdIWFicTAwa3xKGDmIqZ3uCfwBipAbja6MeXkptG5KzoVDeLNuZS2si1lOPVCrG
+        yfXrHaXx7oTGX/KZ7nm++TzfI+Lx+P9wTuLWJCYN/0MkErkwGAzQ6/XA8zxqtW2srbWwuclh4oIWOaDf
+        76Pb7YJlWbx4uYwHxRJKzMYoYKKahKw9NWCxSINmWBBaJY77ClH8jWg0ejkWixHyc7vdoUQi8aZQKCCf
+        z4MkSaRSKVAUBUKr1Gjy+Cz8GgX4fD55/1T2TpZWdbD1DuX1Ktha52/AkdJWi8OeMBwFyMtUNkP/+DmE
+        6oRXDO4/eo6l5RUQWqVcLodkMlnxer1n5zO36f3hAdIkWVUF0AzuPX6CZ2Vm3IFCqcvtYk8cgMxQ9LeD
+        75gj01WPx3P++A4UShvtDj4IXyAM9nEjfbOq0+lOh0KhhKqDRhtMpYLV+ttxgEKJbTexI3zC9fTcaNnp
+        dBJ+v/+S6oTSa9x9WsTDlaXpHQSDwTNWq5UwmUyE3W6fVRu0UKqsolyvjDtQKDXeb2NX/IhwOHzR5XLJ
+        v3HGbDZfNRqN85LREZRer6cMBgN1eIJCab3DghN4BAKBKzabTQ44IWGXcExEq1TnmuDFHTgcjllp4KTE
+        8U+rJN28YLFYFiTta9Jn9+HUtEcQfwDKxQygANp/PwAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="icon_fitwindow" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -2132,30 +2121,30 @@
   <data name="ruler1" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB3UlEQVQ4T2PYn8jCsD+JheFA
-        EksGEHdDcQZIbG0EM0gcJw3SywAiQIqAdM/fm8v+/7qy8D+IjU8jzGCwAfsSWTJBGpaFMF98sLnh/9dT
-        0//vTWQ5AxJbE8E8Bx8N0suwPZZlyu9ri/9fnej+/8fFef8/n5gKZ9/fWAcWw0aD9ID0MgBtmf92f8//
-        baUm/+9tqP3/8eik/6dbrP4/29aMF4P0gPQyzAtgap7lx7QRyLn/9fSM/+8P9YMk7oPECGGQXgagIjCe
-        5MY0787aqv8gkzdHM88AiU30ZMSLQWoYloYwM2yIAuPZIOe/2tP5H8QGic30xW8I2IBOeyYYXnhzZdn/
-        FzvbwH4DYlD4MMzAYwjYgJVhzDC8COR8UOABxRYhiTNM98HuErABjZaMMLz0+tKi/0+AaWFZKNNSIGaA
-        YS0xRgZ0oCrMyOCrDhRfHMwEwytfAZ3/CBiVQLGVMHFNUUzNKIaJsTEwVBgxgvDqK4vy/z9YV/1/rj/T
-        eiBm0CCkGWYSyDkTPBn3vAa64NmWxv8gNkiMWCAPVGiUasywsM2Z4TgIA9nzgGLKQCwHxBJALAzEfEDM
-        CcSsQAwMPQQQADIloRikWAyIRYBYCIj5gZgHiLmAmB2qmRlIw50HAIdyTYaOb/frAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABxUlEQVQ4T42SWShEYRTHz10Q
+        CVkmXniQLI944cWDImUrSyIPoxRPSpGIiJQoS2Rso6GZmuwRKYyUCC/KkpKZpEkkSUqk45zbXLvLqd/9
+        zv3f7//v3O9esOllsJXIsF4ilxHtLspYmyqQWP91Za9ycd10vJxY8OnAhNxrGT8FrOnlcjZYcqV9x3wj
+        Puz046pe3mNtskAa1lrZC0vFcu/z0Tgedqfi474R77f73nr7XMOvK3vYC5Q2emPrwMWqeDybrce7zR7c
+        bUlE52KzJuxhLxizxebBTHGObuwPuwa83ejkB3bW/oK9QI1CT4poPJ2qVZLniyQDa91pgia8B8y5EswW
+        Kgzx+Fcrbcg9awMZ2iFKQFuSqGI6sVbj5XKr8m4Enw8YNEKUAGu+pDLG4/MBcf9Bh/70n0OUgKYEQcV8
+        bK7EC/oXLHmimQCVGJ0AXysiQICMSNLHc0QV6xWNf06fkntVjw76bv5UOneAmliBmTgYq0DHdB2OZIkz
+        BET9ZVaLx+lKE1auaQLnQhNyz9p/K4yILY0DU2sybDHUG0kLJ0KJYCKA8CE8CTeCTu+9/IgQF7xZRwQS
+        /oQv4U14ER4EmyXCNR7AK4dyTYa1Y09BAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="arrow-curve" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACE0lEQVQ4T2P4//8/AyWYIs0g
-        ixlUKo+AsVrNcQbt5nMMBl1XGQx7rsOx3dwXDCBsP+/lTCD2sJ75hMFs0l2wOs3GM4QNMJlwmwGkCYjP
-        gPGMxx4kGQByjXHfTZCtZ6Y+/PcfRJtNvOOB0wX6nVdMgZK9QLwNiE8D8RkYrj/943/39d//QXygOg90
-        L3ABBSptJ129nL3nzZu6099+Np//+b/x7I//dae+/68+/u1/4d5P/zO2vP9ff/r7f6DaMxoNpz0Y5Iv2
-        MiiU7GdQKj9U6Tnr+t2aE9/+lB789j9j+/v/Yaue/Pecd+u/84yr/x2mXARj5+lX/nvMufk/fcfr/0A9
-        Zxgks7cxSOXuMDVoOnq57PDnPxl7vvz32fbhv+2G12Bsvf71f4t1r/6brnn1X2v5y/8Ki57/t9709r90
-        3s4zMvm7PBhEUtaDcG/k8ruvw9c//WjYd+6BUs3B65L5Oy6Kpm88C5Q7A8fb/v6X2fn3P4gvmrrBA2gI
-        AwNv9DIQ3qaYt/kskO7lj13hDsQaQCwIxCxCSWsZBBNWg9ScEdrx/z+I5otZ7sHv3czALq3HwMAspsHA
-        ETL/DJt9RRWbbhADNgBTA1XnwSyuiaJMmNm6eDFQxBgLNgCK6QCxOlDNImaD2HAgWxiIeYGYHYiZQSZx
-        AbE4EEthwRJAMTEgFgFiAahGkHqQZhYgZqI8M1GSlUF6AcIC84BckOgRAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACE0lEQVQ4T6XTW0hUURQG4IVH
+        VAQz73mBTKLGriM2Egxm4ENb6ikkiRQiCgckpbLL5KDZPKWNlBRplIFBE1mNlRzHUMIuGJ09hugwWA4U
+        GaVjaBdGJW219vHyECdqcMPHWuz9r3WeDiDikmheBgJWm5+r1lh6YL21F/Q1bsg471m07fpnVU7TSCNh
+        xsZhyKr3qrn0av7vBVsuvAUxRLiq4QMLaIGQWTcovsovv/+FomZdHGJ/XbD53ICBHm1EJgrhC6qUKaz1
+        /ETRU479uSCcLszZ9e7+ks6xsUrFP219PY3VrimsfDWJFT1+PNL1DU1t41ilTCJlue6MwmDl0S5ILX8C
+        aSefmvOueryWl/6Z491+NLWP4547w5jX9AZzG9y4/VKfKvfKALJrg1js9CHNcEgskSHpsNOgP/ui/8Sz
+        7zOmzh+4S57A7Fafyujw4db7o2i4O4rr7COY2vwJjQ+/YHJpB08pe8wg9qBDsO21e30Fjo9fM+p636VZ
+        uj2JZc6+uOIHLnrji+RZTOmYRdHHHWpltAQgYt8tQV5V+shF1RZZdHsH0ZEoEhx94B5E7W8RGR7tRBR1
+        WaGdRe60QmjyJgApXgdh+Td4SM6p0yEbd4PWWcjM55iUkD7/MndiJOOxm1QzNejJBrKWMs2SvqiA+hgS
+        QUKJRCCcJJAkDStIPIkly4kYFHkxHEyCNH+QQGhe/j+E38IC84Ag6BEDAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_invokeurl_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -2173,14 +2162,14 @@
   <data name="control" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABeklEQVQ4T2P4//8/AyUYRbP9
-        3BcMDvNezgTiGJtZTxkspj5gMO67yaDXfolBo/4UVotQBEGagPgMFMeQbABIAxCfmfn0/38QbTHlfgxJ
-        LgApBuIzHVd+/5/++P9/ENu490YM0V4AKQTiM/Wnv//P2vbx/4Q7f/+D+LptF2OICgOQIiA+U3Xs6//E
-        tS//hy++/7/hzMf/IDH1upMx2GILJRCVyg8xAPGZtC1P/7tMOvffeeJZMM7f8/w/SJygATJ5OxmA+EzA
-        uif/TWbeBOOE3a/+g8Rk83cRdoFY2kYGID5jufn9f9klr/577f30H8QXT98UAzKcoAsE4lcxAPEZxR2/
-        /5vs//0fxBZMWB0DMlg0qJuwAdwRixmA+Izq/v//QTRP5JIYHvd6BlZJHQYQIOgCFi1/BraguWdAmNWu
-        LIZZTBOsEQYIGgBUyMFkVbyIySi5BMg2AGINIFYAYgkgZifGABagQjEgloJqEgHSAkDMA8QsBA0gJ1sD
-        AE2BbRvnALnyAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABhUlEQVQ4T6XOTSiEURQG4NuY
+        QZnFKMZPplAyhGQskFCUsqHZoG4ZKcqCBVEWxgolQqRRY2FmRZSf5LcpC4VLkQWlKCbMRpQsJh3nTK6+
+        W8rIrafvvrf3nD4GAP+ihHL3I6uYe3IhXjrrZ0XTt8w2dsXyhs6Z1XmkdCUl0BASX/ifF9AAEi4/AH2L
+        pm74nxZQGYnhiyDM3AHQ3TZ6ycNeQEUknMfv0L7xAuPXH0A5d/CMh7WASkj0HbxB89IT1HtuYEC8AL1l
+        9h9ybVdSQnrvPhGt636omjyFyomTkM7dB6B3bVdSQkrHFhF1y/dQ6LoKcewEgN4sndu//4G5dYWI4rVn
+        sHgDULP3CpQT2lY5Ldd2JSWYmhaISNsMQqEvCHSPdSxyWhxvH1G6khJiGjxEZPgA6Gts9HJjtZMZknIY
+        HW1XUoI+u5ZF2t2CGMp6eIQ5KzQoj7YrqYGxaF1J17yuoKUb7/nIilJRIorSdr9nlMCYHplRMqKhOGRC
+        RqTXdr9nfnoMH7BPTYFtG3kcKMcAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="icon_selectwithin" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -2212,46 +2201,47 @@
   <data name="script--arrow" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACA0lEQVQ4T43TT0iTYRzA8d/o
-        DylIsEOUOyS85qGZhxXULsGG0kCrQ60uG3aIZ7iNZIZ/VuhFbSQIug5dUrpK4KGIIII0iQi3WtFCR6XD
-        3jne+Ta3uSG67dfvCZ7q9ODhA+/h9+X9Pc/LCx39/cBdCgbh6tCQlbC9ujI4WP8n5i4ODFhfLi4+q1Sr
-        WK5UpPKl0satyck79NLjcCEQEFihXMZMoSCV29nB8OzsY0dPTyN/MZzv6hKYurWFy+m0FJ+hhtn8fmjt
-        7gY409kpsGQ+j19UVYrPUMNEByedToGt0fpfUykpPkMNEx00tLcL7Cett0RHkOEz1DDRwRG7XWDrxSJ+
-        0zQpPkMNEx3UWa0Cy5RKmNR1KT5DDRMdHLRYBPZrextTm5tSw3M6Kp7x6Yab98HkHgYwNDcLnjx94w26
-        JBn3jIqnxz4mzz744WoJfQaApibBV9zdxRyt+L+7T1fQObX817XpBD5UESmOnBqNuQBMJgBF4QJaLofp
-        bBY1OkaGnnXapiMcxfAaojeO6P70z+0lRCW4EAEwGnlsvuzzPXkVjeJ8LIbv4nH8kEhgfHUVPY/eo21k
-        Du2j89h67w22hRbw3FvEo97nkWP+Fy4wGI1ms8Mxoel6tko/khQinvDOFOquT32vtfd56AIOgaGmpmWf
-        ooT26oCt9/V+y40+iunscPg3qfGIS2EPRjUAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACAElEQVQ4T43TT0iTYRwH8N/o
+        DxlIsENUOyS85aGZhxXULsKG0UCrQ60uG3aId7iNZEbqDL2YjYIg16FLSlcJPBQRRJAmEeFWK1ro6I/D
+        3jXe+Ta3uSG67dvzBI91evDwgffw/b6/3/O8vNTZ3//X2XCYLgwP2xl1q84PDR3YfMGZgQH7i7m5p7V6
+        HdVaTapYqSxfHRsbZEMP0ulQSFBL1SpypZJUYX0d0ampR67e3kN8MLV1dwuqtrqKhWxWimd41hEMUntP
+        D9Hxri5BTReL+KxpUjzDs6JHR9xuQV1iK37JZKR4hmdFj5o6OgT1J1tvnq0pwzM8K3q01+kU1F/lMr7q
+        uhTP8KzoUaPdLqi5SgVpw5DiGZ4VPdppswnq77U1ZFZWpEamDSi+uxNNV26TxTtCZGppEXxF9o2X2SXJ
+        eCc1HLvzIX3i/ndPa+QTETU3C4HyxgYKbMX/3XjyA+7xhU0XJ1J4oAGsHDs6mvAQWSxEisKF9EIB2Xwe
+        Ols1x54NNrEzGkd0CfAnAe/Hf67NA0p4NkZkNvOy9Vwg8PhlPI6ZRAJvk0m8T6WQXFyE7+E7OG5Owzk6
+        g/Zbr3EqMouTb4B9/mex/cHnHjKZzVary3VPN4x8nf1IUgAO+ydLjZfGv+129vnYBewiU0ND6zZFiWzV
+        Dsf1V9ttl/tYmZ2d9vwBqfGISyDsxfQAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="marker" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABlklEQVQ4T4WSP0iCURTF75Og
-        oWwp+gNurQ0tzq6igyBokkOUhAkqiOZQkyCCW0stQkUukkMUjbUEQpRRS1s0BI6SGoqVdrvH/KQanh/8
-        ON85977jg09iZjKoKEXCpBATDoVCX+GRD3aNM38CWZgT9usOx20nm23wzg5D4ZFj/vsH8f6/INFwue45
-        leKvZHIAPHIpSGgLXpTKd9Lpt24iwYVAgFe93p7CI8dcW/CkVLGbyXQ7sRgvOZ1st9t7Co8cc23Bo1IH
-        rXi8+hmNcs7jYYfN1lN45JhrC+6UCj5brXcfcuX3cHgAPHLMtQUlpaZKJtNpbWOj3g6F2AAeOebagiv5
-        zhdKrZbn58vtSIRb6+sMhUeOubbgnIiEsTOik4rbXW2urTEUHjnm2oKiLIBjouVLi+WhKZ8QCm/MtAV5
-        OdzHfERUaqysMFQyM/LtYTeQOW0KuR+u634/Q+GR49HeoL9DMXnZI7qp+XwMhTeeYQUmWRwXpnfl4Kv8
-        laHiZ4UJYWRYwYgszQgLQaItHIaKXxQswuj/gm+HNTFEuMVJpAAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABpUlEQVQ4T4WSPUhCURiGz5Gg
+        oZ+l6AfcXBtanF1FB0HQJIdIkRRUuGgONQkiuLnUIlTUIjlE0VhLIEQltbRFQ+AoqaFYaV/fe1M5Z+rA
+        w8vzfe+5XLhXENGYupRgjjGYI6Y8TDjmWh9owoVl5qDlct33C4U2FYuEhGOOvdoHmnAh3fZ4HimbpZ9M
+        Zgwcc+zVPtDkTcqTfi73MUinqRwO06bfbyYcc+zVPtDkRcrKIJ8f9A2D1txucjqdZsIxx17tA02epTzs
+        plKN72SSSj4fuRwOM+GYY6/2gSY1Kbde7fbaF7/yZzw+Bo459mofaFKVcr5qsZw3o9FWLxajEXDMsVf7
+        QJMb/s5XUm4+2GwPvUSCupEIIeGYY6/2gSaXQoCpCyHO6l5voxMKERKOOfZqH2hS4QI4FWL92mp96vAn
+        RMJHO7UPNDnhwpCZYyGq7Y0NQsIx3/3vATjbTOmP21YwSEg45jhq37yjyfAYzL4Qd81AgJDw0VH75h1N
+        hLAw08zCHl98518Zyb7EzDITat+8owkXmEVmZUuIHVxGsq8yVmZS7ROR+AWHNTFET84WNQAAAABJRU5E
+        rkJggg==
 </value>
   </data>
   <data name="gear--minus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACW0lEQVQ4T6WQUUhTYRTHv+s2
-        ZKwHfdmi2pDYWqYLuYPmihhIMpp72OaeejB8ipBeCkaFRUihQQ+FRkUvCbWIKFD2lJlg4wpusOlGJi5b
-        Y5vi+5D2cjr/e13MCHrogx/ncM7//7/f/QQRif9BNQcCAREMBkU4HBaRSESt0WjUy1zaw9u8gxYesC8g
-        FAqdZuFlrodR6/U61Wo1ap5B89eAgYGBM7FY7OHOzg4NDw/fZNFItVohgB4z7KCBdt8N/H6/YK4Ui0VK
-        pZapUilTIpHYKJfLBNAXCgV1Bw20ex7tF7xer/D5fEcGBwdvr6xkKZvN0ObmNyqVfqigxww7aKCFx+Px
-        aAG9vb0+HlwD09MvCvl8juLxV2vd3d2PAXrMsGvo4PkdIMtyLJ1O0cLCJ1paUmh1dZVcrpPjOp1OAPSY
-        YQcNtPAw2g26urpuJJNJmpubI9Rc7gv19MhjkiQJgB6zZg08jBbgcDj67Xb7KJicnPqeyeRpdvZjxu0+
-        dQugxwy7hg4eRguw2WzCarV2yLL7gaKkaX7+M62vl2l7e1cFPWbYQXPWYumYMBrFa8EHAWazGYwpSpZm
-        Zj7Q4mKapqaeF5eX8wTenvP/fOfspDf2Y/T++Al6otNV2ZyOC/FMDWhvbwfn+/r6X6ZSX8np7HzU1tZ2
-        T1Fy/NUcTbS0bO0ODdGfPOUQNQBHr9cLo9EYMJlM462trUdR19a2+EFLdEGvz4xKUu6qJG1dl6SNO2wE
-        dxs3gJ+xMPyswg0MBsNFDroP0DfmXF3MQRt7OER7Az4tzAHGzBz6B/gQtPCIX1/g1Ah/cmufAAAAAElF
-        TkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACWUlEQVQ4T6WQT0iTcRzGf+82
+        kbEO8zKjckhsLXMLeQfNFTGQZDQ9bOqpg+EpQroUjAqLkEKDDoWLii4JtYgoUHZqmWDyCm6wuY1MXLbG
+        /sjuQ9rl2/d5XxcaQYd+8Nnvy/N9nucdP0FE/4X6EwgExODgoAiFQmJoaEi9R0ZGvMylXbx7d/AiA/YV
+        BIPB02y4zPdh3I1Gg+r1Ou3V4PlrwcDAwJlwOPywVqvR2NjYTTaNVyplApihYQcPvPsK/H4/uFIoFCiR
+        WKVyuUSxWGyzVCoRwJzP59UdPPDuZrQCr9crfD7fkeHh4dtra2lKp1O0tfWNisUfKpihYQcPvMh4PB6t
+        oLe318fCNTA7+yKfy2UpGn217nQ6HwPM0LBr+pD5XSDLcjiZTNDi4idaWVEok8mQy3VySq/XC4AZGnbw
+        wIsMoxV0d3ffWF5epng8Triz2S/U0yNPSpIkAGZoez3IMFqB3W7vt9lsE2BmJvI9lcrR/PzHlNt96hbA
+        DA27pg8ZRiuwWq2io6OjU5bdDxQlSQsLn2ljo0Tb2zsqmKFhB8/Z9vbOaaNRvBZ8UGCxWMCkoqRpbu4D
+        LS0lKRJ5XlhdzRF4e87/852ji97YjtH74yfoiV5f4XAyKsQztaCtrQ2c7+vrf5lIfCWHo+uR2Wy+pyhZ
+        /mqWpnW66s7oKP3JUy5RC3AMBoMwGo0Bk8k01draehT3+nqVH7RIFwyG1IQkZa9KUvW6JG3e4SC42/wH
+        yDPtDD+rcIOWlpaLXHQfYG7qjIs5aOUMl2hvwEfHHGAszKF/gA/ByxkhfgFf4NQI/4LwJQAAAABJRU5E
+        rkJggg==
 </value>
   </data>
   <data name="icon_clearselect" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -2271,18 +2261,18 @@
   <data name="gear--arrow" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACfklEQVQ4T6WQXUhTcRjG/7Yt
-        GWbozexrI0qRUMPOwG11MbDEmov8uojQZFBIq66kgVERgogglG1hEJRSGdRNihG0TFA7ws6JnX2YmsuW
-        bTq8l8ibt/9zjpZCdNOBH+/L8z7PwzmHERH7H9Swy+Vibreb1dXVsfr6enU2NjY6OK3rODbf4EUGbCmo
-        ra09yo2X+NyLuba2Rqurq7RZg+evBTU1Ncd8Pt/dlZUV8ng817np8tJSmgB2aLjBA++WN6iurmacq8lk
-        kiQpROl0ikZGRuZTqRQB7IlEQr3BA+96RvsEh8PBnE7nvoaGhluRiEKKEqaFhS+0uPhNBTs03OCBFxmb
-        zaYV2O12JxfawMBAfyIej9Hg4LOZ0tLS+wA7NNw2fMj8LhAEwSfLEo2NvaepKZGi0SiVlR3u0ul0DGCH
-        hhs88CLD0d6gpKSkfXJykoLBIGHGYp+ovFzoyMrKYgA7tM0eZDhaQVFRUVVhYeEN4PcHvobDcRoefhe2
-        WituAuzQcKu49lw60nz7JTIcrcBisTCz2bxfEKw9oijT6OgEzc2lKJP5oYIdGm72bilj6/0cs/kXmviH
-        aQUmkwl0iKJCQ0NvaXxcpkDgYTIUipP3sULHe6Sfbn+ETt75SKcDUepLE/GwXNapNKkF+fn54FRlZdVT
-        SZql4uJDvXl5eZ2iGKMT3VN07zuRd5qoOfKHtlmig+0TslqAR6/XM6PR6MrJyenKzs4+gDkzs0wX+0Jk
-        ahlYLmh9FVPnhRfz9g9Eu7yv5d1X3mhvgDyngMN/K7MCg8HQwou6AfYNPfds/3TuuSeRnU2D53mJ9g/4
-        s42zg2Pi7PkX2888eGRw93rWM+wXiN3yhzE1UjYAAAAASUVORK5CYII=
+        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
 </value>
   </data>
   <data name="icon_pan_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -2297,32 +2287,32 @@
   <data name="disk" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABwklEQVQ4T6XOT0iTcRzH8e+e
-        7e7BgxDixbuXELyKlxQPgiwx/JOa4UE8CR4UFcTUubUJk4nhX6ytRHCCqJvicuEk6KBWZKgVRaIM/IPK
-        YLBPv8+jgwR5VBy8tvH7fd7PJgDkPqTa7FRcdUqvta3t+W1we9E4RarUm+LYenOi/giQuAE33LJhK0/N
-        DnJujkYRTyQQi8cNccMtG7ZSabZT3/rwAc5UfHR+bogbbtmwlQqzjdyfBv/iMBbD3vGxIW64ZcNWyrQu
-        8nz0/Ma++vUf0aghbrhlw1aeaJ00GHH/xO7OEf6cnhrihls2bKVU66ChsGsbga7NW+GWDVsp0dppNOTY
-        Qs/jcXRbx67Fu6S1/l9gw1asWitNLPZ8gb30NSKRNayshK/gGe/eNYXhLPPhQ98O2LCVYq2ZfAsvNuAq
-        f4tgMISW/H7dzMycjme84wM8z6bx/uV3sGErRVoTTQW7P8NdNQW/P6B/ks/n1yXP+ICR+nks27+BDVtJ
-        NaVLjqk4t8DUEGh/9OpwcnIBA7V+ndc7q0ue8QHexhCWbF/BPVu+MpSsTMmuyZPaVYvFYrsO7/73UAqH
-        L1tJUV/SlAd3xCblH+s4aw2T/BzJAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABwElEQVQ4T6XNTUjTcRzH8e/+
+        291DB0HCi3cvIXgVLyodBJlimOYjHsJT4EFRQXyam5swmRg+JOqmIjQhyk1xuXASdPCRDLXCKJKBD6gM
+        Bvv4+/x1UCD/lAavDX6/z/s3AfBfpMrsVFz1Sq+1tbXuLri9bpwilepLcexOnakHgcQ/8MMtG7byzOwg
+        5+ZYFPFEArF43BA33LJhKxVmO/WvjxzhQg1OLi8NccMtG7ZSbraR+9PQTxzHYvh1emqIG27ZsJUyrYs8
+        Hz2H+K3+4Ws0aogbbtmwlSdaBw1F3N9wsH+CH+fnhrjhlg1bKdXaaTjs2kOga/NOuGXDVkq0NhoLOXbR
+        UzyObuurW/EuaW3gO9iwFavWQhOLPduwl04iElnDykr4Lzzj3UxjGM4yHz7074MNWynSmsi30LkB19Np
+        BIMhNOcP6Obn3+p4xjs+4Kl5jfd9X8CGrRRqjTQX7N6Cu3IOfn9A/yWfz69LnvGB0efvsGz/DDZs5YHp
+        oWSbinIKTA2BtryXx7OzCxis9eu83je65Bkf8L4IYcm2A+7Z8pOuZGZIVnWu1K5aLBbbbXj3p0fyeOSm
+        lRQlVUm7J9VIyhXrOGsNnL9vHwAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="application_browser" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        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
 </value>
   </data>
   <data name="icon_viewoptions_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -2340,118 +2330,118 @@
   <data name="globe--pencil" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADQ0lEQVQ4T42Pe0iTURjGz7ag
+        IqIISrALFV1MC8UoZ3bRNLcu2IXIijSj0jJqRKV01UwbzhtWU+emlVMrL+UlQ9eNsiwzJ9WGbtlW4SX7
+        CuesXEP2dM5XUH924MfLOe/ze/g+Ijz6jAjjW4jo3Fsikn8YJVJ0h4jSehSUCsrdP1PBv9P9/IP5pMDL
+        y98iENxqEggC/xYkmabTEpWf5mOb/MkXrtRod9SY7K7WgWFHSecPblVpTxvbL4hVBsrE4lNITES1QPDo
+        d0Fc8/RxCW1VstqPPeXt/XhpH0aJcQBqfT+aPjvQ7gTafwK5D6s57z2K10NDQwh1d8+8TEgoEcbUjRbG
+        6gplVe96Uxt7oet10AIXSgz9qDTZ0djnwAvbMJo+PMad2nUY6jmOSct36MdP9VisIfQIdpRKPE/UG3fe
+        MGNfjRVXTd+Q9KALp+934VrHIB5+BbJrb6CiXMrL6rwg+MuSLcwTbNfSgo25FyIL9P3SwnasutKB9doO
+        hJd1IqLSgv1VVsRri3AxZykvZ2YtQ0x+EbbTPPMo9BMkqfWH6z45g5QGeGe1QpxnQIDagOUaI9ZdqEFe
+        QQgvKzJXICxFCZ+0FqzJ0zuZR6EFQWebxQn3XMGF3Zid0gyP9FbMS9fDM0OPiJPRwDcTEs75IUpTi6lH
+        G+CbQcvTn7uYR6EFgYkNAYoW54yk55glf4nZCj3m/oFusSkqBBL5TYSWfMc0WQPWVgIbtX1O5lFoJDjl
+        kld8vW1O6mt4pL3B/EwDfLIM8M028vhkvIJfdie8k18hQPUJkgogWPnOxjwKLZBmrJ4QoTUvpCFfyhKl
+        BStVVkg0VkgL3iNUbUVQbicWnW/DljvgmbL/ppl5RJJGC8JyRpMNqmKPMy+4lapehF3pw7bSz4gq47C7
+        nOMnu0uzzTjUBITkmzmW572wHFoQXkTI1uKZIyLKdL5yAxd53YYDVXYcuT2IuLpBfrL7Nk0XNl+zcCOj
+        ynUsz3sM/rh50l9Jnkl2VRdPiXtqWq/utsVWDjiP3f7hYpPdJx9pNLE9n2P5f46IMpEyj4x1ExP/6L0k
+        sqyQRNffJTG6Zn6yO3tne0KYzfLM44+QMobCHt3/A5ZjeeoR8gsfww31jk5/egAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="arrow-curve-180-left" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACGElEQVQ4T2P4//8/AyWYIs0g
-        ixk0G88wGHRdZTCbdJfBeuYTBvt5Lz2AeKbd3BcMIGzYcx2OQeq0m88xqNUcZ1CpPALGqAbMeOwBNOQM
-        FDOYTLhNggET73gAXXFm5tP//0G0cd9NFM0gl+B0gX7nFQ+gJFhz9/U//0FsJHwayN4GxL1AdaYYXtBo
-        OO0BDIcz0x///1+078v/qmPf/jed+/G/8eyP/w1nfvyvP/39f/mRzz+TN798Y9V/5TJQbSUwDLjgYaBU
-        fujM5Pt//2dseY+CEze8/h+y/PF/z3m3/jvPuPrfcdql/17zb/wx7T57F6inUqFkP4N80V4GBpn8XR7S
-        eTvPdF379T9t07v/6Ts+/g/b+eG/w6Y3/63Xv/5vvvbVf8PVr/5rr3j5X2XJi/+aS5//ka86fFkqd4ep
-        ZPY2BgagZgbR1A0eIinrz+Sc+fVfZ++f/yA2DIumbTwrlrf9okTlweuSbeceCC948VF4+oPXQPleIGZg
-        4DOPZeD3bmbgi1nuwRu97IzR4f//QbRgwmoGoaS1DPyxK1iAWBCINYDYHSjXy5uz/SyQ3gbEDHDALK7J
-        wGZf4cERMv8MCDOLaSAkkVhsukEgdVXIahiB8qxAzAXEAsyG8SHM1sULgWwVINYEYj0gNgJiY2QMVAOy
-        XgFkNsgAZqghHECaG4j5gVgIiEWBWByIJYFYCgsWoDwzUZKVQXoB+7/02cSOHsEAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACEElEQVQ4T6XTXUiTYRQH8BMr
+        EUPnR9NmgRIjNuxr2hIaZNFFb3UXo5sS+7QgM7DANoI0IUhbn5DuIi2oFEQ0i6mBRSl1sWeDUltfkrCi
+        zUklRS1ZnP7PsLHRiEYP/HgOzznn/169xMz/JeFjMshQL2hV4xituTROZsc7KmsNKOBYd9VPkvGsN0rO
+        FTV4aOmJJ6SzDkfEB7T4FISIWbT6wuskAi6+URAiHO+Z5V1y7mXc8l8DVp4ZVdCMLDd5wyzrGC5wgh1z
+        pj8C9HUuBSGi2cdcc/8r2x5/41OeENe7Q1wnQnzS9Z1rh7/82HsnMLX2/OgIZq0ISIsGLKl9JC6//ckH
+        736Ks7snyJZ2H29ufcUbW8Z4w5VnvKXtRdjU5B7HjrXw2AMqqBkkWnzknrKoekA0Pp/hyt6PfKB/mrcP
+        fOb1vVNs7g5yadckGzsnuagjwLobfjbc/BAusA2N5B/uN2kPOYmwTJr9PcqCfd2iSszwssEwy/o3TeVt
+        d25139OF1ode7WnPRM41/3RO80QQPTsQZZSWk3prA2XsbFfSd9wSxUPM8s7a1UnZe7pIXd4xF7JAD5vQ
+        s6dX9blxO4GiR5VnoJSy40qqpU1Iqlz9bCf+pCzfJudssTNzYB6kQabKWGFRmY9eR60DA6yAYiiJhRn5
+        +UKIBKhAhqTCfFBDNmggD7SQn0Bmwh8kGQkf/x3TL/u/9NmKeOePAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="color" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC3klEQVQ4T6XSa0hTYRgH8Cdd
-        yyCCBDWLWRARdsE+VhRllCH0LWEYFSZ2wTJ0kIhm0dzy0rIbCGGOXKkLNU1y3nNU1vCSudlxK0bBlpk5
-        5Ciabu78e/TDTAj60Ic/L+dw/r/zPu85BID+JwvlisdEA8+IPuYTWRIpbOAQKe07g7X2cHmZXb6mzC7b
-        rh2kWGU/HQ8TSEM2qiUztS50lwI3KdZxLdQwWnamf+al0SO9Nfukjle+GUOTZzSppN8RmmMQqCD270AD
-        HXZUK1pmP1eJsD4BjFeBPBWg4jX3MVDajdl7VtGxvqrFRvWHl+zgSQ1FWntWm2Y8jybhLgYsXGxUA3od
-        oHsAaBqAy128fsGM+vukdZXF1ErmyMAIejOlCe4E15xUCkxmAK4iwKYHOqqBmhag/ANQ/BXIFDGX54ew
-        3+0ykiUtABRaqP7TVOEvN7IwjuuYm+PyeDPg7AZ6HUDbGPwGLyZuAN94cx+Sp37pyFIfAM69JrvVXyJ1
-        4RJsKIQLTzEJC/yzbkgj05juA4brAOE28C4d6Dzvl1LptT0AHOokZ7O/QKpEGhoZeMPAIAPD+IkfIjD0
-        nosMNDFgZEB/wi8doU5nAIhqpXbtRIq3iHdwh0cohwHNDHRjDL0MtDFQYQTu8wjaVODCwQnvRmptDwDL
-        Kih711CMmMFABnJRhEro0YNqBmom+AwH+Axr+Aw1QNIpIHrDkBhEddkBgNSkkJvkwlHxpDeFR1DxCGr0
-        QgcPdAxorPwVeYSkQmDfMdErW24SiB4qFoF0Iqok5coXEe4D41d8iahFCvpwkYGLDJxlIPE5sDd33Bei
-        eOEmqlYS3V38lblOFM1JD1bK9NGCoksl7h5t9sb7RqR4j0/a0zHqjcrqEmUxeoHkKi5vXags7oBIxtcR
-        nG20aUUcnd5yizQJZsrPdFJOvpMSNWbalnyLQjbH8TM7OGs5sj+BIL6xihPOWfePzL9o/tmgeeA3KbNy
-        RaQn6HMAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC2UlEQVQ4T6XRa0hTYRgH8Cdb
+        qyCCBLULsyAi7EJ9rCjKKCPoW8JYVFjYhcrQQRKWRWvLZstuIIQ5aqUtttJE55yao1oNL5nTjlsxCly3
+        1ZDjqHSX8++ZwSoQ+tCB/3m/vP/feZ/3EID/yvir5jZR3wOiV2VEbhWl9W0ipXflZJ03XV7tlc+q9sqW
+        6QYoW9lLO9IE0lI/3ScnOSYALlC273SqKVi9r3f0kTkkPXNGpfbH0VFTcyiYV9nrSz1hEuh89sRAA232
+        WRQtY2/uivDcAcyngLNqQM1r6W2gqhNjVz2ib97dln6q3/wXcMdKczxdM22joZthBCoANxebNIDRABiu
+        A9oG4JiL17cY1XwMe2a4bQ5yzkkCRicVCIHcoZhUBYSLgKFyoN8ItFsAawtw6yVQ8Q4oFhE7G4ewPjBk
+        JndBEtC7qf71N/2PAI5jGGcQi3F52A74O4FuH9D6FXFTBCPngPd8uJd7v/0wkLs+CRx4Ql5PvFJy4Sj6
+        occQ7iEMN+JjAUifvuN7D/ChDhAuAc8LgY6DcekQPfEmgU0d5LfHz0u1KEATA08ZGGDgA77gswgMvuAi
+        A80MmBkw7oxLW6jDnwQyHdSmG8mPlPMJLvMIt2CCnYFOfEU3A60M1JiBazyC7hBweONIZAE52pLApBoq
+        WTW4QixioAilKEctjOiChQHrCN9hH9+hle9QC+TtBrLmD4opVFeSBEhDCrlNLmwTd0XyeQQ1j6BBNwwI
+        wcCA1sN/kUfI0wPrtosR2RSbQHRD8RsoJKJaUk5vzAhsGD4ZVeE+8tGDIwwcYWA/A6qHwNrS4eg0RWOA
+        yKIkuvKrO/5KPFmcwslKmTFLULjU4uqgPbI1+knaGopKa9qDkczjLlG2wiiQXM3lJeOVPwEZJ4OzlBZO
+        zaE9iy+SNtdJZcV+OlHmJ5XWSUv3XqRpi3J4z3LO7ETnTyCFM4OTzpn7jyQ+lNibAoB+AimzckVMBrui
+        AAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="cross-circle-frame" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        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
 </value>
   </data>
   <data name="funnel" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB9klEQVQ4T6WT30uaYRTHj7/w
-        FzLyQnFC4Mgh4hgs9B8QvJH0vxDqJhiDRYMuNsaoi6Cr3bSgaIHMNghrUhmZliwpMXCMGAoyJNzNbnf1
-        3TkvzxtKNoJe+MDzvDznc85zzvsSALoPWnA6nZ6IRCIZm82WISJhinllNBrnnU7nvNfrfRsMBuei0ejL
-        eDw+zefTelJdkOn1euh2u2i1Wmg2mzg9Pcf2dgWFwjdUKt9xcfEL7fYfXF39BcdP3hBIBaVSCfl8Htls
-        FsvLH7CwsITFxfe8/ojNzR3s7x9DVTAoSCaTJIJOp4N6vY5iscjZv3LgJ6yt5Xld5Yp+4vLytyZIpVLX
-        fdMWsVhMBGPSg0ajgXK5jN3dPays5LCxUeDM5zg7a0P1IJRIJIYKiAVj0sRarYbDwxJWVz8jlztAtfoD
-        qolhroD+J+B4EsnUyUkV6+tfsLVVgZrCE66A7iIQyWMZo0xBjfEpV0C3Cvx+P3k8HjKbzRKsP9cCt9tN
-        Pp+PAoEAhUIhCofDgz3ojxomcLlcpONwOMhqtd5JMKuu8K4/WE8w8CH1V2AwGEjxQgR2u31OsvKEBgq9
-        VSCn+B8QnovAYrHMMDduOUxg4lMPGB/zkJk5OmrAZDLNqr28G2G0Tg8TSJpR5hkzzrxm3vB1Umov7x4x
-        2l10wT8uhpNvS0oRDQAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB7ElEQVQ4T6WT30uaURjHH3/h
+        L2TMC8UJAyOHiDHY0H9A8Eam/4VQN4MxKAq62BijLoJd7aYFRQWSNQjbpGVkumRJiYFjxFCQIeFudrur
+        757n9Wi16Qj6wuflHN73+ZxznsNLAG6F9kgmk09CoVDKYrGkiEiYYGb0ev2c3W6fc7vdr/x+/2w4HJ6M
+        RqNP+fvk34JUp9NBu91Go9FAvV7H8fEpdnZKyOW+oFT6irOzH2g2f+Hi4jf4+/F/BLKDQqGAbDaLdDqN
+        xcV3mJ9/g4WFtzxew+bmB+ztfYbawXVBPB4nEbRaLVSrVeTzeV79IxduYGUly+My7+g7zs9/aoJEIqHV
+        9QWRSEQEo9KDWq2GYrGI3d1PWFrKYH09xyuf4uSkCdWDQCwWGyggFoxKEyuVCg4OClhe3kIms49y+RtU
+        E4MsoP8JuJ5EMnF0VMbq6ntsb5egbmGMBXQTgeQBMyO3oK7xIQtoqMDr9ZLL5SKj0dgt76YvcDqd5PF4
+        yOfzUSAQoGAweF0wJH2Bw+GgHjabjcxm840E00rw+mpxL0MFOp2ux3MRWK3WWSm80h8tQwUS/geEZyIw
+        mUxTjHpzmUECA3OH8TD3mKnDwxoMBsO0mgt3Ga3TgwSyzH3mEfOYecG85KMk1FwYYbSzdAWgPy6Gk2+q
+        GukdAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="ui_splitter_horizontal" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABD0lEQVQ4T62TsWqEQBCGxwTS
-        JFZpEq0sAj6ARUrtbFLlBWzkIHCkFwtfJV1eTUVEBBER5+bfc8WzusNb+JiZ3f3/HWWXmJn2sEuMg/cb
-        pGlKWZYt+L5P8zAlHgREwvx6H3Sqg61BFEXa4CiJhjB/lYHehBM1a6HOlw6SJPmS4nAr0KlPiOP4RxKe
-        ponHceRhGLjve+66jtu25aZpuK5rrqqKi6LgPM+5LEuedURhGH4HQfB7K9CpDkRInudd4Lou2ba9gHq7
-        B7rFwLIs/edVNAwD/K24WDdNkxzHORusxoPkz8K78CHiT+EfEbXwJrwIj1qzNTBk4Wm+OK+zAK1BiBpi
-        rOMgNe5zlfe8xLt0cALSyt8vnqRT9gAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABDklEQVQ4T6WSsWqEQBRFxwTS
+        JFZpEq0sAn6ARUrtbFLlB2xkIRDSi4W/sl1+TUVEBBERX96ddYfJMoEMe+E48968e0dEQURXYWzaYGza
+        IMqyFFVVKeI4Frtc5rCvsq/PwWcMyLIM89Cnhuzrc38GnMGNZ0znKqAoijcuDrbAJwPyPP/gDW3bRuu6
+        0rIsNM8zTdNE4zjSMAzU9z11XUdN01Bd19S2Le0+IdI0fU+S5MsW+GQAFyKKol+EYSh831egvpyBTwV4
+        nocPreQ4Djhq7Ccnua4rgiA4BWi6Ye6ZZ+aFTa/MN1bUzBPzwNwyUpcBuOaOwY/zyMCAV8OKGmac4yIp
+        GYDHNRibNhib/4fED9LK3y95o+n+AAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="arrow-circle-135" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC1UlEQVQ4T6WSfSxVcRjHf93K
-        HxSNCKNkSGSpKyOMpfVi3aympVvRIhZXhWV3RSuypZmYl1WrvC1RrveX0UVKpXZ0N1Ot3MQurisvYbc7
-        pp6e56j+sP5o62yfne/zfJ/f93d+5xwGAOx/YNuylDyeeQPM5/YQ8707ssrvnkaEpCPtCIeUIBL0LGmG
-        ZmkNbbw4wNY/Xy2NkE+VpHTPKbKUP6YQQK2NbJlW+ReoFRgg+ntAbr/FzvzB0Oy+75mpirm6ZG72HTKF
-        AIE9QA92FQ51e+b2i/48gTDjA3O78VHPK/eTf1bvfExix0zm2ebJmn2Fqma3zN52hEOtjJVP6pI6ZgBn
-        wDuvT4FrLPkjuKb1EBZHyof2S1snYiKr1FlYX9ty/W0AhROoxdjjous0OpyB0Gq1CmsJH+CU3EXYS5o0
-        QadlgxLvjB6pc8qbrZuuKtjGKxwfQJtgT7wj571SUjUE8W1jWlzzgA9wSHzJHC6+sEl4Mu4bcv+zn/2F
-        50Jb6VNmc76NrYtvZdaxcuaEQRuSOhl6XESFCnAWSPMBNLA2ruUWDnOLoT75VuceM2uE/BMYEN2kAdJ8
-        gEV0A8GFNIzCoUo1T4R8HKhnKWk8Zh5Vz1aHVzKLqHqxe9prZWDZIASVDWjRXzgCmQi3t3oM3IqH4WDj
-        BFCN5BiflDGj0IfMJKxCTL3AymGdV+kICNO7VFgvvETD46UE5103DXuaZ8CudAJIu6R0KKlPkN5dM6pz
-        Lv8KHrVTYBwuUxiFlC18Rv3DRQQX8GwW6O7aqAO7Wh041OvAXT7LQ9q84husr9GBYZis2yC4WLTyaMnC
-        rywwdWTLD9zhfpGqF1zc5pL+SrVZ9kVr3jgP+jXzsKJAozW41KlCT7HMJ0EkMHNkdPEBeFkJtscXCYSn
-        4lALl5g5+Qs8zlwWBGQ/EohudvGQxh55OOOEmCJLfwcYYmGCrEEs/wFabIAIKOAngC8O+qdBFeoAAAAA
-        SUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC0klEQVQ4T6WSe0iTURjGT6v8
+        Q0tD05xomajZTLJmYqkoLbpISwojW6WRpqSzUklGaZQmZIg5vFBReSPTcl7mZWhTs6wsPhuIFeWyZM45
+        89KUNRTr7T3fqj/CP4IO/Pie87zPeT6+CwGA/4JskapZthYPkeBbWhJyZ3RF6F29EMlFuhAGqUTEOHOi
+        GZqlZxYqcBOU6CRxSkNlVt+cSqr+YUAAtTG+fVojKNWpMCNcuKDoM3dHyXB0weD3/GzVXFMmM/sWMSBA
+        QQ9wBjvLtH2YFf4p4Oe9J37XP1gEFn0USAfmk9K7Z/LPtE3J95Zp2vzyB7oQBrU6WTllyuieAcxAUPGg
+        Cs84sQW+Of0U7uEa7T5Jx2RSfL1Oivurm669CaPlFNQi9JjEJr0JMxDdoNPgXswW8DJ7KR7iVn3EKdmw
+        OCivX+Kd9Xrzhisqsv4ywxbQm6An2l74Ti2u10Jq57gRz9xnCzzTXxDPC89d0x5PhETd+xTqcf4Z303y
+        hLie6yRrUjuIS7KS8LBoXUYPwRkTV6sBzALVbAENrE5pv4lh5m+oT+fOZx8RF4R6x7EgsVUPVLMF3MQW
+        ChPVMgYH63QsccoJoJ6TWHHUMaGZrIytI9yEZpF/zit1ePUwRFQPGXFufgQ6RJg9DePgVzECBxSTQPdI
+        oe0JGbGJfkDsYmpF1AuvGzEFVo0CP7dXg3vzS7Q+VkVhgpqmYXfbDLhXTQLVPlndaupTqN4lHzN513yF
+        gEYD2MbKVDZR1ebPaHmonMKEPZ0FevVVmMC90QSezSbwV86yUO1Y+w3Wyk1gHSPrs4qsEC4/Umn+kTj2
+        XmTp/tvML7ItIis6fXJfajbKvhgdFfNgKZ+HZaV6o9XFHg3OVEuC04QcBy9CF1uAy5mzLbWcwz+Zgpq/
+        yIEn4AScvsQJK3jIEd7oZaEaPTrDDA+xRxb/LrBG7JBViNM/QA9bIRwAID8BgC8O+snWpdIAAAAASUVO
+        RK5CYII=
 </value>
   </data>
   <data name="icon_ctxarrow" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -2487,14 +2477,13 @@
   <data name="edit" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABaElEQVQ4T6WSv07CUBSHWzWO
-        xtE/g08Am5rwDtCGm9w2oBAUW3SC0NAmDaEk3XgRB0PC0IEQFhYWJkYmJwbDwBscz6m2uYqViCf52vR3
-        zv1621wJAKT/EC6WZbmLvPyRLq2NBH3f98HzvJhOpwPtdhtc1wXHcaDVakGz2YR6vQ62bQO+rC8KBrRA
-        1/UVNgYRlmVBo9Gg4TjLZDKrSqUSZqIgIAGGAUKfRASGYUC1Wt3ITdMMM1HQw2CIMEEwLJfLUCqVaJh6
-        kZhm6LknCqKmeB9zzoExRoKxIIhntgkmiqJCNquQYLKLYKooecjl8iSY7iKYqSoHVdVIMNsqkDZrztgN
-        /oNbPC3S/Id+eIY+Lpt1jdGC8zvg/J4GFghlXypJ8IxTr6nU5ZrzBxQYkE5frSlDqBdXkmBZLD5BofAI
-        mlZDzE9qtJPlb4IDbJ4jI+QtAepdIIck+r6DPcyOkBPkLIFTzI+R/UjwDveQHRw0Mf7uAAAAAElFTkSu
-        QmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABYklEQVQ4T6WQvWrCYBSGtS0d
+        S8f+DL0C3dpC7kETDHyKtglpbWI7GRJUkBAFN2+kQyl06CDFxcXFydGpk0Nx8A5Oz/nyQxINofTAk+R7
+        z/s9Q3IA8C/4I5/PD5G3PzKMCt5HoxEMBoMQ13XBcRzo9/vQ6/Wg0+mAZVnQbreh2+0C3YkKPuhCrVbb
+        0HeAbdtgmiaVw0wQhI2maTyLCj5JQG+EzjzTdR2azeZObhgGz6KCMTJBZCQoTlRVBUVRqEy7IKcOncdR
+        wT6mjDGQZZkE08SOkyWYiaIEpZJIgllix8kSzEWxAuVyhQTzxI6TJVhIEgNJqpJgkdhxYoI9s5TlO/wH
+        99jKLb0oPqFgz9wiK8YegLFHKqz8LDZpglfku1C43jL2hAIdisWbLWX+Lpw0wbrReIF6/Rmq1RZi+LSo
+        uPYq3iQFR8gl8oX8pEC7K+QY2REcICfIGXKRwjlyihwieBdyv/eQHRy2xoTtAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_panup_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -2515,55 +2504,55 @@
   <data name="clipboard-paste" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        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
+        RBT1B7y5F+bFJBNnAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="map" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACnklEQVQ4T52RSU9TUQBGu1V/
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACnUlEQVQ4T52RSU9TUQBGu1V/
         gMYdS8PGhQtDXLgwcWEwMYYNCzYNFMFSBqENswwCgUIjg6KCgMVQELAyyVQGsVBskakWFASEgoWIYssU
-        huO7L/4A8SVf8hbnnLx3ryIoLS1QWth/LBBQKG6npKiklxM/fz2F4lZiYvixpNcOJdM8ms3QdAnOuVrs
-        c10Yp6bJsq2gG3QT0+lG3eImosmN4IUnf8FNrTbi8PiY55YEuuf02FbKGXWVs7lr4ZN3lro1H6lWN5lO
-        SLZDhNmN4IUnB27ExUXuHx1R3hlDq+sBlq8GOsf0fPe+ZmPHysjPJfI/LJD3GdIn4W7LMoIXnhy4rtGo
-        dw8PKWmJ5ElXLDX9iZgdOfRNGJicqcE2206dy0WGdZGEviU0HUsIXnhy4FpkZJTv4ICixnDq7EmYpzMx
-        DiQxvPyYhU0TP3Z66XX2Ylr7jX7+mNjuRQQvPDlwVaWK3trfR/8yDKNVS/1YCs+64+mZL8KxWsHqVjMO
-        V4P0K4tULO+j61tA8MKTA1eUytjNvT0KK1VUD8RTa9NR1qahbSaX/oWHONdrsE9XsOyz07nhIX3wC4IX
-        nhy4HBISt7G7i6EsgvyqUArqQiltV/OoPZrKHh317zKwOsuwT1XTNdFB8fA4gheeHLgUHBzv2dmhxKDG
-        aNZR3XuPAlMoJkcyZmeWdLWFNL3PZuVXI+vbgzQ5LAheeHLgYlCQdnV7m9J8Dab6FGpaE8g1KjGOaGn4
-        mCpdbQ4vLMlMearweFsYHH+F4IUnBy4EBiau+HyU5kVRnB+FvjicvAolebVK9A0qit+oefpWOpu+NLps
-        ekbGKxG88OTAuYCA+x7pVL95vf88wQtPDpzy87tzxt8/56QTnhyQntPSzko7f4IJ/rQI/AE63awC7yrB
-        bwAAAABJRU5ErkJggg==
+        huO7L/4A8SVfchfnnOTdqwhKSwuUFvYfCwQUitspKSrpcOLvr6dQ3EpMDD+WTrVDyTSPZjM0XYJzrhb7
+        XBfGqWmybCvoBt3EdLpRt7iJaHIjeOHJgZtabcTh8THPLQl0z+mxrZQz6ipnc9fCJ+8sdWs+Uq1uMp2Q
+        bIcIsxvBC08O3IiLi9w/OqK8M4ZW1wMsXw10jun57n3Nxo6VkZ9L5H9YIO8zpE/C3ZZlBC88OXBdo1Hv
+        Hh5S0hLJk65YavoTMTty6JswMDlTg222nTqXiwzrIgl9S2g6lhC88OTAtcjIKN/BAUWN4dTZkzBPZ2Ic
+        SGJ4+TELmyZ+7PTS6+zFtPYb/fwxsd2LCF54cuCqShW9tb+P/mUYRquW+rEUnnXH0zNfhGO1gtWtZhyu
+        BulXFqlY3kfXt4DghScHriiVsZt7exRWqqgeiKfWpqOsTUPbTC79Cw9xrtdgn65g2Wenc8ND+uAXBC88
+        OXA5JCRuY3cXQ1kE+VWhFNSFUtqu5lF7NJU9OurfZWB1lmGfqqZrooPi4XEELzw5cCk4ON6zs0OJQY3R
+        rKO69x4FplBMjmTMzizpaQtpep/Nyq9G1rcHaXJYELzw5MDFoCDt6vY2pfkaTPUp1LQmkGtUYhzR0vAx
+        VXraHF5YkpnyVOHxtjA4/grBC08OXAgMTFzx+SjNi6I4Pwp9cTh5FUryapXoG1QUv1Hz9K10N31pdNn0
+        jIxXInjhyYFzAQH3PdKtfvN6/3mCF54cOOXnd+eMv3/OSSc8OSB9p6WdlXb+BBP8aUDxBzrdrAKtK4Yr
+        AAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="layers-stack-arrange-back" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC20lEQVQ4T4WQa0hTYRjHz5c+
-        RV+iog9dIOmKFGYEfakgiyAkQfqQIeYNK8TEvGDYBbpgUFEjB1oLTGXOtebmdG5q25w7c21ubi53OdvZ
-        dnY7u29uK4Tg7X1XyhCpF36cc3if/+/Pc7DDZa+x4o6pHDVPw1jts0h53fMoCQH/gUSz62EkONuJYxVd
-        FClQJhPuSFbqCmcmNwPdoRk0my/YByVXS1q0oEfiMHWPWuc24+24XS420HwylJGU3jWDdcHJdmmZzBwe
-        Hcdp4Apnw45g2r8RJ50JqKxR6qXQKrMH0qJz1XM5Qa4ZCpioubVvETAlzjhjggjl0zftpKXGEGWH4kcc
-        s/K7NzVWVD4BsLVmrSNmRs0aSxTA5p+wIbsGEUz/UFkjmZ5JRxAGqc4ho8LoTgoOXeYBrKhNUon2ES0E
-        1CZPyif+FgB6MpHVOeMr+dj8K9kXfEsQBqnWfoNC50zwD5RwAXbinrgK7cPX+HAYpIS4H2iIeEZtj6Xy
-        WaJSmSdccwBK3U0snRze8QouCgB2vGWiGu3DUXlwDRGjeEofmF2OpKdMoYTYEIyLFoKxsYVATGmJph6w
-        TQHcFnPd6tXIZy0R3tErMwArbBbVon0+yck5xXLExRJ7gEDrT36e90Xz+WoOJzsGFv1whqx5p1bA55ei
-        ch3AjjUJ69E+jAmbAgbtzDH36oDM+4ur9iZHEPgfppdC6Y4BQxg2+5pZWgODQ0fP3CBI7EjjaAO0DT/m
-        mGZ48z7iw5THxRB4Vt/wKZAPW0aDim4D6BWGwal6PThf43cXXmBVYgdv8+5MLtKDD4eN0o8zTpKDewm2
-        irJvBP4TCjWzpgnRnpuDdRiG7YZsxQoauI1SI815JbT03x/Uy9r7dXhbHugb0Se1Le2tHhLtuMZs3na6
-        qnjL9v0wDw+yvZfahBIjPTKuD7I3A92hmb/NBbnmtYNsyLrzOqvrX6CZrYWll2Bu13oYvvwGlvytQyev
-        aMIAAAAASUVORK5CYII=
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAC2klEQVQ4T4WQe0hTURzHzz/9
+        Jf0TFf3RA5KeSGFG0D8VZBGEJEh/ZEj5wgoxMR8Y9oAeGFSU5EBrganMudbcnM5NbZtzd65N5+Zybne7
+        2+5ed083txVCcDpnlgyR+sGHw73n++B3wKHi16CgZTxDxdMQqHwWLql6HqEQ8D9QWLtuxpxpJUBpG00J
+        VfFlVzgtc4ZSY5uB77AGa7MD9iKuFDboYKfUbmofWprejLcjNoXEwAioYEpadNcM1wNONMuK5ebQ0AjB
+        QGcoHbIHkr6NOJiUX70UoV+KluQ2f1J8tnw6E5BpRgEs3NzYPQ9ZUkesY5QMZtM94WBkxiBtQ0GPuGbV
+        d09iOL9kFK436+xRM27WWiIQtf1EDem/kIHkD/VSONU5Zg8gI93ab1QaXXHhwUt8CPKbpGV4H/GsX2Ny
+        J7ySb344Ry2n9Y7YSjZW30r6hcASQEa6sceg1DuWBfsLeRAcvye5gfcRaL0EMtIiwge1ZCylsUUT2SzQ
+        idQTntmPwlx1bL0C/ePnXhBCcKxhtBzvw1W7CS0ZpfkqL5xaDCfHTcFliSEQE88GosOz/qjKEkk84Jj8
+        hDXqvNWlVUxZwvwjlychyKsXV+J9PimoaeVi2MmWuKFQ54t/nvFGsvlqDsVbeud9SENVvNMo0fklv0QP
+        wdE6UTXep2PUqkRGG2vYtdor9/ziaTzxQQyxxsRCMNnSawihZm89W2fo4DKR09dJChyuHapBaQOPuaZJ
+        /oyX/DDudnYI3atvBDTMhiNnYGm7AXaJQvBk9Rw8V+Fz5Z1nl4EDt/l3xuaZvocDRtnHSQfFJTwkR03b
+        NoLehMbN7AlSvPtmXxUAYBciB+TW8GplRob7SmTpud83J2/u0RNNWeBvTLfMurCnvF+8/SqrfuupGwVb
+        tu1DfjQ47b3MKpIamcGRuQBnM/Ad1vxpzkXkZMx4cBpO3XGN3fYvsCYnr+gisuxcc+IB4DeW/K1D9pQD
+        QwAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="icon_copy_disabled" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -2590,33 +2579,33 @@
   <data name="layer--minus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB+ElEQVQ4T6XSzU/TcBzH8e/N
-        TA8QNcSIAZGHiISgGP8BLx7Bg8GYOEQCKBAIAeHk1QtRiI8QlviALiwpY8jGgyMkuIw9MA7sQEEE09g6
-        azu3ggie5u9TR5w7kBqWvNJ+u++765ZRIpGg/aDzXW7IYSqYawZhFw1Reec7qAysRie+ab9CsrYT3At2
-        sIsGLZ27MwXX5fjOvKBsuY3ALhq0dLZjEsyR2Lbvk/xjygjsokFLZe0TcEOK/vR+jGyOG4FdNGiptM0F
-        NezRPby44Uy1KMTt3mX1lTv89alz4UvvSFDsBv9q1IoGLZW0jkHturw1Gxa0UVhYj3Es6h8OiA84/+f7
-        Ot9fHl55jQYtnWl5C3UfIpszLLS/X1IGR4LSQ84n9nJ+XY9+xPznWo+HV61o0NLpZgc0LIkb09Nh+SX7
-        1MfD/n88YvMu/T12AxsatFTUaIfbobXvLntA7GOeJeE8dcZ1ffYsKxyahgtVRAW3OGjyrqgOR1Cy7GJf
-        wwKYbZcq+aHsXMXG4MidzI8NHMwUrET9lFdngxb2y7pGQ9Jz3XzymJwHTuSq22ZzIl0fUYgOHCum7OrB
-        +jeza5PsLzo+t6I60724XCV15xXEdacKtXs5+VqXKUO4iSdgr8OHSisuHrnypO3oVctdI7CLBi1uYGKy
-        mOP/CY3pN4OVZi86RL5AAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB9UlEQVQ4T6XSzUsUcRzH8e9N
+        Ng9FiUSKD/lAJaIp/QNeOqqHUIRWLcyyMKTSk1cvUkpWKgqV1tLCuK6160MrgS3bPrge2oOr+cTgjOs0
+        s+6OZtpp+33GlTYPMtHCi9/Mj+97nliKxWL/hUrbHJDBlDM1OmEWDVFJ60eo8C6FJ76rv/ySuu87DmYw
+        iwYtXX40Bdel6P4sL+869MAsGrRU/HASjKHInntN+jGlB2bRoKWiBxNQJ4Z/upZDO+N6YBYNWipssUM9
+        ezRnUNi2JfrKRy2uBWXIEdh8YZvb6B71CZ3gWQqb0KClgvsf4OaqtDsT4NUxmFuNcCzqH/EKTzjP+mON
+        +w9nUH6DBi1dan4PDd9CO59YaPk8Lw+P+sSnnFvo5jyaLm3F+cFelzOomNCgpQv3rNA4L2xPTwek1+yu
+        z0Y8f+lJoO2xC5jRoKX8Jgvc8a9s2S1eoY/pjcNx4vnhXq9zQebQNF6pIsq9zcFd16JitfrEwUPsNTQ4
+        Nl+tCL5Ly5TNDFYuKycycOIUbyLqp+wGMzSzL2sf84svNbPxNW4gPVPZMxpjR/UR+Snp7EVKqx2+9XZm
+        ZZL9Rce/LCq2o15VVomd2blRzfk8tSMjR20znORv4AnY73RyYXnZmWvPW1KqB9v1wCwatLiAgUllzv0j
+        1pDhN4OVZi+iACrtAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="sql-join-inner" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACZ0lEQVQ4T6WTW0jTYRjGPwy6
-        CGrJKrDALooSSaQjdRERnQk6QAeN0gvFIiGZMRdouqRYjC1M3SZmZqnVTjh1Ot3MtTLdFLWRzrb+Oufc
-        Wtsa22xBEKzvkQndb/Dje3ne5/fu6k/i8ThJhqRk/DHJvqsju7n9ZE+ZnrWXZzhIOU/JxXum0noO/J+h
-        gy4cuCsH0k8/NN2QD7ulrsDvvkD0z0T7QGioUOCPAMzIsEMHXXogfeUA60S1MX/aHVEtBGOD8/6Y/tNU
-        2HytgolK1CEXwIwMO3TQhUMPsEgWp+dw6wen1OmPGRjfLx0tDZSIppwl4m++dkPUBjAjww4ddOHAJZl3
-        unJmFqNaW4K5HzHjgVxdRNjmnXmqDg4JXvsN9xtdY/tzdGHthLeu7aPrkdqyKBq2B1/BJTuLO4roVdPn
-        +XAH+OqJ6refUv4VKwKm8ufeLiBSBN4j0457G6R6plLaz1T1Tn5vhEu23VTmjc+FNBbmp0o36WvSjHpk
-        GWc1EW69c/Rek6cbYEamHHHX1/Q4+DW9Dr7a7JbAJVsL3pys1doaO8c8TaIue3WDflZ4gTPiuML7slDe
-        7NUBzMiwE3baH0j6mMf8t5NP4JIt+a3sXcWK0pfG2Tpxt11QrZrmi1WM/NB16xJXsmgFmJEt72gH3czb
-        cg5csjb7Ikk9zsvYUdTO5bVYapsHZ2Uqs7uFK2HeHSlYWAKYkb2gO3TQhQMXv1WUDavTsvaxjpXlsS9J
-        StlXn1WwL8s4aUerbgHMyxndoYMunIRLUuiwJhFspm8aZSNlPWVdglT6bkrs0IEMJyX5jymZTxnuP42L
-        XZ3g33aHAAAAAElFTkSuQmCC
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACZ0lEQVQ4T6WTW0iTYRzGXwy6
+        CMpkFVhQF0WJJNIRu4iIzgQdoING6YVikZDMmAs0XaNYjC1M/aaYmaVW6oZTp59uplmmm6JL0tnsm3PH
+        bFvDzRYEwXofmdDFLpIGP/bw/J/fe/eRcDj8X0QtlwNJvs2SXYJusjtfG7tHqEuhnKWk4f9U0fgZ8HdH
+        ScEWDtylBzafvN9/rXHQobB5f3Z5g7/GGnr8A1kSTwAgo8MNG2zhLD0Qe0zclzHpCCjtvlDvrCek/TAx
+        r79SyAUZld8GkNHhhg22cOCSJH7Hwbp3VoXVE9Jxcz9YOurJlU1Yc+Vf5hp0QRNARocbNtjCgUsSb7Wl
+        TjmDGlOEmW+hvv1pbEBa7556rPINSF56dHerbCP7Utl5zZi7rP697YHK4JQNmn0v4JIdOS3Z9NX+j7Pz
+        LeCzK6jddqL5t7zJ21/w1N0GZE3et+g0o+5KhZYrUnRzxZ3Gr1VwydbrzemjM361gfuuZI1z1ephV0XC
+        aXVAUG4dvlPtagfI6JqHHOUlHdOiks5pkUrvYOCSLZmvjpdqTFWtI65qWZtZXKm1SM/xh6YvCT/ZC2rc
+        LEBGh5u01XyP6eIeil4bH8ElmzLqeDtzmvKe91nK5O1miVg5KZIrucYDV8cXBIxzHCCjW7zRDbaJNxv5
+        cMnq5PMk7qgwYXt2g0BYayit6bVUKPWOWgHDvTmUaV8AyOie0Rs22MKBi98KyrqV8Ul7Y4/kp/MuMHm8
+        y08KeRcr+PGHi28A5MWO3rDBFk7EJTGUVZFiIyWesp6ylrImQhxlAwU3bLCFExP1A1kOUct/J0z+AI2L
+        XZ2e82tVAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="icon_zoomin" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -2637,36 +2626,36 @@
   <data name="application-search-result" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACjUlEQVQ4T5XST0iacRgH8J/W
-        IBFGtEteOtRBL7u4SycbImRYw8IGrR3Nav9gDrbDTpHBW5c22A6NatHB0TKSFbWSTpqtJmOyUMM2h2j+
-        yVI0fE2MZ8/zshdcu2wvfPDnw+/5vs9Pf8xkMjFRb29vM+pDln9A+5pZT09PtX6v17sfDochEAiA3+8H
-        n+8z7OzsgMfjhe3tT+D1foHd3X1YX/fsY28/MxqN1YZdLhdsbGzA2toarK6ugtPphKWlJVhYWAC73Q7z
-        8/MwNzcHMzMzUFNTY2E4RrVB+I8HewdZd3d3taFCoQDpdBpOTk7g7OwMyuUyVCqVv1xcXAD2DjGDwSDo
-        7OxkXV1d9w4PDyGbzQLP84JisSgolUp/oGDaz9rb2wV6vb7FarWOpVKpc5vNtqVSqV4RWmcymfN8Pi9M
-        JKLwjo6OB0yn04lMPp/vG8dxm7fuWLi9YGxxLxRbNN4dHKcaHQmDhOkIHRV7HzGNRiO6j28vtrW1Tbx1
-        Be3vPNEV4nCHHVSj3yUajcLx8bEgl8sB9j5mra2toofJZLKI5xp1eL6/D8Tym2Tra2yFavF4HEKhEBwd
-        HQloIux9wtRqtagPL0xgampqeYR7OfIjkf34M5lzTbx4baPawcGBcLFoCkITYe9TplAoWGNjI9FMT097
-        IpEIPzs767BYLM8IrYPBIO92u4H+oUQiIaBjKJXK56y2tpbhjVKbzebl09NTmJyc3MXbGMaReUJrrVb7
-        pr6+fuyyhoYGMwXcxGYnNQ8MDDjxuw4No9HfaH29rq5OIpfLWTUMZBTAUTOGfMBJbkilUnaZRCJh4oN7
-        mEwmE4KEACz0Y8g4ft7GTSrUgpqQAl1DV5EMXUFSMYhCKOAXo8sWCvVAT3EAAAAASUVORK5CYII=
+        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
 </value>
   </data>
   <data name="layers-stack" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACm0lEQVQ4T4WQ3UtTYRzHn5uu
-        pC7CoouyCwmioiih/oLugroRKgi1F6QQGb0oQqHQTYFdJG1gpaBZOnVN3dqrbTu24xrOHffiXs7Zdjw7
-        287Ldvbizui25xEmxzHqgQ/n7ff9ffkc0DFoBw20weebkLv/Ac20NYbBlQHbLWdYXNrJ12y0KFuagb6h
-        GTSrXLDXDF9q1JZE8M1SzN2M9ybKZSZ4fUqQrZdfWO/tL6g3bySkEC3WRIqXs40kBTmHxwrpUUPMSeaq
-        xkvPzF1owYHm4fkwpbEmi2MmSlAybk/ytoDAkFw1O6IN/9pmK4aLT009+8715nC6UqI4+Q9sqNWhuGoN
-        Nstqa4LbZnfTQ18DWGCnvHxBZXwAkAfyMW5mPUGmknHH8qI/Var5ksVdJbFstfZWH83BIPN8inD5kiX9
-        uf6VRwB5IB+9N4P76RLrDAuil5JkD1moKAmly/LrxW0OLt3pn/C5PKSkO9u31AuQB/LR4gzupYqMleCE
-        tUi+ag/wRTPBST/8nGTczEnuaL78ajaYW49LdO+4F1uL5nVnHuueAOSBfKZdNI5FRHrWnc4tb2TLut9s
-        QYkjLJQHp4ksFsmn7n/wYPD6vb13oQ8gD+QzZopjMEh9/pliv7mZyoKHrcx72HKd1ZAgD34hRNicUU1u
-        EBOrlPFk98xDgDzgtrkRbXBV582Qk45UVGMhM2pznFOyuM4Ubo9i9LQzETnV89XQ2qlRHb7a1QGQh2WL
-        nxme27JPOpIp7TpLzeFpshF7UEgfaAbgBACgBSAPW4DXvjNEp4Zm/I6BKR/ejI+2eEjZfOjoaZiHB3l8
-        ssVXrAF+Hv7x2Wagb2hmzxmA9r3m+jlyrbsD+Ry7M/HyX7R2qlUt529ch7nj+2F48xccaJZr1sn7YAAA
-        AABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAClUlEQVQ4T4WQS2sTURiGZ+Oq
+        6EKquNC6KIKoKFrQX+BO0E1BBWnrhaKUEry0FJQW3CjUhcUEqraQ2NqmbUzbxFxrkqmZxtA001yay0yS
+        6cwkmUsyuTQT3HpOtTA2QQ88DJzzvd/LM0jHoHM/bYDrgNv/Ac60NSy4NOC44Y6Ki9uFuoMSZVsz4Buc
+        gbPK8G4zuNSobanwq8WEtxlvLaTHivPGjCDbLz6z32loXk9JEUqsiyQv5/aTFuQ8ligyo6aEm8jXzBee
+        WLsamofnoqTGni6NWUhBybgzzTtCAk1wtdyIPvp9i62azj+29DQ0R5lqmeTkn6ChvgfJ1eqgWVbbU9wW
+        u8MMTYfQ0HZl6ZzKfA+BHtDHvJHzhelq1psoiMFMuR5Il3aUJHK1+mtjPA+C9FMt7gmky8Yz/csPEOgB
+        fYz+LBakyqw7Koh+UpJ9RLGqJMJU5JcLWxxYtt0/EfD4CMlwum+xF4Ee0EeP0ZifLNF2nBNWY4WaM8SX
+        rDgnfQ1yknkjL3njhcqLmXB+LSlRveN+dDVeMJx6aHiEQA/oo/NQGBoTqRkvk19az1UMP9iiEldUqAzq
+        8BwaK2TuvvOh4PulvXe+D4Ee0GfMkkRBkPz4LcN+9tLVeR9bnfOxlT1WIoI8+AkXQXNWNbmOT6yQ5uPd
+        U/cR6AG2zY7owysGf5aYdGXiGhuRVVuTnJKFNbp4cxSldO5U7ETPtKm1U6M6eLmrA4Eetk1+anh20znp
+        Smf0ayw5izHEfpxhgfmrGUGOAVoQ6OEI8fo3prh2aCroGtAGsGa8dyQjyuYDh0+CPDhw2wdHctke4ufA
+        H59pBnyDM3+a2wEtu2F4Dl3p7oBbj9yaeP4vWjvVqpaz166CyNHfSXgQ5BccaJZrYeZTrwAAAABJRU5E
+        rkJggg==
 </value>
   </data>
   <data name="ColorBrewer" xml:space="preserve">
@@ -4403,36 +4392,39 @@
   <data name="document--minus" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAB20lEQVQ4T42SO0hbYRTHz2jo
-        5qBZOgiJgwgl6dAgqCAIBlQqRnBQQTDGoEFuCAbfIkK3Lg5GXLUdOrVD3IVujjo4lYpRkeAj7/fxfy45
-        i4+rH/zg3sv3/3HOuYd8a2skjKyvD4DpN3AMr67S0NISfV1cpMHxTiL5UCeQrVT4rljkm1yOE5kMn6fT
-        /D+VMvl9dMS4FwBOFYjEtNWZSZdKnETw6uGB/yWTfHZ9zaeXl3ySSPBBPM5ycHcGOCVsCgajUSWYgeA2
-        m31Rsr2/z4rT610BJFB/JKLM5splvkf5r0mkEmkHmVnNUZ9hKHN5zCCVz1tKRIDMnOaoNxRSQgUIMoWC
-        pUQGi0xIc9QTDCrzpWqVc5iDlUT+DjLzmqMuv18xyhAUMAcryQ1aRMbQHHVMTirhSq3GRbRhJZE9QSYs
-        OcPlIvoyNqZEqhBIFVaSFFpEJvLdbqefhPN5dFRZqGFRKhA8lfydmuK4y2Vy6Hbzns12gfDxD6JdcnR3
-        0yefT4jKptVQxVPJL4TyExPPiEEiRdBHj4davd5lc1dfkPzx+3kHEiEGFhoaEhsIb0kFODbQ1OzxbKrA
-        lACZiQxWWpJfLHtSxLvclUw9S414aLe1tIQ/tLV9ew9yVzKg8REGvINQesvmrAAAAABJRU5ErkJggg==
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABzElEQVQ4T42STSjDcRjHn6Pl
+        tgMuDsocpLQ5WAqllBUiUw4oZVgsTWvL6yTl5uKAXIeDE4e5KzdHDk4iG2l52fv74/n+289h+PPU5/D/
+        9Xw/Pb/n/yP72prGsN/fJ0z9Qf3Q6ioNLi3RwOIi9Y+1E+GgxHQin+e3TIZfkkkOxeP8EIvxfTSqcXpx
+        wegRTEoANFuJmVg2yxEJPn188F0kwrfPz3wTDvN1KMSHwSCj0CeYvgT9Pp/CGRfBayLxo2QnEPjCZLOt
+        CASo1+NRzCZzOX6X8X+TYBJcB70qRz1ut2IuJTuIplK6EgjQq3LU7XIpXGkRxNNpXQkWi16Voy6nUzGf
+        LRQ4KXvQk+DvoFflqMPhULhzIkjLHvQkL3KGXpWjtokJxUK+WOSMXENPgneCXmTcZjNR6+iowlMQAabQ
+        k0TlDL3bNTV0TFItIyMKb1EeSl4E5ZLLyUkOms0a5xYLHxgMjxK+OiLap/rOTmq224EPL60oU5RLTiSU
+        Gh//xp5IMATVWq3UYLMtQ4Aql5w5HLwrErAneCsqQusS3sQEUgahqtpq3SjltcJ1sBMsFiL8YryTjHyj
+        F5lSloxCk6GubqGysXHrP6AXGSIyfgIGvINQcFyFeQAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="layers-stack-arrange" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         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
-        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
+        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACuElEQVQ4T4WQX0hTURzHz0tP
+        0ktE9FAGSX+RwgQheqioIIgokh6ywvwTVphppVFE9dA/osDChKIJiqZzrW06nZvObTo3h9O5eXXbve5u
+        u7vb3Xa33c1t9SBxO0dRbiJ24MPl3vP5/r73HFB0qREUPhoUkgu5ACn5D8jJBZWvY/8MONKguajDonIf
+        m9V4o5mB9UB7yEGucMBSM/zY/Fk973grdxnX42MfrlfZwjIyklEX1KuvLw248tK/2jwxH8e80Wx0nkkH
+        1+IJZ0Jjrhj1vselw0Np5eEHqlJQ8YothkNICL8RdY2xxW5dIoLDQc/F2OhsINV76H5/GSh5SpGK0SS3
+        0oxRKQ62/YYN2RUIJv1LPsL9qXpDL8Ig9bjDbrD7kor8WmUFOH8P49F5lJMhs8Ofoo0ulp0iuazVk1gQ
+        4g4uZJELg9TDVpvB6uFkB2t6boLjZUYenUdmoU0wSOmwSMRCJDJmPJ4SMkOlMsiFw3w1IqsefpPur5ZX
+        gYLifh6dRzzmN1mIOKWeZiIjc2x60BHhVDYmoZxk4r2TofioM5ZCrskd9976YtGPOFnpntvSO2DvWSn6
+        LUWbnjQa5lhvp9EfUkwEkz/G6ZiQYSyaRC50yPImswE+f+ZVSarB7tMS+Fuc7FO/2wCD+DetJ/Dd6F+Q
+        mAPJboRpmaGZSBq5sJmuFU3YREOEcseN9kqQd0aBpna9EDu00nGaaBkmnc0DBN2kwhkhEjMVQ26bzjO7
+        s6xDufVyc+3motJCcOCclh+YDrc/67JrWrQeUmwKEJ1jFL4WeCcUclebAdgOyYGXaOU19rD4Q4+z9Un7
+        lK6h1WqqF4DeEV817hnkrjRv2rIL5uE6epUgG7sYVm0Pd/dNMZ3rgfaQg1wYyYPkLIXRyj8lunaiPOg7
+        WRHmNwI5+469uwsj25aTaAHwF5D4p3XcStYrAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="document-search-result" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\document-search-result.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="document_code" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\document-code.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
 </root>
\ No newline at end of file

Copied: branches/maestro-5.0.x/Maestro.Editors/Resources/document-code.png (from rev 7857, trunk/Tools/Maestro/Maestro.Editors/Resources/document-code.png)
===================================================================
(Binary files differ)

Modified: branches/maestro-5.0.x/MaestroAPITests/RuntimeMapTests.cs
===================================================================
--- branches/maestro-5.0.x/MaestroAPITests/RuntimeMapTests.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/MaestroAPITests/RuntimeMapTests.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -40,6 +40,8 @@
     using OSGeo.MapGuide.ExtendedObjectModels;
     using OSGeo.MapGuide.ObjectModels.LayerDefinition;
     using OSGeo.MapGuide.ObjectModels.DrawingSource;
+    using OSGeo.MapGuide.MaestroAPI.Commands;
+    using MapModel = OSGeo.MapGuide.ObjectModels.RuntimeMap;
 
     [SetUpFixture]
     public class TestBootstrap
@@ -1280,6 +1282,288 @@
         {
             base.TestMapAddDwfLayer();
         }
+
+        [Test]
+        public void TestCreateRuntimeMapRequest()
+        {
+            if (_conn.SiteVersion < new Version(2, 6))
+            {
+                Assert.Ignore("Skipping test (TestCreateRuntimeMapRequest). MapGuide is older than 2.6");
+                return;
+            }
+
+            int[] cmds = _conn.Capabilities.SupportedCommands;
+            Assert.True(Array.IndexOf(cmds, (int)CommandType.CreateRuntimeMap) >= 0);
+
+            //Barebones
+            ICreateRuntimeMap create = (ICreateRuntimeMap)_conn.CreateCommand((int)CommandType.CreateRuntimeMap);
+            create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
+
+            MapModel.IRuntimeMapInfo rtInfo = create.Execute();
+            Assert.NotNull(rtInfo.CoordinateSystem);
+            Assert.IsNullOrEmpty(rtInfo.IconMimeType);
+            Assert.NotNull(rtInfo.Extents);
+            Assert.NotNull(rtInfo.Layers);
+            Assert.True(rtInfo.Layers.Count == 0);
+            Assert.NotNull(rtInfo.Groups);
+            Assert.True(rtInfo.Groups.Count == 0);
+            
+            //Barebones with tiled
+            create = (ICreateRuntimeMap)_conn.CreateCommand((int)CommandType.CreateRuntimeMap);
+            create.MapDefinition = "Library://UnitTests/Maps/SheboyganTiled.MapDefinition";
+
+            rtInfo = create.Execute();
+            Assert.NotNull(rtInfo.CoordinateSystem);
+            Assert.IsNullOrEmpty(rtInfo.IconMimeType);
+            Assert.NotNull(rtInfo.Extents);
+            Assert.NotNull(rtInfo.Layers);
+            Assert.True(rtInfo.Layers.Count == 0);
+            Assert.NotNull(rtInfo.Groups);
+            Assert.True(rtInfo.Groups.Count > 0);
+            Assert.NotNull(rtInfo.FiniteDisplayScales);
+            Assert.True(rtInfo.FiniteDisplayScales.Length > 0);
+
+            //With Layer/Group structure
+            create = (ICreateRuntimeMap)_conn.CreateCommand((int)CommandType.CreateRuntimeMap);
+            create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
+            create.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups);
+
+            rtInfo = create.Execute();
+            Assert.NotNull(rtInfo.CoordinateSystem);
+            Assert.IsNullOrEmpty(rtInfo.IconMimeType);
+            Assert.NotNull(rtInfo.Extents);
+            Assert.NotNull(rtInfo.Layers);
+            Assert.True(rtInfo.Layers.Count > 0);
+            foreach (var layer in rtInfo.Layers)
+            {
+                Assert.Null(layer.FeatureSource);
+                Assert.True(layer.ScaleRanges.Count > 0);
+            }
+            Assert.NotNull(rtInfo.Groups);
+            Assert.True(rtInfo.Groups.Count == 0);
+
+            //With Layer/Group structure and inline icons
+            create = (ICreateRuntimeMap)_conn.CreateCommand((int)CommandType.CreateRuntimeMap);
+            create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
+            create.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups | RuntimeMapRequestedFeatures.Icons);
+
+            rtInfo = create.Execute();
+            Assert.NotNull(rtInfo.CoordinateSystem);
+            Assert.IsNotNullOrEmpty(rtInfo.IconMimeType);
+            Assert.NotNull(rtInfo.Extents);
+            Assert.NotNull(rtInfo.Layers);
+            Assert.True(rtInfo.Layers.Count > 0);
+            foreach (var layer in rtInfo.Layers)
+            {
+                Assert.Null(layer.FeatureSource);
+                Assert.True(layer.ScaleRanges.Count > 0);
+                foreach (var sr in layer.ScaleRanges)
+                {
+                    Assert.NotNull(sr.FeatureStyle);
+                    Assert.True(sr.FeatureStyle.Count > 0);
+                    foreach (var feat in sr.FeatureStyle)
+                    {
+                        Assert.NotNull(feat.Rules);
+                        Assert.True(feat.Rules.Count > 0);
+
+                        foreach (var rule in feat.Rules)
+                        {
+                            Assert.IsNotNullOrEmpty(rule.IconBase64);
+                        }
+                    }
+                }
+            }
+            Assert.NotNull(rtInfo.Groups);
+            Assert.True(rtInfo.Groups.Count == 0);
+
+            //Kitchen sink
+            create = (ICreateRuntimeMap)_conn.CreateCommand((int)CommandType.CreateRuntimeMap);
+            create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
+            create.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups | RuntimeMapRequestedFeatures.Icons | RuntimeMapRequestedFeatures.FeatureSourceInformation);
+
+            rtInfo = create.Execute();
+            Assert.NotNull(rtInfo.CoordinateSystem);
+            Assert.IsNotNullOrEmpty(rtInfo.IconMimeType);
+            Assert.NotNull(rtInfo.Extents);
+            Assert.NotNull(rtInfo.Layers);
+            Assert.True(rtInfo.Layers.Count > 0);
+            foreach (var layer in rtInfo.Layers)
+            {
+                Assert.NotNull(layer.FeatureSource);
+                Assert.IsNotNullOrEmpty(layer.FeatureSource.ClassName);
+                Assert.IsNotNullOrEmpty(layer.FeatureSource.Geometry);
+                Assert.IsNotNullOrEmpty(layer.FeatureSource.ResourceID);
+                Assert.True(layer.ScaleRanges.Count > 0);
+                foreach (var sr in layer.ScaleRanges)
+                {
+                    Assert.NotNull(sr.FeatureStyle);
+                    Assert.True(sr.FeatureStyle.Count > 0);
+                    foreach (var feat in sr.FeatureStyle)
+                    {
+                        Assert.NotNull(feat.Rules);
+                        Assert.True(feat.Rules.Count > 0);
+
+                        foreach (var rule in feat.Rules)
+                        {
+                            Assert.IsNotNullOrEmpty(rule.IconBase64);
+                        }
+                    }
+                }
+            }
+            Assert.NotNull(rtInfo.Groups);
+            Assert.True(rtInfo.Groups.Count == 0);
+        }
+
+        [Test]
+        public void TestDescribeRuntimeMapRequest()
+        {
+            if (_conn.SiteVersion < new Version(2, 6))
+            {
+                Assert.Ignore("Skipping test (TestCreateRuntimeMapRequest). MapGuide is older than 2.6");
+                return;
+            }
+
+            int[] cmds = _conn.Capabilities.SupportedCommands;
+            Assert.True(Array.IndexOf(cmds, (int)CommandType.CreateRuntimeMap) >= 0);
+
+            //Barebones
+            ICreateRuntimeMap create = (ICreateRuntimeMap)_conn.CreateCommand((int)CommandType.CreateRuntimeMap);
+            create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
+
+            MapModel.IRuntimeMapInfo map = create.Execute();
+            IDescribeRuntimeMap describe = (IDescribeRuntimeMap)_conn.CreateCommand((int)CommandType.DescribeRuntimeMap);
+            describe.Name = map.Name;
+            MapModel.IRuntimeMapInfo rtInfo = describe.Execute();
+
+            Assert.NotNull(rtInfo.CoordinateSystem);
+            Assert.IsNullOrEmpty(rtInfo.IconMimeType);
+            Assert.NotNull(rtInfo.Extents);
+            Assert.NotNull(rtInfo.Layers);
+            Assert.True(rtInfo.Layers.Count == 0);
+            Assert.NotNull(rtInfo.Groups);
+            Assert.True(rtInfo.Groups.Count == 0);
+
+            //Barebones with tiled
+            create = (ICreateRuntimeMap)_conn.CreateCommand((int)CommandType.CreateRuntimeMap);
+            create.MapDefinition = "Library://UnitTests/Maps/SheboyganTiled.MapDefinition";
+
+            map = create.Execute();
+            describe = (IDescribeRuntimeMap)_conn.CreateCommand((int)CommandType.DescribeRuntimeMap);
+            describe.Name = map.Name;
+            rtInfo = describe.Execute();
+
+            Assert.NotNull(rtInfo.CoordinateSystem);
+            Assert.IsNullOrEmpty(rtInfo.IconMimeType);
+            Assert.NotNull(rtInfo.Extents);
+            Assert.NotNull(rtInfo.Layers);
+            Assert.True(rtInfo.Layers.Count == 0);
+            Assert.NotNull(rtInfo.Groups);
+            Assert.True(rtInfo.Groups.Count > 0);
+            Assert.NotNull(rtInfo.FiniteDisplayScales);
+            Assert.True(rtInfo.FiniteDisplayScales.Length > 0);
+
+            //With Layer/Group structure
+            create = (ICreateRuntimeMap)_conn.CreateCommand((int)CommandType.CreateRuntimeMap);
+            create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
+
+            map = create.Execute();
+            describe = (IDescribeRuntimeMap)_conn.CreateCommand((int)CommandType.DescribeRuntimeMap);
+            describe.Name = map.Name;
+            describe.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups);
+            rtInfo = describe.Execute();
+
+            Assert.NotNull(rtInfo.CoordinateSystem);
+            Assert.IsNullOrEmpty(rtInfo.IconMimeType);
+            Assert.NotNull(rtInfo.Extents);
+            Assert.NotNull(rtInfo.Layers);
+            Assert.True(rtInfo.Layers.Count > 0);
+            foreach (var layer in rtInfo.Layers)
+            {
+                Assert.Null(layer.FeatureSource);
+                Assert.True(layer.ScaleRanges.Count > 0);
+            }
+            Assert.NotNull(rtInfo.Groups);
+            Assert.True(rtInfo.Groups.Count == 0);
+
+            //With Layer/Group structure and inline icons
+            create = (ICreateRuntimeMap)_conn.CreateCommand((int)CommandType.CreateRuntimeMap);
+            create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
+
+            map = create.Execute();
+            describe = (IDescribeRuntimeMap)_conn.CreateCommand((int)CommandType.DescribeRuntimeMap);
+            describe.Name = map.Name;
+            describe.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups | RuntimeMapRequestedFeatures.Icons);
+            rtInfo = describe.Execute();
+
+            Assert.NotNull(rtInfo.CoordinateSystem);
+            Assert.IsNotNullOrEmpty(rtInfo.IconMimeType);
+            Assert.NotNull(rtInfo.Extents);
+            Assert.NotNull(rtInfo.Layers);
+            Assert.True(rtInfo.Layers.Count > 0);
+            foreach (var layer in rtInfo.Layers)
+            {
+                Assert.Null(layer.FeatureSource);
+                Assert.True(layer.ScaleRanges.Count > 0);
+                foreach (var sr in layer.ScaleRanges)
+                {
+                    Assert.NotNull(sr.FeatureStyle);
+                    Assert.True(sr.FeatureStyle.Count > 0);
+                    foreach (var feat in sr.FeatureStyle)
+                    {
+                        Assert.NotNull(feat.Rules);
+                        Assert.True(feat.Rules.Count > 0);
+
+                        foreach (var rule in feat.Rules)
+                        {
+                            Assert.IsNotNullOrEmpty(rule.IconBase64);
+                        }
+                    }
+                }
+            }
+            Assert.NotNull(rtInfo.Groups);
+            Assert.True(rtInfo.Groups.Count == 0);
+
+            //Kitchen sink
+            create = (ICreateRuntimeMap)_conn.CreateCommand((int)CommandType.CreateRuntimeMap);
+            create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
+            
+            map = create.Execute();
+            describe = (IDescribeRuntimeMap)_conn.CreateCommand((int)CommandType.DescribeRuntimeMap);
+            describe.Name = map.Name;
+            describe.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups | RuntimeMapRequestedFeatures.Icons | RuntimeMapRequestedFeatures.FeatureSourceInformation);
+            rtInfo = describe.Execute();
+
+            Assert.NotNull(rtInfo.CoordinateSystem);
+            Assert.IsNotNullOrEmpty(rtInfo.IconMimeType);
+            Assert.NotNull(rtInfo.Extents);
+            Assert.NotNull(rtInfo.Layers);
+            Assert.True(rtInfo.Layers.Count > 0);
+            foreach (var layer in rtInfo.Layers)
+            {
+                Assert.NotNull(layer.FeatureSource);
+                Assert.IsNotNullOrEmpty(layer.FeatureSource.ClassName);
+                Assert.IsNotNullOrEmpty(layer.FeatureSource.Geometry);
+                Assert.IsNotNullOrEmpty(layer.FeatureSource.ResourceID);
+                Assert.True(layer.ScaleRanges.Count > 0);
+                foreach (var sr in layer.ScaleRanges)
+                {
+                    Assert.NotNull(sr.FeatureStyle);
+                    Assert.True(sr.FeatureStyle.Count > 0);
+                    foreach (var feat in sr.FeatureStyle)
+                    {
+                        Assert.NotNull(feat.Rules);
+                        Assert.True(feat.Rules.Count > 0);
+
+                        foreach (var rule in feat.Rules)
+                        {
+                            Assert.IsNotNullOrEmpty(rule.IconBase64);
+                        }
+                    }
+                }
+            }
+            Assert.NotNull(rtInfo.Groups);
+            Assert.True(rtInfo.Groups.Count == 0);
+        }
     }
 
     [TestFixture(Ignore = TestControl.IgnoreLocalNativeRuntimeMapTests)]

Modified: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Commands/CommandType.cs
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Commands/CommandType.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Commands/CommandType.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -55,6 +55,14 @@
         /// <summary>
         /// Retrieves information about cached FDO connections
         /// </summary>
-        GetFdoCacheInfo
+        GetFdoCacheInfo,
+        /// <summary>
+        /// Creates a new Runtime Map and describe its structure
+        /// </summary>
+        CreateRuntimeMap,
+        /// <summary>
+        /// Describes the structure of an existing runtime map
+        /// </summary>
+        DescribeRuntimeMap
     }
 }

Copied: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Commands/CreateRuntimeMap.cs (from rev 7846, trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Commands/CreateRuntimeMap.cs)
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Commands/CreateRuntimeMap.cs	                        (rev 0)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Commands/CreateRuntimeMap.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,103 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using OSGeo.MapGuide.ObjectModels.RuntimeMap;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace OSGeo.MapGuide.MaestroAPI.Commands
+{
+    /// <summary>
+    /// Create a runtime map from the 
+    /// </summary>
+    public interface ICreateRuntimeMap : ICommand
+    {
+        /// <summary>
+        /// The resource id of the Map Definition to create a Runtime Map from
+        /// </summary>
+        string MapDefinition { get; set; }
+
+        /// <summary>
+        /// The name to assign to the created runtime map. If null, then MapGuide will
+        /// auto-generate one based on the Map Definition ID
+        /// </summary>
+        string TargetMapName { get; set; }
+
+        /// <summary>
+        /// A bitmask specifying what pieces of information to include in the CREATERUNTIMEMAP response.
+        /// Use the <see cref="E:OSGeo.MapGuide.MaestroAPI.Commands.RuntimeMapRequest"/> to determine what
+        /// valid values you can use.
+        /// </summary>
+        int RequestedFeatures { get; set; }
+
+        /// <summary>
+        /// The number of icons to render inline (as base64 images) per scale range in each layer of the map
+        /// </summary>
+        int IconsPerScaleRange { get; set; }
+
+        /// <summary>
+        /// The icon image format (default: PNG)
+        /// </summary>
+        string IconFormat { get; set; }
+
+        /// <summary>
+        /// The width of each inline icon that will be rendered (default: 16)
+        /// </summary>
+        int IconWidth { get; set; }
+
+        /// <summary>
+        /// The height of each inline icon that will be rendered (default: 16)
+        /// </summary>
+        int IconHeight { get; set; }
+
+        /// <summary>
+        /// Executes the request and returns the structure of the created runtime map
+        /// </summary>
+        /// <returns>The structure of the runtime map</returns>
+        IRuntimeMapInfo Execute();
+    }
+
+    /// <summary>
+    /// A bitmask that defines what information to include in a CreateRuntimeMap or DescribeRuntimeMap
+    /// response.
+    /// </summary>
+    public enum RuntimeMapRequestedFeatures : int
+    {
+        /// <summary>
+        /// No features
+        /// </summary>
+        None = 0,
+        /// <summary>
+        /// Include layer and group structure
+        /// </summary>
+        LayersAndGroups = 1,
+        /// <summary>
+        /// Include inline icons for each layer. Does nothing if <see cref="E:OSGeo.MapGuide.MaestroAPI.Commands.RuntimeMapRequest.LayersAndGroups"/>
+        /// is not included in the mask
+        /// </summary>
+        Icons = 2,
+        /// <summary>
+        /// Include feature source information for each layer. Does nothing if <see cref="E:OSGeo.MapGuide.MaestroAPI.Commands.RuntimeMapRequest.LayersAndGroups"/>
+        /// is not included in the mask
+        /// </summary>
+        FeatureSourceInformation = 4
+    }
+}

Copied: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Commands/DescribeRuntimeMap.cs (from rev 7846, trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Commands/DescribeRuntimeMap.cs)
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Commands/DescribeRuntimeMap.cs	                        (rev 0)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Commands/DescribeRuntimeMap.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,69 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using OSGeo.MapGuide.ObjectModels.RuntimeMap;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace OSGeo.MapGuide.MaestroAPI.Commands
+{
+    /// <summary>
+    /// Describes the structure of an existing runtime map
+    /// </summary>
+    public interface IDescribeRuntimeMap : ICommand
+    {
+        /// <summary>
+        /// The name of the runtime map to describe the structure of
+        /// </summary>
+        string Name { get; set; }
+
+        /// <summary>
+        /// A bitmask specifying what pieces of information to include in the CREATERUNTIMEMAP response
+        /// </summary>
+        int RequestedFeatures { get; set; }
+
+        /// <summary>
+        /// The number of icons to render inline (as base64 images) per scale range in each layer of the map
+        /// </summary>
+        int IconsPerScaleRange { get; set; }
+
+        /// <summary>
+        /// The icon image format (default: PNG)
+        /// </summary>
+        string IconFormat { get; set; }
+
+        /// <summary>
+        /// The width of each inline icon that will be rendered (default: 16)
+        /// </summary>
+        int IconWidth { get; set; }
+
+        /// <summary>
+        /// The height of each inline icon that will be rendered (default: 16)
+        /// </summary>
+        int IconHeight { get; set; }
+
+        /// <summary>
+        /// Executes the request and returns the structure of the runtime map
+        /// </summary>
+        /// <returns>The structure of the runtime map</returns>
+        IRuntimeMapInfo Execute();
+    }
+}

Modified: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj	2013-09-14 16:22:05 UTC (rev 7858)
@@ -148,6 +148,9 @@
     <Compile Include="..\Generated\Role-1.0.0.designer.cs">
       <Link>ObjectModels\Role-1.0.0.designer.cs</Link>
     </Compile>
+    <Compile Include="..\Generated\RuntimeMap-2.6.0.designer.cs">
+      <Link>ObjectModels\RuntimeMap-2.6.0.designer.cs</Link>
+    </Compile>
     <Compile Include="..\Generated\SelectAggregate-1.0.0.designer.cs">
       <Link>ObjectModels\SelectAggregate-1.0.0.designer.cs</Link>
     </Compile>
@@ -196,6 +199,8 @@
     <Compile Include="ArgumentParser.cs" />
     <Compile Include="BindingListExtensions.cs" />
     <Compile Include="Capability\NsDoc.cs" />
+    <Compile Include="Commands\CreateRuntimeMap.cs" />
+    <Compile Include="Commands\DescribeRuntimeMap.cs" />
     <Compile Include="Commands\FeatureManipulationCommandImpl.cs" />
     <Compile Include="Commands\FeatureManipulationCommands.cs" />
     <Compile Include="Commands\IGetFdoCacheInfo.cs" />
@@ -253,6 +258,8 @@
     <Compile Include="ObjectModels\IFdoSpatialContext.cs" />
     <Compile Include="ObjectModels\LongTransaction.cs" />
     <Compile Include="ObjectModels\NsDoc.cs" />
+    <Compile Include="ObjectModels\RuntimeMapImpl.cs" />
+    <Compile Include="ObjectModels\RuntimeMapInterfaces.cs" />
     <Compile Include="ObjectModels\SymbolDefFactory.cs" />
     <Compile Include="ObjectModels\WatermarkCollectionUtil.cs" />
     <Compile Include="ObjectModels\WatermarkInterfaces.cs" />
@@ -518,7 +525,7 @@
   </ItemGroup>
   <ItemGroup>
     <Content Include="ConnectionProviders.xml">
-      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     <Content Include="ObjectModels\readme.txt" />
     <None Include="Resources\BaseTemplate.ApplicationDefinition1.xml" />

Copied: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/RuntimeMapImpl.cs (from rev 7846, trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/RuntimeMapImpl.cs)
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/RuntimeMapImpl.cs	                        (rev 0)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/RuntimeMapImpl.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,353 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using OSGeo.MapGuide.ObjectModels.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace OSGeo.MapGuide.ObjectModels.RuntimeMap
+{
+    partial class RuntimeMap : IRuntimeMapInfo
+    {
+        string IRuntimeMapInfo.SiteVersion
+        {
+            get { return this.SiteVersion; }
+        }
+
+        string IRuntimeMapInfo.Name
+        {
+            get { return this.Name; }
+        }
+
+        string IRuntimeMapInfo.MapDefinition
+        {
+            get { return this.MapDefinition; }
+        }
+
+        string IRuntimeMapInfo.BackgroundColor
+        {
+            get { return this.BackgroundColor; }
+        }
+
+        int IRuntimeMapInfo.DisplayDpi
+        {
+            get 
+            {
+                int dpi;
+                if (int.TryParse(this.DisplayDpi, out dpi))
+                    return dpi;
+                return 96;
+            }
+        }
+
+        string IRuntimeMapInfo.IconMimeType
+        {
+            get { return this.IconMimeType; }
+        }
+
+        ICoordinateSystemInfo IRuntimeMapInfo.CoordinateSystem
+        {
+            get { return this.CoordinateSystem; }
+        }
+
+        IEnvelope IRuntimeMapInfo.Extents
+        {
+            get 
+            {
+                double minx;
+                double miny;
+                double maxx;
+                double maxy;
+                if (double.TryParse(this.Extents.LowerLeftCoordinate.X, out minx) &&
+                    double.TryParse(this.Extents.LowerLeftCoordinate.Y, out miny) &&
+                    double.TryParse(this.Extents.UpperRightCoordinate.X, out maxx) &&
+                    double.TryParse(this.Extents.UpperRightCoordinate.Y, out maxy))
+                {
+                    return ObjectFactory.CreateEnvelope(minx, miny, maxx, maxy);
+                }
+                return null;
+            }
+        }
+
+        ReadOnlyLayerCollection _roLayers;
+
+        IRuntimeLayerInfoCollection IRuntimeMapInfo.Layers
+        {
+            get
+            {
+                if (this.Layer == null)
+                    return null;
+
+                if (_roLayers == null)
+                    _roLayers = new ReadOnlyLayerCollection(this.Layer);
+
+                return _roLayers;
+            }
+        }
+
+        ReadOnlyGroupCollection _roGroups;
+
+        IRuntimeLayerGroupInfoCollection IRuntimeMapInfo.Groups
+        {
+            get 
+            {
+                if (this.Group == null)
+                    return null;
+
+                if (_roGroups == null)
+                    _roGroups = new ReadOnlyGroupCollection(this.Group);
+
+                return _roGroups;
+            }
+        }
+
+        double[] IRuntimeMapInfo.FiniteDisplayScales
+        {
+            get
+            {
+                return this.FiniteDisplayScale.ToArray();
+            }
+        }
+    }
+
+    //I love C# generics!
+    internal abstract class ReadOnlyCollectionWrapper<TInterface, TImpl> 
+        : IReadOnlyCollection<TInterface>
+        where TImpl : TInterface
+    {
+        private IList<TImpl> _list;
+
+        protected ReadOnlyCollectionWrapper(IList<TImpl> list)
+        {
+            _list = list;
+        }
+
+        public int Count
+        {
+            get { return _list.Count; }
+        }
+
+        public TInterface this[int index]
+        {
+            get { return _list[index]; }
+        }
+
+        class Enumerator : IEnumerator<TInterface>
+        {
+            private IList<TImpl> _innerList;
+            private int _pos;
+
+            public Enumerator(IList<TImpl> list)
+            {
+                _pos = -1;
+                _innerList = list;
+            }
+
+            public TInterface Current
+            {
+                get { return _innerList[_pos]; }
+            }
+
+            public void Dispose()
+            {
+                
+            }
+
+            object System.Collections.IEnumerator.Current
+            {
+                get { return _innerList[_pos]; }
+            }
+
+            public bool MoveNext()
+            {
+                _pos++;
+                return _pos <= _innerList.Count - 1;
+            }
+
+            public void Reset()
+            {
+                _pos = -1;
+            }
+        }
+
+        public IEnumerator<TInterface> GetEnumerator()
+        {
+            return new Enumerator(_list);
+        }
+
+        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
+        {
+            return _list.GetEnumerator();
+        }
+    }
+
+    partial class RuntimeMapLayer : IRuntimeLayerInfo
+    {
+
+        int IRuntimeLayerInfo.LayerType
+        {
+            get { return Convert.ToInt32(this.Type); }
+        }
+
+        IFeatureSourceInfo IRuntimeLayerInfo.FeatureSource
+        {
+            get { return this.FeatureSource; }
+        }
+
+        ScaleRangeCollection _roScales;
+
+        IScaleRangeInfoCollection IRuntimeLayerInfo.ScaleRanges
+        {
+            get
+            {
+                if (this.ScaleRange == null)
+                    return null;
+
+                if (_roScales == null)
+                    _roScales = new ScaleRangeCollection(this.ScaleRange);
+
+                return _roScales;
+            }
+        }
+
+        string IRuntimeMapLegendElement.ObjectID
+        {
+            get { return this.ObjectId; }
+        }
+
+        string IRuntimeMapLegendElement.ParentID
+        {
+            get { return this.ParentId; }
+        }
+    }
+
+    partial class FeatureSourceInfo : IFeatureSourceInfo
+    {
+        string IFeatureSourceInfo.ResourceID
+        {
+            get { return this.ResourceId; }
+        }
+    }
+
+    partial class RuntimeMapGroup : IRuntimeLayerGroupInfo
+    {
+        int IRuntimeLayerGroupInfo.GroupType
+        {
+            get { return Convert.ToInt32(this.Type); }
+        }
+
+        string IRuntimeMapLegendElement.ObjectID
+        {
+            get { return this.ObjectId; }
+        }
+
+        string IRuntimeMapLegendElement.ParentID
+        {
+            get { return this.ParentId; }
+        }
+    }
+
+    internal class ReadOnlyLayerCollection : ReadOnlyCollectionWrapper<IRuntimeLayerInfo, RuntimeMapLayer>,
+                                             IRuntimeLayerInfoCollection
+    {
+        public ReadOnlyLayerCollection(IList<RuntimeMapLayer> list) : base(list) { }
+    }
+
+    internal class ReadOnlyGroupCollection : ReadOnlyCollectionWrapper<IRuntimeLayerGroupInfo, RuntimeMapGroup>,
+                                             IRuntimeLayerGroupInfoCollection
+    {
+        public ReadOnlyGroupCollection(IList<RuntimeMapGroup> list) : base(list) { }
+    }
+
+    internal class ScaleRangeCollection : ReadOnlyCollectionWrapper<IScaleRangeInfo, ScaleRangeInfo>,
+                                          IScaleRangeInfoCollection
+    {
+        public ScaleRangeCollection(IList<ScaleRangeInfo> list) : base(list) { }
+    }
+
+    internal class FeatureStyleCollection : ReadOnlyCollectionWrapper<IFeatureStyleInfo, FeatureStyleInfo>,
+                                            IFeatureStyleInfoCollection
+    {
+        public FeatureStyleCollection(IList<FeatureStyleInfo> list) : base(list) { }
+    }
+
+    internal class RuleInfoCollection : ReadOnlyCollectionWrapper<IRuleInfo, RuleInfo>,
+                                        IRuleInfoCollection
+    {
+        public RuleInfoCollection(IList<RuleInfo> list) : base(list) { }
+    }
+
+    partial class ScaleRangeInfo : IScaleRangeInfo
+    {
+        FeatureStyleCollection _roStyles;
+
+        IFeatureStyleInfoCollection IScaleRangeInfo.FeatureStyle
+        {
+            get 
+            {
+                if (this.FeatureStyle == null)
+                    return null;
+
+                if (_roStyles == null)
+                    _roStyles = new FeatureStyleCollection(this.FeatureStyle);
+
+                return _roStyles;
+            }
+        }
+    }
+
+    partial class FeatureStyleInfo : IFeatureStyleInfo
+    {
+        int IFeatureStyleInfo.Type
+        {
+            get { return Convert.ToInt32(this.Type); }
+        }
+
+        RuleInfoCollection _roRules;
+
+        public IRuleInfoCollection Rules
+        {
+            get 
+            {
+                if (this.Rule == null)
+                    return null;
+
+                if (_roRules == null)
+                    _roRules = new RuleInfoCollection(this.Rule);
+
+                return _roRules;
+            }
+        }
+    }
+
+    partial class RuleInfo : IRuleInfo
+    {
+        string IRuleInfo.IconBase64
+        {
+            get { return this.Icon; }
+        }
+    }
+
+    partial class CoordinateSystemType : ICoordinateSystemInfo
+    {
+
+    }
+}

Copied: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/RuntimeMapInterfaces.cs (from rev 7846, trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/RuntimeMapInterfaces.cs)
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/RuntimeMapInterfaces.cs	                        (rev 0)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/RuntimeMapInterfaces.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,233 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using OSGeo.MapGuide.ObjectModels.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace OSGeo.MapGuide.ObjectModels.RuntimeMap
+{
+    /// <summary>
+    /// Describes the structure of a Runtime Map
+    /// </summary>
+    public interface IRuntimeMapInfo
+    {
+        /// <summary>
+        /// Gets the site version of the MapGuide Server
+        /// </summary>
+        string SiteVersion { get; }
+
+        /// <summary>
+        /// Gets the name of the runtime map. This combined with the session ID provides the
+        /// means for any code using the MapGuide API to open an existing MgMap instance
+        /// </summary>
+        string Name { get; }
+
+        /// <summary>
+        /// Gets the Map Definition resource ID used to create this runtime map
+        /// </summary>
+        string MapDefinition { get; }
+
+        /// <summary>
+        /// Gets the background color
+        /// </summary>
+        string BackgroundColor { get; }
+
+        /// <summary>
+        /// Gets the display DPI of the map
+        /// </summary>
+        int DisplayDpi { get; }
+
+        /// <summary>
+        /// Gets the mime type of any inline icons.
+        /// </summary>
+        /// <remarks>
+        /// If the application did not request any icons as part of the CreateRuntimeMap 
+        /// or DescribeRuntimeMap request, this property is null
+        /// </remarks>
+        string IconMimeType { get; }
+
+        /// <summary>
+        /// Gets the coordinate system of this map
+        /// </summary>
+        ICoordinateSystemInfo CoordinateSystem { get; }
+
+        /// <summary>
+        /// Gets the bounding box of this map
+        /// </summary>
+        IEnvelope Extents { get; }
+
+        /// <summary>
+        /// Gets the layers of this map.
+        /// </summary>
+        /// <remarks>
+        /// If the application did not request layer structure as part of the CreateRuntimeMap
+        /// or DescribeRuntimeMap request, this property will be an empty collection
+        /// </remarks>
+        IRuntimeLayerInfoCollection Layers { get; }
+
+        /// <summary>
+        /// Gets the groups of this map.
+        /// </summary>
+        /// <remarks>
+        /// Even if the application did not request layer structure as part of the CreateRuntimeMap
+        /// or DescribeRuntimeMap request, this property will still contain any Base Layer Groups
+        /// if defined in the Map Definition
+        /// </remarks>
+        IRuntimeLayerGroupInfoCollection Groups { get; }
+
+        /// <summary>
+        /// Gets the finite display scales defined for this runtime map
+        /// </summary>
+        double[] FiniteDisplayScales { get; }
+    }
+
+    /// <summary>
+    /// Represents coordinate system information for a Runtime Map
+    /// </summary>
+    public interface ICoordinateSystemInfo
+    {
+        /// <summary>
+        /// Gets the WKT of this coordinate system
+        /// </summary>
+        string Wkt { get; }
+
+        /// <summary>
+        /// Gets the CS-Map coordinate system code of this coordinate system
+        /// </summary>
+        string MentorCode { get; }
+
+        /// <summary>
+        /// Gets the EPSG code of this coordinate system
+        /// </summary>
+        string EpsgCode { get; }
+
+        /// <summary>
+        /// Gets the meters-per-unit value of this runtime map. This value is essential for
+        /// any tile or rendering functionality
+        /// </summary>
+        double MetersPerUnit { get; }
+    }
+
+    public interface IRuntimeMapLegendElement
+    {
+        string Name { get; }
+
+        string LegendLabel { get; }
+
+        string ObjectID { get; }
+
+        string ParentID { get; }
+
+        bool DisplayInLegend { get; }
+
+        bool ExpandInLegend { get; }
+
+        bool Visible { get; }
+
+        bool ActuallyVisible { get; }
+    }
+
+    public interface IRuntimeLayerInfo : IRuntimeMapLegendElement
+    {
+        int LayerType { get; }
+
+        string LayerDefinition { get; }
+
+        IFeatureSourceInfo FeatureSource { get; }
+
+        IScaleRangeInfoCollection ScaleRanges { get; }
+    }
+
+    public interface IFeatureSourceInfo
+    {
+        string ResourceID { get; }
+
+        string ClassName { get; }
+
+        string Geometry { get; }
+    }
+
+    public interface IRuntimeLayerGroupInfo : IRuntimeMapLegendElement
+    {
+        int GroupType { get; }
+    }
+
+    public interface IScaleRangeInfo
+    {
+        double MinScale { get; }
+
+        double MaxScale { get; }
+
+        IFeatureStyleInfoCollection FeatureStyle { get; }
+    }
+
+    public interface IFeatureStyleInfo
+    {
+        int Type { get; }
+
+        IRuleInfoCollection Rules { get; }
+    }
+
+    public interface IRuleInfo
+    {
+        string LegendLabel { get; }
+
+        string Filter { get; }
+
+        string IconBase64 { get; }
+    }
+
+    public interface IReadOnlyCollection<T> : IEnumerable<T>
+    {
+        int Count { get; }
+
+        T this[int index]
+        {
+            get;
+        }
+    }
+
+    public interface IRuntimeLayerInfoCollection : IReadOnlyCollection<IRuntimeLayerInfo>
+    {
+
+    }
+
+    public interface IRuntimeLayerGroupInfoCollection : IReadOnlyCollection<IRuntimeLayerGroupInfo>
+    {
+
+    }
+
+    public interface IScaleRangeInfoCollection : IReadOnlyCollection<IScaleRangeInfo>
+    {
+
+    }
+
+    public interface IFeatureStyleInfoCollection : IReadOnlyCollection<IFeatureStyleInfo>
+    {
+
+    }
+
+    public interface IRuleInfoCollection : IReadOnlyCollection<IRuleInfo>
+    {
+
+    }
+}


Property changes on: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Schemas
___________________________________________________________________
Added: svn:ignore
   + Xsd2Code.vshost.exe
Xsd2Code.vshost.exe.manifest


Copied: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Schemas/RuntimeMap-2.6.0.xsd (from rev 7846, trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/RuntimeMap-2.6.0.xsd)
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Schemas/RuntimeMap-2.6.0.xsd	                        (rev 0)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/Schemas/RuntimeMap-2.6.0.xsd	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+  <xs:element name="RuntimeMap">
+    <xs:annotation>
+      <xs:documentation>Describes information about a Runtime Map, so that client applications can interact with it</xs:documentation>
+    </xs:annotation>
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="SiteVersion" type="xs:string">
+          <xs:annotation>
+            <xs:documentation>The MapGuide Site Version</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="Name" type="xs:string">
+          <xs:annotation>
+            <xs:documentation>The name of the runtime map. This is the value required for any mapagent operation that require a MAPNAME parameter</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="MapDefinition" type="xs:string">
+          <xs:annotation>
+            <xs:documentation>The resource id of the Map Definition from which this runtime map was created from</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="BackgroundColor" type="xs:string">
+          <xs:annotation>
+            <xs:documentation>The map's background color in ARGB hex string format</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="DisplayDpi" type="xs:integer">
+          <xs:annotation>
+            <xs:documentation>The number of dots per inch of the map display</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="IconMimeType" type="xs:string" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>The mime type of all inline icons</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="CoordinateSystem" type="CoordinateSystemType" />
+        <xs:element name="Extents" type="Envelope" />
+        <xs:element name="Group" type="RuntimeMapGroup" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element name="Layer" type="RuntimeMapLayer" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element name="FiniteDisplayScale" type="xs:double" minOccurs="0" maxOccurs="unbounded" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:complexType name="CoordinateSystemType">
+    <xs:annotation>
+      <xs:documentation>Describes the coordinate system of the runtime map</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Wkt" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The WKT string of the coordinate system</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MentorCode" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The CS-Map code of the coordinate system</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="EpsgCode" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The EPSG code of the coordinate system</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MetersPerUnit" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>The meters-per-unit value of the coordinate system</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="RuntimeMapGroup">
+    <xs:annotation>
+      <xs:documentation>Describes a group of Runtime Map Layers</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the group</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Type" type="xs:integer">
+        <xs:annotation>
+          <xs:documentation>The type of this group. Can be tiled or dynamic. Uses the value of MgLayerGroupType</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The group's legend label</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ObjectId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The group's unique id. Use this value for turning on/off this group in a GETDYNAMICMAPOVERLAYIMAGE request</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ParentId" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The group's parent group id. Use this value for determining parent-child relationships when building a layer/group hierarchy</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="DisplayInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates whether this group should be displayed in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExpandInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates whether this group should be initially expanded in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Visible" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates whether this group is potentially visible. Note that this may be true even though the group is not visible. This will occur if one of the groups this group is organized within is not visible.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ActuallyVisible" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates the actual visibility of the group. The visibility depends on the visible property of the group, and the visible property of each group this group is organized within.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="RuntimeMapLayer">
+    <xs:annotation>
+      <xs:documentation>Describes a runtime instance of a Layer Definition</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the layer</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Type" type="xs:integer">
+        <xs:annotation>
+          <xs:documentation>The type of this layer. Can be tiled or dynamic. Uses the value of MgLayerType</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The layer's legend label</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ObjectId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The layer's unique id. Use this value for turning on/off this layer in a GETDYNAMICMAPOVERLAYIMAGE request</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ParentId" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The layer's parent group id. Use this value for determining parent-child relationships when building a layer/group hierarchy</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="DisplayInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates whether this layer should be displayed in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExpandInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates whether this layer should be initially expanded (if layer is themed) in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Visible" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates whether this layer is potentially visible. Note that this may be true even though the layer is not visible. This will occur if the visible flag of one of the groups this layer is organized within is not visible or when the current viewScale property of the map is outside the scale ranges defined for this layer.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ActuallyVisible" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Indicates the actual visibility of the layer. The visibility depends on the visible property of the group, and the visible property of each group this group is organized within.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LayerDefinition" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The Layer Definition from which this runtime layer was created from</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="FeatureSource" type="FeatureSourceInfo" minOccurs="0" />
+      <xs:element name="ScaleRange" type="ScaleRangeInfo" minOccurs="0" maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="FeatureSourceInfo">
+    <xs:annotation>
+      <xs:documentation>Describe the Feature Source information for a runtime layer</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="ResourceId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The Feature Source resource id</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ClassName" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The qualified FDO class name</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Geometry" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the default Geometry property</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ScaleRangeInfo">
+    <xs:annotation>
+      <xs:documentation>Describes a scale range of the runtime layer</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="MinScale" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>The minimum scale of this scale range</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MaxScale" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>The maximum scale of this scale range</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="FeatureStyle" type="FeatureStyleInfo" minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>The feature style for a given geometry type.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="FeatureStyleInfo">
+    <xs:annotation>
+      <xs:documentation>Defines the style rules for a given geometry type</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Type" type="xs:integer">
+        <xs:annotation>
+          <xs:documentation>The geometry type that this rule is applicable to (1=point, 2=line, 3=area, 4=composite)</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Rule" type="RuleInfo" minOccurs="0" maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="RuleInfo">
+    <xs:annotation>
+      <xs:documentation>Describes a stylization rule in a layer's scale range</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The legend label for this rule</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Filter" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The FDO filter that features must match in order for them to be stylized using this particular rule</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Icon" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Defines the icon for this rule. The icon's image content is in base64 format</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="Envelope">
+    <xs:annotation>
+      <xs:documentation>Specifies an envelope (a rectangle) using two corner points.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="LowerLeftCoordinate">
+        <xs:annotation>
+          <xs:documentation>Specifies the lower left corner of the envelope.</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="X" type="xs:string"/>
+            <xs:element name="Y" type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="UpperRightCoordinate">
+        <xs:annotation>
+          <xs:documentation>Specifies the upper right corner of the envelope.</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="X" type="xs:string"/>
+            <xs:element name="Y" type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>
\ No newline at end of file

Modified: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/SiteVersion.cs
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/SiteVersion.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI/SiteVersion.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -98,9 +98,26 @@
         /// MapGuide Open Source 2.4.0
         /// </summary>
         MapGuideOS2_4,
+        /// <summary>
+        /// Autodesk Infrastructure Map Server 2013 SP1
+        /// </summary>
         Aims2013_SP1,
+        /// <summary>
+        /// MapGuide Open Source 2.5.0
+        /// </summary>
         MapGuideOS2_5,
-        Aims2014
+        /// <summary>
+        /// Autodesk Infrastructure Map Server 2014
+        /// </summary>
+        Aims2014,
+        /// <summary>
+        /// MapGuide Open Source 2.4.1
+        /// </summary>
+        MapGuideOS2_4_1,
+        /// <summary>
+        /// MapGuide Open Source 2.5.1
+        /// </summary>
+        MapGuideOS2_5_1,
 	}
 
     /// <summary>
@@ -133,7 +150,9 @@
             new Version(2,4,0,7096),    //MGOS 2.4.0
             new Version(2,4,0,5901),    //AIMS 2013 SP1
             new Version(2,5,0,7449),    //MGOS 2.5.0
-            new Version(2,5,1,7601)     //AIMS 2014
+            new Version(2,5,1,7601),    //AIMS 2014
+            new Version(2,4,1,7767),    //MGOS 2.4.1
+            new Version(2,5,1,7768)     //MGOS 2.5.1
 		};
 
         /// <summary>

Copied: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/Commands/HttpCreateRuntimeMap.cs (from rev 7846, trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/Commands/HttpCreateRuntimeMap.cs)
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/Commands/HttpCreateRuntimeMap.cs	                        (rev 0)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/Commands/HttpCreateRuntimeMap.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,103 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using OSGeo.MapGuide.MaestroAPI.Commands;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace OSGeo.MapGuide.MaestroAPI.Http.Commands
+{
+    public class HttpCreateRuntimeMap : ICreateRuntimeMap
+    {
+        private HttpServerConnection _conn;
+
+        internal HttpCreateRuntimeMap(HttpServerConnection conn)
+        {
+            _conn = conn;
+            this.MapDefinition = null;
+            this.TargetMapName = null;
+            this.RequestedFeatures = 0;
+            this.IconWidth = 16;
+            this.IconHeight = 16;
+            this.IconFormat = "PNG"; //NOXLATE
+            this.IconsPerScaleRange = 25;
+        }
+
+        public string MapDefinition
+        {
+            get;
+            set;
+        }
+
+        public string TargetMapName
+        {
+            get;
+            set;
+        }
+
+        public int RequestedFeatures
+        {
+            get;
+            set;
+        }
+
+        public int IconsPerScaleRange
+        {
+            get;
+            set;
+        }
+
+        public string IconFormat
+        {
+            get;
+            set;
+        }
+
+        public int IconWidth
+        {
+            get;
+            set;
+        }
+
+        public int IconHeight
+        {
+            get;
+            set;
+        }
+
+        public IServerConnection Parent
+        {
+            get { return _conn; }
+        }
+
+        public ObjectModels.RuntimeMap.IRuntimeMapInfo Execute()
+        {
+            return _conn.CreateRuntimeMap(
+                this.MapDefinition,
+                this.TargetMapName,
+                this.RequestedFeatures,
+                this.IconsPerScaleRange,
+                this.IconFormat,
+                this.IconWidth,
+                this.IconHeight);
+        }
+    }
+}

Copied: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/Commands/HttpDescribeRuntimeMap.cs (from rev 7846, trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/Commands/HttpDescribeRuntimeMap.cs)
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/Commands/HttpDescribeRuntimeMap.cs	                        (rev 0)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/Commands/HttpDescribeRuntimeMap.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -0,0 +1,95 @@
+#region Disclaimer / License
+// Copyright (C) 2013, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using OSGeo.MapGuide.MaestroAPI.Commands;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace OSGeo.MapGuide.MaestroAPI.Http.Commands
+{
+    public class HttpDescribeRuntimeMap : IDescribeRuntimeMap
+    {
+        private HttpServerConnection _conn;
+
+        internal HttpDescribeRuntimeMap(HttpServerConnection conn)
+        {
+            _conn = conn;
+            this.Name = null;
+            this.RequestedFeatures = 0;
+            this.IconWidth = 16;
+            this.IconHeight = 16;
+            this.IconFormat = "PNG"; //NOXLATE
+            this.IconsPerScaleRange = 25;
+        }
+
+        public string Name
+        {
+            get;
+            set;
+        }
+
+        public int RequestedFeatures
+        {
+            get;
+            set;
+        }
+
+        public int IconsPerScaleRange
+        {
+            get;
+            set;
+        }
+
+        public string IconFormat
+        {
+            get;
+            set;
+        }
+
+        public int IconWidth
+        {
+            get;
+            set;
+        }
+
+        public int IconHeight
+        {
+            get;
+            set;
+        }
+
+        public IServerConnection Parent
+        {
+            get { return _conn; }
+        }
+
+        public ObjectModels.RuntimeMap.IRuntimeMapInfo Execute()
+        {
+            return _conn.DescribeRuntimeMap(
+                this.Name,
+                this.RequestedFeatures,
+                this.IconsPerScaleRange,
+                this.IconFormat,
+                this.IconWidth,
+                this.IconHeight);
+        }
+    }
+}

Modified: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/HttpCapabilities.cs
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/HttpCapabilities.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/HttpCapabilities.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -41,28 +41,32 @@
         {
             get 
             {
+                List<int> cmds = new List<int>();
                 var gconn = _implConn.GeoRestConnection;
                 if (gconn != null && gconn.Configuration.FeatureSources.Count > 0)
                 {
-                    return new int[] 
-                    {
-                        (int)CommandType.GetResourceContents,
-                        (int)CommandType.GetFdoCacheInfo,
+                    cmds.Add((int)CommandType.GetResourceContents);
+                    cmds.Add((int)CommandType.GetFdoCacheInfo);
                         //GeoREST allows us to support these
                         //(int)CommandType.DeleteFeatures,
-                        (int)CommandType.InsertFeature,
+                    cmds.Add((int)CommandType.InsertFeature);
                         //(int)CommandType.UpdateFeatures
-                    };
                 }
                 else
                 {
                     //TODO: Work out what this can/can't do
-                    return new int[] 
+                    cmds.Add((int)CommandType.GetResourceContents);
+                    cmds.Add((int)CommandType.GetFdoCacheInfo);
+
+                    //Create/Describe Runtime Map available with 2.6
+                    if (_implConn.SiteVersion >= new Version(2, 6))
                     {
-                        (int)CommandType.GetResourceContents,
-                        (int)CommandType.GetFdoCacheInfo
-                    };
+                        cmds.Add((int)CommandType.CreateRuntimeMap);
+                        cmds.Add((int)CommandType.DescribeRuntimeMap);
+                    }
                 }
+
+                return cmds.ToArray();
             }
         }
 

Modified: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/HttpServerConnection.cs
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/HttpServerConnection.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/HttpServerConnection.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -2042,6 +2042,10 @@
                 return new HttpGetResourceContents(this);
             else if (ct == CommandType.GetFdoCacheInfo)
                 return new HttpGetFdoCacheInfo(this);
+            else if (ct == CommandType.CreateRuntimeMap)
+                return new HttpCreateRuntimeMap(this);
+            else if (ct == CommandType.DescribeRuntimeMap)
+                return new HttpDescribeRuntimeMap(this);
             return base.CreateCommand(cmdType);
         }
 
@@ -2055,5 +2059,25 @@
                 return info;
             }
         }
+
+        internal ObjectModels.RuntimeMap.IRuntimeMapInfo DescribeRuntimeMap(string mapName, int requestedFeatures, int iconsPerScaleRange, string iconFormat, int iconWidth, int iconHeight)
+        {
+            var req = m_reqBuilder.DescribeRuntimeMap(mapName, requestedFeatures, iconsPerScaleRange, iconFormat, iconWidth, iconHeight);
+            using (var s = this.OpenRead(req))
+            {
+                var info = this.DeserializeObject<OSGeo.MapGuide.ObjectModels.RuntimeMap.RuntimeMap>(s);
+                return info;
+            }
+        }
+
+        internal ObjectModels.RuntimeMap.IRuntimeMapInfo CreateRuntimeMap(string mapDefinition, string targetMapName, int requestedFeatures, int iconsPerScaleRange, string iconFormat, int iconWidth, int iconHeight)
+        {
+            var req = m_reqBuilder.CreateRuntimeMap(mapDefinition, targetMapName, requestedFeatures, iconsPerScaleRange, iconFormat, iconWidth, iconHeight);
+            using (var s = this.OpenRead(req))
+            {
+                var info = this.DeserializeObject<OSGeo.MapGuide.ObjectModels.RuntimeMap.RuntimeMap>(s);
+                return info;
+            }
+        }
     }
 }

Modified: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/OSGeo.MapGuide.MaestroAPI.Http.csproj
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/OSGeo.MapGuide.MaestroAPI.Http.csproj	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/OSGeo.MapGuide.MaestroAPI.Http.csproj	2013-09-14 16:22:05 UTC (rev 7858)
@@ -75,6 +75,8 @@
       <Link>SignedAssemblyInfo.cs</Link>
     </Compile>
     <Compile Include="Commands\GeoRestCommands.cs" />
+    <Compile Include="Commands\HttpCreateRuntimeMap.cs" />
+    <Compile Include="Commands\HttpDescribeRuntimeMap.cs" />
     <Compile Include="Commands\HttpGetFdoCacheInfo.cs" />
     <Compile Include="GeoRestConnection.cs" />
     <Compile Include="HttpCapabilities.cs" />

Modified: branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/RequestBuilder.cs
===================================================================
--- branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/RequestBuilder.cs	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/OSGeo.MapGuide.MaestroAPI.Http/RequestBuilder.cs	2013-09-14 16:22:05 UTC (rev 7858)
@@ -1752,5 +1752,38 @@
 
             return m_hosturi + "?" + EncodeParameters(param);
         }
+
+        internal string DescribeRuntimeMap(string mapName, int requestedFeatures, int iconsPerScaleRange, string iconFormat, int iconWidth, int iconHeight)
+        {
+            NameValueCollection param = new NameValueCollection();
+            param.Add("OPERATION", "DESCRIBERUNTIMEMAP");
+            param.Add("VERSION", "2.6.0");
+            param.Add("SESSION", m_sessionID);
+            param.Add("MAPNAME", mapName);
+            param.Add("REQUESTEDFEATURES", requestedFeatures.ToString());
+            param.Add("ICONSPERSCALERANGE", iconsPerScaleRange.ToString());
+            param.Add("ICONFORMAT", iconFormat.ToString());
+            param.Add("ICONWIDTH", iconWidth.ToString());
+            param.Add("ICONHEIGHT", iconHeight.ToString());
+
+            return m_hosturi + "?" + EncodeParameters(param);
+        }
+
+        internal string CreateRuntimeMap(string mapDefinition, string targetMapName, int requestedFeatures, int iconsPerScaleRange, string iconFormat, int iconWidth, int iconHeight)
+        {
+            NameValueCollection param = new NameValueCollection();
+            param.Add("OPERATION", "CREATERUNTIMEMAP");
+            param.Add("VERSION", "2.6.0");
+            param.Add("SESSION", m_sessionID);
+            param.Add("MAPDEFINITION", mapDefinition);
+            param.Add("TARGETMAPNAME", targetMapName);
+            param.Add("REQUESTEDFEATURES", requestedFeatures.ToString());
+            param.Add("ICONSPERSCALERANGE", iconsPerScaleRange.ToString());
+            param.Add("ICONFORMAT", iconFormat.ToString());
+            param.Add("ICONWIDTH", iconWidth.ToString());
+            param.Add("ICONHEIGHT", iconHeight.ToString());
+
+            return m_hosturi + "?" + EncodeParameters(param);
+        }
     }
 }


Property changes on: branches/maestro-5.0.x/Thirdparty/Xsd2Code
___________________________________________________________________
Added: svn:ignore
   + Xsd2Code.suo



Property changes on: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Addin
___________________________________________________________________
Added: svn:ignore
   + bin
obj


Modified: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Addin/Xsd2Code.Addin.csproj
===================================================================
--- branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Addin/Xsd2Code.Addin.csproj	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Addin/Xsd2Code.Addin.csproj	2013-09-14 16:22:05 UTC (rev 7858)
@@ -11,10 +11,14 @@
     <NoStandardLibraries>false</NoStandardLibraries>
     <AssemblyName>Xsd2Code.Addin</AssemblyName>
     <RootNamespace>Xsd2Code.Addin</RootNamespace>
-    <SccProjectName>SAK</SccProjectName>
-    <SccLocalPath>SAK</SccLocalPath>
-    <SccAuxPath>SAK</SccAuxPath>
-    <SccProvider>SAK</SccProvider>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

Modified: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Console/Xsd2Code.csproj
===================================================================
--- branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Console/Xsd2Code.csproj	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Console/Xsd2Code.csproj	2013-09-14 16:22:05 UTC (rev 7858)
@@ -25,10 +25,14 @@
     </FileUpgradeFlags>
     <UpgradeBackupLocation>
     </UpgradeBackupLocation>
-    <SccProjectName>SAK</SccProjectName>
-    <SccLocalPath>SAK</SccLocalPath>
-    <SccAuxPath>SAK</SccAuxPath>
-    <SccProvider>SAK</SccProvider>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
     <OldToolsVersion>2.0</OldToolsVersion>
     <PublishUrl>publish\</PublishUrl>
     <Install>true</Install>
@@ -152,6 +156,12 @@
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
   </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Xsd2Code.Library\Xsd2Code.Library.csproj">
+      <Project>{1B59FB12-699C-4927-ACA3-D7F0E0F79100}</Project>
+      <Name>Xsd2Code.Library</Name>
+    </ProjectReference>
+  </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
     <PreBuildEvent>


Property changes on: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.CustomTool
___________________________________________________________________
Added: svn:ignore
   + bin
obj


Modified: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.CustomTool/Xsd2Code.CustomTool.csproj
===================================================================
--- branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.CustomTool/Xsd2Code.CustomTool.csproj	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.CustomTool/Xsd2Code.CustomTool.csproj	2013-09-14 16:22:05 UTC (rev 7858)
@@ -12,10 +12,14 @@
     <AssemblyName>Xsd2Code.CustomTool</AssemblyName>
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
-    <SccProjectName>SAK</SccProjectName>
-    <SccLocalPath>SAK</SccLocalPath>
-    <SccAuxPath>SAK</SccAuxPath>
-    <SccProvider>SAK</SccProvider>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
     <TargetFrameworkSubset>
     </TargetFrameworkSubset>
     <SignAssembly>true</SignAssembly>

Modified: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Library/Xsd2Code.Library.csproj
===================================================================
--- branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Library/Xsd2Code.Library.csproj	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Library/Xsd2Code.Library.csproj	2013-09-14 16:22:05 UTC (rev 7858)
@@ -25,10 +25,14 @@
     </FileUpgradeFlags>
     <UpgradeBackupLocation>
     </UpgradeBackupLocation>
-    <SccProjectName>SAK</SccProjectName>
-    <SccLocalPath>SAK</SccLocalPath>
-    <SccAuxPath>SAK</SccAuxPath>
-    <SccProvider>SAK</SccProvider>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
     <OldToolsVersion>2.0</OldToolsVersion>
     <SignAssembly>true</SignAssembly>
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>


Property changes on: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Setup
___________________________________________________________________
Added: svn:ignore
   + Debug
Release


Modified: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Setup/Xsd2Code.Setup.vdproj
===================================================================
--- branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Setup/Xsd2Code.Setup.vdproj	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.Setup/Xsd2Code.Setup.vdproj	2013-09-14 16:22:05 UTC (rev 7858)
@@ -7,10 +7,10 @@
 "LanguageId" = "3:1033"
 "CodePage" = "3:1252"
 "UILanguageId" = "3:1033"
-"SccProjectName" = "8:SAK"
-"SccLocalPath" = "8:SAK"
-"SccAuxPath" = "8:SAK"
-"SccProvider" = "8:SAK"
+"SccProjectName" = "8:"
+"SccLocalPath" = "8:"
+"SccAuxPath" = "8:"
+"SccProvider" = "8:"
     "Hierarchy"
     {
         "Entry"
@@ -51,12 +51,18 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_237AB4F7A0FE364F175B8F9540479067"
-        "OwnerKey" = "8:_9FE8EA0636EB116FD6658FBB09DFE95D"
+        "MsmKey" = "8:_19C14698B352BFFBF91D748CEC0DEA97"
+        "OwnerKey" = "8:_E79428D34B58A2B7744637C662EB602E"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
+        "MsmKey" = "8:_27D10E0457C873431A5401C8AD300A4C"
+        "OwnerKey" = "8:_9B04B0A1BA372F57AC19697A9635EBE0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
         "MsmKey" = "8:_2A29D83B76A4737E5B5A1C69D018BDF4"
         "OwnerKey" = "8:_02BF6658565AB89A9E0E5EDAD398D4D4"
         "MsmSig" = "8:_UNDEFINED"
@@ -117,30 +123,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_334AD48D8BA4B19B5C1C937FE136E37C"
-        "OwnerKey" = "8:_2DECD1E3637A43FA94AF210B2D7AA487"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_334AD48D8BA4B19B5C1C937FE136E37C"
-        "OwnerKey" = "8:_647C0AD6D184438F9314D2B6DD0FD9C1"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_334AD48D8BA4B19B5C1C937FE136E37C"
-        "OwnerKey" = "8:_61D0BF83862A4181AEEADA21FB1C17A9"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_334AD48D8BA4B19B5C1C937FE136E37C"
-        "OwnerKey" = "8:_43143199410A44EBBF1E69F608989EB1"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_43143199410A44EBBF1E69F608989EB1"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -153,42 +135,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_4DC3744B0E677F5E6336527424A1C8B4"
-        "OwnerKey" = "8:_334AD48D8BA4B19B5C1C937FE136E37C"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_4DC3744B0E677F5E6336527424A1C8B4"
-        "OwnerKey" = "8:_D38EA559F6BE4D89980464F2DCA34A8E"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_4DC3744B0E677F5E6336527424A1C8B4"
-        "OwnerKey" = "8:_647C0AD6D184438F9314D2B6DD0FD9C1"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_4DC3744B0E677F5E6336527424A1C8B4"
-        "OwnerKey" = "8:_61D0BF83862A4181AEEADA21FB1C17A9"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_4DC3744B0E677F5E6336527424A1C8B4"
-        "OwnerKey" = "8:_43143199410A44EBBF1E69F608989EB1"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_4DC3744B0E677F5E6336527424A1C8B4"
-        "OwnerKey" = "8:_2DECD1E3637A43FA94AF210B2D7AA487"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_52BD26E9261145B2BFB7F6F40F1B4180"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -225,12 +171,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_5EAADD34BDADD640ABC70C1A462807F8"
-        "OwnerKey" = "8:_E79428D34B58A2B7744637C662EB602E"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_61D0BF83862A4181AEEADA21FB1C17A9"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -249,8 +189,8 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_795F0A9412FC2A617F571C7AC8649416"
-        "OwnerKey" = "8:_EDA0E61B645870C31CED1FA931E513AA"
+        "MsmKey" = "8:_778D1705C5CF3FED111E9AC640B4D978"
+        "OwnerKey" = "8:_9FE8EA0636EB116FD6658FBB09DFE95D"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
@@ -279,6 +219,12 @@
         }
         "Entry"
         {
+        "MsmKey" = "8:_8AC420F1053702C97FCFB9DE5C9CEF38"
+        "OwnerKey" = "8:_D38EA559F6BE4D89980464F2DCA34A8E"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
         "MsmKey" = "8:_9882338D52204001EDCD2BAC93035802"
         "OwnerKey" = "8:_43143199410A44EBBF1E69F608989EB1"
         "MsmSig" = "8:_UNDEFINED"
@@ -309,6 +255,12 @@
         }
         "Entry"
         {
+        "MsmKey" = "8:_996F3476368266333B6D85510FDA1BD7"
+        "OwnerKey" = "8:_4D5B5B3E873C568A2E6832D15B509483"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
         "MsmKey" = "8:_9B04B0A1BA372F57AC19697A9635EBE0"
         "OwnerKey" = "8:_E79428D34B58A2B7744637C662EB602E"
         "MsmSig" = "8:_UNDEFINED"
@@ -381,18 +333,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_E8FE4AE9713C335CF29E5DA97AAFD1AA"
-        "OwnerKey" = "8:_9B04B0A1BA372F57AC19697A9635EBE0"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_E926FE2C55A07FE669A8CFB5F9BA7113"
-        "OwnerKey" = "8:_4D5B5B3E873C568A2E6832D15B509483"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_EDA0E61B645870C31CED1FA931E513AA"
         "OwnerKey" = "8:_43143199410A44EBBF1E69F608989EB1"
         "MsmSig" = "8:_UNDEFINED"
@@ -550,39 +490,33 @@
         "Entry"
         {
         "MsmKey" = "8:_UNDEFINED"
-        "OwnerKey" = "8:_647C0AD6D184438F9314D2B6DD0FD9C1"
+        "OwnerKey" = "8:_8AC420F1053702C97FCFB9DE5C9CEF38"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
         "MsmKey" = "8:_UNDEFINED"
-        "OwnerKey" = "8:_61D0BF83862A4181AEEADA21FB1C17A9"
+        "OwnerKey" = "8:_647C0AD6D184438F9314D2B6DD0FD9C1"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
         "MsmKey" = "8:_UNDEFINED"
-        "OwnerKey" = "8:_43143199410A44EBBF1E69F608989EB1"
+        "OwnerKey" = "8:_61D0BF83862A4181AEEADA21FB1C17A9"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
         "MsmKey" = "8:_UNDEFINED"
-        "OwnerKey" = "8:_2DECD1E3637A43FA94AF210B2D7AA487"
+        "OwnerKey" = "8:_43143199410A44EBBF1E69F608989EB1"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
         "MsmKey" = "8:_UNDEFINED"
-        "OwnerKey" = "8:_334AD48D8BA4B19B5C1C937FE136E37C"
+        "OwnerKey" = "8:_2DECD1E3637A43FA94AF210B2D7AA487"
         "MsmSig" = "8:_UNDEFINED"
         }
-        "Entry"
-        {
-        "MsmKey" = "8:_UNDEFINED"
-        "OwnerKey" = "8:_4DC3744B0E677F5E6336527424A1C8B4"
-        "MsmSig" = "8:_UNDEFINED"
-        }
     }
     "Configurations"
     {
@@ -823,10 +757,10 @@
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_237AB4F7A0FE364F175B8F9540479067"
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_19C14698B352BFFBF91D748CEC0DEA97"
             {
-            "SourcePath" = "8:dte90.olb"
-            "TargetName" = "8:dte90.olb"
+            "SourcePath" = "8:dte80.olb"
+            "TargetName" = "8:dte80.olb"
             "Tag" = "8:"
             "Folder" = "8:_006CBF0784B24831A183FEE0E7D94E51"
             "Condition" = "8:"
@@ -843,23 +777,12 @@
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
-            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2A29D83B76A4737E5B5A1C69D018BDF4"
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_27D10E0457C873431A5401C8AD300A4C"
             {
-            "AssemblyRegister" = "3:1"
-            "AssemblyIsInGAC" = "11:TRUE"
-            "AssemblyAsmDisplayName" = "8:Microsoft.VisualStudio.TextManager.Interop, Version=7.1.40304.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
-                "ScatterAssemblies"
-                {
-                    "_2A29D83B76A4737E5B5A1C69D018BDF4"
-                    {
-                    "Name" = "8:Microsoft.VisualStudio.TextManager.Interop.dll"
-                    "Attributes" = "3:512"
-                    }
-                }
-            "SourcePath" = "8:Microsoft.VisualStudio.TextManager.Interop.dll"
-            "TargetName" = "8:"
+            "SourcePath" = "8:dte80a.olb"
+            "TargetName" = "8:dte80a.olb"
             "Tag" = "8:"
-            "Folder" = "8:_E8C374FC59DF4755876911DCF099C3C1"
+            "Folder" = "8:_006CBF0784B24831A183FEE0E7D94E51"
             "Condition" = "8:"
             "Transitive" = "11:FALSE"
             "Vital" = "11:TRUE"
@@ -874,20 +797,20 @@
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
-            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_306CCA4807A5EF0FE24E4D25F17CEEEE"
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2A29D83B76A4737E5B5A1C69D018BDF4"
             {
             "AssemblyRegister" = "3:1"
             "AssemblyIsInGAC" = "11:TRUE"
-            "AssemblyAsmDisplayName" = "8:Microsoft.VisualStudio.VSHelp, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+            "AssemblyAsmDisplayName" = "8:Microsoft.VisualStudio.TextManager.Interop, Version=7.1.40304.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                 "ScatterAssemblies"
                 {
-                    "_306CCA4807A5EF0FE24E4D25F17CEEEE"
+                    "_2A29D83B76A4737E5B5A1C69D018BDF4"
                     {
-                    "Name" = "8:Microsoft.VisualStudio.VSHelp.dll"
+                    "Name" = "8:Microsoft.VisualStudio.TextManager.Interop.dll"
                     "Attributes" = "3:512"
                     }
                 }
-            "SourcePath" = "8:Microsoft.VisualStudio.VSHelp.dll"
+            "SourcePath" = "8:Microsoft.VisualStudio.TextManager.Interop.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_E8C374FC59DF4755876911DCF099C3C1"
@@ -905,23 +828,23 @@
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
-            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_334AD48D8BA4B19B5C1C937FE136E37C"
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_306CCA4807A5EF0FE24E4D25F17CEEEE"
             {
             "AssemblyRegister" = "3:1"
-            "AssemblyIsInGAC" = "11:FALSE"
-            "AssemblyAsmDisplayName" = "8:Xsd2Code.Library, Version=3.3.0.20794, Culture=neutral, PublicKeyToken=04032056d5f54f80, processorArchitecture=MSIL"
+            "AssemblyIsInGAC" = "11:TRUE"
+            "AssemblyAsmDisplayName" = "8:Microsoft.VisualStudio.VSHelp, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                 "ScatterAssemblies"
                 {
-                    "_334AD48D8BA4B19B5C1C937FE136E37C"
+                    "_306CCA4807A5EF0FE24E4D25F17CEEEE"
                     {
-                    "Name" = "8:Xsd2Code.Library.dll"
+                    "Name" = "8:Microsoft.VisualStudio.VSHelp.dll"
                     "Attributes" = "3:512"
                     }
                 }
-            "SourcePath" = "8:Xsd2Code.Library.dll"
+            "SourcePath" = "8:Microsoft.VisualStudio.VSHelp.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
-            "Folder" = "8:_006CBF0784B24831A183FEE0E7D94E51"
+            "Folder" = "8:_E8C374FC59DF4755876911DCF099C3C1"
             "Condition" = "8:"
             "Transitive" = "11:FALSE"
             "Vital" = "11:TRUE"
@@ -932,7 +855,7 @@
             "SharedLegacy" = "11:FALSE"
             "PackageAs" = "3:1"
             "Register" = "3:1"
-            "Exclude" = "11:TRUE"
+            "Exclude" = "11:FALSE"
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
@@ -967,37 +890,6 @@
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
-            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_4DC3744B0E677F5E6336527424A1C8B4"
-            {
-            "AssemblyRegister" = "3:1"
-            "AssemblyIsInGAC" = "11:FALSE"
-            "AssemblyAsmDisplayName" = "8:CppCodeProvider, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
-                "ScatterAssemblies"
-                {
-                    "_4DC3744B0E677F5E6336527424A1C8B4"
-                    {
-                    "Name" = "8:CppCodeProvider.dll"
-                    "Attributes" = "3:512"
-                    }
-                }
-            "SourcePath" = "8:CppCodeProvider.dll"
-            "TargetName" = "8:"
-            "Tag" = "8:"
-            "Folder" = "8:_006CBF0784B24831A183FEE0E7D94E51"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_52BD26E9261145B2BFB7F6F40F1B4180"
             {
             "SourcePath" = "8:..\\Xsd2Code.Console\\Resources\\Readme.xps"
@@ -1080,26 +972,6 @@
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5EAADD34BDADD640ABC70C1A462807F8"
-            {
-            "SourcePath" = "8:dte80.olb"
-            "TargetName" = "8:dte80.olb"
-            "Tag" = "8:"
-            "Folder" = "8:_006CBF0784B24831A183FEE0E7D94E51"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_64620B4D54084669B540372A4082535D"
             {
             "AssemblyRegister" = "3:1"
@@ -1131,10 +1003,10 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_795F0A9412FC2A617F571C7AC8649416"
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_778D1705C5CF3FED111E9AC640B4D978"
             {
-            "SourcePath" = "8:ProjectAggregator.dll"
-            "TargetName" = "8:ProjectAggregator.dll"
+            "SourcePath" = "8:dte90.olb"
+            "TargetName" = "8:dte90.olb"
             "Tag" = "8:"
             "Folder" = "8:_006CBF0784B24831A183FEE0E7D94E51"
             "Condition" = "8:"
@@ -1202,6 +1074,37 @@
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
+            "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8AC420F1053702C97FCFB9DE5C9CEF38"
+            {
+            "AssemblyRegister" = "3:1"
+            "AssemblyIsInGAC" = "11:FALSE"
+            "AssemblyAsmDisplayName" = "8:CppCodeProvider, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
+                "ScatterAssemblies"
+                {
+                    "_8AC420F1053702C97FCFB9DE5C9CEF38"
+                    {
+                    "Name" = "8:CppCodeProvider.dll"
+                    "Attributes" = "3:512"
+                    }
+                }
+            "SourcePath" = "8:CppCodeProvider.dll"
+            "TargetName" = "8:"
+            "Tag" = "8:"
+            "Folder" = "8:_006CBF0784B24831A183FEE0E7D94E51"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
             "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9882338D52204001EDCD2BAC93035802"
             {
             "AssemblyRegister" = "3:1"
@@ -1264,6 +1167,26 @@
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_996F3476368266333B6D85510FDA1BD7"
+            {
+            "SourcePath" = "8:vsmso.olb"
+            "TargetName" = "8:vsmso.olb"
+            "Tag" = "8:"
+            "Folder" = "8:_006CBF0784B24831A183FEE0E7D94E51"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
             "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9B04B0A1BA372F57AC19697A9635EBE0"
             {
             "AssemblyRegister" = "3:1"
@@ -1397,46 +1320,6 @@
             "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E8FE4AE9713C335CF29E5DA97AAFD1AA"
-            {
-            "SourcePath" = "8:dte80a.olb"
-            "TargetName" = "8:dte80a.olb"
-            "Tag" = "8:"
-            "Folder" = "8:_006CBF0784B24831A183FEE0E7D94E51"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E926FE2C55A07FE669A8CFB5F9BA7113"
-            {
-            "SourcePath" = "8:vsmso.olb"
-            "TargetName" = "8:vsmso.olb"
-            "Tag" = "8:"
-            "Folder" = "8:_006CBF0784B24831A183FEE0E7D94E51"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_EDA0E61B645870C31CED1FA931E513AA"
             {
             "AssemblyRegister" = "3:1"


Property changes on: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.SetupLibrary
___________________________________________________________________
Added: svn:ignore
   + obj


Modified: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.SetupLibrary/Xsd2Code.SetupLibrary.csproj
===================================================================
--- branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.SetupLibrary/Xsd2Code.SetupLibrary.csproj	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.SetupLibrary/Xsd2Code.SetupLibrary.csproj	2013-09-14 16:22:05 UTC (rev 7858)
@@ -12,10 +12,14 @@
     <AssemblyName>Xsd2Code.SetupLibrary</AssemblyName>
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
-    <SccProjectName>SAK</SccProjectName>
-    <SccLocalPath>SAK</SccLocalPath>
-    <SccAuxPath>SAK</SccAuxPath>
-    <SccProvider>SAK</SccProvider>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>


Property changes on: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.SetupLibrary/bin
___________________________________________________________________
Added: svn:ignore
   + Release



Property changes on: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.TestUnit
___________________________________________________________________
Added: svn:ignore
   + bin
obj


Modified: branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.TestUnit/Xsd2Code.TestUnit.csproj
===================================================================
--- branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.TestUnit/Xsd2Code.TestUnit.csproj	2013-09-14 16:01:22 UTC (rev 7857)
+++ branches/maestro-5.0.x/Thirdparty/Xsd2Code/Xsd2Code.TestUnit/Xsd2Code.TestUnit.csproj	2013-09-14 16:22:05 UTC (rev 7858)
@@ -11,10 +11,14 @@
     <AssemblyName>Xsd2Code.TestUnit</AssemblyName>
     <WarningLevel>4</WarningLevel>
     <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <SccProjectName>SAK</SccProjectName>
-    <SccLocalPath>SAK</SccLocalPath>
-    <SccAuxPath>SAK</SccAuxPath>
-    <SccProvider>SAK</SccProvider>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
     <FileUpgradeFlags>
     </FileUpgradeFlags>
     <OldToolsVersion>2.0</OldToolsVersion>



More information about the mapguide-commits mailing list