[mapguide-commits] r8482 - in trunk/Tools/Maestro: Generated Maestro MaestroAPITests OSGeo.MapGuide.MaestroAPI OSGeo.MapGuide.MaestroAPI/Schemas OSGeo.MapGuide.MaestroAPI.Http OSGeo.MapGuide.ObjectModels OSGeo.MapGuide.ObjectModels/RuntimeMap OSGeo.MapGuide.ObjectModels/RuntimeMap/v3_0_0 Thirdparty

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Mon Dec 29 05:18:49 PST 2014


Author: jng
Date: 2014-12-29 05:18:49 -0800 (Mon, 29 Dec 2014)
New Revision: 8482

Added:
   trunk/Tools/Maestro/Generated/MapDefinition-3.0.0.designer.cs
   trunk/Tools/Maestro/Generated/RuntimeMap-3.0.0.designer.cs
   trunk/Tools/Maestro/Generated/TileProviderList-3.0.0.designer.cs
   trunk/Tools/Maestro/Generated/TileSetDefinition-3.0.0.designer.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/MapDefinition-3.0.0.xsd
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/RuntimeMap-3.0.0.xsd
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/TileProviderList-3.0.0.xsd
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/TileSetDefinition-3.0.0.xsd
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/RuntimeMap/v3_0_0/
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/RuntimeMap/v3_0_0/RuntimeMapImpl.cs
Removed:
   trunk/Tools/Maestro/Thirdparty/Xsd2Code/
Modified:
   trunk/Tools/Maestro/Maestro/Maestro.csproj
   trunk/Tools/Maestro/MaestroAPITests/MaestroAPITests.csproj
   trunk/Tools/Maestro/MaestroAPITests/RuntimeMapTests.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/HttpServerConnection.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/RequestBuilder.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/OSGeo.MapGuide.ObjectModels.csproj
   trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/RuntimeMap/RuntimeMapInterfaces.cs
Log:
#2515: Add support for the Runtime 3.0.0 schema in MGOS 3.0. Add a new IRuntimeMapInfo2 to model the new changes. Modify the HTTP implementations of ICreateRuntimeMap and IDescribeRuntimeMap to request this particular version of the RuntimeMap schema. Update the runtime map tests to check that the right IRuntimeMapInfo instance is being returned.

Also remove xsd2code from thirdparty

Added: trunk/Tools/Maestro/Generated/MapDefinition-3.0.0.designer.cs
===================================================================
--- trunk/Tools/Maestro/Generated/MapDefinition-3.0.0.designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Generated/MapDefinition-3.0.0.designer.cs	2014-12-29 13:18:49 UTC (rev 8482)
@@ -0,0 +1,11593 @@
+// ------------------------------------------------------------------------------
+//  <auto-generated>
+//    Generated by Xsd2Code. Version 3.4.0.32989
+//    <NameSpace>OSGeo.MapGuide.ObjectModels.MapDefinition</NameSpace><Collection>BindingList</Collection><codeType>CSharp</codeType><EnableDataBinding>True</EnableDataBinding><EnableLazyLoading>False</EnableLazyLoading><TrackingChangesEnable>False</TrackingChangesEnable><GenTrackingClasses>False</GenTrackingClasses><HidePrivateFieldInIDE>True</HidePrivateFieldInIDE><EnableSummaryComment>True</EnableSummaryComment><VirtualProp>False</VirtualProp><IncludeSerializeMethod>True</IncludeSerializeMethod><UseBaseClass>False</UseBaseClass><GenBaseClass>False</GenBaseClass><GenerateCloneMethod>True</GenerateCloneMethod><GenerateDataContracts>False</GenerateDataContracts><CodeBaseTag>Net20</CodeBaseTag><SerializeMethodName>Serialize</SerializeMethodName><DeserializeMethodName>Deserialize</DeserializeMethodName><SaveToFileMethodName>SaveToFile</SaveToFileMethodName><LoadFromFileMethodName>LoadFromFile</LoadFromFileMethodName><GenerateXMLAttributes>True</GenerateXMLAttributes><OrderXMLA
 ttrib>False</OrderXMLAttrib><EnableEncoding>False</EnableEncoding><AutomaticProperties>False</AutomaticProperties><GenerateShouldSerialize>False</GenerateShouldSerialize><DisableDebug>False</DisableDebug><PropNameSpecified>Default</PropNameSpecified><Encoder>UTF8</Encoder><CustomUsings></CustomUsings><ExcludeIncludedTypes>False</ExcludeIncludedTypes><EnableInitializeFields>False</EnableInitializeFields>
+//  </auto-generated>
+// ------------------------------------------------------------------------------
+namespace OSGeo.MapGuide.ObjectModels.MapDefinition {
+    using System;
+    using System.Diagnostics;
+    using System.Xml.Serialization;
+    using System.Collections;
+    using System.Xml.Schema;
+    using System.ComponentModel;
+    using System.IO;
+    using System.Text;
+    
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    [System.Xml.Serialization.XmlRootAttribute("SimpleSymbolDefinition", Namespace="", IsNullable=false)]
+    public partial class SimpleSymbolDefinition1 : SimpleSymbolDefinition, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string versionField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public SimpleSymbolDefinition1() {
+            this.versionField = "2.4.0";
+        }
+        
+        [System.Xml.Serialization.XmlAttributeAttribute()]
+        public string version {
+            get {
+                return this.versionField;
+            }
+            set {
+                if ((this.versionField != null)) {
+                    if ((versionField.Equals(value) != true)) {
+                        this.versionField = value;
+                        this.OnPropertyChanged("version");
+                    }
+                }
+                else {
+                    this.versionField = value;
+                    this.OnPropertyChanged("version");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(SimpleSymbolDefinition1));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current SimpleSymbolDefinition1 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 SimpleSymbolDefinition1 object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output SimpleSymbolDefinition1 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 SimpleSymbolDefinition1 obj, out System.Exception exception) {
+            exception = null;
+            obj = default(SimpleSymbolDefinition1);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out SimpleSymbolDefinition1 obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static SimpleSymbolDefinition1 Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((SimpleSymbolDefinition1)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current SimpleSymbolDefinition1 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 SimpleSymbolDefinition1 object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output SimpleSymbolDefinition1 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 SimpleSymbolDefinition1 obj, out System.Exception exception) {
+            exception = null;
+            obj = default(SimpleSymbolDefinition1);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out SimpleSymbolDefinition1 obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static SimpleSymbolDefinition1 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 SimpleSymbolDefinition1 object
+        /// </summary>
+        public virtual SimpleSymbolDefinition1 Clone() {
+            return ((SimpleSymbolDefinition1)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    /// <summary>
+    /// A 2D simple symbol for stylization.
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class SimpleSymbolDefinition : SymbolDefinitionBase, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<GraphicBase> graphicsField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ResizeBox resizeBoxField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private PointUsage pointUsageField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private LineUsage lineUsageField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private AreaUsage areaUsageField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ParameterDefinition parameterDefinitionField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        /// <summary>
+        /// The collection of graphic elements defining this symbol.
+        /// </summary>
+        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(Image), IsNullable=false)]
+        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(Path), IsNullable=false)]
+        [System.Xml.Serialization.XmlArrayItemAttribute(typeof(Text), IsNullable=false)]
+        public BindingList<GraphicBase> Graphics {
+            get {
+                return this.graphicsField;
+            }
+            set {
+                if ((this.graphicsField != null)) {
+                    if ((graphicsField.Equals(value) != true)) {
+                        this.graphicsField = value;
+                        this.OnPropertyChanged("Graphics");
+                    }
+                }
+                else {
+                    this.graphicsField = value;
+                    this.OnPropertyChanged("Graphics");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The optional box used to resize and reposition select graphic elements.  The graphical extent of all elements with ResizeControl set to AddToResizeBox will be added to this box, potentially causing it to grow in size.  Any change in size causes all elements with ResizeControl set to AdjustToResizeBox to be proportionally resized and repositioned.
+        /// </summary>
+        public ResizeBox ResizeBox {
+            get {
+                return this.resizeBoxField;
+            }
+            set {
+                if ((this.resizeBoxField != null)) {
+                    if ((resizeBoxField.Equals(value) != true)) {
+                        this.resizeBoxField = value;
+                        this.OnPropertyChanged("ResizeBox");
+                    }
+                }
+                else {
+                    this.resizeBoxField = value;
+                    this.OnPropertyChanged("ResizeBox");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies how the symbol is used in the context of point features.
+        /// </summary>
+        public PointUsage PointUsage {
+            get {
+                return this.pointUsageField;
+            }
+            set {
+                if ((this.pointUsageField != null)) {
+                    if ((pointUsageField.Equals(value) != true)) {
+                        this.pointUsageField = value;
+                        this.OnPropertyChanged("PointUsage");
+                    }
+                }
+                else {
+                    this.pointUsageField = value;
+                    this.OnPropertyChanged("PointUsage");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies how the symbol is used in the context of linear features.
+        /// </summary>
+        public LineUsage LineUsage {
+            get {
+                return this.lineUsageField;
+            }
+            set {
+                if ((this.lineUsageField != null)) {
+                    if ((lineUsageField.Equals(value) != true)) {
+                        this.lineUsageField = value;
+                        this.OnPropertyChanged("LineUsage");
+                    }
+                }
+                else {
+                    this.lineUsageField = value;
+                    this.OnPropertyChanged("LineUsage");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies how the symbol is used in the context of area features.
+        /// </summary>
+        public AreaUsage AreaUsage {
+            get {
+                return this.areaUsageField;
+            }
+            set {
+                if ((this.areaUsageField != null)) {
+                    if ((areaUsageField.Equals(value) != true)) {
+                        this.areaUsageField = value;
+                        this.OnPropertyChanged("AreaUsage");
+                    }
+                }
+                else {
+                    this.areaUsageField = value;
+                    this.OnPropertyChanged("AreaUsage");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The list of parameters used in this symbol.  If a parameter is not listed here this is considered a bug in the symbol definition.
+        /// </summary>
+        public ParameterDefinition ParameterDefinition {
+            get {
+                return this.parameterDefinitionField;
+            }
+            set {
+                if ((this.parameterDefinitionField != null)) {
+                    if ((parameterDefinitionField.Equals(value) != true)) {
+                        this.parameterDefinitionField = value;
+                        this.OnPropertyChanged("ParameterDefinition");
+                    }
+                }
+                else {
+                    this.parameterDefinitionField = value;
+                    this.OnPropertyChanged("ParameterDefinition");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(SimpleSymbolDefinition));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current SimpleSymbolDefinition 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 SimpleSymbolDefinition object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output SimpleSymbolDefinition 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 SimpleSymbolDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(SimpleSymbolDefinition);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out SimpleSymbolDefinition obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static SimpleSymbolDefinition Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((SimpleSymbolDefinition)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current SimpleSymbolDefinition 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 SimpleSymbolDefinition object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output SimpleSymbolDefinition 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 SimpleSymbolDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(SimpleSymbolDefinition);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out SimpleSymbolDefinition obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static SimpleSymbolDefinition 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 SimpleSymbolDefinition object
+        /// </summary>
+        public virtual SimpleSymbolDefinition Clone() {
+            return ((SimpleSymbolDefinition)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class Image : GraphicBase, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private object itemField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string sizeXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string sizeYField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string sizeScalableField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string angleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string positionXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string positionYField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public Image() {
+            this.sizeXField = "1.0";
+            this.sizeYField = "1.0";
+            this.sizeScalableField = "true";
+            this.angleField = "0.0";
+            this.positionXField = "0.0";
+            this.positionYField = "0.0";
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("Content", typeof(byte[]), DataType="base64Binary")]
+        [System.Xml.Serialization.XmlElementAttribute("Reference", typeof(ImageReference))]
+        public object Item {
+            get {
+                return this.itemField;
+            }
+            set {
+                if ((this.itemField != null)) {
+                    if ((itemField.Equals(value) != true)) {
+                        this.itemField = value;
+                        this.OnPropertyChanged("Item");
+                    }
+                }
+                else {
+                    this.itemField = value;
+                    this.OnPropertyChanged("Item");
+                }
+            }
+        }
+        
+        public string SizeX {
+            get {
+                return this.sizeXField;
+            }
+            set {
+                if ((this.sizeXField != null)) {
+                    if ((sizeXField.Equals(value) != true)) {
+                        this.sizeXField = value;
+                        this.OnPropertyChanged("SizeX");
+                    }
+                }
+                else {
+                    this.sizeXField = value;
+                    this.OnPropertyChanged("SizeX");
+                }
+            }
+        }
+        
+        public string SizeY {
+            get {
+                return this.sizeYField;
+            }
+            set {
+                if ((this.sizeYField != null)) {
+                    if ((sizeYField.Equals(value) != true)) {
+                        this.sizeYField = value;
+                        this.OnPropertyChanged("SizeY");
+                    }
+                }
+                else {
+                    this.sizeYField = value;
+                    this.OnPropertyChanged("SizeY");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("true")]
+        public string SizeScalable {
+            get {
+                return this.sizeScalableField;
+            }
+            set {
+                if ((this.sizeScalableField != null)) {
+                    if ((sizeScalableField.Equals(value) != true)) {
+                        this.sizeScalableField = value;
+                        this.OnPropertyChanged("SizeScalable");
+                    }
+                }
+                else {
+                    this.sizeScalableField = value;
+                    this.OnPropertyChanged("SizeScalable");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string Angle {
+            get {
+                return this.angleField;
+            }
+            set {
+                if ((this.angleField != null)) {
+                    if ((angleField.Equals(value) != true)) {
+                        this.angleField = value;
+                        this.OnPropertyChanged("Angle");
+                    }
+                }
+                else {
+                    this.angleField = value;
+                    this.OnPropertyChanged("Angle");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string PositionX {
+            get {
+                return this.positionXField;
+            }
+            set {
+                if ((this.positionXField != null)) {
+                    if ((positionXField.Equals(value) != true)) {
+                        this.positionXField = value;
+                        this.OnPropertyChanged("PositionX");
+                    }
+                }
+                else {
+                    this.positionXField = value;
+                    this.OnPropertyChanged("PositionX");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string PositionY {
+            get {
+                return this.positionYField;
+            }
+            set {
+                if ((this.positionYField != null)) {
+                    if ((positionYField.Equals(value) != true)) {
+                        this.positionYField = value;
+                        this.OnPropertyChanged("PositionY");
+                    }
+                }
+                else {
+                    this.positionYField = value;
+                    this.OnPropertyChanged("PositionY");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(Image));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current Image 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 Image object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output Image 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 Image obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Image);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out Image obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static Image Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((Image)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current Image 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 Image object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output Image 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 Image obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Image);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out Image obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static Image 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 Image object
+        /// </summary>
+        public virtual Image Clone() {
+            return ((Image)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class ImageReference : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string resourceIdField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string libraryItemNameField;
+        
+        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 LibraryItemName {
+            get {
+                return this.libraryItemNameField;
+            }
+            set {
+                if ((this.libraryItemNameField != null)) {
+                    if ((libraryItemNameField.Equals(value) != true)) {
+                        this.libraryItemNameField = value;
+                        this.OnPropertyChanged("LibraryItemName");
+                    }
+                }
+                else {
+                    this.libraryItemNameField = value;
+                    this.OnPropertyChanged("LibraryItemName");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(ImageReference));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current ImageReference 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 ImageReference object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output ImageReference 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 ImageReference obj, out System.Exception exception) {
+            exception = null;
+            obj = default(ImageReference);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out ImageReference obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static ImageReference Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((ImageReference)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current ImageReference 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 ImageReference object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output ImageReference 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 ImageReference obj, out System.Exception exception) {
+            exception = null;
+            obj = default(ImageReference);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out ImageReference obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static ImageReference 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 ImageReference object
+        /// </summary>
+        public virtual ImageReference Clone() {
+            return ((ImageReference)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class SimpleSymbol : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private object itemField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string renderingPassField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public SimpleSymbol() {
+            this.renderingPassField = "0";
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("ResourceId", typeof(string))]
+        [System.Xml.Serialization.XmlElementAttribute("SimpleSymbolDefinition", typeof(SimpleSymbolDefinition))]
+        public object Item {
+            get {
+                return this.itemField;
+            }
+            set {
+                if ((this.itemField != null)) {
+                    if ((itemField.Equals(value) != true)) {
+                        this.itemField = value;
+                        this.OnPropertyChanged("Item");
+                    }
+                }
+                else {
+                    this.itemField = value;
+                    this.OnPropertyChanged("Item");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The optional rendering pass in which this symbol definition draws.  If specified this must be greater than or equal to zero.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0")]
+        public string RenderingPass {
+            get {
+                return this.renderingPassField;
+            }
+            set {
+                if ((this.renderingPassField != null)) {
+                    if ((renderingPassField.Equals(value) != true)) {
+                        this.renderingPassField = value;
+                        this.OnPropertyChanged("RenderingPass");
+                    }
+                }
+                else {
+                    this.renderingPassField = value;
+                    this.OnPropertyChanged("RenderingPass");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(SimpleSymbol));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current SimpleSymbol 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 SimpleSymbol object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output SimpleSymbol 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 SimpleSymbol obj, out System.Exception exception) {
+            exception = null;
+            obj = default(SimpleSymbol);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out SimpleSymbol obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static SimpleSymbol Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((SimpleSymbol)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current SimpleSymbol 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 SimpleSymbol object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output SimpleSymbol 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 SimpleSymbol obj, out System.Exception exception) {
+            exception = null;
+            obj = default(SimpleSymbol);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out SimpleSymbol obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static SimpleSymbol 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 SimpleSymbol object
+        /// </summary>
+        public virtual SimpleSymbol Clone() {
+            return ((SimpleSymbol)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class ExtendedDataType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<System.Xml.XmlElement> anyField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        [System.Xml.Serialization.XmlAnyElementAttribute()]
+        public BindingList<System.Xml.XmlElement> Any {
+            get {
+                return this.anyField;
+            }
+            set {
+                if ((this.anyField != null)) {
+                    if ((anyField.Equals(value) != true)) {
+                        this.anyField = value;
+                        this.OnPropertyChanged("Any");
+                    }
+                }
+                else {
+                    this.anyField = value;
+                    this.OnPropertyChanged("Any");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(ExtendedDataType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current ExtendedDataType 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 ExtendedDataType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output ExtendedDataType 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 ExtendedDataType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(ExtendedDataType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out ExtendedDataType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static ExtendedDataType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((ExtendedDataType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current ExtendedDataType 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 ExtendedDataType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output ExtendedDataType 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 ExtendedDataType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(ExtendedDataType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out ExtendedDataType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static ExtendedDataType 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 ExtendedDataType object
+        /// </summary>
+        public virtual ExtendedDataType Clone() {
+            return ((ExtendedDataType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class Parameter : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string identifierField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string defaultValueField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string displayNameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string descriptionField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private DataType dataTypeField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public Parameter() {
+            this.dataTypeField = DataType.String;
+        }
+        
+        /// <summary>
+        /// The parameter identifier as used in the symbol.
+        /// </summary>
+        public string Identifier {
+            get {
+                return this.identifierField;
+            }
+            set {
+                if ((this.identifierField != null)) {
+                    if ((identifierField.Equals(value) != true)) {
+                        this.identifierField = value;
+                        this.OnPropertyChanged("Identifier");
+                    }
+                }
+                else {
+                    this.identifierField = value;
+                    this.OnPropertyChanged("Identifier");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The default value of the parameter if no override is defined in the symbol instance.  This can be an expression.
+        /// </summary>
+        public string DefaultValue {
+            get {
+                return this.defaultValueField;
+            }
+            set {
+                if ((this.defaultValueField != null)) {
+                    if ((defaultValueField.Equals(value) != true)) {
+                        this.defaultValueField = value;
+                        this.OnPropertyChanged("DefaultValue");
+                    }
+                }
+                else {
+                    this.defaultValueField = value;
+                    this.OnPropertyChanged("DefaultValue");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// An optional short description of the parameter.  This can be used, for example, to ask the user to specify a parameter value.
+        /// </summary>
+        public string DisplayName {
+            get {
+                return this.displayNameField;
+            }
+            set {
+                if ((this.displayNameField != null)) {
+                    if ((displayNameField.Equals(value) != true)) {
+                        this.displayNameField = value;
+                        this.OnPropertyChanged("DisplayName");
+                    }
+                }
+                else {
+                    this.displayNameField = value;
+                    this.OnPropertyChanged("DisplayName");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// An optional long description of the parameter.  This might include a description of useful values for this parameter.
+        /// </summary>
+        public string Description {
+            get {
+                return this.descriptionField;
+            }
+            set {
+                if ((this.descriptionField != null)) {
+                    if ((descriptionField.Equals(value) != true)) {
+                        this.descriptionField = value;
+                        this.OnPropertyChanged("Description");
+                    }
+                }
+                else {
+                    this.descriptionField = value;
+                    this.OnPropertyChanged("Description");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// An optional explicit declaration of data type or data usage context.  This is a hint used by the UI when assigning a value to this parameter.  Defaults to String.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute(DataType.String)]
+        public DataType DataType {
+            get {
+                return this.dataTypeField;
+            }
+            set {
+                if ((dataTypeField.Equals(value) != true)) {
+                    this.dataTypeField = value;
+                    this.OnPropertyChanged("DataType");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(Parameter));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current Parameter 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 Parameter object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output Parameter 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 Parameter obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Parameter);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out Parameter obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static Parameter Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((Parameter)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current Parameter 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 Parameter object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output Parameter 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 Parameter obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Parameter);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out Parameter obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static Parameter 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 Parameter object
+        /// </summary>
+        public virtual Parameter Clone() {
+            return ((Parameter)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    public enum DataType {
+        
+        /// <remarks/>
+        String,
+        
+        /// <remarks/>
+        Boolean,
+        
+        /// <remarks/>
+        Integer,
+        
+        /// <remarks/>
+        Real,
+        
+        /// <remarks/>
+        Color,
+        
+        /// <remarks/>
+        Angle,
+        
+        /// <remarks/>
+        FillColor,
+        
+        /// <remarks/>
+        LineColor,
+        
+        /// <remarks/>
+        LineWeight,
+        
+        /// <remarks/>
+        Content,
+        
+        /// <remarks/>
+        Markup,
+        
+        /// <remarks/>
+        FontName,
+        
+        /// <remarks/>
+        Bold,
+        
+        /// <remarks/>
+        Italic,
+        
+        /// <remarks/>
+        Underlined,
+        
+        /// <remarks/>
+        Overlined,
+        
+        /// <remarks/>
+        ObliqueAngle,
+        
+        /// <remarks/>
+        TrackSpacing,
+        
+        /// <remarks/>
+        FontHeight,
+        
+        /// <remarks/>
+        HorizontalAlignment,
+        
+        /// <remarks/>
+        VerticalAlignment,
+        
+        /// <remarks/>
+        Justification,
+        
+        /// <remarks/>
+        LineSpacing,
+        
+        /// <remarks/>
+        TextColor,
+        
+        /// <remarks/>
+        GhostColor,
+        
+        /// <remarks/>
+        FrameLineColor,
+        
+        /// <remarks/>
+        FrameFillColor,
+        
+        /// <remarks/>
+        StartOffset,
+        
+        /// <remarks/>
+        EndOffset,
+        
+        /// <remarks/>
+        RepeatX,
+        
+        /// <remarks/>
+        RepeatY,
+    }
+    
+    /// <summary>
+    /// The list of parameters used in this symbol.  If a parameter is not listed here this is considered a bug in the symbol definition.
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class ParameterDefinition : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<Parameter> parameterField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        [System.Xml.Serialization.XmlElementAttribute("Parameter")]
+        public BindingList<Parameter> Parameter {
+            get {
+                return this.parameterField;
+            }
+            set {
+                if ((this.parameterField != null)) {
+                    if ((parameterField.Equals(value) != true)) {
+                        this.parameterField = value;
+                        this.OnPropertyChanged("Parameter");
+                    }
+                }
+                else {
+                    this.parameterField = value;
+                    this.OnPropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(ParameterDefinition));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current ParameterDefinition 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 ParameterDefinition object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output ParameterDefinition 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 ParameterDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(ParameterDefinition);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out ParameterDefinition obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static ParameterDefinition Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((ParameterDefinition)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current ParameterDefinition 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 ParameterDefinition object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output ParameterDefinition 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 ParameterDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(ParameterDefinition);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out ParameterDefinition obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static ParameterDefinition 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 ParameterDefinition object
+        /// </summary>
+        public virtual ParameterDefinition Clone() {
+            return ((ParameterDefinition)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    /// <summary>
+    /// Specifies how the symbol is used in the context of area features.
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class AreaUsage : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string angleControlField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string originControlField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string clippingControlField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string angleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string originXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string originYField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string repeatXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string repeatYField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string bufferWidthField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public AreaUsage() {
+            this.angleControlField = "\'FromAngle\'";
+            this.originControlField = "\'Global\'";
+            this.clippingControlField = "\'Clip\'";
+            this.angleField = "0.0";
+            this.originXField = "0.0";
+            this.originYField = "0.0";
+            this.repeatXField = "0.0";
+            this.repeatYField = "0.0";
+            this.bufferWidthField = "0.0";
+        }
+        
+        /// <summary>
+        /// Specifies how the symbol angle is defined.  This must evaluate to one of: FromAngle (default) or FromGeometry.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("\'FromAngle\'")]
+        public string AngleControl {
+            get {
+                return this.angleControlField;
+            }
+            set {
+                if ((this.angleControlField != null)) {
+                    if ((angleControlField.Equals(value) != true)) {
+                        this.angleControlField = value;
+                        this.OnPropertyChanged("AngleControl");
+                    }
+                }
+                else {
+                    this.angleControlField = value;
+                    this.OnPropertyChanged("AngleControl");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies how the symbol grid origin is defined.  This must evaluate to one of: Global (default), Local, or Centroid.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("\'Global\'")]
+        public string OriginControl {
+            get {
+                return this.originControlField;
+            }
+            set {
+                if ((this.originControlField != null)) {
+                    if ((originControlField.Equals(value) != true)) {
+                        this.originControlField = value;
+                        this.OnPropertyChanged("OriginControl");
+                    }
+                }
+                else {
+                    this.originControlField = value;
+                    this.OnPropertyChanged("OriginControl");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies the clipping behavior of the symbol at polygon boundaries.  This must evaluate to one of: Clip (default), Inside, or Overlap.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("\'Clip\'")]
+        public string ClippingControl {
+            get {
+                return this.clippingControlField;
+            }
+            set {
+                if ((this.clippingControlField != null)) {
+                    if ((clippingControlField.Equals(value) != true)) {
+                        this.clippingControlField = value;
+                        this.OnPropertyChanged("ClippingControl");
+                    }
+                }
+                else {
+                    this.clippingControlField = value;
+                    this.OnPropertyChanged("ClippingControl");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies the angle of each repeating symbol, in degrees.  If AngleControl evaluates to FromAngle then this specifies the absolute angle of the symbol.  If AngleControl evaluates to FromGeometry then this specifies the symbol angle relative to the geometry.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string Angle {
+            get {
+                return this.angleField;
+            }
+            set {
+                if ((this.angleField != null)) {
+                    if ((angleField.Equals(value) != true)) {
+                        this.angleField = value;
+                        this.OnPropertyChanged("Angle");
+                    }
+                }
+                else {
+                    this.angleField = value;
+                    this.OnPropertyChanged("Angle");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The x-coordinate of the symbol grid origin, in mm.  Only applies if OriginControl evaluates to Global or Local.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string OriginX {
+            get {
+                return this.originXField;
+            }
+            set {
+                if ((this.originXField != null)) {
+                    if ((originXField.Equals(value) != true)) {
+                        this.originXField = value;
+                        this.OnPropertyChanged("OriginX");
+                    }
+                }
+                else {
+                    this.originXField = value;
+                    this.OnPropertyChanged("OriginX");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The y-coordinate of the symbol grid origin, in mm.  Only applies if OriginControl evaluates to Global or Local.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string OriginY {
+            get {
+                return this.originYField;
+            }
+            set {
+                if ((this.originYField != null)) {
+                    if ((originYField.Equals(value) != true)) {
+                        this.originYField = value;
+                        this.OnPropertyChanged("OriginY");
+                    }
+                }
+                else {
+                    this.originYField = value;
+                    this.OnPropertyChanged("OriginY");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The horizontal separation between symbols, in mm.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string RepeatX {
+            get {
+                return this.repeatXField;
+            }
+            set {
+                if ((this.repeatXField != null)) {
+                    if ((repeatXField.Equals(value) != true)) {
+                        this.repeatXField = value;
+                        this.OnPropertyChanged("RepeatX");
+                    }
+                }
+                else {
+                    this.repeatXField = value;
+                    this.OnPropertyChanged("RepeatX");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The vertical separation between symbols, in mm.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string RepeatY {
+            get {
+                return this.repeatYField;
+            }
+            set {
+                if ((this.repeatYField != null)) {
+                    if ((repeatYField.Equals(value) != true)) {
+                        this.repeatYField = value;
+                        this.OnPropertyChanged("RepeatY");
+                    }
+                }
+                else {
+                    this.repeatYField = value;
+                    this.OnPropertyChanged("RepeatY");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The width, in mm, of the buffer zone relative to the polygon boundary in which the symbol is rendered.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string BufferWidth {
+            get {
+                return this.bufferWidthField;
+            }
+            set {
+                if ((this.bufferWidthField != null)) {
+                    if ((bufferWidthField.Equals(value) != true)) {
+                        this.bufferWidthField = value;
+                        this.OnPropertyChanged("BufferWidth");
+                    }
+                }
+                else {
+                    this.bufferWidthField = value;
+                    this.OnPropertyChanged("BufferWidth");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(AreaUsage));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current AreaUsage 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 AreaUsage object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output AreaUsage 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 AreaUsage obj, out System.Exception exception) {
+            exception = null;
+            obj = default(AreaUsage);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out AreaUsage obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static AreaUsage Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((AreaUsage)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current AreaUsage 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 AreaUsage object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output AreaUsage 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 AreaUsage obj, out System.Exception exception) {
+            exception = null;
+            obj = default(AreaUsage);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out AreaUsage obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static AreaUsage 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 AreaUsage object
+        /// </summary>
+        public virtual AreaUsage Clone() {
+            return ((AreaUsage)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    /// <summary>
+    /// Specifies how the symbol is used in the context of linear features.
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class LineUsage : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string angleControlField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string unitsControlField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string vertexControlField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string angleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string startOffsetField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string endOffsetField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string repeatField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string vertexAngleLimitField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string vertexJoinField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string vertexMiterLimitField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private Path defaultPathField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public LineUsage() {
+            this.angleControlField = "\'FromGeometry\'";
+            this.unitsControlField = "\'Absolute\'";
+            this.vertexControlField = "\'OverlapWrap\'";
+            this.angleField = "0.0";
+            this.repeatField = "0.0";
+            this.vertexAngleLimitField = "0.0";
+            this.vertexJoinField = "\'Round\'";
+            this.vertexMiterLimitField = "5.0";
+        }
+        
+        /// <summary>
+        /// Specifies how the symbol angle is defined.  This must evaluate to one of: FromAngle or FromGeometry (default).
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("\'FromGeometry\'")]
+        public string AngleControl {
+            get {
+                return this.angleControlField;
+            }
+            set {
+                if ((this.angleControlField != null)) {
+                    if ((angleControlField.Equals(value) != true)) {
+                        this.angleControlField = value;
+                        this.OnPropertyChanged("AngleControl");
+                    }
+                }
+                else {
+                    this.angleControlField = value;
+                    this.OnPropertyChanged("AngleControl");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies whether the distribution parameters are interpreted as absolute values (in mm) or parametric values.  This must evaluate to one of: Absolute (default) or Parametric.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("\'Absolute\'")]
+        public string UnitsControl {
+            get {
+                return this.unitsControlField;
+            }
+            set {
+                if ((this.unitsControlField != null)) {
+                    if ((unitsControlField.Equals(value) != true)) {
+                        this.unitsControlField = value;
+                        this.OnPropertyChanged("UnitsControl");
+                    }
+                }
+                else {
+                    this.unitsControlField = value;
+                    this.OnPropertyChanged("UnitsControl");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies the symbol behavior at vertices.  This must evaluate to one of: OverlapNone, OverlapDirect, or OverlapWrap (default).
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("\'OverlapWrap\'")]
+        public string VertexControl {
+            get {
+                return this.vertexControlField;
+            }
+            set {
+                if ((this.vertexControlField != null)) {
+                    if ((vertexControlField.Equals(value) != true)) {
+                        this.vertexControlField = value;
+                        this.OnPropertyChanged("VertexControl");
+                    }
+                }
+                else {
+                    this.vertexControlField = value;
+                    this.OnPropertyChanged("VertexControl");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies the angle of each repeating symbol, in degrees.  If AngleControl evaluates to FromAngle then this specifies the absolute angle of the symbol.  If AngleControl evaluates to FromGeometry then this specifies the symbol angle relative to the geometry.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string Angle {
+            get {
+                return this.angleField;
+            }
+            set {
+                if ((this.angleField != null)) {
+                    if ((angleField.Equals(value) != true)) {
+                        this.angleField = value;
+                        this.OnPropertyChanged("Angle");
+                    }
+                }
+                else {
+                    this.angleField = value;
+                    this.OnPropertyChanged("Angle");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies where the symbol distribution begins, relative to the start of the feature.  If specified this must be greater than or equal to zero.
+        /// </summary>
+        public string StartOffset {
+            get {
+                return this.startOffsetField;
+            }
+            set {
+                if ((this.startOffsetField != null)) {
+                    if ((startOffsetField.Equals(value) != true)) {
+                        this.startOffsetField = value;
+                        this.OnPropertyChanged("StartOffset");
+                    }
+                }
+                else {
+                    this.startOffsetField = value;
+                    this.OnPropertyChanged("StartOffset");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies where the symbol distribution ends, relative to the end of the feature.  If specified this must be greater than or equal to zero.
+        /// </summary>
+        public string EndOffset {
+            get {
+                return this.endOffsetField;
+            }
+            set {
+                if ((this.endOffsetField != null)) {
+                    if ((endOffsetField.Equals(value) != true)) {
+                        this.endOffsetField = value;
+                        this.OnPropertyChanged("EndOffset");
+                    }
+                }
+                else {
+                    this.endOffsetField = value;
+                    this.OnPropertyChanged("EndOffset");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies the separation between repeating symbols.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string Repeat {
+            get {
+                return this.repeatField;
+            }
+            set {
+                if ((this.repeatField != null)) {
+                    if ((repeatField.Equals(value) != true)) {
+                        this.repeatField = value;
+                        this.OnPropertyChanged("Repeat");
+                    }
+                }
+                else {
+                    this.repeatField = value;
+                    this.OnPropertyChanged("Repeat");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies the limiting angle, in degrees, by a which the feature geometry can change before some of the VertexControl options take effect.  If specified this must be greater than or equal to zero.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string VertexAngleLimit {
+            get {
+                return this.vertexAngleLimitField;
+            }
+            set {
+                if ((this.vertexAngleLimitField != null)) {
+                    if ((vertexAngleLimitField.Equals(value) != true)) {
+                        this.vertexAngleLimitField = value;
+                        this.OnPropertyChanged("VertexAngleLimit");
+                    }
+                }
+                else {
+                    this.vertexAngleLimitField = value;
+                    this.OnPropertyChanged("VertexAngleLimit");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies the wrapping behavior at vertices for all graphic elements.  Only applies if VertexControl evaluates to OverlapWrap.  This must evaluate to one of: None, Bevel, Round (default), or Miter.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("\'Round\'")]
+        public string VertexJoin {
+            get {
+                return this.vertexJoinField;
+            }
+            set {
+                if ((this.vertexJoinField != null)) {
+                    if ((vertexJoinField.Equals(value) != true)) {
+                        this.vertexJoinField = value;
+                        this.OnPropertyChanged("VertexJoin");
+                    }
+                }
+                else {
+                    this.vertexJoinField = value;
+                    this.OnPropertyChanged("VertexJoin");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The limit to use when drawing miter vertex joins.  A miter vertex join is trimmed if the ratio of the miter length to symbol height is greater than the miter limit.  If specified this must be greater than zero.  Defaults to 5.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("5.0")]
+        public string VertexMiterLimit {
+            get {
+                return this.vertexMiterLimitField;
+            }
+            set {
+                if ((this.vertexMiterLimitField != null)) {
+                    if ((vertexMiterLimitField.Equals(value) != true)) {
+                        this.vertexMiterLimitField = value;
+                        this.OnPropertyChanged("VertexMiterLimit");
+                    }
+                }
+                else {
+                    this.vertexMiterLimitField = value;
+                    this.OnPropertyChanged("VertexMiterLimit");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies the default path attributes to use when drawing the symbol.  These apply to any centerline that gets drawn where the symbol can't draw, and to path elements that don't specify attributes.  The geometry contained in this path is ignored and should be empty.
+        /// </summary>
+        public Path DefaultPath {
+            get {
+                return this.defaultPathField;
+            }
+            set {
+                if ((this.defaultPathField != null)) {
+                    if ((defaultPathField.Equals(value) != true)) {
+                        this.defaultPathField = value;
+                        this.OnPropertyChanged("DefaultPath");
+                    }
+                }
+                else {
+                    this.defaultPathField = value;
+                    this.OnPropertyChanged("DefaultPath");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(LineUsage));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current LineUsage 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 LineUsage object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output LineUsage 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 LineUsage obj, out System.Exception exception) {
+            exception = null;
+            obj = default(LineUsage);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out LineUsage obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static LineUsage Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((LineUsage)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current LineUsage 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 LineUsage object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output LineUsage 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 LineUsage obj, out System.Exception exception) {
+            exception = null;
+            obj = default(LineUsage);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out LineUsage obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static LineUsage 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 LineUsage object
+        /// </summary>
+        public virtual LineUsage Clone() {
+            return ((LineUsage)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class Path : GraphicBase, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string geometryField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string scaleXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string scaleYField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string fillColorField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string lineColorField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string lineWeightField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string lineWeightScalableField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string lineCapField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string lineJoinField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string lineMiterLimitField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public Path() {
+            this.scaleXField = "1.0";
+            this.scaleYField = "1.0";
+            this.lineWeightField = "0.0";
+            this.lineWeightScalableField = "true";
+            this.lineCapField = "\'Round\'";
+            this.lineJoinField = "\'Round\'";
+            this.lineMiterLimitField = "5.0";
+        }
+        
+        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");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("1.0")]
+        public string ScaleX {
+            get {
+                return this.scaleXField;
+            }
+            set {
+                if ((this.scaleXField != null)) {
+                    if ((scaleXField.Equals(value) != true)) {
+                        this.scaleXField = value;
+                        this.OnPropertyChanged("ScaleX");
+                    }
+                }
+                else {
+                    this.scaleXField = value;
+                    this.OnPropertyChanged("ScaleX");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("1.0")]
+        public string ScaleY {
+            get {
+                return this.scaleYField;
+            }
+            set {
+                if ((this.scaleYField != null)) {
+                    if ((scaleYField.Equals(value) != true)) {
+                        this.scaleYField = value;
+                        this.OnPropertyChanged("ScaleY");
+                    }
+                }
+                else {
+                    this.scaleYField = value;
+                    this.OnPropertyChanged("ScaleY");
+                }
+            }
+        }
+        
+        public string FillColor {
+            get {
+                return this.fillColorField;
+            }
+            set {
+                if ((this.fillColorField != null)) {
+                    if ((fillColorField.Equals(value) != true)) {
+                        this.fillColorField = value;
+                        this.OnPropertyChanged("FillColor");
+                    }
+                }
+                else {
+                    this.fillColorField = value;
+                    this.OnPropertyChanged("FillColor");
+                }
+            }
+        }
+        
+        public string LineColor {
+            get {
+                return this.lineColorField;
+            }
+            set {
+                if ((this.lineColorField != null)) {
+                    if ((lineColorField.Equals(value) != true)) {
+                        this.lineColorField = value;
+                        this.OnPropertyChanged("LineColor");
+                    }
+                }
+                else {
+                    this.lineColorField = value;
+                    this.OnPropertyChanged("LineColor");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string LineWeight {
+            get {
+                return this.lineWeightField;
+            }
+            set {
+                if ((this.lineWeightField != null)) {
+                    if ((lineWeightField.Equals(value) != true)) {
+                        this.lineWeightField = value;
+                        this.OnPropertyChanged("LineWeight");
+                    }
+                }
+                else {
+                    this.lineWeightField = value;
+                    this.OnPropertyChanged("LineWeight");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("true")]
+        public string LineWeightScalable {
+            get {
+                return this.lineWeightScalableField;
+            }
+            set {
+                if ((this.lineWeightScalableField != null)) {
+                    if ((lineWeightScalableField.Equals(value) != true)) {
+                        this.lineWeightScalableField = value;
+                        this.OnPropertyChanged("LineWeightScalable");
+                    }
+                }
+                else {
+                    this.lineWeightScalableField = value;
+                    this.OnPropertyChanged("LineWeightScalable");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("\'Round\'")]
+        public string LineCap {
+            get {
+                return this.lineCapField;
+            }
+            set {
+                if ((this.lineCapField != null)) {
+                    if ((lineCapField.Equals(value) != true)) {
+                        this.lineCapField = value;
+                        this.OnPropertyChanged("LineCap");
+                    }
+                }
+                else {
+                    this.lineCapField = value;
+                    this.OnPropertyChanged("LineCap");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("\'Round\'")]
+        public string LineJoin {
+            get {
+                return this.lineJoinField;
+            }
+            set {
+                if ((this.lineJoinField != null)) {
+                    if ((lineJoinField.Equals(value) != true)) {
+                        this.lineJoinField = value;
+                        this.OnPropertyChanged("LineJoin");
+                    }
+                }
+                else {
+                    this.lineJoinField = value;
+                    this.OnPropertyChanged("LineJoin");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("5.0")]
+        public string LineMiterLimit {
+            get {
+                return this.lineMiterLimitField;
+            }
+            set {
+                if ((this.lineMiterLimitField != null)) {
+                    if ((lineMiterLimitField.Equals(value) != true)) {
+                        this.lineMiterLimitField = value;
+                        this.OnPropertyChanged("LineMiterLimit");
+                    }
+                }
+                else {
+                    this.lineMiterLimitField = value;
+                    this.OnPropertyChanged("LineMiterLimit");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(Path));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current Path 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 Path object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output Path 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 Path obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Path);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out Path obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static Path Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((Path)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current Path 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 Path object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output Path 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 Path obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Path);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out Path obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static Path 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 Path object
+        /// </summary>
+        public virtual Path Clone() {
+            return ((Path)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Text))]
+    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Image))]
+    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Path))]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class GraphicBase : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string resizeControlField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public GraphicBase() {
+            this.resizeControlField = "\'ResizeNone\'";
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("\'ResizeNone\'")]
+        public string ResizeControl {
+            get {
+                return this.resizeControlField;
+            }
+            set {
+                if ((this.resizeControlField != null)) {
+                    if ((resizeControlField.Equals(value) != true)) {
+                        this.resizeControlField = value;
+                        this.OnPropertyChanged("ResizeControl");
+                    }
+                }
+                else {
+                    this.resizeControlField = value;
+                    this.OnPropertyChanged("ResizeControl");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(GraphicBase));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current GraphicBase 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 GraphicBase object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output GraphicBase 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 GraphicBase obj, out System.Exception exception) {
+            exception = null;
+            obj = default(GraphicBase);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out GraphicBase obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static GraphicBase Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((GraphicBase)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current GraphicBase 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 GraphicBase object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output GraphicBase 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 GraphicBase obj, out System.Exception exception) {
+            exception = null;
+            obj = default(GraphicBase);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out GraphicBase obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static GraphicBase 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 GraphicBase object
+        /// </summary>
+        public virtual GraphicBase Clone() {
+            return ((GraphicBase)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class Text : GraphicBase, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string contentField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string fontNameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string boldField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string italicField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string underlinedField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string overlinedField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string obliqueAngleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string trackSpacingField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string heightField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string heightScalableField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string angleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string positionXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string positionYField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string horizontalAlignmentField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string verticalAlignmentField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string justificationField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string lineSpacingField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string textColorField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string ghostColorField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private TextFrame frameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string markupField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public Text() {
+            this.fontNameField = "\'Arial\'";
+            this.boldField = "false";
+            this.italicField = "false";
+            this.underlinedField = "false";
+            this.overlinedField = "false";
+            this.obliqueAngleField = "0.0";
+            this.trackSpacingField = "1.0";
+            this.heightField = "4.0";
+            this.heightScalableField = "true";
+            this.angleField = "0.0";
+            this.positionXField = "0.0";
+            this.positionYField = "0.0";
+            this.horizontalAlignmentField = "\'Center\'";
+            this.verticalAlignmentField = "\'Halfline\'";
+            this.justificationField = "\'FromAlignment\'";
+            this.lineSpacingField = "1.05";
+            this.textColorField = "ff000000";
+            this.markupField = "\'Plain\'";
+        }
+        
+        public string Content {
+            get {
+                return this.contentField;
+            }
+            set {
+                if ((this.contentField != null)) {
+                    if ((contentField.Equals(value) != true)) {
+                        this.contentField = value;
+                        this.OnPropertyChanged("Content");
+                    }
+                }
+                else {
+                    this.contentField = value;
+                    this.OnPropertyChanged("Content");
+                }
+            }
+        }
+        
+        public string FontName {
+            get {
+                return this.fontNameField;
+            }
+            set {
+                if ((this.fontNameField != null)) {
+                    if ((fontNameField.Equals(value) != true)) {
+                        this.fontNameField = value;
+                        this.OnPropertyChanged("FontName");
+                    }
+                }
+                else {
+                    this.fontNameField = value;
+                    this.OnPropertyChanged("FontName");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("false")]
+        public string Bold {
+            get {
+                return this.boldField;
+            }
+            set {
+                if ((this.boldField != null)) {
+                    if ((boldField.Equals(value) != true)) {
+                        this.boldField = value;
+                        this.OnPropertyChanged("Bold");
+                    }
+                }
+                else {
+                    this.boldField = value;
+                    this.OnPropertyChanged("Bold");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("false")]
+        public string Italic {
+            get {
+                return this.italicField;
+            }
+            set {
+                if ((this.italicField != null)) {
+                    if ((italicField.Equals(value) != true)) {
+                        this.italicField = value;
+                        this.OnPropertyChanged("Italic");
+                    }
+                }
+                else {
+                    this.italicField = value;
+                    this.OnPropertyChanged("Italic");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("false")]
+        public string Underlined {
+            get {
+                return this.underlinedField;
+            }
+            set {
+                if ((this.underlinedField != null)) {
+                    if ((underlinedField.Equals(value) != true)) {
+                        this.underlinedField = value;
+                        this.OnPropertyChanged("Underlined");
+                    }
+                }
+                else {
+                    this.underlinedField = value;
+                    this.OnPropertyChanged("Underlined");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("false")]
+        public string Overlined {
+            get {
+                return this.overlinedField;
+            }
+            set {
+                if ((this.overlinedField != null)) {
+                    if ((overlinedField.Equals(value) != true)) {
+                        this.overlinedField = value;
+                        this.OnPropertyChanged("Overlined");
+                    }
+                }
+                else {
+                    this.overlinedField = value;
+                    this.OnPropertyChanged("Overlined");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string ObliqueAngle {
+            get {
+                return this.obliqueAngleField;
+            }
+            set {
+                if ((this.obliqueAngleField != null)) {
+                    if ((obliqueAngleField.Equals(value) != true)) {
+                        this.obliqueAngleField = value;
+                        this.OnPropertyChanged("ObliqueAngle");
+                    }
+                }
+                else {
+                    this.obliqueAngleField = value;
+                    this.OnPropertyChanged("ObliqueAngle");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("1.0")]
+        public string TrackSpacing {
+            get {
+                return this.trackSpacingField;
+            }
+            set {
+                if ((this.trackSpacingField != null)) {
+                    if ((trackSpacingField.Equals(value) != true)) {
+                        this.trackSpacingField = value;
+                        this.OnPropertyChanged("TrackSpacing");
+                    }
+                }
+                else {
+                    this.trackSpacingField = value;
+                    this.OnPropertyChanged("TrackSpacing");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("4.0")]
+        public string Height {
+            get {
+                return this.heightField;
+            }
+            set {
+                if ((this.heightField != null)) {
+                    if ((heightField.Equals(value) != true)) {
+                        this.heightField = value;
+                        this.OnPropertyChanged("Height");
+                    }
+                }
+                else {
+                    this.heightField = value;
+                    this.OnPropertyChanged("Height");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("true")]
+        public string HeightScalable {
+            get {
+                return this.heightScalableField;
+            }
+            set {
+                if ((this.heightScalableField != null)) {
+                    if ((heightScalableField.Equals(value) != true)) {
+                        this.heightScalableField = value;
+                        this.OnPropertyChanged("HeightScalable");
+                    }
+                }
+                else {
+                    this.heightScalableField = value;
+                    this.OnPropertyChanged("HeightScalable");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string Angle {
+            get {
+                return this.angleField;
+            }
+            set {
+                if ((this.angleField != null)) {
+                    if ((angleField.Equals(value) != true)) {
+                        this.angleField = value;
+                        this.OnPropertyChanged("Angle");
+                    }
+                }
+                else {
+                    this.angleField = value;
+                    this.OnPropertyChanged("Angle");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string PositionX {
+            get {
+                return this.positionXField;
+            }
+            set {
+                if ((this.positionXField != null)) {
+                    if ((positionXField.Equals(value) != true)) {
+                        this.positionXField = value;
+                        this.OnPropertyChanged("PositionX");
+                    }
+                }
+                else {
+                    this.positionXField = value;
+                    this.OnPropertyChanged("PositionX");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string PositionY {
+            get {
+                return this.positionYField;
+            }
+            set {
+                if ((this.positionYField != null)) {
+                    if ((positionYField.Equals(value) != true)) {
+                        this.positionYField = value;
+                        this.OnPropertyChanged("PositionY");
+                    }
+                }
+                else {
+                    this.positionYField = value;
+                    this.OnPropertyChanged("PositionY");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("\'Center\'")]
+        public string HorizontalAlignment {
+            get {
+                return this.horizontalAlignmentField;
+            }
+            set {
+                if ((this.horizontalAlignmentField != null)) {
+                    if ((horizontalAlignmentField.Equals(value) != true)) {
+                        this.horizontalAlignmentField = value;
+                        this.OnPropertyChanged("HorizontalAlignment");
+                    }
+                }
+                else {
+                    this.horizontalAlignmentField = value;
+                    this.OnPropertyChanged("HorizontalAlignment");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("\'Halfline\'")]
+        public string VerticalAlignment {
+            get {
+                return this.verticalAlignmentField;
+            }
+            set {
+                if ((this.verticalAlignmentField != null)) {
+                    if ((verticalAlignmentField.Equals(value) != true)) {
+                        this.verticalAlignmentField = value;
+                        this.OnPropertyChanged("VerticalAlignment");
+                    }
+                }
+                else {
+                    this.verticalAlignmentField = value;
+                    this.OnPropertyChanged("VerticalAlignment");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("\'FromAlignment\'")]
+        public string Justification {
+            get {
+                return this.justificationField;
+            }
+            set {
+                if ((this.justificationField != null)) {
+                    if ((justificationField.Equals(value) != true)) {
+                        this.justificationField = value;
+                        this.OnPropertyChanged("Justification");
+                    }
+                }
+                else {
+                    this.justificationField = value;
+                    this.OnPropertyChanged("Justification");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("1.05")]
+        public string LineSpacing {
+            get {
+                return this.lineSpacingField;
+            }
+            set {
+                if ((this.lineSpacingField != null)) {
+                    if ((lineSpacingField.Equals(value) != true)) {
+                        this.lineSpacingField = value;
+                        this.OnPropertyChanged("LineSpacing");
+                    }
+                }
+                else {
+                    this.lineSpacingField = value;
+                    this.OnPropertyChanged("LineSpacing");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("ff000000")]
+        public string TextColor {
+            get {
+                return this.textColorField;
+            }
+            set {
+                if ((this.textColorField != null)) {
+                    if ((textColorField.Equals(value) != true)) {
+                        this.textColorField = value;
+                        this.OnPropertyChanged("TextColor");
+                    }
+                }
+                else {
+                    this.textColorField = value;
+                    this.OnPropertyChanged("TextColor");
+                }
+            }
+        }
+        
+        public string GhostColor {
+            get {
+                return this.ghostColorField;
+            }
+            set {
+                if ((this.ghostColorField != null)) {
+                    if ((ghostColorField.Equals(value) != true)) {
+                        this.ghostColorField = value;
+                        this.OnPropertyChanged("GhostColor");
+                    }
+                }
+                else {
+                    this.ghostColorField = value;
+                    this.OnPropertyChanged("GhostColor");
+                }
+            }
+        }
+        
+        public TextFrame Frame {
+            get {
+                return this.frameField;
+            }
+            set {
+                if ((this.frameField != null)) {
+                    if ((frameField.Equals(value) != true)) {
+                        this.frameField = value;
+                        this.OnPropertyChanged("Frame");
+                    }
+                }
+                else {
+                    this.frameField = value;
+                    this.OnPropertyChanged("Frame");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("\'Plain\'")]
+        public string Markup {
+            get {
+                return this.markupField;
+            }
+            set {
+                if ((this.markupField != null)) {
+                    if ((markupField.Equals(value) != true)) {
+                        this.markupField = value;
+                        this.OnPropertyChanged("Markup");
+                    }
+                }
+                else {
+                    this.markupField = value;
+                    this.OnPropertyChanged("Markup");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(Text));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current Text 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 Text object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output Text 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 Text obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Text);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out Text obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static Text Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((Text)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current Text 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 Text object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output Text 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 Text obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Text);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out Text obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static Text 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 Text object
+        /// </summary>
+        public virtual Text Clone() {
+            return ((Text)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class TextFrame : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string lineColorField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string fillColorField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string offsetXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string offsetYField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public TextFrame() {
+            this.offsetXField = "0.0";
+            this.offsetYField = "0.0";
+        }
+        
+        public string LineColor {
+            get {
+                return this.lineColorField;
+            }
+            set {
+                if ((this.lineColorField != null)) {
+                    if ((lineColorField.Equals(value) != true)) {
+                        this.lineColorField = value;
+                        this.OnPropertyChanged("LineColor");
+                    }
+                }
+                else {
+                    this.lineColorField = value;
+                    this.OnPropertyChanged("LineColor");
+                }
+            }
+        }
+        
+        public string FillColor {
+            get {
+                return this.fillColorField;
+            }
+            set {
+                if ((this.fillColorField != null)) {
+                    if ((fillColorField.Equals(value) != true)) {
+                        this.fillColorField = value;
+                        this.OnPropertyChanged("FillColor");
+                    }
+                }
+                else {
+                    this.fillColorField = value;
+                    this.OnPropertyChanged("FillColor");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string OffsetX {
+            get {
+                return this.offsetXField;
+            }
+            set {
+                if ((this.offsetXField != null)) {
+                    if ((offsetXField.Equals(value) != true)) {
+                        this.offsetXField = value;
+                        this.OnPropertyChanged("OffsetX");
+                    }
+                }
+                else {
+                    this.offsetXField = value;
+                    this.OnPropertyChanged("OffsetX");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string OffsetY {
+            get {
+                return this.offsetYField;
+            }
+            set {
+                if ((this.offsetYField != null)) {
+                    if ((offsetYField.Equals(value) != true)) {
+                        this.offsetYField = value;
+                        this.OnPropertyChanged("OffsetY");
+                    }
+                }
+                else {
+                    this.offsetYField = value;
+                    this.OnPropertyChanged("OffsetY");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(TextFrame));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current TextFrame 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 TextFrame object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output TextFrame 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 TextFrame obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TextFrame);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out TextFrame obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static TextFrame Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((TextFrame)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current TextFrame 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 TextFrame object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output TextFrame 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 TextFrame obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TextFrame);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out TextFrame obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static TextFrame 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 TextFrame object
+        /// </summary>
+        public virtual TextFrame Clone() {
+            return ((TextFrame)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    /// <summary>
+    /// Specifies how the symbol is used in the context of point features.
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class PointUsage : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string angleControlField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string angleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string originOffsetXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string originOffsetYField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public PointUsage() {
+            this.angleControlField = "\'FromAngle\'";
+            this.angleField = "0.0";
+            this.originOffsetXField = "0.0";
+            this.originOffsetYField = "0.0";
+        }
+        
+        /// <summary>
+        /// Specifies how the symbol angle is defined.  This must evaluate to one of: FromAngle (default) or FromGeometry.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("\'FromAngle\'")]
+        public string AngleControl {
+            get {
+                return this.angleControlField;
+            }
+            set {
+                if ((this.angleControlField != null)) {
+                    if ((angleControlField.Equals(value) != true)) {
+                        this.angleControlField = value;
+                        this.OnPropertyChanged("AngleControl");
+                    }
+                }
+                else {
+                    this.angleControlField = value;
+                    this.OnPropertyChanged("AngleControl");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies the symbol angle, in degrees.  If AngleControl evaluates to FromAngle then this specifies the absolute angle of the symbol.  If AngleControl evaluates to FromGeometry then this specifies the symbol angle relative to the geometry.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string Angle {
+            get {
+                return this.angleField;
+            }
+            set {
+                if ((this.angleField != null)) {
+                    if ((angleField.Equals(value) != true)) {
+                        this.angleField = value;
+                        this.OnPropertyChanged("Angle");
+                    }
+                }
+                else {
+                    this.angleField = value;
+                    this.OnPropertyChanged("Angle");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies the horizontal offset to apply to the symbol origin, in mm.  This offset is applied before the symbol is scaled and rotated.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string OriginOffsetX {
+            get {
+                return this.originOffsetXField;
+            }
+            set {
+                if ((this.originOffsetXField != null)) {
+                    if ((originOffsetXField.Equals(value) != true)) {
+                        this.originOffsetXField = value;
+                        this.OnPropertyChanged("OriginOffsetX");
+                    }
+                }
+                else {
+                    this.originOffsetXField = value;
+                    this.OnPropertyChanged("OriginOffsetX");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies the vertical offset to apply to the symbol origin, in mm.  This offset is applied before the symbol is scaled and rotated.  Defaults to 0.
+        /// </summary>
+        [System.ComponentModel.DefaultValueAttribute("0.0")]
+        public string OriginOffsetY {
+            get {
+                return this.originOffsetYField;
+            }
+            set {
+                if ((this.originOffsetYField != null)) {
+                    if ((originOffsetYField.Equals(value) != true)) {
+                        this.originOffsetYField = value;
+                        this.OnPropertyChanged("OriginOffsetY");
+                    }
+                }
+                else {
+                    this.originOffsetYField = value;
+                    this.OnPropertyChanged("OriginOffsetY");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(PointUsage));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current PointUsage 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 PointUsage object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output PointUsage 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 PointUsage obj, out System.Exception exception) {
+            exception = null;
+            obj = default(PointUsage);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out PointUsage obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static PointUsage Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((PointUsage)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current PointUsage 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 PointUsage object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output PointUsage 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 PointUsage obj, out System.Exception exception) {
+            exception = null;
+            obj = default(PointUsage);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out PointUsage obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static PointUsage 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 PointUsage object
+        /// </summary>
+        public virtual PointUsage Clone() {
+            return ((PointUsage)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    /// <summary>
+    /// The optional box used to resize and reposition select graphic elements.  The graphical extent of all elements with ResizeControl set to AddToResizeBox will be added to this box, potentially causing it to grow in size.  Any change in size causes all elements with ResizeControl set to AdjustToResizeBox to be proportionally resized and repositioned.
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class ResizeBox : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string sizeXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string sizeYField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string positionXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string positionYField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string growControlField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public ResizeBox() {
+            this.sizeXField = "1.0";
+            this.sizeYField = "1.0";
+            this.positionXField = "0.0";
+            this.positionYField = "0.0";
+            this.growControlField = "\'GrowInXYMaintainAspect\'";
+        }
+        
+        /// <summary>
+        /// The initial width of the resize box, in mm.  This must be greater than or equal to zero.
+        /// </summary>
+        public string SizeX {
+            get {
+                return this.sizeXField;
+            }
+            set {
+                if ((this.sizeXField != null)) {
+                    if ((sizeXField.Equals(value) != true)) {
+                        this.sizeXField = value;
+                        this.OnPropertyChanged("SizeX");
+                    }
+                }
+                else {
+                    this.sizeXField = value;
+                    this.OnPropertyChanged("SizeX");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The initial height of the resize box, in mm.  This must be greater than or equal to zero.
+        /// </summary>
+        public string SizeY {
+            get {
+                return this.sizeYField;
+            }
+            set {
+                if ((this.sizeYField != null)) {
+                    if ((sizeYField.Equals(value) != true)) {
+                        this.sizeYField = value;
+                        this.OnPropertyChanged("SizeY");
+                    }
+                }
+                else {
+                    this.sizeYField = value;
+                    this.OnPropertyChanged("SizeY");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The initial x-coordinate of the resize box center, in mm.
+        /// </summary>
+        public string PositionX {
+            get {
+                return this.positionXField;
+            }
+            set {
+                if ((this.positionXField != null)) {
+                    if ((positionXField.Equals(value) != true)) {
+                        this.positionXField = value;
+                        this.OnPropertyChanged("PositionX");
+                    }
+                }
+                else {
+                    this.positionXField = value;
+                    this.OnPropertyChanged("PositionX");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// The initial y-coordinate of the resize box center, in mm.
+        /// </summary>
+        public string PositionY {
+            get {
+                return this.positionYField;
+            }
+            set {
+                if ((this.positionYField != null)) {
+                    if ((positionYField.Equals(value) != true)) {
+                        this.positionYField = value;
+                        this.OnPropertyChanged("PositionY");
+                    }
+                }
+                else {
+                    this.positionYField = value;
+                    this.OnPropertyChanged("PositionY");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Specifies how the resize box grows in size.  This must evaluate to one of: GrowInX, GrowInY, GrowInXY, or GrowInXYMaintainAspect (default).
+        /// </summary>
+        public string GrowControl {
+            get {
+                return this.growControlField;
+            }
+            set {
+                if ((this.growControlField != null)) {
+                    if ((growControlField.Equals(value) != true)) {
+                        this.growControlField = value;
+                        this.OnPropertyChanged("GrowControl");
+                    }
+                }
+                else {
+                    this.growControlField = value;
+                    this.OnPropertyChanged("GrowControl");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(ResizeBox));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current ResizeBox 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 ResizeBox object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output ResizeBox 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 ResizeBox obj, out System.Exception exception) {
+            exception = null;
+            obj = default(ResizeBox);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out ResizeBox obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static ResizeBox Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((ResizeBox)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current ResizeBox 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 ResizeBox object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output ResizeBox 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 ResizeBox obj, out System.Exception exception) {
+            exception = null;
+            obj = default(ResizeBox);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out ResizeBox obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static ResizeBox 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 ResizeBox object
+        /// </summary>
+        public virtual ResizeBox Clone() {
+            return ((ResizeBox)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CompoundSymbolDefinition))]
+    [System.Xml.Serialization.XmlIncludeAttribute(typeof(SimpleSymbolDefinition))]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class SymbolDefinitionBase : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string descriptionField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        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");
+                }
+            }
+        }
+        
+        public string Description {
+            get {
+                return this.descriptionField;
+            }
+            set {
+                if ((this.descriptionField != null)) {
+                    if ((descriptionField.Equals(value) != true)) {
+                        this.descriptionField = value;
+                        this.OnPropertyChanged("Description");
+                    }
+                }
+                else {
+                    this.descriptionField = value;
+                    this.OnPropertyChanged("Description");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(SymbolDefinitionBase));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current SymbolDefinitionBase 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 SymbolDefinitionBase object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output SymbolDefinitionBase 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 SymbolDefinitionBase obj, out System.Exception exception) {
+            exception = null;
+            obj = default(SymbolDefinitionBase);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out SymbolDefinitionBase obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static SymbolDefinitionBase Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((SymbolDefinitionBase)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current SymbolDefinitionBase 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 SymbolDefinitionBase object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output SymbolDefinitionBase 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 SymbolDefinitionBase obj, out System.Exception exception) {
+            exception = null;
+            obj = default(SymbolDefinitionBase);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out SymbolDefinitionBase obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static SymbolDefinitionBase 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 SymbolDefinitionBase object
+        /// </summary>
+        public virtual SymbolDefinitionBase Clone() {
+            return ((SymbolDefinitionBase)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    /// <summary>
+    /// A 2D compound symbol for stylization.
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class CompoundSymbolDefinition : SymbolDefinitionBase, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<SimpleSymbol> simpleSymbolField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        [System.Xml.Serialization.XmlElementAttribute("SimpleSymbol")]
+        public BindingList<SimpleSymbol> SimpleSymbol {
+            get {
+                return this.simpleSymbolField;
+            }
+            set {
+                if ((this.simpleSymbolField != null)) {
+                    if ((simpleSymbolField.Equals(value) != true)) {
+                        this.simpleSymbolField = value;
+                        this.OnPropertyChanged("SimpleSymbol");
+                    }
+                }
+                else {
+                    this.simpleSymbolField = value;
+                    this.OnPropertyChanged("SimpleSymbol");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(CompoundSymbolDefinition));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current CompoundSymbolDefinition 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 CompoundSymbolDefinition object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output CompoundSymbolDefinition 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 CompoundSymbolDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(CompoundSymbolDefinition);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out CompoundSymbolDefinition obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static CompoundSymbolDefinition Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((CompoundSymbolDefinition)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current CompoundSymbolDefinition 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 CompoundSymbolDefinition object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output CompoundSymbolDefinition 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 CompoundSymbolDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(CompoundSymbolDefinition);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out CompoundSymbolDefinition obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static CompoundSymbolDefinition 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 CompoundSymbolDefinition object
+        /// </summary>
+        public virtual CompoundSymbolDefinition Clone() {
+            return ((CompoundSymbolDefinition)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    [System.Xml.Serialization.XmlRootAttribute("CompoundSymbolDefinition", Namespace="", IsNullable=false)]
+    public partial class CompoundSymbolDefinition1 : CompoundSymbolDefinition, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string versionField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public CompoundSymbolDefinition1() {
+            this.versionField = "2.4.0";
+        }
+        
+        [System.Xml.Serialization.XmlAttributeAttribute()]
+        public string version {
+            get {
+                return this.versionField;
+            }
+            set {
+                if ((this.versionField != null)) {
+                    if ((versionField.Equals(value) != true)) {
+                        this.versionField = value;
+                        this.OnPropertyChanged("version");
+                    }
+                }
+                else {
+                    this.versionField = value;
+                    this.OnPropertyChanged("version");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(CompoundSymbolDefinition1));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current CompoundSymbolDefinition1 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 CompoundSymbolDefinition1 object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output CompoundSymbolDefinition1 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 CompoundSymbolDefinition1 obj, out System.Exception exception) {
+            exception = null;
+            obj = default(CompoundSymbolDefinition1);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out CompoundSymbolDefinition1 obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static CompoundSymbolDefinition1 Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((CompoundSymbolDefinition1)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current CompoundSymbolDefinition1 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 CompoundSymbolDefinition1 object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output CompoundSymbolDefinition1 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 CompoundSymbolDefinition1 obj, out System.Exception exception) {
+            exception = null;
+            obj = default(CompoundSymbolDefinition1);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out CompoundSymbolDefinition1 obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static CompoundSymbolDefinition1 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 CompoundSymbolDefinition1 object
+        /// </summary>
+        public virtual CompoundSymbolDefinition1 Clone() {
+            return ((CompoundSymbolDefinition1)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    /// <summary>
+    /// The specification of a watermark.
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
+    public partial class WatermarkDefinition : WatermarkDefinitionType, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string versionField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public WatermarkDefinition() {
+            this.versionField = "2.4.0";
+        }
+        
+        [System.Xml.Serialization.XmlAttributeAttribute()]
+        public string version {
+            get {
+                return this.versionField;
+            }
+            set {
+                if ((this.versionField != null)) {
+                    if ((versionField.Equals(value) != true)) {
+                        this.versionField = value;
+                        this.OnPropertyChanged("version");
+                    }
+                }
+                else {
+                    this.versionField = value;
+                    this.OnPropertyChanged("version");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(WatermarkDefinition));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current WatermarkDefinition 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 WatermarkDefinition object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output WatermarkDefinition 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 WatermarkDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkDefinition);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out WatermarkDefinition obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static WatermarkDefinition Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((WatermarkDefinition)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current WatermarkDefinition 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 WatermarkDefinition object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output WatermarkDefinition 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 WatermarkDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkDefinition);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out WatermarkDefinition obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static WatermarkDefinition 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 WatermarkDefinition object
+        /// </summary>
+        public virtual WatermarkDefinition Clone() {
+            return ((WatermarkDefinition)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class WatermarkDefinitionType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private WatermarkDefinitionTypeContent contentField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private WatermarkAppearanceType appearanceField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private WatermarkDefinitionTypePosition positionField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public WatermarkDefinitionTypeContent Content {
+            get {
+                return this.contentField;
+            }
+            set {
+                if ((this.contentField != null)) {
+                    if ((contentField.Equals(value) != true)) {
+                        this.contentField = value;
+                        this.OnPropertyChanged("Content");
+                    }
+                }
+                else {
+                    this.contentField = value;
+                    this.OnPropertyChanged("Content");
+                }
+            }
+        }
+        
+        public WatermarkAppearanceType Appearance {
+            get {
+                return this.appearanceField;
+            }
+            set {
+                if ((this.appearanceField != null)) {
+                    if ((appearanceField.Equals(value) != true)) {
+                        this.appearanceField = value;
+                        this.OnPropertyChanged("Appearance");
+                    }
+                }
+                else {
+                    this.appearanceField = value;
+                    this.OnPropertyChanged("Appearance");
+                }
+            }
+        }
+        
+        public WatermarkDefinitionTypePosition Position {
+            get {
+                return this.positionField;
+            }
+            set {
+                if ((this.positionField != null)) {
+                    if ((positionField.Equals(value) != true)) {
+                        this.positionField = value;
+                        this.OnPropertyChanged("Position");
+                    }
+                }
+                else {
+                    this.positionField = value;
+                    this.OnPropertyChanged("Position");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(WatermarkDefinitionType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current WatermarkDefinitionType 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 WatermarkDefinitionType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output WatermarkDefinitionType 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 WatermarkDefinitionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkDefinitionType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out WatermarkDefinitionType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static WatermarkDefinitionType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((WatermarkDefinitionType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current WatermarkDefinitionType 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 WatermarkDefinitionType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output WatermarkDefinitionType 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 WatermarkDefinitionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkDefinitionType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out WatermarkDefinitionType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static WatermarkDefinitionType 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 WatermarkDefinitionType object
+        /// </summary>
+        public virtual WatermarkDefinitionType Clone() {
+            return ((WatermarkDefinitionType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    public partial class WatermarkDefinitionTypeContent : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private SymbolDefinitionBase itemField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        [System.Xml.Serialization.XmlElementAttribute("CompoundSymbolDefinition", typeof(CompoundSymbolDefinition))]
+        [System.Xml.Serialization.XmlElementAttribute("SimpleSymbolDefinition", typeof(SimpleSymbolDefinition))]
+        public SymbolDefinitionBase Item {
+            get {
+                return this.itemField;
+            }
+            set {
+                if ((this.itemField != null)) {
+                    if ((itemField.Equals(value) != true)) {
+                        this.itemField = value;
+                        this.OnPropertyChanged("Item");
+                    }
+                }
+                else {
+                    this.itemField = value;
+                    this.OnPropertyChanged("Item");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(WatermarkDefinitionTypeContent));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current WatermarkDefinitionTypeContent 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 WatermarkDefinitionTypeContent object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output WatermarkDefinitionTypeContent 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 WatermarkDefinitionTypeContent obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkDefinitionTypeContent);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out WatermarkDefinitionTypeContent obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static WatermarkDefinitionTypeContent Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((WatermarkDefinitionTypeContent)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current WatermarkDefinitionTypeContent 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 WatermarkDefinitionTypeContent object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output WatermarkDefinitionTypeContent 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 WatermarkDefinitionTypeContent obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkDefinitionTypeContent);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out WatermarkDefinitionTypeContent obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static WatermarkDefinitionTypeContent 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 WatermarkDefinitionTypeContent object
+        /// </summary>
+        public virtual WatermarkDefinitionTypeContent Clone() {
+            return ((WatermarkDefinitionTypeContent)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class WatermarkAppearanceType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double transparencyField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double rotationField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public WatermarkAppearanceType() {
+            this.transparencyField = 0;
+            this.rotationField = 0;
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute(0)]
+        public double Transparency {
+            get {
+                return this.transparencyField;
+            }
+            set {
+                if ((transparencyField.Equals(value) != true)) {
+                    this.transparencyField = value;
+                    this.OnPropertyChanged("Transparency");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute(0)]
+        public double Rotation {
+            get {
+                return this.rotationField;
+            }
+            set {
+                if ((rotationField.Equals(value) != true)) {
+                    this.rotationField = value;
+                    this.OnPropertyChanged("Rotation");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(WatermarkAppearanceType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current WatermarkAppearanceType 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 WatermarkAppearanceType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output WatermarkAppearanceType 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 WatermarkAppearanceType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkAppearanceType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out WatermarkAppearanceType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static WatermarkAppearanceType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((WatermarkAppearanceType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current WatermarkAppearanceType 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 WatermarkAppearanceType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output WatermarkAppearanceType 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 WatermarkAppearanceType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkAppearanceType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out WatermarkAppearanceType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static WatermarkAppearanceType 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 WatermarkAppearanceType object
+        /// </summary>
+        public virtual WatermarkAppearanceType Clone() {
+            return ((WatermarkAppearanceType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    public partial class WatermarkDefinitionTypePosition : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private PositionType itemField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        [System.Xml.Serialization.XmlElementAttribute("TilePosition", typeof(TilePositionType))]
+        [System.Xml.Serialization.XmlElementAttribute("XYPosition", typeof(XYPositionType))]
+        public PositionType Item {
+            get {
+                return this.itemField;
+            }
+            set {
+                if ((this.itemField != null)) {
+                    if ((itemField.Equals(value) != true)) {
+                        this.itemField = value;
+                        this.OnPropertyChanged("Item");
+                    }
+                }
+                else {
+                    this.itemField = value;
+                    this.OnPropertyChanged("Item");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(WatermarkDefinitionTypePosition));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current WatermarkDefinitionTypePosition 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 WatermarkDefinitionTypePosition object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output WatermarkDefinitionTypePosition 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 WatermarkDefinitionTypePosition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkDefinitionTypePosition);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out WatermarkDefinitionTypePosition obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static WatermarkDefinitionTypePosition Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((WatermarkDefinitionTypePosition)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current WatermarkDefinitionTypePosition 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 WatermarkDefinitionTypePosition object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output WatermarkDefinitionTypePosition 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 WatermarkDefinitionTypePosition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkDefinitionTypePosition);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out WatermarkDefinitionTypePosition obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static WatermarkDefinitionTypePosition 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 WatermarkDefinitionTypePosition object
+        /// </summary>
+        public virtual WatermarkDefinitionTypePosition Clone() {
+            return ((WatermarkDefinitionTypePosition)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class TilePositionType : PositionType, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double tileWidthField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double tileHeightField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private HorizontalPositionType horizontalPositionField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private VerticalPositionType verticalPositionField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public TilePositionType() {
+            this.tileWidthField = 150;
+            this.tileHeightField = 150;
+        }
+        
+        public double TileWidth {
+            get {
+                return this.tileWidthField;
+            }
+            set {
+                if ((tileWidthField.Equals(value) != true)) {
+                    this.tileWidthField = value;
+                    this.OnPropertyChanged("TileWidth");
+                }
+            }
+        }
+        
+        public double TileHeight {
+            get {
+                return this.tileHeightField;
+            }
+            set {
+                if ((tileHeightField.Equals(value) != true)) {
+                    this.tileHeightField = value;
+                    this.OnPropertyChanged("TileHeight");
+                }
+            }
+        }
+        
+        public HorizontalPositionType HorizontalPosition {
+            get {
+                return this.horizontalPositionField;
+            }
+            set {
+                if ((this.horizontalPositionField != null)) {
+                    if ((horizontalPositionField.Equals(value) != true)) {
+                        this.horizontalPositionField = value;
+                        this.OnPropertyChanged("HorizontalPosition");
+                    }
+                }
+                else {
+                    this.horizontalPositionField = value;
+                    this.OnPropertyChanged("HorizontalPosition");
+                }
+            }
+        }
+        
+        public VerticalPositionType VerticalPosition {
+            get {
+                return this.verticalPositionField;
+            }
+            set {
+                if ((this.verticalPositionField != null)) {
+                    if ((verticalPositionField.Equals(value) != true)) {
+                        this.verticalPositionField = value;
+                        this.OnPropertyChanged("VerticalPosition");
+                    }
+                }
+                else {
+                    this.verticalPositionField = value;
+                    this.OnPropertyChanged("VerticalPosition");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(TilePositionType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current TilePositionType 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 TilePositionType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output TilePositionType 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 TilePositionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TilePositionType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out TilePositionType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static TilePositionType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((TilePositionType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current TilePositionType 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 TilePositionType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output TilePositionType 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 TilePositionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TilePositionType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out TilePositionType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static TilePositionType 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 TilePositionType object
+        /// </summary>
+        public virtual TilePositionType Clone() {
+            return ((TilePositionType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class HorizontalPositionType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double offsetField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private UnitType unitField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private HorizontalAlignmentType alignmentField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public HorizontalPositionType() {
+            this.offsetField = 0;
+            this.unitField = UnitType.Points;
+            this.alignmentField = HorizontalAlignmentType.Center;
+        }
+        
+        public double Offset {
+            get {
+                return this.offsetField;
+            }
+            set {
+                if ((offsetField.Equals(value) != true)) {
+                    this.offsetField = value;
+                    this.OnPropertyChanged("Offset");
+                }
+            }
+        }
+        
+        public UnitType Unit {
+            get {
+                return this.unitField;
+            }
+            set {
+                if ((unitField.Equals(value) != true)) {
+                    this.unitField = value;
+                    this.OnPropertyChanged("Unit");
+                }
+            }
+        }
+        
+        public HorizontalAlignmentType Alignment {
+            get {
+                return this.alignmentField;
+            }
+            set {
+                if ((alignmentField.Equals(value) != true)) {
+                    this.alignmentField = value;
+                    this.OnPropertyChanged("Alignment");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(HorizontalPositionType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current HorizontalPositionType 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 HorizontalPositionType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output HorizontalPositionType 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 HorizontalPositionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(HorizontalPositionType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out HorizontalPositionType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static HorizontalPositionType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((HorizontalPositionType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current HorizontalPositionType 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 HorizontalPositionType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output HorizontalPositionType 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 HorizontalPositionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(HorizontalPositionType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out HorizontalPositionType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static HorizontalPositionType 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 HorizontalPositionType object
+        /// </summary>
+        public virtual HorizontalPositionType Clone() {
+            return ((HorizontalPositionType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    public enum UnitType {
+        
+        /// <remarks/>
+        Inches,
+        
+        /// <remarks/>
+        Centimeters,
+        
+        /// <remarks/>
+        Millimeters,
+        
+        /// <remarks/>
+        Pixels,
+        
+        /// <remarks/>
+        Points,
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    public enum HorizontalAlignmentType {
+        
+        /// <remarks/>
+        Left,
+        
+        /// <remarks/>
+        Center,
+        
+        /// <remarks/>
+        Right,
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class VerticalPositionType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double offsetField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private UnitType unitField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private VerticalAlignmentType alignmentField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public VerticalPositionType() {
+            this.offsetField = 0;
+            this.unitField = UnitType.Points;
+            this.alignmentField = VerticalAlignmentType.Center;
+        }
+        
+        public double Offset {
+            get {
+                return this.offsetField;
+            }
+            set {
+                if ((offsetField.Equals(value) != true)) {
+                    this.offsetField = value;
+                    this.OnPropertyChanged("Offset");
+                }
+            }
+        }
+        
+        public UnitType Unit {
+            get {
+                return this.unitField;
+            }
+            set {
+                if ((unitField.Equals(value) != true)) {
+                    this.unitField = value;
+                    this.OnPropertyChanged("Unit");
+                }
+            }
+        }
+        
+        public VerticalAlignmentType Alignment {
+            get {
+                return this.alignmentField;
+            }
+            set {
+                if ((alignmentField.Equals(value) != true)) {
+                    this.alignmentField = value;
+                    this.OnPropertyChanged("Alignment");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(VerticalPositionType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current VerticalPositionType 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 VerticalPositionType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output VerticalPositionType 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 VerticalPositionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(VerticalPositionType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out VerticalPositionType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static VerticalPositionType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((VerticalPositionType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current VerticalPositionType 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 VerticalPositionType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output VerticalPositionType 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 VerticalPositionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(VerticalPositionType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out VerticalPositionType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static VerticalPositionType 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 VerticalPositionType object
+        /// </summary>
+        public virtual VerticalPositionType Clone() {
+            return ((VerticalPositionType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    public enum VerticalAlignmentType {
+        
+        /// <remarks/>
+        Top,
+        
+        /// <remarks/>
+        Center,
+        
+        /// <remarks/>
+        Bottom,
+    }
+    
+    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TilePositionType))]
+    [System.Xml.Serialization.XmlIncludeAttribute(typeof(XYPositionType))]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public abstract partial class PositionType : System.ComponentModel.INotifyPropertyChanged {
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(PositionType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current PositionType 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 PositionType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output PositionType 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 PositionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(PositionType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out PositionType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static PositionType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((PositionType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current PositionType 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 PositionType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output PositionType 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 PositionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(PositionType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out PositionType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static PositionType 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 PositionType object
+        /// </summary>
+        public virtual PositionType Clone() {
+            return ((PositionType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class XYPositionType : PositionType, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private HorizontalPositionType xPositionField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private VerticalPositionType yPositionField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public HorizontalPositionType XPosition {
+            get {
+                return this.xPositionField;
+            }
+            set {
+                if ((this.xPositionField != null)) {
+                    if ((xPositionField.Equals(value) != true)) {
+                        this.xPositionField = value;
+                        this.OnPropertyChanged("XPosition");
+                    }
+                }
+                else {
+                    this.xPositionField = value;
+                    this.OnPropertyChanged("XPosition");
+                }
+            }
+        }
+        
+        public VerticalPositionType YPosition {
+            get {
+                return this.yPositionField;
+            }
+            set {
+                if ((this.yPositionField != null)) {
+                    if ((yPositionField.Equals(value) != true)) {
+                        this.yPositionField = value;
+                        this.OnPropertyChanged("YPosition");
+                    }
+                }
+                else {
+                    this.yPositionField = value;
+                    this.OnPropertyChanged("YPosition");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(XYPositionType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current XYPositionType 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 XYPositionType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output XYPositionType 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 XYPositionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(XYPositionType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out XYPositionType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static XYPositionType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((XYPositionType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current XYPositionType 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 XYPositionType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output XYPositionType 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 XYPositionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(XYPositionType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out XYPositionType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static XYPositionType 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 XYPositionType object
+        /// </summary>
+        public virtual XYPositionType Clone() {
+            return ((XYPositionType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    /// <summary>
+    /// A MapDefinition defines the collection of layers, groupings of layers, and base map
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
+    public partial class MapDefinition : MapDefinitionType, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string versionField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public MapDefinition() {
+            this.versionField = "3.0.0";
+        }
+        
+        [System.Xml.Serialization.XmlAttributeAttribute()]
+        public string version {
+            get {
+                return this.versionField;
+            }
+            set {
+                if ((this.versionField != null)) {
+                    if ((versionField.Equals(value) != true)) {
+                        this.versionField = value;
+                        this.OnPropertyChanged("version");
+                    }
+                }
+                else {
+                    this.versionField = value;
+                    this.OnPropertyChanged("version");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(MapDefinition));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current MapDefinition 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 MapDefinition object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output MapDefinition 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 MapDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapDefinition);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out MapDefinition obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static MapDefinition Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((MapDefinition)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current MapDefinition 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 MapDefinition object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output MapDefinition 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 MapDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapDefinition);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out MapDefinition obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static MapDefinition 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 MapDefinition object
+        /// </summary>
+        public virtual MapDefinition Clone() {
+            return ((MapDefinition)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class MapDefinitionType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string coordinateSystemField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private Box2DType extentsField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private byte[] backgroundColorField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string metadataField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<MapLayerType> mapLayerField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<MapLayerGroupType> mapLayerGroupField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private MapDefinitionTypeBaseMapDefinition baseMapDefinitionField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private MapDefinitionTypeTileSetSource tileSetSourceField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<WatermarkType> watermarksField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        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");
+                }
+            }
+        }
+        
+        public string 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 Box2DType 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(DataType="hexBinary")]
+        public byte[] 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");
+                }
+            }
+        }
+        
+        public string Metadata {
+            get {
+                return this.metadataField;
+            }
+            set {
+                if ((this.metadataField != null)) {
+                    if ((metadataField.Equals(value) != true)) {
+                        this.metadataField = value;
+                        this.OnPropertyChanged("Metadata");
+                    }
+                }
+                else {
+                    this.metadataField = value;
+                    this.OnPropertyChanged("Metadata");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("MapLayer")]
+        public BindingList<MapLayerType> MapLayer {
+            get {
+                return this.mapLayerField;
+            }
+            set {
+                if ((this.mapLayerField != null)) {
+                    if ((mapLayerField.Equals(value) != true)) {
+                        this.mapLayerField = value;
+                        this.OnPropertyChanged("MapLayer");
+                    }
+                }
+                else {
+                    this.mapLayerField = value;
+                    this.OnPropertyChanged("MapLayer");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("MapLayerGroup")]
+        public BindingList<MapLayerGroupType> MapLayerGroup {
+            get {
+                return this.mapLayerGroupField;
+            }
+            set {
+                if ((this.mapLayerGroupField != null)) {
+                    if ((mapLayerGroupField.Equals(value) != true)) {
+                        this.mapLayerGroupField = value;
+                        this.OnPropertyChanged("MapLayerGroup");
+                    }
+                }
+                else {
+                    this.mapLayerGroupField = value;
+                    this.OnPropertyChanged("MapLayerGroup");
+                }
+            }
+        }
+        
+        public MapDefinitionTypeBaseMapDefinition BaseMapDefinition {
+            get {
+                return this.baseMapDefinitionField;
+            }
+            set {
+                if ((this.baseMapDefinitionField != null)) {
+                    if ((baseMapDefinitionField.Equals(value) != true)) {
+                        this.baseMapDefinitionField = value;
+                        this.OnPropertyChanged("BaseMapDefinition");
+                    }
+                }
+                else {
+                    this.baseMapDefinitionField = value;
+                    this.OnPropertyChanged("BaseMapDefinition");
+                }
+            }
+        }
+        
+        public MapDefinitionTypeTileSetSource TileSetSource {
+            get {
+                return this.tileSetSourceField;
+            }
+            set {
+                if ((this.tileSetSourceField != null)) {
+                    if ((tileSetSourceField.Equals(value) != true)) {
+                        this.tileSetSourceField = value;
+                        this.OnPropertyChanged("TileSetSource");
+                    }
+                }
+                else {
+                    this.tileSetSourceField = value;
+                    this.OnPropertyChanged("TileSetSource");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlArrayItemAttribute("Watermark", IsNullable=false)]
+        public BindingList<WatermarkType> Watermarks {
+            get {
+                return this.watermarksField;
+            }
+            set {
+                if ((this.watermarksField != null)) {
+                    if ((watermarksField.Equals(value) != true)) {
+                        this.watermarksField = value;
+                        this.OnPropertyChanged("Watermarks");
+                    }
+                }
+                else {
+                    this.watermarksField = value;
+                    this.OnPropertyChanged("Watermarks");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(MapDefinitionType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current MapDefinitionType 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 MapDefinitionType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output MapDefinitionType 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 MapDefinitionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapDefinitionType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out MapDefinitionType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static MapDefinitionType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((MapDefinitionType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current MapDefinitionType 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 MapDefinitionType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output MapDefinitionType 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 MapDefinitionType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapDefinitionType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out MapDefinitionType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static MapDefinitionType 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 MapDefinitionType object
+        /// </summary>
+        public virtual MapDefinitionType Clone() {
+            return ((MapDefinitionType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class Box2DType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double minXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double maxXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double minYField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double maxYField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public double MinX {
+            get {
+                return this.minXField;
+            }
+            set {
+                if ((minXField.Equals(value) != true)) {
+                    this.minXField = value;
+                    this.OnPropertyChanged("MinX");
+                }
+            }
+        }
+        
+        public double MaxX {
+            get {
+                return this.maxXField;
+            }
+            set {
+                if ((maxXField.Equals(value) != true)) {
+                    this.maxXField = value;
+                    this.OnPropertyChanged("MaxX");
+                }
+            }
+        }
+        
+        public double MinY {
+            get {
+                return this.minYField;
+            }
+            set {
+                if ((minYField.Equals(value) != true)) {
+                    this.minYField = value;
+                    this.OnPropertyChanged("MinY");
+                }
+            }
+        }
+        
+        public double MaxY {
+            get {
+                return this.maxYField;
+            }
+            set {
+                if ((maxYField.Equals(value) != true)) {
+                    this.maxYField = value;
+                    this.OnPropertyChanged("MaxY");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(Box2DType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current Box2DType 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 Box2DType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output Box2DType 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 Box2DType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Box2DType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out Box2DType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static Box2DType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((Box2DType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current Box2DType 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 Box2DType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output Box2DType 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 Box2DType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Box2DType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out Box2DType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static Box2DType 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 Box2DType object
+        /// </summary>
+        public virtual Box2DType Clone() {
+            return ((Box2DType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class MapLayerType : MapLayerCommonType, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool visibleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string groupField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public bool Visible {
+            get {
+                return this.visibleField;
+            }
+            set {
+                if ((visibleField.Equals(value) != true)) {
+                    this.visibleField = value;
+                    this.OnPropertyChanged("Visible");
+                }
+            }
+        }
+        
+        public string 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");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(MapLayerType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current MapLayerType 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 MapLayerType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output MapLayerType 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 MapLayerType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapLayerType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out MapLayerType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static MapLayerType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((MapLayerType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current MapLayerType 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 MapLayerType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output MapLayerType 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 MapLayerType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapLayerType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out MapLayerType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static MapLayerType 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 MapLayerType object
+        /// </summary>
+        public virtual MapLayerType Clone() {
+            return ((MapLayerType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BaseMapLayerType))]
+    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MapLayerType))]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class MapLayerCommonType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string resourceIdField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool selectableField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool showInLegendField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string legendLabelField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool expandInLegendField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        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");
+                }
+            }
+        }
+        
+        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 bool Selectable {
+            get {
+                return this.selectableField;
+            }
+            set {
+                if ((selectableField.Equals(value) != true)) {
+                    this.selectableField = value;
+                    this.OnPropertyChanged("Selectable");
+                }
+            }
+        }
+        
+        public bool ShowInLegend {
+            get {
+                return this.showInLegendField;
+            }
+            set {
+                if ((showInLegendField.Equals(value) != true)) {
+                    this.showInLegendField = value;
+                    this.OnPropertyChanged("ShowInLegend");
+                }
+            }
+        }
+        
+        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 bool ExpandInLegend {
+            get {
+                return this.expandInLegendField;
+            }
+            set {
+                if ((expandInLegendField.Equals(value) != true)) {
+                    this.expandInLegendField = value;
+                    this.OnPropertyChanged("ExpandInLegend");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(MapLayerCommonType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current MapLayerCommonType 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 MapLayerCommonType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output MapLayerCommonType 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 MapLayerCommonType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapLayerCommonType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out MapLayerCommonType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static MapLayerCommonType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((MapLayerCommonType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current MapLayerCommonType 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 MapLayerCommonType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output MapLayerCommonType 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 MapLayerCommonType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapLayerCommonType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out MapLayerCommonType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static MapLayerCommonType 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 MapLayerCommonType object
+        /// </summary>
+        public virtual MapLayerCommonType Clone() {
+            return ((MapLayerCommonType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class BaseMapLayerType : MapLayerCommonType, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(BaseMapLayerType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current BaseMapLayerType 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 BaseMapLayerType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output BaseMapLayerType 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 BaseMapLayerType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(BaseMapLayerType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out BaseMapLayerType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static BaseMapLayerType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((BaseMapLayerType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current BaseMapLayerType 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 BaseMapLayerType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output BaseMapLayerType 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 BaseMapLayerType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(BaseMapLayerType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out BaseMapLayerType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static BaseMapLayerType 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 BaseMapLayerType object
+        /// </summary>
+        public virtual BaseMapLayerType Clone() {
+            return ((BaseMapLayerType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class MapLayerGroupType : MapLayerGroupCommonType, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string groupField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public string 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");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(MapLayerGroupType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current MapLayerGroupType 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 MapLayerGroupType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output MapLayerGroupType 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 MapLayerGroupType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapLayerGroupType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out MapLayerGroupType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static MapLayerGroupType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((MapLayerGroupType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current MapLayerGroupType 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 MapLayerGroupType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output MapLayerGroupType 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 MapLayerGroupType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapLayerGroupType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out MapLayerGroupType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static MapLayerGroupType 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 MapLayerGroupType object
+        /// </summary>
+        public virtual MapLayerGroupType Clone() {
+            return ((MapLayerGroupType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BaseMapLayerGroupType))]
+    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MapLayerGroupType))]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class MapLayerGroupCommonType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool visibleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool showInLegendField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool expandInLegendField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string legendLabelField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        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");
+                }
+            }
+        }
+        
+        public bool Visible {
+            get {
+                return this.visibleField;
+            }
+            set {
+                if ((visibleField.Equals(value) != true)) {
+                    this.visibleField = value;
+                    this.OnPropertyChanged("Visible");
+                }
+            }
+        }
+        
+        public bool ShowInLegend {
+            get {
+                return this.showInLegendField;
+            }
+            set {
+                if ((showInLegendField.Equals(value) != true)) {
+                    this.showInLegendField = value;
+                    this.OnPropertyChanged("ShowInLegend");
+                }
+            }
+        }
+        
+        public bool ExpandInLegend {
+            get {
+                return this.expandInLegendField;
+            }
+            set {
+                if ((expandInLegendField.Equals(value) != true)) {
+                    this.expandInLegendField = value;
+                    this.OnPropertyChanged("ExpandInLegend");
+                }
+            }
+        }
+        
+        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");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(MapLayerGroupCommonType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current MapLayerGroupCommonType 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 MapLayerGroupCommonType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output MapLayerGroupCommonType 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 MapLayerGroupCommonType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapLayerGroupCommonType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out MapLayerGroupCommonType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static MapLayerGroupCommonType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((MapLayerGroupCommonType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current MapLayerGroupCommonType 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 MapLayerGroupCommonType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output MapLayerGroupCommonType 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 MapLayerGroupCommonType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapLayerGroupCommonType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out MapLayerGroupCommonType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static MapLayerGroupCommonType 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 MapLayerGroupCommonType object
+        /// </summary>
+        public virtual MapLayerGroupCommonType Clone() {
+            return ((MapLayerGroupCommonType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class BaseMapLayerGroupType : MapLayerGroupCommonType, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<BaseMapLayerType> baseMapLayerField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        [System.Xml.Serialization.XmlElementAttribute("BaseMapLayer")]
+        public BindingList<BaseMapLayerType> BaseMapLayer {
+            get {
+                return this.baseMapLayerField;
+            }
+            set {
+                if ((this.baseMapLayerField != null)) {
+                    if ((baseMapLayerField.Equals(value) != true)) {
+                        this.baseMapLayerField = value;
+                        this.OnPropertyChanged("BaseMapLayer");
+                    }
+                }
+                else {
+                    this.baseMapLayerField = value;
+                    this.OnPropertyChanged("BaseMapLayer");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(BaseMapLayerGroupType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current BaseMapLayerGroupType 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 BaseMapLayerGroupType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output BaseMapLayerGroupType 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 BaseMapLayerGroupType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(BaseMapLayerGroupType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out BaseMapLayerGroupType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static BaseMapLayerGroupType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((BaseMapLayerGroupType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current BaseMapLayerGroupType 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 BaseMapLayerGroupType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output BaseMapLayerGroupType 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 BaseMapLayerGroupType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(BaseMapLayerGroupType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out BaseMapLayerGroupType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static BaseMapLayerGroupType 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 BaseMapLayerGroupType object
+        /// </summary>
+        public virtual BaseMapLayerGroupType Clone() {
+            return ((BaseMapLayerGroupType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    public partial class MapDefinitionTypeBaseMapDefinition : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<double> finiteDisplayScaleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<BaseMapLayerGroupType> baseMapLayerGroupField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        [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");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("BaseMapLayerGroup")]
+        public BindingList<BaseMapLayerGroupType> BaseMapLayerGroup {
+            get {
+                return this.baseMapLayerGroupField;
+            }
+            set {
+                if ((this.baseMapLayerGroupField != null)) {
+                    if ((baseMapLayerGroupField.Equals(value) != true)) {
+                        this.baseMapLayerGroupField = value;
+                        this.OnPropertyChanged("BaseMapLayerGroup");
+                    }
+                }
+                else {
+                    this.baseMapLayerGroupField = value;
+                    this.OnPropertyChanged("BaseMapLayerGroup");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(MapDefinitionTypeBaseMapDefinition));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current MapDefinitionTypeBaseMapDefinition 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 MapDefinitionTypeBaseMapDefinition object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output MapDefinitionTypeBaseMapDefinition 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 MapDefinitionTypeBaseMapDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapDefinitionTypeBaseMapDefinition);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out MapDefinitionTypeBaseMapDefinition obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static MapDefinitionTypeBaseMapDefinition Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((MapDefinitionTypeBaseMapDefinition)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current MapDefinitionTypeBaseMapDefinition 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 MapDefinitionTypeBaseMapDefinition object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output MapDefinitionTypeBaseMapDefinition 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 MapDefinitionTypeBaseMapDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapDefinitionTypeBaseMapDefinition);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out MapDefinitionTypeBaseMapDefinition obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static MapDefinitionTypeBaseMapDefinition 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 MapDefinitionTypeBaseMapDefinition object
+        /// </summary>
+        public virtual MapDefinitionTypeBaseMapDefinition Clone() {
+            return ((MapDefinitionTypeBaseMapDefinition)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    public partial class MapDefinitionTypeTileSetSource : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string resourceIdField;
+        
+        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");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(MapDefinitionTypeTileSetSource));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current MapDefinitionTypeTileSetSource 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 MapDefinitionTypeTileSetSource object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output MapDefinitionTypeTileSetSource 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 MapDefinitionTypeTileSetSource obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapDefinitionTypeTileSetSource);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out MapDefinitionTypeTileSetSource obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static MapDefinitionTypeTileSetSource Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((MapDefinitionTypeTileSetSource)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current MapDefinitionTypeTileSetSource 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 MapDefinitionTypeTileSetSource object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output MapDefinitionTypeTileSetSource 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 MapDefinitionTypeTileSetSource obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapDefinitionTypeTileSetSource);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out MapDefinitionTypeTileSetSource obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static MapDefinitionTypeTileSetSource 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 MapDefinitionTypeTileSetSource object
+        /// </summary>
+        public virtual MapDefinitionTypeTileSetSource Clone() {
+            return ((MapDefinitionTypeTileSetSource)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class WatermarkType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string resourceIdField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private UsageType usageField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private WatermarkAppearanceType appearanceOverrideField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private WatermarkTypePositionOverride positionOverrideField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public WatermarkType() {
+            this.usageField = UsageType.All;
+        }
+        
+        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");
+                }
+            }
+        }
+        
+        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");
+                }
+            }
+        }
+        
+        [System.ComponentModel.DefaultValueAttribute(UsageType.All)]
+        public UsageType Usage {
+            get {
+                return this.usageField;
+            }
+            set {
+                if ((usageField.Equals(value) != true)) {
+                    this.usageField = value;
+                    this.OnPropertyChanged("Usage");
+                }
+            }
+        }
+        
+        public WatermarkAppearanceType AppearanceOverride {
+            get {
+                return this.appearanceOverrideField;
+            }
+            set {
+                if ((this.appearanceOverrideField != null)) {
+                    if ((appearanceOverrideField.Equals(value) != true)) {
+                        this.appearanceOverrideField = value;
+                        this.OnPropertyChanged("AppearanceOverride");
+                    }
+                }
+                else {
+                    this.appearanceOverrideField = value;
+                    this.OnPropertyChanged("AppearanceOverride");
+                }
+            }
+        }
+        
+        public WatermarkTypePositionOverride PositionOverride {
+            get {
+                return this.positionOverrideField;
+            }
+            set {
+                if ((this.positionOverrideField != null)) {
+                    if ((positionOverrideField.Equals(value) != true)) {
+                        this.positionOverrideField = value;
+                        this.OnPropertyChanged("PositionOverride");
+                    }
+                }
+                else {
+                    this.positionOverrideField = value;
+                    this.OnPropertyChanged("PositionOverride");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(WatermarkType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current WatermarkType 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 WatermarkType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output WatermarkType 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 WatermarkType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out WatermarkType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static WatermarkType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((WatermarkType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current WatermarkType 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 WatermarkType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output WatermarkType 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 WatermarkType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out WatermarkType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static WatermarkType 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 WatermarkType object
+        /// </summary>
+        public virtual WatermarkType Clone() {
+            return ((WatermarkType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    public enum UsageType {
+        
+        /// <remarks/>
+        WMS,
+        
+        /// <remarks/>
+        Viewer,
+        
+        /// <remarks/>
+        All,
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    public partial class WatermarkTypePositionOverride : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private PositionType itemField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        [System.Xml.Serialization.XmlElementAttribute("TilePosition", typeof(TilePositionType))]
+        [System.Xml.Serialization.XmlElementAttribute("XYPosition", typeof(XYPositionType))]
+        public PositionType Item {
+            get {
+                return this.itemField;
+            }
+            set {
+                if ((this.itemField != null)) {
+                    if ((itemField.Equals(value) != true)) {
+                        this.itemField = value;
+                        this.OnPropertyChanged("Item");
+                    }
+                }
+                else {
+                    this.itemField = value;
+                    this.OnPropertyChanged("Item");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(WatermarkTypePositionOverride));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current WatermarkTypePositionOverride 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 WatermarkTypePositionOverride object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output WatermarkTypePositionOverride 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 WatermarkTypePositionOverride obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkTypePositionOverride);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out WatermarkTypePositionOverride obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static WatermarkTypePositionOverride Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((WatermarkTypePositionOverride)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current WatermarkTypePositionOverride 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 WatermarkTypePositionOverride object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output WatermarkTypePositionOverride 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 WatermarkTypePositionOverride obj, out System.Exception exception) {
+            exception = null;
+            obj = default(WatermarkTypePositionOverride);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out WatermarkTypePositionOverride obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static WatermarkTypePositionOverride 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 WatermarkTypePositionOverride object
+        /// </summary>
+        public virtual WatermarkTypePositionOverride Clone() {
+            return ((WatermarkTypePositionOverride)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+}

Added: trunk/Tools/Maestro/Generated/RuntimeMap-3.0.0.designer.cs
===================================================================
--- trunk/Tools/Maestro/Generated/RuntimeMap-3.0.0.designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Generated/RuntimeMap-3.0.0.designer.cs	2014-12-29 13:18:49 UTC (rev 8482)
@@ -0,0 +1,3214 @@
+#pragma warning disable 1591, 0114, 0108
+// ------------------------------------------------------------------------------
+//  <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.v3_0_0 {
+    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 tileSetDefinitionField;
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string tileWidthField;
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string tileHeightField;
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string backgroundColorField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private int 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 resource id of the Tile Set Definition linked by the Map Definition from which this runtime map was created from
+        /// </summary>
+        public string TileSetDefinition
+        {
+            get
+            {
+                return this.tileSetDefinitionField;
+            }
+            set
+            {
+                if ((this.tileSetDefinitionField != null))
+                {
+                    if ((tileSetDefinitionField.Equals(value) != true))
+                    {
+                        this.tileSetDefinitionField = value;
+                        this.OnPropertyChanged("TileSetDefinition");
+                    }
+                }
+                else
+                {
+                    this.tileSetDefinitionField = value;
+                    this.OnPropertyChanged("TileSetDefinition");
+                }
+            }
+        }
+
+        /// <summary>
+        /// The tile width
+        /// </summary>
+        [System.Xml.Serialization.XmlElementAttribute(DataType = "integer")]
+        public string TileWidth
+        {
+            get
+            {
+                return this.tileWidthField;
+            }
+            set
+            {
+                if ((this.tileWidthField != null))
+                {
+                    if ((tileWidthField.Equals(value) != true))
+                    {
+                        this.tileWidthField = value;
+                        this.OnPropertyChanged("TileWidth");
+                    }
+                }
+                else
+                {
+                    this.tileWidthField = value;
+                    this.OnPropertyChanged("TileWidth");
+                }
+            }
+        }
+
+        /// <summary>
+        /// The tile height
+        /// </summary>
+        [System.Xml.Serialization.XmlElementAttribute(DataType = "integer")]
+        public string TileHeight
+        {
+            get
+            {
+                return this.tileHeightField;
+            }
+            set
+            {
+                if ((this.tileHeightField != null))
+                {
+                    if ((tileHeightField.Equals(value) != true))
+                    {
+                        this.tileHeightField = value;
+                        this.OnPropertyChanged("TileHeight");
+                    }
+                }
+                else
+                {
+                    this.tileHeightField = value;
+                    this.OnPropertyChanged("TileHeight");
+                }
+            }
+        }
+        
+        /// <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>
+        public int DisplayDpi {
+            get {
+                return this.displayDpiField;
+            }
+            set {
+                if ((displayDpiField.Equals(value) != true))
+                {
+                    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 double xField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double yField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+
+        [System.Xml.Serialization.XmlElementAttribute(DataType = "double")]
+        public double X {
+            get {
+                return this.xField;
+            }
+            set {
+                if ((xField.Equals(value) != true))
+                {
+                    this.xField = value;
+                    this.OnPropertyChanged("X");
+                }
+            }
+        }
+
+        [System.Xml.Serialization.XmlElementAttribute(DataType = "double")]
+        public double Y {
+            get {
+                return this.yField;
+            }
+            set {
+                if ((yField.Equals(value) != true))
+                {
+                    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 double xField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double yField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+
+        [System.Xml.Serialization.XmlElementAttribute(DataType = "double")]
+        public double X {
+            get {
+                return this.xField;
+            }
+            set {
+                if ((xField.Equals(value) != true))
+                {
+                    this.xField = value;
+                    this.OnPropertyChanged("X");
+                }
+            }
+        }
+
+        [System.Xml.Serialization.XmlElementAttribute(DataType = "double")]
+        public double Y {
+            get {
+                return this.yField;
+            }
+            set {
+                if ((yField.Equals(value) != true))
+                {
+                    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
+    }
+}

Added: trunk/Tools/Maestro/Generated/TileProviderList-3.0.0.designer.cs
===================================================================
--- trunk/Tools/Maestro/Generated/TileProviderList-3.0.0.designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Generated/TileProviderList-3.0.0.designer.cs	2014-12-29 13:18:49 UTC (rev 8482)
@@ -0,0 +1,818 @@
+// ------------------------------------------------------------------------------
+//  <auto-generated>
+//    Generated by Xsd2Code. Version 3.4.0.32989
+//    <NameSpace>OSGeo.MapGuide.ObjectModels.TileProviderList</NameSpace><Collection>BindingList</Collection><codeType>CSharp</codeType><EnableDataBinding>True</EnableDataBinding><EnableLazyLoading>False</EnableLazyLoading><TrackingChangesEnable>False</TrackingChangesEnable><GenTrackingClasses>False</GenTrackingClasses><HidePrivateFieldInIDE>True</HidePrivateFieldInIDE><EnableSummaryComment>True</EnableSummaryComment><VirtualProp>False</VirtualProp><IncludeSerializeMethod>True</IncludeSerializeMethod><UseBaseClass>False</UseBaseClass><GenBaseClass>False</GenBaseClass><GenerateCloneMethod>True</GenerateCloneMethod><GenerateDataContracts>False</GenerateDataContracts><CodeBaseTag>Net20</CodeBaseTag><SerializeMethodName>Serialize</SerializeMethodName><DeserializeMethodName>Deserialize</DeserializeMethodName><SaveToFileMethodName>SaveToFile</SaveToFileMethodName><LoadFromFileMethodName>LoadFromFile</LoadFromFileMethodName><GenerateXMLAttributes>True</GenerateXMLAttributes><OrderX
 MLAttrib>False</OrderXMLAttrib><EnableEncoding>False</EnableEncoding><AutomaticProperties>False</AutomaticProperties><GenerateShouldSerialize>False</GenerateShouldSerialize><DisableDebug>False</DisableDebug><PropNameSpecified>Default</PropNameSpecified><Encoder>UTF8</Encoder><CustomUsings></CustomUsings><ExcludeIncludedTypes>False</ExcludeIncludedTypes><EnableInitializeFields>False</EnableInitializeFields>
+//  </auto-generated>
+// ------------------------------------------------------------------------------
+namespace OSGeo.MapGuide.ObjectModels.TileProviderList {
+    using System;
+    using System.Diagnostics;
+    using System.Xml.Serialization;
+    using System.Collections;
+    using System.Xml.Schema;
+    using System.ComponentModel;
+    using System.IO;
+    using System.Text;
+    
+    
+    /// <summary>
+    /// Root element that contains a collection of TileProvider elements.
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
+    public partial class TileProviderList : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<TileProviderListTileProvider> tileProviderField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        /// <summary>
+        /// Describes an installed tile provider.
+        /// </summary>
+        [System.Xml.Serialization.XmlElementAttribute("TileProvider")]
+        public BindingList<TileProviderListTileProvider> TileProvider {
+            get {
+                return this.tileProviderField;
+            }
+            set {
+                if ((this.tileProviderField != null)) {
+                    if ((tileProviderField.Equals(value) != true)) {
+                        this.tileProviderField = value;
+                        this.OnPropertyChanged("TileProvider");
+                    }
+                }
+                else {
+                    this.tileProviderField = value;
+                    this.OnPropertyChanged("TileProvider");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(TileProviderList));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current TileProviderList 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 TileProviderList object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output TileProviderList 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 TileProviderList obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TileProviderList);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out TileProviderList obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static TileProviderList Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((TileProviderList)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current TileProviderList 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 TileProviderList object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output TileProviderList 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 TileProviderList obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TileProviderList);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out TileProviderList obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static TileProviderList 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 TileProviderList object
+        /// </summary>
+        public virtual TileProviderList Clone() {
+            return ((TileProviderList)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    /// <summary>
+    /// Describes an installed tile provider.
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    public partial class TileProviderListTileProvider : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string displayNameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string descriptionField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<TileProviderListTileProviderConnectionProperty> connectionPropertiesField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        /// <summary>
+        /// Unique name of the feature provider. This name should be of the form <Company>.<Provider>.lt;Version>.
+        /// </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>
+        /// A user friendly display name of the feature provider.
+        /// </summary>
+        public string DisplayName {
+            get {
+                return this.displayNameField;
+            }
+            set {
+                if ((this.displayNameField != null)) {
+                    if ((displayNameField.Equals(value) != true)) {
+                        this.displayNameField = value;
+                        this.OnPropertyChanged("DisplayName");
+                    }
+                }
+                else {
+                    this.displayNameField = value;
+                    this.OnPropertyChanged("DisplayName");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// A brief description of the feature provider.
+        /// </summary>
+        public string Description {
+            get {
+                return this.descriptionField;
+            }
+            set {
+                if ((this.descriptionField != null)) {
+                    if ((descriptionField.Equals(value) != true)) {
+                        this.descriptionField = value;
+                        this.OnPropertyChanged("Description");
+                    }
+                }
+                else {
+                    this.descriptionField = value;
+                    this.OnPropertyChanged("Description");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Connection properties for each provider with default values will be listed here.
+        /// </summary>
+        [System.Xml.Serialization.XmlArrayItemAttribute("ConnectionProperty", IsNullable=false)]
+        public BindingList<TileProviderListTileProviderConnectionProperty> ConnectionProperties {
+            get {
+                return this.connectionPropertiesField;
+            }
+            set {
+                if ((this.connectionPropertiesField != null)) {
+                    if ((connectionPropertiesField.Equals(value) != true)) {
+                        this.connectionPropertiesField = value;
+                        this.OnPropertyChanged("ConnectionProperties");
+                    }
+                }
+                else {
+                    this.connectionPropertiesField = value;
+                    this.OnPropertyChanged("ConnectionProperties");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(TileProviderListTileProvider));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current TileProviderListTileProvider 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 TileProviderListTileProvider object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output TileProviderListTileProvider 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 TileProviderListTileProvider obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TileProviderListTileProvider);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out TileProviderListTileProvider obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static TileProviderListTileProvider Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((TileProviderListTileProvider)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current TileProviderListTileProvider 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 TileProviderListTileProvider object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output TileProviderListTileProvider 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 TileProviderListTileProvider obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TileProviderListTileProvider);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out TileProviderListTileProvider obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static TileProviderListTileProvider 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 TileProviderListTileProvider object
+        /// </summary>
+        public virtual TileProviderListTileProvider Clone() {
+            return ((TileProviderListTileProvider)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    public partial class TileProviderListTileProviderConnectionProperty : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string localizedNameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string defaultValueField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<string> valueField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool requiredField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool protectedField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool enumerableField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        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");
+                }
+            }
+        }
+        
+        public string LocalizedName {
+            get {
+                return this.localizedNameField;
+            }
+            set {
+                if ((this.localizedNameField != null)) {
+                    if ((localizedNameField.Equals(value) != true)) {
+                        this.localizedNameField = value;
+                        this.OnPropertyChanged("LocalizedName");
+                    }
+                }
+                else {
+                    this.localizedNameField = value;
+                    this.OnPropertyChanged("LocalizedName");
+                }
+            }
+        }
+        
+        public string DefaultValue {
+            get {
+                return this.defaultValueField;
+            }
+            set {
+                if ((this.defaultValueField != null)) {
+                    if ((defaultValueField.Equals(value) != true)) {
+                        this.defaultValueField = value;
+                        this.OnPropertyChanged("DefaultValue");
+                    }
+                }
+                else {
+                    this.defaultValueField = value;
+                    this.OnPropertyChanged("DefaultValue");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("Value")]
+        public BindingList<string> Value {
+            get {
+                return this.valueField;
+            }
+            set {
+                if ((this.valueField != null)) {
+                    if ((valueField.Equals(value) != true)) {
+                        this.valueField = value;
+                        this.OnPropertyChanged("Value");
+                    }
+                }
+                else {
+                    this.valueField = value;
+                    this.OnPropertyChanged("Value");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlAttributeAttribute()]
+        public bool Required {
+            get {
+                return this.requiredField;
+            }
+            set {
+                if ((requiredField.Equals(value) != true)) {
+                    this.requiredField = value;
+                    this.OnPropertyChanged("Required");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlAttributeAttribute()]
+        public bool Protected {
+            get {
+                return this.protectedField;
+            }
+            set {
+                if ((protectedField.Equals(value) != true)) {
+                    this.protectedField = value;
+                    this.OnPropertyChanged("Protected");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlAttributeAttribute()]
+        public bool Enumerable {
+            get {
+                return this.enumerableField;
+            }
+            set {
+                if ((enumerableField.Equals(value) != true)) {
+                    this.enumerableField = value;
+                    this.OnPropertyChanged("Enumerable");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(TileProviderListTileProviderConnectionProperty));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current TileProviderListTileProviderConnectionProperty 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 TileProviderListTileProviderConnectionProperty object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output TileProviderListTileProviderConnectionProperty 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 TileProviderListTileProviderConnectionProperty obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TileProviderListTileProviderConnectionProperty);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out TileProviderListTileProviderConnectionProperty obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static TileProviderListTileProviderConnectionProperty Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((TileProviderListTileProviderConnectionProperty)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current TileProviderListTileProviderConnectionProperty 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 TileProviderListTileProviderConnectionProperty object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output TileProviderListTileProviderConnectionProperty 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 TileProviderListTileProviderConnectionProperty obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TileProviderListTileProviderConnectionProperty);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out TileProviderListTileProviderConnectionProperty obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static TileProviderListTileProviderConnectionProperty 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 TileProviderListTileProviderConnectionProperty object
+        /// </summary>
+        public virtual TileProviderListTileProviderConnectionProperty Clone() {
+            return ((TileProviderListTileProviderConnectionProperty)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+}

Added: trunk/Tools/Maestro/Generated/TileSetDefinition-3.0.0.designer.cs
===================================================================
--- trunk/Tools/Maestro/Generated/TileSetDefinition-3.0.0.designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Generated/TileSetDefinition-3.0.0.designer.cs	2014-12-29 13:18:49 UTC (rev 8482)
@@ -0,0 +1,1939 @@
+// ------------------------------------------------------------------------------
+//  <auto-generated>
+//    Generated by Xsd2Code. Version 3.4.0.32989
+//    <NameSpace>OSGeo.MapGuide.ObjectModels.TileSetDefinition</NameSpace><Collection>BindingList</Collection><codeType>CSharp</codeType><EnableDataBinding>True</EnableDataBinding><EnableLazyLoading>False</EnableLazyLoading><TrackingChangesEnable>False</TrackingChangesEnable><GenTrackingClasses>False</GenTrackingClasses><HidePrivateFieldInIDE>True</HidePrivateFieldInIDE><EnableSummaryComment>True</EnableSummaryComment><VirtualProp>False</VirtualProp><IncludeSerializeMethod>True</IncludeSerializeMethod><UseBaseClass>False</UseBaseClass><GenBaseClass>False</GenBaseClass><GenerateCloneMethod>True</GenerateCloneMethod><GenerateDataContracts>False</GenerateDataContracts><CodeBaseTag>Net20</CodeBaseTag><SerializeMethodName>Serialize</SerializeMethodName><DeserializeMethodName>Deserialize</DeserializeMethodName><SaveToFileMethodName>SaveToFile</SaveToFileMethodName><LoadFromFileMethodName>LoadFromFile</LoadFromFileMethodName><GenerateXMLAttributes>True</GenerateXMLAttributes><Order
 XMLAttrib>False</OrderXMLAttrib><EnableEncoding>False</EnableEncoding><AutomaticProperties>False</AutomaticProperties><GenerateShouldSerialize>False</GenerateShouldSerialize><DisableDebug>False</DisableDebug><PropNameSpecified>Default</PropNameSpecified><Encoder>UTF8</Encoder><CustomUsings></CustomUsings><ExcludeIncludedTypes>False</ExcludeIncludedTypes><EnableInitializeFields>False</EnableInitializeFields>
+//  </auto-generated>
+// ------------------------------------------------------------------------------
+namespace OSGeo.MapGuide.ObjectModels.TileSetDefinition {
+    using System;
+    using System.Diagnostics;
+    using System.Xml.Serialization;
+    using System.Collections;
+    using System.Xml.Schema;
+    using System.ComponentModel;
+    using System.IO;
+    using System.Text;
+    
+    
+    /// <summary>
+    /// Defines a tile cache
+    /// </summary>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
+    public partial class TileSetDefinition : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private TileStoreParametersType tileStoreParametersField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private Box2DType extentsField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<BaseMapLayerGroupCommonType> baseMapLayerGroupField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        /// <summary>
+        /// Defines the parameters to access and describe the tile cache
+        /// </summary>
+        public TileStoreParametersType TileStoreParameters {
+            get {
+                return this.tileStoreParametersField;
+            }
+            set {
+                if ((this.tileStoreParametersField != null)) {
+                    if ((tileStoreParametersField.Equals(value) != true)) {
+                        this.tileStoreParametersField = value;
+                        this.OnPropertyChanged("TileStoreParameters");
+                    }
+                }
+                else {
+                    this.tileStoreParametersField = value;
+                    this.OnPropertyChanged("TileStoreParameters");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// A bounding box around the area of the tile cache
+        /// </summary>
+        public Box2DType 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");
+                }
+            }
+        }
+        
+        /// <summary>
+        /// A group of layers that is used to compose a tiled layer in the HTML viewer
+        /// </summary>
+        [System.Xml.Serialization.XmlElementAttribute("BaseMapLayerGroup")]
+        public BindingList<BaseMapLayerGroupCommonType> BaseMapLayerGroup {
+            get {
+                return this.baseMapLayerGroupField;
+            }
+            set {
+                if ((this.baseMapLayerGroupField != null)) {
+                    if ((baseMapLayerGroupField.Equals(value) != true)) {
+                        this.baseMapLayerGroupField = value;
+                        this.OnPropertyChanged("BaseMapLayerGroup");
+                    }
+                }
+                else {
+                    this.baseMapLayerGroupField = value;
+                    this.OnPropertyChanged("BaseMapLayerGroup");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(TileSetDefinition));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current TileSetDefinition 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 TileSetDefinition object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output TileSetDefinition 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 TileSetDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TileSetDefinition);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out TileSetDefinition obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static TileSetDefinition Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((TileSetDefinition)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current TileSetDefinition 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 TileSetDefinition object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output TileSetDefinition 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 TileSetDefinition obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TileSetDefinition);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out TileSetDefinition obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static TileSetDefinition 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 TileSetDefinition object
+        /// </summary>
+        public virtual TileSetDefinition Clone() {
+            return ((TileSetDefinition)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class TileStoreParametersType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string tileProviderField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<NameValuePairType> parameterField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public string TileProvider {
+            get {
+                return this.tileProviderField;
+            }
+            set {
+                if ((this.tileProviderField != null)) {
+                    if ((tileProviderField.Equals(value) != true)) {
+                        this.tileProviderField = value;
+                        this.OnPropertyChanged("TileProvider");
+                    }
+                }
+                else {
+                    this.tileProviderField = value;
+                    this.OnPropertyChanged("TileProvider");
+                }
+            }
+        }
+        
+        [System.Xml.Serialization.XmlElementAttribute("Parameter")]
+        public BindingList<NameValuePairType> Parameter {
+            get {
+                return this.parameterField;
+            }
+            set {
+                if ((this.parameterField != null)) {
+                    if ((parameterField.Equals(value) != true)) {
+                        this.parameterField = value;
+                        this.OnPropertyChanged("Parameter");
+                    }
+                }
+                else {
+                    this.parameterField = value;
+                    this.OnPropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(TileStoreParametersType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current TileStoreParametersType 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 TileStoreParametersType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output TileStoreParametersType 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 TileStoreParametersType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TileStoreParametersType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out TileStoreParametersType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static TileStoreParametersType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((TileStoreParametersType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current TileStoreParametersType 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 TileStoreParametersType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output TileStoreParametersType 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 TileStoreParametersType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(TileStoreParametersType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out TileStoreParametersType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static TileStoreParametersType 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 TileStoreParametersType object
+        /// </summary>
+        public virtual TileStoreParametersType Clone() {
+            return ((TileStoreParametersType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class NameValuePairType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string valueField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private ExtendedDataType extendedData1Field;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        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");
+                }
+            }
+        }
+        
+        public string Value {
+            get {
+                return this.valueField;
+            }
+            set {
+                if ((this.valueField != null)) {
+                    if ((valueField.Equals(value) != true)) {
+                        this.valueField = value;
+                        this.OnPropertyChanged("Value");
+                    }
+                }
+                else {
+                    this.valueField = value;
+                    this.OnPropertyChanged("Value");
+                }
+            }
+        }
+        
+        public ExtendedDataType ExtendedData1 {
+            get {
+                return this.extendedData1Field;
+            }
+            set {
+                if ((this.extendedData1Field != null)) {
+                    if ((extendedData1Field.Equals(value) != true)) {
+                        this.extendedData1Field = value;
+                        this.OnPropertyChanged("ExtendedData1");
+                    }
+                }
+                else {
+                    this.extendedData1Field = value;
+                    this.OnPropertyChanged("ExtendedData1");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(NameValuePairType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current NameValuePairType 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 NameValuePairType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output NameValuePairType 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 NameValuePairType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(NameValuePairType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out NameValuePairType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static NameValuePairType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((NameValuePairType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current NameValuePairType 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 NameValuePairType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output NameValuePairType 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 NameValuePairType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(NameValuePairType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out NameValuePairType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static NameValuePairType 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 NameValuePairType object
+        /// </summary>
+        public virtual NameValuePairType Clone() {
+            return ((NameValuePairType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    public partial class ExtendedDataType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<System.Xml.XmlElement> anyField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        [System.Xml.Serialization.XmlAnyElementAttribute()]
+        public BindingList<System.Xml.XmlElement> Any {
+            get {
+                return this.anyField;
+            }
+            set {
+                if ((this.anyField != null)) {
+                    if ((anyField.Equals(value) != true)) {
+                        this.anyField = value;
+                        this.OnPropertyChanged("Any");
+                    }
+                }
+                else {
+                    this.anyField = value;
+                    this.OnPropertyChanged("Any");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(ExtendedDataType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current ExtendedDataType 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 ExtendedDataType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output ExtendedDataType 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 ExtendedDataType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(ExtendedDataType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out ExtendedDataType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static ExtendedDataType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((ExtendedDataType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current ExtendedDataType 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 ExtendedDataType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output ExtendedDataType 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 ExtendedDataType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(ExtendedDataType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out ExtendedDataType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static ExtendedDataType 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 ExtendedDataType object
+        /// </summary>
+        public virtual ExtendedDataType Clone() {
+            return ((ExtendedDataType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class BaseMapLayerType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string resourceIdField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool selectableField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool showInLegendField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string legendLabelField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool expandInLegendField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        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");
+                }
+            }
+        }
+        
+        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 bool Selectable {
+            get {
+                return this.selectableField;
+            }
+            set {
+                if ((selectableField.Equals(value) != true)) {
+                    this.selectableField = value;
+                    this.OnPropertyChanged("Selectable");
+                }
+            }
+        }
+        
+        public bool ShowInLegend {
+            get {
+                return this.showInLegendField;
+            }
+            set {
+                if ((showInLegendField.Equals(value) != true)) {
+                    this.showInLegendField = value;
+                    this.OnPropertyChanged("ShowInLegend");
+                }
+            }
+        }
+        
+        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 bool ExpandInLegend {
+            get {
+                return this.expandInLegendField;
+            }
+            set {
+                if ((expandInLegendField.Equals(value) != true)) {
+                    this.expandInLegendField = value;
+                    this.OnPropertyChanged("ExpandInLegend");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(BaseMapLayerType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current BaseMapLayerType 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 BaseMapLayerType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output BaseMapLayerType 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 BaseMapLayerType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(BaseMapLayerType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out BaseMapLayerType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static BaseMapLayerType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((BaseMapLayerType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current BaseMapLayerType 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 BaseMapLayerType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output BaseMapLayerType 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 BaseMapLayerType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(BaseMapLayerType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out BaseMapLayerType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static BaseMapLayerType 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 BaseMapLayerType object
+        /// </summary>
+        public virtual BaseMapLayerType Clone() {
+            return ((BaseMapLayerType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BaseMapLayerGroupCommonType))]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class MapLayerGroupCommonType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string nameField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool visibleField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool showInLegendField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private bool expandInLegendField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private string legendLabelField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        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");
+                }
+            }
+        }
+        
+        public bool Visible {
+            get {
+                return this.visibleField;
+            }
+            set {
+                if ((visibleField.Equals(value) != true)) {
+                    this.visibleField = value;
+                    this.OnPropertyChanged("Visible");
+                }
+            }
+        }
+        
+        public bool ShowInLegend {
+            get {
+                return this.showInLegendField;
+            }
+            set {
+                if ((showInLegendField.Equals(value) != true)) {
+                    this.showInLegendField = value;
+                    this.OnPropertyChanged("ShowInLegend");
+                }
+            }
+        }
+        
+        public bool ExpandInLegend {
+            get {
+                return this.expandInLegendField;
+            }
+            set {
+                if ((expandInLegendField.Equals(value) != true)) {
+                    this.expandInLegendField = value;
+                    this.OnPropertyChanged("ExpandInLegend");
+                }
+            }
+        }
+        
+        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");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(MapLayerGroupCommonType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current MapLayerGroupCommonType 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 MapLayerGroupCommonType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output MapLayerGroupCommonType 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 MapLayerGroupCommonType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapLayerGroupCommonType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out MapLayerGroupCommonType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static MapLayerGroupCommonType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((MapLayerGroupCommonType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current MapLayerGroupCommonType 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 MapLayerGroupCommonType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output MapLayerGroupCommonType 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 MapLayerGroupCommonType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(MapLayerGroupCommonType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out MapLayerGroupCommonType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static MapLayerGroupCommonType 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 MapLayerGroupCommonType object
+        /// </summary>
+        public virtual MapLayerGroupCommonType Clone() {
+            return ((MapLayerGroupCommonType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class BaseMapLayerGroupCommonType : MapLayerGroupCommonType, System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private BindingList<BaseMapLayerType> baseMapLayerField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        [System.Xml.Serialization.XmlElementAttribute("BaseMapLayer")]
+        public BindingList<BaseMapLayerType> BaseMapLayer {
+            get {
+                return this.baseMapLayerField;
+            }
+            set {
+                if ((this.baseMapLayerField != null)) {
+                    if ((baseMapLayerField.Equals(value) != true)) {
+                        this.baseMapLayerField = value;
+                        this.OnPropertyChanged("BaseMapLayer");
+                    }
+                }
+                else {
+                    this.baseMapLayerField = value;
+                    this.OnPropertyChanged("BaseMapLayer");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(BaseMapLayerGroupCommonType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current BaseMapLayerGroupCommonType 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 BaseMapLayerGroupCommonType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output BaseMapLayerGroupCommonType 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 BaseMapLayerGroupCommonType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(BaseMapLayerGroupCommonType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out BaseMapLayerGroupCommonType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static BaseMapLayerGroupCommonType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((BaseMapLayerGroupCommonType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current BaseMapLayerGroupCommonType 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 BaseMapLayerGroupCommonType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output BaseMapLayerGroupCommonType 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 BaseMapLayerGroupCommonType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(BaseMapLayerGroupCommonType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out BaseMapLayerGroupCommonType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static BaseMapLayerGroupCommonType 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 BaseMapLayerGroupCommonType object
+        /// </summary>
+        public virtual BaseMapLayerGroupCommonType Clone() {
+            return ((BaseMapLayerGroupCommonType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
+    [System.SerializableAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=true)]
+    public partial class Box2DType : System.ComponentModel.INotifyPropertyChanged {
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double minXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double maxXField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double minYField;
+        
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        private double maxYField;
+        
+        private static System.Xml.Serialization.XmlSerializer serializer;
+        
+        public double MinX {
+            get {
+                return this.minXField;
+            }
+            set {
+                if ((minXField.Equals(value) != true)) {
+                    this.minXField = value;
+                    this.OnPropertyChanged("MinX");
+                }
+            }
+        }
+        
+        public double MaxX {
+            get {
+                return this.maxXField;
+            }
+            set {
+                if ((maxXField.Equals(value) != true)) {
+                    this.maxXField = value;
+                    this.OnPropertyChanged("MaxX");
+                }
+            }
+        }
+        
+        public double MinY {
+            get {
+                return this.minYField;
+            }
+            set {
+                if ((minYField.Equals(value) != true)) {
+                    this.minYField = value;
+                    this.OnPropertyChanged("MinY");
+                }
+            }
+        }
+        
+        public double MaxY {
+            get {
+                return this.maxYField;
+            }
+            set {
+                if ((maxYField.Equals(value) != true)) {
+                    this.maxYField = value;
+                    this.OnPropertyChanged("MaxY");
+                }
+            }
+        }
+        
+        private static System.Xml.Serialization.XmlSerializer Serializer {
+            get {
+                if ((serializer == null)) {
+                    serializer = new System.Xml.Serialization.XmlSerializer(typeof(Box2DType));
+                }
+                return serializer;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        public virtual void OnPropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler handler = this.PropertyChanged;
+            if ((handler != null)) {
+                handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        #region Serialize/Deserialize
+        /// <summary>
+        /// Serializes current Box2DType 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 Box2DType object
+        /// </summary>
+        /// <param name="xml">string workflow markup to deserialize</param>
+        /// <param name="obj">Output Box2DType 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 Box2DType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Box2DType);
+            try {
+                obj = Deserialize(xml);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool Deserialize(string xml, out Box2DType obj) {
+            System.Exception exception = null;
+            return Deserialize(xml, out obj, out exception);
+        }
+        
+        public static Box2DType Deserialize(string xml) {
+            System.IO.StringReader stringReader = null;
+            try {
+                stringReader = new System.IO.StringReader(xml);
+                return ((Box2DType)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
+            }
+            finally {
+                if ((stringReader != null)) {
+                    stringReader.Dispose();
+                }
+            }
+        }
+        
+        /// <summary>
+        /// Serializes current Box2DType 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 Box2DType object
+        /// </summary>
+        /// <param name="fileName">string xml file to load and deserialize</param>
+        /// <param name="obj">Output Box2DType 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 Box2DType obj, out System.Exception exception) {
+            exception = null;
+            obj = default(Box2DType);
+            try {
+                obj = LoadFromFile(fileName);
+                return true;
+            }
+            catch (System.Exception ex) {
+                exception = ex;
+                return false;
+            }
+        }
+        
+        public static bool LoadFromFile(string fileName, out Box2DType obj) {
+            System.Exception exception = null;
+            return LoadFromFile(fileName, out obj, out exception);
+        }
+        
+        public static Box2DType 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 Box2DType object
+        /// </summary>
+        public virtual Box2DType Clone() {
+            return ((Box2DType)(this.MemberwiseClone()));
+        }
+        #endregion
+    }
+}

Modified: trunk/Tools/Maestro/Maestro/Maestro.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro/Maestro.csproj	2014-12-29 10:11:17 UTC (rev 8481)
+++ trunk/Tools/Maestro/Maestro/Maestro.csproj	2014-12-29 13:18:49 UTC (rev 8482)
@@ -263,6 +263,11 @@
       <Link>Schemas\MapDefinition-2.4.0.xsd</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
+    <None Include="..\OSGeo.MapGuide.MaestroAPI\Schemas\MapDefinition-3.0.0.xsd">
+      <Link>Schemas\MapDefinition-3.0.0.xsd</Link>
+      <SubType>Designer</SubType>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
     <None Include="..\OSGeo.MapGuide.MaestroAPI\Schemas\PlatformCommon-1.0.0.xsd">
       <Link>Schemas\PlatformCommon-1.0.0.xsd</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
@@ -319,6 +324,11 @@
       <Link>Schemas\RuntimeMap-2.6.0.xsd</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
+    <None Include="..\OSGeo.MapGuide.MaestroAPI\Schemas\RuntimeMap-3.0.0.xsd">
+      <Link>Schemas\RuntimeMap-3.0.0.xsd</Link>
+      <SubType>Designer</SubType>
+      <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>
@@ -375,6 +385,16 @@
       <Link>Schemas\SymbolLibrary-1.0.0.xsd</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
+    <None Include="..\OSGeo.MapGuide.MaestroAPI\Schemas\TileProviderList-3.0.0.xsd">
+      <Link>Schemas\TileProviderList-3.0.0.xsd</Link>
+      <SubType>Designer</SubType>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <None Include="..\OSGeo.MapGuide.MaestroAPI\Schemas\TileSetDefinition-3.0.0.xsd">
+      <Link>Schemas\TileSetDefinition-3.0.0.xsd</Link>
+      <SubType>Designer</SubType>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
     <None Include="..\OSGeo.MapGuide.MaestroAPI\Schemas\Types-1.0.0.xsd">
       <Link>Schemas\Types-1.0.0.xsd</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
@@ -407,6 +427,11 @@
       <Link>Schemas\WebLayout-1.1.0.xsd</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
+    <None Include="..\OSGeo.MapGuide.MaestroAPI\Schemas\WebLayout-2.4.0.xsd">
+      <Link>Schemas\WebLayout-2.4.0.xsd</Link>
+      <SubType>Designer</SubType>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
     <None Include="..\OSGeo.MapGuide.MaestroAPI\Schemas\WebLayout-2.6.0.xsd">
       <Link>Schemas\WebLayout-2.6.0.xsd</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>

Modified: trunk/Tools/Maestro/MaestroAPITests/MaestroAPITests.csproj
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/MaestroAPITests.csproj	2014-12-29 10:11:17 UTC (rev 8481)
+++ trunk/Tools/Maestro/MaestroAPITests/MaestroAPITests.csproj	2014-12-29 13:18:49 UTC (rev 8482)
@@ -23,6 +23,8 @@
     <OldToolsVersion>3.5</OldToolsVersion>
     <TargetFrameworkProfile>
     </TargetFrameworkProfile>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\Maestro\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
     <PublishUrl>publish\</PublishUrl>
     <Install>true</Install>
     <InstallFrom>Disk</InstallFrom>
@@ -37,8 +39,6 @@
     <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
     <UseApplicationTrust>false</UseApplicationTrust>
     <BootstrapperEnabled>true</BootstrapperEnabled>
-    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\Maestro\</SolutionDir>
-    <RestorePackages>true</RestorePackages>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -259,6 +259,9 @@
     <None Include="TestData\Symbology\UT_SymbologyRoads.fs">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\TileService\UT_BaseMap.tsd">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\TileService\UT_Parcels.fs">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
@@ -268,6 +271,9 @@
     <None Include="TestData\TileService\UT_VotingDistricts.fs">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
+    <None Include="TestData\TileService\UT_XYZ.tsd">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
     <None Include="TestData\Unicode\Sample_World_Unicode.FeatureSource">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
@@ -502,6 +508,9 @@
     <Content Include="TestData\TileService\UT_BaseMap.mdf">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>
+    <Content Include="TestData\TileService\UT_LinkedTileSet.mdf">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
     <Content Include="TestData\TileService\UT_Parcels.ldf">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>

Modified: trunk/Tools/Maestro/MaestroAPITests/RuntimeMapTests.cs
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/RuntimeMapTests.cs	2014-12-29 10:11:17 UTC (rev 8481)
+++ trunk/Tools/Maestro/MaestroAPITests/RuntimeMapTests.cs	2014-12-29 13:18:49 UTC (rev 8482)
@@ -117,6 +117,22 @@
 
             resSvc.SetResourceXmlData("Library://UnitTests/Data/SpaceShip.DrawingSource", File.OpenRead("TestData/DrawingService/SpaceShipDrawingSource.xml"));
             resSvc.SetResourceData("Library://UnitTests/Data/SpaceShip.DrawingSource", "SpaceShip.dwf", ResourceDataType.File, File.OpenRead("TestData/DrawingService/SpaceShip.dwf"));
+
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                resSvc.SetResourceXmlData("Library://UnitTests/Data/RoadCenterLines.FeatureSource", File.OpenRead("TestData/TileService/UT_RoadCenterLines.fs"));
+                resSvc.SetResourceData("Library://UnitTests/Data/RoadCenterLines.FeatureSource", "RoadCenterLines.sdf", ResourceDataType.File, File.OpenRead("TestData/TileService/UT_RoadCenterLines.sdf"));
+
+                resSvc.SetResourceXmlData("Library://UnitTests/Layers/RoadCenterLines.LayerDefinition", File.OpenRead("TestData/TileService/UT_RoadCenterLines.ldf"));
+
+                resSvc.SetResourceXmlData("Library://UnitTests/Data/VotingDistricts.FeatureSource", File.OpenRead("TestData/TileService/UT_VotingDistricts.fs"));
+                resSvc.SetResourceData("Library://UnitTests/Data/VotingDistricts.FeatureSource", "VotingDistricts.sdf", ResourceDataType.File, File.OpenRead("TestData/TileService/UT_VotingDistricts.sdf"));
+
+                resSvc.SetResourceXmlData("Library://UnitTests/Layers/VotingDistricts.LayerDefinition", File.OpenRead("TestData/TileService/UT_VotingDistricts.ldf"));
+
+                resSvc.SetResourceXmlData("Library://UnitTests/TileSets/Sheboygan.TileSetDefinition", File.OpenRead("TestData/TileService/UT_BaseMap.tsd"));
+                resSvc.SetResourceXmlData("Library://UnitTests/Maps/SheboyganLinked.MapDefinition", File.OpenRead("TestData/TileService/UT_LinkedTileSet.mdf"));
+            }
         }
 
         [TestFixtureTearDown]
@@ -1341,6 +1357,11 @@
             create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
 
             MapModel.IRuntimeMapInfo rtInfo = create.Execute();
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+            }
+
             Assert.NotNull(rtInfo.CoordinateSystem);
             Assert.IsNullOrEmpty(rtInfo.IconMimeType);
             Assert.NotNull(rtInfo.Extents);
@@ -1354,6 +1375,10 @@
             create.MapDefinition = "Library://UnitTests/Maps/SheboyganTiled.MapDefinition";
 
             rtInfo = create.Execute();
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+            }
             Assert.NotNull(rtInfo.CoordinateSystem);
             Assert.IsNullOrEmpty(rtInfo.IconMimeType);
             Assert.NotNull(rtInfo.Extents);
@@ -1370,6 +1395,10 @@
             create.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups);
 
             rtInfo = create.Execute();
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+            }
             Assert.NotNull(rtInfo.CoordinateSystem);
             Assert.IsNullOrEmpty(rtInfo.IconMimeType);
             Assert.NotNull(rtInfo.Extents);
@@ -1389,6 +1418,10 @@
             create.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups | RuntimeMapRequestedFeatures.Icons);
 
             rtInfo = create.Execute();
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+            }
             Assert.NotNull(rtInfo.CoordinateSystem);
             Assert.IsNotNullOrEmpty(rtInfo.IconMimeType);
             Assert.NotNull(rtInfo.Extents);
@@ -1423,6 +1456,10 @@
             create.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups | RuntimeMapRequestedFeatures.Icons | RuntimeMapRequestedFeatures.FeatureSourceInformation);
 
             rtInfo = create.Execute();
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+            }
             Assert.NotNull(rtInfo.CoordinateSystem);
             Assert.IsNotNullOrEmpty(rtInfo.IconMimeType);
             Assert.NotNull(rtInfo.Extents);
@@ -1453,6 +1490,20 @@
             }
             Assert.NotNull(rtInfo.Groups);
             Assert.True(rtInfo.Groups.Count == 0);
+
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                create = (ICreateRuntimeMap)_conn.CreateCommand((int)CommandType.CreateRuntimeMap);
+                create.MapDefinition = "Library://UnitTests/Maps/SheboyganLinked.MapDefinition";
+                create.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups | RuntimeMapRequestedFeatures.Icons | RuntimeMapRequestedFeatures.FeatureSourceInformation);
+
+                rtInfo = create.Execute();
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+                MapModel.IRuntimeMapInfo2 rtInfo2 = (MapModel.IRuntimeMapInfo2)rtInfo;
+                Assert.AreEqual("Library://UnitTests/TileSets/Sheboygan.TileSetDefinition", rtInfo2.TileSetDefinition);
+                Assert.True(rtInfo2.TileWidth.HasValue);
+                Assert.True(rtInfo2.TileHeight.HasValue);
+            }
         }
 
         [Test]
@@ -1472,10 +1523,17 @@
             create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
 
             MapModel.IRuntimeMapInfo map = create.Execute();
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(map);
+            }
             IDescribeRuntimeMap describe = (IDescribeRuntimeMap)_conn.CreateCommand((int)CommandType.DescribeRuntimeMap);
             describe.Name = map.Name;
             MapModel.IRuntimeMapInfo rtInfo = describe.Execute();
-
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+            }
             Assert.NotNull(rtInfo.CoordinateSystem);
             Assert.IsNullOrEmpty(rtInfo.IconMimeType);
             Assert.NotNull(rtInfo.Extents);
@@ -1489,10 +1547,17 @@
             create.MapDefinition = "Library://UnitTests/Maps/SheboyganTiled.MapDefinition";
 
             map = create.Execute();
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(map);
+            }
             describe = (IDescribeRuntimeMap)_conn.CreateCommand((int)CommandType.DescribeRuntimeMap);
             describe.Name = map.Name;
             rtInfo = describe.Execute();
-
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+            }
             Assert.NotNull(rtInfo.CoordinateSystem);
             Assert.IsNullOrEmpty(rtInfo.IconMimeType);
             Assert.NotNull(rtInfo.Extents);
@@ -1508,11 +1573,18 @@
             create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
 
             map = create.Execute();
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(map);
+            }
             describe = (IDescribeRuntimeMap)_conn.CreateCommand((int)CommandType.DescribeRuntimeMap);
             describe.Name = map.Name;
             describe.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups);
             rtInfo = describe.Execute();
-
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+            }
             Assert.NotNull(rtInfo.CoordinateSystem);
             Assert.IsNullOrEmpty(rtInfo.IconMimeType);
             Assert.NotNull(rtInfo.Extents);
@@ -1531,11 +1603,18 @@
             create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
 
             map = create.Execute();
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(map);
+            }
             describe = (IDescribeRuntimeMap)_conn.CreateCommand((int)CommandType.DescribeRuntimeMap);
             describe.Name = map.Name;
             describe.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups | RuntimeMapRequestedFeatures.Icons);
             rtInfo = describe.Execute();
-
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+            }
             Assert.NotNull(rtInfo.CoordinateSystem);
             Assert.IsNotNullOrEmpty(rtInfo.IconMimeType);
             Assert.NotNull(rtInfo.Extents);
@@ -1569,11 +1648,18 @@
             create.MapDefinition = "Library://UnitTests/Maps/Sheboygan.MapDefinition";
 
             map = create.Execute();
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(map);
+            }
             describe = (IDescribeRuntimeMap)_conn.CreateCommand((int)CommandType.DescribeRuntimeMap);
             describe.Name = map.Name;
             describe.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups | RuntimeMapRequestedFeatures.Icons | RuntimeMapRequestedFeatures.FeatureSourceInformation);
             rtInfo = describe.Execute();
-
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+            }
             Assert.NotNull(rtInfo.CoordinateSystem);
             Assert.IsNotNullOrEmpty(rtInfo.IconMimeType);
             Assert.NotNull(rtInfo.Extents);
@@ -1604,6 +1690,30 @@
             }
             Assert.NotNull(rtInfo.Groups);
             Assert.True(rtInfo.Groups.Count == 0);
+
+            if (_conn.SiteVersion >= new Version(3, 0))
+            {
+                create = (ICreateRuntimeMap)_conn.CreateCommand((int)CommandType.CreateRuntimeMap);
+                create.MapDefinition = "Library://UnitTests/Maps/SheboyganLinked.MapDefinition";
+                create.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups | RuntimeMapRequestedFeatures.Icons | RuntimeMapRequestedFeatures.FeatureSourceInformation);
+
+                rtInfo = create.Execute();
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+                MapModel.IRuntimeMapInfo2 rtInfo2 = (MapModel.IRuntimeMapInfo2)rtInfo;
+                Assert.AreEqual("Library://UnitTests/TileSets/Sheboygan.TileSetDefinition", rtInfo2.TileSetDefinition);
+                Assert.True(rtInfo2.TileWidth.HasValue);
+                Assert.True(rtInfo2.TileHeight.HasValue);
+
+                describe = (IDescribeRuntimeMap)_conn.CreateCommand((int)CommandType.DescribeRuntimeMap);
+                describe.Name = rtInfo.Name;
+                describe.RequestedFeatures = (int)(RuntimeMapRequestedFeatures.LayersAndGroups | RuntimeMapRequestedFeatures.Icons | RuntimeMapRequestedFeatures.FeatureSourceInformation);
+                rtInfo = describe.Execute();
+                Assert.IsInstanceOf<MapModel.IRuntimeMapInfo2>(rtInfo);
+                rtInfo2 = (MapModel.IRuntimeMapInfo2)rtInfo;
+                Assert.AreEqual("Library://UnitTests/TileSets/Sheboygan.TileSetDefinition", rtInfo2.TileSetDefinition);
+                Assert.True(rtInfo2.TileWidth.HasValue);
+                Assert.True(rtInfo2.TileHeight.HasValue);
+            }
         }
     }
 

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj	2014-12-29 10:11:17 UTC (rev 8481)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj	2014-12-29 13:18:49 UTC (rev 8482)
@@ -44,7 +44,7 @@
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
     <OutputPath>..\SDK\bin\</OutputPath>
-    <DefineConstants>TRACE;DEBUG;LDF_100, WL_100, MDF_100, SYM_100, LP_100</DefineConstants>
+    <DefineConstants>TRACE;DEBUG</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
@@ -300,6 +300,9 @@
     </None>
     <None Include="Schemas\MapDefinition-2.3.0.xsd" />
     <None Include="Schemas\MapDefinition-2.4.0.xsd" />
+    <None Include="Schemas\MapDefinition-3.0.0.xsd">
+      <SubType>Designer</SubType>
+    </None>
     <None Include="Schemas\PlatformCommon-1.0.0.xsd">
     </None>
     <None Include="Schemas\PrintLayout-1.0.0.xsd">
@@ -326,6 +329,9 @@
     <None Include="Schemas\Role-1.0.0.xsd">
     </None>
     <None Include="Schemas\RuntimeMap-2.6.0.xsd" />
+    <None Include="Schemas\RuntimeMap-3.0.0.xsd">
+      <SubType>Designer</SubType>
+    </None>
     <None Include="Schemas\SelectAggregate-1.0.0.xsd">
     </None>
     <None Include="Schemas\Server-1.0.0.xsd">
@@ -353,6 +359,12 @@
     <None Include="Schemas\SymbolDefinition-2.4.0.xsd" />
     <None Include="Schemas\SymbolLibrary-1.0.0.xsd">
     </None>
+    <None Include="Schemas\TileProviderList-3.0.0.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Schemas\TileSetDefinition-3.0.0.xsd">
+      <SubType>Designer</SubType>
+    </None>
     <None Include="Schemas\Types-1.0.0.xsd">
     </None>
     <None Include="Schemas\UnmanagedDataList-1.0.0.xsd">

Added: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/MapDefinition-3.0.0.xsd
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/MapDefinition-3.0.0.xsd	                        (rev 0)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/MapDefinition-3.0.0.xsd	2014-12-29 13:18:49 UTC (rev 8482)
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="3.0.0">
+  <xs:include schemaLocation="WatermarkDefinition-2.4.0.xsd"/>
+  <xs:complexType name="Box2DType">
+    <xs:annotation>
+      <xs:documentation>Box2D encapsulates the the coordinates of a box in 2-D space</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="MinX" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Minimum x-coordinate</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MaxX" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Maximum x-coordinate</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MinY" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Minimum y-coordinate</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MaxY" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Maximum y-coordinate</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="MapLayerCommonType">
+    <xs:annotation>
+      <xs:documentation>MapLayerCommonType is a common superclass of MapLayerType and BaseMapLayerType.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Name of the MapLayer</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ResourceId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>ResourceId of the MapLayer</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Selectable" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the Layer can be selected</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ShowInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the Layer should be shown in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Label to be shown for the Layer in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExpandInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the Layer should be expanded in the legend.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="MapLayerType">
+    <xs:annotation>
+      <xs:documentation>MapLayerType encapsulates the properties of a map layer, including its group and options about how it should be displayed.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="MapLayerCommonType">
+        <xs:sequence>
+          <xs:element name="Visible" type="xs:boolean">
+            <xs:annotation>
+              <xs:documentation>Whether this layer's visiblity should be visible or not when it first comes into range</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="Group" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>Group of which the MapLayer is a member of</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="BaseMapLayerType">
+    <xs:annotation>
+      <xs:documentation>BaseMapLayerType encapsulates the properties of a BaseMapLayer.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="MapLayerCommonType">
+        <xs:sequence>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="MapLayerGroupCommonType">
+    <xs:annotation>
+      <xs:documentation>MapLayerGroupCommonType is a common superclass of MapLayerGroupType and BaseMapLayerGroupType.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of this LayerGroup</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Visible" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether this group's visiblity should be visible or not when it first comes into range</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ShowInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the LayerGroup should be shown in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExpandInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the LayerGroup should be initially expanded in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Label to be shown for the LayerGroup in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="MapLayerGroupType">
+    <xs:annotation>
+      <xs:documentation>MapLayerGroupType encapsulates the properties of a MapLayerGroup.  Its extension to MapLayerGroupCommonType is that the MapLayerGroup itself can also be in a MapLayerGroup.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="MapLayerGroupCommonType">
+        <xs:sequence>
+          <xs:element name="Group" type="xs:string">
+            <xs:annotation>
+              <xs:documentation>The group that contains the MapLayerGroup</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="BaseMapLayerGroupType">
+    <xs:annotation>
+      <xs:documentation>BaseMapLayerGroupType encapsulates the properties of a BaseMapLayerGroup.  It extends MapLayerGroupCommonType by holding the layers in the group.  The base map layer groups defines what layers are used to render a tile set in the HTML viewer.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="MapLayerGroupCommonType">
+        <xs:sequence>
+          <xs:element name="BaseMapLayer" type="BaseMapLayerType" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>The layers that are part of this group. The order of the layers represents the draw order, layers first is the list are drawn over top of layers later in the list.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="MapDefinitionType">
+    <xs:annotation>
+      <xs:documentation>MapDefinitionType encapsulates a MapDefinition, which houses a collection of MapLayers and their groups.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of the MapDefinition</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="CoordinateSystem" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The coordinate system as WKT used by the MapDefinition</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Extents" type="Box2DType">
+        <xs:annotation>
+          <xs:documentation>A bounding box around the area of the MapDefinition</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="BackgroundColor" type="xs:hexBinary">
+        <xs:annotation>
+          <xs:documentation>The background color to be used with the MapDefinition</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Metadata" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Metadata regarding the MapDefinition</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MapLayer" type="MapLayerType" minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>Zero or more MapLayers that make up the MapDefinition. The order of the layers represents the draw order, layers first is the list are drawn over top of layers later in the list.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MapLayerGroup" type="MapLayerGroupType" minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>Zero or more MapLayerGroups that make up the MapDefinition</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="BaseMapDefinition" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The base map.</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="FiniteDisplayScale" type="xs:double" maxOccurs="unbounded">
+              <xs:annotation>
+                <xs:documentation>The display scales that the base map layers will have tiles available. Applies to the HTML viewer.</xs:documentation>
+              </xs:annotation>
+            </xs:element>
+            <xs:element name="BaseMapLayerGroup" type="BaseMapLayerGroupType" minOccurs="0" maxOccurs="unbounded">
+              <xs:annotation>
+                <xs:documentation>A group of layers that is used to compose a tiled layer in the HTML viewer</xs:documentation>
+              </xs:annotation>
+            </xs:element>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="TileSetSource" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>A reference to the tile set source to use</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="ResourceId" type="xs:string">
+              <xs:annotation>
+                <xs:documentation>ResourceId of the TileSetDefinition</xs:documentation>
+              </xs:annotation>
+            </xs:element>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="Watermarks" type="WatermarkInstanceCollectionType" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>The collection of watermarks used in the map.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="MapDefinition">
+    <xs:annotation>
+      <xs:documentation>A MapDefinition defines the collection of layers, groupings of layers, and base map</xs:documentation>
+    </xs:annotation>
+    <xs:complexType>
+      <xs:complexContent>
+        <xs:extension base="MapDefinitionType">
+          <xs:attribute name="version" type="xs:string" use="required" fixed="3.0.0"/>
+        </xs:extension>
+      </xs:complexContent>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>

Added: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/RuntimeMap-3.0.0.xsd
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/RuntimeMap-3.0.0.xsd	                        (rev 0)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/RuntimeMap-3.0.0.xsd	2014-12-29 13:18:49 UTC (rev 8482)
@@ -0,0 +1,309 @@
+<?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="TileSetDefinition" type="xs:string" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>The resource id of the Tile Set Definition that this Map Definition is linked from. If this Map Definition does not link to a tile set, this element is omitted</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="TileWidth" type="xs:string" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>The tile width as defined by the settings in the Tile Set Definition. If this Map Definition does not link to a tile set, this element is omitted</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="TileHeight" type="xs:string" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>The tile height as defined by the settings in the Tile Set Definition. If this Map Definition does not link to a tile set, this element is omitted</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:attribute name="version" type="xs:string" use="required" fixed="3.0.0"/>
+      </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

Added: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/TileProviderList-3.0.0.xsd
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/TileProviderList-3.0.0.xsd	                        (rev 0)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/TileProviderList-3.0.0.xsd	2014-12-29 13:18:49 UTC (rev 8482)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+  <xs:element name="TileProviderList" type="TileProviderList">
+    <xs:annotation>
+      <xs:documentation>Root element that contains a collection of TileProvider elements.</xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:complexType name="TileProviderList">
+    <xs:sequence>
+      <xs:element name="TileProvider" minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>Describes an installed tile provider.</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="Name" type="xs:string">
+              <xs:annotation>
+                <xs:documentation>Unique name of the feature provider. This name should be of the form <Company>.<Provider>.lt;Version>.</xs:documentation>
+              </xs:annotation>
+            </xs:element>
+            <xs:element name="DisplayName" type="xs:string">
+              <xs:annotation>
+                <xs:documentation>A user friendly display name of the feature provider.</xs:documentation>
+              </xs:annotation>
+            </xs:element>
+            <xs:element name="Description" type="xs:string">
+              <xs:annotation>
+                <xs:documentation>A brief description of the feature provider.</xs:documentation>
+              </xs:annotation>
+            </xs:element>
+            <xs:element name="ConnectionProperties">
+              <xs:annotation>
+                <xs:documentation>Connection properties for each provider with default values will be listed here.</xs:documentation>
+              </xs:annotation>
+              <xs:complexType>
+                <xs:sequence minOccurs="0" maxOccurs="unbounded">
+                  <xs:element name="ConnectionProperty" minOccurs="0" maxOccurs="unbounded">
+                    <xs:complexType>
+                      <xs:sequence>
+                        <xs:element name="Name" type="xs:string">
+                          <xs:annotation>
+                            <xs:documentation>Name of the property retrieved from Fdo Provider</xs:documentation>
+                          </xs:annotation>
+                        </xs:element>
+                        <xs:element name="LocalizedName" type="xs:string" minOccurs="0">
+                          <xs:annotation>
+                            <xs:documentation>Properties can have localized names for displaying them in UI. Provider will inform us what that string should be.</xs:documentation>
+                          </xs:annotation>
+                        </xs:element>
+                        <xs:element name="DefaultValue" type="xs:string" minOccurs="0">
+                          <xs:annotation>
+                            <xs:documentation>This is a default value. This will be one of the values listed in  Value element</xs:documentation>
+                          </xs:annotation>
+                        </xs:element>
+                        <xs:element name="Value" type="xs:string" minOccurs="0" maxOccurs="unbounded">
+                          <xs:annotation>
+                            <xs:documentation>A property can have more than one alternative values to choose from. All possible values will be listed here.</xs:documentation>
+                          </xs:annotation>
+                        </xs:element>
+                      </xs:sequence>
+                      <xs:attribute name="Required" type="xs:boolean" use="required"/>
+                      <xs:attribute name="Protected" type="xs:boolean" use="required"/>
+                      <xs:attribute name="Enumerable" type="xs:boolean" use="required"/>
+                    </xs:complexType>
+                  </xs:element>
+                </xs:sequence>
+              </xs:complexType>
+            </xs:element>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+</xs:schema>

Added: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/TileSetDefinition-3.0.0.xsd
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/TileSetDefinition-3.0.0.xsd	                        (rev 0)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schemas/TileSetDefinition-3.0.0.xsd	2014-12-29 13:18:49 UTC (rev 8482)
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+  <xs:include schemaLocation="PlatformCommon-1.0.0.xsd"/>
+  <xs:element name="TileSetDefinition">
+    <xs:annotation>
+      <xs:documentation>Defines a tile cache</xs:documentation>
+    </xs:annotation>
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="TileStoreParameters" type="TileStoreParametersType">
+           <xs:annotation>
+            <xs:documentation>Defines the parameters to access and describe the tile cache</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="Extents" type="Box2DType">
+          <xs:annotation>
+            <xs:documentation>A bounding box around the area of the tile cache</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="BaseMapLayerGroup" type="BaseMapLayerGroupCommonType" minOccurs="1" maxOccurs="unbounded">
+          <xs:annotation>
+            <xs:documentation>A group of layers that is used to compose a tiled layer in the HTML viewer</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:complexType name="TileStoreParametersType">
+    <xs:annotation>
+      <xs:documentation>TileStoreParameters defines the parameters of this tile cache.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="TileProvider" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The tile image provider</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Parameter" type="NameValuePairType" minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>Collection of name value pairs for connecting to the tile image provider</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="NameValuePairType">
+    <xs:annotation>
+      <xs:documentation>A type describing name and value pairs</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Text for the name of parameter</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Value" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Text for value of parameter</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="Box2DType">
+    <xs:annotation>
+      <xs:documentation>Box2D encapsulates the the coordinates of a box in 2-D space</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="MinX" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Minimum x-coordinate</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MaxX" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Maximum x-coordinate</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MinY" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Minimum y-coordinate</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="MaxY" type="xs:double">
+        <xs:annotation>
+          <xs:documentation>Maximum y-coordinate</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="BaseMapLayerType">
+    <xs:annotation>
+      <xs:documentation>BaseMapLayerType encapsulates the properties of a BaseMapLayer.</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Name of the MapLayer</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ResourceId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>ResourceId of the MapLayer</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Selectable" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the Layer can be selected</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ShowInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the Layer should be shown in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Label to be shown for the Layer in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExpandInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the Layer should be expanded in the legend.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="MapLayerGroupCommonType">
+    <xs:annotation>
+      <xs:documentation>MapLayerGroupCommonType is a common subclass of MapLayerGroupCommonType and BaseMapLayerGroupCommonType</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="Name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>The name of this LayerGroup</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="Visible" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether this group's visiblity should be visible or not when it first comes into range</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ShowInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the LayerGroup should be shown in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="ExpandInLegend" type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation>Whether or not the LayerGroup should be initially expanded in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="LegendLabel" type="xs:string">
+        <xs:annotation>
+          <xs:documentation>Label to be shown for the LayerGroup in the legend</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="BaseMapLayerGroupCommonType">
+    <xs:annotation>
+      <xs:documentation>BaseMapLayerGroupCommonType encapsulates the properties of a BaseMapLayerGroup. It extends MapLayerGroupCommonType by holding the layers in the group.  The base map layer groups defines what layers are used to render a tile set in the HTML viewer.</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="MapLayerGroupCommonType">
+        <xs:sequence>
+          <xs:element name="BaseMapLayer" type="BaseMapLayerType" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>The layers that are part of this group. The order of the layers represents the draw order, layers first is the list are drawn over top of layers later in the list.</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+</xs:schema>
\ No newline at end of file

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/HttpServerConnection.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/HttpServerConnection.cs	2014-12-29 10:11:17 UTC (rev 8481)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/HttpServerConnection.cs	2014-12-29 13:18:49 UTC (rev 8482)
@@ -1984,22 +1984,42 @@
 
         internal 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))
+            if (m_siteVersion >= new Version(3, 0))
             {
-                var info = this.DeserializeObject<OSGeo.MapGuide.ObjectModels.RuntimeMap.v2_6_0.RuntimeMap>(s);
-                return info;
+                var req = m_reqBuilder.DescribeRuntimeMap(mapName, requestedFeatures, iconsPerScaleRange, iconFormat, iconWidth, iconHeight, "3.0.0");
+                using (var s = this.OpenRead(req))
+                {
+                    return this.DeserializeObject<OSGeo.MapGuide.ObjectModels.RuntimeMap.v3_0_0.RuntimeMap>(s);
+                }
             }
+            else
+            {
+                var req = m_reqBuilder.DescribeRuntimeMap(mapName, requestedFeatures, iconsPerScaleRange, iconFormat, iconWidth, iconHeight);
+                using (var s = this.OpenRead(req))
+                {
+                    return this.DeserializeObject<OSGeo.MapGuide.ObjectModels.RuntimeMap.v2_6_0.RuntimeMap>(s);
+                }
+            }
         }
 
         internal 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))
+            if (m_siteVersion >= new Version(3, 0))
             {
-                var info = this.DeserializeObject<OSGeo.MapGuide.ObjectModels.RuntimeMap.v2_6_0.RuntimeMap>(s);
-                return info;
+                var req = m_reqBuilder.CreateRuntimeMap(mapDefinition, targetMapName, requestedFeatures, iconsPerScaleRange, iconFormat, iconWidth, iconHeight, "3.0.0");
+                using (var s = this.OpenRead(req))
+                {
+                    return this.DeserializeObject<OSGeo.MapGuide.ObjectModels.RuntimeMap.v3_0_0.RuntimeMap>(s);
+                }
             }
+            else
+            {
+                var req = m_reqBuilder.CreateRuntimeMap(mapDefinition, targetMapName, requestedFeatures, iconsPerScaleRange, iconFormat, iconWidth, iconHeight);
+                using (var s = this.OpenRead(req))
+                {
+                    return this.DeserializeObject<OSGeo.MapGuide.ObjectModels.RuntimeMap.v2_6_0.RuntimeMap>(s);
+                }
+            }
         }
 
         public override Resource.Preview.IResourcePreviewUrlGenerator GetPreviewUrlGenerator()

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/RequestBuilder.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/RequestBuilder.cs	2014-12-29 10:11:17 UTC (rev 8481)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Http/RequestBuilder.cs	2014-12-29 13:18:49 UTC (rev 8482)
@@ -1753,11 +1753,11 @@
             return m_hosturi + "?" + EncodeParameters(param);
         }
 
-        internal string DescribeRuntimeMap(string mapName, int requestedFeatures, int iconsPerScaleRange, string iconFormat, int iconWidth, int iconHeight)
+        internal string DescribeRuntimeMap(string mapName, int requestedFeatures, int iconsPerScaleRange, string iconFormat, int iconWidth, int iconHeight, string targetVersion = "2.6.0")
         {
             NameValueCollection param = new NameValueCollection();
             param.Add("OPERATION", "DESCRIBERUNTIMEMAP");
-            param.Add("VERSION", "2.6.0");
+            param.Add("VERSION", targetVersion);
             param.Add("SESSION", m_sessionID);
             param.Add("MAPNAME", mapName);
             param.Add("REQUESTEDFEATURES", requestedFeatures.ToString());
@@ -1769,11 +1769,11 @@
             return m_hosturi + "?" + EncodeParameters(param);
         }
 
-        internal string CreateRuntimeMap(string mapDefinition, string targetMapName, int requestedFeatures, int iconsPerScaleRange, string iconFormat, int iconWidth, int iconHeight)
+        internal string CreateRuntimeMap(string mapDefinition, string targetMapName, int requestedFeatures, int iconsPerScaleRange, string iconFormat, int iconWidth, int iconHeight, string targetVersion = "2.6.0")
         {
             NameValueCollection param = new NameValueCollection();
             param.Add("OPERATION", "CREATERUNTIMEMAP");
-            param.Add("VERSION", "2.6.0");
+            param.Add("VERSION", targetVersion);
             param.Add("SESSION", m_sessionID);
             param.Add("MAPDEFINITION", mapDefinition);
             param.Add("TARGETMAPNAME", targetMapName);

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/OSGeo.MapGuide.ObjectModels.csproj
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/OSGeo.MapGuide.ObjectModels.csproj	2014-12-29 10:11:17 UTC (rev 8481)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/OSGeo.MapGuide.ObjectModels.csproj	2014-12-29 13:18:49 UTC (rev 8482)
@@ -140,6 +140,9 @@
     <Compile Include="..\Generated\RuntimeMap-2.6.0.designer.cs">
       <Link>RuntimeMap\v2_6_0\RuntimeMap-2.6.0.designer.cs</Link>
     </Compile>
+    <Compile Include="..\Generated\RuntimeMap-3.0.0.designer.cs">
+      <Link>RuntimeMap\v3_0_0\RuntimeMap-3.0.0.designer.cs</Link>
+    </Compile>
     <Compile Include="..\Generated\SiteInformation-1.0.0.designer.cs">
       <Link>Common\SiteInformation-1.0.0.designer.cs</Link>
     </Compile>
@@ -259,6 +262,7 @@
     <Compile Include="ResourceTypes.cs" />
     <Compile Include="RuntimeMap\RuntimeMapInterfaces.cs" />
     <Compile Include="RuntimeMap\v2_6_0\RuntimeMapImpl.cs" />
+    <Compile Include="RuntimeMap\v3_0_0\RuntimeMapImpl.cs" />
     <Compile Include="Strings.Designer.cs">
       <AutoGen>True</AutoGen>
       <DesignTime>True</DesignTime>

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/RuntimeMap/RuntimeMapInterfaces.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/RuntimeMap/RuntimeMapInterfaces.cs	2014-12-29 10:11:17 UTC (rev 8481)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/RuntimeMap/RuntimeMapInterfaces.cs	2014-12-29 13:18:49 UTC (rev 8482)
@@ -104,6 +104,18 @@
     }
 
     /// <summary>
+    /// Describes the structure of a Runtime Map. Based on RuntimeMap v3.0.0 schema
+    /// </summary>
+    public interface IRuntimeMapInfo2 : IRuntimeMapInfo
+    {
+        string TileSetDefinition { get; set; }
+
+        int? TileWidth { get; set; }
+
+        int? TileHeight { get; set; }
+    }
+
+    /// <summary>
     /// Represents coordinate system information for a Runtime Map
     /// </summary>
     public interface ICoordinateSystemInfo

Added: trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/RuntimeMap/v3_0_0/RuntimeMapImpl.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/RuntimeMap/v3_0_0/RuntimeMapImpl.cs	                        (rev 0)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ObjectModels/RuntimeMap/v3_0_0/RuntimeMapImpl.cs	2014-12-29 13:18:49 UTC (rev 8482)
@@ -0,0 +1,397 @@
+#region Disclaimer / License
+
+// Copyright (C) 2014, 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 Disclaimer / License
+
+using OSGeo.MapGuide.ObjectModels.Common;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+
+namespace OSGeo.MapGuide.ObjectModels.RuntimeMap.v3_0_0
+{
+    partial class RuntimeMap : IRuntimeMapInfo2
+    {
+        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
+            {
+                return this.DisplayDpi;
+            }
+        }
+
+        string IRuntimeMapInfo.IconMimeType
+        {
+            get { return this.IconMimeType; }
+        }
+
+        ICoordinateSystemInfo IRuntimeMapInfo.CoordinateSystem
+        {
+            get { return this.CoordinateSystem; }
+        }
+
+        IEnvelope IRuntimeMapInfo.Extents
+        {
+            get
+            {
+                return ObjectFactory.CreateEnvelope(this.Extents.LowerLeftCoordinate.X,
+                                                    this.Extents.LowerLeftCoordinate.Y,
+                                                    this.Extents.UpperRightCoordinate.X,
+                                                    this.Extents.UpperRightCoordinate.Y);
+            }
+        }
+
+        private ReadOnlyLayerCollection _roLayers;
+
+        IRuntimeLayerInfoCollection IRuntimeMapInfo.Layers
+        {
+            get
+            {
+                if (this.Layer == null)
+                    return null;
+
+                if (_roLayers == null)
+                    _roLayers = new ReadOnlyLayerCollection(this.Layer);
+
+                return _roLayers;
+            }
+        }
+
+        private 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();
+            }
+        }
+
+        int? IRuntimeMapInfo2.TileWidth
+        {
+            get
+            {
+                int value;
+                if (int.TryParse(this.TileWidth, out value))
+                    return value;
+                return null;
+            }
+            set
+            {
+                if (value.HasValue)
+                    this.TileWidth = value.Value.ToString(CultureInfo.InvariantCulture);
+                else
+                    this.TileWidth = null;
+            }
+        }
+
+        int? IRuntimeMapInfo2.TileHeight
+        {
+            get
+            {
+                int value;
+                if (int.TryParse(this.TileHeight, out value))
+                    return value;
+                return null;
+            }
+            set
+            {
+                if (value.HasValue)
+                    this.TileHeight = value.Value.ToString(CultureInfo.InvariantCulture);
+                else
+                    this.TileHeight = null;
+            }
+        }
+    }
+
+    //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]; }
+        }
+
+        private 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; }
+        }
+
+        private 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
+    {
+        private 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); }
+        }
+
+        private RuleInfoCollection _roRules;
+
+        /// <summary>
+        /// Gets the rules in this feature style
+        /// </summary>
+        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
+    {
+    }
+}



More information about the mapguide-commits mailing list