<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.eiffel.com/developers/xml/configuration-1-20-0"
	xmlns="http://www.eiffel.com/developers/xml/configuration-1-20-0" elementFormDefault="qualified">

	<xs:element name="redirection">
		<xs:complexType>
			<xs:attribute name="uuid" type="uuid" use="optional"/>
			<xs:attribute name="location" type="location" use="required"/>
			<xs:attribute name="message" type="xs:string" use="optional"/>
		</xs:complexType>
	</xs:element>

	<xs:element name="system">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="note" type="note" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element name="description" type="xs:string" minOccurs="0"/>
				<xs:element name="target" type="target" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="uuid" type="uuid" use="optional"/>
			<xs:attribute name="readonly" type="xs:boolean" use="optional"/>
			<xs:attribute name="library_target" type="xs:string" use="optional"/>
		</xs:complexType>
	</xs:element>

	<xs:complexType name="note">
		<xs:sequence>
			<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
		</xs:sequence>
		<xs:anyAttribute processContents="lax"/>
	</xs:complexType>

	<xs:simpleType name="uuid">
		<xs:restriction base="xs:string">
			<xs:pattern
				value="[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="location">
		<xs:restriction base="xs:string">
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="regexp">
		<xs:restriction base="xs:string">
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="target">
		<xs:sequence>
			<xs:element name="note" type="note" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="description" type="xs:string" minOccurs="0"/>
			<xs:element name="root" type="root" minOccurs="0"/>
			<xs:element name="version" type="version" minOccurs="0"/>
			<xs:element name="file_rule" type="file_rule" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="option" type="option" minOccurs="0"/>
			<xs:element name="setting" type="setting" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="capability" type="capability" minOccurs="0"/>
			<xs:element name="mapping" type="mapping" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="external_include" type="external_location" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="external_cflag" type="external_value" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="external_object" type="external_location" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="external_library" type="external_location" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="external_resource" type="external_location" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="external_linker_flag" type="external_value" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="external_make" type="external_location" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="pre_compile_action" type="action" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="post_compile_action" type="action" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="variable" type="variable" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="precompile" type="precompile" minOccurs="0" maxOccurs="1"/>
			<xs:element name="library" type="library" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="assembly" type="assembly" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="cluster" type="cluster" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="override" type="override" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required"/>
		<xs:attribute name="extends" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>
					An optional name of a target to be used as a parent of the current one:
						- another target of the current system if the attribute `extends_location` is not specified;
						- a specified target of another system if the attribute `extends_location` is specified;
						- a library target of another system if this attribute is not specified and the attribute `extends_location` is specified.
					
					See also: `extends_location`.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="extends_location" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>
					An optional location of a system describing a parent target.
					If specified, the attribute "extends" refers to a target of that system or defaults to the library target,
					otherwise, the attribute "extends" refers to a target of the current system.

					See also: `extends`.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="abstract" type="xs:boolean" use="optional"/>
	</xs:complexType>

	<xs:complexType name="root">
		<xs:attribute name="cluster" type="xs:string" use="optional"/>
		<xs:attribute name="class" type="xs:string" use="optional"/>
		<xs:attribute name="feature" type="xs:string" use="optional"/>
		<xs:attribute name="all_classes" type="xs:boolean" use="optional"/>
	</xs:complexType>

	<xs:complexType name="version">
		<xs:attribute name="major" type="xs:unsignedInt" use="optional"/>
		<xs:attribute name="minor" type="xs:unsignedInt" use="optional"/>
		<xs:attribute name="release" type="xs:unsignedInt" use="optional"/>
		<xs:attribute name="build" type="xs:unsignedInt" use="optional"/>
		<xs:attribute name="product" type="xs:string" use="optional"/>
		<xs:attribute name="company" type="xs:string" use="optional"/>
		<xs:attribute name="copyright" type="xs:string" use="optional"/>
		<xs:attribute name="trademark" type="xs:string" use="optional"/>
	</xs:complexType>

	<xs:complexType name="file_rule">
		<xs:sequence>
			<xs:element name="description" type="xs:string" minOccurs="0"/>
			<xs:element name="exclude" type="regexp" minOccurs="0"
				maxOccurs="unbounded"/>
			<xs:element name="include" type="regexp" minOccurs="0"
				maxOccurs="unbounded"/>
			<xs:element name="condition" type="condition" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="option">
		<xs:sequence>
			<xs:element name="description" type="xs:string" minOccurs="0"/>
			<xs:element name="debug" type="debug" minOccurs="0"
				maxOccurs="unbounded"/>
			<xs:element name="assertions" type="assertions" minOccurs="0"/>
			<xs:element name="warning" type="warning" minOccurs="0"
				maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="trace" type="xs:boolean" use="optional"/>
		<xs:attribute name="profile" type="xs:boolean" use="optional"/>
		<xs:attribute name="optimize" type="xs:boolean" use="optional"/>
		<xs:attribute name="debug" type="xs:boolean" use="optional"/>
		<xs:attribute name="warning" type="xs:boolean" use="optional"/>
		<xs:attribute name="namespace" type="xs:string" use="optional"/>
		<xs:attribute name="msil_application_optimize" type="xs:boolean" use="optional"/>
		<xs:attribute name="full_class_checking" type="xs:boolean" use="optional" default="true"/>
		<xs:attribute name="is_attached_by_default" type="xs:boolean" use="optional" default="true"/>
		<xs:attribute name="is_obsolete_routine_type" type="xs:boolean" use="optional" default="false"/>
		<xs:attribute name="syntax" use="optional" default="standard">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="obsolete"/>
					<xs:enumeration value="transitional"/>
					<xs:enumeration value="standard"/>
					<xs:enumeration value="provisional"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="manifest_array_type" use="optional" default="standard">
			<xs:annotation>
				<xs:documentation>
					Should a manifest array type be checked against a target type of the reattachment the array is involved in?
					- mismatch_error - yes, report an error if the types are different;
					- mismatch_warning - yes, report a warning if the types are different;
					- standard - no, do not perform any checks specific to manifest arrays.
				</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="mismatch_error"/>
					<xs:enumeration value="mismatch_warning"/>
					<xs:enumeration value="standard"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>

	<xs:complexType name="capability">
		<xs:all>
			<xs:element name="catcall_detection" type="capability.catcall_detection" minOccurs="0"/>
			<xs:element name="concurrency" type="capability.concurrency" minOccurs="0"/>
			<xs:element name="void_safety" type="capability.void_safety" minOccurs="0"/>
		</xs:all>
	</xs:complexType>

	<xs:complexType name="capability.catcall_detection">
		<xs:attribute name="support" type="catcall_detection_value" use="optional" default="none">
			<xs:annotation>
				<xs:documentation>
					Maximum supported level of cat call detection ordered as follows:
					- none - no checks;
					- conformance - conformance checks;
					- all - complete cat call safety.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="use" type="catcall_detection_value" use="optional">
			<xs:annotation>
				<xs:documentation>
					A CAT-call detection level to be used when an associated target is used as a root.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	
	<xs:complexType name="capability.concurrency">
		<xs:attribute name="support" type="concurrency_value" use="optional" default="scoop">
			<xs:annotation>
				<xs:documentation>
					Concurrency values are ordered as follows:
					- thread - unstructured multithreading, least safe, least restrictions
					- none - single-threaded applications
					- scoop - SCOOP, most restrictions
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="use" type="concurrency_value" use="optional">
			<xs:annotation>
				<xs:documentation>
					Concurrency value to be used when an associated target is used as a root.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>

	<xs:complexType name="capability.void_safety">
		<xs:attribute name="support" type="void_safety_value" use="optional" default="all">
			<xs:annotation>
				<xs:documentation>
					Maximum supported level of void-safety ordered as follows:
					- none - no checks;
					- conformance - conformance checks;
					- initialization - checks that variables are initialized before use + conformance;
					- transitional - calls are only allowed on attached expressions + initialization;
					- all - complete void-safety.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="use" type="void_safety_value" use="optional">
			<xs:annotation>
				<xs:documentation>
					A void safety level to be used when an associated target is used as a root.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	
	<xs:complexType name="setting">
		<xs:attribute name="name" type="available_settings" use="required"/>
		<xs:attribute name="value" type="xs:string" use="required"/>
	</xs:complexType>

	<xs:simpleType name="available_settings">
		<xs:restriction base = "xs:string">
			<xs:enumeration value = "absent_explicit_assertion"/>
			<xs:enumeration value = "address_expression"/>
			<xs:enumeration value = "array_optimization"/>
			<xs:enumeration value = "automatic_backup"/>
			<xs:enumeration value = "check_for_void_target"/>
			<xs:enumeration value = "check_generic_creation_constraint"/>
			<xs:enumeration value = "check_vape"/>
			<xs:enumeration value = "cls_compliant"/>
			<xs:enumeration value = "console_application"/>
			<xs:enumeration value = "dead_code_removal">
				<xs:annotation>
					<xs:documentation>
						Dead code removal level during finalization:
						- none - do not remove any code;
						- feature - remove all features that are reachable neither from the root creation procedure nor from the features marked as visible (this is the default for the previous ECF schemas);
						- all (default) - same as "feature" plus remove all classes that are not used as targets of object creation and not marked as visible.
					</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value = "dotnet_naming_convention"/>
			<xs:enumeration value = "dynamic_runtime"/>
			<xs:enumeration value = "enforce_unique_class_names"/>
			<xs:enumeration value = "exception_trace"/>
			<xs:enumeration value = "executable_name"/>
			<xs:enumeration value = "external_runtime"/>
			<xs:enumeration value = "force_32bits"/>
			<xs:enumeration value = "il_verifiable"/>
			<xs:enumeration value = "inlining"/>
			<xs:enumeration value = "inlining_size"/>
			<xs:enumeration value = "java_generation"/>
			<xs:enumeration value = "library_root"/>
			<xs:enumeration value = "line_generation"/>
			<xs:enumeration value = "manifest_array_type">
				<xs:annotation>
					<xs:documentation>
						An override for an option of the same name to control whether a manifest array type should be checked against a target type of the reattachment the array is involved in. The corresponding value can be one of:
						- default (default) - rely on the option value;
						- standard - force option value "standard" for all code used in the project;
						- mismatch_warning - force option value "mismatch_warning" for all code except the code for which the option is set to "standard";
						- mismatch_error - force option value "mismatch_error" for all code except the code for which the option is set to "standard".
					</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value = "metadata_cache_path"/>
			<xs:enumeration value = "msil_classes_per_module"/>
			<xs:enumeration value = "msil_clr_version"/>
			<xs:enumeration value = "msil_culture"/>
			<xs:enumeration value = "msil_generation"/>
			<xs:enumeration value = "msil_generation_type"/>
			<xs:enumeration value = "msil_key_file_name"/>
			<xs:enumeration value = "msil_use_optimized_precompile"/>
			<xs:enumeration value = "old_feature_replication"/>
			<xs:enumeration value = "old_verbatim_strings"/>
			<xs:enumeration value = "platform"/>
			<xs:enumeration value = "shared_library_definition"/>
			<xs:enumeration value = "total_order_on_reals">
				<xs:annotation>
					<xs:documentation>
						Total order on reals
						- false - apply IEEE 754 standard rules for comparison of floating point numbers;
						- true (default) - force total order on floating point numbers, including NaNs.
					</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value = "use_all_cluster_name_as_namespace"/>
			<xs:enumeration value = "use_cluster_name_as_namespace"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="debug">
		<xs:attribute name="name" type="xs:string" use="required"/>
		<xs:attribute name="enabled" type="xs:boolean" use="required"/>
	</xs:complexType>

	<xs:complexType name="assertions">
		<xs:attribute name="precondition" type="xs:boolean" use="optional"/>
		<xs:attribute name="postcondition" type="xs:boolean" use="optional"/>
		<xs:attribute name="check" type="xs:boolean" use="optional"/>
		<xs:attribute name="invariant" type="xs:boolean" use="optional"/>
		<xs:attribute name="loop" type="xs:boolean" use="optional"/>
		<xs:attribute name="supplier_precondition" type="xs:boolean" use="optional"/>
	</xs:complexType>

	<xs:complexType name="warning">
		<xs:attribute name="name" type="available_warnings" use="required"/>
		<xs:attribute name="enabled" type="xs:boolean" use="required"/>
	</xs:complexType>

	<xs:simpleType name="available_warnings">
		<xs:restriction base = "xs:string">
			  <xs:enumeration value = "export_class_missing"/>
			  <xs:enumeration value = "obsolete_class"/>
			  <xs:enumeration value = "obsolete_feature"/>
			  <xs:enumeration value = "old_verbatim_strings"/>
			  <xs:enumeration value = "once_in_generic"/>
			  <xs:enumeration value = "option_unknown_class"/>
			  <xs:enumeration value = "renaming_unknown_class"/>
			  <xs:enumeration value = "same_uuid"/>
			  <xs:enumeration value = "syntax"/>
			  <xs:enumeration value = "unused_local"/>
			  <xs:enumeration value = "vjrv"/>
			  <xs:enumeration value = "vwab"/>
			  <xs:enumeration value = "vweq"/>
	    </xs:restriction>
	</xs:simpleType>

	<xs:complexType name="variable">
		<xs:attribute name="name" type="xs:string" use="required"/>
		<xs:attribute name="value" type="xs:string" use="required"/>
	</xs:complexType>

	<xs:complexType name="action">
		<xs:sequence>
			<xs:element name="description" type="xs:string" minOccurs="0"/>
			<xs:element name="condition" type="condition" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="command" type="xs:string" use="required"/>
		<xs:attribute name="working_directory" type="xs:string" use="optional"/>
		<xs:attribute name="succeed" type="xs:boolean" use="optional"/>
	</xs:complexType>

	<xs:complexType name="condition">
		<xs:sequence>
			<xs:element name="platform" type="platform" minOccurs="0" maxOccurs="1"/>
			<xs:element name="build" type="build" minOccurs="0" maxOccurs="1"/>
			<xs:element name="concurrency" type="concurrency" minOccurs="0" maxOccurs="1"/>
			<xs:element name="void_safety" type="condition.void_safety" minOccurs="0" maxOccurs="1"/>
			<xs:element name="dotnet" type="dotnet" minOccurs="0" maxOccurs="1"/>
			<xs:element name="dynamic_runtime" type="dynamic_runtime" minOccurs="0" maxOccurs="1"/>
			<xs:element name="version" type="version_condition" minOccurs="0" maxOccurs="1"/>
			<xs:element name="custom" type="custom" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="platform">
		<xs:attribute name="value" type="platform_list"/>
		<xs:attribute name="excluded_value" type="platform_list"/>
	</xs:complexType>

	<xs:simpleType name="platform_list">
		<xs:list itemType="available_platforms"/>
	</xs:simpleType>

	<xs:simpleType name="available_platforms">
		<xs:restriction base = "xs:string">
			  <xs:enumeration value = "windows"/>
			  <xs:enumeration value = "unix"/>
			  <xs:enumeration value = "macintosh"/>
			  <xs:enumeration value = "vxworks"/>
	    </xs:restriction>
	</xs:simpleType>

	<xs:complexType name="build">
		<xs:attribute name="value" type="build_list"/>
		<xs:attribute name="excluded_value" type="build_list"/>
	</xs:complexType>

	<xs:simpleType name="build_list">
		<xs:list itemType="available_builds"/>
	</xs:simpleType>

	<xs:simpleType name="available_builds">
		<xs:restriction base = "xs:string">
			  <xs:enumeration value = "workbench"/>
			  <xs:enumeration value = "finalize"/>
	    </xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="catcall_detection_value">
		<xs:restriction base="xs:string">
			<xs:enumeration value="none"/>
			<xs:enumeration value="conformance"/>
			<xs:enumeration value="all"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="concurrency">
		<xs:attribute name="value"          type="concurrency_list"/>
		<xs:attribute name="excluded_value" type="concurrency_list"/>
	</xs:complexType>

	<xs:simpleType name="concurrency_list">
		<xs:list itemType="concurrency_value"/>
	</xs:simpleType>

	<xs:simpleType name="concurrency_value">
		<xs:restriction base="xs:string">
			  <xs:enumeration value="none"/>
			  <xs:enumeration value="thread"/>
			  <xs:enumeration value="scoop"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="condition.void_safety">
		<xs:attribute name="value"          type="void_safety.list"/>
		<xs:attribute name="excluded_value" type="void_safety.list"/>
	</xs:complexType>

	<xs:simpleType name="void_safety.list">
		<xs:list itemType="void_safety_value"/>
	</xs:simpleType>

	<xs:simpleType name="void_safety_value">
		<xs:annotation>
			<xs:documentation>
				Void-safety rules to be checked:
				- none - no rules are checked, this is the only mode without  attachment marks at run-time
				- conformance - attachment status is taken into account in conformance tests
				- initialization - rules about attribute initialization are checked
				- transitional - all rules except for object creation with incompletely initialized objects
				- complete - all rules
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:enumeration value="none"/>
			<xs:enumeration value="conformance"/>
			<xs:enumeration value="initialization"/>
			<xs:enumeration value="transitional"/>
			<xs:enumeration value="all"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="dotnet">
		<xs:attribute name="value" type="xs:boolean" use="required"/>
	</xs:complexType>

	<xs:simpleType name="code_list">
		<xs:list itemType="code_value"/>
	</xs:simpleType>

	<xs:simpleType name="code_value">
		<xs:restriction base="xs:string">
			  <xs:enumeration value="standard"/>
			  <xs:enumeration value="dotnet"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="dynamic_runtime">
		<xs:attribute name="value" type="xs:boolean" use="required"/>
	</xs:complexType>

	<xs:complexType name="version_condition">
		<xs:attribute type="version_type" name="type"/>
		<xs:attribute type="version_number" name="min" use="optional"/>
		<xs:attribute type="version_number" name="max" use="optional"/>
	</xs:complexType>

	<xs:simpleType name="version_type">
		<xs:restriction base = "xs:string">
			  <xs:enumeration value = "compiler"/>
			  <xs:enumeration value = "msil_clr"/>
	    </xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="version_number">
		<xs:restriction base="xs:string">
			<xs:pattern
				value="\d*(\.\d*){0,3}"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="available_match_types">
		<xs:restriction base = "xs:string">
			  <xs:enumeration value = "case-sensitive"/>
			  <xs:enumeration value = "case-insensitive"/>
			  <xs:enumeration value = "wildcard"/>
			  <xs:enumeration value = "regexp"/>
	    </xs:restriction>
	</xs:simpleType>

	<xs:complexType name="custom">
		<xs:attribute name="name" type="xs:string"/>
		<xs:attribute name="value" type="xs:string" use="optional"/>
		<xs:attribute name="excluded_value" type="xs:string" use="optional"/>
		<xs:attribute name="match" type="available_match_types" use="optional" default="case-sensitive"/>
	</xs:complexType>

	<xs:complexType name="external_location">
		<xs:sequence>
			<xs:element name="description" type="xs:string" minOccurs="0"/>
			<xs:element name="condition" type="condition" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="location" type="location"/>
	</xs:complexType>

	<xs:complexType name="external_value">
		<xs:sequence>
			<xs:element name="description" type="xs:string" minOccurs="0"/>
			<xs:element name="condition" type="condition" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="value" type="xs:string"/>
	</xs:complexType>

	<xs:complexType name="renaming">
		<xs:attribute name="old_name" type="xs:string"/>
		<xs:attribute name="new_name" type="xs:string"/>
	</xs:complexType>

	<xs:complexType name="class_option">
		<xs:complexContent>
			<xs:extension base="option">
				<xs:attribute name="class" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="group" abstract="true">
		<xs:sequence>
			<xs:element name="note" type="note" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="description" type="xs:string" minOccurs="0"/>
			<xs:element name="option" type="option" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="renaming" type="renaming" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="class_option" type="class_option" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="condition" type="condition" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required"/>
		<xs:attribute name="location" type="location" use="required"/>
		<xs:attribute name="readonly" type="xs:boolean" use="optional"/>
		<xs:attribute name="prefix" type="xs:string" use="optional"/>
	</xs:complexType>

	<xs:complexType name="library">
		<xs:complexContent>
			<xs:extension base="group">
				<xs:sequence>
					<xs:element name="visible" type="visible" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:attribute name="use_application_options" type="xs:boolean" use="optional"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="precompile">
		<xs:complexContent>
			<xs:extension base="library">
				<xs:attribute name="eifgens_location" type="xs:string" use="optional"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="assembly">
		<xs:complexContent>
			<xs:extension base="group">
				<xs:attribute name="assembly_name" type="xs:string" use="optional"/>
				<xs:attribute name="assembly_version" type="xs:string" use="optional"/>
				<xs:attribute name="assembly_culture" type="xs:string" use="optional"/>
				<xs:attribute name="assembly_key" type="xs:string" use="optional"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="abstract_cluster" abstract="true">
		<xs:complexContent>
			<xs:extension base="group">
				<xs:sequence>
					<xs:element name="file_rule" type="file_rule" minOccurs="0" maxOccurs="unbounded"/>
					<xs:element name="uses" type="uses" minOccurs="0" maxOccurs="unbounded"/>
					<xs:element name="visible" type="visible" minOccurs="0" maxOccurs="unbounded"/>
					<xs:element name="mapping" type="mapping" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:attribute name="recursive" type="xs:boolean" use="optional"/>
				<xs:attribute name="hidden" type="xs:boolean" use="optional"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="cluster">
		<xs:complexContent>
			<xs:extension base="abstract_cluster">
				<xs:sequence>
					<xs:element name="cluster" type="cluster" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="mapping">
		<xs:attribute name="old_name" type="xs:string" use="required"/>
		<xs:attribute name="new_name" type="xs:string" use="required"/>
	</xs:complexType>

	<xs:complexType name="uses">
		<xs:attribute name="group" type="xs:string" use="required"/>
	</xs:complexType>

	<xs:complexType name="visible">
		<xs:attribute name="class" type="xs:string" use="required"/>
		<xs:attribute name="feature" type="xs:string" use="optional"/>
		<xs:attribute name="class_rename" type="xs:string" use="optional"/>
		<xs:attribute name="feature_rename" type="xs:string" use="optional"/>
	</xs:complexType>

	<xs:complexType name="override">
		<xs:complexContent>
			<xs:extension base="abstract_cluster">
				<xs:sequence>
					<xs:element name="override" type="override" minOccurs="0" maxOccurs="unbounded"/>
					<xs:element name="overrides" type="overrides" minOccurs="0" maxOccurs="1"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="overrides">
		<xs:attribute name="group" type="xs:string" use="required"/>
	</xs:complexType>
</xs:schema>
