cicy-desktop 2.1.367 → 2.1.368

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1118 @@
1
+ (function(){const f=document.createElement("link").relList;if(f&&f.supports&&f.supports("modulepreload"))return;for(const S of document.querySelectorAll('link[rel="modulepreload"]'))d(S);new MutationObserver(S=>{for(const x of S)if(x.type==="childList")for(const b of x.addedNodes)b.tagName==="LINK"&&b.rel==="modulepreload"&&d(b)}).observe(document,{childList:!0,subtree:!0});function m(S){const x={};return S.integrity&&(x.integrity=S.integrity),S.referrerPolicy&&(x.referrerPolicy=S.referrerPolicy),S.crossOrigin==="use-credentials"?x.credentials="include":S.crossOrigin==="anonymous"?x.credentials="omit":x.credentials="same-origin",x}function d(S){if(S.ep)return;S.ep=!0;const x=m(S);fetch(S.href,x)}})();var _o={exports:{}},Ti={};/**
2
+ * @license React
3
+ * react-jsx-runtime.production.js
4
+ *
5
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */var Bp;function My(){if(Bp)return Ti;Bp=1;var c=Symbol.for("react.transitional.element"),f=Symbol.for("react.fragment");function m(d,S,x){var b=null;if(x!==void 0&&(b=""+x),S.key!==void 0&&(b=""+S.key),"key"in S){x={};for(var O in S)O!=="key"&&(x[O]=S[O])}else x=S;return S=x.ref,{$$typeof:c,type:d,key:b,ref:S!==void 0?S:null,props:x}}return Ti.Fragment=f,Ti.jsx=m,Ti.jsxs=m,Ti}var qp;function Ry(){return qp||(qp=1,_o.exports=My()),_o.exports}var s=Ry(),ko={exports:{}},Ci={},jo={exports:{}},To={};/**
10
+ * @license React
11
+ * scheduler.production.js
12
+ *
13
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */var Lp;function Hy(){return Lp||(Lp=1,(function(c){function f(E,G){var U=E.length;E.push(G);e:for(;0<U;){var se=U-1>>>1,ee=E[se];if(0<S(ee,G))E[se]=G,E[U]=ee,U=se;else break e}}function m(E){return E.length===0?null:E[0]}function d(E){if(E.length===0)return null;var G=E[0],U=E.pop();if(U!==G){E[0]=U;e:for(var se=0,ee=E.length,p=ee>>>1;se<p;){var v=2*(se+1)-1,C=E[v],L=v+1,J=E[L];if(0>S(C,U))L<ee&&0>S(J,C)?(E[se]=J,E[L]=U,se=L):(E[se]=C,E[v]=U,se=v);else if(L<ee&&0>S(J,U))E[se]=J,E[L]=U,se=L;else break e}}return G}function S(E,G){var U=E.sortIndex-G.sortIndex;return U!==0?U:E.id-G.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var x=performance;c.unstable_now=function(){return x.now()}}else{var b=Date,O=b.now();c.unstable_now=function(){return b.now()-O}}var _=[],h=[],D=1,j=null,X=3,M=!1,K=!1,R=!1,Z=!1,W=typeof setTimeout=="function"?setTimeout:null,ke=typeof clearTimeout=="function"?clearTimeout:null,oe=typeof setImmediate<"u"?setImmediate:null;function ne(E){for(var G=m(h);G!==null;){if(G.callback===null)d(h);else if(G.startTime<=E)d(h),G.sortIndex=G.expirationTime,f(_,G);else break;G=m(h)}}function re(E){if(R=!1,ne(E),!K)if(m(_)!==null)K=!0,Se||(Se=!0,Ce());else{var G=m(h);G!==null&&ae(re,G.startTime-E)}}var Se=!1,F=-1,P=5,$=-1;function le(){return Z?!0:!(c.unstable_now()-$<P)}function Ne(){if(Z=!1,Se){var E=c.unstable_now();$=E;var G=!0;try{e:{K=!1,R&&(R=!1,ke(F),F=-1),M=!0;var U=X;try{t:{for(ne(E),j=m(_);j!==null&&!(j.expirationTime>E&&le());){var se=j.callback;if(typeof se=="function"){j.callback=null,X=j.priorityLevel;var ee=se(j.expirationTime<=E);if(E=c.unstable_now(),typeof ee=="function"){j.callback=ee,ne(E),G=!0;break t}j===m(_)&&d(_),ne(E)}else d(_);j=m(_)}if(j!==null)G=!0;else{var p=m(h);p!==null&&ae(re,p.startTime-E),G=!1}}break e}finally{j=null,X=U,M=!1}G=void 0}}finally{G?Ce():Se=!1}}}var Ce;if(typeof oe=="function")Ce=function(){oe(Ne)};else if(typeof MessageChannel<"u"){var De=new MessageChannel,Ae=De.port2;De.port1.onmessage=Ne,Ce=function(){Ae.postMessage(null)}}else Ce=function(){W(Ne,0)};function ae(E,G){F=W(function(){E(c.unstable_now())},G)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(E){E.callback=null},c.unstable_forceFrameRate=function(E){0>E||125<E?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):P=0<E?Math.floor(1e3/E):5},c.unstable_getCurrentPriorityLevel=function(){return X},c.unstable_next=function(E){switch(X){case 1:case 2:case 3:var G=3;break;default:G=X}var U=X;X=G;try{return E()}finally{X=U}},c.unstable_requestPaint=function(){Z=!0},c.unstable_runWithPriority=function(E,G){switch(E){case 1:case 2:case 3:case 4:case 5:break;default:E=3}var U=X;X=E;try{return G()}finally{X=U}},c.unstable_scheduleCallback=function(E,G,U){var se=c.unstable_now();switch(typeof U=="object"&&U!==null?(U=U.delay,U=typeof U=="number"&&0<U?se+U:se):U=se,E){case 1:var ee=-1;break;case 2:ee=250;break;case 5:ee=1073741823;break;case 4:ee=1e4;break;default:ee=5e3}return ee=U+ee,E={id:D++,callback:G,priorityLevel:E,startTime:U,expirationTime:ee,sortIndex:-1},U>se?(E.sortIndex=U,f(h,E),m(_)===null&&E===m(h)&&(R?(ke(F),F=-1):R=!0,ae(re,U-se))):(E.sortIndex=ee,f(_,E),K||M||(K=!0,Se||(Se=!0,Ce()))),E},c.unstable_shouldYield=le,c.unstable_wrapCallback=function(E){var G=X;return function(){var U=X;X=G;try{return E.apply(this,arguments)}finally{X=U}}}})(To)),To}var Gp;function Uy(){return Gp||(Gp=1,jo.exports=Hy()),jo.exports}var Co={exports:{}},Me={};/**
18
+ * @license React
19
+ * react.production.js
20
+ *
21
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
22
+ *
23
+ * This source code is licensed under the MIT license found in the
24
+ * LICENSE file in the root directory of this source tree.
25
+ */var $p;function By(){if($p)return Me;$p=1;var c=Symbol.for("react.transitional.element"),f=Symbol.for("react.portal"),m=Symbol.for("react.fragment"),d=Symbol.for("react.strict_mode"),S=Symbol.for("react.profiler"),x=Symbol.for("react.consumer"),b=Symbol.for("react.context"),O=Symbol.for("react.forward_ref"),_=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),D=Symbol.for("react.lazy"),j=Symbol.for("react.activity"),X=Symbol.iterator;function M(p){return p===null||typeof p!="object"?null:(p=X&&p[X]||p["@@iterator"],typeof p=="function"?p:null)}var K={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},R=Object.assign,Z={};function W(p,v,C){this.props=p,this.context=v,this.refs=Z,this.updater=C||K}W.prototype.isReactComponent={},W.prototype.setState=function(p,v){if(typeof p!="object"&&typeof p!="function"&&p!=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,p,v,"setState")},W.prototype.forceUpdate=function(p){this.updater.enqueueForceUpdate(this,p,"forceUpdate")};function ke(){}ke.prototype=W.prototype;function oe(p,v,C){this.props=p,this.context=v,this.refs=Z,this.updater=C||K}var ne=oe.prototype=new ke;ne.constructor=oe,R(ne,W.prototype),ne.isPureReactComponent=!0;var re=Array.isArray;function Se(){}var F={H:null,A:null,T:null,S:null},P=Object.prototype.hasOwnProperty;function $(p,v,C){var L=C.ref;return{$$typeof:c,type:p,key:v,ref:L!==void 0?L:null,props:C}}function le(p,v){return $(p.type,v,p.props)}function Ne(p){return typeof p=="object"&&p!==null&&p.$$typeof===c}function Ce(p){var v={"=":"=0",":":"=2"};return"$"+p.replace(/[=:]/g,function(C){return v[C]})}var De=/\/+/g;function Ae(p,v){return typeof p=="object"&&p!==null&&p.key!=null?Ce(""+p.key):v.toString(36)}function ae(p){switch(p.status){case"fulfilled":return p.value;case"rejected":throw p.reason;default:switch(typeof p.status=="string"?p.then(Se,Se):(p.status="pending",p.then(function(v){p.status==="pending"&&(p.status="fulfilled",p.value=v)},function(v){p.status==="pending"&&(p.status="rejected",p.reason=v)})),p.status){case"fulfilled":return p.value;case"rejected":throw p.reason}}throw p}function E(p,v,C,L,J){var ye=typeof p;(ye==="undefined"||ye==="boolean")&&(p=null);var de=!1;if(p===null)de=!0;else switch(ye){case"bigint":case"string":case"number":de=!0;break;case"object":switch(p.$$typeof){case c:case f:de=!0;break;case D:return de=p._init,E(de(p._payload),v,C,L,J)}}if(de)return J=J(p),de=L===""?"."+Ae(p,0):L,re(J)?(C="",de!=null&&(C=de.replace(De,"$&/")+"/"),E(J,v,C,"",function(Gt){return Gt})):J!=null&&(Ne(J)&&(J=le(J,C+(J.key==null||p&&p.key===J.key?"":(""+J.key).replace(De,"$&/")+"/")+de)),v.push(J)),1;de=0;var Qe=L===""?".":L+":";if(re(p))for(var Be=0;Be<p.length;Be++)L=p[Be],ye=Qe+Ae(L,Be),de+=E(L,v,C,ye,J);else if(Be=M(p),typeof Be=="function")for(p=Be.call(p),Be=0;!(L=p.next()).done;)L=L.value,ye=Qe+Ae(L,Be++),de+=E(L,v,C,ye,J);else if(ye==="object"){if(typeof p.then=="function")return E(ae(p),v,C,L,J);throw v=String(p),Error("Objects are not valid as a React child (found: "+(v==="[object Object]"?"object with keys {"+Object.keys(p).join(", ")+"}":v)+"). If you meant to render a collection of children, use an array instead.")}return de}function G(p,v,C){if(p==null)return p;var L=[],J=0;return E(p,L,"","",function(ye){return v.call(C,ye,J++)}),L}function U(p){if(p._status===-1){var v=p._result;v=v(),v.then(function(C){(p._status===0||p._status===-1)&&(p._status=1,p._result=C)},function(C){(p._status===0||p._status===-1)&&(p._status=2,p._result=C)}),p._status===-1&&(p._status=0,p._result=v)}if(p._status===1)return p._result.default;throw p._result}var se=typeof reportError=="function"?reportError:function(p){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var v=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof p=="object"&&p!==null&&typeof p.message=="string"?String(p.message):String(p),error:p});if(!window.dispatchEvent(v))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",p);return}console.error(p)},ee={map:G,forEach:function(p,v,C){G(p,function(){v.apply(this,arguments)},C)},count:function(p){var v=0;return G(p,function(){v++}),v},toArray:function(p){return G(p,function(v){return v})||[]},only:function(p){if(!Ne(p))throw Error("React.Children.only expected to receive a single React element child.");return p}};return Me.Activity=j,Me.Children=ee,Me.Component=W,Me.Fragment=m,Me.Profiler=S,Me.PureComponent=oe,Me.StrictMode=d,Me.Suspense=_,Me.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=F,Me.__COMPILER_RUNTIME={__proto__:null,c:function(p){return F.H.useMemoCache(p)}},Me.cache=function(p){return function(){return p.apply(null,arguments)}},Me.cacheSignal=function(){return null},Me.cloneElement=function(p,v,C){if(p==null)throw Error("The argument must be a React element, but you passed "+p+".");var L=R({},p.props),J=p.key;if(v!=null)for(ye in v.key!==void 0&&(J=""+v.key),v)!P.call(v,ye)||ye==="key"||ye==="__self"||ye==="__source"||ye==="ref"&&v.ref===void 0||(L[ye]=v[ye]);var ye=arguments.length-2;if(ye===1)L.children=C;else if(1<ye){for(var de=Array(ye),Qe=0;Qe<ye;Qe++)de[Qe]=arguments[Qe+2];L.children=de}return $(p.type,J,L)},Me.createContext=function(p){return p={$$typeof:b,_currentValue:p,_currentValue2:p,_threadCount:0,Provider:null,Consumer:null},p.Provider=p,p.Consumer={$$typeof:x,_context:p},p},Me.createElement=function(p,v,C){var L,J={},ye=null;if(v!=null)for(L in v.key!==void 0&&(ye=""+v.key),v)P.call(v,L)&&L!=="key"&&L!=="__self"&&L!=="__source"&&(J[L]=v[L]);var de=arguments.length-2;if(de===1)J.children=C;else if(1<de){for(var Qe=Array(de),Be=0;Be<de;Be++)Qe[Be]=arguments[Be+2];J.children=Qe}if(p&&p.defaultProps)for(L in de=p.defaultProps,de)J[L]===void 0&&(J[L]=de[L]);return $(p,ye,J)},Me.createRef=function(){return{current:null}},Me.forwardRef=function(p){return{$$typeof:O,render:p}},Me.isValidElement=Ne,Me.lazy=function(p){return{$$typeof:D,_payload:{_status:-1,_result:p},_init:U}},Me.memo=function(p,v){return{$$typeof:h,type:p,compare:v===void 0?null:v}},Me.startTransition=function(p){var v=F.T,C={};F.T=C;try{var L=p(),J=F.S;J!==null&&J(C,L),typeof L=="object"&&L!==null&&typeof L.then=="function"&&L.then(Se,se)}catch(ye){se(ye)}finally{v!==null&&C.types!==null&&(v.types=C.types),F.T=v}},Me.unstable_useCacheRefresh=function(){return F.H.useCacheRefresh()},Me.use=function(p){return F.H.use(p)},Me.useActionState=function(p,v,C){return F.H.useActionState(p,v,C)},Me.useCallback=function(p,v){return F.H.useCallback(p,v)},Me.useContext=function(p){return F.H.useContext(p)},Me.useDebugValue=function(){},Me.useDeferredValue=function(p,v){return F.H.useDeferredValue(p,v)},Me.useEffect=function(p,v){return F.H.useEffect(p,v)},Me.useEffectEvent=function(p){return F.H.useEffectEvent(p)},Me.useId=function(){return F.H.useId()},Me.useImperativeHandle=function(p,v,C){return F.H.useImperativeHandle(p,v,C)},Me.useInsertionEffect=function(p,v){return F.H.useInsertionEffect(p,v)},Me.useLayoutEffect=function(p,v){return F.H.useLayoutEffect(p,v)},Me.useMemo=function(p,v){return F.H.useMemo(p,v)},Me.useOptimistic=function(p,v){return F.H.useOptimistic(p,v)},Me.useReducer=function(p,v,C){return F.H.useReducer(p,v,C)},Me.useRef=function(p){return F.H.useRef(p)},Me.useState=function(p){return F.H.useState(p)},Me.useSyncExternalStore=function(p,v,C){return F.H.useSyncExternalStore(p,v,C)},Me.useTransition=function(){return F.H.useTransition()},Me.version="19.2.6",Me}var Yp;function Qo(){return Yp||(Yp=1,Co.exports=By()),Co.exports}var Eo={exports:{}},Lt={};/**
26
+ * @license React
27
+ * react-dom.production.js
28
+ *
29
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
30
+ *
31
+ * This source code is licensed under the MIT license found in the
32
+ * LICENSE file in the root directory of this source tree.
33
+ */var Qp;function qy(){if(Qp)return Lt;Qp=1;var c=Qo();function f(_){var h="https://react.dev/errors/"+_;if(1<arguments.length){h+="?args[]="+encodeURIComponent(arguments[1]);for(var D=2;D<arguments.length;D++)h+="&args[]="+encodeURIComponent(arguments[D])}return"Minified React error #"+_+"; visit "+h+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function m(){}var d={d:{f:m,r:function(){throw Error(f(522))},D:m,C:m,L:m,m,X:m,S:m,M:m},p:0,findDOMNode:null},S=Symbol.for("react.portal");function x(_,h,D){var j=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:S,key:j==null?null:""+j,children:_,containerInfo:h,implementation:D}}var b=c.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function O(_,h){if(_==="font")return"";if(typeof h=="string")return h==="use-credentials"?h:""}return Lt.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=d,Lt.createPortal=function(_,h){var D=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!h||h.nodeType!==1&&h.nodeType!==9&&h.nodeType!==11)throw Error(f(299));return x(_,h,null,D)},Lt.flushSync=function(_){var h=b.T,D=d.p;try{if(b.T=null,d.p=2,_)return _()}finally{b.T=h,d.p=D,d.d.f()}},Lt.preconnect=function(_,h){typeof _=="string"&&(h?(h=h.crossOrigin,h=typeof h=="string"?h==="use-credentials"?h:"":void 0):h=null,d.d.C(_,h))},Lt.prefetchDNS=function(_){typeof _=="string"&&d.d.D(_)},Lt.preinit=function(_,h){if(typeof _=="string"&&h&&typeof h.as=="string"){var D=h.as,j=O(D,h.crossOrigin),X=typeof h.integrity=="string"?h.integrity:void 0,M=typeof h.fetchPriority=="string"?h.fetchPriority:void 0;D==="style"?d.d.S(_,typeof h.precedence=="string"?h.precedence:void 0,{crossOrigin:j,integrity:X,fetchPriority:M}):D==="script"&&d.d.X(_,{crossOrigin:j,integrity:X,fetchPriority:M,nonce:typeof h.nonce=="string"?h.nonce:void 0})}},Lt.preinitModule=function(_,h){if(typeof _=="string")if(typeof h=="object"&&h!==null){if(h.as==null||h.as==="script"){var D=O(h.as,h.crossOrigin);d.d.M(_,{crossOrigin:D,integrity:typeof h.integrity=="string"?h.integrity:void 0,nonce:typeof h.nonce=="string"?h.nonce:void 0})}}else h==null&&d.d.M(_)},Lt.preload=function(_,h){if(typeof _=="string"&&typeof h=="object"&&h!==null&&typeof h.as=="string"){var D=h.as,j=O(D,h.crossOrigin);d.d.L(_,D,{crossOrigin:j,integrity:typeof h.integrity=="string"?h.integrity:void 0,nonce:typeof h.nonce=="string"?h.nonce:void 0,type:typeof h.type=="string"?h.type:void 0,fetchPriority:typeof h.fetchPriority=="string"?h.fetchPriority:void 0,referrerPolicy:typeof h.referrerPolicy=="string"?h.referrerPolicy:void 0,imageSrcSet:typeof h.imageSrcSet=="string"?h.imageSrcSet:void 0,imageSizes:typeof h.imageSizes=="string"?h.imageSizes:void 0,media:typeof h.media=="string"?h.media:void 0})}},Lt.preloadModule=function(_,h){if(typeof _=="string")if(h){var D=O(h.as,h.crossOrigin);d.d.m(_,{as:typeof h.as=="string"&&h.as!=="script"?h.as:void 0,crossOrigin:D,integrity:typeof h.integrity=="string"?h.integrity:void 0})}else d.d.m(_)},Lt.requestFormReset=function(_){d.d.r(_)},Lt.unstable_batchedUpdates=function(_,h){return _(h)},Lt.useFormState=function(_,h,D){return b.H.useFormState(_,h,D)},Lt.useFormStatus=function(){return b.H.useHostTransitionStatus()},Lt.version="19.2.6",Lt}var Xp;function hm(){if(Xp)return Eo.exports;Xp=1;function c(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(f){console.error(f)}}return c(),Eo.exports=qy(),Eo.exports}/**
34
+ * @license React
35
+ * react-dom-client.production.js
36
+ *
37
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
38
+ *
39
+ * This source code is licensed under the MIT license found in the
40
+ * LICENSE file in the root directory of this source tree.
41
+ */var Fp;function Ly(){if(Fp)return Ci;Fp=1;var c=Uy(),f=Qo(),m=hm();function d(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var a=2;a<arguments.length;a++)t+="&args[]="+encodeURIComponent(arguments[a])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function S(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function x(e){var t=e,a=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,(t.flags&4098)!==0&&(a=t.return),e=t.return;while(e)}return t.tag===3?a:null}function b(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function O(e){if(e.tag===31){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function _(e){if(x(e)!==e)throw Error(d(188))}function h(e){var t=e.alternate;if(!t){if(t=x(e),t===null)throw Error(d(188));return t!==e?null:e}for(var a=e,n=t;;){var l=a.return;if(l===null)break;var i=l.alternate;if(i===null){if(n=l.return,n!==null){a=n;continue}break}if(l.child===i.child){for(i=l.child;i;){if(i===a)return _(l),e;if(i===n)return _(l),t;i=i.sibling}throw Error(d(188))}if(a.return!==n.return)a=l,n=i;else{for(var r=!1,u=l.child;u;){if(u===a){r=!0,a=l,n=i;break}if(u===n){r=!0,n=l,a=i;break}u=u.sibling}if(!r){for(u=i.child;u;){if(u===a){r=!0,a=i,n=l;break}if(u===n){r=!0,n=i,a=l;break}u=u.sibling}if(!r)throw Error(d(189))}}if(a.alternate!==n)throw Error(d(190))}if(a.tag!==3)throw Error(d(188));return a.stateNode.current===a?e:t}function D(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e;for(e=e.child;e!==null;){if(t=D(e),t!==null)return t;e=e.sibling}return null}var j=Object.assign,X=Symbol.for("react.element"),M=Symbol.for("react.transitional.element"),K=Symbol.for("react.portal"),R=Symbol.for("react.fragment"),Z=Symbol.for("react.strict_mode"),W=Symbol.for("react.profiler"),ke=Symbol.for("react.consumer"),oe=Symbol.for("react.context"),ne=Symbol.for("react.forward_ref"),re=Symbol.for("react.suspense"),Se=Symbol.for("react.suspense_list"),F=Symbol.for("react.memo"),P=Symbol.for("react.lazy"),$=Symbol.for("react.activity"),le=Symbol.for("react.memo_cache_sentinel"),Ne=Symbol.iterator;function Ce(e){return e===null||typeof e!="object"?null:(e=Ne&&e[Ne]||e["@@iterator"],typeof e=="function"?e:null)}var De=Symbol.for("react.client.reference");function Ae(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===De?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case R:return"Fragment";case W:return"Profiler";case Z:return"StrictMode";case re:return"Suspense";case Se:return"SuspenseList";case $:return"Activity"}if(typeof e=="object")switch(e.$$typeof){case K:return"Portal";case oe:return e.displayName||"Context";case ke:return(e._context.displayName||"Context")+".Consumer";case ne:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case F:return t=e.displayName||null,t!==null?t:Ae(e.type)||"Memo";case P:t=e._payload,e=e._init;try{return Ae(e(t))}catch{}}return null}var ae=Array.isArray,E=f.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,G=m.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,U={pending:!1,data:null,method:null,action:null},se=[],ee=-1;function p(e){return{current:e}}function v(e){0>ee||(e.current=se[ee],se[ee]=null,ee--)}function C(e,t){ee++,se[ee]=e.current,e.current=t}var L=p(null),J=p(null),ye=p(null),de=p(null);function Qe(e,t){switch(C(ye,t),C(J,e),C(L,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?cp(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=cp(t),e=rp(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}v(L),C(L,e)}function Be(){v(L),v(J),v(ye)}function Gt(e){e.memoizedState!==null&&C(de,e);var t=L.current,a=rp(t,e.type);t!==a&&(C(J,e),C(L,a))}function rt(e){J.current===e&&(v(L),v(J)),de.current===e&&(v(de),xi._currentValue=U)}var Mt,ia;function xt(e){if(Mt===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);Mt=t&&t[1]||"",ia=-1<a.stack.indexOf(`
42
+ at`)?" (<anonymous>)":-1<a.stack.indexOf("@")?"@unknown:0:0":""}return`
43
+ `+Mt+e+ia}var Yt=!1;function _t(e,t){if(!e||Yt)return"";Yt=!0;var a=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var n={DetermineComponentFrameRoot:function(){try{if(t){var Q=function(){throw Error()};if(Object.defineProperty(Q.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(Q,[])}catch(H){var z=H}Reflect.construct(e,[],Q)}else{try{Q.call()}catch(H){z=H}e.call(Q.prototype)}}else{try{throw Error()}catch(H){z=H}(Q=e())&&typeof Q.catch=="function"&&Q.catch(function(){})}}catch(H){if(H&&z&&typeof H.stack=="string")return[H.stack,z.stack]}return[null,null]}};n.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var l=Object.getOwnPropertyDescriptor(n.DetermineComponentFrameRoot,"name");l&&l.configurable&&Object.defineProperty(n.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var i=n.DetermineComponentFrameRoot(),r=i[0],u=i[1];if(r&&u){var g=r.split(`
44
+ `),A=u.split(`
45
+ `);for(l=n=0;n<g.length&&!g[n].includes("DetermineComponentFrameRoot");)n++;for(;l<A.length&&!A[l].includes("DetermineComponentFrameRoot");)l++;if(n===g.length||l===A.length)for(n=g.length-1,l=A.length-1;1<=n&&0<=l&&g[n]!==A[l];)l--;for(;1<=n&&0<=l;n--,l--)if(g[n]!==A[l]){if(n!==1||l!==1)do if(n--,l--,0>l||g[n]!==A[l]){var q=`
46
+ `+g[n].replace(" at new "," at ");return e.displayName&&q.includes("<anonymous>")&&(q=q.replace("<anonymous>",e.displayName)),q}while(1<=n&&0<=l);break}}}finally{Yt=!1,Error.prepareStackTrace=a}return(a=e?e.displayName||e.name:"")?xt(a):""}function sa(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 _t(e.type,!1);case 11:return _t(e.type.render,!1);case 1:return _t(e.type,!0);case 31:return xt("Activity");default:return""}}function ca(e){try{var t="",a=null;do t+=sa(e,a),a=e,e=e.return;while(e);return t}catch(n){return`
47
+ Error generating stack: `+n.message+`
48
+ `+n.stack}}var Et=Object.prototype.hasOwnProperty,Rt=c.unstable_scheduleCallback,ja=c.unstable_cancelCallback,Dt=c.unstable_shouldYield,mt=c.unstable_requestPaint,gt=c.unstable_now,V=c.unstable_getCurrentPriorityLevel,ce=c.unstable_ImmediatePriority,me=c.unstable_UserBlockingPriority,ue=c.unstable_NormalPriority,ze=c.unstable_LowPriority,Xe=c.unstable_IdlePriority,Ge=c.log,T=c.unstable_setDisableYieldValue,I=null,ge=null;function fe(e){if(typeof Ge=="function"&&T(e),ge&&typeof ge.setStrictMode=="function")try{ge.setStrictMode(I,e)}catch{}}var he=Math.clz32?Math.clz32:bt,je=Math.log,Ue=Math.LN2;function bt(e){return e>>>=0,e===0?32:31-(je(e)/Ue|0)|0}var ra=256,Ta=262144,et=4194304;function At(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 oa(e,t,a){var n=e.pendingLanes;if(n===0)return 0;var l=0,i=e.suspendedLanes,r=e.pingedLanes;e=e.warmLanes;var u=n&134217727;return u!==0?(n=u&~i,n!==0?l=At(n):(r&=u,r!==0?l=At(r):a||(a=u&~e,a!==0&&(l=At(a))))):(u=n&~i,u!==0?l=At(u):r!==0?l=At(r):a||(a=n&~e,a!==0&&(l=At(a)))),l===0?0:t!==0&&t!==l&&(t&i)===0&&(i=l&-l,a=t&-t,i>=a||i===32&&(a&4194048)!==0)?t:l}function Ca(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function dc(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 qi(){var e=et;return et<<=1,(et&62914560)===0&&(et=4194304),e}function Qn(e){for(var t=[],a=0;31>a;a++)t.push(e);return t}function Oa(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function fc(e,t,a,n,l,i){var r=e.pendingLanes;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=a,e.entangledLanes&=a,e.errorRecoveryDisabledLanes&=a,e.shellSuspendCounter=0;var u=e.entanglements,g=e.expirationTimes,A=e.hiddenUpdates;for(a=r&~a;0<a;){var q=31-he(a),Q=1<<q;u[q]=0,g[q]=-1;var z=A[q];if(z!==null)for(A[q]=null,q=0;q<z.length;q++){var H=z[q];H!==null&&(H.lane&=-536870913)}a&=~Q}n!==0&&ua(e,n,0),i!==0&&l===0&&e.tag!==0&&(e.suspendedLanes|=i&~(r&~t))}function ua(e,t,a){e.pendingLanes|=t,e.suspendedLanes&=~t;var n=31-he(t);e.entangledLanes|=t,e.entanglements[n]=e.entanglements[n]|1073741824|a&261930}function B(e,t){var a=e.entangledLanes|=t;for(e=e.entanglements;a;){var n=31-he(a),l=1<<n;l&t|e[n]&t&&(e[n]|=t),a&=~l}}function te(e,t){var a=t&-t;return a=(a&42)!==0?1:ie(a),(a&(e.suspendedLanes|t))!==0?0:a}function ie(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;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:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function be(e){return e&=-e,2<e?8<e?(e&134217727)!==0?32:268435456:8:2}function pe(){var e=G.p;return e!==0?e:(e=window.event,e===void 0?32:Ap(e.type))}function We(e,t){var a=G.p;try{return G.p=e,t()}finally{G.p=a}}var Oe=Math.random().toString(36).slice(2),nt="__reactFiber$"+Oe,Ie="__reactProps$"+Oe,dt="__reactContainer$"+Oe,pc="__reactEvents$"+Oe,_m="__reactListeners$"+Oe,km="__reactHandles$"+Oe,Vo="__reactResources$"+Oe,Ul="__reactMarker$"+Oe;function mc(e){delete e[nt],delete e[Ie],delete e[pc],delete e[_m],delete e[km]}function Xn(e){var t=e[nt];if(t)return t;for(var a=e.parentNode;a;){if(t=a[dt]||a[nt]){if(a=t.alternate,t.child!==null||a!==null&&a.child!==null)for(e=hp(e);e!==null;){if(a=e[nt])return a;e=hp(e)}return t}e=a,a=e.parentNode}return null}function Fn(e){if(e=e[nt]||e[dt]){var t=e.tag;if(t===5||t===6||t===13||t===31||t===26||t===27||t===3)return e}return null}function Bl(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e.stateNode;throw Error(d(33))}function Vn(e){var t=e[Vo];return t||(t=e[Vo]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function Ot(e){e[Ul]=!0}var Zo=new Set,Ko={};function _n(e,t){Zn(e,t),Zn(e+"Capture",t)}function Zn(e,t){for(Ko[e]=t,e=0;e<t.length;e++)Zo.add(t[e])}var jm=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),Jo={},Wo={};function Tm(e){return Et.call(Wo,e)?!0:Et.call(Jo,e)?!1:jm.test(e)?Wo[e]=!0:(Jo[e]=!0,!1)}function Li(e,t,a){if(Tm(t))if(a===null)e.removeAttribute(t);else{switch(typeof a){case"undefined":case"function":case"symbol":e.removeAttribute(t);return;case"boolean":var n=t.toLowerCase().slice(0,5);if(n!=="data-"&&n!=="aria-"){e.removeAttribute(t);return}}e.setAttribute(t,""+a)}}function Gi(e,t,a){if(a===null)e.removeAttribute(t);else{switch(typeof a){case"undefined":case"function":case"symbol":case"boolean":e.removeAttribute(t);return}e.setAttribute(t,""+a)}}function za(e,t,a,n){if(n===null)e.removeAttribute(a);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":e.removeAttribute(a);return}e.setAttributeNS(t,a,""+n)}}function da(e){switch(typeof e){case"bigint":case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Io(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Cm(e,t,a){var n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(r){a=""+r,i.call(this,r)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return a},setValue:function(r){a=""+r},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function hc(e){if(!e._valueTracker){var t=Io(e)?"checked":"value";e._valueTracker=Cm(e,t,""+e[t])}}function Po(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var a=t.getValue(),n="";return e&&(n=Io(e)?e.checked?"true":"false":e.value),e=n,e!==a?(t.setValue(e),!0):!1}function $i(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Em=/[\n"\\]/g;function fa(e){return e.replace(Em,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function yc(e,t,a,n,l,i,r,u){e.name="",r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"?e.type=r:e.removeAttribute("type"),t!=null?r==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+da(t)):e.value!==""+da(t)&&(e.value=""+da(t)):r!=="submit"&&r!=="reset"||e.removeAttribute("value"),t!=null?gc(e,r,da(t)):a!=null?gc(e,r,da(a)):n!=null&&e.removeAttribute("value"),l==null&&i!=null&&(e.defaultChecked=!!i),l!=null&&(e.checked=l&&typeof l!="function"&&typeof l!="symbol"),u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"?e.name=""+da(u):e.removeAttribute("name")}function eu(e,t,a,n,l,i,r,u){if(i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(e.type=i),t!=null||a!=null){if(!(i!=="submit"&&i!=="reset"||t!=null)){hc(e);return}a=a!=null?""+da(a):"",t=t!=null?""+da(t):a,u||t===e.value||(e.value=t),e.defaultValue=t}n=n??l,n=typeof n!="function"&&typeof n!="symbol"&&!!n,e.checked=u?e.checked:!!n,e.defaultChecked=!!n,r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"&&(e.name=r),hc(e)}function gc(e,t,a){t==="number"&&$i(e.ownerDocument)===e||e.defaultValue===""+a||(e.defaultValue=""+a)}function Kn(e,t,a,n){if(e=e.options,t){t={};for(var l=0;l<a.length;l++)t["$"+a[l]]=!0;for(a=0;a<e.length;a++)l=t.hasOwnProperty("$"+e[a].value),e[a].selected!==l&&(e[a].selected=l),l&&n&&(e[a].defaultSelected=!0)}else{for(a=""+da(a),t=null,l=0;l<e.length;l++){if(e[l].value===a){e[l].selected=!0,n&&(e[l].defaultSelected=!0);return}t!==null||e[l].disabled||(t=e[l])}t!==null&&(t.selected=!0)}}function tu(e,t,a){if(t!=null&&(t=""+da(t),t!==e.value&&(e.value=t),a==null)){e.defaultValue!==t&&(e.defaultValue=t);return}e.defaultValue=a!=null?""+da(a):""}function au(e,t,a,n){if(t==null){if(n!=null){if(a!=null)throw Error(d(92));if(ae(n)){if(1<n.length)throw Error(d(93));n=n[0]}a=n}a==null&&(a=""),t=a}a=da(t),e.defaultValue=a,n=e.textContent,n===a&&n!==""&&n!==null&&(e.value=n),hc(e)}function Jn(e,t){if(t){var a=e.firstChild;if(a&&a===e.lastChild&&a.nodeType===3){a.nodeValue=t;return}}e.textContent=t}var Dm=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function nu(e,t,a){var n=t.indexOf("--")===0;a==null||typeof a=="boolean"||a===""?n?e.setProperty(t,""):t==="float"?e.cssFloat="":e[t]="":n?e.setProperty(t,a):typeof a!="number"||a===0||Dm.has(t)?t==="float"?e.cssFloat=a:e[t]=(""+a).trim():e[t]=a+"px"}function lu(e,t,a){if(t!=null&&typeof t!="object")throw Error(d(62));if(e=e.style,a!=null){for(var n in a)!a.hasOwnProperty(n)||t!=null&&t.hasOwnProperty(n)||(n.indexOf("--")===0?e.setProperty(n,""):n==="float"?e.cssFloat="":e[n]="");for(var l in t)n=t[l],t.hasOwnProperty(l)&&a[l]!==n&&nu(e,l,n)}else for(var i in t)t.hasOwnProperty(i)&&nu(e,i,t[i])}function bc(e){if(e.indexOf("-")===-1)return!1;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Nm=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),Am=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function Yi(e){return Am.test(""+e)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":e}function Ma(){}var vc=null;function Sc(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Wn=null,In=null;function iu(e){var t=Fn(e);if(t&&(e=t.stateNode)){var a=e[Ie]||null;e:switch(e=t.stateNode,t.type){case"input":if(yc(e,a.value,a.defaultValue,a.defaultValue,a.checked,a.defaultChecked,a.type,a.name),t=a.name,a.type==="radio"&&t!=null){for(a=e;a.parentNode;)a=a.parentNode;for(a=a.querySelectorAll('input[name="'+fa(""+t)+'"][type="radio"]'),t=0;t<a.length;t++){var n=a[t];if(n!==e&&n.form===e.form){var l=n[Ie]||null;if(!l)throw Error(d(90));yc(n,l.value,l.defaultValue,l.defaultValue,l.checked,l.defaultChecked,l.type,l.name)}}for(t=0;t<a.length;t++)n=a[t],n.form===e.form&&Po(n)}break e;case"textarea":tu(e,a.value,a.defaultValue);break e;case"select":t=a.value,t!=null&&Kn(e,!!a.multiple,t,!1)}}}var wc=!1;function su(e,t,a){if(wc)return e(t,a);wc=!0;try{var n=e(t);return n}finally{if(wc=!1,(Wn!==null||In!==null)&&(As(),Wn&&(t=Wn,e=In,In=Wn=null,iu(t),e)))for(t=0;t<e.length;t++)iu(e[t])}}function ql(e,t){var a=e.stateNode;if(a===null)return null;var n=a[Ie]||null;if(n===null)return null;a=n[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(n=!n.disabled)||(e=e.type,n=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!n;break e;default:e=!1}if(e)return null;if(a&&typeof a!="function")throw Error(d(231,t,typeof a));return a}var Ra=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),xc=!1;if(Ra)try{var Ll={};Object.defineProperty(Ll,"passive",{get:function(){xc=!0}}),window.addEventListener("test",Ll,Ll),window.removeEventListener("test",Ll,Ll)}catch{xc=!1}var Wa=null,_c=null,Qi=null;function cu(){if(Qi)return Qi;var e,t=_c,a=t.length,n,l="value"in Wa?Wa.value:Wa.textContent,i=l.length;for(e=0;e<a&&t[e]===l[e];e++);var r=a-e;for(n=1;n<=r&&t[a-n]===l[i-n];n++);return Qi=l.slice(e,1<n?1-n:void 0)}function Xi(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function Fi(){return!0}function ru(){return!1}function Qt(e){function t(a,n,l,i,r){this._reactName=a,this._targetInst=l,this.type=n,this.nativeEvent=i,this.target=r,this.currentTarget=null;for(var u in e)e.hasOwnProperty(u)&&(a=e[u],this[u]=a?a(i):i[u]);return this.isDefaultPrevented=(i.defaultPrevented!=null?i.defaultPrevented:i.returnValue===!1)?Fi:ru,this.isPropagationStopped=ru,this}return j(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():typeof a.returnValue!="unknown"&&(a.returnValue=!1),this.isDefaultPrevented=Fi)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():typeof a.cancelBubble!="unknown"&&(a.cancelBubble=!0),this.isPropagationStopped=Fi)},persist:function(){},isPersistent:Fi}),t}var kn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Vi=Qt(kn),Gl=j({},kn,{view:0,detail:0}),Om=Qt(Gl),kc,jc,$l,Zi=j({},Gl,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Cc,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==$l&&($l&&e.type==="mousemove"?(kc=e.screenX-$l.screenX,jc=e.screenY-$l.screenY):jc=kc=0,$l=e),kc)},movementY:function(e){return"movementY"in e?e.movementY:jc}}),ou=Qt(Zi),zm=j({},Zi,{dataTransfer:0}),Mm=Qt(zm),Rm=j({},Gl,{relatedTarget:0}),Tc=Qt(Rm),Hm=j({},kn,{animationName:0,elapsedTime:0,pseudoElement:0}),Um=Qt(Hm),Bm=j({},kn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),qm=Qt(Bm),Lm=j({},kn,{data:0}),uu=Qt(Lm),Gm={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},$m={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Ym={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Qm(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=Ym[e])?!!t[e]:!1}function Cc(){return Qm}var Xm=j({},Gl,{key:function(e){if(e.key){var t=Gm[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=Xi(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?$m[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Cc,charCode:function(e){return e.type==="keypress"?Xi(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?Xi(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),Fm=Qt(Xm),Vm=j({},Zi,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),du=Qt(Vm),Zm=j({},Gl,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Cc}),Km=Qt(Zm),Jm=j({},kn,{propertyName:0,elapsedTime:0,pseudoElement:0}),Wm=Qt(Jm),Im=j({},Zi,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Pm=Qt(Im),eh=j({},kn,{newState:0,oldState:0}),th=Qt(eh),ah=[9,13,27,32],Ec=Ra&&"CompositionEvent"in window,Yl=null;Ra&&"documentMode"in document&&(Yl=document.documentMode);var nh=Ra&&"TextEvent"in window&&!Yl,fu=Ra&&(!Ec||Yl&&8<Yl&&11>=Yl),pu=" ",mu=!1;function hu(e,t){switch(e){case"keyup":return ah.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function yu(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Pn=!1;function lh(e,t){switch(e){case"compositionend":return yu(t);case"keypress":return t.which!==32?null:(mu=!0,pu);case"textInput":return e=t.data,e===pu&&mu?null:e;default:return null}}function ih(e,t){if(Pn)return e==="compositionend"||!Ec&&hu(e,t)?(e=cu(),Qi=_c=Wa=null,Pn=!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.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return fu&&t.locale!=="ko"?null:t.data;default:return null}}var sh={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function gu(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!sh[e.type]:t==="textarea"}function bu(e,t,a,n){Wn?In?In.push(n):In=[n]:Wn=n,t=Bs(t,"onChange"),0<t.length&&(a=new Vi("onChange","change",null,a,n),e.push({event:a,listeners:t}))}var Ql=null,Xl=null;function ch(e){tp(e,0)}function Ki(e){var t=Bl(e);if(Po(t))return e}function vu(e,t){if(e==="change")return t}var Su=!1;if(Ra){var Dc;if(Ra){var Nc="oninput"in document;if(!Nc){var wu=document.createElement("div");wu.setAttribute("oninput","return;"),Nc=typeof wu.oninput=="function"}Dc=Nc}else Dc=!1;Su=Dc&&(!document.documentMode||9<document.documentMode)}function xu(){Ql&&(Ql.detachEvent("onpropertychange",_u),Xl=Ql=null)}function _u(e){if(e.propertyName==="value"&&Ki(Xl)){var t=[];bu(t,Xl,e,Sc(e)),su(ch,t)}}function rh(e,t,a){e==="focusin"?(xu(),Ql=t,Xl=a,Ql.attachEvent("onpropertychange",_u)):e==="focusout"&&xu()}function oh(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return Ki(Xl)}function uh(e,t){if(e==="click")return Ki(t)}function dh(e,t){if(e==="input"||e==="change")return Ki(t)}function fh(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var It=typeof Object.is=="function"?Object.is:fh;function Fl(e,t){if(It(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var a=Object.keys(e),n=Object.keys(t);if(a.length!==n.length)return!1;for(n=0;n<a.length;n++){var l=a[n];if(!Et.call(t,l)||!It(e[l],t[l]))return!1}return!0}function ku(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ju(e,t){var a=ku(e);e=0;for(var n;a;){if(a.nodeType===3){if(n=e+a.textContent.length,e<=t&&n>=t)return{node:a,offset:t-e};e=n}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=ku(a)}}function Tu(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Tu(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Cu(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=$i(e.document);t instanceof e.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)e=t.contentWindow;else break;t=$i(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 ph=Ra&&"documentMode"in document&&11>=document.documentMode,el=null,Oc=null,Vl=null,zc=!1;function Eu(e,t,a){var n=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;zc||el==null||el!==$i(n)||(n=el,"selectionStart"in n&&Ac(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Vl&&Fl(Vl,n)||(Vl=n,n=Bs(Oc,"onSelect"),0<n.length&&(t=new Vi("onSelect","select",null,t,a),e.push({event:t,listeners:n}),t.target=el)))}function jn(e,t){var a={};return a[e.toLowerCase()]=t.toLowerCase(),a["Webkit"+e]="webkit"+t,a["Moz"+e]="moz"+t,a}var tl={animationend:jn("Animation","AnimationEnd"),animationiteration:jn("Animation","AnimationIteration"),animationstart:jn("Animation","AnimationStart"),transitionrun:jn("Transition","TransitionRun"),transitionstart:jn("Transition","TransitionStart"),transitioncancel:jn("Transition","TransitionCancel"),transitionend:jn("Transition","TransitionEnd")},Mc={},Du={};Ra&&(Du=document.createElement("div").style,"AnimationEvent"in window||(delete tl.animationend.animation,delete tl.animationiteration.animation,delete tl.animationstart.animation),"TransitionEvent"in window||delete tl.transitionend.transition);function Tn(e){if(Mc[e])return Mc[e];if(!tl[e])return e;var t=tl[e],a;for(a in t)if(t.hasOwnProperty(a)&&a in Du)return Mc[e]=t[a];return e}var Nu=Tn("animationend"),Au=Tn("animationiteration"),Ou=Tn("animationstart"),mh=Tn("transitionrun"),hh=Tn("transitionstart"),yh=Tn("transitioncancel"),zu=Tn("transitionend"),Mu=new Map,Rc="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");Rc.push("scrollEnd");function xa(e,t){Mu.set(e,t),_n(t,[e])}var Ji=typeof reportError=="function"?reportError:function(e){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof e=="object"&&e!==null&&typeof e.message=="string"?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",e);return}console.error(e)},pa=[],al=0,Hc=0;function Wi(){for(var e=al,t=Hc=al=0;t<e;){var a=pa[t];pa[t++]=null;var n=pa[t];pa[t++]=null;var l=pa[t];pa[t++]=null;var i=pa[t];if(pa[t++]=null,n!==null&&l!==null){var r=n.pending;r===null?l.next=l:(l.next=r.next,r.next=l),n.pending=l}i!==0&&Ru(a,l,i)}}function Ii(e,t,a,n){pa[al++]=e,pa[al++]=t,pa[al++]=a,pa[al++]=n,Hc|=n,e.lanes|=n,e=e.alternate,e!==null&&(e.lanes|=n)}function Uc(e,t,a,n){return Ii(e,t,a,n),Pi(e)}function Cn(e,t){return Ii(e,null,null,t),Pi(e)}function Ru(e,t,a){e.lanes|=a;var n=e.alternate;n!==null&&(n.lanes|=a);for(var l=!1,i=e.return;i!==null;)i.childLanes|=a,n=i.alternate,n!==null&&(n.childLanes|=a),i.tag===22&&(e=i.stateNode,e===null||e._visibility&1||(l=!0)),e=i,i=i.return;return e.tag===3?(i=e.stateNode,l&&t!==null&&(l=31-he(a),e=i.hiddenUpdates,n=e[l],n===null?e[l]=[t]:n.push(t),t.lane=a|536870912),i):null}function Pi(e){if(50<hi)throw hi=0,Fr=null,Error(d(185));for(var t=e.return;t!==null;)e=t,t=e.return;return e.tag===3?e.stateNode:null}var nl={};function gh(e,t,a,n){this.tag=e,this.key=a,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Pt(e,t,a,n){return new gh(e,t,a,n)}function Bc(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Ha(e,t){var a=e.alternate;return a===null?(a=Pt(e.tag,t,e.key,e.mode),a.elementType=e.elementType,a.type=e.type,a.stateNode=e.stateNode,a.alternate=e,e.alternate=a):(a.pendingProps=t,a.type=e.type,a.flags=0,a.subtreeFlags=0,a.deletions=null),a.flags=e.flags&65011712,a.childLanes=e.childLanes,a.lanes=e.lanes,a.child=e.child,a.memoizedProps=e.memoizedProps,a.memoizedState=e.memoizedState,a.updateQueue=e.updateQueue,t=e.dependencies,a.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},a.sibling=e.sibling,a.index=e.index,a.ref=e.ref,a.refCleanup=e.refCleanup,a}function Hu(e,t){e.flags&=65011714;var a=e.alternate;return a===null?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=a.childLanes,e.lanes=a.lanes,e.child=a.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=a.memoizedProps,e.memoizedState=a.memoizedState,e.updateQueue=a.updateQueue,e.type=a.type,t=a.dependencies,e.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function es(e,t,a,n,l,i){var r=0;if(n=e,typeof e=="function")Bc(e)&&(r=1);else if(typeof e=="string")r=xy(e,a,L.current)?26:e==="html"||e==="head"||e==="body"?27:5;else e:switch(e){case $:return e=Pt(31,a,t,l),e.elementType=$,e.lanes=i,e;case R:return En(a.children,l,i,t);case Z:r=8,l|=24;break;case W:return e=Pt(12,a,t,l|2),e.elementType=W,e.lanes=i,e;case re:return e=Pt(13,a,t,l),e.elementType=re,e.lanes=i,e;case Se:return e=Pt(19,a,t,l),e.elementType=Se,e.lanes=i,e;default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case oe:r=10;break e;case ke:r=9;break e;case ne:r=11;break e;case F:r=14;break e;case P:r=16,n=null;break e}r=29,a=Error(d(130,e===null?"null":typeof e,"")),n=null}return t=Pt(r,a,t,l),t.elementType=e,t.type=n,t.lanes=i,t}function En(e,t,a,n){return e=Pt(7,e,n,t),e.lanes=a,e}function qc(e,t,a){return e=Pt(6,e,null,t),e.lanes=a,e}function Uu(e){var t=Pt(18,null,null,0);return t.stateNode=e,t}function Lc(e,t,a){return t=Pt(4,e.children!==null?e.children:[],e.key,t),t.lanes=a,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var Bu=new WeakMap;function ma(e,t){if(typeof e=="object"&&e!==null){var a=Bu.get(e);return a!==void 0?a:(t={value:e,source:t,stack:ca(t)},Bu.set(e,t),t)}return{value:e,source:t,stack:ca(t)}}var ll=[],il=0,ts=null,Zl=0,ha=[],ya=0,Ia=null,Ea=1,Da="";function Ua(e,t){ll[il++]=Zl,ll[il++]=ts,ts=e,Zl=t}function qu(e,t,a){ha[ya++]=Ea,ha[ya++]=Da,ha[ya++]=Ia,Ia=e;var n=Ea;e=Da;var l=32-he(n)-1;n&=~(1<<l),a+=1;var i=32-he(t)+l;if(30<i){var r=l-l%5;i=(n&(1<<r)-1).toString(32),n>>=r,l-=r,Ea=1<<32-he(t)+l|a<<l|n,Da=i+e}else Ea=1<<i|a<<l|n,Da=e}function Gc(e){e.return!==null&&(Ua(e,1),qu(e,1,0))}function $c(e){for(;e===ts;)ts=ll[--il],ll[il]=null,Zl=ll[--il],ll[il]=null;for(;e===Ia;)Ia=ha[--ya],ha[ya]=null,Da=ha[--ya],ha[ya]=null,Ea=ha[--ya],ha[ya]=null}function Lu(e,t){ha[ya++]=Ea,ha[ya++]=Da,ha[ya++]=Ia,Ea=t.id,Da=t.overflow,Ia=e}var Ht=null,ot=null,Fe=!1,Pa=null,ga=!1,Yc=Error(d(519));function en(e){var t=Error(d(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?"text":"HTML",""));throw Kl(ma(t,e)),Yc}function Gu(e){var t=e.stateNode,a=e.type,n=e.memoizedProps;switch(t[nt]=e,t[Ie]=n,a){case"dialog":Le("cancel",t),Le("close",t);break;case"iframe":case"object":case"embed":Le("load",t);break;case"video":case"audio":for(a=0;a<gi.length;a++)Le(gi[a],t);break;case"source":Le("error",t);break;case"img":case"image":case"link":Le("error",t),Le("load",t);break;case"details":Le("toggle",t);break;case"input":Le("invalid",t),eu(t,n.value,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name,!0);break;case"select":Le("invalid",t);break;case"textarea":Le("invalid",t),au(t,n.value,n.defaultValue,n.children)}a=n.children,typeof a!="string"&&typeof a!="number"&&typeof a!="bigint"||t.textContent===""+a||n.suppressHydrationWarning===!0||ip(t.textContent,a)?(n.popover!=null&&(Le("beforetoggle",t),Le("toggle",t)),n.onScroll!=null&&Le("scroll",t),n.onScrollEnd!=null&&Le("scrollend",t),n.onClick!=null&&(t.onclick=Ma),t=!0):t=!1,t||en(e,!0)}function $u(e){for(Ht=e.return;Ht;)switch(Ht.tag){case 5:case 31:case 13:ga=!1;return;case 27:case 3:ga=!0;return;default:Ht=Ht.return}}function sl(e){if(e!==Ht)return!1;if(!Fe)return $u(e),Fe=!0,!1;var t=e.tag,a;if((a=t!==3&&t!==27)&&((a=t===5)&&(a=e.type,a=!(a!=="form"&&a!=="button")||co(e.type,e.memoizedProps)),a=!a),a&&ot&&en(e),$u(e),t===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(d(317));ot=mp(e)}else if(t===31){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(d(317));ot=mp(e)}else t===27?(t=ot,hn(e.type)?(e=po,po=null,ot=e):ot=t):ot=Ht?va(e.stateNode.nextSibling):null;return!0}function Dn(){ot=Ht=null,Fe=!1}function Qc(){var e=Pa;return e!==null&&(Zt===null?Zt=e:Zt.push.apply(Zt,e),Pa=null),e}function Kl(e){Pa===null?Pa=[e]:Pa.push(e)}var Xc=p(null),Nn=null,Ba=null;function tn(e,t,a){C(Xc,t._currentValue),t._currentValue=a}function qa(e){e._currentValue=Xc.current,v(Xc)}function Fc(e,t,a){for(;e!==null;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,n!==null&&(n.childLanes|=t)):n!==null&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===a)break;e=e.return}}function Vc(e,t,a,n){var l=e.child;for(l!==null&&(l.return=e);l!==null;){var i=l.dependencies;if(i!==null){var r=l.child;i=i.firstContext;e:for(;i!==null;){var u=i;i=l;for(var g=0;g<t.length;g++)if(u.context===t[g]){i.lanes|=a,u=i.alternate,u!==null&&(u.lanes|=a),Fc(i.return,a,e),n||(r=null);break e}i=u.next}}else if(l.tag===18){if(r=l.return,r===null)throw Error(d(341));r.lanes|=a,i=r.alternate,i!==null&&(i.lanes|=a),Fc(r,a,e),r=null}else r=l.child;if(r!==null)r.return=l;else for(r=l;r!==null;){if(r===e){r=null;break}if(l=r.sibling,l!==null){l.return=r.return,r=l;break}r=r.return}l=r}}function cl(e,t,a,n){e=null;for(var l=t,i=!1;l!==null;){if(!i){if((l.flags&524288)!==0)i=!0;else if((l.flags&262144)!==0)break}if(l.tag===10){var r=l.alternate;if(r===null)throw Error(d(387));if(r=r.memoizedProps,r!==null){var u=l.type;It(l.pendingProps.value,r.value)||(e!==null?e.push(u):e=[u])}}else if(l===de.current){if(r=l.alternate,r===null)throw Error(d(387));r.memoizedState.memoizedState!==l.memoizedState.memoizedState&&(e!==null?e.push(xi):e=[xi])}l=l.return}e!==null&&Vc(t,e,a,n),t.flags|=262144}function as(e){for(e=e.firstContext;e!==null;){if(!It(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function An(e){Nn=e,Ba=null,e=e.dependencies,e!==null&&(e.firstContext=null)}function Ut(e){return Yu(Nn,e)}function ns(e,t){return Nn===null&&An(e),Yu(e,t)}function Yu(e,t){var a=t._currentValue;if(t={context:t,memoizedValue:a,next:null},Ba===null){if(e===null)throw Error(d(308));Ba=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else Ba=Ba.next=t;return a}var bh=typeof AbortController<"u"?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(a,n){e.push(n)}};this.abort=function(){t.aborted=!0,e.forEach(function(a){return a()})}},vh=c.unstable_scheduleCallback,Sh=c.unstable_NormalPriority,kt={$$typeof:oe,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Zc(){return{controller:new bh,data:new Map,refCount:0}}function Jl(e){e.refCount--,e.refCount===0&&vh(Sh,function(){e.controller.abort()})}var Wl=null,Kc=0,rl=0,ol=null;function wh(e,t){if(Wl===null){var a=Wl=[];Kc=0,rl=Ir(),ol={status:"pending",value:void 0,then:function(n){a.push(n)}}}return Kc++,t.then(Qu,Qu),t}function Qu(){if(--Kc===0&&Wl!==null){ol!==null&&(ol.status="fulfilled");var e=Wl;Wl=null,rl=0,ol=null;for(var t=0;t<e.length;t++)(0,e[t])()}}function xh(e,t){var a=[],n={status:"pending",value:null,reason:null,then:function(l){a.push(l)}};return e.then(function(){n.status="fulfilled",n.value=t;for(var l=0;l<a.length;l++)(0,a[l])(t)},function(l){for(n.status="rejected",n.reason=l,l=0;l<a.length;l++)(0,a[l])(void 0)}),n}var Xu=E.S;E.S=function(e,t){Df=gt(),typeof t=="object"&&t!==null&&typeof t.then=="function"&&wh(e,t),Xu!==null&&Xu(e,t)};var On=p(null);function Jc(){var e=On.current;return e!==null?e:ct.pooledCache}function ls(e,t){t===null?C(On,On.current):C(On,t.pool)}function Fu(){var e=Jc();return e===null?null:{parent:kt._currentValue,pool:e}}var ul=Error(d(460)),Wc=Error(d(474)),is=Error(d(542)),ss={then:function(){}};function Vu(e){return e=e.status,e==="fulfilled"||e==="rejected"}function Zu(e,t,a){switch(a=e[a],a===void 0?e.push(t):a!==t&&(t.then(Ma,Ma),t=a),t.status){case"fulfilled":return t.value;case"rejected":throw e=t.reason,Ju(e),e;default:if(typeof t.status=="string")t.then(Ma,Ma);else{if(e=ct,e!==null&&100<e.shellSuspendCounter)throw Error(d(482));e=t,e.status="pending",e.then(function(n){if(t.status==="pending"){var l=t;l.status="fulfilled",l.value=n}},function(n){if(t.status==="pending"){var l=t;l.status="rejected",l.reason=n}})}switch(t.status){case"fulfilled":return t.value;case"rejected":throw e=t.reason,Ju(e),e}throw Mn=t,ul}}function zn(e){try{var t=e._init;return t(e._payload)}catch(a){throw a!==null&&typeof a=="object"&&typeof a.then=="function"?(Mn=a,ul):a}}var Mn=null;function Ku(){if(Mn===null)throw Error(d(459));var e=Mn;return Mn=null,e}function Ju(e){if(e===ul||e===is)throw Error(d(483))}var dl=null,Il=0;function cs(e){var t=Il;return Il+=1,dl===null&&(dl=[]),Zu(dl,e,t)}function Pl(e,t){t=t.props.ref,e.ref=t!==void 0?t:null}function rs(e,t){throw t.$$typeof===X?Error(d(525)):(e=Object.prototype.toString.call(t),Error(d(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e)))}function Wu(e){function t(k,w){if(e){var N=k.deletions;N===null?(k.deletions=[w],k.flags|=16):N.push(w)}}function a(k,w){if(!e)return null;for(;w!==null;)t(k,w),w=w.sibling;return null}function n(k){for(var w=new Map;k!==null;)k.key!==null?w.set(k.key,k):w.set(k.index,k),k=k.sibling;return w}function l(k,w){return k=Ha(k,w),k.index=0,k.sibling=null,k}function i(k,w,N){return k.index=N,e?(N=k.alternate,N!==null?(N=N.index,N<w?(k.flags|=67108866,w):N):(k.flags|=67108866,w)):(k.flags|=1048576,w)}function r(k){return e&&k.alternate===null&&(k.flags|=67108866),k}function u(k,w,N,Y){return w===null||w.tag!==6?(w=qc(N,k.mode,Y),w.return=k,w):(w=l(w,N),w.return=k,w)}function g(k,w,N,Y){var Te=N.type;return Te===R?q(k,w,N.props.children,Y,N.key):w!==null&&(w.elementType===Te||typeof Te=="object"&&Te!==null&&Te.$$typeof===P&&zn(Te)===w.type)?(w=l(w,N.props),Pl(w,N),w.return=k,w):(w=es(N.type,N.key,N.props,null,k.mode,Y),Pl(w,N),w.return=k,w)}function A(k,w,N,Y){return w===null||w.tag!==4||w.stateNode.containerInfo!==N.containerInfo||w.stateNode.implementation!==N.implementation?(w=Lc(N,k.mode,Y),w.return=k,w):(w=l(w,N.children||[]),w.return=k,w)}function q(k,w,N,Y,Te){return w===null||w.tag!==7?(w=En(N,k.mode,Y,Te),w.return=k,w):(w=l(w,N),w.return=k,w)}function Q(k,w,N){if(typeof w=="string"&&w!==""||typeof w=="number"||typeof w=="bigint")return w=qc(""+w,k.mode,N),w.return=k,w;if(typeof w=="object"&&w!==null){switch(w.$$typeof){case M:return N=es(w.type,w.key,w.props,null,k.mode,N),Pl(N,w),N.return=k,N;case K:return w=Lc(w,k.mode,N),w.return=k,w;case P:return w=zn(w),Q(k,w,N)}if(ae(w)||Ce(w))return w=En(w,k.mode,N,null),w.return=k,w;if(typeof w.then=="function")return Q(k,cs(w),N);if(w.$$typeof===oe)return Q(k,ns(k,w),N);rs(k,w)}return null}function z(k,w,N,Y){var Te=w!==null?w.key:null;if(typeof N=="string"&&N!==""||typeof N=="number"||typeof N=="bigint")return Te!==null?null:u(k,w,""+N,Y);if(typeof N=="object"&&N!==null){switch(N.$$typeof){case M:return N.key===Te?g(k,w,N,Y):null;case K:return N.key===Te?A(k,w,N,Y):null;case P:return N=zn(N),z(k,w,N,Y)}if(ae(N)||Ce(N))return Te!==null?null:q(k,w,N,Y,null);if(typeof N.then=="function")return z(k,w,cs(N),Y);if(N.$$typeof===oe)return z(k,w,ns(k,N),Y);rs(k,N)}return null}function H(k,w,N,Y,Te){if(typeof Y=="string"&&Y!==""||typeof Y=="number"||typeof Y=="bigint")return k=k.get(N)||null,u(w,k,""+Y,Te);if(typeof Y=="object"&&Y!==null){switch(Y.$$typeof){case M:return k=k.get(Y.key===null?N:Y.key)||null,g(w,k,Y,Te);case K:return k=k.get(Y.key===null?N:Y.key)||null,A(w,k,Y,Te);case P:return Y=zn(Y),H(k,w,N,Y,Te)}if(ae(Y)||Ce(Y))return k=k.get(N)||null,q(w,k,Y,Te,null);if(typeof Y.then=="function")return H(k,w,N,cs(Y),Te);if(Y.$$typeof===oe)return H(k,w,N,ns(w,Y),Te);rs(w,Y)}return null}function ve(k,w,N,Y){for(var Te=null,Ze=null,we=w,He=w=0,Ye=null;we!==null&&He<N.length;He++){we.index>He?(Ye=we,we=null):Ye=we.sibling;var Ke=z(k,we,N[He],Y);if(Ke===null){we===null&&(we=Ye);break}e&&we&&Ke.alternate===null&&t(k,we),w=i(Ke,w,He),Ze===null?Te=Ke:Ze.sibling=Ke,Ze=Ke,we=Ye}if(He===N.length)return a(k,we),Fe&&Ua(k,He),Te;if(we===null){for(;He<N.length;He++)we=Q(k,N[He],Y),we!==null&&(w=i(we,w,He),Ze===null?Te=we:Ze.sibling=we,Ze=we);return Fe&&Ua(k,He),Te}for(we=n(we);He<N.length;He++)Ye=H(we,k,He,N[He],Y),Ye!==null&&(e&&Ye.alternate!==null&&we.delete(Ye.key===null?He:Ye.key),w=i(Ye,w,He),Ze===null?Te=Ye:Ze.sibling=Ye,Ze=Ye);return e&&we.forEach(function(Sn){return t(k,Sn)}),Fe&&Ua(k,He),Te}function Ee(k,w,N,Y){if(N==null)throw Error(d(151));for(var Te=null,Ze=null,we=w,He=w=0,Ye=null,Ke=N.next();we!==null&&!Ke.done;He++,Ke=N.next()){we.index>He?(Ye=we,we=null):Ye=we.sibling;var Sn=z(k,we,Ke.value,Y);if(Sn===null){we===null&&(we=Ye);break}e&&we&&Sn.alternate===null&&t(k,we),w=i(Sn,w,He),Ze===null?Te=Sn:Ze.sibling=Sn,Ze=Sn,we=Ye}if(Ke.done)return a(k,we),Fe&&Ua(k,He),Te;if(we===null){for(;!Ke.done;He++,Ke=N.next())Ke=Q(k,Ke.value,Y),Ke!==null&&(w=i(Ke,w,He),Ze===null?Te=Ke:Ze.sibling=Ke,Ze=Ke);return Fe&&Ua(k,He),Te}for(we=n(we);!Ke.done;He++,Ke=N.next())Ke=H(we,k,He,Ke.value,Y),Ke!==null&&(e&&Ke.alternate!==null&&we.delete(Ke.key===null?He:Ke.key),w=i(Ke,w,He),Ze===null?Te=Ke:Ze.sibling=Ke,Ze=Ke);return e&&we.forEach(function(zy){return t(k,zy)}),Fe&&Ua(k,He),Te}function st(k,w,N,Y){if(typeof N=="object"&&N!==null&&N.type===R&&N.key===null&&(N=N.props.children),typeof N=="object"&&N!==null){switch(N.$$typeof){case M:e:{for(var Te=N.key;w!==null;){if(w.key===Te){if(Te=N.type,Te===R){if(w.tag===7){a(k,w.sibling),Y=l(w,N.props.children),Y.return=k,k=Y;break e}}else if(w.elementType===Te||typeof Te=="object"&&Te!==null&&Te.$$typeof===P&&zn(Te)===w.type){a(k,w.sibling),Y=l(w,N.props),Pl(Y,N),Y.return=k,k=Y;break e}a(k,w);break}else t(k,w);w=w.sibling}N.type===R?(Y=En(N.props.children,k.mode,Y,N.key),Y.return=k,k=Y):(Y=es(N.type,N.key,N.props,null,k.mode,Y),Pl(Y,N),Y.return=k,k=Y)}return r(k);case K:e:{for(Te=N.key;w!==null;){if(w.key===Te)if(w.tag===4&&w.stateNode.containerInfo===N.containerInfo&&w.stateNode.implementation===N.implementation){a(k,w.sibling),Y=l(w,N.children||[]),Y.return=k,k=Y;break e}else{a(k,w);break}else t(k,w);w=w.sibling}Y=Lc(N,k.mode,Y),Y.return=k,k=Y}return r(k);case P:return N=zn(N),st(k,w,N,Y)}if(ae(N))return ve(k,w,N,Y);if(Ce(N)){if(Te=Ce(N),typeof Te!="function")throw Error(d(150));return N=Te.call(N),Ee(k,w,N,Y)}if(typeof N.then=="function")return st(k,w,cs(N),Y);if(N.$$typeof===oe)return st(k,w,ns(k,N),Y);rs(k,N)}return typeof N=="string"&&N!==""||typeof N=="number"||typeof N=="bigint"?(N=""+N,w!==null&&w.tag===6?(a(k,w.sibling),Y=l(w,N),Y.return=k,k=Y):(a(k,w),Y=qc(N,k.mode,Y),Y.return=k,k=Y),r(k)):a(k,w)}return function(k,w,N,Y){try{Il=0;var Te=st(k,w,N,Y);return dl=null,Te}catch(we){if(we===ul||we===is)throw we;var Ze=Pt(29,we,null,k.mode);return Ze.lanes=Y,Ze.return=k,Ze}finally{}}}var Rn=Wu(!0),Iu=Wu(!1),an=!1;function Ic(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Pc(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 nn(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function ln(e,t,a){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,(Je&2)!==0){var l=n.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),n.pending=t,t=Pi(e),Ru(e,null,a),t}return Ii(e,n,t,a),Pi(e)}function ei(e,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var n=t.lanes;n&=e.pendingLanes,a|=n,t.lanes=a,B(e,a)}}function er(e,t){var a=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,a===n)){var l=null,i=null;if(a=a.firstBaseUpdate,a!==null){do{var r={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};i===null?l=i=r:i=i.next=r,a=a.next}while(a!==null);i===null?l=i=t:i=i.next=t}else l=i=t;a={baseState:n.baseState,firstBaseUpdate:l,lastBaseUpdate:i,shared:n.shared,callbacks:n.callbacks},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}var tr=!1;function ti(){if(tr){var e=ol;if(e!==null)throw e}}function ai(e,t,a,n){tr=!1;var l=e.updateQueue;an=!1;var i=l.firstBaseUpdate,r=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var g=u,A=g.next;g.next=null,r===null?i=A:r.next=A,r=g;var q=e.alternate;q!==null&&(q=q.updateQueue,u=q.lastBaseUpdate,u!==r&&(u===null?q.firstBaseUpdate=A:u.next=A,q.lastBaseUpdate=g))}if(i!==null){var Q=l.baseState;r=0,q=A=g=null,u=i;do{var z=u.lane&-536870913,H=z!==u.lane;if(H?($e&z)===z:(n&z)===z){z!==0&&z===rl&&(tr=!0),q!==null&&(q=q.next={lane:0,tag:u.tag,payload:u.payload,callback:null,next:null});e:{var ve=e,Ee=u;z=t;var st=a;switch(Ee.tag){case 1:if(ve=Ee.payload,typeof ve=="function"){Q=ve.call(st,Q,z);break e}Q=ve;break e;case 3:ve.flags=ve.flags&-65537|128;case 0:if(ve=Ee.payload,z=typeof ve=="function"?ve.call(st,Q,z):ve,z==null)break e;Q=j({},Q,z);break e;case 2:an=!0}}z=u.callback,z!==null&&(e.flags|=64,H&&(e.flags|=8192),H=l.callbacks,H===null?l.callbacks=[z]:H.push(z))}else H={lane:z,tag:u.tag,payload:u.payload,callback:u.callback,next:null},q===null?(A=q=H,g=Q):q=q.next=H,r|=z;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;H=u,u=H.next,H.next=null,l.lastBaseUpdate=H,l.shared.pending=null}}while(!0);q===null&&(g=Q),l.baseState=g,l.firstBaseUpdate=A,l.lastBaseUpdate=q,i===null&&(l.shared.lanes=0),un|=r,e.lanes=r,e.memoizedState=Q}}function Pu(e,t){if(typeof e!="function")throw Error(d(191,e));e.call(t)}function ed(e,t){var a=e.callbacks;if(a!==null)for(e.callbacks=null,e=0;e<a.length;e++)Pu(a[e],t)}var fl=p(null),os=p(0);function td(e,t){e=Za,C(os,e),C(fl,t),Za=e|t.baseLanes}function ar(){C(os,Za),C(fl,fl.current)}function nr(){Za=os.current,v(fl),v(os)}var ea=p(null),ba=null;function sn(e){var t=e.alternate;C(vt,vt.current&1),C(ea,e),ba===null&&(t===null||fl.current!==null||t.memoizedState!==null)&&(ba=e)}function lr(e){C(vt,vt.current),C(ea,e),ba===null&&(ba=e)}function ad(e){e.tag===22?(C(vt,vt.current),C(ea,e),ba===null&&(ba=e)):cn()}function cn(){C(vt,vt.current),C(ea,ea.current)}function ta(e){v(ea),ba===e&&(ba=null),v(vt)}var vt=p(0);function us(e){for(var t=e;t!==null;){if(t.tag===13){var a=t.memoizedState;if(a!==null&&(a=a.dehydrated,a===null||uo(a)||fo(a)))return t}else if(t.tag===19&&(t.memoizedProps.revealOrder==="forwards"||t.memoizedProps.revealOrder==="backwards"||t.memoizedProps.revealOrder==="unstable_legacy-backwards"||t.memoizedProps.revealOrder==="together")){if((t.flags&128)!==0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var La=0,Re=null,lt=null,jt=null,ds=!1,pl=!1,Hn=!1,fs=0,ni=0,ml=null,_h=0;function ht(){throw Error(d(321))}function ir(e,t){if(t===null)return!1;for(var a=0;a<t.length&&a<e.length;a++)if(!It(e[a],t[a]))return!1;return!0}function sr(e,t,a,n,l,i){return La=i,Re=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,E.H=e===null||e.memoizedState===null?qd:wr,Hn=!1,i=a(n,l),Hn=!1,pl&&(i=ld(t,a,n,l)),nd(e),i}function nd(e){E.H=si;var t=lt!==null&&lt.next!==null;if(La=0,jt=lt=Re=null,ds=!1,ni=0,ml=null,t)throw Error(d(300));e===null||Tt||(e=e.dependencies,e!==null&&as(e)&&(Tt=!0))}function ld(e,t,a,n){Re=e;var l=0;do{if(pl&&(ml=null),ni=0,pl=!1,25<=l)throw Error(d(301));if(l+=1,jt=lt=null,e.updateQueue!=null){var i=e.updateQueue;i.lastEffect=null,i.events=null,i.stores=null,i.memoCache!=null&&(i.memoCache.index=0)}E.H=Ld,i=t(a,n)}while(pl);return i}function kh(){var e=E.H,t=e.useState()[0];return t=typeof t.then=="function"?li(t):t,e=e.useState()[0],(lt!==null?lt.memoizedState:null)!==e&&(Re.flags|=1024),t}function cr(){var e=fs!==0;return fs=0,e}function rr(e,t,a){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a}function or(e){if(ds){for(e=e.memoizedState;e!==null;){var t=e.queue;t!==null&&(t.pending=null),e=e.next}ds=!1}La=0,jt=lt=Re=null,pl=!1,ni=fs=0,ml=null}function $t(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return jt===null?Re.memoizedState=jt=e:jt=jt.next=e,jt}function St(){if(lt===null){var e=Re.alternate;e=e!==null?e.memoizedState:null}else e=lt.next;var t=jt===null?Re.memoizedState:jt.next;if(t!==null)jt=t,lt=e;else{if(e===null)throw Re.alternate===null?Error(d(467)):Error(d(310));lt=e,e={memoizedState:lt.memoizedState,baseState:lt.baseState,baseQueue:lt.baseQueue,queue:lt.queue,next:null},jt===null?Re.memoizedState=jt=e:jt=jt.next=e}return jt}function ps(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function li(e){var t=ni;return ni+=1,ml===null&&(ml=[]),e=Zu(ml,e,t),t=Re,(jt===null?t.memoizedState:jt.next)===null&&(t=t.alternate,E.H=t===null||t.memoizedState===null?qd:wr),e}function ms(e){if(e!==null&&typeof e=="object"){if(typeof e.then=="function")return li(e);if(e.$$typeof===oe)return Ut(e)}throw Error(d(438,String(e)))}function ur(e){var t=null,a=Re.updateQueue;if(a!==null&&(t=a.memoCache),t==null){var n=Re.alternate;n!==null&&(n=n.updateQueue,n!==null&&(n=n.memoCache,n!=null&&(t={data:n.data.map(function(l){return l.slice()}),index:0})))}if(t==null&&(t={data:[],index:0}),a===null&&(a=ps(),Re.updateQueue=a),a.memoCache=t,a=t.data[t.index],a===void 0)for(a=t.data[t.index]=Array(e),n=0;n<e;n++)a[n]=le;return t.index++,a}function Ga(e,t){return typeof t=="function"?t(e):t}function hs(e){var t=St();return dr(t,lt,e)}function dr(e,t,a){var n=e.queue;if(n===null)throw Error(d(311));n.lastRenderedReducer=a;var l=e.baseQueue,i=n.pending;if(i!==null){if(l!==null){var r=l.next;l.next=i.next,i.next=r}t.baseQueue=l=i,n.pending=null}if(i=e.baseState,l===null)e.memoizedState=i;else{t=l.next;var u=r=null,g=null,A=t,q=!1;do{var Q=A.lane&-536870913;if(Q!==A.lane?($e&Q)===Q:(La&Q)===Q){var z=A.revertLane;if(z===0)g!==null&&(g=g.next={lane:0,revertLane:0,gesture:null,action:A.action,hasEagerState:A.hasEagerState,eagerState:A.eagerState,next:null}),Q===rl&&(q=!0);else if((La&z)===z){A=A.next,z===rl&&(q=!0);continue}else Q={lane:0,revertLane:A.revertLane,gesture:null,action:A.action,hasEagerState:A.hasEagerState,eagerState:A.eagerState,next:null},g===null?(u=g=Q,r=i):g=g.next=Q,Re.lanes|=z,un|=z;Q=A.action,Hn&&a(i,Q),i=A.hasEagerState?A.eagerState:a(i,Q)}else z={lane:Q,revertLane:A.revertLane,gesture:A.gesture,action:A.action,hasEagerState:A.hasEagerState,eagerState:A.eagerState,next:null},g===null?(u=g=z,r=i):g=g.next=z,Re.lanes|=Q,un|=Q;A=A.next}while(A!==null&&A!==t);if(g===null?r=i:g.next=u,!It(i,e.memoizedState)&&(Tt=!0,q&&(a=ol,a!==null)))throw a;e.memoizedState=i,e.baseState=r,e.baseQueue=g,n.lastRenderedState=i}return l===null&&(n.lanes=0),[e.memoizedState,n.dispatch]}function fr(e){var t=St(),a=t.queue;if(a===null)throw Error(d(311));a.lastRenderedReducer=e;var n=a.dispatch,l=a.pending,i=t.memoizedState;if(l!==null){a.pending=null;var r=l=l.next;do i=e(i,r.action),r=r.next;while(r!==l);It(i,t.memoizedState)||(Tt=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),a.lastRenderedState=i}return[i,n]}function id(e,t,a){var n=Re,l=St(),i=Fe;if(i){if(a===void 0)throw Error(d(407));a=a()}else a=t();var r=!It((lt||l).memoizedState,a);if(r&&(l.memoizedState=a,Tt=!0),l=l.queue,hr(rd.bind(null,n,l,e),[e]),l.getSnapshot!==t||r||jt!==null&&jt.memoizedState.tag&1){if(n.flags|=2048,hl(9,{destroy:void 0},cd.bind(null,n,l,a,t),null),ct===null)throw Error(d(349));i||(La&127)!==0||sd(n,t,a)}return a}function sd(e,t,a){e.flags|=16384,e={getSnapshot:t,value:a},t=Re.updateQueue,t===null?(t=ps(),Re.updateQueue=t,t.stores=[e]):(a=t.stores,a===null?t.stores=[e]:a.push(e))}function cd(e,t,a,n){t.value=a,t.getSnapshot=n,od(t)&&ud(e)}function rd(e,t,a){return a(function(){od(t)&&ud(e)})}function od(e){var t=e.getSnapshot;e=e.value;try{var a=t();return!It(e,a)}catch{return!0}}function ud(e){var t=Cn(e,2);t!==null&&Kt(t,e,2)}function pr(e){var t=$t();if(typeof e=="function"){var a=e;if(e=a(),Hn){fe(!0);try{a()}finally{fe(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ga,lastRenderedState:e},t}function dd(e,t,a,n){return e.baseState=a,dr(e,lt,typeof n=="function"?n:Ga)}function jh(e,t,a,n,l){if(bs(e))throw Error(d(485));if(e=t.action,e!==null){var i={payload:l,action:e,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(r){i.listeners.push(r)}};E.T!==null?a(!0):i.isTransition=!1,n(i),a=t.pending,a===null?(i.next=t.pending=i,fd(t,i)):(i.next=a.next,t.pending=a.next=i)}}function fd(e,t){var a=t.action,n=t.payload,l=e.state;if(t.isTransition){var i=E.T,r={};E.T=r;try{var u=a(l,n),g=E.S;g!==null&&g(r,u),pd(e,t,u)}catch(A){mr(e,t,A)}finally{i!==null&&r.types!==null&&(i.types=r.types),E.T=i}}else try{i=a(l,n),pd(e,t,i)}catch(A){mr(e,t,A)}}function pd(e,t,a){a!==null&&typeof a=="object"&&typeof a.then=="function"?a.then(function(n){md(e,t,n)},function(n){return mr(e,t,n)}):md(e,t,a)}function md(e,t,a){t.status="fulfilled",t.value=a,hd(t),e.state=a,t=e.pending,t!==null&&(a=t.next,a===t?e.pending=null:(a=a.next,t.next=a,fd(e,a)))}function mr(e,t,a){var n=e.pending;if(e.pending=null,n!==null){n=n.next;do t.status="rejected",t.reason=a,hd(t),t=t.next;while(t!==n)}e.action=null}function hd(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function yd(e,t){return t}function gd(e,t){if(Fe){var a=ct.formState;if(a!==null){e:{var n=Re;if(Fe){if(ot){t:{for(var l=ot,i=ga;l.nodeType!==8;){if(!i){l=null;break t}if(l=va(l.nextSibling),l===null){l=null;break t}}i=l.data,l=i==="F!"||i==="F"?l:null}if(l){ot=va(l.nextSibling),n=l.data==="F!";break e}}en(n)}n=!1}n&&(t=a[0])}}return a=$t(),a.memoizedState=a.baseState=t,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:yd,lastRenderedState:t},a.queue=n,a=Hd.bind(null,Re,n),n.dispatch=a,n=pr(!1),i=Sr.bind(null,Re,!1,n.queue),n=$t(),l={state:t,dispatch:null,action:e,pending:null},n.queue=l,a=jh.bind(null,Re,l,i,a),l.dispatch=a,n.memoizedState=e,[t,a,!1]}function bd(e){var t=St();return vd(t,lt,e)}function vd(e,t,a){if(t=dr(e,t,yd)[0],e=hs(Ga)[0],typeof t=="object"&&t!==null&&typeof t.then=="function")try{var n=li(t)}catch(r){throw r===ul?is:r}else n=t;t=St();var l=t.queue,i=l.dispatch;return a!==t.memoizedState&&(Re.flags|=2048,hl(9,{destroy:void 0},Th.bind(null,l,a),null)),[n,i,e]}function Th(e,t){e.action=t}function Sd(e){var t=St(),a=lt;if(a!==null)return vd(t,a,e);St(),t=t.memoizedState,a=St();var n=a.queue.dispatch;return a.memoizedState=e,[t,n,!1]}function hl(e,t,a,n){return e={tag:e,create:a,deps:n,inst:t,next:null},t=Re.updateQueue,t===null&&(t=ps(),Re.updateQueue=t),a=t.lastEffect,a===null?t.lastEffect=e.next=e:(n=a.next,a.next=e,e.next=n,t.lastEffect=e),e}function wd(){return St().memoizedState}function ys(e,t,a,n){var l=$t();Re.flags|=e,l.memoizedState=hl(1|t,{destroy:void 0},a,n===void 0?null:n)}function gs(e,t,a,n){var l=St();n=n===void 0?null:n;var i=l.memoizedState.inst;lt!==null&&n!==null&&ir(n,lt.memoizedState.deps)?l.memoizedState=hl(t,i,a,n):(Re.flags|=e,l.memoizedState=hl(1|t,i,a,n))}function xd(e,t){ys(8390656,8,e,t)}function hr(e,t){gs(2048,8,e,t)}function Ch(e){Re.flags|=4;var t=Re.updateQueue;if(t===null)t=ps(),Re.updateQueue=t,t.events=[e];else{var a=t.events;a===null?t.events=[e]:a.push(e)}}function _d(e){var t=St().memoizedState;return Ch({ref:t,nextImpl:e}),function(){if((Je&2)!==0)throw Error(d(440));return t.impl.apply(void 0,arguments)}}function kd(e,t){return gs(4,2,e,t)}function jd(e,t){return gs(4,4,e,t)}function Td(e,t){if(typeof t=="function"){e=e();var a=t(e);return function(){typeof a=="function"?a():t(null)}}if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function Cd(e,t,a){a=a!=null?a.concat([e]):null,gs(4,4,Td.bind(null,t,e),a)}function yr(){}function Ed(e,t){var a=St();t=t===void 0?null:t;var n=a.memoizedState;return t!==null&&ir(t,n[1])?n[0]:(a.memoizedState=[e,t],e)}function Dd(e,t){var a=St();t=t===void 0?null:t;var n=a.memoizedState;if(t!==null&&ir(t,n[1]))return n[0];if(n=e(),Hn){fe(!0);try{e()}finally{fe(!1)}}return a.memoizedState=[n,t],n}function gr(e,t,a){return a===void 0||(La&1073741824)!==0&&($e&261930)===0?e.memoizedState=t:(e.memoizedState=a,e=Af(),Re.lanes|=e,un|=e,a)}function Nd(e,t,a,n){return It(a,t)?a:fl.current!==null?(e=gr(e,a,n),It(e,t)||(Tt=!0),e):(La&42)===0||(La&1073741824)!==0&&($e&261930)===0?(Tt=!0,e.memoizedState=a):(e=Af(),Re.lanes|=e,un|=e,t)}function Ad(e,t,a,n,l){var i=G.p;G.p=i!==0&&8>i?i:8;var r=E.T,u={};E.T=u,Sr(e,!1,t,a);try{var g=l(),A=E.S;if(A!==null&&A(u,g),g!==null&&typeof g=="object"&&typeof g.then=="function"){var q=xh(g,n);ii(e,t,q,la(e))}else ii(e,t,n,la(e))}catch(Q){ii(e,t,{then:function(){},status:"rejected",reason:Q},la())}finally{G.p=i,r!==null&&u.types!==null&&(r.types=u.types),E.T=r}}function Eh(){}function br(e,t,a,n){if(e.tag!==5)throw Error(d(476));var l=Od(e).queue;Ad(e,l,t,U,a===null?Eh:function(){return zd(e),a(n)})}function Od(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:U,baseState:U,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ga,lastRenderedState:U},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ga,lastRenderedState:a},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function zd(e){var t=Od(e);t.next===null&&(t=e.alternate.memoizedState),ii(e,t.next.queue,{},la())}function vr(){return Ut(xi)}function Md(){return St().memoizedState}function Rd(){return St().memoizedState}function Dh(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var a=la();e=nn(a);var n=ln(t,e,a);n!==null&&(Kt(n,t,a),ei(n,t,a)),t={cache:Zc()},e.payload=t;return}t=t.return}}function Nh(e,t,a){var n=la();a={lane:n,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},bs(e)?Ud(t,a):(a=Uc(e,t,a,n),a!==null&&(Kt(a,e,n),Bd(a,t,n)))}function Hd(e,t,a){var n=la();ii(e,t,a,n)}function ii(e,t,a,n){var l={lane:n,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(bs(e))Ud(t,l);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var r=t.lastRenderedState,u=i(r,a);if(l.hasEagerState=!0,l.eagerState=u,It(u,r))return Ii(e,t,l,0),ct===null&&Wi(),!1}catch{}finally{}if(a=Uc(e,t,l,n),a!==null)return Kt(a,e,n),Bd(a,t,n),!0}return!1}function Sr(e,t,a,n){if(n={lane:2,revertLane:Ir(),gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},bs(e)){if(t)throw Error(d(479))}else t=Uc(e,a,n,2),t!==null&&Kt(t,e,2)}function bs(e){var t=e.alternate;return e===Re||t!==null&&t===Re}function Ud(e,t){pl=ds=!0;var a=e.pending;a===null?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function Bd(e,t,a){if((a&4194048)!==0){var n=t.lanes;n&=e.pendingLanes,a|=n,t.lanes=a,B(e,a)}}var si={readContext:Ut,use:ms,useCallback:ht,useContext:ht,useEffect:ht,useImperativeHandle:ht,useLayoutEffect:ht,useInsertionEffect:ht,useMemo:ht,useReducer:ht,useRef:ht,useState:ht,useDebugValue:ht,useDeferredValue:ht,useTransition:ht,useSyncExternalStore:ht,useId:ht,useHostTransitionStatus:ht,useFormState:ht,useActionState:ht,useOptimistic:ht,useMemoCache:ht,useCacheRefresh:ht};si.useEffectEvent=ht;var qd={readContext:Ut,use:ms,useCallback:function(e,t){return $t().memoizedState=[e,t===void 0?null:t],e},useContext:Ut,useEffect:xd,useImperativeHandle:function(e,t,a){a=a!=null?a.concat([e]):null,ys(4194308,4,Td.bind(null,t,e),a)},useLayoutEffect:function(e,t){return ys(4194308,4,e,t)},useInsertionEffect:function(e,t){ys(4,2,e,t)},useMemo:function(e,t){var a=$t();t=t===void 0?null:t;var n=e();if(Hn){fe(!0);try{e()}finally{fe(!1)}}return a.memoizedState=[n,t],n},useReducer:function(e,t,a){var n=$t();if(a!==void 0){var l=a(t);if(Hn){fe(!0);try{a(t)}finally{fe(!1)}}}else l=t;return n.memoizedState=n.baseState=l,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:l},n.queue=e,e=e.dispatch=Nh.bind(null,Re,e),[n.memoizedState,e]},useRef:function(e){var t=$t();return e={current:e},t.memoizedState=e},useState:function(e){e=pr(e);var t=e.queue,a=Hd.bind(null,Re,t);return t.dispatch=a,[e.memoizedState,a]},useDebugValue:yr,useDeferredValue:function(e,t){var a=$t();return gr(a,e,t)},useTransition:function(){var e=pr(!1);return e=Ad.bind(null,Re,e.queue,!0,!1),$t().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,a){var n=Re,l=$t();if(Fe){if(a===void 0)throw Error(d(407));a=a()}else{if(a=t(),ct===null)throw Error(d(349));($e&127)!==0||sd(n,t,a)}l.memoizedState=a;var i={value:a,getSnapshot:t};return l.queue=i,xd(rd.bind(null,n,i,e),[e]),n.flags|=2048,hl(9,{destroy:void 0},cd.bind(null,n,i,a,t),null),a},useId:function(){var e=$t(),t=ct.identifierPrefix;if(Fe){var a=Da,n=Ea;a=(n&~(1<<32-he(n)-1)).toString(32)+a,t="_"+t+"R_"+a,a=fs++,0<a&&(t+="H"+a.toString(32)),t+="_"}else a=_h++,t="_"+t+"r_"+a.toString(32)+"_";return e.memoizedState=t},useHostTransitionStatus:vr,useFormState:gd,useActionState:gd,useOptimistic:function(e){var t=$t();t.memoizedState=t.baseState=e;var a={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=a,t=Sr.bind(null,Re,!0,a),a.dispatch=t,[e,t]},useMemoCache:ur,useCacheRefresh:function(){return $t().memoizedState=Dh.bind(null,Re)},useEffectEvent:function(e){var t=$t(),a={impl:e};return t.memoizedState=a,function(){if((Je&2)!==0)throw Error(d(440));return a.impl.apply(void 0,arguments)}}},wr={readContext:Ut,use:ms,useCallback:Ed,useContext:Ut,useEffect:hr,useImperativeHandle:Cd,useInsertionEffect:kd,useLayoutEffect:jd,useMemo:Dd,useReducer:hs,useRef:wd,useState:function(){return hs(Ga)},useDebugValue:yr,useDeferredValue:function(e,t){var a=St();return Nd(a,lt.memoizedState,e,t)},useTransition:function(){var e=hs(Ga)[0],t=St().memoizedState;return[typeof e=="boolean"?e:li(e),t]},useSyncExternalStore:id,useId:Md,useHostTransitionStatus:vr,useFormState:bd,useActionState:bd,useOptimistic:function(e,t){var a=St();return dd(a,lt,e,t)},useMemoCache:ur,useCacheRefresh:Rd};wr.useEffectEvent=_d;var Ld={readContext:Ut,use:ms,useCallback:Ed,useContext:Ut,useEffect:hr,useImperativeHandle:Cd,useInsertionEffect:kd,useLayoutEffect:jd,useMemo:Dd,useReducer:fr,useRef:wd,useState:function(){return fr(Ga)},useDebugValue:yr,useDeferredValue:function(e,t){var a=St();return lt===null?gr(a,e,t):Nd(a,lt.memoizedState,e,t)},useTransition:function(){var e=fr(Ga)[0],t=St().memoizedState;return[typeof e=="boolean"?e:li(e),t]},useSyncExternalStore:id,useId:Md,useHostTransitionStatus:vr,useFormState:Sd,useActionState:Sd,useOptimistic:function(e,t){var a=St();return lt!==null?dd(a,lt,e,t):(a.baseState=e,[e,a.queue.dispatch])},useMemoCache:ur,useCacheRefresh:Rd};Ld.useEffectEvent=_d;function xr(e,t,a,n){t=e.memoizedState,a=a(n,t),a=a==null?t:j({},t,a),e.memoizedState=a,e.lanes===0&&(e.updateQueue.baseState=a)}var _r={enqueueSetState:function(e,t,a){e=e._reactInternals;var n=la(),l=nn(n);l.payload=t,a!=null&&(l.callback=a),t=ln(e,l,n),t!==null&&(Kt(t,e,n),ei(t,e,n))},enqueueReplaceState:function(e,t,a){e=e._reactInternals;var n=la(),l=nn(n);l.tag=1,l.payload=t,a!=null&&(l.callback=a),t=ln(e,l,n),t!==null&&(Kt(t,e,n),ei(t,e,n))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var a=la(),n=nn(a);n.tag=2,t!=null&&(n.callback=t),t=ln(e,n,a),t!==null&&(Kt(t,e,a),ei(t,e,a))}};function Gd(e,t,a,n,l,i,r){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(n,i,r):t.prototype&&t.prototype.isPureReactComponent?!Fl(a,n)||!Fl(l,i):!0}function $d(e,t,a,n){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(a,n),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(a,n),t.state!==e&&_r.enqueueReplaceState(t,t.state,null)}function Un(e,t){var a=t;if("ref"in t){a={};for(var n in t)n!=="ref"&&(a[n]=t[n])}if(e=e.defaultProps){a===t&&(a=j({},a));for(var l in e)a[l]===void 0&&(a[l]=e[l])}return a}function Yd(e){Ji(e)}function Qd(e){console.error(e)}function Xd(e){Ji(e)}function vs(e,t){try{var a=e.onUncaughtError;a(t.value,{componentStack:t.stack})}catch(n){setTimeout(function(){throw n})}}function Fd(e,t,a){try{var n=e.onCaughtError;n(a.value,{componentStack:a.stack,errorBoundary:t.tag===1?t.stateNode:null})}catch(l){setTimeout(function(){throw l})}}function kr(e,t,a){return a=nn(a),a.tag=3,a.payload={element:null},a.callback=function(){vs(e,t)},a}function Vd(e){return e=nn(e),e.tag=3,e}function Zd(e,t,a,n){var l=a.type.getDerivedStateFromError;if(typeof l=="function"){var i=n.value;e.payload=function(){return l(i)},e.callback=function(){Fd(t,a,n)}}var r=a.stateNode;r!==null&&typeof r.componentDidCatch=="function"&&(e.callback=function(){Fd(t,a,n),typeof l!="function"&&(dn===null?dn=new Set([this]):dn.add(this));var u=n.stack;this.componentDidCatch(n.value,{componentStack:u!==null?u:""})})}function Ah(e,t,a,n,l){if(a.flags|=32768,n!==null&&typeof n=="object"&&typeof n.then=="function"){if(t=a.alternate,t!==null&&cl(t,a,l,!0),a=ea.current,a!==null){switch(a.tag){case 31:case 13:return ba===null?Os():a.alternate===null&&yt===0&&(yt=3),a.flags&=-257,a.flags|=65536,a.lanes=l,n===ss?a.flags|=16384:(t=a.updateQueue,t===null?a.updateQueue=new Set([n]):t.add(n),Kr(e,n,l)),!1;case 22:return a.flags|=65536,n===ss?a.flags|=16384:(t=a.updateQueue,t===null?(t={transitions:null,markerInstances:null,retryQueue:new Set([n])},a.updateQueue=t):(a=t.retryQueue,a===null?t.retryQueue=new Set([n]):a.add(n)),Kr(e,n,l)),!1}throw Error(d(435,a.tag))}return Kr(e,n,l),Os(),!1}if(Fe)return t=ea.current,t!==null?((t.flags&65536)===0&&(t.flags|=256),t.flags|=65536,t.lanes=l,n!==Yc&&(e=Error(d(422),{cause:n}),Kl(ma(e,a)))):(n!==Yc&&(t=Error(d(423),{cause:n}),Kl(ma(t,a))),e=e.current.alternate,e.flags|=65536,l&=-l,e.lanes|=l,n=ma(n,a),l=kr(e.stateNode,n,l),er(e,l),yt!==4&&(yt=2)),!1;var i=Error(d(520),{cause:n});if(i=ma(i,a),mi===null?mi=[i]:mi.push(i),yt!==4&&(yt=2),t===null)return!0;n=ma(n,a),a=t;do{switch(a.tag){case 3:return a.flags|=65536,e=l&-l,a.lanes|=e,e=kr(a.stateNode,n,e),er(a,e),!1;case 1:if(t=a.type,i=a.stateNode,(a.flags&128)===0&&(typeof t.getDerivedStateFromError=="function"||i!==null&&typeof i.componentDidCatch=="function"&&(dn===null||!dn.has(i))))return a.flags|=65536,l&=-l,a.lanes|=l,l=Vd(l),Zd(l,e,a,n),er(a,l),!1}a=a.return}while(a!==null);return!1}var jr=Error(d(461)),Tt=!1;function Bt(e,t,a,n){t.child=e===null?Iu(t,null,a,n):Rn(t,e.child,a,n)}function Kd(e,t,a,n,l){a=a.render;var i=t.ref;if("ref"in n){var r={};for(var u in n)u!=="ref"&&(r[u]=n[u])}else r=n;return An(t),n=sr(e,t,a,r,i,l),u=cr(),e!==null&&!Tt?(rr(e,t,l),$a(e,t,l)):(Fe&&u&&Gc(t),t.flags|=1,Bt(e,t,n,l),t.child)}function Jd(e,t,a,n,l){if(e===null){var i=a.type;return typeof i=="function"&&!Bc(i)&&i.defaultProps===void 0&&a.compare===null?(t.tag=15,t.type=i,Wd(e,t,i,n,l)):(e=es(a.type,null,n,t,t.mode,l),e.ref=t.ref,e.return=t,t.child=e)}if(i=e.child,!zr(e,l)){var r=i.memoizedProps;if(a=a.compare,a=a!==null?a:Fl,a(r,n)&&e.ref===t.ref)return $a(e,t,l)}return t.flags|=1,e=Ha(i,n),e.ref=t.ref,e.return=t,t.child=e}function Wd(e,t,a,n,l){if(e!==null){var i=e.memoizedProps;if(Fl(i,n)&&e.ref===t.ref)if(Tt=!1,t.pendingProps=n=i,zr(e,l))(e.flags&131072)!==0&&(Tt=!0);else return t.lanes=e.lanes,$a(e,t,l)}return Tr(e,t,a,n,l)}function Id(e,t,a,n){var l=n.children,i=e!==null?e.memoizedState:null;if(e===null&&t.stateNode===null&&(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),n.mode==="hidden"){if((t.flags&128)!==0){if(i=i!==null?i.baseLanes|a:a,e!==null){for(n=t.child=e.child,l=0;n!==null;)l=l|n.lanes|n.childLanes,n=n.sibling;n=l&~i}else n=0,t.child=null;return Pd(e,t,i,a,n)}if((a&536870912)!==0)t.memoizedState={baseLanes:0,cachePool:null},e!==null&&ls(t,i!==null?i.cachePool:null),i!==null?td(t,i):ar(),ad(t);else return n=t.lanes=536870912,Pd(e,t,i!==null?i.baseLanes|a:a,a,n)}else i!==null?(ls(t,i.cachePool),td(t,i),cn(),t.memoizedState=null):(e!==null&&ls(t,null),ar(),cn());return Bt(e,t,l,a),t.child}function ci(e,t){return e!==null&&e.tag===22||t.stateNode!==null||(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),t.sibling}function Pd(e,t,a,n,l){var i=Jc();return i=i===null?null:{parent:kt._currentValue,pool:i},t.memoizedState={baseLanes:a,cachePool:i},e!==null&&ls(t,null),ar(),ad(t),e!==null&&cl(e,t,n,!0),t.childLanes=l,null}function Ss(e,t){return t=_s({mode:t.mode,children:t.children},e.mode),t.ref=e.ref,e.child=t,t.return=e,t}function ef(e,t,a){return Rn(t,e.child,null,a),e=Ss(t,t.pendingProps),e.flags|=2,ta(t),t.memoizedState=null,e}function Oh(e,t,a){var n=t.pendingProps,l=(t.flags&128)!==0;if(t.flags&=-129,e===null){if(Fe){if(n.mode==="hidden")return e=Ss(t,n),t.lanes=536870912,ci(null,e);if(lr(t),(e=ot)?(e=pp(e,ga),e=e!==null&&e.data==="&"?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:Ia!==null?{id:Ea,overflow:Da}:null,retryLane:536870912,hydrationErrors:null},a=Uu(e),a.return=t,t.child=a,Ht=t,ot=null)):e=null,e===null)throw en(t);return t.lanes=536870912,null}return Ss(t,n)}var i=e.memoizedState;if(i!==null){var r=i.dehydrated;if(lr(t),l)if(t.flags&256)t.flags&=-257,t=ef(e,t,a);else if(t.memoizedState!==null)t.child=e.child,t.flags|=128,t=null;else throw Error(d(558));else if(Tt||cl(e,t,a,!1),l=(a&e.childLanes)!==0,Tt||l){if(n=ct,n!==null&&(r=te(n,a),r!==0&&r!==i.retryLane))throw i.retryLane=r,Cn(e,r),Kt(n,e,r),jr;Os(),t=ef(e,t,a)}else e=i.treeContext,ot=va(r.nextSibling),Ht=t,Fe=!0,Pa=null,ga=!1,e!==null&&Lu(t,e),t=Ss(t,n),t.flags|=4096;return t}return e=Ha(e.child,{mode:n.mode,children:n.children}),e.ref=t.ref,t.child=e,e.return=t,e}function xs(e,t){var a=t.ref;if(a===null)e!==null&&e.ref!==null&&(t.flags|=4194816);else{if(typeof a!="function"&&typeof a!="object")throw Error(d(284));(e===null||e.ref!==a)&&(t.flags|=4194816)}}function Tr(e,t,a,n,l){return An(t),a=sr(e,t,a,n,void 0,l),n=cr(),e!==null&&!Tt?(rr(e,t,l),$a(e,t,l)):(Fe&&n&&Gc(t),t.flags|=1,Bt(e,t,a,l),t.child)}function tf(e,t,a,n,l,i){return An(t),t.updateQueue=null,a=ld(t,n,a,l),nd(e),n=cr(),e!==null&&!Tt?(rr(e,t,i),$a(e,t,i)):(Fe&&n&&Gc(t),t.flags|=1,Bt(e,t,a,i),t.child)}function af(e,t,a,n,l){if(An(t),t.stateNode===null){var i=nl,r=a.contextType;typeof r=="object"&&r!==null&&(i=Ut(r)),i=new a(n,i),t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,i.updater=_r,t.stateNode=i,i._reactInternals=t,i=t.stateNode,i.props=n,i.state=t.memoizedState,i.refs={},Ic(t),r=a.contextType,i.context=typeof r=="object"&&r!==null?Ut(r):nl,i.state=t.memoizedState,r=a.getDerivedStateFromProps,typeof r=="function"&&(xr(t,a,r,n),i.state=t.memoizedState),typeof a.getDerivedStateFromProps=="function"||typeof i.getSnapshotBeforeUpdate=="function"||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(r=i.state,typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount(),r!==i.state&&_r.enqueueReplaceState(i,i.state,null),ai(t,n,i,l),ti(),i.state=t.memoizedState),typeof i.componentDidMount=="function"&&(t.flags|=4194308),n=!0}else if(e===null){i=t.stateNode;var u=t.memoizedProps,g=Un(a,u);i.props=g;var A=i.context,q=a.contextType;r=nl,typeof q=="object"&&q!==null&&(r=Ut(q));var Q=a.getDerivedStateFromProps;q=typeof Q=="function"||typeof i.getSnapshotBeforeUpdate=="function",u=t.pendingProps!==u,q||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(u||A!==r)&&$d(t,i,n,r),an=!1;var z=t.memoizedState;i.state=z,ai(t,n,i,l),ti(),A=t.memoizedState,u||z!==A||an?(typeof Q=="function"&&(xr(t,a,Q,n),A=t.memoizedState),(g=an||Gd(t,a,g,n,z,A,r))?(q||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=n,t.memoizedState=A),i.props=n,i.state=A,i.context=r,n=g):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),n=!1)}else{i=t.stateNode,Pc(e,t),r=t.memoizedProps,q=Un(a,r),i.props=q,Q=t.pendingProps,z=i.context,A=a.contextType,g=nl,typeof A=="object"&&A!==null&&(g=Ut(A)),u=a.getDerivedStateFromProps,(A=typeof u=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(r!==Q||z!==g)&&$d(t,i,n,g),an=!1,z=t.memoizedState,i.state=z,ai(t,n,i,l),ti();var H=t.memoizedState;r!==Q||z!==H||an||e!==null&&e.dependencies!==null&&as(e.dependencies)?(typeof u=="function"&&(xr(t,a,u,n),H=t.memoizedState),(q=an||Gd(t,a,q,n,z,H,g)||e!==null&&e.dependencies!==null&&as(e.dependencies))?(A||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(n,H,g),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(n,H,g)),typeof i.componentDidUpdate=="function"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof i.componentDidUpdate!="function"||r===e.memoizedProps&&z===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||r===e.memoizedProps&&z===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=H),i.props=n,i.state=H,i.context=g,n=q):(typeof i.componentDidUpdate!="function"||r===e.memoizedProps&&z===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||r===e.memoizedProps&&z===e.memoizedState||(t.flags|=1024),n=!1)}return i=n,xs(e,t),n=(t.flags&128)!==0,i||n?(i=t.stateNode,a=n&&typeof a.getDerivedStateFromError!="function"?null:i.render(),t.flags|=1,e!==null&&n?(t.child=Rn(t,e.child,null,l),t.child=Rn(t,null,a,l)):Bt(e,t,a,l),t.memoizedState=i.state,e=t.child):e=$a(e,t,l),e}function nf(e,t,a,n){return Dn(),t.flags|=256,Bt(e,t,a,n),t.child}var Cr={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Er(e){return{baseLanes:e,cachePool:Fu()}}function Dr(e,t,a){return e=e!==null?e.childLanes&~a:0,t&&(e|=na),e}function lf(e,t,a){var n=t.pendingProps,l=!1,i=(t.flags&128)!==0,r;if((r=i)||(r=e!==null&&e.memoizedState===null?!1:(vt.current&2)!==0),r&&(l=!0,t.flags&=-129),r=(t.flags&32)!==0,t.flags&=-33,e===null){if(Fe){if(l?sn(t):cn(),(e=ot)?(e=pp(e,ga),e=e!==null&&e.data!=="&"?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:Ia!==null?{id:Ea,overflow:Da}:null,retryLane:536870912,hydrationErrors:null},a=Uu(e),a.return=t,t.child=a,Ht=t,ot=null)):e=null,e===null)throw en(t);return fo(e)?t.lanes=32:t.lanes=536870912,null}var u=n.children;return n=n.fallback,l?(cn(),l=t.mode,u=_s({mode:"hidden",children:u},l),n=En(n,l,a,null),u.return=t,n.return=t,u.sibling=n,t.child=u,n=t.child,n.memoizedState=Er(a),n.childLanes=Dr(e,r,a),t.memoizedState=Cr,ci(null,n)):(sn(t),Nr(t,u))}var g=e.memoizedState;if(g!==null&&(u=g.dehydrated,u!==null)){if(i)t.flags&256?(sn(t),t.flags&=-257,t=Ar(e,t,a)):t.memoizedState!==null?(cn(),t.child=e.child,t.flags|=128,t=null):(cn(),u=n.fallback,l=t.mode,n=_s({mode:"visible",children:n.children},l),u=En(u,l,a,null),u.flags|=2,n.return=t,u.return=t,n.sibling=u,t.child=n,Rn(t,e.child,null,a),n=t.child,n.memoizedState=Er(a),n.childLanes=Dr(e,r,a),t.memoizedState=Cr,t=ci(null,n));else if(sn(t),fo(u)){if(r=u.nextSibling&&u.nextSibling.dataset,r)var A=r.dgst;r=A,n=Error(d(419)),n.stack="",n.digest=r,Kl({value:n,source:null,stack:null}),t=Ar(e,t,a)}else if(Tt||cl(e,t,a,!1),r=(a&e.childLanes)!==0,Tt||r){if(r=ct,r!==null&&(n=te(r,a),n!==0&&n!==g.retryLane))throw g.retryLane=n,Cn(e,n),Kt(r,e,n),jr;uo(u)||Os(),t=Ar(e,t,a)}else uo(u)?(t.flags|=192,t.child=e.child,t=null):(e=g.treeContext,ot=va(u.nextSibling),Ht=t,Fe=!0,Pa=null,ga=!1,e!==null&&Lu(t,e),t=Nr(t,n.children),t.flags|=4096);return t}return l?(cn(),u=n.fallback,l=t.mode,g=e.child,A=g.sibling,n=Ha(g,{mode:"hidden",children:n.children}),n.subtreeFlags=g.subtreeFlags&65011712,A!==null?u=Ha(A,u):(u=En(u,l,a,null),u.flags|=2),u.return=t,n.return=t,n.sibling=u,t.child=n,ci(null,n),n=t.child,u=e.child.memoizedState,u===null?u=Er(a):(l=u.cachePool,l!==null?(g=kt._currentValue,l=l.parent!==g?{parent:g,pool:g}:l):l=Fu(),u={baseLanes:u.baseLanes|a,cachePool:l}),n.memoizedState=u,n.childLanes=Dr(e,r,a),t.memoizedState=Cr,ci(e.child,n)):(sn(t),a=e.child,e=a.sibling,a=Ha(a,{mode:"visible",children:n.children}),a.return=t,a.sibling=null,e!==null&&(r=t.deletions,r===null?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=a,t.memoizedState=null,a)}function Nr(e,t){return t=_s({mode:"visible",children:t},e.mode),t.return=e,e.child=t}function _s(e,t){return e=Pt(22,e,null,t),e.lanes=0,e}function Ar(e,t,a){return Rn(t,e.child,null,a),e=Nr(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function sf(e,t,a){e.lanes|=t;var n=e.alternate;n!==null&&(n.lanes|=t),Fc(e.return,t,a)}function Or(e,t,a,n,l,i){var r=e.memoizedState;r===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:a,tailMode:l,treeForkCount:i}:(r.isBackwards=t,r.rendering=null,r.renderingStartTime=0,r.last=n,r.tail=a,r.tailMode=l,r.treeForkCount=i)}function cf(e,t,a){var n=t.pendingProps,l=n.revealOrder,i=n.tail;n=n.children;var r=vt.current,u=(r&2)!==0;if(u?(r=r&1|2,t.flags|=128):r&=1,C(vt,r),Bt(e,t,n,a),n=Fe?Zl:0,!u&&e!==null&&(e.flags&128)!==0)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&sf(e,a,t);else if(e.tag===19)sf(e,a,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(l){case"forwards":for(a=t.child,l=null;a!==null;)e=a.alternate,e!==null&&us(e)===null&&(l=a),a=a.sibling;a=l,a===null?(l=t.child,t.child=null):(l=a.sibling,a.sibling=null),Or(t,!1,l,a,i,n);break;case"backwards":case"unstable_legacy-backwards":for(a=null,l=t.child,t.child=null;l!==null;){if(e=l.alternate,e!==null&&us(e)===null){t.child=l;break}e=l.sibling,l.sibling=a,a=l,l=e}Or(t,!0,a,null,i,n);break;case"together":Or(t,!1,null,null,void 0,n);break;default:t.memoizedState=null}return t.child}function $a(e,t,a){if(e!==null&&(t.dependencies=e.dependencies),un|=t.lanes,(a&t.childLanes)===0)if(e!==null){if(cl(e,t,a,!1),(a&t.childLanes)===0)return null}else return null;if(e!==null&&t.child!==e.child)throw Error(d(153));if(t.child!==null){for(e=t.child,a=Ha(e,e.pendingProps),t.child=a,a.return=t;e.sibling!==null;)e=e.sibling,a=a.sibling=Ha(e,e.pendingProps),a.return=t;a.sibling=null}return t.child}function zr(e,t){return(e.lanes&t)!==0?!0:(e=e.dependencies,!!(e!==null&&as(e)))}function zh(e,t,a){switch(t.tag){case 3:Qe(t,t.stateNode.containerInfo),tn(t,kt,e.memoizedState.cache),Dn();break;case 27:case 5:Gt(t);break;case 4:Qe(t,t.stateNode.containerInfo);break;case 10:tn(t,t.type,t.memoizedProps.value);break;case 31:if(t.memoizedState!==null)return t.flags|=128,lr(t),null;break;case 13:var n=t.memoizedState;if(n!==null)return n.dehydrated!==null?(sn(t),t.flags|=128,null):(a&t.child.childLanes)!==0?lf(e,t,a):(sn(t),e=$a(e,t,a),e!==null?e.sibling:null);sn(t);break;case 19:var l=(e.flags&128)!==0;if(n=(a&t.childLanes)!==0,n||(cl(e,t,a,!1),n=(a&t.childLanes)!==0),l){if(n)return cf(e,t,a);t.flags|=128}if(l=t.memoizedState,l!==null&&(l.rendering=null,l.tail=null,l.lastEffect=null),C(vt,vt.current),n)break;return null;case 22:return t.lanes=0,Id(e,t,a,t.pendingProps);case 24:tn(t,kt,e.memoizedState.cache)}return $a(e,t,a)}function rf(e,t,a){if(e!==null)if(e.memoizedProps!==t.pendingProps)Tt=!0;else{if(!zr(e,a)&&(t.flags&128)===0)return Tt=!1,zh(e,t,a);Tt=(e.flags&131072)!==0}else Tt=!1,Fe&&(t.flags&1048576)!==0&&qu(t,Zl,t.index);switch(t.lanes=0,t.tag){case 16:e:{var n=t.pendingProps;if(e=zn(t.elementType),t.type=e,typeof e=="function")Bc(e)?(n=Un(e,n),t.tag=1,t=af(null,t,e,n,a)):(t.tag=0,t=Tr(null,t,e,n,a));else{if(e!=null){var l=e.$$typeof;if(l===ne){t.tag=11,t=Kd(null,t,e,n,a);break e}else if(l===F){t.tag=14,t=Jd(null,t,e,n,a);break e}}throw t=Ae(e)||e,Error(d(306,t,""))}}return t;case 0:return Tr(e,t,t.type,t.pendingProps,a);case 1:return n=t.type,l=Un(n,t.pendingProps),af(e,t,n,l,a);case 3:e:{if(Qe(t,t.stateNode.containerInfo),e===null)throw Error(d(387));n=t.pendingProps;var i=t.memoizedState;l=i.element,Pc(e,t),ai(t,n,null,a);var r=t.memoizedState;if(n=r.cache,tn(t,kt,n),n!==i.cache&&Vc(t,[kt],a,!0),ti(),n=r.element,i.isDehydrated)if(i={element:n,isDehydrated:!1,cache:r.cache},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){t=nf(e,t,n,a);break e}else if(n!==l){l=ma(Error(d(424)),t),Kl(l),t=nf(e,t,n,a);break e}else{switch(e=t.stateNode.containerInfo,e.nodeType){case 9:e=e.body;break;default:e=e.nodeName==="HTML"?e.ownerDocument.body:e}for(ot=va(e.firstChild),Ht=t,Fe=!0,Pa=null,ga=!0,a=Iu(t,null,n,a),t.child=a;a;)a.flags=a.flags&-3|4096,a=a.sibling}else{if(Dn(),n===l){t=$a(e,t,a);break e}Bt(e,t,n,a)}t=t.child}return t;case 26:return xs(e,t),e===null?(a=vp(t.type,null,t.pendingProps,null))?t.memoizedState=a:Fe||(a=t.type,e=t.pendingProps,n=qs(ye.current).createElement(a),n[nt]=t,n[Ie]=e,qt(n,a,e),Ot(n),t.stateNode=n):t.memoizedState=vp(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return Gt(t),e===null&&Fe&&(n=t.stateNode=yp(t.type,t.pendingProps,ye.current),Ht=t,ga=!0,l=ot,hn(t.type)?(po=l,ot=va(n.firstChild)):ot=l),Bt(e,t,t.pendingProps.children,a),xs(e,t),e===null&&(t.flags|=4194304),t.child;case 5:return e===null&&Fe&&((l=n=ot)&&(n=oy(n,t.type,t.pendingProps,ga),n!==null?(t.stateNode=n,Ht=t,ot=va(n.firstChild),ga=!1,l=!0):l=!1),l||en(t)),Gt(t),l=t.type,i=t.pendingProps,r=e!==null?e.memoizedProps:null,n=i.children,co(l,i)?n=null:r!==null&&co(l,r)&&(t.flags|=32),t.memoizedState!==null&&(l=sr(e,t,kh,null,null,a),xi._currentValue=l),xs(e,t),Bt(e,t,n,a),t.child;case 6:return e===null&&Fe&&((e=a=ot)&&(a=uy(a,t.pendingProps,ga),a!==null?(t.stateNode=a,Ht=t,ot=null,e=!0):e=!1),e||en(t)),null;case 13:return lf(e,t,a);case 4:return Qe(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=Rn(t,null,n,a):Bt(e,t,n,a),t.child;case 11:return Kd(e,t,t.type,t.pendingProps,a);case 7:return Bt(e,t,t.pendingProps,a),t.child;case 8:return Bt(e,t,t.pendingProps.children,a),t.child;case 12:return Bt(e,t,t.pendingProps.children,a),t.child;case 10:return n=t.pendingProps,tn(t,t.type,n.value),Bt(e,t,n.children,a),t.child;case 9:return l=t.type._context,n=t.pendingProps.children,An(t),l=Ut(l),n=n(l),t.flags|=1,Bt(e,t,n,a),t.child;case 14:return Jd(e,t,t.type,t.pendingProps,a);case 15:return Wd(e,t,t.type,t.pendingProps,a);case 19:return cf(e,t,a);case 31:return Oh(e,t,a);case 22:return Id(e,t,a,t.pendingProps);case 24:return An(t),n=Ut(kt),e===null?(l=Jc(),l===null&&(l=ct,i=Zc(),l.pooledCache=i,i.refCount++,i!==null&&(l.pooledCacheLanes|=a),l=i),t.memoizedState={parent:n,cache:l},Ic(t),tn(t,kt,l)):((e.lanes&a)!==0&&(Pc(e,t),ai(t,null,null,a),ti()),l=e.memoizedState,i=t.memoizedState,l.parent!==n?(l={parent:n,cache:n},t.memoizedState=l,t.lanes===0&&(t.memoizedState=t.updateQueue.baseState=l),tn(t,kt,n)):(n=i.cache,tn(t,kt,n),n!==l.cache&&Vc(t,[kt],a,!0))),Bt(e,t,t.pendingProps.children,a),t.child;case 29:throw t.pendingProps}throw Error(d(156,t.tag))}function Ya(e){e.flags|=4}function Mr(e,t,a,n,l){if((t=(e.mode&32)!==0)&&(t=!1),t){if(e.flags|=16777216,(l&335544128)===l)if(e.stateNode.complete)e.flags|=8192;else if(Rf())e.flags|=8192;else throw Mn=ss,Wc}else e.flags&=-16777217}function of(e,t){if(t.type!=="stylesheet"||(t.state.loading&4)!==0)e.flags&=-16777217;else if(e.flags|=16777216,!kp(t))if(Rf())e.flags|=8192;else throw Mn=ss,Wc}function ks(e,t){t!==null&&(e.flags|=4),e.flags&16384&&(t=e.tag!==22?qi():536870912,e.lanes|=t,vl|=t)}function ri(e,t){if(!Fe)switch(e.tailMode){case"hidden":t=e.tail;for(var a=null;t!==null;)t.alternate!==null&&(a=t),t=t.sibling;a===null?e.tail=null:a.sibling=null;break;case"collapsed":a=e.tail;for(var n=null;a!==null;)a.alternate!==null&&(n=a),a=a.sibling;n===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:n.sibling=null}}function ut(e){var t=e.alternate!==null&&e.alternate.child===e.child,a=0,n=0;if(t)for(var l=e.child;l!==null;)a|=l.lanes|l.childLanes,n|=l.subtreeFlags&65011712,n|=l.flags&65011712,l.return=e,l=l.sibling;else for(l=e.child;l!==null;)a|=l.lanes|l.childLanes,n|=l.subtreeFlags,n|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=n,e.childLanes=a,t}function Mh(e,t,a){var n=t.pendingProps;switch($c(t),t.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return ut(t),null;case 1:return ut(t),null;case 3:return a=t.stateNode,n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),qa(kt),Be(),a.pendingContext&&(a.context=a.pendingContext,a.pendingContext=null),(e===null||e.child===null)&&(sl(t)?Ya(t):e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,Qc())),ut(t),null;case 26:var l=t.type,i=t.memoizedState;return e===null?(Ya(t),i!==null?(ut(t),of(t,i)):(ut(t),Mr(t,l,null,n,a))):i?i!==e.memoizedState?(Ya(t),ut(t),of(t,i)):(ut(t),t.flags&=-16777217):(e=e.memoizedProps,e!==n&&Ya(t),ut(t),Mr(t,l,e,n,a)),null;case 27:if(rt(t),a=ye.current,l=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==n&&Ya(t);else{if(!n){if(t.stateNode===null)throw Error(d(166));return ut(t),null}e=L.current,sl(t)?Gu(t):(e=yp(l,n,a),t.stateNode=e,Ya(t))}return ut(t),null;case 5:if(rt(t),l=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==n&&Ya(t);else{if(!n){if(t.stateNode===null)throw Error(d(166));return ut(t),null}if(i=L.current,sl(t))Gu(t);else{var r=qs(ye.current);switch(i){case 1:i=r.createElementNS("http://www.w3.org/2000/svg",l);break;case 2:i=r.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;default:switch(l){case"svg":i=r.createElementNS("http://www.w3.org/2000/svg",l);break;case"math":i=r.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;case"script":i=r.createElement("div"),i.innerHTML="<script><\/script>",i=i.removeChild(i.firstChild);break;case"select":i=typeof n.is=="string"?r.createElement("select",{is:n.is}):r.createElement("select"),n.multiple?i.multiple=!0:n.size&&(i.size=n.size);break;default:i=typeof n.is=="string"?r.createElement(l,{is:n.is}):r.createElement(l)}}i[nt]=t,i[Ie]=n;e:for(r=t.child;r!==null;){if(r.tag===5||r.tag===6)i.appendChild(r.stateNode);else if(r.tag!==4&&r.tag!==27&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break e;for(;r.sibling===null;){if(r.return===null||r.return===t)break e;r=r.return}r.sibling.return=r.return,r=r.sibling}t.stateNode=i;e:switch(qt(i,l,n),l){case"button":case"input":case"select":case"textarea":n=!!n.autoFocus;break e;case"img":n=!0;break e;default:n=!1}n&&Ya(t)}}return ut(t),Mr(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,a),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==n&&Ya(t);else{if(typeof n!="string"&&t.stateNode===null)throw Error(d(166));if(e=ye.current,sl(t)){if(e=t.stateNode,a=t.memoizedProps,n=null,l=Ht,l!==null)switch(l.tag){case 27:case 5:n=l.memoizedProps}e[nt]=t,e=!!(e.nodeValue===a||n!==null&&n.suppressHydrationWarning===!0||ip(e.nodeValue,a)),e||en(t,!0)}else e=qs(e).createTextNode(n),e[nt]=t,t.stateNode=e}return ut(t),null;case 31:if(a=t.memoizedState,e===null||e.memoizedState!==null){if(n=sl(t),a!==null){if(e===null){if(!n)throw Error(d(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(d(557));e[nt]=t}else Dn(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;ut(t),e=!1}else a=Qc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),e=!0;if(!e)return t.flags&256?(ta(t),t):(ta(t),null);if((t.flags&128)!==0)throw Error(d(558))}return ut(t),null;case 13:if(n=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(l=sl(t),n!==null&&n.dehydrated!==null){if(e===null){if(!l)throw Error(d(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(d(317));l[nt]=t}else Dn(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;ut(t),l=!1}else l=Qc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),l=!0;if(!l)return t.flags&256?(ta(t),t):(ta(t),null)}return ta(t),(t.flags&128)!==0?(t.lanes=a,t):(a=n!==null,e=e!==null&&e.memoizedState!==null,a&&(n=t.child,l=null,n.alternate!==null&&n.alternate.memoizedState!==null&&n.alternate.memoizedState.cachePool!==null&&(l=n.alternate.memoizedState.cachePool.pool),i=null,n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(i=n.memoizedState.cachePool.pool),i!==l&&(n.flags|=2048)),a!==e&&a&&(t.child.flags|=8192),ks(t,t.updateQueue),ut(t),null);case 4:return Be(),e===null&&ao(t.stateNode.containerInfo),ut(t),null;case 10:return qa(t.type),ut(t),null;case 19:if(v(vt),n=t.memoizedState,n===null)return ut(t),null;if(l=(t.flags&128)!==0,i=n.rendering,i===null)if(l)ri(n,!1);else{if(yt!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(i=us(e),i!==null){for(t.flags|=128,ri(n,!1),e=i.updateQueue,t.updateQueue=e,ks(t,e),t.subtreeFlags=0,e=a,a=t.child;a!==null;)Hu(a,e),a=a.sibling;return C(vt,vt.current&1|2),Fe&&Ua(t,n.treeForkCount),t.child}e=e.sibling}n.tail!==null&&gt()>Ds&&(t.flags|=128,l=!0,ri(n,!1),t.lanes=4194304)}else{if(!l)if(e=us(i),e!==null){if(t.flags|=128,l=!0,e=e.updateQueue,t.updateQueue=e,ks(t,e),ri(n,!0),n.tail===null&&n.tailMode==="hidden"&&!i.alternate&&!Fe)return ut(t),null}else 2*gt()-n.renderingStartTime>Ds&&a!==536870912&&(t.flags|=128,l=!0,ri(n,!1),t.lanes=4194304);n.isBackwards?(i.sibling=t.child,t.child=i):(e=n.last,e!==null?e.sibling=i:t.child=i,n.last=i)}return n.tail!==null?(e=n.tail,n.rendering=e,n.tail=e.sibling,n.renderingStartTime=gt(),e.sibling=null,a=vt.current,C(vt,l?a&1|2:a&1),Fe&&Ua(t,n.treeForkCount),e):(ut(t),null);case 22:case 23:return ta(t),nr(),n=t.memoizedState!==null,e!==null?e.memoizedState!==null!==n&&(t.flags|=8192):n&&(t.flags|=8192),n?(a&536870912)!==0&&(t.flags&128)===0&&(ut(t),t.subtreeFlags&6&&(t.flags|=8192)):ut(t),a=t.updateQueue,a!==null&&ks(t,a.retryQueue),a=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),n=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(n=t.memoizedState.cachePool.pool),n!==a&&(t.flags|=2048),e!==null&&v(On),null;case 24:return a=null,e!==null&&(a=e.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),qa(kt),ut(t),null;case 25:return null;case 30:return null}throw Error(d(156,t.tag))}function Rh(e,t){switch($c(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return qa(kt),Be(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return rt(t),null;case 31:if(t.memoizedState!==null){if(ta(t),t.alternate===null)throw Error(d(340));Dn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(ta(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(d(340));Dn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return v(vt),null;case 4:return Be(),null;case 10:return qa(t.type),null;case 22:case 23:return ta(t),nr(),e!==null&&v(On),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return qa(kt),null;case 25:return null;default:return null}}function uf(e,t){switch($c(t),t.tag){case 3:qa(kt),Be();break;case 26:case 27:case 5:rt(t);break;case 4:Be();break;case 31:t.memoizedState!==null&&ta(t);break;case 13:ta(t);break;case 19:v(vt);break;case 10:qa(t.type);break;case 22:case 23:ta(t),nr(),e!==null&&v(On);break;case 24:qa(kt)}}function oi(e,t){try{var a=t.updateQueue,n=a!==null?a.lastEffect:null;if(n!==null){var l=n.next;a=l;do{if((a.tag&e)===e){n=void 0;var i=a.create,r=a.inst;n=i(),r.destroy=n}a=a.next}while(a!==l)}}catch(u){at(t,t.return,u)}}function rn(e,t,a){try{var n=t.updateQueue,l=n!==null?n.lastEffect:null;if(l!==null){var i=l.next;n=i;do{if((n.tag&e)===e){var r=n.inst,u=r.destroy;if(u!==void 0){r.destroy=void 0,l=t;var g=a,A=u;try{A()}catch(q){at(l,g,q)}}}n=n.next}while(n!==i)}}catch(q){at(t,t.return,q)}}function df(e){var t=e.updateQueue;if(t!==null){var a=e.stateNode;try{ed(t,a)}catch(n){at(e,e.return,n)}}}function ff(e,t,a){a.props=Un(e.type,e.memoizedProps),a.state=e.memoizedState;try{a.componentWillUnmount()}catch(n){at(e,t,n)}}function ui(e,t){try{var a=e.ref;if(a!==null){switch(e.tag){case 26:case 27:case 5:var n=e.stateNode;break;case 30:n=e.stateNode;break;default:n=e.stateNode}typeof a=="function"?e.refCleanup=a(n):a.current=n}}catch(l){at(e,t,l)}}function Na(e,t){var a=e.ref,n=e.refCleanup;if(a!==null)if(typeof n=="function")try{n()}catch(l){at(e,t,l)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(l){at(e,t,l)}else a.current=null}function pf(e){var t=e.type,a=e.memoizedProps,n=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&n.focus();break e;case"img":a.src?n.src=a.src:a.srcSet&&(n.srcset=a.srcSet)}}catch(l){at(e,e.return,l)}}function Rr(e,t,a){try{var n=e.stateNode;ny(n,e.type,a,t),n[Ie]=t}catch(l){at(e,e.return,l)}}function mf(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&hn(e.type)||e.tag===4}function Hr(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||mf(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&&hn(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 Ur(e,t,a){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(e,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(e),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=Ma));else if(n!==4&&(n===27&&hn(e.type)&&(a=e.stateNode,t=null),e=e.child,e!==null))for(Ur(e,t,a),e=e.sibling;e!==null;)Ur(e,t,a),e=e.sibling}function js(e,t,a){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?a.insertBefore(e,t):a.appendChild(e);else if(n!==4&&(n===27&&hn(e.type)&&(a=e.stateNode),e=e.child,e!==null))for(js(e,t,a),e=e.sibling;e!==null;)js(e,t,a),e=e.sibling}function hf(e){var t=e.stateNode,a=e.memoizedProps;try{for(var n=e.type,l=t.attributes;l.length;)t.removeAttributeNode(l[0]);qt(t,n,a),t[nt]=e,t[Ie]=a}catch(i){at(e,e.return,i)}}var Qa=!1,Ct=!1,Br=!1,yf=typeof WeakSet=="function"?WeakSet:Set,zt=null;function Hh(e,t){if(e=e.containerInfo,io=Fs,e=Cu(e),Ac(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{a=(a=e.ownerDocument)&&a.defaultView||window;var n=a.getSelection&&a.getSelection();if(n&&n.rangeCount!==0){a=n.anchorNode;var l=n.anchorOffset,i=n.focusNode;n=n.focusOffset;try{a.nodeType,i.nodeType}catch{a=null;break e}var r=0,u=-1,g=-1,A=0,q=0,Q=e,z=null;t:for(;;){for(var H;Q!==a||l!==0&&Q.nodeType!==3||(u=r+l),Q!==i||n!==0&&Q.nodeType!==3||(g=r+n),Q.nodeType===3&&(r+=Q.nodeValue.length),(H=Q.firstChild)!==null;)z=Q,Q=H;for(;;){if(Q===e)break t;if(z===a&&++A===l&&(u=r),z===i&&++q===n&&(g=r),(H=Q.nextSibling)!==null)break;Q=z,z=Q.parentNode}Q=H}a=u===-1||g===-1?null:{start:u,end:g}}else a=null}a=a||{start:0,end:0}}else a=null;for(so={focusedElem:e,selectionRange:a},Fs=!1,zt=t;zt!==null;)if(t=zt,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,zt=e;else for(;zt!==null;){switch(t=zt,i=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(a=0;a<e.length;a++)l=e[a],l.ref.impl=l.nextImpl;break;case 11:case 15:break;case 1:if((e&1024)!==0&&i!==null){e=void 0,a=t,l=i.memoizedProps,i=i.memoizedState,n=a.stateNode;try{var ve=Un(a.type,l);e=n.getSnapshotBeforeUpdate(ve,i),n.__reactInternalSnapshotBeforeUpdate=e}catch(Ee){at(a,a.return,Ee)}}break;case 3:if((e&1024)!==0){if(e=t.stateNode.containerInfo,a=e.nodeType,a===9)oo(e);else if(a===1)switch(e.nodeName){case"HEAD":case"HTML":case"BODY":oo(e);break;default:e.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((e&1024)!==0)throw Error(d(163))}if(e=t.sibling,e!==null){e.return=t.return,zt=e;break}zt=t.return}}function gf(e,t,a){var n=a.flags;switch(a.tag){case 0:case 11:case 15:Fa(e,a),n&4&&oi(5,a);break;case 1:if(Fa(e,a),n&4)if(e=a.stateNode,t===null)try{e.componentDidMount()}catch(r){at(a,a.return,r)}else{var l=Un(a.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(l,t,e.__reactInternalSnapshotBeforeUpdate)}catch(r){at(a,a.return,r)}}n&64&&df(a),n&512&&ui(a,a.return);break;case 3:if(Fa(e,a),n&64&&(e=a.updateQueue,e!==null)){if(t=null,a.child!==null)switch(a.child.tag){case 27:case 5:t=a.child.stateNode;break;case 1:t=a.child.stateNode}try{ed(e,t)}catch(r){at(a,a.return,r)}}break;case 27:t===null&&n&4&&hf(a);case 26:case 5:Fa(e,a),t===null&&n&4&&pf(a),n&512&&ui(a,a.return);break;case 12:Fa(e,a);break;case 31:Fa(e,a),n&4&&Sf(e,a);break;case 13:Fa(e,a),n&4&&wf(e,a),n&64&&(e=a.memoizedState,e!==null&&(e=e.dehydrated,e!==null&&(a=Xh.bind(null,a),dy(e,a))));break;case 22:if(n=a.memoizedState!==null||Qa,!n){t=t!==null&&t.memoizedState!==null||Ct,l=Qa;var i=Ct;Qa=n,(Ct=t)&&!i?Va(e,a,(a.subtreeFlags&8772)!==0):Fa(e,a),Qa=l,Ct=i}break;case 30:break;default:Fa(e,a)}}function bf(e){var t=e.alternate;t!==null&&(e.alternate=null,bf(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&mc(t)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var ft=null,Xt=!1;function Xa(e,t,a){for(a=a.child;a!==null;)vf(e,t,a),a=a.sibling}function vf(e,t,a){if(ge&&typeof ge.onCommitFiberUnmount=="function")try{ge.onCommitFiberUnmount(I,a)}catch{}switch(a.tag){case 26:Ct||Na(a,t),Xa(e,t,a),a.memoizedState?a.memoizedState.count--:a.stateNode&&(a=a.stateNode,a.parentNode.removeChild(a));break;case 27:Ct||Na(a,t);var n=ft,l=Xt;hn(a.type)&&(ft=a.stateNode,Xt=!1),Xa(e,t,a),vi(a.stateNode),ft=n,Xt=l;break;case 5:Ct||Na(a,t);case 6:if(n=ft,l=Xt,ft=null,Xa(e,t,a),ft=n,Xt=l,ft!==null)if(Xt)try{(ft.nodeType===9?ft.body:ft.nodeName==="HTML"?ft.ownerDocument.body:ft).removeChild(a.stateNode)}catch(i){at(a,t,i)}else try{ft.removeChild(a.stateNode)}catch(i){at(a,t,i)}break;case 18:ft!==null&&(Xt?(e=ft,dp(e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e,a.stateNode),Cl(e)):dp(ft,a.stateNode));break;case 4:n=ft,l=Xt,ft=a.stateNode.containerInfo,Xt=!0,Xa(e,t,a),ft=n,Xt=l;break;case 0:case 11:case 14:case 15:rn(2,a,t),Ct||rn(4,a,t),Xa(e,t,a);break;case 1:Ct||(Na(a,t),n=a.stateNode,typeof n.componentWillUnmount=="function"&&ff(a,t,n)),Xa(e,t,a);break;case 21:Xa(e,t,a);break;case 22:Ct=(n=Ct)||a.memoizedState!==null,Xa(e,t,a),Ct=n;break;default:Xa(e,t,a)}}function Sf(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null))){e=e.dehydrated;try{Cl(e)}catch(a){at(t,t.return,a)}}}function wf(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null&&(e=e.dehydrated,e!==null))))try{Cl(e)}catch(a){at(t,t.return,a)}}function Uh(e){switch(e.tag){case 31:case 13:case 19:var t=e.stateNode;return t===null&&(t=e.stateNode=new yf),t;case 22:return e=e.stateNode,t=e._retryCache,t===null&&(t=e._retryCache=new yf),t;default:throw Error(d(435,e.tag))}}function Ts(e,t){var a=Uh(e);t.forEach(function(n){if(!a.has(n)){a.add(n);var l=Fh.bind(null,e,n);n.then(l,l)}})}function Ft(e,t){var a=t.deletions;if(a!==null)for(var n=0;n<a.length;n++){var l=a[n],i=e,r=t,u=r;e:for(;u!==null;){switch(u.tag){case 27:if(hn(u.type)){ft=u.stateNode,Xt=!1;break e}break;case 5:ft=u.stateNode,Xt=!1;break e;case 3:case 4:ft=u.stateNode.containerInfo,Xt=!0;break e}u=u.return}if(ft===null)throw Error(d(160));vf(i,r,l),ft=null,Xt=!1,i=l.alternate,i!==null&&(i.return=null),l.return=null}if(t.subtreeFlags&13886)for(t=t.child;t!==null;)xf(t,e),t=t.sibling}var _a=null;function xf(e,t){var a=e.alternate,n=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:Ft(t,e),Vt(e),n&4&&(rn(3,e,e.return),oi(3,e),rn(5,e,e.return));break;case 1:Ft(t,e),Vt(e),n&512&&(Ct||a===null||Na(a,a.return)),n&64&&Qa&&(e=e.updateQueue,e!==null&&(n=e.callbacks,n!==null&&(a=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=a===null?n:a.concat(n))));break;case 26:var l=_a;if(Ft(t,e),Vt(e),n&512&&(Ct||a===null||Na(a,a.return)),n&4){var i=a!==null?a.memoizedState:null;if(n=e.memoizedState,a===null)if(n===null)if(e.stateNode===null){e:{n=e.type,a=e.memoizedProps,l=l.ownerDocument||l;t:switch(n){case"title":i=l.getElementsByTagName("title")[0],(!i||i[Ul]||i[nt]||i.namespaceURI==="http://www.w3.org/2000/svg"||i.hasAttribute("itemprop"))&&(i=l.createElement(n),l.head.insertBefore(i,l.querySelector("head > title"))),qt(i,n,a),i[nt]=e,Ot(i),n=i;break e;case"link":var r=xp("link","href",l).get(n+(a.href||""));if(r){for(var u=0;u<r.length;u++)if(i=r[u],i.getAttribute("href")===(a.href==null||a.href===""?null:a.href)&&i.getAttribute("rel")===(a.rel==null?null:a.rel)&&i.getAttribute("title")===(a.title==null?null:a.title)&&i.getAttribute("crossorigin")===(a.crossOrigin==null?null:a.crossOrigin)){r.splice(u,1);break t}}i=l.createElement(n),qt(i,n,a),l.head.appendChild(i);break;case"meta":if(r=xp("meta","content",l).get(n+(a.content||""))){for(u=0;u<r.length;u++)if(i=r[u],i.getAttribute("content")===(a.content==null?null:""+a.content)&&i.getAttribute("name")===(a.name==null?null:a.name)&&i.getAttribute("property")===(a.property==null?null:a.property)&&i.getAttribute("http-equiv")===(a.httpEquiv==null?null:a.httpEquiv)&&i.getAttribute("charset")===(a.charSet==null?null:a.charSet)){r.splice(u,1);break t}}i=l.createElement(n),qt(i,n,a),l.head.appendChild(i);break;default:throw Error(d(468,n))}i[nt]=e,Ot(i),n=i}e.stateNode=n}else _p(l,e.type,e.stateNode);else e.stateNode=wp(l,n,e.memoizedProps);else i!==n?(i===null?a.stateNode!==null&&(a=a.stateNode,a.parentNode.removeChild(a)):i.count--,n===null?_p(l,e.type,e.stateNode):wp(l,n,e.memoizedProps)):n===null&&e.stateNode!==null&&Rr(e,e.memoizedProps,a.memoizedProps)}break;case 27:Ft(t,e),Vt(e),n&512&&(Ct||a===null||Na(a,a.return)),a!==null&&n&4&&Rr(e,e.memoizedProps,a.memoizedProps);break;case 5:if(Ft(t,e),Vt(e),n&512&&(Ct||a===null||Na(a,a.return)),e.flags&32){l=e.stateNode;try{Jn(l,"")}catch(ve){at(e,e.return,ve)}}n&4&&e.stateNode!=null&&(l=e.memoizedProps,Rr(e,l,a!==null?a.memoizedProps:l)),n&1024&&(Br=!0);break;case 6:if(Ft(t,e),Vt(e),n&4){if(e.stateNode===null)throw Error(d(162));n=e.memoizedProps,a=e.stateNode;try{a.nodeValue=n}catch(ve){at(e,e.return,ve)}}break;case 3:if($s=null,l=_a,_a=Ls(t.containerInfo),Ft(t,e),_a=l,Vt(e),n&4&&a!==null&&a.memoizedState.isDehydrated)try{Cl(t.containerInfo)}catch(ve){at(e,e.return,ve)}Br&&(Br=!1,_f(e));break;case 4:n=_a,_a=Ls(e.stateNode.containerInfo),Ft(t,e),Vt(e),_a=n;break;case 12:Ft(t,e),Vt(e);break;case 31:Ft(t,e),Vt(e),n&4&&(n=e.updateQueue,n!==null&&(e.updateQueue=null,Ts(e,n)));break;case 13:Ft(t,e),Vt(e),e.child.flags&8192&&e.memoizedState!==null!=(a!==null&&a.memoizedState!==null)&&(Es=gt()),n&4&&(n=e.updateQueue,n!==null&&(e.updateQueue=null,Ts(e,n)));break;case 22:l=e.memoizedState!==null;var g=a!==null&&a.memoizedState!==null,A=Qa,q=Ct;if(Qa=A||l,Ct=q||g,Ft(t,e),Ct=q,Qa=A,Vt(e),n&8192)e:for(t=e.stateNode,t._visibility=l?t._visibility&-2:t._visibility|1,l&&(a===null||g||Qa||Ct||Bn(e)),a=null,t=e;;){if(t.tag===5||t.tag===26){if(a===null){g=a=t;try{if(i=g.stateNode,l)r=i.style,typeof r.setProperty=="function"?r.setProperty("display","none","important"):r.display="none";else{u=g.stateNode;var Q=g.memoizedProps.style,z=Q!=null&&Q.hasOwnProperty("display")?Q.display:null;u.style.display=z==null||typeof z=="boolean"?"":(""+z).trim()}}catch(ve){at(g,g.return,ve)}}}else if(t.tag===6){if(a===null){g=t;try{g.stateNode.nodeValue=l?"":g.memoizedProps}catch(ve){at(g,g.return,ve)}}}else if(t.tag===18){if(a===null){g=t;try{var H=g.stateNode;l?fp(H,!0):fp(g.stateNode,!1)}catch(ve){at(g,g.return,ve)}}}else if((t.tag!==22&&t.tag!==23||t.memoizedState===null||t===e)&&t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break e;for(;t.sibling===null;){if(t.return===null||t.return===e)break e;a===t&&(a=null),t=t.return}a===t&&(a=null),t.sibling.return=t.return,t=t.sibling}n&4&&(n=e.updateQueue,n!==null&&(a=n.retryQueue,a!==null&&(n.retryQueue=null,Ts(e,a))));break;case 19:Ft(t,e),Vt(e),n&4&&(n=e.updateQueue,n!==null&&(e.updateQueue=null,Ts(e,n)));break;case 30:break;case 21:break;default:Ft(t,e),Vt(e)}}function Vt(e){var t=e.flags;if(t&2){try{for(var a,n=e.return;n!==null;){if(mf(n)){a=n;break}n=n.return}if(a==null)throw Error(d(160));switch(a.tag){case 27:var l=a.stateNode,i=Hr(e);js(e,i,l);break;case 5:var r=a.stateNode;a.flags&32&&(Jn(r,""),a.flags&=-33);var u=Hr(e);js(e,u,r);break;case 3:case 4:var g=a.stateNode.containerInfo,A=Hr(e);Ur(e,A,g);break;default:throw Error(d(161))}}catch(q){at(e,e.return,q)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function _f(e){if(e.subtreeFlags&1024)for(e=e.child;e!==null;){var t=e;_f(t),t.tag===5&&t.flags&1024&&t.stateNode.reset(),e=e.sibling}}function Fa(e,t){if(t.subtreeFlags&8772)for(t=t.child;t!==null;)gf(e,t.alternate,t),t=t.sibling}function Bn(e){for(e=e.child;e!==null;){var t=e;switch(t.tag){case 0:case 11:case 14:case 15:rn(4,t,t.return),Bn(t);break;case 1:Na(t,t.return);var a=t.stateNode;typeof a.componentWillUnmount=="function"&&ff(t,t.return,a),Bn(t);break;case 27:vi(t.stateNode);case 26:case 5:Na(t,t.return),Bn(t);break;case 22:t.memoizedState===null&&Bn(t);break;case 30:Bn(t);break;default:Bn(t)}e=e.sibling}}function Va(e,t,a){for(a=a&&(t.subtreeFlags&8772)!==0,t=t.child;t!==null;){var n=t.alternate,l=e,i=t,r=i.flags;switch(i.tag){case 0:case 11:case 15:Va(l,i,a),oi(4,i);break;case 1:if(Va(l,i,a),n=i,l=n.stateNode,typeof l.componentDidMount=="function")try{l.componentDidMount()}catch(A){at(n,n.return,A)}if(n=i,l=n.updateQueue,l!==null){var u=n.stateNode;try{var g=l.shared.hiddenCallbacks;if(g!==null)for(l.shared.hiddenCallbacks=null,l=0;l<g.length;l++)Pu(g[l],u)}catch(A){at(n,n.return,A)}}a&&r&64&&df(i),ui(i,i.return);break;case 27:hf(i);case 26:case 5:Va(l,i,a),a&&n===null&&r&4&&pf(i),ui(i,i.return);break;case 12:Va(l,i,a);break;case 31:Va(l,i,a),a&&r&4&&Sf(l,i);break;case 13:Va(l,i,a),a&&r&4&&wf(l,i);break;case 22:i.memoizedState===null&&Va(l,i,a),ui(i,i.return);break;case 30:break;default:Va(l,i,a)}t=t.sibling}}function qr(e,t){var a=null;e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),e=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),e!==a&&(e!=null&&e.refCount++,a!=null&&Jl(a))}function Lr(e,t){e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&Jl(e))}function ka(e,t,a,n){if(t.subtreeFlags&10256)for(t=t.child;t!==null;)kf(e,t,a,n),t=t.sibling}function kf(e,t,a,n){var l=t.flags;switch(t.tag){case 0:case 11:case 15:ka(e,t,a,n),l&2048&&oi(9,t);break;case 1:ka(e,t,a,n);break;case 3:ka(e,t,a,n),l&2048&&(e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&Jl(e)));break;case 12:if(l&2048){ka(e,t,a,n),e=t.stateNode;try{var i=t.memoizedProps,r=i.id,u=i.onPostCommit;typeof u=="function"&&u(r,t.alternate===null?"mount":"update",e.passiveEffectDuration,-0)}catch(g){at(t,t.return,g)}}else ka(e,t,a,n);break;case 31:ka(e,t,a,n);break;case 13:ka(e,t,a,n);break;case 23:break;case 22:i=t.stateNode,r=t.alternate,t.memoizedState!==null?i._visibility&2?ka(e,t,a,n):di(e,t):i._visibility&2?ka(e,t,a,n):(i._visibility|=2,yl(e,t,a,n,(t.subtreeFlags&10256)!==0||!1)),l&2048&&qr(r,t);break;case 24:ka(e,t,a,n),l&2048&&Lr(t.alternate,t);break;default:ka(e,t,a,n)}}function yl(e,t,a,n,l){for(l=l&&((t.subtreeFlags&10256)!==0||!1),t=t.child;t!==null;){var i=e,r=t,u=a,g=n,A=r.flags;switch(r.tag){case 0:case 11:case 15:yl(i,r,u,g,l),oi(8,r);break;case 23:break;case 22:var q=r.stateNode;r.memoizedState!==null?q._visibility&2?yl(i,r,u,g,l):di(i,r):(q._visibility|=2,yl(i,r,u,g,l)),l&&A&2048&&qr(r.alternate,r);break;case 24:yl(i,r,u,g,l),l&&A&2048&&Lr(r.alternate,r);break;default:yl(i,r,u,g,l)}t=t.sibling}}function di(e,t){if(t.subtreeFlags&10256)for(t=t.child;t!==null;){var a=e,n=t,l=n.flags;switch(n.tag){case 22:di(a,n),l&2048&&qr(n.alternate,n);break;case 24:di(a,n),l&2048&&Lr(n.alternate,n);break;default:di(a,n)}t=t.sibling}}var fi=8192;function gl(e,t,a){if(e.subtreeFlags&fi)for(e=e.child;e!==null;)jf(e,t,a),e=e.sibling}function jf(e,t,a){switch(e.tag){case 26:gl(e,t,a),e.flags&fi&&e.memoizedState!==null&&_y(a,_a,e.memoizedState,e.memoizedProps);break;case 5:gl(e,t,a);break;case 3:case 4:var n=_a;_a=Ls(e.stateNode.containerInfo),gl(e,t,a),_a=n;break;case 22:e.memoizedState===null&&(n=e.alternate,n!==null&&n.memoizedState!==null?(n=fi,fi=16777216,gl(e,t,a),fi=n):gl(e,t,a));break;default:gl(e,t,a)}}function Tf(e){var t=e.alternate;if(t!==null&&(e=t.child,e!==null)){t.child=null;do t=e.sibling,e.sibling=null,e=t;while(e!==null)}}function pi(e){var t=e.deletions;if((e.flags&16)!==0){if(t!==null)for(var a=0;a<t.length;a++){var n=t[a];zt=n,Ef(n,e)}Tf(e)}if(e.subtreeFlags&10256)for(e=e.child;e!==null;)Cf(e),e=e.sibling}function Cf(e){switch(e.tag){case 0:case 11:case 15:pi(e),e.flags&2048&&rn(9,e,e.return);break;case 3:pi(e);break;case 12:pi(e);break;case 22:var t=e.stateNode;e.memoizedState!==null&&t._visibility&2&&(e.return===null||e.return.tag!==13)?(t._visibility&=-3,Cs(e)):pi(e);break;default:pi(e)}}function Cs(e){var t=e.deletions;if((e.flags&16)!==0){if(t!==null)for(var a=0;a<t.length;a++){var n=t[a];zt=n,Ef(n,e)}Tf(e)}for(e=e.child;e!==null;){switch(t=e,t.tag){case 0:case 11:case 15:rn(8,t,t.return),Cs(t);break;case 22:a=t.stateNode,a._visibility&2&&(a._visibility&=-3,Cs(t));break;default:Cs(t)}e=e.sibling}}function Ef(e,t){for(;zt!==null;){var a=zt;switch(a.tag){case 0:case 11:case 15:rn(8,a,t);break;case 23:case 22:if(a.memoizedState!==null&&a.memoizedState.cachePool!==null){var n=a.memoizedState.cachePool.pool;n!=null&&n.refCount++}break;case 24:Jl(a.memoizedState.cache)}if(n=a.child,n!==null)n.return=a,zt=n;else e:for(a=e;zt!==null;){n=zt;var l=n.sibling,i=n.return;if(bf(n),n===a){zt=null;break e}if(l!==null){l.return=i,zt=l;break e}zt=i}}}var Bh={getCacheForType:function(e){var t=Ut(kt),a=t.data.get(e);return a===void 0&&(a=e(),t.data.set(e,a)),a},cacheSignal:function(){return Ut(kt).controller.signal}},qh=typeof WeakMap=="function"?WeakMap:Map,Je=0,ct=null,qe=null,$e=0,tt=0,aa=null,on=!1,bl=!1,Gr=!1,Za=0,yt=0,un=0,qn=0,$r=0,na=0,vl=0,mi=null,Zt=null,Yr=!1,Es=0,Df=0,Ds=1/0,Ns=null,dn=null,Nt=0,fn=null,Sl=null,Ka=0,Qr=0,Xr=null,Nf=null,hi=0,Fr=null;function la(){return(Je&2)!==0&&$e!==0?$e&-$e:E.T!==null?Ir():pe()}function Af(){if(na===0)if(($e&536870912)===0||Fe){var e=Ta;Ta<<=1,(Ta&3932160)===0&&(Ta=262144),na=e}else na=536870912;return e=ea.current,e!==null&&(e.flags|=32),na}function Kt(e,t,a){(e===ct&&(tt===2||tt===9)||e.cancelPendingCommit!==null)&&(wl(e,0),pn(e,$e,na,!1)),Oa(e,a),((Je&2)===0||e!==ct)&&(e===ct&&((Je&2)===0&&(qn|=a),yt===4&&pn(e,$e,na,!1)),Aa(e))}function Of(e,t,a){if((Je&6)!==0)throw Error(d(327));var n=!a&&(t&127)===0&&(t&e.expiredLanes)===0||Ca(e,t),l=n?$h(e,t):Zr(e,t,!0),i=n;do{if(l===0){bl&&!n&&pn(e,t,0,!1);break}else{if(a=e.current.alternate,i&&!Lh(a)){l=Zr(e,t,!1),i=!1;continue}if(l===2){if(i=t,e.errorRecoveryDisabledLanes&i)var r=0;else r=e.pendingLanes&-536870913,r=r!==0?r:r&536870912?536870912:0;if(r!==0){t=r;e:{var u=e;l=mi;var g=u.current.memoizedState.isDehydrated;if(g&&(wl(u,r).flags|=256),r=Zr(u,r,!1),r!==2){if(Gr&&!g){u.errorRecoveryDisabledLanes|=i,qn|=i,l=4;break e}i=Zt,Zt=l,i!==null&&(Zt===null?Zt=i:Zt.push.apply(Zt,i))}l=r}if(i=!1,l!==2)continue}}if(l===1){wl(e,0),pn(e,t,0,!0);break}e:{switch(n=e,i=l,i){case 0:case 1:throw Error(d(345));case 4:if((t&4194048)!==t)break;case 6:pn(n,t,na,!on);break e;case 2:Zt=null;break;case 3:case 5:break;default:throw Error(d(329))}if((t&62914560)===t&&(l=Es+300-gt(),10<l)){if(pn(n,t,na,!on),oa(n,0,!0)!==0)break e;Ka=t,n.timeoutHandle=op(zf.bind(null,n,a,Zt,Ns,Yr,t,na,qn,vl,on,i,"Throttled",-0,0),l);break e}zf(n,a,Zt,Ns,Yr,t,na,qn,vl,on,i,null,-0,0)}}break}while(!0);Aa(e)}function zf(e,t,a,n,l,i,r,u,g,A,q,Q,z,H){if(e.timeoutHandle=-1,Q=t.subtreeFlags,Q&8192||(Q&16785408)===16785408){Q={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:Ma},jf(t,i,Q);var ve=(i&62914560)===i?Es-gt():(i&4194048)===i?Df-gt():0;if(ve=ky(Q,ve),ve!==null){Ka=i,e.cancelPendingCommit=ve(Gf.bind(null,e,t,i,a,n,l,r,u,g,q,Q,null,z,H)),pn(e,i,r,!A);return}}Gf(e,t,i,a,n,l,r,u,g)}function Lh(e){for(var t=e;;){var a=t.tag;if((a===0||a===11||a===15)&&t.flags&16384&&(a=t.updateQueue,a!==null&&(a=a.stores,a!==null)))for(var n=0;n<a.length;n++){var l=a[n],i=l.getSnapshot;l=l.value;try{if(!It(i(),l))return!1}catch{return!1}}if(a=t.child,t.subtreeFlags&16384&&a!==null)a.return=t,t=a;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function pn(e,t,a,n){t&=~$r,t&=~qn,e.suspendedLanes|=t,e.pingedLanes&=~t,n&&(e.warmLanes|=t),n=e.expirationTimes;for(var l=t;0<l;){var i=31-he(l),r=1<<i;n[i]=-1,l&=~r}a!==0&&ua(e,a,t)}function As(){return(Je&6)===0?(yi(0),!1):!0}function Vr(){if(qe!==null){if(tt===0)var e=qe.return;else e=qe,Ba=Nn=null,or(e),dl=null,Il=0,e=qe;for(;e!==null;)uf(e.alternate,e),e=e.return;qe=null}}function wl(e,t){var a=e.timeoutHandle;a!==-1&&(e.timeoutHandle=-1,sy(a)),a=e.cancelPendingCommit,a!==null&&(e.cancelPendingCommit=null,a()),Ka=0,Vr(),ct=e,qe=a=Ha(e.current,null),$e=t,tt=0,aa=null,on=!1,bl=Ca(e,t),Gr=!1,vl=na=$r=qn=un=yt=0,Zt=mi=null,Yr=!1,(t&8)!==0&&(t|=t&32);var n=e.entangledLanes;if(n!==0)for(e=e.entanglements,n&=t;0<n;){var l=31-he(n),i=1<<l;t|=e[l],n&=~i}return Za=t,Wi(),a}function Mf(e,t){Re=null,E.H=si,t===ul||t===is?(t=Ku(),tt=3):t===Wc?(t=Ku(),tt=4):tt=t===jr?8:t!==null&&typeof t=="object"&&typeof t.then=="function"?6:1,aa=t,qe===null&&(yt=1,vs(e,ma(t,e.current)))}function Rf(){var e=ea.current;return e===null?!0:($e&4194048)===$e?ba===null:($e&62914560)===$e||($e&536870912)!==0?e===ba:!1}function Hf(){var e=E.H;return E.H=si,e===null?si:e}function Uf(){var e=E.A;return E.A=Bh,e}function Os(){yt=4,on||($e&4194048)!==$e&&ea.current!==null||(bl=!0),(un&134217727)===0&&(qn&134217727)===0||ct===null||pn(ct,$e,na,!1)}function Zr(e,t,a){var n=Je;Je|=2;var l=Hf(),i=Uf();(ct!==e||$e!==t)&&(Ns=null,wl(e,t)),t=!1;var r=yt;e:do try{if(tt!==0&&qe!==null){var u=qe,g=aa;switch(tt){case 8:Vr(),r=6;break e;case 3:case 2:case 9:case 6:ea.current===null&&(t=!0);var A=tt;if(tt=0,aa=null,xl(e,u,g,A),a&&bl){r=0;break e}break;default:A=tt,tt=0,aa=null,xl(e,u,g,A)}}Gh(),r=yt;break}catch(q){Mf(e,q)}while(!0);return t&&e.shellSuspendCounter++,Ba=Nn=null,Je=n,E.H=l,E.A=i,qe===null&&(ct=null,$e=0,Wi()),r}function Gh(){for(;qe!==null;)Bf(qe)}function $h(e,t){var a=Je;Je|=2;var n=Hf(),l=Uf();ct!==e||$e!==t?(Ns=null,Ds=gt()+500,wl(e,t)):bl=Ca(e,t);e:do try{if(tt!==0&&qe!==null){t=qe;var i=aa;t:switch(tt){case 1:tt=0,aa=null,xl(e,t,i,1);break;case 2:case 9:if(Vu(i)){tt=0,aa=null,qf(t);break}t=function(){tt!==2&&tt!==9||ct!==e||(tt=7),Aa(e)},i.then(t,t);break e;case 3:tt=7;break e;case 4:tt=5;break e;case 7:Vu(i)?(tt=0,aa=null,qf(t)):(tt=0,aa=null,xl(e,t,i,7));break;case 5:var r=null;switch(qe.tag){case 26:r=qe.memoizedState;case 5:case 27:var u=qe;if(r?kp(r):u.stateNode.complete){tt=0,aa=null;var g=u.sibling;if(g!==null)qe=g;else{var A=u.return;A!==null?(qe=A,zs(A)):qe=null}break t}}tt=0,aa=null,xl(e,t,i,5);break;case 6:tt=0,aa=null,xl(e,t,i,6);break;case 8:Vr(),yt=6;break e;default:throw Error(d(462))}}Yh();break}catch(q){Mf(e,q)}while(!0);return Ba=Nn=null,E.H=n,E.A=l,Je=a,qe!==null?0:(ct=null,$e=0,Wi(),yt)}function Yh(){for(;qe!==null&&!Dt();)Bf(qe)}function Bf(e){var t=rf(e.alternate,e,Za);e.memoizedProps=e.pendingProps,t===null?zs(e):qe=t}function qf(e){var t=e,a=t.alternate;switch(t.tag){case 15:case 0:t=tf(a,t,t.pendingProps,t.type,void 0,$e);break;case 11:t=tf(a,t,t.pendingProps,t.type.render,t.ref,$e);break;case 5:or(t);default:uf(a,t),t=qe=Hu(t,Za),t=rf(a,t,Za)}e.memoizedProps=e.pendingProps,t===null?zs(e):qe=t}function xl(e,t,a,n){Ba=Nn=null,or(t),dl=null,Il=0;var l=t.return;try{if(Ah(e,l,t,a,$e)){yt=1,vs(e,ma(a,e.current)),qe=null;return}}catch(i){if(l!==null)throw qe=l,i;yt=1,vs(e,ma(a,e.current)),qe=null;return}t.flags&32768?(Fe||n===1?e=!0:bl||($e&536870912)!==0?e=!1:(on=e=!0,(n===2||n===9||n===3||n===6)&&(n=ea.current,n!==null&&n.tag===13&&(n.flags|=16384))),Lf(t,e)):zs(t)}function zs(e){var t=e;do{if((t.flags&32768)!==0){Lf(t,on);return}e=t.return;var a=Mh(t.alternate,t,Za);if(a!==null){qe=a;return}if(t=t.sibling,t!==null){qe=t;return}qe=t=e}while(t!==null);yt===0&&(yt=5)}function Lf(e,t){do{var a=Rh(e.alternate,e);if(a!==null){a.flags&=32767,qe=a;return}if(a=e.return,a!==null&&(a.flags|=32768,a.subtreeFlags=0,a.deletions=null),!t&&(e=e.sibling,e!==null)){qe=e;return}qe=e=a}while(e!==null);yt=6,qe=null}function Gf(e,t,a,n,l,i,r,u,g){e.cancelPendingCommit=null;do Ms();while(Nt!==0);if((Je&6)!==0)throw Error(d(327));if(t!==null){if(t===e.current)throw Error(d(177));if(i=t.lanes|t.childLanes,i|=Hc,fc(e,a,i,r,u,g),e===ct&&(qe=ct=null,$e=0),Sl=t,fn=e,Ka=a,Qr=i,Xr=l,Nf=n,(t.subtreeFlags&10256)!==0||(t.flags&10256)!==0?(e.callbackNode=null,e.callbackPriority=0,Vh(ue,function(){return Ff(),null})):(e.callbackNode=null,e.callbackPriority=0),n=(t.flags&13878)!==0,(t.subtreeFlags&13878)!==0||n){n=E.T,E.T=null,l=G.p,G.p=2,r=Je,Je|=4;try{Hh(e,t,a)}finally{Je=r,G.p=l,E.T=n}}Nt=1,$f(),Yf(),Qf()}}function $f(){if(Nt===1){Nt=0;var e=fn,t=Sl,a=(t.flags&13878)!==0;if((t.subtreeFlags&13878)!==0||a){a=E.T,E.T=null;var n=G.p;G.p=2;var l=Je;Je|=4;try{xf(t,e);var i=so,r=Cu(e.containerInfo),u=i.focusedElem,g=i.selectionRange;if(r!==u&&u&&u.ownerDocument&&Tu(u.ownerDocument.documentElement,u)){if(g!==null&&Ac(u)){var A=g.start,q=g.end;if(q===void 0&&(q=A),"selectionStart"in u)u.selectionStart=A,u.selectionEnd=Math.min(q,u.value.length);else{var Q=u.ownerDocument||document,z=Q&&Q.defaultView||window;if(z.getSelection){var H=z.getSelection(),ve=u.textContent.length,Ee=Math.min(g.start,ve),st=g.end===void 0?Ee:Math.min(g.end,ve);!H.extend&&Ee>st&&(r=st,st=Ee,Ee=r);var k=ju(u,Ee),w=ju(u,st);if(k&&w&&(H.rangeCount!==1||H.anchorNode!==k.node||H.anchorOffset!==k.offset||H.focusNode!==w.node||H.focusOffset!==w.offset)){var N=Q.createRange();N.setStart(k.node,k.offset),H.removeAllRanges(),Ee>st?(H.addRange(N),H.extend(w.node,w.offset)):(N.setEnd(w.node,w.offset),H.addRange(N))}}}}for(Q=[],H=u;H=H.parentNode;)H.nodeType===1&&Q.push({element:H,left:H.scrollLeft,top:H.scrollTop});for(typeof u.focus=="function"&&u.focus(),u=0;u<Q.length;u++){var Y=Q[u];Y.element.scrollLeft=Y.left,Y.element.scrollTop=Y.top}}Fs=!!io,so=io=null}finally{Je=l,G.p=n,E.T=a}}e.current=t,Nt=2}}function Yf(){if(Nt===2){Nt=0;var e=fn,t=Sl,a=(t.flags&8772)!==0;if((t.subtreeFlags&8772)!==0||a){a=E.T,E.T=null;var n=G.p;G.p=2;var l=Je;Je|=4;try{gf(e,t.alternate,t)}finally{Je=l,G.p=n,E.T=a}}Nt=3}}function Qf(){if(Nt===4||Nt===3){Nt=0,mt();var e=fn,t=Sl,a=Ka,n=Nf;(t.subtreeFlags&10256)!==0||(t.flags&10256)!==0?Nt=5:(Nt=0,Sl=fn=null,Xf(e,e.pendingLanes));var l=e.pendingLanes;if(l===0&&(dn=null),be(a),t=t.stateNode,ge&&typeof ge.onCommitFiberRoot=="function")try{ge.onCommitFiberRoot(I,t,void 0,(t.current.flags&128)===128)}catch{}if(n!==null){t=E.T,l=G.p,G.p=2,E.T=null;try{for(var i=e.onRecoverableError,r=0;r<n.length;r++){var u=n[r];i(u.value,{componentStack:u.stack})}}finally{E.T=t,G.p=l}}(Ka&3)!==0&&Ms(),Aa(e),l=e.pendingLanes,(a&261930)!==0&&(l&42)!==0?e===Fr?hi++:(hi=0,Fr=e):hi=0,yi(0)}}function Xf(e,t){(e.pooledCacheLanes&=t)===0&&(t=e.pooledCache,t!=null&&(e.pooledCache=null,Jl(t)))}function Ms(){return $f(),Yf(),Qf(),Ff()}function Ff(){if(Nt!==5)return!1;var e=fn,t=Qr;Qr=0;var a=be(Ka),n=E.T,l=G.p;try{G.p=32>a?32:a,E.T=null,a=Xr,Xr=null;var i=fn,r=Ka;if(Nt=0,Sl=fn=null,Ka=0,(Je&6)!==0)throw Error(d(331));var u=Je;if(Je|=4,Cf(i.current),kf(i,i.current,r,a),Je=u,yi(0,!1),ge&&typeof ge.onPostCommitFiberRoot=="function")try{ge.onPostCommitFiberRoot(I,i)}catch{}return!0}finally{G.p=l,E.T=n,Xf(e,t)}}function Vf(e,t,a){t=ma(a,t),t=kr(e.stateNode,t,2),e=ln(e,t,2),e!==null&&(Oa(e,2),Aa(e))}function at(e,t,a){if(e.tag===3)Vf(e,e,a);else for(;t!==null;){if(t.tag===3){Vf(t,e,a);break}else if(t.tag===1){var n=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof n.componentDidCatch=="function"&&(dn===null||!dn.has(n))){e=ma(a,e),a=Vd(2),n=ln(t,a,2),n!==null&&(Zd(a,n,t,e),Oa(n,2),Aa(n));break}}t=t.return}}function Kr(e,t,a){var n=e.pingCache;if(n===null){n=e.pingCache=new qh;var l=new Set;n.set(t,l)}else l=n.get(t),l===void 0&&(l=new Set,n.set(t,l));l.has(a)||(Gr=!0,l.add(a),e=Qh.bind(null,e,t,a),t.then(e,e))}function Qh(e,t,a){var n=e.pingCache;n!==null&&n.delete(t),e.pingedLanes|=e.suspendedLanes&a,e.warmLanes&=~a,ct===e&&($e&a)===a&&(yt===4||yt===3&&($e&62914560)===$e&&300>gt()-Es?(Je&2)===0&&wl(e,0):$r|=a,vl===$e&&(vl=0)),Aa(e)}function Zf(e,t){t===0&&(t=qi()),e=Cn(e,t),e!==null&&(Oa(e,t),Aa(e))}function Xh(e){var t=e.memoizedState,a=0;t!==null&&(a=t.retryLane),Zf(e,a)}function Fh(e,t){var a=0;switch(e.tag){case 31:case 13:var n=e.stateNode,l=e.memoizedState;l!==null&&(a=l.retryLane);break;case 19:n=e.stateNode;break;case 22:n=e.stateNode._retryCache;break;default:throw Error(d(314))}n!==null&&n.delete(t),Zf(e,a)}function Vh(e,t){return Rt(e,t)}var Rs=null,_l=null,Jr=!1,Hs=!1,Wr=!1,mn=0;function Aa(e){e!==_l&&e.next===null&&(_l===null?Rs=_l=e:_l=_l.next=e),Hs=!0,Jr||(Jr=!0,Kh())}function yi(e,t){if(!Wr&&Hs){Wr=!0;do for(var a=!1,n=Rs;n!==null;){if(e!==0){var l=n.pendingLanes;if(l===0)var i=0;else{var r=n.suspendedLanes,u=n.pingedLanes;i=(1<<31-he(42|e)+1)-1,i&=l&~(r&~u),i=i&201326741?i&201326741|1:i?i|2:0}i!==0&&(a=!0,If(n,i))}else i=$e,i=oa(n,n===ct?i:0,n.cancelPendingCommit!==null||n.timeoutHandle!==-1),(i&3)===0||Ca(n,i)||(a=!0,If(n,i));n=n.next}while(a);Wr=!1}}function Zh(){Kf()}function Kf(){Hs=Jr=!1;var e=0;mn!==0&&iy()&&(e=mn);for(var t=gt(),a=null,n=Rs;n!==null;){var l=n.next,i=Jf(n,t);i===0?(n.next=null,a===null?Rs=l:a.next=l,l===null&&(_l=a)):(a=n,(e!==0||(i&3)!==0)&&(Hs=!0)),n=l}Nt!==0&&Nt!==5||yi(e),mn!==0&&(mn=0)}function Jf(e,t){for(var a=e.suspendedLanes,n=e.pingedLanes,l=e.expirationTimes,i=e.pendingLanes&-62914561;0<i;){var r=31-he(i),u=1<<r,g=l[r];g===-1?((u&a)===0||(u&n)!==0)&&(l[r]=dc(u,t)):g<=t&&(e.expiredLanes|=u),i&=~u}if(t=ct,a=$e,a=oa(e,e===t?a:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),n=e.callbackNode,a===0||e===t&&(tt===2||tt===9)||e.cancelPendingCommit!==null)return n!==null&&n!==null&&ja(n),e.callbackNode=null,e.callbackPriority=0;if((a&3)===0||Ca(e,a)){if(t=a&-a,t===e.callbackPriority)return t;switch(n!==null&&ja(n),be(a)){case 2:case 8:a=me;break;case 32:a=ue;break;case 268435456:a=Xe;break;default:a=ue}return n=Wf.bind(null,e),a=Rt(a,n),e.callbackPriority=t,e.callbackNode=a,t}return n!==null&&n!==null&&ja(n),e.callbackPriority=2,e.callbackNode=null,2}function Wf(e,t){if(Nt!==0&&Nt!==5)return e.callbackNode=null,e.callbackPriority=0,null;var a=e.callbackNode;if(Ms()&&e.callbackNode!==a)return null;var n=$e;return n=oa(e,e===ct?n:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),n===0?null:(Of(e,n,t),Jf(e,gt()),e.callbackNode!=null&&e.callbackNode===a?Wf.bind(null,e):null)}function If(e,t){if(Ms())return null;Of(e,t,!0)}function Kh(){cy(function(){(Je&6)!==0?Rt(ce,Zh):Kf()})}function Ir(){if(mn===0){var e=rl;e===0&&(e=ra,ra<<=1,(ra&261888)===0&&(ra=256)),mn=e}return mn}function Pf(e){return e==null||typeof e=="symbol"||typeof e=="boolean"?null:typeof e=="function"?e:Yi(""+e)}function ep(e,t){var a=t.ownerDocument.createElement("input");return a.name=t.name,a.value=t.value,e.id&&a.setAttribute("form",e.id),t.parentNode.insertBefore(a,t),e=new FormData(e),a.parentNode.removeChild(a),e}function Jh(e,t,a,n,l){if(t==="submit"&&a&&a.stateNode===l){var i=Pf((l[Ie]||null).action),r=n.submitter;r&&(t=(t=r[Ie]||null)?Pf(t.formAction):r.getAttribute("formAction"),t!==null&&(i=t,r=null));var u=new Vi("action","action",null,n,l);e.push({event:u,listeners:[{instance:null,listener:function(){if(n.defaultPrevented){if(mn!==0){var g=r?ep(l,r):new FormData(l);br(a,{pending:!0,data:g,method:l.method,action:i},null,g)}}else typeof i=="function"&&(u.preventDefault(),g=r?ep(l,r):new FormData(l),br(a,{pending:!0,data:g,method:l.method,action:i},i,g))},currentTarget:l}]})}}for(var Pr=0;Pr<Rc.length;Pr++){var eo=Rc[Pr],Wh=eo.toLowerCase(),Ih=eo[0].toUpperCase()+eo.slice(1);xa(Wh,"on"+Ih)}xa(Nu,"onAnimationEnd"),xa(Au,"onAnimationIteration"),xa(Ou,"onAnimationStart"),xa("dblclick","onDoubleClick"),xa("focusin","onFocus"),xa("focusout","onBlur"),xa(mh,"onTransitionRun"),xa(hh,"onTransitionStart"),xa(yh,"onTransitionCancel"),xa(zu,"onTransitionEnd"),Zn("onMouseEnter",["mouseout","mouseover"]),Zn("onMouseLeave",["mouseout","mouseover"]),Zn("onPointerEnter",["pointerout","pointerover"]),Zn("onPointerLeave",["pointerout","pointerover"]),_n("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),_n("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),_n("onBeforeInput",["compositionend","keypress","textInput","paste"]),_n("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),_n("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),_n("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var gi="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Ph=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(gi));function tp(e,t){t=(t&4)!==0;for(var a=0;a<e.length;a++){var n=e[a],l=n.event;n=n.listeners;e:{var i=void 0;if(t)for(var r=n.length-1;0<=r;r--){var u=n[r],g=u.instance,A=u.currentTarget;if(u=u.listener,g!==i&&l.isPropagationStopped())break e;i=u,l.currentTarget=A;try{i(l)}catch(q){Ji(q)}l.currentTarget=null,i=g}else for(r=0;r<n.length;r++){if(u=n[r],g=u.instance,A=u.currentTarget,u=u.listener,g!==i&&l.isPropagationStopped())break e;i=u,l.currentTarget=A;try{i(l)}catch(q){Ji(q)}l.currentTarget=null,i=g}}}}function Le(e,t){var a=t[pc];a===void 0&&(a=t[pc]=new Set);var n=e+"__bubble";a.has(n)||(ap(t,e,2,!1),a.add(n))}function to(e,t,a){var n=0;t&&(n|=4),ap(a,e,n,t)}var Us="_reactListening"+Math.random().toString(36).slice(2);function ao(e){if(!e[Us]){e[Us]=!0,Zo.forEach(function(a){a!=="selectionchange"&&(Ph.has(a)||to(a,!1,e),to(a,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Us]||(t[Us]=!0,to("selectionchange",!1,t))}}function ap(e,t,a,n){switch(Ap(t)){case 2:var l=Cy;break;case 8:l=Ey;break;default:l=bo}a=l.bind(null,t,a,e),l=void 0,!xc||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(l=!0),n?l!==void 0?e.addEventListener(t,a,{capture:!0,passive:l}):e.addEventListener(t,a,!0):l!==void 0?e.addEventListener(t,a,{passive:l}):e.addEventListener(t,a,!1)}function no(e,t,a,n,l){var i=n;if((t&1)===0&&(t&2)===0&&n!==null)e:for(;;){if(n===null)return;var r=n.tag;if(r===3||r===4){var u=n.stateNode.containerInfo;if(u===l)break;if(r===4)for(r=n.return;r!==null;){var g=r.tag;if((g===3||g===4)&&r.stateNode.containerInfo===l)return;r=r.return}for(;u!==null;){if(r=Xn(u),r===null)return;if(g=r.tag,g===5||g===6||g===26||g===27){n=i=r;continue e}u=u.parentNode}}n=n.return}su(function(){var A=i,q=Sc(a),Q=[];e:{var z=Mu.get(e);if(z!==void 0){var H=Vi,ve=e;switch(e){case"keypress":if(Xi(a)===0)break e;case"keydown":case"keyup":H=Fm;break;case"focusin":ve="focus",H=Tc;break;case"focusout":ve="blur",H=Tc;break;case"beforeblur":case"afterblur":H=Tc;break;case"click":if(a.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":H=ou;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":H=Mm;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":H=Km;break;case Nu:case Au:case Ou:H=Um;break;case zu:H=Wm;break;case"scroll":case"scrollend":H=Om;break;case"wheel":H=Pm;break;case"copy":case"cut":case"paste":H=qm;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":H=du;break;case"toggle":case"beforetoggle":H=th}var Ee=(t&4)!==0,st=!Ee&&(e==="scroll"||e==="scrollend"),k=Ee?z!==null?z+"Capture":null:z;Ee=[];for(var w=A,N;w!==null;){var Y=w;if(N=Y.stateNode,Y=Y.tag,Y!==5&&Y!==26&&Y!==27||N===null||k===null||(Y=ql(w,k),Y!=null&&Ee.push(bi(w,Y,N))),st)break;w=w.return}0<Ee.length&&(z=new H(z,ve,null,a,q),Q.push({event:z,listeners:Ee}))}}if((t&7)===0){e:{if(z=e==="mouseover"||e==="pointerover",H=e==="mouseout"||e==="pointerout",z&&a!==vc&&(ve=a.relatedTarget||a.fromElement)&&(Xn(ve)||ve[dt]))break e;if((H||z)&&(z=q.window===q?q:(z=q.ownerDocument)?z.defaultView||z.parentWindow:window,H?(ve=a.relatedTarget||a.toElement,H=A,ve=ve?Xn(ve):null,ve!==null&&(st=x(ve),Ee=ve.tag,ve!==st||Ee!==5&&Ee!==27&&Ee!==6)&&(ve=null)):(H=null,ve=A),H!==ve)){if(Ee=ou,Y="onMouseLeave",k="onMouseEnter",w="mouse",(e==="pointerout"||e==="pointerover")&&(Ee=du,Y="onPointerLeave",k="onPointerEnter",w="pointer"),st=H==null?z:Bl(H),N=ve==null?z:Bl(ve),z=new Ee(Y,w+"leave",H,a,q),z.target=st,z.relatedTarget=N,Y=null,Xn(q)===A&&(Ee=new Ee(k,w+"enter",ve,a,q),Ee.target=N,Ee.relatedTarget=st,Y=Ee),st=Y,H&&ve)t:{for(Ee=ey,k=H,w=ve,N=0,Y=k;Y;Y=Ee(Y))N++;Y=0;for(var Te=w;Te;Te=Ee(Te))Y++;for(;0<N-Y;)k=Ee(k),N--;for(;0<Y-N;)w=Ee(w),Y--;for(;N--;){if(k===w||w!==null&&k===w.alternate){Ee=k;break t}k=Ee(k),w=Ee(w)}Ee=null}else Ee=null;H!==null&&np(Q,z,H,Ee,!1),ve!==null&&st!==null&&np(Q,st,ve,Ee,!0)}}e:{if(z=A?Bl(A):window,H=z.nodeName&&z.nodeName.toLowerCase(),H==="select"||H==="input"&&z.type==="file")var Ze=vu;else if(gu(z))if(Su)Ze=dh;else{Ze=oh;var we=rh}else H=z.nodeName,!H||H.toLowerCase()!=="input"||z.type!=="checkbox"&&z.type!=="radio"?A&&bc(A.elementType)&&(Ze=vu):Ze=uh;if(Ze&&(Ze=Ze(e,A))){bu(Q,Ze,a,q);break e}we&&we(e,z,A),e==="focusout"&&A&&z.type==="number"&&A.memoizedProps.value!=null&&gc(z,"number",z.value)}switch(we=A?Bl(A):window,e){case"focusin":(gu(we)||we.contentEditable==="true")&&(el=we,Oc=A,Vl=null);break;case"focusout":Vl=Oc=el=null;break;case"mousedown":zc=!0;break;case"contextmenu":case"mouseup":case"dragend":zc=!1,Eu(Q,a,q);break;case"selectionchange":if(ph)break;case"keydown":case"keyup":Eu(Q,a,q)}var He;if(Ec)e:{switch(e){case"compositionstart":var Ye="onCompositionStart";break e;case"compositionend":Ye="onCompositionEnd";break e;case"compositionupdate":Ye="onCompositionUpdate";break e}Ye=void 0}else Pn?hu(e,a)&&(Ye="onCompositionEnd"):e==="keydown"&&a.keyCode===229&&(Ye="onCompositionStart");Ye&&(fu&&a.locale!=="ko"&&(Pn||Ye!=="onCompositionStart"?Ye==="onCompositionEnd"&&Pn&&(He=cu()):(Wa=q,_c="value"in Wa?Wa.value:Wa.textContent,Pn=!0)),we=Bs(A,Ye),0<we.length&&(Ye=new uu(Ye,e,null,a,q),Q.push({event:Ye,listeners:we}),He?Ye.data=He:(He=yu(a),He!==null&&(Ye.data=He)))),(He=nh?lh(e,a):ih(e,a))&&(Ye=Bs(A,"onBeforeInput"),0<Ye.length&&(we=new uu("onBeforeInput","beforeinput",null,a,q),Q.push({event:we,listeners:Ye}),we.data=He)),Jh(Q,e,A,a,q)}tp(Q,t)})}function bi(e,t,a){return{instance:e,listener:t,currentTarget:a}}function Bs(e,t){for(var a=t+"Capture",n=[];e!==null;){var l=e,i=l.stateNode;if(l=l.tag,l!==5&&l!==26&&l!==27||i===null||(l=ql(e,a),l!=null&&n.unshift(bi(e,l,i)),l=ql(e,t),l!=null&&n.push(bi(e,l,i))),e.tag===3)return n;e=e.return}return[]}function ey(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5&&e.tag!==27);return e||null}function np(e,t,a,n,l){for(var i=t._reactName,r=[];a!==null&&a!==n;){var u=a,g=u.alternate,A=u.stateNode;if(u=u.tag,g!==null&&g===n)break;u!==5&&u!==26&&u!==27||A===null||(g=A,l?(A=ql(a,i),A!=null&&r.unshift(bi(a,A,g))):l||(A=ql(a,i),A!=null&&r.push(bi(a,A,g)))),a=a.return}r.length!==0&&e.push({event:t,listeners:r})}var ty=/\r\n?/g,ay=/\u0000|\uFFFD/g;function lp(e){return(typeof e=="string"?e:""+e).replace(ty,`
49
+ `).replace(ay,"")}function ip(e,t){return t=lp(t),lp(e)===t}function it(e,t,a,n,l,i){switch(a){case"children":typeof n=="string"?t==="body"||t==="textarea"&&n===""||Jn(e,n):(typeof n=="number"||typeof n=="bigint")&&t!=="body"&&Jn(e,""+n);break;case"className":Gi(e,"class",n);break;case"tabIndex":Gi(e,"tabindex",n);break;case"dir":case"role":case"viewBox":case"width":case"height":Gi(e,a,n);break;case"style":lu(e,n,i);break;case"data":if(t!=="object"){Gi(e,"data",n);break}case"src":case"href":if(n===""&&(t!=="a"||a!=="href")){e.removeAttribute(a);break}if(n==null||typeof n=="function"||typeof n=="symbol"||typeof n=="boolean"){e.removeAttribute(a);break}n=Yi(""+n),e.setAttribute(a,n);break;case"action":case"formAction":if(typeof n=="function"){e.setAttribute(a,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof i=="function"&&(a==="formAction"?(t!=="input"&&it(e,t,"name",l.name,l,null),it(e,t,"formEncType",l.formEncType,l,null),it(e,t,"formMethod",l.formMethod,l,null),it(e,t,"formTarget",l.formTarget,l,null)):(it(e,t,"encType",l.encType,l,null),it(e,t,"method",l.method,l,null),it(e,t,"target",l.target,l,null)));if(n==null||typeof n=="symbol"||typeof n=="boolean"){e.removeAttribute(a);break}n=Yi(""+n),e.setAttribute(a,n);break;case"onClick":n!=null&&(e.onclick=Ma);break;case"onScroll":n!=null&&Le("scroll",e);break;case"onScrollEnd":n!=null&&Le("scrollend",e);break;case"dangerouslySetInnerHTML":if(n!=null){if(typeof n!="object"||!("__html"in n))throw Error(d(61));if(a=n.__html,a!=null){if(l.children!=null)throw Error(d(60));e.innerHTML=a}}break;case"multiple":e.multiple=n&&typeof n!="function"&&typeof n!="symbol";break;case"muted":e.muted=n&&typeof n!="function"&&typeof n!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(n==null||typeof n=="function"||typeof n=="boolean"||typeof n=="symbol"){e.removeAttribute("xlink:href");break}a=Yi(""+n),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":n!=null&&typeof n!="function"&&typeof n!="symbol"?e.setAttribute(a,""+n):e.removeAttribute(a);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":n&&typeof n!="function"&&typeof n!="symbol"?e.setAttribute(a,""):e.removeAttribute(a);break;case"capture":case"download":n===!0?e.setAttribute(a,""):n!==!1&&n!=null&&typeof n!="function"&&typeof n!="symbol"?e.setAttribute(a,n):e.removeAttribute(a);break;case"cols":case"rows":case"size":case"span":n!=null&&typeof n!="function"&&typeof n!="symbol"&&!isNaN(n)&&1<=n?e.setAttribute(a,n):e.removeAttribute(a);break;case"rowSpan":case"start":n==null||typeof n=="function"||typeof n=="symbol"||isNaN(n)?e.removeAttribute(a):e.setAttribute(a,n);break;case"popover":Le("beforetoggle",e),Le("toggle",e),Li(e,"popover",n);break;case"xlinkActuate":za(e,"http://www.w3.org/1999/xlink","xlink:actuate",n);break;case"xlinkArcrole":za(e,"http://www.w3.org/1999/xlink","xlink:arcrole",n);break;case"xlinkRole":za(e,"http://www.w3.org/1999/xlink","xlink:role",n);break;case"xlinkShow":za(e,"http://www.w3.org/1999/xlink","xlink:show",n);break;case"xlinkTitle":za(e,"http://www.w3.org/1999/xlink","xlink:title",n);break;case"xlinkType":za(e,"http://www.w3.org/1999/xlink","xlink:type",n);break;case"xmlBase":za(e,"http://www.w3.org/XML/1998/namespace","xml:base",n);break;case"xmlLang":za(e,"http://www.w3.org/XML/1998/namespace","xml:lang",n);break;case"xmlSpace":za(e,"http://www.w3.org/XML/1998/namespace","xml:space",n);break;case"is":Li(e,"is",n);break;case"innerText":case"textContent":break;default:(!(2<a.length)||a[0]!=="o"&&a[0]!=="O"||a[1]!=="n"&&a[1]!=="N")&&(a=Nm.get(a)||a,Li(e,a,n))}}function lo(e,t,a,n,l,i){switch(a){case"style":lu(e,n,i);break;case"dangerouslySetInnerHTML":if(n!=null){if(typeof n!="object"||!("__html"in n))throw Error(d(61));if(a=n.__html,a!=null){if(l.children!=null)throw Error(d(60));e.innerHTML=a}}break;case"children":typeof n=="string"?Jn(e,n):(typeof n=="number"||typeof n=="bigint")&&Jn(e,""+n);break;case"onScroll":n!=null&&Le("scroll",e);break;case"onScrollEnd":n!=null&&Le("scrollend",e);break;case"onClick":n!=null&&(e.onclick=Ma);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!Ko.hasOwnProperty(a))e:{if(a[0]==="o"&&a[1]==="n"&&(l=a.endsWith("Capture"),t=a.slice(2,l?a.length-7:void 0),i=e[Ie]||null,i=i!=null?i[a]:null,typeof i=="function"&&e.removeEventListener(t,i,l),typeof n=="function")){typeof i!="function"&&i!==null&&(a in e?e[a]=null:e.hasAttribute(a)&&e.removeAttribute(a)),e.addEventListener(t,n,l);break e}a in e?e[a]=n:n===!0?e.setAttribute(a,""):Li(e,a,n)}}}function qt(e,t,a){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":Le("error",e),Le("load",e);var n=!1,l=!1,i;for(i in a)if(a.hasOwnProperty(i)){var r=a[i];if(r!=null)switch(i){case"src":n=!0;break;case"srcSet":l=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(d(137,t));default:it(e,t,i,r,a,null)}}l&&it(e,t,"srcSet",a.srcSet,a,null),n&&it(e,t,"src",a.src,a,null);return;case"input":Le("invalid",e);var u=i=r=l=null,g=null,A=null;for(n in a)if(a.hasOwnProperty(n)){var q=a[n];if(q!=null)switch(n){case"name":l=q;break;case"type":r=q;break;case"checked":g=q;break;case"defaultChecked":A=q;break;case"value":i=q;break;case"defaultValue":u=q;break;case"children":case"dangerouslySetInnerHTML":if(q!=null)throw Error(d(137,t));break;default:it(e,t,n,q,a,null)}}eu(e,i,u,g,A,r,l,!1);return;case"select":Le("invalid",e),n=r=i=null;for(l in a)if(a.hasOwnProperty(l)&&(u=a[l],u!=null))switch(l){case"value":i=u;break;case"defaultValue":r=u;break;case"multiple":n=u;default:it(e,t,l,u,a,null)}t=i,a=r,e.multiple=!!n,t!=null?Kn(e,!!n,t,!1):a!=null&&Kn(e,!!n,a,!0);return;case"textarea":Le("invalid",e),i=l=n=null;for(r in a)if(a.hasOwnProperty(r)&&(u=a[r],u!=null))switch(r){case"value":n=u;break;case"defaultValue":l=u;break;case"children":i=u;break;case"dangerouslySetInnerHTML":if(u!=null)throw Error(d(91));break;default:it(e,t,r,u,a,null)}au(e,n,l,i);return;case"option":for(g in a)if(a.hasOwnProperty(g)&&(n=a[g],n!=null))switch(g){case"selected":e.selected=n&&typeof n!="function"&&typeof n!="symbol";break;default:it(e,t,g,n,a,null)}return;case"dialog":Le("beforetoggle",e),Le("toggle",e),Le("cancel",e),Le("close",e);break;case"iframe":case"object":Le("load",e);break;case"video":case"audio":for(n=0;n<gi.length;n++)Le(gi[n],e);break;case"image":Le("error",e),Le("load",e);break;case"details":Le("toggle",e);break;case"embed":case"source":case"link":Le("error",e),Le("load",e);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(A in a)if(a.hasOwnProperty(A)&&(n=a[A],n!=null))switch(A){case"children":case"dangerouslySetInnerHTML":throw Error(d(137,t));default:it(e,t,A,n,a,null)}return;default:if(bc(t)){for(q in a)a.hasOwnProperty(q)&&(n=a[q],n!==void 0&&lo(e,t,q,n,a,void 0));return}}for(u in a)a.hasOwnProperty(u)&&(n=a[u],n!=null&&it(e,t,u,n,a,null))}function ny(e,t,a,n){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var l=null,i=null,r=null,u=null,g=null,A=null,q=null;for(H in a){var Q=a[H];if(a.hasOwnProperty(H)&&Q!=null)switch(H){case"checked":break;case"value":break;case"defaultValue":g=Q;default:n.hasOwnProperty(H)||it(e,t,H,null,n,Q)}}for(var z in n){var H=n[z];if(Q=a[z],n.hasOwnProperty(z)&&(H!=null||Q!=null))switch(z){case"type":i=H;break;case"name":l=H;break;case"checked":A=H;break;case"defaultChecked":q=H;break;case"value":r=H;break;case"defaultValue":u=H;break;case"children":case"dangerouslySetInnerHTML":if(H!=null)throw Error(d(137,t));break;default:H!==Q&&it(e,t,z,H,n,Q)}}yc(e,r,u,g,A,q,i,l);return;case"select":H=r=u=z=null;for(i in a)if(g=a[i],a.hasOwnProperty(i)&&g!=null)switch(i){case"value":break;case"multiple":H=g;default:n.hasOwnProperty(i)||it(e,t,i,null,n,g)}for(l in n)if(i=n[l],g=a[l],n.hasOwnProperty(l)&&(i!=null||g!=null))switch(l){case"value":z=i;break;case"defaultValue":u=i;break;case"multiple":r=i;default:i!==g&&it(e,t,l,i,n,g)}t=u,a=r,n=H,z!=null?Kn(e,!!a,z,!1):!!n!=!!a&&(t!=null?Kn(e,!!a,t,!0):Kn(e,!!a,a?[]:"",!1));return;case"textarea":H=z=null;for(u in a)if(l=a[u],a.hasOwnProperty(u)&&l!=null&&!n.hasOwnProperty(u))switch(u){case"value":break;case"children":break;default:it(e,t,u,null,n,l)}for(r in n)if(l=n[r],i=a[r],n.hasOwnProperty(r)&&(l!=null||i!=null))switch(r){case"value":z=l;break;case"defaultValue":H=l;break;case"children":break;case"dangerouslySetInnerHTML":if(l!=null)throw Error(d(91));break;default:l!==i&&it(e,t,r,l,n,i)}tu(e,z,H);return;case"option":for(var ve in a)if(z=a[ve],a.hasOwnProperty(ve)&&z!=null&&!n.hasOwnProperty(ve))switch(ve){case"selected":e.selected=!1;break;default:it(e,t,ve,null,n,z)}for(g in n)if(z=n[g],H=a[g],n.hasOwnProperty(g)&&z!==H&&(z!=null||H!=null))switch(g){case"selected":e.selected=z&&typeof z!="function"&&typeof z!="symbol";break;default:it(e,t,g,z,n,H)}return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var Ee in a)z=a[Ee],a.hasOwnProperty(Ee)&&z!=null&&!n.hasOwnProperty(Ee)&&it(e,t,Ee,null,n,z);for(A in n)if(z=n[A],H=a[A],n.hasOwnProperty(A)&&z!==H&&(z!=null||H!=null))switch(A){case"children":case"dangerouslySetInnerHTML":if(z!=null)throw Error(d(137,t));break;default:it(e,t,A,z,n,H)}return;default:if(bc(t)){for(var st in a)z=a[st],a.hasOwnProperty(st)&&z!==void 0&&!n.hasOwnProperty(st)&&lo(e,t,st,void 0,n,z);for(q in n)z=n[q],H=a[q],!n.hasOwnProperty(q)||z===H||z===void 0&&H===void 0||lo(e,t,q,z,n,H);return}}for(var k in a)z=a[k],a.hasOwnProperty(k)&&z!=null&&!n.hasOwnProperty(k)&&it(e,t,k,null,n,z);for(Q in n)z=n[Q],H=a[Q],!n.hasOwnProperty(Q)||z===H||z==null&&H==null||it(e,t,Q,z,n,H)}function sp(e){switch(e){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function ly(){if(typeof performance.getEntriesByType=="function"){for(var e=0,t=0,a=performance.getEntriesByType("resource"),n=0;n<a.length;n++){var l=a[n],i=l.transferSize,r=l.initiatorType,u=l.duration;if(i&&u&&sp(r)){for(r=0,u=l.responseEnd,n+=1;n<a.length;n++){var g=a[n],A=g.startTime;if(A>u)break;var q=g.transferSize,Q=g.initiatorType;q&&sp(Q)&&(g=g.responseEnd,r+=q*(g<u?1:(u-A)/(g-A)))}if(--n,t+=8*(i+r)/(l.duration/1e3),e++,10<e)break}}if(0<e)return t/e/1e6}return navigator.connection&&(e=navigator.connection.downlink,typeof e=="number")?e:5}var io=null,so=null;function qs(e){return e.nodeType===9?e:e.ownerDocument}function cp(e){switch(e){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function rp(e,t){if(e===0)switch(t){case"svg":return 1;case"math":return 2;default:return 0}return e===1&&t==="foreignObject"?0:e}function co(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.children=="bigint"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var ro=null;function iy(){var e=window.event;return e&&e.type==="popstate"?e===ro?!1:(ro=e,!0):(ro=null,!1)}var op=typeof setTimeout=="function"?setTimeout:void 0,sy=typeof clearTimeout=="function"?clearTimeout:void 0,up=typeof Promise=="function"?Promise:void 0,cy=typeof queueMicrotask=="function"?queueMicrotask:typeof up<"u"?function(e){return up.resolve(null).then(e).catch(ry)}:op;function ry(e){setTimeout(function(){throw e})}function hn(e){return e==="head"}function dp(e,t){var a=t,n=0;do{var l=a.nextSibling;if(e.removeChild(a),l&&l.nodeType===8)if(a=l.data,a==="/$"||a==="/&"){if(n===0){e.removeChild(l),Cl(t);return}n--}else if(a==="$"||a==="$?"||a==="$~"||a==="$!"||a==="&")n++;else if(a==="html")vi(e.ownerDocument.documentElement);else if(a==="head"){a=e.ownerDocument.head,vi(a);for(var i=a.firstChild;i;){var r=i.nextSibling,u=i.nodeName;i[Ul]||u==="SCRIPT"||u==="STYLE"||u==="LINK"&&i.rel.toLowerCase()==="stylesheet"||a.removeChild(i),i=r}}else a==="body"&&vi(e.ownerDocument.body);a=l}while(a);Cl(t)}function fp(e,t){var a=e;e=0;do{var n=a.nextSibling;if(a.nodeType===1?t?(a._stashedDisplay=a.style.display,a.style.display="none"):(a.style.display=a._stashedDisplay||"",a.getAttribute("style")===""&&a.removeAttribute("style")):a.nodeType===3&&(t?(a._stashedText=a.nodeValue,a.nodeValue=""):a.nodeValue=a._stashedText||""),n&&n.nodeType===8)if(a=n.data,a==="/$"){if(e===0)break;e--}else a!=="$"&&a!=="$?"&&a!=="$~"&&a!=="$!"||e++;a=n}while(a)}function oo(e){var t=e.firstChild;for(t&&t.nodeType===10&&(t=t.nextSibling);t;){var a=t;switch(t=t.nextSibling,a.nodeName){case"HTML":case"HEAD":case"BODY":oo(a),mc(a);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(a.rel.toLowerCase()==="stylesheet")continue}e.removeChild(a)}}function oy(e,t,a,n){for(;e.nodeType===1;){var l=a;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!n&&(e.nodeName!=="INPUT"||e.type!=="hidden"))break}else if(n){if(!e[Ul])switch(t){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if(i=e.getAttribute("rel"),i==="stylesheet"&&e.hasAttribute("data-precedence"))break;if(i!==l.rel||e.getAttribute("href")!==(l.href==null||l.href===""?null:l.href)||e.getAttribute("crossorigin")!==(l.crossOrigin==null?null:l.crossOrigin)||e.getAttribute("title")!==(l.title==null?null:l.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(i=e.getAttribute("src"),(i!==(l.src==null?null:l.src)||e.getAttribute("type")!==(l.type==null?null:l.type)||e.getAttribute("crossorigin")!==(l.crossOrigin==null?null:l.crossOrigin))&&i&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else if(t==="input"&&e.type==="hidden"){var i=l.name==null?null:""+l.name;if(l.type==="hidden"&&e.getAttribute("name")===i)return e}else return e;if(e=va(e.nextSibling),e===null)break}return null}function uy(e,t,a){if(t==="")return null;for(;e.nodeType!==3;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!a||(e=va(e.nextSibling),e===null))return null;return e}function pp(e,t){for(;e.nodeType!==8;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!t||(e=va(e.nextSibling),e===null))return null;return e}function uo(e){return e.data==="$?"||e.data==="$~"}function fo(e){return e.data==="$!"||e.data==="$?"&&e.ownerDocument.readyState!=="loading"}function dy(e,t){var a=e.ownerDocument;if(e.data==="$~")e._reactRetry=t;else if(e.data!=="$?"||a.readyState!=="loading")t();else{var n=function(){t(),a.removeEventListener("DOMContentLoaded",n)};a.addEventListener("DOMContentLoaded",n),e._reactRetry=n}}function va(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?"||t==="$~"||t==="&"||t==="F!"||t==="F")break;if(t==="/$"||t==="/&")return null}}return e}var po=null;function mp(e){e=e.nextSibling;for(var t=0;e;){if(e.nodeType===8){var a=e.data;if(a==="/$"||a==="/&"){if(t===0)return va(e.nextSibling);t--}else a!=="$"&&a!=="$!"&&a!=="$?"&&a!=="$~"&&a!=="&"||t++}e=e.nextSibling}return null}function hp(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var a=e.data;if(a==="$"||a==="$!"||a==="$?"||a==="$~"||a==="&"){if(t===0)return e;t--}else a!=="/$"&&a!=="/&"||t++}e=e.previousSibling}return null}function yp(e,t,a){switch(t=qs(a),e){case"html":if(e=t.documentElement,!e)throw Error(d(452));return e;case"head":if(e=t.head,!e)throw Error(d(453));return e;case"body":if(e=t.body,!e)throw Error(d(454));return e;default:throw Error(d(451))}}function vi(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);mc(e)}var Sa=new Map,gp=new Set;function Ls(e){return typeof e.getRootNode=="function"?e.getRootNode():e.nodeType===9?e:e.ownerDocument}var Ja=G.d;G.d={f:fy,r:py,D:my,C:hy,L:yy,m:gy,X:vy,S:by,M:Sy};function fy(){var e=Ja.f(),t=As();return e||t}function py(e){var t=Fn(e);t!==null&&t.tag===5&&t.type==="form"?zd(t):Ja.r(e)}var kl=typeof document>"u"?null:document;function bp(e,t,a){var n=kl;if(n&&typeof t=="string"&&t){var l=fa(t);l='link[rel="'+e+'"][href="'+l+'"]',typeof a=="string"&&(l+='[crossorigin="'+a+'"]'),gp.has(l)||(gp.add(l),e={rel:e,crossOrigin:a,href:t},n.querySelector(l)===null&&(t=n.createElement("link"),qt(t,"link",e),Ot(t),n.head.appendChild(t)))}}function my(e){Ja.D(e),bp("dns-prefetch",e,null)}function hy(e,t){Ja.C(e,t),bp("preconnect",e,t)}function yy(e,t,a){Ja.L(e,t,a);var n=kl;if(n&&e&&t){var l='link[rel="preload"][as="'+fa(t)+'"]';t==="image"&&a&&a.imageSrcSet?(l+='[imagesrcset="'+fa(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(l+='[imagesizes="'+fa(a.imageSizes)+'"]')):l+='[href="'+fa(e)+'"]';var i=l;switch(t){case"style":i=jl(e);break;case"script":i=Tl(e)}Sa.has(i)||(e=j({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:e,as:t},a),Sa.set(i,e),n.querySelector(l)!==null||t==="style"&&n.querySelector(Si(i))||t==="script"&&n.querySelector(wi(i))||(t=n.createElement("link"),qt(t,"link",e),Ot(t),n.head.appendChild(t)))}}function gy(e,t){Ja.m(e,t);var a=kl;if(a&&e){var n=t&&typeof t.as=="string"?t.as:"script",l='link[rel="modulepreload"][as="'+fa(n)+'"][href="'+fa(e)+'"]',i=l;switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":i=Tl(e)}if(!Sa.has(i)&&(e=j({rel:"modulepreload",href:e},t),Sa.set(i,e),a.querySelector(l)===null)){switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(wi(i)))return}n=a.createElement("link"),qt(n,"link",e),Ot(n),a.head.appendChild(n)}}}function by(e,t,a){Ja.S(e,t,a);var n=kl;if(n&&e){var l=Vn(n).hoistableStyles,i=jl(e);t=t||"default";var r=l.get(i);if(!r){var u={loading:0,preload:null};if(r=n.querySelector(Si(i)))u.loading=5;else{e=j({rel:"stylesheet",href:e,"data-precedence":t},a),(a=Sa.get(i))&&mo(e,a);var g=r=n.createElement("link");Ot(g),qt(g,"link",e),g._p=new Promise(function(A,q){g.onload=A,g.onerror=q}),g.addEventListener("load",function(){u.loading|=1}),g.addEventListener("error",function(){u.loading|=2}),u.loading|=4,Gs(r,t,n)}r={type:"stylesheet",instance:r,count:1,state:u},l.set(i,r)}}}function vy(e,t){Ja.X(e,t);var a=kl;if(a&&e){var n=Vn(a).hoistableScripts,l=Tl(e),i=n.get(l);i||(i=a.querySelector(wi(l)),i||(e=j({src:e,async:!0},t),(t=Sa.get(l))&&ho(e,t),i=a.createElement("script"),Ot(i),qt(i,"link",e),a.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},n.set(l,i))}}function Sy(e,t){Ja.M(e,t);var a=kl;if(a&&e){var n=Vn(a).hoistableScripts,l=Tl(e),i=n.get(l);i||(i=a.querySelector(wi(l)),i||(e=j({src:e,async:!0,type:"module"},t),(t=Sa.get(l))&&ho(e,t),i=a.createElement("script"),Ot(i),qt(i,"link",e),a.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},n.set(l,i))}}function vp(e,t,a,n){var l=(l=ye.current)?Ls(l):null;if(!l)throw Error(d(446));switch(e){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=jl(a.href),a=Vn(l).hoistableStyles,n=a.get(t),n||(n={type:"style",instance:null,count:0,state:null},a.set(t,n)),n):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){e=jl(a.href);var i=Vn(l).hoistableStyles,r=i.get(e);if(r||(l=l.ownerDocument||l,r={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},i.set(e,r),(i=l.querySelector(Si(e)))&&!i._p&&(r.instance=i,r.state.loading=5),Sa.has(e)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},Sa.set(e,a),i||wy(l,e,a,r.state))),t&&n===null)throw Error(d(528,""));return r}if(t&&n!==null)throw Error(d(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Tl(a),a=Vn(l).hoistableScripts,n=a.get(t),n||(n={type:"script",instance:null,count:0,state:null},a.set(t,n)),n):{type:"void",instance:null,count:0,state:null};default:throw Error(d(444,e))}}function jl(e){return'href="'+fa(e)+'"'}function Si(e){return'link[rel="stylesheet"]['+e+"]"}function Sp(e){return j({},e,{"data-precedence":e.precedence,precedence:null})}function wy(e,t,a,n){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?n.loading=1:(t=e.createElement("link"),n.preload=t,t.addEventListener("load",function(){return n.loading|=1}),t.addEventListener("error",function(){return n.loading|=2}),qt(t,"link",a),Ot(t),e.head.appendChild(t))}function Tl(e){return'[src="'+fa(e)+'"]'}function wi(e){return"script[async]"+e}function wp(e,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var n=e.querySelector('style[data-href~="'+fa(a.href)+'"]');if(n)return t.instance=n,Ot(n),n;var l=j({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return n=(e.ownerDocument||e).createElement("style"),Ot(n),qt(n,"style",l),Gs(n,a.precedence,e),t.instance=n;case"stylesheet":l=jl(a.href);var i=e.querySelector(Si(l));if(i)return t.state.loading|=4,t.instance=i,Ot(i),i;n=Sp(a),(l=Sa.get(l))&&mo(n,l),i=(e.ownerDocument||e).createElement("link"),Ot(i);var r=i;return r._p=new Promise(function(u,g){r.onload=u,r.onerror=g}),qt(i,"link",n),t.state.loading|=4,Gs(i,a.precedence,e),t.instance=i;case"script":return i=Tl(a.src),(l=e.querySelector(wi(i)))?(t.instance=l,Ot(l),l):(n=a,(l=Sa.get(i))&&(n=j({},a),ho(n,l)),e=e.ownerDocument||e,l=e.createElement("script"),Ot(l),qt(l,"link",n),e.head.appendChild(l),t.instance=l);case"void":return null;default:throw Error(d(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(n=t.instance,t.state.loading|=4,Gs(n,a.precedence,e));return t.instance}function Gs(e,t,a){for(var n=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),l=n.length?n[n.length-1]:null,i=l,r=0;r<n.length;r++){var u=n[r];if(u.dataset.precedence===t)i=u;else if(i!==l)break}i?i.parentNode.insertBefore(e,i.nextSibling):(t=a.nodeType===9?a.head:a,t.insertBefore(e,t.firstChild))}function mo(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.title==null&&(e.title=t.title)}function ho(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.integrity==null&&(e.integrity=t.integrity)}var $s=null;function xp(e,t,a){if($s===null){var n=new Map,l=$s=new Map;l.set(a,n)}else l=$s,n=l.get(a),n||(n=new Map,l.set(a,n));if(n.has(e))return n;for(n.set(e,null),a=a.getElementsByTagName(e),l=0;l<a.length;l++){var i=a[l];if(!(i[Ul]||i[nt]||e==="link"&&i.getAttribute("rel")==="stylesheet")&&i.namespaceURI!=="http://www.w3.org/2000/svg"){var r=i.getAttribute(t)||"";r=e+r;var u=n.get(r);u?u.push(i):n.set(r,[i])}}return n}function _p(e,t,a){e=e.ownerDocument||e,e.head.insertBefore(a,t==="title"?e.querySelector("head > title"):null)}function xy(e,t,a){if(a===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 kp(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function _y(e,t,a,n){if(a.type==="stylesheet"&&(typeof n.media!="string"||matchMedia(n.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var l=jl(n.href),i=t.querySelector(Si(l));if(i){t=i._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Ys.bind(e),t.then(e,e)),a.state.loading|=4,a.instance=i,Ot(i);return}i=t.ownerDocument||t,n=Sp(n),(l=Sa.get(l))&&mo(n,l),i=i.createElement("link"),Ot(i);var r=i;r._p=new Promise(function(u,g){r.onload=u,r.onerror=g}),qt(i,"link",n),a.instance=i}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(e.count++,a=Ys.bind(e),t.addEventListener("load",a),t.addEventListener("error",a))}}var yo=0;function ky(e,t){return e.stylesheets&&e.count===0&&Xs(e,e.stylesheets),0<e.count||0<e.imgCount?function(a){var n=setTimeout(function(){if(e.stylesheets&&Xs(e,e.stylesheets),e.unsuspend){var i=e.unsuspend;e.unsuspend=null,i()}},6e4+t);0<e.imgBytes&&yo===0&&(yo=62500*ly());var l=setTimeout(function(){if(e.waitingForImages=!1,e.count===0&&(e.stylesheets&&Xs(e,e.stylesheets),e.unsuspend)){var i=e.unsuspend;e.unsuspend=null,i()}},(e.imgBytes>yo?50:800)+t);return e.unsuspend=a,function(){e.unsuspend=null,clearTimeout(n),clearTimeout(l)}}:null}function Ys(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xs(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Qs=null;function Xs(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Qs=new Map,t.forEach(jy,e),Qs=null,Ys.call(e))}function jy(e,t){if(!(t.state.loading&4)){var a=Qs.get(e);if(a)var n=a.get(null);else{a=new Map,Qs.set(e,a);for(var l=e.querySelectorAll("link[data-precedence],style[data-precedence]"),i=0;i<l.length;i++){var r=l[i];(r.nodeName==="LINK"||r.getAttribute("media")!=="not all")&&(a.set(r.dataset.precedence,r),n=r)}n&&a.set(null,n)}l=t.instance,r=l.getAttribute("data-precedence"),i=a.get(r)||n,i===n&&a.set(null,l),a.set(r,l),this.count++,n=Ys.bind(this),l.addEventListener("load",n),l.addEventListener("error",n),i?i.parentNode.insertBefore(l,i.nextSibling):(e=e.nodeType===9?e.head:e,e.insertBefore(l,e.firstChild)),t.state.loading|=4}}var xi={$$typeof:oe,Provider:null,Consumer:null,_currentValue:U,_currentValue2:U,_threadCount:0};function Ty(e,t,a,n,l,i,r,u,g){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=Qn(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Qn(0),this.hiddenUpdates=Qn(null),this.identifierPrefix=n,this.onUncaughtError=l,this.onCaughtError=i,this.onRecoverableError=r,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=g,this.incompleteTransitions=new Map}function jp(e,t,a,n,l,i,r,u,g,A,q,Q){return e=new Ty(e,t,a,r,g,A,q,Q,u),t=1,i===!0&&(t|=24),i=Pt(3,null,null,t),e.current=i,i.stateNode=e,t=Zc(),t.refCount++,e.pooledCache=t,t.refCount++,i.memoizedState={element:n,isDehydrated:a,cache:t},Ic(i),e}function Tp(e){return e?(e=nl,e):nl}function Cp(e,t,a,n,l,i){l=Tp(l),n.context===null?n.context=l:n.pendingContext=l,n=nn(t),n.payload={element:a},i=i===void 0?null:i,i!==null&&(n.callback=i),a=ln(e,n,t),a!==null&&(Kt(a,e,t),ei(a,e,t))}function Ep(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var a=e.retryLane;e.retryLane=a!==0&&a<t?a:t}}function go(e,t){Ep(e,t),(e=e.alternate)&&Ep(e,t)}function Dp(e){if(e.tag===13||e.tag===31){var t=Cn(e,67108864);t!==null&&Kt(t,e,67108864),go(e,67108864)}}function Np(e){if(e.tag===13||e.tag===31){var t=la();t=ie(t);var a=Cn(e,t);a!==null&&Kt(a,e,t),go(e,t)}}var Fs=!0;function Cy(e,t,a,n){var l=E.T;E.T=null;var i=G.p;try{G.p=2,bo(e,t,a,n)}finally{G.p=i,E.T=l}}function Ey(e,t,a,n){var l=E.T;E.T=null;var i=G.p;try{G.p=8,bo(e,t,a,n)}finally{G.p=i,E.T=l}}function bo(e,t,a,n){if(Fs){var l=vo(n);if(l===null)no(e,t,n,Vs,a),Op(e,n);else if(Ny(l,e,t,a,n))n.stopPropagation();else if(Op(e,n),t&4&&-1<Dy.indexOf(e)){for(;l!==null;){var i=Fn(l);if(i!==null)switch(i.tag){case 3:if(i=i.stateNode,i.current.memoizedState.isDehydrated){var r=At(i.pendingLanes);if(r!==0){var u=i;for(u.pendingLanes|=2,u.entangledLanes|=2;r;){var g=1<<31-he(r);u.entanglements[1]|=g,r&=~g}Aa(i),(Je&6)===0&&(Ds=gt()+500,yi(0))}}break;case 31:case 13:u=Cn(i,2),u!==null&&Kt(u,i,2),As(),go(i,2)}if(i=vo(n),i===null&&no(e,t,n,Vs,a),i===l)break;l=i}l!==null&&n.stopPropagation()}else no(e,t,n,null,a)}}function vo(e){return e=Sc(e),So(e)}var Vs=null;function So(e){if(Vs=null,e=Xn(e),e!==null){var t=x(e);if(t===null)e=null;else{var a=t.tag;if(a===13){if(e=b(t),e!==null)return e;e=null}else if(a===31){if(e=O(t),e!==null)return e;e=null}else if(a===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return Vs=e,null}function Ap(e){switch(e){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(V()){case ce:return 2;case me:return 8;case ue:case ze:return 32;case Xe:return 268435456;default:return 32}default:return 32}}var wo=!1,yn=null,gn=null,bn=null,_i=new Map,ki=new Map,vn=[],Dy="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function Op(e,t){switch(e){case"focusin":case"focusout":yn=null;break;case"dragenter":case"dragleave":gn=null;break;case"mouseover":case"mouseout":bn=null;break;case"pointerover":case"pointerout":_i.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ki.delete(t.pointerId)}}function ji(e,t,a,n,l,i){return e===null||e.nativeEvent!==i?(e={blockedOn:t,domEventName:a,eventSystemFlags:n,nativeEvent:i,targetContainers:[l]},t!==null&&(t=Fn(t),t!==null&&Dp(t)),e):(e.eventSystemFlags|=n,t=e.targetContainers,l!==null&&t.indexOf(l)===-1&&t.push(l),e)}function Ny(e,t,a,n,l){switch(t){case"focusin":return yn=ji(yn,e,t,a,n,l),!0;case"dragenter":return gn=ji(gn,e,t,a,n,l),!0;case"mouseover":return bn=ji(bn,e,t,a,n,l),!0;case"pointerover":var i=l.pointerId;return _i.set(i,ji(_i.get(i)||null,e,t,a,n,l)),!0;case"gotpointercapture":return i=l.pointerId,ki.set(i,ji(ki.get(i)||null,e,t,a,n,l)),!0}return!1}function zp(e){var t=Xn(e.target);if(t!==null){var a=x(t);if(a!==null){if(t=a.tag,t===13){if(t=b(a),t!==null){e.blockedOn=t,We(e.priority,function(){Np(a)});return}}else if(t===31){if(t=O(a),t!==null){e.blockedOn=t,We(e.priority,function(){Np(a)});return}}else if(t===3&&a.stateNode.current.memoizedState.isDehydrated){e.blockedOn=a.tag===3?a.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Zs(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var a=vo(e.nativeEvent);if(a===null){a=e.nativeEvent;var n=new a.constructor(a.type,a);vc=n,a.target.dispatchEvent(n),vc=null}else return t=Fn(a),t!==null&&Dp(t),e.blockedOn=a,!1;t.shift()}return!0}function Mp(e,t,a){Zs(e)&&a.delete(t)}function Ay(){wo=!1,yn!==null&&Zs(yn)&&(yn=null),gn!==null&&Zs(gn)&&(gn=null),bn!==null&&Zs(bn)&&(bn=null),_i.forEach(Mp),ki.forEach(Mp)}function Ks(e,t){e.blockedOn===t&&(e.blockedOn=null,wo||(wo=!0,c.unstable_scheduleCallback(c.unstable_NormalPriority,Ay)))}var Js=null;function Rp(e){Js!==e&&(Js=e,c.unstable_scheduleCallback(c.unstable_NormalPriority,function(){Js===e&&(Js=null);for(var t=0;t<e.length;t+=3){var a=e[t],n=e[t+1],l=e[t+2];if(typeof n!="function"){if(So(n||a)===null)continue;break}var i=Fn(a);i!==null&&(e.splice(t,3),t-=3,br(i,{pending:!0,data:l,method:a.method,action:n},n,l))}}))}function Cl(e){function t(g){return Ks(g,e)}yn!==null&&Ks(yn,e),gn!==null&&Ks(gn,e),bn!==null&&Ks(bn,e),_i.forEach(t),ki.forEach(t);for(var a=0;a<vn.length;a++){var n=vn[a];n.blockedOn===e&&(n.blockedOn=null)}for(;0<vn.length&&(a=vn[0],a.blockedOn===null);)zp(a),a.blockedOn===null&&vn.shift();if(a=(e.ownerDocument||e).$$reactFormReplay,a!=null)for(n=0;n<a.length;n+=3){var l=a[n],i=a[n+1],r=l[Ie]||null;if(typeof i=="function")r||Rp(a);else if(r){var u=null;if(i&&i.hasAttribute("formAction")){if(l=i,r=i[Ie]||null)u=r.formAction;else if(So(l)!==null)continue}else u=r.action;typeof u=="function"?a[n+1]=u:(a.splice(n,3),n-=3),Rp(a)}}}function Hp(){function e(i){i.canIntercept&&i.info==="react-transition"&&i.intercept({handler:function(){return new Promise(function(r){return l=r})},focusReset:"manual",scroll:"manual"})}function t(){l!==null&&(l(),l=null),n||setTimeout(a,20)}function a(){if(!n&&!navigation.transition){var i=navigation.currentEntry;i&&i.url!=null&&navigation.navigate(i.url,{state:i.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var n=!1,l=null;return navigation.addEventListener("navigate",e),navigation.addEventListener("navigatesuccess",t),navigation.addEventListener("navigateerror",t),setTimeout(a,100),function(){n=!0,navigation.removeEventListener("navigate",e),navigation.removeEventListener("navigatesuccess",t),navigation.removeEventListener("navigateerror",t),l!==null&&(l(),l=null)}}}function xo(e){this._internalRoot=e}Ws.prototype.render=xo.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(d(409));var a=t.current,n=la();Cp(a,n,e,t,null,null)},Ws.prototype.unmount=xo.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;Cp(e.current,2,null,e,null,null),As(),t[dt]=null}};function Ws(e){this._internalRoot=e}Ws.prototype.unstable_scheduleHydration=function(e){if(e){var t=pe();e={blockedOn:null,target:e,priority:t};for(var a=0;a<vn.length&&t!==0&&t<vn[a].priority;a++);vn.splice(a,0,e),a===0&&zp(e)}};var Up=f.version;if(Up!=="19.2.6")throw Error(d(527,Up,"19.2.6"));G.findDOMNode=function(e){var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(d(188)):(e=Object.keys(e).join(","),Error(d(268,e)));return e=h(t),e=e!==null?D(e):null,e=e===null?null:e.stateNode,e};var Oy={bundleType:0,version:"19.2.6",rendererPackageName:"react-dom",currentDispatcherRef:E,reconcilerVersion:"19.2.6"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Is=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Is.isDisabled&&Is.supportsFiber)try{I=Is.inject(Oy),ge=Is}catch{}}return Ci.createRoot=function(e,t){if(!S(e))throw Error(d(299));var a=!1,n="",l=Yd,i=Qd,r=Xd;return t!=null&&(t.unstable_strictMode===!0&&(a=!0),t.identifierPrefix!==void 0&&(n=t.identifierPrefix),t.onUncaughtError!==void 0&&(l=t.onUncaughtError),t.onCaughtError!==void 0&&(i=t.onCaughtError),t.onRecoverableError!==void 0&&(r=t.onRecoverableError)),t=jp(e,1,!1,null,null,a,n,null,l,i,r,Hp),e[dt]=t.current,ao(e),new xo(t)},Ci.hydrateRoot=function(e,t,a){if(!S(e))throw Error(d(299));var n=!1,l="",i=Yd,r=Qd,u=Xd,g=null;return a!=null&&(a.unstable_strictMode===!0&&(n=!0),a.identifierPrefix!==void 0&&(l=a.identifierPrefix),a.onUncaughtError!==void 0&&(i=a.onUncaughtError),a.onCaughtError!==void 0&&(r=a.onCaughtError),a.onRecoverableError!==void 0&&(u=a.onRecoverableError),a.formState!==void 0&&(g=a.formState)),t=jp(e,1,!0,t,a??null,n,l,g,i,r,u,Hp),t.context=Tp(null),a=t.current,n=la(),n=ie(n),l=nn(n),l.callback=null,ln(a,l,n),a=n,t.current.lanes=a,Oa(t,a),Aa(t),e[dt]=t.current,ao(e),new Ws(t)},Ci.version="19.2.6",Ci}var Vp;function Gy(){if(Vp)return ko.exports;Vp=1;function c(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(f){console.error(f)}}return c(),ko.exports=Ly(),ko.exports}var $y=Gy(),y=Qo(),Wt=hm();const ym="0.2";function Yy(c){let f=Zp[c]||Zp.en;for(const m of[`
50
+ ---
51
+
52
+ > **实施备注`,`
53
+ ---
54
+
55
+ > **Implementation notes`]){const d=f.indexOf(m);d!==-1&&(f=f.slice(0,d))}return f=f.replace(/\n>\s*(首次启动展示|Shown on first launch)[\s\S]*?\n---\n/,`
56
+
57
+ `),f=f.replace(/\n##\s*(一眼看懂|At a glance)[\s\S]*?\n---\n/,`
58
+ `),f.trim()}const Zp={"zh-CN":`# CiCy Desktop 用户协议与授权说明
59
+
60
+ > 首次启动展示 · 草案 v0.2 · 2026-06-07
61
+ > **本协议为使用本软件的前提:你必须阅读并点击"同意并继续"后,方可使用 CiCy Desktop。**
62
+ > (内部草案,非最终法律文本;正式发布前须经中、欧两地持牌律师审定。本文同时作为应用内首启条款的内容源。)
63
+
64
+ ---
65
+
66
+ ## 一眼看懂(你点"同意"即代表接受以下要点)
67
+
68
+ 1. **CiCy Desktop 是在你自己电脑上运行的 AI Agent 编排工具**,帮你调度第三方 AI 助手(Claude Code、Codex、Gemini 等)完成工作。
69
+ 2. **第三方 AI 与账号是你和对应厂商之间的事**:用哪个 AI、用谁的账号、产生的用量与费用,由你决定并承担,与 CiCy 无关。
70
+ 3. **为完成工作,本软件需要一系列对你电脑的授权**(运行程序、执行脚本、控制浏览器、访问文件等)。下面第 3 条逐项讲清,**你对经本软件发起的操作负全部责任**。
71
+ 4. **你的数据默认留在本机**,CiCy 不以运营为目的上传你的工作内容。
72
+ 5. **两项高风险能力需要你单独、额外授权**,默认关闭:**(a) HTTPS 流量本地审计(需装证书、需管理员)**、**(b) 本机命令/脚本执行**。整体同意本协议**不等于**开启它们。
73
+ 6. **严禁**用本软件控制未授权设备、违法多账号/刷量、绕过平台风控、违规抓取等。
74
+
75
+ > 不接受以上任一条,请点击"不同意并退出"。**未同意则无法使用本软件。**
76
+
77
+ ---
78
+
79
+ ## 1. 关于 CiCy Desktop
80
+
81
+ 1.1 CiCy Desktop(下称"本软件")是一款在你本地设备运行的 AI Agent 编排与自动化工具,用于组织、调度第三方 AI 命令行/客户端(如 Claude Code、OpenAI Codex、Google Gemini CLI 等,下称"第三方 Agent")协同完成任务。
82
+
83
+ 1.2 本软件本身**不提供大模型推理服务**,也不内置任何用于规避地域限制的跨境网络通道。模型能力由你选择的后端提供。
84
+
85
+ ## 2. 第三方 Agent 与账号(免责)
86
+
87
+ 2.1 你可在本软件中接入第三方 Agent。**你与第三方 Agent 及其模型/服务提供商之间的关系(账号注册、登录、授权、用量、计费、合规)由你与该提供商直接建立并承担,与 CiCy 无关。**
88
+
89
+ 2.2 **官方登录责任自负**:若你以第三方提供商的官方账号登录其 Agent,该行为及其后果(包括是否符合该提供商所在地与你所在地的可用性政策)由你自行负责。CiCy 不引导、不代理、不内置任何专用于规避地域限制的网络通道。
90
+
91
+ 2.3 你须遵守你所接入的每一个第三方 Agent 与模型服务的用户协议与使用政策。
92
+
93
+ ---
94
+
95
+ ## 3. 授权说明(本软件需要你授予的权限)
96
+
97
+ > 为让 AI Agent 替你完成工作,本软件需要下列对你设备的授权。我们按风险高低分为三类,并说明每项的**用途、作用范围、风险、能否撤销**。**透明披露是本协议的核心。**
98
+
99
+ ### 3A. 基础授权(同意本协议即授予,为软件运行所必需)
100
+
101
+ | 授权 | 用途 | 范围与限制 | 可否撤销 |
102
+ |---|---|---|---|
103
+ | **本地文件读写** | 读写工作区、配置、任务历史 | 限于本软件工作目录及你在任务中明确指向的文件 | 卸载软件即终止 |
104
+ | **运行第三方 Agent** | 在你电脑上启动 claude/codex/gemini 等子进程 | 仅运行你已接入的 Agent | 移除对应 Agent |
105
+ | **本地数据存储** | 保存审计/历史/配置于本机 | 数据留本机,不上传 | 可在设置清除 |
106
+ | **读取系统与窗口信息** | 调度、展示运行状态 | OS/硬件概要、窗口列表;不含文件内容 | 卸载即终止 |
107
+ | **本机网络访问** | 代表你向你选择的模型后端/服务发起请求 | 按你的配置出网;不内置规避地域限制的通道 | 可在设置关闭联网功能 |
108
+
109
+ ### 3B. 高风险授权(默认关闭,需你**单独、额外**同意后才启用)
110
+
111
+ > 整体同意本协议**不会**自动开启以下任何一项。每项都需要你在应用内单独操作开启,并可随时关闭。
112
+
113
+ **① 本机命令与脚本执行**
114
+ - **用途**:让 AI Agent 能在你电脑上执行 shell / Python / Node 脚本,以完成自动化任务。
115
+ - **风险(请认真阅读)**:这等同于授予程序在你电脑上**运行代码的能力**。请仅在你信任的任务场景启用。
116
+ - **门控与保护**:仅作用于**本机**;全部执行写入本地审计留痕;对高危命令可设二次确认。
117
+ - **撤销**:可在设置中关闭执行能力。
118
+
119
+ **② 远程编排配对**
120
+ - **用途**:允许你**显式配对**的编排端(可能运行在云端或另一台设备)通过安全信道驱动本机 Agent,实现远程协作调度。
121
+ - **风险**:配对后,远程编排端可触发上述本机能力。
122
+ - **门控与保护**:**仅连接你显式配对、授权令牌可随时吊销**的编排端;绝不静默安装、绝不自我传播;你可解除配对立即断开。
123
+ - **撤销**:解除配对 / 吊销令牌。
124
+
125
+ **③ 系统根证书信任库写入(需管理员授权)**
126
+ - **用途**:为下方第 4 条的 HTTPS 流量本地审计所必需——将一张**仅属于本机**的审计证书装入系统信任库。
127
+ - **风险**:写入系统信任根是高敏感操作,故需管理员授权,且本软件**绝不**预置或分发统一证书(详见第 4 条)。
128
+ - **撤销**:\`uninstall-ca\` 一键卸载并清除同意标记。
129
+
130
+ **④ HTTPS 流量本地审计** —— 见第 4 条专章。
131
+
132
+ ### 3C. 任务执行中按需使用的授权(可在设置中逐项关闭)
133
+
134
+ | 授权 | 用途 | 范围与限制 |
135
+ |---|---|---|
136
+ | **浏览器控制** | 打开/导航网页、在你授权的浏览器会话中读取页面或注入脚本、读写 Cookie | 仅作用于本软件管理或你授权的浏览器会话 |
137
+ | **剪贴板读写** | 在自动化流程中传递文本 | 按任务需要;可关闭 |
138
+ | **屏幕/窗口截图** | 让 Agent"看见"界面以完成操作 | 截图留本机,不上传 |
139
+ | **多账号隔离 + 每账号代理** | 为不同身份隔离 Cookie/存储/出口 IP(如多店运营、多客户隔离交付) | **仅供合法的多账号管理;不得用于违法养号、刷量或对抗平台风控**(见第 5 条) |
140
+
141
+ ---
142
+
143
+ ## 4. HTTPS 流量本地审计(可选 · 默认关闭 · 需显式同意 · 需管理员)
144
+
145
+ 4.1 本软件提供可选的"HTTPS 流量本地审计"功能,用于对**你本机**发往 AI 厂商(如 Claude / OpenAI / DeepSeek / Gemini)的加密请求进行本地安全审计、敏感信息脱敏与策略治理。
146
+
147
+ 4.2 **该功能默认关闭。** 仅当你在应用内主动点击启用、并完成管理员授权后才生效。启用时:
148
+ - 本软件在你本机生成一张**仅属于本机、独一无二**的审计证书(绝不使用预置或跨设备共用的证书),并请求装入本机系统信任库;
149
+ - 安装后,你本机到上述 **AI 厂商域名**的 HTTPS 流量将被本地解密以供审计;**解密范围严格限于这些 AI 厂商域名;其余一切流量(网银、社交、其他网站等)不被解密、不被读取**;
150
+ - **解密后的数据仅保存在你本机**,不上传至任何服务器。
151
+
152
+ 4.3 **可随时撤销**:你可在设置中关闭该功能并卸载证书(\`uninstall-ca\`),撤销后不再解密任何流量,同意标记一并清除。
153
+
154
+ 4.4 **多用户/团队场景的告知义务**:若你将本软件部署于供多人使用的设备或环境,并对他人流量启用审计,则你(部署方)须自行、事先向相关人员明确告知并取得同意,且仅限经营管理之必要范围。该告知与同意义务由你承担。
155
+
156
+ ## 5. 自动化与设备控制的合法使用(用户责任)
157
+
158
+ 5.1 本软件第 3 条所述能力均为通用自动化/RPA 工具能力。
159
+
160
+ 5.2 **授权边界**:这些能力仅可作用于**你本人拥有或已获明确授权**的设备与账号。**严禁**访问或控制你无权限的计算机系统。
161
+
162
+ 5.3 **禁止用途**,包括但不限于:
163
+ - (a) 入侵、非法控制、干扰他人计算机信息系统;
164
+ - (b) 违反平台规则的批量注册、刷量、刷单、薅羊毛及其他违法多账号行为;
165
+ - (c) 绕过、对抗目标平台的风控或技术保护措施;
166
+ - (d) 违反目标网站 robots 协议、用户条款或法律的数据抓取;
167
+ - (e) 无合法依据抓取或处理他人个人信息;
168
+ - (f) 任何违反你所在地或目标对象所在地法律法规的行为。
169
+
170
+ 5.4 **你对经由本软件发起的全部操作及其后果承担全部责任。** CiCy 仅提供通用工具能力,不对你的具体使用方式负责;若你的使用导致第三方索赔或行政/刑事追究,由你承担并使 CiCy 免责。
171
+
172
+ ## 6. 个人信息与隐私
173
+
174
+ 6.1 本软件遵循本地优先、最小必要原则处理数据,不以运营为目的收集上传你的工作内容。
175
+
176
+ 6.2 当你在涉及个人信息的场景使用本软件(对含个人信息的流量审计、抓取或处理),在适用《个人信息保护法》(中国)、GDPR(欧盟)等法律时,**你或你所属组织可能构成个人信息处理者 / 数据控制者**,须自行履行相应义务(告知同意、处理记录、数据主体权利响应、必要时的数据保护影响评估与泄露通报等)。
177
+
178
+ 6.3 涉及欧盟个人数据出境的,须具备 GDPR 第五章要求的合法传输机制(如标准合同条款 SCC)与你的明确同意。
179
+
180
+ 6.4 **按地区选择模型后端**:为符合不同司法辖区法律,本软件按你所在地区选择默认模型后端(例如中国大陆用户默认使用已在中国境内备案的模型服务);跨境传输个人数据须经你单独明确同意。
181
+
182
+ ## 7. AI 生成内容
183
+
184
+ 7.1 你使用本软件及第三方 Agent 生成的内容,须遵守你所在地关于 AI 生成合成内容标识的法律义务(如中国《人工智能生成合成内容标识办法》、欧盟 AI Act 的透明度要求)。CiCy 在适用范围内提供标识/披露能力,但合规使用责任在你。
185
+
186
+ ## 8. 合规与适用法域
187
+
188
+ 8.1 你须遵守你所在地、以及你的操作所指向对象所在地的全部适用法律、法规与平台条款,**尤其包括中国与欧盟的相关规定**。
189
+
190
+ 8.2 本软件按"法域感知"原则对不同地区适用不同默认与限制,但这不免除你自行确保合规的责任。
191
+
192
+ ## 9. 免责声明与责任限制
193
+
194
+ 9.1 本软件按"现状"提供,在适用法律允许的最大范围内,不作适销性、特定用途适用性的默示担保。
195
+
196
+ 9.2 在适用法律允许的最大范围内,对于你违反本条款,或因你使用第三方 Agent / 自动化能力 / 审计功能产生的任何直接或间接损失、第三方索赔、行政或刑事责任,CiCy 不承担责任,且你应使 CiCy 免受相关追偿。
197
+
198
+ 9.3 本条款不排除或限制依强制性法律不可排除的责任(如人身伤害或欺诈责任)。
199
+
200
+ ## 10. 同意与生效
201
+
202
+ 10.1 **本协议是使用本软件的前提。** 点击"同意并继续",即表示你已阅读、理解并接受本协议全部条款;点击"不同意并退出"或不作选择的,**无法使用本软件**。
203
+
204
+ 10.2 第 3B 条高风险授权(本机命令/脚本执行、远程编排配对、根证书写入)与第 4 条 HTTPS 审计,**需你在应用内单独操作开启**;你对本协议的整体同意**不构成**对这些功能的启用。
205
+
206
+ 10.3 你可随时在设置中查看、关闭或撤销第 3 条所列各项授权。
207
+
208
+ ---
209
+
210
+ > **实施备注(非条款,给产品/法务):**
211
+ > - 首启 = 阻断式条款:展示"一眼看懂"6 条 + "同意并继续 / 不同意并退出";未同意不进主界面。完整条款可展开/外链。
212
+ > - **第二道独立同意**:第 4 条审计 = w-10026 的同意卡片三态(未授权/已授权/处理中);第 3B① 执行能力、3B② 远程配对建议也各设独立开关与首用确认。
213
+ > - 后端门控:第 4 条对应 w-10084 的 \`~/cicy-ai/mitm/ca-trust-consent\` flag + \`exec cicy-code mitm install-ca/uninstall-ca\`。
214
+ > - 容器/无头部署:\`CICY_CA_TRUST_CONSENT=1\` 逃生门 = "设置该环境变量即代表部署方代表其环境作出第 4.4 条告知同意",责任落部署方;须写入部署文档。
215
+ > - 正式版:中文 + 英文(欧盟)双语;按法域分版本可能调整第 3C/6/8 条措辞;高风险授权建议保留**用户可撤销的审计日志**作为同意证据。
216
+ `,en:`# CiCy Desktop — Terms of Use & Authorization Notice
217
+
218
+ > Shown on first launch · Draft v0.2 · 2026-06-07
219
+ > **Acceptance of these Terms is a precondition to using the software: you must read and click "Agree and continue" before you can use CiCy Desktop.**
220
+ > (Internal draft, not final legal text; must be reviewed by licensed counsel in both China and the EU before public release. This document also serves as the content source for the in-app first-launch terms.)
221
+
222
+ ---
223
+
224
+ ## At a glance (clicking "Agree" means you accept the following)
225
+
226
+ 1. **CiCy Desktop is an AI agent orchestration tool that runs on your own computer**, helping you coordinate third-party AI assistants (Claude Code, Codex, Gemini, etc.) to get work done.
227
+ 2. **Third-party AI and accounts are between you and the respective provider**: which AI you use, whose account you log in with, and the resulting usage and fees are your decision and your responsibility — not CiCy's.
228
+ 3. **To do the work, the software needs a range of authorizations on your computer** (running programs, executing scripts, controlling the browser, accessing files, etc.). These are explained item by item in Section 3. **You are fully responsible for the operations initiated through the software.**
229
+ 4. **Your data stays on your machine by default.** CiCy does not upload your work content for operational purposes.
230
+ 5. **Two high-risk capabilities require your separate, additional authorization and are off by default**: **(a) local HTTPS traffic auditing (installs a certificate, requires administrator)** and **(b) local command/script execution**. Accepting these Terms as a whole does **not** turn them on.
231
+ 6. **You must not** use the software to control unauthorized devices, conduct unlawful multi-accounting / traffic faking, circumvent platform risk controls, or scrape in violation of terms.
232
+
233
+ > If you do not accept any of the above, please click "Decline and exit." **Without acceptance, you cannot use the software.**
234
+
235
+ ---
236
+
237
+ ## 1. About CiCy Desktop
238
+
239
+ 1.1 CiCy Desktop (the "Software") is an AI agent orchestration and automation tool that runs on your local device, used to organize and coordinate third-party AI command-line tools / clients (such as Claude Code, OpenAI Codex, Google Gemini CLI, etc., the "Third-Party Agents") to complete tasks collaboratively.
240
+
241
+ 1.2 The Software itself **does not provide large-model inference services**, nor does it embed any cross-border network channel designed to circumvent regional restrictions. Model capabilities are provided by the backend you choose.
242
+
243
+ ## 2. Third-Party Agents and Accounts (Disclaimer)
244
+
245
+ 2.1 You may connect Third-Party Agents within the Software. **The relationship between you and a Third-Party Agent and its model/service provider (registration, login, authorization, usage, billing, compliance) is established directly between you and that provider and borne by you — it is unrelated to CiCy.**
246
+
247
+ 2.2 **You are solely responsible for official logins.** If you log in to a Third-Party Agent using that provider's official account, that act and its consequences (including whether it complies with the availability policies of the provider's jurisdiction and your own) are your responsibility. CiCy does not steer you toward, proxy, or embed any channel dedicated to circumventing regional restrictions.
248
+
249
+ 2.3 You must comply with the user agreement, usage policies, and acceptable-use scope of every Third-Party Agent and model service you connect.
250
+
251
+ ---
252
+
253
+ ## 3. Authorization Notice (permissions the Software requires from you)
254
+
255
+ > To let AI agents do work on your behalf, the Software needs the following authorizations on your device. We group them by risk level and explain each one's **purpose, scope, risk, and whether it can be revoked**. **Transparent disclosure is at the heart of these Terms.**
256
+
257
+ ### 3A. Basic authorizations (granted by accepting these Terms; required for the Software to run)
258
+
259
+ | Authorization | Purpose | Scope & limits | Revocable |
260
+ |---|---|---|---|
261
+ | **Local file read/write** | Read/write the workspace, configuration, task history | Limited to the Software's working directory and files you explicitly target in a task | Uninstall to end |
262
+ | **Run Third-Party Agents** | Launch sub-processes such as claude/codex/gemini on your computer | Only the Agents you have connected | Remove the Agent |
263
+ | **Local data storage** | Store audit/history/configuration locally | Data stays on your machine; not uploaded | Clear in settings |
264
+ | **Read system & window info** | Scheduling and status display | OS/hardware summary, window list; no file contents | Uninstall to end |
265
+ | **Local network access** | Make requests to the model backend/service you chose, on your behalf | Outbound per your configuration; no embedded circumvention channel | Disable networking in settings |
266
+
267
+ ### 3B. High-risk authorizations (off by default; enabled only after your **separate, explicit** consent)
268
+
269
+ > Accepting these Terms as a whole will **not** automatically enable any of the following. Each requires a separate action in the app to turn on, and can be turned off at any time.
270
+
271
+ **① Local command and script execution**
272
+ - **Purpose**: Allow AI agents to execute shell / Python / Node scripts on your computer to complete automation tasks.
273
+ - **Risk (please read carefully)**: This is equivalent to granting a program the **ability to run code** on your computer. Enable it only in tasks you trust.
274
+ - **Controls**: Acts on the **local machine** only; all executions are written to a local audit trail; high-risk commands can require secondary confirmation.
275
+ - **Revoke**: Disable execution in settings.
276
+
277
+ **② Remote orchestration pairing**
278
+ - **Purpose**: Allow an orchestrator you have **explicitly paired** (which may run in the cloud or on another device) to drive the local Agents over a secure channel, enabling remote collaborative scheduling.
279
+ - **Risk**: Once paired, the remote orchestrator can trigger the local capabilities above.
280
+ - **Controls**: Connects **only to orchestrators you have explicitly paired, with a token you can revoke at any time**; never installs silently, never self-propagates; you can unpair to disconnect immediately.
281
+ - **Revoke**: Unpair / revoke the token.
282
+
283
+ **③ System root certificate trust store write (requires administrator)**
284
+ - **Purpose**: Required for the HTTPS traffic auditing in Section 4 — installing a **machine-specific** audit certificate into the system trust store.
285
+ - **Risk**: Writing to the system trust root is a highly sensitive operation, so it requires administrator authorization, and the Software **never** pre-installs or distributes a shared certificate (see Section 4).
286
+ - **Revoke**: \`uninstall-ca\` removes it and clears the consent flag in one step.
287
+
288
+ **④ Local HTTPS traffic auditing** — see the dedicated Section 4.
289
+
290
+ ### 3C. Authorizations used on demand during tasks (each can be disabled in settings)
291
+
292
+ | Authorization | Purpose | Scope & limits |
293
+ |---|---|---|
294
+ | **Browser control** | Open/navigate pages, read pages or inject scripts in browser sessions you authorize, read/write cookies | Only browser sessions managed by the Software or authorized by you |
295
+ | **Clipboard read/write** | Pass text within automation flows | As needed by the task; can be disabled |
296
+ | **Screen/window capture** | Let an Agent "see" the interface to complete an operation | Screenshots stay local; not uploaded |
297
+ | **Multi-account isolation + per-account proxy** | Isolate cookies/storage/egress IP per identity (e.g. multi-store operations, multi-client isolated delivery) | **For lawful multi-account management only; must not be used for unlawful account farming, traffic faking, or defeating platform risk controls** (see Section 5) |
298
+
299
+ ---
300
+
301
+ ## 4. Local HTTPS Traffic Auditing (optional · off by default · requires explicit consent · requires administrator)
302
+
303
+ 4.1 The Software offers an optional "Local HTTPS Traffic Auditing" feature, used to perform local security auditing, sensitive-data redaction, and policy governance on encrypted requests sent from **your machine** to AI providers (such as Claude / OpenAI / DeepSeek / Gemini).
304
+
305
+ 4.2 **This feature is off by default.** It takes effect only when you actively click to enable it in the app and complete administrator authorization. When enabled:
306
+ - The Software generates a **machine-specific, unique** audit certificate on your machine (never a pre-installed or cross-device shared certificate) and requests to install it into your system trust store;
307
+ - Once installed, HTTPS traffic from your machine to the **AI provider domains** above is decrypted locally for auditing; **the scope of decryption is strictly limited to those AI provider domains; all other traffic (banking, social, other websites, etc.) is never decrypted or read**;
308
+ - **Decrypted data is stored only on your machine** and is not uploaded to any server.
309
+
310
+ 4.3 **Revocable at any time**: You can disable the feature and uninstall the certificate (\`uninstall-ca\`) in settings; after revocation no traffic is decrypted, and the consent flag is cleared.
311
+
312
+ 4.4 **Disclosure obligation in multi-user/team settings**: If you deploy the Software on a device or environment used by multiple people and enable auditing on others' traffic, then you (the deployer) must, on your own and in advance, clearly inform the affected persons and obtain their consent, limited to what is necessary for business management. This disclosure-and-consent obligation rests with you.
313
+
314
+ ## 5. Lawful Use of Automation and Device Control (User Responsibility)
315
+
316
+ 5.1 The capabilities described in Section 3 are general-purpose automation/RPA tool capabilities.
317
+
318
+ 5.2 **Authorization boundary**: These capabilities may act only on devices and accounts **you own or are expressly authorized to use**. Accessing or controlling computer systems you are not authorized for is **strictly prohibited**.
319
+
320
+ 5.3 **Prohibited uses**, including but not limited to:
321
+ - (a) intruding into, unlawfully controlling, or interfering with others' computer information systems;
322
+ - (b) bulk registration, traffic/order faking, "wool-pulling," and other unlawful multi-accounting in violation of platform rules;
323
+ - (c) circumventing or defeating a target platform's risk controls or technical protection measures;
324
+ - (d) data scraping in violation of a target site's robots protocol, terms of use, or applicable law;
325
+ - (e) collecting or processing others' personal information without a lawful basis;
326
+ - (f) any act that violates the laws and regulations of your jurisdiction or that of the target.
327
+
328
+ 5.4 **You bear full responsibility for all operations initiated through the Software and their consequences.** CiCy provides only general-purpose tool capabilities and is not responsible for your specific manner of use; if your use leads to third-party claims or administrative/criminal liability, you shall bear it and hold CiCy harmless.
329
+
330
+ ## 6. Personal Information and Privacy
331
+
332
+ 6.1 The Software processes data on a local-first, minimum-necessary basis and does not collect or upload your work content for operational purposes.
333
+
334
+ 6.2 When you use the Software in scenarios involving personal information (auditing, scraping, or processing traffic that contains personal information), under applicable laws such as the Personal Information Protection Law (China) and the GDPR (EU), **you or your organization may constitute a personal-information processor / data controller** and must fulfill the corresponding obligations on your own (notice and consent, records of processing, responding to data-subject rights, and where necessary data protection impact assessments and breach notifications).
335
+
336
+ 6.3 Where EU personal data is transferred out of the EU, a lawful transfer mechanism required by Chapter V of the GDPR (such as Standard Contractual Clauses) and your explicit consent are required.
337
+
338
+ 6.4 **Region-based backend selection**: To comply with the laws of different jurisdictions, the Software selects a default model backend based on your region (for example, users in mainland China default to model services filed/registered within China); cross-border transfer of personal data requires your separate, explicit consent.
339
+
340
+ ## 7. AI-Generated Content
341
+
342
+ 7.1 Content you generate using the Software and Third-Party Agents is subject to the AI-generated-content labeling obligations of your jurisdiction (such as China's Measures for Labeling AI-Generated Synthetic Content and the transparency requirements of the EU AI Act). CiCy provides labeling/disclosure capabilities where applicable, but the responsibility for compliant use rests with you.
343
+
344
+ ## 8. Compliance and Applicable Jurisdictions
345
+
346
+ 8.1 You must comply with all applicable laws, regulations, and platform terms of your jurisdiction and of the jurisdiction your operations target, **including in particular those of China and the EU**.
347
+
348
+ 8.2 The Software applies different defaults and restrictions to different regions on a "jurisdiction-aware" basis, but this does not relieve you of your own responsibility to ensure compliance.
349
+
350
+ ## 9. Disclaimer and Limitation of Liability
351
+
352
+ 9.1 The Software is provided "as is"; to the maximum extent permitted by applicable law, no implied warranties of merchantability or fitness for a particular purpose are made.
353
+
354
+ 9.2 To the maximum extent permitted by applicable law, CiCy is not liable for any direct or indirect loss, third-party claim, or administrative or criminal liability arising from your breach of these Terms or from your use of Third-Party Agents / automation capabilities / the auditing feature, and you shall hold CiCy harmless against related claims.
355
+
356
+ 9.3 Nothing in these Terms excludes or limits liability that cannot be excluded under mandatory law (such as liability for personal injury or fraud).
357
+
358
+ ## 10. Consent and Effect
359
+
360
+ 10.1 **These Terms are a precondition to using the Software.** Clicking "Agree and continue" means you have read, understood, and accepted all of these Terms; if you click "Decline and exit" or make no choice, you **cannot use the Software**.
361
+
362
+ 10.2 The high-risk authorizations in Section 3B (local command/script execution, remote orchestration pairing, root certificate write) and the HTTPS auditing in Section 4 **must be enabled by you through separate actions in the app**; your overall acceptance of these Terms does **not** constitute enabling those features.
363
+
364
+ 10.3 You may review, disable, or revoke each authorization listed in Section 3 at any time in settings.
365
+
366
+ ---
367
+
368
+ > **Implementation notes (not part of the Terms; for product/legal):**
369
+ > - First launch = blocking terms: show the 6 "at a glance" points + "Agree and continue / Decline and exit"; no entry to the main UI without acceptance. Full Terms expandable/linked.
370
+ > - **Second, separate consent**: Section 4 auditing = the three-state consent card (not-granted / granted / processing); the Section 3B① execution and 3B② remote-pairing capabilities should likewise have their own switches and first-use confirmation.
371
+ > - Backend gating: Section 4 corresponds to the \`~/cicy-ai/mitm/ca-trust-consent\` flag + \`exec cicy-code mitm install-ca/uninstall-ca\`.
372
+ > - Container/headless deployment: if using the \`CICY_CA_TRUST_CONSENT=1\` escape hatch, "setting this environment variable means the deployer has, on behalf of its environment, given the notice and consent under Section 4.4"; responsibility rests with the deployer and this must be documented.
373
+ > - Production: zh + en (EU) bilingual; wording of Sections 3C/6/8 may be adjusted per jurisdiction; high-risk authorizations should retain a user-revocable audit log as evidence of consent.
374
+ `};function Qy(c){return c.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Ln(c){return Qy(c).replace(/\*\*([^*]+)\*\*/g,"<strong>$1</strong>").replace(/`([^`]+)`/g,"<code>$1</code>")}function Kp(c){return c.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(f=>f.trim())}function Xy(c){const f=String(c||"").replace(/\r\n/g,`
375
+ `).split(`
376
+ `),m=[];let d=0;for(;d<f.length;){const S=f[d];if(!S.trim()){d++;continue}if(/^---+\s*$/.test(S)){m.push("<hr/>"),d++;continue}const x=/^(#{1,6})\s+(.*)$/.exec(S);if(x){const b=Math.min(x[1].length,6);m.push(`<h${b}>${Ln(x[2])}</h${b}>`),d++;continue}if(S.trim().startsWith("|")&&d+1<f.length&&/^\s*\|?[\s:|-]+\|?\s*$/.test(f[d+1])&&f[d+1].includes("-")){const b=Kp(S);d+=2;const O=[];for(;d<f.length&&f[d].trim().startsWith("|");)O.push(Kp(f[d])),d++;let _="<table><thead><tr>";_+=b.map(h=>`<th>${Ln(h)}</th>`).join(""),_+="</tr></thead><tbody>";for(const h of O)_+="<tr>"+h.map(D=>`<td>${Ln(D)}</td>`).join("")+"</tr>";_+="</tbody></table>",m.push(_);continue}if(S.trim().startsWith(">")){const b=[];for(;d<f.length&&f[d].trim().startsWith(">");)b.push(f[d].replace(/^\s*>\s?/,"")),d++;m.push(`<blockquote>${b.map(Ln).join("<br/>")}</blockquote>`);continue}if(/^\s*-\s+/.test(S)){const b=[];for(;d<f.length&&/^\s*-\s+/.test(f[d]);)b.push(`<li>${Ln(f[d].replace(/^\s*-\s+/,""))}</li>`),d++;m.push(`<ul>${b.join("")}</ul>`);continue}if(/^\s*\d+\.\s+/.test(S)){const b=[];for(;d<f.length&&/^\s*\d+\.\s+/.test(f[d]);)b.push(`<li>${Ln(f[d].replace(/^\s*\d+\.\s+/,""))}</li>`),d++;m.push(`<ol>${b.join("")}</ol>`);continue}m.push(`<p>${Ln(S)}</p>`),d++}return m.join(`
377
+ `)}function Fy({title:c,url:f}={}){const m=String(c||"").trim();return m?{ok:!0,patch:{name:m,base_url:String(f||"").trim()}}:{ok:!1,error:"title_required"}}const Vy=`// Debian 虚拟机控制脚本 —— 首页「Debian」卡片和 desktop 的 QEMU 版 Docker cicy-code 共用这一份。
378
+ // 首页:?raw 打进 bundle,写到 ~/cicy-ai/db/debian-ctl.js,用本机 node(dsh 同款找法 / 便携版)跑;
379
+ // desktop:src/sidecar/qemu-docker.js 把它写到 ~/cicy-ai/db/qemu-vm-ctl.js 再跑。
380
+ // node <ctl> <status|install|start|stop|open|accel|fwd <port>...>
381
+ // 两边版本可能不同步,所以只认同一套磁盘约定(vmDir 下的文件 + 端口),谁先开机谁当 runner。
382
+ // 只打一行 JSON 到 stdout。不靠 WSL:QEMU 便携版 + Debian 官方云镜像,
383
+ // 有 WHPX(Windows 虚拟机监控程序平台)就用硬件加速,没有就退回纯软件模拟(TCG),
384
+ // 所以不要管理员也能开箱用;「开启加速」才需要一次管理员 + 重启。
385
+ // 后台活(install-run / run)一律用 Start-Process -WindowStyle Hidden 起 node:
386
+ // 这样后台 node 自己有一个被隐藏的控制台,它起的 curl / qemu-img / qemu 都继承它,
387
+ // 不会每个子进程各弹一个黑窗口(dsh 那次的教训)。
388
+ // 首页不发 desktop 版就能更新这里;改版本号/端口/源时同步改 DEB_* 常量。
389
+ const fs = require("fs"), path = require("path"), os = require("os"), cp = require("child_process"), net = require("net"), http = require("http"), crypto = require("crypto");
390
+ const OP = process.argv[2] || "status";
391
+
392
+ const QEMU_VER = "11.1.0";
393
+ const QEMU_ZIP = "cicy-qemu-" + QEMU_VER + "-win-x64.zip";
394
+ const DEB_SERIAL = "20261017-2634";
395
+ const DEB_IMG = "debian-13-genericcloud-amd64-" + DEB_SERIAL + ".qcow2";
396
+ // 官方 SHA512SUMS 里的值(CI 转存前也按它校验过)—— 不管从哪个源下,落盘后都按它验。
397
+ const DEB_SHA512 = "ec584ccabfef7120b4c4f7482adf0e615894d9292cedec446b64194b951ebe5dd97c336b5dcbae458333764b0edd516334506017f33c4f2020ef8d38b569ffe3";
398
+ const R2 = "https://r2.deepfetch.de5.net/releases";
399
+ const QEMU_SRCS = [R2 + "/qemu/" + QEMU_ZIP];
400
+ // R2 上是两片(wrangler 单文件上限 300MiB):数组 = 分片,按序下完拼回;字符串 = 整个文件。
401
+ const DEB_SRCS = [[R2 + "/debian/" + DEB_IMG + ".p0", R2 + "/debian/" + DEB_IMG + ".p1"], "https://cloud.debian.org/images/cloud/trixie/" + DEB_SERIAL + "/" + DEB_IMG];
402
+ // 宿主侧端口全部只绑 127.0.0.1(hostfwd 写死),外网/局域网碰不到。
403
+ const TTY_PORT = 17681, QMP_PORT = 17682, SEED_PORT = 17683, SSH_PORT = 17622;
404
+ // cloud-init 的 instance-id:改 user-data 内容时 +1,已装好的虚拟机下次开机会按新配置重跑一遍
405
+ // (users/write_files/runcmd 都是幂等的,数据不动)。2 = 注入 desktop 用的 SSH 公钥。
406
+ const PROVISION = 2;
407
+ const DISK_SIZE = "40G";
408
+
409
+ const home = os.homedir();
410
+ const WIN = process.platform === "win32";
411
+ const LAD = process.env.LOCALAPPDATA || path.join(home, "AppData", "Local");
412
+ const qemuDir = path.join(LAD, "cicy-qemu");
413
+ const dlDir = path.join(LAD, "cicy-qemu-dl");
414
+ const vmDir = path.join(home, "cicy-ai", "vm", "debian");
415
+ const logDir = path.join(home, "cicy-ai", "logs");
416
+ for (const d of [vmDir, logDir, dlDir]) { try { fs.mkdirSync(d, { recursive: true }); } catch {} }
417
+ const F = {
418
+ base: path.join(vmDir, DEB_IMG), disk: path.join(vmDir, "disk.qcow2"), state: path.join(vmDir, "state.json"),
419
+ console: path.join(logDir, "debian-console.log"), qemuLog: path.join(logDir, "debian-qemu.log"), runLog: path.join(logDir, "debian-run.log"),
420
+ install: path.join(vmDir, "install.json"), runPid: path.join(vmDir, "run.pid"), qemuPid: path.join(vmDir, "qemu.pid"),
421
+ key: path.join(vmDir, "id_rsa"), pub: path.join(vmDir, "id_rsa.pub"),
422
+ zip: path.join(dlDir, QEMU_ZIP), img: path.join(dlDir, DEB_IMG),
423
+ };
424
+ const qemuExe = path.join(qemuDir, "qemu-system-x86_64.exe"), qemuImg = path.join(qemuDir, "qemu-img.exe"), ttydBin = path.join(qemuDir, "guest", "ttyd.x86_64");
425
+ const CURL = WIN ? path.join(process.env.SystemRoot || "C:\\\\Windows", "System32", "curl.exe") : "curl";
426
+ const TAR = WIN ? path.join(process.env.SystemRoot || "C:\\\\Windows", "System32", "tar.exe") : "tar";
427
+
428
+ function out(o) { process.stdout.write(JSON.stringify(o) + "\\n"); }
429
+ function readJson(f) { try { return JSON.parse(fs.readFileSync(f, "utf8").replace(/^\\uFEFF/, "")); } catch { return null; } }
430
+ function writeJson(f, o) { try { fs.writeFileSync(f, JSON.stringify(o, null, 2)); } catch {} }
431
+ function pidAlive(n) { if (!n) return false; try { process.kill(n, 0); return true; } catch { return false; } }
432
+ function readPid(f) { try { const n = Number(fs.readFileSync(f, "utf8").trim()); return n > 0 ? n : 0; } catch { return 0; } }
433
+ function size(f) { try { return fs.statSync(f).size; } catch { return 0; } }
434
+ function tailOf(file, max) { try { const st = fs.statSync(file); const len = Math.min(st.size, max); if (!len) return ""; const fd = fs.openSync(file, "r"); try { const b = Buffer.alloc(len); fs.readSync(fd, b, 0, len, st.size - len); return b.toString("utf8"); } finally { fs.closeSync(fd); } } catch { return ""; } }
435
+ function log(msg) { try { fs.appendFileSync(F.runLog, new Date().toISOString() + " " + msg + "\\n"); } catch {} }
436
+ function state() {
437
+ let s = readJson(F.state);
438
+ if (!s || !s.token) { s = { token: crypto.randomBytes(16).toString("hex"), created: Date.now() }; writeJson(F.state, s); }
439
+ ensureKey();
440
+ return s;
441
+ }
442
+ // desktop 进虚拟机跑 docker 用的 SSH 密钥(RSA PKCS1 PEM:ssh2 和 OpenSSH 都认)。
443
+ // 公钥按 OpenSSH 线格式手拼:string "ssh-rsa" + mpint e + mpint n。
444
+ function sshString(b) { const l = Buffer.alloc(4); l.writeUInt32BE(b.length); return Buffer.concat([l, b]); }
445
+ function sshMpint(b) { if (b[0] & 0x80) b = Buffer.concat([Buffer.from([0]), b]); return sshString(b); }
446
+ function ensureKey() {
447
+ if (fs.existsSync(F.key) && fs.existsSync(F.pub)) return;
448
+ const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { modulusLength: 3072 });
449
+ const jwk = publicKey.export({ format: "jwk" });
450
+ const blob = Buffer.concat([sshString(Buffer.from("ssh-rsa")), sshMpint(Buffer.from(jwk.e, "base64url")), sshMpint(Buffer.from(jwk.n, "base64url"))]);
451
+ fs.writeFileSync(F.key, privateKey.export({ type: "pkcs1", format: "pem" }), { mode: 0o600 });
452
+ fs.writeFileSync(F.pub, "ssh-rsa " + blob.toString("base64") + " cicy-desktop\\n");
453
+ }
454
+ function pubKey() { try { return fs.readFileSync(F.pub, "utf8").trim(); } catch { return ""; } }
455
+ function installed() { return fs.existsSync(qemuExe) && fs.existsSync(qemuImg) && fs.existsSync(F.base) && fs.existsSync(F.disk); }
456
+
457
+ // 后台起一个隐藏的 node 跑本脚本的某个 op(见文件头:为什么必须 Start-Process Hidden)。
458
+ function spawnHidden(op, logFile) {
459
+ const q = (x) => "'" + String(x).replace(/'/g, "''") + "'";
460
+ if (WIN) {
461
+ const pidOut = path.join(vmDir, "spawn-" + op + ".pid");
462
+ const cmd = "$p = Start-Process -FilePath " + q(process.execPath) + " -ArgumentList @(" + [__filename, op].map((a) => q('"' + a + '"')).join(",") + ")"
463
+ + " -WindowStyle Hidden -RedirectStandardOutput " + q(logFile) + " -RedirectStandardError " + q(logFile + ".err")
464
+ + " -WorkingDirectory " + q(vmDir) + " -PassThru; Set-Content -Path " + q(pidOut) + " -Value $p.Id";
465
+ // Start-Process 带重定向时用继承句柄的 CreateProcess:后台 node 会顺手继承 powershell 的
466
+ // stdout —— 若那是管道,spawnSync 要等后台进程退出才 EOF(= install/start 卡到超时)。
467
+ // 所以 powershell 的 stdio 全给 ignore(NUL),PID 走文件。
468
+ try { fs.unlinkSync(pidOut); } catch {}
469
+ cp.spawnSync("powershell", ["-NoProfile", "-NonInteractive", "-WindowStyle", "Hidden", "-Command", cmd], { stdio: "ignore", timeout: 60000, windowsHide: true });
470
+ return readPid(pidOut);
471
+ }
472
+ const fd = fs.openSync(logFile, "a");
473
+ const c = cp.spawn(process.execPath, [__filename, op], { detached: true, windowsHide: true, stdio: ["ignore", fd, fd], cwd: vmDir });
474
+ c.unref(); try { fs.closeSync(fd); } catch {}
475
+ return c.pid;
476
+ }
477
+
478
+ function hashFile(f, algo) {
479
+ return new Promise((res) => {
480
+ const h = crypto.createHash(algo), s = fs.createReadStream(f);
481
+ s.on("data", (b) => h.update(b)); s.on("end", () => res(h.digest("hex"))); s.on("error", () => res(""));
482
+ });
483
+ }
484
+ function curlText(url) {
485
+ const r = cp.spawnSync(CURL, ["-fsSL", "--max-time", "30", url], { encoding: "utf8", windowsHide: true, timeout: 40000 });
486
+ return r.status === 0 ? String(r.stdout || "").trim() : "";
487
+ }
488
+ function curlTo(u, dest) {
489
+ log("download " + u);
490
+ const r = cp.spawnSync(CURL, ["-L", "-s", "-S", "-f", "-C", "-", "-o", dest + ".part", "--speed-limit", "100000", "--speed-time", "30", "--retry", "2", u], { encoding: "utf8", windowsHide: true, timeout: 3 * 3600 * 1000 });
491
+ log("curl exit=" + r.status + " bytes=" + size(dest + ".part") + " " + String(r.stderr || "").trim().slice(-200));
492
+ if (r.status === 0) { try { fs.renameSync(dest + ".part", dest); } catch { try { fs.copyFileSync(dest + ".part", dest); fs.unlinkSync(dest + ".part"); } catch {} } return fs.existsSync(dest); }
493
+ // 33 = 服务器不支持续传 / 416 已下完但不认:清掉,下一个源从头来
494
+ if (r.status === 33 || /416/.test(String(r.stderr || ""))) { try { fs.unlinkSync(dest + ".part"); } catch {} }
495
+ return false;
496
+ }
497
+ // 分片源:每片单独续传下到 dest.pN,全齐了按序拼成 dest。进度条看的是 dest.part,
498
+ // 所以拼接前先把已下完的片的大小累计到 prog.base,status 用 base + 当前片 .part。
499
+ function downloadParts(parts, dest, prog) {
500
+ let base = 0;
501
+ for (let i = 0; i < parts.length; i++) {
502
+ const pf = dest + ".p" + i;
503
+ prog({ file: pf, base });
504
+ if (!fs.existsSync(pf) && !curlTo(parts[i], pf)) return false;
505
+ base += size(pf);
506
+ }
507
+ const fd = fs.openSync(dest + ".part", "w");
508
+ try { for (let i = 0; i < parts.length; i++) { const b = fs.readFileSync(dest + ".p" + i); fs.writeSync(fd, b); } } finally { fs.closeSync(fd); }
509
+ fs.renameSync(dest + ".part", dest);
510
+ for (let i = 0; i < parts.length; i++) { try { fs.unlinkSync(dest + ".p" + i); } catch {} }
511
+ prog({ file: dest, base: 0 });
512
+ return true;
513
+ }
514
+ // 断点续传下载;一个源 30s 内低于 100KB/s 就换下一个。返回用了哪个源。
515
+ function download(srcs, dest, prog) {
516
+ for (const u of srcs) {
517
+ if (Array.isArray(u)) {
518
+ prog({ src: u[0] });
519
+ if (downloadParts(u, dest, prog)) return u[0];
520
+ continue;
521
+ }
522
+ prog({ src: u, file: dest, base: 0 });
523
+ if (curlTo(u, dest)) return u;
524
+ }
525
+ return "";
526
+ }
527
+
528
+ // ---- install-run:真正干活的后台进程,进度写 install.json,status 读它 ----
529
+ async function installRun() {
530
+ const st = { pid: process.pid, phase: "qemu", started: Date.now(), error: "" };
531
+ const prog = (o) => { Object.assign(st, o); writeJson(F.install, st); };
532
+ prog({});
533
+ try {
534
+ if (!(fs.existsSync(qemuExe) && fs.existsSync(qemuImg) && fs.existsSync(ttydBin))) {
535
+ prog({ phase: "qemu", file: F.zip, total: 44400000 });
536
+ const want = curlText(QEMU_SRCS[0] + ".sha256").split(/\\s+/)[0];
537
+ if (!(fs.existsSync(F.zip) && want && (await hashFile(F.zip, "sha256")) === want)) {
538
+ try { fs.unlinkSync(F.zip); } catch {}
539
+ if (!download(QEMU_SRCS, F.zip, prog)) return prog({ error: "qemu_download" });
540
+ if (want && (await hashFile(F.zip, "sha256")) !== want) { try { fs.unlinkSync(F.zip); } catch {} return prog({ error: "qemu_checksum" }); }
541
+ }
542
+ prog({ phase: "extract" });
543
+ const tmp = path.join(dlDir, "x");
544
+ fs.rmSync(tmp, { recursive: true, force: true }); fs.mkdirSync(tmp, { recursive: true });
545
+ const r = cp.spawnSync(TAR, ["-xf", F.zip, "-C", tmp], { encoding: "utf8", windowsHide: true, timeout: 600000 });
546
+ if (r.status !== 0 || !fs.existsSync(path.join(tmp, "cicy-qemu", "qemu-system-x86_64.exe"))) return prog({ error: "qemu_extract", detail: String(r.stderr || "").slice(-300) });
547
+ fs.rmSync(qemuDir, { recursive: true, force: true });
548
+ fs.renameSync(path.join(tmp, "cicy-qemu"), qemuDir);
549
+ fs.rmSync(tmp, { recursive: true, force: true }); try { fs.unlinkSync(F.zip); } catch {}
550
+ }
551
+ if (!fs.existsSync(F.base)) {
552
+ prog({ phase: "image", file: F.img, total: 342818816 });
553
+ if (!(fs.existsSync(F.img) && (await hashFile(F.img, "sha512")) === DEB_SHA512)) {
554
+ try { fs.unlinkSync(F.img); } catch {}
555
+ if (!download(DEB_SRCS, F.img, prog)) return prog({ error: "image_download" });
556
+ prog({ phase: "verify" });
557
+ if ((await hashFile(F.img, "sha512")) !== DEB_SHA512) { try { fs.unlinkSync(F.img); } catch {} return prog({ error: "image_checksum" }); }
558
+ }
559
+ try { fs.renameSync(F.img, F.base); } catch { fs.copyFileSync(F.img, F.base); fs.unlinkSync(F.img); }
560
+ }
561
+ if (!fs.existsSync(F.disk)) {
562
+ prog({ phase: "disk" });
563
+ // 底盘只读,用户数据全在 overlay;以后换 Debian 底盘只要 rebase,不丢数据。
564
+ const r = cp.spawnSync(qemuImg, ["create", "-f", "qcow2", "-F", "qcow2", "-b", path.basename(F.base), F.disk, DISK_SIZE], { encoding: "utf8", windowsHide: true, timeout: 120000, cwd: vmDir });
565
+ if (r.status !== 0) return prog({ error: "disk_create", detail: String(r.stderr || r.stdout || "").slice(-300) });
566
+ }
567
+ state();
568
+ prog({ phase: "done", done: Date.now() });
569
+ } catch (e) { prog({ error: "exception", detail: String(e && e.message || e).slice(0, 300) }); }
570
+ }
571
+
572
+ // ---- cloud-init NoCloud 种子:虚拟机经 slirp 的 10.0.2.2 访问宿主 127.0.0.1:SEED_PORT ----
573
+ function userData(tok) {
574
+ return [
575
+ "#cloud-config",
576
+ "hostname: cicy-debian",
577
+ "timezone: Asia/Shanghai",
578
+ "users:",
579
+ " - name: cicy",
580
+ " shell: /bin/bash",
581
+ " groups: [sudo]",
582
+ " sudo: ALL=(ALL) NOPASSWD:ALL",
583
+ " lock_passwd: true",
584
+ " ssh_authorized_keys:",
585
+ " - " + pubKey(),
586
+ "ssh_pwauth: false",
587
+ "write_files:",
588
+ " - path: /etc/systemd/system/cicy-ttyd.service",
589
+ " content: |",
590
+ " [Unit]",
591
+ " Description=cicy web terminal",
592
+ " After=network-online.target",
593
+ " [Service]",
594
+ " User=cicy",
595
+ " WorkingDirectory=/home/cicy",
596
+ " Environment=HOME=/home/cicy",
597
+ " ExecStart=/usr/local/bin/ttyd -W -p 7681 -b /" + tok + " -t titleFixed=Debian -t fontSize=14 bash -l",
598
+ " Restart=always",
599
+ " RestartSec=2",
600
+ " [Install]",
601
+ " WantedBy=multi-user.target",
602
+ "runcmd:",
603
+ " - [python3, -c, \\"import urllib.request as u; open('/usr/local/bin/ttyd','wb').write(u.urlopen('http://10.0.2.2:" + SEED_PORT + "/ttyd', timeout=120).read())\\"]",
604
+ " - [chmod, '0755', /usr/local/bin/ttyd]",
605
+ " - [systemctl, daemon-reload]",
606
+ " - [systemctl, enable, --now, cicy-ttyd.service]",
607
+ "",
608
+ ].join("\\n");
609
+ }
610
+ function seedServer(tok) {
611
+ const srv = http.createServer((req, res) => {
612
+ const u = String(req.url || "").split("?")[0];
613
+ log("seed " + req.method + " " + u);
614
+ if (u === "/meta-data") { res.end("instance-id: cicy-debian-" + PROVISION + "\\nlocal-hostname: cicy-debian\\n"); return; }
615
+ if (u === "/user-data") { res.end(userData(tok)); return; }
616
+ if (u === "/vendor-data" || u === "/network-config") { res.end(""); return; }
617
+ if (u === "/ttyd") { res.setHeader("content-type", "application/octet-stream"); fs.createReadStream(ttydBin).pipe(res); return; }
618
+ res.statusCode = 404; res.end();
619
+ });
620
+ srv.on("error", (e) => log("seed server error: " + e.message));
621
+ srv.listen(SEED_PORT, "127.0.0.1");
622
+ return srv;
623
+ }
624
+
625
+ function vmSize() {
626
+ const totalMb = Math.floor(os.totalmem() / 1048576), cpus = os.cpus().length || 2;
627
+ const mem = Math.max(1024, Math.min(4096, Math.floor(totalMb / 4 / 256) * 256));
628
+ return { mem, smp: Math.max(1, Math.min(4, Math.floor(cpus / 2))) };
629
+ }
630
+ // ---- run:后台常驻,开种子服务 + 拉起 qemu,qemu 退出它就退出 ----
631
+ function run() {
632
+ const s = state(), { mem, smp } = vmSize();
633
+ fs.writeFileSync(F.runPid, String(process.pid));
634
+ writeJson(F.state, Object.assign(readJson(F.state) || s, { bootProvision: PROVISION }));
635
+ const srv = seedServer(s.token);
636
+ const args = [
637
+ "-name", "cicy-debian",
638
+ "-accel", "whpx,kernel-irqchip=off", "-accel", "tcg,thread=multi",
639
+ "-m", String(mem), "-smp", String(smp),
640
+ "-drive", "file=" + F.disk + ",if=virtio,cache=writeback,discard=unmap",
641
+ "-netdev", "user,id=n0,hostfwd=tcp:127.0.0.1:" + TTY_PORT + "-:7681,hostfwd=tcp:127.0.0.1:" + SSH_PORT + "-:22",
642
+ "-device", "virtio-net-pci,netdev=n0",
643
+ "-smbios", "type=1,serial=ds=nocloud;s=http://10.0.2.2:" + SEED_PORT + "/",
644
+ "-qmp", "tcp:127.0.0.1:" + QMP_PORT + ",server=on,wait=off",
645
+ "-display", "none", "-vga", "none",
646
+ "-serial", "file:" + F.console,
647
+ ];
648
+ log("qemu " + JSON.stringify(args));
649
+ const lfd = fs.openSync(F.qemuLog, "w");
650
+ const q = cp.spawn(qemuExe, args, { cwd: qemuDir, windowsHide: true, stdio: ["ignore", lfd, lfd] });
651
+ fs.writeFileSync(F.qemuPid, String(q.pid));
652
+ q.on("exit", (code) => { log("qemu exit " + code); try { fs.unlinkSync(F.qemuPid); } catch {} try { fs.unlinkSync(F.runPid); } catch {} srv.close(); process.exit(0); });
653
+ q.on("error", (e) => { log("qemu spawn error " + e.message); process.exit(1); });
654
+ }
655
+
656
+ function qmp(cmds, timeoutMs) {
657
+ return new Promise((res) => {
658
+ const sock = net.connect(QMP_PORT, "127.0.0.1"); let buf = "", sent = false; const replies = [];
659
+ const done = (v) => { try { sock.destroy(); } catch {} res(v); };
660
+ const t = setTimeout(() => done(replies.length ? replies : null), timeoutMs || 5000);
661
+ sock.on("data", (d) => {
662
+ buf += d.toString("utf8");
663
+ let i; while ((i = buf.indexOf("\\n")) >= 0) {
664
+ const line = buf.slice(0, i).trim(); buf = buf.slice(i + 1); if (!line) continue;
665
+ let j; try { j = JSON.parse(line); } catch { continue; }
666
+ if (j.QMP && !sent) { sent = true; for (const c of [{ execute: "qmp_capabilities" }, ...cmds]) sock.write(JSON.stringify(c) + "\\n"); continue; }
667
+ if ("return" in j || "error" in j) { replies.push(j); if (replies.length === cmds.length + 1) { clearTimeout(t); done(replies.slice(1)); } }
668
+ }
669
+ });
670
+ sock.on("error", () => { clearTimeout(t); done(null); });
671
+ });
672
+ }
673
+ function httpOk(port, p) {
674
+ return new Promise((res) => {
675
+ const r = http.get({ host: "127.0.0.1", port, path: p, timeout: 3000 }, (x) => { x.resume(); res(x.statusCode === 200); });
676
+ r.on("timeout", () => { r.destroy(); res(false); }); r.on("error", () => res(false));
677
+ });
678
+ }
679
+ function accelOf() {
680
+ const t = tailOf(F.qemuLog, 32 * 1024);
681
+ if (!t && !pidAlive(readPid(F.qemuPid))) return "";
682
+ // qemu 依次试 -accel:whpx 起不来会打一行 WHPX 报错再退到 tcg
683
+ return /whpx/i.test(t) && /(fail|error|no accelerator|not supported|unavailable)/i.test(t) ? "tcg" : "whpx";
684
+ }
685
+ function whpxFeature() { return WIN && fs.existsSync(path.join(process.env.SystemRoot || "C:\\\\Windows", "System32", "WinHvPlatform.dll")); }
686
+ // 串口日志最后一行可读的话 = 开机进度(给卡片「启动中」下面那一行小字)
687
+ function bootLine() {
688
+ const t = tailOf(F.console, 8 * 1024).replace(/\\x1b\\[[0-9;?]*[A-Za-z]/g, "").split(/\\r?\\n/).map((l) => l.trim()).filter((l) => l && /[A-Za-z]/.test(l));
689
+ return (t.pop() || "").slice(0, 160);
690
+ }
691
+
692
+ async function status() {
693
+ const inst = readJson(F.install), instPid = inst && inst.pid;
694
+ const installing = !!(inst && !inst.done && !inst.error && pidAlive(instPid));
695
+ let bytes = 0; if (installing && inst.file) bytes = (inst.base || 0) + (size(inst.file + ".part") || size(inst.file));
696
+ const qpid = readPid(F.qemuPid), running = pidAlive(qpid);
697
+ const s = readJson(F.state);
698
+ const ready = running && s && s.token ? await httpOk(TTY_PORT, "/" + s.token + "/") : false;
699
+ return {
700
+ ok: true, platform: process.platform, installed: installed(), installing,
701
+ phase: inst && inst.phase, bytes, total: inst && inst.total, src: inst && inst.src,
702
+ installError: inst && !installing && inst.error ? [inst.error, inst.detail].filter(Boolean).join(" · ") : "",
703
+ running, ready, accel: running ? accelOf() : "", whpxFeature: whpxFeature(),
704
+ boot: running && !ready ? bootLine() : "", ...vmSize(), sshPort: SSH_PORT, qmpPort: QMP_PORT,
705
+ provision: running ? (readJson(F.state) || {}).bootProvision || 0 : 0, key: F.key,
706
+ };
707
+ }
708
+ async function install() {
709
+ const s = await status();
710
+ if (s.installed) return { ok: true, already: true };
711
+ if (s.installing) return { ok: true, installing: true };
712
+ try { fs.unlinkSync(F.install); } catch {}
713
+ const pid = spawnHidden("install-run", path.join(logDir, "debian-install.log"));
714
+ return pid ? { ok: true, pid } : { ok: false, error: "spawn_failed" };
715
+ }
716
+ async function start() {
717
+ if (!installed()) return { ok: false, error: "not_installed" };
718
+ if (pidAlive(readPid(F.qemuPid))) return { ok: true, already: true };
719
+ for (const p of [TTY_PORT, QMP_PORT, SEED_PORT, SSH_PORT]) {
720
+ const busy = await new Promise((res) => { const c = net.connect(p, "127.0.0.1"); c.on("connect", () => { c.destroy(); res(true); }); c.on("error", () => res(false)); });
721
+ if (busy) return { ok: false, error: "port_in_use", detail: "127.0.0.1:" + p };
722
+ }
723
+ try { fs.writeFileSync(F.console, ""); } catch {}
724
+ const pid = spawnHidden("run", F.runLog + ".out");
725
+ if (!pid) return { ok: false, error: "spawn_failed" };
726
+ for (let i = 0; i < 20; i++) { await new Promise((r) => setTimeout(r, 500)); if (pidAlive(readPid(F.qemuPid))) return { ok: true, pid }; }
727
+ return { ok: false, error: "qemu_not_started", tail: tailOf(F.qemuLog, 1200) + tailOf(F.runLog, 800) };
728
+ }
729
+ async function stop() {
730
+ const qpid = readPid(F.qemuPid);
731
+ if (!pidAlive(qpid)) return { ok: true, already: true };
732
+ await qmp([{ execute: "system_powerdown" }], 5000); // 先 ACPI 关机,让 Debian 自己落盘
733
+ for (let i = 0; i < 60 && pidAlive(qpid); i++) await new Promise((r) => setTimeout(r, 1000));
734
+ if (pidAlive(qpid)) { await qmp([{ execute: "quit" }], 3000); await new Promise((r) => setTimeout(r, 1500)); }
735
+ if (pidAlive(qpid)) { try { process.kill(qpid); } catch {} }
736
+ return { ok: !pidAlive(qpid) };
737
+ }
738
+ async function open() {
739
+ const s = readJson(F.state);
740
+ if (!s || !s.token || !(await httpOk(TTY_PORT, "/" + s.token + "/"))) return { ok: false, error: "not_ready" };
741
+ return { ok: true, url: "http://127.0.0.1:" + TTY_PORT + "/" + s.token + "/" };
742
+ }
743
+ // 运行时加端口转发(宿主 127.0.0.1:P → 虚拟机 :P),走 QMP 的 HMP hostfwd_add。
744
+ // 开机才有效、关机即失;重复添加 qemu 会报错,当作已存在。只绑 127.0.0.1。
745
+ async function fwd(ports) {
746
+ const want = ports.map(Number).filter((p) => Number.isInteger(p) && p > 0 && p < 65536);
747
+ if (!pidAlive(readPid(F.qemuPid))) return { ok: false, error: "not_running" };
748
+ const r = await qmp(want.map((p) => ({ execute: "human-monitor-command", arguments: { "command-line": "hostfwd_add n0 tcp:127.0.0.1:" + p + "-:" + p } })), 8000);
749
+ if (!r) return { ok: false, error: "qmp_unreachable" };
750
+ return { ok: true, ports: want, replies: r.map((x) => String((x && x.return) || (x && x.error && x.error.desc) || "").trim()) };
751
+ }
752
+ // 开启 WHPX:弹 UAC,管理员 PowerShell 打开「Windows 虚拟机监控程序平台」,之后要重启电脑。
753
+ function accel() {
754
+ if (!WIN) return { ok: false, error: "windows_only" };
755
+ const inner = "Enable-WindowsOptionalFeature -Online -FeatureName HypervisorPlatform -All -NoRestart | Out-Null";
756
+ const cmd = "$p = Start-Process powershell -Verb RunAs -WindowStyle Hidden -Wait -PassThru -ArgumentList @('-NoProfile','-Command','" + inner.replace(/'/g, "''") + "'); $p.ExitCode";
757
+ const r = cp.spawnSync("powershell", ["-NoProfile", "-NonInteractive", "-WindowStyle", "Hidden", "-Command", cmd], { encoding: "utf8", timeout: 600000, windowsHide: true });
758
+ const code = Number(String(r.stdout || "").trim().split(/\\s+/).pop());
759
+ if (r.status !== 0 || code !== 0) return { ok: false, error: "enable_failed", detail: String(r.stderr || r.stdout || "").trim().slice(-300) };
760
+ return { ok: true, needReboot: true };
761
+ }
762
+
763
+ (async () => {
764
+ try {
765
+ if (OP === "install-run") return await installRun();
766
+ if (OP === "run") return run();
767
+ out(OP === "install" ? await install() : OP === "start" ? await start() : OP === "stop" ? await stop() : OP === "open" ? await open() : OP === "accel" ? accel() : OP === "fwd" ? await fwd(process.argv.slice(3)) : await status());
768
+ } catch (e) { out({ ok: false, error: "exception", detail: String(e && e.message || e).slice(0, 300) }); }
769
+ })();
770
+ `,o=(c,f,m)=>{var S,x;const d=b=>m&&typeof b=="string"?b.replace(/\{\{\s*(\w+)\s*\}\}/g,(O,_)=>m[_]!=null?String(m[_]):O):b;try{const b=(x=(S=window.cicyI18n)==null?void 0:S.t)==null?void 0:x.call(S,c,m);return d(b&&b!==c?b:f)}catch{return d(f)}},El="cicy_token",Ps="cicy_access_token",Ei="cicy_user_id",Zy="cicy_guest",Dl="https://cicy-ai.com",Uo=new Set;let Ky=0,xn=[];const Di=new Map;function Jp(){Uo.forEach(c=>c(xn))}const xe={show(c={}){const f=c.id||`t${++Ky}`,m=xn.find(x=>x.id===f),d={id:f,status:"running",...m,...c};xn=m?xn.map(x=>x.id===f?d:x):[...xn,d],Jp();const S=Di.get(f);return S&&(clearTimeout(S),Di.delete(f)),c.ttl&&Di.set(f,setTimeout(()=>xe.dismiss(f),c.ttl)),f},dismiss(c){xn=xn.filter(m=>m.id!==c);const f=Di.get(c);f&&(clearTimeout(f),Di.delete(c)),Jp()}};function Jy(){const[c,f]=y.useState(xn);return y.useEffect(()=>(Uo.add(f),()=>{Uo.delete(f)}),[]),c.length?s.jsx("div",{className:"toast-host","data-id":"ToastHost",children:c.map(m=>s.jsxs("div",{className:"toast","data-id":`Toast-${m.id}`,"data-status":m.status||"running",children:[s.jsx("button",{type:"button",className:"toast__x","data-id":"Toast-dismiss",onClick:()=>xe.dismiss(m.id),"aria-label":"dismiss",children:"×"}),s.jsxs("span",{className:"toast__msg",children:[m.message,Number.isFinite(m.progress)?` ${m.progress}%`:""]}),Number.isFinite(m.progress)&&s.jsx("span",{className:"toast__bar",children:s.jsx("span",{style:{width:`${Math.min(100,m.progress)}%`}})})]},m.id))}):null}const Bo=new Set;let Do=0,Pe=null;function wn(){Bo.forEach(c=>c(Pe))}function Oi(){return new Date().toTimeString().slice(0,8)}const pt={open({teamId:c,fromVer:f,toVer:m,onRetry:d,title:S,kind:x}={}){Pe={teamId:c,title:S||null,fromVer:f||null,toVer:m||null,kind:x||"sidecar",status:"running",phase:"download",progress:null,onInstall:null,logs:[],onRetry:d||null,lastAt:Date.now()},wn()},setProgress(c){Pe&&(Pe={...Pe,status:"running",progress:c||Pe.progress,lastAt:Date.now()},wn())},ready({onInstall:c,message:f}={}){if(!Pe)return;const m={id:++Do,t:Oi(),phase:"done",status:"done",message:f||o("updateBanner.readyDrawer","下载完成,点「安装」重启更新")};Pe={...Pe,status:"ready",phase:"done",progress:{...Pe.progress||{},percent:100},onInstall:c||null,minimized:!1,logs:[...Pe.logs,m],lastAt:Date.now()},wn()},push(c={}){if(!Pe)return;const f={id:++Do,t:Oi(),phase:c.phase||Pe.phase,status:c.status||"running",message:c.message||""};Pe={...Pe,phase:c.phase||Pe.phase,toVer:c.toVer||Pe.toVer,logs:[...Pe.logs,f],lastAt:Date.now()},wn()},minimize(){Pe&&(Pe={...Pe,minimized:!0},wn())},restore(){Pe&&(Pe={...Pe,minimized:!1},wn())},finish({ok:c,message:f}={}){if(!Pe)return;const m=c?"done":"error",d={id:++Do,t:Oi(),phase:"done",status:m,message:f||(c?o("updateDrawer.done","更新完成"):o("updateDrawer.failed","更新失败"))};Pe={...Pe,status:m,phase:"done",minimized:!1,logs:[...Pe.logs,d],lastAt:Date.now()},wn()},close(){Pe=null,wn()}},No=["download","swap","done"],Wp=c=>({download:o("updateDrawer.phaseDownload","下载"),swap:o("updateDrawer.phaseSwap","切换"),done:o("updateDrawer.phaseDone","完成")})[c]||c;function Wy(){var O;const[c,f]=y.useState(Pe);y.useEffect(()=>(Bo.add(f),()=>{Bo.delete(f)}),[]);const m=y.useRef(null);y.useEffect(()=>{const _=m.current;_&&(_.scrollTop=_.scrollHeight)},[(O=c==null?void 0:c.logs)==null?void 0:O.length]);const[d,S]=y.useState(!1);if(y.useEffect(()=>{if(!c||c.status!=="running"){S(!1);return}const _=setInterval(()=>S(Date.now()-(c.lastAt||0)>25e3),3e3);return()=>clearInterval(_)},[c==null?void 0:c.lastAt,c==null?void 0:c.status]),!c)return null;const x=c.status==="running",b=No.findIndex(_=>_===c.phase);return c.minimized?s.jsxs("button",{type:"button",className:`drawer-min drawer-min--${c.status}`,"data-id":"UpdateDrawer-restore",onClick:()=>pt.restore(),children:[s.jsx("span",{className:"drawer-min__spark",children:x?s.jsx(wt,{}):c.status==="done"?"✓":c.status==="reboot"?"⟳":"!"}),s.jsxs("span",{className:"drawer-min__label",children:[c.title||o("updateDrawer.title","更新 cicy-code"),c.toVer?` · v${c.toVer}`:""]})]}):s.jsx("div",{className:"drawer-scrim","data-id":"UpdateDrawer-scrim",onClick:()=>x?pt.minimize():pt.close(),children:s.jsxs("div",{className:"drawer","data-id":"UpdateDrawer","data-status":c.status,onClick:_=>_.stopPropagation(),children:[s.jsxs("div",{className:"drawer__head",children:[s.jsxs("div",{className:"drawer__title",children:[s.jsx("span",{className:`drawer__spark drawer__spark--${c.status}`,children:x?s.jsx(wt,{}):c.status==="done"?"✓":c.status==="reboot"?"⟳":"!"}),s.jsxs("div",{children:[s.jsx("div",{className:"drawer__h",children:c.title||o("updateDrawer.title","更新 cicy-code")}),s.jsxs("div",{className:"drawer__sub",children:[c.fromVer?`v${c.fromVer}`:o("updateDrawer.current","当前")," → ",c.toVer?`v${c.toVer}`:o("updateDrawer.latest","最新版")]})]})]}),s.jsx("div",{className:"drawer__headbtns",children:s.jsx("button",{type:"button",className:"drawer__x","data-id":"UpdateDrawer-min",title:o("updateDrawer.minimize","最小化"),onClick:()=>pt.minimize(),"aria-label":"minimize",children:"‒"})})]}),c.kind!=="app"&&s.jsx("div",{className:"drawer__steps","data-id":"UpdateDrawer-steps",children:No.map((_,h)=>{const D=Wp(_),j=c.status==="done"||h<b,X=h===b&&x,M=c.status==="error"&&h===b;return s.jsxs("div",{className:`drawer__step${X?" is-active":""}${j?" is-done":""}${M?" is-error":""}`,children:[s.jsx("span",{className:"drawer__step-dot",children:j?"✓":M?"!":h+1}),s.jsx("span",{className:"drawer__step-label",children:D}),h<No.length-1&&s.jsx("span",{className:"drawer__step-bar"})]},_)})}),c.progress&&(()=>{const _=c.progress,h=D=>D?(D/1048576).toFixed(1):"0";return s.jsxs("div",{className:"drawer__dl","data-id":"UpdateDrawer-dl",children:[s.jsxs("div",{className:"drawer__dl-head",children:[s.jsxs("span",{className:"drawer__dl-pct",children:[_.percent||0,"%"]}),s.jsxs("span",{className:"drawer__dl-stats",children:[_.total?`${h(_.transferred)} / ${h(_.total)} MB`:`${h(_.transferred)} MB`,_.bytesPerSec?` · ${h(_.bytesPerSec)} MB/s`:"",_.etaSec?` · ${o("updateBanner.eta","剩 {{s}}s",{s:_.etaSec})}`:""]})]}),s.jsx("div",{className:"drawer__dl-track",children:s.jsx("span",{className:"drawer__dl-fill",style:{width:`${_.percent||0}%`}})})]})})(),s.jsx("div",{className:"drawer__log","data-id":"UpdateDrawer-log",ref:m,children:c.logs.length===0?s.jsx("div",{className:"drawer__log-empty",children:o("updateDrawer.preparing","准备中…")}):c.logs.map(_=>s.jsxs("div",{className:"drawer__line","data-status":_.status,children:[s.jsx("span",{className:"drawer__t",children:_.t}),s.jsx("span",{className:`drawer__badge drawer__badge--${_.phase}`,children:Wp(_.phase)}),s.jsx("span",{className:"drawer__linemsg",children:_.message})]},_.id))}),d&&x&&s.jsx("div",{className:"drawer__hint","data-id":"UpdateDrawer-stuck",children:o("updateDrawer.stuckHint","正在等待新版本就绪,耗时比平常久。可以放到后台继续,完成或失败都会提示。")}),s.jsx("div",{className:"drawer__foot",children:x?s.jsx(s.Fragment,{children:s.jsx("span",{className:"drawer__foot-status",children:c.kind==="app"?o("updateBanner.downloading","正在下载更新")+"…":o("updateDrawer.inProgress","更新进行中…")})}):c.status==="ready"?s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"drawer__foot-status is-done",children:o("updateBanner.readyShort","下载完成")}),s.jsx("button",{type:"button",className:"drawer__btn is-accent","data-id":"UpdateDrawer-install",onClick:()=>c.onInstall&&c.onInstall(),children:o("updateBanner.installBtn","立即安装")}),s.jsx("button",{type:"button",className:"drawer__btn","data-id":"UpdateDrawer-later",onClick:()=>pt.close(),children:o("updateBanner.later","稍后")})]}):c.status==="error"?s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"drawer__foot-status is-error",children:o("updateDrawer.failed","更新失败")}),c.onRetry&&s.jsx("button",{type:"button",className:"drawer__btn is-accent","data-id":"UpdateDrawer-retry",onClick:()=>c.onRetry(),children:o("common.retry","重试")}),s.jsx("button",{type:"button",className:"drawer__btn","data-id":"UpdateDrawer-dismiss",onClick:()=>pt.close(),children:o("common.close","关闭")})]}):s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"drawer__foot-status is-done",children:o("updateDrawer.updatedLatest","已更新到最新")}),s.jsx("button",{type:"button",className:"drawer__btn is-accent","data-id":"UpdateDrawer-finish",onClick:()=>pt.close(),children:o("common.done","完成")})]})})]})})}const gm=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/,Yn="desktop-",bm="limeng9088@gmail.com",Ml=c=>c&&!c.startsWith(Yn)?Yn+c:c||"",Gn=c=>String(c||"").replace(new RegExp("^"+Yn),""),Ip={flex:"1 1 0%",minWidth:0,maxWidth:"100%",font:"inherit",boxSizing:"border-box",height:22,lineHeight:"20px",padding:"0 6px",borderRadius:6,border:"1px solid transparent"};async function Rl(c){var x,b;const f=await((x=window.electronRPC)==null?void 0:x.call(window,"get_windows",{})),m=(f&&f.content||[]).map(O=>O&&O.text).join("");let d=1;try{const O=JSON.parse(m);O&&O.length&&(d=O[0].id)}catch{}const S=await((b=window.electronRPC)==null?void 0:b.call(window,"control_electron_BrowserWindow",{win_id:d,code:c}));return(S&&S.content||[]).map(O=>O&&O.text).join("")}const vm=`(()=>{const r=process.mainModule.require.bind(process.mainModule);
771
+ const os=r("os"),fs=r("fs"),path=r("path");
772
+ try{const c=JSON.parse(fs.readFileSync(path.join(os.homedir(),"cicy-ai","global.json"),"utf8"));
773
+ return String((c.hubAuth||{}).token||"")}catch(e){return ""}})()`,Iy=`(()=>{const r=process.mainModule.require.bind(process.mainModule);
774
+ const os=r("os"),fs=r("fs"),path=r("path");
775
+ // Identity source, in order:
776
+ // 1) a numeric txt on the operator's Desktop (C:/Users/xs/Desktop/1007.txt) —
777
+ // the machine's number, dropped there by whoever set the box up. This is the
778
+ // ground truth; its filename is the id. Forward slashes only, so this string
779
+ // survives a second eval (a backslash path breaks with "invalid hex escape").
780
+ // 2) ~/cicy-ai/team.txt, 3) global.json desktopTeam.
781
+ const home=os.homedir().replace(/\\\\/g,"/");
782
+ const deskDirs=["C:/Users/xs/Desktop","C:/Users/Intel/Desktop","C:/Users/Administrator/Desktop",home+"/Desktop"];
783
+ for(const d of deskDirs){try{for(const f of fs.readdirSync(d)){const m=/^(\\d{3,5})\\.txt$/i.exec(f);if(m)return "xs-"+m[1];}}catch(e){}}
784
+ const txts=[path.join(os.homedir(),"cicy-ai","team.txt")];
785
+ for(const f of txts){try{const t=String(fs.readFileSync(f,"utf8")).trim();if(t)return t}catch(e){}}
786
+ try{const c=JSON.parse(fs.readFileSync(path.join(os.homedir(),"cicy-ai","global.json"),"utf8"));
787
+ return String(c.desktopTeam||"")}catch(e){return ""}})()`;function ic(){const c="23456789ABCDEFGHJKMNPQRSTUVWXYZ",f=()=>Array.from({length:5},()=>c[Math.floor(Math.random()*c.length)]).join("");try{let m=localStorage.getItem("cicy-short-id");return/^[2-9A-HJ-NP-Z]{5}$/.test(m||"")||(m=f(),localStorage.setItem("cicy-short-id",m)),m}catch{return f()}}function Sm(){const c=()=>"code-desktop-"+(typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID().replace(/-/g,""):(Math.random().toString(16).slice(2)+Date.now().toString(16)+Math.random().toString(16).slice(2)).slice(0,32));try{let f=localStorage.getItem("cicy-desktop-id");return/^code-desktop-[A-Za-z0-9]{16,}$/.test(f||"")||(f=c(),localStorage.setItem("cicy-desktop-id",f)),f}catch{return c()}}async function Ui(){try{return Ml((await Rl(Iy)).trim())}catch{return""}}async function qo(c){c=Ml(String(c||"").trim());const f=`(()=>{const r=process.mainModule.require.bind(process.mainModule);
788
+ const os=r("os"),fs=r("fs"),path=r("path");
789
+ const home=os.homedir();
790
+ const dir=path.join(home,"cicy-ai");
791
+ try{fs.mkdirSync(dir,{recursive:true})}catch(e){}
792
+ const want=${JSON.stringify(c)};
793
+ // 2) team.txt —— 优先级比 global.json 高,不写这个就等于没改
794
+ const tf=path.join(dir,"team.txt");
795
+ try{ if(want){fs.writeFileSync(tf,want)}else{try{fs.unlinkSync(tf)}catch(e){}} }catch(e){}
796
+ // 3) global.json
797
+ const p=path.join(dir,"global.json");
798
+ let c={};try{c=JSON.parse(fs.readFileSync(p,"utf8"))}catch(e){}
799
+ c.desktopTeam=want;
800
+ try{fs.writeFileSync(p,JSON.stringify(c,null,2))}catch(e){}
801
+ // 回读:按 readTeam 的真实优先级算出这台机器现在到底叫什么
802
+ const home2=home.replace(/\\\\/g,"/");
803
+ const deskDirs=["C:/Users/xs/Desktop","C:/Users/Intel/Desktop","C:/Users/Administrator/Desktop",home2+"/Desktop"];
804
+ for(const d of deskDirs){try{for(const f of fs.readdirSync(d)){const m=/^(\\d{3,5})\\.txt$/i.exec(f);if(m)return "xs-"+m[1];}}catch(e){}}
805
+ try{const t=String(fs.readFileSync(tf,"utf8")).trim();if(t)return t}catch(e){}
806
+ try{const c2=JSON.parse(fs.readFileSync(p,"utf8"));return String(c2.desktopTeam||"")}catch(e){return ""}
807
+ })()`;return Ml((await Rl(f)).trim())}function Py(){dg(),sg(),ig(),ug(),og();const[c,f]=y.useState(void 0);y.useEffect(()=>{var B,te;if(!((te=(B=window.cicy)==null?void 0:B.terms)!=null&&te.status)){f(!0);return}window.cicy.terms.status(ym).then(ie=>f(!!(ie!=null&&ie.accepted))).catch(()=>f(!0))},[]),y.useEffect(()=>{var ie,be,pe,We;const B=document.documentElement;try{B.setAttribute("data-platform",((ie=window.cicy)==null?void 0:ie.platform)||"linux")}catch{}B.setAttribute("data-fullscreen","0");let te;try{te=(We=(pe=(be=window.cicy)==null?void 0:be.window)==null?void 0:pe.onFullscreen)==null?void 0:We.call(pe,Oe=>B.setAttribute("data-fullscreen",Oe?"1":"0"))}catch{}return()=>{try{te&&te()}catch{}}},[]),y.useEffect(()=>{var te,ie;if(!((ie=(te=window.cicy)==null?void 0:te.docker)!=null&&ie.onAppProgress))return;const B=window.cicy.docker.onAppProgress(be=>{!be||be.phase==="open"||(Ve||_e.open({source:"auto"}),(Ve==null?void 0:Ve.source)==="auto"&&(be.phase==="done"&&(be.status==="done"||be.status==="reboot")?_e.finish({ok:be.status==="done",status:be.status==="reboot"?"reboot":void 0,message:be.message}):be.status==="error"?_e.finish({ok:!1,message:be.message}):_e.push(be)))});return()=>{try{B&&B()}catch{}}},[]);const[m,d]=y.useState(()=>Al(El)),[S,x]=y.useState(()=>Al(Ps)),[b,O]=y.useState(()=>Al(Ei)),[_,h]=y.useState(()=>!Al(El)),[D,j]=y.useState(!0),X=()=>j(!0),[M,K]=y.useState(!1),[R,Z]=y.useState(!1),[W,ke]=y.useState(""),[oe,ne]=y.useState(bm),[re,Se]=y.useState(null);y.useEffect(()=>{let B=!0;return Ui().then(te=>B&&Se(te||"")),()=>{B=!1}},[]);const[F,P]=y.useState(!1),[$,le]=y.useState(""),[Ne,Ce]=y.useState(""),[De,Ae]=y.useState(null),[ae,E]=y.useState(null),[G,U]=y.useState(!1),[se,ee]=y.useState(""),p=y.useRef(!1),[v,C]=y.useState(null),[L,J]=y.useState(!1),[ye,de]=y.useState(!1),[Qe,Be]=y.useState({}),Gt=y.useCallback(async()=>{var B,te,ie;try{const be=await((ie=(te=(B=window.cicy)==null?void 0:B.localTeams)==null?void 0:te.avatars)==null?void 0:ie.call(te));Be(be&&typeof be=="object"?be:{})}catch{}},[]),[rt,Mt]=y.useState(!1),[ia,xt]=y.useState(!1),[Yt,_t]=y.useState(""),[sa,ca]=y.useState(""),[Et,Rt]=y.useState(!1),[ja,Dt]=y.useState(""),[mt,gt]=y.useState("all"),V=xg(),ce=Fg(),me=y.useCallback(async(B,te)=>{var be,pe,We,Oe;if(!B)return;if(!((pe=(be=window.cicy)==null?void 0:be.cloud)!=null&&pe.fetch)){ee("cloud fetch bridge missing");return}U(!0),ee("");const ie={Authorization:`Bearer ${B}`};try{const[nt,Ie]=await Promise.all([window.cicy.cloud.fetch(`${Dl}/api/user/self`,{headers:ie}),window.cicy.cloud.fetch(`${Dl}/api/teams`,{headers:ie})]);if((Ie==null?void 0:Ie.status)===401){if(!p.current&&((Oe=(We=window.cicy)==null?void 0:We.auth)!=null&&Oe.loginStart)){p.current=!0,ee(o("auth.sessionExpired","会话已过期,正在重新登录…"));try{await window.cicy.auth.loginStart()}catch{}}return}if(Ie!=null&&Ie.ok){const dt=JSON.parse(Ie.body||"{}");E(Array.isArray(dt==null?void 0:dt.teams)?dt.teams:[])}else E(dt=>dt===null?[]:dt);if(nt!=null&&nt.ok)try{const dt=JSON.parse(nt.body||"{}");Ae((dt==null?void 0:dt.success)===!1?null:(dt==null?void 0:dt.data)||null)}catch{Ae(null)}else Ae(null)}catch{ee(""),E(Ie=>Ie===null?[]:Ie)}finally{U(!1)}},[]),ue=y.useRef("");y.useEffect(()=>{ue.current=m||S||""},[m,S]);const ze=y.useCallback(async()=>{var te,ie;const B=ue.current;if(!(!B||!((ie=(te=window.cicy)==null?void 0:te.cloud)!=null&&ie.fetch)))try{const be=await window.cicy.cloud.fetch(`${Dl}/api/teams`,{headers:{Authorization:`Bearer ${B}`}});if(be!=null&&be.ok){const pe=JSON.parse(be.body||"{}");Array.isArray(pe==null?void 0:pe.teams)&&E(pe.teams)}}catch{}},[]),Xe=y.useCallback(async(B,te)=>{var pe,We;const ie=ue.current,be=String(te||"").trim();if(!ie||!((We=(pe=window.cicy)==null?void 0:pe.cloud)!=null&&We.fetch)||!be)return{ok:!1,error:"no session / empty"};try{const Oe=await window.cicy.cloud.fetch(`${Dl}/api/teams/${B}`,{method:"PATCH",headers:{Authorization:`Bearer ${ie}`,"Content-Type":"application/json"},body:JSON.stringify({title:be})});return Oe!=null&&Oe.ok?(await ze(),{ok:!0}):{ok:!1,error:`${(Oe==null?void 0:Oe.status)||"?"} ${(Oe==null?void 0:Oe.error)||""}`}}catch(Oe){return{ok:!1,error:Oe.message}}},[ze]);y.useCallback(async(B,te)=>{var pe,We;const ie=ue.current,be=String(te||"").trim();if(!ie||!((We=(pe=window.cicy)==null?void 0:pe.cloud)!=null&&We.fetch)||!be)return{ok:!1,error:"no session / empty"};try{new URL(be)}catch{return{ok:!1,error:"地址格式不对(需 http(s)://…)"}}try{const Oe=await window.cicy.cloud.fetch(`${Dl}/api/teams/${B}`,{method:"PATCH",headers:{Authorization:`Bearer ${ie}`,"Content-Type":"application/json"},body:JSON.stringify({hostUrl:be})});return Oe!=null&&Oe.ok?(await ze(),{ok:!0}):{ok:!1,error:`${(Oe==null?void 0:Oe.status)||"?"} ${(Oe==null?void 0:Oe.error)||""}`}}catch(Oe){return{ok:!1,error:Oe.message}}},[ze]),y.useCallback(async B=>{var ie,be;const te=ue.current;if(!te||!((be=(ie=window.cicy)==null?void 0:ie.cloud)!=null&&be.fetch)){xe.show({message:o("common.noAuth","未登录"),status:"error",ttl:5e3});return}try{const pe=await window.cicy.cloud.fetch(`${Dl}/api/teams/${B.id}`,{method:"DELETE",headers:{Authorization:`Bearer ${te}`}});pe!=null&&pe.ok||(pe==null?void 0:pe.status)===200||(pe==null?void 0:pe.status)===204?(xe.show({message:o("teamCard.deleted","团队已删除"),status:"done",ttl:3e3}),await ze()):xe.show({message:`${o("teamCard.deleteFailed","删除失败")}: ${(pe==null?void 0:pe.status)||"?"} ${(pe==null?void 0:pe.error)||""}`,status:"error",ttl:7e3})}catch(pe){xe.show({message:`${o("teamCard.deleteFailed","删除失败")}: ${pe.message}`,status:"error",ttl:7e3})}},[ze]),y.useEffect(()=>{const B=m||S;B?me(B,b):E(te=>te===null?[]:te)},[m,S,b,me]);const Ge=y.useCallback(async()=>{var B,te;if((te=(B=window.cicy)==null?void 0:B.localTeams)!=null&&te.list){J(!0);try{const ie=await window.cicy.localTeams.list({refresh:!0,uid:Al(Ei)||""});C(Array.isArray(ie)?ie:[])}catch{C([])}finally{J(!1),de(!0)}}},[]);async function T(){if(Et)return;const B=sa.trim();if(!B){Dt(o("teams.urlRequired","请输入地址 URL"));return}try{new URL(B)}catch{Dt(o("teams.badUrl","URL 无效(需含 http(s)://)"));return}Dt(""),Rt(!0);try{const te=await window.cicy.localTeams.add({base_url:B,name:Yt.trim(),failIfExists:!0});if(!te||te.ok===!1){Dt((te==null?void 0:te.error)==="exists"?o("teams.urlExists","该地址已存在"):Mi((te==null?void 0:te.error)||"add failed"));return}await Ge(),_t(""),ca(""),xt(!1)}catch(te){Dt(Mi((te==null?void 0:te.message)||String(te)))}finally{Rt(!1)}}const I=y.useCallback(async(B,te)=>{var be,pe;if(!((pe=(be=window.cicy)==null?void 0:be.localTeams)!=null&&pe.update))return{ok:!1,error:"no_bridge"};let ie;try{ie=await window.cicy.localTeams.update(B,{name:String(te||"").trim()||o("localTeams.unnamed","未命名")})}catch(We){ie={ok:!1,error:(We==null?void 0:We.message)||String(We)}}return await Ge(),ie||{ok:!1,error:"no_result"}},[Ge]);y.useEffect(()=>{let B,te=!1;const ie=3e4,be=12e4,pe=async()=>{var nt,Ie,dt;try{await((dt=(Ie=(nt=window.cicy)==null?void 0:nt.localTeams)==null?void 0:Ie.syncCloud)==null?void 0:dt.call(Ie))}catch{}await Promise.all([Ge(),ze(),Gt()])},We=()=>{if(te)return;const nt=document.visibilityState==="visible";B=setTimeout(async()=>{document.visibilityState==="visible"?await pe():await Ge(),We()},nt?ie:be)};pe(),We();const Oe=()=>{document.visibilityState==="visible"&&pe()};return document.addEventListener("visibilitychange",Oe),window.addEventListener("focus",Oe),()=>{te=!0,clearTimeout(B),document.removeEventListener("visibilitychange",Oe),window.removeEventListener("focus",Oe)}},[Ge,ze]),y.useEffect(()=>{var te,ie;if(!((ie=(te=window.cicy)==null?void 0:te.localTeams)!=null&&ie.onWebviewRelay))return;const B=window.cicy.localTeams.onWebviewRelay(async({reqId:be,msg:pe})=>{let We={ok:!1,error:"unknown relay type"};try{(pe==null?void 0:pe.type)==="localTeams:add"?We=await window.cicy.localTeams.add(pe.spec||{}):(pe==null?void 0:pe.type)==="localTeams:remove"?We=await window.cicy.localTeams.remove(pe.id):(pe==null?void 0:pe.type)==="localTeams:update"?We=await window.cicy.localTeams.update(pe.id,pe.patch||{}):(pe==null?void 0:pe.type)==="localTeams:upgrade"?We=await window.cicy.localTeams.upgrade(pe.id):(pe==null?void 0:pe.type)==="localTeams:list"&&(We={ok:!0,teams:await window.cicy.localTeams.list({refresh:!0})}),Ge()}catch(Oe){We={ok:!1,error:(Oe==null?void 0:Oe.message)||String(Oe)}}try{window.cicy.localTeams.replyWebviewRelay(be,We)}catch{}});return()=>{try{B==null||B()}catch{}}},[Ge]);const ge=y.useCallback(async B=>{var te,ie;if((ie=(te=window.cicy)==null?void 0:te.localTeams)!=null&&ie.open)try{await window.cicy.localTeams.open(B)}catch{}},[]);y.useEffect(()=>{var te,ie;if(Al(El)){h(!1);return}if(!((ie=(te=window.cicy)==null?void 0:te.auth)!=null&&ie.getSaved)){h(!1);return}let B=!1;return(async()=>{try{const be=await window.cicy.auth.getSaved();if(B)return;if(be!=null&&be.token){try{localStorage.setItem(El,be.token)}catch{}if(d(be.token),be.accessToken){try{localStorage.setItem(Ps,be.accessToken)}catch{}x(be.accessToken)}if(be.userId){try{localStorage.setItem(Ei,String(be.userId))}catch{}O(String(be.userId))}}}catch{}finally{B||h(!1)}})(),()=>{B=!0}},[]),y.useEffect(()=>{var B,te;if((te=(B=window.cicy)==null?void 0:B.auth)!=null&&te.onComplete)return window.cicy.auth.onComplete(ie=>{if(K(!1),P(!1),ie!=null&&ie.error){le(Mi(ie.error));return}if(ie!=null&&ie.token){p.current=!1,ee("");try{localStorage.setItem(El,ie.token)}catch{}d(ie.token);try{localStorage.removeItem(Zy)}catch{}if(ie.accessToken){try{localStorage.setItem(Ps,ie.accessToken)}catch{}x(ie.accessToken)}if(ie.userId){try{localStorage.setItem(Ei,String(ie.userId))}catch{}O(String(ie.userId))}le(""),Ce(ie.reused?o("auth.welcomeBack","已恢复你之前的登录"):o("auth.loginSuccess","登录成功")),setTimeout(()=>Ce(""),3e3)}})},[]);function fe(){var B,te,ie;try{localStorage.removeItem(El),localStorage.removeItem(Ps),localStorage.removeItem(Ei)}catch{}try{(ie=(te=(B=window.cicy)==null?void 0:B.auth)==null?void 0:te.logout)==null||ie.call(te)}catch{}d(null),x(null),O(null),Ae(null),E(null),le(""),ee("")}if(c===void 0)return s.jsxs("div",{className:"shell","data-id":"TermsCheckingSplash",children:[s.jsx("div",{className:"glow","aria-hidden":!0}),s.jsxs("div",{className:"card",children:[s.jsx(um,{}),s.jsx("div",{className:"spinner-row",children:s.jsx(wt,{})})]})]});if(!c)return s.jsx(wm,{onAgree:()=>f(!0)});if(!m&&_)return s.jsxs("div",{className:"shell","data-id":"AuthRestoringSplash",children:[s.jsx("div",{className:"glow","aria-hidden":!0}),s.jsxs("div",{className:"card",children:[s.jsx(um,{}),s.jsxs("div",{className:"spinner-row",children:[s.jsx(wt,{}),s.jsx("span",{children:o("auth.restoring","正在恢复登录…")})]})]})]});const he=(v||[]).find(B=>rm(B.base_url))||null,je=he&&he.cloud_team_id?(ae||[]).find(B=>String(B.teamId||B.id)===String(he.cloud_team_id)):null,Ue=B=>{if(!B)return null;const te=(ae||[]).find(ie=>String(ie.teamId||ie.id)===String(B));return te&&te.code||null},bt=(v||[]).filter(B=>$o(B.base_url)),ra=(v||[]).filter(B=>!$o(B.base_url)&&!rm(B.base_url)),Ta=bt.length+(he?1:0),et=ra.length;(ae||[]).filter(B=>!B.is_local&&B.kind!=="local"&&(B.kind==="private"||B.team_kind==="personal")).length;const oa=mt==="all"||mt==="local",Ca=mt==="all"||mt==="custom",dc=!1,qi=mt==="all"||mt==="hub",Qn=ce.instances?ce.instances.length:0,Oa=(V.list||[]).filter(B=>B.ready),fc=(mt==="all"||mt==="dsh")&&!!ce.loggedIn,ua=v===null||ae===null;return s.jsxs("div",{className:"shell shell--app",children:[s.jsx("div",{className:"glow glow--app","aria-hidden":!0}),s.jsxs("div",{className:"shell__left",children:[s.jsx(yg,{me:De,welcome:Ne,onLogout:fe,hub:ce,guest:!m&&D,onLogin:X,mitmTeam:bt.length>0?bt[0]:null}),s.jsx(Bg,{}),s.jsxs("main",{className:"main",children:[s.jsxs("div",{className:"app__tabsrow",children:[s.jsx("div",{className:"app__tabs",children:[{k:"all",label:o("teamFilter.all","全部"),n:Ta+et+Qn+Oa.length},{k:"local",label:o("teamFilter.local","本地"),n:Ta},{k:"hub",label:o("teamFilter.hub","CiCy Hub"),n:Qn},{k:"custom",label:o("teamFilter.custom","自定义"),n:et},{k:"dsh",label:o("teamFilter.dsh","DSH"),n:Oa.length}].map(({k:B,label:te,n:ie})=>s.jsxs("button",{type:"button",className:`app__tab ${mt===B?"is-active":""}`,onClick:()=>gt(B),children:[te,s.jsx("span",{className:"app__tab-count",children:ie})]},B))}),mt==="dsh"&&s.jsx("button",{type:"button",className:"btn-ghost","data-id":"DshFleetRefresh",disabled:V.busy,title:o("dshFleet.refresh","刷新 dsh 中继状态"),style:{marginLeft:8,width:28,height:28,padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center"},onClick:()=>V.refresh(),children:V.busy?s.jsx(wt,{}):s.jsx(Qg,{})}),s.jsx("span",{style:{marginLeft:"auto"},"aria-hidden":!0}),s.jsxs("div",{"data-id":"AddTeamWrap",style:{position:"relative"},children:[s.jsxs("button",{type:"button","data-id":"AddTeamButton",className:"app__add-team",title:o("teams.addHint","添加团队"),onClick:()=>Mt(B=>!B),children:["+ ",o("teams.add","新加团队")]}),rt&&s.jsxs(s.Fragment,{children:[s.jsx("div",{onClick:()=>Mt(!1),style:{position:"fixed",inset:0,zIndex:40}}),s.jsx("div",{"data-id":"AddTeamMenu",role:"menu",style:{position:"absolute",top:"calc(100% + 6px)",right:0,zIndex:41,minWidth:240,background:"var(--card, #1b1d22)",border:"1px solid var(--border, #2c2f36)",borderRadius:10,boxShadow:"0 10px 30px rgba(0,0,0,.45)",overflow:"hidden"},children:s.jsxs("button",{type:"button","data-id":"AddTeamMenu-custom",className:"bcard__menu-item",style:{display:"block",width:"100%",textAlign:"left",padding:"11px 14px",border:"none",background:"transparent",cursor:"pointer",color:"inherit"},onClick:()=>{Mt(!1),Dt(""),xt(!0)},children:[s.jsx("div",{style:{fontSize:13,fontWeight:600},children:o("teams.addCustom","自定义团队")}),s.jsx("div",{style:{fontSize:11,opacity:.6,marginTop:2},children:o("teams.addCustomSub","手动输入地址和名称(只存本地)")})]})})]})]})]}),ia&&s.jsx("div",{"data-id":"CustomTeamModal",style:{position:"fixed",inset:0,zIndex:60,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,.5)"},onMouseDown:B=>{!Et&&B.target===B.currentTarget&&xt(!1)},children:s.jsxs("div",{onClick:B=>B.stopPropagation(),style:{width:400,maxWidth:"92vw",background:"var(--card, #1b1d22)",border:"1px solid var(--border, #2c2f36)",borderRadius:14,padding:22,boxShadow:"0 20px 60px rgba(0,0,0,.5)"},children:[s.jsx("div",{style:{fontSize:16,fontWeight:700,marginBottom:4},children:o("teams.customTitle","添加自定义团队")}),s.jsx("div",{style:{fontSize:12,opacity:.6,marginBottom:16},children:o("teams.customSub","连接到一个已有的 cicy-code 地址")}),s.jsx("label",{style:{display:"block",fontSize:12,opacity:.75,marginBottom:6},children:o("teams.customNameLabel","名称")}),s.jsx("input",{"data-id":"CustomTeamModal-title",className:"login-email-input",style:{width:"100%",marginBottom:14},value:Yt,onChange:B=>_t(B.target.value),placeholder:o("teams.customNamePlaceholder","我的团队"),spellCheck:!1,autoFocus:!0}),s.jsx("label",{style:{display:"block",fontSize:12,opacity:.75,marginBottom:6},children:o("teams.customUrlLabel","地址 URL")}),s.jsx("input",{"data-id":"CustomTeamModal-url",className:"login-email-input",style:{width:"100%",marginBottom:6},value:sa,onChange:B=>ca(B.target.value),placeholder:"https://example.com:8008",spellCheck:!1,onKeyDown:B=>{B.key==="Enter"&&T()}}),ja&&s.jsx("div",{className:"error",style:{marginTop:10},children:ja}),s.jsxs("div",{className:"modal-actions",children:[s.jsx("button",{type:"button",className:"btn-ghost","data-id":"CustomTeamModal-cancel",disabled:Et,onClick:()=>xt(!1),children:o("common.cancel","取消")}),s.jsx("button",{type:"button",className:"btn-primary","data-id":"CustomTeamModal-submit",disabled:Et,onClick:T,children:Et?o("teams.adding","添加中…"):o("teams.addAction","添加")})]})]})}),!1,ce.loginOpen&&s.jsx(Vg,{hub:ce}),s.jsxs("div",{className:"app__grid",children:[ua&&[0,1,2].map(B=>s.jsx(qg,{},"skc"+B)),!ua&&mt==="hub"&&(!ce.loggedIn||ce.instances&&ce.instances.length===0)&&s.jsx("div",{className:"empty","data-id":"HubEmpty",style:{gridColumn:"1 / -1"},children:ce.loggedIn?ce.error?zl(ce.error):o("cicyHub.empty","这个账号下还没有 cicy-code 实例。在 cicy-code 的「CiCy 账号」里用同一个邮箱登录 Hub 即可出现。"):s.jsxs(s.Fragment,{children:[o("cicyHub.loginSub","邮箱验证码登录,自动列出这个账号下的所有 cicy-code 实例")," — ",s.jsx("a",{href:"#",onClick:B=>{B.preventDefault(),ce.openLogin()},children:o("cicyHub.login","登录 CiCy Hub")})]})}),!ua&&qi&&ce.loggedIn&&(ce.instances||[]).filter(B=>B.reachable||B.online).map(B=>s.jsx(Jg,{inst:B,onOpen:(te,ie)=>ce.open(B,te,ie)},"hub:"+B.id)),fc&&(mt==="dsh"?V.list||[]:Oa).map(B=>s.jsx(_g,{m:B},"dsh:"+B.name)),mt==="dsh"&&V.list!==null&&V.list.length===0&&!V.busy&&s.jsx("div",{className:"empty","data-id":"DshFleetEmpty",style:{gridColumn:"1 / -1"},children:o("dshFleet.empty","还没有机器的 dsh 中继连上来。")}),!ua&&oa&&bt.map(B=>s.jsx(cm,{team:B,cloudCode:Ue(B.cloud_team_id),onOpen:()=>ge(B.id),onRename:I,onRefresh:Ge},"local:"+B.id)),!ua&&oa&&s.jsx(Hg,{dockerTeam:he,onOpen:async()=>{var B,te,ie;try{const be=await((ie=(te=(B=window.cicy)==null?void 0:B.docker)==null?void 0:te.appOpen)==null?void 0:ie.call(te));be!=null&&be.ok||xe.show({id:"docker-open",status:"error",ttl:6e3,message:o("docker.openNoToken","服务还没就绪,稍等几秒再点「打开」(或用卡片菜单「重启」)。")})}catch(be){console.warn("[DockerCard] open",be)}},cloudTitle:je==null?void 0:je.title,cloudCode:je==null?void 0:je.code,onRename:he!=null&&he.cloud_team_id?(B=>Xe(he.cloud_team_id,B)):void 0,onRefresh:Ge}),!ua&&oa&&s.jsx(Ng,{}),!ua&&oa&&s.jsx(Rg,{}),!ua&&Ca&&ra.map(B=>s.jsx(cm,{team:B,cloudCode:Ue(B.cloud_team_id),onOpen:()=>ge(B.id),onRename:I,onRefresh:Ge},"custom:"+B.id)),!ua&&dc]}),!G&&!se&&ae&&ae.length===0&&!(v!=null&&v.length)&&s.jsx("div",{className:"empty",style:{marginTop:14},children:o("teams.emptyHint","还没有团队 — 安装本地 cicy-code 起一个本地 team,或在云端创建。")})]})]}),s.jsx(Jy,{}),s.jsx(Wy,{}),s.jsx(Sg,{})]})}const ec="2.1.339",sc="dev",eg=300*1e3,cc="cicy-fleet-leader",Pp=6*1e3,tg=20*1e3,Xo=Math.random().toString(36).slice(2)+Date.now().toString(36);function ag(){try{const c=localStorage.getItem(cc);if(!c)return zi();const f=JSON.parse(c);return f&&f.id===Xo||!f||!(Date.now()-Number(f.ts)<tg)?zi():!1}catch{return!0}}function zi(){try{localStorage.setItem(cc,JSON.stringify({id:Xo,ts:Date.now()}))}catch{}return!0}function em(){try{const c=JSON.parse(localStorage.getItem(cc)||"null");c&&c.id===Xo&&localStorage.removeItem(cc)}catch{}}const ng=25*1e3,tc=3*1e3,lg=60*1e3;function ig(){y.useEffect(()=>{if(typeof location>"u"||location.protocol==="file:")return;let c=!0,f=null,m=null,d=null,S=null,x=tc,b=null,O=0,_=!1;const h=(ne,re)=>{try{(window.__cicyFleet=window.__cicyFleet||{})[ne]=re}catch{}},D=12*1e3,j=(ne,re)=>Promise.race([Promise.resolve(ne),new Promise(Se=>setTimeout(()=>Se(re),D))]),X=async()=>{var re,Se,F,P,$,le,Ne;if(b)return b;const ne={host:"",v:"",plat:"",auto:null,team:"",mid:""};try{ne.team=await j(Ui(),"")}catch{}ne.mid=Sm(),ne.short=ic();try{ne.tok=String(await j(Rl(vm),"")).trim()}catch{}try{const Ce=await j((re=window.electronRPC)==null?void 0:re.call(window,"get_system_info",{}),null),De=(Ce&&Ce.content||[]).map(ae=>ae&&ae.text).join(""),Ae=JSON.parse(De)||{};ne.host=Ae.hostname||"",ne.plat=Ae.platform||""}catch{}try{const Ce=await j((P=(F=(Se=window.cicy)==null?void 0:Se.app)==null?void 0:F.getVersion)==null?void 0:P.call(F),"");ne.v=typeof Ce=="string"?Ce:Ce&&Ce.desktop||""}catch{}try{ne.auto=await j((Ne=(le=($=window.cicy)==null?void 0:$.app)==null?void 0:le.getAutoUpdate)==null?void 0:Ne.call(le),null)}catch{}return ne.host&&ne.v&&ne.tok&&(b=ne),ne},M=async ne=>{var F;if(ne.js)return await new Function(`return (async()=>{${ne.js}})()`)();if(!ne.tool)return{error:"no tool"};const re=await((F=window.electronRPC)==null?void 0:F.call(window,ne.tool,ne.args||{})),Se=(re&&re.content||[]).map(P=>P&&P.text).join("");try{return JSON.parse(Se)}catch{return Se}},K=()=>{c&&(clearTimeout(S),S=setTimeout(W,x),x=Math.min(x*2,lg))};let R=0;const Z=90*1e3,W=async()=>{if(c){if(_){if(Date.now()-R<Z)return;h("step","stuck-attempt-abandoned"),O++,_=!1}if(!(f&&f.readyState<=1)){_=!0,R=Date.now();try{await ke()}finally{_=!1}}}},ke=async()=>{if(!ag()){h("step","standby"),clearTimeout(S),S=setTimeout(W,Pp);return}let ne;try{ne=await X()}catch{ne={host:"",v:"",plat:""}}if(!c)return;const re=location.protocol==="https:"?"wss:":"ws:",Se=++O,F=()=>Se!==O||!c;let P;try{P=f=new WebSocket(`${re}//${location.host}/ws?host=${encodeURIComponent(ne.host||"?")}&team=${encodeURIComponent(ne.team||"")}&mid=${encodeURIComponent(ne.mid||"")}&short=${encodeURIComponent(ne.short||"")}`)}catch($){return h("step","ctor:"+($&&$.message||$)),K()}h("step","connecting"),P.onopen=()=>{if(F()){try{P.close()}catch{}return}x=tc,h("step","open");try{P.send(JSON.stringify({type:"hello",...ne}))}catch{}try{window.__cicyCmdWaiters=window.__cicyCmdWaiters||{},window.__cicyCmd=($,le,Ne)=>new Promise(Ce=>{const De="c"+Math.random().toString(36).slice(2)+Date.now().toString(36),Ae=[];window.__cicyCmdWaiters[De]=ae=>Ae.push(ae);try{P.send(JSON.stringify({type:"cmd",cmdId:De,target:$||"all",...le||{}}))}catch(ae){Ce({error:String(ae&&ae.message)});return}setTimeout(()=>{delete window.__cicyCmdWaiters[De],Ce(Ae)},Ne||8e3)}),window.__cicyDshWaiters=window.__cicyDshWaiters||{},window.__cicyDshTicket=$=>new Promise(le=>{const Ne="d"+Math.random().toString(36).slice(2)+Date.now().toString(36);window.__cicyDshWaiters[Ne]=le;try{P.send(JSON.stringify({type:"dsh_ticket",rid:Ne,machine:$}))}catch{delete window.__cicyDshWaiters[Ne],le("");return}setTimeout(()=>{window.__cicyDshWaiters[Ne]&&(delete window.__cicyDshWaiters[Ne],le(""))},8e3)})}catch{}m=setInterval(()=>{zi();try{P.send(JSON.stringify({type:"ping"}))}catch{}},ng),d=setInterval(zi,Pp)},P.onmessage=async $=>{if(F())return;let le=null;try{le=JSON.parse($.data)}catch{return}if(le.type==="welcome"){h("cid",le.cid);const De=parseInt(sc,10),Ae=parseInt(le.build,10);if(De&&Ae&&Ae>De)try{location.reload()}catch{}return}if(le.type==="reload"){try{location.reload()}catch{}return}if(le.type==="dsh_config"){window.__dshFleetCfg={env:le.env&&typeof le.env=="object"?le.env:{},workspaces:Array.isArray(le.workspaces)?le.workspaces:[],rev:String(le.rev||"")};try{window.dispatchEvent(new CustomEvent("cicy:dsh-config"))}catch{}return}if(le.type==="dsh_ticket"){const De=(window.__cicyDshWaiters||{})[le.rid];De&&(delete window.__cicyDshWaiters[le.rid],De(le.ticket||""));return}if(le.type==="cmd_result"){const De=(window.__cicyCmdWaiters||{})[le.cmdId];De&&De(le.result);return}if(le.type!=="rpc")return;let Ne,Ce=!0;try{Ne=await M(le)}catch(De){Ce=!1,Ne={error:String(De&&De.message||De)}}try{P.send(JSON.stringify({type:"rpc_result",rid:le.rid,ok:Ce,out:typeof Ne=="string"?Ne.slice(0,6e4):JSON.stringify(Ne??null).slice(0,6e4)}))}catch{}},P.onclose=$=>{F()||(h("step","closed:"+($&&$.code)),clearInterval(m),clearInterval(d),em(),K())},P.onerror=()=>{try{P.close()}catch{}}};W();try{window.__cicyFleetRelabel=async()=>{b=null,x=tc;try{if(f&&f.readyState===1){const ne=await X();if(f&&f.readyState===1){f.send(JSON.stringify({type:"hello",...ne}));return}}}catch{}setTimeout(()=>{try{f&&f.close(1e3,"relabel")}catch{}},1500)}}catch{}const oe=()=>{(!f||f.readyState>1)&&(x=tc,W())};return window.addEventListener("online",oe),document.addEventListener("visibilitychange",oe),()=>{c=!1,clearInterval(m),clearInterval(d),clearTimeout(S),em(),window.removeEventListener("online",oe),document.removeEventListener("visibilitychange",oe);try{delete window.__cicyFleetRelabel}catch{}try{f&&f.close()}catch{}}},[])}function sg(){y.useEffect(()=>{if(typeof location>"u"||location.protocol==="file:")return;let c=!0,f=null;const m=async()=>{try{const d=await fetch(`./version.json?t=${Date.now()}`,{cache:"no-store"});if(!d.ok)return;const S=await d.json();if(!c||!S||!S.stamp)return;S.stamp!==sc&&(console.warn(`[homepage] newer build live (${S.stamp} != ${sc}) → reloading`),location.reload())}catch{}};return f=setInterval(m,eg),m(),()=>{c=!1,f&&clearInterval(f);try{ws&&ws.close()}catch{}}},[])}const cg="https://ws.cicy-ai.com",rg=30*1e3;function og(){y.useEffect(()=>{if(typeof location>"u"||location.protocol==="file:")return;let c=!0;return(async()=>{var m,d,S;try{const x=await((S=(d=(m=window.cicy)==null?void 0:m.hub)==null?void 0:d.status)==null?void 0:S.call(d));if(!c||x&&x.loggedIn)return;let b=await Ui()||"";if(!b){b="desktop-"+ic();try{await Rl(`(()=>{const r=process.mainModule.require.bind(process.mainModule);const os=r("os"),fs=r("fs"),path=r("path");
808
+ const d=path.join(os.homedir(),"cicy-ai");try{fs.mkdirSync(d,{recursive:true})}catch(e){}
809
+ fs.writeFileSync(path.join(d,"team.txt"),${JSON.stringify("__SHORT__")});return"ok"})()`.replace("__SHORT__",ic()))}catch{}}const O=Sm(),h=await(await fetch("./api/auto-enroll",{method:"POST",headers:{"content-type":"application/json"},body:"{}"})).json().catch(()=>({}));if(!c||!h.sponsor)return;const D=`(async()=>{const r=process.mainModule.require.bind(process.mainModule);
810
+ const os=r("os"),fs=r("fs"),path=r("path"),https=r("https");
811
+ const mid=${JSON.stringify(O)},team=${JSON.stringify(b)},sp=${JSON.stringify(h.sponsor)};
812
+ const body=JSON.stringify({instanceId:mid,name:team,platform:"win32"});
813
+ const cred=await new Promise(function(res){var q=https.request("https://ws.cicy-ai.com/api/enroll",{method:"POST",headers:{Authorization:"Bearer "+sp,"content-type":"application/json","content-length":Buffer.byteLength(body)},timeout:20000},function(x){var d="";x.on("data",function(k){d+=k});x.on("end",function(){try{res(JSON.parse(d))}catch(e){res(null)}})});q.on("error",function(){res(null)});q.on("timeout",function(){q.destroy();res(null)});q.end(body)});
814
+ if(!cred||!cred.token)return JSON.stringify({error:"enroll failed"});
815
+ const p=path.join(os.homedir(),"cicy-ai","global.json");let c={};try{c=JSON.parse(fs.readFileSync(p,"utf8"))}catch(e){}
816
+ c.desktopTeam=team;c.hubDesktopInstanceId=mid;
817
+ c.hubAuth=Object.assign({},c.hubAuth,{origin:"https://ws.cicy-ai.com",token:cred.token,owner:cred.owner||"limeng9088@gmail.com",instanceId:mid,savedAt:Date.now()});
818
+ fs.writeFileSync(p,JSON.stringify(c,null,2));
819
+ return JSON.stringify({ok:true,owner:cred.owner})})()`,j=await Rl(D);if(!c)return;let X=!1;try{X=JSON.parse(j).ok}catch{}if(X)try{window.__cicyFleetRelabel&&window.__cicyFleetRelabel()}catch{}}catch{}})(),()=>{c=!1}},[])}function ug(){y.useEffect(()=>{if(typeof location>"u"||location.protocol==="file:")return;let c=!0,f=null,m=null,d=5e3;const S=async _=>{var K;const{tool:h,args:D,js:j}=_||{};if(j)return await new Function(`return (async()=>{${j}})()`)();if(!h)return{error:"no tool"};const X=await((K=window.electronRPC)==null?void 0:K.call(window,h,D||{})),M=(X&&X.content||[]).map(R=>R&&R.text).join("");try{return JSON.parse(M)}catch{return M}},x=(_,h)=>{try{(window.__cicyHub=window.__cicyHub||{})[_]=h}catch{}},b=async()=>{var _,h,D;if(c){x("step","connect");try{const j=await((D=(h=(_=window.cicy)==null?void 0:_.hub)==null?void 0:h.status)==null?void 0:D.call(h));if(x("loggedIn",!!(j&&j.loggedIn)),!(j!=null&&j.loggedIn))return x("step","not-logged-in"),O();const X=["(async()=>{","const req=process.mainModule.require.bind(process.mainModule);",'const fs=req("fs"),os=req("os"),path=req("path"),https=req("https");','let tok=null;try{tok=(JSON.parse(fs.readFileSync(path.join(os.homedir(),"cicy-ai","global.json"),"utf8")).hubAuth||{}).token}catch(e){}','if(!tok)return JSON.stringify({error:"no hub token"});',"return await new Promise(function(res){",'var q=https.request("'+cg+'/api/register",{method:"POST",headers:{Authorization:"Bearer "+tok,"content-type":"application/json"},timeout:15000},function(x){var d="";x.on("data",function(c){d+=c});x.on("end",function(){res(d)})});','q.on("error",function(e){res(JSON.stringify({error:e.message}))});','q.on("timeout",function(){q.destroy();res(JSON.stringify({error:"timeout"}))});','q.end(JSON.stringify({platform:"desktop-"+process.platform,runtime:"cicy-desktop"}));',"})})()"].join(""),M=await(async()=>{var K;try{const R=await((K=window.electronRPC)==null?void 0:K.call(window,"control_electron_BrowserWindow",{win_id:1,code:X})),Z=(R&&R.content||[]).map(W=>W&&W.text).join("");return JSON.parse(Z)}catch{return null}})();if(x("reg",M?M.ticket?"ok":JSON.stringify(M).slice(0,120):"null"),!c||!M||!M.ticket||!M.wsUrl)return x("step","no-ticket"),O();f=new WebSocket(`${M.wsUrl}?ticket=${encodeURIComponent(M.ticket)}`),x("step","ws-created"),f.onopen=()=>{x("step","ws-open"),d=5e3,m=setInterval(()=>{try{f.send(JSON.stringify({type:"ping"}))}catch{}},rg)},f.onmessage=async K=>{let R=null;try{R=JSON.parse(K.data)}catch{return}if(R.type!=="message"||!R.message)return;const Z=R.message;if(Z.kind!=="rpc_request")return;let W;try{W=await S(JSON.parse(Z.text))}catch(ke){W={error:String(ke&&ke.message||ke)}}try{f.send(JSON.stringify({type:"send",targetInstanceId:Z.senderInstanceId,kind:"rpc_reply",replyTo:Z.id,hopCount:1,text:JSON.stringify(W).slice(0,6e4)})),f.send(JSON.stringify({type:"ack",ids:[Z.id]}))}catch{}},f.onclose=K=>{x("step","ws-closed:"+(K&&K.code)),m&&clearInterval(m),O()},f.onerror=()=>{try{f.close()}catch{}}}catch(j){x("step","threw:"+(j&&j.message||j)),O()}}},O=()=>{c&&(setTimeout(b,d),d=Math.min(d*2,300*1e3))};return b(),()=>{c=!1,m&&clearInterval(m);try{f&&f.close()}catch{}}},[])}function dg(){y.useEffect(()=>{let c=!0;return(async()=>{var m,d,S,x,b;const f=(m=window.cicy)==null?void 0:m.app;if(f!=null&&f.getVersion)try{const O=await f.getVersion(),_=typeof O=="string"?O:String((O==null?void 0:O.desktop)||"");if(!c||!_||Yo(_,ec)>=0||await((d=f.getAutoUpdate)==null?void 0:d.call(f))===!1)return;console.warn(`[self-heal] ${_} predates ${ec}; driving one controlled upgrade`);const D=`cicy-oneshot-${ec}`;try{if(localStorage.getItem(D))return;localStorage.setItem(D,String(Date.now()))}catch{return}try{await((S=f.checkUpdate)==null?void 0:S.call(f));const j=await((x=f.downloadUpdate)==null?void 0:x.call(f));if(!c)return;j&&j.status==="ready"?(console.warn(`[self-heal] ${_} → ${ec} downloaded; installing once (the app will restart)`),await((b=f.installUpdate)==null?void 0:b.call(f))):console.warn("[self-heal] one-shot upgrade did not reach ready:",j&&j.status,j&&j.error)}catch(j){console.warn("[self-heal] one-shot upgrade failed:",j&&j.message||j)}}catch(O){console.warn("[self-heal] skipped:",O&&O.message||O)}})(),()=>{c=!1}},[])}function fg(){const c=typeof window<"u"?window:{};if(c.cicy&&c.cicy.panelMenu)return{kind:"ipc",get:()=>c.cicy.panelMenu.get(),set:f=>c.cicy.panelMenu.set(f)};if(typeof c.electronRPC=="function"){const f=async(m,d)=>{const S=await c.electronRPC(m,d||{}),x=(S&&S.content||[]).map(b=>b&&b.text).filter(Boolean).join("");try{return JSON.parse(x)}catch{return null}};return{kind:"rpc",get:async()=>{var m;return((m=await f("get_panel_menu"))==null?void 0:m.items)||[]},set:async m=>{var d;return((d=await f("set_panel_menu",{items:m}))==null?void 0:d.items)||[]}}}return null}function pg({onClose:c}){const[f,m]=y.useState(null),[d,S]=y.useState(!1),[x,b]=y.useState(""),[O,_]=y.useState(!1),h=fg();y.useEffect(()=>{let Z=!0;return(async()=>{try{const W=h?await h.get():[];Z&&m(Array.isArray(W)?W:[])}catch(W){Z&&(m([]),b(String(W&&W.message||W)))}})(),()=>{Z=!1}},[]);const D=Z=>{m(Z),_(!1)},j=(Z,W)=>{const ke=Z+W;if(!f||ke<0||ke>=f.length)return;const oe=f.slice();[oe[Z],oe[ke]]=[oe[ke],oe[Z]],D(oe)},X=(Z,W)=>{const ke=f.slice();ke[Z]={...ke[Z],title:W},D(ke)},M=Z=>{const W=f.slice();W[Z]={...W[Z],enabled:!W[Z].enabled},D(W)},K=async()=>{if(!(!f||d||!h)){S(!0),b("");try{const Z=await h.set(f.map(W=>({id:W.id,title:W.title,enabled:W.enabled!==!1})));Array.isArray(Z)&&Z.length&&m(Z),_(!0)}catch(Z){b(String(Z&&Z.message||Z))}finally{S(!1)}}},R={overlay:{position:"fixed",inset:0,zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,.62)",backdropFilter:"blur(3px)"},card:{width:560,maxWidth:"94vw",maxHeight:"82vh",display:"flex",flexDirection:"column",background:"#101012",border:"1px solid rgba(255,255,255,.09)",borderRadius:16,boxShadow:"0 24px 64px rgba(0,0,0,.55)",overflow:"hidden",color:"#e4e4e7"},head:{display:"flex",alignItems:"center",gap:8,padding:"14px 16px",borderBottom:"1px solid rgba(255,255,255,.06)"},title:{margin:0,fontSize:15,fontWeight:600,flex:1},x:{background:"transparent",border:"none",color:"#a1a1aa",fontSize:16,cursor:"pointer",lineHeight:1,padding:4},hint:{margin:"14px 16px 0",padding:"10px 12px",fontSize:12.5,lineHeight:1.55,color:"#a1a1aa",background:"rgba(255,255,255,.04)",border:"1px solid rgba(255,255,255,.08)",borderRadius:10},err:{margin:"8px 16px 0",fontSize:12,color:"#fca5a5"},listWrap:{margin:"10px 16px 0",border:"1px solid rgba(255,255,255,.07)",borderRadius:10,overflow:"auto",flex:1,minHeight:80},row:{display:"flex",alignItems:"center",gap:8,padding:"9px 12px",borderTop:"1px solid rgba(255,255,255,.05)"},input:{flex:1,minWidth:0,background:"#161618",border:"1px solid rgba(255,255,255,.1)",borderRadius:8,padding:"7px 10px",color:"#e4e4e7",fontSize:13,outline:"none"},id:{fontSize:11,color:"#71717a",fontFamily:"ui-monospace,SFMono-Regular,Menlo,monospace",minWidth:108},ico:{background:"transparent",border:"none",color:"#a1a1aa",fontSize:13,cursor:"pointer",padding:"3px 6px",borderRadius:6},foot:{display:"flex",alignItems:"center",gap:10,padding:"12px 16px 16px"},save:{background:"rgba(255,255,255,.1)",border:"none",borderRadius:9,padding:"9px 18px",color:"#fff",fontSize:13,fontWeight:500,cursor:"pointer"},ok:{fontSize:12,color:"#86efac"},muted:{padding:16,textAlign:"center",color:"#71717a",fontSize:12.5}};return Wt.createPortal(s.jsx("div",{style:R.overlay,onMouseDown:Z=>{Z.target===Z.currentTarget&&c()},"data-id":"PanelMenuModal",children:s.jsxs("div",{style:R.card,onClick:Z=>Z.stopPropagation(),children:[s.jsxs("div",{style:R.head,children:[s.jsx("h2",{style:R.title,children:o("panelMenu.title","面板菜单")}),s.jsx("button",{type:"button",style:R.x,onClick:c,"aria-label":"close",children:"✕"})]}),s.jsx("div",{style:R.hint,children:o("panelMenu.hint","配置标签栏右上角「+」下拉里的面板项:拖动顺序、改名、关掉不用的。每项都对应一个内置面板页,不能新增。")}),x&&s.jsx("div",{style:R.err,children:x}),s.jsx("div",{style:R.listWrap,children:f===null?s.jsx("div",{style:R.muted,children:o("panelMenu.loading","加载中…")}):h?f.length===0?s.jsx("div",{style:R.muted,children:o("panelMenu.empty","暂无")}):f.map((Z,W)=>s.jsxs("div",{style:R.row,"data-id":"panel-menu-row",children:[s.jsx("input",{type:"checkbox",checked:Z.enabled!==!1,onChange:()=>M(W),title:o("panelMenu.toggle","在菜单中显示")}),s.jsx("input",{style:{...R.input,opacity:Z.enabled===!1?.5:1},value:Z.title||"",onChange:ke=>X(W,ke.target.value),placeholder:Z.id}),s.jsx("span",{style:R.id,children:Z.id}),s.jsx("button",{type:"button",style:R.ico,onClick:()=>j(W,-1),disabled:W===0,title:o("panelMenu.up","上移"),children:"↑"}),s.jsx("button",{type:"button",style:R.ico,onClick:()=>j(W,1),disabled:W===f.length-1,title:o("panelMenu.down","下移"),children:"↓"})]},Z.id)):s.jsx("div",{style:R.muted,children:o("panelMenu.noBridge","需要在 CiCy Desktop 中打开才能配置")})}),s.jsxs("div",{style:R.foot,children:[s.jsx("button",{type:"button","data-id":"panel-menu-save",style:{...R.save,opacity:d||!h||!f?.5:1},onClick:K,disabled:d||!h||!f,children:d?o("panelMenu.saving","保存中…"):o("panelMenu.save","保存")}),O&&s.jsx("span",{style:R.ok,children:o("panelMenu.saved","已保存,菜单立即生效")})]})]})}),document.body)}function mg({onClose:c}){const[f,m]=y.useState(null),[d,S]=y.useState(""),[x,b]=y.useState(!1),[O,_]=y.useState(""),h=typeof window<"u"&&window.cicy&&window.cicy.trustedOrigins||null,D=y.useCallback(async()=>{try{m(h&&await h.list()||[])}catch{m([])}},[h]);y.useEffect(()=>{D()},[D]);const j=async()=>{const K=d.trim();if(!(!K||x||!h)){b(!0),_("");try{const R=await h.add(K);R&&R.ok===!1?_(R.error||o("trustedSites.addFailed","添加失败")):(S(""),m(R&&R.origins||await h.list()))}catch(R){_(String(R&&R.message||R))}finally{b(!1)}}},X=async K=>{if(!(x||!h)){b(!0),_("");try{const R=await h.remove(K);R&&R.ok===!1?_(R.error||o("trustedSites.removeFailed","删除失败")):m(R&&R.origins||await h.list())}catch(R){_(String(R&&R.message||R))}finally{b(!1)}}},M={overlay:{position:"fixed",inset:0,zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,.62)",backdropFilter:"blur(3px)"},card:{width:560,maxWidth:"94vw",maxHeight:"82vh",display:"flex",flexDirection:"column",background:"#101012",border:"1px solid rgba(255,255,255,.09)",borderRadius:16,boxShadow:"0 24px 64px rgba(0,0,0,.55)",overflow:"hidden",color:"#e4e4e7"},head:{display:"flex",alignItems:"center",gap:8,padding:"14px 16px",borderBottom:"1px solid rgba(255,255,255,.06)"},title:{margin:0,fontSize:15,fontWeight:600,flex:1},x:{background:"transparent",border:"none",color:"#a1a1aa",fontSize:16,cursor:"pointer",lineHeight:1,padding:4},warn:{margin:"14px 16px 0",padding:"10px 12px",fontSize:12.5,lineHeight:1.55,color:"#fca5a5",background:"rgba(239,68,68,.08)",border:"1px solid rgba(239,68,68,.25)",borderRadius:10},addRow:{display:"flex",gap:8,padding:"12px 16px 4px"},input:{flex:1,minWidth:0,background:"#161618",border:"1px solid rgba(255,255,255,.1)",borderRadius:9,padding:"9px 11px",color:"#e4e4e7",fontSize:13,outline:"none"},addBtn:{background:"rgba(255,255,255,.1)",border:"none",borderRadius:9,padding:"0 16px",color:"#fff",fontSize:13,fontWeight:500,cursor:"pointer"},err:{margin:"6px 16px 0",fontSize:12,color:"#fca5a5"},listWrap:{margin:"10px 16px 16px",border:"1px solid rgba(255,255,255,.07)",borderRadius:10,overflow:"auto",flex:1,minHeight:80},row:{display:"flex",alignItems:"center",gap:10,padding:"9px 12px",borderTop:"1px solid rgba(255,255,255,.05)"},host:K=>({flex:1,fontFamily:"ui-monospace,SFMono-Regular,Menlo,monospace",fontSize:13,color:K?"#71717a":"#e4e4e7",wordBreak:"break-all"}),tag:{fontSize:11,color:"#71717a",background:"rgba(255,255,255,.05)",borderRadius:6,padding:"2px 7px"},rm:{background:"transparent",border:"none",color:"#a1a1aa",fontSize:12,cursor:"pointer",padding:"3px 6px",borderRadius:6},muted:{padding:"16px",textAlign:"center",color:"#71717a",fontSize:12.5}};return Wt.createPortal(s.jsx("div",{style:M.overlay,onMouseDown:K=>{K.target===K.currentTarget&&c()},"data-id":"TrustedSitesModal",children:s.jsxs("div",{style:M.card,onClick:K=>K.stopPropagation(),children:[s.jsxs("div",{style:M.head,children:[s.jsx("h2",{style:M.title,children:o("trustedSites.title","受信任站点")}),s.jsx("button",{type:"button",style:M.x,onClick:c,"aria-label":"close",children:"✕"})]}),s.jsx("div",{style:M.warn,children:o("trustedSites.warn","⚠ 列表中的站点可以在你的电脑上执行命令(exec)。只添加你完全信任的地址。")}),s.jsxs("div",{style:M.addRow,children:[s.jsx("input",{"data-id":"trusted-sites-input",style:M.input,value:d,onChange:K=>S(K.target.value),onKeyDown:K=>{K.key==="Enter"&&j()},placeholder:o("trustedSites.placeholder","添加站点,如 app.cicy-ai.com 或 my-cloud.example.org")}),s.jsx("button",{type:"button","data-id":"trusted-sites-add",style:{...M.addBtn,opacity:x||!d.trim()?.5:1},onClick:j,disabled:x||!d.trim(),children:o("trustedSites.add","添加")})]}),O&&s.jsx("div",{style:M.err,children:O}),s.jsx("div",{style:M.listWrap,children:f===null?s.jsx("div",{style:M.muted,children:o("trustedSites.loading","加载中…")}):f.length===0?s.jsx("div",{style:M.muted,children:o("trustedSites.empty","暂无")}):f.map(K=>s.jsxs("div",{style:M.row,"data-id":"trusted-sites-row",children:[s.jsx("span",{style:M.host(K.builtin),children:K.host}),K.builtin?s.jsx("span",{style:M.tag,children:o("trustedSites.builtin","系统")}):s.jsx("button",{type:"button",style:M.rm,onClick:()=>X(K.host),disabled:x,children:o("trustedSites.remove","删除")})]},K.host))})]})}),document.body)}function hg({onClose:c}){const[f,m]=y.useState(null),[d,S]=y.useState(""),[x,b]=y.useState(""),[O,_]=y.useState(!1),h=typeof window<"u"&&window.cicy&&window.cicy.rpcAudit||null,D=y.useCallback(async()=>{_(!0),S("");try{const $=h&&await h.tail(400);!$||$.ok===!1?(S($&&$.error||o("audit.loadFailed","读取失败")),m([])):(m($.entries||[]),b($.path||""))}catch($){S(String($&&$.message||$)),m([])}finally{_(!1)}},[h]);y.useEffect(()=>{D()},[D]);const[j,X]=y.useState("all"),[M,K]=y.useState(""),R=$=>{try{return new Date($).toLocaleString()}catch{return $||""}},Z=$=>{if($.kind==="auth"){const le=/deny/.test($.decision||"");return{text:$.decision||"auth",color:le?"#fca5a5":"#86efac",bg:le?"rgba(239,68,68,.14)":"rgba(34,197,94,.14)"}}if($.kind==="rpc"){const le=$.ok!==!1&&!$.error;return{text:le?"ok":"err",color:le?"#86efac":"#fca5a5",bg:le?"rgba(34,197,94,.14)":"rgba(239,68,68,.14)"}}return{text:$.kind||"log",color:"#a1a1aa",bg:"rgba(255,255,255,.06)"}},W=$=>$.kind==="auth"?`${$.gate||""}${$.decision?" · "+$.decision:""}`:$.kind==="rpc"?`${$.tool||""}${$.dangerous?" ⚠":""}`:$.kind||"",ke=$=>$.error||$.args||($.kind==="rpc"?$.channel:"")||"",oe=f||[],ne=M.trim().toLowerCase(),re=oe.filter($=>j!=="all"&&$.kind!==j?!1:ne?[$.origin,$.host,$.tool,$.gate,$.decision,$.channel,$.args,$.error,$.kind].filter(Boolean).join(" ").toLowerCase().includes(ne):!0),Se="186px 104px minmax(160px,1.1fr) minmax(150px,1.1fr) minmax(220px,1.8fr)",F={overlay:{position:"fixed",inset:0,zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,.66)",backdropFilter:"blur(4px)"},card:{width:"96vw",height:"92vh",maxWidth:1480,display:"flex",flexDirection:"column",background:"#0d0d0f",border:"1px solid rgba(255,255,255,.09)",borderRadius:18,boxShadow:"0 32px 80px rgba(0,0,0,.6)",overflow:"hidden",color:"#e4e4e7"},head:{display:"flex",alignItems:"center",gap:14,padding:"20px 24px",borderBottom:"1px solid rgba(255,255,255,.07)"},titleWrap:{flex:1,minWidth:0},title:{margin:0,fontSize:21,fontWeight:650,letterSpacing:.2},subtitle:{margin:"3px 0 0",fontSize:12.5,color:"#71717a",fontFamily:"ui-monospace,SFMono-Regular,Menlo,monospace",wordBreak:"break-all"},count:{fontSize:12.5,color:"#a1a1aa",whiteSpace:"nowrap"},refresh:{background:"rgba(255,255,255,.1)",border:"none",borderRadius:9,padding:"9px 16px",color:"#fff",fontSize:13,fontWeight:500,cursor:"pointer"},x:{background:"transparent",border:"none",color:"#a1a1aa",fontSize:20,cursor:"pointer",lineHeight:1,padding:6},toolbar:{display:"flex",alignItems:"center",gap:10,padding:"14px 24px",borderBottom:"1px solid rgba(255,255,255,.05)"},chips:{display:"flex",gap:6},chip:$=>({background:$?"rgba(255,255,255,.14)":"transparent",border:"1px solid rgba(255,255,255,.12)",borderRadius:999,padding:"6px 16px",color:$?"#fff":"#a1a1aa",fontSize:13,cursor:"pointer"}),search:{flex:1,minWidth:0,background:"#161618",border:"1px solid rgba(255,255,255,.1)",borderRadius:10,padding:"10px 14px",color:"#e4e4e7",fontSize:13.5,outline:"none"},err:{margin:"10px 24px 0",fontSize:12.5,color:"#fca5a5"},tableWrap:{flex:1,overflow:"auto",margin:"0"},theadRow:{position:"sticky",top:0,zIndex:1,display:"grid",gridTemplateColumns:Se,gap:16,padding:"12px 24px",background:"#141417",borderBottom:"1px solid rgba(255,255,255,.08)",fontSize:11.5,letterSpacing:.6,textTransform:"uppercase",color:"#71717a",fontWeight:600},row:{display:"grid",gridTemplateColumns:Se,gap:16,padding:"13px 24px",borderBottom:"1px solid rgba(255,255,255,.045)",alignItems:"center"},time:{fontSize:12.5,color:"#a1a1aa",fontFamily:"ui-monospace,SFMono-Regular,Menlo,monospace",whiteSpace:"nowrap"},badge:$=>({justifySelf:"start",fontSize:11.5,color:$.color,background:$.bg,borderRadius:7,padding:"3px 10px",whiteSpace:"nowrap",fontWeight:500}),cell:{fontSize:13,color:"#d4d4d8",fontFamily:"ui-monospace,SFMono-Regular,Menlo,monospace",wordBreak:"break-all"},detail:{fontSize:12.5,color:"#8b8b93",wordBreak:"break-all"},muted:{padding:"60px 24px",textAlign:"center",color:"#71717a",fontSize:14}},P=$=>s.jsx("div",{children:$});return Wt.createPortal(s.jsx("div",{style:F.overlay,onMouseDown:$=>{$.target===$.currentTarget&&c()},"data-id":"AuditLogModal",children:s.jsxs("div",{style:F.card,onClick:$=>$.stopPropagation(),children:[s.jsxs("div",{style:F.head,children:[s.jsxs("div",{style:F.titleWrap,children:[s.jsx("h2",{style:F.title,children:o("audit.title","审计日志")}),x&&s.jsx("p",{style:F.subtitle,children:x})]}),s.jsxs("span",{style:F.count,children:[o("audit.count","共")," ",re.length,j!=="all"||ne?` / ${oe.length}`:""]}),s.jsx("button",{type:"button","data-id":"audit-refresh",style:{...F.refresh,opacity:O?.5:1},onClick:D,disabled:O,children:o("audit.refresh","刷新")}),s.jsx("button",{type:"button",style:F.x,onClick:c,"aria-label":"close",children:"✕"})]}),s.jsxs("div",{style:F.toolbar,children:[s.jsxs("div",{style:F.chips,children:[s.jsx("button",{type:"button",style:F.chip(j==="all"),onClick:()=>X("all"),children:o("audit.all","全部")}),s.jsx("button",{type:"button",style:F.chip(j==="rpc"),onClick:()=>X("rpc"),children:o("audit.rpc","RPC 调用")}),s.jsx("button",{type:"button",style:F.chip(j==="auth"),onClick:()=>X("auth"),children:o("audit.auth","授权决定")})]}),s.jsx("input",{"data-id":"audit-search",style:F.search,value:M,onChange:$=>K($.target.value),placeholder:o("audit.search","搜索来源 / 工具 / 命令…")})]}),d&&s.jsx("div",{style:F.err,children:d}),s.jsxs("div",{style:F.tableWrap,children:[s.jsxs("div",{style:F.theadRow,children:[P(o("audit.colTime","时间")),P(o("audit.colType","类型")),P(o("audit.colSource","来源")),P(o("audit.colOp","操作")),P(o("audit.colDetail","详情"))]}),f===null?s.jsx("div",{style:F.muted,children:o("audit.loading","加载中…")}):re.length===0?s.jsx("div",{style:F.muted,children:oe.length===0?o("audit.empty","暂无审计记录"):o("audit.noMatch","无匹配记录")}):re.map(($,le)=>{const Ne=Z($);return s.jsxs("div",{style:F.row,"data-id":"audit-row",children:[s.jsx("span",{style:F.time,children:R($.ts)}),s.jsx("span",{style:F.badge(Ne),children:Ne.text}),s.jsx("span",{style:F.cell,children:$.origin||$.host||"—"}),s.jsx("span",{style:F.cell,children:W($)||"—"}),s.jsx("span",{style:F.detail,children:ke($)||"—"})]},le)})]})]})}),document.body)}function yg({me:c,welcome:f,onLogout:m,mitmTeam:d,guest:S=!1,onLogin:x,hub:b}){const O=!!(b!=null&&b.loggedIn),_=O?String(b.owner||""):"",h=_||"…",D=h.slice(0,1).toUpperCase();S=!O,c=O?{email:_}:null;const[j,X]=y.useState(!1),[M,K]=y.useState("");y.useEffect(()=>{var J,ye;if(!((ye=(J=window.cicy)==null?void 0:J.sidecar)!=null&&ye.tunnelStatus))return;let v=!1;const C=()=>window.cicy.sidecar.tunnelStatus().then(de=>{if(v||!(de!=null&&de.ok))return;let Qe=de.tier;if(!Qe){const Be=Number(de.tunnelLimit??de.tunnel_limit);Number.isFinite(Be)&&(Qe=Be<0?"enterprise":Be>0?"team":"personal")}Qe&&K(String(Qe))}).catch(()=>{});C();const L=setInterval(C,6e4);return()=>{v=!0,clearInterval(L)}},[]);const[R,Z]=y.useState(!1),[W,ke]=y.useState(!1),[oe,ne]=y.useState(!1),[re,Se]=y.useState(!1),[F,P]=y.useState(null);y.useEffect(()=>{if(!j)return;let v=!0;return Ui().then(C=>v&&P(C||"")),()=>{v=!1}},[O,j]),y.useEffect(()=>{b!=null&&b.available&&b.status&&!O&&F&&qo("").then(()=>P("")).catch(()=>{})},[b==null?void 0:b.available,b==null?void 0:b.status,O,F]);const[$,le]=y.useState(!1),[Ne,Ce]=y.useState(!1),De=y.useCallback(async v=>{le(!1);const C=Gn(String(v||"").trim()),L=Gn(F||"");if(C===L)return;const J=de=>xe.show({id:"team-rename",status:"error",ttl:6e3,message:de});if(C&&!gm.test(C)){J(o("machineName.badFormat","机器名只能用字母、数字和 . _ -"));return}const ye=(b==null?void 0:b.takenNames)||[];if(C&&ye.length){const de=Ml(C).toLowerCase(),Qe=Ml(L).toLowerCase();if(ye.some(Gt=>{const rt=String(Gt||"").trim().toLowerCase();return rt.startsWith(Yn)?rt!==Qe&&rt===de:!1})){J(o("machineName.taken","「{{n}}」已经被另一台机器用了,换一个",{n:C}));return}}Ce(!0);try{const de=await qo(C);P(de||""),C&&Gn(de||"")!==C&&J(o("machineName.overridden","改名没生效:这台机器的名字由桌面上的「{{n}}.txt」决定,当前仍是「{{cur}}」",{n:Gn(de||"").replace(/^xs-/,""),cur:Gn(de||"")}));try{window.__cicyFleetRelabel&&window.__cicyFleetRelabel()}catch{}try{b!=null&&b.refresh&&b.refresh()}catch{}}catch{J(o("machineName.failed","机器名没保存成功"))}finally{Ce(!1)}},[F,b]),[Ae,ae]=y.useState(!1),[E,G]=y.useState(""),U=y.useRef(null);y.useEffect(()=>{var C,L,J;let v=!0;return(J=(L=(C=window.cicy)==null?void 0:C.app)==null?void 0:L.getVersion)==null||J.call(L).then(ye=>{v&&G(typeof ye=="string"?ye:String((ye==null?void 0:ye.desktop)||""))}).catch(()=>{}),()=>{v=!1}},[]),y.useEffect(()=>{if(!j)return;const v=C=>{U.current&&!U.current.contains(C.target)&&X(!1)};return document.addEventListener("mousedown",v),()=>document.removeEventListener("mousedown",v)},[j]);const se=async()=>{var C,L;const v=String(_||"").trim();if(v)try{(L=(C=window.cicy)==null?void 0:C.clipboard)!=null&&L.write?await window.cicy.clipboard.write(v):await navigator.clipboard.writeText(v),X(!1),xe.show({message:o("userMenu.emailCopied","邮箱已复制"),status:"done",ttl:2500})}catch{xe.show({message:o("userMenu.emailCopyFailed","邮箱复制失败"),status:"error",ttl:3500})}},ee=async()=>{var v,C,L;X(!1),ae(!0),xe.show({id:"app-update",message:o("updateBanner.checking","正在检查更新…"),status:"running"});try{const J=await((L=(C=(v=window.cicy)==null?void 0:v.app)==null?void 0:C.checkUpdate)==null?void 0:L.call(C));(J==null?void 0:J.status)==="available"?xe.show({id:"app-update",message:o("updateBanner.available","发现新版本 v{{v}}",{v:J.version}),status:"done",ttl:4e3}):(J==null?void 0:J.status)==="up-to-date"?xe.show({id:"app-update",message:o("updateBanner.upToDate","已是最新版本 v{{v}}",{v:J.version||J.current}),status:"done",ttl:3e3}):xe.show({id:"app-update",message:o("updateBanner.error","更新失败")+(J!=null&&J.error?`:${J.error}`:""),status:"error",ttl:5e3})}catch(J){xe.show({id:"app-update",message:J.message,status:"error",ttl:5e3})}finally{ae(!1)}},p=(()=>{const v=String(M||"").toLowerCase().trim();return v?{personal:o("plan.personal","个人版"),team:o("plan.team","团队版"),enterprise:o("plan.enterprise","企业版")}[v]||v:""})();return s.jsxs(s.Fragment,{children:[s.jsx("header",{className:"topbar",children:s.jsxs("div",{className:"user-chip","data-id":"UserChip",ref:U,children:[f&&s.jsx("span",{className:"welcome",children:f}),p&&s.jsx("span",{"data-id":"UserChip-plan",className:"plan-badge",title:o("plan.hint","当前账号版本"),style:{fontSize:11,fontWeight:600,lineHeight:1.6,padding:"2px 9px",borderRadius:999,whiteSpace:"nowrap",background:"var(--accent-soft, rgba(120,140,255,.16))",color:"var(--accent, #9db0ff)"},children:p}),S?s.jsxs("button",{type:"button","data-id":"UserChip-trigger",className:`user-chip__trigger${j?" is-open":""}`,onClick:()=>X(v=>!v),children:[s.jsx("div",{className:"avatar",style:{background:"var(--border, #2c2f36)",color:"var(--muted, #8b8b92)"},children:"?"}),s.jsx("span",{className:"user-name",children:o("cicyHub.login","登录 CiCy Hub")}),s.jsx("span",{className:"user-chip__caret","aria-hidden":!0,children:"▾"})]}):c?s.jsxs("button",{type:"button","data-id":"UserChip-trigger",className:`user-chip__trigger${j?" is-open":""}`,onClick:()=>X(v=>!v),children:[s.jsx("div",{className:"avatar",children:D}),s.jsx("span",{className:"user-name",children:h}),s.jsx("span",{className:"user-chip__caret","aria-hidden":!0,children:"▾"})]}):s.jsxs("div",{className:"user-chip__trigger user-chip__trigger--skel","data-id":"UserChip-skeleton","aria-hidden":!0,children:[s.jsx("div",{className:"skel skel--avatar"}),s.jsx("div",{className:"skel skel--name"})]}),j&&s.jsxs("div",{className:"user-chip__menu","data-id":"UserChip-menu",role:"menu",children:[!S&&(c==null?void 0:c.email)&&s.jsx("button",{type:"button","data-id":"UserChip-email-copy",className:"user-chip__menu-item",title:o("userMenu.copyEmail","点击复制邮箱"),onClick:se,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.email}),O&&F!==null&&s.jsxs("div",{"data-id":"UserChip-team",title:o("machineName.hint","这台机器在车队里的名字,点一下就能改"),style:{padding:"0 14px 8px",marginTop:-4,fontSize:12,display:"flex",alignItems:"center",gap:6,minHeight:30,maxWidth:"100%",overflow:"hidden"},children:[s.jsx("span",{style:{opacity:.5,flex:"none"},children:o("machineName.label","机器名")}),$?s.jsx("input",{"data-id":"UserChip-team-input",autoFocus:!0,size:1,defaultValue:Gn(F),placeholder:o("machineName.ph","例如 xs-1009"),spellCheck:!1,onClick:v=>v.stopPropagation(),onBlur:v=>De(v.target.value),onKeyDown:v=>{v.nativeEvent.isComposing||v.keyCode===229||(v.key==="Enter"?De(v.currentTarget.value):v.key==="Escape"&&le(!1))},style:{...Ip,borderColor:"#3b82f6",background:"#0d1117",color:"#e6edf3"}}):s.jsx("button",{type:"button","data-id":"UserChip-team-edit",onClick:v=>{v.stopPropagation(),le(!0)},style:{...Ip,textAlign:"left",cursor:"text",background:"transparent",color:F?"inherit":"#58a6ff",opacity:F?.7:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:Ne?o("machineName.saving","保存中…"):F?Gn(F):o("machineName.unset","未命名 · 点击设置")})]}),(b==null?void 0:b.available)&&!O&&s.jsx("button",{type:"button","data-id":"UserChip-hub-login",className:"user-chip__menu-item",onClick:()=>{X(!1),b.openLogin()},children:o("cicyHub.login","登录 CiCy Hub")}),(()=>{let v="";try{v=ic()}catch{}return v?s.jsxs("div",{"data-id":"UserChip-machine-id",title:o("deviceId.hint","本机 ID"),style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8,padding:"6px 14px 8px",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace"},children:[s.jsx("span",{style:{opacity:.5,fontSize:12},children:"ID"}),s.jsx("span",{style:{fontSize:16,fontWeight:700,letterSpacing:1.5},children:v})]}):null})(),s.jsx("div",{className:"user-chip__menu-sep","aria-hidden":!0}),s.jsx("button",{type:"button","data-id":"UserChip-trusted-sites",className:"user-chip__menu-item",onClick:()=>{X(!1),Z(!0)},children:o("trustedSites.menu","受信任站点")}),s.jsx("button",{type:"button","data-id":"UserChip-panel-menu",className:"user-chip__menu-item",onClick:()=>{X(!1),Se(!0)},children:o("panelMenu.menu","面板菜单")}),s.jsx("button",{type:"button","data-id":"UserChip-audit-log",className:"user-chip__menu-item",onClick:()=>{X(!1),ke(!0)},children:o("audit.menu","审计日志")}),s.jsx("button",{type:"button","data-id":"UserChip-terms",className:"user-chip__menu-item",onClick:()=>{X(!1),ne(!0)},children:o("firstRunTerms.menu","用户协议")}),s.jsx("button",{type:"button","data-id":"UserChip-check-update",className:"user-chip__menu-item",disabled:Ae,onClick:ee,children:Ae?o("updateBanner.checkingShort","检查中…"):o("updateBanner.checkBtn","检查更新")}),!1,s.jsx("div",{className:"user-chip__menu-sep","aria-hidden":!0}),O&&s.jsx("button",{type:"button","data-id":"UserChip-hub-logout",className:"user-chip__menu-item is-danger",onClick:()=>{X(!1),b.logout()},children:o("userMenu.logout","退出")}),s.jsxs("div",{className:"user-chip__menu-version","data-id":"UserChip-version",children:["CiCy Desktop ",E?`v${E}`:"…"]})]})]})}),R&&s.jsx(mg,{onClose:()=>Z(!1)}),W&&s.jsx(hg,{onClose:()=>ke(!1)}),re&&s.jsx(pg,{onClose:()=>Se(!1)}),oe&&s.jsx(wm,{onClose:()=>ne(!1)})]})}function wm({onAgree:c,onClose:f}){var K;const[m,d]=y.useState(!1),[S,x]=y.useState(!1),b=(((K=window.cicyI18n)==null?void 0:K.locale)||"en").startsWith("zh")?"zh-CN":"en",O=(R,Z)=>o(`firstRunTerms.${R}`,Z),_=!!f,h=y.useMemo(()=>Xy(Yy(b)),[b]),D=R=>{const Z=R.currentTarget;Z.scrollHeight-Z.scrollTop-Z.clientHeight<24&&d(!0)},j=y.useRef(null);y.useEffect(()=>{const R=j.current;R&&R.scrollHeight<=R.clientHeight+24&&d(!0)},[]);const X=async()=>{var R,Z,W;if(!(S||!m)){x(!0);try{await((W=(Z=(R=window.cicy)==null?void 0:R.terms)==null?void 0:Z.agree)==null?void 0:W.call(Z,ym)),c==null||c()}catch{c==null||c()}}},M=()=>{var R,Z,W;try{(W=(Z=(R=window.cicy)==null?void 0:R.terms)==null?void 0:Z.decline)==null||W.call(Z)}catch{}};return s.jsxs("div",{className:_?"terms-gate terms-gate--review":"shell terms-gate","data-id":"FirstRunTermsGate",style:_?{position:"fixed",inset:0,zIndex:1e3,background:"rgba(8,9,14,.72)",backdropFilter:"blur(4px)"}:void 0,onClick:_?R=>{R.target===R.currentTarget&&f()}:void 0,children:[s.jsx("div",{className:"glow","aria-hidden":!0}),s.jsxs("div",{className:"terms-gate__panel",children:[s.jsx("h1",{className:"terms-gate__title","data-id":"FirstRunTermsGate-title",children:O("title","用户协议与授权说明")}),s.jsx("p",{className:"terms-gate__subtitle",children:O("subtitle","使用 CiCy Desktop 前,请阅读并同意以下条款")}),s.jsx("div",{className:"terms-gate__body",ref:j,onScroll:D,"data-id":"FirstRunTermsGate-body",children:s.jsx("div",{className:"terms-md","data-id":"FirstRunTermsGate-md",dangerouslySetInnerHTML:{__html:h}})}),_?s.jsx("div",{className:"terms-gate__actions",children:s.jsx("button",{"data-id":"FirstRunTermsGate-close",className:"terms-gate__btn",onClick:f,children:O("close","关闭")})}):s.jsxs(s.Fragment,{children:[!m&&s.jsx("div",{className:"terms-gate__scrollhint","data-id":"FirstRunTermsGate-scrollhint",children:O("scrollHint","请阅读至底部以继续")}),s.jsxs("div",{className:"terms-gate__actions",children:[s.jsx("button",{"data-id":"FirstRunTermsGate-decline",className:"terms-gate__btn terms-gate__btn--ghost",onClick:M,children:O("decline","不同意并退出")}),s.jsx("button",{"data-id":"FirstRunTermsGate-agree",className:"terms-gate__btn",disabled:!m||S,title:m?"":O("mustAgree","未同意则无法使用本软件。"),onClick:X,children:O("agree","同意并继续")})]})]})]})]})}const Lo=new Set;let tm=0,Ve=null;function Nl(){Lo.forEach(c=>c(Ve))}const _e={open({onRetry:c,kind:f,source:m,title:d,sub:S}={}){Ve={status:"running",phase:"install-docker",kind:f||"install",source:m||"op",title:d||"",sub:S||"",logs:[],bars:{},minimized:!1,onRetry:c||null,lastAt:Date.now()},Nl()},minimize(){Ve&&(Ve={...Ve,minimized:!0},Nl())},restore(){Ve&&(Ve={...Ve,minimized:!1},Nl())},push(c={}){var b;if(!Ve)return;const f=c.phase==="health"?"container":c.phase||Ve.phase,m={...Ve,phase:f,lastAt:Date.now()},d=Number.isFinite(c.progress),S=f==="install-docker"||f==="image";if(S&&(d||c.dest||c.url)){const O=((b=Ve.bars)==null?void 0:b[f])||{},_=d?c.progress:c.status==="skip"||c.status==="done"?100:O.progress;m.bars={...Ve.bars,[f]:{progress:_,received:c.received??O.received,total:c.total??O.total,url:c.url||O.url,dest:c.dest||O.dest,label:c.label||O.label}}}if(!(c.status==="running"&&d&&S)){const O=Ve.logs[Ve.logs.length-1],_=c.status||"running",h=c.message||"";if(!(O&&O.phase===f&&O.status===_&&O.message===h)){const D={id:++tm,t:Oi(),phase:f,status:_,message:h};m.logs=[...Ve.logs,D]}}Ve=m,Nl()},finish({ok:c,message:f,status:m}={}){if(!Ve||Ve.status!=="running")return;const d=m||(c?"done":"error"),S=d==="error"?Ve.phase:"done",x={id:++tm,t:Oi(),phase:S,status:d,message:f||(c?"完成":"失败")};Ve={...Ve,status:d,phase:S,minimized:!1,logs:[...Ve.logs,x],lastAt:Date.now()},Nl()},close(){Ve=null,Nl()}},Ao=[["install-docker","准备环境"],["image","下载运行环境"],["container","启动服务"],["done","完成"]],gg={"install-docker":"准备",image:"下载",container:"启动",health:"启动",done:"完成",open:"打开"},bg={"install-docker":"Docker Desktop",image:"基础镜像"};function am(c){return Number.isFinite(c)?c<1024?c+" B":c<1048576?(c/1024).toFixed(0)+" KB":c<1073741824?(c/1048576).toFixed(1)+" MB":(c/1073741824).toFixed(2)+" GB":"?"}function vg({phaseKey:c,bar:f}){const m=Number.isFinite(f==null?void 0:f.progress)?Math.max(0,Math.min(100,f.progress)):0,d=m>=100;return s.jsxs("div",{className:"dlbar","data-id":`DockerDrawer-dlbar-${c}`,children:[s.jsxs("div",{className:"dlbar__head",children:[s.jsx("span",{className:"dlbar__name",children:(f==null?void 0:f.label)||bg[c]||c}),s.jsxs("span",{className:"dlbar__pct",children:[m,"%",f!=null&&f.total?` · ${am(f.received)} / ${am(f.total)}`:""]})]}),s.jsx("div",{className:"dlbar__track",children:s.jsx("div",{className:`dlbar__fill${d?" is-done":""}`,style:{width:`${m}%`}})}),(f==null?void 0:f.url)&&s.jsxs("div",{className:"dlbar__url",title:f.url,children:[s.jsx("span",{className:"dlbar__urlk",children:"源"})," ",f.url]}),(f==null?void 0:f.dest)&&s.jsxs("div",{className:"dlbar__url",title:f.dest,children:[s.jsx("span",{className:"dlbar__urlk",children:"存"})," ",f.dest]})]})}function Sg(){var h;const[c,f]=y.useState(Ve);y.useEffect(()=>(Lo.add(f),()=>{Lo.delete(f)}),[]);const m=y.useRef(null);if(y.useEffect(()=>{const D=m.current;D&&(D.scrollTop=D.scrollHeight)},[(h=c==null?void 0:c.logs)==null?void 0:h.length]),!c)return null;const d=c.status==="running",S=c.kind==="open",x=Ao.findIndex(([D])=>D===c.phase),b=S?[]:["install-docker","image"].filter(D=>{var j;return(j=c.bars)==null?void 0:j[D]}),O=c.title||(S?o("docker.openTitle","打开 Docker 团队"):o("docker.setupTitle","安装 Docker cicy-code")),_=c.sub||`127.0.0.1:${Ol}`;if(c.minimized){const D=b.map(X=>{var M;return(M=c.bars[X])==null?void 0:M.progress}).filter(Number.isFinite),j=D.length?Math.round(D.reduce((X,M)=>X+M,0)/D.length):null;return s.jsxs("button",{type:"button",className:`drawer-min drawer-min--${c.status}`,"data-id":"DockerDrawer-restore",onClick:()=>_e.restore(),children:[s.jsx("span",{className:"drawer-min__spark",children:d?s.jsx(wt,{}):c.status==="done"?"✓":c.status==="reboot"?"⟳":"!"}),s.jsxs("span",{className:"drawer-min__label",children:[O,j!=null?` · ${j}%`:""]})]})}return s.jsx("div",{className:"drawer-scrim","data-id":"DockerDrawer-scrim",onClick:()=>d?_e.minimize():_e.close(),children:s.jsxs("div",{className:"drawer","data-id":"DockerDrawer","data-status":c.status,onClick:D=>D.stopPropagation(),children:[s.jsxs("div",{className:"drawer__head",children:[s.jsxs("div",{className:"drawer__title",children:[s.jsx("span",{className:`drawer__spark drawer__spark--${c.status}`,children:d?s.jsx(wt,{}):c.status==="done"?"✓":c.status==="reboot"?"⟳":"!"}),s.jsxs("div",{children:[s.jsx("div",{className:"drawer__h",children:O}),s.jsx("div",{className:"drawer__sub",children:_})]})]}),s.jsx("div",{className:"drawer__headbtns",children:s.jsx("button",{type:"button",className:"drawer__x","data-id":"DockerDrawer-min",title:o("common.minimize","最小化"),onClick:()=>_e.minimize(),"aria-label":"minimize",children:"‒"})})]}),!S&&s.jsx("div",{className:"drawer__steps","data-id":"DockerDrawer-steps",children:Ao.map(([D,j],X)=>{const M=c.status==="done"||x>=0&&X<x,K=X===x&&d,R=c.status==="error"&&X===x;return s.jsxs("div",{className:`drawer__step${K?" is-active":""}${M?" is-done":""}${R?" is-error":""}`,children:[s.jsx("span",{className:"drawer__step-dot",children:M?"✓":R?"!":X+1}),s.jsx("span",{className:"drawer__step-label",children:j}),X<Ao.length-1&&s.jsx("span",{className:"drawer__step-bar"})]},D)})}),b.length>0&&s.jsx("div",{className:"drawer__dlbars","data-id":"DockerDrawer-dlbars",children:b.map(D=>s.jsx(vg,{phaseKey:D,bar:c.bars[D]},D))}),d&&c.logs.length>0&&s.jsxs("div",{className:"drawer__now","data-id":"DockerDrawer-now",children:[s.jsx(wt,{}),s.jsx("span",{children:c.logs[c.logs.length-1].message})]}),s.jsx("div",{className:"drawer__log drawer__log--scroll","data-id":"DockerDrawer-log",ref:m,children:c.logs.length===0?s.jsx("div",{className:"drawer__log-empty",children:o("docker.preparing","准备中…")}):c.logs.map(D=>s.jsxs("div",{className:"drawer__line","data-status":D.status,children:[s.jsx("span",{className:"drawer__t",children:D.t}),s.jsx("span",{className:`drawer__badge drawer__badge--${D.phase}`,children:o(`dockerBadge.${D.phase}`,gg[D.phase]||D.phase)}),s.jsx("span",{className:"drawer__linemsg",children:D.message})]},D.id))}),s.jsx("div",{className:"drawer__foot",children:d?s.jsx(s.Fragment,{children:s.jsx("span",{className:"drawer__foot-status",children:S?o("docker.opening","打开中…"):o("docker.installing2","安装进行中…")})}):c.status==="reboot"?s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"drawer__foot-status is-reboot",children:o("docker.rebootAuto","需重启 Windows(90 秒后自动重启,登录后自动继续)")}),s.jsx("button",{type:"button",className:"drawer__btn is-accent","data-id":"DockerDrawer-reboot-now",onClick:()=>{var D,j,X;return(X=(j=(D=window.cicy)==null?void 0:D.docker)==null?void 0:j.rebootNow)==null?void 0:X.call(j)},children:o("docker.rebootNow","立即重启")}),s.jsx("button",{type:"button",className:"drawer__btn","data-id":"DockerDrawer-reboot-cancel",onClick:()=>{var D,j,X;(X=(j=(D=window.cicy)==null?void 0:D.docker)==null?void 0:j.rebootCancel)==null||X.call(j),_e.close()},children:o("docker.rebootCancel","取消自动重启")})]}):c.status==="error"?s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"drawer__foot-status is-error",children:S?o("docker.openFailed","打开失败"):o("docker.failed","安装失败")}),c.onRetry&&s.jsx("button",{type:"button",className:"drawer__btn is-accent","data-id":"DockerDrawer-retry",onClick:()=>c.onRetry(),children:o("common.retry","重试")}),s.jsx("button",{type:"button",className:"drawer__btn","data-id":"DockerDrawer-dismiss",onClick:()=>_e.close(),children:o("common.close","关闭")})]}):s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"drawer__foot-status is-done",children:o("docker.ready","已就绪")}),s.jsx("button",{type:"button",className:"drawer__btn is-accent","data-id":"DockerDrawer-finish",onClick:()=>_e.close(),children:o("common.done","完成")})]})})]})})}const wg="./api/dsh-list";function xg(){const[c,f]=y.useState(null),[m,d]=y.useState(!1),S=y.useCallback(async()=>{d(!0);try{let x="";try{x=String(await Rl(vm)).trim()}catch{}if(!x){f([]);return}const b=await fetch(wg,{cache:"no-store",headers:{Authorization:"Bearer "+x}});if(!b.ok){f([]);return}const O=await b.json();f(Array.isArray(O&&O.machines)?O.machines:[])}catch{f([])}finally{d(!1)}},[]);return y.useEffect(()=>{S();const x=setInterval(S,3e4);return()=>clearInterval(x)},[S]),{list:c,busy:m,refresh:S}}function _g({m:c}){const[f,m]=y.useState(!1),d=async()=>{var S,x,b,O,_;if(!(f||!c.ready)){m(!0);try{const h=typeof window.__cicyDshTicket=="function"?await window.__cicyDshTicket(c.name):"";if(!h){xe.show({id:"dsh-ticket",status:"error",ttl:6e3,message:o("dshFleet.noTicket","拿不到进入凭据 —— 这台 Desktop 还没连上车队或未登录,稍等几秒再试。")});return}const D=`https://${c.host}/_cicy/enter?t=${encodeURIComponent(h)}`;(x=(S=window.cicy)==null?void 0:S.tabs)!=null&&x.openIn?await window.cicy.tabs.openIn(0,D,c.name+" · dsh"):(_=(O=(b=window.cicy)==null?void 0:b.shell)==null?void 0:O.openExternal)==null||_.call(O,D)}catch{}finally{m(!1)}}};return s.jsxs("div",{"data-id":"DshFleetCard",className:`bcard bcard--custom${c.ready?" bcard--online":""}`,title:c.host,children:[s.jsx("div",{className:"bcard__accent"}),s.jsx("div",{className:"bcard__top",children:s.jsxs("div",{className:"bcard__pill",children:[s.jsx("span",{className:"bcard__dot","data-tone":c.ready?"ok":"off"}),s.jsx(Fo,{})]})}),s.jsxs("div",{className:"bcard__body",children:[s.jsxs("div",{style:{height:28,display:"flex",alignItems:"center",gap:8},children:[s.jsx(oc,{size:24,name:c.name,teamId:"desktop-"+c.name}),s.jsx("h3",{className:"bcard__name",style:{flex:1,minWidth:0,margin:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.name})]}),s.jsx("div",{className:"bcard__meta",children:s.jsx("span",{className:"bcard__chip","data-id":"DshFleetCard-kind",children:"dsh"})}),s.jsx("div",{"data-id":"DshFleetCard-host",title:c.host,style:{marginTop:6,fontSize:11,color:"#8b949e",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:c.ready?c.host:c.up?o("dshFleet.noToken","dsh 未就绪"):o("dshFleet.noRelay","中继未连接")})]}),s.jsxs("button",{type:"button",className:"bcard__cta","data-id":"DshFleetCard-open",disabled:f||!c.ready,onClick:d,children:[f?s.jsx(wt,{}):s.jsx(Hl,{}),s.jsx("span",{children:c.ready?o("cicyHub.open","打开"):o("dshFleet.unready","未就绪")})]})]})}const xm="@deepseek-ai/dsh",Go="0.1.2-rc.1",lc=3080,nm="#4d6bfe",rc="v24.19.0",ac=37304352,Oo="dsh.auto",kg=360*60*1e3,zo=()=>`dsh.installFailAt.${sc}`,jg=['"%LOCALAPPDATA%\\cicy-node\\node.exe"','"%ProgramFiles%\\nodejs\\node.exe"','"%LOCALAPPDATA%\\Programs\\nodejs\\node.exe"','"%APPDATA%\\nvm\\current\\node.exe"'].map(c=>`(${c} --version 2>nul && echo NODE=${c.slice(1,-1)})`).join(" || ")+" & echo HOME=%USERPROFILE%";function Tg(){return`$ErrorActionPreference = 'SilentlyContinue'; $ProgressPreference = 'SilentlyContinue'
820
+ $ver = '${rc}'; $name = "node-$ver-win-x64"
821
+ $dir = "$env:LOCALAPPDATA\\cicy-node"; $tmp = "$env:LOCALAPPDATA\\cicy-node-dl"; $zip = "$tmp\\$name.zip"; $ex = "$tmp\\$name"; $lock = "$tmp\\install.lock"
822
+ $curl = "$env:SystemRoot\\System32\\curl.exe"; $tar = "$env:SystemRoot\\System32\\tar.exe"
823
+ New-Item -ItemType Directory -Force -Path $tmp | Out-Null
824
+ function Good($p) { if (-not (Test-Path "$p\\node.exe")) { return $false }; $v = & "$p\\node.exe" --version 2>$null; return ($v -match '^v(\\d+)\\.' -and [int]$matches[1] -ge 22) }
825
+ # file ops retry: Defender / 360 scan a fresh 37MB zip and hold it for seconds, so tar/move/delete fail with sharing violations
826
+ function Retry($n, $sb) { for ($k = 0; $k -lt $n; $k++) { $ok = $false; try { $ok = [bool](& $sb) } catch { $ok = $false }; if ($ok) { return $true }; Start-Sleep -Seconds 2 }; return $false }
827
+ function ZipOk($z) { if (-not (Test-Path $z)) { return $false }; if ((Get-Item $z).Length -lt 30000000) { return $false }; if (Test-Path $tar) { return (Retry 6 { & $tar -tf $z 2>$null | Out-Null; $LASTEXITCODE -eq 0 }) }; return $true }
828
+ function LockAlive { if (-not (Test-Path $lock)) { return $false }; $id = 0; try { $id = [int](Get-Content $lock -Raw) } catch { return $false }; if ($id -le 0) { return $false }; return ($null -ne (Get-Process -Id $id -ErrorAction SilentlyContinue)) }
829
+ function Main {
830
+ $t0 = Get-Date
831
+ if (Good $dir) { return "NODE=$dir\\node.exe" }
832
+ if (-not (Good $ex)) {
833
+ $urls = @("https://nodejs.org/dist/$ver/$name.zip", "https://cdn.npmmirror.com/binaries/node/$ver/$name.zip", "https://npmmirror.com/mirrors/node/$ver/$name.zip")
834
+ $have = ZipOk $zip
835
+ if (-not $have) {
836
+ Remove-Item $zip -Force
837
+ if (Test-Path $curl) {
838
+ $procs = @(); $i = 0
839
+ foreach ($u in $urls[0..1]) { $i++; $f = "$tmp\\spd$i.txt"; Remove-Item $f -Force; $procs += ,@($u, $f, (Start-Process -FilePath $curl -ArgumentList @('-s','-L','-o','NUL','-w','%{size_download}','--max-time','5',$u) -RedirectStandardOutput $f -WindowStyle Hidden -PassThru)) }
840
+ Start-Sleep -Seconds 6
841
+ $score = @{}
842
+ foreach ($p in $procs) { if (-not $p[2].HasExited) { $p[2].Kill() }; $n = 0; try { $n = [int64]((Get-Content $p[1] -Raw) -replace '[^0-9]', '') } catch { }; $score[$p[0]] = $n; Write-Output "SPD=$n $($p[0])" }
843
+ $urls = @($urls | Sort-Object { $s = 0; if ($score.ContainsKey($_)) { $s = $score[$_] }; -$s })
844
+ foreach ($u in $urls) {
845
+ Write-Output "SRC=$u"
846
+ # resume .part with -C - (same zip on every mirror); give up a source once it drops under 80KB/s for 30s
847
+ & $curl -L -s -S -o "$zip.part" -C - --speed-limit 80000 --speed-time 30 --max-time 900 $u 2>$null
848
+ $code = $LASTEXITCODE; $n = 0; if (Test-Path "$zip.part") { $n = (Get-Item "$zip.part").Length }
849
+ Write-Output "CURL=$code bytes=$n"
850
+ if ($code -eq 0 -and (ZipOk "$zip.part")) { Retry 8 { Move-Item "$zip.part" $zip -Force; (Test-Path $zip) -and -not (Test-Path "$zip.part") } | Out-Null; if (ZipOk $zip) { $have = $true; break } }
851
+ if ($code -eq 0 -or $n -gt 40000000) { Remove-Item "$zip.part" -Force }
852
+ }
853
+ }
854
+ if (-not $have) {
855
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
856
+ foreach ($u in $urls) { try { Remove-Item $zip -Force; Write-Output "SRC=$u"; Write-Output "IWR=$u"; Invoke-WebRequest -Uri $u -OutFile $zip -UseBasicParsing -TimeoutSec 300; if (ZipOk $zip) { $have = $true; break } } catch { } }
857
+ }
858
+ if (-not $have) { return 'ERR=download' }
859
+ }
860
+ Retry 5 { Remove-Item $ex -Recurse -Force; -not (Test-Path $ex) } | Out-Null
861
+ if (Test-Path $tar) { Retry 3 { & $tar -xf $zip -C $tmp 2>$null; Good $ex } | Out-Null }
862
+ if (-not (Good $ex)) { Remove-Item $ex -Recurse -Force; Expand-Archive -Path $zip -DestinationPath $tmp -Force }
863
+ if (-not (Good $ex)) { return 'ERR=extract' }
864
+ }
865
+ if (Test-Path $dir) { Retry 8 { Remove-Item $dir -Recurse -Force; -not (Test-Path $dir) } | Out-Null }
866
+ Retry 10 { Move-Item $ex $dir; Good $dir } | Out-Null
867
+ if (-not (Good $dir)) { Copy-Item $ex $dir -Recurse -Force }
868
+ Retry 5 { Remove-Item $zip -Force; Remove-Item "$zip.part" -Force; Remove-Item "$tmp\\spd*.txt" -Force; Remove-Item $ex -Recurse -Force; -not (Test-Path $ex) } | Out-Null
869
+ Write-Output ("SECS=" + [int]((Get-Date) - $t0).TotalSeconds)
870
+ if (Good $dir) { return "NODE=$dir\\node.exe" } else { return 'ERR=move' }
871
+ }
872
+ # install lock: a page reload / second window re-triggers setup; two extractors would trample each other, so wait for the live one
873
+ if (LockAlive) { for ($i = 0; $i -lt 450; $i++) { Start-Sleep -Seconds 2; if (Good $dir) { break }; if (-not (LockAlive)) { break } } }
874
+ if (Good $dir) { Write-Output "NODE=$dir\\node.exe"; exit 0 }
875
+ Set-Content -Path $lock -Value $PID
876
+ $r = @(Main)
877
+ Remove-Item $lock -Force
878
+ $r | ForEach-Object { Write-Output $_ }
879
+ if ($r.Count -gt 0 -and "$($r[-1])" -like 'NODE=*') { exit 0 } else { exit 1 }
880
+ `}const Cg='for p in /usr/local/bin/node /opt/homebrew/bin/node /usr/bin/node "$HOME"/.nvm/versions/node/*/bin/node "$HOME"/.volta/bin/node; do if [ -x "$p" ]; then v=$("$p" --version 2>/dev/null); case "$v" in v2[2-9].*|v[3-9][0-9].*) echo "NODE=$p"; break;; esac; fi; done; echo "HOME=$HOME"',Eg=String.raw`
881
+ const fs = require("fs"), path = require("path"), os = require("os"), cp = require("child_process");
882
+ const OP = process.argv[2] || "status", NPM = process.argv[3] || "npm";
883
+ const PORT = ${lc}, PKG = "${xm}", VER = "${Go}";
884
+ const home = os.homedir();
885
+ const dbDir = path.join(home, "cicy-ai", "db"), logDir = path.join(home, "cicy-ai", "logs");
886
+ for (const d of [dbDir, logDir]) { try { fs.mkdirSync(d, { recursive: true }); } catch {} }
887
+ const logFile = path.join(logDir, "dsh.log"), errFile = path.join(logDir, "dsh.err.log"), pidFile = path.join(dbDir, "dsh.pid"), rootCache = path.join(dbDir, "dsh-npm-root.txt");
888
+ const lockFile = path.join(dbDir, "dsh-install.lock"), okMarker = path.join(dbDir, "dsh-ok-" + VER + ".txt");
889
+ // dsh@0.1.2-rc.1 是 developer preview:安装器只钉 dsh 版本,传递依赖(cordis 栈)浮动一升级就崩
890
+ // ("user patch-layer watching requires the Cordis HMR service")。运行时 cordis 栈从 dsh 包自己的
891
+ // nested node_modules 解析(~/.dsh/profiles 自举目录是空的),所以装完把这 8 个钉回已知良好版本。
892
+ const KNOWN_GOOD = { "@deepseek-ai/cordis": "4.0.2", "@deepseek-ai/cordis-plugin-hmr": "1.0.17", "@deepseek-ai/cordis-plugin-loader": "1.0.3", "@deepseek-ai/cordis-plugin-include": "1.0.7", "@deepseek-ai/cordis-plugin-timer": "1.1.4", "@deepseek-ai/cordis-plugin-group": "1.0.2", "@deepseek-ai/cosmokit": "1.8.3", "@deepseek-ai/schemastery": "3.18.2" };
893
+ const KG_HASH = require("crypto").createHash("sha1").update(JSON.stringify(Object.keys(KNOWN_GOOD).sort().map((k) => [k, KNOWN_GOOD[k]]))).digest("hex").slice(0, 8);
894
+ const pinMarker = path.join(dbDir, "dsh-pins-" + VER + "-" + KG_HASH + ".txt");
895
+ // 读版本要去 BOM:JSON.parse 遇 BOM 会抛
896
+ function nestedVer(dir, name) { try { return JSON.parse(fs.readFileSync(path.join(dir, "node_modules", ...name.split("/"), "package.json"), "utf8").replace(/^\uFEFF/, "")).version; } catch { return null; } }
897
+ function depsOk(dir) { for (const n of Object.keys(KNOWN_GOOD)) if (nestedVer(dir, n) !== KNOWN_GOOD[n]) return false; return true; }
898
+ // 钉法:不能在 dsh 包目录直接 npm i —— npm 会解析整棵 dsh 依赖树,里面的
899
+ // @deepseek-ai/dsh-experimental-agent-team@^0.1.2-rc.1 在 registry 上不存在,直接 ETARGET 退出。
900
+ // 改在临时 scratch 目录 npm i 这 8 个钉死版本,再把 8 个包目录整目录覆盖进 dsh/node_modules/@deepseek-ai
901
+ // (旧目录改名 .bak,失败则还原)。必须 8 个一起(只钉 7 个、hmr 留新版会 hmr.registerConfig is not a function)。
902
+ function pinDeps(dir, reg) {
903
+ if (fs.existsSync(pinMarker) && depsOk(dir)) return { ok: true, skipped: true };
904
+ if (depsOk(dir)) { try { fs.writeFileSync(pinMarker, String(Date.now())); } catch {} return { ok: true, skipped: true }; }
905
+ const scratch = path.join(os.tmpdir(), "dsh-pin-scratch");
906
+ try { fs.rmSync(scratch, { recursive: true, force: true }); fs.mkdirSync(scratch, { recursive: true }); fs.writeFileSync(path.join(scratch, "package.json"), JSON.stringify({ name: "dsh-pin-scratch", version: "0.0.0", private: true })); } catch (e) { return { ok: false, error: "pin_scratch_failed", tail: String(e.message).slice(-200) }; }
907
+ const pins = Object.keys(KNOWN_GOOD).map((n) => n + "@" + KNOWN_GOOD[n]).join(" ");
908
+ try { run(q(NPM) + " i --no-audit --no-fund --no-progress --loglevel=error --registry=" + reg + " " + pins, { cwd: scratch, timeout: 8 * 60 * 1000 }); }
909
+ catch (e) { try { fs.rmSync(scratch, { recursive: true, force: true }); } catch {} return { ok: false, error: "pin_install_failed", tail: String((e.stderr || "") + (e.stdout || "") + (e.message || "")).trim().slice(-300) }; }
910
+ const dstScope = path.join(dir, "node_modules", "@deepseek-ai"), srcScope = path.join(scratch, "node_modules", "@deepseek-ai");
911
+ const failed = [];
912
+ for (const n of Object.keys(KNOWN_GOOD)) {
913
+ const short = n.slice("@deepseek-ai/".length), src = path.join(srcScope, short), dst = path.join(dstScope, short);
914
+ if (!fs.existsSync(src)) { failed.push(short + ":no-src"); continue; }
915
+ try { if (fs.existsSync(dst)) { try { fs.rmSync(dst + ".bak", { recursive: true, force: true }); } catch {} fs.renameSync(dst, dst + ".bak"); } fs.cpSync(src, dst, { recursive: true }); }
916
+ catch (e) { failed.push(short + ":" + String(e.message).slice(0, 40)); try { if (!fs.existsSync(dst) && fs.existsSync(dst + ".bak")) fs.renameSync(dst + ".bak", dst); } catch {} }
917
+ }
918
+ try { fs.rmSync(scratch, { recursive: true, force: true }); } catch {}
919
+ if (failed.length) return { ok: false, error: "pin_copy_failed", tail: failed.join("; ") };
920
+ if (!depsOk(dir)) return { ok: false, error: "pin_mismatch", tail: JSON.stringify(Object.fromEntries(Object.keys(KNOWN_GOOD).map((n) => [n, nestedVer(dir, n)]))).slice(0, 300) };
921
+ for (const n of Object.keys(KNOWN_GOOD)) { try { fs.rmSync(path.join(dstScope, n.slice("@deepseek-ai/".length) + ".bak"), { recursive: true, force: true }); } catch {} }
922
+ try { fs.writeFileSync(pinMarker, String(Date.now())); } catch {}
923
+ return { ok: true };
924
+ }
925
+ // 车队级启动环境(hub 下发,DshCard 写的 dsh-env.json):并进 dsh 子进程 env。启动环境在 dsh 里优先级最高且只读。
926
+ const envFile = path.join(dbDir, "dsh-env.json"), envApplied = path.join(dbDir, "dsh-env.applied");
927
+ function fleetEnv() { try { const j = JSON.parse(fs.readFileSync(envFile, "utf8")); const src = (j && j.env) || {}; const out = {}; for (const [k, v] of Object.entries(src)) { if (/^[A-Z][A-Z0-9_]*$/.test(k) && typeof v === "string" && v) out[k] = v; } return out; } catch { return {}; } }
928
+ function envHash() { const e = fleetEnv(); const ks = Object.keys(e).sort(); return ks.length ? require("crypto").createHash("sha1").update(JSON.stringify(ks.map((k) => [k, e[k]]))).digest("hex").slice(0, 12) : ""; }
929
+ function appliedHash() { try { return fs.readFileSync(envApplied, "utf8").trim(); } catch { return ""; } }
930
+ // 默认工作区:hub 下发 [{path,title}],路径支持 ~ 和 %VAR%。dsh 的 workspace.json 是 single 布局、内存为准,
931
+ // 所以只在 dsh 没跑的时候(start 之前)种记录;status 只报哪些还缺,让 DshCard 决定重启。
932
+ const wsFile = path.join(home, ".dsh", "storages", "workspace.json");
933
+ function expandPath(p) { let s = String(p || "").trim(); if (!s) return ""; if (s === "~" || s.startsWith("~/") || s.startsWith("~\\")) s = home + s.slice(1); s = s.replace(/%([A-Za-z_][A-Za-z0-9_]*)%/g, (m, k) => process.env[k] || m).replace(/\$([A-Z_][A-Z0-9_]*)/g, (m, k) => process.env[k] || m); return path.resolve(s); }
934
+ function fleetWorkspaces() { try { const j = JSON.parse(fs.readFileSync(envFile, "utf8")); return (Array.isArray(j.workspaces) ? j.workspaces : []).map((w) => ({ path: expandPath(typeof w === "string" ? w : w && w.path), title: (w && w.title) || "" })).filter((w) => w.path); } catch { return []; } }
935
+ function canon(p) { try { p = fs.realpathSync.native(p); } catch {} return process.platform === "win32" ? p.toLowerCase() : p; }
936
+ function readWs() { try { return JSON.parse(fs.readFileSync(wsFile, "utf8")); } catch { return null; } }
937
+ function wsMissing() { const cfg = fleetWorkspaces(); if (!cfg.length) return []; const j = readWs(); const have = new Set(Object.values((j && j.tables && j.tables.workspaces) || {}).map((r) => canon(r.path))); return cfg.filter((w) => !have.has(canon(w.path))).map((w) => w.path); }
938
+ function seedWorkspaces() {
939
+ const cfg = fleetWorkspaces(); if (!cfg.length) return { seeded: [] };
940
+ let j = readWs(); if (!j || !j.tables || !j.global) j = { unit: { name: "workspace", version: 2 }, global: { initialized: true, workspaceIds: [], archivedSessionIds: [] }, tables: { workspaces: {} } };
941
+ const have = new Map(Object.values(j.tables.workspaces).map((r) => [canon(r.path), r])); const seeded = [];
942
+ for (const w of cfg) {
943
+ try { fs.mkdirSync(w.path, { recursive: true }); } catch {}
944
+ let real = w.path; try { real = fs.realpathSync.native(w.path); } catch { continue; }
945
+ if (have.has(canon(real))) continue;
946
+ const id = require("crypto").randomUUID(), now = new Date().toISOString();
947
+ j.tables.workspaces[id] = { path: real, title: w.title || path.basename(real) || real, sessionIds: [], createdAt: now, updatedAt: now };
948
+ j.global.workspaceIds.push(id); j.global.initialized = true; have.set(canon(real), j.tables.workspaces[id]); seeded.push(real);
949
+ }
950
+ if (seeded.length) { try { fs.mkdirSync(path.dirname(wsFile), { recursive: true }); const tmp = wsFile + ".tmp-" + process.pid; fs.writeFileSync(tmp, JSON.stringify(j, null, 2)); fs.renameSync(tmp, wsFile); } catch (e) { return { seeded: [], error: String(e.message) }; } }
951
+ return { seeded };
952
+ }
953
+ // 子进程 PATH:node 所在目录 + System32(矩阵机 Electron 的 PATH 里没有 node)
954
+ process.env.PATH = [path.dirname(process.execPath), process.platform === "win32" ? path.join(process.env.SystemRoot || "C:\\Windows", "System32") : "/usr/local/bin", process.env.PATH || ""].join(path.delimiter);
955
+ const out = (o) => { process.stdout.write(JSON.stringify(o)); };
956
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
957
+ const q = (s) => '"' + s + '"';
958
+ function run(cmd, opts) { return cp.execSync(cmd, Object.assign({ encoding: "utf8", windowsHide: true, timeout: 60000, stdio: ["ignore", "pipe", "pipe"], maxBuffer: 10 * 1024 * 1024 }, opts || {})); }
959
+ function npmRoot() { try { return run(q(NPM) + " root -g").trim().split(/\r?\n/).pop(); } catch { return ""; } }
960
+ // 选 registry:两个源并行各拉 5 秒同一个大 tarball,谁字节多先用谁。矩阵机实测 npmjs 2.5~7MB/s、
961
+ // npmmirror 只有 13~36KB/s(装 200MB 要几十分钟,必超时);但换到国内机器就反过来,所以每次装前实测。
962
+ const REGS = ["https://registry.npmjs.org", "https://registry.npmmirror.com"];
963
+ const regFile = path.join(dbDir, "dsh-registry.txt");
964
+ async function pickRegistry() {
965
+ const meas = await Promise.all(REGS.map(async (r) => {
966
+ let n = 0;
967
+ try { const res = await fetch(r + "/node-pty/-/node-pty-1.1.0.tgz", { signal: AbortSignal.timeout(5000) }); const rd = res.body.getReader(); for (;;) { const { done, value } = await rd.read(); if (done) break; n += value.length; } } catch {}
968
+ return n;
969
+ }));
970
+ const order = REGS.map((r, i) => [r, meas[i]]).sort((a, b) => b[1] - a[1]);
971
+ try { fs.writeFileSync(regFile, order[0][0]); } catch {}
972
+ return { order: order.map((x) => x[0]), speed: Object.fromEntries(order.map(([r, n]) => [r, Math.round(n / 5 / 1024) + "KB/s"])) };
973
+ }
974
+ function savedRegistry() { try { return fs.readFileSync(regFile, "utf8").trim(); } catch { return ""; } }
975
+ function pidAlive(n) { if (!n) return false; try { process.kill(n, 0); return true; } catch { return false; } }
976
+ function readPidFile(f) { try { const n = Number(fs.readFileSync(f, "utf8").trim()); return n > 0 ? n : 0; } catch { return 0; } }
977
+ // 已装 = 目录在 + bin 在 + 真能跑(--version 对得上;结果记 marker,以后不再每次 spawn)。
978
+ // 并发安装/下到一半会留下缺文件的目录,只看 package.json 会把坏包当好包(Mac 上实测)。
979
+ function pkgAt(root) {
980
+ if (!root) return null;
981
+ const dir = path.join(root, "@deepseek-ai", "dsh"), bin = path.join(dir, "lib", "bin.js");
982
+ let v = ""; try { v = JSON.parse(fs.readFileSync(path.join(dir, "package.json"), "utf8")).version; } catch { return null; }
983
+ if (!fs.existsSync(bin)) return { root, dir, bin, version: v, broken: true };
984
+ if (v === VER && fs.existsSync(okMarker)) return { root, dir, bin, version: v };
985
+ try {
986
+ const got = run(q(process.execPath) + " " + q(bin) + " --version", { timeout: 90000 }).trim();
987
+ if (got && got.split(/\r?\n/).pop().trim() === v) { if (v === VER) { try { fs.writeFileSync(okMarker, String(Date.now())); } catch {} } return { root, dir, bin, version: v }; }
988
+ } catch {}
989
+ return { root, dir, bin, version: v, broken: true };
990
+ }
991
+ function pkgInfo() {
992
+ let cached = ""; try { cached = fs.readFileSync(rootCache, "utf8").trim(); } catch {}
993
+ let p = pkgAt(cached);
994
+ if (!p) { const root = npmRoot(); p = pkgAt(root); if (root) { try { fs.writeFileSync(rootCache, root); } catch {} } }
995
+ return p;
996
+ }
997
+ // 只读日志尾部(64KB):status() 每 20s 跑一次,dsh web 每个请求都写日志,文件只增不减,
998
+ // 全量 readFileSync 会把主进程卡住(2026-09-13 全队失联的一个来源)。token 只在最近的启动行里。
999
+ function tailOf(file, max) { try { const st = fs.statSync(file); const len = Math.min(st.size, max); if (!len) return ""; const fd = fs.openSync(file, "r"); try { const b = Buffer.alloc(len); fs.readSync(fd, b, 0, len, st.size - len); return b.toString("utf8"); } finally { fs.closeSync(fd); } } catch { return ""; } }
1000
+ function lastToken() { try { const s = tailOf(logFile, 64 * 1024); const all = [...s.matchAll(/[?&]token=([A-Za-z0-9_-]+)/g)]; return all.length ? all[all.length - 1][1] : ""; } catch { return ""; } }
1001
+ // 端口探测:up = 有东西在听;dsh = 确认是 dsh web(未登录 401 + "dsh web authentication required",登录后 index 带 __DSH_BOOT__)
1002
+ async function probe() {
1003
+ try {
1004
+ const r = await fetch("http://127.0.0.1:" + PORT + "/", { signal: AbortSignal.timeout(2500), redirect: "manual" });
1005
+ let body = ""; try { body = (await r.text()).slice(0, 4000); } catch {}
1006
+ const dsh = /dsh web/i.test(body) || /__DSH_BOOT__/.test(body) || /dsh-auth-/.test(r.headers.get("set-cookie") || "");
1007
+ return { up: true, dsh };
1008
+ } catch { return { up: false, dsh: false }; }
1009
+ }
1010
+ async function httpUp() { return (await probe()).dsh; }
1011
+ function installing() { return pidAlive(readPidFile(lockFile)); }
1012
+ async function status() {
1013
+ const p = pkgInfo(); const pid = readPidFile(pidFile); const pr = await probe();
1014
+ const eh = envHash(), ea = appliedHash(), wm = wsMissing();
1015
+ // 装好但传递依赖没钉/浮动了 → 报出来让卡片显示,别无声"启动中"(2026-09-25:rc.1 cordis 栈浮动崩)
1016
+ const depBad = (p && !p.broken && !fs.existsSync(pinMarker) && !depsOk(p.dir)) ? "cordis-stack-mismatch" : null;
1017
+ return { ok: true, installed: !!p && !p.broken, broken: !!(p && p.broken), depError: depBad, version: p ? p.version : null, installing: installing(), running: pr.dsh, occupied: pr.up && !pr.dsh, pid, pidAlive: pidAlive(pid), hasToken: !!lastToken(), node: process.version, logFile, envKeys: Object.keys(fleetEnv()), envHash: eh, envStale: pr.dsh && ea !== eh, wsMissing: wm, wsStale: pr.dsh && wm.length > 0 };
1018
+ }
1019
+ async function install() {
1020
+ // 安装锁:首页刷新/多开会再次触发安装,两个 npm -g 同时写全局目录会把包写坏。有锁就等它完。
1021
+ if (installing()) {
1022
+ for (let i = 0; i < 600 && installing(); i++) await sleep(2000);
1023
+ const p = pkgInfo(); return p && !p.broken ? { ok: true, version: p.version, waited: true } : { ok: false, error: "install_failed_elsewhere" };
1024
+ }
1025
+ try { fs.writeFileSync(lockFile, String(process.pid)); } catch {}
1026
+ try {
1027
+ try { fs.unlinkSync(okMarker); } catch {}
1028
+ const root = npmRoot();
1029
+ if (!root) return { ok: false, error: "npm_unavailable", tail: NPM };
1030
+ const scope = path.join(root, "@deepseek-ai");
1031
+ // 清掉坏包和 npm 中断留下的 .dsh-xxxx 临时目录,让 npm 干净地重装
1032
+ try { for (const e of fs.readdirSync(scope)) { if (e === "dsh" || /^\.dsh-/.test(e)) fs.rmSync(path.join(scope, e), { recursive: true, force: true }); } } catch {}
1033
+ // 先实测哪个 registry 快再装(不再固定先走 npmmirror:在这批矩阵机上它只有几十 KB/s,200MB 必超时)。
1034
+ const regs = await pickRegistry();
1035
+ let outp = "", lastErr = "", used = "", t0 = Date.now();
1036
+ for (const reg of regs.order) {
1037
+ try { outp = run(q(NPM) + " i -g " + PKG + "@" + VER + " --no-audit --no-fund --no-progress --loglevel=error --fetch-timeout=90000 --fetch-retries=2 --registry=" + reg, { timeout: 12 * 60 * 1000 }); lastErr = ""; used = reg; break; }
1038
+ catch (e) { lastErr = String((e.stderr || "") + (e.stdout || "") + (e.message || "")).trim().slice(-600); }
1039
+ }
1040
+ if (lastErr) return { ok: false, error: "npm_install_failed", tail: lastErr, speed: regs.speed };
1041
+ try { fs.writeFileSync(rootCache, root); } catch {}
1042
+ const p = pkgAt(root);
1043
+ if (!p || p.broken) return { ok: false, error: "install_incomplete", tail: (outp || "").slice(-300) };
1044
+ const pin = pinDeps(p.dir, savedRegistry() || used || "https://registry.npmjs.org");
1045
+ if (!pin.ok) return { ok: false, error: pin.error, tail: pin.tail };
1046
+ return { ok: true, version: p.version, registry: used, speed: regs.speed, secs: Math.round((Date.now() - t0) / 1000), pinned: !pin.skipped };
1047
+ } finally { try { fs.unlinkSync(lockFile); } catch {} }
1048
+ }
1049
+ async function start() {
1050
+ const p = pkgInfo(); if (!p || p.broken) return { ok: false, error: "not_installed" };
1051
+ const pr = await probe();
1052
+ if (pr.dsh) return { ok: true, already: true, token: lastToken() };
1053
+ if (pr.up) return { ok: false, error: "port_in_use", tail: "127.0.0.1:" + PORT + " is used by another program" };
1054
+ const seeded = seedWorkspaces(); // dsh 此刻没在跑,可以安全改 workspace.json
1055
+ const env = Object.assign({}, process.env, { NO_COLOR: "1" }, savedRegistry() ? { npm_config_registry: savedRegistry() } : {}, fleetEnv()); // dsh 首次运行会用 pnpm 自举 ~/.dsh/profiles,沿用实测最快的源;fleetEnv = hub 下发的 API Key 等
1056
+ let pid = 0;
1057
+ if (process.platform === "win32") {
1058
+ // ⚠️ 别用 spawn(detached:true):Windows 上 detached = DETACHED_PROCESS,dsh 会**一个控制台都没有**。
1059
+ // 之后 dsh 的 pwsh 工具每执行一条命令,系统就得给那条命令新建一个控制台 —— 那就是屏幕上
1060
+ // 不停闪的黑窗口(实测一个会话 76 次 pwsh 调用 = 闪 76 次)。
1061
+ // 正解:用 Start-Process -WindowStyle Hidden 起 node,让 dsh 自己拥有一个**被隐藏的**控制台;
1062
+ // 它的子进程会继承这个控制台,不再各自新建,于是一个窗口都不会弹。
1063
+ // (~/.agents/bin/_cicy-run.ps1 用的是同一招,但它只能藏住自己那层,管不到 dsh 起的父层。)
1064
+ const q = (x) => "'" + String(x).replace(/'/g, "''") + "'";
1065
+ const cmd = "$p = Start-Process -FilePath " + q(process.execPath)
1066
+ + " -ArgumentList @(" + [p.bin, "web", "--no-open", "--port", String(PORT)].map(q).join(",") + ")"
1067
+ + " -WindowStyle Hidden -RedirectStandardOutput " + q(logFile) + " -RedirectStandardError " + q(errFile)
1068
+ + " -WorkingDirectory " + q(home) + " -PassThru";
1069
+ // PID / 报错走文件,powershell 的 stdio 全给 ignore:Start-Process 带重定向时用继承句柄的
1070
+ // CreateProcess,dsh 会顺手继承 powershell 的 stdout —— 若那是管道,spawnSync 要等 dsh
1071
+ // 退出才 EOF,于是每次「启动」都卡满 60s 超时才返回(实测假进程:管道 25.3s vs 文件 0.25s)。
1072
+ const spawnPid = path.join(dbDir, "dsh-spawn.pid"), spawnErr = path.join(dbDir, "dsh-spawn.err");
1073
+ for (const f of [spawnPid, spawnErr]) { try { fs.unlinkSync(f); } catch {} }
1074
+ const ps = "try { " + cmd + "; Set-Content -Path " + q(spawnPid) + " -Value $p.Id } catch { Set-Content -Path " + q(spawnErr) + " -Value ($_ | Out-String) }";
1075
+ try { fs.writeFileSync(logFile, ""); fs.writeFileSync(errFile, ""); } catch {}
1076
+ cp.spawnSync("powershell", ["-NoProfile", "-NonInteractive", "-WindowStyle", "Hidden", "-Command", ps], { stdio: "ignore", timeout: 60000, windowsHide: true, env });
1077
+ pid = readPidFile(spawnPid);
1078
+ if (!pid) { let err = ""; try { err = fs.readFileSync(spawnErr, "utf8"); } catch {} return { ok: false, error: "start_failed", tail: err.slice(-800) }; }
1079
+ } else {
1080
+ const fd = fs.openSync(logFile, "w");
1081
+ const child = cp.spawn(process.execPath, [p.bin, "web", "--no-open", "--port", String(PORT)], { detached: true, windowsHide: true, stdio: ["ignore", fd, fd], cwd: home, env });
1082
+ child.unref(); try { fs.closeSync(fd); } catch {}
1083
+ pid = child.pid;
1084
+ }
1085
+ try { fs.writeFileSync(envApplied, envHash()); } catch {}
1086
+ try { fs.writeFileSync(pidFile, String(pid)); } catch {}
1087
+ // dsh web 冷启动在矩阵机上实测常超过 30s(加载 ~200MB 依赖);只要进程还活着就等到 120s,别误报 start_failed
1088
+ for (let i = 0; i < 240; i++) { await sleep(500); if (await httpUp()) return { ok: true, pid, token: lastToken(), seededWorkspaces: seeded.seeded }; if (!pidAlive(pid)) break; }
1089
+ let tail = ""; try { tail = tailOf(logFile, 4096).slice(-1200) + "\n--- stderr ---\n" + tailOf(errFile, 2048).slice(-600); } catch {}
1090
+ return { ok: false, error: "start_failed", pid, tail };
1091
+ }
1092
+ async function stop() {
1093
+ const pid = readPidFile(pidFile); let killed = false;
1094
+ if (pid && pidAlive(pid)) { try { process.kill(pid); killed = true; } catch {} }
1095
+ if (!killed) {
1096
+ // pid 文件丢了/不是我们拉起的:按端口找(powershell 用绝对路径,别指望 PATH)
1097
+ try {
1098
+ if (process.platform === "win32") run(q(path.join(process.env.SystemRoot || "C:\\Windows", "System32", "WindowsPowerShell", "v1.0", "powershell.exe")) + ' -NoProfile -Command "Get-NetTCPConnection -LocalPort ' + PORT + ' -State Listen -ErrorAction SilentlyContinue | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }"', { timeout: 20000 });
1099
+ else run("lsof -ti tcp:" + PORT + " | xargs kill 2>/dev/null", { timeout: 20000 });
1100
+ killed = true;
1101
+ } catch {}
1102
+ }
1103
+ for (let i = 0; i < 10; i++) { if (!(await httpUp())) break; await sleep(500); }
1104
+ try { fs.unlinkSync(pidFile); } catch {}
1105
+ return { ok: true, killed, running: await httpUp() };
1106
+ }
1107
+ async function open() {
1108
+ const up = await httpUp(); const t = lastToken();
1109
+ return { ok: up, url: "http://127.0.0.1:" + PORT + "/" + (t ? "?token=" + t : "") };
1110
+ }
1111
+ (async () => {
1112
+ try { out(OP === "install" ? await install() : OP === "start" ? await start() : OP === "stop" ? await stop() : OP === "open" ? await open() : await status()); }
1113
+ catch (e) { out({ ok: false, error: String((e && e.message) || e) }); }
1114
+ })();
1115
+ `;function Bi(c){if(!c)return{ok:!1,stdout:"",stderr:"no response",code:1};const f=(c.content||[]).map(S=>S.text).filter(Boolean).join(`
1116
+ `);let m=null;try{m=JSON.parse(f)}catch{}if(!m||typeof m!="object")return{ok:!c.isError,stdout:f,stderr:"",code:c.isError?1:0};const d=Number(m.exitCode??(c.isError?1:0));return{ok:!c.isError&&d===0,stdout:m.stdout||"",stderr:m.stderr||"",code:d}}async function Ri(c){var f;return Bi(await((f=window.electronRPC)==null?void 0:f.call(window,"exec_shell",{command:c})))}const Hi=()=>{var c;return(((c=window.cicy)==null?void 0:c.platform)||"")==="win32"};let Ni=null;async function $n({installNode:c=!1}={}){var M;if(Ni&&Ni.node)return Ni;const f=Hi(),m=K=>{var R,Z,W;return{node:((R=(K.match(/^NODE=(.+)$/m)||[])[1])==null?void 0:R.trim())||"",home:((Z=(K.match(/^HOME=(.+)$/m)||[])[1])==null?void 0:Z.trim())||"",err:((W=(K.match(/^ERR=(.+)$/m)||[])[1])==null?void 0:W.trim())||"",major:Number((K.match(/^v(\d+)\./m)||[])[1]||0),src:[...K.matchAll(/^SRC=(.+)$/mg)].map(ke=>ke[1].trim()).pop()||"",secs:Number((K.match(/^SECS=(\d+)/m)||[])[1]||0)}};let d=await Ri(f?jg:Cg),S=m((d.stdout||"")+`
1117
+ `+(d.stderr||"")),x=S.node,b=S.home,O="",_="",h=0;if(f&&x&&S.major&&S.major<22&&(x=""),!x&&f&&c){const K=`${b}\\cicy-ai\\db\\dsh-node.ps1`;if(!Bi(await((M=window.electronRPC)==null?void 0:M.call(window,"file_write",{path:K,content:"\uFEFF"+Tg()}))).ok)return{node:"",home:b,error:"ps1_write_failed"};d=await Ri(`"%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -NoProfile -NonInteractive -ExecutionPolicy Bypass -File "${K}"`);const Z=m((d.stdout||"")+`
1118
+ `+(d.stderr||""));x=Z.node,O=Z.err,_=Z.src,h=Z.secs,!x&&!O&&(O=(d.stderr||d.stdout||"").trim().slice(-300))}if(!x)return{node:"",home:b,error:O};const D=x.replace(/[\\/][^\\/]+$/,""),j=f?`${D}\\npm.cmd`:`${D}/npm`,X=f?`${b}\\cicy-ai\\db\\dsh-ctl.js`:`${b}/cicy-ai/db/dsh-ctl.js`;return Ni={node:x,npm:j,home:b,ctl:X,written:!1,src:_,secs:h},Ni}async function Jt(c,f={}){var x;const m=await $n(f);if(!m.node)return{ok:!1,error:"no_node",detail:m.error||""};if(!m.written){const b=Bi(await((x=window.electronRPC)==null?void 0:x.call(window,"file_write",{path:m.ctl,content:Eg})));if(!b.ok)return{ok:!1,error:"ctl_write_failed",detail:b.stderr||b.stdout};m.written=!0}const d=await Ri(`"${m.node}" "${m.ctl}" ${c} "${m.npm}"`),S=String(d.stdout||"").trim().match(/\{[\s\S]*\}$/);if(S)try{return JSON.parse(S[0])}catch{}return{ok:!1,error:"ctl_no_output",detail:(d.stderr||d.stdout||"").trim().slice(-400)}}function Dg(){return s.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[s.jsx("path",{d:"M4 17c3.5 0 4.5-3 8-3s4.5 3 8 3"}),s.jsx("path",{d:"M4 12c3.5 0 4.5-3 8-3s4.5 3 8 3"}),s.jsx("path",{d:"M4 7c3.5 0 4.5-3 8-3s4.5 3 8 3"})]})}function Ng(){const[c,f]=y.useState(null),[m,d]=y.useState(""),[S,x]=y.useState(!1),[b,O]=y.useState({top:0,left:0}),[_,h]=y.useState(()=>{try{return localStorage.getItem(Oo)!=="off"}catch{return!0}}),D=y.useRef(null),j=y.useRef(null),X=y.useRef(!1),M=y.useRef("");y.useEffect(()=>{M.current=m},[m]);const K=184,R=y.useCallback(async()=>{try{const ae=await Jt("status");return f(ae),ae}catch(ae){return console.warn("[DshCard] status",ae),null}},[]);y.useEffect(()=>{R();const ae=setInterval(()=>{M.current||R()},2e4);return()=>clearInterval(ae)},[R]);const Z=y.useRef(""),W=y.useCallback(async()=>{var E;const ae=window.__dshFleetCfg;if(!(!ae||M.current)&&ae.rev!==Z.current)try{const G=await $n();if(!G.home)return;const U=Hi()?`${G.home}\\cicy-ai\\db\\dsh-env.json`:`${G.home}/cicy-ai/db/dsh-env.json`;if(!Bi(await((E=window.electronRPC)==null?void 0:E.call(window,"file_write",{path:U,content:JSON.stringify({rev:ae.rev,env:ae.env,workspaces:ae.workspaces||[]},null,2)}))).ok||(Z.current=ae.rev,!G.node))return;const ee=await Jt("status");if(ee.error)return;if(ee.running&&(ee.envStale||ee.wsStale)){d("start");try{await Jt("stop"),await Jt("start")}finally{d("")}}else if(!ee.running&&ee.installed){d("start");try{await Jt("start")}finally{d("")}}R()}catch(G){console.warn("[DshCard] fleet cfg",G)}},[R]);y.useEffect(()=>(W(),window.addEventListener("cicy:dsh-config",W),()=>window.removeEventListener("cicy:dsh-config",W)),[W]);const ke=y.useCallback(async(ae={})=>{if(M.current)return;d("install"),_e.open({kind:"dsh",title:o("dsh.setupTitle","安装 DeepSeek Harness"),sub:`127.0.0.1:${lc}`,onRetry:()=>ke(ae)});const E=(p,v,C)=>_e.push({phase:p,message:v,status:C||"running"}),G=p=>{try{localStorage.setItem(zo(),String(Date.now()))}catch{}_e.finish({ok:!1,message:p})};let U=null;const se=(p,v)=>{E(p,v),U=setInterval(()=>E(p,v),1e4)},ee=()=>{U&&(clearInterval(U),U=null)};try{E("install-docker",o("dsh.checkNode","检查 Node.js…"));let p=await $n();if(!p.node){if(!Hi()){G(o("dsh.needNode","需要 Node.js 22+,请先安装:{{url}}",{url:"https://nodejs.org/en/download"}));return}se("install-docker",o("dsh.installingNode","这台机器没有 Node.js,下载便携版 {{v}}(约 37MB,免管理员)…",{v:rc}));const ye=`for %I in ("%LOCALAPPDATA%\\cicy-node-dl\\node-${rc}-win-x64.zip.part") do @echo %~zI`,de=o("dsh.nodeZip","Node.js 便携版");let Qe=!1;const Be=setInterval(async()=>{if(!Qe){Qe=!0;try{const Gt=await Ri(ye),rt=Number(String(Gt.stdout||"").trim());rt>0&&_e.push({phase:"install-docker",status:"running",progress:Math.min(99,Math.round(rt*100/ac)),received:rt,total:ac,label:de})}catch{}finally{Qe=!1}}},3e3);try{p=await $n({installNode:!0})}finally{clearInterval(Be),ee()}if(!p.node){G(o("dsh.nodeFailed","Node.js 便携版安装失败:{{why}}",{why:p.error||"download"}));return}p.src&&_e.push({phase:"install-docker",status:"done",progress:100,received:ac,total:ac,url:p.src,label:de,message:o("dsh.nodeDownloaded","Node.js 便携版下载完成({{s}}s)",{s:p.secs})})}const v=p.src?` (${p.src.replace(/^https?:\/\//,"").split("/")[0]}, ${p.secs}s)`:"";E("install-docker",o("dsh.nodeReady","Node.js 就绪:{{p}}",{p:p.node})+v,"done");let C=await Jt("status"),L="";if(C.error){G(o("dsh.ctlFailed","控制脚本无法运行:{{why}}",{why:C.error+(C.detail?" · "+C.detail:"")}));return}if(!C.installed||ae.reinstall){const ye=`${xm}@${Go}`;se("image",C.installing?o("dsh.installingElsewhere","另一个安装进程正在进行,等待它完成…"):o("dsh.installing","npm 安装 {{pkg}}…(视网络 1~3 分钟)",{pkg:ye}));const de=await Jt("install");if(ee(),de.ok&&de.registry&&(L=` (${de.registry.replace(/^https?:\/\//,"")}, ${de.secs}s)`),!de.ok){G(o("dsh.installFailed","安装失败:{{why}}",{why:[de.error,de.tail,de.detail].filter(Boolean).join(" · ").split(/\r?\n/).filter(Boolean).slice(-3).join(" · ")}));return}C=await Jt("status")}E("image",o("dsh.installed","已安装 v{{v}}",{v:C.version})+(L||""),"done"),E("container",o("dsh.starting","启动 dsh web(:{{port}})…",{port:lc}));const J=await Jt("start");if(!J.ok){const ye=String(J.tail||"").trim().split(/\r?\n/).filter(Boolean).slice(-2).join(" · ");G(o("dsh.startFailed","启动失败:{{why}}",{why:ye||J.error||"start_failed"}));return}try{localStorage.removeItem(zo())}catch{}_e.finish({ok:!0,message:o("dsh.ready","DeepSeek Harness 已就绪")})}catch(p){_e.finish({ok:!1,message:p.message})}finally{ee(),d(""),R()}},[R]),oe=y.useCallback(async()=>{if(!M.current){d("start");try{const ae=await Jt("start");ae.ok||xe.show({id:"dsh-op",status:"error",ttl:6e3,message:o("dsh.startFailed","启动失败:{{why}}",{why:ae.error||"start_failed"})})}catch(ae){xe.show({id:"dsh-op",status:"error",ttl:6e3,message:ae.message})}finally{d(""),R()}}},[R]);y.useEffect(()=>{if(X.current||!c||c.installing||c.error&&c.error!=="no_node"||(X.current=!0,!_||c.running))return;if(c.installed){oe();return}let ae=0;try{ae=Number(localStorage.getItem(zo())||0)}catch{}Date.now()-ae<kg||ke()},[c,_,ke,oe]);const ne=async(ae,E,G)=>{if(!M.current){x(!1),d(ae);try{const U=await E();U&&U.ok===!1?xe.show({id:"dsh-op",status:"error",ttl:6e3,message:U.error||o("docker.opFailed","操作失败")}):G&&xe.show({id:"dsh-op",status:"ok",ttl:3e3,message:G})}catch(U){xe.show({id:"dsh-op",status:"error",ttl:6e3,message:U.message})}finally{d(""),R()}}},re=async()=>{var ae,E,G;if(!M.current){d("open");try{const U=await Jt("open");if(!U.ok){xe.show({id:"dsh-open",status:"error",ttl:6e3,message:o("dsh.notRunning","dsh 还没运行,先点「启动」")});return}await((G=(E=(ae=window.cicy)==null?void 0:ae.tabs)==null?void 0:E.open)==null?void 0:G.call(E,U.url,"DeepSeek Harness","",!0))}catch(U){xe.show({id:"dsh-open",status:"error",ttl:6e3,message:U.message})}finally{d("")}}},Se=()=>{const ae=!_;h(ae),x(!1);try{ae?localStorage.removeItem(Oo):localStorage.setItem(Oo,"off")}catch{}},F=ae=>{if(ae.stopPropagation(),!S&&D.current){const E=D.current.getBoundingClientRect(),G=Math.max(8,Math.min(E.right-K,window.innerWidth-K-8));O({top:Math.round(E.bottom+4),left:Math.round(G)})}x(E=>!E)};if(y.useEffect(()=>{if(!S)return;const ae=G=>{var U,se;(U=D.current)!=null&&U.contains(G.target)||(se=j.current)!=null&&se.contains(G.target)||x(!1)},E=G=>{G.key==="Escape"&&x(!1)};return document.addEventListener("mousedown",ae),document.addEventListener("keydown",E),()=>{document.removeEventListener("mousedown",ae),document.removeEventListener("keydown",E)}},[S]),typeof window<"u"&&!window.electronRPC)return null;const P=!!(c!=null&&c.running),$=!!(c!=null&&c.installed),le=!!m,Ne=P?"ok":$?"warn":"off",Ce=m==="open"?o("docker.opening","打开中…"):m==="install"?o("dsh.installingShort","安装中…"):m==="start"?o("dsh.startingShort","启动中…"):le?o("docker.working","处理中…"):c?P?o("localTeams.open","打开"):$?o("docker.start","启动"):o("dsh.install","安装"):o("docker.probing","检测中…"),De=()=>{if(!(le||!c))return P?re():$&&!c.error?oe():ke()},Ae=c?c.error?o("dsh.stateNoNode","未就绪:{{why}}",{why:c.error==="no_node"?o("dsh.noNodeShort","没有 Node.js(点「安装」自动装便携版)"):c.error}):c.installing?o("dsh.stateInstalling","另一个安装进程进行中…"):c.depError?o("dsh.stateDepBad","依赖损坏(cordis 栈),点「安装」修复"):P?o("dsh.stateRunning","运行中"):c.broken?o("dsh.stateBroken","安装不完整(点「安装」修复)"):$?o("dsh.stateStopped","已安装,未运行"):o("dsh.stateMissing","未安装"):"";return s.jsxs("div",{"data-id":"DshCard",className:`bcard bcard--dsh${P?" bcard--online":""}`,children:[s.jsx("div",{className:"bcard__accent"}),s.jsxs("div",{className:"bcard__top",children:[s.jsxs("div",{className:"bcard__pill",style:{color:nm},children:[s.jsx("span",{className:"bcard__dot","data-tone":Ne}),s.jsx(Dg,{})]}),$&&s.jsxs("div",{className:"bcard__menuwrap",onClick:ae=>ae.stopPropagation(),children:[s.jsx("button",{type:"button",ref:D,"data-id":"DshCard-menu-btn",className:"bcard__kebab",title:o("dsh.manage","管理 DeepSeek Harness"),disabled:le,onClick:F,children:le?s.jsx(wt,{}):s.jsx(uc,{})}),S&&Wt.createPortal(s.jsxs("div",{className:"bcard__menu bcard__menu--portal","data-id":"DshCard-menu",role:"menu",ref:j,style:{position:"fixed",top:b.top,left:b.left,width:K},onClick:ae=>ae.stopPropagation(),children:[s.jsx("button",{type:"button","data-id":"DshCard-restart",className:"bcard__menu-item is-accent",onClick:()=>ne("start",async()=>(await Jt("stop"),Jt("start")),o("dsh.restarted","已重启 dsh")),children:o("dsh.restart","重启 dsh")}),s.jsx("button",{type:"button","data-id":"DshCard-stop",className:"bcard__menu-item is-danger",onClick:()=>ne("stop",()=>Jt("stop"),o("dsh.stopped","已停止 dsh")),children:o("dsh.stop","停止 dsh")}),s.jsx("button",{type:"button","data-id":"DshCard-reload",className:"bcard__menu-item",onClick:ae=>{var E,G,U;ae.stopPropagation(),x(!1),(U=(G=(E=window.cicy)==null?void 0:E.tabs)==null?void 0:G.reloadIfOpen)==null||U.call(G,`http://127.0.0.1:${lc}`,"DeepSeek Harness")},children:o("docker.reloadWindow","刷新窗口")}),s.jsx("div",{className:"bcard__menu-sep",role:"separator","aria-hidden":!0}),s.jsx("button",{type:"button","data-id":"DshCard-auto",className:"bcard__menu-item",onClick:Se,children:_?o("dsh.autoOn","✓ 开机自动启动"):o("dsh.autoOff","开机自动启动:关")}),s.jsx("button",{type:"button","data-id":"DshCard-reinstall",className:"bcard__menu-item",title:o("dsh.reinstallHint","重新 npm 安装锁定版本 {{v}} 并重启",{v:Go}),onClick:()=>{x(!1),ke({reinstall:!0})},children:o("dsh.reinstall","重新安装")})]}),document.body)]})]}),s.jsxs("div",{className:"bcard__body",children:[s.jsx("div",{style:{height:28,display:"flex",alignItems:"center",gap:8},children:s.jsx("h3",{className:"bcard__name",title:"DeepSeek Harness",style:{margin:0,flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:"DeepSeek Harness"})}),s.jsxs("div",{className:"bcard__meta",children:[s.jsx("span",{className:"bcard__chip",children:"dsh"}),(c==null?void 0:c.version)&&s.jsxs("span",{className:"bcard__ver","data-id":"DshCard-ver",style:{marginLeft:8,fontSize:11,opacity:.6},children:["v",c.version]})]}),Ae&&s.jsx("div",{"data-id":"DshCard-state",title:Ae,style:{marginTop:6,fontSize:12,color:P?"#8b949e":"#9aa4b2",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:Ae})]}),s.jsxs("button",{type:"button",className:"bcard__cta","data-id":"DshCard-cta",disabled:le||!c,onClick:De,style:P?void 0:{background:nm,color:"white"},children:[le?s.jsx(wt,{}):s.jsx(Hl,{}),s.jsx("span",{children:Ce})]})]})}const lm="#d70a53",Mo="debian.auto",Ag={qemu:"install-docker",extract:"install-docker",image:"image",verify:"image",disk:"image"},Og={qemu:"下载 QEMU 便携版(约 47MB)…",extract:"解压 QEMU…",image:"下载 Debian 13 云镜像(约 343MB)…",verify:"校验镜像 SHA512…",disk:"创建虚拟磁盘(40G,按需增长)…"},zg={qemu_download:"QEMU 下载失败(网络)",qemu_checksum:"QEMU 包校验失败",qemu_extract:"QEMU 解压失败",image_download:"Debian 镜像下载失败(网络)",image_checksum:"Debian 镜像校验失败",disk_create:"创建虚拟磁盘失败",port_in_use:"端口被占用",not_installed:"还没安装",qemu_not_started:"QEMU 没能启动",spawn_failed:"后台进程起不来"},Ai=c=>[zg[c==null?void 0:c.error]||(c==null?void 0:c.error)||"failed",c==null?void 0:c.detail].filter(Boolean).join(":"),im=c=>new Promise(f=>setTimeout(f,c));let sm=!1;async function wa(c,f={}){var b;const m=await $n(f);if(!m.node)return{ok:!1,error:"no_node",detail:m.error||""};const d=`${m.home}\\cicy-ai\\db\\debian-ctl.js`;if(!sm){const O=Bi(await((b=window.electronRPC)==null?void 0:b.call(window,"file_write",{path:d,content:Vy})));if(!O.ok)return{ok:!1,error:"ctl_write_failed",detail:O.stderr||O.stdout};sm=!0}const S=await Ri(`"${m.node}" "${d}" ${c}`),x=String(S.stdout||"").trim().match(/\{[\s\S]*\}$/);if(x)try{return JSON.parse(x[0])}catch{}return{ok:!1,error:"ctl_no_output",detail:(S.stderr||S.stdout||"").trim().slice(-400)}}function Mg(){return s.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:s.jsx("path",{d:"M14.5 19.5c-4.4 0-8-3.4-8-7.6 0-4 3.2-7.4 7.3-7.4 3.6 0 6.2 2.6 6.2 5.8 0 2.7-2 4.7-4.5 4.7-2 0-3.5-1.4-3.5-3.2 0-1.5 1.1-2.6 2.5-2.6"})})}function Rg(){const[c,f]=y.useState(null),[m,d]=y.useState(""),[S,x]=y.useState(!1),[b,O]=y.useState({top:0,left:0}),[_,h]=y.useState(()=>{try{return localStorage.getItem(Mo)!=="off"}catch{return!0}}),D=y.useRef(null),j=y.useRef(null),X=y.useRef(!1),M=y.useRef("");y.useEffect(()=>{M.current=m},[m]);const K=196,R=y.useCallback(async()=>{try{const p=await wa("status");return f(p),p}catch(p){return console.warn("[DebianCard] status",p),null}},[]),Z=!!(c!=null&&c.running&&!(c!=null&&c.ready));y.useEffect(()=>{if(!Hi())return;R();const p=setInterval(()=>{M.current||R()},Z?5e3:2e4);return()=>clearInterval(p)},[R,Z]);const W=async p=>{let v="";for(let C=0;C<180;C++){const L=await wa("status");if(f(L),L.ready)return L;if(!L.running)return{...L,error:"vm_exited"};p&&L.boot&&L.boot!==v&&(v=L.boot,p("container",L.boot)),await im(5e3)}return{error:"boot_timeout"}},ke=async()=>{var v,C,L;const p=await wa("open");return p.ok?(await((L=(C=(v=window.cicy)==null?void 0:v.tabs)==null?void 0:C.open)==null?void 0:L.call(C,p.url,"Debian","",!0)),!0):(xe.show({id:"deb-open",status:"error",ttl:6e3,message:o("debian.notReady","Debian 还没启动好")}),!1)},oe=y.useCallback(async()=>{if(M.current)return;d("install"),_e.open({kind:"debian",title:o("debian.setupTitle","安装 Debian 13"),sub:o("debian.setupSub","QEMU 虚拟机 · 不需要 WSL"),onRetry:()=>oe()});const p=(v,C,L)=>_e.push({phase:v,message:C,status:L||"running"});try{p("install-docker",o("debian.checkNode","检查 Node.js…"));let v=await $n();if(!v.node&&(p("install-docker",o("dsh.installingNode","这台机器没有 Node.js,下载便携版 {{v}}(约 37MB,免管理员)…",{v:rc})),v=await $n({installNode:!0}),!v.node)){_e.finish({ok:!1,message:o("dsh.nodeFailed","Node.js 便携版安装失败:{{why}}",{why:v.error||"download"})});return}let C=await wa("status");if(!C.ok){_e.finish({ok:!1,message:o("dsh.ctlFailed","控制脚本无法运行:{{why}}",{why:Ai(C)})});return}if(!C.installed){const ye=await wa("install");if(!ye.ok){_e.finish({ok:!1,message:Ai(ye)});return}let de="";for(;await im(2e3),C=await wa("status"),!(C.installed&&!C.installing);){if(!C.installing){_e.finish({ok:!1,message:o("debian.installFailed","安装失败:{{why}}",{why:C.installError||"stopped"})});return}const Qe=Ag[C.phase]||"install-docker";C.phase!==de&&(de=C.phase,p(Qe,o(`debian.phase.${C.phase}`,Og[C.phase]||C.phase))),(C.phase==="qemu"||C.phase==="image")&&C.total&&_e.push({phase:Qe,status:"running",progress:Math.min(99,Math.round(C.bytes*100/C.total)),received:C.bytes,total:C.total,url:C.src,label:C.phase==="qemu"?"QEMU":"Debian 13"})}p("image",o("debian.installed","QEMU + Debian 13 就绪"),"done")}p("container",C.whpxFeature?o("debian.startingWhpx","启动虚拟机(尝试 WHPX 硬件加速)…"):o("debian.startingTcg","启动虚拟机(软件模拟,首次开机要几分钟)…"));const L=await wa("start");if(!L.ok){_e.finish({ok:!1,message:o("debian.startFailed","启动失败:{{why}}",{why:Ai(L)+(L.tail?" · "+String(L.tail).trim().split(/\r?\n/).slice(-2).join(" · "):"")})});return}const J=await W(p);if(!J.ready){_e.finish({ok:!1,message:J.error==="boot_timeout"?o("debian.bootTimeout","15 分钟内终端没起来,看 ~/cicy-ai/logs/debian-console.log"):o("debian.vmExited","虚拟机退出了,看 ~/cicy-ai/logs/debian-qemu.log")});return}p("container",J.accel==="whpx"?o("debian.accelWhpx","硬件加速:WHPX"):o("debian.accelTcg","软件模拟(较慢)—— 菜单里可「开启硬件加速」"),"done"),_e.finish({ok:!0,message:o("debian.ready","Debian 已就绪,正在打开终端")}),await ke()}catch(v){_e.finish({ok:!1,message:v.message})}finally{d(""),R()}},[R]),ne=async(p,v,C)=>{if(!M.current){x(!1),d(p);try{const L=await v();L&&L.ok===!1?xe.show({id:"deb-op",status:"error",ttl:6e3,message:Ai(L)}):C&&xe.show({id:"deb-op",status:"ok",ttl:3e3,message:C})}catch(L){xe.show({id:"deb-op",status:"error",ttl:6e3,message:L.message})}finally{d(""),R()}}},re=()=>ne("start",()=>wa("start")),Se=()=>ne("open",async()=>{await ke()}),F=async()=>{var v,C,L;let p=null;try{p=await((L=(C=(v=window.cicy)==null?void 0:v.docker)==null?void 0:C.appStatus)==null?void 0:L.call(C))}catch{}return p&&p.running&&Number(p.port)===8009?window.confirm(o("debian.vmDownConfirm","Docker 版 cicy-code(:8009)也跑在这台 Debian 虚拟机里,关机/重启会让它一起停(重启后自动恢复)。继续?")):!0},P=()=>{window.confirm(o("debian.accelConfirm","开启「Windows 虚拟机监控程序平台」(WHPX)需要管理员权限,开启后要重启电脑才生效。继续?"))&&ne("accel",async()=>{const p=await wa("accel");return p.ok&&xe.show({id:"deb-op",status:"ok",ttl:1e4,message:o("debian.accelDone","已开启,重启电脑后 Debian 自动用硬件加速")}),p.ok?null:p})};y.useEffect(()=>{X.current||!c||(X.current=!0,_&&c.ok&&c.installed&&!c.running&&!c.installing&&re())},[c,_]);const $=()=>{const p=!_;h(p),x(!1);try{p?localStorage.removeItem(Mo):localStorage.setItem(Mo,"off")}catch{}},le=p=>{if(p.stopPropagation(),!S&&D.current){const v=D.current.getBoundingClientRect(),C=Math.max(8,Math.min(v.right-K,window.innerWidth-K-8));O({top:Math.round(v.bottom+4),left:Math.round(C)})}x(v=>!v)};if(y.useEffect(()=>{if(!S)return;const p=C=>{var L,J;(L=D.current)!=null&&L.contains(C.target)||(J=j.current)!=null&&J.contains(C.target)||x(!1)},v=C=>{C.key==="Escape"&&x(!1)};return document.addEventListener("mousedown",p),document.addEventListener("keydown",v),()=>{document.removeEventListener("mousedown",p),document.removeEventListener("keydown",v)}},[S]),typeof window<"u"&&!window.electronRPC||!Hi())return null;const Ne=!!(c!=null&&c.running),Ce=!!(c!=null&&c.ready),De=!!(c!=null&&c.installed),Ae=!!m,ae=Ce?"ok":De||c!=null&&c.installing?"warn":"off",E=c!=null&&c.installing&&(c!=null&&c.total)?Math.min(99,Math.round(c.bytes*100/c.total)):null,G=m==="open"?o("docker.opening","打开中…"):m==="install"||c!=null&&c.installing?o("dsh.installingShort","安装中…"):m==="start"||Z?o("dsh.startingShort","启动中…"):Ae?o("docker.working","处理中…"):c?Ce?o("debian.openTerm","打开终端"):De?o("docker.start","启动"):o("dsh.install","安装"):o("docker.probing","检测中…"),U=()=>{if(!(Ae||!c||Z))return Ce?Se():oe()},se=(c==null?void 0:c.accel)==="whpx"?o("debian.accelWhpxShort","硬件加速"):(c==null?void 0:c.accel)==="tcg"?o("debian.accelTcgShort","软件模拟"):"",ee=c?c.error==="no_node"?o("debian.stateNoNode","未安装 · 约 390MB"):c.error?o("dsh.stateNoNode","未就绪:{{why}}",{why:Ai(c)}):c.installing?o("debian.stateInstalling","安装中 {{p}}",{p:E!=null?E+"%":"…"}):Ce?o("debian.stateReady","运行中 · {{a}} · {{m}}G 内存",{a:se,m:Math.round(c.mem/1024)}):Ne?c.boot||o("debian.stateBooting","开机中…"):c.installError&&!De?o("debian.stateFailed","上次安装失败:{{why}}",{why:c.installError}):De?o("dsh.stateStopped","已安装,未运行"):o("debian.stateMissing","未安装 · 约 390MB"):"";return s.jsxs("div",{"data-id":"DebianCard",className:`bcard bcard--debian${Ce?" bcard--online":""}`,children:[s.jsx("div",{className:"bcard__accent"}),s.jsxs("div",{className:"bcard__top",children:[s.jsxs("div",{className:"bcard__pill",style:{color:lm},children:[s.jsx("span",{className:"bcard__dot","data-tone":ae}),s.jsx(Mg,{})]}),De&&s.jsxs("div",{className:"bcard__menuwrap",onClick:p=>p.stopPropagation(),children:[s.jsx("button",{type:"button",ref:D,"data-id":"DebianCard-menu-btn",className:"bcard__kebab",title:o("debian.manage","管理 Debian"),disabled:Ae,onClick:le,children:Ae?s.jsx(wt,{}):s.jsx(uc,{})}),S&&Wt.createPortal(s.jsxs("div",{className:"bcard__menu bcard__menu--portal","data-id":"DebianCard-menu",role:"menu",ref:j,style:{position:"fixed",top:b.top,left:b.left,width:K},onClick:p=>p.stopPropagation(),children:[Ne&&s.jsx("button",{type:"button","data-id":"DebianCard-restart",className:"bcard__menu-item is-accent",onClick:async()=>{await F()&&ne("start",async()=>(await wa("stop"),wa("start")),o("debian.restarted","已重启,稍等终端起来"))},children:o("debian.restart","重启虚拟机")}),Ne&&s.jsx("button",{type:"button","data-id":"DebianCard-stop",className:"bcard__menu-item is-danger",onClick:async()=>{await F()&&ne("stop",()=>wa("stop"),o("debian.stopped","已关机"))},children:o("debian.stop","关机")}),((c==null?void 0:c.accel)==="tcg"||!(c!=null&&c.whpxFeature))&&s.jsx("button",{type:"button","data-id":"DebianCard-accel",className:"bcard__menu-item",title:o("debian.accelHint","开启 Windows 虚拟机监控程序平台(要管理员 + 重启)"),onClick:P,children:o("debian.accel","开启硬件加速")}),s.jsx("div",{className:"bcard__menu-sep",role:"separator","aria-hidden":!0}),s.jsx("button",{type:"button","data-id":"DebianCard-auto",className:"bcard__menu-item",onClick:$,children:_?o("dsh.autoOn","✓ 开机自动启动"):o("dsh.autoOff","开机自动启动:关")})]}),document.body)]})]}),s.jsxs("div",{className:"bcard__body",children:[s.jsx("div",{style:{height:28,display:"flex",alignItems:"center",gap:8},children:s.jsx("h3",{className:"bcard__name",title:"Debian 13",style:{margin:0,flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:"Debian 13"})}),s.jsxs("div",{className:"bcard__meta",children:[s.jsx("span",{className:"bcard__chip",children:"Linux"}),s.jsx("span",{className:"bcard__ver",style:{marginLeft:8,fontSize:11,opacity:.6},children:"QEMU"})]}),ee&&s.jsx("div",{"data-id":"DebianCard-state",title:ee,style:{marginTop:6,fontSize:12,color:"#9aa4b2",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:ee})]}),s.jsxs("button",{type:"button",className:"bcard__cta","data-id":"DebianCard-cta",disabled:Ae||!c||Z||!!(c!=null&&c.installing),onClick:U,style:Ce?void 0:{background:lm,color:"white"},children:[Ae||Z?s.jsx(wt,{}):s.jsx(Hl,{}),s.jsx("span",{children:G})]})]})}function Hg({dockerTeam:c,cloudTitle:f,cloudCode:m,onOpen:d,onRename:S,onRefresh:x}){var gt;const[b,O]=y.useState(null),[_,h]=y.useState(""),[D,j]=y.useState(!1),[X,M]=y.useState(!1),[K,R]=y.useState(!1),[Z,W]=y.useState(!1),[ke,oe]=y.useState([]),[ne,re]=y.useState(!1),[Se,F]=y.useState(""),[P,$]=y.useState(!1),[le,Ne]=y.useState(""),Ce=f||"Docker 团队",De=V=>{var ce;(ce=V==null?void 0:V.stopPropagation)==null||ce.call(V),Ne(Ce),$(!0)},Ae=async()=>{$(!1);const V=String(le||"").trim();if(!(!V||V===Ce||!S))try{await S(V),x==null||x()}catch{}},[ae,E]=y.useState({top:0,left:0}),G=y.useRef(null),U=y.useRef(null),se=184,ee="#2496ed",p=y.useCallback(async()=>{var V,ce,me;try{const ue=await((me=(ce=(V=window.cicy)==null?void 0:V.docker)==null?void 0:ce.appStatus)==null?void 0:me.call(ce));ue&&Number(ue.port)&&(Ol=Number(ue.port)),O(ue);const ze=Date.now()-((Ve==null?void 0:Ve.lastAt)||0)>3e4;ue!=null&&ue.running&&Ve&&Ve.status==="running"&&(Ve.kind||"install")==="install"&&ze&&_e.finish({ok:!0,message:"Docker cicy-code 已就绪"})}catch(ue){console.warn("[DockerCard]",ue)}},[]);y.useEffect(()=>{p();const V=setInterval(()=>{_||p()},12e3);return()=>clearInterval(V)},[p,_]);const v=y.useCallback(async()=>{var V,ce,me;j(!1),F("");try{const ue=await((me=(ce=(V=window.cicy)==null?void 0:V.docker)==null?void 0:ce.getPorts)==null?void 0:me.call(ce));oe(((ue==null?void 0:ue.ports)||[]).map(String))}catch{oe([])}W(!0)},[]),C=y.useCallback(async()=>{var ue,ze,Xe,Ge,T,I,ge,fe,he;const V=new Set,ce=[];for(const je of ke){const Ue=String(je).trim();if(!Ue)continue;const bt=Number(Ue);if(!Number.isInteger(bt)||bt<1||bt>65535||bt===8008||bt===Ol||V.has(bt)){F(o("docker.ports.invalid","有端口无效(1-65535,不能是 {{p}},不能重复)",{p:Ol}));return}V.add(bt),ce.push(bt)}F(""),re(!0),W(!1),h("recreate"),_e.open({onRetry:C});const me=(Xe=(ze=(ue=window.cicy)==null?void 0:ue.docker)==null?void 0:ze.onAppProgress)==null?void 0:Xe.call(ze,je=>_e.push(je));try{const je=await((I=(T=(Ge=window.cicy)==null?void 0:Ge.docker)==null?void 0:T.setPorts)==null?void 0:I.call(T,ce));if(_e.finish({ok:!!(je!=null&&je.ok),message:je!=null&&je.ok?o("docker.ports.save","保存并重建")+" ✅":(je==null?void 0:je.error)||o("docker.opFailed","操作失败")}),je!=null&&je.ok)try{const Ue=await((he=(fe=(ge=window.cicy)==null?void 0:ge.docker)==null?void 0:fe.appRedetect)==null?void 0:he.call(fe));Ue&&O(Ue)}catch{}}catch(je){_e.finish({ok:!1,message:je.message})}finally{try{me&&me()}catch{}re(!1),h(""),p()}},[ke,p]);y.useEffect(()=>{if(!D)return;const V=me=>{var ue,ze;(ue=G.current)!=null&&ue.contains(me.target)||(ze=U.current)!=null&&ze.contains(me.target)||j(!1)},ce=me=>{me.key==="Escape"&&j(!1)};return document.addEventListener("mousedown",V),document.addEventListener("keydown",ce),()=>{document.removeEventListener("mousedown",V),document.removeEventListener("keydown",ce)}},[D]);const L=()=>{if(!D&&G.current){const V=G.current.getBoundingClientRect(),ce=Math.max(8,Math.min(V.right-se,window.innerWidth-se-8));E({top:Math.round(V.bottom+4),left:Math.round(ce)})}j(V=>!V)},J=y.useCallback(async()=>{var ce,me,ue,ze,Xe,Ge;h("bootstrap"),_e.open({onRetry:J});const V=(ue=(me=(ce=window.cicy)==null?void 0:ce.docker)==null?void 0:me.onAppProgress)==null?void 0:ue.call(me,T=>_e.push(T));try{const T=await((Ge=(Xe=(ze=window.cicy)==null?void 0:ze.docker)==null?void 0:Xe.appBootstrap)==null?void 0:Ge.call(Xe));(T==null?void 0:T.reason)==="installer_launched"?_e.finish({status:"reboot",message:o("docker.installerLaunched","已打开 Docker 安装程序——请完成安装(会装 WSL2、可能需重启),装好后点「重试」")}):(T==null?void 0:T.reason)==="wsl_reboot_required"?_e.finish({status:"reboot",message:o("docker.rebootNeeded","WSL2 已安装,请【重启 Windows】后回来点「重试」继续")}):_e.finish({ok:!!(T!=null&&T.ok),message:T!=null&&T.ok?o("docker.ready","Docker cicy-code 已就绪"):(T==null?void 0:T.error)||o("docker.failed","安装失败")}),T!=null&&T.ok&&(x==null||x())}catch(T){_e.finish({ok:!1,message:T.message})}finally{try{V&&V()}catch{}h(""),p()}},[p,x]),ye=y.useCallback(async()=>{var ce,me,ue,ze,Xe,Ge;h("repair"),_e.open({onRetry:ye});const V=(ue=(me=(ce=window.cicy)==null?void 0:ce.docker)==null?void 0:me.onAppProgress)==null?void 0:ue.call(me,T=>_e.push(T));try{const T=await((Ge=(Xe=(ze=window.cicy)==null?void 0:ze.docker)==null?void 0:Xe.appRepairWsl)==null?void 0:Ge.call(Xe));T!=null&&T.needsReboot?_e.finish({status:"reboot",message:o("docker.wslNeedReboot","WSL 服务卡死,请【重启 Windows】;重启后打开 CiCy 会自动修复(旧数据已改名备份,不删)。")}):T!=null&&T.ok?(_e.finish({ok:!0,message:o("docker.wslRepaired","WSL 已修复 ✅")}),x==null||x()):_e.finish({ok:!1,message:(T==null?void 0:T.error)||o("docker.repairFailed","修复失败")})}catch(T){_e.finish({ok:!1,message:T.message})}finally{try{V&&V()}catch{}h(""),p()}},[p,x]),de=y.useCallback(async()=>{var ce,me,ue,ze,Xe,Ge;j(!1),h("upgrade"),_e.open({onRetry:de});const V=(ue=(me=(ce=window.cicy)==null?void 0:ce.docker)==null?void 0:me.onAppProgress)==null?void 0:ue.call(me,T=>_e.push(T));try{const T=await((Ge=(Xe=(ze=window.cicy)==null?void 0:ze.docker)==null?void 0:Xe.appUpgrade)==null?void 0:Ge.call(Xe));(T==null?void 0:T.reason)==="wsl_reboot_required"?_e.finish({status:"reboot",message:o("docker.rebootNeeded","WSL2 已安装,请【重启 Windows】后回来点「重试」继续")}):_e.finish({ok:!!(T!=null&&T.ok),message:T!=null&&T.ok?o("docker.upgraded","已升级到最新"):(T==null?void 0:T.error)||o("docker.upgradeFailed","升级失败")}),T!=null&&T.ok&&(x==null||x())}catch(T){_e.finish({ok:!1,message:T.message})}finally{try{V&&V()}catch{}h(""),p()}},[p,x]),Qe=y.useCallback(async()=>{var ce,me,ue,ze,Xe,Ge,T,I,ge,fe,he,je;j(!1),h("update"),_e.open({onRetry:Qe});const V=(ue=(me=(ce=window.cicy)==null?void 0:ce.docker)==null?void 0:me.onAppProgress)==null?void 0:ue.call(me,Ue=>_e.push(Ue));try{const Ue=await((Ge=(Xe=(ze=window.cicy)==null?void 0:ze.docker)==null?void 0:Xe.appUpdate)==null?void 0:Ge.call(Xe));if(_e.finish({ok:!!(Ue!=null&&Ue.ok),message:Ue!=null&&Ue.ok?o("docker.updated","cicy-code 已更新到最新"):(Ue==null?void 0:Ue.error)||o("docker.updateFailed","更新失败")}),Ue!=null&&Ue.ok){x==null||x();try{(ge=(I=(T=window.cicy)==null?void 0:T.tabs)==null?void 0:I.reloadIfOpen)==null||ge.call(I,Ro(),o("docker.teamTab","Docker 团队"))}catch{}try{const bt=await((je=(he=(fe=window.cicy)==null?void 0:fe.docker)==null?void 0:he.appRedetect)==null?void 0:je.call(he));bt&&O(bt)}catch{}}}catch(Ue){_e.finish({ok:!1,message:Ue.message})}finally{try{V&&V()}catch{}h(""),p()}},[p,x]),Be=y.useCallback(async(V,ce,me)=>{j(!1),h(V),xe.show({id:"docker-op",message:o(`docker.${V}ing`,V==="restart"?"重启中…":V==="reload"?"刷新中…":"停止中…"),status:"running"});try{const ue=await ce();ue!=null&&ue.ok?xe.show({id:"docker-op",message:me,status:"done",ttl:2500}):xe.show({id:"docker-op",message:(ue==null?void 0:ue.error)||o("docker.opFailed","操作失败"),status:"error",ttl:6e3})}catch(ue){xe.show({id:"docker-op",message:ue.message,status:"error",ttl:6e3})}finally{h(""),p()}},[p]),Gt=y.useCallback(async()=>{j(!1),h("authssh"),xe.show({id:"docker-op",message:o("docker.authorizingHost","授权容器访问 Mac(配置 SSH)…"),status:"running"});try{const V=await window.cicy.docker.appAuthorizeHostSsh();V!=null&&V.ok?xe.show({id:"docker-op",message:V.verified?o("docker.authorizedHostOk","已授权:容器内 `ssh mac` 可访问 Mac ✅"):o("docker.authorizedHostPartial","公钥已写入 Mac(未验证成功,可在容器内手动 `ssh mac` 试)"),status:V.verified?"done":"error",ttl:5e3}):xe.show({id:"docker-op",message:(V==null?void 0:V.error)||o("docker.opFailed","操作失败"),status:"error",ttl:6e3})}catch(V){xe.show({id:"docker-op",message:V.message,status:"error",ttl:6e3})}finally{h(""),p()}},[p]),rt=((gt=window.cicy)==null?void 0:gt.platform)||(b==null?void 0:b.platform);if(rt!=="win32")return null;const Mt=b?!!b.running:(c==null?void 0:c.status)==="running",ia=!!(b!=null&&b.dockerRunning),xt=!!(b!=null&&b.installed),Yt=!!(b!=null&&b.unknown)&&!Mt&&!ia&&!xt,_t=!!(b!=null&&b.wslUnmanaged),sa=!!(b!=null&&b.wslWedged),ca=Mt&&!_t,Et=ca?"ok":sa||_t||ia||xt||Yt?"warn":"off",Rt=!!_;sa?o("docker.wslWedged","WSL 卡死 · 点「修复 WSL」"):_t?o("docker.wslBrokenRepair","WSL 管理异常 · 点「修复 WSL」重装"):Mt?o("docker.running","运行中"):ia?o("docker.notRunning","未启动 · 点「启动」"):xt?o("docker.engineDown","Docker 未运行 · 点启动"):Yt?o("docker.wslUnresponsive","WSL 未响应 · 点「重试检测」"):o("docker.notInstalled","Docker Desktop 未安装");const ja=_==="open"?o("docker.opening","打开中…"):_==="probe"?o("docker.probing","检测中…"):Rt?o("docker.working","处理中…"):ca?o("localTeams.open","打开"):sa||_t?o("docker.repairWsl","修复 WSL"):ia?o("docker.start","启动"):xt?o("docker.startDocker","启动 Docker"):Yt?o("docker.retryProbe","重试检测"):o("docker.install","下载安装"),Dt=async()=>{var V,ce,me,ue,ze,Xe,Ge,T,I,ge,fe,he;if(!Rt){if(sa){ye();return}if(_t){J();return}if(ca){try{const Ue=await((me=(ce=(V=window.cicy)==null?void 0:V.tabs)==null?void 0:ce.activateIfOpen)==null?void 0:me.call(ce,Ro()));if(Ue!=null&&Ue.active)return}catch{}h("open");let je=null;try{je=await((Xe=(ze=(ue=window.cicy)==null?void 0:ue.docker)==null?void 0:ze.appOpen)==null?void 0:Xe.call(ze))}catch(Ue){je={ok:!1,hint:(Ue==null?void 0:Ue.message)||o("docker.openFailed","打开失败"),log:[]}}h(""),je&&je.ok===!1&&(_e.open({onRetry:Dt,kind:"open"}),(je.log||[]).forEach(Ue=>_e.push(Ue)),_e.finish({ok:!1,message:je.hint||je.error||o("docker.openFailed","打开失败")}));return}if(Yt){h("probe");try{const je=await(((I=(T=(Ge=window.cicy)==null?void 0:Ge.docker)==null?void 0:T.appRedetect)==null?void 0:I.call(T))??((he=(fe=(ge=window.cicy)==null?void 0:ge.docker)==null?void 0:fe.appStatus)==null?void 0:he.call(fe)));je&&O(je),je!=null&&je.unknown&&xe.show({id:"docker-probe",status:"error",message:o("docker.wslStillStuck","WSL 仍无响应 —— 多半要重启 Windows 后再试"),ttl:6e3})}catch{xe.show({id:"docker-probe",status:"error",message:o("docker.probeFailed","检测失败,请重试"),ttl:5e3})}finally{h("")}return}J()}},mt=Mt;return s.jsxs("div",{"data-id":"DockerCard",className:`bcard bcard--docker${Mt?" bcard--online":""}`,children:[s.jsx("div",{className:"bcard__accent",style:{background:ee}}),s.jsxs("div",{className:"bcard__top",children:[s.jsxs("div",{className:"bcard__pill",style:{color:ee},children:[s.jsx("span",{className:"bcard__dot","data-tone":Et}),s.jsx("svg",{style:{width:18,height:18},viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":!0,children:s.jsx("path",{d:"M21.81 10.25c-.06-.05-.67-.51-1.95-.51-.34 0-.68.03-1.01.09-.25-1.69-1.64-2.51-1.7-2.55l-.34-.2-.22.32a4.5 4.5 0 0 0-.59 1.4c-.23.94-.09 1.83.39 2.59-.58.32-1.51.4-1.7.41H2.62a.61.61 0 0 0-.61.61 9.32 9.32 0 0 0 .57 3.35 4.9 4.9 0 0 0 1.95 2.53c.92.52 2.42.82 4.12.82.77 0 1.54-.07 2.3-.21a9.6 9.6 0 0 0 3-1.09 8.3 8.3 0 0 0 2.05-1.68c.98-1.11 1.56-2.35 1.99-3.45h.17c1.36 0 2.2-.55 2.66-1l.13-.16zM4.7 11.33h1.78a.16.16 0 0 0 .16-.16V9.58a.16.16 0 0 0-.16-.16H4.7a.16.16 0 0 0-.16.16v1.59c0 .09.07.16.16.16m2.46 0h1.78a.16.16 0 0 0 .16-.16V9.58a.16.16 0 0 0-.16-.16H7.16a.16.16 0 0 0-.16.16v1.59c0 .09.07.16.16.16m2.5 0h1.78a.16.16 0 0 0 .16-.16V9.58a.16.16 0 0 0-.16-.16H9.66a.16.16 0 0 0-.16.16v1.59c0 .09.07.16.16.16m2.47 0h1.78a.16.16 0 0 0 .16-.16V9.58a.16.16 0 0 0-.16-.16h-1.78a.16.16 0 0 0-.16.16v1.59c0 .09.07.16.16.16M7.16 9.06h1.78a.16.16 0 0 0 .16-.16V7.31a.16.16 0 0 0-.16-.16H7.16a.16.16 0 0 0-.16.16v1.59c0 .09.07.16.16.16m2.5 0h1.78a.16.16 0 0 0 .16-.16V7.31a.16.16 0 0 0-.16-.16H9.66a.16.16 0 0 0-.16.16v1.59c0 .09.07.16.16.16m2.47 0h1.78a.16.16 0 0 0 .16-.16V7.31a.16.16 0 0 0-.16-.16h-1.78a.16.16 0 0 0-.16.16v1.59c0 .09.07.16.16.16"})})]}),mt&&s.jsxs("div",{className:"bcard__menuwrap",onClick:V=>V.stopPropagation(),children:[s.jsx("button",{type:"button",ref:G,"data-id":"DockerCard-menu-btn",className:"bcard__kebab",title:o("docker.manage","管理 Docker cicy-code"),disabled:Rt,onClick:L,children:Rt?s.jsx(wt,{}):s.jsx(uc,{})}),D&&Wt.createPortal(s.jsxs("div",{className:"bcard__menu bcard__menu--portal","data-id":"DockerCard-menu",role:"menu",ref:U,style:{position:"fixed",top:ae.top,left:ae.left,width:se},onClick:V=>V.stopPropagation(),children:[s.jsx("button",{type:"button","data-id":"DockerCard-update",className:"bcard__menu-item is-accent",onClick:Qe,children:o("docker.update","更新 cicy-code")}),s.jsx("button",{type:"button","data-id":"DockerCard-restart",className:"bcard__menu-item",onClick:()=>Be("restart",()=>window.cicy.docker.appRestart(),o("docker.restarted","已重启 cicy-code")),children:o("docker.restart","重启 cicy-code")}),s.jsx("button",{type:"button","data-id":"DockerCard-stop",className:"bcard__menu-item is-danger",onClick:()=>Be("stop",()=>window.cicy.docker.appStop(),o("docker.stopped","已停止 cicy-code")),children:o("docker.stop","停止 cicy-code")}),s.jsx("button",{type:"button","data-id":"DockerCard-reload",className:"bcard__menu-item",onClick:V=>{var ce,me,ue;V.stopPropagation(),j(!1),(ue=(me=(ce=window.cicy)==null?void 0:ce.tabs)==null?void 0:me.reloadIfOpen)==null||ue.call(me,Ro(),"Docker 团队")},children:o("docker.reloadWindow","刷新窗口")}),s.jsx("button",{type:"button","data-id":"DockerCard-open-dir",className:"bcard__menu-item",onClick:V=>{var ce,me,ue;V.stopPropagation(),j(!1),(ue=(me=(ce=window.cicy)==null?void 0:ce.docker)==null?void 0:me.openDir)==null||ue.call(me)},children:o("docker.openWslDir","打开 WSL 目录")}),s.jsx("button",{type:"button","data-id":"DockerCard-open-projects",className:"bcard__menu-item",onClick:V=>{var ce,me,ue;V.stopPropagation(),j(!1),(ue=(me=(ce=window.cicy)==null?void 0:ce.docker)==null?void 0:me.openDir)==null||ue.call(me,"projects")},children:o("docker.openProjectsDir","打开项目目录")}),s.jsx("button",{type:"button","data-id":"DockerCard-dood",className:"bcard__menu-item",title:o("dood.hint","把宿主 Docker + docker 客户端挂进容器,容器内 agent 能直接跑 docker(切换会重建容器,秒生效、无需下载)"),onClick:V=>{V.stopPropagation(),j(!1),M(!0)},children:o("dood.menu","容器内使用 Docker")}),s.jsx("div",{className:"bcard__menu-sep","data-id":"DockerCard-menu-sep",role:"separator","aria-hidden":!0}),rt==="darwin"&&s.jsx("button",{type:"button","data-id":"DockerCard-authorize-host-ssh",className:"bcard__menu-item",title:o("docker.authorizeHostHint","把容器公钥加到 Mac 的 authorized_keys,容器内 `ssh mac` 即可访问本机"),onClick:Gt,children:o("docker.authorizeHost","授权容器访问 Mac")}),s.jsx("button",{type:"button","data-id":"DockerCard-docker-restart",className:"bcard__menu-item",onClick:()=>Be("restart",()=>window.cicy.docker.appDockerRestart(),o("docker.dockerRestarted","已重启 Docker 容器")),children:o("docker.dockerRestart","重启 Docker")}),s.jsx("button",{type:"button","data-id":"DockerCard-ports",className:"bcard__menu-item",onClick:V=>{V.stopPropagation(),v()},children:o("docker.ports.menu","端口设置")}),s.jsx("button",{type:"button","data-id":"DockerCard-recreate",className:"bcard__menu-item is-danger",onClick:V=>{V.stopPropagation(),j(!1),R(!0)},children:o("docker.recreate","重建 Docker")})]}),document.body)]})]}),s.jsxs("div",{className:"bcard__body",children:[s.jsxs("div",{style:{height:28,display:"flex",alignItems:"center",gap:8},children:[s.jsx(oc,{size:24,avatar:c==null?void 0:c.avatar,name:Ce,teamId:c==null?void 0:c.id,onChanged:x}),P?s.jsx("input",{"data-id":"DockerCard-rename-input",autoFocus:!0,value:le,onChange:V=>Ne(V.target.value),onFocus:V=>V.target.select(),onBlur:Ae,onClick:V=>V.stopPropagation(),onKeyDown:V=>{V.nativeEvent.isComposing||V.keyCode===229||(V.key==="Enter"?Ae():V.key==="Escape"&&$(!1))},style:{flex:1,width:"100%",font:"inherit",fontWeight:600,padding:"2px 6px",border:"1px solid #3b82f6",borderRadius:6,background:"#0d1117",color:"#e6edf3",boxSizing:"border-box"}}):s.jsxs("h3",{className:"bcard__name",title:S?o("localTeams.renameHint","点名字或 ✎ 改名"):Ce,style:{display:"flex",alignItems:"center",gap:6,flex:1,minWidth:0,margin:0},onDoubleClick:S?De:void 0,children:[s.jsx("span",{onClick:S?De:void 0,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",cursor:S?"text":"default"},children:Ce}),S&&s.jsx("button",{type:"button","data-id":"DockerCard-rename-btn",title:o("localTeams.rename","重命名"),onClick:De,style:{flex:"none",cursor:"pointer",border:"none",background:"transparent",color:"#8b949e",fontSize:13,padding:0,lineHeight:1},children:"✎"})]})]}),s.jsxs("div",{className:"bcard__meta",children:[s.jsx("span",{className:"bcard__chip",children:"Docker"}),(b==null?void 0:b.version)&&s.jsxs("span",{className:"bcard__ver","data-id":"DockerCard-ver",style:{marginLeft:8,fontSize:11,opacity:.6},children:["v",b.version]})]})]}),s.jsxs("button",{type:"button",className:"bcard__cta","data-id":"DockerCard-cta",disabled:Rt,onClick:Dt,style:Mt?void 0:{background:ee,color:"white"},children:[Rt?s.jsx(wt,{}):s.jsx(Hl,{}),s.jsx("span",{children:ja})]}),s.jsx($g,{open:X,onClose:()=>M(!1),toastId:"docker-op"}),K&&Wt.createPortal(s.jsx("div",{"data-id":"DockerCard-recreate-modal",style:{position:"fixed",inset:0,zIndex:9999,background:"rgba(0,0,0,0.55)",display:"flex",alignItems:"center",justifyContent:"center"},onMouseDown:V=>{V.target===V.currentTarget&&R(!1)},children:s.jsxs("div",{onClick:V=>V.stopPropagation(),style:{width:360,maxWidth:"90vw",background:"#161b22",border:"1px solid #30363d",borderRadius:12,padding:"20px 22px",boxShadow:"0 12px 40px rgba(0,0,0,0.5)"},children:[s.jsx("h3",{style:{margin:"0 0 8px",fontSize:16,color:"#e6edf3"},children:o("docker.recreate","重建 Docker")}),s.jsx("p",{style:{margin:"0 0 18px",fontSize:13,lineHeight:1.6,color:"#9aa4b2"},children:o("docker.recreateConfirm","会删除当前容器并重新创建(volume 数据保留),用于切换为独立 team 的网关 key。确定重建?")}),s.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:10},children:[s.jsx("button",{type:"button","data-id":"DockerCard-recreate-cancel",onClick:()=>R(!1),style:{padding:"7px 16px",borderRadius:8,border:"1px solid #30363d",background:"transparent",color:"#c9d1d9",cursor:"pointer",fontSize:13},children:o("common.cancel","取消")}),s.jsx("button",{type:"button","data-id":"DockerCard-recreate-confirm",onClick:()=>{R(!1),Be("restart",()=>window.cicy.docker.appRecreate(),o("docker.recreated","已重建 Docker 容器"))},style:{padding:"7px 16px",borderRadius:8,border:"none",background:"#da3633",color:"white",cursor:"pointer",fontSize:13,fontWeight:600},children:o("docker.recreateOk","确定重建")})]})]})}),document.body),Z&&Wt.createPortal(s.jsx("div",{"data-id":"DockerCard-ports-modal",style:{position:"fixed",inset:0,zIndex:9999,background:"rgba(0,0,0,0.55)",display:"flex",alignItems:"center",justifyContent:"center"},onMouseDown:V=>{V.target===V.currentTarget&&W(!1)},children:s.jsxs("div",{onClick:V=>V.stopPropagation(),style:{width:420,maxWidth:"92vw",background:"#161b22",border:"1px solid #30363d",borderRadius:12,padding:"20px 22px",boxShadow:"0 12px 40px rgba(0,0,0,0.5)"},children:[s.jsx("h3",{style:{margin:"0 0 6px",fontSize:16,color:"#e6edf3"},children:o("docker.ports.title","端口设置")}),s.jsx("p",{style:{margin:"0 0 14px",fontSize:12.5,lineHeight:1.6,color:"#9aa4b2"},children:o("docker.ports.sub","除 :8008 外,额外发布、可从 Windows 直达容器内服务的端口")}),s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"8px 10px",marginBottom:10,borderRadius:8,background:"#0d1117",border:"1px solid #21262d",color:"#7d8590",fontSize:13},children:["🔒 ",o("docker.ports.mainFixed",":{{p}} · cicy-code(固定)",{p:Ol})]}),s.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:8,maxHeight:220,overflowY:"auto"},children:[ke.length===0&&s.jsx("div",{style:{fontSize:12.5,color:"#6e7681",padding:"4px 2px"},children:o("docker.ports.none","暂无额外端口")}),ke.map((V,ce)=>s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[s.jsx("input",{"data-id":`DockerCard-port-input-${ce}`,type:"text",inputMode:"numeric",value:V,placeholder:o("docker.ports.ph","端口号 1-65535"),onChange:me=>{const ue=me.target.value.replace(/[^0-9]/g,"");oe(ze=>ze.map((Xe,Ge)=>Ge===ce?ue:Xe)),F("")},style:{flex:1,padding:"7px 10px",borderRadius:8,border:"1px solid #30363d",background:"#0d1117",color:"#e6edf3",fontSize:13,fontFamily:"var(--mono)"}}),s.jsx("button",{type:"button","data-id":`DockerCard-port-remove-${ce}`,title:o("docker.ports.remove","移除"),onClick:()=>{oe(me=>me.filter((ue,ze)=>ze!==ce)),F("")},style:{padding:"6px 10px",borderRadius:8,border:"1px solid #30363d",background:"transparent",color:"#da3633",cursor:"pointer",fontSize:14},children:"✕"})]},ce))]}),s.jsx("button",{type:"button","data-id":"DockerCard-port-add",onClick:()=>oe(V=>[...V,""]),style:{marginTop:10,padding:"7px 12px",borderRadius:8,border:"1px dashed #30363d",background:"transparent",color:"#58a6ff",cursor:"pointer",fontSize:13,width:"100%"},children:o("docker.ports.add","+ 添加端口")}),Se&&s.jsx("div",{style:{marginTop:10,fontSize:12.5,color:"#f85149"},children:Se}),s.jsx("p",{style:{margin:"12px 0 16px",fontSize:11.5,lineHeight:1.5,color:"#6e7681"},children:o("docker.ports.hint","保存会重建容器(volume 数据保留),会有短暂中断")}),s.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:10},children:[s.jsx("button",{type:"button","data-id":"DockerCard-ports-cancel",disabled:ne,onClick:()=>W(!1),style:{padding:"7px 16px",borderRadius:8,border:"1px solid #30363d",background:"transparent",color:"#c9d1d9",cursor:"pointer",fontSize:13},children:o("docker.ports.cancel","取消")}),s.jsx("button",{type:"button","data-id":"DockerCard-ports-save",disabled:ne,onClick:C,style:{padding:"7px 16px",borderRadius:8,border:"none",background:"#238636",color:"white",cursor:"pointer",fontSize:13,fontWeight:600},children:ne?o("docker.ports.saving","保存中…"):o("docker.ports.save","保存并重建")})]})]})}),document.body)]})}function cm({team:c,cloudCode:f,onOpen:m,onRename:d,onRefresh:S}){var ue,ze,Xe,Ge;const b=(om[c.status]||om.error).tone,[O,_]=y.useState(!1),[h,D]=y.useState(c.name||""),[j,X]=y.useState(null),[M,K]=y.useState(""),R=j??c.name;y.useEffect(()=>{j!=null&&c.name===j&&X(null)},[c.name,j]);const Z=T=>{var I;(I=T==null?void 0:T.stopPropagation)==null||I.call(T),D(R||""),_(!0)},W=async()=>{_(!1);const T=String(h||"").trim();if(!d||!T||T===R)return;X(T),K("saving");let I;try{I=await d(c.id,T)}catch(ge){I={ok:!1,error:ge==null?void 0:ge.message}}X(null),I&&I.ok?(K("saved"),setTimeout(()=>K(ge=>ge==="saved"?"":ge),1500)):(K(""),xe.show({message:o("localTeams.renameFailed","改名没保存,已恢复"),status:"error",ttl:4e3}))},oe=!!((ze=(ue=window.cicy)==null?void 0:ue.sidecar)!=null&&ze.restart)&&$o(c.base_url),ne=c.status==="running",[re,Se]=y.useState(""),[F,P]=y.useState(!1),[$,le]=y.useState(!1);y.useEffect(()=>{var T,I;!oe||!((I=(T=window.cicy)==null?void 0:T.sidecar)!=null&&I.getPublic)||window.cicy.sidecar.getPublic().then(ge=>le(!!(ge!=null&&ge.public))).catch(()=>{})},[oe]);const[Ne,Ce]=y.useState({running:void 0,latest:null,installed:null}),De=Ne.latest,Ae=Ne.running,[ae,E]=y.useState(!1),G=y.useRef(null),U=y.useRef(null),se=y.useRef(null),[ee,p]=y.useState({top:0,left:0}),v=184,C=()=>{if(!F&&U.current){const T=U.current.getBoundingClientRect(),I=Math.max(8,Math.min(T.right-v,window.innerWidth-v-8));p({top:Math.round(T.bottom+4),left:Math.round(I)})}P(T=>!T)},L=y.useCallback(async(T=!1)=>{var I,ge;if(!(!oe||!((ge=(I=window.cicy)==null?void 0:I.sidecar)!=null&&ge.versions))){T&&E(!0);try{const fe=await window.cicy.sidecar.versions();Ce({running:(fe==null?void 0:fe.running)??null,latest:(fe==null?void 0:fe.latest)??null,installed:(fe==null?void 0:fe.installed)??null}),T&&(fe!=null&&fe.running&&(fe!=null&&fe.latest)&&Yo(fe.latest,fe.running)>0?xe.show({message:`${o("sidecar.found","发现新版本")} v${fe.latest}`,status:"done",ttl:2500}):fe!=null&&fe.running?xe.show({message:`${o("sidecar.upToDate","已是最新")} v${fe.running}`,status:"done",ttl:2500}):xe.show({message:o("sidecar.notRunning","cicy-code 未运行"),status:"error",ttl:4e3}))}catch{T&&xe.show({message:o("sidecar.checkFailed","检查更新失败"),status:"error",ttl:5e3})}finally{T&&E(!1)}}},[oe]);y.useEffect(()=>{L(!1)},[L]),y.useEffect(()=>{ne&&L(!1)},[ne,L]);const J=!!(oe&&De&&Ae&&Yo(De,Ae)>0),ye=!oe&&!!((Ge=(Xe=window.cicy)==null?void 0:Xe.localTeams)!=null&&Ge.remove),de=oe||ye,[Qe,Be]=y.useState(!1),[Gt,rt]=y.useState(!1),[Mt,ia]=y.useState(""),[xt,Yt]=y.useState(""),[_t,sa]=y.useState(!1),[ca,Et]=y.useState("");y.useEffect(()=>{if(!F)return;const T=I=>{var ge,fe;(ge=U.current)!=null&&ge.contains(I.target)||(fe=se.current)!=null&&fe.contains(I.target)||P(!1)};return document.addEventListener("mousedown",T),()=>document.removeEventListener("mousedown",T)},[F]);const Rt=async()=>{var I,ge,fe;if(_t)return;const T=Fy({title:Mt,url:xt});if(!T.ok){Et(o("teams.titleRequired","请输入自定义标题"));return}if(!T.patch.base_url){Et(o("teams.urlRequired","请输入地址 URL"));return}try{new URL(T.patch.base_url)}catch{Et(o("teams.badUrl","URL 无效(需含 http(s)://)"));return}if(T.patch.name===(c.name||"")&&T.patch.base_url===(c.base_url||"")){rt(!1);return}Et(""),sa(!0);try{const he=await((fe=(ge=(I=window.cicy)==null?void 0:I.localTeams)==null?void 0:ge.update)==null?void 0:fe.call(ge,c.id,T.patch));he!=null&&he.ok?(rt(!1),S==null||S()):Et(Mi((he==null?void 0:he.error)||"update failed"))}catch(he){Et(Mi((he==null?void 0:he.message)||String(he)))}sa(!1)},ja=async()=>{var I,ge,fe;if(re)return;Be(!1),Se("remove");const T="op-"+Date.now();xe.show({id:T,message:o("localTeams.removing","删除中…"),status:"running"});try{const he=await((fe=(ge=(I=window.cicy)==null?void 0:I.localTeams)==null?void 0:ge.remove)==null?void 0:fe.call(ge,c.id));he!=null&&he.ok?xe.show({id:T,message:o("localTeams.removed","已删除"),status:"done",ttl:3e3}):xe.show({id:T,message:o("localTeams.removeFailed","删除失败")+(he!=null&&he.error?": "+he.error:""),status:"error",ttl:7e3})}catch(he){xe.show({id:T,message:o("localTeams.removeFailed","删除失败")+": "+((he==null?void 0:he.message)||he),status:"error",ttl:7e3})}Se(""),S==null||S()},Dt=`sidecar-op:${c.id}`,mt=async(T,I,ge)=>{var je,Ue,bt,ra,Ta;if(P(!1),re)return;Se(T);const fe=T==="update";let he=null;fe?(pt.open({teamId:c.id,fromVer:Ae,toVer:De,onRetry:()=>mt("update",I,ge)}),(Ue=(je=window.cicy)==null?void 0:je.sidecar)!=null&&Ue.onOpProgress&&(he=window.cicy.sidecar.onOpProgress(et=>{(et==null?void 0:et.op)==="update"&&pt.push(et)}))):xe.show({id:Dt,message:gt[T]||`${T}…`,status:"running",progress:void 0});try{const et=await I(),At=!!(et!=null&&et.ok),oa=et!=null&&et.warning?`${ge}(${et.warning})`:ge,Ca=o("sidecar.failed","操作失败")+(et!=null&&et.error?`: ${et.error}`:"");if(fe){if(pt.finish({ok:At,message:At?oa:Ca}),At)try{await((Ta=(ra=(bt=window.cicy)==null?void 0:bt.localTeams)==null?void 0:ra.reload)==null?void 0:Ta.call(ra,c.id,{ignoreCache:!0}))}catch{}}else xe.show({id:Dt,message:At?oa:Ca,progress:void 0,status:At?"done":"error",ttl:At?4e3:8e3})}catch(et){const At=o("sidecar.failed","操作失败")+`: ${(et==null?void 0:et.message)||et}`;fe?pt.finish({ok:!1,message:At}):xe.show({id:Dt,message:At,progress:void 0,status:"error",ttl:8e3})}finally{try{he&&he()}catch{}Se(""),S==null||S(),(T==="update"||T==="restart"||T==="start")&&L(!1)}},gt={start:o("busy.start","启动中…"),restart:o("busy.restart","重启中…"),update:o("busy.update","更新中…"),stop:o("busy.stop","停止中…")},V=async()=>{var ge,fe,he;Se("start"),pt.open({teamId:c.id,title:o("sidecar.startTitle","启动 cicy-code"),onRetry:V}),pt.push({phase:"download",status:"running",message:o("sidecar.starting","启动 cicy-code(首次需安装 Node + 依赖,日志见下)…")});const T=(he=(fe=(ge=window.cicy)==null?void 0:ge.sidecar)==null?void 0:fe.onOpProgress)==null?void 0:he.call(fe,je=>pt.push(je));let I;try{I=await window.cicy.sidecar.start()}catch(je){I={ok:!1,error:(je==null?void 0:je.message)||String(je)}}try{T==null||T()}catch{}return Se(""),S==null||S(),!(I!=null&&I.ok)||I!=null&&I.warning?(pt.finish({ok:!1,message:o("sidecar.startFailed","启动失败")+(I!=null&&I.error?`: ${I.error}`:I!=null&&I.warning?`: ${I.warning}`:"")}),!1):(pt.finish({ok:!0,message:o("sidecar.startedOk","cicy-code 已就绪")}),!0)},ce=async()=>{var T,I;re||!ne&&oe&&((I=(T=window.cicy)==null?void 0:T.sidecar)!=null&&I.start)&&!await V()||m()},me=ne?o("localTeams.open","打开"):oe?o("localTeams.startOpen","启动并打开"):o("localTeams.open","打开");return s.jsxs(s.Fragment,{children:[s.jsxs("div",{"data-id":"LocalTeamCard",className:`bcard ${oe?"bcard--local":"bcard--custom"}${b==="ok"?" bcard--online":""}`,children:[s.jsx("div",{className:"bcard__accent"}),s.jsxs("div",{className:"bcard__top",children:[s.jsxs("div",{className:"bcard__pill",children:[s.jsx("span",{className:"bcard__dot","data-tone":b}),s.jsx(Fo,{})]}),de&&s.jsxs("div",{className:"bcard__menuwrap",ref:G,onClick:T=>T.stopPropagation(),children:[s.jsx("button",{type:"button",ref:U,"data-id":"LocalTeamCard-menu-btn",className:`bcard__kebab${J?" has-dot":""}`,title:oe?o("localTeams.manage","管理本地 cicy-code"):o("localTeams.more","更多"),disabled:!!re,onClick:C,children:re?s.jsx(wt,{}):s.jsx(uc,{})}),F&&Wt.createPortal(s.jsxs("div",{className:"bcard__menu bcard__menu--portal","data-id":"LocalTeamCard-menu",role:"menu",ref:se,style:{position:"fixed",top:ee.top,left:ee.left,width:v},onClick:T=>T.stopPropagation(),children:[oe&&s.jsx("button",{type:"button","data-id":"LocalTeamCard-check-update",className:"bcard__menu-item",disabled:ae,onClick:T=>{T.stopPropagation(),L(!0)},children:ae?o("sidecar.checking2","检查中…"):o("sidecar.checkUpdate","检查更新")}),J&&s.jsxs("button",{type:"button","data-id":"LocalTeamCard-update",className:"bcard__menu-item is-accent",onClick:()=>mt("update",()=>window.cicy.sidecar.update(),o("sidecar.updated","已更新到最新")),children:[o("sidecar.updateTo","更新到")," v",De]}),c.base_url&&s.jsx("button",{type:"button","data-id":"LocalTeamCard-reload",className:"bcard__menu-item",onClick:T=>{var I,ge,fe;T.stopPropagation(),P(!1),(fe=(ge=(I=window.cicy)==null?void 0:I.tabs)==null?void 0:ge.reloadIfOpen)==null||fe.call(ge,c.base_url,c.name)},children:o("localTeams.reloadWindow","刷新窗口")}),oe&&!ne&&s.jsx("button",{type:"button","data-id":"LocalTeamCard-start",className:"bcard__menu-item is-accent",onClick:()=>mt("start",()=>window.cicy.sidecar.start(),o("sidecar.started","已启动")),children:o("sidecar.start","启动")}),oe&&ne&&s.jsxs(s.Fragment,{children:[s.jsx("button",{type:"button","data-id":"LocalTeamCard-restart",className:"bcard__menu-item",onClick:()=>mt("restart",()=>window.cicy.sidecar.restart(),o("sidecar.restarted","已重启")),children:o("sidecar.restart","重启")}),s.jsx("button",{type:"button","data-id":"LocalTeamCard-stop",className:"bcard__menu-item is-danger",onClick:()=>mt("stop",()=>window.cicy.sidecar.stop(),o("sidecar.stoppedDone","已停止")),children:o("sidecar.stop","停止")}),s.jsxs("button",{type:"button","data-id":"LocalTeamCard-lan",className:"bcard__menu-item",title:o("sidecar.lanHint","开启后同局域网设备可用本机 IP 访问(api_token 仍校验);切换会自动重启 cicy-code"),disabled:re==="lan",onClick:async()=>{if(re)return;const T=!$;P(!1),Se("lan"),le(T),xe.show({id:Dt,message:T?o("sidecar.lanEnabling","开启局域网访问,重启中…"):o("sidecar.lanDisabling","关闭局域网访问,重启中…"),status:"running",progress:void 0});try{const I=await window.cicy.sidecar.setPublic(T);I!=null&&I.ok?xe.show({id:Dt,message:T?o("sidecar.lanOn","已开启局域网访问"):o("sidecar.lanOff","已关闭局域网访问"),status:"done",ttl:3e3}):xe.show({id:Dt,message:o("sidecar.lanFailed","设置失败")+(I!=null&&I.error?`: ${I.error}`:""),status:"error",ttl:7e3})}catch(I){xe.show({id:Dt,message:o("sidecar.lanFailed","设置失败")+`: ${(I==null?void 0:I.message)||I}`,status:"error",ttl:7e3})}try{const I=await window.cicy.sidecar.getPublic();le(!!(I!=null&&I.public))}catch{}Se(""),S==null||S()},children:[o("sidecar.lanAccess","局域网访问")," · ",$?o("common.on","开"):o("common.off","关")]})]}),ye&&s.jsxs(s.Fragment,{children:[s.jsx("button",{type:"button","data-id":"LocalTeamCard-edit-url",className:"bcard__menu-item",onClick:T=>{T.stopPropagation(),P(!1),rt(!0),ia(c.name||""),Yt(c.base_url||""),Et("")},children:o("teamCard.editUrl","更改访问地址")}),s.jsx("button",{type:"button","data-id":"LocalTeamCard-remove",className:"bcard__menu-item is-danger",onClick:()=>{P(!1),Be(!0)},children:o("localTeams.remove","删除")})]}),(Ae||c.version)&&s.jsxs("div",{"data-id":"LocalTeamCard-version",className:"bcard__menu-item",style:{cursor:"default",color:"#8b949e",fontSize:12},children:[o("localTeams.version","版本")," v",Ae||c.version]})]}),document.body)]})]}),s.jsxs("div",{className:"bcard__body",children:[s.jsxs("div",{style:{height:28,display:"flex",alignItems:"center",gap:8},children:[s.jsx(oc,{size:24,avatar:c==null?void 0:c.avatar,name:c==null?void 0:c.name,teamId:c==null?void 0:c.id,onChanged:S}),O?s.jsx("input",{"data-id":"LocalTeamCard-rename-input",autoFocus:!0,value:h,onChange:T=>D(T.target.value),onFocus:T=>T.target.select(),onBlur:W,onClick:T=>T.stopPropagation(),onKeyDown:T=>{T.nativeEvent.isComposing||T.keyCode===229||(T.key==="Enter"?W():T.key==="Escape"&&_(!1))},style:{flex:1,width:"100%",font:"inherit",fontWeight:600,padding:"2px 6px",border:"1px solid #3b82f6",borderRadius:6,background:"#0d1117",color:"#e6edf3",boxSizing:"border-box"}}):s.jsxs("h3",{className:"bcard__name",title:o("localTeams.renameHint","点名字或 ✎ 改名"),style:{display:"flex",alignItems:"center",gap:6,flex:1,minWidth:0,margin:0},onDoubleClick:Z,children:[s.jsx("span",{"data-id":"LocalTeamCard-name-text",onClick:Z,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",cursor:"text"},children:R}),M==="saving"&&s.jsx("span",{"data-id":"LocalTeamCard-save-state",title:o("localTeams.saving","保存中…"),style:{flex:"none",display:"inline-flex"},children:s.jsx(wt,{})}),M==="saved"&&s.jsx("span",{"data-id":"LocalTeamCard-save-state",title:o("localTeams.saved","已保存"),style:{flex:"none",color:"#3fb950",fontSize:13,lineHeight:1},children:"✓"}),!M&&s.jsx("button",{type:"button","data-id":"LocalTeamCard-rename-btn",title:o("localTeams.rename","重命名"),onClick:Z,style:{flex:"none",cursor:"pointer",border:"none",background:"transparent",color:"#8b949e",fontSize:13,padding:0,lineHeight:1},children:"✎"})]})]}),s.jsx("div",{className:"bcard__meta",children:s.jsx("span",{className:"bcard__chip","data-id":"LocalTeamCard-kind",children:oe?o("localTeams.kindLocal","本地"):o("localTeams.kindCustom","自定义")})})]}),s.jsxs("button",{type:"button",className:"bcard__cta","data-id":"LocalTeamCard-open",disabled:!!re||!c.base_url,onClick:ce,children:[re&&re!=="stop"?s.jsx(wt,{}):s.jsx(Hl,{}),s.jsx("span",{children:re&&gt[re]||me})]})]}),Gt&&Wt.createPortal(s.jsx("div",{"data-id":"LocalTeamCard-url-modal",style:{position:"fixed",inset:0,zIndex:65,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,.5)"},onMouseDown:T=>{!_t&&T.target===T.currentTarget&&rt(!1)},children:s.jsxs("div",{onClick:T=>T.stopPropagation(),style:{width:400,maxWidth:"92vw",background:"var(--card, #1b1d22)",border:"1px solid var(--border, #2c2f36)",borderRadius:14,padding:22,boxShadow:"0 20px 60px rgba(0,0,0,.5)"},children:[s.jsx("div",{style:{fontSize:16,fontWeight:700,marginBottom:16},children:o("teamCard.editCustom","编辑自定义团队")}),s.jsx("label",{style:{display:"block",fontSize:12,opacity:.75,marginBottom:6},children:o("teams.customNameLabel","自定义标题")}),s.jsx("input",{"data-id":"LocalTeamCard-title-input",autoFocus:!0,className:"login-email-input",style:{width:"100%",marginBottom:14},value:Mt,placeholder:o("teams.customNamePlaceholder","我的团队"),spellCheck:!1,disabled:_t,onChange:T=>ia(T.target.value),onKeyDown:T=>{T.nativeEvent.isComposing||T.keyCode===229||(T.key==="Enter"?(T.preventDefault(),Rt()):T.key==="Escape"&&rt(!1))}}),s.jsx("label",{style:{display:"block",fontSize:12,opacity:.75,marginBottom:6},children:o("teams.customUrlLabel","地址 URL")}),s.jsx("textarea",{"data-id":"LocalTeamCard-url-input",rows:3,className:"login-email-input",style:{width:"100%",resize:"vertical",lineHeight:1.5,fontFamily:"var(--mono)"},value:xt,placeholder:"https://example.com:8008",spellCheck:!1,disabled:_t,onChange:T=>Yt(T.target.value.replace(/[\r\n]+/g,"")),onKeyDown:T=>{T.nativeEvent.isComposing||T.keyCode===229||(T.key==="Enter"?(T.preventDefault(),Rt()):T.key==="Escape"&&rt(!1))}}),ca&&s.jsx("div",{className:"error",style:{marginTop:8,fontSize:12},children:ca}),s.jsxs("div",{className:"modal-actions",children:[s.jsx("button",{type:"button",className:"btn-ghost",disabled:_t,onClick:()=>rt(!1),children:o("common.cancel","取消")}),s.jsx("button",{type:"button",className:"btn-primary","data-id":"LocalTeamCard-url-save",disabled:_t,onClick:Rt,children:_t?o("common.saving","保存中…"):o("common.save","保存")})]})]})}),document.body),s.jsx(Ug,{open:Qe,title:o("localTeams.deleteTitle","删除团队"),message:o("localTeams.deleteMsg","确定删除「{{name}}」?此操作不可撤销。",{name:c.name}),confirmLabel:o("common.delete","删除"),danger:!0,onConfirm:ja,onCancel:()=>Be(!1)})]})}function $o(c){var f;try{if(((f=window.cicy)==null?void 0:f.platform)==="win32")return!1;const m=new URL(c);return(m.hostname==="127.0.0.1"||m.hostname==="localhost"||m.hostname==="::1")&&(m.port==="8008"||m.port==="")}catch{return!1}}let Ol=8008;const Ro=()=>`http://127.0.0.1:${Ol}`;function rm(c){var f;try{if(((f=window.cicy)==null?void 0:f.platform)!=="win32")return!1;const m=new URL(c);return(m.hostname==="127.0.0.1"||m.hostname==="localhost"||m.hostname==="::1")&&(m.port==="8008"||m.port==="8009")}catch{return!1}}function Yo(c,f){const m=String(c).split("."),d=String(f).split(".");for(let S=0;S<Math.max(m.length,d.length);S++){const x=(parseInt(m[S],10)||0)-(parseInt(d[S],10)||0);if(x)return x>0?1:-1}return 0}const om={running:{tone:"ok",label:"running",cta:o("localStatus.open","打开")},stopped:{tone:"off",label:"stopped",cta:o("localStatus.notRunning","未运行")},auth_error:{tone:"warn",label:"auth error",cta:o("localStatus.tokenInvalid","Token 失效")},misconfigured:{tone:"err",label:"bad config",cta:o("localStatus.badUrl","URL 错误")},error:{tone:"err",label:"error",cta:o("localStatus.error","异常")}};function Ug({open:c,title:f,message:m,confirmLabel:d,danger:S,onConfirm:x,onCancel:b}){return c?Wt.createPortal(s.jsx("div",{"data-id":"ConfirmModal",style:{position:"fixed",inset:0,zIndex:70,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,.5)"},onMouseDown:O=>{O.target===O.currentTarget&&(b==null||b())},children:s.jsxs("div",{onClick:O=>O.stopPropagation(),style:{width:360,maxWidth:"92vw",background:"var(--card, #1b1d22)",border:"1px solid var(--border, #2c2f36)",borderRadius:14,padding:22,boxShadow:"0 20px 60px rgba(0,0,0,.5)"},children:[s.jsx("div",{style:{fontSize:16,fontWeight:700,marginBottom:6},children:f}),m&&s.jsx("div",{style:{fontSize:13,opacity:.7,marginBottom:16},children:m}),s.jsxs("div",{className:"modal-actions",children:[s.jsx("button",{type:"button",className:"btn-ghost",onClick:b,children:o("common.cancel","取消")}),s.jsx("button",{type:"button",className:"btn-primary","data-id":"ConfirmModal-ok",style:S?{background:"#dc2626",borderColor:"#dc2626"}:{},onClick:x,children:d||o("common.confirm","确认")})]})]})}),document.body):null}function um(){return s.jsxs("div",{className:"brand",children:[s.jsx("div",{className:"brand-mark",children:s.jsx(Yg,{})}),s.jsxs("div",{className:"brand-text",children:[s.jsx("div",{className:"brand-name",children:"CiCy Desktop"}),s.jsx("div",{className:"brand-sub",children:o("app.brandSub","团队 AI 协作工作台")})]})]})}function Bg(){const[c,f]=y.useState(null),[m,d]=y.useState(!1),[S,x]=y.useState(!1),b=y.useRef(!1),O=D=>{var j,X,M;x(D),(M=(X=(j=window.cicy)==null?void 0:j.app)==null?void 0:X.setAutoUpdate)==null||M.call(X,D).catch(()=>{})};y.useEffect(()=>{var X,M,K,R,Z,W,ke,oe,ne;let D=!0;(K=(M=(X=window.cicy)==null?void 0:X.app)==null?void 0:M.updateState)==null||K.call(M).then(re=>{D&&f(re)}).catch(()=>{}),(W=(Z=(R=window.cicy)==null?void 0:R.app)==null?void 0:Z.getAutoUpdate)==null||W.call(Z).then(re=>{D&&x(re===!0)}).catch(()=>{});const j=(ne=(oe=(ke=window.cicy)==null?void 0:ke.app)==null?void 0:oe.onUpdateState)==null?void 0:ne.call(oe,re=>{f(re),typeof(re==null?void 0:re.autoUpdate)=="boolean"&&x(re.autoUpdate),re!=null&&re.auto&&!b.current&&(re.status==="downloading"||re.status==="ready")&&(b.current=!0,d(!0),pt.open({kind:"app",title:o("updateBanner.drawerTitle","应用更新"),fromVer:re.current,toVer:re.version,onRetry:()=>{var Se,F,P;return(P=(F=(Se=window.cicy)==null?void 0:Se.app)==null?void 0:F.downloadUpdate)==null?void 0:P.call(F)}}),pt.push({phase:"download",status:"running",message:o("updateBanner.autoDl","已开启自动更新,正在下载安装包…")})),b.current&&(re.status==="downloading"?pt.setProgress(re.progress||{}):re.status==="ready"?pt.ready({onInstall:()=>{var Se,F,P;return(P=(F=(Se=window.cicy)==null?void 0:Se.app)==null?void 0:F.installUpdate)==null?void 0:P.call(F)}}):re.status==="error"&&(pt.finish({ok:!1,message:re.error||o("updateBanner.error","更新失败")}),b.current=!1))});return()=>{D=!1;try{j&&j()}catch{}}},[]);const _=c==null?void 0:c.status;y.useEffect(()=>{d(!1)},[_]);const h=()=>{var D,j,X;b.current=!0,d(!0),pt.open({kind:"app",title:o("updateBanner.drawerTitle","应用更新"),fromVer:c==null?void 0:c.current,toVer:c==null?void 0:c.version,onRetry:h}),pt.push({phase:"download",status:"running",message:o("updateBanner.startDl","开始下载安装包…")}),pt.setProgress({percent:0}),(X=(j=(D=window.cicy)==null?void 0:D.app)==null?void 0:j.downloadUpdate)==null||X.call(j)};return _!=="available"||m?null:Wt.createPortal(s.jsx("div",{"data-id":"UpdateBanner",style:{position:"fixed",inset:0,zIndex:1e4,background:"rgba(0,0,0,0.6)",backdropFilter:"blur(3px)",display:"flex",alignItems:"center",justifyContent:"center"},onMouseDown:D=>{D.target===D.currentTarget&&d(!0)},children:s.jsxs("div",{onClick:D=>D.stopPropagation(),style:{width:380,maxWidth:"90vw",background:"#161b22",border:"1px solid #30363d",borderRadius:14,padding:"24px 24px 20px",boxShadow:"0 20px 60px rgba(0,0,0,0.55)",textAlign:"center"},children:[s.jsx("div",{style:{fontSize:34,lineHeight:1,marginBottom:12},"aria-hidden":!0,children:"🚀"}),s.jsx("h3",{style:{margin:"0 0 8px",fontSize:17,color:"#e6edf3"},"data-id":"UpdateBanner-text",children:o("updateBanner.available","发现新版本 v{{v}}",{v:c.version})}),s.jsx("p",{style:{margin:"0 0 14px",fontSize:13,lineHeight:1.6,color:"#9aa4b2"},children:o("updateBanner.modalSub","建议尽快更新到最新版本")}),s.jsxs("label",{"data-id":"UpdateBanner-auto",style:{display:"flex",alignItems:"center",justifyContent:"center",gap:7,margin:"0 0 18px",fontSize:12.5,color:"#c9d1d9",cursor:"pointer",userSelect:"none"},children:[s.jsx("input",{type:"checkbox",checked:S,onChange:D=>O(D.target.checked),style:{accentColor:"#238636",width:15,height:15,margin:0,cursor:"pointer"}}),o("updateBanner.autoNext","以后发现新版本自动更新,不再询问")]}),s.jsxs("div",{style:{display:"flex",gap:10,justifyContent:"center"},children:[s.jsx("button",{type:"button","data-id":"UpdateBanner-later",onClick:()=>d(!0),style:{flex:1,padding:"9px 16px",borderRadius:9,border:"1px solid #30363d",background:"transparent",color:"#c9d1d9",cursor:"pointer",fontSize:14},children:o("updateBanner.later","稍后")}),s.jsx("button",{type:"button","data-id":"UpdateBanner-download",onClick:h,style:{flex:1,padding:"9px 16px",borderRadius:9,border:"none",background:"#238636",color:"white",cursor:"pointer",fontSize:14,fontWeight:600},children:o("updateBanner.updateNow","立即更新")})]})]})}),document.body)}function qg(){return s.jsxs("div",{className:"bcard bcard--skeleton","data-id":"SkeletonCard","aria-hidden":!0,children:[s.jsx("div",{className:"bcard__accent",style:{background:"rgba(255,255,255,.08)",opacity:1}}),s.jsxs("div",{className:"bcard__top",children:[s.jsx("div",{className:"skel",style:{width:84,height:26,borderRadius:999}}),s.jsx("div",{className:"skel",style:{width:22,height:22,borderRadius:6}})]}),s.jsxs("div",{style:{flex:1,minHeight:0,marginTop:14},children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[s.jsx("div",{className:"skel",style:{width:24,height:24,borderRadius:6,flex:"0 0 auto"}}),s.jsx("div",{className:"skel skel--line",style:{width:"55%"}})]}),s.jsx("div",{className:"skel",style:{width:60,height:18,borderRadius:6,marginTop:12}})]}),s.jsx("div",{className:"skel skel--cta",style:{marginTop:0}})]})}const dm=["hsl(2 68% 48%)","hsl(26 72% 46%)","hsl(45 70% 42%)","hsl(96 55% 38%)","hsl(140 58% 40%)","hsl(168 62% 36%)","hsl(192 70% 42%)","hsl(210 72% 50%)","hsl(232 62% 56%)","hsl(266 55% 55%)","hsl(292 58% 50%)","hsl(324 66% 50%)"];function Lg(c){c=String(c??"");let f=0;for(let m=0;m<c.length;m++)f=(f*31+c.charCodeAt(m))%100003;return f}function Gg(c){return dm[Lg(c)%dm.length]}function $g({open:c,onClose:f,toastId:m="dood-op"}){const[d,S]=y.useState(!1),[x,b]=y.useState(""),[O,_]=y.useState(!1),[h,D]=y.useState("");y.useEffect(()=>{var M,K;!c||!((K=(M=window.cicy)==null?void 0:M.sidecar)!=null&&K.getDood)||(b(""),D(""),window.cicy.sidecar.getDood().then(R=>_(!!(R!=null&&R.dood))).catch(()=>{}))},[c]),y.useEffect(()=>{var M,K;if(!(!c||!d||!((K=(M=window.cicy)==null?void 0:M.sidecar)!=null&&K.onOpProgress)))return window.cicy.sidecar.onOpProgress(R=>{R!=null&&R.message&&D(String(R.message))})},[c,d]);const j=async()=>{if(!d){S(!0),b(""),D(""),xe.show({id:m,message:O?o("dood.applying","开启容器 Docker 访问,重建容器中…"):o("dood.disabling","关闭中…"),status:"running",progress:void 0});try{const M=await window.cicy.sidecar.setDood(O);M!=null&&M.ok?(f&&f(),xe.show({id:m,message:O?o("dood.onDone","容器 Docker 访问已开启"):o("dood.offDone","容器 Docker 访问已关闭"),status:"done",ttl:4e3})):(b((M==null?void 0:M.error)||o("dood.failed","设置失败")),xe.show({id:m,message:o("dood.failed","设置失败")+(M!=null&&M.error?`: ${M.error}`:""),status:"error",ttl:6e3}))}catch(M){b((M==null?void 0:M.message)||String(M)),xe.show({id:m,message:o("dood.failed","设置失败")+`: ${(M==null?void 0:M.message)||M}`,status:"error",ttl:6e3})}finally{S(!1)}}},X=M=>{f&&f()};return c?s.jsx(s.Fragment,{children:Wt.createPortal(s.jsx("div",{"data-id":"dood-modal",style:{position:"fixed",inset:0,zIndex:66,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,.5)"},onMouseDown:M=>{!d&&M.target===M.currentTarget&&X()},children:s.jsxs("div",{onClick:M=>M.stopPropagation(),style:{width:440,maxWidth:"92vw",background:"var(--card, #1b1d22)",border:"1px solid var(--border, #2c2f36)",borderRadius:14,padding:22,boxShadow:"0 20px 60px rgba(0,0,0,.5)"},children:[s.jsx("div",{style:{fontSize:16,fontWeight:700,marginBottom:4},children:o("dood.title","容器内使用 Docker")}),s.jsx("div",{style:{fontSize:12,opacity:.6,marginBottom:16},children:o("dood.subtitle","把宿主 Docker + docker 客户端挂进容器,容器内 agent 就能直接跑 docker(秒生效,无需下载)")}),s.jsxs("label",{"data-id":"dood-toggle-row",style:{display:"flex",alignItems:"center",gap:10,cursor:d?"default":"pointer",marginBottom:12},children:[s.jsx("input",{type:"checkbox","data-id":"dood-toggle",checked:O,disabled:d,onChange:M=>_(M.target.checked)}),s.jsx("span",{style:{fontSize:14,fontWeight:600},children:o("dood.enable","允许容器内使用 Docker")})]}),d&&h&&s.jsx("div",{"data-id":"dood-progress",style:{fontSize:11,opacity:.7,fontFamily:"var(--mono)",wordBreak:"break-all",margin:"0 0 8px",maxHeight:60,overflow:"hidden"},children:h}),x&&s.jsx("div",{className:"error",style:{marginTop:8,fontSize:12},children:x}),s.jsxs("div",{className:"modal-actions",children:[s.jsx("button",{type:"button",className:"btn-ghost",disabled:d,onClick:()=>X(),children:o("common.cancel","取消")}),s.jsx("button",{type:"button",className:"btn-primary","data-id":"dood-save",disabled:d,onClick:j,children:d?o("common.saving","保存中…"):o("common.save","保存")})]})]})}),document.body)}):null}function oc({avatar:c,name:f,teamId:m,onChanged:d,size:S=34}){const x=y.useRef(null),b=((f||"?").trim()[0]||"?").toUpperCase(),O=Gg(m||f||""),_=h=>{const D=h.target.files&&h.target.files[0];if(h.target.value="",!D)return;const j=new FileReader;j.onload=async()=>{var X,M,K;try{await((K=(M=(X=window.cicy)==null?void 0:X.localTeams)==null?void 0:M.setAvatar)==null?void 0:K.call(M,m,j.result)),d&&d()}catch{}},j.readAsDataURL(D)};return s.jsxs("div",{"data-id":"TeamAvatar",className:"team-avatar",title:m?o("teamCard.changeAvatar","点击更换头像"):"",onClick:m?h=>{h.stopPropagation(),x.current&&x.current.click()}:void 0,style:{width:S,height:S,borderRadius:9,flex:"none",overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center",cursor:m?"pointer":"default",background:c?"#0d1117":O,color:"#fff",fontWeight:700,fontSize:Math.round(S*.42),userSelect:"none"},children:[c?s.jsx("img",{src:c,alt:"",style:{width:"100%",height:"100%",objectFit:"cover"}}):b,m&&s.jsx("input",{ref:x,type:"file",accept:"image/*",style:{display:"none"},onChange:_})]})}function Yg(){return s.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 96 96",fill:"none",children:[s.jsx("path",{d:"M48 11L39.5 33.3L16 29.5L31 48L16 66.5L39.5 62.7L48 85L56.5 62.7L80 66.5L65 48L80 29.5L56.5 33.3Z",stroke:"white",strokeWidth:"10",strokeLinejoin:"round",strokeLinecap:"round"}),s.jsx("circle",{cx:"48",cy:"48",r:"6",fill:"white"})]})}function Hl(){return s.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.2",strokeLinecap:"round",strokeLinejoin:"round",children:[s.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),s.jsx("polyline",{points:"12 5 19 12 12 19"})]})}function wt(){return s.jsx("svg",{className:"spin",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.4",strokeLinecap:"round",children:s.jsx("path",{d:"M21 12a9 9 0 1 1-6.2-8.55"})})}function Fo(){return s.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[s.jsx("rect",{x:"3",y:"4",width:"18",height:"12",rx:"2"}),s.jsx("line",{x1:"2",y1:"20",x2:"22",y2:"20"})]})}function Qg(){return s.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[s.jsx("path",{d:"M21 12a9 9 0 1 1-2.64-6.36"}),s.jsx("polyline",{points:"21 3 21 9 15 9"})]})}function uc(){return s.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":!0,children:[s.jsx("circle",{cx:"12",cy:"5",r:"1.7"}),s.jsx("circle",{cx:"12",cy:"12",r:"1.7"}),s.jsx("circle",{cx:"12",cy:"19",r:"1.7"})]})}function Al(c){try{return localStorage.getItem(c)||null}catch{return null}}function Mi(c){return c?/timeout/i.test(c)?"登录超时,请重新点击 Login。":/state/i.test(c)?"校验失败,请重新登录。":/no token/i.test(c)?"登录未完成,请重试。":/bridge missing/i.test(c)?"无法连接到登录服务(preload 未就绪)。":c:""}const Xg=3e4;function zl(c){const f=String(c||"");return{invalid_code:o("cicyHub.codeInvalid","验证码不对或已过期"),rate_limited:o("cicyHub.rateLimited","发送太频繁,稍后再试(每小时最多 5 次)"),mail_failed:o("cicyHub.mailFailed","邮件发送失败"),name_taken:o("cicyHub.nameTaken","名称冲突,换台机器再试"),expired:o("cicyHub.expired","登录已过期,重新发送"),invalid_email:o("auth.badEmail","请输入有效的邮箱地址")}[f]||f}function Fg(){var G;const c=typeof window<"u"?(G=window.cicy)==null?void 0:G.hub:null,[f,m]=y.useState(null),[d,S]=y.useState(null),[x,b]=y.useState([]),[O,_]=y.useState(!1),[h,D]=y.useState(""),[j,X]=y.useState(!1),[M,K]=y.useState(bm),[R,Z]=y.useState(""),[W,ke]=y.useState("email"),[oe,ne]=y.useState(null);y.useEffect(()=>{let U=!0;return Ui().then(se=>U&&ne(se||"")),()=>{U=!1}},[]);const[re,Se]=y.useState(!1),[F,P]=y.useState(""),$=y.useCallback(async()=>{if(!c)return null;try{const U=await c.status();return m(U||null),U}catch{return null}},[c]),le=y.useCallback(async()=>{if(c){_(!0);try{const U=await c.instances();if(U!=null&&U.ok){const se=(U.instances||[]).filter(ee=>!/^desktop-/i.test(String(ee&&(ee.name||ee.slug)||"")));S(se),b((U.instances||[]).map(ee=>String(ee&&(ee.name||ee.slug)||"").trim()).filter(Boolean)),D("")}else S([]),D((U==null?void 0:U.error)||""),((U==null?void 0:U.error)==="unauthorized"||(U==null?void 0:U.error)==="not_logged_in")&&$()}catch(U){D((U==null?void 0:U.message)||String(U))}finally{_(!1)}}},[c,$]);y.useEffect(()=>{var ee;if(!c){m({loggedIn:!1}),S([]);return}let U=!0;$().then(p=>{U&&(p!=null&&p.loggedIn)?le():U&&S([])});const se=(ee=c.onComplete)==null?void 0:ee.call(c,p=>{p!=null&&p.ok?(X(!1),Se(!1),ke("email"),Z(""),xe.show({id:"hub-login",message:o("auth.loginSuccess","登录成功"),status:"done",ttl:2500}),$().then(()=>le())):p!=null&&p.error&&p.error!=="cancelled"&&(Se(!1),P(zl(p.error)),ke("email"))});return()=>{U=!1;try{se&&se()}catch{}}},[c,le,$]),y.useEffect(()=>{if(!(f!=null&&f.loggedIn))return;const U=setInterval(le,Xg);return()=>clearInterval(U)},[f==null?void 0:f.loggedIn,le]);const Ne=U=>{P(""),ke("email"),Z(""),U&&!M.trim()&&K(String(U)),X(!0)},Ce=()=>{if(W==="code")try{c==null||c.cancel()}catch{}X(!1),Se(!1)},De=async()=>{const U=M.trim();if(!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(U)){P(o("auth.badEmail","请输入有效的邮箱地址"));return}const se=String(oe||"").trim();if(se&&!gm.test(se)){P(o("cicyHub.teamBadFormat","team 名只能用字母、数字和 . _ -"));return}if(se){const ee=Ml(se).toLowerCase();if((x||[]).some(p=>{const v=String(p||"").trim().toLowerCase();return v.startsWith(Yn)&&v===ee})){P(o("cicyHub.teamTaken","「"+se+"」已经被另一台机器用了,换一个"));return}}if(Se(!0),P(""),se)try{await qo(se)}catch{P(o("cicyHub.teamSaveFailed","无法保存 team 名")),Se(!1);return}try{window.__cicyFleetRelabel&&window.__cicyFleetRelabel()}catch{}try{const ee=await c.loginStart(U);if(!(ee!=null&&ee.ok)){P(zl(ee==null?void 0:ee.error)||o("cicyHub.loginFailed","登录失败"));return}ke("code")}catch(ee){P((ee==null?void 0:ee.message)||String(ee))}finally{Se(!1)}},Ae=async()=>{const U=R.replace(/\D/g,"");if(U.length!==6){P(o("cicyHub.codeInvalid","验证码不对或已过期"));return}Se(!0),P("");try{const se=await c.loginCode(U);se!=null&&se.ok||(P(zl(se==null?void 0:se.error)||o("cicyHub.loginFailed","登录失败")),Se(!1))}catch(se){P((se==null?void 0:se.message)||String(se)),Se(!1)}},ae=async()=>{try{await(c==null?void 0:c.logout())}catch{}S([]),D(""),$()},E=async(U,se,ee)=>{try{const p=await c.open(U.id,ee||U.name,0,se||"/");p!=null&&p.ok||xe.show({id:"hub-open",message:zl(p==null?void 0:p.error)||o("cicyHub.loginFailed","打开失败"),status:"error",ttl:5e3})}catch(p){xe.show({id:"hub-open",message:(p==null?void 0:p.message)||String(p),status:"error",ttl:5e3})}};return{available:!!c,status:f,loggedIn:!!(f!=null&&f.loggedIn),owner:(f==null?void 0:f.owner)||"",instances:d,takenNames:x,loading:O,error:h,refresh:le,logout:ae,open:E,loginOpen:j,openLogin:Ne,closeLogin:Ce,email:M,setEmail:K,code:R,setCode:Z,step:W,busy:re,loginErr:F,sendCode:De,verify:Ae,team:oe,setTeam:ne}}function Vg({hub:c}){const f=c.step==="code";return Wt.createPortal(s.jsx("div",{"data-id":"HubLoginModal",style:{position:"fixed",inset:0,zIndex:60,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,.5)"},children:s.jsxs("div",{onClick:m=>m.stopPropagation(),style:{width:400,maxWidth:"92vw",background:"var(--card, #1b1d22)",border:"1px solid var(--border, #2c2f36)",borderRadius:14,padding:22,boxShadow:"0 20px 60px rgba(0,0,0,.5)"},children:[s.jsx("div",{style:{fontSize:16,fontWeight:700,marginBottom:4},children:o("cicyHub.login","登录 CiCy Hub")}),s.jsx("div",{style:{fontSize:12,opacity:.6,marginBottom:16},children:f?o("cicyHub.codeSent","验证码已发到 {{email}},也可以直接点邮件里的链接",{email:c.email.trim()}):o("cicyHub.loginSub","填写本机 team 名 + 邮箱验证码登录。team 名是这台机器的身份,主机名不作数")}),f?s.jsxs(s.Fragment,{children:[s.jsx("label",{style:{display:"block",fontSize:12,opacity:.75,marginBottom:6},children:o("cicyHub.code","6 位验证码")}),s.jsx("input",{"data-id":"HubLoginModal-code",className:"login-email-input",style:{width:"100%",marginBottom:6,letterSpacing:6,fontSize:20,textAlign:"center"},inputMode:"numeric",autoFocus:!0,maxLength:6,value:c.code,onChange:m=>c.setCode(m.target.value.replace(/\D/g,"").slice(0,6)),placeholder:"••••••",onKeyDown:m=>{m.key==="Enter"&&c.verify()}}),c.busy&&s.jsxs("div",{style:{fontSize:12,opacity:.6,display:"flex",alignItems:"center",gap:6},children:[s.jsx(wt,{})," ",o("cicyHub.verifying","验证中…")]})]}):s.jsxs(s.Fragment,{children:[s.jsx("label",{style:{display:"block",fontSize:12,opacity:.75,marginBottom:6},children:o("cicyHub.team","本机 team 名(可选)")}),s.jsxs("div",{style:{display:"flex",alignItems:"center",marginBottom:12},children:[s.jsx("span",{style:{fontSize:13,opacity:.55,paddingRight:6,whiteSpace:"nowrap"},children:Yn}),s.jsx("input",{"data-id":"HubLoginModal-team",className:"login-email-input",style:{flex:1,marginBottom:0},type:"text",autoFocus:!0,spellCheck:!1,value:(c.team||"").replace(Yn,""),onChange:m=>c.setTeam(m.target.value),placeholder:o("cicyHub.teamPlaceholder","例如 xs-1001"),onKeyDown:m=>{m.key==="Enter"&&c.sendCode()}})]}),s.jsx("label",{style:{display:"block",fontSize:12,opacity:.75,marginBottom:6},children:o("cicyHub.email","邮箱")}),s.jsx("input",{"data-id":"HubLoginModal-email",className:"login-email-input",style:{width:"100%",marginBottom:6},type:"email",spellCheck:!1,value:c.email,onChange:m=>c.setEmail(m.target.value),placeholder:"you@example.com",onKeyDown:m=>{m.key==="Enter"&&c.sendCode()}})]}),c.loginErr&&s.jsx("div",{className:"error",style:{marginTop:10},children:c.loginErr}),s.jsxs("div",{className:"modal-actions",children:[s.jsx("button",{type:"button",className:"btn-ghost","data-id":"HubLoginModal-cancel",onClick:c.closeLogin,children:o("cicyHub.cancel","取消")}),f?s.jsx("button",{type:"button",className:"btn-primary","data-id":"HubLoginModal-verify",disabled:c.busy||c.code.length!==6,onClick:c.verify,children:c.busy?o("cicyHub.verifying","验证中…"):o("cicyHub.verify","登录")}):s.jsx("button",{type:"button",className:"btn-primary","data-id":"HubLoginModal-send",disabled:c.busy,onClick:c.sendCode,children:c.busy?o("cicyHub.sending","发送中…"):o("cicyHub.sendCode","发送验证码")})]})]})}),document.body)}function Ho(c){const f=Number(c);return Number.isFinite(f)?Math.round(f)+"%":"–"}function nc(c){const f=Number(c);return Number.isFinite(f)&&f>0?(f/1073741824).toFixed(f>=100*1073741824?0:1)+"G":""}function Zg(c){const f=String(c.status||"").toLowerCase();return c.working||f==="working"||f==="busy"||f==="running"?"#3b82f6":f==="error"||f==="failed"?"#f87171":f==="active"||f==="idle"||f==="online"||c.online?"#4ade80":"#6b7280"}function Kg({inst:c,onOpen:f}){const[m,d]=y.useState(null);if(y.useEffect(()=>{let x=!0;return(async()=>{var b,O,_;try{const h=await((_=(O=(b=window.cicy)==null?void 0:b.hub)==null?void 0:O.projects)==null?void 0:_.call(O,c.id));if(!x)return;d(h&&h.ok?{projects:h.projects||[]}:{error:h&&h.error||"failed"})}catch(h){x&&d({error:(h==null?void 0:h.message)||String(h)})}})(),()=>{x=!1}},[c.id]),!m)return s.jsxs("div",{"data-id":"HubInstanceTree",style:{padding:"6px 0",fontSize:12,opacity:.6,display:"flex",alignItems:"center",gap:6},children:[s.jsx(wt,{})," ",o("cicyHub.loadingProjects","读取项目…")]});if(m.error)return s.jsx("div",{"data-id":"HubInstanceTree",className:"error",style:{fontSize:12},children:zl(m.error)});if(!m.projects.length)return s.jsx("div",{"data-id":"HubInstanceTree",style:{padding:"6px 0",fontSize:12,opacity:.6},children:o("cicyHub.noAgents","这台机器还没有 Agent")});const S={display:"flex",alignItems:"center",gap:6,padding:"4px 6px",borderRadius:6,cursor:"pointer",fontSize:12,minWidth:0};return s.jsx("div",{"data-id":"HubInstanceTree",style:{display:"flex",flexDirection:"column",gap:2,marginTop:6,maxHeight:260,overflowY:"auto"},children:m.projects.map(x=>s.jsxs("div",{"data-id":"HubProject",children:[s.jsxs("div",{className:"bcard__menu-item",style:{...S,fontWeight:600},title:o("cicyHub.openProject","打开项目"),onClick:b=>{b.stopPropagation(),f(x.slug?`/#/project/${encodeURIComponent(x.slug)}`:"/",x.name||c.name)},children:[s.jsx("span",{style:{opacity:.7},children:"📁"}),s.jsx("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:x.name||o("cicyHub.ungrouped","未分组")}),s.jsx("span",{style:{opacity:.5},children:o("cicyHub.agents","{{n}} 个 Agent",{n:x.agents.length})})]}),x.agents.map(b=>s.jsxs("div",{"data-id":"HubAgent",className:"bcard__menu-item",style:{...S,paddingLeft:22},title:`${b.wid}${b.workspace?" · "+b.workspace:""}`,onClick:O=>{O.stopPropagation(),f(`/#/agent/${encodeURIComponent(b.wid)}`,`${b.title||b.wid} · ${c.name}`)},children:[s.jsx("span",{style:{width:7,height:7,borderRadius:4,background:Zg(b),flex:"none"}}),s.jsx("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:b.title||b.wid}),b.role==="master"&&s.jsx("span",{className:"bcard__chip",style:{fontSize:10},children:"master"}),b.agentType&&s.jsx("span",{style:{opacity:.5,fontSize:10},children:b.agentType})]},b.wid))]},x.id))})}function Jg({inst:c,onOpen:f}){const m=c.online?"ok":"off",d=c.resources||null,[S,x]=y.useState(!1),[b,O]=y.useState(!1),_=async(M,K)=>{if(!S){x(!0);try{await f(M,K)}finally{x(!1)}}},h=c.reachable||c.online,D=M=>Number(M)>=90,j=d?[{k:"cpu",t:"CPU "+Ho(d.cpu_usage_pct),warn:D(d.cpu_usage_pct)},{k:"mem",t:"内存 "+Ho(d.mem_usage_pct),warn:D(d.mem_usage_pct)},{k:"disk",t:"磁盘 "+Ho(d.disk_usage_pct),warn:D(d.disk_usage_pct)}]:[],X=d?`内存 ${nc(d.mem_used_bytes)}/${nc(d.mem_total_bytes)} · 磁盘 ${nc(d.disk_used_bytes)}/${nc(d.disk_total_bytes)}`:"";return s.jsxs("div",{"data-id":"HubInstanceCard",className:`bcard bcard--custom${c.online?" bcard--online":""}`,title:c.host,children:[s.jsx("div",{className:"bcard__accent"}),s.jsxs("div",{className:"bcard__top",children:[s.jsxs("div",{className:"bcard__pill",children:[s.jsx("span",{className:"bcard__dot","data-tone":m}),s.jsx(Fo,{})]}),typeof c.agents=="number"&&c.agents>0&&s.jsxs("button",{type:"button","data-id":"HubInstanceCard-agents",className:"btn-ghost",disabled:!h,style:{fontSize:11,color:"#8b949e",padding:"2px 6px",border:"none",background:"transparent",cursor:"pointer"},title:o("cicyHub.toggleTree","展开 / 收起项目与 Agent"),onClick:M=>{M.stopPropagation(),O(K=>!K)},children:[o("cicyHub.agents","{{n}} 个 Agent",{n:c.agents})," ",b?"▾":"▸"]})]}),s.jsxs("div",{className:"bcard__body",children:[s.jsxs("div",{style:{height:28,display:"flex",alignItems:"center",gap:8},children:[s.jsx(oc,{size:24,name:c.name,teamId:c.id}),s.jsx("h3",{className:"bcard__name",style:{flex:1,minWidth:0,margin:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.name})]}),s.jsxs("div",{className:"bcard__meta",children:[s.jsx("span",{className:"bcard__chip","data-id":"HubInstanceCard-kind",children:o("cicyHub.kind","Hub")}),c.version&&s.jsxs("span",{className:"bcard__chip","data-id":"HubInstanceCard-version",children:["v",c.version]})]}),j.length>0&&s.jsx("div",{"data-id":"HubInstanceCard-usage",title:X,style:{marginTop:6,fontSize:11,color:"#8b949e",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:j.map((M,K)=>s.jsxs("span",{style:M.warn?{color:"#f87171"}:void 0,children:[K>0?" · ":"",M.t]},M.k))}),b&&h&&s.jsx(Kg,{inst:c,onOpen:_})]}),s.jsxs("button",{type:"button",className:"bcard__cta","data-id":"HubInstanceCard-open",disabled:S||!h,onClick:()=>_("/",c.name),children:[S?s.jsx(wt,{}):s.jsx(Hl,{}),s.jsx("span",{children:h?o("cicyHub.open","打开"):o("cicyHub.unreachable","不可达")})]})]})}var fm;const Wg=((fm=window.cicy)==null?void 0:fm.platform)||(()=>{const c=navigator.userAgent||"";return/Mac/i.test(c)?"darwin":/Windows/i.test(c)?"win32":"linux"})();document.documentElement.dataset.platform=Wg;document.documentElement.dataset.fullscreen="0";var pm,mm;(mm=(pm=window.cicy)==null?void 0:pm.window)!=null&&mm.onFullscreen&&window.cicy.window.onFullscreen(c=>{document.documentElement.dataset.fullscreen=c?"1":"0"});$y.createRoot(document.getElementById("root")).render(s.jsx(Py,{}));