|
|
<!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"><title>KeeWeb</title><meta http-equiv="Content-Security-Policy" content=" default-src 'self'; font-src data:; script-src 'sha512-jYN26k9MdXnhqu7Ssy7r+y/87ND1Br7yx4NzRHwx8dSII1LvinqIRKaXoIb0ObI9HQFILRWBg5gPRszhILAC9g==' 'unsafe-eval'; style-src 'sha512-63edYbLgq599MAsyyqgCBk18k1RCKpZ3FjZ9G3l0pQlvxVchNVaPhiAE+GwP9NKPZVIinJuNXJx2xY1tZkzvZg==' blob:; connect-src 'self' ws: https:; child-src 'self' blob:; worker-src 'self' blob:; img-src 'self' data: blob: https://services.keeweb.info/; object-src 'none'; form-action 'none'; "><meta name="application-name" content="KeeWeb"><meta name="kw-config" content="(no-config)"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><meta name="apple-mobile-web-app-title" content="KeeWeb"><meta name="theme-color" content="#6386ec"><meta name="msapplication-config" content="browserconfig.xml"><meta name="msapplication-TileColor" content="#6386ec"><link rel="apple-touch-icon" sizes="180x180" href="icons/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="icons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="icons/favicon-16x16.png"><link rel="mask-icon" href="icons/safari-pinned-tab.svg" color="#6386ec"><link rel="apple-touch-startup-image" href="icons/splash-640x1136.png" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"><link rel="apple-touch-startup-image" href="icons/splash-750x1294.png" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"><link rel="apple-touch-startup-image" href="icons/splash-1242x2148.png" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"><link rel="apple-touch-startup-image" href="icons/splash-1125x2436.png" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"><link rel="apple-touch-startup-image" href="icons/splash-1536x2048.png" media="(min-device-width: 768px) and (max-device-width: 1024px) and (-webkit-min-device-pixel-ratio: 2) and (orientation: portrait)"><link rel="apple-touch-startup-image" href="icons/splash-1668x2224.png" media="(min-device-width: 834px) and (max-device-width: 834px) and (-webkit-min-device-pixel-ratio: 2) and (orientation: portrait)"><link rel="apple-touch-startup-image" href="icons/splash-2048x2732.png" media="(min-device-width: 1024px) and (max-device-width: 1024px) and (-webkit-min-device-pixel-ratio: 2) and (orientation: portrait)"><link rel="manifest" href="manifest.json"><style>html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:initial;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:initial}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:initial}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}.pika-single{z-index:9999;display:block;position:relative;color:#333;background:#fff;border:1px solid;border-color:#ccc #ccc #bbb;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-single:after,.pika-single:before{content:" ";display:table}.pika-single:after{clear:both}.pika-lendar{float:left;width:240px;margin:8px}.pika-title{position:relative;text-align:center}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;opacity:0}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;color:#333;background-color:#fff}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:none;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:initial;background-position:50%;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.pika-next:hover,.pika-prev:hover{opacity:1}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.is-rtl .pika-next,.pika-prev{float:left;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==")}.is-rtl .pika-prev,.pika-next{float:right;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=")}.pika-select{display:inline-block}.pika-table{width:100%;border-collapse:collapse;border-spacing:0;border:0}.pika-table td,.pika-table th{width:14.2857142857%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700;text-align:center}.pika-table abbr{border-bottom:none;cursor:help}.pika-button{cursor:pointer;display:block;box-sizing:border-box;outline:none;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5;height:auto}.has-event .pika-button{color:#fff;background:#3af}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button,.is-outside-current-month .pika-button{color:#999;opacity:.3}.is-disabled .pika-button{pointer-events:none;cursor:default}.pika-button:hover{color:#fff;background:#ff8000;box-shadow:none;border-radius:3px}.pika-button .is-selection-disabled{pointer-events:none;cursor:default}.pika-week{font-size:11px;color:#999}.is-inrange .pika-button{color:#666;background:#d5e9f7}.is-startrange .pika-button{color:#fff;background:#6cb31d;box-shadow:none;border-radius:3px}.is-endrange .pika-button{color:#fff;background:#3af;box-shadow:none;border-radius:3px}body{--white-color:#d8e5f1;--black-color:#111;--red-color:#ed5f5e;--orange-color:#e8873a;--yellow-color:#f7c644;--green-color:#78b756;--blue-color:#2f7cf7;--violet-color:#e55d9c}.white-color{color:var(--white-color)}.black-color{color:var(--black-color)}.red-color{color:var(--red-color)}.orange-color{color:var(--orange-color)}.yellow-color{color:var(--yellow-color)}.green-color{color:var(--green-color)}.blue-color{color:var(--blue-color)}.violet-color{color:var(--violet-color)}.muted-color{color:var(--muted-color)}.action-color{color:var(--action-color)}.error-color{color:var(--error-color)}body{--focus-shadow-spread:3px;--button-border-radius:3px;--input-border-radius:4px;--block-border-radius:5px;--selected-item-text-color:var(--text-color);--open-icon-color:var(--text-color);--dropdown-box-shadow-color:rgba(0,0,0,0.1)}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2")}.fa{font-family:Font Awesome\ 5 Free;font-weight:400;font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased;display:inline-block;line-height:1.5}.fa.bottom{vertical-align:bottom}.fa-keyboard{position:relative;top:.1em}html{height:100%;width:100%}body,html{overflow:hidden;position:fixed}body{cursor:default;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent}noscript{display:block;margin-top:10%;text-align:center;font-size:16px}[type=button],[type=reset],[type=submit],button{-webkit-appearance:none;appearance:none;border-radius:var(--button-border-radius);cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,Microsoft YaHei,微软雅黑,PingFang SC,Hiragino Sans GB,STXihei,华文细黑,sans-serif;font-size:1rem;-webkit-font-smoothing:antialiased;font-weight:600;line-height:1;padding:.75em 1.5em;text-decoration:none;transition:background-color border-color .15s ease;-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap;outline:none;min-width:80px;border:1px solid var(--action-color);background-color:var(--action-color);color:var(--text-contrast-action-color)}[type=button].btn-error,[type=button].btn-silent,[type=reset].btn-error,[type=reset].btn-silent,[type=submit].btn-error,[type=submit].btn-silent,button.btn-error,button.btn-silent{border-color:var(--base-border-color);background-color:initial;color:var(--text-color)}[type=button]:hover,[type=reset]:hover,[type=submit]:hover,button:hover{border-color:var(--action-background-color-focus);background-color:var(--action-background-color-focus)}[type=button]:hover.btn-error,[type=reset]:hover.btn-error,[type=submit]:hover.btn-error,button:hover.btn-error{border-color:var(--error-background-color-focus);background-color:var(--error-background-color-focus-tr)}[type=button]:hover.btn-silent,[type=reset]:hover.btn-silent,[type=submit]:hover.btn-silent,button:hover.btn-silent{border-color:var(--action-background-color-focus);background-color:var(--action-background-color-focus-tr)}[type=button]:active,[type=reset]:active,[type=submit]:active,button:active{border-color:var(--action-background-color-active);background-color:var(--action-background-color-active)}[type=button]:active.btn-error,[type=reset]:active.btn-error,[type=submit]:active.btn-error,button:active.btn-error{border-color:var(--error-background-color-active);background-color:var(--error-background-color-active-tr)}[type=button]:active.btn-silent,[type=reset]:active.btn-silent,[type=submit]:active.btn-silent,button:active.btn-silent{border-color:var(--action-background-color-active);background-color:var(--action-background-color-active-tr)}[type=button]:disabled,[type=reset]:disabled,[type=submit]:disabled,button:disabled{cursor:default;opacity:.5}[type=button]:disabled:hover,[type=reset]:disabled:hover,[type=submit]:disabled:hover,button:disabled:hover{border-color:var(--action-color);background-color:var(--action-color)}[type=button]:disabled:hover.btn-error,[type=reset]:disabled:hover.btn-error,[type=submit]:disabled:hover.btn-error,button:disabled:hover.btn-error{border-color:var(--error-color);background-color:initial}[type=button]:disabled:hover.btn-silent,[type=reset]:disabled:hover.btn-silent,[type=submit]:disabled:hover.btn-silent,button:disabled:hover.btn-silent{border-color:var(--action-color);background-color:initial}.btn~.btn,button~button{margin-left:.75em}:focus{outline:none}fieldset{background-color:var(--secondary-background-color);border:1px solid var(--base-border-color);margin:0 0 .75em;padding:1.5em}input{line-height:normal;color:inherit}input,select{display:block;-webkit-app-region:no-drag}input,label,select{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,Microsoft YaHei,微软雅黑,PingFang SC,Hiragino Sans GB,STXihei,华文细黑,sans-serif;font-size:1rem}label{display:inline-block;font-weight:600;margin-bottom:.375em}label.required:after{content:"*"}label abbr{display:none}input:not([type]),input[type=password],input[type=text],textarea{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,Microsoft YaHei,微软雅黑,PingFang SC,Hiragino Sans GB,STXihei,华文细黑,sans-serif;font-size:1rem;margin-bottom:.75em;padding:.5em;transition:border-color .15s ease;color:var(--text-color);background-color:var(--background-color);border:1px solid var(--base-border-color);box-shadow:inset 0 1px 3px rgba(0,0,0,.06);border-radius:var(--input-border-radius)}input:not([type])::-ms-clear,input[type=password]::-ms-clear,input[type=text]::-ms-clear,textarea::-ms-clear{display:none}input:not([type])::-webkit-credentials-auto-fill-button,input[type=password]::-webkit-credentials-auto-fill-button,input[type=text]::-webkit-credentials-auto-fill-button,textarea::-webkit-credentials-auto-fill-button{visibility:hidden;display:none!important;pointer-events:none;position:absolute;right:0}input:not([type]):hover,input[type=password]:hover,input[type=text]:hover,textarea:hover{border-color:var(--accent-border-color)}input:not([type]):focus,input[type=password]:focus,input[type=text]:focus,textarea:focus{border-color:var(--form-box-border-color-focus);box-shadow:inset 0 1px 3px rgba(0,0,0,.06),0 0 0 var(--focus-shadow-spread) var(--form-box-shadow-color-focus);outline:none}input:not([type]):disabled,input[type=password]:disabled,input[type=text]:disabled,textarea:disabled{background-color:var(--disabled-background-color);cursor:not-allowed}input:not([type]):disabled:hover,input[type=password]:disabled:hover,input[type=text]:disabled:hover,textarea:disabled:hover{border:1px solid var(--base-border-color)}input:not([type]).input--error,input:not([type]).input--error:focus,input:not([type]).input--error:hover,input:not([type]):invalid,input[type=password].input--error,input[type=password].input--error:focus,input[type=password].input--error:hover,input[type=password]:invalid,input[type=text].input--error,input[type=text].input--error:focus,input[type=text].input--error:hover,input[type=text]:invalid,textarea.input--error,textarea.input--error:focus,textarea.input--error:hover,textarea:invalid{border-color:var(--error-color);box-shadow:inset 0 1px 3px rgba(0,0,0,.06),0 0 0 var(--focus-shadow-spread) var(--form-box-shadow-color-focus-error)}input:not([type]).input--error::selection,input:not([type]).input--error:focus::selection,input:not([type]).input--error:hover::selection,input:not([type]):invalid::selection,input[type=password].input--error::selection,input[type=password].input--error:focus::selection,input[type=password].input--error:hover::selection,input[type=password]:invalid::selection,input[type=text].input--error::selection,input[type=text].input--error:focus::selection,input[type=text].input--error:hover::selection,input[type=text]:invalid::selection,textarea.input--error::selection,textarea.input--error:focus::selection,textarea.input--error:hover::selection,textarea:invalid::selection{background-color:var(--text-selection-bg-color-error)}input:not([type]).input-search,input[type=password].input-search,input[type=text].input-search,textarea.input-search{padding-left:2.9em;padding-right:1.8em}input:not([type])::placeholder,input[type=password]::placeholder,input[type=text]::placeholder,textarea::placeholder{color:var(--muted-color)}textarea{resize:vertical}input[type=search]{-webkit-appearance:none;appearance:none}input[type=checkbox],input[type=radio]{display:inline;margin-right:.375em}input[type=checkbox]+label,input[type=radio]+label{display:inline-block}input[type=file]{margin-bottom:.75em;width:100%}select{margin-bottom:.75em;max-width:100%;-webkit-appearance:none;appearance:none;transition:border-color .15s ease;border-radius:var(--input-border-radius);padding-left:.5em;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMDYiIGhlaWdodD0iMzA2Ij48cGF0aCBmaWxsPSIjOTk4NDgzIiBkPSJNMjcwLjMgNTguNjVMMTUzIDE3NS45NSAzNS43IDU4LjY1IDAgOTQuMzVsMTUzIDE1MyAxNTMtMTUzeiIvPjwvc3ZnPg==);background-position:calc(100% - 5px) 50%;background-size:10px;background-repeat:no-repeat;background-color:var(--background-color);border:1px solid var(--base-border-color);color:var(--text-color);box-shadow:inset 0 1px 3px rgba(0,0,0,.06)}select:hover{border-color:var(--accent-border-color)}select:focus{border-color:var(--form-box-border-color-focus);box-shadow:inset 0 1px 3px rgba(0,0,0,.06),0 0 0 var(--focus-shadow-spread) var(--form-box-shadow-color-focus);outline:none}select:disabled{background-color:var(--disabled-background-color);cursor:not-allowed}select:disabled:hover{border:1px solid var(--base-border-color)}select::-ms-expand{display:none}option{background-color:var(--background-color);color:var(--text-color)}input[type=checkbox]{display:none}input[type=checkbox]:not([disabled])+label:hover:before{color:var(--action-color)}input[type=checkbox]+label:before{font-family:Font Awesome\ 5 Free;font-weight:400;font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased;line-height:1.5;content:"\f002";display:inline-block;width:1.3em;color:var(--text-color);font-size:1.2em;vertical-align:bottom;position:relative;top:.08em}input[type=checkbox]:checked+label:before{content:"\f003"}input[type=range]{-webkit-appearance:none;width:100%;margin:12px 0;padding:0;background:transparent}input[type=range]:focus{outline:none}input[type=range]::-webkit-slider-runnable-track{background:var(--text-color);width:100%;height:1px;cursor:pointer;border-radius:1px;border:none}input[type=range]::-webkit-slider-thumb{background:var(--text-color);border:none;height:14px;width:14px;border-radius:14px;cursor:pointer;-webkit-appearance:none;margin-top:-6.5px}input[type=range]::-moz-range-track{background:var(--text-color);width:100%;height:1px;cursor:pointer;border-radius:1px;border:none}input[type=range]::-moz-range-thumb{background:var(--text-color);border:none;height:14px;width:14px;border-radius:14px;cursor:pointer}input[type=range]::-moz-focus-outer{border:0}input[type=range]::-ms-track{width:100%;height:1px;cursor:pointer;background:transparent;border-color:transparent;border-width:14px 0;color:transparent}input[type=range]::-ms-tooltip{display:none}input[type=range]::-ms-fill-lower,input[type=range]::-ms-fill-upper,input[type=range]:focus::-ms-fill-lower,input[type=range]:focus::-ms-fill-upper{background:#d3d3d3}input[type=range]::-ms-thumb{border:none;height:14px;width:14px;border-radius:14px;cursor:pointer;background:#d3d3d3}.input-base,.input-size-base,.settings__row{width:60%}@media(max-width:736px){.input-base,.input-size-base,.settings__row{width:calc(100% - 20px)}}select.input-base{height:2em}ol,ul{list-style-type:none;margin:0;padding:0}dl{margin-bottom:.75em}dl dt{font-weight:700;margin-top:.75em}dl dd{margin:0}html{font-size:12px}body{height:100%;width:100%;-webkit-user-select:none;user-select:none;color:var(--text-color);background-color:var(--background-color);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,Microsoft YaHei,微软雅黑,PingFang SC,Hiragino Sans GB,STXihei,华文细黑,sans-serif;font-feature-settings:"kern","liga 0";font-size:1rem;line-height:1.5}@-moz-document url-prefix(){body{text-shadow:0 0}}h1,h2,h3,h4,h5,h6{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,Microsoft YaHei,微软雅黑,PingFang SC,Hiragino Sans GB,STXihei,华文细黑,sans-serif;line-height:1.2;margin:0 0 .75em}h6{font-size:1rem}h5{font-size:1.1rem}h4{font-size:1.21rem}h3{font-size:1.331rem}h2{font-size:1.5625rem}h1{font-size:2.44140625rem}p{margin:0 0 .75em}hr{border:0;border-bottom:1px solid var(--base-border-color);margin:1.5em 0}img{margin:0;max-width:100%}::selection{background-color:var(--text-selection-bg-color)}code{font-family:SFMono-Regular,Monaco,Consolas,Lucida Console,monospace}body.th-dark{--form-box-border-color-focus:#407091;--form-box-shadow-color-focus:#3a698b;--form-box-shadow-color-hover:rgba(58,105,139,0.8);--light-border-color:rgba(68,68,69,0.7);--secondary-background-color:#2d2d2e;--selected-item-color:#2463c8;--selected-on-secondary-item-color:#403f40}body.th-dark .list__item--active .blue-color{color:#689ff7}body.th-light{--form-box-border-color-focus:#8aacec;--form-box-shadow-color-focus:#90b2f2;--form-box-shadow-color-hover:rgba(144,178,242,0.8);--light-border-color:#dedede;--secondary-background-color:#efefef;--selected-item-color:#2366d9;--selected-on-secondary-item-color:#d6d6d6;--selected-item-text-color:#f6f6f6;--open-icon-color:#565656}body.th-light .list__item--active .blue-color{color:#7baeff}body.th-db .list__item--active .blue-color{color:#0051d2}body.th-db .list__item--active .green-color{color:#77d644}body.th-lb .list__item--active .blue-color{color:#0051d2}body.th-lb .list__item--active .green-color{color:#77d644}body.th-fb .list__item--active .blue-color{color:#98bfff}body.th-bl{--open-icon-color:#525462}body.th-bl .list__item--active .blue-color{color:#98bfff}body.th-te .list__item--active .green-color{color:#7be045}body.th-te .list__item--active .blue-color{color:#0750c5}body.th-lt .list__item--active .green-color{color:#7be045}body.th-lt .list__item--active .blue-color{color:#0750c5}body.th-hc{--selected-item-color:#1e5db8;--selected-item-text-color:#fafafa}body.th-hc .list__item--active .red-color{color:#ff6d6b}body.th-hc .list__item--active .orange-color{color:#ffbb86}body.th-hc .list__item--active .green-color{color:#baff92}body.th-hc .list__item--active .blue-color{color:#c1d9ff}body.th-hc .list__item--active .violet-color{color:#ff93c5}body.th-dc{--selected-item-color:#1e5db8;--selected-item-text-color:#fafafa}body.th-dc .list__item--active .red-color{color:#ff6d6b}body.th-dc .list__item--active .orange-color{color:#ffbb86}body.th-dc .list__item--active .green-color{color:#baff92}body.th-dc .list__item--active .blue-color{color:#c1d9ff}body.th-dc .list__item--active .violet-color{color:#ff93c5}body.th-sd{--selected-item-text-color:#002b36}body.th-sd .list__item--active .blue-color{color:#0249bd}body.th-sl{--selected-item-text-color:#fdf6e3}body.th-sl .list__item--active .orange-color{color:#ff9846}body.th-sl .list__item--active .green-color{color:#63d823}.th-dark{--muted-color:#4c4c4c;--muted-color-border:#353535;--text-selection-bg-color:rgba(49,126,246,0.3);--text-selection-bg-color-error:rgba(236,101,90,0.8);--text-semi-muted-color:#f6f6f7;--text-contrast-action-color:#f7f7f7;--text-contrast-error-color:#f7f7f7;--base-border-color:#6b6b6b;--accent-border-color:#818182;--light-border-color:#3d3d3d;--form-box-border-color-focus:#6ca2f6;--form-box-shadow-color-focus:rgba(108,162,246,0.7);--form-box-shadow-color-hover:rgba(108,162,246,0.5);--form-box-shadow-color-focus-error:rgba(233,80,67,0.7);--secondary-background-color:#2d2d2d;--intermediate-background-color:#232323;--intermediate-pressed-background-color:#222;--disabled-background-color:#1d1d1d;--unselected-background-color:#2c2c2c;--unselected-background-color-hover:#333334;--action-background-color-focus:#2765c5;--action-background-color-focus-tr:rgba(39,101,197,0.1);--action-background-color-active:#255fb9;--action-background-color-active-tr:rgba(37,95,185,0.15);--modal-background-color:rgba(30,30,30,0.9);--modal-background-color-tr:rgba(30,30,30,0);--selected-item-color:#2e70d6;--selected-on-secondary-item-color:#4c4c4c;--selectable-on-secondary-item-color:#333334;--clickable-on-secondary-color:#919192;--titlebar-button-background-color:hsla(0,0%,96.9%,0.085);--mute-percent:30%;--modal-opacity:0.9;--background-color:#1e1e1e;--medium-color:#b7b7b8;--text-color:#f7f7f7;--action-color:#317ef6}.th-dark,.th-light{--error-background-color-focus:#bd5148;--error-background-color-focus-tr:rgba(189,81,72,0.1);--error-background-color-active:#b14c44;--error-background-color-active-tr:rgba(177,76,68,0.15);--light-border-percent:20%;--color-lightness-shift:0;--error-color:#ec655a}.th-light{--muted-color:#a1a1a1;--muted-color-border:#ccc;--text-selection-bg-color:rgba(48,99,212,0.3);--text-selection-bg-color-error:rgba(236,101,90,0.8);--text-semi-muted-color:#303031;--text-contrast-action-color:#f6f6f6;--text-contrast-error-color:#f6f6f6;--base-border-color:#a1a1a1;--accent-border-color:#888;--light-border-color:#d4d4d4;--form-box-border-color-focus:#3054a3;--form-box-shadow-color-focus:rgba(48,84,163,0.7);--form-box-shadow-color-hover:rgba(48,84,163,0.5);--form-box-shadow-color-focus-error:rgba(233,80,67,0.7);--secondary-background-color:#e5e5e5;--intermediate-background-color:#f1f1f1;--intermediate-pressed-background-color:#f2f2f2;--disabled-background-color:#eaeaea;--unselected-background-color:#e7e7e7;--unselected-background-color-hover:#dedede;--action-background-color-focus:#264faa;--action-background-color-focus-tr:rgba(38,79,170,0.1);--action-background-color-active:#244a9f;--action-background-color-active-tr:rgba(36,74,159,0.15);--modal-background-color:hsla(0,0%,96.5%,0.9);--modal-background-color-tr:hsla(0,0%,96.5%,0);--selected-item-color:#4e79d9;--selected-on-secondary-item-color:#c3c3c3;--selectable-on-secondary-item-color:#dedede;--clickable-on-secondary-color:#777;--titlebar-button-background-color:rgba(48,48,48,0.085);--mute-percent:50%;--modal-opacity:0.9;--white-color:#d8e5f1;--black-color:#111;--red-color:#d04745;--orange-color:#e9873a;--yellow-color:#f7c84e;--green-color:#79b656;--blue-color:#2f7cf7;--violet-color:#e55d9c;--background-color:#f6f6f6;--medium-color:#4c4c4c;--text-color:#303030;--action-color:#3063d4}.th-db{--muted-color:#716261;--muted-color-border:#524948;--text-selection-bg-color:rgba(44,153,87,0.3);--text-selection-bg-color-error:rgba(253,109,103,0.8);--text-semi-muted-color:#feeae8;--text-contrast-action-color:#ffeae9;--text-contrast-error-color:#ffeae9;--base-border-color:#998483;--accent-border-color:#b79e9d;--light-border-color:#5c5150;--form-box-border-color-focus:#6bb183;--form-box-shadow-color-focus:rgba(107,177,131,0.7);--form-box-shadow-color-hover:rgba(107,177,131,0.5);--form-box-shadow-color-focus-error:rgba(253,85,78,0.7);--secondary-background-color:#48403f;--intermediate-background-color:#3a3433;--intermediate-pressed-background-color:#393332;--disabled-background-color:#312d2c;--unselected-background-color:#463e3d;--unselected-background-color-hover:#504746;--modal-background-color:rgba(52,47,46,0.9);--modal-background-color-tr:rgba(52,47,46,0);--selected-item-color:#2d8951;--selected-on-secondary-item-color:#716261;--selectable-on-secondary-item-color:#504746;--clickable-on-secondary-color:#ccafae;--titlebar-button-background-color:rgba(255,234,233,0.085);--mute-percent:30%;--modal-opacity:0.9;--background-color:#342f2e;--medium-color:#fed9d8;--text-color:#ffeae9}.th-db,.th-lb{--action-background-color-focus:#237a46;--action-background-color-focus-tr:rgba(35,122,70,0.1);--error-background-color-focus:#ca5752;--error-background-color-focus-tr:rgba(202,87,82,0.1);--action-background-color-active:#217341;--action-background-color-active-tr:rgba(33,115,65,0.15);--error-background-color-active:#be524d;--error-background-color-active-tr:rgba(190,82,77,0.15);--light-border-percent:20%;--color-lightness-shift:0;--action-color:#2c9957;--error-color:#fd6d67}.th-lb{--muted-color:#a19894;--muted-color-border:#cec4be;--text-selection-bg-color:rgba(44,153,87,0.3);--text-selection-bg-color-error:rgba(253,109,103,0.8);--text-semi-muted-color:#34302e;--text-contrast-action-color:#fcf0e8;--text-contrast-error-color:#fcf0e8;--base-border-color:#a19894;--accent-border-color:#857e7b;--light-border-color:#d7cdc6;--form-box-border-color-focus:#2e794b;--form-box-shadow-color-focus:rgba(46,121,75,0.7);--form-box-shadow-color-hover:rgba(46,121,75,0.5);--form-box-shadow-color-focus-error:rgba(253,85,78,0.7);--secondary-background-color:#eaded7;--intermediate-background-color:#f7ebe3;--intermediate-pressed-background-color:#f7ebe4;--disabled-background-color:#efe4dc;--unselected-background-color:#ece0d9;--unselected-background-color-hover:#e2d7d0;--modal-background-color:rgba(252,240,232,0.9);--modal-background-color-tr:rgba(252,240,232,0);--selected-item-color:#4ba66d;--selected-on-secondary-item-color:#c5bbb6;--selectable-on-secondary-item-color:#e2d7d0;--clickable-on-secondary-color:#736c6a;--titlebar-button-background-color:rgba(52,47,46,0.085);--mute-percent:50%;--modal-opacity:0.9;--background-color:#fcf0e8;--medium-color:#454040;--text-color:#342f2e}.th-fb{--muted-color:#4f545e;--muted-color-border:#3c4049;--text-selection-bg-color:rgba(82,139,255,0.3);--text-selection-bg-color-error:rgba(195,64,52,0.8);--text-semi-muted-color:#d6dae0;--text-contrast-action-color:#d7dae0;--text-contrast-error-color:#d7dae0;--base-border-color:#6a6f7a;--accent-border-color:#7d838e;--light-border-color:#424750;--form-box-border-color-focus:#7aa3f6;--form-box-shadow-color-focus:rgba(122,163,246,0.7);--form-box-shadow-color-hover:rgba(122,163,246,0.5);--form-box-shadow-color-focus-error:rgba(175,57,47,0.7);--secondary-background-color:#353942;--intermediate-background-color:#2c3038;--intermediate-pressed-background-color:#2b2f38;--disabled-background-color:#262a31;--unselected-background-color:#343841;--unselected-background-color-hover:#3a3f47;--modal-background-color:rgba(40,44,52,0.9);--modal-background-color-tr:rgba(40,44,52,0);--selected-item-color:#4c7de1;--selected-on-secondary-item-color:#4f545e;--selectable-on-secondary-item-color:#3a3f47;--clickable-on-secondary-color:#8a919c;--titlebar-button-background-color:rgba(215,218,224,0.085);--mute-percent:30%;--modal-opacity:0.9;--background-color:#282c34;--medium-color:#abb2bf;--text-color:#d7dae0}.th-bl,.th-fb{--action-background-color-focus:#426fcc;--action-background-color-focus-tr:rgba(66,111,204,0.1);--error-background-color-focus:#9c332a;--error-background-color-focus-tr:rgba(156,51,42,0.1);--action-background-color-active:#3e68bf;--action-background-color-active-tr:rgba(62,104,191,0.15);--error-background-color-active:#923027;--error-background-color-active-tr:rgba(146,48,39,0.15);--light-border-percent:20%;--color-lightness-shift:0;--action-color:#528bff;--error-color:#c34034}.th-bl{--muted-color:#8f929a;--muted-color-border:#babdc3;--text-selection-bg-color:rgba(82,139,255,0.3);--text-selection-bg-color-error:rgba(195,64,52,0.8);--text-semi-muted-color:#282c35;--text-contrast-action-color:#e5e8ec;--text-contrast-error-color:#e5e8ec;--base-border-color:#8f929a;--accent-border-color:#757881;--light-border-color:#c2c5cb;--form-box-border-color-focus:#456fc2;--form-box-shadow-color-focus:rgba(69,111,194,0.7);--form-box-shadow-color-hover:rgba(69,111,194,0.5);--form-box-shadow-color-focus-error:rgba(175,57,47,0.7);--secondary-background-color:#d4d7dc;--intermediate-background-color:#e0e3e7;--intermediate-pressed-background-color:#e1e4e8;--disabled-background-color:#dadce0;--unselected-background-color:#d5d8dd;--unselected-background-color-hover:#cdd0d5;--modal-background-color:rgba(229,232,236,0.9);--modal-background-color-tr:rgba(229,232,236,0);--selected-item-color:#6899fc;--selected-on-secondary-item-color:#b1b4bb;--selectable-on-secondary-item-color:#cdd0d5;--clickable-on-secondary-color:#636671;--titlebar-button-background-color:rgba(40,44,52,0.085);--mute-percent:50%;--modal-opacity:0.9;--background-color:#e5e8ec;--medium-color:#383b48;--text-color:#282c34}.th-te{--muted-color:#464646;--muted-color-border:#343434;--text-selection-bg-color:rgba(19,164,83,0.3);--text-selection-bg-color-error:rgba(195,64,52,0.8);--text-semi-muted-color:#edeeed;--text-contrast-action-color:#eee;--text-contrast-error-color:#eee;--base-border-color:#5e5e5e;--accent-border-color:#6f6f6f;--light-border-color:#3a3a3a;--form-box-border-color-focus:#55ba82;--form-box-shadow-color-focus:rgba(85,186,130,0.7);--form-box-shadow-color-hover:rgba(85,186,130,0.5);--form-box-shadow-color-focus-error:rgba(175,57,47,0.7);--secondary-background-color:#2e2e2e;--intermediate-background-color:#262626;--intermediate-pressed-background-color:#252525;--disabled-background-color:#202020;--unselected-background-color:#2d2d2d;--unselected-background-color-hover:#333;--modal-background-color:rgba(34,34,34,0.9);--modal-background-color-tr:rgba(34,34,34,0);--selected-item-color:#15914c;--selected-on-secondary-item-color:#464646;--selectable-on-secondary-item-color:#333;--clickable-on-secondary-color:#7b7b7b;--titlebar-button-background-color:hsla(0,0%,93.3%,0.085);--mute-percent:30%;--modal-opacity:0.9;--background-color:#222;--medium-color:#999;--text-color:#eee}.th-lt,.th-te{--action-background-color-focus:#0f8342;--action-background-color-focus-tr:rgba(15,131,66,0.1);--error-background-color-focus:#9c332a;--error-background-color-focus-tr:rgba(156,51,42,0.1);--action-background-color-active:#0e7b3e;--action-background-color-active-tr:rgba(14,123,62,0.15);--error-background-color-active:#923027;--error-background-color-active-tr:rgba(146,48,39,0.15);--light-border-percent:20%;--color-lightness-shift:0;--action-color:#13a453;--error-color:#c34034}.th-lt{--muted-color:#999;--muted-color-border:#c4c4c4;--text-selection-bg-color:rgba(19,164,83,0.3);--text-selection-bg-color-error:rgba(195,64,52,0.8);--text-semi-muted-color:#222322;--text-contrast-action-color:#eee;--text-contrast-error-color:#eee;--base-border-color:#999;--accent-border-color:grey;--light-border-color:#ccc;--form-box-border-color-focus:#187d44;--form-box-shadow-color-focus:rgba(24,125,68,0.7);--form-box-shadow-color-hover:rgba(24,125,68,0.5);--form-box-shadow-color-focus-error:rgba(175,57,47,0.7);--secondary-background-color:#ddd;--intermediate-background-color:#e9e9e9;--intermediate-pressed-background-color:#eaeaea;--disabled-background-color:#e2e2e2;--unselected-background-color:#dfdfdf;--unselected-background-color-hover:#d6d6d6;--modal-background-color:hsla(0,0%,93.3%,0.9);--modal-background-color-tr:hsla(0,0%,93.3%,0);--selected-item-color:#34af6a;--selected-on-secondary-item-color:#bbb;--selectable-on-secondary-item-color:#d6d6d6;--clickable-on-secondary-color:#6f6f6f;--titlebar-button-background-color:rgba(34,34,34,0.085);--mute-percent:50%;--modal-opacity:0.9;--background-color:#eee;--medium-color:#444;--text-color:#222}.th-hc{--muted-color:#676767;--muted-color-border:#b1b1b1;--text-selection-bg-color:rgba(30,93,184,0.3);--text-selection-bg-color-error:rgba(231,72,89,0.8);--text-semi-muted-color:#050506;--text-contrast-action-color:#fafafa;--text-contrast-error-color:#fafafa;--accent-border-color:#5b5b5b;--form-box-border-color-focus:#174382;--form-box-shadow-color-focus:rgba(23,67,130,0.7);--form-box-shadow-color-hover:rgba(23,67,130,0.5);--form-box-shadow-color-focus-error:rgba(228,49,69,0.7);--secondary-background-color:#e2e2e2;--intermediate-background-color:#f3f3f3;--intermediate-pressed-background-color:#f4f4f4;--disabled-background-color:#eee;--unselected-background-color:#e4e4e4;--unselected-background-color-hover:#d8d8d8;--modal-background-color:#fafafa;--modal-background-color-tr:hsla(0,0%,98%,0);--selected-item-color:#3f75c2;--selected-on-secondary-item-color:#b1b1b1;--selectable-on-secondary-item-color:#d8d8d8;--clickable-on-secondary-color:#424242;--titlebar-button-background-color:rgba(5,5,5,0.085);--modal-opacity:1;--background-color:#fafafa;--medium-color:#050505;--text-color:#050505}.th-dc,.th-hc{--base-border-color:grey;--light-border-color:grey;--action-background-color-focus:#184a93;--action-background-color-focus-tr:rgba(24,74,147,0.1);--error-background-color-focus:#b93a47;--error-background-color-focus-tr:rgba(185,58,71,0.1);--action-background-color-active:#17468a;--action-background-color-active-tr:rgba(23,70,138,0.15);--error-background-color-active:#ad3643;--error-background-color-active-tr:rgba(173,54,67,0.15);--mute-percent:60%;--light-border-percent:50%;--color-lightness-shift:0;--white-color:#d8e5f1;--black-color:#111;--red-color:#d04745;--orange-color:#e9873a;--yellow-color:#f7c84e;--green-color:#79b656;--blue-color:#2f7cf7;--violet-color:#e55d9c;--action-color:#1e5db8;--error-color:#e74859}.th-dc{--muted-color:#989898;--muted-color-border:#4f4f4f;--text-selection-bg-color:rgba(30,93,184,0.3);--text-selection-bg-color-error:rgba(231,72,89,0.8);--text-semi-muted-color:#f9f9fa;--text-contrast-action-color:#fafafa;--text-contrast-error-color:#fafafa;--accent-border-color:#a4a4a4;--form-box-border-color-focus:#608ccc;--form-box-shadow-color-focus:rgba(96,140,204,0.7);--form-box-shadow-color-hover:rgba(96,140,204,0.5);--form-box-shadow-color-focus-error:rgba(228,49,69,0.7);--secondary-background-color:#1e1e1e;--intermediate-background-color:#0c0c0c;--intermediate-pressed-background-color:#0b0b0b;--disabled-background-color:#050505;--unselected-background-color:#1b1b1b;--unselected-background-color-hover:#272727;--modal-background-color:#050505;--modal-background-color-tr:rgba(5,5,5,0);--selected-item-color:#1a509d;--selected-on-secondary-item-color:#4f4f4f;--selectable-on-secondary-item-color:#272727;--clickable-on-secondary-color:#bdbdbd;--titlebar-button-background-color:hsla(0,0%,98%,0.085);--modal-opacity:1;--background-color:#050505;--medium-color:#fafafa;--text-color:#fafafa}.th-sd{--muted-color:#587276;--muted-color-border:#2c4e56;--text-selection-bg-color:rgba(133,153,0,0.3);--text-selection-bg-color-error:rgba(220,50,47,0.8);--text-semi-muted-color:#839495;--text-contrast-action-color:#002b36;--text-contrast-error-color:#002b36;--base-border-color:#4a666c;--accent-border-color:#60787c;--light-border-color:#1d434b;--form-box-border-color-focus:#84982d;--form-box-shadow-color-focus:rgba(132,152,45,0.7);--form-box-shadow-color-hover:rgba(132,152,45,0.5);--form-box-shadow-color-focus-error:rgba(207,38,35,0.7);--secondary-background-color:#0f3741;--intermediate-background-color:#042f39;--intermediate-pressed-background-color:#042e39;--disabled-background-color:#002933;--unselected-background-color:#0d3640;--unselected-background-color-hover:#153c45;--modal-background-color:rgba(0,43,54,0.9);--modal-background-color-tr:rgba(0,43,54,0);--selected-item-color:#718908;--selected-on-secondary-item-color:#2c4e56;--selectable-on-secondary-item-color:#153c45;--clickable-on-secondary-color:#6e8486;--titlebar-button-background-color:rgba(131,148,150,0.085);--modal-opacity:0.9;--color-lightness-shift:50%;--white-color:#d8e5f1;--black-color:#111;--red-color:#d04745;--orange-color:#e9873a;--yellow-color:#f7c84e;--green-color:#79b656;--blue-color:#2f7cf7;--violet-color:#e55d9c;--background-color:#002b36;--medium-color:#93a1a1;--text-color:#839496}.th-sd,.th-sl{--action-background-color-focus:#6a7a00;--action-background-color-focus-tr:rgba(106,122,0,0.1);--error-background-color-focus:#b02826;--error-background-color-focus-tr:rgba(176,40,38,0.1);--action-background-color-active:#647300;--action-background-color-active-tr:rgba(100,115,0,0.15);--error-background-color-active:#a52623;--error-background-color-active-tr:rgba(165,38,35,0.15);--mute-percent:60%;--light-border-percent:20%;--action-color:#859900;--error-color:#dc322f}.th-sl{--muted-color:#9aa4a1;--muted-color-border:#cccdc2;--text-selection-bg-color:rgba(133,153,0,0.3);--text-selection-bg-color-error:rgba(220,50,47,0.8);--text-semi-muted-color:#657b82;--text-contrast-action-color:#fdf6e3;--text-contrast-error-color:#fdf6e3;--base-border-color:#abb2ac;--accent-border-color:#929e9c;--light-border-color:#dcdbcd;--form-box-border-color-focus:#7b9027;--form-box-shadow-color-focus:rgba(123,144,39,0.7);--form-box-shadow-color-hover:rgba(123,144,39,0.5);--form-box-shadow-color-focus-error:rgba(207,38,35,0.7);--secondary-background-color:#ede8d8;--intermediate-background-color:#f8f2e0;--intermediate-pressed-background-color:#f9f2e0;--disabled-background-color:#f0ead8;--unselected-background-color:#eeead9;--unselected-background-color-hover:#e6e3d4;--modal-background-color:rgba(253,246,227,0.9);--modal-background-color-tr:rgba(253,246,227,0);--selected-item-color:#97a722;--selected-on-secondary-item-color:#cccdc2;--selectable-on-secondary-item-color:#e6e3d4;--clickable-on-secondary-color:#819091;--titlebar-button-background-color:rgba(101,123,131,0.085);--modal-opacity:0.9;--color-lightness-shift:0;--background-color:#fdf6e3;--medium-color:#586e75;--text-color:#657b83}.back-button{cursor:pointer;position:absolute;top:0;right:1em;padding:1em 0 1px;z-index:1}.back-button__post{margin-left:.375em;margin-right:.75em;position:relative;top:.2em}.auto-type-hint{-webkit-app-region:no-drag;color:var(--text-color);background:var(--background-color);border:1px solid var(--light-border-color);box-shadow:0 .15rem .5rem .25rem var(--dropdown-box-shadow-color);position:absolute;z-index:10000;border-radius:var(--block-border-radius);padding:.5em 1em;box-sizing:border-box;overflow:hidden}.auto-type-hint__body{height:100%;overflow-y:auto}.auto-type-hint__block{margin-bottom:.5em}.auto-type-hint__block>a,.auto-type-hint__block>b{font-weight:400;display:inline-block;margin-right:1em;margin-bottom:.5em}.auto-type-hint__link-details{position:absolute;right:0;top:0;margin:.5em 1em}.drag-mask{height:100%;width:100%;top:0;left:0;-webkit-app-region:no-drag}.drag-handle__inner,.drag-mask{position:absolute}.drag-handle__inner--x{top:0;left:-2px;width:5px;height:100%}.drag-handle__inner--y{top:-2px;left:0;width:100%;height:5px}@media(max-width:620px){.drag-handle__inner{display:none}}.info-btn{cursor:pointer;color:var(--muted-color);margin-left:.375em;position:relative;top:.15em;font-size:1.1em}.info-btn:hover,.pika-single{color:var(--text-color)}.pika-single{-webkit-app-region:no-drag;border:1px solid var(--light-border-color);box-shadow:0 .15rem .5rem .25rem var(--dropdown-box-shadow-color);border-radius:var(--block-border-radius)}.pika-label,.pika-single{background:var(--background-color)}.pika-label{color:var(--muted-color)}button.pika-next,button.pika-prev{min-width:0;background:none;border:none;border-radius:2px;position:relative}button.pika-next:after,button.pika-prev:after{display:block;content:" ";position:absolute;top:8px;left:6px;left:50%;transform:translateX(-50%)}button.pika-prev:after{border-left:0 solid transparent;border-right:7px solid var(--text-color)}button.pika-next:after,button.pika-prev:after{height:0;width:0;border-bottom:7px solid transparent;border-top:7px solid transparent}button.pika-next:after{border-left:7px solid var(--text-color);border-right:0 solid transparent}.pika-table th{color:var(--medium-color)}.pika-button,button.pika-button{min-width:0;border:none;color:var(--text-color);background-color:var(--background-color);border-radius:2px;padding:8px 4px}.pika-week{color:var(--medium-color)}.is-today .pika-button{color:var(--action-color)}.is-selected .pika-button{color:var(--text-color);background:var(--action-color);box-shadow:inset 0 1px 3px var(--action-color)}.is-disabled .pika-button{color:var(--muted-color);opacity:.3}.pika-button:hover{color:var(--text-color)!important;background:var(--action-color)!important}.dropdown{position:absolute;z-index:10000;border-radius:var(--block-border-radius);background:var(--background-color);border:1px solid var(--light-border-color);box-shadow:0 .15rem .5rem .25rem var(--dropdown-box-shadow-color);padding:.375em}.dropdown__item{padding:8px 12px;cursor:pointer;white-space:nowrap;border-radius:var(--block-border-radius)}.dropdown__item--active,.dropdown__item--active:hover{cursor:default;-webkit-app-region:no-drag;background-color:var(--selected-item-color);color:var(--selected-item-text-color)}.dropdown__item--active:hover,.dropdown__item--active:hover:hover{color:var(--selected-item-text-color)}@media(min-width:621px){.dropdown__item{cursor:pointer;-webkit-app-region:no-drag}.dropdown__item.sel--active,.dropdown__item:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.dropdown__item:active{background-color:var(--intermediate-pressed-background-color)}.dropdown__item:hover{color:var(--selected-item-text-color);background-color:var(--action-color)}.dropdown__item--active,.dropdown__item--active:hover{cursor:default;-webkit-app-region:no-drag;background-color:var(--selected-item-color);color:var(--selected-item-text-color)}.dropdown__item--active:hover,.dropdown__item--active:hover:hover{color:var(--selected-item-text-color)}}.dropdown__item-icon{width:1.6em}.empty-block{display:flex;align-items:center;flex-direction:column;justify-content:center;height:100%;width:100%;position:absolute;top:0;left:0;text-align:center}.empty-block__icon{font-size:80px;margin-bottom:10px}.empty-block__text,.empty-block__title{padding:0 1em}.empty-block__lower-btns{position:absolute;bottom:calc(1.5em + 1px);left:1.5em}.hide{display:none!important}.hide-by-pos{position:absolute;top:-10000px;left:-10000px}.invisible{visibility:hidden!important}.flip3d{animation:flip3d 1s linear 0s infinite;transform-style:preserve-3d}.grayscale{filter:grayscale(1)}.input-shake{animation:shake 50s cubic-bezier(.36,.07,.19,.97) 0s}.fade-in{animation:fade-in 80ms ease-in 0s}.fade-out{opacity:0;animation:fade-out 80ms ease-out 0s}.fa.rotate-90:before,.rotate-90{transform:rotate(90deg)}.spin{animation:spin 2s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes flip3d{0%{transform:rotateY(0)}to{transform:rotateY(1turn)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-out{0%{opacity:1}to{opacity:0}}@keyframes shake{0%,1%,to{transform:translateZ(0)}.1%,.9%{transform:translate3d(-1px,0,0)}.2%,.8%{transform:translate3d(2px,0,0)}.3%,.5%,.7%{transform:translate3d(-3px,0,0)}.4%,.6%{transform:translate3d(3px,0,0)}}.icon-select__items{display:flex;align-items:flex-start;flex-direction:row;justify-content:flex-start;flex-wrap:wrap;-webkit-user-select:none;user-select:none;padding-bottom:1em}.icon-select__items--actions,.icon-select__items--custom{padding-top:1em;border-top:1px solid var(--light-border-color)}.icon-select__icon{cursor:pointer;-webkit-app-region:no-drag;text-align:center;border-radius:var(--block-border-radius);transition:color .15s ease;font-size:1.6em;width:26px;padding:.5em}.icon-select__icon.sel--active,.icon-select__icon:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.icon-select__icon:active{background-color:var(--intermediate-pressed-background-color)}.icon-select__icon>i{vertical-align:middle}.icon-select__icon.icon-select__icon--active{cursor:default;-webkit-app-region:no-drag;background-color:var(--selected-item-color);color:var(--selected-item-text-color)}.icon-select__icon.icon-select__icon--active:hover{color:var(--selected-item-text-color)}.icon-select__icon-btn{padding:5px 10px}.icon-select__icon-btn>img{width:16px;height:16px}.icon-select__icon--custom-selected>i{display:none}.icon-select__icon--progress>i:before{content:"\f075"}.icon-select__icon--download-error>i:before{content:"\f010"}.modal{position:absolute;top:0;left:0;height:100%;width:100%;background-color:var(--modal-background-color);z-index:100000;transition:background-color .15s ease}.modal.modal--hidden{background-color:var(--modal-background-color-tr)}.modal.modal--opaque{background-color:var(--background-color)}.modal__content{height:100%;width:100%;display:flex;align-items:stretch;flex-direction:column;justify-content:center;transition:all .15s ease}.modal--hidden .modal__content{transform:scale(.01);opacity:0}.modal__icon{font-size:6em;text-align:center}.modal__header{text-align:center;font-size:1.5625rem}.modal__body,.modal__header{-webkit-user-select:text;user-select:text}.modal__body{text-align:left;margin:1.5em}.modal__buttons{text-align:right}.modal__buttons>button{margin-bottom:.75em}.modal__body,.modal__buttons{align-self:center;width:40%}.modal--wide .modal__body,.modal--wide .modal__buttons{width:80%}@media(max-width:736px){.modal__body,.modal__buttons{width:90%}}.modal__check-wrap{margin-top:1.5em}.modal__pre{white-space:pre-wrap}.scroller{overflow-y:scroll;height:100%}.scroller::-webkit-scrollbar{width:0}.scroller__bar-wrapper{pointer-events:none;position:absolute;z-index:3;top:10px;bottom:10px;right:1px;width:7px}.scroller__bar{position:absolute;z-index:1;width:7px;border-radius:3px;pointer-events:auto;-webkit-app-region:no-drag}@media screen and (-moz-windows-theme){@-moz-document url-prefix(){.scroller{margin-right:0!important;padding-right:0!important}}}.tip{position:absolute;padding:.5em 1em;white-space:nowrap;z-index:10000;pointer-events:none;opacity:1;-webkit-app-region:no-drag;color:var(--text-color);background:var(--background-color);border:1px solid var(--light-border-color);box-shadow:0 .15rem .5rem .25rem var(--dropdown-box-shadow-color);border-radius:var(--block-border-radius)}@media(min-width:621px){.tip{animation:tip .5s cubic-bezier(.95,.05,.795,.035)}}.tip.tip--fast,.tip.tip--fast:after,.tip.tip--fast:before{animation-duration:.15s}.tip--hide.tip,.tip--hide.tip:after,.tip--hide.tip:before{transition:all .15s ease-out;transition-property:color,border-color,background-color,box-shadow;color:transparent;background-color:initial;border-color:transparent!important;box-shadow:none}.tip:after,.tip:before{content:" ";width:0;height:0}@media(min-width:621px){.tip:after,.tip:before{animation:tip .5s cubic-bezier(.95,.05,.795,.035)}}.tip.tip--bottom:after{position:absolute;top:-8px;left:50%;transform:translate(-50%);height:0;width:0;border-left:5px solid transparent;border-bottom:8px solid var(--background-color);border-right:5px solid transparent;border-top:0 solid transparent}.tip.tip--top:after{left:50%}.tip.tip--top-left:after,.tip.tip--top:after{position:absolute;top:100%;transform:translate(-50%);height:0;width:0;border-left:5px solid transparent;border-bottom:0 solid transparent;border-right:5px solid transparent;border-top:8px solid var(--background-color)}.tip.tip--top-left:after{left:calc(100% - 10px)}.tip.tip--left:after{left:100%;border-left:8px solid var(--background-color);border-right:0 solid transparent}.tip.tip--left:after,.tip.tip--right:after{position:absolute;top:50%;transform:translateY(-50%);height:0;width:0;border-bottom:5px solid transparent;border-top:5px solid transparent}.tip.tip--right:after{left:-8px;border-left:0 solid transparent;border-right:8px solid var(--background-color)}.tip.tip--bottom:before{position:absolute;top:-9px;left:50%;transform:translate(-50%);height:0;width:0;border-left:6px solid transparent;border-bottom:9px solid var(--light-border-color);border-right:6px solid transparent;border-top:0 solid transparent}.tip.tip--top:before{left:50%}.tip.tip--top-left:before,.tip.tip--top:before{position:absolute;top:100%;transform:translate(-50%);height:0;width:0;border-left:6px solid transparent;border-bottom:0 solid transparent;border-right:6px solid transparent;border-top:9px solid var(--light-border-color)}.tip.tip--top-left:before{left:calc(100% - 10px)}.tip.tip--left:before{left:100%;border-left:9px solid var(--light-border-color);border-right:0 solid transparent}.tip.tip--left:before,.tip.tip--right:before{position:absolute;top:50%;transform:translateY(-50%);height:0;width:0;border-bottom:6px solid transparent;border-top:6px solid transparent}.tip.tip--right:before{left:-9px;border-left:0 solid transparent;border-right:9px solid var(--light-border-color)}@keyframes tip{0%{opacity:0}}a{color:var(--text-color);text-decoration:none;display:inline-block;transition:color .15s ease;cursor:pointer;height:1.2em;border-bottom:1px dotted}a.icon-link,a.no-border{border-bottom:none}a.icon-link{cursor:pointer;-webkit-app-region:no-drag;display:inline-block;text-align:center;font-size:1.1em;width:1.8em;height:1.6em;border-radius:var(--button-border-radius)}a.icon-link.sel--active,a.icon-link:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}a.icon-link:active{background-color:var(--intermediate-pressed-background-color)}a.icon-link>i{position:relative;top:.1em}a.icon-link:active,a.icon-link:focus,a.icon-link:hover{outline:none;border-bottom:none}a:active,a:focus,a:hover{outline:none;border-bottom:1px solid}.app{height:100%;width:100%;display:flex;align-items:stretch;flex-direction:column;justify-content:flex-start}.titlebar-hidden-inset .app{-webkit-app-region:drag}.app__body{flex:1;display:flex;align-items:stretch;flex-direction:row;justify-content:flex-start;overflow:hidden}.app__titlebar-drag{position:absolute;width:100%;height:30px;top:0;right:0;-webkit-app-region:drag;pointer-events:none}.app__menu{flex:0 0 auto;display:flex;width:15em;background-color:var(--secondary-background-color);transition:padding-top .15s}@media(max-width:620px){.app__menu:not(.menu-visible){display:none}}.titlebar-hidden .app__menu{padding-top:24px}.titlebar-hidden-inset .app__menu{padding-top:40px}.titlebar-custom.titlebar-hidden-inset .app__menu,.titlebar-custom.titlebar-hidden .app__menu{padding-top:32px}.fullscreen .app .app__menu{padding-top:0}.app__list-wrap{flex:1;display:flex;align-items:stretch;flex-direction:row;justify-content:flex-start;overflow:hidden}.app__list-wrap.app__list-wrap--table{flex-direction:column}.app__list-drag,.app__menu-drag{position:relative;-webkit-app-region:no-drag;transition:background-color .15s ease-out;background:var(--light-border-color);flex:0 0 auto;width:1px;cursor:col-resize}@media(min-width:621px){.app__list-drag.dragging,.app__list-drag:hover,.app__menu-drag.dragging,.app__menu-drag:hover{transition:background-color .3s ease-in;background:var(--accent-border-color)}}@media(max-width:620px){.app__list-drag,.app__menu-drag{display:none}}.app__list-wrap--table .app__list-drag{width:auto;height:1px;cursor:row-resize}.app__list-wrap--table .app__list-drag .drag-handle__inner{top:-2px;left:0;width:100%;height:5px}.menu-visible+.app__menu-drag{display:block}.app__list{flex:0 0 25em;display:flex;align-items:stretch;flex-direction:column;overflow-y:auto}.titlebar-hidden .app__list{padding-top:8px}@media(max-width:620px){.app__list{flex:1 1}.app--details-visible .app__list{display:none}}.app__details{flex:1;display:flex;overflow:hidden;padding:1.5em;position:relative}@media(max-width:620px){.app__details{width:100vw;padding:.5em 1em;display:none}.app--details-visible .app__details{display:flex}}.titlebar-custom .app__details{margin-top:32px}.app__panel{flex:1;display:flex;overflow:hidden;position:relative}@media(max-width:620px){.app__panel{padding:.5em 1em}}.app__footer{flex:0 0 auto;border-top:1px solid var(--light-border-color);background-color:var(--secondary-background-color)}.app__beta{padding:.5em 1em;text-align:center;background-color:var(--error-color);color:var(--text-contrast-error-color)}.app__beta>.fa{vertical-align:bottom}.details{display:flex;align-items:stretch;flex-direction:column;justify-content:flex-start;-webkit-user-select:text;user-select:text;width:100%}.details__back-button{display:none}@media(max-width:620px){.details__back-button{display:block;padding-bottom:.5em;cursor:pointer;line-height:3em;height:3em;font-size:1.2em}.details__back-button>i{margin-right:.7em;font-size:1.2em;vertical-align:middle;position:relative;top:-.15em}}.details__header{display:flex;align-items:flex-start;padding-bottom:.75em;overflow:visible;min-height:40px}.details__header-title{-webkit-user-select:text;user-select:text;flex:1;align-self:flex-start;cursor:text;margin:0 6px;padding:3px 6px 1px;overflow:hidden;text-overflow:ellipsis;border-radius:var(--input-border-radius);border:1px solid transparent;height:42px;line-height:40px;white-space:nowrap}.details__header-title:hover{transition:border-color .15s ease;border:1px solid var(--light-border-color)}@media(max-width:620px){.details__header-title:hover{border-color:transparent}}.details__header input.details__header-title-input{height:48px;line-height:40px;-webkit-user-select:text;user-select:text;flex:1;margin:0 6px;padding:0 6px;font-size:2.44140625rem;font-weight:700;min-width:0}@media(max-width:620px){.details__header input.details__header-title-input{width:100%}}.details__header-color,.details__header-icon{-webkit-user-select:none;user-select:none;font-size:2.44140625rem;padding-top:.1em}.details__header-icon{cursor:pointer;-webkit-app-region:no-drag;display:inline;border-radius:var(--block-border-radius);width:1.8em;height:1.5em;text-align:center}.details__header-icon.sel--active,.details__header-icon:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.details__header-icon:active{background-color:var(--intermediate-pressed-background-color)}.details__header-icon-img{vertical-align:middle}.details__colors-popup{-webkit-user-select:none;user-select:none;display:none;position:absolute;z-index:10000;border-radius:2px;background:var(--background-color);box-shadow:0 0 3px var(--background-color);left:.2em;font-size:2.44140625rem}@media(min-width:621px){.details__colors-popup:hover,.details__header-color:hover .details__colors-popup{display:block}}.details__colors-popup-item{padding:0 12px;cursor:pointer;display:block;position:relative}.details__colors-popup-item--active:before{content:"\f004"}.details__colors-popup-item:hover:after{content:"\f004";opacity:.3;position:absolute;left:.4em}.details__body{flex:1;display:flex;align-items:stretch;flex-direction:column;justify-content:flex-start;flex-wrap:wrap;position:relative;overflow:hidden}.details__body .scroller__bar-wrapper>.scroller__bar{background-color:initial;transition:background-color .15s ease}.details__body:hover .scroller__bar-wrapper>.scroller__bar{transition:background-color .15s ease-out;background-color:hsla(0,0%,53.3%,.2)}.details__body:hover .scroller__bar-wrapper>.scroller__bar:hover{transition:background-color .3s ease-in;background-color:hsla(0,0%,53.3%,.8)}.details--drag .details__body{display:none}.details__body>.scroller{flex:1;display:flex;align-items:stretch;align-content:flex-start;flex-direction:row;justify-content:flex-start;flex-wrap:wrap;overflow-x:hidden;padding-top:3px}@media screen and (-webkit-min-device-pixel-ratio:0){.details__body>.scroller{width:100%!important}}.details__body-fields{flex:1 0 50%;min-width:0;margin-right:1em}.details__body-aside{flex:0 0 auto;display:flex;align-items:stretch;flex-direction:column;justify-content:flex-start}@media(max-width:620px){.details__body-aside{width:100%}}.details__body-after{flex:100% 1 0}.details__field{display:flex;align-items:stretch;flex-direction:row;justify-content:flex-start;margin-bottom:.5em;position:relative}.details__field-label{color:var(--muted-color);width:7em;text-align:right;cursor:pointer;padding-right:1em;border:1px solid transparent;line-height:18px;position:relative}.details__field-label:hover{color:var(--medium-color)}.details__field--can-edit-title .details__field-label{cursor:text}.details__field-label>input{margin:0 0 0 2px;padding:0 1em;line-height:18px;height:18px;width:100%;color:var(--text-color)}.chrome .details__field-label>input{padding-bottom:1px}.details__field-value{flex:1;-webkit-user-select:text;user-select:text;align-self:flex-start;position:relative;cursor:text;padding:0 1em;border:1px solid transparent;min-height:18px;box-sizing:border-box;line-height:18px;overflow:hidden;text-overflow:ellipsis;margin-right:2em}.details__field-value-add-label{color:transparent}.details__field--editable .details__field-value{border-radius:var(--input-border-radius)}@media(min-width:621px){.details__field--editable .details__field-value:hover{transition:border-color .15s ease;border:1px solid;border-color:var(--light-border-color);box-shadow:0 0 3px rgba(0,0,0,.06)}.details__field--editable .details__field-value:hover .details__field-value-add-label{color:var(--muted-color);transition:color .15s ease}}.details__field--protect .details__field-value{-webkit-user-select:none;user-select:none}.details__field--multiline .details__field-value{width:0;white-space:pre-wrap}.details__field--url .details__field-value{height:20px}.details__field--edit.details__field--editable .details__field-value,.details__field--edit.details__field--editable:hover .details__field-value,.details__field--edit .details__field-value{border:0 solid transparent;padding:0;overflow:visible}.details__field-value>input,.details__field-value>textarea{margin:0;padding:0 1em;line-height:18px;width:100%;height:20px;transition:background-color .15s ease-out,border-color .15s ease-out}.details__field--protected .details__field-value>input,.details__field--protected .details__field-value>textarea{font-family:SFMono-Regular,Monaco,Consolas,Lucida Console,monospace}.details__field--can-gen .details__field-value>input,.details__field--can-gen .details__field-value>textarea{padding-right:2.4em}.details__field--edit[active-mobile-action] .details__field-value>input,.details__field--edit[active-mobile-action] .details__field-value>textarea{transition:background-color .3s ease-in,border-color .3s ease-in}.details__field--edit[active-mobile-action=apply] .details__field-value>input,.details__field--edit[active-mobile-action=apply] .details__field-value>textarea{background:var(--action-color)}.details__field--edit[active-mobile-action=cancel] .details__field-value>input,.details__field--edit[active-mobile-action=cancel] .details__field-value>textarea{background:var(--error-color);border-color:var(--error-color)}@media(max-width:620px){.details__field-value>input,.details__field-value>textarea{border-color:transparent!important}}.chrome .details__field-value>input{padding-bottom:1px}.details__field-value>textarea{display:block;resize:none;line-height:1.5em;overflow:hidden}.details__field-value>label{font-weight:400;-webkit-user-select:none;user-select:none}.details__field-value>a{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.details__body-aside .details__field-value{color:var(--muted-color);width:13em;padding-right:0;margin-right:0;flex:0 0 auto}.details__body-aside .details__field-value a{color:var(--muted-color)}.details__field-value-btn{position:absolute;top:-.2em;right:0;color:var(--muted-color);cursor:pointer}.details__field-value-btn:hover{color:var(--medium-color)}.details__field-value-btn:before{position:absolute;top:0;right:0;font-family:Font Awesome\ 5 Free;font-weight:400;font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased;display:inline-block;line-height:1.5;cursor:pointer;padding:.3em 1em}.details__field-value-btn-gen:before{content:"\f008"}.details__field-value-btn-protect:before{content:"\f009"}.details__field--protected .details__field-value-btn-protect:before{content:"\f00a"}@media(max-width:620px){.details__field-value-btn-apply,.details__field-value-btn-cancel{height:100%;width:50%;position:absolute;top:0;-webkit-user-select:none;user-select:none;background:var(--background-color)}.details__field-value-btn-apply:before,.details__field-value-btn-cancel:before{padding:.2em 1.5em}.details__field-value-btn-apply{right:0}.details__field-value-btn-apply:before{content:"\f00b"}.details__field-value-btn-cancel{left:0}.details__field-value-btn-cancel:before{content:"\f00c"}}.details__field-value--select{border-width:0;padding:0}.details__field--editable:hover .details__field-value--select{border-width:0}.details__field-value--revealed{font-family:SFMono-Regular,Monaco,Consolas,Lucida Console,monospace}.details__field-value>select{margin:0;width:100%;padding:0 1em}.details__field-value .markdown{white-space:normal}.details__field-value .markdown h6{font-size:1rem}.details__field-value .markdown h5{font-size:1.05rem}.details__field-value .markdown h4{font-size:1.1025rem}.details__field-value .markdown h3{font-size:1.157625rem}.details__field-value .markdown h2{font-size:1.21550625rem}.details__field-value .markdown h1{font-size:1.5625rem}.details__field-value .markdown ol,.details__field-value .markdown ul{margin-bottom:1em}.details__field-value .markdown ul{list-style-type:disc}.details__field-value .markdown ol{list-style-type:decimal}.details__field-value .markdown li{margin-left:2em}.details__field--options .details__field-value{margin-right:0}.details__field--no-select .details__field-label,.details__field--no-select .details__field-value{-webkit-user-select:none;user-select:none}@media(max-width:620px){.details__field{border-bottom:1px solid var(--light-border-color);padding-bottom:.5em}}.details__field-options{color:var(--muted-color);cursor:pointer;opacity:0;transition:opacity .15s ease-out,color .15s ease;align-self:flex-start;width:2em;text-align:center;padding-top:.1em}.details__field:hover .details__field-options{opacity:1;transition:opacity .3s ease-in}.details__field-options:hover{color:var(--medium-color)}.details__field-mobile-actions{position:absolute;background:var(--background-color);z-index:10000}.details__field-mobile-action{padding:1em 1.2em;cursor:pointer}.details__attachments{flex:1;display:flex;align-items:stretch;flex-direction:row;justify-content:flex-end;flex-wrap:wrap;-webkit-user-select:none;user-select:none;overflow:hidden;white-space:nowrap}.details--drag .details__attachments{display:none}.details__attachment{-webkit-user-select:none;user-select:none;cursor:pointer;-webkit-app-region:no-drag;padding:1em 1.2em;text-align:center;overflow:hidden;text-overflow:ellipsis;border-radius:var(--block-border-radius);background-color:var(--intermediate-background-color);transition:color .15s ease;align-self:flex-end;flex:0 1 auto;margin-right:.75em;margin-top:.75em}.details__attachment>i{margin-right:.4em;line-height:inherit;vertical-align:bottom}.details__attachment:hover{background-color:var(--intermediate-background-color);color:var(--medium-color);transform:background-color .15s ease}.details__attachment:active{background-color:var(--intermediate-pressed-background-color);color:var(--text-color)}.details__attachment--active,.details__attachment--active:hover{color:var(--selected-item-text-color);background-color:var(--selected-item-color)}.details__attachment-add{cursor:pointer;-webkit-app-region:no-drag;padding:1em 1.2em;border-radius:var(--block-border-radius);transition:color .15s ease;-webkit-user-select:none;user-select:none;align-self:flex-end;flex:0 0 auto;color:var(--muted-color);margin-right:.75em;text-align:center;overflow:hidden}.details__attachment-add.sel--active,.details__attachment-add:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.details__attachment-add:active{background-color:var(--intermediate-pressed-background-color)}.details__attachment-add>i{vertical-align:middle}.details__attachment-add:hover{color:var(--medium-color)}.details__attachment-add-title{display:none;transition:color .15s ease-out;margin-right:1em;color:transparent}.details__attachment-add:hover .details__attachment-add-title{display:inline;transition:color .3s ease-in;color:var(--muted-color)}.details__attachment-preview{margin-right:1em;width:100%}.details__attachment-preview-data>image{width:100%}.details__attachment-preview-data>pre{white-space:pre-wrap}.details__attachment-preview-download-text{-webkit-user-select:none;user-select:none;position:absolute;bottom:.5em;right:1em;opacity:.15;display:none}@media(min-width:621px){.details__attachment-preview-download-text{display:block}}.details__attachment-preview-icon{display:none}.details__attachment-preview--empty{display:flex;flex-direction:column;flex:1 0 auto;justify-content:flex-start;align-self:flex-start;align-items:center;text-align:center}.details__attachment-preview--empty .details__attachment-preview-icon{display:block;font-size:10em}.details__attachment-preview--empty .details__attachment-preview-download-text{position:static;margin-top:2em;opacity:1}.details__attachment-preview--empty .details__attachment-preview-buttons{margin-top:2em}.details__attachment-preview--empty .details__attachment-preview-data{padding-top:2em}.details__issues{margin-top:.5em;color:var(--text-contrast-error-color);background-color:var(--error-color);border-radius:var(--block-border-radius);display:flex;align-items:stretch;flex-direction:row;justify-content:flex-start}.details__issues-body{padding:1em 0;flex-grow:1}.details__issues-body>a{color:var(--text-contrast-error-color)}.details__issues-icon{padding:1em 1.2em;width:1em}.details__issues-icon-spin{display:none}.details__issues-icon--loading .details__issues-icon-spin{display:inline-block}.details__issues-icon--loading .details__issues-icon-warning{display:none}.details__issues-close-btn{padding:1em 1.2em;cursor:pointer;align-self:flex-start;opacity:.8;transition:opacity .15s ease}.details__issues-close-btn:hover{opacity:1}.details__buttons{display:flex;align-items:stretch;flex-direction:row;flex-shrink:0;justify-content:flex-start;margin-top:.5em}.details--drag .details__buttons{display:none}.details__buttons-trash,.details__buttons-trash-del{cursor:pointer;-webkit-app-region:no-drag;padding:1em 1.2em;text-align:center;border-radius:var(--block-border-radius);transition:color .15s ease;color:var(--muted-color);align-self:flex-end;margin-right:10px}.details__buttons-trash-del.sel--active,.details__buttons-trash-del:hover,.details__buttons-trash.sel--active,.details__buttons-trash:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.details__buttons-trash-del:active,.details__buttons-trash:active{background-color:var(--intermediate-pressed-background-color)}.details__buttons-trash-del>i,.details__buttons-trash>i{vertical-align:middle}.details__buttons-trash-del:hover,.details__buttons-trash:hover{color:var(--error-color)}.details__buttons-trash-del{color:var(--muted-color)}.details__buttons button~button{margin-left:.75em}.details__history{flex:1 0 auto;flex-direction:column;max-width:100%}.details__history,.details__history-top{display:flex;align-items:stretch;justify-content:flex-start}.details__history-top{flex:0 0 auto;flex-direction:row;padding-right:1em;margin-right:20px}.details__history-desc{-webkit-user-select:none;user-select:none}.details__history-timeline{flex:1 0 auto;position:relative;height:44px;margin-left:5px}.details__history-timeline-axis{width:100%;position:absolute;top:9px;border-bottom:1px solid var(--light-border-color)}.details__history-timeline-item{position:absolute;top:0;cursor:pointer}.details__history-timeline-item:hover{color:var(--text-semi-muted-color)}.details__history-timeline-item--active,.details__history-timeline-item--active:hover{z-index:10000;cursor:default;color:var(--action-color)}.details__history-timeline-label{position:absolute;top:16px;white-space:nowrap;transform:translateX(-50%);color:var(--muted-color)}.details__history-arrow-next,.details__history-arrow-prev{transform:scaleX(2);transform-origin:left top;cursor:pointer;position:absolute;top:30px;font-size:14px}.details__history-arrow-next:hover,.details__history-arrow-prev:hover{color:var(--text-semi-muted-color)}.details__history-arrow-prev{left:-5px}.details__history-arrow-next{right:5px}.details__history-close{margin-left:20px}.details__history-body{flex:1 1 auto}.details__history-buttons{-webkit-user-select:none;user-select:none;align-self:flex-end;margin-bottom:.5em;padding-right:1em;margin-right:20px}.details__dropzone{display:none}.details--drag .details__dropzone{display:flex;flex-direction:column;flex:1 0 auto;justify-content:center;align-self:center;align-items:center;text-align:center}.details__dropzone-icon{font-size:10em}.details__dropzone-header{margin-top:1em}.details__field-autocomplete{position:absolute;overflow:hidden;-webkit-app-region:no-drag;color:var(--text-color);background:var(--background-color);border:1px solid var(--light-border-color);box-shadow:0 .15rem .5rem .25rem var(--dropdown-box-shadow-color);border-radius:var(--block-border-radius)}.details__field-autocomplete-item{padding:.5em 1em;display:inline-block;word-break:break-all;cursor:pointer;-webkit-app-region:no-drag}.details__field-autocomplete-item.sel--active,.details__field-autocomplete-item:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.details__field-autocomplete-item:active{background-color:var(--intermediate-pressed-background-color)}.details__field-autocomplete-item--selected{background-color:var(--secondary-background-color)}.details__subview-close{align-self:flex-end;float:right;cursor:pointer;-webkit-user-select:none;user-select:none}.details__subview-close-post{margin-left:.375em;margin-right:.75em;position:relative;top:.2em}.details__subview-close-post,.details__subview-close-pre{display:none}@media(max-width:620px){.details__subview-close{line-height:3em;height:3em;padding:.5em 1em;font-size:1.2em}.details__subview-close>i{margin-right:.7em;font-size:1.2em;vertical-align:middle;position:relative;top:-.15em}.details__subview-close-pre{display:inline}}@media(min-width:621px){.details__subview-close-post{display:inline}}.extension-connect__files{display:flex;flex-wrap:wrap}.extension-connect__file{margin:.5em 1em}.footer{display:flex;align-items:stretch;flex-direction:row;justify-content:flex-start}@media(max-width:620px){.footer{background:var(--intermediate-background-color)}}.footer__db{flex:0 0 auto;cursor:pointer;-webkit-app-region:no-drag;position:relative;padding:1em 1.3em 1em 1.2em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.footer__db.sel--active,.footer__db:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.footer__db:active{background-color:var(--intermediate-pressed-background-color)}.footer__db.sel--active,.footer__db:hover{background-color:var(--selectable-on-secondary-item-color)}.footer__db.footer__db--dimmed{color:var(--muted-color)}.footer__db.footer__db--dimmed:hover{color:var(--medium-color)}.footer__db:first-of-type{padding-left:1.5em}.footer__db--expanded{flex:1}@media(max-width:620px){.footer__db--expanded{flex:0 0 auto}.footer__db--expanded>.footer__db-text{display:none}}.footer__db-sign{font-size:6px;vertical-align:top;margin-left:1em;position:absolute;right:1em;top:1em;color:var(--action-color)}.footer__db-sign--error{color:var(--error-color)}.footer__db-open-title{margin-left:.3em}@media(max-width:620px){.footer__db-item{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}.footer__db-item>.fa{display:none}}.footer__btn{flex:0 0 auto;cursor:pointer;-webkit-app-region:no-drag;padding:.5em 1em;font-size:1.4em;text-align:center;width:1em}.footer__btn.sel--active,.footer__btn:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.footer__btn:active{background-color:var(--intermediate-pressed-background-color)}.footer__btn.sel--active,.footer__btn:hover{background-color:var(--selectable-on-secondary-item-color)}.standalone .footer__btn{padding-top:.5em;padding-bottom:1.2em}.footer__btn:last-of-type{padding-right:1.5em}.footer__update-icon{color:var(--action-color);animation:shake 50s cubic-bezier(.36,.07,.19,.97) 0s infinite}.grp{flex:1;display:flex;align-items:stretch;flex-direction:column;justify-content:flex-start;width:100%;-webkit-user-select:none;user-select:none;overflow:hidden;position:relative}.grp .scroller__bar-wrapper>.scroller__bar{background-color:initial;transition:background-color .15s ease}.grp:hover .scroller__bar-wrapper>.scroller__bar{transition:background-color .15s ease-out;background-color:hsla(0,0%,53.3%,.2)}.grp:hover .scroller__bar-wrapper>.scroller__bar:hover{transition:background-color .3s ease-in;background-color:hsla(0,0%,53.3%,.8)}.titlebar-custom .grp{margin-top:32px}.grp>.scroller{flex:1;overflow-x:hidden}.grp__buttons,.grp__content{padding:1em 1.2em}.grp__icon{display:block;font-size:2.44140625rem;padding:5px 10px;align-self:flex-start;cursor:pointer;-webkit-app-region:no-drag}.grp__icon.sel--active,.grp__icon:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.grp__icon:active{background-color:var(--intermediate-pressed-background-color)}.grp__icon--image{width:28px;height:28px}.grp__icon-wrap{display:flex}.grp__buttons{display:flex;flex-direction:row;margin-top:.5em}.grp__buttons-trash{cursor:pointer;-webkit-app-region:no-drag;padding:1em 1.2em;text-align:center;border-radius:var(--block-border-radius);transition:color .15s ease;color:var(--muted-color)}.grp__buttons-trash.sel--active,.grp__buttons-trash:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.grp__buttons-trash:active{background-color:var(--intermediate-pressed-background-color)}.grp__buttons-trash>i{vertical-align:middle}.grp__buttons-trash:hover{color:var(--error-color)}.tag{flex:1;display:flex;align-items:stretch;flex-direction:column;justify-content:flex-start;width:100%;-webkit-user-select:none;user-select:none;padding:1em 1.2em}.titlebar-custom .tag{margin-top:32px}.tag__space{flex:1}.tag__buttons{display:flex;flex-direction:row;margin-top:.5em}.tag__buttons-trash{cursor:pointer;-webkit-app-region:no-drag;padding:1em 1.2em;text-align:center;border-radius:var(--block-border-radius);transition:color .15s ease;color:var(--muted-color)}.tag__buttons-trash.sel--active,.tag__buttons-trash:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.tag__buttons-trash:active{background-color:var(--intermediate-pressed-background-color)}.tag__buttons-trash>i{vertical-align:middle}.tag__buttons-trash:hover{color:var(--error-color)}.gen{position:absolute;-webkit-app-region:no-drag;color:var(--text-color);background:var(--background-color);border:1px solid var(--light-border-color);box-shadow:0 .15rem .5rem .25rem var(--dropdown-box-shadow-color);border-radius:var(--block-border-radius);padding:1.5em;width:11em}.gen__top-btn{float:right;cursor:pointer;position:relative;color:var(--muted-color)}.gen__top-btn~.gen__top-btn{margin-right:.5em}.gen__top-btn:hover{color:var(--text-color)}.gen__sel-tpl{width:100%;height:2em;margin-top:.5em}.gen__check{width:40%;display:inline-block}.gen__check:nth-child(2n){margin-left:15%}.gen__result{-webkit-user-select:text;user-select:text;font-family:SFMono-Regular,Monaco,Consolas,Lucida Console,monospace;margin-top:6px;margin-bottom:3px;height:50px;text-align:center;white-space:pre-wrap;word-break:break-all;overflow:hidden}.gen__result--long-pass{font-size:.75em}.gen__check-hide-label{text-align:center;position:relative;top:-2px}.gen__check-hide+label.gen__check-hide-label:before{font-family:Font Awesome\ 5 Free;font-weight:400;font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased;display:inline-block;line-height:1.5;content:"\f006";color:inherit}.gen__check-hide:checked+label.gen__check-hide-label:before{content:"\f007";color:inherit}.gen__check-hide:not([disabled])+label.gen__check-hide-label:hover:before{color:var(--text-color)}.gen__btn-wrap{text-align:center}@-moz-document url-prefix(){.gen__result{white-space:pre-wrap;word-break:break-all}}.gen-ps{flex:1;display:flex;align-items:stretch;flex-direction:column;justify-content:flex-start;width:100%;-webkit-user-select:none;user-select:none;overflow:hidden;position:relative}.gen-ps .scroller__bar-wrapper>.scroller__bar{background-color:initial;transition:background-color .15s ease}.gen-ps:hover .scroller__bar-wrapper>.scroller__bar{transition:background-color .15s ease-out;background-color:hsla(0,0%,53.3%,.2)}.gen-ps:hover .scroller__bar-wrapper>.scroller__bar:hover{transition:background-color .3s ease-in;background-color:hsla(0,0%,53.3%,.8)}.titlebar-custom .gen-ps{margin-top:32px}.gen-ps>.scroller{flex:1;overflow-x:hidden}.gen-ps__buttons,.gen-ps__content{margin:.5em 1em}.gen-ps__sample{font-weight:400;color:var(--muted-color)}.gen-ps__example,.gen-ps__sample{-webkit-user-select:text;user-select:text}.gen-ps__example{font-family:SFMono-Regular,Monaco,Consolas,Lucida Console,monospace;margin-top:0;white-space:pre-wrap;word-break:break-all}.gen-ps__input,.gen-ps__list{height:2em}.gen-ps__pattern-help{margin-bottom:.5em}.key-change{flex:1;display:flex;align-items:stretch;flex-direction:column;justify-content:center;overflow:hidden;padding:1.5em;position:relative}@media(max-width:620px){.key-change{padding:.5em 1em}}.key-change__icon{font-size:6em;text-align:center}.key-change__header{font-size:1.5625rem;text-align:center}.key-change__body{display:flex;align-items:flex-start;flex-direction:column;flex-shrink:0;margin:1.5em 0}.key-change__input{align-self:center}.key-change input[type=password].key-change__pass,.key-change input[type=password].key-change__pass-repeat{font-size:2em;margin:.75em 0 0}.key-change__keyfile{color:var(--muted-color);margin-top:.5em;cursor:pointer}.key-change__keyfile:hover{color:var(--medium-color)}.key-change__buttons{text-align:right}.key-change__buttons button~button{margin-left:.75em}.key-change__buttons>button{margin-bottom:.75em}.key-change__body,.key-change__buttons{align-self:center;width:40%}.list{justify-content:flex-start}.list,.list__items{flex:1;display:flex;align-items:stretch;flex-direction:column;overflow:hidden}.list__items{position:relative}.list__items .scroller__bar-wrapper>.scroller__bar{background-color:initial;transition:background-color .15s ease}.list__items:hover .scroller__bar-wrapper>.scroller__bar{transition:background-color .15s ease-out;background-color:hsla(0,0%,53.3%,.2)}.list__items:hover .scroller__bar-wrapper>.scroller__bar:hover{transition:background-color .3s ease-in;background-color:hsla(0,0%,53.3%,.8)}.list__items>.scroller{flex:1;align-self:stretch;position:relative;overflow-x:hidden}@media(max-width:620px){.list__items>.scroller{width:100%!important;max-width:100%!important}}.list__search{padding:.75em}.list__search-header{display:flex;align-items:stretch;flex-direction:row;justify-content:flex-start;flex-wrap:wrap}@media(max-width:620px){.list__search-header{font-size:1.2em}}.list__search-field-wrap{flex:1;position:relative;margin-right:.75em}.list__search-field{width:100%;height:2.5em}@media(max-width:620px){.list__search-field{font-size:1.05em!important;box-shadow:none!important;border-radius:.6em!important;border:none!important;background-color:var(--secondary-background-color)!important}}.list__search-icon-clear,.list__search-icon-search{color:var(--muted-color);position:absolute;top:.53em;cursor:pointer}.list__search-icon-clear:hover,.list__search-icon-search:hover{color:var(--medium-color)}@media(max-width:620px){.list__search-icon-clear,.list__search-icon-search{top:.6em}}.list__search-icon-search{left:.6em}.list__search-icon-clear{right:.6em;display:none}.list__search-field-wrap--text .list__search-icon-clear{display:block}.list__search-btn-new,.list__search-btn-sort{cursor:pointer;-webkit-app-region:no-drag;text-align:center;border-radius:var(--block-border-radius);transition:color .15s ease;height:2.5em;line-height:2.3em;padding:0 1em}.list__search-btn-new.sel--active,.list__search-btn-new:hover,.list__search-btn-sort.sel--active,.list__search-btn-sort:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.list__search-btn-new:active,.list__search-btn-sort:active{background-color:var(--intermediate-pressed-background-color)}.list__search-btn-new>i,.list__search-btn-sort>i{vertical-align:middle}.list__search-btn-menu{display:none}@media(max-width:620px){.list__search-btn-menu{display:block;cursor:pointer;-webkit-app-region:no-drag;padding:.7em .6em 0;height:1.6em;margin-right:1em}.list__search-btn-menu.sel--active,.list__search-btn-menu:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.list__search-btn-menu:active{background-color:var(--intermediate-pressed-background-color)}.list__search-btn-menu>i{display:block}}.list__search-adv{flex:100%;display:flex;align-items:stretch;flex-direction:row;flex-wrap:wrap;padding:0 .75em}.list__search-adv-text{flex:100%;padding:.5em 0}.list__search-check{flex:50%}.list__table-body{position:relative}.list__table-row{display:flex;align-items:center;width:100%}.list__table-cell{padding:.5em 1em;text-align:left;flex-grow:1;flex-shrink:0;flex-basis:0;overflow:hidden;text-overflow:ellipsis}.list__table-cell:first-child{text-align:center;padding:0;width:3em;flex-basis:3em;flex-grow:0;flex-shrink:0}.list__table-options{-webkit-app-region:no-drag;padding:1em 1.2em;text-align:center;border-radius:var(--block-border-radius);transition:color .15s ease;cursor:pointer}.list__table-options.sel--active,.list__table-options:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.list__table-options:active{background-color:var(--intermediate-pressed-background-color)}.list__table-options>i{vertical-align:middle}.list__items-container{position:relative}.list__item{left:0;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;position:absolute;top:0;box-sizing:border-box}@media(min-width:621px){.list__item{cursor:pointer;-webkit-app-region:no-drag}.list__item.sel--active,.list__item:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.list__item:active{background-color:var(--intermediate-pressed-background-color)}.list__item--active,.list__item--active:hover{cursor:default;-webkit-app-region:no-drag;background-color:var(--selected-item-color);color:var(--selected-item-text-color)}.list__item--active:hover,.list__item--active:hover:hover{color:var(--selected-item-text-color)}}@media(max-width:620px){.list__item{margin:0 1em;border-bottom:1px solid var(--light-border-color)}.list__item:last-of-type{border-bottom:none}}.list__item:not(.list__item--table){padding:.5em 1em;margin:0 .75em;width:calc(100% - 1.5em)}@media(min-width:621px){.list__item:not(.list__item--table){border-radius:var(--block-border-radius)}}.list__item--expired .list__item-descr,.list__item--expired .list__item-title{text-decoration:line-through}.list__item-icon{margin-right:.2em;width:14px;height:14px;vertical-align:top;position:relative;top:-1px}@media(max-width:620px){.list__item-icon{margin-right:4px}}.list__item-icon--custom{vertical-align:text-bottom}.list__item-icon--custom.yellow{filter:grayscale(1) sepia(1) hue-rotate(20deg) brightness(1.17) saturate(5.7)}.list__item-icon--custom.green{filter:grayscale(1) sepia(1) hue-rotate(55deg) brightness(1.01) saturate(4.9)}.list__item-icon--custom.red{filter:grayscale(1) sepia(1) hue-rotate(316deg) brightness(1.1) saturate(6)}.list__item-icon--custom.orange{filter:grayscale(1) sepia(1) hue-rotate(355deg) brightness(.92) saturate(5)}.list__item-icon--custom.blue{filter:grayscale(1) sepia(1) hue-rotate(180deg) brightness(.9) saturate(5)}.list__item-icon--custom.violet{filter:grayscale(1) sepia(1) hue-rotate(238deg) brightness(1) saturate(6.2)}.list__item-title{margin-left:2px}.list__item-descr{font-size:.8em;color:var(--muted-color);display:block;text-overflow:ellipsis;overflow:hidden;margin-bottom:.375em}.list__item--active .list__item-descr{color:var(--selected-item-text-color)}.menu{width:100%;display:flex;align-items:stretch;flex-direction:column;justify-content:flex-start;overflow:hidden}.menu__section{flex:0 0 auto;border-bottom:1px solid var(--light-border-color);position:relative;overflow:hidden;padding:.75em 0}.menu__section .scroller__bar-wrapper>.scroller__bar{background-color:initial;transition:background-color .15s ease}.menu__section:hover .scroller__bar-wrapper>.scroller__bar{transition:background-color .15s ease-out;background-color:hsla(0,0%,53.3%,.2)}.menu__section:hover .scroller__bar-wrapper>.scroller__bar:hover{transition:background-color .3s ease-in;background-color:hsla(0,0%,53.3%,.8)}.menu__section--grow{flex:1;display:flex;flex-direction:column}.menu__section--grow>.scroller{flex:1}.menu__section--drag{flex:0 0 auto}.menu__section--drag,.menu__section--drag>.scroller{max-height:calc(100vh - 200px)}.menu__section--drag.menu__section,.menu__section:last-child{border-bottom:none}.menu__drag-section{position:relative;-webkit-app-region:no-drag;transition:background-color .15s ease-out;background:var(--light-border-color);flex:0 0 auto;height:1px;cursor:row-resize}@media(min-width:621px){.menu__drag-section.dragging,.menu__drag-section:hover{transition:background-color .3s ease-in;background:var(--accent-border-color)}}.menu__item{text-overflow:ellipsis;overflow:hidden;position:relative;display:flex;align-items:stretch;flex-direction:column;justify-content:flex-start}.menu__item--collapsed>.menu__item,.menu__item-collapse{display:none}.menu__item--collapsed>.menu__item-collapse{display:block;cursor:pointer;position:absolute;top:50%;left:1.6em;transform:translateY(-50%)}.menu__item-body{cursor:pointer;-webkit-app-region:no-drag;padding:.5em 1em;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;border-radius:var(--block-border-radius);margin:0 .75em}.menu__item-body.sel--active,.menu__item-body:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.menu__item-body:active{background-color:var(--intermediate-pressed-background-color)}.menu__item-body.sel--active,.menu__item-body:hover{background-color:var(--selectable-on-secondary-item-color)}.menu__item--active.menu__item--hover>.menu__item-body,.menu__item--active>.menu__item-body{cursor:default;-webkit-app-region:no-drag;background-color:var(--selected-item-color);color:var(--selected-item-text-color);color:var(--text-color);background-color:var(--selected-on-secondary-item-color)}.menu__item--active.menu__item--hover>.menu__item-body:hover,.menu__item--active>.menu__item-body:hover{color:var(--selected-item-text-color);color:var(--text-color)}.menu__item>.menu__item>.menu__item-body{padding-left:2em}.menu__item>.menu__item>.menu__item>.menu__item-body{padding-left:3em}.menu__item>.menu__item>.menu__item>.menu__item>.menu__item-body{padding-left:4em}.menu__item>.menu__item>.menu__item>.menu__item>.menu__item>.menu__item-body{padding-left:5em}.menu__item>.menu__item>.menu__item>.menu__item>.menu__item>.menu__item>.menu__item-body{padding-left:6em}.menu__item-options{display:none}.menu__item--with-options:hover .menu__item-options{display:block}.menu__item-option{cursor:pointer;display:inline-block}.menu__item-colors .menu__item-option:before{content:"\f005"}.menu__item-colors .menu__item-option:hover:before{content:"\f004"}.menu__item-icon{width:.8em;position:relative;top:.1em}.menu__item-icon--image{width:12px;height:12px;position:relative;top:1px}.menu__item-icon--no-icon:before{content:"\f00f"}.menu__item--collapsed>.menu__item-body>.menu__item-icon--no-icon:before{content:"\f00e"}.menu__item--with-options:hover .menu__item-icon{display:none}.menu__item-title{padding-left:.4em}.menu__item-colors .menu__item-title{display:inline-block;color:var(--text-color)}.menu__item--with-options:hover .menu__item-title{display:none}.menu__item-edit,.menu__item-empty-trash{display:none;opacity:0;position:absolute;right:1.2em;top:.55em;cursor:pointer;transition:opacity .15s ease,color .15s ease;color:var(--clickable-on-secondary-color)}.menu__item-edit:hover,.menu__item-empty-trash:hover{color:var(--medium-color)}.menu__item--active>.menu__item-body>.menu__item-edit,.menu__item--active>.menu__item-body>.menu__item-empty-trash{display:block}.menu__item--active>.menu__item-body:hover>.menu__item-edit,.menu__item--active>.menu__item-body:hover>.menu__item-empty-trash{opacity:.5}.menu__item .fa{margin-right:.5em}.menu__item-drag-top{position:absolute;top:0;left:0;width:100%;height:5px}.menu__item--drag-top>.menu__item-body>.menu__item-drag-top{background-color:var(--action-color)}.menu__item--drag:not(.menu__item--drag-top)>.menu__item-body{color:var(--action-color)}.open{flex:1;display:flex;align-self:stretch;align-items:center;flex-direction:column;justify-content:center;background:var(--background-color)}.mobile .open{overflow-y:auto}.open__icons{display:flex;align-items:stretch;flex-direction:row;flex-shrink:0;justify-content:center;flex-wrap:wrap}.open--drag .open__icons{display:none}.open__icon{cursor:pointer;-webkit-app-region:no-drag;text-align:center;border-radius:var(--block-border-radius);transition:color .15s ease;color:var(--open-icon-color);padding:0 1.2em 1em;margin:.2em .5em}.open__icon.sel--active,.open__icon:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.open__icon:active{background-color:var(--intermediate-pressed-background-color)}.open__icon>i{vertical-align:middle}.open__icon:hover{color:var(--medium-color)}.open--show-focus .open__icon:focus{box-shadow:0 0 0 1px var(--action-color)}.open__icon-i{font-size:4em}.open__icon-text{color:var(--muted-color)}.open__icon:hover>.open__icon-text{color:var(--medium-color)}.open__pass-area{display:flex;align-items:stretch;flex-direction:column;justify-content:flex-start;position:relative}.open--drag .open__pass-area{display:none}.open__pass-warn-wrap{display:flex;flex-direction:row;justify-content:flex-end}.open__pass-field-wrap{display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch;flex-shrink:0;margin-bottom:.5em}.open__pass-enter-btn,.open__pass-opening-icon{padding:.6em 1.5em;position:absolute;left:100%;border-radius:var(--block-border-radius);color:var(--muted-color);line-height:3em;height:3.2em}@media(max-width:620px){.open__pass-enter-btn,.open__pass-opening-icon{left:auto;right:0}}.open__pass-enter-btn>i,.open__pass-opening-icon>i{font-size:3em;line-height:1}@media(max-width:620px){.open__pass-enter-btn>i,.open__pass-opening-icon>i{line-height:1.1}}.open--show-focus .open__pass-enter-btn:focus,.open--show-focus .open__pass-opening-icon:focus{box-shadow:0 0 0 1px var(--action-color)}.open--file .open__pass-enter-btn{cursor:pointer}.open--file .open__pass-enter-btn:hover{color:var(--medium-color)}.open--opening .open__pass-enter-btn{display:none}.open__pass-enter-btn-icon-enter{display:block}.open__pass-enter-btn--touch-id .open__pass-enter-btn-icon-enter,.open__pass-enter-btn-icon-touch-id{display:none}.open__pass-enter-btn--touch-id .open__pass-enter-btn-icon-touch-id{display:block}.open__pass-opening-icon{display:none}.open--opening .open__pass-opening-icon{display:block}.open__config{display:flex;align-items:stretch;flex-direction:column;justify-content:flex-start;position:relative}@media(min-width:621px){.open__config{width:30em}}.open--drag .open__config{display:none}.open__config-buttons{align-self:flex-end}.open__config-header>i{margin-right:.3em}.open__config-field{width:100%}.open__config-error{min-height:1.7em}.open__config:not(.open__config--disabled) .open__config-btn-ok-text{display:inline}.open__config.open__config--disabled .open__config-btn-ok-text,.open__config:not(.open__config--disabled) .open__config-btn-ok-spinner{display:none}.open__config.open__config--disabled .open__config-btn-ok-spinner{display:block}.open input[type=password].open__pass-input{font-size:2em;margin-bottom:0;width:38vw}.open input[type=password].open__pass-input[readonly]{cursor:pointer}@media(max-width:1000px){.open input[type=password].open__pass-input{width:16em}}@media(max-width:620px){.open input[type=password].open__pass-input{width:calc(100vw - 20px)}}.open__settings{display:flex;flex-direction:row;justify-content:space-between;align-items:stretch;padding-left:1em;height:2em}.open__settings-key-file{border-radius:var(--block-border-radius)}.open--file:not(.open--opening) .open__settings-key-file{cursor:pointer}.open--key-file .open__settings-key-file{color:var(--medium-color)}.open__settings-key-file-icon{width:2em}.open__settings-key-file-dropbox{visibility:hidden;margin-left:.3em}.open--file .open__settings-key-file-dropbox:hover{visibility:visible}.open--opening .open__settings-key-file-dropbox,.open__settings-key-file-dropbox .open--key-file{display:none}.open--file .open__settings-key-file:hover .open__settings-key-file-dropbox{visibility:visible}.open--show-focus .open__settings-key-file:focus{box-shadow:0 0 0 1px var(--action-color)}.open__settings-key-file,.open__settings-key-file-dropbox{color:var(--muted-color)}.open--file:not(.open--opening) .open__settings-key-file-dropbox:hover,.open--file:not(.open--opening) .open__settings-key-file:hover{color:var(--medium-color)}.open__settings-yubikey{display:none}.open__settings-yubikey--active,.open__settings-yubikey--present{display:flex}.open__settings-yubikey__text{margin-right:.4em;display:none}.open__settings-yubikey--active .open__settings-yubikey__text{display:block}.open__settings-yubikey-img{fill:var(--muted-color);width:1em;position:relative;top:-.22em;font-size:1.5em;margin-right:.375em;cursor:pointer}.open__settings-yubikey--active .open__settings-yubikey-img,.open__settings-yubikey-img:hover{fill:var(--text-color)}.open__last{flex-direction:column;align-items:stretch;margin-top:1.5em}.open__last,.open__last-item{display:flex;justify-content:flex-start}.open__last-item{flex-direction:row;align-items:baseline;flex-shrink:0;color:var(--muted-color);padding:.5em 1em;border-radius:var(--block-border-radius)}.open:not(.open--opening) .open__last-item{cursor:pointer;-webkit-app-region:no-drag}.open:not(.open--opening) .open__last-item.sel--active,.open:not(.open--opening) .open__last-item:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.open:not(.open--opening) .open__last-item:active{background-color:var(--intermediate-pressed-background-color)}.open--show-focus .open__last-item:focus{box-shadow:0 0 0 1px var(--action-color)}.open__last-item-icon{width:2em;position:relative;top:.1em}.open__last-item-text{flex-grow:1}.open__last-item-icon-del{opacity:0;color:var(--muted-color)}.open__last-item:hover .open__last-item-icon-del{opacity:.3;cursor:pointer}.open__last-item-icon-del:hover{color:var(--medium-color)}.open__last-item:hover .open__last-item-icon-del:hover{opacity:1}.open__dropzone{display:none}.open--drag .open__dropzone{display:flex;flex-direction:column;flex:1 0 auto;justify-content:center;align-self:center;align-items:center;text-align:center}.open__dropzone-icon{font-size:10em}.open__dropzone-header{margin-top:1em}.open__message{display:flex;justify-content:space-between;min-width:20vw;background:var(--secondary-background-color);border-radius:var(--block-border-radius);margin-bottom:2em}.open__message-content{padding:1em .75em 1em 1.2em}.open__message-cancel-btn{padding:1em 1.2em 1em .75em;cursor:pointer;opacity:.5;transition:opacity .15s ease}.open__message-cancel-btn:hover{opacity:1}.open__message-cancel-btn-icon{vertical-align:bottom}.open-list__content{margin:.5em 0 .5em -1em;max-height:calc(100vh - 22em);position:relative;overflow:hidden}.open-list__scrollable{max-height:calc(100vh - 22em);width:calc(100% + 50px);overflow-y:auto;overflow-x:hidden}.open-list__files{display:flex;flex-wrap:wrap;width:calc(100% - 50px)}.open-list__file{cursor:pointer;padding:.5em 1em;border-radius:var(--block-border-radius);box-sizing:border-box;flex-basis:100%}@media(min-width:621px){.open-list--density2 .open-list__file{flex-basis:50%}.open-list--density3 .open-list__file{flex-basis:33.33333%}}.open-list__file:hover{background-color:var(--action-background-color-focus-tr)}.open-list__file-icon{margin-right:.3em}.open-list__file--another{color:var(--medium-color)}.open-list__check-label{width:100%;display:inline-block}.open-chal-resp__head{padding:.5em 1em}.open-chal-resp__icon{margin-right:.75em}.open-chal-resp__item{padding:.5em 1em;cursor:pointer;border-radius:var(--block-border-radius)}.open-chal-resp__item:hover{background-color:var(--action-background-color-focus-tr)}.select-entry,.select-entry-field{position:absolute;top:0;left:0;height:100%;width:100%;background-color:var(--background-color);display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;box-sizing:border-box;z-index:10000;opacity:1;padding:1em 1.2em}.titlebar-hidden .select-entry,.titlebar-hidden .select-entry-field{padding-top:24px}.titlebar-hidden-inset .select-entry,.titlebar-hidden-inset .select-entry-field{padding-top:40px}.select-entry-field__header,.select-entry__header{display:flex}.select-entry-field__header-text,.select-entry__header-text{flex:1 1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:1em}.select-entry-field__message,.select-entry__message{display:flex;margin-bottom:1em}.select-entry-field__message-text,.select-entry__message-text{flex:1 1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:1em}.select-entry-field__hint,.select-entry__hint{flex:.5 0;margin-bottom:1em;text-align:right}.select-entry-field__hint-text,.select-entry__hint-text{flex:1 1;font-size:.8em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:1em}.select-entry-field__items,.select-entry__items{flex:1;margin-bottom:.5em;position:relative;overflow:hidden}.select-entry-field__items .scroller__bar-wrapper>.scroller__bar,.select-entry__items .scroller__bar-wrapper>.scroller__bar{background-color:initial;transition:background-color .15s ease}.select-entry-field__items:hover .scroller__bar-wrapper>.scroller__bar,.select-entry__items:hover .scroller__bar-wrapper>.scroller__bar{transition:background-color .15s ease-out;background-color:hsla(0,0%,53.3%,.2)}.select-entry-field__items:hover .scroller__bar-wrapper>.scroller__bar:hover,.select-entry__items:hover .scroller__bar-wrapper>.scroller__bar:hover{transition:background-color .3s ease-in;background-color:hsla(0,0%,53.3%,.8)}.select-entry-field__items>.scroller,.select-entry__items>.scroller{display:flex;flex-direction:row;justify-content:center}.select-entry-field__large-text,.select-entry__large-text{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center}.select-entry-field__large-icon,.select-entry__large-icon{font-size:6em}.select-entry-field__table,.select-entry__table{flex:1;width:100%;height:0;overflow:hidden;border-collapse:collapse;table-layout:fixed}.select-entry-field__table tr.select-entry__item,.select-entry__table tr.select-entry__item{border-right-width:3px}.select-entry-field__table td,.select-entry-field__table th,.select-entry__table td,.select-entry__table th{padding:.5em 1em;overflow:hidden;text-overflow:ellipsis;word-wrap:break-word}.select-entry-field__table td.select-entry__item-icon-cell,.select-entry-field__table th.select-entry__item-icon-cell,.select-entry__table td.select-entry__item-icon-cell,.select-entry__table th.select-entry__item-icon-cell{width:2em;text-align:center}.select-entry-field__table td.select-entry__item-url-cell,.select-entry-field__table td.select-entry__item-user-cell,.select-entry-field__table th.select-entry__item-url-cell,.select-entry-field__table th.select-entry__item-user-cell,.select-entry__table td.select-entry__item-url-cell,.select-entry__table td.select-entry__item-user-cell,.select-entry__table th.select-entry__item-url-cell,.select-entry__table th.select-entry__item-user-cell{width:25%}.select-entry-field__table td.select-entry__item-options,.select-entry-field__table th.select-entry__item-options,.select-entry__table td.select-entry__item-options,.select-entry__table th.select-entry__item-options{width:2em}.select-entry-field__item,.select-entry__item{cursor:pointer;-webkit-app-region:no-drag}.select-entry-field__item.sel--active,.select-entry-field__item:hover,.select-entry__item.sel--active,.select-entry__item:hover{background-color:var(--intermediate-background-color);color:var(--medium-color)}.select-entry-field__item:active,.select-entry__item:active{background-color:var(--intermediate-pressed-background-color)}.select-entry-field__item--active,.select-entry-field__item--active:hover,.select-entry__item--active,.select-entry__item--active:hover{cursor:default;-webkit-app-region:no-drag;background-color:var(--selected-item-color);color:var(--selected-item-text-color);cursor:pointer}.select-entry-field__item--active:hover,.select-entry-field__item--active:hover:hover,.select-entry__item--active:hover,.select-entry__item--active:hover:hover{color:var(--selected-item-text-color)}.select-entry-field__item-options,.select-entry__item-options{text-align:center}.select-entry-field__item-options:hover,.select-entry__item-options:hover{background:var(--background-color)}.select-entry__item--active .select-entry-field__item-options:hover,.select-entry__item--active .select-entry__item-options:hover{background:var(--action-color)}.select-entry-field__empty-title,.select-entry__empty-title{align-self:center}.select-entry-field__filters,.select-entry__filters{display:flex;flex-direction:row;align-items:flex-start;flex-wrap:wrap}.select-entry-field__filter,.select-entry__filter{display:flex;margin-bottom:.75em;margin-right:.75em;border-radius:var(--button-border-radius);background-color:var(--unselected-background-color);cursor:pointer}.select-entry-field__filter:hover,.select-entry__filter:hover{background-color:var(--unselected-background-color-hover)}.select-entry-field__filter-icon,.select-entry-field__filter-text,.select-entry__filter-icon,.select-entry__filter-text{padding:.5em 1em}.select-entry-field__filter-check,.select-entry__filter-check{font-size:1.2em;padding:.35em 0 0 1em}.select-entry-field__filter-text,.select-entry__filter-text{padding-left:0}.select-entry-field__buttons,.select-entry__buttons{display:flex;justify-content:flex-end;margin-top:.75em}.settings{flex:1;display:flex;align-items:stretch;flex-direction:column;justify-content:flex-start;flex-wrap:wrap;overflow:hidden;position:relative}.settings .scroller__bar-wrapper>.scroller__bar{background-color:initial;transition:background-color .15s ease}.settings:hover .scroller__bar-wrapper>.scroller__bar{transition:background-color .15s ease-out;background-color:hsla(0,0%,53.3%,.2)}.settings:hover .scroller__bar-wrapper>.scroller__bar:hover{transition:background-color .3s ease-in;background-color:hsla(0,0%,53.3%,.8)}.titlebar-custom .settings{margin-top:32px}.settings__content{margin:1em 1.2em}.settings>.scroller{flex:1 0 0}.settings h2,.settings h3{margin-top:20px}.settings .shortcut{border:1px solid var(--muted-color);display:inline-block;border-radius:2px;width:8em;text-align:center;padding:.5em 1em;margin:0 1em .5em;line-height:1.5em;min-width:unset;box-sizing:border-box;vertical-align:initial}.settings .shortcut-large{width:12em}.settings .shortcut:first-of-type{margin-left:0}.settings .shortcut__editor{margin-bottom:.5em}.settings .shortcut__editor-input{text-align:center;margin:.5em 0 1em;width:15em}.settings .shortcut__editor-input--large{width:30em}.settings__back-button{cursor:pointer}.settings__back-button-post,.settings__back-button-pre{display:none}.settings__back-button-post{margin-left:.375em;margin-right:.75em;position:relative;top:.2em}@media(max-width:620px){.settings__back-button{line-height:3em;height:3em;padding:.5em 1em;font-size:1.2em}.settings__back-button>i{margin-right:.7em;font-size:1.2em;vertical-align:middle;position:relative;top:-.15em}.settings__back-button-pre{display:inline}}@media(min-width:621px){.settings__back-button{position:absolute;top:0;right:1em;padding:1em 0 1px;z-index:1;background:var(--background-color);box-shadow:0 0 5px 5px var(--background-color)}.settings__back-button-post{display:inline}}.settings__input,.settings__select{height:2em}.settings__row{display:flex;justify-content:space-between}.settings__col-small{width:30%;position:relative}.settings__col-small>.settings__input{width:100%}.settings__col-small-label{text-overflow:ellipsis;overflow:hidden;width:100%}.settings__pre{-webkit-user-select:text;user-select:text;white-space:pre-wrap}.settings__select-no-margin{margin-bottom:.5em}.settings #settings__file-confirm-master-pass,.settings #settings__file-master-pass{font-family:SFMono-Regular,Monaco,Consolas,Lucida Console,monospace}.settings #settings__file-confirm-master-pass-group{display:none}.settings__file-confirm-master-pass-warning,.settings__file-master-pass-warning{font-weight:400;float:right;display:none}.settings__file-save-to{cursor:pointer;display:inline-block;margin-right:1em;text-align:center}.settings__file-save-to>i{display:block;font-size:3em;padding:5px 10px;margin:auto}.settings__file-save-to:hover{transition:color .15s ease;color:var(--medium-color)}.settings__general-update-buttons{margin-top:1.5em}.settings__general-update-btn{width:15em}.settings__general-storage-header{margin-bottom:0;line-height:1.3em}.settings__general-prv,.settings__general-prv-logout{margin-bottom:.5em}.settings__general-themes{width:calc(100% - 10em);display:grid;grid-template-columns:repeat(auto-fill,minmax(10em,1fr));grid-gap:1.5em;margin-bottom:1.5em}@media(max-width:620px){.settings__general-themes{width:100%}}.settings__general-theme{padding:.5em 1em;border:1px solid var(--light-border-color);border-radius:var(--input-border-radius);text-align:center;background:var(--background-color);color:var(--text-color);cursor:pointer}body .settings__general-theme{--focus-shadow-spread:unset;--form-box-shadow-color-focus:unset;--form-box-shadow-color-hover:unset}.settings__general-theme-name{border-bottom:1px solid var(--light-border-color);padding-bottom:.375em;margin-bottom:.75em}.settings__general-theme-button{margin-bottom:.5em}.settings__general-theme-plugins-icon{font-size:3em}.settings__general-theme:hover{box-shadow:inset 0 1px 3px rgba(0,0,0,.06),0 0 0 var(--focus-shadow-spread) var(--form-box-shadow-color-hover)}.settings__general-theme--selected,.settings__general-theme--selected:hover{border:1px solid var(--action-color);box-shadow:inset 0 1px 3px rgba(0,0,0,.06),0 0 0 var(--focus-shadow-spread) var(--form-box-shadow-color-focus)}.settings__logs{-webkit-user-select:text;user-select:text;margin-top:.5em;word-break:break-all}.settings__logs-log{margin:0;white-space:pre-wrap}.settings__plugins-install-error{margin-top:.5em}.settings__plugins-plugin-files{margin-top:.5em;margin-bottom:.5em}.settings__plugins-plugin-file{padding-left:1em}.settings__plugins-plugin-desc{margin-bottom:.5em}.settings__plugins-plugin-updates>label{font-weight:400}.settings__plugins-gallery{margin-top:1.5em;display:flex;flex-wrap:wrap}.settings__plugins-gallery-load-btn{margin-top:1em}.settings__plugins-gallery-plugin{position:relative;width:calc(50% - 40px);border-radius:2px;border:1px solid var(--light-border-color);padding:1em 1.2em;box-sizing:border-box;margin:0 .5em 1em 0;vertical-align:top}@media(max-width:620px){.settings__plugins-gallery-plugin{width:100%;margin-right:0}}.settings__plugins-gallery-plugin-install-btn{position:absolute;right:0;bottom:0}.settings__plugins-gallery-plugin-country-flag{position:absolute;right:10px;top:6px;font-size:1.5em}.settings__plugins-gallery-plugin-title-link,.settings__plugins-gallery-plugin-title-link:active,.settings__plugins-gallery-plugin-title-link:focus,.settings__plugins-gallery-plugin-title-link:hover,.settings__plugins-gallery-plugin-title-link:visited{border-bottom:0}.settings__plugins-gallery-search{margin-top:1em}@media(min-width:621px){.settings__plugins-gallery-search{width:calc(100% - 74px)}}@media(max-width:620px){.settings__plugins-gallery-search{width:100%}}.settings__browser-table td,.settings__browser-table th{padding:.5em 1em}.settings__browser-extension-status{display:inline-block;width:0;height:0;border-radius:100%;border:5px solid;margin-right:.2em}.settings__browser-session-buttons{margin-top:1em}.settings__browser-session-files{display:flex;flex-wrap:wrap}.settings__browser-session-file{margin:.5em 1em}.settings__donate-btn{background:#fff;border:2px solid #89abed;border-radius:2.8rem;text-align:center;display:inline-block;text-decoration:none;padding:.2rem 2.4rem .1rem;line-height:1.4;height:2.8rem;margin-bottom:1em}.settings__donate-btn:hover{border-bottom:2px solid #89abed}.settings__donate-btn-bottom,.settings__donate-btn-top{pointer-events:none;display:block}.settings__donate-btn-top{color:#606a79}.settings__donate-btn-bottom{color:#89abed;font-weight:700}.settings__head-icon{position:relative;top:.1em;margin-right:.2em}.import-csv{padding:.5em 1em;display:flex;flex-direction:column;flex:1;position:relative}.titlebar-custom .import-csv{margin-top:32px}.import-csv__body{overflow:hidden;position:relative;flex:1;display:flex;flex-direction:column;align-items:stretch}.import-csv__body .scroller__bar-wrapper>.scroller__bar{background-color:initial;transition:background-color .15s ease}.import-csv__body:hover .scroller__bar-wrapper>.scroller__bar{transition:background-color .15s ease-out;background-color:hsla(0,0%,53.3%,.2)}.import-csv__body:hover .scroller__bar-wrapper>.scroller__bar:hover{transition:background-color .3s ease-in;background-color:hsla(0,0%,53.3%,.8)}.import-csv__body>.scroller{flex:1 0 0;overflow-x:scroll;position:relative}.import-csv__table-wrap{overflow-x:auto;width:calc(100vw - 3em);max-width:calc(100vw - 3em)}.import-csv__table-wrap .scroller__bar-wrapper>.scroller__bar{background-color:initial;transition:background-color .15s ease}.import-csv__table-wrap:hover .scroller__bar-wrapper>.scroller__bar{transition:background-color .15s ease-out;background-color:hsla(0,0%,53.3%,.2)}.import-csv__table-wrap:hover .scroller__bar-wrapper>.scroller__bar:hover{transition:background-color .3s ease-in;background-color:hsla(0,0%,53.3%,.8)}.import-csv__table{border-collapse:collapse}.import-csv__table td,.import-csv__table th{text-align:left;padding:.5em 1em;overflow:hidden;text-overflow:ellipsis;vertical-align:top}.import-csv__table td{-webkit-user-select:text;user-select:text}@media(min-width:621px){.import-csv__table tbody tr:hover{background-color:var(--intermediate-background-color)}}.import-csv__field-select{width:100%;height:2em;padding-right:2em;overflow:hidden;text-overflow:ellipsis}.import-csv__top{padding:0 1em}.import-csv__bottom{padding:1em;display:flex;align-items:baseline}.import-csv__bottom button~button{margin-left:.75em}.import-csv__target{flex:1 1 0;display:flex;align-items:baseline}.import-csv__target-select{width:30%;height:2em;margin-left:1em;padding-right:2em}.titlebar{font-size:0}.titlebar-custom .titlebar{position:fixed;top:0;left:0;width:100vw;display:flex;height:32px}.titlebar__logo{height:30px;width:30px;padding:6px;pointer-events:none}.titlebar__grow{flex-grow:1;-webkit-app-region:drag}.titlebar>.fa{font-size:16px;padding:4px 16px;height:32px;box-sizing:border-box}.titlebar>.fa:hover{background:var(--titlebar-button-background-color)}.titlebar>.fa.fa-titlebar-close:hover{background:#d71525}.fa-square:before{content:"\f001"}.fa-square-o:before{content:"\f002"}.fa-check-square-o:before{content:"\f003"}.fa-bookmark:before{content:"\f004"}.fa-bookmark-o:before{content:"\f005"}.fa-eye:before{content:"\f006"}.fa-eye-slash:before{content:"\f007"}.fa-bolt:before{content:"\f008"}.fa-unlock:before{content:"\f009"}.fa-lock:before{content:"\f00a"}.fa-check:before{content:"\f00b"}.fa-times:before{content:"\f00c"}.fa-times-circle:before{content:"\f00d"}.fa-folder:before{content:"\f00e"}.fa-folder-open:before{content:"\f00f"}.fa-ban:before{content:"\f010"}.fa-dropbox:before{content:"\f011"}.fa-google-drive:before{content:"\f012"}.fa-plus:before{content:"\f013"}.fa-ellipsis-h:before{content:"\f014"}.fa-ellipsis-v:before{content:"\f015"}.fa-magic:before{content:"\f016"}.fa-cog:before{content:"\f017"}.fa-server:before{content:"\f018"}.fa-file-alt:before{content:"\f019"}.fa-file-alt-o:before{content:"\f01a"}.fa-file-code:before{content:"\f01b"}.fa-file-pdf:before{content:"\f01c"}.fa-file-archive:before{content:"\f01d"}.fa-file-word:before{content:"\f01e"}.fa-file-excel:before{content:"\f01f"}.fa-file-powerpoint:before{content:"\f020"}.fa-file-image:before{content:"\f021"}.fa-file-video:before{content:"\f022"}.fa-file-audio:before{content:"\f023"}.fa-onedrive:before{content:"\f024"}.fa-user-friends:before{content:"\f025"}.fa-question:before{content:"\f026"}.fa-sign-out-alt:before{content:"\f027"}.fa-sync-alt:before{content:"\f028"}.fa-level-down-alt:before{content:"\f029"}.fa-tag:before{content:"\f02a"}.fa-tags:before{content:"\f02b"}.fa-th-large:before{content:"\f02c"}.fa-trash:before{content:"\f02d"}.fa-trash-alt:before{content:"\f02e"}.fa-keyboard:before{content:"\f02f"}.fa-puzzle-piece:before{content:"\f030"}.fa-usb:before{content:"\f031"}.fa-info:before{content:"\f032"}.fa-info-circle:before{content:"\f033"}.fa-key:before{content:"\f034"}.fa-globe:before{content:"\f035"}.fa-exclamation-triangle:before{content:"\f036"}.fa-exclamation-circle:before{content:"\f037"}.fa-thumbtack:before{content:"\f038"}.fa-comments:before{content:"\f039"}.fa-edit:before{content:"\f03a"}.fa-plug:before{content:"\f03b"}.fa-newspaper:before{content:"\f03c"}.fa-paperclip:before{content:"\f03d"}.fa-camera:before{content:"\f03e"}.fa-wifi:before{content:"\f03f"}.fa-link:before{content:"\f040"}.fa-battery-three-quarters:before{content:"\f041"}.fa-bars:before{content:"\f042"}.fa-barcode:before{content:"\f043"}.fa-certificate:before{content:"\f044"}.fa-signature:before{content:"\f045"}.fa-bullseye:before{content:"\f046"}.fa-desktop:before{content:"\f047"}.fa-envelope:before{content:"\f048"}.fa-clipboard:before{content:"\f049"}.fa-paper-plane:before{content:"\f04a"}.fa-address-card:before{content:"\f04b"}.fa-inbox:before{content:"\f04c"}.fa-save:before{content:"\f04d"}.fa-hdd:before{content:"\f04e"}.fa-dot-circle:before{content:"\f04f"}.fa-user:before{content:"\f050"}.fa-user-lock:before{content:"\f051"}.fa-terminal:before{content:"\f052"}.fa-print:before{content:"\f053"}.fa-project-diagram:before{content:"\f054"}.fa-flag-checkered:before{content:"\f055"}.fa-wrench:before{content:"\f056"}.fa-laptop:before{content:"\f057"}.fa-archive:before{content:"\f058"}.fa-credit-card:before{content:"\f059"}.fa-windows:before{content:"\f05a"}.fa-clock:before{content:"\f05b"}.fa-search:before{content:"\f05c"}.fa-flask:before{content:"\f05d"}.fa-gamepad:before{content:"\f05e"}.fa-sticky-note:before{content:"\f05f"}.fa-sticky-note-o:before{content:"\f060"}.fa-question-circle:before{content:"\f061"}.fa-cube:before{content:"\f062"}.fa-folder-o:before{content:"\f063"}.fa-folder-open-o:before{content:"\f064"}.fa-database:before{content:"\f065"}.fa-unlock-alt:before{content:"\f066"}.fa-pencil-alt:before{content:"\f067"}.fa-image:before{content:"\f068"}.fa-book:before{content:"\f069"}.fa-list-alt:before{content:"\f06a"}.fa-user-secret:before{content:"\f06b"}.fa-utensils:before{content:"\f06c"}.fa-home:before{content:"\f06d"}.fa-star:before{content:"\f06e"}.fa-linux:before{content:"\f06f"}.fa-map-pin:before{content:"\f070"}.fa-apple:before{content:"\f071"}.fa-wikipedia-w:before{content:"\f072"}.fa-dollar-sign:before{content:"\f073"}.fa-mobile:before{content:"\f074"}.fa-spinner:before{content:"\f075"}.fa-minus-circle:before{content:"\f076"}.fa-keeweb:before{content:"\f077"}.fa-copy:before{content:"\f078"}.fa-clone:before{content:"\f079"}.fa-chevron-down:before{content:"\f07a"}.fa-chevron-left:before{content:"\f07b"}.fa-qrcode:before{content:"\f07c"}.fa-sort-alpha-down:before{content:"\f07d"}.fa-sort-alpha-down-alt:before{content:"\f07e"}.fa-sort-numeric-down:before{content:"\f07f"}.fa-sort-numeric-down-alt:before{content:"\f080"}.fa-sort-amount-down:before{content:"\f081"}.fa-language:before{content:"\f082"}.fa-circle:before{content:"\f083"}.fa-circle-o:before{content:"\f084"}.fa-arrow-circle-left:before{content:"\f085"}.fa-cloud-download-alt:before{content:"\f086"}.fa-caret-down:before{content:"\f087"}.fa-long-arrow-alt-left:before{content:"\f088"}.fa-long-arrow-alt-right:before{content:"\f089"}.fa-github-alt:before{content:"\f08a"}.fa-code:before{content:"\f08b"}.fa-html5:before{content:"\f08c"}.fa-chrome:before{content:"\f08d"}.fa-firefox-browser:before{content:"\f08e"}.fa-safari:before{content:"\f08f"}.fa-opera:before{content:"\f090"}.fa-edge:before{content:"\f091"}.fa-twitter:before{content:"\f092"}.fa-paint-brush:before{content:"\f093"}.fa-at:before{content:"\f094"}.fa-usb-token:before{content:"\f095"}.fa-bell:before{content:"\f096"}.fa-fingerprint:before{content:"\f097"}.fa-titlebar-close:before{content:"\f098"}.fa-titlebar-maximize:before{content:"\f099"}.fa-titlebar-minimize:before{content:"\f09a"}.fa-titlebar-restore:before{content:"\f09b"}.fa-window-maximize:before{content:"\f09c"}.fa-download:before{content:"\f09d"}.fa-exchange-alt:before{content:"\f09e"}.fa-folder-plus:before{content:"\f09f"}.fa-filter:before{content:"\f0a0"}</style><script>(()=>{var __webpack_modules__={6846:e=>{"use strict";e.exports=JSON.parse('{"retToApp":"return to app","name":"name","icon":"icon","title":"title","password":"password","user":"user","website":"website","tags":"tags","notes":"notes","entry":"entry","group":"group","noTitle":"no title","or":"or","history":"history","template":"template","templates":"templates","notImplemented":"Not Implemented","saveChanges":"Save changes","discardChanges":"Discard changes","advanced":"Advanced","shortcuts":"Shortcuts","help":"Help","settings":"Settings","plugins":"Plugins","ctrlKey":"ctrl","shiftKey":"shift","altKey":"alt","error":"error","oneMinute":"one minute","minutes":"{} minutes","oneHour":"one hour","hours":"{} hours","oneDay":"one day","days":"{} days","oneWeek":"one week","oneMonth":"one month","oneYear":"one year","cache":"cache","file":"file","device":"device","webdav":"WebDAV","dropbox":"Dropbox","gdrive":"Google Drive","onedrive":"OneDrive","msteams":"Microsoft Teams","menuAllItems":"All Items","menuColors":"Colors","menuTrash":"Trash","menuSetGeneral":"General","menuSetBrowser":"Browser","menuSetAbout":"About","menuSetDevices":"Devices","menuAlertNoTags":"No tags","menuAlertNoTagsBody":"You can add new tags while editing fields, in the Tags section.","menuEmptyTrash":"Empty Trash","menuEmptyTrashAlert":"Empty Trash?","menuEmptyTrashAlertBody":"You will not be able to put items back","menuItemCollapsed":"Double-click to expand","menuRestoreApp":"Open {}","menuQuitApp":"Quit {}","sysMenuAboutKeeWeb":"About {}","sysMenuServices":"Services","sysMenuHide":"Hide {}","sysMenuHideOthers":"Hide Others","sysMenuUnhide":"Show All","sysMenuQuit":"Quit {}","sysMenuEdit":"Edit","sysMenuUndo":"Undo","sysMenuRedo":"Redo","sysMenuCut":"Cut","sysMenuCopy":"Copy","sysMenuPaste":"Paste","sysMenuSelectAll":"Select All","sysMenuWindow":"Window","sysMenuMinimize":"Minimize","sysMenuClose":"Close Window","alertYes":"Yes","alertNo":"No","alertOk":"OK","alertCancel":"Cancel","alertSignIn":"Sign In","alertCopy":"Copy","alertClose":"Close","alertDoNotAsk":"Don\'t ask me anymore","alertAllow":"Allow","alertDeny":"Deny","appBeta":"WARNING: beta version, only for preview","footerOpen":"Open / New","footerSyncError":"Sync error","footerTitleGen":"Generate","footerTitleLock":"Lock","genLen":"Length","genNewPass":"New password","genPresetDefault":"default preset","genPresetDerived":"like old password","genPresetPronounceable":"pronounceable","genPresetMed":"medium length","genPresetLong":"long","genPresetPin4":"4-digit PIN","genPresetMac":"MAC address","genPresetHash128":"128-bit hash","genPresetHash256":"256-bit hash","genHidePass":"Hide password","genShowPass":"Show password","grpTitle":"Group","grpSearch":"Enable searching entries in this group","grpAutoType":"Enable auto-type","grpAutoTypeSeq":"Auto-type sequence","grpAutoTypeSeqDefault":"Use default auto-type sequence","grpTrash":"Delete group with all entries","tagTitle":"Tag","tagTrash":"Remove tag from all entries","tagRename":"Rename","tagTrashQuestion":"Remove tag from all entries?","tagTrashQuestionBody":"This tag will be removed from all entries. There will be no easy way to put it back.","tagExists":"Tag already exists","tagExistsBody":"Tag with this name already exists. Please choose another name.","tagBadName":"Bad name","tagBadNameBody":"Tag name cannot contain characters {}. Please remove them.","genPsTitle":"Generator Presets","genPsCreate":"New preset","genPsDelete":"Delete preset","genPsNew":"preset","genPsEnabled":"Show in presets list","genPsDefault":"Selected by default","genPsDefaultLength":"Default length","genPsUpper":"Uppercase latin letters","genPsLower":"Lowercase latin letters","genPsDigits":"Digits","genPsSpecial":"Special symbols","genPsBrackets":"Brackets","genPsHigh":"High ASCII characters","genPsAmbiguous":"Ambiguous symbols","genPsInclude":"Additional symbols to include","genPsExample":"Example of generated password","genPsPattern":"Pattern","genPsPatternHelp":"Patterns can be used to specify custom rules for selecting characters. For example, 1-AA will generate passwords starting with a digit, followed by a dash and two letters. You can use these symbols:","genPsAllRanges":"All symbols","genPsIncluded":"Additional symbols added above","keyChangeTitleRemote":"Master Key Changed","keyChangeMessageRemote":"Master key was changed for this database. Please enter a new key","keyChangeTitleExpired":"Master Key Expired","keyChangeMessageExpired":"Master key for this database is expired. Please enter a new key","keyChangeRepeatPassword":"Password, once again","keyEnter":"Enter","keyEsc":"Esc","iconFavTitle":"Download and use website favicon","iconSelCustom":"Select a custom icon","listEmptyTitle":"Empty","listEmptyAdd":"add with {} button above","listGroup":"Group","listNoWebsite":"no website","listNoUser":"no user","listNoAttachments":"no attachments","listAddTemplateHeader":"Templates","listAddTemplateBody1":"Templates allow you to create entries with one click. Add something to template entry and then click {} again to use this template.","listAddTemplateBody2":"You can always find your templates in {} group.","searchAddNew":"Add New","searchSort":"Sort","searchCreated":"Created","searchUpdated":"Updated","searchAttachments":"Attachments","searchAZ":"A {} Z","searchZA":"Z {} A","searchON":"Old {} New","searchNO":"New {} Old","searchShiftClickOr":"shift-click or","searchAdvTitle":"Toggle advanced search","searchSearchIn":"Search in","searchOther":"Other fields","searchProtect":"Secure fields","searchOptions":"Options","searchCase":"Match case","searchRegex":"RegEx","searchRank":"Auto","searchExact":"Exact","openOpen":"Open","openNew":"New","openNewFile":"New","openMore":"More","openDemo":"Demo","openGenerate":"Generate","openXml":"Import XML","openCaps":"Caps Lock is on","openClickToOpen":"Click to open a file","openKeyFile":"key file","openKeyFileDropbox":"(from dropbox)","openDropHere":"drop files here","openFailedRead":"Failed to read file","openNothingFound":"Nothing found","openNothingFoundBody":"We haven\'t found any suitable files.","openSelectFile":"Select a file","openSelectFileBody":"Select a file you would like to open","openPassFor":"Password for","openRemoveLastQuestion":"Delete local file?","openRemoveLastQuestionBody":"The file you are deleting is stored only inside the app. Delete it permanently?","openRemoveLastQuestionModBody":"The file you are deleting has local modifications. Delete it and discard these modifications?","openLocalFile":"Local file","openLocalFileBody":"You are going to open a file that will be stored inside the app. Changes you make will not be saved back to file system. To get the file with your data, export it from settings.","openLocalFileDontShow":"Don\'t show this again","openWrongFile":"Bad file","openWrongFileBody":"This file format is not supported. This app works with KeePass database format files (kdbx).","openKdbFileBody":"You are opening an old version format file (KDB). This app supports only new format (kdbx), please use KeePass v2 to convert between them.","openConfigHeader":"{} Settings","openUrl":"URL","openUrlDesc":"https://server/path/file.kdbx, or just file.kdbx","openUser":"User","openUserDesc":"WebDAV server user (if required)","openUserPlaceholder":"no user","openPass":"Password","openPassDesc":"WebDAV server password (this is not your file password)","openPassPlaceholder":"no password","openConfigError":"Error: {}","openConfigErrorNotFound":"File not found","openError":"Error","openErrorDescription":"There was an error opening file","openErrorDescriptionMaybeTouchIdChanged":"The error looks similar to what usually happens when Touch ID setup is changed, for example, you added or removed an additional finger. If it\'s the case, go to Settings, disable Touch ID, and re-enable it again.","openErrorFileNotFound":"File not found","openListErrorBody":"There was an error loading file list","openShowAllFiles":"Show all files","openFileNoCacheError":"File not found in the cache storage. This can happen because browser storage was cleaned up. To open the file, remove it from KeeWeb and add it again.","openChalRespHeader":"Challenge-Response","openChalRespLoading":"Loading the list of YubiKeys","openChalRespSelectYubiKey":"Select a YubiKey that you would like to use","openChalRespErrorEmpty":"No YubiKeys found.","openChalRespErrorEmptyMac":"First time using this feature on macOS? KeeWeb must be added to the Input Monitoring section of security settings.","detAttDownload":"Shift-click the attachment button to download it or","detAttDelToRemove":"Delete to remove","detAttSave":"Save as …","detEmpty":"Your passwords will be displayed here","detGroupRestore":"To restore this group, please drag it to any group outside trash","detHistoryClickPoint":"Click entry history timeline point to view state","detHistoryReturn":"return to entry","detHistoryRevert":"Revert to state","detHistoryDel":"Delete state","detHistoryEmpty":"empty","detHistoryModified":"modified","detHistoryRec":"record","detHistoryRecs":"records","detHistoryVersion":"Version","detHistorySaved":"Saved","detHistoryNoTitle":"no title","detHistoryCurState":"current state","detHistoryCurUnsavedState":"current unsaved state","detHistoryRevertAlert":"Revert to this history state?","detHistoryRevertAlertBody":"Your current state will be saved to history.","detHistoryDeleteAlert":"Delete this history state?","detHistoryDeleteAlertBody":"You will not be able to restore it.","detHistoryDiscardChangesAlert":"Discard changes made to entry?","detHistoryDiscardChangesAlertBody":"Unsaved changes will be lost, there will be no way back.","detBackToList":"back to list","detSetIconColor":"Change color","detSetIcon":"Change icon","detDropAttachments":"drop attachments here","detDelEntry":"Delete","detDelEntryPerm":"Delete permanently","detExpires":"Expires","detExpired":"expired","detGroup":"Group","detCreated":"Created","detUpdated":"Updated","detNetField":"New Field","detAttachments":"Attachments","detDelFromTrash":"Delete from trash?","detDelFromTrashBody":"You will not be able to put it back.","detDelFromTrashBodyHint":"To quickly remove all items from trash, click Empty icon in Trash menu.","detDelToTrash":"Delete the entry?","detDelToTrashBody":"The entry will be moved to the trash folder.","detFieldCopied":"Copied","detFieldCopiedTime":"Copied for {} seconds","detCopyHint":"You can copy field value by clicking its title","detMore":"more","detClickToAddField":"click to add a new field","detMenuAddNewField":"Add a new field","detMenuAddNewWebsite":"Add another website","detMenuShowEmpty":"Show empty fields","detMenuHideEmpty":"Hide empty fields","detMenuAddField":"Add {}","detMenuCopyPassword":"Copy password","detMenuCopyUser":"Copy user","detMenuCopyOtp":"Copy one-time code","detSetupOtp":"One-time codes","detClone":"Make a copy","detCopyEntryToClipboard":"Copy all fields","detClonedName":"Copy","detAutoType":"Auto-type","detAutoTypeSettings":"Auto-type settings","detAutoTypeEnabled":"Enable auto-type for this entry","detAutoTypeSequence":"Keystrokes","detAutoTypeInput":"Input","detAutoTypeShortcutsDesc":"{} or {} while the app is inactive","detAutoTypeObfuscation":"Mix real keystrokes with random","detAutoTypeWindow":"Window","detAutoTypeInputWindow":"Window title","detSetupOtpAlert":"Scan the QR code","detSetupOtpAlertBody":"Please copy the QR code which is displayed on the authorization page.","detSetupOtpAlertBody1":"1. go to the authorization page","detSetupOtpAlertBody2":"2. make a screenshot of the QR code {}","detSetupOtpAlertBody3":"3. paste it here {}","detSetupOtpAlertBody3Mobile":"3. select it or scan with your camera using Select/Scan button below","detSetupOtpAlertBody4":"If you can\'t scan the code, click Enter code manually","detSetupOtpManualButton":"Enter code manually","detSetupOtpScanButton":"Select/Scan","detSetupOtpAlertBodyWith":"with {}","detOtpImageError":"Error reading image","detOtpImageErrorBody":"Sorry, we could not read the image format, please contact the app authors with error details.","detOtpImageReading":"Reading QR code...","detOtpQrError":"QR code scan error","detOtpQrErrorBody":"Sorry, we could not read the QR code, please try once again or contact the app authors with error details.","detOtpQrWrong":"Wrong QR code","detOtpQrWrongBody":"Your QR code was successfully scanned but it doesn\'t contain one-time code data.","detOtpField":"One-time code","detOtpClickToTouch":"Click to generate","detOtpGenerating":"Generating...","detOtpTouch":"Touch your {}","detLockField":"Lock this field, so its content isn\'t searchable and visible. Displaying the content requires explicitly clicking it.","detUnlockField":"Unlock this field, making its content searchable and visible immediately","detRevealField":"Reveal","detHideField":"Hide","detAutoTypeField":"Auto type","detIssuesHideTooltip":"Hide this warning","detIssueWeakPassword":"The password is weak, it\'s recommended to change it.","detIssuePoorPassword":"The password is very weak, it\'s strongly recommended to change it.","detIssuePwnedPassword":"This password has been exposed in a data breach according to {}, it\'s recommended to change it.","detIssuePasswordCheckError":"There was an error checking password strength online.","detIssueOldPassword":"The password is old.","detIssueCloseAlertHeader":"Hide password issues","detIssueCloseAlertBody":"There are different ways you can hide this warning:","detIssueCloseAlertEntry":"Don\'t show for this entry","detIssueCloseAlertSettings":"Adjust global settings","autoTypeEntryFields":"Entry fields","autoTypeModifiers":"Modifier keys","autoTypeKeys":"Keys","autoTypeLink":"more...","autoTypeError":"Auto-type error","autoTypeErrorGeneric":"There was an error performing auto-type: {}","autoTypeErrorAccessibilityMacOS":"We tried to send keystrokes to the application, but it doesn\'t seem to work. This may happen because of missing permissions, click here to read more about it:","autoTypeErrorGlobal":"To use a system-wide shortcut, please focus the app where you want to type your password","autoTypeErrorNotInstalled":"{} is not installed","autoTypeHeader":"Auto-Type: Select","autoTypeMsgNoWindow":"We were unable to get active window title, start typing to search","autoTypeMsgMatchedByWindow":"Select a password for {}","autoTypeNoMatches":"no matches","autoTypeSelectionHint":"Type the autotype sequence","autoTypeSelectionHintAction":"Only type the password","autoTypeSelectionHintOpt":"Only type the username","autoTypeSelectionHintShift":"Other fields","autoTypeSelectionOtp":"One-time code","autoTypeUnlockMessage":"Unlock to auto-type","appSecWarn":"Not Secure!","appSecWarnBody1":"You have loaded this app with an insecure connection. Someone may be watching you and stealing your passwords. We strongly advise you to stop, unless you clearly understand what you\'re doing.","appSecWarnBody2":"Yes, your database is encrypted but no one can guarantee that the app has not been modified on the way to you.","appSecWarnBtn":"I understand the risks, continue","appUnsavedWarn":"Unsaved changes!","appUnsavedWarnBody":"You have unsaved files, if you close the app, changes will be lost.","appDontExitBtn":"Don\'t exit","appCannotLockAutoInit":"The app cannot be locked because autosave is disabled.","appCannotLock":"You have unsaved changes that will be lost. Continue?","appAutoSave":"Save changes automatically","appSaveError":"Save Error","appSaveErrorBody":"Failed to auto-save file","appSaveErrorBodyMul":"Failed to auto-save files:","appSaveErrorExitLoseChanges":"Quit and lose all changes","appSaveErrorExitLoseChangesBody":"You can either quit the app and lose all changes, or go file settings to export data","appSettingsError":"Error loading app","appSettingsErrorBody":"There was an error loading app settings. Please double check the app URL or contact your administrator.","appNotSupportedError":"Your browser doesn\'t support some important features we\'re using.","appTabWarn":"Too many tabs","appTabWarnBody":"KeeWeb cannot be used in two browser tabs simultaneously, please close this tab.","appRightsAlert":"Locking KeeWeb app","appRightsAlertBody1":"Your KeeWeb app is currently not guarded against unauthorized changes. We\'re asking you for permissions to make the app writable only for administrators.","appRightsAlertBody2":"Don\'t want to give permissions? You can do it yourself in Terminal","appBrowserAuthComplete":"Authentication is complete, you may close this tab now.","setGenTitle":"General Settings","setGenUpdate":"Update","setGenNewVersion":"New app version was released and downloaded","setGenReleaseNotes":"View release notes","setGenReloadToUpdate":"Reload to update","setGenUpdateManual":"A new version has been released. It will check for updates and install them automatically, but auto-upgrading from your version is not possible.","setGenDownloadUpdate":"Download update","setGenUpdateAuto":"Download and install automatically","setGenUpdateCheck":"Check but don\'t install","setGenNoUpdate":"Never check for updates","setGenUpdateChecking":"Checking for updates","setGenCheckUpdate":"Check for updates","setGenErrorChecking":"Error checking for updates","setGenLastCheckSuccess":"Last successful check was at {}","setGenLastCheckVer":"the latest version was {}","setGenCheckedAt":"Checked at","setGenLatestVer":"you are using the latest version","setGenNewVer":"new version {} available, released","setGenDownloadingUpdate":"Downloading update...","setGenExtractingUpdate":"Extracting update...","setGenCheckErr":"There was an error downloading new version","setGenNeverChecked":"Never checked for updates","setGenRestartToUpdate":"Restart KeeWeb to update","setGenDownloadAndRestart":"Download update and restart","setGenAppearance":"Appearance","setGenTheme":"Theme","setGenThemeDefault":"Default","setGenThemeDark":"Dark","setGenThemeLight":"Light","setGenThemeBlue":"Flat blue","setGenThemeFb":"Dark blue","setGenThemeBl":"Light blue","setGenThemeBrown":"Brownie","setGenThemeDb":"Dark brown","setGenThemeLb":"Light brown","setGenThemeTerminal":"Terminal","setGenThemeTe":"Terminal","setGenThemeLt":"Terminal light","setGenThemeHighContrast":"High contrast","setGenThemeHc":"High contrast","setGenThemeDc":"Dark contrast","setGenThemeSol":"Solarized","setGenThemeSd":"Solarized dark","setGenThemeSl":"Solarized light","setGenMoreThemes":"More themes","setGenAutoSwitchTheme":"Automatically switch between light and dark theme when possible","setGenLocale":"Language","setGenLocOther":"other languages are available as plugins","setGenFontSize":"Font size","setGenFontSizeNormal":"Normal","setGenFontSizeLarge":"Large","setGenFontSizeLargest":"Largest","setGenTitlebarStyle":"Window style (requires restart)","setGenTitlebarStyleDefault":"Default","setGenTitlebarStyleHidden":"Custom title","setGenTitlebarStyleHiddenInset":"Custom title, draggable window","setGenShowSubgroups":"Show entries from all subgroups","setGenTableView":"Entries list table view","setGenColorfulIcons":"Colorful custom icons in the list","setGenUseMarkdown":"Markdown in notes","setGenUseGroupIconForEntries":"Automatically use group icon for new entries","setGenDirectAutotype":"If only one matching entry is found, select that one automatically for auto-type","setGenAutoTypeTitleFilterEnabled":"Filter entries by title in auto-type","setGenFunction":"Function","setGenAutoSyncOnClose":"Automatically save and sync on close","setGenAutoSyncTimer":"Automatically save and sync periodically","setGenAutoSyncTimerOff":"Disabled","setGenAutoSyncTimerOnChange":"On every change","setGenAutoSyncTimerInterval":"Every {} minute(s)","setGenRememberKeyFiles":"Remember key files","setGenNoRememberKeyFiles":"Don\'t remember","setGenRememberKeyFilesData":"Store in the internal app storage","setGenRememberKeyFilesPath":"Remember only path to key files","setGenLockInactive":"If the app is inactive","setGenNoAutoLock":"Don\'t auto-lock","setGenLockMinutes":"In {} minutes","setGenLockHour":"In an hour","setGenLockHours":"In {} hours","setGenLockDay":"In a day","setGenClearClip":"Clear clipboard after copy","setGenNoClear":"Don\'t clear","setGenClearSeconds":"In {} seconds","setGenClearMinute":"In a minute","setGenMinInstead":"Minimize the app instead of close","setGenMinOnFieldCopy":"Minimize on field copy","setGenLock":"Auto lock","setGenLockMinimize":"When the app is minimized","setGenLockCopy":"On password copy","setGenLockAutoType":"On auto-type","setGenLockOrSleep":"When the computer is locked or put to sleep","setGenStorage":"Storage","setGenDisableOfflineStorage":"Don\'t cache loaded files in offline storage","setGenShortLivedStorageToken":"Use short-lived sessions in cloud storage providers","setGenStorageLogout":"Log out","setGenShowAdvanced":"Show advanced settings","setGenDevTools":"Show dev tools","setGenTryBeta":"Try beta version until restart","setGenTryBetaWarning":"Unsaved files","setGenTryBetaWarningBody":"Please save all files and click this button again","setGenShowAppLogs":"Show app logs","setGenReloadApp":"Reload the app","setGenFieldLabelDblClickAutoType":"Auto-type on double-clicking field labels","setGenTouchId":"Touch ID","setGenTouchIdDisabled":"Don\'t use Touch ID","setGenTouchIdMemory":"Unlock with Touch ID only while KeeWeb is running","setGenTouchIdFile":"Always use Touch ID instead of master password","setGenTouchIdPass":"Require master password after","setGenAudit":"Audit","setGenAuditPasswords":"Show warnings about password strength","setGenAuditPasswordEntropy":"Check password length and randomness","setGenExcludePinsFromAudit":"Never check short numeric PIN codes, such as 123456","setGenCheckPasswordsOnHIBP":"Check passwords using an online service {}","setGenHelpHIBP":"KeeWeb can check if your passwords have been previously exposed in a data breach using an online service. Your password cannot be recovered based on data sent online, however, the number of passwords checked this way may be exposed. More about your privacy when using this service can be found {}. If this option is enabled, KeeWeb will automatically check your passwords there.","setGenHelpHIBPLink":"here","setGenAuditPasswordAge":"Old passwords","setGenAuditPasswordAgeOff":"Don\'t show warnings about old passwords","setGenAuditPasswordAgeOneYear":"Show warnings for passwords older than one year","setGenAuditPasswordAgeYears":"Show warnings for passwords older than {} years","setFilePath":"File path","setFileStorage":"This file is loaded from {}.","setFileIntl":"This file is stored in the internal app storage","setFileLocalHint":"Want to work seamlessly with local files?","setFileDownloadApp":"Download a desktop app","setFileSave":"Save","setFileSaveTo":"Save to …","setFileClose":"Close","setFileSync":"Sync","setFileSyncVerb":"Sync","setFileSaveToXml":"XML","setFileSaveToHtml":"HTML","setFileLastSync":"Last sync","setFileLastSyncUnknown":"unknown","setFileSyncInProgress":"sync in progress","setFileSyncError":"Sync error","setFilePass":"Master password","setFileConfirmPass":"Confirm Master password","setFilePassChange":"to change your password, please type it in the Confirm field","setFilePassChanged":"your password was changed; leave the field blank to use the old password","setFilePassNotMatch":"passwords don\'t match, please type it again","setFileKeyFile":"Key file","setFileSelKeyFile":"Select a key file","setFileNames":"Names","setFileDefUser":"Default user","setFileEnableTrash":"Enable trash","setFileHistMode":"Entry history","setFileHistLimited":"Delete old history records automatically","setFileHistDisabled":"Don\'t save history","setFileHistUnlimited":"Keep history records forever","setFileHistLen":"History length, keep last records per entry","setFileHistSize":"History size, total MB per file","setFileBackups":"Backups","setFileBackupEnable":"Backup this file","setFileBackupPath":"Backup path","setFileBackupTime":"Make backups","setFileBackupNow":"Backup now","setFileBackupNowWorking":"Working...","setFileBackupError":"Backup error","setFileBackupErrorDescription":"Error writing backup file","setFileBackupErrorIsDir":"Backup path invalid","setFileBackupErrorIsDirDescription":"The backup path seems to point to a directory. Please specify a filename inside a directory instead.","setFileBackupOnSave":"Every time I save the file","setFileBackupDaily":"Daily","setFileBackupWeekly":"Weekly","setFileBackupMonthly":"Monthly","setFileBackupManually":"Manually, no auto-backups","setFileRounds":"Key encryption rounds","setFileKdfParams":"Key derivation function","setFileKdfParamsIter":"Iterations","setFileKdfParamsMem":"Memory, KB","setFileKdfParamsPar":"Parallelism","setFileKeyChangeForce":"Ask to change key after (days)","setFileUseKeyFile":"Use key file","setFileUseGenKeyFile":"Use the generated key file","setFileUseOldKeyFile":"Use the old key file","setFileGenKeyFile":"Generate a new key file","setFileDontUseKeyFile":"Don\'t use a key file","setFileEmptyPass":"Empty password","setFileEmptyPassBody":"Saving database with an empty password makes it completely unprotected. Do you really want to do it?","setFileSaveError":"Save error","setFileSaveErrorBody":"Error saving to file","setFileAlreadyExists":"Already exists","setFileAlreadyExistsBody":"File {} already exists. Overwrite it?","setFileUnsaved":"Unsaved changes","setFileUnsavedBody":"There are unsaved changes in this file","setFileCloseNoSave":"Close and lose changes","setFileDontClose":"Don\'t close","setFileFormatVersion":"File format","setFileExportRaw":"Exporting your passwords","setFileExportRawBody":"The exported file will contain your passwords, they will not be encrypted there. Would you like to proceed?","setFileDeviceIntro":"One-time codes from this {} will be displayed in the app.","setFileDeviceSettings":"Settings","setFileYubiKey":"YubiKey","setFileDontUseYubiKey":"Don\'t use a YubiKey","setFileRefreshYubiKeyList":"Refresh the list","setFileYubiKeyHeader":"YubiKey","setFileYubiKeyBody":"Using a YubiKey as a part of master key is dangerous and you may lose access to your passwords if something goes wrong. Have you made a backup of your file before changing this setting?","setFileYubiKeyErrorEmptyMac":"Looks like there\'s a YubiKey plugged in, but it\'s not visible. KeeWeb must be added to the Input Monitoring section of security settings to access YubiKeys.","setShTitle":"Shortcuts","setShShowAll":"show all items","setShColors":"show items with colors","setShTrash":"go to Trash","setShFind":"search, or just start typing","setShClearSearch":"clear search","setShCopyPass":"copy password or selected field","setShCopyUser":"copy user","setShCopyUrl":"copy website","setShAutoType":"auto-type selected entry","setShPrev":"go to previous item","setShNext":"go to next item","setShCreateEntry":"create entry","setShOpen":"open / new","setShSave":"save all files","setShGen":"generate password","setShSet":"app settings","setShCopyPassGlobal":"copy password","setShCopyOtp":"copy OTP","setShAutoTypeGlobal":"auto-type","setShCopyPassOnly":"copy password","setShRestoreApp":"open {}","setShGlobal":"These system-wide shortcuts work when the app is running in background. You can click them to select your own shortcut.","setShLock":"lock database","setShEdit":"Press a new key combination to set it as shortcut","setPlInstallTitle":"Install new plugins","setPlInstallDesc":"KeeWeb plugins add features, themes, and languages to KeeWeb. Plugins run with the same privileges as KeeWeb, they can access and manage all your passwords. Never install plugins you don\'t trust.","setPlInstallLabel":"Plugin URL","setPlInstallBtn":"Install","setPlInstallBtnProgress":"Installing","setPlUninstallBtn":"Uninstall","setPlDisableBtn":"Disable","setPlEnableBtn":"Enable","setPlUpdateBtn":"Update","setPlLocaleBtn":"Switch to this language","setPlThemeBtn":"Switch to this theme","setPlJs":"code","setPlCss":"styles","setPlLoc":"language","setPlCreatedBy":"Created by {}","setPlLoadTime":"took {} to load","setPlLastUpdate":"Last check for updates","setPlLoadError":"error loading plugin","setPlGalleryLoading":"Loading plugins, please wait a bit","setPlGalleryLoadError":"Error loading plugins","setPlInstallUrlTitle":"Add plugin from URL","setPlInstallUrlDesc":"If the plugin is not in the gallery, you can install it manually from URL","setPlOfficial":"Official KeeWeb plugin","setPlSearch":"Search for plugins","setPlDevelop":"Want to develop your own plugins?","setPlDevelopStart":"Start here","setPlTranslate":"Or you can {}","setPlTranslateLink":"translate the app to your language","setPlAutoUpdate":"Update automatically","setPlLoadGallery":"Load plugin gallery","setBrowserTitle":"Browser","setBrowserIntroDesktop":"KeeWeb can enter passwords using auto-type, however, a browser extension may be a more convenient way of doing it. KeeWeb supports two browser extensions:","setBrowserIntroKeeWebConnect":"the official KeeWeb extension, it\'s built with features of KeeWeb in mind, but you may miss some advanced capabilities that can be found in the other extension.","setBrowserIntroKeePassXcBrowser":"this extension was developed for KeePassXC, it\'s been on the market for a while and it is quite solid. The extension is not a part of KeeWeb and there may be compatibility issues.","setBrowserIntroWeb":"Install our browser extension to auto-fill passwords from KeeWeb on different pages. The browser extension will connect to a KeeWeb tab in your browser to fetch passwords. Click here to download the extension:","setBrowserNotEnabled":"Browser integration is not enabled, extensions won\'t be able to connect to KeeWeb. Use the checkboxes below to enable it:","setBrowserEnablePerBrowser":"Enable browser integration using the checkboxes below:","setBrowserFocusIfLocked":"Open KeeWeb if a browser extension tries to connect while there\'s no open file","setBrowserFocusIfEmpty":"Show the entry selection screen if there\'s no match found by URL","setBrowserOtherBrowsers":"Other browsers","setBrowserExtensionFor":"for {}","setBrowserExtensionNotSupported":"Not supported","setBrowserExtensionHelp":"How to install?","setBrowserExtensionInstall":"Install the extension","setBrowserExtensionKPXCWarnHeader":"{} will stop working","setBrowserExtensionKPXCWarnBody1":"Unfortunately it\'s not possible to connect one extension to several apps. If you connect the extension to KeeWeb, we\'ll overwrite its app association, which means that integration with {} will stop working. Even if you uncheck this checkbox, the association with {} won\'t be restored. To make it work again, configure browser integration in {} settings.","setBrowserExtensionKPXCWarnBody2":"Configure the extension to use KeeWeb?","setBrowserSessions":"Sessions","setBrowserSessionsEmpty":"No connected sessions.","setBrowserSessionsIntro":"These extensions are now connected to KeeWeb.","setBrowserSessionsActiveTooltip":"Active session","setBrowserSessionsActiveText":"This session is active. It can exchange data with KeeWeb based on the following permissions:","setBrowserSessionsInactiveTooltip":"Inactive session","setBrowserSessionsInactiveText":"This session is inactive. The extension is connected to KeeWeb, however, it hasn\'t tried to exchange data. When the extension requests anything, you will be able to choose what you want to share.","setBrowserSessionsDeniedTooltip":"Access denied","setBrowserSessionsDeniedText":"This session is inactive. The extension is connected to KeeWeb, however, you denied access to data.","setBrowserSessionsConnectedDate":"Connected","setBrowserSessionsTerminate":"Terminate this session","setBrowserSessionsAccessToFiles":"Allow access to files","setBrowserSessionsNoFileAccess":"The extension doesn\'t have access to any file, it won\'t be able to fetch passwords from KeeWeb.","setBrowserSessionsPasswordsRead":"Passwords read","setBrowserSessionsPasswordsWritten":"Passwords saved","setDevicesTitle":"Devices","setDevicesEnableUsb":"Enable interaction with USB devices","setDevicesYubiKeyIntro":"It\'s recommended to read {} before using a YubiKey.","setDevicesYubiKeyIntroLink":"this document","setDevicesYubiKeyToolsDesc":"To be able to use YubiKey in this mode, you need to install a tool called {}.","setDevicesYubiKeyToolsDesc2":"{} to get more information about this tool.","setDevicesYubiKeyToolsDescLink":"Click here","setDevicesYubiKeyToolsStatusChecking":"Checking if {} is installed","setDevicesYubiKeyToolsStatusOk":"{} is installed","setDevicesYubiKeyToolsStatusError":"{} is not installed or not working","setDevicesYubiKeyOtpTitle":"One-time codes","setDevicesYubiKeyOtpDesc":"YubiKey can be used to generate one-time codes for different services.","setDevicesYubiKeyOtpShowIcon":"Show the icon on the start screen","setDevicesYubiKeyOtpAutoOpen":"Automatically load one-time codes when there are open files","setDevicesYubiKeyOtpMatchEntries":"Show matching one-time codes in entries","setDevicesYubiKeyChalRespTitle":"Challenge-Response","setDevicesYubiKeyChalRespDesc":"It\'s also possible to use a YubiKey in challenge-response mode, so that a piece of private key used to encrypt files resides on a YubiKey.","setDevicesYubiKeyChalRespShow":"Show the option to use a YubiKey when opening files","setDevicesYubiKeyStuckWorkaround":"Reconnect the YubiKey if it seems to be stuck during loading","setDevicesYubiKeyRememberChalResp":"Remember challenge-response while the app is open","setAboutTitle":"About","setAboutBuilt":"This app is built with these awesome tools","setAboutLic":"License","setAboutLicComment":"The app itself and all included components are licensed under MIT license, unless otherwise specified","setAboutFirst":"This is an open-source app created by {}","setAboutSecond":"and licensed under {}.","setAboutSource":"The source code and issues are on {}.","setHelpFormat":"File Format","setHelpFormatBody":"This is a port of {} app built with web technologies. It understands files in KeePass format (kdbx). You can create such files (password databases) either in KeePass or in this app. The file format is 100% compatible and should be understood by both apps.","setHelpProblems":"Need some help?","setHelpProblems1":"If something goes wrong, please {}","setHelpProblems2":"or {}","setHelpOpenIssue":"open an issue on GitHub","setHelpContactLink":"contact the developer directly","setHelpAppInfo":"App information","setHelpOtherPlatforms":"Other platforms","setHelpDesktopApps":"Desktop apps","setHelpWebApp":"Web app","setHelpUpdates":"Updates","setHelpTwitter":"App twitter","dropboxSetupDesc":"Some configuration is required to use Dropbox in a self-hosted app. Please create your own Dropbox app and fill in its key below.","dropboxAppKey":"Dropbox app key","dropboxAppKeyDesc":"Copy the key from your Dropbox app (Developer settings)","dropboxAppKeyHint":"your app key","dropboxAppSecret":"Dropbox app secret","dropboxAppSecretDesc":"The secret can be found next to the app key","dropboxFolder":"App folder","dropboxFolderDesc":"If your app is linked to entire Dropbox (not app folder), set the folder with your kdbx files here","dropboxFolderSettingsDesc":"Select any folder in your Dropbox where files will be stored (root folder by default)","dropboxFolderPlaceholder":"default folder","dropboxLink":"Link the app to","dropboxLinkApp":"App folder (Apps/KeeWeb)","dropboxLinkFull":"Full Dropbox or any folder","dropboxLinkCustom":"Own Dropbox app","gdriveSharedWithMe":"Shared with me","gdriveSharedDrives":"Shared drives","webdavSaveMethod":"Save method","webdavSaveMove":"Upload a temporary file and move","webdavSavePut":"Overwrite the kdbx file with PUT","webdavNoLastModified":"Last-Modified HTTP header is absent","webdavStatReload":"Always reload the file instead of relying on Last-Modified HTTP header","launcherSave":"Save Passwords Database","launcherFileFilter":"KeePass files","authPopupRequired":"Pop-ups are blocked","authPopupRequiredBody":"Please allow pop-ups in your browser or try again.","exportFileInfo":"File information","exportHtmlName":"Name","exportHtmlDate":"Export date","exportGenerator":"Software","exportDescription":"This file is generated with {}.","importCsvTitle":"Import from CSV","importCsvRun":"Import","importIgnoreField":"Ignore","importTo":"Entries will be imported to","importNewFile":"New file","yubiKeyStuckError":"The YubiKey seems to be stuck, auto-repair can be enabled in app settings.","yubiKeyNoKeyHeader":"YubiKey required","yubiKeyNoKeyBody":"Please insert your YubiKey with serial number {}","yubiKeySlot":"slot","yubiKeyTouchRequestedHeader":"Touch your YubiKey","yubiKeyTouchRequestedBody":"Please touch your YubiKey with serial number {}","yubiKeyDisabledErrorHeader":"USB is disabled","yubiKeyDisabledErrorBody":"YubiKey is required to open this file, please enable USB devices in settings.","yubiKeyErrorWithCode":"YubiKey error, code {}.","bioOpenAuthPrompt":"open \\"{}\\"","extensionErrorNoOpenFiles":"No open files","extensionErrorUserRejected":"The request was denied","extensionErrorNoMatches":"No matching logins","extensionErrorAlertDisplayed":"Cannot ask a question now because there\'s another dialog displayed, please try again","extensionConnectHeader":"Extension data exchange","extensionConnectIntro":"A browser extension that identifies itself as {} tries to exchange data with KeeWeb.","extensionConnectUnknownActivity":"KeeWeb doesn\'t verify that the connected application is what it pretends to be. Approve the request only if you recognize this activity.","extensionConnectFiles":"In this session, allow access to:","extensionConnectAllOtherFiles":"All other files","extensionConnectAllFiles":"All files","extensionConnectAskGet":"Ask before returning passwords to the extension:","extensionConnectAskGetMultiple":"if there\'s more than one match","extensionConnectAskGetAlways":"always","extensionConnectAskSave":"Ask before saving new passwords to KeeWeb:","extensionConnectAskSaveAlways":"always","extensionConnectAskSaveAuto":"when it\'s not possible to save automatically","extensionConnectSettingsAreForSession":"Settings you select here are valid only for the active session. You can view and manage sessions in KeeWeb settings.","extensionUnlockMessage":"Unlock to connect a browser extension","extensionNewGroupHeader":"New group","extensionNewGroupBody":"{} is trying to create a new group. Allow this?","extensionNewGroupPath":"Group path","extensionNewGroupFile":"This group will be created in:","extensionSaveEntryHeader":"Save password","extensionSaveEntryBody":"{} is trying to save a password. Allow this?","extensionSaveEntryAuto":"Save other passwords automatically in this session","extensionSaveEntryNewGroup":"new group","extensionSelectPasswordFor":"Select a password for {}","selectEntryHeader":"Select entry","selectEntryEnterHint":"use the highlighted entry","selectEntryTypingHint":"Start typing to filter","selectEntryContains":"Contains text","selectEntrySubdomains":"Subdomains","selectEntryFieldHeader":"Select field","selectEntryFieldTouch":"Press the button on your device to generate a one-time code."}')},582:e=>{"use strict";e.exports=JSON.parse('{"retToApp":"zurück zur App","name":"Name","icon":"Icon","title":"Titel","password":"Passwort","user":"Benutzer","website":"Website","tags":"Tags","notes":"Notizen","entry":"Eintrag","group":"Gruppe","noTitle":"Kein Titel","or":"oder","history":"Verlauf","template":"Vorlage","templates":"Vorlagen","notImplemented":"Nicht implementiert","saveChanges":"Änderungen speichern","discardChanges":"Änderungen verwerfen","advanced":"Erweiterte Einstellungen","shortcuts":"Tastenkürzel","help":"Hilfe","settings":"Einstellungen","plugins":"Plugins","ctrlKey":"Strg","shiftKey":"Umschalt","altKey":"Alt","error":"Fehler","oneMinute":"Eine Minute","minutes":"{} Minuten","oneHour":"Eine Stunde","hours":"{} Stunden","oneDay":"Ein Tag","days":"{} Tage","oneWeek":"Eine Woche","oneMonth":"Ein Monat","oneYear":"Ein Jahr","cache":"Cache","file":"Datei","device":"Gerät","webdav":"WebDAV","dropbox":"Dropbox","gdrive":"Google Drive","onedrive":"OneDrive","menuAllItems":"Alle Einträge","menuColors":"Farben","menuTrash":"Papierkorb","menuSetGeneral":"Allgemein","menuSetAbout":"Info","menuSetDevices":"Geräte","menuAlertNoTags":"Keine Tags","menuAlertNoTagsBody":"Neue Tags können durch das Bearbeiten von Einträgen (Abschnitt „Tags“) hinzugefügt werden.","menuEmptyTrash":"Papierkorb leeren","menuEmptyTrashAlert":"Papierkorb leeren?","menuEmptyTrashAlertBody":"Die Einträge können nicht wiederhergestellt werden","menuItemCollapsed":"Doppelklick zum Aufklappen","menuRestoreApp":"{} öffnen","menuQuitApp":"{} beenden","sysMenuAboutKeeWeb":"Über {}","sysMenuServices":"Dienste","sysMenuHide":"{} ausblenden","sysMenuHideOthers":"Andere ausblenden","sysMenuUnhide":"Alle anzeigen","sysMenuQuit":"{} beenden","sysMenuEdit":"Bearbeiten","sysMenuUndo":"Rückgängig","sysMenuRedo":"Wiederherstellen","sysMenuCut":"Ausschneiden","sysMenuCopy":"Kopieren","sysMenuPaste":"Einfügen","sysMenuSelectAll":"Alles auswählen","sysMenuWindow":"Fenster","sysMenuMinimize":"Minimieren","sysMenuClose":"Fenster schließen","alertYes":"Ja","alertNo":"Nein","alertOk":"OK","alertCancel":"Abbrechen","alertSignIn":"Anmelden","alertCopy":"Kopieren","alertClose":"Schließen","alertDoNotAsk":"Nicht mehr nachfragen","appBeta":"ACHTUNG: Beta-Version, nur für Vorschau-Zwecke","footerOpen":"Öffnen / Neu","footerSyncError":"Synchronisierungsfehler","footerTitleGen":"Generieren","footerTitleLock":"Sperren","genLen":"Länge","genNewPass":"Neues Passwort","genPresetDefault":"Standardeinstellung","genPresetDerived":"Wie das alte Passwort","genPresetPronounceable":"aussprechbar","genPresetMed":"Durchschnittliche Länge","genPresetLong":"lang","genPresetPin4":"4-stellige PIN","genPresetMac":"MAC-Adresse","genPresetHash128":"128-Bit-Hash","genPresetHash256":"256-Bit-Hash","genHidePass":"Passwort ausblenden","genShowPass":"Passwort einblenden","grpTitle":"Gruppe","grpSearch":"Suche für Einträge in dieser Gruppe aktivieren","grpAutoType":"Auto-Type aktivieren","grpAutoTypeSeq":"Auto-Type-Sequenz","grpAutoTypeSeqDefault":"Standard-Auto-Type-Sequenz verwenden","grpTrash":"Gruppe und alle enthaltenen Einträge löschen","tagTitle":"Tag","tagTrash":"Diesen Tag von allen Einträgen entfernen","tagRename":"Umbenennen","tagTrashQuestion":"Diesen Tag von allen Einträgen entfernen?","tagTrashQuestionBody":"Der Tag wird von allen Einträgen entfernt. Diese Aktion kann nicht rückgängig gemacht werden.","tagExists":"Tag existiert bereits","tagExistsBody":"Ein Tag mit diesem Namen ist bereits vorhanden. Bitte einen anderen Namen wählen.","tagBadName":"Ungültiger Name","tagBadNameBody":"Der Tag-Name darf folgende Zeichen nicht enthalten: {}. Bitte diese entfernen.","genPsTitle":"Generator-Voreinstellungen","genPsCreate":"Neue Voreinstellung","genPsDelete":"Voreinstellung löschen","genPsNew":"Voreinstellung","genPsEnabled":"In Voreinstellungsliste anzeigen","genPsDefault":"Standardmäßig ausgewählt","genPsDefaultLength":"Standardlänge","genPsUpper":"Lateinische Großbuchstaben","genPsLower":"Lateinische Kleinbuchstaben","genPsDigits":"Ziffern","genPsSpecial":"Sonderzeichen","genPsBrackets":"Klammern","genPsHigh":"Erweiterte ASCII-Zeichen","genPsAmbiguous":"Ähnliche Zeichen","genPsInclude":"Zusätzliche Symbole angeben","genPsExample":"Beispiel für ein generiertes Passwort","genPsPattern":"Muster","genPsPatternHelp":"Mit Mustern können eigene Regeln zur Auswahl von Zeichen festgelegt werden. Beispielsweise werden mit 1-AA Passwörter generiert, die mit einer Ziffer starten, gefolgt von einem Bindestrich und zwei Großbuchstaben. Folgende Symbole stehen zur Verfügung:","genPsAllRanges":"Alle Zeichen","genPsIncluded":"Zusätzliche oben hinzugefügte Zeichen","keyChangeTitleRemote":"Hauptschlüssel geändert","keyChangeMessageRemote":"Der Hauptschlüssel für diese Datenbank wurde geändert. Bitte das neue Passwort eingeben.","keyChangeTitleExpired":"Hauptschlüssel abgelaufen","keyChangeMessageExpired":"Der Hauptschlüssel für diese Datenkbank ist abgelaufen. Bitte geben Sie einen neuen Schlüssel ein.","keyChangeRepeatPassword":"Passwort (Wiederholung)","keyEnter":"Enter","iconFavTitle":"Website-Symbol herunterladen und verwenden","iconSelCustom":"Eigenes Icon auswählen","listEmptyTitle":"Leer","listEmptyAdd":"Zum Anlegen neuer Einträge den obigen {} Button benutzen","listGroup":"Gruppe","listNoWebsite":"keine Website","listNoUser":"kein Benutzer","listNoAttachments":"keine Anhänge","listAddTemplateHeader":"Vorlagen","listAddTemplateBody1":"Vorlagen ermöglichen es, Einträge mit nur einem Klick zu erstellen. Fügen Sie etwas zum Vorlage-Eintrag hinzu und klicken Sie auf {}, um diese Vorlage zu verwenden.","listAddTemplateBody2":"Sie können Ihre Vorlagen in der Gruppe “{}” finden.","searchAddNew":"Hinzufügen","searchSort":"Sortierung","searchCreated":"Erstelldatum","searchUpdated":"Änderungsdatum","searchAttachments":"Anhänge","searchAZ":"A {} Z","searchZA":"Z {} A","searchON":"Alt {} Neu","searchNO":"Neu {} Alt","searchShiftClickOr":"Umschalt-Klick oder","searchAdvTitle":"Erweiterte Suche","searchSearchIn":"Durchsuchen","searchOther":"Andere Felder","searchProtect":"Geschützte Felder","searchOptions":"Suchoptionen","searchCase":"Groß/klein","searchRegex":"RegEx","searchRank":"Automatisch","searchExact":"Exakt","openOpen":"Öffnen","openNew":"Neu","openNewFile":"Neu","openMore":"Mehr","openDemo":"Demo","openGenerate":"Generieren","openXml":"XML importieren","openCaps":"Feststelltaste ist aktiviert","openClickToOpen":"Hier klicken, um eine Datei zu öffnen","openKeyFile":"Schlüsseldatei","openKeyFileDropbox":"(von Dropbox)","openDropHere":"Dateien hier ablegen","openFailedRead":"Datei konnte nicht gelesen werden","openNothingFound":"Nichts gefunden","openNothingFoundBody":"Es konnten keine kompatiblen Dateien gefunden werden.","openSelectFile":"Datei auswählen","openSelectFileBody":"Wählen Sie eine Datei zum Öffnen aus","openPassFor":"Passwort für","openRemoveLastQuestion":"Lokale Datei löschen?","openRemoveLastQuestionBody":"Die Datei, die Sie löschen möchten, ist nur innerhalb der App gespeichert. Möchten Sie diese unwiederbringlich löschen?","openRemoveLastQuestionModBody":"Die Datei, die Sie löschen möchten, beinhaltet lokale Änderungen. Möchten Sie diese Änderungen verwerfen und die Datei löschen?","openLocalFile":"Lokale Datei","openLocalFileBody":"Sie sind dabei, eine Datei zu öffnen, die innerhalb der App gespeichert wird. Wenn Sie an dieser Datei Änderungen vornehmen, werden diese nicht im Dateisystem gespeichert. Um die Datei mit den Änderungen zu erhalten, können Sie diese aus den Einstellungen heraus exportieren.","openLocalFileDontShow":"Nicht wieder anzeigen","openWrongFile":"Inkompatibles Dateiformat","openWrongFileBody":"Dieses Dateiformat ist nicht kompatibel. Die App unterstützt KeePass-Datenbanken im kdbx-Format.","openKdbFileBody":"Sie versuchen, eine alte KeePass-Datenbank im kdb-Format zu öffnen. Diese App unterstützt nur das neuere kdbx-Format. Bitte verwenden Sie KeePass v2, um diese Datei umzuwandeln.","openConfigHeader":"{} Einstellungen","openUrl":"URL","openUrlDesc":"https://server/pfad/datei.kdbx, oder einfach datei.kdbx","openUser":"Benutzername","openUserDesc":"WebDAV-Server-Benutzername (falls erforderlich)","openUserPlaceholder":"kein Benutzername","openPass":"Passwort","openPassDesc":"WebDAV-Server-Passwort (nicht das KDBX-Datei-Passwort)","openPassPlaceholder":"kein Passwort","openConfigError":"Fehler: {}","openConfigErrorNotFound":"Datei nicht gefunden","openError":"Fehler","openErrorDescription":"Beim Öffnen der Datei ist ein Fehler aufgetreten","openErrorFileNotFound":"Datei nicht gefunden","openListErrorBody":"Dateien konnten nicht geladen werden","openShowAllFiles":"Alle Dateien anzeigen","openFileNoCacheError":"Die Datei wurde im Cache-Speicher nicht gefunden. Möglicherweise wurde Ihr Browser-Speicher geleert. Um die Datei zu öffnen, entfernen Sie sie aus KeeWeb und fügen Sie sie erneut hinzu","openChalRespHeader":"Challenge-Response","openChalRespLoading":"Liste mit YubiKeys wird geladen","openChalRespSelectYubiKey":"Wählen Sie den YubiKey aus, den Sie benutzen wollen","openChalRespErrorEmpty":"Keine YubiKeys gefunden.","openChalRespErrorEmptyMac":"Verwenden Sie dieses Feature zum ersten Mal auf MacOS? KeeWeb muss in Ihren Sicherheitseinstellung im Input-Monitoring-Abschnitt hinzugefügt werden.","detAttDownload":"Umschalttaste + Klick auf den Anhang-Button zum Herunterladen oder","detAttDelToRemove":"Backspace zum Entfernen","detAttSave":"Speichern unter …","detEmpty":"Ihre Passwörter werden hier angezeigt","detGroupRestore":"Ziehen Sie diese Gruppe in eine andere Gruppe als den Papierkorb, um sie wiederherzustellen.","detHistoryClickPoint":"Klicken Sie auf einen der Punkte im Verlauf, um den entsprechenden Zustand des Eintrags anzuzeigen","detHistoryReturn":"zurück zum Eintrag","detHistoryRevert":"Auf diese Version zurücksetzen","detHistoryDel":"Version löschen","detHistoryEmpty":"leer","detHistoryModified":"geändert","detHistoryRec":"Version","detHistoryRecs":"Versionen","detHistoryVersion":"Version","detHistorySaved":"Gespeichert","detHistoryNoTitle":"keine Bezeichnung","detHistoryCurState":"aktuelle Version","detHistoryCurUnsavedState":"aktuelle ungespeicherte Version","detHistoryRevertAlert":"Zu diesem Stand zurückkehren?","detHistoryRevertAlertBody":"Ihr aktueller Stand wird in der Historie gesichert.","detHistoryDeleteAlert":"Diesen Stand löschen?","detHistoryDeleteAlertBody":"Sie können ihn nicht wiederherstellen.","detHistoryDiscardChangesAlert":"Änderungen an diesem Eintrag verwerfen?","detHistoryDiscardChangesAlertBody":"Ungespeicherte Änderungen gehen dabei unwiderruflich verloren.","detBackToList":"zurück zur Liste","detSetIconColor":"Farbe ändern","detSetIcon":"Symbol ändern","detDropAttachments":"Anhänge hier ablegen","detDelEntry":"Löschen","detDelEntryPerm":"Dauerhaft löschen","detExpires":"Ablaufdatum","detExpired":"abgelaufen","detGroup":"Gruppe","detCreated":"Erstellt","detUpdated":"Geändert","detNetField":"Neues Feld","detAttachments":"Anhänge","detDelFromTrash":"Aus dem Papierkorb löschen?","detDelFromTrashBody":"Es wird keine Möglichkeit zur Wiederherstellung geben.","detDelFromTrashBodyHint":"Um alle Dateien aus dem Papierkorb zu entfernen, klicken Sie auf das „Papierkorb leeren“-Symbol im Papierkorb-Menüpunkt.","detDelToTrash":"Diesen Eintrag löschen?","detDelToTrashBody":"Der Eintrag wird in den Papierkorb verschoben.","detFieldCopied":"Kopiert","detFieldCopiedTime":"Kopiert für {} Sekunden","detCopyHint":"Sie können den Inhalt eines Feldes kopieren, indem Sie auf seine Beschriftung klicken","detMore":"mehr","detClickToAddField":"Klicken, um ein neues Feld hinzuzufügen","detMenuAddNewField":"Neues Feld hinzufügen","detMenuShowEmpty":"Leere Felder anzeigen","detMenuHideEmpty":"Leere Felder ausblenden","detMenuAddField":"{} hinzufügen","detMenuCopyPassword":"Passwort kopieren","detMenuCopyUser":"Benutzer kopieren","detMenuCopyOtp":"Einmal-Code kopieren","detSetupOtp":"Einmal-Codes","detClone":"Kopie erstellen","detCopyEntryToClipboard":"Alle Felder kopieren","detClonedName":"Kopie","detAutoType":"Auto-Type","detAutoTypeSettings":"Auto-Type Einstellungen","detAutoTypeEnabled":"Auto-Type für diesen Eintrag aktivieren","detAutoTypeSequence":"Tastenfolge","detAutoTypeInput":"Eingabe","detAutoTypeShortcutsDesc":"{} oder {} während die App inaktiv ist","detAutoTypeObfuscation":"Echte Tastenanschläge mit zufälligen mischen","detAutoTypeWindow":"Fenster","detAutoTypeInputWindow":"Fenstertitel","detSetupOtpAlert":"QR-Code einscannen","detSetupOtpAlertBody":"Bitte kopieren Sie den QR-Code, der auf der Autorisierungsseite angezeigt wird.","detSetupOtpAlertBody1":"1. Gehen Sie zur Autorisierungsseite","detSetupOtpAlertBody2":"2. Erstellen Sie einen Screenshot des QR-Codes {}","detSetupOtpAlertBody3":"3. Fügen Sie ihn hier ein {}","detSetupOtpAlertBody3Mobile":"3. Markieren Sie ihn oder scannen Sie ihn mit Ihrer Kamera mit dem untenstehenden Markieren/Scannen-Button","detSetupOtpAlertBody4":"Wenn Sie den Code nicht einscannen können, klicken Sie bitte auf “Code manuell eingeben”","detSetupOtpManualButton":"Code manuell eingeben","detSetupOtpScanButton":"Markieren/Scannen","detSetupOtpAlertBodyWith":"mit {}","detOtpImageError":"Fehler beim Einlesen des Bildes","detOtpImageErrorBody":"Entschuldigung, wir konnten das Bildformat nicht lesen. Bitte kontaktieren Sie den Hersteller mit Einzelheiten zu diesem Fehler.","detOtpImageReading":"QR-Code wird eingelesen …","detOtpQrError":"QR-Code Lesefehler","detOtpQrErrorBody":"Der QR-Code konnte leider nicht eingelesen werden. Bitte versuchen Sie es noch einmal oder kontaktieren Sie den Hersteller mit Einzelheiten zum aufgetretenen Fehler.","detOtpQrWrong":"Fehlerhafter QR-Code","detOtpQrWrongBody":"Ihr QR-Code wurde erfolgreich eingelesen, enthält jedoch keinen Einmal-Code.","detOtpField":"Einmal-Code","detOtpClickToTouch":"Zum Erzeugen hier klicken","detOtpGenerating":"Wird erzeugt …","detOtpTouch":"Berühren Sie Ihren {}","detLockField":"Dieses Feld sperren, damit der Inhalt nicht durchsuchbar ist und angezeigt wird. Um ihn anzuzeigen, muss er angeklickt werden.","detUnlockField":"Dieses Feld entsperren. Dies führt dazu, dass der Inhalt direkt angezeigt wird und durchsuchbar ist.","detRevealField":"Anzeigen","detHideField":"Verbergen","detAutoTypeField":"Auto-Type","detIssuesHideTooltip":"Diese Warnung verstecken","detIssueWeakPassword":"Das Passwort ist schwach, es wird empfohlen es zu ändern.","detIssuePoorPassword":"Das Passwort ist schwach, es wird dringend empfohlen es zu ändern.","detIssuePwnedPassword":"Dieses Passwort wurde laut {} in einem Datenleck gefunden, es wird empfohlen das Passwort zu ändern.","detIssuePasswordCheckError":"Es gab einen Fehler bei der online-überprüfung des Passwort.","detIssueOldPassword":"Das Passwort ist alt.","detIssueCloseAlertHeader":"Verstecke Passwortmeldungen","detIssueCloseAlertBody":"Es gibt verschiedene Möglichkeiten diese Warnung zu verstecken:","detIssueCloseAlertEntry":"Nicht für diesen Eintrag anzeigen.","detIssueCloseAlertSettings":"Globale Einstellungen anpassen","autoTypeEntryFields":"Feld-Platzhalter","autoTypeModifiers":"Hilfstasten","autoTypeKeys":"Tasten","autoTypeLink":"mehr …","autoTypeError":"Auto-Type-Fehler","autoTypeErrorGeneric":"Während der Ausführung von Auto-Type ist ein Fehler aufgetreten: {}","autoTypeErrorGlobal":"Um globale Tastenkürzel zu nutzen, wechseln Sie bitte zu der Anwendung, in der Sie das Passwort eingeben wollen.","autoTypeErrorNotInstalled":"{} ist nicht installiert","autoTypeHeader":"Auto-Type: Auswählen","autoTypeMsgNoWindow":"Wir konnten den Titel des aktiven Fensters leider nicht auslesen. Fangen Sie einfach an zu tippen, um nach dem richtigen Eintrag zu suchen.","autoTypeMsgMatchedByWindow":"Passwort auswählen für {}","autoTypeNoMatches":"keine passenden Einträge","autoTypeSelectionHint":"Die Auto-Type-Sequenz eintippen","autoTypeSelectionHintAction":"Nur das Passwort eintippen","autoTypeSelectionHintOpt":"Nur den Benutzernamen eintippen","autoTypeSelectionHintShift":"Andere Felder","autoTypeSelectionOtp":"Einmal-Code","appSecWarn":"Unsichere Verbindung!","appSecWarnBody1":"Sie haben diese App über eine ungesicherte Verbindung geöffnet, Sie könnten beobachtet und Ihre Passwörter könnten gestohlen werden. Wir empfehlen Ihnen dringend, die App hier nicht weiter zu nutzen, wenn Sie nicht genau wissen, was Sie tun.","appSecWarnBody2":"Ihre Datenbank ist zwar verschlüsselt, aber es kann nicht sichergestellt werden, dass die App nicht auf dem Web vom Server zu Ihrem Browser manipuliert wurde.","appSecWarnBtn":"Ich habe das Risiko verstanden, trotzdem fortfahren","appUnsavedWarn":"Ungespeicherte Änderungen!","appUnsavedWarnBody":"Sie haben ungespeicherte Änderungen. Wenn Sie die App schließen, gehen diese verloren.","appDontExitBtn":"App nicht verlassen","appCannotLockAutoInit":"Die App kann nicht gesperrt werden, da automatisches Speichern deaktiviert ist.","appCannotLock":"Sie haben ungespeicherte Änderungen, die verloren gehen. Fortfahren?","appAutoSave":"Änderungen automatisch speichern","appSaveError":"Fehler beim Speichern","appSaveErrorBody":"Automatisches Speichern fehlgeschlagen","appSaveErrorBodyMul":"Automatisches Speichern fehlgeschlagen:","appSaveErrorExitLoseChanges":"Schließen und alle Änderungen verlieren","appSaveErrorExitLoseChangesBody":"Du kannst entweder die App schließen und alle Änderungen verlieren, oder gehe in die Dateieinstellungen und exportiere die Daten","appSettingsError":"Fehler beim Laden der App","appSettingsErrorBody":"Es gab einen Fehler beim Laden der App-Einstellungen. Bitte überprüfen Sie die App-URL oder kontaktieren Sie Ihren Systemadministrator.","appNotSupportedError":"Ihr Browser unterstützt einige wichtige Funktionen nicht, die für diese App benötigt werden.","appTabWarn":"Zu viele Tabs","appTabWarnBody":"KeeWeb kann nicht in mehreren Browser-Tabs gleichzeitig genutzt werden, bitte schließen Sie diesen Tab.","appRightsAlert":"Schreibschutz für KeeWeb wird eingerichtet","appRightsAlertBody1":"Ihre KeeWeb-Anwendung ist nicht gegen Änderungen von außen gesichert. Um diesen Schreibschutz einzurichten, benötigt die App Administratorrechte.","appRightsAlertBody2":"Sie möchten der App keine Administratorrechte erteilen? Mit folgendem Befehl können Sie den Schreibschutz auch von Hand im Terminal aktivieren","appBrowserAuthComplete":"Die Authentifizierung ist abgeschlossen, Sie können diesen Tab jetzt schließen.","setGenTitle":"Allgemeine Einstellungen","setGenUpdate":"Update","setGenNewVersion":"Eine neue Version der App ist verfügbar und wurde heruntergeladen","setGenReleaseNotes":"Versionshinweise anzeigen","setGenReloadToUpdate":"Seite aktualisieren, um das Update durchzuführen","setGenUpdateManual":"Eine neue Version ist verfügbar. Sie wird nach Updates suchen und diese automatisch installieren, ein automatisches Update Ihrer Version ist aber nicht möglich.","setGenDownloadUpdate":"Update herunterladen","setGenUpdateAuto":"Automatisch herunterladen und installieren","setGenUpdateCheck":"Auf Updates überprüfen, aber nicht installieren","setGenNoUpdate":"Nie nach Updates suchen","setGenUpdateChecking":"Updates werden gesucht","setGenCheckUpdate":"Nach Updates suchen","setGenErrorChecking":"Updatesuche fehlgeschlagen","setGenLastCheckSuccess":"Letzte erfolgreiche Überprüfung am {}","setGenLastCheckVer":"Die aktuelle Version war {}","setGenCheckedAt":"Überprüft am","setGenLatestVer":"Sie haben die aktuellste Version","setGenNewVer":"Neue Version {} verfügbar, veröffentlicht am","setGenDownloadingUpdate":"Update wird heruntergeladen …","setGenExtractingUpdate":"Update wird entpackt …","setGenCheckErr":"Beim Herunterladen der neuen Version ist ein Fehler aufgetreten","setGenNeverChecked":"Nie nach Updates gesucht","setGenRestartToUpdate":"App neu starten, um das Update durchzuführen","setGenDownloadAndRestart":"Update herunterladen und App neu starten","setGenAppearance":"Oberfläche","setGenTheme":"Theme","setGenThemeDefault":"Standard","setGenThemeDark":"Dunkel","setGenThemeLight":"Hell","setGenThemeBlue":"Flach blau","setGenThemeFb":"Mattblau","setGenThemeBl":"Hell blau","setGenThemeBrown":"Brownie","setGenThemeDb":"Dunkelbraun","setGenThemeLb":"Hell braun","setGenThemeTerminal":"Terminal","setGenThemeTe":"Terminal","setGenThemeLt":"Hell Terminal","setGenThemeHighContrast":"Hoher Kontrast","setGenThemeHc":"Hoher Kontrast","setGenThemeDc":"Dunkel Kontrast","setGenThemeSol":"Solarized","setGenThemeSd":"Solarisiert dunkel","setGenThemeSl":"Solarisiert hell","setGenMoreThemes":"Mehr Themes","setGenAutoSwitchTheme":"Automatisch zwischen hellem und dunklem Thema umschalten, sofern möglich","setGenLocale":"Sprache","setGenLocOther":"Andere Sprachen sind als Plugins verfügbar.","setGenFontSize":"Schriftgröße","setGenFontSizeNormal":"Standard","setGenFontSizeLarge":"Groß","setGenFontSizeLargest":"Größte","setGenTitlebarStyle":"Fensterstil (erfordert Neustart des Programms)","setGenTitlebarStyleDefault":"Standard","setGenTitlebarStyleHidden":"Eigener Titel","setGenTitlebarStyleHiddenInset":"Eigener Titel, verschiebbares Fenster","setGenShowSubgroups":"Einträge aus allen Untergruppen anzeigen","setGenTableView":"Einträge in Tabellenansicht anzeigen","setGenColorfulIcons":"Eigene Symbole in der Listenansicht farbig anzeigen","setGenUseMarkdown":"Markdown in Notizen","setGenUseGroupIconForEntries":"Für neue Einträge automatisch das Gruppensymbol verwenden","setGenDirectAutotype":"Wenn nur ein passender Eintrag gefunden wird, diesen automatisch für Auto-Type auswählen","setGenFunction":"Arbeitsweise","setGenAutoSyncOnClose":"Beim Schließen speichern und synchronisieren","setGenAutoSyncTimer":"Regelmäßig speichern und synchronisieren","setGenAutoSyncTimerOff":"Abgeschaltet","setGenAutoSyncTimerInterval":"Alle {} Minuten","setGenRememberKeyFiles":"Schlüsseldateien merken","setGenNoRememberKeyFiles":"Nicht merken","setGenRememberKeyFilesData":"Im internen App-Speicher ablegen","setGenRememberKeyFilesPath":"Nur Speicherort der Schlüsseldateien merken","setGenLockInactive":"Wenn die App inaktiv ist","setGenNoAutoLock":"Nicht automatisch sperren","setGenLockMinutes":"Nach {} Minuten","setGenLockHour":"In einer Stunde","setGenLockHours":"Nach {} Stunden","setGenLockDay":"Nach einem Tag","setGenClearClip":"Zwischenablage nach dem Kopieren leeren","setGenNoClear":"Nicht leeren","setGenClearSeconds":"In {} Sekunden","setGenClearMinute":"Nach einer Minute","setGenMinInstead":"App beim Schließen stattdessen minimieren","setGenLock":"Automatisch sperren","setGenLockMinimize":"Beim Minimieren der App","setGenLockCopy":"Nach dem Kopieren eines Passworts","setGenLockAutoType":"Bei Auto-Type","setGenLockOrSleep":"Bei Aktivierung von Bildschirmsperre oder Ruhezustand","setGenStorage":"Synchronisierung","setGenDisableOfflineStorage":"Geladene Dateien nicht in Offline-Speicher zwischenspeichern","setGenStorageLogout":"Abmelden","setGenShowAdvanced":"Erweiterte Einstellungen anzeigen","setGenDevTools":"Entwicklerwerkzeuge anzeigen","setGenTryBeta":"Betaversion bis zum Schließen der App ausprobieren","setGenTryBetaWarning":"Ungespeicherte Dateien","setGenTryBetaWarningBody":"Bitte speichern Sie alle Dateien und klicken erneut auf diese Schaltfläche","setGenShowAppLogs":"App-Logs anzeigen","setGenReloadApp":"App neu laden","setGenFieldLabelDblClickAutoType":"Auto-Type durch Anklicken von Beschriftungen aktivieren","setGenTouchId":"Fingerabdruck","setGenTouchIdDisabled":"Fingerabdruck nicht benutzen","setGenTouchIdMemory":"Nur mit Fingerabdruck entsperren, wenn KeeWeb aktiv ist","setGenTouchIdFile":"Benutze immer den Fingerabdruck anstatt das Master-Passwort","setGenTouchIdPass":"Benötige Master-Passwort nach","setGenAudit":"Audit","setGenAuditPasswords":"Warnungen für schwache Passwörter anzeigen","setGenAuditPasswordEntropy":"Passwortlänge und Zufälligkeit prüfen","setGenExcludePinsFromAudit":"Kurze Pin-Codes niemals prüfen (z. B. 12345)","setGenHelpHIBP":"KeeWeb kann überprüfen ob deine Passwörter bei einem früheren Datenleck veröffentlicht wurden. Deine Passwörter können nicht beim übertragen ausgelesen werden, aber die Anzahl der überprüften Passwörter kann möglicherweise entdeckt werden. {} kannst du mehr über den Datenschutz beim Nutzen dieses Dienstes erfahren. Wenn diese Option aktiviert ist überprüft KeeWeb deine Passwörter automatisch.","setGenHelpHIBPLink":"hier","setGenAuditPasswordAge":"Alte Passwörter","setGenAuditPasswordAgeOff":"Zeige keine Warnungen über alte Passwörter","setGenAuditPasswordAgeOneYear":"Zeige Warnungen für Passwörter die über ein Jahr alt sind","setGenAuditPasswordAgeYears":"Zeige Warnungen für Passwörter die über {} Jahre alt sind","setFilePath":"Dateipfad","setFileStorage":"Diese Datei wird von {} geladen.","setFileIntl":"Diese Datei ist im internen App-Speicher abgelegt","setFileLocalHint":"Sie wollen nahtlos mit lokalen Dateien arbeiten?","setFileDownloadApp":"Laden Sie die Desktop-App herunter","setFileSave":"Speichern","setFileSaveTo":"Speichern unter …","setFileClose":"Sperren","setFileSync":"Synchronisierung","setFileSyncVerb":"Synchronisieren","setFileSaveToXml":"XML","setFileSaveToHtml":"HTML","setFileLastSync":"Letzte Synchronisierung","setFileLastSyncUnknown":"unbekannt","setFileSyncInProgress":"Synchronisierung läuft","setFileSyncError":"Synchronisierungsfehler","setFilePass":"Hauptpasswort","setFileConfirmPass":"Masterpasswort bestätigen","setFilePassChange":"Um das Passwort zu ändern, geben Sie es im Bestätigungsfeld an","setFilePassChanged":"Das Passwort wurde geändert. Lassen Sie das Feld leer, um das bisherige Passwort zu behalten.","setFilePassNotMatch":"Die Passwörter stimmen nicht überein, bitte geben Sie diese erneut ein","setFileKeyFile":"Schlüsseldatei","setFileSelKeyFile":"Schlüsseldatei auswählen","setFileNames":"Namen","setFileDefUser":"Standard-Benutzername","setFileEnableTrash":"Papierkorb aktivieren","setFileHistMode":"Eintragsverlauf","setFileHistLimited":"Alte Einträge im Verlauf automatisch löschen","setFileHistDisabled":"Keinen Verlauf speichern","setFileHistUnlimited":"Verlauf dauerhaft speichern","setFileHistLen":"Anzahl der im Verlauf gespeicherten Versionen","setFileHistSize":"Maximalgröße des Verlaufs pro Datei in MB","setFileBackups":"Sicherungen","setFileBackupEnable":"Diese Datei sichern","setFileBackupPath":"Sicherungspfad","setFileBackupTime":"Sicherungen anlegen","setFileBackupNow":"Jetzt sichern","setFileBackupNowWorking":"Ausführung läuft …","setFileBackupError":"Sicherungsfehler","setFileBackupErrorDescription":"Fehler beim Schreiben der Sicherungsdatei","setFileBackupErrorIsDir":"Der Sicherungspfad ist ungültig","setFileBackupErrorIsDirDescription":"Der Sicherungspfad scheint ein Verzeichnis zu sein. Bitte geben Sie stattdessen einen Dateinamen ein.","setFileBackupOnSave":"Immer, wenn die Datei gespeichert wird","setFileBackupDaily":"Täglich","setFileBackupWeekly":"Wöchentlich","setFileBackupMonthly":"Monatlich","setFileBackupManually":"Manuell, keine automatische Sicherung","setFileRounds":"Verschlüsselungs-Runden","setFileKdfParams":"Schlüsselableitungsfunktion","setFileKdfParamsIter":"Iterationen","setFileKdfParamsMem":"Speicher in KB","setFileKdfParamsPar":"Parallelismus","setFileKeyChangeForce":"Hinweis zum Ändern des Schlüssels nach (Tagen)","setFileUseKeyFile":"Schlüsseldatei benutzen","setFileUseGenKeyFile":"Generierte Schlüsseldatei benutzen","setFileUseOldKeyFile":"Alte Schlüsseldatei benutzen","setFileGenKeyFile":"Neue Schlüsseldatei generieren","setFileDontUseKeyFile":"Keine Schlüsseldatei verwenden","setFileEmptyPass":"Leeres Passwort","setFileEmptyPassBody":"Eine Datenbank ohne Passwort zu speichern, macht diese vollkommen ungeschützt. Möchten Sie dies trotzdem tun?","setFileSaveError":"Fehler beim Speichern","setFileSaveErrorBody":"Schreibfehler beim Speichern","setFileAlreadyExists":"Existiert bereits","setFileAlreadyExistsBody":"Die Datei {} existiert bereits. Überschreiben?","setFileUnsaved":"Ungespeicherte Änderungen","setFileUnsavedBody":"Es gibt ungespeicherte Änderungen in dieser Datei","setFileCloseNoSave":"Sperren und Änderungen verwerfen","setFileDontClose":"Nicht sperren","setFileFormatVersion":"Dateiformat","setFileExportRaw":"Passwörter exportieren","setFileExportRawBody":"Die Exportdatei wird Ihre Passwörter als unverschlüsselten Klartext enthalten. Möchten Sie fortfahren?","setFileDeviceIntro":"Einmal-Codes aus diesem {} werden in der App angezeigt.","setFileDeviceSettings":"Einstellungen","setFileYubiKey":"YubiKey","setFileDontUseYubiKey":"Keinen YubiKey verwenden","setFileRefreshYubiKeyList":"Liste aktualisieren","setFileYubiKeyHeader":"YubiKey","setFileYubiKeyBody":"Es ist gefährlich, einen YubiKey als Teil des Hauptschlüssels zu verwenden. Falls etwas schief geht, besteht möglicherweise kein Zugriff mehr auf die Passwörter. Haben Sie ein Backup Ihrer Datei erstellt, bevor diese Einstellung geändert wurde?","setFileYubiKeyErrorEmptyMac":"Scheinbar wurde ein YubiKey angeschlossen, er ist aber nicht sichtbar. KeeWeb muss in den Sicherheitseinstellungen im Abschnitt Input-Monitoring hinzugefügt werden, um auf YubiKeys zugreifen zu können.","setShTitle":"Tastenkürzel","setShShowAll":"alle Einträge anzeigen","setShColors":"mit Farben markierte Einträge anzeigen","setShTrash":"Papierkorb öffnen","setShFind":"Suchen oder einfach beginnen zu tippen","setShClearSearch":"Suchfeld leeren","setShCopyPass":"Passwort bzw. ausgewähltes Feld kopieren","setShCopyUser":"Benutzername kopieren","setShCopyUrl":"Website kopieren","setShAutoType":"Auto-Type für ausgewählten Eintrag","setShPrev":"zum vorherigen Eintrag gehen","setShNext":"zum nächsten Eintrag gehen","setShCreateEntry":"Neuer Eintrag","setShOpen":"Öffnen / Neu","setShSave":"Alle Dateien speichern","setShGen":"Passwort generieren","setShSet":"App-Einstellungen","setShCopyPassGlobal":"Passwort kopieren","setShCopyOtp":"Einmal-Passwort kopieren","setShAutoTypeGlobal":"Auto-Type","setShCopyPassOnly":"Passwort kopieren","setShRestoreApp":"{} öffnen","setShGlobal":"Diese systemweiten Tastenkürzel funktionieren auch, wenn die App im Hintergrund läuft. Klicken Sie auf einen Eintrag, um ein eigenes Kürzel festzulegen.","setShLock":"Datenbank sperren","setShEdit":"Drücken Sie eine Tastenkombination, um diese als Kürzel zu festzulegen","setPlInstallTitle":"Neue Plugins installieren","setPlInstallDesc":"KeeWeb-Plugins fügen Funktionen, Themes und Sprachen zu KeeWeb hinzu. Plugins werden mit denselben Rechten ausgeführt wie KeeWeb selbst, sie können auf all Ihre Passwörter zugreifen oder diese ändern. Installieren Sie niemals Plugins, denen Sie nicht vertrauen.","setPlInstallLabel":"Plugin-URL","setPlInstallBtn":"Installieren","setPlInstallBtnProgress":"Installation läuft","setPlUninstallBtn":"Deinstallieren","setPlDisableBtn":"Deaktivieren","setPlEnableBtn":"Aktivieren","setPlUpdateBtn":"Aktualisieren","setPlLocaleBtn":"Diese Sprache aktivieren","setPlThemeBtn":"Dieses Theme aktivieren","setPlJs":"Code","setPlCss":"Stile","setPlLoc":"Sprache","setPlCreatedBy":"Erstellt von {}","setPlLoadTime":"geladen in {}","setPlLastUpdate":"Letzte Prüfung auf Updates","setPlLoadError":"Fehler beim Laden des Plugins","setPlGalleryLoading":"Plugins werden geladen, bitte einen Moment warten","setPlGalleryLoadError":"Fehler beim Laden der Plugins","setPlInstallUrlTitle":"Plugin von einer URL hinzufügen","setPlInstallUrlDesc":"Wenn das Plugin nicht in der Galerie verfügbar ist, können Sie es manuell von einer URL installieren","setPlOfficial":"Offizielles KeeWeb-Plugin","setPlSearch":"Nach Plugins suchen","setPlDevelop":"Eigene Plugins entwickeln?","setPlDevelopStart":"Hier entlang","setPlTranslate":"Oder {}","setPlTranslateLink":"übersetzen Sie die App in Ihre Sprache","setPlAutoUpdate":"Automatisch aktualisieren","setPlLoadGallery":"Plugin-Galerie laden","setDevicesTitle":"Geräte","setDevicesEnableUsb":"Interaktion mit USB-Geräten aktivieren","setDevicesYubiKeyIntro":"Es wird empfehlen {} zu lesen, bevor ein YubiKey verwendet wird.","setDevicesYubiKeyIntroLink":"dieses Dokument","setDevicesYubiKeyToolsDesc":"Um YubiKey in diesem Modus verwenden zu können, müssen Sie vorher das Tool {} installieren.","setDevicesYubiKeyToolsDesc2":"{}, um mehr Informationen über dieses Tool zu erhalten.","setDevicesYubiKeyToolsDescLink":"Hier klicken","setDevicesYubiKeyToolsStatusChecking":"Prüfung, ob {} installiert ist","setDevicesYubiKeyToolsStatusOk":"{} ist installiert","setDevicesYubiKeyToolsStatusError":"{} ist nicht installiert oder funktioniert nicht korrekt","setDevicesYubiKeyOtpTitle":"Einmal-Codes","setDevicesYubiKeyOtpDesc":"Ein YubiKey kann genutzt werden, um Einmal-Codes für verschiedene Dienste zu erzeugen.","setDevicesYubiKeyOtpShowIcon":"Das Symbol auf der Startseite anzeigen","setDevicesYubiKeyOtpAutoOpen":"Einmal-Codes automatisch laden, wenn Dateien geöffnet sind","setDevicesYubiKeyOtpMatchEntries":"Passende Einmal-Codes in den Einträgen anzeigen","setDevicesYubiKeyChalRespTitle":"Challenge-Response","setDevicesYubiKeyChalRespDesc":"Es ist auch möglich, einen YubiKey im Challenge-Response-Modus zu verwenden, um einen Teil des Private Schlüssels, der zum Verschlüsseln der Dateien verwendet wird, auf dem YubiKey zu speichern.","setDevicesYubiKeyChalRespShow":"Optionen zum Verwenden eines YubiKeys beim Öffnen von Dateien anzeigen","setDevicesYubiKeyStuckWorkaround":"YubiKey entfernen und neu verbinden, falls der Ladeprozess hängt","setDevicesYubiKeyRememberChalResp":"Challenge-Response-Einstellungen merken, während die App geöffnet ist","setAboutTitle":"Über","setAboutBuilt":"Diese App wurde mit folgenden Werkzeugen erstellt","setAboutLic":"Lizenz","setAboutLicComment":"Die App selbst und alle enthaltenen Komponenten, die nicht Public Domain sind, stehen unter der MIT-Lizenz.","setAboutFirst":"Dies ist eine Open-Source App, erstellt von {}","setAboutSecond":"und lizenziert unter {}.","setAboutSource":"Quellcode und Tickets befinden sich auf {}.","setHelpFormat":"Dateiformat","setHelpFormatBody":"Dies ist eine Portierung der App {}, programmiert mit Webtechnologien. Sie ist kompatibel mit Dateien im KeePass-Format (kdbx). Sie können solche Dateien (Passwort-Datenbanken) entweder mit KeePass oder mit dieser App erstellen. Das Dateiformat ist zu 100 % kompatibel und sollte in beiden Anwendungen nutzbar sein.","setHelpProblems":"Probleme?","setHelpProblems1":"Falls etwas schief geht, {}","setHelpProblems2":"oder {}","setHelpOpenIssue":"eröffnen Sie bitte ein Ticket auf GitHub (englisch)","setHelpContactLink":"kontaktieren Sie den Entwickler direkt","setHelpAppInfo":"App-Informationen","setHelpOtherPlatforms":"Andere Plattformen","setHelpDesktopApps":"Deskop-Apps","setHelpWebApp":"Web-App","setHelpUpdates":"Neuigkeiten","setHelpTwitter":"Twitter","dropboxSetupDesc":"Etwas Konfiguration ist notwendig, um Dropbox in einer selbst gehosteten Web-App zu verwenden. Bitte erstellen Sie eine eigene Dropbox-App und tragen Sie ihren App-Schlüssel unten ein.","dropboxAppKey":"Dropbox-App-Schlüssel","dropboxAppKeyDesc":"Kopieren Sie den Schlüssel aus Ihrer Dropbox-App (Entwicklereinstellungen)","dropboxAppKeyHint":"Ihr App-Schlüssel","dropboxAppSecret":"Dropbox-App-Secret","dropboxAppSecretDesc":"Das App-Secret ist neben dem App-Schlüssel zu finden","dropboxFolder":"App-Ordner","dropboxFolderDesc":"Wenn Ihre App mit der gesamten Dropbox verlinkt ist (anstatt mit einem bestimmten Ordner), geben Sie hier den Pfad zum Ordner mit Ihren KDBX-Dateien an.","dropboxFolderSettingsDesc":"Wählen Sie einen Ordner in Ihrer Dropbox, in dem die Dateien gespeichert werden (standardmäßig das Stammverzeichnis)","dropboxFolderPlaceholder":"Standardordner","dropboxLink":"App verlinken mit","dropboxLinkApp":"App-Ordner (Apps/KeeWeb)","dropboxLinkFull":"Gesamte Dropbox oder beliebiger Ordner","dropboxLinkCustom":"Eigene Dropbox-App","gdriveSharedWithMe":"Mit mir geteilt","webdavSaveMethod":"Speichermethode","webdavSaveMove":"Eine temporäre Datei hochladen und verschieben","webdavSavePut":"kdbx-Datei mittels PUT überschreiben","launcherSave":"Passwortdatenbank speichern","launcherFileFilter":"KeePass-Dateien","authPopupRequired":"Pop-ups blockiert","authPopupRequiredBody":"Bitte erlauben Sie Pop-ups in Ihrem Browser.","exportFileInfo":"Dateiinformationen","exportHtmlName":"Name","exportHtmlDate":"Exportdatum","exportGenerator":"Software","exportDescription":"Diese Datei wurde mit {} erstellt.","importCsvTitle":"Aus CSV importieren","importCsvRun":"Importieren","importIgnoreField":"Ignorieren","importTo":"Einträge werden importiert nach:","importNewFile":"Neue Datei","yubiKeyStuckError":"Der YubiKey scheint nicht mehr zu funktionieren. Auto-Repair kann in den App-Einstellungen aktiviert werden.","yubiKeyNoKeyHeader":"YubiKey benötigt","yubiKeyNoKeyBody":"Bitte den YubiKey mit der Seriennummer {} anschließen","yubiKeySlot":"Anschluss","yubiKeyTouchRequestedHeader":"Bitte den YubiKey berühren","yubiKeyTouchRequestedBody":"Bitte den YubiKey mit der Seriennummer {} berühren","yubiKeyDisabledErrorHeader":"USB ist deaktiviert","yubiKeyDisabledErrorBody":"YubiKey ist zum Öffnen dieser Datei erforderlich. Bitte USB-Geräte in den Einstellungen aktivieren.","yubiKeyErrorWithCode":"YubiKey-Fehler, Code {}.","bioOpenAuthPrompt":"„{}“ öffnen"}')},8515:e=>{"use strict";e.exports=JSON.parse('{"retToApp":"retour vers l\'appli","name":"nom","icon":"icône","title":"titre","password":"mot de passe","user":"utilisateur","website":"site web","tags":"tags","notes":"notes","entry":"entrée","group":"groupe","noTitle":"aucun titre","or":"ou","history":"historique","template":"modèle","templates":"templates","notImplemented":"Non Implémenté","saveChanges":"Sauvegarder les modifications","discardChanges":"Annuler les modifications","advanced":"Avancé","shortcuts":"Raccourcis","help":"Aide","settings":"Paramètres","plugins":"Modules (plugins)","ctrlKey":"ctrl","shiftKey":"shift","altKey":"alt","error":"erreur","oneMinute":"une minute","minutes":"{} minutes","oneHour":"une heure","hours":"{} heures","oneDay":"un jour","days":"{} jours","oneWeek":"une semaine","oneMonth":"un mois","oneYear":"une année","cache":"cache","file":"fichier","device":"appareil","webdav":"WebDAV","dropbox":"Dropbox","gdrive":"Google Drive","onedrive":"OneDrive","menuAllItems":"Tout","menuColors":"Couleurs","menuTrash":"Corbeille","menuSetGeneral":"Général","menuSetBrowser":"Navigateur","menuSetAbout":"À propos","menuSetDevices":"Appareils","menuAlertNoTags":"Aucun tag","menuAlertNoTagsBody":"Vous pouvez ajouter de nouveaux tags en éditant les champs, dans la section Tags.","menuEmptyTrash":"Vider la Corbeille","menuEmptyTrashAlert":"Vider la Corbeille ?","menuEmptyTrashAlertBody":"Vous ne pourrez plus récupérer ces éléments","menuItemCollapsed":"Double-cliquez pour déplier","menuRestoreApp":"Ouvrir {}","menuQuitApp":"Quitter {}","sysMenuAboutKeeWeb":"A propos {}","sysMenuServices":"Services","sysMenuHide":"Cacher {}","sysMenuHideOthers":"Cacher autres","sysMenuUnhide":"Montrer tout","sysMenuQuit":"Quitter {}","sysMenuEdit":"Editer","sysMenuUndo":"Annuler","sysMenuRedo":"Répéter","sysMenuCut":"Couper","sysMenuCopy":"Copier","sysMenuPaste":"Coller","sysMenuSelectAll":"Tout sélectionner","sysMenuWindow":"Fenêtre","sysMenuMinimize":"Réduire","sysMenuClose":"Fermer fenêtre","alertYes":"Oui","alertNo":"Non","alertOk":"OK","alertCancel":"Annuler","alertSignIn":"Connexion","alertCopy":"Copier","alertClose":"Fermer","alertDoNotAsk":"Ne plus me le redemander","alertAllow":"Autoriser","alertDeny":"Refuser","appBeta":"ATTENTION: version beta, aperçu seulement","footerOpen":"Ouvrir/Nouveau","footerSyncError":"Erreur de synchronisation","footerTitleGen":"Générer","footerTitleLock":"Verrouiller","genLen":"Longueur","genNewPass":"Nouveau mot de passe","genPresetDefault":"réglages par défaut","genPresetDerived":"similaire à l\'ancien mot de passe","genPresetPronounceable":"prononçable","genPresetMed":"longueur moyenne","genPresetLong":"long","genPresetPin4":"code à 4 chiffres","genPresetMac":"adresse MAC","genPresetHash128":"hash 128 bits","genPresetHash256":"hash 256 bits","genHidePass":"Masquer le mot de passe","genShowPass":"Afficher le mot de passe","grpTitle":"Groupe","grpSearch":"Activer la recherche dans les entrées de ce groupe","grpAutoType":"Activer l\'auto-complétion","grpAutoTypeSeq":"Séquence d\'auto-complétion","grpAutoTypeSeqDefault":"Utiliser la séquence d\'auto-complétion par défaut","grpTrash":"Supprimer le groupe et toutes ses entrées","tagTitle":"Tag","tagTrash":"Supprimer le tag de toutes les entrées","tagRename":"Renommer","tagTrashQuestion":"Supprimer le tag de toutes les entrées ?","tagTrashQuestionBody":"Ce tag va être supprimé de toutes les entrées. Il n\'y aura pas de moyen facile pour le remettre.","tagExists":"Ce tag existe déjà","tagExistsBody":"Un tag existe déjà avec ce nom. Merci de choisir un autre nom.","tagBadName":"Nom invalide","tagBadNameBody":"Les noms de Tag ne peuvent contenir les caractères {}. Veuillez les supprimer.","genPsTitle":"Préréglages du Générateur","genPsCreate":"Nouveau préréglage","genPsDelete":"Supprimer préréglage","genPsNew":"préréglage","genPsEnabled":"Afficher dans la liste des préréglages","genPsDefault":"Sélectionné par défaut","genPsDefaultLength":"Longueur par défaut","genPsUpper":"Lettres latines majuscules","genPsLower":"Lettres latines minuscules","genPsDigits":"Chiffres","genPsSpecial":"Caractères spéciaux","genPsBrackets":"Parenthèses","genPsHigh":"Caractères ASCII étendus","genPsAmbiguous":"Caractères ambigus","genPsInclude":"Caractères additionnels à inclure","genPsExample":"Exemple de mot de passe généré","genPsPattern":"Modèle","genPsPatternHelp":"Des modèles peuvent être utilisés pour spécifier des règles de sélection de caractères. 1-AA générera un mot de passe commençant par un chiffre, suivi d\'un tiret et de 2 lettres. Vous pouvez utiliser ces symboles :","genPsAllRanges":"Tous les caractères","genPsIncluded":"Caractères additionnels ajoutés ci-dessus","keyChangeTitleRemote":"Clé Maître Modifiée","keyChangeMessageRemote":"La clé maître a été modifiée pour cette base de données. Merci de saisir une nouvelle clé.","keyChangeTitleExpired":"Clé Maître Expirée","keyChangeMessageExpired":"La clé maître pour cette base de donnée est expirée. Merci de saisir une nouvelle clé.","keyChangeRepeatPassword":"Mot de passe, encore une fois","keyEnter":"Entrée","keyEsc":"Esc","iconFavTitle":"Télécharger et utiliser le favicon du site web","iconSelCustom":"Sélectionner une icône personnalisée","listEmptyTitle":"Vide","listEmptyAdd":"ajouter avec le bouton {} au-dessus","listGroup":"Groupe","listNoWebsite":"aucun site web","listNoUser":"aucun utilisateur","listNoAttachments":"aucune pièce-jointe","listAddTemplateHeader":"Modèles","listAddTemplateBody1":"Les modèles (templates) vous permettent de créer des nouvelles entrées en un clic. Ajouter quelque chose à l\'entrée du modèle et ensuite cliquer de nouveau sur {} pour utiliser ce modèle.","listAddTemplateBody2":"Vous pouvez toujours retrouver vos modèles dans le groupe {}.","searchAddNew":"Ajouter Nouveau","searchSort":"Trier","searchCreated":"Créé","searchUpdated":"Mis à jour","searchAttachments":"Pièce-jointes","searchAZ":"A {} Z","searchZA":"Z {} A","searchON":"Ancien {} Nouveau","searchNO":"Nouveau {} Ancien","searchShiftClickOr":"maj-click ou","searchAdvTitle":"Afficher/masquer recherche avancée","searchSearchIn":"Rechercher dans","searchOther":"Autres champs","searchProtect":"Champs sécurisés","searchOptions":"Options","searchCase":"Respecte la casse","searchRegex":"RegEx","searchRank":"Auto","searchExact":"Exact","openOpen":"Ouvrir","openNew":"Nouveau","openNewFile":"Nouveau","openMore":"Plus","openDemo":"Démo","openGenerate":"Générer","openXml":"Importer XML","openCaps":"Majuscules activées","openClickToOpen":"Cliquer pour ouvrir un fichier","openKeyFile":"fichier clé","openKeyFileDropbox":"(depuis DropBox)","openDropHere":"déposez les fichiers ici","openFailedRead":"Échec lors de la lecture du fichier","openNothingFound":"Aucun résultat","openNothingFoundBody":"Nous n\'avons trouvé aucun fichier convenable.","openSelectFile":"Sélectionnez un fichier","openSelectFileBody":"Sélectionnez un fichier que vous voudriez ouvrir","openPassFor":"Mot de passe pour","openRemoveLastQuestion":"Supprimer le fichier local ?","openRemoveLastQuestionBody":"Le fichier que vous voulez supprimer est sauvegardé dans l\'appli. Le supprimer de façon définitive ?","openRemoveLastQuestionModBody":"Le fichier que vous voulez supprimer a des modifications locales. Le supprimer et annuler ces modifications ?","openLocalFile":"Fichier local","openLocalFileBody":"Vous allez ouvrir un fichier qui sera stocké dans l\'application. Les modifications apportées ne seront pas sauvegardées vers le système de fichiers. Pour obtenir le fichier avec vos données, exportez-le via les paramètres.","openLocalFileDontShow":"Ne plus afficher","openWrongFile":"Fichier invalide","openWrongFileBody":"Ce format de fichier n\'est pas supporté. Cette application fonctionne avec des fichiers de base de donnée KeePass (kdbx).","openKdbFileBody":"Vous essayez d\'ouvrir un ancien fichier de base de donnée KeePass (KDB). Cette application supporte uniquement le nouveaux format (kdbx), merci d\'utiliser KeePass 2 afin de convertir celui-ci.","openConfigHeader":"Paramètres {}","openUrl":"URL","openUrlDesc":"https://serveur/chemin/fichier.kdbx, ou seulement fichier.kdbx","openUser":"Nom d\'utilisateur","openUserDesc":"Nom d\'utilisateur du serveur WebDAV (si requis)","openUserPlaceholder":"aucun nom d\'utilisateur","openPass":"Mot de passe","openPassDesc":"Mot de passe du serveur WebDAV (ce n\'est pas votre mot de passe de fichier)","openPassPlaceholder":"aucun mot de passe","openConfigError":"Erreur: {}","openConfigErrorNotFound":"Aucun fichier trouvé","openError":"Erreur","openErrorDescription":"Une erreur est survenue à l\'ouverture du fichier","openErrorDescriptionMaybeTouchIdChanged":"L\'erreur ressemble à ce qu\'y arrive habituellement quand la configuration de Touch ID a été changée. Par exemple, vous avez ajouté ou supprimé un doigt supplémentaire. Si c\'est le cas, allez dans Paramètres, désactiver Touch ID et activer le de nouveau.","openErrorFileNotFound":"Fichier non trouvé","openListErrorBody":"Erreur au chargement de la liste des fichiers","openShowAllFiles":"Tous les fichiers","openFileNoCacheError":"Fichier non trouvé dans la mémoire cache. Cela peut arriver parce que le stockage du navigateur a été nettoyé. Pour ouvrir le fichier, supprimez-le de KeeWeb et ajoutez-le à nouveau.","openChalRespHeader":"Challenge-Réponse","openChalRespLoading":"Chargement de la liste des YubiKeys","openChalRespSelectYubiKey":"Sélectionnez une YubiKey que vous voudriez utiliser","openChalRespErrorEmpty":"Pas de clé YubiKey trouvée.","openChalRespErrorEmptyMac":"Première fois que vous utilisez cette fonctionnalité sur MacOS ? KeeWeb doit avoir été autorisé dans la section \\"Surveillance de l’entrée\\" des paramètres de sécurité.","detAttDownload":"Cliquez sur le bouton de pièce-jointe en pressant la touche Maj pour le télécharger ou","detAttDelToRemove":"Supprimer pour enlever","detAttSave":"Enregistrer sous","detEmpty":"Vos mots de passe seront affichés ici","detGroupRestore":"Pour restaurer ce groupe, veuillez le glisser-déposer dans un des groupes hors de la corbeille","detHistoryClickPoint":"Cliquer sur une entrée de l\'historique pour voir son état","detHistoryReturn":"Retour vers l\'entrée","detHistoryRevert":"Revenir à cet état","detHistoryDel":"Supprimer cet état","detHistoryEmpty":"vide","detHistoryModified":"modifié","detHistoryRec":"archive","detHistoryRecs":"archives","detHistoryVersion":"Version","detHistorySaved":"Sauvegardé","detHistoryNoTitle":"sans titre","detHistoryCurState":"état actuel","detHistoryCurUnsavedState":"état actuel non sauvegardé","detHistoryRevertAlert":"Revenir à cet état de l\'historique ?","detHistoryRevertAlertBody":"L\'état courant sera sauvegardé dans l\'historique.","detHistoryDeleteAlert":"Supprimer cet état de l\'historique ?","detHistoryDeleteAlertBody":"Vous ne pourrez plus le restaurer.","detHistoryDiscardChangesAlert":"Ne pas sauvegarder les modifications de cette entrée ?","detHistoryDiscardChangesAlertBody":"Les changements non sauvegardés seront définitivement perdus, il n\'y a pas de retour en arrière.","detBackToList":"retour vers liste","detSetIconColor":"Changer de couleur","detSetIcon":"Changer d\'icône","detDropAttachments":"Déposer une pièce-jointe ici","detDelEntry":"Supprimer","detDelEntryPerm":"Supprimer définitivement","detExpires":"Expire","detExpired":"expirée","detGroup":"Groupe","detCreated":"Créé le","detUpdated":"Mis à jour","detNetField":"Nouveau champ","detAttachments":"Pièces-jointes","detDelFromTrash":"Supprimer de la Corbeille ?","detDelFromTrashBody":"Vous ne pourrez plus le récupérer.","detDelFromTrashBodyHint":"Pour supprimer tous les éléments de la Corbeille, cliquez l’icône \\"Vider la corbeille\\" du menu Corbeille.","detDelToTrash":"Supprimer l\'entrée ?","detDelToTrashBody":"L\'entrée sera déplacée dans la corbeille.","detFieldCopied":"Copié","detFieldCopiedTime":"Copié pendant {} secondes","detCopyHint":"Vous pouvez copier la valeur du champ en cliquant sur ton titre","detMore":"plus","detClickToAddField":"cliquez pour ajouter un nouveau champ","detMenuAddNewField":"Ajouter nouveau champ","detMenuAddNewWebsite":"Ajouter un autre site","detMenuShowEmpty":"Montrer les champs vides","detMenuHideEmpty":"Cacher les champs vides","detMenuAddField":"Ajouter {}","detMenuCopyPassword":"Copier mot de passe","detMenuCopyUser":"Copier nom","detMenuCopyOtp":"Copier le code à usage unique","detSetupOtp":"Codes à usage unique","detClone":"Dupliquer","detCopyEntryToClipboard":"Copier tous les champs","detClonedName":"Copier","detAutoType":"Saisie auto","detAutoTypeSettings":"Paramètres saisie auto","detAutoTypeEnabled":"Activer la saisie automatique pour cette entrée","detAutoTypeSequence":"Frappes","detAutoTypeInput":"Entrée","detAutoTypeShortcutsDesc":"{} ou {} tant que l\'appli est inactive","detAutoTypeObfuscation":"Mélanger touches réelles et aléatoire","detAutoTypeWindow":"Fenêtre","detAutoTypeInputWindow":"Titre de fenêtre","detSetupOtpAlert":"Scanner le QR code","detSetupOtpAlertBody":"Veuillez copier le QR code qui est affiché sur la page d\'autorisation","detSetupOtpAlertBody1":"1. aller sur la page d\'autorisation","detSetupOtpAlertBody2":"2. faire une capture d\'écran du QR code avec {}","detSetupOtpAlertBody3":"3. collez-la ici avec {}","detSetupOtpAlertBody3Mobile":"3. Sélectionner ou scanner avec votre appareil photo en utilisant Sélectionner/Scan ci-dessous","detSetupOtpAlertBody4":"Si vous ne pouvez pas scanner le code, cliquer sur Entrer le code manuellement","detSetupOtpManualButton":"Entrer le code manuellement","detSetupOtpScanButton":"Sélectionner/Scan","detSetupOtpAlertBodyWith":"avec {}","detOtpImageError":"Erreur de lecture de l\'image","detOtpImageErrorBody":"Désolé, le format de l\'image ne peut pas être lu, merci de contacter les auteurs de l\'application avec le détail de l\'erreur.","detOtpImageReading":"Lecture du QR code...","detOtpQrError":"Erreur lecture du QR code","detOtpQrErrorBody":"Désolé, le QR code n\'a pas pu être lu, essayez à nouveau ou contacter les auteurs de l\'application avec le détail de l\'erreur.","detOtpQrWrong":"QR code incorrect","detOtpQrWrongBody":"Votre code QR code a été scanné avec succès mais il ne contient pas d\'information pour un code à usage unique.","detOtpField":"Code à usage unique","detOtpClickToTouch":"Cliquer pour générer","detOtpGenerating":"Création...","detOtpTouch":"Touchez votre {}","detLockField":"Verrouiller ce champ, ainsi son contenu ne sera pas visible ni ne pourra être cherché. Visualiser son contenu exigera de le cliquer explicitement.","detUnlockField":"Déverrouiller ce champ, rendant son contenu immédiatement visible et pouvant être cherché","detRevealField":"Révéler","detHideField":"Cacher","detAutoTypeField":"Saisie auto","detIssuesHideTooltip":"Cacher cet avertissement","detIssueWeakPassword":"Ce mot de passe est faible, nous vous recommandons de le changer","detIssuePoorPassword":"Ce mot de passe est très faible, nous vous recommandons très fort de le changer","detIssuePwnedPassword":"Ce mot de passe a été exposé à une faille selon {}, il est recommandé de le changer","detIssuePasswordCheckError":"Une erreur est survenue en vérifiant la force du mot de passe en ligne","detIssueOldPassword":"Ce mot de passe est vieux","detIssueCloseAlertHeader":"Cacher les problèmes de mots de passe","detIssueCloseAlertBody":"Il y a plusieurs façon de cacher ce message :","detIssueCloseAlertEntry":"Ne plus montrer pour cette entrée","detIssueCloseAlertSettings":"Modifier les paramètres globaux","autoTypeEntryFields":"Champs","autoTypeModifiers":"Touches modificatrices","autoTypeKeys":"Clés","autoTypeLink":"plus...","autoTypeError":"Erreur saisie auto","autoTypeErrorGeneric":"Il y a eu une erreur lors de la saisie automatique : {}","autoTypeErrorAccessibilityMacOS":"Nous avons essayé d\'envoyer les frappes de caractères à cette application mais cela ne semble pas fonctionner parce qu\'il manque des permissions. Cliquer ici pour en lire plus.","autoTypeErrorGlobal":"Pour utiliser un raccourci global, sélectionner l\'application là où vous voulez saisir le mot de passe","autoTypeErrorNotInstalled":"{} n\'est pas installé","autoTypeHeader":"Saisie auto : Selectionner","autoTypeMsgNoWindow":"Nous n\'avons pas pu obtenir le titre de la fenêtre active, commencez à taper pour rechercher","autoTypeMsgMatchedByWindow":"Sélectionner un mot de passe pour {}","autoTypeNoMatches":"aucun","autoTypeSelectionHint":"Saisissez la séquence automatique","autoTypeSelectionHintAction":"Entrez seulement le mot de passe","autoTypeSelectionHintOpt":"Entrez seulement le compte","autoTypeSelectionHintShift":"Autres champs","autoTypeSelectionOtp":"code à usage unique","autoTypeUnlockMessage":"Déverrouiller pour saisir automatiquement","appSecWarn":"Non sécurisé !","appSecWarnBody1":"Vous avez chargé cette appli avec une connexion non sécurisée. Quelqu\'un peut vous observer et voler vos mots de passe. Nous vous recommandons fortement d\'arrêter cette connexion, à moins que vous ne compreniez exactement ce que vous faites.","appSecWarnBody2":"Oui, votre base est chiffrée mais personne ne peut garantir que l\'application n\'a pas été modifiée avant d\'arriver à vous.","appSecWarnBtn":"Je comprends les risques, continuer","appUnsavedWarn":"Modifications non sauvegardées","appUnsavedWarnBody":"Vous avez des fichiers non sauvegardés, si vous fermez l\'appli, les changements seront perdus.","appDontExitBtn":"Ne pas quitter","appCannotLockAutoInit":"L\'appli ne peut pas être verrouillée car la sauvegarde automatique est désactivée.","appCannotLock":"Vous avez des modifications non sauvegardées qui seront perdus. Continuer ?","appAutoSave":"Sauver les modifications automatiquement","appSaveError":"Sauver l\'erreur","appSaveErrorBody":"Échec sauvegarde auto du fichier","appSaveErrorBodyMul":"Échec sauvegarde auto des fichiers","appSaveErrorExitLoseChanges":"Afsluiten en alle aanpassingen kwijtraken","appSaveErrorExitLoseChangesBody":"Je kunt de app afsluiten en alle wijzigingen kwijtraken, of je kunt de bestandsinstellingen gebruiken om gegevens te exporteren","appSettingsError":"Erreur lancement appli","appSettingsErrorBody":"Il y a eu une erreur lors du chargement des paramètres. Merci de revérifier l\'URL de l\'application ou contacter votre administrateur.","appNotSupportedError":"Votre navigateur n\'est pas compatible avec certaines fonctionnalités importantes que nous utilisons.","appTabWarn":"Trop d\'onglets","appTabWarnBody":"KeeWeb ne peut être utilisé dans 2 onglets de navigateurs simultanément. Fermer cet onglet, s\'il vous plait.","appRightsAlert":"Protéger l\'appli KeeWeb","appRightsAlertBody1":"Votre application KeeWeb est accessible en écriture. Nous demandons les droits administrateurs pour le mettre en écriture uniquement pour les administrateurs.","appRightsAlertBody2":"Vous ne voulez pas donner les permissions ? Vous pouvez le faire vous-même à partir d\'un terminal","appBrowserAuthComplete":"Authentification terminée, vous pouvez fermer cet onglet.","setGenTitle":"Paramètres","setGenUpdate":"Mettre à jour","setGenNewVersion":"Une nouvelle version a été téléchargée","setGenReleaseNotes":"Voir les notes de version","setGenReloadToUpdate":"Recharger pour mettre à jour","setGenUpdateManual":"Une nouvelle version est disponible. Elle vérifiera les mises à jour et les installera automatiquement, mais cette mise à jour automatique à partir de votre version n\'est pas possible.","setGenDownloadUpdate":"Télécharger mise à jour","setGenUpdateAuto":"Télécharger et installer automatiquement","setGenUpdateCheck":"Vérifier mais ne pas installer","setGenNoUpdate":"Ne jamais vérifier les mises à jour","setGenUpdateChecking":"Vérification des mises à jour","setGenCheckUpdate":"Vérifier les mises à jour","setGenErrorChecking":"Erreur vérification des mises à jour","setGenLastCheckSuccess":"Dernière vérification réussie fut le {}","setGenLastCheckVer":"la dernière version était {}","setGenCheckedAt":"Vérifié le","setGenLatestVer":"vous utilisez la dernière version","setGenNewVer":"nouvelle version {} disponible","setGenDownloadingUpdate":"Téléchargement de la mise à jour...","setGenExtractingUpdate":"Décompression de la mise à jour...","setGenCheckErr":"Une erreur est intervenue durant le téléchargement de la mise à jour","setGenNeverChecked":"Ne jamais vérifier les mises à jour","setGenRestartToUpdate":"Redémarrer KeeWeb pour mettre à jour","setGenDownloadAndRestart":"Télécharger la mise à jour et redémarrer","setGenAppearance":"Apparence","setGenTheme":"Thème","setGenThemeDefault":"Défaut","setGenThemeDark":"Sombre","setGenThemeLight":"Clair","setGenThemeBlue":"Bleu","setGenThemeFb":"Bleu foncé","setGenThemeBl":"Bleu clair","setGenThemeBrown":"Brownie","setGenThemeDb":"Marron foncé","setGenThemeLb":"Brun clair","setGenThemeTerminal":"Terminal","setGenThemeTe":"Terminal","setGenThemeLt":"Terminal clair","setGenThemeHighContrast":"Contraste élevé","setGenThemeHc":"Contraste élevé","setGenThemeDc":"Contraste foncé","setGenThemeSol":"Solarisé","setGenThemeSd":"Solarized dark","setGenThemeSl":"Solarized light","setGenMoreThemes":"Plus de thèmes","setGenAutoSwitchTheme":"Basculer automatiquement entre les thèmes clairs et foncés lorsque possible","setGenLocale":"Langue","setGenLocOther":"d\'autres langues sont disponibles en tant que modules","setGenFontSize":"Taille de police","setGenFontSizeNormal":"Normal","setGenFontSizeLarge":"Large","setGenFontSizeLargest":"Très large","setGenTitlebarStyle":"Style de fenêtres (redémarrage requis)","setGenTitlebarStyleDefault":"Par défaut","setGenTitlebarStyleHidden":"Titre personnalisé","setGenTitlebarStyleHiddenInset":"Titre personnalisé, fenêtre déplaçable","setGenShowSubgroups":"Afficher les entrées de tous les sous groupes","setGenTableView":"Voir les entrées en liste","setGenColorfulIcons":"Icônes colorées dans la liste","setGenUseMarkdown":"Markdown dans les notes","setGenUseGroupIconForEntries":"Utilise automatiquement l\'icône de groupe pour les nouvelles entrées","setGenDirectAutotype":"Si une seule entrée correspondante est trouvée, sélectionner celle-ci automatiquement pour l\'autotype.","setGenFunction":"Opérations","setGenAutoSyncOnClose":"Sauvegarde et synchro automatique à la fermeture","setGenAutoSyncTimer":"Sauvegarde et synchro automatique régulièrement","setGenAutoSyncTimerOff":"Désactivé","setGenAutoSyncTimerInterval":"Toutes les {} minute(s)","setGenRememberKeyFiles":"Se souvenir des fichiers clé","setGenNoRememberKeyFiles":"Ne pas se souvenir","setGenRememberKeyFilesData":"Sauvegarder dans le stockage interne de l\'appli","setGenRememberKeyFilesPath":"Se souvenir seulement des chemins des fichiers","setGenLockInactive":"si l\'application est inactive","setGenNoAutoLock":"Ne pas verrouiller automatiquement","setGenLockMinutes":"Dans {} minutes","setGenLockHour":"Dans une heure","setGenLockHours":"Dans {} heures","setGenLockDay":"Dans 1 jour","setGenClearClip":"Vider le presse-papier après une copie","setGenNoClear":"Ne pas effacer","setGenClearSeconds":"Dans {} secondes","setGenClearMinute":"Dans une minute","setGenMinInstead":"Réduire l\'application au lieu de fermer","setGenMinOnFieldCopy":"Réduire sur copie d\'un champ","setGenLock":"Verrou Auto","setGenLockMinimize":"quand l\'appli est en arrière-plan","setGenLockCopy":"sur copie de m.d.p.","setGenLockAutoType":"sur saisie auto","setGenLockOrSleep":"Quand l\'ordinateur est verrouillé ou mis en sommeil","setGenStorage":"Stockage","setGenDisableOfflineStorage":"Ne pas mettre en cache des fichiers d\'un stockage offline","setGenShortLivedStorageToken":"Utiliser des sessions de courte-durée avec les fournisseurs de stockage dans le cloud","setGenStorageLogout":"Déconnexion","setGenShowAdvanced":"Afficher les paramètres avancés","setGenDevTools":"Afficher les outils de développement","setGenTryBeta":"Essayer une fois la version beta ","setGenTryBetaWarning":"Fichiers non sauvegardés","setGenTryBetaWarningBody":"Sauvegarder tous les fichiers et re-cliquer ce bouton","setGenShowAppLogs":"Voir les logs","setGenReloadApp":"Recharger l\'application","setGenFieldLabelDblClickAutoType":"Remplissage auto par double clic sur les noms de champ","setGenTouchId":"Touch ID","setGenTouchIdDisabled":"Ne pas utiliser Touch ID","setGenTouchIdMemory":"Dévérouiller avec Touch ID uniquement quand KeeWeb est lancé","setGenTouchIdFile":"Toujours utiliser Touch ID à la place du mot de passe","setGenTouchIdPass":"Exige le mot de passe après","setGenAudit":"Audit","setGenAuditPasswords":"Voir des avertissements sur la force du mot de passe","setGenAuditPasswordEntropy":"Vérifier la longueur et l\'aléas du mot de passe","setGenExcludePinsFromAudit":"Ne jamais vérifier les codes PIN courts, comme 123456","setGenCheckPasswordsOnHIBP":"Vérifier les mots de passe en utilisant un service en ligne {}","setGenHelpHIBP":"KeeWeb peut vérifier si vos mots de passes ont été précédemment exposés à une faille de sécurité en utilisant un service en ligne. Votre mot de passe ne peut pas être récupéré à partir de données envoyées en ligne, cependant le nombre de mots de passes vérifiés peut être exposé. Plus d\'informations sur votre sécurité en utilisant ce service peuvent être trouvées {}. Si cette option est activée, KeeWeb vérifiera automatiquement vos mots de passes là.","setGenHelpHIBPLink":"ici","setGenAuditPasswordAge":"Vieux mots de passe","setGenAuditPasswordAgeOff":"Ne pas afficher d\'avertissements à propos des vieux mots de passe","setGenAuditPasswordAgeOneYear":"Afficher des avertissements pour les mots de passe plus vieux qu\'un an","setGenAuditPasswordAgeYears":"Afficher des avertissement pour les mots de passe plus vieux que {} ans","setFilePath":"Chemin","setFileStorage":"Le fichier est ouvert de {}.","setFileIntl":"Le fichier est conservé dans le stockage interne de l\'application","setFileLocalHint":"Voulez-vous travailler avec des fichiers locaux ?","setFileDownloadApp":"Télécharger l\'application","setFileSave":"Enregistrer","setFileSaveTo":"Enregistrer sous...","setFileClose":"Fermer","setFileSync":"Sync","setFileSyncVerb":"Synchroniser","setFileSaveToXml":"XML","setFileSaveToHtml":"HTML","setFileLastSync":"Dernière synchro","setFileLastSyncUnknown":"inconnu","setFileSyncInProgress":"synchronisation en cours","setFileSyncError":"Sync erreur","setFilePass":"Mot de passe principal","setFileConfirmPass":"Confirmer le mot de passe Maître","setFilePassChange":"pour changer le mot de passe, merci de le saisir dans le champ Confirmation","setFilePassChanged":"Le mot de passe a été changé ; laissez le champ vide pour utiliser l\'ancien mot de passe","setFilePassNotMatch":"les mots de passe ne correspondent pas, veuillez réessayer","setFileKeyFile":"Fichier clé","setFileSelKeyFile":"Sélectionner fichier clé","setFileNames":"Noms","setFileDefUser":"Utilisateur par défaut","setFileEnableTrash":"Activer corbeille","setFileHistMode":"Historique","setFileHistLimited":"Supprimer les anciens enregistrements automatiquement","setFileHistDisabled":"Ne pas sauvegarder l\'historique","setFileHistUnlimited":"Garder les enregistrements de l\'historique pour toujours","setFileHistLen":"Longueur de l\'historique, conserve les derniers enregistrements","setFileHistSize":"Taille de l\'historique, Mo par fichier","setFileBackups":"Sauvegardes","setFileBackupEnable":"Sauvegarder ce fichier","setFileBackupPath":"Chemin","setFileBackupTime":"Lancer sauvegardes ","setFileBackupNow":"Sauvegarder...","setFileBackupNowWorking":"En cours...","setFileBackupError":"Erreur sauvegarde","setFileBackupErrorDescription":"Erreur à l\'écriture du fichier","setFileBackupErrorIsDir":"Chemin de sauvegarde invalide","setFileBackupErrorIsDirDescription":"Le chemin de sauvegarde semble pointer sur un répertoire. Merci de spécifier un fichier dans un répertoire à la place.","setFileBackupOnSave":"A chaque fois que je sauvegarde","setFileBackupDaily":"Quotidien","setFileBackupWeekly":"Chaque semaine","setFileBackupMonthly":"Chaque mois","setFileBackupManually":"Manuellement, pas de sauvegarde automatique","setFileRounds":"Cycles de chiffrement de la clé","setFileKdfParams":"Fonction de dérivation de clé","setFileKdfParamsIter":"Itérations","setFileKdfParamsMem":"Mémoire, Ko","setFileKdfParamsPar":"Parallèlisme","setFileKeyChangeForce":"Demander à changer la clé après (jours)","setFileUseKeyFile":"Utiliser un fichier clé","setFileUseGenKeyFile":"Utiliser le fichier clé généré","setFileUseOldKeyFile":"Utiliser l\'ancien fichier clé","setFileGenKeyFile":"Générer un nouveau fichier clé","setFileDontUseKeyFile":"Ne pas utiliser de fichier clé","setFileEmptyPass":"Mot de passe vide","setFileEmptyPassBody":"Sauvegarder la base de données avec un mot de passe vide la laisse sans aucune protection. Voulez-vous vraiment faire cela ?","setFileSaveError":"Erreur sauvegarde","setFileSaveErrorBody":"Erreur sauvegarde dans le fichier","setFileAlreadyExists":"Existe déjà","setFileAlreadyExistsBody":"Le fichier {} existe déjà. L\'écraser ?","setFileUnsaved":"Modif non sauvegardées","setFileUnsavedBody":"Il y a des modifications non sauvegardées dans ce fichier","setFileCloseNoSave":"Fermer et perdre les modifs","setFileDontClose":"Ne pas fermer","setFileFormatVersion":"Format de fichier","setFileExportRaw":"Exporter vos mots de passe","setFileExportRawBody":"Le fichier exporté contiendra vos mots de passe, il n\'y seront plus cryptés. Voulez vous continuer ?","setFileDeviceIntro":"Les codes à usage unique de cette {} vont être affichés dans l\'application.","setFileDeviceSettings":"Paramètres","setFileYubiKey":"YubiKey","setFileDontUseYubiKey":"Ne pas utiliser une YubiKey","setFileRefreshYubiKeyList":"Rafraichir la liste","setFileYubiKeyHeader":"YubiKey","setFileYubiKeyBody":"Utiliser une YubiKey comme partie de la clé maitre est dangeureux, et vous risquez de perdre l\'accès à vos mots de passe si quelque chose tourne mal. Avez vous réalisé une sauvegarde de votre fichier avant de modifier les paramètres ?","setFileYubiKeyErrorEmptyMac":"Il semble qu\'il y a une YubiKey connectée, mais elle est invisible. KeeWeb doit avoir été autorisé dans la section \\"Surveillance de l’entrée\\" des paramètres de sécurité pour se connecter à la YubiKey.","setShTitle":"Raccourcis","setShShowAll":"montrer tout","setShColors":"montrer les champs en couleur","setShTrash":"aller à Corbeille","setShFind":"rechercher ou juste commencer à taper","setShClearSearch":"effacer recherche","setShCopyPass":"copier le mot de passe ou le champ sélectionné","setShCopyUser":"copier le nom","setShCopyUrl":"copier le site","setShAutoType":"saisie automatique pour cette entrée","setShPrev":"aller au précédent","setShNext":"aller au prochain","setShCreateEntry":"créer une entrée","setShOpen":"ouvrir/nouveau","setShSave":"sauver tous les fichiers","setShGen":"générer un mot de passe","setShSet":"paramètres","setShCopyPassGlobal":"copier le mot de passe","setShCopyOtp":"Copier l\'OTP","setShAutoTypeGlobal":"saisie automatique","setShCopyPassOnly":"Copier mot de passe","setShRestoreApp":"Ouvrir {}","setShGlobal":"Ces raccourcis à l\'échelle du système fonctionnent lorsque l\'application s\'exécute en arrière-plan. Vous pouvez cliquer dessus pour sélectionner votre propre raccourci.","setShLock":"verrouiller la base","setShEdit":"Appuyez sur une nouvelle combinaison de touches pour la définir comme raccourci.","setPlInstallTitle":"Installer de nouveaux modules","setPlInstallDesc":"Les modules (plugins) de KeeWeb ajoutent des fonctionnalités, thèmes et langues à KeeWeb. Les modules sont lancés avec les même privilèges que KeeWeb : ils peuvent accéder et gérer tous vos mots de passe. Ne jamais installer de modules auxquels vous ne faites pas confiance.","setPlInstallLabel":"URL du module","setPlInstallBtn":"Installer","setPlInstallBtnProgress":"Installation","setPlUninstallBtn":"Désintaller","setPlDisableBtn":"Désactiver","setPlEnableBtn":"Activer","setPlUpdateBtn":"Mettre à jour","setPlLocaleBtn":"Changer pour cette langue","setPlThemeBtn":"Changer pour ce thème","setPlJs":"code","setPlCss":"styles","setPlLoc":"langue","setPlCreatedBy":"Créé par {}","setPlLoadTime":"{} pour charger","setPlLastUpdate":"Dernière vérification des mises à jour","setPlLoadError":"erreur au chargement du module","setPlGalleryLoading":"Chargement des modules, patientez un instant","setPlGalleryLoadError":"erreur au chargement des modules","setPlInstallUrlTitle":"Ajouter un module à partir d\'une URL","setPlInstallUrlDesc":"Si un module n\'est pas dans le catalogue, vous pouvez l\'installer manuellement à partir d\'une URL.","setPlOfficial":"Module officiel KeeWeb","setPlSearch":"Rechercher des modules","setPlDevelop":"Vous souhaitez développer vos propres modules ?","setPlDevelopStart":"Commencez ici","setPlTranslate":"Ou vous pouvez {}","setPlTranslateLink":"traduire l\'appli dans votre langue","setPlAutoUpdate":"Mise à jour automatique","setPlLoadGallery":"Charger le catalogue","setBrowserTitle":"Navigateur","setBrowserIntroDesktop":"KeeWeb peut entrer des mots de passe en utilisant la saisie automatique, cependant, une extension peut être un moyen plus pratique de le faire. KeeWeb prend en charge deux extensions de navigateur:","setBrowserIntroKeeWebConnect":"l\'extension officielle KeeWeb est construite avec les fonctionnalités de KeeWeb, mais vous risquez de manquer certaines fonctionnalités avancées que l\'on peut trouver dans l\'autre extension.","setBrowserIntroKeePassXcBrowser":"cette extension a été développée pour KeePassXC, elle existe depuis un moment et est assez fiable. L\'extension ne fait pas partie de KeeWeb et il peut y avoir des problèmes de compatibilité.","setBrowserIntroWeb":"Installez notre extension de navigateur pour remplir automatiquement les mots de passe de KeeWeb sur différentes pages. L\'extension de navigateur se connectera à un onglet KeeWeb de votre navigateur pour récupérer les mots de passe. Cliquez ici pour télécharger l\'extension:","setBrowserNotEnabled":"L\'intégration du navigateur n\'est pas activée, les extensions ne pourront pas se connecter à KeeWeb. Utilisez les cases à cocher ci-dessous pour l\'activer:","setBrowserEnablePerBrowser":"Activer l\'intégration dans le navigateur en cochant ci dessous:","setBrowserFocusIfLocked":"Ouvrir KeeWeb si le navigateur essaye de se connecter alors que aucun fichier n\'est ouvert","setBrowserFocusIfEmpty":"Afficher la liste si aucune correspondance n\'est trouvée avec l\'URL","setBrowserOtherBrowsers":"Autres navigateurs","setBrowserExtensionFor":"pour {}","setBrowserExtensionNotSupported":"Non supporté","setBrowserExtensionHelp":"Comment installer ?","setBrowserExtensionInstall":"Installer l\'application","setBrowserExtensionKPXCWarnHeader":"{} cessera de fonctionner","setBrowserExtensionKPXCWarnBody1":"Malheureusement, il n\'est pas possible de connecter une extension à plusieurs applications. Si vous connectez l\'extension à KeeWeb, nous remplacerons son association d\'application, ce qui signifie que l\'intégration avec {} cessera de fonctionner. Même si vous décochez cette case, l\'association avec {} ne sera pas restaurée. Pour le faire fonctionner à nouveau, configurez l\'intégration du navigateur dans les paramètres de {}.","setBrowserExtensionKPXCWarnBody2":"Configurer l\'extension pour utiliser KeeWeb?","setBrowserSessions":"Sessions","setBrowserSessionsEmpty":"Aucune session connectée","setBrowserSessionsIntro":"Ces extensions sont connectées à KeeWeb","setBrowserSessionsActiveTooltip":"Session active","setBrowserSessionsActiveText":"Cette session est active. Elle peut échanger des données avec KeeWeb selon les permissions:","setBrowserSessionsInactiveTooltip":"session inactive","setBrowserSessionsInactiveText":"Cette session est inactive. L\'extension est connectée à KeeWeb, cependant, elle n\'a pas essayé d\'échanger des données. Lorsque l\'extension demande quelque chose, vous pourrez choisir ce que vous souhaitez partager.","setBrowserSessionsDeniedTooltip":"Accès interdit","setBrowserSessionsDeniedText":"Cette session est inactive. L\'extension est connectée à KeeWeb mais vous avez refusé l\'accès aux données.","setBrowserSessionsConnectedDate":"Connecté","setBrowserSessionsTerminate":"Clôturer la session","setBrowserSessionsAccessToFiles":"Autoriser l\'accès aux fichiers","setBrowserSessionsNoFileAccess":"L\'extension n\'a accès à aucun fichier, elle ne pourra pas récupérer les mots de passe de KeeWeb.","setBrowserSessionsPasswordsRead":"Accès aux mot de passe","setBrowserSessionsPasswordsWritten":"Mots de passe enregistrés","setDevicesTitle":"Appareils","setDevicesEnableUsb":"Autoriser les interactions avec les appareils USB","setDevicesYubiKeyIntro":"Il est recommandé de lire {} avant d\'utiliser une YubiKey.","setDevicesYubiKeyIntroLink":"ce document","setDevicesYubiKeyToolsDesc":"Pour permettre l\'utilisation de YubiKey dans ce mode, vous devez installer un outil appelé {}.","setDevicesYubiKeyToolsDesc2":"{} pour avoir plus d\'information sur cet outil.","setDevicesYubiKeyToolsDescLink":"Cliquez ici","setDevicesYubiKeyToolsStatusChecking":"Vérification si {} est installé","setDevicesYubiKeyToolsStatusOk":"{} est installé","setDevicesYubiKeyToolsStatusError":"{} n\'est pas installé, ou ne fonctionne pas","setDevicesYubiKeyOtpTitle":"Codes à usage unique","setDevicesYubiKeyOtpDesc":"YubiKey peut être utilisé pour générer des codes à usage unique pour différents services.","setDevicesYubiKeyOtpShowIcon":"Afficher l\'icône sur l\'écran de démarrage","setDevicesYubiKeyOtpAutoOpen":"Charger automatiquement les codes à usage unique lorsqu\'il y a des fichiers ouverts","setDevicesYubiKeyOtpMatchEntries":"Afficher les codes à usage unique qui correspondent dans les entrées","setDevicesYubiKeyChalRespTitle":"Challenge-Réponse","setDevicesYubiKeyChalRespDesc":"Il est aussi possible d\'utiliser une YubiKey en mode Challenge-Réponse, afin qu\'une partie de la clé privée utilisée pour crypter les fichiers provienne d\'une YubiKey.","setDevicesYubiKeyChalRespShow":"Proposer l\'option d\'utiliser une YubiKey à l\'ouverture des fichiers","setDevicesYubiKeyStuckWorkaround":"Reconnecter la YubiKey si elle semble bloquée au moment du chargement","setDevicesYubiKeyRememberChalResp":"Se souvenir du challenge-réponse le temps que l\'application reste ouverte","setAboutTitle":"À propos","setAboutBuilt":"Cette appli est construite avec ces outils géniaux","setAboutLic":"Licence","setAboutLicComment":"Cette application et tous les composants qu\'elle contient qui ne sont pas dans le domaine public sont sous licence MIT, sauf si autrement spécifié","setAboutFirst":"Ceci est une application open-source créée par {}","setAboutSecond":" et sous licence {}.","setAboutSource":"Le code source et les problèmes sont sur {}.","setHelpFormat":"Format de fichier","setHelpFormatBody":"Ceci est un portage de l\'appli {} développée avec les technologies web. Il interprète les fichiers au format KeePass (kdbx). Vous pouvez créer de tels fichiers (bases de données de mots de passe) soit avec KeePass, soit avec cette appli. Le format de fichier est 100% compatible et devrait être compris par les 2 applications.","setHelpProblems":"Un problème ?","setHelpProblems1":"Si quelque chose ne va pas, merci de {}","setHelpProblems2":"ou {}","setHelpOpenIssue":"faire connaître le problème sur GitHub","setHelpContactLink":"contactez le développeur directement","setHelpAppInfo":"Informations","setHelpOtherPlatforms":"Autres plateformes","setHelpDesktopApps":"Applis Desktop","setHelpWebApp":"Appli web","setHelpUpdates":"Mises à jour","setHelpTwitter":"Twitter","dropboxSetupDesc":"Une configuration particulière est nécessaire pour utiliser Dropbox dans une application auto-hébergée. Merci de créer votre propre application Dropbox et d\'inscrire sa clé ci-dessous.","dropboxAppKey":"Clé Dropbox","dropboxAppKeyDesc":"Copier la clé de votre appli Dropbox (Réglages développeur)","dropboxAppKeyHint":"Votre \\"Dropbox App Key\\"","dropboxAppSecret":"Votre \\"Dropbox App Secret\\"","dropboxAppSecretDesc":"Votre \\"Dropbox App Secret\\" peut être trouvée à côté de votre \\"Dropbox App Key\\".","dropboxFolder":"Dossier Appli","dropboxFolderDesc":"Si votre appli est liée à l\'espace Dropbox entier (et non un dossier), définir le dossier avec vos fichiers Kdbx ici","dropboxFolderSettingsDesc":"Sélectionner un dossier dans votre Dropbox où les fichiers sont stockés (à la racine par défaut)","dropboxFolderPlaceholder":"dossier par défaut","dropboxLink":"Lier l\'appli à","dropboxLinkApp":"Dossier de l\'appli (Apps/KeeWeb)","dropboxLinkFull":"Tout Dropbox ou n\'importe quel dossier","dropboxLinkCustom":"Votre appli Dropbox","gdriveSharedWithMe":"Partagé avec moi","gdriveSharedDrives":"Lecteurs partagés","gdriveTeamDrives":"Team drives","webdavSaveMethod":"Méthode de sauvegarde","webdavSaveMove":"Envoyer un fichier temporaire et le déplacer","webdavSavePut":"Écraser le fichier kdbx avec PUT","webdavNoLastModified":"L\'entête HTTP \\"Last-Modified\\" est absent","webdavStatReload":"Toujours recharger le fichier au lieu de se fier à l\'entête HTTP \\"Last-Modified\\"","launcherSave":"Sauvegarder base des mots de passe","launcherFileFilter":"Fichiers Keepass","authPopupRequired":"Les pop-up sont bloquées","authPopupRequiredBody":"Merci d\'autoriser les pop-ups pour cette appli dans votre navigateur ou essayez à nouveau.","exportFileInfo":"Propriétés du fichier","exportHtmlName":"Nom","exportHtmlDate":"Date d\'exportation","exportGenerator":"Logiciel","exportDescription":"Ce fichier est généré par {}.","importCsvTitle":"Import depuis un CSV","importCsvRun":"Importer","importIgnoreField":"Ignorer","importTo":"Les entrées seront importées dans","importNewFile":"Nouveau fichier","yubiKeyStuckError":"La YubiKey semble coincée, la réparation automatique est activable dans les paramètres de l\'application.","yubiKeyNoKeyHeader":"Une YubiKey est requise","yubiKeyNoKeyBody":"Merci d\'insérer votre YubiKey avec le numéro de série {}","yubiKeySlot":"port","yubiKeyTouchRequestedHeader":"Touchez votre YubiKey","yubiKeyTouchRequestedBody":"Merci de toucher votre YubiKey avec le numéro de série {}","yubiKeyDisabledErrorHeader":"L\'USB est désactivé","yubiKeyDisabledErrorBody":"Yubikey est nécessaire pour ouvrir ce fichier, merci d\'activer les appareils USB dans les paramètres","yubiKeyErrorWithCode":"Erreur Yubikey code {}.","bioOpenAuthPrompt":"ouvrir \\"{}\\"","extensionErrorNoOpenFiles":"Aucun fichier ouvert","extensionErrorUserRejected":"La requête a été refusée","extensionErrorNoMatches":"Aucune correspondance","extensionErrorAlertDisplayed":"Impossible de poser une question maintenant car une autre boîte de dialogue est affichée, veuillez réessayer","extensionConnectHeader":"Échange de données avec l\'extension","extensionConnectIntro":"Une extension de navigateur qui a pour nom {} essaie d\'échanger des données avec KeeWeb.","extensionConnectUnknownActivity":"KeeWeb ne vérifie pas que l\'application connectée est ce qu\'elle prétend être. N\'approuvez la demande que si vous en connaissez l\'origine.","extensionConnectFiles":"Lors de cette session, autoriser l\'accès à:","extensionConnectAllOtherFiles":"Tous les autres fichiers","extensionConnectAllFiles":"Tous les fichiers","extensionConnectAskGet":"Demandez avant d\'envoyer les mots de passe à l\'extension:","extensionConnectAskGetMultiple":"s\'il y a plus d\'une correspondance","extensionConnectAskGetAlways":"Toujours","extensionConnectAskSave":"Demandez avant d\'enregistrer de nouveaux mots de passe dans KeeWeb:","extensionConnectAskSaveAlways":"Toujours","extensionConnectAskSaveAuto":"quand ce n\'est pas possible de sauvegarder automatiquement","extensionConnectSettingsAreForSession":"Les paramètres que vous sélectionnez ici ne sont valides que pour la session en cours. Vous pouvez afficher et gérer les sessions dans les paramètres de KeeWeb.","extensionUnlockMessage":"Déverrouiller pour connecter l\'extension du navigateur","extensionNewGroupHeader":"Nouveau groupe","extensionNewGroupBody":"{} essaye de créer un nouveau groupe. Autoriser cela?","extensionNewGroupPath":"Dossier du groupe","extensionNewGroupFile":"Ce groupe sera créé dans:","extensionSaveEntryHeader":"Sauvegarder mot de passe","extensionSaveEntryBody":"{} essaye de sauvegarder un mot de passe. Autoriser cela?","extensionSaveEntryAuto":"Sauvegarder les autres mots de passe automatiquement lors de cette session","extensionSaveEntryNewGroup":"nouveau groupe","extensionSelectPasswordFor":"Sélectionner un mot de passe pour {}","selectEntryHeader":"Sélectionner une entrée","selectEntryEnterHint":"Utiliser la ligne sélectionnée","selectEntryTypingHint":"Ecrire pour filtrer","selectEntryContains":"Contient le texte","selectEntrySubdomains":"Sous-domaines","selectEntryFieldHeader":"Sélectionnez un champ","selectEntryFieldTouch":"Appuyez sur le bouton de votre appareil pour générer un code à usage unique."}')},3267:(e,t,n)=>{var s={"./base.json":6846,"./de-DE.json":582,"./fr-FR.json":8515};function i(e){var t=r(e);return n(t)}function r(e){if(!n.o(s,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return s[e]}i.keys=function(){return Object.keys(s)},i.resolve=r,e.exports=i,i.id=3267},4367:(e,t,n)=>{var s={"./settings-about-view":1127,"./settings-browser-view":2112,"./settings-devices-view":9646,"./settings-file-otp-device-view":8387,"./settings-file-view":1500,"./settings-general-view":9383,"./settings-help-view":1426,"./settings-logs-view":3346,"./settings-plugins-view":868,"./settings-prv-view":2416,"./settings-shortcuts-view":1499};function i(e){var t=r(e);return n(t)}function r(e){if(!n.o(s,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return s[e]}i.keys=function(){return Object.keys(s)},i.resolve=r,e.exports=i,i.id=4367},7814:(e,t,n)=>{var s={"./app":2789,"./app.js":2789,"./auto-type":3898,"./auto-type/":3898,"./auto-type/auto-type-emitter":5272,"./auto-type/auto-type-emitter.js":5272,"./auto-type/auto-type-helper":917,"./auto-type/auto-type-helper.js":917,"./auto-type/auto-type-obfuscator":860,"./auto-type/auto-type-obfuscator.js":860,"./auto-type/auto-type-parser":599,"./auto-type/auto-type-parser.js":599,"./auto-type/auto-type-runner":7507,"./auto-type/auto-type-runner.js":7507,"./auto-type/index":3898,"./auto-type/index.js":3898,"./collections/entry-collection":8533,"./collections/entry-collection.js":8533,"./collections/file-collection":6253,"./collections/file-collection.js":6253,"./collections/file-info-collection":6469,"./collections/file-info-collection.js":6469,"./collections/group-collection":6195,"./collections/group-collection.js":6195,"./collections/menu/menu-item-collection":900,"./collections/menu/menu-item-collection.js":900,"./collections/menu/menu-option-collection":8604,"./collections/menu/menu-option-collection.js":8604,"./collections/menu/menu-section-collection":8567,"./collections/menu/menu-section-collection.js":8567,"./collections/search-result-collection":6491,"./collections/search-result-collection.js":6491,"./comp/app/app-rights-checker":8537,"./comp/app/app-rights-checker.js":8537,"./comp/app/chal-resp-calculator":9621,"./comp/app/chal-resp-calculator.js":9621,"./comp/app/drag-drop-info":9207,"./comp/app/drag-drop-info.js":9207,"./comp/app/dropbox-chooser":2596,"./comp/app/dropbox-chooser.js":2596,"./comp/app/export-api":6608,"./comp/app/export-api.js":6608,"./comp/app/focus-manager":4953,"./comp/app/focus-manager.js":4953,"./comp/app/generator-presets":1622,"./comp/app/generator-presets.js":1622,"./comp/app/online-password-checker":4558,"./comp/app/online-password-checker.js":4558,"./comp/app/select-entry-filter":3660,"./comp/app/select-entry-filter.js":3660,"./comp/app/shortcuts":7027,"./comp/app/shortcuts.js":7027,"./comp/app/single-instance-checker":6420,"./comp/app/single-instance-checker.js":6420,"./comp/app/start-profiler":8578,"./comp/app/start-profiler.js":8578,"./comp/app/updater":5621,"./comp/app/updater.js":5621,"./comp/app/usb-listener":8647,"./comp/app/usb-listener.js":8647,"./comp/app/yubikey":9777,"./comp/app/yubikey.js":9777,"./comp/browser/copy-paste":5933,"./comp/browser/copy-paste.js":5933,"./comp/browser/feature-tester":8132,"./comp/browser/feature-tester.js":8132,"./comp/browser/focus-detector":9053,"./comp/browser/focus-detector.js":9053,"./comp/browser/idle-tracker":5665,"./comp/browser/idle-tracker.js":5665,"./comp/browser/key-handler":1164,"./comp/browser/key-handler.js":1164,"./comp/browser/popup-notifier":5358,"./comp/browser/popup-notifier.js":5358,"./comp/browser/secure-input":6892,"./comp/browser/secure-input.js":6892,"./comp/browser/theme-watcher":8180,"./comp/browser/theme-watcher.js":8180,"./comp/browser/transport":2118,"./comp/browser/transport.js":2118,"./comp/extension/browser-extension-connector":8432,"./comp/extension/browser-extension-connector.js":8432,"./comp/extension/protocol-impl":5886,"./comp/extension/protocol-impl.js":5886,"./comp/format/kdbx-to-html":1673,"./comp/format/kdbx-to-html.js":1673,"./comp/format/otp-qr-reader":6655,"./comp/format/otp-qr-reader.js":6655,"./comp/i18n/date-format":6098,"./comp/i18n/date-format.js":6098,"./comp/launcher":9491,"./comp/launcher/":9491,"./comp/launcher/index":9491,"./comp/launcher/index.js":9491,"./comp/launcher/launcher-electron":547,"./comp/launcher/launcher-electron.js":547,"./comp/launcher/native-modules":3006,"./comp/launcher/native-modules.js":3006,"./comp/settings/settings-manager":111,"./comp/settings/settings-manager.js":111,"./comp/settings/settings-store":6524,"./comp/settings/settings-store.js":6524,"./comp/ui/alerts":4530,"./comp/ui/alerts.js":4530,"./const/cloud-storage-apps":5754,"./const/cloud-storage-apps.js":5754,"./const/colors":7017,"./const/colors.js":7017,"./const/default-app-settings":4491,"./const/default-app-settings.js":4491,"./const/entry-fields":9166,"./const/entry-fields.js":9166,"./const/hardware":4596,"./const/hardware.js":4596,"./const/icon-map":353,"./const/icon-map.js":353,"./const/inline-images":7086,"./const/inline-images.js":7086,"./const/keys":2977,"./const/keys.js":2977,"./const/known-app-versions":3942,"./const/known-app-versions.js":3942,"./const/links":9673,"./const/links.js":9673,"./const/runtime-info":7119,"./const/runtime-info.js":7119,"./const/timeouts":403,"./const/timeouts.js":403,"./framework/collection":9071,"./framework/collection.js":9071,"./framework/events":7201,"./framework/events.js":7201,"./framework/model":9186,"./framework/model.js":9186,"./framework/views/copyable":4796,"./framework/views/copyable.js":4796,"./framework/views/resizable":8892,"./framework/views/resizable.js":8892,"./framework/views/scrollable":7015,"./framework/views/scrollable.js":7015,"./framework/views/view":7779,"./framework/views/view.js":7779,"./hbs-helpers":3676,"./hbs-helpers/":3676,"./hbs-helpers/add":9861,"./hbs-helpers/add.js":9861,"./hbs-helpers/cmp":4540,"./hbs-helpers/cmp.js":4540,"./hbs-helpers/ifemptyoreq":2156,"./hbs-helpers/ifemptyoreq.js":2156,"./hbs-helpers/ifeq":7672,"./hbs-helpers/ifeq.js":7672,"./hbs-helpers/ifneq":580,"./hbs-helpers/ifneq.js":580,"./hbs-helpers/index":3676,"./hbs-helpers/index.js":3676,"./hbs-helpers/res":8386,"./hbs-helpers/res.js":8386,"./locales/base":6846,"./locales/base.json":6846,"./locales/de-DE":582,"./locales/de-DE.json":582,"./locales/fr-FR":8515,"./locales/fr-FR.json":8515,"./models/app-model":2985,"./models/app-model.js":2985,"./models/app-settings-model":7614,"./models/app-settings-model.js":7614,"./models/attachment-model":5667,"./models/attachment-model.js":5667,"./models/entry-model":7725,"./models/entry-model.js":7725,"./models/file-info-model":3850,"./models/file-info-model.js":3850,"./models/file-model":7449,"./models/file-model.js":7449,"./models/group-model":5572,"./models/group-model.js":5572,"./models/menu/groups-menu-model":5782,"./models/menu/groups-menu-model.js":5782,"./models/menu/menu-item-model":9233,"./models/menu/menu-item-model.js":9233,"./models/menu/menu-model":4563,"./models/menu/menu-model.js":4563,"./models/menu/menu-option-model":4655,"./models/menu/menu-option-model.js":4655,"./models/menu/menu-section-model":4954,"./models/menu/menu-section-model.js":4954,"./models/otp-device/otp-device-entry-collection":1192,"./models/otp-device/otp-device-entry-collection.js":1192,"./models/otp-device/otp-device-entry-model":1909,"./models/otp-device/otp-device-entry-model.js":1909,"./models/otp-device/otp-device-model":3593,"./models/otp-device/otp-device-model.js":3593,"./models/otp-device/otp-entry-model":1342,"./models/otp-device/otp-entry-model.js":1342,"./models/otp-device/yubikey-otp-model":9686,"./models/otp-device/yubikey-otp-model.js":9686,"./models/runtime-data-model":8925,"./models/runtime-data-model.js":8925,"./models/update-model":2706,"./models/update-model.js":2706,"./plugins/plugin":1203,"./plugins/plugin-api":484,"./plugins/plugin-api.js":484,"./plugins/plugin-collection":1525,"./plugins/plugin-collection.js":1525,"./plugins/plugin-gallery":3172,"./plugins/plugin-gallery.js":3172,"./plugins/plugin-manager":739,"./plugins/plugin-manager.js":739,"./plugins/plugin.js":1203,"./plugins/theme-vars":7378,"./plugins/theme-vars.js":7378,"./presenters/entry-presenter":9938,"./presenters/entry-presenter.js":9938,"./storage":949,"./storage/":949,"./storage/impl/storage-cache":7980,"./storage/impl/storage-cache.js":7980,"./storage/impl/storage-dropbox":526,"./storage/impl/storage-dropbox.js":526,"./storage/impl/storage-file":7899,"./storage/impl/storage-file-cache":3758,"./storage/impl/storage-file-cache.js":3758,"./storage/impl/storage-file.js":7899,"./storage/impl/storage-gdrive":5661,"./storage/impl/storage-gdrive.js":5661,"./storage/impl/storage-onedrive":1854,"./storage/impl/storage-onedrive.js":1854,"./storage/impl/storage-teams":194,"./storage/impl/storage-teams.js":194,"./storage/impl/storage-webdav":1337,"./storage/impl/storage-webdav.js":1337,"./storage/index":949,"./storage/index.js":949,"./storage/io-browser-cache":6902,"./storage/io-browser-cache.js":6902,"./storage/io-cache":3366,"./storage/io-cache.js":3366,"./storage/io-file-cache":7811,"./storage/io-file-cache.js":7811,"./storage/pkce":5434,"./storage/pkce.js":5434,"./storage/storage-base":8402,"./storage/storage-base.js":8402,"./storage/storage-oauth-listener":4715,"./storage/storage-oauth-listener.js":4715,"./util/data/color":4546,"./util/data/color.js":4546,"./util/data/comparators":8612,"./util/data/comparators.js":8612,"./util/data/csv-parser":8009,"./util/data/csv-parser.js":8009,"./util/data/otp":9081,"./util/data/otp.js":9081,"./util/data/password-strength":905,"./util/data/password-strength.js":905,"./util/data/ranking":5563,"./util/data/ranking.js":5563,"./util/data/semver":8146,"./util/data/semver.js":8146,"./util/data/signature-verifier":7536,"./util/data/signature-verifier.js":7536,"./util/entry-search":9907,"./util/entry-search.js":9907,"./util/features":667,"./util/features.js":667,"./util/fn":6838,"./util/fn.js":6838,"./util/formatting/icon-url-format":8495,"./util/formatting/icon-url-format.js":8495,"./util/formatting/md-to-html":8134,"./util/formatting/md-to-html.js":8134,"./util/formatting/password-presenter":1705,"./util/formatting/password-presenter.js":1705,"./util/formatting/string-format":2378,"./util/formatting/string-format.js":2378,"./util/formatting/url-format":4798,"./util/formatting/url-format.js":4798,"./util/generators/id-generator":1240,"./util/generators/id-generator.js":1240,"./util/generators/password-generator":4486,"./util/generators/password-generator.js":4486,"./util/generators/phonetic":8709,"./util/generators/phonetic.js":8709,"./util/kdbxweb/kdbxweb-init":1504,"./util/kdbxweb/kdbxweb-init.js":1504,"./util/kdbxweb/protected-value-ex":9689,"./util/kdbxweb/protected-value-ex.js":9689,"./util/locale":3297,"./util/locale.js":3297,"./util/logger":2363,"./util/logger.js":2363,"./util/ui/file-saver":2547,"./util/ui/file-saver.js":2547,"./util/ui/input-fx":7609,"./util/ui/input-fx.js":7609,"./util/ui/tip":3710,"./util/ui/tip.js":3710,"./views/app-view":2014,"./views/app-view.js":2014,"./views/auto-type/auto-type-hint-view":2385,"./views/auto-type/auto-type-hint-view.js":2385,"./views/details/details-add-field-view":3122,"./views/details/details-add-field-view.js":3122,"./views/details/details-attachment-view":2550,"./views/details/details-attachment-view.js":2550,"./views/details/details-auto-type-view":4184,"./views/details/details-auto-type-view.js":4184,"./views/details/details-fields":9042,"./views/details/details-fields.js":9042,"./views/details/details-history-view":264,"./views/details/details-history-view.js":264,"./views/details/details-issues-view":2524,"./views/details/details-issues-view.js":2524,"./views/details/details-view":2766,"./views/details/details-view.js":2766,"./views/drag-view":1864,"./views/drag-view.js":1864,"./views/dropdown-view":1434,"./views/dropdown-view.js":1434,"./views/extension/extension-connect-view":7031,"./views/extension/extension-connect-view.js":7031,"./views/extension/extension-create-group-view":9793,"./views/extension/extension-create-group-view.js":9793,"./views/extension/extension-save-entry-view":2729,"./views/extension/extension-save-entry-view.js":2729,"./views/fields/field-view":4707,"./views/fields/field-view-autocomplete":2969,"./views/fields/field-view-autocomplete.js":2969,"./views/fields/field-view-custom":4169,"./views/fields/field-view-custom.js":4169,"./views/fields/field-view-date":2574,"./views/fields/field-view-date.js":2574,"./views/fields/field-view-history":8108,"./views/fields/field-view-history.js":8108,"./views/fields/field-view-otp":8877,"./views/fields/field-view-otp.js":8877,"./views/fields/field-view-read-only":9260,"./views/fields/field-view-read-only-raw":2402,"./views/fields/field-view-read-only-raw.js":2402,"./views/fields/field-view-read-only-with-options":4984,"./views/fields/field-view-read-only-with-options.js":4984,"./views/fields/field-view-read-only.js":9260,"./views/fields/field-view-select":2836,"./views/fields/field-view-select.js":2836,"./views/fields/field-view-tags":3033,"./views/fields/field-view-tags.js":3033,"./views/fields/field-view-text":1297,"./views/fields/field-view-text.js":1297,"./views/fields/field-view-url":1960,"./views/fields/field-view-url.js":1960,"./views/fields/field-view.js":4707,"./views/footer-view":5249,"./views/footer-view.js":5249,"./views/generator-presets-view":7953,"./views/generator-presets-view.js":7953,"./views/generator-view":1473,"./views/generator-view.js":1473,"./views/grp-view":5984,"./views/grp-view.js":5984,"./views/icon-select-view":3872,"./views/icon-select-view.js":3872,"./views/import-csv-view":97,"./views/import-csv-view.js":97,"./views/key-change-view":7622,"./views/key-change-view.js":7622,"./views/list-search-view":248,"./views/list-search-view.js":248,"./views/list-view":7780,"./views/list-view.js":7780,"./views/list-wrap-view":9676,"./views/list-wrap-view.js":9676,"./views/menu/menu-item-view":1956,"./views/menu/menu-item-view.js":1956,"./views/menu/menu-section-view":913,"./views/menu/menu-section-view.js":913,"./views/menu/menu-view":6498,"./views/menu/menu-view.js":6498,"./views/modal-view":5266,"./views/modal-view.js":5266,"./views/open-chal-resp-view":5634,"./views/open-chal-resp-view.js":5634,"./views/open-config-view":1764,"./views/open-config-view.js":1764,"./views/open-view":2791,"./views/open-view.js":2791,"./views/select/select-entry-field-view":3659,"./views/select/select-entry-field-view.js":3659,"./views/select/select-entry-view":4583,"./views/select/select-entry-view.js":4583,"./views/settings/settings-about-view":1127,"./views/settings/settings-about-view.js":1127,"./views/settings/settings-browser-view":2112,"./views/settings/settings-browser-view.js":2112,"./views/settings/settings-devices-view":9646,"./views/settings/settings-devices-view.js":9646,"./views/settings/settings-file-otp-device-view":8387,"./views/settings/settings-file-otp-device-view.js":8387,"./views/settings/settings-file-view":1500,"./views/settings/settings-file-view.js":1500,"./views/settings/settings-general-view":9383,"./views/settings/settings-general-view.js":9383,"./views/settings/settings-help-view":1426,"./views/settings/settings-help-view.js":1426,"./views/settings/settings-logs-view":3346,"./views/settings/settings-logs-view.js":3346,"./views/settings/settings-plugins-view":868,"./views/settings/settings-plugins-view.js":868,"./views/settings/settings-prv-view":2416,"./views/settings/settings-prv-view.js":2416,"./views/settings/settings-shortcuts-view":1499,"./views/settings/settings-shortcuts-view.js":1499,"./views/settings/settings-view":4199,"./views/settings/settings-view.js":4199,"./views/storage-file-list-view":4902,"./views/storage-file-list-view.js":4902,"./views/tag-view":9993,"./views/tag-view.js":9993,"./views/titlebar-view":357,"./views/titlebar-view.js":357};function i(e){var t=r(e);return n(t)}function r(e){if(!n.o(s,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return s[e]}i.keys=function(){return Object.keys(s)},i.resolve=r,e.exports=i,i.id=7814},2789:(e,t,n)=>{"use strict";n.r(t);var s=n(7201),i=n(8578),r=n(6469),o=n(8537),a=n(6608),l=n(6420),c=n(5621),u=n(8647),d=n(8432),h=n(8132),p=n(9053),m=n(5665),g=n(8180),f=n(1164),A=n(5358),y=n(9491),v=n(111),b=n(4530),w=n(403),k=n(2985),C=n(7614),_=n(8925),E=n(2706),x=n(739),I=n(667),S=n(1504),D=n(3297),B=n(2014),P=(n(3676),n(3898)),T=n(949),F=n(6718);i.StartProfiler.milestone("loading modules");(y.Launcher&&y.Launcher.ready||F)((()=>{i.StartProfiler.milestone("document ready");const e=new k.AppModel;function t(){new B.AppView(e).render(),i.StartProfiler.milestone("first view rendering"),s.Events.emit("app-ready"),i.StartProfiler.milestone("app ready event"),i.StartProfiler.report()}i.StartProfiler.milestone("creating app model"),Promise.resolve().then((function(){return Promise.all([C.AppSettingsModel.load(),E.UpdateModel.load(),_.RuntimeDataModel.load(),r.FileInfoCollection.load()]).then((()=>{i.StartProfiler.milestone("loading configs")}))})).then((function(){return f.KeyHandler.init(),A.PopupNotifier.init(),S.KdbxwebInit.init(),p.FocusDetector.init(),P.AutoType.init(),g.ThemeWatcher.init(),v.SettingsManager.init(),window.kw=a.ExportApi,x.PluginManager.init().then((()=>{i.StartProfiler.milestone("initializing modules")}))})).then((function(){return Promise.resolve().then((()=>{v.SettingsManager.setBySettings();const t=function(){const e=document.head.querySelector("meta[name=kw-config]");if(e&&e.content&&"("!==e.content[0])return e.content;const t=location.search.match(/[?&]config=([^&]+)/i);if(t&&t[1])return t[1]}();if(t)return e.loadConfig(t).then((()=>{v.SettingsManager.setBySettings()})).catch((t=>{if(!e.settings.cacheConfigSettings)throw b.Alerts.error({header:D.Locale.appSettingsError,body:D.Locale.appSettingsErrorBody,buttons:[],esc:!1,enter:!1,click:!1}),t}))})).then((()=>{i.StartProfiler.milestone("loading remote config")}))})).then((function(){if(I.Features.isFrame&&!e.settings.allowIframes)return Promise.reject("Running in iframe is not allowed (this can be changed in the app config).");return h.FeatureTester.test().catch((e=>{throw b.Alerts.error({header:D.Locale.appSettingsError,body:D.Locale.appNotSupportedError,pre:e,buttons:[],esc:!1,enter:!1,click:!1}),"Feature testing failed: "+e})).then((()=>{i.StartProfiler.milestone("checking features")}))})).then((function(){for(const e of Object.values(T.Storage))e.init();i.StartProfiler.milestone("initializing storage")})).then((function(){u.UsbListener.init(),i.StartProfiler.milestone("starting usb")})).then((function(){return Promise.resolve().then((()=>{const n=localStorage.skipHttpsWarning||e.settings.skipHttpsWarning,s=["https:","file:","app:"].indexOf(location.protocol)<0,i="localhost"!==location.hostname;return s&&i&&!n?new Promise((e=>{b.Alerts.error({header:D.Locale.appSecWarn,icon:"user-secret",esc:!1,enter:!1,click:!1,body:D.Locale.appSecWarnBody1+"\n\n"+D.Locale.appSecWarnBody2,buttons:[{result:"",title:D.Locale.appSecWarnBtn,error:!0}],complete:()=>{t(),e()}})})):(t(),new Promise((e=>requestAnimationFrame(e))))}))})).then((function(){setTimeout((()=>{c.Updater.init(),l.SingleInstanceChecker.init(),o.AppRightsChecker.init(),m.IdleTracker.init(),d.BrowserExtensionConnector.init(e),x.PluginManager.runAutoUpdate()}),w.Timeouts.AutoUpdatePluginsAfterStart)})).catch((t=>{e.appLogger.error("Error starting app",t)}))}))},5272:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AutoTypeEmitter:()=>d});var s=n(667),i=n(3006),r=n(2363),o=n(9491),a=n(403);const l=new r.Logger("auto-type-emitter"),c={tab:"Tab",enter:"Return",space:"Space",up:"UpArrow",down:"DownArrow",left:"LeftArrow",right:"RightArrow",home:"Home",end:"End",pgup:"PageUp",pgdn:"PageDown",ins:"Insert",del:"ForwardDelete",bs:"BackwardDelete",esc:"Escape",win:"Meta",rwin:"RightMeta",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",f13:"F13",f14:"F14",f15:"F15",f16:"F16",add:"KeypadPlus",subtract:"KeypadMinus",multiply:"KeypadMultiply",divide:"KeypadDivide",n0:"D0",n1:"D1",n2:"D2",n3:"D3",n4:"D4",n5:"D5",n6:"D6",n7:"D7",n8:"D8",n9:"D9"},u={"^":s.Features.isMac?"Command":"Ctrl","+":"Shift","%":"Alt","^^":"Ctrl"};class d{constructor(e){this.callback=e,this.mod={}}begin(){this.withCallback(i.NativeModules.kbdEnsureModifierNotPressed())}setMod(e,t){const n=u[e];if(!n)return this.callback(`Bad modifier: ${e}`);i.NativeModules.kbdKeyMoveWithModifier(!!t,[n]).catch((n=>{l.error("Error moving modifier",e,t?"down":"up",n)})),t?this.mod[n]=!0:delete this.mod[n]}text(e){if(!e)return this.withCallback(Promise.resolve());const t=Object.keys(this.mod);t.length?this.withCallback(i.NativeModules.kbdTextAsKeys(e,t)):this.withCallback(i.NativeModules.kbdText(e))}key(e){const t=Object.keys(this.mod);if("number"==typeof e)this.withCallback(i.NativeModules.kbdKeyPressWithCharacter(0,e,t));else{if(!c[e])return this.callback("Bad key: "+e);const n=c[e];this.withCallback(i.NativeModules.kbdKeyPress(n,t))}}copyPaste(e){setTimeout((()=>{o.Launcher.setClipboardText(e),setTimeout((()=>{this.withCallback(i.NativeModules.kbdShortcut("V"))}),a.Timeouts.AutoTypeCopyPaste)}),a.Timeouts.AutoTypeCopyPaste)}wait(e){setTimeout((()=>this.withCallback(Promise.resolve())),e)}waitComplete(){this.withCallback(Promise.resolve())}setDelay(){this.callback("Not implemented")}withCallback(e){e.then((()=>{try{this.callback()}catch(e){l.error("Callback error",e)}})).catch((e=>{"Key press failed"===e.message&&(e.keyPressFailed=!0);try{this.callback(e)}catch(e){l.error("Callback error",e)}}))}}},917:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AutoTypeHelper:()=>i});var s=n(3006);class i{getActiveWindowInfo(e){s.NativeModules.kbdGetActiveWindow({getWindowTitle:!0,getBrowserUrl:!0}).then((t=>{e(void 0,t)})).catch((t=>e(t)))}}},860:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AutoTypeObfuscator:()=>o});var s=n(2363);const i=new s.Logger("auto-type-obfuscator",void 0,localStorage.debugAutoType?s.Logger.Level.All:s.Logger.Level.Warn),r="ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz123456789O0oIl",o=function(e){this.chars=e,this.inputChars=[],this.inputCursor=0,this.inputSel=0,this.ops=[],this.stepCount=0,this.copyCount=0};o.prototype.obfuscate=function(){for(;!this.finished();)if(this.step(),this.stepCount++>1e3)throw"Obfuscate failed";for(let e=0;e<this.chars.length;e++)this.chars[e]=null,this.inputChars[e]=null;return this.ops},o.prototype.finished=function(){return this.chars.length===this.inputChars.length&&this.chars.every((function(e,t){return this.inputChars[t].ch===e}),this)},o.prototype.step=function(){this.stepCount<30&&Math.random()>this.stepCount/30?this.stepFake():this.stepReal(),i.getLevel()>=s.Logger.Level.Debug&&i.debug("value",this.inputChars.map((e=>e.ch)).join(""))},o.prototype.stepFake=function(){const e=Math.floor(Math.random()*(this.inputChars.length+1)),t=r[Math.floor(Math.random()*r.length)];i.info("step.fake",e,t),this.moveToPos(e);if(0===this.inputChars.length||Math.random()>.3)this.inputChar(t);else{let n=Math.random()>.5,s=n?e:this.inputChars.length-e;0===s&&(n=!n,s=n?e:this.inputChars.length-e);const i=Math.max(Math.floor(Math.pow(Math.random(),3)*s),1);i<=1&&Math.random()>.5?this.deleteText(n):(this.selectText(n,i),Math.random()>.3?this.deleteText(Math.random()>.5):this.inputChar(t))}},o.prototype.stepReal=function(){const e=[],t=[];let n;for(n=0;n<this.chars.length;n++)t.push(-1);for(n=0;n<this.inputChars.length;n++){const s=this.inputChars[n].ix;void 0===s?e.push({del:!0,pos:n}):t[s]=n}for(n=0;n<this.chars.length;n++)if(t[n]<0){let s=0,i=this.inputChars.length;for(let e=0;e<this.chars.length;e++)if(e<n&&t[e]>=0&&(s=t[e]+1),e>n&&t[e]>=0){i=t[e];break}e.push({ins:!0,ch:this.chars[n],ix:n,from:s,to:i})}const s=e[Math.floor(Math.random()*e.length)];if(i.info("step.real",t,s),s.del)this.moveToPos(s.pos+1),this.deleteText(!0);else{const e=s.from+Math.floor(Math.random()*(s.to-s.from));this.moveToPos(e),this.copyCount<2&&"\n"!==s.ch&&Math.random()>.5?(this.copyCount++,this.copyPaste(s.ch)):this.inputChar(s.ch),this.inputChars[e].ix=s.ix}},o.prototype.moveToPos=function(e){for(i.debug("moveToPos",e);this.inputCursor>e;)this.moveLeft();for(;this.inputCursor<e;)this.moveRight()},o.prototype.moveLeft=function(){i.debug("moveLeft"),this.ops.push({type:"key",value:"left"}),this.inputCursor--,this.inputSel=0},o.prototype.moveRight=function(){i.debug("moveRight"),this.ops.push({type:"key",value:"right"}),this.inputCursor++,this.inputSel=0},o.prototype.inputChar=function(e){i.debug("inputChar",e),this.ops.push({type:"text",value:e}),this.inputChars.splice(this.inputCursor,this.inputSel,{ch:e}),this.inputCursor++,this.inputSel=0},o.prototype.copyPaste=function(e){i.debug("copyPaste",e),this.ops.push({type:"cmd",value:"copyPaste",arg:e}),this.inputChars.splice(this.inputCursor,this.inputSel,{ch:e}),this.inputCursor++,this.inputSel=0},o.prototype.selectText=function(e,t){i.debug("selectText",e?"left":"right",t);const n=[];for(let s=0;s<t;s++)n.push({type:"key",value:e?"left":"right"});1===n.length?(n[0].mod={"+":!0},this.ops.push(n[0])):this.ops.push({type:"group",value:n,mod:{"+":!0}}),e&&(this.inputCursor-=t),this.inputSel=t},o.prototype.deleteText=function(e){i.debug("deleteText",e?"left":"right"),this.ops.push({type:"key",value:e?"bs":"del"}),this.inputSel?(this.inputChars.splice(this.inputCursor,this.inputSel),this.inputSel=0):(this.inputChars.splice(e?this.inputCursor-1:this.inputCursor,1),e&&this.inputCursor--)}},599:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AutoTypeParser:()=>i});var s=n(7507);const i=function(e){this.sequence=e,this.ix=0,this.states=[]};i.opRegex=/^(.*?)(?:([\s:=])[\s:=]*(.*))?$/,i.prototype.parse=function(){const e=this.sequence.length;for(this.pushState();this.ix<e;){const e=this.sequence[this.ix];switch(e){case"{":this.readOp();continue;case"+":case"%":case"^":this.readModifier(e);break;case"(":this.pushState();break;case")":this.popState();break;case" ":break;case"~":this.addOp("enter");break;default:this.addChar(e)}this.ix++}if(1!==this.states.length)throw"Groups count mismatch";return new s.AutoTypeRunner(this.state().ops)},i.prototype.pushState=function(){this.states.unshift({modifiers:null,ops:[]})},i.prototype.popState=function(){if(this.states.length<=1)throw'Unexpected ")" at index '+this.ix;const e=this.states.shift();this.addState(e)},i.prototype.state=function(){return this.states[0]},i.prototype.readOp=function(){const e=this.sequence.indexOf("}",this.ix+2);if(e<0)throw'Mismatched "{" at index '+this.ix;const t=this.sequence.substring(this.ix+1,e);if(this.ix=e+1,1===t.length)return void this.addChar(t);const[,n,s,r]=t.match(i.opRegex);this.addOp(n,s,r)},i.prototype.readModifier=function(e){const t=this.state();t.modifiers||(t.modifiers={}),"^"===e&&t.modifiers["^"]&&(delete t.modifiers["^"],e="^^"),t.modifiers[e]=!0},i.prototype.resetModifiers=function(){const e=this.state(),t=e.modifiers;return e.modifiers=null,t},i.prototype.addState=function(e){this.state().ops.push({type:"group",value:e.ops,mod:this.resetModifiers()})},i.prototype.addChar=function(e){this.state().ops.push({type:"text",value:e,mod:this.resetModifiers()})},i.prototype.addOp=function(e,t,n){this.state().ops.push({type:"op",value:e,mod:this.resetModifiers(),sep:t,arg:n})}},7507:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AutoTypeRunner:()=>l});var s=n(5272),i=n(860),r=n(2378),o=n(2363);const a=new o.Logger("auto-type-emitter",void 0,localStorage.debugAutoType?o.Logger.Level.All:o.Logger.Level.Info),l=function(e){this.ops=e,this.pendingResolvesCount=0,this.entry=null,this.now=new Date};l.PendingResolve={pending:!0},l.Keys={tab:"tab",enter:"enter",space:"space",up:"up",down:"down",left:"left",right:"right",home:"home",end:"end",pgup:"pgup",pgdn:"pgdn",insert:"ins",ins:"ins",delete:"del",del:"del",backspace:"bs",bs:"bs",bksp:"bs",esc:"esc",win:"win",lwin:"win",rwin:"rwin",f1:"f1",f2:"f2",f3:"f3",f4:"f4",f5:"f5",f6:"f6",f7:"f7",f8:"f8",f9:"f9",f10:"f10",f11:"f11",f12:"f12",f13:"f13",f14:"f14",f15:"f15",f16:"f16",add:"add",subtract:"subtract",multiply:"multiply",divide:"divide",numpad0:"n0",numpad1:"n1",numpad2:"n2",numpad3:"n3",numpad4:"n4",numpad5:"n5",numpad6:"n6",numpad7:"n7",numpad8:"n8",numpad9:"n9"},l.Substitutions={title:(e,t)=>e.getEntryFieldKeys("Title",t),username:(e,t)=>e.getEntryFieldKeys("UserName",t),url:(e,t)=>e.getEntryFieldKeys("URL",t),password:(e,t)=>e.getEntryFieldKeys("Password",t),notes:(e,t)=>e.getEntryFieldKeys("Notes",t),group:e=>e.getEntryGroupName(),totp:(e,t)=>e.getOtp(t),s:(e,t)=>e.getEntryFieldKeys(t.arg,t),dt_simple:e=>e.dt("simple"),dt_year:e=>e.dt("Y"),dt_month:e=>e.dt("M"),dt_day:e=>e.dt("D"),dt_hour:e=>e.dt("h"),dt_minute:e=>e.dt("m"),dt_second:e=>e.dt("s"),dt_utc_simple:e=>e.udt("simple"),dt_utc_year:e=>e.udt("Y"),dt_utc_month:e=>e.udt("M"),dt_utc_day:e=>e.udt("D"),dt_utc_hour:e=>e.udt("h"),dt_utc_minute:e=>e.udt("m"),dt_utc_second:e=>e.udt("s")},l.prototype.resolve=function(e,t,n){this.entry=e,this.context=t;try{this.resolveOps(this.ops),this.pendingResolvesCount?this.resolveCallback=n:n()}catch(e){return n(e)}},l.prototype.resolveOps=function(e){for(let t=0,n=e.length;t<n;t++){const n=e[t];"group"===n.type?this.resolveOps(n.value):this.resolveOp(n)}},l.prototype.resolveOp=function(e){var t,n;if(1===e.value.length&&!e.sep)return void(e.type="text");if(1===e.value.length&&" "===e.sep){e.type="text";const t=e.value;let n=t;const s=+e.arg;for(;n.length<s;)n+=t;return void(e.value=n)}const s=e.value.toLowerCase(),i=l.Keys[s];if(i){if(" "===e.sep&&+e.arg>0){e.type="group",e.value=[];const t=+e.arg;for(let n=0;n<t;n++)e.value.push({type:"key",value:i})}else e.type="key",e.value=i;return}if(null!==(t=this.context)&&void 0!==t&&null!==(n=t.resolved)&&void 0!==n&&n[s])return e.type="text",void(e.value=this.context.resolved[s]);const r=l.Substitutions[s];if(r)return e.type="text",e.value=r(this,e),void(e.value===l.PendingResolve&&this.pendingResolvesCount++);if(!this.tryParseCommand(e))throw"Bad op: "+e.value},l.prototype.tryParseCommand=function(e){switch(e.value.toLowerCase()){case"clearfield":return e.type="group",e.value=[{type:"key",value:"end"},{type:"key",value:"home",mod:{"+":!0}},{type:"key",value:"bs"}],!0;case"vkey":if(e.type="key",e.value=parseInt(e.arg),isNaN(e.value)||e.value<0)throw"Bad vkey: "+e.arg;return!0;case"delay":if(e.type="cmd",e.value="="===e.sep?"setDelay":"wait",!e.arg)throw"Delay requires milliseconds count";if(isNaN(+e.arg))throw"Bad delay: "+e.arg;if(e.arg<0)throw"Delay requires positive interval";return e.arg=+e.arg,!0;default:return!1}},l.prototype.getEntryFieldKeys=function(e,t){if(!e||!this.entry)return"";const n=this.entry.getFieldValue(e);if(!n)return"";if(n.isProtected){t.type="group";const e=[];return n.forEachChar((t=>{10===t||13===t?e.push({type:"key",value:"enter"}):e.push({type:"text",value:String.fromCharCode(t)})})),e}{const e=n.split(/[\r\n]/g);if(1===e.length)return n;t.type="group";const s=[];return e.forEach((e=>{s.length&&s.push({type:"key",value:"enter"}),e&&s.push({type:"text",value:e})})),s}},l.prototype.getEntryGroupName=function(){return this.entry&&this.entry.group.title},l.prototype.dt=function(e){switch(e){case"simple":return this.dt("Y")+this.dt("M")+this.dt("D")+this.dt("h")+this.dt("m")+this.dt("s");case"Y":return this.now.getFullYear().toString();case"M":return r.StringFormat.pad(this.now.getMonth()+1,2);case"D":return r.StringFormat.pad(this.now.getDate(),2);case"h":return r.StringFormat.pad(this.now.getHours(),2);case"m":return r.StringFormat.pad(this.now.getMinutes(),2);case"s":return r.StringFormat.pad(this.now.getSeconds(),2);default:throw"Bad part: "+e}},l.prototype.udt=function(e){switch(e){case"simple":return this.udt("Y")+this.udt("M")+this.udt("D")+this.udt("h")+this.udt("m")+this.udt("s");case"Y":return this.now.getUTCFullYear().toString();case"M":return r.StringFormat.pad(this.now.getUTCMonth()+1,2);case"D":return r.StringFormat.pad(this.now.getUTCDate(),2);case"h":return r.StringFormat.pad(this.now.getUTCHours(),2);case"m":return r.StringFormat.pad(this.now.getUTCMinutes(),2);case"s":return r.StringFormat.pad(this.now.getUTCSeconds(),2);default:throw"Bad part: "+e}},l.prototype.getOtp=function(e){return this.entry?(this.entry.initOtpGenerator(),this.entry.otpGenerator?(this.entry.otpGenerator.next(((t,n)=>{this.pendingResolved(e,n,t)})),l.PendingResolve):""):""},l.prototype.pendingResolved=function(e,t,n){const s=e.value===l.PendingResolve;t&&(e.value=t),s&&(this.pendingResolvesCount--,(0===this.pendingResolvesCount||n)&&this.resolveCallback&&(this.resolveCallback(n),this.resolveCallback=null))},l.prototype.obfuscate=function(){this.obfuscateOps(this.ops)},l.prototype.obfuscateOps=function(e){for(let t=0,n=e.length;t<n;t++){const n=e[t];if(!n.mod)if("text"===n.type)this.obfuscateOp(n);else if("group"===n.type){n.value.every((e=>"text"===e.type&&!e.mod))?this.obfuscateOp(n):this.obfuscateOps(n.value)}}},l.prototype.obfuscateOp=function(e){let t=[];if("text"===e.type){if(!e.value||e.value.length<=1)return;t=e.value.split("")}else e.value.forEach((e=>t.push(...e.value.split(""))));if(t.length<=1)return;const n=new i.AutoTypeObfuscator(t);e.value=n.obfuscate(),e.type="group"},l.prototype.run=function(e,t){this.emitter=new s.AutoTypeEmitter(this.emitNext.bind(this),t),this.emitterState={callback:e,stack:[],ops:this.ops,opIx:0,mod:{},activeMod:{},finished:null},this.emitter.begin()},l.prototype.emitNext=function(e){if(e)return this.emitterState.finished=!0,void this.emitterState.callback(e);if(this.emitterState.finished)return void this.emitterState.callback();if(this.resetEmitterMod(this.emitterState.mod),this.emitterState.opIx>=this.emitterState.ops.length){const e=this.emitterState.stack.pop();return void(e?(Object.assign(this.emitterState,{ops:e.ops,opIx:e.opIx,mod:e.mod}),this.emitNext()):(this.resetEmitterMod({}),this.emitterState.finished=!0,a.debug("waitComplete"),this.emitter.waitComplete()))}const t=this.emitterState.ops[this.emitterState.opIx];if("group"===t.type)return t.mod&&this.setEmitterMod(t.mod),this.emitterState.stack.push({ops:this.emitterState.ops,opIx:this.emitterState.opIx+1,mod:Object.assign({},this.emitterState.mod)}),Object.assign(this.emitterState,{ops:t.value,opIx:0,mod:Object.assign({},this.emitterState.activeMod)}),void this.emitNext();switch(this.emitterState.opIx++,t.mod&&this.setEmitterMod(t.mod),t.type){case"text":a.debug("text",t.value),t.value?this.emitter.text(t.value):this.emitNext();break;case"key":a.debug("key",t.value),this.emitter.key(t.value);break;case"cmd":{const e=this.emitter[t.value];if(!e)throw"Bad cmd: "+t.value;a.debug(t.value,t.arg),e.call(this.emitter,t.arg);break}default:throw"Bad op: "+t.type}},l.prototype.setEmitterMod=function(e){Object.keys(e).forEach((function(t){e[t]&&!this.emitterState.activeMod[t]&&(a.debug("mod",t,!0),this.emitter.setMod(t,!0),this.emitterState.activeMod[t]=!0)}),this)},l.prototype.resetEmitterMod=function(e){Object.keys(this.emitterState.activeMod).forEach((function(t){this.emitterState.activeMod[t]&&!e[t]&&(a.debug("mod",t,!1),this.emitter.setMod(t,!1),delete this.emitterState.activeMod[t])}),this)}},3898:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AutoType:()=>v});var s=n(7201),i=n(917),r=n(599),o=n(3660),a=n(9491),l=n(667),c=n(4530),u=n(403),d=n(7614),h=n(2985),p=n(3297),m=n(2363),g=n(9673),f=n(4583);const A=new m.Logger("auto-type"),y=!!localStorage.debugAutoType,v={enabled:!(!a.Launcher||!a.Launcher.autoTypeSupported),supportsEventsWithWindowId:!(!a.Launcher||"linux"!==a.Launcher.platform()),selectEntryView:!1,running:!1,init(){this.enabled&&s.Events.on("auto-type",(e=>this.handleEvent(e)))},handleEvent(e){const t=e&&e.entry||null,n=e&&e.sequence||null,s=e&&e.context||null;if(A.debug("Auto type event",t),this.running)A.debug("Already running, skipping event");else if(t)this.hideWindow((()=>{this.runAndHandleResult({entry:t,sequence:n,context:s})}));else{if(this.selectEntryView)return;if(a.Launcher.isAppFocused())return c.Alerts.error({header:p.Locale.autoTypeError,body:p.Locale.autoTypeErrorGlobal,skipIfAlertDisplayed:!0});this.selectEntryAndRun()}},runAndHandleResult(e,t){this.run(e,t,(e=>{if(e){let t,n=p.Locale.autoTypeErrorGeneric.replace("{}",e.message||e.toString());e.keyPressFailed&&l.Features.isMac&&(n=p.Locale.autoTypeErrorAccessibilityMacOS,t=g.Links.AutoTypeMacOS),c.Alerts.error({header:p.Locale.autoTypeError,body:n,link:t})}})),d.AppSettingsModel.lockOnAutoType&&s.Events.emit("lock-workspace")},run(e,t,n){this.running=!0;const s=e.sequence||e.entry.getEffectiveAutoTypeSeq(),i=e.context;A.debug("Start",s);const o=A.ts();try{const a=new r.AutoTypeParser(s).parse();A.debug("Parsed",this.printOps(a.ops)),a.resolve(e.entry,i,(s=>{if(s)return this.running=!1,A.error("Resolve error",s),n&&n(s);if(A.debug("Resolved",this.printOps(a.ops)),e.entry.autoTypeObfuscation){try{a.obfuscate()}catch(e){return this.running=!1,A.error("Obfuscate error",e),n&&n(e)}A.debug("Obfuscated")}a.run((e=>(this.running=!1,e?(A.error("Run error",e),n&&n(e)):(A.debug("Complete",A.ts(o)),n&&n()))),t)}))}catch(e){return this.running=!1,A.error("Parse error",e),n&&n(e)}},validate(e,t,n){try{const s=new r.AutoTypeParser(t);s.parse().resolve(e,null,n)}catch(e){return n(e)}},printOps(e){return"["+e.map(this.printOp,this).join(",")+"]"},printOp(e){const t=e.mod?Object.keys(e.mod).join(""):"";if("group"===e.type)return t+this.printOps(e.value);if("text"===e.type){let n=e.value;return y||(n=n.replace(/./g,"*")),t+n}return t+e.type+":"+e.value},hideWindow(e){A.debug("Hide window"),a.Launcher.isAppFocused()?(a.Launcher.hideApp(),setTimeout(e,u.Timeouts.AutoTypeAfterHide)):e()},getActiveWindowInfo(e){A.debug("Getting window info");return(new i.AutoTypeHelper).getActiveWindowInfo(((t,n)=>{if(t)A.error("Error getting window info",t);else{if(!n.url){const e=/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\\+.~#?&\/=]*)/.exec(n.title);n.url=e&&e.length>0?e[0]:null}A.debug("Window info",n.id,n.title,n.url)}return e(t,n)}))},activeWindowMatches(e,t){if(!e||!e.id)return A.debug("Skipped active window check because window id is unknown"),t(!0);this.getActiveWindowInfo(((n,s)=>s?s.id===e.id||this.supportsEventsWithWindowId?s.url===e.url||this.supportsEventsWithWindowId?(A.info("Active window matches"),void t(!0,s)):(A.info(`Active window doesn't match: url is different. Expected "${e.url}", got "${s.url}"`),t(!1,s)):(A.info(`Active window doesn't match: ID is different. Expected ${e.id}, got ${s.id}`),t(!1,s)):(A.debug("Error during active window check, something is wrong",n),t(!1))))},selectEntryAndRun(){this.getActiveWindowInfo((async(e,t)=>{const n={filter:new o.SelectEntryFilter(t,h.AppModel.instance,h.AppModel.instance.files,{autoType:!0}),windowInfo:t};if(!h.AppModel.instance.files.hasOpenFiles()){A.debug("auto-type event delayed"),this.focusMainWindow();try{await h.AppModel.instance.unlockAnyFile("autoTypeUnlockMessage")}catch(e){return void A.debug("auto-type event canceled")}this.selectEntryView&&this.selectEntryView.show()}A.debug("processing auto-type event"),this.processEventWithFilter(n)}))},focusMainWindow(){a.Launcher.isAppFocused()||setTimeout((()=>a.Launcher.showMainWindow()),u.Timeouts.RedrawInactiveWindow)},processEventWithFilter(e){let t=e.filter.getEntries();if(1===t.length&&d.AppSettingsModel.directAutotype)return void this.hideWindow((()=>{this.runAndHandleResult({entry:t[0]},e.windowInfo.id)}));this.focusMainWindow(),0===t.length&&(e.filter.useUrl&&(e.filter.useUrl=!1,e.filter.title&&d.AppSettingsModel.autoTypeTitleFilterEnabled&&(e.filter.useTitle=!0)),t=e.filter.getEntries(),0===t.length&&e.filter.useTitle&&(e.filter.useTitle=!1));const n=e.filter.title||e.filter.url,s=n?p.Locale.autoTypeMsgMatchedByWindow.replace("{}",n):p.Locale.autoTypeMsgNoWindow;this.selectEntryView=new f.SelectEntryView({isAutoType:!0,itemOptions:!0,filter:e.filter,topMessage:s}),this.selectEntryView.on("result",(t=>{A.debug("Entry selected",t),this.selectEntryView.off("result"),this.selectEntryView.remove(),this.selectEntryView=null,this.hideWindow((()=>{null!=t&&t.entry&&this.activeWindowMatches(e.windowInfo,((n,s)=>{n&&this.runAndHandleResult(t,e.windowInfo.id)}))}))})),this.selectEntryView.render(),this.selectEntryView.on("show-open-files",(async()=>{this.selectEntryView.hide();try{await h.AppModel.instance.unlockAnyFile("autoTypeUnlockMessage")}catch(e){return void this.selectEntryView.emit("result",void 0)}this.selectEntryView.show(),this.selectEntryView.render()}))}}},8533:(e,t,n)=>{"use strict";n.r(t),n.d(t,{EntryCollection:()=>r});var s=n(9071),i=n(7725);class r extends s.Collection{}r.model=i.EntryModel},6253:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FileCollection:()=>r});var s=n(9071),i=n(9186);class r extends s.Collection{hasOpenFiles(){return this.some((e=>e.active))}hasUnsavedFiles(){return this.some((e=>e.modified))}hasDirtyFiles(){return this.some((e=>e.dirty))}getByName(e){return this.find((t=>t.name.toLowerCase()===e.toLowerCase()))}}r.model=i.Model},6469:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FileInfoCollection:()=>a});var s=n(9071),i=n(6524),r=n(3850);class o extends s.Collection{load(){return i.SettingsStore.load("file-info").then((e=>{if(e)for(const t of e)this.push(new r.FileInfoModel(t))}))}save(){i.SettingsStore.save("file-info",this)}getMatch(e,t,n){return this.find((s=>(s.storage||"")===(e||"")&&(s.name||"")===(t||"")&&(s.path||"")===(n||"")))}getByName(e){return this.find((t=>t.name.toLowerCase()===e.toLowerCase()))}}o.model=r.FileInfoModel;const a=new o},6195:(e,t,n)=>{"use strict";n.r(t),n.d(t,{GroupCollection:()=>r});var s=n(9071),i=n(5572);class r extends s.Collection{}r.model=i.GroupModel},900:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MenuItemCollection:()=>r});var s=n(9071),i=n(9233);class r extends s.Collection{}r.model=i.MenuItemModel},8604:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MenuOptionCollection:()=>r});var s=n(9071),i=n(4655);class r extends s.Collection{}r.model=i.MenuOptionModel},8567:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MenuSectionCollection:()=>r});var s=n(9071),i=n(4954);class r extends s.Collection{}r.model=i.MenuSectionModel},6491:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SearchResultCollection:()=>o});var s=n(9071),i=n(9186),r=n(8612);class o extends s.Collection{constructor(e,t){super(e),this.comparators={none:null,title:r.Comparators.stringComparator("title",!0),"-title":r.Comparators.stringComparator("title",!1),website:r.Comparators.stringComparator("url",!0),"-website":r.Comparators.stringComparator("url",!1),user:r.Comparators.stringComparator("user",!0),"-user":r.Comparators.stringComparator("user",!1),created:r.Comparators.dateComparator("created",!0),"-created":r.Comparators.dateComparator("created",!1),updated:r.Comparators.dateComparator("updated",!0),"-updated":r.Comparators.dateComparator("updated",!1),"-attachments":(e,t)=>this.attachmentSortVal(e).localeCompare(this.attachmentSortVal(t)),"-rank":r.Comparators.rankComparator().bind(this)},this.defaultComparator="title",this.entryFilter=null;const n=t&&t.comparator||this.defaultComparator;this.comparator=this.comparators[n]}sortEntries(e,t){this.entryFilter=t,this.comparator=this.comparators[e]||this.comparators[this.defaultComparator],this.sort()}attachmentSortVal(e){const t=e.attachments;let n=t.length?String.fromCharCode(64+t.length):"Z";return t[0]&&(n+=t[0].title),n}}o.model=i.Model},8537:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AppRightsChecker:()=>l});var s=n(9491),i=n(4530),r=n(7614),o=n(667),a=n(3297);const l={AppPath:"/Applications/KeeWeb.app",init(){o.Features.isDesktop&&o.Features.isMac&&(r.AppSettingsModel.skipFolderRightsWarning||s.Launcher.getAppPath().startsWith(this.AppPath)&&this.needRunInstaller((e=>{e&&(this.showAlert(),this.runInstaller())})))},needRunInstaller(e){s.Launcher.statFile(this.AppPath,(t=>{const n=t&&0===t.uid;e(!n)}))},showAlert(){const e="sudo chown -R root "+this.AppPath;this.alert=i.Alerts.alert({icon:"lock",header:a.Locale.appRightsAlert,body:a.Locale.appRightsAlertBody1.replace("{}",this.AppPath)+"\n"+a.Locale.appRightsAlertBody2,pre:e,buttons:[{result:"skip",title:a.Locale.alertDoNotAsk,error:!0},i.Alerts.buttons.ok],success:e=>{"skip"===e&&this.dontAskAnymore(),this.alert=null}})},runInstaller(){s.Launcher.spawn({cmd:this.AppPath+"/Contents/Installer/KeeWeb Installer.app/Contents/MacOS/applet",args:["--install"],complete:()=>{this.needRunInstaller((e=>{this.alert&&!e&&this.alert.closeWithResult("cancel")}))}})},dontAskAnymore(){this.needRunInstaller((e=>{e&&(r.AppSettingsModel.skipFolderRightsWarning=!0)}))}}},9621:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ChalRespCalculator:()=>p});var s=n(7201),i=n(2363),r=n(9777),o=n(8647),a=n(4530),l=n(3297),c=n(403),u=n(9491),d=n(7614);const h=new i.Logger("chal-resp"),p={cache:{},getCacheKey:e=>`${e.vid}:${e.pid}:${e.serial}:${e.slot}`,build(e){return e?t=>new Promise(((n,s)=>{var i;const r=(t=Buffer.from(t)).toString("hex"),o=this.getCacheKey(e),c=null===(i=this.cache[o])||void 0===i?void 0:i[r];return c?(h.debug("Found ChalResp in cache"),n(Buffer.from(c,"hex"))):d.AppSettingsModel.enableUsb?(h.debug("Calculating ChalResp using a YubiKey",e),void this._calc(e,t,((e,t)=>{if(e)return s(e);n(t)}))):(h.debug("USB is disabled"),void a.Alerts.error({header:l.Locale.yubiKeyDisabledErrorHeader,body:l.Locale.yubiKeyDisabledErrorBody,complete(){const e=new Error(l.Locale.yubiKeyDisabledErrorHeader);e.userCanceled=!0,e.ykError=!0,s(e)}}))})):null},_calc(e,t,n){let s=null,i=!1;r.YubiKey.calculateChalResp(e,t,((o,a)=>{if(i)return void(i=!1);if(s&&(s.closeWithoutResult(),s=null),o)return o.noKey?(h.info("YubiKey ChalResp: no key"),void this._showNoKeyAlert(e.serial,(s=>{if(s)return n(s);this._calc(e,t,n)}))):o.touchRequested?(h.info("YubiKey ChalResp: touch requested"),void(s=this._showTouchAlert(e.serial,(e=>{s=null,i=!0,h.info("YubiKey ChalResp canceled"),r.YubiKey.cancelChalResp(),n(e)})))):(h.error("YubiKey ChalResp error",o),n(o));const l=this.getCacheKey(e);this.cache[l]||(this.cache[l]={});const c=t.toString("hex");this.cache[l][c]=a.toString("hex"),h.info("Calculated YubiKey ChalResp"),n(null,a)}))},_showNoKeyAlert(e,t){u.Launcher.showMainWindow();let n,i=null;const d=()=>{o.UsbListener.attachedYubiKeys&&(n=setTimeout((()=>{r.YubiKey.list(((n,r)=>{if(n)return void h.error("YubiKey list error",n);const o=r.some((t=>t.serial===e));h.info(o?"YubiKey found":"YubiKey not found"),o&&(s.Events.off("usb-devices-changed",d),i&&i.closeWithoutResult(),t())}))}),c.Timeouts.ExternalDeviceAfterReconnect))};s.Events.on("usb-devices-changed",d),i=a.Alerts.alert({header:l.Locale.yubiKeyNoKeyHeader,body:l.Locale.yubiKeyNoKeyBody.replace("{}",e),buttons:[a.Alerts.buttons.cancel],icon:"usb-token",cancel:()=>{h.info("No key alert closed"),clearTimeout(n),s.Events.off("usb-devices-changed",d);const e=new Error("User canceled the YubiKey no key prompt");return e.userCanceled=!0,e.ykError=!0,t(e)}})},_showTouchAlert:(e,t)=>(u.Launcher.showMainWindow(),a.Alerts.alert({header:l.Locale.yubiKeyTouchRequestedHeader,body:l.Locale.yubiKeyTouchRequestedBody.replace("{}",e),buttons:[a.Alerts.buttons.cancel],icon:"usb-token",cancel:()=>{h.info("Touch alert closed");const e=new Error("User canceled the YubiKey touch prompt");return e.userCanceled=!0,e.ykError=!0,t(e)}})),clearCache(e){delete this.cache[this.getCacheKey(e)]}}},9207:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DragDropInfo:()=>s});const s={dragObject:null}},2596:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DropboxChooser:()=>r});var s=n(7614),i=n(4798);const r=function(e){this.cb=e,this.onMessage=this.onMessage.bind(this)};r.prototype.callback=function(e,t){this.cb&&this.cb(e,t),this.cb=null},r.prototype.choose=function(){const e=this.buildUrl();if(this.popup=window.open(e,"dropbox","width=640,height=552,left=357,top=100,resizable=yes,location=yes"),!this.popup)return this.callback("Failed to open window");window.addEventListener("message",this.onMessage),this.closeInt=setInterval(this.checkClose.bind(this),200)},r.prototype.buildUrl=function(){return i.UrlFormat.makeUrl("https://www.dropbox.com/chooser",{origin:window.location.protocol+"//"+window.location.host,app_key:s.AppSettingsModel.dropboxAppKey||"qp7ctun6qt5n9d6",link_type:"direct",trigger:"js",multiselect:"false",extensions:"",folderselect:"false",iframe:"false",version:2})},r.prototype.onMessage=function(e){if(e.source!==this.popup||"https://www.dropbox.com"!==e.origin)return;const t=JSON.parse(e.data);switch(t.method){case"origin_request":e.source.postMessage(JSON.stringify({method:"origin"}),"https://www.dropbox.com");break;case"files_selected":this.popup.close(),this.success(t.params);break;case"close_dialog":this.popup.close();break;case"web_session_error":case"web_session_unlinked":this.callback(t.method);break;case"resize":this.popup.resize(t.params);break;case"error":this.callback(t.params)}},r.prototype.checkClose=function(){this.popup.closed&&(clearInterval(this.closeInt),window.removeEventListener("message",this.onMessage),this.result||this.callback("closed"))},r.prototype.success=function(e){if(!e||!e[0]||!e[0].link||e[0].is_dir)return this.callback("bad result");this.result=e[0],this.readFile(this.result.link)},r.prototype.readFile=function(e){const t=new XMLHttpRequest;t.addEventListener("load",(()=>{this.callback(null,{name:this.result.name,data:t.response})})),t.addEventListener("error",this.callback.bind(this,"download error")),t.addEventListener("abort",this.callback.bind(this,"download abort")),t.open("GET",e),t.responseType="arraybuffer",t.send()}},6608:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ExportApi:()=>r});var s=n(7614),i=n(8925);const r={settings:{get:e=>e?s.AppSettingsModel[e]:Object.assign({},s.AppSettingsModel),set(e,t){s.AppSettingsModel[e]=t},del(e){delete s.AppSettingsModel[e]}},runtimeData:{get:e=>e?i.RuntimeDataModel[e]:Object.assign({},i.RuntimeDataModel),set(e,t){i.RuntimeDataModel[e]=t},del(e){delete i.RuntimeDataModel[e]}}}},4953:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FocusManager:()=>r});var s=n(2363);const i=new s.Logger("focus-manager",void 0,localStorage.debugFocusManager?s.Logger.Level.Debug:s.Logger.Level.Info),r={modal:null,setModal(e){this.modal=e,i.debug("Set modal",e)}}},1622:(e,t,n)=>{"use strict";n.r(t),n.d(t,{GeneratorPresets:()=>r});var s=n(7614),i=n(3297);const r={get defaultPreset(){return{name:"Default",title:i.Locale.genPresetDefault,length:16,upper:!0,lower:!0,digits:!0}},get browserExtensionPreset(){return{name:"BrowserExtension",length:20,upper:!0,lower:!0,special:!0,brackets:!0,ambiguous:!0}},get builtIn(){return[this.defaultPreset,{name:"Pronounceable",title:i.Locale.genPresetPronounceable,length:10,lower:!0,upper:!0},{name:"Med",title:i.Locale.genPresetMed,length:16,upper:!0,lower:!0,digits:!0,special:!0,brackets:!0,ambiguous:!0},{name:"Long",title:i.Locale.genPresetLong,length:32,upper:!0,lower:!0,digits:!0},{name:"Pin4",title:i.Locale.genPresetPin4,length:4,digits:!0},{name:"Mac",title:i.Locale.genPresetMac,length:17,include:"0123456789ABCDEF",pattern:"XX-"},{name:"Hash128",title:i.Locale.genPresetHash128,length:32,include:"0123456789abcdef"},{name:"Hash256",title:i.Locale.genPresetHash256,length:64,include:"0123456789abcdef"}]},get all(){let e=this.builtIn;e.forEach((e=>{e.builtIn=!0}));const t=s.AppSettingsModel.generatorPresets;if(t){t.user&&(e=e.concat(t.user.map((e=>Object.assign({},e)))));let n=!1;e.forEach((e=>{t.disabled&&t.disabled[e.name]&&(e.disabled=!0),t.default===e.name&&(n=!0,e.default=!0)})),n||(e[0].default=!0)}return e},get enabled(){const e=this.all.filter((e=>!e.disabled));return e.length||e.push(this.defaultPreset),e},getOrCreateSetting(){let e=s.AppSettingsModel.generatorPresets;return e||(e={user:[]}),e},add(e){const t=this.getOrCreateSetting();e.name&&!t.user.filter((t=>t.name===e.name)).length&&(t.user.push(e),this.save(t))},remove(e){const t=this.getOrCreateSetting();t.user=t.user.filter((t=>t.name!==e)),this.save(t)},setPreset(e,t){const n=this.getOrCreateSetting(),s=n.user.filter((t=>t.name===e))[0];s&&(Object.assign(s,t),this.save(n))},setDisabled(e,t){const n=this.getOrCreateSetting();t?(n.disabled||(n.disabled={}),n.disabled[e]=!0):n.disabled&&delete n.disabled[e],this.save(n)},setDefault(e){const t=this.getOrCreateSetting();e?t.default=e:delete t.default,this.save(t)},save(e){s.AppSettingsModel.set({generatorPresets:void 0},{silent:!0}),s.AppSettingsModel.generatorPresets=e}}},4558:(e,t,n)=>{"use strict";n.r(t),n.d(t,{checkIfPasswordIsExposedOnline:()=>o});var s=n(3617);const i=new(n(2363).Logger)("online-password-checker"),r={};function o(e){if(!e||!e.isProtected||!e.byteLength)return!1;const t=e.saltedValue(),n=r[t];if(void 0!==n)return n;const o=e.getBinary();return crypto.subtle.digest({name:"SHA-1"},o).then((e=>{s.ByteUtils.zeroBuffer(o);const n=(e=s.ByteUtils.bytesToHex(e).toUpperCase()).substr(0,5);return fetch(`https://api.pwnedpasswords.com/range/${n}`).then((e=>e.text())).then((n=>{const s=n.includes(e.substr(5));return r[t]=s,s}))})).catch((e=>{i.error("Error checking password online",e)}))}},3660:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SelectEntryFilter:()=>o});var s=n(6491),i=n(5563);const r=/^(\w+:\/\/)?(?:(?:www|wwws|secure)\.)?([^\/]+)\/?(.*)/;class o{constructor(e,t,n,s){this.title=e.title,this.useTitle=!!e.title&&!e.url,this.url=e.url,this.useUrl=!!e.url,this.subdomains=!0,this.text="",this.appModel=t,this.files=n,this.filterOptions=s}getEntries(){const e=Object.assign({text:this.text},this.filterOptions);let t=this.appModel.getEntriesByFilter(e,this.files).map((e=>[e,this._getEntryRank(e)]));return(this.useUrl||this.useTitle)&&(t=t.filter((e=>e[1]))),t=t.sort(((e,t)=>e[1]===t[1]?e[0].title.localeCompare(t[0].title):t[1]-e[1])),t=t.map((e=>e[0])),new s.SearchResultCollection(t,{comparator:"none"})}_getEntryRank(e){let t=0,n=0;if(this.useTitle&&this.title&&e.title&&(t=i.Ranking.getStringRank(e.title.toLowerCase(),this.title.toLowerCase()),!t))return 0;if(this.useUrl&&this.url){const t=this.url.toLowerCase(),s=r.exec(t);for(const t of e.getAllUrls()){const e=r.exec(t.toLowerCase());if(e){const[,t,i,r]=e,[,o,a,l]=s;(i===a||this.subdomains&&a.indexOf("."+i)>0)&&(n+=i===a?20:10,r===l?n+=10:r&&l&&(0===r.lastIndexOf(l,0)?n+=5:0===l.lastIndexOf(r,0)&&(n+=3)),t===o&&(n+=1))}}e.searchText.includes(t)&&(n+=5)}return this.useTitle&&!t||this.useUrl&&!n?0:t+n}}},7027:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Shortcuts:()=>d});var s=n(9491),i=n(2977),r=n(7614),o=n(667),a=n(2378),l=n(3297);let c;const u={copyPassword:{mac:"Ctrl+Alt+C",all:"Shift+Alt+C"},copyUser:{mac:"Ctrl+Alt+B",all:"Shift+Alt+B"},copyUrl:{mac:"Ctrl+Alt+U",all:"Shift+Alt+U"},copyOtp:{},autoType:{mac:"Ctrl+Alt+T",all:"Shift+Alt+T"},restoreApp:{}},d={keyEventToShortcut(e){const t=[];e.ctrlKey&&t.push("Ctrl"),e.altKey&&t.push("Alt"),e.shiftKey&&t.push("Shift"),o.Features.isMac&&e.metaKey&&t.push("Meta");const n=function(){if(!c){c={};for(const[e,t]of Object.entries(i.Keys)){const n=e.replace("DOM_VK_","");/^([0-9A-Z]|F\d{1,2})$/.test(n)&&(c[t]=n)}}return c}()[e.which];return{value:t.join("+")+"+"+(n||"…"),valid:t.length>0&&!!n}},presentShortcut(e,t){return e?e.split(/\+/g).map((e=>{switch(e){case"Ctrl":return this.ctrlShortcutSymbol(t);case"Alt":return this.altShortcutSymbol(t);case"Shift":return this.shiftShortcutSymbol(t);case"Meta":return this.actionShortcutSymbol(t);default:return e}})).join(""):"-"},actionShortcutSymbol(e){return o.Features.isMac?"⌘":this.formatShortcut(l.Locale.ctrlKey,e)},altShortcutSymbol(e){return o.Features.isMac?"⌥":this.formatShortcut(l.Locale.altKey,e)},shiftShortcutSymbol(e){return o.Features.isMac?"⇧":this.formatShortcut(l.Locale.shiftKey,e)},ctrlShortcutSymbol(e){return o.Features.isMac?"⌃":this.formatShortcut(l.Locale.ctrlKey,e)},formatShortcut:(e,t)=>t?`${e} + `:`${e}+`,globalShortcutText(e,t){return this.presentShortcut(this.globalShortcut(e),t)},globalShortcut(e){const t=r.AppSettingsModel[this.globalShortcutAppSettingsKey(e)];if(t)return t;const n=u[e];return n?o.Features.isMac&&n.mac?n.mac:n.all:void 0},setGlobalShortcut(e,t){if(!u[e])throw new Error("Bad shortcut: "+e);t?r.AppSettingsModel[this.globalShortcutAppSettingsKey(e)]=t:delete r.AppSettingsModel[this.globalShortcutAppSettingsKey(e)],s.Launcher.setGlobalShortcuts(r.AppSettingsModel)},globalShortcutAppSettingsKey:e=>"globalShortcut"+a.StringFormat.capFirst(e),screenshotToClipboardShortcut:()=>o.Features.isiOS?"Sleep+Home":o.Features.isMobile?"":o.Features.isMac?"Command-Shift-Control-4":o.Features.isWindows?"Alt+PrintScreen":""}},6420:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SingleInstanceChecker:()=>l});var s=n(7201),i=n(9491);const r="instanceCheck",o="instanceMaster",a=Date.now().toString(),l={init(){i.Launcher||(window.addEventListener("storage",l.storageChanged),l.setKey(r,a))},storageChanged(e){e.newValue&&(e.key===r&&e.newValue!==a?l.setKey(o,a+Math.random().toString()):e.key===o&&e.newValue.indexOf(a)<0&&(window.removeEventListener("storage",l.storageChanged),s.Events.emit("second-instance")))},setKey(e,t){try{localStorage.setItem(e,t),setTimeout((()=>{localStorage.removeItem(e)}),100)}catch(e){}}}},8578:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StartProfiler:()=>o});const s=new(n(2363).Logger)("start-profiler");let i=0;const r=[],o={milestone(e){const t=s.ts(),n=t-i;i=t,r.push({name:e,elapsed:n})},report(){const e=this.getNetworkTime();r.unshift({name:"fetching",elapsed:e});const t=Math.round(performance.now());this.printReport("App",r,t)},reportAppProfile(e){this.printReport("Electron app",e.timings,e.totalTime)},printReport(e,t,n){const i=`${e} started in ${n}ms: `+t.map((e=>`${e.name}=${Math.round(e.elapsed)}ms`)).join(", ");s.info(i)},getNetworkTime(){let e;return performance.getEntriesByType&&([e]=performance.getEntriesByType("navigation")),e&&e.responseEnd&&e.fetchStart||(e=performance.timing),e.responseEnd-e.fetchStart}};o.milestone("pre-init")},5621:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Updater:()=>g});var s=n(3617),i=n(7201),r=n(7119),o=n(2118),a=n(9491),l=n(9673),c=n(7614),u=n(2706),d=n(8146),h=n(2363),p=n(7536);const m=new h.Logger("updater"),g={UpdateInterval:864e5,MinUpdateTimeout:500,MinUpdateSize:1e4,nextCheckTimeout:null,updateCheckDate:new Date(0),enabled:null===a.Launcher||void 0===a.Launcher?void 0:a.Launcher.updaterEnabled(),getAutoUpdateType(){if(!this.enabled)return!1;let e=c.AppSettingsModel.autoUpdate;return e&&!0===e&&(e="install"),e},updateInProgress:()=>"checking"===u.UpdateModel.status||["downloading","extracting","updating"].indexOf(u.UpdateModel.updateStatus)>=0,init(){this.scheduleNextCheck(),a.Launcher||!navigator.serviceWorker||r.RuntimeInfo.beta||r.RuntimeInfo.devMode||navigator.serviceWorker.register("service-worker.js").then((e=>{m.info("Service worker registered"),e.addEventListener("updatefound",(()=>{e.active&&(m.info("Service worker found an update"),u.UpdateModel.set({updateStatus:"ready"}))}))})).catch((e=>{m.error("Failed to register a service worker",e)}))},scheduleNextCheck(){if(this.nextCheckTimeout&&(clearTimeout(this.nextCheckTimeout),this.nextCheckTimeout=null),!this.getAutoUpdateType())return;let e=this.MinUpdateTimeout;const t=u.UpdateModel.lastCheckDate;t&&(e=Math.min(Math.max(this.UpdateInterval+(t-new Date),this.MinUpdateTimeout),this.UpdateInterval)),this.nextCheckTimeout=setTimeout(this.check.bind(this),e),m.info("Next update check will happen in "+Math.round(e/1e3)+"s")},check(e){if(this.enabled&&!this.updateInProgress()){if(u.UpdateModel.set({status:"checking"}),!e){const e=new Date-this.updateCheckDate;if(isNaN(e)||e<36e5)return m.error("Prevented update check; last check was performed at "+this.updateCheckDate),void this.scheduleNextCheck();this.updateCheckDate=new Date}m.info("Checking for update..."),o.Transport.httpGet({url:l.Links.UpdateJson,json:!0,success:t=>{const n=new Date;if(m.info("Update check: "+(t.version||"unknown")),!t.version){const e="No version info found";return u.UpdateModel.set({status:"error",lastCheckDate:n,lastCheckError:e}),u.UpdateModel.save(),void this.scheduleNextCheck()}const s=u.UpdateModel.lastVersion;u.UpdateModel.set({status:"ok",lastCheckDate:n,lastSuccessCheckDate:n,lastVersionReleaseDate:new Date(t.date),lastVersion:t.version,lastCheckError:null,lastCheckUpdMin:t.minVersion||null}),u.UpdateModel.save(),this.scheduleNextCheck(),this.canAutoUpdate()&&(s!==u.UpdateModel.lastVersion||"ready"!==u.UpdateModel.updateStatus?e||"install"!==this.getAutoUpdateType()?d.SemVer.compareVersions(u.UpdateModel.lastVersion,r.RuntimeInfo.version)>0&&u.UpdateModel.set({updateStatus:"found"}):this.update(e):m.info("Waiting for the user to apply downloaded update"))},error:e=>{m.error("Update check error",e),u.UpdateModel.set({status:"error",lastCheckDate:new Date,lastCheckError:"Error checking last version"}),u.UpdateModel.save(),this.scheduleNextCheck()}})}},canAutoUpdate(){const e=u.UpdateModel.lastCheckUpdMin;if(e){if(d.SemVer.compareVersions(r.RuntimeInfo.version,e)<0)return u.UpdateModel.set({updateStatus:"ready",updateManual:!0}),!1}return!0},update(e,t){const n=u.UpdateModel.lastVersion;if(!this.enabled)return void m.info("Updater is disabled");if(d.SemVer.compareVersions(r.RuntimeInfo.version,n)>=0)return void m.info("You are using the latest version");u.UpdateModel.set({updateStatus:"downloading",updateError:null}),m.info("Downloading update",n);const s=this.getUpdateAssetName(n);if(!s)return void m.error("Empty updater asset name for",a.Launcher.platform(),a.Launcher.arch());const c=l.Links.UpdateBasePath.replace("{ver}",n),h=c+s;o.Transport.httpGet({url:h,file:s,cleanupOldFiles:!0,cache:!0,success:n=>{m.info("Downloading update signatures"),o.Transport.httpGet({url:c+"Verify.sign.sha256",text:!0,file:s+".sign",cleanupOldFiles:!0,cache:!0,success:r=>{this.verifySignature(n,s,((s,o)=>{if(s||!o)return u.UpdateModel.set({updateStatus:"error",updateError:s?"Error verifying update signature":"Invalid update signature"}),a.Launcher.deleteFile(n),void a.Launcher.deleteFile(r);m.info("Update is ready",n),u.UpdateModel.set({updateStatus:"ready",updateError:null}),e||i.Events.emit("update-app"),"function"==typeof t&&t()}))},error(e){m.error("Error downloading update signatures",e),u.UpdateModel.set({updateStatus:"error",updateError:"Error downloading update signatures"})}})},error(e){m.error("Error downloading update",e),u.UpdateModel.set({updateStatus:"error",updateError:"Error downloading update"})}})},verifySignature(e,t,n){m.info("Verifying update signature",t);const i=a.Launcher.req("fs"),r=i.readFileSync(e+".sign","utf8").split("\n").find((e=>e.endsWith(t)));if(!r)return m.error("Signature not found for asset",t),void n("Asset signature not found");const o=s.ByteUtils.hexToBytes(r.split(" ")[0]),l=i.readFileSync(e);p.SignatureVerifier.verify(l,o).catch((e=>{m.error("Error verifying signature",e),n("Error verifying signature")})).then((e=>{m.info("Update asset signature is "+(e?"valid":"invalid")),n(void 0,e)}))},getUpdateAssetName(e){const t=a.Launcher.platform(),n=a.Launcher.arch();switch(t){case"win32":switch(n){case"x64":return`KeeWeb-${e}.win.x64.exe`;case"ia32":return`KeeWeb-${e}.win.ia32.exe`;case"arm64":return`KeeWeb-${e}.win.arm64.exe`}break;case"darwin":switch(n){case"x64":return`KeeWeb-${e}.mac.x64.dmg`;case"arm64":return`KeeWeb-${e}.mac.arm64.dmg`}}},installAndRestart(){if(!a.Launcher)return;const e=this.getUpdateAssetName(u.UpdateModel.lastVersion),t=o.Transport.cacheFilePath(e);a.Launcher.requestRestartAndUpdate(t)}}},8647:(e,t,n)=>{"use strict";n.r(t),n.d(t,{UsbListener:()=>c});var s=n(7201),i=n(2363),r=n(3006),o=n(7614),a=n(667);const l=new i.Logger("usb-listener"),c={supported:a.Features.isDesktop,attachedYubiKeys:0,init(){this.supported&&(s.Events.on("native-modules-yubikeys",(e=>{e.numYubiKeys!==this.attachedYubiKeys&&(l.debug(`YubiKeys changed ${this.attachedYubiKeys} => ${e.numYubiKeys}`),this.attachedYubiKeys=e.numYubiKeys,s.Events.emit("usb-devices-changed"))})),o.AppSettingsModel.on("change:enableUsb",((e,t)=>{t?this.start():this.stop()})),o.AppSettingsModel.enableUsb&&this.start())},start(){l.info("Starting USB listener"),this.usb&&this.stop();try{r.NativeModules.startUsbListener()}catch(e){l.error("Error starting USB listener",e)}},stop(){l.info("Stopping USB listener");try{r.NativeModules.stopUsbListener()}catch(e){l.error("Error stopping USB listener",e)}this.attachedYubiKeys&&(this.attachedYubiKeys=0,s.Events.emit("usb-devices-changed"))}}},9777:(e,t,n)=>{"use strict";n.r(t),n.d(t,{YubiKey:()=>p});var s=n(7201),i=n(9491),r=n(3006),o=n(2363),a=n(8647),l=n(7614),c=n(403),u=n(4596),d=n(3297);const h=new o.Logger("yubikey"),p={ykmanStatus:void 0,process:null,aborted:!1,cmd(){if(this._cmd)return this._cmd;const e="/usr/local/bin/ykman";return"darwin"===i.Launcher.platform()&&i.Launcher.fileExistsSync(e)?this._cmd=e:this._cmd="ykman",this._cmd},checkToolStatus(){return"ok"===this.ykmanStatus?Promise.resolve(this.ykmanStatus):new Promise((e=>{this.ykmanStatus="checking",this._cmd=void 0,i.Launcher.spawn({cmd:this.cmd(),args:["-v"],noStdOutLogging:!0,complete:(t,n,s)=>{this.ykmanStatus=t||0!==s?"error":"ok",e(this.ykmanStatus)}})}))},abort(){if(h.info("Aborting"),this.process){h.info("Killing the process");try{this.process.kill()}catch(e){}}this.aborted=!0,this.process=null},list(e){r.NativeModules.getYubiKeys({}).then((t=>{t=t.map((({serial:e,vid:t,pid:n,version:s,slots:i})=>({vid:t,pid:n,serial:e,slots:i,fullName:this.getKeyFullName(n,s,e)}))),e(null,t)})).catch(e)},getKeyFullName(e,t,n){let s="YubiKey";return u.YubiKeyProductIds.Gen1.includes(e)?s+=" Gen 1":u.YubiKeyProductIds.NEO.includes(e)?s+=" NEO":u.YubiKeyProductIds.YK4.includes(e)&&t>="5.1.0"&&(s+=" 5"),`${s} ${n}`},listWithYkman(e){this._listWithYkman(e,!0)},_listWithYkman(e,t){return this.process?e("Already in progress"):(this.aborted=!1,h.info("Listing YubiKeys"),a.UsbListener.attachedYubiKeys?void(this.process=i.Launcher.spawn({cmd:this.cmd(),args:["list"],noStdOutLogging:!0,complete:(n,s)=>{if(this.process=null,this.aborted)return e("Aborted");if(n)return e(n);const i=s.trim().split(/\n/g).map((e=>({fullName:e,serial:(e.match(/\d{5,}$/g)||[])[0]}))),r=i.filter((e=>e.serial));if(1===i.length&&0===r.length&&s.startsWith("YubiKey")&&s.includes("CCID")&&!s.includes("Serial")){if(h.info("The YubiKey is probably stuck"),!l.AppSettingsModel.yubiKeyStuckWorkaround)return e(d.Locale.yubiKeyStuckError);if(t)return this._repairStuckYubiKey(e)}if(!r.length)return e('No YubiKeys returned by "ykman list"');e(null,r)}})):e(null,[]))},_repairStuckYubiKey(e){let t;h.info("Repairing a stuck YubiKey");const n=a.UsbListener.attachedYubiKeys,r=()=>{a.UsbListener.attachedYubiKeys===n&&(h.info("YubiKey was reconnected"),s.Events.off("usb-devices-changed",r),clearTimeout(t),this.aborted=!1,setTimeout((()=>{this._listWithYkman(e,!1)}),c.Timeouts.ExternalDeviceAfterReconnect))};s.Events.on("usb-devices-changed",r),i.Launcher.spawn({cmd:this.cmd(),args:["config","usb","-e","oath","-f"],noStdOutLogging:!0,complete:n=>{if(h.info("Repair complete",n?"with error":"OK"),n)return s.Events.off("usb-devices-changed",r),e(`YubiKey repair error: ${n}`);t=setTimeout((()=>{s.Events.off("usb-devices-changed",r)}),c.Timeouts.ExternalDeviceReconnect)}})},getOtpCodes(e,t){if(this.process)return t("Already in progress");this.aborted=!1,this.process=i.Launcher.spawn({cmd:this.cmd(),args:["-d",e,"oath","accounts","code"],noStdOutLogging:!0,throwOnStdErr:!0,complete:(e,n)=>{if(this.process=null,window.debugYubiKey&&h.info("received codes",e,n),this.aborted)return t("Aborted");if(e)return t(e);const s=[];for(const e of n.split("\n")){const t=e.match(/^(.*?):(.*?)\s+(.*)$/);if(!t)continue;const[,n,i,r]=t,o=!r.match(/^\d+$/);s.push({title:n,user:i,needsTouch:o})}t(null,s)}})},getOtp(e,t,n){return i.Launcher.spawn({cmd:this.cmd(),args:["-d",e,"oath","accounts","code","--single",t],noStdOutLogging:!0,complete:(e,t)=>{if(e)return n(e);const s=t.trim();n(null,s)}})},calculateChalResp(e,t,n){const{vid:s,pid:i,serial:o,slot:a}=e,l={vid:s,pid:i,serial:o};t=Buffer.from(t);const c=u.YubiKeyChallengeSize-t.byteLength,d=Buffer.alloc(u.YubiKeyChallengeSize,c);t.copy(d),r.NativeModules.yubiKeyChallengeResponse(l,[...d],a,((e,t)=>(t&&(t=Buffer.from(t)),e&&(e.ykError=!0),n(e,t))))},cancelChalResp(){r.NativeModules.yubiKeyCancelChallengeResponse()}}},5933:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CopyPaste:()=>a});var s=n(7201),i=n(9491),r=n(7614),o=n(6718);const a={simpleCopy:!(!i.Launcher||!i.Launcher.clipboardSupported),copy(e){if(this.simpleCopy){i.Launcher.setClipboardText(e);const t=r.AppSettingsModel.clipboardSeconds;if(t>0){const n=()=>{i.Launcher.getClipboardText()===e&&i.Launcher.clearClipboardText()};s.Events.on("main-window-will-close",n),setTimeout((()=>{n(),s.Events.off("main-window-will-close",n)}),1e3*t)}return{success:!0,seconds:t}}try{if(document.execCommand("copy"))return{success:!0}}catch(e){}return!1},createHiddenInput(e){const t=o("<input/>").val(e).attr({type:"text",class:"hide-by-pos"}).appendTo(document.body);t[0].selectionStart=0,t[0].selectionEnd=e.length,t.focus(),t.on({"copy cut paste"(){setTimeout((()=>t.blur()),0)},blur(){t.remove()}})},copyHtml(e){const t=document.createElement("div");t.style.userSelect="auto",t.style.webkitUserSelect="auto",t.style.mozUserSelect="auto",t.innerHTML=e,document.body.appendChild(t);const n=document.createRange();n.selectNodeContents(t);const s=window.getSelection();s.removeAllRanges(),s.addRange(n);const i=document.execCommand("copy");return t.remove(),i}}},8132:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FeatureTester:()=>i});var s=n(667);const i={test(){return Promise.resolve().then((()=>this.checkWebAssembly())).then((()=>this.checkLocalStorage())).then((()=>this.checkWebCrypto()))},checkWebAssembly(){try{const e=new n.g.WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));return new n.g.WebAssembly.Instance(e)instanceof n.g.WebAssembly.Instance}catch(e){throw"WebAssembly is not supported"}},checkLocalStorage(){if(!s.Features.isDesktop)try{localStorage.setItem("_test","1"),localStorage.removeItem("_test")}catch(e){throw"LocalStorage is not supported"}},checkWebCrypto(){if(!n.g.crypto.subtle)throw"WebCrypto is not supported"}}},9053:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FocusDetector:()=>o});var s=n(7201),i=n(9491),r=n(667);const o={init(){this.isFocused=!0,this.detectsFocusWithEvents=!r.Features.isDesktop&&!r.Features.isMobile,this.detectsFocusWithEvents&&(window.addEventListener("focus",(()=>{o.isFocused||(o.isFocused=!0,s.Events.emit("main-window-focus"))})),window.addEventListener("blur",(()=>{o.isFocused&&(o.isFocused=!1,s.Events.emit("main-window-blur"))})))},hasFocus(){return this.detectsFocusWithEvents?this.isFocused:!i.Launcher||i.Launcher.isAppFocused()}}},5665:(e,t,n)=>{"use strict";n.r(t),n.d(t,{IdleTracker:()=>r});var s=n(7201),i=n(7614);const r={actionTime:Date.now(),init(){setInterval(this.checkIdle.bind(this),6e4)},checkIdle(){const e=(Date.now()-this.actionTime)/1e3/60,t=i.AppSettingsModel.idleMinutes;t&&e>t&&(s.Events.emit("before-user-idle"),s.Events.emit("user-idle"))},regUserAction(){this.actionTime=Date.now()}};s.Events.on("power-monitor-resume",(()=>r.checkIdle))},1164:(e,t,n)=>{"use strict";n.r(t),n.d(t,{KeyHandler:()=>c});var s=n(7201),i=n(5665),r=n(2977),o=n(4953),a=n(6718);const l=navigator.platform.indexOf("Mac")>=0?"metaKey":"ctrlKey";const c=new class{constructor(){this.SHORTCUT_ACTION=1,this.SHORTCUT_OPT=2,this.SHORTCUT_SHIFT=4,this.shortcuts={}}init(){a(document).bind("keypress",this.keypress.bind(this)),a(document).bind("keydown",this.keydown.bind(this)),this.shortcuts[r.Keys.DOM_VK_A]=[{handler:this.handleAKey,thisArg:this,shortcut:this.SHORTCUT_ACTION,modal:!0,noPrevent:!0}]}onKey(e,t,n,s,i,r){let o=this.shortcuts[e];o||(this.shortcuts[e]=o=[]),o.push({handler:t,thisArg:n,shortcut:s,modal:i,noPrevent:r})}offKey(e,t,n){this.shortcuts[e]&&(this.shortcuts[e]=this.shortcuts[e].filter((e=>e.handler!==t||e.thisArg!==n)))}isActionKey(e){return e[l]}keydown(e){i.IdleTracker.regUserAction();const t=e.keyCode||e.which,n=this.shortcuts[t];if(n&&n.length)for(const s of n){if(o.FocusManager.modal&&s.modal!==o.FocusManager.modal&&"*"!==s.modal){e.stopPropagation();continue}const n=this.isActionKey(e);switch(s.shortcut){case this.SHORTCUT_ACTION:if(!n)continue;break;case this.SHORTCUT_OPT:if(!e.altKey)continue;break;case this.SHORTCUT_SHIFT:if(!e.shiftKey)continue;break;case this.SHORTCUT_ACTION+this.SHORTCUT_OPT:if(!e.altKey||!n)continue;break;default:if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)continue}if(s.handler.call(s.thisArg,e,t),n&&!s.noPrevent&&e.preventDefault(),e.isImmediatePropagationStopped())break}}keypress(e){o.FocusManager.modal||e.which===r.Keys.DOM_VK_RETURN||e.which===r.Keys.DOM_VK_ESCAPE||e.which===r.Keys.DOM_VK_TAB||e.altKey||e.ctrlKey||e.metaKey?o.FocusManager.modal&&s.Events.emit("keypress:"+o.FocusManager.modal,e):s.Events.emit("keypress",e)}reg(){i.IdleTracker.regUserAction()}handleAKey(e){"input"===e.target.tagName.toLowerCase()&&["password","text"].indexOf(e.target.type)>=0?e.stopImmediatePropagation():e.preventDefault()}}},5358:(e,t,n)=>{"use strict";n.r(t),n.d(t,{PopupNotifier:()=>u});var s=n(7201),i=n(9491),r=n(4530),o=n(403),a=n(3297),l=n(2363),c=n(6838);const u={logger:null,init(){if(this.logger=new l.Logger("popup-notifier"),i.Launcher)window.open=c.noop;else{const e=window.open;window.open=function(...t){const n=e.apply(window,t);return n?(u.deferCheckClosed(n),s.Events.emit("popup-opened",n)):r.Alerts.alertDisplayed||r.Alerts.error({header:a.Locale.authPopupRequired,body:a.Locale.authPopupRequiredBody}),n}}},deferCheckClosed(e){setTimeout(u.checkClosed.bind(u,e),o.Timeouts.CheckWindowClosed)},checkClosed(e){if(e.closed)setTimeout(u.triggerClosed.bind(u,e),o.Timeouts.CheckWindowClosed);else{const t=u.tryGetLocationSearch(e);if(t){try{e.close()}catch(e){}return void u.triggerClosed(e,t)}u.deferCheckClosed(e)}},tryGetLocationSearch(e){try{if(e.location.host===location.host)return e.location.search}catch(e){}},triggerClosed(e,t){s.Events.emit("popup-closed",{window:e,locationSearch:t})}}},6892:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SecureInput:()=>i});var s=n(3617);const i=function(){this.el=null,this.minChar=5120+Math.round(100*Math.random()),this.maxLen=1024,this.length=0,this.pseudoValue="",this.salt=new Uint32Array(0)};i.prototype.setElement=function(e){this.el=e,this.el.val(this.pseudoValue),this.el.on("input",this._input.bind(this))},i.prototype.reset=function(){if(this.el=null,this.length=0,this.pseudoValue="",this.salt)for(let e=0;e<this.salt.length;e++)this.salt[e]=0;this.salt=new Uint32Array(0)},i.prototype._input=function(){const e=this.el[0].selectionStart,t=this.el.val();let n="";const s=new Uint32Array(this.maxLen);let i=0,r=0;for(;i<t.length;){const e=t.charCodeAt(i),o=this.pseudoValue.charCodeAt(r),a=this._isSpecialChar(e);o===e?(n+=this._getChar(n.length),s[n.length-1]=o^this.salt[r]^n.charCodeAt(n.length-1),r++,i++):a?r++:(n+=this._getChar(n.length),s[n.length-1]=n.charCodeAt(n.length-1)^e,i++)}this.length=n.length,this.pseudoValue=n,this.salt=s,this.el.val(n),this.el[0].selectionStart=e,this.el[0].selectionEnd=e},i.prototype._getChar=function(e){return String.fromCharCode(this.minChar+e)},i.prototype._isSpecialChar=function(e){return e>=this.minChar&&e<=this.minChar+this.maxLen},Object.defineProperty(i.prototype,"value",{enumerable:!0,get(){const e=this.pseudoValue,t=this.salt,n=e.length;let i=0;const r=new Uint8Array(4*n),o=s.CryptoEngine.random(4*n);let a,l;for(let c=0;c<n;c++){const n=e.charCodeAt(c);a=String.fromCharCode(t[c]^n),l=s.ByteUtils.stringToBytes(a);for(let e=0;e<l.length;e++)r[i]=l[e]^o[i],i++}return new s.ProtectedValue(r.buffer.slice(0,i),o.buffer.slice(0,i))}})},8180:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ThemeWatcher:()=>i});var s=n(7201);const i={dark:!1,init(){const e=window.matchMedia("(prefers-color-scheme: dark)");e&&e.addEventListener&&e.addEventListener("change",(e=>{const t=e.matches;this.dark=t,s.Events.emit("dark-mode-changed",{dark:t})})),this.dark=!!e.matches}}},2118:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Transport:()=>l});var s=n(9491),i=n(2363),r=n(6838),o=n(2378);const a=new i.Logger("transport"),l={cacheFilePath:e=>s.Launcher.getTempPath(e),httpGet(e){let t;const n=s.Launcher.req("fs");if(e.file){const i=s.Launcher.getTempPath();if(e.cleanupOldFiles){const t=n.readdirSync(i);for(const r of t)r!==e.file&&o.StringFormat.replaceVersion(r,"0")===o.StringFormat.replaceVersion(e.file,"0")&&n.unlinkSync(s.Launcher.joinPath(i,r))}if(t=s.Launcher.joinPath(i,e.file),n.existsSync(t))try{if(e.cache&&n.statSync(t).size>0)return a.info("File already downloaded "+e.url),e.success(t);n.unlinkSync(t)}catch(e){n.unlink(t,r.noop)}}const i=e.url.split(":")[0];a.info("GET "+e.url);const c=s.Launcher.req("url").parse(e.url);c.headers={"User-Agent":navigator.userAgent},s.Launcher.resolveProxy(e.url,(o=>{a.info("Request to "+e.url+" "+(o?"using proxy "+o.host+":"+o.port:"without proxy")),o&&(c.headers.Host=c.host,c.host=o.host,c.port=o.port,c.path=e.url),s.Launcher.req(i).get(c,(s=>{if(a.info("Response from "+e.url+": "+s.statusCode),200===s.statusCode)if(e.file){const i=n.createWriteStream(t);s.pipe(i),i.on("finish",(()=>{i.close((()=>{e.success(t)}))})),i.on("error",(t=>{e.error(t)}))}else{let t=[];s.on("data",(e=>{t.push(e)})),s.on("end",(()=>{if(t=window.Buffer.concat(t),(e.text||e.json)&&(t=t.toString("utf8")),e.json)try{t=JSON.parse(t)}catch(t){e.error("Error parsing JSON: "+t.message)}e.success(t)}))}else if(s.headers.location&&[301,302].indexOf(s.statusCode)>=0){if(e.noRedirect)return e.error("Too many redirects");e.url=s.headers.location,e.noRedirect=!0,l.httpGet(e)}else e.error("HTTP status "+s.statusCode)})).on("error",(s=>{a.error("Cannot GET "+e.url,s),t&&n.unlink(t,r.noop),e.error(s)}))}))}}},8432:(e,t,n)=>{"use strict";n.r(t),n.d(t,{BrowserExtensionConnector:()=>f,SupportedExtensions:()=>u,SupportedBrowsers:()=>d});var s=n(9491),i=n(2363),r=n(5886),o=n(7119),a=n(7614),l=n(667);const c={connectionId:1,extensionName:"KeeWeb Connect",supportsNotifications:!0},u=[{alias:"KWC",name:"KeeWeb Connect"},{alias:"KPXC",name:"KeePassXC-Browser"}],d=["Chrome","Firefox","Edge","Other"];l.Features.isMac&&d.unshift("Safari");const h=new i.Logger("browser-extension-connector");localStorage.debugBrowserExtension||(h.level=i.Logger.Level.Info);const p=new Map,m=[];let g=!1;const f={started:!1,logger:h,init(e){const t=this.sendEvent.bind(this);if(r.ProtocolImpl.init({appModel:e,logger:h,sendEvent:t}),this.browserWindowMessage=this.browserWindowMessage.bind(this),s.Launcher){const{ipcRenderer:e}=s.Launcher.electron();e.on("browserExtensionSocketConnected",((e,t,n)=>this.socketConnected(t,n))),e.on("browserExtensionSocketClosed",((e,t)=>this.socketClosed(t))),e.on("browserExtensionSocketRequest",((e,t,n)=>this.socketRequest(t,n))),a.AppSettingsModel.on("change",(()=>this.appSettingsChanged()))}this.isEnabled()&&this.start()},start(){s.Launcher?this.startDesktopAppListener():this.startWebMessageListener(),this.started=!0},stop(){s.Launcher?this.stopDesktopAppListener():this.stopWebMessageListener(),r.ProtocolImpl.cleanup(),p.clear(),this.started=!1},appSettingsChanged(){this.isEnabled()?this.started||this.start():this.started&&this.stop()},isEnabled(){if(!s.Launcher)return!0;for(const e of u)for(const t of d)if(a.AppSettingsModel[`extensionEnabled${e.alias}${t}`])return!0;return!1},startWebMessageListener(){window.addEventListener("message",this.browserWindowMessage),h.info("Started")},stopWebMessageListener(){window.removeEventListener("message",this.browserWindowMessage)},enable(e,t,n){const{ipcRenderer:i}=s.Launcher.electron();i.invoke("browserExtensionConnectorEnable",e,t,n)},async startDesktopAppListener(){const{ipcRenderer:e}=s.Launcher.electron();e.invoke("browserExtensionConnectorStart",{appleTeamId:o.RuntimeInfo.appleTeamId})},stopDesktopAppListener(){const{ipcRenderer:e}=s.Launcher.electron();e.invoke("browserExtensionConnectorStop")},browserWindowMessage(e){var t;e.origin===location.origin&&e.source===window&&"request"===(null==e||null===(t=e.data)||void 0===t?void 0:t.kwConnect)&&(h.debug("Extension -> KeeWeb",e.data),m.push(e.data),this.processBrowserMessages())},async processBrowserMessages(){if(!m.length||g)return;p.has(c.connectionId)||p.set(c.connectionId,c),g=!0;const e=m.shift(),t=await r.ProtocolImpl.handleRequest(e,c);g=!1,t&&this.sendWebResponse(t),this.processBrowserMessages()},sendWebResponse(e){h.debug("KeeWeb -> Extension",e),e.kwConnect="response",postMessage(e,window.location.origin)},sendSocketEvent(e){const{ipcRenderer:t}=s.Launcher.electron();t.invoke("browserExtensionConnectorSocketEvent",e)},sendSocketResult(e,t){const{ipcRenderer:n}=s.Launcher.electron();n.invoke("browserExtensionConnectorSocketResult",e,t)},sendEvent(e){this.isEnabled()&&p.size&&(s.Launcher?this.sendSocketEvent(e):this.sendWebResponse(e))},socketConnected(e,t){p.set(e,t)},socketClosed(e){p.delete(e),r.ProtocolImpl.deleteConnection(e)},async socketRequest(e,t){let n;const s=p.get(e);if(s)n=await r.ProtocolImpl.handleRequest(t,s);else{const s=`Connection not found: ${e}`;n=r.ProtocolImpl.errorToResponse({message:s},t)}this.sendSocketResult(e,n)},get sessions(){return r.ProtocolImpl.sessions},terminateConnection(e){if(e=+e,s.Launcher){const{ipcRenderer:t}=s.Launcher.electron();t.invoke("browserExtensionConnectorCloseSocket",e)}else r.ProtocolImpl.deleteConnection(e)},getClientPermissions:e=>r.ProtocolImpl.getClientPermissions(e),setClientPermissions(e,t){r.ProtocolImpl.setClientPermissions(e,t)}}},5886:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ProtocolImpl:()=>V});var s=n(3617),i=n(7201),r=n(9491),o=n(4855),a=n(4486),l=n(1622),c=n(4530),u=n(3297),d=n(7119),h=n(3942),p=n(7031),m=n(9793),g=n(2729),f=n(8925),A=n(7614),y=n(403),v=n(4583),b=n(3659),w=n(3660);const k="KeeWeb",C="398d9c782ec76ae9e9877c2321cbda2b31fc6d18ccf0fed5ca4bd746bab4d64a",_="Browser",E=new Set(["KeePassXC-Browser Passwords",_]),x={noOpenFiles:{message:u.Locale.extensionErrorNoOpenFiles,code:"1"},userRejected:{message:u.Locale.extensionErrorUserRejected,code:"6"},noMatches:{message:u.Locale.extensionErrorNoMatches,code:"15"}},I=new Map;let S,D,B;function P(e){let t=0,n=1;for(;t<e.length;++t)n+=e[t],e[t]=n,n>>=8}function T(e){if(!e.clientID)throw new Error("Empty clientID");const t=I.get(e.clientID);if(!t)throw new Error(`Client not connected: ${e.clientID}`);return t}function F(e){const t=T(e);if(!e.nonce)throw new Error("Empty nonce");if(!e.message)throw new Error("Empty message");const n=s.ByteUtils.base64ToBytes(e.nonce),i=s.ByteUtils.base64ToBytes(e.message),r=o.box.open(i,n,t.publicKey,t.keys.secretKey);if(!r)throw new Error("Failed to decrypt data");const a=(new TextDecoder).decode(r),l=JSON.parse(a);if(S.debug("Extension -> KeeWeb -> (decrypted)",l),!l)throw new Error("Empty request payload");if(l.action!==e.action)throw new Error("Bad action in decrypted payload");return l}function M(e,t){S.debug("KeeWeb -> Extension (decrypted)",t);const n=s.ByteUtils.base64ToBytes(e.nonce);P(n);const i=s.ByteUtils.bytesToBase64(n),r=T(e);t.nonce=i;const a=JSON.stringify(t),l=(new TextEncoder).encode(a),c=(0,o.box)(l,n,r.publicKey,r.keys.secretKey),u=s.ByteUtils.bytesToBase64(c);return{action:e.action,message:u,nonce:i}}function O(e){const t=new Error(e.message);return t.code=e.code,t}function L(){if(!D.files.hasOpenFiles())throw O(x.noOpenFiles)}async function N(e){var t;if(!D.files.hasOpenFiles()){if(!A.AppSettingsModel.extensionFocusIfLocked)throw O(x.noOpenFiles);try{j(),await D.unlockAnyFile("extensionUnlockMessage",y.Timeouts.KeeWebConnectRequest)}catch(e){throw O(x.noOpenFiles)}}const n=T(e);if(n.permissions)return;if(c.Alerts.alertDisplayed)throw new Error(u.Locale.extensionErrorAlertDisplayed);j();const s=f.RuntimeDataModel.extensionConnectConfig,o=D.files.map((e=>({id:e.id,name:e.name,checked:!s||s.allFiles||s.files.includes(e.id)})));if(!o.some((e=>e.checked)))for(const e of o)e.checked=!0;const a=new p.ExtensionConnectView({extensionName:Q(n),identityVerified:!r.Launcher,files:o,allFiles:null===(t=null==s?void 0:s.allFiles)||void 0===t||t,askGet:(null==s?void 0:s.askGet)||"multiple"});try{await R({header:u.Locale.extensionConnectHeader,icon:"exchange-alt",buttons:[c.Alerts.buttons.allow,c.Alerts.buttons.deny],view:a,wide:!0,opaque:!0})}catch(e){throw n.permissionsDenied=!0,i.Events.emit("browser-extension-sessions-changed"),e}f.RuntimeDataModel.extensionConnectConfig=a.config,n.permissions=a.config,i.Events.emit("browser-extension-sessions-changed")}function R(e){return new Promise(((t,n)=>{let s=0;const i=c.Alerts.alert(Object.assign({},e,{enter:"yes",esc:"",success:e=>{clearTimeout(s),t(e)},cancel:()=>{clearTimeout(s),n(O(x.userRejected))}}));s=setTimeout((()=>{i.closeWithResult("")}),y.Timeouts.KeeWebConnectRequest)}))}function K(e){const t=T(e);if(!t.permissions)return;const n=D.files.filter((e=>e.active&&(t.permissions.allFiles||t.permissions.files.includes(e.id))));if(!n.length)throw O(x.noOpenFiles);return n}function U(e){return function(e){return"KeePassXC-Browser"===T(e).connection.extensionName}(e)?h.KnownAppVersions.KeePassXC:d.RuntimeInfo.version}function Q(e){return e.connection.appName?`${e.connection.extensionName} (${e.connection.appName})`:e.connection.extensionName}function j(){S.debug("Focus KeeWeb"),r.Launcher?r.Launcher.isAppFocused()||r.Launcher.showMainWindow():B({action:"attention-required"})}async function G(e,t,n){const s=F(e);if(await N(e),!s.url)throw new Error("Empty url");const i=K(e),r=T(e),o=new w.SelectEntryFilter({url:s.url,title:s.title},D,i,n);o.subdomains=!1;let a,l=o.getEntries();if(o.subdomains=!0,l.length)1===l.length&&t&&"multiple"===r.permissions.askGet&&(a=l[0]);else if(l=o.getEntries(),!l.length){if(!A.AppSettingsModel.extensionFocusIfEmpty)throw O(x.noMatches);o.useUrl=!1,o.title&&A.AppSettingsModel.autoTypeTitleFilterEnabled&&(o.useTitle=!0,l=o.getEntries(),l.length||(o.useTitle=!1))}if(!a){const e=Q(r),t=u.Locale.extensionSelectPasswordFor.replace("{}",e),n=new v.SelectEntryView({filter:o,topMessage:t});j();const s=setTimeout((()=>{n.emit("result",void 0)}),y.Timeouts.KeeWebConnectRequest),i=await n.showAndGetResult();if(clearTimeout(s),a=null==i?void 0:i.entry,!a)throw O(x.userRejected)}return r.stats.passwordsRead++,a}const H={ping:({data:e})=>({data:e}),"change-public-keys"(e,t){let{publicKey:n,version:a,clientID:l}=e;if(I.has(l))throw new Error("Changing keys is not allowed");r.Launcher||I.clear();const c=o.box.keyPair();n=s.ByteUtils.base64ToBytes(n);const u={connectedDate:new Date,passwordsRead:0,passwordsWritten:0};I.set(l,{connection:t,publicKey:n,version:a,keys:c,stats:u}),i.Events.emit("browser-extension-sessions-changed"),S.info("New client key created",l,a);const d=s.ByteUtils.base64ToBytes(e.nonce);P(d);const h=s.ByteUtils.bytesToBase64(d);return Object.assign({action:"change-public-keys",version:U(e),publicKey:s.ByteUtils.bytesToBase64(c.publicKey),nonce:h,success:"true"},function(e){return"KeeWeb Connect"===T(e).connection.extensionName}(e)?{appName:"KeeWeb"}:void 0)},"get-databasehash":async e=>(F(e),e.triggerUnlock?await N(e):L(),M(e,{hash:C,success:"true",version:U(e)})),"generate-password"(e){const t=a.PasswordGenerator.generate(l.GeneratorPresets.browserExtensionPreset);return M(e,{version:U(e),success:"true",entries:[{password:t}]})},"lock-database":e=>(F(e),L(),i.Events.emit("lock-workspace"),c.Alerts.alertDisplayed&&j(),M(e,{success:"true",version:U(e)})),associate:e=>(F(e),L(),M(e,{success:"true",version:U(e),hash:C,id:k})),"test-associate"(e){const t=F(e);if(t.id!==k)throw O(x.noOpenFiles);return M(e,{success:"true",version:U(e),hash:C,id:t.id})},async"get-logins"(e){var t;const n=await G(e,!0);return M(e,{success:"true",version:U(e),hash:C,count:1,entries:[{group:n.group.title,login:n.user||"",name:n.title||"",password:(null===(t=n.password)||void 0===t?void 0:t.getText())||"",skipAutoSubmit:"false",stringFields:[],uuid:s.ByteUtils.bytesToHex(n.entry.uuid.bytes)}],id:""})},async"get-totp-by-url"(e){const t=await G(e,!0,{otp:!0});if(t.initOtpGenerator(),!t.otpGenerator)throw O(x.noMatches);let n;t.needsTouch&&(n=new b.SelectEntryFieldView({needsTouch:!0,deviceShortName:t.device.shortName}),n.render());const s=new Promise(((e,s)=>{var i;null===(i=n)||void 0===i||i.on("result",(()=>s(O(x.userRejected)))),t.otpGenerator.next(((t,n)=>{n?e(n):s(t||O(x.userRejected))}))}));let i;try{i=await s}finally{var r;null===(r=n)||void 0===r||r.remove()}return M(e,{success:"true",version:U(e),totp:i})},async"get-any-field"(e){const t=await G(e,!1),n=new b.SelectEntryFieldView({entry:t}),s=setTimeout((()=>{n.emit("result",void 0)}),y.Timeouts.KeeWebConnectRequest),i=await n.showAndGetResult();if(clearTimeout(s),!i)throw O(x.userRejected);let r=t.getAllFields()[i];return r.isProtected&&(r=r.getText()),M(e,{success:"true",version:U(e),field:i,value:r})},async"get-totp"(e){throw F(e),await N(e),new Error("Not implemented")},async"set-login"(e){const t=F(e);if(await N(e),j(),!t.url)throw new Error("Empty url");const n=new URL(t.url),r=K(e),o=T(e);let a,l;if(t.uuid){for(const e of r){const n=s.ByteUtils.bytesToBase64(s.ByteUtils.hexToBytes(t.uuid)),i=e.getEntry(e.subId(n));if(i){if(l)throw new Error("Two entries with the same ID found");l=i,a=i.group}}if(!l)throw new Error("Updated entry not found")}if("auto"===o.permissions.askSave&&o.permissions.saveTo&&!a){const e=r.find((e=>e.id===o.permissions.saveTo.fileId));a=null==e?void 0:e.getGroup(o.permissions.saveTo.groupId)}if("auto"!==o.permissions.askSave||!a){var d;if(!a&&f.RuntimeDataModel.extensionSaveConfig){const e=r.find((e=>e.id===f.RuntimeDataModel.extensionSaveConfig.fileId));a=null==e?void 0:e.getGroup(f.RuntimeDataModel.extensionSaveConfig.groupId)}const e=[];for(const t of r)t.forEachGroup((n=>{var s;const i=[];for(let e=n;e.parentGroup;e=e.parentGroup)i.push(" "," ");!a&&1===n.iconId&&E.has(n.title)&&(a=n),e.push({id:n.id,fileId:t.id,spaces:i,title:n.title,selected:n.id===(null===(s=a)||void 0===s?void 0:s.id)})}));a||e.splice(1,0,{id:"",fileId:r[0].id,spaces:[" "," "],title:`Browser (${u.Locale.extensionSaveEntryNewGroup})`,selected:!0});const n=new g.ExtensionSaveEntryView({extensionName:Q(o),url:t.url,user:t.login,askSave:(null===(d=f.RuntimeDataModel.extensionSaveConfig)||void 0===d?void 0:d.askSave)||"always",update:!!l,allGroups:e});await R({header:u.Locale.extensionSaveEntryHeader,icon:"plus",buttons:[c.Alerts.buttons.allow,c.Alerts.buttons.deny],view:n});const s=Object.assign({},n.config);if(!l){if(s.groupId){const e=r.find((e=>e.id===s.fileId));a=e.getGroup(s.groupId)}else a=D.createNewGroupWithName(r[0].groups[0],r[0],_),a.setIcon(1),s.groupId=a.id;f.RuntimeDataModel.extensionSaveConfig=s,o.permissions.saveTo={fileId:s.fileId,groupId:s.groupId}}o.permissions.askSave=s.askSave}const h={Title:n.hostname,UserName:t.login,Password:s.ProtectedValue.fromString(t.password||""),URL:t.url};if(l)for(const[e,t]of Object.entries(h))t&&l.setField(e,t);else D.createNewEntryWithFields(a,h);return o.stats.passwordsWritten++,i.Events.emit("browser-extension-sessions-changed"),i.Events.emit("refresh"),M(e,{success:"true",version:U(e),count:null,entries:null,hash:C})},async"get-database-groups"(e){F(e),await N(e);const t=e=>{const n={name:e.title,uuid:s.ByteUtils.bytesToHex(e.group.uuid.bytes),children:[]};for(const s of e.items)s.matches()&&n.children.push(t(s));return n},n=[];for(const s of K(e))for(const e of s.groups)n.push(t(e));return M(e,{success:"true",version:U(e),groups:{groups:n}})},async"create-new-group"(e){const t=F(e);if(await N(e),!t.groupName)throw new Error("No groupName");const n=t.groupName.split("/").map((e=>e.trim())).filter((e=>e));if(!n.length)throw new Error("Empty group path");const i=K(e);for(const t of i)for(const i of t.groups){let t=i;const r=[...n];for(;r.length&&t;){const e=r.shift();t=t.items.find((t=>t.title===e))}if(t)return M(e,{success:"true",version:U(e),name:t.title,uuid:s.ByteUtils.bytesToHex(t.group.uuid.bytes)})}const r=T(e),o=new m.ExtensionCreateGroupView({extensionName:Q(r),groupPath:n.join(" / "),files:i.map(((e,t)=>({id:e.id,name:e.name,selected:0===t})))});await R({header:u.Locale.extensionNewGroupHeader,icon:"folder-plus",buttons:[c.Alerts.buttons.allow,c.Alerts.buttons.deny],view:o});const a=i.find((e=>e.id===o.selectedFile));let l=a.groups[0];const d=[...n];for(;d.length;){const e=d.shift(),t=l.items.find((t=>t.title===e));l=t||D.createNewGroupWithName(l,a,e)}return M(e,{success:"true",version:U(e),name:l.title,uuid:s.ByteUtils.bytesToHex(l.group.uuid.bytes)})}},V={init(e){D=e.appModel,S=e.logger,B=e.sendEvent,i.Events.on("file-opened",(()=>{B({action:"database-unlocked"})})),i.Events.on("one-file-closed",(()=>{D.files.hasOpenFiles()||B({action:"database-locked"})})),i.Events.on("all-files-closed",(()=>{B({action:"database-locked"})}))},cleanup(){const e=I.size;I.clear(),e&&i.Events.emit("browser-extension-sessions-changed")},deleteConnection(e){for(const[t,n]of I.entries())n.connection.connectionId===e&&I.delete(t);i.Events.emit("browser-extension-sessions-changed")},getClientPermissions(e){var t;return null===(t=I.get(e))||void 0===t?void 0:t.permissions},setClientPermissions(e,t){const n=I.get(e);null!=n&&n.permissions&&(n.permissions=Object.assign({},n.permissions,t))},errorToResponse:(e,t)=>({action:null==t?void 0:t.action,error:e.message||"Unknown error",errorCode:e.code||0}),async handleRequest(e,t){const n=null===r.Launcher||void 0===r.Launcher?void 0:r.Launcher.isAppFocused();let s;try{const n=H[e.action];if(!n)throw new Error(`Handler not found: ${e.action}`);if(s=await n(e,t),!s)throw new Error(`Handler returned an empty result: ${e.action}`)}catch(t){t.code||S.error(`Error in handler ${e.action}`,t),s=this.errorToResponse(t,e)}return!n&&null!==r.Launcher&&void 0!==r.Launcher&&r.Launcher.isAppFocused()&&r.Launcher.hideApp(),s},get sessions(){return[...I.entries()].map((([e,t])=>({clientId:e,connectionId:t.connection.connectionId,appName:t.connection.appName,extensionName:t.connection.extensionName,connectedDate:t.stats.connectedDate,passwordsRead:t.stats.passwordsRead,passwordsWritten:t.stats.passwordsWritten,permissions:t.permissions,permissionsDenied:t.permissionsDenied}))).sort(((e,t)=>t.connectedDate-e.connectedDate))}}},1673:(e,t,n)=>{"use strict";n.r(t),n.d(t,{KdbxToHtml:()=>g});var s=n(3617),i=n(7119),r=n(9673),o=n(6098),a=n(2378),l=n(3297);const c={db:n(2109),entry:n(6423)},u=[{name:"UserName",locStr:"user"},{name:"Password",locStr:"password",protect:!0},{name:"URL",locStr:"website"},{name:"Notes",locStr:"notes"}],d={Title:!0};for(const{name:e}of u)d[e]=!0;function h(e,t,n){if(n=[...n,t],t.uuid.equals(e.meta.recycleBinUuid)||t.uuid.equals(e.meta.entryTemplatesGroup))return"";return t.entries.map((t=>p(e,t,n))).join("\n")+t.groups.map((t=>h(e,t,n))).join("\n")}function p(e,t,n){const i=n.map((e=>e.name)).join(" / "),r=[];for(const e of u){const n=m(t,e.name);n&&r.push({title:a.StringFormat.capFirst(l.Locale[e.locStr]),value:n,protect:e.protect})}for(const[e,n]of t.fields)if(!d[e]){const s=m(t,e);s&&r.push({title:e,value:s,protect:n.isProtected})}const h=m(t,"Title");let p;t.times.expires&&t.times.expiryTime&&(p=o.DateFormat.dtStr(t.times.expiryTime));const g=[...t.binaries].map((([e,t])=>{if(t&&t.ref&&(t=t.value),t){t="data:application/octet-stream;base64,"+s.ByteUtils.bytesToBase64(t)}return{name:e,data:t}})).filter((e=>e.name&&e.data));return c.entry({path:i,title:h,fields:r,tags:t.tags.join(", "),created:o.DateFormat.dtStr(t.times.creationTime),modified:o.DateFormat.dtStr(t.times.lastModTime),expires:p,attachments:g})}function m(e,t){const n=e.fields.get(t);return n&&n.isProtected&&n.getText()||n||""}const g={convert(e,t){const n=e.groups.map((t=>h(e,t,[]))).join("\n");return c.db({name:t.name,date:o.DateFormat.dtStr(Date.now()),appLink:r.Links.Homepage,appVersion:i.RuntimeInfo.version,contentHtml:n})},entryToHtml:(e,t)=>p(0,t,[])}},6655:(e,t,n)=>{"use strict";n.r(t),n.d(t,{OtpQrReader:()=>h});var s=n(8767),i=n.n(s),r=n(7201),o=n(7027),a=n(4530),l=n(9081),c=n(667),u=n(3297);const d=new(n(2363).Logger)("otp-qr-reader");const h=new class{constructor(){this.alert=null,this.fileInput=null,this.pasteEvent=this.pasteEvent.bind(this)}read(){let e=o.Shortcuts.screenshotToClipboardShortcut();e&&(e=u.Locale.detSetupOtpAlertBodyWith.replace("{}",e));const t=c.Features.isMobile?"":u.Locale.detSetupOtpAlertBodyWith.replace("{}",o.Shortcuts.actionShortcutSymbol()+"V");this.startListenClipoard();const n=[{result:"manually",title:u.Locale.detSetupOtpManualButton,silent:!0},a.Alerts.buttons.cancel];c.Features.isMobile&&n.unshift({result:"select",title:u.Locale.detSetupOtpScanButton});const s=c.Features.isMobile?u.Locale.detSetupOtpAlertBody3Mobile:u.Locale.detSetupOtpAlertBody3.replace("{}",t||"");this.alert=a.Alerts.alert({icon:"qrcode",header:u.Locale.detSetupOtpAlert,body:[u.Locale.detSetupOtpAlertBody,u.Locale.detSetupOtpAlertBody1,u.Locale.detSetupOtpAlertBody2.replace("{}",e||""),s,u.Locale.detSetupOtpAlertBody4].join("\n"),esc:"",click:"",enter:"",buttons:n,complete:e=>{this.alert=null,this.stopListenClipboard(),"select"===e?this.selectFile():"manually"===e&&this.enterManually()}})}selectFile(){if(!this.fileInput){const e=document.createElement("input");e.setAttribute("type","file"),e.setAttribute("capture","camera"),e.setAttribute("accept","image/*"),e.setAttribute("class","hide-by-pos"),this.fileInput=e,this.fileInput.onchange=this.fileSelected}this.fileInput.click()}fileSelected(){const e=this.fileInput.files[0];!e||e.type.indexOf("image")<0||this.readFile(e)}startListenClipoard(){document.addEventListener("paste",this.pasteEvent)}stopListenClipboard(){document.removeEventListener("paste",this.pasteEvent)}pasteEvent(e){const t=[...e.clipboardData.items].find((e=>"file"===e.kind&&-1!==e.type.indexOf("image")));t?(d.info("Reading pasted image",t.type),this.alert&&this.alert.change({header:u.Locale.detOtpImageReading}),this.readFile(t.getAsFile())):d.debug("Paste without file")}readFile(e){const t=new FileReader;t.onload=()=>{d.debug("Image data loaded"),this.readQr(t.result)},t.readAsDataURL(e)}readQr(e){const t=new Image;t.onload=()=>{d.debug("Image format loaded");try{const e=d.ts(),n=new(i())(t).decode();d.info("QR code read",d.ts(e)),this.removeAlert();try{const e=l.Otp.parseUrl(n);r.Events.emit("qr-read",e)}catch(e){d.error("Error parsing QR code",e),a.Alerts.error({header:u.Locale.detOtpQrWrong,body:u.Locale.detOtpQrWrongBody,pre:e.toString()})}}catch(e){d.error("Error reading QR code",e),this.removeAlert(),a.Alerts.error({header:u.Locale.detOtpQrError,body:u.Locale.detOtpQrErrorBody})}},t.onerror=()=>{d.debug("Image load error"),this.removeAlert(),a.Alerts.error({header:u.Locale.detOtpImageError,body:u.Locale.detOtpImageErrorBody})},t.src=e}enterManually(){r.Events.emit("qr-enter-manually")}removeAlert(){this.alert&&this.alert.closeImmediate()}}},6098:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DateFormat:()=>r});var s=n(111),i=n(2378);const r={months(){const e=new Intl.DateTimeFormat(s.SettingsManager.activeLocale,{month:"long"}),t=[];for(let n=0;n<12;n++)t.push(e.format(new Date(2008,n)));return t},weekDays(){const e=new Intl.DateTimeFormat(s.SettingsManager.activeLocale,{weekday:"long"}),t=[];for(let n=1;n<8;n++)t.push(e.format(new Date(2007,9,6+n)));return t},shortWeekDays(){const e=new Intl.DateTimeFormat(s.SettingsManager.activeLocale,{weekday:"short"}),t=[];for(let n=1;n<8;n++)t.push(e.format(new Date(2007,9,6+n)));return t},dtStr:e=>("number"==typeof e&&(e=new Date(e)),e?new Intl.DateTimeFormat(s.SettingsManager.activeLocale,{dateStyle:"medium",timeStyle:"medium"}).format(e):""),dStr:e=>("number"==typeof e&&(e=new Date(e)),e?new Intl.DateTimeFormat(s.SettingsManager.activeLocale,{year:"numeric",month:"short",day:"numeric"}).format(e):""),dtStrFs:e=>("number"==typeof e&&(e=new Date(e)),e?e.getFullYear()+"-"+i.StringFormat.pad(e.getMonth()+1,2)+"-"+i.StringFormat.pad(e.getDate(),2)+"T"+i.StringFormat.pad(e.getHours(),2)+"-"+i.StringFormat.pad(e.getMinutes(),2)+"-"+i.StringFormat.pad(e.getSeconds(),2):"")}},9491:(e,t,n)=>{"use strict";let s;n.r(t),n.d(t,{Launcher:()=>s}),window.process&&window.process.versions&&window.process.versions.electron&&(s=n(547).Launcher)},547:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Launcher:()=>u});var s=n(7201),i=n(8578),r=n(7119),o=n(3297),a=n(2363),l=n(6838);const c=new a.Logger("launcher"),u={name:"electron",version:window.process.versions.electron,autoTypeSupported:!0,thirdPartyStoragesSupported:!0,clipboardSupported:!0,req:window.require,platform:()=>process.platform,arch:()=>process.arch,electron(){return this.req("electron")},remoteApp(){return this.electron().remote.app},remReq(e){return this.electron().remote.require(e)},openLink(e){/^(http|https|ftp|sftp|mailto):/i.test(e)&&this.electron().shell.openExternal(e)},devTools:!0,openDevTools(){this.electron().remote.getCurrentWindow().webContents.openDevTools({mode:"bottom"})},getSaveFileName(e,t){if(e){const t=this.remReq("electron").app.getPath("userDesktop");e=this.joinPath(t,e)}this.remReq("electron").dialog.showSaveDialog({title:o.Locale.launcherSave,defaultPath:e,filters:[{name:o.Locale.launcherFileFilter,extensions:["kdbx"]}]}).then((e=>t(e.filePath)))},getUserDataPath(e){return this.userDataPath||(this.userDataPath=this.remoteApp().getPath("userData")),this.joinPath(this.userDataPath,e||"")},getTempPath(e){let t=this.joinPath(this.remoteApp().getPath("temp"),"KeeWeb");const n=this.req("fs");return n.existsSync(t)||n.mkdirSync(t),e&&(t=this.joinPath(t,e)),t},getDocumentsPath(e){return this.joinPath(this.remoteApp().getPath("documents"),e||"")},getAppPath(e){const t=this.req("path").dirname,n=__dirname.endsWith("app.asar")?__dirname:this.remoteApp().getAppPath();return this.joinPath(t(n),e||"")},getWorkDirPath(e){return this.joinPath(process.cwd(),e||"")},joinPath(...e){return this.req("path").join(...e)},writeFile(e,t,n){this.req("fs").writeFile(e,window.Buffer.from(t),n)},readFile(e,t,n){this.req("fs").readFile(e,t,((e,t)=>{const s="string"==typeof t?t:new Uint8Array(t);n(s,e)}))},fileExists(e,t){const n=this.req("fs");n.access(e,n.constants.F_OK,(e=>t(!e)))},fileExistsSync(e){const t=this.req("fs");return!t.accessSync(e,t.constants.F_OK)},deleteFile(e,t){this.req("fs").unlink(e,t||l.noop)},statFile(e,t){this.req("fs").stat(e,((e,n)=>t(n,e)))},mkdir(e,t){const n=this.req("fs"),s=this.req("path"),i=[],r=function(e,t,i){n.exists(e,(n=>{if(n)return i();t.unshift(e);const o=s.dirname(e);if(o===e||!o||"."===o||"/"===o)return i();r(o,t,i)}))},o=function(e,t){if(!e.length)return t();n.mkdir(e.shift(),(n=>n?t(n):o(e,t)))};r(e,i,(()=>o(i,t)))},parsePath(e){const t=this.req("path");return{path:e,dir:t.dirname(e),file:t.basename(e)}},createFsWatcher(e){return this.req("fs").watch(e,{persistent:!1})},loadConfig(e){return this.remoteApp().loadConfig(e)},saveConfig(e,t){return this.remoteApp().saveConfig(e,t)},preventExit:e=>(e.returnValue=!1,!1),exit(){this.exitRequested=!0,this.requestExit()},requestExit(){const e=this.remoteApp();e.setHookBeforeQuitEvent(!1),this.pendingUpdateFile?e.restartAndUpdate(this.pendingUpdateFile):e.quit()},requestRestartAndUpdate(e){this.pendingUpdateFile=e,this.requestExit()},cancelRestart(){this.pendingUpdateFile=void 0},setClipboardText(e){return this.electron().clipboard.writeText(e)},getClipboardText(){return this.electron().clipboard.readText()},clearClipboardText(){const{clipboard:e}=this.electron();e.clear(),"linux"===process.platform&&e.clear("selection")},quitOnRealQuitEventIfMinimizeOnQuitIsEnabled(){return!!this.pendingUpdateFile},minimizeApp(){this.remoteApp().minimizeApp({restore:o.Locale.menuRestoreApp.replace("{}","KeeWeb"),quit:o.Locale.menuQuitApp.replace("{}","KeeWeb")})},canDetectOsSleep:()=>"linux"!==process.platform,updaterEnabled:()=>"linux"!==process.platform,getMainWindow(){return this.remoteApp().getMainWindow()},resolveProxy(e,t){this.getMainWindow().webContents.session.resolveProxy(e).then((e=>{const n=/^proxy\s+([\w\.]+):(\d+)+\s*/i.exec(e);e=n&&n[1]?{host:n[1],port:+n[2]}:null,t(e)}))},hideApp(){const e=this.remoteApp();"darwin"===this.platform()?e.hide():e.minimizeThenHideIfInTray()},isAppFocused(){return!!this.electron().remote.BrowserWindow.getFocusedWindow()},showMainWindow(){this.remoteApp().showAndFocusMainWindow()},spawn(e){const t=c.ts(),{ipcRenderer:n}=this.electron();let{complete:s}=e;delete e.complete,n.invoke("spawnProcess",e).then((n=>{if(n.err){var i;c.error("spawn error: "+e.cmd+", "+c.ts(t),n.err),null===(i=s)||void 0===i||i(n.err)}else{var r;const i=n.code,o=n.stdout||"",a=n.stderr||"",l="spawn "+e.cmd+": "+i+", "+c.ts(t);0!==i?c.error(l+"\n"+o+"\n"+a):c.info(l+(o&&!e.noStdOutLogging?"\n"+o:"")),null===(r=s)||void 0===r||r(0!==i?"Exit code "+i:null,o,i)}s=null})).catch((e=>{var t;null===(t=s)||void 0===t||t(e)}))},checkOpenFiles(){this.readyToOpenFiles=!0,this.pendingFileToOpen&&(this.openFile(this.pendingFileToOpen),delete this.pendingFileToOpen)},openFile(e){this.readyToOpenFiles?s.Events.emit("launcher-open-file",e):this.pendingFileToOpen=e},setGlobalShortcuts(e){this.remoteApp().setGlobalShortcuts(e)},minimizeMainWindow(){this.getMainWindow().minimize()},maximizeMainWindow(){this.getMainWindow().maximize()},restoreMainWindow(){this.getMainWindow().restore()},mainWindowMaximized(){return this.getMainWindow().isMaximized()}};s.Events.on("launcher-exit-request",(()=>{setTimeout((()=>u.exit()),0)})),s.Events.on("launcher-minimize",(()=>setTimeout((()=>s.Events.emit("app-minimized")),0))),s.Events.on("launcher-maximize",(()=>setTimeout((()=>s.Events.emit("app-maximized")),0))),s.Events.on("launcher-unmaximize",(()=>setTimeout((()=>s.Events.emit("app-unmaximized")),0))),s.Events.on("launcher-started-minimized",(()=>setTimeout((()=>u.minimizeApp()),0))),s.Events.on("start-profile",(e=>i.StartProfiler.reportAppProfile(e))),window.launcherOpen=e=>u.openFile(e),window.launcherOpenedFile&&(c.info("Open file request",window.launcherOpenedFile),u.openFile(window.launcherOpenedFile),delete window.launcherOpenedFile),s.Events.on("app-ready",(()=>setTimeout((()=>{u.checkOpenFiles(),u.remoteApp().setAboutPanelOptions({applicationVersion:r.RuntimeInfo.version,version:r.RuntimeInfo.commit})}),0))),"darwin"===process.platform&&u.remoteApp().setHookBeforeQuitEvent(!0),u.remoteApp().on("remote-app-event",(e=>{window.debugRemoteAppEvents&&c.debug("remote-app-event",e.name),s.Events.emit(e.name,e.data)}))},3006:(e,t,n)=>{"use strict";n.r(t),n.d(t,{NativeModules:()=>l});var s=n(3617),i=n(7201),r=n(2363),o=n(9491),a=n(403);let l;if(o.Launcher){const e=new r.Logger("native-module-connector");let t,c=!1,u=0,d={},h={};const{ipcRenderer:p}=o.Launcher.electron();p.on("nativeModuleCallback",((e,t)=>l.hostCallback(t))),p.on("nativeModuleHostError",((e,t)=>l.hostError(t))),p.on("nativeModuleHostExit",((e,{code:t,sig:n})=>l.hostExit(t,n))),p.on("nativeModuleHostDisconnect",(()=>l.hostDisconnect())),p.on("log",((e,...t)=>l.log(...t)));const m={yubikeys(e){i.Events.emit("native-modules-yubikeys",{numYubiKeys:e})},log(...t){e.info("Message from host",...t)},result({callId:t,result:n,error:s}){const i=d[t];i&&(delete d[t],s?(e.error("Received an error",i.cmd,s),i.reject(s)):i.resolve(n))},yubiKeyChallengeResponseResult({callbackId:e,error:t,result:n}){const s=h[e];if(s){t&&t.touchRequested||delete h[e],s(t,n)}}};l={startHost(){return c?Promise.resolve():t||(e.debug("Starting native module host"),t=this.callNoWait("start").then((()=>{if(t=void 0,c=!0,this.usbListenerRunning)return this.call("startUsbListener")})),t)},hostError(t){e.error("Host error",t)},hostDisconnect(){e.error("Host disconnected")},hostExit(t,n){e.error(`Host exited with code ${t} and signal ${n}`),c=!1;const s=new Error("Native module host crashed");for(const e of Object.values(d))e.reject(s);d={};for(const e of Object.values(h))e(s);h={},0!==t&&this.autoRestartHost()},hostCallback(t){const{cmd:n,args:s}=t;m[n]?m[n](...s):e.error("No callback",n)},log(e,t,...n){if(!e)return;new r.Logger(e)[t](...n)},autoRestartHost(){setTimeout((()=>{try{this.startHost()}catch(t){e.error("Native module host failed to auto-restart",t)}}),a.Timeouts.NativeModuleHostRestartTime)},call(e,...t){return this.startHost().then((()=>this.callNoWait(e,...t)))},callNoWait:(e,...t)=>new Promise(((n,s)=>{u++,u===Number.MAX_SAFE_INTEGER&&(u=1),d[u]={cmd:e,resolve:n,reject:s},p.send("nativeModuleCall",{cmd:e,args:t,callId:u})})),startUsbListener(){this.call("startUsbListener"),this.usbListenerRunning=!0},stopUsbListener(){this.usbListenerRunning=!1,c&&this.call("stopUsbListener")},getYubiKeys(e){return this.call("getYubiKeys",e)},yubiKeyChallengeResponse(e,t,n,s){return h[u]=s,this.call("yubiKeyChallengeResponse",e,t,n,u)},yubiKeyCancelChallengeResponse(){c&&this.call("yubiKeyCancelChallengeResponse")},argon2(e,t,n){return this.call("argon2",e,t,n)},hardwareCryptoDeleteKey:async()=>{await p.invoke("hardwareCryptoDeleteKey")},hardwareEncrypt:async e=>{const{data:t,salt:n}=await p.invoke("hardwareEncrypt",e.dataAndSalt());return new s.ProtectedValue(t,n)},hardwareDecrypt:async(e,t)=>{const{data:n,salt:i}=await p.invoke("hardwareDecrypt",e.dataAndSalt(),t);return new s.ProtectedValue(n,i)},kbdGetActiveWindow(e){return this.call("kbdGetActiveWindow",e)},kbdGetActivePid(){return this.call("kbdGetActivePid")},kbdShowWindow(e){return this.call("kbdShowWindow",e)},kbdText(e){return this.call("kbdText",e)},kbdTextAsKeys(e,t){return this.call("kbdTextAsKeys",e,t)},kbdKeyPress(e,t){return this.call("kbdKeyPress",e,t)},kbdShortcut(e,t){return this.call("kbdShortcut",e,t)},kbdKeyMoveWithModifier(e,t){return this.call("kbdKeyMoveWithModifier",e,t)},kbdKeyPressWithCharacter(e,t,n){return this.call("kbdKeyPressWithCharacter",e,t,n)},kbdEnsureModifierNotPressed(){return this.call("kbdEnsureModifierNotPressed")}},n.g.NativeModules=l}},111:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsManager:()=>d});var s=n(7201),i=n(667),r=n(3297),o=n(8180),a=n(7614),l=n(2363),c=n(9491);const u=new l.Logger("settings-manager"),d={neutralLocale:null,activeLocale:"en-US",activeTheme:null,allLocales:{"en-US":"English","de-DE":"Deutsch","fr-FR":"Français"},allThemes:{dark:"setGenThemeDark",light:"setGenThemeLight",sd:"setGenThemeSd",sl:"setGenThemeSl",fb:"setGenThemeFb",bl:"setGenThemeBl",db:"setGenThemeDb",lb:"setGenThemeLb",te:"setGenThemeTe",lt:"setGenThemeLt",dc:"setGenThemeDc",hc:"setGenThemeHc"},autoSwitchedThemes:[{name:"setGenThemeDefault",dark:"dark",light:"light"},{name:"setGenThemeSol",dark:"sd",light:"sl"},{name:"setGenThemeBlue",dark:"fb",light:"bl"},{name:"setGenThemeBrown",dark:"db",light:"lb"},{name:"setGenThemeTerminal",dark:"te",light:"lt"},{name:"setGenThemeHighContrast",dark:"dc",light:"hc"}],customLocales:{},init(){s.Events.on("dark-mode-changed",(()=>this.darkModeChanged()))},setBySettings(){this.setTheme(a.AppSettingsModel.theme),this.setFontSize(a.AppSettingsModel.fontSize);const e=a.AppSettingsModel.locale;try{e?this.setLocale(a.AppSettingsModel.locale):this.setLocale(this.getBrowserLocale())}catch(e){}},getDefaultTheme:()=>"dark",setTheme(e){if(!e){if(this.activeTheme)return;e=this.getDefaultTheme()}for(const e of document.body.classList)/^th-/.test(e)&&document.body.classList.remove(e);a.AppSettingsModel.autoSwitchTheme&&(e=this.selectDarkOrLightTheme(e)),document.body.classList.add(this.getThemeClass(e));const t=document.head.querySelector("meta[name=theme-color]");t&&(t.content=window.getComputedStyle(document.body).backgroundColor),this.activeTheme=e,u.debug("Theme changed",e),s.Events.emit("theme-applied")},getThemeClass:e=>"th-"+e,selectDarkOrLightTheme(e){for(const t of this.autoSwitchedThemes)if(t.light===e||t.dark===e)return o.ThemeWatcher.dark?t.dark:t.light;return e},darkModeChanged(){if(a.AppSettingsModel.autoSwitchTheme)for(const e of this.autoSwitchedThemes)if(e.light===this.activeTheme||e.dark===this.activeTheme){const t=o.ThemeWatcher.dark?e.dark:e.light;u.debug("Setting theme triggered by system settings change",t),this.setTheme(t);break}},setFontSize(e){const t=i.Features.isMobile?14:12;document.documentElement.style.fontSize=t+2*(e||0)+"px"},setLocale(e){if(!e||e===this.activeLocale)return;let t;if("en-US"!==e&&(t=this.customLocales[e]?this.customLocales[e]:n(3267)("./"+e+".json")),this.neutralLocale||(this.neutralLocale=Object.assign({},r.Locale)),Object.assign(r.Locale,this.neutralLocale,t),this.activeLocale=e,s.Events.emit("set-locale",e),c.Launcher){const{ipcRenderer:t}=c.Launcher.electron(),n={};for(const[e,t]of Object.entries(r.Locale))e.startsWith("sysMenu")&&(n[e]=t);t.invoke("setLocale",Object.assign({locale:e},n))}},getBrowserLocale(){const e=navigator.languages&&navigator.languages[0]||navigator.language;return e&&e.startsWith("en")?"en-US":e}}},6524:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsStore:()=>o});var s=n(9491),i=n(2378);const r=new(n(2363).Logger)("settings"),o={load(e){let t;return t=s.Launcher?s.Launcher.loadConfig(e):Promise.resolve().then((()=>localStorage[i.StringFormat.camelCase(e)])),t.then((e=>e?JSON.parse(e):null)).catch((t=>{r.error(`Error loading ${e}`,t)}))},save:(e,t)=>s.Launcher?s.Launcher.saveConfig(e,JSON.stringify(t)).catch((t=>{r.error(`Error saving ${e}`,t)})):Promise.resolve().then((()=>{"undefined"!=typeof localStorage&&(localStorage[i.StringFormat.camelCase(e)]=JSON.stringify(t))}))}},4530:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Alerts:()=>r});var s=n(3297),i=n(5266);const r={alertDisplayed:!1,buttons:{ok:{result:"yes",get title(){return s.Locale.alertOk}},yes:{result:"yes",get title(){return s.Locale.alertYes}},allow:{result:"yes",get title(){return s.Locale.alertAllow}},no:{result:"",get title(){return s.Locale.alertNo}},cancel:{result:"",get title(){return s.Locale.alertCancel}},deny:{result:"",get title(){return s.Locale.alertDeny}}},alert(e){if(e.skipIfAlertDisplayed&&r.alertDisplayed)return null;r.alertDisplayed=!0;const t=new i.ModalView(e);return t.render(),t.once("result",((t,n)=>{t&&e.success&&e.success(t,n),!t&&e.cancel&&e.cancel(),e.complete&&e.complete(t,n)})),t.on("will-close",(()=>{r.alertDisplayed=!1})),t},notImplemented(){this.alert({header:s.Locale.notImplemented,body:"",icon:"exclamation-triangle",buttons:[this.buttons.ok],esc:"",click:"",enter:""})},info(e){this.alert(Object.assign({header:"",body:"",icon:"info",buttons:[this.buttons.ok],esc:"",click:"",enter:""},e))},error(e){this.alert(Object.assign({header:"",body:"",icon:"exclamation-circle",buttons:[this.buttons.ok],esc:"",click:"",enter:""},e))},yesno(e){this.alert(Object.assign({header:"",body:"",icon:"question",buttons:[this.buttons.yes,this.buttons.no],esc:"",click:"",enter:"yes"},e))}}},5754:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DropboxApps:()=>s,GDriveApps:()=>i,OneDriveApps:()=>r,MsTeamsApps:()=>o});const s={AppFolder:{id:"qp7ctun6qt5n9d6",secret:"07s5r4ck1uvlj6a"},FullDropbox:{id:"eor7hvv6u6oslq9",secret:"ez04o1iwf6yprq3"}},i={Local:{id:"783608538594-36tkdh8iscrq8t8dq87gghubnhivhjp5.apps.googleusercontent.com",secret:"yAtyfc9TIQ9GyQgQmo3i0HAP"},Production:{id:"847548101761-koqkji474gp3i2gn3k5omipbfju7pbt1.apps.googleusercontent.com",secret:"42HeSBybXDZjvweotq4o4CkJ"},Desktop:{id:"847548101761-h2pcl2p6m1tssnlqm0vrm33crlveccbr.apps.googleusercontent.com",secret:"nTSCiqXtUNmURIIdASaC1TJK"}},r={Local:{id:"b97c53d5-db5b-4124-aab9-d39195293815"},Production:{id:"bbc74d1b-3a9c-46e6-9da4-4c645e830923"},Desktop:{id:"bbc74d1b-3a9c-46e6-9da4-4c645e830923",secret:"aOMJaktJEAs_Tmh]fx4iQ[Zd3mp3KK7-"}},o={Local:{id:"8fbe2245-13d5-446f-bedc-74c3b2e1f635"},Production:{id:"8fbe2245-13d5-446f-bedc-74c3b2e1f635"},Desktop:{id:"8fbe2245-13d5-446f-bedc-74c3b2e1f635",secret:"F02~HYaWs-~7MndJcVRtv9~h-50Brk_9ho"}}},7017:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Colors:()=>s});const s={AllColors:["yellow","green","red","orange","blue","violet"],ColorsValues:{yellow:"ffff00",green:"00ff00",red:"ff0000",orange:"ff8800",blue:"0000ff",violet:"ff00ff"},BgColors:{yellow:"ffff88",green:"88ff88",red:"ff8888",orange:"ffcc88",blue:"8888ff",violet:"ff88ff"}}},4491:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DefaultAppSettings:()=>s});const s={theme:null,autoSwitchTheme:!1,locale:null,expandGroups:!0,listViewWidth:null,menuViewWidth:null,tagsViewHeight:null,autoUpdate:"install",clipboardSeconds:0,autoSave:!0,autoSaveInterval:0,rememberKeyFiles:"path",idleMinutes:15,minimizeOnClose:!1,minimizeOnFieldCopy:!1,tableView:!1,colorfulIcons:!1,useMarkdown:!0,directAutotype:!0,autoTypeTitleFilterEnabled:!0,titlebarStyle:"default",lockOnMinimize:!0,lockOnCopy:!1,lockOnAutoType:!1,lockOnOsLock:!1,helpTipCopyShown:!1,templateHelpShown:!1,skipOpenLocalWarn:!1,hideEmptyFields:!1,skipHttpsWarning:!1,demoOpened:!1,fontSize:0,tableViewColumns:null,generatorPresets:null,generatorHidePassword:!1,cacheConfigSettings:!1,allowIframes:!1,useGroupIconForEntries:!1,enableUsb:!0,fieldLabelDblClickAutoType:!1,auditPasswords:!0,auditPasswordEntropy:!0,excludePinsFromAudit:!0,checkPasswordsOnHIBP:!1,auditPasswordAge:0,deviceOwnerAuth:null,deviceOwnerAuthTimeoutMinutes:0,disableOfflineStorage:!1,shortLivedStorageToken:!1,extensionFocusIfLocked:!0,extensionFocusIfEmpty:!0,yubiKeyShowIcon:!0,yubiKeyAutoOpen:!1,yubiKeyMatchEntries:!0,yubiKeyShowChalResp:!0,yubiKeyRememberChalResp:!1,yubiKeyStuckWorkaround:!1,canOpen:!0,canOpenDemo:!0,canOpenSettings:!0,canCreate:!0,canImportXml:!0,canImportCsv:!0,canRemoveLatest:!0,canExportXml:!0,canExportHtml:!0,canSaveTo:!0,canOpenStorage:!0,canOpenGenerator:!0,canOpenOtpDevice:!0,dropbox:!0,dropboxFolder:null,dropboxAppKey:null,dropboxSecret:null,webdav:!0,webdavSaveMethod:"move",webdavStatReload:!1,gdrive:!0,gdriveClientId:null,gdriveClientSecret:null,onedrive:!0,onedriveClientId:null,onedriveClientSecret:null,onedriveTenantId:null,msteams:!1,msteamsClientId:null,msteamsClientSecret:null,msteamsTenantId:null}},9166:(e,t,n)=>{"use strict";n.r(t),n.d(t,{BuiltInFields:()=>s});const s=["Title","Password","UserName","URL","Notes","TOTP Seed","TOTP Settings","_etm_template_uuid"]},4596:(e,t,n)=>{"use strict";n.r(t),n.d(t,{YubiKeyVendorId:()=>s,YubiKeyProductIds:()=>i,YubiKeyChallengeSize:()=>r});const s=4176,i={Gen1:[16],NEO:[272,274,275,276,277,278],YK4:[1025,1026,1027,1028,1029,1030,1031]},r=64},353:(e,t,n)=>{"use strict";n.r(t),n.d(t,{IconMap:()=>s});const s=["key","globe","exclamation-triangle","server","thumbtack","comments","puzzle-piece","edit","plug","address-card","paperclip","camera","wifi","link","battery-three-quarters","barcode","certificate","bullseye","desktop","envelope","cog","clipboard","paper-plane","newspaper","bolt","inbox","save","hdd","dot-circle","user-lock","terminal","print","project-diagram","flag-checkered","wrench","laptop","archive","credit-card","windows","clock","search","flask","gamepad","trash","sticky-note","ban","question-circle","cube","folder-o","folder-open-o","database","unlock-alt","lock","check","pencil-alt","image","book","list-alt","user-secret","utensils","home","star","linux","map-pin","apple","wikipedia-w","dollar-sign","signature","mobile"]},7086:(e,t,n)=>{"use strict";n.r(t),n.d(t,{KeeWebLogo:()=>s});const s="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGN4PSI2NjMuMTMzIiBjeT0iMTM4LjYwMSIgcj0iODY0LjU2OCIgZng9IjY2My4xMzMiIGZ5PSIxMzguNjAxIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM5MmJmZjUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMzMDQxYzgiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48cGF0aCBkPSJNOTIzIDM1Ny42MjhjMC05Ljc4MiAwLTE5LjU2NC0uMDU2LTI5LjM0OC0uMDUtOC4yNC0uMTQ0LTE2LjQ4LS4zNjgtMjQuNzE2YTM1OC43MjQgMzU4LjcyNCAwIDAwLTQuNzM2LTUzLjgxMSAxODEuNDk3IDE4MS40OTcgMCAwMC0xNi44NTgtNTEuMTMzIDE3Mi4wNjYgMTcyLjA2NiAwIDAwLTc1LjIzNi03NS4yIDE4MS43MDIgMTgxLjcwMiAwIDAwLTUxLjE4OC0xNi44NiAzNTkuNjI2IDM1OS42MjYgMCAwMC01My44Mi00LjczYy04LjI0Mi0uMjMtMTYuNDg2LS4zMTgtMjQuNzM4LS4zNjgtOS43OC0uMDYyLTE5LjU2OC0uMDYyLTI5LjM1Ni0uMDYyTDU1MyAxMDFoLTg1bC0xMTEuNjM4LjRjLTkuOCAwLTE5LjYxNCAwLTI5LjQyLjA1NC04LjI2Mi4wNS0xNi41Mi4xNDQtMjQuNzc4LjM2OGEzNjAuODA4IDM2MC44MDggMCAwMC01My45NDggNC43NDIgMTgyLjI3MiAxODIuMjcyIDAgMDAtNTEuMjU4IDE2Ljg0OCAxNzIuMjMgMTcyLjIzIDAgMDAtNzUuMzg2IDc1LjE4OCAxODEuMjM4IDE4MS4yMzggMCAwMC0xNi45IDUxLjE2IDM1OC4zMTIgMzU4LjMxMiAwIDAwLTQuNzQyIDUzLjhjLS4yMjIgOC4yNC0uMzE4IDE2LjQ4LS4zNjggMjQuNzItLjA2IDkuNzg0LS41NjIgMjEuOTM2LS41NjIgMzEuNzJ2MTk2bC41MDggMTEyLjQyOGMwIDkuOCAwIDE5LjYuMDU0IDI5LjM4OC4wNSA4LjI1Mi4xNDYgMTYuNTAyLjM2OCAyNC43NWEzNTkuMDQ2IDM1OS4wNDYgMCAwMDQuNzQ2IDUzLjg4NSAxODEuNjY4IDE4MS42NjggMCAwMDE2Ljg5IDUxLjIwMSAxNzIuMzU2IDE3Mi4zNTYgMCAwMDc1LjM4MiA3NS4zMDIgMTgyLjEwNSAxODIuMTA1IDAgMDA1MS4yODggMTYuODggMzYwLjIwNyAzNjAuMjA3IDAgMDA1My45MjQgNC43MzZjOC4yNTguMjI0IDE2LjUxOC4zMTggMjQuNzguMzY4IDkuOC4wNiAxOS42MTIuMDU2IDI5LjQyLjA1NmgzMTAuMjg0YzkuNzg4IDAgMTkuNTc2IDAgMjkuMzY0LS4wNTQgOC4yNDQtLjA1IDE2LjQ4OC0uMTQ0IDI0LjczLS4zNjhhMzU5LjEgMzU5LjEgMCAwMDUzLjg0LTQuNzQgMTgxLjUxOCAxODEuNTE4IDAgMDA1MS4xNi0xNi44NzIgMTcyLjE5NSAxNzIuMTk1IDAgMDA3NS4yNC03NS4yOTggMTgxLjk1IDE4MS45NSAwIDAwMTYuODY2LTUxLjIzIDM1OS44MTUgMzU5LjgxNSAwIDAwNC43MzItNTMuODY0Yy4yMjQtOC4yNS4zMTgtMTYuNS4zNjgtMjQuNzUuMDYtOS44LjA1Ni0xOS42LjA1Ni0yOS4zODh2LTMxMC44IiBmaWxsPSJ1cmwoI2EpIi8+PHBhdGggZD0iTTk5IDEwMWg4MjR2ODI0SDk5eiIgZmlsbD0ibm9uZSIvPjxnIGZpbGw9IiNmZmYiPjxwYXRoIGQ9Ik0zNzkuMTk2IDgxMy4yNzNjLTUuOTM5LS4wMS0xMi41My0yLjUwMi0xOS4zMjYtNi4wNjctMTQuNDk3LTcuNjA1LTI0LjQzOS0xNy4yMi0xNi4xMzktMzMuMDQyTDU0NS4zOCAzODkuNzYxYTE1MTguMzEgMTUxOC4zMSAwIDAxLTUuNzU4LTIuOTk4Yy03Mi43MDktMzguMTQyLTEwNC45NjctOTQuNTM1LTc4Ljg1Mi0xNDQuMzE4IDMwLjAxOC01Ny4yMjMgMTIyLjk4NC02Ny42MDggMjA3LjY0Ny0yMy4xOTYgODQuNjYzIDQ0LjQxMyAxMjguOTYxIDEyNi44MDUgOTguOTQzIDE4NC4wMjgtMjUuODE1IDQ5LjIxMS05My4yMTcgNTMuNTk5LTE2MC45OSAxOC4wNDctMS44NjctLjk4LTQuODk2LTIuNTUzLTguMzI0LTQuMzNMMzk2LjIzMSA4MDEuNzA1Yy00LjQwOSA4LjQwNS0xMC4zMDQgMTEuNTc5LTE3LjAzNSAxMS41Njh6bS0zNy4xMjctODIuMzUybC0zLjgxNi0yLjAwMi0uODUtLjQ0NS01MS42NTItMjcuMDk2di0uMDAybC0xMi40NTEtNi41MzFhNC4zMSA0LjMxIDAgMDEtMS44MTUtNS44MmwxNi4zNDYtMzEuMTZhNC4zMTIgNC4zMTIgMCAwMTUuNzg5LTEuODMybC4wMzMuMDE1IDI0LjkwMyAxMy4wNjVhNC4zMTEgNC4zMTEgMCAwMDUuODItMS44MTdsMTYuMzQ4LTMxLjE2YTQuMzEgNC4zMSAwIDAwLTEuODE3LTUuODJsLTEyLjQ1MS02LjUzMy0xMi40NTEtNi41MzJhNC4zMSA0LjMxIDAgMDEtMS44MTUtNS44MmwxNi4zNDYtMzEuMTYyYTQuMzEgNC4zMSAwIDAxNS44Mi0xLjgxNGwxMi40NTMgNi41MzEgMzIuNDExIDE3LjAwMiAyMC4wODkgMTAuNTM5LjAyNi4wMTQgMy43OTMgMS45OS0xNy4xNjggMzIuNzI2LTEuMTgyIDIuMjUyYS4wMDguMDA4IDAgMDEtLjAwMi4wMDRsLTI0LjM1NyA0Ni40My0yLjQ3NyA0LjcyMS0xMy44NjkgMjYuNDM5LS4wMS4wMTgtMS45OTQgMy44ek00MjMuNjkgNTc1LjMzbC0zLjgxOC0yLjAwNC0xOC4xMzUtOS41MTQtMTQuMzE4LTcuNTEyYTQuMzEgNC4zMSAwIDAxLTEuODE3LTUuODJsMTYuMzQ4LTMxLjE2YTQuMzExIDQuMzExIDAgMDE1LjgyLTEuODE3bDE0LjMxOSA3LjUxMiAxOC4xMzYgOS41MTQuMDI2LjAxMyAzLjc5MyAxLjk5MS0yLjAwNCAzLjgxOC04LjE3MiAxNS41OC04LjE3NCAxNS41OC0uMDEuMDE2LTEuOTk0IDMuODAzem0yNjYuODEzLTE4NC40MjZjMTAuNzUzLjAyIDE5LjE2My00LjMxMiAyNC43NS0xNC45NjMgMTcuMDI4LTMyLjQ2LTE0LjQ3Mi04Mi41MzgtNzAuMzU2LTExMS44NTQtNTUuODg0LTI5LjMxNi0xMTQuOTkxLTI2Ljc2OC0xMzIuMDE5IDUuNjkyLTE3LjAyOCAzMi40NTkgMzAuMzM0IDUzLjc3MiA4Ni4yMTkgODMuMDg4IDM3LjU0NyAxOS42OTYgNjkuMzg4IDM3Ljk5NCA5MS40MDYgMzguMDM3eiIvPjxwYXRoIGQ9Ik00MjMuNjkxIDU3NS4zMjlsMTkuMDkxIDEwLjAxNSAyMC4zNTMtMzguNzk3LTE5LjA5MS0xMC4wMTV6TTM0Mi4wNyA3MzAuOTIybDE5LjA5MSAxMC4wMTUgNjEuMDU3LTExNi4zOTItMTkuMDkxLTEwLjAxNXoiIGZpbGwtb3BhY2l0eT0iLjIiLz48L2c+PC9zdmc+"},2977:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Keys:()=>s});const s={DOM_VK_CANCEL:3,DOM_VK_HELP:6,DOM_VK_BACK_SPACE:8,DOM_VK_TAB:9,DOM_VK_CLEAR:12,DOM_VK_RETURN:13,DOM_VK_ENTER:14,DOM_VK_SHIFT:16,DOM_VK_CONTROL:17,DOM_VK_ALT:18,DOM_VK_PAUSE:19,DOM_VK_CAPS_LOCK:20,DOM_VK_ESCAPE:27,DOM_VK_SPACE:32,DOM_VK_PAGE_UP:33,DOM_VK_PAGE_DOWN:34,DOM_VK_END:35,DOM_VK_HOME:36,DOM_VK_LEFT:37,DOM_VK_UP:38,DOM_VK_RIGHT:39,DOM_VK_DOWN:40,DOM_VK_PRINTSCREEN:44,DOM_VK_INSERT:45,DOM_VK_DELETE:46,DOM_VK_0:48,DOM_VK_1:49,DOM_VK_2:50,DOM_VK_3:51,DOM_VK_4:52,DOM_VK_5:53,DOM_VK_6:54,DOM_VK_7:55,DOM_VK_8:56,DOM_VK_9:57,DOM_VK_SEMICOLON:59,DOM_VK_EQUALS:61,DOM_VK_A:65,DOM_VK_B:66,DOM_VK_C:67,DOM_VK_D:68,DOM_VK_E:69,DOM_VK_F:70,DOM_VK_G:71,DOM_VK_H:72,DOM_VK_I:73,DOM_VK_J:74,DOM_VK_K:75,DOM_VK_L:76,DOM_VK_M:77,DOM_VK_N:78,DOM_VK_O:79,DOM_VK_P:80,DOM_VK_Q:81,DOM_VK_R:82,DOM_VK_S:83,DOM_VK_T:84,DOM_VK_U:85,DOM_VK_V:86,DOM_VK_W:87,DOM_VK_X:88,DOM_VK_Y:89,DOM_VK_Z:90,DOM_VK_CONTEXT_MENU:93,DOM_VK_NUMPAD0:96,DOM_VK_NUMPAD1:97,DOM_VK_NUMPAD2:98,DOM_VK_NUMPAD3:99,DOM_VK_NUMPAD4:100,DOM_VK_NUMPAD5:101,DOM_VK_NUMPAD6:102,DOM_VK_NUMPAD7:103,DOM_VK_NUMPAD8:104,DOM_VK_NUMPAD9:105,DOM_VK_MULTIPLY:106,DOM_VK_ADD:107,DOM_VK_SEPARATOR:108,DOM_VK_SUBTRACT:109,DOM_VK_DECIMAL:110,DOM_VK_DIVIDE:111,DOM_VK_F1:112,DOM_VK_F2:113,DOM_VK_F3:114,DOM_VK_F4:115,DOM_VK_F5:116,DOM_VK_F6:117,DOM_VK_F7:118,DOM_VK_F8:119,DOM_VK_F9:120,DOM_VK_F10:121,DOM_VK_F11:122,DOM_VK_F12:123,DOM_VK_F13:124,DOM_VK_F14:125,DOM_VK_F15:126,DOM_VK_F16:127,DOM_VK_F17:128,DOM_VK_F18:129,DOM_VK_F19:130,DOM_VK_F20:131,DOM_VK_F21:132,DOM_VK_F22:133,DOM_VK_F23:134,DOM_VK_F24:135,DOM_VK_NUM_LOCK:144,DOM_VK_SCROLL_LOCK:145,DOM_VK_COMMA:188,DOM_VK_PERIOD:190,DOM_VK_SLASH:191,DOM_VK_BACK_QUOTE:192,DOM_VK_OPEN_BRACKET:219,DOM_VK_BACK_SLASH:220,DOM_VK_CLOSE_BRACKET:221,DOM_VK_QUOTE:222,DOM_VK_META:224}},3942:(e,t,n)=>{"use strict";n.r(t),n.d(t,{KnownAppVersions:()=>s});const s={KeePassXC:"2.6.4"}},9673:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Links:()=>s});const s={Homepage:"https://keeweb.info",Repo:"https://github.com/keeweb/keeweb",Desktop:"https://github.com/keeweb/keeweb/releases/latest",WebApp:"https://app.keeweb.info",BetaWebApp:"https://beta.keeweb.info",License:"https://github.com/keeweb/keeweb/blob/master/LICENSE",LicenseApache:"https://opensource.org/licenses/Apache-2.0",LicenseLinkCCBY40:"https://creativecommons.org/licenses/by/4.0/",UpdateBasePath:"https://github.com/keeweb/keeweb/releases/download/v{ver}/",ReleaseNotes:"https://github.com/keeweb/keeweb/blob/master/release-notes.md#release-notes",SelfHostedDropbox:"https://github.com/keeweb/keeweb#self-hosting",UpdateJson:"https://app.keeweb.info/update.json",AutoType:"https://github.com/keeweb/keeweb/wiki/Auto-Type",AutoTypeMacOS:"https://github.com/keeweb/keeweb/wiki/Auto-Type#macos",Translation:"https://keeweb.oneskyapp.com/",Donation:"https://opencollective.com/keeweb#support",Plugins:"https://plugins.keeweb.info",PluginDevelopStart:"https://github.com/keeweb/keeweb/wiki/Plugins",YubiKeyManual:"https://github.com/keeweb/keeweb/wiki/YubiKey",YubiKeyManagerInstall:"https://github.com/Yubico/yubikey-manager#installation",HaveIBeenPwned:"https://haveibeenpwned.com",HaveIBeenPwnedPrivacy:"https://haveibeenpwned.com/Passwords",ExtensionHelpForOtherBrowsers:"https://github.com/keeweb/keeweb/wiki/Browser-AutoFill#other-browsers",ExtensionHelpForKPXC:"https://github.com/keeweb/keeweb/wiki/Browser-AutoFill#keepassxc-browser",KWCForChrome:"https://chrome.google.com/webstore/detail/keeweb-connect/pikpfmjfkekaeinceagbebpfkmkdlcjk",KWCForFirefox:"https://addons.mozilla.org/firefox/addon/keeweb-connect/",KWCForEdge:"https://microsoftedge.microsoft.com/addons/detail/keewebconnect/nmggpehkjmeaeocmaijenpejbepckinm",KWCForSafari:"https://apps.apple.com/app/keeweb-connect/id1565748094"}},403:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Timeouts:()=>s});const s={CopyTip:1500,AutoHideHint:3e3,FileChangeSync:3e3,BeforeAutoLock:300,CheckWindowClosed:300,OtpFadeDuration:1e4,AutoTypeAfterHide:100,AutoTypeWindowFocusAfterBlur:500,DropDownClickWait:500,RedrawInactiveWindow:50,PopupWaitTime:1e3,AutoUpdatePluginsAfterStart:500,LinkDownloadRevoke:6e5,DefaultHttpRequest:6e4,ExternalDeviceReconnect:3e3,ExternalDeviceAfterReconnect:1e3,FieldLabelDoubleClick:300,NativeModuleHostRestartTime:3e3,FastAnimation:100,AutoTypeCopyPaste:300,KeeWebConnectRequest:6e4}},9071:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Collection:()=>c});var s=n(7187),i=n.n(s);const r=Symbol("events"),o=Symbol("array");function a(e,t){const n=e.constructor.model;if(!n)throw new Error(`Model type not defined for ${e.constructor.name}`);if(!(t instanceof n)){const n=t&&t.constructor?t.constructor.name:typeof t;throw new Error(`Attempt to write ${n} into ${e.constructor.name}`)}}const l={set(e,t,n){const s=parseInt(t);if(isNaN(s))return e[t]=n,!0;a(e,n);const i=e[o],l=i[t];return l!==n&&(i[t]=n,function(e,t,n){const s=e[r];if(!s.paused){const i={added:[],removed:[]};n&&(s.emit("remove",n,e),i.removed.push(n)),t&&(s.emit("add",t,e),i.added.push(t)),s.emit("change",i,e)}}(e,n,l)),!0},get(e,t){if("string"!=typeof t)return e[t];const n=parseInt(t);return isNaN(n)?e[t]:e[o][t]}};class c{constructor(e){const t=new(i());t.setMaxListeners(100);const n={[r]:{value:t},[o]:{value:[]}};return Object.defineProperties(this,n),e&&this.push(...e),new Proxy(this,l)}get length(){return this[o].length}set length(e){const t=this[o];let n;e<t.length&&(n=t.slice(e)),t.length=e,n&&function(e,t){const n=e[r];if(!n.paused){for(const s of t)n.emit("remove",s,e);n.emit("change",{added:[],removed:t},e)}}(this,n)}push(...e){if(e.length){for(const t of e)a(this,t);this[r].paused=!0,this[o].push(...e),this[r].paused=!1;for(const t of e)this[r].emit("add",t,this);this[r].emit("change",{added:e,removed:[]},this)}}pop(){this[r].paused=!0;const e=this[o].pop();return this[r].paused=!1,e&&(this[r].emit("remove",e,this),this[r].emit("change",{added:[],removed:[e]},this)),e}shift(){this[r].paused=!0;const e=this[o].shift();return this[r].paused=!1,e&&(this[r].emit("remove",e,this),this[r].emit("change",{added:[],removed:[e]},this)),e}unshift(...e){if(e.length){for(const t of e)a(this,t);this[r].paused=!0,this[o].unshift(...e),this[r].paused=!1;for(const t of e)this[r].emit("add",t,this);this[r].emit("change",{added:e,removed:[]},this)}}splice(e,t,...n){for(const e of n)a(this,e);this[r].paused=!0;const s=this[o].splice(e,t,...n);this[r].paused=!1;for(const e of s)this[r].emit("remove",e,this);for(const e of n)this[r].emit("add",e,this);(s.length||n.length)&&this[r].emit("change",{added:n,removed:s},this)}on(e,t){this[r].on(e,t)}once(e,t){this[r].once(e,t)}off(e,t){this[r].off(e,t)}get(e){return this.find((t=>t.id===e))}remove(e){for(let t=0;t<this.length;t++)for(;t<this.length&&(this[t].id===e||this[t]===e);)this.splice(t,1)}sort(){return this[o].sort(this.comparator)}fill(){throw new Error("Not implemented")}copyWithin(){throw new Error("Not implemented")}toJSON(){return this[o].concat()}}const u=[Symbol.iterator,"concat","entries","every","filter","find","findIndex","flat","flatMap","forEach","includes","indexOf","join","keys","lastIndexOf","map","reduce","reduceRight","reverse","slice","some","values"];for(const e of u)Object.defineProperty(c.prototype,e,{value:function(...t){return this[o][e](...t)}})},7201:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Events:()=>o});var s=n(7187),i=n.n(s);class r extends(i()){constructor(){super(),this.setMaxListeners(1e3)}}const o=new r},9186:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Model:()=>d});var s=n(7187),i=n.n(s),r=n(2363);const o=Symbol("events"),a=Symbol("defaults"),l=Symbol("extensions");function c(e,t,n,s){const i=e[o];i.paused||(i.emit("change:"+t,e,n,s),i.noChange||i.emit("change",e,{[t]:n}))}const u={deleteProperty(e,t){if(Object.prototype.hasOwnProperty.call(e,t)){const n=e[a],s=n[t],i=e[t];return i!==s&&(Object.prototype.hasOwnProperty.call(n,t)?e[t]=s:delete e[t],c(e,t,s,i)),!0}return!0},set(e,t,n,s){if(Object.prototype.hasOwnProperty.call(e,t)||e[l]){if(e[t]!==n){const s=e[t];e[t]=n,c(e,t,n,s)}return!0}return new r.Logger(s.constructor.name).warn(`Unknown property: ${t}`,(new Error).stack),!1}};class d{constructor(e){const t=new(i());t.setMaxListeners(100);const n={[o]:{value:t}};for(const[e,t]of Object.entries(this[a]))n[e]={configurable:!0,enumerable:!0,writable:!0,value:t};Object.defineProperties(this,n);const s=new Proxy(this,u);return e&&s.set(e,{silent:!0}),s}set(e,{silent:t}={}){const n=this[o];t&&(n.paused=!0),n.noChange=!0;for(const[t,n]of Object.entries(e))this[t]=n;n.noChange=!1,t?n.paused=!1:n.emit("change",this,e)}on(e,t){this[o].on(e,t)}once(e,t){this[o].once(e,t)}off(e,t){this[o].off(e,t)}emit(e,...t){this[o].emit(e,...t)}static defineModelProperties(e,t){this.prototype[a]=Object.assign({},this.prototype[a],e),t&&t.extensions&&(this.prototype[l]=!0)}static set(e){this.prototype[a]=e}}},4796:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Copyable:()=>l});var s=n(7201),i=n(7614),r=n(3297),o=n(3710),a=n(403);const l={hideFieldCopyTip(){this.fieldCopyTip&&(this.fieldCopyTip.hide(),this.fieldCopyTip=null)},fieldCopied(e){this.hideFieldCopyTip();const t=e.source.labelEl,n=e.copyRes.seconds,l=n?r.Locale.detFieldCopiedTime.replace("{}",n):r.Locale.detFieldCopied;let c;this.isHidden()||(c=o.Tip.createTip(t[0],{title:l,placement:"right",fast:!0,force:!0,noInit:!0}),this.fieldCopyTip=c,c.show()),setTimeout((()=>{c&&c.hide(),this.fieldCopyTip=null,"$Password"===e.source.model.name&&i.AppSettingsModel.lockOnCopy&&setTimeout((()=>{s.Events.emit("lock-workspace")}),a.Timeouts.BeforeAutoLock)}),a.Timeouts.CopyTip)}}},8892:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Resizable:()=>i});var s=n(7201);const i={listenDrag(e){this.listenTo(e,"dragstart",this.dragStart),this.listenTo(e,"drag",this.drag),this.listenTo(e,"autosize",this.autoSize)},dragStart(e){this._dragInfo=this.getDragInfo(e.coord)},drag(e){const t=this._dragInfo;let n=t.startSize+e.offset;n=Math.max(t.min,Math.min(t.max,n)),this.$el[t.prop](n),this.emit("view-resize",n),s.Events.emit("page-geometry",{source:"resizable"})},autoSize(e){const t=this.getDragInfo(e.coord);void 0!==t.auto?this.$el.css(t.prop,t.auto):this.$el.css(t.prop,""),this.fixSize(t),this.emit("view-resize",null),s.Events.emit("page-geometry",{source:"resizable"})},fixSize(e){const t=this.$el[e.prop]();Math.max(e.min,Math.min(e.max,t))!==t&&this.$el[e.prop](t)},getDragInfo(e){const t="x"===e?"Width":"Height",n=t.toLowerCase(),s=this.getSizeProp("min"+t),i=this.getSizeProp("max"+t),r=this.getSizeProp("auto"+t);return{startSize:this.$el[n](),prop:n,min:s,max:i,auto:r}},getSizeProp(e){const t=this[e];return"function"==typeof t?t.call(this):t}}},7015:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Scrollable:()=>a}),function(e){function t(s){if(n[s])return n[s].exports;var i=n[s]={i:s,l:!1,exports:{}};return e[s].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,s){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:s})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=3)}([function(e,t,n){function s(e,t){for(var n in e)e.hasOwnProperty(n)&&t(n,e[n])}var i=!1;try{var r=Object.defineProperty({},"passive",{get:function(){i=!0}});window.addEventListener("test",null,r)}catch(e){}e.exports.event=function(e,t,n,s){var r="on"==s?"add":"remove";t.split(" ").forEach((function(t){var s=!1;-1!=["scroll","touchstart","touchmove"].indexOf(t)&&i&&(s={passive:!0}),e[r+"EventListener"](t,n,s)}))},e.exports.css=function(e,t,n){var i;if(void 0===n){if("string"==typeof t)return e.style[t];i=t}else(i={})[t]=n;s(i,(function(t,n){e.style[t]=n}))},e.exports.add=function(e,t){t&&e.classList.add(t)},e.exports.rm=function(e,t){t&&e.classList.remove(t)},e.exports.has=function(e,t){return!!t&&e.classList.contains(t)},e.exports.clone=function(e){var t={};return s(e||{},(function(e,n){t[e]=n})),t},e.exports.qs=function(e,t){return e instanceof HTMLElement?e:(t||document).querySelector(e)},e.exports.each=s},function(e,t,n){function s(e){var t,n,s=e&&e[0]||e,i="string"==typeof e||s instanceof HTMLElement?{root:e}:f(e),r={direction:"v",barOnCls:"_scrollbar",resizeDebounce:0,event:d,cssGuru:!1,impact:"scroller",position:"static"};for(var l in i=i||{},r)null==i[l]&&(i[l]=r[l]);t=this&&this instanceof u.jQuery,i._chain?n=i.root:t?i.root=n=this[0]:n=A(i.root||i.scroller);var c=o(n,i.direction),h=+c;if(i.index=h,h==h&&null!==c&&b[h])return b[h];i.root&&i.scroller?i.scroller=A(i.scroller,n):i.scroller=n,i.root=n;var p=a(i);return p.autoUpdate&&p.autoUpdate(),p}function i(){return(new Date).getTime()}function r(e,t,n){e._eventHandlers=e._eventHandlers||[{element:e.scroller,handler:function(t){e.scroll(t)},type:"scroll"},{element:e.root,handler:function(){e.update()},type:"transitionend animationend"},{element:e.scroller,handler:function(){e.update()},type:"keyup"},{element:e.bar,handler:function(t){t.preventDefault(),e.selection(),e.drag.now=1,e.draggingCls&&p(e.root,e.draggingCls)},type:"touchstart mousedown"},{element:document,handler:function(){e.selection(1),e.drag.now=0,e.draggingCls&&g(e.root,e.draggingCls)},type:"mouseup blur touchend"},{element:document,handler:function(t){2!=t.button&&e._pos0(t)},type:"touchstart mousedown"},{element:document,handler:function(t){e.drag.now&&e.drag(t)},type:"mousemove touchmove"},{element:u,handler:function(){e.update()},type:"resize"},{element:e.root,handler:function(){e.update()},type:"sizeChange"},{element:e.clipper,handler:function(){e.clipperOnScroll()},type:"scroll"}],function(e,t){var n=0,s=e;for(void 0!==s.length&&s!==u||(s=[s]);s[n];)t.call(this,s[n],n),n++}(e._eventHandlers,(function(e){if(e.element)if(e.element.length&&e.element!==u)for(var s=0;s<e.element.length;s++)t(e.element[s],e.type,e.handler,n);else t(e.element,e.type,e.handler,n)}))}function o(e,t,n,s){var i="data-baron-"+t+"-id";return"on"==n?e.setAttribute(i,s):"off"==n&&e.removeAttribute(i),e.getAttribute(i)}function a(e){var t=new s.prototype.constructor(e);return r(t,e.event,"on"),o(t.root,e.direction,"on",b.length),b.push(t),t.update(),t}function l(e){if(this.events&&this.events[e])for(var t=0;t<this.events[e].length;t++){var n=Array.prototype.slice.call(arguments,1);this.events[e][t].apply(this,n)}}var c=function(){return this||(0,eval)("this")}(),u=c&&c.window||c,d=n(0).event,h=n(0).css,p=n(0).add,m=n(0).has,g=n(0).rm,f=n(0).clone,A=n(0).qs,y=s,v=["left","top","right","bottom","width","height"],b=[],w={v:{x:"Y",pos:v[1],oppos:v[3],crossPos:v[0],crossOpPos:v[2],size:v[5],crossSize:v[4],crossMinSize:"min-"+v[4],crossMaxSize:"max-"+v[4],client:"clientHeight",crossClient:"clientWidth",scrollEdge:"scrollLeft",offset:"offsetHeight",crossOffset:"offsetWidth",offsetPos:"offsetTop",scroll:"scrollTop",scrollSize:"scrollHeight"},h:{x:"X",pos:v[0],oppos:v[2],crossPos:v[1],crossOpPos:v[3],size:v[4],crossSize:v[5],crossMinSize:"min-"+v[5],crossMaxSize:"max-"+v[5],client:"clientWidth",crossClient:"clientHeight",scrollEdge:"scrollTop",offset:"offsetWidth",crossOffset:"offsetHeight",offsetPos:"offsetLeft",scroll:"scrollLeft",scrollSize:"scrollWidth"}},k=/[\s\S]*Macintosh[\s\S]*\) Gecko[\s\S]*/.test(u.navigator&&u.navigator.userAgent);s.prototype={_debounce:function(e,t){var n,s,r=this,o=function(){if(r._disposed)return clearTimeout(n),void(n=r=null);var a=i()-s;a<t&&a>=0?n=setTimeout(o,t-a):(n=null,e())};return function(){s=i(),n||(n=setTimeout(o,t))}},constructor:function(e){function t(e){var t=this.barMinSize||20,n=e;n>0&&n<t&&(n=t),this.bar&&h(this.bar,this.origin.size,parseInt(n,10)+"px")}function n(e){if(this.bar){var t=h(this.bar,this.origin.pos),n=+e+"px";n&&n!=t&&h(this.bar,this.origin.pos,n)}}function s(){return f[this.origin.client]-this.barTopLimit-this.bar[this.origin.offset]}function r(e){return e*s.call(this)+this.barTopLimit}function o(e){return(e-this.barTopLimit)/s.call(this)}function a(){return!1}var c,d,f,y,v,b,C;if(b=i(),this.params=e,this.event=e.event,this.events={},this.root=e.root,this.scroller=A(e.scroller),this.bar=A(e.bar,this.root),f=this.track=A(e.track,this.root),!this.track&&this.bar&&(f=this.bar.parentNode),this.clipper=this.scroller.parentNode,this.direction=e.direction,this.rtl=e.rtl,this.origin=w[this.direction],this.barOnCls=e.barOnCls,this.scrollingCls=e.scrollingCls,this.draggingCls=e.draggingCls,this.impact=e.impact,this.position=e.position,this.rtl=e.rtl,this.barTopLimit=0,this.resizeDebounce=e.resizeDebounce,this.cursor=function(e){return e["client"+this.origin.x]||(((e.originalEvent||e).touches||{})[0]||{})["page"+this.origin.x]},this.pos=function(e){var t="page"+this.origin.x+"Offset",n=this.scroller[t]?t:this.origin.scroll;return void 0!==e&&(this.scroller[n]=e),this.scroller[n]},this.rpos=function(e){var t=this.scroller[this.origin.scrollSize]-this.scroller[this.origin.client];return(e?this.pos(e*t):this.pos())/(t||1)},this.barOn=function(e){if(this.barOnCls){var t=this.scroller[this.origin.client]>=this.scroller[this.origin.scrollSize];e||t?m(this.root,this.barOnCls)&&g(this.root,this.barOnCls):m(this.root,this.barOnCls)||p(this.root,this.barOnCls)}},this._pos0=function(e){d=this.cursor(e)-c},this.drag=function(e){var t=o.call(this,this.cursor(e)-d),n=this.scroller[this.origin.scrollSize]-this.scroller[this.origin.client];this.scroller[this.origin.scroll]=t*n},this.selection=function(e){this.event(document,"selectpos selectstart",a,e?"off":"on")},this.resize=function(){function e(){var e,n=t.scroller[t.origin.crossOffset],s=t.scroller[t.origin.crossClient],r=0;if(k?r=15:s>0&&0===n&&(n=s+17),n)if(t.barOn(),"scroller"==t.impact){var o=n-s+r;if("static"==t.position)h(t.scroller,t.origin.crossSize)!=(e=t.clipper[t.origin.crossClient]+o+"px")&&t._setCrossSizes(t.scroller,e);else{var a={},c=t.rtl?"Left":"Right";"h"==t.direction&&(c="Bottom"),a["padding"+c]=o+"px",h(t.scroller,a)}}else h(t.clipper,t.origin.crossSize)!=(e=s+"px")&&t._setCrossSizes(t.clipper,e);Array.prototype.unshift.call(arguments,"resize"),l.apply(t,arguments),b=i()}var t=this,n=void 0===t.resizeDebounce?300:t.resizeDebounce,s=0;i()-b<n&&(clearTimeout(y),s=n),s?y=setTimeout(e,s):e()},this.updatePositions=function(e){var s,i=this;i.bar&&(s=(f[i.origin.client]-i.barTopLimit)*i.scroller[i.origin.client]/i.scroller[i.origin.scrollSize],(e||parseInt(C,10)!=parseInt(s,10))&&(t.call(i,s),C=s),c=r.call(i,i.rpos()),n.call(i,c)),Array.prototype.unshift.call(arguments,"scroll"),l.apply(i,arguments)},this.scroll=function(){var e=this;e.updatePositions(),e.scrollingCls&&(v||p(e.root,e.scrollingCls),clearTimeout(v),v=setTimeout((function(){g(e.root,e.scrollingCls),v=void 0}),300))},this.clipperOnScroll=function(){this.rtl?this.clipper[this.origin.scrollEdge]=this.clipper[this.origin.scrollSize]:this.clipper[this.origin.scrollEdge]=0},this._setCrossSizes=function(e,t){var n={};n[this.origin.crossSize]=t,n[this.origin.crossMinSize]=t,n[this.origin.crossMaxSize]=t,h(e,n)},this._dumbCss=function(t){if(!e.cssGuru){var n=t?"hidden":null,s=t?"none":null;h(this.clipper,{overflow:n,msOverflowStyle:s,position:"static"==this.position?"":"relative"});var i=t?"scroll":null,r={};r["overflow-"+("v"==this.direction?"y":"x")]=i,r["box-sizing"]="border-box",r.margin="0",r.border="0","absolute"==this.position&&(r.position="absolute",r.top="0","h"==this.direction?r.left=r.right="0":(r.bottom="0",r.right=this.rtl?"0":"",r.left=this.rtl?"":"0")),h(this.scroller,r)}},this._dumbCss(!0),k){var _="paddingRight",E={},x=u.getComputedStyle(this.scroller)[[_]];"h"==e.direction?_="paddingBottom":e.rtl&&(_="paddingLeft");var I=parseInt(x,10);I!=I&&(I=0),E[_]=15+I+"px",h(this.scroller,E)}return this},update:function(e){return l.call(this,"upd",e),this.resize(1),this.updatePositions(1),this},dispose:function(){r(this,this.event,"off"),o(this.root,this.params.direction,"off"),"v"==this.params.direction?this._setCrossSizes(this.scroller,""):this._setCrossSizes(this.clipper,""),this._dumbCss(!1),this.barOn(!0),l.call(this,"dispose"),b[this.params.index]=null,this.params=null,this._disposed=!0},on:function(e,t,n){for(var s=e.split(" "),i=0;i<s.length;i++)"init"==s[i]?t.call(this,n):(this.events[s[i]]=this.events[s[i]]||[],this.events[s[i]].push((function(e){t.call(this,e||n)})))},baron:function(e){return e.root=this.params.root,e.scroller=this.params.scroller,e.direction="v"==this.params.direction?"h":"v",e._chain=!0,s(e)}},s.prototype.constructor.prototype=s.prototype,s.noConflict=function(){return u.baron=y,s},s.version="3.0.1",s.prototype.autoUpdate=n(2)(u),s.prototype.fix=n(5),s.prototype.controls=n(4),e.exports=s},function(e,t,n){function s(e){function t(){i.root[i.origin.offset]?n():s||(s=setInterval((function(){i.root[i.origin.offset]&&(n(),i.update())}),300))}function n(){clearInterval(s),s=null}var s,i=this;if(!this._au){var r=i._debounce((function(){i.update()}),300);this._observer=new e((function(){t(),i.update(),r()})),this.on("init",(function(){i._observer.observe(i.root,{childList:!0,subtree:!0,characterData:!0}),t()})),this.on("dispose",(function(){i._observer.disconnect(),n(),delete i._observer})),this._au=!0}}e.exports=function(e){var t=e.MutationObserver||e.WebKitMutationObserver||e.MozMutationObserver||null;return function(){return t?(s.call(this,t),this):this}}},function(e,t,n){var s=n(1);window.baron=s,window.jQuery&&window.jQuery.fn&&(window.jQuery.fn.baron=s)},function(e,t,n){var s=n(0).qs;e.exports=function(e){var t,n,i,r=this;n=e.screen||.9,e.forward&&(i={element:s(e.forward,this.clipper),handler:function(){var t=r.pos()+(e.delta||30);r.pos(t)},type:"click"},this._eventHandlers.push(i),this.event(i.element,i.type,i.handler,"on")),e.backward&&(i={element:s(e.backward,this.clipper),handler:function(){var t=r.pos()-(e.delta||30);r.pos(t)},type:"click"},this._eventHandlers.push(i),this.event(i.element,i.type,i.handler,"on")),e.track&&(t=!0===e.track?this.track:s(e.track,this.clipper))&&(i={element:t,handler:function(e){if(e.target==t){var s=e["offset"+r.origin.x],i=r.bar[r.origin.offsetPos],o=0;s<i?o=-1:s>i+r.bar[r.origin.offset]&&(o=1);var a=r.pos()+o*n*r.scroller[r.origin.client];r.pos(a)}},type:"mousedown"},this._eventHandlers.push(i),this.event(i.element,i.type,i.handler,"on"))}},function(e,t,n){var s=(n(6),n(0).css),i=n(0).add,r=n(0).rm;e.exports=function(e){function t(e,t,n){var o=t,u=1==n?"pos":"oppos";l<(c.minView||0)&&(o=void 0),s(a[e],this.origin.pos,""),s(a[e],this.origin.oppos,""),r(a[e],c.outside),void 0!==o&&(o+="px",s(a[e],this.origin[u],o),i(a[e],c.outside))}function n(e){try{var t=document.createEvent("WheelEvent");t.initWebKitWheelEvent(e.originalEvent.wheelDeltaX,e.originalEvent.wheelDeltaY),p.dispatchEvent(t),e.preventDefault()}catch(e){}}function o(e){var t;for(var i in e)c[i]=e[i];if(c.elements instanceof HTMLElement?a=[c.elements]:"string"==typeof c.elements?a=this.scroller.querySelectorAll(c.elements):c.elements&&c.elements[0]instanceof HTMLElement&&(a=c.elements),a){l=this.scroller[this.origin.client];for(var r=0;r<a.length;r++)(t={})[this.origin.size]=a[r][this.origin.offset]+"px",a[r].parentNode!==this.scroller&&s(a[r].parentNode,t),(t={})[this.origin.crossSize]=a[r].parentNode[this.origin.crossClient]+"px",s(a[r],t),l-=a[r][this.origin.offset],h[r]=a[r].parentNode[this.origin.offsetPos],u[r]=u[r-1]||0,d[r]=d[r-1]||Math.min(h[r],0),a[r-1]&&(u[r]+=a[r-1][this.origin.offset],d[r]+=a[r-1][this.origin.offset]),0==r&&0==h[r]||(this.event(a[r],"mousewheel",n,"off"),this.event(a[r],"mousewheel",n));c.limiter&&a[0]&&(this.track&&this.track!=this.scroller?((t={})[this.origin.pos]=a[0].parentNode[this.origin.offset]+"px",s(this.track,t)):this.barTopLimit=a[0].parentNode[this.origin.offset],this.scroll()),!1===c.limiter&&(this.barTopLimit=0)}var o={element:a,handler:function(){for(var e,t=this.parentNode.offsetTop,n=0;n<a.length;n++)a[n]===this&&(e=n);var s=t-u[e];c.scroll?c.scroll({x1:g.scroller.scrollTop,x2:s}):g.scroller.scrollTop=s},type:"click"};if(c.clickable){this._eventHandlers.push(o);for(var p=0;p<o.element.length;p++)m(o.element[p],o.type,o.handler,"on")}}var a,l,c={outside:"",inside:"",before:"",after:"",past:"",future:"",radius:0,minView:0},u=[],d=[],h=[],p=this.scroller,m=this.event,g=this;this.on("init",o,e);var f=[],A=[];return this.on("init scroll",(function(){var e,n,s,o;if(a){var p;for(o=0;o<a.length;o++)e=0,h[o]-this.pos()<d[o]+c.radius?(e=1,n=u[o]):h[o]-this.pos()>d[o]+l-c.radius?(e=2,n=this.scroller[this.origin.client]-a[o][this.origin.offset]-u[o]-l):(e=3,n=void 0),s=!1,(h[o]-this.pos()<d[o]||h[o]-this.pos()>d[o]+l)&&(s=!0),e==f[o]&&s==A[o]||(t.call(this,o,n,e),f[o]=e,A[o]=s,p=!0);if(p)for(o=0;o<a.length;o++)1==f[o]&&c.past&&(i(a[o],c.past),r(a[o],c.future)),2==f[o]&&c.future&&(i(a[o],c.future),r(a[o],c.past)),3==f[o]&&(r(a[o],c.past),r(a[o],c.future),i(a[o],c.inside)),f[o]!=f[o+1]&&1==f[o]?(i(a[o],c.before),r(a[o],c.after)):f[o]!=f[o-1]&&2==f[o]?(i(a[o],c.after),r(a[o],c.before)):(r(a[o],c.before),r(a[o],c.after)),c.grad&&(A[o]?i(a[o],c.grad):r(a[o],c.grad))}})),this.on("resize upd",(function(e){o.call(this,e&&e.fix)})),this}},function(e,t){e.exports=function(e,t,n){var s=console[e]||console.log,i=["Baron: "+t,n];Function.prototype.apply.call(s,console,i)}}]);const s=baron;var i=n(7201);const r=!n(667).Features.isMobile,o=Symbol("removeScrollAdded"),a={createScroll(e){r&&(this.scroll&&this.removeScroll(),this.scroll=s(e),this[o]||(this.once("remove",(()=>this.removeScroll)),this[o]=!0)),this.scroller=this.$el.find(".scroller"),this.scrollerBar=this.$el.find(".scroller__bar"),this.scrollerBarWrapper=this.$el.find(".scroller__bar-wrapper")},removeScroll(){if(this.scroll){try{this.scroll.dispose()}catch(e){}this.scroll=null}},pageResized(){this.scroll&&(this.scroll.update(),requestAnimationFrame((()=>{if(this.scroll){this.scroll.update();const e=Math.round(this.scrollerBar.height()),t=Math.round(this.scrollerBarWrapper.height());this.scrollerBarWrapper.toggleClass("invisible",e>=t)}})))},initScroll(){r&&this.listenTo(i.Events,"page-geometry",this.pageResized)}}},7779:(e,t,n)=>{"use strict";n.r(t),n.d(t,{View:()=>m,DefaultTemplateOptions:()=>p});var s=n(6238),i=n.n(s),r=n(7187),o=n.n(r),a=n(3710),l=n(1164),c=n(4953),u=n(2363),d=n(6718);const h={mouseenter:!0,mouseleave:!0,blur:!0,focus:!0},p={allowProtoPropertiesByDefault:!0,allowedProtoProperties:{length:!0,active:!0}};class m extends(o()){constructor(e,t={}){super(),this.parent=void 0,this.template=void 0,this.events={},this.model=void 0,this.options={},this.views={},this.hidden=void 0,this.removed=!1,this.modal=void 0,this.eventListeners={},this.elementEventListeners=[],this.debugLogger=localStorage.debugView?new u.Logger("view",this.constructor.name):void 0,this.model=e,this.options=t,this.setMaxListeners(100)}render(e){var t;if(this.removed)return;let n;return this.debugLogger&&(this.debugLogger.debug("Render start"),n=this.debugLogger.ts()),this.el&&a.Tip.destroyTips(this.el),this.renderElement(e),a.Tip.createTips(this.el),null===(t=this.debugLogger)||void 0===t||t.debug("Render finished",this.debugLogger.ts(n)),this}renderElement(e){const t=this.template(e,p);if(this.el){const e=this.options.ownParent?this.el.firstChild:this.el;i()(e,t),this.bindElementEvents()}else{let e=this.options.parent||this.parent;if(!e)throw new Error(`Error rendering ${this.constructor.name}: I don't know how to insert the view`);{if("string"==typeof e&&(e=document.querySelector(e)),!e)throw new Error(`Error rendering ${this.constructor.name}: parent not found`);this.options.replace&&(a.Tip.destroyTips(e),e.innerHTML="");const n=document.createElement("div");n.innerHTML=t;const s=n.firstChild;this.options.ownParent?(s&&e.appendChild(s),this.el=e):(this.el=s,e.appendChild(this.el)),this.modal&&c.FocusManager.setModal(this.modal),this.bindEvents()}this.$el=d(this.el)}}bindEvents(){const e={};for(const[t,n]of Object.entries(this.events)){const s=t.indexOf(" ");let i,r;if(s>0){if(i=t.substr(0,s),r=t.substr(s+1),h[i]){this.elementEventListeners.push({event:i,selector:r,method:n,els:[]});continue}}else i=t;e[i]||(e[i]=[]),e[i].push({selector:r,method:n})}for(const[n,s]of Object.entries(e)){var t;null===(t=this.debugLogger)||void 0===t||t.debug("Bind","view",n,s);const e=e=>this.eventListener(e,s);this.eventListeners[n]=e,this.el.addEventListener(n,e)}this.bindElementEvents()}unbindEvents(){for(const[e,t]of Object.entries(this.eventListeners))this.el.removeEventListener(e,t);this.unbindElementEvents()}bindElementEvents(){if(this.elementEventListeners.length){this.unbindElementEvents();for(const t of this.elementEventListeners){var e;const n=this.el.querySelectorAll(t.selector);null===(e=this.debugLogger)||void 0===e||e.debug("Bind","element",t.event,t.selector,n.length),t.listener=e=>this.eventListener(e,[t]);for(const e of n)e.addEventListener(t.event,t.listener),t.els.push(e)}}}unbindElementEvents(){if(this.elementEventListeners.length)for(const e of this.elementEventListeners){for(const t of e.els)t.removeEventListener(e.event,e.listener);e.els=[]}}eventListener(e,t){var n;null===(n=this.debugLogger)||void 0===n||n.debug("Listener fired",e.type);for(const{selector:n,method:r}of t){var s,i;if(n){const t=e.target.closest(n);if(!t||!this.el.contains(t))continue}if(this[r])null===(s=this.debugLogger)||void 0===s||s.debug("Handling event",e.type,r),this[r](e);else null===(i=this.debugLogger)||void 0===i||i.debug("Method not defined",r)}}remove(){var e;this.modal&&c.FocusManager.modal===this.modal&&c.FocusManager.setModal(null),this.emit("remove"),this.removeInnerViews(),a.Tip.hideTips(this.el),this.el.remove(),this.removed=!0,null===(e=this.debugLogger)||void 0===e||e.debug("Remove")}removeInnerViews(){if(this.views){for(const e of Object.values(this.views))e&&(e instanceof Array?e.forEach((e=>e.remove())):e.remove());this.views={}}}listenTo(e,t,n){const s=n.bind(this);e.on(t,s),this.once("remove",(()=>e.off(t,s)))}hide(){return a.Tip.hideTips(this.el),this.toggle(!1)}show(){return this.toggle(!0)}toggle(e){var t,n;(null===(t=this.debugLogger)||void 0===t||t.debug(e?"Show":"Hide"),void 0===e&&(e=this.hidden),this.hidden!==!e)?(this.hidden=!e,this.modal&&(e?c.FocusManager.setModal(this.modal):c.FocusManager.modal===this.modal&&c.FocusManager.setModal(null)),this.el&&(this.el.classList.toggle("show",!!e),this.el.classList.toggle("hide",!e),e||a.Tip.hideTips(this.el)),this.emit(e?"show":"hide")):null===(n=this.debugLogger)||void 0===n||n.debug("Toggle: noop",e)}isHidden(){return!!this.hidden}isVisible(){return!this.hidden}afterPaint(e){requestAnimationFrame((()=>requestAnimationFrame(e)))}onKey(e,t,n,s,i){l.KeyHandler.onKey(e,t,this,n,s,i),this.once("remove",(()=>l.KeyHandler.offKey(e,t,this)))}off(e,t){return void 0===t?super.removeAllListeners(e):super.off(e,t)}}},9861:(e,t,n)=>{"use strict";n.r(t);var s=n(7109);n.n(s)().registerHelper("add",((e,t)=>parseInt(e)+parseInt(t)))},4540:(e,t,n)=>{"use strict";n.r(t);var s=n(7109);n.n(s)().registerHelper("cmp",(function(e,t,n,s){let i;switch(n){case"<":i=e<t;break;case">":i=e>t;break;case">=":i=e>=t;break;case"<=":i=e<=t;break;case"===":case"==":i=e===t;break;case"!==":case"!=":i=e!==t}return i?s.fn(this):s.inverse(this)}))},2156:(e,t,n)=>{"use strict";n.r(t);var s=n(7109);n.n(s)().registerHelper("ifemptyoreq",(function(e,t,n){return e&&e!==t?n.inverse(this):n.fn(this)}))},7672:(e,t,n)=>{"use strict";n.r(t);var s=n(7109);n.n(s)().registerHelper("ifeq",(function(e,t,n){return e===t?n.fn(this):n.inverse(this)}))},580:(e,t,n)=>{"use strict";n.r(t);var s=n(7109);n.n(s)().registerHelper("ifneq",(function(e,t,n){return e!==t?n.fn(this):n.inverse(this)}))},3676:(e,t,n)=>{"use strict";n.r(t);n(9861),n(4540),n(7672),n(580),n(2156),n(8386)},8386:(e,t,n)=>{"use strict";n.r(t);var s=n(7109),i=n.n(s),r=n(3297);i().registerHelper("res",(function(e,t){let n=r.Locale[e];if(n){n.indexOf("{}")>=0&&(n=n.replace("{}",t.fn(this)))}return n})),i().registerHelper("Res",((e,t)=>{let n=r.Locale[e];if(n){n=n[0].toUpperCase()+n.substr(1);n.indexOf("{}")>=0&&(n=n.replace("{}",t.fn(void 0)))}return n}))},2985:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AppModel:()=>B});var s=n(7201),i=n(949),r=n(6491),o=n(6253),a=n(6469),l=n(7119),c=n(8647),u=n(3006),d=n(403),h=n(7614),p=n(7725),m=n(3850),g=n(7449),f=n(5572),A=n(9686),y=n(4563),v=n(739),b=n(667),w=n(6098),k=n(9491),C=n(4798),_=n(1240),E=n(3297),x=n(2363),I=n(6838),S=n(3279),D=n.n(S);n(9689);class B{constructor(){this.tags=[],this.files=new o.FileCollection,this.fileInfos=a.FileInfoCollection,this.menu=new y.MenuModel,this.filter={},this.sort="title",this.settings=h.AppSettingsModel,this.activeEntryId=null,this.isBeta=l.RuntimeInfo.beta,this.advancedSearch=null,this.attachedYubiKeysCount=0,this.memoryPasswordStorage={},this.fileUnlockPromise=null,this.hardwareDecryptInProgress=!1,this.mainWindowBlurTimer=null,s.Events.on("refresh",this.refresh.bind(this)),s.Events.on("set-filter",this.setFilter.bind(this)),s.Events.on("add-filter",this.addFilter.bind(this)),s.Events.on("set-sort",this.setSort.bind(this)),s.Events.on("empty-trash",this.emptyTrash.bind(this)),s.Events.on("select-entry",this.selectEntry.bind(this)),s.Events.on("unset-keyfile",this.unsetKeyFile.bind(this)),s.Events.on("usb-devices-changed",this.usbDevicesChanged.bind(this)),s.Events.on("main-window-blur",this.mainWindowBlur.bind(this)),s.Events.on("main-window-focus",this.mainWindowFocus.bind(this)),s.Events.on("main-window-will-close",this.mainWindowWillClose.bind(this)),s.Events.on("hardware-decrypt-started",this.hardwareDecryptStarted.bind(this)),s.Events.on("hardware-decrypt-finished",this.hardwareDecryptFinished.bind(this)),this.appLogger=new x.Logger("app"),B.instance=this}loadConfig(e){return new Promise(((t,n)=>{this.ensureCanLoadConfig(e),this.appLogger.debug("Loading config from",e);const s=this.appLogger.ts(),i=new XMLHttpRequest;i.open("GET",e),i.responseType="json",i.send(),i.addEventListener("load",(()=>{let r=i.response;if(!r){const e="OK"===i.statusText?"Malformed JSON":i.statusText;return this.appLogger.error("Error loading app config",e),n("Error loading app config")}if("string"==typeof r)try{r=JSON.parse(r)}catch(e){return this.appLogger.error("Error parsing response",e,r),n("Error parsing response")}if(!r.settings)return this.appLogger.error("Invalid app config, no settings section",r),n("Invalid app config, no settings section");this.appLogger.info("Loaded app config from",e,this.appLogger.ts(s)),t(r)})),i.addEventListener("error",(()=>{this.appLogger.error("Error loading app config",i.statusText,i.status),n("Error loading app config")}))})).then((e=>this.applyUserConfig(e)))}ensureCanLoadConfig(e){if(!b.Features.isSelfHosted)throw"Configs are supported only in self-hosted installations";const t=document.createElement("a");t.href=e;if(t.host&&t.host!==location.host)throw"Loading config from this location is not allowed"}applyUserConfig(e){if(this.settings.set(e.settings),e.files&&(e.showOnlyFilesFromConfig&&(this.fileInfos.length=0),e.files.filter((e=>e&&e.storage&&e.name&&e.path&&!this.fileInfos.getMatch(e.storage,e.name,e.path))).map((e=>new m.FileInfoModel({id:_.IdGenerator.uuid(),name:e.name,storage:e.storage,path:e.path,opts:e.options}))).reverse().forEach((e=>this.fileInfos.unshift(e)))),e.plugins){const t=e.plugins.map((e=>v.PluginManager.installIfNew(e.url,e.manifest,!0)));return Promise.all(t).then((()=>{this.settings.set(e.settings)}))}e.advancedSearch&&(this.advancedSearch=e.advancedSearch,this.addFilter({advanced:this.advancedSearch}))}addFile(e){if(this.files.get(e.id))return!1;this.files.push(e);for(const t of e.groups)this.menu.groupsSection.addItem(t);return this._addTags(e),this._tagsChanged(),this.menu.filesSection.addItem({icon:"lock",title:e.name,page:"file",file:e}),this.refresh(),e.on("reload",this.reloadFile.bind(this)),e.on("change",(()=>{s.Events.emit("file-changed",e)})),e.on("ejected",(()=>this.closeFile(e))),e.on("change:dirty",((e,t)=>{t&&-1===this.settings.autoSaveInterval&&this.syncFile(e)})),s.Events.emit("file-opened"),this.fileUnlockPromise&&(this.appLogger.info("Running pending file unlock operation"),this.fileUnlockPromise.resolve(e),this.fileUnlockPromise=null,s.Events.emit("unlock-message-changed",null)),!0}reloadFile(e){this.menu.groupsSection.replaceByFile(e,e.groups[0]),this.updateTags()}_addTags(e){const t={};this.tags.forEach((e=>{t[e.toLowerCase()]=!0})),e.forEachEntry({},(e=>{for(const n of e.tags)t[n.toLowerCase()]||(t[n.toLowerCase()]=!0,this.tags.push(n))})),this.tags.sort()}_tagsChanged(){this.tags.length?(this.menu.tagsSection.scrollable=!0,this.menu.tagsSection.setItems(this.tags.map((e=>({title:e,icon:"tag",filterKey:"tag",filterValue:e,editable:!0}))))):(this.menu.tagsSection.scrollable=!1,this.menu.tagsSection.removeAllItems())}updateTags(){const e=this.tags.slice();this.tags.splice(0,this.tags.length);for(const e of this.files)this._addTags(e);e.join(",")!==this.tags.join(",")&&this._tagsChanged()}renameTag(e,t){this.files.forEach((n=>n.renameTag&&n.renameTag(e,t))),this.updateTags()}closeAllFiles(){if(this.files.hasOpenFiles()){for(const e of this.files)e.close(),this.fileClosed(e);this.files.length=0,this.menu.groupsSection.removeAllItems(),this.menu.tagsSection.scrollable=!1,this.menu.tagsSection.removeAllItems(),this.menu.filesSection.removeAllItems(),this.tags.splice(0,this.tags.length),this.filter={},this.menu.select({item:this.menu.allItemsItem}),s.Events.emit("all-files-closed")}}closeFile(e){e.close(),this.fileClosed(e),this.files.remove(e),this.updateTags(),this.menu.groupsSection.removeByFile(e),this.menu.filesSection.removeByFile(e),this.menu.select({item:this.menu.allItemsSection.items[0]}),s.Events.emit("one-file-closed")}emptyTrash(){this.files.forEach((e=>e.emptyTrash&&e.emptyTrash())),this.refresh()}setFilter(e){this.filter=this.prepareFilter(e),this.filter.subGroups=this.settings.expandGroups,!this.filter.advanced&&this.advancedSearch&&(this.filter.advanced=this.advancedSearch);const t=this.getEntries();if(!this.activeEntryId||!t.get(this.activeEntryId)){const e=t[0];this.activeEntryId=e?e.id:null}s.Events.emit("filter",{filter:this.filter,sort:this.sort,entries:t}),s.Events.emit("entry-selected",t.get(this.activeEntryId))}refresh(){this.setFilter(this.filter)}selectEntry(e){this.activeEntryId=e.id,this.refresh()}addFilter(e){this.setFilter(Object.assign(this.filter,e))}setSort(e){this.sort=e,this.setFilter(this.filter)}getEntries(){const e=this.getEntriesByFilter(this.filter,this.files);return e.sortEntries(this.sort,this.filter),this.filter.trash&&this.addTrashGroups(e),e}getEntriesByFilter(e,t){const n=this.prepareFilter(e),s=new r.SearchResultCollection,i=t.filter((e=>"otp-device"===e.backend)),o=this.settings.yubiKeyMatchEntries?new Set:void 0;if(t.filter((e=>"otp-device"!==e.backend)).forEach((e=>{e.forEachEntry(n,(e=>{if(o)for(const t of i){const n=t.getMatchingEntry(e);n&&o.add(n)}s.push(e)}))})),i.length)for(const e of i)e.forEachEntry(n,(e=>{o&&o.has(e)||s.push(e)}));return s}addTrashGroups(e){this.files.forEach((t=>{const n=t.getTrashGroup&&t.getTrashGroup();n&&n.getOwnSubGroups().forEach((s=>{e.unshift(f.GroupModel.fromGroup(s,t,n))}))}))}prepareFilter(e){(e=Object.assign({},e)).textLower=e.text?e.text.toLowerCase():"",e.textParts=null,e.textLowerParts=null;if(!(e.advanced&&e.advanced.exact)&&e.text){const t=e.text.split(/\s+/).filter((e=>e));t.length&&(e.textParts=t,e.textLowerParts=e.textLower.split(/\s+/).filter((e=>e)))}return e.tagLower=e.tag?e.tag.toLowerCase():"",e}getFirstSelectedGroupForCreation(){const e=this.filter.group;let t,n;return e&&this.files.some((s=>(t=s,n=s.getGroup(e),n))),n||(t=this.files.find((e=>e.active&&!e.readOnly)),n=t.groups[0]),{group:n,file:t}}completeUserNames(e){const t={};this.files.forEach((n=>{n.forEachEntry({text:e,textLower:e.toLowerCase(),advanced:{user:!0}},(e=>{const n=e.user;n&&(t[n]=(t[n]||0)+1)}))}));const n=Object.entries(t);n.sort(((e,t)=>t[1]-e[1]));return n.length>5&&(n.length=5),n.map((e=>e[0]))}getEntryTemplates(){const e=[];return this.files.forEach((t=>{var n;null===(n=t.forEachEntryTemplate)||void 0===n||n.call(t,(n=>{e.push({file:t,entry:n})}))})),e}canCreateEntries(){return this.files.some((e=>e.active&&!e.readOnly))}createNewEntry(e){const t=this.getFirstSelectedGroupForCreation();if(null!=e&&e.template){t.file!==e.template.file&&(t.file=e.template.file,t.group=e.template.file.groups[0]);const n=e.template.entry,s=p.EntryModel.newEntry(t.group,t.file);return s.copyFromTemplate(n),s}return p.EntryModel.newEntry(t.group,t.file,{tag:this.filter.tag})}createNewEntryWithFields(e,t){return p.EntryModel.newEntryWithFields(e,t)}createNewGroup(){const e=this.getFirstSelectedGroupForCreation();return f.GroupModel.newGroup(e.group,e.file)}createNewGroupWithName(e,t,n){const s=f.GroupModel.newGroup(e,t);return s.setName(n),s}createNewTemplateEntry(){const e=this.getFirstSelectedGroupForCreation().file,t=e.getEntryTemplatesGroup()||e.createEntryTemplatesGroup();return p.EntryModel.newEntry(t,e)}createDemoFile(){if(this.files.getByName("Demo"))return!1;{const e=new g.FileModel({id:_.IdGenerator.uuid()});return e.openDemo((()=>{this.addFile(e)})),!0}}createNewFile(e,t){if(!e)for(let t=0;e=E.Locale.openNewFile+(t||""),this.files.getByName(e)||this.fileInfos.getByName(e);t++);const n=new g.FileModel({id:_.IdGenerator.uuid()});n.create(e,(()=>{this.addFile(n),null==t||t(n)}))}openFile(e,t){const n=new x.Logger("open",e.name);n.info("File open request");const s=e.id?this.fileInfos.get(e.id):this.fileInfos.getMatch(e.storage,e.name,e.path);!e.opts&&s&&s.opts&&(e.opts=s.opts),s&&s.modified?(n.info("Open file from cache because it is modified"),this.openFileFromCache(e,((e,s)=>{!e&&s&&(n.info("Sync just opened modified file"),setTimeout((()=>this.syncFile(s)),0)),t(e)}),s)):e.fileData?(n.info("Open file from supplied content"),"file"===e.storage?i.Storage.file.stat(e.path,null,((n,i)=>{if(n)return t(n);e.rev=i.rev,this.openFileWithData(e,t,s,e.fileData)})):this.openFileWithData(e,t,s,e.fileData,!0)):e.storage?s&&s.openDate&&s.rev===e.rev&&"file"!==s.storage&&!this.settings.disableOfflineStorage?(n.info("Open file from cache because it is latest"),this.openFileFromCache(e,((i,r)=>{if(i){if("KdbxError"===i.name||i.ykError)return t(i);n.info("Error loading file from cache, trying to open from storage",i),this.openFileFromStorage(e,t,s,n,!0)}else t(i,r)}),s)):s&&s.openDate&&"file"!==e.storage&&!this.settings.disableOfflineStorage?(n.info("Open file from cache, will sync after load",e.storage),this.openFileFromCache(e,((i,r)=>{if(!i&&r)n.info("Sync just opened file"),setTimeout((()=>this.syncFile(r)),0),t(i);else{if("KdbxError"===i.name||i.ykError)return t(i);n.info("Error loading file from cache, trying to open from storage",i),this.openFileFromStorage(e,t,s,n,!0)}}),s)):this.openFileFromStorage(e,t,s,n):(n.info("Open file from cache as main storage"),this.openFileFromCache(e,t,s))}openFileFromCache(e,t,n){i.Storage.cache.load(n.id,null,((s,i)=>{i||(s=E.Locale.openFileNoCacheError),new x.Logger("open",e.name).info("Loaded file from cache",s),s?t(s):this.openFileWithData(e,t,n,i)}))}openFileFromStorage(e,t,n,s,r){s.info("Open file from storage",e.storage);const o=i.Storage[e.storage],a=()=>{s.info("Load from storage"),o.load(e.path,e.opts,((i,r,a)=>{if(i)n&&n.openDate&&!this.settings.disableOfflineStorage?(s.info("Open file from cache because of storage load error",i),this.openFileFromCache(e,t,n)):(s.info("Storage load error",i),t(i));else{s.info("Open file from content loaded from storage"),e.fileData=r,e.rev=a&&a.rev||null;const i="file"!==o.name;this.openFileWithData(e,t,n,r,i)}}))},l=n&&n.rev||null;l&&o.stat?(s.info("Stat file"),o.stat(e.path,e.opts,((i,c)=>{!r&&n&&"file"!==o.name&&(i||c&&c.rev===l)&&!this.settings.disableOfflineStorage?(s.info("Open file from cache because "+(i?"stat error":"it is latest"),i),this.openFileFromCache(e,t,n)):c?(s.info("Open file from storage ("+c.rev+", local "+l+")"),a()):(s.info("Stat error",i),t(i))}))):a()}openFileWithData(e,t,n,s,r){const o=new x.Logger("open",e.name);let a=!1;!e.keyFileData&&n&&n.keyFileName?(e.keyFileName=n.keyFileName,"data"===this.settings.rememberKeyFiles&&n.keyFileHash?e.keyFileData=g.FileModel.createKeyFileWithHash(n.keyFileHash):"path"===this.settings.rememberKeyFiles&&n.keyFilePath&&(e.keyFilePath=n.keyFilePath,i.Storage.file.enabled&&(a=!0))):!e.keyFilePath||e.keyFileData||n||(a=!0);const l=new g.FileModel({id:n?n.id:_.IdGenerator.uuid(),name:e.name,storage:e.storage,path:e.path,keyFileName:e.keyFileName,keyFilePath:e.keyFilePath,backup:(null==n?void 0:n.backup)||null,chalResp:e.chalResp});e.encryptedPassword&&(l.encryptedPassword=n.encryptedPassword,l.encryptedPasswordDate=(null==n?void 0:n.encryptedPasswordDate)||new Date);const c=a=>{if(a)return t(a);if(this.files.get(l.id))return t("Duplicate file id");n&&n.modified&&(n.editState&&(o.info("Loaded local edit state"),l.setLocalEditState(n.editState)),o.info("Mark file as modified"),l.modified=!0),n&&(l.syncDate=n.syncDate),r&&!this.settings.disableOfflineStorage&&(o.info("Save loaded file to cache"),i.Storage.cache.save(l.id,null,e.fileData));const c=e.rev||n&&n.rev;this.setFileOpts(l,e.opts),this.addToLastOpenFiles(l,c),this.addFile(l),t(null,l),this.fileOpened(l,s,e)},u=()=>{l.open(e.password,s,e.keyFileData,c)};a?i.Storage.file.load(e.keyFilePath,{},((n,s)=>{n?(o.info("Storage load error",n),t(n)):(e.keyFileData=s,u())})):u()}importFileWithXml(e,t){const n=new x.Logger("import",e.name);n.info("File import request with supplied xml");const s=new g.FileModel({id:_.IdGenerator.uuid(),name:e.name,storage:e.storage,path:e.path});s.importWithXml(e.fileXml,(e=>{if(n.info("Import xml complete "+(e?"with error":""),e),e)return t(e);this.addFile(s),this.fileOpened(s)}))}addToLastOpenFiles(e,t){this.appLogger.debug("Add last open file",e.id,e.name,e.storage,e.path,t);const n=new Date,s=new m.FileInfoModel({id:e.id,name:e.name,storage:e.storage,path:e.path,opts:this.getStoreOpts(e),modified:e.modified,editState:e.getLocalEditState(),rev:t,syncDate:e.syncDate||n,openDate:n,backup:e.backup,chalResp:e.chalResp});switch(this.settings.rememberKeyFiles){case"data":s.set({keyFileName:e.keyFileName||null,keyFileHash:e.getKeyFileHash()});break;case"path":s.set({keyFileName:e.keyFileName||null,keyFilePath:e.keyFilePath||null})}if("file"===this.settings.deviceOwnerAuth&&e.encryptedPassword){const t=new Date(e.encryptedPasswordDate);t.setMinutes(t.getMinutes()+this.settings.deviceOwnerAuthTimeoutMinutes),t>new Date&&(s.encryptedPassword=e.encryptedPassword,s.encryptedPasswordDate=e.encryptedPasswordDate)}this.fileInfos.remove(e.id),this.fileInfos.unshift(s),this.fileInfos.save()}getStoreOpts(e){const t=e.opts,n=e.storage;return i.Storage[n]&&i.Storage[n].fileOptsToStoreOpts&&t?i.Storage[n].fileOptsToStoreOpts(t,e):null}setFileOpts(e,t){const n=e.storage;i.Storage[n]&&i.Storage[n].storeOptsToFileOpts&&t&&(e.opts=i.Storage[n].storeOptsToFileOpts(t,e))}fileOpened(e,t,n){"file"===e.storage&&i.Storage.file.watch(e.path,D()((()=>{this.syncFile(e)}),d.Timeouts.FileChangeSync)),e.isKeyChangePending(!0)&&s.Events.emit("key-change-pending",{file:e});const r=e.backup;t&&r&&r.enabled&&r.pending&&this.scheduleBackupFile(e,t),this.settings.yubiKeyAutoOpen&&this.attachedYubiKeysCount>0&&!this.files.some((e=>"otp-device"===e.backend))&&this.tryOpenOtpDeviceInBackground(),this.settings.deviceOwnerAuth&&this.saveEncryptedPassword(e,n)}fileClosed(e){"file"===e.storage&&i.Storage.file.unwatch(e.path)}removeFileInfo(e){i.Storage.cache.remove(e),this.fileInfos.remove(e),this.fileInfos.save()}getFileInfo(e){return this.fileInfos.get(e.id)||this.fileInfos.getMatch(e.storage,e.name,e.path)}syncFile(e,t,n){if(e.demo)return n&&n();if(e.syncing)return n&&n("Sync in progress");if(!e.active)return n&&n("File is closed");t||(t={});const r=new x.Logger("sync",e.name),o=t.storage||e.storage;let a=t.path||e.path;const l=t.opts||e.opts;!o||!i.Storage[o].getPathForName||a&&o===e.storage||(a=i.Storage[o].getPathForName(e.name));const c=Object.assign({},t);c.opts&&c.opts.password&&(c.opts=Object.assign({},c.opts),c.opts.password="***"),r.info("Sync started",o,a,c);let u=this.getFileInfo(e);if(!u){r.info("Create new file info");const t=new Date;u=new m.FileInfoModel({id:_.IdGenerator.uuid(),name:e.name,storage:e.storage,path:e.path,opts:this.getStoreOpts(e),modified:e.modified,editState:null,rev:null,syncDate:t,openDate:t,backup:e.backup})}e.setSyncProgress();const d=t=>{if(!e.active)return n&&n("File is closed");r.info("Sync finished",t||"no error"),e.setSyncComplete(a,o,t?t.toString():null),u.set({name:e.name,storage:o,path:a,opts:this.getStoreOpts(e),modified:e.dirty?u.modified:e.modified,editState:e.dirty?u.editState:e.getLocalEditState(),syncDate:e.syncDate,chalResp:e.chalResp}),"data"===this.settings.rememberKeyFiles&&u.set({keyFileName:e.keyFileName||null,keyFileHash:e.getKeyFileHash()}),this.fileInfos.get(u.id)||this.fileInfos.unshift(u),this.fileInfos.save(),n&&n(t)};if(o){const n=3;let c=0;const h=()=>{if(++c===n)return d("Too many load attempts");r.info("Load from storage, attempt "+c),i.Storage[o].load(a,l,((n,o,a)=>(r.info("Load from storage",a,n||"no error"),e.active?n?d(n):void e.mergeOrUpdate(o,t.remoteKey,(t=>{if(r.info("Merge complete",t||"no error"),this.refresh(),t)return"InvalidKey"===t.code&&(r.info("Remote key changed, request to enter new key"),s.Events.emit("remote-key-changed",{file:e})),d(t);if(a&&a.rev&&(r.info("Update rev in file info"),u.rev=a.rev),e.syncDate=new Date,e.modified)r.info("Updated sync date, saving modified file"),m();else if(e.dirty){if(this.settings.disableOfflineStorage)return r.info("File is dirty and cache is disabled"),d(t);r.info("Saving not modified dirty file to cache"),i.Storage.cache.save(u.id,null,o,(t=>{if(t)return d(t);e.dirty=!1,r.info("Complete, remove dirty flag"),d()}))}else r.info("Complete, no changes"),d()})):d("File is closed"))))},p=t=>{r.info("Save data to storage");const n=u.storage===o?u.rev:void 0;i.Storage[o].save(a,l,t,((n,s)=>{n&&n.revConflict?(r.info("Save rev conflict, reloading from storage"),h()):n?(r.info("Error saving data to storage"),d(n)):(s&&s.rev&&(r.info("Update rev in file info"),u.rev=s.rev),s&&s.path&&(r.info("Update path in file info",s.path),e.path=s.path,u.path=s.path,a=s.path),e.syncDate=new Date,r.info("Save to storage complete, update sync date"),this.scheduleBackupFile(e,t),d())}),n)},m=()=>{r.info("Getting file data for saving"),e.getData(((t,n)=>{if(n)return d(n);"file"===o?(r.info("Saving to file storage"),p(t)):e.dirty?this.settings.disableOfflineStorage?(r.info("Saving to storage because cache is disabled"),p(t)):(r.info("Saving to cache"),i.Storage.cache.save(u.id,null,t,(n=>{if(n)return d(n);e.dirty=!1,r.info("Saved to cache, saving to storage"),p(t)}))):(r.info("Saving to storage, skip cache because not dirty"),p(t))}))};r.info("Stat file"),i.Storage[o].stat(a,l,((t,n)=>{if(!e.active)return d("File is closed");if(t)if(t.notFound)r.info("File does not exist in storage, creating"),m();else if(e.dirty){if(this.settings.disableOfflineStorage)return r.info("Stat error, dirty, cache is disabled",t||"no error"),d(t);r.info("Stat error, dirty, save to cache",t||"no error"),e.getData(((n,s)=>{if(s)return r.error("Error getting file data",s),d(t);i.Storage.cache.save(u.id,null,n,(n=>{n&&r.error("Error saving to cache",n),n||(e.dirty=!1),r.info("Saved to cache, exit with error",t||"no error"),d(t)}))}))}else r.info("Stat error, not dirty",t||"no error"),d(t);else n.rev===u.rev?e.modified?(r.info("Stat found same version, modified, saving"),m()):(r.info("Stat found same version, not modified"),d()):(r.info("Found new version, loading from storage"),h())}))}else{if(!e.modified&&u.id===e.id)return r.info("Local, not modified"),d();r.info("Local, save to cache"),e.getData(((t,n)=>{if(n)return d(n);i.Storage.cache.save(u.id,null,t,(n=>{r.info("Saved to cache",n||"no error"),d(n),n||this.scheduleBackupFile(e,t)}))}))}}deleteAllCachedFiles(){for(const e of this.fileInfos)e.storage&&!e.modified&&i.Storage.cache.remove(e.id)}clearStoredKeyFiles(){for(const e of this.fileInfos)e.set({keyFileName:null,keyFilePath:null,keyFileHash:null});this.fileInfos.save()}unsetKeyFile(e){this.fileInfos.get(e).set({keyFileName:null,keyFilePath:null,keyFileHash:null}),this.fileInfos.save()}setFileBackup(e,t){const n=this.fileInfos.get(e);n&&(n.backup=t),this.fileInfos.save()}backupFile(e,t,n){const s=e.opts;let r=e.backup;const o=new x.Logger("backup",e.name);if(!r||!r.storage||!r.path)return n("Invalid backup settings");let a=r.path.replace("{date}",w.DateFormat.dtStrFs(new Date));o.info("Backup file to",r.storage,a);const l=()=>{i.Storage[r.storage].getPathForName&&(a=i.Storage[r.storage].getPathForName(a)),i.Storage[r.storage].save(a,s,t,(t=>{t?o.error("Backup error",t):(o.info("Backup complete"),r=e.backup,r.lastTime=Date.now(),delete r.pending,e.backup=r,this.setFileBackup(e.id,r)),n(t)}))};let c=C.UrlFormat.fileToDir(a);i.Storage[r.storage].getPathForName&&(c=i.Storage[r.storage].getPathForName(c).replace(".kdbx","")),i.Storage[r.storage].stat(c,s,(e=>{if(e)if(e.notFound){if(o.info("Backup folder does not exist"),!i.Storage[r.storage].mkdir)return n("Mkdir not supported by "+r.storage);i.Storage[r.storage].mkdir(c,(e=>{e?(o.error("Error creating backup folder",e),n("Error creating backup folder")):(o.info("Backup folder created"),l())}))}else o.error("Stat folder error",e),n("Cannot stat backup folder");else o.info("Backup folder exists, saving"),l()}))}scheduleBackupFile(e,t){const n=e.backup;if(!n||!n.enabled)return;const s=new x.Logger("backup",e.name);let i=!1;if(n.lastTime){const e=new Date(n.lastTime);switch(n.schedule){case"0":break;case"1d":e.setDate(e.getDate()+1);break;case"1w":e.setDate(e.getDate()+7);break;case"1m":e.setMonth(e.getMonth()+1);break;default:return}e.getTime()<=Date.now()&&(i=!0),s.debug("Last backup time: "+new Date(n.lastTime)+", schedule: "+n.schedule+", next time: "+e+", "+(i?"backup now":"skip backup"))}else i=!0,s.debug("No last backup time, backup now");n.pending||(n.pending=!0,this.setFileBackup(e.id,n)),i&&this.backupFile(e,t,I.noop)}usbDevicesChanged(){const e=this.attachedYubiKeysCount;if(this.attachedYubiKeysCount=c.UsbListener.attachedYubiKeys,!this.settings.yubiKeyAutoOpen)return;const t=c.UsbListener.attachedYubiKeys>e,n=this.files.some((e=>e.active&&"otp-device"!==e.backend));t&&n&&!this.openingOtpDevice&&this.tryOpenOtpDeviceInBackground()}tryOpenOtpDeviceInBackground(){this.appLogger.debug("Auto-opening a YubiKey"),this.openOtpDevice((e=>{this.appLogger.debug("YubiKey auto-open complete",e)}))}openOtpDevice(e){this.openingOtpDevice=!0;const t=new A.YubiKeyOtpModel;return t.open((n=>{this.openingOtpDevice=!1,n||this.addFile(t),e(n)})),t}getMatchingOtpEntry(e){if(!this.settings.yubiKeyMatchEntries)return null;for(const t of this.files)if("otp-device"===t.backend){const n=t.getMatchingEntry(e);if(n)return n}}saveEncryptedPassword(e,t){this.settings.deviceOwnerAuth&&!t.encryptedPassword&&u.NativeModules.hardwareEncrypt(t.password).then((t=>{t=t.toBase64();const n=this.fileInfos.get(e.id),s=new Date;e.encryptedPassword=t,e.encryptedPasswordDate=s,"file"===this.settings.deviceOwnerAuth?(n.encryptedPassword=t,n.encryptedPasswordDate=s,this.fileInfos.save()):"memory"===this.settings.deviceOwnerAuth&&(this.memoryPasswordStorage[e.id]={value:t,date:s})})).catch((t=>{e.encryptedPassword=null,e.encryptedPasswordDate=null,delete this.memoryPasswordStorage[e.id],this.appLogger.error("Error encrypting password",t)}))}getMemoryPassword(e){return this.memoryPasswordStorage[e]}checkEncryptedPasswordsStorage(){if("file"===this.settings.deviceOwnerAuth){let e=!1;for(const t of this.fileInfos)this.memoryPasswordStorage[t.id]&&(t.encryptedPassword=this.memoryPasswordStorage[t.id].value,t.encryptedPasswordDate=this.memoryPasswordStorage[t.id].date,e=!0);e&&this.fileInfos.save();for(const e of this.files)this.memoryPasswordStorage[e.id]&&(e.encryptedPassword=this.memoryPasswordStorage[e.id].value,e.encryptedPasswordDate=this.memoryPasswordStorage[e.id].date)}else if("memory"===this.settings.deviceOwnerAuth){let e=!1;for(const t of this.fileInfos)t.encryptedPassword&&(this.memoryPasswordStorage[t.id]={value:t.encryptedPassword,date:t.encryptedPasswordDate},t.encryptedPassword=null,t.encryptedPasswordDate=null,e=!0);e&&this.fileInfos.save()}else{let e=!1;for(const t of this.fileInfos)t.encryptedPassword&&(t.encryptedPassword=null,t.encryptedPasswordDate=null,e=!0);e&&this.fileInfos.save();for(const e of this.files)e.encryptedPassword&&(e.encryptedPassword=null,e.encryptedPasswordDate=null);this.memoryPasswordStorage={}}}unlockAnyFile(e,t){return this.rejectPendingFileUnlockPromise("Replaced with a new operation"),s.Events.emit("show-open-view"),new Promise(((n,i)=>{if(this.fileUnlockPromise={resolve:n,reject:i,unlockRes:e},t){const e=setTimeout((()=>this.rejectPendingFileUnlockPromise("Timeout")),t);this.fileUnlockPromise.resolve=t=>{clearTimeout(e),n(t)},this.fileUnlockPromise.reject=t=>{clearTimeout(e),i(t)}}this.appLogger.info("Pending file unlock operation is set"),s.Events.emit("unlock-message-changed",e)}))}get unlockMessageRes(){var e;return null===(e=this.fileUnlockPromise)||void 0===e?void 0:e.unlockRes}rejectPendingFileUnlockPromise(e){this.fileUnlockPromise&&(this.appLogger.info("Cancel pending file unlock operation",e),this.fileUnlockPromise.reject(new Error(e)),this.fileUnlockPromise=null,s.Events.emit("unlock-message-changed",null))}mainWindowBlur(){this.hardwareDecryptInProgress||(this.mainWindowBlurTimer=setTimeout((()=>{delete this.mainWindowBlurTimer,this.rejectPendingFileUnlockPromise("Main window blur")}),d.Timeouts.AutoTypeWindowFocusAfterBlur))}mainWindowFocus(){this.mainWindowBlurTimer&&(clearTimeout(this.mainWindowBlurTimer),this.mainWindowBlurTimer=null)}mainWindowWillClose(){this.rejectPendingFileUnlockPromise("Main window will close")}hardwareDecryptStarted(){this.hardwareDecryptInProgress=!0}hardwareDecryptFinished(){this.hardwareDecryptInProgress=!1,k.Launcher.isAppFocused()||this.rejectPendingFileUnlockPromise("App is not focused after hardware decrypt")}}},7614:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AppSettingsModel:()=>a});var s=n(9186),i=n(6524),r=n(4491);class o extends s.Model{constructor(){super(),this.on("change",(()=>this.save()))}load(){return i.SettingsStore.load("app-settings").then((e=>{e&&(this.upgrade(e),this.set(e,{silent:!0}))}))}upgrade(e){!0===e.rememberKeyFiles&&(e.rememberKeyFiles="data"),"en"===e.locale&&(e.locale="en-US"),"macdark"===e.theme&&(e.theme="dark"),"wh"===e.theme&&(e.theme="light")}save(){const e={};for(const[t,n]of Object.entries(this))r.DefaultAppSettings[t]!==n&&(e[t]=n);i.SettingsStore.save("app-settings",e)}}o.defineModelProperties(r.DefaultAppSettings,{extensions:!0});const a=new o},5667:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AttachmentModel:()=>i});var s=n(9186);class i extends s.Model{getBinary(){var e,t;let n=this.data;if(null!==(e=n)&&void 0!==e&&e.value&&(n=n.value),null!==(t=n)&&void 0!==t&&t.getBinary&&(n=n.getBinary()),n instanceof ArrayBuffer&&n.byteLength&&(n=new Uint8Array(n)),n instanceof Uint8Array)return n}static fromAttachment(e){const t=function(e){const t=e?e.split(".").pop():void 0;return t?t.toLowerCase():void 0}(e.title);return new i({title:e.title,data:e.data,ext:t,icon:r(t),mimeType:o(t)})}}function r(e){switch(e){case"txt":case"log":case"rtf":case"pem":return"file-alt";case"html":case"htm":case"js":case"css":case"xml":case"config":case"json":case"yaml":case"cpp":case"c":case"h":case"cc":case"hpp":case"mm":case"cs":case"php":case"sh":case"py":case"java":case"rb":case"cfg":case"properties":case"yml":case"asm":case"bat":return"file-code";case"pdf":return"file-pdf";case"zip":case"rar":case"bz":case"bz2":case"7z":case"gzip":case"gz":case"tar":case"cab":case"ace":case"dmg":case"jar":return"file-archive";case"doc":case"docx":return"file-word";case"xls":case"xlsx":return"file-excel";case"ppt":case"pptx":return"file-powerpoint";case"jpeg":case"jpg":case"png":case"gif":case"bmp":case"tiff":case"svg":case"ico":case"psd":return"file-image";case"avi":case"mp4":case"3gp":case"m4v":case"mov":case"mpeg":case"mpg":case"mpe":return"file-video";case"mp3":case"wav":case"flac":return"file-audio"}return"file"}function o(e){switch(e){case"txt":case"log":case"html":case"htm":case"js":case"css":case"xml":case"config":case"json":case"yaml":case"cpp":case"c":case"h":case"cc":case"hpp":case"mm":case"cs":case"php":case"sh":case"py":case"java":case"rb":case"cfg":case"properties":case"yml":case"asm":case"pem":return"text/plain";case"pdf":return"application/pdf";case"jpeg":case"jpg":case"png":case"gif":case"bmp":case"tiff":case"svg":return"image/"+e}}i.defineModelProperties({title:void 0,data:void 0,ext:void 0,icon:void 0,mimeType:void 0})},7725:(e,t,n)=>{"use strict";n.r(t),n.d(t,{EntryModel:()=>w,ExtraUrlFieldName:()=>b});var s=n(3617),i=n(9186),r=n(7614),o=n(1673),a=n(353),l=n(9166),c=n(5667),u=n(4546),d=n(9081),h=n(5563),p=n(8495),m=n(6838),g=n(9907);const f=/^https?:\/\//i,A=/^\{REF:([TNPAU])@I:(\w{32})}$/,y=["title","password","user","url","notes"],v={T:"Title",U:"UserName",P:"Password",A:"URL",N:"Notes"},b="KP2A_URL";class w extends i.Model{constructor(e){super(e),this._search=new g.EntrySearch(this)}setEntry(e,t,n){this.entry=e,this.group=t,this.file=n,this.uuid===e.uuid.id&&this._checkUpdatedEntry(),this.hasFieldRefs=!1,this._fillByEntry(),this.hasFieldRefs=!0}_fillByEntry(){const e=this.entry;this.set({id:this.file.subId(e.uuid.id),uuid:e.uuid.id},{silent:!0}),this.fileName=this.file.name,this.groupName=this.group.title,this.title=this._getFieldString("Title"),this.password=this._getPassword(),this.notes=this._getFieldString("Notes"),this.url=this._getFieldString("URL"),this.displayUrl=this._getDisplayUrl(this._getFieldString("URL")),this.user=this._getFieldString("UserName"),this.iconId=e.icon,this.icon=this._iconFromId(e.icon),this.tags=e.tags,this.color=this._colorToModel(e.bgColor)||this._colorToModel(e.fgColor),this.fields=this._fieldsToModel(),this.attachments=this._attachmentsToModel(e.binaries),this.created=e.times.creationTime,this.updated=e.times.lastModTime,this.expires=e.times.expires?e.times.expiryTime:void 0,this.expired=e.times.expires&&e.times.expiryTime<=new Date,this.historyLength=e.history.length,this.titleUserLower=`${this.title}:${this.user}`.toLowerCase(),this._buildCustomIcon(),this._buildSearchText(),this._buildSearchTags(),this._buildSearchColor(),this._buildAutoType(),this.hasFieldRefs&&this.resolveFieldReferences()}_getPassword(){const e=this.entry.fields.get("Password")||s.ProtectedValue.fromString("");return e.isProtected?e:s.ProtectedValue.fromString(e)}_getFieldString(e){const t=this.entry.fields.get(e);return t?t.isProtected?t.getText():t.toString():""}_checkUpdatedEntry(){this.isJustCreated&&(this.isJustCreated=!1),this.canBeDeleted&&(this.canBeDeleted=!1),this.unsaved&&+this.updated!=+this.entry.times.lastModTime&&(this.unsaved=!1)}_buildSearchText(){let e="";for(const t of this.entry.fields.values())"string"==typeof t&&(e+=t.toLowerCase()+"\n");this.entry.tags.forEach((t=>{e+=t.toLowerCase()+"\n"})),this.attachments.forEach((t=>{e+=t.title.toLowerCase()+"\n"})),this.searchText=e}_buildCustomIcon(){var e;(this.customIcon=null,this.customIconId=null,this.entry.customIcon)&&(this.customIcon=p.IconUrlFormat.toDataUrl(null===(e=this.file.db.meta.customIcons.get(this.entry.customIcon.id))||void 0===e?void 0:e.data),this.customIconId=this.entry.customIcon.toString())}_buildSearchTags(){this.searchTags=this.entry.tags.map((e=>e.toLowerCase()))}_buildSearchColor(){this.searchColor=this.color}_buildAutoType(){this.autoTypeEnabled=this.entry.autoType.enabled,this.autoTypeObfuscation=this.entry.autoType.obfuscation===s.Consts.AutoTypeObfuscationOptions.UseClipboard,this.autoTypeSequence=this.entry.autoType.defaultSequence,this.autoTypeWindows=this.entry.autoType.items.map(this._convertAutoTypeItem)}_convertAutoTypeItem(e){return{window:e.window,sequence:e.keystrokeSequence}}_iconFromId(e){return a.IconMap[e]}_getDisplayUrl(e){return e?e.replace(f,""):""}_colorToModel(e){return e?u.Color.getNearest(e):null}_fieldsToModel(){return(0,m.omit)(this.getAllFields(),l.BuiltInFields)}_attachmentsToModel(e){const t=[];for(let[n,s]of e)s&&s.ref&&(s=s.value),s&&t.push(c.AttachmentModel.fromAttachment({data:s,title:n}));return t}_entryModified(){this.unsaved||(this.unsaved=!0,0!==this.file.historyMaxItems&&this.entry.pushHistory(),this.file.setModified()),this.isJustCreated&&(this.isJustCreated=!1,this.file.reload()),this.entry.times.update()}setSaved(){this.unsaved&&(this.unsaved=!1),this.canBeDeleted&&(this.canBeDeleted=!1)}matches(e){return this._search.matches(e)}getAllFields(){const e={};for(const[t,n]of this.entry.fields)e[t]=n;return e}getHistoryEntriesForSearch(){return this.entry.history}resolveFieldReferences(){this.hasFieldRefs=!1,y.forEach((e=>{const t=this[e],n=this._resolveFieldReference(t);void 0!==n&&(this[e]=n,this.hasFieldRefs=!0)}))}getFieldValue(e){let t;if(e=e.toLowerCase(),[...this.entry.fields.keys()].some((n=>n.toLowerCase()===e&&(t=n,!0))),t){let e=this.entry.fields.get(t);const n=this._resolveFieldReference(e);return void 0!==n&&(e=n),e}}_resolveFieldReference(e){if(!e)return;if(e.isProtected&&e.isFieldReference()&&(e=e.getText()),"string"!=typeof e)return;const t=e.match(A);return t?this._getReferenceValue(t[1],t[2]):void 0}_getReferenceValue(e,t){const n=new Uint8Array(16);for(let e=0;e<16;e++)n[e]=parseInt(t.substr(2*e,2),16);const i=new s.KdbxUuid(n),r=this.file.getEntry(this.file.subId(i.id));if(r)return r.entry.fields.get(v[e])}setColor(e){this._entryModified(),this.entry.bgColor=u.Color.getKnownBgColor(e),this._fillByEntry()}setIcon(e){this._entryModified(),this.entry.icon=e,this.entry.customIcon=void 0,this._fillByEntry()}setCustomIcon(e){this._entryModified(),this.entry.customIcon=new s.KdbxUuid(e),this._fillByEntry()}setExpires(e){this._entryModified(),this.entry.times.expiryTime=e instanceof Date?e:void 0,this.entry.times.expires=!!e,this._fillByEntry()}setTags(e){this._entryModified(),this.entry.tags=e,this._fillByEntry()}renameTag(e,t){const n=this.entry.tags.findIndex((t=>t.toLowerCase()===e.toLowerCase()));n<0||(this._entryModified(),this.entry.tags.splice(n,1),t&&this.entry.tags.push(t),this._fillByEntry())}setField(e,t,n){t&&("string"==typeof t||t.isProtected&&t.byteLength)||n||l.BuiltInFields.indexOf(e)>=0?(this._entryModified(),t=this.sanitizeFieldValue(t),this.entry.fields.set(e,t)):this.entry.fields.has(e)&&(this._entryModified(),this.entry.fields.delete(e)),this._fillByEntry()}sanitizeFieldValue(e){return e&&!e.isProtected&&(e=e.replace(/[\x00-\x08\x0B-\x0C\x0E-\x1F\uFFF0-\uFFFF]/g,"")),e}hasField(e){return this.entry.fields.has(e)}addAttachment(e,t){return this._entryModified(),this.file.db.createBinary(t).then((t=>{this.entry.binaries.set(e,t),this._fillByEntry()}))}removeAttachment(e){this._entryModified(),this.entry.binaries.delete(e),this._fillByEntry()}getHistory(){const e=this.entry.history.map((function(e){return w.fromEntry(e,this.group,this.file)}),this);return e.push(this),e.sort(((e,t)=>e.updated-t.updated)),e}deleteHistory(e){const t=this.entry.history.indexOf(e);t>=0&&(this.entry.removeHistory(t),this.file.setModified()),this._fillByEntry()}revertToHistoryState(e){this.entry.history.indexOf(e)<0||(this.entry.pushHistory(),this.unsaved=!0,this.file.setModified(),this.entry.fields=new Map,this.entry.binaries=new Map,this.entry.copyFrom(e),this._entryModified(),this._fillByEntry())}discardUnsaved(){if(this.unsaved&&this.entry.history.length){this.unsaved=!1;const e=this.entry.history[this.entry.history.length-1];this.entry.removeHistory(this.entry.history.length-1),this.entry.fields=new Map,this.entry.binaries=new Map,this.entry.copyFrom(e),this._fillByEntry()}}moveToTrash(){this.file.setModified(),this.isJustCreated&&(this.isJustCreated=!1),this.file.db.remove(this.entry),this.file.reload()}deleteFromTrash(){this.file.setModified(),this.file.db.move(this.entry,null),this.file.reload()}removeWithoutHistory(){if(this.canBeDeleted){const e=this.group.group.entries.indexOf(this.entry);e>=0&&this.group.group.entries.splice(e,1),this.file.reload()}}detach(){return this.file.setModified(),this.file.db.move(this.entry,null),this.file.reload(),this.entry}moveToFile(e){this.canBeDeleted&&(this.removeWithoutHistory(),this.group=e.groups[0],this.file=e,this._fillByEntry(),this.entry.times.update(),this.group.group.entries.push(this.entry),this.group.addEntry(this),this.isJustCreated=!0,this.unsaved=!0,this.file.setModified())}initOtpGenerator(){let e;if(this.fields.otp){if(e=this.fields.otp,e.isProtected&&(e=e.getText()),d.Otp.isSecret(e.replace(/\s/g,"")))e=d.Otp.makeUrl(e.replace(/\s/g,"").toUpperCase());else if(0!==e.toLowerCase().lastIndexOf("otpauth:",0)){const t={};e.split("&").forEach((e=>{const n=e.split("=",2);t[n[0]]=decodeURIComponent(n[1]).replace(/=/g,"")})),t.key&&(e=d.Otp.makeUrl(t.key,t.step,t.size))}}else if(this.entry.fields.get("TOTP Seed")){let t=this.entry.fields.get("TOTP Seed");if(t.isProtected&&(t=t.getText()),t){let n,i,r=this.entry.fields.get("TOTP Settings");r&&r.isProtected&&(r=r.getText()),r&&(r=r.split(";"),r.length>0&&r[0]>0&&(n=r[0]),r.length>1&&r[1]>0&&(i=r[1])),e=d.Otp.makeUrl(t,n,i),this.fields.otp=s.ProtectedValue.fromString(e)}}if(e){if(this.otpGenerator&&this.otpGenerator.url===e)return;try{this.otpGenerator=d.Otp.parseUrl(e)}catch(e){this.otpGenerator=null}}else this.otpGenerator=null}setOtp(e){this.otpGenerator=e,this.setOtpUrl(e.url)}setOtpUrl(e){this.setField("otp",e?s.ProtectedValue.fromString(e):void 0),this.entry.fields.delete("TOTP Seed"),this.entry.fields.delete("TOTP Settings")}getEffectiveEnableAutoType(){return"boolean"==typeof this.entry.autoType.enabled?this.entry.autoType.enabled:this.group.getEffectiveEnableAutoType()}getEffectiveAutoTypeSeq(){return this.entry.autoType.defaultSequence||this.group.getEffectiveAutoTypeSeq()}setEnableAutoType(e){this._entryModified(),this.entry.autoType.enabled=e,this._buildAutoType()}setAutoTypeObfuscation(e){this._entryModified(),this.entry.autoType.obfuscation=e?s.Consts.AutoTypeObfuscationOptions.UseClipboard:s.Consts.AutoTypeObfuscationOptions.None,this._buildAutoType()}setAutoTypeSeq(e){this._entryModified(),this.entry.autoType.defaultSequence=e||void 0,this._buildAutoType()}getGroupPath(){let e=this.group;const t=[];for(;e;)t.unshift(e.title),e=e.parentGroup;return t}cloneEntry(e){const t=w.newEntry(this.group,this.file),n=t.entry.uuid;return t.entry.copyFrom(this.entry),t.entry.uuid=n,t.entry.times.update(),t.entry.times.creationTime=t.entry.times.lastModTime,t.entry.fields.set("Title",this.title+e),t._fillByEntry(),this.file.reload(),t}copyFromTemplate(e){const t=this.entry.uuid;this.entry.copyFrom(e.entry),this.entry.uuid=t,this.entry.times.update(),this.entry.times.creationTime=this.entry.times.lastModTime,this.entry.fields.set("Title",""),this._fillByEntry()}getRank(e){const t=e.textLower;if(!t)return 0;const n=e.advanced&&e.advanced.protect,s={Title:10,URL:8,UserName:5,Notes:2};return Object.keys(s).concat(Object.keys(this.fields)).reduce(((e,i)=>{const r=this.entry.fields.get(i);if(!r)return e;if(r.isProtected&&(!n||!r.length))return e;return e+h.Ranking.getStringRank(t,r)*(s[i]||2)}),0)}getHtml(){return o.KdbxToHtml.entryToHtml(this.file.db,this.entry)}canCheckPasswordIssues(){var e;return!(null!==(e=this.entry.customData)&&void 0!==e&&e.has("IgnorePwIssues"))}setIgnorePasswordIssues(){this.entry.customData||(this.entry.customData=new Map),this.entry.customData.set("IgnorePwIssues","1"),this._entryModified()}getNextUrlFieldName(){const e=new Set([...this.entry.fields.keys()].filter((e=>e.startsWith(b))));for(let t=0;;t++){const n=t?`${b}_${t}`:b;if(!e.has(n))return n}}getAllUrls(){const e=this.url?[this.url]:[],t=Object.entries(this.fields).filter((([e])=>e.startsWith(b))).map((([,e])=>e.isProtected?e.getText():e)).filter((e=>e));return e.concat(t)}static fromEntry(e,t,n){const s=new w;return s.setEntry(e,t,n),s}static newEntry(e,t,n){const s=new w,i=t.db.createEntry(e.group);return r.AppSettingsModel.useGroupIconForEntries&&e.icon&&e.iconId&&(i.icon=e.iconId),n&&n.tag&&(i.tags=[n.tag]),s.setEntry(i,e,t),s.entry.times.update(),s.unsaved=!0,s.isJustCreated=!0,s.canBeDeleted=!0,e.addEntry(s),t.setModified(),s}static newEntryWithFields(e,t){const n=w.newEntry(e,e.file);for(const[e,s]of Object.entries(t))n.setField(e,s);return n}}w.defineModelProperties({},{extensions:!0})},3850:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FileInfoModel:()=>o});var s=n(9186),i=n(6838);const r={id:"",name:"",storage:null,path:null,modified:!1,editState:null,rev:null,syncDate:null,openDate:null,keyFileName:null,keyFileHash:null,keyFilePath:null,opts:null,backup:null,fingerprint:null,chalResp:null,encryptedPassword:null,encryptedPasswordDate:null};class o extends s.Model{constructor(e){e=(0,i.pick)(Object.assign({},e),Object.keys(r));for(const[t,n]of Object.entries(e))/Date$/.test(t)&&(e[t]=n?new Date(n):null);super(e)}}o.defineModelProperties(r)},7449:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FileModel:()=>y});var s=n(3617),i=n(4181),r=n.n(i),o=n(9186),a=n(7201),l=n(6195),c=n(1673),u=n(5572),d=n(7614),h=n(8495),p=n(2363),m=n(3297),g=n(2378),f=n(9621);const A=new p.Logger("file");class y extends o.Model{constructor(e){super(Object.assign({entryMap:{},groupMap:{}},e))}open(e,t,n,i){try{const r=f.ChalRespCalculator.build(this.chalResp),o=new s.Credentials(e,n,r),a=A.ts();s.Kdbx.load(t,o).then((e=>{this.db=e})).then((()=>{this.readModel(),this.setOpenFile({passwordLength:e?e.textLength:0}),n&&s.ByteUtils.zeroBuffer(n),A.info("Opened file "+this.name+": "+A.ts(a)+", "+this.kdfArgsToString(this.db.header)+", "+Math.round(t.byteLength/1024)+" kB"),i()})).catch((r=>{if(r.code===s.Consts.ErrorCodes.InvalidKey&&e&&!e.byteLength)return A.info("Error opening file with empty password, try to open with null password"),this.open(null,t,n,i);A.error("Error opening file",r.code,r.message,r),i(r)}))}catch(e){A.error("Error opening file",e,e.code,e.message,e),i(e)}}kdfArgsToString(e){return e.kdfParameters?e.kdfParameters.keys().map((t=>{const n=e.kdfParameters.get(t);if(!(n instanceof ArrayBuffer))return t+"="+n})).filter((e=>e)).join("&"):e.keyEncryptionRounds?e.keyEncryptionRounds+" rounds":"?"}create(e,t){const n=s.ProtectedValue.fromString(""),i=new s.Credentials(n);this.db=s.Kdbx.create(i,e),this.name=e,this.readModel(),this.set({active:!0,created:!0,name:e}),t()}importWithXml(e,t){try{const n=A.ts(),i=s.ProtectedValue.fromString(""),r=new s.Credentials(i);s.Kdbx.loadXml(e,r).then((e=>{this.db=e})).then((()=>{this.readModel(),this.set({active:!0,created:!0}),A.info("Imported file "+this.name+": "+A.ts(n)),t()})).catch((e=>{A.error("Error importing file",e.code,e.message,e),t(e)}))}catch(e){A.error("Error importing file",e,e.code,e.message,e),t(e)}}openDemo(e){const t=s.ProtectedValue.fromString("demo"),n=new s.Credentials(t),i=s.ByteUtils.arrayToBuffer(s.ByteUtils.base64ToBytes(r()));s.Kdbx.load(i,n).then((e=>{this.db=e})).then((()=>{this.name="Demo",this.readModel(),this.setOpenFile({passwordLength:4,demo:!0}),e()}))}setOpenFile(e){this.set(Object.assign({},e,{active:!0,oldKeyFileName:this.keyFileName,oldPasswordLength:e.passwordLength,passwordChanged:!1,keyFileChanged:!1})),this.oldPasswordHash=this.db.credentials.passwordHash,this.oldKeyFileHash=this.db.credentials.keyFileHash,this.oldKeyChangeDate=this.db.meta.keyChanged}readModel(){const e=new l.GroupCollection;this.set({uuid:this.db.getDefaultGroup().uuid.toString(),groups:e,formatVersion:this.db.header.versionMajor,defaultUser:this.db.meta.defaultUser,recycleBinEnabled:this.db.meta.recycleBinEnabled,historyMaxItems:this.db.meta.historyMaxItems,historyMaxSize:this.db.meta.historyMaxSize,keyEncryptionRounds:this.db.header.keyEncryptionRounds,keyChangeForce:this.db.meta.keyChangeForce,kdfName:this.readKdfName(),kdfParameters:this.readKdfParams()},{silent:!0}),this.db.groups.forEach((function(t){let n=this.getGroup(this.subId(t.uuid.id));n?n.setGroup(t,this):n=u.GroupModel.fromGroup(t,this),e.push(n)}),this),this.buildObjectMap(),this.resolveFieldReferences()}readKdfName(){if(4===this.db.header.versionMajor&&this.db.header.kdfParameters){let e=this.db.header.kdfParameters.get("$UUID");if(e)switch(e=s.ByteUtils.bytesToBase64(e),e){case s.Consts.KdfId.Argon2d:return"Argon2d";case s.Consts.KdfId.Argon2id:return"Argon2id";case s.Consts.KdfId.Aes:return"Aes"}return"Unknown"}return"Aes"}readKdfParams(){const e=this.db.header.kdfParameters;if(!e)return;let t=e.get("$UUID");if(t)switch(t=s.ByteUtils.bytesToBase64(t),t){case s.Consts.KdfId.Argon2d:case s.Consts.KdfId.Argon2id:return{parallelism:e.get("P").valueOf(),iterations:e.get("I").valueOf(),memory:e.get("M").valueOf()};case s.Consts.KdfId.Aes:return{rounds:e.get("R").valueOf()};default:return}}subId(e){return this.id+":"+e}buildObjectMap(){const e={},t={};this.forEachGroup((n=>{t[n.id]=n,n.forEachOwnEntry(null,(t=>{e[t.id]=t}))}),{includeDisabled:!0}),this.entryMap=e,this.groupMap=t}resolveFieldReferences(){const e=this.entryMap;Object.keys(e).forEach((t=>{e[t].resolveFieldReferences()}))}reload(){this.buildObjectMap(),this.readModel(),this.emit("reload",this)}mergeOrUpdate(e,t,n){let i,r=Promise.resolve();t?(i=new s.Credentials(s.ProtectedValue.fromString("")),r=i.ready.then((()=>{const e=[];return t.password?e.push(i.setPassword(t.password)):i.passwordHash=this.db.credentials.passwordHash,t.keyFileName&&(t.keyFileData?e.push(i.setKeyFile(t.keyFileData)):i.keyFileHash=this.db.credentials.keyFileHash),Promise.all(e)}))):i=this.db.credentials,r.then((()=>{s.Kdbx.load(e,i).then((e=>{if(this.modified)try{t&&e.meta.keyChanged>this.db.meta.keyChanged&&(this.db.credentials=e.credentials,this.keyFileName=t.keyFileName||"",t.password&&(this.passwordLength=t.password.textLength)),this.db.merge(e)}catch(e){return A.error("File merge error",e),n(e)}else this.db=e;this.dirty=!0,this.reload(),n()})).catch((e=>{A.error("Error opening file to merge",e.code,e.message,e),n(e)}))}))}getLocalEditState(){return this.db.getLocalEditState()}setLocalEditState(e){this.db.setLocalEditState(e)}close(){this.set({keyFileName:"",passwordLength:0,modified:!1,dirty:!1,active:!1,created:!1,groups:null,passwordChanged:!1,keyFileChanged:!1,syncing:!1}),this.chalResp&&!d.AppSettingsModel.yubiKeyRememberChalResp&&f.ChalRespCalculator.clearCache(this.chalResp)}getEntry(e){return this.entryMap[e]}getGroup(e){return this.groupMap[e]}forEachEntry(e,t){let n=this;e.trash?n=this.getGroup(this.db.meta.recycleBinUuid?this.subId(this.db.meta.recycleBinUuid.id):null):e.group&&(n=this.getGroup(e.group)),n&&(n.forEachOwnEntry&&n.forEachOwnEntry(e,t),e.group&&!e.subGroups||n.forEachGroup((n=>{n.forEachOwnEntry(e,t)}),e))}forEachGroup(e,t){this.groups.forEach((n=>{!1!==e(n)&&n.forEachGroup(e,t)}))}getTrashGroup(){return this.db.meta.recycleBinEnabled?this.getGroup(this.subId(this.db.meta.recycleBinUuid.id)):null}getEntryTemplatesGroup(){return this.db.meta.entryTemplatesGroup?this.getGroup(this.subId(this.db.meta.entryTemplatesGroup.id)):null}createEntryTemplatesGroup(){const e=this.groups[0],t=u.GroupModel.newGroup(e,this);return t.setName(g.StringFormat.capFirst(m.Locale.templates)),this.db.meta.entryTemplatesGroup=t.group.uuid,this.reload(),t}setModified(){this.demo||this.set({modified:!0,dirty:!0})}getData(e){this.db.cleanup({historyRules:!0,customIcons:!0,binaries:!0}),this.db.cleanup({binaries:!0}),this.db.save().then((t=>{e(t)})).catch((t=>{A.error("Error saving file",this.name,t),e(void 0,t)}))}getXml(e){this.db.saveXml(!0).then((t=>{e(t)}))}getHtml(e){e(c.KdbxToHtml.convert(this.db,{name:this.name}))}getKeyFileHash(){const e=this.db.credentials.keyFileHash;return e?s.ByteUtils.bytesToBase64(e.getBinary()):null}forEachEntryTemplate(e){if(!this.db.meta.entryTemplatesGroup)return;const t=this.getGroup(this.subId(this.db.meta.entryTemplatesGroup.id));t&&t.forEachOwnEntry({},e)}setSyncProgress(){this.set({syncing:!0})}setSyncComplete(e,t,n){n||this.db.removeLocalEditState();const s=this.modified&&!!n;this.set({created:!1,path:e||this.path,storage:t||this.storage,modified:s,dirty:!!n&&this.dirty,syncing:!1,syncError:n}),!n&&this.passwordChanged&&this.encryptedPassword&&this.set({encryptedPassword:null,encryptedPasswordDate:null}),this.open&&(this.setOpenFile({passwordLength:this.passwordLength}),this.forEachEntry({includeDisabled:!0},(e=>e.setSaved())))}setPassword(e){this.db.credentials.setPassword(e),this.db.meta.keyChanged=new Date,this.set({passwordLength:e.textLength,passwordChanged:!0}),this.setModified()}resetPassword(){this.db.credentials.passwordHash=this.oldPasswordHash,this.db.credentials.keyFileHash===this.oldKeyFileHash&&(this.db.meta.keyChanged=this.oldKeyChangeDate),this.set({passwordLength:this.oldPasswordLength,passwordChanged:!1})}setKeyFile(e,t){this.db.credentials.setKeyFile(e),this.db.meta.keyChanged=new Date,this.set({keyFileName:t,keyFileChanged:!0}),this.setModified()}generateAndSetKeyFile(){return s.Credentials.createRandomKeyFile().then((e=>(this.setKeyFile(e,"Generated"),e)))}resetKeyFile(){this.db.credentials.keyFileHash=this.oldKeyFileHash,this.db.credentials.passwordHash===this.oldPasswordHash&&(this.db.meta.keyChanged=this.oldKeyChangeDate),this.set({keyFileName:this.oldKeyFileName,keyFileChanged:!1})}removeKeyFile(){this.db.credentials.keyFileHash=null;const e=!!this.oldKeyFileHash;e||this.db.credentials.passwordHash!==this.oldPasswordHash||(this.db.meta.keyChanged=this.oldKeyChangeDate),this.set({keyFileName:"",keyFilePath:"",keyFileChanged:e}),a.Events.emit("unset-keyfile",this.id),this.setModified()}isKeyChangePending(e){if(!this.db.meta.keyChanged)return!1;const t=e?this.db.meta.keyChangeForce:this.db.meta.keyChangeRec;if(!t||t<0||isNaN(t))return!1;return(Date.now()-this.db.meta.keyChanged)/1e3/3600/24>t}setChallengeResponse(e){this.chalResp&&!d.AppSettingsModel.yubiKeyRememberChalResp&&f.ChalRespCalculator.clearCache(this.chalResp),this.db.credentials.setChallengeResponse(f.ChalRespCalculator.build(e)),this.db.meta.keyChanged=new Date,this.chalResp=e,this.setModified()}setKeyChange(e,t){(isNaN(t)||!t||t<0)&&(t=-1);const n=e?"keyChangeForce":"keyChangeRec";this.db.meta[n]=t,this[n]=t,this.setModified()}setName(e){this.db.meta.name=e,this.db.meta.nameChanged=new Date,this.name=e,this.groups[0].setName(e),this.setModified(),this.reload()}setDefaultUser(e){this.db.meta.defaultUser=e,this.db.meta.defaultUserChanged=new Date,this.defaultUser=e,this.setModified()}setRecycleBinEnabled(e){e=!!e,this.db.meta.recycleBinEnabled=e,e&&this.db.createRecycleBin(),this.recycleBinEnabled=e,this.setModified()}setHistoryMaxItems(e){this.db.meta.historyMaxItems=e,this.historyMaxItems=e,this.setModified()}setHistoryMaxSize(e){this.db.meta.historyMaxSize=e,this.historyMaxSize=e,this.setModified()}setKeyEncryptionRounds(e){this.db.header.keyEncryptionRounds=e,this.keyEncryptionRounds=e,this.setModified()}setKdfParameter(e,t){const n=s.VarDictionary.ValueType;switch(e){case"memory":this.db.header.kdfParameters.set("M",n.UInt64,s.Int64.from(t));break;case"iterations":this.db.header.kdfParameters.set("I",n.UInt64,s.Int64.from(t));break;case"parallelism":this.db.header.kdfParameters.set("P",n.UInt32,t);break;case"rounds":this.db.header.kdfParameters.set("R",n.UInt32,t);break;default:return}this.kdfParameters=this.readKdfParams(),this.setModified()}emptyTrash(){const e=this.getTrashGroup();if(e){let t=!1;e.getOwnSubGroups().slice().forEach((function(e){this.db.move(e,null),t=!0}),this),e.group.entries.slice().forEach((function(e){this.db.move(e,null),t=!0}),this),e.items.length=0,e.entries.length=0,t&&this.setModified()}}getCustomIcons(){const e={};for(const[t,n]of this.db.meta.customIcons)e[t]=h.IconUrlFormat.toDataUrl(n.data);return e}addCustomIcon(e){const t=s.KdbxUuid.random();return this.db.meta.customIcons.set(t.id,{data:s.ByteUtils.arrayToBuffer(s.ByteUtils.base64ToBytes(e)),lastModified:new Date}),t.toString()}renameTag(e,t){this.forEachEntry({},(n=>n.renameTag(e,t)))}setFormatVersion(e){this.db.setVersion(e),this.setModified(),this.readModel()}setKdf(e){if(!this.db.header.kdfParameters)throw new Error("Cannot set KDF on this version");switch(e){case"Aes":this.db.setKdf(s.Consts.KdfId.Aes);break;case"Argon2d":this.db.setKdf(s.Consts.KdfId.Argon2d);break;case"Argon2id":this.db.setKdf(s.Consts.KdfId.Argon2id);break;default:throw new Error("Bad KDF name")}this.setModified(),this.readModel()}static createKeyFileWithHash(e){const t=s.ByteUtils.base64ToBytes(e),n=s.ByteUtils.bytesToHex(t);return s.ByteUtils.stringToBytes(n)}}y.defineModelProperties({id:"",uuid:"",name:"",db:null,entryMap:null,groupMap:null,keyFileName:"",keyFilePath:null,chalResp:null,passwordLength:0,path:"",opts:null,storage:null,modified:!1,dirty:!1,active:!1,created:!1,demo:!1,groups:null,oldPasswordLength:0,oldKeyFileName:"",passwordChanged:!1,keyFileChanged:!1,keyChangeForce:-1,syncing:!1,syncError:null,syncDate:null,backup:null,formatVersion:null,defaultUser:null,recycleBinEnabled:null,historyMaxItems:null,historyMaxSize:null,keyEncryptionRounds:null,kdfName:null,kdfParameters:null,fingerprint:null,oldPasswordHash:null,oldKeyFileHash:null,oldKeyChangeDate:null,encryptedPassword:null,encryptedPasswordDate:null,supportsTags:!0,supportsColors:!0,supportsIcons:!0,supportsExpiration:!0,defaultGroupHash:""})},5572:(e,t,n)=>{"use strict";n.r(t),n.d(t,{GroupModel:()=>h});var s=n(3617),i=n(353),r=n(7725),o=n(9233),a=n(8495),l=n(6195),c=n(8533);const u=s.Consts.Icons,d="{USERNAME}{TAB}{PASSWORD}{ENTER}";class h extends o.MenuItemModel{setGroup(e,t,n){const s=e.uuid.equals(t.db.meta.recycleBinUuid),i=t.subId(e.uuid.id);this.set({id:i,uuid:e.uuid.id,expanded:e.expanded,visible:!s,items:new l.GroupCollection,entries:new c.EntryCollection,filterValue:i,enableSearching:e.enableSearching,enableAutoType:e.enableAutoType,autoTypeSeq:e.defaultAutoTypeSeq,top:!n,drag:!!n,collapsible:!!n},{silent:!0}),this.group=e,this.file=t,this.parentGroup=n,this._fillByGroup(!0);const o=this.items,a=this.entries,u=e.groups.map((e=>{let n=t.getGroup(t.subId(e.uuid.id));return n?n.setGroup(e,t,this):n=h.fromGroup(e,t,this),n}),this);o.push(...u);const d=e.entries.map((e=>{let n=t.getEntry(t.subId(e.uuid.id));return n?n.setEntry(e,this,t):n=r.EntryModel.fromEntry(e,this,t),n}),this);a.push(...d)}_fillByGroup(e){this.set({title:this.parentGroup?this.group.name:this.file.name,iconId:this.group.icon,icon:this._iconFromId(this.group.icon),customIcon:this._buildCustomIcon(),customIconId:this.group.customIcon?this.group.customIcon.toString():null,expanded:!1!==this.group.expanded},{silent:e})}_iconFromId(e){if(e!==u.Folder&&e!==u.FolderOpen)return i.IconMap[e]}_buildCustomIcon(){var e;return this.customIcon=null,this.group.customIcon?a.IconUrlFormat.toDataUrl(null===(e=this.file.db.meta.customIcons.get(this.group.customIcon.id))||void 0===e?void 0:e.data):null}_groupModified(){this.isJustCreated&&(this.isJustCreated=!1),this.file.setModified(),this.group.times.update()}forEachGroup(e,t){let n=!0;return this.items.forEach((s=>{s.matches(t)&&(n=!1!==e(s)&&!1!==s.forEachGroup(e,t))})),n}forEachOwnEntry(e,t){this.entries.forEach((function(n){n.matches(e)&&t(n,this)}))}matches(e){return(e&&e.includeDisabled||!1!==this.group.enableSearching&&!this.group.uuid.equals(this.file.db.meta.entryTemplatesGroup))&&(!e||!e.autoType||!1!==this.group.enableAutoType)}getOwnSubGroups(){return this.group.groups}addEntry(e){this.entries.push(e)}addGroup(e){this.items.push(e)}setName(e){this._groupModified(),this.group.name=e,this._fillByGroup()}setIcon(e){this._groupModified(),this.group.icon=e,this.group.customIcon=void 0,this._fillByGroup()}setCustomIcon(e){this._groupModified(),this.group.customIcon=new s.KdbxUuid(e),this._fillByGroup()}setExpanded(e){this.group.expanded=e,this.expanded=e}setEnableSearching(e){this._groupModified();let t=!0,n=this.parentGroup;for(;n;){if("boolean"==typeof n.enableSearching){t=n.enableSearching;break}n=n.parentGroup}e===t&&(e=null),this.group.enableSearching=e,this.enableSearching=this.group.enableSearching}getEffectiveEnableSearching(){let e=this;for(;e;){if("boolean"==typeof e.enableSearching)return e.enableSearching;e=e.parentGroup}return!0}setEnableAutoType(e){this._groupModified();let t=!0,n=this.parentGroup;for(;n;){if("boolean"==typeof n.enableAutoType){t=n.enableAutoType;break}n=n.parentGroup}e===t&&(e=null),this.group.enableAutoType=e,this.enableAutoType=this.group.enableAutoType}getEffectiveEnableAutoType(){let e=this;for(;e;){if("boolean"==typeof e.enableAutoType)return e.enableAutoType;e=e.parentGroup}return!0}setAutoTypeSeq(e){this._groupModified(),this.group.defaultAutoTypeSeq=e||void 0,this.autoTypeSeq=this.group.defaultAutoTypeSeq}getEffectiveAutoTypeSeq(){let e=this;for(;e;){if(e.autoTypeSeq)return e.autoTypeSeq;e=e.parentGroup}return d}getParentEffectiveAutoTypeSeq(){return this.parentGroup?this.parentGroup.getEffectiveAutoTypeSeq():d}isEntryTemplatesGroup(){return this.group.uuid.equals(this.file.db.meta.entryTemplatesGroup)}moveToTrash(){this.file.setModified(),this.file.db.remove(this.group),this.group.uuid.equals(this.file.db.meta.entryTemplatesGroup)&&(this.file.db.meta.entryTemplatesGroup=void 0),this.file.reload()}deleteFromTrash(){this.file.db.move(this.group,null),this.file.reload()}removeWithoutHistory(){const e=this.parentGroup.group.groups.indexOf(this.group);e>=0&&this.parentGroup.group.groups.splice(e,1),this.file.reload()}moveHere(e){if(e&&e.id!==this.id)if(e.file===this.file){if(this.file.setModified(),e instanceof h){for(let t=this;t;t=t.parentGroup)if(e===t)return;if(this.group.groups.indexOf(e.group)>=0)return;this.file.db.move(e.group,this.group),this.file.reload()}else if(e instanceof r.EntryModel){if(this.group.entries.indexOf(e.entry)>=0)return;this.file.db.move(e.entry,this.group),this.file.reload()}}else if(e instanceof r.EntryModel){this.file.setModified();const t=e.detach();this.file.db.importEntry(t,this.group,e.file.db),this.file.reload()}}moveToTop(e){if(!(e&&e.id!==this.id&&e.file===this.file&&e instanceof h))return;this.file.setModified();for(let t=this;t;t=t.parentGroup)if(e===t)return;let t=this.parentGroup.group.groups.indexOf(this.group);const n=this.parentGroup.group.groups.indexOf(e.group);n>=0&&n<t&&t--,t>=0&&this.file.db.move(e.group,this.parentGroup.group,t),this.file.reload()}static fromGroup(e,t,n){const s=new h;return s.setGroup(e,t,n),s}static newGroup(e,t){const n=new h,s=t.db.createGroup(e.group);return n.setGroup(s,t,e),n.group.times.update(),n.isJustCreated=!0,e.addGroup(n),t.setModified(),t.reload(),n}}h.defineModelProperties({id:"",uuid:"",iconId:0,entries:null,filterKey:"group",editable:!0,top:!1,drag:!0,drop:!0,enableSearching:!0,enableAutoType:null,autoTypeSeq:null,group:null,file:null,parentGroup:null,customIconId:null,isJustCreated:!1})},5782:(e,t,n)=>{"use strict";n.r(t),n.d(t,{GroupsMenuModel:()=>r});var s=n(6195),i=n(4954);class r extends i.MenuSectionModel{constructor(){super(new s.GroupCollection)}}r.defineModelProperties({scrollable:!0,grow:!0})},9233:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MenuItemModel:()=>o});var s=n(9186),i=n(8604),r=n(4655);class o extends s.Model{constructor(e){super(e),e&&e.file&&e.file.on("change:name",this.changeTitle.bind(this))}addItem(e){this.items.push(e)}addOption(e){this.options||(this.options=new i.MenuOptionCollection),this.options.push(new r.MenuOptionModel(e))}toggleExpanded(){const e=this.items;let t=!this.expanded;e&&e.length||(t=!0),this.expanded=t}changeTitle(e,t){this.title=t}}o.defineModelProperties({id:"",title:"",locTitle:"",icon:"",customIcon:null,active:!1,expanded:!0,items:null,shortcut:null,options:null,cls:null,iconCls:null,disabled:!1,visible:!0,drag:!1,drop:!1,filterKey:null,filterValue:null,collapsible:!1,defaultItem:!1,page:null,editable:!1,file:null,section:null})},4563:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MenuModel:()=>m});var s=n(9186),i=n(7201),r=n(8567),o=n(7017),a=n(2977),l=n(5782),c=n(4954),u=n(2378),d=n(3297),h=n(9491),p=n(667);class m extends s.Model{constructor(){super(),this.menus={},this.allItemsSection=new c.MenuSectionModel([{locTitle:"menuAllItems",icon:"th-large",active:!0,shortcut:a.Keys.DOM_VK_A,filterKey:"*"}]),this.allItemsItem=this.allItemsSection.items[0],this.groupsSection=new l.GroupsMenuModel,this.colorsSection=new c.MenuSectionModel([{locTitle:"menuColors",icon:"bookmark",shortcut:a.Keys.DOM_VK_C,cls:"menu__item-colors",filterKey:"color",filterValue:!0}]),this.colorsItem=this.colorsSection.items[0];const e=[this._getDefaultTagItem()];this.tagsSection=new c.MenuSectionModel(e),this.tagsSection.set({scrollable:!0,drag:!0}),this.tagsSection.defaultItems=e,this.trashSection=new c.MenuSectionModel([{locTitle:"menuTrash",icon:"trash-alt",shortcut:a.Keys.DOM_VK_D,filterKey:"trash",filterValue:!0,drop:!0}]),o.Colors.AllColors.forEach((e=>{const t={cls:`fa ${e}-color`,value:e,filterValue:e};this.colorsSection.items[0].addOption(t)})),this.menus.app=new r.MenuSectionCollection([this.allItemsSection,this.colorsSection,this.tagsSection,this.groupsSection,this.trashSection]),this.generalSection=new c.MenuSectionModel([{locTitle:"menuSetGeneral",icon:"cog",page:"general",section:"top",active:!0},{locTitle:"setGenAppearance",icon:"0",page:"general",section:"appearance"},{locTitle:"setGenFunction",icon:"0",page:"general",section:"function"},{locTitle:"setGenAudit",icon:"0",page:"general",section:"audit"},{locTitle:"setGenLock",icon:"0",page:"general",section:"lock"},{locTitle:"setGenStorage",icon:"0",page:"general",section:"storage"},{locTitle:"advanced",icon:"0",page:"general",section:"advanced"}]),this.shortcutsSection=new c.MenuSectionModel([{locTitle:"shortcuts",icon:"keyboard",page:"shortcuts"}]),p.Features.supportsBrowserExtensions&&(this.browserSection=new c.MenuSectionModel([{locTitle:"menuSetBrowser",icon:p.Features.browserIcon,page:"browser"}])),this.pluginsSection=new c.MenuSectionModel([{locTitle:"plugins",icon:"puzzle-piece",page:"plugins"}]),h.Launcher&&(this.devicesSection=new c.MenuSectionModel([{locTitle:"menuSetDevices",icon:"usb",page:"devices"}])),this.aboutSection=new c.MenuSectionModel([{locTitle:"menuSetAbout",icon:"info",page:"about"}]),this.helpSection=new c.MenuSectionModel([{locTitle:"help",icon:"question",page:"help"}]),this.filesSection=new c.MenuSectionModel,this.filesSection.set({scrollable:!0,grow:!0}),this.menus.settings=new r.MenuSectionCollection([this.generalSection,this.shortcutsSection,this.browserSection,this.pluginsSection,this.devicesSection,this.aboutSection,this.helpSection,this.filesSection].filter((e=>e))),this.sections=this.menus.app,i.Events.on("set-locale",this._setLocale.bind(this)),i.Events.on("select-next-menu-item",this._selectNext.bind(this)),i.Events.on("select-previous-menu-item",this._selectPrevious.bind(this)),this._setLocale()}select(e){const t=this.sections;for(const n of t)this._select(n,e.item);if(t===this.menus.app){this.colorsItem.options.forEach((t=>{t.active=t===e.option})),this.colorsItem.iconCls=e.item===this.colorsItem&&e.option?e.option.value+"-color":null;const t=e.item.filterKey,n=(e.option||e.item).filterValue,s={};s[t]=n,i.Events.emit("set-filter",s)}else t===this.menus.settings&&e.item.page&&i.Events.emit("set-page",{page:e.item.page,section:e.item.section,file:e.item.file})}_selectPrevious(){let e=null;const t=n=>{if(!1===n.visible)return!0;n.active&&(e=n);const s=n.items;s&&s.forEach((n=>n.active&&e?(this.select({item:e}),!1):t(n)))};this.sections.forEach((e=>t(e)))}_selectNext(){let e=null;const t=n=>{if(!1===n.visible)return!0;if(n.active&&e&&n!==e)return this.select({item:n}),e=null,!1;const s=n.items;s&&s.forEach((n=>(n.active&&(e=n),t(n))))};this.sections.forEach((e=>t(e)))}_select(e,t){const n=e.items;if(n)for(const e of n)e.active=e===t,this._select(e,t)}_setLocale(){for(const e of[this.menus.app,this.menus.settings])for(const t of e)for(const e of t.items)e.locTitle&&(e.title=u.StringFormat.capFirst(d.Locale[e.locTitle]));this.tagsSection.defaultItems[0]=this._getDefaultTagItem()}_getDefaultTagItem(){return{title:u.StringFormat.capFirst(d.Locale.tags),icon:"tags",defaultItem:!0,disabled:{header:d.Locale.menuAlertNoTags,body:d.Locale.menuAlertNoTagsBody,icon:"tags"}}}setMenu(e){this.sections=this.menus[e]}}m.defineModelProperties({sections:null,menu:null},{extensions:!0})},4655:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MenuOptionModel:()=>i});var s=n(9186);class i extends s.Model{}i.defineModelProperties({title:"",cls:"",value:"",active:!1,filterValue:null})},4954:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MenuSectionModel:()=>a});var s=n(9186),i=n(900),r=n(9233);function o(e){return e instanceof r.MenuItemModel?e:new r.MenuItemModel(e)}class a extends s.Model{constructor(e=[]){super({items:new i.MenuItemCollection(e.map(o))})}addItem(e){this.items.push(o(e)),this.emit("change-items")}removeAllItems(){this.items.length=0,this.defaultItems&&this.items.push(...this.defaultItems.map((e=>new r.MenuItemModel(e)))),this.emit("change-items")}removeByFile(e){const t=this.items;t.find((n=>n.file===e&&(t.remove(n),!0))),this.emit("change-items")}replaceByFile(e,t){const n=this.items;n.find(((s,i)=>s.file===e&&(n[i]=t,!0))),this.emit("change-items")}setItems(e){this.items.length=0,this.items.push(...e.map(o)),this.emit("change-items")}}a.defineModelProperties({defaultItems:null,items:null,scrollable:!1,grow:!1,drag:!1,visible:void 0,active:!1})},1192:(e,t,n)=>{"use strict";n.r(t),n.d(t,{OtpDeviceEntryCollection:()=>r});var s=n(9071),i=n(1909);class r extends s.Collection{}r.model=i.OtpDeviceEntryModel},1909:(e,t,n)=>{"use strict";n.r(t),n.d(t,{OtpDeviceEntryModel:()=>r});var s=n(9186),i=n(9907);class r extends s.Model{constructor(e){super(e),this.tags=[],this.fields={},this._buildSearchText(),this._buildFields(),this._search=new i.EntrySearch(this)}matches(e){return this._search.matches(e)}_buildSearchText(){let e="";this.title&&(e+=this.title.toLowerCase()),this.user&&(e+="\n"+this.user.toLowerCase()),this.searchText=e}_buildFields(){this.fields.Title=this.title}getAllFields(){return this.fields}getAllUrls(){return[]}getFieldValue(e){return this.fields[e]}getEffectiveAutoTypeSeq(){return"{TOTP}{ENTER}"}}r.defineModelProperties({id:"",file:null,entry:!0,readOnly:!0,device:void 0,deviceSubId:null,title:void 0,description:void 0,fields:void 0,icon:void 0,tags:void 0,searchText:void 0,_search:void 0})},3593:(e,t,n)=>{"use strict";n.r(t),n.d(t,{OtpDeviceModel:()=>r});var s=n(9186),i=n(1192);class r extends s.Model{constructor(...e){super(...e),this.entries=new i.OtpDeviceEntryCollection,this.groups=[],this.entryMap={}}forEachEntry(e,t){if(!(e.trash||e.group||e.tag))for(const n of this.entries)n.matches(e)&&t(n)}entryId(e,t){return`${e}:${t}`.toLowerCase()}getMatchingEntry(e){return this.entryMap[this.entryId(e.title,e.user)]}_buildEntryMap(){for(const e of this.entries)this.entryMap[e.id.toLowerCase()]=e}open(e){throw"Not implemented"}cancelOpen(){throw"Not implemented"}close(e){throw"Not implemented"}getOtp(e){throw"Not implemented"}}r.defineModelProperties({id:"",backend:"otp-device",skipOpenList:!0,readOnly:!0,active:!1,entries:void 0,groups:void 0,name:void 0,shortName:void 0,deviceClassName:void 0,entryMap:void 0})},1342:(e,t,n)=>{"use strict";n.r(t),n.d(t,{OtpEntryModel:()=>i});var s=n(1909);class i extends s.OtpDeviceEntryModel{constructor(e){super(Object.assign({},e,{description:e.user}))}initOtpGenerator(){if(this.otpGenerator)return;const e={next:t=>{if(e.otp&&e.expires){const n=e.expires-Date.now();if(n>0)return t(null,e.otp,n)}e.promise?e.promise.then((({err:e,otp:n,timeLeft:s})=>{t(e,n,s)})):e.promise=new Promise((n=>{e.otpState=this.device.getOtp(this,((s,i,r)=>{e.otpState=null,e.promise=null,i&&r>0?(e.otp=i,e.expires=Date.now()+r):(e.otp=null,e.expires=null),t(s,i,r),n({err:s,otp:i,timeLeft:r})}))}))},cancel:()=>{this.otpState&&this.device.cancelGetOtp(this,this.otpState)}};this.otpGenerator=e}_buildFields(){super._buildFields(),this.fields.UserName=this.user}}i.defineModelProperties({user:void 0,backend:"otp-device",otpGenerator:void 0,needsTouch:!1})},9686:(e,t,n)=>{"use strict";n.r(t),n.d(t,{YubiKeyOtpModel:()=>u});var s=n(7201),i=n(3593),r=n(1342),o=n(2363),a=n(8647),l=n(9777);const c=new o.Logger("yubikey");class u extends i.OtpDeviceModel{constructor(e){super(Object.assign({id:"yubikey",name:"YubiKey",shortName:"YubiKey",deviceClassName:"YubiKey"},e)),this.onUsbDevicesChanged=()=>{0===a.UsbListener.attachedYubiKeys&&this.emit("ejected")}}open(e){l.YubiKey.listWithYkman(((t,n)=>{if(t)return e(t);let s=0;const i=[],r=()=>{const t=n.shift();this._addYubiKey(t.serial,(t=>{if(l.YubiKey.aborted)return e("Aborted");t?i.push(t):s++,n&&n.length?r():(s&&this._openComplete(),e(s?null:i[0]))}))};r()}))}_addYubiKey(e,t){c.info("Adding YubiKey",e),l.YubiKey.getOtpCodes(e,((n,s)=>{if(n)return t(n);for(const t of s)this.entries.push(new r.OtpEntryModel({id:this.entryId(t.title,t.user),file:this,device:this,deviceSubId:e,icon:"clock",title:t.title,user:t.user,needsTouch:t.needsTouch}));t()}))}_openComplete(){this.active=!0,this._buildEntryMap(),s.Events.on("usb-devices-changed",this.onUsbDevicesChanged)}cancelOpen(){l.YubiKey.abort(),s.Events.off("usb-devices-changed",this.onUsbDevicesChanged)}getOtp(e,t){const n=3e4-Date.now()%3e4+500;l.YubiKey.getOtp(e.deviceSubId,`${e.title}:${e.user}`,((e,s)=>{t(e,s,n)}))}cancelGetOtp(e,t){t&&t.kill()}close(e){s.Events.off("usb-devices-changed",this.onUsbDevicesChanged),this.set({active:!1})}}u.defineModelProperties({onUsbDevicesChanged:null})},8925:(e,t,n)=>{"use strict";n.r(t),n.d(t,{RuntimeDataModel:()=>o});var s=n(9186),i=n(6524);class r extends s.Model{constructor(){super(),this.on("change",(()=>this.save()))}load(){return i.SettingsStore.load("runtime-data").then((e=>{e&&this.set(e,{silent:!0})}))}save(){i.SettingsStore.save("runtime-data",this)}}r.defineModelProperties({},{extensions:!0});const o=new r;window.RuntimeDataModel=o},2706:(e,t,n)=>{"use strict";n.r(t),n.d(t,{UpdateModel:()=>o});var s=n(9186),i=n(6524);class r extends s.Model{load(){return i.SettingsStore.load("update-info").then((e=>{if(e)try{for(const[t,n]of Object.entries(e))/Date$/.test(t)&&(e[t]=n?new Date(n):null);this.set(e,{silent:!0})}catch(e){}}))}save(){const e=Object.assign({},this);for(const t of Object.keys(e))0===t.lastIndexOf("update",0)&&delete e[t];i.SettingsStore.save("update-info",e)}}r.defineModelProperties({lastSuccessCheckDate:null,lastCheckDate:null,lastVersion:null,lastVersionReleaseDate:null,lastCheckError:null,lastCheckUpdMin:null,status:null,updateStatus:null,updateError:null,updateManual:!1});const o=new r},484:(e,t,n)=>{"use strict";n.r(t),n.d(t,{PluginApi:()=>i});const s={kdbxweb:n(3617),hbs:n(7109),pikaday:n(4319),qrcode:n(8767)},i={require:e=>s[e]||n(7814)("./"+e)}},1525:(e,t,n)=>{"use strict";n.r(t),n.d(t,{PluginCollection:()=>r});var s=n(9071),i=n(1203);class r extends s.Collection{}r.model=i.Plugin},3172:(e,t,n)=>{"use strict";n.r(t),n.d(t,{PluginGallery:()=>l});var s=n(3617),i=n(7201),r=n(6524),o=n(9673),a=n(7536);const l={logger:new(n(2363).Logger)("plugin-gallery"),gallery:null,loading:!1,loadError:null,loadPlugins(){if(this.gallery)return Promise.resolve(this.gallery);this.loading=!0,this.loadError=!1;const e=this.logger.ts();return new Promise((e=>{this.logger.debug("Loading plugins...");const t=new XMLHttpRequest;t.open("GET",o.Links.Plugins+"/plugins.json"),t.responseType="json",t.send(),t.addEventListener("load",(()=>{const n=t.response;e(n)})),t.addEventListener("error",(()=>{this.logger.error("Network error loading plugins"),e()}))})).then((t=>(this.loading=!1,t?this.verifySignature(t).then((t=>(this.loadError=!t,t&&(this.logger.debug(`Loaded ${t.plugins.length} plugins`,this.logger.ts(e)),this.gallery=t,this.saveGallery(t)),i.Events.emit("plugin-gallery-load-complete"),t))):(this.loadError=!0,void i.Events.emit("plugin-gallery-load-complete"))))).catch((e=>{this.loadError=!0,this.logger.error("Error loading plugin gallery",e),i.Events.emit("plugin-gallery-load-complete")}))},verifySignature(e){const t=JSON.stringify(e,null,2).replace(e.signature,"");return a.SignatureVerifier.verify(s.ByteUtils.stringToBytes(t),e.signature).then((t=>{if(t)return e;this.logger.error("JSON signature invalid")})).catch((e=>{this.logger.error("Error verifying plugins signature",e)}))},getCachedGallery(){const e=this.logger.ts();return r.SettingsStore.load("plugin-gallery").then((t=>{if(t)return this.verifySignature(t).then((t=>(this.logger.debug("Loaded cached plugin gallery",this.logger.ts(e)),t)))}))},saveGallery(e){r.SettingsStore.save("plugin-gallery",e)}}},739:(e,t,n)=>{"use strict";n.r(t),n.d(t,{PluginManager:()=>m});var s=n(9186),i=n(7119),r=n(6524),o=n(1203),a=n(1525),l=n(3172),c=n(7536),u=n(2363),d=n(6838);const h=new u.Logger("plugin-mgr");class p extends s.Model{constructor(){super({plugins:new a.PluginCollection})}init(){const e=h.ts();return r.SettingsStore.load("plugins").then((t=>{if(t&&(this.set({autoUpdateAppVersion:t.autoUpdateAppVersion,autoUpdateDate:t.autoUpdateDate}),t&&t.plugins&&t.plugins.length))return l.PluginGallery.getCachedGallery().then((n=>{const s=t.plugins.map((e=>this.loadPlugin(e,n)));return Promise.all(s).then((t=>{this.plugins.push(...t.filter((e=>e))),h.info(`Loaded ${this.plugins.length} plugins`,h.ts(e))}))}))}))}install(e,t,n){return this.emit("change"),o.Plugin.loadFromUrl(e,t).then((e=>this.uninstall(e.id).then((()=>(n&&(e.skipSignatureValidation=!0),e.install(!0,!1).then((()=>{this.plugins.push(e),this.emit("change"),this.saveState()}))))))).catch((e=>{throw this.emit("change"),e}))}installIfNew(e,t,n){const s=this.plugins.find((t=>t.url===e));return s&&"invalid"!==s.status?Promise.resolve():this.install(e,t,n)}uninstall(e){const t=this.plugins.get(e);return t?(this.emit("change"),t.uninstall().then((()=>{this.plugins.remove(e),this.emit("change"),this.saveState()}))):Promise.resolve()}disable(e){const t=this.plugins.get(e);return t&&t.status===o.PluginStatus.STATUS_ACTIVE?(this.emit("change"),t.disable().then((()=>{this.emit("change"),this.saveState()}))):Promise.resolve()}activate(e){const t=this.plugins.get(e);return t&&t.status!==o.PluginStatus.STATUS_ACTIVE?(this.emit("change"),t.install(!0,!0).then((()=>{this.emit("change"),this.saveState()}))):Promise.resolve()}update(e){const t=this.plugins.get(e),n=[o.PluginStatus.STATUS_ACTIVE,o.PluginStatus.STATUS_INACTIVE,o.PluginStatus.STATUS_NONE,o.PluginStatus.STATUS_ERROR,o.PluginStatus.STATUS_INVALID];if(!t||n.indexOf(t.status)<0)return Promise.reject();const s=t.url;return this.emit("change"),o.Plugin.loadFromUrl(s).then((e=>t.update(e).then((()=>{this.emit("change"),this.saveState()})).catch((e=>{throw this.emit("change"),e})))).catch((e=>{throw this.emit("change"),e}))}setAutoUpdate(e,t){const n=this.plugins.get(e);n&&n.autoUpdate!==t&&(n.setAutoUpdate(t),this.emit("change"),this.saveState())}runAutoUpdate(){const e=this.plugins.filter((e=>e.autoUpdate)).map((e=>e.id));if(!e.length)return Promise.resolve();const t=this.autoUpdateAppVersion!==i.RuntimeInfo.version,n=!this.autoUpdateDate||Date.now()-this.autoUpdateDate>p.UpdateInterval;if(!(t||n))return;h.info("Auto-updating plugins",e.join(", ")),this.set({autoUpdateAppVersion:i.RuntimeInfo.version,autoUpdateDate:Date.now()}),this.saveState();const s=()=>{const t=e.shift();if(t)return this.update(t).catch(d.noop).then(s)};return s()}loadPlugin(e,t){const n=new o.Plugin({manifest:e.manifest,url:e.url,autoUpdate:e.autoUpdate});let s=e.enabled;if(s){const n=t?t.plugins.find((t=>t.manifest.name===e.manifest.name)):null;s=(n?[n.manifest.publicKey]:c.SignatureVerifier.getPublicKeys()).includes(e.manifest.publicKey)}return n.install(s,!0).then((()=>n)).catch((()=>n))}saveState(){r.SettingsStore.save("plugins",{autoUpdateAppVersion:this.autoUpdateAppVersion,autoUpdateDate:this.autoUpdateDate,plugins:this.plugins.map((e=>({manifest:e.manifest,url:e.url,enabled:"active"===e.status,autoUpdate:e.autoUpdate})))})}getStatus(e){const t=this.plugins.get(e);return t?t.status:""}getPlugin(e){return this.plugins.get(e)}}p.UpdateInterval=6048e5,p.defineModelProperties({plugins:null,autoUpdateAppVersion:null,autoUpdateDate:null});const m=new p},1203:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Plugin:()=>Plugin,PluginStatus:()=>PluginStatus});var kdbxweb__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(3617),kdbxweb__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(kdbxweb__WEBPACK_IMPORTED_MODULE_0__),locales_base_json__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(6846),framework_model__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(9186),const_runtime_info__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(7119),comp_launcher__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(9491),comp_settings_settings_manager__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(111),models_app_settings_model__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(7614),plugins_plugin_api__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(484),plugins_theme_vars__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__(7378),storage_io_cache__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__(3366),util_data_semver__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__(8146),util_data_signature_verifier__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__(7536),util_logger__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__(2363);const commonLogger=new util_logger__WEBPACK_IMPORTED_MODULE_12__.Logger("plugin"),io=new storage_io_cache__WEBPACK_IMPORTED_MODULE_9__.IoCache({cacheName:"PluginFiles",logger:new util_logger__WEBPACK_IMPORTED_MODULE_12__.Logger("storage-plugin-files")}),PluginStatus={STATUS_NONE:"",STATUS_ACTIVE:"active",STATUS_INACTIVE:"inactive",STATUS_INSTALLING:"installing",STATUS_ACTIVATING:"activating",STATUS_UNINSTALLING:"uninstalling",STATUS_UPDATING:"updating",STATUS_INVALID:"invalid",STATUS_ERROR:"error"};class Plugin extends framework_model__WEBPACK_IMPORTED_MODULE_2__.Model{constructor(e){const t=e.manifest.name;if(!t)throw new Error("Cannot create a plugin without name");super(Object.assign({id:t,name:t,resources:{},logger:new util_logger__WEBPACK_IMPORTED_MODULE_12__.Logger(`plugin:${t}`)},e))}install(e,t){const n=this.logger.ts();return this.status=PluginStatus.STATUS_INSTALLING,Promise.resolve().then((()=>{const s=this.validateManifest();if(s)throw this.logger.error("Manifest validation error",s),this.status=PluginStatus.STATUS_INVALID,"Plugin validation error: "+s;if(this.status=PluginStatus.STATUS_INACTIVE,e)return this.installWithManifest(t).then((()=>{this.installTime=this.logger.ts()-n})).catch((e=>{throw this.logger.error("Error installing plugin",e),this.set({status:PluginStatus.STATUS_ERROR,installError:e,installTime:this.logger.ts()-n,updateError:null}),e}));this.logger.info("Loaded inactive plugin")}))}validateManifest(){const e=this.manifest;if(!e.name)return"No plugin name";if(!e.description)return"No plugin description";if(!/^\d+\.\d+\.\d+$/.test(e.version||""))return"Invalid plugin version";if("0.1.0"!==e.manifestVersion)return"Invalid manifest version "+e.manifestVersion;if(!(e.author&&e.author.email&&e.author.name&&e.author.url))return"Invalid plugin author";if(!e.url)return"No plugin url";if(!e.publicKey)return"No plugin public key";if(!this.skipSignatureValidation&&!util_data_signature_verifier__WEBPACK_IMPORTED_MODULE_11__.SignatureVerifier.getPublicKeys().includes(e.publicKey))return"Public key mismatch";if(!e.resources||!Object.keys(e.resources).length)return"No plugin resources";if(e.resources.loc&&(!e.locale||!e.locale.title||!/^[a-z]{2}(-[A-Z]{2})?$/.test(e.locale.name)))return"Bad plugin locale";if(e.desktop&&!comp_launcher__WEBPACK_IMPORTED_MODULE_4__.Launcher)return"Desktop plugin";if(e.versionMin){if(!/^\d+\.\d+\.\d+$/.test(e.versionMin))return"Invalid versionMin";if(util_data_semver__WEBPACK_IMPORTED_MODULE_10__.SemVer.compareVersions(e.versionMin,const_runtime_info__WEBPACK_IMPORTED_MODULE_3__.RuntimeInfo.version)>0)return`Required min app version is ${e.versionMin}, actual ${const_runtime_info__WEBPACK_IMPORTED_MODULE_3__.RuntimeInfo.version}`}if(e.versionMax){if(!/^\d+\.\d+\.\d+$/.test(e.versionMax))return"Invalid versionMin";if(util_data_semver__WEBPACK_IMPORTED_MODULE_10__.SemVer.compareVersions(e.versionMax,const_runtime_info__WEBPACK_IMPORTED_MODULE_3__.RuntimeInfo.version)<0)return`Required max app version is ${e.versionMax}, actual ${const_runtime_info__WEBPACK_IMPORTED_MODULE_3__.RuntimeInfo.version}`}}validateUpdatedManifest(e){const t=this.manifest;if(t.name!==e.name)return"Plugin name mismatch";if(t.publicKey!==e.publicKey){const n=util_data_signature_verifier__WEBPACK_IMPORTED_MODULE_11__.SignatureVerifier.getPublicKeys().includes(t.publicKey),s=util_data_signature_verifier__WEBPACK_IMPORTED_MODULE_11__.SignatureVerifier.getPublicKeys().includes(e.publicKey);if(!n||!s)return"Public key mismatch"}}installWithManifest(e){const t=this.manifest;this.logger.info("Loading plugin with resources",Object.keys(t.resources).join(", "),e?"(local)":"(url)"),this.resources={};const n=this.logger.ts(),s=Object.keys(t.resources).map((n=>this.loadResource(n,e,t)));return Promise.all(s).catch((()=>{throw"Error loading plugin resources"})).then((()=>this.installWithResources())).then((()=>e?void 0:this.saveResources())).then((()=>{this.logger.info("Install complete",this.logger.ts(n))}))}getResourcePath(e){switch(e){case"css":return"plugin.css";case"js":return"plugin.js";case"loc":return this.manifest.locale.name+".json";default:throw`Unknown resource ${e}`}}getStorageResourcePath(e){return this.id+"_"+this.getResourcePath(e)}loadResource(e,t,n){const s=this.logger.ts();let i;if(t)i=new Promise(((t,n)=>{const s=this.getStorageResourcePath(e);io.load(s,((e,s)=>e?n(e):t(s)))}));else{i=httpGet(this.url+this.getResourcePath(e)+"?v="+n.version,!0)}return i.then((t=>(this.logger.debug("Resource data loaded",e,this.logger.ts(s)),this.verifyResource(t,e).then((t=>{this.resources[e]=t})))))}verifyResource(e,t){const n=this.logger.ts(),s=this.manifest,i=s.resources[t];return util_data_signature_verifier__WEBPACK_IMPORTED_MODULE_11__.SignatureVerifier.verify(e,i,s.publicKey).then((s=>{if(s)return this.logger.debug("Resource signature validated",t,this.logger.ts(n)),e;throw this.logger.error("Resource signature invalid",t),`Signature invalid: ${t}`})).catch((()=>{throw this.logger.error("Error validating resource signature",t),`Error validating resource signature for ${t}`}))}installWithResources(){this.logger.info("Installing plugin resources");const e=this.manifest,t=[];return this.resources.css&&t.push(this.applyCss(e.name,this.resources.css,e.theme)),this.resources.js&&t.push(this.applyJs(e.name,this.resources.js)),this.resources.loc&&t.push(this.applyLoc(e.locale,this.resources.loc)),Promise.all(t).then((()=>{this.status=PluginStatus.STATUS_ACTIVE})).catch((e=>(this.logger.info("Install error",e),this.status=PluginStatus.STATUS_ERROR,this.disable().then((()=>{throw e})))))}saveResources(){const e=[];for(const t of Object.keys(this.resources))e.push(this.saveResource(t,this.resources[t]));return Promise.all(e).catch((e=>(this.logger.debug("Error saving plugin resources",e),this.uninstall().then((()=>{throw"Error saving plugin resources"})))))}saveResource(e,t){return new Promise(((n,s)=>{const i=this.getStorageResourcePath(e);io.save(i,t,(e=>{e?s(e):n()}))}))}deleteResources(){const e=[];for(const t of Object.keys(this.resources))e.push(this.deleteResource(t));return Promise.all(e)}deleteResource(e){return new Promise((t=>{const n=this.getStorageResourcePath(e);io.remove(n,(()=>t()))}))}applyCss(e,t,n){return new Promise(((s,i)=>{try{const i=new Blob([t],{type:"text/css"}),r=URL.createObjectURL(i),o="plugin-css-"+e;this.createElementInHead("link",o,{rel:"stylesheet",href:r}).addEventListener("load",(()=>{if(URL.revokeObjectURL(r),n){const e=this.getThemeLocaleKey(n.name);comp_settings_settings_manager__WEBPACK_IMPORTED_MODULE_5__.SettingsManager.allThemes[n.name]=e,locales_base_json__WEBPACK_IMPORTED_MODULE_1__[e]=n.title;for(const e of Array.from(document.styleSheets))if(e.ownerNode.id===o){this.processThemeStyleSheet(e,n);break}}this.logger.debug("Plugin style installed"),s()}))}catch(e){this.logger.error("Error installing plugin style",e),i(e)}}))}processThemeStyleSheet(e,t){const n=".th-"+t.name,s=[];for(const t of Array.from(e.cssRules))t.selectorText&&0!==t.selectorText.lastIndexOf(n,0)&&s.push(t.selectorText),t.selectorText===n&&this.addThemeVariables(t);if(s.length)throw this.logger.error("Themes must not add rules outside theme namespace. Bad selectors:",s),"Invalid theme"}addThemeVariables(e){plugins_theme_vars__WEBPACK_IMPORTED_MODULE_8__.ThemeVars.apply(e.style)}applyJs(name,data){return new Promise(((resolve,reject)=>{try{let text=kdbxweb__WEBPACK_IMPORTED_MODULE_0__.ByteUtils.bytesToString(data);this.module={exports:{}};const jsVar="plugin-"+Date.now().toString()+Math.random().toString();__webpack_require__.g[jsVar]={require:plugins_plugin_api__WEBPACK_IMPORTED_MODULE_7__.PluginApi.require,module:this.module},text=`(function(require, module){${text}})(window["${jsVar}"].require,window["${jsVar}"].module);`;const ts=this.logger.ts();eval(text),setTimeout((()=>{delete __webpack_require__.g[jsVar],this.module.exports.uninstall?(this.logger.debug("Plugin script installed",this.logger.ts(ts)),this.loadPluginSettings(),resolve()):reject("Plugin script installation failed")}),0)}catch(e){this.logger.error("Error installing plugin script",e),reject(e)}}))}createElementInHead(e,t,n){let s=document.getElementById(t);s&&s.parentNode.removeChild(s),s=document.createElement(e),s.setAttribute("id",t);for(const[e,t]of Object.entries(n))s.setAttribute(e,t);return document.head.appendChild(s),s}removeElement(e){const t=document.getElementById(e);t&&t.parentNode.removeChild(t)}applyLoc(e,t){return Promise.resolve().then((()=>{const n=kdbxweb__WEBPACK_IMPORTED_MODULE_0__.ByteUtils.bytesToString(t),s=JSON.parse(n);comp_settings_settings_manager__WEBPACK_IMPORTED_MODULE_5__.SettingsManager.allLocales[e.name]=e.title,comp_settings_settings_manager__WEBPACK_IMPORTED_MODULE_5__.SettingsManager.customLocales[e.name]=s,this.logger.debug("Plugin locale installed")}))}removeLoc(e){delete comp_settings_settings_manager__WEBPACK_IMPORTED_MODULE_5__.SettingsManager.allLocales[e.name],delete comp_settings_settings_manager__WEBPACK_IMPORTED_MODULE_5__.SettingsManager.customLocales[e.name],comp_settings_settings_manager__WEBPACK_IMPORTED_MODULE_5__.SettingsManager.activeLocale===e.name&&(models_app_settings_model__WEBPACK_IMPORTED_MODULE_6__.AppSettingsModel.locale="en-US")}getThemeLocaleKey(e){return`setGenThemeCustom_${e}`}removeTheme(e){delete comp_settings_settings_manager__WEBPACK_IMPORTED_MODULE_5__.SettingsManager.allThemes[e.name],models_app_settings_model__WEBPACK_IMPORTED_MODULE_6__.AppSettingsModel.theme===e.name&&(models_app_settings_model__WEBPACK_IMPORTED_MODULE_6__.AppSettingsModel.theme=comp_settings_settings_manager__WEBPACK_IMPORTED_MODULE_5__.SettingsManager.getDefaultTheme()),delete locales_base_json__WEBPACK_IMPORTED_MODULE_1__[this.getThemeLocaleKey(e.name)]}loadPluginSettings(){if(!this.module||!this.module.exports||!this.module.exports.setSettings)return;const e=this.logger.ts(),t=this.getSettingPrefix();let n=null;for(const e of Object.keys(models_app_settings_model__WEBPACK_IMPORTED_MODULE_6__.AppSettingsModel))0===e.lastIndexOf(t,0)&&(n||(n={}),n[e.replace(t,"")]=models_app_settings_model__WEBPACK_IMPORTED_MODULE_6__.AppSettingsModel[e]);n&&this.setSettings(n),this.logger.debug("Plugin settings loaded",this.logger.ts(e))}uninstallPluginCode(){if(this.manifest.resources.js&&this.module&&this.module.exports&&this.module.exports.uninstall)try{this.module.exports.uninstall()}catch(e){this.logger.error("Plugin uninstall method returned an error",e)}}uninstall(){const e=this.logger.ts();return this.disable().then((()=>this.deleteResources().then((()=>{this.status="",this.logger.info("Uninstall complete",this.logger.ts(e))}))))}disable(){const e=this.manifest;this.logger.info("Disabling plugin with resources",Object.keys(e.resources).join(", ")),this.status=PluginStatus.STATUS_UNINSTALLING;const t=this.logger.ts();return Promise.resolve().then((()=>{e.resources.css&&this.removeElement("plugin-css-"+this.name),e.resources.js&&this.uninstallPluginCode(),e.resources.loc&&this.removeLoc(this.manifest.locale),e.theme&&this.removeTheme(e.theme),this.status=PluginStatus.STATUS_INACTIVE,this.logger.info("Disable complete",this.logger.ts(t))}))}update(e){const t=this.logger.ts(),n=this.status;return this.status=PluginStatus.STATUS_UPDATING,Promise.resolve().then((()=>{const s=this.manifest,i=e.manifest;if(s.version===i.version)return this.set({status:n,updateCheckDate:Date.now(),updateError:null}),void this.logger.info(`v${s.version} is the latest plugin version`);this.logger.info(`Updating plugin from v${s.version} to v${i.version}`);const r=e.validateManifest()||this.validateUpdatedManifest(i);if(r)throw this.logger.error("Manifest validation error",r),this.set({status:n,updateCheckDate:Date.now(),updateError:r}),"Plugin validation error: "+r;return this.uninstallPluginCode(),e.installWithManifest(!1).then((()=>{this.module=e.module,this.resources=e.resources,this.set({status:PluginStatus.STATUS_ACTIVE,manifest:i,installTime:this.logger.ts()-t,installError:null,updateCheckDate:Date.now(),updateError:null}),this.logger.info("Update complete",this.logger.ts(t))})).catch((e=>{if(this.logger.error("Error updating plugin",e),n===PluginStatus.STATUS_ACTIVE)return this.logger.info("Activating previous version"),this.installWithResources().then((()=>{throw this.set({updateCheckDate:Date.now(),updateError:e}),e}));throw this.set({status:n,updateCheckDate:Date.now(),updateError:e}),e}))}))}setAutoUpdate(e){this.autoUpdate=!!e}getSettingPrefix(){return`plugin:${this.id}:`}getSettings(){if(this.status===PluginStatus.STATUS_ACTIVE&&this.module&&this.module.exports&&this.module.exports.getSettings)try{const e=this.module.exports.getSettings(),t=this.getSettingPrefix();if(e instanceof Array)return e.map((e=>{e=Object.assign({},e);const n=models_app_settings_model__WEBPACK_IMPORTED_MODULE_6__.AppSettingsModel[t+e.name];return void 0!==n&&(e.value=n),e}));this.logger.error("getSettings: expected Array, got ",typeof e)}catch(e){this.logger.error("getSettings error",e)}}setSettings(e){for(const t of Object.keys(e))models_app_settings_model__WEBPACK_IMPORTED_MODULE_6__.AppSettingsModel[this.getSettingPrefix()+t]=e[t];if(this.module.exports.setSettings)try{this.module.exports.setSettings(e)}catch(e){this.logger.error("setSettings error",e)}}static loadFromUrl(e,t){"/"!==e[e.length-1]&&(e+="/"),commonLogger.info("Installing plugin from url",e);return httpGet(e+"manifest.json").catch((e=>{throw commonLogger.error("Error loading plugin manifest",e),"Error loading plugin manifest"})).then((n=>{try{n=JSON.parse(n)}catch(e){throw commonLogger.error("Failed to parse manifest",n),"Failed to parse manifest"}if(commonLogger.debug("Loaded manifest",n),t){if(t.name!==n.name)throw"Bad plugin name";if(t.privateKey!==n.privateKey)throw"Bad plugin private key"}return new Plugin({manifest:n,url:e})}))}}function httpGet(e,t){commonLogger.debug("GET",e);const n=commonLogger.ts();return new Promise(((s,i)=>{const r=new XMLHttpRequest;r.addEventListener("load",(()=>{200===r.status?(commonLogger.debug("GET OK",e,commonLogger.ts(n)),s(r.response)):(commonLogger.debug("GET error",e,r.status),i(r.status?`HTTP status ${r.status}`:"network error"))})),r.addEventListener("error",(()=>{commonLogger.debug("GET error",e,r.status),i(r.status?`HTTP status ${r.status}`:"network error")})),r.addEventListener("abort",(()=>{commonLogger.debug("GET aborted",e),i("Network request timeout")})),r.addEventListener("timeout",(()=>{commonLogger.debug("GET timeout",e),i("Network request timeout")})),t&&(r.responseType=t?"arraybuffer":"text"),r.open("GET",e),r.send()}))}Plugin.defineModelProperties({id:"",name:"",logger:null,manifest:"",url:"",status:"",autoUpdate:!1,installTime:null,installError:null,updateCheckDate:null,updateError:null,skipSignatureValidation:!1,resources:null,module:null}),Object.assign(Plugin,PluginStatus)},7378:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ThemeVars:()=>i});var s=n(4546);const i={themeDefaults:null,newLineRegEx:/[\n\s]+/g,themeVarsRegEx:/([\w\-]+):([^:]+),(\$)?/g,init(){if(this.themeDefaults)return;this.themeDefaults={};const e=/\s([\w\-]+):\s*([^,\s]+)/g;let t;do{if(t=e.exec("$theme-defaults: (\n mute-percent: 30%,\n light-border-percent: 20%,\n modal-opacity: 0.9,\n color-lightness-shift: 0\n);\n"),t){const[,e,n]=t;this.themeDefaults["--"+e]=n}}while(t)},apply(e){this.init();const t="/* This file is also parsed in JS to build theme styles, see theme-vars.js */\n@function set-theme-vars($t) {\n @return map-merge(\n (\n muted-color:\n mix(\n map-get($t, medium-color),\n map-get($t, background-color),\n map-get($t, mute-percent)\n ),\n muted-color-border:\n mix(\n map-get($t, medium-color),\n map-get($t, background-color),\n semi-mute-percent(map-get($t, mute-percent))\n ),\n text-selection-bg-color: rgba(map-get($t, action-color), 0.3),\n text-selection-bg-color-error: rgba(map-get($t, error-color), 0.8),\n text-semi-muted-color: mix(map-get($t, action-color), map-get($t, text-color), 0.5),\n text-contrast-action-color:\n text-contrast-color(\n map-get($t, action-color),\n map-get($t, color-lightness-shift),\n map-get($t, background-color),\n map-get($t, text-color)\n ),\n text-contrast-error-color:\n text-contrast-color(\n map-get($t, error-color),\n map-get($t, color-lightness-shift),\n map-get($t, background-color),\n map-get($t, text-color)\n ),\n base-border-color: mix(map-get($t, medium-color), map-get($t, background-color), 50%),\n accent-border-color: mix(map-get($t, medium-color), map-get($t, background-color), 65%),\n light-border-color:\n mix(\n map-get($t, medium-color),\n map-get($t, background-color),\n map-get($t, light-border-percent)\n ),\n form-box-border-color-focus:\n mix(map-get($t, action-color), map-get($t, text-color), 70%),\n form-box-shadow-color-focus:\n rgba(mix(map-get($t, action-color), map-get($t, text-color), 70%), 0.7),\n form-box-shadow-color-hover:\n rgba(mix(map-get($t, action-color), map-get($t, text-color), 70%), 0.5),\n form-box-shadow-color-focus-error: lightness-alpha(map-get($t, error-color), -5%, -0.3),\n secondary-background-color:\n mix(map-get($t, medium-color), map-get($t, background-color), 10%),\n intermediate-background-color:\n mix(map-get($t, medium-color), map-get($t, background-color), 3%),\n intermediate-pressed-background-color:\n mix(map-get($t, medium-color), map-get($t, background-color), 2.6%),\n disabled-background-color: shade(map-get($t, background-color), 5%),\n unselected-background-color:\n mix(map-get($t, medium-color), map-get($t, background-color), 9%),\n unselected-background-color-hover:\n mix(map-get($t, medium-color), map-get($t, background-color), 14%),\n action-background-color-focus: shade(map-get($t, action-color), 20%),\n action-background-color-focus-tr: rgba(shade(map-get($t, action-color), 20%), 0.1),\n error-background-color-focus: shade(map-get($t, error-color), 20%),\n error-background-color-focus-tr: rgba(shade(map-get($t, error-color), 20%), 0.1),\n action-background-color-active: shade(map-get($t, action-color), 25%),\n action-background-color-active-tr: rgba(shade(map-get($t, action-color), 25%), 0.15),\n error-background-color-active: shade(map-get($t, error-color), 25%),\n error-background-color-active-tr: rgba(shade(map-get($t, error-color), 25%), 0.15),\n modal-background-color: rgba(map-get($t, background-color), map-get($t, modal-opacity)),\n modal-background-color-tr: rgba(map-get($t, background-color), 0),\n selected-item-color: mix(map-get($t, action-color), map-get($t, background-color), 85%),\n selected-on-secondary-item-color:\n mix(map-get($t, medium-color), map-get($t, background-color), 30%),\n selectable-on-secondary-item-color:\n mix(map-get($t, medium-color), map-get($t, background-color), 14%),\n clickable-on-secondary-color:\n mix(map-get($t, medium-color), map-get($t, background-color), 75%),\n titlebar-button-background-color: rgba(map-get($t, text-color), 0.085)\n ),\n $t\n );\n}\n".replace(this.newLineRegEx,"").matchAll(this.themeVarsRegEx);for(let[,n,s,i]of t){i&&s.endsWith(")")&&(s=s.substr(0,s.length-1));const t="--"+n;if(e.getPropertyValue(t))continue;let r=s.replace(/map-get\(\$t,\s*([\w\-]+)\)/g,"--$1"),o=!0;const a=[];for(;o;)o=!1,r=r.replace(/([\w\-]+)\([^()]+\)/,(t=>{o=!0;const[,n,s]=t.match(/([\w\-]+)\((.*)\)/),i=s.trim().split(/\s*,\s*/).filter((e=>e)).map((t=>this.resolveArg(t,e,a)));return a.push(this.fn[n](...i)),"L"+(a.length-1)}));r=a[a.length-1],e.setProperty(t,r)}},resolveArg(e,t,n){if(/^--/.test(e)){let n=t.getPropertyValue(e);if(n&&(n=n.trim()),n)e=n;else{if(!this.themeDefaults[e])throw new Error("Css property missing: "+e);e=this.themeDefaults[e]}}if(/^L/.test(e))return n[e.substr(1)];if(/%$/.test(e))return e.replace(/%$/,"")/100;if(/^-?[\d.]+?$/.test(e))return+e;if(/^(#|rgb)/.test(e))return new s.Color(e);throw new Error("Bad css arg: "+e)},fn:{mix:(e,t,n)=>e.mix(t,n).toRgba(),"semi-mute-percent":e=>e/2,rgba(e,t){const n=new s.Color(e);return n.a=t,n.toRgba()},"text-contrast-color":(e,t,n,s)=>e.l-t>=n.l?s.toRgba():n.toRgba(),"lightness-alpha"(e,t,n){const i=new s.Color(e);return i.l+=Math.min(0,Math.max(1,t)),i.a+=Math.min(0,Math.max(1,n)),i.toHsla()},shade:(e,t)=>s.Color.black.mix(e,t).toRgba()}}},9938:(e,t,n)=>{"use strict";n.r(t),n.d(t,{EntryPresenter:()=>r});var s=n(6098),i=n(3297);const r=function(e,t,n){this.entry=null,this.descField=e,this.noColor=t||"",this.activeEntryId=n};r.prototype={present(e){return e.entry?this.entry=e:e.group&&(this.group=e),this},reset(){this.entry=null,this.group=null},get id(){return this.entry?this.entry.id:this.group.id},get icon(){return this.entry?this.entry.icon:this.group.icon||"folder"},get customIcon(){return this.entry?this.entry.customIcon:void 0},get color(){return this.entry?this.entry.color||(this.entry.customIcon?this.noColor:void 0):void 0},get title(){return this.entry?this.entry.title:this.group.title},get notes(){return this.entry?this.entry.notes:void 0},get url(){return this.entry?this.entry.displayUrl:void 0},get user(){return this.entry?this.entry.user:void 0},get active(){return this.entry?this.entry.id===this.activeEntryId:this.group.active},get created(){return this.entry?s.DateFormat.dtStr(this.entry.created):void 0},get updated(){return this.entry?s.DateFormat.dtStr(this.entry.updated):void 0},get expired(){return!!this.entry&&this.entry.expired},get tags(){return this.entry?this.entry.tags:void 0},get groupName(){return this.entry?this.entry.groupName:void 0},get fileName(){return this.entry?this.entry.fileName:void 0},get description(){if(!this.entry)return"["+i.Locale.listGroup+"]";if("otp-device"===this.entry.backend)return this.entry.description;switch(this.descField){case"website":return this.url||"("+i.Locale.listNoWebsite+")";case"user":return this.user||"("+i.Locale.listNoUser+")";case"created":return this.created;case"updated":return this.updated;case"attachments":return this.entry.attachments.map((e=>e.title)).join(", ")||"("+i.Locale.listNoAttachments+")";default:return this.user||this.notes||this.url}}}},7980:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StorageCache:()=>r});var s=n(6902),i=n(8402);class r extends i.StorageBase{constructor(...e){super(...e),this.name="cache",this.enabled=s.IoBrowserCache.enabled,this.system=!0,this.io=null}init(){super.init(),this.io=new s.IoBrowserCache({cacheName:"FilesCache",logger:this.logger})}save(e,t,n,s){this.io.save(e,n,s)}load(e,t,n){this.io.load(e,n)}remove(e,t,n){this.io.remove(e,n)}}},526:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StorageDropbox:()=>c});var s=n(8402),i=n(667),r=n(4798),o=n(5754),a=n(3297);const l="bad-key";class c extends s.StorageBase{constructor(...e){super(...e),this.name="dropbox",this.icon="dropbox",this.enabled=!0,this.uipos=20,this.backup=!0}_toFullPath(e){const t=this.appSettings.dropboxFolder;return t&&(e=r.UrlFormat.fixSlashes("/"+t+"/"+e)),e}_toRelPath(e){const t=this.appSettings.dropboxFolder;if(t){const n=e.toLowerCase().indexOf(t.toLowerCase());0===n?e=e.substr(t.length):1===n&&(e=e.substr(t.length+1)),e=r.UrlFormat.fixSlashes("/"+e)}return e}_fixConfigFolder(e){return"/"===(e=e.replace(/\\/g,"/").trim())[0]&&(e=e.substr(1)),e}_getKey(){return this.appSettings.dropboxAppKey||o.DropboxApps.AppFolder.id}_getSecret(){const e=this._getKey();return e===o.DropboxApps.AppFolder.id?o.DropboxApps.AppFolder.secret:e===o.DropboxApps.FullDropbox.id?o.DropboxApps.FullDropbox.secret:this.appSettings.dropboxSecret}_isValidKey(){const e=this._getKey(),t=e===o.DropboxApps.AppFolder.id||e===o.DropboxApps.FullDropbox.id;return e&&e.indexOf(" ")<0&&(!t||this._canUseBuiltInKeys())}_canUseBuiltInKeys(){return!i.Features.isSelfHosted}_getOAuthConfig(){return{scope:"files.content.read files.content.write files.metadata.read files.metadata.write",url:"https://www.dropbox.com/oauth2/authorize",tokenUrl:"https://api.dropboxapi.com/oauth2/token",clientId:this._getKey(),clientSecret:this._getSecret(),pkce:!0,width:600,height:400,urlParams:this.appSettings.shortLivedStorageToken?{}:{token_access_type:"offline"}}}needShowOpenConfig(){return!this._isValidKey()||!this._getSecret()}getOpenConfig(){return{desc:"dropboxSetupDesc",fields:[{id:"key",title:"dropboxAppKey",desc:"dropboxAppKeyDesc",type:"text",required:!0,pattern:"\\w+"},{id:"secret",title:"dropboxAppSecret",desc:"dropboxAppSecretDesc",type:"password",required:!0,pattern:"\\w+"},{id:"folder",title:"dropboxFolder",desc:"dropboxFolderDesc",type:"text",placeholder:"dropboxFolderPlaceholder"}]}}getSettingsConfig(){const e=[],t=this._getKey(),n={id:"link",title:"dropboxLink",type:"select",value:"custom",options:{app:"dropboxLinkApp",full:"dropboxLinkFull",custom:"dropboxLinkCustom"}},s={id:"key",title:"dropboxAppKey",desc:"dropboxAppKeyDesc",type:"text",required:!0,pattern:"\\w+",value:t},i={id:"secret",title:"dropboxAppSecret",desc:"dropboxAppSecretDesc",type:"password",required:!0,pattern:"\\w+",value:this.appSettings.dropboxSecret||""},r={id:"folder",title:"dropboxFolder",desc:"dropboxFolderSettingsDesc",type:"text",value:this.appSettings.dropboxFolder||""};return this._canUseBuiltInKeys()?(e.push(n),t===o.DropboxApps.AppFolder.id?n.value="app":t===o.DropboxApps.FullDropbox.id?(n.value="full",e.push(r)):(e.push(s),e.push(i),e.push(r))):(e.push(s),e.push(i),e.push(r)),{fields:e}}applyConfig(e,t){if(e.key===o.DropboxApps.AppFolder.id||e.key===o.DropboxApps.FullDropbox.id)return t(l);e.folder&&(e.folder=this._fixConfigFolder(e.folder)),this.appSettings.set({dropboxAppKey:e.key,dropboxSecret:e.secret,dropboxFolder:e.folder}),t()}applySetting(e,t){switch(e){case"link":switch(e="dropboxAppKey",t){case"app":t=o.DropboxApps.AppFolder.id;break;case"full":t=o.DropboxApps.FullDropbox.id;break;case"custom":t=`(${a.Locale.dropboxAppKeyHint})`;break;default:return}this.logout();break;case"key":e="dropboxAppKey",this.logout();break;case"secret":e="dropboxSecret",this.logout();break;case"folder":e="dropboxFolder",t=this._fixConfigFolder(t);break;default:return}this.appSettings[e]=t}getPathForName(e){return"/"+e+".kdbx"}_encodeJsonHttpHeader(e){return e.replace(/[\u007f-\uffff]/g,(e=>"\\u"+("000"+e.charCodeAt(0).toString(16)).slice(-4)))}_apiCall(e){this._oauthAuthorize((t=>{if(t)return e.error(t);const n=e.host||"api";let s,i,r=e.data;e.apiArg?s={"Dropbox-API-Arg":this._encodeJsonHttpHeader(JSON.stringify(e.apiArg))}:e.data&&(r=JSON.stringify(r),i="application/json"),this._xhr({url:`https://${n}.dropboxapi.com/2/${e.method}`,method:"POST",responseType:e.responseType||"json",headers:s,data:r,dataType:i,statuses:e.statuses||void 0,success:e.success,error:(t,n)=>{let s=n.response&&n.response.error||new Error("Network error");s&&s.path&&"not_found"===s.path[".tag"]?(s=new Error("File removed"),s.notFound=!0,this.logger.debug("File not found",e.method)):this.logger.error("API error",e.method,n.status,s),s.status=n.status,e.error(s)}})}))}load(e,t,n){this.logger.debug("Load",e);const s=this.logger.ts();e=this._toFullPath(e),this._apiCall({method:"files/download",host:"content",apiArg:{path:e},responseType:"arraybuffer",success:(t,i)=>{const r=JSON.parse(i.getResponseHeader("dropbox-api-result"));this.logger.debug("Loaded",e,r.rev,this.logger.ts(s)),n(null,t,{rev:r.rev})},error:n})}stat(e,t,n){this.logger.debug("Stat",e);const s=this.logger.ts();e=this._toFullPath(e),this._apiCall({method:"files/get_metadata",data:{path:e},success:t=>{"file"===t[".tag"]?t={rev:t.rev}:"folder"===t[".tag"]&&(t={folder:!0}),this.logger.debug("Stated",e,t.folder?"folder":t.rev,this.logger.ts(s)),n&&n(null,t)},error:n})}save(e,t,n,s,i){this.logger.debug("Save",e,i);const r=this.logger.ts(),o={path:e=this._toFullPath(e),mode:i?{".tag":"update",update:i}:{".tag":"overwrite"}};this._apiCall({method:"files/upload",host:"content",apiArg:o,data:n,responseType:"json",success:t=>{this.logger.debug("Saved",e,t.rev,this.logger.ts(r)),s(null,{rev:t.rev})},error:s})}list(e,t){this.logger.debug("List");const n=this.logger.ts();this._apiCall({method:"files/list_folder",data:{path:this._toFullPath(e||""),recursive:!1},success:e=>{this.logger.debug("Listed",this.logger.ts(n));const s=e.entries.map((e=>({name:e.name,path:this._toRelPath(e.path_display),rev:e.rev,dir:"file"!==e[".tag"]})));t(null,s)},error:t})}remove(e,t){this.logger.debug("Remove",e);const n=this.logger.ts();e=this._toFullPath(e),this._apiCall({method:"files/delete",data:{path:e},success:()=>{this.logger.debug("Removed",e,this.logger.ts(n)),t()},error:t})}mkdir(e,t){this.logger.debug("Make dir",e);const n=this.logger.ts();e=this._toFullPath(e),this._apiCall({method:"files/create_folder",data:{path:e},success:()=>{this.logger.debug("Made dir",e,this.logger.ts(n)),t()},error:t})}logout(){this._oauthRevokeToken("https://api.dropboxapi.com/2/auth/token/revoke",{method:"POST"})}}},3758:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StorageFileCache:()=>r});var s=n(9491),i=n(8402);class r extends i.StorageBase{constructor(...e){super(...e),this.name="cache",this.enabled=!!s.Launcher,this.system=!0,this.path=null}getPath(e){return s.Launcher.joinPath(this.path,e)}initFs(e){if(this.path)return e&&e();const t=s.Launcher.getUserDataPath("OfflineFiles"),n=n=>(this.path=n?null:t,n&&this.logger.error("Error opening local offline storage",n),e&&e(n));s.Launcher.fileExists(t,(e=>{e?n():s.Launcher.mkdir(t,n)}))}save(e,t,n,i){this.logger.debug("Save",e),this.initFs((t=>{if(t)return i&&i(t);const r=this.logger.ts();s.Launcher.writeFile(this.getPath(e),n,(t=>{if(t)return this.logger.error("Error saving to cache",e,t),i&&i(t);this.logger.debug("Saved",e,this.logger.ts(r)),i&&i()}))}))}load(e,t,n){this.logger.debug("Load",e),this.initFs((t=>{if(t)return n&&n(null,t);const i=this.logger.ts();s.Launcher.readFile(this.getPath(e),void 0,((t,s)=>s?(this.logger.error("Error loading from cache",e,s),n&&n(s,null)):(this.logger.debug("Loaded",e,this.logger.ts(i)),n&&n(null,t.buffer))))}))}remove(e,t,n){this.logger.debug("Remove",e),this.initFs((t=>{if(t)return n&&n(t);const i=this.logger.ts(),r=this.getPath(e);s.Launcher.fileExists(r,(t=>{t?s.Launcher.deleteFile(r,(t=>(t?this.logger.error("Error removing from cache",e,t):this.logger.debug("Removed",e,this.logger.ts(i)),n&&n(t)))):n&&n()}))}))}}},7899:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StorageFile:()=>o});var s=n(9491),i=n(8402);const r={};class o extends i.StorageBase{constructor(...e){super(...e),this.name="file",this.icon="hdd",this.enabled=!!s.Launcher,this.system=!0,this.backup=!0}load(e,t,n){this.logger.debug("Load",e);const i=this.logger.ts(),r=t=>{this.logger.error("Error reading local file",e,t),n&&n(t,null)};s.Launcher.readFile(e,void 0,((t,o)=>{if(o)return r(o);s.Launcher.statFile(e,((s,o)=>{if(o)return r(o);const a=s.mtime.getTime().toString();this.logger.debug("Loaded",e,a,this.logger.ts(i)),n&&n(null,t.buffer,{rev:a})}))}))}stat(e,t,n){this.logger.debug("Stat",e);const i=this.logger.ts();s.Launcher.statFile(e,((t,s)=>{if(s)return this.logger.error("Error stat local file",e,s),"ENOENT"===s.code&&(s.notFound=!0),n&&n(s,null);if(this.logger.debug("Stat done",e,this.logger.ts(i)),n){const e=t.mtime.getTime().toString();n(null,{rev:e})}}))}save(e,t,n,i,r){this.logger.debug("Save",e,r);const o=this.logger.ts(),a=t=>{Object.prototype.hasOwnProperty.call(t,"code")&&"EISDIR"===t.code&&(t.isDir=!0),this.logger.error("Error writing local file",e,t),i&&i(t)},l=()=>{s.Launcher.writeFile(e,n,(t=>{if(t)return a(t);s.Launcher.statFile(e,((t,n)=>{if(n)return a(n);const s=t.mtime.getTime().toString();this.logger.debug("Saved",e,this.logger.ts(o)),i&&i(void 0,{rev:s})}))}))};r?s.Launcher.statFile(e,((e,t)=>{if(t)return l();const n=e.mtime.getTime().toString();if(n!==r)return this.logger.debug("Save mtime differs",r,n),i&&i({revConflict:!0},{rev:n});l()})):l()}mkdir(e,t){this.logger.debug("Make dir",e);const n=this.logger.ts();s.Launcher.mkdir(e,(s=>{s?(this.logger.error("Error making local dir",e,s),t&&t("Error making local dir")):(this.logger.debug("Made dir",e,this.logger.ts(n)),t&&t())}))}watch(e,t){const n=s.Launcher.parsePath(e);if(!r[n.dir]&&!n.dir.startsWith("\\")){let e;this.logger.debug("Watch dir",n.dir);try{e=s.Launcher.createFsWatcher(n.dir)}catch(e){this.logger.warn("Error watching dir",e)}e&&(e.on("change",this.fsWatcherChange.bind(this,n.dir)),r[n.dir]={fsWatcher:e,callbacks:[]})}const i=r[n.dir];i&&i.callbacks.push({file:n.file,callback:t})}unwatch(e){const t=s.Launcher.parsePath(e),n=r[t.dir];if(n){const e=n.callbacks.findIndex((e=>e.file===t.file));e>=0&&n.callbacks.splice(e,1),n.callbacks.length||(this.logger.debug("Stop watch dir",t.dir),n.fsWatcher.close(),delete r[t.dir])}}fsWatcherChange(e,t,n){const s=r[e];s&&s.callbacks.forEach((s=>{s.file===n&&"function"==typeof s.callback&&(this.logger.debug("File changed",e,t,n),s.callback())}))}}},5661:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StorageGDrive:()=>c});var s=n(8402),i=n(3297),r=n(667),o=n(4798),a=n(5754);const l="NewFile:";class c extends s.StorageBase{constructor(...e){super(...e),this.name="gdrive",this.enabled=!0,this.uipos=30,this.icon="google-drive",this._baseUrl="https://www.googleapis.com/drive/v3",this._baseUrlUpload="https://www.googleapis.com/upload/drive/v3"}getPathForName(e){return l+e}load(e,t,n){this.stat(e,t,((t,s)=>{if(t)return n&&n(t);this.logger.debug("Load",e);const i=this.logger.ts(),r=o.UrlFormat.makeUrl(`${this._baseUrl}/files/${e}/revisions/${s.rev}`,{alt:"media"});this._xhr({url:r,responseType:"arraybuffer",success:t=>(this.logger.debug("Loaded",e,s.rev,this.logger.ts(i)),n&&n(null,t,{rev:s.rev})),error:t=>(this.logger.error("Load error",e,t,this.logger.ts(i)),n&&n(t))})}))}stat(e,t,n){if(0===e.lastIndexOf(l,0))return n&&n({notFound:!0});this._oauthAuthorize((t=>{if(t)return n&&n(t);this.logger.debug("Stat",e);const s=this.logger.ts(),i=o.UrlFormat.makeUrl(`${this._baseUrl}/files/${e}`,{fields:"headRevisionId",includeItemsFromAllDrives:!0,supportsAllDrives:!0});this._xhr({url:i,responseType:"json",success:t=>{const i=t.headRevisionId;return this.logger.debug("Stated",e,i,this.logger.ts(s)),n&&n(null,{rev:i})},error:e=>(this.logger.error("Stat error",this.logger.ts(s),e),n&&n(e))})}))}save(e,t,n,s,i){this._oauthAuthorize((r=>{if(r)return s&&s(r);this.stat(e,t,((t,r)=>{if(i){if(t)return s&&s(t);if(r.rev!==i)return s&&s({revConflict:!0},r)}this.logger.debug("Save",e);const a=this.logger.ts(),c=0===e.lastIndexOf(l,0);let u,d,h=!1;if(c){u=o.UrlFormat.makeUrl(`${this._baseUrlUpload}/files`,{uploadType:"multipart",fields:"id,headRevisionId",includeItemsFromAllDrives:!0,supportsAllDrives:!0});const t=e.replace(l,"")+".kdbx",s="b"+Date.now()+"x"+Math.round(1e6*Math.random());n=["--",s,"\r\n","Content-Type: application/json; charset=UTF-8","\r\n\r\n",JSON.stringify({name:t}),"\r\n","--",s,"\r\n","Content-Type: application/octet-stream","\r\n\r\n",n,"\r\n","--",s,"--","\r\n"],d='multipart/related; boundary="'+s+'"',h=!0}else u=o.UrlFormat.makeUrl(`${this._baseUrlUpload}/files/${e}`,{uploadType:"media",fields:"headRevisionId",includeItemsFromAllDrives:!0,supportsAllDrives:!0});this._xhr({url:u,method:c?"POST":"PATCH",responseType:"json",data:n,dataType:d,dataIsMultipart:h,success:t=>{this.logger.debug("Saved",e,this.logger.ts(a));const n=t.headRevisionId;return n?s&&s(null,{rev:n,path:c?t.id:null}):s&&s("save error: no rev")},error:t=>(this.logger.error("Save error",e,t,this.logger.ts(a)),s&&s(t))})}))}))}list(e,t){this._oauthAuthorize((n=>{if(n)return t&&t(n);this.logger.debug("List");const s=this.logger.ts();if("drives"===e){const e={pageSize:100},n=o.UrlFormat.makeUrl(`${this._baseUrl}/drives`,e);this._xhr({url:n,responseType:"json",success:e=>{if(!e)return this.logger.error("Drive list error",this.logger.ts(s)),null==t?void 0:t("drive list error");this.logger.debug("Listed drives",this.logger.ts(s));const n=e.drives.map((e=>({name:e.name,path:e.id,dir:!0})));return null==t?void 0:t(null,n)},error:e=>(this.logger.error("Drive dist error",this.logger.ts(s),e),null==t?void 0:t(e))})}else{let n="trashed=false and ";n+="shared"===e?"sharedWithMe=true":e?`"${e}" in parents`:'"root" in parents';const r={fields:"files(id,name,mimeType,headRevisionId)",q:n,pageSize:1e3,includeItemsFromAllDrives:!0,supportsAllDrives:!0},a=o.UrlFormat.makeUrl(`${this._baseUrl}/files`,r);this._xhr({url:a,responseType:"json",success:n=>{if(!n)return this.logger.error("List error",this.logger.ts(s)),null==t?void 0:t("list error");this.logger.debug("Listed",this.logger.ts(s));const r=n.files.map((e=>({name:e.name,path:e.id,rev:e.headRevisionId,dir:"application/vnd.google-apps.folder"===e.mimeType})));return e||(r.unshift({name:i.Locale.gdriveSharedWithMe,path:"shared",rev:void 0,dir:!0}),r.unshift({name:i.Locale.gdriveSharedDrives,path:"drives",rev:void 0,dir:!0})),null==t?void 0:t(null,r)},error:e=>(this.logger.error("List error",this.logger.ts(s),e),null==t?void 0:t(e))})}}))}remove(e,t){this.logger.debug("Remove",e);const n=this.logger.ts(),s=`${this._baseUrl}/files/${e}`;this._xhr({url:s,method:"DELETE",responseType:"json",statuses:[200,204],success:()=>(this.logger.debug("Removed",e,this.logger.ts(n)),t&&t()),error:s=>(this.logger.error("Remove error",e,s,this.logger.ts(n)),t&&t(s))})}logout(){this._oauthRevokeToken("https://accounts.google.com/o/oauth2/revoke?token={token}")}_getOAuthConfig(){let e=this.appSettings.gdriveClientId,t=this.appSettings.gdriveClientSecret;return e&&t||(r.Features.isDesktop?({id:e,secret:t}=a.GDriveApps.Desktop):r.Features.isLocal?({id:e,secret:t}=a.GDriveApps.Local):({id:e,secret:t}=a.GDriveApps.Production)),{scope:"https://www.googleapis.com/auth/drive",url:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",clientId:e,clientSecret:t,width:600,height:400,pkce:!0,urlParams:this.appSettings.shortLivedStorageToken?{}:{access_type:"offline"}}}}},1854:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StorageOneDrive:()=>o});var s=n(8402),i=n(5754),r=n(667);class o extends s.StorageBase{constructor(...e){super(...e),this.name="onedrive",this.enabled=!0,this.uipos=40,this.icon="onedrive",this._baseUrl="https://graph.microsoft.com/v1.0/me"}getPathForName(e){return"/drive/root:/"+e+".kdbx"}load(e,t,n){this._oauthAuthorize((t=>{if(t)return n&&n(t);this.logger.debug("Load",e);const s=this.logger.ts(),i=this._baseUrl+e;this._xhr({url:i,responseType:"json",success:t=>{const i=t["@microsoft.graph.downloadUrl"];let r=t.eTag;if(!i||!t.eTag)return this.logger.debug("Load error",e,"no download url",t,this.logger.ts(s)),n&&n("no download url");this._xhr({url:i,responseType:"arraybuffer",skipAuth:!0,success:(t,i)=>(r=i.getResponseHeader("ETag")||r,this.logger.debug("Loaded",e,r,this.logger.ts(s)),n&&n(null,t,{rev:r})),error:t=>(this.logger.error("Load error",e,t,this.logger.ts(s)),n&&n(t))})},error:t=>(this.logger.error("Load error",e,t,this.logger.ts(s)),n&&n(t))})}))}stat(e,t,n){this._oauthAuthorize((t=>{if(t)return n&&n(t);this.logger.debug("Stat",e);const s=this.logger.ts(),i=this._baseUrl+e;this._xhr({url:i,responseType:"json",success:t=>{const i=t.eTag;return i?(this.logger.debug("Stated",e,i,this.logger.ts(s)),n&&n(null,{rev:i})):(this.logger.error("Stat error",e,"no eTag",this.logger.ts(s)),n&&n("no eTag"))},error:(t,i)=>404===i.status?(this.logger.debug("Stated not found",e,this.logger.ts(s)),n&&n({notFound:!0})):(this.logger.error("Stat error",e,t,this.logger.ts(s)),n&&n(t))})}))}save(e,t,n,s,i){this._oauthAuthorize((t=>{if(t)return s&&s(t);this.logger.debug("Save",e,i);const r=this.logger.ts(),o=this._baseUrl+e+":/content";this._xhr({url:o,method:"PUT",responseType:"json",headers:i?{"If-Match":i}:null,data:n,statuses:[200,201,412],success:(t,n)=>(i=t.eTag)?412===n.status?(this.logger.debug("Save conflict",e,i,this.logger.ts(r)),s&&s({revConflict:!0},{rev:i})):(this.logger.debug("Saved",e,i,this.logger.ts(r)),s&&s(null,{rev:i})):(this.logger.error("Save error",e,"no eTag",this.logger.ts(r)),s&&s("no eTag")),error:t=>(this.logger.error("Save error",e,t,this.logger.ts(r)),s&&s(t))})}))}list(e,t){this._oauthAuthorize((n=>{if(n)return t&&t(n);this.logger.debug("List");const s=this.logger.ts(),i=this._baseUrl+(e?`${e}:/children`:"/drive/root/children");this._xhr({url:i,responseType:"json",success:e=>{if(!e||!e.value)return this.logger.error("List error",this.logger.ts(s),e),t&&t("list error");this.logger.debug("Listed",this.logger.ts(s));const n=e.value.filter((e=>e.name)).map((e=>({name:e.name,path:e.parentReference.path+"/"+e.name,rev:e.eTag,dir:!!e.folder})));return t&&t(null,n)},error:e=>(this.logger.error("List error",this.logger.ts(s),e),t&&t(e))})}))}remove(e,t){this.logger.debug("Remove",e);const n=this.logger.ts(),s=this._baseUrl+e;this._xhr({url:s,method:"DELETE",responseType:"json",statuses:[200,204],success:()=>(this.logger.debug("Removed",e,this.logger.ts(n)),t&&t()),error:s=>(this.logger.error("Remove error",e,s,this.logger.ts(n)),t&&t(s))})}mkdir(e,t){this._oauthAuthorize((n=>{if(n)return t&&t(n);this.logger.debug("Make dir",e);const s=this.logger.ts(),i=this._baseUrl+"/drive/root/children",r=JSON.stringify({name:e.replace("/drive/root:/",""),folder:{}});this._xhr({url:i,method:"POST",responseType:"json",statuses:[200,204],data:r,dataType:"application/json",success:()=>(this.logger.debug("Made dir",e,this.logger.ts(s)),t&&t()),error:n=>(this.logger.error("Make dir error",e,n,this.logger.ts(s)),t&&t(n))})}))}logout(e){this._oauthRevokeToken()}_getOAuthConfig(){let e=this.appSettings.onedriveClientId,t=this.appSettings.onedriveClientSecret,n=this.appSettings.onedriveTenantId;e||(r.Features.isDesktop?({id:e,secret:t,tenantId:n}=i.OneDriveApps.Desktop):r.Features.isLocal?({id:e,secret:t,tenantId:n}=i.OneDriveApps.Local):({id:e,secret:t,tenantId:n}=i.OneDriveApps.Production)),n=n||"common";let s="files.readwrite";return this.appSettings.shortLivedStorageToken||(s+=" offline_access"),{url:`https://login.microsoftonline.com/${n}/oauth2/v2.0/authorize`,tokenUrl:`https://login.microsoftonline.com/${n}/oauth2/v2.0/token`,scope:s,clientId:e,clientSecret:t,pkce:!0,width:600,height:500}}}},194:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StorageTeams:()=>o});var s=n(8402),i=n(5754),r=n(667);class o extends s.StorageBase{constructor(...e){super(...e),this.name="msteams",this.enabled=!0,this.uipos=50,this.icon="user-friends",this._graphUrl="https://graph.microsoft.com/v1.0",this._groupsUrl=`${this._graphUrl}/me/joinedTeams`,this._baseUrl=`${this._graphUrl}/groups`}getPathForName(e){return"/drive/root:/"+e+".kdbx"}genUrlAddress(e,t){return e?this._baseUrl+"/"+e+(t?"/"+t.replace(/^\/+/,""):""):this._groupsUrl}genUrl(e){if(!e){const e=null,t=null;return[e,t,this.genUrlAddress(e,t)]}const t=e.replace(/^\/+/,"").split("/");if(0===t.length){const e=null,t=null;return[e,t,this.genUrlAddress(e,t)]}if(1===t.length){const e=t[0],n=null;return[e,n,this.genUrlAddress(e,n)]}{e=e.replace(/\/drive\/root\:/,"");const n=t[0],s=("/"+t.slice(1).join("/")).replace(/^\/+/,"");return[n,s,this.genUrlAddress(n,s)]}}load(e,t,n){this._oauthAuthorize((t=>{if(t)return n&&n(t);this.logger.debug("Load",e);const s=this.logger.ts(),i=this.genUrl(e),r=i[0];e=i[1];const o=i[2];if(!r){const e="no group id defined";return n&&n(e)}this._xhr({url:o,responseType:"json",success:t=>{const i=t["@microsoft.graph.downloadUrl"];let r=t.eTag;if(!i||!t.eTag)return this.logger.debug("Load error",e,"no download url",t,this.logger.ts(s)),n&&n("no download url");this._xhr({url:i,responseType:"arraybuffer",skipAuth:!0,success:(t,i)=>(r=i.getResponseHeader("ETag")||r,this.logger.debug("Loaded",e,r,this.logger.ts(s)),n&&n(null,t,{rev:r})),error:t=>(this.logger.error("Load error",e,t,this.logger.ts(s)),n&&n(t))})},error:t=>(this.logger.error("Load error",e,t,this.logger.ts(s)),n&&n(t))})}))}stat(e,t,n){this._oauthAuthorize((t=>{if(t)return n&&n(t);this.logger.debug("Stat",e);const s=this.logger.ts(),i=this.genUrl(e),r=i[0];e=i[1];const o=i[2];if(!r){const e="no group id defined";return n&&n(e)}this._xhr({url:o,responseType:"json",success:t=>{const i=t.eTag;return i?(this.logger.debug("Stated",e,i,this.logger.ts(s)),n&&n(null,{rev:i})):(this.logger.error("Stat error",e,"no eTag",this.logger.ts(s)),n&&n("no eTag"))},error:(t,i)=>404===i.status?(this.logger.debug("Stated not found",e,this.logger.ts(s)),n&&n({notFound:!0})):(this.logger.error("Stat error",e,t,this.logger.ts(s)),n&&n(t))})}))}save(e,t,n,s,i){this._oauthAuthorize((t=>{if(t)return s&&s(t);this.logger.debug("Save",e,i);const r=this.logger.ts(),o=this.genUrl(e),a=o[0];e=o[1];const l=o[2]+":/content";if(!a){const e="no group id defined";return s&&s(e)}this._xhr({url:l,method:"PUT",responseType:"json",headers:i?{"If-Match":i}:null,data:n,statuses:[200,201,412],success:(t,n)=>(i=t.eTag)?412===n.status?(this.logger.debug("Save conflict",e,i,this.logger.ts(r)),s&&s({revConflict:!0},{rev:i})):(this.logger.debug("Saved",e,i,this.logger.ts(r)),s&&s(null,{rev:i})):(this.logger.error("Save error",e,"no eTag",this.logger.ts(r)),s&&s("no eTag")),error:t=>(this.logger.error("Save error",e,t,this.logger.ts(r)),s&&s(t))})}))}list(e,t){this._oauthAuthorize((n=>{if(n)return t&&t(n);this.logger.debug("List",e);const s=this.logger.ts(),i=this.genUrl(e),r=i[0];e=i[1];const o=r?e?":/children":"/drive/root/children":"",a=i[2]+o,l=this;l._groupId=r,this._xhr({url:a,responseType:"json",success:e=>{if(!e||!e.value)return this.logger.error("List error",this.logger.ts(s),e),t&&t("list error");let n;return this.logger.debug("Listed",this.logger.ts(s)),n=l._groupId?e.value.filter((e=>e.name)).map((e=>({name:e.name,path:`/${l._groupId}${e.parentReference.path}/${e.name}`,rev:e.eTag,dir:!!e.folder}))):e.value.filter((e=>e.displayName)).map((e=>({name:e.displayName,path:"/"+e.id,rev:e.id,dir:!0}))),t&&t(null,n)},error:e=>(this.logger.error("List error",this.logger.ts(s),e),t&&t(e))})}))}remove(e,t){this.logger.debug("Remove",e);const n=this.logger.ts(),s=this.genUrl(e),i=s[0];e=s[1];const r=s[2];if(!i){const e="no group id defined";return t&&t(e)}this._xhr({url:r,method:"DELETE",responseType:"json",statuses:[200,204],success:()=>(this.logger.debug("Removed",e,this.logger.ts(n)),t&&t()),error:s=>(this.logger.error("Remove error",e,s,this.logger.ts(n)),t&&t(s))})}mkdir(e,t){this._oauthAuthorize((n=>{if(n)return t&&t(n);this.logger.debug("Make dir",e);const s=this.logger.ts(),i=this.genUrl(e),r=i[0];e=i[1];const o=i[2]+"/drive/root/children";if(!r){const e="no group id defined";return t&&t(e)}const a=JSON.stringify({name:e.replace("/drive/root:/",""),folder:{}});this._xhr({url:o,method:"POST",responseType:"json",statuses:[200,204],data:a,dataType:"application/json",success:()=>(this.logger.debug("Made dir",e,this.logger.ts(s)),t&&t()),error:n=>(this.logger.error("Make dir error",e,n,this.logger.ts(s)),t&&t(n))})}))}logout(e){this._oauthRevokeToken()}_getOAuthConfig(){let e=this.appSettings.msteamsClientId,t=this.appSettings.msteamsClientSecret,n=this.appSettings.msteamsTenantId;e||(r.Features.isDesktop?({id:e,secret:t,tenantId:n}=i.MsTeamsApps.Desktop):r.Features.isLocal?({id:e,secret:t,tenantId:n}=i.MsTeamsApps.Local):({id:e,secret:t,tenantId:n}=i.MsTeamsApps.Production)),n=n||"common";let s="Sites.ReadWrite.All Team.ReadBasic.All";return this.appSettings.shortLivedStorageToken||(s+=" offline_access"),{url:`https://login.microsoftonline.com/${n}/oauth2/v2.0/authorize`,tokenUrl:`https://login.microsoftonline.com/${n}/oauth2/v2.0/token`,scope:s,clientId:e,clientSecret:t,pkce:!0,width:600,height:500}}}},1337:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StorageWebDav:()=>o});var s=n(3617),i=n(8402),r=n(3297);class o extends i.StorageBase{constructor(...e){super(...e),this.name="webdav",this.icon="server",this.enabled=!0,this.uipos=10}needShowOpenConfig(){return!0}getOpenConfig(){return{fields:[{id:"path",title:"openUrl",desc:"openUrlDesc",type:"text",required:!0,pattern:"^https://.+"},{id:"user",title:"openUser",desc:"openUserDesc",placeholder:"openUserPlaceholder",type:"text"},{id:"password",title:"openPass",desc:"openPassDesc",placeholder:"openPassPlaceholder",type:"password"}]}}getSettingsConfig(){return{fields:[{id:"webdavSaveMethod",title:"webdavSaveMethod",type:"select",value:this.appSettings.webdavSaveMethod||"default",options:{default:"webdavSaveMove",put:"webdavSavePut"}},{id:"webdavStatReload",title:"webdavStatReload",type:"checkbox",value:!!this.appSettings.webdavStatReload}]}}applySetting(e,t){this.appSettings[e]=t}load(e,t,n){this._request({op:"Load",method:"GET",path:e,user:t?t.user:null,password:t?t.password:null,nostat:this.appSettings.webdavStatReload},n?(e,t,s)=>{this.appSettings.webdavStatReload?this._calcStatByContent(t).then((s=>n(e,t.response,s))):n(e,t.response,s)}:null)}stat(e,t,n){this._statRequest(e,t,"Stat",n?(e,t,s)=>n(e,s):null)}_statRequest(e,t,n,s){this.appSettings.webdavStatReload?this._request({op:n,method:"GET",path:e,user:t?t.user:null,password:t?t.password:null,nostat:!0},s?(e,t)=>{this._calcStatByContent(t).then((n=>s(e,t,n)))}:null):this._request({op:n,method:"HEAD",path:e,user:t?t.user:null,password:t?t.password:null},s?(e,t,n)=>{s(e,t,n)}:null)}save(e,t,n,s,i){const r=function(e,t,n){s&&(s(e,n),s=null)},o=e.replace(/[^\/]+$/,(e=>"."+e))+"."+Date.now(),a={path:e,user:t?t.user:null,password:t?t.password:null};this._statRequest(e,t,"Save:stat",((s,l,c)=>{let u="put"!==this.appSettings.webdavSaveMethod;if(s){if(!s.notFound)return r(s);this.logger.debug("Save: not found, creating"),u=!1}else if(c.rev!==i)return this.logger.debug("Save error",e,"rev conflict",c.rev,i),r({revConflict:!0},0,c);u?this._request(Object.assign({},a,{op:"Save:put",method:"PUT",path:o,data:n,nostat:!0}),(n=>{if(n)return r(n);this._statRequest(e,t,"Save:stat",((n,s,l)=>{if(n)return this._request(Object.assign({},a,{op:"Save:delete",method:"DELETE",path:o})),r(n,0,l);if(l.rev!==i)return this.logger.debug("Save error",e,"rev conflict",l.rev,i),this._request(Object.assign({},a,{op:"Save:delete",method:"DELETE",path:o})),r({revConflict:!0},0,l);let c=e;c.indexOf("://")<0&&(c=0===c.indexOf("/")?location.protocol+"//"+location.host+c:location.href.replace(/\?(.*)/,"").replace(/[^/]*$/,c));const u=/%[A-Z0-9]{2}/.test(c)?c:encodeURI(c);this._request(Object.assign({},a,{op:"Save:move",method:"MOVE",path:o,nostat:!0,headers:{Destination:u,Overwrite:"T"}}),(n=>{if(n)return r(n);this._statRequest(e,t,"Save:stat",((e,t,n)=>{r(e,0,n)}))}))}))})):this._request(Object.assign({},a,{op:"Save:put",method:"PUT",data:n,nostat:!0}),(n=>{if(n)return r(n);this._statRequest(e,t,"Save:stat",((e,t,n)=>{r(e,0,n)}))}))}))}fileOptsToStoreOpts(e,t){const n={user:e.user,encpass:e.encpass};if(e.password){const s=t.uuid,i=e.password,r=this._xorString(i,s);n.encpass=btoa(r)}return n}storeOptsToFileOpts(e,t){const n={user:e.user,password:e.password};if(e.encpass){const s=t.uuid,i=atob(e.encpass);n.password=this._xorString(i,s)}return n}_xorString(e,t){let n="";for(let s=0;s<e.length;s++){const i=e.charCodeAt(s),r=s%t.length,o=i^t.charCodeAt(r);n+=String.fromCharCode(o)}return n}_request(e,t){e.rev?this.logger.debug(e.op,e.path,e.rev):this.logger.debug(e.op,e.path);const n=this.logger.ts(),s=new XMLHttpRequest;if(s.addEventListener("load",(()=>{if([200,201,204].indexOf(s.status)<0){let i;switch(this.logger.debug(e.op+" error",e.path,s.status,this.logger.ts(n)),s.status){case 404:i={notFound:!0};break;case 412:i={revConflict:!0};break;default:i="HTTP status "+s.status}return void(t&&(t(i,s),t=null))}const i=s.getResponseHeader("Last-Modified");if(!i&&!e.nostat)return this.logger.debug(e.op+" error",e.path,"no headers",this.logger.ts(n)),void(t&&(t(r.Locale.webdavNoLastModified,s),t=null));const o=e.op+("e"===e.op.charAt(e.op.length-1)?"d":"ed");this.logger.debug(o,e.path,i,this.logger.ts(n)),t&&(t(null,s,i?{rev:i}:null),t=null)})),s.addEventListener("error",(()=>{this.logger.debug(e.op+" error",e.path,this.logger.ts(n)),t&&(t("network error",s),t=null)})),s.addEventListener("abort",(()=>{this.logger.debug(e.op+" error",e.path,"aborted",this.logger.ts(n)),t&&(t("aborted",s),t=null)})),s.open(e.method,e.path),s.responseType="arraybuffer",e.user&&s.setRequestHeader("Authorization","Basic "+btoa(e.user+":"+e.password)),e.headers)for(const[t,n]of Object.entries(e.headers))s.setRequestHeader(t,n);if(["GET","HEAD"].indexOf(e.method)>=0&&s.setRequestHeader("Cache-Control","no-cache"),e.data){const t=new Blob([e.data],{type:"application/octet-stream"});s.send(t)}else s.send()}_calcStatByContent(e){return 200===e.status&&"arraybuffer"===e.responseType&&e.response&&e.response.byteLength?s.CryptoEngine.sha256(e.response).then((t=>{const n=s.ByteUtils.bytesToHex(t).substr(0,10);return this.logger.debug("Calculated rev by content",`${e.response.byteLength} bytes`,n),{rev:n}})):(this.logger.debug("Cannot calculate rev by content"),null)}}},949:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Storage:()=>g});var s=n(9491),i=n(7980),r=n(526),o=n(7899),a=n(3758),l=n(5661),c=n(1854),u=n(194),d=n(1337),h=n(5434);const p={file:new o.StorageFile,cache:s.Launcher?new a.StorageFileCache:new i.StorageCache},m={dropbox:new r.StorageDropbox,gdrive:new l.StorageGDrive,onedrive:new c.StorageOneDrive,msteams:new u.StorageTeams,webdav:new d.StorageWebDav},g=p;s.Launcher&&!s.Launcher.thirdPartyStoragesSupported||Object.assign(g,m),requestAnimationFrame(h.createOAuthSession)},6902:(e,t,n)=>{"use strict";n.r(t),n.d(t,{IoBrowserCache:()=>i});const s=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,i=function(e){this.db=null,this.cacheName=e.cacheName,this.logger=e.logger};Object.assign(i.prototype,{initDb(e){if(this.db)return e&&e();try{const t=s.open(this.cacheName);t.onerror=t=>{this.logger.error("Error opening indexed db",t),e&&e(t)},t.onsuccess=t=>{this.db=t.target.result,e&&e()},t.onupgradeneeded=e=>{e.target.result.createObjectStore("files")}}catch(t){this.logger.error("Error opening indexed db",t),e&&e(t)}},save(e,t,n){this.logger.debug("Save",e),this.initDb((s=>{if(s)return n&&n(s);try{const s=this.logger.ts(),i=this.db.transaction(["files"],"readwrite").objectStore("files").put(t,e);i.onsuccess=()=>{this.logger.debug("Saved",e,this.logger.ts(s)),n&&n()},i.onerror=()=>{this.logger.error("Error saving to cache",e,i.error),n&&n(i.error)}}catch(t){this.logger.error("Error saving to cache",e,t),n&&n(t)}}))},load(e,t){this.logger.debug("Load",e),this.initDb((n=>{if(n)return t&&t(n,null);try{const n=this.logger.ts(),s=this.db.transaction(["files"],"readonly").objectStore("files").get(e);s.onsuccess=()=>{this.logger.debug("Loaded",e,this.logger.ts(n)),t&&t(null,s.result)},s.onerror=()=>{this.logger.error("Error loading from cache",e,s.error),t&&t(s.error)}}catch(n){this.logger.error("Error loading from cache",e,n),t&&t(n,null)}}))},remove(e,t){this.logger.debug("Remove",e),this.initDb((n=>{if(n)return t&&t(n);try{const n=this.logger.ts(),s=this.db.transaction(["files"],"readwrite").objectStore("files").delete(e);s.onsuccess=()=>{this.logger.debug("Removed",e,this.logger.ts(n)),t&&t()},s.onerror=()=>{this.logger.error("Error removing from cache",e,s.error),t&&t(s.error)}}catch(n){this.logger.error("Error removing from cache",e,n),t&&t(n)}}))}})},3366:(e,t,n)=>{"use strict";n.r(t),n.d(t,{IoCache:()=>o});var s=n(9491),i=n(7811),r=n(6902);const o=s.Launcher?i.IoFileCache:r.IoBrowserCache},7811:(e,t,n)=>{"use strict";n.r(t),n.d(t,{IoFileCache:()=>i});var s=n(9491);const i=function(e){this.basePath=null,this.cacheName=e.cacheName,this.logger=e.logger};Object.assign(i.prototype,{initFs(e){if(this.basePath)return e();const t=s.Launcher.getUserDataPath(this.cacheName);s.Launcher.mkdir(t,(n=>{n?this.logger.error("Error creating plugin folder"):this.basePath=t,e(n)}))},resolvePath(e){return s.Launcher.joinPath(this.basePath,e)},save(e,t,n){this.initFs((i=>{if(i)return n&&n(i,null);this.logger.debug("Save",e);const r=this.logger.ts(),o=this.resolvePath(e);s.Launcher.writeFile(o,t,(t=>{t?(this.logger.error("Error saving file",e,t),n&&n(t)):(this.logger.debug("Saved",e,this.logger.ts(r)),n&&n())}))}))},load(e,t){this.initFs((n=>{if(n)return t&&t(n,null);this.logger.debug("Load",e);const i=this.logger.ts(),r=this.resolvePath(e);s.Launcher.readFile(r,void 0,((n,s)=>{s?(this.logger.error("Error loading file",e,s),t&&t(s)):(this.logger.debug("Loaded",e,this.logger.ts(i)),t&&t(null,n))}))}))},remove(e,t){this.initFs((n=>{if(n)return t&&t(n,null);this.logger.debug("Remove",e);const i=this.logger.ts(),r=this.resolvePath(e);s.Launcher.deleteFile(r,(n=>{n?(this.logger.error("Error removing file",e,n),t&&t(n)):(this.logger.debug("Removed",e,this.logger.ts(i)),t&&t())}))}))}})},5434:(e,t,n)=>{"use strict";n.r(t),n.d(t,{createOAuthSession:()=>r});var s=n(3617);let i;function r(){const e=i,t=s.ByteUtils.bytesToHex(s.CryptoEngine.random(64)),n=s.ByteUtils.bytesToHex(s.CryptoEngine.random(50)),r=s.ByteUtils.arrayToBuffer(s.ByteUtils.stringToBytes(n));return s.CryptoEngine.sha256(r).then((e=>{const r=s.ByteUtils.bytesToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");i={state:t,codeChallenge:r,codeVerifier:n}})),i=null,e}},8402:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StorageBase:()=>m});var s=n(7201),i=n(9673),r=n(7614),o=n(8925),a=n(2363),l=n(4715),c=n(4798),u=n(9491),d=n(6838),h=n(667),p=n(5434);class m{constructor(){this.name=null,this.icon=null,this.enabled=!1,this.system=!1,this.uipos=null,this.logger=null,this.appSettings=r.AppSettingsModel,this.runtimeData=o.RuntimeDataModel}init(){if(!this.name)throw"Failed to init provider: no name";if(!this.system){const e=this.appSettings[this.name];"boolean"==typeof e&&(this.enabled=e)}return this.logger=new a.Logger("storage-"+this.name),this}setEnabled(e){e||this.logout(),this.enabled=e}get loggedIn(){return!!this.runtimeData[this.name+"OAuthToken"]}logout(){}deleteStoredToken(){delete this.runtimeData[this.name+"OAuthToken"]}_xhr(e){this.logger.info("HTTP request",e.method||"GET",e.url),e.data&&(e.dataType||(e.dataType="application/octet-stream"),e.headers=Object.assign({},e.headers,{"Content-Type":e.dataType})),this._oauthToken&&!e.skipAuth&&(e.headers=Object.assign({},e.headers,{Authorization:"Bearer "+this._oauthToken.accessToken})),this._httpRequest(e,(t=>{this.logger.info("HTTP response",t.status);return(e.statuses||[200]).indexOf(t.status)>=0?e.success&&e.success(t.response,t):401===t.status&&this._oauthToken?void this._oauthGetNewToken((n=>n?e.error&&e.error("unauthorized",t):(e.tryNum=(e.tryNum||0)+1,e.tryNum>=3?(this.logger.info("Too many authorize attempts, fail request",e.url),e.error&&e.error("unauthorized",t)):(this.logger.info("Repeat request, try #"+e.tryNum,e.url),void this._xhr(e))))):e.error&&e.error("http status "+t.status,t)}))}_httpRequest(e,t){(h.Features.isDesktop?this._httpRequestLauncher:this._httpRequestWeb).call(this,e,t)}_httpRequestWeb(e,t){const n=new XMLHttpRequest;if(e.responseType&&(n.responseType=e.responseType),n.addEventListener("load",(()=>{t({status:n.status,response:n.response,getResponseHeader:e=>n.getResponseHeader(e)})})),n.addEventListener("error",(()=>e.error&&e.error("network error",n))),n.addEventListener("timeout",(()=>e.error&&e.error("timeout",n))),n.open(e.method||"GET",e.url),e.headers)for(const[t,s]of Object.entries(e.headers))n.setRequestHeader(t,s);let s=e.data;s&&(e.dataIsMultipart||(s=[s]),s=new Blob(s,{type:e.dataType})),n.send(s)}_httpRequestLauncher(e,t){u.Launcher.remoteApp().httpRequest(e,((e,...t)=>this.logger[e](...t)),(({status:n,response:s,headers:i})=>{if(s=Buffer.from(s,"hex"),"json"===e.responseType)try{s=JSON.parse(s.toString("utf8"))}catch(t){return e.error&&e.error("json parse error")}else s=s.buffer.slice(s.byteOffset,s.byteOffset+s.length);t({status:n,response:s,getResponseHeader:e=>i[e.toLowerCase()]})}))}_openPopup(e,t,n,s,i){const r=void 0!==window.screenLeft?window.screenLeft:screen.left,o=void 0!==window.screenTop?window.screenTop:screen.top;let a={width:n,height:s,left:(window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width)/2-n/2+r,top:(window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height)/2-s/2+o,dialog:"yes",dependent:"yes",scrollbars:"yes",location:"yes"};return a=Object.keys(a).map((e=>e+"="+a[e])).join(","),window.open(e,t,a,i)}_getOauthRedirectUrl(){let e=window.location.href;return 0===e.lastIndexOf("file:",0)&&(e=i.Links.WebApp),new URL(`oauth-result/${this.name}.html`,e).href}_oauthAuthorize(e){if(this._tokenIsValid(this._oauthToken))return e();const t=this._getOAuthConfig(),n=this.runtimeData[this.name+"OAuthToken"];if(this._tokenIsValid(n))return this._oauthToken=n,e();if(n&&n.refreshToken)return this._oauthExchangeRefreshToken(e);const i=(0,p.createOAuthSession)();let r;h.Features.isDesktop?(r=l.StorageOAuthListener.listen(this.name),i.redirectUri=r.redirectUri):i.redirectUri=this._getOauthRedirectUrl();const o=t.pkce?{code_challenge:i.codeChallenge,code_challenge_method:"S256"}:void 0,a=c.UrlFormat.makeUrl(t.url,Object.assign({client_id:t.clientId,scope:t.scope,state:i.state,redirect_uri:i.redirectUri,response_type:"code"},o,t.urlParams));if(r)return r.on("ready",(()=>{u.Launcher.openLink(a),e("browser-auth-started")})),r.on("error",(t=>e(t))),void r.on("result",(e=>this._oauthCodeReceived(e,i)));if(!this._openPopup(a,"OAuth",t.width,t.height))return e("OAuth: cannot open popup");this.logger.debug("OAuth: popup opened");const d=t=>{const n={};for(const[e,s]of new URLSearchParams(t).entries())n[e]=s;n.error?(this.logger.error("OAuth error",n.error,n.error_description),e("OAuth: "+n.error)):n.code?(s.Events.off("popup-closed",m),window.removeEventListener("message",g),this._oauthCodeReceived(n,i,e)):this.logger.debug("Skipped OAuth message",n)},m=t=>{s.Events.off("popup-closed",m),window.removeEventListener("message",g),t.locationSearch?d(t.locationSearch):(this.logger.error("OAuth error","popup closed"),e("OAuth: popup closed"))},g=e=>{e.origin===location.origin&&(e.data&&e.data.storage&&e.data.search?e.data.storage===this.name?d(e.data.search):this.logger.debug("Skipped OAuth message for another storage",e.data.storage):this.logger.debug("Skipped empty OAuth message",e.data))};s.Events.on("popup-closed",m),window.addEventListener("message",g)}_oauthProcessReturn(e){const t=this._oauthMsgToToken(e);return t&&!t.error&&(this._oauthToken=t,this.appSettings.shortLivedStorageToken||(this.runtimeData[this.name+"OAuthToken"]=t),this.logger.debug("OAuth token received")),t}_oauthMsgToToken(e){return e.token_type?(0,d.omitEmpty)({dt:Date.now()-6e4,tokenType:e.token_type,accessToken:e.access_token,refreshToken:e.refresh_token,authenticationToken:e.authentication_token,expiresIn:+e.expires_in,scope:e.scope,userId:e.user_id}):e.error?{error:e.error,errorDescription:e.error_description}:void 0}_oauthGetNewToken(e){this._oauthToken.expired=!0,this.appSettings.shortLivedStorageToken||(this.runtimeData[this.name+"OAuthToken"]=this._oauthToken),this._oauthToken.refreshToken?this._oauthExchangeRefreshToken(e):this._oauthAuthorize(e)}_oauthRevokeToken(e,t){const n=this.runtimeData[this.name+"OAuthToken"];n&&(e&&this._xhr(Object.assign({url:e.replace("{token}",n.accessToken),statuses:[200,401]},t)),delete this.runtimeData[this.name+"OAuthToken"],this._oauthToken=null)}_tokenIsValid(e){return!(!e||e.expired)&&!(e.dt&&e.expiresIn&&e.dt+1e3*e.expiresIn<Date.now())}_oauthCodeReceived(e,t,n){if(!e.state)return this.logger.info("OAuth result has no state"),n&&n("OAuth result has no state");if(e.state!==t.state)return this.logger.info("OAuth result has bad state"),n&&n("OAuth result has bad state");if(!e.code)return this.logger.info("OAuth result has no code"),n&&n("OAuth result has no code");this.logger.debug("OAuth code received"),h.Features.isDesktop&&u.Launcher.showMainWindow();const s=this._getOAuthConfig(),i=s.pkce?{code_verifier:t.codeVerifier}:void 0;this._xhr({url:s.tokenUrl,method:"POST",responseType:"json",skipAuth:!0,data:c.UrlFormat.buildFormData(Object.assign({client_id:s.clientId},s.clientSecret?{client_secret:s.clientSecret}:null,{grant_type:"authorization_code",code:e.code,redirect_uri:t.redirectUri},i)),dataType:"application/x-www-form-urlencoded",success:e=>{this.logger.debug("OAuth code exchanged",e);const t=this._oauthProcessReturn(e);if(t&&t.error)return n&&n("OAuth code exchange error: "+t.error);null==n||n()},error:e=>{this.logger.error("Error exchanging OAuth code",e),null==n||n("OAuth code exchange error: "+e)}})}_oauthExchangeRefreshToken(e){this.logger.debug("Exchanging refresh token");const{refreshToken:t}=this.runtimeData[this.name+"OAuthToken"],n=this._getOAuthConfig();this._xhr({url:n.tokenUrl,method:"POST",responseType:"json",skipAuth:!0,data:c.UrlFormat.buildFormData(Object.assign({client_id:n.clientId},n.clientSecret?{client_secret:n.clientSecret}:null,{grant_type:"refresh_token",refresh_token:t})),dataType:"application/x-www-form-urlencoded",success:n=>{this.logger.debug("Refresh token exchanged"),this._oauthProcessReturn(Object.assign({refresh_token:t},n)),e()},error:(t,n)=>{400===n.status?(delete this.runtimeData[this.name+"OAuthToken"],this._oauthToken=null,this.logger.error("Error exchanging refresh token, trying to authorize again"),this._oauthAuthorize(e)):(this.logger.error("Error exchanging refresh token",t),null==e||e("Error exchanging refresh token"))}})}}},4715:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StorageOAuthListener:()=>d});var s=n(7187),i=n.n(s),r=n(2363),o=n(9491),a=n(7086),l=n(2460),c=n.n(l);const u=new r.Logger("storage-oauth-listener"),d={server:null,listen(e){this.server&&this.stop();const t={};Object.keys(i().prototype).forEach((e=>{t[e]=i().prototype[e]}));const n=o.Launcher.req("http");let s=!1;const r=n.createServer(((e,n)=>{n.writeHead(200,"OK",{"Content-Type":"text/html; charset=UTF-8"}),n.end(c()({logoSrc:a.KeeWebLogo})),s||(this.stop(),this.handleResult(e.url,t),s=!0)})),l=48149;return u.info("Starting OAuth listener on port 48149..."),r.listen(l),r.on("error",(e=>{u.error("Failed to start OAuth listener",e),t.emit("error","Failed to start OAuth listener: "+e),r.close()})),r.on("listening",(()=>{this.server=r,t.emit("ready")})),t.redirectUri=`http://localhost:48149/oauth-result/${e}.html`,t},stop(){this.server&&(this.server.close(),u.info("OAuth listener stopped"))},handleResult(e,t){if((e=new URL(e,t.redirectUri)).origin+e.pathname!==t.redirectUri)return void u.info("Skipped result",e,t.redirectUri);u.info("OAuth result with code received");const n=e.searchParams.get("state"),s=e.searchParams.get("code");t.emit("result",{state:n,code:s})}}},4546:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Color:()=>r});var s=n(7017);const i={},r=function(e){const t=/^rgba?\((\d+),\s*(\d+),\s*(\d+)(,\s*([\d.]+))?\)$/.exec(e);if(t)this.r=+t[1],this.g=+t[2],this.b=+t[2],this.a=t[4]?t[4]:1,this.setHsl();else{const t=/^#?([0-9a-f]{3,6})$/i.exec(e);if(t){const e=t[1],n=3===e.length?1:2;this.r=parseInt(e.substr(0,n),16),this.g=parseInt(e.substr(n,n),16),this.b=parseInt(e.substr(2*n,n),16),this.a=1,this.setHsl()}else e instanceof r?(this.r=e.r,this.g=e.g,this.b=e.b,this.h=e.h,this.s=e.s,this.l=e.l,this.a=e.a):(this.r=this.g=this.b=this.h=this.s=this.l=0,this.a=1)}};r.prototype.setHsl=function(){const e=this.r/255,t=this.g/255,n=this.b/255,s=Math.max(e,t,n),i=Math.min(e,t,n);let r,o;const a=(s+i)/2;if(s===i)r=o=0;else{const l=s-i;switch(o=a>.5?l/(2-s-i):l/(s+i),s){case e:r=(t-n)/l+(t<n?6:0);break;case t:r=(n-e)/l+2;break;case n:r=(e-t)/l+4}r/=6}this.h=r,this.s=o,this.l=a},r.prototype.toHex=function(){return"#"+o(this.r)+o(this.g)+o(this.b)},r.prototype.toRgba=function(){return`rgba(${Math.round(this.r)},${Math.round(this.g)},${Math.round(this.b)},${this.a})`},r.prototype.toHsla=function(){return`hsla(${Math.round(100*this.h)},${Math.round(100*this.s)}%,${Math.round(100*this.l)}%,${this.a})`},r.prototype.distanceTo=function(e){return Math.abs(this.h-e.h)},r.prototype.mix=function(e,t){const n=new r(this),s=1-t;return n.r=this.r*t+e.r*s,n.g=this.g*t+e.g*s,n.b=this.b*t+e.b*s,n.a=this.a*t+e.a*s,n},r.getNearest=function(e){const t=new r(e);if(!t.s)return null;let n=null,s=Number.MAX_VALUE;for(const[e,r]of Object.entries(i)){const i=t.distanceTo(r);i<s&&(s=i,n=e)}return n},r.getKnownBgColor=function(e){return s.Colors.BgColors[e]?"#"+s.Colors.BgColors[e]:void 0};for(const[e,t]of Object.entries(s.Colors.ColorsValues))i[e]=new r(t);function o(e){const t=(e||0).toString(16);return t.length<2?"0"+t:t}r.black=new r("#000")},8612:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Comparators:()=>r});const s=String.fromCharCode(65533),i=window.Intl&&window.Intl.Collator&&!/Edge/.test(navigator.userAgent)?new Intl.Collator(void 0,{sensitivity:"base"}).compare:(e,t)=>e.toLocaleLowerCase().localeCompare(t.toLocaleLowerCase()),r={stringComparator:(e,t)=>t?function(t,n){return i(t[e]||s,n[e]||s)}:function(t,n){return i(n[e],t[e])},rankComparator:()=>function(e,t){return t.getRank(this.filter)-e.getRank(this.filter)},dateComparator:(e,t)=>t?function(t,n){return t[e]-n[e]}:function(t,n){return n[e]-t[e]}}},8009:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CsvParser:()=>s});class s{constructor(){this.next=void 0,this.csv=void 0,this.index=void 0,this.line=[],this.lines=[],this.value="",this.error=void 0}parse(e){for(this.csv=e.trim().replace(/\r\n/g,"\n"),this.result=[],this.next=this.handleBeforeValue,this.index=0;this.next&&this.index<this.csv.length;)this.next=this.next(this);if(this.lines.length<=1)throw new Error("Empty CSV");return{headers:this.lines[0],rows:this.lines.slice(1)}}handleBeforeValue(){return'"'===this.csv[this.index]?(this.index++,this.value="",this.handleQuotedValue):this.handleUnquotedValue}handleUnquotedValue(){const e=this.csv.indexOf(",",this.index),t=this.csv.indexOf("\n",this.index);let n;n=e>=0&&(t<0||e<t)?e:t>=0?t:this.csv.length;const s=this.csv.substr(this.index,n-this.index);return this.line.push(s),this.index=n,this.handleAfterValue}handleQuotedValue(){const e=this.csv.indexOf('"',this.index),t=this.csv.indexOf("\\",this.index);if(e<0)return this.index=this.csv.length,this.error="Quoted value not closed",this.handleError;if(t>0&&t<e){const e=this.csv[t+1];return'"'===e||"\\"===e?(this.value+=this.csv.substr(this.index,t-this.index)+e,this.index=t+2):(this.value+=this.csv.substr(this.index,t-this.index+1),this.index=t+1),this.handleQuotedValue}return'"'===this.csv[e+1]?(this.value+=this.csv.substr(this.index,e-this.index+1),this.index=e+2,this.handleQuotedValue):(this.value+=this.csv.substr(this.index,e-this.index),this.index=e+1,this.line.push(this.value),this.value="",this.handleAfterValue)}handleAfterValue(){const e=","===this.csv[this.index];return this.index++,e||(this.lines.push(this.line),this.line=[]),this.handleBeforeValue}handleError(){throw new Error(this.error)}}},9081:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Otp:()=>i});const s=new(n(2363).Logger)("otp"),i=function(e,t){if(["hotp","totp"].indexOf(t.type)<0)throw"Bad type: "+t.type;if(!t.secret)throw"Empty secret";if(t.algorithm&&["SHA1","SHA256","SHA512"].indexOf(t.algorithm)<0)throw"Bad algorithm: "+t.algorithm;if(t.digits&&["6","7","8"].indexOf(t.digits)<0)throw"Bad digits: "+t.digits;if("hotp"===t.type&&!t.counter)throw"Bad counter: "+t.counter;if(t.period&&isNaN(t.period)||t.period<1)throw"Bad period: "+t.period;if(this.url=e,this.type=t.type,this.account=t.account,this.secret=t.secret,this.issuer=t.issuer,this.algorithm=t.algorithm?t.algorithm.toUpperCase():"SHA1",this.digits=t.digits?+t.digits:6,this.counter=t.counter,this.period=t.period?+t.period:30,this.key=i.fromBase32(this.secret),!this.key)throw"Bad key: "+this.key};i.prototype.next=function(e){let t,n;if("totp"===this.type){const e=Date.now(),s=Math.round(e/1e3);t=Math.floor(s/this.period);const i=1e3*this.period;n=i-e%i}else t=this.counter;const r=new Uint8Array(8).buffer;new DataView(r).setUint32(4,t),this.hmac(r,((t,r)=>{if(!t)return s.error("OTP calculation error",r),e(r);const o=15&(t=new DataView(t)).getInt8(t.byteLength-1),a=2147483647&t.getUint32(o);let l;l="Steam"===this.issuer?i.hmacToSteamCode(a):i.hmacToDigits(a,this.digits),e(null,l,n)}))},i.prototype.hmac=function(e,t){const n=window.crypto.subtle||window.crypto.webkitSubtle,s={name:"HMAC",hash:{name:this.algorithm.replace("SHA","SHA-")}};n.importKey("raw",this.key,s,!1,["sign"]).then((i=>{n.sign(s,i,e).then((e=>{t(e)})).catch((e=>{t(null,e)}))})).catch((e=>{t(null,e)}))},i.hmacToDigits=function(e,t){let n=e.toString();return n=i.leftPad(n.substr(n.length-t),t),n},i.hmacToSteamCode=function(e){const t="23456789BCDFGHJKMNPQRTVWXY";let n="";for(let s=0;s<5;++s)n+=t.charAt(e%t.length),e/=t.length;return n},i.fromBase32=function(e){e=e.replace(/\s/g,"");let t,n="";for(t=0;t<e.length;t++){const s="abcdefghijklmnopqrstuvwxyz234567".indexOf(e[t].toLowerCase());if(s<0)return null;n+=i.leftPad(s.toString(2),5)}const s=new Uint8Array(Math.floor(n.length/8));for(t=0;t<s.length;t++){const e=n.substr(8*t,8);s[t]=parseInt(e,2)}return s.buffer},i.leftPad=function(e,t){for(;e.length<t;)e="0"+e;return e},i.parseUrl=function(e){const t=/^otpauth:\/\/(\w+)\/([^\?]+)\?(.*)/i.exec(e);if(!t)throw"Not OTP url";const n={},s=decodeURIComponent(t[2]);if(s){const e=s.split(":");n.issuer=e[0].trim(),e.length>1&&(n.account=e[1].trim())}return n.type=t[1].toLowerCase(),t[3].split("&").forEach((e=>{const t=e.split("=",2);n[t[0].toLowerCase()]=decodeURIComponent(t[1])})),new i(e,n)},i.isSecret=function(e){return!!i.fromBase32(e)},i.makeUrl=function(e,t,n){return"otpauth://totp/default?secret="+e+(t?"&period="+t:"")+(n?"&digits="+n:"")}},905:(e,t,n)=>{"use strict";n.r(t),n.d(t,{PasswordStrengthLevel:()=>s,passwordStrength:()=>o});const s={None:0,Low:1,Good:2},i=new Uint8Array(128);for(let e=48;e<=57;e++)i[e]=1;for(let e=97;e<=122;e++)i[e]=2;for(let e=65;e<=90;e++)i[e]=3;const r=new Uint8Array([95,10,26,26]);function o(e){if(!e||!e.isProtected)throw new TypeError("Bad password type");if(!e.byteLength)return{level:s.None,length:0};let t=0;const n=[0,0,0,0];let o=!0,a=-1;e.forEachChar((e=>{const s=e<i.length?i[e]:0;n[s]++,t++,o&&e!==a&&(-1===a?a=e:o=!1)}));const l=n[1]===t;if(t<6)return{level:s.None,length:t,onlyDigits:l};if(o)return{level:s.None,length:t,onlyDigits:l};if(t<8)return{level:s.Low,length:t,onlyDigits:l};let c=0;for(let e=0;e<n.length;e++)n[e]>0&&(c+=r[e]);const u=Math.log2(Math.pow(c,t))<60?s.Low:s.Good;return{length:t,level:u,onlyDigits:l}}},5563:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Ranking:()=>s});const s={getStringRank(e,t){if(!e||!t)return 0;let n=i(e,t);return 0===n&&e.length===t.length?10:0===n?5:n>0?3:(n=i(t,e),0===n?5:n>0?3:0)}};function i(e,t){return e.isProtected?e.indexOfLower(t):t.isProtected?t.indexOfSelfInLower(e):e.indexOf(t)}window.Ranking=s},8146:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SemVer:()=>s});const s={compareVersions(e,t){e=e.replace(/-.*$/,"").split("."),t=t.replace(/-.*$/,"").split(".");for(let n=0;n<e.length;n++){const s=0|e[n],i=0|t[n];if(s<i)return-1;if(s>i)return 1}return 0}}},7536:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SignatureVerifier:()=>a});var s=n(3617),i=n(2363);const r="-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnRq2k3TTx0ewTe6wDr6Q\nVeB5diwiIWzsJD+ApfZu1KNPedcAgslAfjpNsYF1if6cYsPMJH70xJ2np6RQBl1V\nPdwShOuxkD7m0BD5Hw/Aar8Hdp5cvAdOOMdBO+0DbGeUMy+z66s+oUCJmqVp19T6\nPkkxbhN08rgtT7v+aFvrbqbO/vlsskbJpH2K2io+e1XmRGPnSr9q4KSqfGbTfe5g\nLwDIOFd66Z4mb5Utb5wWpsy6Gjh06Yf257AccGD3A1bkTNOyeeX0tqciYBePWMk0\nicP/aZ6hnErfhnUKf3tOgPLppSHiGcaSKekhChZ2xLUs3U64JwrXSmwHj+TzdO3S\n0QIDAQAB\n-----END PUBLIC KEY-----\n",o="-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyZAmWXMpKsh9WCyUO5TR\n2/QIJsgyaViWRAgY5nHZhTR/sjhfG97OeurW7NYC4XPsnyJDepEjDsj9LNzquMES\nxsLRSmxo+m1lVWn8Q59LwqOvUK+BKH4eZYF89Nwv2HZjZnr/w7xYcxJbhOuAzpbq\nFD/gAvlozrsHG9uI95h1FHPd6mfolEHLK30LXPQ5FdJ/AWb29ILKYbVEdM8qsjoN\nfSICw7XTbd7wB0TMcgRpjWllzKaftxCO38svhBjAz4cUvtZ05yi4dzK0VsJHfW33\nuno3YBn0/bwLkqMzD1/Hv05p6CVzuDTOCBsXkEobra8OBviatoSukot6cS4Famki\n9QIDAQAB\n-----END PUBLIC KEY-----\n",a={logger:new i.Logger("signature-verifier"),publicKeys:null,verify(e,t,n){if(!n){const n=this.getPublicKeys();return this.verify(e,t,n[0]).then((s=>s||!n[1]?s:this.verify(e,t,n[1])))}return new Promise(((i,r)=>{const o={name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}};try{"string"==typeof t&&(t=s.ByteUtils.base64ToBytes(t));const a=window.crypto.subtle,l="spki";n=s.ByteUtils.base64ToBytes(n),a.importKey(l,n,o,!1,["verify"]).then((n=>{try{a.verify(o,n,s.ByteUtils.arrayToBuffer(t),s.ByteUtils.arrayToBuffer(e)).then((e=>{i(e)})).catch((e=>{this.logger.error("Verify error",e),r(e)}))}catch(e){this.logger.error("Signature verification error",e),r(e)}})).catch((e=>{this.logger.error("ImportKey error",e),r(e)}))}catch(e){this.logger.error("Signature key verification error",e),r(e)}}))},getPublicKeys(){return this.publicKeys||(this.publicKeys=[r,o].map((e=>e.match(/-+BEGIN PUBLIC KEY-+([\s\S]+?)-+END PUBLIC KEY-+/)[1].replace(/\s+/g,"")))),this.publicKeys}}},9907:(e,t,n)=>{"use strict";n.r(t),n.d(t,{EntrySearch:()=>i});var s=n(9166);class i{constructor(e){this.model=e}matches(e){if(!e)return!0;if(e.tagLower&&this.model.searchTags&&this.model.searchTags.indexOf(e.tagLower)<0)return!1;if(e.textLower)if(e.advanced){if(!this.matchesAdv(e))return!1}else if(e.textLowerParts){const t=e.textLowerParts;for(let e=0;e<t.length;e++)if(this.model.searchText.indexOf(t[e])<0)return!1}else if(this.model.searchText.indexOf(e.textLower)<0)return!1;if(e.color)if(!0===e.color){if(!this.model.searchColor)return!1}else if(this.model.searchColor!==e.color)return!1;return!(e.autoType&&!this.model.autoTypeEnabled)&&!(e.otp&&!this.model.fields.otp&&!this.model.fields["TOTP Seed"]&&"otp-device"!==this.model.backend)}matchesAdv(e){const t=e.advanced;let n,s;if(t.regex){try{n=new RegExp(e.text,t.cs?"":"i")}catch(e){return!1}s=i.matchRegex}else t.cs?e.textParts?(n=e.textParts,s=i.matchStringMulti):(n=e.text,s=i.matchString):e.textLowerParts?(n=e.textLowerParts,s=i.matchStringMultiLower):(n=e.textLower,s=i.matchStringLower);if(i.matchFields(this.model.getAllFields(),t,s,n))return!0;if(t.history&&this.model.getHistoryEntriesForSearch)for(const e of this.model.getHistoryEntriesForSearch())if(i.matchFields(e.fields,t,s,n))return!0;return!1}static matchString(e,t){return e.isProtected?e.includes(t):e.indexOf(t)>=0}static matchStringLower(e,t){return e.isProtected?e.includesLower(t):e.toLowerCase().indexOf(t)>=0}static matchStringMulti(e,t,n,s){for(let i=0;i<t.length;i++){const r=t[i];let o;s?o=e.isProtected?e.includesLower(r):e.includes(r):(e.isProtected,o=e.includes(r)),o&&(n.matches?n.matches.includes(r)||n.matches.push(r):n.matches=[r])}return n.matches&&n.matches.length===t.length}static matchStringMultiLower(e,t,n){return i.matchStringMulti(e,t,n,!0)}static matchRegex(e,t){return e.isProtected&&(e=e.getText()),t.test(e)}static matchFields(e,t,n,r){const o={},a=i.matchField;if(t.user&&a(e.UserName,n,r,o))return!0;if(t.url&&a(e.URL,n,r,o))return!0;if(t.notes&&a(e.Notes,n,r,o))return!0;if(t.pass&&a(e.Password,n,r,o))return!0;if(t.title&&a(e.Title,n,r,o))return!0;let l=!1;if(t.other||t.protect){l=Object.keys(e).some((i=>!(s.BuiltInFields.indexOf(i)>=0)&&("string"==typeof e[i]?t.other&&a(e[i],n,r,o):t.protect&&a(e[i],n,r,o))))}return l}static matchField(e,t,n,s){return!!e&&t(e,n,s)}}},667:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Features:()=>i});const s=!!(window.process&&window.process.versions&&window.process.versions.electron),i={isDesktop:s,isMac:navigator.platform.indexOf("Mac")>=0,isWindows:navigator.platform.indexOf("Win")>=0,isiOS:/iPad|iPhone|iPod/i.test(navigator.userAgent),isMobile:/iPhone|iPad|iPod|Android|BlackBerry|Opera Mini|IEMobile|WPDesktop|Windows Phone|webOS/i.test(navigator.userAgent)||screen.width<800,isPopup:!(window.parent===window.top&&!window.opener),isStandalone:!!navigator.standalone,isFrame:window.top!==window,isSelfHosted:!s&&!/^http(s?):\/\/((localhost:8085)|((app|beta)\.keeweb\.info))/.test(location.href),isLocal:location.origin.indexOf("localhost")>=0,get supportsTitleBarStyles(){return s&&(this.isMac||this.isWindows)},get supportsCustomTitleBarAndDraggableWindow(){return s&&this.isMac},get renderCustomTitleBar(){return s&&this.isWindows},get hasUnicodeFlags(){return this.isMac},get browserCssClass(){return window.chrome&&window.navigator.userAgent.indexOf("Chrome/")>-1?"chrome":window.navigator.userAgent.indexOf("Edge/")>-1?"edge":navigator.standalone?"standalone":""},get browserIcon(){return this._browserIcon||(this.isDesktop?this._browserIcon=this.isMac?"safari":this.isWindows?"edge":"chrome":/Gecko\//.test(navigator.userAgent)?this._browserIcon="firefox-browser":/Edg\//.test(navigator.userAgent)?this._browserIcon="edge":/Chrome\//.test(navigator.userAgent)?this._browserIcon="chrome":this.isMac&&/Safari\//.test(navigator.userAgent)?this._browserIcon="safari":this._browserIcon="window-maximize"),this._browserIcon},get supportsBrowserExtensions(){return!this.isMobile&&(this.isDesktop||"safari"!==this.browserIcon)},get extensionBrowserFamily(){return i.isDesktop?void 0:/Gecko\//.test(navigator.userAgent)?"Firefox":/Edg\//.test(navigator.userAgent)?"Edge":/Chrome\//.test(navigator.userAgent)?"Chrome":this.isMac&&/Safari\//.test(navigator.userAgent)?"Safari":"Chrome"}}},6838:(e,t,n)=>{"use strict";n.r(t),n.d(t,{escape:()=>i,noop:()=>r,shuffle:()=>o,pick:()=>a,omit:()=>l,omitEmpty:()=>c,mapObject:()=>u,isEqual:()=>d,minmax:()=>h});var s=n(7109);const i=n.n(s)().escapeExpression;function r(){}function o(e){for(let t=e.length-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function a(e,t){if(!e)return e;const n={};for(const s of t)Object.prototype.hasOwnProperty.call(e,s)&&(n[s]=e[s]);return n}function l(e,t){if(!e)return e;const n=Object.assign({},e);for(const e of t)delete n[e];return n}function c(e){return e?Object.entries(e).reduce(((e,[t,n])=>(n&&(e[t]=n),e)),{}):e}function u(e,t){return Object.entries(e).reduce(((e,[n,s])=>(e[n]=t(s),e)),{})}function d(e,t){return e===t||(e instanceof Date?+e==+t:e instanceof Array&&t instanceof Array&&e.join(",")===t.join(","))}function h(e,t,n){return Math.min(n,Math.max(t,e))}},8495:(e,t,n)=>{"use strict";n.r(t),n.d(t,{IconUrlFormat:()=>i});var s=n(3617);const i={toDataUrl:e=>e?"data:image/png;base64,"+s.ByteUtils.bytesToBase64(e):null}},8134:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MdToHtml:()=>c});var s=n(1638),i=n.n(s),r=n(4782),o=n.n(r);const a=/<\/?p>|<br>|\r|\n/g;class l extends o().Renderer{link(e,t,n){return super.link(e,t,n).replace("<a ",'<a target="_blank" rel="noreferrer noopener" ')}}const c={convert(e){if(!e)return"";const t=new l,n=o()(e,{renderer:t,breaks:!0});if(n.replace(a,"")===e.replace(a,""))return{text:e};return{html:`<div class="markdown">${i().sanitize(n,{ADD_ATTR:["target"]})}</div>`}}}},1705:(e,t,n)=>{"use strict";n.r(t),n.d(t,{PasswordPresenter:()=>o});n(9689);var s=n(6838);class i{randomCharCode(){return 97+Math.floor(26*Math.random())}}function r(e){return Math.random()<.2?String.fromCharCode(e):`&#x${e.toString(16)};`}const o={present:e=>new Array(e+1).join("•"),presentValueWithLineBreaks(e){if(!e)return"";let t="";return e.forEachChar((e=>{t+=10===e?"\n":"•"})),t},asDOM(e){const t=[],n=new i;let o=0;e.forEachChar((e=>{const s=r(e);if(t.push({html:s,order:o}),Math.random()>.5){const e=r(n.randomCharCode());t.push({html:e,order:-1})}o++})),(0,s.shuffle)(t);const a=document.createElement("div");a.style.display="flex",a.style.overflow="hidden",a.style.textOverflow="ellipsis";for(const e of t){const t=document.createElement("div");t.innerHTML=e.html,e.order>=0?t.style.order=e.order:t.style.display="none",a.appendChild(t)}return a}}},2378:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StringFormat:()=>s});const s={camelCaseRegex:/-./g,capFirst:e=>e?e[0].toUpperCase()+e.substr(1):"",pad(e,t){let n=e.toString();for(;n.length<t;)n="0"+n;return n},padStr(e,t){for(;e.length<t;)e+=" ";return e},camelCase(e){return e.replace(this.camelCaseRegex,(e=>e[1].toUpperCase()))},pascalCase(e){return this.capFirst(e.replace(this.camelCaseRegex,(e=>e[1].toUpperCase())))},replaceVersion:(e,t)=>e.replace(/\d+\.\d+\.\d+/g,t)}},4798:(e,t,n)=>{"use strict";n.r(t),n.d(t,{UrlFormat:()=>s});const s={multiSlashRegex:/\/{2,}/g,lastPartRegex:/[\/\\]?[^\/\\]+$/,kdbxEndRegex:/\.kdbx$/i,maxShortPresentableUrlLength:60,getDataFileName(e){const t=e.lastIndexOf("/");return t>=0&&(e=e.substr(t+1)),e=e.replace(/\?.*/,"").replace(/\.kdbx/i,"")},isKdbx(e){return e&&this.kdbxEndRegex.test(e)},fixSlashes(e){return e.replace(this.multiSlashRegex,"/")},fileToDir(e){return e.replace(this.lastPartRegex,"")||"/"},makeUrl:(e,t)=>e+"?"+Object.entries(t).map((([e,t])=>e+"="+encodeURIComponent(t))).join("&"),buildFormData:e=>Object.entries(e).map((([e,t])=>`${e}=${encodeURIComponent(t)}`)).join("&"),presentAsShortUrl(e){if(e.length<=this.maxShortPresentableUrlLength)return e;const[t]=e.split("#",1);if(t.length<=this.maxShortPresentableUrlLength)return t+"#…";const[n]=e.split("?",1);if(n.length<=this.maxShortPresentableUrlLength)return n+"?…";const s=new URL(n),i=s.pathname.split("/");for(;i.length>1;){i.pop(),s.pathname=i.join("/");const e=s.toString();if(e.length<this.maxShortPresentableUrlLength)return e+"/…"}return s+"…"}}},1240:(e,t,n)=>{"use strict";n.r(t),n.d(t,{IdGenerator:()=>s});const s={uuid(){const e=s.s4;return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()},s4:()=>Math.floor(65536*(1+Math.random())).toString(16).substring(1)}},4486:(e,t,n)=>{"use strict";n.r(t),n.d(t,{PasswordGenerator:()=>l,CharRanges:()=>o});var s=n(3617),i=n(8709),r=n(6838);const o={upper:"ABCDEFGHJKLMNPQRSTUVWXYZ",lower:"abcdefghijkmnpqrstuvwxyz",digits:"123456789",special:"!@#$%^&*_+-=,./?;:`\"~'\\",brackets:"(){}[]<>",high:"¡¢£¤¥¦§©ª«¬®¯°±²³´µ¶¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ",ambiguous:"O0oIl"},a={A:o.upper,a:o.lower,1:o.digits,"*":o.special,"[":o.brackets,Ä:o.high,0:o.ambiguous},l={generate(e){if(!e||"number"!=typeof e.length||e.length<0)return"";if("Pronounceable"===e.name)return this.generatePronounceable(e);const t=Object.keys(o).filter((t=>e[t])).map((e=>o[e]));if(e.include&&e.include.length&&t.push(e.include),!t.length)return"";const n=Object.assign({},a,{I:e.include||""}),i=e.pattern||"X";let l=0;for(let t=0;t<e.length;t++){"X"===i[t%i.length]&&l++}const c=s.CryptoEngine.random(l),u=s.CryptoEngine.random(l),d=[];for(let e=0;e<l;e++){const n=t[e<t.length?e:c[e]%t.length],s=n[u[e]%n.length];d.push(s)}(0,r.shuffle)(d);const h=s.CryptoEngine.random(e.length),p=[];for(let t=0;t<e.length;t++){const e=Math.round(1e3*Math.random())+h[t],s=i[t%i.length];if("X"===s)p.push(d.pop());else{const t=n[s],i=t?t[e%t.length]:s;p.push(i)}}return p.join("")},generatePronounceable(e){const t=i.phonetic.generate({length:e.length});let n="";const s=[];let r;if(e.upper)for(r=0;r<t.length;r+=8)s.push(Math.floor(Math.random()*e.length));for(r=0;r<t.length;r++){let e=t[r];s.indexOf(r)>=0&&(e=e.toUpperCase()),n+=e}return n.substr(0,e.length)},deriveOpts(e){const t={};let n=0;if(e){const s=o;e.forEachChar((e=>{n++,e=String.fromCharCode(e);for(const[n,i]of Object.entries(s))i.indexOf(e)>=0&&(t[n]=!0)}))}return t.length=n,t}}},8709:(e,t,n)=>{"use strict";n.r(t),n.d(t,{phonetic:()=>d});const s=["b","c","d","f","g","h","j","k","l","m","n","p","qu","r","s","t","bl","ch","cl","cr","dr","fl","fr","gl","gr","kl","kr","ph","pr","pl","sc","sh","sl","sn","sr","st","str","sw","th","tr","br","v","w","y","z"],i=["a","e","i","o","u","ee","ie","oo","ou","ue"],r=["b","d","f","g","k","l","m","n","p","r","s","t","y","ch","ck","ln","nk","ng","rn","sh","sk","st","th","x","z"],o={quu:"que","qu([aeiou]){2}":"qu$1","[iu]y":"ey",eye:"ye","(.)ye$":"$1y","(^|e)cie(?!$)":"$1cei","([vz])$":"$1e","[iu]w":"ow"};function a(e){const t=l(e.numeric),n=t%e.opts.compoundSimplicity==0,o=""===e.word;o&&t%6>0||e.lastSkippedPost||n?(e.word+=c(s,16,e),e.lastSkippedPre=!1):e.lastSkippedPre=!0,e.word+=c(i,5,e,o&&e.lastSkippedPre),e.lastSkippedPre||n?(e.word+=c(r,13,e),e.lastSkippedPost=!1):e.lastSkippedPost=!0}function l(e){let t=1;for(;e;)t+=e%7,e=Math.floor(e/7);return t}function c(e,t,n,s){const i=l(n.numeric),r=(n.numeric+i)%n.opts.phoneticSimplicity>0||s?t:e.length,o=e[n.numeric%r];return n.numeric=u(n.numeric+n.word),o}function u(e){let t=0;for(let n=0,s=(e+="-Phonetic").length;n<s;n++){t=(t<<5)-t+e.charCodeAt(n),t>>>=0}return t}const d={generate:function(e){const t=(e=function(e){const t={};return e=e||{},t.length=e.length||16,t.seed=e.seed||Math.random(),t.phoneticSimplicity=e.phoneticSimplicity?Math.max(e.phoneticSimplicity,1):5,t.compoundSimplicity=e.compoundSimplicity?Math.max(e.compoundSimplicity,1):5,t}(e)).length,n={numeric:u(e.seed),lastSkippedPost:!1,word:"",opts:e},s=t+5;for(;n.word.length<s;)a(n);return function(e){let t;for(const n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t=new RegExp(n),e.word=e.word.replace(t,o[n]));return e.word}(n).substr(0,t)}}},1504:(e,t,n)=>{"use strict";n.r(t),n.d(t,{KdbxwebInit:()=>l});var s=n(3617),i=n(2363),r=n(667),o=n(3006);const a=new i.Logger("argon2"),l={init(){s.CryptoEngine.setArgon2Impl(((...e)=>this.argon2(...e)))},argon2(e,t,n,s,i,r,o,l){const c={password:e,salt:t,memory:n,iterations:s,length:i,parallelism:r,type:o,version:l};return this.loadRuntime(n).then((e=>{const t=a.ts();return e.hash(c).then((e=>(a.debug("Hash computed",a.ts(t)),e)))}))},loadRuntime(e){return this.runtimeModule?Promise.resolve(this.runtimeModule):n.g.WebAssembly?r.Features.isDesktop?(a.debug("Using native argon2"),this.runtimeModule={hash(e){const t=a.ts(),n=s.ProtectedValue.fromBinary(e.password).dataAndSalt(),i=s.ProtectedValue.fromBinary(e.salt).dataAndSalt();return o.NativeModules.argon2(n,i,{type:e.type,version:e.version,hashLength:e.length,saltLength:e.salt.length,timeCost:e.iterations,parallelism:e.parallelism,memoryCost:e.memory}).then((e=>(n.data.fill(0),i.data.fill(0),a.debug("Argon2 hash calculated",a.ts(t)),(e=new s.ProtectedValue(e.data,e.salt)).getBinary()))).catch((e=>{throw n.data.fill(0),i.data.fill(0),a.error("Argon2 error",e),e}))}},Promise.resolve(this.runtimeModule)):new Promise(((t,s)=>{const i=setTimeout((()=>s("timeout")),5e3);try{const r=a.ts(),o=n(3401).Z,c=n(3e3),u=1048576,d=65536,h=(2*(1024*(1024*u))-64*u)/1024/d,p=Math.min(Math.max(Math.ceil(1024*e/d),256)+256,h),m=`var wasmMemory=new WebAssembly.Memory({initial:${p},maximum:${h}});`,g='var Module={wasmJSMethod: "native-wasm",wasmBinary: Uint8Array.from(atob("'+c+'"), c => c.charCodeAt(0)),print(...args) { postMessage({op:"log",args}) },printErr(...args) { postMessage({op:"log",args}) },postRun:'+this.workerPostRun.toString()+",calcHash:"+this.calcHash.toString()+",wasmMemory:wasmMemory,buffer:wasmMemory.buffer,TOTAL_MEMORY:"+p*d+"}",f=o.replace(/^var Module.*?}/,m+g),A=new Blob([f],{type:"application/javascript"}),y=URL.createObjectURL(A),v=new Worker(y),b=e=>{switch(e.data.op){case"log":a.debug(...e.data.args);break;case"postRun":a.debug("WebAssembly runtime loaded (web worker)",a.ts(r)),URL.revokeObjectURL(y),clearTimeout(i),v.removeEventListener("message",b),this.runtimeModule={hash:e=>new Promise(((t,n)=>{v.postMessage(e);const s=e=>{if(v.removeEventListener("message",s),v.terminate(),l.runtimeModule=null,e.data&&!e.data.error&&e.data.hash)t(e.data.hash);else{const t=e.data&&e.data.error||"unexpected error";a.error("Worker error",t),n(t)}};v.addEventListener("message",s)}))},t(this.runtimeModule);break;default:a.error("Unknown message",e.data),URL.revokeObjectURL(y),s("Load error")}};v.addEventListener("message",b)}catch(e){s(e)}})).catch((e=>{throw a.warn("WebAssembly error",e),new Error("WebAssembly error")})):Promise.reject("WebAssembly is not supported")},workerPostRun:function(){self.postMessage({op:"postRun"}),self.onmessage=e=>{try{const t=Module.calcHash(Module,e.data);self.postMessage({hash:t})}catch(e){self.postMessage({error:e.toString()})}}},calcHash:function(e,t){let{password:n,salt:s}=t;const{memory:i,iterations:r,length:o,parallelism:a,type:l,version:c}=t,u=n.byteLength;n=e.allocate(new Uint8Array(n),"i8",e.ALLOC_NORMAL);const d=s.byteLength;s=e.allocate(new Uint8Array(s),"i8",e.ALLOC_NORMAL);const h=e.allocate(new Array(o),"i8",e.ALLOC_NORMAL),p=e.allocate(new Array(512),"i8",e.ALLOC_NORMAL),m=e._argon2_hash(r,i,a,n,u,s,d,h,o,p,512,l,c);if(m)throw new Error("Argon2 error "+m);const g=new Uint8Array(o);for(let t=0;t<o;t++)g[t]=e.HEAP8[h+t];return e._free(n),e._free(s),e._free(h),e._free(p),g}}},9689:(e,t,n)=>{"use strict";n.r(t);var s=n(3617);const i="{REF:0@I:00000000000000000000000000000000}".split(""),r=i.length;s.ProtectedValue.prototype.isProtected=!0,s.ProtectedValue.prototype.forEachChar=function(e){const t=this.value,n=this.salt;let s,i,r,o;for(let a=0,l=t.length;a<l;a++)if(s=t[a]^n[a],s<128){if(!1===e(s))return}else{if(a++,i=t[a]^n[a],a===l)break;if(s>=192&&s<224){if(!1===e((31&s)<<6|63&i))return}else{if(a++,r=t[a]^n[a],a===l)break;if(s>=224&&s<240&&!1===e((15&s)<<12|(63&i)<<6|63&r))return;if(a++,o=t[a]^n[a],a===l)break;if(s>=240&&s<248){let t=(7&s)<<18|(63&i)<<12|(63&r)<<6|63&o;if(t<=65535){if(!1===e(t))return}else{if(t^=65536,!1===e(55296|t>>10))return;if(!1===e(56320|1023&t))return}}}}},Object.defineProperty(s.ProtectedValue.prototype,"length",{get(){return this.textLength}}),Object.defineProperty(s.ProtectedValue.prototype,"textLength",{get(){let e=0;return this.forEachChar((()=>{e++})),e}}),s.ProtectedValue.prototype.includesLower=function(e){return-1!==this.indexOfLower(e)},s.ProtectedValue.prototype.indexOfLower=function(e){let t=-1;const n=[],s=e.length;let i=-1;return this.forEachChar((r=>{if(i++,r=String.fromCharCode(r).toLowerCase(),-1===t){for(let o=0;o<n.length;o++){const a=++n[o];if(e[a]===r){if(a===s-1)return void(t=i-s+1)}else n.splice(o,1),o--}e[0]===r&&(1===s?t=i-s+1:n.push(0))}})),t},s.ProtectedValue.prototype.indexOfSelfInLower=function(e){let t=-1,n=!1;do{let s=-1;this.forEachChar((i=>{if(s++,i=String.fromCharCode(i).toLowerCase(),0===s)return t=e.indexOf(i,t+1),void(n=-1!==t);n&&(n=e[t+s]===i)}))}while(!n&&t>=0);return t},s.ProtectedValue.prototype.equals=function(e){if(!e)return!1;if(!e.isProtected)return this.textLength===e.length&&this.includes(e);if(e===this)return!0;const t=this.byteLength;if(t!==e.byteLength)return!1;for(let n=0;n<t;n++)if((this.value[n]^this.salt[n])!=(e.value[n]^e.salt[n]))return!1;return!0},s.ProtectedValue.prototype.isFieldReference=function(){if(this.byteLength!==r)return!1;let e=0;return this.forEachChar((t=>{const n=i[e++];if("0"!==n&&t!==n)return!1})),!0};const o=s.CryptoEngine.random(128);s.ProtectedValue.prototype.saltedValue=function(){if(!this.byteLength)return 0;const e=this.value,t=this.salt;let n="";for(let s=0,i=e.length;s<i;s++){const i=e[s]^t[s];n+=String.fromCharCode(i^o[s%o.length])}return n},s.ProtectedValue.prototype.dataAndSalt=function(){return{data:[...this.value],salt:[...this.salt]}},s.ProtectedValue.prototype.toBase64=function(){const e=this.getBinary(),t=s.ByteUtils.bytesToBase64(e);return s.ByteUtils.zeroBuffer(e),t},s.ProtectedValue.fromBase64=function(e){const t=s.ByteUtils.base64ToBytes(e);return s.ProtectedValue.fromBinary(t)}},3297:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Locale:()=>s});var s=n(6846)},2363:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Logger:()=>r});const s={Off:0,Error:1,Warn:2,Info:3,Debug:4,All:5},i=[],r=function(e,t,n=s.All){this.prefix=e?e+(t?":"+t:""):"default",this.level=n};r.prototype.ts=function(e){return e?Math.round(performance.now()-e)+"ms":performance.now()},r.prototype.getPrefix=function(){return(new Date).toISOString()+" ["+this.prefix+"] "},r.prototype.debug=function(...e){e[0]=this.getPrefix()+e[0],this.level>=s.Debug&&(r.saveLast("debug",e),console.log(...e))},r.prototype.info=function(...e){e[0]=this.getPrefix()+e[0],this.level>=s.Info&&(r.saveLast("info",e),console.info(...e))},r.prototype.warn=function(...e){e[0]=this.getPrefix()+e[0],this.level>=s.Warn&&(r.saveLast("warn",e),console.warn(...e))},r.prototype.error=function(...e){e[0]=this.getPrefix()+e[0],this.level>=s.Error&&(r.saveLast("error",e),console.error(...e))},r.prototype.setLevel=function(e){this.level=e},r.prototype.getLevel=function(){return this.level},r.saveLast=function(e,t){i.push({level:e,args:Array.prototype.slice.call(t)}),i.length>100&&i.shift()},r.getLast=function(){return i},r.Level=s},2547:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FileSaver:()=>i});var s=n(403);const i={saveAs(e,t){const n=document.createElement("a");n.download=t,n.rel="noopener",n.href=URL.createObjectURL(e),document.body.appendChild(n),n.click(),document.body.removeChild(n),setTimeout((()=>{URL.revokeObjectURL(n.href)}),s.Timeouts.LinkDownloadRevoke)}}},7609:(e,t,n)=>{"use strict";n.r(t),n.d(t,{InputFx:()=>s});const s={shake(e){e.addClass("input-shake"),setTimeout((()=>e.removeClass("input-shake")),1e3)}}},3710:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Tip:()=>a});var s=n(7201),i=n(667),r=n(6838),o=n(6718);const a=function(e,t){this.el=e,this.title=t&&t.title||e.attr("title"),this.placement=t&&t.placement||e.attr("tip-placement"),this.fast=t&&t.fast||!1,this.tipEl=null,this.showTimeout=null,this.hideTimeout=null,this.force=t&&t.force||!1,this.hide=this.hide.bind(this),this.destroy=this.destroy.bind(this),this.mouseenter=this.mouseenter.bind(this),this.mouseleave=this.mouseleave.bind(this)};a.enabled=!i.Features.isMobile,a.prototype.init=function(){a.enabled&&(this.el.removeAttr("title"),this.el.attr("data-title",this.title),this.el.mouseenter(this.mouseenter).mouseleave(this.mouseleave),this.el.click(this.mouseleave))},a.prototype.show=function(){if(!a.enabled&&!this.force||!this.title)return;s.Events.on("page-geometry",this.hide),this.tipEl&&(this.tipEl.remove(),this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=null));const e=this.tipEl=o("<div></div>").addClass("tip").appendTo("body").text(this.title),t=this.el[0].getBoundingClientRect(),n=this.tipEl[0].getBoundingClientRect(),i=this.placement||this.getAutoPlacement(t,n);let r,l;e.addClass("tip--"+i),this.fast&&e.addClass("tip--fast");switch(i){case"top":r=t.top-n.height-10,l=t.left+t.width/2-n.width/2;break;case"top-left":r=t.top-n.height-10,l=t.left+t.width/2-n.width+10;break;case"bottom":r=t.bottom+10,l=t.left+t.width/2-n.width/2;break;case"left":r=t.top+t.height/2-n.height/2,l=t.left-n.width-10;break;case"right":r=t.top+t.height/2-n.height/2,l=t.right+10}e.css({top:r,left:l})},a.prototype.hide=function(){this.tipEl&&(this.tipEl.remove(),this.tipEl=null,s.Events.off("page-geometry",this.hide))},a.prototype.destroy=function(){this.hide(),this.el.off("mouseenter",this.mouseenter),this.el.off("mouseleave",this.mouseleave),this.el.off("click",this.mouseleave),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=null),this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=null)},a.prototype.mouseenter=function(){this.showTimeout||(this.showTimeout=setTimeout((()=>{this.showTimeout=null,this.show()}),200))},a.prototype.mouseleave=function(){this.tipEl&&(this.tipEl.addClass("tip--hide"),this.hideTimeout=setTimeout((()=>{this.hideTimeout=null,this.hide()}),500)),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=null)},a.prototype.getAutoPlacement=function(e,t){const n=document.body.getBoundingClientRect(),s=n.bottom-e.bottom>20+t.height,i=n.right-e.right>20+t.width/2,r=n.right-e.right>20+t.width,o=e.left>20+t.width/2,a=e.left>20+t.width;return s?a&&!i?"left":r&&!o?"right":"bottom":a&&!i?"left":r&&!o?"right":"top"},a.createTips=function(e){a.enabled&&o("[title]",e).each(((e,t)=>{a.createTip(t)}))},a.createTip=function(e,t){if(!(a.enabled||t&&t.force))return;const n=new a(o(e),t);return t&&t.noInit||n.init(),e._tip=n,n},a.hideTips=function(e){a.enabled&&e&&o("[data-title]",e).each(((e,t)=>{a.hideTip(t)}))},a.hideTip=function(e){e._tip&&e._tip.hide()},a.updateTip=function(e,t){e._tip&&(e._tip.hide(),Object.assign(e._tip,(0,r.pick)(t,["title","placement","fast","showTimeout","hideTimeout"])))},a.destroyTips=function(e){o("[data-title]",e).each(((e,t)=>{t._tip&&(t._tip.destroy(),t._tip=void 0)}))}},2014:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AppView:()=>F});var s=n(7779),i=n(7201),r=n(5665),o=n(1164),a=n(9491),l=n(111),c=n(4530),u=n(2977),d=n(2706),h=n(667),p=n(3297),m=n(2363),g=n(8009),f=n(2766),A=n(1864),y=n(1434),v=n(5249),b=n(7953),w=n(5984),k=n(7622),C=n(7780),_=n(9676),E=n(6498),x=n(2791),I=n(4199),S=n(9993),D=n(97),B=n(357),P=n(4062),T=n.n(P);class F extends s.View{constructor(e){super(e),this.parent="body",this.template=T(),this.events={contextmenu:"contextMenu",drop:"drop",dragenter:"dragover",dragover:"dragover","click a[target=_blank]":"extLinkClick",mousedown:"bodyClick"},this.titlebarStyle="default",this.titlebarStyle=this.model.settings.titlebarStyle,this.views.menu=new E.MenuView(this.model.menu,{ownParent:!0}),this.views.menuDrag=new A.DragView("x",{parent:".app__menu-drag"}),this.views.footer=new v.FooterView(this.model,{ownParent:!0}),this.views.listWrap=new _.ListWrapView(this.model,{ownParent:!0}),this.views.list=new C.ListView(this.model,{ownParent:!0}),this.views.listDrag=new A.DragView("x",{parent:".app__list-drag"}),this.views.list.dragView=this.views.listDrag,this.views.details=new f.DetailsView(void 0,{ownParent:!0}),this.views.details.appModel=this.model,"default"!==this.titlebarStyle&&h.Features.renderCustomTitleBar&&(this.views.titlebar=new B.TitlebarView(this.model)),this.views.menu.listenDrag(this.views.menuDrag),this.views.list.listenDrag(this.views.listDrag),this.listenTo(this.model.settings,"change:theme",this.setTheme),this.listenTo(this.model.settings,"change:locale",this.setLocale),this.listenTo(this.model.settings,"change:fontSize",this.setFontSize),this.listenTo(this.model.settings,"change:autoSaveInterval",this.setupAutoSave),this.listenTo(this.model.files,"change",this.fileListUpdated),this.listenTo(i.Events,"select-all",this.selectAll),this.listenTo(i.Events,"menu-select",this.menuSelect),this.listenTo(i.Events,"lock-workspace",this.lockWorkspace),this.listenTo(i.Events,"show-file",this.showFileSettings),this.listenTo(i.Events,"open-file",this.toggleOpenFile),this.listenTo(i.Events,"save-all",this.saveAll),this.listenTo(i.Events,"remote-key-changed",this.remoteKeyChanged),this.listenTo(i.Events,"key-change-pending",this.keyChangePending),this.listenTo(i.Events,"toggle-settings",this.toggleSettings),this.listenTo(i.Events,"toggle-menu",this.toggleMenu),this.listenTo(i.Events,"toggle-details",this.toggleDetails),this.listenTo(i.Events,"show-open-view",this.showOpenIfNotThere),this.listenTo(i.Events,"edit-group",this.editGroup),this.listenTo(i.Events,"edit-tag",this.editTag),this.listenTo(i.Events,"edit-generator-presets",this.editGeneratorPresets),this.listenTo(i.Events,"launcher-open-file",this.launcherOpenFile),this.listenTo(i.Events,"user-idle",this.userIdle),this.listenTo(i.Events,"os-lock",this.osLocked),this.listenTo(i.Events,"power-monitor-suspend",this.osLocked),this.listenTo(i.Events,"app-minimized",this.appMinimized),this.listenTo(i.Events,"show-context-menu",this.showContextMenu),this.listenTo(i.Events,"second-instance",this.showSingleInstanceAlert),this.listenTo(i.Events,"enter-full-screen",this.enterFullScreen),this.listenTo(i.Events,"leave-full-screen",this.leaveFullScreen),this.listenTo(i.Events,"import-csv-requested",this.showImportCsv),this.listenTo(i.Events,"launcher-before-quit",this.launcherBeforeQuit),this.listenTo(d.UpdateModel,"change:updateReady",this.updateApp),window.onbeforeunload=this.beforeUnload.bind(this),window.onresize=this.windowResize.bind(this),window.onblur=this.windowBlur.bind(this),this.onKey(u.Keys.DOM_VK_ESCAPE,this.escPressed),this.onKey(u.Keys.DOM_VK_BACK_SPACE,this.backspacePressed),a.Launcher&&a.Launcher.devTools&&this.onKey(u.Keys.DOM_VK_I,this.openDevTools,o.KeyHandler.SHORTCUT_ACTION+o.KeyHandler.SHORTCUT_OPT,"*"),this.setWindowClass(),this.setupAutoSave()}setWindowClass(){const e=h.Features.browserCssClass;e&&document.body.classList.add(e),"default"!==this.titlebarStyle&&(document.body.classList.add("titlebar-"+this.titlebarStyle),h.Features.renderCustomTitleBar&&document.body.classList.add("titlebar-custom")),h.Features.isMobile&&document.body.classList.add("mobile")}render(){var e;super.render({beta:this.model.isBeta,titlebarStyle:this.titlebarStyle,customTitlebar:h.Features.renderCustomTitleBar}),this.panelEl=this.$el.find(".app__panel:first"),this.views.listWrap.render(),this.views.menu.render(),this.views.menuDrag.render(),this.views.footer.render(),this.views.list.render(),this.views.listDrag.render(),this.views.details.render(),null===(e=this.views.titlebar)||void 0===e||e.render(),this.showLastOpenFile()}showOpenFile(){this.hideContextMenu(),this.views.menu.hide(),this.views.menuDrag.$el.parent().hide(),this.views.listWrap.hide(),this.views.list.hide(),this.views.listDrag.hide(),this.views.details.hide(),this.views.footer.toggle(this.model.files.hasOpenFiles()),this.hidePanelView(),this.hideSettings(),this.hideOpenFile(),this.hideKeyChange(),this.hideImportCsv(),this.views.open=new x.OpenView(this.model),this.views.open.render(),this.views.open.on("close",(()=>{this.showEntries()}))}showLastOpenFile(){this.showOpenFile();const e=this.model.fileInfos[0];e&&(this.views.open.currentSelectedIndex=0,this.views.open.showOpenFileInfo(e))}launcherOpenFile(e){e&&e.data&&/\.kdbx$/i.test(e.data)&&(this.showOpenFile(),this.views.open.showOpenLocalFile(e.data,e.key))}updateApp(){"ready"!==d.UpdateModel.updateStatus||a.Launcher||this.model.files.hasOpenFiles()||window.location.reload()}showEntries(){this.views.menu.show(),this.views.menuDrag.$el.parent().show(),this.views.listWrap.show(),this.views.listDrag.show(),this.views.details.show(),this.views.footer.show(),this.hidePanelView(),this.hideOpenFile(),this.hideSettings(),this.hideKeyChange(),this.hideImportCsv(),this.views.list.show()}hideOpenFile(){this.views.open&&(this.views.open.remove(),this.views.open=null)}hidePanelView(){this.views.panel&&(this.views.panel.remove(),this.views.panel=null,this.panelEl.addClass("hide"))}showPanelView(e){this.views.listWrap.hide(),this.views.list.hide(),this.views.listDrag.hide(),this.views.details.hide(),this.hidePanelView(),e.render(),this.views.panel=e,this.panelEl.removeClass("hide")}hideSettings(){this.views.settings&&(this.model.menu.setMenu("app"),this.views.settings.remove(),this.views.settings=null)}hideKeyChange(){this.views.keyChange&&(this.views.keyChange.hide(),this.views.keyChange=null)}hideImportCsv(){this.views.importCsv&&(this.views.importCsv.remove(),this.views.importCsv=null)}showSettings(e){this.model.menu.setMenu("settings"),this.views.menu.show(),this.views.menuDrag.$el.parent().show(),this.views.listWrap.hide(),this.views.list.hide(),this.views.listDrag.hide(),this.views.details.hide(),this.hidePanelView(),this.hideOpenFile(),this.hideKeyChange(),this.hideImportCsv(),this.views.settings=new I.SettingsView(this.model),this.views.settings.render(),e||(e=this.model.menu.generalSection.items[0]),this.model.menu.select({item:e}),this.views.menu.switchVisibility(!1)}showEditGroup(e){this.showPanelView(new w.GrpView(e))}showEditTag(){this.showPanelView(new S.TagView(this.model))}showKeyChange(e,t){c.Alerts.alertDisplayed||this.views.keyChange&&this.views.keyChange.model.remote||(this.hideSettings(),this.hidePanelView(),this.views.menu.hide(),this.views.listWrap.hide(),this.views.list.hide(),this.views.listDrag.hide(),this.views.details.hide(),this.views.keyChange=new k.KeyChangeView({file:e,expired:t.expired,remote:t.remote}),this.views.keyChange.render(),this.views.keyChange.on("accept",this.keyChangeAccept.bind(this)),this.views.keyChange.on("cancel",this.showEntries.bind(this)))}fileListUpdated(){this.model.files.hasOpenFiles()?this.showEntries():(this.showOpenFile(),this.selectLastOpenFile())}showFileSettings(e){const t=this.model.menu.filesSection.items.find((t=>t.file.id===e.fileId));this.views.settings?this.views.settings.file===t.file?this.showEntries():this.model.menu.select({item:t}):this.showSettings(t)}toggleOpenFile(){this.views.open?this.model.files.hasOpenFiles()&&this.showEntries():this.showOpenFile()}launcherBeforeQuit(){const e={preventDefault(){}};!1!==this.beforeUnload(e)&&a.Launcher.exit()}beforeUnload(e){const t={preventDefault(){this.prevented=!0}};if(i.Events.emit("main-window-will-close",t),t.prevented)return!!a.Launcher&&a.Launcher.preventExit(e);let n=this.model.settings.minimizeOnClose;if(null!==a.Launcher&&void 0!==a.Launcher&&a.Launcher.quitOnRealQuitEventIfMinimizeOnQuitIsEnabled()&&(n=!1),this.model.files.hasDirtyFiles()){if(a.Launcher){const t=()=>{n?a.Launcher.minimizeApp():a.Launcher.exit()};if(a.Launcher.exitRequested)return;if(!this.exitAlertShown){if(this.model.settings.autoSave)return this.saveAndLock((e=>{e&&t()}),{appClosing:!0}),a.Launcher.preventExit(e);this.exitAlertShown=!0,c.Alerts.yesno({header:p.Locale.appUnsavedWarn,body:p.Locale.appUnsavedWarnBody,buttons:[{result:"save",title:p.Locale.saveChanges},{result:"exit",title:p.Locale.discardChanges,error:!0},{result:"",title:p.Locale.appDontExitBtn}],success:e=>{"save"===e?this.saveAndLock((e=>{e&&t()}),{appClosing:!0}):t()},cancel:()=>{a.Launcher.cancelRestart(!1)},complete:()=>{this.exitAlertShown=!1}})}return a.Launcher.preventExit(e)}return p.Locale.appUnsavedWarnBody}return a.Launcher&&!a.Launcher.exitRequested&&!a.Launcher.restartPending&&n?(a.Launcher.minimizeApp(),this.appMinimized(),a.Launcher.preventExit(e)):void 0}windowResize(){i.Events.emit("page-geometry",{source:"window"})}windowBlur(e){e.target===window&&i.Events.emit("page-blur")}enterFullScreen(){this.$el.addClass("fullscreen")}leaveFullScreen(){this.$el.removeClass("fullscreen")}escPressed(){this.views.open&&this.model.files.hasOpenFiles()&&this.showEntries()}backspacePressed(e){e.target===document.body&&e.preventDefault()}openDevTools(){a.Launcher&&a.Launcher.devTools&&a.Launcher.openDevTools()}selectAll(){this.menuSelect({item:this.model.menu.allItemsSection.items[0]})}menuSelect(e){this.model.menu.select(e),this.views.panel&&!this.views.panel.isHidden()&&this.showEntries()}userIdle(){this.lockWorkspace(!0)}osLocked(){this.model.settings.lockOnOsLock&&this.lockWorkspace(!0)}appMinimized(){this.model.settings.lockOnMinimize&&this.lockWorkspace(!0)}lockWorkspace(e){if(!c.Alerts.alertDisplayed)if(this.model.files.hasUnsavedFiles())if(this.model.settings.autoSave)this.saveAndLock();else{const t=e?p.Locale.appCannotLockAutoInit:p.Locale.appCannotLock;c.Alerts.alert({icon:"lock",header:"Lock",body:t,buttons:[{result:"save",title:p.Locale.saveChanges},{result:"discard",title:p.Locale.discardChanges,error:!0},{result:"",title:p.Locale.alertCancel}],checkbox:p.Locale.appAutoSave,success:(e,t)=>{"save"===e?(t&&(this.model.settings.autoSave=t),this.saveAndLock()):"discard"===e&&this.model.closeAllFiles()}})}else this.closeAllFilesAndShowFirst()}saveAndLock(e,t){let n=0;const s=[];function i(i,r){if(r&&s.push(i.name),0==--n)if(s.length&&this.model.files.hasDirtyFiles())if(c.Alerts.alertDisplayed)e&&e(!1);else{const n=[c.Alerts.buttons.ok];let i=(s.length>1?p.Locale.appSaveErrorBodyMul:p.Locale.appSaveErrorBody)+" "+s.join(", ")+".";null!=t&&t.appClosing&&(n.unshift({result:"ignore",title:p.Locale.appSaveErrorExitLoseChanges,error:!0}),i+="\n"+p.Locale.appSaveErrorExitLoseChangesBody),c.Alerts.error({header:p.Locale.appSaveError,body:i,buttons:n,complete:t=>{"ignore"===t?(this.model.closeAllFiles(),e&&e(!0)):e&&e(!1)}})}else this.closeAllFilesAndShowFirst(),e&&e(!0)}this.model.files.forEach((function(e){e.dirty&&(this.model.syncFile(e,null,i.bind(this,e)),n++)}),this),n||this.closeAllFilesAndShowFirst()}closeAllFilesAndShowFirst(){if(!this.model.files.hasOpenFiles())return;let e=this.model.files.find((e=>!e.demo&&!e.created&&!e.skipOpenList));if(this.model.closeAllFiles(),e||(e=this.model.fileInfos[0]),e){const t=this.model.fileInfos.getMatch(e.storage,e.name,e.path);t&&this.views.open.showOpenFileInfo(t)}}selectLastOpenFile(){const e=this.model.fileInfos[0];e&&this.views.open.showOpenFileInfo(e)}saveAll(){this.model.files.forEach((function(e){this.model.syncFile(e)}),this)}setupAutoSave(){this.autoSaveTimer&&clearInterval(this.autoSaveTimer),this.model.settings.autoSaveInterval>0&&(this.autoSaveTimer=setInterval(this.saveAll.bind(this),1e3*this.model.settings.autoSaveInterval*60))}remoteKeyChanged(e){this.showKeyChange(e.file,{remote:!0})}keyChangePending(e){this.showKeyChange(e.file,{expired:!0})}keyChangeAccept(e){this.showEntries(),e.expired?(e.file.setPassword(e.password),e.keyFileData&&e.keyFileName?e.file.setKeyFile(e.keyFileData,e.keyFileName):e.file.removeKeyFile()):this.model.syncFile(e.file,{remoteKey:{password:e.password,keyFileName:e.keyFileName,keyFileData:e.keyFileData}})}toggleSettings(e,t){let n=e?this.model.menu[e+"Section"]:null;n&&(n=t&&n.items.find((e=>e.section===t))||n.items[0]),this.views.settings?this.views.settings.page!==e&&n?this.model.menu.select({item:n}):this.model.files.hasOpenFiles()?this.showEntries():(this.showLastOpenFile(),this.views.open.toggleMore()):(this.showSettings(),n&&this.model.menu.select({item:n}))}toggleMenu(){this.views.menu.switchVisibility()}toggleDetails(e){this.$el.toggleClass("app--details-visible",e),this.views.menu.switchVisibility(!1)}showOpenIfNotThere(){this.views.open||this.showLastOpenFile()}editGroup(e){!e||this.views.panel instanceof w.GrpView?this.showEntries():this.showEditGroup(e)}editTag(e){!e||this.views.panel instanceof S.TagView?this.showEntries():(this.showEditTag(),this.views.panel.showTag(e))}editGeneratorPresets(){this.views.panel instanceof b.GeneratorPresetsView?this.showEntries():(this.views.settings&&this.showEntries(),this.showPanelView(new b.GeneratorPresetsView(this.model)))}isContextMenuAllowed(e){return["input","textarea"].indexOf(e.target.tagName.toLowerCase())<0}contextMenu(e){this.isContextMenuAllowed(e)&&e.preventDefault()}showContextMenu(e){if(e.options&&this.isContextMenuAllowed(e)){e.stopImmediatePropagation(),e.preventDefault(),this.views.contextMenu&&this.views.contextMenu.remove();const t=new y.DropdownView(e);t.render({position:{left:e.pageX,top:e.pageY},options:e.options}),t.on("cancel",(e=>this.hideContextMenu())),t.on("select",(e=>this.contextMenuSelect(e))),this.views.contextMenu=t}}hideContextMenu(){this.views.contextMenu&&(this.views.contextMenu.remove(),delete this.views.contextMenu)}contextMenuSelect(e){this.hideContextMenu(),i.Events.emit("context-menu-select",e)}showSingleInstanceAlert(){this.hideOpenFile(),c.Alerts.error({header:p.Locale.appTabWarn,body:p.Locale.appTabWarnBody,esc:!1,enter:!1,click:!1,buttons:[]})}dragover(e){e.preventDefault(),e.dataTransfer.dropEffect="none"}drop(e){e.preventDefault()}setTheme(){l.SettingsManager.setTheme(this.model.settings.theme)}setFontSize(){l.SettingsManager.setFontSize(this.model.settings.fontSize)}setLocale(){l.SettingsManager.setLocale(this.model.settings.locale),this.views.settings.isVisible()&&(this.hideSettings(),this.showSettings()),this.$el.find(".app__beta:first").text(p.Locale.appBeta)}extLinkClick(e){if(a.Launcher){e.preventDefault();const t=e.target.closest("a");null!=t&&t.href&&a.Launcher.openLink(t.href)}}bodyClick(e){r.IdleTracker.regUserAction(),i.Events.emit("click",e)}showImportCsv(e){const t=new FileReader,n=new m.Logger("import-csv");n.info("Reading CSV..."),t.onload=t=>{n.info("Parsing CSV...");const s=n.ts(),i=new g.CsvParser;let r;try{r=i.parse(t.target.result)}catch(t){return n.error("Error parsing CSV",t),void c.Alerts.error({header:p.Locale.openFailedRead,body:t.toString()})}n.info(`Parsed CSV: ${r.rows.length} records, ${n.ts(s)}`),this.hideSettings(),this.hidePanelView(),this.hideOpenFile(),this.hideKeyChange(),this.views.menu.hide(),this.views.listWrap.hide(),this.views.list.hide(),this.views.listDrag.hide(),this.views.details.hide(),this.views.importCsv=new D.ImportCsvView(r,{appModel:this.model,fileName:e.name}),this.views.importCsv.render(),this.views.importCsv.on("cancel",(()=>{this.model.files.hasOpenFiles()?this.showEntries():this.showOpenFile()})),this.views.importCsv.on("done",(()=>{this.model.refresh(),this.showEntries()}))},t.onerror=()=>{c.Alerts.error({header:p.Locale.openFailedRead})},t.readAsText(e)}}},2385:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AutoTypeHintView:()=>u});var s=n(7779),i=n(9673),r=n(403),o=n(667),a=n(7410),l=n.n(a),c=n(6718);class u extends s.View{constructor(e){super(e),this.parent="body",this.template=l(),this.events={},this.input=e.input,this.bodyClick=this.bodyClick.bind(this),this.inputBlur=this.inputBlur.bind(this),c("body").on("click",this.bodyClick),this.input.addEventListener("blur",this.inputBlur),this.once("remove",(()=>{c("body").off("click",this.bodyClick),this.input.removeEventListener("blur",this.inputBlur)}))}render(){super.render({cmd:o.Features.isMac?"command":"ctrl",hasCtrl:o.Features.isMac,link:i.Links.AutoType});const e=this.input.getBoundingClientRect();this.$el.appendTo(document.body).css({left:e.left,top:e.bottom+1,width:e.width});const t=this.$el[0].getBoundingClientRect(),n=document.body.getBoundingClientRect();t.bottom>n.bottom&&this.$el.css("height",t.height+n.bottom-t.bottom-1)}bodyClick(e){if(this.removeTimer&&(clearTimeout(this.removeTimer),this.removeTimer=null),e.target!==this.input)if(c.contains(this.$el[0],e.target)||e.target===this.$el[0]){if(e.stopPropagation(),"a"===e.target.tagName.toLowerCase()&&!e.target.href){let t=c(e.target).text();"{"!==t[0]&&(t=t.split(" ")[0]),this.insertText(t)}this.input.focus()}else this.remove();else e.stopPropagation()}inputBlur(){this.removeTimer||(this.removeTimer=setTimeout(this.remove.bind(this),r.Timeouts.DropDownClickWait))}insertText(e){const t=this.input.selectionEnd||this.input.value.length;this.input.value=this.input.value.substr(0,t)+e+this.input.value.substr(t),this.input.selectionStart=this.input.selectionEnd=t+e.length,this.input.dispatchEvent(new Event("input",{bubbles:!0}))}}},3122:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DetailsAddFieldView:()=>o});var s=n(7779),i=n(617),r=n.n(i);class o extends s.View{constructor(...e){super(...e),this.parent=".details__body-fields",this.template=r(),this.events={"click .details__field-label":"fieldLabelClick","click .details__field-value":"fieldValueClick"}}render(){super.render(),this.labelEl=this.$el.find(".details__field-label")}fieldLabelClick(){this.emit("more-click")}fieldValueClick(){this.emit("add-field")}}},2550:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DetailsAttachmentView:()=>c});var s=n(7779),i=n(7027),r=n(667),o=n(3388),a=n.n(o),l=n(6718);class c extends s.View{constructor(...e){super(...e),this.template=a(),this.events={"click .details__subview-close":"closeAttachment","click .details__attachment-preview-download-btn":"downloadAttachment"}}render(e){super.render({isMobile:r.Features.isMobile});this.$el.find(".details__attachment-preview-download-text-shortcut").text(i.Shortcuts.actionShortcutSymbol());const t=new Blob([this.model.getBinary()],{type:this.model.mimeType}),n=this.$el.find(".details__attachment-preview-data");switch((this.model.mimeType||"").split("/")[0]){case"text":{const s=new FileReader;return s.addEventListener("loadend",(()=>{l("<pre/>").text(s.result).appendTo(n),e()})),void s.readAsText(t)}case"image":return l("<img/>").attr("src",URL.createObjectURL(t)).appendTo(n),void e()}this.$el.addClass("details__attachment-preview--empty"),this.$el.find(".details__attachment-preview-icon").addClass("fa-"+this.model.icon),e()}downloadAttachment(){this.emit("download")}closeAttachment(){this.emit("close")}}},4184:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DetailsAutoTypeView:()=>d});var s=n(7779),i=n(3898),r=n(7027),o=n(3297),a=n(2385),l=n(1443),c=n.n(l),u=n(6718);class d extends s.View{constructor(...e){super(...e),this.parent=".details__body-after",this.template=c(),this.events={"focus #details__auto-type-sequence":"seqFocus","input #details__auto-type-sequence":"seqInput","keypress #details__auto-type-sequence":"seqKeyPress","keydown #details__auto-type-sequence":"seqKeyDown","change #details__auto-type-enabled":"enabledChange","change #details__auto-type-obfuscation":"obfuscationChange"}}render(){const e=o.Locale.detAutoTypeShortcutsDesc.replace("{}",r.Shortcuts.actionShortcutSymbol()+"T").replace("{}",r.Shortcuts.globalShortcutText("autoType"));super.render({enabled:this.model.getEffectiveEnableAutoType(),obfuscation:this.model.autoTypeObfuscation,sequence:this.model.autoTypeSequence,windows:this.model.autoTypeWindows,defaultSequence:this.model.group.getEffectiveAutoTypeSeq(),detAutoTypeShortcutsDesc:e})}seqInput(e){const t=e.target,n=t.value.trim();i.AutoType.validate(this.model,n,(e=>{u(t).toggleClass("input--error",!!e),e||this.model.setAutoTypeSeq(n)}))}seqKeyPress(e){e.stopPropagation()}seqKeyDown(e){e.stopPropagation()}seqFocus(e){this.views.hint||(this.views.hint=new a.AutoTypeHintView({input:e.target}),this.views.hint.render(),this.views.hint.on("remove",(()=>{delete this.views.hint})))}enabledChange(e){this.model.setEnableAutoType(e.target.checked)}obfuscationChange(e){this.model.setAutoTypeObfuscation(e.target.checked)}}},9042:(e,t,n)=>{"use strict";n.r(t),n.d(t,{createDetailsFields:()=>v,createNewCustomField:()=>b});var s=n(3297),i=n(2378),r=n(6098),o=n(2985),a=n(9260),l=n(8877),c=n(2836),u=n(2969),d=n(1297),h=n(1960),p=n(3033),m=n(2574),g=n(8108),f=n(4169),A=n(4984),y=n(7725);function v(e){const t=e.model,n=e.matchingOtpEntry,v=[],b=[];if("otp-device"===t.backend)b.push(new a.FieldViewReadOnly({name:"Device",title:i.StringFormat.capFirst(s.Locale.device),value:()=>t.device.name})),v.push(new A.FieldViewReadOnlyWithOptions({name:"$UserName",title:i.StringFormat.capFirst(s.Locale.user),aside:!1,value:()=>t.user,sequence:"{USERNAME}"})),v.push(new l.FieldViewOtp({name:"$otp",title:s.Locale.detOtpField,value:()=>t.otpGenerator,sequence:"{TOTP}",readonly:!0,needsTouch:t.needsTouch,deviceShortName:t.device.shortName}));else{const A=o.AppModel.instance.files.filter((e=>e.active&&!e.readOnly));if(t.isJustCreated&&A.length>1){const e=A.map((e=>({id:e.id,value:e.name,selected:e===t.file})));v.push(new c.FieldViewSelect({name:"$File",title:i.StringFormat.capFirst(s.Locale.file),value:()=>e}))}else t.backend?b.push(new a.FieldViewReadOnly({name:"Storage",title:i.StringFormat.capFirst(s.Locale.storage),value:()=>t.fileName})):b.push(new a.FieldViewReadOnly({name:"File",title:i.StringFormat.capFirst(s.Locale.file),value:()=>t.fileName}));v.push(new u.FieldViewAutocomplete({name:"$UserName",title:i.StringFormat.capFirst(s.Locale.user),value:()=>t.user,getCompletions:e.getUserNameCompletions.bind(e),sequence:"{USERNAME}"})),v.push(new d.FieldViewText({name:"$Password",title:i.StringFormat.capFirst(s.Locale.password),canGen:!0,value:()=>t.password,sequence:"{PASSWORD}"})),v.push(new h.FieldViewUrl({name:"$URL",title:i.StringFormat.capFirst(s.Locale.website),value:()=>t.url,sequence:"{URL}"})),v.push(new d.FieldViewText({name:"$Notes",title:i.StringFormat.capFirst(s.Locale.notes),multiline:"true",markdown:!0,value:()=>t.notes,sequence:"{NOTES}"})),t.file.supportsTags&&v.push(new p.FieldViewTags({name:"Tags",title:i.StringFormat.capFirst(s.Locale.tags),tags:o.AppModel.instance.tags,value:()=>t.tags})),t.file.supportsExpiration&&v.push(new m.FieldViewDate({name:"Expires",title:s.Locale.detExpires,lessThanNow:"("+s.Locale.detExpired+")",value:()=>t.expires})),b.push(new a.FieldViewReadOnly({name:"Group",title:s.Locale.detGroup,value:()=>t.groupName,tip:()=>t.getGroupPath().join(" / ")})),t.created&&b.push(new a.FieldViewReadOnly({name:"Created",title:s.Locale.detCreated,value:()=>r.DateFormat.dtStr(t.created)})),t.updated&&b.push(new a.FieldViewReadOnly({name:"Updated",title:s.Locale.detUpdated,value:()=>r.DateFormat.dtStr(t.updated)})),t.backend||b.push(new g.FieldViewHistory({name:"History",title:i.StringFormat.capFirst(s.Locale.history),value:()=>({length:t.historyLength,unsaved:t.unsaved})})),n&&v.push(new l.FieldViewOtp({name:"$otp",title:s.Locale.detOtpField,value:()=>n.otpGenerator,sequence:"{TOTP}",readonly:!0,needsTouch:n.needsTouch,deviceShortName:n.device.shortName}));for(const e of Object.keys(t.fields))if("otp"===e&&t.otpGenerator)n||v.push(new l.FieldViewOtp({name:"$"+e,title:s.Locale.detOtpField,value:()=>t.otpGenerator,sequence:"{TOTP}"}));else{e.startsWith(y.ExtraUrlFieldName)?v.push(new h.FieldViewUrl({name:"$"+e,title:i.StringFormat.capFirst(s.Locale.website),isExtraUrl:!0,value:()=>t.fields[e],sequence:`{S:${e}}`})):v.push(new f.FieldViewCustom({name:"$"+e,title:e,multiline:!0,value:()=>t.fields[e],sequence:`{S:${e}}`}))}}return{fieldViews:v,fieldViewsAside:b}}function b(e,t,n){return e.startsWith(y.ExtraUrlFieldName)?new h.FieldViewUrl({name:"$"+e,title:i.StringFormat.capFirst(s.Locale.website),newField:e,isExtraUrl:!0,value:()=>n.fields[e]},t):new f.FieldViewCustom({name:"$"+e,title:e,newField:e,multiline:!0,value:()=>""},t)}},264:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DetailsHistoryView:()=>f});var s=n(7779),i=n(4530),r=n(2977),o=n(6098),a=n(2378),l=n(3297),c=n(4796),u=n(9260),d=n(2402),h=n(6838),p=n(3445),m=n.n(p),g=n(6718);class f extends s.View{constructor(e,t){super(e,t),this.template=m(),this.events={"click .details__subview-close":"closeHistory","click .details__history-timeline-item":"timelineItemClick","click .details__history-arrow-prev":"timelinePrevClick","click .details__history-arrow-next":"timelineNextClick","click .details__history-button-revert":"revertClick","click .details__history-button-delete":"deleteClick","click .details__history-button-discard":"discardClick"},this.formats=[{name:"ms",round:1,format:e=>o.DateFormat.dtStr(e)},{name:"sec",round:1e3,format:e=>o.DateFormat.dtStr(e)},{name:"min",round:6e4,format:e=>o.DateFormat.dtStr(e).replace(":00 "," ")},{name:"hour",round:36e5,format:e=>o.DateFormat.dtStr(e).replace(":00","")},{name:"day",round:864e5,format:e=>o.DateFormat.dStr(e)},{name:"month",round:26784e5,format:e=>o.DateFormat.dStr(e)},{name:"year",round:31536e6,format:e=>e.getFullYear()}],this.fieldViews=[],this.visibleRecord=void 0,this.onKey(r.Keys.DOM_VK_ESCAPE,this.closeHistory),this.once("remove",(()=>{this.removeFieldViews()}))}render(){super.render(),this.history=this.model.getHistory(),this.buildTimeline(),this.timelineEl=this.$el.find(".details__history-timeline"),this.bodyEl=this.$el.find(".details__history-body"),this.timeline.forEach((function(e,t){g("<i/>").addClass("fa fa-circle details__history-timeline-item").css("left",100*e.pos+"%").attr("data-id",t).appendTo(this.timelineEl)}),this),this.labels.forEach((function(e){g("<div/>").addClass("details__history-timeline-label").css("left",100*e.pos+"%").text(e.text).appendTo(this.timelineEl)}),this);let e=this.visibleRecord;void 0===e&&(e=this.history.length-1),this.showRecord(e)}removeFieldViews(){this.fieldViews.forEach((e=>e.remove())),this.fieldViews=[]}showRecord(e){this.activeIx=e,this.record=this.timeline[e].rec,this.timelineEl.find(".details__history-timeline-item").removeClass("details__history-timeline-item--active"),this.timelineEl.find('.details__history-timeline-item[data-id="'+e+'"]').addClass("details__history-timeline-item--active"),this.removeFieldViews(),this.bodyEl.empty();const t=this.record.color?this.record.color+"-color":"";this.fieldViews.push(new u.FieldViewReadOnly({name:"Rev",title:l.Locale.detHistoryVersion,value:e+1})),this.fieldViews.push(new u.FieldViewReadOnly({name:"Updated",title:l.Locale.detHistorySaved,value:o.DateFormat.dtStr(this.record.updated)+(this.record.unsaved?" ("+l.Locale.detHistoryCurUnsavedState+")":"")+(e!==this.history.length-1||this.record.unsaved?"":" ("+l.Locale.detHistoryCurState+")")})),this.fieldViews.push(new d.FieldViewReadOnlyRaw({name:"$Title",title:a.StringFormat.capFirst(l.Locale.title),value:'<i class="fa fa-'+this.record.icon+" "+t+'"></i> '+(0,h.escape)(this.record.title)||0})),this.fieldViews.push(new u.FieldViewReadOnly({name:"$UserName",title:a.StringFormat.capFirst(l.Locale.user),value:this.record.user})),this.fieldViews.push(new u.FieldViewReadOnly({name:"$Password",title:a.StringFormat.capFirst(l.Locale.password),value:this.record.password})),this.fieldViews.push(new u.FieldViewReadOnly({name:"$URL",title:a.StringFormat.capFirst(l.Locale.website),value:this.record.url})),this.fieldViews.push(new u.FieldViewReadOnly({name:"$Notes",title:a.StringFormat.capFirst(l.Locale.notes),value:this.record.notes})),this.fieldViews.push(new u.FieldViewReadOnly({name:"Tags",title:a.StringFormat.capFirst(l.Locale.tags),value:this.record.tags.join(", ")})),this.fieldViews.push(new u.FieldViewReadOnly({name:"Expires",title:l.Locale.detExpires,value:this.record.expires?o.DateFormat.dtStr(this.record.expires):""}));for(const[e,t]of Object.entries(this.record.fields))this.fieldViews.push(new u.FieldViewReadOnly({name:"$"+e,title:e,value:t}));this.record.attachments.length&&this.fieldViews.push(new u.FieldViewReadOnly({name:"Attachments",title:l.Locale.detAttachments,value:this.record.attachments.map((e=>e.title)).join(", ")})),this.fieldViews.forEach((e=>{e.parent=this.bodyEl[0],e.render(),e.on("copy",this.fieldCopied.bind(this))}));const n=this.$el.find(".details__history-buttons");n.find(".details__history-button-revert").toggle(e<this.history.length-1),n.find(".details__history-button-delete").toggle(e<this.history.length-1),n.find(".details__history-button-discard").toggle(this.record.unsaved&&e===this.history.length-1&&this.history.length>1||!1)}timelineItemClick(e){const t=g(e.target).closest(".details__history-timeline-item").data("id");this.showRecord(t)}timelinePrevClick(){this.activeIx>0&&this.showRecord(this.activeIx-1)}timelineNextClick(){this.activeIx<this.timeline.length-1&&this.showRecord(this.activeIx+1)}buildTimeline(){const e=this.history[0],t=this.history[this.history.length-1];this.timeline=this.history.map((n=>({pos:(n.updated-e.updated)/(t.updated-e.updated),rec:n})));const n=t.updated-e.updated,s=this.getDateFormat(n);this.labels=this.getLabels(e.updated.getTime(),t.updated.getTime(),s.round).map((n=>({pos:(n-e.updated)/(t.updated-e.updated),val:n,text:s.format(new Date(n))})))}getDateFormat(e){for(let t=0;t<this.formats.length;t++)if(e<1.2*this.formats[t].round)return this.formats[t>0?t-1:0];return this.formats[this.formats.length-1]}getLabels(e,t,n){const s=Math.floor((t-e)/n);s>2&&(n*=Math.ceil(s/2));const i=[];let r=Math.ceil(e/n)*n;for(;r<t;)i.push(r),r+=n;return i.length>1&&(i[0]-e)/(t-e)<.1&&i.shift(),i}closeHistory(e){this.emit("close",{updated:e})}revertClick(){i.Alerts.yesno({header:l.Locale.detHistoryRevertAlert,body:l.Locale.detHistoryRevertAlertBody,success:()=>{this.model.revertToHistoryState(this.record.entry),this.closeHistory(!0)}})}deleteClick(){i.Alerts.yesno({header:l.Locale.detHistoryDeleteAlert,body:l.Locale.detHistoryDeleteAlertBody,success:()=>{this.model.deleteHistory(this.record.entry),this.visibleRecord=this.activeIx,this.render()}})}discardClick(){i.Alerts.yesno({header:l.Locale.detHistoryDiscardChangesAlert,body:l.Locale.detHistoryDiscardChangesAlertBody,success:()=>{this.model.discardUnsaved(),this.closeHistory(!0)}})}}Object.assign(f.prototype,c.Copyable)},2524:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DetailsIssuesView:()=>m});var s=n(7779),i=n(7201),r=n(5285),o=n.n(r),a=n(4530),l=n(403),c=n(3297),u=n(905),d=n(7614),h=n(9673),p=n(4558);class m extends s.View{constructor(e){super(e),this.parent=".details__issues-container",this.template=o(),this.events={"click .details__issues-close-btn":"closeIssuesClick"},this.passwordIssue=null,this.listenTo(d.AppSettingsModel,"change",this.settingsChanged),d.AppSettingsModel.auditPasswords&&this.checkPasswordIssues()}render(e){d.AppSettingsModel.auditPasswords?super.render({hibpLink:h.Links.HaveIBeenPwned,passwordIssue:this.passwordIssue,fadeIn:null==e?void 0:e.fadeIn}):super.render()}settingsChanged(){d.AppSettingsModel.auditPasswords&&this.checkPasswordIssues(),this.render()}passwordChanged(){const e=this.passwordIssue;if(this.checkPasswordIssues(),e!==this.passwordIssue){const t=!e;this.passwordIssue?this.render({fadeIn:t}):(this.el.classList.add("fade-out"),setTimeout((()=>this.render()),l.Timeouts.FastAnimation))}}checkPasswordIssues(){if(!this.model.canCheckPasswordIssues())return void(this.passwordIssue=null);const{password:e}=this.model;if(!e||!e.isProtected||!e.byteLength)return void(this.passwordIssue=null);const t=d.AppSettingsModel.auditPasswordEntropy,n=(0,u.passwordStrength)(e);d.AppSettingsModel.excludePinsFromAudit&&n.onlyDigits&&n.length<=6?this.passwordIssue=null:t&&n.level<u.PasswordStrengthLevel.Low?this.passwordIssue="poor":t&&n.level<u.PasswordStrengthLevel.Good?this.passwordIssue="weak":d.AppSettingsModel.auditPasswordAge&&this.isOld()?this.passwordIssue="old":(this.passwordIssue=null,this.checkOnHIBP())}isOld(){if(!this.model.updated)return!1;const e=new Date(this.model.updated);return e.setFullYear(e.getFullYear()+d.AppSettingsModel.auditPasswordAge),e<Date.now()}checkOnHIBP(){if(!d.AppSettingsModel.checkPasswordsOnHIBP)return;const e=(0,p.checkIfPasswordIsExposedOnline)(this.model.password);if("boolean"==typeof e)this.passwordIssue=e?"pwned":null;else{var t;const n=null===(t=this.el)||void 0===t?void 0:t.querySelector(".details__issues-icon");null==n||n.classList.add("details__issues-icon--loading"),e.then((e=>{e?this.passwordIssue="pwned":!1===e?"pwned"===this.passwordIssue&&(this.passwordIssue=null):this.passwordIssue=n?"error":null,this.render()}))}}closeIssuesClick(){a.Alerts.alert({header:c.Locale.detIssueCloseAlertHeader,body:c.Locale.detIssueCloseAlertBody,icon:"exclamation-triangle",buttons:[{result:"entry",title:c.Locale.detIssueCloseAlertEntry,silent:!0},{result:"settings",title:c.Locale.detIssueCloseAlertSettings,silent:!0},a.Alerts.buttons.cancel],esc:"",click:"",success:e=>{switch(e){case"entry":this.disableAuditForEntry();break;case"settings":this.openAuditSettings()}}})}disableAuditForEntry(){this.model.setIgnorePasswordIssues(),this.checkPasswordIssues(),this.render()}openAuditSettings(){i.Events.emit("toggle-settings","general","audit")}}},2766:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DetailsView:()=>K});var s=n(3617),i=n(7779),r=n(7201),o=n(3898),a=n(5933),l=n(1164),c=n(6655),u=n(4530),d=n(2977),h=n(403),p=n(7614),m=n(5572),g=n(667),f=n(3297),A=n(2547),y=n(3710),v=n(4796),b=n(7015),w=n(3122),k=n(2550),C=n(4184),_=n(264),E=n(2524),x=n(1434),I=n(9042),S=n(4169),D=n(3872),B=n(6838),P=n(2914),T=n.n(P),F=n(2892),M=n.n(F),O=n(5462),L=n.n(O),N=n(9491),R=n(6718);class K extends i.View{constructor(e,t){super(e,t),this.parent=".app__details",this.fieldViews=[],this.fieldCopyTip=null,this.events={"click .details__colors-popup-item":"selectColor","click .details__header-icon":"toggleIcons","click .details__attachment":"toggleAttachment","click .details__header-title":"editTitle","click .details__history-link":"showHistory","click .details__buttons-trash":"moveToTrash","click .details__buttons-trash-del":"deleteFromTrash","click .details__back-button":"backClick","click .details__attachment-add":"attachmentBtnClick","change .details__attachment-input-file":"attachmentFileChange","dragover .details":"dragover","dragleave .details":"dragleave","drop .details":"drop","contextmenu .details":"contextMenu"},this.initScroll(),this.listenTo(r.Events,"entry-selected",this.showEntry),this.listenTo(r.Events,"copy-password",this.copyPassword),this.listenTo(r.Events,"copy-user",this.copyUserName),this.listenTo(r.Events,"copy-url",this.copyUrl),this.listenTo(r.Events,"copy-otp",this.copyOtp),this.listenTo(r.Events,"toggle-settings",this.settingsToggled),this.listenTo(r.Events,"context-menu-select",this.contextMenuSelect),this.listenTo(r.Events,"set-locale",this.render),this.listenTo(r.Events,"qr-read",this.otpCodeRead),this.listenTo(r.Events,"qr-enter-manually",this.otpEnterManually),this.onKey(d.Keys.DOM_VK_C,this.copyPasswordFromShortcut,l.KeyHandler.SHORTCUT_ACTION,!1,!0),this.onKey(d.Keys.DOM_VK_B,this.copyUserName,l.KeyHandler.SHORTCUT_ACTION),this.onKey(d.Keys.DOM_VK_U,this.copyUrl,l.KeyHandler.SHORTCUT_ACTION),this.onKey(d.Keys.DOM_VK_2,this.copyOtp,l.KeyHandler.SHORTCUT_OPT),o.AutoType.enabled&&this.onKey(d.Keys.DOM_VK_T,(()=>this.autoType()),l.KeyHandler.SHORTCUT_ACTION),this.onKey(d.Keys.DOM_VK_DELETE,this.deleteKeyPress,l.KeyHandler.SHORTCUT_ACTION,!1,!0),this.onKey(d.Keys.DOM_VK_BACK_SPACE,this.deleteKeyPress,l.KeyHandler.SHORTCUT_ACTION,!1,!0),this.once("remove",(()=>{this.removeFieldViews()}))}removeFieldViews(){this.fieldViews.forEach((e=>e.remove())),this.fieldViews=[],this.hideFieldCopyTip()}render(){if(y.Tip.destroyTips(this.$el),this.removeScroll(),this.removeFieldViews(),this.removeInnerViews(),!this.model)return this.template=M(),void super.render();if(this.model instanceof m.GroupModel)return this.template=L(),void super.render();const e=Object.assign({deleted:this.appModel.filter.trash,canEditColor:this.model.file.supportsColors&&!this.model.readOnly,canEditIcon:this.model.file.supportsIcons&&!this.model.readOnly,showButtons:!this.model.backend&&!this.model.readOnly},this.model);this.template=T(),super.render(e),this.setSelectedColor(this.model.color),this.addFieldViews(),this.checkPasswordIssues(),this.createScroll({root:this.$el.find(".details__body")[0],scroller:this.$el.find(".scroller")[0],bar:this.$el.find(".scroller__bar")[0]}),this.$el.find(".details").removeClass("details--drag"),this.dragging=!1,this.dragTimeout&&clearTimeout(this.dragTimeout),this.pageResized(),this.showCopyTip()}getFieldView(e){return this.fieldViews.find((t=>t.model.name===e))}addFieldViews(){const{fieldViews:e,fieldViewsAside:t}=(0,I.createDetailsFields)(this),n=p.AppSettingsModel.hideEmptyFields,s=this.$el.find(".details__body-fields"),i=this.$el.find(".details__body-aside");for(const r of[e,t])for(const t of r)if(t.parent=r===e?s[0]:i[0],t.render(),t.on("change",this.fieldChanged.bind(this)),t.on("copy",(e=>this.copyFieldValue(e))),t.on("autotype",(e=>this.autoType(e.source.model.sequence))),n){const e=t.model.value();if(!e||0===e.length||0===e.byteLength){if(this.model.isJustCreated){if(!["$URL","$Notes","Tags","Expires","History"].includes(t.model.name))continue}t.hide()}}this.fieldViews=e.concat(t),this.model.backend||(this.moreView=new w.DetailsAddFieldView,this.moreView.render(),this.moreView.on("add-field",this.addNewField.bind(this)),this.moreView.on("more-click",this.toggleMoreOptions.bind(this)))}addNewField(e){this.moreView.remove(),this.moreView=null;let t=e||f.Locale.detNetField;if(this.model.fields[t])for(let e=1;;e++){const n=t+e;if(!this.model.fields[n]){t=n;break}}const n=(0,I.createNewCustomField)(t,{parent:this.$el.find(".details__body-fields")[0]},this.model);n.on("change",this.fieldChanged.bind(this)),n.render(),n.edit(),this.fieldViews.push(n)}toggleMoreOptions(){this.views.dropdownView?(this.views.dropdownView.remove(),this.views.dropdownView=null):setTimeout((()=>{const e=new x.DropdownView;this.listenTo(e,"cancel",this.toggleMoreOptions),this.listenTo(e,"select",this.moreOptionsSelect);const t=p.AppSettingsModel.hideEmptyFields,n=[];t?(this.fieldViews.forEach((e=>{e.isHidden()&&n.push({value:"add:"+e.model.name,icon:"pencil-alt",text:f.Locale.detMenuAddField.replace("{}",e.model.title)})}),this),n.push({value:"add-new",icon:"plus",text:f.Locale.detMenuAddNewField}),this.model.url&&n.push({value:"add-website",icon:"plus",text:f.Locale.detMenuAddNewWebsite}),n.push({value:"toggle-empty",icon:"eye",text:f.Locale.detMenuShowEmpty})):(n.push({value:"add-new",icon:"plus",text:f.Locale.detMenuAddNewField}),this.model.url&&n.push({value:"add-website",icon:"plus",text:f.Locale.detMenuAddNewWebsite}),n.push({value:"toggle-empty",icon:"eye-slash",text:f.Locale.detMenuHideEmpty})),n.push({value:"otp",icon:"clock",text:f.Locale.detSetupOtp}),o.AutoType.enabled&&n.push({value:"auto-type",icon:"keyboard",text:f.Locale.detAutoTypeSettings}),n.push({value:"clone",icon:"clone",text:f.Locale.detClone}),n.push({value:"copy-to-clipboard",icon:"copy",text:f.Locale.detCopyEntryToClipboard});const s=this.moreView.labelEl[0].getBoundingClientRect();e.render({position:{top:s.bottom,left:s.left},options:n}),this.views.dropdownView=e}))}moreOptionsSelect(e){switch(this.views.dropdownView.remove(),this.views.dropdownView=null,e.item){case"add-new":this.addNewField();break;case"add-website":this.addNewField(this.model.getNextUrlFieldName());break;case"toggle-empty":{const e=p.AppSettingsModel.hideEmptyFields;p.AppSettingsModel.hideEmptyFields=!e,this.render();break}case"otp":this.setupOtp();break;case"auto-type":this.toggleAutoType();break;case"clone":this.clone();break;case"copy-to-clipboard":this.copyToClipboard();break;default:if(0===e.item.lastIndexOf("add:",0)){const t=e.item.substr(4),n=this.fieldViews.find((e=>e.model.name===t));n.show(),n.edit()}}}getUserNameCompletions(e){return this.appModel.completeUserNames(e)}setSelectedColor(e){this.$el.find(".details__colors-popup > .details__colors-popup-item").removeClass("details__colors-popup-item--active");const t=this.$el.find(".details__header-color")[0];for(const e of t.classList)e.indexOf("color")>0&&0!==e.lastIndexOf("details",0)&&t.classList.remove(e);e&&(this.$el.find(".details__colors-popup > ."+e+"-color").addClass("details__colors-popup-item--active"),t.classList.add(e+"-color"))}selectColor(e){let t=R(e.target).closest(".details__colors-popup-item").data("color");t&&(t===this.model.color&&(t=null),this.model.setColor(t),this.entryUpdated())}toggleIcons(){if(this.model.backend)return;if(this.views.sub&&this.views.sub instanceof D.IconSelectView)return void this.render();this.removeSubView();const e=new D.IconSelectView({iconId:this.model.customIconId||this.model.iconId,url:this.model.url,file:this.model.file},{parent:this.scroller[0],replace:!0});this.listenTo(e,"select",this.iconSelected),e.render(),this.pageResized(),this.views.sub=e}toggleAttachment(e){const t=R(e.target).closest(".details__attachment"),n=t.data("id"),s=this.model.attachments[n];if(e.altKey||e.shiftKey||e.ctrlKey||e.metaKey)return void this.downloadAttachment(s);if(this.views.sub&&this.views.sub.attId===n)return void this.render();this.removeSubView();const i=new k.DetailsAttachmentView(s,{parent:this.scroller[0],replace:!0});i.attId=n,i.render(this.pageResized.bind(this)),i.on("download",(()=>this.downloadAttachment(s))),this.listenTo(i,"close",this.render.bind(this)),this.views.sub=i,t.addClass("details__attachment--active")}removeSubView(){this.$el.find(".details__attachment").removeClass("details__attachment--active"),this.views.sub&&(this.views.sub.remove(),delete this.views.sub)}downloadAttachment(e){const t=e.getBinary();if(!t)return;const n=e.mimeType||"application/octet-stream",s=new Blob([t],{type:n});A.FileSaver.saveAs(s,e.title)}iconSelected(e){e.custom?e.id!==this.model.customIconId?(this.model.setCustomIcon(e.id),this.entryUpdated()):this.render():e.id!==this.model.iconId?(this.model.setIcon(+e.id),this.entryUpdated()):this.render()}showEntry(e){this.model=e,this.initOtp(),this.render(),e&&!e.title&&e.isJustCreated&&this.editTitle()}initOtp(){var e,t,n;this.matchingOtpEntry=null,this.model&&(null===(e=(t=this.model).initOtpGenerator)||void 0===e||e.call(t),"otp-device"!==this.model.backend&&(this.matchingOtpEntry=this.appModel.getMatchingOtpEntry(this.model),null===(n=this.matchingOtpEntry)||void 0===n||n.initOtpGenerator()))}copyKeyPress(e){if(!e||this.isHidden())return!1;if(!window.getSelection().toString()){const t=e.getTextValue();if(!t)return;a.CopyPaste.simpleCopy||a.CopyPaste.createHiddenInput(t);const n=a.CopyPaste.copy(t);return this.copyFieldValue({source:e,copyRes:n}),!0}return!1}copyPasswordFromShortcut(e){if(!this.model)return;"otp-device"===this.model.backend&&(this.copyOtp(),e.preventDefault());this.copyKeyPress(this.getFieldView("$Password"))&&e.preventDefault()}copyPassword(){this.copyKeyPress(this.getFieldView("$Password"))}copyUserName(){this.copyKeyPress(this.getFieldView("$UserName"))}copyUrl(){this.copyKeyPress(this.getFieldView("$URL"))}copyOtp(){const e=this.getFieldView("$otp");if("otp-device"===this.model.backend)return!!e&&(e.copyValue(),!0);this.copyKeyPress(e)}showCopyTip(){if(this.helpTipCopyShown)return;if(this.helpTipCopyShown=p.AppSettingsModel.helpTipCopyShown,this.helpTipCopyShown)return;p.AppSettingsModel.helpTipCopyShown=!0,this.helpTipCopyShown=!0;const e=this.moreView.labelEl,t=new y.Tip(e,{title:f.Locale.detCopyHint,placement:"right"});t.show(),this.fieldCopyTip=t,setTimeout((()=>{t.hide()}),h.Timeouts.AutoHideHint)}settingsToggled(){this.hideFieldCopyTip()}fieldChanged(e){if(e.field){if("$"===e.field[0]){let t=e.field.substr(1);if("otp"===t){if(this.otpFieldChanged(e.val))return void this.entryUpdated()}else{if(e.newField){t&&this.model.setField(t,void 0),t=e.newField;let n=0;for(;this.model.hasField(t);)n++,t=e.newField+n;const s=this.model.group.isEntryTemplatesGroup();return this.model.setField(t,e.val,s),void this.entryUpdated()}if("File"===t){const t=this.appModel.files.get(e.val);return this.model.moveToFile(t),this.appModel.activeEntryId=this.model.id,this.entryUpdated(),void r.Events.emit("entry-selected",this.model)}t&&this.model.setField(t,e.val)}"Password"===t&&this.views.issues&&this.views.issues.passwordChanged()}else if("Tags"===e.field)this.model.setTags(e.val),this.appModel.updateTags();else if("Expires"===e.field){const t=e.val||void 0;(0,B.isEqual)(t,this.model.expires)||this.model.setExpires(t)}this.entryUpdated(!0),this.fieldViews.forEach((function(e,t){e instanceof S.FieldViewCustom&&!e.model.newField&&!this.model.hasField(e.model.title)||e.model.isExtraUrl&&!e.model.newField&&!this.model.hasField(e.model.name.replace("$",""))?(e.remove(),this.fieldViews.splice(t,1)):e.update()}),this)}else if(e.newField)return void this.render();e.tab&&this.focusNextField(e.tab)}otpFieldChanged(e){let t=this.model.fields.otp;return t&&t.isProtected&&(t=t.getText()),e&&e.isProtected&&(e=e.getText()),t===e?(this.render(),!1):(this.model.setOtpUrl(e),!0)}dragover(e){e.preventDefault(),e.stopPropagation();const t=e.dataTransfer;t.types&&(t.types.indexOf?-1!==t.types.indexOf("Files"):t.types.contains("Files"))?(t.dropEffect="copy",this.dragTimeout&&clearTimeout(this.dragTimeout),this.model&&!this.dragging&&(this.dragging=!0,this.$el.find(".details").addClass("details--drag"))):t.dropEffect="none"}dragleave(){this.dragTimeout&&clearTimeout(this.dragTimeout),this.dragTimeout=setTimeout((()=>{this.$el.find(".details").removeClass("details--drag"),this.dragging=!1}),100)}drop(e){if(e.preventDefault(),!this.model)return;this.dragTimeout&&clearTimeout(this.dragTimeout),this.$el.find(".details").removeClass("details--drag"),this.dragging=!1;const t=e.target.files||e.dataTransfer.files;this.addAttachedFiles(t)}attachmentBtnClick(){this.$el.find(".details__attachment-input-file")[0].click()}attachmentFileChange(e){this.addAttachedFiles(e.target.files)}addAttachedFiles(e){for(const t of e){const e=new FileReader;e.onload=()=>{this.addAttachment(t.name,e.result)},e.readAsArrayBuffer(t)}}addAttachment(e,t){this.model.addAttachment(e,t).then((()=>{this.entryUpdated()}))}deleteKeyPress(e){if(this.views.sub&&void 0!==this.views.sub.attId){e.preventDefault();const t=this.model.attachments[this.views.sub.attId];this.model.removeAttachment(t.title),this.render()}}editTitle(){if("otp-device"===this.model.backend)return;const e=R("<input/>").addClass("details__header-title-input").attr({autocomplete:"off",spellcheck:"false",placeholder:"Title"}).val(this.model.title);e.bind({blur:this.titleInputBlur.bind(this),input:this.titleInputInput.bind(this),keydown:this.titleInputKeydown.bind(this),keypress:this.titleInputInput.bind(this)}),R(".details__header-title").replaceWith(e),e.focus()[0].setSelectionRange(this.model.title.length,this.model.title.length)}titleInputBlur(e){this.setTitle(e.target.value)}titleInputInput(e){e.stopPropagation()}titleInputKeydown(e){l.KeyHandler.reg(),e.stopPropagation();const t=e.keyCode||e.which;if(t===d.Keys.DOM_VK_RETURN)R(e.target).unbind("blur"),this.setTitle(e.target.value);else if(t===d.Keys.DOM_VK_ESCAPE){if(R(e.target).unbind("blur"),this.model.isJustCreated)return this.model.removeWithoutHistory(),void r.Events.emit("refresh");this.render()}else t===d.Keys.DOM_VK_TAB&&(e.preventDefault(),R(e.target).unbind("blur"),this.setTitle(e.target.value),e.shiftKey||this.focusNextField({field:"$Title"}))}setTitle(e){this.model.title instanceof s.ProtectedValue&&(e=s.ProtectedValue.fromString(e)),e!==this.model.title&&(this.model.setField("Title",e),this.entryUpdated(!0));const t=R('<h1 class="details__header-title"></h1>').text(e||"(no title)");this.$el.find(".details__header-title-input").replaceWith(t)}entryUpdated(e){r.Events.emit("entry-updated",{entry:this.model}),this.initOtp(),e||this.render()}focusNextField(e){let t,n=!1;"$Title"!==e.field||e.prev||(n=!0);const s=e.prev?this.fieldViews.length-1:0,i=e.prev?-1:this.fieldViews.length,r=e.prev?-1:1;for(let o=s;o!==i;o+=r){const s=this.fieldViews[o];if(s.model.name===e.field)n=!0;else if(n&&!s.readonly&&!s.isHidden()){t=s;break}}t&&t.edit()}showHistory(){this.removeSubView();const e=new _.DetailsHistoryView(this.model,{parent:this.scroller[0],replace:!0});this.listenTo(e,"close",this.historyClosed.bind(this)),e.render(),this.pageResized(),this.views.sub=e}historyClosed(e){e.updated?this.entryUpdated():this.render()}moveToTrash(){const e=()=>{this.model.moveToTrash(),r.Events.emit("refresh")};g.Features.isMobile?u.Alerts.yesno({header:f.Locale.detDelToTrash,body:f.Locale.detDelToTrashBody,icon:"trash-alt",success:e}):e()}clone(){const e=this.model.cloneEntry(" "+f.Locale.detClonedName);r.Events.emit("select-entry",e)}copyToClipboard(){a.CopyPaste.copyHtml(this.model.getHtml())}deleteFromTrash(){u.Alerts.yesno({header:f.Locale.detDelFromTrash,body:f.Locale.detDelFromTrashBody,hint:f.Locale.detDelFromTrashBodyHint,icon:"minus-circle",success:()=>{this.model.deleteFromTrash(),r.Events.emit("refresh")}})}backClick(){r.Events.emit("toggle-details",!1)}contextMenu(e){const t=document.queryCommandSupported("copy"),n=[];t&&("otp-device"===this.model.backend?n.push({value:"det-copy-otp",icon:"copy",text:f.Locale.detMenuCopyOtp}):n.push({value:"det-copy-password",icon:"copy",text:f.Locale.detMenuCopyPassword}),n.push({value:"det-copy-user",icon:"copy",text:f.Locale.detMenuCopyUser})),this.model.backend||(n.push({value:"det-add-new",icon:"plus",text:f.Locale.detMenuAddNewField}),n.push({value:"det-clone",icon:"clone",text:f.Locale.detClone}),t&&n.push({value:"copy-to-clipboard",icon:"clipboard",text:f.Locale.detCopyEntryToClipboard})),o.AutoType.enabled&&n.push({value:"det-auto-type",icon:"keyboard",text:f.Locale.detAutoType}),r.Events.emit("show-context-menu",Object.assign(e,{options:n}))}contextMenuSelect(e){switch(e.item){case"det-copy-password":this.copyPassword();break;case"det-copy-user":this.copyUserName();break;case"det-copy-otp":this.copyOtp();break;case"det-add-new":this.addNewField();break;case"det-clone":this.clone();break;case"det-auto-type":this.autoType();break;case"copy-to-clipboard":this.copyToClipboard()}}setupOtp(){c.OtpQrReader.read()}otpCodeRead(e){this.model.setOtp(e),this.entryUpdated()}otpEnterManually(){if(this.model.fields.otp){const e=this.fieldViews.find((e=>"$otp"===e.model.name));e&&e.edit()}else{this.moreView.remove(),this.moreView=null;const e=new S.FieldViewCustom({name:"$otp",title:"otp",newField:"otp",value:s.ProtectedValue.fromString("")},{parent:this.$el.find(".details__body-fields")[0]});e.on("change",this.fieldChanged.bind(this)),e.render(),e.edit(),this.fieldViews.push(e)}}toggleAutoType(){if(this.views.autoType)return this.views.autoType.remove(),void delete this.views.autoType;this.views.autoType=new C.DetailsAutoTypeView(this.model),this.views.autoType.render()}autoType(e){const t=this.model;if((null==e?void 0:e.includes("{TOTP}"))||"otp-device"===t.backend&&!e){const n=this.getFieldView("$otp");n.refreshOtp((s=>{s||r.Events.emit("auto-type",{entry:t,sequence:e,context:{resolved:{totp:n.otpValue}}})}))}else r.Events.emit("auto-type",{entry:t,sequence:e})}checkPasswordIssues(){this.model.readOnly||(this.views.issues=new E.DetailsIssuesView(this.model),this.views.issues.render())}copyFieldValue(e){this.fieldCopied(e),p.AppSettingsModel.minimizeOnFieldCopy&&N.Launcher.minimizeApp()}}Object.assign(K.prototype,b.Scrollable),Object.assign(K.prototype,v.Copyable)},1864:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DragView:()=>a});var s=n(7779),i=n(5220),r=n.n(i),o=n(6718);class a extends s.View{constructor(e,t){super(e,t),this.template=r(),this.events={mousedown:"mousedown"},this.setCoord(e),this.mouseDownTime=-1,this.mouseDownCount=0}render(){super.render({coord:this.model})}setCoord(e){this.coord=e,this.offsetProp="page"+e.toUpperCase()}mousedown(e){if(1===e.which){const t=Date.now();if(t-this.mouseDownTime<500){if(this.mouseDownCount++,2===this.mouseDownCount)return void this.emit("autosize",{coord:this.coord})}else this.mouseDownTime=t,this.mouseDownCount=1;this.initialOffset=e[this.offsetProp];const n=this.$el.css("cursor");this.dragMask=o("<div/>",{class:"drag-mask"}).css("cursor",n).appendTo("body"),this.dragMask.on("mousemove",this.mousemove.bind(this)),this.dragMask.on("mouseup",this.mouseup.bind(this)),this.emit("dragstart",{offset:this.initialOffset,coord:this.coord}),this.$el.addClass("dragging"),e.preventDefault()}}mousemove(e){0===e.which?this.mouseup():this.emit("drag",{offset:e[this.offsetProp]-this.initialOffset})}mouseup(){this.dragMask.remove(),this.$el.removeClass("dragging")}}},1434:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DropdownView:()=>c});var s=n(7201),i=n(7779),r=n(2977),o=n(1460),a=n.n(o),l=n(6718);class c extends i.View{constructor(e){super(e),this.parent="body",this.modal="dropdown",this.template=a(),this.events={"click .dropdown__item":"itemClick"},s.Events.emit("dropdown-shown"),this.bodyClick=this.bodyClick.bind(this),this.listenTo(s.Events,"show-context-menu",this.bodyClick),this.listenTo(s.Events,"dropdown-shown",this.bodyClick),l("body").on("click contextmenu keydown",this.bodyClick),this.onKey(r.Keys.DOM_VK_UP,this.upPressed,!1,"dropdown"),this.onKey(r.Keys.DOM_VK_DOWN,this.downPressed,!1,"dropdown"),this.onKey(r.Keys.DOM_VK_RETURN,this.enterPressed,!1,"dropdown"),this.onKey(r.Keys.DOM_VK_ESCAPE,this.escPressed,!1,"dropdown"),this.once("remove",(()=>{l("body").off("click contextmenu keydown",this.bodyClick)})),this.selectedOption=null==e?void 0:e.selectedOption}render(e){this.options=e.options,super.render(e);const t=this.$el[0].getBoundingClientRect(),n=document.body.getBoundingClientRect();let s=e.position.left||e.position.right-t.right+t.left,i=e.position.top;s+t.width>n.right&&(s=Math.max(0,n.right-t.width)),i+t.height>n.bottom&&(i=Math.max(0,n.bottom-t.height)),this.$el.css({top:i,left:s}),"number"==typeof this.selectedOption&&this.renderSelectedOption()}bodyClick(e){e&&[r.Keys.DOM_VK_UP,r.Keys.DOM_VK_DOWN,r.Keys.DOM_VK_RETURN,r.Keys.DOM_VK_ESCAPE].includes(e.which)||this.removed||this.emit("cancel")}itemClick(e){e.stopPropagation();const t=l(e.target).closest(".dropdown__item"),n=t.data("value");this.emit("select",{item:n,el:t})}upPressed(e){e.preventDefault(),this.selectedOption?this.selectedOption--:this.selectedOption=this.options.length-1,this.renderSelectedOption()}downPressed(e){e.preventDefault(),void 0===this.selectedOption||this.selectedOption===this.options.length-1?this.selectedOption=0:this.selectedOption++,this.renderSelectedOption()}renderSelectedOption(){this.$el.find(".dropdown__item").removeClass("dropdown__item--active"),this.$el.find(`.dropdown__item:nth(${this.selectedOption})`).addClass("dropdown__item--active")}enterPressed(){if(!this.removed&&void 0!==this.selectedOption){const e=this.$el.find(`.dropdown__item:nth(${this.selectedOption})`),t=e.data("value");this.emit("select",{item:t,el:e})}}escPressed(e){e.stopImmediatePropagation(),this.removed||this.emit("cancel")}}},7031:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ExtensionConnectView:()=>o});var s=n(7779),i=n(1388),r=n.n(i);class o extends s.View{constructor(e){super(e),this.template=r(),this.events={"change #extension-connect__ask-get":"askGetChanged","change .extension-connect__file-check":"fileChecked"},this.config={askGet:this.model.askGet,allFiles:this.model.allFiles,files:this.model.files.filter((e=>e.checked)).map((e=>e.id))}}render(){super.render(Object.assign({},this.model,this.config,{files:this.model.files.map((e=>({id:e.id,name:e.name,checked:this.config.files.includes(e.id)})))}))}fileChecked(e){const t=e.target.dataset.file,n=e.target.checked;"all"===t?(this.config.allFiles=n,this.config.files=this.model.files.map((e=>e.id))):n?this.config.files.push(t):(this.config.files=this.config.files.filter((e=>e!==t)),this.config.allFiles=!1),this.render();const s=this.config.files.length>0||this.config.allFiles;document.querySelector(".modal button[data-result=yes]").classList.toggle("hide",!s)}askGetChanged(e){this.config.askGet=e.target.value}}},9793:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ExtensionCreateGroupView:()=>o});var s=n(7779),i=n(1582),r=n.n(i);class o extends s.View{constructor(e){super(e),this.template=r(),this.events={"change #extension-create-group__file":"fileChanged"},this.selectedFile=e.files.find((e=>e.selected)).id}render(){super.render(this.model)}fileChanged(e){this.selectedFile=e.target.value}}},2729:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ExtensionSaveEntryView:()=>o});var s=n(7779),i=n(7396),r=n.n(i);class o extends s.View{constructor(e){super(e),this.template=r(),this.events={"change #extension-save-entry__auto":"autoChanged","change #extension-save-entry__group":"groupChanged"};const t=e.allGroups.find((e=>e.selected));this.config={askSave:e.askSave||"always",groupId:t.id,fileId:t.fileId}}render(){super.render(this.model)}autoChanged(e){this.config.askSave=e.target.checked?"auto":"always"}groupChanged(e){const t=e.target.options[e.target.selectedIndex];this.config.groupId=t.value,this.config.fileId=t.dataset.file}}},2969:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldViewAutocomplete:()=>l});var s=n(2977),i=n(1297),r=n(2617),o=n.n(r),a=n(6718);class l extends i.FieldViewText{constructor(...e){super(...e),this.hasOptions=!0}endEdit(e,t){this.autocomplete&&(this.autocomplete.remove(),this.autocomplete=null),delete this.selectedCompletionIx,super.endEdit(e,t)}startEdit(){super.startEdit();const e=this.input[0].getBoundingClientRect(),t=parseInt(this.input.css("--focus-shadow-spread"))||0;this.autocomplete=a('<div class="details__field-autocomplete"></div>').appendTo("body"),this.autocomplete.css({top:e.bottom+t,left:e.left,width:e.width-2}),delete this.selectedCompletionIx,this.autocomplete.mousedown(this.autocompleteClick.bind(this)),this.input.val()?this.autocomplete.hide():this.updateAutocomplete()}fieldValueInput(e){e.stopPropagation(),this.updateAutocomplete(),super.fieldValueInput.call(this,e)}fieldValueKeydown(e){switch(e.which){case s.Keys.DOM_VK_UP:this.moveAutocomplete(!1),e.preventDefault();break;case s.Keys.DOM_VK_DOWN:this.moveAutocomplete(!0),e.preventDefault();break;case s.Keys.DOM_VK_RETURN:{const e=this.autocomplete.find(".details__field-autocomplete-item--selected").text();e&&(this.input.val(e),this.endEdit(e));break}default:delete this.selectedCompletionIx}super.fieldValueKeydown(e)}moveAutocomplete(e){const t=this.model.getCompletions(this.input.val());"number"==typeof this.selectedCompletionIx?this.selectedCompletionIx=(t.length+this.selectedCompletionIx+(e?1:-1))%t.length:this.selectedCompletionIx=e?0:t.length-1,this.updateAutocomplete()}updateAutocomplete(){const e=this.model.getCompletions(this.input.val()),t=o()({completions:e,selectedIx:this.selectedCompletionIx});this.autocomplete.html(t),this.autocomplete.toggle(!!t)}autocompleteClick(e){if(e.stopPropagation(),e.target.classList.contains("details__field-autocomplete-item")){const t=a(e.target).text();this.input.val(t),this.endEdit(t)}else this.afterPaint((()=>{this.input.focus()}))}}},4169:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldViewCustom:()=>u});var s=n(3617),i=n(2977),r=n(3297),o=n(3710),a=n(4707),l=n(1297),c=n(6718);class u extends l.FieldViewText{constructor(e,t){super(e,t),this.events=Object.assign({},this.events,{"mousedown .details__field-label":"fieldLabelMousedown"})}startEdit(){super.startEdit(),this.$el.addClass("details__field--can-edit-title"),void 0===this.isProtected&&(this.isProtected=this.value instanceof s.ProtectedValue),this.$el.toggleClass("details__field--protected",this.isProtected),c("<div/>").addClass("details__field-value-btn details__field-value-btn-protect").appendTo(this.valueEl).mousedown(this.protectBtnClick.bind(this));let e=r.Locale.detLockField;this.isProtected&&(e=r.Locale.detUnlockField);new o.Tip(c(this.valueEl).find(".details__field-value-btn"),{title:e}).init()}endEdit(e,t){this.$el.removeClass("details__field--can-edit-title"),t=Object.assign({},t),this.model.titleChanged&&(t.newField=this.model.title),this.editing&&(delete this.input,"string"==typeof e&&(e=this.isProtected?s.ProtectedValue.fromString(e):c.trim(e)),a.FieldView.prototype.endEdit.call(this,e,t),this.model.titleChanged&&delete this.model.titleChanged)}startEditTitle(e){const t=e?"":this.model.title||"";this.labelInput=c("<input/>"),this.labelEl.empty().append(this.labelInput),this.labelInput.attr({autocomplete:"off",spellcheck:"false"}).val(t).focus()[0].setSelectionRange(t.length,t.length),this.labelInput.bind({input:this.fieldLabelInput.bind(this),keydown:this.fieldLabelKeydown.bind(this),keyup:this.fieldLabelKeyup.bind(this),keypress:this.fieldLabelInput.bind(this),mousedown:this.fieldLabelInputClick.bind(this),click:this.fieldLabelInputClick.bind(this)})}endEditTitle(e){e&&e!==this.model.title?(this.model.title=e,this.model.titleChanged=!0):""===e&&this.emit("change",{field:"$"+this.model.title,val:""}),this.$el.find(".details__field-label").text(this.model.title),delete this.labelInput,this.editing&&this.input&&this.input.focus()}fieldLabelClick(e){e.stopImmediatePropagation(),this.model.newField?this.startEditTitle(!0):this.editing?this.startEditTitle():super.fieldLabelClick.call(this,e)}fieldLabelMousedown(e){this.editing&&e.stopPropagation()}fieldValueBlur(){this.labelInput&&this.endEditTitle(this.labelInput.val()),this.input&&this.endEdit(this.input.val())}fieldLabelInput(e){e.stopPropagation()}fieldLabelInputClick(e){e.stopPropagation()}fieldLabelKeydown(e){e.stopPropagation();const t=e.keyCode||e.which;t===i.Keys.DOM_VK_ESCAPE?this.endEditTitle():t===i.Keys.DOM_VK_TAB&&(e.preventDefault(),this.endEditTitle(e.target.value))}fieldLabelKeyup(e){(e.keyCode||e.which)===i.Keys.DOM_VK_RETURN&&this.endEditTitle(e.target.value)}fieldValueInputClick(){this.labelInput&&this.endEditTitle(this.labelInput.val()),super.fieldValueInputClick.call(this)}protectBtnClick(e){e.stopPropagation(),this.isProtected=!this.isProtected,this.$el.toggleClass("details__field--protected",this.isProtected),this.labelInput&&this.endEditTitle(this.labelInput.val()),setTimeout((()=>this.input.focus()))}}},2574:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldViewDate:()=>a});var s=n(4319),i=n.n(s),r=n(6098),o=n(1297);class a extends o.FieldViewText{constructor(...e){super(...e),this.hasOptions=!1}renderValue(e){let t=e?r.DateFormat.dStr(e):"";return e&&this.model.lessThanNow&&e<new Date&&(t+=" "+this.model.lessThanNow),t}getEditValue(e){return e?r.DateFormat.dStr(e):""}startEdit(){super.startEdit(),this.picker=new(i())({field:this.input[0],onSelect:this.pickerSelect.bind(this),onClose:this.pickerClose.bind(this),defaultDate:this.value,firstDay:1,i18n:{previousMonth:"",nextMonth:"",months:r.DateFormat.months(),weekdays:r.DateFormat.weekDays(),weekdaysShort:r.DateFormat.shortWeekDays()}}),this.picker.adjustPosition=this.adjustPickerPosition.bind(this),setTimeout((()=>this.picker.show()),0)}adjustPickerPosition(...e){window.Pikaday=i(),i().prototype.adjustPosition.apply(this.picker,e);const t=parseInt(this.input.css("--focus-shadow-spread"))||0;if(t){const e=this.picker.el.classList.contains("top-aligned")?-t:t,n=parseInt(this.picker.el.style.top)+e;this.picker.el.style.top=`${n}px`}}fieldValueBlur(e){this.picker||super.fieldValueBlur(e)}endEdit(e,t){if(this.picker){try{this.picker.destroy()}catch(e){}this.picker=null}e=new Date(e),isNaN(e.getTime())&&(e=null),super.endEdit(e,t)}pickerClose(){this.endEdit(this.input.val())}pickerSelect(e){this.endEdit(e)}}},8108:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldViewHistory:()=>r});var s=n(3297),i=n(4707);class r extends i.FieldView{constructor(...e){super(...e),this.readonly=!0}renderValue(e){if(!e.length)return s.Locale.detHistoryEmpty;let t=e.length+" "+(1===e.length?s.Locale.detHistoryRec:s.Locale.detHistoryRecs);return e.unsaved&&(t+=" ("+s.Locale.detHistoryModified+")"),'<a class="details__history-link">'+t+"</a>"}}},8877:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldViewOtp:()=>a});var s=n(403),i=n(1297),r=n(3297),o=n(2378);class a extends i.FieldViewText{constructor(e,t){super(e,t),this.otpTimeout=null,this.otpTickInterval=null,this.otpValue=null,this.otpGenerator=null,this.otpTimeLeft=0,this.otpValidUntil=0,this.fieldOpacity=null,this.otpState=null,this.once("remove",(()=>this.stopOtpUpdater())),e.readonly&&(this.readonly=!0)}renderValue(e){if(!e)return this.resetOtp(),"";if(e!==this.otpGenerator&&(this.resetOtp(),this.otpGenerator=e,this.requestOtpUpdate()),this.otpValue)return this.otpValue;switch(this.otpState){case"awaiting-command":return r.Locale.detOtpClickToTouch;case"awaiting-touch":return r.Locale.detOtpTouch.replace("{}",this.model.deviceShortName);case"error":return o.StringFormat.capFirst(r.Locale.error);case"generating":return r.Locale.detOtpGenerating;default:return""}}getEditValue(e){return e&&e.url}getTextValue(){return this.otpValue}render(){super.render(),this.fieldOpacity=null,this.otpTick()}resetOtp(){this.otpGenerator=null,this.otpValue=null,this.otpTimeLeft=0,this.otpValidUntil=0,this.otpState=null,this.otpTimeout&&(clearTimeout(this.otpTimeout),this.otpTimeout=null),this.otpTickInterval&&(clearInterval(this.otpTickInterval),this.otpTickInterval=null)}requestOtpUpdate(){this.value&&(this.model.needsTouch?this.otpState="awaiting-command":(this.otpState="generating",this.value.next(this.otpUpdated.bind(this))))}otpUpdated(e,t,n){if(!this.removed)return e?(this.otpState="error",void this.render()):void(this.value&&t?(this.otpValue=t,this.otpTimeLeft=n||0,this.otpValidUntil=Date.now()+n,this.editing||this.render(),this.otpValue&&n&&(this.otpTimeout=setTimeout((()=>{this.requestOtpUpdate(),this.otpTickInterval&&(clearInterval(this.otpTickInterval),this.otpTickInterval=null),this.model.needsTouch&&(this.fieldOpacity=null,this.otpValue=null,this.otpValidUntil=0,this.otpTimeLeft=0,this.valueEl.css("opacity",1)),this.render()}),n),this.otpTickInterval||(this.otpTickInterval=setInterval(this.otpTick.bind(this),300)))):this.resetOtp())}otpTick(){if(!this.value||!this.otpValidUntil)return;let e;const t=this.otpValidUntil-Date.now();e=t>=s.Timeouts.OtpFadeDuration||this.editing?1:t<=0?.1:Math.max(.1,Math.pow(t/s.Timeouts.OtpFadeDuration,2)),this.fieldOpacity!==e&&(this.fieldOpacity=e,this.valueEl.css("opacity",e))}copyValue(){this.refreshOtp((e=>{e||super.copyValue()}))}refreshOtp(e){this.model.needsTouch?this.otpValue?e():this.requestTouch(e):e()}requestTouch(e){this.otpState="awaiting-touch",this.value.next(((t,n,s)=>{this.otpUpdated(t,n,s),e(t)})),this.render()}stopOtpUpdater(){"awaiting-touch"===this.otpState&&this.value&&this.value.cancel&&this.value.cancel(),this.resetOtp()}}},2402:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldViewReadOnlyRaw:()=>i});var s=n(4707);class i extends s.FieldView{constructor(...e){super(...e),this.readonly=!0}renderValue(e){return e}}},4984:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldViewReadOnlyWithOptions:()=>i});var s=n(1297);class i extends s.FieldViewText{constructor(...e){super(...e),this.readonly=!0,this.hasOptions=!0}}},9260:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldViewReadOnly:()=>r});var s=n(4707),i=n(6838);class r extends s.FieldView{constructor(...e){super(...e),this.readonly=!0}renderValue(e){var t;return e=(e=null!==(t=e)&&void 0!==t&&t.isProtected?new Array(e.textLength+1).join("•"):(0,i.escape)(e)).replace(/\n/g,"<br/>")}}},2836:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldViewSelect:()=>r});var s=n(4707),i=n(6838);class r extends s.FieldView{constructor(...e){super(...e),this.readonly=!0}renderValue(e){return"<select>"+e.map((e=>'<option value="'+(0,i.escape)(e.id)+'" '+(e.selected?"selected ":"")+">"+(0,i.escape)(e.value)+"</option>")).join("")+"</select>"}render(){super.render(),this.valueEl.addClass("details__field-value--select"),this.valueEl.find("select:first").change((e=>{this.triggerChange({val:e.target.value,field:this.model.name})}))}fieldLabelClick(){}fieldValueClick(){}edit(){}startEdit(){}endEdit(e,t){this.editing&&(delete this.input,super.endEdit(e,t))}}},3033:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldViewTags:()=>l});var s=n(1297),i=n(6838),r=n(4405),o=n.n(r),a=n(6718);class l extends s.FieldViewText{constructor(...e){super(...e),this.hasOptions=!1}renderValue(e){return e?(0,i.escape)(e.join(", ")):""}getEditValue(e){return e?e.join(", "):""}getTextValue(){return this.value?this.value.join(", "):""}valueToTags(e){const t={};this.model.tags.forEach((e=>{t[e.toLowerCase()]=e}));const n={};return e.split(/\s*[;,:]\s*/).filter((e=>e)).map((e=>t[e.toLowerCase()]||e)).forEach((e=>{n[e]=e})),Object.keys(n)}endEdit(e,t){void 0!==e&&(e=this.valueToTags(e)),this.tagsAutocomplete&&(this.tagsAutocomplete.remove(),this.tagsAutocomplete=null),super.endEdit(e,t)}startEdit(){super.startEdit();const e=this.input[0].getBoundingClientRect(),t=parseInt(this.input.css("--focus-shadow-spread"))||0;this.tagsAutocomplete=a('<div class="details__field-autocomplete"></div>').appendTo("body"),this.tagsAutocomplete.css({top:e.bottom+t,left:e.left,width:e.width-2}),this.tagsAutocomplete.mousedown(this.tagsAutocompleteClick.bind(this)),this.setTags()}fieldValueInput(e){e.stopPropagation(),this.setTags(),super.fieldValueInput(e)}getAvailableTags(){const e=this.valueToTags(this.input.val()),t=e[e.length-1],n=t&&this.model.tags.indexOf(t)<0;return this.model.tags.filter((s=>e.indexOf(s)<0&&(!n||s.toLowerCase().indexOf(t.toLowerCase())>=0)))}setTags(){const e=this.getAvailableTags(),t=o()({tags:e});this.tagsAutocomplete.html(t),this.tagsAutocomplete.toggle(!!t)}tagsAutocompleteClick(e){if(e.stopPropagation(),e.target.classList.contains("details__field-autocomplete-item")){const t=a(e.target).text();let n=this.input.val();if(n){const e=this.valueToTags(n),s=e[e.length-1];s&&this.model.tags.indexOf(s)<0?n=n.substr(0,n.lastIndexOf(s))+t:n+=", "+t}else n=t;this.input.val(n),this.input.focus(),this.setTags()}this.afterPaint((()=>{this.input.focus()}))}}},1297:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldViewText:()=>f});var s=n(3617),i=n(7201),r=n(1164),o=n(2977),a=n(667),l=n(8134),c=n(1705),u=n(3710),d=n(4707),h=n(1473),p=n(6838),m=n(7614),g=n(6718);class f extends d.FieldView{constructor(e,t){super(e,t),this.hasOptions=!0,this.once("remove",(()=>this.stopBlurListener()))}renderValue(e){if(this.model.markdown&&m.AppSettingsModel.useMarkdown){e&&e.isProtected&&(e=e.getText());const t=l.MdToHtml.convert(e);if(t.html)return t.html;e=t.text}return e&&e.isProtected?c.PasswordPresenter.presentValueWithLineBreaks(e):(0,p.escape)(e||"").replace(/\n/g,"<br/>")}getEditValue(e){return e&&e.isProtected?e.getText():e||""}startEdit(){const e=this.getEditValue(this.value),t=!(!this.value||!this.value.isProtected);this.$el.toggleClass("details__field--protected",t),this.input=g(document.createElement(this.model.multiline?"textarea":"input")),this.valueEl.empty().append(this.input),this.input.attr({autocomplete:"off",spellcheck:"false"}).val(e).focus()[0].setSelectionRange(e.length,e.length),this.input.bind({input:this.fieldValueInput.bind(this),keydown:this.fieldValueKeydown.bind(this),keypress:this.fieldValueInput.bind(this),click:this.fieldValueInputClick.bind(this),mousedown:this.fieldValueInputMouseDown.bind(this)});const n=e=>this.fieldValueBlur(e);i.Events.on("click",n),this.stopBlurListener=()=>i.Events.off("click",n),this.listenTo(i.Events,"main-window-will-close",this.externalEndEdit),this.listenTo(i.Events,"before-user-idle",this.externalEndEdit),this.model.multiline&&this.setInputHeight(),a.Features.isMobile?this.createMobileControls():this.model.canGen&&g("<div/>").addClass("details__field-value-btn details__field-value-btn-gen").appendTo(this.valueEl).click(this.showGeneratorClick.bind(this)).mousedown(this.showGenerator.bind(this)),u.Tip.hideTip(this.valueEl[0]),u.Tip.hideTip(this.labelEl[0])}createMobileControls(){this.mobileControls={},["cancel","apply"].forEach((e=>{this.mobileControls[e]=g("<div/>").addClass("details__field-value-btn details__field-value-btn-"+e).appendTo(this.labelEl).data("action",e).on({mousedown:this.mobileFieldControlMouseDown.bind(this),touchstart:this.mobileFieldControlTouchStart.bind(this),touchend:this.mobileFieldControlTouchEnd.bind(this),touchmove:this.mobileFieldControlTouchMove.bind(this)})}))}showGeneratorClick(e){e.stopPropagation(),this.gen||this.input.focus()}showGenerator(){if(this.gen)this.hideGenerator();else{const e=this.input[0].getBoundingClientRect(),t=parseInt(this.input.css("--focus-shadow-spread"))||0,n={left:e.left},s=e.bottom+t,i=document.documentElement.clientHeight;s>i/2&&s>200?n.bottom=i-e.top+t:n.top=s,this.gen=new h.GeneratorView({pos:n,password:this.value}),this.gen.render(),this.gen.once("remove",this.generatorClosed.bind(this)),this.gen.once("result",this.generatorResult.bind(this))}}hideGenerator(){if(this.gen){const e=this.gen;delete this.gen,e.remove()}}generatorClosed(){this.gen&&(delete this.gen,this.endEdit())}generatorResult(e){this.gen&&(delete this.gen,this.endEdit(e))}setInputHeight(){this.input.height(18);let e=this.input[0].scrollHeight;e<=18&&(e=18),this.input.height(e)}fieldValueBlur(){!this.gen&&this.input&&this.endEdit(this.input.val())}fieldValueInput(e){e.stopPropagation(),this.model.multiline&&this.setInputHeight()}fieldValueInputClick(){this.gen&&this.hideGenerator()}fieldValueInputMouseDown(e){e.stopPropagation()}fieldValueKeydown(e){r.KeyHandler.reg();const t=e.keyCode||e.which;if(t===o.Keys.DOM_VK_RETURN){if(!this.model.multiline||!e.altKey&&!e.shiftKey&&!e.ctrlKey){if(this.gen)return e.target.value=this.gen.password,void this.hideGenerator();this.stopBlurListener(),this.endEdit(e.target.value)}}else if(t===o.Keys.DOM_VK_ESCAPE)this.stopBlurListener(),this.endEdit();else if(t===o.Keys.DOM_VK_TAB)e.preventDefault(),this.stopBlurListener(),this.endEdit(e.target.value,{tab:{field:this.model.name,prev:e.shiftKey}});else if(t===o.Keys.DOM_VK_G&&e.metaKey)e.preventDefault(),this.showGenerator();else if(t===o.Keys.DOM_VK_S&&(e.metaKey||e.ctrlKey))return this.stopBlurListener(),void this.endEdit(e.target.value);e.stopPropagation()}externalEndEdit(){this.input&&this.endEdit(this.input.val())}endEdit(e,t){this.gen&&this.hideGenerator(),this.editing&&(delete this.input,this.mobileControls&&(this.mobileControls.cancel.remove(),this.mobileControls.apply.remove(),delete this.mobileControls),this.stopBlurListener(),"string"==typeof e&&this.value instanceof s.ProtectedValue&&(e=s.ProtectedValue.fromString(e)),"string"==typeof e&&(e=g.trim(e)),super.endEdit(e,t))}stopBlurListener(){}mobileFieldControlMouseDown(e){e.stopPropagation(),this.stopBlurListener();"apply"===g(e.target).data("action")?this.endEdit(this.input.val()):this.endEdit()}mobileFieldControlTouchStart(e){this.$el.attr("active-mobile-action",g(e.target).data("action"))}mobileFieldControlTouchEnd(e){const t=this.$el.attr("active-mobile-action")===g(e.target).data("action");this.$el.removeAttr("active-mobile-action"),t&&this.mobileFieldControlMouseDown(e)}mobileFieldControlTouchMove(e){const t=e.originalEvent.targetTouches[0],n=t.target.getBoundingClientRect();t.clientX>=n.left&&t.clientX<=n.right&&t.clientY>=n.top&&t.clientY<=n.bottom?this.$el.attr("active-mobile-action",g(e.target).data("action")):this.$el.removeAttr("active-mobile-action")}}},1960:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldViewUrl:()=>o});var s=n(1297),i=n(6838);const r=["http:","https:","ftp:","ftps:","mailto:"];class o extends s.FieldViewText{constructor(...e){super(...e),this.displayUrlRegex=/^https:\/\//i,this.cssClass="url"}renderValue(e){try{return e?'<a href="'+(0,i.escape)(this.fixUrl(e))+'" rel="noreferrer noopener" target="_blank">'+(0,i.escape)(this.displayUrl(e))+"</a>":""}catch(t){return(0,i.escape)(e)}}fixUrl(e){const t=new URL(e,"ws://x").protocol;if("ws:"===t)return"https://"+e;if(!r.includes(t))throw new Error("Bad url");return e}displayUrl(e){return e.replace(this.displayUrlRegex,"")}getTextValue(){return this.value}}},4707:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FieldView:()=>v});var s=n(3617),i=n(7779),r=n(7201),o=n(5933),a=n(3710),l=n(6838),c=n(667),u=n(3297),d=n(3898),h=n(1705),p=n(1434),m=n(7614),g=n(403),f=n(5037),A=n.n(f),y=n(6718);class v extends i.View{constructor(e,t){super(e,t),this.template=A(),this.events={"click .details__field-label":"fieldLabelClick","dblclick .details__field-label":"fieldLabelDblClick","click .details__field-value":"fieldValueClick","dragstart .details__field-label":"fieldLabelDrag","click .details__field-options":"fieldOptionsClick"},this.once("remove",(()=>{this.tip&&a.Tip.hideTip(this.valueEl[0])})),c.Features.isMobile&&this.listenTo(r.Events,"click",this.bodyClick)}render(){this.value="function"==typeof this.model.value?this.model.value():this.model.value;const e=this.renderValue(this.value);super.render({cls:this.cssClass,editable:!this.readonly,multiline:this.model.multiline,title:this.model.title,canEditTitle:this.model.newField,canGen:this.model.canGen,protect:this.value&&this.value.isProtected,hasOptions:!c.Features.isMobile&&e&&this.hasOptions}),this.valueEl=this.$el.find(".details__field-value"),this.valueEl.html(e),this.labelEl=this.$el.find(".details__field-label"),this.model.tip&&(this.tip="function"==typeof this.model.tip?this.model.tip():this.model.tip,this.tip&&(this.valueEl.attr("title",this.tip),a.Tip.createTip(this.valueEl[0])))}update(){if("function"==typeof this.model.value){const e=this.model.value();(!(0,l.isEqual)(e,this.value)||this.value&&e&&this.value.toString()!==e.toString())&&this.render()}}fieldLabelClick(e){if(e.stopImmediatePropagation(),this.hideOptionsDropdown(),!this.preventCopy)if(d.AutoType.enabled&&m.AppSettingsModel.fieldLabelDblClickAutoType){if(this.fieldLabelClickTimer)return clearTimeout(this.fieldLabelClickTimer),this.fieldLabelClickTimer=null,void this.emit("autotype",{source:this});this.fieldLabelClickTimer=setTimeout((()=>{this.copyValue(),this.fieldLabelClickTimer=null}),g.Timeouts.FieldLabelDoubleClick)}else this.copyValue()}copyValue(){let e;if(this.model.name){const t=this.getTextValue();if(!t)return;return o.CopyPaste.simpleCopy||o.CopyPaste.createHiddenInput(t),e=o.CopyPaste.copy(t),void this.emit("copy",{source:this,copyRes:e})}if(!this.value)return;const t=window.getSelection(),n=document.createRange();n.selectNodeContents(this.valueEl[0]),t.removeAllRanges(),t.addRange(n),e=o.CopyPaste.copy(this.valueEl[0].innerText||this.valueEl.text()),e&&(t.removeAllRanges(),this.emit("copy",{source:this,copyRes:e}))}fieldValueClick(e){if(this.hideOptionsDropdown(),["a","input","textarea"].indexOf(e.target.tagName.toLowerCase())>=0)return;window.getSelection().toString()||(c.Features.isMobile?(e.stopPropagation(),this.showMobileActions()):this.edit())}fieldLabelDrag(e){if(e.stopPropagation(),this.hideOptionsDropdown(),!this.value)return;const t=e.dataTransfer,n=this.getTextValue();"a"===this.valueEl[0].tagName.toLowerCase()&&t.setData("text/uri-list",n),t.setData("text/plain",n),t.effectAllowed="copy"}edit(){this.readonly||this.editing||(this.valueEl.removeClass("details__field-value--revealed"),this.$el.addClass("details__field--edit"),this.startEdit(),this.editing=!0,this.preventCopy=!0,this.labelEl[0].setAttribute("draggable","false"))}endEdit(e,t){var n;if(!this.editing)return;let s;this.editing=!1,setTimeout((()=>{this.preventCopy=!1}),300),s=this.value&&this.value.isProtected?this.value.equals(e):e&&e.isProtected?e.equals(this.value):e instanceof Date&&this.value instanceof Date?e.toDateString()===this.value.toDateString():(0,l.isEqual)(this.value,e);const i=(e&&e.isProtected)===(this.value&&this.value.isProtected);var r;null!==(n=t)&&void 0!==n&&n.newField||!this.model.newField||(null!==(r=t)&&void 0!==r||(t={}),t.newField=this.model.newField);const o=t&&t.newField;let a;void 0===e||s&&i&&!o?t&&(a=t):(a={val:e,field:this.model.name},t&&Object.assign(a,t)),a&&this.triggerChange(a),this.valueEl.removeClass("details__field-value--revealed").html(this.renderValue(this.value)),this.$el.removeClass("details__field--edit"),this.labelEl[0].setAttribute("draggable","true")}triggerChange(e){e.sender=this,this.emit("change",e)}fieldOptionsClick(e){if(this.views.optionsDropdown)return void this.hideOptionsDropdown();e.stopPropagation();const t=new p.DropdownView;this.listenTo(t,"cancel",this.hideOptionsDropdown),this.listenTo(t,"select",this.optionsDropdownSelect);const n=[];n.push({value:"copy",icon:"copy",text:u.Locale.alertCopy}),this.value instanceof s.ProtectedValue&&(this.valueEl.hasClass("details__field-value--revealed")?n.push({value:"hide",icon:"eye-slash",text:u.Locale.detHideField}):n.push({value:"reveal",icon:"eye",text:u.Locale.detRevealField})),d.AutoType.enabled&&this.model.sequence&&n.push({value:"autotype",icon:"keyboard",text:u.Locale.detAutoTypeField});const i=this.$el[0].getBoundingClientRect(),r={top:i.bottom,right:i.right};t.render({position:r,options:n}),this.views.optionsDropdown=t}hideOptionsDropdown(){this.views.optionsDropdown&&(this.views.optionsDropdown.remove(),delete this.views.optionsDropdown)}optionsDropdownSelect(e){switch(this.hideOptionsDropdown(),e.item){case"copy":this.copyValue();break;case"reveal":this.revealValue();break;case"hide":this.hideValue();break;case"autotype":this.emit("autotype",{source:this})}}revealValue(){const e=h.PasswordPresenter.asDOM(this.value);this.valueEl.addClass("details__field-value--revealed").empty(),this.valueEl.append(e)}hideValue(){this.valueEl.removeClass("details__field-value--revealed").html(this.renderValue(this.value))}bodyClick(e){this.mobileActionsEl&&(this.valueEl[0].contains(e.target)||this.mobileActionsEl[0].contains(e.target)||(this.mobileActionsEl.remove(),delete this.mobileActionsEl))}showMobileActions(){if(this.readonly)return;if(this.mobileActionsEl)return this.mobileActionsEl.remove(),void delete this.mobileActionsEl;const e=this.valueEl.position().left,t=this.$el.width()-e,n=this.valueEl.height(),i=y("<div></div>").addClass("details__field-mobile-actions").appendTo(this.$el).css({left:e,top:n,width:t}),r=[];this.value&&r.push({name:"copy",icon:"copy"}),r.push({name:"edit",icon:"pencil-alt"}),this.value instanceof s.ProtectedValue&&r.push({name:"reveal",icon:"eye"}),this.model.canGen&&r.push({name:"generate",icon:"bolt"});for(const e of r)y("<div></div>").addClass(`details__field-mobile-action fa fa-${e.icon}`).appendTo(i).click((()=>this.doMobileAction(e.name)));this.mobileActionsEl=i}doMobileAction(e){switch(this.mobileActionsEl.remove(),delete this.mobileActionsEl,e){case"copy":this.copyValue();break;case"edit":this.edit();break;case"reveal":this.revealValue();break;case"generate":this.edit(),setTimeout((()=>this.showGenerator()),0)}}getTextValue(){return this.value?this.value.isProtected?this.value.getText():this.value:""}}},5249:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FooterView:()=>h});var s=n(7779),i=n(7201),r=n(1164),o=n(2977),a=n(2706),l=n(1473),c=n(5386),u=n.n(c),d=n(6718);class h extends s.View{constructor(e,t){super(e,t),this.parent=".app__footer",this.template=u(),this.events={"click .footer__db-item":"showFile","click .footer__db-open":"openFile","click .footer__btn-help":"toggleHelp","click .footer__btn-settings":"toggleSettings","click .footer__btn-generate":"genPass","click .footer__btn-lock":"lockWorkspace"},this.onKey(o.Keys.DOM_VK_L,this.lockWorkspace,r.KeyHandler.SHORTCUT_ACTION,!1,!0),this.onKey(o.Keys.DOM_VK_G,this.genPass,r.KeyHandler.SHORTCUT_ACTION),this.onKey(o.Keys.DOM_VK_O,this.openFile,r.KeyHandler.SHORTCUT_ACTION),this.onKey(o.Keys.DOM_VK_S,this.saveAll,r.KeyHandler.SHORTCUT_ACTION),this.onKey(o.Keys.DOM_VK_COMMA,this.toggleSettings,r.KeyHandler.SHORTCUT_ACTION),this.listenTo(this,"hide",this.viewHidden),this.listenTo(this.model.files,"change",this.render),this.listenTo(i.Events,"file-changed",this.render),this.listenTo(i.Events,"set-locale",this.render),this.listenTo(a.UpdateModel,"change:updateStatus",this.render)}render(){super.render({files:this.model.files,updateAvailable:["ready","found"].indexOf(a.UpdateModel.updateStatus)>=0})}viewHidden(){this.views.gen&&(this.views.gen.remove(),delete this.views.gen)}lockWorkspace(e){this.model.files.hasOpenFiles()&&(e.preventDefault(),i.Events.emit("lock-workspace"))}genPass(e){if(e.stopPropagation(),this.views.gen)return void this.views.gen.remove();const t=this.$el.find(".footer__btn-generate")[0].getBoundingClientRect(),n=document.body.getBoundingClientRect(),s=n.right-t.right,i=n.bottom-t.top,r=new l.GeneratorView({copy:!0,pos:{right:s,bottom:i}});r.render(),r.once("remove",(()=>{delete this.views.gen})),this.views.gen=r}showFile(e){const t=d(e.target).closest(".footer__db-item").data("file-id");t&&i.Events.emit("show-file",{fileId:t})}openFile(){i.Events.emit("open-file")}saveAll(){i.Events.emit("save-all")}toggleHelp(){i.Events.emit("toggle-settings","help")}toggleSettings(){i.Events.emit("toggle-settings","general")}}},7953:(e,t,n)=>{"use strict";n.r(t),n.d(t,{GeneratorPresetsView:()=>h});var s=n(7201),i=n(7779),r=n(1622),o=n(4486),a=n(3297),l=n(7015),c=n(923),u=n.n(c),d=n(6718);class h extends i.View{constructor(...e){super(...e),this.parent=".app__panel",this.template=u(),this.events={"click .back-button":"returnToApp","change .gen-ps__list":"changePreset","click .gen-ps__btn-create":"createPreset","click .gen-ps__btn-delete":"deletePreset","click .info-btn--pattern":"togglePatternHelp","input #gen-ps__field-title":"changeTitle","change #gen-ps__check-enabled":"changeEnabled","change #gen-ps__check-default":"changeDefault","input #gen-ps__field-length":"changeLength","change .gen-ps__check-range":"changeRange","input #gen-ps__field-include":"changeInclude","input #gen-ps__field-pattern":"changePattern"},this.selected=null,this.reservedTitles=[a.Locale.genPresetDerived]}render(){this.presets=r.GeneratorPresets.all,this.selected&&this.presets.some((e=>e.name===this.selected))||(this.selected=(this.presets.filter((e=>e.default))[0]||this.presets[0]).name),super.render({presets:this.presets,selected:this.getPreset(this.selected),ranges:this.getSelectedRanges()}),this.createScroll({root:this.$el.find(".gen-ps")[0],scroller:this.$el.find(".scroller")[0],bar:this.$el.find(".scroller__bar")[0]}),this.renderExample()}renderExample(){const e=this.getPreset(this.selected),t=o.PasswordGenerator.generate(e);this.$el.find(".gen-ps__example").text(t),this.pageResized()}getSelectedRanges(){const e=this.getPreset(this.selected),t={high:"¡¢£¤¥¦§©ª«¬®¯°±¹²´µ¶»¼÷¿ÀÖîü..."};return["Upper","Lower","Digits","Special","Brackets","High","Ambiguous"].map((n=>{const s=n.toLowerCase();return{name:s,title:a.Locale["genPs"+n],enabled:e[s],sample:t[s]||o.CharRanges[s]}}))}getPreset(e){return this.presets.filter((t=>t.name===e))[0]}returnToApp(){s.Events.emit("edit-generator-presets")}changePreset(e){this.selected=e.target.value,this.render()}createPreset(){let e,t;for(let n=1;;n++){const s="Custom"+n,i=a.Locale.genPsNew+" "+n;if(!this.presets.filter((e=>e.name===s||e.title===i)).length){e=s,t=i;break}}const n=this.getPreset(this.selected),s={name:e,title:t,length:n.length,upper:n.upper,lower:n.lower,digits:n.digits,special:n.special,brackets:n.brackets,ambiguous:n.ambiguous,include:n.include};r.GeneratorPresets.add(s),this.selected=e,this.render()}deletePreset(){r.GeneratorPresets.remove(this.selected),this.render()}togglePatternHelp(){this.$el.find(".gen-ps__pattern-help").toggleClass("hide")}changeTitle(e){const t=d.trim(e.target.value);if(t&&t!==this.getPreset(this.selected).title){let n=this.presets.some((e=>e.title.toLowerCase()===t.toLowerCase()));if(n||(n=this.reservedTitles.some((e=>e.toLowerCase()===t.toLowerCase()))),n)return void d(e.target).addClass("input--error");d(e.target).removeClass("input--error"),r.GeneratorPresets.setPreset(this.selected,{title:t}),this.$el.find(".gen-ps__list option[selected]").text(t)}}changeEnabled(e){const t=e.target.checked;r.GeneratorPresets.setDisabled(this.selected,!t)}changeDefault(e){const t=e.target.checked;r.GeneratorPresets.setDefault(t?this.selected:null)}changeLength(e){const t=+e.target.value;t>0?(r.GeneratorPresets.setPreset(this.selected,{length:t}),d(e.target).removeClass("input--error")):d(e.target).addClass("input--error"),this.presets=r.GeneratorPresets.all,this.renderExample()}changeRange(e){const t=e.target.checked,n=e.target.dataset.range;r.GeneratorPresets.setPreset(this.selected,{[n]:t}),this.presets=r.GeneratorPresets.all,this.renderExample()}changeInclude(e){const t=e.target.value;t!==this.getPreset(this.selected).include&&r.GeneratorPresets.setPreset(this.selected,{include:t}),this.presets=r.GeneratorPresets.all,this.renderExample()}changePattern(e){const t=e.target.value;t!==this.getPreset(this.selected).pattern&&r.GeneratorPresets.setPreset(this.selected,{pattern:t}),this.presets=r.GeneratorPresets.all,this.renderExample()}}Object.assign(h.prototype,l.Scrollable)},1473:(e,t,n)=>{"use strict";n.r(t),n.d(t,{GeneratorView:()=>g});var s=n(7779),i=n(7201),r=n(1622),o=n(5933),a=n(7614),l=n(4486),c=n(1705),u=n(3297),d=n(3710),h=n(2955),p=n.n(h),m=n(6718);class g extends s.View{constructor(e){super(e),this.parent="body",this.template=p(),this.events={click:"click","mousedown .gen__length-range":"generate","input .gen__length-range":"lengthChange","change .gen__length-range":"lengthChange","change .gen__check input[type=checkbox]":"checkChange","change .gen__check-hide":"hideChange","click .gen__btn-ok":"btnOkClick","change .gen__sel-tpl":"presetChange","click .gen__btn-refresh":"newPass"},this.valuesMap=[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,24,26,28,30,32,48,64],this.presets=null,this.preset=null,this.createPresets();const t=this.preset;this.gen=Object.assign({},this.presets.find((e=>e.name===t))),this.hide=a.AppSettingsModel.generatorHidePassword,m("body").one("click",this.remove.bind(this)),this.listenTo(i.Events,"lock-workspace",this.remove.bind(this))}render(){const e=document.queryCommandSupported("copy"),t=this.model.copy?e?u.Locale.alertCopy:u.Locale.alertClose:u.Locale.alertOk;super.render({btnTitle:t,showToggleButton:this.model.copy,opt:this.gen,hide:this.hide,presets:this.presets,preset:this.preset,showTemplateEditor:!this.model.noTemplateEditor}),this.resultEl=this.$el.find(".gen__result"),this.$el.css(this.model.pos),this.generate()}createPresets(){if(this.presets=r.GeneratorPresets.enabled,!this.model.password||this.model.password.isProtected&&!this.model.password.byteLength){const e=this.presets.filter((e=>e.default))[0]||this.presets[0];this.preset=e.name}else{const e={name:"Derived",title:u.Locale.genPresetDerived};Object.assign(e,l.PasswordGenerator.deriveOpts(this.model.password)),this.presets.splice(0,0,e),this.preset="Derived"}this.presets.forEach((e=>{e.pseudoLength=this.lengthToPseudoValue(e.length)}))}lengthToPseudoValue(e){for(let t=0;t<this.valuesMap.length;t++)if(this.valuesMap[t]>=e)return t;return this.valuesMap.length-1}showPassword(){this.hide&&!this.model.copy?this.resultEl.text(c.PasswordPresenter.present(this.password.length)):this.resultEl.text(this.password)}click(e){e.stopPropagation()}lengthChange(e){const t=this.valuesMap[e.target.value];t!==this.gen.length&&(this.gen.length=t,this.$el.find(".gen__length-range-val").text(t),this.optionChanged("length"),this.generate())}checkChange(e){const t=m(e.target).data("id");t&&(this.gen[t]=e.target.checked),this.optionChanged(t),this.generate()}optionChanged(e){"Custom"===this.preset||"Pronounceable"===this.preset&&["length","lower","upper"].indexOf(e)>=0||(this.preset=this.gen.name="Custom",this.$el.find(".gen__sel-tpl").val(""))}generate(){this.password=l.PasswordGenerator.generate(this.gen),this.showPassword();const e=this.password.length>32;this.resultEl.toggleClass("gen__result--long-pass",e)}hideChange(e){this.hide=e.target.checked,a.AppSettingsModel.generatorHidePassword=this.hide;const t=this.$el.find(".gen__check-hide-label");d.Tip.updateTip(t[0],{title:this.hide?u.Locale.genShowPass:u.Locale.genHidePass}),this.showPassword()}btnOkClick(){this.model.copy&&(o.CopyPaste.simpleCopy||o.CopyPaste.createHiddenInput(this.password),o.CopyPaste.copy(this.password)),this.emit("result",this.password),this.remove()}presetChange(e){const t=e.target.value;if("..."===t)return i.Events.emit("edit-generator-presets"),void this.remove();this.preset=t;const n=this.presets.find((e=>e.name===t));this.gen=Object.assign({},n),this.render()}newPass(){this.generate()}}},5984:(e,t,n)=>{"use strict";n.r(t),n.d(t,{GrpView:()=>h});var s=n(7779),i=n(7201),r=n(3898),o=n(7015),a=n(2385),l=n(3872),c=n(5380),u=n.n(c),d=n(6718);class h extends s.View{constructor(...e){super(...e),this.parent=".app__panel",this.template=u(),this.events={"click .grp__icon":"showIconsSelect","click .grp__buttons-trash":"moveToTrash","click .back-button":"returnToApp","input #grp__field-title":"changeTitle","focus #grp__field-auto-type-seq":"focusAutoTypeSeq","input #grp__field-auto-type-seq":"changeAutoTypeSeq","change #grp__check-search":"setEnableSearching","change #grp__check-auto-type":"setEnableAutoType"}}render(){this.removeSubView(),super.render({title:this.model.title,icon:this.model.icon||"folder",customIcon:this.model.customIcon,enableSearching:this.model.getEffectiveEnableSearching(),readonly:this.model.top,canAutoType:r.AutoType.enabled,autoTypeSeq:this.model.autoTypeSeq,autoTypeEnabled:this.model.getEffectiveEnableAutoType(),defaultAutoTypeSeq:this.model.getParentEffectiveAutoTypeSeq()}),this.model.title||this.$el.find("#grp__field-title").focus(),this.createScroll({root:this.$el.find(".grp")[0],scroller:this.$el.find(".scroller")[0],bar:this.$el.find(".scroller__bar")[0]}),this.pageResized()}removeSubView(){this.views.sub&&(this.views.sub.remove(),delete this.views.sub)}changeTitle(e){const t=d.trim(e.target.value);t?this.model.top||t===this.model.title||this.model.setName(t):this.model.isJustCreated&&(this.model.removeWithoutHistory(),i.Events.emit("edit-group"))}changeAutoTypeSeq(e){const t=e.target,n=d.trim(t.value);r.AutoType.validate(null,n,(t=>{d(e.target).toggleClass("input--error",!!t),t||this.model.setAutoTypeSeq(n)}))}focusAutoTypeSeq(e){this.views.hint||(this.views.hint=new a.AutoTypeHintView({input:e.target}),this.views.hint.render(),this.views.hint.on("remove",(()=>{delete this.views.hint})))}showIconsSelect(){if(this.views.sub)this.removeSubView();else{const e=new l.IconSelectView({iconId:this.model.customIconId||this.model.iconId,file:this.model.file},{parent:this.$el.find(".grp__icons")[0]});this.listenTo(e,"select",this.iconSelected),e.render(),this.views.sub=e}this.pageResized()}iconSelected(e){e.custom?e.id!==this.model.customIconId&&this.model.setCustomIcon(e.id):e.id!==this.model.iconId&&this.model.setIcon(+e.id),this.render()}moveToTrash(){this.model.moveToTrash(),i.Events.emit("select-all")}setEnableSearching(e){const t=e.target.checked;this.model.setEnableSearching(t)}setEnableAutoType(e){const t=e.target.checked;this.model.setEnableAutoType(t)}returnToApp(){i.Events.emit("edit-group")}}Object.assign(h.prototype,o.Scrollable)},3872:(e,t,n)=>{"use strict";n.r(t),n.d(t,{IconSelectView:()=>u});var s=n(7779),i=n(353),r=n(2363),o=n(9851),a=n.n(o),l=n(6718);const c=new r.Logger("icon-select-view");class u extends s.View{constructor(...e){super(...e),this.template=a(),this.events={"click .icon-select__icon":"iconClick","click .icon-select__icon-download":"downloadIcon","click .icon-select__icon-select":"selectIcon","change .icon-select__file-input":"iconSelected"},this.special={select:null,download:null}}render(){const e=this.model.file.getCustomIcons(),t=Object.keys(e).length>0;super.render({sel:this.model.iconId,icons:i.IconMap,canDownloadFavicon:!!this.model.url,customIcons:e,hasCustomIcons:t})}iconClick(e){const t=l(e.target).closest(".icon-select__icon"),n=t[0].getAttribute("data-val");if("special"===n){const n=this.special[t.data("special")];if(n){const t=this.model.file.addCustomIcon(n.data);this.emit("select",{id:t,custom:!0}),e.preventDefault(),e.stopImmediatePropagation()}}else if(n){const e=t.hasClass("icon-select__icon-custom");this.emit("select",{id:n,custom:e})}}downloadIcon(){if(this.downloadingFavicon)return;this.downloadingFavicon=!0,this.$el.find(".icon-select__icon-download>i").addClass("spin"),this.$el.find(".icon-select__icon-download").addClass("icon-select__icon--progress").removeClass("icon-select__icon--download-error");const e=this.getIconUrl(!0),t=document.createElement("img");t.crossOrigin="Anonymous",t.src=e,t.onload=()=>{this.setSpecialImage(t,"download"),this.$el.find(".icon-select__icon-download img").remove(),this.$el.find(".icon-select__icon-download>i").removeClass("spin"),this.$el.find(".icon-select__icon-download").removeClass("icon-select__icon--progress").addClass("icon-select__icon--custom-selected").append(t),this.downloadingFavicon=!1;const e=this.model.file.addCustomIcon(this.special.download.data);this.emit("select",{id:e,custom:!0})},t.onerror=t=>{c.error("Favicon download error: "+e,t),this.$el.find(".icon-select__icon-download>i").removeClass("spin"),this.$el.find(".icon-select__icon-download").removeClass("icon-select__icon--custom-selected icon-select__icon--progress").addClass("icon-select__icon--download-error"),this.downloadingFavicon=!1}}getIconUrl(e){if(!this.model.url)return null;let t=this.model.url.replace(/([^\/:]\/.*)?$/,(e=>(e&&e[0])+"/favicon.ico"));return t.indexOf("://")<0&&(t="http://"+t),e?"https://services.keeweb.info/favicon/"+t.replace(/^.*:\/+/,"").replace(/\/.*/,""):t}selectIcon(e){e.target.closest(".icon-select__icon-select").classList.contains("icon-select__icon--custom-selected")||this.$el.find(".icon-select__file-input").click()}iconSelected(e){const t=e.target.files[0];if(t){const e=new FileReader;e.onload=e=>{const t=document.createElement("img");t.onload=()=>{this.setSpecialImage(t,"select"),this.$el.find(".icon-select__icon-select img").remove(),this.$el.find(".icon-select__icon-select").addClass("icon-select__icon--custom-selected").append(t)},t.src=e.target.result},e.readAsDataURL(t)}else this.$el.find(".icon-select__icon-select img").remove(),this.$el.find(".icon-select__icon-select").removeClass("icon-select__icon--custom-selected")}setSpecialImage(e,t){const n=Math.min(e.width,32),s=document.createElement("canvas"),i=s.getContext("2d");s.width=n,s.height=n,i.drawImage(e,0,0,n,n);const r=s.toDataURL().replace(/^.*,/,"");this.special[t]={width:e.width,height:e.height,data:r}}}},97:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ImportCsvView:()=>c});var s=n(3617),i=n(7779),r=n(7015),o=n(7655),a=n.n(o),l=n(7725);class c extends i.View{constructor(e,t){super(e,t),this.parent=".app__body",this.template=a(),this.events={"click .back-button":"returnToApp","click .import-csv__button-cancel":"returnToApp","click .import-csv__button-run":"runImport","change .import-csv__field-select":"changeMapping","change .import-csv__target-select":"changeGroup"},this.knownFields=[{field:"Title",re:/title|\bname|account/i},{field:"UserName",re:/user|login/i},{field:"Password",re:/pass/i},{field:"URL",re:/url|site/i},{field:"Notes",re:/notes|comment|extra/i}],this.fieldMapping=[],this.targetGroup=void 0,this.appModel=t.appModel,this.fileName=t.fileName,this.guessFieldMapping(),this.fillGroups(),this.initScroll()}render(){super.render({headers:this.model.headers,rows:this.model.rows,fieldMapping:this.fieldMapping,groups:this.groups}),this.createScroll({root:this.$el.find(".import-csv__body")[0],scroller:this.$el.find(".import-csv__body > .scroller")[0],bar:this.$el.find(".import-csv__body > .scroller__bar-wrapper > .scroller__bar")[0]}),this.pageResized(),this.scroll._update||(this.scroll._update=this.scroll.update,this.scroll.update=this.scrollUpdate.bind(this))}scrollUpdate(){this.scroller.css({width:"auto",minWidth:"auto",maxWidth:"auto"}),this.scroll._update()}returnToApp(){this.emit("cancel")}changeMapping(e){const t=+e.target.dataset.col,n=e.target.value,s=this.knownFields.some((e=>e.field===n)),i=n?s?"builtin":"custom":"ignore";if(this.fieldMapping[t]={mapping:i,field:n},n){let e=0;for(const s of this.fieldMapping){if(s.field===n&&t!==e){s.type="ignore",s.field="";this.el.querySelector(`.import-csv__field-select[data-col="${e}"]`).value=""}e++}}}guessFieldMapping(){const e={};for(const t of this.model.headers.map((e=>e.trim()))){if(!t||/^(group|grouping)$/i.test(t)){this.fieldMapping.push({type:"ignore"});continue}let n=!1;for(const{field:s,re:i}of this.knownFields)if(!e[s]&&i.test(t)){this.fieldMapping.push({type:"builtin",field:s}),e[s]=!0,n=!0;break}n||this.fieldMapping.push({type:"custom",field:t})}}fillGroups(){this.groups=[];for(const e of this.appModel.files)e.forEachGroup((t=>{const n=t.title,s=[];for(let e=t;e.parentGroup;e=e.parentGroup)s.push(" "," ");this.groups.push({id:t.id,fileId:e.id,spaces:s,title:n})}))}changeGroup(e){const t=e.target.value;if(!t)return void(this.targetGroup=void 0);const n=e.target.querySelector(`option[value="${t}"]`).dataset.file,s=this.appModel.files.get(n);this.targetGroup=s.getGroup(t)}runImport(){let e,t=this.targetGroup;if(t)e=Promise.resolve(t.file);else{const t=this.fileName.replace(/\.csv$/i,"");e=new Promise((e=>this.appModel.createNewFile(t,e)))}e.then((e=>{t||(t=e.groups[0]);for(const n of this.model.rows){const i=l.EntryModel.newEntry(t,e);for(let e=0;e<n.length;e++){let t=n[e];if(!t)continue;const r=this.fieldMapping[e];"ignore"!==r.type&&r.field&&("Password"===r.field&&(t=s.ProtectedValue.fromString(t)),i.setField(r.field,t))}}e.reload(),this.emit("done")}))}}Object.assign(c.prototype,r.Scrollable)},7622:(e,t,n)=>{"use strict";n.r(t),n.d(t,{KeyChangeView:()=>d});var s=n(7779),i=n(6892),r=n(4530),o=n(2977),a=n(3297),l=n(7609),c=n(6704),u=n.n(c);class d extends s.View{constructor(e){super(e),this.parent=".app__body",this.template=u(),this.events={"keydown .key-change__pass":"inputKeydown","keydown .key-change__pass-repeat":"inputKeydown","click .key-change__keyfile":"keyFileClicked","change .key-change__file":"keyFileSelected","click .key-change__btn-ok":"accept","click .key-change__btn-cancel":"cancel"},this.passwordInput=null,this.passwordRepeatInput=null,this.inputEl=null,this.passwordInput=new i.SecureInput}render(){this.keyFileName=this.model.file.keyFileName||null,this.keyFileData=null;const e=this.model.expired;super.render({fileName:this.model.file.name,keyFileName:this.model.file.keyFileName,title:this.model.expired?a.Locale.keyChangeTitleExpired:a.Locale.keyChangeTitleRemote,message:this.model.expired?a.Locale.keyChangeMessageExpired:a.Locale.keyChangeMessageRemote,repeat:e}),this.$el.find(".key-change__keyfile-name").text(this.keyFileName?": "+this.keyFileName:""),this.inputEl=this.$el.find(".key-change__pass"),this.passwordInput.reset(),this.passwordInput.setElement(this.inputEl),this.inputEl.focus(),e&&(this.passwordRepeatInput=new i.SecureInput,this.passwordRepeatInput.reset(),this.passwordRepeatInput.setElement(this.$el.find(".key-change__pass-repeat")))}inputKeydown(e){e.which===o.Keys.DOM_VK_RETURN&&this.accept()}keyFileClicked(){this.keyFileName&&(this.keyFileName=null,this.keyFile=null,this.$el.find(".key-change__keyfile-name").empty()),this.$el.find(".key-change__file").val(null).click(),this.inputEl.focus()}keyFileSelected(e){const t=e.target.files[0];if(t){const e=new FileReader;e.onload=e=>{this.keyFileName=t.name,this.keyFileData=e.target.result,this.$el.find(".key-change__keyfile-name").text(": "+this.keyFileName)},e.onerror=()=>{r.Alerts.error({header:a.Locale.openFailedRead})},e.readAsArrayBuffer(t)}else this.$el.find(".key-change__keyfile-name").empty();this.inputEl.focus()}accept(){return this.passwordInput.value.byteLength?(this.passwordInput.el.removeClass("input--error"),this.passwordRepeatInput&&!this.passwordRepeatInput.value.equals(this.passwordInput.value)?(this.passwordRepeatInput.el.addClass("input--error"),this.passwordRepeatInput.el.focus(),void l.InputFx.shake(this.passwordRepeatInput.el)):void this.emit("accept",{file:this.model.file,expired:this.model.expired,password:this.passwordInput.value,keyFileName:this.keyFileName,keyFileData:this.keyFileData})):(this.passwordInput.el.focus(),this.passwordRepeatInput.el.addClass("input--error"),void l.InputFx.shake(this.passwordInput.el))}cancel(){this.emit("cancel")}}},248:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ListSearchView:()=>f});var s=n(7779),i=n(7201),r=n(7027),o=n(1164),a=n(2977),l=n(8612),c=n(667),u=n(2378),d=n(3297),h=n(1434),p=n(46),m=n.n(p),g=n(6718);class f extends s.View{constructor(e){super(e),this.parent=".list__header",this.template=m(),this.events={"keydown .list__search-field":"inputKeyDown","keypress .list__search-field":"inputKeyPress","input .list__search-field":"inputChange","focus .list__search-field":"inputFocus","click .list__search-btn-new":"createOptionsClick","click .list__search-btn-sort":"sortOptionsClick","click .list__search-icon-search":"advancedSearchClick","click .list__search-btn-menu":"toggleMenu","click .list__search-icon-clear":"clickClear","change .list__search-adv input[type=checkbox]":"toggleAdvCheck"},this.inputEl=null,this.sortOptions=null,this.sortIcons=null,this.createOptions=null,this.advancedSearchEnabled=!1,this.advancedSearch=null,this.sortOptions=[{value:"title",icon:"sort-alpha-down",loc:()=>u.StringFormat.capFirst(d.Locale.title)+" "+this.addArrow(d.Locale.searchAZ)},{value:"-title",icon:"sort-alpha-down-alt",loc:()=>u.StringFormat.capFirst(d.Locale.title)+" "+this.addArrow(d.Locale.searchZA)},{value:"website",icon:"sort-alpha-down",loc:()=>u.StringFormat.capFirst(d.Locale.website)+" "+this.addArrow(d.Locale.searchAZ)},{value:"-website",icon:"sort-alpha-down-alt",loc:()=>u.StringFormat.capFirst(d.Locale.website)+" "+this.addArrow(d.Locale.searchZA)},{value:"user",icon:"sort-alpha-down",loc:()=>u.StringFormat.capFirst(d.Locale.user)+" "+this.addArrow(d.Locale.searchAZ)},{value:"-user",icon:"sort-alpha-down-alt",loc:()=>u.StringFormat.capFirst(d.Locale.user)+" "+this.addArrow(d.Locale.searchZA)},{value:"created",icon:"sort-numeric-down",loc:()=>d.Locale.searchCreated+" "+this.addArrow(d.Locale.searchON)},{value:"-created",icon:"sort-numeric-down-alt",loc:()=>d.Locale.searchCreated+" "+this.addArrow(d.Locale.searchNO)},{value:"updated",icon:"sort-numeric-down",loc:()=>d.Locale.searchUpdated+" "+this.addArrow(d.Locale.searchON)},{value:"-updated",icon:"sort-numeric-down-alt",loc:()=>d.Locale.searchUpdated+" "+this.addArrow(d.Locale.searchNO)},{value:"-attachments",icon:"sort-amount-down",loc:()=>d.Locale.searchAttachments},{value:"-rank",icon:"sort-amount-down",loc:()=>d.Locale.searchRank}],this.sortIcons={},this.sortOptions.forEach((e=>{this.sortIcons[e.value]=e.icon})),this.advancedSearch={user:!0,other:!0,url:!0,protect:!1,notes:!0,pass:!1,cs:!1,regex:!1,history:!1,title:!0},this.model.advancedSearch&&(this.advancedSearch=Object.assign({},this.model.advancedSearch)),this.setLocale(),this.onKey(a.Keys.DOM_VK_F,this.findKeyPress,o.KeyHandler.SHORTCUT_ACTION),this.onKey(a.Keys.DOM_VK_N,this.newKeyPress,o.KeyHandler.SHORTCUT_OPT),this.onKey(a.Keys.DOM_VK_DOWN,this.downKeyPress),this.onKey(a.Keys.DOM_VK_UP,this.upKeyPress),this.listenTo(this,"show",this.viewShown),this.listenTo(this,"hide",this.viewHidden),this.listenTo(i.Events,"filter",this.filterChanged),this.listenTo(i.Events,"set-locale",this.setLocale),this.listenTo(i.Events,"page-blur",this.pageBlur),this.listenTo(this.model.files,"change",this.fileListUpdated),this.once("remove",(()=>{this.removeKeypressHandler()}))}setLocale(){this.sortOptions.forEach((e=>{e.text=e.loc()})),this.createOptions=[{value:"entry",icon:"key",text:u.StringFormat.capFirst(d.Locale.entry),hint:c.Features.isMobile?null:`(${d.Locale.searchShiftClickOr} ${r.Shortcuts.altShortcutSymbol(!0)})`},{value:"group",icon:"folder",text:u.StringFormat.capFirst(d.Locale.group)}],this.el&&this.render()}pageBlur(){this.inputEl.blur()}removeKeypressHandler(){}viewShown(){const e=e=>this.documentKeyPress(e);i.Events.on("keypress",e),this.removeKeypressHandler=()=>i.Events.off("keypress",e)}viewHidden(){this.removeKeypressHandler()}render(){let e;this.inputEl&&(e=this.inputEl.val()),super.render({adv:this.advancedSearch,advEnabled:this.advancedSearchEnabled,canCreate:this.model.canCreateEntries()}),this.inputEl=this.$el.find(".list__search-field"),e&&this.inputEl.val(e)}inputKeyDown(e){switch(e.which){case a.Keys.DOM_VK_UP:case a.Keys.DOM_VK_DOWN:break;case a.Keys.DOM_VK_RETURN:e.target.blur();break;case a.Keys.DOM_VK_ESCAPE:this.inputEl.val()&&(this.inputEl.val(""),this.inputChange()),e.target.blur();break;default:return}e.preventDefault()}inputKeyPress(e){e.stopPropagation()}inputChange(){const e=this.inputEl.val();this.inputEl[0].parentElement.classList.toggle("list__search-field-wrap--text",e),i.Events.emit("add-filter",{text:e})}inputFocus(e){g(e.target).select()}documentKeyPress(e){if(this.hidden)return;const t=e.charCode;t&&(this.hideSearchOptions(),this.inputEl.val(String.fromCharCode(t)).focus(),this.inputEl[0].setSelectionRange(1,1),this.inputChange(),e.preventDefault())}findKeyPress(e){this.hidden||(e.preventDefault(),this.hideSearchOptions(),this.inputEl.select().focus())}newKeyPress(e){this.hidden||(e.preventDefault(),this.hideSearchOptions(),this.emit("create-entry"))}downKeyPress(e){e.preventDefault(),this.hideSearchOptions(),this.emit("select-next")}upKeyPress(e){e.preventDefault(),this.hideSearchOptions(),this.emit("select-prev")}filterChanged(e){this.hideSearchOptions(),e.filter.text!==this.inputEl.val()&&this.inputEl.val(e.text||"");const t=this.sortIcons[e.sort]||"sort";this.$el.find(".list__search-btn-sort>i").attr("class","fa fa-"+t);let n=!!e.filter.advanced;this.model.advancedSearch&&(n=e.filter.advanced!==this.model.advancedSearch),this.advancedSearchEnabled!==n&&(this.advancedSearchEnabled=n,this.$el.find(".list__search-adv").toggleClass("hide",!this.advancedSearchEnabled))}createOptionsClick(e){if(e.stopImmediatePropagation(),e.shiftKey)return this.hideSearchOptions(),void this.emit("create-entry");this.toggleCreateOptions()}sortOptionsClick(e){this.toggleSortOptions(),e.stopImmediatePropagation()}advancedSearchClick(){this.advancedSearchEnabled=!this.advancedSearchEnabled,this.$el.find(".list__search-adv").toggleClass("hide",!this.advancedSearchEnabled);let e=!1;this.advancedSearchEnabled?e=this.advancedSearch:this.model.advancedSearch&&(e=this.model.advancedSearch),i.Events.emit("add-filter",{advanced:e})}toggleMenu(){i.Events.emit("toggle-menu")}toggleAdvCheck(e){const t=g(e.target).data("id");this.advancedSearch[t]=e.target.checked,i.Events.emit("add-filter",{advanced:this.advancedSearch})}hideSearchOptions(){this.views.searchDropdown&&(this.views.searchDropdown.remove(),this.views.searchDropdown=null,this.$el.find(".list__search-btn-sort,.list__search-btn-new").removeClass("sel--active"))}toggleSortOptions(){if(this.views.searchDropdown&&this.views.searchDropdown.isSort)return void this.hideSearchOptions();this.hideSearchOptions(),this.$el.find(".list__search-btn-sort").addClass("sel--active");const e=new h.DropdownView;e.isSort=!0,this.listenTo(e,"cancel",this.hideSearchOptions),this.listenTo(e,"select",this.sortDropdownSelect),this.sortOptions.forEach((function(e){e.active=this.model.sort===e.value}),this),e.render({position:{top:this.$el.find(".list__search-btn-sort")[0].getBoundingClientRect().bottom,right:this.$el[0].getBoundingClientRect().right+1},options:this.sortOptions}),this.views.searchDropdown=e}toggleCreateOptions(){if(this.views.searchDropdown&&this.views.searchDropdown.isCreate)return void this.hideSearchOptions();this.hideSearchOptions(),this.$el.find(".list__search-btn-new").addClass("sel--active");const e=new h.DropdownView;e.isCreate=!0,this.listenTo(e,"cancel",this.hideSearchOptions),this.listenTo(e,"select",this.createDropdownSelect),e.render({position:{top:this.$el.find(".list__search-btn-new")[0].getBoundingClientRect().bottom,right:this.$el[0].getBoundingClientRect().right+1},options:this.createOptions.concat(this.getCreateEntryTemplateOptions())}),this.views.searchDropdown=e}getCreateEntryTemplateOptions(){const e=this.model.getEntryTemplates(),t=this.model.files.length>1;this.entryTemplates={};const n=[];return e.forEach((e=>{const s="tmpl:"+e.entry.id;n.push({value:s,icon:e.entry.icon,text:t?e.file.name+" / "+e.entry.title:e.entry.title}),this.entryTemplates[s]=e})),n.sort(l.Comparators.stringComparator("text",!0)),n.push({value:"tmpl",icon:"sticky-note-o",text:u.StringFormat.capFirst(d.Locale.template)}),n}sortDropdownSelect(e){this.hideSearchOptions(),i.Events.emit("set-sort",e.item)}createDropdownSelect(e){switch(this.hideSearchOptions(),e.item){case"entry":this.emit("create-entry");break;case"group":this.emit("create-group");break;case"tmpl":this.emit("create-template");break;default:this.entryTemplates[e.item]&&this.emit("create-entry",{template:this.entryTemplates[e.item]})}}addArrow(e){return e.replace("{}","→")}fileListUpdated(){this.render()}clickClear(){this.inputEl.val(""),this.inputChange()}}},7780:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ListView:()=>C});var s=n(7779),i=n(7201),r=n(6491),o=n(9207),a=n(4530),l=n(7614),c=n(9938),u=n(2378),d=n(3297),h=n(8892),p=n(7015),m=n(1434),g=n(248),f=n(3493),A=n.n(f),y=n(5959),v=n.n(y),b=n(4497),w=n.n(b),k=n(6718);class C extends s.View{constructor(e,t){super(e,t),this.parent=".app__list",this.template=v(),this.emptyTemplate=w(),this.events={click:"click","click .list__table-options":"tableOptionsClick","dragstart .list__item":"itemDragStart"},this.minWidth=200,this.minHeight=200,this.maxWidth=500,this.maxHeight=500,this.itemsEl=null,this.tableColumns=[{val:"title",name:"title",enabled:!0},{val:"user",name:"user",enabled:!0},{val:"url",name:"website",enabled:!0},{val:"tags",name:"tags",enabled:!0},{val:"notes",name:"notes",enabled:!0},{val:"groupName",name:"group",enabled:!1},{val:"fileName",name:"file",enabled:!1}],this.throttleSetViewSizeSetting=A()((e=>{l.AppSettingsModel.listViewWidth=e}),1e3),this.initScroll(),this.views.search=new g.ListSearchView(this.model),this.listenTo(this.views.search,"select-prev",this.selectPrev),this.listenTo(this.views.search,"select-next",this.selectNext),this.listenTo(this.views.search,"create-entry",this.createEntry),this.listenTo(this.views.search,"create-group",this.createGroup),this.listenTo(this.views.search,"create-template",this.createTemplate),this.listenTo(this,"show",this.viewShown),this.listenTo(this,"hide",this.viewHidden),this.listenTo(this,"view-resize",this.viewResized),this.listenTo(i.Events,"filter",this.filterChanged),this.listenTo(i.Events,"entry-updated",this.entryUpdated),this.listenTo(i.Events,"set-locale",this.render),this.listenTo(this.model.settings,"change:tableView",this.setTableView),this.readTableColumnsEnabled(),this.items=new r.SearchResultCollection,this.renderedItems=new Map}render(){if(this.isVisible()){if(this.pendingRender=!1,this.itemsEl||(super.render(),this.itemsEl=this.$el.find(".list__items>.scroller"),this.itemsEl.on("scroll",(()=>this.renderVisibleItems())),this.views.search.render(),this.setTableView(),this.createScroll({root:this.$el.find(".list__items")[0],scroller:this.$el.find(".scroller")[0],bar:this.$el.find(".scroller__bar")[0]})),this.items.length){const e=this.getItemsTemplate(),t=l.AppSettingsModel.colorfulIcons?"":"grayscale",n=new c.EntryPresenter(this.getDescField(),t,this.model.activeEntryId),i={};this.tableColumns.forEach((e=>{e.enabled&&(i[e.val]=!0)})),n.columns=i,this.presenter=n,n.present(this.items[0]);const r=this.getItemTemplate()(n,s.DefaultTemplateOptions);n.reset();const o=e({itemsHtml:r,columns:this.tableColumns},s.DefaultTemplateOptions);this.itemsEl.html(o),this.itemsContainerEl=this.itemsEl.find(".list__items-container:first")[0];const a=this.itemsContainerEl.firstElementChild;this.itemHeight=a.getBoundingClientRect().height,this.renderedItems=new Map([[0,a]]);const u=this.itemHeight*this.items.length;this.itemsContainerEl.style.minHeight=u+"px",this.renderVisibleItems()}else this.itemsEl.html(this.emptyTemplate({},s.DefaultTemplateOptions));this.pageResized()}else this.pendingRender=!0}getItemsTemplate(){return this.model.settings.tableView?n(6973):n(9363)}getItemTemplate(){return this.model.settings.tableView?n(5826):n(2739)}renderVisibleItems(){if(!this.isVisible())return;const e=this.itemsEl[0],t=e.getBoundingClientRect(),n=e.scrollTop,i=t.height,r=this.itemHeight,o=this.renderedItems;let a=Math.max(0,Math.floor(n/r)),l=Math.min(this.items.length-1,Math.ceil((n+i)/r));const c=l-a;a=Math.max(0,a-c),l=Math.min(this.items.length-1,l+c);const u=this.getItemTemplate(),d=this.presenter;let h="";const p=[];for(let e=a;e<=l;e++){const t=this.items[e];o.has(e)||(d.present(t),h+=u(d,s.DefaultTemplateOptions),p.push(e))}d.reset();const m=document.createElement("div");m.innerHTML=h;const g=[...m.children];for(let e=0;e<g.length;e++){const t=g[e],n=p[e];this.itemsContainerEl.append(t),t.style.top=n*r+"px",o.set(n,t)}const f=5*c;if(o.size>f)for(const[e,t]of this.renderedItems)(e<a||e>l)&&(t.remove(),o.delete(e))}ensureItemRendered(e){if(this.renderedItems.has(e))return;const t=this.items[e],n=this.getItemTemplate();this.presenter.present(t);const i=n(this.presenter,s.DefaultTemplateOptions);this.presenter.reset();const r=document.createElement("div");r.innerHTML=i;const[o]=r.children;this.itemsContainerEl.append(o),o.style.top=e*this.itemHeight+"px",this.renderedItems.set(e,o)}getDescField(){return this.model.sort.replace("-","")}click(e){const t=e.target.closest(".list__item");if(!t)return;const n=t.id,s=this.items.get(n);s.active||this.selectItem(s),i.Events.emit("toggle-details",!0)}selectPrev(){const e=this.items.indexOf(this.items.get(this.model.activeEntryId));e>0&&this.selectItem(this.items[e-1])}selectNext(){const e=this.items.indexOf(this.items.get(this.model.activeEntryId));e<this.items.length-1&&this.selectItem(this.items[e+1])}createEntry(e){const t=this.model.createNewEntry(e);this.items.unshift(t),this.render(),this.selectItem(t),i.Events.emit("toggle-details",!0)}createGroup(){const e=this.model.createNewGroup();i.Events.emit("edit-group",e)}createTemplate(){if(!this.model.settings.templateHelpShown)return void a.Alerts.yesno({icon:"sticky-note-o",header:d.Locale.listAddTemplateHeader,body:d.Locale.listAddTemplateBody1.replace("{}",'"+"')+"\n"+d.Locale.listAddTemplateBody2.replace("{}","Templates"),buttons:[a.Alerts.buttons.ok,a.Alerts.buttons.cancel],success:()=>{this.model.settings.templateHelpShown=!0,this.createTemplate()}});const e=this.model.createNewTemplateEntry();this.items.unshift(e),this.render(),this.selectItem(e)}selectItem(e){this.presenter.activeEntryId=e.id,this.model.activeEntryId=e.id;const t=this.items.indexOf(e);this.ensureItemRendered(t),i.Events.emit("entry-selected",e),this.itemsEl.find(".list__item--active").removeClass("list__item--active");const n=document.getElementById(e.id);n.classList.add("list__item--active");const s=this.itemsEl[0],r=n.getBoundingClientRect(),o=s.getBoundingClientRect();r.top<o.top?s.scrollTop+=r.top-o.top:r.bottom>o.bottom&&(s.scrollTop+=r.bottom-o.bottom)}viewShown(){this.views.search.show(),this.pendingRender&&this.render()}viewHidden(){this.views.search.hide()}setTableView(){const e=this.model.settings.tableView;this.dragView.setCoord(e?"y":"x"),this.setDefaultSize()}setDefaultSize(){this.setSize(this.model.settings.listViewWidth)}setSize(e){this.$el.css({width:"auto",height:"auto"}),e?this.$el.css("flex","0 0 "+e+"px"):this.$el.css("flex","")}viewResized(e){this.setSize(e),this.throttleSetViewSizeSetting(e),this.renderVisibleItems()}filterChanged(e){this.items=e.entries,this.renderedItems=new Map,this.render()}entryUpdated(){const e=this.itemsEl[0].scrollTop;this.render(),this.itemsEl[0].scrollTop=e,this.renderVisibleItems()}itemDragStart(e){e.stopPropagation();const t=k(e.target).closest(".list__item").attr("id");e.dataTransfer.setData("text/entry",t),e.dataTransfer.effectAllowed="move",o.DragDropInfo.dragObject=this.items.get(t)}tableOptionsClick(e){if(e.stopImmediatePropagation(),this.views.optionsDropdown)return void this.hideOptionsDropdown();const t=new m.DropdownView;this.listenTo(t,"cancel",this.hideOptionsDropdown),this.listenTo(t,"select",this.optionsDropdownSelect);const n=this.$el.find(".list__table-options")[0].getBoundingClientRect(),s=this.tableColumns.map((e=>({value:e.val,icon:e.enabled?"check-square-o":"square-o",text:u.StringFormat.capFirst(d.Locale[e.name])})));t.render({position:{top:n.bottom,left:n.left},options:s}),this.views.optionsDropdown=t}hideOptionsDropdown(){this.views.optionsDropdown&&(this.views.optionsDropdown.remove(),delete this.views.optionsDropdown)}optionsDropdownSelect(e){const t=this.tableColumns.find((t=>t.val===e.item));t.enabled=!t.enabled,e.el.find("i:first").toggleClass("fa-check-square-o fa-square-o"),this.render(),this.saveTableColumnsEnabled()}readTableColumnsEnabled(){const e=l.AppSettingsModel.tableViewColumns;e&&e.length&&this.tableColumns.forEach((t=>{t.enabled=e.indexOf(t.name)>=0}))}saveTableColumnsEnabled(){const e=this.tableColumns.filter((e=>e.enabled)).map((e=>e.name));l.AppSettingsModel.tableViewColumns=e}}Object.assign(C.prototype,h.Resizable),Object.assign(C.prototype,p.Scrollable)},9676:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ListWrapView:()=>i});var s=n(7779);class i extends s.View{constructor(e,t){super(e,t),this.parent=".app__list-wrap",this.template=()=>"",this.events={},this.listenTo(this.model.settings,"change:tableView",this.setListLayout)}render(){super.render(),this.setListLayout()}setListLayout(){const e=!!this.model.settings.tableView;this.el.classList.toggle("app__list-wrap--table",e)}}},1956:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MenuItemView:()=>p});var s=n(7201),i=n(7779),r=n(9207),o=n(1164),a=n(4530),l=n(2977),c=n(3297),u=n(6669),d=n.n(u),h=n(6718);class p extends i.View{constructor(e,t){super(e,t),this.template=d(),this.events={mouseover:"mouseover",mouseout:"mouseout","click .menu__item-option":"selectOption",click:"selectItem",dblclick:"expandItem","click .menu__item-edit":"editItem","click .menu__item-empty-trash":"emptyTrash",dragstart:"dragstart",dragover:"dragover",dragleave:"dragleave",drop:"drop","dragover .menu__item-drag-top":"dragoverTop","dragleave .menu__item-drag-top":"dragleaveTop"},this.iconEl=null,this.itemViews=[],this.listenTo(this.model,"change:title",this.changeTitle),this.listenTo(this.model,"change:icon",this.changeIcon),this.listenTo(this.model,"change:customIconId",this.render),this.listenTo(this.model,"change:active",this.changeActive),this.listenTo(this.model,"change:expanded",this.changeExpanded),this.listenTo(this.model,"change:cls",this.changeCls),this.listenTo(this.model,"change:iconCls",this.changeIconCls),this.listenTo(this.model,"delete",this.remove),this.listenTo(this.model,"insert",this.insertItem);const n=this.model.shortcut;n&&(this.onKey(n,this.selectItem,o.KeyHandler.SHORTCUT_OPT),n!==l.Keys.DOM_VK_C&&this.onKey(n,this.selectItem,o.KeyHandler.SHORTCUT_ACTION)),this.once("remove",(()=>{this.removeInnerViews()}))}render(){this.removeInnerViews(),super.render(this.model),this.model.options&&(window.model=this.model),this.iconEl=this.$el.find(".menu__item-icon");const e=this.model.items;e&&e.forEach((e=>{e.visible&&this.insertItem(e)})),this.$el.toggleClass("menu__item--collapsed",!this.model.expanded)}insertItem(e){const t=new p(e,{parent:this.el});t.render(),this.itemViews.push(t)}removeInnerViews(){this.itemViews.forEach((e=>e.remove())),this.itemViews=[]}changeTitle(e,t){this.$el.find(".menu__item-title").first().text(t||"(no title)")}changeIcon(e,t){this.iconEl[0].className="menu__item-icon fa "+(t?"fa-"+t:"menu__item-icon--no-icon")}changeActive(e,t){this.$el.toggleClass("menu__item--active",t)}changeExpanded(e,t){this.$el.toggleClass("menu__item--collapsed",!t),this.model.setExpanded(t)}changeCls(e,t,n){n&&this.$el.removeClass(n),this.$el.addClass(t)}changeIconCls(e,t,n){const s=this.el.querySelector(".menu__item-icon");n&&s.classList.remove(n),t&&s.classList.add(t)}mouseover(e){e.button||(this.$el.addClass("menu__item--hover"),e.stopPropagation())}mouseout(e){this.$el.removeClass("menu__item--hover"),e.stopPropagation()}selectItem(e){e.stopPropagation(),e.preventDefault(),this.model.active||(this.model.disabled?a.Alerts.info(this.model.disabled):s.Events.emit("menu-select",{item:this.model}))}selectOption(e){const t=this.model.options,n=h(e.target).data("value");if(t&&t.length){const e=t.find((e=>e.value===n));e&&s.Events.emit("menu-select",{item:this.model,option:e})}e.stopImmediatePropagation(),e.preventDefault()}expandItem(e){this.model.toggleExpanded&&this.model.toggleExpanded(),e.stopPropagation()}editItem(e){if(this.model.active&&this.model.editable)switch(e.stopPropagation(),this.model.filterKey){case"tag":s.Events.emit("edit-tag",this.model);break;case"group":s.Events.emit("edit-group",this.model)}}emptyTrash(e){e.stopPropagation(),a.Alerts.yesno({header:c.Locale.menuEmptyTrashAlert,body:c.Locale.menuEmptyTrashAlertBody,icon:"minus-circle",success(){s.Events.emit("empty-trash")}})}dropAllowed(e){const t=e.dataTransfer.types;for(let e=0;e<t.length;e++)if("text/group"===t[e]||"text/entry"===t[e])return r.DragDropInfo.dragObject&&!r.DragDropInfo.dragObject.readOnly;return!1}dragstart(e){e.stopPropagation(),this.model.drag&&(e.dataTransfer.setData("text/group",this.model.id),e.dataTransfer.effectAllowed="move",r.DragDropInfo.dragObject=this.model)}dragover(e){this.model.drop&&this.dropAllowed(e)&&(e.stopPropagation(),e.preventDefault(),this.$el.addClass("menu__item--drag"))}dragleave(e){e.stopPropagation(),this.model.drop&&this.dropAllowed(e)&&this.$el.removeClass("menu__item--drag menu__item--drag-top")}drop(e){if(e.stopPropagation(),this.model.drop&&this.dropAllowed(e)){const e=this.$el.hasClass("menu__item--drag-top");this.$el.removeClass("menu__item--drag menu__item--drag-top"),e?this.model.moveToTop(r.DragDropInfo.dragObject):"trash"===this.model.filterKey?r.DragDropInfo.dragObject.moveToTrash():this.model.moveHere(r.DragDropInfo.dragObject),s.Events.emit("refresh")}}dropTopAllowed(e){const t=e.dataTransfer.types;for(let e=0;e<t.length;e++)if("text/group"===t[e])return!0;return!1}dragoverTop(e){this.dropTopAllowed(e)&&this.$el.addClass("menu__item--drag-top")}dragleaveTop(e){this.dropTopAllowed(e)&&this.$el.removeClass("menu__item--drag-top")}}},913:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MenuSectionView:()=>h});var s=n(7779),i=n(7614),r=n(8892),o=n(7015),a=n(1956),l=n(3493),c=n.n(l),u=n(6051),d=n.n(u);class h extends s.View{constructor(e,t){super(e,t),this.template=d(),this.events={},this.itemViews=[],this.minHeight=55,this.autoHeight="auto",this.saveViewHeight=c()((e=>{i.AppSettingsModel.tagsViewHeight=e}),1e3),this.listenTo(this.model,"change-items",this.itemsChanged),this.listenTo(this,"view-resize",this.viewResized),this.once("remove",(()=>{this.scroll&&this.scroll.dispose(),this.removeInnerViews()}))}render(){if(this.itemsEl?this.removeInnerViews():(super.render(this.model),this.itemsEl=this.model.scrollable?this.$el.find(".scroller"):this.$el,this.model.scrollable&&(this.initScroll(),this.createScroll({root:this.$el[0],scroller:this.$el.find(".scroller")[0],bar:this.$el.find(".scroller__bar")[0]}))),this.model.items.forEach((e=>{const t=new a.MenuItemView(e,{parent:this.itemsEl[0]});t.render(),this.itemViews.push(t)})),this.model.drag){const e=i.AppSettingsModel.tagsViewHeight;"number"==typeof e&&(this.$el.height(),this.$el.css("flex","0 0 "+e+"px"))}this.pageResized()}maxHeight(){return this.$el.parent().height()-116}removeInnerViews(){this.itemViews.forEach((e=>e.remove())),this.itemViews=[]}itemsChanged(){this.render()}viewResized(e){this.$el.css("flex","0 0 "+(e?e+"px":"auto")),this.saveViewHeight(e)}}Object.assign(h.prototype,r.Resizable),Object.assign(h.prototype,o.Scrollable)},6498:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MenuView:()=>f});var s=n(7201),i=n(7779),r=n(1164),o=n(2977),a=n(7614),l=n(8892),c=n(1864),u=n(913),d=n(3493),h=n.n(d),p=n(8445),m=n.n(p),g=n(6718);class f extends i.View{constructor(e,t){super(e,t),this.parent=".app__menu",this.template=m(),this.events={},this.sectionViews=[],this.minWidth=130,this.maxWidth=300,this.viewResized=h()((e=>{a.AppSettingsModel.menuViewWidth=e}),1e3),this.listenTo(this.model,"change:sections",this.menuChanged),this.listenTo(this,"view-resize",this.viewResized),this.onKey(o.Keys.DOM_VK_UP,this.selectPreviousSection,r.KeyHandler.SHORTCUT_ACTION+r.KeyHandler.SHORTCUT_OPT),this.onKey(o.Keys.DOM_VK_DOWN,this.selectNextSection,r.KeyHandler.SHORTCUT_ACTION+r.KeyHandler.SHORTCUT_OPT),this.once("remove",(()=>{this.sectionViews.forEach((e=>e.remove())),this.sectionViews=[]}))}render(){super.render();const e=this.$el.find(".menu");this.model.sections.forEach((function(t){const n=new u.MenuSectionView(t,{parent:e[0]});if(n.render(),t.drag){const t=g("<div/>").addClass("menu__drag-section").appendTo(e),s=new c.DragView("y",{parent:t[0]});n.listenDrag(s),s.render(),this.sectionViews.push(s)}this.sectionViews.push(n)}),this),"number"==typeof a.AppSettingsModel.menuViewWidth&&this.$el.width(a.AppSettingsModel.menuViewWidth)}menuChanged(){this.render()}switchVisibility(e){this.$el.toggleClass("menu-visible",e)}selectPreviousSection(){s.Events.emit("select-previous-menu-item")}selectNextSection(){s.Events.emit("select-next-menu-item")}}Object.assign(f.prototype,l.Resizable)},5266:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ModalView:()=>c});var s=n(7779),i=n(9491),r=n(2977),o=n(4727),a=n.n(o),l=n(6718);class c extends s.View{constructor(e){super(e),this.parent="body",this.modal="alert",this.template=a(),this.events={"click .modal__buttons button":"buttonClick","click .modal__link":"linkClick",click:"bodyClick"},"string"==typeof this.model.esc&&this.onKey(r.Keys.DOM_VK_ESCAPE,this.escPressed,!1,"alert"),"string"==typeof this.model.enter&&this.onKey(r.Keys.DOM_VK_RETURN,this.enterPressed,!1,"alert"),this.once("remove",(()=>{this.model.view&&this.model.view.remove()}))}render(){super.render(Object.assign({},this.model,{body:this.model.body?this.model.body.toString().split("\n"):""})),this.$el.addClass("modal--hidden"),setTimeout((()=>{this.$el.removeClass("modal--hidden"),document.activeElement.blur()}),20),this.model.view&&(this.model.view.parent=this.el.querySelector(".modal__body"),this.model.view.render())}change(e){e.header&&this.$el.find(".modal__header").text(e.header)}buttonClick(e){const t=l(e.target).data("result");this.closeWithResult(t)}linkClick(e){i.Launcher&&(e.preventDefault(),i.Launcher.openLink(e.target.href))}bodyClick(e){"string"!=typeof this.model.click||e.target.matches("button")||this.closeWithResult(this.model.click)}escPressed(){this.closeWithResult(this.model.esc)}enterPressed(e){e.stopImmediatePropagation(),e.preventDefault(),this.closeWithResult(this.model.enter)}closeWithResult(e){const t=this.model.checkbox?this.$el.find("#modal__check").is(":checked"):void 0;this.emit("will-close"),this.emit("result",e,t),this.removeView()}closeWithoutResult(){this.emit("will-close"),this.removeView()}removeView(){this.$el.addClass("modal--hidden"),this.unbindEvents(),setTimeout((()=>this.remove()),100)}closeImmediate(){this.emit("will-close"),this.emit("result",void 0),this.unbindEvents(),this.remove()}}},5634:(e,t,n)=>{"use strict";n.r(t),n.d(t,{OpenChalRespView:()=>d});var s=n(7201),i=n(7779),r=n(9777),o=n(667),a=n(3297),l=n(403),c=n(1198),u=n.n(c);class d extends i.View{constructor(){super(),this.template=u(),this.events={"click .open-chal-resp__item":"itemClick"},this.listenTo(s.Events,"usb-devices-changed",this.usbDevicesChanged),this.checkDevices()}render(){let e=this.error;const t=this.yubiKeys&&!this.yubiKeys.length;t&&(e=a.Locale.openChalRespErrorEmpty),super.render({error:e,showEmptyMacWarning:t&&o.Features.isMac,yubiKeys:this.yubiKeys,loading:!this.yubiKeys&&!this.error})}usbDevicesChanged(){setTimeout((()=>{this.removed||this.checkDevices()}),l.Timeouts.ExternalDeviceAfterReconnect)}checkDevices(){r.YubiKey.list(((e,t)=>{if(!this.removed){if(this.error=e,this.yubiKeys=[],t)for(const{fullName:e,vid:n,pid:s,serial:i,slots:r}of t)for(const t of r.filter((e=>e.valid)))this.yubiKeys.push({fullName:e,vid:n,pid:s,serial:i,slot:t.number});this.render()}}))}itemClick(e){const t=e.target.closest("[data-serial]"),n=+t.dataset.vid,s=+t.dataset.pid,i=+t.dataset.serial,r=+t.dataset.slot;this.emit("select",{vid:n,pid:s,serial:i,slot:r})}}},1764:(e,t,n)=>{"use strict";n.r(t),n.d(t,{OpenConfigView:()=>l});var s=n(7779),i=n(2977),r=n(3297),o=n(6796),a=n.n(o);class l extends s.View{constructor(...e){super(...e),this.template=a(),this.events={"click .open__config-btn-cancel":"cancel","click .open__config-btn-ok":"apply","input input":"changeInput","keyup input":"keyup"}}render(){super.render(this.model),this.$el.find(":input:first").focus(),this.checkValidity()}cancel(){this.emit("cancel")}apply(){const e=this.getData();e&&this.emit("apply",e)}changeInput(){this.checkValidity()}keyup(e){e.which===i.Keys.DOM_VK_RETURN&&this.apply()}checkValidity(){const e=this.getData();this.$el.find(".open__config-btn-ok").prop("disabled",!e)}getData(){let e={storage:this.model.id};return this.model.fields.every((function(t){const n=this.$el.find("#open__config-field-"+t.id)[0];return e&&n.checkValidity()?(e[t.id]=n.value,!0):(e=null,!1)}),this),e}setDisabled(e){e=!!e,this.$el.find(":input:not(.open__config-btn-cancel)").prop("disabled",e),this.$el.toggleClass("open__config--disabled",e),e&&this.$el.find(".open__config-error").text("")}setError(e){const t=e&&e.notFound?r.Locale.openConfigErrorNotFound:r.Locale.openConfigError.replace("{}",e);this.$el.find(".open__config-error").text(t)}}},2791:(e,t,n)=>{"use strict";n.r(t),n.d(t,{OpenView:()=>T});var s=n(3617),i=n(7779),r=n(7201),o=n(949),a=n(2596),l=n(9053),c=n(1164),u=n(6892),d=n(9491),h=n(4530),p=n(8647),m=n(9777),g=n(2977),f=n(8612),A=n(667),y=n(4798),v=n(3297),b=n(2363),w=n(7609),k=n(1764),C=n(4902),_=n(5634),E=n(6838),x=n(1473),I=n(3006),S=n(160),D=n.n(S),B=n(6718);const P=new b.Logger("open-view");class T extends i.View{constructor(e){super(e),this.parent=".app__body",this.modal="open",this.template=D(),this.events={"change .open__file-ctrl":"fileSelected","click .open__icon-open":"openFile","click .open__icon-new":"createNew","click .open__icon-demo":"createDemo","click .open__icon-yubikey":"openYubiKey","click .open__icon-more":"toggleMore","click .open__icon-storage":"openStorage","click .open__icon-settings":"openSettings","click .open__pass-input[readonly]":"openFile","input .open__pass-input":"inputInput","keydown .open__pass-input":"inputKeydown","keyup .open__pass-input":"inputKeyup","keypress .open__pass-input":"inputKeypress","click .open__pass-enter-btn":"openDb","click .open__settings-key-file":"openKeyFile","click .open__settings-yubikey":"selectYubiKeyChalResp","click .open__last-item":"openLast","click .open__icon-generate":"toggleGenerator","click .open__message-cancel-btn":"openMessageCancelClick",dragover:"dragover",dragleave:"dragleave",drop:"drop"},this.params=null,this.passwordInput=null,this.busy=!1,this.currentSelectedIndex=-1,this.encryptedPassword=null,window.$=B,this.resetParams(),this.passwordInput=new u.SecureInput,this.onKey(g.Keys.DOM_VK_Z,this.undoKeyPress,c.KeyHandler.SHORTCUT_ACTION,"open"),this.onKey(g.Keys.DOM_VK_TAB,this.tabKeyPress,null,"open"),this.onKey(g.Keys.DOM_VK_ENTER,this.enterKeyPress,null,"open"),this.onKey(g.Keys.DOM_VK_RETURN,this.enterKeyPress,null,"open"),this.onKey(g.Keys.DOM_VK_DOWN,this.moveOpenFileSelectionDown,null,"open"),this.onKey(g.Keys.DOM_VK_UP,this.moveOpenFileSelectionUp,null,"open"),this.listenTo(r.Events,"main-window-focus",this.windowFocused.bind(this)),this.listenTo(r.Events,"usb-devices-changed",this.usbDevicesChanged.bind(this)),this.listenTo(r.Events,"unlock-message-changed",this.unlockMessageChanged.bind(this)),this.once("remove",(()=>{this.passwordInput.reset()})),this.listenTo(r.Events,"user-idle",this.userIdle)}render(){this.dragTimeout&&clearTimeout(this.dragTimeout);const e=[];this.model.settings.canOpenStorage&&Object.keys(o.Storage).forEach((t=>{const n=o.Storage[t];!n.system&&n.enabled&&e.push(n)})),e.sort(((e,t)=>(e.uipos||1/0)-(t.uipos||1/0)));const t=e.length||this.model.settings.canOpenSettings||this.model.settings.canOpenGenerator,n=!(t||this.model.settings.canOpen||this.model.settings.canCreate||this.model.settings.canOpenDemo&&!this.model.settings.demoOpened),s=!!p.UsbListener.attachedYubiKeys,i=s&&this.model.settings.canOpenOtpDevice&&this.model.settings.yubiKeyShowIcon&&!this.model.files.get("yubikey"),r=s&&this.model.settings.yubiKeyShowChalResp;super.render({lastOpenFiles:this.getLastOpenFiles(),canOpenKeyFromDropbox:!d.Launcher&&o.Storage.dropbox.enabled,demoOpened:this.model.settings.demoOpened,storageProviders:e,unlockMessageRes:this.model.unlockMessageRes,canOpen:this.model.settings.canOpen,canOpenDemo:this.model.settings.canOpenDemo,canOpenSettings:this.model.settings.canOpenSettings,canOpenGenerator:this.model.settings.canOpenGenerator,canCreate:this.model.settings.canCreate,canRemoveLatest:this.model.settings.canRemoveLatest,canOpenYubiKey:i,canUseChalRespYubiKey:r,showMore:t,showLogo:n}),this.inputEl=this.$el.find(".open__pass-input"),this.passwordInput.setElement(this.inputEl)}resetParams(){this.params={id:null,name:"",storage:null,path:null,keyFileName:null,keyFileData:null,keyFilePath:null,fileData:null,rev:null,opts:null,chalResp:null}}windowFocused(){this.inputEl.focus(),this.checkIfEncryptedPasswordDateIsValid()}focusInput(e){!l.FocusDetector.hasFocus()||!e&&A.Features.isMobile||this.inputEl.focus()}getLastOpenFiles(){return this.model.fileInfos.map((e=>{let t="file-alt";const n=o.Storage[e.storage];return n&&n.icon&&(t=n.icon),{id:e.id,name:e.name,path:this.getDisplayedPath(e),icon:t}}))}getDisplayedPath(e){const t=e.storage;return"file"===t||"webdav"===t?e.path:null}showLocalFileAlert(){this.model.settings.skipOpenLocalWarn||h.Alerts.alert({header:v.Locale.openLocalFile,body:v.Locale.openLocalFileBody,icon:"file-alt",buttons:[{result:"skip",title:v.Locale.openLocalFileDontShow,error:!0},{result:"ok",title:v.Locale.alertOk}],click:"",esc:"",enter:"",success:e=>{this.focusInput(),"skip"===e&&(this.model.settings.skipOpenLocalWarn=!0)}})}fileSelected(e){const t=e.target.files[0];t&&(this.model.settings.canImportCsv&&/\.csv$/.test(t.name)?r.Events.emit("import-csv-requested",t):this.model.settings.canImportXml&&/\.xml$/.test(t.name)?this.setFile(t,null,this.showLocalFileAlert.bind(this)):this.processFile(t,(e=>{e&&!t.path&&"fileData"===this.reading&&this.showLocalFileAlert()})))}processFile(e,t){const n=new FileReader;n.onload=n=>{let i=!1;switch(this.reading){case"fileData":switch(this.getOpenFileFormat(n.target.result)){case"kdbx":this.params.id=null,this.params.fileData=n.target.result,this.params.name=e.name.replace(/(.+)\.\w+$/i,"$1"),this.params.path=e.path||null,this.params.storage=e.path?"file":null,this.params.rev=null,this.params.keyFileData||(this.params.keyFileName=null),this.encryptedPassword=null,this.displayOpenFile(),this.displayOpenKeyFile(),this.displayOpenDeviceOwnerAuth(),i=!0;break;case"xml":this.params.id=null,this.params.fileXml=s.ByteUtils.bytesToString(n.target.result),this.params.name=e.name.replace(/\.\w+$/i,""),this.params.path=null,this.params.storage=null,this.params.rev=null,this.encryptedPassword=null,this.importDbWithXml(),this.displayOpenDeviceOwnerAuth(),i=!0;break;case"kdb":h.Alerts.error({header:v.Locale.openWrongFile,body:v.Locale.openKdbFileBody});break;default:h.Alerts.error({header:v.Locale.openWrongFile,body:v.Locale.openWrongFileBody})}break;case"keyFileData":this.params.keyFileData=n.target.result,this.params.keyFileName=e.name,"path"===this.model.settings.rememberKeyFiles&&(this.params.keyFilePath=e.path),this.displayOpenKeyFile(),i=!0}t&&t(i)},n.onerror=()=>{h.Alerts.error({header:v.Locale.openFailedRead}),t&&t(!1)},"fileXml"===this.reading?n.readAsText(e):n.readAsArrayBuffer(e)}getOpenFileFormat(e){if(e.byteLength<8)return;const t=new Uint32Array(e,0,2);if(t[0]===s.Consts.Signatures.FileMagic)return t[1]===s.Consts.Signatures.Sig2Kdb?"kdb":t[1]===s.Consts.Signatures.Sig2Kdbx?"kdbx":void 0;if(this.model.settings.canImportXml)try{if(s.ByteUtils.bytesToString(t).trim().startsWith("<?xml"))return"xml"}catch(e){}else;}displayOpenFile(){this.$el.addClass("open--file"),this.$el.find(".open__settings-key-file,.open__settings-yubikey").removeClass("hide"),this.inputEl[0].removeAttribute("readonly"),this.inputEl[0].setAttribute("placeholder",v.Locale.openPassFor+" "+this.params.name),this.focusInput()}displayOpenKeyFile(){this.$el.toggleClass("open--key-file",!!this.params.keyFileName),this.$el.find(".open__settings-key-file-name").text(this.params.keyFileName||this.params.keyFilePath||v.Locale.openKeyFile),this.focusInput()}displayOpenChalResp(){this.$el.find(".open__settings-yubikey").toggleClass("open__settings-yubikey--active",!!this.params.chalResp)}displayOpenDeviceOwnerAuth(){const e=!!this.encryptedPassword,t=!this.passwordInput.length,n=e&&t;this.el.querySelector(".open__pass-enter-btn").classList.toggle("open__pass-enter-btn--touch-id",n)}setFile(e,t,n){this.reading="fileData",this.processFile(e,(e=>{e&&t&&(this.reading="keyFileData",this.processFile(t)),e&&"function"==typeof n&&n()}))}openFile(){!1!==this.model.settings.canOpen&&(this.busy||(this.closeConfig(),this.openAny("fileData")))}openKeyFile(e){B(e.target).hasClass("open__settings-key-file-dropbox")?this.openKeyFileFromDropbox():!this.busy&&this.params.name&&(this.params.keyFileName?(this.params.keyFileData=null,this.params.keyFilePath=null,this.params.keyFileName="",this.$el.removeClass("open--key-file"),this.$el.find(".open__settings-key-file-name").text(v.Locale.openKeyFile)):this.openAny("keyFileData"))}openKeyFileFromDropbox(){this.busy||new a.DropboxChooser(((e,t)=>{e||(this.params.keyFileData=t.data,this.params.keyFileName=t.name,this.displayOpenKeyFile())})).choose()}openAny(e,t){this.reading=e,this.params[e]=null;const n=this.$el.find(".open__file-ctrl").attr("accept",t||"").val(null);d.Launcher&&d.Launcher.openFileChooser?d.Launcher.openFileChooser(((e,t)=>{e?P.error("Error opening file chooser",e):this.processFile(t)})):n.click()}openLast(e){if(this.busy)return;const t=B(e.target).closest(".open__last-item").data("id").toString();if(B(e.target).is(".open__last-item-icon-del")){const e=this.model.fileInfos.get(t);return!e.storage||e.modified?void h.Alerts.yesno({header:v.Locale.openRemoveLastQuestion,body:e.modified?v.Locale.openRemoveLastQuestionModBody:v.Locale.openRemoveLastQuestionBody,buttons:[{result:"yes",title:v.Locale.alertYes},{result:"",title:v.Locale.alertNo}],success:()=>{this.removeFile(t)}}):void this.removeFile(t)}const n=this.model.fileInfos.get(t);this.showOpenFileInfo(n,!0)}removeFile(e){this.model.removeFileInfo(e),this.$el.find('.open__last-item[data-id="'+e+'"]').remove(),this.resetParams(),this.render()}inputKeydown(e){const t=e.keyCode||e.which;t===g.Keys.DOM_VK_RETURN?this.openDb():t===g.Keys.DOM_VK_CAPS_LOCK&&this.toggleCapsLockWarning(!1)}inputKeyup(e){(e.keyCode||e.which)===g.Keys.DOM_VK_CAPS_LOCK&&this.toggleCapsLockWarning(!1)}inputKeypress(e){const t=e.keyCode||e.which,n=String.fromCharCode(t),s=n.toLowerCase();s===n.toUpperCase()||e.shiftKey||this.toggleCapsLockWarning(n!==s)}inputInput(){this.displayOpenDeviceOwnerAuth()}toggleCapsLockWarning(e){this.$el.find(".open__pass-warning").toggleClass("invisible",!e)}dragover(e){if(!1===this.model.settings.canOpen)return;e.preventDefault(),e.stopPropagation();const t=e.dataTransfer;t.types&&(t.types.indexOf?-1!==t.types.indexOf("Files"):t.types.contains("Files"))?(t.dropEffect="copy",this.dragTimeout&&clearTimeout(this.dragTimeout),this.$el.hasClass("open--drag")||this.$el.addClass("open--drag")):t.dropEffect="none"}dragleave(){!1!==this.model.settings.canOpen&&(this.dragTimeout&&clearTimeout(this.dragTimeout),this.dragTimeout=setTimeout((()=>{this.$el.removeClass("open--drag")}),100))}drop(e){if(!1===this.model.settings.canOpen)return;if(e.preventDefault(),this.busy)return;this.dragTimeout&&clearTimeout(this.dragTimeout),this.closeConfig(),this.$el.removeClass("open--drag");const t=[...e.target.files||e.dataTransfer.files],n=t.find((e=>/\.kdbx$/i.test(e.name))),s=t.find((e=>/\.keyx?$/i.test(e.name)));if(n)this.setFile(n,s,n.path?null:this.showLocalFileAlert.bind(this));else{if(this.model.settings.canImportXml){const e=t.find((e=>/\.xml$/i.test(e.name)));if(e)return void this.setFile(e,null,this.showLocalFileAlert.bind(this))}if(this.model.settings.canImportCsv){const e=t.find((e=>/\.csv$/i.test(e.name)));e&&r.Events.emit("import-csv-requested",e)}}}undoKeyPress(e){e.preventDefault()}tabKeyPress(){this.$el.addClass("open--show-focus")}enterKeyPress(e){const t=this.$el.find("[tabindex]:focus");t.length&&t.trigger("click",e)}showOpenFileInfo(e,t){!this.busy&&e&&(this.params.id=e.id,this.params.storage=e.storage,this.params.path=e.path,this.params.name=e.name,this.params.fileData=null,this.params.rev=null,this.params.keyFileName=e.keyFileName,this.params.keyFilePath=e.keyFilePath,this.params.keyFileData=null,this.params.opts=e.opts,this.params.chalResp=e.chalResp,this.setEncryptedPassword(e),this.displayOpenFile(),this.displayOpenKeyFile(),this.displayOpenChalResp(),this.displayOpenDeviceOwnerAuth(),t&&this.focusInput(!0))}showOpenLocalFile(e,t){if(!this.busy&&(this.params.id=null,this.params.storage="file",this.params.path=e,this.params.name=e.match(/[^/\\]*$/)[0],this.params.rev=null,this.params.fileData=null,this.encryptedPassword=null,this.displayOpenFile(),this.displayOpenDeviceOwnerAuth(),t)){const e=d.Launcher.parsePath(t);this.params.keyFileName=e.file,this.params.keyFilePath=t,this.params.keyFileData=null,this.displayOpenKeyFile()}}createDemo(){this.busy||(this.closeConfig(),this.model.createDemoFile()||this.emit("close"),this.model.settings.demoOpened||(this.model.settings.demoOpened=!0))}createNew(){this.busy||this.model.createNewFile()}openDb(){if(this.params.id&&this.model.files.get(this.params.id))this.emit("close");else if(!this.busy&&this.params.name)if(this.$el.toggleClass("open--opening",!0),this.inputEl.attr("disabled","disabled"),this.busy=!0,this.params.password=this.passwordInput.value,this.encryptedPassword&&!this.params.password.length){P.debug("Encrypting password using hardware decryption");const e=v.Locale.bioOpenAuthPrompt.replace("{}",this.params.name),t=s.ProtectedValue.fromBase64(this.encryptedPassword.value);r.Events.emit("hardware-decrypt-started"),I.NativeModules.hardwareDecrypt(t,e).then((e=>{r.Events.emit("hardware-decrypt-finished"),this.params.password=e,this.params.encryptedPassword=this.encryptedPassword,this.model.openFile(this.params,(e=>this.openDbComplete(e)))})).catch((e=>{r.Events.emit("hardware-decrypt-finished"),e.message.includes("User refused")?e.userCanceled=!0:e.message.includes("SecKeyCreateDecryptedData")&&(e.maybeTouchIdChanged=!0),P.error("Error in hardware decryption",e),this.openDbComplete(e)}))}else this.params.encryptedPassword=null,this.afterPaint((()=>{this.model.openFile(this.params,(e=>this.openDbComplete(e)))}))}openDbComplete(e){this.busy=!1,this.$el.toggleClass("open--opening",!1);const t=e&&!e.userCanceled;if(this.inputEl.removeAttr("disabled").toggleClass("input--error",!!t),e)if(P.error("Error opening file",e),this.focusInput(!0),this.inputEl[0].selectionStart=0,this.inputEl[0].selectionEnd=this.inputEl.val().length,"InvalidKey"===e.code)w.InputFx.shake(this.inputEl);else if(e.userCanceled);else{e.notFound&&(e=v.Locale.openErrorFileNotFound);let t=v.Locale.openErrorDescription;e.maybeTouchIdChanged&&(t+="\n"+v.Locale.openErrorDescriptionMaybeTouchIdChanged),h.Alerts.error({header:v.Locale.openError,body:t,pre:this.errorToString(e)})}else this.emit("close")}importDbWithXml(){!this.busy&&this.params.name&&(this.$el.toggleClass("open--opening",!0),this.inputEl.attr("disabled","disabled"),this.busy=!0,this.afterPaint((()=>this.model.importFileWithXml(this.params,(e=>{e&&(this.params.name="",this.params.fileXml=null),this.openDbComplete(e)})))))}toggleMore(){this.busy||(this.closeConfig(),this.$el.find(".open__icons--lower").toggleClass("hide"))}openSettings(){r.Events.emit("toggle-settings")}openStorage(e){if(this.busy)return;const t=o.Storage[B(e.target).closest(".open__icon").data("storage")];t&&(t.needShowOpenConfig&&t.needShowOpenConfig()?this.showConfig(t):t.list?this.listStorage(t):h.Alerts.notImplemented())}listStorage(e,t){if(this.busy)return;this.closeConfig();const n=this.$el.find(".open__icon-storage[data-storage="+e.name+"]");this.busy=!0,n.toggleClass("flip3d",!0),e.list(t&&t.dir,((s,i)=>{if(n.toggleClass("flip3d",!1),this.busy=!1,s||!i){if("browser-auth-started"===(s=s?s.toString():""))return;return void(0===s.lastIndexOf("OAuth",0)||h.Alerts.alertDisplayed||h.Alerts.error({header:v.Locale.openError,body:v.Locale.openListErrorBody,pre:s.toString()}))}if(!i.length)return void h.Alerts.error({header:v.Locale.openNothingFound,body:v.Locale.openNothingFoundBody});const r=f.Comparators.stringComparator("path",!0);i.sort(((e,t)=>e.dir!==t.dir?!!t.dir-!!e.dir:r(e,t))),t&&t.dir&&i.unshift({path:t.prevDir,name:"..",dir:!0});const o=new C.StorageFileListView({files:i});o.on("selected",(n=>{n.dir?this.listStorage(e,{dir:n.path,prevDir:t&&t.dir||""}):this.openStorageFile(e,n)})),h.Alerts.alert({header:v.Locale.openSelectFile,body:v.Locale.openSelectFileBody,icon:e.icon||"file-alt",buttons:[{result:"",title:v.Locale.alertCancel}],esc:"",click:"",view:o})}))}openStorageFile(e,t){this.busy||(this.params.id=null,this.params.storage=e.name,this.params.path=t.path,this.params.name=y.UrlFormat.getDataFileName(t.name),this.params.rev=t.rev,this.params.fileData=null,this.encryptedPassword=null,this.displayOpenFile(),this.displayOpenDeviceOwnerAuth())}showConfig(e){if(this.busy)return;this.views.openConfig&&this.views.openConfig.remove();const t=Object.assign({id:e.name,name:v.Locale[e.name]||e.name,icon:e.icon,buttons:!0},e.getOpenConfig());this.views.openConfig=new k.OpenConfigView(t,{parent:".open__config-wrap"}),this.views.openConfig.on("cancel",this.closeConfig.bind(this)),this.views.openConfig.on("apply",this.applyConfig.bind(this)),this.views.openConfig.render(),this.$el.find(".open__pass-area").addClass("hide"),this.$el.find(".open__icons--lower").addClass("hide")}closeConfig(){this.busy&&(this.storageWaitId=null,this.busy=!1),this.views.openConfig&&(this.views.openConfig.remove(),delete this.views.openConfig),this.$el.find(".open__pass-area").removeClass("hide"),this.$el.find(".open__config").addClass("hide"),this.focusInput()}applyConfig(e){if(this.busy||!e)return;this.busy=!0,this.views.openConfig.setDisabled(!0);const t=o.Storage[e.storage];this.storageWaitId=Math.random();const n=e.path,s=(0,E.omit)(e,["path","storage"]),i={waitId:this.storageWaitId,storage:e.storage,path:n,opts:s};t.applyConfig?t.applyConfig(s,this.storageApplyConfigComplete.bind(this,i)):t.stat(n,s,this.storageStatComplete.bind(this,i))}storageApplyConfigComplete(e,t){this.storageWaitId===e.waitId&&(this.storageWaitId=null,this.busy=!1,t?(this.views.openConfig.setDisabled(!1),this.views.openConfig.setError(t)):this.closeConfig())}storageStatComplete(e,t,n){this.storageWaitId===e.waitId&&(this.storageWaitId=null,this.busy=!1,t?(this.views.openConfig.setDisabled(!1),this.views.openConfig.setError(t)):(this.closeConfig(),this.params.id=null,this.params.storage=e.storage,this.params.path=e.path,this.params.opts=e.opts,this.params.name=y.UrlFormat.getDataFileName(e.path),this.params.rev=n.rev,this.params.fileData=null,this.encryptedPassword=null,this.displayOpenFile(),this.displayOpenDeviceOwnerAuth()))}moveOpenFileSelection(e){const t=this.getLastOpenFiles();this.currentSelectedIndex+e>=0&&this.currentSelectedIndex+e<=t.length-1&&(this.currentSelectedIndex=this.currentSelectedIndex+e);if(!t[this.currentSelectedIndex])return;const n=this.model.fileInfos.get(t[this.currentSelectedIndex].id);this.showOpenFileInfo(n)}moveOpenFileSelectionDown(){this.moveOpenFileSelection(1)}moveOpenFileSelectionUp(){this.moveOpenFileSelection(-1)}toggleGenerator(e){if(e.stopPropagation(),this.views.gen)return void this.views.gen.remove();const t=this.$el.find(".open__icon-generate")[0].getBoundingClientRect(),n={left:t.left,top:t.top};A.Features.isMobile&&(n.left="50vw",n.top="50vh",n.transform="translate(-50%, -50%)");const s=new x.GeneratorView({copy:!0,noTemplateEditor:!0,pos:n});s.render(),s.once("remove",(()=>{delete this.views.gen})),this.views.gen=s}userIdle(){this.inputEl.val(""),this.passwordInput.reset(),this.passwordInput.setElement(this.inputEl)}usbDevicesChanged(){if(this.model.settings.canOpenOtpDevice){const e=!!p.UsbListener.attachedYubiKeys,t=e&&this.model.settings.yubiKeyShowIcon;this.$el.find(".open__icon-yubikey").toggleClass("hide",!t);const n=e&&this.model.settings.yubiKeyShowChalResp;this.$el.find(".open__settings-yubikey").toggleClass("open__settings-yubikey--present",!!n),!e&&this.busy&&this.otpDevice&&this.otpDevice.cancelOpen()}}openYubiKey(){if(this.busy&&this.otpDevice&&this.otpDevice.cancelOpen(),!this.busy){this.busy=!0,this.inputEl.attr("disabled","disabled");const e=this.$el.find(".open__icon-yubikey");e.toggleClass("flip3d",!0),m.YubiKey.checkToolStatus().then((t=>{if("ok"!==t)return e.toggleClass("flip3d",!1),this.inputEl.removeAttr("disabled"),this.busy=!1,r.Events.emit("toggle-settings","devices");this.otpDevice=this.model.openOtpDevice((t=>{t&&!m.YubiKey.aborted&&h.Alerts.error({header:v.Locale.openError,body:v.Locale.openErrorDescription,pre:this.errorToString(t)}),this.otpDevice=null,e.toggleClass("flip3d",!1),this.inputEl.removeAttr("disabled"),this.busy=!1}))}))}}selectYubiKeyChalResp(){if(this.busy)return;if(this.params.chalResp)return this.params.chalResp=null,this.el.querySelector(".open__settings-yubikey").classList.remove("open__settings-yubikey--active"),void this.focusInput();const e=new _.OpenChalRespView;e.on("select",(({vid:e,pid:t,serial:n,slot:s})=>{this.params.chalResp={vid:e,pid:t,serial:n,slot:s},this.el.querySelector(".open__settings-yubikey").classList.add("open__settings-yubikey--active"),this.focusInput()})),h.Alerts.alert({header:v.Locale.openChalRespHeader,icon:"usb-token",buttons:[{result:"",title:v.Locale.alertCancel}],esc:"",click:"",view:e})}errorToString(e){const t=e.toString();return t!=={}.toString()?t:e.ykError&&e.code?v.Locale.yubiKeyErrorWithCode.replace("{}",e.code):void 0}setEncryptedPassword(e){if(this.encryptedPassword=null,e.id){switch(this.model.settings.deviceOwnerAuth){case"memory":this.encryptedPassword=this.model.getMemoryPassword(e.id);break;case"file":this.encryptedPassword={value:e.encryptedPassword,date:e.encryptedPasswordDate}}this.checkIfEncryptedPasswordDateIsValid()}}checkIfEncryptedPasswordDateIsValid(){if(this.encryptedPassword){const e=new Date(this.encryptedPassword.date);e.setMinutes(e.getMinutes()+this.model.settings.deviceOwnerAuthTimeoutMinutes),e<new Date&&(this.encryptedPassword=null)}}unlockMessageChanged(e){if(this.el.querySelector(".open__message").classList.toggle("hide",!e),e){this.el.querySelector(".open__message-content").innerText=v.Locale[e]}}openMessageCancelClick(){this.model.rejectPendingFileUnlockPromise("User canceled")}}},3659:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SelectEntryFieldView:()=>u});var s=n(7779),i=n(7201),r=n(2977),o=n(7015),a=n(8335),l=n.n(a),c=n(1705);class u extends s.View{constructor(e){var t;super(e),this.parent="body",this.modal="select-entry-field",this.template=l(),this.events={"click .select-entry-field__item":"itemClicked","click .select-entry-field__cancel-btn":"cancelClicked"},this.result=null,this.fields=this.model.entry?this.getFields(this.model.entry):[],this.activeField=null===(t=this.fields[0])||void 0===t?void 0:t.field,this.initScroll(),this.listenTo(i.Events,"main-window-blur",this.mainWindowBlur),this.setupKeys()}setupKeys(){this.onKey(r.Keys.DOM_VK_UP,this.upPressed,!1,"select-entry-field"),this.onKey(r.Keys.DOM_VK_DOWN,this.downPressed,!1,"select-entry-field"),this.onKey(r.Keys.DOM_VK_ESCAPE,this.escPressed,!1,"select-entry-field"),this.onKey(r.Keys.DOM_VK_RETURN,this.enterPressed,!1,"select-entry-field")}render(){super.render({needsTouch:this.model.needsTouch,deviceShortName:this.model.deviceShortName,fields:this.fields,activeField:this.activeField}),document.activeElement.blur();const e=this.el.querySelector(".select-entry-field__items");e&&this.createScroll({root:e,scroller:this.el.querySelector(".scroller"),bar:this.el.querySelector(".scroller__bar")})}getFields(e){return Object.entries(e.getAllFields()).map((([e,t])=>({field:e,value:t}))).filter((({value:e})=>e)).map((({field:e,value:t})=>({field:e,value:t.isProtected?c.PasswordPresenter.present(t.length):t})))}upPressed(e){if(e.preventDefault(),!this.activeField)return;const t=this.fields.findIndex((e=>e.field===this.activeField))-1;t>=0&&(this.activeField=this.fields[t].field,this.render())}downPressed(e){if(e.preventDefault(),!this.activeField)return;const t=this.fields.findIndex((e=>e.field===this.activeField))+1;t<this.fields.length&&(this.activeField=this.fields[t].field,this.render())}escPressed(){this.emit("result",void 0)}enterPressed(){this.activeField&&this.emit("result",this.activeField)}itemClicked(e){const t=e.target.closest(".select-entry-field__item");this.activeField=t.dataset.field,this.emit("result",this.activeField)}mainWindowBlur(){this.emit("result",void 0)}showAndGetResult(){return this.render(),new Promise((e=>{this.once("result",(t=>{this.remove(),e(t)}))}))}cancelClicked(){this.emit("result",void 0)}}Object.assign(u.prototype,o.Scrollable)},4583:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SelectEntryView:()=>w});var s=n(7779),i=n(7201),r=n(7027),o=n(1164),a=n(2977),l=n(7614),c=n(9938),u=n(2378),d=n(4798),h=n(3297),p=n(7015),m=n(1434),g=n(7725),f=n(4807),A=n.n(f),y=n(4406),v=n.n(y),b=n(6718);class w extends s.View{constructor(e){super(e),this.parent="body",this.modal="select-entry",this.template=A(),this.itemTemplate=v(),this.events={"click .select-entry__header-filter-clear":"clearFilterText","click .select-entry__item":"itemClicked","contextmenu .select-entry__item":"itemRightClicked","click .select-entry__filter":"filterClicked","click .select-entry__cancel-btn":"cancelClicked"},this.result=null,this.entries=null,this.initScroll(),this.listenTo(i.Events,"main-window-blur",this.mainWindowBlur),this.listenTo(i.Events,"keypress:select-entry",this.keyPressed),this.setupKeys()}setupKeys(){this.onKey(a.Keys.DOM_VK_ESCAPE,this.escPressed,!1,"select-entry"),this.onKey(a.Keys.DOM_VK_RETURN,this.enterPressed,!1,"select-entry"),this.model.isAutoType&&(this.onKey(a.Keys.DOM_VK_RETURN,this.actionEnterPressed,o.KeyHandler.SHORTCUT_ACTION,"select-entry"),this.onKey(a.Keys.DOM_VK_RETURN,this.optEnterPressed,o.KeyHandler.SHORTCUT_OPT,"select-entry"),this.onKey(a.Keys.DOM_VK_RETURN,this.shiftEnterPressed,o.KeyHandler.SHORTCUT_SHIFT,"select-entry"),this.onKey(a.Keys.DOM_VK_O,this.openKeyPressed,o.KeyHandler.SHORTCUT_ACTION,"select-entry")),this.onKey(a.Keys.DOM_VK_UP,this.upPressed,!1,"select-entry"),this.onKey(a.Keys.DOM_VK_DOWN,this.downPressed,!1,"select-entry"),this.onKey(a.Keys.DOM_VK_BACK_SPACE,this.backSpacePressed,!1,"select-entry")}render(){var e;const t=l.AppSettingsModel.colorfulIcons?"":"grayscale";this.entries=this.model.filter.getEntries(),this.result&&this.entries.includes(this.result)||(this.result=this.entries[0]);const n=new c.EntryPresenter(null,t,null===(e=this.result)||void 0===e?void 0:e.id);n.itemOptions=this.model.itemOptions;let i="";const o=this.itemTemplate;this.entries.forEach((e=>{n.present(e),i+=o(n,s.DefaultTemplateOptions)}));const a=[];if(this.model.filter.url){const e=d.UrlFormat.presentAsShortUrl(this.model.filter.url);a.push({id:"url",type:u.StringFormat.capFirst(h.Locale.website),text:e,active:this.model.filter.useUrl}),a.push({id:"subdomains",type:u.StringFormat.capFirst(h.Locale.selectEntrySubdomains),active:this.model.filter.useUrl&&this.model.filter.subdomains})}this.model.filter.title&&a.push({id:"title",type:u.StringFormat.capFirst(h.Locale.title),text:this.model.filter.title,active:this.model.filter.useTitle}),this.model.filter.text&&a.push({id:"text",type:u.StringFormat.capFirst(h.Locale.selectEntryContains),text:this.model.filter.text,active:!0}),super.render({isAutoType:this.model.isAutoType,topMessage:this.model.topMessage,filters:a,itemsHtml:i,actionSymbol:r.Shortcuts.actionShortcutSymbol(!0),altSymbol:r.Shortcuts.altShortcutSymbol(!0),shiftSymbol:r.Shortcuts.shiftShortcutSymbol(!0),keyEnter:h.Locale.keyEnter,keyEsc:h.Locale.keyEsc}),document.activeElement.blur(),this.createScroll({root:this.$el.find(".select-entry__items")[0],scroller:this.$el.find(".scroller")[0],bar:this.$el.find(".scroller__bar")[0]})}cancelAndClose(){this.result=null,this.emit("result",this.result)}closeWithResult(e){this.emit("result",{entry:this.result,sequence:e})}escPressed(){this.cancelAndClose()}enterPressed(){this.closeWithResult()}actionEnterPressed(){this.closeWithResult("{PASSWORD}")}optEnterPressed(){this.closeWithResult("{USERNAME}")}openKeyPressed(){this.emit("show-open-files")}shiftEnterPressed(e){const t=this.$el.find('.select-entry__item[data-id="'+this.result.id+'"]');this.showItemOptions(t,e)}upPressed(e){e.preventDefault();const t=this.entries.indexOf(this.result)-1;t>=0&&(this.result=this.entries[t],this.highlightActive())}downPressed(e){e.preventDefault();const t=this.entries.indexOf(this.result)+1;t<this.entries.length&&(this.result=this.entries[t],this.highlightActive())}highlightActive(){this.$el.find(".select-entry__item").removeClass("select-entry__item--active");const e=this.$el.find('.select-entry__item[data-id="'+this.result.id+'"]');e.addClass("select-entry__item--active");const t=e[0].getBoundingClientRect(),n=this.scroller[0].getBoundingClientRect();t.top<n.top?this.scroller[0].scrollTop+=t.top-n.top:t.bottom>n.bottom&&(this.scroller[0].scrollTop+=t.bottom-n.bottom)}mainWindowBlur(){this.emit("result",void 0)}keyPressed(e){e.which&&e.which!==a.Keys.DOM_VK_RETURN&&(this.model.filter.text+=String.fromCharCode(e.which),this.render())}backSpacePressed(){this.model.filter.text&&(this.model.filter.text=this.model.filter.text.substr(0,this.model.filter.text.length-1),this.render())}clearFilterText(){this.model.filter.text="",this.render()}itemClicked(e){const t=b(e.target).closest(".select-entry__item");if(b(e.target).closest(".select-entry__item-options").length)this.showItemOptions(t,e);else{const e=t.data("id");this.result=this.entries.get(e),this.closeWithResult()}}itemRightClicked(e){const t=b(e.target).closest(".select-entry__item");this.showItemOptions(t,e)}showItemOptions(e,t){if(t&&t.stopImmediatePropagation(),!this.model.itemOptions)return;const n=e.data("id"),s=this.entries.get(n);if(this.views.optionsDropdown&&(this.hideItemOptionsDropdown(),this.result&&this.result.id===s.id))return;this.result=s,e.hasClass("select-entry__item--active")||this.highlightActive();const i=new m.DropdownView({selectedOption:0});this.listenTo(i,"cancel",this.hideItemOptionsDropdown),this.listenTo(i,"select",this.itemOptionsDropdownSelect);const r=[];s.fields.otp&&r.push({value:"{TOTP}",icon:"clock",text:h.Locale.autoTypeSelectionOtp}),s.user&&r.push({value:"{USERNAME}",icon:"user",text:u.StringFormat.capFirst(h.Locale.user)}),s.password&&r.push({value:"{PASSWORD}",icon:"key",text:u.StringFormat.capFirst(h.Locale.password)});for(const e of Object.keys(s.fields))"otp"===e||e.startsWith(g.ExtraUrlFieldName)||r.push({value:`{S:${e}}`,icon:"th-list",text:e});let o;if(t&&2===t.button)o={top:t.pageY,left:t.pageX};else{const t=e[0].getBoundingClientRect();o={top:t.bottom,right:t.right}}i.render({position:o,options:r}),this.views.optionsDropdown=i}hideItemOptionsDropdown(){this.views.optionsDropdown&&(this.views.optionsDropdown.remove(),delete this.views.optionsDropdown)}itemOptionsDropdownSelect(e){this.hideItemOptionsDropdown();const t=e.item;this.closeWithResult(t)}showAndGetResult(){return this.render(),new Promise((e=>{this.once("result",(t=>{this.remove(),e(t)}))}))}filterClicked(e){const t=e.target.closest(".select-entry__filter"),n=t.dataset.filter,s="true"!==t.dataset.active;switch(n){case"url":this.model.filter.useUrl=s;break;case"subdomains":this.model.filter.subdomains=s,s&&(this.model.filter.useUrl=!0);break;case"title":this.model.filter.useTitle=s;break;case"text":s||(this.model.filter.text="")}this.render()}cancelClicked(){this.cancelAndClose()}}Object.assign(w.prototype,p.Scrollable)},1127:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsAboutView:()=>c});var s=n(7779),i=n(7119),r=n(9673),o=n(667),a=n(6804),l=n.n(a);class c extends s.View{constructor(...e){super(...e),this.template=l()}render(){super.render({version:i.RuntimeInfo.version,licenseLink:r.Links.License,licenseLinkApache:r.Links.LicenseApache,licenseLinkCCBY40:r.Links.LicenseLinkCCBY40,repoLink:r.Links.Repo,donationLink:r.Links.Donation,isDesktop:o.Features.isDesktop,year:(new Date).getFullYear()})}}},2112:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsBrowserView:()=>g});var s=n(7201),i=n(7779),r=n(1424),o=n.n(r),a=n(667),l=n(9673),c=n(7614),u=n(8925),d=n(3297),h=n(8432),p=n(4530),m=n(6098);class g extends i.View{constructor(e,t){super(e,t),this.template=o(),this.events={"change .check-enable-for-browser":"changeEnableForBrowser","change .settings__browser-focus-if-locked":"changeFocusIfLocked","change .settings__browser-focus-if-empty":"changeFocusIfEmpty","change .settings__browser-session-ask-get":"changeSessionAskGet","change .settings__browser-session-ask-save":"changeSessionAskSave","change .settings__browser-session-file-check":"changeSessionFileAccess","click .settings__browser-btn-terminate-session":"terminateSession"},this.listenTo(s.Events,"browser-extension-sessions-changed",this.render)}render(){const e={desktop:a.Features.isDesktop,icon:a.Features.browserIcon,focusIfLocked:c.AppSettingsModel.extensionFocusIfLocked,focusIfEmpty:c.AppSettingsModel.extensionFocusIfEmpty,sessions:h.BrowserExtensionConnector.sessions.map((e=>{var t;const n=this.getSessionFileAccess(e);return Object.assign({},e,{fileAccess:n,noFileAccess:n&&!n.some((e=>e.checked)),showAskSave:void 0!==(null===(t=e.permissions)||void 0===t?void 0:t.askSave),connectedDate:m.DateFormat.dtStr(e.connectedDate)})}))};if(a.Features.isDesktop)e.extensionNames=["KeeWeb Connect","KeePassXC-Browser"],e.settingsPerBrowser=this.getSettingsPerBrowser(),e.anyBrowserIsEnabled=h.BrowserExtensionConnector.isEnabled();else{const t=a.Features.extensionBrowserFamily;e.extensionBrowserFamily=a.Features.extensionBrowserFamily,e.extensionDownloadLink=l.Links[`KWCFor${t}`]}super.render(e)}getSettingsPerBrowser(){return h.SupportedBrowsers.map((e=>{const t="Other"===e?d.Locale.setBrowserOtherBrowsers:e,n=h.SupportedExtensions.map((t=>("KPXC"===(t=Object.assign({},t,{supported:!0,enabled:!!c.AppSettingsModel[`extensionEnabled${t.alias}${e}`],installUrl:l.Links[`${t.alias}For${e}`]})).alias&&(t.manualUrl=l.Links.ExtensionHelpForKPXC),t.installUrl||("Other"===e?t.helpUrl=l.Links.ExtensionHelpForOtherBrowsers:t.supported=!1),t)));return{browser:e,browserName:t,extensions:n}}))}getSessionFileAccess(e){if(!e.permissions)return;const t=this.appModel.files.map((t=>({id:t.id,name:t.name,checked:e.permissions.files.includes(t.id)||e.permissions.allFiles})));for(const n of e.permissions.files)if(!this.appModel.files.get(n)){const e=this.appModel.fileInfos.get(n);e&&t.push({id:n,name:e.name,checked:!0})}return t.push({id:"all",name:t.length?d.Locale.extensionConnectAllOtherFiles:d.Locale.extensionConnectAllFiles,checked:e.permissions.allFiles}),t}changeEnableForBrowser(e){const t=e.target.checked,n=e.target.dataset.browser,s=e.target.dataset.extension;t&&"KPXC"===s&&!u.RuntimeDataModel.kpxcExtensionWarningShown?(e.target.checked=!1,p.Alerts.yesno({icon:"exclamation-triangle",header:d.Locale.setBrowserExtensionKPXCWarnHeader.replace("{}","KeePassXC"),body:d.Locale.setBrowserExtensionKPXCWarnBody1.replace(/{}/g,"KeePassXC")+"\n"+d.Locale.setBrowserExtensionKPXCWarnBody2,success:()=>{u.RuntimeDataModel.kpxcExtensionWarningShown=!0,this.enableForBrowser(t,n,s)}})):this.enableForBrowser(t,n,s)}enableForBrowser(e,t,n){const s=`extensionEnabled${n}${t}`;s?c.AppSettingsModel[s]=e:delete c.AppSettingsModel[s],h.BrowserExtensionConnector.enable(t,n,e),this.render()}changeFocusIfLocked(e){c.AppSettingsModel.extensionFocusIfLocked=e.target.checked,this.render()}changeFocusIfEmpty(e){c.AppSettingsModel.extensionFocusIfEmpty=e.target.checked,this.render()}changeSessionAskGet(e){const t=e.target.dataset.clientId,n=e.target.value;h.BrowserExtensionConnector.setClientPermissions(t,{askGet:n})}changeSessionAskSave(e){const t=e.target.dataset.clientId,n=e.target.value;h.BrowserExtensionConnector.setClientPermissions(t,{askSave:n})}changeSessionFileAccess(e){const t=e.target.dataset.clientId,n=e.target.dataset.fileId,s=e.target.checked;if("all"===n){const e={allFiles:s};s&&(e.files=this.appModel.files.map((e=>e.id))),h.BrowserExtensionConnector.setClientPermissions(t,e)}else{const e=h.BrowserExtensionConnector.getClientPermissions(t);let i;i=s?e.files.concat(n):e.files.filter((e=>e!==n));const r={files:i};s||(r.allFiles=!1),h.BrowserExtensionConnector.setClientPermissions(t,r)}this.render()}terminateSession(e){const t=e.target.dataset.connectionId;h.BrowserExtensionConnector.terminateConnection(t)}}},9646:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsDevicesView:()=>d});var s=n(7201),i=n(7779),r=n(7614),o=n(9777),a=n(9673),l=n(8647),c=n(2465),u=n.n(c);class d extends i.View{constructor(...e){super(...e),this.template=u(),this.events={"change .settings__devices-enable-usb":"changeEnableUsb","change .settings__yubikey-show-icon":"changeYubiKeyShowIcon","change .settings__yubikey-auto-open":"changeYubiKeyAutoOpen","change .settings__yubikey-match-entries":"changeYubiKeyMatchEntries","change .settings__yubikey-chalresp-show":"changeYubiKeyShowChalResp","change .settings__yubikey-remember-chalresp":"changeYubiKeyRememberChalResp","change .settings__yubikey-stuck-workaround":"changeYubiKeyStuckWorkaround"},["ok","checking"].includes(o.YubiKey.ykmanStatus)||(this.toolCheckPromise=o.YubiKey.checkToolStatus())}render(){this.toolCheckPromise&&(this.toolCheckPromise.then((()=>this.render())),this.toolCheckPromise=void 0),super.render({supported:l.UsbListener.supported,enableUsb:l.UsbListener.supported&&r.AppSettingsModel.enableUsb,ykmanStatus:o.YubiKey.ykmanStatus,yubiKeyShowIcon:r.AppSettingsModel.yubiKeyShowIcon,yubiKeyAutoOpen:r.AppSettingsModel.yubiKeyAutoOpen,yubiKeyMatchEntries:r.AppSettingsModel.yubiKeyMatchEntries,yubiKeyShowChalResp:r.AppSettingsModel.yubiKeyShowChalResp,yubiKeyRememberChalResp:r.AppSettingsModel.yubiKeyRememberChalResp,yubiKeyStuckWorkaround:r.AppSettingsModel.yubiKeyStuckWorkaround,yubiKeyManualLink:a.Links.YubiKeyManual,ykmanInstallLink:a.Links.YubiKeyManagerInstall})}changeEnableUsb(e){r.AppSettingsModel.enableUsb=e.target.checked,this.render()}changeYubiKeyShowIcon(e){r.AppSettingsModel.yubiKeyShowIcon=e.target.checked,this.render()}changeYubiKeyAutoOpen(e){r.AppSettingsModel.yubiKeyAutoOpen=e.target.checked,this.render()}changeYubiKeyMatchEntries(e){r.AppSettingsModel.yubiKeyMatchEntries=e.target.checked,this.render(),s.Events.emit("refresh")}changeYubiKeyShowChalResp(e){r.AppSettingsModel.yubiKeyShowChalResp=e.target.checked,this.render()}changeYubiKeyRememberChalResp(e){r.AppSettingsModel.yubiKeyRememberChalResp=e.target.checked,this.render()}changeYubiKeyStuckWorkaround(e){r.AppSettingsModel.yubiKeyStuckWorkaround=e.target.checked,this.render()}}},8387:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsFileOtpDeviceView:()=>a});var s=n(7779),i=n(7201),r=n(3953),o=n.n(r);class a extends s.View{constructor(...e){super(...e),this.template=o(),this.events={"click .settings__file-button-settings":"openDevicesSettings","click .settings__file-button-close":"closeFile"}}render(){super.render({name:this.model.name,deviceClassName:this.model.deviceClassName})}openDevicesSettings(){i.Events.emit("toggle-settings","devices")}closeFile(){this.appModel.closeFile(this.model)}}},1500:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsFileView:()=>E});var s=n(3617),i=n(7779),r=n(949),o=n(7027),a=n(9491),l=n(4530),c=n(9777),u=n(8647),d=n(9673),h=n(7614),p=n(6098),m=n(4798),g=n(1705),f=n(3297),A=n(667),y=n(2547),v=n(1764),b=n(6838),w=n(5194),k=n.n(w),C=n(6718);const _="Backups/{name}.{date}.bak";class E extends i.View{constructor(e,t){super(e,t),this.template=k(),this.yubiKeys=[],this.events={"click .settings__file-button-save-default":"saveDefault","click .settings__file-button-save-choose":"toggleChooser","click .settings__file-button-close":"closeFile","click .settings__file-save-to-file":"saveToFile","click .settings__file-save-to-xml":"saveToXml","click .settings__file-save-to-html":"saveToHtml","click .settings__file-save-to-storage":"saveToStorage","change #settings__file-key-file":"keyFileChange","click #settings__file-file-select-link":"triggerSelectFile","change #settings__file-file-select":"fileSelected","focus #settings__file-master-pass":"focusMasterPass","input #settings__file-master-pass":"changeMasterPass","blur #settings__file-master-pass":"blurMasterPass","focus #settings__file-confirm-master-pass":"focusConfirmMasterPass","blur #settings__file-confirm-master-pass":"blurConfirmMasterPass","input #settings__file-name":"changeName","input #settings__file-def-user":"changeDefUser","change #settings__file-backup-enabled":"changeBackupEnabled","input #settings__file-backup-path":"changeBackupPath","change #settings__file-backup-storage":"changeBackupStorage","change #settings__file-backup-schedule":"changeBackupSchedule","click .settings__file-button-backup":"backupFile","change #settings__file-trash":"changeTrash","change #settings__file-hist-type":"changeHistoryMode","input #settings__file-hist-len":"changeHistoryLength","input #settings__file-hist-size":"changeHistorySize","change #settings__file-format-version":"changeFormatVersion","change #settings__file-kdf":"changeKdf","input #settings__file-key-rounds":"changeKeyRounds","input #settings__file-key-change-force":"changeKeyChangeForce","input .settings__input-kdf":"changeKdfParameter","change #settings__file-yubikey":"changeYubiKey"};const n=["syncing","syncError","syncDate"];for(const e of n)this.listenTo(this.model,"change:"+e,(()=>{setTimeout((()=>this.render()),0)}));this.refreshYubiKeys(!1)}render(){const e=[],t=this.model.storage;let n=!1;Object.keys(r.Storage).forEach((s=>{const i=r.Storage[s];!n&&i.backup&&i.enabled&&(n=!0),!i.system&&i.enabled&&e.push({name:i.name,icon:i.icon,own:s===t,backup:i.backup})})),e.sort(((e,t)=>(e.uipos||1/0)-(t.uipos||1/0)));const s=this.model.backup,i=this.model.chalResp?`${this.model.chalResp.serial}:${this.model.chalResp.slot}`:"",l=!!this.model.chalResp||a.Launcher&&h.AppSettingsModel.enableUsb&&h.AppSettingsModel.yubiKeyShowChalResp,c=[];if(l){for(const e of this.yubiKeys)for(const t of e.slots.filter((e=>e.valid)))c.push({value:`${e.serial}:${t.number}`,fullName:e.fullName,vid:e.vid,pid:e.pid,serial:e.serial,slot:t.number});i&&!c.some((e=>e.value===i))&&c.push({value:i,fullName:`YubiKey ${this.model.chalResp.serial}`,vid:this.model.chalResp.vid,pid:this.model.chalResp.pid,serial:this.model.chalResp.serial,slot:this.model.chalResp.slot})}super.render({cmd:o.Shortcuts.actionShortcutSymbol(!0),supportFiles:!!a.Launcher,desktopLink:d.Links.Desktop,name:this.model.name,path:this.model.path,storage:this.model.storage,syncing:this.model.syncing,syncError:this.model.syncError,syncDate:p.DateFormat.dtStr(this.model.syncDate),password:g.PasswordPresenter.present(this.model.passwordLength),defaultUser:this.model.defaultUser,recycleBinEnabled:this.model.recycleBinEnabled,backupEnabled:s&&s.enabled,backupStorage:s&&s.storage,backupPath:s&&s.path||_.replace("{name}",this.model.name),backupSchedule:s?s.schedule:"1w",historyMaxItems:this.model.historyMaxItems,historyMaxSize:Math.round(this.model.historyMaxSize/1024/1024),formatVersion:this.model.formatVersion,kdfName:this.model.kdfName,isArgon2Kdf:this.model.kdfName.startsWith("Argon2"),keyEncryptionRounds:this.model.keyEncryptionRounds,keyChangeForce:this.model.keyChangeForce>0?this.model.keyChangeForce:null,kdfParameters:this.kdfParametersToUi(this.model.kdfParameters),storageProviders:e,canBackup:n,canSaveTo:h.AppSettingsModel.canSaveTo,canExportXml:h.AppSettingsModel.canExportXml,canExportHtml:h.AppSettingsModel.canExportHtml,showYubiKeyBlock:l,selectedYubiKey:i,yubiKeys:c}),this.model.created||(this.$el.find(".settings__file-master-pass-warning").toggle(this.model.passwordChanged),this.$el.find("#settings__file-master-pass-warning-text").text(f.Locale.setFilePassChanged)),this.renderKeyFileSelect()}kdfParametersToUi(e){return e?Object.assign({},e,{memory:Math.round(e.memory/1024)}):null}renderKeyFileSelect(){const e=this.model.keyFileName,t=this.model.oldKeyFileName,n=this.model.keyFileChanged,s=this.$el.find("#settings__file-key-file");if(s.empty(),e&&n){const t="Generated"!==e?f.Locale.setFileUseKeyFile+" "+e:f.Locale.setFileUseGenKeyFile;C("<option/>").val("ex").text(t).appendTo(s)}if(t){const e=n?f.Locale.setFileUseOldKeyFile:f.Locale.setFileUseKeyFile+" "+t;C("<option/>").val("old").text(e).appendTo(s)}C("<option/>").val("gen").text(f.Locale.setFileGenKeyFile).appendTo(s),C("<option/>").val("none").text(f.Locale.setFileDontUseKeyFile).appendTo(s),e&&n?s.val("ex"):e?t&&e===t&&!n&&s.val("old"):s.val("none")}validatePassword(e){return!!this.model.passwordLength||(l.Alerts.yesno({header:f.Locale.setFileEmptyPass,body:f.Locale.setFileEmptyPassBody,success:()=>{e()},cancel:()=>{this.$el.find("#settings__file-master-pass").focus()}}),!1)}save(e){if(e||(e={}),e.startedByUser=!0,!e.skipValidation){if(!this.validatePassword((()=>{e.skipValidation=!0,this.save(e)})))return}this.appModel.syncFile(this.model,e)}saveDefault(){this.save()}toggleChooser(){this.$el.find(".settings__file-save-choose").toggleClass("hide")}saveToFile(e){if(!0!==e&&!this.validatePassword(this.saveToFile.bind(this,!0)))return;const t=this.model.name+".kdbx";a.Launcher&&!this.model.storage?a.Launcher.getSaveFileName(t,(e=>{e&&this.save({storage:"file",path:e})})):this.model.getData((e=>{if(e)if(a.Launcher)a.Launcher.getSaveFileName(t,(t=>{t&&r.Storage.file.save(t,null,e,(e=>{e&&l.Alerts.error({header:f.Locale.setFileSaveError,body:f.Locale.setFileSaveErrorBody+" "+t+":",pre:e})}))}));else{const n=new Blob([e],{type:"application/octet-stream"});y.FileSaver.saveAs(n,t)}}))}saveToXml(){l.Alerts.yesno({header:f.Locale.setFileExportRaw,body:f.Locale.setFileExportRawBody,success:()=>{this.model.getXml((e=>{const t=new Blob([e],{type:"text/xml"});y.FileSaver.saveAs(t,this.model.name+".xml")}))}})}saveToHtml(){l.Alerts.yesno({header:f.Locale.setFileExportRaw,body:f.Locale.setFileExportRawBody,success:()=>{this.model.getHtml((e=>{const t=new Blob([e],{type:"text/html"});y.FileSaver.saveAs(t,this.model.name+".html")}))}})}saveToStorage(e){if(this.model.syncing||this.model.demo)return;const t=C(e.target).closest(".settings__file-save-to-storage").data("storage"),n=r.Storage[t];if(n)if(this.model.storage===t)this.save();else{if(!n.list){if(n.getOpenConfig){const e=Object.assign({id:n.name,name:f.Locale[n.name]||n.name,icon:n.icon,buttons:!1},n.getOpenConfig()),s=new v.OpenConfigView(e);l.Alerts.alert({header:"",body:"",icon:n.icon||"file-alt",buttons:[l.Alerts.buttons.ok,l.Alerts.buttons.cancel],esc:"",opaque:!0,view:s,success:()=>{const e=s.getData();if(!e)return;const n=(0,b.omit)(e,["path","storage"]);n&&Object.keys(n).length&&(this.model.opts=n),this.save({storage:t,path:e.path,opts:n})}})}else l.Alerts.notImplemented();return}this.model.syncing=!0,n.list("",((e,s)=>{if(this.model.syncing=!1,e)return;const i=this.model.name.toLowerCase(),r=[...s].find((e=>!e.dir&&m.UrlFormat.getDataFileName(e.name).toLowerCase()===i));r?l.Alerts.yesno({header:f.Locale.setFileAlreadyExists,body:f.Locale.setFileAlreadyExistsBody.replace("{}",this.model.name),success:()=>{this.model.syncing=!0,n.remove(r.path,(e=>{this.model.syncing=!1,e||this.save({storage:t})}))}}):this.save({storage:t})}))}}closeFile(){this.model.modified?l.Alerts.yesno({header:f.Locale.setFileUnsaved,body:f.Locale.setFileUnsavedBody,buttons:[{result:"close",title:f.Locale.setFileCloseNoSave,error:!0},{result:"",title:f.Locale.setFileDontClose}],success:e=>{"close"===e&&this.closeFileNoCheck()}}):this.closeFileNoCheck()}closeFileNoCheck(){this.appModel.closeFile(this.model)}keyFileChange(e){switch(e.target.value){case"old":this.selectOldKeyFile();break;case"gen":this.generateKeyFile();break;case"none":this.clearKeyFile()}}selectOldKeyFile(){this.model.resetKeyFile(),this.renderKeyFileSelect()}generateKeyFile(){this.model.generateAndSetKeyFile().then((e=>{const t=new Blob([e],{type:"application/octet-stream"});y.FileSaver.saveAs(t,this.model.name+".key"),this.renderKeyFileSelect()}))}clearKeyFile(){this.model.removeKeyFile(),this.renderKeyFileSelect()}triggerSelectFile(){this.$el.find("#settings__file-file-select").click()}fileSelected(e){const t=e.target.files[0],n=new FileReader;n.onload=e=>{const n=e.target.result;this.model.setKeyFile(n,t.name),this.renderKeyFileSelect()},n.readAsArrayBuffer(t)}focusMasterPass(e){e.target.value="",e.target.setAttribute("type","text"),this.model.passwordChanged=!1}changeMasterPass(e){e.target.value?(this.$el.find("#settings__file-confirm-master-pass-group").show(),this.$el.find("#settings__file-master-pass-warning-text").text(f.Locale.setFilePassChange),this.model.created||this.$el.find(".settings__file-master-pass-warning").show()):(this.model.resetPassword(),this.$el.find(".settings__file-master-pass-warning").hide())}blurMasterPass(e){e.target.value||(this.model.resetPassword(),this.resetConfirmMasterPass(),e.target.value=g.PasswordPresenter.present(this.model.passwordLength),this.$el.find(".settings__file-master-pass-warning").hide()),e.target.setAttribute("type","password")}resetConfirmMasterPass(){this.$el.find("#settings__file-confirm-master-pass").val(""),this.$el.find("#settings__file-confirm-master-pass-group").hide(),this.$el.find("#settings__file-master-pass-warning-text").text(f.Locale.setFilePassChange)}focusConfirmMasterPass(e){e.target.value="",e.target.setAttribute("type","text")}blurConfirmMasterPass(e){e.target.setAttribute("type","password");const t=this.$el.find("#settings__file-master-pass").val(),n=e.target.value;t===n?(this.$el.find("#settings__file-master-pass-warning-text").text(f.Locale.setFilePassChanged),this.$el.find(".settings__file-confirm-master-pass-warning").hide(),this.model.setPassword(s.ProtectedValue.fromString(n))):(this.$el.find("#settings__file-master-pass-warning-text").text(f.Locale.setFilePassChange),this.$el.find(".settings__file-confirm-master-pass-warning").show(),this.model.resetPassword())}changeName(e){const t=C.trim(e.target.value);t&&this.model.setName(t)}changeDefUser(e){const t=C.trim(e.target.value);this.model.setDefaultUser(t)}changeBackupEnabled(e){const t=e.target.checked;let n=this.model.backup;if(!n){n={enabled:t,schedule:"1w"};const e=_.replace("{name}",this.model.name);a.Launcher?(n.storage="file",n.path=a.Launcher.getDocumentsPath(e)):(n.storage="dropbox",n.path=e),this.$el.find("#settings__file-backup-storage").val(n.storage),this.$el.find("#settings__file-backup-path").val(n.path)}this.$el.find(".settings__file-backups").toggleClass("hide",!t),n.enabled=t,this.setBackup(n)}changeBackupPath(e){const t=this.model.backup;t.path=e.target.value.trim(),this.setBackup(t)}changeBackupStorage(e){const t=this.model.backup;t.storage=e.target.value,this.setBackup(t)}changeBackupSchedule(e){const t=this.model.backup;t.schedule=e.target.value,this.setBackup(t)}setBackup(e){this.model.backup=e,this.appModel.setFileBackup(this.model.id,e)}backupFile(){if(this.backupInProgress)return;const e=this.$el.find(".settings__file-button-backup");e.text(f.Locale.setFileBackupNowWorking),this.model.getData((t=>{if(!t)return this.backupInProgress=!1,void e.text(f.Locale.setFileBackupNow);this.appModel.backupFile(this.model,t,(t=>{if(this.backupInProgress=!1,e.text(f.Locale.setFileBackupNow),t){let e="",n="";t.isDir?(e=f.Locale.setFileBackupErrorIsDir,n=f.Locale.setFileBackupErrorIsDirDescription):(e=f.Locale.setFileBackupError,n=f.Locale.setFileBackupErrorDescription),l.Alerts.error({title:e,body:n,pre:t.toString()})}}))}))}changeTrash(e){this.model.setRecycleBinEnabled(e.target.checked)}changeHistoryLength(e){if(!e.target.validity.valid)return;const t=+e.target.value;isNaN(t)?e.target.value=this.model.historyMaxItems:this.model.setHistoryMaxItems(t)}changeHistoryMode(e){let t=+e.target.value;t>0&&(t=10),this.model.setHistoryMaxItems(t),this.render()}changeHistorySize(e){if(!e.target.validity.valid)return;const t=+e.target.value;isNaN(t)?e.target.value=this.model.historyMaxSize/1024/1024:this.model.setHistoryMaxSize(1024*t*1024)}changeFormatVersion(e){const t=+e.target.value;this.model.setFormatVersion(t),this.render()}changeKdf(e){this.model.setKdf(e.target.value),this.render()}changeKeyRounds(e){if(!e.target.validity.valid)return;const t=+e.target.value;isNaN(t)?e.target.value=this.model.keyEncryptionRounds:this.model.setKeyEncryptionRounds(t)}changeKeyChangeForce(e){if(!e.target.validity.valid)return;let t=Math.round(e.target.value);(isNaN(t)||t<=0)&&(t=-1),this.model.setKeyChange(!0,t)}changeKdfParameter(e){if(!e.target.validity.valid)return;const t=C(e.target).data("field"),n=C(e.target).data("mul")||1,s=e.target.value*n;isNaN(s)?e.target.value=Math.round(this.model.kdfParameters[t]/n):s>0&&this.model.setKdfParameter(t,s)}refreshYubiKeys(e){a.Launcher&&h.AppSettingsModel.enableUsb&&h.AppSettingsModel.yubiKeyShowChalResp&&(u.UsbListener.attachedYubiKeys||this.yubiKeys.length&&(this.yubiKeys=[],this.render()),c.YubiKey.list(((t,n)=>{t||this.removed||(this.yubiKeys=n,this.render(),e&&u.UsbListener.attachedYubiKeys&&!n.length&&A.Features.isMac&&l.Alerts.error({body:f.Locale.setFileYubiKeyErrorEmptyMac}))})))}changeYubiKey(e){let t=null;const n=e.target.value;if("refresh"===n)return this.render(),void this.refreshYubiKeys(!0);if(n){const n=e.target.selectedOptions[0],s=+n.dataset.vid,i=+n.dataset.pid,r=+n.dataset.serial,o=+n.dataset.slot;t={vid:s,pid:i,serial:r,slot:o}}l.Alerts.yesno({header:f.Locale.setFileYubiKeyHeader,body:f.Locale.setFileYubiKeyBody,success:()=>{this.model.setChallengeResponse(t)},cancel:()=>{this.render()}})}}},9383:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsGeneralView:()=>I});var s=n(7201),i=n(7779),r=n(3898),o=n(949),a=n(7119),l=n(5621),c=n(9491),u=n(111),d=n(4530),h=n(9673),p=n(7614),m=n(2706),g=n(8146),f=n(667),A=n(6098),y=n(3297),v=n(3346),b=n(2416),w=n(6838),k=n(8180),C=n(3006),_=n(4026),E=n.n(_),x=n(6718);class I extends i.View{constructor(e,t){super(e,t),this.template=E(),this.events={"click .settings__general-theme":"changeTheme","click .settings__general-auto-switch-theme":"changeAuthSwitchTheme","change .settings__general-locale":"changeLocale","change .settings__general-font-size":"changeFontSize","change .settings__general-expand":"changeExpandGroups","change .settings__general-auto-update":"changeAutoUpdate","change .settings__general-idle-minutes":"changeIdleMinutes","change .settings__general-clipboard":"changeClipboard","change .settings__general-auto-save":"changeAutoSave","change .settings__general-auto-save-interval":"changeAutoSaveInterval","change .settings__general-remember-key-files":"changeRememberKeyFiles","change .settings__general-minimize":"changeMinimize","change .settings__general-minimize-on-field-copy":"changeMinimizeOnFieldCopy","change .settings__general-audit-passwords":"changeAuditPasswords","change .settings__general-audit-password-entropy":"changeAuditPasswordEntropy","change .settings__general-exclude-pins-from-audit":"changeExcludePinsFromAudit","change .settings__general-check-passwords-on-hibp":"changeCheckPasswordsOnHIBP","click .settings__general-toggle-help-hibp":"clickToggleHelpHIBP","change .settings__general-audit-password-age":"changeAuditPasswordAge","change .settings__general-lock-on-minimize":"changeLockOnMinimize","change .settings__general-lock-on-copy":"changeLockOnCopy","change .settings__general-lock-on-auto-type":"changeLockOnAutoType","change .settings__general-lock-on-os-lock":"changeLockOnOsLock","change .settings__general-table-view":"changeTableView","change .settings__general-colorful-icons":"changeColorfulIcons","change .settings__general-use-markdown":"changeUseMarkdown","change .settings__general-use-group-icon-for-entries":"changeUseGroupIconForEntries","change .settings__general-direct-autotype":"changeDirectAutotype","change .settings__general-autotype-title-filter":"changeAutoTypeTitleFilter","change .settings__general-field-label-dblclick-autotype":"changeFieldLabelDblClickAutoType","change .settings__general-device-owner-auth":"changeDeviceOwnerAuth","change .settings__general-device-owner-auth-timeout":"changeDeviceOwnerAuthTimeout","change .settings__general-titlebar-style":"changeTitlebarStyle","click .settings__general-update-btn":"checkUpdate","click .settings__general-restart-btn":"installUpdateAndRestart","click .settings__general-download-update-btn":"downloadUpdate","click .settings__general-update-found-btn":"installFoundUpdate","change .settings__general-disable-offline-storage":"changeDisableOfflineStorage","change .settings__general-short-lived-storage-token":"changeShortLivedStorageToken","change .settings__general-prv-check":"changeStorageEnabled","click .settings__general-prv-logout":"logoutFromStorage","click .settings__general-show-advanced":"showAdvancedSettings","click .settings__general-dev-tools-link":"openDevTools","click .settings__general-try-beta-link":"tryBeta","click .settings__general-show-logs-link":"showLogs","click .settings__general-reload-app-link":"reloadApp"},this.listenTo(m.UpdateModel,"change",this.render),this.listenTo(s.Events,"theme-applied",this.render)}render(){const e="ready"===m.UpdateModel.updateStatus,t="found"===m.UpdateModel.updateStatus,n=m.UpdateModel.updateManual,s=this.getStorageProviders();super.render({themes:this.getAllThemes(),autoSwitchTheme:p.AppSettingsModel.autoSwitchTheme,activeTheme:u.SettingsManager.activeTheme,locales:u.SettingsManager.allLocales,activeLocale:u.SettingsManager.activeLocale,fontSize:p.AppSettingsModel.fontSize,expandGroups:p.AppSettingsModel.expandGroups,canClearClipboard:!!c.Launcher,clipboardSeconds:p.AppSettingsModel.clipboardSeconds,rememberKeyFiles:p.AppSettingsModel.rememberKeyFiles,supportFiles:!!c.Launcher,autoSave:p.AppSettingsModel.autoSave,autoSaveInterval:p.AppSettingsModel.autoSaveInterval,idleMinutes:p.AppSettingsModel.idleMinutes,minimizeOnClose:p.AppSettingsModel.minimizeOnClose,minimizeOnFieldCopy:p.AppSettingsModel.minimizeOnFieldCopy,devTools:c.Launcher&&c.Launcher.devTools,canAutoUpdate:l.Updater.enabled,canAutoSaveOnClose:!!c.Launcher,canMinimize:!!c.Launcher,canDetectMinimize:!!c.Launcher,canDetectOsSleep:c.Launcher&&c.Launcher.canDetectOsSleep(),canAutoType:r.AutoType.enabled,auditPasswords:p.AppSettingsModel.auditPasswords,auditPasswordEntropy:p.AppSettingsModel.auditPasswordEntropy,excludePinsFromAudit:p.AppSettingsModel.excludePinsFromAudit,checkPasswordsOnHIBP:p.AppSettingsModel.checkPasswordsOnHIBP,auditPasswordAge:p.AppSettingsModel.auditPasswordAge,hibpLink:h.Links.HaveIBeenPwned,hibpPrivacyLink:h.Links.HaveIBeenPwnedPrivacy,lockOnMinimize:c.Launcher&&p.AppSettingsModel.lockOnMinimize,lockOnCopy:p.AppSettingsModel.lockOnCopy,lockOnAutoType:p.AppSettingsModel.lockOnAutoType,lockOnOsLock:p.AppSettingsModel.lockOnOsLock,tableView:p.AppSettingsModel.tableView,canSetTableView:!f.Features.isMobile,autoUpdate:l.Updater.getAutoUpdateType(),updateInProgress:l.Updater.updateInProgress(),updateInfo:this.getUpdateInfo(),updateWaitingReload:e&&!c.Launcher,showUpdateBlock:l.Updater.enabled&&!n,updateReady:e,updateFound:t,updateManual:n,releaseNotesLink:h.Links.ReleaseNotes,colorfulIcons:p.AppSettingsModel.colorfulIcons,useMarkdown:p.AppSettingsModel.useMarkdown,useGroupIconForEntries:p.AppSettingsModel.useGroupIconForEntries,directAutotype:p.AppSettingsModel.directAutotype,autoTypeTitleFilterEnabled:p.AppSettingsModel.autoTypeTitleFilterEnabled,fieldLabelDblClickAutoType:p.AppSettingsModel.fieldLabelDblClickAutoType,supportsTitleBarStyles:f.Features.supportsTitleBarStyles,supportsCustomTitleBarAndDraggableWindow:f.Features.supportsCustomTitleBarAndDraggableWindow,titlebarStyle:p.AppSettingsModel.titlebarStyle,storageProviders:s,showReloadApp:f.Features.isStandalone,hasDeviceOwnerAuth:f.Features.isDesktop&&f.Features.isMac,deviceOwnerAuth:p.AppSettingsModel.deviceOwnerAuth,deviceOwnerAuthTimeout:p.AppSettingsModel.deviceOwnerAuthTimeoutMinutes,disableOfflineStorage:p.AppSettingsModel.disableOfflineStorage,shortLivedStorageToken:p.AppSettingsModel.shortLivedStorageToken}),this.renderProviderViews(s)}renderProviderViews(e){e.forEach((function(e){if(this.views[e.name]&&this.views[e.name].remove(),e.hasConfig){const t=new b.SettingsPrvView(e,{parent:this.$el.find(".settings__general-"+e.name)[0]});this.views[e.name]=t,t.render()}}),this)}getUpdateInfo(){switch(m.UpdateModel.status){case"checking":return y.Locale.setGenUpdateChecking+"...";case"error":{let e=y.Locale.setGenErrorChecking;return m.UpdateModel.lastError&&(e+=": "+m.UpdateModel.lastError),m.UpdateModel.lastSuccessCheckDate&&(e+=". "+y.Locale.setGenLastCheckSuccess.replace("{}",A.DateFormat.dtStr(m.UpdateModel.lastSuccessCheckDate))+": "+y.Locale.setGenLastCheckVer.replace("{}",m.UpdateModel.lastVersion)),e}case"ok":{let e=y.Locale.setGenCheckedAt+" "+A.DateFormat.dtStr(m.UpdateModel.lastCheckDate)+": ";switch(e+=g.SemVer.compareVersions(a.RuntimeInfo.version,m.UpdateModel.lastVersion)>=0?y.Locale.setGenLatestVer:y.Locale.setGenNewVer.replace("{}",m.UpdateModel.lastVersion)+" "+A.DateFormat.dStr(m.UpdateModel.lastVersionReleaseDate),m.UpdateModel.updateStatus){case"downloading":return e+". "+y.Locale.setGenDownloadingUpdate;case"extracting":return e+". "+y.Locale.setGenExtractingUpdate;case"error":return e+". "+y.Locale.setGenCheckErr}return e}default:return y.Locale.setGenNeverChecked}}getStorageProviders(){const e=[];return Object.keys(o.Storage).forEach((t=>{const n=o.Storage[t];n.system||e.push(n)})),e.sort(((e,t)=>(e.uipos||1/0)-(t.uipos||1/0))),e.map((e=>({name:e.name,enabled:e.enabled,hasConfig:!!e.getSettingsConfig,loggedIn:e.loggedIn})))}getAllThemes(){const{autoSwitchTheme:e}=p.AppSettingsModel;if(e){const e={},t={};for(const n of u.SettingsManager.autoSwitchedThemes){t[n.dark]=!0,t[n.light]=!0;e[k.ThemeWatcher.dark?n.dark:n.light]=y.Locale[n.name]}for(const[n,s]of Object.entries(u.SettingsManager.allThemes))t[n]||(e[n]=y.Locale[s]);return e}return(0,w.mapObject)(u.SettingsManager.allThemes,(e=>y.Locale[e]))}changeTheme(e){const t=e.target.closest(".settings__general-theme").dataset.theme;if("..."===t)this.goToPlugins();else{p.AppSettingsModel.theme!==t?p.AppSettingsModel.theme=t:u.SettingsManager.setTheme(t)}}changeAuthSwitchTheme(e){const t=e.target.checked;p.AppSettingsModel.autoSwitchTheme=t,u.SettingsManager.darkModeChanged(),this.render()}changeLocale(e){const t=e.target.value;"..."===t?(e.target.value=p.AppSettingsModel.locale||"en-US",this.goToPlugins()):p.AppSettingsModel.locale=t}goToPlugins(){this.appModel.menu.select({item:this.appModel.menu.pluginsSection.items[0]})}changeFontSize(e){const t=+e.target.value;p.AppSettingsModel.fontSize=t}changeTitlebarStyle(e){const t=e.target.value;p.AppSettingsModel.titlebarStyle=t}changeClipboard(e){const t=+e.target.value;p.AppSettingsModel.clipboardSeconds=t}changeIdleMinutes(e){const t=+e.target.value;p.AppSettingsModel.idleMinutes=t}changeAutoUpdate(e){const t=e.target.value||!1;p.AppSettingsModel.autoUpdate=t,t&&l.Updater.scheduleNextCheck()}checkUpdate(){l.Updater.check(!0)}changeAutoSave(e){const t=e.target.checked||!1;p.AppSettingsModel.autoSave=t}changeAutoSaveInterval(e){const t=0|e.target.value;p.AppSettingsModel.autoSaveInterval=t}changeRememberKeyFiles(e){const t=e.target.value||!1;p.AppSettingsModel.rememberKeyFiles=t,this.appModel.clearStoredKeyFiles()}changeMinimize(e){const t=e.target.checked||!1;p.AppSettingsModel.minimizeOnClose=t}changeMinimizeOnFieldCopy(e){const t=e.target.checked||!1;p.AppSettingsModel.minimizeOnFieldCopy=t}changeAuditPasswords(e){const t=e.target.checked||!1;p.AppSettingsModel.auditPasswords=t}changeAuditPasswordEntropy(e){const t=e.target.checked||!1;p.AppSettingsModel.auditPasswordEntropy=t}changeExcludePinsFromAudit(e){const t=e.target.checked||!1;p.AppSettingsModel.excludePinsFromAudit=t}changeCheckPasswordsOnHIBP(e){if(e.target.closest("a"))return;const t=e.target.checked||!1;p.AppSettingsModel.checkPasswordsOnHIBP=t}clickToggleHelpHIBP(){this.el.querySelector(".settings__general-help-hibp").classList.toggle("hide")}changeAuditPasswordAge(e){const t=0|e.target.value;p.AppSettingsModel.auditPasswordAge=t}changeLockOnMinimize(e){const t=e.target.checked||!1;p.AppSettingsModel.lockOnMinimize=t}changeLockOnCopy(e){const t=e.target.checked||!1;p.AppSettingsModel.lockOnCopy=t}changeLockOnAutoType(e){const t=e.target.checked||!1;p.AppSettingsModel.lockOnAutoType=t}changeLockOnOsLock(e){const t=e.target.checked||!1;p.AppSettingsModel.lockOnOsLock=t}changeTableView(e){const t=e.target.checked||!1;p.AppSettingsModel.tableView=t,s.Events.emit("refresh")}changeColorfulIcons(e){const t=e.target.checked||!1;p.AppSettingsModel.colorfulIcons=t,s.Events.emit("refresh")}changeUseMarkdown(e){const t=e.target.checked||!1;p.AppSettingsModel.useMarkdown=t,s.Events.emit("refresh")}changeUseGroupIconForEntries(e){const t=e.target.checked||!1;p.AppSettingsModel.useGroupIconForEntries=t}changeDirectAutotype(e){const t=e.target.checked||!1;p.AppSettingsModel.directAutotype=t}changeAutoTypeTitleFilter(e){const t=e.target.checked||!1;p.AppSettingsModel.autoTypeTitleFilterEnabled=t}changeFieldLabelDblClickAutoType(e){const t=e.target.checked||!1;p.AppSettingsModel.fieldLabelDblClickAutoType=t,s.Events.emit("refresh")}changeDeviceOwnerAuth(e){const t=e.target.value||null;let n=0|p.AppSettingsModel.deviceOwnerAuthTimeoutMinutes;if(t){const e={memory:[30,10080],file:[30,525600]},[s,i]=e[t]||[0,0];n=(0,w.minmax)(n,s,i)}p.AppSettingsModel.set({deviceOwnerAuth:t,deviceOwnerAuthTimeoutMinutes:n}),this.render(),this.appModel.checkEncryptedPasswordsStorage(),t||C.NativeModules.hardwareCryptoDeleteKey().catch((()=>{}))}changeDeviceOwnerAuthTimeout(e){const t=0|e.target.value;p.AppSettingsModel.deviceOwnerAuthTimeoutMinutes=t}installUpdateAndRestart(){c.Launcher?l.Updater.installAndRestart():window.location.reload()}downloadUpdate(){c.Launcher.openLink(h.Links.Desktop)}installFoundUpdate(){l.Updater.update(!0,(()=>{l.Updater.installAndRestart()}))}changeExpandGroups(e){const t=e.target.checked;p.AppSettingsModel.expandGroups=t,s.Events.emit("refresh")}changeDisableOfflineStorage(e){const t=e.target.checked;p.AppSettingsModel.disableOfflineStorage=t,t&&this.appModel.deleteAllCachedFiles()}changeShortLivedStorageToken(e){const t=e.target.checked;if(p.AppSettingsModel.shortLivedStorageToken=t,t)for(const e of Object.values(o.Storage))e.deleteStoredToken()}changeStorageEnabled(e){const t=o.Storage[x(e.target).data("storage")];t&&(t.setEnabled(e.target.checked),p.AppSettingsModel[t.name]=t.enabled,this.$el.find(".settings__general-"+t.name).toggleClass("hide",!e.target.checked))}logoutFromStorage(e){const t=o.Storage[x(e.target).data("storage")];t&&(t.logout(),x(e.target).remove())}showAdvancedSettings(){this.$el.find(".settings__general-show-advanced, .settings__general-advanced").toggleClass("hide"),this.scrollToBottom()}openDevTools(){c.Launcher&&c.Launcher.openDevTools()}tryBeta(){this.appModel.files.hasUnsavedFiles()?d.Alerts.info({header:y.Locale.setGenTryBetaWarning,body:y.Locale.setGenTryBetaWarningBody}):location.href=h.Links.BetaWebApp}showLogs(){this.views.logView&&this.views.logView.remove(),this.views.logView=new v.SettingsLogsView,this.views.logView.render(),this.scrollToBottom()}reloadApp(){location.reload()}scrollToBottom(){this.$el.closest(".scroller").scrollTop(this.$el.height())}}},1426:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsHelpView:()=>c});var s=n(7779),i=n(7119),r=n(9673),o=n(9491),a=n(4113),l=n.n(a);class c extends s.View{constructor(...e){super(...e),this.template=l()}render(){const e="KeeWeb v"+i.RuntimeInfo.version+" ("+i.RuntimeInfo.commit+", "+i.RuntimeInfo.buildDate+")\nEnvironment: "+(o.Launcher?o.Launcher.name+" v"+o.Launcher.version:"web")+"\nUser-Agent: "+navigator.userAgent;super.render({issueLink:r.Links.Repo+"/issues/new?body="+encodeURIComponent("# please describe your issue here\n\n"+e),desktopLink:r.Links.Desktop,webAppLink:r.Links.WebApp,appInfo:e})}}},3346:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsLogsView:()=>l});var s=n(7779),i=n(2378),r=n(2363),o=n(7648),a=n.n(o);class l extends s.View{constructor(...e){super(...e),this.parent=".settings__general-advanced",this.template=a(),this.levelToColor={debug:"muted",warn:"yellow",error:"red"}}render(){const e=r.Logger.getLast().map((e=>({level:e.level,color:this.levelToColor[e.level],msg:"["+i.StringFormat.padStr(e.level.toUpperCase(),5)+"] "+e.args.map((e=>this.mapArg(e))).join(" ")})));super.render({logs:e})}mapArg(e){if(null===e)return"null";if(void 0===e)return"undefined";if(""===e)return'""';if(!e||!e.toString()||"object"!=typeof e)return e?e.toString():e;if(e instanceof Array)return"["+e.map((e=>this.mapArg(e))).join(", ")+"]";let t=e.toString();if("[object Object]"===t){const n=[];t=JSON.stringify(e,((e,t)=>{if("object"==typeof t&&null!==t){if(-1!==n.indexOf(t))return;n.push(t)}return t}))}return t}}},868:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsPluginsView:()=>b});var s=n(7779),i=n(7201),r=n(7119),o=n(9491),a=n(111),l=n(9673),c=n(7614),u=n(3172),d=n(739),h=n(8612),p=n(8146),m=n(667),g=n(6098),f=n(3297),A=n(4103),y=n.n(A),v=n(6718);class b extends s.View{constructor(e,t){super(e,t),this.template=y(),this.events={"click .settings_plugins-install-btn":"installClick","click .settings_plugins-uninstall-btn":"uninstallClick","click .settings_plugins-disable-btn":"disableClick","click .settings_plugins-enable-btn":"enableClick","click .settings_plugins-update-btn":"updateClick","click .settings_plugins-use-locale-btn":"useLocaleClick","click .settings_plugins-use-theme-btn":"useThemeClick","click .settings__plugins-gallery-plugin-install-btn":"galleryInstallClick","input .settings__plugins-gallery-search":"gallerySearchInput","change select.settings__plugins-plugin-input":"pluginSettingChange","change input[type=checkbox].settings__plugins-plugin-input":"pluginSettingChange","input input[type=text].settings__plugins-plugin-input":"pluginSettingChange","change .settings__plugins-plugin-updates":"autoUpdateChange","click .settings__plugins-gallery-load-btn":"loadPluginGalleryClick"},this.searchStr=null,this.installFromUrl=null,this.installing={},this.installErrors={},this.listenTo(d.PluginManager,"change",this.render.bind(this)),this.listenTo(i.Events,"plugin-gallery-load-complete",this.pluginGalleryLoadComplete.bind(this))}render(){super.render({plugins:d.PluginManager.plugins.map((e=>({id:e.id,manifest:e.manifest,status:e.status,installTime:Math.round(e.installTime),updateError:e.updateError,updateCheckDate:g.DateFormat.dtStr(e.updateCheckDate),installError:e.installError,official:e.official,autoUpdate:e.autoUpdate,settings:e.getSettings()}))).sort(h.Comparators.stringComparator("id",!0)),installingFromUrl:this.installFromUrl&&!this.installFromUrl.error,installUrl:this.installFromUrl?this.installFromUrl.url:null,installUrlError:this.installFromUrl?this.installFromUrl.error:null,galleryLoading:u.PluginGallery.loading,galleryLoadError:u.PluginGallery.loadError,galleryPlugins:this.getGalleryPlugins(),searchStr:this.searchStr,hasUnicodeFlags:m.Features.hasUnicodeFlags,pluginDevLink:l.Links.PluginDevelopStart,translateLink:l.Links.Translation}),this.searchStr&&this.showFilterResults()}pluginGalleryLoadComplete(){this.render(),i.Events.emit("page-geometry",{source:"view"})}getGalleryPlugins(){if(!u.PluginGallery.gallery)return null;const e=d.PluginManager.plugins;return u.PluginGallery.gallery.plugins.map((e=>({url:e.url,manifest:e.manifest,installing:this.installing[e.url],installError:this.installErrors[e.url],official:e.official}))).filter((t=>!e.get(t.manifest.name)&&this.canInstallPlugin(t))).sort(((e,t)=>e.manifest.name.localeCompare(t.manifest.name)))}canInstallPlugin(e){return(!e.manifest.locale||!a.SettingsManager.allLocales[e.manifest.locale.name])&&(!(e.manifest.desktop&&!o.Launcher)&&(!(e.manifest.versionMin&&p.SemVer.compareVersions(e.manifest.versionMin,r.RuntimeInfo.version)>0)&&!(e.manifest.versionMax&&p.SemVer.compareVersions(e.manifest.versionMax,r.RuntimeInfo.version)>0)))}loadPluginGalleryClick(){u.PluginGallery.loading||(u.PluginGallery.loadPlugins(),this.render())}installClick(){const e=this.$el.find(".settings_plugins-install-btn"),t=this.$el.find("#settings__plugins-install-url");this.$el.find(".settings__plugins-install-error").empty();const n=t.val().trim();n&&(t.prop("disabled",!0),e.text(f.Locale.setPlInstallBtnProgress+"...").prop("disabled",!0),this.installFromUrl={url:n},d.PluginManager.install(n,void 0,!0).then((()=>{this.installFinished(),this.installFromUrl=null,this.render(),this.$el.closest(".scroller").scrollTop(0)})).catch((e=>{this.installFinished(),this.installFromUrl.error=e,this.$el.find(".settings__plugins-install-error").text(e.toString()),this.$el.closest(".scroller").scrollTop(this.$el.height())})))}installFinished(){const e=this.$el.find(".settings_plugins-install-btn");this.$el.find("#settings__plugins-install-url").prop("disabled",!1),e.text(f.Locale.setPlInstallBtn).prop("disabled",!1)}uninstallClick(e){const t=v(e.target).data("plugin");d.PluginManager.uninstall(t)}disableClick(e){const t=v(e.target).data("plugin");d.PluginManager.disable(t)}enableClick(e){const t=v(e.target).data("plugin");d.PluginManager.activate(t)}updateClick(e){const t=v(e.target).data("plugin");d.PluginManager.update(t)}useLocaleClick(e){const t=v(e.target).data("locale");c.AppSettingsModel.locale=t}useThemeClick(e){const t=v(e.target).data("theme");c.AppSettingsModel.theme=t}galleryInstallClick(e){const t=v(e.target),n=t.data("plugin"),s=u.PluginGallery.gallery.plugins.find((e=>e.manifest.name===n));t.text(f.Locale.setPlInstallBtnProgress+"...").prop("disabled",!0),this.installing[s.url]=!0,delete this.installErrors[s.url],d.PluginManager.install(s.url,s.manifest).catch((e=>{this.installErrors[s.url]=e,delete this.installing[s.url],this.render()})).then((()=>{t.prop("disabled",!0),delete this.installing[s.url]}))}gallerySearchInput(e){this.searchStr=e.target.value.toLowerCase(),this.showFilterResults()}showFilterResults(){const e={};for(const t of u.PluginGallery.gallery.plugins)e[t.manifest.name]=t;for(const t of v(".settings__plugins-gallery-plugin",this.$el)){const n=t.dataset.plugin,s=this.pluginMatchesFilter(e[n]);v(t).toggle(s)}}pluginMatchesFilter(e){const t=this.searchStr,n=e.manifest;return!!(!t||n.name.toLowerCase().indexOf(t)>=0||n.description&&n.description.toLowerCase().indexOf(t)>=0||n.locale&&(n.locale.name.toLowerCase().indexOf(t)>=0||n.locale.title.toLowerCase().indexOf(t)>=0))}pluginSettingChange(e){const t=e.target,n=v(t).closest(".settings__plugins-plugin-setting"),s=n.data("setting"),i=n.data("plugin"),r="checkbox"===t.type?t.checked:t.value;d.PluginManager.getPlugin(i).setSettings({[s]:r})}autoUpdateChange(e){const t=v(e.target).data("plugin"),n=e.target.checked;d.PluginManager.setAutoUpdate(t,n)}}},2416:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsPrvView:()=>l});var s=n(7779),i=n(949),r=n(7306),o=n.n(r),a=n(6718);class l extends s.View{constructor(...e){super(...e),this.template=o(),this.events={"change .settings__general-prv-field-sel":"changeField","input .settings__general-prv-field-txt":"changeField","change .settings__general-prv-field-check":"changeCheckbox"}}render(){const e=i.Storage[this.model.name];e&&e.getSettingsConfig&&super.render(e.getSettingsConfig())}changeField(e){const t=e.target.dataset.id,n=e.target.value;if(n&&!e.target.checkValidity())return;i.Storage[this.model.name].applySetting(t,n),a(e.target).is("select")&&this.render()}changeCheckbox(e){const t=e.target.dataset.id,n=!!e.target.checked;i.Storage[this.model.name].applySetting(t,n)}}},1499:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsShortcutsView:()=>h});var s=n(7779),i=n(7027),r=n(9491),o=n(2977),a=n(667),l=n(3297),c=n(5473),u=n.n(c),d=n(6718);class h extends s.View{constructor(...e){super(...e),this.template=u(),this.systemShortcuts=["Meta+A","Alt+A","Alt+C","Alt+D","Meta+F","Meta+C","Meta+B","Meta+U","Meta+T","Alt+N","Meta+O","Meta+S","Meta+G","Meta+,","Meta+L"],this.events={"click button.shortcut":"shortcutClick"}}render(){super.render({cmd:i.Shortcuts.actionShortcutSymbol(!0),alt:i.Shortcuts.altShortcutSymbol(!0),globalIsLarge:!a.Features.isMac,autoTypeSupported:!!r.Launcher,globalShortcuts:r.Launcher?{autoType:i.Shortcuts.globalShortcutText("autoType",!0),copyPassword:i.Shortcuts.globalShortcutText("copyPassword",!0),copyUser:i.Shortcuts.globalShortcutText("copyUser",!0),copyUrl:i.Shortcuts.globalShortcutText("copyUrl",!0),copyOtp:i.Shortcuts.globalShortcutText("copyOtp",!0),restoreApp:i.Shortcuts.globalShortcutText("restoreApp",!0)}:void 0})}shortcutClick(e){const t=e.target.dataset.shortcut,n=d(`.shortcut__editor[data-shortcut=${t}]`);if(n.length)return void n.remove();const s=d("<div/>").addClass("shortcut__editor").attr("data-shortcut",t);d("<div/>").text(l.Locale.setShEdit).appendTo(s);const r=d("<input/>").addClass("shortcut__editor-input").val(i.Shortcuts.globalShortcutText(t)).appendTo(s);a.Features.isMac||r.addClass("shortcut__editor-input--large"),s.insertAfter(d(e.target).parent()),r.focus(),r.on("keypress",(e=>e.preventDefault())),r.on("keydown",(e=>{if(e.preventDefault(),e.stopImmediatePropagation(),e.which===o.Keys.DOM_VK_DELETE||e.which===o.Keys.DOM_VK_BACK_SPACE)return i.Shortcuts.setGlobalShortcut(t,void 0),void this.render();if(e.which===o.Keys.DOM_VK_ESCAPE)return void r.blur();const n=i.Shortcuts.keyEventToShortcut(e),s=i.Shortcuts.presentShortcut(n.value);r.val(s);const a=this.systemShortcuts.includes(n.text);r.toggleClass("input--error",a);n.valid&&!a&&(i.Shortcuts.setGlobalShortcut(t,n.value),this.render())}))}}},4199:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SettingsView:()=>u});var s=n(7779),i=n(7201),r=n(2977),o=n(7015),a=n(2378),l=n(1279),c=n.n(l);class u extends s.View{constructor(e,t){super(e,t),this.parent=".app__body",this.template=c(),this.events={"click .settings__back-button":"returnToApp"},this.initScroll(),this.listenTo(i.Events,"set-page",this.setPage),this.onKey(r.Keys.DOM_VK_ESCAPE,this.returnToApp)}render(){super.render(),this.createScroll({root:this.$el.find(".settings")[0],scroller:this.$el.find(".scroller")[0],bar:this.$el.find(".scroller__bar")[0]}),this.pageEl=this.$el.find(".scroller")}setPage(e){let{page:t,section:s,file:i}=e;"file"===t&&i&&"otp-device"===i.backend&&(t="file-otp-device");const r=n(4367)("./settings-"+t+"-view")[`Settings${a.StringFormat.pascalCase(t)}View`];this.views.page&&this.views.page.remove(),this.views.page=new r(i,{parent:this.pageEl[0]}),this.views.page.appModel=this.model,this.views.page.render(),this.file=i,this.page=t,this.pageResized(),this.scrollToSection(s)}scrollToSection(e){let t;e&&(t=this.views.page.el.querySelector(`#${e}`)),t||(t=this.views.page.el.querySelector("h1")),t&&t.scrollIntoView(!0)}returnToApp(){i.Events.emit("toggle-settings",!1)}}Object.assign(u.prototype,o.Scrollable)},4902:(e,t,n)=>{"use strict";n.r(t),n.d(t,{StorageFileListView:()=>l});var s=n(7779),i=n(4798),r=n(9132),o=n.n(r),a=n(6718);class l extends s.View{constructor(e){super(e),this.template=o(),this.events={"click .open-list__file":"fileClick","click .open-list__check-wrap":"showAllCheckClick","change #open-list__check":"showAllCheckChange"},this.allStorageFiles={},this.showHiddenFiles=!1}render(){let e=this.model.files.map((e=>(this.allStorageFiles[e.path]=e,{path:e.path,name:e.name.replace(/\.kdbx$/i,""),kdbx:i.UrlFormat.isKdbx(e.name),dir:e.dir})));const t=e.filter((e=>e.dir||e.kdbx)),n=t.length&&e.length>t.length;this.showHiddenFiles||t.length>0&&(e=t);const s=e.length>14?3:e.length>7?2:1;super.render({files:e,density:s,showHiddenFiles:this.showHiddenFiles,canShowHiddenFiles:n})}fileClick(e){const t=a(e.target).closest(".open-list__file").data("path"),n=this.allStorageFiles[t];this.emit("selected",n)}showAllCheckClick(e){e.stopPropagation()}showAllCheckChange(e){this.showHiddenFiles=e.target.checked,this.render()}}},9993:(e,t,n)=>{"use strict";n.r(t),n.d(t,{TagView:()=>u});var s=n(7201),i=n(7779),r=n(4530),o=n(3297),a=n(9057),l=n.n(a),c=n(6718);class u extends i.View{constructor(...e){super(...e),this.parent=".app__panel",this.template=l(),this.events={"click .tag__buttons-trash":"moveToTrash","click .back-button":"returnToApp","click .tag__btn-rename":"renameTag"}}render(){this.tag&&super.render({title:this.tag.title})}showTag(e){this.tag=e,this.render()}renameTag(){const e=c.trim(this.$el.find("#tag__field-title").val());e&&e!==this.tag.title&&(/[;,:]/.test(e)?r.Alerts.error({header:o.Locale.tagBadName,body:o.Locale.tagBadNameBody.replace("{}","`,`, `;`, `:`")}):this.model.tags.some((t=>t.toLowerCase()===e.toLowerCase()))?r.Alerts.error({header:o.Locale.tagExists,body:o.Locale.tagExistsBody}):(this.model.renameTag(this.tag.title,e),s.Events.emit("select-all")))}moveToTrash(){this.title=null,r.Alerts.yesno({header:o.Locale.tagTrashQuestion,body:o.Locale.tagTrashQuestionBody,success:()=>{this.model.renameTag(this.tag.title,void 0),s.Events.emit("select-all")}})}returnToApp(){s.Events.emit("edit-tag")}}},357:(e,t,n)=>{"use strict";n.r(t),n.d(t,{TitlebarView:()=>c});var s=n(7779),i=n(7201),r=n(9491),o=n(7086),a=n(1546),l=n.n(a);class c extends s.View{constructor(){super(),this.parent=".app__titlebar",this.template=l(),this.events={"click .titlebar__minimize":"clickMinimize","click .titlebar__maximize":"clickMaximize","click .titlebar__restore":"clickRestore","click .titlebar__close":"clickClose"},this.maximized=r.Launcher.mainWindowMaximized(),this.listenTo(i.Events,"app-maximized",this.appMaximized),this.listenTo(i.Events,"app-unmaximized",this.appUnmaximized)}render(){super.render({maximized:this.maximized,iconSrc:o.KeeWebLogo})}clickMinimize(){r.Launcher.minimizeMainWindow()}clickMaximize(){r.Launcher.maximizeMainWindow()}clickRestore(){r.Launcher.restoreMainWindow()}clickClose(){window.close()}appMaximized(){this.maximized=!0,this.render()}appUnmaximized(){this.maximized=!1,this.render()}}},4181:e=>{e.exports="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"},3e3:e=>{e.exports="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Sw0AGkFyIAEgACgCMCICQQN0SQ0AGiAAKAIoRQRAQXQPCyACRQRAQXAPC0FvIAJB////B0sNABogACgCNCIBRQRAQWQPC0FjIAFB////B0sNABogACgCQCEBAkAgACgCPARAIAENAUFpDwtBaCABDQEaC0EACw8LQW1BeiABGws4AQF/IwBBEGsiAiQAIAIgADYCDCACIAE2AgggAigCDEEAIAIoAghB2BcoAgARAAAaIAJBEGokAAvWAQEEfyMAQTBrIgIkAAJAIAAQHCIDDQBBZiEDIAFBAksNACAAKAIsIQQgACgCMCEDIAAoAjghBSACQQA2AgAgAiAFNgIEIAAoAighBSACIAM2AhggAiAFNgIIIAIgA0EDdCIFIAQgBCAFSRsgA0ECdCIFbiIENgIQIAIgBEECdDYCFCACIAQgBWw2AgwgACgCNCEEIAIgATYCICACIAQ2AhwgAyAESQRAIAIgAzYCHAsgAiAAED8iAw0AIAIQQyIDDQAgACACEEdBACEDCyACQTBqJAAgAwsnAQF/AkACQAJAAkAgAA4DAAECAwtByA4PC0HYDg8LQekOIQELIAELjwMBAX8jAEGAA2siBCQAIARBADYCjAEgBEGMAWogARAHAkAgAUHAAE0EQCAEQZABaiABEBhBAEgNASAEQZABaiAEQYwBakEEEAZBAEgNASAEQZABaiACIAMQBkEASA0BIARBkAFqIAAgARASGgwBCyAEQZABakHAABAYQQBIDQAgBEGQAWogBEGMAWpBBBAGQQBIDQAgBEGQAWogAiADEAZBAEgNACAEQZABaiAEQUBrQcAAEBJBAEgNACAAIAQpA0A3AAAgACAEKQNINwAIIAAgBCkDWDcAGCAAIAQpA1A3ABAgAEEgaiEAIAFBIGsiAkHBAE8EQANAIAQgBEFAa0HAABAFIgFBQGtBwAAgARAvQQBIDQIgACABKQNANwAAIAAgASkDSDcACCAAIAQpA1g3ABggACAEKQNQNwAQIABBIGohACACQSBrIgJBwABLDQALCyAEIARBQGtBwAAQBSIBQUBrIAIgARAvQQBIDQAgACABQUBrIAIQBRoLIARBkAFqQfABEAQgBEGAA2okAAsDAAELuwIAAkAgAUEUSw0AAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4KAAECAwQFBgcICQoLIAIg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ACAAIAMoAgwiBDYCMCAAIAQ2AjQgAS0AAEEkRw0AIAMgBzYCDCAAKAIQIANBDGogAUEBahArIgFFDQAgACADKAIMNgIUIAEtAABBJEcNACADIAY2AgwgACgCACADQQxqIAFBAWoQKyIBRQ0AIAAgAygCDDYCBCAAQQA2AkQgAEIANwI8IABCADcCGCAAQgA3AiAgABAcIgINACABLQAAIQAgA0EQaiQAQWBBACAAGw8LIANBEGokACACC2MBAn8jAEHQAGsiAiQAQWchAwJAIABFIAFFcg0AIAAgATYCKCABIAAgACgCDBBJIgMNACACIAEgACgCIBBAIAJBQGtBCBAEIAIgABBBIAJByAAQBEEAIQMLIAJB0ABqJAAgAwvqAwEBfyMAQYACayIDJAAgAEUgAUVyRQRAIANBEGpBwAAQGBogA0EMaiABKAIwEAcgA0EQaiADQQxqQQQQBhogA0EMaiABKAIEEAcgA0EQaiADQQxqQQQQBhogA0EMaiABKAIsEAcgA0EQaiADQQxqQQQQBhogA0EMaiABKAIoEAcgA0EQaiADQQxqQQQQBhogA0EMaiABKAI4EAcgA0EQaiADQQxqQQQQBhogA0EMaiACEAcgA0EQaiADQQxqQQQQBhogA0EMaiABKAIMEAcgA0EQaiADQQxqQQQQBhoCQCABKAIIIgJFDQAgA0EQaiACIAEoAgwQBhogAS0AREEBcUUNACABKAIIIAEoAgwQHSABQQA2AgwLIANBDGogASgCFBAHIANBEGogA0EMakEEEAYaIAEoAhAiAgRAIANBEGogAiABKAIUEAYaCyADQQxqIAEoAhwQByADQRBqIANBDGpBBBAGGgJAIAEoAhgiAkUNACADQRBqIAIgASgCHBAGGiABLQBEQQJxRQ0AIAEoAhggASgCHBAdIAFBADYCHAsgA0EMaiABKAIkEAcgA0EQaiADQQxqQQQQBhogASgCICICBEAgA0EQaiACIAEoAiQQBhoLIANBEGogAEHAABASGgsgA0GAAmokAAueAQEEfyMAQYAIayICJAAgASgCGARAIABBxABqIQUgAEFAayEEA0AgBEEAEAcgBSADEAcgAkGACCAAQcgAECAgASgCACABKAIUIANsQQp0aiACEC0gBEEBEAcgAkGACCAAQcgAECAgASgCACABKAIUIANsQQp0akGA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bABUaW1lIGNvc3QgaXMgdG9vIGxhcmdlAE1lbW9yeSBjb3N0IGlzIHRvbyBzbWFsbABNZW1vcnkgY29zdCBpcyB0b28gbGFyZ2UAVG9vIGZldyBsYW5lcwBUb28gbWFueSBsYW5lcwBQYXNzd29yZCBwb2ludGVyIGlzIE5VTEwsIGJ1dCBwYXNzd29yZCBsZW5ndGggaXMgbm90IDAAU2FsdCBwb2ludGVyIGlzIE5VTEwsIGJ1dCBzYWx0IGxlbmd0aCBpcyBub3QgMABTZWNyZXQgcG9pbnRlciBpcyBOVUxMLCBidXQgc2VjcmV0IGxlbmd0aCBpcyBub3QgMABBc3NvY2lhdGVkIGRhdGEgcG9pbnRlciBpcyBOVUxMLCBidXQgYWQgbGVuZ3RoIGlzIG5vdCAwAE1lbW9yeSBhbGxvY2F0aW9uIGVycm9yAFRoZSBmcmVlIG1lbW9yeSBjYWxsYmFjayBpcyBOVUxMAFRoZSBhbGxvY2F0ZSBtZW1vcnkgY2FsbGJhY2sgaXMgTlVMTABBcmdvbjJfQ29udGV4dCBjb250ZXh0IGlzIE5VTEwAVGhlcmUgaXMgbm8gc3VjaCB2ZXJzaW9uIG9mIEFyZ29uMgBPdXRwdXQgcG9pbnRlciBtaXNtYXRjaABOb3QgZW5vdWdoIHRocmVhZHMAVG9vIG1hbnkgdGhyZWFkcwBNaXNzaW5nIGFyZ3VtZW50cwBFbmNvZGluZyBmYWlsZWQARGVjb2RpbmcgZmFpbGVkAFRocmVhZGluZyBmYWlsdXJlAFNvbWUgb2YgZW5jb2RlZCBwYXJhbWV0ZXJzIGFyZSB0b28gbG9uZyBvciB0b28gc2hvcnQAVGhlIHBhc3N3b3JkIGRvZXMgbm90IG1hdGNoIHRoZSBzdXBwbGllZCBoYXNoAFVua25vd24gZXJyb3IgY29kZQAAAAAECwAAzwoAAL0KAACtCgAAnQoAAIsKAAB6CgAAZwoAAE8KAAAsCgAADQoAAOgJAADHCQAArwkAAHcJAABECQAAFQkAAN4IAADPCAAAwQgAAKgIAACPCAAAeAgAAGEIAABOCAAAOggAAB4IAAABCAAA8AcAAN4HAADJBwAAswcAAKAHAACMBwAAdQcAAHIHAAABAAAAJHY9ACRtPQAsdD0ALHA9ACVsdQBBlBgLAQIAQbsYCwX//////wBBgBkLEC0rICAgMFgweAAobnVsbCkAQaAZC0ERAAoAERERAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABEADwoREREDCgcAAQAJCwsAAAkGCwAACwAGEQAAABEREQBB8RkLIQsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwBBqxoLAQwAQbcaCxUMAAAAAAwAAAAACQwAAAAAAAwAAAwAQeUaCwEOAEHxGgsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGfGwsBEABBqxsLHg8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgBB4hsLDhIAAAASEhIAAAAAAAAJAEGTHAsBCwBBnxwLFQoAAAAACgAAAAAJCwAAAAAACwAACwBBzRwLAQwAQdkcCycMAAAAAAwAAAAACQwAAAAAAAwAAAwAADAxMjM0NTY3ODlBQkNERUYAQYAdCwEBAEGwHgsCmA8AQegeCwOgEVA="},1638:function(e){e.exports=function(){"use strict";var e=Object.hasOwnProperty,t=Object.setPrototypeOf,n=Object.isFrozen,s=Object.getPrototypeOf,i=Object.getOwnPropertyDescriptor,r=Object.freeze,o=Object.seal,a=Object.create,l="undefined"!=typeof Reflect&&Reflect,c=l.apply,u=l.construct;c||(c=function(e,t,n){return e.apply(t,n)}),r||(r=function(e){return e}),o||(o=function(e){return e}),u||(u=function(e,t){return new(Function.prototype.bind.apply(e,[null].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(t))))});var d,h=k(Array.prototype.forEach),p=k(Array.prototype.pop),m=k(Array.prototype.push),g=k(String.prototype.toLowerCase),f=k(String.prototype.match),A=k(String.prototype.replace),y=k(String.prototype.indexOf),v=k(String.prototype.trim),b=k(RegExp.prototype.test),w=(d=TypeError,function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return u(d,t)});function k(e){return function(t){for(var n=arguments.length,s=Array(n>1?n-1:0),i=1;i<n;i++)s[i-1]=arguments[i];return c(e,t,s)}}function C(e,s){t&&t(e,null);for(var i=s.length;i--;){var r=s[i];if("string"==typeof r){var o=g(r);o!==r&&(n(s)||(s[i]=o),r=o)}e[r]=!0}return e}function _(t){var n=a(null),s=void 0;for(s in t)c(e,t,[s])&&(n[s]=t[s]);return n}function E(e,t){for(;null!==e;){var n=i(e,t);if(n){if(n.get)return k(n.get);if("function"==typeof n.value)return k(n.value)}e=s(e)}return function(e){return console.warn("fallback value for",e),null}}var x=r(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),I=r(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),S=r(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),D=r(["animate","color-profile","cursor","discard","fedropshadow","feimage","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),B=r(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),P=r(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),T=r(["#text"]),F=r(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),M=r(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),O=r(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),L=r(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),N=o(/\{\{[\s\S]*|[\s\S]*\}\}/gm),R=o(/<%[\s\S]*|[\s\S]*%>/gm),K=o(/^data-[\-\w.\u00B7-\uFFFF]/),U=o(/^aria-[\-\w]+$/),Q=o(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),j=o(/^(?:\w+script|data):/i),G=o(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),H="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function V(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var z=function(){return"undefined"==typeof window?null:window},q=function(e,t){if("object"!==(void 0===e?"undefined":H(e))||"function"!=typeof e.createPolicy)return null;var n=null,s="data-tt-policy-suffix";t.currentScript&&t.currentScript.hasAttribute(s)&&(n=t.currentScript.getAttribute(s));var i="dompurify"+(n?"#"+n:"");try{return e.createPolicy(i,{createHTML:function(e){return e}})}catch(e){return console.warn("TrustedTypes policy "+i+" could not be created."),null}};return function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:z(),n=function(t){return e(t)};if(n.version="2.2.8",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;var s=t.document,i=t.document,o=t.DocumentFragment,a=t.HTMLTemplateElement,l=t.Node,c=t.Element,u=t.NodeFilter,d=t.NamedNodeMap,k=void 0===d?t.NamedNodeMap||t.MozNamedAttrMap:d,W=t.Text,Y=t.Comment,$=t.DOMParser,J=t.trustedTypes,X=c.prototype,Z=E(X,"cloneNode"),ee=E(X,"nextSibling"),te=E(X,"childNodes"),ne=E(X,"parentNode");if("function"==typeof a){var se=i.createElement("template");se.content&&se.content.ownerDocument&&(i=se.content.ownerDocument)}var ie=q(J,s),re=ie&&Le?ie.createHTML(""):"",oe=i,ae=oe.implementation,le=oe.createNodeIterator,ce=oe.createDocumentFragment,ue=s.importNode,de={};try{de=_(i).documentMode?i.documentMode:{}}catch(e){}var he={};n.isSupported="function"==typeof ne&&ae&&void 0!==ae.createHTMLDocument&&9!==de;var pe=N,me=R,ge=K,fe=U,Ae=j,ye=G,ve=Q,be=null,we=C({},[].concat(V(x),V(I),V(S),V(B),V(T))),ke=null,Ce=C({},[].concat(V(F),V(M),V(O),V(L))),_e=null,Ee=null,xe=!0,Ie=!0,Se=!1,De=!1,Be=!1,Pe=!1,Te=!1,Fe=!1,Me=!1,Oe=!0,Le=!1,Ne=!0,Re=!0,Ke=!1,Ue={},Qe=C({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),je=null,Ge=C({},["audio","video","img","source","image","track"]),He=null,Ve=C({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]),ze="http://www.w3.org/1998/Math/MathML",qe="http://www.w3.org/2000/svg",We="http://www.w3.org/1999/xhtml",Ye=We,$e=null,Je=i.createElement("form"),Xe=function(e){$e&&$e===e||(e&&"object"===(void 0===e?"undefined":H(e))||(e={}),e=_(e),be="ALLOWED_TAGS"in e?C({},e.ALLOWED_TAGS):we,ke="ALLOWED_ATTR"in e?C({},e.ALLOWED_ATTR):Ce,He="ADD_URI_SAFE_ATTR"in e?C(_(Ve),e.ADD_URI_SAFE_ATTR):Ve,je="ADD_DATA_URI_TAGS"in e?C(_(Ge),e.ADD_DATA_URI_TAGS):Ge,_e="FORBID_TAGS"in e?C({},e.FORBID_TAGS):{},Ee="FORBID_ATTR"in e?C({},e.FORBID_ATTR):{},Ue="USE_PROFILES"in e&&e.USE_PROFILES,xe=!1!==e.ALLOW_ARIA_ATTR,Ie=!1!==e.ALLOW_DATA_ATTR,Se=e.ALLOW_UNKNOWN_PROTOCOLS||!1,De=e.SAFE_FOR_TEMPLATES||!1,Be=e.WHOLE_DOCUMENT||!1,Fe=e.RETURN_DOM||!1,Me=e.RETURN_DOM_FRAGMENT||!1,Oe=!1!==e.RETURN_DOM_IMPORT,Le=e.RETURN_TRUSTED_TYPE||!1,Te=e.FORCE_BODY||!1,Ne=!1!==e.SANITIZE_DOM,Re=!1!==e.KEEP_CONTENT,Ke=e.IN_PLACE||!1,ve=e.ALLOWED_URI_REGEXP||ve,Ye=e.NAMESPACE||Ye,De&&(Ie=!1),Me&&(Fe=!0),Ue&&(be=C({},[].concat(V(T))),ke=[],!0===Ue.html&&(C(be,x),C(ke,F)),!0===Ue.svg&&(C(be,I),C(ke,M),C(ke,L)),!0===Ue.svgFilters&&(C(be,S),C(ke,M),C(ke,L)),!0===Ue.mathMl&&(C(be,B),C(ke,O),C(ke,L))),e.ADD_TAGS&&(be===we&&(be=_(be)),C(be,e.ADD_TAGS)),e.ADD_ATTR&&(ke===Ce&&(ke=_(ke)),C(ke,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&C(He,e.ADD_URI_SAFE_ATTR),Re&&(be["#text"]=!0),Be&&C(be,["html","head","body"]),be.table&&(C(be,["tbody"]),delete _e.tbody),r&&r(e),$e=e)},Ze=C({},["mi","mo","mn","ms","mtext"]),et=C({},["foreignobject","desc","title","annotation-xml"]),tt=C({},I);C(tt,S),C(tt,D);var nt=C({},B);C(nt,P);var st=function(e){var t=ne(e);t&&t.tagName||(t={namespaceURI:We,tagName:"template"});var n=g(e.tagName),s=g(t.tagName);if(e.namespaceURI===qe)return t.namespaceURI===We?"svg"===n:t.namespaceURI===ze?"svg"===n&&("annotation-xml"===s||Ze[s]):Boolean(tt[n]);if(e.namespaceURI===ze)return t.namespaceURI===We?"math"===n:t.namespaceURI===qe?"math"===n&&et[s]:Boolean(nt[n]);if(e.namespaceURI===We){if(t.namespaceURI===qe&&!et[s])return!1;if(t.namespaceURI===ze&&!Ze[s])return!1;var i=C({},["title","style","font","a","script"]);return!nt[n]&&(i[n]||!tt[n])}return!1},it=function(e){m(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=re}catch(t){e.remove()}}},rt=function(e,t){try{m(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){m(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!ke[e])if(Fe||Me)try{it(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ot=function(e){var t=void 0,n=void 0;if(Te)e="<remove></remove>"+e;else{var s=f(e,/^[\r\n\t ]+/);n=s&&s[0]}var r=ie?ie.createHTML(e):e;if(Ye===We)try{t=(new $).parseFromString(r,"text/html")}catch(e){}t&&t.documentElement||((t=ae.createDocument(Ye,"template",null)).documentElement.innerHTML=r);var o=t.body||t.documentElement;return e&&n&&o.insertBefore(i.createTextNode(n),o.childNodes[0]||null),Be?t.documentElement:o},at=function(e){return le.call(e.ownerDocument||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT,(function(){return u.FILTER_ACCEPT}),!1)},lt=function(e){return!(e instanceof W||e instanceof Y||"string"==typeof e.nodeName&&"string"==typeof e.textContent&&"function"==typeof e.removeChild&&e.attributes instanceof k&&"function"==typeof e.removeAttribute&&"function"==typeof e.setAttribute&&"string"==typeof e.namespaceURI&&"function"==typeof e.insertBefore)},ct=function(e){return"object"===(void 0===l?"undefined":H(l))?e instanceof l:e&&"object"===(void 0===e?"undefined":H(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},ut=function(e,t,s){he[e]&&h(he[e],(function(e){e.call(n,t,s,$e)}))},dt=function(e){var t=void 0;if(ut("beforeSanitizeElements",e,null),lt(e))return it(e),!0;if(f(e.nodeName,/[\u0080-\uFFFF]/))return it(e),!0;var s=g(e.nodeName);if(ut("uponSanitizeElement",e,{tagName:s,allowedTags:be}),!ct(e.firstElementChild)&&(!ct(e.content)||!ct(e.content.firstElementChild))&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return it(e),!0;if(!be[s]||_e[s]){if(Re&&!Qe[s]){var i=ne(e)||e.parentNode,r=te(e)||e.childNodes;if(r&&i)for(var o=r.length-1;o>=0;--o)i.insertBefore(Z(r[o],!0),ee(e))}return it(e),!0}return e instanceof c&&!st(e)?(it(e),!0):"noscript"!==s&&"noembed"!==s||!b(/<\/no(script|embed)/i,e.innerHTML)?(De&&3===e.nodeType&&(t=e.textContent,t=A(t,pe," "),t=A(t,me," "),e.textContent!==t&&(m(n.removed,{element:e.cloneNode()}),e.textContent=t)),ut("afterSanitizeElements",e,null),!1):(it(e),!0)},ht=function(e,t,n){if(Ne&&("id"===t||"name"===t)&&(n in i||n in Je))return!1;if(Ie&&b(ge,t));else if(xe&&b(fe,t));else{if(!ke[t]||Ee[t])return!1;if(He[t]);else if(b(ve,A(n,ye,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!je[e])if(Se&&!b(Ae,A(n,ye,"")));else if(n)return!1}return!0},pt=function(e){var t=void 0,s=void 0,i=void 0,r=void 0;ut("beforeSanitizeAttributes",e,null);var o=e.attributes;if(o){var a={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ke};for(r=o.length;r--;){var l=t=o[r],c=l.name,u=l.namespaceURI;if(s=v(t.value),i=g(c),a.attrName=i,a.attrValue=s,a.keepAttr=!0,a.forceKeepAttr=void 0,ut("uponSanitizeAttribute",e,a),s=a.attrValue,!a.forceKeepAttr&&(rt(c,e),a.keepAttr))if(b(/\/>/i,s))rt(c,e);else{De&&(s=A(s,pe," "),s=A(s,me," "));var d=e.nodeName.toLowerCase();if(ht(d,i,s))try{u?e.setAttributeNS(u,c,s):e.setAttribute(c,s),p(n.removed)}catch(e){}}}ut("afterSanitizeAttributes",e,null)}},mt=function e(t){var n=void 0,s=at(t);for(ut("beforeSanitizeShadowDOM",t,null);n=s.nextNode();)ut("uponSanitizeShadowNode",n,null),dt(n)||(n.content instanceof o&&e(n.content),pt(n));ut("afterSanitizeShadowDOM",t,null)};return n.sanitize=function(e,i){var r=void 0,a=void 0,c=void 0,u=void 0,d=void 0;if(e||(e="\x3c!--\x3e"),"string"!=typeof e&&!ct(e)){if("function"!=typeof e.toString)throw w("toString is not a function");if("string"!=typeof(e=e.toString()))throw w("dirty is not a string, aborting")}if(!n.isSupported){if("object"===H(t.toStaticHTML)||"function"==typeof t.toStaticHTML){if("string"==typeof e)return t.toStaticHTML(e);if(ct(e))return t.toStaticHTML(e.outerHTML)}return e}if(Pe||Xe(i),n.removed=[],"string"==typeof e&&(Ke=!1),Ke);else if(e instanceof l)1===(a=(r=ot("\x3c!----\x3e")).ownerDocument.importNode(e,!0)).nodeType&&"BODY"===a.nodeName||"HTML"===a.nodeName?r=a:r.appendChild(a);else{if(!Fe&&!De&&!Be&&-1===e.indexOf("<"))return ie&&Le?ie.createHTML(e):e;if(!(r=ot(e)))return Fe?null:re}r&&Te&&it(r.firstChild);for(var h=at(Ke?e:r);c=h.nextNode();)3===c.nodeType&&c===u||dt(c)||(c.content instanceof o&&mt(c.content),pt(c),u=c);if(u=null,Ke)return e;if(Fe){if(Me)for(d=ce.call(r.ownerDocument);r.firstChild;)d.appendChild(r.firstChild);else d=r;return Oe&&(d=ue.call(s,d,!0)),d}var p=Be?r.outerHTML:r.innerHTML;return De&&(p=A(p,pe," "),p=A(p,me," ")),ie&&Le?ie.createHTML(p):p},n.setConfig=function(e){Xe(e),Pe=!0},n.clearConfig=function(){$e=null,Pe=!1},n.isValidAttribute=function(e,t,n){$e||Xe({});var s=g(e),i=g(t);return ht(s,i,n)},n.addHook=function(e,t){"function"==typeof t&&(he[e]=he[e]||[],m(he[e],t))},n.removeHook=function(e){he[e]&&p(he[e])},n.removeHooks=function(e){he[e]&&(he[e]=[])},n.removeAllHooks=function(){he={}},n}()}()},7187:e=>{"use strict";var t,n="object"==typeof Reflect?Reflect:null,s=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var i=Number.isNaN||function(e){return e!=e};function r(){r.init.call(this)}e.exports=r,e.exports.once=function(e,t){return new Promise((function(n,s){function i(){void 0!==r&&e.removeListener("error",r),n([].slice.call(arguments))}var r;"error"!==t&&(r=function(n){e.removeListener(t,i),s(n)},e.once("error",r)),e.once(t,i)}))},r.EventEmitter=r,r.prototype._events=void 0,r.prototype._eventsCount=0,r.prototype._maxListeners=void 0;var o=10;function a(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?r.defaultMaxListeners:e._maxListeners}function c(e,t,n,s){var i,r,o,c;if(a(n),void 0===(r=e._events)?(r=e._events=Object.create(null),e._eventsCount=0):(void 0!==r.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),r=e._events),o=r[t]),void 0===o)o=r[t]=n,++e._eventsCount;else if("function"==typeof o?o=r[t]=s?[n,o]:[o,n]:s?o.unshift(n):o.push(n),(i=l(e))>0&&o.length>i&&!o.warned){o.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=e,u.type=t,u.count=o.length,c=u,console&&console.warn&&console.warn(c)}return e}function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,n){var s={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=u.bind(s);return i.listener=n,s.wrapFn=i,i}function h(e,t,n){var s=e._events;if(void 0===s)return[];var i=s[t];return void 0===i?[]:"function"==typeof i?n?[i.listener||i]:[i]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(i):m(i,i.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function m(e,t){for(var n=new Array(t),s=0;s<t;++s)n[s]=e[s];return n}Object.defineProperty(r,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(e){if("number"!=typeof e||e<0||i(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");o=e}}),r.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},r.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||i(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},r.prototype.getMaxListeners=function(){return l(this)},r.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var i="error"===e,r=this._events;if(void 0!==r)i=i&&void 0===r.error;else if(!i)return!1;if(i){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var l=r[e];if(void 0===l)return!1;if("function"==typeof l)s(l,this,t);else{var c=l.length,u=m(l,c);for(n=0;n<c;++n)s(u[n],this,t)}return!0},r.prototype.addListener=function(e,t){return c(this,e,t,!1)},r.prototype.on=r.prototype.addListener,r.prototype.prependListener=function(e,t){return c(this,e,t,!0)},r.prototype.once=function(e,t){return a(t),this.on(e,d(this,e,t)),this},r.prototype.prependOnceListener=function(e,t){return a(t),this.prependListener(e,d(this,e,t)),this},r.prototype.removeListener=function(e,t){var n,s,i,r,o;if(a(t),void 0===(s=this._events))return this;if(void 0===(n=s[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete s[e],s.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(i=-1,r=n.length-1;r>=0;r--)if(n[r]===t||n[r].listener===t){o=n[r].listener,i=r;break}if(i<0)return this;0===i?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,i),1===n.length&&(s[e]=n[0]),void 0!==s.removeListener&&this.emit("removeListener",e,o||t)}return this},r.prototype.off=r.prototype.removeListener,r.prototype.removeAllListeners=function(e){var t,n,s;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var i,r=Object.keys(n);for(s=0;s<r.length;++s)"removeListener"!==(i=r[s])&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(s=t.length-1;s>=0;s--)this.removeListener(e,t[s]);return this},r.prototype.listeners=function(e){return h(this,e,!0)},r.prototype.rawListeners=function(e){return h(this,e,!1)},r.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},r.prototype.listenerCount=p,r.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},9839:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var s=n(9839);!function(e){var t=e.babelHelpers={};t.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t.defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},t.slicedToArray=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],s=!0,i=!1,r=void 0;try{for(var o,a=e[Symbol.iterator]();!(s=(o=a.next()).done)&&(n.push(o.value),!t||n.length!==t);s=!0);}catch(e){i=!0,r=e}finally{try{!s&&a.return&&a.return()}finally{if(i)throw r}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},t.toConsumableArray=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}}(void 0===n.g?self:n.g);const i=s},4062:(e,t,n)=>{var s=n(7109);e.exports=(s.default||s).template({1:function(e,t,n,s,i){var r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="app__beta"><i class="fa fa-exclamation-triangle"></i> '+e.escapeExpression(r(n,"res").call(null!=t?t:e.nullContext||{},"appBeta",{name:"res",hash:{},data:i,loc:{start:{line:2,column:78},end:{line:2,column:95}}}))+"</div>"},3:function(e,t,n,s,i){return'<div class="app__titlebar"></div>\n'},5:function(e,t,n,s,i){var r,o=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return(null!=(r=o(n,"ifeq").call(null!=t?t:e.nullContext||{},null!=t?o(t,"titlebarStyle"):t,"hidden",{name:"ifeq",hash:{},fn:e.program(6,i,0),inverse:e.noop,data:i,loc:{start:{line:6,column:0},end:{line:6,column:79}}}))?r:"")+"\n"},6:function(e,t,n,s,i){return'<div class="app__titlebar-drag"></div>'},compiler:[8,">= 4.3.0"],main:function(e,t,n,s,i){var r,o=null!=t?t:e.nullContext||{},a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="app">\n'+(null!=(r=a(n,"if").call(o,null!=t?a(t,"beta"):t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i,loc:{start:{line:2,column:0},end:{line:2,column:108}}}))?r:"")+"\n"+(null!=(r=a(n,"if").call(o,null!=t?a(t,"customTitlebar"):t,{name:"if",hash:{},fn:e.program(3,i,0),inverse:e.program(5,i,0),data:i,loc:{start:{line:3,column:0},end:{line:7,column:7}}}))?r:"")+'<div class="app__body">\n<div class="app__menu"></div>\n<div class="app__menu-drag"></div>\n<div class="app__list-wrap">\n<div class="app__list"></div>\n<div class="app__list-drag"></div>\n<div class="app__details"></div>\n</div>\n<div class="app__panel hide"></div>\n</div>\n<div class="app__footer"></div>\n</div>\n'},useData:!0})},7410:(e,t,n)=>{var s=n(7109);e.exports=(s.default||s).template({1:function(e,t,n,s,i){return"<a>^^ (ctrl)</a>"},compiler:[8,">= 4.3.0"],main:function(e,t,n,s,i){var r,o,a=null!=t?t:e.nullContext||{},l=e.hooks.helperMissing,c="function",u=e.escapeExpression,d=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="auto-type-hint">\n<div class="auto-type-hint__body">\n<a href="'+u(typeof(o=null!=(o=d(n,"link")||(null!=t?d(t,"link"):t))?o:l)===c?o.call(a,{name:"link",hash:{},data:i,loc:{start:{line:3,column:9},end:{line:3,column:17}}}):o)+'" class="auto-type-hint__link-details" target="_blank">'+u(d(n,"res").call(a,"autoTypeLink",{name:"res",hash:{},data:i,loc:{start:{line:3,column:72},end:{line:3,column:94}}}))+'</a>\n<div class="auto-type-hint__block">\n<div>'+u(d(n,"res").call(a,"autoTypeEntryFields",{name:"res",hash:{},data:i,loc:{start:{line:5,column:5},end:{line:5,column:34}}}))+':</div>\n<a>{TITLE}</a><a>{USERNAME}</a><a>{URL}</a><a>{PASSWORD}</a><a>{NOTES}</a><a>{GROUP}</a>\n<a>{TOTP}</a><a>{S:Custom Field Name}</a>\n</div>\n<div class="auto-type-hint__block">\n<div>'+u(d(n,"res").call(a,"autoTypeModifiers",{name:"res",hash:{},data:i,loc:{start:{line:10,column:5},end:{line:10,column:32}}}))+":</div>\n<a>+ (shift)</a><a>% (alt)</a><a>^ ("+u(typeof(o=null!=(o=d(n,"cmd")||(null!=t?d(t,"cmd"):t))?o:l)===c?o.call(a,{name:"cmd",hash:{},data:i,loc:{start:{line:11,column:36},end:{line:11,column:43}}}):o)+")</a>"+(null!=(r=d(n,"if").call(a,null!=t?d(t,"hasCtrl"):t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i,loc:{start:{line:11,column:48},end:{line:11,column:86}}}))?r:"")+'\n</div>\n<div class="auto-type-hint__block">\n<div>'+u(d(n,"res").call(a,"autoTypeKeys",{name:"res",hash:{},data:i,loc:{start:{line:14,column:5},end:{line:14,column:27}}}))+":</div>\n<a>{TAB}</a><a>{ENTER}</a><a>{SPACE}</a><a>{UP}</a><a>{DOWN}</a><a>{LEFT}</a><a>{RIGHT}</a><a>{HOME}</a><a>{END}</a>\n<a>{+}</a><a>{%}</a><a>{^}</a><a>{~}</a><a>{(}</a><a>{)}</a><a>{[}</a><a>{]}</a><a>{{}</a><a>{}}</a>\n</div>\n</div>\n</div>\n"},useData:!0})},617:(e,t,n)=>{var s=n(7109);e.exports=(s.default||s).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,s,i){var r=null!=t?t:e.nullContext||{},o=e.escapeExpression,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="details__field details__field--editable details__field--no-select">\n<div class="details__field-label">'+o(a(n,"res").call(r,"detMore",{name:"res",hash:{},data:i,loc:{start:{line:2,column:34},end:{line:2,column:51}}}))+'…</div>\n<div class="details__field-value">\n<div class="details__field-value-add-label">'+o(a(n,"res").call(r,"detClickToAddField",{name:"res",hash:{},data:i,loc:{start:{line:4,column:44},end:{line:4,column:72}}}))+"</div>\n</div>\n</div>\n"},useData:!0})},3388:(e,t,n)=>{var s=n(7109);e.exports=(s.default||s).template({1:function(e,t,n,s,i){var r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="details__attachment-preview-buttons">\n<button class="btn-silent details__attachment-preview-download-btn">'+e.escapeExpression(r(n,"res").call(null!=t?t:e.nullContext||{},"detAttSave",{name:"res",hash:{},data:i,loc:{start:{line:9,column:68},end:{line:9,column:88}}}))+"</button>\n</div>\n"},3:function(e,t,n,s,i){var r=null!=t?t:e.nullContext||{},o=e.escapeExpression,a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="details__attachment-preview-download-text">'+o(a(n,"res").call(r,"detAttDownload",{name:"res",hash:{},data:i,loc:{start:{line:12,column:55},end:{line:12,column:79}}}))+'\n <span class="details__attachment-preview-download-text-shortcut"></span>'+o(a(n,"res").call(r,"detAttDelToRemove",{name:"res",hash:{},data:i,loc:{start:{line:13,column:78},end:{line:13,column:105}}}))+"</div>\n"},compiler:[8,">= 4.3.0"],main:function(e,t,n,s,i){var r,o=null!=t?t:e.nullContext||{},a=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="details__attachment-preview">\n<div class="details__subview-close">\n<i class="fa fa-chevron-left details__subview-close-pre"></i>'+e.escapeExpression(a(n,"res").call(o,"detHistoryReturn",{name:"res",hash:{},data:i,loc:{start:{line:3,column:61},end:{line:3,column:87}}}))+' <i class="fa fa-arrow-circle-left details__subview-close-post"></i>\n</div>\n<div class="details__attachment-preview-data"></div>\n<i class="fa details__attachment-preview-icon"></i>\n'+(null!=(r=a(n,"if").call(o,null!=t?a(t,"isMobile"):t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.program(3,i,0),data:i,loc:{start:{line:7,column:0},end:{line:14,column:7}}}))?r:"")+"</div>\n"},useData:!0})},1443:(e,t,n)=>{var s=n(7109);e.exports=(s.default||s).template({1:function(e,t,n,s,i){return"checked"},compiler:[8,">= 4.3.0"],main:function(e,t,n,s,i){var r,o,a=null!=t?t:e.nullContext||{},l=e.escapeExpression,c=e.hooks.helperMissing,u="function",d=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};retu |