Bug fixes, added AmtWake to MeshCMD.

Ylian Saint-Hilaire committed May 13, 2020 at 00:27 UTC 04dfeebe1e39559863aa9ed282bd92385d8f396a
10 files changed +584 -358
agents/MeshCmd-signed.exe
Binary files a/agents/MeshCmd-signed.exe and b/agents/MeshCmd-signed.exe differ
agents/MeshCmd64-signed.exe
Binary files a/agents/MeshCmd64-signed.exe and b/agents/MeshCmd64-signed.exe differ
agents/meshcmd.js
+147 -15
@@ -114,7 +114,7 @@ function run(argv) {
114 //console.log('addedModules = ' + JSON.stringify(addedModules));
115 var actionpath = 'meshaction.txt';
116 if (args.actionfile != null) { actionpath = args.actionfile; }
117 - var actions = ['HELP', 'ROUTE', 'MICROLMS', 'AMTSCAN', 'AMTPOWER', 'AMTFEATURES', 'AMTNETWORK', 'AMTLOADWEBAPP', 'AMTLOADSMALLWEBAPP', 'AMTLOADLARGEWEBAPP', 'AMTCLEARWEBAPP', 'AMTSTORAGESTATE', 'AMTINFO', 'AMTINFODEBUG', 'AMTVERSIONS', 'AMTHASHES', 'AMTSAVESTATE', 'AMTSCRIPT', 'AMTUUID', 'AMTCCM', 'AMTACM', 'AMTDEACTIVATE', 'AMTACMDEACTIVATE', 'SMBIOS', 'RAWSMBIOS', 'MESHCOMMANDER', 'AMTAUDITLOG', 'AMTEVENTLOG', 'AMTPRESENCE', 'AMTWIFI'];
117 + var actions = ['HELP', 'ROUTE', 'MICROLMS', 'AMTSCAN', 'AMTPOWER', 'AMTFEATURES', 'AMTNETWORK', 'AMTLOADWEBAPP', 'AMTLOADSMALLWEBAPP', 'AMTLOADLARGEWEBAPP', 'AMTCLEARWEBAPP', 'AMTSTORAGESTATE', 'AMTINFO', 'AMTINFODEBUG', 'AMTVERSIONS', 'AMTHASHES', 'AMTSAVESTATE', 'AMTSCRIPT', 'AMTUUID', 'AMTCCM', 'AMTACM', 'AMTDEACTIVATE', 'AMTACMDEACTIVATE', 'SMBIOS', 'RAWSMBIOS', 'MESHCOMMANDER', 'AMTAUDITLOG', 'AMTEVENTLOG', 'AMTPRESENCE', 'AMTWIFI', 'AMTWAKE'];
118
119 // Load the action file
120 var actionfile = null;
@@ -201,6 +201,7 @@ function run(argv) {
201 console.log(' AmtNetwork - Intel AMT network interface settings.');
202 console.log(' AmtScan - Search local network for Intel AMT devices.');
203 console.log(' AmtWifi - Intel AMT Wifi interface settings.');
204 + console.log(' AmtWake - Intel AMT Wake Alarms.');
205 console.log('\r\nHelp on a specific action using:\r\n');
206 console.log(' meshcmd help [action]');
207 exit(1); return;
@@ -395,7 +396,7 @@ function run(argv) {
396 console.log('\r\nOptional arguments:\r\n');
397 console.log(' --user [username] The Intel AMT login username, admin is default.');
398 console.log(' --tls Specifies that TLS must be used.');
398 - console.log(' --list List of stored Wifi profile');
399 + console.log(' --list List Wifi profiles');
400 console.log(' --add Add new Wifi profile');
401 console.log(' --name New Wifi profile name');
402 console.log(' --priority Priority of this profile - default 0');
@@ -404,6 +405,22 @@ function run(argv) {
405 console.log(' --enc Wifi Encryption type (3 - TKIP, 4 - CCMP) - default 3');
406 console.log(' --psk Wifi password/pre-shared key');
407 console.log(' --del [profile-name] Delete new Wifi profile');
408 + } else if (action == 'amtwake') {
409 + console.log('AmtWake is used to view/set/remote Intel AMT Wake Alarms. Example usage:\r\n\r\n meshcmd amtwake --host 1.2.3.4 --user admin --pass mypassword --list');
410 + console.log('\r\nRequired arguments:\r\n');
411 + console.log(' --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.');
412 + console.log(' --pass [password] The Intel AMT login password.');
413 + console.log(' --[action] Action options are list, add, del.');
414 + console.log('\r\nOptional arguments:\r\n');
415 + console.log(' --user [username] The Intel AMT login username, admin is default.');
416 + console.log(' --tls Specifies that TLS must be used.');
417 + console.log(' --list List wake alarms profile');
418 + console.log(' --add [alarm-name] Add new wake alarm');
419 + console.log(' --date [yyyy-mm-dd] Alarm date in year-month-day format');
420 + console.log(' --time (hh:mm:ss) Optional alarm time in hours:minutes:seconds format, default is 00:00:00.');
421 + console.log(' --interval (dd-hh-mm) Optional alarm interval in days-hours-minutes format, default is alarm once.');
422 + console.log(' --deletewhendone Indicates alarm is removed once triggered, default is to no remove.');
423 + console.log(' --del [alarm-name] Remove a wake alarm');
424 } else {
425 actions.shift();
426 console.log('Invalid action, usage:\r\n\r\n meshcmd help [action]\r\n\r\nValid actions are: ' + actions.join(', ') + '.');
@@ -714,22 +731,24 @@ function run(argv) {
731 if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
732 if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
733 if (args.add != null) {
717 - if ((args.name == null) || (typeof args.name != 'string') || args.name == '') {
718 - console.log("Wifi profile name is required."); exit(1); return;
719 - }
720 - if ((args.ssid == null) || (typeof args.ssid != 'string') || args.ssid == '') {
721 - console.log("Wifi SSID is required."); exit(1); return;
722 - }
723 - if ((args.psk == null) || (typeof args.psk != 'string') || args.psk == '') {
724 - console.log("Wifi password is required."); exit(1); return;
725 - }
734 + if ((args.name == null) || (typeof args.name != 'string') || args.name == '') { console.log("Wifi profile name is required."); exit(1); return; }
735 + if ((args.ssid == null) || (typeof args.ssid != 'string') || args.ssid == '') { console.log("Wifi SSID is required."); exit(1); return; }
736 + if ((args.psk == null) || (typeof args.psk != 'string') || args.psk == '') { console.log("Wifi password is required."); exit(1); return; }
737 }
738 if (args.del !=null) {
728 - if ((settings.name == null) || (typeof settings.name != 'string') || settings.name == '') {
729 - console.log("Wifi profile name is required."); exit(1); return;
730 - }
739 + if ((settings.name == null) || (typeof settings.name != 'string') || settings.name == '') { console.log("Wifi profile name is required."); exit(1); return; }
740 }
741 performAmtWifiConfig(args);
742 + } else if (settings.action == 'amtwake') { // Perform remote Intel AMT wake alarm operations
743 + if (settings.hostname == null) { settings.hostname = '127.0.0.1'; }
744 + if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
745 + if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
746 + if ((args.del != null) && ((typeof args.del != 'string') || args.del == '')) { console.log("Alarm name is required (--del [name])."); exit(1); return; }
747 + if (args.add != null) {
748 + if (((typeof args.add != 'string') || args.add == '')) { console.log("Wake alarm name is required (--add [name])."); exit(1); return; }
749 + if (((typeof args.date != 'string') || args.data == '')) { console.log("Wake alarm date is required (--date [yyyy-mm-dd])."); exit(1); return; }
750 + }
751 + performAmtWakeConfig(args);
752 } else if (settings.action == 'amtfeatures') { // Perform remote Intel AMT feature configuration operation
753 if (settings.hostname == null) { settings.hostname = '127.0.0.1'; }
754 if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
@@ -2546,7 +2565,7 @@ function performAmtWifiConfig1(stack, name, response, status, args) {
2565
2566 if (args) {
2567 if (args.list) {
2549 - console.log('List of AMT Wifi profiles:');
2568 + console.log('List of Intel AMT Wifi profiles:');
2569 if (wifiProfiles.length==0) {
2570 console.log('No Wifi profiles is stored.');
2571 }
@@ -2611,6 +2630,119 @@ function performAmtWifiConfig1(stack, name, response, status, args) {
2630 }
2631 }
2632
2633 +//
2634 +// Intel AMT wake alarm configuration
2635 +//
2636 +
2637 +function _fmtdatetime(str) {
2638 + return str.replace('T', ' ').replace('Z', '');
2639 +}
2640 +
2641 +function _fmtinterval(str) {
2642 + var cl = str.replace('T', '').substring(str.indexOf('P') + 1);
2643 + cl = ' ' + cl.replace('D', " days ").replace('H', " hours ").replace('M', " minutes ");
2644 + cl = cl.replace(" 1 days ", " 1 day ").replace(" 1 hours ", " 1 hour ").replace(" 1 minutes ", " 1 minute ");
2645 + return cl.substring(0, cl.length - 1);
2646 +}
2647 +
2648 +function _fmttimepad(str) {
2649 + str = '' + str;
2650 + while (str.length < 2) { str = '0' + str; }
2651 + return str;
2652 +}
2653 +
2654 +function convertAmtDataStr(str) {
2655 + var timeArray = str.split('Z').join('').split('T').join('-').split(':').join('-').split('-');
2656 + return new Date(timeArray[0], timeArray[1] - 1, timeArray[2], timeArray[3], timeArray[4], timeArray[5]);
2657 +}
2658 +
2659 +function prepareAlarmOccurenceTemplate(id, nm, start, interval, del) {
2660 + return '<d:AlarmTemplate xmlns:d=\"http://intel.com/wbem/wscim/1/amt-schema/1/AMT_AlarmClockService\" xmlns:s=\"http://intel.com/wbem/wscim/1/ips-schema/1/IPS_AlarmClockOccurrence\"><s:InstanceID>' + id + '</s:InstanceID><s:StartTime><p:Datetime xmlns:p=\"http://schemas.dmtf.org/wbem/wscim/1/common\">' + start + '</p:Datetime></s:StartTime><s:Interval><p:Interval xmlns:p=\"http://schemas.dmtf.org/wbem/wscim/1/common\">' + interval + '</p:Interval></s:Interval><s:DeleteOnCompletion>' + del + '</s:DeleteOnCompletion></d:AlarmTemplate>';
2661 +}
2662 +
2663 +function performAmtWakeConfig(args) {
2664 + if ((settings.hostname == '127.0.0.1') || (settings.hostname.toLowerCase() == 'localhost')) {
2665 + settings.noconsole = true; startLms(performAmtWakeConfig0, false, args);
2666 + } else {
2667 + performAmtWakeConfig0(1, args);
2668 + }
2669 +}
2670 +
2671 +function performAmtWakeConfig0(state, args) {
2672 + var transport = require('amt-wsman-duk');
2673 + var wsman = require('amt-wsman');
2674 + var amt = require('amt');
2675 + wsstack = new wsman(transport, settings.hostname, settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls);
2676 + amtstack = new amt(wsstack);
2677 + amtstack.BatchEnum(null, ['IPS_AlarmClockOccurrence'], performAmtWakeConfig1, args);
2678 +}
2679 +
2680 +function performAmtWakeConfig1(stack, name, response, status, args) {
2681 + if (status == 200) {
2682 + var response = response['IPS_AlarmClockOccurrence'].responses;
2683 + if (!args) { process.exit(0); return; }
2684 + if (args.list) {
2685 + if (response.length == 0) {
2686 + console.log('No wake alarms.');
2687 + } else {
2688 + for (var i = 0; i < response.length; i++) {
2689 + var waketime = convertAmtDataStr(response[i]['StartTime']['Datetime']);
2690 + var t = waketime.toLocaleString(), tx = t.indexOf('.');
2691 + if (tx >= 0) { t = t.substring(0, tx); }
2692 + var details = response[i]['ElementName'] + ', wake on ' + t.replace(' ', ' at ');
2693 + if (response[i]['Interval'] != null) { details += ' and each' + _fmtinterval(response[i]['Interval']['Interval']); }
2694 + if (response[i]['DeleteOnCompletion'] == true) { details += ", delete when done"; }
2695 + console.log(details);
2696 + }
2697 + }
2698 + process.exit(0);
2699 + } else if (args.del) {
2700 + // Remove a wake alarm, start by looking to see if it exists
2701 + var alarmFound = false;
2702 + for (var i = 0; i < response.length; i++) { if (response[i]['ElementName'] == args.del) { alarmFound = true; } }
2703 + if (alarmFound == false) { console.log("Wake alarm " + args.del + " could not be found."); process.exit(0); return; }
2704 + // Remote the alarm
2705 + stack.Delete('IPS_AlarmClockOccurrence', { InstanceID: args.del },
2706 + function (stck, nm, resp, sts) {
2707 + if (sts == 200) { console.log("Done."); } else { console.log("Failed to delete wake alarm " + args.del + "."); }
2708 + process.exit(0);
2709 + },
2710 + 0, 1);
2711 + } else if (args.add) {
2712 + // Add a wake alarm
2713 + var alarmFound = false;
2714 + for (var i = 0; i < response.length; i++) { if (response[i]['ElementName'] == args.add) { alarmFound = true; } }
2715 + if (alarmFound) { console.log("Wake alarm " + args.add + " already exists."); process.exit(0); return; }
2716 + if (typeof args.time != 'string') { args.time = '00:00:00'; }
2717 + if (typeof args.interval != 'string') { args.interval = ''; }
2718 + var alarm_name = args.add;
2719 + var x1 = args.date.split('-');
2720 + var x2 = args.time.split(':');
2721 + var t = new Date(x1[0], x1[1] - 1, x1[2], x2[0], x2[1], 0, 0); // Not sure why, but month is 0 = JAN, 11 = DEC, seconds must be 00.
2722 + var alarm_starttime = _fmttimepad(t.getFullYear()) + '-' + _fmttimepad(t.getMonth() + 1) + '-' + _fmttimepad(t.getDate()) + 'T' + _fmttimepad(t.getHours()) + ':' + _fmttimepad(t.getMinutes()) + ':' + _fmttimepad(t.getSeconds()) + 'Z';
2723 + var x = args.interval.split('-');
2724 + if (x.length != 3) { x = [0, 0, 0]; }
2725 + var alarm_interval = 'P' + x[0] + 'DT' + x[1] + 'H' + x[2] + 'M';
2726 + var alarm_doc = (args.deletewhendone != null);
2727 + var tpl = prepareAlarmOccurenceTemplate(alarm_name, alarm_name, alarm_starttime, alarm_interval, alarm_doc);
2728 + stack.wsman.ExecMethodXml(amtstack.CompleteName('AMT_AlarmClockService'), 'AddAlarm', tpl,
2729 + function (ws, resuri, response, status) {
2730 + if (status != 200) { console.log("Failed to add alarm. Status: " + status + ". Verify the alarm is for a future time."); }
2731 + else if (response.Body['ReturnValue'] != 0) { console.log("Failed to add alarm " + response.Body['ReturnValueStr'] + ". Verify the alarm is for a future time."); }
2732 + else { console.log("Done."); }
2733 + process.exit(0);
2734 + }
2735 + );
2736 + } else {
2737 + console.log("Unknown action, specify --list, --del or --add.");
2738 + process.exit(0);
2739 + }
2740 + } else {
2741 + console.log("Error, status " + status + ".");
2742 + process.exit(1);
2743 + }
2744 +}
2745 +
2746 //
2747 // Intel AMT feature configuration action
2748 //
meshmail.js
+15 -4
@@ -300,14 +300,25 @@ module.exports.CreateMeshMail = function (parent) {
300 parent.debug('email', 'SMTP response: ' + JSON.stringify(err) + ', ' + JSON.stringify(info));
301 obj.sendingMail = false;
302 if (err == null) {
303 + // Send the next mail
304 obj.pendingMails.shift();
305 obj.retry = 0;
305 - sendNextMail(); // Send the next mail
306 + sendNextMail();
307 } else {
308 obj.retry++;
308 - parent.debug('email', 'SMTP server failed: ' + JSON.stringify(err));
309 - console.log('SMTP server failed: ' + JSON.stringify(err));
310 - if (obj.retry < 6) { setTimeout(sendNextMail, 60000); } // Wait and try again
309 + parent.debug('email', 'SMTP server failed (Retry:' + obj.retry + '): ' + JSON.stringify(err));
310 + console.log('SMTP server failed (Retry:' + obj.retry + '/3): ' + JSON.stringify(err));
311 + // Wait and try again
312 + if (obj.retry < 3) {
313 + setTimeout(sendNextMail, 10000);
314 + } else {
315 + // Failed, send the next mail
316 + parent.debug('email', 'SMTP server failed (Skipping): ' + JSON.stringify(err));
317 + console.log('SMTP server failed (Skipping): ' + JSON.stringify(err));
318 + obj.pendingMails.shift();
319 + obj.retry = 0;
320 + sendNextMail();
321 + }
322 }
323 });
324 }
meshuser.js
+32
@@ -812,6 +812,19 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
812 }
813 break;
814 }
815 + case 'email': {
816 + if (parent.parent.mailserver == null) {
817 + r = "No email service enabled.";
818 + } else {
819 + if (cmdargs['_'].length != 3) {
820 + r = "Usage: email \"user@sample.com\" \"Subject\" \"Message\".";
821 + } else {
822 + parent.parent.mailserver.sendMail(cmdargs['_'][0], cmdargs['_'][1], cmdargs['_'][2]);
823 + r = "Done.";
824 + }
825 + }
826 + break;
827 + }
828 case 'le': {
829 if (parent.parent.letsencrypt == null) {
830 r = "Let's Encrypt not in use.";
@@ -3871,6 +3884,25 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
3884 });
3885 break;
3886 }
3887 + case 'emailuser': { // Send a email message to a user
3888 + var errMsg = null, emailuser = null;
3889 + if (parent.parent.mailserver == null) { errMsg = 'Email server not enabled'; }
3890 + else if ((user.siteadmin & 2) == 0) { errMsg = 'No user management rights'; }
3891 + else if (common.validateString(command.userid, 1, 2048) == false) { errMsg = 'Invalid userid'; }
3892 + else if (common.validateString(command.subject, 1, 1000) == false) { errMsg = 'Invalid subject message'; }
3893 + else if (common.validateString(command.msg, 1, 10000) == false) { errMsg = 'Invalid message'; }
3894 + else {
3895 + emailuser = parent.users[command.userid];
3896 + if (emailuser == null) { errMsg = 'Invalid userid'; }
3897 + else if (emailuser.email == null) { errMsg = 'No validated email address for this user'; }
3898 + else if (emailuser.emailVerified !== true) { errMsg = 'No validated email address for this user'; }
3899 + }
3900 +
3901 + if (errMsg != null) { displayNotificationMessage(errMsg); break; }
3902 + parent.parent.mailserver.sendMail(emailuser.email, command.subject, command.msg);
3903 + displayNotificationMessage("Email sent.");
3904 + break;
3905 + }
3906 case 'getClip': {
3907 if (common.validateString(command.nodeid, 1, 1024) == false) break; // Check nodeid
3908
package.json
+1 -1
@@ -1,6 +1,6 @@
1 {
2 "name": "meshcentral",
3 - "version": "0.5.31",
3 + "version": "0.5.32",
4 "keywords": [
5 "Remote Management",
6 "Intel AMT",
public/scripts/amt-wsman-0.2.0-min.js
+1 -1
@@ -1 +1 @@
1 -var WsmanStackCreateService=function(e,s,r,a,o,t){var p={};function l(e){if(!e)return"";var s=" ";for(var r in e)e.hasOwnProperty(r)&&0===r.indexOf("@")&&(s+=r.substring(1)+'="'+e[r]+'" ');return s}function w(e){if(!e)return"";if("string"==typeof e)return e;if(e.InstanceID)return'<w:SelectorSet><w:Selector Name="InstanceID">'+e.InstanceID+"</w:Selector></w:SelectorSet>";var s="<w:SelectorSet>";for(var r in e)if(e.hasOwnProperty(r)){if(s+='<w:Selector Name="'+r+'">',e[r].ReferenceParameters){s+="<a:EndpointReference>",s+="<a:Address>"+e[r].Address+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+e[r].ReferenceParameters.ResourceURI+"</w:ResourceURI><w:SelectorSet>";var a=e[r].ReferenceParameters.SelectorSet.Selector;if(Array.isArray(a))for(var o=0;o<a.length;o++)s+="<w:Selector"+l(a[o])+">"+a[o].Value+"</w:Selector>";else s+="<w:Selector"+l(a)+">"+a.Value+"</w:Selector>";s+="</w:SelectorSet></a:ReferenceParameters></a:EndpointReference>"}else s+=e[r];s+="</w:Selector>"}return s+="</w:SelectorSet>"}return p.NextMessageId=1,p.Address="/wsman",p.comm=CreateWsmanComm(e,s,r,a,o,t),p.PerformAjax=function(e,o,s,r,a){null==a&&(a=""),p.comm.PerformAjax('<?xml version=\"1.0\" encoding=\"utf-8\"?><Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd" xmlns="http://www.w3.org/2003/05/soap-envelope" '+a+"><Header><a:Action>"+e,function(e,s,r){if(200==s){var a=p.ParseWsman(e);a&&null!=a?o(p,a.Header.ResourceURI,a,200,r):o(p,null,{Header:{HttpError:s}},601,r)}else o(p,null,{Header:{HttpError:s}},s,r)},s,r)},p.CancelAllQueries=function(e){p.comm.CancelAllQueries(e)},p.GetNameFromUrl=function(e){var s=e.lastIndexOf("/");return-1==s?e:e.substring(s+1)},p.ExecSubscribe=function(e,s,r,a,o,t,n,l,c,d){var m="",i="";null!=c&&null!=d&&(m="<t:IssuedTokens><t:RequestSecurityTokenResponse><t:TokenType>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken</t:TokenType><t:RequestedSecurityToken><se:UsernameToken><se:Username>"+c+'</se:Username><se:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#PasswordText">'+d+"</se:Password></se:UsernameToken></t:RequestedSecurityToken></t:RequestSecurityTokenResponse></t:IssuedTokens>",i='<Auth Profile="http://schemas.xmlsoap.org/ws/2004/08/eventing/DeliveryModes/secprofile/http/digest"/>'),l=null!=l&&null!=l?"<a:ReferenceParameters>"+l+"</a:ReferenceParameters>":"";var u="http://schemas.xmlsoap.org/ws/2004/08/eventing/Subscribe</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>"+w(n)+m+'</Header><Body><e:Subscribe><e:Delivery Mode="http://schemas.dmtf.org/wbem/wsman/1/wsman/'+s+'"><e:NotifyTo><a:Address>'+r+"</a:Address></e:NotifyTo>"+i+"</e:Delivery><e:Expires>PT0.000000S</e:Expires></e:Subscribe>";p.PerformAjax(u+"</Body></Envelope>",a,o,t,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing" xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust" xmlns:se="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:m="http://x.com"')},p.ExecUnSubscribe=function(e,s,r,a,o){var t="http://schemas.xmlsoap.org/ws/2004/08/eventing/Unsubscribe</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>"+w(o)+"</Header><Body><e:Unsubscribe/>";p.PerformAjax(t+"</Body></Envelope>",s,r,a,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing"')},p.ExecPut=function(e,s,r,a,o,t){var n="http://schemas.xmlsoap.org/ws/2004/09/transfer/Put</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60.000S</w:OperationTimeout>"+w(t)+"</Header><Body>"+function(e,s){if(!e||null==s)return"";var r=p.GetNameFromUrl(e),a="<r:"+r+' xmlns:r="'+e+'">';for(var o in s)if(s.hasOwnProperty(o)&&0!==o.indexOf("__")&&0!==o.indexOf("@")&&void 0!==s[o]&&null!==s[o]&&"function"!=typeof s[o])if("object"==typeof s[o]&&s[o].ReferenceParameters){a+="<r:"+o+"><a:Address>"+s[o].Address+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+s[o].ReferenceParameters.ResourceURI+"</w:ResourceURI><w:SelectorSet>";var t=s[o].ReferenceParameters.SelectorSet.Selector;if(Array.isArray(t))for(var n=0;n<t.length;n++)a+="<w:Selector"+l(t[n])+">"+t[n].Value+"</w:Selector>";else a+="<w:Selector"+l(t)+">"+t.Value+"</w:Selector>";a+="</w:SelectorSet></a:ReferenceParameters></r:"+o+">"}else if(Array.isArray(s[o]))for(n=0;n<s[o].length;n++)a+="<r:"+o+">"+s[o][n].toString()+"</r:"+o+">";else a+="<r:"+o+">"+s[o].toString()+"</r:"+o+">";return a+="</r:"+r+">"}(e,s);p.PerformAjax(n+"</Body></Envelope>",r,a,o)},p.ExecCreate=function(e,s,r,a,o,t){var n=p.GetNameFromUrl(e),l="http://schemas.xmlsoap.org/ws/2004/09/transfer/Create</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+w(t)+"</Header><Body><g:"+n+' xmlns:g="'+e+'">';for(var c in s)l+="<g:"+c+">"+s[c]+"</g:"+c+">";p.PerformAjax(l+"</g:"+n+"></Body></Envelope>",r,a,o)},p.ExecCreateXml=function(e,s,r,a,o){var t=p.GetNameFromUrl(e);p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/transfer/Create</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60.000S</w:OperationTimeout></Header><Body><r:"+t+' xmlns:r="'+e+'">'+s+"</r:"+t+"></Body></Envelope>",r,a,o)},p.ExecDelete=function(e,s,r,a,o){var t="http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+w(s)+"</Header><Body /></Envelope>";p.PerformAjax(t,r,a,o)},p.ExecGet=function(e,s,r,a){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/transfer/Get</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body /></Envelope>",s,r,a)},p.ExecMethod=function(e,s,r,a,o,t,n){var l="";for(var c in r)if(null!=r[c])if(Array.isArray(r[c]))for(var d in r[c])l+="<r:"+c+">"+r[c][d]+"</r:"+c+">";else l+="<r:"+c+">"+r[c]+"</r:"+c+">";p.ExecMethodXml(e,s,l,a,o,t,n)},p.ExecMethodXml=function(e,s,r,a,o,t,n){p.PerformAjax(e+"/"+s+"</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+w(n)+"</Header><Body><r:"+s+'_INPUT xmlns:r="'+e+'">'+r+"</r:"+s+"_INPUT></Body></Envelope>",a,o,t)},p.ExecEnum=function(e,s,r,a){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Enumerate</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++'</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body><Enumerate xmlns="http://schemas.xmlsoap.org/ws/2004/09/enumeration" /></Body></Envelope>',s,r,a)},p.ExecPull=function(e,s,r,a,o){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Pull</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++'</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body><Pull xmlns="http://schemas.xmlsoap.org/ws/2004/09/enumeration"><EnumerationContext>'+s+"</EnumerationContext><MaxElements>999</MaxElements><MaxCharacters>99999</MaxCharacters></Pull></Body></Envelope>",r,a,o)},p.ParseWsman=function(s){try{s.childNodes||(s=function(e){{if(window.DOMParser)return(new DOMParser).parseFromString(e,"text/xml");var s=new ActiveXObject("Microsoft.XMLDOM");return s.async=!1,s.loadXML(e),s}}(s));var e,r={Header:{}},a=s.getElementsByTagName("Header")[0];if(!(a=a||s.getElementsByTagName("a:Header")[0]))return null;for(var o=0;o<a.childNodes.length;o++){var t=a.childNodes[o];r.Header[t.localName]=t.textContent}var n=s.getElementsByTagName("Body")[0];return(n=n||s.getElementsByTagName("a:Body")[0])?(0<n.childNodes.length&&((e=n.childNodes[0].localName).indexOf("_OUTPUT")==e.length-7&&(e=e.substring(0,e.length-7)),r.Header.Method=e,r.Body=function e(s){var r,a={};for(var o=0;o<s.childNodes.length;o++){var t=s.childNodes[o];"true"==(r=0==t.childElementCount?t.textContent:e(t))&&(r=!0),"false"==r&&(r=!1);var n=r;if(0<t.attributes.length){n={Value:r};for(var l=0;l<t.attributes.length;l++)n["@"+t.attributes[l].name]=t.attributes[l].value}a[t.localName]instanceof Array?a[t.localName].push(n):null==a[t.localName]?a[t.localName]=n:a[t.localName]=[a[t.localName],n]}return a}(n.childNodes[0])),r):null}catch(e){return console.log("Unable to parse XML: "+s),null}},p}
\ No newline at end of file
1 +var WsmanStackCreateService=function(e,s,r,a,o,t){var p={};function l(e){if(!e)return"";var s=" ";for(var r in e)e.hasOwnProperty(r)&&0===r.indexOf("@")&&(s+=r.substring(1)+'="'+e[r]+'" ');return s}function w(e){if(!e)return"";if("string"==typeof e)return e;if(e.InstanceID)return'<w:SelectorSet><w:Selector Name="InstanceID">'+e.InstanceID+"</w:Selector></w:SelectorSet>";var s="<w:SelectorSet>";for(var r in e)if(e.hasOwnProperty(r)){if(s+='<w:Selector Name="'+r+'">',e[r].ReferenceParameters){s+="<a:EndpointReference>",s+="<a:Address>"+e[r].Address+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+e[r].ReferenceParameters.ResourceURI+"</w:ResourceURI><w:SelectorSet>";var a=e[r].ReferenceParameters.SelectorSet.Selector;if(Array.isArray(a))for(var o=0;o<a.length;o++)s+="<w:Selector"+l(a[o])+">"+a[o].Value+"</w:Selector>";else s+="<w:Selector"+l(a)+">"+a.Value+"</w:Selector>";s+="</w:SelectorSet></a:ReferenceParameters></a:EndpointReference>"}else s+=e[r];s+="</w:Selector>"}return s+="</w:SelectorSet>"}return p.NextMessageId=1,p.Address="/wsman",p.comm=CreateWsmanComm(e,s,r,a,o,t),p.PerformAjax=function(e,o,s,r,a){null==a&&(a=""),p.comm.PerformAjax('<?xml version=\"1.0\" encoding=\"utf-8\"?><Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd" xmlns="http://www.w3.org/2003/05/soap-envelope" '+a+"><Header><a:Action>"+e,function(e,s,r){if(200==s){var a=p.ParseWsman(e);a&&null!=a?o(p,a.Header.ResourceURI,a,200,r):o(p,null,{Header:{HttpError:s}},601,r)}else o(p,null,{Header:{HttpError:s}},s,r)},s,r)},p.CancelAllQueries=function(e){p.comm.CancelAllQueries(e)},p.GetNameFromUrl=function(e){var s=e.lastIndexOf("/");return-1==s?e:e.substring(s+1)},p.ExecSubscribe=function(e,s,r,a,o,t,n,l,d,c){var m="",i="";null!=d&&null!=c&&(m="<t:IssuedTokens><t:RequestSecurityTokenResponse><t:TokenType>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken</t:TokenType><t:RequestedSecurityToken><se:UsernameToken><se:Username>"+d+'</se:Username><se:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#PasswordText">'+c+"</se:Password></se:UsernameToken></t:RequestedSecurityToken></t:RequestSecurityTokenResponse></t:IssuedTokens>",i='<Auth Profile="http://schemas.xmlsoap.org/ws/2004/08/eventing/DeliveryModes/secprofile/http/digest"/>'),l=null!=l&&null!=l?"<a:ReferenceParameters>"+l+"</a:ReferenceParameters>":"";var u="http://schemas.xmlsoap.org/ws/2004/08/eventing/Subscribe</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>"+w(n)+m+'</Header><Body><e:Subscribe><e:Delivery Mode="http://schemas.dmtf.org/wbem/wsman/1/wsman/'+s+'"><e:NotifyTo><a:Address>'+r+"</a:Address></e:NotifyTo>"+i+"</e:Delivery><e:Expires>PT0.000000S</e:Expires></e:Subscribe>";p.PerformAjax(u+"</Body></Envelope>",a,o,t,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing" xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust" xmlns:se="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:m="http://x.com"')},p.ExecUnSubscribe=function(e,s,r,a,o){var t="http://schemas.xmlsoap.org/ws/2004/08/eventing/Unsubscribe</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>"+w(o)+"</Header><Body><e:Unsubscribe/>";p.PerformAjax(t+"</Body></Envelope>",s,r,a,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing"')},p.ExecPut=function(e,s,r,a,o,t){var n="http://schemas.xmlsoap.org/ws/2004/09/transfer/Put</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60.000S</w:OperationTimeout>"+w(t)+"</Header><Body>"+function(e,s){if(!e||null==s)return"";var r=p.GetNameFromUrl(e),a="<r:"+r+' xmlns:r="'+e+'">';for(var o in s)if(s.hasOwnProperty(o)&&0!==o.indexOf("__")&&0!==o.indexOf("@")&&void 0!==s[o]&&null!==s[o]&&"function"!=typeof s[o])if("object"==typeof s[o]&&s[o].ReferenceParameters){a+="<r:"+o+"><a:Address>"+s[o].Address+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+s[o].ReferenceParameters.ResourceURI+"</w:ResourceURI><w:SelectorSet>";var t=s[o].ReferenceParameters.SelectorSet.Selector;if(Array.isArray(t))for(var n=0;n<t.length;n++)a+="<w:Selector"+l(t[n])+">"+t[n].Value+"</w:Selector>";else a+="<w:Selector"+l(t)+">"+t.Value+"</w:Selector>";a+="</w:SelectorSet></a:ReferenceParameters></r:"+o+">"}else if(Array.isArray(s[o]))for(n=0;n<s[o].length;n++)a+="<r:"+o+">"+s[o][n].toString()+"</r:"+o+">";else a+="<r:"+o+">"+s[o].toString()+"</r:"+o+">";return a+="</r:"+r+">"}(e,s);p.PerformAjax(n+"</Body></Envelope>",r,a,o)},p.ExecCreate=function(e,s,r,a,o,t){var n=p.GetNameFromUrl(e),l="http://schemas.xmlsoap.org/ws/2004/09/transfer/Create</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+w(t)+"</Header><Body><g:"+n+' xmlns:g="'+e+'">';for(var d in s)l+="<g:"+d+">"+s[d]+"</g:"+d+">";p.PerformAjax(l+"</g:"+n+"></Body></Envelope>",r,a,o)},p.ExecCreateXml=function(e,s,r,a,o){var t=p.GetNameFromUrl(e);p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/transfer/Create</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60.000S</w:OperationTimeout></Header><Body><r:"+t+' xmlns:r="'+e+'">'+s+"</r:"+t+"></Body></Envelope>",r,a,o)},p.ExecDelete=function(e,s,r,a,o){var t="http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+w(s)+"</Header><Body /></Envelope>";p.PerformAjax(t,r,a,o)},p.ExecGet=function(e,s,r,a){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/transfer/Get</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body /></Envelope>",s,r,a)},p.ExecMethod=function(e,s,r,a,o,t,n){var l="";for(var d in r)if(null!=r[d])if(Array.isArray(r[d]))for(var c in r[d])l+="<r:"+d+">"+r[d][c]+"</r:"+d+">";else l+="<r:"+d+">"+r[d]+"</r:"+d+">";p.ExecMethodXml(e,s,l,a,o,t,n)},p.ExecMethodXml=function(e,s,r,a,o,t,n){p.PerformAjax(e+"/"+s+"</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+w(n)+"</Header><Body><r:"+s+'_INPUT xmlns:r="'+e+'">'+r+"</r:"+s+"_INPUT></Body></Envelope>",a,o,t)},p.ExecEnum=function(e,s,r,a){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Enumerate</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++'</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body><Enumerate xmlns="http://schemas.xmlsoap.org/ws/2004/09/enumeration" /></Body></Envelope>',s,r,a)},p.ExecPull=function(e,s,r,a,o){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Pull</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+e+"</w:ResourceURI><a:MessageID>"+p.NextMessageId+++'</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body><Pull xmlns="http://schemas.xmlsoap.org/ws/2004/09/enumeration"><EnumerationContext>'+s+"</EnumerationContext><MaxElements>999</MaxElements><MaxCharacters>99999</MaxCharacters></Pull></Body></Envelope>",r,a,o)},p.ParseWsman=function(s){try{s.childNodes||(s=function(e){{if(window.DOMParser)return(new DOMParser).parseFromString(e,"text/xml");var s=new ActiveXObject("Microsoft.XMLDOM");return s.async=!1,s.loadXML(e),s}}(s));var e,r={Header:{}},a=s.getElementsByTagName("Header")[0];if(!(a=a||s.getElementsByTagName("a:Header")[0]))return null;for(var o=0;o<a.childNodes.length;o++){var t=a.childNodes[o];r.Header[t.localName]=t.textContent}var n=s.getElementsByTagName("Body")[0];return(n=n||s.getElementsByTagName("a:Body")[0])?(0<n.childNodes.length&&((e=n.childNodes[0].localName).indexOf("_OUTPUT")==e.length-7&&(e=e.substring(0,e.length-7)),r.Header.Method=e,r.Body=function e(s){var r,a={};for(var o=0;o<s.childNodes.length;o++){var t=s.childNodes[o];"true"==(r=0==t.childElementCount?t.textContent:e(t))&&(r=!0),"false"==r&&(r=!1);var n=r;if(0<t.attributes.length){n={Value:r};for(var l=0;l<t.attributes.length;l++)n["@"+t.attributes[l].name]=t.attributes[l].value}a[t.localName]instanceof Array?a[t.localName].push(n):null==a[t.localName]?a[t.localName]=n:a[t.localName]=[a[t.localName],n]}return a}(n.childNodes[0])),r):null}catch(e){return console.log("Unable to parse XML: "+s),null}},p}
\ No newline at end of file
public/styles/style.css
+16
@@ -2332,6 +2332,10 @@ a {
2332 background-color: gray;
2333 }
2334
2335 + .night #deskToolsAreaTop {
2336 + background-color: #222;
2337 + }
2338 +
2339 #deskToolsArea {
2340 position: absolute;
2341 top: 26px;
@@ -2342,6 +2346,10 @@ a {
2346 text-align: left;
2347 }
2348
2349 +.night #deskToolsArea {
2350 + background-color: #222;
2351 +}
2352 +
2353 #deskToolsHeader {
2354 border-bottom: 1px solid darkgray;
2355 padding: 3px;
@@ -2389,6 +2397,14 @@ a {
2397 .deskToolsBar:hover {
2398 background-color: #EFE8B6;
2399 }
2400 +
2401 + .night .deskToolsBar {
2402 + color: #ddd;
2403 + }
2404 +
2405 + .night .deskToolsBar:hover {
2406 + background-color: #444;
2407 + }
2408
2409 #deskarea4 {
2410 grid-area: deskarea4;
translate/translate.json
+353 -334
@@ -192,7 +192,7 @@
192 "zh-chs": " 用戶需要先登錄到該服務器一次,然後才能將其添加到設備組。",
193 "xloc": [
194 "default.handlebars->25->1253",
195 - "default.handlebars->25->1557"
195 + "default.handlebars->25->1559"
196 ]
197 },
198 {
@@ -614,7 +614,7 @@
614 "default-mobile.handlebars->9->262",
615 "default-mobile.handlebars->9->77",
616 "default.handlebars->25->1360",
617 - "default.handlebars->25->1700",
617 + "default.handlebars->25->1704",
618 "default.handlebars->25->747"
619 ]
620 },
@@ -663,7 +663,7 @@
663 "ru": "1 активная сессия",
664 "zh-chs": "1個活動會話",
665 "xloc": [
666 - "default.handlebars->25->1618"
666 + "default.handlebars->25->1622"
667 ]
668 },
669 {
@@ -725,7 +725,7 @@
725 "ru": "1 группа",
726 "zh-chs": "1組",
727 "xloc": [
728 - "default.handlebars->25->1585"
728 + "default.handlebars->25->1587"
729 ]
730 },
731 {
@@ -1125,7 +1125,7 @@
1125 "zh-chs": "啟用第二因素身份驗證",
1126 "xloc": [
1127 "default.handlebars->25->1431",
1128 - "default.handlebars->25->1607"
1128 + "default.handlebars->25->1609"
1129 ]
1130 },
1131 {
@@ -1871,7 +1871,7 @@
1871 "ru": "Доступ к файлам сервера",
1872 "zh-chs": "訪問服務器文件",
1873 "xloc": [
1874 - "default.handlebars->25->1563"
1874 + "default.handlebars->25->1565"
1875 ]
1876 },
1877 {
@@ -1996,7 +1996,7 @@
1996 "zh-chs": "帐户已被锁定",
1997 "xloc": [
1998 "default.handlebars->25->1433",
1999 - "default.handlebars->25->1560"
1999 + "default.handlebars->25->1562"
2000 ]
2001 },
2002 {
@@ -2269,8 +2269,8 @@
2269 "ru": "Добавить устройство",
2270 "zh-chs": "添加設備",
2271 "xloc": [
2272 - "default.handlebars->25->1537",
2273 - "default.handlebars->25->1651"
2272 + "default.handlebars->25->1539",
2273 + "default.handlebars->25->1655"
2274 ]
2275 },
2276 {
@@ -2305,8 +2305,8 @@
2305 "zh-chs": "添加設備組",
2306 "xloc": [
2307 "default.handlebars->25->1285",
2308 - "default.handlebars->25->1531",
2309 - "default.handlebars->25->1639",
2308 + "default.handlebars->25->1533",
2309 + "default.handlebars->25->1643",
2310 "default.handlebars->25->198"
2311 ]
2312 },
@@ -2423,7 +2423,7 @@
2423 "ru": "Добавить участие",
2424 "zh-chs": "添加會員",
2425 "xloc": [
2426 - "default.handlebars->25->1669"
2426 + "default.handlebars->25->1673"
2427 ]
2428 },
2429 {
@@ -2515,7 +2515,7 @@
2515 "xloc": [
2516 "default.handlebars->25->1185",
2517 "default.handlebars->25->1284",
2518 - "default.handlebars->25->1645",
2518 + "default.handlebars->25->1649",
2519 "default.handlebars->25->571"
2520 ]
2521 },
@@ -2576,7 +2576,7 @@
2576 "zh-chs": "添加用戶",
2577 "xloc": [
2578 "default.handlebars->25->1184",
2579 - "default.handlebars->25->1526"
2579 + "default.handlebars->25->1528"
2580 ]
2581 },
2582 {
@@ -2610,7 +2610,7 @@
2610 "ru": "Добавить пользователей в группу",
2611 "zh-chs": "將用戶添加到用戶組",
2612 "xloc": [
2613 - "default.handlebars->25->1559"
2613 + "default.handlebars->25->1561"
2614 ]
2615 },
2616 {
@@ -2815,7 +2815,7 @@
2815 "ru": "Области администратора",
2816 "zh-chs": "管理領域",
2817 "xloc": [
2818 - "default.handlebars->25->1589"
2818 + "default.handlebars->25->1591"
2819 ]
2820 },
2821 {
@@ -2850,7 +2850,7 @@
2850 "ru": "Административные области",
2851 "zh-chs": "行政領域",
2852 "xloc": [
2853 - "default.handlebars->25->1482"
2853 + "default.handlebars->25->1484"
2854 ]
2855 },
2856 {
@@ -2978,7 +2978,7 @@
2978 "ru": "Счетчик ошибок агента",
2979 "zh-chs": "座席錯誤計數器",
2980 "xloc": [
2981 - "default.handlebars->25->1710"
2981 + "default.handlebars->25->1714"
2982 ]
2983 },
2984 {
@@ -3047,7 +3047,7 @@
3047 "ru": "Сессии агентов",
3048 "zh-chs": "座席會議",
3049 "xloc": [
3050 - "default.handlebars->25->1726"
3050 + "default.handlebars->25->1730"
3051 ]
3052 },
3053 {
@@ -3170,7 +3170,7 @@
3170 "ru": "Агенты",
3171 "zh-chs": "代理商",
3172 "xloc": [
3173 - "default.handlebars->25->1739"
3173 + "default.handlebars->25->1743"
3174 ]
3175 },
3176 {
@@ -3257,7 +3257,7 @@
3257 "zh-chs": "允許用戶管理此設備組和該組中的設備。",
3258 "xloc": [
3259 "default.handlebars->25->1251",
3260 - "default.handlebars->25->1556"
3260 + "default.handlebars->25->1558"
3261 ]
3262 },
3263 {
@@ -3361,7 +3361,7 @@
3361 "zh-chs": "始終通知",
3362 "xloc": [
3363 "default.handlebars->25->1165",
3364 - "default.handlebars->25->1598",
3364 + "default.handlebars->25->1600",
3365 "default.handlebars->25->519"
3366 ]
3367 },
@@ -3380,7 +3380,7 @@
3380 "zh-chs": "總是提示",
3381 "xloc": [
3382 "default.handlebars->25->1166",
3383 - "default.handlebars->25->1599",
3383 + "default.handlebars->25->1601",
3384 "default.handlebars->25->520"
3385 ]
3386 },
@@ -3989,7 +3989,7 @@
3989 "ru": "Вы уверенны, что {0} плагин: {1}",
3990 "zh-chs": "您確定要{0}插件嗎:{1}",
3991 "xloc": [
3992 - "default.handlebars->25->1779"
3992 + "default.handlebars->25->1783"
3993 ]
3994 },
3995 {
@@ -4085,7 +4085,7 @@
4085 "ru": "Приложение аутентификации",
4086 "zh-chs": "身份驗證應用",
4087 "xloc": [
4088 - "default.handlebars->25->1602"
4088 + "default.handlebars->25->1604"
4089 ]
4090 },
4091 {
@@ -4401,7 +4401,7 @@
4401 "ru": "Резервные коды",
4402 "zh-chs": "備用碼",
4403 "xloc": [
4404 - "default.handlebars->25->1604"
4404 + "default.handlebars->25->1606"
4405 ]
4406 },
4407 {
@@ -4418,7 +4418,7 @@
4418 "ru": "Плохой ключ",
4419 "zh-chs": "錯誤的簽名",
4420 "xloc": [
4421 - "default.handlebars->25->1717"
4421 + "default.handlebars->25->1721"
4422 ]
4423 },
4424 {
@@ -4435,7 +4435,7 @@
4435 "ru": "Плохой веб-сертификат",
4436 "zh-chs": "錯誤的網絡證書",
4437 "xloc": [
4438 - "default.handlebars->25->1716"
4438 + "default.handlebars->25->1720"
4439 ]
4440 },
4441 {
@@ -4573,7 +4573,7 @@
4573 "ru": "Отправить сообщение",
4574 "zh-chs": "廣播",
4575 "xloc": [
4576 - "default.handlebars->25->1524",
4576 + "default.handlebars->25->1526",
4577 "default.handlebars->container->column_l->p4->3->1->0->3->1"
4578 ]
4579 },
@@ -4591,7 +4591,7 @@
4591 "ru": "Отправить сообщение",
4592 "zh-chs": "廣播消息",
4593 "xloc": [
4594 - "default.handlebars->25->1466"
4594 + "default.handlebars->25->1468"
4595 ]
4596 },
4597 {
@@ -4608,7 +4608,7 @@
4608 "ru": "Отправить сообщение всем подключенным пользователям.",
4609 "zh-chs": "向所有連接的用戶廣播消息。",
4610 "xloc": [
4611 - "default.handlebars->25->1465"
4611 + "default.handlebars->25->1467"
4612 ]
4613 },
4614 {
@@ -4698,7 +4698,7 @@
4698 "ru": "CIRA Сервер",
4699 "zh-chs": "CIRA服務器",
4700 "xloc": [
4701 - "default.handlebars->25->1767"
4701 + "default.handlebars->25->1771"
4702 ]
4703 },
4704 {
@@ -4715,7 +4715,7 @@
4715 "ru": "CIRA Сервер команды",
4716 "zh-chs": "CIRA服務器命令",
4717 "xloc": [
4718 - "default.handlebars->25->1768"
4718 + "default.handlebars->25->1772"
4719 ]
4720 },
4721 {
@@ -4748,7 +4748,7 @@
4748 "ru": "Загрузка CPU",
4749 "zh-chs": "CPU負載",
4750 "xloc": [
4751 - "default.handlebars->25->1731"
4751 + "default.handlebars->25->1735"
4752 ]
4753 },
4754 {
@@ -4765,7 +4765,7 @@
4765 "ru": "Загрузка CPU за последние 15 минут",
4766 "zh-chs": "最近15分鐘的CPU負載",
4767 "xloc": [
4768 - "default.handlebars->25->1734"
4768 + "default.handlebars->25->1738"
4769 ]
4770 },
4771 {
@@ -4782,7 +4782,7 @@
4782 "ru": "Загрузка CPU за последние 5 минут",
4783 "zh-chs": "最近5分鐘的CPU負載",
4784 "xloc": [
4785 - "default.handlebars->25->1733"
4785 + "default.handlebars->25->1737"
4786 ]
4787 },
4788 {
@@ -4799,7 +4799,7 @@
4799 "ru": "Загрузка CPU за последнюю минуту",
4800 "zh-chs": "最後一分鐘的CPU負載",
4801 "xloc": [
4802 - "default.handlebars->25->1732"
4802 + "default.handlebars->25->1736"
4803 ]
4804 },
4805 {
@@ -4836,7 +4836,7 @@
4836 "zh-chs": "CSV格式",
4837 "xloc": [
4838 "default.handlebars->25->1400",
4839 - "default.handlebars->25->1457",
4839 + "default.handlebars->25->1459",
4840 "default.handlebars->25->412"
4841 ]
4842 },
@@ -4854,7 +4854,7 @@
4854 "ru": "Ошибка вызова",
4855 "zh-chs": "通話錯誤",
4856 "xloc": [
4857 - "default.handlebars->25->1780"
4857 + "default.handlebars->25->1784"
4858 ]
4859 },
4860 {
@@ -4991,7 +4991,7 @@
4991 "ru": "Смена email для {0}",
4992 "zh-chs": "更改{0}的電子郵件",
4993 "xloc": [
4994 - "default.handlebars->25->1628"
4994 + "default.handlebars->25->1632"
4995 ]
4996 },
4997 {
@@ -5029,7 +5029,7 @@
5029 "xloc": [
5030 "default-mobile.handlebars->9->59",
5031 "default.handlebars->25->1112",
5032 - "default.handlebars->25->1617"
5032 + "default.handlebars->25->1621"
5033 ]
5034 },
5035 {
@@ -5046,7 +5046,7 @@
5046 "ru": "Смена пароля для {0}",
5047 "zh-chs": "更改{0}的密碼",
5048 "xloc": [
5049 - "default.handlebars->25->1635"
5049 + "default.handlebars->25->1639"
5050 ]
5051 },
5052 {
@@ -5116,7 +5116,7 @@
5116 "ru": "Изменить пароль для этого пользователя",
5117 "zh-chs": "更改該用戶的密碼",
5118 "xloc": [
5119 - "default.handlebars->25->1616"
5119 + "default.handlebars->25->1620"
5120 ]
5121 },
5122 {
@@ -5321,7 +5321,7 @@
5321 "ru": "Проверка...",
5322 "zh-chs": "檢查...",
5323 "xloc": [
5324 - "default.handlebars->25->1774",
5324 + "default.handlebars->25->1778",
5325 "default.handlebars->25->885"
5326 ]
5327 },
@@ -5537,7 +5537,7 @@
5537 "nl": "Wis alle meldingen",
5538 "zh-chs": "全部清除",
5539 "xloc": [
5540 - "default.handlebars->25->1704"
5540 + "default.handlebars->25->1708"
5541 ]
5542 },
5543 {
@@ -5587,7 +5587,7 @@
5587 "ru": "Очистить это уведомление",
5588 "zh-chs": "清除此通知",
5589 "xloc": [
5590 - "default.handlebars->25->1703"
5590 + "default.handlebars->25->1707"
5591 ]
5592 },
5593 {
@@ -5663,7 +5663,7 @@
5663 "nl": "Klik hier om de gebruikersgroepsnaam te bewerken",
5664 "zh-chs": "单击此处编辑用户组名称",
5665 "xloc": [
5666 - "default.handlebars->25->1516"
5666 + "default.handlebars->25->1518"
5667 ]
5668 },
5669 {
@@ -5837,8 +5837,8 @@
5837 "ru": "Общие группы устройств",
5838 "zh-chs": "通用設備組",
5839 "xloc": [
5840 - "default.handlebars->25->1532",
5841 - "default.handlebars->25->1640"
5840 + "default.handlebars->25->1534",
5841 + "default.handlebars->25->1644"
5842 ]
5843 },
5844 {
@@ -5855,8 +5855,8 @@
5855 "ru": "Общие устройства",
5856 "zh-chs": "通用設備",
5857 "xloc": [
5858 - "default.handlebars->25->1538",
5859 - "default.handlebars->25->1652"
5858 + "default.handlebars->25->1540",
5859 + "default.handlebars->25->1656"
5860 ]
5861 },
5862 {
@@ -5895,9 +5895,9 @@
5895 "default-mobile.handlebars->9->306",
5896 "default.handlebars->25->1230",
5897 "default.handlebars->25->1443",
5898 - "default.handlebars->25->1508",
5899 - "default.handlebars->25->1552",
5900 - "default.handlebars->25->1638",
5898 + "default.handlebars->25->1510",
5899 + "default.handlebars->25->1554",
5900 + "default.handlebars->25->1642",
5901 "default.handlebars->25->409",
5902 "default.handlebars->25->644",
5903 "default.handlebars->25->653"
@@ -5981,7 +5981,7 @@
5981 "nl": "Bevestig verwijdering geselecteerde gebruikersgroep(en)?",
5982 "zh-chs": "确认删除选定的用户组?",
5983 "xloc": [
5984 - "default.handlebars->25->1507"
5984 + "default.handlebars->25->1509"
5985 ]
5986 },
5987 {
@@ -5998,7 +5998,7 @@
5998 "ru": "Подтвердить удаление пользователя {0}?",
5999 "zh-chs": "確認刪除用戶{0}?",
6000 "xloc": [
6001 - "default.handlebars->25->1637"
6001 + "default.handlebars->25->1641"
6002 ]
6003 },
6004 {
@@ -6012,7 +6012,7 @@
6012 "nl": "Bevestig lidmaatschap verwijderen van gebruiker \\\"{0}\\\"?",
6013 "zh-chs": "确认删除用户\\“ {0} \\”的成员身份?",
6014 "xloc": [
6015 - "default.handlebars->25->1555"
6015 + "default.handlebars->25->1557"
6016 ]
6017 },
6018 {
@@ -6026,7 +6026,7 @@
6026 "nl": "Bevestig lidmaatschap verwijdering van gebruikergroep \\\"{0}\\\"?",
6027 "zh-chs": "确认删除用户组 “{0}” 的成员身份?",
6028 "xloc": [
6029 - "default.handlebars->25->1667"
6029 + "default.handlebars->25->1671"
6030 ]
6031 },
6032 {
@@ -6093,8 +6093,8 @@
6093 "nl": "Bevestig verwijdering van toegangsrechten voor apparaat \\\"{0}\\\"?",
6094 "zh-chs": "确认删除设备“ {0} ”的访问权限?",
6095 "xloc": [
6096 - "default.handlebars->25->1545",
6097 - "default.handlebars->25->1658"
6096 + "default.handlebars->25->1547",
6097 + "default.handlebars->25->1662"
6098 ]
6099 },
6100 {
@@ -6108,8 +6108,8 @@
6108 "nl": "Bevestig verwijdering van toegangsrechten voor apparaatgroep \\\"{0}\\\"?",
6109 "zh-chs": "是否确认删除设备组“ {0}”的访问权限?",
6110 "xloc": [
6111 - "default.handlebars->25->1547",
6112 - "default.handlebars->25->1671"
6111 + "default.handlebars->25->1549",
6112 + "default.handlebars->25->1675"
6113 ]
6114 },
6115 {
@@ -6123,7 +6123,7 @@
6123 "nl": "Bevestig verwijdering van toegangsrechten voor gebruiker \\\"{0}\\\"?",
6124 "zh-chs": "确认删除用户\\“ {0} \\”的访问权限?",
6125 "xloc": [
6126 - "default.handlebars->25->1660"
6126 + "default.handlebars->25->1664"
6127 ]
6128 },
6129 {
@@ -6137,7 +6137,7 @@
6137 "nl": "Bevestig verwijdering van toegangsrechten voor gebruikergroep \\\"{0}\\\"?",
6138 "zh-chs": "确认删除用户组“ {0}”的访问权限?",
6139 "xloc": [
6140 - "default.handlebars->25->1663"
6140 + "default.handlebars->25->1667"
6141 ]
6142 },
6143 {
@@ -6151,8 +6151,8 @@
6151 "nl": "Verwijdering van toegangsrechten bevestigen?",
6152 "zh-chs": "确认删除访问权限?",
6153 "xloc": [
6154 - "default.handlebars->25->1661",
6155 - "default.handlebars->25->1664"
6154 + "default.handlebars->25->1665",
6155 + "default.handlebars->25->1668"
6156 ]
6157 },
6158 {
@@ -6399,7 +6399,7 @@
6399 "ru": "Подключено Intel&reg; AMT",
6400 "zh-chs": "連接的英特爾&reg;AMT",
6401 "xloc": [
6402 - "default.handlebars->25->1722"
6402 + "default.handlebars->25->1726"
6403 ]
6404 },
6405 {
@@ -6416,7 +6416,7 @@
6416 "ru": "Подключенные пользователи",
6417 "zh-chs": "關聯用戶",
6418 "xloc": [
6419 - "default.handlebars->25->1727"
6419 + "default.handlebars->25->1731"
6420 ]
6421 },
6422 {
@@ -6492,7 +6492,7 @@
6492 "ru": "Подключений ",
6493 "zh-chs": "連接數",
6494 "xloc": [
6495 - "default.handlebars->25->1738"
6495 + "default.handlebars->25->1742"
6496 ]
6497 },
6498 {
@@ -6509,7 +6509,7 @@
6509 "ru": "Ретранслятор подключения",
6510 "zh-chs": "連接繼電器",
6511 "xloc": [
6512 - "default.handlebars->25->1766"
6512 + "default.handlebars->25->1770"
6513 ]
6514 },
6515 {
@@ -6636,7 +6636,7 @@
6636 "ru": "Cookie-кодировщик",
6637 "zh-chs": "Cookie編碼器",
6638 "xloc": [
6639 - "default.handlebars->25->1752"
6639 + "default.handlebars->25->1756"
6640 ]
6641 },
6642 {
@@ -6941,7 +6941,7 @@
6941 "ru": "Основной сервер",
6942 "zh-chs": "核心服務器",
6943 "xloc": [
6944 - "default.handlebars->25->1751"
6944 + "default.handlebars->25->1755"
6945 ]
6946 },
6947 {
@@ -6975,7 +6975,7 @@
6975 "ru": "Создать учетную запись",
6976 "zh-chs": "創建帳號",
6977 "xloc": [
6978 - "default.handlebars->25->1478",
6978 + "default.handlebars->25->1480",
6979 "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->createpanel->1->1->9->1->12->1->1",
6980 "login.handlebars->container->column_l->centralTable->1->0->logincell->createpanel->1->9->1->12->1->1"
6981 ]
@@ -7011,7 +7011,7 @@
7011 "ru": "Создать группу пользователей",
7012 "zh-chs": "創建用戶組",
7013 "xloc": [
7014 - "default.handlebars->25->1513"
7014 + "default.handlebars->25->1515"
7015 ]
7016 },
7017 {
@@ -7062,7 +7062,7 @@
7062 "ru": "Создайте сразу несколько учетных записей, импортировав файл JSON в следующем формате:",
7063 "zh-chs": "通過導入以下格式的JSON文件一次創建多個帳戶:",
7064 "xloc": [
7065 - "default.handlebars->25->1448"
7065 + "default.handlebars->25->1450"
7066 ]
7067 },
7068 {
@@ -7097,7 +7097,7 @@
7097 "ru": "Создано",
7098 "zh-chs": "創建",
7099 "xloc": [
7100 - "default.handlebars->25->1578"
7100 + "default.handlebars->25->1580"
7101 ]
7102 },
7103 {
@@ -7561,7 +7561,7 @@
7561 "ru": "Удалить пользователя",
7562 "zh-chs": "刪除用戶",
7563 "xloc": [
7564 - "default.handlebars->25->1615"
7564 + "default.handlebars->25->1619"
7565 ]
7566 },
7567 {
@@ -7578,8 +7578,8 @@
7578 "ru": "Удалить группу пользователей",
7579 "zh-chs": "刪除用戶組",
7580 "xloc": [
7581 - "default.handlebars->25->1543",
7582 - "default.handlebars->25->1553"
7581 + "default.handlebars->25->1545",
7582 + "default.handlebars->25->1555"
7583 ]
7584 },
7585 {
@@ -7593,7 +7593,7 @@
7593 "nl": "Gebruikersgroepen verwijderen",
7594 "zh-chs": "删除用户组",
7595 "xloc": [
7596 - "default.handlebars->25->1509"
7596 + "default.handlebars->25->1511"
7597 ]
7598 },
7599 {
@@ -7610,7 +7610,7 @@
7610 "ru": "Удалить пользователя {0}",
7611 "zh-chs": "刪除用戶{0}",
7612 "xloc": [
7613 - "default.handlebars->25->1636"
7613 + "default.handlebars->25->1640"
7614 ]
7615 },
7616 {
@@ -7660,7 +7660,7 @@
7660 "nl": "Verwijder groep",
7661 "zh-chs": "删除群组",
7662 "xloc": [
7663 - "default.handlebars->25->1505"
7663 + "default.handlebars->25->1507"
7664 ]
7665 },
7666 {
@@ -7714,7 +7714,7 @@
7714 "ru": "Удалить группу пользователей {0}?",
7715 "zh-chs": "刪除用戶組{0}?",
7716 "xloc": [
7717 - "default.handlebars->25->1551"
7717 + "default.handlebars->25->1553"
7718 ]
7719 },
7720 {
@@ -7850,10 +7850,10 @@
7850 "default.handlebars->25->1124",
7851 "default.handlebars->25->1150",
7852 "default.handlebars->25->1233",
7853 - "default.handlebars->25->1512",
7854 - "default.handlebars->25->1519",
7855 - "default.handlebars->25->1520",
7856 - "default.handlebars->25->1549",
7853 + "default.handlebars->25->1514",
7854 + "default.handlebars->25->1521",
7855 + "default.handlebars->25->1522",
7856 + "default.handlebars->25->1551",
7857 "default.handlebars->25->478",
7858 "default.handlebars->25->479",
7859 "default.handlebars->25->685",
@@ -7891,7 +7891,7 @@
7891 "zh-chs": "桌面",
7892 "xloc": [
7893 "default.handlebars->25->1238",
7894 - "default.handlebars->25->1681",
7894 + "default.handlebars->25->1685",
7895 "default.handlebars->25->445",
7896 "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevDesktop",
7897 "default.handlebars->contextMenu->cxdesktop"
@@ -7929,7 +7929,7 @@
7929 "zh-chs": "桌面通知",
7930 "xloc": [
7931 "default.handlebars->25->1160",
7932 - "default.handlebars->25->1593",
7932 + "default.handlebars->25->1595",
7933 "default.handlebars->25->514"
7934 ]
7935 },
@@ -7948,7 +7948,7 @@
7948 "zh-chs": "桌面提示",
7949 "xloc": [
7950 "default.handlebars->25->1159",
7951 - "default.handlebars->25->1592",
7951 + "default.handlebars->25->1594",
7952 "default.handlebars->25->513"
7953 ]
7954 },
@@ -7967,7 +7967,7 @@
7967 "zh-chs": "桌面提示+工具欄",
7968 "xloc": [
7969 "default.handlebars->25->1157",
7970 - "default.handlebars->25->1590",
7970 + "default.handlebars->25->1592",
7971 "default.handlebars->25->511"
7972 ]
7973 },
@@ -8000,7 +8000,7 @@
8000 "zh-chs": "桌面工具欄",
8001 "xloc": [
8002 "default.handlebars->25->1158",
8003 - "default.handlebars->25->1591",
8003 + "default.handlebars->25->1593",
8004 "default.handlebars->25->512"
8005 ]
8006 },
@@ -8072,7 +8072,7 @@
8072 "zh-chs": "設備",
8073 "xloc": [
8074 "default.handlebars->25->1260",
8075 - "default.handlebars->25->1655",
8075 + "default.handlebars->25->1659",
8076 "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->9->devListToolbarSort->sortselect->5"
8077 ]
8078 },
@@ -8111,10 +8111,10 @@
8111 "default.handlebars->25->1255",
8112 "default.handlebars->25->1258",
8113 "default.handlebars->25->1259",
8114 - "default.handlebars->25->1535",
8115 - "default.handlebars->25->1541",
8116 - "default.handlebars->25->1643",
8117 - "default.handlebars->25->1690"
8114 + "default.handlebars->25->1537",
8115 + "default.handlebars->25->1543",
8116 + "default.handlebars->25->1647",
8117 + "default.handlebars->25->1694"
8118 ]
8119 },
8120 {
@@ -8151,10 +8151,10 @@
8151 "xloc": [
8152 "default-mobile.handlebars->container->page_content->column_l->p3->p3info->1->3",
8153 "default.handlebars->25->1409",
8154 - "default.handlebars->25->1499",
8155 - "default.handlebars->25->1522",
8156 - "default.handlebars->25->1587",
8157 - "default.handlebars->25->1725",
8154 + "default.handlebars->25->1501",
8155 + "default.handlebars->25->1524",
8156 + "default.handlebars->25->1589",
8157 + "default.handlebars->25->1729",
8158 "default.handlebars->container->column_l->p2->p2info->7"
8159 ]
8160 },
@@ -8207,7 +8207,7 @@
8207 "zh-chs": "設備名稱",
8208 "xloc": [
8209 "default-mobile.handlebars->9->245",
8210 - "default.handlebars->25->1689",
8210 + "default.handlebars->25->1693",
8211 "default.handlebars->25->244",
8212 "default.handlebars->25->683",
8213 "player.handlebars->3->9"
@@ -8590,8 +8590,8 @@
8590 "nl": "Apparaten",
8591 "zh-chs": "设备",
8592 "xloc": [
8593 - "default.handlebars->25->1500",
8594 - "default.handlebars->25->1523"
8593 + "default.handlebars->25->1502",
8594 + "default.handlebars->25->1525"
8595 ]
8596 },
8597 {
@@ -9125,7 +9125,7 @@
9125 "ru": "Скачать список пользователей в одном из форматов ниже.",
9126 "zh-chs": "使用以下一種文件格式下載用戶列表。",
9127 "xloc": [
9128 - "default.handlebars->25->1456"
9128 + "default.handlebars->25->1458"
9129 ]
9130 },
9131 {
@@ -9208,7 +9208,7 @@
9208 "nl": "Dubbele agent",
9209 "zh-chs": "代理重复",
9210 "xloc": [
9211 - "default.handlebars->25->1721"
9211 + "default.handlebars->25->1725"
9212 ]
9213 },
9214 {
@@ -9242,7 +9242,7 @@
9242 "ru": "Скопировать группу пользователей",
9243 "zh-chs": "重複的用戶組",
9244 "xloc": [
9245 - "default.handlebars->25->1514"
9245 + "default.handlebars->25->1516"
9246 ]
9247 },
9248 {
@@ -9273,8 +9273,8 @@
9273 "ru": "Длительность",
9274 "zh-chs": "持續時間",
9275 "xloc": [
9276 - "default.handlebars->25->1675",
9277 - "default.handlebars->25->1695",
9276 + "default.handlebars->25->1679",
9277 + "default.handlebars->25->1699",
9278 "player.handlebars->3->2"
9279 ]
9280 },
@@ -9759,7 +9759,7 @@
9759 "ru": "Редактировать группу пользователей",
9760 "zh-chs": "編輯用戶組",
9761 "xloc": [
9762 - "default.handlebars->25->1550"
9762 + "default.handlebars->25->1552"
9763 ]
9764 },
9765 {
@@ -9808,10 +9808,11 @@
9808 "zh-chs": "電子郵件",
9809 "xloc": [
9810 "default-mobile.handlebars->9->47",
9811 - "default.handlebars->25->1468",
9812 - "default.handlebars->25->1572",
9813 - "default.handlebars->25->1573",
9814 - "default.handlebars->25->1624",
9811 + "default.handlebars->25->1470",
9812 + "default.handlebars->25->1574",
9813 + "default.handlebars->25->1575",
9814 + "default.handlebars->25->1614",
9815 + "default.handlebars->25->1628",
9816 "default.handlebars->25->292",
9817 "login-mobile.handlebars->5->42",
9818 "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->tokenpanel->1->7->1->4->1->3",
@@ -9945,7 +9946,7 @@
9946 "zh-chs": "電子郵件已驗證",
9947 "xloc": [
9948 "default.handlebars->25->1429",
9948 - "default.handlebars->25->1569"
9949 + "default.handlebars->25->1571"
9950 ]
9951 },
9952 {
@@ -9962,7 +9963,7 @@
9963 "ru": "Email подтвержден.",
9964 "zh-chs": "電子郵件已驗證。",
9965 "xloc": [
9965 - "default.handlebars->25->1474"
9966 + "default.handlebars->25->1476"
9967 ]
9968 },
9969 {
@@ -9979,7 +9980,7 @@
9980 "ru": "Email не подтвержден",
9981 "zh-chs": "電子郵件未驗證",
9982 "xloc": [
9982 - "default.handlebars->25->1570"
9983 + "default.handlebars->25->1572"
9984 ]
9985 },
9986 {
@@ -10018,7 +10019,7 @@
10019 "en": "Email verified and forced password reset required.",
10020 "nl": "E-mail geverifieerd en geforceerd opnieuw instellen van wachtwoord vereist.",
10021 "xloc": [
10021 - "default.handlebars->25->1475"
10022 + "default.handlebars->25->1477"
10023 ]
10024 },
10025 {
@@ -10031,7 +10032,7 @@
10032 "nl": "Email/SMS verkeer",
10033 "zh-chs": "电子邮件/短信流量",
10034 "xloc": [
10034 - "default.handlebars->25->1760"
10035 + "default.handlebars->25->1764"
10036 ]
10037 },
10038 {
@@ -10129,7 +10130,7 @@
10130 "en": "Enabled",
10131 "nl": "Ingeschakeld",
10132 "xloc": [
10132 - "default.handlebars->25->1697"
10133 + "default.handlebars->25->1701"
10134 ]
10135 },
10136 {
@@ -10153,7 +10154,7 @@
10154 "en": "End Time",
10155 "nl": "Eindtijd",
10156 "xloc": [
10156 - "default.handlebars->25->1694"
10157 + "default.handlebars->25->1698"
10158 ]
10159 },
10160 {
@@ -10409,7 +10410,7 @@
10410 "ru": "Введите разделенный запятыми список имен административных областей.",
10411 "zh-chs": "輸入管理領域名稱的逗號分隔列表。",
10412 "xloc": [
10412 - "default.handlebars->25->1479"
10413 + "default.handlebars->25->1481"
10414 ]
10415 },
10416 {
@@ -10716,7 +10717,7 @@
10717 "ru": "Внешний",
10718 "zh-chs": "外部",
10719 "xloc": [
10719 - "default.handlebars->25->1745"
10720 + "default.handlebars->25->1749"
10721 ]
10722 },
10723 {
@@ -10921,7 +10922,7 @@
10922 "xloc": [
10923 "default-mobile.handlebars->9->119",
10924 "default.handlebars->25->1245",
10924 - "default.handlebars->25->1682",
10925 + "default.handlebars->25->1686",
10926 "default.handlebars->25->218",
10927 "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevFiles",
10928 "default.handlebars->contextMenu->cxfiles"
@@ -10959,7 +10960,7 @@
10960 "zh-chs": "文件通知",
10961 "xloc": [
10962 "default.handlebars->25->1164",
10962 - "default.handlebars->25->1597",
10963 + "default.handlebars->25->1599",
10964 "default.handlebars->25->518"
10965 ]
10966 },
@@ -10978,7 +10979,7 @@
10979 "zh-chs": "文件提示",
10980 "xloc": [
10981 "default.handlebars->25->1163",
10981 - "default.handlebars->25->1596",
10982 + "default.handlebars->25->1598",
10983 "default.handlebars->25->517"
10984 ]
10985 },
@@ -11138,8 +11139,8 @@
11139 "ru": "Принудительно сбросить пароль при следующем входе в систему.",
11140 "zh-chs": "下次登錄時強制重置密碼。",
11141 "xloc": [
11141 - "default.handlebars->25->1473",
11142 - "default.handlebars->25->1633"
11142 + "default.handlebars->25->1475",
11143 + "default.handlebars->25->1637"
11144 ]
11145 },
11146 {
@@ -11225,8 +11226,8 @@
11226 "ru": "Свободно",
11227 "zh-chs": "自由",
11228 "xloc": [
11228 - "default.handlebars->25->1706",
11229 - "default.handlebars->25->1708"
11229 + "default.handlebars->25->1710",
11230 + "default.handlebars->25->1712"
11231 ]
11232 },
11233 {
@@ -11420,7 +11421,7 @@
11421 "default-mobile.handlebars->9->74",
11422 "default.handlebars->25->1133",
11423 "default.handlebars->25->1263",
11423 - "default.handlebars->25->1485"
11424 + "default.handlebars->25->1487"
11425 ]
11426 },
11427 {
@@ -11520,7 +11521,7 @@
11521 "ru": "Администратор с полным доступом",
11522 "zh-chs": "正式管理員",
11523 "xloc": [
11523 - "default.handlebars->25->1564"
11524 + "default.handlebars->25->1566"
11525 ]
11526 },
11527 {
@@ -11950,7 +11951,7 @@
11951 "zh-chs": "集體行動",
11952 "xloc": [
11953 "default.handlebars->25->1441",
11953 - "default.handlebars->25->1506",
11954 + "default.handlebars->25->1508",
11955 "default.handlebars->25->406",
11956 "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->devListToolbar",
11957 "default.handlebars->container->column_l->p4->3->1->0->3->3",
@@ -11971,7 +11972,7 @@
11972 "ru": "Члены группы",
11973 "zh-chs": "小組成員",
11974 "xloc": [
11974 - "default.handlebars->25->1527"
11975 + "default.handlebars->25->1529"
11976 ]
11977 },
11978 {
@@ -12143,7 +12144,7 @@
12144 "ru": "Всего кучи",
12145 "zh-chs": "堆總數",
12146 "xloc": [
12146 - "default.handlebars->25->1747"
12147 + "default.handlebars->25->1751"
12148 ]
12149 },
12150 {
@@ -12160,7 +12161,7 @@
12161 "ru": "Куча используется",
12162 "zh-chs": "堆使用",
12163 "xloc": [
12163 - "default.handlebars->25->1746"
12164 + "default.handlebars->25->1750"
12165 ]
12166 },
12167 {
@@ -12946,8 +12947,8 @@
12947 "xloc": [
12948 "default.handlebars->25->1347",
12949 "default.handlebars->25->1355",
12949 - "default.handlebars->25->1743",
12950 - "default.handlebars->25->1765"
12950 + "default.handlebars->25->1747",
12951 + "default.handlebars->25->1769"
12952 ]
12953 },
12954 {
@@ -12988,14 +12989,14 @@
12989 "en": "Intel AMT Redirection",
12990 "nl": "Intel AMT omleiding",
12991 "xloc": [
12991 - "default.handlebars->25->1684"
12992 + "default.handlebars->25->1688"
12993 ]
12994 },
12995 {
12996 "en": "Intel AMT WSMAN",
12997 "nl": "Intel AMT WSMAN",
12998 "xloc": [
12998 - "default.handlebars->25->1683"
12999 + "default.handlebars->25->1687"
13000 ]
13001 },
13002 {
@@ -13679,7 +13680,7 @@
13680 "ru": "Некорректный тип группы устройств",
13681 "zh-chs": "無效的設備組類型",
13682 "xloc": [
13682 - "default.handlebars->25->1720"
13683 + "default.handlebars->25->1724"
13684 ]
13685 },
13686 {
@@ -13696,7 +13697,7 @@
13697 "ru": "Некорректный JSON",
13698 "zh-chs": "無效的JSON",
13699 "xloc": [
13699 - "default.handlebars->25->1714"
13700 + "default.handlebars->25->1718"
13701 ]
13702 },
13703 {
@@ -13713,8 +13714,8 @@
13714 "ru": "Некорректный формат файла JSON.",
13715 "zh-chs": "無效的JSON文件格式。",
13716 "xloc": [
13716 - "default.handlebars->25->1453",
13717 - "default.handlebars->25->1455"
13717 + "default.handlebars->25->1455",
13718 + "default.handlebars->25->1457"
13719 ]
13720 },
13721 {
@@ -13731,7 +13732,7 @@
13732 "ru": "Некорректный файл JSON: {0}.",
13733 "zh-chs": "無效的JSON文件:{0}。",
13734 "xloc": [
13734 - "default.handlebars->25->1451"
13735 + "default.handlebars->25->1453"
13736 ]
13737 },
13738 {
@@ -13748,7 +13749,7 @@
13749 "ru": "Некорректная сигнатура PKCS",
13750 "zh-chs": "無效的PKCS簽名",
13751 "xloc": [
13751 - "default.handlebars->25->1712"
13752 + "default.handlebars->25->1716"
13753 ]
13754 },
13755 {
@@ -13765,7 +13766,7 @@
13766 "ru": "Некорректная сигнатура RSA",
13767 "zh-chs": "無效的RSA密碼",
13768 "xloc": [
13768 - "default.handlebars->25->1713"
13769 + "default.handlebars->25->1717"
13770 ]
13771 },
13772 {
@@ -14075,7 +14076,7 @@
14076 "zh-chs": "JSON格式",
14077 "xloc": [
14078 "default.handlebars->25->1402",
14078 - "default.handlebars->25->1459",
14079 + "default.handlebars->25->1461",
14080 "default.handlebars->25->414"
14081 ]
14082 },
@@ -14591,7 +14592,7 @@
14592 "ru": "Последний вход в систему",
14593 "zh-chs": "上次登錄",
14594 "xloc": [
14594 - "default.handlebars->25->1579"
14595 + "default.handlebars->25->1581"
14596 ]
14597 },
14598 {
@@ -14649,7 +14650,7 @@
14650 "ru": "Последнее изменение: {0}",
14651 "zh-chs": "上次更改:{0}",
14652 "xloc": [
14652 - "default.handlebars->25->1583"
14653 + "default.handlebars->25->1585"
14654 ]
14655 },
14656 {
@@ -14816,7 +14817,7 @@
14817 "nl": "Leeg laten voor geen.",
14818 "zh-chs": "一无所有。",
14819 "xloc": [
14819 - "default.handlebars->25->1621"
14820 + "default.handlebars->25->1625"
14821 ]
14822 },
14823 {
@@ -14855,7 +14856,7 @@
14856 "ru": "Меньше",
14857 "zh-chs": "減",
14858 "xloc": [
14858 - "default.handlebars->25->1782"
14859 + "default.handlebars->25->1786"
14860 ]
14861 },
14862 {
@@ -15400,7 +15401,7 @@
15401 "ru": "Заблокировать учетную запись",
15402 "zh-chs": "鎖定賬戶",
15403 "xloc": [
15403 - "default.handlebars->25->1492"
15404 + "default.handlebars->25->1494"
15405 ]
15406 },
15407 {
@@ -15451,7 +15452,7 @@
15452 "ru": "Заблокированная учетная запись",
15453 "zh-chs": "賬戶鎖定",
15454 "xloc": [
15454 - "default.handlebars->25->1561"
15455 + "default.handlebars->25->1563"
15456 ]
15457 },
15458 {
@@ -15952,7 +15953,7 @@
15953 "ru": "Сообщения главного сервера",
15954 "zh-chs": "主服務器消息",
15955 "xloc": [
15955 - "default.handlebars->25->1754"
15956 + "default.handlebars->25->1758"
15957 ]
15958 },
15959 {
@@ -16084,7 +16085,7 @@
16085 "en": "Manage Recordings",
16086 "nl": "Beheeer opnames",
16087 "xloc": [
16087 - "default.handlebars->25->1491"
16088 + "default.handlebars->25->1493"
16089 ]
16090 },
16091 {
@@ -16118,7 +16119,7 @@
16119 "ru": "Управление группами пользователя",
16120 "zh-chs": "管理用戶組",
16121 "xloc": [
16121 - "default.handlebars->25->1490"
16122 + "default.handlebars->25->1492"
16123 ]
16124 },
16125 {
@@ -16135,7 +16136,7 @@
16136 "ru": "Управление пользователями",
16137 "zh-chs": "管理用戶",
16138 "xloc": [
16138 - "default.handlebars->25->1489",
16139 + "default.handlebars->25->1491",
16140 "default.handlebars->25->596"
16141 ]
16142 },
@@ -16378,7 +16379,7 @@
16379 "ru": "Достигнуто максимальное число сессий",
16380 "zh-chs": "達到的會話數上限",
16381 "xloc": [
16381 - "default.handlebars->25->1718"
16382 + "default.handlebars->25->1722"
16383 ]
16384 },
16385 {
@@ -16432,7 +16433,7 @@
16433 "ru": "Мегабайт",
16434 "zh-chs": "兆字節",
16435 "xloc": [
16435 - "default.handlebars->25->1744"
16436 + "default.handlebars->25->1748"
16437 ]
16438 },
16439 {
@@ -16449,7 +16450,7 @@
16450 "ru": "ОЗУ",
16451 "zh-chs": "記憶",
16452 "xloc": [
16452 - "default.handlebars->25->1735",
16453 + "default.handlebars->25->1739",
16454 "default.handlebars->25->839",
16455 "default.handlebars->container->column_l->p40->3->1->p40type->3"
16456 ]
@@ -16585,7 +16586,7 @@
16586 "ru": "Трафик MeshAgent",
16587 "zh-chs": "MeshAgent流量",
16588 "xloc": [
16588 - "default.handlebars->25->1756"
16589 + "default.handlebars->25->1760"
16590 ]
16591 },
16592 {
@@ -16602,7 +16603,7 @@
16603 "ru": "Обновление MeshAgent",
16604 "zh-chs": "MeshAgent更新",
16605 "xloc": [
16605 - "default.handlebars->25->1757"
16606 + "default.handlebars->25->1761"
16607 ]
16608 },
16609 {
@@ -16705,7 +16706,7 @@
16706 "ru": "Соединения сервера MeshCentral",
16707 "zh-chs": "MeshCentral服務器對等",
16708 "xloc": [
16708 - "default.handlebars->25->1755"
16709 + "default.handlebars->25->1759"
16710 ]
16711 },
16712 {
@@ -16968,7 +16969,7 @@
16969 "ru": "Диспетчер сообщения",
16970 "zh-chs": "郵件調度程序",
16971 "xloc": [
16971 - "default.handlebars->25->1753"
16972 + "default.handlebars->25->1757"
16973 ]
16974 },
16975 {
@@ -17116,7 +17117,7 @@
17117 "ru": "Еще",
17118 "zh-chs": "更多",
17119 "xloc": [
17119 - "default.handlebars->25->1781"
17120 + "default.handlebars->25->1785"
17121 ]
17122 },
17123 {
@@ -17191,7 +17192,7 @@
17192 "en": "Multiplexor",
17193 "nl": "Multiplexor",
17194 "xloc": [
17194 - "default.handlebars->25->1696"
17195 + "default.handlebars->25->1700"
17196 ]
17197 },
17198 {
@@ -17461,11 +17462,11 @@
17462 "default.handlebars->25->1149",
17463 "default.handlebars->25->1232",
17464 "default.handlebars->25->1408",
17464 - "default.handlebars->25->1497",
17465 - "default.handlebars->25->1511",
17466 - "default.handlebars->25->1518",
17467 - "default.handlebars->25->1548",
17468 - "default.handlebars->25->1567",
17465 + "default.handlebars->25->1499",
17466 + "default.handlebars->25->1513",
17467 + "default.handlebars->25->1520",
17468 + "default.handlebars->25->1550",
17469 + "default.handlebars->25->1569",
17470 "default.handlebars->25->468",
17471 "default.handlebars->25->714",
17472 "default.handlebars->25->77",
@@ -17507,7 +17508,7 @@
17508 "ru": "Имя1, Имя2, Имя3",
17509 "zh-chs": "名稱1,名稱2,名稱3",
17510 "xloc": [
17510 - "default.handlebars->25->1481"
17511 + "default.handlebars->25->1483"
17512 ]
17513 },
17514 {
@@ -17860,7 +17861,7 @@
17861 "zh-chs": "找不到活動",
17862 "xloc": [
17863 "default.handlebars->25->1398",
17863 - "default.handlebars->25->1672",
17864 + "default.handlebars->25->1676",
17865 "default.handlebars->25->785"
17866 ]
17867 },
@@ -18004,7 +18005,7 @@
18005 "ru": "Нет членов",
18006 "zh-chs": "沒有會員",
18007 "xloc": [
18007 - "default.handlebars->25->1530"
18008 + "default.handlebars->25->1532"
18009 ]
18010 },
18011 {
@@ -18021,7 +18022,7 @@
18022 "ru": "Запретить создание групп устройств",
18023 "zh-chs": "沒有新的設備組",
18024 "xloc": [
18024 - "default.handlebars->25->1493"
18025 + "default.handlebars->25->1495"
18026 ]
18027 },
18028 {
@@ -18137,7 +18138,7 @@
18138 "ru": "Нет инструментов (MeshCmd/Router)",
18139 "zh-chs": "沒有工具(MeshCmd /路由器)",
18140 "xloc": [
18140 - "default.handlebars->25->1494"
18141 + "default.handlebars->25->1496"
18142 ]
18143 },
18144 {
@@ -18154,8 +18155,8 @@
18155 "ru": "Нет общих групп устройств",
18156 "zh-chs": "沒有共同的設備組",
18157 "xloc": [
18157 - "default.handlebars->25->1536",
18158 - "default.handlebars->25->1644"
18158 + "default.handlebars->25->1538",
18159 + "default.handlebars->25->1648"
18160 ]
18161 },
18162 {
@@ -18251,8 +18252,8 @@
18252 "ru": "Нет общих устройств",
18253 "zh-chs": "沒有共同的設備",
18254 "xloc": [
18254 - "default.handlebars->25->1542",
18255 - "default.handlebars->25->1656"
18255 + "default.handlebars->25->1544",
18256 + "default.handlebars->25->1660"
18257 ]
18258 },
18259 {
@@ -18338,7 +18339,7 @@
18339 "ru": "Группы не найдены.",
18340 "zh-chs": "找不到群組。",
18341 "xloc": [
18341 - "default.handlebars->25->1496"
18342 + "default.handlebars->25->1498"
18343 ]
18344 },
18345 {
@@ -18440,7 +18441,7 @@
18441 "ru": "Нет серверных прав",
18442 "zh-chs": "沒有服務器權限",
18443 "xloc": [
18443 - "default.handlebars->25->1562"
18444 + "default.handlebars->25->1564"
18445 ]
18446 },
18447 {
@@ -18457,7 +18458,7 @@
18458 "ru": "Нет членства в группах пользователей",
18459 "zh-chs": "沒有用戶組成員身份",
18460 "xloc": [
18460 - "default.handlebars->25->1650"
18461 + "default.handlebars->25->1654"
18462 ]
18463 },
18464 {
@@ -18559,13 +18560,13 @@
18560 "default.handlebars->25->1174",
18561 "default.handlebars->25->1349",
18562 "default.handlebars->25->1368",
18562 - "default.handlebars->25->1515",
18563 "default.handlebars->25->1517",
18564 - "default.handlebars->25->1575",
18564 + "default.handlebars->25->1519",
18565 + "default.handlebars->25->1577",
18566 "default.handlebars->25->158",
18566 - "default.handlebars->25->1584",
18567 - "default.handlebars->25->1588",
18568 - "default.handlebars->25->1600",
18567 + "default.handlebars->25->1586",
18568 + "default.handlebars->25->1590",
18569 + "default.handlebars->25->1602",
18570 "default.handlebars->25->174",
18571 "default.handlebars->25->175",
18572 "default.handlebars->25->465",
@@ -18722,7 +18723,7 @@
18723 "en": "Not on server",
18724 "nl": "Niet op de server",
18725 "xloc": [
18725 - "default.handlebars->25->1688"
18726 + "default.handlebars->25->1692"
18727 ]
18728 },
18729 {
@@ -18739,7 +18740,7 @@
18740 "ru": "Не задано",
18741 "zh-chs": "沒有設置",
18742 "xloc": [
18742 - "default.handlebars->25->1568"
18743 + "default.handlebars->25->1570"
18744 ]
18745 },
18746 {
@@ -18756,7 +18757,7 @@
18757 "ru": "не подтверждено",
18758 "zh-chs": "未經審核的",
18759 "xloc": [
18759 - "default.handlebars->25->1626"
18760 + "default.handlebars->25->1630"
18761 ]
18762 },
18763 {
@@ -18774,7 +18775,7 @@
18775 "zh-chs": "筆記",
18776 "xloc": [
18777 "default.handlebars->25->1182",
18777 - "default.handlebars->25->1608",
18778 + "default.handlebars->25->1610",
18779 "default.handlebars->25->537",
18780 "default.handlebars->25->589",
18781 "default.handlebars->25->608",
@@ -18882,7 +18883,7 @@
18883 "ru": "Уведомить",
18884 "zh-chs": "通知",
18885 "xloc": [
18885 - "default.handlebars->25->1612"
18886 + "default.handlebars->25->1616"
18887 ]
18888 },
18889 {
@@ -18918,7 +18919,7 @@
18919 "ru": "Уведомить {0}",
18920 "zh-chs": "通知{0}",
18921 "xloc": [
18921 - "default.handlebars->25->1446"
18922 + "default.handlebars->25->1448"
18923 ]
18924 },
18925 {
@@ -18995,7 +18996,7 @@
18996 "ru": "Произошло в {0}",
18997 "zh-chs": "發生在{0}",
18998 "xloc": [
18998 - "default.handlebars->25->1702"
18999 + "default.handlebars->25->1706"
19000 ]
19001 },
19002 {
@@ -19238,7 +19239,7 @@
19239 "xloc": [
19240 "default-mobile.handlebars->9->233",
19241 "default.handlebars->25->1437",
19241 - "default.handlebars->25->1504",
19242 + "default.handlebars->25->1506",
19243 "default.handlebars->25->398",
19244 "default.handlebars->25->626"
19245 ]
@@ -19476,7 +19477,7 @@
19477 "ru": "Частичные права",
19478 "zh-chs": "部分權利",
19479 "xloc": [
19479 - "default.handlebars->25->1565"
19480 + "default.handlebars->25->1567"
19481 ]
19482 },
19483 {
@@ -19511,12 +19512,12 @@
19512 "zh-chs": "密碼",
19513 "xloc": [
19514 "default-mobile.handlebars->9->236",
19514 - "default.handlebars->25->1469",
19515 - "default.handlebars->25->1470",
19516 - "default.handlebars->25->1580",
19515 + "default.handlebars->25->1471",
19516 + "default.handlebars->25->1472",
19517 "default.handlebars->25->1582",
19518 - "default.handlebars->25->1629",
19519 - "default.handlebars->25->1630",
19518 + "default.handlebars->25->1584",
19519 + "default.handlebars->25->1633",
19520 + "default.handlebars->25->1634",
19521 "default.handlebars->25->249",
19522 "default.handlebars->25->278",
19523 "default.handlebars->25->632"
@@ -19625,7 +19626,7 @@
19626 "ru": "Подсказка пароля",
19627 "zh-chs": "密碼提示",
19628 "xloc": [
19628 - "default.handlebars->25->1631"
19629 + "default.handlebars->25->1635"
19630 ]
19631 },
19632 {
@@ -19947,7 +19948,7 @@
19948 "default-mobile.handlebars->9->34",
19949 "default-mobile.handlebars->9->36",
19950 "default.handlebars->25->143",
19950 - "default.handlebars->25->1623",
19951 + "default.handlebars->25->1627",
19952 "default.handlebars->25->865",
19953 "default.handlebars->25->868"
19954 ]
@@ -19962,7 +19963,7 @@
19963 "nl": "Telefoonnummer",
19964 "zh-chs": "电话号码",
19965 "xloc": [
19965 - "default.handlebars->25->1574"
19966 + "default.handlebars->25->1576"
19967 ]
19968 },
19969 {
@@ -19976,7 +19977,7 @@
19977 "zh-chs": "电话号码:",
19978 "xloc": [
19979 "default-mobile.handlebars->9->35",
19979 - "default.handlebars->25->1622",
19980 + "default.handlebars->25->1626",
19981 "default.handlebars->25->867"
19982 ]
19983 },
@@ -20113,7 +20114,7 @@
20114 "zh-chs": "插件動作",
20115 "xloc": [
20116 "default.handlebars->25->169",
20116 - "default.handlebars->25->1778"
20117 + "default.handlebars->25->1782"
20118 ]
20119 },
20120 {
@@ -20424,7 +20425,7 @@
20425 "en": "Present on server",
20426 "nl": "Aanwezig op de server",
20427 "xloc": [
20427 - "default.handlebars->25->1687"
20428 + "default.handlebars->25->1691"
20429 ]
20430 },
20431 {
@@ -20531,7 +20532,7 @@
20532 "ru": "Протокол",
20533 "zh-chs": "協議",
20534 "xloc": [
20534 - "default.handlebars->25->1685",
20535 + "default.handlebars->25->1689",
20536 "player.handlebars->3->15"
20537 ]
20538 },
@@ -20838,7 +20839,7 @@
20839 "ru": "RSS",
20840 "zh-chs": "的RSS",
20841 "xloc": [
20841 - "default.handlebars->25->1748"
20842 + "default.handlebars->25->1752"
20843 ]
20844 },
20845 {
@@ -20855,7 +20856,7 @@
20856 "ru": "Случайный пароль.",
20857 "zh-chs": "隨機化密碼。",
20858 "xloc": [
20858 - "default.handlebars->25->1471"
20859 + "default.handlebars->25->1473"
20860 ]
20861 },
20862 {
@@ -20906,7 +20907,7 @@
20907 "ru": "Области",
20908 "zh-chs": "境界",
20909 "xloc": [
20909 - "default.handlebars->25->1480"
20910 + "default.handlebars->25->1482"
20911 ]
20912 },
20913 {
@@ -20933,7 +20934,7 @@
20934 "en": "Recording Details",
20935 "nl": "Opname details",
20936 "xloc": [
20936 - "default.handlebars->25->1699"
20937 + "default.handlebars->25->1703"
20938 ]
20939 },
20940 {
@@ -21057,7 +21058,7 @@
21058 "ru": "Число ретрансляций",
21059 "zh-chs": "中繼計數",
21060 "xloc": [
21060 - "default.handlebars->25->1730"
21061 + "default.handlebars->25->1734"
21062 ]
21063 },
21064 {
@@ -21074,7 +21075,7 @@
21075 "ru": "Ошибки ретранслятора",
21076 "zh-chs": "中繼錯誤",
21077 "xloc": [
21077 - "default.handlebars->25->1723"
21078 + "default.handlebars->25->1727"
21079 ]
21080 },
21081 {
@@ -21091,8 +21092,8 @@
21092 "ru": "Сессии ретранслятора",
21093 "zh-chs": "接力會議",
21094 "xloc": [
21094 - "default.handlebars->25->1729",
21095 - "default.handlebars->25->1742"
21095 + "default.handlebars->25->1733",
21096 + "default.handlebars->25->1746"
21097 ]
21098 },
21099 {
@@ -21412,8 +21413,8 @@
21413 "nl": "Apparaatgroepmachtigingen verwijderen",
21414 "zh-chs": "删除设备组权限",
21415 "xloc": [
21415 - "default.handlebars->25->1546",
21416 - "default.handlebars->25->1670"
21416 + "default.handlebars->25->1548",
21417 + "default.handlebars->25->1674"
21418 ]
21419 },
21420 {
@@ -21427,8 +21428,8 @@
21428 "nl": "Apparaatmachtigingen verwijderen",
21429 "zh-chs": "删除设备权限",
21430 "xloc": [
21430 - "default.handlebars->25->1544",
21431 - "default.handlebars->25->1657"
21431 + "default.handlebars->25->1546",
21432 + "default.handlebars->25->1661"
21433 ]
21434 },
21435 {
@@ -21456,7 +21457,7 @@
21457 "nl": "Lidmaatschap van gebruikersgroep verwijderen",
21458 "zh-chs": "删除用户组成员身份",
21459 "xloc": [
21459 - "default.handlebars->25->1666"
21460 + "default.handlebars->25->1670"
21461 ]
21462 },
21463 {
@@ -21471,7 +21472,7 @@
21472 "zh-chs": "删除用户组权限",
21473 "xloc": [
21474 "default.handlebars->25->1323",
21474 - "default.handlebars->25->1662"
21475 + "default.handlebars->25->1666"
21476 ]
21477 },
21478 {
@@ -21485,7 +21486,7 @@
21486 "nl": "Gebruikerslidmaatschap verwijderen",
21487 "zh-chs": "删除用户成员资格",
21488 "xloc": [
21488 - "default.handlebars->25->1554"
21489 + "default.handlebars->25->1556"
21490 ]
21491 },
21492 {
@@ -21500,7 +21501,7 @@
21501 "zh-chs": "删除用户权限",
21502 "xloc": [
21503 "default.handlebars->25->1321",
21503 - "default.handlebars->25->1659"
21504 + "default.handlebars->25->1663"
21505 ]
21506 },
21507 {
@@ -21517,7 +21518,7 @@
21518 "ru": "Удалить все двухфакторные аутентификации.",
21519 "zh-chs": "刪除所有第二因素驗證。",
21520 "xloc": [
21520 - "default.handlebars->25->1634"
21521 + "default.handlebars->25->1638"
21522 ]
21523 },
21524 {
@@ -21534,7 +21535,7 @@
21535 "ru": "Удалить все прошлые события для этого userid.",
21536 "zh-chs": "刪除此用戶標識的所有先前事件。",
21537 "xloc": [
21537 - "default.handlebars->25->1472"
21538 + "default.handlebars->25->1474"
21539 ]
21540 },
21541 {
@@ -21615,7 +21616,7 @@
21616 "ru": "Удалить этого пользователя",
21617 "zh-chs": "删除该用户",
21618 "xloc": [
21618 - "default.handlebars->25->1614"
21619 + "default.handlebars->25->1618"
21620 ]
21621 },
21622 {
@@ -21632,7 +21633,7 @@
21633 "ru": "Удалить членство пользователя в группе",
21634 "zh-chs": "刪除用戶組成員身份",
21635 "xloc": [
21635 - "default.handlebars->25->1648"
21636 + "default.handlebars->25->1652"
21637 ]
21638 },
21639 {
@@ -21646,7 +21647,7 @@
21647 "nl": "Gebruikersrechten voor dit apparaat verwijderen",
21648 "zh-chs": "删除此设备的用户组权限",
21649 "xloc": [
21649 - "default.handlebars->25->1540"
21650 + "default.handlebars->25->1542"
21651 ]
21652 },
21653 {
@@ -21663,7 +21664,7 @@
21664 "ru": "Удалить права группы пользователей для этой группы устройств",
21665 "zh-chs": "刪除該設備組的用戶組權限",
21666 "xloc": [
21666 - "default.handlebars->25->1534",
21667 + "default.handlebars->25->1536",
21668 "default.handlebars->25->573"
21669 ]
21670 },
@@ -21682,9 +21683,9 @@
21683 "zh-chs": "刪除此設備組的用戶權限",
21684 "xloc": [
21685 "default.handlebars->25->1199",
21685 - "default.handlebars->25->1528",
21686 - "default.handlebars->25->1642",
21687 - "default.handlebars->25->1654",
21686 + "default.handlebars->25->1530",
21687 + "default.handlebars->25->1646",
21688 + "default.handlebars->25->1658",
21689 "default.handlebars->25->574"
21690 ]
21691 },
@@ -21746,8 +21747,8 @@
21747 "zh-chs": "要求:{0}。",
21748 "xloc": [
21749 "default-mobile.handlebars->9->58",
21749 - "default.handlebars->25->1477",
21750 - "default.handlebars->25->1632"
21750 + "default.handlebars->25->1479",
21751 + "default.handlebars->25->1636"
21752 ]
21753 },
21754 {
@@ -21989,7 +21990,7 @@
21990 "ru": "Ограничения",
21991 "zh-chs": "限制條件",
21992 "xloc": [
21992 - "default.handlebars->25->1566"
21993 + "default.handlebars->25->1568"
21994 ]
21995 },
21996 {
@@ -22212,8 +22213,8 @@
22213 "nl": "SMS",
22214 "zh-chs": "短信",
22215 "xloc": [
22215 - "default.handlebars->25->1605",
22216 - "default.handlebars->25->1610",
22216 + "default.handlebars->25->1607",
22217 + "default.handlebars->25->1612",
22218 "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->tokenpanel->1->7->1->4->1->3",
22219 "login.handlebars->container->column_l->centralTable->1->0->logincell->tokenpanel->1->7->1->4->1->3"
22220 ]
@@ -22228,7 +22229,7 @@
22229 "nl": "SMS geschikt telefoonnummer voor deze gebruiker.",
22230 "zh-chs": "此用户的短信功能电话号码。",
22231 "xloc": [
22231 - "default.handlebars->25->1620"
22232 + "default.handlebars->25->1624"
22233 ]
22234 },
22235 {
@@ -22630,7 +22631,7 @@
22631 "zh-chs": "安全",
22632 "xloc": [
22633 "default-mobile.handlebars->9->237",
22633 - "default.handlebars->25->1606",
22634 + "default.handlebars->25->1608",
22635 "default.handlebars->25->250",
22636 "default.handlebars->25->633",
22637 "default.handlebars->25->818"
@@ -22650,7 +22651,7 @@
22651 "ru": "Ключ безопасности",
22652 "zh-chs": "安全密鑰",
22653 "xloc": [
22653 - "default.handlebars->25->1603"
22654 + "default.handlebars->25->1605"
22655 ]
22656 },
22657 {
@@ -22686,7 +22687,7 @@
22687 "xloc": [
22688 "default.handlebars->25->1378",
22689 "default.handlebars->25->1435",
22689 - "default.handlebars->25->1502",
22690 + "default.handlebars->25->1504",
22691 "default.handlebars->25->394",
22692 "default.handlebars->25->748",
22693 "default.handlebars->25->750",
@@ -22714,7 +22715,7 @@
22715 "xloc": [
22716 "default.handlebars->25->1377",
22717 "default.handlebars->25->1434",
22717 - "default.handlebars->25->1501",
22718 + "default.handlebars->25->1503",
22719 "default.handlebars->25->393",
22720 "default.handlebars->25->749",
22721 "default.handlebars->meshContextMenu->cxselectnone"
@@ -22800,7 +22801,7 @@
22801 "zh-chs": "选择要对所有选定用户执行的操作。",
22802 "xloc": [
22803 "default.handlebars->25->1436",
22803 - "default.handlebars->25->1503"
22804 + "default.handlebars->25->1505"
22805 ]
22806 },
22807 {
@@ -22876,6 +22877,12 @@
22877 "messenger.handlebars->xbottom"
22878 ]
22879 },
22880 + {
22881 + "en": "Send Email",
22882 + "xloc": [
22883 + "default.handlebars->25->1447"
22884 + ]
22885 + },
22886 {
22887 "cs": "Poslat MQTT zprávu",
22888 "de": "Sende MQTT-Nachricht",
@@ -22934,7 +22941,13 @@
22941 "nl": "Stuur een SMS bericht naar deze gebruiker",
22942 "zh-chs": "发送短信给该用户",
22943 "xloc": [
22937 - "default.handlebars->25->1611"
22944 + "default.handlebars->25->1613"
22945 + ]
22946 + },
22947 + {
22948 + "en": "Send a email message to this user",
22949 + "xloc": [
22950 + "default.handlebars->25->1615"
22951 ]
22952 },
22953 {
@@ -22951,7 +22964,7 @@
22964 "ru": "Отправить уведомление всем пользователям этой группы.",
22965 "zh-chs": "向該組中的所有用戶發送通知。",
22966 "xloc": [
22954 - "default.handlebars->25->1525"
22967 + "default.handlebars->25->1527"
22968 ]
22969 },
22970 {
@@ -22968,7 +22981,7 @@
22981 "ru": "Отправить текстовое уведомление этому пользователю.",
22982 "zh-chs": "向該用戶發送文本通知。",
22983 "xloc": [
22971 - "default.handlebars->25->1447"
22984 + "default.handlebars->25->1449"
22985 ]
22986 },
22987 {
@@ -23018,7 +23031,7 @@
23031 "ru": "Отправить приглашение по email.",
23032 "zh-chs": "發送邀請電子郵件。",
23033 "xloc": [
23021 - "default.handlebars->25->1476"
23034 + "default.handlebars->25->1478"
23035 ]
23036 },
23037 {
@@ -23084,7 +23097,7 @@
23097 "ru": "Отправить уведомление пользователю",
23098 "zh-chs": "發送用戶通知",
23099 "xloc": [
23087 - "default.handlebars->25->1613"
23100 + "default.handlebars->25->1617"
23101 ]
23102 },
23103 {
@@ -23135,7 +23148,7 @@
23148 "ru": "Резервное копирование сервера",
23149 "zh-chs": "服務器備份",
23150 "xloc": [
23138 - "default.handlebars->25->1486"
23151 + "default.handlebars->25->1488"
23152 ]
23153 },
23154 {
@@ -23152,7 +23165,7 @@
23165 "ru": "Сертификат сервера",
23166 "zh-chs": "服務器證書",
23167 "xloc": [
23155 - "default.handlebars->25->1758"
23168 + "default.handlebars->25->1762"
23169 ]
23170 },
23171 {
@@ -23169,7 +23182,7 @@
23182 "ru": "База данных сервера",
23183 "zh-chs": "服務器數據庫",
23184 "xloc": [
23172 - "default.handlebars->25->1759"
23185 + "default.handlebars->25->1763"
23186 ]
23187 },
23188 {
@@ -23190,7 +23203,7 @@
23203 "default-mobile.handlebars->9->335",
23204 "default.handlebars->25->1275",
23205 "default.handlebars->25->1303",
23193 - "default.handlebars->25->1483",
23206 + "default.handlebars->25->1485",
23207 "default.handlebars->25->587",
23208 "default.handlebars->25->606"
23209 ]
@@ -23210,7 +23223,7 @@
23223 "zh-chs": "服務器權限",
23224 "xloc": [
23225 "default.handlebars->25->1422",
23213 - "default.handlebars->25->1495"
23226 + "default.handlebars->25->1497"
23227 ]
23228 },
23229 {
@@ -23227,7 +23240,7 @@
23240 "ru": "Квота сервера",
23241 "zh-chs": "服務器配額",
23242 "xloc": [
23230 - "default.handlebars->25->1577"
23243 + "default.handlebars->25->1579"
23244 ]
23245 },
23246 {
@@ -23244,7 +23257,7 @@
23257 "ru": "Восстановление сервера",
23258 "zh-chs": "服務器還原",
23259 "xloc": [
23247 - "default.handlebars->25->1487"
23260 + "default.handlebars->25->1489"
23261 ]
23262 },
23263 {
@@ -23261,7 +23274,7 @@
23274 "ru": "Права",
23275 "zh-chs": "服務器權限",
23276 "xloc": [
23264 - "default.handlebars->25->1576"
23277 + "default.handlebars->25->1578"
23278 ]
23279 },
23280 {
@@ -23278,7 +23291,7 @@
23291 "ru": "Состояние сервера",
23292 "zh-chs": "服務器狀態",
23293 "xloc": [
23281 - "default.handlebars->25->1709"
23294 + "default.handlebars->25->1713"
23295 ]
23296 },
23297 {
@@ -23312,7 +23325,7 @@
23325 "ru": "Трассировка сервера",
23326 "zh-chs": "服務器跟踪",
23327 "xloc": [
23315 - "default.handlebars->25->1769"
23328 + "default.handlebars->25->1773"
23329 ]
23330 },
23331 {
@@ -23329,7 +23342,7 @@
23342 "ru": "Обновление сервера",
23343 "zh-chs": "服務器更新",
23344 "xloc": [
23332 - "default.handlebars->25->1488"
23345 + "default.handlebars->25->1490"
23346 ]
23347 },
23348 {
@@ -23451,7 +23464,7 @@
23464 "ru": "ServerStats.csv",
23465 "zh-chs": "ServerStats.csv",
23466 "xloc": [
23454 - "default.handlebars->25->1750"
23467 + "default.handlebars->25->1754"
23468 ]
23469 },
23470 {
@@ -23492,7 +23505,7 @@
23505 "en": "Session",
23506 "nl": "Sessie",
23507 "xloc": [
23495 - "default.handlebars->25->1673"
23508 + "default.handlebars->25->1677"
23509 ]
23510 },
23511 {
@@ -23967,8 +23980,8 @@
23980 "ru": "Размер",
23981 "zh-chs": "尺寸",
23982 "xloc": [
23970 - "default.handlebars->25->1676",
23971 - "default.handlebars->25->1691",
23983 + "default.handlebars->25->1680",
23984 + "default.handlebars->25->1695",
23985 "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->9->devListToolbarSize"
23986 ]
23987 },
@@ -24779,8 +24792,8 @@
24792 "en": "Start Time",
24793 "nl": "Start tijd",
24794 "xloc": [
24782 - "default.handlebars->25->1674",
24783 - "default.handlebars->25->1693",
24795 + "default.handlebars->25->1678",
24796 + "default.handlebars->25->1697",
24797 "default.handlebars->25->697"
24798 ]
24799 },
@@ -24833,8 +24846,8 @@
24846 "ru": "Статус",
24847 "zh-chs": "狀態",
24848 "xloc": [
24836 - "default.handlebars->25->1625",
24837 - "default.handlebars->25->1686",
24849 + "default.handlebars->25->1629",
24850 + "default.handlebars->25->1690",
24851 "default.handlebars->container->column_l->p42->p42tbl->1->0->7"
24852 ]
24853 },
@@ -24973,6 +24986,12 @@
24986 "login.handlebars->5->32"
24987 ]
24988 },
24989 + {
24990 + "en": "Subject",
24991 + "xloc": [
24992 + "default.handlebars->25->1446"
24993 + ]
24994 + },
24995 {
24996 "cs": "Předložit",
24997 "de": "einreichen",
@@ -25377,7 +25396,7 @@
25396 "xloc": [
25397 "default-mobile.handlebars->9->116",
25398 "default.handlebars->25->1242",
25380 - "default.handlebars->25->1680",
25399 + "default.handlebars->25->1684",
25400 "default.handlebars->25->215",
25401 "default.handlebars->25->446",
25402 "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevTerminal",
@@ -25416,7 +25435,7 @@
25435 "zh-chs": "終端通知",
25436 "xloc": [
25437 "default.handlebars->25->1162",
25419 - "default.handlebars->25->1595",
25438 + "default.handlebars->25->1597",
25439 "default.handlebars->25->516"
25440 ]
25441 },
@@ -25435,7 +25454,7 @@
25454 "zh-chs": "終端提示",
25455 "xloc": [
25456 "default.handlebars->25->1161",
25438 - "default.handlebars->25->1594",
25457 + "default.handlebars->25->1596",
25458 "default.handlebars->25->515"
25459 ]
25460 },
@@ -25579,7 +25598,7 @@
25598 "ru": "На данный момент уведомлений нет",
25599 "zh-chs": "目前沒有任何通知",
25600 "xloc": [
25582 - "default.handlebars->25->1701"
25601 + "default.handlebars->25->1705"
25602 ]
25603 },
25604 {
@@ -26808,9 +26827,9 @@
26827 "default-mobile.handlebars->9->194",
26828 "default-mobile.handlebars->9->195",
26829 "default.handlebars->25->13",
26811 - "default.handlebars->25->1665",
26812 - "default.handlebars->25->1678",
26813 - "default.handlebars->25->1679",
26830 + "default.handlebars->25->1669",
26831 + "default.handlebars->25->1682",
26832 + "default.handlebars->25->1683",
26833 "default.handlebars->25->392",
26834 "default.handlebars->25->41",
26835 "default.handlebars->25->42",
@@ -26855,7 +26874,7 @@
26874 "ru": "Неизвестное действие",
26875 "zh-chs": "未知動作",
26876 "xloc": [
26858 - "default.handlebars->25->1715"
26877 + "default.handlebars->25->1719"
26878 ]
26879 },
26880 {
@@ -26872,8 +26891,8 @@
26891 "ru": "Неизвестное устройство",
26892 "zh-chs": "未知設備",
26893 "xloc": [
26875 - "default.handlebars->25->1539",
26876 - "default.handlebars->25->1653"
26894 + "default.handlebars->25->1541",
26895 + "default.handlebars->25->1657"
26896 ]
26897 },
26898 {
@@ -26890,9 +26909,9 @@
26909 "ru": "Неизвестная группа устройств",
26910 "zh-chs": "未知設備組",
26911 "xloc": [
26893 - "default.handlebars->25->1533",
26894 - "default.handlebars->25->1641",
26895 - "default.handlebars->25->1719"
26912 + "default.handlebars->25->1535",
26913 + "default.handlebars->25->1645",
26914 + "default.handlebars->25->1723"
26915 ]
26916 },
26917 {
@@ -26909,7 +26928,7 @@
26928 "ru": "Неизвестная группа",
26929 "zh-chs": "未知群組",
26930 "xloc": [
26912 - "default.handlebars->25->1711"
26931 + "default.handlebars->25->1715"
26932 ]
26933 },
26934 {
@@ -26944,7 +26963,7 @@
26963 "ru": "Неизвестная группа пользователей",
26964 "zh-chs": "未知用戶組",
26965 "xloc": [
26947 - "default.handlebars->25->1647"
26966 + "default.handlebars->25->1651"
26967 ]
26968 },
26969 {
@@ -27033,7 +27052,7 @@
27052 "ru": "Актуально",
27053 "zh-chs": "最新",
27054 "xloc": [
27036 - "default.handlebars->25->1776"
27055 + "default.handlebars->25->1780"
27056 ]
27057 },
27058 {
@@ -27282,8 +27301,8 @@
27301 "ru": "Использовано",
27302 "zh-chs": "用過的",
27303 "xloc": [
27285 - "default.handlebars->25->1705",
27286 - "default.handlebars->25->1707"
27304 + "default.handlebars->25->1709",
27305 + "default.handlebars->25->1711"
27306 ]
27307 },
27308 {
@@ -27303,8 +27322,8 @@
27322 "default-mobile.handlebars->9->347",
27323 "default.handlebars->25->1200",
27324 "default.handlebars->25->1423",
27306 - "default.handlebars->25->1529",
27307 - "default.handlebars->25->1698",
27325 + "default.handlebars->25->1531",
27326 + "default.handlebars->25->1702",
27327 "default.handlebars->25->193",
27328 "default.handlebars->25->576"
27329 ]
@@ -27340,10 +27359,10 @@
27359 "ru": "Импорт учетной записи пользователя",
27360 "zh-chs": "用戶帳戶導入",
27361 "xloc": [
27343 - "default.handlebars->25->1449",
27344 - "default.handlebars->25->1450",
27362 + "default.handlebars->25->1451",
27363 "default.handlebars->25->1452",
27346 - "default.handlebars->25->1454"
27364 + "default.handlebars->25->1454",
27365 + "default.handlebars->25->1456"
27366 ]
27367 },
27368 {
@@ -27360,7 +27379,7 @@
27379 "ru": "Учетные записи пользователей",
27380 "zh-chs": "用戶帳號",
27381 "xloc": [
27363 - "default.handlebars->25->1724"
27382 + "default.handlebars->25->1728"
27383 ]
27384 },
27385 {
@@ -27397,7 +27416,7 @@
27416 "zh-chs": "用戶同意",
27417 "xloc": [
27418 "default.handlebars->25->1168",
27400 - "default.handlebars->25->1601",
27419 + "default.handlebars->25->1603",
27420 "default.handlebars->25->522"
27421 ]
27422 },
@@ -27417,9 +27436,9 @@
27436 "xloc": [
27437 "default.handlebars->25->1256",
27438 "default.handlebars->25->1257",
27420 - "default.handlebars->25->1510",
27421 - "default.handlebars->25->1649",
27422 - "default.handlebars->25->1668",
27439 + "default.handlebars->25->1512",
27440 + "default.handlebars->25->1653",
27441 + "default.handlebars->25->1672",
27442 "default.handlebars->25->575"
27443 ]
27444 },
@@ -27454,7 +27473,7 @@
27473 "ru": "Членство в группах пользователей",
27474 "zh-chs": "用戶組成員資格",
27475 "xloc": [
27457 - "default.handlebars->25->1646"
27476 + "default.handlebars->25->1650"
27477 ]
27478 },
27479 {
@@ -27472,7 +27491,7 @@
27491 "zh-chs": "用戶標識",
27492 "xloc": [
27493 "default.handlebars->25->1317",
27475 - "default.handlebars->25->1571"
27494 + "default.handlebars->25->1573"
27495 ]
27496 },
27497 {
@@ -27489,7 +27508,7 @@
27508 "ru": "Экспортировать список пользователей",
27509 "zh-chs": "用戶列表導出",
27510 "xloc": [
27492 - "default.handlebars->25->1461"
27511 + "default.handlebars->25->1463"
27512 ]
27513 },
27514 {
@@ -27524,7 +27543,7 @@
27543 "zh-chs": "用戶名",
27544 "xloc": [
27545 "default.handlebars->25->1254",
27527 - "default.handlebars->25->1558"
27546 + "default.handlebars->25->1560"
27547 ]
27548 },
27549 {
@@ -27572,7 +27591,7 @@
27591 "ru": "Сессии пользователя",
27592 "zh-chs": "用戶會話",
27593 "xloc": [
27575 - "default.handlebars->25->1741"
27594 + "default.handlebars->25->1745"
27595 ]
27596 },
27597 {
@@ -27706,7 +27725,7 @@
27725 "zh-chs": "用戶名",
27726 "xloc": [
27727 "default-mobile.handlebars->9->235",
27709 - "default.handlebars->25->1467",
27728 + "default.handlebars->25->1469",
27729 "default.handlebars->25->247",
27730 "default.handlebars->25->277",
27731 "default.handlebars->25->631",
@@ -27766,9 +27785,9 @@
27785 "ru": "Пользователи",
27786 "zh-chs": "用戶數",
27787 "xloc": [
27769 - "default.handlebars->25->1498",
27770 - "default.handlebars->25->1521",
27771 - "default.handlebars->25->1740",
27788 + "default.handlebars->25->1500",
27789 + "default.handlebars->25->1523",
27790 + "default.handlebars->25->1744",
27791 "default.handlebars->container->topbar->1->1->UsersSubMenuSpan->UsersSubMenu->1->0->UsersGeneral"
27792 ]
27793 },
@@ -27786,7 +27805,7 @@
27805 "ru": "Сессии пользователей",
27806 "zh-chs": "用戶會話",
27807 "xloc": [
27789 - "default.handlebars->25->1728"
27808 + "default.handlebars->25->1732"
27809 ]
27810 },
27811 {
@@ -27869,7 +27888,7 @@
27888 "ru": "Проверенный",
27889 "zh-chs": "已驗證",
27890 "xloc": [
27872 - "default.handlebars->25->1627"
27891 + "default.handlebars->25->1631"
27892 ]
27893 },
27894 {
@@ -27969,7 +27988,7 @@
27988 "ru": "Версия несовместима, пожалуйста, сначала обновите установку MeshCentral",
27989 "zh-chs": "版本不兼容,请先升级您的MeshCentral安装",
27990 "xloc": [
27972 - "default.handlebars->25->1772"
27991 + "default.handlebars->25->1776"
27992 ]
27993 },
27994 {
@@ -28037,8 +28056,8 @@
28056 "ru": "Просмотр журнала изменений",
28057 "zh-chs": "查看变更日志",
28058 "xloc": [
28040 - "default.handlebars->25->1775",
28041 - "default.handlebars->25->1777"
28059 + "default.handlebars->25->1779",
28060 + "default.handlebars->25->1781"
28061 ]
28062 },
28063 {
@@ -28089,7 +28108,7 @@
28108 "ru": "Посмотреть примечания об этом пользователе",
28109 "zh-chs": "查看有關此用戶的註釋",
28110 "xloc": [
28092 - "default.handlebars->25->1609"
28111 + "default.handlebars->25->1611"
28112 ]
28113 },
28114 {
@@ -28296,8 +28315,8 @@
28315 "ru": "Веб-сервер",
28316 "zh-chs": "網絡服務器",
28317 "xloc": [
28299 - "default.handlebars->25->1761",
28300 - "default.handlebars->25->1762"
28318 + "default.handlebars->25->1765",
28319 + "default.handlebars->25->1766"
28320 ]
28321 },
28322 {
@@ -28314,7 +28333,7 @@
28333 "ru": "Запросы веб-сервера",
28334 "zh-chs": "Web服務器請求",
28335 "xloc": [
28317 - "default.handlebars->25->1763"
28336 + "default.handlebars->25->1767"
28337 ]
28338 },
28339 {
@@ -28331,7 +28350,7 @@
28350 "ru": "Ретранслятор Web Socket",
28351 "zh-chs": "Web套接字中繼",
28352 "xloc": [
28334 - "default.handlebars->25->1764"
28353 + "default.handlebars->25->1768"
28354 ]
28355 },
28356 {
@@ -28436,7 +28455,7 @@
28455 "ru": "Будет изменено при следующем входе в систему.",
28456 "zh-chs": "下次登錄時將更改。",
28457 "xloc": [
28439 - "default.handlebars->25->1581"
28458 + "default.handlebars->25->1583"
28459 ]
28460 },
28461 {
@@ -29396,7 +29415,7 @@
29415 "ru": "\\\\'",
29416 "zh-chs": "\\\\'",
29417 "xloc": [
29399 - "default.handlebars->25->1773"
29418 + "default.handlebars->25->1777"
29419 ]
29420 },
29421 {
@@ -29671,7 +29690,7 @@
29690 "ru": "свободно",
29691 "zh-chs": "自由",
29692 "xloc": [
29674 - "default.handlebars->25->1736"
29693 + "default.handlebars->25->1740"
29694 ]
29695 },
29696 {
@@ -29852,7 +29871,7 @@
29871 "ru": "id, name, email, creation, lastlogin, groups, authfactors",
29872 "zh-chs": "id,名稱,電子郵件,創建,lastlogin,組,authfactors",
29873 "xloc": [
29855 - "default.handlebars->25->1462"
29874 + "default.handlebars->25->1464"
29875 ]
29876 },
29877 {
@@ -29951,7 +29970,7 @@
29970 "ru": "k max, пусто по умолчанию",
29971 "zh-chs": "k max,默认为空白",
29972 "xloc": [
29954 - "default.handlebars->25->1484"
29973 + "default.handlebars->25->1486"
29974 ]
29975 },
29976 {
@@ -30035,7 +30054,7 @@
30054 "ru": "servertrace.csv",
30055 "zh-chs": "servertrace.csv",
30056 "xloc": [
30038 - "default.handlebars->25->1771"
30057 + "default.handlebars->25->1775"
30058 ]
30059 },
30060 {
@@ -30088,7 +30107,7 @@
30107 "ru": "time, conn.agent, conn.users, conn.usersessions, conn.relaysession, conn.intelamt, mem.external, mem.heapused, mem.heaptotal, mem.rss",
30108 "zh-chs": "時間,conn.agent,conn.users,conn.usersessions,conn.relaysession,conn.intelamt,mem.external,mem.heapused,mem.heaptotal,mem.rss",
30109 "xloc": [
30091 - "default.handlebars->25->1749"
30110 + "default.handlebars->25->1753"
30111 ]
30112 },
30113 {
@@ -30105,7 +30124,7 @@
30124 "ru": "time, source, message",
30125 "zh-chs": "時間,來源,訊息",
30126 "xloc": [
30108 - "default.handlebars->25->1770"
30127 + "default.handlebars->25->1774"
30128 ]
30129 },
30130 {
@@ -30136,7 +30155,7 @@
30155 "ru": "всего",
30156 "zh-chs": "總",
30157 "xloc": [
30139 - "default.handlebars->25->1737"
30158 + "default.handlebars->25->1741"
30159 ]
30160 },
30161 {
@@ -30203,8 +30222,8 @@
30222 "ru": "userlist.csv",
30223 "zh-chs": "userlist.csv",
30224 "xloc": [
30206 - "default.handlebars->25->1458",
30207 - "default.handlebars->25->1463"
30225 + "default.handlebars->25->1460",
30226 + "default.handlebars->25->1465"
30227 ]
30228 },
30229 {
@@ -30221,8 +30240,8 @@
30240 "ru": "userlist.json",
30241 "zh-chs": "userlist.json",
30242 "xloc": [
30224 - "default.handlebars->25->1460",
30225 - "default.handlebars->25->1464"
30243 + "default.handlebars->25->1462",
30244 + "default.handlebars->25->1466"
30245 ]
30246 },
30247 {
@@ -30291,7 +30310,7 @@
30310 "zh-chs": "{0} Kb",
30311 "xloc": [
30312 "default.handlebars->25->1370",
30294 - "default.handlebars->25->1677"
30313 + "default.handlebars->25->1681"
30314 ]
30315 },
30316 {
@@ -30343,7 +30362,7 @@
30362 "ru": "{0} активных сессий",
30363 "zh-chs": "{0}個活動會話",
30364 "xloc": [
30346 - "default.handlebars->25->1619"
30365 + "default.handlebars->25->1623"
30366 ]
30367 },
30368 {
@@ -30379,7 +30398,7 @@
30398 "xloc": [
30399 "default-mobile.handlebars->9->88",
30400 "default.handlebars->25->1380",
30382 - "default.handlebars->25->1692"
30401 + "default.handlebars->25->1696"
30402 ]
30403 },
30404 {
@@ -30437,7 +30456,7 @@
30456 "ru": "{0} групп",
30457 "zh-chs": "{0}個群組",
30458 "xloc": [
30440 - "default.handlebars->25->1586"
30459 + "default.handlebars->25->1588"
30460 ]
30461 },
30462 {
views/default.handlebars
+19 -3
@@ -4982,6 +4982,7 @@
4982 if (node == null) return;
4983 var mesh = meshes[node.meshid];
4984 var meshrights = GetNodeRights(node);
4985 + var deviceSwitch = ((currentNode == null) || (currentNode._id != nodeid));
4986 if (!currentNode || currentNode._id != node._id || refresh == true) {
4987 currentNode = node;
4988
@@ -5269,9 +5270,11 @@
5270 }
5271
5272 // Clear user consent status if present
5272 - p11clearConsoleMsg();
5273 - p12clearConsoleMsg();
5274 - p13clearConsoleMsg();
5273 + if (deviceSwitch) {
5274 + p11clearConsoleMsg();
5275 + p12clearConsoleMsg();
5276 + p13clearConsoleMsg();
5277 + }
5278
5279 // Device refresh plugin handler
5280 if (pluginHandler != null) {
@@ -10159,6 +10162,18 @@
10162 function showSendSMSValidate() { QE('idx_dlgOkButton', Q('d2smsText').value.length > 0); }
10163 function showSendSMSEx(b, tag) { if (Q('d2smsText').value.length > 0) { meshserver.send({ action: 'smsuser', userid: decodeURIComponent(tag), msg: Q('d2smsText').value }); } }
10164
10165 + function showSendEmail(userid) {
10166 + if (xxdialogMode) return;
10167 + var x = '<input id=d2emailSubject style=background-color:#fcf3cf;width:100% placeholder="' + "Subject" + '"></input>';
10168 + x += '<textarea id=d2emailText maxlength=10000 style="background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:auto" onKeyUp=showSendEmailValidate()></textarea>';
10169 + setDialogMode(2, "Send Email", 3, showSendEmailEx, x, userid);
10170 + Q('d2emailSubject').focus();
10171 + showSendEmailValidate();
10172 + }
10173 +
10174 + function showSendEmailValidate() { QE('idx_dlgOkButton', (Q('d2emailSubject').value.length > 0) && (Q('d2emailText').value.length > 0)); }
10175 + function showSendEmailEx(b, tag) { if (Q('d2emailText').value.length > 0) { meshserver.send({ action: 'emailuser', userid: decodeURIComponent(tag), subject: Q('d2emailSubject').value, msg: Q('d2emailText').value }); } }
10176 +
10177 function showUserAlertDialog(e, userid) {
10178 if (xxdialogMode) return;
10179 haltEvent(e);
@@ -10916,6 +10931,7 @@
10931 // Add action buttons
10932 x += '<input type=button value="' + "Notes" + '" title="' + "View notes about this user" + '" onclick=showNotes(false,"' + userid + '") />';
10933 if (user.phone && (features & 0x02000000)) { x += '<input type=button value="' + "SMS" + '" title="' + "Send a SMS message to this user" + '" onclick=showSendSMS("' + userid + '") />'; }
10934 + if ((typeof user.email == 'string') && (user.emailVerified === true) && (features & 0x00000040)) { x += '<input type=button value="' + "Email" + '" title="' + "Send a email message to this user" + '" onclick=showSendEmail("' + userid + '") />'; }
10935 if (!self && (activeSessions > 0)) { x += '<input type=button value="' + "Notify" + '" title="' + "Send user notification" + '" onclick=showUserAlertDialog(event,"' + userid + '") />'; }
10936
10937 // Setup the panel