<!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=manifest href={{{domainurl}}}manifest.json><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="사용자 이름"style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc {{{autocomplete}}}=username placeholder="사용자 이름"maxlength=64 name=username required onchange=validateLogin(1) onkeyup=validateLogin(1,event)><tr><td><input id=password title=암호 style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc {{{autocomplete}}}=current-password placeholder=암호 type=password maxlength=256 name=password required onchange=validateLogin(2) onkeyup=validateLogin(2,event)><tr><td><div id=showPassHintLink title="비밀번호 힌트"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>힌트 표시</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=로그인><tr id=topLanguageSelectRow style=display:none><td id=topLanguageSelect></table><div id=hrAccountDiv style=display:none><hr></div><div id=resetAccountDiv style=display:none;padding:2px><span id=resetAccountSpan>아이디/비밀번호를 잊어 버리셨습니까?</span> <a onclick="return xgo(3,event)"href=# style=cursor:pointer>계정 초기화</a>.</div><div id=newAccountDiv style=display:none;padding:2px;padding-top:10px>계정이 없습니까? <a onclick="return xgo(2,event)"href=# style=cursor:pointer>한 가지 만들기</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>기존 계정을 사용하여 로그인</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="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="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="GitHub를 사용하여 로그인"></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="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="OpenID Connect를 사용하여 로그인"></a><a id=auth-oidc-azure href=auth-oidc 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 with Azure using OpenID Connect"></a><a id=auth-oidc-google href=auth-oidc 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 with Google 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="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="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="단일 로그인"></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>계정 생성</b></div><div id=passwordPolicyCallout style=display:none></div><table><tr id=nuUserRow><td id=nuUser align=right width=100>사용자 이름:<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>이메일:<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>암호:<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>암호:<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>비밀번호 힌트:<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="계정 생성 토큰을 입력하십시오"><td id=nuToken align=right>생성 토큰 :<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="계정 만들기"disabled></div><div id=passWarning style=padding-top:6px></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>로그인으로 돌아가기</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>계정 재설정</b></div><table style=width:100%;margin-top:4px;margin-bottom:4px><tr><td><input id=remail title=이메일 style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc {{{autocomplete}}}=username placeholder=이메일 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="계정 초기화"disabled></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>로그인으로 돌아가기</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=토큰 style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc placeholder=토큰 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=로그인 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="보안키 사용"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=이메일 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="장치 인증"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)> <img id=duoKeyButton src=images/login/2fa-duo-48.png srcset="images/login/2fa-duo-96.png 2x"title="Duo 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=useDuoToken(1)></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>로그인으로 돌아가기</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=토큰 style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc placeholder=토큰 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=로그인 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="보안키 사용"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=이메일 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="장치 인증"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)> <img id=duoKeyButton2 src=images/login/2fa-duo-48.png srcset="images/login/2fa-duo-96.png 2x"title="Duo 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=useDuoToken(2)></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>로그인으로 돌아가기</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>암호:<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>암호:<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>비밀번호 힌트:<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="암호 초기화"disabled></div><div id=rpassWarning style=padding-top:6px></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>로그인으로 돌아가기</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="이메일 주소 변경"onclick=changeEmailAddress()> <input id=checkEmailButton2 type=button value="검증 이메일을 다시 보냅니다."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>로그인으로 돌아가기</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>로그인으로 돌아가기</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 id=bottomLanguageSelectRow style=display:none;text-align:center><td id=bottomLanguageSelect><tr style=height:20px><td><div><div id=flink style=float:right;margin-right:4px;color:#c8c8c8>{{{rootCertLink}}}&nbsp;<a href=terms>약관과 개인정보</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=취소 onclick=dialogclose(0)> <input id=idx_dlgOkButton type=button value=확인 onclick=dialogclose(1)></div></div><script>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,otpduo="true"===decodeURIComponent("{{{otpduo}}}"),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,serverLangs="{{{renderLanguages}}}".split(","),loclist={af:"아프리카 어",sq:"알바니아",ar:"아랍어 (표준)","ar-dz":"아랍어 (알제리)","ar-bh":"아랍어 (바레인)","ar-eg":"아랍어 (이집트)","ar-iq":"아랍어 (이라크)","ar-jo":"아랍어 (요르단)","ar-kw":"아랍어 (쿠웨이트)","ar-lb":"아랍어 (레바논)","ar-ly":"아랍어 (리비아)","ar-ma":"아랍어 (모로코)","ar-om":"아랍어 (오만)","ar-qa":"아랍어 (카타르)","ar-sa":"아랍어 (사우디 아라비아)","ar-sy":"아랍어 (시리아)","ar-tn":"아랍어 (튀니지)","ar-ae":"아랍어 (미국)","ar-ye":"아랍어 (예멘)",an:"아라곤어",hy:"아르메니아어",as:"아쌈어",ast:"아스투리아어",az:"아제르바이잔어",eu:"바스크어",bg:"불가리아어",be:"벨로루시어",bn:"벵골어",bs:"보스니아어",br:"브르타뉴어",my:"버마어",ca:"카탈로니아어",ch:"차모로어",ce:"체첸어",zh:"중국어","zh-hk":"중국어(홍콩)","zh-cn":"중국어(PRC)","zh-sg":"중국어(싱가포르)","zh-tw":"중국어(대만)",cv:"추바시어",co:"코르시카어",cr:"크리어",hr:"크로아티아어",cs:"체코어",da:"덴마크어",nl:"네덜란드어 (표준)","nl-be":"네덜란드어 (벨기에)",en:"영어","en-au":"영어 (호주)","en-bz":"영어 (벨리즈)","en-ca":"영어 (캐나다)","en-ie":"영어 (아일랜드)","en-jm":"영어 (자메이카)","en-nz":"영어 (뉴질랜드)","en-ph":"영어 (필리핀)","en-za":"영어 (남아프리카)","en-tt":"영어 (트리니다드 토바고)","en-gb":"영어 (영국)","en-us":"영어 (미국)","en-zw":"영어 (짐바브웨)",eo:"에스페란토어",et:"에스토니아어",fo:"페로어",fa:"페르시아어",fj:"피지어",fi:"핀란드어",fr:"프랑스어 (표준)","fr-be":"프랑스어 (벨기에)","fr-ca":"프랑스어 (캐나다)","fr-fr":"프랑스어 (프랑스)","fr-lu":"프랑스어 (룩셈부르크)","fr-mc":"프랑스어 (모나코)","fr-ch":"프랑스어 (스위스)",fy:"프리지아어",fur:"프리울리어",gd:"게일어 (Scots)","gd-ie":"게일어 (아일랜드어)",gl:"갈라시아어",ka:"조르지아어",de:"독일어 (표준)","de-at":"독일어 (오스트리아)","de-de":"독일어 (독일)","de-li":"독일어 (리히텐슈타인)","de-lu":"독일어 (룩셈부르크)","de-ch":"독일어 (스위스)",el:"그리스어",gu:"구주라티어",ht:"하이티어",he:"히브리어",hi:"힌디어",hu:"헝가리어",is:"아이슬란드어",id:"인도네시아어",iu:"이누트어",ga:"아일랜드어",it:"이탈리아어 (표준)","it-ch":"이탈리아어 (스위스)",ja:"일본어",kn:"칸나다어",ks:"카시미르어",kk:"카자흐어",km:"크메르어",ky:"키르기즈어",tlh:"클링온어",ko:"한국어","ko-kp":"조선어 (북한)","ko-kr":"한국어 (한국)",la:"라틴어",lv:"라트비아어",lt:"리투아니아어",lb:"룩셈부르크어",mk:"FYRO 마케도니아어",ms:"말레이어",ml:"말라얄람어",mt:"몰티즈어",mi:"마오리어",mr:"마라티어",mo:"몰다비아어",nv:"나바호어",ng:"은동가어",ne:"네팔어",no:"노르웨이어",nb:"노르웨이어 (Bokmal)",nn:"노르웨이어 (니 노르 스크)",oc:"오크어",or:"오리야어",om:"오로모어","fa-ir":"페르시아어 /이란",pl:"폴란드어",pt:"포르투갈인","pt-br":"포르투갈어 (브라질)",pa:"펀자브어","pa-in":"펀자브어 (인도)","pa-pk":"펀자브어 (파키스탄)",qu:"케추아어",rm:"로마어 (라에토)",ro:"루마니아어","ro-mo":"루마니아어 (몰다비아)",ru:"러시아어","ru-mo":"러시아어 (몰다비아)",sz:"사미어 (Lappish)",sg:"상고어",sa:"산스크리트어",sc:"사르디니아어",sd:"신디어",si:"싱할레스어",sr:"세르비아어",sk:"슬로바키아어",sl:"슬로베니아어",so:"소마니어",sb:"소르비아어",es:"스페인어","es-ar":"스페인어 (아르헨티나)","es-bo":"스페인어 (볼리비아)","es-cl":"스페인어 (칠레)","es-co":"스페인어 (콜롬비아)","es-cr":"스페인어 (코스타리카)","es-do":"스페인어 (도미니카 공화국)","es-ec":"스페인어 (에콰도르)","es-sv":"스페인어 (엘살바도르)","es-gt":"스페인어 (과테말라)","es-hn":"스페인어 (온두라스)","es-mx":"스페인어 (멕시코)","es-ni":"스페인어 (니카라과)","es-pa":"스페인어 (파나마)","es-py":"스페인어 (파라과이)","es-pe":"스페인어 (페루)","es-pr":"스페인어 (푸에르토 리코)","es-es":"스페인어 (스페인)","es-uy":"스페인어 (우루과이)","es-ve":"스페인어 (베네수엘라)",sx:"수투어",sw:"스와힐리어",sv:"스웨덴어","sv-fi":"스웨덴어 (핀란드)","sv-sv":"스웨덴어 (스웨덴)",ta:"타밀어",tt:"타타르어",te:"텔루가어",th:"태국어",tig:"티그레어",ts:"손가어",tn:"츠와나어",tr:"터키어",tk:"투르크멘어",uk:"우크라이나어",hsb:"어퍼 소르비아어",ur:"우르두어",ve:"벤다어",vi:"베트남어",vo:"볼라푸크어",wa:"왈론어",cy:"웨일스어",xh:"코사어",ji:"이디시어",zu:"줄루어"},loclistex={"zh-chs":"중국어(간체)","zh-cht":"중국 전통)"},showLanguageSelect="{{{showLanguageSelect}}}";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=parseInt("{{{messageid}}}"),t=["","유효한 경우 메일을 재설정하십시오.","이메일이 발송되었습니다.","이메일 검증이 요구됩니다. 당신의 메일박스를 확인하시고, 확인 링크를 클릭해주세요.","SMS가 전송됨.","알림을 보내는 중 ...","Message sent."],n=["계정을 만들 수 없습니다.","계정 한도에 도달했습니다.","이 이메일 주소를 가진 계정이 이미 존재합니다.","유효하지 않은 계정 생성 토큰입니다.","사용자 이름이 이미 존재합니다.","비밀번호가 거부되었습니다. 다른 비밀번호를 사용하십시오.","유효하지 않은 이메일입니다.","계정을 찾지 못했습니다.","유효하지 않은 토큰입니다. 다시 시도하십시오.","이메일을 보낼 수 없습니다.","잠긴 계정.","접근 거절됨.","로그인에 실패하였습니다. 사용자 이름과 비밀번호를 확인하십시오.","비밀번호 변경이 요청되었습니다.","IP 주소가 차단되었습니다. 나중에 다시 시도하십시오.","유지 보수중인 서버입니다.","장치 알림을 보낼 수 없습니다.","Invalid security check."];if(0<e){var a="";if(e<100&&e<t.length?a=t[e]:100<=e&&e-100<n.length&&(a=n[e-100]),""!=a)for(a=100<=e?'<span class="msg error"><b style=color:#8C001A>'+a+"<b></span><br /><br />":'<span class="msg success"><b>'+a+"</b></span><br /><br />",r=1;r<9;r++)QH("message"+r,a)}var o=JSON.parse("{{{flashErrors}}}");if(o&&0<o.length){a="";for(r=0;r<o.length;r++)o[r]&&(a+='<span class="msg error"><b style=color:#8C001A>'+o[r]+"<b></span><br /><br />");QH("message1",a),QV("message1",!0)}var s=parseUriArgs();if("top"===showLanguageSelect||"bottom"===showLanguageSelect){var r,l='<select id=d2langselect style="box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px" onChange="changeLanguage()">';for(r in l+='<option value="*">Use Browser Language</option>',serverLangs){var u=serverLangs[r];l+='<option value="'+u+'"'+(s.lang==u?" selected":"")+">"+u+" - "+(loclist[u]||loclistex[u])+"</option>"}QH(showLanguageSelect+"LanguageSelect",l),"top"===showLanguageSelect&&(QS(showLanguageSelect+"LanguageSelect")["padding-top"]="5px"),QV(showLanguageSelect+"LanguageSelectRow",!0)}if(passlogin="true"==passlogin,1===s.passlogin&&(passlogin=!0),0===s.passlogin&&(passlogin=!1),QV("loginuserpassdiv",passlogin),QV("loginuserpasshr",passlogin),0<twoFactorCookieDays?(QV("tokenInputRememberLabel",!0),QH("tokenInputRememberSpan",format("이 장치를 {0}일 동안 기억하십시오.",twoFactorCookieDays)),QV("tokenInputRememberLabel2",!0),QH("tokenInputRememberSpan2",format("이 장치를 {0}일 동안 기억하십시오.",twoFactorCookieDays))):(QV("tokenInputRememberLabel",!1),QV("tokenInputRememberLabel2",!1)),0<window.location.href.indexOf("?")&&(t=window.location.href.substring(window.location.href.indexOf("?")),Q("loginformargs").value=t,Q("createformargs").value=t,Q("resetformargs").value=t,Q("tokenformargs").value=t,Q("pushtokenformargs").value=t,Q("resettokenformargs").value=t,Q("resetpasswordformargs").value=t,Q("checkemailformargs").value=t),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="이메일",QH("resetAccountSpan","비밀번호를 잊으셨나요?"),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("azure")&&QV("auth-azure",!0),0<=authStrategies.indexOf("oidc")&&QV("auth-oidc",!0),0<=authStrategies.indexOf("oidc-azure")&&QV("auth-oidc-azure",!0),0<=authStrategies.indexOf("oidc-google")&&QV("auth-oidc-google",!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),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 i=null!=hardwareKeyChallenge&&"webAuthn"==hardwareKeyChallenge.type,c=otpemail&&2!=e&&4!=e&&6!=e,p=otpsms&&2!=e&&4!=e&&6!=e,d=otpmsg&&2!=e&&4!=e&&6!=e,g=otppush&&2!=e&&4!=e&&6!=e,m=otpduo&&2!=e&&4!=e&&6!=e;QV("securityKeyButton",i),QV("emailKeyButton",c),QV("smsKeyButton",p),QV("msgKeyButton",d),QV("pushKeyButton",g),QV("duoKeyButton",m),QV("2farow",i||c||p||d||g||m),autofido&&i&&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}i=null!=hardwareKeyChallenge&&"webAuthn"==hardwareKeyChallenge.type,c=otpemail&&2!=e&&4!=e&&6!=e,p=otpsms&&2!=e&&4!=e&&6!=e,d=otpmsg&&2!=e&&4!=e&&6!=e,g=otppush&&2!=e&&4!=e&&6!=e,m=otpduo&&2!=e&&4!=e&&6!=e;QV("securityKeyButton2",i),QV("emailKeyButton2",c),QV("smsKeyButton2",p),QV("msgKeyButton2",d),QV("pushKeyButton2",g),QV("duoKeyButton2",m),QV("2farow2",i||c||p||d||g||m),autofido&&i&&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("요청을 보냈습니다. {0}.",t.code)+"</b></span><br /><br />"):!1===t.sent?(QH("message8",'<span class="msg error"><b style=color:#8C001A>요청을 보내지 못했습니다.<b></span><br /><br />'),QV("tokenInputRememberLabel2",!1),this.close()):!0===t.approved?(this.close(),QV("tokenInputRememberLabel2",!1),QH("message8",'<span class="msg success"><b>요청이 수락되었습니다.</b></span><br /><br />'),Q("pushtokenInput").value=t.token,Q("pushOkButton").click()):(QH("message8",'<span class="msg error"><b style=color:#8C001A>액세스가 거부되었습니다.<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>연결 오류<b></span><br /><br />'),QS("waitpushpanelimage").opacity="0.5"})}function changeLanguage(){var e=Q("d2langselect").value,t=new URLSearchParams(window.location.search),e=("*"==e?t.delete("lang"):t.set("lang",e),window.location.pathname+"?"+t.toString());window.location.href=e}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,"안전한 로그인",3,useEmailKeyEx,"등록된 이메일 주소로 토큰을 보내시겠습니까?",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,"안전한 로그인",3,useSMSTokenEx,"등록된 휴대폰 번호로 토큰을 보내시겠습니까?",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,"안전한 로그인",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 useDuoToken(e){1==e?(Q("hwtokenInput").value="**duo**",QE("tokenOkButton",!0),Q("tokenOkButton").click()):2==e&&(Q("resetHwtokenInput").value="**duo**",QE("resetTokenOkButton",!0),Q("resetTokenOkButton").click())}function showPassHint(e){return messagebox("비밀번호 힌트",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){setTimeout(function(){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)},100)}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>비밀번호 정책</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>강력한 비밀번호</b><span>"):60<=r?QH("passWarning","<span style=color:blue><b>좋은 비밀번호</b><span>"):QH("passWarning","<span style=color:red><b>약한 암호</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>비밀번호 정책</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>강력한 비밀번호</b><span>"):60<=n?QH("rpassWarning","<span style=color:blue><b>좋은 비밀번호</b><span>"):QH("rpassWarning","<span style=color:red><b>약한 암호</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("최소길이 {0}",passRequirements.min)+"<br />"),passRequirements.max&&(null==e||e.length>passRequirements.max)&&(t+=format("{0}의 최대 길이",passRequirements.max)+"<br />"),passRequirements.upper&&(null==e||n.upper<passRequirements.upper)&&(t+=format("{0} 대문자",passRequirements.upper)+"<br />"),passRequirements.lower&&(null==e||n.lower<passRequirements.lower)&&(t+=format("{0} 소문자",passRequirements.lower)+"<br />"),passRequirements.numeric&&(null==e||n.numeric<passRequirements.numeric)&&(t+=format("{0} 숫자",passRequirements.numeric)+"<br />"),passRequirements.nonalpha&&(null==e||n.nonalpha<passRequirements.nonalpha)&&(t+=format("영숫자가 아닌 {0}",passRequirements.nonalpha)+"<br />"),t+="</div>"}function showPasswordPolicy(){messagebox("비밀번호 정책",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,"이메일 검증",3,changeEmailAddressEx,addHtmlValue("이메일",'<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>