mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-03-09 15:40:18 +00:00 
			
		
		
		
	First version with Intel AMT Manager module.
This commit is contained in:
		
							parent
							
								
									32483bf18a
								
							
						
					
					
						commit
						6e97282ea1
					
				
					 63 changed files with 388 additions and 141 deletions
				
			
		| 
						 | 
					@ -90,6 +90,7 @@
 | 
				
			||||||
    <Compile Include="agents\tinycore.js" />
 | 
					    <Compile Include="agents\tinycore.js" />
 | 
				
			||||||
    <Compile Include="amt-ider.js" />
 | 
					    <Compile Include="amt-ider.js" />
 | 
				
			||||||
    <Compile Include="amtevents.js" />
 | 
					    <Compile Include="amtevents.js" />
 | 
				
			||||||
 | 
					    <Compile Include="amtmanager.js" />
 | 
				
			||||||
    <Compile Include="amtscanner.js" />
 | 
					    <Compile Include="amtscanner.js" />
 | 
				
			||||||
    <Compile Include="amtscript.js" />
 | 
					    <Compile Include="amtscript.js" />
 | 
				
			||||||
    <Compile Include="amt\amt-ider-module.js" />
 | 
					    <Compile Include="amt\amt-ider-module.js" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,7 @@
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Construct a MeshServer object
 | 
					// Construct a MeshServer object
 | 
				
			||||||
var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, parent, mode) {
 | 
					var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, mode) {
 | 
				
			||||||
    //console.log('CreateWsmanComm', host, port, user, pass, tls, tlsoptions);
 | 
					    //console.log('CreateWsmanComm', host, port, user, pass, tls, tlsoptions);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var obj = {};    
 | 
					    var obj = {};    
 | 
				
			||||||
| 
						 | 
					@ -38,8 +38,7 @@ var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, parent,
 | 
				
			||||||
    obj.pass = pass;
 | 
					    obj.pass = pass;
 | 
				
			||||||
    obj.xtls = tls;
 | 
					    obj.xtls = tls;
 | 
				
			||||||
    obj.xtlsoptions = tlsoptions;
 | 
					    obj.xtlsoptions = tlsoptions;
 | 
				
			||||||
    obj.parent = parent;
 | 
					    obj.mode = mode; // 1 = Direct, 2 = CIRA, 3 = APF relay
 | 
				
			||||||
    obj.mode = mode;//1: direct, 2: CIRA, 3: APF relay
 | 
					 | 
				
			||||||
    obj.xtlsFingerprint;
 | 
					    obj.xtlsFingerprint;
 | 
				
			||||||
    obj.xtlsCertificate = null;
 | 
					    obj.xtlsCertificate = null;
 | 
				
			||||||
    obj.xtlsCheck = 0; // 0 = No TLS, 1 = CA Checked, 2 = Pinned, 3 = Untrusted
 | 
					    obj.xtlsCheck = 0; // 0 = No TLS, 1 = CA Checked, 2 = Pinned, 3 = Untrusted
 | 
				
			||||||
| 
						 | 
					@ -90,7 +89,7 @@ var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, parent,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // NODE.js specific private method
 | 
					    // NODE.js specific private method
 | 
				
			||||||
    obj.PerformAjaxExNodeJS2 = function (postdata, callback, tag, url, action, retry) {
 | 
					    obj.PerformAjaxExNodeJS2 = function (postdata, callback, tag, url, action, retry) {
 | 
				
			||||||
        if (retry <= 0 || obj.FailAllError != 0) {
 | 
					        if ((retry <= 0) || (obj.FailAllError != 0)) {
 | 
				
			||||||
            // Too many retry, fail here.
 | 
					            // Too many retry, fail here.
 | 
				
			||||||
            obj.ActiveAjaxCount--;
 | 
					            obj.ActiveAjaxCount--;
 | 
				
			||||||
            if (obj.FailAllError != 999) obj.gotNextMessages(null, 'error', { status: ((obj.FailAllError == 0) ? 408 : obj.FailAllError) }, [postdata, callback, tag, url, action]); // 408 is timeout error
 | 
					            if (obj.FailAllError != 999) obj.gotNextMessages(null, 'error', { status: ((obj.FailAllError == 0) ? 408 : obj.FailAllError) }, [postdata, callback, tag, url, action]); // 408 is timeout error
 | 
				
			||||||
| 
						 | 
					@ -167,7 +166,7 @@ var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, parent,
 | 
				
			||||||
        obj.socketState = 1;
 | 
					        obj.socketState = 1;
 | 
				
			||||||
        obj.kerberosDone = 0;
 | 
					        obj.kerberosDone = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ((obj.parent != null) && (obj.mode === 2) || (obj.mode === 3)) { // CIRA and APF            
 | 
					        if ((obj.parent != null) && ((obj.mode === 2) || (obj.mode === 3))) { // CIRA and APF            
 | 
				
			||||||
            if (obj.mode == 2) { // CIRA
 | 
					            if (obj.mode == 2) { // CIRA
 | 
				
			||||||
                var ciraconn = obj.parent.mpsserver.ciraConnections[obj.host];
 | 
					                var ciraconn = obj.parent.mpsserver.ciraConnections[obj.host];
 | 
				
			||||||
                obj.socket = obj.parent.mpsserver.SetupCiraChannel(ciraconn, obj.port);
 | 
					                obj.socket = obj.parent.mpsserver.SetupCiraChannel(ciraconn, obj.port);
 | 
				
			||||||
| 
						 | 
					@ -200,7 +199,7 @@ var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, parent,
 | 
				
			||||||
                obj.socket.setTimeout(6000); // Set socket idle timeout
 | 
					                obj.socket.setTimeout(6000); // Set socket idle timeout
 | 
				
			||||||
                obj.socket.on('data', obj.xxOnSocketData);
 | 
					                obj.socket.on('data', obj.xxOnSocketData);
 | 
				
			||||||
                obj.socket.on('close', obj.xxOnSocketClosed);
 | 
					                obj.socket.on('close', obj.xxOnSocketClosed);
 | 
				
			||||||
                obj.socket.on('timeout', obj.xxOnSocketClosed);
 | 
					                obj.socket.on('timeout', obj.xxOnSocketTimeout);
 | 
				
			||||||
                obj.socket.connect(obj.port, obj.host, obj.xxOnSocketConnected);
 | 
					                obj.socket.connect(obj.port, obj.host, obj.xxOnSocketConnected);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                // Connect with TLS
 | 
					                // Connect with TLS
 | 
				
			||||||
| 
						 | 
					@ -210,14 +209,13 @@ var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, parent,
 | 
				
			||||||
                    if (obj.xtlsoptions.ca) options.ca = obj.xtlsoptions.ca;
 | 
					                    if (obj.xtlsoptions.ca) options.ca = obj.xtlsoptions.ca;
 | 
				
			||||||
                    if (obj.xtlsoptions.cert) options.cert = obj.xtlsoptions.cert;
 | 
					                    if (obj.xtlsoptions.cert) options.cert = obj.xtlsoptions.cert;
 | 
				
			||||||
                    if (obj.xtlsoptions.key) options.key = obj.xtlsoptions.key;
 | 
					                    if (obj.xtlsoptions.key) options.key = obj.xtlsoptions.key;
 | 
				
			||||||
                    obj.xtlsoptions = options;
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                obj.socket = obj.tls.connect(obj.port, obj.host, obj.xtlsoptions, obj.xxOnSocketConnected);
 | 
					                obj.socket = obj.tls.connect(obj.port, obj.host, options, obj.xxOnSocketConnected);
 | 
				
			||||||
                obj.socket.setEncoding('binary');
 | 
					                obj.socket.setEncoding('binary');
 | 
				
			||||||
                obj.socket.setTimeout(6000); // Set socket idle timeout
 | 
					                obj.socket.setTimeout(6000); // Set socket idle timeout
 | 
				
			||||||
                obj.socket.on('data', obj.xxOnSocketData);
 | 
					                obj.socket.on('data', obj.xxOnSocketData);
 | 
				
			||||||
                obj.socket.on('close', obj.xxOnSocketClosed);
 | 
					                obj.socket.on('close', obj.xxOnSocketClosed);
 | 
				
			||||||
                obj.socket.on('timeout', obj.xxOnSocketClosed);
 | 
					                obj.socket.on('timeout', obj.xxOnSocketTimeout);
 | 
				
			||||||
                obj.socket.on('error', function (e) { if (e.message && e.message.indexOf('sslv3 alert bad record mac') >= 0) { obj.xtlsMethod = 1 - obj.xtlsMethod; } });
 | 
					                obj.socket.on('error', function (e) { if (e.message && e.message.indexOf('sslv3 alert bad record mac') >= 0) { obj.xtlsMethod = 1 - obj.xtlsMethod; } });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            obj.socket.setNoDelay(true); // Disable nagle. We will encode each WSMAN request as a single send block and want to send it at once. This may help Intel AMT handle pipelining?
 | 
					            obj.socket.setNoDelay(true); // Disable nagle. We will encode each WSMAN request as a single send block and want to send it at once. This may help Intel AMT handle pipelining?
 | 
				
			||||||
| 
						 | 
					@ -232,13 +230,13 @@ var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, parent,
 | 
				
			||||||
    obj.xxOnSocketConnected = function () {
 | 
					    obj.xxOnSocketConnected = function () {
 | 
				
			||||||
        if (obj.socket == null) return;
 | 
					        if (obj.socket == null) return;
 | 
				
			||||||
        // check TLS certificate for webrelay and direct only
 | 
					        // check TLS certificate for webrelay and direct only
 | 
				
			||||||
        if (obj.mode < 2 && obj.xtls == 1) {
 | 
					        if (((obj.mode == null) || (obj.mode < 2)) && (obj.xtls == 1)) {
 | 
				
			||||||
            obj.xtlsCertificate = obj.socket.getPeerCertificate();
 | 
					            obj.xtlsCertificate = obj.socket.getPeerCertificate();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // ###BEGIN###{Certificates}
 | 
					            // ###BEGIN###{Certificates}
 | 
				
			||||||
            // Setup the forge certificate check
 | 
					            // Setup the forge certificate check
 | 
				
			||||||
            var camatch = 0;
 | 
					            var camatch = 0;
 | 
				
			||||||
            if (obj.xtlsoptions.ca) {
 | 
					            if ((obj.xtlsoptions != null) && (obj.xtlsoptions.ca != null)) {
 | 
				
			||||||
                var forgeCert = forge.pki.certificateFromAsn1(forge.asn1.fromDer(atob(obj.xtlsCertificate.raw.toString('base64'))));
 | 
					                var forgeCert = forge.pki.certificateFromAsn1(forge.asn1.fromDer(atob(obj.xtlsCertificate.raw.toString('base64'))));
 | 
				
			||||||
                var caStore = forge.pki.createCaStore(obj.xtlsoptions.ca);
 | 
					                var caStore = forge.pki.createCaStore(obj.xtlsoptions.ca);
 | 
				
			||||||
                // Got thru all certificates in the store and look for a match.
 | 
					                // Got thru all certificates in the store and look for a match.
 | 
				
			||||||
| 
						 | 
					@ -351,9 +349,7 @@ var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, parent,
 | 
				
			||||||
        if (isNaN(s)) s = 500;
 | 
					        if (isNaN(s)) s = 500;
 | 
				
			||||||
        if (s == 401 && ++(obj.authcounter) < 3) {
 | 
					        if (s == 401 && ++(obj.authcounter) < 3) {
 | 
				
			||||||
            obj.challengeParams = obj.parseDigest(header['www-authenticate']); // Set the digest parameters, after this, the socket will close and we will auto-retry            
 | 
					            obj.challengeParams = obj.parseDigest(header['www-authenticate']); // Set the digest parameters, after this, the socket will close and we will auto-retry            
 | 
				
			||||||
            if (obj.mode==1) {
 | 
					            if (obj.mode == 1) { obj.socket.end(); } 
 | 
				
			||||||
                obj.socket.end();
 | 
					 | 
				
			||||||
            } 
 | 
					 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            var r = obj.pendingAjaxCall.shift();
 | 
					            var r = obj.pendingAjaxCall.shift();
 | 
				
			||||||
            if (r == null || r.length < 1) { console.log("pendingAjaxCall error, " + r); return; }
 | 
					            if (r == null || r.length < 1) { console.log("pendingAjaxCall error, " + r); return; }
 | 
				
			||||||
| 
						 | 
					@ -366,22 +362,23 @@ var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, parent,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // NODE.js specific private method
 | 
					    // NODE.js specific private method
 | 
				
			||||||
    obj.xxOnSocketClosed = function (data) {
 | 
					    obj.xxOnSocketClosed = function () {
 | 
				
			||||||
        //obj.Debug("xxOnSocketClosed");
 | 
					        //obj.Debug("xxOnSocketClosed");
 | 
				
			||||||
        obj.socketState = 0;
 | 
					        obj.socketState = 0;
 | 
				
			||||||
        if (obj.mode ==1 && obj.socket != null) { obj.socket.destroy(); obj.socket = null; }
 | 
					        if (((obj.mode == null) || (obj.mode == 1)) && (obj.socket != null)) { obj.socket.destroy(); obj.socket = null; }
 | 
				
			||||||
        if (obj.pendingAjaxCall.length > 0) {
 | 
					        if (obj.pendingAjaxCall.length > 0) {
 | 
				
			||||||
            var r = obj.pendingAjaxCall.shift();
 | 
					            var r = obj.pendingAjaxCall.shift(), retry = r[5];
 | 
				
			||||||
            var retry = r[5];
 | 
					 | 
				
			||||||
            setTimeout(function () { obj.PerformAjaxExNodeJS2(r[0], r[1], r[2], r[3], r[4], --retry) }, 500); // Wait half a second and try again
 | 
					            setTimeout(function () { obj.PerformAjaxExNodeJS2(r[0], r[1], r[2], r[3], r[4], --retry) }, 500); // Wait half a second and try again
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    obj.xxOnSocketTimeout = function () {
 | 
				
			||||||
 | 
					        if (((obj.mode == null) || (obj.mode == 1)) && (obj.socket != null)) { obj.socket.destroy(); obj.socket = null; }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // NODE.js specific private method
 | 
					    // NODE.js specific private method
 | 
				
			||||||
    obj.xxSend = function (x) {
 | 
					    obj.xxSend = function (x) {
 | 
				
			||||||
        if (obj.socketState == 2) {
 | 
					        if (obj.socketState == 2) { obj.socket.write(Buffer.from(x, "binary")); }
 | 
				
			||||||
            obj.socket.write(Buffer.from(x, "binary"));
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Cancel all pending queries with given status
 | 
					    // Cancel all pending queries with given status
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,26 +21,16 @@ limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Construct a MeshServer object
 | 
					// Construct a MeshServer object
 | 
				
			||||||
function WsmanStackCreateService(CreateWsmanComm, host, port, user, pass, tls, extra, parent, mode)
 | 
					//function WsmanStackCreateService(comm, host, port, user, pass, tls, extra, parent, mode)
 | 
				
			||||||
 | 
					function WsmanStackCreateService(comm)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    var obj = {_ObjectID: 'WSMAN'};
 | 
					    var obj = {_ObjectID: 'WSMAN'};
 | 
				
			||||||
    //obj.onDebugMessage = null;          // Set to a function if you want to get debug messages.
 | 
					    //obj.onDebugMessage = null;          // Set to a function if you want to get debug messages.
 | 
				
			||||||
    obj.NextMessageId = 1;              // Next message number, used to label WSMAN calls.
 | 
					    obj.NextMessageId = 1;              // Next message number, used to label WSMAN calls.
 | 
				
			||||||
    obj.Address = '/wsman';
 | 
					    obj.Address = '/wsman';
 | 
				
			||||||
    obj.xmlParser = require('./amt-xml.js');
 | 
					    obj.xmlParser = require('./amt-xml.js');
 | 
				
			||||||
 | 
					    obj.comm = comm;
 | 
				
			||||||
    if (arguments.length == 1 && typeof (arguments[0] == 'object'))
 | 
					    obj.comm.parent = obj;
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        var CreateWsmanComm = arguments[0].transport;
 | 
					 | 
				
			||||||
        if (CreateWsmanComm) { obj.comm = new CreateWsmanComm(arguments[0]); }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        var CreateWsmanComm = arguments[0];
 | 
					 | 
				
			||||||
        if (CreateWsmanComm) { 
 | 
					 | 
				
			||||||
            obj.comm = new CreateWsmanComm(host, port, user, pass, tls, extra, parent, mode);             
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    obj.PerformAjax = function PerformAjax(postdata, callback, tag, pri, namespaces) {
 | 
					    obj.PerformAjax = function PerformAjax(postdata, callback, tag, pri, namespaces) {
 | 
				
			||||||
        if (namespaces == null) namespaces = '';
 | 
					        if (namespaces == null) namespaces = '';
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										260
									
								
								amtmanager.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										260
									
								
								amtmanager.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,260 @@
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					* @description MeshCentral remote desktop multiplexor
 | 
				
			||||||
 | 
					* @author Ylian Saint-Hilaire
 | 
				
			||||||
 | 
					* @copyright Intel Corporation 2018-2020
 | 
				
			||||||
 | 
					* @license Apache-2.0
 | 
				
			||||||
 | 
					* @version v0.0.1
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*jslint node: true */
 | 
				
			||||||
 | 
					/*jshint node: true */
 | 
				
			||||||
 | 
					/*jshint strict:false */
 | 
				
			||||||
 | 
					/*jshint -W097 */
 | 
				
			||||||
 | 
					/*jshint esversion: 6 */
 | 
				
			||||||
 | 
					"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports.CreateAmtManager = function(parent) {
 | 
				
			||||||
 | 
					    var obj = {};
 | 
				
			||||||
 | 
					    obj.parent = parent;
 | 
				
			||||||
 | 
					    obj.amtDevices = {};             // Nodeid --> dev
 | 
				
			||||||
 | 
					    obj.activeLocalConnections = {}; // Host --> dev
 | 
				
			||||||
 | 
					    obj.amtAdminAccounts = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // WSMAN stack
 | 
				
			||||||
 | 
					    const CreateWsmanComm = require('./amt/amt-wsman-comm');
 | 
				
			||||||
 | 
					    const WsmanStackCreateService = require('./amt/amt-wsman');
 | 
				
			||||||
 | 
					    const AmtStackCreateService = require('./amt/amt');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Load the Intel AMT admin accounts
 | 
				
			||||||
 | 
					    if ((typeof parent.args.amtmanager == 'object') && (Array.isArray(parent.args.amtmanager.amtadminaccount) == true)) {
 | 
				
			||||||
 | 
					        for (var i in parent.args.amtmanager.amtadminaccount) {
 | 
				
			||||||
 | 
					            var c = parent.args.amtmanager.amtadminaccount[i], c2 = { user: "admin" };
 | 
				
			||||||
 | 
					            if (typeof c.user == 'string') { c2.user = c.user; }
 | 
				
			||||||
 | 
					            if (typeof c.pass == 'string') { c2.pass = c.pass; obj.amtAdminAccounts.push(c2); }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Subscribe to server events
 | 
				
			||||||
 | 
					    parent.AddEventDispatch(['*'], obj);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Handle server events
 | 
				
			||||||
 | 
					    obj.HandleEvent = function (source, event, ids, id) {
 | 
				
			||||||
 | 
					        if (event.action != 'nodeconnect') return;
 | 
				
			||||||
 | 
					        if ((event.conn & 14) != 0) { // connectType: Bitmask, 1 = MeshAgent, 2 = Intel AMT CIRA, 4 = Intel AMT local, 8 = Intel AMT Relay, 16 = MQTT
 | 
				
			||||||
 | 
					            // We have an OOB connection to Intel AMT, update our information
 | 
				
			||||||
 | 
					            var dev = obj.amtDevices[event.nodeid];
 | 
				
			||||||
 | 
					            if (dev == null) { obj.amtDevices[event.nodeid] = dev = { conn: event.conn }; fetchIntelAmtInformation(event.nodeid); } else { dev.conn = event.conn; }
 | 
				
			||||||
 | 
					        } else if (((event.conn & 1) != 0) && (parent.webserver != null)) {
 | 
				
			||||||
 | 
					            // We have an agent connection without OOB, check if this agent supports Intel AMT
 | 
				
			||||||
 | 
					            var agent = parent.webserver.wsagents[event.nodeid];
 | 
				
			||||||
 | 
					            if ((agent == null) || (agent.agentInfo == null) || (parent.meshAgentsArchitectureNumbers[agent.agentInfo.agentId].amt == false)) { removeDevice(event.nodeid); return; }
 | 
				
			||||||
 | 
					            var dev = obj.amtDevices[event.nodeid];
 | 
				
			||||||
 | 
					            if (dev == null) { obj.amtDevices[event.nodeid] = dev = { conn: event.conn }; fetchIntelAmtInformation(event.nodeid); } else { dev.conn = event.conn; }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            removeDevice(event.nodeid);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Remove a device
 | 
				
			||||||
 | 
					    function removeDevice(nodeid) {
 | 
				
			||||||
 | 
					        const dev = obj.amtDevices[nodeid];
 | 
				
			||||||
 | 
					        if (dev == null) return;
 | 
				
			||||||
 | 
					        if (dev.amtstack != null) { dev.amtstack.wsman.comm.FailAllError = 999; delete dev.amtstack; } // Disconnect any active connections.
 | 
				
			||||||
 | 
					        delete obj.amtDevices[nodeid];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Update information about a device
 | 
				
			||||||
 | 
					    function fetchIntelAmtInformation(nodeid) {
 | 
				
			||||||
 | 
					        parent.db.Get(nodeid, function (err, nodes) {
 | 
				
			||||||
 | 
					            if ((nodes == null) || (nodes.length != 1)) { removeDevice(nodeid); return; }
 | 
				
			||||||
 | 
					            const node = nodes[0];
 | 
				
			||||||
 | 
					            if ((node.intelamt == null) || (node.meshid == null)) { removeDevice(nodeid); return; }
 | 
				
			||||||
 | 
					            const mesh = parent.webserver.meshes[node.meshid];
 | 
				
			||||||
 | 
					            if (mesh == null) { removeDevice(nodeid); return; }
 | 
				
			||||||
 | 
					            const dev = obj.amtDevices[nodeid];
 | 
				
			||||||
 | 
					            if (dev == null) { return; }
 | 
				
			||||||
 | 
					            dev.name = node.name;
 | 
				
			||||||
 | 
					            dev.nodeid = node._id;
 | 
				
			||||||
 | 
					            if (node.host) { dev.host = node.host.toLowerCase(); }
 | 
				
			||||||
 | 
					            dev.meshid = node.meshid;
 | 
				
			||||||
 | 
					            dev.intelamt = node.intelamt;
 | 
				
			||||||
 | 
					            attemptInitialContact(nodeid, dev);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Attempt to perform initial contact with Intel AMT
 | 
				
			||||||
 | 
					    function attemptInitialContact(nodeid, dev) {
 | 
				
			||||||
 | 
					        if (dev == null) { dev = obj.amtDevices[nodeid]; }
 | 
				
			||||||
 | 
					        if (dev == null) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //if (dev.host != '192.168.2.136') return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ((dev.acctry == null) && ((typeof dev.intelamt.user != 'string') || (typeof dev.intelamt.pass != 'string'))) {
 | 
				
			||||||
 | 
					            if (obj.amtAdminAccounts.length > 0) { dev.acctry = 0; } else { return; }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (((dev.conn & 4) != 0) && (typeof dev.host == 'string')) {
 | 
				
			||||||
 | 
					            // Since we don't allow two or more connections to the same host, check if a pending connection is active.
 | 
				
			||||||
 | 
					            if (obj.activeLocalConnections[dev.host] != null) {
 | 
				
			||||||
 | 
					                // Active connection, hold and try later.
 | 
				
			||||||
 | 
					                setTimeout(function () { attemptInitialContact(nodeid); }, 5000);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                // No active connections, see what user/pass to try.
 | 
				
			||||||
 | 
					                var user = null, pass = null;
 | 
				
			||||||
 | 
					                if (dev.acctry == null) { user = dev.intelamt.user; pass = dev.intelamt.pass; } else { user = obj.amtAdminAccounts[dev.acctry].user; pass = obj.amtAdminAccounts[dev.acctry].pass; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Connect now
 | 
				
			||||||
 | 
					                //console.log('Connect', dev.name, dev.host, user, pass);
 | 
				
			||||||
 | 
					                var comm;
 | 
				
			||||||
 | 
					                if (dev.tlsfail !== true) {
 | 
				
			||||||
 | 
					                    comm = CreateWsmanComm(dev.host, 16993, user, pass, 1); // Always try with TLS first
 | 
				
			||||||
 | 
					                    comm.xtlsFingerprint = 0; // Perform no certificate checking
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    comm = CreateWsmanComm(dev.host, 16992, user, pass, 0); // Try without TLS
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                var wsstack = WsmanStackCreateService(comm);
 | 
				
			||||||
 | 
					                dev.amtstack = AmtStackCreateService(wsstack);
 | 
				
			||||||
 | 
					                dev.amtstack.dev = dev;
 | 
				
			||||||
 | 
					                obj.activeLocalConnections[dev.host] = dev;
 | 
				
			||||||
 | 
					                dev.amtstack.BatchEnum(null, ['*AMT_GeneralSettings', '*IPS_HostBasedSetupService'], attemptLocalConectResponse);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function attemptLocalConectResponse(stack, name, responses, status) {
 | 
				
			||||||
 | 
					        // Release active connection to this host.
 | 
				
			||||||
 | 
					        delete obj.activeLocalConnections[stack.wsman.comm.host];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check if the device still exists
 | 
				
			||||||
 | 
					        const dev = stack.dev;
 | 
				
			||||||
 | 
					        if (obj.amtDevices[dev.nodeid] == null) return; // Device no longer exists, ignore this response.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check the response
 | 
				
			||||||
 | 
					        if ((status == 200) && (responses['AMT_GeneralSettings'] != null) && (responses['IPS_HostBasedSetupService'] != null) && (responses['IPS_HostBasedSetupService'].response != null) && (responses['IPS_HostBasedSetupService'].response != null) && (stack.wsman.comm.digestRealm == responses['AMT_GeneralSettings'].response.DigestRealm)) {
 | 
				
			||||||
 | 
					            // Everything looks good
 | 
				
			||||||
 | 
					            if (dev.aquired == null) { dev.aquired = {}; }
 | 
				
			||||||
 | 
					            dev.aquired.controlMode = responses['IPS_HostBasedSetupService'].response.CurrentControlMode; // 1 = CCM, 2 = ACM
 | 
				
			||||||
 | 
					            var verSplit = stack.wsman.comm.amtVersion.split('.');
 | 
				
			||||||
 | 
					            if (verSplit.length >= 3) { dev.aquired.version = verSplit[0] + '.' + verSplit[1] + '.' + verSplit[2]; }
 | 
				
			||||||
 | 
					            dev.aquired.realm = stack.wsman.comm.digestRealm;
 | 
				
			||||||
 | 
					            dev.aquired.user = stack.wsman.comm.user;
 | 
				
			||||||
 | 
					            dev.aquired.pass = stack.wsman.comm.pass;
 | 
				
			||||||
 | 
					            dev.aquired.lastContact = Date.now();
 | 
				
			||||||
 | 
					            dev.aquired.tls = stack.wsman.comm.xtls;
 | 
				
			||||||
 | 
					            if (stack.wsman.comm.xtls == 1) { dev.aquired.tlshash = stack.wsman.comm.xtlsCertificate.fingerprint.split(':').join('').toLowerCase(); } else { delete dev.aquired.tlshash; }
 | 
				
			||||||
 | 
					            //console.log(dev.nodeid, dev.name, dev.host, dev.aquired);
 | 
				
			||||||
 | 
					            UpdateDevice(dev);
 | 
				
			||||||
 | 
					            //attemptFetchHardwareInventory(dev); // See if we need to get hardware inventory
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            // We got a bad response
 | 
				
			||||||
 | 
					            if ((dev.tlsfail !== true) && (status == 408)) {
 | 
				
			||||||
 | 
					                // TLS error, try again without TLS
 | 
				
			||||||
 | 
					                dev.tlsfail = true; attemptInitialContact(dev.nodeid, dev); return;
 | 
				
			||||||
 | 
					            } else if (status == 401) {
 | 
				
			||||||
 | 
					                // Authentication error, see if we can use alternative credentials
 | 
				
			||||||
 | 
					                if ((dev.acctry == null) && (obj.amtAdminAccounts.length > 0)) { dev.acctry = 0; attemptInitialContact(dev.nodeid, dev); return; }
 | 
				
			||||||
 | 
					                if ((dev.acctry != null) && (obj.amtAdminAccounts.length > (dev.acctry + 1))) { dev.acctry++; attemptInitialContact(dev.nodeid, dev); return; }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            //console.log(dev.nodeid, dev.name, dev.host, status, 'Bad response');
 | 
				
			||||||
 | 
					            removeDevice(dev.nodeid);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Change the current core information string and event it
 | 
				
			||||||
 | 
					    function UpdateDevice(dev) {
 | 
				
			||||||
 | 
					        if (obj.amtDevices[dev.nodeid] == null) return false; // Device no longer exists, ignore this request.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check that the mesh exists
 | 
				
			||||||
 | 
					        const mesh = parent.webserver.meshes[dev.meshid];
 | 
				
			||||||
 | 
					        if (mesh == null) { removeDevice(dev.nodeid); return false; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Get the node and change it if needed
 | 
				
			||||||
 | 
					        parent.db.Get(dev.nodeid, function (err, nodes) {
 | 
				
			||||||
 | 
					            if ((nodes == null) || (nodes.length != 1)) { return false; }
 | 
				
			||||||
 | 
					            const device = nodes[0];
 | 
				
			||||||
 | 
					            var changes = [], change = 0, log = 0;
 | 
				
			||||||
 | 
					            var domain = parent.config.domains[device.domain];
 | 
				
			||||||
 | 
					            if (domain == null) { return false; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Check if anything changes
 | 
				
			||||||
 | 
					            if (device.intelamt == null) { device.intelamt = {}; }
 | 
				
			||||||
 | 
					            if (dev.aquired.version && (typeof dev.aquired.version == 'string') && (dev.aquired.version != device.intelamt.ver)) { change = 1; log = 1; device.intelamt.ver = dev.aquired.version; changes.push('AMT version'); }
 | 
				
			||||||
 | 
					            if (dev.aquired.user && (typeof dev.aquired.user == 'string') && (dev.aquired.user != device.intelamt.user)) { change = 1; log = 1; device.intelamt.user = dev.aquired.user; changes.push('AMT user'); }
 | 
				
			||||||
 | 
					            if (dev.aquired.pass && (typeof dev.aquired.pass == 'string') && (dev.aquired.pass != device.intelamt.pass)) { change = 1; log = 1; device.intelamt.pass = dev.aquired.pass; changes.push('AMT pass'); }
 | 
				
			||||||
 | 
					            if (dev.aquired.realm && (typeof dev.aquired.realm == 'string') && (dev.aquired.realm != device.intelamt.realm)) { change = 1; log = 1; device.intelamt.realm = dev.aquired.realm; changes.push('AMT realm'); }
 | 
				
			||||||
 | 
					            if (device.intelamt.state != 2) { change = 1; log = 1; device.intelamt.state = 2; changes.push('AMT state'); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Update Intel AMT flags if needed
 | 
				
			||||||
 | 
					            // dev.aquired.controlMode // 1 = CCM, 2 = ACM
 | 
				
			||||||
 | 
					            // (node.intelamt.flags & 2) == CCM, (node.intelamt.flags & 4) == ACM
 | 
				
			||||||
 | 
					            var flags = 0;
 | 
				
			||||||
 | 
					            if (typeof device.intelamt.flags == 'number') { flags = device.intelamt.flags; }
 | 
				
			||||||
 | 
					            if (dev.aquired.controlMode == 1) { if ((flags & 4) != 0) { flags -= 4; } if ((flags & 2) == 0) { flags += 2; } } // CCM
 | 
				
			||||||
 | 
					            if (dev.aquired.controlMode == 2) { if ((flags & 4) == 0) { flags += 4; } if ((flags & 2) != 0) { flags -= 2; } } // ACM
 | 
				
			||||||
 | 
					            if (device.intelamt.flags != flags) { change = 1; log = 1; device.intelamt.flags = flags; changes.push('AMT flags'); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // If there are changes, event the new device
 | 
				
			||||||
 | 
					            if (change == 1) {
 | 
				
			||||||
 | 
					                // Save to the database
 | 
				
			||||||
 | 
					                parent.db.Set(device);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Event the node change
 | 
				
			||||||
 | 
					                var event = { etype: 'node', action: 'changenode', nodeid: device._id, domain: domain.id, node: parent.webserver.CloneSafeNode(device) };
 | 
				
			||||||
 | 
					                if (changes.length > 0) { event.msg = 'Changed device ' + device.name + ' from group ' + mesh.name + ': ' + changes.join(', '); }
 | 
				
			||||||
 | 
					                if ((log == 0) || ((obj.agentInfo) && (obj.agentInfo.capabilities) && (obj.agentInfo.capabilities & 0x20)) || (changes.length == 0)) { event.nolog = 1; } // If this is a temporary device, don't log changes
 | 
				
			||||||
 | 
					                if (parent.db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to change the node. Another event will come.
 | 
				
			||||||
 | 
					                parent.DispatchEvent(parent.webserver.CreateMeshDispatchTargets(device.meshid, [device._id]), obj, event);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function attemptFetchHardwareInventory(dev) {
 | 
				
			||||||
 | 
					        if (obj.amtDevices[dev.nodeid] == null) return false; // Device no longer exists, ignore this request.
 | 
				
			||||||
 | 
					        const mesh = parent.webserver.meshes[dev.meshid];
 | 
				
			||||||
 | 
					        if (mesh == null) { removeDevice(dev.nodeid); return false; }
 | 
				
			||||||
 | 
					        if (mesh.mtype == 1) { // If this is a Intel AMT only device group, pull the hardware inventory for this device
 | 
				
			||||||
 | 
					            dev.amtstack.BatchEnum('', ['*CIM_ComputerSystemPackage', 'CIM_SystemPackaging', '*CIM_Chassis', 'CIM_Chip', '*CIM_Card', '*CIM_BIOSElement', 'CIM_Processor', 'CIM_PhysicalMemory', 'CIM_MediaAccessDevice', 'CIM_PhysicalPackage'], attemptFetchHardwareInventoryResponse);
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // http://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.7.1.pdf
 | 
				
			||||||
 | 
					    const DMTFCPUStatus = ["Unknown", "Enabled", "Disabled by User", "Disabled By BIOS (POST Error)", "Idle", "Other"];
 | 
				
			||||||
 | 
					    const DMTFMemType = ["Unknown", "Other", "DRAM", "Synchronous DRAM", "Cache DRAM", "EDO", "EDRAM", "VRAM", "SRAM", "RAM", "ROM", "Flash", "EEPROM", "FEPROM", "EPROM", "CDRAM", "3DRAM", "SDRAM", "SGRAM", "RDRAM", "DDR", "DDR-2", "BRAM", "FB-DIMM", "DDR3", "FBD2", "DDR4", "LPDDR", "LPDDR2", "LPDDR3", "LPDDR4"];
 | 
				
			||||||
 | 
					    const DMTFMemFormFactor = ['', "Other", "Unknown", "SIMM", "SIP", "Chip", "DIP", "ZIP", "Proprietary Card", "DIMM", "TSOP", "Row of chips", "RIMM", "SODIMM", "SRIMM", "FB-DIM"];
 | 
				
			||||||
 | 
					    const DMTFProcFamilly = { // Page 46 of DMTF document
 | 
				
			||||||
 | 
					        191: "Intel® Core™ 2 Duo Processor",
 | 
				
			||||||
 | 
					        192: "Intel® Core™ 2 Solo processor",
 | 
				
			||||||
 | 
					        193: "Intel® Core™ 2 Extreme processor",
 | 
				
			||||||
 | 
					        194: "Intel® Core™ 2 Quad processor",
 | 
				
			||||||
 | 
					        195: "Intel® Core™ 2 Extreme mobile processor",
 | 
				
			||||||
 | 
					        196: "Intel® Core™ 2 Duo mobile processor",
 | 
				
			||||||
 | 
					        197: "Intel® Core™ 2 Solo mobile processor",
 | 
				
			||||||
 | 
					        198: "Intel® Core™ i7 processor",
 | 
				
			||||||
 | 
					        199: "Dual-Core Intel® Celeron® processor"
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function attemptFetchHardwareInventoryResponse(stack, name, responses, status) {
 | 
				
			||||||
 | 
					        const dev = stack.dev;
 | 
				
			||||||
 | 
					        if (obj.amtDevices[dev.nodeid] == null) return; // Device no longer exists, ignore this response.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //console.log(JSON.stringify(responses, null, 2));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var hw = {}
 | 
				
			||||||
 | 
					        hw.PlatformGUID = responses['CIM_ComputerSystemPackage'].response.PlatformGUID;
 | 
				
			||||||
 | 
					        hw.Chassis = responses['CIM_Chassis'].response;
 | 
				
			||||||
 | 
					        hw.Chips = responses['CIM_Chip'].responses;
 | 
				
			||||||
 | 
					        hw.Card = responses['CIM_Card'].response;
 | 
				
			||||||
 | 
					        hw.Bios = responses['CIM_BIOSElement'].response;
 | 
				
			||||||
 | 
					        hw.Processors = responses['CIM_Processor'].responses;
 | 
				
			||||||
 | 
					        hw.PhysicalMemory = responses['CIM_PhysicalMemory'].responses;
 | 
				
			||||||
 | 
					        hw.MediaAccessDevice = responses['CIM_MediaAccessDevice'].responses;
 | 
				
			||||||
 | 
					        hw.PhysicalPackage = responses['CIM_PhysicalPackage'].responses;
 | 
				
			||||||
 | 
					        console.log(JSON.stringify(hw, null, 2));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return obj;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										4
									
								
								db.js
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								db.js
									
										
									
									
									
								
							| 
						 | 
					@ -1156,11 +1156,11 @@ module.exports.CreateDB = function (parent, func) {
 | 
				
			||||||
                if (extrasids == null) {
 | 
					                if (extrasids == null) {
 | 
				
			||||||
                    var x = { type: type, domain: domain, meshid: { $in: meshes } };
 | 
					                    var x = { type: type, domain: domain, meshid: { $in: meshes } };
 | 
				
			||||||
                    if (id) { x._id = id; }
 | 
					                    if (id) { x._id = id; }
 | 
				
			||||||
                    obj.file.find(x, { type: 0 }, function (err, docs) { func(err, performTypedRecordDecrypt(docs)); });
 | 
					                    obj.file.find(x, function (err, docs) { func(err, performTypedRecordDecrypt(docs)); });
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    var x = { type: type, domain: domain, $or: [{ meshid: { $in: meshes } }, { _id: { $in: extrasids } }] };
 | 
					                    var x = { type: type, domain: domain, $or: [{ meshid: { $in: meshes } }, { _id: { $in: extrasids } }] };
 | 
				
			||||||
                    if (id) { x._id = id; }
 | 
					                    if (id) { x._id = id; }
 | 
				
			||||||
                    obj.file.find(x, { type: 0 }, function (err, docs) { func(err, performTypedRecordDecrypt(docs)); });
 | 
					                    obj.file.find(x, function (err, docs) { func(err, performTypedRecordDecrypt(docs)); });
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
            obj.GetAllType = function (type, func) { obj.file.find({ type: type }, function (err, docs) { func(err, performTypedRecordDecrypt(docs)); }); };
 | 
					            obj.GetAllType = function (type, func) { obj.file.find({ type: type }, function (err, docs) { func(err, performTypedRecordDecrypt(docs)); }); };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Ověření e-mailem
 | 
					[[[SERVERNAME]]] - Ověření e-mailem
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					Ahoj [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) provádí ověření e-mailem. Chcete-li proces dokončit, přejděte na následující odkaz:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - E-Mail-Überprüfung
 | 
					[[[SERVERNAME]]] - E-Mail-Überprüfung
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					Hallo [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) führt eine E-Mail-Überprüfung durch. Klicken Sie auf den folgenden Link, um den Vorgang abzuschließen:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Verificación de Correo Electrónico
 | 
					[[[SERVERNAME]]] - Verificación de Correo Electrónico
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					Hola [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) esta realizando una comprobación del correo electrónico. Navegue al siguiente enlace para completar el proceso:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Sähköpostivarmistus
 | 
					[[[SERVERNAME]]] - Sähköpostivarmistus
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					Hei [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) tarkistaa sähköpostiosoitetta. Seuraa linkkiä prosessin loppuun saattamiseksi:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Vérification E-mail
 | 
					[[[SERVERNAME]]] - Vérification E-mail
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					Bonjour [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) effectue une vérification par e-mail. Accédez au lien suivant pour terminer le processus:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - ईमेल सत्यापन
 | 
					[[[SERVERNAME]]] - ईमेल सत्यापन
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					हाय [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) ई-मेल सत्यापन कर रहा है। प्रक्रिया को पूरा करने के लिए निम्नलिखित लिंक को बताएं:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - メールの確認
 | 
					[[[SERVERNAME]]] - メールの確認
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					こんにちは[[[USERNAME]]]、[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) は電子メールの検証を実行しています。プロセスを完了するには、次のリンクに移動します。
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Email 인증
 | 
					[[[SERVERNAME]]] - Email 인증
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					안녕하세요, [[[USERNAME]]]님. [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]])은 이메일 검증을 위해 실행됩니다. 다음 링크로 이동하여 과정을 완료하십시오 :
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Verificação de Email
 | 
					[[[SERVERNAME]]] - Verificação de Email
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					Olá, [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) está realizando uma verificação de e-mail. Acesse o seguinte link para concluir o processo:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - подтверждение по электронной почте
 | 
					[[[SERVERNAME]]] - подтверждение по электронной почте
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					Здравствуйте, [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) выполняет проверку электронной почты. Для завершения процесса перейдите по следующей ссылке:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - E-posta Doğrulaması
 | 
					[[[SERVERNAME]]] - E-posta Doğrulaması
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					Merhaba [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) bir e-posta doğrulaması yapıyor. İşlemi tamamlamak için aşağıdaki bağlantıya gidin:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]]-电邮验证
 | 
					[[[SERVERNAME]]]-电邮验证
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					嗨[[[USERNAME]]],[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) 正在执行电邮验证。导航至以下连结以完成该过程:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]]-電郵驗證
 | 
					[[[SERVERNAME]]]-電郵驗證
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is performing an e-mail verification. Nagivate to the following link to complete the process:
 | 
					嗨[[[USERNAME]]],[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) 正在執行電郵驗證。導航至以下鏈結以完成該過程:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Pozvánka na účet
 | 
					[[[SERVERNAME]]] - Pozvánka na účet
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					Účet pro vás byl vytvořen na serveru [[[SERVERNAME]]] ([[[[SERVERURL]]]/[[[URLARGS1]]]), nyní k němu můžete přistupovat pomocí uživatelského jména „[[[[ACCOUNTNAME]]]“ “a hesla„ [[[HESLO]] ]] ".
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
S pozdravem,
 | 
					S pozdravem,
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Kontoeinladung
 | 
					[[[SERVERNAME]]] - Kontoeinladung
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					Auf dem Server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) wurde ein Konto für Sie erstellt, Sie können ab sofort mit dem Benutzernamen "[[[ACCOUNTNAME]]]" und dem Passwort "[[[PASSWORD]]]" darauf zugreifen.
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Freundliche Grüße,
 | 
					Freundliche Grüße,
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Invitación de Cuenta
 | 
					[[[SERVERNAME]]] - Invitación de Cuenta
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					Una cuenta ha sido creada en su servidor [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), ahora puede acceder con el usuario "[[[ACCOUNTNAME]]]" y la contraseña "[[[PASSWORD]]]".
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Atentamente,
 | 
					Atentamente,
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Tili kutsu
 | 
					[[[SERVERNAME]]] - Tili kutsu
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					Sinulle on luotu tili palvelimelle [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), voit käyttää sitä nyt käyttäjätunnuksella "[[[ACCOUNTNAME]]]" and salasanalla "[[[PASSWORD]]]".
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Ystävällisin terveisin,
 | 
					Ystävällisin terveisin,
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Invitation au compte
 | 
					[[[SERVERNAME]]] - Invitation au compte
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					Un compte a été créé pour vous sur le serveur [[[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), vous pouvez y accéder maintenant avec le nom d'utilisateur "[[[ACCOUNTNAME]]]" et le mot de passe "[[[PASSWORD]]]".
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Meilleures salutations,
 | 
					Meilleures salutations,
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - खाता निमंत्रण
 | 
					[[[SERVERNAME]]] - खाता निमंत्रण
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					सर्वर [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) पर आपके लिए एक खाता बनाया गया था, आप इसे अब उपयोगकर्ता नाम "[[[ACCOUNTNAME]]]]" और पासवर्ड "[[[PASSWORD]]]" के साथ एक्सेस कर सकते हैं।।
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
सादर,
 | 
					सादर,
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - アカウントの招待
 | 
					[[[SERVERNAME]]] - アカウントの招待
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					サーバー[[[SERVERNAME]]]([[[SERVERURL]]]/[[[URLARGS1]]])にアカウントが作成されました。ユーザー名 "[[[ACCOUNTNAME]]]"とパスワード "[[[PASSWORD] ]] "。
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
宜しくお願いします、
 | 
					宜しくお願いします、
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - 계정 초대
 | 
					[[[SERVERNAME]]] - 계정 초대
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					당신을 위해 서버에서 한 계정이 생성되었습니다 : [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), 이제 당신은 다음 이름으로 접근 가능합니다 : "[[[ACCOUNTNAME]]]" 그리고 비밀번호는 다음과 같습니다 : "[[[PASSWORD]]]".
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
최고의 안부를 전합니다,
 | 
					최고의 안부를 전합니다,
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Convite para conta
 | 
					[[[SERVERNAME]]] - Convite para conta
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					Uma conta foi criada para você no servidor [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), você pode acessá-la agora com o nome de usuário "[[[ACCOUNTNAME]]]" e a senha "[[[PASSWORD] ]] ".
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Cumprimentos,
 | 
					Cumprimentos,
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - приглашение в аккаунт
 | 
					[[[SERVERNAME]]] - приглашение в аккаунт
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					Учетная запись была создана для вас на сервере [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), теперь вы можете получить к ней доступ с именем пользователя «[[[ACCOUNTNAME]]]» и паролем «[[[PASSWORD] ]] ".
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
С уважением,
 | 
					С уважением,
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Hesap Davetiyesi
 | 
					[[[SERVERNAME]]] - Hesap Davetiyesi
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					[[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) sunucusunda sizin için bir hesap oluşturuldu, şimdi "[[[ACCOUNTNAME]]]" kullanıcı adı ve "[[[PASSWORD]]]" ile bu hesaba erişebilirsiniz.
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Saygılarımla,
 | 
					Saygılarımla,
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]]-帐户邀请
 | 
					[[[SERVERNAME]]]-帐户邀请
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					已在服务器[[[SERVERNAME]]]([[[SERVERURL]]]/[[[URLARGS1]]])上为您创建了一个帐户,您现在可以使用用户名“ [[[ACCOUNTNAME]]]”和密码“ [[[PASSWORD] ]]”。
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
最好的祝福,
 | 
					最好的祝福,
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]]-帳戶邀請
 | 
					[[[SERVERNAME]]]-帳戶邀請
 | 
				
			||||||
An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username "[[[ACCOUNTNAME]]]" and password "[[[PASSWORD]]]".
 | 
					在伺服器[[[SERVERNAME]]]([[[SERVERURL]]]/[[[URLARGS1]]])上為你創建了一個帳戶,你現在可以使用用戶名“ [[[ACCOUNTNAME]]]”和密碼“ [[[PASSWORD] ]]”。
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
最好的祝福,
 | 
					最好的祝福,
 | 
				
			||||||
~[[[USERNAME]]]
 | 
					~[[[USERNAME]]]
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Reset účtu
 | 
					[[[SERVERNAME]]] - Reset účtu
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					Ahoj [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) požaduje obnovení hesla k účtu. Chcete-li proces dokončit, přejděte na následující odkaz:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Zurücksetzen des Kontos
 | 
					[[[SERVERNAME]]] - Zurücksetzen des Kontos
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					Hallo [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) fordert ein Zurücksetzen des Kontokennworts an. Klicken Sie auf den folgenden Link, um den Vorgang abzuschließen:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Restablecimiento de Cuenta
 | 
					[[[SERVERNAME]]] - Restablecimiento de Cuenta
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					Hola [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) está solicitando un restablecimiento de contraseña de cuenta. Navegue al siguiente enlace para completar el proceso:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Tili nollattu
 | 
					[[[SERVERNAME]]] - Tili nollattu
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					Hei [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) pyytää tilin salasanan palauttamista. Seuraa linkkiä prosessin loppuun saattamiseksi:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Réinitialisation du compte
 | 
					[[[SERVERNAME]]] - Réinitialisation du compte
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					Bonjour [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) demande une réinitialisation du mot de passe du compte. Accédez au lien suivant pour terminer le processus:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - खाता रीसेट
 | 
					[[[SERVERNAME]]] - खाता रीसेट
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					हाय [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) से खाता पासवर्ड रीसेट करने का अनुरोध किया जा रहा है। प्रक्रिया को पूरा करने के लिए निम्नलिखित लिंक को बताएं:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - アカウントのリセット
 | 
					[[[SERVERNAME]]] - アカウントのリセット
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					こんにちは[[[USERNAME]]]、([[[SERVERURL]]][[[URLARGS1]]]) はアカウントパスワードのリセットをリクエストしています。プロセスを完了するには、次のリンクに移動します。
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - 계정 재설정
 | 
					[[[SERVERNAME]]] - 계정 재설정
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					안녕하세요, [[[USERNAME]]]님. [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]])은 계정 비밀번호 초기화를 위해 요구됩니다. 다음 링크로 이동하여 과정을 완료하십시오 :
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Redefinição de conta
 | 
					[[[SERVERNAME]]] - Redefinição de conta
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					Olá, [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) está solicitando uma redefinição de senha de conta. Acesse o seguinte link para concluir o processo:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Сброс учетной записи
 | 
					[[[SERVERNAME]]] - Сброс учетной записи
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					Здравствуйте, [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) запрашивает сброс пароля учетной записи. Для завершения процесса перейдите по следующей ссылке:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]] - Hesabı Sıfırlama
 | 
					[[[SERVERNAME]]] - Hesabı Sıfırlama
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					Merhaba [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) bir hesap şifresi sıfırlama istiyor. İşlemi tamamlamak için aşağıdaki bağlantıya gidin:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]]-帐户重置
 | 
					[[[SERVERNAME]]]-帐户重置
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					[[[USERNAME]],您好:[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) 正在请求重置帐户密码。导航至以下连结以完成该过程:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
[[[SERVERNAME]]]-帳戶重置
 | 
					[[[SERVERNAME]]]-帳戶重置
 | 
				
			||||||
Hi [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) is requesting an account password reset. Nagivate to the following link to complete the process:
 | 
					[[[USERNAME]],你好,[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) 正在請求重設帳戶密碼。導航至以下鏈結以完成該過程:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
					~[[[SERVERURL]]]/checkmail?c=[[[COOKIE]]][[[URLARGS2]]]
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
Dobrý den, [[[NAME]]],
 | 
					Dobrý den, [[[NAME]]],
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					Uživatel [[[USERNAME]]] na serveru [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) požaduje instalaci softwaru k zahájení relace vzdáleného řízení.
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Zpráva: [[[MSG]]]
 | 
					Zpráva: [[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ V případě systému Linux vyjměte a vložte do terminálu a nainstalujte agen
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					Chcete-li nainstalovat software, přejděte na [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] a postupujte podle pokynů.
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
Pokud jste tento požadavek nezačali, ignorujte tento e-mail.
 | 
					Pokud jste tento požadavek nezačali, ignorujte tento e-mail.
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
Hallo [[[NAME]]],
 | 
					Hallo [[[NAME]]],
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					Benutzer [[[USERNAME]]] auf dem Server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) fordert Sie auf, Software zu installieren, um die Fernsteuerungssitzung zu starten.
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Nachricht: [[[MSG]]]
 | 
					Nachricht: [[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ Schneiden Sie unter Linux Folgendes aus und fügen Sie es in ein Terminal ein, u
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					Navigieren Sie zum Installieren der Software zu [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] und befolgen Sie die Anweisungen.
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
Wenn Sie diese Anfrage nicht initiiert haben, ignorieren Sie diese Mail bitte.
 | 
					Wenn Sie diese Anfrage nicht initiiert haben, ignorieren Sie diese Mail bitte.
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
Hola [[[NAME]]],
 | 
					Hola [[[NAME]]],
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					Usuario [[[USERNAME]]] en servitor [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) solicita que instale el software para iniciar la sesión de control remoto.
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Mensaje: [[[MSG]]]
 | 
					Mensaje: [[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ Para Linux, copie y pegue lo siguiente en la terminal para instalar el agente:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					Para instalar el software, navega a [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] y siga las instrucciones.
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
Si Ud. no inicio este requerimiento, por favor ignore este correo.
 | 
					Si Ud. no inicio este requerimiento, por favor ignore este correo.
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
Hei [[[NAME]]],
 | 
					Hei [[[NAME]]],
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					Käyttäjä[[[USERNAME]]] palvelimella [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) pyytää sinua asentamaan ohjelmiston etähallintaistunnon käynnistämiseksi.
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Viesti: [[[MSG]]]
 | 
					Viesti: [[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ Linux: leikkaa ja liitä seuraava päätelaitteeseen agentin asentamiseksi:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					Asenna ohjelmisto siirtymällä kohtaan [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] ja noudattamalla ohjeita.
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
Jos et suorittanut tätä pyyntöä, voit ohitaa tämän sähköpostin.
 | 
					Jos et suorittanut tätä pyyntöä, voit ohitaa tämän sähköpostin.
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
Bonjour [[[NAME]]],
 | 
					Bonjour [[[NAME]]],
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					L'utilisateur [[[USERNAME]]] sur le serveur [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) vous demande d'installer un logiciel pour démarrer la session de contrôle à distance.
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Message: [[[MSG]]]
 | 
					Message: [[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ Pour Linux, copiez et collez les éléments suivants dans un terminal pour insta
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					Pour installer le logiciel, accédez à [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] et suivez les instructions.
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
Si vous n'avez pas initié cette demande, veuillez ignorer ce courrier.
 | 
					Si vous n'avez pas initié cette demande, veuillez ignorer ce courrier.
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
नमस्कार [[[NAME]]],
 | 
					नमस्कार [[[NAME]]],
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					उपयोगकर्ता [[[USERNAME]]] सर्वर पर [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) आपसे रिमोट कंट्रोल सेशन शुरू करने के लिए सॉफ़्टवेयर स्थापित करने का अनुरोध कर रहा है।
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
संदेश: [[[MSG]]]
 | 
					संदेश: [[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ Apple OSX के लिए, इस प्रक्रिया को पूर
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					सॉफ़्टवेयर को स्थापित करने के लिए, [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] पर जाएँ और निर्देशों का पालन करें।
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
यदि आपने यह अनुरोध आरंभ नहीं किया है, तो कृपया इस मेल को अनदेखा करें।
 | 
					यदि आपने यह अनुरोध आरंभ नहीं किया है, तो कृपया इस मेल को अनदेखा करें।
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
[[[NAME]]]様
 | 
					[[[NAME]]]様
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					サーバー[[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) のユーザー[[[USERNAME]]]が、リモートコントロールセッションを開始するためのソフトウェアのインストールを要求しています。
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
メッセージ:[[[MSG]]]
 | 
					メッセージ:[[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ Linuxの場合は、ターミナルで以下をカットアンドペーストし
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					ソフトウェアをインストールするには、[[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]]に移動し、指示に従います。
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
このリクエストを開始していない場合は、このメールを無視してください。
 | 
					このリクエストを開始していない場合は、このメールを無視してください。
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
안녕하세요, [[[NAME]]]님.
 | 
					안녕하세요, [[[NAME]]]님.
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					[[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) 서버의 [[[USERNAME]]] 사용자가 원격 제어 세션을 시작하기 위해서는 소프트웨어 설치가 요구됩니다.
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
메시지: [[[MSG]]]
 | 
					메시지: [[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@ Linux의 경우, 다음을 잘라내어 터미널에 붙여 넣어 에이전트
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					소프트웨어를 설치하려면, 다음에 접속하여 지시에 따르십시오 : [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]]
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
이 요청을 시작하지 않은 경우, 이 메일을 무시하십시오.
 | 
					이 요청을 시작하지 않은 경우, 이 메일을 무시하십시오.
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
Olá [[[NAME]]],
 | 
					Olá [[[NAME]]],
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					O usuário [[[USERNAME]]] no servidor [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) está solicitando a instalação do software para iniciar a sessão de controle remoto.
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Mensagem: [[[MSG]]]
 | 
					Mensagem: [[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ Para Linux, recorte e cole o seguinte em um terminal para instalar o agente:
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					Para instalar o software, navegue até [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] e siga as instruções.
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
Se você não iniciou esta solicitação, ignore este e-mail.
 | 
					Se você não iniciou esta solicitação, ignore este e-mail.
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
Здравствуйте, [[[NAME]]],
 | 
					Здравствуйте, [[[NAME]]],
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					Пользователь [[[USERNAME]]] на сервере [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) запрашивает установку программного обеспечения для запуска сеанса удаленного управления.
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Сообщение: [[[MSG]]]
 | 
					Сообщение: [[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]])
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					Для установки программного обеспечения перейдите к [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] и следуйте инструкциям.
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
Если вы не инициировали этот запрос, игнорируйте это письмо.
 | 
					Если вы не инициировали этот запрос, игнорируйте это письмо.
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
Merhaba [[[NAME]]],
 | 
					Merhaba [[[NAME]]],
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					[[[SERVERNAME]]] [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) sunucusundaki [[[USERNAME]]] uzaktan kontrol oturumunu başlatmak için yazılım yüklemenizi istiyor.
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
Mesaj: [[[MSG]]]
 | 
					Mesaj: [[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ Linux için, aracıyı yüklemek için aşağıdakileri kesip bir terminale yap
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					Yazılımı kurmak için [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] adresine gidin ve talimatları takip edin.
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
Bu isteği siz başlatmadıysanız, lütfen bu postayı dikkate almayın.
 | 
					Bu isteği siz başlatmadıysanız, lütfen bu postayı dikkate almayın.
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
您好[[[NAME]]],
 | 
					您好[[[NAME]]],
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					服务器[[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) 上的用户[[[USERNAME]]]请求您安装软件以启动远程控制。
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
消息:[[[MSG]]]
 | 
					消息:[[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]])
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					要安装软件,请导航至[[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]],然后按照说明进行操作。
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
如果您没有发起此请求,请不理此邮件。
 | 
					如果您没有发起此请求,请不理此邮件。
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
~<area-name>
 | 
					~<area-name>
 | 
				
			||||||
你好[[[NAME]]],
 | 
					你好[[[NAME]]],
 | 
				
			||||||
~</area-name>
 | 
					~</area-name>
 | 
				
			||||||
User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) is requesting you install software to start the remote control session.
 | 
					伺服器[[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) 上的用戶[[[USERNAME]]]請求你安裝軟體以啟動遠程控制。
 | 
				
			||||||
~<area-msg>
 | 
					~<area-msg>
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
訊息:[[[MSG]]]
 | 
					訊息:[[[MSG]]]
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ User [[[USERNAME]]] on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]])
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
~</area-linux>
 | 
					~</area-linux>
 | 
				
			||||||
~<area-link>
 | 
					~<area-link>
 | 
				
			||||||
To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.
 | 
					要安裝軟體,請導航至[[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]],然後按照說明進行操作。
 | 
				
			||||||
~</area-link>
 | 
					~</area-link>
 | 
				
			||||||
如果你沒有發起此請求,請不理此電郵。
 | 
					如果你沒有發起此請求,請不理此電郵。
 | 
				
			||||||
~
 | 
					~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,6 +55,7 @@
 | 
				
			||||||
        "agentsInRam": { "type": "boolean", "default": false, "description": "Loads all agent binaries in RAM for faster agent updates." },
 | 
					        "agentsInRam": { "type": "boolean", "default": false, "description": "Loads all agent binaries in RAM for faster agent updates." },
 | 
				
			||||||
        "agentPing": { "type": "integer", "minimum": 1, "description": "When specified, sends data to the agent at x seconds interval and expects a response from the agent." },
 | 
					        "agentPing": { "type": "integer", "minimum": 1, "description": "When specified, sends data to the agent at x seconds interval and expects a response from the agent." },
 | 
				
			||||||
        "agentPong": { "type": "integer", "minimum": 1, "description": "When specified, sends data to the agent at x seconds interval." },
 | 
					        "agentPong": { "type": "integer", "minimum": 1, "description": "When specified, sends data to the agent at x seconds interval." },
 | 
				
			||||||
 | 
					        "amtmanager": { "type": "boolean", "default": false, "description": "When enabled, MeshCentral will automatically monitor and manage Intel AMT devices." },
 | 
				
			||||||
        "orphanAgentUser": { "type": "string", "default": null, "description": "If an agent attempts to connect to a unknown device group, automatically create a new device group and grant access to the specified user. Example: admin" },
 | 
					        "orphanAgentUser": { "type": "string", "default": null, "description": "If an agent attempts to connect to a unknown device group, automatically create a new device group and grant access to the specified user. Example: admin" },
 | 
				
			||||||
        "agentIdleTimeout": { "type": "integer", "minimum": 1 },
 | 
					        "agentIdleTimeout": { "type": "integer", "minimum": 1 },
 | 
				
			||||||
        "compression": { "type": "boolean", "default": true, "description": "Enables GZIP compression for web requests." },
 | 
					        "compression": { "type": "boolean", "default": true, "description": "Enables GZIP compression for web requests." },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,6 +34,7 @@ function CreateMeshCentralServer(config, args) {
 | 
				
			||||||
    obj.amtEventHandler = null;
 | 
					    obj.amtEventHandler = null;
 | 
				
			||||||
    obj.pluginHandler = null;
 | 
					    obj.pluginHandler = null;
 | 
				
			||||||
    obj.amtScanner = null;
 | 
					    obj.amtScanner = null;
 | 
				
			||||||
 | 
					    obj.amtManager = null;
 | 
				
			||||||
    obj.meshScanner = null;
 | 
					    obj.meshScanner = null;
 | 
				
			||||||
    obj.letsencrypt = null;
 | 
					    obj.letsencrypt = null;
 | 
				
			||||||
    obj.eventsDispatch = {};
 | 
					    obj.eventsDispatch = {};
 | 
				
			||||||
| 
						 | 
					@ -1336,6 +1337,11 @@ function CreateMeshCentralServer(config, args) {
 | 
				
			||||||
                    obj.meshScanner = require('./meshscanner.js').CreateMeshScanner(obj).start();
 | 
					                    obj.meshScanner = require('./meshscanner.js').CreateMeshScanner(obj).start();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Setup the Intel AMT manager
 | 
				
			||||||
 | 
					                if ((obj.args.amtmanager == true) || (typeof obj.args.amtmanager == 'object')) {
 | 
				
			||||||
 | 
					                    obj.amtManager = require('./amtmanager.js').CreateAmtManager(obj);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Setup and start the MPS server
 | 
					                // Setup and start the MPS server
 | 
				
			||||||
                if ((obj.args.lanonly != true) && (obj.args.mpsport !== 0)) {
 | 
					                if ((obj.args.lanonly != true) && (obj.args.mpsport !== 0)) {
 | 
				
			||||||
                    obj.mpsserver = require('./mpsserver.js').CreateMpsServer(obj, obj.db, obj.args, obj.certificates);
 | 
					                    obj.mpsserver = require('./mpsserver.js').CreateMpsServer(obj, obj.db, obj.args, obj.certificates);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										11
									
								
								meshuser.js
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								meshuser.js
									
										
									
									
									
								
							| 
						 | 
					@ -856,7 +856,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    switch (cmd) {
 | 
					                    switch (cmd) {
 | 
				
			||||||
                        case 'help': {
 | 
					                        case 'help': {
 | 
				
			||||||
                            var fin = '', f = '', availcommands = 'help,info,versions,resetserver,usersessions,closeusersessions,tasklimiter,setmaxtasks,cores,migrationagents,agentstats,webstats,mpsstats,swarmstats,acceleratorsstats,updatecheck,serverupdate,nodeconfig,heapdump,relays,autobackup,backupconfig,dupagents,dispatchtable,badlogins,showpaths,le,lecheck,leevents,dbstats,sms,amtacm,certhashes,watchdog';
 | 
					                            var fin = '', f = '', availcommands = 'help,info,versions,resetserver,usersessions,closeusersessions,tasklimiter,setmaxtasks,cores,migrationagents,agentstats,webstats,mpsstats,swarmstats,acceleratorsstats,updatecheck,serverupdate,nodeconfig,heapdump,relays,autobackup,backupconfig,dupagents,dispatchtable,badlogins,showpaths,le,lecheck,leevents,dbstats,sms,amtacm,certhashes,watchdog,amtmanager';
 | 
				
			||||||
                            if (parent.parent.config.settings.heapdump === true) { availcommands += ',heapdump'; }
 | 
					                            if (parent.parent.config.settings.heapdump === true) { availcommands += ',heapdump'; }
 | 
				
			||||||
                            availcommands = availcommands.split(',').sort();
 | 
					                            availcommands = availcommands.split(',').sort();
 | 
				
			||||||
                            while (availcommands.length > 0) { if (f.length > 80) { fin += (f + ',\r\n'); f = ''; } f += (((f != '') ? ', ' : ' ') + availcommands.shift()); }
 | 
					                            while (availcommands.length > 0) { if (f.length > 80) { fin += (f + ',\r\n'); f = ''; } f += (((f != '') ? ', ' : ' ') + availcommands.shift()); }
 | 
				
			||||||
| 
						 | 
					@ -877,6 +877,15 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                        case 'amtmanager': {
 | 
				
			||||||
 | 
					                            if (parent.parent.amtManager == null) { r = 'Intel AMT Manager not active.'; break; }
 | 
				
			||||||
 | 
					                            for (var nodeid in parent.parent.amtManager.amtDevices) {
 | 
				
			||||||
 | 
					                                var dev = parent.parent.amtManager.amtDevices[nodeid];
 | 
				
			||||||
 | 
					                                r += (dev.conn + ', \"' + dev.name + '\"\r\n');
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            if (r == '') { r = 'Not current managing any devices.'; }
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                        case 'certhashes': {
 | 
					                        case 'certhashes': {
 | 
				
			||||||
                            r += 'AgentCertHash: ' + parent.agentCertificateHashHex;
 | 
					                            r += 'AgentCertHash: ' + parent.agentCertificateHashHex;
 | 
				
			||||||
                            for (var i in parent.webCertificateHashs) { r += '\r\nwebCertificateHash (' + i + '): ' + common.rstr2hex(parent.webCertificateHashs[i]); }
 | 
					                            for (var i in parent.webCertificateHashs) { r += '\r\nwebCertificateHash (' + i + '): ' + common.rstr2hex(parent.webCertificateHashs[i]); }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4676,36 +4676,19 @@
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      "cs": "Účet pro vás byl vytvořen na serveru [[[SERVERNAME]]] ([[[[SERVERURL]]] /), nyní k němu můžete přistupovat pomocí uživatelského jména „[[[[ACCOUNTNAME]]]“ “a hesla„ [[[HESLO]] ]] \".",
 | 
					      "cs": "Účet pro vás byl vytvořen na serveru [[[SERVERNAME]]] ([[[[SERVERURL]]]/[[[URLARGS1]]]), nyní k němu můžete přistupovat pomocí uživatelského jména „[[[[ACCOUNTNAME]]]“ “a hesla„ [[[HESLO]] ]] \".",
 | 
				
			||||||
      "de": "Auf dem Server [[[SERVERNAME]]] ([[[SERVERURL]]]/) wurde ein Konto für Sie erstellt, Sie können ab sofort mit dem Benutzernamen \"[[[ACCOUNTNAME]]]\" und dem Passwort \"[[[PASSWORD]]]\" darauf zugreifen.",
 | 
					      "de": "Auf dem Server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) wurde ein Konto für Sie erstellt, Sie können ab sofort mit dem Benutzernamen \"[[[ACCOUNTNAME]]]\" und dem Passwort \"[[[PASSWORD]]]\" darauf zugreifen.",
 | 
				
			||||||
      "es": "Una cuenta ha sido creada en su servidor [[[SERVERNAME]]] ([[[SERVERURL]]]/), ahora puede acceder con el usuario \"[[[ACCOUNTNAME]]]\" y la contraseña \"[[[PASSWORD]]]\".",
 | 
					      "es": "Una cuenta ha sido creada en su servidor [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), ahora puede acceder con el usuario \"[[[ACCOUNTNAME]]]\" y la contraseña \"[[[PASSWORD]]]\".",
 | 
				
			||||||
      "fi": "Sinulle on luotu tili palvelimelle [[[SERVERNAME]]] ([[[SERVERURL]]]/), voit käyttää sitä nyt käyttäjätunnuksella \"[[[ACCOUNTNAME]]]\" and salasanalla \"[[[PASSWORD]]]\".",
 | 
					      "fi": "Sinulle on luotu tili palvelimelle [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), voit käyttää sitä nyt käyttäjätunnuksella \"[[[ACCOUNTNAME]]]\" and salasanalla \"[[[PASSWORD]]]\".",
 | 
				
			||||||
      "fr": "Un compte a été créé pour vous sur le serveur [[[[SERVERNAME]]] ([[[SERVERURL]]] /), vous pouvez y accéder maintenant avec le nom d'utilisateur \"[[[ACCOUNTNAME]]]\" et le mot de passe \"[[[PASSWORD]]]\".",
 | 
					      "fr": "Un compte a été créé pour vous sur le serveur [[[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), vous pouvez y accéder maintenant avec le nom d'utilisateur \"[[[ACCOUNTNAME]]]\" et le mot de passe \"[[[PASSWORD]]]\".",
 | 
				
			||||||
      "hi": "सर्वर [[[SERVERNAME]]] ([[[SERVERURL]]] /) पर आपके लिए एक खाता बनाया गया था, आप इसे अब उपयोगकर्ता नाम \"[[[ACCOUNTNAME]]]]\" और पासवर्ड \"[[[PASSWORD]]]\" के साथ एक्सेस कर सकते हैं।।",
 | 
					      "hi": "सर्वर [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) पर आपके लिए एक खाता बनाया गया था, आप इसे अब उपयोगकर्ता नाम \"[[[ACCOUNTNAME]]]]\" और पासवर्ड \"[[[PASSWORD]]]\" के साथ एक्सेस कर सकते हैं।।",
 | 
				
			||||||
      "ja": "サーバー[[[SERVERNAME]]]([[[SERVERURL]]] /)にアカウントが作成されました。ユーザー名 \"[[[ACCOUNTNAME]]]\"とパスワード \"[[[PASSWORD] ]] \"。",
 | 
					      "ja": "サーバー[[[SERVERNAME]]]([[[SERVERURL]]]/[[[URLARGS1]]])にアカウントが作成されました。ユーザー名 \"[[[ACCOUNTNAME]]]\"とパスワード \"[[[PASSWORD] ]] \"。",
 | 
				
			||||||
      "ko": "당신을 위해 서버에서 한 계정이 생성되었습니다 : [[[SERVERNAME]]] ([[[SERVERURL]]]/), 이제 당신은 다음 이름으로 접근 가능합니다 : \"[[[ACCOUNTNAME]]]\" 그리고 비밀번호는 다음과 같습니다 : \"[[[PASSWORD]]]\".",
 | 
					      "ko": "당신을 위해 서버에서 한 계정이 생성되었습니다 : [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), 이제 당신은 다음 이름으로 접근 가능합니다 : \"[[[ACCOUNTNAME]]]\" 그리고 비밀번호는 다음과 같습니다 : \"[[[PASSWORD]]]\".",
 | 
				
			||||||
      "pt": "Uma conta foi criada para você no servidor [[[SERVERNAME]]] ([[[SERVERURL]]] /), você pode acessá-la agora com o nome de usuário \"[[[ACCOUNTNAME]]]\" e a senha \"[[[PASSWORD] ]] \".",
 | 
					      "pt": "Uma conta foi criada para você no servidor [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), você pode acessá-la agora com o nome de usuário \"[[[ACCOUNTNAME]]]\" e a senha \"[[[PASSWORD] ]] \".",
 | 
				
			||||||
      "ru": "Учетная запись была создана для вас на сервере [[[SERVERNAME]]] ([[[SERVERURL]]] /), теперь вы можете получить к ней доступ с именем пользователя «[[[ACCOUNTNAME]]]» и паролем «[[[PASSWORD] ]] \".",
 | 
					      "ru": "Учетная запись была создана для вас на сервере [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), теперь вы можете получить к ней доступ с именем пользователя «[[[ACCOUNTNAME]]]» и паролем «[[[PASSWORD] ]] \".",
 | 
				
			||||||
      "tr": "[[[SERVERNAME]]] ([[[SERVERURL]]] /) sunucusunda sizin için bir hesap oluşturuldu, şimdi \"[[[ACCOUNTNAME]]]\" kullanıcı adı ve \"[[[PASSWORD]]]\" ile bu hesaba erişebilirsiniz.",
 | 
					      "tr": "[[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) sunucusunda sizin için bir hesap oluşturuldu, şimdi \"[[[ACCOUNTNAME]]]\" kullanıcı adı ve \"[[[PASSWORD]]]\" ile bu hesaba erişebilirsiniz.",
 | 
				
			||||||
      "zh-chs": "已在服务器[[[SERVERNAME]]]([[[SERVERURL]]] /)上为您创建了一个帐户,您现在可以使用用户名“ [[[ACCOUNTNAME]]]”和密码“ [[[PASSWORD] ]]”。",
 | 
					      "zh-chs": "已在服务器[[[SERVERNAME]]]([[[SERVERURL]]]/[[[URLARGS1]]])上为您创建了一个帐户,您现在可以使用用户名“ [[[ACCOUNTNAME]]]”和密码“ [[[PASSWORD] ]]”。",
 | 
				
			||||||
      "zh-cht": "在伺服器[[[SERVERNAME]]]([[[SERVERURL]]] /)上為你創建了一個帳戶,你現在可以使用用戶名“ [[[ACCOUNTNAME]]]”和密碼“ [[[PASSWORD] ]]”。"
 | 
					      "zh-cht": "在伺服器[[[SERVERNAME]]]([[[SERVERURL]]]/[[[URLARGS1]]])上為你創建了一個帳戶,你現在可以使用用戶名“ [[[ACCOUNTNAME]]]”和密碼“ [[[PASSWORD] ]]”。",
 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "cs": "Účet byl pro vás vytvořen na serveru [[[SERVERNAME]]] ([[[SERVERURL]]]/), nyní k němu máte přístup pomocí uživatelského jména \\\"[[[ACCOUNTNAME]]]\\\" a hesla \\\"[[[PASSWORD]]]\\\".",
 | 
					 | 
				
			||||||
      "de": "Auf dem Server [[[SERVERNAME]]] ([[[SERVERURL]]]/) wurde ein Konto für Sie erstellt. Sie können jetzt mit dem Benutzernamen \\\"[[[ACCOUNTNAME]]]\\\" und dem Passwort \\\"[[[PASSWORD]]]\\\".",
 | 
					 | 
				
			||||||
      "es": "Una cuenta ha sido creada en su servidor [[[SERVERNAME]]] ([[[SERVERURL]]]/), ahora puede acceder con el usuario \\\"[[[ACCOUNTNAME]]]\\\" y la consigna \\\"[[[PASSWORD]]]\\\".",
 | 
					 | 
				
			||||||
      "fi": "Sinulle on luotu tili palvelimelle [[[SERVERNAME]]] ([[[SERVERURL]]]/), voit käyttää sitä nyt käyttäjätunnuksella \\\"[[[ACCOUNTNAME]]]\\\" and salasanalla \\\"[[[PASSWORD]]]\\\".",
 | 
					 | 
				
			||||||
      "fr": "Un compte a été créé pour vous sur le serveur [[[SERVERNAME]]] ([[[SERVERURL]]]/), vous pouvez y accéder maintenant avec le nom d'utilisateur \\\"[[[ACCOUNTNAME]]]\\\" et le mot de passe \\\"[[[PASSWORD]]]\\\".",
 | 
					 | 
				
			||||||
      "hi": "सर्वर [[[SERVERNAME]]] ([[[SERVERURL]]]/) पर आपके लिए एक खाता बनाया गया था, अब आप इसे उपयोगकर्ता नाम \\\"[[ACCOUNTNAME]]] \\\" en wachchwoord \\\"[[PASSWORD]]]\\\"।",
 | 
					 | 
				
			||||||
      "ja": "サーバー[[[SERVERNAME]]]([[[SERVERURL]]]/)にアカウントが作成されました。ユーザー名 \\\"[[[ACCOUNTNAME]]]\\\" とパスワード \\\"[[[PASSWORD]]]\\\"。",
 | 
					 | 
				
			||||||
      "ko": "당신을 위해 서버에서 한 계정이 생성되었습니다 : [[[SERVERNAME]]] ([[[SERVERURL]]]/), 이제 당신은 다음 이름으로 접근이 가능합니다 : \\\"[[[ACCOUNTNAME]]]\\\" 그리고 비밀번호는 다음과 같습니다 : \\\"[[[PASSWORD]]]\\\".",
 | 
					 | 
				
			||||||
      "pt": "Uma conta foi criada para você no servidor [[[SERVERNAME]]] ([[[SERVERURL]]] /), você pode acessá-la agora com o nome de usuário \\\"[[[ACCOUNTNAME]]] \\\" en wachtwoord \\\"[[ [SENHA]]]\\\".",
 | 
					 | 
				
			||||||
      "ru": "Для вас была создана учетная запись на сервере [[[SERVERNAME]]] ([[[SERVERURL]]]/), теперь вы можете получить к ней доступ с помощью имени пользователя \\\"[[[ACCOUNTNAME]]]\\\" и пароля \\\"[[[PASSWORD]]]\\\".",
 | 
					 | 
				
			||||||
      "tr": "[[[SERVERNAME]] ([[[SERVERURL]]]/) sunucusunda sizin için bir hesap oluşturuldu, şimdi \\\"[[[ACCOUNTNAME]]]\\\" en wachtwoord \\\"[[[PASSWORD]]]\\\".",
 | 
					 | 
				
			||||||
      "zh-chs": "已在服务器[[[SERVERNAME]]]([[[SERVERURL]]]/ 上为您创建了一个帐户,您现在可以使用用户名“ [[[ACCOUNTNAME]]] 和密码 “[[[PASSWORD]]]”。",
 | 
					 | 
				
			||||||
      "zh-cht": "在伺服器[[[SERVERNAME]]]([[[SERVERURL]]] /上為你創建了一個帳戶,你現在可以使用用戶名“ [[[ACCOUNTNAME]]] ” en wachtwoord “[[[PASSWORD]]]”。"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "en": "An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username \"[[[ACCOUNTNAME]]]\" and password \"[[[PASSWORD]]]\".",
 | 
					      "en": "An account was created for you on server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), you can access it now with username \"[[[ACCOUNTNAME]]]\" and password \"[[[PASSWORD]]]\".",
 | 
				
			||||||
      "nl": "Er is een account jouw aangemaakt op de server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), Je kan inloggen met de gebruikersnaam \"[[[ACCOUNTNAME]]]\" en wachtwoord \"[[[PASSWORD]]]\".",
 | 
					      "nl": "Er is een account jouw aangemaakt op de server [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]), Je kan inloggen met de gebruikersnaam \"[[[ACCOUNTNAME]]]\" en wachtwoord \"[[[PASSWORD]]]\".",
 | 
				
			||||||
      "xloc": [
 | 
					      "xloc": [
 | 
				
			||||||
| 
						 | 
					@ -17010,7 +16993,7 @@
 | 
				
			||||||
      "ru": "Здравствуйте, [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) выполняет проверку электронной почты. Для завершения процесса перейдите по следующей ссылке:",
 | 
					      "ru": "Здравствуйте, [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) выполняет проверку электронной почты. Для завершения процесса перейдите по следующей ссылке:",
 | 
				
			||||||
      "tr": "Merhaba [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) bir e-posta doğrulaması yapıyor. İşlemi tamamlamak için aşağıdaki bağlantıya gidin:",
 | 
					      "tr": "Merhaba [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) bir e-posta doğrulaması yapıyor. İşlemi tamamlamak için aşağıdaki bağlantıya gidin:",
 | 
				
			||||||
      "zh-chs": "嗨[[[USERNAME]]],[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) 正在执行电邮验证。导航至以下连结以完成该过程:",
 | 
					      "zh-chs": "嗨[[[USERNAME]]],[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) 正在执行电邮验证。导航至以下连结以完成该过程:",
 | 
				
			||||||
      "zh-cht": "嗨[[[USERNAME]]],[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) 正在執行電郵驗證。導航至以下鏈結以完成該過程:"
 | 
					      "zh-cht": "嗨[[[USERNAME]]],[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) 正在執行電郵驗證。導航至以下鏈結以完成該過程:",
 | 
				
			||||||
      "xloc": [
 | 
					      "xloc": [
 | 
				
			||||||
        "account-check.txt"
 | 
					        "account-check.txt"
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
| 
						 | 
					@ -17030,7 +17013,7 @@
 | 
				
			||||||
      "ru": "Здравствуйте, [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) запрашивает сброс пароля учетной записи. Для завершения процесса перейдите по следующей ссылке:",
 | 
					      "ru": "Здравствуйте, [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) запрашивает сброс пароля учетной записи. Для завершения процесса перейдите по следующей ссылке:",
 | 
				
			||||||
      "tr": "Merhaba [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) bir hesap şifresi sıfırlama istiyor. İşlemi tamamlamak için aşağıdaki bağlantıya gidin:",
 | 
					      "tr": "Merhaba [[[USERNAME]]], [[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) bir hesap şifresi sıfırlama istiyor. İşlemi tamamlamak için aşağıdaki bağlantıya gidin:",
 | 
				
			||||||
      "zh-chs": "[[[USERNAME]],您好:[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) 正在请求重置帐户密码。导航至以下连结以完成该过程:",
 | 
					      "zh-chs": "[[[USERNAME]],您好:[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) 正在请求重置帐户密码。导航至以下连结以完成该过程:",
 | 
				
			||||||
      "zh-cht": "[[[USERNAME]],你好,[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) 正在請求重設帳戶密碼。導航至以下鏈結以完成該過程:"
 | 
					      "zh-cht": "[[[USERNAME]],你好,[[[SERVERNAME]]] ([[[SERVERURL]]][[[URLARGS1]]]) 正在請求重設帳戶密碼。導航至以下鏈結以完成該過程:",
 | 
				
			||||||
      "xloc": [
 | 
					      "xloc": [
 | 
				
			||||||
        "account-reset.txt"
 | 
					        "account-reset.txt"
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
| 
						 | 
					@ -35968,8 +35951,6 @@
 | 
				
			||||||
        "mesh-invite.html->2->15->1"
 | 
					        "mesh-invite.html->2->15->1"
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      "en": "To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.",
 | 
					      "en": "To install the software, navigate to [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] and follow the instructions.",
 | 
				
			||||||
      "nl": "Om de software te installeren, navigeert u naar [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] en volgt u de instructies.",
 | 
					      "nl": "Om de software te installeren, navigeert u naar [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] en volgt u de instructies.",
 | 
				
			||||||
| 
						 | 
					@ -35985,7 +35966,7 @@
 | 
				
			||||||
      "ru": "Для установки программного обеспечения перейдите к [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] и следуйте инструкциям.",
 | 
					      "ru": "Для установки программного обеспечения перейдите к [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] и следуйте инструкциям.",
 | 
				
			||||||
      "tr": "Yazılımı kurmak için [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] adresine gidin ve talimatları takip edin.",
 | 
					      "tr": "Yazılımı kurmak için [[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]] adresine gidin ve talimatları takip edin.",
 | 
				
			||||||
      "zh-chs": "要安装软件,请导航至[[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]],然后按照说明进行操作。",
 | 
					      "zh-chs": "要安装软件,请导航至[[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]],然后按照说明进行操作。",
 | 
				
			||||||
      "zh-cht": "要安裝軟體,請導航至[[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]],然後按照說明進行操作。"
 | 
					      "zh-cht": "要安裝軟體,請導航至[[[SERVERURL]]][[[LINKURL]]][[[URLARGS2]]],然後按照說明進行操作。",
 | 
				
			||||||
      "xloc": [
 | 
					      "xloc": [
 | 
				
			||||||
        "mesh-invite.txt"
 | 
					        "mesh-invite.txt"
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
| 
						 | 
					@ -38058,7 +38039,7 @@
 | 
				
			||||||
      "ru": "Пользователь [[[USERNAME]]] на сервере [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) запрашивает установку программного обеспечения для запуска сеанса удаленного управления.",
 | 
					      "ru": "Пользователь [[[USERNAME]]] на сервере [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) запрашивает установку программного обеспечения для запуска сеанса удаленного управления.",
 | 
				
			||||||
      "tr": "[[[SERVERNAME]]] [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) sunucusundaki [[[USERNAME]]] uzaktan kontrol oturumunu başlatmak için yazılım yüklemenizi istiyor.",
 | 
					      "tr": "[[[SERVERNAME]]] [[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) sunucusundaki [[[USERNAME]]] uzaktan kontrol oturumunu başlatmak için yazılım yüklemenizi istiyor.",
 | 
				
			||||||
      "zh-chs": "服务器[[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) 上的用户[[[USERNAME]]]请求您安装软件以启动远程控制。",
 | 
					      "zh-chs": "服务器[[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) 上的用户[[[USERNAME]]]请求您安装软件以启动远程控制。",
 | 
				
			||||||
      "zh-cht": "伺服器[[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) 上的用戶[[[USERNAME]]]請求你安裝軟體以啟動遠程控制。"
 | 
					      "zh-cht": "伺服器[[[SERVERNAME]]] ([[[SERVERURL]]]/[[[URLARGS1]]]) 上的用戶[[[USERNAME]]]請求你安裝軟體以啟動遠程控制。",
 | 
				
			||||||
      "xloc": [
 | 
					      "xloc": [
 | 
				
			||||||
        "mesh-invite.txt"
 | 
					        "mesh-invite.txt"
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1381,6 +1381,7 @@
 | 
				
			||||||
                                    if (message.event.node.intelamt.tag != null) { node.intelamt.tag = message.event.node.intelamt.tag; }
 | 
					                                    if (message.event.node.intelamt.tag != null) { node.intelamt.tag = message.event.node.intelamt.tag; }
 | 
				
			||||||
                                    if (message.event.node.intelamt.uuid != null) { node.intelamt.uuid = message.event.node.intelamt.uuid; }
 | 
					                                    if (message.event.node.intelamt.uuid != null) { node.intelamt.uuid = message.event.node.intelamt.uuid; }
 | 
				
			||||||
                                    if (message.event.node.intelamt.realm != null) { node.intelamt.realm = message.event.node.intelamt.realm; }
 | 
					                                    if (message.event.node.intelamt.realm != null) { node.intelamt.realm = message.event.node.intelamt.realm; }
 | 
				
			||||||
 | 
					                                    if (message.event.node.intelamt.flags != null) { node.intelamt.flags = message.event.node.intelamt.flags; }
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                                node.namel = node.name.toLowerCase();
 | 
					                                node.namel = node.name.toLowerCase();
 | 
				
			||||||
                                if (node.rname) { node.rnamel = node.rname.toLowerCase(); } else { node.rnamel = node.namel; }
 | 
					                                if (node.rname) { node.rnamel = node.rname.toLowerCase(); } else { node.rnamel = node.namel; }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2783,6 +2783,7 @@
 | 
				
			||||||
                                    if (message.event.node.intelamt.tag != null) { node.intelamt.tag = message.event.node.intelamt.tag; }
 | 
					                                    if (message.event.node.intelamt.tag != null) { node.intelamt.tag = message.event.node.intelamt.tag; }
 | 
				
			||||||
                                    if (message.event.node.intelamt.uuid != null) { node.intelamt.uuid = message.event.node.intelamt.uuid; }
 | 
					                                    if (message.event.node.intelamt.uuid != null) { node.intelamt.uuid = message.event.node.intelamt.uuid; }
 | 
				
			||||||
                                    if (message.event.node.intelamt.realm != null) { node.intelamt.realm = message.event.node.intelamt.realm; }
 | 
					                                    if (message.event.node.intelamt.realm != null) { node.intelamt.realm = message.event.node.intelamt.realm; }
 | 
				
			||||||
 | 
					                                    if (message.event.node.intelamt.flags != null) { node.intelamt.flags = message.event.node.intelamt.flags; }
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                                if (message.event.node.av != null) { node.av = message.event.node.av; }
 | 
					                                if (message.event.node.av != null) { node.av = message.event.node.av; }
 | 
				
			||||||
                                node.namel = node.name.toLowerCase();
 | 
					                                node.namel = node.name.toLowerCase();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue