<?xml version="1.0" encoding="UTF-8" ?>
<UANodeSet xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd">
	<Extensions>
		<atvise Version="3.13"/>
	</Extensions>
	<NamespaceUris>
		<Uri>http://www.atvise.com/atServer/UA/</Uri>
	</NamespaceUris>
	<Aliases>
		<!-- data types -->
		<Alias Alias="Boolean">i=1</Alias>
		<Alias Alias="SByte">i=2</Alias>
		<Alias Alias="Byte">i=3</Alias>
		<Alias Alias="Int16">i=4</Alias>
		<Alias Alias="UInt16">i=5</Alias>
		<Alias Alias="Int32">i=6</Alias>
		<Alias Alias="UInt32">i=7</Alias>
		<Alias Alias="Int64">i=8</Alias>
		<Alias Alias="UInt64">i=9</Alias>
		<Alias Alias="Float">i=10</Alias>
		<Alias Alias="Double">i=11</Alias>
		<Alias Alias="String">i=12</Alias>
		<Alias Alias="DateTime">i=13</Alias>
		<Alias Alias="ByteString">i=15</Alias>
		<Alias Alias="XmlElement">i=16</Alias>
		<Alias Alias="NodeId">i=17</Alias>
		<Alias Alias="LocalizedText">i=21</Alias>
		<!-- references -->
		<Alias Alias="Organizes">i=35</Alias>
		<Alias Alias="HasEventSource">i=36</Alias>
		<Alias Alias="HasModellingRule">i=37</Alias>
		<Alias Alias="HasTypeDefinition">i=40</Alias>
		<Alias Alias="HasSubtype">i=45</Alias>
		<Alias Alias="HasProperty">i=46</Alias>
		<Alias Alias="HasComponent">i=47</Alias>
		<Alias Alias="HasNotifier">i=48</Alias>
		<Alias Alias="HasCondition">i=9006</Alias>
		<Alias Alias="HasHistoricalConfiguration">i=56</Alias>
		<!-- types -->
		<Alias Alias="BaseDataType">i=24</Alias>
		<Alias Alias="BaseObjectType">i=58</Alias>
		<Alias Alias="FolderType">i=61</Alias>
		<Alias Alias="BaseVariableType">i=62</Alias>
		<Alias Alias="BaseDataVariableType">i=63</Alias>
		<Alias Alias="PropertyType">i=68</Alias>
		<Alias Alias="AlarmConditionStateType">ns=1;i=1001</Alias>
		<!-- modelling rules -->
		<Alias Alias="New">i=78</Alias>
		<Alias Alias="Shared">i=79</Alias>
		<Alias Alias="SharedExclusive">i=336</Alias>
		<!-- other -->
		<Alias Alias="Server">i=2253</Alias>
		<Alias Alias="Objects">i=85</Alias>
	</Aliases>
	<UAObject NodeId="ns=1;s=SYSTEM" BrowseName="1:SYSTEM">
		<DisplayName Locale="en">SYSTEM</DisplayName>
		<Description Locale="en">SYSTEM</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">Objects</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise ExportedNodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.WEBMIMETHODS.UserManagement" ExportedBrowseName="1:UserManagement" Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY" BrowseName="1:LIBRARY">
		<DisplayName Locale="en">LIBRARY</DisplayName>
		<Description Locale="en">LIBRARY</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT" BrowseName="1:PROJECT">
		<DisplayName Locale="en">PROJECT</DisplayName>
		<Description Locale="en">PROJECT</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.WEBMIMETHODS" BrowseName="1:WEBMIMETHODS">
		<DisplayName Locale="en">WEBMIMETHODS</DisplayName>
		<Description Locale="en">WEBMIMETHODS</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.WEBMIMETHODS.UserManagement" BrowseName="1:UserManagement" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">UserManagement</DisplayName>
		<Description Locale="en">UserManagement</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.WEBMIMETHODS</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.ScriptCode</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <metadata>
    <priority>0</priority>
    <owner>root</owner>
    <runcontext>caller</runcontext>
  </metadata>
  <parameter name="session" type="http.request" trigger="false" relative="false" value=""/>
  <code><![CDATA[var mode = session.postvalues.mode;
var result = "";
var check = "";
var writeToLogger = true;

if(session.postvalues.hasOwnProperty("logMessages")){
	writeToLogger = session.postvalues.logMessages == "true";
}
if(session.postvalues.hasOwnProperty("check")){
	check = session.postvalues.check;
}


var UserGroupManager = call("SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager", {"dataRootAddress" : "SYSTEM.SECURITY", "mode": mode, "writeToLogger": writeToLogger, "check": check});

if(mode == "Group"){
	result = UserGroupManager.GroupList();
}
if(mode == "User"){
	result = UserGroupManager.UserList();
}

if (mode == "Add" || mode == "Edit" || mode == "New") { 
	const username = session.postvalues.username;
	const password = session.postvalues.password;
	const fullname = session.postvalues.fullname;
	const defaultdisplay = session.postvalues.defaultdisplay;
	const contentdisplay = session.postvalues.contentdisplay;
	const description = session.postvalues.description;
	const language = session.postvalues.language;
	const superuser = session.postvalues.superuser;
	const opcua = session.postvalues.opcua;
	const webmi = session.postvalues.webmi;
	const password_policy = session.postvalues.password_policy;
	const userNode = Ua.findNode("SYSTEM.SECURITY.USERS." + username);
	const userNodeExist = Ua.Status(userNode) != Ua.Status.BADNODEIDUNKNOWN;
	if (!userNodeExist && mode == "Edit"){
		return {"error": "User node does not exist."+userNodeExist+" ! "+mode};
	} else if(mode == "Add"){
		if (userNodeExist){
			return {"error": "User node already exists."+userNodeExist+" !"+mode};
		} else {
			Ua.createNode("SYSTEM.SECURITY.USERS." + username, {
				nodeClass: Ua.NodeClass.OBJECT,
				parent: "SYSTEM.SECURITY.USERS",
				typeDefinition: "ObjectTypes.ATVISE.User"
			});
		}
	} else if (mode == "New") { 
		if (userNodeExist) {
			return { "error": "User node already exists." + userNodeExist + " !" + mode };
		} else {
			Ua.createNode("SYSTEM.SECURITY.USERS." + username, {
				nodeClass: Ua.NodeClass.OBJECT,
				parent: "SYSTEM.SECURITY.USERS",
				typeDefinition: "ObjectTypes.ATVISE.User"
			});
			return;
		}
	}
	/** Write user data **/
	const superuserNode = Ua.findNode("SYSTEM.SECURITY.USERS." + username + ".superuser");
	superuserNode.result.value = parseInt(superuser);
	const login_opcua = Ua.findNode("SYSTEM.SECURITY.USERS." + username + ".login_opcua");
	login_opcua.result.value = parseInt(opcua);
	const login_webmi = Ua.findNode("SYSTEM.SECURITY.USERS." + username + ".login_webmi");
	login_webmi.result.value = parseInt(webmi);
	if(typeof password_policy !== "undefined"){
		const passwordPolicyNode = Ua.findNode("SYSTEM.SECURITY.USERS." + username + ".ignore_password_policy");
		passwordPolicyNode.result.value = password_policy;
	}
	
	if (typeof fullname !== "undefined") {
		const fullnameNode = Ua.findNode("SYSTEM.SECURITY.USERS." + username + ".name");
		fullnameNode.result.value = fullname;
	}
	
	if (typeof defaultdisplay !== "undefined") {
		const defaultdisplayNode = Ua.findNode("SYSTEM.SECURITY.USERS." + username + ".display_default");
		defaultdisplayNode.result.value = defaultdisplay;
	}
	
	if (typeof contentdisplay !== "undefined") {
		const contentdisplayNode = Ua.findNode("SYSTEM.SECURITY.USERS." + username + ".display_content");
		contentdisplayNode.result.value = contentdisplay;
	}
	
	if (typeof description !== "undefined") {
		const descriptionNode = Ua.findNode("SYSTEM.SECURITY.USERS." + username + ".description");
		descriptionNode.result.value = description;
	}
	
	if (typeof language !== "undefined") {
		console.log("language", language);
		const languageNode = Ua.findNode("SYSTEM.SECURITY.USERS." + username + ".language");
		languageNode.result.value = language;
	}
	
	/** Set user password **/
	if (typeof password != "undefined") {
		const passwordNode = Ua.findNode("AGENT.OPCUA.METHODS.setUserPassword");
		const passwordNodeExist = Ua.Status(passwordNode) != Ua.Status.BADNODEIDUNKNOWN;
	
		if (passwordNodeExist) {
			const response = passwordNode.result.call({
				object: "AGENT.OPCUA.METHODS",
				input: [{"type": Ua.DataType.STRING, "value": username}, {"type": Ua.DataType.STRING, "value": password}]
			});
			if (response.result.error && response.result.error > 0)
				return {"error": "Password could not be written."}
		} else {
			return {"error": "Method setUserPassword not found."};
		}
	}
	
	result = true;
}

if(mode == "saveUsers"){
	var Groups = session.postvalues.groups;
	result = UserGroupManager.GroupList();
	var UserAddress = "SYSTEM.SECURITY.USERS."+check;
	const userNode = Ua.findNode(UserAddress);
	if(Groups){
		for (var i = 0; i < result.length; i++) {
			var GroupAddress = "SYSTEM.SECURITY.GROUPS."+result[i].name;
			if(Groups.includes(result[i].name)){
				if(result[i].usercheck == 0){
					var target = Ua.findNode(GroupAddress);
					var status = target.result.addReference(Ua.Reference.ORGANIZES,userNode.result.nodeId);
				}
			}else{
				if(result[i].usercheck == 1){
					var target = Ua.findNode(GroupAddress);
					var status = target.result.deleteReference(Ua.Reference.ORGANIZES,userNode.result.nodeId);
				}
			}
		}
	}
	else{
		for (var i = 0; i < result.length; i++) {
			var GroupAddress = "SYSTEM.SECURITY.GROUPS."+result[i].name;
			var target = Ua.findNode(GroupAddress);
			var status = target.result.deleteReference(Ua.Reference.ORGANIZES,userNode.result.nodeId);
		}
	}
}

if(mode == "saveGroups"){
	var Users = session.postvalues.users;
	result = UserGroupManager.UserList();
	var GroupAddress = "SYSTEM.SECURITY.GROUPS."+check;
	const GroupNode = Ua.findNode(GroupAddress);
	if(Users){
		for (var i = 0; i < result.length; i++) {
			var UserAddress = "SYSTEM.SECURITY.USERS."+result[i].username;
			if(Users.includes(result[i].username)){
				if(result[i].usercheck == 0){
					var userNode = Ua.findNode(UserAddress);
					var status = GroupNode.result.addReference(Ua.Reference.ORGANIZES,userNode.result.nodeId);
				}
			}else{
				if(result[i].usercheck == 1){
					var userNode = Ua.findNode(UserAddress);
					var status = GroupNode.result.deleteReference(Ua.Reference.ORGANIZES,userNode.result.nodeId);
				}
			}
		}
	}
	else{
		for (var i = 0; i < result.length; i++) {
			var UserAddress = "SYSTEM.SECURITY.USERS."+result[i].username;
			var userNode = Ua.findNode(UserAddress);
			var status = GroupNode.result.deleteReference(Ua.Reference.ORGANIZES,userNode.result.nodeId);
		}
	}
}

if(mode == "Delete"){
	const username = session.postvalues.username;
	const useraddress = "SYSTEM.SECURITY.USERS." + username;
	const userNode = Ua.findNode(useraddress);
	var status = userNode.result.remove();
	result = status.result;
}



return result;]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAObject NodeId="ns=1;s=SYSTEM" BrowseName="1:SYSTEM">
		<DisplayName Locale="en">SYSTEM</DisplayName>
		<Description Locale="en">SYSTEM</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">Objects</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise ExportedNodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement" ExportedBrowseName="1:UserManagement" Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY" BrowseName="1:LIBRARY">
		<DisplayName Locale="en">LIBRARY</DisplayName>
		<Description Locale="en">LIBRARY</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT" BrowseName="1:PROJECT">
		<DisplayName Locale="en">PROJECT</DisplayName>
		<Description Locale="en">PROJECT</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS" BrowseName="1:SERVERSCRIPTS">
		<DisplayName Locale="en">SERVERSCRIPTS</DisplayName>
		<Description Locale="en">SERVERSCRIPTS</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement" BrowseName="1:UserManagement">
		<DisplayName Locale="en">UserManagement</DisplayName>
		<Description Locale="en">UserManagement</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
	</UAObject>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager" BrowseName="1:UserGroupManager" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">UserGroupManager</DisplayName>
		<Description Locale="en">UserGroupManager</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.ScriptCode</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <metadata>
    <priority>0</priority>
    <owner>root</owner>
    <runcontext>caller</runcontext>
  </metadata>
  <parameter name="dataRootAddress" type="string" trigger="false" relative="false" value=""/>
  <parameter name="mode" type="string" trigger="false" relative="false" value=""/>
  <parameter name="check" type="string" trigger="false" relative="false" value=""/>
  <parameter name="writeToLogger" type="boolean" trigger="false" relative="false" value=""/>
  <code><![CDATA[function UserGroupManager(){
	var dataRoot = dataRootAddress;
	var tablemode = mode;
	var Check = check;
	var nodeId;
	var ReturnList = [];
	var CkeckList = [];
	var UserCheck = 0;
	var logger = {
		persistMessages: writeToLogger,
		user: "", //userNameForLogger
		types: {
			error: {
				group: "atvise", //webMI.query.logger_group_error,
				subgroup: "Error", //webMI.query.logger_subgroup_error,
				label: "User Management" //webMI.query.logger_label_error
			},
			warn: {
				group: "atvise", //webMI.query.logger_group_error,
				subgroup: "Warning", //webMI.query.logger_subgroup_error,
				label: "User Management" //webMI.query.logger_label_error
			},
			info: {
				group: "atvise", //webMI.query.logger_group_info,
				subgroup: "Info", //webMI.query.logger_subgroup_info,
				label: "User Management" //webMI.query.logger_label_info
			}
		}
	};
	
	this.log = function(type, msg) {
		if (!logger.persistMessages) {
			return;
		}		
		var writeObj = {
			user: logger.user,
			message: msg
		};
		
		if (type in logger.types) {
			writeObj.group = logger.types[type].group;
			writeObj.subgroup = logger.types[type].subgroup;
			writeObj.label = logger.types[type].label;
		} else {
			writeObj.group = "atvise";
			writeObj.subgroup = "Error";
			writeObj.label = "Recipe Management";
		}
		call("Logger.WriteLog", writeObj);
	};
	
	
	
	
		
	this.GroupList = function(){
		nodeId = dataRoot+".GROUPS";
		var node = Ua.findNode(nodeId);
		var result = node.result.browse({
			direction: Ua.Node.BROWSEDIRECTION_FORWARD,
			  reference: Ua.Reference.HIERARCHICALREFERENCES,
			  subType: true,
			  nodeClass: Ua.NodeClass.UNSPECIFIED,
			  maxResult:0,
			  recursive: false
		});		
		for (var i = 0; i < result.result.length; i++) {
			var value = result.result[i]["node"]["value"];
			var GroupName = result.result[i]["node"]["browseName"]["name"];
			var GroupAddress = result.result[i]["node"]["nodeaddr"];
			var DescriptionNode = Ua.findNode(GroupAddress+".description");
			var Description = DescriptionNode.result ? DescriptionNode.result.value : null;
			var PrivateNode = Ua.findNode(GroupAddress+".private");
			var Private = PrivateNode.result ? PrivateNode.result.value : null;
			
			if(GroupName != "Anonymous" && GroupName != "AuthenticatedUser" && GroupName.toLowerCase() != "private"){
				CkeckList = [];				
				if(Check){
					var ChecknodeId = GroupAddress;
					var Checknode = Ua.findNode(ChecknodeId);
					var User = Checknode.result.browse({
						direction: Ua.Node.BROWSEDIRECTION_FORWARD,
						reference: Ua.Reference.HIERARCHICALREFERENCES,
						subType: true,
						nodeClass: Ua.NodeClass.UNSPECIFIED,
						maxResult:0,
						recursive: false
					});
					for (var j = 0; j < User.result.length; j++) {
						var CheckUserName = User.result[j]["node"]["browseName"]["name"];
						if(User.result[j]["node"]["typeDefinition"]["xml"] == "ns=1;s=ObjectTypes.ATVISE.User" && CheckUserName == Check){
							CkeckList.push(CheckUserName);
						}
					}
				}
				if(Check && CkeckList.includes(Check)){
					UserCheck = 1;				
				}else{
					UserCheck = 0;	
				}					
				ReturnList.push({name: GroupName, description: Description != undefined ? Description : "", private: Private, usercheck:UserCheck});
			}
		}
		return ReturnList;
	}

	
	this.UserList = function(){
		nodeId = dataRoot+".USERS";
		var node = Ua.findNode(nodeId);
		var result = node.result.browse({
			direction: Ua.Node.BROWSEDIRECTION_FORWARD,
			  reference: Ua.Reference.HIERARCHICALREFERENCES,
			  subType: true,
			  nodeClass: Ua.NodeClass.UNSPECIFIED,
			  maxResult:0,
			  recursive: false
		});
		if(Check){
			nodeId = dataRoot+".GROUPS."+Check;
			var node = Ua.findNode(nodeId);
			var Group = node.result.browse({
				direction: Ua.Node.BROWSEDIRECTION_FORWARD,
				reference: Ua.Reference.HIERARCHICALREFERENCES,
				subType: true,
				nodeClass: Ua.NodeClass.UNSPECIFIED,
				maxResult:0,
				recursive: false
			});
			for (var i = 0; i < Group.result.length; i++) {
				var CheckUserName = Group.result[i]["node"]["browseName"]["name"];
				if(Group.result[i]["node"]["typeDefinition"]["xml"] == "ns=1;s=ObjectTypes.ATVISE.User"){
					CkeckList.push(CheckUserName);
				}
			}			
		}
	
		for (var i = 0; i < result.result.length; i++) {
			var value = result.result[i]["node"]["value"];
			var UserName = result.result[i]["node"]["browseName"]["name"];
			var UserAddress = result.result[i]["node"]["nodeaddr"];
			var DescriptionNode = Ua.findNode(UserAddress+".description");
			var Description = DescriptionNode.result.value;
			var languageNode = Ua.findNode(UserAddress+".language");
			var Language = languageNode.result.value;
			var NameNode = Ua.findNode(UserAddress+".name");
			var Name = NameNode.result.value;
			var SuperUserNode = Ua.findNode(UserAddress+".superuser");
			var SuperUser = SuperUserNode.result.value;
			if(Check && CkeckList.includes(UserName)){
				UserCheck = 1;				
			}else{
				UserCheck = 0;	
			}
			if(UserName != "root"){
				ReturnList.push({username: UserName, name: Name, description: Description, language: Language, superuser:SuperUser, usercheck:UserCheck});
			}
		}
		return ReturnList;
	}
}


return new UserGroupManager();]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager.NodePermission" BrowseName="1:NodePermission" DataType="String" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">NodePermission</DisplayName>
		<Description Locale="en">NodePermission</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.AccessControl.Node</Reference>
			<Reference ReferenceType="HasModellingRule">SharedExclusive</Reference>
		</References>
		<Value>
			<uax:String>{&quot;Anonymous&quot;:&quot;browse&quot;,&quot;AuthenticatedUser&quot;:&quot;execute&quot;}</uax:String>
		</Value>
	</UAVariable>
	<UAObject NodeId="ns=1;s=SYSTEM" BrowseName="1:SYSTEM">
		<DisplayName Locale="en">SYSTEM</DisplayName>
		<Description Locale="en">SYSTEM</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">Objects</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise ExportedNodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS" ExportedBrowseName="1:OBJECTDISPLAYS" Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY" BrowseName="1:LIBRARY">
		<DisplayName Locale="en">LIBRARY</DisplayName>
		<Description Locale="en">LIBRARY</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT" BrowseName="1:PROJECT">
		<DisplayName Locale="en">PROJECT</DisplayName>
		<Description Locale="en">PROJECT</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS" BrowseName="1:OBJECTDISPLAYS">
		<DisplayName Locale="en">OBJECTDISPLAYS</DisplayName>
		<Description Locale="en">OBJECTDISPLAYS</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.LAYOUTS" BrowseName="1:LAYOUTS">
		<DisplayName Locale="en">LAYOUTS</DisplayName>
		<Description Locale="en">LAYOUTS</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced" BrowseName="1:Advanced">
		<DisplayName Locale="en">Advanced</DisplayName>
		<Description Locale="en">Advanced</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement" BrowseName="1:usermanagement">
		<DisplayName Locale="en">usermanagement</DisplayName>
		<Description Locale="en">usermanagement</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
	</UAObject>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.group_manager" BrowseName="1:group_manager" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">group_manager</DisplayName>
		<Description Locale="en">group_manager</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.Display</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<svg height="760.6" version="1.2" width="1678.46" xmlns="http://www.w3.org/2000/svg" xmlns:atv="http://webmi.atvise.com/2007/svgext" xmlns:xlink="http://www.w3.org/1999/xlink">
 <desc>Table display for users and groups.</desc>
 <title>Group Table</title>
 <defs/>
 <metadata>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvObjectDisplays.UserManager.GroupColumns" desc="configuration for groups" group="Columns" name="columnsGroups" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvObjectDisplays.UserManager.UserColumns" desc="configuration for users" group="Columns" name="columnsUsers" valuetype="global"/>
  <atv:parameter behavior="mandatory" defaultvalue="atvise_group" desc="table ID group" group="Table" name="tableID1" valuetype="string"/>
  <atv:parameter behavior="mandatory" defaultvalue="atvise_user" desc="table ID user" group="Table" name="tableID2" valuetype="string"/>
  <atv:parameter behavior="optional" defaultvalue="35" desc="table header height" group="Table" name="header_height" valuetype="number"/>
  <atv:parameter behavior="optional" defaultvalue="40" desc="table row height" group="Table" name="row_height" valuetype="number"/>
  <atv:parameter behavior="optional" config="Arial;Courier;Tahoma;Verdana" defaultvalue="Arial" desc="font family" group="Font" name="font_family" valuetype="enum"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFontColor" desc="font color" group="Font" name="globalFontColor" substitute="$FONTCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="12" desc="table header font size" group="Font" name="header_font_size" valuetype="number"/>
  <atv:parameter behavior="optional" defaultvalue="18" desc="table row font size" group="Font" name="row_font_size" valuetype="number"/>
  <atv:parameter behavior="optional" defaultvalue="12" desc="table detail font size" group="Font" name="detail_font_size" valuetype="number"/>
  <atv:parameter behavior="optional" defaultvalue="12" desc="table footer font size" group="Font" name="footer_font_size" valuetype="number"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvBorderColor" desc="border color" group="Appearance" name="globalBorderColor" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFillColor" desc="fill color" group="Appearance" name="globalFillColor" substitute="$FILLCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="#d7d7d7" desc="button background" group="Appearance" name="btn_button_bg" valuetype="color"/>
  <atv:gridconfig enabled="false" gridstyle="lines" height="10" width="10"/>
  <atv:snapconfig enabled="true" height="10" width="10"/>
 </metadata>
 <svg atv:refpx="416.391" atv:refpy="404.22" height="640" id="atvise_group" transform="matrix(1.3003,0,0,1.0955,0,0)" width="640" x="0.265" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.slickgrid.table" y="52.899">
  <atv:argument name="header_height" prefix="header_height" value=""/>
  <atv:argument name="row_height" prefix="row_height" value=""/>
  <atv:argument name="row_text_size" prefix="row_font_size" value=""/>
  <atv:argument name="tableID" prefix="tableID1" value=""/>
  <atv:argument name="header_text_size" prefix="header_font_size" value=""/>
  <atv:argument name="detail_text_size" prefix="detail_font_size" value=""/>
  <atv:argument name="footer_text_size" prefix="footer_font_size" value=""/>
  <atv:argument name="font_family" prefix="font_family"/>
  <atv:argument name="globalBorderColor" prefix="globalBorderColor" value="SYSTEM.GLOBALS."/>
  <atv:argument name="globalFillColor" prefix="globalFillColor" value="SYSTEM.GLOBALS."/>
  <atv:argument name="globalFontColor" prefix="globalFontColor" value="SYSTEM.GLOBALS."/>
  <atv:argument name="header_text_horizontal" value="center"/>
  <atv:argument name="multiselect" value="false"/>
 </svg>
 <text atv:refpx="63.113" atv:refpy="27.519" fill="#575757" font-family="Arial" font-size="20" id="Header_1" transform="matrix(1.3105,0,0,1.3105,-4.8128,-0.8126)" x="20.5" y="26.117">T{Groups}:</text>
 <svg atv:refpx="1261.965" atv:refpy="405.262" height="640" id="atvise_user" transform="matrix(1.3003,0,0,1.0955,0,0)" width="640" x="646.005" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.slickgrid.table" y="52.944">
  <atv:argument name="header_height" prefix="header_height" value=""/>
  <atv:argument name="row_height" prefix="row_height" value=""/>
  <atv:argument name="row_text_size" prefix="row_font_size" value=""/>
  <atv:argument name="tableID" prefix="tableID2" value=""/>
  <atv:argument name="header_text_size" prefix="header_font_size" value=""/>
  <atv:argument name="detail_text_size" prefix="detail_font_size" value=""/>
  <atv:argument name="footer_text_size" prefix="footer_font_size" value=""/>
  <atv:argument name="font_family" prefix="font_family"/>
  <atv:argument name="globalBorderColor" prefix="globalBorderColor" value="SYSTEM.GLOBALS."/>
  <atv:argument name="globalFillColor" prefix="globalFillColor" value="SYSTEM.GLOBALS."/>
  <atv:argument name="globalFontColor" prefix="globalFontColor" value="SYSTEM.GLOBALS."/>
  <atv:argument name="header_text_horizontal" value="center"/>
 </svg>
 <text atv:refpx="918.03" atv:refpy="27.519" fill="#575757" font-family="Arial" font-size="20" id="Header_2" transform="matrix(1.3105,0,0,1.3105,-263.2325,-0.8126)" x="852.77" y="26.117">T{Users}:</text>
 <text atv:refpx="1073.668" atv:refpy="27.519" fill="#575757" font-family="Arial" font-size="20" id="txtRecipeName" transform="matrix(1.3105,0,0,1.3105,-332.5998,-0.8126)" x="1075.175" y="26.117"/>
 <rect atv:refpx="416.588" atv:refpy="409.538" fill="none" height="701.125" id="id_11" stroke="$FILLCOLOR$" stroke-width="1" width="832.176" x="0.5" y="58.975"/>
 <rect atv:refpx="1261.87" atv:refpy="409.538" fill="none" height="701.125" id="id_8" stroke="$FILLCOLOR$" stroke-width="1" width="832.176" x="845.782" y="58.975"/>
 <script atv:desc="" atv:href="SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.global_list_handling" atv:name="" atv:type="text/ecmascript"/>
 <script atv:desc="" atv:href="SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.group_manager" atv:name="" atv:type="text/ecmascript"/>
 <script atv:desc="" atv:name="" type="text/ecmascript"/>
</svg>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.save_changes" BrowseName="1:save_changes" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">save_changes</DisplayName>
		<Description Locale="en">save_changes</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.Display</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<svg height="200" version="1.2" width="430" xmlns="http://www.w3.org/2000/svg" xmlns:atv="http://webmi.atvise.com/2007/svgext" xmlns:xlink="http://www.w3.org/1999/xlink">
 <desc>Dialog to save or cancel changes.</desc>
 <title>Save Dialog</title>
 <defs/>
 <metadata>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFontColor" desc="Font Color" name="FontColor" substitute="$FONTCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFillColor" desc="Fill Color" name="FillColor" substitute="$FILLCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.60x60.user" desc="Synbol" name="Symbol" substitute="$SYMBOL$" valuetype="address"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvSymbolColor" desc="Symbol Color" name="SymbolColor" substitute="$SYMBOLCOLOR$" valuetype="global"/>
  <atv:gridconfig enabled="true" gridstyle="lines" height="20" width="20"/>
  <atv:snapconfig enabled="false" height="10" width="10"/>
 </metadata>
 <rect atv:refpx="214.769" atv:refpy="98.979" fill="$FILLCOLOR$" height="199.958" id="id_3" stroke="none" stroke-width="2" width="429.539" x="0" y="-1"/>
 <svg atv:refpx="102.5" atv:refpy="157.549" height="30" id="save_button" transform="matrix(2.0625,0,0,1.5,0,0)" width="80" x="9.697" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="90.033">
  <atv:argument name="label" value="T{save}"/>
  <atv:overwrite height="43" id="id_6" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="34"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="19"/>
  <atv:overwrite id="button_label" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="27"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="38.792"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="17.459"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.4848,0,0,0.6667,0,0)" x="72.5" y="12.5"/>
  <atv:overwrite height="41" id="button_stroke" transform="matrix(0.4848,0,0,0.6667,0,0)" width="161"/>
  <atv:overwrite height="43" id="button_bg" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite height="45" id="outer_frame" transform="matrix(0.4848,0,0,0.6667,0,0)" width="165"/>
 </svg>
 <svg atv:refpx="325.891" atv:refpy="156.06" height="30" id="cancel_button" transform="matrix(2.0625,0,0,1.5,0,0)" width="80" x="118.788" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="90.113">
  <atv:argument name="label" value="T{Cancel}"/>
  <atv:overwrite height="43" id="id_6" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="34"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="19"/>
  <atv:overwrite id="button_label" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="27"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="38.792"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="17.459"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.4848,0,0,0.6667,0,0)" x="72.5" y="12.5"/>
  <atv:overwrite height="41" id="button_stroke" transform="matrix(0.4848,0,0,0.6667,0,0)" width="161"/>
  <atv:overwrite height="43" id="button_bg" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite height="45" id="outer_frame" transform="matrix(0.4848,0,0,0.6667,0,0)" width="165"/>
 </svg>
 <text atv:refpx="236.382" atv:refpy="60.371" fill="$FONTCOLOR$" font-family="Arial" font-size="28" id="id_2" text-anchor="middle" x="236.382" y="70.372">T{Save Change}?</text>
 <svg atv:refpx="58.198" atv:refpy="58.198" height="60" id="id_5" transform="matrix(1.2667,0,0,1.2667,0,0)" width="60" x="15.946" xlink:href="$SYMBOL$" y="15.945">
  <atv:argument name="symbolColor" prefix="SymbolColor"/>
 </svg>
 <text atv:refpx="209.24" atv:refpy="-27.907" fill="$FONTCOLOR$" font-family="Arial" font-size="24" id="username" text-anchor="middle" x="209.24" y="-17.907">&lt;username></text>
 <script atv:desc="" atv:href="SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.save_changes" atv:name="save changes" atv:type="text/ecmascript"/>
 <script atv:desc="" atv:name="" type="text/ecmascript"/>
</svg>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_add" BrowseName="1:user_add" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">user_add</DisplayName>
		<Description Locale="en">user_add</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.Display</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<svg height="600" version="1.2" width="860" xmlns="http://www.w3.org/2000/svg" xmlns:atv="http://webmi.atvise.com/2007/svgext" xmlns:xlink="http://www.w3.org/1999/xlink">
 <desc>Display for changing user information and password.</desc>
 <title>User Editor</title>
 <defs/>
 <rect atv:refpx="215" atv:refpy="300" fill="$FILLCOLOR$" height="600" id="background" stroke="none" stroke-width="0" width="860" x="0" y="0"/>
 <metadata>
  <atv:parameter behavior="optional" defaultvalue="T{Add user}" desc="headline" name="headline" substitute="$HEADLINE$" valuetype="trstring"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.user" desc="symbol" name="symbol" substitute="$SYMBOL$" valuetype="display"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.keyboard.keyboard" desc="keyboard display" name="keyboard" valuetype="display"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFontColor" desc="font color" name="fontColor" substitute="$FONTCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFillColor" desc="fill color" name="fillColor" substitute="$FILLCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvSymbolColor" desc="symbol color" name="symbolColor" substitute="$SYMBOLCOLOR$" valuetype="global"/>
  <atv:gridconfig enabled="true" gridstyle="lines" height="20" width="20"/>
  <atv:snapconfig enabled="true" height="10" width="10"/>
 </metadata>
 <rect atv:refpx="223.858" atv:refpy="-5" fill="#ffffff" height="50" id="password_background" rx="10" ry="10" stroke="none" stroke-width="0" width="390" x="430" y="90"/>
 <rect atv:refpx="215" atv:refpy="235" fill="#ffffff" height="50" id="fullname_background" rx="10" ry="10" stroke="none" stroke-width="0" width="390" x="20" y="154"/>
 <rect atv:refpx="4.286" atv:refpy="165" fill="none" height="50" id="id_1" rx="5.961" ry="5.961" stroke="none" stroke-width="0" width="200" x="110" y="154"/>
 <svg atv:dynamic="true" atv:refpx="322.5" atv:refpy="490" height="30" id="save_button" transform="matrix(2.0625,0,0,1.5,0,0)" width="80" x="116.364" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="351.667">
  <atv:argument name="label" value="T{Save}"/>
  <atv:argument name="tabIndex" value="11"/>
  <atv:argument name="borderVisible" value="true"/>
  <atv:argument name="extraBorderColor" value="#ffffff"/>
  <atv:overwrite height="43" id="id_6" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="34"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="19"/>
  <atv:overwrite id="button_label" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="27"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="38.792"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="17.459"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.4848,0,0,0.6667,0,0)" x="72.5" y="12.5"/>
  <atv:overwrite height="41" id="button_stroke" transform="matrix(0.4848,0,0,0.6667,0,0)" width="161"/>
  <atv:overwrite height="43" id="button_bg" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite height="45" id="outer_frame" transform="matrix(0.4848,0,0,0.6667,0,0)" width="165"/>
 </svg>
 <svg atv:dynamic="true" atv:refpx="543.499" atv:refpy="490" height="30" id="cancel_button" transform="matrix(2.0625,0,0,1.5,0,0)" width="80" x="223.515" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="351.667">
  <atv:argument name="label" value="T{Cancel}"/>
  <atv:argument name="tabIndex" value="12"/>
  <atv:argument name="borderVisible" value="true"/>
  <atv:argument name="extraBorderColor" value="#ffffff"/>
  <atv:overwrite height="43" id="id_6" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="34"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="19"/>
  <atv:overwrite id="button_label" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="27"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="38.792"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="17.459"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.4848,0,0,0.6667,0,0)" x="72.5" y="12.5"/>
  <atv:overwrite height="41" id="button_stroke" transform="matrix(0.4848,0,0,0.6667,0,0)" width="161"/>
  <atv:overwrite height="43" id="button_bg" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite height="45" id="outer_frame" transform="matrix(0.4848,0,0,0.6667,0,0)" width="165"/>
 </svg>
 <svg atv:refpx="260" atv:refpy="235" height="30" id="fullname_input" transform="matrix(1.125,0,0,1,0,0)" width="160" x="151.111" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.in_out_value" y="164">
  <atv:argument name="validation" value="String"/>
  <atv:argument name="allowDirectInput" value="Yes"/>
  <atv:argument name="tabIndex" value="3"/>
  <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="174.5"/>
  <atv:overwrite id="input_label" transform="matrix(0.8889,0,0,1,0,0)" x="172.055"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.8889,0,0,1,0,0)" width="176"/>
  <atv:overwrite id="input_bg" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="id_1" transform="matrix(0.8889,0,0,1,0,0)" width="178"/>
  <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="180"/>
 </svg>
 <text atv:refpx="77.763" atv:refpy="177.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="fullname_label" x="34" y="183.5">T{Full name}</text>
 <text atv:refpx="488.5" atv:refpy="113.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="password_label" x="444" y="119.5">T{Password}</text>
 <text atv:refpx="216" atv:refpy="51" fill="$FONTCOLOR$" font-family="Arial" font-size="12" id="status_message2" text-anchor="middle" x="216" y="55.5"/>
 <svg atv:dynamic="true" atv:refpx="375" atv:refpy="235" height="30" id="fullname_keyboard" transform="matrix(0.375,0,0,1,0,0)" width="80" x="960" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="164">
  <atv:argument name="symbol" value="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.keyboard"/>
  <atv:argument name="visibilitySymbol" value="inherit"/>
  <atv:argument name="visibilityLabel" value="hidden"/>
  <atv:argument name="tabIndex" value="4"/>
  <atv:overwrite id="id_2" transform="matrix(2.6667,0,0,1,0,0)" width="24.5"/>
  <atv:overwrite id="id_0" transform="matrix(2.6667,0,0,1,0,0)" width="29.5"/>
  <atv:overwrite id="id_1" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
  <atv:overwrite id="id_6" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="button_label_2" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label_1" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol" transform="matrix(2.6667,0,0,1,0,0)" x="5"/>
  <atv:overwrite id="button_stroke" transform="matrix(2.6667,0,0,1,0,0)" width="26"/>
  <atv:overwrite id="button_bg" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="outer_frame" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
 </svg>
 <svg atv:dynamic="true" atv:refpx="785" atv:refpy="65" height="30" id="password_keyboard" transform="matrix(0.375,0,0,1,0,0)" width="80" x="2053.333" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="100">
  <atv:argument name="symbol" value="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.keyboard"/>
  <atv:argument name="visibilitySymbol" value="inherit"/>
  <atv:argument name="visibilityLabel" value="hidden"/>
  <atv:argument name="tabIndex" value="2"/>
  <atv:overwrite id="id_2" transform="matrix(2.6667,0,0,1,0,0)" width="24.5"/>
  <atv:overwrite id="id_0" transform="matrix(2.6667,0,0,1,0,0)" width="29.5"/>
  <atv:overwrite id="id_1" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
  <atv:overwrite id="id_6" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="button_label_2" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label_1" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol" transform="matrix(2.6667,0,0,1,0,0)" x="5"/>
  <atv:overwrite id="button_stroke" transform="matrix(2.6667,0,0,1,0,0)" width="26"/>
  <atv:overwrite id="button_bg" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="outer_frame" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
 </svg>
 <svg atv:refpx="62.317" atv:refpy="45.934" height="20" id="symbol" transform="matrix(3.1935,0,0,3.1935,0,0)" width="20" x="11.859" xlink:href="$SYMBOL$" y="4.384">
  <atv:argument name="symbolColor" prefix="symbolColor"/>
 </svg>
 <text atv:refpx="224" atv:refpy="49" fill="$FONTCOLOR$" font-family="Arial" font-size="20" id="headline" text-anchor="middle" x="236.5" y="53.5">$HEADLINE$</text>
 <rect atv:refpx="-186.142" atv:refpy="175" fill="#ffffff" height="50" id="language_background" rx="10" ry="10" stroke="none" stroke-width="0" width="390" x="20" y="214"/>
 <text atv:refpx="78.949" atv:refpy="237.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="language_label" x="34" y="243.5">T{Language}</text>
 <rect atv:refpx="-186.142" atv:refpy="235" fill="#ffffff" height="50" id="default_background" rx="10" ry="10" stroke="none" stroke-width="0" width="390" x="20" y="274"/>
 <text atv:refpx="96.935" atv:refpy="297.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="default_label" x="33.688" y="303.5">T{Default Display}</text>
 <rect atv:refpx="-186.142" atv:refpy="295" fill="#ffffff" height="50" id="content_background" rx="10" ry="10" stroke="none" stroke-width="0" width="390" x="20" y="334"/>
 <text atv:refpx="99.578" atv:refpy="357.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="content_label" x="34" y="363.5">T{Content Display}</text>
 <text atv:refpx="437.328" atv:refpy="512" fill="#ff0004" font-family="Arial" font-size="14" id="error_message" text-anchor="middle" x="437.328" y="517">&lt;errormessage></text>
 <svg atv:refpx="260" atv:refpy="305" height="30" id="display_default_input" transform="matrix(1.125,0,0,1,0,0)" width="160" x="151.111" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.in_out_value" y="284">
  <atv:argument name="validation" value="String"/>
  <atv:argument name="allowDirectInput" value="Yes"/>
  <atv:argument name="tabIndex" value="7"/>
  <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="174.5"/>
  <atv:overwrite id="input_label" transform="matrix(0.8889,0,0,1,0,0)" x="172.055"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.8889,0,0,1,0,0)" width="176"/>
  <atv:overwrite id="input_bg" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="id_1" transform="matrix(0.8889,0,0,1,0,0)" width="178"/>
  <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="180"/>
 </svg>
 <svg atv:refpx="260" atv:refpy="365" height="30" id="display_content_input" transform="matrix(1.125,0,0,1,0,0)" width="160" x="151.111" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.in_out_value" y="344">
  <atv:argument name="validation" value="String"/>
  <atv:argument name="allowDirectInput" value="Yes"/>
  <atv:argument name="tabIndex" value="9"/>
  <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="174.5"/>
  <atv:overwrite id="input_label" transform="matrix(0.8889,0,0,1,0,0)" x="172.055"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.8889,0,0,1,0,0)" width="176"/>
  <atv:overwrite id="input_bg" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="id_1" transform="matrix(0.8889,0,0,1,0,0)" width="178"/>
  <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="180"/>
 </svg>
 <svg atv:dynamic="true" atv:refpx="375" atv:refpy="305" height="30" id="display_default_keyboard" transform="matrix(0.375,0,0,1,0,0)" width="80" x="960" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="284">
  <atv:argument name="symbol" value="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.keyboard"/>
  <atv:argument name="visibilitySymbol" value="inherit"/>
  <atv:argument name="visibilityLabel" value="hidden"/>
  <atv:argument name="tabIndex" value="8"/>
  <atv:overwrite id="id_2" transform="matrix(2.6667,0,0,1,0,0)" width="24.5"/>
  <atv:overwrite id="id_0" transform="matrix(2.6667,0,0,1,0,0)" width="29.5"/>
  <atv:overwrite id="id_1" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
  <atv:overwrite id="id_6" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="button_label_2" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label_1" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol" transform="matrix(2.6667,0,0,1,0,0)" x="5"/>
  <atv:overwrite id="button_stroke" transform="matrix(2.6667,0,0,1,0,0)" width="26"/>
  <atv:overwrite id="button_bg" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="outer_frame" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
 </svg>
 <svg atv:dynamic="true" atv:refpx="375" atv:refpy="365" height="30" id="display_content_keyboard" transform="matrix(0.375,0,0,1,0,0)" width="80" x="960" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="344">
  <atv:argument name="symbol" value="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.keyboard"/>
  <atv:argument name="visibilitySymbol" value="inherit"/>
  <atv:argument name="visibilityLabel" value="hidden"/>
  <atv:argument name="tabIndex" value="10"/>
  <atv:overwrite id="id_2" transform="matrix(2.6667,0,0,1,0,0)" width="24.5"/>
  <atv:overwrite id="id_0" transform="matrix(2.6667,0,0,1,0,0)" width="29.5"/>
  <atv:overwrite id="id_1" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
  <atv:overwrite id="id_6" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="button_label_2" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label_1" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol" transform="matrix(2.6667,0,0,1,0,0)" x="5"/>
  <atv:overwrite id="button_stroke" transform="matrix(2.6667,0,0,1,0,0)" width="26"/>
  <atv:overwrite id="button_bg" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="outer_frame" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
 </svg>
 <rect atv:refpx="215" atv:refpy="115" fill="#ffffff" height="50" id="id_3" rx="10" ry="10" stroke="none" stroke-width="0" width="390" x="20" y="90"/>
 <rect atv:refpx="4.286" atv:refpy="45" fill="none" height="50" id="id_5" rx="5.961" ry="5.961" stroke="none" stroke-width="0" width="200" x="110" y="90"/>
 <svg atv:refpx="260" atv:refpy="115" height="30" id="username_input" transform="matrix(1.125,0,0,1,0,0)" width="160" x="151.111" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.in_out_value" y="100">
  <atv:argument name="validation" value="String"/>
  <atv:argument name="allowDirectInput" value="Yes"/>
  <atv:argument name="tabIndex" value="3"/>
  <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="174.5"/>
  <atv:overwrite id="input_label" transform="matrix(0.8889,0,0,1,0,0)" x="172.055"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.8889,0,0,1,0,0)" width="176"/>
  <atv:overwrite id="input_bg" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="id_1" transform="matrix(0.8889,0,0,1,0,0)" width="178"/>
  <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="180"/>
 </svg>
 <text atv:refpx="80.304" atv:refpy="113.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="username_label" x="34" y="119.5">T{Username}</text>
 <svg atv:dynamic="true" atv:refpx="375" atv:refpy="115" height="30" id="username_keyboard" transform="matrix(0.375,0,0,1,0,0)" width="80" x="960" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="100">
  <atv:argument name="symbol" value="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.keyboard"/>
  <atv:argument name="visibilitySymbol" value="inherit"/>
  <atv:argument name="visibilityLabel" value="hidden"/>
  <atv:argument name="tabIndex" value="4"/>
  <atv:overwrite id="id_2" transform="matrix(2.6667,0,0,1,0,0)" width="24.5"/>
  <atv:overwrite id="id_0" transform="matrix(2.6667,0,0,1,0,0)" width="29.5"/>
  <atv:overwrite id="id_1" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
  <atv:overwrite id="id_6" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="button_label_2" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label_1" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol" transform="matrix(2.6667,0,0,1,0,0)" x="5"/>
  <atv:overwrite id="button_stroke" transform="matrix(2.6667,0,0,1,0,0)" width="26"/>
  <atv:overwrite id="button_bg" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="outer_frame" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
 </svg>
 <script atv:desc="" atv:href="SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.user_add" atv:name="user_add" atv:type="text/ecmascript"/>
 <script atv:desc="" atv:name="" type="text/ecmascript"><![CDATA[

]]]]><![CDATA[></script>
 <svg atv:refpx="280.001" atv:refpy="298.333" height="30" id="language_input" transform="matrix(1.375,0,0,1,0,0)" width="160" x="123.636" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.combobox" y="224">
  <atv:argument name="tabIndex" value="5"/>
  <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="174.5"/>
  <atv:overwrite id="input_label" transform="matrix(0.8889,0,0,1,0,0)" x="172.055"/>
  <atv:overwrite id="input_bg" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.7273,0,0,1,0,0)" width="216"/>
  <atv:overwrite id="button_stroke" transform="matrix(0.7273,0,0,1,0,0)" x="195"/>
  <atv:overwrite id="id_7" transform="matrix(0.7273,0,0,1,0,0)" x="195"/>
  <atv:overwrite id="button_bg" transform="matrix(0.7273,0,0,1,0,0)" x="195"/>
  <atv:overwrite id="combobox_label" transform="matrix(0.7273,0,0,1,0,0)" x="185.5"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.7273,0,0,1,0,0)" width="188"/>
  <atv:overwrite id="combobox_bg" transform="matrix(0.7273,0,0,1,0,0)" width="188"/>
  <atv:overwrite id="id_1" transform="matrix(0.7273,0,0,1,0,0)" width="218"/>
  <atv:overwrite id="id_0" transform="matrix(0.7273,0,0,1,0,0)" width="220"/>
 </svg>
 <svg atv:refpx="670" atv:refpy="131" height="30" id="password_input" transform="matrix(1.125,0,0,1,0,0)" width="160" x="515.555" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.in_out_password" y="100">
  <atv:argument name="validation" value="Password"/>
  <atv:argument name="allowDirectInput" value="Yes"/>
  <atv:argument name="tabIndex" value="3"/>
  <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="174.5"/>
  <atv:overwrite id="clickarea_visibility" transform="matrix(0.8889,0,0,1,0,0)" x="153"/>
  <atv:overwrite id="button_stroke" transform="matrix(0.8889,0,0,1,0,0)" x="155"/>
  <atv:overwrite id="button_eye_slash" transform="matrix(0.7111,0,0,0.85,0,0)" x="196.25"/>
  <atv:overwrite id="button_eye" transform="matrix(0.7111,0,0,0.85,0,0)" x="196.25"/>
  <atv:overwrite id="button_bg" transform="matrix(0.8889,0,0,1,0,0)" x="155"/>
  <atv:overwrite id="input_label" transform="matrix(0.8889,0,0,1,0,0)" x="148.055"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.8889,0,0,1,0,0)" width="176"/>
  <atv:overwrite id="input_bg" transform="matrix(0.8889,0,0,1,0,0)" width="148"/>
  <atv:overwrite id="id_1" transform="matrix(0.8889,0,0,1,0,0)" width="178"/>
  <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="180"/>
 </svg>
 <g atv:refpx="625" atv:refpy="270" id="id_17">
  <rect atv:refpx="223.858" atv:refpy="-52" fill="#ffffff" height="230" id="info_background" rx="10" ry="16.429" stroke="none" stroke-width="0" width="390" x="430" y="155"/>
  <text atv:refpx="506.542" atv:refpy="176" fill="$FONTCOLOR$" font-family="Arial" font-size="14" font-weight="bold" id="requirements_label" x="444.5" y="182">T{Requirements}:</text>
  <text atv:refpx="476" atv:refpy="207" fill="$FONTCOLOR$" font-family="Arial" font-size="14" id="req_text1" text-anchor="start" x="469" y="212">- T{None} -</text>
  <text atv:refpx="479.5" atv:refpy="225" fill="$FONTCOLOR$" font-family="Arial" font-size="14" id="req_text2" text-anchor="start" x="469" y="232"/>
  <text atv:refpx="479.5" atv:refpy="245" fill="$FONTCOLOR$" font-family="Arial" font-size="14" id="req_text3" text-anchor="start" x="469" y="252"/>
  <text atv:refpx="479.5" atv:refpy="265" fill="$FONTCOLOR$" font-family="Arial" font-size="14" id="req_text4" text-anchor="start" x="469" y="272"/>
  <text atv:refpx="479.5" atv:refpy="285" fill="$FONTCOLOR$" font-family="Arial" font-size="14" id="req_text5" text-anchor="start" x="469" y="292"/>
  <g atv:refpx="475" atv:refpy="240" id="id_8" transform="matrix(1,0,0,1,420,-88)">
   <svg atv:refpx="35" atv:refpy="295" height="20" id="check1" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.check" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
   <svg atv:refpx="35" atv:refpy="295" height="20" id="cross1" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.x" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
  </g>
  <g atv:refpx="475" atv:refpy="259" id="id_4" transform="matrix(1,0,0,1,420,-68)">
   <svg atv:refpx="35" atv:refpy="295" height="20" id="check2" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.check" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
   <svg atv:refpx="35" atv:refpy="295" height="20" id="cross2" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.x" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
  </g>
  <g atv:refpx="476" atv:refpy="278" id="id_10" transform="matrix(1,0,0,1,421,-48)">
   <svg atv:refpx="35" atv:refpy="295" height="20" id="check3" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.check" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
   <svg atv:refpx="35" atv:refpy="295" height="20" id="cross3" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.x" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
  </g>
  <g atv:refpx="476" atv:refpy="298" id="id_13" transform="matrix(1,0,0,1,421,-28)">
   <svg atv:refpx="35" atv:refpy="295" height="20" id="check4" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.check" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
   <svg atv:refpx="35" atv:refpy="295" height="20" id="cross4" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.x" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
  </g>
  <g atv:refpx="485" atv:refpy="263" id="id_16" transform="matrix(1,0,0,1,421,-8)">
   <svg atv:refpx="35" atv:refpy="295" height="20" id="check5" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.check" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
   <svg atv:refpx="35" atv:refpy="295" height="20" id="cross5" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.x" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
  </g>
 </g>
 <rect atv:refpx="-402.856" atv:refpy="409.6" fill="#ffffff" height="80" id="id_11" rx="20.513" ry="16" stroke="none" stroke-width="0" width="800" x="20" y="400"/>
 <svg atv:refpx="538" atv:refpy="612" height="30" id="super_user" transform="matrix(1.1,0,0,1,0,0)" width="160" x="418.182" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.checkbox" y="407">
  <atv:argument name="label" value="T{Super User}"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:overwrite id="checkbox_item" transform="matrix(0.9091,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_symbol" transform="matrix(0.9091,0,0,1,0,0)"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.9091,0,0,1,0,0)"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.9091,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_bg" transform="matrix(0.9091,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_frame" transform="matrix(0.9091,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_stroke" transform="matrix(0.9091,0,0,1,0,0)"/>
 </svg>
 <svg atv:refpx="125" atv:refpy="612" height="30" id="webmi" transform="matrix(1.1875,0,0,1,0,0)" width="160" x="33.684" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.checkbox" y="407">
  <atv:argument name="label" value="T{Visualization}"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:overwrite id="checkbox_item" transform="matrix(0.8421,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_symbol" transform="matrix(0.8421,0,0,1,0,0)"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.8421,0,0,1,0,0)"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.8421,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_bg" transform="matrix(0.8421,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_frame" transform="matrix(0.8421,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_stroke" transform="matrix(0.8421,0,0,1,0,0)"/>
 </svg>
 <svg atv:refpx="191.5" atv:refpy="649" height="30" id="opcua" transform="matrix(2.0187,0,0,1,0,0)" width="160" x="19.814" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.checkbox" y="444">
  <atv:argument name="label" value="T{OPC UA Server (Engineering)}"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:overwrite id="checkbox_item" transform="matrix(0.4954,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_symbol" transform="matrix(0.4954,0,0,1,0,0)"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.4954,0,0,1,0,0)"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.4954,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_bg" transform="matrix(0.4954,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_frame" transform="matrix(0.4954,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_stroke" transform="matrix(0.4954,0,0,1,0,0)"/>
 </svg>
 <svg atv:refpx="595.001" atv:refpy="649" height="30" id="password_policy" transform="matrix(1.8125,0,0,1,0,0)" visibility="hidden" width="160" x="253.793" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.checkbox" y="444">
  <atv:argument name="label" value="T{Ignore Password Policy}"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:overwrite id="checkbox_item" transform="matrix(0.5517,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_symbol" transform="matrix(0.5517,0,0,1,0,0)"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.5517,0,0,1,0,0)"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.5517,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_bg" transform="matrix(0.5517,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_frame" transform="matrix(0.5517,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_stroke" transform="matrix(0.5517,0,0,1,0,0)"/>
 </svg>
</svg>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_delete" BrowseName="1:user_delete" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">user_delete</DisplayName>
		<Description Locale="en">user_delete</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.Display</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<svg height="200" version="1.2" width="430" xmlns="http://www.w3.org/2000/svg" xmlns:atv="http://webmi.atvise.com/2007/svgext" xmlns:xlink="http://www.w3.org/1999/xlink">
 <desc>Dialog to delete or cancel user.</desc>
 <title>Delete Dialog</title>
 <defs/>
 <metadata>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFontColor" desc="Font Color" name="FontColor" substitute="$FONTCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFillColor" desc="Fill Color" name="FillColor" substitute="$FILLCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.60x60.user" desc="Synbol" name="Symbol" substitute="$SYMBOL$" valuetype="address"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvSymbolColor" desc="Symbol Color" name="SymbolColor" substitute="$SYMBOLCOLOR$" valuetype="global"/>
  <atv:gridconfig enabled="true" gridstyle="lines" height="20" width="20"/>
  <atv:snapconfig enabled="false" height="10" width="10"/>
 </metadata>
 <rect atv:refpx="214.769" atv:refpy="98.979" fill="$FILLCOLOR$" height="199.958" id="id_3" stroke="none" stroke-width="2" width="429.539" x="0" y="-1"/>
 <svg atv:refpx="102.5" atv:refpy="157.549" height="30" id="delete_button" transform="matrix(2.0625,0,0,1.5,0,0)" width="80" x="9.697" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="90.033">
  <atv:argument name="label" value="T{Delete}"/>
  <atv:overwrite height="43" id="id_6" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="34"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="19"/>
  <atv:overwrite id="button_label" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="27"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="38.792"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="17.459"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.4848,0,0,0.6667,0,0)" x="72.5" y="12.5"/>
  <atv:overwrite height="41" id="button_stroke" transform="matrix(0.4848,0,0,0.6667,0,0)" width="161"/>
  <atv:overwrite height="43" id="button_bg" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite height="45" id="outer_frame" transform="matrix(0.4848,0,0,0.6667,0,0)" width="165"/>
 </svg>
 <svg atv:refpx="325.891" atv:refpy="156.06" height="30" id="cancel_button" transform="matrix(2.0625,0,0,1.5,0,0)" width="80" x="118.788" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="90.113">
  <atv:argument name="label" value="T{Cancel}"/>
  <atv:overwrite height="43" id="id_6" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="34"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="19"/>
  <atv:overwrite id="button_label" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="27"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="38.792"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="17.459"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.4848,0,0,0.6667,0,0)" x="72.5" y="12.5"/>
  <atv:overwrite height="41" id="button_stroke" transform="matrix(0.4848,0,0,0.6667,0,0)" width="161"/>
  <atv:overwrite height="43" id="button_bg" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite height="45" id="outer_frame" transform="matrix(0.4848,0,0,0.6667,0,0)" width="165"/>
 </svg>
 <text atv:refpx="161.769" atv:refpy="45.766" fill="$FONTCOLOR$" font-family="Arial" font-size="28" id="id_2" text-anchor="middle" x="214.769" y="50.266">T{Delete User}?</text>
 <svg atv:refpx="58.198" atv:refpy="58.198" height="60" id="id_5" transform="matrix(1.2667,0,0,1.2667,0,0)" width="60" x="15.946" xlink:href="$SYMBOL$" y="15.945">
  <atv:argument name="symbolColor" prefix="SymbolColor"/>
 </svg>
 <text atv:refpx="214.769" atv:refpy="80.662" fill="$FONTCOLOR$" font-family="Arial" font-size="24" id="username" text-anchor="middle" x="214.769" y="90.662">&lt;username></text>
 <script atv:desc="" atv:href="SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.user_delete" atv:name="delete user" atv:type="text/ecmascript"/>
 <script atv:desc="" atv:name="" type="text/ecmascript"/>
</svg>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_editor" BrowseName="1:user_editor" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">user_editor</DisplayName>
		<Description Locale="en">user_editor</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.Display</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<svg height="540" version="1.2" width="860" xmlns="http://www.w3.org/2000/svg" xmlns:atv="http://webmi.atvise.com/2007/svgext" xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs>
  <linearGradient gradientUnits="objectBoundingBox" id="linear_0" x1="0" x2="1" y1="0" y2="1">
   <stop offset="0" stop-color="#000000"/>
   <stop offset="1" stop-color="#000000" stop-opacity="0"/>
  </linearGradient>
 </defs>
 <desc>Display for changing user information and password.</desc>
 <title>User Editor</title>
 <rect atv:refpx="215" atv:refpy="270" fill="$FILLCOLOR$" height="540" id="background" stroke="none" stroke-width="0" width="860" x="0" y="0"/>
 <rect atv:refpx="-48.571" atv:refpy="4" fill="#ffffff" height="40" id="id_4" rx="7.692" ry="8" stroke="none" stroke-width="0" width="300" x="110" y="40"/>
 <g atv:refpx="215" atv:refpy="125" id="id_15">
  <rect atv:refpx="215" atv:refpy="185" fill="#ffffff" height="50" id="fullname_background" rx="10" ry="10" stroke="none" stroke-width="0" width="390" x="20" y="100"/>
  <rect atv:refpx="4.286" atv:refpy="115" fill="none" height="50" id="id_1" rx="5.961" ry="5.961" stroke="none" stroke-width="0" width="200" x="110" y="100"/>
  <svg atv:refpx="260" atv:refpy="125" height="30" id="fullname_input" transform="matrix(1.125,0,0,1,0,0)" width="160" x="151.111" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.in_out_value" y="110">
   <atv:argument name="validation" value="String"/>
   <atv:argument name="allowDirectInput" value="Yes"/>
   <atv:argument name="tabIndex" value="3"/>
   <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="174.5"/>
   <atv:overwrite id="input_label" transform="matrix(0.8889,0,0,1,0,0)" x="172.055"/>
   <atv:overwrite id="blinking_frame" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
   <atv:overwrite id="focus_frame" transform="matrix(0.8889,0,0,1,0,0)" width="176"/>
   <atv:overwrite id="input_bg" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
   <atv:overwrite id="id_1" transform="matrix(0.8889,0,0,1,0,0)" width="178"/>
   <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="180"/>
  </svg>
  <text atv:refpx="77.763" atv:refpy="123.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="fullname_label" x="34" y="129.5">T{Full name}</text>
  <svg atv:dynamic="true" atv:refpx="375" atv:refpy="185" height="30" id="fullname_keyboard" transform="matrix(0.375,0,0,1,0,0)" width="80" x="960" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="110">
   <atv:argument name="symbol" value="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.keyboard"/>
   <atv:argument name="visibilitySymbol" value="inherit"/>
   <atv:argument name="visibilityLabel" value="hidden"/>
   <atv:argument name="tabIndex" value="4"/>
   <atv:overwrite id="id_2" transform="matrix(2.6667,0,0,1,0,0)" width="24.5"/>
   <atv:overwrite id="id_0" transform="matrix(2.6667,0,0,1,0,0)" width="29.5"/>
   <atv:overwrite id="id_1" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
   <atv:overwrite id="id_6" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
   <atv:overwrite id="button_label_2" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
   <atv:overwrite id="button_label_1" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
   <atv:overwrite id="button_label" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
   <atv:overwrite id="button_symbol_bottom" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
   <atv:overwrite id="button_symbol_top" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
   <atv:overwrite id="button_symbol" transform="matrix(2.6667,0,0,1,0,0)" x="5"/>
   <atv:overwrite id="button_stroke" transform="matrix(2.6667,0,0,1,0,0)" width="26"/>
   <atv:overwrite id="button_bg" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
   <atv:overwrite id="outer_frame" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
  </svg>
 </g>
 <metadata>
  <atv:parameter behavior="optional" defaultvalue="T{Edit user}" desc="headline" name="headline" substitute="$HEADLINE$" valuetype="trstring"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.user" desc="symbol" name="symbol" substitute="$SYMBOL$" valuetype="display"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.keyboard.keyboard" desc="keyboard display" name="keyboard" valuetype="display"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFontColor" desc="font color" name="fontColor" substitute="$FONTCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFillColor" desc="fill color" name="fillColor" substitute="$FILLCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvSymbolColor" desc="symbol color" name="symbolColor" substitute="$SYMBOLCOLOR$" valuetype="global"/>
  <atv:gridconfig enabled="true" gridstyle="lines" height="20" width="20"/>
  <atv:snapconfig enabled="true" height="10" width="10"/>
 </metadata>
 <svg atv:dynamic="true" atv:refpx="345.625" atv:refpy="370" height="30" id="save_button" transform="matrix(2.0625,0,0,1.5,0,0)" width="80" x="119.758" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="319">
  <atv:argument name="label" value="T{Save}"/>
  <atv:argument name="tabIndex" value="11"/>
  <atv:argument name="borderVisible" value="true"/>
  <atv:argument name="extraBorderColor" value="#ffffff"/>
  <atv:overwrite height="43" id="id_6" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="34"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="19"/>
  <atv:overwrite id="button_label" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="27"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="38.792"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="17.459"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.4848,0,0,0.6667,0,0)" x="72.5" y="12.5"/>
  <atv:overwrite height="41" id="button_stroke" transform="matrix(0.4848,0,0,0.6667,0,0)" width="161"/>
  <atv:overwrite height="43" id="button_bg" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite height="45" id="outer_frame" transform="matrix(0.4848,0,0,0.6667,0,0)" width="165"/>
 </svg>
 <svg atv:dynamic="true" atv:refpx="545.625" atv:refpy="370" height="30" id="cancel_button" transform="matrix(2.0625,0,0,1.5,0,0)" width="80" x="226.909" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="319">
  <atv:argument name="label" value="T{Cancel}"/>
  <atv:argument name="tabIndex" value="12"/>
  <atv:argument name="borderVisible" value="true"/>
  <atv:argument name="extraBorderColor" value="#ffffff"/>
  <atv:overwrite height="43" id="id_6" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="34"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="19"/>
  <atv:overwrite id="button_label" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="27"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="38.792"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="17.459"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.4848,0,0,0.6667,0,0)" x="72.5" y="12.5"/>
  <atv:overwrite height="41" id="button_stroke" transform="matrix(0.4848,0,0,0.6667,0,0)" width="161"/>
  <atv:overwrite height="43" id="button_bg" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite height="45" id="outer_frame" transform="matrix(0.4848,0,0,0.6667,0,0)" width="165"/>
 </svg>
 <text atv:refpx="430" atv:refpy="61.5" fill="$FONTCOLOR$" font-family="Arial" font-size="12" id="status_message2" text-anchor="middle" x="430" y="66"/>
 <svg atv:refpx="54.371" atv:refpy="52.37" height="20" id="symbol" transform="matrix(3.8371,0,0,3.8371,0,0)" width="20" x="6.515" xlink:href="$SYMBOL$" y="3.649">
  <atv:argument name="symbolColor" prefix="symbolColor"/>
 </svg>
 <g atv:refpx="215" atv:refpy="251.667" id="id_12" transform="matrix(1,0,0,1,0,6.6667)">
  <rect atv:refpx="-186.142" atv:refpy="235" fill="#ffffff" height="50" id="default_background" rx="10" ry="10" stroke="none" stroke-width="0" width="390" x="20" y="220"/>
  <text atv:refpx="96.935" atv:refpy="243.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="default_label" x="33.688" y="249.5">T{Default Display}</text>
  <svg atv:refpx="260" atv:refpy="245" height="30" id="display_default_input" transform="matrix(1.125,0,0,1,0,0)" width="160" x="151.111" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.in_out_value" y="230">
   <atv:argument name="validation" value="String"/>
   <atv:argument name="allowDirectInput" value="Yes"/>
   <atv:argument name="tabIndex" value="7"/>
   <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="174.5"/>
   <atv:overwrite id="input_label" transform="matrix(0.8889,0,0,1,0,0)" x="172.055"/>
   <atv:overwrite id="blinking_frame" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
   <atv:overwrite id="focus_frame" transform="matrix(0.8889,0,0,1,0,0)" width="176"/>
   <atv:overwrite id="input_bg" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
   <atv:overwrite id="id_1" transform="matrix(0.8889,0,0,1,0,0)" width="178"/>
   <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="180"/>
  </svg>
  <svg atv:dynamic="true" atv:refpx="375" atv:refpy="305" height="30" id="display_default_keyboard" transform="matrix(0.375,0,0,1,0,0)" width="80" x="960" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="230">
   <atv:argument name="symbol" value="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.keyboard"/>
   <atv:argument name="visibilitySymbol" value="inherit"/>
   <atv:argument name="visibilityLabel" value="hidden"/>
   <atv:argument name="tabIndex" value="8"/>
   <atv:overwrite id="id_2" transform="matrix(2.6667,0,0,1,0,0)" width="24.5"/>
   <atv:overwrite id="id_0" transform="matrix(2.6667,0,0,1,0,0)" width="29.5"/>
   <atv:overwrite id="id_1" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
   <atv:overwrite id="id_6" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
   <atv:overwrite id="button_label_2" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
   <atv:overwrite id="button_label_1" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
   <atv:overwrite id="button_label" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
   <atv:overwrite id="button_symbol_bottom" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
   <atv:overwrite id="button_symbol_top" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
   <atv:overwrite id="button_symbol" transform="matrix(2.6667,0,0,1,0,0)" x="5"/>
   <atv:overwrite id="button_stroke" transform="matrix(2.6667,0,0,1,0,0)" width="26"/>
   <atv:overwrite id="button_bg" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
   <atv:overwrite id="outer_frame" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
  </svg>
 </g>
 <g atv:refpx="215" atv:refpy="315" id="id_11" transform="matrix(1,0,0,1,0,10)">
  <rect atv:refpx="-186.142" atv:refpy="295" fill="#ffffff" height="50" id="content_background" rx="10" ry="10" stroke="none" stroke-width="0" width="390" x="20" y="280"/>
  <text atv:refpx="99.578" atv:refpy="303.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="content_label" x="34" y="309.5">T{Content Display}</text>
  <svg atv:refpx="260" atv:refpy="305" height="30" id="display_content_input" transform="matrix(1.125,0,0,1,0,0)" width="160" x="151.111" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.in_out_value" y="290">
   <atv:argument name="validation" value="String"/>
   <atv:argument name="allowDirectInput" value="Yes"/>
   <atv:argument name="tabIndex" value="9"/>
   <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="174.5"/>
   <atv:overwrite id="input_label" transform="matrix(0.8889,0,0,1,0,0)" x="172.055"/>
   <atv:overwrite id="blinking_frame" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
   <atv:overwrite id="focus_frame" transform="matrix(0.8889,0,0,1,0,0)" width="176"/>
   <atv:overwrite id="input_bg" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
   <atv:overwrite id="id_1" transform="matrix(0.8889,0,0,1,0,0)" width="178"/>
   <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="180"/>
  </svg>
  <svg atv:dynamic="true" atv:refpx="375" atv:refpy="365" height="30" id="display_content_keyboard" transform="matrix(0.375,0,0,1,0,0)" width="80" x="960" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="290">
   <atv:argument name="symbol" value="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.keyboard"/>
   <atv:argument name="visibilitySymbol" value="inherit"/>
   <atv:argument name="visibilityLabel" value="hidden"/>
   <atv:argument name="tabIndex" value="10"/>
   <atv:overwrite id="id_2" transform="matrix(2.6667,0,0,1,0,0)" width="24.5"/>
   <atv:overwrite id="id_0" transform="matrix(2.6667,0,0,1,0,0)" width="29.5"/>
   <atv:overwrite id="id_1" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
   <atv:overwrite id="id_6" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
   <atv:overwrite id="button_label_2" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
   <atv:overwrite id="button_label_1" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
   <atv:overwrite id="button_label" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
   <atv:overwrite id="button_symbol_bottom" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
   <atv:overwrite id="button_symbol_top" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
   <atv:overwrite id="button_symbol" transform="matrix(2.6667,0,0,1,0,0)" x="5"/>
   <atv:overwrite id="button_stroke" transform="matrix(2.6667,0,0,1,0,0)" width="26"/>
   <atv:overwrite id="button_bg" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
   <atv:overwrite id="outer_frame" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
  </svg>
 </g>
 <text atv:refpx="312.984" atv:refpy="62" fill="$FONTCOLOR$" font-family="Arial" font-size="18" id="username" text-anchor="end" x="357.484" y="66.5">&lt;username></text>
 <text atv:refpx="466.328" atv:refpy="463.5" fill="#ff0004" font-family="Arial" font-size="14" id="error_message" text-anchor="middle" x="444.328" y="468">&lt;errormessage></text>
 <rect atv:refpx="-413.427" atv:refpy="369.6" fill="#ffffff" height="80" id="id_9" rx="21.026" ry="16" stroke="none" stroke-width="0" width="820" x="20" y="360"/>
 <svg atv:refpx="548" atv:refpy="382" height="30" id="super_user" transform="matrix(1.1,0,0,1,0,0)" width="160" x="418.182" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.checkbox" y="367">
  <atv:argument name="label" value="T{Super User}"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:overwrite id="checkbox_item" transform="matrix(0.9091,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_symbol" transform="matrix(0.9091,0,0,1,0,0)"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.9091,0,0,1,0,0)"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.9091,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_bg" transform="matrix(0.9091,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_frame" transform="matrix(0.9091,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_stroke" transform="matrix(0.9091,0,0,1,0,0)"/>
 </svg>
 <svg atv:refpx="135" atv:refpy="382" height="30" id="webmi" transform="matrix(1.1875,0,0,1,0,0)" width="160" x="33.684" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.checkbox" y="367">
  <atv:argument name="label" value="T{Visualization}"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:overwrite id="checkbox_item" transform="matrix(0.8421,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_symbol" transform="matrix(0.8421,0,0,1,0,0)"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.8421,0,0,1,0,0)"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.8421,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_bg" transform="matrix(0.8421,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_frame" transform="matrix(0.8421,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_stroke" transform="matrix(0.8421,0,0,1,0,0)"/>
 </svg>
 <svg atv:refpx="201.5" atv:refpy="419" height="30" id="opcua" transform="matrix(2.0187,0,0,1,0,0)" width="160" x="19.814" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.checkbox" y="404">
  <atv:argument name="label" value="T{OPC UA Server (Engineering)}"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:overwrite id="checkbox_item" transform="matrix(0.4954,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_symbol" transform="matrix(0.4954,0,0,1,0,0)"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.4954,0,0,1,0,0)"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.4954,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_bg" transform="matrix(0.4954,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_frame" transform="matrix(0.4954,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_stroke" transform="matrix(0.4954,0,0,1,0,0)"/>
 </svg>
 <rect atv:refpx="645" atv:refpy="124" fill="#ffffff" height="80" id="newpassword_background" rx="10" ry="8.889" stroke="none" stroke-width="0" width="390" x="450" y="89"/>
 <rect atv:refpx="434.286" atv:refpy="55" fill="none" height="50" id="id_5" rx="5.961" ry="5.961" stroke="none" stroke-width="0" width="200" x="540" y="89"/>
 <svg atv:refpx="690" atv:refpy="125" height="30" id="newpassword_input" transform="matrix(1.125,0,0,1,0,0)" width="160" x="533.333" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.in_out_password" y="99">
  <atv:argument name="validation" value="Password"/>
  <atv:argument name="allowDirectInput" value="Yes"/>
  <atv:argument name="tabIndex" value="3"/>
  <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="174.5"/>
  <atv:overwrite id="clickarea_visibility" transform="matrix(0.8889,0,0,1,0,0)" x="153"/>
  <atv:overwrite id="button_stroke" transform="matrix(0.8889,0,0,1,0,0)" x="155"/>
  <atv:overwrite id="button_eye_slash" transform="matrix(0.7111,0,0,0.85,0,0)" x="196.25"/>
  <atv:overwrite id="button_eye" transform="matrix(0.7111,0,0,0.85,0,0)" x="196.25"/>
  <atv:overwrite id="button_bg" transform="matrix(0.8889,0,0,1,0,0)" x="155"/>
  <atv:overwrite id="input_label" transform="matrix(0.8889,0,0,1,0,0)" x="148.055"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.8889,0,0,1,0,0)" width="176"/>
  <atv:overwrite id="input_bg" transform="matrix(0.8889,0,0,1,0,0)" width="148"/>
  <atv:overwrite id="id_1" transform="matrix(0.8889,0,0,1,0,0)" width="178"/>
  <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="180"/>
 </svg>
 <text atv:refpx="526.055" atv:refpy="113.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="newpassword_label" x="464" y="119.5">T{New password}</text>
 <svg atv:dynamic="true" atv:refpx="805" atv:refpy="125" height="30" id="newpassword_keyboard" transform="matrix(0.375,0,0,1,0,0)" width="80" x="2106.667" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="99">
  <atv:argument name="symbol" value="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.keyboard"/>
  <atv:argument name="visibilitySymbol" value="inherit"/>
  <atv:argument name="visibilityLabel" value="hidden"/>
  <atv:argument name="tabIndex" value="6"/>
  <atv:overwrite id="id_2" transform="matrix(2.6667,0,0,1,0,0)" width="24.5"/>
  <atv:overwrite id="id_0" transform="matrix(2.6667,0,0,1,0,0)" width="29.5"/>
  <atv:overwrite id="id_1" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
  <atv:overwrite id="id_6" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="button_label_2" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label_1" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol" transform="matrix(2.6667,0,0,1,0,0)" x="5"/>
  <atv:overwrite id="button_stroke" transform="matrix(2.6667,0,0,1,0,0)" width="26"/>
  <atv:overwrite id="button_bg" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="outer_frame" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
 </svg>
 <text atv:refpx="743.492" atv:refpy="150" fill="$FONTCOLOR$" font-family="Arial" font-size="14" id="valid_period" text-anchor="end" x="816.5" y="156">-</text>
 <text atv:refpx="526.055" atv:refpy="149.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="valid_period_label" x="464" y="155.5">T{Valid period}</text>
 <g atv:refpx="645" atv:refpy="265" id="requirements_list" transform="matrix(1,0,0,1,0,-11)">
  <rect atv:refpx="243.858" atv:refpy="55" fill="#ffffff" height="150" id="info_background" rx="10" ry="10.715" stroke="none" stroke-width="0" width="390" x="450" y="190"/>
  <text atv:refpx="526.542" atv:refpy="211" fill="$FONTCOLOR$" font-family="Arial" font-size="14" font-weight="bold" id="requirements_label" x="464.5" y="217">T{Requirements}:</text>
  <text atv:refpx="496" atv:refpy="242" fill="$FONTCOLOR$" font-family="Arial" font-size="14" id="req_text1" text-anchor="start" x="489" y="247">- T{None} -</text>
  <text atv:refpx="499.5" atv:refpy="260" fill="$FONTCOLOR$" font-family="Arial" font-size="14" id="req_text2" text-anchor="start" x="489" y="267"/>
  <text atv:refpx="499.5" atv:refpy="280" fill="$FONTCOLOR$" font-family="Arial" font-size="14" id="req_text3" text-anchor="start" x="489" y="287"/>
  <text atv:refpx="499.5" atv:refpy="300" fill="$FONTCOLOR$" font-family="Arial" font-size="14" id="req_text4" text-anchor="start" x="489" y="307"/>
  <text atv:refpx="499.5" atv:refpy="320" fill="$FONTCOLOR$" font-family="Arial" font-size="14" id="req_text5" text-anchor="start" x="489" y="327"/>
  <g atv:refpx="475" atv:refpy="240" id="id_8" transform="matrix(1,0,0,1,440,-53)">
   <svg atv:refpx="35" atv:refpy="295" height="20" id="check1" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.check" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
   <svg atv:refpx="35" atv:refpy="295" height="20" id="cross1" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.x" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
  </g>
  <g atv:refpx="475" atv:refpy="259" id="id_7" transform="matrix(1,0,0,1,440,-33)">
   <svg atv:refpx="35" atv:refpy="295" height="20" id="check2" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.check" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
   <svg atv:refpx="35" atv:refpy="295" height="20" id="cross2" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.x" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
  </g>
  <g atv:refpx="476" atv:refpy="278" id="id_10" transform="matrix(1,0,0,1,441,-13)">
   <svg atv:refpx="35" atv:refpy="295" height="20" id="check3" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.check" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
   <svg atv:refpx="35" atv:refpy="295" height="20" id="cross3" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.x" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
  </g>
  <g atv:refpx="476" atv:refpy="298" id="id_13" transform="matrix(1,0,0,1,441,7)">
   <svg atv:refpx="35" atv:refpy="295" height="20" id="check4" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.check" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
   <svg atv:refpx="35" atv:refpy="295" height="20" id="cross4" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.x" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
  </g>
  <g atv:refpx="485" atv:refpy="263" id="id_16" transform="matrix(1,0,0,1,441,27)">
   <svg atv:refpx="35" atv:refpy="295" height="20" id="check5" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.check" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
   <svg atv:refpx="35" atv:refpy="295" height="20" id="cross5" transform="matrix(0.5,0,0,0.5,0,0)" width="20" x="60" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.x" y="580">
    <atv:argument name="symbolColor" prefix="symbolColor" value=""/>
   </svg>
  </g>
 </g>
 <g atv:refpx="215" atv:refpy="188.333" id="id_14" transform="matrix(1,0,0,1,0,3.3333)">
  <rect atv:refpx="-186.142" atv:refpy="175" fill="#ffffff" height="50" id="language_background" rx="10" ry="10" stroke="none" stroke-width="0" width="390" x="20" y="160"/>
  <text atv:refpx="78.949" atv:refpy="183.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="language_label" x="34" y="189.5">T{Language}</text>
  <svg atv:refpx="280.001" atv:refpy="185" height="30" id="language_input" transform="matrix(1.375,0,0,1,0,0)" width="160" x="123.636" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.combobox" y="170">
   <atv:argument name="tabIndex" value="5"/>
   <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="174.5"/>
   <atv:overwrite id="input_label" transform="matrix(0.8889,0,0,1,0,0)" x="172.055"/>
   <atv:overwrite id="input_bg" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
   <atv:overwrite id="focus_frame" transform="matrix(0.7273,0,0,1,0,0)" width="216"/>
   <atv:overwrite id="button_stroke" transform="matrix(0.7273,0,0,1,0,0)" x="195"/>
   <atv:overwrite id="id_7" transform="matrix(0.7273,0,0,1,0,0)" x="195"/>
   <atv:overwrite id="button_bg" transform="matrix(0.7273,0,0,1,0,0)" x="195"/>
   <atv:overwrite id="combobox_label" transform="matrix(0.7273,0,0,1,0,0)" x="185.5"/>
   <atv:overwrite id="blinking_frame" transform="matrix(0.7273,0,0,1,0,0)" width="188"/>
   <atv:overwrite id="combobox_bg" transform="matrix(0.7273,0,0,1,0,0)" width="188"/>
   <atv:overwrite id="id_1" transform="matrix(0.7273,0,0,1,0,0)" width="218"/>
   <atv:overwrite id="id_0" transform="matrix(0.7273,0,0,1,0,0)" width="220"/>
  </svg>
 </g>
 <script atv:desc="" atv:href="SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.user_editor" atv:name="user_editor" atv:type="text/ecmascript"/>
 <script atv:desc="" atv:name="" type="text/ecmascript"/>
 <rect atv:refpx="645" atv:refpy="205" fill="none" height="270" id="id_3" stroke="#8e8e8e" stroke-linejoin="round" stroke-width="2" width="410" x="440" y="75"/>
 <svg atv:refpx="557" atv:refpy="56" height="30" id="enable_pwd_change" transform="matrix(1.4125,0,0,1,0,0)" width="160" x="314.336" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.checkbox" y="41">
  <atv:argument name="label" value="T{Change/Set Password}"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:overwrite id="checkbox_item" transform="matrix(0.708,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_symbol" transform="matrix(0.708,0,0,1,0,0)"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.708,0,0,1,0,0)"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.708,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_bg" transform="matrix(0.708,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_frame" transform="matrix(0.708,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_stroke" transform="matrix(0.708,0,0,1,0,0)"/>
 </svg>
 <rect atv:refpx="645" atv:refpy="210" fill="#898989" fill-opacity="0.709804" height="268" id="deactivated_password" stroke="none" stroke-width="0" width="408" x="441" y="76"/>
 <svg atv:refpx="605.001" atv:refpy="419" height="30" id="password_policy" transform="matrix(1.8125,0,0,1,0,0)" width="160" x="253.793" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.checkbox" y="404">
  <atv:argument name="label" value="T{Ignore Password Policy}"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:overwrite id="checkbox_item" transform="matrix(0.5517,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_symbol" transform="matrix(0.5517,0,0,1,0,0)"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.5517,0,0,1,0,0)"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.5517,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_bg" transform="matrix(0.5517,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_frame" transform="matrix(0.5517,0,0,1,0,0)"/>
  <atv:overwrite id="checkbox_stroke" transform="matrix(0.5517,0,0,1,0,0)"/>
 </svg>
</svg>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_management" BrowseName="1:user_management" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">user_management</DisplayName>
		<Description Locale="en">user_management</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.Display</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<svg height="890" version="1.2" width="1675" xmlns="http://www.w3.org/2000/svg" xmlns:atv="http://webmi.atvise.com/2007/svgext" xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs/>
 <desc>Overview and management display for Users and Groups.</desc>
 <title>User Manager</title>
 <metadata>
  <atv:parameter behavior="optional" config="Arial;Courier;Tahoma;Verdana" defaultvalue="Arial" desc="font family" group="Font" name="font_family" valuetype="enum"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFontColor" desc="font color" group="Font" name="globalFontColor" substitute="$FONTCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="12" desc="table header font size" group="Font" name="header_font_size" valuetype="number"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvBorderColor" desc="border color" group="Appearance" name="globalBorderColor" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFillColor" desc="fill color" group="Appearance" name="globalFillColor" substitute="$FILLCOLOR$" valuetype="global"/>
  <atv:parameter behavior="mandatory" config="Groups;Users" defaultvalue="Users" desc="current table" name="buttonToHighlight" valuetype="enum"/>
  <atv:parameter behavior="optional" defaultvalue="#d7d7d7" desc="button background" group="Appearance" name="btn_button_bg" valuetype="color"/>
  <atv:gridconfig enabled="false" gridstyle="lines" height="10" width="10"/>
  <atv:snapconfig enabled="true" height="10" width="10"/>
 </metadata>
 <rect atv:refpx="838.884" atv:refpy="57.463" fill="$FILLCOLOR$" height="117.946" id="id_2" stroke="none" stroke-width="2" width="1677.458" x="0.155" y="0"/>
 <svg atv:refpx="252.079" atv:refpy="97.01" height="30" id="btn_groups" transform="matrix(1.802,0,0,1.529,0,0)" width="80" x="99.889" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="42.202">
  <atv:argument name="label" value="T{Groups}"/>
  <atv:argument name="tabIndex" value="1"/>
  <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="84.5"/>
  <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="89.5"/>
  <atv:argument name="extraBorderColor" value="#ffffff"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:argument name="fontSize2" value="16"/>
  <atv:overwrite height="43.87" id="id_6" transform="matrix(0.5549,0,0,0.654,0,0)" width="142.16"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.5549,0,0,0.654,0,0)" x="72.08" y="34.435"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.5549,0,0,0.654,0,0)" x="72.08" y="19.435"/>
  <atv:overwrite id="button_label" transform="matrix(0.5549,0,0,0.654,0,0)" x="72.08" y="27.435"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.333,0,0,0.3924,0,0)" x="109.967" y="39.517"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.333,0,0,0.3924,0,0)" x="109.967" y="18.184"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.5549,0,0,0.654,0,0)" x="62.08" y="12.935"/>
  <atv:overwrite height="41.87" id="button_stroke" transform="matrix(0.5549,0,0,0.654,0,0)" width="140.16"/>
  <atv:overwrite height="43.87" id="button_bg" transform="matrix(0.5549,0,0,0.654,0,0)" width="142.16"/>
  <atv:overwrite height="45.87" id="outer_frame" transform="matrix(0.5549,0,0,0.654,0,0)" width="144.16"/>
 </svg>
 <svg atv:refpx="93.072" atv:refpy="97.01" height="30" id="btn_users" transform="matrix(1.802,0,0,1.529,0,0)" width="80" x="11.654" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="42.202">
  <atv:argument name="label" value="T{Users}"/>
  <atv:argument name="tabIndex" value="2"/>
  <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="84.5"/>
  <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="89.5"/>
  <atv:argument name="extraBorderColor" value="#ffffff"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:argument name="fontSize2" value="16"/>
  <atv:overwrite height="43.87" id="id_6" transform="matrix(0.5549,0,0,0.654,0,0)" width="142.16"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.5549,0,0,0.654,0,0)" x="72.08" y="34.435"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.5549,0,0,0.654,0,0)" x="72.08" y="19.435"/>
  <atv:overwrite id="button_label" transform="matrix(0.5549,0,0,0.654,0,0)" x="72.08" y="27.435"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.333,0,0,0.3924,0,0)" x="109.967" y="39.517"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.333,0,0,0.3924,0,0)" x="109.967" y="18.184"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.5549,0,0,0.654,0,0)" x="62.08" y="12.935"/>
  <atv:overwrite height="41.87" id="button_stroke" transform="matrix(0.5549,0,0,0.654,0,0)" width="140.16"/>
  <atv:overwrite height="43.87" id="button_bg" transform="matrix(0.5549,0,0,0.654,0,0)" width="142.16"/>
  <atv:overwrite height="45.87" id="outer_frame" transform="matrix(0.5549,0,0,0.654,0,0)" width="144.16"/>
 </svg>
 <text atv:refpx="154.173" atv:refpy="32.3833" fill="$FONTCOLOR$" font-family="Arial" font-size="22" id="title" text-anchor="start" transform="matrix(1.3105,0,0,1.3105,-4.7381,-3.1375)" x="19.26" y="34.605">T{User management}</text>
 <svg atv:refpx="1583.429" atv:refpy="95.01" height="30" id="btn_save" transform="matrix(1.802,0,0,1.529,0,0)" width="80" x="838.728" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="42.202">
  <atv:argument name="label" value="T{Save}"/>
  <atv:argument name="tabIndex" value="1"/>
  <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="84.5"/>
  <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="89.5"/>
  <atv:argument name="extraBorderColor" value="#ffffff"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:argument name="fontSize2" value="16"/>
  <atv:overwrite height="43.87" id="id_6" transform="matrix(0.5549,0,0,0.654,0,0)" width="142.16"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.5549,0,0,0.654,0,0)" x="72.08" y="34.435"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.5549,0,0,0.654,0,0)" x="72.08" y="19.435"/>
  <atv:overwrite id="button_label" transform="matrix(0.5549,0,0,0.654,0,0)" x="72.08" y="27.435"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.333,0,0,0.3924,0,0)" x="109.967" y="39.517"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.333,0,0,0.3924,0,0)" x="109.967" y="18.184"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.5549,0,0,0.654,0,0)" x="62.08" y="12.935"/>
  <atv:overwrite height="41.87" id="button_stroke" transform="matrix(0.5549,0,0,0.654,0,0)" width="140.16"/>
  <atv:overwrite height="43.87" id="button_bg" transform="matrix(0.5549,0,0,0.654,0,0)" width="142.16"/>
  <atv:overwrite height="45.87" id="outer_frame" transform="matrix(0.5549,0,0,0.654,0,0)" width="144.16"/>
 </svg>
 <svg atv:refpx="840" atv:refpy="505.5" height="600" id="manager_frame" transform="matrix(2.1,0,0,1.285,0,0)" width="800" x="0" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.hmi.iframe" y="93.385">
  <atv:argument name="frameName" value="manager_frame"/>
  <atv:argument name="url" value="about:blank"/>
 </svg>
 <text atv:refpx="465.153" atv:refpy="493" fill="#d60003" font-family="Arial" font-size="36" id="no_access" text-anchor="middle" visibility="hidden" x="842" y="497.5">T{Permission(s) missing for user management}</text>
 <script atv:desc="" atv:href="SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.global_list_handling" atv:name="" atv:type="text/ecmascript"/>
 <script atv:desc="" atv:href="SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.user_management" atv:name="User Management" atv:type="text/ecmascript"/>
 <script atv:desc="" atv:name="" type="text/ecmascript"/>
</svg>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_manager" BrowseName="1:user_manager" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">user_manager</DisplayName>
		<Description Locale="en">user_manager</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.Display</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<svg height="760.6" version="1.2" width="1678.46" xmlns="http://www.w3.org/2000/svg" xmlns:atv="http://webmi.atvise.com/2007/svgext" xmlns:xlink="http://www.w3.org/1999/xlink">
 <desc>Table display for users and groups.</desc>
 <title>User Table</title>
 <defs/>
 <metadata>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvObjectDisplays.UserManager.GroupColumns" desc="configuration for groups" group="Columns" name="columnsGroups" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvObjectDisplays.UserManager.UserColumns" desc="configuration for users" group="Columns" name="columnsUsers" valuetype="global"/>
  <atv:parameter behavior="mandatory" defaultvalue="atvise_user" desc="table ID user" group="Table" name="tableID1" valuetype="string"/>
  <atv:parameter behavior="mandatory" defaultvalue="atvise_group" desc="table ID group" group="Table" name="tableID2" valuetype="string"/>
  <atv:parameter behavior="optional" defaultvalue="35" desc="table header height" group="Table" name="header_height" valuetype="number"/>
  <atv:parameter behavior="optional" defaultvalue="40" desc="table row height" group="Table" name="row_height" valuetype="number"/>
  <atv:parameter behavior="optional" config="Arial;Courier;Tahoma;Verdana" defaultvalue="Arial" desc="font family" group="Font" name="font_family" valuetype="enum"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFontColor" desc="font color" group="Font" name="globalFontColor" substitute="$FONTCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="12" desc="table header font size" group="Font" name="header_font_size" valuetype="number"/>
  <atv:parameter behavior="optional" defaultvalue="18" desc="table row font size" group="Font" name="row_font_size" valuetype="number"/>
  <atv:parameter behavior="optional" defaultvalue="12" desc="table detail font size" group="Font" name="detail_font_size" valuetype="number"/>
  <atv:parameter behavior="optional" defaultvalue="12" desc="table footer font size" group="Font" name="footer_font_size" valuetype="number"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvBorderColor" desc="border color" group="Appearance" name="globalBorderColor" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFillColor" desc="fill color" group="Appearance" name="globalFillColor" substitute="$FILLCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="#d7d7d7" desc="button background" group="Appearance" name="btn_button_bg" valuetype="color"/>
  <atv:gridconfig enabled="false" gridstyle="lines" height="10" width="10"/>
  <atv:snapconfig enabled="true" height="10" width="10"/>
 </metadata>
 <svg atv:refpx="415.391" atv:refpy="404.22" height="640" id="atvise_user" transform="matrix(1.3003,0,0,1.0955,0,0)" width="640" x="0.265" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.slickgrid.table" y="52.899">
  <atv:argument name="header_height" prefix="header_height" value=""/>
  <atv:argument name="row_height" prefix="row_height" value=""/>
  <atv:argument name="row_text_size" prefix="row_font_size" value=""/>
  <atv:argument name="tableID" prefix="tableID1" value=""/>
  <atv:argument name="header_text_size" prefix="header_font_size" value=""/>
  <atv:argument name="detail_text_size" prefix="detail_font_size" value=""/>
  <atv:argument name="footer_text_size" prefix="footer_font_size" value=""/>
  <atv:argument name="font_family" prefix="font_family"/>
  <atv:argument name="globalBorderColor" prefix="globalBorderColor" value="SYSTEM.GLOBALS."/>
  <atv:argument name="globalFillColor" prefix="globalFillColor" value="SYSTEM.GLOBALS."/>
  <atv:argument name="globalFontColor" prefix="globalFontColor" value="SYSTEM.GLOBALS."/>
  <atv:argument name="header_text_horizontal" value="center"/>
  <atv:argument name="multiselect" value="false"/>
 </svg>
 <text atv:refpx="77.628" atv:refpy="25.585" fill="#575757" font-family="Arial" font-size="20" id="Header_1" transform="matrix(1.3105,0,0,1.3105,-5.589,-1.4336)" x="23" y="28.117">T{Users}:</text>
 <svg atv:refpx="1255.965" atv:refpy="405.261" height="640" id="atvise_group" transform="matrix(1.3003,0,0,1.0955,0,0)" width="640" x="645.236" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.slickgrid.table" y="52.944">
  <atv:argument name="header_height" prefix="header_height" value=""/>
  <atv:argument name="row_height" prefix="row_height" value=""/>
  <atv:argument name="row_text_size" prefix="row_font_size" value=""/>
  <atv:argument name="tableID" prefix="tableID2" value=""/>
  <atv:argument name="header_text_size" prefix="header_font_size" value=""/>
  <atv:argument name="detail_text_size" prefix="detail_font_size" value=""/>
  <atv:argument name="footer_text_size" prefix="footer_font_size" value=""/>
  <atv:argument name="font_family" prefix="font_family"/>
  <atv:argument name="globalBorderColor" prefix="globalBorderColor" value="SYSTEM.GLOBALS."/>
  <atv:argument name="globalFillColor" prefix="globalFillColor" value="SYSTEM.GLOBALS."/>
  <atv:argument name="globalFontColor" prefix="globalFontColor" value="SYSTEM.GLOBALS."/>
  <atv:argument name="header_text_horizontal" value="center"/>
 </svg>
 <text atv:refpx="930.839" atv:refpy="29.519" fill="#575757" font-family="Arial" font-size="20" id="Header_2" transform="matrix(1.3105,0,0,1.3105,-263.8535,-1.4336)" x="854.77" y="28.117">T{Groups}:</text>
 <text atv:refpx="1073.668" atv:refpy="27.519" fill="#575757" font-family="Arial" font-size="20" id="txtRecipeName" transform="matrix(1.3105,0,0,1.3105,-332.5998,-0.8126)" x="1075.175" y="26.117"/>
 <svg atv:refpx="751.908" atv:refpy="22.935" height="30" id="btnAdd" transform="matrix(2.0477,0,0,1.529,0,0)" width="80" x="327.196" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="1.962">
  <atv:argument name="label" value="T{Add}"/>
  <atv:argument name="fontSize" value="16"/>
  <atv:argument name="fontSize2" value="16"/>
  <atv:overwrite height="43.87" id="id_6" transform="matrix(0.4884,0,0,0.654,0,0)" width="161.816"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.4884,0,0,0.654,0,0)" x="81.908" y="34.435"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.4884,0,0,0.654,0,0)" x="81.908" y="19.435"/>
  <atv:overwrite id="button_label" transform="matrix(0.4884,0,0,0.654,0,0)" x="81.908" y="27.435"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.293,0,0,0.3924,0,0)" x="126.347" y="39.517"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.293,0,0,0.3924,0,0)" x="126.347" y="18.184"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.4884,0,0,0.654,0,0)" x="71.908" y="12.935"/>
  <atv:overwrite height="41.87" id="button_stroke" transform="matrix(0.4884,0,0,0.654,0,0)" width="159.816"/>
  <atv:overwrite height="43.87" id="button_bg" transform="matrix(0.4884,0,0,0.654,0,0)" width="161.816"/>
  <atv:overwrite height="45.87" id="outer_frame" transform="matrix(0.4884,0,0,0.654,0,0)" width="163.816"/>
 </svg>
 <rect atv:refpx="416.588" atv:refpy="409.538" fill="none" height="701.125" id="id_11" stroke="$FILLCOLOR$" stroke-width="1" width="832.176" x="0.5" y="58.975"/>
 <rect atv:refpx="1261.87" atv:refpy="409.538" fill="none" height="701.125" id="id_8" stroke="$FILLCOLOR$" stroke-width="1" width="832.176" x="845.782" y="58.975"/>
 <script atv:desc="" atv:href="SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.global_list_handling" atv:name="" atv:type="text/ecmascript"/>
 <script atv:desc="" atv:href="SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.user_manager" atv:name="" atv:type="text/ecmascript"/>
 <script atv:desc="" atv:name="" type="text/ecmascript"/>
</svg>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_new" BrowseName="1:user_new" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">user_new</DisplayName>
		<Description Locale="en">user_new</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.Display</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<svg height="280" version="1.2" width="430" xmlns="http://www.w3.org/2000/svg" xmlns:atv="http://webmi.atvise.com/2007/svgext" xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs/>
 <desc>Display for changing user information and password.</desc>
 <title>User Editor</title>
 <rect atv:refpx="107.5" atv:refpy="140" fill="$FILLCOLOR$" height="280" id="background" stroke="none" stroke-width="0" width="430" x="0" y="0"/>
 <metadata>
  <atv:parameter behavior="optional" defaultvalue="T{Add user}" desc="headline" name="headline" substitute="$HEADLINE$" valuetype="trstring"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.user" desc="symbol" name="symbol" substitute="$SYMBOL$" valuetype="display"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.keyboard.keyboard" desc="keyboard display" name="keyboard" valuetype="display"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFontColor" desc="font color" name="fontColor" substitute="$FONTCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvFillColor" desc="fill color" name="fillColor" substitute="$FILLCOLOR$" valuetype="global"/>
  <atv:parameter behavior="optional" defaultvalue="SYSTEM.GLOBALS.atvSymbolColor" desc="symbol color" name="symbolColor" substitute="$SYMBOLCOLOR$" valuetype="global"/>
  <atv:gridconfig enabled="true" gridstyle="lines" height="20" width="20"/>
  <atv:snapconfig enabled="true" height="10" width="10"/>
 </metadata>
 <svg atv:dynamic="true" atv:refpx="92.499" atv:refpy="170" height="30" id="save_button" transform="matrix(2.0625,0,0,1.5,0,0)" width="80" x="4.848" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="138.334">
  <atv:argument name="label" value="T{Save}"/>
  <atv:argument name="tabIndex" value="11"/>
  <atv:argument name="borderVisible" value="true"/>
  <atv:argument name="extraBorderColor" value="#ffffff"/>
  <atv:overwrite height="43" id="id_6" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="34"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="19"/>
  <atv:overwrite id="button_label" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="27"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="38.792"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="17.459"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.4848,0,0,0.6667,0,0)" x="72.5" y="12.5"/>
  <atv:overwrite height="41" id="button_stroke" transform="matrix(0.4848,0,0,0.6667,0,0)" width="161"/>
  <atv:overwrite height="43" id="button_bg" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite height="45" id="outer_frame" transform="matrix(0.4848,0,0,0.6667,0,0)" width="165"/>
 </svg>
 <svg atv:dynamic="true" atv:refpx="313.498" atv:refpy="170" height="30" id="cancel_button" transform="matrix(2.0625,0,0,1.5,0,0)" width="80" x="111.999" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="138.334">
  <atv:argument name="label" value="T{Cancel}"/>
  <atv:argument name="tabIndex" value="12"/>
  <atv:argument name="borderVisible" value="true"/>
  <atv:argument name="extraBorderColor" value="#ffffff"/>
  <atv:overwrite height="43" id="id_6" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite id="button_label_2" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="34"/>
  <atv:overwrite id="button_label_1" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="19"/>
  <atv:overwrite id="button_label" transform="matrix(0.4848,0,0,0.6667,0,0)" x="82.5" y="27"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="38.792"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(0.2909,0,0,0.4,0,0)" x="127.333" y="17.459"/>
  <atv:overwrite id="button_symbol" transform="matrix(0.4848,0,0,0.6667,0,0)" x="72.5" y="12.5"/>
  <atv:overwrite height="41" id="button_stroke" transform="matrix(0.4848,0,0,0.6667,0,0)" width="161"/>
  <atv:overwrite height="43" id="button_bg" transform="matrix(0.4848,0,0,0.6667,0,0)" width="163"/>
  <atv:overwrite height="45" id="outer_frame" transform="matrix(0.4848,0,0,0.6667,0,0)" width="165"/>
 </svg>
 <text atv:refpx="216" atv:refpy="51" fill="$FONTCOLOR$" font-family="Arial" font-size="12" id="status_message2" text-anchor="middle" x="216" y="55.5"/>
 <svg atv:refpx="62.317" atv:refpy="45.934" height="20" id="symbol" transform="matrix(3.1935,0,0,3.1935,0,0)" width="20" x="11.859" xlink:href="$SYMBOL$" y="4.384">
  <atv:argument name="symbolColor" prefix="symbolColor"/>
 </svg>
 <text atv:refpx="224" atv:refpy="49" fill="$FONTCOLOR$" font-family="Arial" font-size="20" id="headline" text-anchor="middle" x="236.5" y="53.5">$HEADLINE$</text>
 <text atv:refpx="207.327" atv:refpy="192" fill="#ff0004" font-family="Arial" font-size="14" id="error_message" text-anchor="middle" x="207.327" y="197">&lt;errormessage></text>
 <rect atv:refpx="215" atv:refpy="115" fill="#ffffff" height="50" id="id_3" rx="10" ry="10" stroke="none" stroke-width="0" width="390" x="20" y="90"/>
 <rect atv:refpx="4.286" atv:refpy="45" fill="none" height="50" id="id_5" rx="5.961" ry="5.961" stroke="none" stroke-width="0" width="200" x="110" y="90"/>
 <svg atv:refpx="260" atv:refpy="115" height="30" id="username_input" transform="matrix(1.125,0,0,1,0,0)" width="160" x="151.111" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.in_out_value" y="100">
  <atv:argument name="validation" value="String"/>
  <atv:argument name="allowDirectInput" value="Yes"/>
  <atv:argument name="tabIndex" value="3"/>
  <atv:overwrite id="id_2" transform="matrix(0.8889,0,0,1,0,0)" width="174.5"/>
  <atv:overwrite id="input_label" transform="matrix(0.8889,0,0,1,0,0)" x="172.055"/>
  <atv:overwrite id="blinking_frame" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="focus_frame" transform="matrix(0.8889,0,0,1,0,0)" width="176"/>
  <atv:overwrite id="input_bg" transform="matrix(0.8889,0,0,1,0,0)" width="172"/>
  <atv:overwrite id="id_1" transform="matrix(0.8889,0,0,1,0,0)" width="178"/>
  <atv:overwrite id="id_0" transform="matrix(0.8889,0,0,1,0,0)" width="180"/>
 </svg>
 <text atv:refpx="80.304" atv:refpy="113.5" fill="$FONTCOLOR$" font-family="Arial" font-size="16" id="username_label" x="34" y="119.5">T{Username}</text>
 <svg atv:dynamic="true" atv:refpx="375" atv:refpy="115" height="30" id="username_keyboard" transform="matrix(0.375,0,0,1,0,0)" width="80" x="960" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.button" y="100">
  <atv:argument name="symbol" value="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Symbols.20x20.keyboard"/>
  <atv:argument name="visibilitySymbol" value="inherit"/>
  <atv:argument name="visibilityLabel" value="hidden"/>
  <atv:argument name="tabIndex" value="4"/>
  <atv:overwrite id="id_2" transform="matrix(2.6667,0,0,1,0,0)" width="24.5"/>
  <atv:overwrite id="id_0" transform="matrix(2.6667,0,0,1,0,0)" width="29.5"/>
  <atv:overwrite id="id_1" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
  <atv:overwrite id="id_6" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="button_label_2" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label_1" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_label" transform="matrix(2.6667,0,0,1,0,0)" x="15"/>
  <atv:overwrite id="button_symbol_bottom" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol_top" transform="matrix(1.6,0,0,0.6,0,0)" x="14.833"/>
  <atv:overwrite id="button_symbol" transform="matrix(2.6667,0,0,1,0,0)" x="5"/>
  <atv:overwrite id="button_stroke" transform="matrix(2.6667,0,0,1,0,0)" width="26"/>
  <atv:overwrite id="button_bg" transform="matrix(2.6667,0,0,1,0,0)" width="28"/>
  <atv:overwrite id="outer_frame" transform="matrix(2.6667,0,0,1,0,0)" width="30"/>
 </svg>
 <script atv:desc="" atv:href="SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.user_new" atv:name="user_new" atv:type="text/ecmascript"/>
 <script atv:desc="" atv:name="" type="text/ecmascript"><![CDATA[

]]]]><![CDATA[></script>
</svg>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAObject NodeId="ns=1;s=SYSTEM" BrowseName="1:SYSTEM">
		<DisplayName Locale="en">SYSTEM</DisplayName>
		<Description Locale="en">SYSTEM</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">Objects</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise ExportedNodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS" ExportedBrowseName="1:DISPLAYSCRIPTS" Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY" BrowseName="1:LIBRARY">
		<DisplayName Locale="en">LIBRARY</DisplayName>
		<Description Locale="en">LIBRARY</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT" BrowseName="1:PROJECT">
		<DisplayName Locale="en">PROJECT</DisplayName>
		<Description Locale="en">PROJECT</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS" BrowseName="1:DISPLAYSCRIPTS">
		<DisplayName Locale="en">DISPLAYSCRIPTS</DisplayName>
		<Description Locale="en">DISPLAYSCRIPTS</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement" BrowseName="1:usermanagement">
		<DisplayName Locale="en">usermanagement</DisplayName>
		<Description Locale="en">usermanagement</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
	</UAObject>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.global_list_handling" BrowseName="1:global_list_handling" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">global_list_handling</DisplayName>
		<Description Locale="en">global_list_handling</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.DisplayScript</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <metadata>
    <priority>0</priority>
    <help/>
  </metadata>
  <code><![CDATA[/**
 * creates an atvise table columns config object based on a global list
 * @param columnsGlobalList the global list from webMI.query
 * @param view the view to use (e.g. "Main") for some parameters (like "orderMain")
 * @param editors editors to use for certain columns {[column field] : [editor],...}
 * @param formatters formatters to use for certain columns {[column field] : [formatter],...}
 */
function createTableColumnsFromGlobalList(columnsGlobalList, view, editors, formatters){

	//transform global list object into array to be able to sort it:
	var sortableColumns = [];
	for (var key in columnsGlobalList) {
		sortableColumns.push(columnsGlobalList[key]);
	}
	sortableColumns.sort(function(a, b) {
		return a["order" + view] - b["order" + view];
	});
	
	var tableColumns = [];
	for(var i=0; i < sortableColumns.length; i++){
		var column = {
			id: sortableColumns[i].field,
			name: sortableColumns[i].columnName,
			field: sortableColumns[i].field,
			sortable: (sortableColumns[i].sortable === "true"), //globals value is always string
			filter: (sortableColumns[i].filter === "true"),
			visible: (sortableColumns[i]["visible" + view] === "true"),
			resizable: true,
			width: parseInt(sortableColumns[i]["width" + view]),
		}
		if(editors.hasOwnProperty(sortableColumns[i].field)){
			column.editor = editors[sortableColumns[i].field];
		}
		
		if(formatters.hasOwnProperty(sortableColumns[i].field)){
			column.formatter = formatters[sortableColumns[i].field];
		}
		
		tableColumns.push(column);
	}
	
	return tableColumns;
}]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.group_manager" BrowseName="1:group_manager" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">group_manager</DisplayName>
		<Description Locale="en">group_manager</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.DisplayScript</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <metadata>
    <priority>0</priority>
    <help/>
  </metadata>
  <code><![CDATA[var GROUP_TABLE_NAME = webMI.query["tableID1"];
var USER_TABLE_NAME = webMI.query["tableID2"];
var check;
var gGroupTableController;
var gUserTableController;
var gTemplateData = {}; //stores the data of all templates
var gSelectedTemplateName = null;
var gSelectedGroupName = "";
var gAccessControlManager;
var editFlag = 0;

if (webMI.getAccessControlSupport()) {
	gAccessControlManager = webMI.callExtension("SYSTEM.LIBRARY.ATVISE.QUICKDYNAMICS.Access Control Manager");
}
 function handleAccessControlResponse(compareRights, successCallback, failCallback) {
	if (!gAccessControlManager) {
		successCallback();
		return;
	}
	
	var requiredRights = {
		nodeIds: [],
		rights: []
	};
	
	compareRights = [].concat(compareRights);
	compareRights.forEach(function(r) {
		requiredRights.nodeIds.push(r.node);
		requiredRights.rights.push(r.right);
	});

	gAccessControlManager.getRightsDict(requiredRights.nodeIds, requiredRights.rights, function(response) {
		// do the checks
		var allRights = true;

		for (var c in compareRights) {
			if (
				typeof response[compareRights[c].node] != "undefined" &&
				typeof response[compareRights[c].node][compareRights[c].right] != "undefined"
			) {
				allRights = allRights && response[compareRights[c].node][compareRights[c].right];
			} else {
				allRights = false;
				break;
			}
		}
		
		if (allRights) {
			successCallback();
		} else {
			failCallback();
		}
	});
}


/**
 * handle access control responses (e.g. lock functions or ignore error)
 * success if any node/right comibination is true
 * @param compareRights
 * @param callback success
 * @param callback fail
 */
function handleAccessControlResponseAny(compareRights, successCallback, failCallback) {
	if (!gAccessControlManager) {
		successCallback();
		return;
	}
	
	var requiredRights = {
		nodeIds: [],
		rights: []
	};
	
	compareRights = [].concat(compareRights);
	compareRights.forEach(function(r) {
		requiredRights.nodeIds.push(r.node);
		requiredRights.rights.push(r.right);
	});

	gAccessControlManager.getRightsDict(requiredRights.nodeIds, requiredRights.rights, function(response) {
		// do the checks
		var anyRights = false;

		for (var c in compareRights) {
			if (
				typeof response[compareRights[c].node] != "undefined" &&
				typeof response[compareRights[c].node][compareRights[c].right] != "undefined"
			) {
				anyRights = anyRights || response[compareRights[c].node][compareRights[c].right];
			}
		}
		
		if (anyRights) {
			successCallback();
		} else {
			failCallback();
		}
	});
}


webMI.addOnload(function(e){	
	initGroupTable();
	initUserTable();
});



function initGroupTable(){
	webMI.table.loadResources(function() {
		var config = {};
		config["columns"] = createTableColumnsFromGlobalList(webMI.query.columnsGroups, "Main", {}, {
			defaultvalue: function (row, cell, value, columnDef, dataContext) {
				return "<div style='width:100%; text-align: center'>" + formatNumberValue(dataContext, value) + "</div>";
			}
		});
        config["mode"] = "once"; // or live/triggered
        config["bufferInterval"] = 75;
		config["onClickCallback"] = function(e, info){
			var item = info.item;
			var row = info.rowIndex;
			var column = info.column;
			var controller = webMI.table.request("atvise_group", "controller");
			if(check != item.name){
				if(editFlag==1){
					check = item.name;
					webMI.display.openWindow({display:"SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.save_changes",extern:false,height:220,menubar:false,modal:false,movable:false,resizable:false,scrollbars:false,status:false,title:"",toolbar:false,width:430,query:{triggerName: "saveGroupChanges",user: info.item.username, colid: "id_"+row}});
					webMI.trigger.connect("saveGroupChanges", function(e){
						if (e.value.save == 1) {
							webMI.trigger.fire("saveGroups", "1");
							controller.grid.setSelectedRows([row]);
							loadUsers(item.name);
							check = item.name;
							e.value.save = 0;
						}else if(e.value.save == 0){
							editFlag = 0;
							controller.grid.setSelectedRows([row]);
							loadUsers(item.name);
							check = item.name;
						}
					});	
				}else{
					controller.grid.setSelectedRows([row]);
					loadUsers(item.name);
					check = item.name;
				}
			}
		}
        config["onHeaderClickCallback"] = function(e, info){
			if (info.column.id != "atvise_marker") {				
				return;
			}	
			setDeleteExportButtonInActive();
        };
		
		config["dataRequestFunction"] = function customDataRequest(continuation) {
			gGroupTableController = this;
			loadGroups("");
		};
	

        webMI.table.register(GROUP_TABLE_NAME, "config", config);
        webMI.table.setReady(GROUP_TABLE_NAME, "config");
    });
}

function initUserTable(){
			
	webMI.table.loadResources(function() {
		
		var config = {};
		var controller;
		var selectedRows = [];
		config["columns"] = createTableColumnsFromGlobalList(webMI.query.columnsUsers, "Main", {}, {
			defaultvalue: function (row, cell, value, columnDef, dataContext) {
				return "<div style='width:100%; text-align: center'>" + formatNumberValue(dataContext, value) + "</div>";
			}
		});
		
        config["mode"] = "once"; // or live/triggered
        config["bufferInterval"] = 75;
		config["onClickCallback"] = function(e, info){
			if (info.column.id == "atvise_marker") {
				editFlag = 1;
			}	
		}
        
        config["onHeaderClickCallback"] = function(e, info){
			if (info.column.id != "atvise_marker") {
				return;
			}
			
			setDeleteExportButtonInActive();
        };
		
		config["dataRequestFunction"] = function customDataRequest(continuation) {
			gUserTableController = this;
			loadUsers("");
			
		};
		
        webMI.table.register(USER_TABLE_NAME, "config", config);
        webMI.table.setReady(USER_TABLE_NAME, "config");
        var controller = webMI.table.request("atvise_user", "controller");
    });
}

webMI.trigger.connect("saveGroups", function(e){
	if (e.value == "") {
		editFlag = 0;
		return;
	}else{
		var selectGroupId=gGroupTableController.grid.getSelectedRows();
		if (selectGroupId.length != 0){
			editFlag = 0;
			var selectGroupName=gGroupTableController.grid.getDataItem(selectGroupId);
			var selectUserIds = [];
			var selectUsers = [];
			selectUserIds = gUserTableController.grid.getSelectedRows();
			for(var i=0; i < selectUserIds.length; i++){
				selectUsers.push(gUserTableController.grid.getDataItem(selectUserIds[i]).username);
			}
			var options = {};
			options.mode = "saveGroups";
			options.users = selectUsers;
			options.check = selectGroupName.name;
			handleAccessControlResponse([{ node: "SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager", right: "execute" }
			], function() {
				webMI.data.call("UserManagement", options, function(e){
					var data = {result: []};
				});
			}, function() {});
		}
	else{
		alert("Please select group first.");	
	}
	
	}
});

function loadGroups(tb){
	var options = {};
	options.mode = "Group";
	gGroupTableController.grid.getSelectedRows().forEach(function (rowIndex) {
		var dataItem = gGroupTableController.grid.getDataItem(rowIndex);				
	});
	gGroupTableController.dataView.getItemMetadata = metadata(gGroupTableController.dataView.getItemMetadata);
	function metadata(old_metadata_provider) {
	  return function(row) {
		var item = this.getItem(row);
		var ret  = (old_metadata_provider(row) || {});
		
		if (item) {
		  ret.cssClasses = (ret.cssClasses || '');
		  ret.cssClasses += ' group_row';
		}
	
		return ret;
	  }
	}	
	handleAccessControlResponse([{ node: "SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager", right: "execute" },{ node: "SYSTEM.SECURITY", right: "engineer" }], function() {
		webMI.data.call("UserManagement", options, function(e){
			var data = {result: []};
			for(var i=0; i < e.length; i++){
				data.result.push({name: e[i].name, description: e[i].description, private: e[i].private, check: e[i].usercheck});
			}				
			gGroupTableController.clearData();
			gGroupTableController.addData(data);
			
		});
	}, function() {});
}

function loadUsers(tb){
	var options = {};
	options.mode = "User";
	if(tb != ""){
		options.check = tb;	
	}
	handleAccessControlResponse([{ node: "SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager", right: "execute" },{ node: "SYSTEM.SECURITY", right: "engineer" }], function() {
		webMI.data.call("UserManagement", options, function(e){
			var data = {result: []};
			var selection = [];
			for(var i=0; i < e.length; i++){
				data.result.push({name: e[i].name, description: e[i].description, username: e[i].username, language: e[i].language, superuser: e[i].superuser, check: e[i].usercheck});
				if(e[i].usercheck == 1){
					selection.push(i);
				}
				
			}
			if(tb != ""){
				if(selection.length>0){
					gUserTableController.grid.setSelectedRows(selection);
				}
				else{					
					var tmpitems = gUserTableController.getSelectedItems();
					for(var i=0; i<tmpitems.length;i++){
						gUserTableController.toggleSelectedItem(tmpitems[i]);
					}
				}	
			}else{
				gUserTableController.clearData();
				gUserTableController.addData(data);
			}

		});
	}, function() {});
}]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.save_changes" BrowseName="1:save_changes" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">save_changes</DisplayName>
		<Description Locale="en">save_changes</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.DisplayScript</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <metadata>
    <priority>0</priority>
    <help/>
  </metadata>
  <code><![CDATA[var data = {};
webMI.trigger.connect("clicked", function(e){
	data.save = 1;
	webMI.display.closeWindow();	
	webMI.trigger.fire(webMI.query.triggerName, data);
}, "save_button");

webMI.trigger.connect("clicked", function(e){
	data.save = 0;
	webMI.display.closeWindow();
	webMI.trigger.fire(webMI.query.triggerName, data);
}, "cancel_button");]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.user_add" BrowseName="1:user_add" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">user_add</DisplayName>
		<Description Locale="en">user_add</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.DisplayScript</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <metadata>
    <priority>0</priority>
    <help/>
  </metadata>
  <code><![CDATA[/**
 * Code for the user add object display
 * ----------------------------------------
 * This Script supports the display for user add
 */


/**
 * DECLARATION SECTION
 */
var closeOnSave = false;
var username, fullname, password, hash, language = "", defaultdisplay, contentdisplay, superuser, opcua, webmi, colid;
var keyboard = webMI.query["keyboard"];
var trigger_username = "com.atvise.user.username";
var trigger_fullname = "com.atvise.user.fullname";
var trigger_password = "com.atvise.user.password";
var trigger_display_default = "com.atvise.user.display_default";
var trigger_display_content = "com.atvise.user.display_content";
var trigger_superuser = "com.atvise.user.superuser";

var password_error = false;
var loginHandler = webMI.callExtension("SYSTEM.LIBRARY.ATVISE.QUICKDYNAMICS.Login Handler");
var textBlocks = loginHandler.getTextBlocks();
var root = webMI.rootWindow; 


/**
 * FUNCTION DECLARATION SECTION
 */

function checkRequirements(policy) {
    let validpwd = true; 
    let req_i = 1;
    webMI.gfx.setText("valid_period", policy.maxAgeDays.text);

    function setText(text, fulfilled, i) {
        validpwd = validpwd && fulfilled; 
        webMI.gfx.setText("req_text" + i, text);
        webMI.gfx.setVisible("check" + i, fulfilled);
        webMI.gfx.setVisible("cross" + i, !fulfilled);
    }

    if (username == "") {
        setText(textBlocks.ErrorUserOrPassword, false, req_i++);
    } else {
        if (policy.hasSurroundingWhiteSpace.value && policy.minLength.value)
            setText(policy.minLength.text + " (" + policy.hasSurroundingWhiteSpace.text + ")", policy.minLength.fulfilled && policy.hasSurroundingWhiteSpace.fulfilled, req_i++);
        else if (policy.hasSurroundingWhiteSpace.value)
            setText(policy.hasSurroundingWhiteSpace.text, policy.hasSurroundingWhiteSpace.fulfilled, req_i++);
        else if (policy.minLength.value)
            setText(policy.minLength.text, policy.minLength.fulfilled, req_i++);

        var char_content = textBlocks.Contains + " ";
        var char_content_fulfilled = null;
        if (policy.requireLowerCase.value) {
            char_content = char_content + policy.requireLowerCase.text;
            char_content_fulfilled = policy.requireLowerCase.fulfilled
        }
        if (policy.requireLowerCase.value && policy.requireUpperCase.value) {
            char_content = char_content + ", " + policy.requireUpperCase.text;
            char_content_fulfilled = policy.requireLowerCase.fulfilled && policy.requireUpperCase.fulfilled;
        } else if (policy.requireUpperCase.value) {
            char_content = char_content + policy.requireUpperCase.text;
            char_content_fulfilled = policy.requireUpperCase.fulfilled;
        }
        if ((policy.requireLowerCase.value || policy.requireUpperCase.value) && policy.requireDigit.value) {
            char_content = char_content + ", " + policy.requireDigit.text;
            char_content_fulfilled = char_content_fulfilled && policy.requireDigit.fulfilled;
        } else if (policy.requireDigit.value) {
            char_content = char_content + policy.requireDigit.text;
            char_content_fulfilled = policy.requireDigit.fulfilled;
        }

        if (policy.requireLowerCase.value || policy.requireUpperCase.value || policy.requireDigit.value)
            setText(char_content, char_content_fulfilled, req_i++);

        if (policy.requireSpecialChar.value)
            setText(policy.requireSpecialChar.text, policy.requireSpecialChar.fulfilled, req_i++);

        if (policy.requireNameExclusion.value || policy.requireFullnameExclusion.value)
            setText(policy.requireFullnameExclusion.text, policy.requireNameExclusion.fulfilled && policy.requireFullnameExclusion.fulfilled, req_i++);

        if (policy.requireNewPw.value)
            setText(policy.requireNewPw.text, policy.requireNewPw.fulfilled, req_i++);
    }

    // hide unchecked requirements
    for (let i = req_i; i <= 5; i++) {
        webMI.gfx.setText("req_text" + i, i == 1 ? "---" : "");
        webMI.gfx.setVisible("check" + i, false);
        webMI.gfx.setVisible("cross" + i, false);
    }

    return validpwd;
}


function validatePassword() {
    loginHandler.validateUserPassword(username, password, function (policy) { 
        let valid = checkRequirements(policy);
        webMI.trigger.fire("com.atvise.setActive", valid, "save_button");
    });


}



function resetData() {
	webMI.gfx.setText("username", "T{Please login!}");
	webMI.trigger.fire("setValue", "", "fullname_input");
	webMI.trigger.fire("setValue", "", "password_input");
    webMI.trigger.fire("setSelectedItem", "-", "language_input");
	webMI.trigger.fire("setValue", "","display_default_input");
	webMI.trigger.fire("setValue", "", "display_content_input");
	webMI.trigger.fire("setChecked", 0, "super_user");
	webMI.trigger.fire("setChecked", 0, "opcua");
	webMI.trigger.fire("setChecked", 0, "webmi");
	webMI.trigger.fire("setChecked", 0, "password_policy");
	webMI.gfx.setText("error_message", "");


    webMI.trigger.fire("addItem", { text: "-", value: "" }, "language_input");

    if (root.project && root.project.languages) {
        for (var i in root.project.languages)
            webMI.trigger.fire("addItem", { text: root.project.languages[i], value: i }, "language_input");
        webMI.trigger.fire("setSelectedItem", root.project.languages[language], "language_input");
    } else if (language) {
        webMI.trigger.fire("addItem", { text: language, value: language }, "language_input");
        webMI.trigger.fire("setSelectedItem", language, "language_input");
    }
}

/**
 * RUNTIME SECTION
 * Runtime code has to be executed after onload to take care all other resources are ready
 */
webMI.addOnload(function () {
	resetData();
    webMI.gfx.setText("error_message", "");
    webMI.display.openWindow({
        display: "SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_new", 
        extern: false, height: 280, menubar: false, modal: true, movable: false, resizable: false, 
        scrollbars: false, status: false, title: "", toolbar: false, width: 430, titlebar: false, 
        query: { triggerName: "new_user" } }); 

});

webMI.addOnunload(function(){
	if(!closeOnSave){
		webMI.data.call("UserManagement", { "mode": "Delete", "username": username }, function (e) {
			webMI.trigger.fire("add_user", "");
		});
	}
});

/**
 * TRIGGER SECTION
 */


webMI.trigger.connect("new_user", function (e) {
    if (e.value == "") {
        webMI.display.closeWindow();
        webMI.trigger.fire("add_user", "");
    } else {
        username = e.value.username;

        webMI.trigger.fire("com.atvise.setActive", false, "username_input");
        webMI.trigger.fire("com.atvise.setActive", false, "username_keyboard");
        webMI.trigger.fire("setValue", username, "username_input");

        loginHandler.getPasswordPolicy(username, function (policy) {
            validatePassword();
        });

        webMI.addEvent("password_input_html_input", "input", function (e) {
            webMI.trigger.fire("setValue", e.target.value, "password_input");
        });
    }
});

webMI.trigger.connect("clicked", function (e) {
	webMI.gfx.setText("error_message", "");
		if (typeof username != "undefined" && username != "") {
			var data = {"mode": "Edit", "username": username, "fullname": fullname, "language": language, "defaultdisplay": defaultdisplay, "contentdisplay": contentdisplay, "superuser": superuser, "opcua": opcua, "webmi": webmi, "colid": colid};
			data["password"] = password;
			webMI.data.call("UserManagement", data, function(e) {
				if (e.error) {
					webMI.gfx.setFill("error_message", "#FF0000");
					webMI.gfx.setText("error_message", "T{Error}: T{"+e.error+"}");
				} else {
					webMI.gfx.setFill("error_message", "#00c800");
					webMI.gfx.setText("error_message", "T{Changes saved successfully.}");
					webMI.trigger.fire("add_user", data);
					closeOnSave = true;
					webMI.display.closeWindow();
				}
			});
		} else {
				webMI.gfx.setFill("error_message", "#FF0000");
				webMI.gfx.setText("error_message", "T{Error}: T{Please enter username!}");
		}
}, "save_button");

webMI.trigger.connect("clicked", function (e) {
    webMI.data.call("UserManagement", { "mode": "Delete", "username": username },
        function (e) {
            webMI.display.closeWindow();
            webMI.trigger.fire("add_user", "");
        });
}, "cancel_button");

webMI.trigger.connect("valuechanged", function (e) {
	username = e.value;
}, "username_input");

webMI.trigger.connect("valuechanged", function (e) {
	fullname = e.value;
}, "fullname_input");

webMI.trigger.connect("valuechanged", function (e) {
	superuser = e.value;
}, "super_user");

webMI.trigger.connect("valuechanged", function (e) {
	opcua = e.value;
}, "opcua");

webMI.trigger.connect("valuechanged", function (e) {
	webmi = e.value;
}, "webmi");

webMI.trigger.connect("valuechanged", function (e) {
	defaultdisplay = e.value;
}, "display_default_input");

webMI.trigger.connect("valuechanged", function (e) {
	contentdisplay = e.value;
}, "display_content_input");

webMI.trigger.connect("valuechanged", function (e) {
	password = e.value;
    validatePassword();
}, "password_input");

webMI.trigger.connect("valuechanged", function (e) {
	language = e.value;
}, "language_input");

webMI.trigger.connect(trigger_username, function (e) {
	username = e.value;
	webMI.trigger.fire("setValue", e.value, "username_input");
});

webMI.trigger.connect(trigger_password, function (e) {
	password = e.value;
	webMI.trigger.fire("setValue", e.value, "password_input");
});

webMI.trigger.connect(trigger_fullname, function (e) {
	fullname = e.value;
	webMI.trigger.fire("setValue", e.value, "fullname_input");
});

webMI.trigger.connect(trigger_display_default, function (e) {
	defaultdisplay = e.value;
	webMI.trigger.fire("setValue", e.value, "display_default_input");
});

webMI.trigger.connect(trigger_display_content, function (e) {
    contentdisplay = e.value;
    webMI.trigger.fire("setValue", e.value, "display_content_input");
});

webMI.trigger.connect("clicked", function (e) {
	webMI.query.trigger = trigger_username;
	webMI.query.password = "No";
	webMI.query.value = username;
	webMI.display.openWindow({
		display: keyboard,
		extern: false,
		height: 300,
		menubar: false,
		modal: true,
		movable: true,
		resizable: false,
		scrollbars: false,
		status: false,
		title: "T{Keyboard}",
		toolbar: false,
		width: 700,
		query: webMI.query
	});
}, "username_keyboard");

webMI.trigger.connect("clicked", function (e) {
	webMI.query.trigger = trigger_fullname;
	webMI.query.password = "No";
	webMI.query.value = fullname;
	webMI.display.openWindow({
		display: keyboard,
		extern: false,
		height: 300,
		menubar: false,
		modal: true,
		movable: true,
		resizable: false,
		scrollbars: false,
		status: false,
		title: "T{Keyboard}",
		toolbar: false,
		width: 700,
		query: webMI.query
	});
}, "fullname_keyboard");

webMI.trigger.connect("clicked", function (e) {
	webMI.query.trigger = trigger_display_default;
	webMI.query.password = "No";
	webMI.query.value = defaultdisplay;
	webMI.display.openWindow({
		display: keyboard,
		extern: false,
		height: 300,
		menubar: false,
		modal: true,
		movable: true,
		resizable: false,
		scrollbars: false,
		status: false,
		title: "T{Keyboard}",
		toolbar: false,
		width: 700,
		query: webMI.query
	});
}, "display_default_keyboard");

webMI.trigger.connect("clicked", function (e) {
	webMI.query.trigger = trigger_display_content;
	webMI.query.password = "No";
	webMI.query.value = contentdisplay;
	webMI.display.openWindow({
		display: keyboard,
		extern: false,
		height: 300,
		menubar: false,
		modal: true,
		movable: true,
		resizable: false,
		scrollbars: false,
		status: false,
		title: "T{Keyboard}",
		toolbar: false,
		width: 700,
		query: webMI.query
	});
}, "display_content_keyboard");


webMI.trigger.connect("clicked", function (e) {
	webMI.query.trigger = trigger_password;
	webMI.query.password = "Yes";
	webMI.query.value = "";
	webMI.display.openWindow({
		display: keyboard,
		extern: false,
		height: 300,
		menubar: false,
		modal: true,
		movable: true,
		resizable: false,
		scrollbars: false,
		status: false,
		title: "T{Keyboard}",
		toolbar: false,
		width: 700,
		query: webMI.query
	});
}, "password_keyboard");]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.user_delete" BrowseName="1:user_delete" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">user_delete</DisplayName>
		<Description Locale="en">user_delete</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.DisplayScript</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <metadata>
    <priority>0</priority>
    <help/>
  </metadata>
  <code><![CDATA[var username = webMI.query.user;
var colid = webMI.query.colid;
var data = {"mode":"Delete", "username": username, "colid": colid};
webMI.addOnload(function(e) {
var id = "";
var value = true;
return function(value) {
webMI.gfx.setText("username", username);
} (value);
});
webMI.trigger.connect("clicked", function(e){
	webMI.data.call("UserManagement", data, function(e) {
		webMI.display.closeWindow();		
		webMI.trigger.fire(webMI.query.triggerName, data);
	});
}, "delete_button");

webMI.trigger.connect("clicked", function(e){
	webMI.display.closeWindow();
}, "cancel_button");]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.user_editor" BrowseName="1:user_editor" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">user_editor</DisplayName>
		<Description Locale="en">user_editor</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.DisplayScript</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <metadata>
    <priority>0</priority>
    <help/>
  </metadata>
  <code><![CDATA[/**
 * Code for the user editor object display
 * ----------------------------------------
 * This Script supports the display for user edit
 */


/**
 * DECLARATION SECTION
 */
var init = true;
var initPolicy;
var username, fullname, hash, language = "", defaultdisplay, contentdisplay, superuser, webmi, opcua, colid, password_policy;
var keyboard = webMI.query["keyboard"];
var trigger_fullname = "com.atvise.user.fullname";
var trigger_display_default = "com.atvise.user.display_default";
var trigger_display_content = "com.atvise.user.display_content";


var newpassword = "", enablePwdChange = 0;
var trigger_newpassword = "com.atvise.user.newpassword";


var loginHandler = webMI.callExtension("SYSTEM.LIBRARY.ATVISE.QUICKDYNAMICS.Login Handler");
var textBlocks = loginHandler.getTextBlocks();

var root = webMI.rootWindow; 


/**
 * FUNCTION DECLARATION SECTION
 */

function checkRequirements(policy) {
	let validpwd = true; 
	let req_i = 1;
	webMI.gfx.setText("valid_period", policy.maxAgeDays.text);

	function setText(text, fulfilled, i) {
		validpwd = validpwd && fulfilled; 
		webMI.gfx.setText("req_text" + i, text);
		webMI.gfx.setVisible("check" + i, fulfilled);
		webMI.gfx.setVisible("cross" + i, !fulfilled);
	}

	if (username == "") {
		setText(textBlocks.ErrorUserOrPassword, false, req_i++);
	} else {
		if (policy.hasSurroundingWhiteSpace.value && policy.minLength.value)
			setText(policy.minLength.text + " (" + policy.hasSurroundingWhiteSpace.text + ")", policy.minLength.fulfilled && policy.hasSurroundingWhiteSpace.fulfilled, req_i++);
		else if (policy.hasSurroundingWhiteSpace.value)
			setText(policy.hasSurroundingWhiteSpace.text, policy.hasSurroundingWhiteSpace.fulfilled, req_i++);
		else if (policy.minLength.value)
			setText(policy.minLength.text, policy.minLength.fulfilled, req_i++);

		var char_content = textBlocks.Contains + " ";
		var char_content_fulfilled = null;
		if (policy.requireLowerCase.value) {
			char_content = char_content + policy.requireLowerCase.text;
			char_content_fulfilled = policy.requireLowerCase.fulfilled
		}
		if (policy.requireLowerCase.value && policy.requireUpperCase.value) {
			char_content = char_content + ", " + policy.requireUpperCase.text;
			char_content_fulfilled = policy.requireLowerCase.fulfilled && policy.requireUpperCase.fulfilled;
		} else if (policy.requireUpperCase.value) {
			char_content = char_content + policy.requireUpperCase.text;
			char_content_fulfilled = policy.requireUpperCase.fulfilled;
		}
		if ((policy.requireLowerCase.value || policy.requireUpperCase.value) && policy.requireDigit.value) {
			char_content = char_content + ", " + policy.requireDigit.text;
			char_content_fulfilled = char_content_fulfilled && policy.requireDigit.fulfilled;
		} else if (policy.requireDigit.value) {
			char_content = char_content + policy.requireDigit.text;
			char_content_fulfilled = policy.requireDigit.fulfilled;
		}

		if (policy.requireLowerCase.value || policy.requireUpperCase.value || policy.requireDigit.value)
			setText(char_content, char_content_fulfilled, req_i++);

		if (policy.requireSpecialChar.value)
			setText(policy.requireSpecialChar.text, policy.requireSpecialChar.fulfilled, req_i++);

		if (policy.requireNameExclusion.value || policy.requireFullnameExclusion.value)
			setText(policy.requireFullnameExclusion.text, policy.requireNameExclusion.fulfilled && policy.requireFullnameExclusion.fulfilled, req_i++);

		if (policy.requireNewPw.value)
			setText(policy.requireNewPw.text, policy.requireNewPw.fulfilled, req_i++);
	}

	// hide unchecked requirements
	for (let i = req_i; i <= 5; i++) {
		webMI.gfx.setText("req_text" + i, i == 1 ? "---" : "");
		webMI.gfx.setVisible("check" + i, false);
		webMI.gfx.setVisible("cross" + i, false);
	}

	return validpwd;
}

function getData(username) {
	webMI.data.read(["SYSTEM.SECURITY.USERS." + username + ".name",
					"SYSTEM.SECURITY.USERS." + username + ".password",
					"SYSTEM.SECURITY.USERS." + username + ".language",
					"SYSTEM.SECURITY.USERS." + username + ".display_default",
					"SYSTEM.SECURITY.USERS." + username + ".display_content",
					"SYSTEM.SECURITY.USERS." + username + ".superuser",
					"SYSTEM.SECURITY.USERS." + username + ".login_opcua",
					"SYSTEM.SECURITY.USERS." + username + ".login_webmi",
					"SYSTEM.SECURITY.USERS." + username + ".ignore_password_policy"
					],
		function(e) {
			fullname = e[0].value;
			hash = e[1].value;	
			language = e[2].value;
			defaultdisplay = (e[3].value == "" || e[3].value == 0) ? "": e[3].value;
			contentdisplay = (e[4].value == "" || e[4].value == 0) ? "": e[4].value;
			superuser = (e[5].value == false ? 0 : 1);
			opcua = (e[6].value == false ? 0 : 1);
			webmi = (e[7].value == false ? 0 : 1);
			password_policy = (e[8].value == false ? 0 : 1);
			initPolicy = password_policy;

			writeData();
	});
}

function writeData() {
	webMI.gfx.setText("username", username);
	webMI.trigger.fire("setValue", fullname, "fullname_input");
	webMI.trigger.fire("setChecked", superuser, "super_user");
	webMI.trigger.fire("setChecked", opcua, "opcua");
	webMI.trigger.fire("setChecked", webmi, "webmi");
	webMI.trigger.fire("setChecked", password_policy, "password_policy");
	
	if (defaultdisplay.length > 25) {
		webMI.trigger.fire("setValue", "..." + defaultdisplay.substr(defaultdisplay.length - 23, 23), "display_default_input");
	} else {
		webMI.trigger.fire("setValue", defaultdisplay, "display_default_input");
	}
	
	if (contentdisplay.length > 25) {
		webMI.trigger.fire("setValue", "..." + contentdisplay.substr(contentdisplay.length - 23, 23),"display_content_input");
	} else {
		webMI.trigger.fire("setValue", contentdisplay, "display_content_input");
	}


	if (root.project && root.project.languages) {
		for (var i in root.project.languages)
			webMI.trigger.fire("addItem", { text: root.project.languages[i], value: i }, "language_input");
		webMI.trigger.fire("setSelectedItem", root.project.languages[language], "language_input");
	} else if (language) {
		webMI.trigger.fire("addItem", { text: language, value: language }, "language_input");
		webMI.trigger.fire("setSelectedItem", language, "language_input");
	}


}

function resetData() {
	webMI.gfx.setText("username", "T{Loading...}");
	webMI.trigger.fire("setValue", "", "fullname_input");
	webMI.trigger.fire("setValue", "", "newpassword_input"); 
	webMI.trigger.fire("setValue", "", "language_input");
	webMI.trigger.fire("setValue", "","display_default_input");
	webMI.trigger.fire("setValue", "", "display_content_input");
	webMI.trigger.fire("setChecked", 0, "super_user");
	webMI.trigger.fire("setChecked", 0, "opcua");
	webMI.trigger.fire("setChecked", 0, "webmi");
	webMI.trigger.fire("setChecked", 0, "enable_pwd_change");
	webMI.trigger.fire("setChecked", 0, "password_policy");	
	webMI.gfx.setText("error_message", "");
}


function validatePassword() {
	loginHandler.validateUserPassword(username, newpassword, function (policy) {
		let valid = checkRequirements(policy);

		if (enablePwdChange && password_policy !== 1) {
			webMI.trigger.fire("com.atvise.setActive", valid, "save_button");
		} else {
			webMI.trigger.fire("com.atvise.setActive", true, "save_button");
		}
	});


}

/**
 * RUNTIME SECTION
 * Runtime code has to be executed after onload to take care all other resources are ready
 */
webMI.addOnload(function() {
	resetData();
	
	webMI.addEvent(webMI.data, "clientvariableschange", function(e) {
		if(webMI.query.user && webMI.query.user != ""){
			username = webMI.query.user;
			colid = webMI.query.colid;
			getData(username);
		}
		else if (e.username && e.username != "") {
			username = e.username;
			getData(username);
		}
	});

    webMI.trigger.fire("addItem", { text: "-", value: "" }, "language_input");
    webMI.trigger.fire("setSelectedItem", "-", "language_input");

	loginHandler.getPasswordPolicy(username, function (policy) {
		validatePassword();
	});

	webMI.addEvent("newpassword_input_html_input", "input", function (e) {
		webMI.trigger.fire("setValue", e.target.value, "newpassword_input");
	});
});

/**
 * TRIGGER SECTION
 */
webMI.trigger.connect("clicked", function (e) {
	webMI.gfx.setText("error_message", "");
	if (typeof username != "undefined" && username != "") {
		var data = {"mode": "Edit", "username": username, "fullname": fullname, "language": language, "defaultdisplay": defaultdisplay, "contentdisplay": contentdisplay, "superuser": superuser, "password_policy": password_policy, "opcua": opcua, "webmi": webmi, "colid": colid};
			
			if (enablePwdChange) data["password"] = newpassword;

		webMI.data.call("UserManagement", data, function(e) {
			if (e.error) {
				webMI.gfx.setFill("error_message", "#FF0000");
				webMI.gfx.setText("error_message", "T{Error}: T{Can't write user information and/or password.}");
				getData(username);
			} else {
				webMI.gfx.setFill("error_message", "#00c800");
				webMI.gfx.setText("error_message", "T{Changes saved successfully.}");
				webMI.display.closeWindow();
			}
			webMI.trigger.fire("edit_user", data);
		});
	} else {
			webMI.gfx.setFill("error_message", "#FF0000");
			webMI.gfx.setText("error_message", "T{Error}: T{User not logged in!}");
	}
}, "save_button");
webMI.trigger.connect("clicked", function (e) {
	webMI.display.closeWindow();
	webMI.trigger.fire("edit_user", "");
}, "cancel_button");

webMI.trigger.connect("valuechanged", function (e) {
	fullname = e.value;
}, "fullname_input");

webMI.trigger.connect("valuechanged", function (e) {
	superuser = e.value;
}, "super_user");

webMI.trigger.connect("valuechanged", function (e) {
	opcua = e.value;
}, "opcua");

webMI.trigger.connect("valuechanged", function (e) {
	password_policy = e.value === "1" ? 1 : 0;
	
	if(init){
		validatePassword();
		init = false;
	} else {
		webMI.trigger.fire("com.atvise.setActive", password_policy === initPolicy ? true : false, "enable_pwd_change");
	}
}, "password_policy");

webMI.trigger.connect("valuechanged", function (e) {
	webmi = e.value;
}, "webmi");

webMI.trigger.connect("valuechanged", function (e) {
	defaultdisplay = e.value;
}, "display_default_input");

webMI.trigger.connect("valuechanged", function (e) {
	contentdisplay = e.value;
}, "display_content_input");

webMI.trigger.connect("valuechanged", function (e) {
	newpassword = e.value;
	validatePassword();
}, "newpassword_input");

webMI.trigger.connect("valuechanged", function (e) {
	language = e.value;
}, "language_input");

webMI.trigger.connect(trigger_newpassword, function (e) {
	// password = e.value;
	webMI.trigger.fire("setValue", e.value, "newpassword_input");
});

webMI.trigger.connect(trigger_fullname, function (e) {
	fullname = e.value;
	webMI.trigger.fire("setValue", e.value, "fullname_input");
});

webMI.trigger.connect(trigger_display_default, function (e) {
	defaultdisplay = e.value;
	webMI.trigger.fire("setValue", e.value, "display_default_input");
});

webMI.trigger.connect(trigger_display_content, function (e) {
	contentdisplay = e.value;
	webMI.trigger.fire("setValue", e.value, "display_content_input");
});


webMI.trigger.connect("clicked", function (e) {
	webMI.query.trigger = trigger_fullname;
	webMI.query.password = "No";
	webMI.query.value = fullname;
	webMI.display.openWindow({
		display: keyboard,
		extern: false,
		height: 300,
		menubar: false,
		modal: true,
		movable: true,
		resizable: false,
		scrollbars: false,
		status: false,
		title: "T{Keyboard}",
		toolbar: false,
		width: 700,
		query: webMI.query
	});
}, "fullname_keyboard");

webMI.trigger.connect("clicked", function (e) {
	webMI.query.trigger = trigger_display_default;
	webMI.query.password = "No";
	webMI.query.value = defaultdisplay;
	webMI.display.openWindow({
		display: keyboard,
		extern: false,
		height: 300,
		menubar: false,
		modal: true,
		movable: true,
		resizable: false,
		scrollbars: false,
		status: false,
		title: "T{Keyboard}",
		toolbar: false,
		width: 700,
		query: webMI.query
	});
}, "display_default_keyboard");

webMI.trigger.connect("clicked", function (e) {
	webMI.query.trigger = trigger_display_content;
	webMI.query.password = "No";
	webMI.query.value = contentdisplay;
	webMI.display.openWindow({
		display: keyboard,
		extern: false,
		height: 300,
		menubar: false,
		modal: true,
		movable: true,
		resizable: false,
		scrollbars: false,
		status: false,
		title: "T{Keyboard}",
		toolbar: false,
		width: 700,
		query: webMI.query
	});
}, "display_content_keyboard");



webMI.trigger.connect("clicked", function (e) {
	webMI.query.trigger = trigger_newpassword;
	webMI.query.password = "Yes";
	webMI.query.value = newpassword; 
	webMI.display.openWindow({
		display: keyboard,
		extern: false,
		height: 300,
		menubar: false,
		modal: true,
		movable: true,
		resizable: false,
		scrollbars: false,
		status: false,
		title: textBlocks.NewPassword,
		toolbar: false,
		width: 700,
		query: webMI.query
	});
	}, "newpassword_keyboard");
	
	
	
	webMI.trigger.connect("valuechanged", function (e) {
		enablePwdChange = (e.value === "1");
		if (enablePwdChange){
			webMI.trigger.fire("com.atvise.setActive", true, "newpassword_input");
			webMI.gfx.setVisible("deactivated_password", false);
		} else {
			webMI.trigger.fire("com.atvise.setActive", false, "newpassword_input");
			webMI.gfx.setVisible("deactivated_password", null);
		}
		
		validatePassword();
	}, "enable_pwd_change");
	
	
	]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.user_management" BrowseName="1:user_management" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">user_management</DisplayName>
		<Description Locale="en">user_management</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.DisplayScript</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <metadata>
    <priority>0</priority>
    <help/>
  </metadata>
  <code><![CDATA[var saveTrigger;
if (webMI.getAccessControlSupport()) {
	gAccessControlManager = webMI.callExtension("SYSTEM.LIBRARY.ATVISE.QUICKDYNAMICS.Access Control Manager");
}
 function handleAccessControlResponse(compareRights, successCallback, failCallback) {
	if (!gAccessControlManager) {
		successCallback();
		return;
	}
	
	var requiredRights = {
		nodeIds: [],
		rights: []
	};
	
	compareRights = [].concat(compareRights);
	compareRights.forEach(function(r) {
		requiredRights.nodeIds.push(r.node);
		requiredRights.rights.push(r.right);
	});

	gAccessControlManager.getRightsDict(requiredRights.nodeIds, requiredRights.rights, function(response) {
		var allRights = true;
		for (var c in compareRights) {
			if (
				typeof response[compareRights[c].node] != "undefined" &&
				typeof response[compareRights[c].node][compareRights[c].right] != "undefined"
			) {
				allRights = allRights && response[compareRights[c].node][compareRights[c].right];
			} else {
				allRights = false;
				break;
			}
		}
		
		if (allRights) {
			successCallback();
		} else {
			failCallback();
		}
	});
}


/**
 * handle access control responses (e.g. lock functions or ignore error)
 * success if any node/right comibination is true
 * @param compareRights
 * @param callback success
 * @param callback fail
 */
function handleAccessControlResponseAny(compareRights, successCallback, failCallback) {
	if (!gAccessControlManager) {
		successCallback();
		return;
	}
	
	var requiredRights = {
		nodeIds: [],
		rights: []
	};
	
	compareRights = [].concat(compareRights);
	compareRights.forEach(function(r) {
		requiredRights.nodeIds.push(r.node);
		requiredRights.rights.push(r.right);
	});

	gAccessControlManager.getRightsDict(requiredRights.nodeIds, requiredRights.rights, function(response) {
		// do the checks
		var anyRights = false;

		for (var c in compareRights) {
			if (
				typeof response[compareRights[c].node] != "undefined" &&
				typeof response[compareRights[c].node][compareRights[c].right] != "undefined"
			) {
				anyRights = anyRights || response[compareRights[c].node][compareRights[c].right];
			}
		}
		
		if (anyRights) {
			successCallback();
		} else {
			failCallback();
		}
	});
}

webMI.addOnload(function(e){
	handleAccessControlResponse([{ node: "SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager", right: "execute" },{ node: "SYSTEM.SECURITY", right: "engineer" }], function() {
		webMI.gfx.setVisible("no_access", false);
		var toHighlight = webMI.query["buttonToHighlight"];
		if (toHighlight == "Groups") {
			saveTrigger = "saveGroups";
			webMI.gfx.setFill("btn_groups_button_bg", webMI.query["btn_button_bg"]);
			setTimeout(function () {	
				webMI.display.openDisplay("SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.group_manager", "", "manager_frame");
			},0);
		} 
		else if (toHighlight == "Users") {
			saveTrigger = "saveUsers";
			webMI.gfx.setFill("btn_users_button_bg", webMI.query["btn_button_bg"]);
			setTimeout(function () {	
				webMI.display.openDisplay("SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_manager", "", "manager_frame");
			},0);
		}
	}, function() {
		webMI.gfx.setFill("btn_groups_button_bg", "#b7b7b7");
		webMI.gfx.setStroke("btn_groups_button_stroke", "#b7b7b7");
		webMI.gfx.setFill("btn_users_button_bg", "#b7b7b7");
		webMI.gfx.setStroke("btn_users_button_stroke", "#b7b7b7");
		webMI.gfx.setFill("btn_save_button_bg", "#b7b7b7");
		webMI.gfx.setStroke("btn_save_button_stroke", "#b7b7b7");
		webMI.gfx.setVisible("no_access", true);	
	});
});


webMI.addEvent("btn_groups", "click", function(e) {
var id = "btn_groups";
var value = true;
saveTrigger = "saveGroups";

handleAccessControlResponse([{ node: "SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager", right: "execute" },{ node: "SYSTEM.SECURITY", right: "engineer" }], function() {
return function(value) {
	webMI.gfx.setFill("btn_groups_button_bg", webMI.query["btn_button_bg"]);
	webMI.gfx.setFill("btn_users_button_bg", webMI.query["globalFillColor"]);
	webMI.display.openDisplay("SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.group_manager", "", "manager_frame");
} (value);
}, function() {
		webMI.gfx.setFill("btn_groups_button_bg", "#b7b7b7");
		webMI.gfx.setStroke("btn_groups_button_stroke", "#b7b7b7");
	});

});


webMI.addEvent("btn_users", "click", function(e) {
var id = "btn_users";
var value = true;
saveTrigger = "saveUsers";
handleAccessControlResponse([{ node: "SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager", right: "execute" },{ node: "SYSTEM.SECURITY", right: "engineer" }], function() {
return function(value) {
	webMI.gfx.setFill("btn_users_button_bg", webMI.query["btn_button_bg"]);
	webMI.gfx.setFill("btn_groups_button_bg", webMI.query["globalFillColor"]);
	webMI.display.openDisplay("SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_manager", "", "manager_frame");;
} (value);
}, function() {
		webMI.gfx.setFill("btn_users_button_bg", "#b7b7b7");
		webMI.gfx.setStroke("btn_users_button_stroke", "#b7b7b7");
	});
});





webMI.addEvent("btn_save", "click", function(e) {
var id = "btn_save";
var value = true;
return function(value) {
webMI.trigger.fire(saveTrigger, "1");
} (value);
});

]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.user_manager" BrowseName="1:user_manager" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">user_manager</DisplayName>
		<Description Locale="en">user_manager</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.DisplayScript</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <metadata>
    <priority>0</priority>
    <help/>
  </metadata>
  <code><![CDATA[var USER_TABLE_NAME = webMI.query["tableID1"];
var GROUP_TABLE_NAME = webMI.query["tableID2"];

var check;
var gGroupTableController;
var gUserTableController;
var gTemplateData = {}; //stores the data of all templates
var gSelectedTemplateName = null;
var gSelectedGroupName = "";
var gAccessControlManager;
var editFlag = 0;

if (webMI.getAccessControlSupport()) {
	gAccessControlManager = webMI.callExtension("SYSTEM.LIBRARY.ATVISE.QUICKDYNAMICS.Access Control Manager");
}
 function handleAccessControlResponse(compareRights, successCallback, failCallback) {
	if (!gAccessControlManager) {
		successCallback();
		return;
	}
	
	var requiredRights = {
		nodeIds: [],
		rights: []
	};
	
	compareRights = [].concat(compareRights);
	compareRights.forEach(function(r) {
		requiredRights.nodeIds.push(r.node);
		requiredRights.rights.push(r.right);
	});

	gAccessControlManager.getRightsDict(requiredRights.nodeIds, requiredRights.rights, function(response) {
		// do the checks
		var allRights = true;

		for (var c in compareRights) {
			if (
				typeof response[compareRights[c].node] != "undefined" &&
				typeof response[compareRights[c].node][compareRights[c].right] != "undefined"
			) {
				allRights = allRights && response[compareRights[c].node][compareRights[c].right];
			} else {
				allRights = false;
				break;
			}
		}
		
		if (allRights) {
			successCallback();
		} else {
			failCallback();
		}
	});
}


/**
 * handle access control responses (e.g. lock functions or ignore error)
 * success if any node/right comibination is true
 * @param compareRights
 * @param callback success
 * @param callback fail
 */
function handleAccessControlResponseAny(compareRights, successCallback, failCallback) {
	if (!gAccessControlManager) {
		successCallback();
		return;
	}
	
	var requiredRights = {
		nodeIds: [],
		rights: []
	};
	
	compareRights = [].concat(compareRights);
	compareRights.forEach(function(r) {
		requiredRights.nodeIds.push(r.node);
		requiredRights.rights.push(r.right);
	});

	gAccessControlManager.getRightsDict(requiredRights.nodeIds, requiredRights.rights, function(response) {
		// do the checks
		var anyRights = false;

		for (var c in compareRights) {
			if (
				typeof response[compareRights[c].node] != "undefined" &&
				typeof response[compareRights[c].node][compareRights[c].right] != "undefined"
			) {
				anyRights = anyRights || response[compareRights[c].node][compareRights[c].right];
			}
		}
		
		if (anyRights) {
			successCallback();
		} else {
			failCallback();
		}
	});
}


webMI.addOnload(function(e){	
	initGroupTable();
	initUserTable();
});




webMI.addEvent("btnAdd", "click", function(e) {
var id = "btnAdd";
var value = true;
return function(value) {
	webMI.display.openWindow({display:"SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_add",extern:false,height:620,menubar:false,modal:true,movable:false,resizable:false,scrollbars:false,status:false,title:"",toolbar:false,width:860,query:{triggerName: "add_user"}}); 
} (value);
});


function initGroupTable(){
	webMI.table.loadResources(function() {
		var config = {};
		config["columns"] = createTableColumnsFromGlobalList(webMI.query.columnsGroups, "Main", {}, {
			defaultvalue: function (row, cell, value, columnDef, dataContext) {
				return "<div style='width:100%; text-align: center'>" + formatNumberValue(dataContext, value) + "</div>";
			}
		});
        config["mode"] = "once"; // or live/triggered
        config["bufferInterval"] = 75;
		config["onClickCallback"] = function(e, info){
			var row = info.rowIndex;			
			if (info.column.id == "atvise_marker") {				
				editFlag = 1;
			}	
		}
        config["onHeaderClickCallback"] = function(e, info){
			if (info.column.id != "atvise_marker") {				
				return;
			}	
			//setDeleteExportButtonInActive();
        };
		
		config["dataRequestFunction"] = function customDataRequest(continuation) {
			gGroupTableController = this;
			loadGroups("");
		};
	

        webMI.table.register(GROUP_TABLE_NAME, "config", config);
        webMI.table.setReady(GROUP_TABLE_NAME, "config");
    });
}

function initUserTable(){
			
	webMI.table.loadResources(function() {
		
		var config = {};
		var controller;
		config["columns"] = createTableColumnsFromGlobalList(webMI.query.columnsUsers, "Main", {}, {}).concat({
			id: "edit",
			name: "T{Edit}",
			field: "edit",
			orderMain: 6,
			sortable: false,
			filter: false,
			visible: true, 
			resizable: true,
			width: 70,
			formatter : function (row, cell, value, columnDef, dataContext) {
				return "<div style='width:100%; text-align:center;'><i class='fas fa-edit'></i></div>";
			},
			defaultvalue: function (row, cell, value, columnDef, dataContext) {
				return "<div style='width:100%; text-align: center'>" + formatNumberValue(dataContext, value) + "</div>";
			}
			
		});
		var DeleteColumn = {id: "delete",
			name: "T{delete}",
			field: "delete",
			orderMain: 7,
			sortable: false,
			filter: false,
			visible: true, 
			resizable: true,
			width: 70,
			formatter : function (row, cell, value, columnDef, dataContext) {
				return "<div style='width:100%; text-align:center;'><i class='fas fa-trash'></i></div>";
			},
			defaultvalue: function (row, cell, value, columnDef, dataContext) {
				return "<div style='width:100%; text-align: center'>" + formatNumberValue(dataContext, value) + "</div>";
			}};
		config["columns"].push( DeleteColumn );
		
        config["mode"] = "once"; // or live/triggered
        config["bufferInterval"] = 75;
		config["onClickCallback"] = function(e, info){
				var items = info.item;
				var row = info.rowIndex;
				var column = info.column;
				var itemId = info.item.id;
				var item = [];		
				controller = webMI.table.request("atvise_user", "controller");
				if(info.column.id == "edit"){
					webMI.query.user = info.item.username;	
					webMI.query.colid = itemId;
					webMI.display.openWindow({display:"SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_editor",
					extern:false,width:860,height:560,menubar:false,
					modal:true,movable:true,resizable:false,scrollbars:false,status:false,title:"T{Edit user}",
					toolbar:false,query:webMI.query});
					webMI.trigger.connect("edit_user", function(e){	
						if (e.value == "") {
							return;
						}else{	
							var superuser = (e.value.superuser == 1) ? true : false;											const ids = e.value.colid.split('_');
							var rownum = ids[1];
							item = {
								"name":e.value.fullname,
								"username":e.value.username,
								"language":e.value.language,
								"description":controller.grid.getDataItem(rownum).description,
								"superuser":superuser,
								atvise_marker: false,
								atvise_expand: false					
							};
							item.id = e.value.colid;
							gUserTableController.updateData(item.id, item);
						}
					});
										
					
					return;						
				} else if (info.column.id == "delete") {
					webMI.display.openWindow({display:"SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_delete",extern:false,height:220,menubar:false,modal:true,movable:false,resizable:false,scrollbars:false,status:false,title:"",toolbar:false,width:430,query:{triggerName: "delete_user",user: info.item.username, colid: itemId}});
					webMI.trigger.connect("delete_user", function(e){
						if (e.value == "") {
							return;
						}else if(controller.dataView.getItemById(e.value.colid)){
							controller.dataView.deleteItem(e.value.colid);
						}
					});
				}
				else{
					if(check != items.username){
						if(editFlag==1){
							check = items.username;
							webMI.display.openWindow({display:"SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.save_changes",extern:false,height:220,menubar:false,modal:false,movable:false,resizable:false,scrollbars:false,status:false,title:"",toolbar:false,width:430,query:{triggerName: "saveUserChanges",user: info.item.username, colid: "id_"+row}});						
							webMI.trigger.connect("saveUserChanges", function(e){
								if (e.value.save == 1) {
									webMI.trigger.fire("saveUsers", "1");
									controller.grid.setSelectedRows([row]);
									loadGroups(items.username);
									check = items.username;
									e.value.save = 0;
								}else if(e.value.save == 0){
									editFlag = 0;
									controller.grid.setSelectedRows([row]);
									loadGroups(items.username);
									check = items.username;
								}
							});
							
						}
						else{
							controller.grid.setSelectedRows([row]);
							loadGroups(items.username);
							check = items.username;
						}
					}
				}
			}
        
        config["onHeaderClickCallback"] = function(e, info){
			if (info.column.id != "atvise_marker") {
				return;
			}
			
			//setDeleteExportButtonInActive();
        };
		
		config["dataRequestFunction"] = function customDataRequest(continuation) {
			gUserTableController = this;
			loadUsers("");
		};

        webMI.table.register(USER_TABLE_NAME, "config", config);
        webMI.table.setReady(USER_TABLE_NAME, "config");
    });
}

webMI.trigger.connect("add_user", function(e){
	if (e.value == "") {
		return;
	}else{
		var superuser = (e.value.superuser == 1) ? true : false;
		var item = {
			"name":e.value.fullname,
			"username":e.value.username,
			"language":e.value.language,
			"description":((e.value.description) ? e.value.description : ""),
			"superuser":superuser,
			atvise_marker: false,
			atvise_expand: false					
		};
		var controller = webMI.table.request("atvise_user", "controller");
		item.id = "id_"+controller.grid.getDataLength();
		var data = controller.grid.getData();
		data.insertItem(controller.grid.getDataLength(), item);
		return;
	}
});

webMI.trigger.connect("saveUsers", function(e){
	if (e.value == "") {
		editFlag = 0;
		return;
	}else{
		var selectUserId=gUserTableController.grid.getSelectedRows();
		if (selectUserId.length != 0){
			editFlag = 0;
			var selectUserName=gUserTableController.grid.getDataItem(selectUserId);
			var selectGroupIds = [];
			var selectGroups = [];
			selectGroupIds = gGroupTableController.grid.getSelectedRows();
			for(var i=0; i < selectGroupIds.length; i++){
				selectGroups.push(gGroupTableController.grid.getDataItem(selectGroupIds[i]).name);
			}
			var options = {};
			options.mode = "saveUsers";
			options.groups = selectGroups;
			options.check = selectUserName.username;
			handleAccessControlResponse([ 
			{ node: "SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager", right: "execute" }
			], function() {
				webMI.data.call("UserManagement", options, function(e){
					var data = {result: []};
				});
			}, function() {});
		}
	else{
		alert("Please select user first.");
	}
	
	}
});

function loadGroups(tb){
	var options = {};
	options.mode = "Group";
	if(tb != ""){
		options.check = tb;
	}
	handleAccessControlResponse([{ node: "SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager", right: "execute" },{ node: "SYSTEM.SECURITY", right: "engineer" }], function() {
		webMI.data.call("UserManagement", options, function(e){
			var data = {result: []};
			var selection = [];
			for(var i=0; i < e.length; i++){
				data.result.push({name: e[i].name, description: e[i].description, private: e[i].private, check: e[i].usercheck});
				if(e[i].usercheck == 1){
					selection.push(i);
				}
			}				
			if(tb != ""){
				if(selection.length>0){
					gGroupTableController.grid.setSelectedRows(selection);
				}
				else{						
					var tmpitems = gGroupTableController.getSelectedItems();
					for(var i=0; i<tmpitems.length;i++){
						gGroupTableController.toggleSelectedItem(tmpitems[i]);
					}
				}		
			}else{
				gGroupTableController.clearData();
				gGroupTableController.addData(data);
			}
		});
	}, function() {});
}

function loadUsers(tb){
	var options = {};
	options.mode = "User";
	gUserTableController.grid.getSelectedRows().forEach(function (rowIndex) {
		var dataItem = gUserTableController.grid.getDataItem(rowIndex);				
	});
	gUserTableController.dataView.getItemMetadata = metadata(gUserTableController.dataView.getItemMetadata);
	function metadata(old_metadata_provider) {
	  return function(row) {
		var item = this.getItem(row);
		var ret  = (old_metadata_provider(row) || {});
		
		if (item) {
		  ret.cssClasses = (ret.cssClasses || '');
		  ret.cssClasses += ' user_row';
		}
	
		return ret;
	  }
	}
	
	handleAccessControlResponse([{ node: "SYSTEM.LIBRARY.PROJECT.SERVERSCRIPTS.UserManagement.UserGroupManager", right: "execute" },{ node: "SYSTEM.SECURITY", right: "engineer" }], function() {
		webMI.data.call("UserManagement", options, function(e){
			var data = {result: []};
			for(var i=0; i < e.length; i++){
				data.result.push({name: e[i].name, description: e[i].description, username: e[i].username, language: e[i].language, superuser: e[i].superuser, check: e[i].usercheck});
			}				
			gUserTableController.clearData();
			gUserTableController.addData(data);
			
		});
	}, function() {});
}
]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement.user_new" BrowseName="1:user_new" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">user_new</DisplayName>
		<Description Locale="en">user_new</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.DISPLAYSCRIPTS.usermanagement</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.DisplayScript</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <metadata>
    <priority>0</priority>
    <help/>
  </metadata>
  <code><![CDATA[/**
 * DECLARATION SECTION
 */
var username = "", colid;
var closeOnSave = false;
var keyboard = webMI.query["keyboard"];
var trigger_username = "com.atvise.user.username";


/**
 * ONLOAD/ONUNLOAD SECTION
 */
webMI.addOnload(function(){
	webMI.gfx.setText("error_message", "");
});

webMI.addOnunload(function(){
	if(!closeOnSave){
		webMI.trigger.fire("new_user", "");
	}
});


/**
 * TRIGGER SECTION
 */
webMI.trigger.connect("clicked", function (e) {
    webMI.gfx.setText("error_message", "");
    
	if (typeof username != "undefined" && username != "") {

		webMI.data.call("UserManagement", { "mode": "New", "username": username }, function (e) {
			if (e.error) {
				webMI.gfx.setFill("error_message", "#FF0000");
				webMI.gfx.setText("error_message", "T{Error}: T{" + e.error + "}");
			} else {
				webMI.trigger.fire("new_user", { "username": username });
				closeOnSave = true;
				webMI.display.closeWindow();
			}

		});
	} else {
		webMI.gfx.setFill("error_message", "#FF0000");
		webMI.gfx.setText("error_message", "T{Error}: T{Please enter username!}");
	}
}, "save_button");

webMI.trigger.connect("clicked", function (e) {
        webMI.display.closeWindow();
        webMI.trigger.fire("new_user", "");
}, "cancel_button");

webMI.trigger.connect("valuechanged", function (e) {
    webMI.gfx.setText("error_message", "");
    username = e.value;
}, "username_input");

webMI.trigger.connect(trigger_username, function (e) {
    webMI.gfx.setText("error_message", "");
    username = e.value;
    webMI.trigger.fire("setValue", e.value, "username_input");
});


webMI.trigger.connect("clicked", function (e) {
    webMI.query.trigger = trigger_username;
    webMI.query.password = "No";
    webMI.query.value = username;
    webMI.display.openWindow({
        display: keyboard,
        extern: false,
        height: 300,
        menubar: false,
        modal: true,
        movable: true,
        resizable: false,
        scrollbars: false,
        status: false,
        title: "T{Keyboard}",
        toolbar: false,
        width: 700,
        query: webMI.query
    });
}, "username_keyboard");
]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAObject NodeId="ns=1;s=SYSTEM" BrowseName="1:SYSTEM">
		<DisplayName Locale="en">SYSTEM</DisplayName>
		<Description Locale="en">SYSTEM</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">Objects</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise ExportedNodeId="ns=1;s=SYSTEM.GLOBALS.atvObjectDisplays.UserManager" ExportedBrowseName="1:UserManager" Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.GLOBALS" BrowseName="1:GLOBALS">
		<DisplayName Locale="en">GLOBALS</DisplayName>
		<Description Locale="en">GLOBALS</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.GLOBALS.atvObjectDisplays" BrowseName="1:atvObjectDisplays">
		<DisplayName Locale="en">atvObjectDisplays</DisplayName>
		<Description Locale="en">atvObjectDisplays</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.GLOBALS</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.GLOBALS.atvObjectDisplays.UserManager" BrowseName="1:UserManager">
		<DisplayName Locale="en">UserManager</DisplayName>
		<Description Locale="en">UserManager</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.GLOBALS.atvObjectDisplays</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
	</UAObject>
	<UAVariable NodeId="ns=1;s=SYSTEM.GLOBALS.atvObjectDisplays.UserManager.GroupColumns" BrowseName="1:GroupColumns" DataType="String" ValueRank="1" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">GroupColumns</DisplayName>
		<Description Locale="en">GroupColumns</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.GLOBALS.atvObjectDisplays.UserManager</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.GlobalVariable</Reference>
		</References>
		<Value>
			<uax:ListOfString>
				<uax:String>&quot;1&quot;:{&quot;columnName&quot;:&quot;T{Name}&quot;,&quot;field&quot;:&quot;name&quot;,&quot;filter&quot;:&quot;true&quot;,&quot;orderMain&quot;:&quot;1&quot;,&quot;sortable&quot;:&quot;true&quot;,&quot;visibleMain&quot;:&quot;true&quot;,&quot;widthMain&quot;:&quot;178&quot;}</uax:String>
				<uax:String>&quot;2&quot;:{&quot;columnName&quot;:&quot;T{Description}&quot;,&quot;field&quot;:&quot;description&quot;,&quot;filter&quot;:&quot;true&quot;,&quot;orderMain&quot;:&quot;2&quot;,&quot;sortable&quot;:&quot;true&quot;,&quot;visibleMain&quot;:&quot;true&quot;,&quot;widthMain&quot;:&quot;520&quot;}</uax:String>
				<uax:String>&quot;3&quot;:{&quot;columnName&quot;:&quot;T{Private}&quot;,&quot;field&quot;:&quot;private&quot;,&quot;filter&quot;:&quot;true&quot;,&quot;orderMain&quot;:&quot;3&quot;,&quot;sortable&quot;:&quot;true&quot;,&quot;visibleMain&quot;:&quot;true&quot;,&quot;widthMain&quot;:&quot;90&quot;}</uax:String>
			</uax:ListOfString>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.GLOBALS.atvObjectDisplays.UserManager.GroupColumns.types" BrowseName="1:types" DataType="String" ValueRank="1" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">types</DisplayName>
		<Description Locale="en">types</Description>
		<References>
			<Reference ReferenceType="HasProperty" IsForward="false">ns=1;s=SYSTEM.GLOBALS.atvObjectDisplays.UserManager.GroupColumns</Reference>
			<Reference ReferenceType="HasTypeDefinition">PropertyType</Reference>
		</References>
		<Value>
			<uax:ListOfString>
				<uax:String>string</uax:String>
				<uax:String>string</uax:String>
				<uax:String>bool</uax:String>
				<uax:String>number</uax:String>
				<uax:String>bool</uax:String>
				<uax:String>bool</uax:String>
				<uax:String>number</uax:String>
			</uax:ListOfString>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.GLOBALS.atvObjectDisplays.UserManager.UserColumns" BrowseName="1:UserColumns" DataType="String" ValueRank="1" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">UserColumns</DisplayName>
		<Description Locale="en">UserColumns</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.GLOBALS.atvObjectDisplays.UserManager</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.GlobalVariable</Reference>
		</References>
		<Value>
			<uax:ListOfString>
				<uax:String>&quot;1&quot;:{&quot;columnName&quot;:&quot;T{Username}&quot;,&quot;field&quot;:&quot;username&quot;,&quot;filter&quot;:&quot;true&quot;,&quot;orderMain&quot;:&quot;1&quot;,&quot;sortable&quot;:&quot;true&quot;,&quot;visibleMain&quot;:&quot;true&quot;,&quot;widthMain&quot;:&quot;125&quot;}</uax:String>
				<uax:String>&quot;2&quot;:{&quot;columnName&quot;:&quot;T{Name}&quot;,&quot;field&quot;:&quot;name&quot;,&quot;filter&quot;:&quot;true&quot;,&quot;orderMain&quot;:&quot;2&quot;,&quot;sortable&quot;:&quot;true&quot;,&quot;visibleMain&quot;:&quot;true&quot;,&quot;widthMain&quot;:&quot;178&quot;}</uax:String>
				<uax:String>&quot;3&quot;:{&quot;columnName&quot;:&quot;T{Description}&quot;,&quot;field&quot;:&quot;description&quot;,&quot;filter&quot;:&quot;true&quot;,&quot;orderMain&quot;:&quot;3&quot;,&quot;sortable&quot;:&quot;true&quot;,&quot;visibleMain&quot;:&quot;true&quot;,&quot;widthMain&quot;:&quot;250&quot;}</uax:String>
				<uax:String>&quot;4&quot;:{&quot;columnName&quot;:&quot;T{Language}&quot;,&quot;field&quot;:&quot;language&quot;,&quot;filter&quot;:&quot;true&quot;,&quot;orderMain&quot;:&quot;4&quot;,&quot;sortable&quot;:&quot;true&quot;,&quot;visibleMain&quot;:&quot;true&quot;,&quot;widthMain&quot;:&quot;85&quot;}</uax:String>
				<uax:String>&quot;5&quot;:{&quot;columnName&quot;:&quot;T{SuperUser}&quot;,&quot;field&quot;:&quot;superuser&quot;,&quot;filter&quot;:&quot;true&quot;,&quot;orderMain&quot;:&quot;5&quot;,&quot;sortable&quot;:&quot;true&quot;,&quot;visibleMain&quot;:&quot;true&quot;,&quot;widthMain&quot;:&quot;98&quot;}</uax:String>
			</uax:ListOfString>
		</Value>
	</UAVariable>
	<UAVariable NodeId="ns=1;s=SYSTEM.GLOBALS.atvObjectDisplays.UserManager.UserColumns.types" BrowseName="1:types" DataType="String" ValueRank="1" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">types</DisplayName>
		<Description Locale="en">types</Description>
		<References>
			<Reference ReferenceType="HasProperty" IsForward="false">ns=1;s=SYSTEM.GLOBALS.atvObjectDisplays.UserManager.UserColumns</Reference>
			<Reference ReferenceType="HasTypeDefinition">PropertyType</Reference>
		</References>
		<Value>
			<uax:ListOfString>
				<uax:String>string</uax:String>
				<uax:String>string</uax:String>
				<uax:String>bool</uax:String>
				<uax:String>number</uax:String>
				<uax:String>bool</uax:String>
				<uax:String>bool</uax:String>
				<uax:String>number</uax:String>
			</uax:ListOfString>
		</Value>
	</UAVariable>
	<UAObject NodeId="ns=1;s=AGENT" BrowseName="1:AGENT">
		<DisplayName Locale="en">AGENT</DisplayName>
		<Description Locale="en">AGENT</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">Objects</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=ObjectTypes.ATVISE.Server.Local</Reference>
		</References>
		<Extensions>
			<atvise ExportedNodeId="ns=1;s=AGENT.DISPLAYS.MAIN.User Management" ExportedBrowseName="1:User Management" Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=AGENT.DISPLAYS" BrowseName="1:DISPLAYS">
		<DisplayName Locale="en">DISPLAYS</DisplayName>
		<Description Locale="en">DISPLAYS</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=AGENT</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=AGENT.DISPLAYS.MAIN" BrowseName="1:MAIN">
		<DisplayName Locale="en">MAIN</DisplayName>
		<Description Locale="en">MAIN</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=AGENT.DISPLAYS</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAVariable NodeId="ns=1;s=AGENT.DISPLAYS.MAIN.User Management" BrowseName="1:User Management" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">User Management</DisplayName>
		<Description Locale="en">User Management</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=AGENT.DISPLAYS.MAIN</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.Display</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<svg height="890" version="1.2" width="1675" xmlns="http://www.w3.org/2000/svg" xmlns:atv="http://webmi.atvise.com/2007/svgext" xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs/>
 <metadata>
  <atv:gridconfig enabled="false" gridstyle="lines" height="20" width="20"/>
  <atv:snapconfig enabled="false" height="10" width="10"/>
 </metadata>
 <script atv:desc="" atv:name="" type="text/ecmascript"/>
 <svg atv:refpx="837.5" atv:refpy="445" height="890" id="id_0" width="1675" x="0" xlink:href="SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.Advanced.usermanagement.user_management" y="0"/>
</svg>]]></uax:XmlElement>
		</Value>
	</UAVariable>
</UANodeSet>
