﻿<!doctypehtml><html dir=ltr xmlns=http://www.w3.org/1999/xhtml><head lang=en><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=apple-mobile-web-app-capable content=yes><meta name=format-detection content="telephone=no"><meta name=robots content=noindex,nofollow><link rel="shortcut icon"type=image/x-icon href={{{domainurl}}}favicon.ico><link keeplink=1 type=text/css href=styles/style.css media=screen rel=stylesheet title=CSS><link rel=apple-touch-icon href=/favicon-303x303.png><script src=scripts/common-0.0.1{{min}}.js></script><script keeplink=1 src=scripts/u2f-api{{min}}.js></script><title>{{{title}}} - Login</title><style>#body{background-color:#5f9ea0;background:linear-gradient(to bottom right,#369,#036)}#flink a:link{color:#c8c8c8}#flink a:visited{color:#c8c8c8}#flink a:hover{color:#c8c8c8}#flink a:active{color:#c8c8c8}#welcomeText a:link{color:#fff}#welcomeText a:visited{color:#fff}#welcomeText a:hover{color:#fff}#welcomeText a:active{color:#fff}</style><body id=body onload='"undefined"!=typeof startup&&startup()'class="arg_hide login"><div id=backgroundImage style="position:absolute;left:0;bottom:0;z-index:-1;height:60%;width:100%;opacity:.1;background-image:url(welcome.png);background-repeat:no-repeat;background-position:left bottom;background-size:contain"></div><table id=centralTable class=container style=height:100%;z-index:1><tr><td id=logincell>{{{titlehtml}}} <img id=loginPicture><div style="font-size:46px;font-family:Arial,Helvetica,sans-serif;font-weight:700;padding-bottom:10px;color:#c8c8c8;text-shadow:2px 2px 2px #000">{{{title1}}}<sup style=font-size:20px> {{{title2}}}</sup></div><div id=loginpanel style="display:none;box-shadow:1px 1px 4px #000"><form id=loginpanelform method=post><input type=hidden name=action value=login><div id=message1></div><div id=loginuserpassdiv style=display:none><table style=width:100%><tr><td><input id=username title=Username style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc {{{autocomplete}}}=username placeholder=Username maxlength=64 name=username onchange=validateLogin(1) onkeyup=validateLogin(1,event)><tr><td><input id=password title=Password style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc {{{autocomplete}}}=current-password placeholder=Password type=password maxlength=256 name=password onchange=validateLogin(2) onkeyup=validateLogin(2,event)><tr><td><div id=showPassHintLink title="Password Hint"style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc;display:none><a onclick="return showPassHint(event)"href=# style=cursor:pointer>Show Hint</a></div><tr><td><input id=loginButton style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px onclick='submitButtonClicked("loginpanelform")'type=button value="Log In"disabled></table><div id=hrAccountDiv style=display:none><hr></div><div id=resetAccountDiv style=display:none;padding:2px><span id=resetAccountSpan>Forgot username/password?</span> <a onclick="return xgo(3,event)"href=# style=cursor:pointer>Reset account</a>.</div><div id=newAccountDiv style=display:none;padding:2px;padding-top:10px>Don&#39;t have an account? <a onclick="return xgo(2,event)"href=# style=cursor:pointer>Create one</a>.</div></div><input id=loginformargs name=urlargs type=hidden><div id=authStrategies style=display:none><hr id=loginuserpasshr style=display:none><div style=margin-bottom:8px>Log in using an existing account</div><a id=auth-twitter href=auth-twitter style=display:none><img src=images/login/twitter32.png srcset="images/login/twitter64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Sign-in using Twitter"></a><a id=auth-google href=auth-google style=display:none><img src=images/login/google32.png srcset="images/login/google64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Sign-in using Google"></a><a id=auth-github href=auth-github style=display:none><img src=images/login/github32.png srcset="images/login/github64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Sign-in using GitHub"></a><a id=auth-reddit href=auth-reddit style=display:none><img src=images/login/reddit32.png srcset="images/login/reddit64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Sign-in using Reddit"></a><a id=auth-azure href=auth-azure style=display:none><img src=images/login/azure32.png srcset="images/login/azure64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Sign-in using Azure"></a><a id=auth-oidc href=auth-oidc style=display:none><img src=images/login/oidc32.png srcset="images/login/oidc64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Sign-in using OpenID Connect"></a><a id=auth-jumpcloud href=auth-jumpcloud style=display:none><img src=images/login/jumpcloud32.png srcset="images/login/jumpcloud64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Sign-in using JumpCloud"></a><a id=auth-intel href=auth-intel style=display:none><img src=images/login/intel32.png srcset="images/login/intel64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Sign-in using Intel"></a><a id=auth-saml href=auth-saml style=display:none><img src=images/login/generic32.png srcset="images/login/generic64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Single Sign-in"></a></div></form></div><div id=createpanel style=display:none;position:relative><form id=createpanelform method=post><input type=hidden name=action value=createaccount><div id=message2></div><div><b>Account Creation</b></div><div id=passwordPolicyCallout style=display:none></div><table><tr id=nuUserRow><td id=nuUser align=right width=100>Username:<td><input id=ausername {{{autocomplete}}}=username name=username onchange=validateCreate(1) maxlength=64 onkeydown=haltReturn(event) onkeyup=validateCreate(1,event)><tr><td id=nuEmail align=right width=100>Email:<td><input id=aemail {{{autocomplete}}}=email inputmode=email name=email onchange=validateCreate(2) maxlength=256 onkeydown=haltReturn(event) onkeyup=validateCreate(2,event)><tr><td id=nuPass1 align=right>Password:<td><input id=apassword1 type=password name=password1 {{{autocomplete}}}=new-password maxlength=256 onkeydown=haltReturn(event) onchange=validateCreate(3,event) onkeyup=validateCreate(3,event)><tr><td id=nuPass2 align=right>Password:<td><input id=apassword2 type=password name=password2 {{{autocomplete}}}=new-password maxlength=256 onkeydown=haltReturn(event) onchange=validateCreate(4,event) onkeyup=validateCreate(4,event)><tr id=createPanelHint style=display:none><td id=nuHint align=right>Password Hint:<td><input id=apasswordhint name=apasswordhint {{{autocomplete}}}=off maxlength=256 onkeydown=haltReturn(event) onchange=validateCreate(5,event) onkeyup=validateCreate(5,event)><tr id=newAccountPass title="Enter the account creation token"><td id=nuToken align=right>Creation Token:<td><input id=anewaccountpass type=password name=anewaccountpass {{{autocomplete}}}=off maxlength=256 onkeydown=haltReturn(event) onchange=validateCreate(6,event) onkeyup=validateCreate(6,event)><tr id=newAccountCaptchaImg title="CAPTCHA image"><td><td colspan=2><img src={{{newAccountCaptchaImage}}} loading=lazy><tr id=newAccountCaptcha title="Security check"><td id=nuCaptcha align=right>Security Check:<td><input id=anewaccountcaptcha name=anewaccountcaptcha {{{autocomplete}}}=off maxlength=256 onkeydown=haltReturn(event) onchange=validateCreate(7,event) onkeyup=validateCreate(7,event)><tr><td colspan=2><div style=float:right><input id=createButton type=button onclick='submitButtonClicked("createpanelform")'value="Create Account"disabled></div><div id=passWarning style=padding-top:6px></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Back to login</a> <input id=createformargs name=urlargs type=hidden> <input id=createformcaptcha name=captchaargs type=hidden value={{{newAccountCaptcha}}}></form></div><div id=resetpanel style=display:none><form id=resetpanelform method=post><input type=hidden name=action value=resetaccount><div id=message3></div><div><b>Account Reset</b></div><table style=width:100%;margin-top:4px;margin-bottom:4px><tr><td><input id=remail title=Email style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc {{{autocomplete}}}=username placeholder=Email maxlength=256 name=email onchange=validateReset() onkeyup=validateReset(event)><tr><td><input id=eresetButton style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px type=button onclick='submitButtonClicked("resetpanelform")'value="Reset Account"disabled></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Back to login</a> <input id=resetformargs name=urlargs type=hidden></form></div><div id=tokenpanel style=display:none><form id=tokenpanelform method=post {{{autocomplete}}}=off><input type=hidden name=action value=tokenlogin> <input type=hidden name=hwstate value={{{hwstate}}}><div id=message4></div><table style=width:100%><tr><td><input id=tokenInput {{{autocomplete}}}=one-time-code title=Token style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc placeholder=Token maxlength=50 name=token onchange=checkToken(event) onpaste=checkToken(event) onkeyup=checkToken(event) onkeydown=checkToken(event)><br><input id=hwtokenInput name=hwtoken style=display:none><tr><td><div><input id=tokenOkButton style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px type=button onclick='submitButtonClicked("tokenpanelform")'value="Log In"disabled></div><tr><td style=align-content:center;padding-top:10px><label id=tokenInputRememberLabel><input id=tokenInputRemember name=remembertoken type=checkbox><span id=tokenInputRememberSpan></span></label><tr id=2farow><td><hr><div><img id=securityKeyButton src=images/login/2fa-key-48.png srcset="images/login/2fa-key-96.png 2x"title="Use Security Key"loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useSecurityKey(1)> <img id=smsKeyButton src=images/login/2fa-sms-48.png srcset="images/login/2fa-sms-96.png 2x"title=SMS loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useSMSToken(1)> <img id=msgKeyButton src=images/login/2fa-messaging-48.png srcset="images/login/2fa-messaging-96.png 2x"title=Messaging loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useMsgToken(1)> <img id=emailKeyButton src=images/login/2fa-mail-48.png srcset="images/login/2fa-mail-96.png 2x"title=Email loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useEmailToken(1)> <img id=pushKeyButton src=images/login/2fa-push-48.png srcset="images/login/2fa-push-96.png 2x"title="Device Authentication"loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=usePushToken(1)></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Back to login</a> <input id=tokenformargs name=urlargs type=hidden></form></div><div id=resettokenpanel style=display:none><form id=resettokenpanelform method=post><input type=hidden name=action value=resetaccount><div id=message5></div><table style=width:100%><tr><td><input id=resetTokenInput {{{autocomplete}}}=one-time-code title=Token style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc placeholder=Token maxlength=50 name=token onchange=resetCheckToken(event) onpaste=resetCheckToken(event) onkeyup=resetCheckToken(event) onkeydown=resetCheckToken(event)><br><input id=resetHwtokenInput name=hwtoken style=display:none><tr><td><div><input id=resetTokenOkButton style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px type=button onclick='submitButtonClicked("resettokenpanelform")'value="Log In"disabled></div><tr id=2farow2><td colspan=2><hr><div><img id=securityKeyButton2 src=images/login/2fa-key-48.png srcset="images/login/2fa-key-96.png 2x"title="Use Security Key"loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useSecurityKey(2)> <img id=smsKeyButton2 src=images/login/2fa-sms-48.png srcset="images/login/2fa-sms-96.png 2x"title=SMS loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useSMSToken(2)> <img id=msgKeyButton2 src=images/login/2fa-msg-48.png srcset="images/login/2fa-msg-96.png 2x"title=SMS loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useMsgToken(2)> <img id=emailKeyButton2 src=images/login/2fa-mail-48.png srcset="images/login/2fa-mail-96.png 2x"title=Email loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useEmailToken(2)> <img id=pushKeyButton2 src=images/login/2fa-push-48.png srcset="images/login/2fa-push-96.png 2x"title="Device Authentication"loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=usePushToken(2)></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Back to login</a> <input id=resettokenformargs name=urlargs type=hidden></form></div><div id=resetpasswordpanel style=display:none;position:relative><form id=resetpasswordpanelform method=post><input type=hidden name=action value=resetpassword><div id=message6></div><div id=rpasswordPolicyCallout style=display:none></div><table><tr><td id=rnuPass1 width=100 align=right>Password:<td><input id=rapassword1 type=password name=rpassword1 {{{autocomplete}}}=off maxlength=256 onkeydown=haltReturn(event) onchange=validatePassReset(3,event) onkeyup=validatePassReset(3,event)><tr><td id=rnuPass2 align=right>Password:<td><input id=rapassword2 type=password name=rpassword2 {{{autocomplete}}}=off maxlength=256 onkeydown=haltReturn(event) onchange=validatePassReset(4,event) onkeyup=validatePassReset(4,event)><tr id=resetpasswordpanelHint style=display:none><td id=rnuHint align=right>Password Hint:<td><input id=rapasswordhint name=rpasswordhint {{{autocomplete}}}=off maxlength=256 onkeydown=haltReturn(event) onchange=validatePassReset(5,event) onkeyup=validatePassReset(5,event)><tr><td colspan=2><div style=float:right><input id=resetPassButton type=button onclick='submitButtonClicked("resetpasswordpanelform")'value="Reset Password"disabled></div><div id=rpassWarning style=padding-top:6px></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Back to login</a> <input id=resetpasswordformargs name=urlargs type=hidden></form></div><div id=checkemailpanel style=display:none;position:relative><form id=checkemailpanelform method=post><input type=hidden name=action value=checkemail><div id=message7></div><table id=checkCheckOperations style=width:100%;display:none><tr><td><div id=unconfirmedEmail></div><br><tr><td><div><input id=changeEmailButton type=button value="Change Email Address"onclick=changeEmailAddress()> <input id=checkEmailButton2 type=button value="Resend Confirmation Email"onclick=resentEmailConfirmation()> <input id=checkEmailButton type=button onclick='submitButtonClicked("checkemailpanelform")'style=display:none> <input id=checkEmailVal name=email type=hidden></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Back to login</a> <input id=checkemailformargs name=urlargs type=hidden></form></div><div id=waitpushpanel style=display:none><form id=waitpushpanelform method=post><input type=hidden name=action value=pushlogin><div id=message8></div><table style=width:100%><tr><td style=align-content:center;padding-top:10px><img id=waitpushpanelimage src=images/login/push-150.png srcset="images/login/push-300.png 2x"style=opacity:.3 loading=lazy width=265 height=150><tr><td style=align-content:center;padding-top:10px><label id=tokenInputRememberLabel2><input id=tokenInputRemember2 name=remembertoken type=checkbox><span id=tokenInputRememberSpan2></span></label></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Back to login</a> <input id=pushtokenformargs name=urlargs type=hidden> <input id=pushtokenInput name=hwstate type=hidden> <input id=pushOkButton onclick='submitButtonClicked("waitpushpanelform")'style=display:none></form></div><tr id=welcomeTextRow><td><div id=welcomeText style=color:#fff;text-align:center;margin-left:20px;margin-right:20px></div><tr style=height:20px><td><div><div id=flink style=float:right;margin-right:4px;color:#c8c8c8>{{{rootCertLink}}}&nbsp;<a href=terms>Terms &amp; Privacy</a></div><div id=flink style=margin-left:4px;color:#c8c8c8>{{{footer}}}</div></div></table><div id=dialog style=display:none><div id=dialogHeader><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 id=dialogBody><div id=dialog1><div id=id_dialogMessage></div></div><div id=dialog2><div id=id_dialogOptions></div></div></div><div id=idx_dlgButtonBar><input id=idx_dlgCancelButton type=button value=Cancel onclick=dialogclose(0)> <input id=idx_dlgOkButton type=button value=OK onclick=dialogclose(1)></div></div><script>"use strict";var xxdialogMode,xxdialogFunc,xxdialogButtons,xxdialogTag,random="{{{randomlength}}}",welcomePictureFullScreen="true"===decodeURIComponent("{{{welcomePictureFullScreen}}}"),passlogin="{{{passlogin}}}",passhint="{{{passhint}}}",loginMode="{{{loginmode}}}",newAccount="{{{newAccount}}}",newAccountPass=parseInt("{{{newAccountPass}}}"),newAccountCaptcha="{{{newAccountCaptcha}}}",emailCheck="{{{emailcheck}}}",passRequirements="{{{passRequirements}}}",hardwareKeyChallenge=decodeURIComponent("{{{hkey}}}"),passRequirementsEx=null!=(passRequirements=""!=passRequirements?JSON.parse(decodeURIComponent(passRequirements)):{}).min||null!=passRequirements.max||null!=passRequirements.upper||null!=passRequirements.lower||null!=passRequirements.numeric||null!=passRequirements.nonalpha,features=parseInt("{{{features}}}"),welcomeText=decodeURIComponent("{{{welcometext}}}"),currentpanel=0,publicKeyCredentialRequestOptions=null,otpemail="true"===decodeURIComponent("{{{otpemail}}}"),otpsms="true"===decodeURIComponent("{{{otpsms}}}"),otpmsg="true"===decodeURIComponent("{{{otpmsg}}}"),otppush="true"===decodeURIComponent("{{{otppush}}}"),autofido="true"===decodeURIComponent("{{{autofido}}}"),twoFactorCookieDays=parseInt("{{{twoFactorCookieDays}}}"),authStrategies="{{{authStrategies}}}".split(","),tokenTimeout=parseInt("{{{tokenTimeout}}}"),websocket=null,formSubmitted=!1;function startup(){"true"==decodeURIComponent("{{{loginpicture}}}")&&(Q("loginPicture").src="loginlogo.png"),QV("welcomeTextRow",""!=welcomeText),QH("welcomeText",welcomeText),welcomePictureFullScreen&&(QS("backgroundImage").height="100%",QS("backgroundImage").opacity="1",QS("backgroundImage")["background-position"]="center center",QS("backgroundImage")["background-size"]="cover");var e,t=parseInt("{{{messageid}}}"),n=["","If valid, reset mail sent.","Email sent.","Email verification required, check your mailbox and click the confirmation link.","SMS sent.","Sending notification...","Message sent."],a=["Unable to create account.","Account limit reached.","Existing account with this email address.","Invalid account creation token.","Username already exists.","Password rejected, use a different one.","Invalid email.","Account not found.","Invalid token, try again.","Unable to sent email.","Account locked.","Access denied.","Login failed, check username and password.","Password change requested.","IP address blocked, try again later.","Server under maintenance.","Unable to send device notification.","Invalid security check."];if(0<t){var o="";if(t<100&&t<n.length?o=n[t]:100<=t&&t-100<a.length&&(o=a[t-100]),""!=o)for(o=100<=t?'<span class="msg error"><b style=color:#8C001A>'+o+"<b></span><br /><br />":'<span class="msg success"><b>'+o+"</b></span><br /><br />",e=1;e<9;e++)QH("message"+e,o)}n=parseUriArgs();if(passlogin="true"==passlogin,1===n.passlogin&&(passlogin=!0),0===n.passlogin&&(passlogin=!1),QV("loginuserpassdiv",passlogin),QV("loginuserpasshr",passlogin),0<twoFactorCookieDays?(QV("tokenInputRememberLabel",!0),QH("tokenInputRememberSpan",format("Remember this device for {0} days.",twoFactorCookieDays)),QV("tokenInputRememberLabel2",!0),QH("tokenInputRememberSpan2",format("Remember this device for {0} days.",twoFactorCookieDays))):(QV("tokenInputRememberLabel",!1),QV("tokenInputRememberLabel2",!1)),0<window.location.href.indexOf("?")&&(a=window.location.href.substring(window.location.href.indexOf("?")),Q("loginformargs").value=a,Q("createformargs").value=a,Q("resetformargs").value=a,Q("tokenformargs").value=a,Q("pushtokenformargs").value=a,Q("resettokenformargs").value=a,Q("resetpasswordformargs").value=a,Q("checkemailformargs").value=a),0==(32&features)){n=null;try{n=top.location.toString().toLowerCase()}catch(e){}if(top!=self&&(null==n||0==top.active))return void(top.location=self.location)}if(2097152&features&&(Q("username").placeholder="Email",QH("resetAccountSpan","Forgot password?"),QV("nuUserRow",!1)),QV("createPanelHint",!0===passRequirements.hint),QV("resetpasswordpanelHint",!0===passRequirements.hint),""!=authStrategies&&(QV("authStrategies",!0),0<=authStrategies.indexOf("twitter")&&QV("auth-twitter",!0),0<=authStrategies.indexOf("google")&&QV("auth-google",!0),0<=authStrategies.indexOf("github")&&QV("auth-github",!0),0<=authStrategies.indexOf("reddit")&&QV("auth-reddit",!0),0<=authStrategies.indexOf("azure")&&QV("auth-azure",!0),0<=authStrategies.indexOf("oidc")&&QV("auth-oidc",!0),0<=authStrategies.indexOf("jumpcloud")&&QV("auth-jumpcloud",!0),0<=authStrategies.indexOf("intel")&&QV("auth-intel",!0),0<=authStrategies.indexOf("saml"))&&QV("auth-saml",!0),validateLogin(),validateCreate(),0!=loginMode.length?go(parseInt(loginMode)):go(1),QV("newAccountDiv","1"===newAccount||"true"===newAccount),null!=passhint&&0<passhint.length&&QV("showPassHintLink",!0),QV("newAccountPass",1==newAccountPass),QV("newAccountCaptcha",""!=newAccountCaptcha),QV("newAccountCaptchaImg",""!=newAccountCaptcha),QV("resetAccountDiv","true"==emailCheck),QV("hrAccountDiv","true"==emailCheck||1==newAccountPass),"4"==loginMode){0<tokenTimeout&&setTimeout(function(){Q("hwtokenInput").value="**timeout**",QE("tokenOkButton",!0),Q("tokenOkButton").click()},tokenTimeout);try{hardwareKeyChallenge=0<hardwareKeyChallenge.length?JSON.parse(hardwareKeyChallenge):null}catch(e){hardwareKeyChallenge=null}var s=null!=hardwareKeyChallenge&&"webAuthn"==hardwareKeyChallenge.type,r=otpemail&&2!=t&&4!=t&&6!=t,l=otpsms&&2!=t&&4!=t&&6!=t,u=otpmsg&&2!=t&&4!=t&&6!=t,i=otppush&&2!=t&&4!=t&&6!=t;QV("securityKeyButton",s),QV("emailKeyButton",r),QV("smsKeyButton",l),QV("msgKeyButton",u),QV("pushKeyButton",i),QV("2farow",s||r||l||u||i),autofido&&s&&setTimeout(function(){useSecurityKey(1)},300)}if("5"==loginMode){0<tokenTimeout&&setTimeout(function(){Q("hwtokenInput").value="**timeout**",QE("tokenOkButton",!0),Q("tokenOkButton").click()},tokenTimeout);try{hardwareKeyChallenge=0<hardwareKeyChallenge.length?JSON.parse(hardwareKeyChallenge):null}catch(e){hardwareKeyChallenge=null}s=null!=hardwareKeyChallenge&&"webAuthn"==hardwareKeyChallenge.type,r=otpemail&&2!=t&&4!=t&&6!=t,l=otpsms&&2!=t&&4!=t&&6!=t,u=otpmsg&&2!=t&&4!=t&&6!=t,i=otppush&&2!=t&&4!=t&&6!=t;QV("securityKeyButton2",s),QV("emailKeyButton2",r),QV("smsKeyButton2",l),QV("msgKeyButton2",u),QV("pushKeyButton",i),QV("2farow2",s||r||l||u||i),autofido&&s&&setTimeout(function(){useSecurityKey(2)},300)}"8"==loginMode&&((websocket=new WebSocket(passhint)).onopen=function(e){QS("waitpushpanelimage").opacity="1"},websocket.onmessage=function(e){"string"!=typeof e.data&&this.close();var t=null;try{t=JSON.parse(e.data)}catch(e){}!0===t.sent?QH("message8",'<span class="msg success"><b>'+format("Request sent, {0}.",t.code)+"</b></span><br /><br />"):!1===t.sent?(QH("message8",'<span class="msg error"><b style=color:#8C001A>Failed to send request.<b></span><br /><br />'),QV("tokenInputRememberLabel2",!1),this.close()):!0===t.approved?(this.close(),QV("tokenInputRememberLabel2",!1),QH("message8",'<span class="msg success"><b>Request Accepted.</b></span><br /><br />'),Q("pushtokenInput").value=t.token,Q("pushOkButton").click()):(QH("message8",'<span class="msg error"><b style=color:#8C001A>Access Rejected.<b></span><br /><br />'),QV("tokenInputRememberLabel2",!1),this.close())},websocket.onclose=function(e){QS("waitpushpanelimage").opacity="0.3"},websocket.onerror=function(e){QH("message8",'<span class="msg error"><b style=color:#8C001A>Connection Error<b></span><br /><br />'),QS("waitpushpanelimage").opacity="0.5"})}function useSecurityKey(t){if(null!=hardwareKeyChallenge&&"webAuthn"==hardwareKeyChallenge.type){"string"==typeof hardwareKeyChallenge.challenge&&(hardwareKeyChallenge.challenge=Uint8Array.from(atob(hardwareKeyChallenge.challenge),function(e){return e.charCodeAt(0)}).buffer),publicKeyCredentialRequestOptions={challenge:hardwareKeyChallenge.challenge,allowCredentials:[],timeout:hardwareKeyChallenge.timeout};for(var e=0;e<hardwareKeyChallenge.keyIds.length;e++)publicKeyCredentialRequestOptions.allowCredentials.push({id:Uint8Array.from(atob(hardwareKeyChallenge.keyIds[e]),function(e){return e.charCodeAt(0)}),type:"public-key",transports:["usb","ble","nfc","internal"]});navigator.credentials.get({publicKey:publicKeyCredentialRequestOptions}).then(function(e){e={id:btoa(String.fromCharCode.apply(null,new Uint8Array(e.rawId))),clientDataJSON:btoa(String.fromCharCode.apply(null,new Uint8Array(e.response.clientDataJSON))),userHandle:btoa(String.fromCharCode.apply(null,new Uint8Array(e.response.userHandle))),signature:btoa(String.fromCharCode.apply(null,new Uint8Array(e.response.signature))),authenticatorData:btoa(String.fromCharCode.apply(null,new Uint8Array(e.response.authenticatorData)))};1==t?(Q("hwtokenInput").value=JSON.stringify(e),QE("tokenOkButton",!0),Q("tokenOkButton").click()):2==t&&(Q("resetHwtokenInput").value=JSON.stringify(e),QE("resetTokenOkButton",!0),Q("resetTokenOkButton").click())},function(e){console.log("credentials-get error",e)})}}function useEmailToken(e){1==otpemail&&setDialogMode(1,"Secure Login",3,useEmailKeyEx,"Send token to registered email address?",e)}function useEmailKeyEx(e,t){1==t?(Q("hwtokenInput").value="**email**",QE("tokenOkButton",!0),Q("tokenOkButton").click()):2==t&&(Q("resetHwtokenInput").value="**email**",QE("resetTokenOkButton",!0),Q("resetTokenOkButton").click())}function useSMSToken(e){1==otpsms&&setDialogMode(1,"Secure Login",3,useSMSTokenEx,"Send token to registered phone number?",e)}function useSMSTokenEx(e,t){1==t?(Q("hwtokenInput").value="**sms**",QE("tokenOkButton",!0),Q("tokenOkButton").click()):2==t&&(Q("resetHwtokenInput").value="**sms**",QE("resetTokenOkButton",!0),Q("resetTokenOkButton").click())}function useMsgToken(e){1==otpmsg&&setDialogMode(1,"Secure Login",3,useMsgTokenEx,"Send token to messaging application?",e)}function useMsgTokenEx(e,t){1==t?(Q("hwtokenInput").value="**msg**",QE("tokenOkButton",!0),Q("tokenOkButton").click()):2==t&&(Q("resetHwtokenInput").value="**msg**",QE("resetTokenOkButton",!0),Q("resetTokenOkButton").click())}function usePushToken(e){1==e?(Q("hwtokenInput").value="**push**",QE("tokenOkButton",!0),Q("tokenOkButton").click()):2==e&&(Q("resetHwtokenInput").value="**push**",QE("resetTokenOkButton",!0),Q("resetTokenOkButton").click())}function showPassHint(e){return messagebox("Password Hint",passhint),haltEvent(e),!1}function xgo(e,t){return QV("message1",!1),QV("message2",!1),QV("message3",!1),QV("message4",!1),QV("message5",!1),QV("message6",!1),QV("message7",!1),go(e),haltEvent(t),!1}function go(e){currentpanel=e,setDialogMode(0),QV("showPassHintLink",!1),QV("loginpanel",1==e),QV("createpanel",2==e),QV("resetpanel",3==e),QV("tokenpanel",4==e),QV("resettokenpanel",5==e),QV("resetpasswordpanel",6==e),QV("checkemailpanel",7==e),QV("waitpushpanel",8==e),1==e&&Q("username").focus(),2==e&&(2097152&features?Q("aemail"):Q("ausername")).focus(),3==e&&Q("remail").focus(),4==e&&Q("tokenInput").focus(),5==e&&Q("resetTokenInput").focus(),6==e&&Q("rapassword1").focus(),7==e&&(QH("unconfirmedEmail",passhint),QV("checkCheckOperations",""!=Q("unconfirmedEmail").innerHTML),QH("checkEmailVal",passhint))}function submitButtonClicked(e){formSubmitted||(formSubmitted=!0,document.getElementById(e).submit())}function validateLogin(e,t){var n=0<Q("username").value.length&&-1==Q("username").value.indexOf(" ")&&0<Q("password").value.length;QE("loginButton",n),setDialogMode(0),null!=t&&13==t.keyCode&&(1==e&&""!=Q("username").value?Q("password").focus():2==e&&""!=Q("password").value&&Q("loginButton").click()),null!=t&&haltEvent(t)}function validateCreate(e,t){setDialogMode(0);var n=!1,n=!!(2097152&features)||0<Q("ausername").value.length&&-1==Q("ausername").value.indexOf(" ")&&-1==Q("ausername").value.indexOf('"')&&-1==Q("ausername").value.indexOf(","),a=1==validateEmail(Q("aemail").value),o=0<Q("apassword1").value.length,s=0<Q("apassword2").value.length&&Q("apassword2").value==Q("apassword1").value,r=0==newAccountPass||0<Q("anewaccountpass").value.length,l=""==newAccountCaptcha||0<Q("anewaccountcaptcha").value.length,u=n&&a&&o&&s&&r;QS("nuUser").color=n?"black":"#7b241c",QS("nuEmail").color=a?"black":"#7b241c",QS("nuPass1").color=o?"black":"#7b241c",QS("nuPass2").color=s?"black":"#7b241c",QS("nuToken").color=r?"black":"#7b241c",QS("nuCaptcha").color=l?"black":"#7b241c",""==Q("apassword1").value?(QH("passWarning",""),QV("passwordPolicyCallout",!1)):passRequirementsEx?0==checkPasswordRequirements(Q("apassword1").value,passRequirements)?(u=!1,QS("nuPass1").color="#7b241c",QS("nuPass2").color="#7b241c",QH("passWarning","<div style=color:red;cursor:pointer onclick=showPasswordPolicy()><b>Password Policy</b><div>"),QV("passwordPolicyCallout",!0),QH("passwordPolicyCallout",passwordPolicyText(Q("apassword1").value))):(QH("passWarning",""),QV("passwordPolicyCallout",!1)):80<=(r=checkPasswordStrength(Q("apassword1").value))?QH("passWarning","<span style=color:green><b>Strong Password</b><span>"):60<=r?QH("passWarning","<span style=color:blue><b>Good Password</b><span>"):QH("passWarning","<span style=color:red><b>Weak Password</b><span>"),null!=t&&13==t.keyCode&&(1==e&&n&&Q("aemail").focus(),2==e&&a&&Q("apassword1").focus(),3==e&&o&&Q("apassword2").focus(),4==e&&s&&(!0===passRequirements.hint?Q("apasswordhint").focus():e=5),5==e&&(1==newAccountPass?Q("anewaccountpass").focus():e=6),6==e&&(""!=newAccountCaptcha?Q("anewaccountcaptcha").focus():e=7),7==e)&&Q("createButton").click(),null!=t&&haltEvent(t),QE("createButton",u)}function validatePassReset(e,t){setDialogMode(0);var n=0<Q("rapassword1").value.length,a=0<Q("rapassword2").value.length&&Q("rapassword2").value==Q("rapassword1").value,o=n&&a;QS("rnuPass1").color=n?"black":"#7b241c",QS("rnuPass2").color=a?"black":"#7b241c",""==Q("rapassword1").value?(QH("rpassWarning",""),QV("rpasswordPolicyCallout",!1)):passRequirementsEx?0==checkPasswordRequirements(Q("rapassword1").value,passRequirements)?(o=!1,QS("rnuPass1").color="#7b241c",QS("rnuPass2").color="#7b241c",QH("rpassWarning","<div style=color:red;cursor:pointer onclick=showPasswordPolicy()><b>Password Policy</b><div>"),QV("rpasswordPolicyCallout",!0),QH("rpasswordPolicyCallout",passwordPolicyText(Q("rapassword1").value))):(QH("rpassWarning",""),QV("rpasswordPolicyCallout",!1)):80<=(n=checkPasswordStrength(Q("rapassword1").value))?QH("rpassWarning","<span style=color:green><b>Strong Password</b><span>"):60<=n?QH("rpassWarning","<span style=color:blue><b>Good Password</b><span>"):QH("rpassWarning","<span style=color:red><b>Weak Password</b><span>"),null!=t&&13==t.keyCode&&(2==e&&Q("rapassword1").focus(),3==e&&Q("rapassword2").focus(),4==e&&Q("rapasswordhint").focus(),6==e)&&Q("resetPassButton").click(),null!=t&&haltEvent(t),QE("resetPassButton",o)}function passwordPolicyText(e){var t="<div style=text-align:left>",n=strCount(e);return passRequirements.min&&(null==e||e.length<passRequirements.min)&&(t+=format("Minimum length of {0}",passRequirements.min)+"<br />"),passRequirements.max&&(null==e||e.length>passRequirements.max)&&(t+=format("Maximum length of {0}",passRequirements.max)+"<br />"),passRequirements.upper&&(null==e||n.upper<passRequirements.upper)&&(t+=format("{0} upper case",passRequirements.upper)+"<br />"),passRequirements.lower&&(null==e||n.lower<passRequirements.lower)&&(t+=format("{0} lower case",passRequirements.lower)+"<br />"),passRequirements.numeric&&(null==e||n.numeric<passRequirements.numeric)&&(t+=format("{0} numeric",passRequirements.numeric)+"<br />"),passRequirements.nonalpha&&(null==e||n.nonalpha<passRequirements.nonalpha)&&(t+=format("{0} non-alphanumeric",passRequirements.nonalpha)+"<br />"),t+="</div>"}function showPasswordPolicy(){messagebox("Password Policy",passwordPolicyText())}function validateReset(e){setDialogMode(0);var t=validateEmail(Q("remail").value);QE("eresetButton",t),null!=e&&13==e.keyCode&&1==t&&Q("eresetButton").click(),null!=e&&haltEvent(e)}function checkPasswordStrength(e){var t=0,n={},a=0,o={digits:/\d/.test(e),lower:/[a-z]/.test(e),upper:/[A-Z]/.test(e),nonWords:/\W/.test(e)};if(!e)return 0;for(var s,r=0;r<e.length;r++)n[e[r]]=(n[e[r]]||0)+1,t+=5/n[e[r]];for(s in o)a+=1==o[s]?1:0;return parseInt(t+10*(a-1))}function checkPasswordRequirements(e,t){return null==t||""==t||"object"!=typeof t||!(t.min&&e.length<t.min||t.max&&e.length>t.max||(e=strCount(e),t.numeric&&e.numeric<t.numeric)||t.lower&&e.lower<t.lower||t.upper&&e.upper<t.upper||t.nonalpha&&e.nonalpha<t.nonalpha)}function strCount(e){var t={numeric:0,lower:0,upper:0,nonalpha:0};if("string"==typeof e)for(var n=0;n<e.length;n++)/\d/.test(e[n])&&t.numeric++,/[a-z]/.test(e[n])&&t.lower++,/[A-Z]/.test(e[n])&&t.upper++,/\W/.test(e[n])&&t.nonalpha++;return t}function checkToken(e){var t=Q("tokenInput").value,n=t.split(" ").join(""),t=(t!=n&&(Q("tokenInput").value=n),6==Q("tokenInput").value.length||8==Q("tokenInput").value.length||44==Q("tokenInput").value.length);QE("tokenOkButton",t),t&&null!=e&&13==e.keyCode&&submitButtonClicked("tokenpanelform")}function resetCheckToken(e){var t=Q("resetTokenInput").value,n=t.split(" ").join(""),t=(t!=n&&(Q("resetTokenInput").value=n),6==Q("resetTokenInput").value.length||8==Q("resetTokenInput").value.length||44==Q("resetTokenInput").value.length);QE("resetTokenOkButton",t),t&&null!=e&&13==e.keyCode&&submitButtonClicked("resettokenpanelform")}function changeEmailAddress(){setDialogMode(1,"Email Confirmation",3,changeEmailAddressEx,addHtmlValue("Email",'<input id=dp1email style=width:230px maxlength=256 value="'+Q("unconfirmedEmail").innerHTML+'" {{{autocomplete}}}=off onchange=validateEmailAddress() onkeyup=validateEmailAddress() />')),validateEmailAddress()}function validateEmailAddress(){QE("idx_dlgOkButton",1==validateEmail(Q("dp1email").value))}function changeEmailAddressEx(){Q("checkEmailVal").value=Q("dp1email").value,QH("unconfirmedEmail",Q("dp1email").value),Q("checkEmailButton").click()}function resentEmailConfirmation(){Q("checkEmailVal").value=Q("unconfirmedEmail").innerHTML,Q("checkEmailButton").click()}var xxcurrentView=0;function setDialogMode(e,t,n,a,o,s){xxdialogMode=e,xxdialogFunc=a,xxdialogButtons=n,xxdialogTag=s,QE("idx_dlgOkButton",!0),QV("idx_dlgOkButton",1&n),QV("idx_dlgCancelButton",2&n),QV("id_dialogclose",2&n||8&n),QV("idx_dlgButtonBar",7&n),t&&QH("id_dialogtitle",t);for(var r=1;r<24;r++)QV("dialog"+r,r==e);QV("dialog",e),o&&(2==e?QH("id_dialogOptions",o):QH("id_dialogMessage",o))}function dialogclose(e){var t=xxdialogFunc,n=xxdialogButtons,a=xxdialogTag;setDialogMode(),(8&n||e)&&t&&t(e,a)}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 putstore(e,t){try{"undefined"!=typeof localStorage&&localStorage.setItem(e,t)}catch(e){}}function getstore(e,t){try{var n;return"undefined"==typeof localStorage?t:null==(n=localStorage.getItem(e))?t:n}catch(e){return t}}function format(e){var n=Array.prototype.slice.call(arguments,1);return e.replace(/{(\d+)}/g,function(e,t){return void 0!==n[t]?n[t]:e})}function addTextLink(e,t,n){var a=t.toLowerCase().indexOf(e.toLowerCase());return-1==a?t:t.substring(0,a)+'<a href="'+n+'">'+e+"</a>"+t.substring(a+e.length)}function addHtmlValue(e,t){return"<table><td style=width:120px;text-align:left>"+e+"<td><b>"+t+"</b></table>"}</script>