<!doctypehtml><html lang=it dir=ltr xmlns=http://www.w3.org/1999/xhtml><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta content="text/html; charset=utf-8"http-equiv=Content-Type><meta name=viewport content="user-scalable=1,initial-scale=1,minimum-scale=1,maximum-scale=1"><meta name=format-detection content="telephone=no"><meta name=robots content=noindex,nofollow><link rel=manifest href={{{domainurl}}}manifest.json><link rel="shortcut icon"href={{{domainurl}}}favicon.ico><link rel=icon type=image/png sizes=16x16 href={{{domainurl}}}favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href={{{domainurl}}}favicon-32x32.png><link rel=apple-touch-icon href=/favicon-303x303.png><link type=text/css href=styles/xterm.css media=screen rel=stylesheet title=CSS><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=#ffffff><meta name=apple-mobile-web-app-title content={{{title}}}><script src=scripts/common-0.0.1{{{min}}}.js></script><script src=scripts/meshcentral{{{min}}}.js></script><script src=scripts/agent-redir-ws-0.1.1{{{min}}}.js></script><script src=scripts/agent-desktop-0.0.2{{{min}}}.js></script><script src=scripts/amt-0.2.0{{{min}}}.js></script><script src=scripts/amt-redir-ws-0.1.0{{{min}}}.js></script><script src=scripts/amt-desktop-0.0.2{{{min}}}.js></script><script src=scripts/xterm{{{min}}}.js></script><script src=scripts/xterm-addon-fit{{{min}}}.js></script><script src=scripts/zlib{{{min}}}.js></script><script src=scripts/zlib-inflate{{{min}}}.js></script><script src=scripts/zlib-adler32{{{min}}}.js></script><script src=scripts/zlib-crc32{{{min}}}.js></script><script keeplink=1 src=scripts/filesaver.min.js></script><meta name=msapplication-TileColor content=#00aba9><meta name=theme-color content=#ffffff><title>{{{title}}}</title><style>body{background-color:#fff}.night body{background-color:#000}#MxMESH{color:#000}.night #MxMESH{color:#d3d3d3}.textOverGray{color:#000}#dialog{z-index:1000;background-color:#eee;box-shadow:0 0 15px #666;font-family:Arial,Helvetica,sans-serif;border-radius:5px;position:fixed;top:90px;width:300px}.night #dialog{color:#000;background-color:#aaa}:focus{outline:0}a{color:#036;text-decoration:underline}.night a{color:#99f}#footer a{color:#fff;text-decoration:underline}#footer a:hover{text-decoration:none}.night #footer{color:gray}.i1{background:url(../images/icons50.png) 0 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i2{background:url(../images/icons50.png) -50px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i3{background:url(../images/icons50.png) -100px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i4{background:url(../images/icons50.png) -150px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i5{background:url(../images/icons50.png) -200px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i6{background:url(../images/icons50.png) -250px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i7{background:url(../images/icons50.png) -300px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.i8{background:url(../images/icons50.png) -350px 0;background-image:image-set(url(../images/icons50.png) 1x,url(../images/icons100.png) 2x);height:50px;width:50px;border:none}.m0{background:url(../images/images16.png) -32px 0;height:16px;width:16px;border:none;float:left}.m1{background:url(../images/images16.png) -16px 0;height:16px;width:16px;border:none;float:left}.m2{background:url(../images/images16.png) -96px 0;height:16px;width:16px;border:none;float:left}.m3{background:url(../images/images16.png) -112px 0;height:16px;width:16px;border:none;float:left}.m4{background:url(../images/images16.png) -128px 0;height:16px;width:16px;border:none;float:left}.NotifyIconSmall1{width:24px;height:24px;background:url(../images/notify24.png) 0 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall2{width:24px;height:24px;background:url(../images/notify24.png) -24px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall3{width:24px;height:24px;background:url(../images/notify24.png) -48px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall4{width:24px;height:24px;background:url(../images/notify24.png) -72px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall5{width:24px;height:24px;background:url(../images/notify24.png) -96px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall6{width:24px;height:24px;background:url(../images/notify24.png) -120px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall7{width:24px;height:24px;background:url(../images/notify24.png) -144px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall8{width:24px;height:24px;background:url(../images/notify24.png) -168px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.NotifyIconSmall9{width:24px;height:24px;background:url(../images/notify24.png) -192px 0;background-image:image-set(url(../images/notify24.png) 1x,url(../images/notify48.png) 2x)}.gray{filter:gray;-webkit-filter:grayscale(100%) opacity(60%)}.DevSt{padding-left:5px;border-bottom-style:solid;border-bottom-width:1px;border-bottom-color:#ddd}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fileIcon1{background:url(data:image/gif;base64,R0lGODlhEAAQAJEDAPb49Y2Sj9LT2f///yH5BAEAAAMALAAAAAAQABAAAAImnI+py+1vhJwyUYAzHTL4D3qdlJWaIFJqmKod607sDKIiDUP63hQAOw==);height:16px;width:16px;cursor:pointer;border:none;float:left;margin-top:1px}.fileIcon2{background:url(data:image/gif;base64,R0lGODlhEAAQAJEDAM2xV/Xur+XPgP///yH5BAEAAAMALAAAAAAQABAAAAJD3ISZIGHWUGihznesYDYATFVM+D2hJ4lgN1olxALAtAlmPCJvuMmJd6PJckDYwicrHhTD5o7plJmg0Uc0asNMkphHAQA7);height:16px;width:16px;cursor:pointer;border:none;float:left;margin-top:1px}.fileIcon3{background:url(data:image/gif;base64,R0lGODlhEAAQAJEDAPb19IGBgbq6uv///yH5BAEAAAMALAAAAAAQABAAAAIy3ISpxgcPH2ouQgFEw1YmxnUXKEaaEZZnVWZk66JwzKpvuwZzwOgwb/C1gIOA8Yg8DgoAOw==);height:16px;width:16px;cursor:pointer;border:none;float:left;margin-top:1px}.fileIcon4{background:url(../images/meshicon16.png);height:16px;width:16px;cursor:pointer;border:none;float:left;margin-top:1px}.filelist{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;cursor:default;-khtml-user-drag:element;clear:both}.deviceNotifyDot{position:absolute;right:10px;top:0;height:16px}.deviceNotifyDotSub{text-align:center;color:#fff;width:16px;background-color:#00f;padding:2px;border-radius:10px;box-shadow:2px 2px 10px #000;cursor:pointer;margin-left:3px;float:left}.deviceNotifyDotSub:hover{background-color:#44f}.deviceNotifySmallDot{position:absolute;right:10px;top:0;height:10px}.deviceNotifySmallDotSub{text-align:center;color:#fff;width:10px;padding:2px;background-color:#00f;border-radius:10px;box-shadow:2px 2px 10px #000;cursor:pointer;margin-left:2px;float:left}.deviceNotifySmallDotSub:hover{background-color:#44f}.deviceNotifyLargeDot{position:absolute;right:10px;top:10px;height:40px}.deviceNotifyLargeDotSub{text-align:center;width:35px;height:35px;color:#fff;padding:2px;background-color:#00f;border-radius:20px;box-shadow:2px 2px 10px #000;cursor:pointer;margin-left:4px;font-size:30px;float:left}.deviceNotifyLargeDotSub:hover{background-color:#44f}.style10{background-color:#c9c9c9;color:#000}.night .style10{background-color:#888}.deviceBatteryLarge{position:absolute;right:10px;top:0;width:28px;height:48px;border:none;box-shadow:none}.deviceBatteryLarge1{background:url(../images/batteries48.png) 0 0}.deviceBatteryLarge2{background:url(../images/batteries48.png) -28px 0}.deviceBatteryLarge3{background:url(../images/batteries48.png) -56px 0}.deviceBatteryLarge4{background:url(../images/batteries48.png) -84px 0}.deviceBatteryLarge5{background:url(../images/batteries48.png) -112px 0}.deviceBatteryLarge6{background:url(../images/batteries48.png) -140px 0}.deviceBatteryLarge7{background:url(../images/batteries48.png) -168px 0}.deviceBatteryLarge8{background:url(../images/batteries48.png) -196px 0}.deviceBatteryLarge9{background:url(../images/batteries48.png) -224px 0}.deviceBatteryLarge10{background:url(../images/batteries48.png) -252px 0}.deviceBatteryLarge11{background:url(../images/batteries48.png) -280px 0}.deviceBatterySmall{position:absolute;left:6px;top:22px;width:14px;height:24px;border:none;box-shadow:none}.deviceBatterySmall1{background:url(../images/batteries24.png) 0 0}.deviceBatterySmall2{background:url(../images/batteries24.png) -14px 0}.deviceBatterySmall3{background:url(../images/batteries24.png) -28px 0}.deviceBatterySmall4{background:url(../images/batteries24.png) -42px 0}.deviceBatterySmall5{background:url(../images/batteries24.png) -56px 0}.deviceBatterySmall6{background:url(../images/batteries24.png) -70px 0}.deviceBatterySmall7{background:url(../images/batteries24.png) -84px 0}.deviceBatterySmall8{background:url(../images/batteries24.png) -98px 0}.deviceBatterySmall9{background:url(../images/batteries24.png) -112px 0}.deviceBatterySmall10{background:url(../images/batteries24.png) -126px 0}.deviceBatterySmall11{background:url(../images/batteries24.png) -140px 0}.meshList{width:auto;height:40px;background-color:#d3d3d3;margin-top:5px;margin-bottom:5px;margin-left:60px;padding-top:5px;padding-bottom:5px;border-radius:8px 0 0 8px}.night .meshList{background-color:gray}.devList1{height:50px;cursor:pointer;position:relative;margin-top:5px;margin-bottom:5px}.devList2{float:left;margin-left:4px}.devList3{width:auto;height:40px;background-color:#d3d3d3;margin-left:60px;padding-top:5px;padding-bottom:5px;border-radius:8px 0 0 8px}.night .devList3{background-color:gray}.devList4{padding-left:12px;padding-top:2px;color:#000}.devList5{padding-left:12px;padding-top:3px;color:#444}.night .devList5{color:#000}.deskButton{box-shadow:0 0 10px #000;border-radius:20px;position:absolute;right:10px;top:10px;cursor:pointer;background-color:#aaa;z-index:1000}.menuButton{box-shadow:0 0 10px #000;border-radius:10px;display:inline-block;width:120px;background-color:#aaa;text-align:center;padding:8px;cursor:pointer;margin:10px;z-index:1000}#notificationCount{min-width:28px;font-size:20px;background-color:orange;text-align:center;cursor:pointer;color:#000}.notifiyBox{font-size:16px;position:absolute;z-index:1000;top:60px;right:76px;width:300px;text-align:left;background-color:#f0eccd;border:4px solid #666;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;-webkit-box-shadow:2px 2px 4px #888;-moz-box-shadow:2px 2px 4px #888;box-shadow:2px 2px 4px #888;max-height:200px}.night .notifiyBox{color:#000}.notifiyBox:before{content:' ';position:absolute;width:0;height:0;right:5px;top:-30px;border:15px solid;border-color:transparent #666 #666 transparent}.notifiyBox:after{content:' ';position:absolute;width:0;height:0;right:7px;top:-24px;border:12px solid;border-color:transparent #f0eccd #f0eccd transparent}#p15statetext{padding:4px;height:15px}#p15agentConsole{background:#000;margin:0;padding:0;color:#d3d3d3;width:100%;position:relative}#p15coreName{padding:4px;display:inline-block}#p15agentConsoleText{position:absolute;margin:0;padding:0;top:0;bottom:0;left:0;right:0;overflow-y:scroll;overflow-x:auto}.areaHead{padding-top:2px;padding-bottom:2px;background:silver}.night .areaHead{color:#ccc;background:#333}.areaFoot{padding-top:2px;padding-bottom:2px;background:silver}.night .areaFoot{color:#ccc;background:#333}.toright2{float:right;text-align:right}#consoleTable{width:100%;height:100%;padding:0;margin-top:0}.night #consoleTable{color:#000}.menucurve{background-color:#fff;width:10px;height:10px;border-radius:10px 0 0 0;border-right:1px solid #fff;border-bottom:1px solid #fff}.night .menucurve{background-color:#000;border-right:1px solid #000;border-bottom:1px solid #000}#termTable{width:100%;padding:0;margin-top:0}.fulldesk #termTable{position:absolute;top:0;bottom:0;left:0;right:0}#termarea3x{background:#000;text-align:center;height:400px;position:relative}.viewSelector10{margin-left:2px;margin-top:2px;background:url(../images/views.png) -476px 0;height:28px;width:28px}.viewSelector11{margin-left:2px;margin-top:2px;background:url(../images/views.png) -504px 0;height:28px;width:28px}</style><body id=body onload='"undefined"!=typeof startup&&startup()'style="overflow-y:hidden;margin:0;padding:0;border:0;font-size:13px;font-family:\'Trebuchet MS\',Arial,Helvetica,sans-serif"><div id=container><div id=notifiyBox class=notifiyBox style=display:none></div><div id=mastheadx></div><div id=masthead style="background:url(logo.png) 0 0;background-size:341px 50px;background-color:#036;background-repeat:no-repeat;height:50px;width:100%;overflow:hidden"><div style="width:calc(100% - 50px);overflow:hidden"><div style=float:left;height:66px;color:#c8c8c8;padding-left:10px;padding-top:6px><strong><font style="font-size:36px;font-family:Arial,Helvetica,sans-serif;text-shadow:1px 1px 2px #000">{{{title1}}}</font></strong></div><div style=float:left;height:66px;color:#c8c8c8;padding-left:5px;padding-top:10px><strong><font style="font-size:12px;font-family:Arial,Helvetica,sans-serif;text-shadow:1px 1px 2px #000">{{{title2}}}</font></strong></div></div><div id=devViewPageState class=noselect style=position:absolute;right:160px;top:10px;height:30px;line-height:30px;color:#c8c8c8;font-size:16px;display:none></div><img id=devViewPageButton2 class=noselect style=position:absolute;right:130px;top:10px;cursor:pointer;display:none onclick=onDeviceViewPageChange(2) src=/images/left-30.png width=20 height=30> <img id=devViewPageButton3 class=noselect style=position:absolute;right:100px;top:10px;cursor:pointer;display:none onclick=onDeviceViewPageChange(3) src=/images/right-30.png width=20 height=30><div id=notificationCount onclick=clickNotificationIcon() class=unselectable style=position:absolute;right:50px;top:0;font-size:28px;width:50px;height:50px;cursor:pointer;display:none title="Fare clic per visualizzare le notifiche correnti"><div id=notificationCount2 style=padding-top:8px>0</div></div><img id=topMenuIcon class=noselect style=position:absolute;right:0;top:10px;color:#c8c8c8;font-size:44px;margin-right:8px;cursor:pointer;display:none onclick=topMenu() src=/images/3bars-30.png width=30 height=30></div><div id=page_content style=position:absolute;bottom:32px;top:50px;width:100%><div id=column_l style=width:100%;padding:0;position:absolute;bottom:0;top:0><div id=p0 style=display:none;width:100%;height:100%><div style=display:flex;align-items:center;width:100%;height:100%><div id=p0message style=text-align:center;width:100%><span id=p0span>Server disconnesso</span>,<href onclick=reload() style=cursor:pointer><u>fare clic per riconnettersi</u></href>.</div></div></div><div id=p1 style=display:none;width:100%;height:100%><div style=display:flex;align-items:center;width:100%;height:100%><div id=p1message style=text-align:center;width:100%></div></div></div><div id=p2 style=display:none;position:absolute;top:0;left:0;right:0;bottom:0><div id=xdevices style=position:absolute;overflow-y:auto;top:0;left:0;right:0;bottom:34px onscroll=onDevicesScroll() ontouchstart=onDeviceTouch(!0) ontouchend=onDeviceTouch(!1)></div><div id=xdevicesBar style=position:absolute;overflow-y:auto;height:34px;left:0;right:0;bottom:0;background-color:#aaa;color:#000><div style=margin:4px><span style=width:20px;display:inline-block;text-align:center;cursor:pointer;font-size:16px onclick=clearSearchInput()><b>X</b></span> <input id=SearchInput autocomplete=off type=search placeholder=Filtro onchange=onDeviceSearchChanged(event) onclick=onDeviceSearchChanged(event) onkeyup=onDeviceSearchChanged(event) style=padding:2px;margin:0;height:20px;background-color:#fff>&nbsp; <label class=noselect><input type=checkbox id=RealNameCheckBox onclick=onRealNameCheckBox()>Nome del sistema operativo</label> <label class=noselect><input type=checkbox id=OnlineCheckBox onclick=onOnlineCheckBox(event)>in linea</label></div></div></div><div id=p3 style=display:none;position:absolute;bottom:0;top:0;width:100%><table cellspacing=0 style=margin:0;padding:0;border-spacing:0;border:0><tr style=padding:0><td style=padding:0;color:#c8c8c8;text-align:center;cursor:pointer width=60px valign=top onclick=goBack()><div style=padding:0;background-color:#036;width:10px;height:10px;float:right;border:0><div class=menucurve></div></div><div style="padding:0;font-size:25px;background-color:#036;width:50px;border-radius:0 0 10px 0;height:36px">◀</div><td><div style=margin-left:5px><strong style=font-size:large><span id=p3userName></span></strong><br></div></table><div id=p3info style=overflow-y:auto;position:absolute;top:55px;bottom:0;width:100%><img id=p2AccountImage alt=""loading=lazy width=128 height=128 onclick=account_manageImage(0) src=images/user-256.png style="position:absolute;right:8px;top:7px;border-radius:8px;box-shadow:0 0 7px #000"><div style=margin-left:8px><div id=p3AccountActions><div id=p2AccountSecurity style=display:none><p><strong>Sicurezza dell 'Account</strong><div style=margin-left:9px;margin-bottom:8px><div id=managePhoneNumber1 style=margin-top:5px;display:none><a onclick=account_managePhone() style=cursor:pointer>Gestisci numero di telefono</a> <span id=authPhoneNumberCheck><strong>✓</strong></span></div><div id=manageEmail2FA style=margin-top:5px;display:none><a onclick=account_manageAuthEmail() style=cursor:pointer>Gestisci l'autenticazione e-mail</a> <span id=authEmailSetupCheck><strong>✓</strong></span></div><div id=manageAuthApp style=margin-top:5px;display:none><a onclick=account_manageAuthApp() style=cursor:pointer>Gestisci l'app di autenticazione</a> <span id=authAppSetupCheck><strong>✓</strong></span></div><div id=manageOtp style=margin-top:5px;display:none><a onclick=account_manageOtp(0) style=cursor:pointer>Gestisci codici di backup</a> <span id=authCodesSetupCheck><strong>✓</strong></span></div><div style=margin-top:5px><a href=# onclick="return account_viewPreviousLogins()">Visualizza accessi precedenti</a></div></div></div><div id=p2AccountActions style=display:none><p><strong>Azioni sull'account</strong><div style=margin-left:9px;margin-bottom:8px><div style=margin-top:5px><span id=managePhoneNumber2 style=display:none><a onclick=account_managePhone() style=cursor:pointer>Gestisci numero di telefono</a></span></div><div style=margin-top:5px><span id=verifyEmailId style=display:none><a onclick=account_showVerifyEmail() style=cursor:pointer>Verifica Email</a></span></div><div style=margin-top:5px><span id=changeEmailId style=display:none><a onclick=account_showChangeEmail() style=cursor:pointer>Modifica indirizzo e-mail</a></span></div><div style=margin-top:5px><a onclick=account_showChangePassword() style=cursor:pointer>Cambia la password</a><span id=p2nextPasswordUpdateTime></span></div><div style=margin-top:5px><a onclick=account_showDeleteAccount() style=cursor:pointer>Eliminare l'account</a></div><div style=margin-top:5px id=setDarkModeLink><a onclick=toggleNightMode() style=cursor:pointer>Imposta la modalità scura</a></div><div style=margin-top:5px><a onclick=showNotes(!1) style=cursor:pointer>Note personali</a></div></div><br style=clear:both></div></div><strong>Gruppi di dispositivi</strong> <span id=p3createMeshLink1>( <a onclick=account_createMesh() style=cursor:pointer><img src=images/icon-addnew.png width=12 height=12 border=0> Nuovo</a> )</span><br><br><div id=p3meshes></div><div id=p3noMeshFound style=margin-left:9px;display:none>Nessun gruppo di dispositivi. <span id=p3createMeshLink2><a onclick=account_createMesh() style=cursor:pointer><strong>Inizia qui!</strong></a></span></div><br style=clear:both></div></div></div><div id=p5 style=display:none><table cellspacing=0 style=margin:0;padding:0;border-spacing:0;border:0><tr style=padding:0><td style=padding:0;color:#c8c8c8;text-align:center;cursor:pointer width=60px valign=top onclick=goBack()><div style=padding:0;background-color:#036;width:10px;height:10px;float:right;border:0><div class=menucurve></div></div><div style="padding:0;font-size:25px;background-color:#036;width:50px;border-radius:0 0 10px 0;height:36px">◀</div><td><img src=/images/user-50.png width=50 height=50><td><div style=margin-left:5px><strong style=font-size:large>I miei file</strong><br></div></table><div id=p5myfiles style=position:absolute;top:55px;bottom:0;width:100%><table id=p5toolbar style=width:100%;height:78px cellpadding=0 cellspacing=0><tr><td style=width:100%;background-color:#d3d9d6;text-align:left;padding:4px valign=bottom><div style=width:100%;text-align:center><input type=button style="width:calc(100%/5 - 5px)"id=p5FolderUp disabled onclick=p5folderup() value=Su> <input type=button style="width:calc(100%/5 - 5px)"id=p5SelectAllButton disabled onclick=p5selectallfile() value="Seleziona tutto"onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5RenameFileButton disabled value=Rinominare onclick=p5renamefile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5DeleteFileButton disabled value=Elimina onclick=p5deletefile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5NewFolderButton disabled value=Cartella onclick=p5createfolder() onkeypress=return!1 onkeydown=return!1></div><div style=width:100%;text-align:center><input type=button style="width:calc(100%/5 - 5px)"id=p5UploadButton disabled value=Caricare onclick=p5uploadFile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5CutButton disabled value=Taglia onclick=p5copyFile(1) onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5CopyButton disabled value=Copia onclick=p5copyFile(0) onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5PasteButton disabled value=Incolla onclick=p5pasteFile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p5RefreshButton value=ricaricare onclick=p5refreshFiles() onkeypress=return!1 onkeydown=return!1></div><tr><td style=background-color:#e4e9e7;height:28px><table style=width:100%><tr><td id=p5currentpath style=overflow:hidden;padding-left:4px;padding-top:2px;color:#000><td style=text-align:right;padding-right:4px><select id=p5sortdropdown onchange=updateFiles()><option value=1 selected>Ordina per nome<option value=2>Ordina per misura<option value=3>Ordinare per data<option value=4>Scendi per nome<option value=5>Scendi per dimensione<option value=6>Scendi per data</select></table></table><div id=p5filetable style="width:100%;height:calc(100% - 102px);overflow:auto;-webkit-user-select:none"><span id=p5files></span></div><table id=p5toolbarBottom style=width:100%;height:22px;position:absolute;bottom:0;background-color:#d3d9d6 cellpadding=0 cellspacing=0><tr><td style=text-align:left;padding:3px>&nbsp;<span id=p5bottomstatus></span><td id=p5rightOfButtons style=text-align:right;padding:3px></table></div></div><div id=p10 style=display:none;position:absolute;bottom:0;top:0;width:100%;overflow:hidden><table id=p10deskTopTable cellspacing=0 style=margin:0;padding:0;border-spacing:0;border:0;position:absolute;top:0><tr style=padding:0><td style=padding:0;color:#c8c8c8;text-align:center;cursor:pointer width=60px valign=top onclick=goBack()><div style=padding:0;background-color:#036;width:10px;height:10px;float:right;border:0><div class=menucurve></div></div><div style="padding:0;font-size:25px;background-color:#036;width:50px;border-radius:0 0 10px 0;height:36px">◀</div><td><a id=MainComputerImage style=cursor:pointer onclick=p10showiconselector()></a><td><div style=margin-left:5px><strong><span id=p10deviceName></span></strong><br><span id=MainComputerState></span></div></table><div id=p10dialog style="z-index:1000;background-color:#eee;box-shadow:0 0 15px #666;font-family:Arial,Helvetica,sans-serif;border-radius:5px;position:fixed;top:30px;width:300px;left:30px;display:none"><div style="width:100%;background-color:#036;color:#fff;border-radius:5px 5px 0 0"><div style=padding:5px>Personalizzazione delle scorciatoie da tastiera</div><div style=width:100%;margin:6px></div></div><div style=margin-right:16px;margin-left:8px><div id=p10dialog2 style=margin:auto;margin:3px></div></div><div style=padding:10px;margin-bottom:20px><input type=button value=OK style=float:right;width:80px onclick=deskCustomizeKeysEx()></div></div><div id=p10general style=overflow-y:scroll;position:absolute;top:55px;bottom:0;width:100%><div class=deviceNotifyLargeDot><img id=p10deviceStar class=deviceNotifyLargeDotSub src=images/icon-star-notify-40.png width=35 height=35><div id=p10deviceMsg onclick=showDeviceMessages(null,null,event) class=deviceNotifyLargeDotSub></div><img id=p10deviceNotify onclick=showDeviceSessions() class=deviceNotifyLargeDotSub src=images/icon-relay-notify-40.png width=35 height=35> <img id=p10deviceHelp onclick=showDeviceHelpRequests(null,null,event) class=deviceNotifyLargeDotSub src=images/icon-help-notify-40.png width=35 height=35></div><div id=p10deviceBattery class="deviceBatteryLarge deviceBatteryLarge1"></div><div id=p10html style=margin-left:8px;margin-right:8px></div><div id=p10html2></div><div id=p10html3 style=margin-left:8px></div></div><img id=deskkeybutton1 src=images/mobile-desk-exit.png class=deskButton style=top:10px;display:none onclick=exitButton()> <img id=deskkeybutton3a src=images/mobile-desk-menu-open.png class=deskButton style=top:60px;display:none onclick=toggleMenu(!1)> <img id=deskkeybutton3b src=images/mobile-desk-menu-close.png class=deskButton style=top:60px;display:none onclick=toggleMenu(!0)> <img id=deskkeybutton4a src=images/mobile-desk-mouse-left.png class=deskButton style=top:110px;display:none onclick=deskChangeMouseButton(0)> <img id=deskkeybutton4b src=images/mobile-desk-mouse-right.png class=deskButton style=top:110px;display:none onclick=deskChangeMouseButton(1)> <img id=deskkeybutton5a src=images/mobile-desk-scale-out.png class=deskButton style=top:160px;display:none onclick=deskChangeFullscreenZoom()> <img id=deskkeybutton5b src=images/mobile-desk-scale-in.png class=deskButton style=top:160px;display:none onclick=deskChangeFullscreenZoom()> <img id=deskkeybutton2a src=images/mobile-desk-keyboard-open.png class=deskButton style=top:210px;display:none onclick=toggleKeyboard()> <img id=deskkeybutton2b src=images/mobile-desk-keyboard-close.png class=deskButton style=top:210px;display:none onclick=toggleKeyboard()><div style=position:absolute;top:0;left:0;z-index:200;opacity:0;width:1px;height:1px><input id=softKeyboard autocapitalize=off autocomplete=off spellcheck=false style=z-index:200;opacity:0;width:1px;height:1px onfocus=keyboardFocusChange() onblur=keyboardFocusChange()></div><div id=deskButtonMenu style=display:none;position:absolute;top:10px;left:10px;right:55px;bottom:10px;z-index:1000></div><div id=p10desktop style=overflow:hidden;position:absolute;top:55px;bottom:0;width:100%;display:none><div id=deskarea1 style=position:absolute;top:0;width:100%;height:32px><div style=padding-top:2px;padding-bottom:2px;background:silver;height:32px><div style=float:right;text-align:right><span id=p14power></span>&nbsp; <input type=button id=deskFullScreen value="A schermo intero"onclick=deskToggleFull(event) onkeypress=return!1 onkeydown=return!1 disabled style=height:28px;margin-right:3px></div><div style=margin-left:3px><input type=button id=connectbutton1 value=Connetti onclick=connectDesktop(event,3) onkeypress=return!1 onkeydown=return!1 disabled style=height:28px> <input type=button id=connectbutton1h value="HW Connect"onclick=connectDesktop(event,2) onkeypress=return!1 onkeydown=return!1 disabled style=height:28px> <input type=button id=disconnectbutton1 value=Disconnetti onclick=connectDesktop(event,0) onkeypress=return!1 onkeydown=return!1 style=height:28px> <span id=deskstatus style=color:#000>Disconnesso</span></div></div></div><div id=deskarea3 style="position:absolute;top:32px;width:100%;height:calc(100% - 64px);background-color:#000;text-align:center"><div id=DeskParent style=height:100%><canvas id=Desk width=640 height=200 style=width:100%;-ms-touch-action:none;margin-left:0 oncontextmenu=return!1 onmousedown=dmousedown(event) onmouseup=dmouseup(event) onmousemove=dmousemove(event) onmousewheel=dmousewheel(event)></canvas></div><div id=p11DeskConsoleMsg style=display:none;cursor:pointer;position:absolute;left:30px;top:17px;color:#ff0;background-color:rgba(0,0,0,.6);padding:10px;border-radius:5px;text-align:left onclick=p11clearConsoleMsg()></div><div id=p11DeskSessionSelector style=display:none;position:absolute;left:30px;top:17px;right:30px;bottom:17px;overflow-y:auto></div></div><div id=deskarea4 style=position:absolute;bottom:0;width:100%;height:32px><div style=padding-top:2px;padding-bottom:2px;background:silver><div style=float:right;text-align:right><span id=DeskChatButton><img src=images/icon-chat.png onclick=deviceChat(event) height=16 width=16 style=padding-top:5px;cursor:pointer></span>&nbsp; <span id=DeskToastButton><img src=images/icon-notify.png onclick=deviceToastFunction() height=16 width=16 style=padding-top:5px;cursor:pointer></span>&nbsp;</div><div><input id=deskActionsBtn type=button style=margin-left:3px;height:28px onkeypress=return!1 onkeydown=return!1 value=Azioni onclick=deviceActionFunction()> <input type=button value=impostazioni onkeypress=return!1 onkeydown=return!1 onclick=showDesktopSettings() style=height:28px> <input type=button onkeypress=return!1 onkeydown=return!1 value="Azioni di accensione..."onclick=showPowerActionDlg() style=display:none;height:28px> <input type=button id=DeskScreens value=Schermi onkeypress=return!1 onkeydown=return!1 onclick=deskSelectScreens() style=display:none;height:28px> <label><span id=DeskControlSpan style=display:none><input id=DeskControl type=checkbox onkeypress=return!1 onkeydown=return!1>Ingresso</span></label></div></div></div></div><div id=termButtonMenu style=display:none;position:absolute;top:10px;left:10px;right:55px;bottom:10px;z-index:1000></div><div id=p10terminal style=overflow:hidden;position:absolute;top:55px;bottom:0;width:100%;display:none;background-color:#333><div id=termTable style=position:absolute;top:0;bottom:0;left:0;right:0><div id=termarea1><div class=areaHead style=line-height:24px><div class=toright2><input type=button id=termFullScreen value="A schermo intero"onclick=deskToggleFull(event) onkeypress=return!1 onkeydown=return!1 disabled style=height:28px;margin-right:3px><div id=terminalCustomUpperRight style=float:left;margin-right:6px></div></div><div><span id=connectbutton2span style=margin-left:3px><input type=button id=connectbutton2 value=Connetti style=height:28px onclick=connectTerminal(event,1) onkeypress=return!1 onkeydown=return!1 disabled></span><span id=connectbutton2sspan style=margin-right:4px><input type=button id=connectbutton2s value="Connessione SSH"style=height:28px onclick=connectTerminal(event,3) onkeypress=return!1 onkeydown=return!1 disabled></span><span id=disconnectbutton2span style=margin-left:3px><input type=button id=disconnectbutton2 value=Disconnetti style=height:28px onclick=connectTerminal(event,0) onkeypress=return!1 onkeydown=return!1></span><span id=termstatus style=line-height:22px>Disconnesso</span><span id=termtitle></span></div></div></div><div id=termarea3 style="width:100%;height:calc(100% - 60px)"cellpadding=0 cellspacing=0><div id=termarea3x style=width:100%;height:100%><div style=width:100%;height:100%;text-align:left id=termarea3xdiv></div></div></div><div id=termarea4 style=position:relative;height:32px><div class=areaFoot><div class=toright2></div><div style=height:28px><input id=termActionsBtn style=margin-left:3px;height:28px type=button title="Esegui azioni di accensione sul dispositivo"onkeypress=return!1 onkeydown=return!1 value=Azioni onclick=deviceActionFunction()></div></div></div><div id=p12TermConsoleMsg style=display:none;cursor:pointer;position:absolute;left:30px;top:45px;color:#ff0;background-color:rgba(0,0,0,.6);padding:10px;border-radius:5px onclick=p12clearConsoleMsg()></div></div></div><div id=p10files style=position:absolute;top:55px;bottom:0;width:100%;display:none><table id=p13toolbar style=width:100%;height:111px cellpadding=0 cellspacing=0><tr><td style="background-color:silver;border-bottom:2px solid #000;padding:2px;line-height:24px"><div style=float:right;text-align:right><input id=filesActionsBtn type=button onkeypress=return!1 onkeydown=return!1 value=Azioni onclick=deviceActionFunction() style=margin-right:2px><div id=filesCustomUpperRight style=float:left;margin-right:6px></div></div><div style=margin-left:2px><input id=p13AutoConnect value="Connessione automatica"onclick=autoConnectFiles(event) onkeypress=return!1 onkeydown=return!1 type=button style=display:none> <input id=p13Connect value=Connetti onclick=connectFiles(event,1) onkeypress=return!1 onkeydown=return!1 type=button> <input id=p13Connects value="Connessione SFTP"onclick=connectFiles(event,2) onkeypress=return!1 onkeydown=return!1 type=button> <input id=p13Disconnect value=Disconnetti onclick=connectFiles(event) onkeypress=return!1 onkeydown=return!1 type=button> <span class=textOverGray id=p13Status>Disconnesso</span></div><tr><td style=width:100%;background-color:#d3d9d6;text-align:left;padding:4px valign=bottom><div style=width:100%;text-align:center><input type=button style="width:calc(100%/5 - 5px)"id=p13FolderUp disabled onclick=p13folderup() value=Su> <input type=button style="width:calc(100%/5 - 5px)"id=p13SelectAllButton disabled onclick=p13selectallfile() value="Seleziona tutto"onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13RenameFileButton disabled value=Rinominare onclick=p13renamefile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13DeleteFileButton disabled value=Elimina onclick=p13deletefile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13NewFolderButton disabled value=Cartella onclick=p13createfolder() onkeypress=return!1 onkeydown=return!1></div><div style=width:100%;text-align:center><input type=button style="width:calc(100%/5 - 5px)"id=p13UploadButton disabled value=Caricare onclick=p13uploadFile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13CutButton disabled value=Taglia onclick=p13copyFile(1) onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13CopyButton disabled value=Copia onclick=p13copyFile(0) onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13PasteButton disabled value=Incolla onclick=p13pasteFile() onkeypress=return!1 onkeydown=return!1> <input type=button style="width:calc(100%/5 - 5px)"id=p13RefreshButton disabled value=ricaricare onclick=p13folderup(9999) onkeypress=return!1 onkeydown=return!1></div><tr><td style=background-color:#e4e9e7;height:28px><table style=width:100%><tr><td id=p13currentpath style=overflow:hidden;padding-left:4px;padding-top:2px;color:#000><td style=text-align:right;padding-right:4px><select id=p13sortdropdown onchange=p13updateFiles()><option value=1 selected>Ordina per nome<option value=2>Ordina per misura<option value=3>Ordinare per data<option value=4>Scendi per nome<option value=5>Scendi per dimensione<option value=6>Scendi per data</select></table></table><div id=p13FilesConsoleMsg style=display:none;cursor:pointer;position:absolute;left:30px;top:165px;color:#ff0;background-color:rgba(0,0,0,.6);padding:10px;border-radius:5px onclick=p13clearConsoleMsg()></div><div id=p13filetable style="width:100%;height:calc(100% - 133px);overflow:auto;-webkit-user-select:none"><span id=p13files></span></div><table id=p13toolbarBottom style=width:100%;height:22px;position:absolute;bottom:0 cellpadding=0 cellspacing=0><tr><td style=text-align:left;padding:3px;text-align:center;background-color:#d3d9d6;color:#000>&nbsp;<span id=p13bottomstatus></span></table></div><div id=p10details style=overflow-y:scroll;position:absolute;top:55px;bottom:0;width:100%><div id=p10detailshtml style=margin-left:-3px></div></div><div id=p10console style=overflow:hidden;position:absolute;top:55px;bottom:0;width:100%><table id=consoleTable cellpadding=0 cellspacing=0><tr style=height:28px><td class=areaHead><div class=toright2><div id=p15coreName></div><input type=button id=p15uploadCore value="Azione dell'agente"onclick=p15uploadCore(event)></div><div id=p15statetext></div><tr><td id=p15agentConsole style=position:relative><pre id=p15agentConsoleText></pre><tr style=height:28px><td class=areaFoot><table style=width:100%><tr><td style=width:99%><input id=p15consoleText style=width:100%;box-sizing:border-box onkeyup=p15consoleSend(event)><td id=p15outputselecttd><select id=p15outputselect onchange=setupConsole()><option id=p15outputselect1 value=1>Agente<option id=p15outputselect3 value=3>Spingere<option id=p15outputselect2 value=2>MQTT</select><td style=width:1%><input id=id_p15consoleClear type=button class=bottombutton value=Pulire onclick=p15consoleClear()></table></table></div></div><div id=p20 style=display:none;position:absolute;bottom:0;top:0;width:100%><table cellspacing=0 style=margin:0;padding:0;border-spacing:0;border:0;position:absolute;top:0><tr style=padding:0><td style=padding:0;color:#c8c8c8;text-align:center;cursor:pointer width=60px valign=top onclick=goBack()><div style=padding:0;background-color:#036;width:10px;height:10px;float:right;border:0><div class=menucurve></div></div><div style="padding:0;font-size:25px;background-color:#036;width:50px;border-radius:0 0 10px 0;height:36px">◀</div><td onclick=p20editmesh(1)><img src=/images/meshicon50.png width=50 height=50><td onclick=p20editmesh(1)><div style=margin-left:5px><strong style=font-size:large><span id=p20meshName></span></strong><br></div></table><div style=overflow-y:auto;position:absolute;top:55px;bottom:0;left:0;right:0><div id=p20info style=margin-left:8px;margin-right:8px></div></div></div></div></div><div id=footer style=height:32px;width:100%;text-align:center;background-color:#113962;position:absolute;bottom:0><table id=footerMenu cellpadding=0 cellspacing=0 style=height:32px;width:100%;color:#fff;cursor:pointer;table-layout:fixed></table></div></div><div id=dialog style=display:none><div style="width:100%;background-color:#036;color:#fff;border-radius:5px 5px 0 0"><div id=id_dialogclose style=float:right;padding:5px;cursor:pointer onclick=setDialogMode()><b>X</b></div><div id=id_dialogtitle style=padding:5px></div><div style=width:100%;margin:6px></div></div><div style=margin-right:16px;margin-left:8px><div id=dialog1 style=margin:auto;text-align:center;margin:3px><div id=id_dialogMessage style=padding:10px></div></div><div id=dialog2 style=margin:auto;margin:3px><div id=id_dialogOptions></div></div><div id=dialog3 style=margin:auto;margin:3px><select id=deskkeys style=width:100%><option value=10>Ctrl+Alt+Del<option value=11>Tab<option value=5>Win<option value=0>Win+Down<option value=1>Win+Up<option value=2>Win+L<option value=3>Win+M<option value=4>Shift+Win+M<option value=6>Win+R<option value=7>Alt-F4<option value=8>Ctrl-W<option value=9>Alt-Tab<option value=12>Shift-F10</select></div><div id=dialog7 style=margin:auto;margin:3px><div id=d7meshkvm><h4 style="width:100%;border-bottom:1px solid gray">Agente Desktop Remoto</h4><table style=width:100%><tr><td>Qualità<td style=width:100px><select id=d7bitmapquality style=float:right;width:200px dir=rtl></select><tr><td>Ridimensionamento<td style=width:100px><select id=d7bitmapscaling style=float:right;width:200px dir=rtl><option selected value=1024>100%<option value=896>87.5%<option value=768>75%<option value=640>62.5%<option value=512>50%<option value=384>37.5%<option value=256>25%<option value=128>12.5%</select><tr><td>Frequenza<td style=width:100px><select id=d7framelimiter style=float:right;width:200px dir=rtl><option selected value=50>Veloce<option value=100>medio<option value=400>Lento<option value=1000>Molto lento</select><tr><td><td><label style=display:block id=d7deskAutoLockLabel><input type=checkbox id=d7deskAutoLock>Blocca su Disconnessione</label></table></div><div id=d7amtkvm><h4 style="width:100%;border-bottom:1px solid gray">Intel® AMT Hardware KVM</h4><table style=width:100%><tr><td>Codifica<td style=width:100px><select id=d7desktopmode style=float:right;width:200px><option value=1>RLE8, il più veloce<option value=2>RLE16, consigliato<option value=3>RAW8, lento<option value=4>RAW16, molto lento</select></table></div></div></div><div id=idx_dlgButtonBar style=padding:10px;margin-bottom:20px><input id=idx_dlgCancelButton type=button value=Annulla style=float:right;width:80px;margin-left:5px onclick=dialogclose(0)> <input id=idx_dlgOkButton type=button value=OK style=float:right;width:80px onclick=dialogclose(1)><div><input id=idx_dlgDeleteButton type=button value=Elimina style=display:none onclick=dialogclose(2)></div></div></div><div id=topMenu style="z-index:1000;background-color:#eee;box-shadow:0 0 15px #666;font-family:Arial,Helvetica,sans-serif;border-radius:0 0 5px 5px;position:fixed;top:50px;right:5px;width:170px;display:none"><div style="padding:12px;border-top:1px solid gray;color:#000;cursor:pointer"onclick=topMenu(2)>I miei file</div><div style="padding:12px;border-top:1px solid gray;color:#000;cursor:pointer"onclick=topMenu(1)>Il mio Account</div><div id=logoutMenuOption><a id=logoutMenuOptionRef href=/logout><div style="padding:12px;border-top:1px solid gray;color:#000;cursor:pointer">Disconnettersi</div></a></div></div><audio id=chimes><source src=sounds/chimes.mp3 type=audio/mp3></audio><iframe name=fileUploadFrame style=display:none></iframe><script>"use strict";var i,random="{{{randomlength}}}",webState="{{{webstate}}}";for(i in webState=""!=webState?JSON.parse(decodeURIComponent(webState)):webState)localStorage.setItem(i,webState[i]);webState&&!webState.loctag&&localStorage.removeItem("loctag");var files,terminal,deskPinchZoom,urlargs=parseUriArgs(),args=(null!=urlargs.key&&(urlargs.key=""+urlargs.key),urlargs.key&&0==isAlphaNumeric(urlargs.key)&&delete urlargs.key,urlargs.locale&&0==isAlphaNumeric(urlargs.locale)&&delete urlargs.locale,delete urlargs.user,delete urlargs.pass,delete urlargs.viewmode,delete urlargs.gotonode,delete urlargs.gotodevicename,delete urlargs.gotomesh,delete urlargs.panel,parseUriArgs()),debugLevel=(args.key&&0==isAlphaNumeric(args.key)&&delete args.key,args.locale&&0==isAlphaNumeric(args.locale)&&delete args.locale,parseInt("{{{debuglevel}}}")),features=parseInt("{{{features}}}"),features2=parseInt("{{{features2}}}"),sessionTime=parseInt("{{{sessiontime}}}"),sessionRefreshTimer=null,domain="{{{domain}}}",domainUrl="{{{domainurl}}}",authCookie="{{{authCookie}}}",authRelayCookie="{{{authRelayCookie}}}",logoutControls=JSON.parse(decodeURIComponent("{{{logoutControls}}}")),authCookieRenewTimer=null,webRelayPort=parseInt("{{{webRelayPort}}}"),webRelayDns="{{{webRelayDns}}}",meshserver=null,xdr=null,usergroups=null,stars={},serverinfo=null,nodes=[],meshes={},filetree={},userinfo=null,serverinfo=null,users=null,nodeShortIdent=0,serverPublicNamePort="{{{serverDnsName}}}:{{{serverPublicPort}}}",debugmode=!1,attemptWebRTC=0!=(128&features),StatusStrs=["Disconnesso","Collegamento ...","Impostare...","Collegato","Intel & reg; AMT Connected"],agentsStr=["Sconosciuto","Windows 32bit console","Windows 64bit console","Servizio Windows a 32 bit ","Servizio Windows a 64 bit","Linux 32bit","Linux 64bit","MIPS","XENx86","Android ARM","Linux ARM","macOS x86-32bit","Android x86","PogoPlug ARM","Android","Linux Poky x86-32bit","macOS x86-64bit","ChromeOS","Linux Poky x86-64bit","Linux NoKVM x86-32bit","Linux NoKVM x86-64bit","Windows MinCore console","Servizio Windows MinCore ","NodeJS","ARM-Linaro","ARMv6l / ARMv7l","ARMv8 64bit","ARMv6l / ARMv7l / NoKVM","MIPS24KC (OpenWRT)","Apple Silicon","FreeBSD x86-64","Sconosciuto","Linux ARM 64 bit (glibc/2.24 NOKVM)","Alpine Linux x86 64 Bit (MUSL)","Assistente (Windows)","Armada370 - ARM32/HF (libc/2.26)","OpenWRT x86-64","OpenBSD x86-64","Sconosciuto","Sconosciuto","MIPSEL24KC (OpenWRT)","ARMADA/CORTEX-A53/MUSL (OpenWRT)","Windows ARM 64bit console","Windows ARM 64bit service"],passRequirements="{{{passRequirements}}}",sessionActivity=(""!=passRequirements&&(passRequirements=JSON.parse(decodeURIComponent(passRequirements))),Date.now()),deskKeyboardShortcuts=[],nightMode=setNightMode(),xterm=null,xtermfit=null,xtermResizeTimer=null,devicePagingState=null,p11DeskConsoleMsgTimer=null,p12TermConsoleMsgTimer=null,p13FilesConsoleMsgTimer=null,webpSupport=!1;function startup(){if(0==(32&features)){var e=null;try{e=top.location.toString().toLowerCase()}catch(e){}if(top!=self&&(null==e||0==top.active))return void(top.location=self.location)}args.locale||null!=(e=getstore("loctag",0))&&"*"!=e&&(args.locale=e),(window.onresize=center)(),QV("changeEmailId",0==(2097152&features)),QH("p1message","Collegamento ..."),go(1),document.onkeypress=ondeskkeypress,document.onkeydown=ondeskkeydown,document.onkeyup=ondeskkeyup,document.onclick=function(e){999==xxdialogMode&&"topMenuIcon"!=e.target.id&&(QV("topMenu",!1),xxdialogMode=0)},(meshserver=MeshServerCreateControl(domainUrl)).onStateChanged=onStateChanged,meshserver.onMessage=onMessage,meshserver.trace=args.trace,meshserver.Start();try{stars=JSON.parse(getstore("stars","{}"))}catch(e){}logoutControls&&logoutControls.logoutUrl&&(Q("logoutMenuOptionRef").href=logoutControls.logoutUrl);var t,e=localStorage.getItem("desktopsettings"),o=(null!=e&&(desktopsettings=JSON.parse(e)),applyDesktopSettings(),null!=args.webrtc&&(attemptWebRTC=1==args.webrtc),10<=sessionTime&&(sessionRefreshTimer=setTimeout(refreshCookieSession,Math.round(6e4*sessionTime*.8))),QV("setDarkModeLink",0==(3145728&features2)),deskKeyboardShortcuts=[],getstore("deskKeyShortcuts","0x0A002E,0x100000,0x100028,0x100026,0x10004C,0x10004D,0x11004D,0x100052,0x020073,0x080057,0x020009,0x100025,0x100027").split(","));for(t in o)deskKeyboardShortcuts.push(parseInt(o[t]));updateDeskShortcutKeys(),updateTermShortcutKeys()}function refreshCookieSession(){var e=null;try{e=new XDomainRequest}catch(e){}(e=e||new XMLHttpRequest).open("GET",window.location.origin+domainUrl+"refresh.ashx"),e.timeout=15e3,e.onload=function(){sessionRefreshTimer=setTimeout(refreshCookieSession,Math.round(6e4*sessionTime*.8))},e.onerror=e.ontimeout=function(){sessionRefreshTimer=null},e.send()}function onStateChanged(e,t,o,n){if(0==t){if(setDialogMode(0),go(0),deleteAllNotifications(),"noauth"==n)return void QH("p0span","Impossibile eseguire l'autenticazione");2==o?setTimeout(serverPoll,5e3):QH("p0span","Impossibile connettere  web socket"),null!=authCookieRenewTimer&&(clearInterval(authCookieRenewTimer),authCookieRenewTimer=null),devicePagingState=null,updateDevicePageState()}else 2==t&&(meshserver.send({action:"usergroups"}),meshserver.send({action:"meshes"}),meshserver.send({action:"nodes",skip:null==devicePagingState?0:devicePagingState.skip}),meshserver.send({action:"files"}),authCookieRenewTimer=setInterval(function(){meshserver.send({action:"authcookie"})},18e5));QV("topMenuIcon",2==t)}function serverPoll(){xdr=null;try{xdr=new XDomainRequest}catch(e){}(xdr=xdr||new XMLHttpRequest).open("HEAD",window.location.href),xdr.timeout=15e3,xdr.onload=function(){xdr.status<500?reload():setTimeout(serverPoll,1e4)},xdr.onerror=xdr.ontimeout=function(){setTimeout(serverPoll,1e4)},xdr.send()}function updateSelf(){var e,t,o=0!=(256&features2);userinfo&&(o=4294967295!=userinfo.siteadmin&&0!=(1024&userinfo.siteadmin)||0!=(256&features2)),QV("p3AccountActions",0==(4&features)&&0==serverinfo.domainauth&&0==o),QV("logoutMenuOption",0==(4&features)&&0==serverinfo.domainauth),QV("p2AccountSecurity",0==(4&features)&&0==serverinfo.domainauth&&0!=(4096&features)&&0==o),QV("p2AccountImage",!o),QV("verifyEmailId",!0!==userinfo.emailVerified&&null!=userinfo.email&&1==serverinfo.emailcheck),QV("manageAuthApp",1!=serverinfo.lock2factor&&4096&features&&(1==userinfo.otpsecret||0==(131072&features2))),QV("manageOtp",1!=serverinfo.lock2factor&&0==(262144&features2)&&4096&features&&(1==userinfo.otpsecret||0<userinfo.otphkeys)),QV("authPhoneNumberCheck",null!=userinfo.phone),QV("authEmailSetupCheck",1==userinfo.otpekey&&null!=userinfo.email&&1==userinfo.emailVerified),QV("authAppSetupCheck",1==userinfo.otpsecret),QV("authCodesSetupCheck",0<userinfo.otpkeys),QV("p2AccountActions",0==(4&features)&&0==serverinfo.domainauth&&null!=userinfo&&0==userinfo._id.split("/")[2].startsWith("~")),QV("p3createMeshLink1",!1),QV("p3createMeshLink2",!1),null!=userinfo.flags&&1&userinfo.flags?(null==userinfo.accountImageRnd&&(userinfo.accountImageRnd=Math.floor(9999999999*Math.random())),Q("p2AccountImage").src="userimage.ashx?rnd="+userinfo.accountImageRnd):Q("p2AccountImage").src="images/user-256.png","number"==typeof userinfo.passchange&&(-1==userinfo.passchange?QH("p2nextPasswordUpdateTime"," - Ripristino al prossimo accesso."):null!=passRequirements&&"number"==typeof passRequirements.reset&&((o=userinfo.passchange+86400*passRequirements.reset-Math.floor(Date.now()/1e3))<0?QH("p2nextPasswordUpdateTime"," - Ripristino al prossimo accesso."):o<3600?(t=Math.floor(o/60),QH("p2nextPasswordUpdateTime",format(1==t?" - Reimpostazione in 1 minuto.":" - Reimpostazione in {0} minuti.",t))):o<86400?(e=Math.floor(o/3600),QH("p2nextPasswordUpdateTime",format(1==e?" - Reimpostazione in 1 ora.":" - Reimpostazione in {0} ore.",e))):(t=Math.floor(o/86400),QH("p2nextPasswordUpdateTime",format(1==e?" - Reimpostazione in 1 giorno.":" - Reimpostazione in {0} giorni.",t)))))}function setSessionActivity(){sessionActivity=Date.now()}function checkIdleSessionTimeout(){Date.now()-sessionActivity>serverinfo.timeout&&(window.location.href="logout")}function onMessage(e,t){switch(t.action){case"serverinfo":(serverinfo=t.serverinfo).timeout&&(setInterval(checkIdleSessionTimeout,1e4),checkIdleSessionTimeout()),null!=userinfo&&updateSelf(),null!=serverinfo.certExpire&&0<=(d=Math.floor((serverinfo.certExpire-Date.now())/864e5))&&d<20&&addNotification({text:format("Il certificato scade tra {0} giorno(i)",d)}),QV("manageEmail2FA",8388608&features&&1!=serverinfo.lock2factor),QV("managePhoneNumber1",33554432&features&&67108864&features&&1!=serverinfo.lock2factor),QV("managePhoneNumber2",33554432&features&&!(67108864&features)&&1!=serverinfo.lock2factor);break;case"authcookie":authCookie=t.cookie,authRelayCookie=t.rcookie;break;case"userinfo":userinfo=t.userinfo,QH("p3userName",userinfo.name),null!=serverinfo&&updateSelf();break;case"users":for(var o in users={},t.users)users[t.users[o]._id]=t.users[o];null!=currentUser&&(currentUser=users[currentUser._id]),updateUsers();break;case"wssessioncount":wssessions=t.wssessions,updateUsers();break;case"meshes":for(var o in meshes={},t.meshes)meshes[t.meshes[o]._id]=t.meshes[o];null!=currentMesh&&(currentMesh=meshes[currentMesh._id]),updateMeshes(),mainUpdate(4);break;case"usergroups":var n=0;if(Array.isArray(t.ugroups))for(var i in usergroups={},t.ugroups)n++,usergroups[t.ugroups[i]._id]=t.ugroups[i];else for(var i in usergroups=t.ugroups,t.ugroups)n++;0==n&&(usergroups=null);break;case"files":filetree=setupBackPointers(t.filetree),updateFiles();break;case"nodes":for(var o in nodes=[],t.nodes)for(var a in t.nodes[o])t.nodes[o][a].namel=t.nodes[o][a].name.toLowerCase(),t.nodes[o][a].rname?t.nodes[o][a].rnamel=t.nodes[o][a].rname.toLowerCase():t.nodes[o][a].rnamel=t.nodes[o][a].namel,t.nodes[o][a].meshnamel=meshes[o]?meshes[o].name.toLowerCase():"*",t.nodes[o][a].meshid=o,t.nodes[o][a].state=t.nodes[o][a].state||0,t.nodes[o][a].desc=t.nodes[o][a].desc,t.nodes[o][a].icon||(t.nodes[o][a].icon=1),t.nodes[o][a].ident=++nodeShortIdent,nodes.push(t.nodes[o][a]);null!=currentNode&&0==IsNodeViewable(currentNode)&&(currentNode=null,go(2)),null!=currentNode&&(null!=(currentNode=getNodeFromId(currentNode._id))?gotoDevice(currentNode._id,xxcurrentView,!0):go(2)),devicePagingState=null==t.totalcount?null:{total:t.totalcount,skip:t.skip,limit:t.limit},updateDevicePageState(),mainUpdate(4),0==xxcurrentView&&go(parseInt("{{viewmode}}")),gotoDevice("{{currentNode}}",parseInt("{{viewmode}}"));break;case"powertimeline":if(t.nodeid==powerTimelineReq){for(var i in powerTimelineNode=t.nodeid,powerTimeline=t.timeline,powerTimelineUpdate=Date.now()+3e5,powerTimeline)i%2==1&&(powerTimeline[i]=1e3*powerTimeline[i]);currentNode._id==t.nodeid&&drawDeviceTimeline()}break;case"getsysinfo":t.nodeid==powerTimelineReq&&(!0===t.noinfo?updateDeviceDetails(getNodeFromId(t.nodeid)):updateDeviceDetails(getNodeFromId(t.nodeid),t.hardware));break;case"lastconnect":null!=(k=getNodeFromId(t.nodeid))&&(k.lastconnect=t.time,k.lastaddr=t.addr);break;case"msg":if(null!=t.nodeid){var s=-1;if(null!=nodes)for(var i in nodes)if(nodes[i]._id==t.nodeid){s=i;break}if(-1!=s)if("console"==t.type)p15consoleReceive(nodes[s],t.value,t.source);else if("notify"==t.type){if(0==(8&(a=getstore("notifications",0)))&&null!=t.amtMessage)break;a={text:t.value,title:t.title,icon:t.icon,titleid:t.titleid,msgid:t.msgid,args:t.args};null!=t.id&&(a.id=t.id),null!=t.nodeid&&(a.nodeid=t.nodeid),null!=t.tag&&(a.tag=t.tag),null!=t.url&&(a.url=t.url),null!=t.username&&(a.username=t.username),"number"==typeof t.maxtime&&(a.maxtime=t.maxtime),addNotification(a)}else if("userSessions"==t.type&&null!=currentNode&&currentNode._id==t.nodeid&&null==desktop){var l=[];if(null!=t.data)for(var i in t.data)"Active"!=t.data[i].State&&"Console"!=t.data[i].StationName&&3!=debugmode||l.push(t.data[i]);if(0==l.length)connectDesktop(null,1,null,t.tag);else if(1==l.length)connectDesktop(null,1,l[0].SessionId,t.tag);else{var r="";for(i in l)r+='<div style="text-align:left;cursor:pointer;background-color:gray;margin:5px;padding:5px;border-radius:5px" onclick=connectDesktop(event,1,'+l[i].SessionId+","+t.tag+")>"+l[i].State+", "+l[i].StationName,l[i].Username&&(l[i].Domain?r+=" - "+l[i].Domain+"/"+l[i].Username:r+=" - "+l[i].Username),r+="</div>";QH("p11DeskSessionSelector",r),QV("p11DeskSessionSelector",!0)}}}else"notify"==t.type&&(a={text:t.value,title:t.title,icon:t.icon,titleid:t.titleid,msgid:t.msgid,args:t.args},null!=t.id&&(a.id=t.id),null!=t.tag&&(a.tag=t.tag),null!=t.url&&(a.url=t.url),null!=t.username&&(a.username=t.username),"number"==typeof t.maxtime&&(a.maxtime=t.maxtime),addNotification(a));break;case"getnetworkinfo":if(currentNode._id!=t.nodeid)return;updateDeviceDetails(getNodeFromId(t.nodeid),null,t);break;case"getNotes":(a=Q("d2devNotes"))&&t.id==decodeURIComponent(a.attributes.noteid.value)&&(t.notes?QH("d2devNotes",decodeURIComponent(t.notes)):QH("d2devNotes",""),0==("true"==a.attributes.ro.value))&&(a.removeAttribute("readonly"),QE("idx_dlgOkButton",!0),QV("idx_dlgOkButton",!0),focusTextBox("d2devNotes"));break;case"otpauth-request":var d;2==xxdialogMode&&"otpauth-request"==xxdialogTag&&(null!=t.err?(d=["","2FA è bloccato","I codici di backup sono bloccati","Token di accesso in uso","OTP 2FA non consentito","L'account è bloccato","Impossibile caricare OTPLIB"],0<t.err&&t.err<d.length?QH("d2optinfo",d[t.err]):QH("d2optinfo",format("Errore n.{0}",t.err))):(52==(d=t.secret).length?d=d.split(/(.............)/).filter(Boolean).join(" "):32==d.length&&(d=(d=d.split(/(....)/).filter(Boolean).join(" ")).substring(0,20)+"<br/>"+d.substring(20)),QH("d2optinfo",format('Installa <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" rel="noreferrer noopener" target=_blank> Google Authenticator </a> o un\'applicazione compatibile, utilizza <a href="{0}" rel="noreferrer noopener" target=_blank> questo link </a> o inserisci il segreto di seguito. Quindi, inserisci l\'attuale token a 6 cifre per attivare l\'accesso in 2 passaggi.',t.url)+'<br /><br /><div style=width:100%;text-align:center><tt id=d2optsecret secret="'+t.secret+'" style=font-size:15px>'+d+'</tt><br /><br />Token: <input type=text autocomplete="one-time-code" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" onkeyup=account_addOtpCheck(event) onkeydown=account_addOtpCheck() maxlength=6 id=d2otpauthinput type=text></div>'),QV("idx_dlgOkButton",!0),QE("idx_dlgOkButton",!1),Q("d2otpauthinput").focus()));break;case"otpauth-setup":if(xxdialogMode)return;setDialogMode(2,"App Autenticatrice",1,null,t.success?"<b style=color:green>autenticazione a 2 fattori attivata con successo</b>. Ora avrai bisogno di un token valido per accedere nuovamente.":"<b style=color:red>attivazione autenticazione a 2 fattori fallita</b>. Cancella il segreto dall'applicazione e riprova. Hai solo pochi minuti per inserire il codice corretto.");break;case"otpauth-clear":if(xxdialogMode)return;setDialogMode(2,"App Autenticatrice",1,null,t.success?"<b style=color:green>autenticazione a due fattori rimossa</b>. Puoi riattivare questa funzione in qualsiasi momento.":"<b style=color:red>Impossibile rimuovere l'autenticazione a due fattori</b>. Riprova.");break;case"otpauth-getpasswords":if(xxdialogMode)return;r="I token una tantum possono essere utilizzati come autenticazione secondaria. Genera un set, stampali e conservali in un luogo sicuro.";if(r+="<div style='border-radius:6px;border: 2px dashed #888;width:100%;margin-top:8px'><div style='padding:8px;font-family:Arial, Helvetica, sans-serif;font-size:20px;font-weight:bold'><table style=width:100%;text-align:center>",t.passwords){var c=0;for(i in t.passwords){++c%2&&(r+="<tr>");for(var u=""+t.passwords[i].p;u.length<8;)u="0"+u;!0===t.passwords[i].u?r+="<td>"+u.substring(0,4)+"&nbsp;"+u.substring(4):r+="<td><strike style=color:#BBB>"+u.substring(0,4)+"&nbsp;"+u.substring(4)}}else r+="<tr><td>Nessun token attivo";r=(r+="</table></div></div><br />")+"<div><input type=button value='Chiudere' onclick=setDialogMode(0) style=float:right></input>"+"<input type=button value='New Tokens' onclick='account_manageOtp(1);'></input>",null!=t.passwords&&(r+="<input type=button value='Pulire' onclick='account_manageOtp(2);'></input>"),setDialogMode(2,"Gestisci codici di backup",8,null,r+="</div><br />","otpauth-manage");break;case"verifyPhone":if(xxdialogMode&&"verifyPhone"!=xxdialogTag)return;setDialogMode(2,"Notifiche telefoniche",3,account_managePhoneConfirm,r=(r='<table><tr><td><img src="images/phone80.png" style=padding:8px>')+"<td>Check your phone and enter the verification code."+'<br /><br /><div style=width:100%;text-align:center>Codice di verifica:  <input type=tel pattern="[0-9]" inputmode="number" maxlength=6 id=d2phoneCodeInput onKeyUp=account_managePhoneCodeValidate() onkeypress="if (event.key==\'Enter\') account_managePhoneCodeValidate(1)"></div></table>',t.cookie),Q("d2phoneCodeInput").focus(),account_managePhoneCodeValidate();break;case"previousLogins":if(2==xxdialogMode&&"previousLogins"==xxdialogTag){var r="",p="BBB";if(0==t.events.length)r+="No previous login.";else{for(var i in r+="<div style=max-height:260px;overflow-y:scroll;overflow-x:hidden>",t.events)107==(o=t.events[i].m)?(o="Accesso valido",p="BBD1BB",0):108==o?(o="2FA non valido",p="DD9DC3",0):109==o?(o="Account bloccato",p="E1BBBB",0):110==o&&(o="Password non valida",p="E1BBBB",0),r+="<div style=width:260px;background-color:#"+p+";border-radius:6px;margin-bottom:4px;padding:4px><div><b>"+EscapeHtml(o)+"</b><br />"+printDateTime(new Date(t.events[i].t))+"</div><div style=font-size:x-small>"+EscapeHtml(t.events[i].a.join(", "))+"</div></div></tr>";r+="</div>"}setDialogMode(2,"Login precedenti",1,null,r)}break;case"event":if(!t.event.noact)switch(t.event.action){case"serverinfochange":null!=t.event.lock2factor&&(serverinfo.lock2factor=t.event.lock2factor,updateSelf());break;case"userWebState":if(null!=localStorage){var m=JSON.parse(t.event.state);for(i in m)localStorage.setItem(i,m[i]);if(null!=m.stars&&(stars=JSON.parse(m.stars)),null!=m.loctag&&m.loctag!=oldLoctag?(null!=m.loctag?args.locale=m.loctag:delete args.locale,mainUpdate(132)):null!=m.stars&&(mainUpdate(4),"*"==Q("SearchInput").value)&&onSearchInputChanged(),currentNode&&refreshDevice(currentNode._id),null!=m.deskKeyShortcuts){deskKeyboardShortcuts=[];var g=m.deskKeyShortcuts.split(",");for(i in g)deskKeyboardShortcuts.push(parseInt(g[i]));updateDeskShortcutKeys()}}break;case"accountchange":if("object"!=typeof t.event.account||null==t.event.account)return void console.log(t.event);userinfo.name==t.event.account.name&&(t.event.account.siteadmin,userinfo.siteadmin,(t.event.account.quota!=userinfo.quota||0==(8&userinfo.siteadmin)&&0!=(8&t.event.account.siteadmin))&&meshserver.send({action:"files"}),userinfo=t.event.account,updateSelf(),t.event.nodeListChange==userinfo._id)&&meshserver.send({action:"nodes",skip:null==devicePagingState?0:devicePagingState.skip});break;case"createusergroup":case"usergroupchange":var h=(usergroups=null==usergroups?{}:usergroups)[t.event.ugrpid];null==h?usergroups[t.event.ugrpid]={_id:t.event.ugrpid,name:t.event.name,desc:t.event.desc,domain:t.event.domain,links:t.event.links}:(h.name=t.event.name,h.desc=t.event.desc,h.links=t.event.links,h.flags=t.event.flags),meshserver.send({action:"meshes"}),meshserver.send({action:"nodes",skip:null==devicePagingState?0:devicePagingState.skip});break;case"deleteusergroup":if(null!=usergroups&&null!=usergroups[t.event.ugrpid]){delete usergroups[t.event.ugrpid];p=0;for(i in usergroups)p++;0==p&&(usergroups=null)}break;case"createmesh":null!=meshes[t.event.meshid]||!userinfo.manageAllDeviceGroups&&null==t.event.mesh.links[userinfo._id]||(meshes[t.event.meshid]=t.event.mesh,mainUpdate(132),meshserver.send({action:"files"}));break;case"meshchange":if(null==meshes[t.event.meshid]){var f=!1;for(i in null!=t.event.links[userinfo._id]&&(f=!0),null!=userinfo.links[t.event.meshid]&&(f=!0),userinfo.links)i.startsWith("ugrp/")&&null!=t.event.links[i]&&(f=!0);f&&(meshes[t.event.meshid]={_id:t.event.meshid,name:t.event.name,mtype:t.event.mtype,desc:t.event.desc,links:t.event.links,relayid:t.event.relayid},meshserver.send({action:"nodes",skip:null==devicePagingState?0:devicePagingState.skip}))}else{if(meshes[t.event.meshid].name!=t.event.name)for(var i in meshes[t.event.meshid].name=t.event.name,nodes)nodes[i].meshid==t.event.meshid&&(nodes[i].meshnamel=t.event.name.toLowerCase());if(meshes[t.event.meshid].desc=t.event.desc,meshes[t.event.meshid].links=t.event.links,null!=t.event.relayid&&(meshes[t.event.meshid].relayid=t.event.relayid),0==IsMeshViewable(t.event.meshid)){20==xxcurrentView&&currentMesh==meshes[t.event.meshid]&&go(2),delete meshes[t.event.meshid];var v=[];for(i in nodes)(nodes[i].meshid!=t.event.meshid||null!=userinfo.links&&null!=userinfo.links[nodes[i]._id])&&v.push(nodes[i]);nodes=v,10<=xxcurrentView&&xxcurrentView<20&&currentNode&&!IsNodeViewable(currentNode)&&(setDialogMode(0),go(2),currentNode=null)}}mainUpdate(132),meshserver.send({action:"files"}),20==xxcurrentView&&currentMesh._id==t.event.meshid&&p20updateMesh();break;case"deletemesh":meshes[t.event.meshid]&&(delete meshes[t.event.meshid],updateMeshes(),meshserver.send({action:"files"}));v=[];for(i in nodes)nodes[i].meshid!=t.event.meshid&&v.push(nodes[i]);nodes=v,mainUpdate(4),20<=xxcurrentView&&xxcurrentView<30&&currentMesh._id==t.event.meshid&&(setDialogMode(0),go(2)),10<=xxcurrentView&&xxcurrentView<20&&currentNode&&!IsNodeViewable(currentNode)&&(setDialogMode(0),go(2));break;case"addnode":var k=t.event.node;meshes[k.meshid]&&null==getNodeFromId(k._id)&&(k.namel=k.name.toLowerCase(),k.rname?k.rnamel=k.rname.toLowerCase():k.rnamel=k.namel,k.meshnamel=meshes[k.meshid]?meshes[k.meshid].name.toLowerCase():"*",k.state=0,k.icon||(k.icon=1),k.ident=++nodeShortIdent,nodes.push(k),mainUpdate(4));break;case"removenode":s=-1;for(i in nodes)if(nodes[i]._id==t.event.nodeid){s=i;break}-1!=s&&(k=nodes[s],currentNode==k&&(10<=xxcurrentView&&xxcurrentView<20&&(setDialogMode(0),go(2)),currentNode=null),nodes.splice(s,1),mainUpdate(4));break;case"changenode":s=-1;for(i in nodes)if(nodes[i]._id==t.event.nodeid){s=i;break}-1!=s&&((k=nodes[s]).name=t.event.node.name,k.rname=t.event.node.rname,k.host=t.event.node.host,k.desc=t.event.node.desc,k.publicip=t.event.node.publicip,k.iploc=t.event.node.iploc,k.wifiloc=t.event.node.wifiloc,k.gpsloc=t.event.node.gpsloc,k.tags=t.event.node.tags,k.ssh=t.event.node.ssh,k.rdp=t.event.node.rdp,k.userloc=t.event.node.userloc,k.rdpport=t.event.node.rdpport,k.rfbport=t.event.node.rfbport,k.sshport=t.event.node.sshport,k.httpport=t.event.node.httpport,k.httpsport=t.event.node.httpsport,k.consent=t.event.node.consent,k.pmt=t.event.node.pmt,null!=t.event.node.agent&&(null==k.agent&&(k.agent={}),null!=t.event.node.agent.ver&&(k.agent.ver=t.event.node.agent.ver),null!=t.event.node.agent.id&&(k.agent.id=t.event.node.agent.id),null!=t.event.node.agent.caps&&(k.agent.caps=t.event.node.agent.caps),null!=t.event.node.agent.root&&(k.agent.root=t.event.node.agent.root),null!=t.event.node.agent.core?k.agent.core=t.event.node.agent.core:k.agent.core&&delete k.agent.core,k.agent.tag=t.event.node.agent.tag),null!=t.event.node.intelamt&&(null==k.intelamt&&(k.intelamt={}),null!=t.event.node.intelamt.state&&(k.intelamt.state=t.event.node.intelamt.state),null!=t.event.node.intelamt.host&&(k.intelamt.user=t.event.node.intelamt.host),null!=t.event.node.intelamt.user&&(k.intelamt.user=t.event.node.intelamt.user),null!=t.event.node.intelamt.tls&&(k.intelamt.tls=t.event.node.intelamt.tls),null!=t.event.node.intelamt.ver&&(k.intelamt.ver=t.event.node.intelamt.ver),null!=t.event.node.intelamt.tag&&(k.intelamt.tag=t.event.node.intelamt.tag),null!=t.event.node.intelamt.uuid&&(k.intelamt.uuid=t.event.node.intelamt.uuid),null!=t.event.node.intelamt.realm&&(k.intelamt.realm=t.event.node.intelamt.realm),null!=t.event.node.intelamt.flags&&(k.intelamt.flags=t.event.node.intelamt.flags),null!=t.event.node.intelamt.warn?k.intelamt.warn=t.event.node.intelamt.warn:delete k.intelamt.warn),null!=t.event.node.av&&(k.av=t.event.node.av),null!=t.event.node.wsc&&(k.wsc=t.event.node.wsc),k.namel=k.name.toLowerCase(),k.rname?k.rnamel=k.rname.toLowerCase():k.rnamel=k.namel,t.event.node.icon&&(k.icon=t.event.node.icon),refreshDevice(k._id),updateDeviceViewDevice(k),currentNode==k)&&updateDeviceDetails();break;case"nodemeshchange":s=-1;for(i in nodes)if(nodes[i]._id==t.event.nodeid){s=i;break}if(-1!=s){k=nodes[s];null!=meshes[t.event.newMeshId]||null!=userinfo.links&&null!=userinfo.links[k._id]?(k.meshid=t.event.newMeshId,k.meshnamel=meshes[t.event.newMeshId]?meshes[t.event.newMeshId].name.toLowerCase():"*"):(10<=xxcurrentView&&xxcurrentView<20&&currentNode&&!IsNodeViewable(currentNode)&&(setDialogMode(0),go(2),currentNode=null),nodes.splice(s,1)),mainUpdate(4),refreshDevice(t.event.nodeid)}else{k=t.event.node;if(!meshes[k.meshid])break;k.namel=k.name.toLowerCase(),k.rname?k.rnamel=k.rname.toLowerCase():k.rnamel=k.namel,k.meshnamel=meshes[k.meshid]?meshes[k.meshid].name.toLowerCase():"*",k.state=0,k.icon||(k.icon=1),k.ident=++nodeShortIdent,nodes.push(k),mainUpdate(4)}break;case"nodeconnect":s=-1;for(i in nodes)if(nodes[i]._id==t.event.nodeid){s=i;break}-1!=s&&((k=nodes[s]).conn=t.event.conn,k.pwr=t.event.pwr,0==(1&k.conn)&&delete k.sessions,refreshDevice(k._id),updateDeviceViewDevice(k));break;case"login":null!=users&&users["user/"+domain+"/"+t.event.username.toLowerCase()]&&(users["user/"+domain+"/"+t.event.username.toLowerCase()].login=t.event.time);break;case"notify":a={text:t.event.value,title:t.event.title,icon:t.event.icon,titleid:t.titleid,msgid:t.msgid,args:t.args};null!=t.id&&(a.id=t.id),null!=t.event.tag&&(a.tag=t.event.tag),"number"==typeof t.maxtime&&(a.maxtime=t.maxtime),addNotification(a);break;case"sysinfohash":null!=currentNode&&t.event.nodeid==powerTimelineReq&&meshserver.send({action:"getsysinfo",nodeid:t.event.nodeid});break;case"ifchange":null!=currentNode&&currentNode._id==t.event.nodeid&&meshserver.send({action:"getnetworkinfo",nodeid:currentNode._id});break;case"devicesessions":if(null!=(k=getNodeFromId(t.event.nodeid))){if(k.sessions=t.event.sessions,null!=k.sessions){for(var i in k.sessions)0==Object.keys(k.sessions[i]).length&&delete k.sessions[i];0==Object.keys(k.sessions).length&&delete k.sessions}refreshDevice(t.event.nodeid),updateDeviceViewDevice(k),xxdialogTag=="SESSIONS-"+t.event.nodeid&&showDeviceSessions(t.event.nodeid,!0),xxdialogTag=="HELPREQ-"+t.event.nodeid&&showDeviceHelpRequests(t.event.nodeid,!0)}}}}check_webp_feature("lossy",function(e,t){webpSupport=t});var updateNaggleTimer=null,updateNaggleFlags=0;function mainUpdate(e){updateNaggleFlags|=e,null==updateNaggleTimer&&(updateNaggleTimer=setTimeout(function(){1&updateNaggleFlags&&onSearchInputChanged(),4&updateNaggleFlags&&(updateDevices(),updateDeviceDetails()),128&updateNaggleFlags&&updateMeshes(),updateNaggleTimer=null,updateNaggleFlags=0,gotoStartViewPage()},150))}function gotoStartViewPage(){var e=parseInt("{{viewmode}}");if(!(1<xxcurrentView)){if(""!="{{currentNode}}".toLowerCase()){if(null==getNodeFromId("{{currentNode}}"))return;gotoDevice("{{currentNode}}",e)}else if(null!=args.gotonode){if(96==args.gotonode.length&&(args.gotonode=btoa(hex2rstr(args.gotonode)).split("+").join("@").split("/").join("$")),null==getNodeFromId("node/"+domain+"/"+args.gotonode))return;args.panel&&(currentDevicePanel=parseInt(args.panel)),gotoDevice("node/"+domain+"/"+args.gotonode,e)}else if(null!=args.gotodevicename){var t=null;if(null!=nodes)for(var o in nodes)nodes[o].name==args.gotodevicename&&(t=nodes[o]._id);t&&(gotoDevice(t,e),go(e))}else if(null!=args.gotomesh){if(null==meshes["mesh/"+domain+"/"+args.gotomesh])return;gotoMesh("mesh/"+domain+"/"+args.gotomesh),go(e)}else isNaN(e)?(setDialogMode(0),go(1)):go(e);delete args.gotonode,delete args.gotomesh,delete args.panel,xxcurrentView<2&&go(2)}}function topMenu(e){null!=xxdialogMode&&0!=xxdialogMode&&999!=xxdialogMode||(void 0===e?1==("none"==QS("topMenu").display)?0!=xxdialogMode&&null!=xxdialogMode||(QV("topMenu",!0),xxdialogMode=999):(QV("topMenu",!1),xxdialogMode=0):(QV("topMenu",!1),xxdialogMode=0,1==e&&3!=xxcurrentView&&goForward("account"),2==e&&5!=xxcurrentView&&goForward("files")))}var filetreelinkpath,backStack=[];function goBack(){xxdialogMode||(0<backStack.length&&backStack.pop(),goStack())}function goForward(e){xxdialogMode||(backStack.push(e),goStack())}function goStack(){var e,t;0==backStack.length?go(2):("node"==(t=(e=backStack[backStack.length-1]).split("/")[0])&&(setupDeviceMenu(0),gotoDevice(e)),"mesh"==t&&gotoMesh(e),"account"==t&&go(3),"devices"==t&&go(2),"files"==t&&go(5))}function updateFooterMenu(e){for(;null!=e&&e.length<3;)e.push({n:""});var t="",o="";if(null!=e)for(var n in e)t+='<td style="cursor:pointer'+(""==o?"":";border-left:solid 1px white")+'" onclick="'+e[n].f+'">'+e[n].n,o=e[n].n;QH("footerMenu","<tr>"+t)}function account_viewPreviousLogins(){xxdialogMode||(setDialogMode(2,"Login precedenti",1,null,"Caricamento in corso...","previousLogins"),meshserver.send({action:"previousLogins"}))}function account_manageImage(e){var t,o,n,i;xxdialogMode||(setDialogMode(2,"Gestisci l'immagine dell'account",7,account_manageImageEx2,'<input id=p2file type=file style=width:100% accept="image/*" onchange=account_manageImageEx()><div style=width:100%><canvas id=p2canvas width=256 height=256 style="width:256px;height:256px;margin-left:12px;margin-top:8px;border-radius:16px;box-shadow: 0px 0px 15px #000" onclick=account_canvasClick() /></div>',(t=0==e?userinfo:currentUser)._id),o=Q("p2canvas").getContext("2d"),null==t.accountImageRnd&&(t.accountImageRnd=Math.floor(9999999999*Math.random())),n="",1==e&&(n="&id="+t._id.split("/")[2]),(i=new Image).onload=function(){o.clearRect(0,0,256,256),o.drawImage(i,0,0)},i.src=null!=t.flags&&1&t.flags?"userimage.ashx?rnd="+t.accountImageRnd+n:"images/user-256.png",QE("idx_dlgDeleteButton",null!=t.flags&&1&t.flags),QE("idx_dlgOkButton",!1))}function account_canvasClick(){Q("p2file").click()}function account_manageImageEx(){var e=Q("p2file").files[0],i=new Image;i.onload=function(){var e=0,t=0,o=Math.min(i.width,i.height),n=(i.width>o&&(e=(i.width-o)/2),i.height>o&&(t=(i.height-o)/2),Q("p2canvas").getContext("2d"));n.imageSmoothingEnabled=!0,n.webkitImageSmoothingEnabled=!0,n.mozImageSmoothingEnabled=!0,n.clearRect(0,0,256,256),n.drawImage(i,e,t,o,o,0,0,256,256),QE("idx_dlgOkButton",!0)},i.src=URL.createObjectURL(e)}function account_manageImageEx2(e,t){meshserver.send({action:"updateUserImage",userid:t,image:2==e?0:Q("p2canvas").toDataURL("image/jpeg",.8)})}function toggleNightMode(){var e;xxdialogMode||(setDialogMode(2,"Modalità notturna",3,toggleNightModeEx,"<input type=radio id=night0 name=nightmoderadio value=0 "+(0==(e=getstore("nightMode","0"))?"checked":"")+"><label for=night0>Impostazioni predefinite del browser</label><br>"+("<input type=radio id=night2 name=nightmoderadio value=2 "+(2==e?"checked":"")+"><label for=night2>Modalità luce</label><br>")+("<input type=radio id=night1 name=nightmoderadio value=1 "+(1==e?"checked":"")+"><label for=night1>Modalità scura</label><br>")),QV("uiMenu",!1))}function toggleNightModeEx(){var e="0";Q("night1").checked&&(e="1"),putstore("nightMode",e=Q("night2").checked?"2":e),setNightMode()}function setNightMode(){var e=getstore("nightMode","0");return nightMode=!1,0!=(1048576&features2)&&(e="1"),"1"==(e=0!=(2097152&features2)?"2":e)?nightMode=!0:"0"==e&&window.matchMedia&&(nightMode=window.matchMedia("(prefers-color-scheme: dark)").matches),nightMode?(QC("body").add("night"),QS("body")["background-color"]="#000",QS("body").color="lightgray"):(QC("body").remove("night"),QS("body")["background-color"]="#FFF",QS("body").color="black"),nightMode}function account_managePhone(){xxdialogMode||0==(33554432&features)||(null!=userinfo.phone?(setDialogMode(2,"Notifiche telefoniche",3,account_managePhoneRemove,'<table style=width:100%><tr><td style=width:56px><img src="images/phone80.png" style=padding:8px>'+("<td style=text-align:center><div style=padding:6px>Numero di telefono verificato</div><div style=font-size:20px>"+userinfo.phone+"</div>")+"<div style=margin:10px><label><input id=d2delPhone type=checkbox onclick=account_managePhoneRemoveValidate() />Rimuovi il numero di telefono</label></div>"),account_managePhoneRemoveValidate):(setDialogMode(2,"Notifiche telefoniche",3,account_managePhoneAdd,'<table style=width:100%><tr><td style=width:56px><img src="images/phone80.png" style=padding:8px>'+"<td>Enter your SMS capable phone number. Once verified, the number may be used for login verification and other notifications."+'<br /><br /><div style=width:100%;text-align:center>Numero di telefono: <input type=tel pattern="[0-9]" autocomplete="tel" inputmode="tel" maxlength=18 id=d2phoneinput onKeyUp=account_managePhoneValidate() onkeypress="if (event.key==\'Enter\') account_managePhoneValidate(1)"></div></table>',"verifyPhone"),Q("d2phoneinput").focus(),account_managePhoneValidate))()}function isPhoneNumber(e){return e.match(/^\(?([0-9]{3,4})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/)}function account_managePhoneValidate(e){var t=isPhoneNumber(Q("d2phoneinput").value);QE("idx_dlgOkButton",t),1==e&&t&&dialogclose(1)}function account_managePhoneCodeValidate(e){var t=6==Q("d2phoneCodeInput").value.length&&Q("d2phoneCodeInput").value.match(/[0-9]/);QE("idx_dlgOkButton",t),1==e&&t&&dialogclose(1)}function account_managePhoneConfirm(e,t){meshserver.send({action:"confirmPhone",code:Q("d2phoneCodeInput").value,cookie:t})}function account_managePhoneAdd(){0!=isPhoneNumber(Q("d2phoneinput").value)&&(QE("d2phoneinput",!1),meshserver.send({action:"verifyPhone",phone:Q("d2phoneinput").value}))}function account_managePhoneRemove(){Q("d2delPhone").checked&&meshserver.send({action:"removePhone"})}function account_managePhoneRemoveValidate(){QE("idx_dlgOkButton",Q("d2delPhone").checked)}function account_manageAuthEmail(){var e;xxdialogMode||0==(8388608&features)||setDialogMode(2,"Autenticazione e-mail",1,function(){e!=Q("email2facheck").checked&&meshserver.send({action:"otpemail",enabled:Q("email2facheck").checked})},"Quando abilitato, ad ogni accesso, ti verrà data la possibilità di ricevere un token di accesso al tuo account e-mail per una maggiore sicurezza. <br /><br /><label><input id=email2facheck type=checkbox "+((e=1==userinfo.otpekey&&null!=userinfo.email&&1==userinfo.emailVerified)?"checked":"")+"/>Abilita l'autenticazione a due fattori della posta elettronica.</label>")}function account_manageAuthApp(){xxdialogMode||0==(4096&features)||(1==userinfo.otpsecret?account_removeOtp:account_addOtp)()}function account_addOtp(){xxdialogMode||1==userinfo.otpsecret||0==(4096&features)||(setDialogMode(2,"App Autenticatrice",2,function(){meshserver.send({action:"otpauth-setup",secret:Q("d2optsecret").attributes.secret.value,token:Q("d2otpauthinput").value})},"<div id=d2optinfo>Caricamento in corso...</div>","otpauth-request"),meshserver.send({action:"otpauth-request"}))}function account_addOtpCheck(e){var t=6==Q("d2otpauthinput").value.length;QE("idx_dlgOkButton",t),e&&13==e.keyCode&&t&&dialogclose(1)}function account_removeOtp(){xxdialogMode||1!=userinfo.otpsecret||0==(4096&features)||setDialogMode(2,"App Autenticatrice",3,function(){meshserver.send({action:"otpauth-clear"})},"Confermare la rimozione dell'applicazione di autenticazione accesso in 2 passaggi?")}function account_manageOtp(e){2==xxdialogMode&&"otpauth-manage"==xxdialogTag&&dialogclose(0),xxdialogMode||0==(4096&features)||1!=userinfo.otpsecret&&userinfo.otphkeys<1||meshserver.send({action:"otpauth-getpasswords",subaction:e})}function account_showVerifyEmail(){xxdialogMode||1==userinfo.emailVerified||1!=serverinfo.emailcheck||setDialogMode(2,"verifica email",3,account_showVerifyEmailEx,"Fare clic su OK per inviare un'e-mail di verifica a:<br /><div style=padding:8px><b>"+EscapeHtml(userinfo.email)+"</b></div>Attendi qualche minuto per ricevere la verifica.")}function account_showVerifyEmailEx(){meshserver.send({action:"verifyemail",email:userinfo.email})}function account_showChangeEmail(){xxdialogMode||(setDialogMode(2,"Modifica dell'indirizzo e-mail",3,account_changeEmail,addHtmlValue("E-mail","<input id=dp3email style=width:170px maxlength=256 onchange=account_validateEmail() onkeyup=account_validateEmail(event) />")),null!=userinfo.email&&(Q("dp3email").value=userinfo.email),account_validateEmail(),Q("dp3email").focus())}function account_validateEmail(e,t){QE("idx_dlgOkButton",validateEmail(Q("dp3email").value)&&Q("dp3email").value!=userinfo.email),null!=e&&13==e.keyCode&&dialogclose(1)}function account_changeEmail(){meshserver.send({action:"changeemail",email:Q("dp3email").value})}function account_showDeleteAccount(){xxdialogMode||(setDialogMode(2,"Eliminare l'account",0,null,"<form method=post><table style=margin-left:10px><input type=hidden name=action value=deleteaccount /><input type=hidden name=authcookie value="+authCookie+" /><tr>"+"<td align=right>Password:</td><td><input id=apassword1 type=password name=apassword1 autocomplete=off onchange=account_validateDeleteAccount() onkeyup=account_validateDeleteAccount() /></td>"+"</tr><tr><td align=right>Password:</td><td><input id=apassword2 type=password name=apassword2 autocomplete=off onchange=account_validateDeleteAccount() onkeyup=account_validateDeleteAccount() /></td>"+"</tr></table><div style=padding:10px;margin-bottom:4px>"+'<input id=account_dlgCancelButton type=button value="Annulla" style=float:right;width:80px;margin-left:5px onclick=dialogclose(0)>'+'<input id=account_dlgOkButton type=submit value="OK" style="float:right;width:80px" onclick=dialogclose(1)>'+"</div><br /></form>"),account_validateDeleteAccount(),Q("apassword1").focus())}function account_showChangePassword(){if(!xxdialogMode){var e="<table style=margin-left:10px>",e=(e=(e+="<tr><td align=right>"+nobreak("Vecchia password: ")+"</td><td><input id=apassword0 type=password name=apassword0 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /> <b></b></td></tr>")+("<tr><td align=right>"+nobreak("Nuova password: ")+"</td><td><input id=apassword1 type=password name=apassword1 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /> <b><span id=dxPassWarn></span></b></td></tr>"))+("<tr><td align=right>"+nobreak("Nuova password: ")+"</td><td><input id=apassword2 type=password name=apassword2 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /></td></tr>");if(65536&features&&(e+="<tr><td align=right>Suggerimento password: </td><td><input id=apasswordhint name=apasswordhint maxlength=250 type=text autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /></td></tr>"),e+="</table>",passRequirements){var t,o=[],n=0;for(t in passRequirements)"reset"!=t&&"hint"!=t&&(o.push(t+":"+passRequirements[t]),n++);0<n&&(e+="<br /><span style=font-size:x-small>"+format("Requisiti: {0}.",o.join(", "))+"</span>")}setDialogMode(2,"Cambia la password",3,account_showChangePasswordEx,e+="<br />"),Q("apassword0").focus(),account_validateNewPassword()}return!1}function account_showChangePasswordEx(){var e;Q("apassword1").value==Q("apassword2").value&&(e={action:"changepassword",oldpass:Q("apassword0").value,newpass:Q("apassword1").value},65536&features&&(e.hint=Q("apasswordhint").value),meshserver.send(e))}function account_createMesh(){var e;xxdialogMode||(4294967295!=userinfo.siteadmin&&0!=(64&userinfo.siteadmin)?setDialogMode(2,"Nuovo gruppo di dispositivi ",1,null,"Questo account non ha i diritti per creare un nuovo gruppo di dispositivi."):!0!==userinfo.emailVerified&&1==serverinfo.emailcheck&&4294967295!=userinfo.siteadmin?setDialogMode(2,"Sicurezza dell 'Account",1,null,'Impossibile accedere a un dispositivo finché non viene verificato un indirizzo e-mail. Questo è necessario per il recupero della password. Vai a "Il mio account" per modificare e verificare un indirizzo email. '):262144&features&&!(1==userinfo.otpsecret||0<userinfo.otphkeys||0<userinfo.otpkeys||8388608&features&&1==userinfo.otpekey)?setDialogMode(2,"Sicurezza dell 'Account",1,null,'Impossibile accedere a un dispositivo finché non viene abilitata l\'autenticazione a due fattori. Questo è necessario per una maggiore sicurezza. Vai a "Il mio account" e guarda la sezione "Sicurezza dell\'account". '):(e=addHtmlValue("Nome","<input id=dp3meshname style=width:170px maxlength=64 onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate() />"),setDialogMode(2,"Crea gruppo di dispositivi",3,account_createMeshEx,e=(e+=addHtmlValue("Digita","<div style=width:170px;margin:0;padding:0><select id=dp3meshtype style=width:100% onchange=account_validateMeshCreate() ><option value=2>Gruppo di agenti software</option><option value=1>Intel & reg; Solo AMT</option></select></div>"))+addHtmlValue("Descrizione","<div style=width:170px;margin:0;padding:0><textarea id=dp3meshdesc maxlength=1024 style=width:100%;resize:none></textarea></div>")),account_validateMeshCreate(),Q("dp3meshname").focus()))}function account_validateMeshCreate(){QE("idx_dlgOkButton",0<Q("dp3meshname").value.length)}function account_createMeshEx(e,t){meshserver.send({action:"createmesh",meshname:Q("dp3meshname").value,meshtype:parseInt(Q("dp3meshtype").value),desc:Q("dp3meshdesc").value})}function account_validateDeleteAccount(){QE("account_dlgOkButton",0<Q("apassword1").value.length&&Q("apassword1").value==Q("apassword2").value)}function account_validateNewPassword(){var e,t="",o=0<Q("apassword0").value.length&&0<Q("apassword1").value.length&&Q("apassword1").value==Q("apassword2").value&&Q("apassword0").value!=Q("apassword1").value;65536&features&&Q("apasswordhint").value==Q("apassword1").value&&(o=!1),""!=Q("apassword1").value&&(null==passRequirements||""==passRequirements?t=80<=(e=checkPasswordStrength(Q("apassword1").value))?"<span style=color:green>Strong<span>":60<=e?"<span style=color:blue>&#9679;<span>":"<span style=color:red>&#9679;<span>":0==checkPasswordRequirements(Q("apassword1").value,passRequirements)&&(o=!1,t="<span style=color:red>Politica<span>")),QH("dxPassWarn",t),QE("idx_dlgOkButton",o)}function checkPasswordStrength(e){var t=0,o={},n=0,i={digits:/\d/.test(e),lower:/[a-z]/.test(e),upper:/[A-Z]/.test(e),nonWords:/\W/.test(e)};if(!e)return 0;for(var a,s=0;s<e.length;s++)o[e[s]]=(o[e[s]]||0)+1,t+=5/o[e[s]];for(a in i)n+=1==i[a]?1:0;return parseInt(t+10*(n-1))}function checkPasswordRequirements(e,t){if(null==t||""==t||"object"!=typeof t)return!0;if(t.min&&e.length<t.min)return!1;if(t.max&&e.length>t.max)return!1;for(var o=0,n=0,i=0,a=0,s=0;s<e.length;s++)/\d/.test(e[s])&&o++,/[a-z]/.test(e[s])&&n++,/[A-Z]/.test(e[s])&&i++,/\W/.test(e[s])&&a++;return!(t.numeric&&o<t.numeric||t.lower&&n<t.lower||t.upper&&i<t.upper||t.nonalpha&&a<t.nonalpha)}function updateMeshes(){var e="",t=0;for(i in meshes){t++;var o=GetMeshRights(meshes[i]),n="Diritti parziali ";4294967295==o?n="Amministratore completo":0==o&&(n="Nessun diritto"),e=(e=(e+="<div style=cursor:pointer onclick=goForward('"+i+"')>")+'<div style="float:left;margin-left:4px"><img src="/images/meshicon50.png" width=50 height=50 /></div>'+"<div class=meshList>")+("<div><div style=color:black;padding-left:12px;padding-top:2px><b>"+EscapeHtml(meshes[i].name)+"</b></div><div style=padding-left:12px;padding-top:3px;color:black>"+n+"</div></div>")+"</div></div>"}QH("p3meshes",e),QV("p3noMeshFound",0==t)}function gotoMesh(e){null==(currentMesh=meshes[e])&&goBack(),p20updateMesh(),go(20)}var sortorder,filetreelocation=[];function p5refreshFiles(){meshserver.send({action:"files"})}function updateFiles(){if(QV("MainMenuMyFiles",0==(8&features)),0==(8&features)){for(var e,t,o="",n="",i="<a style=cursor:pointer;color:black onclick=p5folderup(0)>Root</a>",a="Root",s=filetree,l=1,r=[],d=filetreelinkpath,c=[],u=document.getElementsByName("fc"),p=0;p<u.length;p++)u[p].checked&&c.push(u[p].value);for(p in filetreelinkpath="",filetreelocation){if(null==s.f||null==s.f[filetreelocation[p]])break;r.push(filetreelocation[p]),a+=" / "+filetreelocation[p],1==l?(e=filetreelocation[p].split("/"),t=window.location+e[0]+"files/"+e[2],filetreelinkpath+=filetreelocation[p]):""!=filetreelinkpath&&(filetreelinkpath+="/"+filetreelocation[p],2<l)&&(t+="/"+filetreelocation[p]),s=s.f[filetreelocation[p]],i+=" / <a style=cursor:pointer;color:black onclick=p5folderup("+l+")>"+EscapeHtml(null!=s.n?s.n:filetreelocation[p])+"</a>",l++}filetreelocation=r;var m=a.toLowerCase().startsWith("root / "+userinfo._id+" / public"),g=p5sort_files(s.f);for(p in g){var h,f=g[p],v=f.n,k=40<v.length?EscapeHtml(v.substring(0,40))+"...":EscapeHtml(v),x="",y=(null!=f.s&&(x=getFileSizeStr(f.s)),"");y=f.t<3||4==f.t?(h=1==f.t||4==f.t?p5getQuotabar(f):"","<div class=filelist file=999><input file=999 style=float:left name=fc class=fcb type=checkbox onchange=p5setActions() value='"+EscapeHtml(v)+"'>&nbsp;<span style=float:right;padding-right:4px>"+h+"</span><span><div class=fileIcon"+f.t+'></div><a style=cursor:pointer onclick=p5folderset("'+encodeURIComponent(f.nx)+'")>'+k+"</a></span></div>"):(v=k,h="",m&&(h=" (<a style=cursor:pointer onclick='p5showPublicLink(\""+t+"/"+f.nx+"\")'>Collegamento</a>)"),0<f.s&&(v='<a rel="noreferrer noopener" target="_blank" href="downloadfile.ashx?link='+encodeURIComponent(filetreelinkpath+"/"+f.nx)+'">'+k+"</a>"+h),"<div class=filelist file=3><input file=3 style=float:left name=fc class=fcb type=checkbox onchange=p5setActions() value='"+f.nx+"'>&nbsp;<span style=float:right;padding-right:4px>"+EscapeHtml(x)+"</span><span><div class=fileIcon"+f.t+"></div>"+v+"</span></div>"),f.t<3?o+=y:n+=y}if(QH("p5rightOfButtons",p5getQuotabar(s)),QH("p5files",o+n),QH("p5currentpath",i),QE("p5FolderUp",0!=filetreelocation.length),QV("p5PublicShare",m),d==filetreelinkpath)for(u=document.getElementsByName("fc"),p=0;p<u.length;p++)u[p].checked=0<=c.indexOf(u[p].value);p5setActions()}}function getNiceSize(e){return e<=0?"Spazio di archiviazione superato":e<2048?format("{0} b rimanenti",e):e<2097152?format("{0} k rimanenti",Math.round(e/1024)):e<2147483648?format("{0} m rimanenti",Math.round(e/1024/1024)):format("{0} g rimanenti",Math.round(e/1024/1024/1024))}function p5getQuotabar(e){for(;1<e.t&&4!=e.t;)e=e.parent;return 1!=e.t&&4!=e.t||null==e.maxbytes?"":getNiceSize(e.maxbytes-e.s)+" <progress style=height:10px;width:100px value="+e.s+" max="+e.maxbytes+" />"}function p5showPublicLink(e){setDialogMode(2,"Public Link",1,null,'<input type=text style=width:100% value="'+e+'" readonly />')}function p5sort_filename(e,t){return e.ln>t.ln?+sortorder:e.ln<t.ln?-1*sortorder:0}function p5sort_timestamp(e,t){return e.d>t.d?+sortorder:e.d<t.d?-1*sortorder:0}function p5sort_bysize(e,t){return e.s==t.s?p5sort_filename(e,t):(e.s-t.s)*sortorder}function p5sort_files(e){var t,o=[],n=Q("p5sortdropdown").value;for(t in e)e[t].nx=t,null==e[t].n&&(e[t].n=t),e[t].ln=e[t].n.toLowerCase(),o.push(e[t]);return sortorder=1,3<n&&(sortorder=-1,n-=3),1==n?o.sort(p5sort_filename):2==n?o.sort(p5sort_bysize):3==n&&o.sort(p5sort_timestamp),o}function p5setActions(){var e=getFileSelCount(),t=getFileCount(),o=getFileSelCount(!1);QE("p5DeleteFileButton",0<e&&0<filetreelocation.length),QE("p5NewFolderButton",0<filetreelocation.length),QE("p5UploadButton",0<filetreelocation.length),QE("p5RenameFileButton",1==e&&0<filetreelocation.length),QE("p5SelectAllButton",0<t),Q("p5SelectAllButton").value=0<e?"Nessuna ":"Tutti",QE("p5CutButton",0<o&&e==o),QE("p5CopyButton",0<o&&e==o),QE("p5PasteButton",null!=p5clipboard&&0<p5clipboard.length&&0<filetreelocation.length)}function getFileSelCount(e){for(var t=0,o=document.getElementsByName("fc"),n=0;n<o.length;n++)!o[n].checked||0==e&&"3"!=o[n].attributes.file.value||t++;return t}function getFileSelDirCount(){for(var e=0,t=document.getElementsByName("fc"),o=0;o<t.length;o++)t[o].checked&&"999"==t[o].attributes.file.value&&e++;return e}function getFileCount(){return document.getElementsByName("fc").length}function p5selectallfile(){for(var e=0==getFileSelCount(),t=document.getElementsByName("fc"),o=0;o<t.length;o++)t[o].checked=e;p5setActions()}function setupBackPointers(e){if(null!=e.f){var t,o=0,n=0;for(t in e.f)setupBackPointers(e.f[t]),(e.f[t].parent=e).f[t].s&&(o+=e.f[t].s),e.f[t].c&&(n+=e.f[t].c),3==e.f[t].t&&n++;e.s=o,e.c=n}return e}function getFileSizeStr(e){return 1==e?"1 byte":format("{0} byte",e)}function p5folderup(e){if(null==e)filetreelocation.pop();else for(;filetreelocation.length>e;)filetreelocation.pop();return updateFiles(),!1}function p5folderset(e){return filetreelocation.push(decodeURIComponent(e)),updateFiles(),!1}function p5createfolder(){setDialogMode(2,"Nuova cartella",3,p5createfolderEx,"<input type=text id=p5renameinput maxlength=64 onkeyup=p5fileNameCheck(event) style=width:100% />"),focusTextBox("p5renameinput"),p5fileNameCheck()}function p5createfolderEx(){meshserver.send({action:"fileoperation",fileop:"createfolder",path:filetreelocation,newfolder:Q("p5renameinput").value})}function p5deletefile(){var e=getFileSelCount(),t=0<getFileSelDirCount()?"<br /><br /><label><input type=checkbox id=p5recdeleteinput>Eliminazione ricorsiva</label><br>":"<input type=checkbox id=p5recdeleteinput style='display:none'>";setDialogMode(2,"Elimina",3,p5deletefileEx,1<e?format("Eliminare {0} elementi selezionati?",e)+t:"Eliminare l'elemento selezionato?"+t)}function p5deletefileEx(){for(var e=[],t=document.getElementsByName("fc"),o=0;o<t.length;o++)t[o].checked&&e.push(t[o].value);meshserver.send({action:"fileoperation",fileop:"delete",path:filetreelocation,delfiles:e,rec:Q("p5recdeleteinput").checked})}function p5renamefile(){for(var e,t=document.getElementsByName("fc"),o=0;o<t.length;o++)t[o].checked&&(e=t[o].value);setDialogMode(2,"Rinominare",3,p5renamefileEx,'<input type=text id=p5renameinput maxlength=64 onkeyup=p5fileNameCheck(event) style=width:100% value="'+e+'" />',{action:"fileoperation",fileop:"rename",path:filetreelocation,oldname:e}),focusTextBox("p5renameinput"),p5fileNameCheck()}function p5renamefileEx(e,t){t.newname=Q("p5renameinput").value,meshserver.send(t)}function p5fileNameCheck(e){var t=isFilenameValid(Q("p5renameinput").value);QE("idx_dlgOkButton",t),1==t&&e&&13==e.keyCode&&dialogclose(1)}var isFilenameValid=function(){var t=/^[^\\/:\*\?"<>\|]+$/,o=/^\./,n=/^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i;return function(e){return t.test(e)&&!o.test(e)&&!n.test(e)&&"."!=e[0]}}();function p5uploadFile(){setDialogMode(2,"Caricare un file",3,p5uploadFileEx,'<form method=post enctype=multipart/form-data action=uploadfile.ashx target=fileUploadFrame><input type=text name=link style=display:none id=p5uploadpath value="'+encodeURIComponent(filetreelinkpath)+'" /><input type=file name=files id=p5uploadinput style=width:100% multiple=multiple onchange="updateUploadDialogOk(\'p5uploadinput\')" /><input type=hidden name=authCookie value='+authCookie+" /><input type=submit id=p5loginSubmit style=display:none /></form>"),updateUploadDialogOk("p5uploadinput")}function p5uploadFileEx(){Q("p5loginSubmit").click()}function updateUploadDialogOk(e){QE("idx_dlgOkButton",""!=Q(e).value)}var p5clipboard=null,p5clipboardFolder=null,p5clipboardCut=0;function p5copyFile(e){var t=document.getElementsByName("fc");p5clipboard=[],p5clipboardCut=e,p5clipboardFolder=Clone(filetreelocation);for(var o=0;o<t.length;o++)t[o].checked&&"3"==t[o].attributes.file.value&&p5clipboard.push(t[o].value);p5updateClipview()}function p5pasteFile(){var e="";setDialogMode(2,"Incolla",3,p5pasteFileEx,e=null!=p5clipboard&&0<p5clipboard.length?format("Confermare {0} di {1} voce {2} in questa posizione?",0==p5clipboardCut?"copy":"move",p5clipboard.length,1<p5clipboard.length?"s":""):e)}function p5pasteFileEx(){meshserver.send({action:"fileoperation",fileop:0==p5clipboardCut?"copy":"move",scpath:p5clipboardFolder,path:filetreelocation,names:p5clipboard}),p5folderup(999),1==p5clipboardCut&&(p5clipboardFolder=p5clipboard=null,p5clipboardCut=0,p5updateClipview())}function p5updateClipview(){var e="";null!=p5clipboard&&0<p5clipboard.length&&(e=format("Trattenendo {0} entrie {1} per {2}",p5clipboard.length,1<p5clipboard.length?"s":"",0==p5clipboardCut?"copia":"sposta")+', <a href=# onclick="return p5clearClip()" style=cursor:pointer>Pulire</a>.'),QH("p5bottomstatus",e),p5setActions()}function p5clearClip(){return p5clipboardFolder=p5clipboard=null,p5clipboardCut=0,p5updateClipview(),!1}function p5fileDragDrop(e){if(haltEvent(e),QV("bigfail",!1),QV("bigok",!1),null!=e.dataTransfer&&0!=e.dataTransfer.files.length&&0!=filetreelocation.length)for(var t=[],o=[],n=[],i=[],a=e.dataTransfer.files.length,s=0;s<e.dataTransfer.files.length;s++){var l=new FileReader,r=e.dataTransfer.files[s];t.push(r.name),o.push(r.size),n.push(r.type),l.onload=function(e){i.push(e.target.result),0==--a&&(Q("p5fileDragName").value=t.join("*"),Q("p5fileDragSize").value=o.join("*"),Q("p5fileDragType").value=n.join("*"),Q("p5fileDragData").value=i.join("*"),Q("p5fileDragLink").value=encodeURIComponent(filetreelinkpath),Q("p5loginSubmit2").click())},l.readAsDataURL(r)}}var p5dragtimer=null;function p5fileDragOver(e){haltEvent(e),null!=p5dragtimer&&(clearTimeout(p5dragtimer),p5dragtimer=null);e=!0;0==filetreelocation.length&&(e=!1),QV("bigok",e),QV("bigfail",!e)}function p5fileDragLeave(e){haltEvent(e),"p5filetable"!=e.target.id?(QV("bigfail",!1),QV("bigok",!1)):p5dragtimer=setTimeout("QV('bigfail',false);QV('bigok',false);p5dragtimer=null;",200)}function onRealNameCheckBox(){putstore("showRealNames",(showRealNames=Q("RealNameCheckBox").checked)?1:0),mainUpdate(5)}function onOnlineCheckBox(e){putstore("onlineOnly",Q("OnlineCheckBox").checked?1:0),onSearchInputChanged()}function updateDevicePageState(){var e,t;null==devicePagingState||devicePagingState.total<=devicePagingState.limit?(QV("devViewPageState",!1),QV("devViewPageButton2",!1),QV("devViewPageButton3",!1)):(e=Math.floor((devicePagingState.skip+devicePagingState.limit)/devicePagingState.limit),t=Math.ceil(devicePagingState.total/devicePagingState.limit),QV("devViewPageState",!0),QV("devViewPageButton2",!0),QV("devViewPageButton3",!0),QH("devViewPageState",e+"/"+t))}function onDeviceViewPageChange(e){if(null!=devicePagingState){var t=Math.floor((devicePagingState.skip+devicePagingState.limit)/devicePagingState.limit),o=Math.ceil(devicePagingState.total/devicePagingState.limit);switch(e){case 2:1<t&&meshserver.send({action:"nodes",skip:(t-2)*devicePagingState.limit});break;case 3:t<o&&meshserver.send({action:"nodes",skip:t*devicePagingState.limit})}}}function onDeviceSearchChanged(e){setTimeout(function(){onSearchInputChanged()},10)}function clearSearchInput(){Q("SearchInput").value="",Q("OnlineCheckBox").checked=!1,onSearchInputChanged()}function onSearchInputChanged(){var e=Q("SearchInput").value.toLowerCase().trim(),t=(putstore("_search",Q("SearchInput").value),QS("SearchInput")["background-color"]=""==e?"#FFFFFF":"#FDFFBE",null),o=null,n=null,i=null,a=null,s=null,l=null,r=null;if(e.startsWith("utente: ".toLowerCase())?t=e.substring("utente: ".length):e.startsWith("u:".toLowerCase())?t=e.substring("u:".length):e.startsWith("ip:".toLowerCase())?o=e.substring("ip:".length):e.startsWith("gruppo:".toLowerCase())?n=e.substring("gruppo:".length):e.startsWith("g:".toLowerCase())?n=e.substring("g:".length):e.startsWith("tag:".toLowerCase())?i=Q("SearchInput").value.trim().substring("tag:".length):e.startsWith("t:".toLowerCase())?i=Q("SearchInput").value.trim().substring("t:".length):e.startsWith("atag:".toLowerCase())?a=Q("SearchInput").value.trim().substring("atag:".length).toLowerCase():e.startsWith("a:".toLowerCase())?a=Q("SearchInput").value.trim().substring("a:".length).toLowerCase():e.startsWith("os:".toLowerCase())?l=Q("SearchInput").value.trim().substring("os:".length).toLowerCase():e.startsWith("amt:".toLowerCase())?r=Q("SearchInput").value.trim().substring("amt:".length).toLowerCase():"wsc:ok"==e?s=1:"wsc:noav"==e?s=2:"wsc:noupdate"==e?s=3:"wsc:nofirewall"==e?s=4:"wsc:any"==e&&(s=5),""==e)for(var d in nodes)nodes[d].v=!0;else if(null!=o)for(var d in nodes)nodes[d].v=null!=nodes[d].ip&&0<=nodes[d].ip.indexOf(o);else if(null!=n)for(var d in nodes)nodes[d].v=0<=meshes[nodes[d].meshid].name.toLowerCase().indexOf(n);else if(null!=i)for(var d in nodes)nodes[d].v=null==nodes[d].tags&&""==i||null!=nodes[d].tags&&0<=nodes[d].tags.indexOf(i);else if(null!=a)for(var d in nodes)nodes[d].v=null!=nodes[d].agent&&null==nodes[d].agent.tag&&""==a||null!=nodes[d].agent&&null!=nodes[d].agent.tag&&0<=nodes[d].agent.tag.toLowerCase().indexOf(a);else if(null!=t){for(var d in nodes)if(nodes[d].v=!1,nodes[d].users&&0<nodes[d].users.length)for(var c in nodes[d].users)0<=nodes[d].users[c].toLowerCase().indexOf(t)&&(nodes[d].v=!0)}else if(null!=l)for(var d in nodes)nodes[d].v=null!=nodes[d].osdesc&&0<=nodes[d].osdesc.toLowerCase().indexOf(l);else if(null!=r)for(var d in nodes)nodes[d].v=null!=nodes[d].intelamt&&(""==r||nodes[d].intelamt.state==r);else if(null!=s)for(var d in nodes)nodes[d].v=!1,!nodes[d].wsc||(1==s&&"OK"==nodes[d].wsc.antiVirus&&"OK"==nodes[d].wsc.autoUpdate&&"OK"==nodes[d].wsc.firewall||(2==s||5==s)&&"OK"!=nodes[d].wsc.antiVirus||(3==s||5==s)&&"OK"!=nodes[d].wsc.autoUpdate||(4==s||5==s)&&"OK"!=nodes[d].wsc.firewall)&&(nodes[d].v=!0);else if("*"==e)for(var d in nodes)nodes[d].v=1==stars[nodes[d]._id];else try{var u=e.split(/\s+/).join("|"),p=new RegExp(u);for(d in nodes)nodes[d].v=32768&features2?p.test(nodes[d].name.toLowerCase())||null!=nodes[d].rnamel&&p.test(nodes[d].rnamel.toLowerCase()):showRealNames?null!=nodes[d].rnamel&&p.test(nodes[d].rnamel.toLowerCase()):p.test(nodes[d].name.toLowerCase())}catch(e){for(var d in nodes)nodes[d].v=!0}if(Q("OnlineCheckBox").checked)for(var d in nodes)null!=nodes[d].conn&&0!=nodes[d].conn||(nodes[d].v=!1);mainUpdate(4)}var gotKeyPressEvent=!1;function ondeskkeypress(e,t){if(setSessionActivity(),desktop&&!xxdialogMode&&10==xxcurrentView&&1==currentDevicePanel){if(gotKeyPressEvent=!0,Q("softKeyboard").value="",null!=currentNode){var o=GetMeshRights(currentNode.meshid);if(0==(0==(8192&features2)&&(4294967295==o||0!=(8&o)&&0==(256&o))))return!1;o=4294967295!=o&&0!=(8&o)&&0==(256&o)&&0!=(4096&o);if(1==o&&(1==e.altKey||1==e.ctrlKey||e.keyCode<32&&8!=e.keyCode&&13!=e.keyCode||90<e.keyCode))return!1}return desktop.m.handleKeys(e)}if(terminal&&!xxdialogMode&&10==xxcurrentView&&5==currentDevicePanel&&1!==t){if(1==e.altKey)return!0;gotKeyPressEvent=!0,Q("softKeyboard").value="";o=0;return 0!=e.charCode?o=e.charCode:0!=e.keyCode&&(o=e.keyCode),0!=o&&("sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(o)):terminal.sendText(String.fromCharCode(o))),!1}}function ondeskkeydown(e,t){if(setSessionActivity(),desktop&&!xxdialogMode&&10==xxcurrentView&&1==currentDevicePanel){if(gotKeyPressEvent=!1,Q("softKeyboard").value="",null!=currentNode){var o=GetMeshRights(currentNode.meshid);if(0==(0==(8192&features2)&&(4294967295==o||0!=(8&o)&&0==(256&o))))return!1;o=4294967295!=o&&0!=(8&o)&&0==(256&o)&&0!=(4096&o);if(1==o&&(1==e.altKey||1==e.ctrlKey||e.keyCode<32&&8!=e.keyCode&&13!=e.keyCode||90<e.keyCode))return!1}return desktop.m.handleKeyDown(e)}if(terminal&&!xxdialogMode&&10==xxcurrentView&&5==currentDevicePanel&&1!==t){if(1==e.altKey)return!0;Q("softKeyboard").value="",gotKeyPressEvent=!1;o=0;0!=e.charCode?o=e.charCode:0!=e.keyCode&&(o=e.keyCode),8==o?terminal.sendText(String.fromCharCode(o)):e.ctrlKey&&64<=o&&o<=95&&("sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(o-64)):terminal.sendText(String.fromCharCode(o-64)))}}function ondeskkeyup(e,t){if(setSessionActivity(),desktop&&!xxdialogMode&&10==xxcurrentView&&1==currentDevicePanel){var o=Q("softKeyboard").value;if(Q("softKeyboard").value="",null!=currentNode){var n=GetMeshRights(currentNode.meshid);if(0==(0==(8192&features2)&&(4294967295==n||0!=(8&n)&&0==(256&n))))return!1;n=4294967295!=n&&0!=(8&n)&&0==(256&n)&&0!=(4096&n);if(1==n&&(1==e.altKey||1==e.ctrlKey||e.keyCode<32&&8!=e.keyCode&&13!=e.keyCode||90<e.keyCode))return!1}if(!(0==gotKeyPressEvent&&0<o.length&&desktop.m.SendKeyUnicode))return desktop.m.handleKeyUp(e);n=o[o.length-1].charCodeAt(0);desktop.m.SendKeyUnicode(desktop.m.KeyAction.DOWN,n),desktop.m.SendKeyUnicode(desktop.m.KeyAction.UP,n)}if(terminal&&!xxdialogMode&&10==xxcurrentView&&5==currentDevicePanel&&0==gotKeyPressEvent&&1!==t)return 1==e.altKey||(o=Q("softKeyboard").value,Q("softKeyboard").value="","sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+o):o&&terminal.sendText(o),!1)}var deviceHeaderCount,sort=0,deviceHeaderId=0,deviceHeaders={},showRealNames=!1,deviceHeaderTotal=0,deviceHeaders={},deviceHeadersTitles={};function updateDevices(){var e,t="",o=0,n=null,i=0,a={};for(s in deviceHeaderCount={},deviceHeaders={},deviceHeadersTitles={},(deviceHeaderTotal=deviceHeaderId=0)==sort?nodes.sort(meshSort):1==sort?nodes.sort(powerSort):2==sort&&(1==showRealNames?nodes.sort(deviceHostSort):nodes.sort(deviceSort)),nodes)0!=nodes[s].v&&(0==sort?(nodes.sort(meshSort),(meshes[nodes[s].meshid]?nodes[s].meshid:"*")!=n&&(deviceHeaderSet(),e="",null!=meshes[nodes[s].meshid]&&1==meshes[nodes[s].meshid].mtype&&(e="<span style=color:lightgray>, Intel&reg; Solo AMT</span>"),null!=n&&(2==o&&(t+="<td><div style=width:301px></div></td>"),""!=t)&&(t+="</tr></table>"),t+="<div class=DevSt style=padding-top:4px><span style=float:right>",a[n=meshes[nodes[s].meshid]?(t+='</span><span id=MxMESH style=cursor:pointer onclick=goForward("'+nodes[s].meshid+'")>'+EscapeHtml(meshes[nodes[s].meshid].name)+"</span>"+e+"<span id=DevxHeader"+deviceHeaderId+" style=color:lightgray></span></div>",nodes[s].meshid):(t+="</span><span id=MxMESH><i>Dispositivi individuali</i></span><span id=DevxHeader"+deviceHeaderId+" style=color:lightgray></span></div>","*")]=1,o=0)):1==sort?nodes[s].pwr!==n&&(deviceHeaderSet(),null!==n&&(2==o&&(t+="<td><div style=width:301px></div></td>"),""!=t)&&(t+="</tr></table>"),t+="<div class=DevSt style=width:100%;padding-top:4px><span>"+PowerStateStr2(nodes[s].pwr)+"</span><span id=DevxHeader"+deviceHeaderId+" style=color:lightgray></span></div>",n=nodes[s].pwr,o=0):2==sort&&null==n&&(n="1"),i++,t+="<div name=xxdevice onclick=goForward('"+nodes[s]._id+"') class=devList1 id='"+nodes[s]._id+"'></div>",deviceHeaderTotal++,void 0===deviceHeaderCount[nodes[s].state]?deviceHeaderCount[nodes[s].state]=1:deviceHeaderCount[nodes[s].state]++);if(""==t&&0<nodes.length&&""!=Q("SearchInput").value&&(t='<div style="margin:30px">Nessun dispositivo corrispondente a questa ricerca. </div>'),0==sort&&""==Q("SearchInput").value)for(var s in meshes){var l=meshes[s];null==a[l._id]&&IsMeshViewable(l)&&(""!=n&&""!=t&&(t+="</tr></table>"),t=(t+="<div><div colspan=3 class=DevSt><span style=float:right>")+'</span><span id=MxMESH style=cursor:pointer onclick=goForward("'+l._id+'")>'+EscapeHtml(l.name)+"</span></div>",1==l.mtype&&(t+="<div style=padding:10px><i>Nessun Intel&reg; Dispositivi AMT in questo gruppo "),1<l.mtype&&(t+="<div style=padding:10px><i>Nessun dispositivo in questo gruppo "),t+=".</i></div></div>",n=l._id,i++)}for(s in 0==i?""!=Q("SearchInput").value||Q("OnlineCheckBox").checked?QH("xdevices",'<div style="margin-top:50px;text-align:center"><span style="font-size:30px">Nessun dispositivo</span><br /><br />Nessun dispositivo corrispondente a questa ricerca.  <a onclick=clearSearchInput() style=cursor:pointer>Cancella filtro di ricerca</a></div>'):QH("xdevices",'<div style="margin-top:50px;text-align:center"><span style="font-size:30px">Nessun dispositivo</span><br /><br />Utilizza la versione desktop di questo sito Web per aggiungere dispositivi.</div>'):QH("xdevices",t),deviceHeaderSet(),deviceHeaders)QH(s,deviceHeaders[s]);for(s in deviceHeadersTitles)Q(s).title=deviceHeadersTitles[s];onDevicesScrollEx()}var onDevicesTouchActive=!1,onDevicesScrollnagleTimer=null;function onDevicesScroll(){null==onDevicesScrollnagleTimer&&(onDevicesScrollnagleTimer=setTimeout(onDevicesScrollEx,250))}function onDeviceTouch(e){onDevicesTouchActive!=e&&0==(onDevicesTouchActive=e)&&onDevicesScrollEx()}function onDevicesScrollEx(){var e=document.getElementsByName("xxdevice");onDevicesScrollnagleTimer=null;for(var t=0;t<e.length;t++){var o=getNodeFromId(e[t].id);if(null==o)break;updateDeviceViewHtml(e[t],o)}}function updateDeviceViewDevice(e){var t;null!=e&&null!=(t=Q(e._id))&&""!=t.innerHTML&&updateDeviceViewHtml(t,e)}function updateDeviceViewHtml(e,t){var o,n,i,a,s,l=Q("xdevices").scrollTop-250,r=Q("xdevices").scrollTop+Q("xdevices").clientHeight+250;e.offsetTop>=l&&e.offsetTop<r?(EscapeHtml(t.name).length,null!=t.rname&&0<t.rname.length&&EscapeHtml(t.rname),l=EscapeHtml(t.name),0==(l=1==showRealNames&&null!=t.rname?EscapeHtml(t.rname):l).length&&(l="<i>Nessuna </i>"),o=r="",1==stars[t._id]&&(o+="<img class=deviceNotifyDotSub src=images/icon-star-notify-16.png width=16 height=16>"),null!=t.sessions&&(null!=t.sessions.msg&&(o+='<div style="width:16;height:16" class=deviceNotifyDotSub>'+Object.keys(t.sessions.msg).length+"</div>"),null==t.sessions.kvm&&null==t.sessions.terminal&&null==t.sessions.files&&null==t.sessions.tcp&&null==t.sessions.udp||(o+="<img class=deviceNotifyDotSub src=images/icon-relay-notify.png width=16 height=16>"),null!=t.sessions.help&&(o+="<img class=deviceNotifyDotSub src=images/icon-help-notify-16.png width=16 height=16>"),null!=t.sessions.battery)&&(n="","ac"==(a=t.sessions.battery).state?n="Il dispositivo è collegato":"dc"==a.state&&(n="Il dispositivo è alimentato a batteria"),i="",s=-1,"number"==typeof a.level&&0<=a.level&&a.level<=100&&(i=a.level+"%",5<(s=Math.floor((a.level+10)/25)+1)&&(lvl=5),"ac"==a.state)&&(100==a.level?s=11:s+=5),0<s)&&(r+='<div class="deviceBatterySmall deviceBatterySmall'+s+'" title="'+(null!=n?n+", "+i:i)+'"></div>'),""!=o&&(r+="<div class=deviceNotifyDot>"+o+"</div>"),a=t.icon,s=NodeStateStr(t),t.conn&&0!=t.conn||3==t.mtype||(a+=" gray"),e.innerHTML="<div>"+r+'<div class="i'+a+' devList2"></div><div class=devList3><div class=devList4><b>'+l+"</b></div><div class=devList5>"+s+"</div></div></div>"):e.innerHTML=""}function showDeviceHelpRequests(e,t,o){if(o&&haltEvent(o),!xxdialogMode||t){var n=null,i="";if(null==(n=null==e?currentNode:getNodeFromId(e))||null==n.sessions)setDialogMode(0);else{if(null!=n.sessions.help)for(var a in n.sessions.help)i+="<div style=margin-bottom:6px><b>"+EscapeHtml(a)+"</b></div><div style=margin-bottom:6px>"+EscapeHtml(n.sessions.help[a])+"</div>";""!=i?setDialogMode(2,"Richieste di aiuto - "+EscapeHtml(n.name),1,null,i,"HELPREQ-"+n._id):setDialogMode(0)}}return!1}function showDeviceSessions(e,t,o){if(!(!0!==t&&xxdialogMode||null==currentNode)){var n,i=currentNode,a="";for(n in i.sessions)if("kvm"==n&&null==i.sessions.multidesk)for(var s in a+="<u>Desktop remoto</u>",i.sessions.kvm)s.startsWith("user/")?(l="",s!=userinfo._id&&4294967295!=GetNodeRights(i)||(l=' <a href=# onclick=\'return endDeviceSession("kvm", "'+encodeURIComponentEx(i._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Disconnetti questa sessione" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),a+=addHtmlValue4(getUserName(s),(1==i.sessions.kvm[s]?"1 sessione":nobreak(format("{0} sessioni",i.sessions.kvm[s])))+l)):"busy"==s&&(a+=addHtmlValue2("Il dispositivo è occupato",1==i.sessions.kvm[s]?"1 sessione":nobreak(format("{0} sessioni",i.sessions.kvm[s]))));else if("multidesk"==n)for(var s in a+="<u>Desktop remoto</u>",i.sessions.multidesk){var l="";s!=userinfo._id&&4294967295!=GetNodeRights(i)||(l=' <a href=# onclick=\'return endDeviceSession("multidesk", "'+encodeURIComponentEx(i._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Disconnetti questa sessione" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),a+=addHtmlValue4(getUserName(s),(1==i.sessions.multidesk[s]?"1 sessione":nobreak(format("{0} sessioni",i.sessions.multidesk[s])))+l)}else if("terminal"==n)for(var s in a+="<u>Terminale</u>",i.sessions.terminal){l="";s!=userinfo._id&&4294967295!=GetNodeRights(i)||(l=' <a href=# onclick=\'return endDeviceSession("terminal", "'+encodeURIComponentEx(i._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Disconnetti questa sessione" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),a+=addHtmlValue4(getUserName(s),(1==i.sessions.terminal[s]?"1 sessione":nobreak(format("{0} sessioni",i.sessions.terminal[s])))+l)}else if("files"==n)for(var s in a+="<u>File</u>",i.sessions.files){l="";s!=userinfo._id&&4294967295!=GetNodeRights(i)||(l=' <a href=# onclick=\'return endDeviceSession("files", "'+encodeURIComponentEx(i._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Disconnetti questa sessione" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),a+=addHtmlValue4(getUserName(s),(1==i.sessions.files[s]?"1 sessione":nobreak(format("{0} sessioni",i.sessions.files[s])))+l)}else if("tcp"==n)for(var s in a+="<u>Instradamento TCP</u>",i.sessions.tcp){l="";s!=userinfo._id&&4294967295!=GetNodeRights(i)||(l=' <a href=# onclick=\'return endDeviceSession("tcp", "'+encodeURIComponentEx(i._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Disconnetti questa sessione" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),a+=addHtmlValue4(getUserName(s),(1==i.sessions.tcp[s]?"1 sessione":nobreak(format("{0} sessioni",i.sessions.tcp[s])))+l)}else if("udp"==n)for(var s in a+="<u>Instradamento UDP</u>",i.sessions.udp){l="";s!=userinfo._id&&4294967295!=GetNodeRights(i)||(l=' <a href=# onclick=\'return endDeviceSession("udp", "'+encodeURIComponentEx(i._id)+'", "'+encodeURIComponentEx(s)+'")\' title="Disconnetti questa sessione" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),a+=addHtmlValue4(getUserName(s),(1==i.sessions.udp[s]?"1 sessione":nobreak(format("{0} sessioni",i.sessions.udp[s])))+l)}""!=a?setDialogMode(2,"sessioni - "+EscapeHtml(i.name),1,null,a,"SESSIONS-"+i._id):setDialogMode(0)}}function endDeviceSession(e,t,o){var o=decodeURIComponent(o).split("/"),n=o[0]+"/"+o[1]+"/"+o[2],i=null;4==o.length&&o[3].startsWith("guest:")&&(i=atob(o[3].substring(6))),"multidesk"==e?meshserver.send({action:"endDesktopMultiplex",nodeid:decodeURIComponent(t),xuserid:n,guestname:i,guestname:i}):meshserver.send({action:"msg",type:"endtunnel",nodeid:decodeURIComponent(t),xuserid:n,guestname:i,guestname:i,protocol:e})}function showDeviceMessages(e,t,o){if(o&&haltEvent(o),!xxdialogMode||t){var n=null,i="<div style=max-height:200px;width:100%;overflow-y:auto;overflow-x:hidden>",a=0;if(null==(n=null==e?currentNode:getNodeFromId(e))||null==n.sessions||null==n.sessions.msg)setDialogMode(0);else{for(var s in n.sessions.msg){var l=s,r=5;"string"==typeof n.sessions.msg[s].msg&&(l=n.sessions.msg[s].msg),i+="<table style=width:100%><td style=width:24px><div class=NotifyIconSmall"+(r=(r="number"==typeof n.sessions.msg[s].icon?n.sessions.msg[s].icon:r)<1||9<r?5:r)+'></div><td><div style="border-radius:5px;background-color:#BBB;width:calc(100% - 18px);padding:8px">'+EscapeHtml(l)+"</div></table>",a++}i+="</div>",0<a&&setDialogMode(2,"Messaggi dell'agente - "+EscapeHtml(n.name),1,null,i,"MESSAGES-"+n._id)}}return!1}var powerStatetable=["","Acceso","Standby","Standby","Standby","In ibernaziome","Spegni","Presente","Spento"],powerStateStrings=["","Acceso","Standby","Standby","Deep Sleep","In ibernaziome","Soft-Off","Presente","Spento"],powerStateStrings2=["","Il dispositivo è alimentato","Il dispositivo è in stato di sospensione (S1)","Il dispositivo è in stato di sospensione (S2)","Il dispositivo è in stato di sospensione profonda (S3)","Il dispositivo è in ibernazione (S4)","Il dispositivo è in stato di spegnimento graduale (S5)","Il dispositivo è presente, ma non è possibile determinare lo stato di alimentazione","Il dispositivo è spento"],powerColorTable=["#00000000","black","blue","blue","lightblue","blueviolet","darkgreen","lightseagreen","lightseagreen"];function NodeStateStr(e){var t=[];return 0<e.state&&e.state<powerStatetable.length&&state.push(powerStatetable[e.state]),e.conn&&(0!=(1&e.conn)&&t.push("<span>"+(4==e.mtype?"PDU"==e.porttype?"Interruttore":"IP-KVM":"Agente")+"</span>"),0!=(2&e.conn)?t.push("<span>CIRA</span>"):0!=(4&e.conn)&&t.push("<span>Intel&reg; AMT</span>"),0!=(8&e.conn)&&t.push("<span>Ritrasmissioni</span>"),0!=(16&e.conn))&&t.push("<span>MQTT </span>"),null!=e.pwr&&0!=e.pwr&&t.push(powerStateStrings[e.pwr]),t.join(", ")}function PowerStateStr(e){return e<powerStatetable.length?powerStatetable[e]:""}function PowerStateStr2(e){return 0!=e&&e<powerStatetable.length?powerStatetable[e]:"Sconosciuto"}function onSortSelectChange(e){sort=document.getElementById("sortselect").selectedIndex,e||putstore("sort",sort),mainUpdate(4)}function deviceHeaderSet(){if(0==deviceHeaderId)deviceHeaderId=1;else{deviceHeaders["DevxHeader"+deviceHeaderId]=", "+deviceHeaderTotal+(1==deviceHeaderTotal?" nodo":" nodi");var e,t="";for(e in deviceHeaderCount)0<t.length&&(t+=", "),t+=deviceHeaderCount[e]+" "+PowerStateStr2(e);deviceHeadersTitles["DevxHeader"+deviceHeaderId]=t,deviceHeaderId++,deviceHeaderCount={},deviceHeaderTotal=0}}var sortCollator=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});function meshSort(e,t){var o=sortCollator.compare(e.meshnamel,t.meshnamel);return 0!=o||0!=(o=sortCollator.compare(e.meshid,t.meshid))?o:1==showRealNames?sortCollator.compare(e.rnamel,t.rnamel):sortCollator.compare(e.namel,t.namel)}function powerSort(e,t){var o=e.pwr||0,n=t.pwr||0;return n<o?-1:o<n?1:o==n?1==showRealNames?sortCollator.compare(e.rnamel,t.rnamel):sortCollator.compare(e.namel,t.namel):void 0}function deviceSort(e,t){return sortCollator.compare(e.namel,t.namel)}function deviceHostSort(e,t){return sortCollator.compare(e.rnamel,t.rnamel)}function refreshDevice(e){currentNode&&currentNode._id==e&&gotoDevice(e,xxcurrentView,!0)}var currentNode,currentDevicePanel=0,powerTimelineNode=null,powerTimelineReq=null,powerTimelineUpdate=null,powerTimeline=null;function getCurrentNode(){return currentNode}function gotoDevice(e,t,o){if(!0!==userinfo.emailVerified&&1==serverinfo.emailcheck&&4294967295!=userinfo.siteadmin)setDialogMode(2,"Sicurezza dell 'Account",1,null,'Impossibile accedere a un dispositivo finché non viene verificato un indirizzo e-mail. Questo è necessario per il recupero della password. Vai a "Il mio account" per modificare e verificare un indirizzo email. ');else if(262144&features&&!(1==userinfo.otpsecret||0<userinfo.otphkeys||0<userinfo.otpkeys||8388608&features&&1==userinfo.otpekey))setDialogMode(2,"Sicurezza dell 'Account",1,null,'Impossibile accedere a un dispositivo finché non viene abilitata l\'autenticazione a due fattori. Questo è necessario per una maggiore sicurezza. Vai a "Il mio account" e guarda la sezione "Sicurezza dell\'account". ');else{var n=getNodeFromId(e);if(null==n)goBack();else{var i=meshes[n.meshid],a=GetNodeRights(n),e=null==currentNode||currentNode._id!=e;if(!currentNode||currentNode._id!=n._id||1==o){currentNode=n,QV("p10deviceNotify",null!=currentNode.sessions&&(null!=n.sessions.kvm||null!=n.sessions.terminal||null!=n.sessions.files||null!=n.sessions.tcp||null!=n.sessions.udp)),QV("p10deviceStar",1==stars[currentNode._id]),QV("p10deviceHelp",null!=currentNode.sessions&&null!=currentNode.sessions.help),null!=currentNode.sessions&&null!=currentNode.sessions.msg?(QV("p10deviceMsg",!0),QH("p10deviceMsg",Object.keys(currentNode.sessions.msg).length)):QV("p10deviceMsg",!1),QV("p10deviceBattery",!1),null!=currentNode.sessions&&null!=currentNode.sessions.battery?(o="","ac"==(l=currentNode.sessions.battery).state&&(o="Il dispositivo è collegato"),"dc"==l.state&&(o="Il dispositivo è alimentato a batteria"),r="",s=-1,"number"==typeof l.level&&0<=l.level&&l.level<=100&&(r=l.level+"%",5<(s=Math.floor((l.level+10)/25)+1)&&(lvl=5),"ac"==l.state)&&(100==l.level?s=11:s+=5),0<s&&(Q("p10deviceBattery").title=null!=o?o+", "+r:r,QV("p10deviceBattery",!0),Q("p10deviceBattery").className="deviceBatteryLarge deviceBatteryLarge"+s)):QV("p10deviceBattery",!1);var s,l=EscapeHtml(n.name),o=(0==l.length&&(l="<i>Nessuna </i>"),0!=(4&a)&&(l="<span onclick=showEditNodeValueDialog(0) style=cursor:pointer>"+l+"</span>"),QH("p10deviceName",l),"<table style=width:100%>"),r=(i&&(o+=addDeviceAttribute("<span>Gruppo</span>",'<a onclick=goForward("'+n.meshid+'") style=cursor:pointer>'+EscapeHtml(meshes[n.meshid].name)+"</a>")),null!=n.rname&&(o+=addDeviceAttribute("<span>Nome</span>","<span>"+EscapeHtml(n.rname)+"</span>")),(0==(1&features)&&4!=n.mtype||3==n.mtype)&&(0!=(4&a)?n.host?o+=addDeviceAttribute("Nome host","<span onclick=showEditNodeValueDialog(1) style=cursor:pointer>"+EscapeHtml(n.host)+"</span>"):o+=addDeviceAttribute("Nome host","<span onclick=showEditNodeValueDialog(1) style=cursor:pointer><i>Nessuna </i></span>"):o+=addDeviceAttribute("Nome host",EscapeHtml(n.host))),n.desc?EscapeHtml(n.desc):"<i>Nessuna </i>"),i=(o+=addDeviceAttribute("Descrizione",0!=(4&a)?"<span onclick=showEditNodeValueDialog(2) style=cursor:pointer>"+r+"</span>":r),4==n.mtype&&(null!=n.portnum&&(o+=addDeviceAttribute("Numero di porta",n.portnum)),null!=n.porttype)&&(o+=addDeviceAttribute("Tipo di porta",n.porttype)),null!=n.agent&&null!=n.agent.id&&3==n.mtype?(4==n.agent.id&&(o+=addDeviceAttribute("Tipo di dispositivo","Windows")),6==n.agent.id&&(o+=addDeviceAttribute("Tipo di dispositivo","Linux")),29==n.agent.id&&(o+=addDeviceAttribute("Tipo di dispositivo","macOS"))):null!=n.agent&&null!=n.agent.id&&null!=n.agent.ver&&(u="",u=n.agent.id<=agentsStr.length?agentsStr[n.agent.id]:agentsStr[0],0!=n.agent.ver&&(u+=" v"+n.agent.ver),14==n.agent.id&&(u=n.agent.core),!1===n.agent.root&&0!=(1&n.conn)&&(u+=", Limitato"),o+=addDeviceAttribute("Agente Mesh",u)),null!=n.intelamt&&(u="",s={0:nobreak("Non attivato (pre) "),1:nobreak("Non attivato (in) "),2:nobreak("Attivato")},null!=n.intelamt.ver&&null==n.intelamt.state?u+="<i>"+nobreak("Stato sconosciuto")+"</i>, v"+EscapeHtml(n.intelamt.ver):null==n.intelamt.ver&&2==n.intelamt.state?u+="<i>Attivato</i>":null==n.intelamt.ver||null==n.intelamt.state?u+="<i>Versione e stato sconosciuti </i>":(u+=s[n.intelamt.state],n.intelamt.flags&&(2&n.intelamt.flags?u=" <span>CCM</span>":4&n.intelamt.flags&&(u=" <span>ACM</span>")),u+=", v"+EscapeHtml(n.intelamt.ver)),2==n.intelamt.state&&(1==n.intelamt.tls&&(u+=', <span title="Intel & reg; AMT è configurato con la sicurezza di rete TLS">TLS</span>'),l=!1,null==n.intelamt.user||""==n.intelamt.user?0!=(4&a)?(u+=', <i style=color:#FF0000;cursor:pointer title="Modifica Intel & reg; Credenziali AMT" onclick=editDeviceAmtSettings("'+n._id+'")>Nessuna credenziale</i>',l=!0):u+=", <i style=color:#FF0000>Nessuna credenziale</i>":0!=(1&features2)&&null!=n.intelamt.warn&&(i=null,0!=(1&n.intelamt.warn)&&(i="Credenziali non valide"),null!=(i=0!=(8&n.intelamt.warn)?"Provare le credenziali":i))&&(0!=(4&a)?(u+=', <i style=color:#FF0000;cursor:pointer title="Modifica Intel & reg; Credenziali AMT" onclick=editDeviceAmtSettings("'+n._id+'")>'+i+"</i>",l=!0):u+=", <i style=color:#FF0000>"+i+"</i>"),u+=" ",l=0!=(4&a)&&0==(1&features2)||l)&&(u+='<img src=images/link4.png height=10 width=10 title="Modifica Intel & reg; Credenziali AMT" style=cursor:pointer onclick=editDeviceAmtSettings("'+n._id+'")>'),r="Intel&reg; ME","number"==typeof n.intelamt.sku&&(0!=(8&n.intelamt.sku)?r="Intel&reg; AMT":0!=(16&n.intelamt.sku)&&(r="Intel&reg; SM")),o+=addDeviceAttribute(r,u)),null!=n.agent&&null!=n.agent.tag&&"mailto:"!=n.agent.tag&&(o+=addDeviceAttribute("Etichetta agente",s=(s=EscapeHtml(n.agent.tag)).startsWith("mailto:")?'<a href="'+s+'">'+s.substring(7)+"</a>":s)),n.conn),d=(i&&1<i&&(l=[],0!=(1&n.conn)&&l.push("<span>"+(4==n.mtype?"PDU"==n.porttype?"Interruttore":"IP-KVM":"Agente")+"</span>"),0!=(2&n.conn)?l.push("<span>Intel&reg; AMT CIRA</span>"):0!=(4&n.conn)&&l.push("<span>Intel&reg; AMT</span>"),0!=(8&n.conn)&&l.push("<span>agente di ritrasmissione</span>"),0!=(16&n.conn)&&l.push("<span>MQTT </span>"),o+=addDeviceAttribute("Connettività",l.join(", "))),"<i>Nessuna </i>");if(null!=n.tags)for(var c in d="",n.tags)d+='<span style="background-color:lightgray;padding:3px;border-radius:5px">'+EscapeHtml(n.tags[c])+"</span> ";o+=addDeviceAttribute("Tags",0!=(4&a)?"<span onclick=showEditNodeValueDialog(3) style=cursor:pointer;color:black>"+d+"</span>":"<span style=line-height:26px;color:black>"+d+"</span>"),null==n.ssh&&null==n.rdp||(r=[],0!=(4&a)?(null!=n.ssh&&r.push("<span onclick=showClearSshDialog(3) style=cursor:pointer>"+(1==n.ssh?"Utente SSH+Pass":2==n.ssh?"Utente SSH+Chiave+Pass":"SSH-Utente+Chiave")+' <img class=hoverButton src="images/link5.png" width=10 height=10 /></span>'),null!=n.rdp&&r.push('<span onclick=showClearRdpDialog(3) style=cursor:pointer>RDP <img class=hoverButton src="images/link5.png" width=10 height=10 /></span>')):(null!=n.ssh&&r.push(1==n.ssh?"Utente SSH+Pass":2==n.ssh?"Utente SSH+Chiave+Pass":"SSH-Utente+Chiave"),null!=n.rdp&&r.push("RDP")),o+=addDeviceAttribute("Credenziali",r.join(", "))),o+="</table><br />",0!=(262220&a)&&n.mtype<3&&(o+='<input type=button value="Azioni" onclick=deviceActionFunction() />'),o+='<input type=button value="Appunti " onclick=showNotes('+(0==(128&a))+',"'+encodeURIComponent(n._id)+'") />',4==n.mtype&&1&i&&("PDU"==n.porttype?1==n.pwr?262144&a&&(o+='<input type=button value="Spegni" title="Spegni" onclick=setIpPduState(0) />'):8==n.pwr&&64&a&&(o+='<input type=button value="Accendere" title="Accendere" onclick=setIpPduState(1) />'):8&a&&(o+='<input type=button value="Controllo remoto" title="Controllo remoto" onclick=openIpKvmRemoteControl("'+encodeURIComponentEx(n._id)+'") />')),QH("p10html",o),3==n.mtype&&null!=n.agent&&4<n.agent.id&&512&features2&&(n.agent.caps=6),setupTerminal(),setupFiles(),16&a&&setupConsole(),o="<div style=float:right;font-size:x-small;margin-right:10px>",0!=(32768&a)&&(o+='<a style=cursor:pointer onclick=p10showDeleteNodeDialog("'+n._id+'")>Elimina dispositivo</a>'),o+="</div><div style=font-size:x-small>",0!=webRelayPort&&(o=(o+='<a onclick=p10WebRouter("'+n._id+'",1,'+(n.httpport||80)+")>HTTP"+(n.httpport&&80!=n.httpport?"/"+n.httpport:"")+"</a>&nbsp;")+'<a onclick=p10WebRouter("'+n._id+'",2,'+(n.httpsport||443)+")>HTTPS"+(n.httpsport&&443!=n.httpsport?"/"+n.httpsport:"")+"</a>&nbsp;"),o+="</div><br>",QH("p10html3",o);var u=PowerStateStr(n.state);0!=(1&i)&&(0<u.length&&(u+=", "),u+=4==n.mtype?"PDU"==n.porttype?"Interruttore":"IP-KVM":"Agente Mesh"),0!=(2&i)?(0<u.length&&(u+=", "),u+="Intel & reg; AMT connesso"):0!=(4&i)&&(0<u.length&&(u+=", "),u+="Intel & reg; Rilevato AMT"),0!=(16&i)&&(0<u.length&&(u+=", "),u+="Canale MQTT collegato "),("PDU"==n.porttype||1<n.pwr&&7!=n.pwr)&&(0<u.length&&(u+=", "),u+=powerStateStrings[n.pwr]),QH("MainComputerState","<span style=font-size:12px>"+u+"</span>"),QH("MainComputerImage",'<div class="i'+n.icon+'"></div>'),powerTimelineNode!=currentNode._id&&powerTimelineReq!=currentNode._id&&(QH("p10html2",""),powerTimelineReq=currentNode._id,meshserver.send({action:"powertimeline",nodeid:currentNode._id}),meshserver.send({action:"lastconnect",nodeid:currentNode._id}),meshserver.send({action:"getsysinfo",nodeid:currentNode._id}),meshserver.send({action:"getnetworkinfo",nodeid:currentNode._id}),QH("p10detailshtml","")),e&&(p11clearConsoleMsg(),p13clearConsoleMsg()),QV("p11DeskSessionSelector",!1),QH("p11DeskSessionSelector","")}setupDesktop(),go(t=t||10),10==xxcurrentView&&setupDeviceMenu()}}}function setIpPduState(e){0==e?setDialogMode(2,"Operazione di potenza",3,function(){meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:2})},"Eseguire lo spegnimento?"):setDialogMode(2,"Operazione di potenza",3,function(){meshserver.send({action:"wakedevices",nodeids:[currentNode._id]})},"Eseguire l'accensione?")}function openIpKvmRemoteControl(e){xxdialogMode||safeNewWindow("/ipkvm.ashx/"+(e=decodeURIComponent(e).split("/")[2])+"/","ipkvm:"+e)}function deviceToastFunction(){xxdialogMode||setDialogMode(2,"Toast del dispositivo",3,deviceToastFunctionEx,"<textarea id=d2devToast style=width:100%;height:80px;resize:none;overflow-y:scroll></textarea>")}function deviceToastFunctionEx(){meshserver.send({action:"toast",nodeids:[currentNode._id],title:"MeshCentral",msg:Q("d2devToast").value})}function setupDeviceMenu(e,t){var o=GetNodeRights(currentNode),e=(null!=e&&(currentDevicePanel=e),QV("p10general",0==currentDevicePanel),QV("p10desktop",1==currentDevicePanel),QV("p10files",2==currentDevicePanel),QV("p10details",3==currentDevicePanel),QV("p10console",4==currentDevicePanel),QV("p10terminal",5==currentDevicePanel),[]);0!=currentDevicePanel&&e.push({n:"Generale",f:"setupDeviceMenu(0)"}),1!=currentDevicePanel&&null!=currentNode&&(8&o||256&o)&&(4294967295==o||0==(65536&o))&&(null==currentNode.agent&&currentNode.intelamt&&("number"!=typeof currentNode.intelamt.sku||0!=(8&currentNode.intelamt.sku))||currentNode.agent&&1&currentNode.agent.caps)&&e.push({n:"Desktop",f:"setupDeviceMenu(1)"}),5!=currentDevicePanel&&null!=currentNode&&(8&o||256&o)&&(4294967295==o||0==(512&o))&&(null==currentNode.agent&&currentNode.intelamt&&("number"!=typeof currentNode.intelamt.sku||0!=(8&currentNode.intelamt.sku))||currentNode.agent&&2&currentNode.agent.caps)&&e.push({n:"Terminale",f:"setupDeviceMenu(5)"}),2!=currentDevicePanel&&null!=currentNode&&8&o&&(4294967295==o||0==(1024&o))&&1!=currentNode.mtype&&currentNode.agent&&4&currentNode.agent.caps&&e.push({n:"File",f:"setupDeviceMenu(2)"}),3!=currentDevicePanel&&null!=currentNode&&currentNode.mtype<3&&0!=(1048576&o)&&e.push({n:"Dettagli",f:"setupDeviceMenu(3)"}),4!=currentDevicePanel&&null!=currentNode&&16&o&&2==currentNode.mtype&&e.push({n:"Console",f:"setupDeviceMenu(4)"}),updateFooterMenu(e),updateCurrentUrl(),1==currentDevicePanel&&deskAdjust()}function deviceActionFunction(){var e,t,o,n,i;xxdialogMode||(e=GetNodeRights(currentNode),t=0,o="Seleziona un'operazione da eseguire su questo dispositivo.<br /><br />",n="<select id=d2deviceop style=float:right;width:170px onchange=deviceActionFunctionValidate()>",i="",null!=currentNode.agent&&14==currentNode.agent.id?0!=(1&currentNode.conn)&&0!=(8&e)&&(t++,n+="<option value=400>Lampeggia</option><option value=401>Vibrare</option>",i+="<div id=d2devicetimediv>"+addHtmlValue("Tempo","<select id=d2devicetime style=float:right;width:170px><option value=1000>1 secondo</option><option value=5000>5 secondi</option><option value=10000>10 secondi</option></select>")+"</div>"):(0!=(64&e)&&(t++,n+="<option value=100>Risveglio</option>"),0!=currentNode.conn&&0!=(262144&e)&&(t++,n+="<option value=4>Standby</option><option value=3>Ripristina</option><option value=2>Spegni</option>"),null!=currentNode.intelamt&&2==currentNode.intelamt.state&&0!=(6&currentNode.conn)&&0!=(262144&e)&&(t++,n+="<option value=310>Intel&reg; Ripristino AMT</option><option value=308>Intel&reg; Spegnimento AMT</option>"),null!=currentNode.intelamt&&2==currentNode.intelamt.state&&0!=(6&currentNode.conn)&&0!=(64&e)&&(t++,n+="<option value=302>Intel&reg; Accensione AMT</option>")),o+=addHtmlValue("operazione",n+="</select>"),setDialogMode(2,"Azione del dispositivo",0==t?2:3,deviceActionFunctionEx,(o=0==t?"Nessuna azione attualmente disponibile per questo dispositivo.":o)+i),0<t&&deviceActionFunctionValidate())}function deviceActionFunctionValidate(){var e=Q("d2deviceop").value;try{QV("d2devicetimediv",400==e||401==e)}catch(e){}}function deviceActionFunctionEx(){var e=Q("d2deviceop").value;100==e?meshserver.send({action:"wakedevices",nodeids:[currentNode._id]}):103!=e&&104!=e&&106!=e&&107!=e&&(302==e?setDialogMode(2,"Intel&reg; AMT Power Operation",3,function(){meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)})},"Esegui Intel&reg; AMT acceso?"):308==e?setDialogMode(2,"Intel&reg; AMT Power Operation",3,function(){meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)})},"Esegui Intel&reg; Spegnimento AMT?"):310==e?setDialogMode(2,"Intel&reg; AMT Power Operation",3,function(){meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)})},"Esegui Intel&reg; AMT resettato?"):400==e||401==e?meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e),time:parseInt(Q("d2devicetime").value)}):meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:parseInt(e)}))}function showNotes(e,t){xxdialogMode||(e="<textarea id=d2devNotes ro="+e+" noteid="+(t=null==t?encodeURIComponentEx("p"+userinfo._id):t)+" readonly style=background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:scroll></textarea>",t.startsWith("node%2F%2F")&&(e+="<span style=font-size:10px>Le note del gruppo di dispositivi possono essere visualizzate e modificate da altri amministratori del gruppo di dispositivi.<span>"),setDialogMode(2,"Appunti ",3,showNotesEx,e,t),meshserver.send({action:"getNotes",id:decodeURIComponent(t)}))}function showNotesEx(e,t){meshserver.send({action:"setNotes",id:decodeURIComponent(t),notes:encodeURIComponentEx(Q("d2devNotes").value)})}function deviceChat(t){xxdialogMode||setDialogMode(2,"Azione del dispositivo",3,function(){var e="/messenger?id=meshmessenger/"+encodeURIComponentEx(currentNode._id)+"/"+encodeURIComponentEx(userinfo._id)+"&title="+currentNode.name;""!=serverinfo.domainsuffix&&(e="/"+serverinfo.domainsuffix+e),null!=authCookie&&""!=authCookie&&(e+="&auth="+authCookie),t&&1==t.shiftKey?safeNewWindow(e,"meshmessenger:"+currentNode._id):safeNewWindow(e,"meshmessenger:"+currentNode._id,"directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=400,height=560"),meshserver.send({action:"meshmessenger",nodeid:decodeURIComponent(currentNode._id)})},"Avviare una sessione di chat?")}function updateDeviceTimeline(){2==meshserver.State&&null!=powerTimelineNode&&null!=powerTimelineUpdate&&null!=currentNode&&3!=currentNode.mtype&&powerTimelineNode==powerTimelineReq&&currentNode._id==powerTimelineNode&&powerTimelineUpdate<Date.now()&&(powerTimelineUpdate=null,meshserver.send({action:"powertimeline",nodeid:currentNode._id}))}function drawDeviceTimeline(){if(3==currentNode.mtype)QH("p10html2","<br />");else{var e=null,t=Date.now(),o=(currentNode._id==powerTimelineNode&&(e=powerTimeline),new Date),n=(o.setHours(0,0,0,0),(o=new Date(o.getTime()-5184e5)).getTime(),[]);if(null!=e&&1<e.length){n.push([0,e[1],e[0]]);for(var i=e[1],a=2;a<e.length;a+=2){var s=e[a],l=t;e.length>a+1&&(l=e[a+1]),n.push([i,i+l,s]),i+=l}}var r="",d=1,c=new Date,u=Q("masthead").offsetWidth-122;c.setHours(0,0,0,0);for(a=0;a<7;a++){var p,m="",g=c.getTime(),h=g+864e5;for(p in n){var f,v,k=n[p];1==isTimeBlockInside(g,h,k[0],k[1])&&(f=Math.max(g,k[0]),v=Math.min(Math.min(h,k[1]),t),0<(v=Math.round((v-f)*u/864e5)))&&(m+="<div style=display:table-cell;width:"+v+"px;background-color:"+powerColor(k[2])+";height:16px></div>")}r+="<tr style="+(d%2==0?"background-color:#DDD":"")+"><td><div>&nbsp;"+printDate(c)+"<div></div></div></td><td><div>"+m+"</div></td></tr>",++d,c=new Date(c.getTime()-864e5)}QH("p10html2",'<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse;width:calc(100% - 18px);margin:9px" border=0 cellpadding=2 cellspacing=0><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:90px>Giorno</th><th scope=col style=text-align:center>Stato di alimentazione</th></tr>'+r+"</tbody></table>")}}function powerColor(e){return e<powerColorTable.length?powerColorTable[e]:"yellow"}function isTimeBlockInside(e,t,o,n){return o<e&&t<n||e<o&&o<t||e<n&&n<t}function addDeviceAttribute(e,t){return"<tr><td style=width:100px;color:gray>"+e+"</td><td style=overflow:hidden>"+t+"</td></tr>"}function editDeviceAmtSettings(e,t){var o,n;xxdialogMode||(o="",n=3,0!=(4&GetNodeRights(e=getNodeFromId(e)))&&(o=(o+=addHtmlValue("Nome utente",'<input id=dp10username style=width:170px maxlength=32 autocomplete=nope placeholder="admin" onchange=validateDeviceAmtSettings() onkeyup=validateDeviceAmtSettings() />'))+addHtmlValue("Password","<input id=dp10password type=password style=width:170px autocomplete=nope maxlength=32 onchange=validateDeviceAmtSettings() onkeyup=validateDeviceAmtSettings() />"),0==(1&features2)&&(o+=addHtmlValue("Sicurezza","<select id=dp10tls style=width:176px><option value=0>Nessuna sicurezza TLS </option><option value=1>Sicurezza TLS richiesta</option></select>")),setDialogMode(2,"Modifica Intel & reg; Credenziali AMT",n=null!=e.intelamt.user&&""!=e.intelamt.user?7:n,editDeviceAmtSettingsEx,o,{node:e,func:t}),null!=e.intelamt.user&&""!=e.intelamt.user?Q("dp10username").value=e.intelamt.user:Q("dp10username").value="admin",0==(1&features2)&&(Q("dp10tls").value=e.intelamt.tls),validateDeviceAmtSettings()))}function validateDeviceAmtSettings(){QE("idx_dlgOkButton",passwordcheck(Q("dp10password").value))}function editDeviceAmtSettingsEx(e,t){var o;2==e?meshserver.send({action:"changedevice",nodeid:t.node._id,intelamt:{user:"",pass:""}}):(""==(e=Q("dp10username").value)&&(e="admin"),o=Q("dp10password").value,e={action:"changedevice",nodeid:t.node._id,intelamt:{user:e=""==o?"":e,pass:o}},0==(1&features2)&&(e.intelamt.tls=parseInt(Q("dp10tls").value)),meshserver.send(e),t.func&&setTimeout(t.func,1e3))}function p10showDeleteNodeDialog(e){xxdialogMode||(setDialogMode(2,"Elimina nodo",3,p10showDeleteNodeDialogEx,format("Eliminare {0}?",EscapeHtml(currentNode.name))+"<br /><br /><label><input id=p10check type=checkbox onchange=p10validateDeleteNodeDialog() />Confermare</label>",e),p10validateDeleteNodeDialog())}function p10validateDeleteNodeDialog(){QE("idx_dlgOkButton",Q("p10check").checked)}function p10showDeleteNodeDialogEx(e,t){meshserver.send({action:"removedevices",nodeids:[t]})}function p10WebRouter(e,t,o,n){var i=null,a=getNodeFromId(e),s=(3==a.mtype&&(s=meshes[a.meshid])&&s.relayid&&(i=s.relayid,n=a.host),serverinfo.name),a=(-1!=s.indexOf(".")&&0==(2&features)||(s=window.location.hostname),"https://"+(s=""!=webRelayDns?webRelayDns:s)+":"+webRelayPort+"/control-redirect.ashx?n="+e+"&p="+o+"&appid="+t+"&c="+authRelayCookie);return null!=n&&(a+="&addr="+n),null!=i&&(a+="&relayid="+i),safeNewWindow(a,"WebRelay"),!1}function p10showiconselector(){xxdialogMode||0!=(4&GetNodeRights(currentNode))&&(setDialogMode(2,"Selezione dell'icona",0,null,"<table align=center><td style=text-align:center><div style=display:inline-block class=i1 onclick=p10setIcon(1)></div><div style=display:inline-block class=i2 onclick=p10setIcon(2)></div><div style=display:inline-block class=i3 onclick=p10setIcon(3)></div><div style=display:inline-block class=i4 onclick=p10setIcon(4)></div><br /><div style=display:inline-block class=i5 onclick=p10setIcon(5)></div><div style=display:inline-block class=i6 onclick=p10setIcon(6)></div><div style=display:inline-block class=i7 onclick=p10setIcon(7)></div><div style=display:inline-block class=i8 onclick=p10setIcon(8)></div></table>"),QV("id_dialogclose",!0))}function p10setIcon(e){setDialogMode(0),meshserver.send({action:"changedevice",nodeid:currentNode._id,icon:e})}function showClearSshDialog(){setDialogMode(2,"Modifica dispositivo",3,showClearSshDialogEx,"Cancellare le credenziali SSH?")}function showClearSshDialogEx(e,t){meshserver.send({action:"changedevice",nodeid:currentNode._id,ssh:0})}function showClearRdpDialog(){setDialogMode(2,"Modifica dispositivo",3,showClearRdpDialogEx,"Cancellare le credenziali RDP?")}function showClearRdpDialogEx(e,t){meshserver.send({action:"changedevice",nodeid:currentNode._id,rdp:0})}var desktop,desktopNode,showEditNodeValueDialog_modes=["Nome del dispositivo","Nome host","Descrizione","Tags"],showEditNodeValueDialog_modes2=["name","host","desc","tags"],showEditNodeValueDialog_modes3=["","","","Gruppo1, Gruppo2, Gruppo3"];function showEditNodeValueDialog(e){if(!xxdialogMode){var t=addHtmlValue(showEditNodeValueDialog_modes[e],'<input id=dp10devicevalue style=width:170px maxlength=64 placeholder="'+showEditNodeValueDialog_modes3[e]+'" onchange=p10editdevicevalueValidate('+e+",event) onkeyup=p10editdevicevalueValidate("+e+",event) />");if(3==e){var o=[],n="";for(a in nodes)if(nodes[a].tags)for(var i in nodes[a].tags)-1==o.indexOf(nodes[a].tags[i])&&o.push(nodes[a].tags[i]);if(0<o.length){for(var a in o.sort(),o)n+='<span style=padding:4px;background-color:#BBB;border-radius:3px;cursor:pointer onclick=showEditNodeValueDialogAddTag("'+encodeURIComponentEx(o[a])+'")>'+EscapeHtml(o[a])+"</span> ";t+="<div style=margin-top:8px;width:280px;line-height:26px;max-height:160px;overflow-y:auto>"+n+"</div>"}}setDialogMode(2,"Modifica dispositivo",3,showEditNodeValueDialogEx,t,e);t=currentNode[showEditNodeValueDialog_modes2[e]];null==t&&(t=""),Array.isArray(t)&&(t=t.join(", ")),Q("dp10devicevalue").value=t,p10editdevicevalueValidate(),Q("dp10devicevalue").focus()}}function showEditNodeValueDialogAddTag(e){var t,o=Q("dp10devicevalue").value.split(","),n=[];for(t in o)n.push(o[t].trim());0<=n.indexOf(e)||(Q("dp10devicevalue").value+=(0==Q("dp10devicevalue").value.length?"":", ")+decodeURIComponent(e),setTimeout(function(){Q("dp10devicevalue").selectionStart=Q("dp10devicevalue").selectionEnd=9e4},0),p10editdevicevalueValidate())}function showEditNodeValueDialogEx(e,t){var o={action:"changedevice",nodeid:currentNode._id};o[showEditNodeValueDialog_modes2[t]]=Q("dp10devicevalue").value,meshserver.send(o)}function p10editdevicevalueValidate(e,t){e=1<e||0<Q("dp10devicevalue").value.length;QE("idx_dlgOkButton",e),null!=t&&1==e&&13==t.keyCode&&dialogclose(1)}var desktopsettings={encoding:2,showfocus:!1,showmouse:!0,showcad:!0,quality:40,scaling:1024,framerate:50,autolock:!1};function setupDesktop(){desktopNode!=currentNode&&null!=desktop&&(desktop.Stop(),desktop=desktopNode=null),desktopNode==currentNode&&null!=desktop||(desktopNode=currentNode,Q("Desk").addEventListener("DOMMouseScroll",function(e){return dmousewheel(e)}),Q("Desk").addEventListener("mousewheel",function(e){return dmousewheel(e)})),desktopNode=currentNode,updateDesktopButtons(),Q("Desk").toBlob||QV("deskSaveBtn",!1)}function updateDesktopButtons(){meshes[currentNode.meshid];var e=0,t=(null!=desktop&&(e=desktop.State),GetNodeRights(currentNode)),e=(QV("disconnectbutton1",0!=e),QE("deskFullScreen",0!=e),QV("connectbutton1",0==e&&(8&t||256&t)&&null!=currentNode.agent&&1&currentNode.agent.caps),QV("connectbutton1h",0==e&&8&t&&null!=currentNode.intelamt&&2==currentNode.intelamt.state&&null!=currentNode.intelamt.ver&&(null==currentNode.intelamt.sku||"number"==typeof currentNode.intelamt.sku&&0!=(8&currentNode.intelamt.sku))),QV("d7amtkvm",!(null==currentNode.intelamt||"number"==typeof currentNode.intelamt.sku&&0!=(16&currentNode.intelamt.sku)||null==currentNode.intelamt.ver&&null!=currentNode.agent||0!=e&&2!=desktop.contype)),QV("d7meshkvm",null!=currentNode.agent&&1&currentNode.agent.caps&&(0==e||1==desktop.contype)),0!=(1&currentNode.conn)),o=(QE("connectbutton1",e),0!=(6&currentNode.conn));QE("connectbutton1h",o),QV("DeskToastButton",0!=(16384&t)&&currentNode.agent&&currentNode.agent.id<5&&8&t),QV("deskActionsBtn",8&t),Q("DeskControl").checked=0!=(8&t),0==e&&QV("DeskTools",!1)}var agentConsoleMessages=["","In attesa che l'utente conceda l'accesso... ","Negato","Impossibile avviare la sessione del terminale remoto, {0} ({1})","Tempo scaduto","Dati di rete non validi ricevuti"];function formatAgentConsoleMessage(e,t,o){for(null==o&&(o=[]);o.length<3;)o.push("");return(t&&t<agentConsoleMessages.length?EscapeHtml(format(agentConsoleMessages[t],o[0],o[1],o[2])):EscapeHtml(e)).split("\n").join("<br />")+"<br /><br />"}function connectDesktop(e,t,o,n){setSessionActivity(),QV("p11DeskSessionSelector",!1),p11clearConsoleMsg(),null==desktop?(desktopNode=currentNode,2==t?null==desktopNode.intelamt.user||""==desktopNode.intelamt.user?editDeviceAmtSettings(desktopNode._id,connectDesktop):((desktop=CreateAmtRedirect(CreateAmtRemoteDesktop("Desk"),authCookie)).debugmode=debugmode,desktop.onStateChanged=onDesktopStateChange,desktop.m.bpp=1==desktopsettings.encoding||3==desktopsettings.encoding?1:2,desktop.m.useZRLE=desktopsettings.encoding<3,desktop.m.showmouse=!0,desktop.m.onScreenSizeChange=function(e,t,o){fullscreen&&(QS("deskarea3").width=t*fullscreenzoom+"px",QS("deskarea3").height=o*fullscreenzoom+"px"),deskAdjust()},4==desktopNode.conn&&null!=desktopNode.intelamt&&1==desktopNode.intelamt.tls?desktop.Start(desktopNode._id,16995,"*","*",1):desktop.Start(desktopNode._id,16994,"*","*",0),desktop.contype=2):null==t||1==t||3==t&&4<currentNode.agent.id?((desktop=CreateAgentRedirect(meshserver,CreateAgentRemoteDesktop("Desk"),serverPublicNamePort,authCookie,authRelayCookie,domainUrl)).debugmode=debugmode,desktop.m.debugmode=debugmode,desktop.attemptWebRTC=attemptWebRTC,desktop.options={},null!=o&&(desktop.options.tsid=o),null!=n&&(desktop.options.consent=n),1==desktopsettings.autolock&&(desktop.options.autolock=!0),desktop.onStateChanged=onDesktopStateChange,0!=(8192&features2)&&(desktop.m.stopInput=!0),desktop.onConsoleMessageChange=function(){desktop.consoleMessage?(Q("p11DeskConsoleMsg").innerHTML+=formatAgentConsoleMessage(desktop.consoleMessage,desktop.consoleMessageId,desktop.consoleMessageArgs),QV("p11DeskConsoleMsg",!0),null!=p11DeskConsoleMsgTimer&&clearTimeout(p11DeskConsoleMsgTimer),desktop.consoleMessageTimeout&&(p11DeskConsoleMsgTimer=setTimeout(p11clearConsoleMsg,1e3*desktop.consoleMessageTimeout))):p11clearConsoleMsg()},desktop.m.ImageType=webpSupport?4:1,desktop.m.CompressionLevel=desktopsettings.quality,desktop.m.ScalingLevel=desktopsettings.scaling,desktop.m.FrameRateTimer=desktopsettings.framerate,desktop.m.onDisplayinfo=deskDisplayInfo,desktop.m.onScreenSizeChange=function(e,t,o){fullscreen&&(QS("deskarea3").width=t*fullscreenzoom+"px",QS("deskarea3").height=o*fullscreenzoom+"px"),deskAdjust()},desktop.Start(desktopNode._id),desktop.contype=1):3==t&&meshserver.send({action:"msg",type:"userSessions",nodeid:currentNode._id,tag:n})):(desktop.Stop(),desktopNode=desktop=null)}function p11clearConsoleMsg(){QH("p11DeskConsoleMsg",""),QV("p11DeskConsoleMsg",!1),p11DeskConsoleMsgTimer&&(clearTimeout(p11DeskConsoleMsgTimer),p11DeskConsoleMsgTimer=null)}function p12clearConsoleMsg(){QH("p12TermConsoleMsg",""),QV("p12TermConsoleMsg",!1),p12TermConsoleMsgTimer&&(clearTimeout(p12TermConsoleMsgTimer),p12TermConsoleMsgTimer=null)}function p13clearConsoleMsg(){QH("p13FilesConsoleMsg",""),QV("p13FilesConsoleMsg",!1),p13FilesConsoleMsgTimer&&(clearTimeout(p13FilesConsoleMsgTimer),p13FilesConsoleMsgTimer=null)}function p12setConsoleMsg(e,t){e?(Q("p12TermConsoleMsg").innerHTML+=e,QV("p12TermConsoleMsg",!0),null!=p12TermConsoleMsgTimer&&clearTimeout(p12TermConsoleMsgTimer),t&&(p12TermConsoleMsgTimer=setTimeout(p12clearConsoleMsg,t))):p12clearConsoleMsg()}function p13setConsoleMsg(e,t){e?(Q("p13FilesConsoleMsg").innerHTML+=e,QV("p13FilesConsoleMsg",!0),null!=p13FilesConsoleMsgTimer&&clearTimeout(p13FilesConsoleMsgTimer),t&&(p13FilesConsoleMsgTimer=setTimeout(p13clearConsoleMsg,t))):p13clearConsoleMsg()}function onDesktopStateChange(e,t){var o=t,e=(3==o&&2==e.contype&&o++,StatusStrs[o]);null!=desktop&&1==desktop.webRtcActive&&(e+=", WebRTC"),QH("deskstatus",e),0===t&&(desktop.Stop(),desktopNode=desktop=null,QV("DeskScreens",!1),1==fullscreen)&&deskToggleFull(),updateDesktopButtons(),deskAdjust(),setTimeout(deskAdjust,50)}function showDesktopSettings(){xxdialogMode||(applyDesktopSettings(),updateDesktopButtons(),setDialogMode(7,"Impostazioni desktop remoto",3,showDesktopSettingsChanged))}function showDesktopSettingsChanged(){desktopsettings.encoding=d7desktopmode.value,desktopsettings.quality=d7bitmapquality.value,desktopsettings.scaling=d7bitmapscaling.value,desktopsettings.framerate=d7framelimiter.value,desktopsettings.autolock=d7deskAutoLock.checked,localStorage.setItem("desktopsettings",JSON.stringify(desktopsettings)),applyDesktopSettings(),desktop&&(1==desktop.contype&&(0!=desktop.State&&desktop.m.SendCompressionLevel(webpSupport?4:1,desktopsettings.quality,desktopsettings.scaling,desktopsettings.framerate),desktop.sendCtrlMsg('{"ctrlChannel":"102938","type":"autolock","value":'+desktopsettings.autolock+"}")),2==desktop.contype)&&0!=desktop.State&&(desktop.Stop(),setTimeout(function(){connectDesktop(null,2)},50))}function applyDesktopSettings(){var e,t="",o=512&features?[100,90,70,50,40,30,20,10,5,1]:[50,40,30,20,10,5,1];for(e in o)t+="<option value="+o[e]+">"+o[e]+"%</option>";QH("d7bitmapquality",t),d7desktopmode.value=desktopsettings.encoding,d7bitmapquality.value=40,0<=o.indexOf(parseInt(desktopsettings.quality))&&(d7bitmapquality.value=desktopsettings.quality),d7bitmapscaling.value=desktopsettings.scaling,desktopsettings.framerate&&(d7framelimiter.value=desktopsettings.framerate),null!=desktopsettings.autolock&&(d7deskAutoLock.checked=desktopsettings.autolock)}var keyboardShown=!1,keyboardShownTimer=null,fullScreenMode=!1;function toggleKeyboard(){xxdialogMode||(null!=keyboardShownTimer&&clearTimeout(keyboardShownTimer),keyboardShown=keyboardShown?(Q("softKeyboard").blur(),!1):(Q("softKeyboard").focus(),!0),QV("deskkeybutton2a",fullscreen&&!keyboardShown),QV("deskkeybutton2b",fullscreen&&keyboardShown))}function keyboardFocusChange(){keyboardShownTimer=setTimeout(function(){keyboardShownTimer=null,keyboardShown=Q("softKeyboard")==document.activeElement,QV("deskkeybutton2a",fullscreen&&!keyboardShown),QV("deskkeybutton2b",fullscreen&&keyboardShown)},10)}function exitButton(){xxdialogMode||(QV("deskButtonMenu",!1),QV("termButtonMenu",!1),deskToggleFull())}function deskMenuButton(e){toggleMenu(!0),deskSendKeys(e)}function updateDeskShortcutKeys(){var e,t='<div class="menuButton" onclick="deskMenuButton(-1)">Personalizzare</div>';for(e in deskKeyboardShortcuts)t+='<div class="menuButton" onclick="deskMenuButton('+deskKeyboardShortcuts[e]+')">'+keyShortcutTotext(deskKeyboardShortcuts[e])+"</div>";QH("deskButtonMenu",t)}var keyStrings={8:"Tornare  indietro",9:"Tab",13:"accedere",27:"Escape",44:"Stampa schermo",45:"Inserire",46:"Canc",36:"Home",35:"Fine",32:"Espace",33:"Pagina su",34:"Pagina giù",37:"Sinistra",38:"Su",39:"Destro",40:"Giù",0:"Nessuna "};function keyShortcutTotext(e){var t=[];return 65536&e&&t.push("Shift"),131072&e&&t.push("Alt"),524288&e&&t.push("Ctrl"),1048576&e&&t.push("Win"),112<=(e&=65535)&&e<=123?t.push("F"+(e-111)):0!=e&&keyStrings[e]?t.push(keyStrings[e]):0!=e&&t.push(String.fromCharCode(e)),t.join(" + ")}function deskCustomizeKeys(){if(!xxdialogMode){var e=(e='<div id=d2shortcuts style="width:100%;height:180px;padding:4px;overflow-y:auto;border:1px solid gray"></div><div style=width:100%;padding:5px>')+"<label><input id=d1kshift type=checkbox /> Shift</label><label> <input id=d1kalt type=checkbox /> Alt</label><label> <input id=d1kctrl type=checkbox /> Ctrl</label> <input id=d1kwin type=checkbox /> Win</label>"+" <select id=d2keySelect>";for(t in keyStrings)e+="<option value="+t+">"+keyStrings[t]+"</option>";for(var t=1;t<=12;t++)e+="<option value="+(t+111)+">F"+t+"</option>";for(t=0;t<10;t++)e+="<option value="+(t+48)+">"+t+"</option>";for(t=0;t<26;t++)e+="<option value="+(t+65)+">"+String.fromCharCode(t+65)+"</option>";e+="</select> <input type=button value=Aggiungi onclick=addDeskCustomizeKey() /></div>",QH("p10dialog2",e),xxdialogMode=2,QV("p10dialog",!0),deskUpdateShortcutList()}}function deskCustomizeKeysEx(){QV("p10dialog",!1),xxdialogMode=0,putstore("deskKeyShortcuts",deskKeyboardShortcuts.join(",")),updateDeskShortcutKeys()}function deskUpdateShortcutList(){var e,t="";for(e in deskKeyboardShortcuts){var o=keyShortcutTotext(deskKeyboardShortcuts[e]),n="";e!=deskKeyboardShortcuts.length-1&&(n+='<img width=8 height=8 style=float:right;cursor:pointer;padding:3px src="images/c2.png" onclick=deskCustomizeKeyDown('+deskKeyboardShortcuts[e]+")>"),0!=e&&(n+='<img width=8 height=8 style=float:right;cursor:pointer;padding:3px src="images/c3.png" onclick=deskCustomizeKeyUp('+deskKeyboardShortcuts[e]+")>"),t+='<div style="width:100%;background-color:#AAA;border-radius:4px;margin-bottom:4px;padding:4px;text-align:left;box-sizing:border-box" value='+deskKeyboardShortcuts[e]+">"+o+'<img width=10 height=10 style=float:right;cursor:pointer;padding:2px;margin-left:8px src="images/trash.png" onclick=removeDeskCustomizeKey('+deskKeyboardShortcuts[e]+")>"+n+"</div>"}""==t&&(t="<i>Nessuna scorciatoia da tastiera definita</i>"),QH("d2shortcuts",t)}function deskCustomizeKeyDown(e){var e=deskKeyboardShortcuts.indexOf(e),t=deskKeyboardShortcuts[e+1];deskKeyboardShortcuts[e+1]=deskKeyboardShortcuts[e],deskKeyboardShortcuts[e]=t,deskUpdateShortcutList()}function deskCustomizeKeyUp(e){var e=deskKeyboardShortcuts.indexOf(e),t=deskKeyboardShortcuts[e];deskKeyboardShortcuts[e]=deskKeyboardShortcuts[e-1],deskKeyboardShortcuts[e-1]=t,deskUpdateShortcutList()}function removeDeskCustomizeKey(e){var t,o=[];for(t in deskKeyboardShortcuts)deskKeyboardShortcuts[t]!=e&&o.push(deskKeyboardShortcuts[t]);deskKeyboardShortcuts=o,deskUpdateShortcutList()}function addDeskCustomizeKey(){var e=parseInt(Q("d2keySelect").value);Q("d1kshift").checked&&(e|=65536),Q("d1kalt").checked&&(e|=131072),Q("d1kctrl").checked&&(e|=524288),Q("d1kwin").checked&&(e|=1048576),0<e&&-1==deskKeyboardShortcuts.indexOf(e)&&(deskKeyboardShortcuts.push(e),deskUpdateShortcutList())}function deskSendKeys(e){if(!xxdialogMode&&null!=desktop&&3==desktop.State)if(-1==e)deskCustomizeKeys();else if(655406==e)desktop.m.sendcad();else{var t=(16711680&e)>>16,e=65535&e,o=[],n=[],i={8:65288,9:65289,13:65293,27:65307,45:65379,46:65535,36:65360,35:65367,33:65365,34:65366,37:65361,38:65362,39:65363,40:65364,112:65470,113:65471,114:65472,115:65473,116:65474,117:65475,118:65476,119:65477,120:65478,121:65479,122:65480,123:65481};if(2==desktop.contype){1&t&&(o.push([65505,1]),n.push([65505,0])),2&t&&(o.push([65513,1]),n.push([65513,0])),8&t&&(o.push([65507,1]),n.push([65507,0])),16&t&&(o.push([65511,1]),n.push([65511,0])),65<=(e=i[e]?i[e]:e)&&e<=90&&(e+=32),0!=e&&(o.push([e,1]),n.push([e,0])),n.reverse();for(var a=0;a<n.length;a++)o.push(n[a]);desktop.m.sendkey(o)}else{1&t&&(o.push([desktop.m.KeyAction.DOWN,16]),n.push([desktop.m.KeyAction.UP,16])),2&t&&(o.push([desktop.m.KeyAction.EXDOWN,18]),n.push([desktop.m.KeyAction.EXUP,18])),8&t&&(o.push([desktop.m.KeyAction.EXDOWN,17]),n.push([desktop.m.KeyAction.EXUP,17])),16&t&&(o.push([desktop.m.KeyAction.EXDOWN,91]),n.push([desktop.m.KeyAction.EXUP,91])),0!=e&&(o.push([desktop.m.KeyAction.DOWN,e]),n.push([desktop.m.KeyAction.UP,e])),n.reverse();for(a=0;a<n.length;a++)o.push(n[a]);desktop.m.SendKeyMsgKC(o)}}}function toggleMenu(e){xxdialogMode||(QV("deskButtonMenu",fullscreen&&!e&&1==currentDevicePanel),QV("termButtonMenu",fullscreen&&!e&&5==currentDevicePanel),QV("deskkeybutton3a",fullscreen&&e),QV("deskkeybutton3b",fullscreen&&!e))}function deskChangeMouseButton(e){xxdialogMode||null!=desktop&&(desktop.m.SwapMouse=!desktop.m.SwapMouse,QV("deskkeybutton4a",fullscreen&&!desktop.m.SwapMouse),QV("deskkeybutton4b",fullscreen&&desktop.m.SwapMouse))}function deskChangeFullscreenZoom(){if(!xxdialogMode){if(1==currentDevicePanel){if(null==desktop)return;fullscreenzoom=1==fullscreenzoom?.5:1,QV("deskkeybutton5a",fullscreen&&1==fullscreenzoom),QV("deskkeybutton5b",fullscreen&&1!=fullscreenzoom),QS("deskarea3").width=desktop.m.ScreenWidth*fullscreenzoom+"px",QS("deskarea3").height=desktop.m.ScreenHeight*fullscreenzoom+"px",deskAdjust()}5==currentDevicePanel&&null!=terminal&&xterm.setOption("fontSize",15==xterm.getOption("fontSize")?10:15)}}var terminalNode,filesNode,fullscreen=!1,fullscreenzoom=1;function deskToggleFull(){fullscreen=!fullscreen,QV("mastheadx",!fullscreen),QV("masthead",!fullscreen),QV("topbar",!fullscreen),QV("p11deviceNameHeader",!fullscreen),QV("footer",!fullscreen),QV("column_l_bottomgap",!fullscreen),QV("idx_deskFullBtn2",fullscreen),QV("deskFullBtn",!fullscreen),QV("p10deskTopTable",!fullscreen),QV("deskarea1",!fullscreen),QV("deskarea4",!fullscreen),QV("termarea1",!fullscreen),QV("termarea4",!fullscreen);var e=GetNodeRights(currentNode),e=0==(8192&features2)&&14!=currentNode.agent.id&&(4294967295==e||0!=(8&e)&&0==(256&e)&&0==(4096&e));QV("deskkeybutton1",fullscreen),1==currentDevicePanel&&(QS("deskkeybutton2a").top=QS("deskkeybutton2b").top="210px",QS("deskkeybutton5a").top=QS("deskkeybutton5b").top=e?"160px":"60px",QV("deskkeybutton2a",fullscreen&&e),QV("deskkeybutton2b",!1),QV("deskkeybutton3a",fullscreen&&e),QV("deskkeybutton3b",!1),QV("deskkeybutton4a",fullscreen&&e&&!desktop.m.SwapMouse),QV("deskkeybutton4b",fullscreen&&e&&desktop.m.SwapMouse),QV("deskkeybutton5a",fullscreen&&1==fullscreenzoom),QV("deskkeybutton5b",fullscreen&&1!=fullscreenzoom)),5==currentDevicePanel&&(QS("deskkeybutton2a").top=QS("deskkeybutton2b").top="110px",QV("deskkeybutton2a",fullscreen),QV("deskkeybutton2b",!1),QV("deskkeybutton3a",fullscreen),QV("deskkeybutton3b",!1),QV("deskkeybutton4a",!1),QV("deskkeybutton4b",!1),QV("deskkeybutton5a",!1),QV("deskkeybutton5a",!1)),fullscreen?(QS("DeskParent").height=null,QS("page_content").top="0px",QS("page_content").bottom="0px",1==currentDevicePanel&&(QS("p10desktop").top="0px",QS("p10desktop").overflow="scroll",QS("deskarea3").top="0px",QS("deskarea3").width=desktop.m.ScreenWidth*fullscreenzoom+"px",QS("deskarea3").height=desktop.m.ScreenHeight*fullscreenzoom+"px",QS("deskarea3")["padding-right"]="55px"),5==currentDevicePanel&&(QS("p10terminal").top="0px",QS("p10terminal").overflow="scroll",QS("termarea3").top="0px",QS("termarea3").bottom=null,QS("termarea3").right=null,QS("termarea3")["padding-right"]="55px",QS("termarea3").height="100%"),QS("body")["background-color"]="#000",QS("p10")["background-color"]="#000"):(QS("DeskParent").height="100%",QS("page_content").top="50px",QS("page_content").bottom="32px",1==currentDevicePanel&&(QS("p10desktop").top="55px",QS("p10desktop").overflow="hidden",QS("deskarea3").top="32px",QS("deskarea3").left=null,QS("deskarea3").width="100%",QS("deskarea3").height="calc(100% - 64px)",QS("deskarea3")["padding-right"]="",QS("DeskParent")["margin-top"]=null,QS("DeskParent")["margin-left"]=null),5==currentDevicePanel&&(QS("p10terminal").top="55px",QS("p10terminal").overflow="hidden",Q("p10terminal").scrollTop=0,Q("p10terminal").scrollLeft=0,QS("termarea3").top="32px",QS("termarea3").bottom="32px",QS("termarea3")["padding-right"]=null,QS("termarea3").height="calc(100% - 60px)"),QS("body")["background-color"]=nightMode?"#000":"#FFF",QS("p10")["background-color"]=null),1==currentDevicePanel&&deskAdjust()}function deskAdjust(){var e,t,o,n;1==currentDevicePanel&&(fullscreen?(QS("Desk")["margin-top"]=null,QS("Desk")["margin-bottom"]=null,QS("Desk").width="100%",QS("Desk").height="100%",e=Q("p10desktop").clientHeight,o=Q("p10desktop").clientWidth,t=Q("deskarea3").clientHeight,n=Q("deskarea3").clientWidth-55,QS("deskarea3").top=t<e?(e-t)/2+"px":null,QS("deskarea3").left=n<o?(o-n)/2+"px":null):(e=Q("DeskParent").clientHeight,o=Q("DeskParent").clientWidth,(t=Q("Desk").height)/(n=Q("Desk").width)<e/o?(o=t*o/n+"px",QS("Desk").height=o,QS("Desk").width="100%"):(o=n*e/t+"px",QS("Desk").width=o,QS("Desk").height="100%"),QS("DeskParent").overflow="hidden",n=(Q("DeskParent").clientHeight-Q("Desk").clientHeight)/2,QS("Desk")["margin-top"]=n+"px",QS("Desk")["margin-bottom"]=n+"px"))}function sendSpecialKeys(){xxdialogMode||null==desktop||3!=desktop.State||setDialogMode(3,"Tasti speciali",3,deskSendKeys)}function deskSaveImage(){var e,t;setSessionActivity(),xxdialogMode||null==desktop||3!=desktop.State||(e=new Date,t="Desktop-"+currentNode.name+"-"+e.getFullYear()+"-"+("0"+(e.getMonth()+1)).slice(-2)+"-"+("0"+e.getDate()).slice(-2)+"-"+("0"+e.getHours()).slice(-2)+"-"+("0"+e.getMinutes()).slice(-2),Q("Desk").toBlob(function(e){saveAs(e,t+".png")}))}function deskSelectScreens(){if(!xxdialogMode&&null!=desktop&&3==desktop.State){var e,t="",o=desktop.m.displays;for(e in o)t+="<option value="+e+" "+(desktop.m.selectedDisplay==e?" selected":"")+">"+o[e]+"</option>";setDialogMode(2,"Selezione dello schermo",3,deskSelectScreensEx,t=addHtmlValue4("Schermo","<select style=width:100% id=deskdisplays>"+t+"</select>"))}}function deskSelectScreensEx(){null!=desktop&&3==desktop.State&&desktop.m.SetDisplay(parseInt(Q("deskdisplays").value))}function deskDisplayInfo(e,t,o,n){var i,a=0;for(i in t)a++;QV("DeskScreens",1<a)}function dmousedown(e){setSessionActivity(),xxdialogMode||null==desktop||(fullscreen&&(e.addx=Q("p10desktop").scrollLeft*(1/fullscreenzoom),e.addy=Q("p10desktop").scrollTop*(1/fullscreenzoom)),desktop.m.mousedown(e))}function dmouseup(e){setSessionActivity(),xxdialogMode||null==desktop||(fullscreen&&(e.addx=Q("p10desktop").scrollLeft*(1/fullscreenzoom),e.addy=Q("p10desktop").scrollTop*(1/fullscreenzoom)),desktop.m.mouseup(e))}function dmousemove(e){setSessionActivity(),xxdialogMode||null==desktop||(fullscreen&&(e.addx=Q("p10desktop").scrollLeft*(1/fullscreenzoom),e.addy=Q("p10desktop").scrollTop*(1/fullscreenzoom)),desktop.m.mousemove(e))}function dmousewheel(e){return setSessionActivity(),!(xxdialogMode||null==desktop||!desktop.m.mousewheel||(fullscreen&&(e.addx=Q("p10desktop").scrollLeft*(1/fullscreenzoom),e.addy=Q("p10desktop").scrollTop*(1/fullscreenzoom)),desktop.m.mousewheel(e),haltEvent(e),0))}function drotate(e){xxdialogMode||null==desktop||(desktop.m.setRotation(desktop.m.rotation+e),deskAdjust())}function setupTerminal(){terminalNode!=currentNode&&null!=terminal&&(terminal.Stop(),terminal=null),terminalNode=currentNode,updateTerminalButtons()}function updateTerminalButtons(){currentNode.agent;var e=null!=terminal&&0!=terminal.state,t=(QE("termFullScreen",0!=e),3==terminalNode.mtype&&null!=terminalNode.agent&&4<terminalNode.agent.id&&512&features2&&(terminalNode.agent.caps=6),QV("disconnectbutton2span",1==e),QV("connectbutton2span",0==e&&null!=terminalNode.agent&&2&terminalNode.agent.caps&&3!=terminalNode.mtype),QV("connectbutton2sspan",0==e&&null!=terminalNode.agent&&2&terminalNode.agent.caps&&3!=terminalNode.agent.id&&4!=terminalNode.agent.id),0!=(1&terminalNode.conn)||3==terminalNode.mtype);QE("connectbutton2",t),QE("connectbutton2s",t),QV("termActionsBtn",3!=terminalNode.mtype),1==e&&3!=terminal.contype||null==terminalNode.agent||3==terminalNode.agent.id||4==terminalNode.agent.id?QH("terminalCustomUpperRight",""):QH("terminalCustomUpperRight","<a style=cursor:pointer onclick=cmsshportaction(1,event)>"+format("Porta SSH {0}",terminalNode.sshport||22)+"</a>")}function cmsshportaction(e){xxdialogMode||(setDialogMode(2,"Connessione SSH",3,function(){var e=0<Q("d10sshport").value.length?parseInt(Q("d10sshport").value):22;meshserver.send({action:"changedevice",nodeid:currentNode._id,sshport:e})},'Porta di connessione remota SSH:<br /><br /><input type=text placeholder="22" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" maxlength=5 id=d10sshport type=text>',currentNode),Q("d10sshport").focus(),null!=currentNode.sshport&&(Q("d10sshport").value=currentNode.sshport))}function onTerminalStateChange(e,t){var o=t,e=(3==o&&2==e.contype&&o++,StatusStrs[o]);switch(1==terminal.webRtcActive&&(e+=", WebRTC"),QH("termstatus",e),t){case 0:xterm.dispose(),(xterm=null)!=terminal&&(terminal.Stop(),terminal=null);break;case 3:xterm.focus()}updateTerminalButtons()}function CreateRemoteTunnel(e,t){var o={protocol:1};return null!=t&&"number"==typeof t.protocol&&(o.protocol=t.protocol),o.onTunnelUpdate=e,o.xxStateChange=function(e){},o.ProcessBinaryData=function(e){o.onTunnelUpdate(e)},o.ProcessData=function(e){o.onTunnelUpdate(e)},o.terminalEmulation=1,o.fxEmulation=0,o.lineFeed="\r\n",o}function tunnelUpdate(e){null!=xterm&&(xterm.writeUtf8?"string"==typeof e?xterm.writeUtf8(e):xterm.writeUtf8(new Uint8Array(e)):"string"==typeof e?xterm.write(e):xterm.write(new Uint8Array(e)))}function sshTunnelAuthDialog(e,t){var o="";e.askkeypass?o+=addHtmlValue("Autenticazione","<select id=dp2authmethod style=width:150px onchange=sshAuthUpdate(event)><option value=3 selected>Chiave memorizzata</option><option value=1>Nome utente e password</option><option value=2>Nome utente e chiave</option></select>"):o+=addHtmlValue("Autenticazione","<select id=dp2authmethod style=width:150px onchange=sshAuthUpdate(event)><option value=1 selected>Nome utente e password</option><option value=2>Nome utente e chiave</option></select>"),o=(o=(o+="<div id=d2userauth style=display:none>")+addHtmlValue("Nome utente","<input id=dp2user style=width:150px maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />")+"</div><div id=d2passauth style=display:none>")+addHtmlValue("Password","<input type=password id=dp2pass style=width:150px maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />"),0==(4194304&features2)&&(o+="<label><input id=dp2keep type=checkbox>Ricorda le credenziali</label>"),o=(o=(o+="</div><div id=d2keyauth style=display:none>")+addHtmlValue("File chiave","<input type=file id=dp2key style=width:150px maxlength=64 autocomplete=off onchange=sshAuthUpdate(event) /><div id=d2badkey style=font-size:x-small>Il file chiave deve essere in formato OpenSSH.</div>"))+addHtmlValue("Password chiave","<input type=password id=dp2keypass style=width:150px maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />"),0==(4194304&features2)&&(o+="<label><input id=dp2keep1 type=checkbox onchange=sshAuthUpdate(event)>Ricorda utente e chiave</label><br/><label><input id=dp2keep2 type=checkbox>Ricordare la password</label>"),o+="</div>",setDialogMode(2,"Autenticazione",11,t,o=e.askkeypass?(o+="<div id=d2keyauth2 style=display:none>")+addHtmlValue("Password","<input type=password id=dp2keypass2 style=width:150px maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />")+"</div>":o,"ssh"),Q("dp2user").focus(),sshAuthUpdate(),setTimeout(sshAuthUpdate,50)}function sshTunnelUpdate(e){if("string"==typeof e)if("{"==e[0]){var t=JSON.parse(e);switch(t.action){case"sshauth":sshTunnelAuthDialog(t,sshConnectEx);break;case"sshautoauth":terminal.socket.send(JSON.stringify({action:"sshautoauth",cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight}));break;case"autherror":p12setConsoleMsg("Errore di autenticazione",5e3);break;case"sessionerror":p12setConsoleMsg("Sessione scaduta",5e3);break;case"sessiontimeout":p12setConsoleMsg("Timeout della sessione",5e3)}}else"~"==e[0]&&xterm.writeUtf8(e.substring(1))}function sshAuthUpdate(e){var t;QV("d2userauth",3!=Q("dp2authmethod").value),QV("d2passauth",1==Q("dp2authmethod").value),QV("d2keyauth",2==Q("dp2authmethod").value),QV("d2keyauth2",3==Q("dp2authmethod").value),1==Q("dp2authmethod").value?QE("idx_dlgOkButton",0<Q("dp2user").value.length&&0<Q("dp2pass").value.length):3==Q("dp2authmethod").value?QE("idx_dlgOkButton",0<Q("dp2keypass2").value.length):(QE("idx_dlgOkButton",!1),0==(4194304&features2)&&QE("dp2keep2",Q("dp2keep1").checked),1==(0<Q("dp2user").value.length&&null!=Q("dp2key").files&&1==Q("dp2key").files.length&&Q("dp2key").files[0].size<8e3)&&((t=new FileReader).onload=function(e){e=0<=e.target.result.indexOf("-----BEGIN OPENSSH PRIVATE KEY-----")&&0<=e.target.result.indexOf("-----END OPENSSH PRIVATE KEY-----")||0<=e.target.result.indexOf("-----BEGIN RSA PRIVATE KEY-----")&&0<=e.target.result.indexOf("-----END RSA PRIVATE KEY-----");QE("idx_dlgOkButton",e),QS("d2badkey").color=e?"#000":"#F00"},t.readAsText(Q("dp2key").files[0]))),e&&13==e.keyCode&&e.target&&1==Q("dp2authmethod").value&&("dp2user"==e.target.id&&Q("dp2pass").focus(),"dp2pass"==e.target.id)&&dialogclose(1)}function sshConnectEx(e){var t,o,n;0==e?null!=terminal&&connectTerminal():(t=0,1==Q("dp2authmethod").value?(0==(4194304&features2)&&(t=Q("dp2keep").checked?1:0),terminal.socket.send(JSON.stringify({action:"sshauth",username:Q("dp2user").value,password:Q("dp2pass").value,keep:t,cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight}))):3==Q("dp2authmethod").value?terminal.socket.send(JSON.stringify({action:"sshkeyauth",keypass:Q("dp2keypass2").value,cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight})):(0==(4194304&features2)&&1==(t=Q("dp2keep1").checked?1:0)&&(t+=Q("dp2keep2").checked?1:0),e=new FileReader,o=Q("dp2user").value,n=Q("dp2keypass").value,e.onload=function(e){terminal.socket.send(JSON.stringify({action:"sshauth",username:o,keypass:n,key:e.target.result,keep:t,cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight}))},e.readAsText(Q("dp2key").files[0])))}function xTermSendResize(){(xtermResizeTimer=null)!=xterm&&null!=terminal&&null!=terminal.sendCtrlMsg&&("sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send(JSON.stringify({action:"resize",cols:xterm.cols,rows:xterm.rows,width:Q("termarea3xdiv").offsetWidth,height:Q("termarea3xdiv").offsetHeight})):terminal.sendCtrlMsg(JSON.stringify({ctrlChannel:"102938",type:"termsize",cols:xterm.cols,rows:xterm.rows})))}function connectTerminal(e,t,o){var n;p12clearConsoleMsg(),terminal?(terminal.Stop(),terminal=null,fullscreen&&deskToggleFull()):(n={protocol:null!=o&&"number"==typeof o.protocol?o.protocol:1},o&&o.requireLogin&&(n.requireLogin=!0),QV("termarea3xdiv",!0),null!=xterm&&xterm.dispose(),xterm=new Terminal,(xtermfit=new FitAddon.FitAddon)&&xterm.loadAddon(xtermfit),xterm.open(Q("termarea3xdiv")),xterm.onData(function(e){"sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+e):terminal.sendText(e)}),xtermfit&&xtermfit.fit(),xterm.onResize(function(e){xtermResizeTimer&&clearTimeout(xtermResizeTimer),xtermResizeTimer=setTimeout(xTermSendResize,200)}),document.getElementsByClassName("xterm-helper-textarea")[0].onfocus=()=>{xterm.blur(),fullscreen||toggleKeyboard()},document.getElementsByClassName("xterm-viewport")[0].style.overflow="hidden",terminal=CreateAgentRedirect(meshserver,CreateRemoteTunnel(3==t?sshTunnelUpdate:tunnelUpdate,n),serverPublicNamePort,authCookie,authRelayCookie,domainUrl),3==t&&(terminal.urlname="sshterminalrelay.ashx"),terminal.debugmode=debugmode,terminal.m.debugmode=debugmode,terminal.options=n,terminal.options={cols:xterm.cols,rows:xterm.rows},n.requireLogin&&(terminal.options.requireLogin=!0),terminal.Start(terminalNode._id),terminal.onStateChanged=onTerminalStateChange,terminal.contype=t,terminal.attemptWebRTC=!1,terminal.onConsoleMessageChange=function(){p12setConsoleMsg(terminal.consoleMessage?formatAgentConsoleMessage(terminal.consoleMessage,terminal.consoleMessageId,terminal.consoleMessageArgs):null,terminal.consoleMessageTimeout)}),Q("connectbutton2").blur()}function updateTermShortcutKeys(){for(var e="",t=64;t<=95;t++)e+='<div class="menuButton" style="width:70px" onclick="termMenuButton('+t+')">Ctrl + '+String.fromCharCode(t)+"</div>";QH("termButtonMenu",e)}function termMenuButton(e){toggleMenu(!0),"sshterminalrelay.ashx"==terminal.urlname?terminal.socket.send("~"+String.fromCharCode(e-64)):terminal.sendText(String.fromCharCode(e-64))}function setupFiles(){var e=filesNode==currentNode,t=0!=(1&(filesNode=currentNode).conn)||3==filesNode.mtype;QE("p13Connect",t),QE("p13Connects",t),QV("p13Connect",null==files&&2==filesNode.mtype),QV("p13Connects",null==files&&null!=filesNode.agent&&3!=filesNode.agent.id&&4!=filesNode.agent.id),QV("p13Disconnect",null!=files),0!=e&&0!=t||!files||(files.Stop(),files=null),p13setActions()}function onFilesStateChange(e,t){setSessionActivity(),QV("p13Connect",0==t&&2==filesNode.mtype),QV("p13Connects",0==t&&null!=filesNode.agent&&3!=filesNode.agent.id&&4!=filesNode.agent.id),QV("p13Disconnect",0!=t);var o=StatusStrs[t];switch(3==t&&(2==files.contype&&(o+=", SFTP"),1==files.webRtcActive)&&(o+=", WebRTC"),Q("p13Status").textContent=o,t){case 0:QH("p13files",""),p13filetree=null,p13filetreelocation=[],QH("p13currentpath",""),QE("p13FolderUp",!1),p13setActions(),null!=files&&(files.Stop(),files=null),null!=uploadFile&&(p13uploadFileTransferDone(),uploadFile=null);break;case 3:if(p13filetreelocation=[],p13targetpath="",files){var n=[];try{n=JSON.parse(getstore("_devFilePaths","[]"))}catch(e){}for(var i=0;i<n.length;i++)n[i].n==currentNode._id&&(p13targetpath=n[i].p);p13filetreelocation=p13targetpath.split("/"),files.sendText({action:"ls",reqid:1,path:p13targetpath})}}}function CreateRemoteFiles(e){var t={protocol:5};return t.onFileUpdate=e,t.xxStateChange=function(e){},t.ProcessData=function(e){t.onFileUpdate(e)},t}var autoConnectFilesTimer=null;function autoConnectFiles(e){autoConnectFilesTimer=null==autoConnectFilesTimer?setInterval(connectFiles,100):(clearInterval(autoConnectFilesTimer),null)}function connectFiles(e,t){p13clearConsoleMsg(),files?(files.Stop(),files=null):(files=CreateAgentRedirect(meshserver,CreateRemoteFiles(p13gotFiles),serverPublicNamePort,authCookie,authRelayCookie,domainUrl),2==t&&(files.urlname="sshfilesrelay.ashx"),files.contype=t,files.attemptWebRTC=attemptWebRTC,files.onStateChanged=onFilesStateChange,files.onConsoleMessageChange=function(){files.consoleMessage?(Q("p13FilesConsoleMsg").innerHTML+=formatAgentConsoleMessage(files.consoleMessage,files.consoleMessageId,files.consoleMessageArgs),QV("p13FilesConsoleMsg",!0),null!=p13FilesConsoleMsgTimer&&clearTimeout(p13FilesConsoleMsgTimer),files.consoleMessageTimeout&&(p13FilesConsoleMsgTimer=setTimeout(p13clearConsoleMsg,1e3*files.consoleMessageTimeout))):p13clearConsoleMsg()},files.Start(filesNode._id)),p13clipboard=p13clipboardFolder=null,p13clipboardCut=0,p13updateClipview()}var p13sortorder,p13filetree=null,p13targetpath=null,p13filetreelocation=[];function p13gotFiles(t){if(0<t.length&&123!=t.charCodeAt(0))p13gotDownloadBinaryData(t);else{try{t=JSON.parse(decode_utf8(t))}catch(e){t=JSON.parse(t)}if("download"==t.action)p13gotDownloadCommand(t);else{switch(t.action){case"sshauth":sshTunnelAuthDialog(t,p13sshConnectEx);break;case"autherror":return void p13setConsoleMsg("Errore di autenticazione",5e3);case"connectionerror":return void p13setConsoleMsg("Errore di connessione",5e3);case"sessionerror":return void p13setConsoleMsg("Sessione scaduta",5e3);case"sessiontimeout":return void p13setConsoleMsg("Timeout della sessione",5e3)}if(null!=t.action&&t.action.startsWith("upload"))p13gotUploadData(t);else if(null!=t.path)if(null==t.dir)""!=p13targetpath&&p13folderup();else if(t.path=t.path.replace(/\//g,"\\"),null!=p13filetree&&t.path==p13filetree.path){var e=p13getCheckedNames();p13filetree=t,p13updateFiles(e)}else{for(var o=t.path.replace(/\//g,"\\"),n=p13targetpath.replace(/\//g,"\\");0<o.length&&"\\"==o[0];)o=o.substring(1);for(;0<n.length&&"\\"==n[0];)n=n.substring(1);(o==n||"\\"==t.path&&""==p13targetpath)&&(p13filetree=t,p13updateFiles())}}}}function p13sshConnectEx(e){var t,o,n;0==e?null!=files&&connectFiles():(t=0,1==Q("dp2authmethod").value?(0==(4194304&features2)&&(t=Q("dp2keep").checked?1:0),files.socket.send(JSON.stringify({action:"sshauth",username:Q("dp2user").value,password:Q("dp2pass").value,keep:t}))):3==Q("dp2authmethod").value?files.socket.send(JSON.stringify({action:"sshkeyauth",keypass:Q("dp2keypass2").value})):(0==(4194304&features2)&&1==(t=Q("dp2keep1").checked?1:0)&&(t+=Q("dp2keep2").checked?1:0),e=new FileReader,o=Q("dp2user").value,n=Q("dp2keypass").value,e.onload=function(e){files.socket.send(JSON.stringify({action:"sshauth",username:o,keypass:n,key:e.target.result,keep:t}))},e.readAsText(Q("dp2key").files[0])))}function p13getCheckedNames(){for(var e=[],t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked&&e.push(p13filetree.dir[t[o].value].n);return e}function p13updateFiles(e){var t="",o="",n="<a style=cursor:pointer;color:black onclick=p13folderup(0)>Root</a>",i=p13filetree.path.split("\\");for(g in p13filetreelocation=[],i)""!=i[g]&&p13filetreelocation.push(i[g]);for(g in p13filetreelocation)n+=" / <a style=cursor:pointer;color:black onclick=p13folderup("+(parseInt(g)+1)+")>"+EscapeHtml(p13filetreelocation[g])+"</a>";var a=p13filetreelocation.join("/"),s=p13sort_files(p13filetree.dir);for(g in s){var l,r=s[g],d=r.n,c=40<d.length?EscapeHtml(d.substring(0,70))+"...":EscapeHtml(d),u="",p=(null!=r.s&&(u=getFileSizeStr(r.s)),"");p=r.t<3?"<div class=filelist file=999><input file=999 style=float:left name=fd class=fcb type=checkbox onchange=p13setActions() value='"+r.nx+"'>&nbsp;<span style=float:right></span><span><div class=fileIcon"+r.t+'></div><a style=cursor:pointer onclick=p13folderset("'+encodeURIComponent(r.nx)+'")>'+c+"</a></span></div>":(l=c,0<r.s&&(l='<a rel="noreferrer noopener" target="_blank" style=cursor:pointer onclick="p13downloadfile(\''+encodeURIComponent(a+"/"+d)+"','"+encodeURIComponent(d)+"',"+r.s+')">'+c+"</a>"),"<div class=filelist file=3><input file=3 style=float:left name=fd class=fcb type=checkbox onchange=p13setActions() value='"+r.nx+"'>&nbsp;<span style=float:right;padding-right:4px>"+u+"</span><span><div class=fileIcon"+r.t+"></div>"+l+"</span></div>"),r.t<3?t+=p:o+=p}if(QH("p13files",t+o),QH("p13currentpath",n),QE("p13FolderUp",0!=p13filetreelocation.length),null!=e)for(var m=document.getElementsByName("fd"),g=0;g<m.length;g++)0<=e.indexOf(p13filetree.dir[m[g].value].n)&&(m[g].checked=!0);p13setActions()}function p13folderset(e){p13targetpath=joinPaths(p13filetree.path,p13filetree.dir[e].n).split("\\").join("/"),files&&(p13storeCurrentPath(p13targetpath),files.sendText({action:"ls",reqid:1,path:p13targetpath}))}function p13folderup(e){if(null==e)p13filetreelocation.pop();else for(;p13filetreelocation.length>e;)p13filetreelocation.pop();p13targetpath=p13filetreelocation.join("/"),files&&(p13storeCurrentPath(p13targetpath),files.sendText({action:"ls",reqid:1,path:p13targetpath}))}function p13storeCurrentPath(e){var t=[],o=-1;try{t=JSON.parse(getstore("_devFilePaths","[]"))}catch(e){}for(var n=0;n<t.length;n++)t[n].n==currentNode._id&&(o=n);for(0<=o&&t.splice(o,1),t.push({n:currentNode._id,p:e});40<t.length;)t.shift();putstore("_devFilePaths",JSON.stringify(t))}function p13sort_filename(e,t){return e.ln>t.ln?+p13sortorder:e.ln<t.ln?-1*p13sortorder:0}function p13sort_timestamp(e,t){return e.d>t.d?+p13sortorder:e.d<t.d?-1*p13sortorder:0}function p13sort_bysize(e,t){return e.s==t.s?p13sort_filename(e,t):(e.s-t.s)*p13sortorder}function p13sort_files(e){var t,o=[],n=Q("p13sortdropdown").value;for(t in e)e[t].nx=t,null==e[t].s&&(e[t].s=0),null==e[t].n&&(e[t].n=t),e[t].ln=e[t].n.toLowerCase(),o.push(e[t]);return p13sortorder=1,3<n&&(p13sortorder=-1,n-=3),1==n?o.sort(p13sort_filename):2==n?o.sort(p13sort_bysize):3==n&&o.sort(p13sort_timestamp),o}function p13setActions(){var e,t,o,n,i=currentNode.agent&&14!=currentNode.agent.id;null==p13filetree?(QE("p13DeleteFileButton",!1),QE("p13NewFolderButton",!1),QE("p13UploadButton",!1),QE("p13RenameFileButton",!1),QE("p13SelectAllButton",!1),Q("p13SelectAllButton").value="Tutti",QE("p13RefreshButton",!1),QE("p13CutButton",!1),QE("p13CopyButton",!1),QE("p13PasteButton",!1)):(e=p13getFileSelCount(),t=p13getFileCount(),o=p13getFileSelCount(!1),n=0<currentNode.agent.id&&currentNode.agent.id<5||14==currentNode.agent.id||34==currentNode.agent.id,QE("p13DeleteFileButton",i&&0<e&&(0<p13filetreelocation.length||0==n)),QE("p13NewFolderButton",i&&(0<p13filetreelocation.length||0==n)),QE("p13UploadButton",i&&(0<p13filetreelocation.length||0==n)),QE("p13RenameFileButton",i&&1==e&&(0<p13filetreelocation.length||0==n)),QE("p13SelectAllButton",0<t),Q("p13SelectAllButton").value=0<e?"Nessuna ":"Tutti",QE("p13RefreshButton",!0),QE("p13CutButton",i&&0<e&&e==o&&3!=currentNode.mtype&&(0<p13filetreelocation.length||0==n)),QE("p13CopyButton",i&&0<e&&e==o&&3!=currentNode.mtype&&(0<p13filetreelocation.length||0==n)),QE("p13PasteButton",i&&3!=currentNode.mtype&&(0<p13filetreelocation.length||0==n)&&null!=p13clipboard&&0<p13clipboard.length)),1==(null!=files&&0!=files.state)&&2!=files.contype||null==filesNode.agent||3==filesNode.agent.id||4==filesNode.agent.id?QH("filesCustomUpperRight",""):QH("filesCustomUpperRight","<a style=cursor:pointer onclick=cmsshportaction(1,event)>"+format("Porta SSH {0}",filesNode.sshport||22)+"</a>"),QV("filesActionsBtn",3!=filesNode.mtype)}function p13getFileSelCount(e){for(var t=0,o=document.getElementsByName("fd"),n=0;n<o.length;n++)!o[n].checked||0==e&&"3"!=o[n].attributes.file.value||t++;return t}function p13getFileSelDirCount(){for(var e=0,t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked&&"999"==t[o].attributes.file.value&&e++;return e}function p13getFileCount(){return document.getElementsByName("fd").length}function p13selectallfile(){for(var e=0==p13getFileSelCount(),t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked=e;p13setActions()}function p13createfolder(){setDialogMode(2,"Nuova cartella",3,p13createfolderEx,"<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% />"),focusTextBox("p13renameinput"),p13fileNameCheck()}function p13createfolderEx(){files.sendText({action:"mkdir",reqid:1,path:p13filetreelocation.join("/")+"/"+Q("p13renameinput").value}),p13folderup(999)}function p13deletefile(){var e=p13getFileSelCount(),t=0<p13getFileSelDirCount()?"<br /><br /><label><input type=checkbox id=p13recdeleteinput>Eliminazione ricorsiva</label><br>":"<input type=checkbox id=p13recdeleteinput style='display:none'>";setDialogMode(2,"Elimina",3,p13deletefileEx,1<e?format("Eliminare {0} elementi selezionati?",e)+t:"Eliminare l'elemento selezionato?"+t)}function p13deletefileEx(){for(var e=[],t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked&&e.push(p13filetree.dir[t[o].value].n);files.sendText({action:"rm",reqid:1,path:p13filetreelocation.join("/"),delfiles:e,rec:Q("p13recdeleteinput").checked}),p13folderup(999)}function p13renamefile(){for(var e,t=document.getElementsByName("fd"),o=0;o<t.length;o++)t[o].checked&&(e=p13filetree.dir[t[o].value].n);setDialogMode(2,"Rinominare",3,p13renamefileEx,'<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="'+e+'" />',{action:"rename",path:p13filetreelocation.join("/"),oldname:e}),focusTextBox("p13renameinput"),p13fileNameCheck()}function p13renamefileEx(e,t){t.newname=Q("p13renameinput").value,files.sendText(t),p13folderup(999)}function p13fileNameCheck(e){var t=isFilenameValid(Q("p13renameinput").value);QE("idx_dlgOkButton",t),1==t&&null!=e&&13==e.keyCode&&dialogclose(1)}function p13uploadFile(){setDialogMode(2,"Caricare un file",3,p13uploadFileEx,"<input type=file name=files id=p13uploadinput style=width:100% multiple=multiple onchange=\"updateUploadDialogOk('p13uploadinput')\" />"),updateUploadDialogOk("p13uploadinput")}function p13uploadFileEx(){p13doUploadFiles(Q("p13uploadinput").files)}function p13viewfile(){for(var e=document.getElementsByName("fd"),t=0;t<e.length;t++)if(e[t].checked){p13filetree.dir[e[t].value].s<=204800?p13downloadfile(encodeURIComponent(p13filetreelocation.join("/")+"/"+p13filetree.dir[e[t].value].n),encodeURIComponent(p13filetree.dir[e[t].value].n),p13filetree.dir[e[t].value].s,"viewer"):messagebox("Editor di file","È possibile modificare solo i file inferiori a 200k.");break}}var downloadFile,uploadFile,p13clipboard=null,p13clipboardFolder=null,p13clipboardCut=0;function p13copyFile(e){var t=document.getElementsByName("fd");p13clipboard=[],p13clipboardCut=e,p13clipboardFolder=p13targetpath;for(var o=0;o<t.length;o++)t[o].checked&&"3"==t[o].attributes.file.value&&p13clipboard.push(p13filetree.dir[t[o].value].n);p13updateClipview()}function p13pasteFile(){var e="";setDialogMode(2,"Incolla",3,p13pasteFileEx,e=null!=p13clipboard&&0<p13clipboard.length?0==p13clipboardCut?1<p13clipboard.length?format("Confermare la copia di {0} voci in questa posizione?",p13clipboard.length):format("Confermare la copia di 1 voce in questa posizione?"):1<p13clipboard.length?format("Confermare lo spostamento di {0} voci in questa posizione?",p13clipboard.length):format("Confermare lo spostamento di 1 voce in questa posizione?"):e)}function p13pasteFileEx(){files.sendText({action:0==p13clipboardCut?"copy":"move",reqid:1,scpath:p13clipboardFolder,dspath:p13targetpath,names:p13clipboard}),p13folderup(999),1==p13clipboardCut&&(p13clipboardFolder=p13clipboard=null,p13clipboardCut=0,p13updateClipview())}function p13updateClipview(){var e="";null!=p13clipboard&&0<p13clipboard.length&&(e=0==p13clipboardCut?1<p13clipboard.length?format('Conservazione di {0} voci per la copia, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Pulire</a>.',p13clipboard.length):format('Tenendo 1 entrata per la copia, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Pulire</a>.'):1<p13clipboard.length?format('Trattenendo {0} voci per lo spostamento, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Pulire</a>.',p13clipboard.length):format('Tenendo premuto 1 ingresso per il movimento, <a href=# onclick="return p13clearClip()" style=cursor:pointer>Pulire</a>.')),QH("p13bottomstatus",e),p13setActions()}function p13clearClip(){return p13clipboardFolder=p13clipboard=null,p13clipboardCut=0,p13updateClipview(),!1}function updateUploadDialogOk(e){QE("idx_dlgOkButton",""!=Q(e).value)}function getFileSelCount(e){for(var t=0,o=document.getElementsByName("fc"),n=0;n<o.length;n++)!o[n].checked||0==e&&"3"!=o[n].attributes.file.value||t++;return t}function getFileCount(){return document.getElementsByName("fc").length}function p13downloadfile(e,t,o){xxdialogMode||downloadFile||!files||(downloadFile={path:decodeURIComponent(e),file:decodeURIComponent(t),size:o,tsize:0,data:"",state:0,id:Math.random()},files.sendText({action:"download",sub:"start",id:downloadFile.id,path:downloadFile.path}),setDialogMode(2,"Scarca  File",10,p13downloadFileCancel,"<div>"+downloadFile.file+"</div><br /><progress id=d2progressBar style=width:100% value=0 max="+o+" />"))}function p13downloadFileCancel(){setDialogMode(0),files.sendText({action:"download",sub:"cancel",id:downloadFile.id}),downloadFile=null}function p13gotDownloadCommand(e){null!=downloadFile&&e.id==downloadFile.id&&("start"==e.sub?(downloadFile.state=1,files.sendText({action:"download",sub:"startack",id:downloadFile.id})):"cancel"==e.sub&&(downloadFile=null,setDialogMode(0)))}function p13gotDownloadBinaryData(e){downloadFile&&0!=downloadFile.state&&(4<e.length&&(downloadFile.tsize+=e.length-4,downloadFile.data+=e.substring(4),Q("d2progressBar").value=downloadFile.tsize),0!=(1&ReadInt(e,0))?(saveAs(data2blob(downloadFile.data),downloadFile.file),downloadFile=null,setDialogMode(0)):files.sendText({action:"download",sub:"ack",id:downloadFile.id}))}function p13doUploadFiles(e){if(!xxdialogMode){var t=0<currentNode.agent.id&&currentNode.agent.id<5||14==currentNode.agent.id||34==currentNode.agent.id,o=[],n=0;for(i in p13filetree.dir)o.push(t?p13filetree.dir[i].n.toLowerCase():p13filetree.dir[i].n);for(var i=0;i<e.length;i++)t?0<=o.indexOf(e[i].name.toLowerCase())&&n++:0<=o.indexOf(e[i].name)&&n++;0==n?p13uploadFileContinue(1,e):setDialogMode(2,"Caricare un file",3,p13uploadFileContinue,format(1==n?"Il caricamento sovrascriverà 1 file. Continua? ":"Il caricamento sovrascriverà {0} file. Continua? ",n),e)}}function p13uploadFileContinue(e,t){(uploadFile={}).xpath=p13filetreelocation.join("/"),uploadFile.xfiles=t,uploadFile.xfilePtr=-1,setDialogMode(2,"Caricare un file",10,p13uploadFileCancel,"<div id=p13dfileName>Collegamento ...</div><br /><progress id=d2progressBar style=width:100% value=0 max=0 />"),p13uploadNextFile()}const byteToHex=[];for(var n=0;n<=255;++n){var hexOctet=n.toString(16).padStart(2,"0");byteToHex.push(hexOctet)}function arrayBufferToHex(e){return Array.prototype.map.call(new Uint8Array(e),e=>byteToHex[e]).join("")}function performHash(e,t){window.crypto.subtle.digest("SHA-384",e).then(function(e){t(arrayBufferToHex(e))},function(){t(null)})}function performHashOnFile(e,t){var o=new FileReader;o.onerror=function(e){t(null)},o.onload=function(){window.crypto.subtle.digest("SHA-384",o.result).then(function(e){t(arrayBufferToHex(e))},function(){t(null)})},o.readAsArrayBuffer(e)}function p13uploadNextFile(){if(uploadFile.xfilePtr++,uploadFile.xfiles.length>uploadFile.xfilePtr){uploadFile.xptr=0;var t=uploadFile.xfiles[uploadFile.xfilePtr];if(QH("p13dfileName",t.name),Q("d2progressBar").max=t.size,Q("d2progressBar").value=0,null==t.xdata){uploadFile.xfile=t;var e,o=null;for(e in p13filetree.dir)p13filetree.dir[e].n==t.name&&(o=p13filetree.dir[e]);null!=o&&o.s<=uploadFile.xfile.size?performHashOnFile(uploadFile.xfile,function(e){files.sendText(JSON.stringify({action:"uploadhash",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:t.name,tag:{h:e.toUpperCase(),s:o.s,skip:o.s==uploadFile.xfile.size}}))}):files.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:t.name,size:uploadFile.xfile.size}))}else uploadFile.xdata=t.xdata,files.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:t.name,size:uploadFile.xdata.byteLength}))}else p13uploadFileTransferDone()}function p13uploadFileCancel(e,t){null!=uploadFile&&(files.sendText(JSON.stringify({action:"uploadcancel",reqid:uploadFile.xfilePtr})),uploadFile=null),p13uploadFileTransferDone()}function p13uploadFileTransferDone(){uploadFile=null,setDialogMode(0),p13folderup(9999)}function p13gotUploadData(e){if(null!=uploadFile&&parseInt(uploadFile.xfilePtr)==parseInt(e.reqid))switch(e.action){case"uploadstart":p13uploadNextPart(!(uploadFile.xdataPriming=8));break;case"uploadack":p13uploadNextPart(!1);break;case"uploaddone":(uploadFile.xfiles.length>uploadFile.xfilePtr+1?p13uploadNextFile:p13uploadFileTransferDone)();break;case"uploaderror":p13uploadFileCancel();break;case"uploadhash":var t=uploadFile.xfiles[uploadFile.xfilePtr];t&&(e.tag.h===e.hash?e.tag.skip?p13uploadNextFile():(uploadFile.xptr=e.tag.s,files.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:t.name,size:uploadFile.xfile.size,append:!0}))):files.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:t.name,size:uploadFile.xfile.size,append:!1})))}}function p13uploadNextPart(e){if(uploadFile.xdata){var t=uploadFile.xdata,o=uploadFile.xptr;if(o>=t.byteLength)files.sendText(JSON.stringify({action:"uploaddone",reqid:uploadFile.xfilePtr}));else{if((n=uploadFile.xptr+16384)>t.byteLength){if(1==e)return;n=t.byteLength}t=new Uint8Array(t.slice(o,n));123==t[0]||0==t[0]?((o=new Uint8Array(n-o+1)).set(t,1),files.send(o)):files.send(t),uploadFile.xptr=n,Q("d2progressBar").value=n}}else if(uploadFile.xfile&&null==uploadFile.xreader&&!(uploadFile.xptr>=uploadFile.xfile.size)){var n;if((n=uploadFile.xptr+16384)>uploadFile.xfile.size){if(1==e)return;n=uploadFile.xfile.size}uploadFile.xreader=new FileReader,uploadFile.xreader.onerror=function(e){console.log(e)},uploadFile.xreader.onload=function(){var e,t=uploadFile.xreader.result;delete uploadFile.xreader,null!=t&&(123==(e=new Uint8Array(t))[0]||0==e[0]?((t=new Uint8Array(t.byteLength+1)).set(e,1),files.send(t)):files.send(e),uploadFile.xptr=n,Q("d2progressBar").value=n,uploadFile.xptr>=uploadFile.xfile.size?files.sendText(JSON.stringify({action:"uploaddone",reqid:uploadFile.xfilePtr})):0<uploadFile.xdataPriming&&(uploadFile.xdataPriming--,p13uploadNextPart(!0)))},uploadFile.xreader.readAsArrayBuffer(uploadFile.xfile.slice(uploadFile.xptr,n))}}var consoleNode,DeviceDetailsHardware=null,DeviceDetailsNetwork=null,DeviceDetailsNodeId=null;function updateDeviceDetails(e,t,o){if(null!=currentNode&&(null==e&&(e=currentNode),currentNode._id==e._id)){DeviceDetailsNodeId!=e._id&&(DeviceDetailsNetwork=DeviceDetailsHardware=null,DeviceDetailsNodeId=e._id),null==(o=DeviceDetailsNetwork=null!=o?o:DeviceDetailsNetwork)&&(o={});var n=[],i={};if((t=null==(t=DeviceDetailsHardware=null!=t?t:DeviceDetailsHardware)?{}:t).windows&&t.windows.osinfo||e.osdesc){var a="";if(e.rname&&(a+=addDetailItem("Nome",EscapeHtml(e.rname),i)),e.osdesc&&(a+=addDetailItem("Versione ",EscapeHtml(e.osdesc),i)),t.windows&&t.windows.osinfo&&(c=t.windows.osinfo).OSArchitecture&&(c.OSArchitecture.startsWith("32")?a+=addDetailItem("Architettura","32 bit",i):c.OSArchitecture.startsWith("64")?a+=addDetailItem("Architettura","64 bit",i):a+=addDetailItem("Architettura",EscapeHtml(c.OSArchitecture),i)),e.wsc&&(l=[],null!=e.wsc.antiVirus&&("OK"==e.wsc.antiVirus?l.push("AV - <span style=color:green>OK</span>"):l.push("AV - <span style=color:red>CATTIVO</span>")),null!=e.wsc.autoUpdate&&("OK"==e.wsc.autoUpdate?l.push("Aggiornamenti - <span style=color:green>OK</span>"):l.push("Aggiornamenti - <span style=color:red>CATTIVO</span>")),null!=e.wsc.firewall&&("OK"==e.wsc.firewall?l.push("Firewall - <span style=color:green>OK</span>"):l.push("Firewall - <span style=color:red>CATTIVO</span>")),a+=addDetailItem("Sicurezza di Windows",l.join(", "))),e.av&&0<e.av.length){var s,l=[];for(h in e.av)e.av[h].product&&(s=EscapeHtml(e.av[h].product),!0!==e.av[h].enabled&&(s+=" - <span style=color:red>Disabilitato</span>"),!0!==e.av[h].updated&&(s+=" - <span style=color:red>Scaduto</span>"),1==e.av[h].enabled&&1==e.av[h].updated&&(s+=" - <span style=color:green>OK</span>"),l.push(s));a+=addDetailItem("Antivirus",l.join("<br />"))}""!=a&&n.push({name:"Sistema operativo",html:a,img:"software"})}if(e.agent){var r,a="";if(null!=e.agent&&null!=e.agent.id&&null!=e.agent.ver&&(r="",r=e.agent.id<=agentsStr.length?agentsStr[e.agent.id]:agentsStr[0],0!=e.agent.ver&&(r+=" v"+e.agent.ver),a+=addDetailItem("Agente Mesh",r=14==e.agent.id?e.agent.core:r)),0!=(1&e.conn)?a+=addDetailItem("Ultimo collegamento dell'agente","Connesso ora"):e.lastconnect&&(a+=addDetailItem("Ultimo collegamento dell'agente",printDateTime(new Date(e.lastconnect)))),e.lastaddr&&(2<(r=e.lastaddr.split(":")).length?a+=addDetailItem("Ultimo indirizzo dell'agente",e.lastaddr):isPrivateIP(e.lastaddr)?a+=addDetailItem("Ultimo indirizzo dell'agente",r[0]):a+=addDetailItem("Ultimo indirizzo dell'agente",'<a href="https://iplocation.com/?ip='+r[0]+'" rel="noreferrer noopener" target="MeshIPLoopup">'+r[0]+"</a>")),null!=t.agentvers&&t.agentvers.compileTime)try{var d=Date.parse(t.agentvers.compileTime);a+=addDetailItem("Tempo di compilazione",printDateTime(new Date(d)))}catch(e){}""!=a&&n.push({name:"Agente Mesh",html:a,img:"meshagent"})}if(t.mobile&&(a="",t.mobile.brand&&t.mobile.model&&(a+=addDetailItem("Modello",EscapeHtml(t.mobile.brand+", "+t.mobile.model),i)),t.mobile.device&&(a+=addDetailItem("Dispositivo",EscapeHtml(t.mobile.device),i)),t.mobile.bootloader&&(a+=addDetailItem("Boot loader",EscapeHtml(t.mobile.bootloader),i)),t.mobile.id&&(a+=addDetailItem("Identificatore",EscapeHtml(t.mobile.id),i)),t.mobile.host&&(a+=addDetailItem("Nome host",EscapeHtml(t.mobile.host),i)),""!=a)&&n.push({name:"Dispositivo mobile",html:a,img:"mobile"}),null!=o.netif2){a="";for(h in a+="<table style=width:100%>",o.netif2){var c=o.netif2[h];if(!(0==Array.isArray(c)||c.length<1||null==c[0]||"string"==typeof c[0].mac&&c[0].mac.startsWith("00:00:00:00"))){a=(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>")+("<div style=margin-bottom:3px><b>"+EscapeHtml(h+(c[0].fqdn?", "+c[0].fqdn:""))+"</b></div>"),c.desc&&(a+=addDetailItem("Descrizione",EscapeHtml(c.desc).split("(R)").join("&reg;"))),"string"==typeof c[0].mac&&(c[0].gatewaymac?a+=addDetailItem("Livello MAC",format("MAC: {0}, Gateway: {1}",EscapeHtml(c[0].mac),EscapeHtml(c[0].gatewaymac))):a+=addDetailItem("Livello MAC",format("MAC: {0}",EscapeHtml(c[0].mac))));for(var u=0;u<c.length;u++){var p=c[u],m=[];p.address&&m.push(format("IP: {0}",EscapeHtml(p.address))),p.netmask&&m.push(format("Maschera: {0}",EscapeHtml(p.netmask))),p.gateway&&m.push(format("Gateway: {0}",EscapeHtml(p.gateway))),0<m.length&&("IPv4"==p.family&&(a+=addDetailItem("Livello IPv4",m.join(", "))),"IPv6"==p.family)&&(a+=addDetailItem("Livello IPv6",m.join(", ")))}a+="</div>"}}""!=(a+="</table>")&&n.push({name:"Rete ",html:a,img:"networking"})}if(null!=e.intelamt&&(a="",a+=addDetailItem("Versione ",e.intelamt.ver?"v"+EscapeHtml(e.intelamt.ver):"<i>Sconosciuto</i>",i),r={0:nobreak("Non attivato (pre) "),1:nobreak("Non attivato (in) "),2:nobreak("Attivato")},d="",2==e.intelamt.state&&e.intelamt.flags&&(2&e.intelamt.flags?d=", Modalità di controllo client (CCM)":4&e.intelamt.flags&&(d=", Modalità di controllo amministratore (ACM)")),""!=(a=(a=(a+=addDetailItem("Stato di pprovvigionamento",(e.intelamt.state?r[e.intelamt.state]:"<i>Sconosciuto</i>")+d,i))+addDetailItem("Sicurezza",1==e.intelamt.tls?"Protetto tramite TLS":"TLS non è configurato",i))+addDetailItem("Credenziali di amministratore",null==e.intelamt.user||""==e.intelamt.user||null!=e.intelamt.warn&&0!=(9&e.intelamt.warn)?"Non conosciuto":"Conosciuto",i)))&&("number"==typeof e.intelamt.sku&&0!=(16&e.intelamt.sku)?n.push({name:"Gestibilità standard Intel&reg; (Intel&reg; SM)",html:a,img:"amt"}):n.push({name:"Intel&reg; Active Management Technology (Intel&reg; AMT)",html:a,img:"amt"})),t.identifiers){var a="",g=t.identifiers;if(g.bios_vendor&&(a+=addDetailItem("Venditore",EscapeHtml(g.bios_vendor),i)),g.bios_version&&(a+=addDetailItem("Versione ",EscapeHtml(g.bios_version),i)),""!=a&&n.push({name:"BIOS",html:a,img:"chip"}),a="",g.board_vendor&&(a+=addDetailItem("Venditore",EscapeHtml(g.board_vendor),i)),g.board_name&&(a+=addDetailItem("Nome",EscapeHtml(g.board_name),i)),g.board_serial&&""!=g.board_serial&&(a+=addDetailItem("Seriale",EscapeHtml(g.board_serial),i)),g.board_version&&(a+=addDetailItem("Versione ",EscapeHtml(g.board_version),i)),g.product_uuid&&(a+=addDetailItem("Identificatore",EscapeHtml(g.product_uuid),i)),g.cpu_name&&(a+=addDetailItem("CPU",EscapeHtml(g.cpu_name).split("(TM)").join("&trade;").split("(R)").join("&reg;"),i)),g.gpu_name)for(var h in g.gpu_name)a+=addDetailItem("GPU",EscapeHtml(g.gpu_name[h]).split("(TM)").join("&trade;").split("(R)").join("&reg;"),i);""!=a&&n.push({name:"Scheda madre ",html:a,img:"motherboard"})}if(t.windows&&t.windows.memory&&0<t.windows.memory.length){a="";for(h in t.windows.memory.sort(function(e,t){return e.BankLabel>t.BankLabel?1:e.BankLabel<t.BankLabel?-1:0}),a+="<table style=width:100%>",t.windows.memory){c=t.windows.memory[h];a=(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>")+("<div style=margin-bottom:3px><b>"+EscapeHtml(c.BankLabel)+"</b></div>"),c.Capacity&&c.Speed?a+=addDetailItem("Capacità / velocità",format("{0} Mb, {1} Mhz",c.Capacity/1024/1024,c.Speed),i):c.Capacity&&(a+=addDetailItem("Capacità",format("{0} Mb",c.Capacity/1024/1024),i)),c.PartNumber&&(a+=addDetailItem("Numero di parte ",EscapeHtml(c.Manufacturer&&"Undefined"!=c.Manufacturer?c.Manufacturer+", ":"")+EscapeHtml(c.PartNumber),i)),a+="</div>"}""!=(a+="</table>")&&n.push({name:"Memoria",html:a,img:"ram"})}if(t.identifiers&&g.storage_devices){a="";for(h in g.storage_devices.sort(function(e,t){return e.Caption>t.Caption?1:e.Caption<t.Caption?-1:0}),a+="<table style=width:100%>",g.storage_devices)(c=g.storage_devices[h]).Size&&(a=(a+="<tr><td><div class=style10 style=border-radius:5px;padding:8px>")+"<div style=margin-bottom:3px><b>"+EscapeHtml(c.Caption)+"</b></div>",c.Model&&c.Model!=c.Caption&&(a+=addDetailItem("Modello",EscapeHtml(c.Model),i)),c.Size&&("string"==typeof c.Size&&parseInt(c.Size)==c.Size&&(c.Size=parseInt(c.Size)),"number"==typeof c.Size&&(a+=addDetailItem("Capacità",format("{0} Mb",Math.floor(c.Size/1024/1024)),i)),"string"==typeof c.Size)&&(a+=addDetailItem("Capacità",EscapeHtml(c.Size),i)),a+="</div>");""!=(a+="</table>")&&n.push({name:"Spazio di archiviazione",html:a,img:"storage"})}a="";for(h in n)null==n[h].img?a+="<div class=DevSt style=margin-bottom:3px;margin-left:4px><b>"+n[h].name+"</b></div><div style=margin-bottom:10px;margin-left:4px>"+n[h].html+"</div>":a=(a=(a+="<table style=width:100%><tr>")+"<td style=width:32px;vertical-align:top><img src=images/details/"+n[h].img+'32.png srcset="images/details/'+n[h].img+'64.png 2x" border=0 width=32 /></td>')+"<td><div class=DevSt style=margin-bottom:3px;margin-left:4px><b>"+n[h].name+"</b></div><div style=margin-bottom:10px;margin-left:4px>"+n[h].html+"</div></td></tr></table>";""==a?QH("p10detailshtml","Nessuna informazione per questo dispositivo."):QH("p10detailshtml",a)}}function insertTextAtCursor(e,t){var o,n;document.selection?(e.focus(),(sel=document.selection.createRange()).text=t):e.selectionStart||"0"==e.selectionStart?(o=e.selectionStart,n=e.selectionEnd,e.value=e.value.substring(0,o)+t+e.value.substring(n,e.value.length),e.setSelectionRange(n+1,n+1)):e.value+=myValue}var consoleServerText="";function setupConsole(){var e,t=consoleNode==currentNode;meshes[(consoleNode=currentNode).meshid];0!=(16&GetNodeRights(currentNode))?(null==consoleNode.consoleText&&(consoleNode.consoleText=""),0==t&&(QH("p15agentConsoleText",consoleNode.consoleText),Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight),0==(1&consoleNode.conn)&&consoleNode.conn,t=0!=(1&consoleNode.conn)?"L'agente è online":"L'agente è offline",0!=(16&consoleNode.conn)&&(t+=", MQTT è online"),QH("p15statetext",t),QE("p15uploadCore",0!=(1&consoleNode.conn)),QV("p15outputselecttd",0!=(16&consoleNode.conn)||1==currentNode.pmt&&0!=(2&features2)),QV("p15outputselect2",0!=(16&consoleNode.conn)),QV("p15outputselect3",1==currentNode.pmt&&0!=(2&features2)),t=Q("p15outputselect").value,0==(16&consoleNode.conn)&&2==t&&(t=1,Q("p15outputselect").value=1),1==currentNode.pmt&&0!=(2&features2)||3!=t||(t=1,Q("p15outputselect").value=1),e=!1,0!=(1&consoleNode.conn)&&1==t&&(e=!0),0!=(16&consoleNode.conn)&&2==t&&(e=!0),1==currentNode.pmt&&0!=(2&features2)&&3==t&&(e=!0),QE("p15consoleText",e)):(QH("p15statetext","Accesso Negato"),QE("p15consoleText",!1),QE("p15uploadCore",!1),QV("p15outputselecttd",!1)),QV("devListToolbarViewIcons3",0!=(1&consoleNode.conn))}function p15consoleClear(){QH("p15agentConsoleText",""),Q("id_p15consoleClear").blur(),consoleNode.consoleText=""}var currentMesh,consoleHistory=[];function p15consoleSend(e){var t;e&&13!=e.keyCode||(e=Q("p15consoleText").value,t="<div style=color:green>&gt; "+EscapeHtml(e)+"<br/></div>",0!=(16&consoleNode.conn)&&2==Q("p15outputselect").value?(t="<div style=color:orange>MQTT &gt; "+EscapeHtml(e)+"<br/></div>",consoleNode.consoleText+=t,meshserver.send({action:"sendmqttmsg",topic:"console",nodeids:[consoleNode._id],msg:e})):1==consoleNode.pmt&&3==Q("p15outputselect").value&&0!=(2&features2)?(t="<div style=color:violet>SPINGERE&gt; "+EscapeHtml(e)+"<br/></div>",consoleNode.consoleText+=t,meshserver.send({action:"pushconsole",nodeid:consoleNode._id,console:e})):0!=(1&consoleNode.conn)&&(consoleNode.consoleText+=t,meshserver.send({action:"msg",type:"console",nodeid:consoleNode._id,value:e})),Q("p15agentConsoleText").innerHTML+=t,Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight,Q("p15consoleText").value="",0<e.length&&(0<=(t=consoleHistory.indexOf(e))&&consoleHistory.splice(t,1),consoleHistory.unshift(e),consoleHistory.splice(10)))}function p15consoleReceive(e,t,o){"serverconsole"===e?(t="<div>"+EscapeHtml(t)+"</div>",consoleServerText+=t,"server"==consoleNode&&(Q("p15agentConsoleText").innerHTML+=t,Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight)):(t="MQTT"==o?"<div style=color:red>MQTT &gt; "+EscapeHtml(t)+"<br/></div>":"<div>"+EscapeHtml(t)+"</div>",null==e.consoleText?e.consoleText=t:e.consoleText+=t,consoleNode==e&&(Q("p15agentConsoleText").innerHTML+=t,Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight))}function p15downloadConsoleText(){saveAs(new Blob([Q("p15agentConsoleText").innerText],{type:"application/octet-stream"}),"console.txt")}function p15uploadCore(e){xxdialogMode||(1==e.shiftKey?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"default"}):1==e.altKey?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"clear"}):1==e.ctrlKey?p15uploadCore2():setDialogMode(2,"Esegui azione agente ",3,p15uploadCoreEx,addHtmlValue("Azione","<select id=d3coreMode style=width:230px><option value=1>Carica il core del server predefinito</option><option value=2>Cancella il core</option><option value=6>Carica core di ripristino </option><option value=7>Carica un piccolo nucleo</option><option value=3>Carica un file core</option><option value=4>Disconnessione agente soft</option><option value=5>Disconnessione forzata dell'agente</option></select>")))}function p15uploadCoreEx(){1==Q("d3coreMode").value?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"default"}):2==Q("d3coreMode").value?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"clear"}):3==Q("d3coreMode").value?p15uploadCore2():4==Q("d3coreMode").value?meshserver.send({action:"agentdisconnect",nodeid:consoleNode._id,disconnectMode:1}):5==Q("d3coreMode").value?meshserver.send({action:"agentdisconnect",nodeid:consoleNode._id,disconnectMode:2}):6==Q("d3coreMode").value?meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"recovery"}):7==Q("d3coreMode").value&&meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"tiny"})}function p15uploadCore2(){xxdialogMode||(Q("d3localmodeform").action="uploadmeshcorefile.ashx",Q("d3auth").value=authCookie,Q("d3attrib").value=currentNode._id,setDialogMode(3,"Carica il core dell'agente mesh",3,p15uploadCoreEx2),d3init())}function p15uploadCoreEx2(){var e;1==Q("d3uploadMode").value?Q("d3submit").click():1==(e=d3getFileSel()).length&&meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"custom",path:d3filetreelocation.join("/")+"/"+e[0]})}function p20updateMesh(){if(null!=currentMesh){QH("p20meshName",EscapeHtml(currentMesh.name));var e,t=format("Sconosciuto #{0}",currentMesh.mtype),o=GetMeshRights(currentMesh),n=(1==currentMesh.mtype&&(t="Intel&reg; AMT only, no agent"),2==currentMesh.mtype&&(t="Gestito tramite un agente software"),3==currentMesh.mtype&&(t=null==currentMesh.relayid?"Dispositivi locali, nessun agente":"Nessun dispositivo agente trasmesso tramite agente"),4==currentMesh.mtype&&(t=null==currentMesh.relayid?"Dispositivo IP-KVM":"Dispositivo IP-KVM inoltrato tramite agente",1==currentMesh.kvm.model)&&(t+=", Raritan KX III"),""),i=(n=(n=(n+=addHtmlValue("Nome",addLinkConditional(EscapeHtml(currentMesh.name),"p20editmesh(1)",0!=(1&o))))+addHtmlValue("Descrizione",addLinkConditional(currentMesh.desc&&""!=currentMesh.desc?EscapeHtml(currentMesh.desc):"<i>Nessuna </i>","p20editmesh(2)",0!=(1&o))))+addHtmlValue("Digita",t),3!=currentMesh.mtype&&4!=currentMesh.mtype||null==currentMesh.relayid||(t="<i>Sconosciuto</i>",n+=addHtmlValue("Dispositivo ripetitore",addLinkConditional(t=null!=(i=getNodeFromId(currentMesh.relayid))?EscapeHtml(i.name):t,"p20editmeshrelay()",0!=(1&o)))),n=(n=4==currentMesh.mtype?(n+=addHtmlValue("Nome host",currentMesh.kvm.host))+addHtmlValue("Nome utente",currentMesh.kvm.user):n)+('<br><input type=button value="Appunti " onclick=showNotes(false,"'+encodeURIComponent(currentMesh._id)+'") />')+"<br style=clear:both><br>",currentMesh.links[userinfo._id]),a=(i&&0!=(2&i.rights)&&(n+="<div style=margin-bottom:6px;float:left;margin-right:10px><a onclick=p20showAddMeshUserDialog() style=cursor:pointer><img src=images/icon-addnew.png border=0 height=12 width=12> Aggiungi utente</a></div>"),0<=navigator.userAgent.toLowerCase().indexOf("android")&&(n+="<div style=margin-bottom:6px;float:left;margin-right:10px><a onclick=p20installAndroidDialog() style=cursor:pointer><img src=images/icon-addnew.png border=0 height=12 width=12> Installa su questo dispositivo</a></div>"),n+='<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:left;width:430px>Autorizzazioni utente </th></tr>',1),s=[];for(e in currentMesh.links){var l=e.split("/")[2];currentMesh.links[e].name&&(l=currentMesh.links[e].name),e==userinfo._id&&(l=userinfo.name),null!=usergroups&&null!=usergroups[e]&&(l=usergroups[e].name),s.push({id:e,name:l,rights:currentMesh.links[e].rights})}for(e in s.sort(function(e,t){return e.name>t.name?1:e.name<t.name?-1:0}),s){var r="",d="Diritti parziali ",c=s[e].rights,u=2;4294967295==c?d="Amministratore completo":0==c&&(d="Nessun diritto"),e==userinfo._id||4294967295!=o&&0==(2&o)||(r='<a onclick=p20deleteUser(event,"'+encodeURIComponent(s[e].id)+'") style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'),s[e].id.startsWith("ugrp/")&&(u=4),n=(n+='<tr onclick=p20viewuser("'+encodeURIComponent(s[e].id)+'") style=height:32px;cursor:pointer'+(a%2==0?";background-color:#DDD":"")+"><td>")+("<div style=float:right>"+r+"</div><div style=float:right;padding-right:4px>"+d+"</div><div class=m"+u+"></div><div>&nbsp;"+EscapeHtml(decodeURIComponent(s[e].name))+"<div></div></div>")+"</td></tr>",++a}n+="</tbody></table>",4294967295==o&&(n+="<div style=font-size:small;text-align:right;margin-top:6px><span><a onclick=p20showDeleteMeshDialog() style=cursor:pointer>Elimina Gruppo</a></span></div>"),QH("p20info",n)}}function p20showDeleteMeshDialog(){var e;return xxdialogMode||(e=format("Sei sicuro di voler eliminare il gruppo {0}? L'eliminazione del gruppo di dispositivi eliminerà anche tutte le informazioni sui dispositivi all'interno di questo gruppo.",EscapeHtml(currentMesh.name))+"<br /><br />",setDialogMode(2,"Elimina Gruppo",3,p20showDeleteMeshDialogEx,e+="<label><input id=p20check type=checkbox onchange=p20validateDeleteMeshDialog() />Confermare</label>"),p20validateDeleteMeshDialog()),!1}function p20validateDeleteMeshDialog(){QE("idx_dlgOkButton",Q("p20check").checked)}function p20showDeleteMeshDialogEx(e,t){meshserver.send({action:"deletemesh",meshid:currentMesh._id,meshname:currentMesh.name})}function p20editmeshrelay(){if(!xxdialogMode){var e=[];if(0==(2&features))for(var t in nodes){var o=nodes[t];2==o.mtype&&null!=o.agent&&4294967295==GetNodeRights(o)&&e.push(o)}if(e.sort(nameSort),0==e.length)setDialogMode(2,"Modifica gruppo di dispositivi",1,null,"Nessun dispositivo relè disponibile.");else{var n=[];for(t in e)n.push('<option value="'+e[t]._id+'"'+(currentMesh.relayid==e[t]._id?" selected":"")+">"+EscapeHtml(e[t].name)+"</option>");setDialogMode(2,"Modifica gruppo di dispositivi",3,p20editmeshrelayEx,addHtmlValue("Dispositivo ripetitore","<div style=width:170px><select id=d2devrelay style=width:100%>"+n.join("")+"</select></div>"))}}}function p20editmeshrelayEx(){meshserver.send({action:"editmesh",meshid:currentMesh._id,relayid:Q("d2devrelay").value})}function p20editmesh(e){var t;xxdialogMode||(t=addHtmlValue("Nome","<input id=dp20meshname style=width:170px maxlength=32 onchange=p20editmeshValidate() onkeyup=p20editmeshValidate() />"),setDialogMode(2,"Modifica gruppo di dispositivi",3,p20editmeshEx,t+=addHtmlValue("Descrizione","<input id=dp20meshdesc style=width:170px maxlength=1024 onkeyup=p20editmeshValidate() />")),Q("dp20meshname").value=currentMesh.name,currentMesh.desc&&(Q("dp20meshdesc").value=currentMesh.desc),p20editmeshValidate(),(2==e?Q("dp20meshdesc"):Q("dp20meshname")).focus())}function p20editmeshEx(){meshserver.send({action:"editmesh",meshid:currentMesh._id,meshname:Q("dp20meshname").value,desc:Q("dp20meshdesc").value})}function p20editmeshValidate(){QE("idx_dlgOkButton",0<Q("dp20meshname").value.length)}function p20installAndroidDialog(){var e;xxdialogMode||(e="<div>nstalla l'agente MeshCentral sul tuo dispositivo Android. Una volta installato, fai clic sul collegamento di associazione per connettere il tuo dispositivo a questo server.</div>",setDialogMode(2,"Installazione Android",1,null,e=(e+='<br /><div><a href="https://play.google.com/store/apps/details?id=com.meshcentral.agent2"><b>Agente MeshCentral per Android</b></a><div>')+('<br /><div><a href="'+serverinfo.magenturl+","+serverinfo.agentCertHash+","+currentMesh._id.split("/")[2]+'"><b>Collegamento di accoppiamento del dispositivo</b></a><div>')))}function p20showAddMeshUserDialog(){var e;xxdialogMode||(e=addHtmlValue("User ID","<input id=dp20username style=width:170px maxlength=256 onchange=p20validateAddMeshUserDialog() onkeyup=p20validateAddMeshUserDialog() />"),setDialogMode(2,"Aggiungi utente al gruppo di dispositivi",3,p20showAddMeshUserDialogEx,e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e+='<div style="border:2px groove gray;background-color:white;max-height:120px;overflow-y:scroll">')+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20fulladmin>Amministratore completo</label><br>"+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20editmesh>Modifica gruppo di dispositivi</label><br>")+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20manageusers>Gestisci utenti del gruppo di dispositivi</label><br>"+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20managecomputers>Gestisci computer del gruppo di dispositivi</label><br>")+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remotecontrol>Controllo remoto</label><br>"+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remoteview style=margin-left:12px>Solo visualizzazione remota</label><br>")+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remotelimitedinput style=margin-left:12px>Solo input limitato</label><br>"+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20noterminal style=margin-left:12px>Nessun accesso al terminale </label><br>")+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20nofiles style=margin-left:12px>Nessun accesso ai file </label><br>"+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20noamt style=margin-left:12px>Nessun Intel&reg; AMT </label><br>")+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20meshagentconsole>Console dell'agente mesh</label><br>"+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20meshserverfiles>File del server</label><br>")+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20wakedevices>Riattiva i dispositivi</label><br>"+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20editnotes>Modifica note dispositivo</label><br>")+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20limitevents>Mostra solo i propri eventi</label><br>"+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20chatnotify>Chat e notifica</label><br>")+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20uninstall>Disinstalla agente</label><br>"+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20commands>Comandi remoti</label><br>")+"<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20resetoff>Ripristino / Spegnimento</label><br>"+"</div>"),p20validateAddMeshUserDialog(),Q("dp20username").focus())}function p20validateAddMeshUserDialog(){var e=GetMeshRights(currentMesh),t=!Q("p20fulladmin").checked;QE("p20fulladmin",4294967295==e),QE("p20editmesh",t&&4294967295==e),QE("p20manageusers",t),QE("p20managecomputers",t),QE("p20remotecontrol",t),QE("p20meshagentconsole",t),QE("p20meshserverfiles",t),QE("p20wakedevices",t),QE("p20editnotes",t),QE("p20limitevents",t),QE("p20remoteview",t&&Q("p20remotecontrol").checked),QE("p20remotelimitedinput",t&&Q("p20remotecontrol").checked&&!Q("p20remoteview").checked),QE("p20noterminal",t&&Q("p20remotecontrol").checked),QE("p20nofiles",t&&Q("p20remotecontrol").checked),QE("p20noamt",t&&Q("p20remotecontrol").checked),QE("p20chatnotify",t),QE("p20uninstall",t),QE("p20commands",t),QE("p20resetoff",t)}function p20showAddMeshUserDialogEx(){var e,t=0,o=(1==Q("p20fulladmin").checked?t=4294967295:(1==Q("p20editmesh").checked&&(t+=1),1==Q("p20manageusers").checked&&(t+=2),1==Q("p20managecomputers").checked&&(t+=4),1==Q("p20remotecontrol").checked&&(t+=8),1==Q("p20meshagentconsole").checked&&(t+=16),1==Q("p20meshserverfiles").checked&&(t+=32),1==Q("p20wakedevices").checked&&(t+=64),1==Q("p20editnotes").checked&&(t+=128),1==Q("p20remoteview").checked&&(t+=256),1==Q("p20noterminal").checked&&(t+=512),1==Q("p20nofiles").checked&&(t+=1024),1==Q("p20noamt").checked&&(t+=2048),1==Q("p20remotelimitedinput").checked&&(t+=4096),1==Q("p20limitevents").checked&&(t+=8192),1==Q("p20chatnotify").checked&&(t+=16384),1==Q("p20uninstall").checked&&(t+=32768),1==Q("p20commands").checked&&(t+=131072),1==Q("p20resetoff").checked&&(t+=262144)),Q("dp20username").value.split(",")),n=[];for(e in o)n.push(o[e].trim());meshserver.send({action:"addmeshuser",meshid:currentMesh._id,meshname:currentMesh.name,usernames:n,meshadmin:t})}function p20viewuser(e){var t,o,n,i,a,s;xxdialogMode||(e=decodeURIComponent(e),t=[],o=GetMeshRights(currentMesh),4294967295==(n=GetMeshRights(currentMesh,e))?t.push("Amministratore completo"):(0!=(1&n)&&t.push("Modifica gruppo di dispositivi"),0!=(2&n)&&t.push("Gestisci utenti del gruppo di dispositivi"),0!=(4&n)&&t.push("Gestisci computer del gruppo di dispositivi"),0!=(8&n)&&t.push("Controllo remoto"),0!=(16&n)&&t.push("Console Agente"),0!=(32&n)&&t.push("File del server"),0!=(64&n)&&t.push("Riattiva i dispositivi"),0!=(128&n)&&t.push("Modifica note"),0!=(256&n)&&t.push("Solo visualizzazione remota"),0!=(512&n)&&t.push("Nessun terminale "),0!=(1024&n)&&t.push("Nessun file"),0!=(2048&n)&&t.push("Nessun Intel&reg; AMT "),0!=(8&n)&&0!=(4096&n)&&0==(256&n)&&t.push("Input limitato"),0!=(8192&n)&&t.push("Solo eventi personali"),0!=(16384&n)&&t.push("Chat e notifica"),0!=(32768&n)&&t.push("Disinstalla"),0!=(131072&n)&&t.push("Comandi"),0!=(262144&n)&&t.push("Ripristina/Spento")),0==t.length&&t.push("Nessun diritto"),i=1,a=e.split("/")[2],currentMesh.links[e].name&&(a=currentMesh.links[e].name),s=addHtmlValue("Nome utente ",EscapeHtml(a)),a!=e.split("/")[2]&&(s+=addHtmlValue("ID utente",EscapeHtml(e.split("/")[2]))),s+=addHtmlValue("permessi",t.join(", ")),userinfo._id!=e&&(4294967295==o||0!=(2&o)&&4294967295!=n)&&(i+=4),setDialogMode(2,"Utente del gruppo di dispositivi",i,p20viewuserEx,s,e))}function p20viewuserEx(e,t){2==e&&(e=t.split("/")[2],users&&users[t]&&(e=users[t].name),usergroups&&usergroups[t]&&(e=usergroups[t].name),setDialogMode(2,"Utente mesh remoto",3,p20viewuserEx2,format("Confermare la rimozione dell'utente {0}?",e=userinfo._id==t?userinfo.name:e),t))}function p20deleteUser(e,t){haltEvent(e),p20viewuserEx(2,decodeURIComponent(t))}function p20viewuserEx2(e,t){meshserver.send({action:"removemeshuser",meshid:currentMesh._id,meshname:currentMesh.name,userid:t})}var notifications=[];function clickNotificationIcon(e){1==e?QV("notifiyBox",!0):0==e?QV("notifiyBox",!1):QV("notifiyBox","none"==QS("notifiyBox").display),drawNotifications()}function setNotificationCount(e){parseInt(Q("notificationCount").innerHTML)!=e&&(QH("notificationCount2",e),QV("notificationCount",0<e))}function drawNotifications(){var e=getstore("notifications",0),t="";if(0==notifications.length)t="<div style=margin:5px>Al momento non ci sono notifiche</div>";else for(var o in notifications){var n,o=notifications[o],i="",a=new Date(o.time),s=0;null!=o.title&&(i="<b>"+EscapeHtml(o.title)+"</b>: "),null!=o.nodeid&&null!=(n=getNodeFromId(o.nodeid))&&(s=n.icon,i=16&e?"<b>"+EscapeHtml(meshes[n.meshid].name)+" / "+EscapeHtml(n.name)+"</b>: ":"<b>"+EscapeHtml(n.name)+"</b>: "),t+='<div title="'+format("Si è verificato alle {0} ",printDateTime(a))+'" id="notifyx'+o.id+'" class=notification style="cursor:pointer;border-top:1px solid '+(""==t?"transparent":"orange")+'">',s&&(t+="<div class=j"+s+' onclick="notificationSelected('+o.id+')" style=margin:5px;float:left></div>'),t+='<div onclick="notificationDelete('+o.id+')" class=unselectable title="Cancella questa notifica" style=margin:5px;float:right;color:orange><b>X</b></div><div onclick="notificationSelected('+o.id+')" style=margin:5px>'+i+EscapeHtml(o.text)+"</div><div style=margin-left:5px;margin-bottom:5px;color:gray;font-size:10px>"+printDateTime(a)+"</div></div>"}var l="";1<notifications.length&&(l='<div id="notifyRemoveAll" onclick="deleteAllNotifications()" style="cursor:pointer;border-top:1px solid orange;margin:5px;color:orange;text-align:right;padding-right:3px">Cancella tutto</div>'),QH("notifiyBox",'<div class=customScroll style="max-height:170px;overflow-y:auto;margin:5px">'+t+l+"</div>")}function notificationSelected(e,t){var o,n=-1;for(o in notifications)notifications[o].id==e&&(n=o);-1!=n&&(notificationSelectedEx(notifications[n],e),t)&&notifications[n]&&(notifications[n].notification&&(notifications[n].notification.close(),delete notifications[n].notification),notificationDelete(e))}function notificationSelectedEx(e,t){null!=e.nodeid?"desktop"==e.tag?gotoDevice(e.nodeid,12):"terminal"==e.tag?gotoDevice(e.nodeid,11):"files"==e.tag?gotoDevice(e.nodeid,13):"intelamt"==e.tag?gotoDevice(e.nodeid,14):"console"==e.tag?gotoDevice(e.nodeid,15):gotoDevice(e.nodeid,10):"backupcodes"!=e.tag||xxdialogMode?null!=e.tag&&e.tag.startsWith("meshmessenger/")?(safeNewWindow("/messenger?id="+e.tag+"&title="+encodeURIComponentEx(e.username),e.tag.split("/")[2]),notificationDelete(t)):null!=e.url&&(safeNewWindow(e.url),notificationDelete(t)):(account_manageOtp(0),notificationDelete(t))}function notificationDelete(e){var t=-1,o=Q("notifyx"+e);if(null!=o){for(var n in notifications)notifications[n].id==e&&(t=n);-1!=t&&(meshserver.send({action:"intersession",subaction:"removeNotify",id:e}),notifications[t].notification&&(notifications[t].notification.close(),delete notifications[t].notification),notifications.splice(t,1),o.parentNode.removeChild(o),setNotificationCount(notifications.length),0==notifications.length&&QV("notifiyBox",!1),1==notifications.length&&QV("notifyRemoveAll",!1),0<notifications.length)&&0==t&&(o=notifications[0],QS("notifyx"+o.id)["border-top"]="1px solid transparent")}}function addNotification(e){if("number"==typeof e.titleid)try{e.title=[null,"Nuovo account ","Limite del server","Avviso di sicurezza","Impostazioni dell 'account","Gruppo di dispositivi","Codici di invito"][e.titleid]}catch(e){}if("number"==typeof e.msgid)try{e.text=[null,"Permesso negato","Nome utente non valido","Password non valida","E-mail non valido","Dominio non valido","Autorizzazioni del sito non valide","L'utente esiste già","Impossibile aggiungere l'utente in questa modalità","Eccezione di convalida ","Limite di account raggiunto.","Richiesta di chat, fare clic qui per accettare.","Ci sono stati {0} tentativi di accesso falliti su questo account dall'ultimo accesso.","Impossibile modificare l'indirizzo email, un altro account che già utilizza: {0}.","Email inviata.","Utente {0} non trovato. ","Utenti {0} non trovati ","Errore, impossibile modificare la password utilizzata in precedenza.","Errore, impossibile modificare la password di uso comune.","Errore, password non modificata.","Password cambiata.","Password attuale non corretta.",'Errore, codice di invito "{0}" già in uso.',"Gateway SMS non abilitato","Nessun diritto di gestione degli utenti ","Messaggio SMS non valido","Nessun numero di telefono per questo utente","SMS inviato con successo.","SMS error","SMS error: {0}",'Il dominio email "{0}" non è consentito. Sono consentiti solo ({1}).'][e.msgid],Array.isArray(e.args)&&(e.text=format(e.text,e.args[0],e.args[1],e.args[2],e.args[3],e.args[4],e.args[5]))}catch(e){}null==e.time&&(e.time=Date.now()),null==e.id&&(e.id=Math.random()),notifications.unshift(e),setNotificationCount(notifications.length),clickNotificationIcon(!0);var t,o,n=getstore("notifications",0),i=(1&n&&Q("chimes").play(),null);Notification&&"granted"==Notification.permission&&(t=e.text.split("&reg;").join("").split("<b>").join("").split("</b>").join("").split("<br />").join("\r\n"),e.nodeid?(o=getNodeFromId(e.nodeid))&&(i=16&n?new Notification(decodeURIComponent("{{{extitle}}}")+" - "+meshes[o.meshid].name+" - "+o.name,{tag:e.tag,body:t,icon:"/images/notify/icons128-"+o.icon+".png"}):new Notification(decodeURIComponent("{{{extitle}}}")+" - "+o.name,{tag:e.tag,body:t,icon:"/images/notify/icons128-"+o.icon+".png"})):(null==e.icon&&(e.icon=0),n=null==(n=e.title)?"":" - "+e.title,i=new Notification(decodeURIComponent("{{{extitle}}}")+n,{tag:e.tag,body:t,icon:"/images/notify/icons128-"+e.icon+".png"})),i.id=e.id,i.xtag=e.tag,i.url=e.url,i.nodeid=e.nodeid,i.username=e.username,i.onclick=function(e){notificationSelected(e.target.id,!0)},e.notification=i),"number"==typeof e.maxtime&&0<e.maxtime&&((o=function e(){notificationDelete(e.xid)}).xid=e.id,setTimeout(o,1e3*e.maxtime))}function deleteAllNotifications(){notifications=[],setNotificationCount(0),drawNotifications(),QV("notifiyBox",!1)}var xxdialogMode,xxdialogFunc,xxdialogButtons,xxdialogTag,xxcurrentView=-1;function go(e){if(setSessionActivity(),!xxdialogMode&&xxcurrentView!=e){updateFooterMenu(),setDialogMode(0);for(var t=0;t<32;t++)QV("p"+t,t==e);xxcurrentView=e,updateCurrentUrl()}}function updateCurrentUrl(){if(0==(268435456&features)&&0<xxcurrentView){var e,t="";for(e in 10<=xxcurrentView&&xxcurrentView<=19?null!=currentNode&&(t="?viewmode="+xxcurrentView+"&gotonode="+currentNode._id.split("/")[2]+(0<currentDevicePanel?"&panel="+currentDevicePanel:"")):20<=xxcurrentView&&xxcurrentView<=29?null!=currentMesh&&(t="?viewmode="+xxcurrentView+"&gotomesh="+currentMesh._id.split("/")[2]):1<xxcurrentView&&(t="?viewmode="+xxcurrentView),urlargs)t+=(""==t?"?":"&")+e+"="+urlargs[e];try{window.history.replaceState({},document.title,window.location.pathname+t)}catch(e){}}}function setDialogMode(e,t,o,n,i,a){setSessionActivity(),xxdialogMode=e,xxdialogFunc=n,xxdialogButtons=o,xxdialogTag=a,QE("idx_dlgOkButton",!0),QV("idx_dlgOkButton",1&o),QV("idx_dlgCancelButton",2&o),QV("id_dialogclose",2&o||8&o),QV("idx_dlgDeleteButton",4&o),QV("idx_dlgButtonBar",7&o),t&&QH("id_dialogtitle",t);for(var s=1;s<24;s++)QV("dialog"+s,s==e);QV("dialog",e),i&&(2==e?QH("id_dialogOptions",i):QH("id_dialogMessage",i))}function dialogclose(e){setSessionActivity();var t=xxdialogFunc,o=xxdialogButtons,n=xxdialogTag;setDialogMode(),(8&o||e)&&t&&t(e,n)}function removeUserRights(e,t){var o;return t==userinfo._id&&null!=userinfo.removeRights&&((o=t=0)!=(8&userinfo.removeRights)&&(o+=8),0!=(65536&userinfo.removeRights)&&(t+=65536),0!=(256&userinfo.removeRights)&&(t+=256),0!=(512&userinfo.removeRights)&&(t+=512),0!=(1024&userinfo.removeRights)&&(t+=1024),0!=(16&userinfo.removeRights)&&(o+=16),0!=(32768&userinfo.removeRights)&&(o+=32768),0!=(131072&userinfo.removeRights)&&(o+=131072),0!=(64&userinfo.removeRights)&&(o+=64),0!=(262144&userinfo.removeRights)&&(o+=262144),e=4294967295!=e?(e|t)&4294967295-o:((e=2015471)|t)&4294967295-o),e}function GetMeshRights(e,t){if(null==e)return 0;if(null==t&&(t=userinfo._id),null==(e="string"==typeof e?meshes[e]:e)||null==e.links)return 0;if(serverinfo.manageAllDeviceGroups&&t==userinfo._id)return removeUserRights(4294967295,t);var o=0,n=e.links[t];if(null!=n){if(4294967295==n.rights)return removeUserRights(4294967295,t);o=n.rights}var i=null;if(t==userinfo._id?i=userinfo:null!=users&&(i=users[t]),null!=i)for(var a in i.links)if(a.startsWith("ugrp/")&&null!=(n=e.links[a])){if(4294967295==n.rights)return removeUserRights(4294967295,t);o|=n.rights}return removeUserRights(o,t)}function IsMeshViewable(e,t){if(null!=e&&(null==t&&(t=userinfo._id),null!=(e="string"==typeof e?meshes[e]:e))&&null!=e.links){if(null!=e.links[t])return!0;if(serverinfo.manageAllDeviceGroups&&t==userinfo._id)return!0;var o=null;if(t==userinfo._id?o=userinfo:null!=users&&(o=users[t]),null!=o)for(var n in o.links)if(n.startsWith("ugrp/")&&null!=e.links[n])return!0}return!1}function GetNodeRights(e,t){if(null==e)return 0;if(null==t&&(t=userinfo._id),"string"==typeof e&&null==(e=getNodeFromId(e)))return 0;var o=GetMeshRights(e.meshid,t);if(4294967295!=o&&(null!=e.links&&null!=e.links[t]&&(o|=e.links[t].rights),null!=e.links)&&null!=userinfo.links)for(var n in e.links)n.startsWith("ugrp/")&&null!=userinfo.links[n]&&null!=e.links[n].rights&&(o|=e.links[n].rights);return removeUserRights(o,t)}function IsNodeViewable(e,t){if(null!=e&&(null==t&&(t=userinfo._id),"string"!=typeof e||null!=(e=getNodeFromId(e)))){if(IsMeshViewable(e.meshid,t))return!0;if(null!=e.links&&null!=e.links[t])return!0;if(null!=e.links&&null!=userinfo.links)for(var o in e.links)if(o.startsWith("ugrp/")&&null!=userinfo.links[o]&&null!=e.links[o].rights)return!0}return!1}function nameSort(e,t){e=e.name.toLowerCase(),t=t.name.toLowerCase();return sortCollator.compare(e,t)}function getNodeAmtVersion(e){return null==e||null==e.intelamt||"string"!=typeof e.intelamt.ver||(e=e.intelamt.ver.split(".")).length<2?0:parseInt(e[0])+parseInt(e[1])/100}function putstore(e,t){try{if("undefined"==typeof localStorage||localStorage.getItem(e)==t)return;null==t?localStorage.removeItem(e):localStorage.setItem(e,t)}catch(e){}if("_"!=e[0]){for(var o={},n=0,i=localStorage.length;n<i;++n){var a=localStorage.key(n);"_"!=a[0]&&(o[a]=localStorage.getItem(a))}meshserver.send({action:"userWebState",state:JSON.stringify(o)})}}function getstore(e,t){try{var o;return"undefined"==typeof localStorage?t:null==(o=localStorage.getItem(e))?t:o}catch(e){return t}}function center(){xtermfit&&xtermfit.fit(),onDevicesScroll(),QS("dialog").left=(getDocWidth()-300)/2+"px",deskAdjust(),null!=currentNode&&drawDeviceTimeline()}function messagebox(e,t){QH("id_dialogMessage",t),setDialogMode(1,e,1)}function statusbox(e,t){QH("id_dialogMessage",t),setDialogMode(1,e)}function getDocWidth(){return window.innerWidth||(document.documentElement&&document.documentElement.clientWidth&&0!=document.documentElement.clientWidth?document.documentElement:document.getElementsByTagName("body")[0]).clientWidth}function haltEvent(e){return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1}function haltReturn(e){13==e.keyCode&&haltEvent(e)}function validateEmail(e){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)}function reload(){window.location.href=window.location.href}function getNodeFromId(e){for(var t in nodes)if(nodes[t]._id==e)return nodes[t];return null}function addHtmlValue(e,t){return"<table><td style=width:120px>"+e+"<td><b>"+t+"</b></table>"}function addHtmlValue2(e,t){return"<div><div style=display:inline-block;float:right>"+t+"</div><div style=display:inline-block>"+e+"</div></div>"}function addHtmlValue4(e,t){return"<table style=width:100%><td style=width:120px>"+e+"<td style=text-align:right><b>"+t+"</b></table>"}function addLink(e,t){return"<a style=cursor:pointer;text-decoration:none onclick='"+t+"'>&diams; "+e+"</a>"}function addLinkConditional(e,t,o){return o?addLink(e,t):e}function passwordcheck(e){return/(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()]).{8,}/.test(e)}function getFileSizeStr(e){return 1==(e="number"!=typeof e?0:e)?"1 byte":format("{0} bytes",e)}function joinPaths(){var e,t=[];for(e in arguments){var o=arguments[e];if(null!=o&&""!=o){for(;o.endsWith("/")||o.endsWith("\\");)o=o.substring(0,o.length-1);for(;o.startsWith("/")||o.startsWith("\\");)o=o.substring(1);t.push(o)}}return t.join("/")}function focusTextBox(e){setTimeout(function(){Q(e).selectionStart=Q(e).selectionEnd=65535,Q(e).focus()},0)}isFilenameValid=function(){var t=/^[^\\/:\*\?"<>\|]+$/,o=/^\./,n=/^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i;return function(e){return t.test(e)&&!o.test(e)&&!n.test(e)&&"."!=e[0]}}();function printDate(e){return e.toLocaleDateString(args.locale)}function printTime(e){return e.toLocaleTimeString(args.locale)}function printDateTime(e){return e.toLocaleString(args.locale)}function format(e){var o=Array.prototype.slice.call(arguments,1);return e.replace(/{(\d+)}/g,function(e,t){return void 0!==o[t]?o[t]:e})}function nobreak(e){return e.split(" ").join("&nbsp;")}function getUserName(e){return users&&null!=users[e]?users[e].name:e.split("/")[2]}function addDetailItem(e,t,o){return"<table style=width:100%><td>"+nobreak(e)+"<td style=text-align:right>"+t+"</table>"}function isPrivateIP(e){return e.startsWith("10.")||e.startsWith("172.16.")||e.startsWith("192.168.")}function encodeURIComponentEx(e){return encodeURIComponent(e).replace(/'/g,"%27")}function safeNewWindow(e,t){e=window.open(e,t,"noopener,noreferrer");e&&(e.opener=null)}</script>