]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/XMLSchema/FrameworkDataElements.xsd
Added the OPTIONAL NonProcessedFiles element to MSA section. Sub-element is Filename...
[mirror_edk2.git] / Tools / XMLSchema / FrameworkDataElements.xsd
index 5d9966d740e5deef5f27dc5c1516dc90d3d6e739..f0adef7780818054529cf9d12ac07d8a7fc162df 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns="http://www.TianoCore.org/2006/Edk2.0" targetNamespace="http://www.TianoCore.org/2006/Edk2.0">\r
-    <!--\r
+  <!--\r
     Filename: FrameworkDataElements.xsd\r
     \r
     Copyright (c) 2006, Intel Corp.\r
     WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
     \r
   -->\r
+  <xs:annotation>\r
+    <xs:documentation xml:lang="en"> This schema defines EFI and Framework Data Elements </xs:documentation>\r
+  </xs:annotation>\r
+  <xs:include schemaLocation="NamingConvention.xsd"/>\r
+  <xs:include schemaLocation="FrameworkDataTypes.xsd"/>\r
+  <xs:include schemaLocation="FrameworkPlatformDataTypes.xsd"/>\r
+  <xs:include schemaLocation="FrameworkDataAttributes.xsd"/>\r
+  <xs:element name="Abstract" type="Sentence">\r
     <xs:annotation>\r
-        <xs:documentation xml:lang="en"> This schema defines EFI and Framework Data Elements </xs:documentation>\r
+      <xs:documentation xml:lang="en">Abstract is valid for all Description Files</xs:documentation>\r
+      <xs:documentation xml:lang="en">This section is required. This is a single sentence to describe the module and will be used in sample files as the abstract data in the header comment section.</xs:documentation>\r
     </xs:annotation>\r
-    <xs:include schemaLocation="NamingConvention.xsd"/>\r
-    <xs:include schemaLocation="FrameworkDataTypes.xsd"/>\r
-    <xs:include schemaLocation="FrameworkPlatformDataTypes.xsd"/>\r
-    <xs:include schemaLocation="FrameworkDataAttributes.xsd"/>\r
-    <xs:element name="Abstract" type="Sentence">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Abstract is valid for all Description Files</xs:documentation>\r
-            <xs:documentation xml:lang="en">This section is required. This is a single sentence to describe the module and will be used in sample files as the abstract data in the header comment section.</xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="AntCmd">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a sub-element of AntTask</xs:documentation>\r
-            <xs:documentation xml:lang="en">This is an ant command that will be inserted into a biuld sequence. Since ant commands are valid XML statements, special care must be taken to use the correct tokens for reserved words and escape quote characters.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="0" name="Id" type="xs:int"/>\r
-                <xs:element name="ExecutionOrder">\r
-                    <xs:simpleType>\r
-                        <xs:list itemType="xs:normalizedString"/>\r
-                    </xs:simpleType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="AntTask">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a sub-element of UserDefinedAntTasks</xs:documentation>\r
-            <xs:documentation xml:lang="en">Define a file that contains one or more ant tasks that are to be added into or replacing of sequences of build steps. These files will be called using the ant-call task on a file name. These files must be valid apache-ant formatted task files.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:choice>\r
-                <xs:element ref="AntCmd"/>\r
-                <xs:element ref="Filename"/>\r
-            </xs:choice>\r
-            <xs:attribute name="Id" type="xs:int" use="required"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="BaseName">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">BaseName is valid for all Description Files</xs:documentation>\r
-            <xs:documentation xml:lang="en"> We need to be able to permit different attributes for every basename </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="BaseNameConvention">\r
-                    <xs:attributeGroup ref="BaseNameAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="BootModes">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">BootModes is valid for all Description Files</xs:documentation>\r
-            <xs:documentation xml:lang="en">This is a list of BootModes Supported by the Module</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="BootMode">\r
-                    <xs:complexType>\r
-                        <xs:attributeGroup ref="BootModeAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="BuildOptions">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">BuildOptions is valid for MBD and FPD files.</xs:documentation>\r
-            <xs:documentation xml:lang="en">Specific Build Options, by Tool Chain, than should be applied, overriding any global options</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="AntTask">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a sub-element of UserDefinedAntTasks</xs:documentation>\r
+      <xs:documentation xml:lang="en">Define a file that contains one or more ant tasks that are to be added into or replacing of sequences of build steps. These files will be called using the ant-call task on a file name. These files must be valid apache-ant formatted task files.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="AntCmdOptions" type="xs:normalizedString"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="Filename" type="PathAndFilename"/>\r
+      </xs:sequence>\r
+      <xs:attribute name="Id" type="xs:int" use="required"/>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="BootModes">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">BootModes is valid for all Description Files</xs:documentation>\r
+      <xs:documentation xml:lang="en">This is a list of BootModes Supported by the Module</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="BootMode">\r
+          <xs:complexType>\r
+            <xs:sequence minOccurs="0">\r
+              <xs:element name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="BootModeAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="BuildOptions">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">BuildOptions is valid for FPD files.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="0" maxOccurs="1" ref="UserDefinedAntTasks"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" ref="Options"/>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="UserExtensions"/>\r
+        <!-- The following sections are legacy and will be removed -->\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="Ffs">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="UserDefinedAntTasks"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="ImageEntryPoint"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="OutputDirectory"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Ffs"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Sections"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Filenames"/>\r
-                <xs:element ref="Options" minOccurs="0" maxOccurs="1"/>\r
-                <xs:sequence minOccurs="0">\r
-                    <xs:element minOccurs="0" maxOccurs="unbounded" name="Option">\r
-                        <xs:complexType>\r
-                            <xs:simpleContent>\r
-                                <xs:extension base="xs:normalizedString">\r
-                                    <xs:attributeGroup ref="OptionAttributes"/>\r
-                                </xs:extension>\r
-                            </xs:simpleContent>\r
-                        </xs:complexType>\r
+              <xs:element minOccurs="0" maxOccurs="unbounded" name="Attribute">\r
+                <xs:complexType>\r
+                  <xs:attribute name="Name" type="C_NameType"/>\r
+                  <xs:attribute name="Value" type="xs:string"/>\r
+                </xs:complexType>\r
+              </xs:element>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="Sections">\r
+                <xs:complexType>\r
+                  <xs:sequence minOccurs="1">\r
+                    <xs:element name="Section" minOccurs="0" maxOccurs="unbounded">\r
+                      <xs:complexType>\r
+                        <xs:sequence>\r
+                          <xs:element ref=" Filenames " minOccurs="0"/>\r
+                          <xs:element name="Args" type=" ArgsType " minOccurs="0"/>\r
+                          <xs:element name="OutFile" type=" FileNameConvention " minOccurs="0"/>\r
+                          <xs:element name="OutputFileExtension" type=" xs:string " minOccurs="0"/>\r
+                          <xs:element name="ToolName" type=" ToolType " minOccurs="0"/>\r
+                        </xs:sequence>\r
+                        <xs:attributeGroup ref=" SectionsAttributes "/>\r
+                      </xs:complexType>\r
                     </xs:element>\r
-                    <!-- Arch element should be removed - use Arch attributes to the above instead. -->\r
-                    <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                        <xs:complexType>\r
-                            <xs:sequence minOccurs="1">\r
-                                <xs:element maxOccurs="unbounded" name="Option">\r
-                                    <xs:complexType>\r
-                                        <xs:simpleContent>\r
-                                            <xs:extension base="xs:normalizedString">\r
-                                                <xs:attributeGroup ref="OptionAttributes"/>\r
-                                            </xs:extension>\r
-                                        </xs:simpleContent>\r
-                                    </xs:complexType>\r
-                                </xs:element>\r
-                            </xs:sequence>\r
-                            <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                        </xs:complexType>\r
+                    <xs:element name="Sections" minOccurs="0" maxOccurs="unbounded">\r
+                      <xs:complexType>\r
+                        <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
+                          <xs:element name="Section">\r
+                            <xs:complexType>\r
+                              <xs:sequence>\r
+                                <xs:element ref=" Filenames " minOccurs="0"/>\r
+                                <xs:element name="Args" type=" ArgsType " minOccurs="0"/>\r
+                                <xs:element name="OutFile" type=" FileNameConvention " minOccurs="0"/>\r
+                                <xs:element name="OutputFileExtension" type=" xs:string " minOccurs="0"/>\r
+                                <xs:element name="ToolName" type=" ToolType " minOccurs="0"/>\r
+                              </xs:sequence>\r
+                              <xs:attributeGroup ref="SectionsAttributes"/>\r
+                            </xs:complexType>\r
+                          </xs:element>\r
+                        </xs:sequence>\r
+                        <xs:attributeGroup ref=" SectionsAttributes "/>\r
+                      </xs:complexType>\r
                     </xs:element>\r
-                </xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="UserExtensions"/>                \r
-            </xs:sequence>\r
-            <xs:attribute name="ToolChain" type="ToolChains"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Options">\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" ref="Option"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Option">\r
-        <!-- This element is used to store flags from the Tools -->\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="xs:normalizedString">\r
-                    <xs:attributeGroup ref="OptionAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>    \r
-    <xs:element name="ModuleBuildOptions">\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##local"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ModuleSaBuildOptions">\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="FvBinding" type="FfsNameType"/>\r
-                <!-- The FfsFileNameGuid allows the Platform Integrator to specify a GUID for the FFS File Name GUID -->\r
-                <xs:element minOccurs="0" maxOccurs="1" name="FfsFileNameGuid" type="GuidType"/>\r
-                <!-- If binding is specified, you MUST specify the FfsFormatKey -->\r
-                <xs:element minOccurs="0" maxOccurs="1" name="FfsFormatKey" type="FfsNameType"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Options"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ModuleDefinitions">\r
-        <xs:complexType>\r
+                  </xs:sequence>\r
+                  <xs:attributeGroup ref=" SectionsAttributes "/>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+            <xs:attribute name="FfsKey" type="KeywordType" use="optional"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Copyright" type="Paragraph"/>\r
+  <xs:element name="DataHubs">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a list of DataHubRecord elements.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="DataHubRecord">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="SupportedArchitectures" type="ArchListType"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="BinaryModule" type="xs:boolean" default="false"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="OutputFileBasename" type="FileNameConvention"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>    \r
-    <xs:element name="C_Name" type="C_Name">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">C_Name is valid for all Description Files</xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="ComponentName" type="C_Name">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">ComponentName is valid for all Description Files</xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="ComponentType" type="FrameworkComponentTypes">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the valid Framework Component Type</xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="ConditionalExpression">\r
-        <!-- DO NOT USE remove and use FeatureFlag instead -->\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">A conditional expression that must be evaluated to determine whether a feature is implemented or not. The expression must be either numeric, string or boolean.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="DataHubCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="DataHubAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="DefaultValue">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">The default setting of a PCD entry.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:simpleContent>\r
+        <xs:extension base="xs:normalizedString"/>\r
+      </xs:simpleContent>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Description" type="Paragraph">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This section is required for new modules and libraries and must contain more information than the Abstract.</xs:documentation>\r
+    </xs:annotation>\r
+  </xs:element>\r
+  <xs:element name="DynamicPcdBuildDefinitions">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Child of Framework Platform Description (FPD)</xs:documentation>\r
+      <xs:documentation xml:lang="en">FPD uses this PCD information for Dynamic PCDs Only</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdBuildData">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="Condition" type="xs:normalizedString"/>\r
-            </xs:sequence>\r
-            <xs:attribute name="ConditionalTarget" type="ConditionalTarget" use="optional"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Constructor" type="C_Name"/>\r
-    <xs:element name="Copyright" type="Sentence"/>\r
-    <xs:element name="Created" type="DateType"/>\r
-    <xs:element name="CreatedDate" type="DateType"/>\r
-    <xs:element name="CreatedBy" type="UserName"/>\r
-    <xs:element name="DataHubs">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a list of DataHubRecord elements.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="DataHubRecord">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="C_NameType">\r
-                                <xs:attributeGroup ref="DataHubAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- Remove Arch and use Arch Attribute for DataHubRecord instead. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element name="DataHubRecord">\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="xs:normalizedString">\r
-                                            <xs:attributeGroup ref="DataHubAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="DatabaseName">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">The Name of the Database, "FrameworkDatabase"</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="BaseNameConvention">\r
-                    <xs:attributeGroup ref="BaseNameAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="DefaultValue">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">The default setting of a PCD entry.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="xs:normalizedString"/>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Description" type="Paragraph">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This section is required for new modules and libraries and must contain more information than the Abstract.</xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="Destructor" type="C_Name"/>\r
-    <xs:element name="DriverBinding" type="C_Name"/>\r
-    <xs:element name="DriverConfig" type="C_Name"/>\r
-    <xs:element name="DriverDiag" type="C_Name"/>\r
-    <xs:element name="E-Mail" type="E-Mail"/>\r
-    <xs:element name="Events">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a list of MSA Events</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuidCName" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize" type="DatumSizeLimitation"/>\r
+              <xs:element minOccurs="1" maxOccurs="unbounded" name="SkuInfo">\r
+                <xs:complexType>\r
+                  <xs:sequence>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="SkuId" type="xs:nonNegativeInteger"/>\r
+                    <xs:choice>\r
+                      <xs:group minOccurs="0" maxOccurs="1" ref="HiiEnable"/>\r
+                      <xs:group minOccurs="0" maxOccurs="1" ref="VpdEnable"/>\r
+                      <xs:group minOccurs="0" maxOccurs="1" ref="DefaultGroup"/>\r
+                    </xs:choice>\r
+                  </xs:sequence>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="DynamicBuildPcdAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Events">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a list of MSA Events</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="CreateEvents">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="CreateEvents">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                            <xs:element name="Event">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:choice>\r
-                                            <xs:element minOccurs="0" maxOccurs="1" name="GuidC_Name" type="C_NameType"/>\r
-                                            <!-- DO NOT USE, removing C_Name in final -->\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="C_Name"/>\r
-                                        </xs:choice>\r
-                                        <!-- DO NOT USE, removing Guid and GuidValue from Final -->\r
-                                        <xs:choice minOccurs="0">\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                                        </xs:choice>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="EventAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                            <!-- Remove Arch Section and use Arch Attribute instead in Event. -->\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element name="Event">\r
-                                            <xs:complexType>\r
-                                                <xs:sequence>\r
-                                                    <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                                                    <xs:choice minOccurs="0">\r
-                                                        <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                                        <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                                                    </xs:choice>\r
-                                                </xs:sequence>\r
-                                                <xs:attributeGroup ref="EventAttributes"/>\r
-                                            </xs:complexType>\r
-                                        </xs:element>\r
-                                    </xs:sequence>\r
-                                    <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="SignalEvents">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Module has an event that is waiting to be signaled. Event is named by GUID.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                            <xs:element name="Event">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:choice>\r
-                                            <xs:element minOccurs="0" maxOccurs="1" name="GuidC_Name" type="C_NameType"/>\r
-                                            <!-- DO NOT USE, removing C_Name in final -->\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="C_Name"/>\r
-                                        </xs:choice>\r
-                                        <!-- DO NOT USE, removing Guid and GuidValue from Final -->\r
-                                        <xs:choice minOccurs="0">\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                                        </xs:choice>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="EventAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                            <!-- Remove Arch and use Arch attribute in Event above -->\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element name="Event">\r
-                                            <xs:complexType>\r
-                                                <xs:sequence>\r
-                                                    <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                                                </xs:sequence>\r
-                                                <xs:attributeGroup ref="EventAttributes"/>\r
-                                            </xs:complexType>\r
-                                        </xs:element>\r
-                                    </xs:sequence>\r
-                                    <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ExitBootServicesCallBack" type="C_Name"/>\r
-    <xs:element name="Externs">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a child of MSA files.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="1" name="PcdIsDriver" type="PcdDriverTypes"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Specification" type="Sentence"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Extern">\r
-                    <xs:complexType>\r
-                        <xs:choice minOccurs="1">\r
-                            <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Driver Module</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="ModuleEntryPoint"/>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="ModuleUnloadImage"/>\r
-                            </xs:sequence>\r
-                            <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Library Module</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Constructor"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Destructor"/>\r
-                            </xs:sequence>\r
-                            <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Allow multiple entries for DriverBinding, ComponentName, DriverConfig and DriverDiag elements. For ComponentName, DriverConfig and/or DriverDiag - you must have a 1:1 mapping to DriverBinding if the element is defined.</xs:documentation>\r
-                                    <xs:documentation xml:lang="en">Permit User Defined Extern Tags</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="DriverBinding"/>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="ComponentName"/>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="DriverConfig"/>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="DriverDiag"/>\r
-                            </xs:sequence>\r
-                            <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en"> Module Call Backs</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="SetVirtualAddressMapCallBack"/>\r
-                                <xs:element minOccurs="0" maxOccurs="unbounded" ref="ExitBootServicesCallBack"/>\r
-                            </xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="UserDefined" type="C_Name"/>\r
-                        </xs:choice>\r
-                        <xs:attributeGroup ref="ExternAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- Remove Arch and use Arch Attribute in above. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element name="Extern">\r
-                                <xs:complexType>\r
-                                    <xs:choice minOccurs="1">\r
-                                        <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en">Driver Module</xs:documentation>\r
-                                            </xs:annotation>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="ModuleEntryPoint"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="ModuleUnloadImage"/>\r
-                                        </xs:sequence>\r
-                                        <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en">Library Module</xs:documentation>\r
-                                            </xs:annotation>\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="Constructor"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="1" ref="Destructor"/>\r
-                                        </xs:sequence>\r
-                                        <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en">Allow multiple entries for DriverBinding, ComponentName, DriverConfig and DriverDiag elements. For ComponentName, DriverConfig and/or DriverDiag - you must have a 1:1 mapping to DriverBinding if the element is defined.</xs:documentation>\r
-                                                <xs:documentation xml:lang="en">Permit User Defined Extern Tags</xs:documentation>\r
-                                            </xs:annotation>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="DriverBinding"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="ComponentName"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="DriverConfig"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="DriverDiag"/>\r
-                                        </xs:sequence>\r
-                                        <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en"> Module Call Backs</xs:documentation>\r
-                                            </xs:annotation>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="SetVirtualAddressMapCallBack"/>\r
-                                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="ExitBootServicesCallBack"/>\r
-                                        </xs:sequence>\r
-                                        <xs:element minOccurs="0" maxOccurs="unbounded" name="UserDefined" type="C_Name"/>\r
-                                    </xs:choice>\r
-                                    <xs:attributeGroup ref="ExternAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Ffs">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Define the FFS File attributes within a sections and containing sections information</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="unbounded" name="EventTypes">\r
+                <xs:complexType>\r
+                  <xs:sequence>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="EventType" type="EventTypes"/>\r
+                    <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+                  </xs:sequence>\r
+                  <xs:attributeGroup ref="EventAttributes"/>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+          </xs:complexType>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="SignalEvents">\r
+          <xs:annotation>\r
+            <xs:documentation xml:lang="en">Module has an event that is waiting to be signaled. Event is named by GUID.</xs:documentation>\r
+          </xs:annotation>\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Attribute">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Name" type="C_Name"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Value" type="C_Name"/>\r
-                        </xs:sequence>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Sections"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Filename">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the valid content of a filename This should extend PathAndFilename - Variable names not allowed here!</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="PathAndFilename">\r
-                    <xs:attributeGroup ref="FilenameAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Filenames">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a list of Filenames</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Filename"/>\r
-                <!-- DO NOT USE Arch remove it element and use Arch Attribute to Filename instead -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1">\r
-                            <xs:element maxOccurs="unbounded" ref="Filename"/>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Formsets">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the list of a Formset elements</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="Formset">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="C_Name">\r
-                                <xs:attributeGroup ref="FormsetAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE! removing Arch element, use Arch attribute in Formset instead. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element name="Formset">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Describe the valid content of a Formset</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="C_Name">\r
-                                            <xs:attributeGroup ref="FormsetAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Guid">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the valid content of a GUID</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="GuidType">\r
-                    <xs:attributeGroup ref="GuidAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="GuidDeclarations">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="unbounded" name="EventTypes">\r
+                <xs:complexType>\r
+                  <xs:sequence>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="EventType" type="EventTypes"/>\r
+                    <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+                  </xs:sequence>\r
+                  <xs:attributeGroup ref="EventAttributes"/>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Externs">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a child of MSA files.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence minOccurs="1">\r
+        <xs:element minOccurs="0" maxOccurs="1" name="PcdIsDriver" type="PcdDriverTypes"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="TianoR8FlashMap_h" type="xs:boolean" default="false"/>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="Specification" type="Sentence"/>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="Extern">\r
+          <xs:complexType>\r
+            <xs:choice minOccurs="1" maxOccurs="1">\r
+              <xs:sequence minOccurs="0" maxOccurs="1">\r
+                <xs:annotation>\r
+                  <xs:documentation xml:lang="en">Driver Module</xs:documentation>\r
+                </xs:annotation>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="ModuleEntryPoint" type="C_NameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="ModuleUnloadImage" type="C_NameType"/>\r
+              </xs:sequence>\r
+              <xs:sequence minOccurs="0" maxOccurs="1">\r
+                <xs:annotation>\r
+                  <xs:documentation xml:lang="en">Library Module</xs:documentation>\r
+                </xs:annotation>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="Constructor" type="C_NameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="Destructor" type="C_NameType"/>\r
+              </xs:sequence>\r
+              <xs:sequence minOccurs="0" maxOccurs="1">\r
+                <xs:annotation>\r
+                  <xs:documentation xml:lang="en">Allow multiple entries for DriverBinding, ComponentName, DriverConfig and DriverDiag elements. For ComponentName, DriverConfig and/or DriverDiag - you must have a 1:1 mapping to DriverBinding if the element is defined.</xs:documentation>\r
+                  <xs:documentation xml:lang="en">Permit User Defined Extern Tags</xs:documentation>\r
+                </xs:annotation>\r
+                <xs:element minOccurs="1" maxOccurs="1" name="DriverBinding" type="C_NameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="ComponentName" type="C_NameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="DriverConfig" type="C_NameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="DriverDiag" type="C_NameType"/>\r
+              </xs:sequence>\r
+              <xs:sequence minOccurs="0" maxOccurs="1">\r
+                <xs:annotation>\r
+                  <xs:documentation xml:lang="en"> Module Call Backs</xs:documentation>\r
+                </xs:annotation>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="SetVirtualAddressMapCallBack" type="C_NameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="ExitBootServicesCallBack" type="C_NameType"/>\r
+              </xs:sequence>\r
+            </xs:choice>\r
+            <xs:attributeGroup ref="ExternAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Filename">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Describe the valid content of a filename This should extend PathAndFilename - Variable names not allowed here!</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:simpleContent>\r
+        <xs:extension base="PathAndFilename">\r
+          <xs:attributeGroup ref="FilenameAttributes"/>\r
+        </xs:extension>\r
+      </xs:simpleContent>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Filenames">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a list of Filenames</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence minOccurs="1">\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="Filename"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="GuidDeclarations">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:choice minOccurs="1">\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                            </xs:choice>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="GuidDeclarationAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Guids">\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="GuidCName">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Describe the valid content of a GUID element in and MSA file.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="C_NameType">\r
-                                <xs:attributeGroup ref="GuidAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>                \r
-                <xs:element name="GuidEntry">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Describe the valid content of a GUID element in and MSA file.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="0" maxOccurs="1">\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                            <!-- DO NOT USE removing GuidValue from use -->\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                            <!-- DO NOT USE removing FeatureFlag from use, use FeatureFlag Attribute instead -->\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="FeatureFlag" type="C_Name"/>\r
-                            <!-- DO NOT USE remove ConditionalExpression and use FeatureFlag instead -->\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="ConditionalExpression"/>\r
-                            <!-- DO NOT USE, remove DefaultValue from use -->\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="DefaultValue"/>\r
-                            <!-- DO NOT USE, remove HelpText from use -->\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="GuidAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE Arch, Arch should be removed and the attribute Arch should be used in the above. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element name="GuidEntry">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Describe the valid content of a PCD GUID element</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:complexType>\r
-                                    <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                        <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="unbounded" name="FeatureFlag" type="C_Name"/>\r
-                                        <!-- DO NOT USE remove ConditionalExpression and use FeatureFlag instead -->\r
-                                        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ConditionalExpression"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" ref="DefaultValue"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="GuidAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="GuidValue" type="GuidType"/>\r
-    <xs:element name="HelpText" type="Paragraph"/>\r
-    <xs:element name="HiiPackages">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the list of a HiiPackage elements</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="HiiPackage">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="C_NameType">\r
-                                <xs:attributeGroup ref="HiiPackageAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Hobs">\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="Hob">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:choice>\r
-                                <!-- Remove Name from use -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:normalizedString"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" name="GuidC_Name" type="C_NameType"/>\r
-                            </xs:choice>\r
-                            <!-- Remove C_Name from use -->\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="C_Name"/>\r
-                            <!-- Remove Guid and GuidValue from use -->\r
-                            <xs:choice minOccurs="0">\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                            </xs:choice>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="HobAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE Arch, use attribute Arch for Hob in above -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element name="Hob">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:normalizedString"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" ref="C_Name"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="HobAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ImageEntryPoint" type="C_Name"/>\r
-    <xs:element name="IncludeHeader">\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="PathAndFilename">\r
-                    <!-- Need to use IncludeHeaderAttributes in final -->\r
-                    <xs:attributeGroup ref="IncludeAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Includes">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">One or More Package Names or Arch sections is required. Includes are not files, but paths to where header files are located.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="PackageName"/>\r
-                <!-- remove Arch element, start using the Arch attribute for the PackageName element above. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1">\r
-                            <xs:element maxOccurs="unbounded" ref="PackageName"/>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="IndustryStdIncludes">\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="GuidDeclarationAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Guids">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="GuidCNames">\r
+          <xs:annotation>\r
+            <xs:documentation xml:lang="en">Describe the valid content of a GUID element in and MSA file.</xs:documentation>\r
+          </xs:annotation>\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" ref="IndustryStdHeader"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="IndustryStdHeader">\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="GuidCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="GuidAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="HiiPackages">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Describe the list of a HiiPackage elements</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="HiiPackage">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="Header" type="UiNameType"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="IncludeHeader" type="PathAndFilename"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-            </xs:sequence>\r
-            <xs:attributeGroup ref="IndustryStdHeaderAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="InstalledDate" type="DateType"/>\r
-    <xs:element name="Libraries">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Different (Module) Instances of Libraries used ONLY in FPD Files.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Library">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="xs:NCName">\r
-                                <xs:attributeGroup ref="LibraryAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- remove Arch Element HERE, start using the Arch attribute in Library element above. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:choice minOccurs="1" maxOccurs="unbounded">\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="Library">\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="BaseNameConvention">\r
-                                            <xs:attributeGroup ref="LibraryAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:choice>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- /remove Arch Element -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Instance">\r
-                    <xs:complexType>\r
-                        <xs:attributeGroup ref="LibraryAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>                \r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="LibraryClass">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Used in MSA files. This defines what class of library is being supported = produced (library module) or consumed by a module.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="KeywordType">\r
-                    <xs:attributeGroup ref="LibraryClassAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <!-- LAH This is LibraryClassDeclaration FINAL version -->\r
-    <xs:element name="LibraryClassDeclaration">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This element defines a class of library, along with the path to the Include Header for this library</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HiiCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="HiiPackageAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Hobs">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="HobTypes">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="LibraryClass">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="xs:NCName">\r
-                                <xs:attribute name="RecommendedInstanceGuid" type="GuidType" use="optional"/>\r
-                                <xs:attribute name="RecommendedInstanceVersion" type="xs:decimal" use="optional"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="IncludeHeader"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="RecommendedInstanceGuid" type="GuidType"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="RecommendedInstanceVersion" type="xs:decimal"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <!-- LAH This is LibraryClassDeclarations FINAL version -->\r
-    <xs:element name="LibraryClassDeclarations">\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HobType" type="HobTypes"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="HobAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="IncludeHeader">\r
+    <xs:complexType>\r
+      <xs:simpleContent>\r
+        <xs:extension base="PathAndFilename">\r
+          <xs:attributeGroup ref="IncludeHeaderAttributes"/>\r
+        </xs:extension>\r
+      </xs:simpleContent>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="IndustryStdIncludes">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="IndustryStdHeader"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="IndustryStdHeader">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="IncludeHeader" type="PathAndFilename"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+      </xs:sequence>\r
+      <xs:attributeGroup ref="IndustryStdHeaderAttributes"/>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Libraries">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Different (Module) Instances of Libraries used ONLY in FPD Files.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Instance">\r
+          <xs:complexType>\r
+            <xs:attributeGroup ref="LibraryAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="LibraryClass">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Used in MSA files. This defines what class of library is being supported = produced (library module) or consumed by a module.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="Keyword" type="KeywordType"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+      </xs:sequence>\r
+      <xs:attributeGroup ref="LibraryClassAttributes"/>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <!-- LAH This is SPD LibraryClassDeclarations FINAL version -->\r
+  <xs:element name="LibraryClassDeclarations">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="LibraryClass">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" ref="LibraryClassDeclaration"/>\r
-                <xs:element name="LibraryClass" minOccurs="0" maxOccurs="unbounded">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="IncludeHeader" type="PathAndFilename"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="LibraryClassAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>            \r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="LibraryClassDefinitions">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This section defines what Classes of Library that this library supports. A Library may belong to multiple different library classes.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element ref="LibraryClass"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="License">\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="Paragraph">\r
-                    <xs:attribute name="URL" type="xs:anyURI" use="optional"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Modified" type="DateType"/>\r
-    <xs:element name="ModifiedDate" type="DateType"/>\r
-    <xs:element name="Module">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is record format for a Module entry in the Framework Database file.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:annotation>\r
-                <xs:documentation xml:lang="en">This describes the fields in an Module record in the Framework Database. The Path field is relative to the workspace to Module Surface Area (MSA) files.</xs:documentation>\r
-            </xs:annotation>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="IncludeHeader" type="PathAndFilename"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="LibraryClassDeclarationAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="LibraryClassDefinitions">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This section defines what Classes of Library that this library supports. A Library may belong to multiple different library classes.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="LibraryClass"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="License">\r
+    <xs:complexType>\r
+      <xs:simpleContent>\r
+        <xs:extension base="Paragraph">\r
+          <xs:attribute name="URL" type="xs:anyURI" use="optional"/>\r
+        </xs:extension>\r
+      </xs:simpleContent>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="ModuleBuildOptions">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="ModuleSaBuildOptions">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="FvBinding" type="KeywordList"/>\r
+        <!-- The FfsFileNameGuid allows the Platform Integrator to specify a GUID for the FFS File Name GUID -->\r
+        <xs:element minOccurs="0" maxOccurs="1" name="FfsFileNameGuid" type="GuidType"/>\r
+        <!-- If binding is specified, you MUST specify the FfsFormatKey -->\r
+        <xs:element minOccurs="0" maxOccurs="1" name="FfsFormatKey" type="KeywordType"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" ref="Options"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="ModuleDefinitions">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="SupportedArchitectures" type="ArchListType"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="BinaryModule" type="xs:boolean" default="false"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="OutputFileBasename" type="FileNameConvention"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="ClonedFrom">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="ModuleName"/>\r
-                <xs:choice minOccurs="1">\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                </xs:choice>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Path"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ModuleEntryPoint" type="xs:normalizedString"/>\r
-    <xs:element name="ModuleList">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track package installation</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence maxOccurs="unbounded">\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" ref="Module"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ModuleName">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is the valid content of a Module Name</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="xs:NCName">\r
-                    <xs:attributeGroup ref="ModuleNameAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ModuleType" type="ModuleTypeDef">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the valid EFI Phase that the Module is designed to execute under.</xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="ModuleUnloadImage" type="xs:normalizedString"/>\r
-    <xs:element name="MsaFiles">\r
-        <xs:complexType>\r
-          <xs:choice minOccurs="1" maxOccurs="unbounded">\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="MsaFile">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Surface Area Package Description (SPD) list of Module Surface Area files</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="0" maxOccurs="1">\r
-                            <xs:element minOccurs="0" ref="Filename"/>\r
-                            <xs:element minOccurs="0" ref="BuildOptions"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="MsaAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE Arch element, use attribute Arch in above. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1">\r
-                            <xs:element maxOccurs="unbounded" name="MsaFile">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Describe the valid content of a Surface Area Package Description (SPD) file</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:complexType>\r
-                                    <xs:sequence minOccurs="0" maxOccurs="1">\r
-                                        <xs:element minOccurs="0" ref="Filename"/>\r
-                                        <xs:element minOccurs="0" ref="BuildOptions"/>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="MsaAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-              <xs:element minOccurs="0" maxOccurs="unbounded" name="Filename" type="PathAndFilename"/>\r
-          </xs:choice>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <!-- Use in Final -->\r
-    <xs:element name="MsaFileList">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Surface Area Package Description (SPD) list of Module Surface Area files</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="unbounded" name="Cloned">\r
+                <xs:complexType>\r
+                  <xs:sequence>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="PackageGuid" type="GuidType"/>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="PackageVersion" type="VersionDataType"/>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="ModuleGuid" type="GuidType"/>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="ModuleVersion" type="VersionDataType"/>\r
+                  </xs:sequence>\r
+                  <!-- The Id is a number used to track heritage  the first entry will be 0 and increment from then on. -->\r
+                  <xs:attribute name="Id" type="xs:nonNegativeInteger" use="required"/>\r
+                  <!-- If the original module was installed from a FAR, track the FAR it came from. -->\r
+                  <xs:attribute name="FarGuid" type="GuidType" use="optional"/>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="ModuleType" type="ModuleTypeDef">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Describe the valid EFI Phase that the Module is designed to execute under.</xs:documentation>\r
+    </xs:annotation>\r
+  </xs:element>\r
+  <!-- Use in Final -->\r
+  <xs:element name="MsaFiles">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">MsaFiles is a child of Surface Area Package Description (SPD) files</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename" type="PathAndFilename"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Options">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="Option"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="NonProcessedFiles">\r
+    <xs:complexType>\r
+      <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
+        <xs:element name="Filename" type="PathAndFilename"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Option">\r
+    <!-- This element is used to store flags from the Tools -->\r
+    <xs:complexType>\r
+      <xs:simpleContent>\r
+        <xs:extension base="xs:normalizedString">\r
+          <xs:attributeGroup ref="OptionAttributes"/>\r
+        </xs:extension>\r
+      </xs:simpleContent>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PackageDefinitions">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="ReadOnly" type="xs:boolean" default="false"/>\r
+        <xs:element minOccurs="1" maxOccurs="1" name="RePackage" type="xs:boolean" default="false"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="ClonedFrom">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Filename" type="PathAndFilename"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="OutputDirectory">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Define where we want our output to go. The Attribute, IntermediateDirectories, default MODULE, says that intermediate files will be local to the module, versus a unified directory structure.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="unbounded" name="Cloned">\r
+                <xs:complexType>\r
+                  <xs:sequence>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="PackageGuid" type="GuidType"/>\r
+                    <xs:element minOccurs="1" maxOccurs="1" name="PackageVersion" type="VersionDataType"/>\r
+                  </xs:sequence>\r
+                  <!-- The Id is a number used to track heritage  the first entry will be 0 and increment from then on. -->\r
+                  <xs:attribute name="Id" type="xs:nonNegativeInteger" use="required"/>\r
+                  <!-- If the original Package was installed from a FAR, track the FAR it came from. -->\r
+                  <xs:attribute name="FarGuid" type="GuidType" use="optional"/>\r
+                </xs:complexType>\r
+              </xs:element>\r
+            </xs:sequence>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PackageDependencies">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This tag is used in the Module Surface Area Description File (MSA) to track package dependencies for a module.</xs:documentation>\r
+      <xs:documentation xml:lang="en">Attributes to PackageName include Required: Usage PackageGuid PackageVesion, Optional: FeatureFlag</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Package">\r
+          <xs:complexType>\r
+            <xs:attributeGroup ref="PackageAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PackageHeaders">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">PackageHeaders is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="IncludePkgHeader">\r
+          <xs:complexType>\r
             <xs:simpleContent>\r
-                <xs:extension base="DirectoryNamingConvention">\r
-                    <xs:attribute default="MODULE" name="IntermediateDirectories">\r
-                        <xs:simpleType>\r
-                            <xs:restriction base="UCNameType">\r
-                                <xs:enumeration value="MODULE"/>\r
-                                <xs:enumeration value="UNIFIED"/>\r
-                            </xs:restriction>\r
-                        </xs:simpleType>\r
-                    </xs:attribute>\r
-                </xs:extension>\r
+              <xs:extension base="PathAndFilename">\r
+                <xs:attributeGroup ref="PackageHeaderAttributes"/>\r
+              </xs:extension>\r
             </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ProcessStep">\r
-        <xs:complexType>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PackageList">\r
+    <!-- Valid for DB usage only! -->\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track all packages (SPD files) installed in a workspace. (Database)</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename" type="DbPathAndFilename"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <!-- PcdBuildDefinition is a child of FPD ModuleSA element for FIXED_AT_BUILD, PATCHABLE_IN_MODULE, and FEATURE_FLAG PCDS Only! -->\r
+  <xs:element name="PcdBuildDefinition">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Child of FPD ModuleSA element for FIXED_AT_BUILD, PATCHABLE_IN_MODULE, and FEATURE_FLAG PCDS Only!</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdData">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="ToolName" type="xs:string"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="ToolArgs" type="xs:string"/>\r
-                <!-- Input patterns  to be processed by the tool above -->\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="InputPattern" type="xs:string"/>\r
-                <!-- A pattern to match for the output -->\r
-                <xs:element minOccurs="1" maxOccurs="1" name="OutputPattern" type="xs:string"/>\r
-            </xs:sequence>\r
-            <xs:attributeGroup ref="ProcessStepAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>    \r
-    <xs:element name="FfsFormatDeclarations">\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuidCName" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
+              <!-- MaxDatumSize is only required if the DatumType is VOID* -->\r
+              <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize" type="DatumSizeLimitation"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="Value" type="DefaultValueType"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="PcdBuildDefinitionAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:group name="DefaultGroup">\r
+    <xs:sequence>\r
+      <xs:element minOccurs="1" maxOccurs="1" name="Value" type="DefaultValueType"/>\r
+    </xs:sequence>\r
+  </xs:group>\r
+  <xs:group name="HiiEnable">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">If HiiEnable group is specified, then HiiEnable is default true</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:sequence>\r
+      <xs:element minOccurs="1" maxOccurs="1" name="VariableName" type="HexWordArrayType"/>\r
+      <xs:element minOccurs="1" maxOccurs="1" name="VariableGuid" type="C_NameType"/>\r
+      <xs:element minOccurs="1" maxOccurs="1" name="VariableOffset" type="Hex64BitDataType"/>\r
+      <xs:element minOccurs="1" maxOccurs="1" name="HiiDefaultValue" type="DefaultValueType"/>\r
+    </xs:sequence>\r
+  </xs:group>\r
+  <xs:group name="VpdEnable">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">If VpdEnable group is specified, then VpdEnable is default true</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:sequence>\r
+      <xs:element minOccurs="1" maxOccurs="1" name="VpdOffset" type="Hex64BitDataType"/>\r
+    </xs:sequence>\r
+  </xs:group>\r
+  <xs:element name="PcdCoded">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Child of Module Surface Area Description (MSA)</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdEntry">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="FfsFormatDeclaration">\r
-                    <!-- Required Attributes are the FfsFormatKeyword and SupModuleList -->\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="unbounded" ref="ProcessStep"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="FfsAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PackageDefinitions">\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuidCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValueType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <!-- MSA file declares a single usage, and must match one of the entries in what the SPD file declares as the set of possible Item Types. -->\r
+            <xs:attributeGroup ref="PcdCodedAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <!-- LAH This is PcdDeclarations FINAL version -->\r
+  <xs:element name="PcdDeclarations">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">PcdDeclaratins is a child of Package Surface Area Description (SPD)</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence minOccurs="1">\r
+        <xs:element maxOccurs="unbounded" name="PcdEntry">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="ReadOnly" type="xs:boolean" default="false"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="RePackage" type="xs:boolean" default="false"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>    \r
-    <xs:element name="PCDs">\r
-        <!-- PCDs section is going away to be replaced by something else TB Named later -->\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of Module Surface Area documents, MSA and MBD files, Library Modules and Other Modules</xs:documentation>\r
-            <xs:documentation xml:lang="en">One or more PcdData or PcdBuildData Elements Only one type is permitted</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element maxOccurs="unbounded" name="PcdData">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This is a child of PCDs and can occur in the MSA and MBD files.</xs:documentation>\r
-                        <xs:documentation xml:lang="en">This is date element is used in the Module Surface Area (MSA) file and contains references to be used by a Platform Build</xs:documentation>\r
-                        <xs:documentation xml:lang="en">There is ONE required Attribute, ItemType</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="HexDoubleWordDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="HiiEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="VpdEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="AlternateNameSpaceEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="SkuEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="SkuDataArrayEnable" type="xs:boolean"/>\r
-                            <xs:element default="0x00" minOccurs="0" maxOccurs="1" name="MaxSku" type="HexByteDataType"/>\r
-                            <xs:element default="0x00" minOccurs="0" maxOccurs="1" name="SkuId" type="HexByteDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DatumSize" type="DatumSizeLimitation"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="VariableName" type="xs:normalizedString"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="VariableGuid" type="VariableGuidType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DataOffset" type="Hex64BitDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="GuidOffset" type="Hex64BitDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="xs:normalizedString"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PcdAttributes"/>\r
-                        <xs:attribute name="PcdIsDriver" use="optional"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PackageDependencies">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Package Surface Area Description File (SPD) to track package dependencies for a module</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence maxOccurs="unbounded">\r
-                <xs:choice>\r
-                    <xs:element minOccurs="1" maxOccurs="unbounded" ref="Package"/>\r
-                    <xs:element minOccurs="1" maxOccurs="unbounded" ref="PackageName"/>                    \r
-                </xs:choice>\r
-            </xs:sequence>\r
-            <xs:attributeGroup ref="PackageNameAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PackageHeaders">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuidCName" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="ValidUsage" type="PcdListType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValueType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="PcdDeclarationAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="FarList">\r
+    <!-- Valid for DB usage only! -->\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track all DISTRIBUTION packages (FAR files) installed in a workspace. (Database)</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename" type="DbPathAndFilename"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="FfsFormatDeclarations">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="FfsFormatDeclaration">\r
+          <!-- Required Attributes are the FfsFormatKeyword and SupModuleList -->\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:choice>\r
-                    <!-- DO NOT USE! removing IncludeHeader, use IncludePkgHeader instead. -->\r
-                    <xs:element minOccurs="0" maxOccurs="unbounded" ref="IncludeHeader"/>\r
-                    <xs:element minOccurs="0" maxOccurs="unbounded" name="IncludePkgHeader">\r
-                        <xs:complexType>\r
-                            <xs:simpleContent>\r
-                                <xs:extension base="PathAndFilename">\r
-                                    <xs:attributeGroup ref="PackageHeaderAttributes"/>\r
-                                </xs:extension>\r
-                            </xs:simpleContent>\r
-                        </xs:complexType>\r
-                    </xs:element>\r
-                </xs:choice>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PackageList">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track all packages installed in a workspace. (Database)</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence maxOccurs="unbounded">\r
-                <xs:element minOccurs="0" name="Package">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track individual package information. The Path is a relative path to the SPD File.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence maxOccurs="unbounded">\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="PackageName"/>\r
-                            <xs:choice minOccurs="0">\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                <!-- DO NOT USE Guid should be removed, use PackageGuid instead -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" name="PackageGuid" type="GuidType"/>\r
-                            </xs:choice>\r
-                            <xs:choice minOccurs="0">\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Version"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" name="PackageVersion" type="VersionDataType"/>\r
-                            </xs:choice>\r
-                            <xs:choice minOccurs="1">\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Path"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Filename"/>\r
-                            </xs:choice>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="InstalledDate"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PackageAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element name="Filename" type="PathAndFilename" minOccurs="0" maxOccurs="unbounded"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Package">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Package Surface Area Description File to track package dependencies for a module (SPD) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:attributeGroup ref="PackageAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PackageName">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Package Surface Area Description File to track package dependencies for a module (SPD) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="UiNameType">\r
-                    <xs:attributeGroup ref="PackageAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PackageType" type="PackageType"/>\r
-    <xs:element name="Path">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the valid content of a filename</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="DirectoryNamingConvention">\r
-                    <xs:attributeGroup ref="DirectoryAttributes"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="DynamicPcdBuildDefinitions">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of Framework Platform Description (FPD)</xs:documentation>\r
-            <xs:documentation xml:lang="en">FPD uses this PCD information for Dynamic PCDs Only</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="unbounded" ref="ProcessStep"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="FfsAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PpiDeclarations">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">PpiDeclarations is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdBuildData">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize" type="DatumSizeLimitation"/>\r
-                            <xs:element minOccurs="1" maxOccurs="unbounded" name="SkuInfo">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element minOccurs="1" maxOccurs="1" name="SkuId" type="xs:nonNegativeInteger"/>\r
-                                        <xs:choice>\r
-                                            <xs:group minOccurs="0" maxOccurs="1" ref="HiiEnable"/>\r
-                                            <xs:group minOccurs="0" maxOccurs="1" ref="VpdEnable"/>\r
-                                            <xs:group minOccurs="0" maxOccurs="1" ref="DefaultGroup"/>\r
-                                        </xs:choice>\r
-                                    </xs:sequence>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="DynamicBuildPcdAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PcdBuildDefinition">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of FPD ModuleSA element for FIXED_AT_BUILD, PATCHABLE_IN_MODULE, and FEATURE_FLAG PCDS Only!</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="PpiDeclarationAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="PPIs">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Provide for one or more Ppi or PpiNotify sections. </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence minOccurs="1">\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="Ppi">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdData">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
-                            <!-- MaxDatumSize is only required if the DatumType is VOID* -->\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize" type="DatumSizeLimitation"/>                            \r
-                            <xs:element minOccurs="0" maxOccurs="1" name="Value" type="DefaultValueType"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PcdBuildDefinitionAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:group name="DefaultGroup">\r
-        <xs:sequence>\r
-            <xs:element minOccurs="1" maxOccurs="1" name="Value" type="DefaultValueType"/>\r
-        </xs:sequence>\r
-    </xs:group>\r
-    <xs:group name="HiiEnable">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">If HiiEnable group is specified, then HiiEnable is default true</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:sequence>\r
-            <xs:element minOccurs="1" maxOccurs="1" name="VariableName" type="VariableNameDataType"/>\r
-            <xs:element minOccurs="0" maxOccurs="1" name="VariableGuid" type="VariableGuidType"/>\r
-            <xs:element minOccurs="1" maxOccurs="1" name="VariableOffset" type="Hex64BitDataType"/>\r
-            <xs:element minOccurs="1" maxOccurs="1" name="HiiDefaultValue" type="DefaultValueType"/>\r
-        </xs:sequence>\r
-    </xs:group>\r
-    <xs:group name="VpdEnable">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">If VpdEnable group is specified, then VpdEnable is default true</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:sequence>\r
-            <xs:element minOccurs="1" maxOccurs="1" name="VpdOffset" type="Hex64BitDataType"/>\r
-        </xs:sequence>\r
-    </xs:group>\r
-    <xs:element name="PcdCoded">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of Module Surface Area Description (MSA)</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="PpiCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="PpiAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="PpiNotify">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdEntry">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This is the valid content of the PCD table of a Module. The contents may not be wired at build time, and these only refer to Platform Build values, not modules.</xs:documentation>\r
-                        <xs:documentation xml:lang="en">This element is valid for PcdInfo.xml and FPD files.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValueType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <!-- MSA file declares a single usage, and must match one of the entries in what the SPD file declares as the set of possible Item Types. -->\r
-                        <xs:attributeGroup ref="PcdCodedAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <!-- LAH This is PcdDeclarations FINAL version -->\r
-    <xs:element name="PcdDeclarations">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of Package Surface Area Description (SPD)</xs:documentation>\r
-            <xs:documentation xml:lang="en">This section is for entering information about a package's PCDs</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element maxOccurs="unbounded" name="PcdEntry">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="ValidUsage" type="PcdListType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValueType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PcdDeclarationAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <!-- DO NOT USE removing PcdDefinitions, use PcdDeclarations for SPD entries  Use PcdBuildDeclarations for MSA Entires and PcdDynamicBuildDeclarations for FPD Entries -->\r
-    <xs:element name="PcdDefinitions">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of Package Surface Area Description (SPD)</xs:documentation>\r
-            <xs:documentation xml:lang="en">This permits entering information about a package's PCD information</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element maxOccurs="unbounded" name="PcdEntry">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This is the valid content of the PCD table of a Module. The contents may not be wired at build time, and these only refer to Platform Build values, not modules.</xs:documentation>\r
-                        <xs:documentation xml:lang="en">This element is valid for PcdInfo.xml and FPD files.</xs:documentation>\r
-                        <xs:documentation xml:lang="en">There is ONE required Attribute, ItemType</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="Token"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="HiiEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="VpdEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="AlternateNameSpaceEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="SkuEnable" type="xs:boolean"/>\r
-                            <xs:element default="false" minOccurs="0" maxOccurs="1" name="SkuDataArrayEnable" type="xs:boolean"/>\r
-                            <xs:element default="0x00" minOccurs="0" maxOccurs="1" name="MaxSku" type="HexByteDataType"/>\r
-                            <xs:element default="0x00" minOccurs="0" maxOccurs="1" name="SkuId" type="HexByteDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DatumSize">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">Max Number of Bytes of the data.</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:simpleType>\r
-                                    <xs:restriction base="xs:int">\r
-                                        <xs:minInclusive value="1"/>\r
-                                        <xs:maxInclusive value="16777215"/>\r
-                                    </xs:restriction>\r
-                                </xs:simpleType>\r
-                            </xs:element>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="VariableName" type="xs:normalizedString"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="VariableGuid" type="VariableGuidType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DataOffset" type="Hex64BitDataType"/>\r
-                            <xs:element default="0" minOccurs="0" maxOccurs="1" name="GuidOffset" type="Hex64BitDataType"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValueType"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PcdAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Platform">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Database Entry to locate the Platform Build Tips - path to FPD file.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="PpiNotifyCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="PpiNotifyAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="ProtocolDeclarations">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">ProtocolDeclarations is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="PlatformName">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Define the Name of a Platform</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="PlatformNamingConvention">\r
-                                <xs:attributeGroup ref="PlatformAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:choice minOccurs="0">\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Path"/>\r
-                    <xs:element minOccurs="0" maxOccurs="1" ref="Filename"/>\r
-                </xs:choice>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="InstalledDate"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="ModifiedDate"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="AlternatePcdFile" type="FileNameConvention"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" name="AlternateFdfFile" type="FileNameConvention"/>\r
-            </xs:sequence>\r
-            <xs:attributeGroup ref="PlatformAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PpiDeclarations">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="ProtocolDeclarationAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Protocols">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">If either Protocol or ProtocolNotify sections are needed, one or more of them should be specified within this section</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="Protocol">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:choice>\r
-                                <!-- DO NOT USE removing Guid in final, use GuidValue instead -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                            </xs:choice>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PpiDeclarationAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="PPIs">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Provide for one or more Ppi or PpiNotify sections. </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Ppi">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="C_NameType">\r
-                                <xs:attributeGroup ref="PpiAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="PpiNotify">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="C_NameType">\r
-                                <xs:attributeGroup ref="PpiNotifyAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE Arch element, use Arch Attribute in above instead. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="Ppi">\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="C_Name">\r
-                                            <xs:attributeGroup ref="PpiAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="PpiNotify">\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="C_Name">\r
-                                            <xs:attributeGroup ref="PpiNotifyAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="ProtocolDeclarations">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="ProtocolCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="ProtocolAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="ProtocolNotify">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="C_NameType"/>\r
-                            <xs:choice>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                            </xs:choice>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="ProtocolDeclarationAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Protocols">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">If either Protocol or ProtocolNotify sections are needed, one or more of them should be specified within this section</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Protocol">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="C_NameType">\r
-                                <xs:attributeGroup ref="ProtocolAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="ProtocolNotify">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="C_NameType">\r
-                                <xs:attributeGroup ref="ProtocolNotifyAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE! removing Arch element, use Arch attribute of Protocol or ProtocolNotify instead. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="Protocol">\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="C_NameType">\r
-                                            <xs:attributeGroup ref="ProtocolAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="ProtocolNotify">\r
-                                <xs:complexType>\r
-                                    <xs:simpleContent>\r
-                                        <xs:extension base="C_NameType">\r
-                                            <xs:attributeGroup ref="ProtocolNotifyAttributes"/>\r
-                                        </xs:extension>\r
-                                    </xs:simpleContent>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element default="false" name="ReadOnly" type="xs:boolean"/>\r
-    <xs:element default="false" name="RePackage" type="xs:boolean"/>\r
-    <xs:element name="Sections">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Sections refers to the Firmware Filesystem sections, PE32, UI, VER, DXS, etc. and how they are made</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Section">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="0" ref="Filenames"/>\r
-                            <xs:element minOccurs="0" name="Args" type="ArgsType"/>\r
-                            <xs:element minOccurs="0" name="OutFile" type="FileNameConvention"/>\r
-                            <xs:element minOccurs="0" name="OutputFileExtension" type="xs:string"/>\r
-                            <xs:element minOccurs="0" name="ToolName" type="ToolType"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="SectionAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Sections">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                            <xs:element name="Section">\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element minOccurs="0" ref="Filenames"/>\r
-                                        <xs:element minOccurs="0" name="Args" type="ArgsType"/>\r
-                                        <xs:element minOccurs="0" name="OutFile" type="FileNameConvention"/>\r
-                                        <xs:element minOccurs="0" name="OutputFileExtension" type="xs:string"/>\r
-                                        <xs:element minOccurs="0" name="ToolName" type="ToolType"/>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="SectionAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="SectionsAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-            <xs:attributeGroup ref="SectionsAttributes"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="SetVirtualAddressMapCallBack" type="C_Name"/>\r
-    <xs:element name="SourceFiles">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Multiple Filenames may be specified, and they may also be scoped to a specific Architecture.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Filename"/>\r
-                <!-- DO NOT USE! removing Arch element, use Arch Attribute of Filename instead.  -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1">\r
-                            <xs:element maxOccurs="unbounded" ref="Filename"/>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="SkuInfo">\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="UiSkuName">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="UiNameType">\r
-                                <xs:attribute name="SkuID" type="xs:nonNegativeInteger" use="required"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Specification">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This string is used to provide the name and version of the Specification that the component conforms to.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="ProtocolNotifyCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="ProtocolNotifyAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="ProcessStep">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <!-- The following is a macro for Apache ANT -->\r
+        <xs:element minOccurs="0" maxOccurs="1" name="MacroDefFile">\r
+          <xs:complexType>\r
             <xs:simpleContent>\r
-                <xs:extension base="xs:normalizedString">\r
-                    <xs:attribute name="Version" type="xs:normalizedString" use="optional"/>\r
-                </xs:extension>\r
+              <xs:extension base="PathAndFilename">\r
+                <xs:attribute name="MacroName" type="KeywordType" use="required"/>\r
+              </xs:extension>\r
             </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="SystemTables">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is list of System Table elements.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="SystemTable">\r
-                    <xs:complexType>\r
-                        <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                            <!-- Remove Entry from Use -->\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="Entry" type="xs:normalizedString"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="SystemTableAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="SystemTableCName">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="C_NameType">\r
-                                <xs:attributeGroup ref="SystemTableAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>                \r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Updated" type="DateType"/>\r
-    <xs:element name="UpdatedDate" type="DateType"/>\r
-    <xs:element name="URL" type="xs:anyURI"/>\r
-    <xs:element name="URI" type="xs:anyURI"/>\r
-    <xs:element name="UserDefinedAntTasks">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a sub-element of BuildOptions</xs:documentation>\r
-            <xs:documentation xml:lang="en">Permit Users to define their own custom ANT tasks.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence maxOccurs="unbounded">\r
-                <xs:element minOccurs="1" ref="AntTask"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="UserExtensions">\r
-        <xs:complexType>\r
+          </xs:complexType>\r
+        </xs:element>\r
+        <!-- The following is for System Executables -->\r
+        <xs:element minOccurs="0" maxOccurs="1" name="ToolName" type="xs:NCName"/>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="ToolArgs" type="xs:normalizedString"/>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="InputPattern" type="xs:normalizedString"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" name="OutputPattern" type="xs:normalizedString"/>\r
+      </xs:sequence>\r
+      <xs:attributeGroup ref="ProcessStepAttributes"/>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="SourceFiles">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">Multiple Filenames may be specified, and they may also be scoped to a specific Architecture.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="Filename"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="SkuInfo">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="UiSkuName">\r
+          <xs:complexType>\r
+            <xs:simpleContent>\r
+              <xs:extension base="UiNameType">\r
+                <xs:attribute name="SkuID" type="xs:nonNegativeInteger" use="required"/>\r
+              </xs:extension>\r
+            </xs:simpleContent>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="SystemTables">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is list of System Table elements.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="SystemTableCNames">\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##local"/>\r
-            </xs:sequence>\r
-            <xs:attribute name="UserID" type="xs:NCName" use="required"/>\r
-            <xs:attribute name="Identifier" type="xs:nonNegativeInteger" use="required"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Variables">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">An MSA FILE list of EFI Variables described by string pair.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element name="Variable">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This is an EFI Variable Entry</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:choice>\r
-                                <!-- DO NOT USE remove String from final -->\r
-                                <xs:element minOccurs="1" maxOccurs="1" name="String" type="xs:normalizedString"/>\r
-                                <!-- Make VariableName required -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" name="VariableName" type="VariableNameDataType"/>\r
-                            </xs:choice>\r
-                            <xs:choice minOccurs="1">\r
-                                <!-- DO NOT USE, use GuidC_Name instead -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
-                                <!-- DO NOT USE, use GuidC_Name instead -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
-                                <!-- Make GuidC_Name required -->\r
-                                <xs:element minOccurs="0" maxOccurs="1" name="GuidC_Name" type="C_NameType"/>\r
-                            </xs:choice>\r
-                            <!-- DO NOT USE, removiing  ByteOffset, Bit Offset and OffsetBitSize-->\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="ByteOffset" type="HexWordDataType">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">This entry represents the Hex Byte Offset {0x0, 0xn} to where the data starts.</xs:documentation>\r
-                                </xs:annotation>\r
-                            </xs:element>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="BitOffset">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">This entry represents the Location of the Starting Bit {0,8} of the start of Data. A value of zero or 1 indicates that there is no BitOffset into the byte.</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:simpleType>\r
-                                    <xs:restriction base="xs:int">\r
-                                        <xs:minInclusive value="0"/>\r
-                                        <xs:maxInclusive value="8"/>\r
-                                    </xs:restriction>\r
-                                </xs:simpleType>\r
-                            </xs:element>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="OffsetBitSize">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">This number represents the number of bits to use {0, 7} starting at the BitOffset. A value of 0 indicates that the entire Byte should be used.</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:simpleType>\r
-                                    <xs:restriction base="xs:int">\r
-                                        <xs:minInclusive value="0"/>\r
-                                        <xs:maxInclusive value="7"/>\r
-                                    </xs:restriction>\r
-                                </xs:simpleType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="VariableAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <!-- DO NOT USE Arch element, use attribute Arch in above. -->\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element name="Variable">\r
-                                <xs:annotation>\r
-                                    <xs:documentation xml:lang="en">This is an EFI Variable Entry</xs:documentation>\r
-                                </xs:annotation>\r
-                                <xs:complexType>\r
-                                    <xs:sequence>\r
-                                        <xs:element minOccurs="1" maxOccurs="1" name="String" type="xs:normalizedString"/>\r
-                                        <xs:element minOccurs="1" maxOccurs="1" ref="Guid"/>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" name="ByteOffset" type="HexWordDataType">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en">This entry represents the Hex Byte Offset {0x0, 0xn} to where the data starts.</xs:documentation>\r
-                                            </xs:annotation>\r
-                                        </xs:element>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" name="BitOffset">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en">This entry represents the Location of the Starting Bit {0,8} of the start of Data. A value of zero or 1 indicates that there is no BitOffset into the byte.</xs:documentation>\r
-                                            </xs:annotation>\r
-                                            <xs:simpleType>\r
-                                                <xs:restriction base="xs:int">\r
-                                                    <xs:minInclusive value="0"/>\r
-                                                    <xs:maxInclusive value="8"/>\r
-                                                </xs:restriction>\r
-                                            </xs:simpleType>\r
-                                        </xs:element>\r
-                                        <xs:element minOccurs="0" maxOccurs="1" name="OffsetBitSize">\r
-                                            <xs:annotation>\r
-                                                <xs:documentation xml:lang="en">This number represents the number of bits to use {0, 7} starting at the BitOffset. A value of 0 indicates that the entire Byte should be used.</xs:documentation>\r
-                                            </xs:annotation>\r
-                                            <xs:simpleType>\r
-                                                <xs:restriction base="xs:int">\r
-                                                    <xs:minInclusive value="0"/>\r
-                                                    <xs:maxInclusive value="7"/>\r
-                                                </xs:restriction>\r
-                                            </xs:simpleType>\r
-                                        </xs:element>\r
-                                    </xs:sequence>\r
-                                    <xs:attributeGroup ref="VariableAttributes"/>\r
-                                </xs:complexType>\r
-                            </xs:element>\r
-                        </xs:sequence>\r
-                        <xs:attribute name="ArchType" type="SupportedArchitectures"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Version" type="xs:normalizedString"/>\r
-    <xs:element name="FarList">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track all DISTRIBUTION packages (FAR files) installed in a workspace. (Database)</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="SystemTableCName" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="SystemTableAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="UserDefinedAntTasks">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">This is a sub-element of BuildOptions</xs:documentation>\r
+      <xs:documentation xml:lang="en">Permit Users to define their own custom ANT tasks.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="AntTask"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="UserExtensions">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>\r
+      </xs:sequence>\r
+      <xs:attribute name="UserID" type="xs:NCName" use="required"/>\r
+      <xs:attribute name="Identifier" type="xs:nonNegativeInteger" use="required"/>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Variables">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">An MSA FILE list of EFI Variables described by string pair.</xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" name="Variable">\r
+          <xs:annotation>\r
+            <xs:documentation xml:lang="en">This is an EFI Variable Entry</xs:documentation>\r
+          </xs:annotation>\r
+          <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename" type="PathAndFilename"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>    \r
+              <xs:element minOccurs="1" maxOccurs="1" name="VariableName" type="HexWordArrayType"/>\r
+              <xs:element minOccurs="1" maxOccurs="1" name="GuidC_Name" type="C_NameType"/>\r
+              <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="VariableAttributes"/>\r
+          </xs:complexType>\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="Version" type="VersionDataType"/>\r
 </xs:schema>\r