diff --git a/web/public_html/transmission-app.js b/web/public_html/transmission-app.js index 4f9279d1d..d2b1da4ff 100644 --- a/web/public_html/transmission-app.js +++ b/web/public_html/transmission-app.js @@ -1,3 +1,3 @@ /*! For license information please see transmission-app.js.LICENSE.txt */ -(()=>{var e={844:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Y});var r=n(537),o=n.n(r),s=n(645),i=n.n(s),a=n(667),l=n.n(a),c=new URL(n(986),n.b),d=new URL(n(75),n.b),A=new URL(n(726),n.b),p=new URL(n(989),n.b),g=new URL(n(121),n.b),u=new URL(n(409),n.b),m=new URL(n(403),n.b),h=new URL(n(404),n.b),C=new URL(n(900),n.b),b=new URL(n(101),n.b),f=new URL(n(648),n.b),v=new URL(n(202),n.b),y=new URL(n(444),n.b),x=new URL(n(757),n.b),k=new URL(n(598),n.b),w=new URL(n(496),n.b),E=new URL(n(355),n.b),I=new URL(n(416),n.b),B=new URL(n(302),n.b),_=new URL(n(246),n.b),S=i()(o()),D=l()(c),T=l()(d),L=l()(A),M=l()(p),P=l()(g),z=l()(u),F=l()(m),N=l()(h),R=l()(C),G=l()(b),j=l()(f),U=l()(v),H=l()(y),W=l()(x),$=l()(k),Z=l()(w),O=l()(E),Q=l()(I),J=l()(B),q=l()(_);S.push([e.id,':root{--color-fg-error: #d73a49;--color-fg-port-closed: #d73a49;--color-fg-port-open: #28a745;--color-progressbar-background-2: #828282;--color-progressbar-verify-1: #f692ce;--color-progressbar-verify-2: #b93a86;--color-progressbar-magnet-1: #ffea7f;--color-progressbar-magnet-2: #dbab09;--color-progressbar-magnet-paused-1: #fff8c5;--color-progressbar-magnet-paused-2: #828282;--color-progressbar-leech-paused-1: #c8e1ff;--color-progressbar-leech-paused-2: #828282;--color-progressbar-leech-queued-1: #dbedff;--color-progressbar-leech-queued-2: #79b8ff;--color-progressbar-leech-1: #79b8ff;--color-progressbar-leech-2: #044289;--color-progressbar-seed-paused-1: #bef5cb;--color-progressbar-seed-paused-2: #828282;--color-progressbar-seed-queued-1: #dcffe4;--color-progressbar-seed-queued-2: #85e89d;--color-progressbar-seed-1: #85e89d;--color-progressbar-seed-2: #176f2c;color-scheme:light dark}@media(prefers-color-scheme: dark){:root{--color-bg-hover: #f8f8f8;--color-fg-primary: #fff;--color-bg-primary: #292929;--color-bg-odd: #191919;--color-bg-even: #292929;--color-bg-menu: #292929;--color-fg-secondary: #f8f8f8;--color-fg-on-popup: #f8f8f8;--color-fg-disabled: #f8f8f8;--color-bg-popup: #292929;--color-bg-warn: #cf6679;--color-fg-warn: #121212;--color-border: #f8f8f8;--color-border-selected: #d0d7de;--color-fg-tertiary: #828282;--color-toolbar-background: #292929;--color-inspector-background: #292929;--color-inspector-tabs: #f8f8f8;--color-bg-selected: #2e2e2e;--color-bg-tabs: #373737;--color-progressbar-background-1: #426389;--color-default-border: #575757}}@media(prefers-color-scheme: light){:root{--color-bg-hover: #f8f8f8;--color-fg-primary: #404040;--color-bg-primary: #fff;--color-bg-even: #fff;--color-bg-odd: #f8f8f8;--color-bg-menu: #f8f8f8;--color-fg-on-popup: #191919;--color-bg-popup: #fff;--color-fg-secondary: #828282;--color-border: #828282;--color-border-selected: #d0d7de;--color-fg-tertiary: #828282;--color-bg-warn: #e4606d5b;--color-fg-warn: #cf212e;--color-fg-disabled: #828282;--color-toolbar-background: #f8f8f8;--color-inspector-background: #fff;--color-bg-tabs: #f0f0f0;--color-inspector-tabs: #f8f8f8;--color-bg-selected: #fff8c5;--color-progressbar-background-1: #f8f8f8;--color-default-border: #aeaeae;--color-dialog-border: #f8f8f8}}html,body{color:var(--color-fg-primary);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";height:100%;margin:0}img{border:0}a{color:var(--color-fg-primary);outline:0;text-decoration:underline}.hidden{display:none}.even{background-color:var(--color-bg-even)}.odd{background-color:var(--color-bg-odd)}.mainwin{display:flex;flex-direction:column;height:100%;position:relative}.mainwin>*{margin:0;padding:0}.mainwin-workarea{display:flex;flex:1;flex-direction:row;overflow:auto}input{border:1px solid var(--color-border);border-radius:3px;padding:4px 5px}#mainwin-toolbar{align-items:center;background:var(--color-toolbar-background);border-bottom:1px solid var(--color-default-border);display:flex;flex-direction:row;height:50px;margin:0;width:100%}#mainwin-toolbar button{background-color:rgba(0,0,0,0);background-position:center;background-repeat:no-repeat;border:0;border-radius:5px;cursor:pointer;height:50px;margin-right:6px;user-select:none;width:50px}#mainwin-toolbar button svg{stroke:var(--color-fg-primary)}#mainwin-toolbar button:disabled{cursor:default;opacity:.25}#mainwin-toolbar>.toolbar-separator{border-left:1px solid var(--color-default-border);height:25px;margin:0 6px 0 0}#mainwin-toolbar :nth-last-child(2){border:0;flex-grow:1}.toolbar-icon{stroke:var(--color-fg-primary)}#toolbar-inspector svg{color:var(--color-fg-primary)}#toolbar-overflow{margin-right:4px}#toolbar-overflow svg{fill:var(--color-fg-primary);height:36px;width:36px}#toolbar-overflow.alt-speed-enabled{background-image:url('+D+");background-position:bottom left;background-size:20px}.mainwin-filterbar{align-items:center;background:var(--color-toolbar-background);border-bottom:1px solid var(--color-default-border);display:flex;flex-direction:row;height:30px;width:100%}@media(max-width: 599px){.mainwin-filterbar{padding:5px 10px}.mainwin-filterbar :not(select):not(input){display:none}.mainwin-filterbar #torrent-search{padding:5px}}.mainwin-filterbar>*{margin-right:5px;padding:0 5px}.speed-up-icon{background-image:url("+T+");background-repeat:no-repeat;background-size:12px 12px;height:12px;width:12px}.speed-dn-icon{background-image:url("+L+");background-repeat:no-repeat;background-size:12px 12px;height:12px;width:12px}.flex{flex-grow:1}#torrent-container{flex-grow:1;left:0;margin:0;overflow:auto;-webkit-overflow-scrolling:touch;padding:0;right:0}.torrent-container{background-color:#fff}.torrent-list{cursor:pointer;list-style-type:none;margin:0;padding:0;text-align:left;width:100%}.torrent-list .torrent{border-bottom:1px solid var(--color-default-border);user-select:none}.torrent-list .torrent .icon{background-color:var(--color-fg-primary);background-position:center,top left}.torrent-list .torrent .icon[data-icon-mime-type=audio]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+M+");mask-image:url("+M+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=audio][data-icon-multifile=true]{-webkit-mask-image:url("+M+"),url("+P+");mask-image:url("+M+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=application]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+z+");mask-image:url("+z+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=application][data-icon-multifile=true]{-webkit-mask-image:url("+z+"),url("+P+");mask-image:url("+z+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=font]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+F+");mask-image:url("+F+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=font][data-icon-multifile=true]{-webkit-mask-image:url("+F+"),url("+P+");mask-image:url("+F+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=image]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+N+");mask-image:url("+N+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=image][data-icon-multifile=true]{-webkit-mask-image:url("+N+"),url("+P+");mask-image:url("+N+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=model]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+R+");mask-image:url("+R+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=model][data-icon-multifile=true]{-webkit-mask-image:url("+R+"),url("+P+");mask-image:url("+R+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=text]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+G+");mask-image:url("+G+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=text][data-icon-multifile=true]{-webkit-mask-image:url("+G+"),url("+P+");mask-image:url("+G+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=video]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+j+");mask-image:url("+j+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=video][data-icon-multifile=true]{-webkit-mask-image:url("+j+"),url("+P+");mask-image:url("+j+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent.compact{align-items:center;display:flex;flex-direction:row-reverse}.torrent-list .torrent.compact .icon{flex-shrink:0;height:16px;-webkit-mask-size:16px,8px;mask-size:16px,8px;width:16px}.torrent-list .torrent.compact .icon[data-icon-multifile=true]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+P+");mask-image:url("+P+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent.compact .icon[data-icon-multifile=true][data-icon-multifile=true]{-webkit-mask-image:url("+P+"),url("+P+");mask-image:url("+P+"),url("+P+');-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent.compact>*{margin:5px}.torrent-list .torrent:not(.compact){align-items:center;display:grid;grid-column-gap:12px;grid-template-areas:"icon name labels" "icon peers peers" "icon progressbar progressbar" "icon progress-text progress-text";grid-template-columns:32px auto 1fr;padding:6px 12px}.torrent-list .torrent:not(.compact) .icon{background-size:32px,16px;grid-area:icon;height:32px;width:32px}.torrent-list .torrent:not(.compact) .torrent-name{color:var(--color-fg-primary);grid-area:name}.torrent-list .torrent:not(.compact) .torrent-name.paused{color:var(--color-fg-disabled)}.torrent-list .torrent:not(.compact) .torrent-labels{grid-area:labels}.torrent-list .torrent:not(.compact) .torrent-peer-details{grid-area:peers}.torrent-list .torrent:not(.compact) .torrent-progress{display:flex;flex-direction:row;grid-area:progressbar}.torrent-list .torrent:not(.compact) .torrent-progress-details{grid-area:progress-text}.torrent-list .torrent:not(.compact)>*{margin:1px 0}.torrent-list .torrent.selected{background-color:var(--color-bg-selected)}.torrent-list .icon{background-position:center;background-repeat:no-repeat}.torrent-list .torrent-pauseresume-button{background-position:center center;background-repeat:no-repeat;background-size:20px;margin-left:10px;width:20px}.torrent-list .torrent-pauseresume-button[data-action=pause]{background-image:url('+U+")}.torrent-list .torrent-pauseresume-button[data-action=pause]:active,.torrent-list .torrent-pauseresume-button[data-action=pause]:hover{background-image:url("+H+")}.torrent-list .torrent-pauseresume-button[data-action=resume]{background-image:url("+W+")}.torrent-list .torrent-pauseresume-button[data-action=resume]:active,.torrent-list .torrent-pauseresume-button[data-action=resume]:hover{background-image:url("+$+")}.torrent-list .torrent-progress-details.error,.torrent-list .torrent-peer-details.error{color:var(--color-fg-error)}.torrent-list .torrent-name{font-weight:bold;margin-bottom:2px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.torrent-list .torrent-name.compact{font-size:1em;font-weight:normal}.torrent-list .torrent-name:not(.paused){color:var(--color-fg-primary)}.torrent-list .torrent-labels{font-size:x-small;font-weight:normal;margin-bottom:2px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.torrent-list .torrent-labels.compact{flex:1;font-size:x-small}.torrent-list .torrent-progress-details,.torrent-list .torrent-peer-details{color:var(--color-fg-primary);font-size:x-small}.torrent-list .torrent-progress-bar{background-repeat:no-repeat;border-color:var(--color-border-selected);border-radius:3px;border-style:solid;border-width:1px;height:12px}.torrent-list .torrent-progress-bar.full{flex-grow:1;margin:2px 0}.torrent-list .torrent-progress-bar.compact{min-width:50px;width:50px}.torrent-list .torrent-progress-bar.leech.paused{background:linear-gradient(to bottom, var(--color-progressbar-leech-paused-1), var(--color-progressbar-leech-paused-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.leech.queued{background:linear-gradient(to bottom, var(--color-progressbar-leech-queued-1), var(--color-progressbar-leech-queued-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.leech{background:linear-gradient(to bottom, var(--color-progressbar-leech-1), var(--color-progressbar-leech-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.magnet.paused{background:linear-gradient(to bottom, var(--color-progressbar-magnet-paused-1), var(--color-progressbar-magnet-paused-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.magnet{background:linear-gradient(to bottom, var(--color-progressbar-magnet-1), var(--color-progressbar-magnet-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.seed.paused{background:linear-gradient(to bottom, var(--color-progressbar-seed-paused-1), var(--color-progressbar-seed-paused-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.seed.queued{background:linear-gradient(to bottom, var(--color-progressbar-seed-queued-1), var(--color-progressbar-seed-queued-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.seed{background:linear-gradient(to bottom, var(--color-progressbar-seed-1), var(--color-progressbar-seed-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.verify{background:linear-gradient(to bottom, var(--color-progressbar-verify-1), var(--color-progressbar-verify-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}@media(max-width: 599px){html,body{overflow:hidden}input[type=checkbox]{height:20px;width:20px}}@media(max-width: 599px){#inspector,#prefs-dialog{left:0}}@media(min-width: 600px){#inspector,#prefs-dialog{border-left:1px solid var(--color-default-border);width:570px}}#prefs-dialog{background:var(--color-inspector-background);border:0;bottom:0;box-shadow:0 3px 6px -4px rgba(0,0,0,.1215686275),0 6px 16px rgba(0,0,0,.0784313725),0 9px 28px 8px rgba(0,0,0,.0509803922);position:absolute;right:0;top:61px;z-index:2}#prefs-dialog .tabs-page{grid-column-gap:8px;grid-row-gap:5px;grid-template-columns:1fr 1fr;margin:20px}#prefs-dialog .tabs-page:not(.hidden){display:grid}#prefs-dialog .tabs-page .section-label{font-weight:bold;grid-column:span 2;padding-bottom:5px}#prefs-dialog .tabs-page .section-label:not(:first-of-type){margin-top:20px}#prefs-dialog .alt-speed-section-label{background:rgba(0,0,0,0) url("+D+") no-repeat;background-position:left;background-position-y:4px;background-size:20px;padding-left:22px}#prefs-dialog :disabled,#prefs-dialog .disabled{color:var(--color-fg-disabled)}#prefs-dialog #alt-times-div,#prefs-dialog #autostart-div,#prefs-dialog #port-forwarding,#prefs-dialog #randomize-port,#prefs-dialog #suffix-div,#prefs-dialog #use-dht-div,#prefs-dialog #use-lpd-div,#prefs-dialog #use-pex-div,#prefs-dialog #utp-enabled,#prefs-dialog .alt-speed-label{grid-column:span 2}#prefs-dialog #default-trackers{height:300px}#prefs-dialog .blocklist-size-label,#prefs-dialog .blocklist-update-button,#prefs-dialog .register-handler-button,#prefs-dialog .port-status{grid-column:2/3}#prefs-dialog .blocklist-size-label{font-size:smaller}#prefs-dialog .blocklist-size-number{font-weight:bolder}#prefs-dialog .port-status-label{display:inline-block;font-weight:bold;margin-left:5px}#prefs-dialog .port-status-label[data-open=true]{color:var(--color-fg-port-open)}#prefs-dialog .port-status-label[data-open=false]{color:var(--color-fg-port-closed)}#prefs-dialog #default-trackers,#prefs-dialog .default-trackers-label{grid-column:1/3}#prefs-dialog .alt-speed-label{font-size:smaller;font-style:lighter;margin:-10px 0 10px}#prefs-dialog.ui-tabs .ui-tabs-panel{padding:0;user-select:none}.prefs-section{text-align:left}.prefs-section>*{padding:0 8px 8px}.prefs-section .title{color:var(--color-fg-primary);font-size:larger;font-weight:bold;margin-bottom:10px;padding-left:0}.prefs-section .row .key{float:left;padding-top:3px}.prefs-section .row .key>*{margin-left:0}.prefs-section .row .value{margin-left:150px}.prefs-section .row .value>*{width:100%}.tabs-container{align-items:stretch;background:var(--color-inspector-background);bottom:0;display:flex;flex-direction:column;position:absolute;right:0;top:61px;z-index:2}@media(max-width: 599px){.tabs-container{left:0}}@media(min-width: 600px){.tabs-container{width:550px}}.tabs-buttons{align-self:center;background-color:var(--color-bg-tabs);border:1px solid var(--color-border-selected);border-radius:6px;display:flex;margin:10px 0}.tabs-buttons button{appearance:none;border:1px solid rgba(0,0,0,0);border-radius:6px;color:var(--color-fg-primary)}.tabs-pages{box-sizing:border-box;flex:1;overflow-x:hidden;overflow-y:auto}@media(max-width: 599px){.tabs-pages{padding:0 8px 20px}}@media(min-width: 600px){.tabs-pages{padding:0 20px 20px}}.tabs-button{background-color:var(--color-bg-tabs);border:1px solid rgba(0,0,0,0);font-size:14px;padding:3px 8px}.tabs-button:active,.tabs-button:checked,.tabs-button.selected{background-color:var(--color-bg-even);border:1px solid var(--color-fg-primary);border-radius:6px;font-weight:500}#inspector{box-shadow:0 3px 6px rgba(58,58,58,.7)}.inspector-info-page{font-size:14px;grid-column-gap:8px;grid-row-gap:8px;grid-template-columns:auto 1fr;margin:20px;padding:12px}.inspector-info-page:not(.hidden){display:grid}.inspector-info-page .section-label{font-size:16px;font-weight:bold;grid-column:span 2;padding-bottom:5px}.inspector-info-page .section-label:not(:first-of-type){margin-top:20px}.inspector-info-page label{font-weight:500}.inspector-info-page :not(.section-label){overflow-x:hidden;text-overflow:ellipsis}.inspector-info-magnet button{background-color:var(--color-border);background-position:top;background-repeat:no-repeat;border:0;cursor:pointer;height:1rem;-webkit-mask:url("+Z+") no-repeat center/14px;mask:url("+Z+') no-repeat center/14px;vertical-align:middle;width:1rem}#inspector .tabs-button,#prefs-dialog .tabs-button{height:30px;margin:0;min-width:40px}#inspector-file-list{margin:0;padding:0}#inspector-file-list .inspector-torrent-file-list-entry{display:grid;grid-column-gap:5px;grid-template-areas:"check name priority" "blank1 info blank2";grid-template-columns:20px 1fr 65px;margin-bottom:4px;padding:5px}#inspector-file-list .inspector-torrent-file-list-entry.skip{opacity:.5}#inspector-file-list .file-wanted-control{grid-area:check}#inspector-file-list .inspector-torrent-file-list-entry-name{color:var(--color-fg-primary);cursor:pointer;font-size:14px;grid-area:name;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#inspector-file-list .inspector-torrent-file-list-entry.skip>.inspector-torrent-file-list-entry-name{color:var(--color-fg-disabled)}#inspector-file-list .inspector-torrent-file-list-entry-progress{color:var(--color-fg-secondary);font-size:12px;grid-area:info}#inspector-file-list .single-file .inspector-torrent-file-list-entry>.file-wanted-control,#inspector-file-list .inspector-torrent-file-list-entry.complete>.file-wanted-control{cursor:default}#inspector-header{margin:8px 0}#torrent-inspector-name{font-size:large;font-weight:bold}#inspector-tiers-list{color:var(--color-fg-primary);margin:0 10px;padding:0 12px}#inspector-tiers-list .tier-list-row{display:grid;font-size:12px;grid-column-gap:8px;grid-row-gap:4px;margin-top:8px}#inspector-tiers-list .tier-list-torrent{color:var(--color-fg-primary);font-weight:bolder;margin-left:-12px;overflow-x:hidden;padding-top:20px;text-overflow:ellipsis;white-space:nowrap}#inspector-tiers-list .tier-list-tracker{font-size:14px;font-weight:bolder;grid-column:span 2;margin-top:8px;padding-bottom:4px}#inspector-tiers-list .tier-announce,#inspector-tiers-list .tier-scrape,#inspector-tiers-list .tier-state{text-align:left}#inspector-tiers-list .tier-downloads,#inspector-tiers-list .tier-leechers,#inspector-tiers-list .tier-seeders{text-align:right}.peer-list{border:1px solid var(--color-default-border);border-collapse:collapse;cursor:default;table-layout:fixed;text-align:left;width:100%}.peer-list td,.peer-list th{font-size:smaller;padding:5px}.peer-list td{border:1px solid var(--color-default-border);color:var(--color-fg-secondary)}.peer-list .torrent-row td{background:var(--color-default-border);color:var(--color-fg-primary);font-size:normal;font-weight:bolder;overflow-x:hidden;padding:10px;text-overflow:ellipsis;white-space:nowrap}.peer-list .encryption[data-encrypted=true]{background-color:var(--color-border-selected);-webkit-mask:url('+O+") no-repeat center/14px;mask:url("+O+") no-repeat center/14px;width:10px}.peer-list .peer-address,.peer-list .percent-done,.peer-list .speed-down,.peer-list .speed-up{text-align:right}.peer-list .percent-done{width:10%}.peer-list .speed-down,.peer-list .speed-up{width:15%}.peer-list .peer-address{width:25%}.peer-list .peer-app-name{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width: 599px){.peer-list .peer-app-name{display:none}}@media(min-width: 600px){.peer-list .peer-app-name{width:25%}}.peer-list .status{cursor:pointer}.file-priority-radiobox{grid-area:priority}.file-priority-radiobox>*{appearance:none;background-color:var(--color-border-selected);background-position:center;background-repeat:no-repeat;background-size:10px,20px;border:1px solid var(--color-border);height:20px;margin:0;padding:0;width:20px}.file-priority-radiobox>.low{background-image:url("+L+");border-right-width:0}.file-priority-radiobox>.normal{background-image:url("+Q+")}.file-priority-radiobox>.high{background-image:url("+T+');border-left-width:0}.file-priority-radiobox>.checked{background-color:var(--color-bg-hover)}.context-menu{background-color:var(--color-bg-primary);border-radius:5px;box-shadow:0 3px 6px rgba(0,0,0,.7);color:var(--color-fg-on-popup);padding:10px 5px;position:absolute;z-index:9999}.context-menu .context-menuitem{font-size:13px;font-weight:400;list-style:none;margin-right:10px;padding:5px 15px}.context-menu .context-menuitem:hover:not(:disabled),.context-menu .context-menuitem:focus:not(:disabled){background-color:var(--color-bg-hover);border-radius:6px;cursor:pointer;font-weight:500}.context-menu .context-menuitem:disabled{color:var(--color-fg-disabled);cursor:none}.context-menu .context-menuitem.warning:hover{background-color:var(--color-bg-warn);color:var(--color-fg-warn)}.context-menu-separator{border-bottom:1px solid var(--color-fg-secondary);margin-bottom:10px;padding-bottom:10px}.overflow-menu{background:var(--color-bg-popup);border-radius:5px;box-shadow:0 3px 6px -4px rgba(0,0,0,.1215686275),0 6px 16px rgba(0,0,0,.0784313725),0 9px 28px 8px rgba(0,0,0,.0509803922);color:var(--color-fg-on-popup);min-width:220px;overflow:auto;-webkit-overflow-scrolling:touch;padding:10px;position:absolute;right:20px;top:50px;z-index:2}@media(max-width: 599px){.overflow-menu{height:80vh}}@media(min-width: 600px){.overflow-menu #display-fullscreen-check,.overflow-menu #display-fullscreen-label{display:none}}.overflow-menu fieldset{border:0;display:block;margin:8px 0}.overflow-menu fieldset ul{margin:0;padding-left:0}.overflow-menu fieldset ul li{list-style-type:none}.overflow-menu fieldset ul a{cursor:pointer}.overflow-menu .table-row{align-items:center;border-radius:6px;display:flex;flex-direction:row;padding:3px 0}.overflow-menu legend{color:var(--color-fg-primary);font-weight:bolder;margin:12px 0 4px}.overflow-menu a,.overflow-menu button,.overflow-menu label{display:inline-flex;font-size:1em;width:100%}.overflow-menu a,.overflow-menu button{background:rgba(0,0,0,0);border:0;cursor:pointer;display:block;padding:4px 0;text-align:left;text-decoration:none;width:150px}.overflow-menu .input-and-label{align-items:center;display:inline-flex;flex-direction:row}.overflow-menu #display-options{display:flex;flex-direction:column}.overflow-menu #speed-options{display:flex;flex-direction:column}.overflow-menu #speed-options>.speed-up,.overflow-menu #speed-options>.speed-down{align-items:center;display:flex;flex-direction:row;padding:4px 0}.overflow-menu #speed-options>.speed-up>label,.overflow-menu #speed-options>.speed-down>label{overflow:hidden;width:80px}.overflow-menu #speed-options .alt-speed{display:grid;grid-column-gap:5px;grid-row-gap:5px;grid-template-areas:"check lb" "turtle values";grid-template-columns:22px 1fr;margin-bottom:4px}.overflow-menu #speed-options #alt-speed-check{grid-area:check}.overflow-menu #speed-options #alt-speed-check:checked~#alt-speed-image{background-image:url('+D+");background-position:left;background-size:22px}.overflow-menu #speed-options #alt-speed-check:not(:checked)~#alt-speed-image{background-image:url("+J+');background-size:22px}.overflow-menu #speed-options #alt-speed-image{background-position:center;background-repeat:no-repeat;grid-area:turtle}.overflow-menu #speed-options #alt-speed-label{grid-area:lb}.overflow-menu #speed-options #alt-speed-values-label{font-size:small;grid-area:values}@media(max-width: 599px){.dialog-buttons{padding-top:13.3333333333px}.dialog-container{opacity:96%;position:absolute;top:61px;width:100%}.dialog-logo{padding-bottom:13.3333333333px}.dialog-window{align-items:center;display:flex;flex-direction:column}}@media(min-width: 600px){.dialog-container{min-width:400px;position:absolute;top:122px}.dialog-heading{grid-area:heading}.dialog-logo{grid-area:icon;padding-right:13.3333333333px}.dialog-window{background-color:var(--color-bg-popup);color:var(--color-fg-on-popup);display:grid;grid-column-gap:12px;grid-template-areas:"icon heading" "icon message" "icon workarea" "icon buttons";grid-template-columns:64px 1fr;padding:2px 12px}}.dialog-buttons{display:flex;float:right;grid-area:buttons;margin:10px 0 0;text-align:center}.dialog-buttons button{appearance:none;background:var(--color-bg-primary);border:1px solid var(--color-default-border);border-radius:5px;color:var(--color-fg-primary);margin-left:8px;padding:8px;text-decoration:none}.dialog-buttons-begin{flex-grow:1}.dialog-buttons-end{display:none}dialog{border:0}.dialog-container{box-shadow:0 3px 6px -4px rgba(0,0,0,.1215686275),0 6px 16px rgba(0,0,0,.0784313725),0 9px 28px 8px rgba(0,0,0,.0509803922);color:var(--color-fg-primary);display:block;padding:0;z-index:2}@media(min-width: 600px){.dialog-container{border:0;border-radius:8px;max-width:50%}}.dialog-heading{align-items:center;display:flex;font-size:1.2em;font-weight:bold}.dialog-logo{background:rgba(0,0,0,0) url('+q+") top left no-repeat;height:64px;width:64px}.dialog-message{grid-area:message;margin:10px 0 0}.dialog-window{background:var(--color-bg-primary);border-radius:8px;padding:20px}.dialog-workarea{display:flex;flex-direction:column;grid-area:workarea;margin:10px 0 0}.dialog-workarea>*{margin-bottom:5px}.about-dialog{max-width:initial}.about-dialog .dialog-workarea>*{margin-bottom:10px}.about-dialog-version-number{margin-left:4px}.about-dialog-version-checksum{font-size:small;font-style:italic;font-weight:normal;margin-left:auto;padding-left:10px}.open-torrent input{margin-bottom:15px}.open-torrent #auto-start-label{margin-left:5px}.shortcuts-dialog table{border-collapse:collapse;width:100%}.shortcuts-dialog th,.shortcuts-dialog td{border:1px solid var(--color-border);padding:5px 10px}#torrent-rename-name{min-width:400px}#move-container #torrent-path{min-width:400px}.tabs-pages .content,.inspector-info-page .content,.statistics-dialog .content{column-gap:16px;display:grid;grid-row-gap:6px;grid-template-columns:auto 1fr;margin-top:4px}@media(max-width: 599px){.tabs-pages .content,.inspector-info-page .content,.statistics-dialog .content{margin:4px 0 16px}}@media(min-width: 600px){.tabs-pages .content,.inspector-info-page .content,.statistics-dialog .content{margin:4px 16px 16px}}.tabs-pages .content div,.inspector-info-page .content div,.statistics-dialog .content div{word-break:break-word}.tabs-pages fieldset,.inspector-info-page fieldset,.statistics-dialog fieldset{border:0;margin:0;padding:0}.tabs-pages legend,.inspector-info-page legend,.statistics-dialog legend{font-weight:bolder;margin-bottom:4px}#free-space-text{display:inline-block;font-size:smaller;font-style:italic}#torrent-upload-frame{border:0;display:block;height:0;left:-1000px;margin:0;padding:0;position:absolute;top:-1000px;width:0}.ui-menu{width:200px}","",{version:3,sources:["webpack://./assets/css/transmission-app.scss"],names:[],mappings:"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",sourcesContent:["@use 'sass:color';\n@use 'sass:math';\n\n// Colors related to torrent status\n$blue-100: #dbedff;\n$blue-200: #c8e1ff;\n$blue-300: #79b8ff;\n$blue-700: #044289;\n$green-100: #dcffe4;\n$green-200: #bef5cb;\n$green-300: #85e89d;\n$green-500: #28a745;\n$green-700: #176f2c;\n$grey-500: #828282;\n$grey-700: #373737;\n$grey-800: #292929;\n$grey-900: #191919;\n$pink-300: #f692ce;\n$pink-700: #b93a86;\n$red-500: #d73a49;\n$white: #fff;\n$yellow-300: #ffea7f;\n$yellow-700: #dbab09;\n\n$nice-grey: #f8f8f8;\n$nice-grey-darker: #f0f0f0;\n$dark-mode-black: #121212;\n$default-accent-color: #fff8c5;\n$default-accent-color-dark: #2e2e2e;\n$default-border-dark: #575757;\n$default-border-light: #aeaeae;\n// Z-INDEX ENUM\n// $z-index-progressbar: 1;\n$z-index-popup: 2;\n\n// ICONS -- see assets/img/README.md for sources and license details\n// Are you a designer? New icon PRs welcomed!\n$image-alt-speed-disabled: '../img/modern-tortoise.png';\n$image-alt-speed-enabled: '../img/modern-tortoise-blue.png';\n$image-baseline: '../img/horizontal-rule.svg';\n$image-chevron-dn: '../img/chevron-down.svg';\n$image-chevron-up: '../img/chevron-up.svg';\n$image-lock-fill: '../img/lock-fill.svg';\n$image-magnet: '../img/magnet.svg';\n$image-pause-circle-active: '../img/pause-circle-active.svg';\n$image-pause-circle-idle: '../img/pause-circle-idle.svg';\n$image-play-circle-active: '../img/play-circle-active.svg';\n$image-play-circle-idle: '../img/play-circle-idle.svg';\n\n/// MIXINS\n\n@mixin for-phone-only {\n @media (max-width: 599px) {\n @content;\n }\n}\n@mixin for-tablet-portrait-up {\n @media (min-width: 600px) {\n @content;\n }\n}\n\n@mixin button {\n border: 1px solid var(--color-border);\n cursor: pointer;\n display: inline-block;\n padding: 3px;\n user-select: none;\n}\n\n/// GLOBAL\n\n:root {\n --color-fg-error: #{$red-500};\n --color-fg-port-closed: #{$red-500};\n --color-fg-port-open: #{$green-500};\n --color-progressbar-background-2: #{$grey-500};\n --color-progressbar-verify-1: #{$pink-300};\n --color-progressbar-verify-2: #{$pink-700};\n --color-progressbar-magnet-1: #{$yellow-300};\n --color-progressbar-magnet-2: #{$yellow-700};\n --color-progressbar-magnet-paused-1: #{$default-accent-color};\n --color-progressbar-magnet-paused-2: #{$grey-500};\n --color-progressbar-leech-paused-1: #{$blue-200};\n --color-progressbar-leech-paused-2: #{$grey-500};\n --color-progressbar-leech-queued-1: #{$blue-100};\n --color-progressbar-leech-queued-2: #{$blue-300};\n --color-progressbar-leech-1: #{$blue-300};\n --color-progressbar-leech-2: #{$blue-700};\n --color-progressbar-seed-paused-1: #{$green-200};\n --color-progressbar-seed-paused-2: #{$grey-500};\n --color-progressbar-seed-queued-1: #{$green-100};\n --color-progressbar-seed-queued-2: #{$green-300};\n --color-progressbar-seed-1: #{$green-300};\n --color-progressbar-seed-2: #{$green-700};\n color-scheme: light dark;\n @media (prefers-color-scheme: dark) {\n --color-bg-hover: #{$nice-grey};\n --color-fg-primary: #fff;\n --color-bg-primary: #{$grey-800};\n --color-bg-odd: #{$grey-900};\n --color-bg-even: #{$grey-800};\n --color-bg-menu: #{$grey-800};\n --color-fg-secondary: #{$nice-grey};\n --color-fg-on-popup: #{$nice-grey};\n --color-fg-disabled: #{$nice-grey};\n --color-bg-popup: #{$grey-800};\n --color-bg-warn: #cf6679;\n --color-fg-warn: #{$dark-mode-black};\n --color-border: #{$nice-grey};\n --color-border-selected: #d0d7de;\n --color-fg-tertiary: #{$grey-500};\n --color-toolbar-background: #{$grey-800};\n --color-inspector-background: #{$grey-800};\n --color-inspector-tabs: #{$nice-grey};\n --color-bg-selected: #{$default-accent-color-dark};\n --color-bg-tabs: #{$grey-700};\n --color-progressbar-background-1: #426389;\n --color-default-border: #{$default-border-dark};\n }\n @media (prefers-color-scheme: light) {\n --color-bg-hover: #{$nice-grey};\n --color-fg-primary: #404040;\n --color-bg-primary: #fff;\n --color-bg-even: #{$white};\n --color-bg-odd: #{$nice-grey};\n --color-bg-menu: #{$nice-grey};\n --color-fg-on-popup: #{$grey-900};\n --color-bg-popup: #{$white};\n --color-fg-secondary: #{$grey-500};\n --color-border: #{$grey-500};\n --color-border-selected: #d0d7de;\n --color-fg-tertiary: #{$grey-500};\n --color-bg-warn: #e4606d5b;\n --color-fg-warn: #cf212e;\n --color-fg-disabled: #{$grey-500};\n --color-toolbar-background: #{$nice-grey};\n --color-inspector-background: #{$white};\n --color-bg-tabs: #{$nice-grey-darker};\n --color-inspector-tabs: #{$nice-grey};\n --color-bg-selected: #{$default-accent-color};\n --color-progressbar-background-1: #{$nice-grey};\n --color-default-border: #{$default-border-light};\n --color-dialog-border: #{$nice-grey};\n }\n}\n\nhtml,\nbody {\n color: var(--color-fg-primary);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,\n Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n height: 100%;\n margin: 0;\n}\n\nimg {\n border: 0;\n}\n\na {\n color: var(--color-fg-primary);\n outline: 0;\n text-decoration: underline;\n}\n\n.hidden {\n display: none;\n}\n\n.even {\n background-color: var(--color-bg-even);\n}\n\n.odd {\n background-color: var(--color-bg-odd);\n}\n\n.mainwin {\n display: flex;\n flex-direction: column;\n height: 100%;\n position: relative;\n\n > * {\n margin: 0;\n padding: 0;\n }\n}\n\n.mainwin-workarea {\n display: flex;\n flex: 1;\n flex-direction: row;\n overflow: auto;\n}\n\ninput {\n border: 1px solid var(--color-border);\n border-radius: 3px;\n padding: 4px 5px;\n}\n\n/// TOOLBAR\n\n$toolbar-height-number: 50;\n$toolbar-height: $toolbar-height-number * 1px;\n\n#mainwin-toolbar {\n align-items: center;\n background: var(--color-toolbar-background);\n border-bottom: 1px solid var(--color-default-border);\n display: flex;\n flex-direction: row;\n height: $toolbar-height;\n margin: 0;\n width: 100%;\n\n button {\n background-color: transparent;\n background-position: center;\n background-repeat: no-repeat;\n border: 0;\n border-radius: 5px;\n cursor: pointer;\n height: $toolbar-height;\n margin-right: 6px;\n user-select: none;\n width: $toolbar-height;\n\n svg {\n stroke: var(--color-fg-primary); // ios only? idk yet\n }\n\n &:disabled {\n cursor: default;\n opacity: 0.25;\n }\n }\n\n > .toolbar-separator {\n border-left: 1px solid var(--color-default-border);\n height: 25px;\n margin: 0 6px 0 0;\n }\n\n :nth-last-child(2) {\n border: 0;\n flex-grow: 1;\n }\n}\n\n.toolbar-icon {\n stroke: var(--color-fg-primary);\n}\n\n#toolbar-inspector {\n svg {\n color: var(--color-fg-primary);\n }\n}\n\n#toolbar-overflow {\n margin-right: 4px;\n\n svg {\n fill: var(--color-fg-primary);\n height: 36px;\n width: 36px;\n }\n\n &.alt-speed-enabled {\n background-image: url($image-alt-speed-enabled);\n background-position: bottom left;\n background-size: 20px;\n }\n}\n\n/// FILTERBAR\n\n.mainwin-filterbar {\n align-items: center;\n background: var(--color-toolbar-background);\n border-bottom: 1px solid var(--color-default-border);\n display: flex;\n flex-direction: row;\n height: 30px;\n width: 100%;\n\n @include for-phone-only {\n padding: 5px 10px;\n\n :not(select):not(input) {\n display: none;\n }\n\n #torrent-search {\n padding: 5px;\n }\n }\n\n > * {\n margin-right: 5px;\n padding: 0 5px;\n }\n}\n\n$speed-icon-size: 12px;\n\n.speed-up-icon {\n background-image: url($image-chevron-up);\n background-repeat: no-repeat;\n background-size: $speed-icon-size $speed-icon-size;\n height: $speed-icon-size;\n width: $speed-icon-size;\n}\n\n.speed-dn-icon {\n background-image: url($image-chevron-dn);\n background-repeat: no-repeat;\n background-size: $speed-icon-size $speed-icon-size;\n height: $speed-icon-size;\n width: $speed-icon-size;\n}\n\n/// TORRENT CONTAINER\n\n$pauseresume-size-number: 20;\n$pauseresume-size: $pauseresume-size-number * 1px;\n$progressbar-border-number: 1;\n$progressbar-height-number: 14;\n$popup-top: 61px; // TODO: ugly that this is hardcoded\n\n.flex {\n flex-grow: 1;\n}\n\n#torrent-container {\n flex-grow: 1;\n left: 0;\n margin: 0;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding: 0;\n right: 0;\n}\n\n.torrent-container {\n background-color: $white;\n}\n\n$app-image: '../img/box.svg';\n$audio-image: '../img/music.svg';\n$folder-image: '../img/folder.svg';\n$font-image: '../img/type.svg';\n$image-image: '../img/image.svg';\n$package-image: '../img/package.svg';\n$text-image: '../img/file-text.svg';\n$video-image: '../img/film.svg';\n\n@mixin mime-icon-compact($mime-icon) {\n &[data-icon-multifile='true'] {\n background-image: url($folder-image);\n background-position: center;\n background-size: 16px;\n }\n}\n\n@mixin mime-icon($mime-icon) {\n // background-image: url($mime-icon);\n background-color: var(--color-fg-primary);\n -webkit-mask-image: url($mime-icon);\n mask-image: url($mime-icon);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n\n &[data-icon-multifile='true'] {\n -webkit-mask-image: url($mime-icon), url($folder-image);\n mask-image: url($mime-icon), url($folder-image);\n -webkit-mask-position: top left, bottom right;\n mask-position: top left, bottom right;\n -webkit-mask-repeat: no-repeat, no-repeat;\n mask-repeat: no-repeat, no-repeat;\n -webkit-mask-size: 16px, 16px;\n mask-size: 16px, 16px;\n }\n}\n\n.torrent-list {\n cursor: pointer;\n list-style-type: none;\n margin: 0;\n padding: 0;\n text-align: left;\n width: 100%;\n\n .torrent {\n border-bottom: 1px solid var(--color-default-border);\n user-select: none;\n\n .icon {\n // color the background svg fill\n background-color: var(--color-fg-primary);\n background-position: center, top left;\n\n &[data-icon-mime-type='audio'] {\n @include mime-icon($audio-image);\n }\n\n &[data-icon-mime-type='application'] {\n @include mime-icon($app-image);\n }\n\n &[data-icon-mime-type='font'] {\n @include mime-icon($font-image);\n }\n\n &[data-icon-mime-type='image'] {\n @include mime-icon($image-image);\n }\n\n &[data-icon-mime-type='model'] {\n @include mime-icon($package-image);\n }\n\n &[data-icon-mime-type='text'] {\n @include mime-icon($text-image);\n }\n\n &[data-icon-mime-type='video'] {\n @include mime-icon($video-image);\n }\n }\n\n &.compact {\n $icon-size-num: 16;\n $icon-size: $icon-size-num * 1px;\n\n align-items: center;\n display: flex;\n flex-direction: row-reverse;\n\n .icon {\n flex-shrink: 0;\n height: $icon-size;\n -webkit-mask-size: $icon-size, $icon-size-num * 0.5px;\n mask-size: $icon-size, $icon-size-num * 0.5px;\n width: $icon-size;\n\n &[data-icon-multifile='true'] {\n @include mime-icon($folder-image);\n }\n }\n\n > * {\n margin: 5px;\n }\n }\n\n &:not(.compact) {\n $icon-size-num: 32;\n $icon-size: $icon-size-num * 1px;\n align-items: center;\n display: grid;\n grid-column-gap: 12px;\n grid-template-areas:\n 'icon name labels'\n 'icon peers peers'\n 'icon progressbar progressbar'\n 'icon progress-text progress-text';\n grid-template-columns: $icon-size auto 1fr;\n padding: 6px 12px;\n\n .icon {\n background-size: $icon-size, $icon-size-num * 0.5px;\n grid-area: icon;\n height: $icon-size;\n width: $icon-size;\n }\n\n .torrent-name {\n color: var(--color-fg-primary);\n grid-area: name;\n\n &.paused {\n color: var(--color-fg-disabled);\n }\n }\n\n .torrent-labels {\n grid-area: labels;\n }\n\n .torrent-peer-details {\n grid-area: peers;\n }\n\n .torrent-progress {\n display: flex;\n flex-direction: row;\n grid-area: progressbar;\n }\n\n .torrent-progress-details {\n grid-area: progress-text;\n }\n\n > * {\n margin: 1px 0;\n }\n }\n\n &.selected {\n background-color: var(--color-bg-selected);\n }\n }\n\n .icon {\n background-position: center;\n background-repeat: no-repeat;\n }\n\n .torrent-pauseresume-button {\n background-position: center center;\n background-repeat: no-repeat;\n background-size: $pauseresume-size;\n margin-left: math.floor(math.div($pauseresume-size-number, 2)) * 1px;\n width: $pauseresume-size;\n\n &[data-action='pause'] {\n background-image: url($image-pause-circle-idle);\n\n &:active,\n &:hover {\n background-image: url($image-pause-circle-active);\n }\n }\n\n &[data-action='resume'] {\n background-image: url($image-play-circle-idle);\n\n &:active,\n &:hover {\n background-image: url($image-play-circle-active);\n }\n }\n }\n\n .torrent-progress-details.error,\n .torrent-peer-details.error {\n color: var(--color-fg-error);\n }\n\n .torrent-name {\n font-weight: bold;\n margin-bottom: 2px;\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &.compact {\n font-size: 1em;\n font-weight: normal;\n }\n\n &:not(.paused) {\n color: var(--color-fg-primary);\n }\n }\n\n .torrent-labels {\n font-size: x-small;\n font-weight: normal;\n margin-bottom: 2px;\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &.compact {\n flex: 1;\n font-size: x-small;\n }\n }\n\n .torrent-progress-details,\n .torrent-peer-details {\n color: var(--color-fg-primary);\n font-size: x-small;\n }\n\n .torrent-progress-bar {\n background-repeat: no-repeat;\n border-color: var(--color-border-selected);\n border-radius: 3px;\n border-style: solid;\n border-width: 1px;\n height: ($progressbar-height-number - ($progressbar-border-number * 2)) *\n 1px;\n\n &.full {\n flex-grow: 1;\n margin: 2px 0;\n }\n\n &.compact {\n min-width: 50px;\n width: 50px;\n }\n\n @function progressbar-gradient($color1, $color2) {\n @return linear-gradient(to bottom, $color1, $color2 80%);\n }\n\n @mixin progressbar-background($color1, $color2) {\n background: progressbar-gradient($color1, $color2),\n progressbar-gradient(\n var(--color-progressbar-background-1),\n var(--color-progressbar-background-1)\n );\n background-repeat: no-repeat;\n }\n\n &.leech.paused {\n @include progressbar-background(\n var(--color-progressbar-leech-paused-1),\n var(--color-progressbar-leech-paused-1)\n );\n }\n\n &.leech.queued {\n @include progressbar-background(\n var(--color-progressbar-leech-queued-1),\n var(--color-progressbar-leech-queued-1)\n );\n }\n\n &.leech {\n @include progressbar-background(\n var(--color-progressbar-leech-1),\n var(--color-progressbar-leech-1)\n );\n }\n\n &.magnet.paused {\n @include progressbar-background(\n var(--color-progressbar-magnet-paused-1),\n var(--color-progressbar-magnet-paused-1)\n );\n }\n\n &.magnet {\n @include progressbar-background(\n var(--color-progressbar-magnet-1),\n var(--color-progressbar-magnet-1)\n );\n }\n\n &.seed.paused {\n @include progressbar-background(\n var(--color-progressbar-seed-paused-1),\n var(--color-progressbar-seed-paused-1)\n );\n }\n\n &.seed.queued {\n @include progressbar-background(\n var(--color-progressbar-seed-queued-1),\n var(--color-progressbar-seed-queued-1)\n );\n }\n\n &.seed {\n @include progressbar-background(\n var(--color-progressbar-seed-1),\n var(--color-progressbar-seed-1)\n );\n }\n\n &.verify {\n @include progressbar-background(\n var(--color-progressbar-verify-1),\n var(--color-progressbar-verify-1)\n );\n }\n }\n}\n\n/// PREFERENCES DIALOG\n\n@include for-phone-only {\n html,\n body {\n overflow: hidden;\n }\n\n input[type='checkbox'] {\n height: 20px;\n width: 20px;\n }\n}\n\n#inspector,\n#prefs-dialog {\n @include for-phone-only {\n left: 0;\n }\n @include for-tablet-portrait-up {\n border-left: 1px solid var(--color-default-border);\n width: 570px;\n }\n}\n\n#prefs-dialog {\n $background-color: var(--color-inspector-background);\n background: $background-color;\n border: 0;\n bottom: 0;\n box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014,\n 0 9px 28px 8px #0000000d;\n position: absolute;\n right: 0;\n top: $popup-top;\n z-index: $z-index-popup;\n\n .tabs-page {\n grid-column-gap: 8px;\n grid-row-gap: 5px;\n grid-template-columns: 1fr 1fr;\n margin: 20px;\n\n &:not(.hidden) {\n display: grid;\n }\n\n .section-label {\n font-weight: bold;\n grid-column: span 2;\n // margin-left: -20px;\n padding-bottom: 5px;\n\n &:not(:first-of-type) {\n margin-top: 20px;\n }\n }\n }\n\n .alt-speed-section-label {\n background: transparent url($image-alt-speed-enabled) no-repeat;\n background-position: left;\n background-position-y: 4px;\n background-size: 20px;\n padding-left: 22px;\n }\n\n :disabled,\n .disabled {\n color: var(--color-fg-disabled);\n }\n\n #alt-times-div,\n #autostart-div,\n #port-forwarding,\n #randomize-port,\n #suffix-div,\n #use-dht-div,\n #use-lpd-div,\n #use-pex-div,\n #utp-enabled,\n .alt-speed-label {\n grid-column: span 2;\n }\n\n #default-trackers {\n height: 300px;\n }\n\n .blocklist-size-label,\n .blocklist-update-button,\n .register-handler-button,\n .port-status {\n grid-column: 2 / 3;\n }\n\n .blocklist-size-label {\n font-size: smaller;\n }\n\n .blocklist-size-number {\n font-weight: bolder;\n }\n\n .port-status-label {\n display: inline-block;\n font-weight: bold;\n margin-left: 5px;\n\n &[data-open='true'] {\n color: var(--color-fg-port-open);\n }\n\n &[data-open='false'] {\n color: var(--color-fg-port-closed);\n }\n }\n\n #default-trackers,\n .default-trackers-label {\n grid-column: 1 / 3;\n }\n\n .alt-speed-label {\n font-size: smaller;\n font-style: lighter;\n // nudge it up next to the section label\n margin: -10px 0 10px;\n }\n}\n\n#prefs-dialog.ui-tabs .ui-tabs-panel {\n padding: 0;\n user-select: none;\n}\n\n.prefs-section {\n text-align: left;\n\n > * {\n padding: 0 8px 8px;\n }\n\n .title {\n color: var(--color-fg-primary);\n font-size: larger;\n font-weight: bold;\n margin-bottom: 10px;\n padding-left: 0;\n }\n\n .row {\n .key {\n float: left;\n padding-top: 3px;\n\n > * {\n margin-left: 0;\n }\n }\n\n .value {\n margin-left: 150px;\n\n > * {\n width: 100%;\n }\n }\n }\n}\n\n/// TABS\n\n.tabs-container {\n align-items: stretch;\n background: var(--color-inspector-background);\n bottom: 0;\n display: flex;\n flex-direction: column;\n position: absolute;\n right: 0;\n top: $popup-top;\n z-index: $z-index-popup;\n @include for-phone-only {\n left: 0;\n }\n @include for-tablet-portrait-up {\n width: 550px;\n }\n}\n\n.tabs-buttons {\n align-self: center;\n background-color: var(--color-bg-tabs);\n border: 1px solid var(--color-border-selected);\n border-radius: 6px;\n display: flex;\n margin: 10px 0;\n\n button {\n appearance: none;\n border: 1px solid transparent;\n border-radius: 6px;\n color: var(--color-fg-primary);\n }\n}\n\n.tabs-pages {\n box-sizing: border-box;\n flex: 1;\n overflow-x: hidden;\n overflow-y: auto;\n @include for-phone-only {\n padding: 0 8px 20px;\n }\n @include for-tablet-portrait-up {\n padding: 0 20px 20px;\n }\n}\n\n.tabs-button {\n background-color: var(--color-bg-tabs);\n border: 1px solid transparent;\n font-size: 14px;\n padding: 3px 8px;\n\n &:active,\n &:checked,\n &.selected {\n background-color: var(--color-bg-even);\n border: 1px solid var(--color-fg-primary);\n border-radius: 6px;\n font-weight: 500;\n }\n}\n\n/// INSPECTOR\n\n#inspector {\n box-shadow: 0 3px 6px rgba(58, 58, 58, 0.7);\n}\n\n.inspector-info-page {\n font-size: 14px;\n // TODO: this is (mostly) copied from prefs-dialog.\n // can it be folded into a single set of rules?\n\n grid-column-gap: 8px;\n grid-row-gap: 8px;\n grid-template-columns: auto 1fr;\n margin: 20px;\n padding: 12px;\n\n &:not(.hidden) {\n display: grid;\n }\n\n .section-label {\n font-size: 16px;\n font-weight: bold;\n grid-column: span 2;\n padding-bottom: 5px;\n\n &:not(:first-of-type) {\n margin-top: 20px;\n }\n }\n\n label {\n font-weight: 500;\n }\n\n :not(.section-label) {\n // this section is not copied\n overflow-x: hidden;\n text-overflow: ellipsis;\n }\n}\n\n.inspector-info-magnet {\n button {\n background-color: var(--color-border);\n\n background-position: top;\n background-repeat: no-repeat;\n border: 0;\n cursor: pointer;\n height: 1rem;\n -webkit-mask: url($image-magnet) no-repeat center / 14px;\n mask: url($image-magnet) no-repeat center / 14px;\n vertical-align: middle;\n width: 1rem;\n }\n}\n\n#inspector .tabs-button,\n#prefs-dialog .tabs-button {\n height: 30px;\n margin: 0;\n min-width: 40px;\n}\n\n#inspector-file-list {\n margin: 0;\n padding: 0;\n\n .inspector-torrent-file-list-entry {\n display: grid;\n grid-column-gap: 5px;\n grid-template-areas:\n 'check name priority'\n 'blank1 info blank2';\n grid-template-columns: 20px 1fr 65px;\n margin-bottom: 4px;\n padding: 5px;\n\n &.skip {\n opacity: 0.5;\n }\n }\n\n .file-wanted-control {\n grid-area: check;\n }\n\n .inspector-torrent-file-list-entry-name {\n color: var(--color-fg-primary);\n cursor: pointer;\n font-size: 14px;\n grid-area: name;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .inspector-torrent-file-list-entry.skip\n > .inspector-torrent-file-list-entry-name {\n color: var(--color-fg-disabled);\n }\n\n .inspector-torrent-file-list-entry-progress {\n color: var(--color-fg-secondary);\n font-size: 12px;\n grid-area: info;\n }\n\n .single-file .inspector-torrent-file-list-entry > .file-wanted-control,\n .inspector-torrent-file-list-entry.complete > .file-wanted-control {\n cursor: default;\n }\n}\n\n#inspector-header {\n margin: 8px 0;\n}\n\n#torrent-inspector-name {\n font-size: large;\n font-weight: bold;\n}\n\n#inspector-tiers-list {\n color: var(--color-fg-primary);\n margin: 0 10px;\n padding: 0 12px;\n\n .tier-list-row {\n display: grid;\n font-size: 12px;\n grid-column-gap: 8px;\n grid-row-gap: 4px;\n margin-top: 8px;\n }\n\n .tier-list-torrent {\n color: var(--color-fg-primary);\n font-weight: bolder;\n margin-left: -12px;\n overflow-x: hidden;\n padding-top: 20px;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .tier-list-tracker {\n font-size: 14px;\n font-weight: bolder;\n grid-column: span 2;\n margin-top: 8px;\n padding-bottom: 4px;\n }\n\n .tier-announce,\n .tier-scrape,\n .tier-state {\n text-align: left;\n }\n\n .tier-downloads,\n .tier-leechers,\n .tier-seeders {\n text-align: right;\n }\n}\n\n// Peers Tab\n\n.peer-list {\n $table-border: 1px solid var(--color-default-border);\n\n border: $table-border;\n border-collapse: collapse;\n cursor: default;\n table-layout: fixed;\n text-align: left;\n width: 100%;\n\n td,\n th {\n font-size: smaller;\n padding: 5px;\n }\n\n td {\n border: $table-border;\n color: var(--color-fg-secondary);\n // padding: 5px 10px;\n }\n\n .torrent-row td {\n background: var(--color-default-border);\n color: var(--color-fg-primary);\n font-size: normal;\n font-weight: bolder;\n overflow-x: hidden;\n padding: 10px;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .encryption {\n &[data-encrypted='true'] {\n background-color: var(--color-border-selected);\n -webkit-mask: url($image-lock-fill) no-repeat center / 14px;\n mask: url($image-lock-fill) no-repeat center / 14px;\n width: 10px;\n }\n }\n\n .peer-address,\n .percent-done,\n .speed-down,\n .speed-up {\n text-align: right;\n }\n\n .percent-done {\n width: 10%;\n }\n\n .speed-down,\n .speed-up {\n width: 15%;\n }\n\n .peer-address {\n width: 25%;\n }\n\n .peer-app-name {\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include for-phone-only {\n display: none;\n }\n @include for-tablet-portrait-up {\n width: 25%;\n }\n }\n\n .status {\n cursor: pointer;\n }\n}\n\n/// FILE PRIORITY BUTTONS\n\n.file-priority-radiobox {\n $size-number: 20;\n $size: $size-number * 1px;\n $halfsize: math.floor(math.div($size-number, 2)) * 1px;\n\n grid-area: priority;\n\n > * {\n appearance: none;\n background-color: var(--color-border-selected);\n background-position: center;\n background-repeat: no-repeat;\n background-size: $halfsize, $size;\n border: 1px solid var(--color-border);\n height: $size;\n margin: 0;\n padding: 0;\n width: $size;\n }\n\n > .low {\n background-image: url($image-chevron-dn);\n border-right-width: 0;\n }\n\n > .normal {\n background-image: url($image-baseline);\n }\n\n > .high {\n background-image: url($image-chevron-up);\n border-left-width: 0;\n }\n\n //if input is checked then change the background color\n > .checked {\n background-color: var(--color-bg-hover);\n }\n}\n\n/// CONTEXT MENU\n\n.context-menu {\n $disabled-color: var(--color-fg-disabled);\n background-color: var(--color-bg-primary);\n border-radius: 5px;\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.7);\n color: var(--color-fg-on-popup);\n padding: 10px 5px;\n position: absolute;\n z-index: 9999;\n\n .context-menuitem {\n font-size: 13px;\n font-weight: 400;\n list-style: none;\n margin-right: 10px;\n padding: 5px 15px;\n\n &:hover:not(:disabled),\n &:focus:not(:disabled) {\n background-color: var(--color-bg-hover);\n border-radius: 6px;\n cursor: pointer;\n font-weight: 500;\n }\n\n &:disabled {\n color: $disabled-color;\n cursor: none;\n }\n\n &.warning:hover {\n background-color: var(--color-bg-warn);\n color: var(--color-fg-warn);\n }\n }\n}\n\n.context-menu-separator {\n border-bottom: 1px solid var(--color-fg-secondary);\n margin-bottom: 10px;\n padding-bottom: 10px;\n}\n\n/// OVERFLOW MENU\n\n.overflow-menu {\n background: var(--color-bg-popup);\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014,\n 0 9px 28px 8px #0000000d;\n color: var(--color-fg-on-popup);\n min-width: 220px;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding: 10px;\n position: absolute;\n\n right: 20px;\n top: 50px;\n z-index: $z-index-popup;\n\n @include for-phone-only() {\n height: 80vh;\n }\n // hide the fullscreen button unless we're on mobile\n @include for-tablet-portrait-up {\n #display-fullscreen-check,\n #display-fullscreen-label {\n display: none;\n }\n }\n\n fieldset {\n border: 0;\n display: block;\n margin: 8px 0;\n }\n\n fieldset ul {\n margin: 0;\n padding-left: 0;\n\n li {\n list-style-type: none;\n }\n\n a {\n cursor: pointer;\n }\n }\n\n .table-row {\n align-items: center;\n border-radius: 6px;\n display: flex;\n flex-direction: row;\n padding: 3px 0;\n }\n\n legend {\n color: var(--color-fg-primary);\n font-weight: bolder;\n margin: 12px 0 4px;\n }\n\n a,\n button,\n label {\n display: inline-flex;\n font-size: 1em;\n width: 100%;\n }\n\n a,\n button {\n background: transparent;\n border: 0;\n cursor: pointer;\n display: block;\n padding: 4px 0;\n text-align: left;\n text-decoration: none;\n width: 150px;\n }\n\n .input-and-label {\n align-items: center;\n display: inline-flex;\n flex-direction: row;\n }\n\n #display-options {\n display: flex;\n flex-direction: column;\n }\n\n #speed-options {\n display: flex;\n flex-direction: column;\n\n > .speed-up,\n > .speed-down {\n align-items: center;\n display: flex;\n flex-direction: row;\n padding: 4px 0;\n\n > label {\n overflow: hidden;\n width: 80px;\n }\n }\n\n .alt-speed {\n display: grid;\n grid-column-gap: 5px;\n grid-row-gap: 5px;\n grid-template-areas:\n 'check lb'\n 'turtle values';\n grid-template-columns: 22px 1fr;\n margin-bottom: 4px;\n }\n\n #alt-speed-check {\n grid-area: check;\n\n &:checked ~ #alt-speed-image {\n background-image: url($image-alt-speed-enabled);\n background-position: left;\n background-size: 22px;\n }\n\n &:not(:checked) ~ #alt-speed-image {\n background-image: url($image-alt-speed-disabled);\n background-size: 22px;\n }\n }\n\n #alt-speed-image {\n background-position: center;\n background-repeat: no-repeat;\n grid-area: turtle;\n }\n\n #alt-speed-label {\n grid-area: lb;\n }\n\n #alt-speed-values-label {\n font-size: small;\n grid-area: values;\n }\n }\n}\n\n/// DIALOGS\n\n$dialog-padding-number: 20;\n$dialog-logo-padding-number: math.div($dialog-padding-number * 2, 3);\n$logo-size: 64px;\n\n@include for-phone-only {\n .dialog-buttons {\n padding-top: $dialog-logo-padding-number * 1px;\n }\n\n .dialog-container {\n opacity: 96%;\n position: absolute;\n top: $popup-top;\n width: 100%;\n }\n\n .dialog-logo {\n padding-bottom: $dialog-logo-padding-number * 1px;\n }\n\n .dialog-window {\n align-items: center;\n display: flex;\n flex-direction: column;\n }\n}\n@include for-tablet-portrait-up {\n .dialog-container {\n min-width: 400px;\n position: absolute;\n top: $popup-top * 2;\n }\n\n .dialog-heading {\n grid-area: heading;\n }\n\n .dialog-logo {\n grid-area: icon;\n padding-right: $dialog-logo-padding-number * 1px;\n }\n\n .dialog-window {\n background-color: var(--color-bg-popup);\n color: var(--color-fg-on-popup);\n display: grid;\n grid-column-gap: 12px;\n grid-template-areas:\n 'icon heading'\n 'icon message'\n 'icon workarea'\n 'icon buttons';\n grid-template-columns: $logo-size 1fr;\n padding: 2px 12px;\n }\n}\n\n.dialog-buttons {\n display: flex;\n float: right;\n grid-area: buttons;\n margin: 10px 0 0;\n text-align: center;\n\n button {\n appearance: none;\n background: var(--color-bg-primary);\n border: 1px solid var(--color-default-border);\n border-radius: 5px;\n color: var(--color-fg-primary);\n margin-left: 8px;\n padding: 8px;\n text-decoration: none;\n }\n}\n\n.dialog-buttons-begin {\n flex-grow: 1;\n}\n\n.dialog-buttons-end {\n display: none;\n}\n\ndialog {\n border: 0;\n}\n\n.dialog-container {\n box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014,\n 0 9px 28px 8px #0000000d;\n color: var(--color-fg-primary);\n display: block;\n padding: 0;\n z-index: $z-index-popup;\n\n @include for-tablet-portrait-up() {\n border: 0;\n border-radius: 8px;\n max-width: 50%;\n }\n}\n\n.dialog-heading {\n align-items: center;\n display: flex;\n font-size: 1.2em;\n font-weight: bold;\n}\n\n.dialog-logo {\n background: transparent url('../img/logo.png') top left no-repeat;\n height: $logo-size;\n width: $logo-size;\n}\n\n.dialog-message {\n grid-area: message;\n margin: 10px 0 0;\n}\n\n.dialog-window {\n background: var(--color-bg-primary);\n border-radius: 8px;\n padding: $dialog-padding-number * 1px;\n}\n\n.dialog-workarea {\n display: flex;\n flex-direction: column;\n grid-area: workarea;\n margin: 10px 0 0;\n\n > * {\n margin-bottom: 5px;\n }\n}\n\n/// ABOUT DIALOG\n\n.about-dialog {\n max-width: initial;\n}\n\n.about-dialog .dialog-workarea > * {\n margin-bottom: 10px;\n}\n\n.about-dialog-version-number {\n margin-left: 4px;\n}\n\n.about-dialog-version-checksum {\n font-size: small;\n font-style: italic;\n font-weight: normal;\n margin-left: auto;\n padding-left: 10px;\n}\n\n/// OPEN TORRENT DIALOG\n.open-torrent {\n input {\n margin-bottom: 15px;\n }\n\n #auto-start-label {\n margin-left: 5px;\n }\n}\n\n/// HOTKEYS DIALOG\n\n.shortcuts-dialog {\n table {\n border-collapse: collapse;\n width: 100%;\n }\n\n th,\n td {\n border: 1px solid var(--color-border);\n padding: 5px 10px;\n }\n}\n\n/// RENAME DIALOG\n\n#torrent-rename-name {\n min-width: 400px;\n}\n\n/// SET-LOCATION DIALOG\n\n#move-container #torrent-path {\n min-width: 400px;\n}\n\n/// STATISTICS DIALOG\n\n.tabs-pages,\n.inspector-info-page,\n.statistics-dialog {\n .content {\n column-gap: 16px;\n display: grid;\n grid-row-gap: 6px;\n grid-template-columns: auto 1fr;\n margin-top: 4px;\n\n @include for-phone-only {\n margin: 4px 0 16px;\n }\n @include for-tablet-portrait-up {\n margin: 4px 16px 16px;\n }\n\n div {\n word-break: break-word;\n }\n }\n\n fieldset {\n border: 0;\n margin: 0;\n padding: 0;\n }\n\n legend {\n font-weight: bolder;\n margin-bottom: 4px;\n }\n}\n\n/// UPLOAD DIALOG\n\n#free-space-text {\n display: inline-block;\n font-size: smaller;\n font-style: italic;\n}\n\n#torrent-upload-frame {\n border: 0;\n display: block; /* Don't change this : safari forms won't target hidden frames (they open a new window) */\n height: 0;\n left: -1000px;\n margin: 0;\n padding: 0;\n position: absolute;\n top: -1000px;\n width: 0;\n}\n\n.ui-menu {\n width: 200px;\n}\n"],sourceRoot:""}]);const Y=S},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,o,s){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var a=0;a0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=s),n&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=n):d[2]=n),o&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=o):d[4]="".concat(o)),t.push(d))}},t}},667:e=>{"use strict";e.exports=function(e,t){return t||(t={}),e?(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]|(%20)/.test(e)||t.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e):e}},537:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),s="/*# ".concat(o," */");return[t].concat([s]).join("\n")}return[t].join("\n")}},307:(e,t,n)=>{e=n.nmd(e);var r="__lodash_hash_undefined__",o=9007199254740991,s="[object Arguments]",i="[object Array]",a="[object Boolean]",l="[object Date]",c="[object Error]",d="[object Function]",A="[object Map]",p="[object Number]",g="[object Object]",u="[object Promise]",m="[object RegExp]",h="[object Set]",C="[object String]",b="[object Symbol]",f="[object WeakMap]",v="[object ArrayBuffer]",y="[object DataView]",x=/^\[object .+?Constructor\]$/,k=/^(?:0|[1-9]\d*)$/,w={};w["[object Float32Array]"]=w["[object Float64Array]"]=w["[object Int8Array]"]=w["[object Int16Array]"]=w["[object Int32Array]"]=w["[object Uint8Array]"]=w["[object Uint8ClampedArray]"]=w["[object Uint16Array]"]=w["[object Uint32Array]"]=!0,w[s]=w[i]=w[v]=w[a]=w[y]=w[l]=w[c]=w[d]=w[A]=w[p]=w[g]=w[m]=w[h]=w[C]=w[f]=!1;var E="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,I="object"==typeof self&&self&&self.Object===Object&&self,B=E||I||Function("return this")(),_=t&&!t.nodeType&&t,S=_&&e&&!e.nodeType&&e,D=S&&S.exports===_,T=D&&E.process,L=function(){try{return T&&T.binding&&T.binding("util")}catch(e){}}(),M=L&&L.isTypedArray;function P(e,t){for(var n=-1,r=null==e?0:e.length;++na))return!1;var c=s.get(e);if(c&&s.get(t))return c==t;var d=-1,A=!0,p=2&n?new ve:void 0;for(s.set(e,t),s.set(t,e);++d-1},be.prototype.set=function(e,t){var n=this.__data__,r=ke(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},fe.prototype.clear=function(){this.size=0,this.__data__={hash:new Ce,map:new(se||be),string:new Ce}},fe.prototype.delete=function(e){var t=Te(this,e).delete(e);return this.size-=t?1:0,t},fe.prototype.get=function(e){return Te(this,e).get(e)},fe.prototype.has=function(e){return Te(this,e).has(e)},fe.prototype.set=function(e,t){var n=Te(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},ve.prototype.add=ve.prototype.push=function(e){return this.__data__.set(e,r),this},ve.prototype.has=function(e){return this.__data__.has(e)},ye.prototype.clear=function(){this.__data__=new be,this.size=0},ye.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},ye.prototype.get=function(e){return this.__data__.get(e)},ye.prototype.has=function(e){return this.__data__.has(e)},ye.prototype.set=function(e,t){var n=this.__data__;if(n instanceof be){var r=n.__data__;if(!se||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new fe(r)}return n.set(e,t),this.size=n.size,this};var Me=te?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,s=[];++n-1&&e%1==0&&e-1&&e%1==0&&e<=o}function We(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function $e(e){return null!=e&&"object"==typeof e}var Ze=M?function(e){return function(t){return e(t)}}(M):function(e){return $e(e)&&He(e.length)&&!!w[we(e)]};function Oe(e){return null!=(t=e)&&He(t.length)&&!Ue(t)?xe(e):_e(e);var t}e.exports=function(e,t){return Ie(e,t)}},379:e=>{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},216:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},565:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},795:e=>{"use strict";e.exports=function(e){var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var o=void 0!==n.layer;o&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,o&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var s=n.sourceMap;s&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},589:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},409:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItYm94Ij4KICAgIDxwYXRoIGQ9Ik0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnoiPjwvcGF0aD4KICAgIDxwb2x5bGluZSBwb2ludHM9IjMuMjcgNi45NiAxMiAxMi4wMSAyMC43MyA2Ljk2Ij48L3BvbHlsaW5lPgogICAgPGxpbmUgeDE9IjEyIiB5MT0iMjIuMDgiIHgyPSIxMiIgeTI9IjEyIj48L2xpbmU+Cjwvc3ZnPg=="},726:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItY2hldnJvbi1kb3duIj4KICA8cG9seWxpbmUgcG9pbnRzPSI2IDkgMTIgMTUgMTggOSI+PC9wb2x5bGluZT4KPC9zdmc+"},75:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItY2hldnJvbi11cCI+CiAgPHBvbHlsaW5lIHBvaW50cz0iMTggMTUgMTIgOSA2IDE1Ij48L3BvbHlsaW5lPgo8L3N2Zz4="},101:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZmlsZS10ZXh0Ij4KICAgIDxwYXRoIGQ9Ik0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiPjwvcGF0aD4KICAgIDxwb2x5bGluZSBwb2ludHM9IjE0IDIgMTQgOCAyMCA4Ij48L3BvbHlsaW5lPgogICAgPGxpbmUgeDE9IjE2IiB5MT0iMTMiIHgyPSI4IiB5Mj0iMTMiPjwvbGluZT4KICAgIDxsaW5lIHgxPSIxNiIgeTE9IjE3IiB4Mj0iOCIgeTI9IjE3Ij48L2xpbmU+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIxMCA5IDkgOSA4IDkiPjwvcG9seWxpbmU+Cjwvc3ZnPg=="},648:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZmlsbSI+CiAgICA8cmVjdCB4PSIyIiB5PSIyIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHJ4PSIyLjE4IiByeT0iMi4xOCI+PC9yZWN0PgogICAgPGxpbmUgeDE9IjciIHkxPSIyIiB4Mj0iNyIgeTI9IjIyIj48L2xpbmU+CiAgICA8bGluZSB4MT0iMTciIHkxPSIyIiB4Mj0iMTciIHkyPSIyMiI+PC9saW5lPgogICAgPGxpbmUgeDE9IjIiIHkxPSIxMiIgeDI9IjIyIiB5Mj0iMTIiPjwvbGluZT4KICAgIDxsaW5lIHgxPSIyIiB5MT0iNyIgeDI9IjciIHkyPSI3Ij48L2xpbmU+CiAgICA8bGluZSB4MT0iMiIgeTE9IjE3IiB4Mj0iNyIgeTI9IjE3Ij48L2xpbmU+CiAgICA8bGluZSB4MT0iMTciIHkxPSIxNyIgeDI9IjIyIiB5Mj0iMTciPjwvbGluZT4KICAgIDxsaW5lIHgxPSIxNyIgeTE9IjciIHgyPSIyMiIgeTI9IjciPjwvbGluZT4KPC9zdmc+"},121:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZm9sZGVyIj4KICAgIDxwYXRoIGQ9Ik0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyeiI+PC9wYXRoPgo8L3N2Zz4="},416:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCI+CiAgICA8Zz4KICAgICAgICA8cmVjdCBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPgogICAgICAgIDxyZWN0IGZpbGwtcnVsZT0iZXZlbm9kZCIgaGVpZ2h0PSIyIiB3aWR0aD0iMTYiIHg9IjQiIHk9IjExIi8+CiAgICA8L2c+Cjwvc3ZnPg=="},404:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItaW1hZ2UiPgogICAgPHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiByeD0iMiIgcnk9IjIiPjwvcmVjdD4KICAgIDxjaXJjbGUgY3g9IjguNSIgY3k9IjguNSIgcj0iMS41Ij48L2NpcmNsZT4KICAgIDxwb2x5bGluZSBwb2ludHM9IjIxIDE1IDE2IDEwIDUgMjEiPjwvcG9seWxpbmU+Cjwvc3ZnPg=="},355:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMWVtIiBoZWlnaHQ9IjFlbSIgdmlld0JveD0iMCAwIDE2IDE2IiBjbGFzcz0iYmkgYmktbG9jay1maWxsIiBmaWxsPSIjZmZmIgogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTIuNSA5YTIgMiAwIDAgMSAyLTJoN2EyIDIgMCAwIDEgMiAydjVhMiAyIDAgMCAxLTIgMmgtN2EyIDIgMCAwIDEtMi0yVjl6Ii8+CiAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNC41IDRhMy41IDMuNSAwIDEgMSA3IDB2M2gtMVY0YTIuNSAyLjUgMCAwIDAtNSAwdjNoLTFWNHoiLz4KPC9zdmc+"},246:e=>{"use strict";e.exports="data:image/png;base64,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"},496:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iY3VycmVudENvbG9yIiBjbGFzcz0iYmkgYmktbWFnbmV0IiB2aWV3Qm94PSIwIDAgMTYgMTYiPgogIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTggMWE3IDcgMCAwIDAtNyA3djNoNFY4YTMgMyAwIDAgMSA2IDB2M2g0VjhhNyA3IDAgMCAwLTctN1ptNyAxMWgtNHYzaDR2LTNaTTUgMTJIMXYzaDR2LTNaTTAgOGE4IDggMCAxIDEgMTYgMHY4aC02VjhhMiAyIDAgMSAwLTQgMHY4SDBWOFoiLz4KPC9zdmc+"},986:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAADFUlEQVR4Ab1WA5QcTRDe32Zs2zZHsW3btm10z77Ytm3btrXdc3rxZVO1xsy+uajPXfpKX5/FzFGoVkImfJpE+B74uidRdl0mbDv8nCRPtaW3fKsjq2G5AMBBmXK70ZdE+QcAtkogEbHM+q0+yP6zOJVnKWm1JTINRiI2AQJFGoMJBMYuy5QlCeWz+ETtX6i0Ckm+89gS/kBSeb2QYMpPe/w7KrqNTIMibHyoqgDoI8YJaf31Le327/BH6SlhqXBWzFeIj0ZbTEa3/ZQNDLQJqNQbcTJPGtwqypeBsDX+XlYN+08mbCjc2UKA2adQVgr1cY4giePSVK1CUHUIe+prp6i8iDDpWTzw/cIH1BT/LAiTfITTxGn8H3cLFaJVhGBdQUbhayRk3FS0ajk8iahaMbi/42rdCf/q8LoBSURjNaovt/+ANj4VO+gduEH2H+HyQkAbwrBCKDOajVJWLTnorsFt87UVKS+McpHaMgD4JzotDkMK8bsHPd8sehnMxgsPF1G+FCsEdwugWjuxchhYt5WEL/GMgNnFIPymi294abh4b6C4xtkSPjxQJqosvzz26R8A7pWO3evi0yJi43yZBBQN4FtaShFWAHr+MgTqWq4t2REkU7X2Ts7i8w24qaNzFNgzA98Mfp6En4tg7bO7topdM+YVfh5XWZjCMmIGOgGvOwJaeWbI7q1Ou8+42mZ13Z1EkAphmYzoAQHt1AWDAaaGlUQdnIcQZNjMWSU2QE+OYDEhaeqL3BYzp/QU9jcELAcAekBpBwHA5eAoXCSshmuYG7g3yOArXKC2PK7kJuEaI2UgLeBb6CLamJ0y9Hl8iWj1oUVtS0+JjONec3GqVtyPTY1bqyk0PLXbH3IMkiuyN75TxenzP2PwomuVkLYD6Hw9rjkSl0RslfFv3BodMBEQdLFMtKJYCacvtiuwojhr6MscIMo6h5iPLm69CrNe/IUtwKCiysuWUnnW0lPsv7jleAdgogy27VGBCQ9+M/2/Cb7SkNVpB3MSfhhL7fssmD0wuAlxiwDEFgB3Bf3hTGK1zfr4CJlxUMYWF0ZsAAAAAElFTkSuQmCC"},302:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAQAAACZKrSjAAACVElEQVR42p2UXUgUURTH/4tL0faNRWG6e8/kQ6lFYkGB1W5RKDP/6/pgBFkvBiERUkH00gdIhA+CBBa+FmUKIfgSlBGBFJQUFBQtgSwSFhZpRfmR3h52Gmd0fOmel/lzDr97vu4A845OsYOPmWWGD5w2bsL/HLuC/TQBm+G92vyw2NJF1pbCDaEYZz9/zMHk7G1NUTBSrVLXZUqMGBmS+jkYxvRQKMbQ6NZgLvJMjM8u+L0RIL2RmTCM04IIY758LnmIXFYTVnw2ny7dCNirdTO/BDBPdBVQm8/nWnv5fHIxu2WdjIgRI9f+TeoADQ076lYCjLFGn2U7r7JBlwMA93KQhi9ysdYRFzNtxZEng2LESD8AIBnlG/f+Ud2cjPorTiv2cMb1VgKJzTLsFTYqWfdrOFfWeV8pI4BO8S7beYt9jLHS16tOQLoCbXZNfQDAav7xgXoAXvHUzoNL+dtT41yjqkJA0+oEnF38FRj0YcB56OlTAG/6vE3JqHz2Ib7KgLqttgHQ7wMzeo1ITQmnPZ1JRu0yTnqgV4B1Q4wMqKbi0oKYfw37fJhJ7gOczgD6OMCLs9oui5dY20OeRfUKOvqcvsxujvEQ4BzzZpSzMe4AnDYOsoMNdgUiCz5UtV6Oysnitcko4CQ5NW+zv+liALDiVqPVIvWly8IxaZlwl703karLc2rZy3EP8p139B5EVFo9khm3wRnkhYCs0/5BWmcAQC+3K5jWtt5avRgALFt++qI+Fi4J/atIq7yUrDy1WhLlC5VfVKCa5L68k6x0J1JhEX8BQqqoVfkFUBAAAAAASUVORK5CYII="},989:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItbXVzaWMiPjxwYXRoIGQ9Ik05IDE4VjVsMTItMnYxMyI+PC9wYXRoPjxjaXJjbGUgY3g9IjYiIGN5PSIxOCIgcj0iMyI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTgiIGN5PSIxNiIgcj0iMyI+PC9jaXJjbGU+PC9zdmc+"},900:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItcGFja2FnZSI+PGxpbmUgeDE9IjE2LjUiIHkxPSI5LjQiIHgyPSI3LjUiIHkyPSI0LjIxIj48L2xpbmU+PHBhdGggZD0iTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiI+PC9wYXRoPjxwb2x5bGluZSBwb2ludHM9IjMuMjcgNi45NiAxMiAxMi4wMSAyMC43MyA2Ljk2Ij48L3BvbHlsaW5lPjxsaW5lIHgxPSIxMiIgeTE9IjIyLjA4IiB4Mj0iMTIiIHkyPSIxMiI+PC9saW5lPjwvc3ZnPg=="},444:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiM4MDAiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0xIDE0SDlWOGgydjh6bTQgMGgtMlY4aDJ2OHoiLz48L3N2Zz4K"},202:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiM5OTkiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0xIDE0SDlWOGgydjh6bTQgMGgtMlY4aDJ2OHoiLz48L3N2Zz4K"},598:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwODAiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE0LjV2LTlsNiA0LjUtNiA0LjV6Ii8+PC9zdmc+Cg=="},757:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiM5OTkiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE0LjV2LTlsNiA0LjUtNiA0LjV6Ii8+PC9zdmc+Cg=="},403:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItdHlwZSI+PHBvbHlsaW5lIHBvaW50cz0iNCA3IDQgNCAyMCA0IDIwIDciPjwvcG9seWxpbmU+PGxpbmUgeDE9IjkiIHkxPSIyMCIgeDI9IjE1IiB5Mj0iMjAiPjwvbGluZT48bGluZSB4MT0iMTIiIHkxPSI0IiB4Mj0iMTIiIHkyPSIyMCI+PC9saW5lPjwvc3ZnPg=="}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={id:r,loaded:!1,exports:{}};return e[r](s,s.exports,n),s.loaded=!0,s.exports}n.m=e,n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n.b=document.baseURI||self.location.href,n.nc=void 0,(()=>{"use strict";class e extends EventTarget{constructor(){super(),this.actions=Object.seal({"deselect-all":{enabled:!1,shortcut:"Control+A",text:"Deselect all"},"move-bottom":{enabled:!1,text:"Move to the back of the queue"},"move-down":{enabled:!1,text:"Move down in the queue"},"move-top":{enabled:!1,text:"Move to the front of the queue"},"move-up":{enabled:!1,text:"Move up in the queue"},"open-torrent":{enabled:!0,shortcut:"Alt+O",text:"Open torrent…"},"pause-all-torrents":{enabled:!1,text:"Pause all"},"pause-selected-torrents":{enabled:!1,shortcut:"Alt+U",text:"Pause"},"reannounce-selected-torrents":{enabled:!1,text:"Ask tracker for more peers"},"remove-selected-torrents":{enabled:!1,text:"Remove from list…"},"resume-selected-torrents":{enabled:!1,shortcut:"Alt+R",text:"Resume"},"resume-selected-torrents-now":{enabled:!1,text:"Resume now"},"select-all":{enabled:!1,shortcut:"Alt+A",text:"Select all"},"show-about-dialog":{enabled:!0,text:"About"},"show-inspector":{enabled:!1,shortcut:"Alt+I",text:"Torrent Inspector"},"show-labels-dialog":{enabled:!1,text:"Edit Labels…"},"show-move-dialog":{enabled:!1,shortcut:"Alt+L",text:"Set location…"},"show-overflow-menu":{enabled:!0,text:"More options…"},"show-preferences-dialog":{enabled:!0,shortcut:"Alt+P",text:"Edit preferences"},"show-rename-dialog":{enabled:!1,shortcut:"Alt+N",text:"Rename…"},"show-shortcuts-dialog":{enabled:!0,text:"Keyboard shortcuts"},"show-statistics-dialog":{enabled:!0,shortcut:"Alt+S",text:"Statistics"},"start-all-torrents":{enabled:!1,text:"Start all"},"toggle-compact-rows":{enabled:!0,text:"Compact rows"},"trash-selected-torrents":{enabled:!1,text:"Trash data and remove from list…"},"verify-selected-torrents":{enabled:!1,shortcut:"Alt+V",text:"Verify local data"}})}click(e){if(this.isEnabled(e)){const t=new Event("click");t.action=e,this.dispatchEvent(t)}}getActionForShortcut(e){for(const[t,n]of Object.entries(this.actions))if(e===n.shortcut)return t;return null}allShortcuts(){return new Map(Object.entries(this.actions).filter((([,e])=>e.shortcut)).map((([e,t])=>[t.shortcut,e])))}isEnabled(e){return this._getAction(e).enabled}text(e){return this._getAction(e).text}keyshortcuts(e){return this._getAction(e).shortcut}update(t){const n=e._recount(t.selected,t.nonselected);this._updateStates(n)}_getAction(e){const t=this.actions[e];if(!t)throw new Error(`no such action: ${e}`);return t}static _recount(e,t){const n=e.length+t.length,r=e.filter((e=>e.isStopped())).length,o=e.length-r,s=t.filter((e=>e.isStopped())).length,i=t.length-s,a=r+s,l=o+i,c=e.filter((e=>e.isQueued())).length;return{active:l,nonselected_active:i,nonselected_paused:s,paused:a,selected:e.length,selected_active:o,selected_paused:r,selected_queued:c,total:n}}_updateStates(e){const t=(e,t)=>{for(const n of t)this._updateActionState(n,e)};t(e.selected_paused>0,["resume-selected-torrents"]),t(e.paused>0,["start-all-torrents"]),t(e.active>0,["pause-all-torrents"]),t(e.selected_paused>0||e.selected_queued>0,["resume-selected-torrents-now"]),t(e.selected_active>0,["pause-selected-torrents","reannounce-selected-torrents"]),t(e.selected>0,["deselect-all","move-bottom","move-down","move-top","move-up","remove-selected-torrents","show-inspector","show-labels-dialog","show-move-dialog","trash-selected-torrents","verify-selected-torrents"]),t(1===e.selected,["show-rename-dialog"]),t(e.selected{for(const e of o.children)e.classList.toggle("selected",e===t);for(const e of s.children)e.classList.toggle("hidden",e!==r);n&&n(r)}))}return i[0].classList.add("selected"),s.children[0].classList.remove("hidden"),{buttons:i,root:r}}function i(e){const t=document.createElement("dialog");t.classList.add("dialog-container","popup",e),t.open=!0,t.setAttribute("role","dialog");const n=document.createElement("div");n.classList.add("dialog-window"),t.append(n);const r=document.createElement("div");r.classList.add("dialog-logo"),n.append(r);const o=document.createElement("div");o.classList.add("dialog-heading"),n.append(o);const s=document.createElement("div");s.classList.add("dialog-message"),n.append(s);const i=document.createElement("div");i.classList.add("dialog-workarea"),n.append(i);const a=document.createElement("div");a.classList.add("dialog-buttons"),n.append(a);const l=document.createElement("span");l.classList.add("dialog-buttons-begin"),a.append(l);const c=document.createElement("button");c.classList.add("dialog-dismiss-button"),c.textContent="Cancel",a.append(c);const d=document.createElement("button");d.textContent="OK",a.append(d);const A=document.createElement("span");return A.classList.add("dialog-buttons-end"),a.append(A),{confirm:d,dismiss:c,heading:o,message:s,root:t,workarea:i}}function a(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)))}function l(e,t){const n=[],{root:r,content:o}=function(e){const t=document.createElement("fieldset");t.classList.add("section");const n=document.createElement("legend");n.classList.add("title"),n.textContent=e,t.append(n);const r=document.createElement("div");return r.classList.add("content"),t.append(r),{content:r,root:t}}(e);for(const e of t){const t=document.createElement("label");t.textContent=e,o.append(t);const r=document.createElement("div");r.id=a(),o.append(r),t.setAttribute("for",r.id),n.push(r)}return{children:n,root:r}}function c(e,t=100){let n=null;return(...r)=>{n||(n=setTimeout((()=>{n=null,e(r)}),t))}}function d(e,t){return r()(e,t)}function A(e,t,n){n?e.setAttribute(t,!0):e.removeAttribute(t)}function p(e,t){A(e,"disabled",!t)}function g(e,t){e.classList.toggle("checked",t)}function u(e,t,n,r){const o=function(e,t){let{x:n,y:r}=e;const{width:o,height:s}=e;return n>t.x+t.width-o&&n-o>=t.x?n-=o:n=Math.min(n,t.x+t.width-o),r>t.y+t.height-s&&r-s>=t.y?r-=s:r=Math.min(r,t.y+t.height-s),new DOMRect(n,r,o,s)}(new DOMRect(t,n,e.clientWidth,e.clientHeight),r.getBoundingClientRect());e.style.left=`${o.left}px`,e.style.top=`${o.top}px`}class m extends EventTarget{constructor(e){super(),this.listener=t=>{e.contains(t.target)||(this.dispatchEvent(new MouseEvent(t.type,t)),t.preventDefault())},Object.seal(this),this.start()}start(){setTimeout((()=>document.addEventListener("click",this.listener)),0)}stop(){document.removeEventListener("click",this.listener)}}function h(e,t){e.textContent!==t&&(e.textContent=t)}class C{constructor(e){this._prefs=e,this._elements={toggle:document.querySelector("#toggle-notifications")}}_setEnabled(e){this.prefs.notifications_enabled=e,h(this._toggle,(e?"Disable":"Enable")+" Notifications")}_requestPermission(){Notification.requestPermission().then((e=>this._setEnabled("granted"===e)))}toggle(){this._enabled?this._setEnabled(!1):"granted"===Notification.permission?this._setEnabled(!0):"denied"!==Notification.permission&&this._requestPermission()}}class b extends EventTarget{constructor(){super(),this._cache={},this.dispatchPrefsChange=c(((e,t,n)=>{const r=new Event("change");Object.assign(r,{key:e,old_value:t,value:n}),this.dispatchEvent(r)}));for(const[e,t]of Object.entries(b._Defaults))this._set(e,b._getCookie(e,t)),Object.defineProperty(this,e.replaceAll("-","_"),{get:()=>this._get(e),set:t=>{this._set(e,t)}});Object.seal(this)}entries(){return Object.entries(this._cache)}keys(){return Object.keys(this._cache)}_get(e){const{_cache:t}=this;if(!Object.prototype.hasOwnProperty.call(t,e))throw new Error(e);return t[e]}_set(e,t){const{_cache:n}=this,r=n[e];r!==t&&(n[e]=t,b._setCookie(e,t),this.dispatchPrefsChange(e,r,t))}static _setCookie(e,t){const n=new Date;n.setFullYear(n.getFullYear()+1),document.cookie=`${e}=${t}; SameSite=Strict; expires=${n.toGMTString()}`}static _getCookie(e,t){const n=b._readCookie(e);return null===n?t:"true"===n||"false"!==n&&(/^\d+$/.test(n)?Number.parseInt(n,10):n)}static _readCookie(e){const t=`; ${document.cookie}`.split(`; ${e}=`);return 2===t.length?t.pop().split(";").shift():null}}b.AltSpeedEnabled="alt-speed-enabled",b.DisplayCompact="compact",b.DisplayFull="full",b.DisplayMode="display-mode",b.FilterActive="active",b.FilterAll="all",b.FilterDownloading="downloading",b.FilterFinished="finished",b.FilterMode="filter-mode",b.FilterPaused="paused",b.FilterSeeding="seeding",b.NotificationsEnabled="notifications-enabled",b.RefreshRate="refresh-rate-sec",b.SortAscending="ascending",b.SortByActivity="activity",b.SortByAge="age",b.SortByName="name",b.SortByProgress="progress",b.SortByQueue="queue",b.SortByRatio="ratio",b.SortBySize="size",b.SortByState="state",b.SortDescending="descending",b.SortDirection="sort-direction",b.SortMode="sort-mode",b._Defaults={[b.AltSpeedEnabled]:!1,[b.DisplayMode]:b.DisplayFull,[b.FilterMode]:b.FilterAll,[b.NotificationsEnabled]:!1,[b.RefreshRate]:5,[b.SortDirection]:b.SortAscending,[b.SortMode]:b.SortByName};class f extends EventTarget{constructor(e){super(),this.elements=f._create(e),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.elements}_onDismiss(){this.close()}static _create(e){const t=i("about-dialog");t.root.setAttribute("aria-label","About transmission"),t.heading.textContent="Transmission",t.dismiss.textContent="Close";let n=document.createElement("div");return n.classList.add("about-dialog-version-number"),n.textContent=e.version,t.heading.append(n),n=document.createElement("div"),n.classList.add("about-dialog-version-checksum"),n.textContent=e.checksum,t.heading.append(n),n=document.createElement("div"),n.textContent="A fast and easy bitTorrent client",t.workarea.append(n),n=document.createElement("div"),n.textContent="Copyright © The Transmission Project",t.workarea.append(n),t.confirm.remove(),delete t.confirm,t}}class v extends EventTarget{constructor(e){super(),this.action_listener=this._update.bind(this),this.action_manager=e,this.action_manager.addEventListener("change",this.action_listener),Object.assign(this,this._create()),this.show()}show(){for(const[e,t]of Object.entries(this.actions))p(t,this.action_manager.isEnabled(e));document.body.append(this.root)}close(){if(!this.closed){this.action_manager.removeEventListener("change",this.action_listener),this.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))delete this[e];this.closed=!0}}_update(e){const t=this.actions[e.action];t&&p(t,e.enabled)}_create(){const e=document.createElement("div");e.role="menu",e.classList.add("context-menu","popup");const t={},n=(n,r=!1)=>{const o=document.createElement("div"),s=this.action_manager.text(n);o.role="menuitem",r?o.classList.add("context-menuitem","warning"):o.classList.add("context-menuitem"),o.dataset.action=n,o.textContent=s;const i=this.action_manager.keyshortcuts(n);i&&o.setAttribute("aria-keyshortcuts",i),o.addEventListener("click",(()=>{this.action_manager.click(n),this.close()})),t[n]=o,e.append(o)},r=()=>{const t=document.createElement("div");t.classList.add("context-menu-separator"),e.append(t)};return n("resume-selected-torrents"),n("resume-selected-torrents-now"),n("pause-selected-torrents"),r(),n("move-top"),n("move-up"),n("move-down"),n("move-bottom"),r(),n("remove-selected-torrents",!0),n("trash-selected-torrents",!0),r(),n("verify-selected-torrents"),n("show-move-dialog"),n("show-rename-dialog"),n("show-labels-dialog"),r(),n("reannounce-selected-torrents"),r(),n("select-all"),n("deselect-all"),{actions:t,root:e}}}const y=new Intl.PluralRules,x=y.resolvedOptions().locale,k=new Intl.NumberFormat(x),w=1e3,E=[new Intl.NumberFormat(x,{maximumFractionDigits:0,style:"unit",unit:"byte"}),new Intl.NumberFormat(x,{maximumFractionDigits:0,style:"unit",unit:"kilobyte"}),new Intl.NumberFormat(x,{maximumFractionDigits:0,style:"unit",unit:"megabyte"}),new Intl.NumberFormat(x,{maximumFractionDigits:2,style:"unit",unit:"gigabyte"}),new Intl.NumberFormat(x,{maximumFractionDigits:2,style:"unit",unit:"terabyte"}),new Intl.NumberFormat(x,{maximumFractionDigits:2,style:"unit",unit:"petabyte"})],I=new Intl.NumberFormat(x,{maximumFractionDigits:2,style:"unit",unit:"kilobyte-per-second"}),B=new Intl.NumberFormat(x,{maximumFractionDigits:2,style:"unit",unit:"megabyte-per-second"}),_={_toTruncFixed:(e,t)=>(Math.floor(e*10**t)/10**t).toFixed(t),countString(e,t,n){return`${this.number(n)} ${this.ngettext(e,t,n)}`},mem(e){if(e<0)return"Unknown";if(0===e)return"None";let t=e;for(const e of E){if(t"one"===y.select(n)?e:t,number:e=>k.format(e),percentString(e){const t=e<100?1:0;return this._toTruncFixed(e,t)},ratioString(e){return-1===e?"None":-2===e?"∞":this.percentString(e)},size(e){return this.mem(e)},speed:e=>e<999.95?I.format(e):B.format(e/1e3),speedBps(e){return this.speed(this.toKBps(e))},timeInterval(e){const t=Math.floor(e/86400);if(t)return this.countString("day","days",t);const n=Math.floor(e%86400/3600);if(n)return this.countString("hour","hours",n);const r=Math.floor(e%3600/60);return r?this.countString("minute","minutes",r):(e=Math.floor(e%60),this.countString("second","seconds",e))},timestamp(e){if(!e)return"N/A";const t=new Date(1e3*e),n=new Date;let r="",o="";const s=n.getFullYear()===t.getFullYear(),i=n.getMonth()===t.getMonth(),a=n.getDate()-t.getDate();r=s&&i&&Math.abs(a)<=1?0===a?"Today":1===a?"Yesterday":"Tomorrow":t.toDateString();let l=t.getHours(),c="AM";l>12&&(l-=12,c="PM"),0===l&&(l=12),l<10&&(l=`0${l}`);let d=t.getMinutes();return d<10&&(d=`0${d}`),(e=t.getSeconds())<10&&(e=`0${e}`),o=[l,d,e].join(":"),[r,o,c].join(" ")},toKBps:e=>Math.floor(e/w)};class S extends EventTarget{isDone(){return this.fields.have>=this.fields.size}isEditable(){return this.fields.torrent.getFileCount()>1&&!this.isDone()}refreshWantedHTML(){const e=this.elements.root;e.classList.toggle("skip",!this.fields.isWanted),e.classList.toggle("complete",this.isDone()),p(e.checkbox,this.isEditable()),e.checkbox.checked=this.fields.isWanted}refreshProgressHTML(){const{size:e,have:t}=this.fields,n=100*(e?t/e:1),r=_,o=`${r.size(t)} of ${r.size(e)} (${r.percentString(n)}%)`;h(this.elements.progress,o)}refresh(){let e=0,t=!1,n=!1,r=!1,o=0,s=!1;const i=this.fields.torrent.getFiles();for(const a of this.fields.indices){const l=i[a];switch(e+=l.bytesCompleted,o+=l.length,s|=l.wanted,l.priority.toString()){case"-1":n=!0;break;case"1":t=!0;break;default:r=!0}}g(this.elements.priority_low_button,n),g(this.elements.priority_normal_button,r),g(this.elements.priority_high_button,t),this.fields.have===e&&this.fields.size===o||(this.fields.have=e,this.fields.size=o,this.refreshProgressHTML()),this.fields.isWanted!==s&&(this.fields.isWanted=s,this.refreshWantedHTML())}fireWantedChanged(e){const t=new Event("wantedToggled");t.indices=[...this.fields.indices],t.wanted=e,this.dispatchEvent(t)}firePriorityChanged(e){const t=new Event("priorityToggled");t.indices=[...this.fields.indices],t.priority=e,this.dispatchEvent(t)}createRow(e,t,n,r){const o=document.createElement("li");o.classList.add("inspector-torrent-file-list-entry",r?"even":"odd"),this.elements.root=o;let s=document.createElement("input");const i=a();s.type="checkbox",s.className="file-wanted-control",s.title="Download file",s.id=i,s.addEventListener("change",(e=>this.fireWantedChanged(e.target.checked))),o.checkbox=s,o.append(s),s=document.createElement("label"),s.className="inspector-torrent-file-list-entry-name",s.setAttribute("for",i),h(s,n),o.append(s),s=document.createElement("div"),s.className="inspector-torrent-file-list-entry-progress",o.append(s),this.elements.progress=s,s=document.createElement("div"),s.className="file-priority-radiobox";const l=s,c=e=>this.firePriorityChanged(e.target.value);s=document.createElement("input"),s.type="radio",s.value="-1",s.className="low",s.title="Low Priority",s.addEventListener("click",c),this.elements.priority_low_button=s,l.append(s),s=document.createElement("input"),s.type="radio",s.value="0",s.className="normal",s.title="Normal Priority",s.addEventListener("click",c),this.elements.priority_normal_button=s,l.append(s),s=document.createElement("input"),s.type="radio",s.value="1",s.title="High Priority",s.className="high",s.addEventListener("click",c),this.elements.priority_high_button=s,l.append(s),o.append(l),o.style.paddingLeft=20*t+"px",this.refresh()}getElement(){return this.elements.root}constructor(e,t,n,r,o){super(),this.fields={have:0,indices:r,isWanted:!0,size:0,torrent:e},this.elements={priority_high_button:null,priority_low_button:null,priority_normal_button:null,progress:null,root:null},this.createRow(e,t,n,o)}}class D extends EventTarget{constructor(e){super(),this.fieldObservers={},this.fields={},this.refresh(e)}notifyOnFieldChange(e,t){this.fieldObservers[e]=this.fieldObservers[e]||[],this.fieldObservers[e].push(t)}setField(e,t,n){const r=e[t];if(d(r,n))return!1;const o=this.fieldObservers[t];if(e===this.fields&&o&&o.length>0)for(const e of o)e.call(this,n,r,t);return e[t]=n,!0}updateFiles(e){let t=!1;const n=this.fields.files||[],r=["length","name","bytesCompleted","wanted","priority"];for(const[o,s]of e.entries()){const e=n[o]||{};for(const n of r)n in s&&(t|=this.setField(e,n,s[n]));n[o]=e}return this.fields.files=n,t}static collateTrackers(e){return e.map((e=>e.announce.toLowerCase())).join("\t")}refreshFields(e){let t=!1;for(const[n,r]of Object.entries(e))switch(n){case"files":case"fileStats":t|=this.updateFiles(r);break;case"trackerStats":t|=this.setField(this.fields,"trackers",r);break;case"trackers":n in this.fields||(t|=this.setField(this.fields,n,r));break;case"name":this.setField(this.fields,n,e[n])&&(this.fields.collatedName="",t=!0);break;default:t|=this.setField(this.fields,n,r)}return t}refresh(e){this.refreshFields(e)&&this.dispatchEvent(new Event("dataChanged"))}getComment(){return this.fields.comment}getCreator(){return this.fields.creator}getDateAdded(){return this.fields.addedDate}getDateCreated(){return this.fields.dateCreated}getDesiredAvailable(){return this.fields.desiredAvailable}getDownloadDir(){return this.fields.downloadDir}getDownloadSpeed(){return this.fields.rateDownload}getDownloadedEver(){return this.fields.downloadedEver}getError(){return this.fields.error}getErrorString(){return this.fields.errorString}getETA(){return this.fields.eta}getFailedEver(){return this.fields.corruptEver}getFiles(){return this.fields.files||[]}getFile(e){return this.fields.files[e]}getFileCount(){return this.fields["file-count"]}getHashString(){return this.fields.hashString}getHave(){return this.getHaveValid()+this.getHaveUnchecked()}getHaveUnchecked(){return this.fields.haveUnchecked}getHaveValid(){return this.fields.haveValid}getId(){return this.fields.id}getLabels(){return this.fields.labels.sort()}getLastActivity(){return this.fields.activityDate}getLeftUntilDone(){return this.fields.leftUntilDone}getMagnetLink(){return this.fields.magnetLink}getMetadataPercentComplete(){return this.fields.metadataPercentComplete}getName(){return this.fields.name||"Unknown"}getPeers(){return this.fields.peers||[]}getPeersConnected(){return this.fields.peersConnected}getPeersGettingFromUs(){return this.fields.peersGettingFromUs}getPeersSendingToUs(){return this.fields.peersSendingToUs}getPieceCount(){return this.fields.pieceCount}getPieceSize(){return this.fields.pieceSize}getPrimaryMimeType(){return this.fields["primary-mime-type"]||"application/octet-stream"}getPrivateFlag(){return this.fields.isPrivate}getQueuePosition(){return this.fields.queuePosition}getRecheckProgress(){return this.fields.recheckProgress}getSeedRatioLimit(){return this.fields.seedRatioLimit}getSeedRatioMode(){return this.fields.seedRatioMode}getSizeWhenDone(){return this.fields.sizeWhenDone}getStartDate(){return this.fields.startDate}getStatus(){return this.fields.status}getTotalSize(){return this.fields.totalSize}getTrackers(){return this.fields.trackers||[]}getUploadSpeed(){return this.fields.rateUpload}getUploadRatio(){return this.fields.uploadRatio}getUploadedEver(){return this.fields.uploadedEver}getWebseedsSendingToUs(){return this.fields.webseedsSendingToUs}isFinished(){return this.fields.isFinished}hasExtraInfo(){return"hashString"in this.fields}isSeeding(){return this.getStatus()===D._StatusSeed}isStopped(){return this.getStatus()===D._StatusStopped}isChecking(){return this.getStatus()===D._StatusCheck}isDownloading(){return this.getStatus()===D._StatusDownload}isQueued(){return this.getStatus()===D._StatusDownloadWait||this.getStatus()===D._StatusSeedWait}isDone(){return this.getLeftUntilDone()<1}needsMetaData(){return this.getMetadataPercentComplete()<1}getActivity(){return this.getDownloadSpeed()+this.getUploadSpeed()}getPercentDoneStr(){return _.percentString(100*this.getPercentDone())}getPercentDone(){return this.fields.percentDone}getStateString(){switch(this.getStatus()){case D._StatusStopped:return this.isFinished()?"Seeding complete":"Paused";case D._StatusCheckWait:return"Queued for verification";case D._StatusCheck:return"Verifying local data";case D._StatusDownloadWait:return"Queued for download";case D._StatusDownload:return"Downloading";case D._StatusSeedWait:return"Queued for seeding";case D._StatusSeed:return"Seeding";case null:return"Unknown";default:return"Error"}}seedRatioLimit(e){switch(this.getSeedRatioMode()){case D._RatioUseGlobal:return e.seedRatioLimit();case D._RatioUseLocal:return this.getSeedRatioLimit();default:return-1}}getErrorMessage(){const e=this.getErrorString();switch(this.getError()){case D._ErrTrackerWarning:return`Tracker returned a warning: ${e}`;case D._ErrTrackerError:return`Tracker returned an error: ${e}`;case D._ErrLocalError:return`Error: ${e}`;default:return null}}getCollatedName(){const e=this.fields;return!e.collatedName&&e.name&&(e.collatedName=e.name.toLowerCase()),e.collatedName||""}getCollatedTrackers(){const e=this.fields;return!e.collatedTrackers&&e.trackers&&(e.collatedTrackers=D.collateTrackers(e.trackers)),e.collatedTrackers||""}testState(e){const t=this.getStatus();switch(e){case b.FilterActive:return this.getPeersGettingFromUs()>0||this.getPeersSendingToUs()>0||this.getWebseedsSendingToUs()>0||this.isChecking();case b.FilterSeeding:return t===D._StatusSeed||t===D._StatusSeedWait;case b.FilterDownloading:return t===D._StatusDownload||t===D._StatusDownloadWait;case b.FilterPaused:return this.isStopped();case b.FilterFinished:return this.isFinished();default:return!0}}test(e,t,n,r){let o=this.testState(e);if(o&&n&&(o=this.getCollatedName().includes(n.toLowerCase())),o){const e=this.getLabels();r.length>0&&(o=r.some((t=>e.includes(t))))}return o&&t&&t.length>0&&(o=this.getCollatedTrackers().includes(t)),o}static compareById(e,t){return e.getId()-t.getId()}static compareByName(e,t){return e.getCollatedName().localeCompare(t.getCollatedName())||D.compareById(e,t)}static compareByQueue(e,t){return e.getQueuePosition()-t.getQueuePosition()}static compareByAge(e,t){const n=e.getDateAdded();return t.getDateAdded()-n||D.compareByQueue(e,t)}static compareByState(e,t){const n=e.getStatus();return t.getStatus()-n||D.compareByQueue(e,t)}static compareByActivity(e,t){const n=e.getActivity();return t.getActivity()-n||D.compareByState(e,t)}static compareByRatio(e,t){const n=e.getUploadRatio(),r=t.getUploadRatio();return nr?-1:D.compareByState(e,t)}static compareByProgress(e,t){return e.getPercentDone()-t.getPercentDone()||D.compareByRatio(e,t)}static compareBySize(e,t){return e.getTotalSize()-t.getTotalSize()||D.compareByName(e,t)}static compareTorrents(e,t,n,r){let o=0;switch(n){case b.SortByActivity:o=D.compareByActivity(e,t);break;case b.SortByAge:o=D.compareByAge(e,t);break;case b.SortByQueue:o=D.compareByQueue(e,t);break;case b.SortByProgress:o=D.compareByProgress(e,t);break;case b.SortBySize:o=D.compareBySize(e,t);break;case b.SortByState:o=D.compareByState(e,t);break;case b.SortByRatio:o=D.compareByRatio(e,t);break;case b.SortByName:o=D.compareByName(e,t);break;default:console.log(`Unrecognized sort mode: ${n}`),o=D.compareByName(e,t)}return r===b.SortDescending&&(o=-o),o}static sortTorrents(e,t,n){switch(t){case b.SortByActivity:e.sort(this.compareByActivity);break;case b.SortByAge:e.sort(this.compareByAge);break;case b.SortByName:e.sort(this.compareByName);break;case b.SortByProgress:e.sort(this.compareByProgress);break;case b.SortByQueue:e.sort(this.compareByQueue);break;case b.SortByRatio:e.sort(this.compareByRatio);break;case b.SortBySize:e.sort(this.compareBySize);break;case b.SortByState:e.sort(this.compareByState);break;default:console.log(`Unrecognized sort mode: ${t}`),e.sort(this.compareByName)}return n===b.SortDescending&&e.reverse(),e}}D._StatusStopped=0,D._StatusCheckWait=1,D._StatusCheck=2,D._StatusDownloadWait=3,D._StatusDownload=4,D._StatusSeedWait=5,D._StatusSeed=6,D._RatioUseGlobal=0,D._RatioUseLocal=1,D._RatioUnlimited=2,D._ErrNone=0,D._ErrTrackerWarning=1,D._ErrTrackerError=2,D._ErrLocalError=3,D._TrackerInactive=0,D._TrackerWaiting=1,D._TrackerQueued=2,D._TrackerActive=3,D.Fields={},D.Fields.Metadata=["addedDate","file-count","name","primary-mime-type","totalSize"],D.Fields.Stats=["error","errorString","eta","isFinished","isStalled","labels","leftUntilDone","metadataPercentComplete","peersConnected","peersGettingFromUs","peersSendingToUs","percentDone","queuePosition","rateDownload","rateUpload","recheckProgress","seedRatioMode","seedRatioLimit","sizeWhenDone","status","trackers","downloadDir","uploadedEver","uploadRatio","webseedsSendingToUs"],D.Fields.InfoExtra=["comment","creator","dateCreated","files","hashString","isPrivate","magnetLink","pieceCount","pieceSize"],D.Fields.StatsExtra=["activityDate","corruptEver","desiredAvailable","downloadedEver","fileStats","haveUnchecked","haveValid","peers","startDate","trackerStats"];const T=["encryption","speed-up","speed-down","percent-done","status","peer-address","peer-app-name"];class L extends EventTarget{constructor(e){super(),this.closed=!1,this.controller=e,this.elements=this._create(),this.current_page=this.elements.info.root,this.interval=setInterval(this._refreshTorrents.bind(this),3e3),this.name="inspector",this.selection_listener=e=>this._setTorrents(e.selected),this.torrent_listener=()=>this._updateCurrentPage(),this.torrents=[],this.file_torrent=null,this.file_torrent_n=null,this.file_rows=null,this.outside=new m(this.elements.root),this.outside.addEventListener("click",(()=>this.close())),Object.seal(this),e.addEventListener("torrent-selection-changed",this.selection_listener),this._setTorrents(this.controller.getSelectedTorrents()),document.body.append(this.elements.root)}close(){if(!this.closed){this.outside.stop(),clearInterval(this.interval),this._setTorrents([]),this.elements.root.remove(),this.controller.removeEventListener("torrent-selection-changed",this.selection_listener),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))this[e]=null;this.closed=!0}}static _createInfoPage(){const e=document.createElement("div");e.classList.add("inspector-info-page");const t={root:e},n=t=>{const n=document.createElement("div");n.textContent=t,n.classList.add("section-label"),e.append(n)},r=t=>{const n=document.createElement("label");h(n,t),e.append(n);const r=document.createElement("span");return e.append(r),r};n("Activity");let o=[["have","Have:"],["availability","Availability:"],["uploaded","Uploaded:"],["downloaded","Downloaded:"],["state","State:"],["running_time","Running time:"],["remaining_time","Remaining:"],["last_activity","Last activity:"],["error","Error:"]];for(const[e,n]of o)t[e]=r(n);n("Details"),o=[["size","Size:"],["location","Location:"],["hash","Hash:"],["privacy","Privacy:"],["origin","Origin:"],["magnetLink","Magnet:"],["comment","Comment:"],["labels","Labels:"]];for(const[e,n]of o)t[e]=r(n);return t}static _createListPage(e,t){const n=document.createElement("div"),r=document.createElement(e);return r.id=t,n.append(r),{list:r,root:n}}static _createTiersPage(){return L._createListPage("div","inspector-tiers-list")}static _createFilesPage(){return L._createListPage("ul","inspector-file-list")}static _createPeersPage(){const e=document.createElement("table");e.classList.add("peer-list");const t=document.createElement("thead"),n=document.createElement("tr"),r=["","Up","Down","Done","Status","Address","Client"];for(const[e,t]of r.entries()){const r=document.createElement("th"),o=T[e];"encryption"===o&&(r.dataset.encrypted=!0),r.classList.add(o),h(r,t),n.append(r)}const o=document.createElement("tbody");return t.append(n),e.append(t),e.append(o),{root:e,tbody:o}}_create(){const e={files:L._createFilesPage(),info:L._createInfoPage(),peers:L._createPeersPage(),tiers:L._createTiersPage()};return{...s("inspector",[["inspector-tab-info",e.info.root,"Info"],["inspector-tab-peers",e.peers.root,"Peers"],["inspector-tab-tiers",e.tiers.root,"Tiers"],["inspector-tab-files",e.files.root,"Files"]],(e=>{this.current_page=e,this._updateCurrentPage()}).bind(this)),...e}}_setTorrents(e){const t="dataChanged",n=this.torrent_listener;for(const e of this.torrents)e.removeEventListener(t,n);this.torrents=[...e];for(const e of this.torrents)e.addEventListener(t,n);this._refreshTorrents(),this._updateCurrentPage()}static _needsExtraInfo(e){return e.some((e=>!e.hasExtraInfo()))}_refreshTorrents(){const{controller:e,torrents:t}=this,n=t.map((e=>e.getId()));if(n&&n.length>0){const r=["id",...D.Fields.StatsExtra];L._needsExtraInfo(t)&&r.push(...D.Fields.InfoExtra),e.updateTorrents(n,r)}}_updateCurrentPage(){const{current_page:e,elements:t}=this;switch(e){case t.files.root:this._updateFiles();break;case t.info.root:this._updateInfo();break;case t.peers.root:this._updatePeers();break;case t.tiers.root:this._updateTiers();break;default:console.warn("unexpected page"),console.log(e)}}_updateInfo(){const e="None",t="Mixed",n="Unknown",r=_,s=Date.now(),{elements:i,torrents:a}=this,l=a.reduce(((e,t)=>e+t.getSizeWhenDone()),0);let c=null;if(0===a.length)c=e;else if(a.every((e=>e.isFinished())))c="Finished";else if(a.every((e=>e.isStopped())))c="Paused";else{const e=e=>e.getStateString(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}h(i.info.state,c);const d=c;if(0===a.length)c=e;else{const e=a.reduce(((e,t)=>e+t.getHaveValid()),0),t=a.reduce(((e,t)=>e+t.getHaveUnchecked()),0),n=a.reduce(((e,t)=>e+t.getLeftUntilDone()),0),o=100*(l?(l-n)/l:1);c=r.percentString(o),c=t?`${r.size(e)} of ${r.size(l)} (${c}%), ${r.size(t)} Unverified`:n?`${r.size(e)} of ${r.size(l)} (${c}%)`:`${r.size(e)} (100%)`}if(h(i.info.have,c),0===a.length)c=e;else if(0===l)c=e;else{const e=a.reduce(((e,t)=>t.getHave()+t.getDesiredAvailable()),0);c=`${r.percentString(100*e/l)}%`}if(h(i.info.availability,c),0===a.length)c=e;else{const e=a.reduce(((e,t)=>e+t.getDownloadedEver()),0),t=a.reduce(((e,t)=>e+t.getFailedEver()),0);c=t?`${r.size(e)} (+${r.size(t)} discarded after failed checksum)`:r.size(e)}if(h(i.info.downloaded,c),0===a.length)c=e;else{const e=a.reduce(((e,t)=>e+t.getUploadedEver()),0),t=a.reduce(((e,t)=>e+t.getSizeWhenDone()),0)||a.reduce(((e,t)=>e+t.getHaveValid()),0);c=`${r.size(e)} (Ratio: ${r.ratioString(o.ratio(e,t))})`}if(h(i.info.uploaded,c),0===a.length)c=e;else if(a.every((e=>e.isStopped())))c=d;else{const e=e=>e.getStartDate(),n=e(a[0]);c=a.every((t=>e(t)===n))?r.timeInterval(s/1e3-n):t}if(h(i.info.running_time,c),0===a.length)c=e;else{const e=e=>e.getETA(),o=e(a[0]);c=a.every((t=>e(t)===o))?o<0?n:r.timeInterval(o):t}if(h(i.info.remaining_time,c),0===a.length)c=e;else{const t=a.reduce(((e,t)=>Math.max(e,t.getLastActivity())),-1),n=Math.floor(s/1e3);if(0e.getErrorString(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}if(h(i.info.error,c||e),0===a.length)c=e;else{const e=a.reduce(((e,t)=>e+t.getTotalSize()),0);if(e){const t=e=>e.getPieceSize(),n=a.reduce(((e,t)=>e+t.getPieceCount()),0),o=r.number(n),s=t(a[0]);c=a.every((e=>t(e)===s))?`${r.size(e)} (${o} pieces @ ${r.mem(s)})`:`${r.size(e)} (${o} pieces)`}else c="None"}if(h(i.info.size,c),0===a.length)c=e;else{const e=e=>e.getHashString(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}if(h(i.info.hash,c),0===a.length)c=e;else{const e=e=>e.getPrivateFlag(),n=e(a[0]);c=a.every((t=>e(t)===n))?n?"Private to this tracker -- DHT and PEX disabled":"Public torrent":t}if(h(i.info.privacy,c),0===a.length)c=e;else{const e=e=>e.getComment(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}if(c=c||e,c.startsWith("https://")||c.startsWith("http://")?(c=encodeURI(c),o.setInnerHTML(i.info.comment,`${c}`)):h(i.info.comment,c),c=0===a.length?e:a[0].getLabels().join(", "),h(i.info.labels,c),0===a.length)c=e;else{let e=e=>e.getCreator();const r=e(a[0]),o=!a.every((t=>e(t)===r));e=e=>e.getDateCreated();const s=e(a[0]),i=!a.every((t=>e(t)===s)),l=!r||0===r.length,d=!s;c=o||i?t:l&&d?n:d&&!l?`Created by ${r}`:l&&!d?`Created on ${new Date(1e3*s).toDateString()}`:`Created by ${r} on ${new Date(1e3*s).toDateString()}`}if(h(i.info.origin,c),0===a.length)c=e;else{const e=e=>e.getDownloadDir(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}if(h(i.info.location,c),0===a.length)h(i.info.magnetLink,e);else if(a.length>1)h(i.info.magnetLink,t);else{const e=a[0].getMagnetLink();o.setInnerHTML(i.info.magnetLink,``)}}static _peerStatusTitle(e){const t=Object.seal({"?":"We unchoked this peer, but they're not interested",D:"Downloading from this peer",E:"Encrypted Connection",H:"Peer was discovered through Distributed Hash Table (DHT)",I:"Peer is an incoming connection",K:"Peer has unchoked us, but we're not interested",O:"Optimistic unchoke",T:"Peer is connected via uTP",U:"Uploading to peer",X:"Peer was discovered through Peer Exchange (PEX)",d:"We would download from this peer if they'd let us",u:"We would upload to this peer if they'd ask"});return[...e].filter((e=>t[e])).map((e=>`${e}: ${t[e]}`)).join("\n")}_updatePeers(){const e=_,{elements:t,torrents:n}=this,{tbody:r}=t.peers,o=[(e,t)=>{t.dataset.encrypted=e.isEncrypted},(t,n)=>h(n,t.rateToPeer?e.speedBps(t.rateToPeer):""),(t,n)=>h(n,t.rateToClient?e.speedBps(t.rateToClient):""),(e,t)=>h(t,`${Math.floor(100*e.progress)}%`),(e,t)=>{h(t,e.flagStr),t.setAttribute("title",L._peerStatusTitle(e.flagStr))},(e,t)=>h(t,e.address),(e,t)=>h(t,e.clientName)],s=[];for(const e of n){const t=document.createElement("tr");t.classList.add("torrent-row");const n=document.createElement("td");n.setAttribute("colspan",o.length),h(n,e.getName()),t.append(n),s.push(t);for(const t of e.getPeers()){const e=document.createElement("tr");e.classList.add("peer-row");for(const[n,r]of o.entries()){const o=document.createElement("td");o.classList.add(T[n]),r(t,o),e.append(o)}s.push(e)}for(;r.firstChild;)r.firstChild.remove();r.append(...s)}}static getAnnounceState(e){switch(e.announceState){case D._TrackerActive:return"Announce in progress";case D._TrackerWaiting:{const t=Math.max(0,e.nextAnnounceTime-Date.now()/1e3);return`Next announce in ${_.timeInterval(t)}`}case D._TrackerQueued:return"Announce is queued";case D._TrackerInactive:return e.isBackup?"Tracker will be used as a backup":"Announce not scheduled";default:return`unknown announce state: ${e.announceState}`}}static lastAnnounceStatus(e){let t="Last Announce",n=["N/A"];if(e.hasAnnounced){const r=_.timestamp(e.lastAnnounceTime);e.lastAnnounceSucceeded?n=[r," (got ",_.countString("peer","peers",e.lastAnnouncePeerCount),")"]:(t="Announce error",n=[e.lastAnnounceResult?`${e.lastAnnounceResult} - `:"",r])}return{label:t,value:n.join("")}}static lastScrapeStatus(e){let t="Last Scrape",n="N/A";if(e.hasScraped){const r=_.timestamp(e.lastScrapeTime);e.lastScrapeSucceeded?n=r:(t="Scrape error",n=(e.lastScrapeResult?`${e.lastScrapeResult} - `:"")+r)}return{label:t,value:n}}_updateTiers(){const e="N/A",{list:t}=this.elements.tiers,{torrents:n}=this,r=[];for(const t of n){const o=document.createElement("div");if(o.classList.add("inspector-group"),r.push(o),n.length>1){const e=document.createElement("div");e.classList.add("tier-list-torrent"),h(e,t.getName()),r.push(e)}for(const[n,o]of t.getTrackers().entries()){const t=L.getAnnounceState(o),s=L.lastAnnounceStatus(o),i=L.lastScrapeStatus(o),a=document.createElement("div");a.classList.add("tier-list-row",n%2?"odd":"even");let l=document.createElement("div");l.classList.add("tier-list-tracker"),h(l,`${o.sitename||o.host||o.announce} - tier ${o.tier+1}`),l.setAttribute("title",o.announce),a.append(l),l=document.createElement("div"),l.classList.add("tier-announce"),h(l,`${s.label}: ${s.value}`),a.append(l),l=document.createElement("div"),l.classList.add("tier-seeders"),h(l,`Seeders: ${o.seederCount>-1?o.seederCount:e}`),a.append(l),l=document.createElement("div"),l.classList.add("tier-state"),h(l,t),a.append(l),l=document.createElement("div"),l.classList.add("tier-leechers"),h(l,`Leechers: ${o.leecherCount>-1?o.leecherCount:e}`),a.append(l),l=document.createElement("div"),l.classList.add("tier-scrape"),h(l,`${i.label}: ${i.value}`),a.append(l),l=document.createElement("div"),l.classList.add("tier-downloads"),h(l,`Downloads: ${o.downloadCount>-1?o.downloadCount:e}`),a.append(l),r.push(a)}}for(;t.firstChild;)t.firstChild.remove();t.append(...r)}_changeFileCommand(e,t){const{controller:n,file_torrent:r}=this,o=r.getId();n.changeFileCommand(o,e,t)}_onFileWantedToggled(e){const{indices:t,wanted:n}=e;this._changeFileCommand(t,n?"files-wanted":"files-unwanted")}_onFilePriorityToggled(e){const{indices:t,priority:n}=e;let r=null;switch(n.toString()){case"-1":r="priority-low";break;case"1":r="priority-high";break;default:r="priority-normal"}this._changeFileCommand(t,r)}_clearFileList(){const{list:e}=this.elements.files;for(;e.firstChild;)e.firstChild.remove();this.file_torrent=null,this.file_torrent_n=null,this.file_rows=null}static createFileTreeModel(e){const t=[],n={children:{},file_indices:[]};for(const[r,o]of e.getFiles().entries()){const{name:e}=o,s=e.split("/");let i=n;for(const[e,t]of s.entries()){let n=i.children[t];n||(i.children[t]=n={children:{},depth:e,file_indices:[],name:t,parent:i}),i=n}i.file_index=r,delete i.children,t.push(i)}for(const e of t){const{file_index:t}=e;let n=e;do{n.file_indices.push(t),n=n.parent}while(n)}return n}addNodeToView(e,t,n,r){const o=new S(e,n.depth,n.name,n.file_indices,r%2);o.addEventListener("wantedToggled",this._onFileWantedToggled.bind(this)),o.addEventListener("priorityToggled",this._onFilePriorityToggled.bind(this)),this.file_rows.push(o),t.append(o.getElement())}addSubtreeToView(e,t,n,r){if(n.parent&&this.addNodeToView(e,t,n,r++),n.children)for(const o of Object.values(n.children))r=this.addSubtreeToView(e,t,o,r);return r}_updateFiles(){const{list:e}=this.elements.files,{file_rows:t,file_torrent:n,file_torrent_n:r,torrents:o}=this;if(1!==o.length)return void this._clearFileList();const[s]=o,i=s.getFiles().length;if(s!==n||i!==r){this._clearFileList(),this.file_torrent=s,this.file_torrent_n=i,this.file_rows=[];const t=document.createDocumentFragment(),n=L.createFileTreeModel(s);this.addSubtreeToView(s,t,n,0),e.append(t)}else for(const e of t)e.refresh()}}let M="";class P extends EventTarget{constructor(e,t){super(),this.controller=e,this.remote=t,this.elements={},this.torrents=[],this.show()}show(){const e=this.controller.getSelectedTorrents();0!==e.length&&(M=M||e[0].getDownloadDir(),this.torrents=e,this.elements=P._create(),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.entry.value=M,document.body.append(this.elements.root),this.elements.entry.focus())}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.controller,delete this.remote,delete this.elements,delete this.torrents}_onDismiss(){this.close()}_onConfirm(){const e=this.torrents.map((e=>e.getId())),t=this.elements.entry.value.trim();M=t,this.remote.moveTorrents(e,t),this.close()}static _create(){const e=i("move-dialog");e.root.setAttribute("aria-label","Move Torrent"),e.heading.textContent="Set Torrent Location",confirm.textContent="Apply";const t=document.createElement("label");t.setAttribute("for","torrent-path"),t.textContent="Location:",e.workarea.append(t);const n=document.createElement("input");return n.setAttribute("type","text"),n.id="torrent-path",e.entry=n,e.workarea.append(n),e}}class z extends EventTarget{constructor(e){super(),this.elements=z._create(e),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.options=e,document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){if(!this.closed){this.elements.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}static _create(e){const{heading:t,message:n}=e,r=i("confirm-dialog");return r.confirm.remove(),delete r.confirm,r.heading.textContent=t,r.workarea.textContent=n,r}}class F extends EventTarget{constructor(e,t,n=""){super(),this.controller=e,this.remote=t,this.elements=this._create(n),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),this._updateFreeSpaceInAddDialog(),document.body.append(this.elements.root),this.elements.url_input.focus()}close(){if(!this.closed){clearInterval(this.interval),this.elements.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}_updateFreeSpaceInAddDialog(){const e=this.elements.folder_input.value;this.remote.getFreeSpace(e,((e,t)=>{if(!this.closed){const e=t>0?`${_.size(t)} Free`:"";this.elements.freespace.textContent=e}}))}_onConfirm(){const{controller:e,elements:t,remote:n}=this,{file_input:r,folder_input:o,start_input:s,url_input:i}=t,a=!s.checked,l=o.value.trim();for(const t of r.files){const r=new FileReader;r.addEventListener("load",(r=>{const o=r.target.result,s="base64,",i=o.indexOf(s);if(-1===i)return;const c={arguments:{"download-dir":l,metainfo:o.slice(Math.max(0,i+s.length)),paused:a},method:"torrent-add"};n.sendRequest(c,(n=>{"success"!==n.result&&(alert(`Error adding "${t.name}": ${n.result}`),e.setCurrentPopup(new z({heading:`Error adding "${t.name}"`,message:n.result})))}))})),r.readAsDataURL(t)}let c=i.value.trim();if(c.length>0){/^[\da-f]{40}$/i.test(c)&&(c=`magnet:?xt=urn:btih:${c}`);const t={arguments:{"download-dir":l,filename:c,paused:a},method:"torrent-add"};n.sendRequest(t,(t=>{"success"!==t.result&&e.setCurrentPopup(new z({heading:`Error adding "${c}"`,message:t.result}))}))}this._onDismiss()}_create(e){const t=i(),{confirm:n,root:r,heading:o,workarea:s}=t;r.classList.add("open-torrent"),o.textContent="Add Torrents",n.textContent="Add";let l=a(),c=document.createElement("label");c.setAttribute("for",l),c.textContent="Please select torrent files to add:",s.append(c);let d=document.createElement("input");d.type="file",d.name="torrent-files[]",d.id=l,d.multiple="multiple",s.append(d),t.file_input=d,l=a(),c=document.createElement("label"),c.setAttribute("for",l),c.textContent="Or enter a URL:",s.append(c),d=document.createElement("input"),d.type="url",d.id=l,d.value=e,s.append(d),t.url_input=d,d.addEventListener("keyup",(({key:e})=>{"Enter"===e&&n.click()})),l=a(),c=document.createElement("label"),c.id="add-dialog-folder-label",c.for=l,c.textContent="Destination folder: ",s.append(c);const A=document.createElement("span");A.id="free-space-text",c.append(A),s.append(c),t.freespace=A,d=document.createElement("input"),d.type="text",d.id="add-dialog-folder-input",d.addEventListener("change",(()=>this._updateFreeSpaceInAddDialog())),d.value=this.controller.session_properties["download-dir"],s.append(d),t.folder_input=d;const p=document.createElement("div");s.append(p);const g=document.createElement("input");return g.type="checkbox",g.id="auto-start-check",g.checked=this.controller.shouldAddedTorrentsStart(),p.append(g),t.start_input=g,c=document.createElement("label"),c.id="auto-start-label",c.setAttribute("for",g.id),c.textContent="Start when added",p.append(c),t}}const N="speed-limit-down",R="speed-limit-down-enabled",G="queue-move-bottom",j="queue-move-down",U="queue-move-top",H="queue-move-up",W="../rpc",$="alt-speed-down",Z="alt-speed-enabled",O="alt-speed-up",Q="speed-limit-up",J="speed-limit-up-enabled";class q{constructor(e){this._controller=e,this._error="",this._session_id=""}sendRequest(e,t,n){const r=new Headers;r.append("cache-control","no-cache"),r.append("content-type","application/json"),r.append("pragma","no-cache"),this._session_id&&r.append(q._SessionHeader,this._session_id);let o=null;fetch(W,{body:JSON.stringify(e),headers:r,method:"POST"}).then((e=>{if(o=e,409===e.status){const t=new Error(q._SessionHeader);throw t.header=e.headers.get(q._SessionHeader),t}return e.json()})).then((e=>{t&&t.call(n,e,o)})).catch((r=>{if(r.message===q._SessionHeader)return this._session_id=r.header,void this.sendRequest(e,t,n);console.trace(r),this._controller.togglePeriodicSessionRefresh(!1),this._controller.setCurrentPopup(new z({heading:"Connection failed",message:"Could not connect to the server. You may need to reload the page to reconnect."}))}))}loadDaemonPrefs(e,t){this.sendRequest({method:"session-get"},e,t)}checkPort(e,t){this.sendRequest({method:"port-test"},e,t)}renameTorrent(e,t,n,r,o){const s={arguments:{ids:e,name:n,path:t},method:"torrent-rename-path"};this.sendRequest(s,r,o)}setLabels(e,t,n){const r={ids:e,labels:t};this.sendRequest({arguments:r,method:"torrent-set"},n)}loadDaemonStats(e,t){this.sendRequest({method:"session-stats"},e,t)}updateTorrents(e,t,n,r){const o={arguments:{fields:t,format:"table"},method:"torrent-get"};e&&(o.arguments.ids=e),this.sendRequest(o,(e=>{const t=e.arguments;n.call(r,t.torrents,t.removed)}))}getFreeSpace(e,t,n){const r={arguments:{path:e},method:"free-space"};this.sendRequest(r,(e=>{const r=e.arguments;t.call(n,r.path,r["size-bytes"])}))}changeFileCommand(e,t,n){const r={ids:[e]};r[n]=t,this.sendRequest({arguments:r,method:"torrent-set"},(()=>{this._controller.refreshTorrents([e])}))}sendTorrentSetRequests(e,t,n,r,o){n||(n={}),n.ids=t;const s={arguments:n,method:e};this.sendRequest(s,r,o)}sendTorrentActionRequests(e,t,n,r){this.sendTorrentSetRequests(e,t,null,n,r)}startTorrents(e,t,n,r){const o=t?"torrent-start-now":"torrent-start";this.sendTorrentActionRequests(o,e,n,r)}stopTorrents(e,t,n){this.sendTorrentActionRequests("torrent-stop",e,t,n)}moveTorrents(e,t,n,r){this.sendTorrentSetRequests("torrent-set-location",e,{location:t,move:!0},n,r)}removeTorrents(e,t){const n={arguments:{"delete-local-data":t,ids:[]},method:"torrent-remove"};if(e)for(let t=0,r=e.length;t{this._controller.refreshTorrents()}))}verifyTorrents(e,t,n){this.sendTorrentActionRequests("torrent-verify",e,t,n)}reannounceTorrents(e,t,n){this.sendTorrentActionRequests("torrent-reannounce",e,t,n)}addTorrentByUrl(e,t){/^[\da-f]{40}$/i.test(e)&&(e=`magnet:?xt=urn:btih:${e}`);const n={arguments:{filename:e,paused:t.paused},method:"torrent-add"};this.sendRequest(n,(()=>{this._controller.refreshTorrents()}))}savePrefs(e){const t={arguments:e,method:"session-set"};this.sendRequest(t,(()=>{this._controller.loadDaemonPrefs()}))}updateBlocklist(){this.sendRequest({method:"blocklist-update"},(()=>{this._controller.loadDaemonPrefs()}))}moveTorrentsToTop(e,t,n){this.sendTorrentActionRequests(U,e,t,n)}moveTorrentsToBottom(e,t,n){this.sendTorrentActionRequests(G,e,t,n)}moveTorrentsUp(e,t,n){this.sendTorrentActionRequests(H,e,t,n)}moveTorrentsDown(e,t,n){this.sendTorrentActionRequests(j,e,t,n)}}function Y(e,t){const n=document.createElement("fieldset");n.classList.add("section",e);const r=document.createElement("legend");return r.classList.add("title"),r.textContent=t,n.append(r),n}function X(e,t,n,r){const o=document.createElement("button");return o.textContent=t,o.addEventListener("click",r),e.append(o),o.dataset.action=n,o}q._SessionHeader="X-Transmission-Session-Id";class V extends EventTarget{constructor(e,t,n,r){super(),this.action_listener=this._onActionChange.bind(this),this.action_manager=r,this.action_manager.addEventListener("change",this.action_listener),this.prefs_listener=this._onPrefsChange.bind(this),this.prefs=t,this.prefs.addEventListener("change",this.prefs_listener),this.closed=!1,this.remote=n,this.name="overflow-menu",this.session_listener=this._onSessionChange.bind(this),this.session_manager=e,this.session_manager.addEventListener("session-change",this.session_listener);const{session_properties:o}=e;Object.assign(this,this._create(o)),this.outside=new m(this.root),this.outside.addEventListener("click",(()=>this.close())),Object.seal(this),this.show()}show(){document.body.append(this.root)}close(){if(!this.closed){this.outside.stop(),this.session_manager.removeEventListener("session-change",this.session_listener),this.action_manager.removeEventListener("change",this.action_listener),this.prefs.removeEventListener("change",this.prefs_listener),this.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))this[e]=null;this.closed=!0}}_onSessionChange(e){const{alt_speed_check:t}=this.elements,{session_properties:n}=e;t.checked=n[Z]}_onPrefsChange(e){switch(e.key){case b.SortDirection:case b.SortMode:this.root.querySelector(`[data-pref="${e.key}"]`).value=e.value}}_onActionChange(e){const t=this.actions[e.action];t&&this._updateElement(t)}_updateElement(e){if(e.dataset.action){const{action:t}=e.dataset,n=this.action_manager.keyshortcuts(t);n&&e.setAttribute("aria-keyshortcuts",n),p(e,this.action_manager.isEnabled(t))}}_onClick(e){const{action:t,pref:n}=e.target.dataset;t?this.action_manager.click(t):n?this.prefs[n]=e.target.value:(console.log("unhandled"),console.log(e),console.trace())}_create(e){const t={},n={},r=this._onClick.bind(this),o=document.createElement("div");o.classList.add("overflow-menu","popup");let s=Y("display","Display");o.append(s);let i=document.createElement("div");i.id="display-options",s.append(i);let a=document.createElement("div");a.classList.add("table-row"),i.append(a);let l=document.createElement("label");l.id="display-sort-mode-label",l.textContent="Sort by",a.append(l);let c=document.createElement("select");c.id="display-sort-mode-select",c.dataset.pref=b.SortMode,a.append(c);const d=[[b.SortByActivity,"Activity"],[b.SortByAge,"Age"],[b.SortByName,"Name"],[b.SortByProgress,"Progress"],[b.SortByQueue,"Queue order"],[b.SortByRatio,"Ratio"],[b.SortBySize,"Size"],[b.SortByState,"State"]];for(const[e,t]of d){const n=document.createElement("option");n.value=e,n.textContent=t,c.append(n)}l.setAttribute("for",c.id),c.value=this.prefs.sort_mode,c.addEventListener("change",(e=>{this.prefs.sort_mode=e.target.value})),a=document.createElement("div"),a.classList.add("table-row"),i.append(a);let A=document.createElement("input");A.id="display-sort-reverse-check",A.dataset.pref=b.SortDirection,A.type="checkbox",a.append(A),l=document.createElement("label"),l.id="display-sort-reverse-label",l.setAttribute("for",A.id),l.textContent="Reverse sort",a.append(l),A.checked=this.prefs.sort_direction!==b.SortAscending,A.addEventListener("input",(e=>{this.prefs.sort_direction=e.target.checked?b.SortDescending:b.SortAscending})),a=document.createElement("div"),a.classList.add("table-row"),i.append(a);const p="toggle-compact-rows";A=document.createElement("input"),A.id="display-compact-check",A.dataset.action=p,A.type="checkbox",a.append(A),l=document.createElement("label"),l.id="display-compact-label",l.for=A.id,l.setAttribute("for",A.id),l.textContent=this.action_manager.text(p),a.append(l),A.checked=this.prefs.display_mode===b.DisplayCompact,A.addEventListener("input",(e=>{const{checked:t}=e.target;this.prefs.display_mode=t?b.DisplayCompact:b.DisplayFull})),a=document.createElement("div"),a.classList.add("table-row"),i.append(a),A=document.createElement("input"),A.id="display-fullscreen-check",A.type="checkbox";const g=()=>null!==document.fullscreenElement;A.checked=g(),A.addEventListener("input",(()=>{g()?document.exitFullscreen():document.body.requestFullscreen()})),document.addEventListener("fullscreenchange",(()=>{A.checked=g()})),a.append(A),l=document.createElement("label"),l.id="display-fullscreen-label",l.for=A.id,l.setAttribute("for",A.id),l.textContent="Fullscreen",a.append(l),s=Y("speed","Speed Limit"),o.append(s),i=document.createElement("div"),i.id="speed-options",s.append(i),a=document.createElement("div"),a.classList.add("speed-up"),i.append(a),l=document.createElement("label"),l.id="speed-up-label",l.textContent="Upload:",a.append(l);const u="Unlimited";c=document.createElement("select"),c.id="speed-up-select",a.append(c);const m=["50","100","250","500","1000","2500","5000","10000",u];for(const t of[...new Set(m).add(`${e[Q]}`).values()].sort(((e,t)=>e-t))){const e=document.createElement("option");e.value=t,e.textContent=t===u?u:_.speed(t),c.append(e)}l.setAttribute("for",c.id),c.value=e[J]?`${e[Q]}`:u,c.addEventListener("change",(e=>{const{value:t}=e.target;console.log(e),t===u?this.remote.savePrefs({[J]:!1}):this.remote.savePrefs({[J]:!0,[Q]:Number.parseInt(t,10)})})),a=document.createElement("div"),a.classList.add("speed-down"),i.append(a),l=document.createElement("label"),l.id="speed-down-label",l.textContent="Download:",a.append(l),c=document.createElement("select"),c.id="speed-down-select",a.append(c);for(const t of[...new Set(m).add(`${e[N]}`).values()].sort(((e,t)=>e-t))){const e=document.createElement("option");e.value=t,e.textContent=t===u?u:_.speed(t),c.append(e)}l.setAttribute("for",c.id),c.value=e[R]?`${e[N]}`:u,c.addEventListener("change",(e=>{const{value:t}=e.target;console.log(e),t===u?this.remote.savePrefs({[R]:!1}):this.remote.savePrefs({[R]:!0,[N]:Number.parseInt(t,10)})})),a=document.createElement("div"),a.classList.add("alt-speed"),i.append(a),A=document.createElement("input"),A.id="alt-speed-check",A.type="checkbox",A.checked=e[Z],A.addEventListener("change",(e=>{this.remote.savePrefs({[Z]:e.target.checked})})),a.append(A),n.alt_speed_check=A,l=document.createElement("label"),l.id="alt-speed-image",l.setAttribute("for",A.id),a.append(l),l=document.createElement("label"),l.id="alt-speed-label",l.setAttribute("for",A.id),l.textContent="Use Temp limits",a.append(l),l=document.createElement("label"),l.id="alt-speed-values-label",l.setAttribute("for",A.id);const h=_.speed(e[O]),C=_.speed(e[$]);l.textContent=`(${h} up, ${C} down)`,a.append(l),s=Y("actions","Actions"),o.append(s);for(const e of["show-preferences-dialog","pause-all-torrents","start-all-torrents"]){const n=this.action_manager.text(e);t[e]=X(s,n,e,r)}s=Y("info","Info"),o.append(s),i=document.createElement("div"),s.append(i);for(const e of["show-about-dialog","show-shortcuts-dialog","show-statistics-dialog"]){const n=this.action_manager.text(e);t[e]=X(i,n,e,r)}s=Y("links","Links"),o.append(s),i=document.createElement("ul"),s.append(i);let f=document.createElement("a");f.href="https://transmissionbt.com/",f.tabindex="0",f.textContent="Homepage";let v=document.createElement("li");return v.append(f),i.append(v),f=document.createElement("a"),f.href="https://transmissionbt.com/donate/",f.tabindex="0",f.textContent="Tip Jar",v=document.createElement("li"),v.append(f),i.append(v),f=document.createElement("a"),f.href="https://github.com/transmission/transmission/",f.tabindex="0",f.textContent="Source Code",v=document.createElement("li"),v.append(f),i.append(v),this._updateElement=this._updateElement.bind(this),{actions:t,elements:n,root:o}}}class K extends EventTarget{static _initTimeDropDown(e){for(let t=0;t<96;++t){const n=15*t,r=`${Number.parseInt(t/4,10)}:${t%4*15||"00"}`;e.options[t]=new Option(r,n)}}static _initDayDropDown(e){const t=[["Everyday","127"],["Weekdays","62"],["Weekends","65"],["Sunday","1"],["Monday","2"],["Tuesday","4"],["Wednesday","8"],["Thursday","16"],["Friday","32"],["Saturday","64"]];for(let n=0;t[n];++n){const[r,o]=t[n];e.options[n]=new Option(r,o)}}_checkPort(){const e=this.elements.network.port_status_label;delete e.dataset.open,h(e,"Checking..."),this.remote.checkPort(this._onPortChecked,this)}_onPortChecked(e){const t=this.elements.network.port_status_label,n=e.arguments["port-is-open"];t.dataset.open=n,h(t,n?"Open":"Closed")}_setBlocklistButtonEnabled(e){const t=this.elements.peers.blocklist_update_button;p(t,e),t.value=e?"Update":"Updating..."}static _getValue(e){if("TEXTAREA"===e.tagName)return e.value;switch(e.type){case"checkbox":case"radio":return e.checked;case"number":case"text":case"url":{const t=e.value;return Number.parseInt(t,10).toString()===t?Number.parseInt(t,10):Number.parseFloat(t).toString()===t?Number.parseFloat(t):t}default:return null}}_onControlChanged(e){const{key:t}=e.target.dataset;this.remote.savePrefs({[t]:K._getValue(e.target)}),"peer-port"!==t&&"port-forwarding-enabled"!==t||this._checkPort()}_onDialogClosed(){this.dispatchEvent(new Event("closed"))}_update(e){if(e){this._setBlocklistButtonEnabled(!0);for(const[t,n]of Object.entries(e))for(const e of this.elements.root.querySelectorAll(`[data-key="${t}"]`))if("blocklist-size"===t){const t=_.number(n);e.innerHTML=`Blocklist has ${t} rules`,h(this.elements.peers.blocklist_update_button,"Update")}else switch(e.type){case"checkbox":case"radio":e.checked!==n&&(e.checked=n,e.dispatchEvent(new Event("change")));break;case"text":case"textarea":case"url":case"email":case"number":case"search":e.value!=n&&e!==document.activeElement&&(e.value=n,e.dispatchEvent(new Event("change")));break;case"select-one":e.value!==n&&(e.value=n,e.dispatchEvent(new Event("change")));break;default:console.log(e.type)}}}shouldAddedTorrentsStart(){return this.data.elements.root.find("#start-added-torrents")[0].checked}static _createCheckAndLabel(e,t){const n=document.createElement("div");n.id=e;const r=document.createElement("input");r.id=a(),r.type="checkbox",n.append(r);const o=document.createElement("label");return o.textContent=t,o.setAttribute("for",r.id),n.append(o),{check:r,label:o,root:n}}static _enableIfChecked(e,t){const n=()=>{"INPUT"===e.tagName?p(e,t.checked):e.classList.toggle("disabled",!t.checked)};t.addEventListener("change",n),n()}static _getProtocolHandlerRegistered(){return"true"===localStorage.getItem("protocol-handler-registered")}static _updateProtocolHandlerButton(e){e.removeAttribute("disabled"),e.removeAttribute("title"),K._getProtocolHandlerRegistered()?(e.textContent="Remove Browser Handler","unregisterProtocolHandler"in navigator||e.setAttribute("title","Your browser does not support removing protocol handlers. This button only allows you to re-register a handler.")):(e.textContent="Add Browser Handler",e.removeAttribute("title"),"registerProtocolHandler"in navigator||(e.setAttribute("disabled",!0),e.setAttribute("title","Your browser does not support protocol handlers")))}static _toggleProtocolHandler(e){const t=new URL(window.location.href);t.search="addtorrent=%s",this._getProtocolHandlerRegistered()?(navigator.unregisterProtocolHandler?.("magnet",t.toString()),localStorage.removeItem("protocol-handler-registered"),K._updateProtocolHandlerButton(e)):(navigator.registerProtocolHandler("magnet",t.toString(),"Transmission Web"),localStorage.setItem("protocol-handler-registered","true"),K._updateProtocolHandlerButton(e))}static _createTorrentsPage(){const e=document.createElement("div");e.classList.add("prefs-torrents-page");let t=document.createElement("div");t.textContent="Downloading",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Download to:",e.append(t);let n=document.createElement("input");n.type="text",n.id=a(),n.dataset.key="download-dir",t.setAttribute("for",n.id),e.append(n);const r=n;let o=K._createCheckAndLabel("incomplete-dir-div","Use temporary folder:");o.check.title="Separate folder to temporarily store downloads until they are complete.",o.check.dataset.key="incomplete-dir-enabled",o.label.title=o.check.title,e.append(o.root);const s=o.check;n=document.createElement("input"),n.type="text",n.dataset.key="incomplete-dir",e.append(n),K._enableIfChecked(n,o.check);const i=n;o=K._createCheckAndLabel("autostart-div","Start when added"),o.check.dataset.key="start-added-torrents",e.append(o.root);const l=o.check;o=K._createCheckAndLabel("suffix-div",'Append "part" to incomplete files\' names'),o.check.dataset.key="rename-partial-files",e.append(o.root);const c=o.check;o=K._createCheckAndLabel("download-queue-div","Download queue size:"),o.check.dataset.key="download-queue-enabled",e.append(o.root);const d=o.check;n=document.createElement("input"),n.type="number",n.dataset.key="download-queue-size",e.append(n),K._enableIfChecked(n,o.check);const A=n;t=document.createElement("div"),t.textContent="Seeding",t.classList.add("section-label"),e.append(t),o=K._createCheckAndLabel("stop-ratio-div","Stop seeding at ratio:"),o.check.dataset.key="seedRatioLimited",e.append(o.root);const p=o.check;n=document.createElement("input"),n.type="number",n.min="0.1",n.step="any",n.dataset.key="seedRatioLimit",e.append(n),K._enableIfChecked(n,o.check);const g=n;o=K._createCheckAndLabel("stop-idle-div","Stop seeding if idle for N mins:"),o.check.dataset.key="idle-seeding-limit-enabled",e.append(o.root);const u=o.check;n=document.createElement("input"),n.type="number",n.min="0.1",n.step="any",n.dataset.key="idle-seeding-limit",e.append(n),K._enableIfChecked(n,o.check);const m=n;t=document.createElement("div"),t.textContent="Magnet Protocol Handler",t.classList.add("section-label"),e.append(t);const h=document.createElement("button");h.classList.add("register-handler-button"),K._updateProtocolHandlerButton(h),e.append(h);return{autostart_check:l,download_dir:r,download_queue_check:d,download_queue_input:A,incomplete_dir_check:s,incomplete_dir_input:i,register_handler_button:h,root:e,stop_idle_check:u,stop_idle_input:m,stop_ratio_check:p,stop_ratio_input:g,suffix_check:c}}static _createSpeedPage(){const e=document.createElement("div");e.classList.add("prefs-speed-page");let t=document.createElement("div");t.textContent="Speed Limits",t.classList.add("section-label"),e.append(t);let n=K._createCheckAndLabel("upload-speed-div","Upload (kB/s):");n.check.dataset.key="speed-limit-up-enabled",e.append(n.root);const r=n.check;let o=document.createElement("input");o.type="number",o.dataset.key="speed-limit-up",e.append(o),K._enableIfChecked(o,n.check);const s=o;n=K._createCheckAndLabel("download-speed-div","Download (kB/s):"),n.check.dataset.key="speed-limit-down-enabled",e.append(n.root);const i=n.check;o=document.createElement("input"),o.type="number",o.dataset.key="speed-limit-down",e.append(o),K._enableIfChecked(o,n.check);const l=o;t=document.createElement("div"),t.textContent="Alternative Speed Limits",t.classList.add("section-label","alt-speed-section-label"),e.append(t),t=document.createElement("div"),t.textContent="Override normal speed limits manually or at scheduled times",t.classList.add("alt-speed-label"),e.append(t),t=document.createElement("label"),t.textContent="Upload (kB/s):",e.append(t),o=document.createElement("input"),o.type="number",o.dataset.key="alt-speed-up",o.id=a(),t.setAttribute("for",o.id),e.append(o);const c=o;t=document.createElement("label"),t.textContent="Download (kB/s):",e.append(t),o=document.createElement("input"),o.type="number",o.dataset.key="alt-speed-down",o.id=a(),t.setAttribute("for",o.id),e.append(o);const d=o;n=K._createCheckAndLabel("alt-times-div","Scheduled times"),n.check.dataset.key="alt-speed-time-enabled",e.append(n.root);const A=n.check;t=document.createElement("label"),t.textContent="From:",K._enableIfChecked(t,n.check),e.append(t);let p=document.createElement("select");p.id=a(),p.dataset.key="alt-speed-time-begin",K._initTimeDropDown(p),t.setAttribute("for",p.id),e.append(p),K._enableIfChecked(p,n.check);const g=p;t=document.createElement("label"),t.textContent="To:",K._enableIfChecked(t,n.check),e.append(t),p=document.createElement("select"),p.id=a(),p.dataset.key="alt-speed-time-end",K._initTimeDropDown(p),t.setAttribute("for",p.id),e.append(p),K._enableIfChecked(p,n.check);const u=p;t=document.createElement("label"),t.textContent="On days:",K._enableIfChecked(t,n.check),e.append(t),p=document.createElement("select"),p.id=a(),p.dataset.key="alt-speed-time-day",K._initDayDropDown(p),t.setAttribute("for",p.id),e.append(p),K._enableIfChecked(p,n.check);return{alt_days_select:p,alt_download_speed_input:d,alt_from_select:g,alt_times_check:A,alt_to_select:u,alt_upload_speed_input:c,download_speed_check:i,download_speed_input:l,root:e,upload_speed_check:r,upload_speed_input:s}}static _createPeersPage(){const e=document.createElement("div");e.classList.add("prefs-peers-page");let t=document.createElement("div");t.textContent="Connections",t.classList.add("section-label"),e.append(t);let n=K._createCheckAndLabel("max-peers-per-torrent-div","Max peers per torrent:");e.append(n.root);const r=n.check;let o=document.createElement("input");o.type="number",o.dataset.key="peer-limit-per-torrent",e.append(o),K._enableIfChecked(o,n.check);const s=o;n=K._createCheckAndLabel("max-peers-overall-div","Max peers overall:"),e.append(n.root);const i=n.check;o=document.createElement("input"),o.type="number",o.dataset.key="peer-limit-global",e.append(o),K._enableIfChecked(o,n.check);const l=o;t=document.createElement("div"),t.textContent="Options",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Encryption mode:",e.append(t);const c=document.createElement("select");c.id=a(),c.dataset.key="encryption",c.options[0]=new Option("Prefer encryption","preferred"),c.options[1]=new Option("Allow encryption","tolerated"),c.options[2]=new Option("Require encryption","required"),e.append(c);const d=c;n=K._createCheckAndLabel("use-pex-div","Use PEX to find more peers"),n.check.title="PEX is a tool for exchanging peer lists with the peers you're connected to.",n.check.dataset.key="pex-enabled",n.label.title=n.check.title,e.append(n.root);const A=n.check;n=K._createCheckAndLabel("use-dht-div","Use DHT to find more peers"),n.check.title="DHT is a tool for finding peers without a tracker.",n.check.dataset.key="dht-enabled",n.label.title=n.check.title,e.append(n.root);const p=n.check;n=K._createCheckAndLabel("use-lpd-div","Use LPD to find more peers"),n.check.title="LPD is a tool for finding peers on your local network.",n.check.dataset.key="lpd-enabled",n.label.title=n.check.title,e.append(n.root);const g=n.check;t=document.createElement("div"),t.textContent="Blocklist",t.classList.add("section-label"),e.append(t),n=K._createCheckAndLabel("blocklist-enabled-div","Enable blocklist:"),n.check.dataset.key="blocklist-enabled",e.append(n.root);const u=n.check;o=document.createElement("input"),o.type="url",o.value="http://www.example.com/blocklist",o.dataset.key="blocklist-url",e.append(o),K._enableIfChecked(o,n.check);const m=o;t=document.createElement("label"),t.textContent="Blocklist has {n} rules",t.dataset.key="blocklist-size",t.classList.add("blocklist-size-label"),K._enableIfChecked(t,n.check),e.append(t);const h=document.createElement("button");h.classList.add("blocklist-update-button"),h.textContent="Update",e.append(h),K._enableIfChecked(h,n.check);return{blocklist_enabled_check:u,blocklist_update_button:h,blocklist_url_input:m,dht_check:p,encryption_select:d,lpd_check:g,max_peers_overall_check:i,max_peers_overall_input:l,max_peers_per_torrent_check:r,max_peers_per_torrent_input:s,pex_check:A,root:e}}static _createNetworkPage(){const e=document.createElement("div");e.classList.add("prefs-network-page");let t=document.createElement("div");t.textContent="Listening Port",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Peer listening port:",e.append(t);const n=document.createElement("input");n.type="number",n.dataset.key="peer-port",n.id=a(),t.setAttribute("for",n.id),e.append(n);const r=n,o=document.createElement("div");o.classList.add("port-status"),t=document.createElement("label"),t.textContent="Port is",o.append(t);const s=document.createElement("label");s.textContent="?",s.classList.add("port-status-label"),o.append(s),e.append(o);let i=K._createCheckAndLabel("randomize-port","Randomize port on launch");i.check.dataset.key="peer-port-random-on-start",e.append(i.root);const l=i.check;i=K._createCheckAndLabel("port-forwarding","Use port forwarding from my router"),i.check.dataset.key="port-forwarding-enabled",e.append(i.root);const c=i.check;t=document.createElement("div"),t.textContent="Options",t.classList.add("section-label"),e.append(t),i=K._createCheckAndLabel("utp-enabled","Enable uTP for peer communication"),i.check.dataset.key="utp-enabled",e.append(i.root);const d=i.check;t=document.createElement("div"),t.textContent="Default Public Trackers",t.classList.add("section-label"),e.append(t);const A=["Trackers to use on all public torrents.","To add a backup URL, add it on the next line after a primary URL.","To add a new primary URL, add it after a blank line."];for(const n of A)t=document.createElement("label"),t.classList.add("default-trackers-label"),t.textContent=n,t.setAttribute("for","default-trackers"),e.append(t);const p=document.createElement("textarea");p.dataset.key="default-trackers",p.id="default-trackers",e.append(p);return{default_trackers_textarea:p,port_forwarding_check:c,port_input:r,port_status_label:s,random_port_check:l,root:e,utp_check:d}}static _create(){const e={network:K._createNetworkPage(),peers:K._createPeersPage(),speed:K._createSpeedPage(),torrents:K._createTorrentsPage()};return{...s("prefs-dialog",[["prefs-tab-torrent",e.torrents.root,"Torrents"],["prefs-tab-speed",e.speed.root,"Speed"],["prefs-tab-peers",e.peers.root,"Peers"],["prefs-tab-network",e.network.root,"Network"]]),...e}}constructor(e,t){super(),this.closed=!1,this.session_manager=e,this.remote=t,this.update_soon=()=>this._update(this.session_manager.session_properties),this.elements=K._create(),this.elements.peers.blocklist_update_button.addEventListener("click",(e=>{h(e.target,"Updating blocklist..."),this.remote.updateBlocklist(),this._setBlocklistButtonEnabled(!1)})),this.elements.torrents.register_handler_button.addEventListener("click",(e=>{K._toggleProtocolHandler(e.currentTarget)})),this.outside=new m(this.elements.root),this.outside.addEventListener("click",(()=>this.close())),Object.seal(this);const n=this._onControlChanged.bind(this),r=e=>{for(const t of Object.values(e))if("INPUT"===t.tagName)switch(t.type){case"checkbox":case"radio":case"number":case"text":case"url":t.addEventListener("change",n);break;default:console.trace(`unhandled input: ${t.type}`)}else"TEXTAREA"===t.tagName&&t.addEventListener("change",n)};r(this.elements.network),r(this.elements.peers),r(this.elements.speed),r(this.elements.torrents),this.session_manager.addEventListener("session-change",this.update_soon),this.update_soon(),document.body.append(this.elements.root)}close(){if(!this.closed){this.outside.stop(),this.session_manager.removeEventListener("session-change",this.update_soon),this.elements.root.remove(),dispatchEvent(new Event("close"));for(const e of Object.keys(this))this[e]=null;this.closed=!0}}}class ee extends EventTarget{constructor(e){super(),this.options=e,this.elements=ee._create(e),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){if(!this.closed){this.elements.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}_onConfirm(){const{remote:e,torrents:t,trash:n}=this.options;t.length>0&&e.removeTorrents(t,n),this.close()}static _create(e){const{trash:t}=e,{heading:n,message:r}=ee._createMessage(e),o=i("remove-dialog");return o.heading.textContent=n,o.message.textContent=r,o.confirm.textContent=t?"Trash":"Remove",o}static _createMessage(e){let t=null,n=null;const{torrents:r,trash:o}=e,[s]=r;return o&&1===r.length?(t=`Remove ${s.getName()} and delete data?`,n="All data downloaded for this torrent will be deleted. Are you sure you want to remove it?"):o?(t=`Remove ${r.length} transfers and delete data?`,n="All data downloaded for these torrents will be deleted. Are you sure you want to remove them?"):1===r.length?(t=`Remove ${s.getName()}?`,n="Once removed, continuing the transfer will require the torrent file. Are you sure you want to remove it?"):(t=`Remove ${r.length} transfers?`,n="Once removed, continuing the transfers will require the torrent files. Are you sure you want to remove them?"),{heading:t,message:n}}}class te extends EventTarget{constructor(e,t){super(),this.controller=e,this.remote=t,this.elements={},this.torrents=[],this.show()}show(){const e=this.controller.getSelectedTorrents();1===e.length?(this.torrents=e,this.elements=te._create(),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),this.elements.entry.value=e[0].getName(),document.body.append(this.elements.root),this.elements.entry.focus()):console.trace()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.controller,delete this.remote,delete this.elements,delete this.torrents}_onDismiss(){this.close()}_onConfirm(){const[e]=this.torrents,t=e.getName(),n=this.elements.entry.value;this.remote.renameTorrent([e.getId()],t,n,(t=>{"success"===t.result&&e.refresh(t.arguments)})),this.close()}static _create(){const e=i("rename-dialog");e.root.setAttribute("aria-label","Rename Torrent"),e.heading.textContent="Enter new name:",e.confirm.textContent="Rename";const t=document.createElement("label");t.setAttribute("for","torrent-rename-name"),t.textContent="Enter new name:",e.workarea.append(t);const n=document.createElement("input");return n.setAttribute("type","text"),n.id="torrent-rename-name",e.entry=n,e.workarea.append(n),e}}class ne extends EventTarget{constructor(e,t){super(),this.controller=e,this.remote=t,this.elements={},this.torrents=[],this.show()}show(){const e=this.controller.getSelectedTorrents();if(0===e.length)return void console.error("At least one selected torrent expected.");const[t]=e;this.torrents=e,this.elements=ne._create(),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),this.elements.entry.value=t.getLabels().join(", "),document.body.append(this.elements.root),this.elements.entry.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.elements,delete this.torrents}_onDismiss(){this.close()}_onConfirm(){const{torrents:e}=this,{remote:t}=this,n=e.map((e=>e.getId())),{elements:r}=this,{entry:o}=r,{value:s}=o,i=s.split(/ *, */).filter((e=>e.length>0));t.setLabels(n,i,(t=>{if("success"===t.result)for(const t of e)t.refresh({labels:i})})),this.close()}static _create(){const e=i("labels-dialog");e.root.setAttribute("aria-label","Edit Labels"),e.heading.textContent="Edit Labels:",e.confirm.textContent="Save";const t=document.createElement("label");t.setAttribute("for","torrent-labels"),t.textContent="Labels:",e.workarea.append(t);const n=document.createElement("input");return n.setAttribute("type","text"),n.id="torrent-labels",e.entry=n,e.workarea.append(n),e}}class re extends EventTarget{constructor(e){super(),this.elements=re._create(e),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.elements}_onDismiss(){this.close()}static _create(e){const t=i("shortcuts-dialog");t.root.setAttribute("aria-label","Keyboard Shortcuts");const n=document.createElement("table"),r=document.createElement("thead");n.append(r);let o=document.createElement("tr");r.append(o);let s=document.createElement("th");s.textContent="Key",o.append(s),s=document.createElement("th"),s.textContent="Action",o.append(s);const a=document.createElement("tbody");n.append(a);const l={};for(const[t,n]of e.allShortcuts().entries()){const e=t.split("+");l[[e.pop(),...e].join("+")]={name:n,shortcut:t}}for(const[,t]of Object.entries(l).sort()){const{name:n,shortcut:r}=t;o=document.createElement("tr"),a.append(o);let s=document.createElement("td");s.textContent=r.replaceAll("+"," + "),o.append(s),s=document.createElement("td"),s.textContent=e.text(n),o.append(s)}return t.heading.textContent="Transmission",t.dismiss.textContent="Close",t.heading.textContent="Keyboard shortcuts",t.message.append(n),t.confirm.remove(),delete t.confirm,t}}class oe extends EventTarget{constructor(e){super(),this.remote=e;const t=()=>this.remote.loadDaemonStats((e=>this._update(e.arguments)));this.interval=setInterval(t,5e3),t(),this.elements=oe._create(),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){if(!this.closed){clearInterval(this.interval),this.elements.root.remove();for(const e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}_update(e){console.log(e);const t=_;let n=e["current-stats"],r=o.ratio(n.uploadedBytes,n.downloadedBytes);h(this.elements.session.up,t.size(n.uploadedBytes)),h(this.elements.session.down,t.size(n.downloadedBytes)),h(this.elements.session.ratio,t.ratioString(r)),h(this.elements.session.time,t.timeInterval(n.secondsActive)),n=e["cumulative-stats"],r=o.ratio(n.uploadedBytes,n.downloadedBytes),h(this.elements.total.up,t.size(n.uploadedBytes)),h(this.elements.total.down,t.size(n.downloadedBytes)),h(this.elements.total.ratio,t.ratioString(r)),h(this.elements.total.time,t.timeInterval(n.secondsActive))}static _create(){const e=i("statistics-dialog"),{confirm:t,dismiss:n,heading:r,root:o,workarea:s}=e;t.remove(),n.textContent="Close",delete e.confirm;const a="Statistics";o.setAttribute("aria-label",a),r.textContent=a;const c=["Uploaded:","Downloaded:","Ratio:","Running time:"];let d=l("Current session",c);const[A,p,g,u]=d.children,m=e.session={};m.up=A,m.down=p,m.ratio=g,m.time=u,s.append(d.root),d=l("Total",c);const[h,C,b,f]=d.children,v=e.total={};return v.up=h,v.down=C,v.ratio=b,v.time=f,s.append(d.root),e}}const se={formatDL:e=>`▼${_.speedBps(e.getDownloadSpeed())}`,formatETA:e=>{const t=e.getETA();return t<0||t>=3596400?"":`ETA: ${_.timeInterval(t)}`},formatLabels:e=>e.getLabels().length>0?`🏷 ${e.getLabels().join(", ")}`:"",formatUL:e=>`▲${_.speedBps(e.getUploadSpeed())}`,getProgressInfo:(e,t)=>{const n=t.getStatus(),r=["torrent-progress-bar"];let o=null;if(n===D._StatusStopped&&r.push("paused"),t.needsMetaData())r.push("magnet"),o=Math.round(100*t.getMetadataPercentComplete());else if(n===D._StatusCheck)r.push("verify"),o=Math.round(100*t.getRecheckProgress());else if(t.getLeftUntilDone()>0)r.push("leech"),o=Math.round(100*t.getPercentDone());else{r.push("seed");const n=t.seedRatioLimit(e);o=n>0?100*t.getUploadRatio()/n:100}return t.isQueued()&&r.push("queued"),{classList:r,percent:o}},renderProgressbar:(e,t,n)=>{const r=se.getProgressInfo(e,t);n.className=r.classList.join(" "),n.style["background-size"]=`${r.percent}% 100%, 100% 100%`}};class ie{static getPeerDetails(e){const t=_,n=e.getErrorMessage();if(n)return n;if(e.isDownloading()){const n=e.getPeersConnected(),r=e.getWebseedsSendingToUs();return r&&n?["Downloading from",e.getPeersSendingToUs(),"of",t.countString("peer","peers",n),"and",t.countString("web seed","web seeds",r),"–",se.formatDL(e),se.formatUL(e)].join(" "):r?["Downloading from",t.countString("web seed","web seeds",r),"–",se.formatDL(e),se.formatUL(e)].join(" "):["Downloading from",e.getPeersSendingToUs(),"of",t.countString("peer","peers",n),"–",se.formatDL(e),se.formatUL(e)].join(" ")}return e.isSeeding()?["Seeding to",e.getPeersGettingFromUs(),"of",t.countString("peer","peers",e.getPeersConnected()),"-",se.formatUL(e)].join(" "):e.isChecking()?["Verifying local data (",_.percentString(100*e.getRecheckProgress()),"% tested)"].join(""):e.getStateString()}static getProgressDetails(e,t){if(t.needsMetaData()){let e="retrieving";t.isStopped()&&(e="needs");const n=100*t.getMetadataPercentComplete();return[`Magnetized transfer - ${e} metadata (`,_.percentString(n),"%)"].join("")}const n=t.getSizeWhenDone(),r=t.getTotalSize(),o=t.isDone()||t.isSeeding(),s=[];if(o?(r===n?s.push(_.size(r)):s.push(_.size(n)," of ",_.size(t.getTotalSize())," (",t.getPercentDoneStr(),"%)"),s.push(", uploaded ",_.size(t.getUploadedEver())," (Ratio ",_.ratioString(t.getUploadRatio()),")")):s.push(_.size(n-t.getLeftUntilDone())," of ",_.size(n)," (",t.getPercentDoneStr(),"%)"),!t.isStopped()&&(!o||t.seedRatioLimit(e)>0)){s.push(" - ");const e=t.getETA();e<0||e>=3596400?s.push("remaining time unknown"):s.push(_.timeInterval(t.getETA())," remaining")}return s.join("")}render(e,t,n){const r=t.isStopped();let o=n._name_container;h(o,t.getName()),o.classList.toggle("paused",r),o=n._labels_container,h(o,se.formatLabels(t)),se.renderProgressbar(e,t,n._progressbar),n._progressbar.classList.add("full");const s=t.getError()!==D._ErrNone;o=n._peer_details_container,o.classList.toggle("error",s),h(o,ie.getPeerDetails(t)),o=n._progress_details_container,h(o,ie.getProgressDetails(e,t)),o=n._toggle_running_button,o.alt=r?"Resume":"Pause",o.dataset.action=r?"resume":"pause"}createRow(e){const t=document.createElement("li");t.className="torrent";const n=document.createElement("div");n.classList.add("icon"),n.dataset.iconMimeType=e.getPrimaryMimeType().split("/",1).pop(),n.dataset.iconMultifile=e.getFileCount()>1?"true":"false";const r=document.createElement("div");r.className="torrent-name";const o=document.createElement("div");o.className="torrent-labels";const s=document.createElement("div");s.className="torrent-peer-details";const i=document.createElement("div");i.classList.add("torrent-progress");const a=document.createElement("div");a.classList.add("torrent-progress-bar","full"),i.append(a);const l=document.createElement("a");l.className="torrent-pauseresume-button",i.append(l);const c=document.createElement("div");return c.className="torrent-progress-details",t.append(n),t.append(r),t.append(o),t.append(s),t.append(i),t.append(c),t._icon=n,t._name_container=r,t._labels_container=o,t._peer_details_container=s,t._progress_details_container=c,t._progressbar=a,t._toggle_running_button=l,t}}class ae{static getPeerDetails(e){const t=e.getErrorMessage();if(t)return t;if(e.isDownloading()){const t=e.getDownloadSpeed()>0,n=e.getUploadSpeed()>0;if(!n&&!t)return"Idle";const r=[`${se.formatETA(e)} `];return t&&r.push(se.formatDL(e)),n&&r.push(se.formatUL(e)),r.join(" ")}return e.isSeeding()?`Ratio: ${_.ratioString(e.getUploadRatio())}, ${se.formatUL(e)}`:e.getStateString()}render(e,t,n){let r=n._name_container;r.classList.toggle("paused",t.isStopped()),h(r,t.getName()),r=n._labels_container,h(r,se.formatLabels(t));const o=t.getError()!==D._ErrNone;r=n._details_container,r.classList.toggle("error",o),h(r,ae.getPeerDetails(t)),se.renderProgressbar(e,t,n._progressbar),n._progressbar.classList.add("compact")}createRow(e){const t=document.createElement("div");t.classList.add("torrent-progress-bar","compact");const n=document.createElement("div");n.classList.add("icon"),n.dataset.iconMimeType=e.getPrimaryMimeType().split("/",1).pop(),n.dataset.iconMultifile=e.getFileCount()>1?"true":"false";const r=document.createElement("div");r.className="torrent-peer-details compact";const o=document.createElement("div");o.className="torrent-labels compact";const s=document.createElement("div");s.className="torrent-name compact";const i=document.createElement("li");return i.append(t),i.append(r),i.append(o),i.append(s),i.append(n),i.className="torrent compact",i._progressbar=t,i._details_container=r,i._labels_container=o,i._name_container=s,i}}class le{constructor(e,t,n){this._view=e,this._torrent=n,this._element=e.createRow(n);const r=()=>this.render(t);this._torrent.addEventListener("dataChanged",r),r()}getElement(){return this._element}render(e){const t=this.getTorrent();t&&this._view.render(e,t,this.getElement())}isSelected(){return this.getElement().classList.contains("selected")}getTorrent(){return this._torrent}getTorrentId(){return this.getTorrent().getId()}}class ce extends EventTarget{constructor(e,t,n){super(),this.action_manager=e,this.notifications=t,this.prefs=n,this.remote=new q(this),this.addEventListener("torrent-selection-changed",(e=>this.action_manager.update(e))),this.filterText="",this._torrents={},this._rows=[],this.dirtyTorrents=new Set,this.refilterSoon=c((()=>this._refilter(!1))),this.refilterAllSoon=c((()=>this._refilter(!0))),this.boundPopupCloseListener=this.popupCloseListener.bind(this),this.dispatchSelectionChangedSoon=c((()=>this._dispatchSelectionChanged()),200);for(const e of document.querySelectorAll("button[data-action]")){const{action:t}=e.dataset;p(e,this.action_manager.isEnabled(t)),e.addEventListener("click",(()=>{this.action_manager.click(t)}))}document.querySelector("#filter-tracker").addEventListener("change",(e=>{this.setFilterTracker("all"===e.target.value?null:e.target.value)})),this.action_manager.addEventListener("change",(e=>{for(const t of document.querySelectorAll(`[data-action="${e.action}"]`))p(t,e.enabled)})),this.action_manager.addEventListener("click",(e=>{switch(e.action){case"deselect-all":this._deselectAll();break;case"move-bottom":this._moveBottom();break;case"move-down":this._moveDown();break;case"move-top":this._moveTop();break;case"move-up":this._moveUp();break;case"open-torrent":this.setCurrentPopup(new F(this,this.remote));break;case"pause-all-torrents":this._stopTorrents(this._getAllTorrents());break;case"pause-selected-torrents":this._stopTorrents(this.getSelectedTorrents());break;case"reannounce-selected-torrents":this._reannounceTorrents(this.getSelectedTorrents());break;case"remove-selected-torrents":this._removeSelectedTorrents(!1);break;case"resume-selected-torrents":this._startSelectedTorrents(!1);break;case"resume-selected-torrents-now":this._startSelectedTorrents(!0);break;case"select-all":this._selectAll();break;case"show-about-dialog":this.setCurrentPopup(new f(this.version_info));break;case"show-inspector":this.setCurrentPopup(new L(this));break;case"show-move-dialog":this.setCurrentPopup(new P(this,this.remote));break;case"show-overflow-menu":if(this.popup instanceof V)this.setCurrentPopup(null);else{this.setCurrentPopup(new V(this,this.prefs,this.remote,this.action_manager));const e=document.querySelector("#toolbar-overflow").getBoundingClientRect();u(this.popup.root,e.left+e.width,e.top+e.height,document.body)}break;case"show-preferences-dialog":this.setCurrentPopup(new K(this,this.remote));break;case"show-shortcuts-dialog":this.setCurrentPopup(new re(this.action_manager));break;case"show-statistics-dialog":this.setCurrentPopup(new oe(this.remote));break;case"show-rename-dialog":this.setCurrentPopup(new te(this,this.remote));break;case"show-labels-dialog":this.setCurrentPopup(new ne(this,this.remote));break;case"start-all-torrents":this._startTorrents(this._getAllTorrents());break;case"toggle-compact-rows":this.prefs.display_mode=this.prefs.display_mode===b.DisplayCompact?b.DisplayFull:b.DisplayCompact;break;case"trash-selected-torrents":this._removeSelectedTorrents(!0);break;case"verify-selected-torrents":this._verifyTorrents(this.getSelectedTorrents());break;default:console.warn(`unhandled action: ${e.action}`)}}));let r=document.querySelector("#filter-mode");r.value=this.prefs.filter_mode,r.addEventListener("change",(e=>{this.prefs.filter_mode=e.target.value,this.refilterAllSoon()})),document.addEventListener("keydown",this._keyDown.bind(this)),document.addEventListener("keyup",this._keyUp.bind(this)),r=document.querySelector("#torrent-container"),r.addEventListener("click",(()=>{this.popup&&"inspector"!==this.popup.name?this.setCurrentPopup(null):this._deselectAll()})),r.addEventListener("dragenter",ce._dragenter),r.addEventListener("dragover",ce._dragenter),r.addEventListener("drop",this._drop.bind(this)),this._setupSearchBox(),this.elements={torrent_list:document.querySelector("#torrent-list")},this.elements.torrent_list.addEventListener("contextmenu",(e=>{let t=event.target;for(;t&&!t.classList.contains("torrent");)t=t.parentNode;const n=this._rows.find((e=>e.getElement()===t));n&&!n.isSelected()&&this._setSelectedRow(n);const r=new v(this.action_manager);this.setCurrentPopup(r),u(r.root,e.x,e.y,document.querySelector("#torrent-container")),e.preventDefault()})),this.loadDaemonPrefs(),this._initializeTorrents(),this.refreshTorrents(),this.togglePeriodicSessionRefresh(!0),this.prefs.addEventListener("change",(({key:e,value:t})=>this._onPrefChanged(e,t)));for(const[e,t]of this.prefs.entries())this._onPrefChanged(e,t)}_openTorrentFromUrl(){setTimeout((()=>{const e=new URLSearchParams(window.location.search).get("addtorrent");if(e){this.setCurrentPopup(new F(this,this.remote,e));const t=new URL(window.location);t.search="",window.history.pushState("","",t.toString())}}),0)}loadDaemonPrefs(){this.remote.loadDaemonPrefs((e=>{this.session_properties=e.arguments,this._openTorrentFromUrl()}))}get session_properties(){return this._session_properties}set session_properties(e){if(d(this._session_properties,e))return;this._session_properties=Object.seal(e);const t=new Event("session-change");t.session_properties=e,this.dispatchEvent(t),this._updateGuiFromSession(e)}_setupSearchBox(){const e=document.querySelector("#torrent-search"),t="blur";e.classList.add(t),e.addEventListener("blur",(()=>e.classList.add(t))),e.addEventListener("focus",(()=>e.classList.remove(t))),e.addEventListener("keyup",(()=>this._setFilterText(e.value)))}_onPrefChanged(e,t){switch(e){case b.DisplayMode:this.torrentRenderer="compact"===t?new ae:new ie,this.refilterAllSoon();break;case b.FilterMode:case b.SortDirection:case b.SortMode:this.refilterAllSoon();break;case b.RefreshRate:{clearInterval(this.refreshTorrentsInterval);const e=this.refreshTorrents.bind(this),t=1e3*Math.max(2,this.prefs.refresh_rate_sec);this.refreshTorrentsInterval=setInterval(e,t);break}}}_getAllTorrents(){return Object.values(this._torrents)}static _getTorrentIds(e){return e.map((e=>e.getId()))}seedRatioLimit(){const e=this.session_properties;return e&&e.seedRatioLimited?e.seedRatioLimit:-1}_getSelectedRows(){return this._rows.filter((e=>e.isSelected()))}getSelectedTorrents(){return this._getSelectedRows().map((e=>e.getTorrent()))}_getSelectedTorrentIds(){return ce._getTorrentIds(this.getSelectedTorrents())}_setSelectedRow(e){const t=e?e.getElement():null;for(const e of this.elements.torrent_list.children)e.classList.toggle("selected",e===t);this.dispatchSelectionChangedSoon()}_selectRow(e){e.getElement().classList.add("selected"),this.dispatchSelectionChangedSoon()}_deselectRow(e){e.getElement().classList.remove("selected"),this.dispatchSelectionChangedSoon()}_selectAll(){for(const e of this.elements.torrent_list.children)e.classList.add("selected");this.dispatchSelectionChangedSoon()}_deselectAll(){for(const e of this.elements.torrent_list.children)e.classList.remove("selected");this.dispatchSelectionChangedSoon(),delete this._last_torrent_clicked}_indexOfLastTorrent(){return this._rows.findIndex((e=>e.getTorrentId()===this._last_torrent_clicked))}_selectRange(e){const t=this._indexOfLastTorrent();if(-1===t)this._selectRow(e);else{const n=this._rows.indexOf(e),r=Math.min(t,n),o=Math.max(t,n);for(let e=r;e<=o;++e)this._selectRow(this._rows[e])}this.dispatchSelectionChangedSoon()}_dispatchSelectionChanged(){const e=[],t=[];for(const n of this._rows)(n.isSelected()?t:e).push(n.getTorrent());const n=new Event("torrent-selection-changed");n.nonselected=e,n.selected=t,this.dispatchEvent(n)}static _createKeyShortcutFromKeyboardEvent(e){const t=[];return e.ctrlKey&&t.push("Control"),e.altKey&&t.push("Alt"),e.metaKey&&t.push("Meta"),e.shitKey&&t.push("Shift"),t.push(1===e.key.length?e.key.toUpperCase():e.key),t.join("+")}_keyDown(e){const{ctrlKey:t,keyCode:n,metaKey:r,shiftKey:o,target:s}=e,i=ce._createKeyShortcutFromKeyboardEvent(e),a=this.action_manager.getActionForShortcut(i);if(a)return e.preventDefault(),void this.action_manager.click(a);if(27===n&&this.popup)return this.setCurrentPopup(null),void e.preventDefault();const l=document.querySelector(".popup:not(.hidden)"),c=s.matches("input"),d=this._rows;if(!(c||l||r||t)){const t=16===n,r=38===n,s=40===n;if((r||s)&&d.length>0){const t=this._indexOfLastTorrent(),n=this._shift_index,i=0,a=d.length-1;let l=t;s&&l+1<=a?++l:r&&l-1>=i&&--l;const c=d[l];n>=0?n<=t&&t=t&&t>l?this._selectRow(c):(n>=t&&l>t||n<=t&&t>l)&&this._deselectRow(d[t]):o?this._selectRange(c):this._setSelectedRow(c),c&&(this._last_torrent_clicked=c.getTorrentId(),c.getElement().scrollIntoView(),e.preventDefault())}else t&&(this._shift_index=this._indexOfLastTorrent())}}_keyUp(e){16===e.keyCode&&delete this._shift_index}static _dragenter(e){if(e.dataTransfer&&e.dataTransfer.types){const t=new Set(["text/uri-list","text/plain"]);if(e.dataTransfer.types.some((e=>t.has(e))))return e.stopPropagation(),e.preventDefault(),e.dataTransfer.dropEffect="copy",!1}else e.dataTransfer&&(e.dataTransfer.dropEffect="none");return!0}static _isValidURL(e){try{return!!new URL(e)}catch{return!1}}shouldAddedTorrentsStart(){return this.session_properties["start-added-torrents"]}_drop(e){const t=!this.shouldAddedTorrentsStart();if(!e.dataTransfer||!e.dataTransfer.types)return!0;const n=e.data.Transfer.types.filter((e=>["text/uri-list","text/plain"].contains(e))).pop();for(const r of e.dataTransfer.getData(n).split("\n").map((e=>e.trim())).filter((e=>ce._isValidURL(e))))this.remote.addTorrentByUrl(r,t);return e.preventDefault(),!1}togglePeriodicSessionRefresh(e){if(!e&&this.sessionInterval&&(clearInterval(this.sessionInterval),delete this.sessionInterval),e&&(this.loadDaemonPrefs(),!this.sessionInterval)){const e=8e3;this.sessionInterval=setInterval(this.loadDaemonPrefs.bind(this),e)}}_setFilterText(e){this.filterText=e?e.trim():null,this.refilterAllSoon()}_onTorrentChanged(e){const t=e.currentTarget;this.dirtyTorrents.add(t.getId()),this.refilterSoon()}updateTorrents(e,t){this.remote.updateTorrents(e,t,((e,t)=>{const n=[],r=e.shift(),o={};for(const t of e){for(const[e,n]of r.entries())o[n]=t[e];const{id:e}=o;let s=this._torrents[e];if(s){const t=s.needsMetaData();s.refresh(o),t&&!s.needsMetaData()&&n.push(e)}else s=this._torrents[e]=new D(o),s.addEventListener("dataChanged",this._onTorrentChanged.bind(this)),this.dirtyTorrents.add(e),"name"in s.fields&&"status"in s.fields||n.push(e)}if(n.length>0){const e=["id",...D.Fields.Metadata,...D.Fields.Stats];this.updateTorrents(n,e),this.refilterSoon()}t&&(this._deleteTorrents(t),this.refilterSoon())}))}refreshTorrents(){const e=["id",...D.Fields.Stats];this.updateTorrents("recently-active",e)}_initializeTorrents(){const e=["id",...D.Fields.Metadata,...D.Fields.Stats];this.updateTorrents(null,e)}_onRowClicked(e){const t=e.metaKey||e.ctrlKey,{row:n}=e.currentTarget;if(this.popup&&"inspector"!==this.popup.name)this.setCurrentPopup(null);else{if(e.target.classList.contains("torrent-pauseresume-button"))switch(e.target.dataset.action){case"pause":this._stopTorrents([n.getTorrent()]);break;case"resume":this._startTorrents([n.getTorrent()])}e.stopPropagation(),e.shiftKey?(this._selectRange(n),window.focus()):!n.isSelected()&&t?this._selectRow(n):n.isSelected()?n.isSelected()&&t?this._deselectRow(n):n.isSelected()&&this._setSelectedRow(n):this._setSelectedRow(n),this._last_torrent_clicked=n.getTorrentId()}}_deleteTorrents(e){if(e&&e.length>0){for(const t of e)this.dirtyTorrents.add(t),delete this._torrents[t];this.refilterSoon()}}_removeSelectedTorrents(e){const t=this.getSelectedTorrents();t.length>0&&this.setCurrentPopup(new ee({remote:this.remote,torrents:t,trash:e}))}_startSelectedTorrents(e){this._startTorrents(this.getSelectedTorrents(),e)}_startTorrents(e,t){this.remote.startTorrents(ce._getTorrentIds(e),t,this.refreshTorrents,this)}_verifyTorrents(e){this.remote.verifyTorrents(ce._getTorrentIds(e),this.refreshTorrents,this)}_reannounceTorrents(e){this.remote.reannounceTorrents(ce._getTorrentIds(e),this.refreshTorrents,this)}_stopTorrents(e){this.remote.stopTorrents(ce._getTorrentIds(e),this.refreshTorrents,this)}changeFileCommand(e,t,n){this.remote.changeFileCommand(e,t,n)}_moveTop(){this.remote.moveTorrentsToTop(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_moveUp(){this.remote.moveTorrentsUp(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_moveDown(){this.remote.moveTorrentsDown(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_moveBottom(){this.remote.moveTorrentsToBottom(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_updateGuiFromSession(e){const[,t,n]=e.version.match(/(.*)\s\(([\da-f]+)\)/);this.version_info={checksum:n,version:t};document.querySelector("#toolbar-overflow").classList.toggle("alt-speed-enabled",e[Z])}_updateStatusbar(){const e=_,t=this._getAllTorrents(),n=t.reduce(((e,t)=>e+t.getUploadSpeed()),0),r=t.reduce(((e,t)=>e+t.getDownloadSpeed()),0),o=e.countString("Transfer","Transfers",this._rows.length);h(document.querySelector("#speed-up-label"),e.speedBps(n)),h(document.querySelector("#speed-dn-label"),e.speedBps(r)),h(document.querySelector("#filter-count"),o)}static _displayName(e){let t=e;return t.length>0&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}_updateFilterSelect(){const e=this._getTrackerCounts(),t=Object.keys(e).sort();let n="";n+=this.filterTracker?'':'';for(const e of t)n+=``;this.filterTrackersStr&&this.filterTrackersStr===n||(this.filterTrackersStr=n,document.querySelector("#filter-tracker").innerHTML=n)}sortRows(e){const t=e.map((e=>e.getTorrent())),n=e.reduce(((e,t)=>(e[t.getTorrent().getId()]=t,e)),{});D.sortTorrents(t,this.prefs.sort_mode,this.prefs.sort_direction);for(const[r,o]of t.entries())e[r]=n[o.getId()]}_refilter(e){const{sort_mode:t,sort_direction:n,filter_mode:r}=this.prefs,o=this.filterTracker,s=this.torrentRenderer,i=this.elements.torrent_list;let a=null,l=null;const c=/^labels:([\w,]*)(.*)$/.exec(this.filterText);c?(a=c[2].trim(),l=c[1].split(",")):(a=this.filterText,l=[]);const d=()=>[...i.children].length,A=()=>[...i.children].reduce(((e,t)=>e+t.classList.contains("selected")?1:0),0),p=d(),g=A();if(this._updateFilterSelect(),clearTimeout(this.refilterTimer),delete this.refilterTimer,e){for(;i.firstChild;)i.firstChild.remove();this._rows=[],this.dirtyTorrents=new Set(Object.keys(this._torrents))}const u=[];let m=[];for(const e of this._rows)this.dirtyTorrents.has(e.getTorrentId())?m.push(e):u.push(e);for(const e of m)e.getElement().remove();const h=[];for(const e of m){const t=e.getTorrentId(),n=this._torrents[t];n&&n.test(r,o,a,l)&&h.push(e),this.dirtyTorrents.delete(t)}m=h;for(const e of this.dirtyTorrents.values()){const t=this._torrents[e];if(t&&t.test(r,o,a,l)){const e=new le(s,this,t),n=e.getElement();n.row=e,m.push(e),n.addEventListener("click",this._onRowClicked.bind(this)),n.addEventListener("dblclick",(()=>this.action_manager.click("show-inspector")))}}this.sortRows(m);const C=[],b=u.length,f=m.length,v=document.createDocumentFragment();let y=0,x=0;for(;y!==b||x!==f;){let e=null;if(y===b)e=!1;else if(x===f)e=!0;else{e=D.compareTorrents(u[y].getTorrent(),m[x].getTorrent(),t,n)<0}if(e)C.push(u[y++]);else{const e=m[x++],t=e.getElement();y===b?v.append(t):i.insertBefore(t,u[y].getElement()),C.push(e)}}i.append(v),this._rows=C,this.dirtyTorrents.clear();for(const[e,t]of C.map((e=>e.getElement())).entries()){const n=e%2==0;t.classList.toggle("even",n),t.classList.toggle("odd",!n)}this._updateStatusbar(),g===A()&&p===d()||this.dispatchSelectionChangedSoon()}setFilterTracker(e){document.querySelector("#filter-tracker").value=e,this.filterTracker=e,this.refilterAllSoon()}_getTrackerCounts(){const e={};for(const t of this._getAllTorrents())for(const n of t.getTrackers()){const{sitename:t}=n;e[t]=(e[t]||0)+1}return e}popupCloseListener(e){if(e.target!==this.popup)throw new Error(e);this.popup.removeEventListener("close",this.boundPopupCloseListener),delete this.popup}setCurrentPopup(e){this.popup&&this.popup.close(),this.popup=e,this.popup&&this.popup.addEventListener("close",this.boundPopupCloseListener)}}var de=n(379),Ae=n.n(de),pe=n(795),ge=n.n(pe),ue=n(569),me=n.n(ue),he=n(565),Ce=n.n(he),be=n(216),fe=n.n(be),ve=n(589),ye=n.n(ve),xe=n(844),ke={};ke.styleTagTransform=ye(),ke.setAttributes=Ce(),ke.insert=me().bind(null,"head"),ke.domAPI=ge(),ke.insertStyleElement=fe();Ae()(xe.Z,ke);xe.Z&&xe.Z.locals&&xe.Z.locals;document.addEventListener("DOMContentLoaded",(function(){const t=new e,n=new b,r=new C(n),o=new ce(t,r,n),s=c((()=>o.elements.torrent_list.scrollTo(0,1)));window.addEventListener("load",s),window.addEventListener("orientationchange",s)}))})()})(); +(()=>{var e={844:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Y});var r=n(537),o=n.n(r),s=n(645),i=n.n(s),a=n(667),l=n.n(a),c=new URL(n(986),n.b),d=new URL(n(75),n.b),A=new URL(n(726),n.b),p=new URL(n(989),n.b),g=new URL(n(121),n.b),u=new URL(n(409),n.b),m=new URL(n(403),n.b),h=new URL(n(404),n.b),C=new URL(n(900),n.b),b=new URL(n(101),n.b),f=new URL(n(648),n.b),v=new URL(n(202),n.b),y=new URL(n(444),n.b),x=new URL(n(757),n.b),k=new URL(n(598),n.b),w=new URL(n(496),n.b),E=new URL(n(355),n.b),I=new URL(n(416),n.b),B=new URL(n(302),n.b),_=new URL(n(246),n.b),S=i()(o()),D=l()(c),T=l()(d),L=l()(A),M=l()(p),P=l()(g),z=l()(u),F=l()(m),N=l()(h),R=l()(C),G=l()(b),j=l()(f),U=l()(v),H=l()(y),W=l()(x),$=l()(k),Z=l()(w),O=l()(E),Q=l()(I),J=l()(B),q=l()(_);S.push([e.id,':root{--color-fg-error: #d73a49;--color-fg-port-closed: #d73a49;--color-fg-port-open: #28a745;--color-progressbar-background-2: #828282;--color-progressbar-verify-1: #f692ce;--color-progressbar-verify-2: #b93a86;--color-progressbar-magnet-1: #ffea7f;--color-progressbar-magnet-2: #dbab09;--color-progressbar-magnet-paused-1: #fff8c5;--color-progressbar-magnet-paused-2: #828282;--color-progressbar-leech-paused-1: #c8e1ff;--color-progressbar-leech-paused-2: #828282;--color-progressbar-leech-queued-1: #dbedff;--color-progressbar-leech-queued-2: #79b8ff;--color-progressbar-leech-1: #79b8ff;--color-progressbar-leech-2: #044289;--color-progressbar-seed-paused-1: #bef5cb;--color-progressbar-seed-paused-2: #828282;--color-progressbar-seed-queued-1: #dcffe4;--color-progressbar-seed-queued-2: #85e89d;--color-progressbar-seed-1: #85e89d;--color-progressbar-seed-2: #176f2c;color-scheme:light dark}@media(prefers-color-scheme: dark){:root{--color-bg-hover: #f8f8f8;--color-fg-primary: #fff;--color-bg-primary: #292929;--color-bg-odd: #191919;--color-bg-even: #292929;--color-bg-menu: #292929;--color-fg-secondary: #f8f8f8;--color-fg-on-popup: #f8f8f8;--color-fg-disabled: #f8f8f8;--color-bg-popup: #292929;--color-bg-warn: #cf6679;--color-fg-warn: #121212;--color-border: #f8f8f8;--color-border-selected: #d0d7de;--color-fg-tertiary: #828282;--color-toolbar-background: #292929;--color-inspector-background: #292929;--color-inspector-tabs: #f8f8f8;--color-bg-selected: #2e2e2e;--color-bg-tabs: #373737;--color-progressbar-background-1: #426389;--color-default-border: #575757}}@media(prefers-color-scheme: light){:root{--color-bg-hover: #f8f8f8;--color-fg-primary: #404040;--color-bg-primary: #fff;--color-bg-even: #fff;--color-bg-odd: #f8f8f8;--color-bg-menu: #f8f8f8;--color-fg-on-popup: #191919;--color-bg-popup: #fff;--color-fg-secondary: #828282;--color-border: #828282;--color-border-selected: #d0d7de;--color-fg-tertiary: #828282;--color-bg-warn: #e4606d5b;--color-fg-warn: #cf212e;--color-fg-disabled: #828282;--color-toolbar-background: #f8f8f8;--color-inspector-background: #fff;--color-bg-tabs: #f0f0f0;--color-inspector-tabs: #f8f8f8;--color-bg-selected: #fff8c5;--color-progressbar-background-1: #f8f8f8;--color-default-border: #aeaeae;--color-dialog-border: #f8f8f8}}html,body{color:var(--color-fg-primary);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";height:100%;margin:0}img{border:0}a{color:var(--color-fg-primary);outline:0;text-decoration:underline}.hidden{display:none}.even{background-color:var(--color-bg-even)}.odd{background-color:var(--color-bg-odd)}.mainwin{display:flex;flex-direction:column;height:100%;position:relative}.mainwin>*{margin:0;padding:0}.mainwin-workarea{display:flex;flex:1;flex-direction:row;overflow:auto}input{border:1px solid var(--color-border);border-radius:3px;padding:4px 5px}#mainwin-toolbar{align-items:center;background:var(--color-toolbar-background);border-bottom:1px solid var(--color-default-border);display:flex;flex-direction:row;height:50px;margin:0;width:100%}#mainwin-toolbar button{background-color:rgba(0,0,0,0);background-position:center;background-repeat:no-repeat;border:0;border-radius:5px;cursor:pointer;height:50px;margin-right:6px;user-select:none;width:50px}#mainwin-toolbar button svg{stroke:var(--color-fg-primary)}#mainwin-toolbar button:disabled{cursor:default;opacity:.25}#mainwin-toolbar>.toolbar-separator{border-left:1px solid var(--color-default-border);height:25px;margin:0 6px 0 0}#mainwin-toolbar :nth-last-child(2){border:0;flex-grow:1}.toolbar-icon{stroke:var(--color-fg-primary)}#toolbar-inspector svg{color:var(--color-fg-primary)}#toolbar-overflow{margin-right:4px}#toolbar-overflow svg{fill:var(--color-fg-primary);height:36px;width:36px}#toolbar-overflow.alt-speed-enabled{background-image:url('+D+");background-position:bottom left;background-size:20px}.mainwin-filterbar{align-items:center;background:var(--color-toolbar-background);border-bottom:1px solid var(--color-default-border);display:flex;flex-direction:row;height:30px;width:100%}@media(max-width: 599px){.mainwin-filterbar{padding:5px 10px}.mainwin-filterbar :not(select):not(input){display:none}.mainwin-filterbar #torrent-search{padding:5px}}.mainwin-filterbar>*{margin-right:5px;padding:0 5px}.speed-up-icon{background-image:url("+T+");background-repeat:no-repeat;background-size:12px 12px;height:12px;width:12px}.speed-dn-icon{background-image:url("+L+");background-repeat:no-repeat;background-size:12px 12px;height:12px;width:12px}.flex{flex-grow:1}#torrent-container{flex-grow:1;left:0;margin:0;overflow:auto;-webkit-overflow-scrolling:touch;padding:0;right:0}.torrent-container{background-color:#fff}.torrent-list{cursor:pointer;list-style-type:none;margin:0;padding:0;text-align:left;width:100%}.torrent-list .torrent{border-bottom:1px solid var(--color-default-border);user-select:none}.torrent-list .torrent .icon{background-color:var(--color-fg-primary);background-position:center,top left}.torrent-list .torrent .icon[data-icon-mime-type=audio]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+M+");mask-image:url("+M+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=audio][data-icon-multifile=true]{-webkit-mask-image:url("+M+"),url("+P+");mask-image:url("+M+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=application]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+z+");mask-image:url("+z+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=application][data-icon-multifile=true]{-webkit-mask-image:url("+z+"),url("+P+");mask-image:url("+z+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=font]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+F+");mask-image:url("+F+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=font][data-icon-multifile=true]{-webkit-mask-image:url("+F+"),url("+P+");mask-image:url("+F+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=image]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+N+");mask-image:url("+N+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=image][data-icon-multifile=true]{-webkit-mask-image:url("+N+"),url("+P+");mask-image:url("+N+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=model]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+R+");mask-image:url("+R+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=model][data-icon-multifile=true]{-webkit-mask-image:url("+R+"),url("+P+");mask-image:url("+R+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=text]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+G+");mask-image:url("+G+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=text][data-icon-multifile=true]{-webkit-mask-image:url("+G+"),url("+P+");mask-image:url("+G+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=video]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+j+");mask-image:url("+j+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=video][data-icon-multifile=true]{-webkit-mask-image:url("+j+"),url("+P+");mask-image:url("+j+"),url("+P+");-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent.compact{align-items:center;display:flex;flex-direction:row-reverse}.torrent-list .torrent.compact .icon{flex-shrink:0;height:16px;-webkit-mask-size:16px,8px;mask-size:16px,8px;width:16px}.torrent-list .torrent.compact .icon[data-icon-multifile=true]{background-color:var(--color-fg-primary);-webkit-mask-image:url("+P+");mask-image:url("+P+");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent.compact .icon[data-icon-multifile=true][data-icon-multifile=true]{-webkit-mask-image:url("+P+"),url("+P+");mask-image:url("+P+"),url("+P+');-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent.compact>*{margin:5px}.torrent-list .torrent:not(.compact){align-items:center;display:grid;grid-column-gap:12px;grid-template-areas:"icon name labels" "icon peers peers" "icon progressbar progressbar" "icon progress-text progress-text";grid-template-columns:32px auto 1fr;padding:6px 12px}.torrent-list .torrent:not(.compact) .icon{background-size:32px,16px;grid-area:icon;height:32px;width:32px}.torrent-list .torrent:not(.compact) .torrent-name{color:var(--color-fg-primary);grid-area:name}.torrent-list .torrent:not(.compact) .torrent-name.paused{color:var(--color-fg-disabled)}.torrent-list .torrent:not(.compact) .torrent-labels{grid-area:labels}.torrent-list .torrent:not(.compact) .torrent-peer-details{grid-area:peers}.torrent-list .torrent:not(.compact) .torrent-progress{display:flex;flex-direction:row;grid-area:progressbar}.torrent-list .torrent:not(.compact) .torrent-progress-details{grid-area:progress-text}.torrent-list .torrent:not(.compact)>*{margin:1px 0}.torrent-list .torrent.selected{background-color:var(--color-bg-selected)}.torrent-list .icon{background-position:center;background-repeat:no-repeat}.torrent-list .torrent-pauseresume-button{background-position:center center;background-repeat:no-repeat;background-size:20px;margin-left:10px;width:20px}.torrent-list .torrent-pauseresume-button[data-action=pause]{background-image:url('+U+")}.torrent-list .torrent-pauseresume-button[data-action=pause]:active,.torrent-list .torrent-pauseresume-button[data-action=pause]:hover{background-image:url("+H+")}.torrent-list .torrent-pauseresume-button[data-action=resume]{background-image:url("+W+")}.torrent-list .torrent-pauseresume-button[data-action=resume]:active,.torrent-list .torrent-pauseresume-button[data-action=resume]:hover{background-image:url("+$+")}.torrent-list .torrent-progress-details.error,.torrent-list .torrent-peer-details.error{color:var(--color-fg-error)}.torrent-list .torrent-name{font-weight:bold;margin-bottom:2px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.torrent-list .torrent-name.compact{font-size:1em;font-weight:normal}.torrent-list .torrent-name:not(.paused){color:var(--color-fg-primary)}.torrent-list .torrent-labels{font-size:x-small;font-weight:normal;margin-bottom:2px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.torrent-list .torrent-labels.compact{flex:1;font-size:x-small}.torrent-list .torrent-progress-details,.torrent-list .torrent-peer-details{color:var(--color-fg-primary);font-size:x-small}.torrent-list .torrent-progress-bar{background-repeat:no-repeat;border-color:var(--color-border-selected);border-radius:3px;border-style:solid;border-width:1px;height:12px}.torrent-list .torrent-progress-bar.full{flex-grow:1;margin:2px 0}.torrent-list .torrent-progress-bar.compact{min-width:50px;width:50px}.torrent-list .torrent-progress-bar.leech.paused{background:linear-gradient(to bottom, var(--color-progressbar-leech-paused-1), var(--color-progressbar-leech-paused-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.leech.queued{background:linear-gradient(to bottom, var(--color-progressbar-leech-queued-1), var(--color-progressbar-leech-queued-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.leech{background:linear-gradient(to bottom, var(--color-progressbar-leech-1), var(--color-progressbar-leech-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.magnet.paused{background:linear-gradient(to bottom, var(--color-progressbar-magnet-paused-1), var(--color-progressbar-magnet-paused-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.magnet{background:linear-gradient(to bottom, var(--color-progressbar-magnet-1), var(--color-progressbar-magnet-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.seed.paused{background:linear-gradient(to bottom, var(--color-progressbar-seed-paused-1), var(--color-progressbar-seed-paused-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.seed.queued{background:linear-gradient(to bottom, var(--color-progressbar-seed-queued-1), var(--color-progressbar-seed-queued-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.seed{background:linear-gradient(to bottom, var(--color-progressbar-seed-1), var(--color-progressbar-seed-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}.torrent-list .torrent-progress-bar.verify{background:linear-gradient(to bottom, var(--color-progressbar-verify-1), var(--color-progressbar-verify-1) 80%),linear-gradient(to bottom, var(--color-progressbar-background-1), var(--color-progressbar-background-1) 80%);background-repeat:no-repeat}@media(max-width: 599px){html,body{overflow:hidden}input[type=checkbox]{height:20px;width:20px}}@media(max-width: 599px){#inspector,#prefs-dialog{left:0}}@media(min-width: 600px){#inspector,#prefs-dialog{border-left:1px solid var(--color-default-border);width:570px}}#prefs-dialog{background:var(--color-inspector-background);border:0;bottom:0;box-shadow:0 3px 6px -4px rgba(0,0,0,.1215686275),0 6px 16px rgba(0,0,0,.0784313725),0 9px 28px 8px rgba(0,0,0,.0509803922);position:absolute;right:0;top:61px;z-index:2}#prefs-dialog .tabs-page{grid-column-gap:8px;grid-row-gap:5px;grid-template-columns:1fr 1fr;margin:20px}#prefs-dialog .tabs-page:not(.hidden){display:grid}#prefs-dialog .tabs-page .section-label{font-weight:bold;grid-column:span 2;padding-bottom:5px}#prefs-dialog .tabs-page .section-label:not(:first-of-type){margin-top:20px}#prefs-dialog .alt-speed-section-label{background:rgba(0,0,0,0) url("+D+") no-repeat;background-position:left;background-position-y:4px;background-size:20px;padding-left:22px}#prefs-dialog :disabled,#prefs-dialog .disabled{color:var(--color-fg-disabled)}#prefs-dialog #alt-times-div,#prefs-dialog #autostart-div,#prefs-dialog #port-forwarding,#prefs-dialog #randomize-port,#prefs-dialog #suffix-div,#prefs-dialog #use-dht-div,#prefs-dialog #use-lpd-div,#prefs-dialog #use-pex-div,#prefs-dialog #utp-enabled,#prefs-dialog .alt-speed-label{grid-column:span 2}#prefs-dialog #default-trackers{height:300px}#prefs-dialog .blocklist-size-label,#prefs-dialog .blocklist-update-button,#prefs-dialog .register-handler-button,#prefs-dialog .port-status{grid-column:2/3}#prefs-dialog .blocklist-size-label{font-size:smaller}#prefs-dialog .blocklist-size-number{font-weight:bolder}#prefs-dialog .port-status-label{display:inline-block;font-weight:bold;margin-left:5px}#prefs-dialog .port-status-label[data-open=true]{color:var(--color-fg-port-open)}#prefs-dialog .port-status-label[data-open=false]{color:var(--color-fg-port-closed)}#prefs-dialog #default-trackers,#prefs-dialog .default-trackers-label{grid-column:1/3}#prefs-dialog .alt-speed-label{font-size:smaller;font-style:lighter;margin:-10px 0 10px}#prefs-dialog.ui-tabs .ui-tabs-panel{padding:0;user-select:none}.prefs-section{text-align:left}.prefs-section>*{padding:0 8px 8px}.prefs-section .title{color:var(--color-fg-primary);font-size:larger;font-weight:bold;margin-bottom:10px;padding-left:0}.prefs-section .row .key{float:left;padding-top:3px}.prefs-section .row .key>*{margin-left:0}.prefs-section .row .value{margin-left:150px}.prefs-section .row .value>*{width:100%}.tabs-container{align-items:stretch;background:var(--color-inspector-background);bottom:0;display:flex;flex-direction:column;position:absolute;right:0;top:61px;z-index:2}@media(max-width: 599px){.tabs-container{left:0}}@media(min-width: 600px){.tabs-container{width:550px}}.tabs-buttons{align-self:center;background-color:var(--color-bg-tabs);border:1px solid var(--color-border-selected);border-radius:6px;display:flex;margin:10px 0}.tabs-buttons button{appearance:none;border:1px solid rgba(0,0,0,0);border-radius:6px;color:var(--color-fg-primary)}.tabs-pages{box-sizing:border-box;flex:1;overflow-x:hidden;overflow-y:auto}@media(max-width: 599px){.tabs-pages{padding:0 8px 20px}}@media(min-width: 600px){.tabs-pages{padding:0 20px 20px}}.tabs-button{background-color:var(--color-bg-tabs);border:1px solid rgba(0,0,0,0);font-size:14px;padding:3px 8px}.tabs-button:active,.tabs-button:checked,.tabs-button.selected{background-color:var(--color-bg-even);border:1px solid var(--color-fg-primary);border-radius:6px;font-weight:500}#inspector{box-shadow:0 3px 6px rgba(58,58,58,.7)}.inspector-info-page{font-size:14px;grid-column-gap:8px;grid-row-gap:8px;grid-template-columns:auto 1fr;margin:20px;padding:12px}.inspector-info-page:not(.hidden){display:grid}.inspector-info-page .section-label{font-size:16px;font-weight:bold;grid-column:span 2;padding-bottom:5px}.inspector-info-page .section-label:not(:first-of-type){margin-top:20px}.inspector-info-page label{font-weight:500}.inspector-info-page :not(.section-label){overflow-x:hidden;text-overflow:ellipsis}.inspector-info-magnet button{background-color:var(--color-border);background-position:top;background-repeat:no-repeat;border:0;cursor:pointer;height:1rem;-webkit-mask:url("+Z+") no-repeat center/14px;mask:url("+Z+') no-repeat center/14px;vertical-align:middle;width:1rem}#inspector .tabs-button,#prefs-dialog .tabs-button{height:30px;margin:0;min-width:40px}#inspector-file-list{margin:0;padding:0}#inspector-file-list .inspector-torrent-file-list-entry{display:grid;grid-column-gap:5px;grid-template-areas:"check name priority" "blank1 info blank2";grid-template-columns:20px 1fr 65px;margin-bottom:4px;padding:5px}#inspector-file-list .inspector-torrent-file-list-entry.skip{opacity:.5}#inspector-file-list .file-wanted-control{grid-area:check}#inspector-file-list .inspector-torrent-file-list-entry-name{color:var(--color-fg-primary);cursor:pointer;font-size:14px;grid-area:name;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#inspector-file-list .inspector-torrent-file-list-entry.skip>.inspector-torrent-file-list-entry-name{color:var(--color-fg-disabled)}#inspector-file-list .inspector-torrent-file-list-entry-progress{color:var(--color-fg-secondary);font-size:12px;grid-area:info}#inspector-file-list .single-file .inspector-torrent-file-list-entry>.file-wanted-control,#inspector-file-list .inspector-torrent-file-list-entry.complete>.file-wanted-control{cursor:default}#inspector-header{margin:8px 0}#torrent-inspector-name{font-size:large;font-weight:bold}#inspector-tiers-list{color:var(--color-fg-primary);margin:0 10px;padding:0 12px}#inspector-tiers-list .tier-list-row{display:grid;font-size:12px;grid-column-gap:8px;grid-row-gap:4px;margin-top:8px}#inspector-tiers-list .tier-list-torrent{color:var(--color-fg-primary);font-weight:bolder;margin-left:-12px;overflow-x:hidden;padding-top:20px;text-overflow:ellipsis;white-space:nowrap}#inspector-tiers-list .tier-list-tracker{font-size:14px;font-weight:bolder;grid-column:span 2;margin-top:8px;padding-bottom:4px}#inspector-tiers-list .tier-announce,#inspector-tiers-list .tier-scrape,#inspector-tiers-list .tier-state{text-align:left}#inspector-tiers-list .tier-downloads,#inspector-tiers-list .tier-leechers,#inspector-tiers-list .tier-seeders{text-align:right}.peer-list{border:1px solid var(--color-default-border);border-collapse:collapse;cursor:default;table-layout:fixed;text-align:left;width:100%}.peer-list td,.peer-list th{font-size:smaller;padding:5px}.peer-list td{border:1px solid var(--color-default-border);color:var(--color-fg-secondary)}.peer-list .torrent-row td{background:var(--color-default-border);color:var(--color-fg-primary);font-size:normal;font-weight:bolder;overflow-x:hidden;padding:10px;text-overflow:ellipsis;white-space:nowrap}.peer-list .encryption[data-encrypted=true]{background-color:var(--color-border-selected);-webkit-mask:url('+O+") no-repeat center/14px;mask:url("+O+") no-repeat center/14px;width:10px}.peer-list .peer-address,.peer-list .percent-done,.peer-list .speed-down,.peer-list .speed-up{text-align:right}.peer-list .percent-done{width:10%}.peer-list .speed-down,.peer-list .speed-up{width:15%}.peer-list .peer-address{width:25%}.peer-list .peer-app-name{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width: 599px){.peer-list .peer-app-name{display:none}}@media(min-width: 600px){.peer-list .peer-app-name{width:25%}}.peer-list .status{cursor:pointer}.file-priority-radiobox{grid-area:priority}.file-priority-radiobox>*{appearance:none;background-color:var(--color-border-selected);background-position:center;background-repeat:no-repeat;background-size:10px,20px;border:1px solid var(--color-border);height:20px;margin:0;padding:0;width:20px}.file-priority-radiobox>.low{background-image:url("+L+");border-right-width:0}.file-priority-radiobox>.normal{background-image:url("+Q+")}.file-priority-radiobox>.high{background-image:url("+T+');border-left-width:0}.file-priority-radiobox>.checked{background-color:var(--color-bg-hover)}.context-menu{background-color:var(--color-bg-primary);border-radius:5px;box-shadow:0 3px 6px rgba(0,0,0,.7);color:var(--color-fg-on-popup);padding:10px 5px;position:absolute;z-index:9999}.context-menu .context-menuitem{font-size:13px;font-weight:400;list-style:none;margin-right:10px;padding:5px 15px}.context-menu .context-menuitem:hover:not(:disabled),.context-menu .context-menuitem:focus:not(:disabled){background-color:var(--color-bg-hover);border-radius:6px;cursor:pointer;font-weight:500}.context-menu .context-menuitem:disabled{color:var(--color-fg-disabled);cursor:none}.context-menu .context-menuitem.warning:hover{background-color:var(--color-bg-warn);color:var(--color-fg-warn)}.context-menu-separator{border-bottom:1px solid var(--color-fg-secondary);margin-bottom:10px;padding-bottom:10px}.overflow-menu{background:var(--color-bg-popup);border-radius:5px;box-shadow:0 3px 6px -4px rgba(0,0,0,.1215686275),0 6px 16px rgba(0,0,0,.0784313725),0 9px 28px 8px rgba(0,0,0,.0509803922);color:var(--color-fg-on-popup);min-width:220px;overflow:auto;-webkit-overflow-scrolling:touch;padding:10px;position:absolute;right:20px;top:50px;z-index:2}@media(max-width: 599px){.overflow-menu{height:80vh}}@media(min-width: 600px){.overflow-menu #display-fullscreen-check,.overflow-menu #display-fullscreen-label{display:none}}.overflow-menu fieldset{border:0;display:block;margin:8px 0}.overflow-menu fieldset ul{margin:0;padding-left:0}.overflow-menu fieldset ul li{list-style-type:none}.overflow-menu fieldset ul a{cursor:pointer}.overflow-menu .table-row{align-items:center;border-radius:6px;display:flex;flex-direction:row;padding:3px 0}.overflow-menu legend{color:var(--color-fg-primary);font-weight:bolder;margin:12px 0 4px}.overflow-menu a,.overflow-menu button,.overflow-menu label{display:inline-flex;font-size:1em;width:100%}.overflow-menu a,.overflow-menu button{background:rgba(0,0,0,0);border:0;cursor:pointer;display:block;padding:4px 0;text-align:left;text-decoration:none;width:150px}.overflow-menu .input-and-label{align-items:center;display:inline-flex;flex-direction:row}.overflow-menu #display-options{display:flex;flex-direction:column}.overflow-menu #speed-options{display:flex;flex-direction:column}.overflow-menu #speed-options>.speed-up,.overflow-menu #speed-options>.speed-down{align-items:center;display:flex;flex-direction:row;padding:4px 0}.overflow-menu #speed-options>.speed-up>label,.overflow-menu #speed-options>.speed-down>label{overflow:hidden;width:80px}.overflow-menu #speed-options .alt-speed{display:grid;grid-column-gap:5px;grid-row-gap:5px;grid-template-areas:"check lb" "turtle values";grid-template-columns:22px 1fr;margin-bottom:4px}.overflow-menu #speed-options #alt-speed-check{grid-area:check}.overflow-menu #speed-options #alt-speed-check:checked~#alt-speed-image{background-image:url('+D+");background-position:left;background-size:22px}.overflow-menu #speed-options #alt-speed-check:not(:checked)~#alt-speed-image{background-image:url("+J+');background-size:22px}.overflow-menu #speed-options #alt-speed-image{background-position:center;background-repeat:no-repeat;grid-area:turtle}.overflow-menu #speed-options #alt-speed-label{grid-area:lb}.overflow-menu #speed-options #alt-speed-values-label{font-size:small;grid-area:values}@media(max-width: 599px){.dialog-buttons{padding-top:13.3333333333px}.dialog-container{opacity:96%;position:absolute;top:61px;width:100%}.dialog-logo{padding-bottom:13.3333333333px}.dialog-window{align-items:center;display:flex;flex-direction:column}}@media(min-width: 600px){.dialog-container{min-width:400px;position:absolute;top:122px}.dialog-heading{grid-area:heading}.dialog-logo{grid-area:icon;padding-right:13.3333333333px}.dialog-window{background-color:var(--color-bg-popup);color:var(--color-fg-on-popup);display:grid;grid-column-gap:12px;grid-template-areas:"icon heading" "icon message" "icon workarea" "icon buttons";grid-template-columns:64px 1fr;padding:2px 12px}}.dialog-buttons{display:flex;float:right;grid-area:buttons;margin:10px 0 0;text-align:center}.dialog-buttons button{appearance:none;background:var(--color-bg-primary);border:1px solid var(--color-default-border);border-radius:5px;color:var(--color-fg-primary);margin-left:8px;padding:8px;text-decoration:none}.dialog-buttons-begin{flex-grow:1}.dialog-buttons-end{display:none}dialog{border:0}.dialog-container{box-shadow:0 3px 6px -4px rgba(0,0,0,.1215686275),0 6px 16px rgba(0,0,0,.0784313725),0 9px 28px 8px rgba(0,0,0,.0509803922);color:var(--color-fg-primary);display:block;padding:0;z-index:2}@media(min-width: 600px){.dialog-container{border:0;border-radius:8px;max-width:50%}}.dialog-heading{align-items:center;display:flex;font-size:1.2em;font-weight:bold}.dialog-logo{background:rgba(0,0,0,0) url('+q+") top left no-repeat;height:64px;width:64px}.dialog-message{grid-area:message;margin:10px 0 0}.dialog-window{background:var(--color-bg-primary);border-radius:8px;padding:20px}.dialog-workarea{display:flex;flex-direction:column;grid-area:workarea;margin:10px 0 0}.dialog-workarea>*{margin-bottom:5px}.about-dialog{max-width:initial}.about-dialog .dialog-workarea>*{margin-bottom:10px}.about-dialog-version-number{margin-left:4px}.about-dialog-version-checksum{font-size:small;font-style:italic;font-weight:normal;margin-left:auto;padding-left:10px}.open-torrent input{margin-bottom:15px}.open-torrent #auto-start-label{margin-left:5px}.shortcuts-dialog table{border-collapse:collapse;width:100%}.shortcuts-dialog th,.shortcuts-dialog td{border:1px solid var(--color-border);padding:5px 10px}#torrent-rename-name{min-width:400px}#move-container #torrent-path{min-width:400px}.tabs-pages .content,.inspector-info-page .content,.statistics-dialog .content{column-gap:16px;display:grid;grid-row-gap:6px;grid-template-columns:auto 1fr;margin-top:4px}@media(max-width: 599px){.tabs-pages .content,.inspector-info-page .content,.statistics-dialog .content{margin:4px 0 16px}}@media(min-width: 600px){.tabs-pages .content,.inspector-info-page .content,.statistics-dialog .content{margin:4px 16px 16px}}.tabs-pages .content div,.inspector-info-page .content div,.statistics-dialog .content div{word-break:break-word}.tabs-pages fieldset,.inspector-info-page fieldset,.statistics-dialog fieldset{border:0;margin:0;padding:0}.tabs-pages legend,.inspector-info-page legend,.statistics-dialog legend{font-weight:bolder;margin-bottom:4px}#free-space-text{display:inline-block;font-size:smaller;font-style:italic}#torrent-upload-frame{border:0;display:block;height:0;left:-1000px;margin:0;padding:0;position:absolute;top:-1000px;width:0}.ui-menu{width:200px}","",{version:3,sources:["webpack://./assets/css/transmission-app.scss"],names:[],mappings:"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",sourcesContent:["@use 'sass:color';\n@use 'sass:math';\n\n// Colors related to torrent status\n$blue-100: #dbedff;\n$blue-200: #c8e1ff;\n$blue-300: #79b8ff;\n$blue-700: #044289;\n$green-100: #dcffe4;\n$green-200: #bef5cb;\n$green-300: #85e89d;\n$green-500: #28a745;\n$green-700: #176f2c;\n$grey-500: #828282;\n$grey-700: #373737;\n$grey-800: #292929;\n$grey-900: #191919;\n$pink-300: #f692ce;\n$pink-700: #b93a86;\n$red-500: #d73a49;\n$white: #fff;\n$yellow-300: #ffea7f;\n$yellow-700: #dbab09;\n\n$nice-grey: #f8f8f8;\n$nice-grey-darker: #f0f0f0;\n$dark-mode-black: #121212;\n$default-accent-color: #fff8c5;\n$default-accent-color-dark: #2e2e2e;\n$default-border-dark: #575757;\n$default-border-light: #aeaeae;\n// Z-INDEX ENUM\n// $z-index-progressbar: 1;\n$z-index-popup: 2;\n\n// ICONS -- see assets/img/README.md for sources and license details\n// Are you a designer? New icon PRs welcomed!\n$image-alt-speed-disabled: '../img/modern-tortoise.png';\n$image-alt-speed-enabled: '../img/modern-tortoise-blue.png';\n$image-baseline: '../img/horizontal-rule.svg';\n$image-chevron-dn: '../img/chevron-down.svg';\n$image-chevron-up: '../img/chevron-up.svg';\n$image-lock-fill: '../img/lock-fill.svg';\n$image-magnet: '../img/magnet.svg';\n$image-pause-circle-active: '../img/pause-circle-active.svg';\n$image-pause-circle-idle: '../img/pause-circle-idle.svg';\n$image-play-circle-active: '../img/play-circle-active.svg';\n$image-play-circle-idle: '../img/play-circle-idle.svg';\n\n/// MIXINS\n\n@mixin for-phone-only {\n @media (max-width: 599px) {\n @content;\n }\n}\n@mixin for-tablet-portrait-up {\n @media (min-width: 600px) {\n @content;\n }\n}\n\n@mixin button {\n border: 1px solid var(--color-border);\n cursor: pointer;\n display: inline-block;\n padding: 3px;\n user-select: none;\n}\n\n/// GLOBAL\n\n:root {\n --color-fg-error: #{$red-500};\n --color-fg-port-closed: #{$red-500};\n --color-fg-port-open: #{$green-500};\n --color-progressbar-background-2: #{$grey-500};\n --color-progressbar-verify-1: #{$pink-300};\n --color-progressbar-verify-2: #{$pink-700};\n --color-progressbar-magnet-1: #{$yellow-300};\n --color-progressbar-magnet-2: #{$yellow-700};\n --color-progressbar-magnet-paused-1: #{$default-accent-color};\n --color-progressbar-magnet-paused-2: #{$grey-500};\n --color-progressbar-leech-paused-1: #{$blue-200};\n --color-progressbar-leech-paused-2: #{$grey-500};\n --color-progressbar-leech-queued-1: #{$blue-100};\n --color-progressbar-leech-queued-2: #{$blue-300};\n --color-progressbar-leech-1: #{$blue-300};\n --color-progressbar-leech-2: #{$blue-700};\n --color-progressbar-seed-paused-1: #{$green-200};\n --color-progressbar-seed-paused-2: #{$grey-500};\n --color-progressbar-seed-queued-1: #{$green-100};\n --color-progressbar-seed-queued-2: #{$green-300};\n --color-progressbar-seed-1: #{$green-300};\n --color-progressbar-seed-2: #{$green-700};\n color-scheme: light dark;\n @media (prefers-color-scheme: dark) {\n --color-bg-hover: #{$nice-grey};\n --color-fg-primary: #fff;\n --color-bg-primary: #{$grey-800};\n --color-bg-odd: #{$grey-900};\n --color-bg-even: #{$grey-800};\n --color-bg-menu: #{$grey-800};\n --color-fg-secondary: #{$nice-grey};\n --color-fg-on-popup: #{$nice-grey};\n --color-fg-disabled: #{$nice-grey};\n --color-bg-popup: #{$grey-800};\n --color-bg-warn: #cf6679;\n --color-fg-warn: #{$dark-mode-black};\n --color-border: #{$nice-grey};\n --color-border-selected: #d0d7de;\n --color-fg-tertiary: #{$grey-500};\n --color-toolbar-background: #{$grey-800};\n --color-inspector-background: #{$grey-800};\n --color-inspector-tabs: #{$nice-grey};\n --color-bg-selected: #{$default-accent-color-dark};\n --color-bg-tabs: #{$grey-700};\n --color-progressbar-background-1: #426389;\n --color-default-border: #{$default-border-dark};\n }\n @media (prefers-color-scheme: light) {\n --color-bg-hover: #{$nice-grey};\n --color-fg-primary: #404040;\n --color-bg-primary: #fff;\n --color-bg-even: #{$white};\n --color-bg-odd: #{$nice-grey};\n --color-bg-menu: #{$nice-grey};\n --color-fg-on-popup: #{$grey-900};\n --color-bg-popup: #{$white};\n --color-fg-secondary: #{$grey-500};\n --color-border: #{$grey-500};\n --color-border-selected: #d0d7de;\n --color-fg-tertiary: #{$grey-500};\n --color-bg-warn: #e4606d5b;\n --color-fg-warn: #cf212e;\n --color-fg-disabled: #{$grey-500};\n --color-toolbar-background: #{$nice-grey};\n --color-inspector-background: #{$white};\n --color-bg-tabs: #{$nice-grey-darker};\n --color-inspector-tabs: #{$nice-grey};\n --color-bg-selected: #{$default-accent-color};\n --color-progressbar-background-1: #{$nice-grey};\n --color-default-border: #{$default-border-light};\n --color-dialog-border: #{$nice-grey};\n }\n}\n\nhtml,\nbody {\n color: var(--color-fg-primary);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,\n Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n height: 100%;\n margin: 0;\n}\n\nimg {\n border: 0;\n}\n\na {\n color: var(--color-fg-primary);\n outline: 0;\n text-decoration: underline;\n}\n\n.hidden {\n display: none;\n}\n\n.even {\n background-color: var(--color-bg-even);\n}\n\n.odd {\n background-color: var(--color-bg-odd);\n}\n\n.mainwin {\n display: flex;\n flex-direction: column;\n height: 100%;\n position: relative;\n\n > * {\n margin: 0;\n padding: 0;\n }\n}\n\n.mainwin-workarea {\n display: flex;\n flex: 1;\n flex-direction: row;\n overflow: auto;\n}\n\ninput {\n border: 1px solid var(--color-border);\n border-radius: 3px;\n padding: 4px 5px;\n}\n\n/// TOOLBAR\n\n$toolbar-height-number: 50;\n$toolbar-height: $toolbar-height-number * 1px;\n\n#mainwin-toolbar {\n align-items: center;\n background: var(--color-toolbar-background);\n border-bottom: 1px solid var(--color-default-border);\n display: flex;\n flex-direction: row;\n height: $toolbar-height;\n margin: 0;\n width: 100%;\n\n button {\n background-color: transparent;\n background-position: center;\n background-repeat: no-repeat;\n border: 0;\n border-radius: 5px;\n cursor: pointer;\n height: $toolbar-height;\n margin-right: 6px;\n user-select: none;\n width: $toolbar-height;\n\n svg {\n stroke: var(--color-fg-primary); // ios only? idk yet\n }\n\n &:disabled {\n cursor: default;\n opacity: 0.25;\n }\n }\n\n > .toolbar-separator {\n border-left: 1px solid var(--color-default-border);\n height: 25px;\n margin: 0 6px 0 0;\n }\n\n :nth-last-child(2) {\n border: 0;\n flex-grow: 1;\n }\n}\n\n.toolbar-icon {\n stroke: var(--color-fg-primary);\n}\n\n#toolbar-inspector {\n svg {\n color: var(--color-fg-primary);\n }\n}\n\n#toolbar-overflow {\n margin-right: 4px;\n\n svg {\n fill: var(--color-fg-primary);\n height: 36px;\n width: 36px;\n }\n\n &.alt-speed-enabled {\n background-image: url($image-alt-speed-enabled);\n background-position: bottom left;\n background-size: 20px;\n }\n}\n\n/// FILTERBAR\n\n.mainwin-filterbar {\n align-items: center;\n background: var(--color-toolbar-background);\n border-bottom: 1px solid var(--color-default-border);\n display: flex;\n flex-direction: row;\n height: 30px;\n width: 100%;\n\n @include for-phone-only {\n padding: 5px 10px;\n\n :not(select):not(input) {\n display: none;\n }\n\n #torrent-search {\n padding: 5px;\n }\n }\n\n > * {\n margin-right: 5px;\n padding: 0 5px;\n }\n}\n\n$speed-icon-size: 12px;\n\n.speed-up-icon {\n background-image: url($image-chevron-up);\n background-repeat: no-repeat;\n background-size: $speed-icon-size $speed-icon-size;\n height: $speed-icon-size;\n width: $speed-icon-size;\n}\n\n.speed-dn-icon {\n background-image: url($image-chevron-dn);\n background-repeat: no-repeat;\n background-size: $speed-icon-size $speed-icon-size;\n height: $speed-icon-size;\n width: $speed-icon-size;\n}\n\n/// TORRENT CONTAINER\n\n$pauseresume-size-number: 20;\n$pauseresume-size: $pauseresume-size-number * 1px;\n$progressbar-border-number: 1;\n$progressbar-height-number: 14;\n$popup-top: 61px; // TODO: ugly that this is hardcoded\n\n.flex {\n flex-grow: 1;\n}\n\n#torrent-container {\n flex-grow: 1;\n left: 0;\n margin: 0;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding: 0;\n right: 0;\n}\n\n.torrent-container {\n background-color: $white;\n}\n\n$app-image: '../img/box.svg';\n$audio-image: '../img/music.svg';\n$folder-image: '../img/folder.svg';\n$font-image: '../img/type.svg';\n$image-image: '../img/image.svg';\n$package-image: '../img/package.svg';\n$text-image: '../img/file-text.svg';\n$video-image: '../img/film.svg';\n\n@mixin mime-icon-compact($mime-icon) {\n &[data-icon-multifile='true'] {\n background-image: url($folder-image);\n background-position: center;\n background-size: 16px;\n }\n}\n\n@mixin mime-icon($mime-icon) {\n // background-image: url($mime-icon);\n background-color: var(--color-fg-primary);\n -webkit-mask-image: url($mime-icon);\n mask-image: url($mime-icon);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n\n &[data-icon-multifile='true'] {\n -webkit-mask-image: url($mime-icon), url($folder-image);\n mask-image: url($mime-icon), url($folder-image);\n -webkit-mask-position: top left, bottom right;\n mask-position: top left, bottom right;\n -webkit-mask-repeat: no-repeat, no-repeat;\n mask-repeat: no-repeat, no-repeat;\n -webkit-mask-size: 16px, 16px;\n mask-size: 16px, 16px;\n }\n}\n\n.torrent-list {\n cursor: pointer;\n list-style-type: none;\n margin: 0;\n padding: 0;\n text-align: left;\n width: 100%;\n\n .torrent {\n border-bottom: 1px solid var(--color-default-border);\n user-select: none;\n\n .icon {\n // color the background svg fill\n background-color: var(--color-fg-primary);\n background-position: center, top left;\n\n &[data-icon-mime-type='audio'] {\n @include mime-icon($audio-image);\n }\n\n &[data-icon-mime-type='application'] {\n @include mime-icon($app-image);\n }\n\n &[data-icon-mime-type='font'] {\n @include mime-icon($font-image);\n }\n\n &[data-icon-mime-type='image'] {\n @include mime-icon($image-image);\n }\n\n &[data-icon-mime-type='model'] {\n @include mime-icon($package-image);\n }\n\n &[data-icon-mime-type='text'] {\n @include mime-icon($text-image);\n }\n\n &[data-icon-mime-type='video'] {\n @include mime-icon($video-image);\n }\n }\n\n &.compact {\n $icon-size-num: 16;\n $icon-size: $icon-size-num * 1px;\n\n align-items: center;\n display: flex;\n flex-direction: row-reverse;\n\n .icon {\n flex-shrink: 0;\n height: $icon-size;\n -webkit-mask-size: $icon-size, $icon-size-num * 0.5px;\n mask-size: $icon-size, $icon-size-num * 0.5px;\n width: $icon-size;\n\n &[data-icon-multifile='true'] {\n @include mime-icon($folder-image);\n }\n }\n\n > * {\n margin: 5px;\n }\n }\n\n &:not(.compact) {\n $icon-size-num: 32;\n $icon-size: $icon-size-num * 1px;\n align-items: center;\n display: grid;\n grid-column-gap: 12px;\n grid-template-areas:\n 'icon name labels'\n 'icon peers peers'\n 'icon progressbar progressbar'\n 'icon progress-text progress-text';\n grid-template-columns: $icon-size auto 1fr;\n padding: 6px 12px;\n\n .icon {\n background-size: $icon-size, $icon-size-num * 0.5px;\n grid-area: icon;\n height: $icon-size;\n width: $icon-size;\n }\n\n .torrent-name {\n color: var(--color-fg-primary);\n grid-area: name;\n\n &.paused {\n color: var(--color-fg-disabled);\n }\n }\n\n .torrent-labels {\n grid-area: labels;\n }\n\n .torrent-peer-details {\n grid-area: peers;\n }\n\n .torrent-progress {\n display: flex;\n flex-direction: row;\n grid-area: progressbar;\n }\n\n .torrent-progress-details {\n grid-area: progress-text;\n }\n\n > * {\n margin: 1px 0;\n }\n }\n\n &.selected {\n background-color: var(--color-bg-selected);\n }\n }\n\n .icon {\n background-position: center;\n background-repeat: no-repeat;\n }\n\n .torrent-pauseresume-button {\n background-position: center center;\n background-repeat: no-repeat;\n background-size: $pauseresume-size;\n margin-left: math.floor(math.div($pauseresume-size-number, 2)) * 1px;\n width: $pauseresume-size;\n\n &[data-action='pause'] {\n background-image: url($image-pause-circle-idle);\n\n &:active,\n &:hover {\n background-image: url($image-pause-circle-active);\n }\n }\n\n &[data-action='resume'] {\n background-image: url($image-play-circle-idle);\n\n &:active,\n &:hover {\n background-image: url($image-play-circle-active);\n }\n }\n }\n\n .torrent-progress-details.error,\n .torrent-peer-details.error {\n color: var(--color-fg-error);\n }\n\n .torrent-name {\n font-weight: bold;\n margin-bottom: 2px;\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &.compact {\n font-size: 1em;\n font-weight: normal;\n }\n\n &:not(.paused) {\n color: var(--color-fg-primary);\n }\n }\n\n .torrent-labels {\n font-size: x-small;\n font-weight: normal;\n margin-bottom: 2px;\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &.compact {\n flex: 1;\n font-size: x-small;\n }\n }\n\n .torrent-progress-details,\n .torrent-peer-details {\n color: var(--color-fg-primary);\n font-size: x-small;\n }\n\n .torrent-progress-bar {\n background-repeat: no-repeat;\n border-color: var(--color-border-selected);\n border-radius: 3px;\n border-style: solid;\n border-width: 1px;\n height: ($progressbar-height-number - ($progressbar-border-number * 2)) *\n 1px;\n\n &.full {\n flex-grow: 1;\n margin: 2px 0;\n }\n\n &.compact {\n min-width: 50px;\n width: 50px;\n }\n\n @function progressbar-gradient($color1, $color2) {\n @return linear-gradient(to bottom, $color1, $color2 80%);\n }\n\n @mixin progressbar-background($color1, $color2) {\n background: progressbar-gradient($color1, $color2),\n progressbar-gradient(\n var(--color-progressbar-background-1),\n var(--color-progressbar-background-1)\n );\n background-repeat: no-repeat;\n }\n\n &.leech.paused {\n @include progressbar-background(\n var(--color-progressbar-leech-paused-1),\n var(--color-progressbar-leech-paused-1)\n );\n }\n\n &.leech.queued {\n @include progressbar-background(\n var(--color-progressbar-leech-queued-1),\n var(--color-progressbar-leech-queued-1)\n );\n }\n\n &.leech {\n @include progressbar-background(\n var(--color-progressbar-leech-1),\n var(--color-progressbar-leech-1)\n );\n }\n\n &.magnet.paused {\n @include progressbar-background(\n var(--color-progressbar-magnet-paused-1),\n var(--color-progressbar-magnet-paused-1)\n );\n }\n\n &.magnet {\n @include progressbar-background(\n var(--color-progressbar-magnet-1),\n var(--color-progressbar-magnet-1)\n );\n }\n\n &.seed.paused {\n @include progressbar-background(\n var(--color-progressbar-seed-paused-1),\n var(--color-progressbar-seed-paused-1)\n );\n }\n\n &.seed.queued {\n @include progressbar-background(\n var(--color-progressbar-seed-queued-1),\n var(--color-progressbar-seed-queued-1)\n );\n }\n\n &.seed {\n @include progressbar-background(\n var(--color-progressbar-seed-1),\n var(--color-progressbar-seed-1)\n );\n }\n\n &.verify {\n @include progressbar-background(\n var(--color-progressbar-verify-1),\n var(--color-progressbar-verify-1)\n );\n }\n }\n}\n\n/// PREFERENCES DIALOG\n\n@include for-phone-only {\n html,\n body {\n overflow: hidden;\n }\n\n input[type='checkbox'] {\n height: 20px;\n width: 20px;\n }\n}\n\n#inspector,\n#prefs-dialog {\n @include for-phone-only {\n left: 0;\n }\n @include for-tablet-portrait-up {\n border-left: 1px solid var(--color-default-border);\n width: 570px;\n }\n}\n\n#prefs-dialog {\n $background-color: var(--color-inspector-background);\n background: $background-color;\n border: 0;\n bottom: 0;\n box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014,\n 0 9px 28px 8px #0000000d;\n position: absolute;\n right: 0;\n top: $popup-top;\n z-index: $z-index-popup;\n\n .tabs-page {\n grid-column-gap: 8px;\n grid-row-gap: 5px;\n grid-template-columns: 1fr 1fr;\n margin: 20px;\n\n &:not(.hidden) {\n display: grid;\n }\n\n .section-label {\n font-weight: bold;\n grid-column: span 2;\n // margin-left: -20px;\n padding-bottom: 5px;\n\n &:not(:first-of-type) {\n margin-top: 20px;\n }\n }\n }\n\n .alt-speed-section-label {\n background: transparent url($image-alt-speed-enabled) no-repeat;\n background-position: left;\n background-position-y: 4px;\n background-size: 20px;\n padding-left: 22px;\n }\n\n :disabled,\n .disabled {\n color: var(--color-fg-disabled);\n }\n\n #alt-times-div,\n #autostart-div,\n #port-forwarding,\n #randomize-port,\n #suffix-div,\n #use-dht-div,\n #use-lpd-div,\n #use-pex-div,\n #utp-enabled,\n .alt-speed-label {\n grid-column: span 2;\n }\n\n #default-trackers {\n height: 300px;\n }\n\n .blocklist-size-label,\n .blocklist-update-button,\n .register-handler-button,\n .port-status {\n grid-column: 2 / 3;\n }\n\n .blocklist-size-label {\n font-size: smaller;\n }\n\n .blocklist-size-number {\n font-weight: bolder;\n }\n\n .port-status-label {\n display: inline-block;\n font-weight: bold;\n margin-left: 5px;\n\n &[data-open='true'] {\n color: var(--color-fg-port-open);\n }\n\n &[data-open='false'] {\n color: var(--color-fg-port-closed);\n }\n }\n\n #default-trackers,\n .default-trackers-label {\n grid-column: 1 / 3;\n }\n\n .alt-speed-label {\n font-size: smaller;\n font-style: lighter;\n // nudge it up next to the section label\n margin: -10px 0 10px;\n }\n}\n\n#prefs-dialog.ui-tabs .ui-tabs-panel {\n padding: 0;\n user-select: none;\n}\n\n.prefs-section {\n text-align: left;\n\n > * {\n padding: 0 8px 8px;\n }\n\n .title {\n color: var(--color-fg-primary);\n font-size: larger;\n font-weight: bold;\n margin-bottom: 10px;\n padding-left: 0;\n }\n\n .row {\n .key {\n float: left;\n padding-top: 3px;\n\n > * {\n margin-left: 0;\n }\n }\n\n .value {\n margin-left: 150px;\n\n > * {\n width: 100%;\n }\n }\n }\n}\n\n/// TABS\n\n.tabs-container {\n align-items: stretch;\n background: var(--color-inspector-background);\n bottom: 0;\n display: flex;\n flex-direction: column;\n position: absolute;\n right: 0;\n top: $popup-top;\n z-index: $z-index-popup;\n @include for-phone-only {\n left: 0;\n }\n @include for-tablet-portrait-up {\n width: 550px;\n }\n}\n\n.tabs-buttons {\n align-self: center;\n background-color: var(--color-bg-tabs);\n border: 1px solid var(--color-border-selected);\n border-radius: 6px;\n display: flex;\n margin: 10px 0;\n\n button {\n appearance: none;\n border: 1px solid transparent;\n border-radius: 6px;\n color: var(--color-fg-primary);\n }\n}\n\n.tabs-pages {\n box-sizing: border-box;\n flex: 1;\n overflow-x: hidden;\n overflow-y: auto;\n @include for-phone-only {\n padding: 0 8px 20px;\n }\n @include for-tablet-portrait-up {\n padding: 0 20px 20px;\n }\n}\n\n.tabs-button {\n background-color: var(--color-bg-tabs);\n border: 1px solid transparent;\n font-size: 14px;\n padding: 3px 8px;\n\n &:active,\n &:checked,\n &.selected {\n background-color: var(--color-bg-even);\n border: 1px solid var(--color-fg-primary);\n border-radius: 6px;\n font-weight: 500;\n }\n}\n\n/// INSPECTOR\n\n#inspector {\n box-shadow: 0 3px 6px rgba(58, 58, 58, 0.7);\n}\n\n.inspector-info-page {\n font-size: 14px;\n // TODO: this is (mostly) copied from prefs-dialog.\n // can it be folded into a single set of rules?\n\n grid-column-gap: 8px;\n grid-row-gap: 8px;\n grid-template-columns: auto 1fr;\n margin: 20px;\n padding: 12px;\n\n &:not(.hidden) {\n display: grid;\n }\n\n .section-label {\n font-size: 16px;\n font-weight: bold;\n grid-column: span 2;\n padding-bottom: 5px;\n\n &:not(:first-of-type) {\n margin-top: 20px;\n }\n }\n\n label {\n font-weight: 500;\n }\n\n :not(.section-label) {\n // this section is not copied\n overflow-x: hidden;\n text-overflow: ellipsis;\n }\n}\n\n.inspector-info-magnet {\n button {\n background-color: var(--color-border);\n\n background-position: top;\n background-repeat: no-repeat;\n border: 0;\n cursor: pointer;\n height: 1rem;\n -webkit-mask: url($image-magnet) no-repeat center / 14px;\n mask: url($image-magnet) no-repeat center / 14px;\n vertical-align: middle;\n width: 1rem;\n }\n}\n\n#inspector .tabs-button,\n#prefs-dialog .tabs-button {\n height: 30px;\n margin: 0;\n min-width: 40px;\n}\n\n#inspector-file-list {\n margin: 0;\n padding: 0;\n\n .inspector-torrent-file-list-entry {\n display: grid;\n grid-column-gap: 5px;\n grid-template-areas:\n 'check name priority'\n 'blank1 info blank2';\n grid-template-columns: 20px 1fr 65px;\n margin-bottom: 4px;\n padding: 5px;\n\n &.skip {\n opacity: 0.5;\n }\n }\n\n .file-wanted-control {\n grid-area: check;\n }\n\n .inspector-torrent-file-list-entry-name {\n color: var(--color-fg-primary);\n cursor: pointer;\n font-size: 14px;\n grid-area: name;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .inspector-torrent-file-list-entry.skip\n > .inspector-torrent-file-list-entry-name {\n color: var(--color-fg-disabled);\n }\n\n .inspector-torrent-file-list-entry-progress {\n color: var(--color-fg-secondary);\n font-size: 12px;\n grid-area: info;\n }\n\n .single-file .inspector-torrent-file-list-entry > .file-wanted-control,\n .inspector-torrent-file-list-entry.complete > .file-wanted-control {\n cursor: default;\n }\n}\n\n#inspector-header {\n margin: 8px 0;\n}\n\n#torrent-inspector-name {\n font-size: large;\n font-weight: bold;\n}\n\n#inspector-tiers-list {\n color: var(--color-fg-primary);\n margin: 0 10px;\n padding: 0 12px;\n\n .tier-list-row {\n display: grid;\n font-size: 12px;\n grid-column-gap: 8px;\n grid-row-gap: 4px;\n margin-top: 8px;\n }\n\n .tier-list-torrent {\n color: var(--color-fg-primary);\n font-weight: bolder;\n margin-left: -12px;\n overflow-x: hidden;\n padding-top: 20px;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .tier-list-tracker {\n font-size: 14px;\n font-weight: bolder;\n grid-column: span 2;\n margin-top: 8px;\n padding-bottom: 4px;\n }\n\n .tier-announce,\n .tier-scrape,\n .tier-state {\n text-align: left;\n }\n\n .tier-downloads,\n .tier-leechers,\n .tier-seeders {\n text-align: right;\n }\n}\n\n// Peers Tab\n\n.peer-list {\n $table-border: 1px solid var(--color-default-border);\n\n border: $table-border;\n border-collapse: collapse;\n cursor: default;\n table-layout: fixed;\n text-align: left;\n width: 100%;\n\n td,\n th {\n font-size: smaller;\n padding: 5px;\n }\n\n td {\n border: $table-border;\n color: var(--color-fg-secondary);\n // padding: 5px 10px;\n }\n\n .torrent-row td {\n background: var(--color-default-border);\n color: var(--color-fg-primary);\n font-size: normal;\n font-weight: bolder;\n overflow-x: hidden;\n padding: 10px;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .encryption {\n &[data-encrypted='true'] {\n background-color: var(--color-border-selected);\n -webkit-mask: url($image-lock-fill) no-repeat center / 14px;\n mask: url($image-lock-fill) no-repeat center / 14px;\n width: 10px;\n }\n }\n\n .peer-address,\n .percent-done,\n .speed-down,\n .speed-up {\n text-align: right;\n }\n\n .percent-done {\n width: 10%;\n }\n\n .speed-down,\n .speed-up {\n width: 15%;\n }\n\n .peer-address {\n width: 25%;\n }\n\n .peer-app-name {\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include for-phone-only {\n display: none;\n }\n @include for-tablet-portrait-up {\n width: 25%;\n }\n }\n\n .status {\n cursor: pointer;\n }\n}\n\n/// FILE PRIORITY BUTTONS\n\n.file-priority-radiobox {\n $size-number: 20;\n $size: $size-number * 1px;\n $halfsize: math.floor(math.div($size-number, 2)) * 1px;\n\n grid-area: priority;\n\n > * {\n appearance: none;\n background-color: var(--color-border-selected);\n background-position: center;\n background-repeat: no-repeat;\n background-size: $halfsize, $size;\n border: 1px solid var(--color-border);\n height: $size;\n margin: 0;\n padding: 0;\n width: $size;\n }\n\n > .low {\n background-image: url($image-chevron-dn);\n border-right-width: 0;\n }\n\n > .normal {\n background-image: url($image-baseline);\n }\n\n > .high {\n background-image: url($image-chevron-up);\n border-left-width: 0;\n }\n\n //if input is checked then change the background color\n > .checked {\n background-color: var(--color-bg-hover);\n }\n}\n\n/// CONTEXT MENU\n\n.context-menu {\n $disabled-color: var(--color-fg-disabled);\n background-color: var(--color-bg-primary);\n border-radius: 5px;\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.7);\n color: var(--color-fg-on-popup);\n padding: 10px 5px;\n position: absolute;\n z-index: 9999;\n\n .context-menuitem {\n font-size: 13px;\n font-weight: 400;\n list-style: none;\n margin-right: 10px;\n padding: 5px 15px;\n\n &:hover:not(:disabled),\n &:focus:not(:disabled) {\n background-color: var(--color-bg-hover);\n border-radius: 6px;\n cursor: pointer;\n font-weight: 500;\n }\n\n &:disabled {\n color: $disabled-color;\n cursor: none;\n }\n\n &.warning:hover {\n background-color: var(--color-bg-warn);\n color: var(--color-fg-warn);\n }\n }\n}\n\n.context-menu-separator {\n border-bottom: 1px solid var(--color-fg-secondary);\n margin-bottom: 10px;\n padding-bottom: 10px;\n}\n\n/// OVERFLOW MENU\n\n.overflow-menu {\n background: var(--color-bg-popup);\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014,\n 0 9px 28px 8px #0000000d;\n color: var(--color-fg-on-popup);\n min-width: 220px;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding: 10px;\n position: absolute;\n\n right: 20px;\n top: 50px;\n z-index: $z-index-popup;\n\n @include for-phone-only() {\n height: 80vh;\n }\n // hide the fullscreen button unless we're on mobile\n @include for-tablet-portrait-up {\n #display-fullscreen-check,\n #display-fullscreen-label {\n display: none;\n }\n }\n\n fieldset {\n border: 0;\n display: block;\n margin: 8px 0;\n }\n\n fieldset ul {\n margin: 0;\n padding-left: 0;\n\n li {\n list-style-type: none;\n }\n\n a {\n cursor: pointer;\n }\n }\n\n .table-row {\n align-items: center;\n border-radius: 6px;\n display: flex;\n flex-direction: row;\n padding: 3px 0;\n }\n\n legend {\n color: var(--color-fg-primary);\n font-weight: bolder;\n margin: 12px 0 4px;\n }\n\n a,\n button,\n label {\n display: inline-flex;\n font-size: 1em;\n width: 100%;\n }\n\n a,\n button {\n background: transparent;\n border: 0;\n cursor: pointer;\n display: block;\n padding: 4px 0;\n text-align: left;\n text-decoration: none;\n width: 150px;\n }\n\n .input-and-label {\n align-items: center;\n display: inline-flex;\n flex-direction: row;\n }\n\n #display-options {\n display: flex;\n flex-direction: column;\n }\n\n #speed-options {\n display: flex;\n flex-direction: column;\n\n > .speed-up,\n > .speed-down {\n align-items: center;\n display: flex;\n flex-direction: row;\n padding: 4px 0;\n\n > label {\n overflow: hidden;\n width: 80px;\n }\n }\n\n .alt-speed {\n display: grid;\n grid-column-gap: 5px;\n grid-row-gap: 5px;\n grid-template-areas:\n 'check lb'\n 'turtle values';\n grid-template-columns: 22px 1fr;\n margin-bottom: 4px;\n }\n\n #alt-speed-check {\n grid-area: check;\n\n &:checked ~ #alt-speed-image {\n background-image: url($image-alt-speed-enabled);\n background-position: left;\n background-size: 22px;\n }\n\n &:not(:checked) ~ #alt-speed-image {\n background-image: url($image-alt-speed-disabled);\n background-size: 22px;\n }\n }\n\n #alt-speed-image {\n background-position: center;\n background-repeat: no-repeat;\n grid-area: turtle;\n }\n\n #alt-speed-label {\n grid-area: lb;\n }\n\n #alt-speed-values-label {\n font-size: small;\n grid-area: values;\n }\n }\n}\n\n/// DIALOGS\n\n$dialog-padding-number: 20;\n$dialog-logo-padding-number: math.div($dialog-padding-number * 2, 3);\n$logo-size: 64px;\n\n@include for-phone-only {\n .dialog-buttons {\n padding-top: $dialog-logo-padding-number * 1px;\n }\n\n .dialog-container {\n opacity: 96%;\n position: absolute;\n top: $popup-top;\n width: 100%;\n }\n\n .dialog-logo {\n padding-bottom: $dialog-logo-padding-number * 1px;\n }\n\n .dialog-window {\n align-items: center;\n display: flex;\n flex-direction: column;\n }\n}\n@include for-tablet-portrait-up {\n .dialog-container {\n min-width: 400px;\n position: absolute;\n top: $popup-top * 2;\n }\n\n .dialog-heading {\n grid-area: heading;\n }\n\n .dialog-logo {\n grid-area: icon;\n padding-right: $dialog-logo-padding-number * 1px;\n }\n\n .dialog-window {\n background-color: var(--color-bg-popup);\n color: var(--color-fg-on-popup);\n display: grid;\n grid-column-gap: 12px;\n grid-template-areas:\n 'icon heading'\n 'icon message'\n 'icon workarea'\n 'icon buttons';\n grid-template-columns: $logo-size 1fr;\n padding: 2px 12px;\n }\n}\n\n.dialog-buttons {\n display: flex;\n float: right;\n grid-area: buttons;\n margin: 10px 0 0;\n text-align: center;\n\n button {\n appearance: none;\n background: var(--color-bg-primary);\n border: 1px solid var(--color-default-border);\n border-radius: 5px;\n color: var(--color-fg-primary);\n margin-left: 8px;\n padding: 8px;\n text-decoration: none;\n }\n}\n\n.dialog-buttons-begin {\n flex-grow: 1;\n}\n\n.dialog-buttons-end {\n display: none;\n}\n\ndialog {\n border: 0;\n}\n\n.dialog-container {\n box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014,\n 0 9px 28px 8px #0000000d;\n color: var(--color-fg-primary);\n display: block;\n padding: 0;\n z-index: $z-index-popup;\n\n @include for-tablet-portrait-up() {\n border: 0;\n border-radius: 8px;\n max-width: 50%;\n }\n}\n\n.dialog-heading {\n align-items: center;\n display: flex;\n font-size: 1.2em;\n font-weight: bold;\n}\n\n.dialog-logo {\n background: transparent url('../img/logo.png') top left no-repeat;\n height: $logo-size;\n width: $logo-size;\n}\n\n.dialog-message {\n grid-area: message;\n margin: 10px 0 0;\n}\n\n.dialog-window {\n background: var(--color-bg-primary);\n border-radius: 8px;\n padding: $dialog-padding-number * 1px;\n}\n\n.dialog-workarea {\n display: flex;\n flex-direction: column;\n grid-area: workarea;\n margin: 10px 0 0;\n\n > * {\n margin-bottom: 5px;\n }\n}\n\n/// ABOUT DIALOG\n\n.about-dialog {\n max-width: initial;\n}\n\n.about-dialog .dialog-workarea > * {\n margin-bottom: 10px;\n}\n\n.about-dialog-version-number {\n margin-left: 4px;\n}\n\n.about-dialog-version-checksum {\n font-size: small;\n font-style: italic;\n font-weight: normal;\n margin-left: auto;\n padding-left: 10px;\n}\n\n/// OPEN TORRENT DIALOG\n.open-torrent {\n input {\n margin-bottom: 15px;\n }\n\n #auto-start-label {\n margin-left: 5px;\n }\n}\n\n/// HOTKEYS DIALOG\n\n.shortcuts-dialog {\n table {\n border-collapse: collapse;\n width: 100%;\n }\n\n th,\n td {\n border: 1px solid var(--color-border);\n padding: 5px 10px;\n }\n}\n\n/// RENAME DIALOG\n\n#torrent-rename-name {\n min-width: 400px;\n}\n\n/// SET-LOCATION DIALOG\n\n#move-container #torrent-path {\n min-width: 400px;\n}\n\n/// STATISTICS DIALOG\n\n.tabs-pages,\n.inspector-info-page,\n.statistics-dialog {\n .content {\n column-gap: 16px;\n display: grid;\n grid-row-gap: 6px;\n grid-template-columns: auto 1fr;\n margin-top: 4px;\n\n @include for-phone-only {\n margin: 4px 0 16px;\n }\n @include for-tablet-portrait-up {\n margin: 4px 16px 16px;\n }\n\n div {\n word-break: break-word;\n }\n }\n\n fieldset {\n border: 0;\n margin: 0;\n padding: 0;\n }\n\n legend {\n font-weight: bolder;\n margin-bottom: 4px;\n }\n}\n\n/// UPLOAD DIALOG\n\n#free-space-text {\n display: inline-block;\n font-size: smaller;\n font-style: italic;\n}\n\n#torrent-upload-frame {\n border: 0;\n display: block; /* Don't change this : safari forms won't target hidden frames (they open a new window) */\n height: 0;\n left: -1000px;\n margin: 0;\n padding: 0;\n position: absolute;\n top: -1000px;\n width: 0;\n}\n\n.ui-menu {\n width: 200px;\n}\n"],sourceRoot:""}]);const Y=S},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,o,s){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var a=0;a0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=s),n&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=n):d[2]=n),o&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=o):d[4]="".concat(o)),t.push(d))}},t}},667:e=>{"use strict";e.exports=function(e,t){return t||(t={}),e?(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]|(%20)/.test(e)||t.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e):e}},537:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),s="/*# ".concat(o," */");return[t].concat([s]).join("\n")}return[t].join("\n")}},307:(e,t,n)=>{e=n.nmd(e);var r="__lodash_hash_undefined__",o=9007199254740991,s="[object Arguments]",i="[object Array]",a="[object Boolean]",l="[object Date]",c="[object Error]",d="[object Function]",A="[object Map]",p="[object Number]",g="[object Object]",u="[object Promise]",m="[object RegExp]",h="[object Set]",C="[object String]",b="[object Symbol]",f="[object WeakMap]",v="[object ArrayBuffer]",y="[object DataView]",x=/^\[object .+?Constructor\]$/,k=/^(?:0|[1-9]\d*)$/,w={};w["[object Float32Array]"]=w["[object Float64Array]"]=w["[object Int8Array]"]=w["[object Int16Array]"]=w["[object Int32Array]"]=w["[object Uint8Array]"]=w["[object Uint8ClampedArray]"]=w["[object Uint16Array]"]=w["[object Uint32Array]"]=!0,w[s]=w[i]=w[v]=w[a]=w[y]=w[l]=w[c]=w[d]=w[A]=w[p]=w[g]=w[m]=w[h]=w[C]=w[f]=!1;var E="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,I="object"==typeof self&&self&&self.Object===Object&&self,B=E||I||Function("return this")(),_=t&&!t.nodeType&&t,S=_&&e&&!e.nodeType&&e,D=S&&S.exports===_,T=D&&E.process,L=function(){try{return T&&T.binding&&T.binding("util")}catch(e){}}(),M=L&&L.isTypedArray;function P(e,t){for(var n=-1,r=null==e?0:e.length;++na))return!1;var c=s.get(e);if(c&&s.get(t))return c==t;var d=-1,A=!0,p=2&n?new ve:void 0;for(s.set(e,t),s.set(t,e);++d-1},be.prototype.set=function(e,t){var n=this.__data__,r=ke(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},fe.prototype.clear=function(){this.size=0,this.__data__={hash:new Ce,map:new(se||be),string:new Ce}},fe.prototype.delete=function(e){var t=Te(this,e).delete(e);return this.size-=t?1:0,t},fe.prototype.get=function(e){return Te(this,e).get(e)},fe.prototype.has=function(e){return Te(this,e).has(e)},fe.prototype.set=function(e,t){var n=Te(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},ve.prototype.add=ve.prototype.push=function(e){return this.__data__.set(e,r),this},ve.prototype.has=function(e){return this.__data__.has(e)},ye.prototype.clear=function(){this.__data__=new be,this.size=0},ye.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},ye.prototype.get=function(e){return this.__data__.get(e)},ye.prototype.has=function(e){return this.__data__.has(e)},ye.prototype.set=function(e,t){var n=this.__data__;if(n instanceof be){var r=n.__data__;if(!se||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new fe(r)}return n.set(e,t),this.size=n.size,this};var Me=te?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,s=[];++n-1&&e%1==0&&e-1&&e%1==0&&e<=o}function We(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function $e(e){return null!=e&&"object"==typeof e}var Ze=M?function(e){return function(t){return e(t)}}(M):function(e){return $e(e)&&He(e.length)&&!!w[we(e)]};function Oe(e){return null!=(t=e)&&He(t.length)&&!Ue(t)?xe(e):_e(e);var t}e.exports=function(e,t){return Ie(e,t)}},379:e=>{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},216:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},565:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},795:e=>{"use strict";e.exports=function(e){var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var o=void 0!==n.layer;o&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,o&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var s=n.sourceMap;s&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},589:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},409:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItYm94Ij4KICAgIDxwYXRoIGQ9Ik0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnoiPjwvcGF0aD4KICAgIDxwb2x5bGluZSBwb2ludHM9IjMuMjcgNi45NiAxMiAxMi4wMSAyMC43MyA2Ljk2Ij48L3BvbHlsaW5lPgogICAgPGxpbmUgeDE9IjEyIiB5MT0iMjIuMDgiIHgyPSIxMiIgeTI9IjEyIj48L2xpbmU+Cjwvc3ZnPg=="},726:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItY2hldnJvbi1kb3duIj4KICA8cG9seWxpbmUgcG9pbnRzPSI2IDkgMTIgMTUgMTggOSI+PC9wb2x5bGluZT4KPC9zdmc+"},75:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItY2hldnJvbi11cCI+CiAgPHBvbHlsaW5lIHBvaW50cz0iMTggMTUgMTIgOSA2IDE1Ij48L3BvbHlsaW5lPgo8L3N2Zz4="},101:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZmlsZS10ZXh0Ij4KICAgIDxwYXRoIGQ9Ik0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiPjwvcGF0aD4KICAgIDxwb2x5bGluZSBwb2ludHM9IjE0IDIgMTQgOCAyMCA4Ij48L3BvbHlsaW5lPgogICAgPGxpbmUgeDE9IjE2IiB5MT0iMTMiIHgyPSI4IiB5Mj0iMTMiPjwvbGluZT4KICAgIDxsaW5lIHgxPSIxNiIgeTE9IjE3IiB4Mj0iOCIgeTI9IjE3Ij48L2xpbmU+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIxMCA5IDkgOSA4IDkiPjwvcG9seWxpbmU+Cjwvc3ZnPg=="},648:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZmlsbSI+CiAgICA8cmVjdCB4PSIyIiB5PSIyIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHJ4PSIyLjE4IiByeT0iMi4xOCI+PC9yZWN0PgogICAgPGxpbmUgeDE9IjciIHkxPSIyIiB4Mj0iNyIgeTI9IjIyIj48L2xpbmU+CiAgICA8bGluZSB4MT0iMTciIHkxPSIyIiB4Mj0iMTciIHkyPSIyMiI+PC9saW5lPgogICAgPGxpbmUgeDE9IjIiIHkxPSIxMiIgeDI9IjIyIiB5Mj0iMTIiPjwvbGluZT4KICAgIDxsaW5lIHgxPSIyIiB5MT0iNyIgeDI9IjciIHkyPSI3Ij48L2xpbmU+CiAgICA8bGluZSB4MT0iMiIgeTE9IjE3IiB4Mj0iNyIgeTI9IjE3Ij48L2xpbmU+CiAgICA8bGluZSB4MT0iMTciIHkxPSIxNyIgeDI9IjIyIiB5Mj0iMTciPjwvbGluZT4KICAgIDxsaW5lIHgxPSIxNyIgeTE9IjciIHgyPSIyMiIgeTI9IjciPjwvbGluZT4KPC9zdmc+"},121:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZm9sZGVyIj4KICAgIDxwYXRoIGQ9Ik0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyeiI+PC9wYXRoPgo8L3N2Zz4="},416:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCI+CiAgICA8Zz4KICAgICAgICA8cmVjdCBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPgogICAgICAgIDxyZWN0IGZpbGwtcnVsZT0iZXZlbm9kZCIgaGVpZ2h0PSIyIiB3aWR0aD0iMTYiIHg9IjQiIHk9IjExIi8+CiAgICA8L2c+Cjwvc3ZnPg=="},404:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItaW1hZ2UiPgogICAgPHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiByeD0iMiIgcnk9IjIiPjwvcmVjdD4KICAgIDxjaXJjbGUgY3g9IjguNSIgY3k9IjguNSIgcj0iMS41Ij48L2NpcmNsZT4KICAgIDxwb2x5bGluZSBwb2ludHM9IjIxIDE1IDE2IDEwIDUgMjEiPjwvcG9seWxpbmU+Cjwvc3ZnPg=="},355:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMWVtIiBoZWlnaHQ9IjFlbSIgdmlld0JveD0iMCAwIDE2IDE2IiBjbGFzcz0iYmkgYmktbG9jay1maWxsIiBmaWxsPSIjZmZmIgogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTIuNSA5YTIgMiAwIDAgMSAyLTJoN2EyIDIgMCAwIDEgMiAydjVhMiAyIDAgMCAxLTIgMmgtN2EyIDIgMCAwIDEtMi0yVjl6Ii8+CiAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNC41IDRhMy41IDMuNSAwIDEgMSA3IDB2M2gtMVY0YTIuNSAyLjUgMCAwIDAtNSAwdjNoLTFWNHoiLz4KPC9zdmc+"},246:e=>{"use strict";e.exports="data:image/png;base64,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"},496:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iY3VycmVudENvbG9yIiBjbGFzcz0iYmkgYmktbWFnbmV0IiB2aWV3Qm94PSIwIDAgMTYgMTYiPgogIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTggMWE3IDcgMCAwIDAtNyA3djNoNFY4YTMgMyAwIDAgMSA2IDB2M2g0VjhhNyA3IDAgMCAwLTctN1ptNyAxMWgtNHYzaDR2LTNaTTUgMTJIMXYzaDR2LTNaTTAgOGE4IDggMCAxIDEgMTYgMHY4aC02VjhhMiAyIDAgMSAwLTQgMHY4SDBWOFoiLz4KPC9zdmc+"},986:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAADFUlEQVR4Ab1WA5QcTRDe32Zs2zZHsW3btm10z77Ytm3btrXdc3rxZVO1xsy+uajPXfpKX5/FzFGoVkImfJpE+B74uidRdl0mbDv8nCRPtaW3fKsjq2G5AMBBmXK70ZdE+QcAtkogEbHM+q0+yP6zOJVnKWm1JTINRiI2AQJFGoMJBMYuy5QlCeWz+ETtX6i0Ckm+89gS/kBSeb2QYMpPe/w7KrqNTIMibHyoqgDoI8YJaf31Le327/BH6SlhqXBWzFeIj0ZbTEa3/ZQNDLQJqNQbcTJPGtwqypeBsDX+XlYN+08mbCjc2UKA2adQVgr1cY4giePSVK1CUHUIe+prp6i8iDDpWTzw/cIH1BT/LAiTfITTxGn8H3cLFaJVhGBdQUbhayRk3FS0ajk8iahaMbi/42rdCf/q8LoBSURjNaovt/+ANj4VO+gduEH2H+HyQkAbwrBCKDOajVJWLTnorsFt87UVKS+McpHaMgD4JzotDkMK8bsHPd8sehnMxgsPF1G+FCsEdwugWjuxchhYt5WEL/GMgNnFIPymi294abh4b6C4xtkSPjxQJqosvzz26R8A7pWO3evi0yJi43yZBBQN4FtaShFWAHr+MgTqWq4t2REkU7X2Ts7i8w24qaNzFNgzA98Mfp6En4tg7bO7topdM+YVfh5XWZjCMmIGOgGvOwJaeWbI7q1Ou8+42mZ13Z1EkAphmYzoAQHt1AWDAaaGlUQdnIcQZNjMWSU2QE+OYDEhaeqL3BYzp/QU9jcELAcAekBpBwHA5eAoXCSshmuYG7g3yOArXKC2PK7kJuEaI2UgLeBb6CLamJ0y9Hl8iWj1oUVtS0+JjONec3GqVtyPTY1bqyk0PLXbH3IMkiuyN75TxenzP2PwomuVkLYD6Hw9rjkSl0RslfFv3BodMBEQdLFMtKJYCacvtiuwojhr6MscIMo6h5iPLm69CrNe/IUtwKCiysuWUnnW0lPsv7jleAdgogy27VGBCQ9+M/2/Cb7SkNVpB3MSfhhL7fssmD0wuAlxiwDEFgB3Bf3hTGK1zfr4CJlxUMYWF0ZsAAAAAElFTkSuQmCC"},302:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAQAAACZKrSjAAACVElEQVR42p2UXUgUURTH/4tL0faNRWG6e8/kQ6lFYkGB1W5RKDP/6/pgBFkvBiERUkH00gdIhA+CBBa+FmUKIfgSlBGBFJQUFBQtgSwSFhZpRfmR3h52Gmd0fOmel/lzDr97vu4A845OsYOPmWWGD5w2bsL/HLuC/TQBm+G92vyw2NJF1pbCDaEYZz9/zMHk7G1NUTBSrVLXZUqMGBmS+jkYxvRQKMbQ6NZgLvJMjM8u+L0RIL2RmTCM04IIY758LnmIXFYTVnw2ny7dCNirdTO/BDBPdBVQm8/nWnv5fHIxu2WdjIgRI9f+TeoADQ076lYCjLFGn2U7r7JBlwMA93KQhi9ysdYRFzNtxZEng2LESD8AIBnlG/f+Ud2cjPorTiv2cMb1VgKJzTLsFTYqWfdrOFfWeV8pI4BO8S7beYt9jLHS16tOQLoCbXZNfQDAav7xgXoAXvHUzoNL+dtT41yjqkJA0+oEnF38FRj0YcB56OlTAG/6vE3JqHz2Ib7KgLqttgHQ7wMzeo1ITQmnPZ1JRu0yTnqgV4B1Q4wMqKbi0oKYfw37fJhJ7gOczgD6OMCLs9oui5dY20OeRfUKOvqcvsxujvEQ4BzzZpSzMe4AnDYOsoMNdgUiCz5UtV6Oysnitcko4CQ5NW+zv+liALDiVqPVIvWly8IxaZlwl703karLc2rZy3EP8p139B5EVFo9khm3wRnkhYCs0/5BWmcAQC+3K5jWtt5avRgALFt++qI+Fi4J/atIq7yUrDy1WhLlC5VfVKCa5L68k6x0J1JhEX8BQqqoVfkFUBAAAAAASUVORK5CYII="},989:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItbXVzaWMiPjxwYXRoIGQ9Ik05IDE4VjVsMTItMnYxMyI+PC9wYXRoPjxjaXJjbGUgY3g9IjYiIGN5PSIxOCIgcj0iMyI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTgiIGN5PSIxNiIgcj0iMyI+PC9jaXJjbGU+PC9zdmc+"},900:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItcGFja2FnZSI+PGxpbmUgeDE9IjE2LjUiIHkxPSI5LjQiIHgyPSI3LjUiIHkyPSI0LjIxIj48L2xpbmU+PHBhdGggZD0iTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiI+PC9wYXRoPjxwb2x5bGluZSBwb2ludHM9IjMuMjcgNi45NiAxMiAxMi4wMSAyMC43MyA2Ljk2Ij48L3BvbHlsaW5lPjxsaW5lIHgxPSIxMiIgeTE9IjIyLjA4IiB4Mj0iMTIiIHkyPSIxMiI+PC9saW5lPjwvc3ZnPg=="},444:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiM4MDAiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0xIDE0SDlWOGgydjh6bTQgMGgtMlY4aDJ2OHoiLz48L3N2Zz4K"},202:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiM5OTkiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0xIDE0SDlWOGgydjh6bTQgMGgtMlY4aDJ2OHoiLz48L3N2Zz4K"},598:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwODAiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE0LjV2LTlsNiA0LjUtNiA0LjV6Ii8+PC9zdmc+Cg=="},757:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiM5OTkiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE0LjV2LTlsNiA0LjUtNiA0LjV6Ii8+PC9zdmc+Cg=="},403:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItdHlwZSI+PHBvbHlsaW5lIHBvaW50cz0iNCA3IDQgNCAyMCA0IDIwIDciPjwvcG9seWxpbmU+PGxpbmUgeDE9IjkiIHkxPSIyMCIgeDI9IjE1IiB5Mj0iMjAiPjwvbGluZT48bGluZSB4MT0iMTIiIHkxPSI0IiB4Mj0iMTIiIHkyPSIyMCI+PC9saW5lPjwvc3ZnPg=="}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={id:r,loaded:!1,exports:{}};return e[r](s,s.exports,n),s.loaded=!0,s.exports}n.m=e,n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n.b=document.baseURI||self.location.href,n.nc=void 0,(()=>{"use strict";class e extends EventTarget{constructor(){super(),this.actions=Object.seal({"deselect-all":{enabled:!1,shortcut:"Control+A",text:"Deselect all"},"move-bottom":{enabled:!1,text:"Move to the back of the queue"},"move-down":{enabled:!1,text:"Move down in the queue"},"move-top":{enabled:!1,text:"Move to the front of the queue"},"move-up":{enabled:!1,text:"Move up in the queue"},"open-torrent":{enabled:!0,shortcut:"Alt+O",text:"Open torrent…"},"pause-all-torrents":{enabled:!1,text:"Pause all"},"pause-selected-torrents":{enabled:!1,shortcut:"Alt+U",text:"Pause"},"reannounce-selected-torrents":{enabled:!1,text:"Ask tracker for more peers"},"remove-selected-torrents":{enabled:!1,text:"Remove from list…"},"resume-selected-torrents":{enabled:!1,shortcut:"Alt+R",text:"Resume"},"resume-selected-torrents-now":{enabled:!1,text:"Resume now"},"select-all":{enabled:!1,shortcut:"Alt+A",text:"Select all"},"show-about-dialog":{enabled:!0,text:"About"},"show-inspector":{enabled:!1,shortcut:"Alt+I",text:"Torrent Inspector"},"show-labels-dialog":{enabled:!1,text:"Edit Labels…"},"show-move-dialog":{enabled:!1,shortcut:"Alt+L",text:"Set location…"},"show-overflow-menu":{enabled:!0,text:"More options…"},"show-preferences-dialog":{enabled:!0,shortcut:"Alt+P",text:"Edit preferences"},"show-rename-dialog":{enabled:!1,shortcut:"Alt+N",text:"Rename…"},"show-shortcuts-dialog":{enabled:!0,text:"Keyboard shortcuts"},"show-statistics-dialog":{enabled:!0,shortcut:"Alt+S",text:"Statistics"},"start-all-torrents":{enabled:!1,text:"Start all"},"toggle-compact-rows":{enabled:!0,text:"Compact rows"},"trash-selected-torrents":{enabled:!1,text:"Trash data and remove from list…"},"verify-selected-torrents":{enabled:!1,shortcut:"Alt+V",text:"Verify local data"}})}click(e){if(this.isEnabled(e)){const t=new Event("click");t.action=e,this.dispatchEvent(t)}}getActionForShortcut(e){for(const[t,n]of Object.entries(this.actions))if(e===n.shortcut)return t;return null}allShortcuts(){return new Map(Object.entries(this.actions).filter((([,e])=>e.shortcut)).map((([e,t])=>[t.shortcut,e])))}isEnabled(e){return this._getAction(e).enabled}text(e){return this._getAction(e).text}keyshortcuts(e){return this._getAction(e).shortcut}update(t){const n=e._recount(t.selected,t.nonselected);this._updateStates(n)}_getAction(e){const t=this.actions[e];if(!t)throw new Error(`no such action: ${e}`);return t}static _recount(e,t){const n=e.length+t.length,r=e.filter((e=>e.isStopped())).length,o=e.length-r,s=t.filter((e=>e.isStopped())).length,i=t.length-s,a=r+s,l=o+i,c=e.filter((e=>e.isQueued())).length;return{active:l,nonselected_active:i,nonselected_paused:s,paused:a,selected:e.length,selected_active:o,selected_paused:r,selected_queued:c,total:n}}_updateStates(e){const t=(e,t)=>{for(const n of t)this._updateActionState(n,e)};t(e.selected_paused>0,["resume-selected-torrents"]),t(e.paused>0,["start-all-torrents"]),t(e.active>0,["pause-all-torrents"]),t(e.selected_paused>0||e.selected_queued>0,["resume-selected-torrents-now"]),t(e.selected_active>0,["pause-selected-torrents","reannounce-selected-torrents"]),t(e.selected>0,["deselect-all","move-bottom","move-down","move-top","move-up","remove-selected-torrents","show-inspector","show-labels-dialog","show-move-dialog","trash-selected-torrents","verify-selected-torrents"]),t(1===e.selected,["show-rename-dialog"]),t(e.selecteds(o,t,i,r,n)))}return a[0].classList.add("selected"),i.children[0].classList.remove("hidden"),{buttons:a,root:r}}function a(e){const t=document.createElement("dialog");t.classList.add("dialog-container","popup",e),t.open=!0,t.setAttribute("role","dialog");const n=document.createElement("div");n.classList.add("dialog-window"),t.append(n);const r=document.createElement("div");r.classList.add("dialog-logo"),n.append(r);const o=document.createElement("div");o.classList.add("dialog-heading"),n.append(o);const s=document.createElement("div");s.classList.add("dialog-message"),n.append(s);const i=document.createElement("div");i.classList.add("dialog-workarea"),n.append(i);const a=document.createElement("div");a.classList.add("dialog-buttons"),n.append(a);const l=document.createElement("span");l.classList.add("dialog-buttons-begin"),a.append(l);const c=document.createElement("button");c.classList.add("dialog-dismiss-button"),c.textContent="Cancel",a.append(c);const d=document.createElement("button");d.textContent="OK",a.append(d);const A=document.createElement("span");return A.classList.add("dialog-buttons-end"),a.append(A),{confirm:d,dismiss:c,heading:o,message:s,root:t,workarea:i}}function l(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)))}function c(e,t){const n=[],{root:r,content:o}=function(e){const t=document.createElement("fieldset");t.classList.add("section");const n=document.createElement("legend");n.classList.add("title"),n.textContent=e,t.append(n);const r=document.createElement("div");return r.classList.add("content"),t.append(r),{content:r,root:t}}(e);for(const e of t){const t=document.createElement("label");t.textContent=e,o.append(t);const r=document.createElement("div");r.id=l(),o.append(r),t.setAttribute("for",r.id),n.push(r)}return{children:n,root:r}}function d(e,t=100){let n=null;return(...r)=>{n||(n=setTimeout((()=>{n=null,e(r)}),t))}}function A(e,t){return r()(e,t)}function p(e,t,n){n?e.setAttribute(t,!0):e.removeAttribute(t)}function g(e,t){p(e,"disabled",!t)}function u(e,t){e.classList.toggle("checked",t)}function m(e,t,n,r){const o=function(e,t){let{x:n,y:r}=e;const{width:o,height:s}=e;return n>t.x+t.width-o&&n-o>=t.x?n-=o:n=Math.min(n,t.x+t.width-o),r>t.y+t.height-s&&r-s>=t.y?r-=s:r=Math.min(r,t.y+t.height-s),new DOMRect(n,r,o,s)}(new DOMRect(t,n,e.clientWidth,e.clientHeight),r.getBoundingClientRect());e.style.left=`${o.left}px`,e.style.top=`${o.top}px`}class h extends EventTarget{constructor(e){super(),this.listener=t=>{e.contains(t.target)||(this.dispatchEvent(new MouseEvent(t.type,t)),t.preventDefault())},Object.seal(this),this.start()}start(){setTimeout((()=>document.addEventListener("click",this.listener)),0)}stop(){document.removeEventListener("click",this.listener)}}function C(e,t){e.textContent!==t&&(e.textContent=t)}class b{constructor(e){this._prefs=e,this._elements={toggle:document.querySelector("#toggle-notifications")}}_setEnabled(e){this.prefs.notifications_enabled=e,C(this._toggle,(e?"Disable":"Enable")+" Notifications")}_requestPermission(){Notification.requestPermission().then((e=>this._setEnabled("granted"===e)))}toggle(){this._enabled?this._setEnabled(!1):"granted"===Notification.permission?this._setEnabled(!0):"denied"!==Notification.permission&&this._requestPermission()}}class f extends EventTarget{constructor(){super(),this._cache={},this.dispatchPrefsChange=d(((e,t,n)=>{const r=new Event("change");Object.assign(r,{key:e,old_value:t,value:n}),this.dispatchEvent(r)}));for(const[e,t]of Object.entries(f._Defaults))this._set(e,f._getCookie(e,t)),Object.defineProperty(this,e.replaceAll("-","_"),{get:()=>this._get(e),set:t=>{this._set(e,t)}});Object.seal(this)}entries(){return Object.entries(this._cache)}keys(){return Object.keys(this._cache)}_get(e){const{_cache:t}=this;if(!Object.prototype.hasOwnProperty.call(t,e))throw new Error(e);return t[e]}_set(e,t){const{_cache:n}=this,r=n[e];r!==t&&(n[e]=t,f._setCookie(e,t),this.dispatchPrefsChange(e,r,t))}static _setCookie(e,t){const n=new Date;n.setFullYear(n.getFullYear()+1),document.cookie=`${e}=${t}; SameSite=Strict; expires=${n.toGMTString()}`}static _getCookie(e,t){const n=f._readCookie(e);return null===n?t:"true"===n||"false"!==n&&(/^\d+$/.test(n)?Number.parseInt(n,10):n)}static _readCookie(e){const t=`; ${document.cookie}`.split(`; ${e}=`);return 2===t.length?t.pop().split(";").shift():null}}f.AltSpeedEnabled="alt-speed-enabled",f.DisplayCompact="compact",f.DisplayFull="full",f.DisplayMode="display-mode",f.FilterActive="active",f.FilterAll="all",f.FilterDownloading="downloading",f.FilterFinished="finished",f.FilterMode="filter-mode",f.FilterPaused="paused",f.FilterSeeding="seeding",f.NotificationsEnabled="notifications-enabled",f.RefreshRate="refresh-rate-sec",f.SortAscending="ascending",f.SortByActivity="activity",f.SortByAge="age",f.SortByName="name",f.SortByProgress="progress",f.SortByQueue="queue",f.SortByRatio="ratio",f.SortBySize="size",f.SortByState="state",f.SortDescending="descending",f.SortDirection="sort-direction",f.SortMode="sort-mode",f._Defaults={[f.AltSpeedEnabled]:!1,[f.DisplayMode]:f.DisplayFull,[f.FilterMode]:f.FilterAll,[f.NotificationsEnabled]:!1,[f.RefreshRate]:5,[f.SortDirection]:f.SortAscending,[f.SortMode]:f.SortByName};class v extends EventTarget{constructor(e){super(),this.elements=v._create(e),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.elements}_onDismiss(){this.close()}static _create(e){const t=a("about-dialog");t.root.setAttribute("aria-label","About transmission"),t.heading.textContent="Transmission",t.dismiss.textContent="Close";let n=document.createElement("div");return n.classList.add("about-dialog-version-number"),n.textContent=e.version,t.heading.append(n),n=document.createElement("div"),n.classList.add("about-dialog-version-checksum"),n.textContent=e.checksum,t.heading.append(n),n=document.createElement("div"),n.textContent="A fast and easy bitTorrent client",t.workarea.append(n),n=document.createElement("div"),n.textContent="Copyright © The Transmission Project",t.workarea.append(n),t.confirm.remove(),delete t.confirm,t}}class y extends EventTarget{constructor(e){super(),this.action_listener=this._update.bind(this),this.action_manager=e,this.action_manager.addEventListener("change",this.action_listener),Object.assign(this,this._create()),this.show()}show(){for(const[e,t]of Object.entries(this.actions))g(t,this.action_manager.isEnabled(e));document.body.append(this.root)}close(){if(!this.closed){this.action_manager.removeEventListener("change",this.action_listener),this.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))delete this[e];this.closed=!0}}_update(e){const t=this.actions[e.action];t&&g(t,e.enabled)}_create(){const e=document.createElement("div");e.role="menu",e.classList.add("context-menu","popup");const t={},n=(n,r=!1)=>{const o=document.createElement("div"),s=this.action_manager.text(n);o.role="menuitem",r?o.classList.add("context-menuitem","warning"):o.classList.add("context-menuitem"),o.dataset.action=n,o.textContent=s;const i=this.action_manager.keyshortcuts(n);i&&o.setAttribute("aria-keyshortcuts",i),o.addEventListener("click",(()=>{this.action_manager.click(n),this.close()})),t[n]=o,e.append(o)},r=()=>{const t=document.createElement("div");t.classList.add("context-menu-separator"),e.append(t)};return n("resume-selected-torrents"),n("resume-selected-torrents-now"),n("pause-selected-torrents"),r(),n("move-top"),n("move-up"),n("move-down"),n("move-bottom"),r(),n("remove-selected-torrents",!0),n("trash-selected-torrents",!0),r(),n("verify-selected-torrents"),n("show-move-dialog"),n("show-rename-dialog"),n("show-labels-dialog"),r(),n("reannounce-selected-torrents"),r(),n("select-all"),n("deselect-all"),{actions:t,root:e}}}const x=new Intl.PluralRules,k=x.resolvedOptions().locale,w=new Intl.NumberFormat(k),E=1e3,I=[new Intl.NumberFormat(k,{maximumFractionDigits:0,style:"unit",unit:"byte"}),new Intl.NumberFormat(k,{maximumFractionDigits:0,style:"unit",unit:"kilobyte"}),new Intl.NumberFormat(k,{maximumFractionDigits:0,style:"unit",unit:"megabyte"}),new Intl.NumberFormat(k,{maximumFractionDigits:2,style:"unit",unit:"gigabyte"}),new Intl.NumberFormat(k,{maximumFractionDigits:2,style:"unit",unit:"terabyte"}),new Intl.NumberFormat(k,{maximumFractionDigits:2,style:"unit",unit:"petabyte"})],B=new Intl.NumberFormat(k,{maximumFractionDigits:2,style:"unit",unit:"kilobyte-per-second"}),_=new Intl.NumberFormat(k,{maximumFractionDigits:2,style:"unit",unit:"megabyte-per-second"}),S={_toTruncFixed:(e,t)=>(Math.floor(e*10**t)/10**t).toFixed(t),countString(e,t,n){return`${this.number(n)} ${this.ngettext(e,t,n)}`},mem(e){if(e<0)return"Unknown";if(0===e)return"None";let t=e;for(const e of I){if(t"one"===x.select(n)?e:t,number:e=>w.format(e),percentString(e){const t=e<100?1:0;return this._toTruncFixed(e,t)},ratioString(e){return-1===e?"None":-2===e?"∞":this.percentString(e)},size(e){return this.mem(e)},speed:e=>e<999.95?B.format(e):_.format(e/1e3),speedBps(e){return this.speed(this.toKBps(e))},timeInterval(e){const t=Math.floor(e/86400);if(t)return this.countString("day","days",t);const n=Math.floor(e%86400/3600);if(n)return this.countString("hour","hours",n);const r=Math.floor(e%3600/60);return r?this.countString("minute","minutes",r):(e=Math.floor(e%60),this.countString("second","seconds",e))},timestamp(e){if(!e)return"N/A";const t=new Date(1e3*e),n=new Date;let r="",o="";const s=n.getFullYear()===t.getFullYear(),i=n.getMonth()===t.getMonth(),a=n.getDate()-t.getDate();r=s&&i&&Math.abs(a)<=1?0===a?"Today":1===a?"Yesterday":"Tomorrow":t.toDateString();let l=t.getHours(),c="AM";l>12&&(l-=12,c="PM"),0===l&&(l=12),l<10&&(l=`0${l}`);let d=t.getMinutes();return d<10&&(d=`0${d}`),(e=t.getSeconds())<10&&(e=`0${e}`),o=[l,d,e].join(":"),[r,o,c].join(" ")},toKBps:e=>Math.floor(e/E)};class D extends EventTarget{isDone(){return this.fields.have>=this.fields.size}isEditable(){return this.fields.torrent.getFileCount()>1&&!this.isDone()}refreshWantedHTML(){const e=this.elements.root;e.classList.toggle("skip",!this.fields.isWanted),e.classList.toggle("complete",this.isDone()),g(e.checkbox,this.isEditable()),e.checkbox.checked=this.fields.isWanted}refreshProgressHTML(){const{size:e,have:t}=this.fields,n=100*(e?t/e:1),r=S,o=`${r.size(t)} of ${r.size(e)} (${r.percentString(n)}%)`;C(this.elements.progress,o)}refresh(){let e=0,t=!1,n=!1,r=!1,o=0,s=!1;const i=this.fields.torrent.getFiles();for(const a of this.fields.indices){const l=i[a];switch(e+=l.bytesCompleted,o+=l.length,s|=l.wanted,l.priority.toString()){case"-1":n=!0;break;case"1":t=!0;break;default:r=!0}}u(this.elements.priority_low_button,n),u(this.elements.priority_normal_button,r),u(this.elements.priority_high_button,t),this.fields.have===e&&this.fields.size===o||(this.fields.have=e,this.fields.size=o,this.refreshProgressHTML()),this.fields.isWanted!==s&&(this.fields.isWanted=s,this.refreshWantedHTML())}fireWantedChanged(e){const t=new Event("wantedToggled");t.indices=[...this.fields.indices],t.wanted=e,this.dispatchEvent(t)}firePriorityChanged(e){const t=new Event("priorityToggled");t.indices=[...this.fields.indices],t.priority=e,this.dispatchEvent(t)}createRow(e,t,n,r){const o=document.createElement("li");o.classList.add("inspector-torrent-file-list-entry",r?"even":"odd"),this.elements.root=o;let s=document.createElement("input");const i=l();s.type="checkbox",s.className="file-wanted-control",s.title="Download file",s.id=i,s.addEventListener("change",(e=>this.fireWantedChanged(e.target.checked))),o.checkbox=s,o.append(s),s=document.createElement("label"),s.className="inspector-torrent-file-list-entry-name",s.setAttribute("for",i),C(s,n),o.append(s),s=document.createElement("div"),s.className="inspector-torrent-file-list-entry-progress",o.append(s),this.elements.progress=s,s=document.createElement("div"),s.className="file-priority-radiobox";const a=s,c=e=>this.firePriorityChanged(e.target.value);s=document.createElement("input"),s.type="radio",s.value="-1",s.className="low",s.title="Low Priority",s.addEventListener("click",c),this.elements.priority_low_button=s,a.append(s),s=document.createElement("input"),s.type="radio",s.value="0",s.className="normal",s.title="Normal Priority",s.addEventListener("click",c),this.elements.priority_normal_button=s,a.append(s),s=document.createElement("input"),s.type="radio",s.value="1",s.title="High Priority",s.className="high",s.addEventListener("click",c),this.elements.priority_high_button=s,a.append(s),o.append(a),o.style.paddingLeft=20*t+"px",this.refresh()}getElement(){return this.elements.root}constructor(e,t,n,r,o){super(),this.fields={have:0,indices:r,isWanted:!0,size:0,torrent:e},this.elements={priority_high_button:null,priority_low_button:null,priority_normal_button:null,progress:null,root:null},this.createRow(e,t,n,o)}}class T extends EventTarget{constructor(e){super(),this.fieldObservers={},this.fields={},this.refresh(e)}notifyOnFieldChange(e,t){this.fieldObservers[e]=this.fieldObservers[e]||[],this.fieldObservers[e].push(t)}setField(e,t,n){const r=e[t];if(A(r,n))return!1;const o=this.fieldObservers[t];if(e===this.fields&&o&&o.length>0)for(const e of o)e.call(this,n,r,t);return e[t]=n,!0}updateFiles(e){let t=!1;const n=this.fields.files||[],r=["length","name","bytesCompleted","wanted","priority"];for(const[o,s]of e.entries()){const e=n[o]||{};for(const n of r)n in s&&(t|=this.setField(e,n,s[n]));n[o]=e}return this.fields.files=n,t}static collateTrackers(e){return e.map((e=>e.announce.toLowerCase())).join("\t")}refreshFields(e){let t=!1;for(const[n,r]of Object.entries(e))switch(n){case"files":case"fileStats":t|=this.updateFiles(r);break;case"trackerStats":t|=this.setField(this.fields,"trackers",r);break;case"trackers":n in this.fields||(t|=this.setField(this.fields,n,r));break;case"name":this.setField(this.fields,n,e[n])&&(this.fields.collatedName="",t=!0);break;default:t|=this.setField(this.fields,n,r)}return t}refresh(e){this.refreshFields(e)&&this.dispatchEvent(new Event("dataChanged"))}getComment(){return this.fields.comment}getCreator(){return this.fields.creator}getDateAdded(){return this.fields.addedDate}getDateCreated(){return this.fields.dateCreated}getDesiredAvailable(){return this.fields.desiredAvailable}getDownloadDir(){return this.fields.downloadDir}getDownloadSpeed(){return this.fields.rateDownload}getDownloadedEver(){return this.fields.downloadedEver}getError(){return this.fields.error}getErrorString(){return this.fields.errorString}getETA(){return this.fields.eta}getFailedEver(){return this.fields.corruptEver}getFiles(){return this.fields.files||[]}getFile(e){return this.fields.files[e]}getFileCount(){return this.fields["file-count"]}getHashString(){return this.fields.hashString}getHave(){return this.getHaveValid()+this.getHaveUnchecked()}getHaveUnchecked(){return this.fields.haveUnchecked}getHaveValid(){return this.fields.haveValid}getId(){return this.fields.id}getLabels(){return this.fields.labels.sort()}getLastActivity(){return this.fields.activityDate}getLeftUntilDone(){return this.fields.leftUntilDone}getMagnetLink(){return this.fields.magnetLink}getMetadataPercentComplete(){return this.fields.metadataPercentComplete}getName(){return this.fields.name||"Unknown"}getPeers(){return this.fields.peers||[]}getPeersConnected(){return this.fields.peersConnected}getPeersGettingFromUs(){return this.fields.peersGettingFromUs}getPeersSendingToUs(){return this.fields.peersSendingToUs}getPieceCount(){return this.fields.pieceCount}getPieceSize(){return this.fields.pieceSize}getPrimaryMimeType(){return this.fields["primary-mime-type"]||"application/octet-stream"}getPrivateFlag(){return this.fields.isPrivate}getQueuePosition(){return this.fields.queuePosition}getRecheckProgress(){return this.fields.recheckProgress}getSeedRatioLimit(){return this.fields.seedRatioLimit}getSeedRatioMode(){return this.fields.seedRatioMode}getSizeWhenDone(){return this.fields.sizeWhenDone}getStartDate(){return this.fields.startDate}getStatus(){return this.fields.status}getTotalSize(){return this.fields.totalSize}getTrackers(){return this.fields.trackers||[]}getUploadSpeed(){return this.fields.rateUpload}getUploadRatio(){return this.fields.uploadRatio}getUploadedEver(){return this.fields.uploadedEver}getWebseedsSendingToUs(){return this.fields.webseedsSendingToUs}isFinished(){return this.fields.isFinished}hasExtraInfo(){return"hashString"in this.fields}isSeeding(){return this.getStatus()===T._StatusSeed}isStopped(){return this.getStatus()===T._StatusStopped}isChecking(){return this.getStatus()===T._StatusCheck}isDownloading(){return this.getStatus()===T._StatusDownload}isQueued(){return this.getStatus()===T._StatusDownloadWait||this.getStatus()===T._StatusSeedWait}isDone(){return this.getLeftUntilDone()<1}needsMetaData(){return this.getMetadataPercentComplete()<1}getActivity(){return this.getDownloadSpeed()+this.getUploadSpeed()}getPercentDoneStr(){return S.percentString(100*this.getPercentDone())}getPercentDone(){return this.fields.percentDone}getStateString(){switch(this.getStatus()){case T._StatusStopped:return this.isFinished()?"Seeding complete":"Paused";case T._StatusCheckWait:return"Queued for verification";case T._StatusCheck:return"Verifying local data";case T._StatusDownloadWait:return"Queued for download";case T._StatusDownload:return"Downloading";case T._StatusSeedWait:return"Queued for seeding";case T._StatusSeed:return"Seeding";case null:return"Unknown";default:return"Error"}}seedRatioLimit(e){switch(this.getSeedRatioMode()){case T._RatioUseGlobal:return e.seedRatioLimit();case T._RatioUseLocal:return this.getSeedRatioLimit();default:return-1}}getErrorMessage(){const e=this.getErrorString();switch(this.getError()){case T._ErrTrackerWarning:return`Tracker returned a warning: ${e}`;case T._ErrTrackerError:return`Tracker returned an error: ${e}`;case T._ErrLocalError:return`Error: ${e}`;default:return null}}getCollatedName(){const e=this.fields;return!e.collatedName&&e.name&&(e.collatedName=e.name.toLowerCase()),e.collatedName||""}getCollatedTrackers(){const e=this.fields;return!e.collatedTrackers&&e.trackers&&(e.collatedTrackers=T.collateTrackers(e.trackers)),e.collatedTrackers||""}testState(e){const t=this.getStatus();switch(e){case f.FilterActive:return this.getPeersGettingFromUs()>0||this.getPeersSendingToUs()>0||this.getWebseedsSendingToUs()>0||this.isChecking();case f.FilterSeeding:return t===T._StatusSeed||t===T._StatusSeedWait;case f.FilterDownloading:return t===T._StatusDownload||t===T._StatusDownloadWait;case f.FilterPaused:return this.isStopped();case f.FilterFinished:return this.isFinished();default:return!0}}test(e,t,n,r){let o=this.testState(e);if(o&&n&&(o=this.getCollatedName().includes(n.toLowerCase())),o){const e=this.getLabels();r.length>0&&(o=r.some((t=>e.includes(t))))}return o&&t&&t.length>0&&(o=this.getCollatedTrackers().includes(t)),o}static compareById(e,t){return e.getId()-t.getId()}static compareByName(e,t){return e.getCollatedName().localeCompare(t.getCollatedName())||T.compareById(e,t)}static compareByQueue(e,t){return e.getQueuePosition()-t.getQueuePosition()}static compareByAge(e,t){const n=e.getDateAdded();return t.getDateAdded()-n||T.compareByQueue(e,t)}static compareByState(e,t){const n=e.getStatus();return t.getStatus()-n||T.compareByQueue(e,t)}static compareByActivity(e,t){const n=e.getActivity();return t.getActivity()-n||T.compareByState(e,t)}static compareByRatio(e,t){const n=e.getUploadRatio(),r=t.getUploadRatio();return nr?-1:T.compareByState(e,t)}static compareByProgress(e,t){return e.getPercentDone()-t.getPercentDone()||T.compareByRatio(e,t)}static compareBySize(e,t){return e.getTotalSize()-t.getTotalSize()||T.compareByName(e,t)}static compareTorrents(e,t,n,r){let o=0;switch(n){case f.SortByActivity:o=T.compareByActivity(e,t);break;case f.SortByAge:o=T.compareByAge(e,t);break;case f.SortByQueue:o=T.compareByQueue(e,t);break;case f.SortByProgress:o=T.compareByProgress(e,t);break;case f.SortBySize:o=T.compareBySize(e,t);break;case f.SortByState:o=T.compareByState(e,t);break;case f.SortByRatio:o=T.compareByRatio(e,t);break;case f.SortByName:o=T.compareByName(e,t);break;default:console.log(`Unrecognized sort mode: ${n}`),o=T.compareByName(e,t)}return r===f.SortDescending&&(o=-o),o}static sortTorrents(e,t,n){switch(t){case f.SortByActivity:e.sort(this.compareByActivity);break;case f.SortByAge:e.sort(this.compareByAge);break;case f.SortByName:e.sort(this.compareByName);break;case f.SortByProgress:e.sort(this.compareByProgress);break;case f.SortByQueue:e.sort(this.compareByQueue);break;case f.SortByRatio:e.sort(this.compareByRatio);break;case f.SortBySize:e.sort(this.compareBySize);break;case f.SortByState:e.sort(this.compareByState);break;default:console.log(`Unrecognized sort mode: ${t}`),e.sort(this.compareByName)}return n===f.SortDescending&&e.reverse(),e}}T._StatusStopped=0,T._StatusCheckWait=1,T._StatusCheck=2,T._StatusDownloadWait=3,T._StatusDownload=4,T._StatusSeedWait=5,T._StatusSeed=6,T._RatioUseGlobal=0,T._RatioUseLocal=1,T._RatioUnlimited=2,T._ErrNone=0,T._ErrTrackerWarning=1,T._ErrTrackerError=2,T._ErrLocalError=3,T._TrackerInactive=0,T._TrackerWaiting=1,T._TrackerQueued=2,T._TrackerActive=3,T.Fields={},T.Fields.Metadata=["addedDate","file-count","name","primary-mime-type","totalSize"],T.Fields.Stats=["error","errorString","eta","isFinished","isStalled","labels","leftUntilDone","metadataPercentComplete","peersConnected","peersGettingFromUs","peersSendingToUs","percentDone","queuePosition","rateDownload","rateUpload","recheckProgress","seedRatioMode","seedRatioLimit","sizeWhenDone","status","trackers","downloadDir","uploadedEver","uploadRatio","webseedsSendingToUs"],T.Fields.InfoExtra=["comment","creator","dateCreated","files","hashString","isPrivate","magnetLink","pieceCount","pieceSize"],T.Fields.StatsExtra=["activityDate","corruptEver","desiredAvailable","downloadedEver","fileStats","haveUnchecked","haveValid","peers","startDate","trackerStats"];const L=["encryption","speed-up","speed-down","percent-done","status","peer-address","peer-app-name"];class M extends EventTarget{constructor(e){super(),this.closed=!1,this.controller=e,this.elements=this._create(),this.current_page=this.elements.info.root,this.interval=setInterval(this._refreshTorrents.bind(this),3e3),this.name="inspector",this.selection_listener=e=>this._setTorrents(e.selected),this.torrent_listener=()=>this._updateCurrentPage(),this.torrents=[],this.file_torrent=null,this.file_torrent_n=null,this.file_rows=null,this.outside=new h(this.elements.root),this.outside.addEventListener("click",(()=>this.close())),Object.seal(this),e.addEventListener("torrent-selection-changed",this.selection_listener),this._setTorrents(this.controller.getSelectedTorrents()),document.body.append(this.elements.root)}close(){if(!this.closed){this.outside.stop(),clearInterval(this.interval),this._setTorrents([]),this.elements.root.remove(),this.controller.removeEventListener("torrent-selection-changed",this.selection_listener),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))this[e]=null;this.closed=!0}}static _createInfoPage(){const e=document.createElement("div");e.classList.add("inspector-info-page");const t={root:e},n=t=>{const n=document.createElement("div");n.textContent=t,n.classList.add("section-label"),e.append(n)},r=t=>{const n=document.createElement("label");C(n,t),e.append(n);const r=document.createElement("span");return e.append(r),r};n("Activity");let o=[["have","Have:"],["availability","Availability:"],["uploaded","Uploaded:"],["downloaded","Downloaded:"],["state","State:"],["running_time","Running time:"],["remaining_time","Remaining:"],["last_activity","Last activity:"],["error","Error:"]];for(const[e,n]of o)t[e]=r(n);n("Details"),o=[["size","Size:"],["location","Location:"],["hash","Hash:"],["privacy","Privacy:"],["origin","Origin:"],["magnetLink","Magnet:"],["comment","Comment:"],["labels","Labels:"]];for(const[e,n]of o)t[e]=r(n);return t}static _createListPage(e,t){const n=document.createElement("div"),r=document.createElement(e);return r.id=t,n.append(r),{list:r,root:n}}static _createTiersPage(){return M._createListPage("div","inspector-tiers-list")}static _createFilesPage(){return M._createListPage("ul","inspector-file-list")}static _createPeersPage(){const e=document.createElement("table");e.classList.add("peer-list");const t=document.createElement("thead"),n=document.createElement("tr"),r=["","Up","Down","Done","Status","Address","Client"];for(const[e,t]of r.entries()){const r=document.createElement("th"),o=L[e];"encryption"===o&&(r.dataset.encrypted=!0),r.classList.add(o),C(r,t),n.append(r)}const o=document.createElement("tbody");return t.append(n),e.append(t),e.append(o),{root:e,tbody:o}}_create(){const e={files:M._createFilesPage(),info:M._createInfoPage(),peers:M._createPeersPage(),tiers:M._createTiersPage()};return{...i("inspector",[["inspector-tab-info",e.info.root,"Info"],["inspector-tab-peers",e.peers.root,"Peers"],["inspector-tab-tiers",e.tiers.root,"Tiers"],["inspector-tab-files",e.files.root,"Files"]],(e=>{this.current_page=e,this._updateCurrentPage()}).bind(this)),...e}}_setTorrents(e){const t="dataChanged",n=this.torrent_listener;for(const e of this.torrents)e.removeEventListener(t,n);this.torrents=[...e];for(const e of this.torrents)e.addEventListener(t,n);this._refreshTorrents(),this._updateCurrentPage()}static _needsExtraInfo(e){return e.some((e=>!e.hasExtraInfo()))}_refreshTorrents(){const{controller:e,torrents:t}=this,n=t.map((e=>e.getId()));if(n&&n.length>0){const r=["id",...T.Fields.StatsExtra];M._needsExtraInfo(t)&&r.push(...T.Fields.InfoExtra),e.updateTorrents(n,r)}}_updateCurrentPage(){const{current_page:e,elements:t}=this;switch(e){case t.files.root:this._updateFiles();break;case t.info.root:this._updateInfo();break;case t.peers.root:this._updatePeers();break;case t.tiers.root:this._updateTiers();break;default:console.warn("unexpected page"),console.log(e)}}_updateInfo(){const e="None",t="Mixed",n="Unknown",r=S,s=Date.now(),{elements:i,torrents:a}=this,l=a.reduce(((e,t)=>e+t.getSizeWhenDone()),0);let c=null;if(0===a.length)c=e;else if(a.every((e=>e.isFinished())))c="Finished";else if(a.every((e=>e.isStopped())))c="Paused";else{const e=e=>e.getStateString(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}C(i.info.state,c);const d=c;if(0===a.length)c=e;else{const e=a.reduce(((e,t)=>e+t.getHaveValid()),0),t=a.reduce(((e,t)=>e+t.getHaveUnchecked()),0),n=a.reduce(((e,t)=>e+t.getLeftUntilDone()),0),o=100*(l?(l-n)/l:1);c=r.percentString(o),c=t?`${r.size(e)} of ${r.size(l)} (${c}%), ${r.size(t)} Unverified`:n?`${r.size(e)} of ${r.size(l)} (${c}%)`:`${r.size(e)} (100%)`}if(C(i.info.have,c),0===a.length)c=e;else if(0===l)c=e;else{const e=a.reduce(((e,t)=>t.getHave()+t.getDesiredAvailable()),0);c=`${r.percentString(100*e/l)}%`}if(C(i.info.availability,c),0===a.length)c=e;else{const e=a.reduce(((e,t)=>e+t.getDownloadedEver()),0),t=a.reduce(((e,t)=>e+t.getFailedEver()),0);c=t?`${r.size(e)} (+${r.size(t)} discarded after failed checksum)`:r.size(e)}if(C(i.info.downloaded,c),0===a.length)c=e;else{const e=a.reduce(((e,t)=>e+t.getUploadedEver()),0),t=a.reduce(((e,t)=>e+t.getSizeWhenDone()),0)||a.reduce(((e,t)=>e+t.getHaveValid()),0);c=`${r.size(e)} (Ratio: ${r.ratioString(o.ratio(e,t))})`}if(C(i.info.uploaded,c),0===a.length)c=e;else if(a.every((e=>e.isStopped())))c=d;else{const e=e=>e.getStartDate(),n=e(a[0]);c=a.every((t=>e(t)===n))?r.timeInterval(s/1e3-n):t}if(C(i.info.running_time,c),0===a.length)c=e;else{const e=e=>e.getETA(),o=e(a[0]);c=a.every((t=>e(t)===o))?o<0?n:r.timeInterval(o):t}if(C(i.info.remaining_time,c),0===a.length)c=e;else{const t=a.reduce(((e,t)=>Math.max(e,t.getLastActivity())),-1),n=Math.floor(s/1e3);if(0e.getErrorString(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}if(C(i.info.error,c||e),0===a.length)c=e;else{const e=a.reduce(((e,t)=>e+t.getTotalSize()),0);if(e){const t=e=>e.getPieceSize(),n=a.reduce(((e,t)=>e+t.getPieceCount()),0),o=r.number(n),s=t(a[0]);c=a.every((e=>t(e)===s))?`${r.size(e)} (${o} pieces @ ${r.mem(s)})`:`${r.size(e)} (${o} pieces)`}else c="None"}if(C(i.info.size,c),0===a.length)c=e;else{const e=e=>e.getHashString(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}if(C(i.info.hash,c),0===a.length)c=e;else{const e=e=>e.getPrivateFlag(),n=e(a[0]);c=a.every((t=>e(t)===n))?n?"Private to this tracker -- DHT and PEX disabled":"Public torrent":t}if(C(i.info.privacy,c),0===a.length)c=e;else{const e=e=>e.getComment(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}if(c=c||e,c.startsWith("https://")||c.startsWith("http://")?(c=encodeURI(c),o.setInnerHTML(i.info.comment,`${c}`)):C(i.info.comment,c),c=0===a.length?e:a[0].getLabels().join(", "),C(i.info.labels,c),0===a.length)c=e;else{let e=e=>e.getCreator();const r=e(a[0]),o=!a.every((t=>e(t)===r));e=e=>e.getDateCreated();const s=e(a[0]),i=!a.every((t=>e(t)===s)),l=!r||0===r.length,d=!s;c=o||i?t:l&&d?n:d&&!l?`Created by ${r}`:l&&!d?`Created on ${new Date(1e3*s).toDateString()}`:`Created by ${r} on ${new Date(1e3*s).toDateString()}`}if(C(i.info.origin,c),0===a.length)c=e;else{const e=e=>e.getDownloadDir(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}if(C(i.info.location,c),0===a.length)C(i.info.magnetLink,e);else if(a.length>1)C(i.info.magnetLink,t);else{const e=a[0].getMagnetLink();o.setInnerHTML(i.info.magnetLink,``)}}static _peerStatusTitle(e){const t=Object.seal({"?":"We unchoked this peer, but they're not interested",D:"Downloading from this peer",E:"Encrypted Connection",H:"Peer was discovered through Distributed Hash Table (DHT)",I:"Peer is an incoming connection",K:"Peer has unchoked us, but we're not interested",O:"Optimistic unchoke",T:"Peer is connected via uTP",U:"Uploading to peer",X:"Peer was discovered through Peer Exchange (PEX)",d:"We would download from this peer if they'd let us",u:"We would upload to this peer if they'd ask"});return[...e].filter((e=>t[e])).map((e=>`${e}: ${t[e]}`)).join("\n")}_updatePeers(){const e=S,{elements:t,torrents:n}=this,{tbody:r}=t.peers,o=[(e,t)=>{t.dataset.encrypted=e.isEncrypted},(t,n)=>C(n,t.rateToPeer?e.speedBps(t.rateToPeer):""),(t,n)=>C(n,t.rateToClient?e.speedBps(t.rateToClient):""),(e,t)=>C(t,`${Math.floor(100*e.progress)}%`),(e,t)=>{C(t,e.flagStr),t.setAttribute("title",M._peerStatusTitle(e.flagStr))},(e,t)=>C(t,e.address),(e,t)=>C(t,e.clientName)],s=[];for(const e of n){const t=document.createElement("tr");t.classList.add("torrent-row");const n=document.createElement("td");n.setAttribute("colspan",o.length),C(n,e.getName()),t.append(n),s.push(t);for(const t of e.getPeers()){const e=document.createElement("tr");e.classList.add("peer-row");for(const[n,r]of o.entries()){const o=document.createElement("td");o.classList.add(L[n]),r(t,o),e.append(o)}s.push(e)}for(;r.firstChild;)r.firstChild.remove();r.append(...s)}}static getAnnounceState(e){switch(e.announceState){case T._TrackerActive:return"Announce in progress";case T._TrackerWaiting:{const t=Math.max(0,e.nextAnnounceTime-Date.now()/1e3);return`Next announce in ${S.timeInterval(t)}`}case T._TrackerQueued:return"Announce is queued";case T._TrackerInactive:return e.isBackup?"Tracker will be used as a backup":"Announce not scheduled";default:return`unknown announce state: ${e.announceState}`}}static lastAnnounceStatus(e){let t="Last Announce",n=["N/A"];if(e.hasAnnounced){const r=S.timestamp(e.lastAnnounceTime);e.lastAnnounceSucceeded?n=[r," (got ",S.countString("peer","peers",e.lastAnnouncePeerCount),")"]:(t="Announce error",n=[e.lastAnnounceResult?`${e.lastAnnounceResult} - `:"",r])}return{label:t,value:n.join("")}}static lastScrapeStatus(e){let t="Last Scrape",n="N/A";if(e.hasScraped){const r=S.timestamp(e.lastScrapeTime);e.lastScrapeSucceeded?n=r:(t="Scrape error",n=(e.lastScrapeResult?`${e.lastScrapeResult} - `:"")+r)}return{label:t,value:n}}_updateTiers(){const e="N/A",{list:t}=this.elements.tiers,{torrents:n}=this,r=[];for(const t of n){const o=document.createElement("div");if(o.classList.add("inspector-group"),r.push(o),n.length>1){const e=document.createElement("div");e.classList.add("tier-list-torrent"),C(e,t.getName()),r.push(e)}for(const[n,o]of t.getTrackers().entries()){const t=M.getAnnounceState(o),s=M.lastAnnounceStatus(o),i=M.lastScrapeStatus(o),a=document.createElement("div");a.classList.add("tier-list-row",n%2?"odd":"even");let l=document.createElement("div");l.classList.add("tier-list-tracker"),C(l,`${o.sitename||o.host||o.announce} - tier ${o.tier+1}`),l.setAttribute("title",o.announce),a.append(l),l=document.createElement("div"),l.classList.add("tier-announce"),C(l,`${s.label}: ${s.value}`),a.append(l),l=document.createElement("div"),l.classList.add("tier-seeders"),C(l,`Seeders: ${o.seederCount>-1?o.seederCount:e}`),a.append(l),l=document.createElement("div"),l.classList.add("tier-state"),C(l,t),a.append(l),l=document.createElement("div"),l.classList.add("tier-leechers"),C(l,`Leechers: ${o.leecherCount>-1?o.leecherCount:e}`),a.append(l),l=document.createElement("div"),l.classList.add("tier-scrape"),C(l,`${i.label}: ${i.value}`),a.append(l),l=document.createElement("div"),l.classList.add("tier-downloads"),C(l,`Downloads: ${o.downloadCount>-1?o.downloadCount:e}`),a.append(l),r.push(a)}}for(;t.firstChild;)t.firstChild.remove();t.append(...r)}_changeFileCommand(e,t){const{controller:n,file_torrent:r}=this,o=r.getId();n.changeFileCommand(o,e,t)}_onFileWantedToggled(e){const{indices:t,wanted:n}=e;this._changeFileCommand(t,n?"files-wanted":"files-unwanted")}_onFilePriorityToggled(e){const{indices:t,priority:n}=e;let r=null;switch(n.toString()){case"-1":r="priority-low";break;case"1":r="priority-high";break;default:r="priority-normal"}this._changeFileCommand(t,r)}_clearFileList(){const{list:e}=this.elements.files;for(;e.firstChild;)e.firstChild.remove();this.file_torrent=null,this.file_torrent_n=null,this.file_rows=null}static createFileTreeModel(e){const t=[],n={children:{},file_indices:[]};for(const[r,o]of e.getFiles().entries()){const{name:e}=o,s=e.split("/");let i=n;for(const[e,t]of s.entries()){let n=i.children[t];n||(i.children[t]=n={children:{},depth:e,file_indices:[],name:t,parent:i}),i=n}i.file_index=r,delete i.children,t.push(i)}for(const e of t){const{file_index:t}=e;let n=e;do{n.file_indices.push(t),n=n.parent}while(n)}return n}addNodeToView(e,t,n,r){const o=new D(e,n.depth,n.name,n.file_indices,r%2);o.addEventListener("wantedToggled",this._onFileWantedToggled.bind(this)),o.addEventListener("priorityToggled",this._onFilePriorityToggled.bind(this)),this.file_rows.push(o),t.append(o.getElement())}addSubtreeToView(e,t,n,r){if(n.parent&&this.addNodeToView(e,t,n,r++),n.children)for(const o of Object.values(n.children))r=this.addSubtreeToView(e,t,o,r);return r}_updateFiles(){const{list:e}=this.elements.files,{file_rows:t,file_torrent:n,file_torrent_n:r,torrents:o}=this;if(1!==o.length)return void this._clearFileList();const[s]=o,i=s.getFiles().length;if(s!==n||i!==r){this._clearFileList(),this.file_torrent=s,this.file_torrent_n=i,this.file_rows=[];const t=document.createDocumentFragment(),n=M.createFileTreeModel(s);this.addSubtreeToView(s,t,n,0),e.append(t)}else for(const e of t)e.refresh()}}let P="";class z extends EventTarget{constructor(e,t){super(),this.controller=e,this.remote=t,this.elements={},this.torrents=[],this.show()}show(){const e=this.controller.getSelectedTorrents();0!==e.length&&(P=P||e[0].getDownloadDir(),this.torrents=e,this.elements=z._create(),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.entry.value=P,document.body.append(this.elements.root),this.elements.entry.focus())}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.controller,delete this.remote,delete this.elements,delete this.torrents}_onDismiss(){this.close()}_onConfirm(){const e=this.torrents.map((e=>e.getId())),t=this.elements.entry.value.trim();P=t,this.remote.moveTorrents(e,t),this.close()}static _create(){const e=a("move-dialog");e.root.setAttribute("aria-label","Move Torrent"),e.heading.textContent="Set Torrent Location",confirm.textContent="Apply";const t=document.createElement("label");t.setAttribute("for","torrent-path"),t.textContent="Location:",e.workarea.append(t);const n=document.createElement("input");return n.setAttribute("type","text"),n.id="torrent-path",e.entry=n,e.workarea.append(n),e}}class F extends EventTarget{constructor(e){super(),this.elements=F._create(e),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.options=e,document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){if(!this.closed){this.elements.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}static _create(e){const{heading:t,message:n}=e,r=a("confirm-dialog");return r.confirm.remove(),delete r.confirm,r.heading.textContent=t,r.workarea.textContent=n,r}}class N extends EventTarget{constructor(e,t,n=""){super(),this.controller=e,this.remote=t,this.elements=this._create(n),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),this._updateFreeSpaceInAddDialog(),document.body.append(this.elements.root),this.elements.url_input.focus()}close(){if(!this.closed){clearInterval(this.interval),this.elements.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}_updateFreeSpaceInAddDialog(){const e=this.elements.folder_input.value;this.remote.getFreeSpace(e,((e,t)=>{if(!this.closed){const e=t>0?`${S.size(t)} Free`:"";this.elements.freespace.textContent=e}}))}_onConfirm(){const{controller:e,elements:t,remote:n}=this,{file_input:r,folder_input:o,start_input:s,url_input:i}=t,a=!s.checked,l=o.value.trim();for(const t of r.files){const r=new FileReader;r.addEventListener("load",(r=>{const o=r.target.result,s="base64,",i=o.indexOf(s);if(-1===i)return;const c={arguments:{"download-dir":l,metainfo:o.slice(Math.max(0,i+s.length)),paused:a},method:"torrent-add"};n.sendRequest(c,(n=>{"success"!==n.result&&(alert(`Error adding "${t.name}": ${n.result}`),e.setCurrentPopup(new F({heading:`Error adding "${t.name}"`,message:n.result})))}))})),r.readAsDataURL(t)}let c=i.value.trim();if(c.length>0){/^[\da-f]{40}$/i.test(c)&&(c=`magnet:?xt=urn:btih:${c}`);const t={arguments:{"download-dir":l,filename:c,paused:a},method:"torrent-add"};n.sendRequest(t,(t=>{"success"!==t.result&&e.setCurrentPopup(new F({heading:`Error adding "${c}"`,message:t.result}))}))}this._onDismiss()}_create(e){const t=a(),{confirm:n,root:r,heading:o,workarea:s}=t;r.classList.add("open-torrent"),o.textContent="Add Torrents",n.textContent="Add";let i=l(),c=document.createElement("label");c.setAttribute("for",i),c.textContent="Please select torrent files to add:",s.append(c);let d=document.createElement("input");d.type="file",d.name="torrent-files[]",d.id=i,d.multiple="multiple",s.append(d),t.file_input=d,i=l(),c=document.createElement("label"),c.setAttribute("for",i),c.textContent="Or enter a URL:",s.append(c),d=document.createElement("input"),d.type="url",d.id=i,d.value=e,s.append(d),t.url_input=d,d.addEventListener("keyup",(({key:e})=>{"Enter"===e&&n.click()})),i=l(),c=document.createElement("label"),c.id="add-dialog-folder-label",c.for=i,c.textContent="Destination folder: ",s.append(c);const A=document.createElement("span");A.id="free-space-text",c.append(A),s.append(c),t.freespace=A,d=document.createElement("input"),d.type="text",d.id="add-dialog-folder-input",d.addEventListener("change",(()=>this._updateFreeSpaceInAddDialog())),d.value=this.controller.session_properties["download-dir"],s.append(d),t.folder_input=d;const p=document.createElement("div");s.append(p);const g=document.createElement("input");return g.type="checkbox",g.id="auto-start-check",g.checked=this.controller.shouldAddedTorrentsStart(),p.append(g),t.start_input=g,c=document.createElement("label"),c.id="auto-start-label",c.setAttribute("for",g.id),c.textContent="Start when added",p.append(c),t}}const R="speed-limit-down",G="speed-limit-down-enabled",j="queue-move-bottom",U="queue-move-down",H="queue-move-top",W="queue-move-up",$="../rpc",Z="alt-speed-down",O="alt-speed-enabled",Q="alt-speed-up",J="speed-limit-up",q="speed-limit-up-enabled";class Y{constructor(e){this._controller=e,this._error="",this._session_id=""}sendRequest(e,t,n){const r=new Headers;r.append("cache-control","no-cache"),r.append("content-type","application/json"),r.append("pragma","no-cache"),this._session_id&&r.append(Y._SessionHeader,this._session_id);let o=null;fetch($,{body:JSON.stringify(e),headers:r,method:"POST"}).then((e=>{if(o=e,409===e.status){const t=new Error(Y._SessionHeader);throw t.header=e.headers.get(Y._SessionHeader),t}return e.json()})).then((e=>{t&&t.call(n,e,o)})).catch((r=>{if(r.message===Y._SessionHeader)return this._session_id=r.header,void this.sendRequest(e,t,n);console.trace(r),this._controller.togglePeriodicSessionRefresh(!1),this._controller.setCurrentPopup(new F({heading:"Connection failed",message:"Could not connect to the server. You may need to reload the page to reconnect."}))}))}loadDaemonPrefs(e,t){this.sendRequest({method:"session-get"},e,t)}checkPort(e,t){this.sendRequest({method:"port-test"},e,t)}renameTorrent(e,t,n,r,o){const s={arguments:{ids:e,name:n,path:t},method:"torrent-rename-path"};this.sendRequest(s,r,o)}setLabels(e,t,n){const r={ids:e,labels:t};this.sendRequest({arguments:r,method:"torrent-set"},n)}loadDaemonStats(e,t){this.sendRequest({method:"session-stats"},e,t)}updateTorrents(e,t,n,r){const o={arguments:{fields:t,format:"table"},method:"torrent-get"};e&&(o.arguments.ids=e),this.sendRequest(o,(e=>{const t=e.arguments;n.call(r,t.torrents,t.removed)}))}getFreeSpace(e,t,n){const r={arguments:{path:e},method:"free-space"};this.sendRequest(r,(e=>{const r=e.arguments;t.call(n,r.path,r["size-bytes"])}))}changeFileCommand(e,t,n){const r={ids:[e]};r[n]=t,this.sendRequest({arguments:r,method:"torrent-set"},(()=>{this._controller.refreshTorrents([e])}))}sendTorrentSetRequests(e,t,n,r,o){n||(n={}),n.ids=t;const s={arguments:n,method:e};this.sendRequest(s,r,o)}sendTorrentActionRequests(e,t,n,r){this.sendTorrentSetRequests(e,t,null,n,r)}startTorrents(e,t,n,r){const o=t?"torrent-start-now":"torrent-start";this.sendTorrentActionRequests(o,e,n,r)}stopTorrents(e,t,n){this.sendTorrentActionRequests("torrent-stop",e,t,n)}moveTorrents(e,t,n,r){this.sendTorrentSetRequests("torrent-set-location",e,{location:t,move:!0},n,r)}removeTorrents(e,t){const n={arguments:{"delete-local-data":t,ids:[]},method:"torrent-remove"};if(e)for(let t=0,r=e.length;t{this._controller.refreshTorrents()}))}verifyTorrents(e,t,n){this.sendTorrentActionRequests("torrent-verify",e,t,n)}reannounceTorrents(e,t,n){this.sendTorrentActionRequests("torrent-reannounce",e,t,n)}addTorrentByUrl(e,t){/^[\da-f]{40}$/i.test(e)&&(e=`magnet:?xt=urn:btih:${e}`);const n={arguments:{filename:e,paused:t.paused},method:"torrent-add"};this.sendRequest(n,(()=>{this._controller.refreshTorrents()}))}savePrefs(e){const t={arguments:e,method:"session-set"};this.sendRequest(t,(()=>{this._controller.loadDaemonPrefs()}))}updateBlocklist(){this.sendRequest({method:"blocklist-update"},(()=>{this._controller.loadDaemonPrefs()}))}moveTorrentsToTop(e,t,n){this.sendTorrentActionRequests(H,e,t,n)}moveTorrentsToBottom(e,t,n){this.sendTorrentActionRequests(j,e,t,n)}moveTorrentsUp(e,t,n){this.sendTorrentActionRequests(W,e,t,n)}moveTorrentsDown(e,t,n){this.sendTorrentActionRequests(U,e,t,n)}}function X(e,t){const n=document.createElement("fieldset");n.classList.add("section",e);const r=document.createElement("legend");return r.classList.add("title"),r.textContent=t,n.append(r),n}function V(e,t,n,r){const o=document.createElement("button");return o.textContent=t,o.addEventListener("click",r),e.append(o),o.dataset.action=n,o}Y._SessionHeader="X-Transmission-Session-Id";class K extends EventTarget{constructor(e,t,n,r){super(),this.action_listener=this._onActionChange.bind(this),this.action_manager=r,this.action_manager.addEventListener("change",this.action_listener),this.prefs_listener=this._onPrefsChange.bind(this),this.prefs=t,this.prefs.addEventListener("change",this.prefs_listener),this.closed=!1,this.remote=n,this.name="overflow-menu",this.session_listener=this._onSessionChange.bind(this),this.session_manager=e,this.session_manager.addEventListener("session-change",this.session_listener);const{session_properties:o}=e;Object.assign(this,this._create(o)),this.outside=new h(this.root),this.outside.addEventListener("click",(()=>this.close())),Object.seal(this),this.show()}show(){document.body.append(this.root)}close(){if(!this.closed){this.outside.stop(),this.session_manager.removeEventListener("session-change",this.session_listener),this.action_manager.removeEventListener("change",this.action_listener),this.prefs.removeEventListener("change",this.prefs_listener),this.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))this[e]=null;this.closed=!0}}_onSessionChange(e){const{alt_speed_check:t}=this.elements,{session_properties:n}=e;t.checked=n[O]}_onPrefsChange(e){switch(e.key){case f.SortDirection:case f.SortMode:this.root.querySelector(`[data-pref="${e.key}"]`).value=e.value}}_onActionChange(e){const t=this.actions[e.action];t&&this._updateElement(t)}_updateElement(e){if(e.dataset.action){const{action:t}=e.dataset,n=this.action_manager.keyshortcuts(t);n&&e.setAttribute("aria-keyshortcuts",n),g(e,this.action_manager.isEnabled(t))}}_onClick(e){const{action:t,pref:n}=e.target.dataset;t?this.action_manager.click(t):n?this.prefs[n]=e.target.value:(console.log("unhandled"),console.log(e),console.trace())}_create(e){const t={},n={},r=this._onClick.bind(this),o=document.createElement("div");o.classList.add("overflow-menu","popup");let s=X("display","Display");o.append(s);let i=document.createElement("div");i.id="display-options",s.append(i);let a=document.createElement("div");a.classList.add("table-row"),i.append(a);let l=document.createElement("label");l.id="display-sort-mode-label",l.textContent="Sort by",a.append(l);let c=document.createElement("select");c.id="display-sort-mode-select",c.dataset.pref=f.SortMode,a.append(c);const d=[[f.SortByActivity,"Activity"],[f.SortByAge,"Age"],[f.SortByName,"Name"],[f.SortByProgress,"Progress"],[f.SortByQueue,"Queue order"],[f.SortByRatio,"Ratio"],[f.SortBySize,"Size"],[f.SortByState,"State"]];for(const[e,t]of d){const n=document.createElement("option");n.value=e,n.textContent=t,c.append(n)}l.setAttribute("for",c.id),c.value=this.prefs.sort_mode,c.addEventListener("change",(e=>{this.prefs.sort_mode=e.target.value})),a=document.createElement("div"),a.classList.add("table-row"),i.append(a);let A=document.createElement("input");A.id="display-sort-reverse-check",A.dataset.pref=f.SortDirection,A.type="checkbox",a.append(A),l=document.createElement("label"),l.id="display-sort-reverse-label",l.setAttribute("for",A.id),l.textContent="Reverse sort",a.append(l),A.checked=this.prefs.sort_direction!==f.SortAscending,A.addEventListener("input",(e=>{this.prefs.sort_direction=e.target.checked?f.SortDescending:f.SortAscending})),a=document.createElement("div"),a.classList.add("table-row"),i.append(a);const p="toggle-compact-rows";A=document.createElement("input"),A.id="display-compact-check",A.dataset.action=p,A.type="checkbox",a.append(A),l=document.createElement("label"),l.id="display-compact-label",l.for=A.id,l.setAttribute("for",A.id),l.textContent=this.action_manager.text(p),a.append(l),A.checked=this.prefs.display_mode===f.DisplayCompact,A.addEventListener("input",(e=>{const{checked:t}=e.target;this.prefs.display_mode=t?f.DisplayCompact:f.DisplayFull})),a=document.createElement("div"),a.classList.add("table-row"),i.append(a),A=document.createElement("input"),A.id="display-fullscreen-check",A.type="checkbox";const g=()=>null!==document.fullscreenElement;A.checked=g(),A.addEventListener("input",(()=>{g()?document.exitFullscreen():document.body.requestFullscreen()})),document.addEventListener("fullscreenchange",(()=>{A.checked=g()})),a.append(A),l=document.createElement("label"),l.id="display-fullscreen-label",l.for=A.id,l.setAttribute("for",A.id),l.textContent="Fullscreen",a.append(l),s=X("speed","Speed Limit"),o.append(s),i=document.createElement("div"),i.id="speed-options",s.append(i),a=document.createElement("div"),a.classList.add("speed-up"),i.append(a),l=document.createElement("label"),l.id="speed-up-label",l.textContent="Upload:",a.append(l);const u="Unlimited";c=document.createElement("select"),c.id="speed-up-select",a.append(c);const m=["50","100","250","500","1000","2500","5000","10000",u];for(const t of[...new Set(m).add(`${e[J]}`).values()].sort(((e,t)=>e-t))){const e=document.createElement("option");e.value=t,e.textContent=t===u?u:S.speed(t),c.append(e)}l.setAttribute("for",c.id),c.value=e[q]?`${e[J]}`:u,c.addEventListener("change",(e=>{const{value:t}=e.target;console.log(e),t===u?this.remote.savePrefs({[q]:!1}):this.remote.savePrefs({[q]:!0,[J]:Number.parseInt(t,10)})})),a=document.createElement("div"),a.classList.add("speed-down"),i.append(a),l=document.createElement("label"),l.id="speed-down-label",l.textContent="Download:",a.append(l),c=document.createElement("select"),c.id="speed-down-select",a.append(c);for(const t of[...new Set(m).add(`${e[R]}`).values()].sort(((e,t)=>e-t))){const e=document.createElement("option");e.value=t,e.textContent=t===u?u:S.speed(t),c.append(e)}l.setAttribute("for",c.id),c.value=e[G]?`${e[R]}`:u,c.addEventListener("change",(e=>{const{value:t}=e.target;console.log(e),t===u?this.remote.savePrefs({[G]:!1}):this.remote.savePrefs({[G]:!0,[R]:Number.parseInt(t,10)})})),a=document.createElement("div"),a.classList.add("alt-speed"),i.append(a),A=document.createElement("input"),A.id="alt-speed-check",A.type="checkbox",A.checked=e[O],A.addEventListener("change",(e=>{this.remote.savePrefs({[O]:e.target.checked})})),a.append(A),n.alt_speed_check=A,l=document.createElement("label"),l.id="alt-speed-image",l.setAttribute("for",A.id),a.append(l),l=document.createElement("label"),l.id="alt-speed-label",l.setAttribute("for",A.id),l.textContent="Use Temp limits",a.append(l),l=document.createElement("label"),l.id="alt-speed-values-label",l.setAttribute("for",A.id);const h=S.speed(e[Q]),C=S.speed(e[Z]);l.textContent=`(${h} up, ${C} down)`,a.append(l),s=X("actions","Actions"),o.append(s);for(const e of["show-preferences-dialog","pause-all-torrents","start-all-torrents"]){const n=this.action_manager.text(e);t[e]=V(s,n,e,r)}s=X("info","Info"),o.append(s),i=document.createElement("div"),s.append(i);for(const e of["show-about-dialog","show-shortcuts-dialog","show-statistics-dialog"]){const n=this.action_manager.text(e);t[e]=V(i,n,e,r)}s=X("links","Links"),o.append(s),i=document.createElement("ul"),s.append(i);let b=document.createElement("a");b.href="https://transmissionbt.com/",b.tabindex="0",b.textContent="Homepage";let v=document.createElement("li");return v.append(b),i.append(v),b=document.createElement("a"),b.href="https://transmissionbt.com/donate/",b.tabindex="0",b.textContent="Tip Jar",v=document.createElement("li"),v.append(b),i.append(v),b=document.createElement("a"),b.href="https://github.com/transmission/transmission/",b.tabindex="0",b.textContent="Source Code",v=document.createElement("li"),v.append(b),i.append(v),this._updateElement=this._updateElement.bind(this),{actions:t,elements:n,root:o}}}class ee extends EventTarget{static _initTimeDropDown(e){for(let t=0;t<96;++t){const n=15*t,r=`${Number.parseInt(t/4,10)}:${t%4*15||"00"}`;e.options[t]=new Option(r,n)}}static _initDayDropDown(e){const t=[["Everyday","127"],["Weekdays","62"],["Weekends","65"],["Sunday","1"],["Monday","2"],["Tuesday","4"],["Wednesday","8"],["Thursday","16"],["Friday","32"],["Saturday","64"]];for(let n=0;t[n];++n){const[r,o]=t[n];e.options[n]=new Option(r,o)}}_checkPort(){const e=this.elements.network.port_status_label;delete e.dataset.open,C(e,"Checking..."),this.remote.checkPort(this._onPortChecked,this)}_onPortChecked(e){const t=this.elements.network.port_status_label,n=e.arguments["port-is-open"];t.dataset.open=n,C(t,n?"Open":"Closed")}_setBlocklistButtonEnabled(e){const t=this.elements.peers.blocklist_update_button;g(t,e),t.value=e?"Update":"Updating..."}static _getValue(e){if("TEXTAREA"===e.tagName)return e.value;switch(e.type){case"checkbox":case"radio":return e.checked;case"number":case"text":case"url":{const t=e.value;return Number.parseInt(t,10).toString()===t?Number.parseInt(t,10):Number.parseFloat(t).toString()===t?Number.parseFloat(t):t}default:return null}}_onControlChanged(e){const{key:t}=e.target.dataset;this.remote.savePrefs({[t]:ee._getValue(e.target)}),"peer-port"!==t&&"port-forwarding-enabled"!==t||this._checkPort()}_onDialogClosed(){this.dispatchEvent(new Event("closed"))}_update(e){if(e){this._setBlocklistButtonEnabled(!0);for(const[t,n]of Object.entries(e))for(const e of this.elements.root.querySelectorAll(`[data-key="${t}"]`))if("blocklist-size"===t){const t=S.number(n);e.innerHTML=`Blocklist has ${t} rules`,C(this.elements.peers.blocklist_update_button,"Update")}else switch(e.type){case"checkbox":case"radio":e.checked!==n&&(e.checked=n,e.dispatchEvent(new Event("change")));break;case"text":case"textarea":case"url":case"email":case"number":case"search":e.value!=n&&e!==document.activeElement&&(e.value=n,e.dispatchEvent(new Event("change")));break;case"select-one":e.value!==n&&(e.value=n,e.dispatchEvent(new Event("change")));break;default:console.log(e.type)}}}shouldAddedTorrentsStart(){return this.data.elements.root.find("#start-added-torrents")[0].checked}static _createCheckAndLabel(e,t){const n=document.createElement("div");n.id=e;const r=document.createElement("input");r.id=l(),r.type="checkbox",n.append(r);const o=document.createElement("label");return o.textContent=t,o.setAttribute("for",r.id),n.append(o),{check:r,label:o,root:n}}static _enableIfChecked(e,t){const n=()=>{"INPUT"===e.tagName?g(e,t.checked):e.classList.toggle("disabled",!t.checked)};t.addEventListener("change",n),n()}static _getProtocolHandlerRegistered(){return"true"===localStorage.getItem("protocol-handler-registered")}static _updateProtocolHandlerButton(e){e.removeAttribute("disabled"),e.removeAttribute("title"),ee._getProtocolHandlerRegistered()?(e.textContent="Remove Browser Handler","unregisterProtocolHandler"in navigator||e.setAttribute("title","Your browser does not support removing protocol handlers. This button only allows you to re-register a handler.")):(e.textContent="Add Browser Handler",e.removeAttribute("title"),"registerProtocolHandler"in navigator||(e.setAttribute("disabled",!0),e.setAttribute("title","Your browser does not support protocol handlers")))}static _toggleProtocolHandler(e){const t=new URL(window.location.href);t.search="addtorrent=%s",this._getProtocolHandlerRegistered()?(navigator.unregisterProtocolHandler?.("magnet",t.toString()),localStorage.removeItem("protocol-handler-registered"),ee._updateProtocolHandlerButton(e)):(navigator.registerProtocolHandler("magnet",t.toString(),"Transmission Web"),localStorage.setItem("protocol-handler-registered","true"),ee._updateProtocolHandlerButton(e))}static _createTorrentsPage(){const e=document.createElement("div");e.classList.add("prefs-torrents-page");let t=document.createElement("div");t.textContent="Downloading",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Download to:",e.append(t);let n=document.createElement("input");n.type="text",n.id=l(),n.dataset.key="download-dir",t.setAttribute("for",n.id),e.append(n);const r=n;let o=ee._createCheckAndLabel("incomplete-dir-div","Use temporary folder:");o.check.title="Separate folder to temporarily store downloads until they are complete.",o.check.dataset.key="incomplete-dir-enabled",o.label.title=o.check.title,e.append(o.root);const s=o.check;n=document.createElement("input"),n.type="text",n.dataset.key="incomplete-dir",e.append(n),ee._enableIfChecked(n,o.check);const i=n;o=ee._createCheckAndLabel("autostart-div","Start when added"),o.check.dataset.key="start-added-torrents",e.append(o.root);const a=o.check;o=ee._createCheckAndLabel("suffix-div",'Append "part" to incomplete files\' names'),o.check.dataset.key="rename-partial-files",e.append(o.root);const c=o.check;o=ee._createCheckAndLabel("download-queue-div","Download queue size:"),o.check.dataset.key="download-queue-enabled",e.append(o.root);const d=o.check;n=document.createElement("input"),n.type="number",n.dataset.key="download-queue-size",e.append(n),ee._enableIfChecked(n,o.check);const A=n;t=document.createElement("div"),t.textContent="Seeding",t.classList.add("section-label"),e.append(t),o=ee._createCheckAndLabel("stop-ratio-div","Stop seeding at ratio:"),o.check.dataset.key="seedRatioLimited",e.append(o.root);const p=o.check;n=document.createElement("input"),n.type="number",n.min="0.1",n.step="any",n.dataset.key="seedRatioLimit",e.append(n),ee._enableIfChecked(n,o.check);const g=n;o=ee._createCheckAndLabel("stop-idle-div","Stop seeding if idle for N mins:"),o.check.dataset.key="idle-seeding-limit-enabled",e.append(o.root);const u=o.check;n=document.createElement("input"),n.type="number",n.min="0.1",n.step="any",n.dataset.key="idle-seeding-limit",e.append(n),ee._enableIfChecked(n,o.check);const m=n;t=document.createElement("div"),t.textContent="Magnet Protocol Handler",t.classList.add("section-label"),e.append(t);const h=document.createElement("button");h.classList.add("register-handler-button"),ee._updateProtocolHandlerButton(h),e.append(h);return{autostart_check:a,download_dir:r,download_queue_check:d,download_queue_input:A,incomplete_dir_check:s,incomplete_dir_input:i,register_handler_button:h,root:e,stop_idle_check:u,stop_idle_input:m,stop_ratio_check:p,stop_ratio_input:g,suffix_check:c}}static _createSpeedPage(){const e=document.createElement("div");e.classList.add("prefs-speed-page");let t=document.createElement("div");t.textContent="Speed Limits",t.classList.add("section-label"),e.append(t);let n=ee._createCheckAndLabel("upload-speed-div","Upload (kB/s):");n.check.dataset.key="speed-limit-up-enabled",e.append(n.root);const r=n.check;let o=document.createElement("input");o.type="number",o.dataset.key="speed-limit-up",e.append(o),ee._enableIfChecked(o,n.check);const s=o;n=ee._createCheckAndLabel("download-speed-div","Download (kB/s):"),n.check.dataset.key="speed-limit-down-enabled",e.append(n.root);const i=n.check;o=document.createElement("input"),o.type="number",o.dataset.key="speed-limit-down",e.append(o),ee._enableIfChecked(o,n.check);const a=o;t=document.createElement("div"),t.textContent="Alternative Speed Limits",t.classList.add("section-label","alt-speed-section-label"),e.append(t),t=document.createElement("div"),t.textContent="Override normal speed limits manually or at scheduled times",t.classList.add("alt-speed-label"),e.append(t),t=document.createElement("label"),t.textContent="Upload (kB/s):",e.append(t),o=document.createElement("input"),o.type="number",o.dataset.key="alt-speed-up",o.id=l(),t.setAttribute("for",o.id),e.append(o);const c=o;t=document.createElement("label"),t.textContent="Download (kB/s):",e.append(t),o=document.createElement("input"),o.type="number",o.dataset.key="alt-speed-down",o.id=l(),t.setAttribute("for",o.id),e.append(o);const d=o;n=ee._createCheckAndLabel("alt-times-div","Scheduled times"),n.check.dataset.key="alt-speed-time-enabled",e.append(n.root);const A=n.check;t=document.createElement("label"),t.textContent="From:",ee._enableIfChecked(t,n.check),e.append(t);let p=document.createElement("select");p.id=l(),p.dataset.key="alt-speed-time-begin",ee._initTimeDropDown(p),t.setAttribute("for",p.id),e.append(p),ee._enableIfChecked(p,n.check);const g=p;t=document.createElement("label"),t.textContent="To:",ee._enableIfChecked(t,n.check),e.append(t),p=document.createElement("select"),p.id=l(),p.dataset.key="alt-speed-time-end",ee._initTimeDropDown(p),t.setAttribute("for",p.id),e.append(p),ee._enableIfChecked(p,n.check);const u=p;t=document.createElement("label"),t.textContent="On days:",ee._enableIfChecked(t,n.check),e.append(t),p=document.createElement("select"),p.id=l(),p.dataset.key="alt-speed-time-day",ee._initDayDropDown(p),t.setAttribute("for",p.id),e.append(p),ee._enableIfChecked(p,n.check);return{alt_days_select:p,alt_download_speed_input:d,alt_from_select:g,alt_times_check:A,alt_to_select:u,alt_upload_speed_input:c,download_speed_check:i,download_speed_input:a,root:e,upload_speed_check:r,upload_speed_input:s}}static _createPeersPage(){const e=document.createElement("div");e.classList.add("prefs-peers-page");let t=document.createElement("div");t.textContent="Connections",t.classList.add("section-label"),e.append(t);let n=ee._createCheckAndLabel("max-peers-per-torrent-div","Max peers per torrent:");e.append(n.root);const r=n.check;let o=document.createElement("input");o.type="number",o.dataset.key="peer-limit-per-torrent",e.append(o),ee._enableIfChecked(o,n.check);const s=o;n=ee._createCheckAndLabel("max-peers-overall-div","Max peers overall:"),e.append(n.root);const i=n.check;o=document.createElement("input"),o.type="number",o.dataset.key="peer-limit-global",e.append(o),ee._enableIfChecked(o,n.check);const a=o;t=document.createElement("div"),t.textContent="Options",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Encryption mode:",e.append(t);const c=document.createElement("select");c.id=l(),c.dataset.key="encryption",c.options[0]=new Option("Prefer encryption","preferred"),c.options[1]=new Option("Allow encryption","tolerated"),c.options[2]=new Option("Require encryption","required"),e.append(c);const d=c;n=ee._createCheckAndLabel("use-pex-div","Use PEX to find more peers"),n.check.title="PEX is a tool for exchanging peer lists with the peers you're connected to.",n.check.dataset.key="pex-enabled",n.label.title=n.check.title,e.append(n.root);const A=n.check;n=ee._createCheckAndLabel("use-dht-div","Use DHT to find more peers"),n.check.title="DHT is a tool for finding peers without a tracker.",n.check.dataset.key="dht-enabled",n.label.title=n.check.title,e.append(n.root);const p=n.check;n=ee._createCheckAndLabel("use-lpd-div","Use LPD to find more peers"),n.check.title="LPD is a tool for finding peers on your local network.",n.check.dataset.key="lpd-enabled",n.label.title=n.check.title,e.append(n.root);const g=n.check;t=document.createElement("div"),t.textContent="Blocklist",t.classList.add("section-label"),e.append(t),n=ee._createCheckAndLabel("blocklist-enabled-div","Enable blocklist:"),n.check.dataset.key="blocklist-enabled",e.append(n.root);const u=n.check;o=document.createElement("input"),o.type="url",o.value="http://www.example.com/blocklist",o.dataset.key="blocklist-url",e.append(o),ee._enableIfChecked(o,n.check);const m=o;t=document.createElement("label"),t.textContent="Blocklist has {n} rules",t.dataset.key="blocklist-size",t.classList.add("blocklist-size-label"),ee._enableIfChecked(t,n.check),e.append(t);const h=document.createElement("button");h.classList.add("blocklist-update-button"),h.textContent="Update",e.append(h),ee._enableIfChecked(h,n.check);return{blocklist_enabled_check:u,blocklist_update_button:h,blocklist_url_input:m,dht_check:p,encryption_select:d,lpd_check:g,max_peers_overall_check:i,max_peers_overall_input:a,max_peers_per_torrent_check:r,max_peers_per_torrent_input:s,pex_check:A,root:e}}static _createNetworkPage(){const e=document.createElement("div");e.classList.add("prefs-network-page");let t=document.createElement("div");t.textContent="Listening Port",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Peer listening port:",e.append(t);const n=document.createElement("input");n.type="number",n.dataset.key="peer-port",n.id=l(),t.setAttribute("for",n.id),e.append(n);const r=n,o=document.createElement("div");o.classList.add("port-status"),t=document.createElement("label"),t.textContent="Port is",o.append(t);const s=document.createElement("label");s.textContent="?",s.classList.add("port-status-label"),o.append(s),e.append(o);let i=ee._createCheckAndLabel("randomize-port","Randomize port on launch");i.check.dataset.key="peer-port-random-on-start",e.append(i.root);const a=i.check;i=ee._createCheckAndLabel("port-forwarding","Use port forwarding from my router"),i.check.dataset.key="port-forwarding-enabled",e.append(i.root);const c=i.check;t=document.createElement("div"),t.textContent="Options",t.classList.add("section-label"),e.append(t),i=ee._createCheckAndLabel("utp-enabled","Enable uTP for peer communication"),i.check.dataset.key="utp-enabled",e.append(i.root);const d=i.check;t=document.createElement("div"),t.textContent="Default Public Trackers",t.classList.add("section-label"),e.append(t);const A=["Trackers to use on all public torrents.","To add a backup URL, add it on the next line after a primary URL.","To add a new primary URL, add it after a blank line."];for(const n of A)t=document.createElement("label"),t.classList.add("default-trackers-label"),t.textContent=n,t.setAttribute("for","default-trackers"),e.append(t);const p=document.createElement("textarea");p.dataset.key="default-trackers",p.id="default-trackers",e.append(p);return{default_trackers_textarea:p,port_forwarding_check:c,port_input:r,port_status_label:s,random_port_check:a,root:e,utp_check:d}}static _create(){const e={network:ee._createNetworkPage(),peers:ee._createPeersPage(),speed:ee._createSpeedPage(),torrents:ee._createTorrentsPage()};return{...i("prefs-dialog",[["prefs-tab-torrent",e.torrents.root,"Torrents"],["prefs-tab-speed",e.speed.root,"Speed"],["prefs-tab-peers",e.peers.root,"Peers"],["prefs-tab-network",e.network.root,"Network"]]),...e}}constructor(e,t){super(),this.closed=!1,this.session_manager=e,this.remote=t,this.update_soon=()=>this._update(this.session_manager.session_properties),this.elements=ee._create(),this.elements.peers.blocklist_update_button.addEventListener("click",(e=>{C(e.target,"Updating blocklist..."),this.remote.updateBlocklist(),this._setBlocklistButtonEnabled(!1)})),this.elements.torrents.register_handler_button.addEventListener("click",(e=>{ee._toggleProtocolHandler(e.currentTarget)})),this.outside=new h(this.elements.root),this.outside.addEventListener("click",(()=>this.close())),Object.seal(this);const n=this._onControlChanged.bind(this),r=e=>{for(const t of Object.values(e))if("INPUT"===t.tagName)switch(t.type){case"checkbox":case"radio":case"number":case"text":case"url":t.addEventListener("change",n);break;default:console.trace(`unhandled input: ${t.type}`)}else"TEXTAREA"===t.tagName&&t.addEventListener("change",n)};r(this.elements.network),r(this.elements.peers),r(this.elements.speed),r(this.elements.torrents),this.session_manager.addEventListener("session-change",this.update_soon),this.update_soon(),document.body.append(this.elements.root)}close(){if(!this.closed){this.outside.stop(),this.session_manager.removeEventListener("session-change",this.update_soon),this.elements.root.remove(),dispatchEvent(new Event("close"));for(const e of Object.keys(this))this[e]=null;this.closed=!0}}}class te extends EventTarget{constructor(e){super(),this.options=e,this.elements=te._create(e),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){if(!this.closed){this.elements.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}_onConfirm(){const{remote:e,torrents:t,trash:n}=this.options;t.length>0&&e.removeTorrents(t,n),this.close()}static _create(e){const{trash:t}=e,{heading:n,message:r}=te._createMessage(e),o=a("remove-dialog");return o.heading.textContent=n,o.message.textContent=r,o.confirm.textContent=t?"Trash":"Remove",o}static _createMessage(e){let t=null,n=null;const{torrents:r,trash:o}=e,[s]=r;return o&&1===r.length?(t=`Remove ${s.getName()} and delete data?`,n="All data downloaded for this torrent will be deleted. Are you sure you want to remove it?"):o?(t=`Remove ${r.length} transfers and delete data?`,n="All data downloaded for these torrents will be deleted. Are you sure you want to remove them?"):1===r.length?(t=`Remove ${s.getName()}?`,n="Once removed, continuing the transfer will require the torrent file. Are you sure you want to remove it?"):(t=`Remove ${r.length} transfers?`,n="Once removed, continuing the transfers will require the torrent files. Are you sure you want to remove them?"),{heading:t,message:n}}}class ne extends EventTarget{constructor(e,t){super(),this.controller=e,this.remote=t,this.elements={},this.torrents=[],this.show()}show(){const e=this.controller.getSelectedTorrents();1===e.length?(this.torrents=e,this.elements=ne._create(),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),this.elements.entry.value=e[0].getName(),document.body.append(this.elements.root),this.elements.entry.focus()):console.trace()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.controller,delete this.remote,delete this.elements,delete this.torrents}_onDismiss(){this.close()}_onConfirm(){const[e]=this.torrents,t=e.getName(),n=this.elements.entry.value;this.remote.renameTorrent([e.getId()],t,n,(t=>{"success"===t.result&&e.refresh(t.arguments)})),this.close()}static _create(){const e=a("rename-dialog");e.root.setAttribute("aria-label","Rename Torrent"),e.heading.textContent="Enter new name:",e.confirm.textContent="Rename";const t=document.createElement("label");t.setAttribute("for","torrent-rename-name"),t.textContent="Enter new name:",e.workarea.append(t);const n=document.createElement("input");return n.setAttribute("type","text"),n.id="torrent-rename-name",e.entry=n,e.workarea.append(n),e}}class re extends EventTarget{constructor(e,t){super(),this.controller=e,this.remote=t,this.elements={},this.torrents=[],this.show()}show(){const e=this.controller.getSelectedTorrents();if(0===e.length)return void console.error("At least one selected torrent expected.");const[t]=e;this.torrents=e,this.elements=re._create(),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),this.elements.entry.value=t.getLabels().join(", "),document.body.append(this.elements.root),this.elements.entry.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.elements,delete this.torrents}_onDismiss(){this.close()}_onConfirm(){const{torrents:e}=this,{remote:t}=this,n=e.map((e=>e.getId())),{elements:r}=this,{entry:o}=r,{value:s}=o,i=s.split(/ *, */).filter((e=>e.length>0));t.setLabels(n,i,(t=>{if("success"===t.result)for(const t of e)t.refresh({labels:i})})),this.close()}static _create(){const e=a("labels-dialog");e.root.setAttribute("aria-label","Edit Labels"),e.heading.textContent="Edit Labels:",e.confirm.textContent="Save";const t=document.createElement("label");t.setAttribute("for","torrent-labels"),t.textContent="Labels:",e.workarea.append(t);const n=document.createElement("input");return n.setAttribute("type","text"),n.id="torrent-labels",e.entry=n,e.workarea.append(n),e}}class oe extends EventTarget{constructor(e){super(),this.elements=oe._create(e),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.elements}_onDismiss(){this.close()}static _create(e){const t=a("shortcuts-dialog");t.root.setAttribute("aria-label","Keyboard Shortcuts");const n=document.createElement("table"),r=document.createElement("thead");n.append(r);let o=document.createElement("tr");r.append(o);let s=document.createElement("th");s.textContent="Key",o.append(s),s=document.createElement("th"),s.textContent="Action",o.append(s);const i=document.createElement("tbody");n.append(i);const l={};for(const[t,n]of e.allShortcuts().entries()){const e=t.split("+");l[[e.pop(),...e].join("+")]={name:n,shortcut:t}}for(const[,t]of Object.entries(l).sort()){const{name:n,shortcut:r}=t;o=document.createElement("tr"),i.append(o);let s=document.createElement("td");s.textContent=r.replaceAll("+"," + "),o.append(s),s=document.createElement("td"),s.textContent=e.text(n),o.append(s)}return t.heading.textContent="Transmission",t.dismiss.textContent="Close",t.heading.textContent="Keyboard shortcuts",t.message.append(n),t.confirm.remove(),delete t.confirm,t}}class se extends EventTarget{constructor(e){super(),this.remote=e;const t=()=>this.remote.loadDaemonStats((e=>this._update(e.arguments)));this.interval=setInterval(t,5e3),t(),this.elements=se._create(),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){if(!this.closed){clearInterval(this.interval),this.elements.root.remove();for(const e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}_update(e){console.log(e);const t=S;let n=e["current-stats"],r=o.ratio(n.uploadedBytes,n.downloadedBytes);C(this.elements.session.up,t.size(n.uploadedBytes)),C(this.elements.session.down,t.size(n.downloadedBytes)),C(this.elements.session.ratio,t.ratioString(r)),C(this.elements.session.time,t.timeInterval(n.secondsActive)),n=e["cumulative-stats"],r=o.ratio(n.uploadedBytes,n.downloadedBytes),C(this.elements.total.up,t.size(n.uploadedBytes)),C(this.elements.total.down,t.size(n.downloadedBytes)),C(this.elements.total.ratio,t.ratioString(r)),C(this.elements.total.time,t.timeInterval(n.secondsActive))}static _create(){const e=a("statistics-dialog"),{confirm:t,dismiss:n,heading:r,root:o,workarea:s}=e;t.remove(),n.textContent="Close",delete e.confirm;const i="Statistics";o.setAttribute("aria-label",i),r.textContent=i;const l=["Uploaded:","Downloaded:","Ratio:","Running time:"];let d=c("Current session",l);const[A,p,g,u]=d.children,m=e.session={};m.up=A,m.down=p,m.ratio=g,m.time=u,s.append(d.root),d=c("Total",l);const[h,C,b,f]=d.children,v=e.total={};return v.up=h,v.down=C,v.ratio=b,v.time=f,s.append(d.root),e}}const ie={formatDL:e=>`▼${S.speedBps(e.getDownloadSpeed())}`,formatETA:e=>{const t=e.getETA();return t<0||t>=3596400?"":`ETA: ${S.timeInterval(t)}`},formatLabels:e=>e.getLabels().length>0?`🏷 ${e.getLabels().join(", ")}`:"",formatUL:e=>`▲${S.speedBps(e.getUploadSpeed())}`,getProgressInfo:(e,t)=>{const n=t.getStatus(),r=["torrent-progress-bar"];let o=null;if(n===T._StatusStopped&&r.push("paused"),t.needsMetaData())r.push("magnet"),o=Math.round(100*t.getMetadataPercentComplete());else if(n===T._StatusCheck)r.push("verify"),o=Math.round(100*t.getRecheckProgress());else if(t.getLeftUntilDone()>0)r.push("leech"),o=Math.round(100*t.getPercentDone());else{r.push("seed");const n=t.seedRatioLimit(e);o=n>0?100*t.getUploadRatio()/n:100}return t.isQueued()&&r.push("queued"),{classList:r,percent:o}},renderProgressbar:(e,t,n)=>{const r=ie.getProgressInfo(e,t);n.className=r.classList.join(" "),n.style["background-size"]=`${r.percent}% 100%, 100% 100%`}};class ae{static getPeerDetails(e){const t=S,n=e.getErrorMessage();if(n)return n;if(e.isDownloading()){const n=e.getPeersConnected(),r=e.getWebseedsSendingToUs();return r&&n?["Downloading from",e.getPeersSendingToUs(),"of",t.countString("peer","peers",n),"and",t.countString("web seed","web seeds",r),"–",ie.formatDL(e),ie.formatUL(e)].join(" "):r?["Downloading from",t.countString("web seed","web seeds",r),"–",ie.formatDL(e),ie.formatUL(e)].join(" "):["Downloading from",e.getPeersSendingToUs(),"of",t.countString("peer","peers",n),"–",ie.formatDL(e),ie.formatUL(e)].join(" ")}return e.isSeeding()?["Seeding to",e.getPeersGettingFromUs(),"of",t.countString("peer","peers",e.getPeersConnected()),"-",ie.formatUL(e)].join(" "):e.isChecking()?["Verifying local data (",S.percentString(100*e.getRecheckProgress()),"% tested)"].join(""):e.getStateString()}static getProgressDetails(e,t){if(t.needsMetaData()){let e="retrieving";t.isStopped()&&(e="needs");const n=100*t.getMetadataPercentComplete();return[`Magnetized transfer - ${e} metadata (`,S.percentString(n),"%)"].join("")}const n=t.getSizeWhenDone(),r=t.getTotalSize(),o=t.isDone()||t.isSeeding(),s=[];if(o?(r===n?s.push(S.size(r)):s.push(S.size(n)," of ",S.size(t.getTotalSize())," (",t.getPercentDoneStr(),"%)"),s.push(", uploaded ",S.size(t.getUploadedEver())," (Ratio ",S.ratioString(t.getUploadRatio()),")")):s.push(S.size(n-t.getLeftUntilDone())," of ",S.size(n)," (",t.getPercentDoneStr(),"%)"),!t.isStopped()&&(!o||t.seedRatioLimit(e)>0)){s.push(" - ");const e=t.getETA();e<0||e>=3596400?s.push("remaining time unknown"):s.push(S.timeInterval(t.getETA())," remaining")}return s.join("")}render(e,t,n){const r=t.isStopped();let o=n._name_container;C(o,t.getName()),o.classList.toggle("paused",r),o=n._labels_container,C(o,ie.formatLabels(t)),ie.renderProgressbar(e,t,n._progressbar),n._progressbar.classList.add("full");const s=t.getError()!==T._ErrNone;o=n._peer_details_container,o.classList.toggle("error",s),C(o,ae.getPeerDetails(t)),o=n._progress_details_container,C(o,ae.getProgressDetails(e,t)),o=n._toggle_running_button,o.alt=r?"Resume":"Pause",o.dataset.action=r?"resume":"pause"}createRow(e){const t=document.createElement("li");t.className="torrent";const n=document.createElement("div");n.classList.add("icon"),n.dataset.iconMimeType=e.getPrimaryMimeType().split("/",1).pop(),n.dataset.iconMultifile=e.getFileCount()>1?"true":"false";const r=document.createElement("div");r.className="torrent-name";const o=document.createElement("div");o.className="torrent-labels";const s=document.createElement("div");s.className="torrent-peer-details";const i=document.createElement("div");i.classList.add("torrent-progress");const a=document.createElement("div");a.classList.add("torrent-progress-bar","full"),i.append(a);const l=document.createElement("a");l.className="torrent-pauseresume-button",i.append(l);const c=document.createElement("div");return c.className="torrent-progress-details",t.append(n),t.append(r),t.append(o),t.append(s),t.append(i),t.append(c),t._icon=n,t._name_container=r,t._labels_container=o,t._peer_details_container=s,t._progress_details_container=c,t._progressbar=a,t._toggle_running_button=l,t}}class le{static getPeerDetails(e){const t=e.getErrorMessage();if(t)return t;if(e.isDownloading()){const t=e.getDownloadSpeed()>0,n=e.getUploadSpeed()>0;if(!n&&!t)return"Idle";const r=[`${ie.formatETA(e)} `];return t&&r.push(ie.formatDL(e)),n&&r.push(ie.formatUL(e)),r.join(" ")}return e.isSeeding()?`Ratio: ${S.ratioString(e.getUploadRatio())}, ${ie.formatUL(e)}`:e.getStateString()}render(e,t,n){let r=n._name_container;r.classList.toggle("paused",t.isStopped()),C(r,t.getName()),r=n._labels_container,C(r,ie.formatLabels(t));const o=t.getError()!==T._ErrNone;r=n._details_container,r.classList.toggle("error",o),C(r,le.getPeerDetails(t)),ie.renderProgressbar(e,t,n._progressbar),n._progressbar.classList.add("compact")}createRow(e){const t=document.createElement("div");t.classList.add("torrent-progress-bar","compact");const n=document.createElement("div");n.classList.add("icon"),n.dataset.iconMimeType=e.getPrimaryMimeType().split("/",1).pop(),n.dataset.iconMultifile=e.getFileCount()>1?"true":"false";const r=document.createElement("div");r.className="torrent-peer-details compact";const o=document.createElement("div");o.className="torrent-labels compact";const s=document.createElement("div");s.className="torrent-name compact";const i=document.createElement("li");return i.append(t),i.append(r),i.append(o),i.append(s),i.append(n),i.className="torrent compact",i._progressbar=t,i._details_container=r,i._labels_container=o,i._name_container=s,i}}class ce{constructor(e,t,n){this._view=e,this._torrent=n,this._element=e.createRow(n);const r=()=>this.render(t);this._torrent.addEventListener("dataChanged",r),r()}getElement(){return this._element}render(e){const t=this.getTorrent();t&&this._view.render(e,t,this.getElement())}isSelected(){return this.getElement().classList.contains("selected")}getTorrent(){return this._torrent}getTorrentId(){return this.getTorrent().getId()}}class de extends EventTarget{constructor(e,t,n){super(),this.action_manager=e,this.notifications=t,this.prefs=n,this.remote=new Y(this),this.addEventListener("torrent-selection-changed",(e=>this.action_manager.update(e))),this.filterText="",this._torrents={},this._rows=[],this.dirtyTorrents=new Set,this.refilterSoon=d((()=>this._refilter(!1))),this.refilterAllSoon=d((()=>this._refilter(!0))),this.boundPopupCloseListener=this.popupCloseListener.bind(this),this.dispatchSelectionChangedSoon=d((()=>this._dispatchSelectionChanged()),200);for(const e of document.querySelectorAll("button[data-action]")){const{action:t}=e.dataset;g(e,this.action_manager.isEnabled(t)),e.addEventListener("click",(()=>{this.action_manager.click(t)}))}document.querySelector("#filter-tracker").addEventListener("change",(e=>{this.setFilterTracker("all"===e.target.value?null:e.target.value)})),this.action_manager.addEventListener("change",(e=>{for(const t of document.querySelectorAll(`[data-action="${e.action}"]`))g(t,e.enabled)})),this.action_manager.addEventListener("click",(e=>{switch(e.action){case"deselect-all":this._deselectAll();break;case"move-bottom":this._moveBottom();break;case"move-down":this._moveDown();break;case"move-top":this._moveTop();break;case"move-up":this._moveUp();break;case"open-torrent":this.setCurrentPopup(new N(this,this.remote));break;case"pause-all-torrents":this._stopTorrents(this._getAllTorrents());break;case"pause-selected-torrents":this._stopTorrents(this.getSelectedTorrents());break;case"reannounce-selected-torrents":this._reannounceTorrents(this.getSelectedTorrents());break;case"remove-selected-torrents":this._removeSelectedTorrents(!1);break;case"resume-selected-torrents":this._startSelectedTorrents(!1);break;case"resume-selected-torrents-now":this._startSelectedTorrents(!0);break;case"select-all":this._selectAll();break;case"show-about-dialog":this.setCurrentPopup(new v(this.version_info));break;case"show-inspector":this.setCurrentPopup(new M(this));break;case"show-move-dialog":this.setCurrentPopup(new z(this,this.remote));break;case"show-overflow-menu":if(this.popup instanceof K)this.setCurrentPopup(null);else{this.setCurrentPopup(new K(this,this.prefs,this.remote,this.action_manager));const e=document.querySelector("#toolbar-overflow").getBoundingClientRect();m(this.popup.root,e.left+e.width,e.top+e.height,document.body)}break;case"show-preferences-dialog":this.setCurrentPopup(new ee(this,this.remote));break;case"show-shortcuts-dialog":this.setCurrentPopup(new oe(this.action_manager));break;case"show-statistics-dialog":this.setCurrentPopup(new se(this.remote));break;case"show-rename-dialog":this.setCurrentPopup(new ne(this,this.remote));break;case"show-labels-dialog":this.setCurrentPopup(new re(this,this.remote));break;case"start-all-torrents":this._startTorrents(this._getAllTorrents());break;case"toggle-compact-rows":this.prefs.display_mode=this.prefs.display_mode===f.DisplayCompact?f.DisplayFull:f.DisplayCompact;break;case"trash-selected-torrents":this._removeSelectedTorrents(!0);break;case"verify-selected-torrents":this._verifyTorrents(this.getSelectedTorrents());break;default:console.warn(`unhandled action: ${e.action}`)}}));let r=document.querySelector("#filter-mode");r.value=this.prefs.filter_mode,r.addEventListener("change",(e=>{this.prefs.filter_mode=e.target.value,this.refilterAllSoon()})),document.addEventListener("keydown",this._keyDown.bind(this)),document.addEventListener("keyup",this._keyUp.bind(this)),r=document.querySelector("#torrent-container"),r.addEventListener("click",(()=>{this.popup&&"inspector"!==this.popup.name?this.setCurrentPopup(null):this._deselectAll()})),r.addEventListener("dragenter",de._dragenter),r.addEventListener("dragover",de._dragenter),r.addEventListener("drop",this._drop.bind(this)),this._setupSearchBox(),this.elements={torrent_list:document.querySelector("#torrent-list")},this.elements.torrent_list.addEventListener("contextmenu",(e=>{let t=event.target;for(;t&&!t.classList.contains("torrent");)t=t.parentNode;const n=this._rows.find((e=>e.getElement()===t));n&&!n.isSelected()&&this._setSelectedRow(n);const r=new y(this.action_manager);this.setCurrentPopup(r),m(r.root,e.x,e.y,document.querySelector("#torrent-container")),e.preventDefault()})),this.loadDaemonPrefs(),this._initializeTorrents(),this.refreshTorrents(),this.togglePeriodicSessionRefresh(!0),this.prefs.addEventListener("change",(({key:e,value:t})=>this._onPrefChanged(e,t)));for(const[e,t]of this.prefs.entries())this._onPrefChanged(e,t)}_openTorrentFromUrl(){setTimeout((()=>{const e=new URLSearchParams(window.location.search).get("addtorrent");if(e){this.setCurrentPopup(new N(this,this.remote,e));const t=new URL(window.location);t.search="",window.history.pushState("","",t.toString())}}),0)}loadDaemonPrefs(){this.remote.loadDaemonPrefs((e=>{this.session_properties=e.arguments,this._openTorrentFromUrl()}))}get session_properties(){return this._session_properties}set session_properties(e){if(A(this._session_properties,e))return;this._session_properties=Object.seal(e);const t=new Event("session-change");t.session_properties=e,this.dispatchEvent(t),this._updateGuiFromSession(e)}_setupSearchBox(){const e=document.querySelector("#torrent-search"),t="blur";e.classList.add(t),e.addEventListener("blur",(()=>e.classList.add(t))),e.addEventListener("focus",(()=>e.classList.remove(t))),e.addEventListener("keyup",(()=>this._setFilterText(e.value)))}_onPrefChanged(e,t){switch(e){case f.DisplayMode:this.torrentRenderer="compact"===t?new le:new ae,this.refilterAllSoon();break;case f.FilterMode:case f.SortDirection:case f.SortMode:this.refilterAllSoon();break;case f.RefreshRate:{clearInterval(this.refreshTorrentsInterval);const e=this.refreshTorrents.bind(this),t=1e3*Math.max(2,this.prefs.refresh_rate_sec);this.refreshTorrentsInterval=setInterval(e,t);break}}}_getAllTorrents(){return Object.values(this._torrents)}static _getTorrentIds(e){return e.map((e=>e.getId()))}seedRatioLimit(){const e=this.session_properties;return e&&e.seedRatioLimited?e.seedRatioLimit:-1}_getSelectedRows(){return this._rows.filter((e=>e.isSelected()))}getSelectedTorrents(){return this._getSelectedRows().map((e=>e.getTorrent()))}_getSelectedTorrentIds(){return de._getTorrentIds(this.getSelectedTorrents())}_setSelectedRow(e){const t=e?e.getElement():null;for(const e of this.elements.torrent_list.children)e.classList.toggle("selected",e===t);this.dispatchSelectionChangedSoon()}_selectRow(e){e.getElement().classList.add("selected"),this.dispatchSelectionChangedSoon()}_deselectRow(e){e.getElement().classList.remove("selected"),this.dispatchSelectionChangedSoon()}_selectAll(){for(const e of this.elements.torrent_list.children)e.classList.add("selected");this.dispatchSelectionChangedSoon()}_deselectAll(){for(const e of this.elements.torrent_list.children)e.classList.remove("selected");this.dispatchSelectionChangedSoon(),delete this._last_torrent_clicked}_indexOfLastTorrent(){return this._rows.findIndex((e=>e.getTorrentId()===this._last_torrent_clicked))}_selectRange(e){const t=this._indexOfLastTorrent();if(-1===t)this._selectRow(e);else{const n=this._rows.indexOf(e),r=Math.min(t,n),o=Math.max(t,n);for(let e=r;e<=o;++e)this._selectRow(this._rows[e])}this.dispatchSelectionChangedSoon()}_dispatchSelectionChanged(){const e=[],t=[];for(const n of this._rows)(n.isSelected()?t:e).push(n.getTorrent());const n=new Event("torrent-selection-changed");n.nonselected=e,n.selected=t,this.dispatchEvent(n)}static _createKeyShortcutFromKeyboardEvent(e){const t=[];return e.ctrlKey&&t.push("Control"),e.altKey&&t.push("Alt"),e.metaKey&&t.push("Meta"),e.shitKey&&t.push("Shift"),t.push(1===e.key.length?e.key.toUpperCase():e.key),t.join("+")}_keyDown(e){const{ctrlKey:t,keyCode:n,metaKey:r,shiftKey:o,target:s}=e,i=de._createKeyShortcutFromKeyboardEvent(e),a=this.action_manager.getActionForShortcut(i);if(a)return e.preventDefault(),void this.action_manager.click(a);if(27===n&&this.popup)return this.setCurrentPopup(null),void e.preventDefault();const l=document.querySelector(".popup:not(.hidden)"),c=s.matches("input"),d=this._rows;if(!(c||l||r||t)){const t=16===n,r=38===n,s=40===n;if((r||s)&&d.length>0){const t=this._indexOfLastTorrent(),n=this._shift_index,i=0,a=d.length-1;let l=t;s&&l+1<=a?++l:r&&l-1>=i&&--l;const c=d[l];n>=0?n<=t&&t=t&&t>l?this._selectRow(c):(n>=t&&l>t||n<=t&&t>l)&&this._deselectRow(d[t]):o?this._selectRange(c):this._setSelectedRow(c),c&&(this._last_torrent_clicked=c.getTorrentId(),c.getElement().scrollIntoView(),e.preventDefault())}else t&&(this._shift_index=this._indexOfLastTorrent())}}_keyUp(e){16===e.keyCode&&delete this._shift_index}static _dragenter(e){if(e.dataTransfer&&e.dataTransfer.types){const t=new Set(["text/uri-list","text/plain"]);if(e.dataTransfer.types.some((e=>t.has(e))))return e.stopPropagation(),e.preventDefault(),e.dataTransfer.dropEffect="copy",!1}else e.dataTransfer&&(e.dataTransfer.dropEffect="none");return!0}static _isValidURL(e){try{return!!new URL(e)}catch{return!1}}shouldAddedTorrentsStart(){return this.session_properties["start-added-torrents"]}_drop(e){const t=!this.shouldAddedTorrentsStart();if(!e.dataTransfer||!e.dataTransfer.types)return!0;const n=e.data.Transfer.types.filter((e=>["text/uri-list","text/plain"].contains(e))).pop();for(const r of e.dataTransfer.getData(n).split("\n").map((e=>e.trim())).filter((e=>de._isValidURL(e))))this.remote.addTorrentByUrl(r,t);return e.preventDefault(),!1}togglePeriodicSessionRefresh(e){if(!e&&this.sessionInterval&&(clearInterval(this.sessionInterval),delete this.sessionInterval),e&&(this.loadDaemonPrefs(),!this.sessionInterval)){const e=8e3;this.sessionInterval=setInterval(this.loadDaemonPrefs.bind(this),e)}}_setFilterText(e){this.filterText=e?e.trim():null,this.refilterAllSoon()}_onTorrentChanged(e){const t=e.currentTarget;this.dirtyTorrents.add(t.getId()),this.refilterSoon()}updateTorrents(e,t){this.remote.updateTorrents(e,t,((e,t)=>{const n=[],r=e.shift(),o={};for(const t of e){for(const[e,n]of r.entries())o[n]=t[e];const{id:e}=o;let s=this._torrents[e];if(s){const t=s.needsMetaData();s.refresh(o),t&&!s.needsMetaData()&&n.push(e)}else s=this._torrents[e]=new T(o),s.addEventListener("dataChanged",this._onTorrentChanged.bind(this)),this.dirtyTorrents.add(e),"name"in s.fields&&"status"in s.fields||n.push(e)}if(n.length>0){const e=["id",...T.Fields.Metadata,...T.Fields.Stats];this.updateTorrents(n,e),this.refilterSoon()}t&&(this._deleteTorrents(t),this.refilterSoon())}))}refreshTorrents(){const e=["id",...T.Fields.Stats];this.updateTorrents("recently-active",e)}_initializeTorrents(){const e=["id",...T.Fields.Metadata,...T.Fields.Stats];this.updateTorrents(null,e)}_onRowClicked(e){const t=e.metaKey||e.ctrlKey,{row:n}=e.currentTarget;if(this.popup&&"inspector"!==this.popup.name)this.setCurrentPopup(null);else{if(e.target.classList.contains("torrent-pauseresume-button"))switch(e.target.dataset.action){case"pause":this._stopTorrents([n.getTorrent()]);break;case"resume":this._startTorrents([n.getTorrent()])}e.stopPropagation(),e.shiftKey?(this._selectRange(n),window.focus()):!n.isSelected()&&t?this._selectRow(n):n.isSelected()?n.isSelected()&&t?this._deselectRow(n):n.isSelected()&&this._setSelectedRow(n):this._setSelectedRow(n),this._last_torrent_clicked=n.getTorrentId()}}_deleteTorrents(e){if(e&&e.length>0){for(const t of e)this.dirtyTorrents.add(t),delete this._torrents[t];this.refilterSoon()}}_removeSelectedTorrents(e){const t=this.getSelectedTorrents();t.length>0&&this.setCurrentPopup(new te({remote:this.remote,torrents:t,trash:e}))}_startSelectedTorrents(e){this._startTorrents(this.getSelectedTorrents(),e)}_startTorrents(e,t){this.remote.startTorrents(de._getTorrentIds(e),t,this.refreshTorrents,this)}_verifyTorrents(e){this.remote.verifyTorrents(de._getTorrentIds(e),this.refreshTorrents,this)}_reannounceTorrents(e){this.remote.reannounceTorrents(de._getTorrentIds(e),this.refreshTorrents,this)}_stopTorrents(e){this.remote.stopTorrents(de._getTorrentIds(e),this.refreshTorrents,this)}changeFileCommand(e,t,n){this.remote.changeFileCommand(e,t,n)}_moveTop(){this.remote.moveTorrentsToTop(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_moveUp(){this.remote.moveTorrentsUp(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_moveDown(){this.remote.moveTorrentsDown(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_moveBottom(){this.remote.moveTorrentsToBottom(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_updateGuiFromSession(e){const[,t,n]=e.version.match(/(.*)\s\(([\da-f]+)\)/);this.version_info={checksum:n,version:t};document.querySelector("#toolbar-overflow").classList.toggle("alt-speed-enabled",e[O])}_updateStatusbar(){const e=S,t=this._getAllTorrents(),n=t.reduce(((e,t)=>e+t.getUploadSpeed()),0),r=t.reduce(((e,t)=>e+t.getDownloadSpeed()),0),o=e.countString("Transfer","Transfers",this._rows.length);C(document.querySelector("#speed-up-label"),e.speedBps(n)),C(document.querySelector("#speed-dn-label"),e.speedBps(r)),C(document.querySelector("#filter-count"),o)}static _displayName(e){let t=e;return t.length>0&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}_updateFilterSelect(){const e=this._getTrackerCounts(),t=Object.keys(e).sort();let n="";n+=this.filterTracker?'':'';for(const e of t)n+=``;this.filterTrackersStr&&this.filterTrackersStr===n||(this.filterTrackersStr=n,document.querySelector("#filter-tracker").innerHTML=n)}sortRows(e){const t=e.map((e=>e.getTorrent())),n=e.reduce(((e,t)=>(e[t.getTorrent().getId()]=t,e)),{});T.sortTorrents(t,this.prefs.sort_mode,this.prefs.sort_direction);for(const[r,o]of t.entries())e[r]=n[o.getId()]}_refilter(e){const{sort_mode:t,sort_direction:n,filter_mode:r}=this.prefs,o=this.filterTracker,s=this.torrentRenderer,i=this.elements.torrent_list;let a=null,l=null;const c=/^labels:([\w,]*)(.*)$/.exec(this.filterText);c?(a=c[2].trim(),l=c[1].split(",")):(a=this.filterText,l=[]);const d=()=>[...i.children].length,A=()=>[...i.children].reduce(((e,t)=>e+t.classList.contains("selected")?1:0),0),p=d(),g=A();if(this._updateFilterSelect(),clearTimeout(this.refilterTimer),delete this.refilterTimer,e){for(;i.firstChild;)i.firstChild.remove();this._rows=[],this.dirtyTorrents=new Set(Object.keys(this._torrents))}const u=[];let m=[];for(const e of this._rows)this.dirtyTorrents.has(e.getTorrentId())?m.push(e):u.push(e);for(const e of m)e.getElement().remove();const h=[];for(const e of m){const t=e.getTorrentId(),n=this._torrents[t];n&&n.test(r,o,a,l)&&h.push(e),this.dirtyTorrents.delete(t)}m=h;for(const e of this.dirtyTorrents.values()){const t=this._torrents[e];if(t&&t.test(r,o,a,l)){const e=new ce(s,this,t),n=e.getElement();n.row=e,m.push(e),n.addEventListener("click",this._onRowClicked.bind(this)),n.addEventListener("dblclick",(()=>this.action_manager.click("show-inspector")))}}this.sortRows(m);const C=[],b=u.length,f=m.length,v=document.createDocumentFragment();let y=0,x=0;for(;y!==b||x!==f;){let e=null;if(y===b)e=!1;else if(x===f)e=!0;else{e=T.compareTorrents(u[y].getTorrent(),m[x].getTorrent(),t,n)<0}if(e)C.push(u[y++]);else{const e=m[x++],t=e.getElement();y===b?v.append(t):i.insertBefore(t,u[y].getElement()),C.push(e)}}i.append(v),this._rows=C,this.dirtyTorrents.clear();for(const[e,t]of C.map((e=>e.getElement())).entries()){const n=e%2==0;t.classList.toggle("even",n),t.classList.toggle("odd",!n)}this._updateStatusbar(),g===A()&&p===d()||this.dispatchSelectionChangedSoon()}setFilterTracker(e){document.querySelector("#filter-tracker").value=e,this.filterTracker=e,this.refilterAllSoon()}_getTrackerCounts(){const e={};for(const t of this._getAllTorrents())for(const n of t.getTrackers()){const{sitename:t}=n;e[t]=(e[t]||0)+1}return e}popupCloseListener(e){if(e.target!==this.popup)throw new Error(e);this.popup.removeEventListener("close",this.boundPopupCloseListener),delete this.popup}setCurrentPopup(e){this.popup&&this.popup.close(),this.popup=e,this.popup&&this.popup.addEventListener("close",this.boundPopupCloseListener)}}var Ae=n(379),pe=n.n(Ae),ge=n(795),ue=n.n(ge),me=n(569),he=n.n(me),Ce=n(565),be=n.n(Ce),fe=n(216),ve=n.n(fe),ye=n(589),xe=n.n(ye),ke=n(844),we={};we.styleTagTransform=xe(),we.setAttributes=be(),we.insert=he().bind(null,"head"),we.domAPI=ue(),we.insertStyleElement=ve();pe()(ke.Z,we);ke.Z&&ke.Z.locals&&ke.Z.locals;document.addEventListener("DOMContentLoaded",(function(){const t=new e,n=new f,r=new b(n),o=new de(t,r,n),s=d((()=>o.elements.torrent_list.scrollTo(0,1)));window.addEventListener("load",s),window.addEventListener("orientationchange",s)}))})()})(); //# sourceMappingURL=transmission-app.js.map \ No newline at end of file