diff --git a/server/index.js b/server/index.js index 042ad51a..67e978ba 100644 --- a/server/index.js +++ b/server/index.js @@ -28,6 +28,7 @@ require('./src/services/logStreamService'); require('./src/services/adminLogService'); require('./src/services/homeAssistantService'); require('./src/services/sessionService'); +require('./src/services/moderationService'); require('./src/services/batteryManager'); require('./src/services/replaySocketService'); require('./src/services/replaySegmentManager'); diff --git a/server/public/assets/index-BFooYURt.js b/server/public/assets/index-BFooYURt.js new file mode 100644 index 00000000..b772dd71 --- /dev/null +++ b/server/public/assets/index-BFooYURt.js @@ -0,0 +1,119 @@ +(function(){const l=document.createElement("link").relList;if(l&&l.supports&&l.supports("modulepreload"))return;for(const f of document.querySelectorAll('link[rel="modulepreload"]'))r(f);new MutationObserver(f=>{for(const d of f)if(d.type==="childList")for(const x of d.addedNodes)x.tagName==="LINK"&&x.rel==="modulepreload"&&r(x)}).observe(document,{childList:!0,subtree:!0});function i(f){const d={};return f.integrity&&(d.integrity=f.integrity),f.referrerPolicy&&(d.referrerPolicy=f.referrerPolicy),f.crossOrigin==="use-credentials"?d.credentials="include":f.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function r(f){if(f.ep)return;f.ep=!0;const d=i(f);fetch(f.href,d)}})();function Zy(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var Fo={exports:{}},As={};var xp;function Fy(){if(xp)return As;xp=1;var a=Symbol.for("react.transitional.element"),l=Symbol.for("react.fragment");function i(r,f,d){var x=null;if(d!==void 0&&(x=""+d),f.key!==void 0&&(x=""+f.key),"key"in f){d={};for(var p in f)p!=="key"&&(d[p]=f[p])}else d=f;return f=d.ref,{$$typeof:a,type:r,key:x,ref:f!==void 0?f:null,props:d}}return As.Fragment=l,As.jsx=i,As.jsxs=i,As}var yp;function Jy(){return yp||(yp=1,Fo.exports=Fy()),Fo.exports}var c=Jy(),Jo={exports:{}},me={};var vp;function Iy(){if(vp)return me;vp=1;var a=Symbol.for("react.transitional.element"),l=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),f=Symbol.for("react.profiler"),d=Symbol.for("react.consumer"),x=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),g=Symbol.for("react.suspense"),y=Symbol.for("react.memo"),A=Symbol.for("react.lazy"),S=Symbol.for("react.activity"),E=Symbol.iterator;function R(q){return q===null||typeof q!="object"?null:(q=E&&q[E]||q["@@iterator"],typeof q=="function"?q:null)}var j={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},M=Object.assign,b={};function w(q,z,_){this.props=q,this.context=z,this.refs=b,this.updater=_||j}w.prototype.isReactComponent={},w.prototype.setState=function(q,z){if(typeof q!="object"&&typeof q!="function"&&q!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,q,z,"setState")},w.prototype.forceUpdate=function(q){this.updater.enqueueForceUpdate(this,q,"forceUpdate")};function N(){}N.prototype=w.prototype;function T(q,z,_){this.props=q,this.context=z,this.refs=b,this.updater=_||j}var Q=T.prototype=new N;Q.constructor=T,M(Q,w.prototype),Q.isPureReactComponent=!0;var Z=Array.isArray;function W(){}var Y={H:null,A:null,T:null,S:null},te=Object.prototype.hasOwnProperty;function F(q,z,_){var D=_.ref;return{$$typeof:a,type:q,key:z,ref:D!==void 0?D:null,props:_}}function P(q,z){return F(q.type,z,q.props)}function V(q){return typeof q=="object"&&q!==null&&q.$$typeof===a}function J(q){var z={"=":"=0",":":"=2"};return"$"+q.replace(/[=:]/g,function(_){return z[_]})}var ce=/\/+/g;function ue(q,z){return typeof q=="object"&&q!==null&&q.key!=null?J(""+q.key):z.toString(36)}function se(q){switch(q.status){case"fulfilled":return q.value;case"rejected":throw q.reason;default:switch(typeof q.status=="string"?q.then(W,W):(q.status="pending",q.then(function(z){q.status==="pending"&&(q.status="fulfilled",q.value=z)},function(z){q.status==="pending"&&(q.status="rejected",q.reason=z)})),q.status){case"fulfilled":return q.value;case"rejected":throw q.reason}}throw q}function B(q,z,_,D,X){var ae=typeof q;(ae==="undefined"||ae==="boolean")&&(q=null);var fe=!1;if(q===null)fe=!0;else switch(ae){case"bigint":case"string":case"number":fe=!0;break;case"object":switch(q.$$typeof){case a:case l:fe=!0;break;case A:return fe=q._init,B(fe(q._payload),z,_,D,X)}}if(fe)return X=X(q),fe=D===""?"."+ue(q,0):D,Z(X)?(_="",fe!=null&&(_=fe.replace(ce,"$&/")+"/"),B(X,z,_,"",function(mt){return mt})):X!=null&&(V(X)&&(X=P(X,_+(X.key==null||q&&q.key===X.key?"":(""+X.key).replace(ce,"$&/")+"/")+fe)),z.push(X)),1;fe=0;var Ne=D===""?".":D+":";if(Z(q))for(var pe=0;pe>>1,ne=B[ie];if(0>>1;ief(_,le))Df(X,_)?(B[ie]=X,B[D]=le,ie=D):(B[ie]=_,B[z]=le,ie=z);else if(Df(X,le))B[ie]=X,B[D]=le,ie=D;else break e}}return ee}function f(B,ee){var le=B.sortIndex-ee.sortIndex;return le!==0?le:B.id-ee.id}if(a.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var d=performance;a.unstable_now=function(){return d.now()}}else{var x=Date,p=x.now();a.unstable_now=function(){return x.now()-p}}var g=[],y=[],A=1,S=null,E=3,R=!1,j=!1,M=!1,b=!1,w=typeof setTimeout=="function"?setTimeout:null,N=typeof clearTimeout=="function"?clearTimeout:null,T=typeof setImmediate<"u"?setImmediate:null;function Q(B){for(var ee=i(y);ee!==null;){if(ee.callback===null)r(y);else if(ee.startTime<=B)r(y),ee.sortIndex=ee.expirationTime,l(g,ee);else break;ee=i(y)}}function Z(B){if(M=!1,Q(B),!j)if(i(g)!==null)j=!0,W||(W=!0,J());else{var ee=i(y);ee!==null&&se(Z,ee.startTime-B)}}var W=!1,Y=-1,te=5,F=-1;function P(){return b?!0:!(a.unstable_now()-FB&&P());){var ie=S.callback;if(typeof ie=="function"){S.callback=null,E=S.priorityLevel;var ne=ie(S.expirationTime<=B);if(B=a.unstable_now(),typeof ne=="function"){S.callback=ne,Q(B),ee=!0;break t}S===i(g)&&r(g),Q(B)}else r(g);S=i(g)}if(S!==null)ee=!0;else{var q=i(y);q!==null&&se(Z,q.startTime-B),ee=!1}}break e}finally{S=null,E=le,R=!1}ee=void 0}}finally{ee?J():W=!1}}}var J;if(typeof T=="function")J=function(){T(V)};else if(typeof MessageChannel<"u"){var ce=new MessageChannel,ue=ce.port2;ce.port1.onmessage=V,J=function(){ue.postMessage(null)}}else J=function(){w(V,0)};function se(B,ee){Y=w(function(){B(a.unstable_now())},ee)}a.unstable_IdlePriority=5,a.unstable_ImmediatePriority=1,a.unstable_LowPriority=4,a.unstable_NormalPriority=3,a.unstable_Profiling=null,a.unstable_UserBlockingPriority=2,a.unstable_cancelCallback=function(B){B.callback=null},a.unstable_forceFrameRate=function(B){0>B||125ie?(B.sortIndex=le,l(y,B),i(g)===null&&B===i(y)&&(M?(N(Y),Y=-1):M=!0,se(Z,le-ie))):(B.sortIndex=ne,l(g,B),j||R||(j=!0,W||(W=!0,J()))),B},a.unstable_shouldYield=P,a.unstable_wrapCallback=function(B){var ee=E;return function(){var le=E;E=ee;try{return B.apply(this,arguments)}finally{E=le}}}})(Po)),Po}var Ap;function Py(){return Ap||(Ap=1,Wo.exports=Wy()),Wo.exports}var eu={exports:{}},ht={};var jp;function ev(){if(jp)return ht;jp=1;var a=Ou();function l(g){var y="https://react.dev/errors/"+g;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(l){console.error(l)}}return a(),eu.exports=ev(),eu.exports}var wp;function nv(){if(wp)return js;wp=1;var a=Py(),l=Ou(),i=tv();function r(e){var t="https://react.dev/errors/"+e;if(1ne||(e.current=ie[ne],ie[ne]=null,ne--)}function _(e,t){ne++,ie[ne]=e.current,e.current=t}var D=q(null),X=q(null),ae=q(null),fe=q(null);function Ne(e,t){switch(_(ae,t),_(X,e),_(D,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Hm(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Hm(t),e=Vm(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}z(D),_(D,e)}function pe(){z(D),z(X),z(ae)}function mt(e){e.memoizedState!==null&&_(fe,e);var t=D.current,n=Vm(t,e.type);t!==n&&(_(X,e),_(D,n))}function _n(e){X.current===e&&(z(D),z(X)),fe.current===e&&(z(fe),ys._currentValue=le)}var Dn,rn;function xt(e){if(Dn===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Dn=t&&t[1]||"",rn=-1)":-1o||C[s]!==U[o]){var $=` +`+C[s].replace(" at new "," at ");return e.displayName&&$.includes("")&&($=$.replace("",e.displayName)),$}while(1<=s&&0<=o);break}}}finally{kt=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?xt(n):""}function ca(e,t){switch(e.tag){case 26:case 27:case 5:return xt(e.type);case 16:return xt("Lazy");case 13:return e.child!==t&&t!==null?xt("Suspense Fallback"):xt("Suspense");case 19:return xt("SuspenseList");case 0:case 15:return dt(e.type,!1);case 11:return dt(e.type.render,!1);case 1:return dt(e.type,!0);case 31:return xt("Activity");default:return""}}function Ra(e){try{var t="",n=null;do t+=ca(e,n),n=e,e=e.return;while(e);return t}catch(s){return` +Error generating stack: `+s.message+` +`+s.stack}}var ql=Object.prototype.hasOwnProperty,oa=a.unstable_scheduleCallback,cn=a.unstable_cancelCallback,ka=a.unstable_shouldYield,Cl=a.unstable_requestPaint,tt=a.unstable_now,Tl=a.unstable_getCurrentPriorityLevel,ua=a.unstable_ImmediatePriority,Ml=a.unstable_UserBlockingPriority,_a=a.unstable_NormalPriority,Dr=a.unstable_LowPriority,Vs=a.unstable_IdlePriority,Ys=a.log,we=a.unstable_setDisableYieldValue,Xe=null,Le=null;function Ee(e){if(typeof Ys=="function"&&we(e),Le&&typeof Le.setStrictMode=="function")try{Le.setStrictMode(Xe,e)}catch{}}var qe=Math.clz32?Math.clz32:Dg,Ue=Math.log,Or=Math.LN2;function Dg(e){return e>>>=0,e===0?32:31-(Ue(e)/Or|0)|0}var Gs=256,Qs=262144,$s=4194304;function fa(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Xs(e,t,n){var s=e.pendingLanes;if(s===0)return 0;var o=0,u=e.suspendedLanes,h=e.pingedLanes;e=e.warmLanes;var v=s&134217727;return v!==0?(s=v&~u,s!==0?o=fa(s):(h&=v,h!==0?o=fa(h):n||(n=v&~e,n!==0&&(o=fa(n))))):(v=s&~u,v!==0?o=fa(v):h!==0?o=fa(h):n||(n=s&~e,n!==0&&(o=fa(n)))),o===0?0:t!==0&&t!==o&&(t&u)===0&&(u=o&-o,n=t&-t,u>=n||u===32&&(n&4194048)!==0)?t:o}function Rl(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Og(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Sf(){var e=$s;return $s<<=1,($s&62914560)===0&&($s=4194304),e}function Br(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function kl(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Bg(e,t,n,s,o,u){var h=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var v=e.entanglements,C=e.expirationTimes,U=e.hiddenUpdates;for(n=h&~n;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Yg=/[\n"\\]/g;function Dt(e){return e.replace(Yg,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Yr(e,t,n,s,o,u,h,v){e.name="",h!=null&&typeof h!="function"&&typeof h!="symbol"&&typeof h!="boolean"?e.type=h:e.removeAttribute("type"),t!=null?h==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+_t(t)):e.value!==""+_t(t)&&(e.value=""+_t(t)):h!=="submit"&&h!=="reset"||e.removeAttribute("value"),t!=null?Gr(e,h,_t(t)):n!=null?Gr(e,h,_t(n)):s!=null&&e.removeAttribute("value"),o==null&&u!=null&&(e.defaultChecked=!!u),o!=null&&(e.checked=o&&typeof o!="function"&&typeof o!="symbol"),v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"?e.name=""+_t(v):e.removeAttribute("name")}function Df(e,t,n,s,o,u,h,v){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(e.type=u),t!=null||n!=null){if(!(u!=="submit"&&u!=="reset"||t!=null)){Vr(e);return}n=n!=null?""+_t(n):"",t=t!=null?""+_t(t):n,v||t===e.value||(e.value=t),e.defaultValue=t}s=s??o,s=typeof s!="function"&&typeof s!="symbol"&&!!s,e.checked=v?e.checked:!!s,e.defaultChecked=!!s,h!=null&&typeof h!="function"&&typeof h!="symbol"&&typeof h!="boolean"&&(e.name=h),Vr(e)}function Gr(e,t,n){t==="number"&&Fs(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function Ua(e,t,n,s){if(e=e.options,t){t={};for(var o=0;o"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Zr=!1;if(fn)try{var Bl={};Object.defineProperty(Bl,"passive",{get:function(){Zr=!0}}),window.addEventListener("test",Bl,Bl),window.removeEventListener("test",Bl,Bl)}catch{Zr=!1}var Bn=null,Fr=null,Is=null;function Vf(){if(Is)return Is;var e,t=Fr,n=t.length,s,o="value"in Bn?Bn.value:Bn.textContent,u=o.length;for(e=0;e=Ul),Kf=" ",Zf=!1;function Ff(e,t){switch(e){case"keyup":return gx.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Jf(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ga=!1;function yx(e,t){switch(e){case"compositionend":return Jf(t);case"keypress":return t.which!==32?null:(Zf=!0,Kf);case"textInput":return e=t.data,e===Kf&&Zf?null:e;default:return null}}function vx(e,t){if(Ga)return e==="compositionend"||!ec&&Ff(e,t)?(e=Vf(),Is=Fr=Bn=null,Ga=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=s}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ld(n)}}function id(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?id(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function rd(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Fs(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Fs(e.document)}return t}function ac(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var qx=fn&&"documentMode"in document&&11>=document.documentMode,Qa=null,lc=null,Gl=null,sc=!1;function cd(e,t,n){var s=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;sc||Qa==null||Qa!==Fs(s)||(s=Qa,"selectionStart"in s&&ac(s)?s={start:s.selectionStart,end:s.selectionEnd}:(s=(s.ownerDocument&&s.ownerDocument.defaultView||window).getSelection(),s={anchorNode:s.anchorNode,anchorOffset:s.anchorOffset,focusNode:s.focusNode,focusOffset:s.focusOffset}),Gl&&Yl(Gl,s)||(Gl=s,s=Qi(lc,"onSelect"),0>=h,o-=h,Wt=1<<32-qe(t)+o|n<xe?(Se=oe,oe=null):Se=oe.sibling;var Te=H(O,oe,L[xe],K);if(Te===null){oe===null&&(oe=Se);break}e&&oe&&Te.alternate===null&&t(O,oe),k=u(Te,k,xe),Ce===null?de=Te:Ce.sibling=Te,Ce=Te,oe=Se}if(xe===L.length)return n(O,oe),Ae&&hn(O,xe),de;if(oe===null){for(;xexe?(Se=oe,oe=null):Se=oe.sibling;var la=H(O,oe,Te.value,K);if(la===null){oe===null&&(oe=Se);break}e&&oe&&la.alternate===null&&t(O,oe),k=u(la,k,xe),Ce===null?de=la:Ce.sibling=la,Ce=la,oe=Se}if(Te.done)return n(O,oe),Ae&&hn(O,xe),de;if(oe===null){for(;!Te.done;xe++,Te=L.next())Te=I(O,Te.value,K),Te!==null&&(k=u(Te,k,xe),Ce===null?de=Te:Ce.sibling=Te,Ce=Te);return Ae&&hn(O,xe),de}for(oe=s(oe);!Te.done;xe++,Te=L.next())Te=G(oe,O,xe,Te.value,K),Te!==null&&(e&&Te.alternate!==null&&oe.delete(Te.key===null?xe:Te.key),k=u(Te,k,xe),Ce===null?de=Te:Ce.sibling=Te,Ce=Te);return e&&oe.forEach(function(Ky){return t(O,Ky)}),Ae&&hn(O,xe),de}function Be(O,k,L,K){if(typeof L=="object"&&L!==null&&L.type===M&&L.key===null&&(L=L.props.children),typeof L=="object"&&L!==null){switch(L.$$typeof){case R:e:{for(var de=L.key;k!==null;){if(k.key===de){if(de=L.type,de===M){if(k.tag===7){n(O,k.sibling),K=o(k,L.props.children),K.return=O,O=K;break e}}else if(k.elementType===de||typeof de=="object"&&de!==null&&de.$$typeof===te&&Aa(de)===k.type){n(O,k.sibling),K=o(k,L.props),Fl(K,L),K.return=O,O=K;break e}n(O,k);break}else t(O,k);k=k.sibling}L.type===M?(K=xa(L.props.children,O.mode,K,L.key),K.return=O,O=K):(K=ri(L.type,L.key,L.props,null,O.mode,K),Fl(K,L),K.return=O,O=K)}return h(O);case j:e:{for(de=L.key;k!==null;){if(k.key===de)if(k.tag===4&&k.stateNode.containerInfo===L.containerInfo&&k.stateNode.implementation===L.implementation){n(O,k.sibling),K=o(k,L.children||[]),K.return=O,O=K;break e}else{n(O,k);break}else t(O,k);k=k.sibling}K=dc(L,O.mode,K),K.return=O,O=K}return h(O);case te:return L=Aa(L),Be(O,k,L,K)}if(se(L))return re(O,k,L,K);if(J(L)){if(de=J(L),typeof de!="function")throw Error(r(150));return L=de.call(L),he(O,k,L,K)}if(typeof L.then=="function")return Be(O,k,mi(L),K);if(L.$$typeof===T)return Be(O,k,ui(O,L),K);pi(O,L)}return typeof L=="string"&&L!==""||typeof L=="number"||typeof L=="bigint"?(L=""+L,k!==null&&k.tag===6?(n(O,k.sibling),K=o(k,L),K.return=O,O=K):(n(O,k),K=fc(L,O.mode,K),K.return=O,O=K),h(O)):n(O,k)}return function(O,k,L,K){try{Zl=0;var de=Be(O,k,L,K);return tl=null,de}catch(oe){if(oe===el||oe===di)throw oe;var Ce=Et(29,oe,null,O.mode);return Ce.lanes=K,Ce.return=O,Ce}finally{}}}var Na=Rd(!0),kd=Rd(!1),Vn=!1;function Nc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function wc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Yn(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Gn(e,t,n){var s=e.updateQueue;if(s===null)return null;if(s=s.shared,(Me&2)!==0){var o=s.pending;return o===null?t.next=t:(t.next=o.next,o.next=t),s.pending=t,t=ii(e),pd(e,null,n),t}return si(e,s,t,n),ii(e)}function Jl(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194048)!==0)){var s=t.lanes;s&=e.pendingLanes,n|=s,t.lanes=n,jf(e,n)}}function Ec(e,t){var n=e.updateQueue,s=e.alternate;if(s!==null&&(s=s.updateQueue,n===s)){var o=null,u=null;if(n=n.firstBaseUpdate,n!==null){do{var h={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};u===null?o=u=h:u=u.next=h,n=n.next}while(n!==null);u===null?o=u=t:u=u.next=t}else o=u=t;n={baseState:s.baseState,firstBaseUpdate:o,lastBaseUpdate:u,shared:s.shared,callbacks:s.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var qc=!1;function Il(){if(qc){var e=Pa;if(e!==null)throw e}}function Wl(e,t,n,s){qc=!1;var o=e.updateQueue;Vn=!1;var u=o.firstBaseUpdate,h=o.lastBaseUpdate,v=o.shared.pending;if(v!==null){o.shared.pending=null;var C=v,U=C.next;C.next=null,h===null?u=U:h.next=U,h=C;var $=e.alternate;$!==null&&($=$.updateQueue,v=$.lastBaseUpdate,v!==h&&(v===null?$.firstBaseUpdate=U:v.next=U,$.lastBaseUpdate=C))}if(u!==null){var I=o.baseState;h=0,$=U=C=null,v=u;do{var H=v.lane&-536870913,G=H!==v.lane;if(G?(be&H)===H:(s&H)===H){H!==0&&H===Wa&&(qc=!0),$!==null&&($=$.next={lane:0,tag:v.tag,payload:v.payload,callback:null,next:null});e:{var re=e,he=v;H=t;var Be=n;switch(he.tag){case 1:if(re=he.payload,typeof re=="function"){I=re.call(Be,I,H);break e}I=re;break e;case 3:re.flags=re.flags&-65537|128;case 0:if(re=he.payload,H=typeof re=="function"?re.call(Be,I,H):re,H==null)break e;I=S({},I,H);break e;case 2:Vn=!0}}H=v.callback,H!==null&&(e.flags|=64,G&&(e.flags|=8192),G=o.callbacks,G===null?o.callbacks=[H]:G.push(H))}else G={lane:H,tag:v.tag,payload:v.payload,callback:v.callback,next:null},$===null?(U=$=G,C=I):$=$.next=G,h|=H;if(v=v.next,v===null){if(v=o.shared.pending,v===null)break;G=v,v=G.next,G.next=null,o.lastBaseUpdate=G,o.shared.pending=null}}while(!0);$===null&&(C=I),o.baseState=C,o.firstBaseUpdate=U,o.lastBaseUpdate=$,u===null&&(o.shared.lanes=0),Zn|=h,e.lanes=h,e.memoizedState=I}}function _d(e,t){if(typeof e!="function")throw Error(r(191,e));e.call(t)}function Dd(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;eu?u:8;var h=B.T,v={};B.T=v,Xc(e,!1,t,n);try{var C=o(),U=B.S;if(U!==null&&U(v,C),C!==null&&typeof C=="object"&&typeof C.then=="function"){var $=Bx(C,s);ts(e,t,$,Rt(e))}else ts(e,t,s,Rt(e))}catch(I){ts(e,t,{then:function(){},status:"rejected",reason:I},Rt())}finally{ee.p=u,h!==null&&v.types!==null&&(h.types=v.types),B.T=h}}function Yx(){}function Qc(e,t,n,s){if(e.tag!==5)throw Error(r(476));var o=dh(e).queue;fh(e,o,t,le,n===null?Yx:function(){return hh(e),n(s)})}function dh(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:le,baseState:le,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xn,lastRenderedState:le},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xn,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function hh(e){var t=dh(e);t.next===null&&(t=e.alternate.memoizedState),ts(e,t.next.queue,{},Rt())}function $c(){return rt(ys)}function mh(){return Ze().memoizedState}function ph(){return Ze().memoizedState}function Gx(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=Rt();e=Yn(n);var s=Gn(t,e,n);s!==null&&(Nt(s,t,n),Jl(s,t,n)),t={cache:bc()},e.payload=t;return}t=t.return}}function Qx(e,t,n){var s=Rt();n={lane:s,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},wi(e)?xh(t,n):(n=oc(e,t,n,s),n!==null&&(Nt(n,e,s),yh(n,t,s)))}function gh(e,t,n){var s=Rt();ts(e,t,n,s)}function ts(e,t,n,s){var o={lane:s,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(wi(e))xh(t,o);else{var u=e.alternate;if(e.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var h=t.lastRenderedState,v=u(h,n);if(o.hasEagerState=!0,o.eagerState=v,wt(v,h))return si(e,t,o,0),ze===null&&li(),!1}catch{}finally{}if(n=oc(e,t,o,s),n!==null)return Nt(n,e,s),yh(n,t,s),!0}return!1}function Xc(e,t,n,s){if(s={lane:2,revertLane:wo(),gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null},wi(e)){if(t)throw Error(r(479))}else t=oc(e,n,s,2),t!==null&&Nt(t,e,2)}function wi(e){var t=e.alternate;return e===ge||t!==null&&t===ge}function xh(e,t){al=yi=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function yh(e,t,n){if((n&4194048)!==0){var s=t.lanes;s&=e.pendingLanes,n|=s,t.lanes=n,jf(e,n)}}var ns={readContext:rt,use:Si,useCallback:Qe,useContext:Qe,useEffect:Qe,useImperativeHandle:Qe,useLayoutEffect:Qe,useInsertionEffect:Qe,useMemo:Qe,useReducer:Qe,useRef:Qe,useState:Qe,useDebugValue:Qe,useDeferredValue:Qe,useTransition:Qe,useSyncExternalStore:Qe,useId:Qe,useHostTransitionStatus:Qe,useFormState:Qe,useActionState:Qe,useOptimistic:Qe,useMemoCache:Qe,useCacheRefresh:Qe};ns.useEffectEvent=Qe;var vh={readContext:rt,use:Si,useCallback:function(e,t){return pt().memoizedState=[e,t===void 0?null:t],e},useContext:rt,useEffect:nh,useImperativeHandle:function(e,t,n){n=n!=null?n.concat([e]):null,ji(4194308,4,ih.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ji(4194308,4,e,t)},useInsertionEffect:function(e,t){ji(4,2,e,t)},useMemo:function(e,t){var n=pt();t=t===void 0?null:t;var s=e();if(wa){Ee(!0);try{e()}finally{Ee(!1)}}return n.memoizedState=[s,t],s},useReducer:function(e,t,n){var s=pt();if(n!==void 0){var o=n(t);if(wa){Ee(!0);try{n(t)}finally{Ee(!1)}}}else o=t;return s.memoizedState=s.baseState=o,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:o},s.queue=e,e=e.dispatch=Qx.bind(null,ge,e),[s.memoizedState,e]},useRef:function(e){var t=pt();return e={current:e},t.memoizedState=e},useState:function(e){e=Uc(e);var t=e.queue,n=gh.bind(null,ge,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Yc,useDeferredValue:function(e,t){var n=pt();return Gc(n,e,t)},useTransition:function(){var e=Uc(!1);return e=fh.bind(null,ge,e.queue,!0,!1),pt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var s=ge,o=pt();if(Ae){if(n===void 0)throw Error(r(407));n=n()}else{if(n=t(),ze===null)throw Error(r(349));(be&127)!==0||Hd(s,t,n)}o.memoizedState=n;var u={value:n,getSnapshot:t};return o.queue=u,nh(Yd.bind(null,s,u,e),[e]),s.flags|=2048,sl(9,{destroy:void 0},Vd.bind(null,s,u,n,t),null),n},useId:function(){var e=pt(),t=ze.identifierPrefix;if(Ae){var n=Pt,s=Wt;n=(s&~(1<<32-qe(s)-1)).toString(32)+n,t="_"+t+"R_"+n,n=vi++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof s.is=="string"?h.createElement("select",{is:s.is}):h.createElement("select"),s.multiple?u.multiple=!0:s.size&&(u.size=s.size);break;default:u=typeof s.is=="string"?h.createElement(o,{is:s.is}):h.createElement(o)}}u[st]=t,u[yt]=s;e:for(h=t.child;h!==null;){if(h.tag===5||h.tag===6)u.appendChild(h.stateNode);else if(h.tag!==4&&h.tag!==27&&h.child!==null){h.child.return=h,h=h.child;continue}if(h===t)break e;for(;h.sibling===null;){if(h.return===null||h.return===t)break e;h=h.return}h.sibling.return=h.return,h=h.sibling}t.stateNode=u;e:switch(ot(u,o,s),o){case"button":case"input":case"select":case"textarea":s=!!s.autoFocus;break e;case"img":s=!0;break e;default:s=!1}s&&vn(t)}}return Ve(t),io(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==s&&vn(t);else{if(typeof s!="string"&&t.stateNode===null)throw Error(r(166));if(e=ae.current,Ja(t)){if(e=t.stateNode,n=t.memoizedProps,s=null,o=it,o!==null)switch(o.tag){case 27:case 5:s=o.memoizedProps}e[st]=t,e=!!(e.nodeValue===n||s!==null&&s.suppressHydrationWarning===!0||Lm(e.nodeValue,n)),e||Un(t,!0)}else e=$i(e).createTextNode(s),e[st]=t,t.stateNode=e}return Ve(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(s=Ja(t),n!==null){if(e===null){if(!s)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(557));e[st]=t}else ya(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ve(t),e=!1}else n=gc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Ct(t),t):(Ct(t),null);if((t.flags&128)!==0)throw Error(r(558))}return Ve(t),null;case 13:if(s=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(o=Ja(t),s!==null&&s.dehydrated!==null){if(e===null){if(!o)throw Error(r(318));if(o=t.memoizedState,o=o!==null?o.dehydrated:null,!o)throw Error(r(317));o[st]=t}else ya(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ve(t),o=!1}else o=gc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=o),o=!0;if(!o)return t.flags&256?(Ct(t),t):(Ct(t),null)}return Ct(t),(t.flags&128)!==0?(t.lanes=n,t):(n=s!==null,e=e!==null&&e.memoizedState!==null,n&&(s=t.child,o=null,s.alternate!==null&&s.alternate.memoizedState!==null&&s.alternate.memoizedState.cachePool!==null&&(o=s.alternate.memoizedState.cachePool.pool),u=null,s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(u=s.memoizedState.cachePool.pool),u!==o&&(s.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Mi(t,t.updateQueue),Ve(t),null);case 4:return pe(),e===null&&To(t.stateNode.containerInfo),Ve(t),null;case 10:return pn(t.type),Ve(t),null;case 19:if(z(Ke),s=t.memoizedState,s===null)return Ve(t),null;if(o=(t.flags&128)!==0,u=s.rendering,u===null)if(o)ls(s,!1);else{if($e!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(u=xi(e),u!==null){for(t.flags|=128,ls(s,!1),e=u.updateQueue,t.updateQueue=e,Mi(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)gd(n,e),n=n.sibling;return _(Ke,Ke.current&1|2),Ae&&hn(t,s.treeForkCount),t.child}e=e.sibling}s.tail!==null&&tt()>Oi&&(t.flags|=128,o=!0,ls(s,!1),t.lanes=4194304)}else{if(!o)if(e=xi(u),e!==null){if(t.flags|=128,o=!0,e=e.updateQueue,t.updateQueue=e,Mi(t,e),ls(s,!0),s.tail===null&&s.tailMode==="hidden"&&!u.alternate&&!Ae)return Ve(t),null}else 2*tt()-s.renderingStartTime>Oi&&n!==536870912&&(t.flags|=128,o=!0,ls(s,!1),t.lanes=4194304);s.isBackwards?(u.sibling=t.child,t.child=u):(e=s.last,e!==null?e.sibling=u:t.child=u,s.last=u)}return s.tail!==null?(e=s.tail,s.rendering=e,s.tail=e.sibling,s.renderingStartTime=tt(),e.sibling=null,n=Ke.current,_(Ke,o?n&1|2:n&1),Ae&&hn(t,s.treeForkCount),e):(Ve(t),null);case 22:case 23:return Ct(t),Tc(),s=t.memoizedState!==null,e!==null?e.memoizedState!==null!==s&&(t.flags|=8192):s&&(t.flags|=8192),s?(n&536870912)!==0&&(t.flags&128)===0&&(Ve(t),t.subtreeFlags&6&&(t.flags|=8192)):Ve(t),n=t.updateQueue,n!==null&&Mi(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),s=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(s=t.memoizedState.cachePool.pool),s!==n&&(t.flags|=2048),e!==null&&z(Sa),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),pn(Fe),Ve(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function Fx(e,t){switch(mc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return pn(Fe),pe(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return _n(t),null;case 31:if(t.memoizedState!==null){if(Ct(t),t.alternate===null)throw Error(r(340));ya()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Ct(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));ya()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return z(Ke),null;case 4:return pe(),null;case 10:return pn(t.type),null;case 22:case 23:return Ct(t),Tc(),e!==null&&z(Sa),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return pn(Fe),null;case 25:return null;default:return null}}function Gh(e,t){switch(mc(t),t.tag){case 3:pn(Fe),pe();break;case 26:case 27:case 5:_n(t);break;case 4:pe();break;case 31:t.memoizedState!==null&&Ct(t);break;case 13:Ct(t);break;case 19:z(Ke);break;case 10:pn(t.type);break;case 22:case 23:Ct(t),Tc(),e!==null&&z(Sa);break;case 24:pn(Fe)}}function ss(e,t){try{var n=t.updateQueue,s=n!==null?n.lastEffect:null;if(s!==null){var o=s.next;n=o;do{if((n.tag&e)===e){s=void 0;var u=n.create,h=n.inst;s=u(),h.destroy=s}n=n.next}while(n!==o)}}catch(v){_e(t,t.return,v)}}function Xn(e,t,n){try{var s=t.updateQueue,o=s!==null?s.lastEffect:null;if(o!==null){var u=o.next;s=u;do{if((s.tag&e)===e){var h=s.inst,v=h.destroy;if(v!==void 0){h.destroy=void 0,o=t;var C=n,U=v;try{U()}catch($){_e(o,C,$)}}}s=s.next}while(s!==u)}}catch($){_e(t,t.return,$)}}function Qh(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Dd(t,n)}catch(s){_e(e,e.return,s)}}}function $h(e,t,n){n.props=Ea(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(s){_e(e,t,s)}}function is(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var s=e.stateNode;break;case 30:s=e.stateNode;break;default:s=e.stateNode}typeof n=="function"?e.refCleanup=n(s):n.current=s}}catch(o){_e(e,t,o)}}function en(e,t){var n=e.ref,s=e.refCleanup;if(n!==null)if(typeof s=="function")try{s()}catch(o){_e(e,t,o)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n=="function")try{n(null)}catch(o){_e(e,t,o)}else n.current=null}function Xh(e){var t=e.type,n=e.memoizedProps,s=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&s.focus();break e;case"img":n.src?s.src=n.src:n.srcSet&&(s.srcset=n.srcSet)}}catch(o){_e(e,e.return,o)}}function ro(e,t,n){try{var s=e.stateNode;xy(s,e.type,n,t),s[yt]=t}catch(o){_e(e,e.return,o)}}function Kh(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Pn(e.type)||e.tag===4}function co(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Kh(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Pn(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function oo(e,t,n){var s=e.tag;if(s===5||s===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=un));else if(s!==4&&(s===27&&Pn(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(oo(e,t,n),e=e.sibling;e!==null;)oo(e,t,n),e=e.sibling}function Ri(e,t,n){var s=e.tag;if(s===5||s===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(s!==4&&(s===27&&Pn(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(Ri(e,t,n),e=e.sibling;e!==null;)Ri(e,t,n),e=e.sibling}function Zh(e){var t=e.stateNode,n=e.memoizedProps;try{for(var s=e.type,o=t.attributes;o.length;)t.removeAttributeNode(o[0]);ot(t,s,n),t[st]=e,t[yt]=n}catch(u){_e(e,e.return,u)}}var bn=!1,We=!1,uo=!1,Fh=typeof WeakSet=="function"?WeakSet:Set,lt=null;function Jx(e,t){if(e=e.containerInfo,ko=Wi,e=rd(e),ac(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var s=n.getSelection&&n.getSelection();if(s&&s.rangeCount!==0){n=s.anchorNode;var o=s.anchorOffset,u=s.focusNode;s=s.focusOffset;try{n.nodeType,u.nodeType}catch{n=null;break e}var h=0,v=-1,C=-1,U=0,$=0,I=e,H=null;t:for(;;){for(var G;I!==n||o!==0&&I.nodeType!==3||(v=h+o),I!==u||s!==0&&I.nodeType!==3||(C=h+s),I.nodeType===3&&(h+=I.nodeValue.length),(G=I.firstChild)!==null;)H=I,I=G;for(;;){if(I===e)break t;if(H===n&&++U===o&&(v=h),H===u&&++$===s&&(C=h),(G=I.nextSibling)!==null)break;I=H,H=I.parentNode}I=G}n=v===-1||C===-1?null:{start:v,end:C}}else n=null}n=n||{start:0,end:0}}else n=null;for(_o={focusedElem:e,selectionRange:n},Wi=!1,lt=t;lt!==null;)if(t=lt,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,lt=e;else for(;lt!==null;){switch(t=lt,u=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(n=0;n title"))),ot(u,s,n),u[st]=e,at(u),s=u;break e;case"link":var h=tp("link","href",o).get(s+(n.href||""));if(h){for(var v=0;vBe&&(h=Be,Be=he,he=h);var O=sd(v,he),k=sd(v,Be);if(O&&k&&(G.rangeCount!==1||G.anchorNode!==O.node||G.anchorOffset!==O.offset||G.focusNode!==k.node||G.focusOffset!==k.offset)){var L=I.createRange();L.setStart(O.node,O.offset),G.removeAllRanges(),he>Be?(G.addRange(L),G.extend(k.node,k.offset)):(L.setEnd(k.node,k.offset),G.addRange(L))}}}}for(I=[],G=v;G=G.parentNode;)G.nodeType===1&&I.push({element:G,left:G.scrollLeft,top:G.scrollTop});for(typeof v.focus=="function"&&v.focus(),v=0;vn?32:n,B.T=null,n=yo,yo=null;var u=Jn,h=wn;if(nt=0,ul=Jn=null,wn=0,(Me&6)!==0)throw Error(r(331));var v=Me;if(Me|=4,im(u.current),am(u,u.current,h,n),Me=v,ds(0,!1),Le&&typeof Le.onPostCommitFiberRoot=="function")try{Le.onPostCommitFiberRoot(Xe,u)}catch{}return!0}finally{ee.p=o,B.T=s,Nm(e,t)}}function Em(e,t,n){t=Bt(n,t),t=Jc(e.stateNode,t,2),e=Gn(e,t,2),e!==null&&(kl(e,2),tn(e))}function _e(e,t,n){if(e.tag===3)Em(e,e,n);else for(;t!==null;){if(t.tag===3){Em(t,e,n);break}else if(t.tag===1){var s=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof s.componentDidCatch=="function"&&(Fn===null||!Fn.has(s))){e=Bt(n,e),n=qh(2),s=Gn(t,n,2),s!==null&&(Ch(n,s,t,e),kl(s,2),tn(s));break}}t=t.return}}function Ao(e,t,n){var s=e.pingCache;if(s===null){s=e.pingCache=new Px;var o=new Set;s.set(t,o)}else o=s.get(t),o===void 0&&(o=new Set,s.set(t,o));o.has(n)||(mo=!0,o.add(n),e=ly.bind(null,e,t,n),t.then(e,e))}function ly(e,t,n){var s=e.pingCache;s!==null&&s.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,ze===e&&(be&n)===n&&($e===4||$e===3&&(be&62914560)===be&&300>tt()-Di?(Me&2)===0&&fl(e,0):po|=n,ol===be&&(ol=0)),tn(e)}function qm(e,t){t===0&&(t=Sf()),e=ga(e,t),e!==null&&(kl(e,t),tn(e))}function sy(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),qm(e,n)}function iy(e,t){var n=0;switch(e.tag){case 31:case 13:var s=e.stateNode,o=e.memoizedState;o!==null&&(n=o.retryLane);break;case 19:s=e.stateNode;break;case 22:s=e.stateNode._retryCache;break;default:throw Error(r(314))}s!==null&&s.delete(t),qm(e,n)}function ry(e,t){return oa(e,t)}var Vi=null,hl=null,jo=!1,Yi=!1,No=!1,Wn=0;function tn(e){e!==hl&&e.next===null&&(hl===null?Vi=hl=e:hl=hl.next=e),Yi=!0,jo||(jo=!0,oy())}function ds(e,t){if(!No&&Yi){No=!0;do for(var n=!1,s=Vi;s!==null;){if(e!==0){var o=s.pendingLanes;if(o===0)var u=0;else{var h=s.suspendedLanes,v=s.pingedLanes;u=(1<<31-qe(42|e)+1)-1,u&=o&~(h&~v),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(n=!0,Rm(s,u))}else u=be,u=Xs(s,s===ze?u:0,s.cancelPendingCommit!==null||s.timeoutHandle!==-1),(u&3)===0||Rl(s,u)||(n=!0,Rm(s,u));s=s.next}while(n);No=!1}}function cy(){Cm()}function Cm(){Yi=jo=!1;var e=0;Wn!==0&&vy()&&(e=Wn);for(var t=tt(),n=null,s=Vi;s!==null;){var o=s.next,u=Tm(s,t);u===0?(s.next=null,n===null?Vi=o:n.next=o,o===null&&(hl=n)):(n=s,(e!==0||(u&3)!==0)&&(Yi=!0)),s=o}nt!==0&&nt!==5||ds(e),Wn!==0&&(Wn=0)}function Tm(e,t){for(var n=e.suspendedLanes,s=e.pingedLanes,o=e.expirationTimes,u=e.pendingLanes&-62914561;0v)break;var $=C.transferSize,I=C.initiatorType;$&&Um(I)&&(C=C.responseEnd,h+=$*(C"u"?null:document;function Im(e,t,n){var s=ml;if(s&&typeof t=="string"&&t){var o=Dt(t);o='link[rel="'+e+'"][href="'+o+'"]',typeof n=="string"&&(o+='[crossorigin="'+n+'"]'),Jm.has(o)||(Jm.add(o),e={rel:e,crossOrigin:n,href:t},s.querySelector(o)===null&&(t=s.createElement("link"),ot(t,"link",e),at(t),s.head.appendChild(t)))}}function Cy(e){En.D(e),Im("dns-prefetch",e,null)}function Ty(e,t){En.C(e,t),Im("preconnect",e,t)}function My(e,t,n){En.L(e,t,n);var s=ml;if(s&&e&&t){var o='link[rel="preload"][as="'+Dt(t)+'"]';t==="image"&&n&&n.imageSrcSet?(o+='[imagesrcset="'+Dt(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(o+='[imagesizes="'+Dt(n.imageSizes)+'"]')):o+='[href="'+Dt(e)+'"]';var u=o;switch(t){case"style":u=pl(e);break;case"script":u=gl(e)}Yt.has(u)||(e=S({rel:"preload",href:t==="image"&&n&&n.imageSrcSet?void 0:e,as:t},n),Yt.set(u,e),s.querySelector(o)!==null||t==="style"&&s.querySelector(gs(u))||t==="script"&&s.querySelector(xs(u))||(t=s.createElement("link"),ot(t,"link",e),at(t),s.head.appendChild(t)))}}function Ry(e,t){En.m(e,t);var n=ml;if(n&&e){var s=t&&typeof t.as=="string"?t.as:"script",o='link[rel="modulepreload"][as="'+Dt(s)+'"][href="'+Dt(e)+'"]',u=o;switch(s){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=gl(e)}if(!Yt.has(u)&&(e=S({rel:"modulepreload",href:e},t),Yt.set(u,e),n.querySelector(o)===null)){switch(s){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(xs(u)))return}s=n.createElement("link"),ot(s,"link",e),at(s),n.head.appendChild(s)}}}function ky(e,t,n){En.S(e,t,n);var s=ml;if(s&&e){var o=za(s).hoistableStyles,u=pl(e);t=t||"default";var h=o.get(u);if(!h){var v={loading:0,preload:null};if(h=s.querySelector(gs(u)))v.loading=5;else{e=S({rel:"stylesheet",href:e,"data-precedence":t},n),(n=Yt.get(u))&&Ho(e,n);var C=h=s.createElement("link");at(C),ot(C,"link",e),C._p=new Promise(function(U,$){C.onload=U,C.onerror=$}),C.addEventListener("load",function(){v.loading|=1}),C.addEventListener("error",function(){v.loading|=2}),v.loading|=4,Ki(h,t,s)}h={type:"stylesheet",instance:h,count:1,state:v},o.set(u,h)}}}function _y(e,t){En.X(e,t);var n=ml;if(n&&e){var s=za(n).hoistableScripts,o=gl(e),u=s.get(o);u||(u=n.querySelector(xs(o)),u||(e=S({src:e,async:!0},t),(t=Yt.get(o))&&Vo(e,t),u=n.createElement("script"),at(u),ot(u,"link",e),n.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},s.set(o,u))}}function Dy(e,t){En.M(e,t);var n=ml;if(n&&e){var s=za(n).hoistableScripts,o=gl(e),u=s.get(o);u||(u=n.querySelector(xs(o)),u||(e=S({src:e,async:!0,type:"module"},t),(t=Yt.get(o))&&Vo(e,t),u=n.createElement("script"),at(u),ot(u,"link",e),n.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},s.set(o,u))}}function Wm(e,t,n,s){var o=(o=ae.current)?Xi(o):null;if(!o)throw Error(r(446));switch(e){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(t=pl(n.href),n=za(o).hoistableStyles,s=n.get(t),s||(s={type:"style",instance:null,count:0,state:null},n.set(t,s)),s):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){e=pl(n.href);var u=za(o).hoistableStyles,h=u.get(e);if(h||(o=o.ownerDocument||o,h={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,h),(u=o.querySelector(gs(e)))&&!u._p&&(h.instance=u,h.state.loading=5),Yt.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},Yt.set(e,n),u||Oy(o,e,n,h.state))),t&&s===null)throw Error(r(528,""));return h}if(t&&s!==null)throw Error(r(529,""));return null;case"script":return t=n.async,n=n.src,typeof n=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=gl(n),n=za(o).hoistableScripts,s=n.get(t),s||(s={type:"script",instance:null,count:0,state:null},n.set(t,s)),s):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,e))}}function pl(e){return'href="'+Dt(e)+'"'}function gs(e){return'link[rel="stylesheet"]['+e+"]"}function Pm(e){return S({},e,{"data-precedence":e.precedence,precedence:null})}function Oy(e,t,n,s){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?s.loading=1:(t=e.createElement("link"),s.preload=t,t.addEventListener("load",function(){return s.loading|=1}),t.addEventListener("error",function(){return s.loading|=2}),ot(t,"link",n),at(t),e.head.appendChild(t))}function gl(e){return'[src="'+Dt(e)+'"]'}function xs(e){return"script[async]"+e}function ep(e,t,n){if(t.count++,t.instance===null)switch(t.type){case"style":var s=e.querySelector('style[data-href~="'+Dt(n.href)+'"]');if(s)return t.instance=s,at(s),s;var o=S({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return s=(e.ownerDocument||e).createElement("style"),at(s),ot(s,"style",o),Ki(s,n.precedence,e),t.instance=s;case"stylesheet":o=pl(n.href);var u=e.querySelector(gs(o));if(u)return t.state.loading|=4,t.instance=u,at(u),u;s=Pm(n),(o=Yt.get(o))&&Ho(s,o),u=(e.ownerDocument||e).createElement("link"),at(u);var h=u;return h._p=new Promise(function(v,C){h.onload=v,h.onerror=C}),ot(u,"link",s),t.state.loading|=4,Ki(u,n.precedence,e),t.instance=u;case"script":return u=gl(n.src),(o=e.querySelector(xs(u)))?(t.instance=o,at(o),o):(s=n,(o=Yt.get(u))&&(s=S({},n),Vo(s,o)),e=e.ownerDocument||e,o=e.createElement("script"),at(o),ot(o,"link",s),e.head.appendChild(o),t.instance=o);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(s=t.instance,t.state.loading|=4,Ki(s,n.precedence,e));return t.instance}function Ki(e,t,n){for(var s=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),o=s.length?s[s.length-1]:null,u=o,h=0;h title"):null)}function By(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function ap(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function zy(e,t,n,s){if(n.type==="stylesheet"&&(typeof s.media!="string"||matchMedia(s.media).matches!==!1)&&(n.state.loading&4)===0){if(n.instance===null){var o=pl(s.href),u=t.querySelector(gs(o));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Fi.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=u,at(u);return}u=t.ownerDocument||t,s=Pm(s),(o=Yt.get(o))&&Ho(s,o),u=u.createElement("link"),at(u);var h=u;h._p=new Promise(function(v,C){h.onload=v,h.onerror=C}),ot(u,"link",s),n.instance=u}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&(n.state.loading&3)===0&&(e.count++,n=Fi.bind(e),t.addEventListener("load",n),t.addEventListener("error",n))}}var Yo=0;function Ly(e,t){return e.stylesheets&&e.count===0&&Ii(e,e.stylesheets),0Yo?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(s),clearTimeout(o)}}:null}function Fi(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Ii(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Ji=null;function Ii(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Ji=new Map,t.forEach(Uy,e),Ji=null,Fi.call(e))}function Uy(e,t){if(!(t.state.loading&4)){var n=Ji.get(e);if(n)var s=n.get(null);else{n=new Map,Ji.set(e,n);for(var o=e.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(l){console.error(l)}}return a(),Io.exports=nv(),Io.exports}var lv=av();var qp="popstate";function sv(a={}){function l(r,f){let{pathname:d,search:x,hash:p}=r.location;return bu("",{pathname:d,search:x,hash:p},f.state&&f.state.usr||null,f.state&&f.state.key||"default")}function i(r,f){return typeof f=="string"?f:Rs(f)}return rv(l,i,null,a)}function Ge(a,l){if(a===!1||a===null||typeof a>"u")throw new Error(l)}function It(a,l){if(!a){typeof console<"u"&&console.warn(l);try{throw new Error(l)}catch{}}}function iv(){return Math.random().toString(36).substring(2,10)}function Cp(a,l){return{usr:a.state,key:a.key,idx:l}}function bu(a,l,i=null,r){return{pathname:typeof a=="string"?a:a.pathname,search:"",hash:"",...typeof l=="string"?jl(l):l,state:i,key:l&&l.key||r||iv()}}function Rs({pathname:a="/",search:l="",hash:i=""}){return l&&l!=="?"&&(a+=l.charAt(0)==="?"?l:"?"+l),i&&i!=="#"&&(a+=i.charAt(0)==="#"?i:"#"+i),a}function jl(a){let l={};if(a){let i=a.indexOf("#");i>=0&&(l.hash=a.substring(i),a=a.substring(0,i));let r=a.indexOf("?");r>=0&&(l.search=a.substring(r),a=a.substring(0,r)),a&&(l.pathname=a)}return l}function rv(a,l,i,r={}){let{window:f=document.defaultView,v5Compat:d=!1}=r,x=f.history,p="POP",g=null,y=A();y==null&&(y=0,x.replaceState({...x.state,idx:y},""));function A(){return(x.state||{idx:null}).idx}function S(){p="POP";let b=A(),w=b==null?null:b-y;y=b,g&&g({action:p,location:M.location,delta:w})}function E(b,w){p="PUSH";let N=bu(M.location,b,w);y=A()+1;let T=Cp(N,y),Q=M.createHref(N);try{x.pushState(T,"",Q)}catch(Z){if(Z instanceof DOMException&&Z.name==="DataCloneError")throw Z;f.location.assign(Q)}d&&g&&g({action:p,location:M.location,delta:1})}function R(b,w){p="REPLACE";let N=bu(M.location,b,w);y=A();let T=Cp(N,y),Q=M.createHref(N);x.replaceState(T,"",Q),d&&g&&g({action:p,location:M.location,delta:0})}function j(b){return cv(b)}let M={get action(){return p},get location(){return a(f,x)},listen(b){if(g)throw new Error("A history only accepts one active listener");return f.addEventListener(qp,S),g=b,()=>{f.removeEventListener(qp,S),g=null}},createHref(b){return l(f,b)},createURL:j,encodeLocation(b){let w=j(b);return{pathname:w.pathname,search:w.search,hash:w.hash}},push:E,replace:R,go(b){return x.go(b)}};return M}function cv(a,l=!1){let i="http://localhost";typeof window<"u"&&(i=window.location.origin!=="null"?window.location.origin:window.location.href),Ge(i,"No window.location.(origin|href) available to create URL");let r=typeof a=="string"?a:Rs(a);return r=r.replace(/ $/,"%20"),!l&&r.startsWith("//")&&(r=i+r),new URL(r,i)}function x0(a,l,i="/"){return ov(a,l,i,!1)}function ov(a,l,i,r){let f=typeof l=="string"?jl(l):l,d=Rn(f.pathname||"/",i);if(d==null)return null;let x=y0(a);uv(x);let p=null;for(let g=0;p==null&&g{let A={relativePath:y===void 0?x.path||"":y,caseSensitive:x.caseSensitive===!0,childrenIndex:p,route:x};if(A.relativePath.startsWith("/")){if(!A.relativePath.startsWith(r)&&g)return;Ge(A.relativePath.startsWith(r),`Absolute route path "${A.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),A.relativePath=A.relativePath.slice(r.length)}let S=Tn([r,A.relativePath]),E=i.concat(A);x.children&&x.children.length>0&&(Ge(x.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${S}".`),y0(x.children,l,E,S,g)),!(x.path==null&&!x.index)&&l.push({path:S,score:xv(S,x.index),routesMeta:E})};return a.forEach((x,p)=>{if(x.path===""||!x.path?.includes("?"))d(x,p);else for(let g of v0(x.path))d(x,p,!0,g)}),l}function v0(a){let l=a.split("/");if(l.length===0)return[];let[i,...r]=l,f=i.endsWith("?"),d=i.replace(/\?$/,"");if(r.length===0)return f?[d,""]:[d];let x=v0(r.join("/")),p=[];return p.push(...x.map(g=>g===""?d:[d,g].join("/"))),f&&p.push(...x),p.map(g=>a.startsWith("/")&&g===""?"/":g)}function uv(a){a.sort((l,i)=>l.score!==i.score?i.score-l.score:yv(l.routesMeta.map(r=>r.childrenIndex),i.routesMeta.map(r=>r.childrenIndex)))}var fv=/^:[\w-]+$/,dv=3,hv=2,mv=1,pv=10,gv=-2,Tp=a=>a==="*";function xv(a,l){let i=a.split("/"),r=i.length;return i.some(Tp)&&(r+=gv),l&&(r+=hv),i.filter(f=>!Tp(f)).reduce((f,d)=>f+(fv.test(d)?dv:d===""?mv:pv),r)}function yv(a,l){return a.length===l.length&&a.slice(0,-1).every((r,f)=>r===l[f])?a[a.length-1]-l[l.length-1]:0}function vv(a,l,i=!1){let{routesMeta:r}=a,f={},d="/",x=[];for(let p=0;p{if(A==="*"){let j=p[E]||"";x=d.slice(0,d.length-j.length).replace(/(.)\/+$/,"$1")}const R=p[E];return S&&!R?y[A]=void 0:y[A]=(R||"").replace(/%2F/g,"/"),y},{}),pathname:d,pathnameBase:x,pattern:a}}function bv(a,l=!1,i=!0){It(a==="*"||!a.endsWith("*")||a.endsWith("/*"),`Route path "${a}" will be treated as if it were "${a.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${a.replace(/\*$/,"/*")}".`);let r=[],f="^"+a.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(x,p,g)=>(r.push({paramName:p,isOptional:g!=null}),g?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return a.endsWith("*")?(r.push({paramName:"*"}),f+=a==="*"||a==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):i?f+="\\/*$":a!==""&&a!=="/"&&(f+="(?:(?=\\/|$))"),[new RegExp(f,l?void 0:"i"),r]}function Sv(a){try{return a.split("/").map(l=>decodeURIComponent(l).replace(/\//g,"%2F")).join("/")}catch(l){return It(!1,`The URL path "${a}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${l}).`),a}}function Rn(a,l){if(l==="/")return a;if(!a.toLowerCase().startsWith(l.toLowerCase()))return null;let i=l.endsWith("/")?l.length-1:l.length,r=a.charAt(i);return r&&r!=="/"?null:a.slice(i)||"/"}var Av=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,jv=a=>Av.test(a);function Nv(a,l="/"){let{pathname:i,search:r="",hash:f=""}=typeof a=="string"?jl(a):a,d;if(i)if(jv(i))d=i;else{if(i.includes("//")){let x=i;i=i.replace(/\/\/+/g,"/"),It(!1,`Pathnames cannot have embedded double slashes - normalizing ${x} -> ${i}`)}i.startsWith("/")?d=Mp(i.substring(1),"/"):d=Mp(i,l)}else d=l;return{pathname:d,search:qv(r),hash:Cv(f)}}function Mp(a,l){let i=l.replace(/\/+$/,"").split("/");return a.split("/").forEach(f=>{f===".."?i.length>1&&i.pop():f!=="."&&i.push(f)}),i.length>1?i.join("/"):"/"}function tu(a,l,i,r){return`Cannot include a '${a}' character in a manually specified \`to.${l}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${i}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function wv(a){return a.filter((l,i)=>i===0||l.route.path&&l.route.path.length>0)}function b0(a){let l=wv(a);return l.map((i,r)=>r===l.length-1?i.pathname:i.pathnameBase)}function S0(a,l,i,r=!1){let f;typeof a=="string"?f=jl(a):(f={...a},Ge(!f.pathname||!f.pathname.includes("?"),tu("?","pathname","search",f)),Ge(!f.pathname||!f.pathname.includes("#"),tu("#","pathname","hash",f)),Ge(!f.search||!f.search.includes("#"),tu("#","search","hash",f)));let d=a===""||f.pathname==="",x=d?"/":f.pathname,p;if(x==null)p=i;else{let S=l.length-1;if(!r&&x.startsWith("..")){let E=x.split("/");for(;E[0]==="..";)E.shift(),S-=1;f.pathname=E.join("/")}p=S>=0?l[S]:"/"}let g=Nv(f,p),y=x&&x!=="/"&&x.endsWith("/"),A=(d||x===".")&&i.endsWith("/");return!g.pathname.endsWith("/")&&(y||A)&&(g.pathname+="/"),g}var Tn=a=>a.join("/").replace(/\/\/+/g,"/"),Ev=a=>a.replace(/\/+$/,"").replace(/^\/*/,"/"),qv=a=>!a||a==="?"?"":a.startsWith("?")?a:"?"+a,Cv=a=>!a||a==="#"?"":a.startsWith("#")?a:"#"+a;function Tv(a){return a!=null&&typeof a.status=="number"&&typeof a.statusText=="string"&&typeof a.internal=="boolean"&&"data"in a}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var A0=["POST","PUT","PATCH","DELETE"];new Set(A0);var Mv=["GET",...A0];new Set(Mv);var Nl=m.createContext(null);Nl.displayName="DataRouter";var Er=m.createContext(null);Er.displayName="DataRouterState";m.createContext(!1);var j0=m.createContext({isTransitioning:!1});j0.displayName="ViewTransition";var Rv=m.createContext(new Map);Rv.displayName="Fetchers";var kv=m.createContext(null);kv.displayName="Await";var ln=m.createContext(null);ln.displayName="Navigation";var Bs=m.createContext(null);Bs.displayName="Location";var kn=m.createContext({outlet:null,matches:[],isDataRoute:!1});kn.displayName="Route";var Bu=m.createContext(null);Bu.displayName="RouteError";function _v(a,{relative:l}={}){Ge(zs(),"useHref() may be used only in the context of a component.");let{basename:i,navigator:r}=m.useContext(ln),{hash:f,pathname:d,search:x}=Ls(a,{relative:l}),p=d;return i!=="/"&&(p=d==="/"?i:Tn([i,d])),r.createHref({pathname:p,search:x,hash:f})}function zs(){return m.useContext(Bs)!=null}function Ma(){return Ge(zs(),"useLocation() may be used only in the context of a component."),m.useContext(Bs).location}var N0="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function w0(a){m.useContext(ln).static||m.useLayoutEffect(a)}function Dv(){let{isDataRoute:a}=m.useContext(kn);return a?Kv():Ov()}function Ov(){Ge(zs(),"useNavigate() may be used only in the context of a component.");let a=m.useContext(Nl),{basename:l,navigator:i}=m.useContext(ln),{matches:r}=m.useContext(kn),{pathname:f}=Ma(),d=JSON.stringify(b0(r)),x=m.useRef(!1);return w0(()=>{x.current=!0}),m.useCallback((g,y={})=>{if(It(x.current,N0),!x.current)return;if(typeof g=="number"){i.go(g);return}let A=S0(g,JSON.parse(d),f,y.relative==="path");a==null&&l!=="/"&&(A.pathname=A.pathname==="/"?l:Tn([l,A.pathname])),(y.replace?i.replace:i.push)(A,y.state,y)},[l,i,d,f,a])}m.createContext(null);function Ls(a,{relative:l}={}){let{matches:i}=m.useContext(kn),{pathname:r}=Ma(),f=JSON.stringify(b0(i));return m.useMemo(()=>S0(a,JSON.parse(f),r,l==="path"),[a,f,r,l])}function Bv(a,l){return E0(a,l)}function E0(a,l,i,r,f){Ge(zs(),"useRoutes() may be used only in the context of a component.");let{navigator:d}=m.useContext(ln),{matches:x}=m.useContext(kn),p=x[x.length-1],g=p?p.params:{},y=p?p.pathname:"/",A=p?p.pathnameBase:"/",S=p&&p.route;{let N=S&&S.path||"";q0(y,!S||N.endsWith("*")||N.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${y}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + +Please change the parent to .`)}let E=Ma(),R;if(l){let N=typeof l=="string"?jl(l):l;Ge(A==="/"||N.pathname?.startsWith(A),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${A}" but pathname "${N.pathname}" was given in the \`location\` prop.`),R=N}else R=E;let j=R.pathname||"/",M=j;if(A!=="/"){let N=A.replace(/^\//,"").split("/");M="/"+j.replace(/^\//,"").split("/").slice(N.length).join("/")}let b=x0(a,{pathname:M});It(S||b!=null,`No routes matched location "${R.pathname}${R.search}${R.hash}" `),It(b==null||b[b.length-1].route.element!==void 0||b[b.length-1].route.Component!==void 0||b[b.length-1].route.lazy!==void 0,`Matched leaf route at location "${R.pathname}${R.search}${R.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let w=Vv(b&&b.map(N=>Object.assign({},N,{params:Object.assign({},g,N.params),pathname:Tn([A,d.encodeLocation?d.encodeLocation(N.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathname]),pathnameBase:N.pathnameBase==="/"?A:Tn([A,d.encodeLocation?d.encodeLocation(N.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathnameBase])})),x,i,r,f);return l&&w?m.createElement(Bs.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...R},navigationType:"POP"}},w):w}function zv(){let a=Xv(),l=Tv(a)?`${a.status} ${a.statusText}`:a instanceof Error?a.message:JSON.stringify(a),i=a instanceof Error?a.stack:null,r="rgba(200,200,200, 0.5)",f={padding:"0.5rem",backgroundColor:r},d={padding:"2px 4px",backgroundColor:r},x=null;return console.error("Error handled by React Router default ErrorBoundary:",a),x=m.createElement(m.Fragment,null,m.createElement("p",null,"💿 Hey developer 👋"),m.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",m.createElement("code",{style:d},"ErrorBoundary")," or"," ",m.createElement("code",{style:d},"errorElement")," prop on your route.")),m.createElement(m.Fragment,null,m.createElement("h2",null,"Unexpected Application Error!"),m.createElement("h3",{style:{fontStyle:"italic"}},l),i?m.createElement("pre",{style:f},i):null,x)}var Lv=m.createElement(zv,null),Uv=class extends m.Component{constructor(a){super(a),this.state={location:a.location,revalidation:a.revalidation,error:a.error}}static getDerivedStateFromError(a){return{error:a}}static getDerivedStateFromProps(a,l){return l.location!==a.location||l.revalidation!=="idle"&&a.revalidation==="idle"?{error:a.error,location:a.location,revalidation:a.revalidation}:{error:a.error!==void 0?a.error:l.error,location:l.location,revalidation:a.revalidation||l.revalidation}}componentDidCatch(a,l){this.props.onError?this.props.onError(a,l):console.error("React Router caught the following error during render",a)}render(){return this.state.error!==void 0?m.createElement(kn.Provider,{value:this.props.routeContext},m.createElement(Bu.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function Hv({routeContext:a,match:l,children:i}){let r=m.useContext(Nl);return r&&r.static&&r.staticContext&&(l.route.errorElement||l.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=l.route.id),m.createElement(kn.Provider,{value:a},i)}function Vv(a,l=[],i=null,r=null,f=null){if(a==null){if(!i)return null;if(i.errors)a=i.matches;else if(l.length===0&&!i.initialized&&i.matches.length>0)a=i.matches;else return null}let d=a,x=i?.errors;if(x!=null){let A=d.findIndex(S=>S.route.id&&x?.[S.route.id]!==void 0);Ge(A>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(x).join(",")}`),d=d.slice(0,Math.min(d.length,A+1))}let p=!1,g=-1;if(i)for(let A=0;A=0?d=d.slice(0,g+1):d=[d[0]];break}}}let y=i&&r?(A,S)=>{r(A,{location:i.location,params:i.matches?.[0]?.params??{},errorInfo:S})}:void 0;return d.reduceRight((A,S,E)=>{let R,j=!1,M=null,b=null;i&&(R=x&&S.route.id?x[S.route.id]:void 0,M=S.route.errorElement||Lv,p&&(g<0&&E===0?(q0("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),j=!0,b=null):g===E&&(j=!0,b=S.route.hydrateFallbackElement||null)));let w=l.concat(d.slice(0,E+1)),N=()=>{let T;return R?T=M:j?T=b:S.route.Component?T=m.createElement(S.route.Component,null):S.route.element?T=S.route.element:T=A,m.createElement(Hv,{match:S,routeContext:{outlet:A,matches:w,isDataRoute:i!=null},children:T})};return i&&(S.route.ErrorBoundary||S.route.errorElement||E===0)?m.createElement(Uv,{location:i.location,revalidation:i.revalidation,component:M,error:R,children:N(),routeContext:{outlet:null,matches:w,isDataRoute:!0},onError:y}):N()},null)}function zu(a){return`${a} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Yv(a){let l=m.useContext(Nl);return Ge(l,zu(a)),l}function Gv(a){let l=m.useContext(Er);return Ge(l,zu(a)),l}function Qv(a){let l=m.useContext(kn);return Ge(l,zu(a)),l}function Lu(a){let l=Qv(a),i=l.matches[l.matches.length-1];return Ge(i.route.id,`${a} can only be used on routes that contain a unique "id"`),i.route.id}function $v(){return Lu("useRouteId")}function Xv(){let a=m.useContext(Bu),l=Gv("useRouteError"),i=Lu("useRouteError");return a!==void 0?a:l.errors?.[i]}function Kv(){let{router:a}=Yv("useNavigate"),l=Lu("useNavigate"),i=m.useRef(!1);return w0(()=>{i.current=!0}),m.useCallback(async(f,d={})=>{It(i.current,N0),i.current&&(typeof f=="number"?a.navigate(f):await a.navigate(f,{fromRouteId:l,...d}))},[a,l])}var Rp={};function q0(a,l,i){!l&&!Rp[a]&&(Rp[a]=!0,It(!1,i))}m.memo(Zv);function Zv({routes:a,future:l,state:i,unstable_onError:r}){return E0(a,void 0,i,r,l)}function hr(a){Ge(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function Fv({basename:a="/",children:l=null,location:i,navigationType:r="POP",navigator:f,static:d=!1}){Ge(!zs(),"You cannot render a inside another . You should never have more than one in your app.");let x=a.replace(/^\/*/,"/"),p=m.useMemo(()=>({basename:x,navigator:f,static:d,future:{}}),[x,f,d]);typeof i=="string"&&(i=jl(i));let{pathname:g="/",search:y="",hash:A="",state:S=null,key:E="default"}=i,R=m.useMemo(()=>{let j=Rn(g,x);return j==null?null:{location:{pathname:j,search:y,hash:A,state:S,key:E},navigationType:r}},[x,g,y,A,S,E,r]);return It(R!=null,` is not able to match the URL "${g}${y}${A}" because it does not start with the basename, so the won't render anything.`),R==null?null:m.createElement(ln.Provider,{value:p},m.createElement(Bs.Provider,{children:l,value:R}))}function Jv({children:a,location:l}){return Bv(Su(a),l)}function Su(a,l=[]){let i=[];return m.Children.forEach(a,(r,f)=>{if(!m.isValidElement(r))return;let d=[...l,f];if(r.type===m.Fragment){i.push.apply(i,Su(r.props.children,d));return}Ge(r.type===hr,`[${typeof r.type=="string"?r.type:r.type.name}] is not a component. All component children of must be a or `),Ge(!r.props.index||!r.props.children,"An index route cannot have child routes.");let x={id:r.props.id||d.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,middleware:r.props.middleware,loader:r.props.loader,action:r.props.action,hydrateFallbackElement:r.props.hydrateFallbackElement,HydrateFallback:r.props.HydrateFallback,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.hasErrorBoundary===!0||r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(x.children=Su(r.props.children,d)),i.push(x)}),i}var mr="get",pr="application/x-www-form-urlencoded";function qr(a){return a!=null&&typeof a.tagName=="string"}function Iv(a){return qr(a)&&a.tagName.toLowerCase()==="button"}function Wv(a){return qr(a)&&a.tagName.toLowerCase()==="form"}function Pv(a){return qr(a)&&a.tagName.toLowerCase()==="input"}function eb(a){return!!(a.metaKey||a.altKey||a.ctrlKey||a.shiftKey)}function tb(a,l){return a.button===0&&(!l||l==="_self")&&!eb(a)}var sr=null;function nb(){if(sr===null)try{new FormData(document.createElement("form"),0),sr=!1}catch{sr=!0}return sr}var ab=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function nu(a){return a!=null&&!ab.has(a)?(It(!1,`"${a}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${pr}"`),null):a}function lb(a,l){let i,r,f,d,x;if(Wv(a)){let p=a.getAttribute("action");r=p?Rn(p,l):null,i=a.getAttribute("method")||mr,f=nu(a.getAttribute("enctype"))||pr,d=new FormData(a)}else if(Iv(a)||Pv(a)&&(a.type==="submit"||a.type==="image")){let p=a.form;if(p==null)throw new Error('Cannot submit a + + + + +
+ {user.lastSocketId && socket {user.lastSocketId.slice(0, 6)}} + {user.lastSeen && last seen {new Date(user.lastSeen).toLocaleString()}} + {ban?.expiresAt && ( + expires {new Date(ban.expiresAt).toLocaleString()} + )} + {user.ips?.length ? ( + ips {user.ips.slice(-3).join(', ')} + ) : null} +
+ + ); + }) + )} + + + + ); +} + +function ModerationBanList({ bans, onUnban }) { + if (!bans.length) { + return ( +
+ No active bans/timeouts. +
+ ); + } + return ( +
+
Active bans
+ {bans.map((ban) => ( +
+
+ + {ban.id.slice(0, 6)} + + {ban.userId && ( + user {ban.userId.slice(0, 6)} + )} + + {ban.expiresAt ? 'timeout' : 'ban'} + + {ban.expiresAt && ( + + until {new Date(ban.expiresAt).toLocaleString()} + + )} + {ban.reason ? ( + reason {ban.reason} + ) : null} +
+ +
+ ))} +
+ ); +} + function AdminIpLogPanel({ entries }) { const logs = entries || []; return ( diff --git a/webui/src/components/BannedOverlay.jsx b/webui/src/components/BannedOverlay.jsx new file mode 100644 index 00000000..d522bf14 --- /dev/null +++ b/webui/src/components/BannedOverlay.jsx @@ -0,0 +1,43 @@ +import AuthPanel from './AuthPanel.jsx'; +import { useSession } from '../context/SessionContext.jsx'; + +function formatExpiry(expiresAt) { + if (!expiresAt) return 'permanent'; + const ms = expiresAt - Date.now(); + if (ms <= 0) return 'expiring soon'; + const minutes = Math.ceil(ms / 60000); + if (minutes < 60) return `${minutes} minute${minutes === 1 ? '' : 's'}`; + const hours = Math.ceil(minutes / 60); + if (hours < 24) return `${hours} hour${hours === 1 ? '' : 's'}`; + const days = Math.ceil(hours / 24); + return `${days} day${days === 1 ? '' : 's'}`; +} + +export default function BannedOverlay() { + const { banStatus } = useSession(); + if (!banStatus?.banned) return null; + const expiresAt = banStatus.expiresAt || null; + const reason = banStatus.reason || null; + return ( +
+
+
+

Access blocked

+

+ Your access has been {expiresAt ? 'temporarily restricted' : 'banned'}. +

+
+ {expiresAt ? `Timeout ends in ${formatExpiry(expiresAt)}.` : 'This ban has no expiration.'} +
+ {reason &&
Reason: {reason}
} +
+
+ +
+

+ Admins can log in above to regain access. +

+
+
+ ); +} diff --git a/webui/src/context/SessionContext.jsx b/webui/src/context/SessionContext.jsx index c34cd1ac..8cf073f1 100644 --- a/webui/src/context/SessionContext.jsx +++ b/webui/src/context/SessionContext.jsx @@ -8,6 +8,8 @@ const SessionContext = createContext({ session: null, logs: [], adminLogs: [], + banStatus: null, + moderation: null, login: async () => {}, setRole: async () => {}, requestControl: async () => {}, @@ -18,6 +20,9 @@ const SessionContext = createContext({ setNickname: async () => {}, triggerReplay: async () => {}, setCommunityGoal: async () => {}, + banUser: async () => {}, + timeoutUser: async () => {}, + unbanUser: async () => {}, }); function useAckEmitter(socket) { @@ -42,6 +47,8 @@ export function SessionProvider({ children }) { const [session, setSession] = useState(null); const [logs, setLogs] = useState([]); const [adminLogs, setAdminLogs] = useState([]); + const [banStatus, setBanStatus] = useState(null); + const [moderation, setModeration] = useState(null); const [alerts, setAlerts] = useState([]); const [connected, setConnected] = useState(socket.connected); @@ -72,11 +79,29 @@ export function SessionProvider({ children }) { function handleAdminLogEntry(entry) { setAdminLogs((prev) => [...prev.slice(-199), entry]); } + function handleModerationStatus(payload = {}) { + const banned = Boolean(payload.banned); + setBanStatus(banned ? payload : null); + if (banned) { + setSession(null); + setLogs([]); + setAlerts([]); + } + } + function handleModerationInit(payload = {}) { + setModeration(payload); + } + function handleModerationUpdate(payload = {}) { + setModeration(payload); + } socket.on('session:sync', handleSession); socket.on('log:init', handleLogInit); socket.on('log:entry', handleLogEntry); socket.on('adminlog:init', handleAdminLogInit); socket.on('adminlog:entry', handleAdminLogEntry); + socket.on('moderation:status', handleModerationStatus); + socket.on('moderation:init', handleModerationInit); + socket.on('moderation:update', handleModerationUpdate); socket.on('alert:new', (payload = {}) => { setAlerts((prev) => [ ...prev.slice(-49), @@ -92,6 +117,9 @@ export function SessionProvider({ children }) { socket.off('log:entry', handleLogEntry); socket.off('adminlog:init', handleAdminLogInit); socket.off('adminlog:entry', handleAdminLogEntry); + socket.off('moderation:status', handleModerationStatus); + socket.off('moderation:init', handleModerationInit); + socket.off('moderation:update', handleModerationUpdate); socket.off('alert:new'); }; }, [socket]); @@ -112,6 +140,10 @@ export function SessionProvider({ children }) { setNickname: (nickname) => emitWithAck('nickname:set', { nickname }), triggerReplay: (sources = []) => emitWithAck('replay:trigger', { sources }), setCommunityGoal: (text) => emitWithAck('communityGoal:set', { text }), + banUser: (target, reason) => emitWithAck('moderation:ban', { target, reason }), + timeoutUser: (target, durationMs, reason) => + emitWithAck('moderation:ban', { target, durationMs, reason }), + unbanUser: (target) => emitWithAck('moderation:unban', { target }), pushAlert: (alert) => setAlerts((prev) => [ ...prev.slice(-49), @@ -127,10 +159,12 @@ export function SessionProvider({ children }) { session, logs, adminLogs, + banStatus, + moderation, alerts, ...actions, }), - [actions, adminLogs, alerts, connected, logs, session], + [actions, adminLogs, alerts, banStatus, connected, logs, moderation, session], ); return {children}; diff --git a/webui/src/lib/socket.js b/webui/src/lib/socket.js index d63b1292..dd401694 100644 --- a/webui/src/lib/socket.js +++ b/webui/src/lib/socket.js @@ -7,8 +7,27 @@ console.info('[socket] connecting to', resolvedUrl); const settings = loadSettings(); const transportPref = settings?.page?.connectionTransport || 'websocket'; const transports = transportPref === 'polling' ? ['polling'] : ['websocket', 'polling']; +const CLIENT_ID_KEY = 'roverd_client_id'; + +function getClientId() { + if (typeof window === 'undefined') return null; + try { + const existing = window.localStorage.getItem(CLIENT_ID_KEY); + if (existing) return existing; + const created = (crypto?.randomUUID && crypto.randomUUID()) || `${Date.now()}-${Math.random().toString(16).slice(2)}`; + window.localStorage.setItem(CLIENT_ID_KEY, created); + return created; + } catch (err) { + return null; + } +} + +const clientId = getClientId(); export const socket = io(resolvedUrl, { transports, timeout: 15000, + auth: { + clientId, + }, }); socket.on('connect_error', (err) => console.error('connect_error', err.code, err.message, err.data)); diff --git a/webui/src/mini/MiniSummaryApp.jsx b/webui/src/mini/MiniSummaryApp.jsx index c3e2af6f..c71325f3 100644 --- a/webui/src/mini/MiniSummaryApp.jsx +++ b/webui/src/mini/MiniSummaryApp.jsx @@ -9,6 +9,7 @@ import VideoTile from '../components/VideoTile.jsx'; import ChatPanel from '../components/ChatPanel.jsx'; import AlertFeed from '../components/AlertFeed.jsx'; import useDefaultNickname from '../hooks/useDefaultNickname.js'; +import BannedOverlay from '../components/BannedOverlay.jsx'; const ROTATE_MS = 20000; const HARD_REFRESH_MS = 3 * 60 * 60 * 1000; @@ -153,6 +154,7 @@ export default function MiniSummaryApp() { <> + ); diff --git a/webui/src/spectate/SpectatorApp.jsx b/webui/src/spectate/SpectatorApp.jsx index 7482edcd..5b0fefc7 100644 --- a/webui/src/spectate/SpectatorApp.jsx +++ b/webui/src/spectate/SpectatorApp.jsx @@ -13,6 +13,7 @@ import useDefaultNickname from '../hooks/useDefaultNickname.js'; import CommunityGoalBanner from '../components/CommunityGoalBanner.jsx'; import RoverQueuesPanel from '../components/RoverQueuesPanel.jsx'; import RawUserPilePanel from '../components/RawUserPilePanel.jsx'; +import BannedOverlay from '../components/BannedOverlay.jsx'; function formatDriverLabel({ roverId, session }) { const activeDriverId = session?.activeDrivers?.[roverId] || null; @@ -159,7 +160,10 @@ function SpectatorContent() { export default function SpectatorApp() { return ( - + <> + + + ); }