@weppy/roblox-mcp 2.1.3 → 2.2.0

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.
Files changed (63) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +14 -15
  3. package/README.md +1 -1
  4. package/docs/en/dashboard/overview.md +1 -1
  5. package/docs/en/dashboard/settings.md +1 -8
  6. package/docs/en/dashboard/sync.md +0 -7
  7. package/docs/en/sync/overview.md +0 -1
  8. package/docs/en/tools/overview.md +0 -1
  9. package/docs/es/dashboard/overview.md +1 -1
  10. package/docs/es/dashboard/settings.md +1 -8
  11. package/docs/es/dashboard/sync.md +0 -7
  12. package/docs/es/sync/overview.md +0 -1
  13. package/docs/es/tools/overview.md +0 -1
  14. package/docs/id/dashboard/overview.md +1 -1
  15. package/docs/id/dashboard/settings.md +1 -8
  16. package/docs/id/dashboard/sync.md +0 -7
  17. package/docs/id/sync/overview.md +0 -1
  18. package/docs/id/tools/overview.md +0 -1
  19. package/docs/ja/dashboard/overview.md +1 -1
  20. package/docs/ja/dashboard/settings.md +1 -8
  21. package/docs/ja/dashboard/sync.md +0 -7
  22. package/docs/ja/sync/overview.md +0 -1
  23. package/docs/ja/tools/overview.md +0 -1
  24. package/docs/ko/dashboard/overview.md +1 -1
  25. package/docs/ko/dashboard/settings.md +1 -8
  26. package/docs/ko/dashboard/sync.md +0 -7
  27. package/docs/ko/sync/overview.md +0 -1
  28. package/docs/ko/tools/overview.md +0 -1
  29. package/docs/pt-br/dashboard/overview.md +1 -1
  30. package/docs/pt-br/dashboard/settings.md +1 -8
  31. package/docs/pt-br/dashboard/sync.md +0 -7
  32. package/docs/pt-br/sync/overview.md +0 -1
  33. package/docs/pt-br/tools/overview.md +0 -1
  34. package/llms-full.txt +1 -2
  35. package/package.json +1 -1
  36. package/plugins/weppy-roblox-mcp/.claude-plugin/plugin.json +1 -1
  37. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ChangelogDetailPage-2ZPwh_Le.js → ChangelogDetailPage-D7eMrarv.js} +1 -1
  38. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ChangelogPage-DW2_STiE.js → ChangelogPage-DFCCRyyK.js} +1 -1
  39. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ConfirmModal-CInBBLZW.js → ConfirmModal-BmRJ2JXZ.js} +1 -1
  40. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ConnectionPage-nNwPIEZw.js → ConnectionPage-CiaCY026.js} +1 -1
  41. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{InfoLabel-B_Ys60mi.js → InfoLabel-CCDWZLC9.js} +1 -1
  42. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{OverviewPage-BMBzDR4R.js → OverviewPage-BHpt3LI2.js} +1 -1
  43. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{PlaytestPage-BDgsWgto.js → PlaytestPage-CNwwI5Ro.js} +1 -1
  44. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{PropertyDiff-BbsF9z4D.js → PropertyDiff-DIplDn-J.js} +1 -1
  45. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/SettingsPage-CPqQYZPN.js +1 -0
  46. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/SettingsPage-DTv0NbEY.css +1 -0
  47. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{StatusBadge-FYpJOX7r.js → StatusBadge-C8VKAPpk.js} +1 -1
  48. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/SyncPage-CLt9jxd8.css +1 -0
  49. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/SyncPage-DTSKbpio.js +4 -0
  50. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/TierComparison-7ofkPwj3.js +1 -0
  51. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{TierPromoProgress-Cuz1dgcs.js → TierPromoProgress-SnRUjAPh.js} +1 -1
  52. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{ToolsPage-YGBoDwbQ.js → ToolsPage-CrdNh3D9.js} +1 -1
  53. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/index-DGGmfli1.js +129 -0
  54. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/{useLiveUptime-D5Ux8dA5.js → useLiveUptime-BnXeLpOw.js} +1 -1
  55. package/plugins/weppy-roblox-mcp/dashboard/dist/index.html +1 -1
  56. package/plugins/weppy-roblox-mcp/dist/index.js +61 -64
  57. package/plugins/weppy-roblox-mcp/roblox-plugin/WeppyRobloxMCP.rbxm +0 -0
  58. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/SettingsPage-BB7-WAMU.css +0 -1
  59. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/SettingsPage-BPSAA3lu.js +0 -1
  60. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/SyncPage-BcXYv0GI.js +0 -4
  61. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/SyncPage-Bf1SdHGg.css +0 -1
  62. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/TierComparison-D4uVUGcZ.js +0 -1
  63. package/plugins/weppy-roblox-mcp/dashboard/dist/assets/index-BNdn6WpU.js +0 -129
@@ -0,0 +1,129 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OverviewPage-BHpt3LI2.js","assets/InfoLabel-CCDWZLC9.js","assets/StatusBadge-C8VKAPpk.js","assets/StatusBadge-C2zYt5iE.css","assets/PropertyDiff-DIplDn-J.js","assets/PropertyDiff-Cbx8P1zh.css","assets/TierComparison-7ofkPwj3.js","assets/TierComparison-DGh9vLz0.css","assets/useLiveUptime-BnXeLpOw.js","assets/TierPromoProgress-SnRUjAPh.js","assets/TierPromo.module-CAoUYgIx.js","assets/TierPromo-D5n9OoEm.css","assets/OverviewPage-Dsfl-NRT.css","assets/ConnectionPage-CiaCY026.js","assets/ConfirmModal-BmRJ2JXZ.js","assets/ConnectionPage-CN3LYLAT.css","assets/SyncPage-DTSKbpio.js","assets/SyncPage-CLt9jxd8.css","assets/ChangelogPage-DFCCRyyK.js","assets/ChangelogPage-BH87M2hn.css","assets/PlaytestPage-CNwwI5Ro.js","assets/PlaytestPage-CYSu0pfO.css","assets/ToolsPage-CrdNh3D9.js","assets/ToolsPage-BZZZ3FXe.css","assets/ChangelogDetailPage-D7eMrarv.js","assets/ChangelogDetailPage-D6Tqz7ut.css","assets/SettingsPage-CPqQYZPN.js","assets/SettingsPage-DTv0NbEY.css"])))=>i.map(i=>d[i]);
2
+ var Zf=Object.defineProperty;var eg=(a,i,s)=>i in a?Zf(a,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[i]=s;var xn=(a,i,s)=>eg(a,typeof i!="symbol"?i+"":i,s);function Wd(a,i){for(var s=0;s<i.length;s++){const c=i[s];if(typeof c!="string"&&!Array.isArray(c)){for(const d in c)if(d!=="default"&&!(d in a)){const p=Object.getOwnPropertyDescriptor(c,d);p&&Object.defineProperty(a,d,p.get?p:{enumerable:!0,get:()=>c[d]})}}}return Object.freeze(Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}))}(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))c(d);new MutationObserver(d=>{for(const p of d)if(p.type==="childList")for(const f of p.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&c(f)}).observe(document,{childList:!0,subtree:!0});function s(d){const p={};return d.integrity&&(p.integrity=d.integrity),d.referrerPolicy&&(p.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?p.credentials="include":d.crossOrigin==="anonymous"?p.credentials="omit":p.credentials="same-origin",p}function c(d){if(d.ep)return;d.ep=!0;const p=s(d);fetch(d.href,p)}})();function Hd(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var ss={exports:{}},$a={},cs={exports:{}},Pe={};/**
3
+ * @license React
4
+ * react.production.min.js
5
+ *
6
+ * Copyright (c) Facebook, Inc. and its affiliates.
7
+ *
8
+ * This source code is licensed under the MIT license found in the
9
+ * LICENSE file in the root directory of this source tree.
10
+ */var ad;function tg(){if(ad)return Pe;ad=1;var a=Symbol.for("react.element"),i=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),c=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),p=Symbol.for("react.provider"),f=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),S=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),x=Symbol.iterator;function M(k){return k===null||typeof k!="object"?null:(k=x&&k[x]||k["@@iterator"],typeof k=="function"?k:null)}var I={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},H=Object.assign,F={};function W(k,L,de){this.props=k,this.context=L,this.refs=F,this.updater=de||I}W.prototype.isReactComponent={},W.prototype.setState=function(k,L){if(typeof k!="object"&&typeof k!="function"&&k!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,k,L,"setState")},W.prototype.forceUpdate=function(k){this.updater.enqueueForceUpdate(this,k,"forceUpdate")};function ge(){}ge.prototype=W.prototype;function X(k,L,de){this.props=k,this.context=L,this.refs=F,this.updater=de||I}var ue=X.prototype=new ge;ue.constructor=X,H(ue,W.prototype),ue.isPureReactComponent=!0;var re=Array.isArray,be=Object.prototype.hasOwnProperty,_e={current:null},_={key:!0,ref:!0,__self:!0,__source:!0};function Y(k,L,de){var ye,he={},Se=null,we=null;if(L!=null)for(ye in L.ref!==void 0&&(we=L.ref),L.key!==void 0&&(Se=""+L.key),L)be.call(L,ye)&&!_.hasOwnProperty(ye)&&(he[ye]=L[ye]);var Ce=arguments.length-2;if(Ce===1)he.children=de;else if(1<Ce){for(var Ne=Array(Ce),ft=0;ft<Ce;ft++)Ne[ft]=arguments[ft+2];he.children=Ne}if(k&&k.defaultProps)for(ye in Ce=k.defaultProps,Ce)he[ye]===void 0&&(he[ye]=Ce[ye]);return{$$typeof:a,type:k,key:Se,ref:we,props:he,_owner:_e.current}}function ke(k,L){return{$$typeof:a,type:k.type,key:L,ref:k.ref,props:k.props,_owner:k._owner}}function ie(k){return typeof k=="object"&&k!==null&&k.$$typeof===a}function Ue(k){var L={"=":"=0",":":"=2"};return"$"+k.replace(/[=:]/g,function(de){return L[de]})}var Te=/\/+/g;function pe(k,L){return typeof k=="object"&&k!==null&&k.key!=null?Ue(""+k.key):L.toString(36)}function We(k,L,de,ye,he){var Se=typeof k;(Se==="undefined"||Se==="boolean")&&(k=null);var we=!1;if(k===null)we=!0;else switch(Se){case"string":case"number":we=!0;break;case"object":switch(k.$$typeof){case a:case i:we=!0}}if(we)return we=k,he=he(we),k=ye===""?"."+pe(we,0):ye,re(he)?(de="",k!=null&&(de=k.replace(Te,"$&/")+"/"),We(he,L,de,"",function(ft){return ft})):he!=null&&(ie(he)&&(he=ke(he,de+(!he.key||we&&we.key===he.key?"":(""+he.key).replace(Te,"$&/")+"/")+k)),L.push(he)),1;if(we=0,ye=ye===""?".":ye+":",re(k))for(var Ce=0;Ce<k.length;Ce++){Se=k[Ce];var Ne=ye+pe(Se,Ce);we+=We(Se,L,de,Ne,he)}else if(Ne=M(k),typeof Ne=="function")for(k=Ne.call(k),Ce=0;!(Se=k.next()).done;)Se=Se.value,Ne=ye+pe(Se,Ce++),we+=We(Se,L,de,Ne,he);else if(Se==="object")throw L=String(k),Error("Objects are not valid as a React child (found: "+(L==="[object Object]"?"object with keys {"+Object.keys(k).join(", ")+"}":L)+"). If you meant to render a collection of children, use an array instead.");return we}function Ge(k,L,de){if(k==null)return k;var ye=[],he=0;return We(k,ye,"","",function(Se){return L.call(de,Se,he++)}),ye}function tt(k){if(k._status===-1){var L=k._result;L=L(),L.then(function(de){(k._status===0||k._status===-1)&&(k._status=1,k._result=de)},function(de){(k._status===0||k._status===-1)&&(k._status=2,k._result=de)}),k._status===-1&&(k._status=0,k._result=L)}if(k._status===1)return k._result.default;throw k._result}var Ae={current:null},B={transition:null},oe={ReactCurrentDispatcher:Ae,ReactCurrentBatchConfig:B,ReactCurrentOwner:_e};function q(){throw Error("act(...) is not supported in production builds of React.")}return Pe.Children={map:Ge,forEach:function(k,L,de){Ge(k,function(){L.apply(this,arguments)},de)},count:function(k){var L=0;return Ge(k,function(){L++}),L},toArray:function(k){return Ge(k,function(L){return L})||[]},only:function(k){if(!ie(k))throw Error("React.Children.only expected to receive a single React element child.");return k}},Pe.Component=W,Pe.Fragment=s,Pe.Profiler=d,Pe.PureComponent=X,Pe.StrictMode=c,Pe.Suspense=h,Pe.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=oe,Pe.act=q,Pe.cloneElement=function(k,L,de){if(k==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+k+".");var ye=H({},k.props),he=k.key,Se=k.ref,we=k._owner;if(L!=null){if(L.ref!==void 0&&(Se=L.ref,we=_e.current),L.key!==void 0&&(he=""+L.key),k.type&&k.type.defaultProps)var Ce=k.type.defaultProps;for(Ne in L)be.call(L,Ne)&&!_.hasOwnProperty(Ne)&&(ye[Ne]=L[Ne]===void 0&&Ce!==void 0?Ce[Ne]:L[Ne])}var Ne=arguments.length-2;if(Ne===1)ye.children=de;else if(1<Ne){Ce=Array(Ne);for(var ft=0;ft<Ne;ft++)Ce[ft]=arguments[ft+2];ye.children=Ce}return{$$typeof:a,type:k.type,key:he,ref:Se,props:ye,_owner:we}},Pe.createContext=function(k){return k={$$typeof:f,_currentValue:k,_currentValue2:k,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},k.Provider={$$typeof:p,_context:k},k.Consumer=k},Pe.createElement=Y,Pe.createFactory=function(k){var L=Y.bind(null,k);return L.type=k,L},Pe.createRef=function(){return{current:null}},Pe.forwardRef=function(k){return{$$typeof:m,render:k}},Pe.isValidElement=ie,Pe.lazy=function(k){return{$$typeof:b,_payload:{_status:-1,_result:k},_init:tt}},Pe.memo=function(k,L){return{$$typeof:S,type:k,compare:L===void 0?null:L}},Pe.startTransition=function(k){var L=B.transition;B.transition={};try{k()}finally{B.transition=L}},Pe.unstable_act=q,Pe.useCallback=function(k,L){return Ae.current.useCallback(k,L)},Pe.useContext=function(k){return Ae.current.useContext(k)},Pe.useDebugValue=function(){},Pe.useDeferredValue=function(k){return Ae.current.useDeferredValue(k)},Pe.useEffect=function(k,L){return Ae.current.useEffect(k,L)},Pe.useId=function(){return Ae.current.useId()},Pe.useImperativeHandle=function(k,L,de){return Ae.current.useImperativeHandle(k,L,de)},Pe.useInsertionEffect=function(k,L){return Ae.current.useInsertionEffect(k,L)},Pe.useLayoutEffect=function(k,L){return Ae.current.useLayoutEffect(k,L)},Pe.useMemo=function(k,L){return Ae.current.useMemo(k,L)},Pe.useReducer=function(k,L,de){return Ae.current.useReducer(k,L,de)},Pe.useRef=function(k){return Ae.current.useRef(k)},Pe.useState=function(k){return Ae.current.useState(k)},Pe.useSyncExternalStore=function(k,L,de){return Ae.current.useSyncExternalStore(k,L,de)},Pe.useTransition=function(){return Ae.current.useTransition()},Pe.version="18.3.1",Pe}var rd;function xs(){return rd||(rd=1,cs.exports=tg()),cs.exports}/**
11
+ * @license React
12
+ * react-jsx-runtime.production.min.js
13
+ *
14
+ * Copyright (c) Facebook, Inc. and its affiliates.
15
+ *
16
+ * This source code is licensed under the MIT license found in the
17
+ * LICENSE file in the root directory of this source tree.
18
+ */var id;function ng(){if(id)return $a;id=1;var a=xs(),i=Symbol.for("react.element"),s=Symbol.for("react.fragment"),c=Object.prototype.hasOwnProperty,d=a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};function f(m,h,S){var b,x={},M=null,I=null;S!==void 0&&(M=""+S),h.key!==void 0&&(M=""+h.key),h.ref!==void 0&&(I=h.ref);for(b in h)c.call(h,b)&&!p.hasOwnProperty(b)&&(x[b]=h[b]);if(m&&m.defaultProps)for(b in h=m.defaultProps,h)x[b]===void 0&&(x[b]=h[b]);return{$$typeof:i,type:m,key:M,ref:I,props:x,_owner:d.current}}return $a.Fragment=s,$a.jsx=f,$a.jsxs=f,$a}var ld;function og(){return ld||(ld=1,ss.exports=ng()),ss.exports}var A=og(),pi={},us={exports:{}},_t={},ds={exports:{}},ps={};/**
19
+ * @license React
20
+ * scheduler.production.min.js
21
+ *
22
+ * Copyright (c) Facebook, Inc. and its affiliates.
23
+ *
24
+ * This source code is licensed under the MIT license found in the
25
+ * LICENSE file in the root directory of this source tree.
26
+ */var sd;function ag(){return sd||(sd=1,(function(a){function i(B,oe){var q=B.length;B.push(oe);e:for(;0<q;){var k=q-1>>>1,L=B[k];if(0<d(L,oe))B[k]=oe,B[q]=L,q=k;else break e}}function s(B){return B.length===0?null:B[0]}function c(B){if(B.length===0)return null;var oe=B[0],q=B.pop();if(q!==oe){B[0]=q;e:for(var k=0,L=B.length,de=L>>>1;k<de;){var ye=2*(k+1)-1,he=B[ye],Se=ye+1,we=B[Se];if(0>d(he,q))Se<L&&0>d(we,he)?(B[k]=we,B[Se]=q,k=Se):(B[k]=he,B[ye]=q,k=ye);else if(Se<L&&0>d(we,q))B[k]=we,B[Se]=q,k=Se;else break e}}return oe}function d(B,oe){var q=B.sortIndex-oe.sortIndex;return q!==0?q:B.id-oe.id}if(typeof performance=="object"&&typeof performance.now=="function"){var p=performance;a.unstable_now=function(){return p.now()}}else{var f=Date,m=f.now();a.unstable_now=function(){return f.now()-m}}var h=[],S=[],b=1,x=null,M=3,I=!1,H=!1,F=!1,W=typeof setTimeout=="function"?setTimeout:null,ge=typeof clearTimeout=="function"?clearTimeout:null,X=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function ue(B){for(var oe=s(S);oe!==null;){if(oe.callback===null)c(S);else if(oe.startTime<=B)c(S),oe.sortIndex=oe.expirationTime,i(h,oe);else break;oe=s(S)}}function re(B){if(F=!1,ue(B),!H)if(s(h)!==null)H=!0,tt(be);else{var oe=s(S);oe!==null&&Ae(re,oe.startTime-B)}}function be(B,oe){H=!1,F&&(F=!1,ge(Y),Y=-1),I=!0;var q=M;try{for(ue(oe),x=s(h);x!==null&&(!(x.expirationTime>oe)||B&&!Ue());){var k=x.callback;if(typeof k=="function"){x.callback=null,M=x.priorityLevel;var L=k(x.expirationTime<=oe);oe=a.unstable_now(),typeof L=="function"?x.callback=L:x===s(h)&&c(h),ue(oe)}else c(h);x=s(h)}if(x!==null)var de=!0;else{var ye=s(S);ye!==null&&Ae(re,ye.startTime-oe),de=!1}return de}finally{x=null,M=q,I=!1}}var _e=!1,_=null,Y=-1,ke=5,ie=-1;function Ue(){return!(a.unstable_now()-ie<ke)}function Te(){if(_!==null){var B=a.unstable_now();ie=B;var oe=!0;try{oe=_(!0,B)}finally{oe?pe():(_e=!1,_=null)}}else _e=!1}var pe;if(typeof X=="function")pe=function(){X(Te)};else if(typeof MessageChannel<"u"){var We=new MessageChannel,Ge=We.port2;We.port1.onmessage=Te,pe=function(){Ge.postMessage(null)}}else pe=function(){W(Te,0)};function tt(B){_=B,_e||(_e=!0,pe())}function Ae(B,oe){Y=W(function(){B(a.unstable_now())},oe)}a.unstable_IdlePriority=5,a.unstable_ImmediatePriority=1,a.unstable_LowPriority=4,a.unstable_NormalPriority=3,a.unstable_Profiling=null,a.unstable_UserBlockingPriority=2,a.unstable_cancelCallback=function(B){B.callback=null},a.unstable_continueExecution=function(){H||I||(H=!0,tt(be))},a.unstable_forceFrameRate=function(B){0>B||125<B?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):ke=0<B?Math.floor(1e3/B):5},a.unstable_getCurrentPriorityLevel=function(){return M},a.unstable_getFirstCallbackNode=function(){return s(h)},a.unstable_next=function(B){switch(M){case 1:case 2:case 3:var oe=3;break;default:oe=M}var q=M;M=oe;try{return B()}finally{M=q}},a.unstable_pauseExecution=function(){},a.unstable_requestPaint=function(){},a.unstable_runWithPriority=function(B,oe){switch(B){case 1:case 2:case 3:case 4:case 5:break;default:B=3}var q=M;M=B;try{return oe()}finally{M=q}},a.unstable_scheduleCallback=function(B,oe,q){var k=a.unstable_now();switch(typeof q=="object"&&q!==null?(q=q.delay,q=typeof q=="number"&&0<q?k+q:k):q=k,B){case 1:var L=-1;break;case 2:L=250;break;case 5:L=1073741823;break;case 4:L=1e4;break;default:L=5e3}return L=q+L,B={id:b++,callback:oe,priorityLevel:B,startTime:q,expirationTime:L,sortIndex:-1},q>k?(B.sortIndex=q,i(S,B),s(h)===null&&B===s(S)&&(F?(ge(Y),Y=-1):F=!0,Ae(re,q-k))):(B.sortIndex=L,i(h,B),H||I||(H=!0,tt(be))),B},a.unstable_shouldYield=Ue,a.unstable_wrapCallback=function(B){var oe=M;return function(){var q=M;M=oe;try{return B.apply(this,arguments)}finally{M=q}}}})(ps)),ps}var cd;function rg(){return cd||(cd=1,ds.exports=ag()),ds.exports}/**
27
+ * @license React
28
+ * react-dom.production.min.js
29
+ *
30
+ * Copyright (c) Facebook, Inc. and its affiliates.
31
+ *
32
+ * This source code is licensed under the MIT license found in the
33
+ * LICENSE file in the root directory of this source tree.
34
+ */var ud;function ig(){if(ud)return _t;ud=1;var a=xs(),i=rg();function s(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);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."}var c=new Set,d={};function p(e,t){f(e,t),f(e+"Capture",t)}function f(e,t){for(d[e]=t,e=0;e<t.length;e++)c.add(t[e])}var m=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),h=Object.prototype.hasOwnProperty,S=/^[: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]*$/,b={},x={};function M(e){return h.call(x,e)?!0:h.call(b,e)?!1:S.test(e)?x[e]=!0:(b[e]=!0,!1)}function I(e,t,n,o){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return o?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function H(e,t,n,o){if(t===null||typeof t>"u"||I(e,t,n,o))return!0;if(o)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function F(e,t,n,o,r,l,u){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=o,this.attributeNamespace=r,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=l,this.removeEmptyString=u}var W={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){W[e]=new F(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];W[t]=new F(t,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){W[e]=new F(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){W[e]=new F(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){W[e]=new F(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){W[e]=new F(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){W[e]=new F(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){W[e]=new F(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){W[e]=new F(e,5,!1,e.toLowerCase(),null,!1,!1)});var ge=/[\-:]([a-z])/g;function X(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(ge,X);W[t]=new F(t,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(ge,X);W[t]=new F(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(ge,X);W[t]=new F(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){W[e]=new F(e,1,!1,e.toLowerCase(),null,!1,!1)}),W.xlinkHref=new F("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){W[e]=new F(e,1,!1,e.toLowerCase(),null,!0,!0)});function ue(e,t,n,o){var r=W.hasOwnProperty(t)?W[t]:null;(r!==null?r.type!==0:o||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!=="n"&&t[1]!=="N")&&(H(t,n,r,o)&&(n=null),o||r===null?M(t)&&(n===null?e.removeAttribute(t):e.setAttribute(t,""+n)):r.mustUseProperty?e[r.propertyName]=n===null?r.type===3?!1:"":n:(t=r.attributeName,o=r.attributeNamespace,n===null?e.removeAttribute(t):(r=r.type,n=r===3||r===4&&n===!0?"":""+n,o?e.setAttributeNS(o,t,n):e.setAttribute(t,n))))}var re=a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,be=Symbol.for("react.element"),_e=Symbol.for("react.portal"),_=Symbol.for("react.fragment"),Y=Symbol.for("react.strict_mode"),ke=Symbol.for("react.profiler"),ie=Symbol.for("react.provider"),Ue=Symbol.for("react.context"),Te=Symbol.for("react.forward_ref"),pe=Symbol.for("react.suspense"),We=Symbol.for("react.suspense_list"),Ge=Symbol.for("react.memo"),tt=Symbol.for("react.lazy"),Ae=Symbol.for("react.offscreen"),B=Symbol.iterator;function oe(e){return e===null||typeof e!="object"?null:(e=B&&e[B]||e["@@iterator"],typeof e=="function"?e:null)}var q=Object.assign,k;function L(e){if(k===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);k=t&&t[1]||""}return`
35
+ `+k+e}var de=!1;function ye(e,t){if(!e||de)return"";de=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(j){var o=j}Reflect.construct(e,[],t)}else{try{t.call()}catch(j){o=j}e.call(t.prototype)}else{try{throw Error()}catch(j){o=j}e()}}catch(j){if(j&&o&&typeof j.stack=="string"){for(var r=j.stack.split(`
36
+ `),l=o.stack.split(`
37
+ `),u=r.length-1,g=l.length-1;1<=u&&0<=g&&r[u]!==l[g];)g--;for(;1<=u&&0<=g;u--,g--)if(r[u]!==l[g]){if(u!==1||g!==1)do if(u--,g--,0>g||r[u]!==l[g]){var v=`
38
+ `+r[u].replace(" at new "," at ");return e.displayName&&v.includes("<anonymous>")&&(v=v.replace("<anonymous>",e.displayName)),v}while(1<=u&&0<=g);break}}}finally{de=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?L(e):""}function he(e){switch(e.tag){case 5:return L(e.type);case 16:return L("Lazy");case 13:return L("Suspense");case 19:return L("SuspenseList");case 0:case 2:case 15:return e=ye(e.type,!1),e;case 11:return e=ye(e.type.render,!1),e;case 1:return e=ye(e.type,!0),e;default:return""}}function Se(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case _:return"Fragment";case _e:return"Portal";case ke:return"Profiler";case Y:return"StrictMode";case pe:return"Suspense";case We:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Ue:return(e.displayName||"Context")+".Consumer";case ie:return(e._context.displayName||"Context")+".Provider";case Te:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ge:return t=e.displayName||null,t!==null?t:Se(e.type)||"Memo";case tt:t=e._payload,e=e._init;try{return Se(e(t))}catch{}}return null}function we(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Se(t);case 8:return t===Y?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Ce(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Ne(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ft(e){var t=Ne(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),o=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var r=n.get,l=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(u){o=""+u,l.call(this,u)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return o},setValue:function(u){o=""+u},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function tn(e){e._valueTracker||(e._valueTracker=ft(e))}function ot(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),o="";return e&&(o=Ne(e)?e.checked?"true":"false":e.value),e=o,e!==n?(t.setValue(e),!0):!1}function Tt(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}}function Tn(e,t){var n=t.checked;return q({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function lo(e,t){var n=t.defaultValue==null?"":t.defaultValue,o=t.checked!=null?t.checked:t.defaultChecked;n=Ce(t.value!=null?t.value:n),e._wrapperState={initialChecked:o,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Mt(e,t){t=t.checked,t!=null&&ue(e,"checked",t,!1)}function Mn(e,t){Mt(e,t);var n=Ce(t.value),o=t.type;if(n!=null)o==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(o==="submit"||o==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?me(e,t.type,n):t.hasOwnProperty("defaultValue")&&me(e,t.type,Ce(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function so(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var o=t.type;if(!(o!=="submit"&&o!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function me(e,t,n){(t!=="number"||Tt(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Ze=Array.isArray;function at(e,t,n,o){if(e=e.options,t){t={};for(var r=0;r<n.length;r++)t["$"+n[r]]=!0;for(n=0;n<e.length;n++)r=t.hasOwnProperty("$"+e[n].value),e[n].selected!==r&&(e[n].selected=r),r&&o&&(e[n].defaultSelected=!0)}else{for(n=""+Ce(n),t=null,r=0;r<e.length;r++){if(e[r].value===n){e[r].selected=!0,o&&(e[r].defaultSelected=!0);return}t!==null||e[r].disabled||(t=e[r])}t!==null&&(t.selected=!0)}}function co(e,t){if(t.dangerouslySetInnerHTML!=null)throw Error(s(91));return q({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function or(e,t){var n=t.value;if(n==null){if(n=t.children,t=t.defaultValue,n!=null){if(t!=null)throw Error(s(92));if(Ze(n)){if(1<n.length)throw Error(s(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:Ce(n)}}function nn(e,t){var n=Ce(t.value),o=Ce(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),o!=null&&(e.defaultValue=""+o)}function Ln(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}function ca(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function uo(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?ca(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var Lt,It=(function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,o,r){MSApp.execUnsafeLocalFunction(function(){return e(t,n,o,r)})}:e})(function(e,t){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=t;else{for(Lt=Lt||document.createElement("div"),Lt.innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=Lt.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Dn(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var on={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ji=["Webkit","ms","Moz","O"];Object.keys(on).forEach(function(e){ji.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),on[t]=on[e]})});function qt(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||on.hasOwnProperty(e)&&on[e]?(""+t).trim():t+"px"}function ua(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var o=n.indexOf("--")===0,r=qt(n,t[n],o);n==="float"&&(n="cssFloat"),o?e.setProperty(n,r):e[n]=r}}var ar=q({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Oo(e,t){if(t){if(ar[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(s(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(s(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(s(61))}if(t.style!=null&&typeof t.style!="object")throw Error(s(62))}}function da(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";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 zo=null;function On(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Ao=null,an=null,rn=null;function rr(e){if(e=Da(e)){if(typeof Ao!="function")throw Error(s(280));var t=e.stateNode;t&&(t=jr(t),Ao(e.stateNode,e.type,t))}}function pa(e){an?rn?rn.push(e):rn=[e]:an=e}function ir(){if(an){var e=an,t=rn;if(rn=an=null,rr(e),t)for(e=0;e<t.length;e++)rr(t[e])}}function fa(e,t){return e(t)}function po(){}var zn=!1;function lr(e,t,n){if(zn)return e(t,n);zn=!0;try{return fa(e,t,n)}finally{zn=!1,(an!==null||rn!==null)&&(po(),ir())}}function fo(e,t){var n=e.stateNode;if(n===null)return null;var o=jr(n);if(o===null)return null;n=o[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":(o=!o.disabled)||(e=e.type,o=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!o;break e;default:e=!1}if(e)return null;if(n&&typeof n!="function")throw Error(s(231,t,typeof n));return n}var y=!1;if(m)try{var P={};Object.defineProperty(P,"passive",{get:function(){y=!0}}),window.addEventListener("test",P,P),window.removeEventListener("test",P,P)}catch{y=!1}function E(e,t,n,o,r,l,u,g,v){var j=Array.prototype.slice.call(arguments,3);try{t.apply(n,j)}catch(z){this.onError(z)}}var D=!1,V=null,ae=!1,ce=null,J={onError:function(e){D=!0,V=e}};function ee(e,t,n,o,r,l,u,g,v){D=!1,V=null,E.apply(J,arguments)}function $(e,t,n,o,r,l,u,g,v){if(ee.apply(this,arguments),D){if(D){var j=V;D=!1,V=null}else throw Error(s(198));ae||(ae=!0,ce=j)}}function G(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,(t.flags&4098)!==0&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function ve(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 xe(e){if(G(e)!==e)throw Error(s(188))}function lt(e){var t=e.alternate;if(!t){if(t=G(e),t===null)throw Error(s(188));return t!==e?null:e}for(var n=e,o=t;;){var r=n.return;if(r===null)break;var l=r.alternate;if(l===null){if(o=r.return,o!==null){n=o;continue}break}if(r.child===l.child){for(l=r.child;l;){if(l===n)return xe(r),e;if(l===o)return xe(r),t;l=l.sibling}throw Error(s(188))}if(n.return!==o.return)n=r,o=l;else{for(var u=!1,g=r.child;g;){if(g===n){u=!0,n=r,o=l;break}if(g===o){u=!0,o=r,n=l;break}g=g.sibling}if(!u){for(g=l.child;g;){if(g===n){u=!0,n=l,o=r;break}if(g===o){u=!0,o=l,n=r;break}g=g.sibling}if(!u)throw Error(s(189))}}if(n.alternate!==o)throw Error(s(190))}if(n.tag!==3)throw Error(s(188));return n.stateNode.current===n?e:t}function Ie(e){return e=lt(e),e!==null?Ee(e):null}function Ee(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var t=Ee(e);if(t!==null)return t;e=e.sibling}return null}var qe=i.unstable_scheduleCallback,gn=i.unstable_cancelCallback,go=i.unstable_shouldYield,Xt=i.unstable_requestPaint,Le=i.unstable_now,ga=i.unstable_getCurrentPriorityLevel,hn=i.unstable_ImmediatePriority,ln=i.unstable_UserBlockingPriority,mn=i.unstable_NormalPriority,No=i.unstable_LowPriority,je=i.unstable_IdlePriority,He=null,gt=null;function ho(e){if(gt&&typeof gt.onCommitFiberRoot=="function")try{gt.onCommitFiberRoot(He,e,void 0,(e.current.flags&128)===128)}catch{}}var De=Math.clz32?Math.clz32:_i,An=Math.log,sr=Math.LN2;function _i(e){return e>>>=0,e===0?32:31-(An(e)/sr|0)|0}var cr=64,ur=4194304;function ha(e){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: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 e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function dr(e,t){var n=e.pendingLanes;if(n===0)return 0;var o=0,r=e.suspendedLanes,l=e.pingedLanes,u=n&268435455;if(u!==0){var g=u&~r;g!==0?o=ha(g):(l&=u,l!==0&&(o=ha(l)))}else u=n&~r,u!==0?o=ha(u):l!==0&&(o=ha(l));if(o===0)return 0;if(t!==0&&t!==o&&(t&r)===0&&(r=o&-o,l=t&-t,r>=l||r===16&&(l&4194240)!==0))return t;if((o&4)!==0&&(o|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=o;0<t;)n=31-De(t),r=1<<n,o|=e[n],t&=~r;return o}function yp(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64: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:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function vp(e,t){for(var n=e.suspendedLanes,o=e.pingedLanes,r=e.expirationTimes,l=e.pendingLanes;0<l;){var u=31-De(l),g=1<<u,v=r[u];v===-1?((g&n)===0||(g&o)!==0)&&(r[u]=yp(g,t)):v<=t&&(e.expiredLanes|=g),l&=~g}}function Ei(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function zs(){var e=cr;return cr<<=1,(cr&4194240)===0&&(cr=64),e}function Ti(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function ma(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-De(t),e[t]=n}function Sp(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var o=e.eventTimes;for(e=e.expirationTimes;0<n;){var r=31-De(n),l=1<<r;t[r]=0,o[r]=-1,e[r]=-1,n&=~l}}function Mi(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var o=31-De(n),r=1<<o;r&t|e[o]&t&&(e[o]|=t),n&=~r}}var Fe=0;function As(e){return e&=-e,1<e?4<e?(e&268435455)!==0?16:536870912:4:1}var Ns,Li,Is,Fs,Bs,Di=!1,pr=[],Nn=null,In=null,Fn=null,ya=new Map,va=new Map,Bn=[],wp="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 submit".split(" ");function Us(e,t){switch(e){case"focusin":case"focusout":Nn=null;break;case"dragenter":case"dragleave":In=null;break;case"mouseover":case"mouseout":Fn=null;break;case"pointerover":case"pointerout":ya.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":va.delete(t.pointerId)}}function Sa(e,t,n,o,r,l){return e===null||e.nativeEvent!==l?(e={blockedOn:t,domEventName:n,eventSystemFlags:o,nativeEvent:l,targetContainers:[r]},t!==null&&(t=Da(t),t!==null&&Li(t)),e):(e.eventSystemFlags|=o,t=e.targetContainers,r!==null&&t.indexOf(r)===-1&&t.push(r),e)}function kp(e,t,n,o,r){switch(t){case"focusin":return Nn=Sa(Nn,e,t,n,o,r),!0;case"dragenter":return In=Sa(In,e,t,n,o,r),!0;case"mouseover":return Fn=Sa(Fn,e,t,n,o,r),!0;case"pointerover":var l=r.pointerId;return ya.set(l,Sa(ya.get(l)||null,e,t,n,o,r)),!0;case"gotpointercapture":return l=r.pointerId,va.set(l,Sa(va.get(l)||null,e,t,n,o,r)),!0}return!1}function Ws(e){var t=mo(e.target);if(t!==null){var n=G(t);if(n!==null){if(t=n.tag,t===13){if(t=ve(n),t!==null){e.blockedOn=t,Bs(e.priority,function(){Is(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function fr(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=zi(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(n===null){n=e.nativeEvent;var o=new n.constructor(n.type,n);zo=o,n.target.dispatchEvent(o),zo=null}else return t=Da(n),t!==null&&Li(t),e.blockedOn=n,!1;t.shift()}return!0}function Hs(e,t,n){fr(e)&&n.delete(t)}function Pp(){Di=!1,Nn!==null&&fr(Nn)&&(Nn=null),In!==null&&fr(In)&&(In=null),Fn!==null&&fr(Fn)&&(Fn=null),ya.forEach(Hs),va.forEach(Hs)}function wa(e,t){e.blockedOn===t&&(e.blockedOn=null,Di||(Di=!0,i.unstable_scheduleCallback(i.unstable_NormalPriority,Pp)))}function ka(e){function t(r){return wa(r,e)}if(0<pr.length){wa(pr[0],e);for(var n=1;n<pr.length;n++){var o=pr[n];o.blockedOn===e&&(o.blockedOn=null)}}for(Nn!==null&&wa(Nn,e),In!==null&&wa(In,e),Fn!==null&&wa(Fn,e),ya.forEach(t),va.forEach(t),n=0;n<Bn.length;n++)o=Bn[n],o.blockedOn===e&&(o.blockedOn=null);for(;0<Bn.length&&(n=Bn[0],n.blockedOn===null);)Ws(n),n.blockedOn===null&&Bn.shift()}var Io=re.ReactCurrentBatchConfig,gr=!0;function Rp(e,t,n,o){var r=Fe,l=Io.transition;Io.transition=null;try{Fe=1,Oi(e,t,n,o)}finally{Fe=r,Io.transition=l}}function bp(e,t,n,o){var r=Fe,l=Io.transition;Io.transition=null;try{Fe=4,Oi(e,t,n,o)}finally{Fe=r,Io.transition=l}}function Oi(e,t,n,o){if(gr){var r=zi(e,t,n,o);if(r===null)Ji(e,t,o,hr,n),Us(e,o);else if(kp(r,e,t,n,o))o.stopPropagation();else if(Us(e,o),t&4&&-1<wp.indexOf(e)){for(;r!==null;){var l=Da(r);if(l!==null&&Ns(l),l=zi(e,t,n,o),l===null&&Ji(e,t,o,hr,n),l===r)break;r=l}r!==null&&o.stopPropagation()}else Ji(e,t,o,null,n)}}var hr=null;function zi(e,t,n,o){if(hr=null,e=On(o),e=mo(e),e!==null)if(t=G(e),t===null)e=null;else if(n=t.tag,n===13){if(e=ve(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return hr=e,null}function Vs(e){switch(e){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"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 1;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"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(ga()){case hn:return 1;case ln:return 4;case mn:case No:return 16;case je:return 536870912;default:return 16}default:return 16}}var Un=null,Ai=null,mr=null;function qs(){if(mr)return mr;var e,t=Ai,n=t.length,o,r="value"in Un?Un.value:Un.textContent,l=r.length;for(e=0;e<n&&t[e]===r[e];e++);var u=n-e;for(o=1;o<=u&&t[n-o]===r[l-o];o++);return mr=r.slice(e,1<o?1-o:void 0)}function yr(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 vr(){return!0}function Xs(){return!1}function Dt(e){function t(n,o,r,l,u){this._reactName=n,this._targetInst=r,this.type=o,this.nativeEvent=l,this.target=u,this.currentTarget=null;for(var g in e)e.hasOwnProperty(g)&&(n=e[g],this[g]=n?n(l):l[g]);return this.isDefaultPrevented=(l.defaultPrevented!=null?l.defaultPrevented:l.returnValue===!1)?vr:Xs,this.isPropagationStopped=Xs,this}return q(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!="unknown"&&(n.returnValue=!1),this.isDefaultPrevented=vr)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!="unknown"&&(n.cancelBubble=!0),this.isPropagationStopped=vr)},persist:function(){},isPersistent:vr}),t}var Fo={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Ni=Dt(Fo),Pa=q({},Fo,{view:0,detail:0}),xp=Dt(Pa),Ii,Fi,Ra,Sr=q({},Pa,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Ui,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!==Ra&&(Ra&&e.type==="mousemove"?(Ii=e.screenX-Ra.screenX,Fi=e.screenY-Ra.screenY):Fi=Ii=0,Ra=e),Ii)},movementY:function(e){return"movementY"in e?e.movementY:Fi}}),Ks=Dt(Sr),Cp=q({},Sr,{dataTransfer:0}),jp=Dt(Cp),_p=q({},Pa,{relatedTarget:0}),Bi=Dt(_p),Ep=q({},Fo,{animationName:0,elapsedTime:0,pseudoElement:0}),Tp=Dt(Ep),Mp=q({},Fo,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),Lp=Dt(Mp),Dp=q({},Fo,{data:0}),$s=Dt(Dp),Op={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},zp={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"},Ap={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Np(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=Ap[e])?!!t[e]:!1}function Ui(){return Np}var Ip=q({},Pa,{key:function(e){if(e.key){var t=Op[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=yr(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?zp[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Ui,charCode:function(e){return e.type==="keypress"?yr(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?yr(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),Fp=Dt(Ip),Bp=q({},Sr,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Qs=Dt(Bp),Up=q({},Pa,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Ui}),Wp=Dt(Up),Hp=q({},Fo,{propertyName:0,elapsedTime:0,pseudoElement:0}),Vp=Dt(Hp),qp=q({},Sr,{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}),Xp=Dt(qp),Kp=[9,13,27,32],Wi=m&&"CompositionEvent"in window,ba=null;m&&"documentMode"in document&&(ba=document.documentMode);var $p=m&&"TextEvent"in window&&!ba,Gs=m&&(!Wi||ba&&8<ba&&11>=ba),Ys=" ",Js=!1;function Zs(e,t){switch(e){case"keyup":return Kp.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ec(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Bo=!1;function Qp(e,t){switch(e){case"compositionend":return ec(t);case"keypress":return t.which!==32?null:(Js=!0,Ys);case"textInput":return e=t.data,e===Ys&&Js?null:e;default:return null}}function Gp(e,t){if(Bo)return e==="compositionend"||!Wi&&Zs(e,t)?(e=qs(),mr=Ai=Un=null,Bo=!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 Gs&&t.locale!=="ko"?null:t.data;default:return null}}var Yp={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 tc(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!Yp[e.type]:t==="textarea"}function nc(e,t,n,o){pa(o),t=br(t,"onChange"),0<t.length&&(n=new Ni("onChange","change",null,n,o),e.push({event:n,listeners:t}))}var xa=null,Ca=null;function Jp(e){wc(e,0)}function wr(e){var t=qo(e);if(ot(t))return e}function Zp(e,t){if(e==="change")return t}var oc=!1;if(m){var Hi;if(m){var Vi="oninput"in document;if(!Vi){var ac=document.createElement("div");ac.setAttribute("oninput","return;"),Vi=typeof ac.oninput=="function"}Hi=Vi}else Hi=!1;oc=Hi&&(!document.documentMode||9<document.documentMode)}function rc(){xa&&(xa.detachEvent("onpropertychange",ic),Ca=xa=null)}function ic(e){if(e.propertyName==="value"&&wr(Ca)){var t=[];nc(t,Ca,e,On(e)),lr(Jp,t)}}function ef(e,t,n){e==="focusin"?(rc(),xa=t,Ca=n,xa.attachEvent("onpropertychange",ic)):e==="focusout"&&rc()}function tf(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return wr(Ca)}function nf(e,t){if(e==="click")return wr(t)}function of(e,t){if(e==="input"||e==="change")return wr(t)}function af(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Kt=typeof Object.is=="function"?Object.is:af;function ja(e,t){if(Kt(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(o=0;o<n.length;o++){var r=n[o];if(!h.call(t,r)||!Kt(e[r],t[r]))return!1}return!0}function lc(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function sc(e,t){var n=lc(e);e=0;for(var o;n;){if(n.nodeType===3){if(o=e+n.textContent.length,e<=t&&o>=t)return{node:n,offset:t-e};e=o}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=lc(n)}}function cc(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?cc(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function uc(){for(var e=window,t=Tt();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Tt(e.document)}return t}function qi(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")}function rf(e){var t=uc(),n=e.focusedElem,o=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&cc(n.ownerDocument.documentElement,n)){if(o!==null&&qi(n)){if(t=o.start,e=o.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var r=n.textContent.length,l=Math.min(o.start,r);o=o.end===void 0?l:Math.min(o.end,r),!e.extend&&l>o&&(r=o,o=l,l=r),r=sc(n,l);var u=sc(n,o);r&&u&&(e.rangeCount!==1||e.anchorNode!==r.node||e.anchorOffset!==r.offset||e.focusNode!==u.node||e.focusOffset!==u.offset)&&(t=t.createRange(),t.setStart(r.node,r.offset),e.removeAllRanges(),l>o?(e.addRange(t),e.extend(u.node,u.offset)):(t.setEnd(u.node,u.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n<t.length;n++)e=t[n],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var lf=m&&"documentMode"in document&&11>=document.documentMode,Uo=null,Xi=null,_a=null,Ki=!1;function dc(e,t,n){var o=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ki||Uo==null||Uo!==Tt(o)||(o=Uo,"selectionStart"in o&&qi(o)?o={start:o.selectionStart,end:o.selectionEnd}:(o=(o.ownerDocument&&o.ownerDocument.defaultView||window).getSelection(),o={anchorNode:o.anchorNode,anchorOffset:o.anchorOffset,focusNode:o.focusNode,focusOffset:o.focusOffset}),_a&&ja(_a,o)||(_a=o,o=br(Xi,"onSelect"),0<o.length&&(t=new Ni("onSelect","select",null,t,n),e.push({event:t,listeners:o}),t.target=Uo)))}function kr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Wo={animationend:kr("Animation","AnimationEnd"),animationiteration:kr("Animation","AnimationIteration"),animationstart:kr("Animation","AnimationStart"),transitionend:kr("Transition","TransitionEnd")},$i={},pc={};m&&(pc=document.createElement("div").style,"AnimationEvent"in window||(delete Wo.animationend.animation,delete Wo.animationiteration.animation,delete Wo.animationstart.animation),"TransitionEvent"in window||delete Wo.transitionend.transition);function Pr(e){if($i[e])return $i[e];if(!Wo[e])return e;var t=Wo[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in pc)return $i[e]=t[n];return e}var fc=Pr("animationend"),gc=Pr("animationiteration"),hc=Pr("animationstart"),mc=Pr("transitionend"),yc=new Map,vc="abort auxClick 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(" ");function Wn(e,t){yc.set(e,t),p(t,[e])}for(var Qi=0;Qi<vc.length;Qi++){var Gi=vc[Qi],sf=Gi.toLowerCase(),cf=Gi[0].toUpperCase()+Gi.slice(1);Wn(sf,"on"+cf)}Wn(fc,"onAnimationEnd"),Wn(gc,"onAnimationIteration"),Wn(hc,"onAnimationStart"),Wn("dblclick","onDoubleClick"),Wn("focusin","onFocus"),Wn("focusout","onBlur"),Wn(mc,"onTransitionEnd"),f("onMouseEnter",["mouseout","mouseover"]),f("onMouseLeave",["mouseout","mouseover"]),f("onPointerEnter",["pointerout","pointerover"]),f("onPointerLeave",["pointerout","pointerover"]),p("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),p("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),p("onBeforeInput",["compositionend","keypress","textInput","paste"]),p("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),p("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),p("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ea="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(" "),uf=new Set("cancel close invalid load scroll toggle".split(" ").concat(Ea));function Sc(e,t,n){var o=e.type||"unknown-event";e.currentTarget=n,$(o,t,void 0,e),e.currentTarget=null}function wc(e,t){t=(t&4)!==0;for(var n=0;n<e.length;n++){var o=e[n],r=o.event;o=o.listeners;e:{var l=void 0;if(t)for(var u=o.length-1;0<=u;u--){var g=o[u],v=g.instance,j=g.currentTarget;if(g=g.listener,v!==l&&r.isPropagationStopped())break e;Sc(r,g,j),l=v}else for(u=0;u<o.length;u++){if(g=o[u],v=g.instance,j=g.currentTarget,g=g.listener,v!==l&&r.isPropagationStopped())break e;Sc(r,g,j),l=v}}}if(ae)throw e=ce,ae=!1,ce=null,e}function Xe(e,t){var n=t[al];n===void 0&&(n=t[al]=new Set);var o=e+"__bubble";n.has(o)||(kc(t,e,2,!1),n.add(o))}function Yi(e,t,n){var o=0;t&&(o|=4),kc(n,e,o,t)}var Rr="_reactListening"+Math.random().toString(36).slice(2);function Ta(e){if(!e[Rr]){e[Rr]=!0,c.forEach(function(n){n!=="selectionchange"&&(uf.has(n)||Yi(n,!1,e),Yi(n,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Rr]||(t[Rr]=!0,Yi("selectionchange",!1,t))}}function kc(e,t,n,o){switch(Vs(t)){case 1:var r=Rp;break;case 4:r=bp;break;default:r=Oi}n=r.bind(null,t,n,e),r=void 0,!y||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(r=!0),o?r!==void 0?e.addEventListener(t,n,{capture:!0,passive:r}):e.addEventListener(t,n,!0):r!==void 0?e.addEventListener(t,n,{passive:r}):e.addEventListener(t,n,!1)}function Ji(e,t,n,o,r){var l=o;if((t&1)===0&&(t&2)===0&&o!==null)e:for(;;){if(o===null)return;var u=o.tag;if(u===3||u===4){var g=o.stateNode.containerInfo;if(g===r||g.nodeType===8&&g.parentNode===r)break;if(u===4)for(u=o.return;u!==null;){var v=u.tag;if((v===3||v===4)&&(v=u.stateNode.containerInfo,v===r||v.nodeType===8&&v.parentNode===r))return;u=u.return}for(;g!==null;){if(u=mo(g),u===null)return;if(v=u.tag,v===5||v===6){o=l=u;continue e}g=g.parentNode}}o=o.return}lr(function(){var j=l,z=On(n),N=[];e:{var O=yc.get(e);if(O!==void 0){var K=Ni,Z=e;switch(e){case"keypress":if(yr(n)===0)break e;case"keydown":case"keyup":K=Fp;break;case"focusin":Z="focus",K=Bi;break;case"focusout":Z="blur",K=Bi;break;case"beforeblur":case"afterblur":K=Bi;break;case"click":if(n.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":K=Ks;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":K=jp;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":K=Wp;break;case fc:case gc:case hc:K=Tp;break;case mc:K=Vp;break;case"scroll":K=xp;break;case"wheel":K=Xp;break;case"copy":case"cut":case"paste":K=Lp;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":K=Qs}var te=(t&4)!==0,nt=!te&&e==="scroll",R=te?O!==null?O+"Capture":null:O;te=[];for(var w=j,C;w!==null;){C=w;var U=C.stateNode;if(C.tag===5&&U!==null&&(C=U,R!==null&&(U=fo(w,R),U!=null&&te.push(Ma(w,U,C)))),nt)break;w=w.return}0<te.length&&(O=new K(O,Z,null,n,z),N.push({event:O,listeners:te}))}}if((t&7)===0){e:{if(O=e==="mouseover"||e==="pointerover",K=e==="mouseout"||e==="pointerout",O&&n!==zo&&(Z=n.relatedTarget||n.fromElement)&&(mo(Z)||Z[yn]))break e;if((K||O)&&(O=z.window===z?z:(O=z.ownerDocument)?O.defaultView||O.parentWindow:window,K?(Z=n.relatedTarget||n.toElement,K=j,Z=Z?mo(Z):null,Z!==null&&(nt=G(Z),Z!==nt||Z.tag!==5&&Z.tag!==6)&&(Z=null)):(K=null,Z=j),K!==Z)){if(te=Ks,U="onMouseLeave",R="onMouseEnter",w="mouse",(e==="pointerout"||e==="pointerover")&&(te=Qs,U="onPointerLeave",R="onPointerEnter",w="pointer"),nt=K==null?O:qo(K),C=Z==null?O:qo(Z),O=new te(U,w+"leave",K,n,z),O.target=nt,O.relatedTarget=C,U=null,mo(z)===j&&(te=new te(R,w+"enter",Z,n,z),te.target=C,te.relatedTarget=nt,U=te),nt=U,K&&Z)t:{for(te=K,R=Z,w=0,C=te;C;C=Ho(C))w++;for(C=0,U=R;U;U=Ho(U))C++;for(;0<w-C;)te=Ho(te),w--;for(;0<C-w;)R=Ho(R),C--;for(;w--;){if(te===R||R!==null&&te===R.alternate)break t;te=Ho(te),R=Ho(R)}te=null}else te=null;K!==null&&Pc(N,O,K,te,!1),Z!==null&&nt!==null&&Pc(N,nt,Z,te,!0)}}e:{if(O=j?qo(j):window,K=O.nodeName&&O.nodeName.toLowerCase(),K==="select"||K==="input"&&O.type==="file")var ne=Zp;else if(tc(O))if(oc)ne=of;else{ne=tf;var le=ef}else(K=O.nodeName)&&K.toLowerCase()==="input"&&(O.type==="checkbox"||O.type==="radio")&&(ne=nf);if(ne&&(ne=ne(e,j))){nc(N,ne,n,z);break e}le&&le(e,O,j),e==="focusout"&&(le=O._wrapperState)&&le.controlled&&O.type==="number"&&me(O,"number",O.value)}switch(le=j?qo(j):window,e){case"focusin":(tc(le)||le.contentEditable==="true")&&(Uo=le,Xi=j,_a=null);break;case"focusout":_a=Xi=Uo=null;break;case"mousedown":Ki=!0;break;case"contextmenu":case"mouseup":case"dragend":Ki=!1,dc(N,n,z);break;case"selectionchange":if(lf)break;case"keydown":case"keyup":dc(N,n,z)}var se;if(Wi)e:{switch(e){case"compositionstart":var fe="onCompositionStart";break e;case"compositionend":fe="onCompositionEnd";break e;case"compositionupdate":fe="onCompositionUpdate";break e}fe=void 0}else Bo?Zs(e,n)&&(fe="onCompositionEnd"):e==="keydown"&&n.keyCode===229&&(fe="onCompositionStart");fe&&(Gs&&n.locale!=="ko"&&(Bo||fe!=="onCompositionStart"?fe==="onCompositionEnd"&&Bo&&(se=qs()):(Un=z,Ai="value"in Un?Un.value:Un.textContent,Bo=!0)),le=br(j,fe),0<le.length&&(fe=new $s(fe,e,null,n,z),N.push({event:fe,listeners:le}),se?fe.data=se:(se=ec(n),se!==null&&(fe.data=se)))),(se=$p?Qp(e,n):Gp(e,n))&&(j=br(j,"onBeforeInput"),0<j.length&&(z=new $s("onBeforeInput","beforeinput",null,n,z),N.push({event:z,listeners:j}),z.data=se))}wc(N,t)})}function Ma(e,t,n){return{instance:e,listener:t,currentTarget:n}}function br(e,t){for(var n=t+"Capture",o=[];e!==null;){var r=e,l=r.stateNode;r.tag===5&&l!==null&&(r=l,l=fo(e,n),l!=null&&o.unshift(Ma(e,l,r)),l=fo(e,t),l!=null&&o.push(Ma(e,l,r))),e=e.return}return o}function Ho(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function Pc(e,t,n,o,r){for(var l=t._reactName,u=[];n!==null&&n!==o;){var g=n,v=g.alternate,j=g.stateNode;if(v!==null&&v===o)break;g.tag===5&&j!==null&&(g=j,r?(v=fo(n,l),v!=null&&u.unshift(Ma(n,v,g))):r||(v=fo(n,l),v!=null&&u.push(Ma(n,v,g)))),n=n.return}u.length!==0&&e.push({event:t,listeners:u})}var df=/\r\n?/g,pf=/\u0000|\uFFFD/g;function Rc(e){return(typeof e=="string"?e:""+e).replace(df,`
39
+ `).replace(pf,"")}function xr(e,t,n){if(t=Rc(t),Rc(e)!==t&&n)throw Error(s(425))}function Cr(){}var Zi=null,el=null;function tl(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var nl=typeof setTimeout=="function"?setTimeout:void 0,ff=typeof clearTimeout=="function"?clearTimeout:void 0,bc=typeof Promise=="function"?Promise:void 0,gf=typeof queueMicrotask=="function"?queueMicrotask:typeof bc<"u"?function(e){return bc.resolve(null).then(e).catch(hf)}:nl;function hf(e){setTimeout(function(){throw e})}function ol(e,t){var n=t,o=0;do{var r=n.nextSibling;if(e.removeChild(n),r&&r.nodeType===8)if(n=r.data,n==="/$"){if(o===0){e.removeChild(r),ka(t);return}o--}else n!=="$"&&n!=="$?"&&n!=="$!"||o++;n=r}while(n);ka(t)}function Hn(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==="$?")break;if(t==="/$")return null}}return e}function xc(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"){if(t===0)return e;t--}else n==="/$"&&t++}e=e.previousSibling}return null}var Vo=Math.random().toString(36).slice(2),sn="__reactFiber$"+Vo,La="__reactProps$"+Vo,yn="__reactContainer$"+Vo,al="__reactEvents$"+Vo,mf="__reactListeners$"+Vo,yf="__reactHandles$"+Vo;function mo(e){var t=e[sn];if(t)return t;for(var n=e.parentNode;n;){if(t=n[yn]||n[sn]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=xc(e);e!==null;){if(n=e[sn])return n;e=xc(e)}return t}e=n,n=e.parentNode}return null}function Da(e){return e=e[sn]||e[yn],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function qo(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(s(33))}function jr(e){return e[La]||null}var rl=[],Xo=-1;function Vn(e){return{current:e}}function Ke(e){0>Xo||(e.current=rl[Xo],rl[Xo]=null,Xo--)}function Ve(e,t){Xo++,rl[Xo]=e.current,e.current=t}var qn={},yt=Vn(qn),Rt=Vn(!1),yo=qn;function Ko(e,t){var n=e.type.contextTypes;if(!n)return qn;var o=e.stateNode;if(o&&o.__reactInternalMemoizedUnmaskedChildContext===t)return o.__reactInternalMemoizedMaskedChildContext;var r={},l;for(l in n)r[l]=t[l];return o&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=r),r}function bt(e){return e=e.childContextTypes,e!=null}function _r(){Ke(Rt),Ke(yt)}function Cc(e,t,n){if(yt.current!==qn)throw Error(s(168));Ve(yt,t),Ve(Rt,n)}function jc(e,t,n){var o=e.stateNode;if(t=t.childContextTypes,typeof o.getChildContext!="function")return n;o=o.getChildContext();for(var r in o)if(!(r in t))throw Error(s(108,we(e)||"Unknown",r));return q({},n,o)}function Er(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||qn,yo=yt.current,Ve(yt,e),Ve(Rt,Rt.current),!0}function _c(e,t,n){var o=e.stateNode;if(!o)throw Error(s(169));n?(e=jc(e,t,yo),o.__reactInternalMemoizedMergedChildContext=e,Ke(Rt),Ke(yt),Ve(yt,e)):Ke(Rt),Ve(Rt,n)}var vn=null,Tr=!1,il=!1;function Ec(e){vn===null?vn=[e]:vn.push(e)}function vf(e){Tr=!0,Ec(e)}function Xn(){if(!il&&vn!==null){il=!0;var e=0,t=Fe;try{var n=vn;for(Fe=1;e<n.length;e++){var o=n[e];do o=o(!0);while(o!==null)}vn=null,Tr=!1}catch(r){throw vn!==null&&(vn=vn.slice(e+1)),qe(hn,Xn),r}finally{Fe=t,il=!1}}return null}var $o=[],Qo=0,Mr=null,Lr=0,Ft=[],Bt=0,vo=null,Sn=1,wn="";function So(e,t){$o[Qo++]=Lr,$o[Qo++]=Mr,Mr=e,Lr=t}function Tc(e,t,n){Ft[Bt++]=Sn,Ft[Bt++]=wn,Ft[Bt++]=vo,vo=e;var o=Sn;e=wn;var r=32-De(o)-1;o&=~(1<<r),n+=1;var l=32-De(t)+r;if(30<l){var u=r-r%5;l=(o&(1<<u)-1).toString(32),o>>=u,r-=u,Sn=1<<32-De(t)+r|n<<r|o,wn=l+e}else Sn=1<<l|n<<r|o,wn=e}function ll(e){e.return!==null&&(So(e,1),Tc(e,1,0))}function sl(e){for(;e===Mr;)Mr=$o[--Qo],$o[Qo]=null,Lr=$o[--Qo],$o[Qo]=null;for(;e===vo;)vo=Ft[--Bt],Ft[Bt]=null,wn=Ft[--Bt],Ft[Bt]=null,Sn=Ft[--Bt],Ft[Bt]=null}var Ot=null,zt=null,$e=!1,$t=null;function Mc(e,t){var n=Vt(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function Lc(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,Ot=e,zt=Hn(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,Ot=e,zt=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=vo!==null?{id:Sn,overflow:wn}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=Vt(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,Ot=e,zt=null,!0):!1;default:return!1}}function cl(e){return(e.mode&1)!==0&&(e.flags&128)===0}function ul(e){if($e){var t=zt;if(t){var n=t;if(!Lc(e,t)){if(cl(e))throw Error(s(418));t=Hn(n.nextSibling);var o=Ot;t&&Lc(e,t)?Mc(o,n):(e.flags=e.flags&-4097|2,$e=!1,Ot=e)}}else{if(cl(e))throw Error(s(418));e.flags=e.flags&-4097|2,$e=!1,Ot=e}}}function Dc(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Ot=e}function Dr(e){if(e!==Ot)return!1;if(!$e)return Dc(e),$e=!0,!1;var t;if((t=e.tag!==3)&&!(t=e.tag!==5)&&(t=e.type,t=t!=="head"&&t!=="body"&&!tl(e.type,e.memoizedProps)),t&&(t=zt)){if(cl(e))throw Oc(),Error(s(418));for(;t;)Mc(e,t),t=Hn(t.nextSibling)}if(Dc(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(s(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){zt=Hn(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}zt=null}}else zt=Ot?Hn(e.stateNode.nextSibling):null;return!0}function Oc(){for(var e=zt;e;)e=Hn(e.nextSibling)}function Go(){zt=Ot=null,$e=!1}function dl(e){$t===null?$t=[e]:$t.push(e)}var Sf=re.ReactCurrentBatchConfig;function Oa(e,t,n){if(e=n.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(n._owner){if(n=n._owner,n){if(n.tag!==1)throw Error(s(309));var o=n.stateNode}if(!o)throw Error(s(147,e));var r=o,l=""+e;return t!==null&&t.ref!==null&&typeof t.ref=="function"&&t.ref._stringRef===l?t.ref:(t=function(u){var g=r.refs;u===null?delete g[l]:g[l]=u},t._stringRef=l,t)}if(typeof e!="string")throw Error(s(284));if(!n._owner)throw Error(s(290,e))}return e}function Or(e,t){throw e=Object.prototype.toString.call(t),Error(s(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function zc(e){var t=e._init;return t(e._payload)}function Ac(e){function t(R,w){if(e){var C=R.deletions;C===null?(R.deletions=[w],R.flags|=16):C.push(w)}}function n(R,w){if(!e)return null;for(;w!==null;)t(R,w),w=w.sibling;return null}function o(R,w){for(R=new Map;w!==null;)w.key!==null?R.set(w.key,w):R.set(w.index,w),w=w.sibling;return R}function r(R,w){return R=eo(R,w),R.index=0,R.sibling=null,R}function l(R,w,C){return R.index=C,e?(C=R.alternate,C!==null?(C=C.index,C<w?(R.flags|=2,w):C):(R.flags|=2,w)):(R.flags|=1048576,w)}function u(R){return e&&R.alternate===null&&(R.flags|=2),R}function g(R,w,C,U){return w===null||w.tag!==6?(w=ns(C,R.mode,U),w.return=R,w):(w=r(w,C),w.return=R,w)}function v(R,w,C,U){var ne=C.type;return ne===_?z(R,w,C.props.children,U,C.key):w!==null&&(w.elementType===ne||typeof ne=="object"&&ne!==null&&ne.$$typeof===tt&&zc(ne)===w.type)?(U=r(w,C.props),U.ref=Oa(R,w,C),U.return=R,U):(U=ai(C.type,C.key,C.props,null,R.mode,U),U.ref=Oa(R,w,C),U.return=R,U)}function j(R,w,C,U){return w===null||w.tag!==4||w.stateNode.containerInfo!==C.containerInfo||w.stateNode.implementation!==C.implementation?(w=os(C,R.mode,U),w.return=R,w):(w=r(w,C.children||[]),w.return=R,w)}function z(R,w,C,U,ne){return w===null||w.tag!==7?(w=jo(C,R.mode,U,ne),w.return=R,w):(w=r(w,C),w.return=R,w)}function N(R,w,C){if(typeof w=="string"&&w!==""||typeof w=="number")return w=ns(""+w,R.mode,C),w.return=R,w;if(typeof w=="object"&&w!==null){switch(w.$$typeof){case be:return C=ai(w.type,w.key,w.props,null,R.mode,C),C.ref=Oa(R,null,w),C.return=R,C;case _e:return w=os(w,R.mode,C),w.return=R,w;case tt:var U=w._init;return N(R,U(w._payload),C)}if(Ze(w)||oe(w))return w=jo(w,R.mode,C,null),w.return=R,w;Or(R,w)}return null}function O(R,w,C,U){var ne=w!==null?w.key:null;if(typeof C=="string"&&C!==""||typeof C=="number")return ne!==null?null:g(R,w,""+C,U);if(typeof C=="object"&&C!==null){switch(C.$$typeof){case be:return C.key===ne?v(R,w,C,U):null;case _e:return C.key===ne?j(R,w,C,U):null;case tt:return ne=C._init,O(R,w,ne(C._payload),U)}if(Ze(C)||oe(C))return ne!==null?null:z(R,w,C,U,null);Or(R,C)}return null}function K(R,w,C,U,ne){if(typeof U=="string"&&U!==""||typeof U=="number")return R=R.get(C)||null,g(w,R,""+U,ne);if(typeof U=="object"&&U!==null){switch(U.$$typeof){case be:return R=R.get(U.key===null?C:U.key)||null,v(w,R,U,ne);case _e:return R=R.get(U.key===null?C:U.key)||null,j(w,R,U,ne);case tt:var le=U._init;return K(R,w,C,le(U._payload),ne)}if(Ze(U)||oe(U))return R=R.get(C)||null,z(w,R,U,ne,null);Or(w,U)}return null}function Z(R,w,C,U){for(var ne=null,le=null,se=w,fe=w=0,pt=null;se!==null&&fe<C.length;fe++){se.index>fe?(pt=se,se=null):pt=se.sibling;var Oe=O(R,se,C[fe],U);if(Oe===null){se===null&&(se=pt);break}e&&se&&Oe.alternate===null&&t(R,se),w=l(Oe,w,fe),le===null?ne=Oe:le.sibling=Oe,le=Oe,se=pt}if(fe===C.length)return n(R,se),$e&&So(R,fe),ne;if(se===null){for(;fe<C.length;fe++)se=N(R,C[fe],U),se!==null&&(w=l(se,w,fe),le===null?ne=se:le.sibling=se,le=se);return $e&&So(R,fe),ne}for(se=o(R,se);fe<C.length;fe++)pt=K(se,R,fe,C[fe],U),pt!==null&&(e&&pt.alternate!==null&&se.delete(pt.key===null?fe:pt.key),w=l(pt,w,fe),le===null?ne=pt:le.sibling=pt,le=pt);return e&&se.forEach(function(to){return t(R,to)}),$e&&So(R,fe),ne}function te(R,w,C,U){var ne=oe(C);if(typeof ne!="function")throw Error(s(150));if(C=ne.call(C),C==null)throw Error(s(151));for(var le=ne=null,se=w,fe=w=0,pt=null,Oe=C.next();se!==null&&!Oe.done;fe++,Oe=C.next()){se.index>fe?(pt=se,se=null):pt=se.sibling;var to=O(R,se,Oe.value,U);if(to===null){se===null&&(se=pt);break}e&&se&&to.alternate===null&&t(R,se),w=l(to,w,fe),le===null?ne=to:le.sibling=to,le=to,se=pt}if(Oe.done)return n(R,se),$e&&So(R,fe),ne;if(se===null){for(;!Oe.done;fe++,Oe=C.next())Oe=N(R,Oe.value,U),Oe!==null&&(w=l(Oe,w,fe),le===null?ne=Oe:le.sibling=Oe,le=Oe);return $e&&So(R,fe),ne}for(se=o(R,se);!Oe.done;fe++,Oe=C.next())Oe=K(se,R,fe,Oe.value,U),Oe!==null&&(e&&Oe.alternate!==null&&se.delete(Oe.key===null?fe:Oe.key),w=l(Oe,w,fe),le===null?ne=Oe:le.sibling=Oe,le=Oe);return e&&se.forEach(function(Jf){return t(R,Jf)}),$e&&So(R,fe),ne}function nt(R,w,C,U){if(typeof C=="object"&&C!==null&&C.type===_&&C.key===null&&(C=C.props.children),typeof C=="object"&&C!==null){switch(C.$$typeof){case be:e:{for(var ne=C.key,le=w;le!==null;){if(le.key===ne){if(ne=C.type,ne===_){if(le.tag===7){n(R,le.sibling),w=r(le,C.props.children),w.return=R,R=w;break e}}else if(le.elementType===ne||typeof ne=="object"&&ne!==null&&ne.$$typeof===tt&&zc(ne)===le.type){n(R,le.sibling),w=r(le,C.props),w.ref=Oa(R,le,C),w.return=R,R=w;break e}n(R,le);break}else t(R,le);le=le.sibling}C.type===_?(w=jo(C.props.children,R.mode,U,C.key),w.return=R,R=w):(U=ai(C.type,C.key,C.props,null,R.mode,U),U.ref=Oa(R,w,C),U.return=R,R=U)}return u(R);case _e:e:{for(le=C.key;w!==null;){if(w.key===le)if(w.tag===4&&w.stateNode.containerInfo===C.containerInfo&&w.stateNode.implementation===C.implementation){n(R,w.sibling),w=r(w,C.children||[]),w.return=R,R=w;break e}else{n(R,w);break}else t(R,w);w=w.sibling}w=os(C,R.mode,U),w.return=R,R=w}return u(R);case tt:return le=C._init,nt(R,w,le(C._payload),U)}if(Ze(C))return Z(R,w,C,U);if(oe(C))return te(R,w,C,U);Or(R,C)}return typeof C=="string"&&C!==""||typeof C=="number"?(C=""+C,w!==null&&w.tag===6?(n(R,w.sibling),w=r(w,C),w.return=R,R=w):(n(R,w),w=ns(C,R.mode,U),w.return=R,R=w),u(R)):n(R,w)}return nt}var Yo=Ac(!0),Nc=Ac(!1),zr=Vn(null),Ar=null,Jo=null,pl=null;function fl(){pl=Jo=Ar=null}function gl(e){var t=zr.current;Ke(zr),e._currentValue=t}function hl(e,t,n){for(;e!==null;){var o=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,o!==null&&(o.childLanes|=t)):o!==null&&(o.childLanes&t)!==t&&(o.childLanes|=t),e===n)break;e=e.return}}function Zo(e,t){Ar=e,pl=Jo=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(xt=!0),e.firstContext=null)}function Ut(e){var t=e._currentValue;if(pl!==e)if(e={context:e,memoizedValue:t,next:null},Jo===null){if(Ar===null)throw Error(s(308));Jo=e,Ar.dependencies={lanes:0,firstContext:e}}else Jo=Jo.next=e;return t}var wo=null;function ml(e){wo===null?wo=[e]:wo.push(e)}function Ic(e,t,n,o){var r=t.interleaved;return r===null?(n.next=n,ml(t)):(n.next=r.next,r.next=n),t.interleaved=n,kn(e,o)}function kn(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Kn=!1;function yl(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Fc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Pn(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function $n(e,t,n){var o=e.updateQueue;if(o===null)return null;if(o=o.shared,(Me&2)!==0){var r=o.pending;return r===null?t.next=t:(t.next=r.next,r.next=t),o.pending=t,kn(e,n)}return r=o.interleaved,r===null?(t.next=t,ml(o)):(t.next=r.next,r.next=t),o.interleaved=t,kn(e,n)}function Nr(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var o=t.lanes;o&=e.pendingLanes,n|=o,t.lanes=n,Mi(e,n)}}function Bc(e,t){var n=e.updateQueue,o=e.alternate;if(o!==null&&(o=o.updateQueue,n===o)){var r=null,l=null;if(n=n.firstBaseUpdate,n!==null){do{var u={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};l===null?r=l=u:l=l.next=u,n=n.next}while(n!==null);l===null?r=l=t:l=l.next=t}else r=l=t;n={baseState:o.baseState,firstBaseUpdate:r,lastBaseUpdate:l,shared:o.shared,effects:o.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Ir(e,t,n,o){var r=e.updateQueue;Kn=!1;var l=r.firstBaseUpdate,u=r.lastBaseUpdate,g=r.shared.pending;if(g!==null){r.shared.pending=null;var v=g,j=v.next;v.next=null,u===null?l=j:u.next=j,u=v;var z=e.alternate;z!==null&&(z=z.updateQueue,g=z.lastBaseUpdate,g!==u&&(g===null?z.firstBaseUpdate=j:g.next=j,z.lastBaseUpdate=v))}if(l!==null){var N=r.baseState;u=0,z=j=v=null,g=l;do{var O=g.lane,K=g.eventTime;if((o&O)===O){z!==null&&(z=z.next={eventTime:K,lane:0,tag:g.tag,payload:g.payload,callback:g.callback,next:null});e:{var Z=e,te=g;switch(O=t,K=n,te.tag){case 1:if(Z=te.payload,typeof Z=="function"){N=Z.call(K,N,O);break e}N=Z;break e;case 3:Z.flags=Z.flags&-65537|128;case 0:if(Z=te.payload,O=typeof Z=="function"?Z.call(K,N,O):Z,O==null)break e;N=q({},N,O);break e;case 2:Kn=!0}}g.callback!==null&&g.lane!==0&&(e.flags|=64,O=r.effects,O===null?r.effects=[g]:O.push(g))}else K={eventTime:K,lane:O,tag:g.tag,payload:g.payload,callback:g.callback,next:null},z===null?(j=z=K,v=N):z=z.next=K,u|=O;if(g=g.next,g===null){if(g=r.shared.pending,g===null)break;O=g,g=O.next,O.next=null,r.lastBaseUpdate=O,r.shared.pending=null}}while(!0);if(z===null&&(v=N),r.baseState=v,r.firstBaseUpdate=j,r.lastBaseUpdate=z,t=r.shared.interleaved,t!==null){r=t;do u|=r.lane,r=r.next;while(r!==t)}else l===null&&(r.shared.lanes=0);Ro|=u,e.lanes=u,e.memoizedState=N}}function Uc(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;t<e.length;t++){var o=e[t],r=o.callback;if(r!==null){if(o.callback=null,o=n,typeof r!="function")throw Error(s(191,r));r.call(o)}}}var za={},cn=Vn(za),Aa=Vn(za),Na=Vn(za);function ko(e){if(e===za)throw Error(s(174));return e}function vl(e,t){switch(Ve(Na,t),Ve(Aa,e),Ve(cn,za),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:uo(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=uo(t,e)}Ke(cn),Ve(cn,t)}function ea(){Ke(cn),Ke(Aa),Ke(Na)}function Wc(e){ko(Na.current);var t=ko(cn.current),n=uo(t,e.type);t!==n&&(Ve(Aa,e),Ve(cn,n))}function Sl(e){Aa.current===e&&(Ke(cn),Ke(Aa))}var Ye=Vn(0);function Fr(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){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 wl=[];function kl(){for(var e=0;e<wl.length;e++)wl[e]._workInProgressVersionPrimary=null;wl.length=0}var Br=re.ReactCurrentDispatcher,Pl=re.ReactCurrentBatchConfig,Po=0,Je=null,st=null,ut=null,Ur=!1,Ia=!1,Fa=0,wf=0;function vt(){throw Error(s(321))}function Rl(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Kt(e[n],t[n]))return!1;return!0}function bl(e,t,n,o,r,l){if(Po=l,Je=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Br.current=e===null||e.memoizedState===null?bf:xf,e=n(o,r),Ia){l=0;do{if(Ia=!1,Fa=0,25<=l)throw Error(s(301));l+=1,ut=st=null,t.updateQueue=null,Br.current=Cf,e=n(o,r)}while(Ia)}if(Br.current=Vr,t=st!==null&&st.next!==null,Po=0,ut=st=Je=null,Ur=!1,t)throw Error(s(300));return e}function xl(){var e=Fa!==0;return Fa=0,e}function un(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return ut===null?Je.memoizedState=ut=e:ut=ut.next=e,ut}function Wt(){if(st===null){var e=Je.alternate;e=e!==null?e.memoizedState:null}else e=st.next;var t=ut===null?Je.memoizedState:ut.next;if(t!==null)ut=t,st=e;else{if(e===null)throw Error(s(310));st=e,e={memoizedState:st.memoizedState,baseState:st.baseState,baseQueue:st.baseQueue,queue:st.queue,next:null},ut===null?Je.memoizedState=ut=e:ut=ut.next=e}return ut}function Ba(e,t){return typeof t=="function"?t(e):t}function Cl(e){var t=Wt(),n=t.queue;if(n===null)throw Error(s(311));n.lastRenderedReducer=e;var o=st,r=o.baseQueue,l=n.pending;if(l!==null){if(r!==null){var u=r.next;r.next=l.next,l.next=u}o.baseQueue=r=l,n.pending=null}if(r!==null){l=r.next,o=o.baseState;var g=u=null,v=null,j=l;do{var z=j.lane;if((Po&z)===z)v!==null&&(v=v.next={lane:0,action:j.action,hasEagerState:j.hasEagerState,eagerState:j.eagerState,next:null}),o=j.hasEagerState?j.eagerState:e(o,j.action);else{var N={lane:z,action:j.action,hasEagerState:j.hasEagerState,eagerState:j.eagerState,next:null};v===null?(g=v=N,u=o):v=v.next=N,Je.lanes|=z,Ro|=z}j=j.next}while(j!==null&&j!==l);v===null?u=o:v.next=g,Kt(o,t.memoizedState)||(xt=!0),t.memoizedState=o,t.baseState=u,t.baseQueue=v,n.lastRenderedState=o}if(e=n.interleaved,e!==null){r=e;do l=r.lane,Je.lanes|=l,Ro|=l,r=r.next;while(r!==e)}else r===null&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function jl(e){var t=Wt(),n=t.queue;if(n===null)throw Error(s(311));n.lastRenderedReducer=e;var o=n.dispatch,r=n.pending,l=t.memoizedState;if(r!==null){n.pending=null;var u=r=r.next;do l=e(l,u.action),u=u.next;while(u!==r);Kt(l,t.memoizedState)||(xt=!0),t.memoizedState=l,t.baseQueue===null&&(t.baseState=l),n.lastRenderedState=l}return[l,o]}function Hc(){}function Vc(e,t){var n=Je,o=Wt(),r=t(),l=!Kt(o.memoizedState,r);if(l&&(o.memoizedState=r,xt=!0),o=o.queue,_l(Kc.bind(null,n,o,e),[e]),o.getSnapshot!==t||l||ut!==null&&ut.memoizedState.tag&1){if(n.flags|=2048,Ua(9,Xc.bind(null,n,o,r,t),void 0,null),dt===null)throw Error(s(349));(Po&30)!==0||qc(n,t,r)}return r}function qc(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=Je.updateQueue,t===null?(t={lastEffect:null,stores:null},Je.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function Xc(e,t,n,o){t.value=n,t.getSnapshot=o,$c(t)&&Qc(e)}function Kc(e,t,n){return n(function(){$c(t)&&Qc(e)})}function $c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Kt(e,n)}catch{return!0}}function Qc(e){var t=kn(e,1);t!==null&&Jt(t,e,1,-1)}function Gc(e){var t=un();return typeof e=="function"&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ba,lastRenderedState:e},t.queue=e,e=e.dispatch=Rf.bind(null,Je,e),[t.memoizedState,e]}function Ua(e,t,n,o){return e={tag:e,create:t,destroy:n,deps:o,next:null},t=Je.updateQueue,t===null?(t={lastEffect:null,stores:null},Je.updateQueue=t,t.lastEffect=e.next=e):(n=t.lastEffect,n===null?t.lastEffect=e.next=e:(o=n.next,n.next=e,e.next=o,t.lastEffect=e)),e}function Yc(){return Wt().memoizedState}function Wr(e,t,n,o){var r=un();Je.flags|=e,r.memoizedState=Ua(1|t,n,void 0,o===void 0?null:o)}function Hr(e,t,n,o){var r=Wt();o=o===void 0?null:o;var l=void 0;if(st!==null){var u=st.memoizedState;if(l=u.destroy,o!==null&&Rl(o,u.deps)){r.memoizedState=Ua(t,n,l,o);return}}Je.flags|=e,r.memoizedState=Ua(1|t,n,l,o)}function Jc(e,t){return Wr(8390656,8,e,t)}function _l(e,t){return Hr(2048,8,e,t)}function Zc(e,t){return Hr(4,2,e,t)}function eu(e,t){return Hr(4,4,e,t)}function tu(e,t){if(typeof t=="function")return e=e(),t(e),function(){t(null)};if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function nu(e,t,n){return n=n!=null?n.concat([e]):null,Hr(4,4,tu.bind(null,t,e),n)}function El(){}function ou(e,t){var n=Wt();t=t===void 0?null:t;var o=n.memoizedState;return o!==null&&t!==null&&Rl(t,o[1])?o[0]:(n.memoizedState=[e,t],e)}function au(e,t){var n=Wt();t=t===void 0?null:t;var o=n.memoizedState;return o!==null&&t!==null&&Rl(t,o[1])?o[0]:(e=e(),n.memoizedState=[e,t],e)}function ru(e,t,n){return(Po&21)===0?(e.baseState&&(e.baseState=!1,xt=!0),e.memoizedState=n):(Kt(n,t)||(n=zs(),Je.lanes|=n,Ro|=n,e.baseState=!0),t)}function kf(e,t){var n=Fe;Fe=n!==0&&4>n?n:4,e(!0);var o=Pl.transition;Pl.transition={};try{e(!1),t()}finally{Fe=n,Pl.transition=o}}function iu(){return Wt().memoizedState}function Pf(e,t,n){var o=Jn(e);if(n={lane:o,action:n,hasEagerState:!1,eagerState:null,next:null},lu(e))su(t,n);else if(n=Ic(e,t,n,o),n!==null){var r=Pt();Jt(n,e,o,r),cu(n,t,o)}}function Rf(e,t,n){var o=Jn(e),r={lane:o,action:n,hasEagerState:!1,eagerState:null,next:null};if(lu(e))su(t,r);else{var l=e.alternate;if(e.lanes===0&&(l===null||l.lanes===0)&&(l=t.lastRenderedReducer,l!==null))try{var u=t.lastRenderedState,g=l(u,n);if(r.hasEagerState=!0,r.eagerState=g,Kt(g,u)){var v=t.interleaved;v===null?(r.next=r,ml(t)):(r.next=v.next,v.next=r),t.interleaved=r;return}}catch{}finally{}n=Ic(e,t,r,o),n!==null&&(r=Pt(),Jt(n,e,o,r),cu(n,t,o))}}function lu(e){var t=e.alternate;return e===Je||t!==null&&t===Je}function su(e,t){Ia=Ur=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function cu(e,t,n){if((n&4194240)!==0){var o=t.lanes;o&=e.pendingLanes,n|=o,t.lanes=n,Mi(e,n)}}var Vr={readContext:Ut,useCallback:vt,useContext:vt,useEffect:vt,useImperativeHandle:vt,useInsertionEffect:vt,useLayoutEffect:vt,useMemo:vt,useReducer:vt,useRef:vt,useState:vt,useDebugValue:vt,useDeferredValue:vt,useTransition:vt,useMutableSource:vt,useSyncExternalStore:vt,useId:vt,unstable_isNewReconciler:!1},bf={readContext:Ut,useCallback:function(e,t){return un().memoizedState=[e,t===void 0?null:t],e},useContext:Ut,useEffect:Jc,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Wr(4194308,4,tu.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Wr(4194308,4,e,t)},useInsertionEffect:function(e,t){return Wr(4,2,e,t)},useMemo:function(e,t){var n=un();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var o=un();return t=n!==void 0?n(t):t,o.memoizedState=o.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},o.queue=e,e=e.dispatch=Pf.bind(null,Je,e),[o.memoizedState,e]},useRef:function(e){var t=un();return e={current:e},t.memoizedState=e},useState:Gc,useDebugValue:El,useDeferredValue:function(e){return un().memoizedState=e},useTransition:function(){var e=Gc(!1),t=e[0];return e=kf.bind(null,e[1]),un().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var o=Je,r=un();if($e){if(n===void 0)throw Error(s(407));n=n()}else{if(n=t(),dt===null)throw Error(s(349));(Po&30)!==0||qc(o,t,n)}r.memoizedState=n;var l={value:n,getSnapshot:t};return r.queue=l,Jc(Kc.bind(null,o,l,e),[e]),o.flags|=2048,Ua(9,Xc.bind(null,o,l,n,t),void 0,null),n},useId:function(){var e=un(),t=dt.identifierPrefix;if($e){var n=wn,o=Sn;n=(o&~(1<<32-De(o)-1)).toString(32)+n,t=":"+t+"R"+n,n=Fa++,0<n&&(t+="H"+n.toString(32)),t+=":"}else n=wf++,t=":"+t+"r"+n.toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},xf={readContext:Ut,useCallback:ou,useContext:Ut,useEffect:_l,useImperativeHandle:nu,useInsertionEffect:Zc,useLayoutEffect:eu,useMemo:au,useReducer:Cl,useRef:Yc,useState:function(){return Cl(Ba)},useDebugValue:El,useDeferredValue:function(e){var t=Wt();return ru(t,st.memoizedState,e)},useTransition:function(){var e=Cl(Ba)[0],t=Wt().memoizedState;return[e,t]},useMutableSource:Hc,useSyncExternalStore:Vc,useId:iu,unstable_isNewReconciler:!1},Cf={readContext:Ut,useCallback:ou,useContext:Ut,useEffect:_l,useImperativeHandle:nu,useInsertionEffect:Zc,useLayoutEffect:eu,useMemo:au,useReducer:jl,useRef:Yc,useState:function(){return jl(Ba)},useDebugValue:El,useDeferredValue:function(e){var t=Wt();return st===null?t.memoizedState=e:ru(t,st.memoizedState,e)},useTransition:function(){var e=jl(Ba)[0],t=Wt().memoizedState;return[e,t]},useMutableSource:Hc,useSyncExternalStore:Vc,useId:iu,unstable_isNewReconciler:!1};function Qt(e,t){if(e&&e.defaultProps){t=q({},t),e=e.defaultProps;for(var n in e)t[n]===void 0&&(t[n]=e[n]);return t}return t}function Tl(e,t,n,o){t=e.memoizedState,n=n(o,t),n=n==null?t:q({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var qr={isMounted:function(e){return(e=e._reactInternals)?G(e)===e:!1},enqueueSetState:function(e,t,n){e=e._reactInternals;var o=Pt(),r=Jn(e),l=Pn(o,r);l.payload=t,n!=null&&(l.callback=n),t=$n(e,l,r),t!==null&&(Jt(t,e,r,o),Nr(t,e,r))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var o=Pt(),r=Jn(e),l=Pn(o,r);l.tag=1,l.payload=t,n!=null&&(l.callback=n),t=$n(e,l,r),t!==null&&(Jt(t,e,r,o),Nr(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Pt(),o=Jn(e),r=Pn(n,o);r.tag=2,t!=null&&(r.callback=t),t=$n(e,r,o),t!==null&&(Jt(t,e,o,n),Nr(t,e,o))}};function uu(e,t,n,o,r,l,u){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(o,l,u):t.prototype&&t.prototype.isPureReactComponent?!ja(n,o)||!ja(r,l):!0}function du(e,t,n){var o=!1,r=qn,l=t.contextType;return typeof l=="object"&&l!==null?l=Ut(l):(r=bt(t)?yo:yt.current,o=t.contextTypes,l=(o=o!=null)?Ko(e,r):qn),t=new t(n,l),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=qr,e.stateNode=t,t._reactInternals=e,o&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=r,e.__reactInternalMemoizedMaskedChildContext=l),t}function pu(e,t,n,o){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(n,o),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(n,o),t.state!==e&&qr.enqueueReplaceState(t,t.state,null)}function Ml(e,t,n,o){var r=e.stateNode;r.props=n,r.state=e.memoizedState,r.refs={},yl(e);var l=t.contextType;typeof l=="object"&&l!==null?r.context=Ut(l):(l=bt(t)?yo:yt.current,r.context=Ko(e,l)),r.state=e.memoizedState,l=t.getDerivedStateFromProps,typeof l=="function"&&(Tl(e,t,l,n),r.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof r.getSnapshotBeforeUpdate=="function"||typeof r.UNSAFE_componentWillMount!="function"&&typeof r.componentWillMount!="function"||(t=r.state,typeof r.componentWillMount=="function"&&r.componentWillMount(),typeof r.UNSAFE_componentWillMount=="function"&&r.UNSAFE_componentWillMount(),t!==r.state&&qr.enqueueReplaceState(r,r.state,null),Ir(e,n,r,o),r.state=e.memoizedState),typeof r.componentDidMount=="function"&&(e.flags|=4194308)}function ta(e,t){try{var n="",o=t;do n+=he(o),o=o.return;while(o);var r=n}catch(l){r=`
40
+ Error generating stack: `+l.message+`
41
+ `+l.stack}return{value:e,source:t,stack:r,digest:null}}function Ll(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Dl(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var jf=typeof WeakMap=="function"?WeakMap:Map;function fu(e,t,n){n=Pn(-1,n),n.tag=3,n.payload={element:null};var o=t.value;return n.callback=function(){Jr||(Jr=!0,$l=o),Dl(e,t)},n}function gu(e,t,n){n=Pn(-1,n),n.tag=3;var o=e.type.getDerivedStateFromError;if(typeof o=="function"){var r=t.value;n.payload=function(){return o(r)},n.callback=function(){Dl(e,t)}}var l=e.stateNode;return l!==null&&typeof l.componentDidCatch=="function"&&(n.callback=function(){Dl(e,t),typeof o!="function"&&(Gn===null?Gn=new Set([this]):Gn.add(this));var u=t.stack;this.componentDidCatch(t.value,{componentStack:u!==null?u:""})}),n}function hu(e,t,n){var o=e.pingCache;if(o===null){o=e.pingCache=new jf;var r=new Set;o.set(t,r)}else r=o.get(t),r===void 0&&(r=new Set,o.set(t,r));r.has(n)||(r.add(n),e=Uf.bind(null,e,t,n),t.then(e,e))}function mu(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function yu(e,t,n,o,r){return(e.mode&1)===0?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=Pn(-1,1),t.tag=2,$n(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=r,e)}var _f=re.ReactCurrentOwner,xt=!1;function kt(e,t,n,o){t.child=e===null?Nc(t,null,n,o):Yo(t,e.child,n,o)}function vu(e,t,n,o,r){n=n.render;var l=t.ref;return Zo(t,r),o=bl(e,t,n,o,l,r),n=xl(),e!==null&&!xt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~r,Rn(e,t,r)):($e&&n&&ll(t),t.flags|=1,kt(e,t,o,r),t.child)}function Su(e,t,n,o,r){if(e===null){var l=n.type;return typeof l=="function"&&!ts(l)&&l.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=l,wu(e,t,l,o,r)):(e=ai(n.type,null,o,t,t.mode,r),e.ref=t.ref,e.return=t,t.child=e)}if(l=e.child,(e.lanes&r)===0){var u=l.memoizedProps;if(n=n.compare,n=n!==null?n:ja,n(u,o)&&e.ref===t.ref)return Rn(e,t,r)}return t.flags|=1,e=eo(l,o),e.ref=t.ref,e.return=t,t.child=e}function wu(e,t,n,o,r){if(e!==null){var l=e.memoizedProps;if(ja(l,o)&&e.ref===t.ref)if(xt=!1,t.pendingProps=o=l,(e.lanes&r)!==0)(e.flags&131072)!==0&&(xt=!0);else return t.lanes=e.lanes,Rn(e,t,r)}return Ol(e,t,n,o,r)}function ku(e,t,n){var o=t.pendingProps,r=o.children,l=e!==null?e.memoizedState:null;if(o.mode==="hidden")if((t.mode&1)===0)t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ve(oa,At),At|=n;else{if((n&1073741824)===0)return e=l!==null?l.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ve(oa,At),At|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},o=l!==null?l.baseLanes:n,Ve(oa,At),At|=o}else l!==null?(o=l.baseLanes|n,t.memoizedState=null):o=n,Ve(oa,At),At|=o;return kt(e,t,r,n),t.child}function Pu(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ol(e,t,n,o,r){var l=bt(n)?yo:yt.current;return l=Ko(t,l),Zo(t,r),n=bl(e,t,n,o,l,r),o=xl(),e!==null&&!xt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~r,Rn(e,t,r)):($e&&o&&ll(t),t.flags|=1,kt(e,t,n,r),t.child)}function Ru(e,t,n,o,r){if(bt(n)){var l=!0;Er(t)}else l=!1;if(Zo(t,r),t.stateNode===null)Kr(e,t),du(t,n,o),Ml(t,n,o,r),o=!0;else if(e===null){var u=t.stateNode,g=t.memoizedProps;u.props=g;var v=u.context,j=n.contextType;typeof j=="object"&&j!==null?j=Ut(j):(j=bt(n)?yo:yt.current,j=Ko(t,j));var z=n.getDerivedStateFromProps,N=typeof z=="function"||typeof u.getSnapshotBeforeUpdate=="function";N||typeof u.UNSAFE_componentWillReceiveProps!="function"&&typeof u.componentWillReceiveProps!="function"||(g!==o||v!==j)&&pu(t,u,o,j),Kn=!1;var O=t.memoizedState;u.state=O,Ir(t,o,u,r),v=t.memoizedState,g!==o||O!==v||Rt.current||Kn?(typeof z=="function"&&(Tl(t,n,z,o),v=t.memoizedState),(g=Kn||uu(t,n,g,o,O,v,j))?(N||typeof u.UNSAFE_componentWillMount!="function"&&typeof u.componentWillMount!="function"||(typeof u.componentWillMount=="function"&&u.componentWillMount(),typeof u.UNSAFE_componentWillMount=="function"&&u.UNSAFE_componentWillMount()),typeof u.componentDidMount=="function"&&(t.flags|=4194308)):(typeof u.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=o,t.memoizedState=v),u.props=o,u.state=v,u.context=j,o=g):(typeof u.componentDidMount=="function"&&(t.flags|=4194308),o=!1)}else{u=t.stateNode,Fc(e,t),g=t.memoizedProps,j=t.type===t.elementType?g:Qt(t.type,g),u.props=j,N=t.pendingProps,O=u.context,v=n.contextType,typeof v=="object"&&v!==null?v=Ut(v):(v=bt(n)?yo:yt.current,v=Ko(t,v));var K=n.getDerivedStateFromProps;(z=typeof K=="function"||typeof u.getSnapshotBeforeUpdate=="function")||typeof u.UNSAFE_componentWillReceiveProps!="function"&&typeof u.componentWillReceiveProps!="function"||(g!==N||O!==v)&&pu(t,u,o,v),Kn=!1,O=t.memoizedState,u.state=O,Ir(t,o,u,r);var Z=t.memoizedState;g!==N||O!==Z||Rt.current||Kn?(typeof K=="function"&&(Tl(t,n,K,o),Z=t.memoizedState),(j=Kn||uu(t,n,j,o,O,Z,v)||!1)?(z||typeof u.UNSAFE_componentWillUpdate!="function"&&typeof u.componentWillUpdate!="function"||(typeof u.componentWillUpdate=="function"&&u.componentWillUpdate(o,Z,v),typeof u.UNSAFE_componentWillUpdate=="function"&&u.UNSAFE_componentWillUpdate(o,Z,v)),typeof u.componentDidUpdate=="function"&&(t.flags|=4),typeof u.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof u.componentDidUpdate!="function"||g===e.memoizedProps&&O===e.memoizedState||(t.flags|=4),typeof u.getSnapshotBeforeUpdate!="function"||g===e.memoizedProps&&O===e.memoizedState||(t.flags|=1024),t.memoizedProps=o,t.memoizedState=Z),u.props=o,u.state=Z,u.context=v,o=j):(typeof u.componentDidUpdate!="function"||g===e.memoizedProps&&O===e.memoizedState||(t.flags|=4),typeof u.getSnapshotBeforeUpdate!="function"||g===e.memoizedProps&&O===e.memoizedState||(t.flags|=1024),o=!1)}return zl(e,t,n,o,l,r)}function zl(e,t,n,o,r,l){Pu(e,t);var u=(t.flags&128)!==0;if(!o&&!u)return r&&_c(t,n,!1),Rn(e,t,l);o=t.stateNode,_f.current=t;var g=u&&typeof n.getDerivedStateFromError!="function"?null:o.render();return t.flags|=1,e!==null&&u?(t.child=Yo(t,e.child,null,l),t.child=Yo(t,null,g,l)):kt(e,t,g,l),t.memoizedState=o.state,r&&_c(t,n,!0),t.child}function bu(e){var t=e.stateNode;t.pendingContext?Cc(e,t.pendingContext,t.pendingContext!==t.context):t.context&&Cc(e,t.context,!1),vl(e,t.containerInfo)}function xu(e,t,n,o,r){return Go(),dl(r),t.flags|=256,kt(e,t,n,o),t.child}var Al={dehydrated:null,treeContext:null,retryLane:0};function Nl(e){return{baseLanes:e,cachePool:null,transitions:null}}function Cu(e,t,n){var o=t.pendingProps,r=Ye.current,l=!1,u=(t.flags&128)!==0,g;if((g=u)||(g=e!==null&&e.memoizedState===null?!1:(r&2)!==0),g?(l=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(r|=1),Ve(Ye,r&1),e===null)return ul(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?((t.mode&1)===0?t.lanes=1:e.data==="$!"?t.lanes=8:t.lanes=1073741824,null):(u=o.children,e=o.fallback,l?(o=t.mode,l=t.child,u={mode:"hidden",children:u},(o&1)===0&&l!==null?(l.childLanes=0,l.pendingProps=u):l=ri(u,o,0,null),e=jo(e,o,n,null),l.return=t,e.return=t,l.sibling=e,t.child=l,t.child.memoizedState=Nl(n),t.memoizedState=Al,e):Il(t,u));if(r=e.memoizedState,r!==null&&(g=r.dehydrated,g!==null))return Ef(e,t,u,o,g,r,n);if(l){l=o.fallback,u=t.mode,r=e.child,g=r.sibling;var v={mode:"hidden",children:o.children};return(u&1)===0&&t.child!==r?(o=t.child,o.childLanes=0,o.pendingProps=v,t.deletions=null):(o=eo(r,v),o.subtreeFlags=r.subtreeFlags&14680064),g!==null?l=eo(g,l):(l=jo(l,u,n,null),l.flags|=2),l.return=t,o.return=t,o.sibling=l,t.child=o,o=l,l=t.child,u=e.child.memoizedState,u=u===null?Nl(n):{baseLanes:u.baseLanes|n,cachePool:null,transitions:u.transitions},l.memoizedState=u,l.childLanes=e.childLanes&~n,t.memoizedState=Al,o}return l=e.child,e=l.sibling,o=eo(l,{mode:"visible",children:o.children}),(t.mode&1)===0&&(o.lanes=n),o.return=t,o.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Il(e,t){return t=ri({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function Xr(e,t,n,o){return o!==null&&dl(o),Yo(t,e.child,null,n),e=Il(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Ef(e,t,n,o,r,l,u){if(n)return t.flags&256?(t.flags&=-257,o=Ll(Error(s(422))),Xr(e,t,u,o)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(l=o.fallback,r=t.mode,o=ri({mode:"visible",children:o.children},r,0,null),l=jo(l,r,u,null),l.flags|=2,o.return=t,l.return=t,o.sibling=l,t.child=o,(t.mode&1)!==0&&Yo(t,e.child,null,u),t.child.memoizedState=Nl(u),t.memoizedState=Al,l);if((t.mode&1)===0)return Xr(e,t,u,null);if(r.data==="$!"){if(o=r.nextSibling&&r.nextSibling.dataset,o)var g=o.dgst;return o=g,l=Error(s(419)),o=Ll(l,o,void 0),Xr(e,t,u,o)}if(g=(u&e.childLanes)!==0,xt||g){if(o=dt,o!==null){switch(u&-u){case 4:r=2;break;case 16:r=8;break;case 64: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:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:r=32;break;case 536870912:r=268435456;break;default:r=0}r=(r&(o.suspendedLanes|u))!==0?0:r,r!==0&&r!==l.retryLane&&(l.retryLane=r,kn(e,r),Jt(o,e,r,-1))}return es(),o=Ll(Error(s(421))),Xr(e,t,u,o)}return r.data==="$?"?(t.flags|=128,t.child=e.child,t=Wf.bind(null,e),r._reactRetry=t,null):(e=l.treeContext,zt=Hn(r.nextSibling),Ot=t,$e=!0,$t=null,e!==null&&(Ft[Bt++]=Sn,Ft[Bt++]=wn,Ft[Bt++]=vo,Sn=e.id,wn=e.overflow,vo=t),t=Il(t,o.children),t.flags|=4096,t)}function ju(e,t,n){e.lanes|=t;var o=e.alternate;o!==null&&(o.lanes|=t),hl(e.return,t,n)}function Fl(e,t,n,o,r){var l=e.memoizedState;l===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:o,tail:n,tailMode:r}:(l.isBackwards=t,l.rendering=null,l.renderingStartTime=0,l.last=o,l.tail=n,l.tailMode=r)}function _u(e,t,n){var o=t.pendingProps,r=o.revealOrder,l=o.tail;if(kt(e,t,o.children,n),o=Ye.current,(o&2)!==0)o=o&1|2,t.flags|=128;else{if(e!==null&&(e.flags&128)!==0)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&ju(e,n,t);else if(e.tag===19)ju(e,n,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}o&=1}if(Ve(Ye,o),(t.mode&1)===0)t.memoizedState=null;else switch(r){case"forwards":for(n=t.child,r=null;n!==null;)e=n.alternate,e!==null&&Fr(e)===null&&(r=n),n=n.sibling;n=r,n===null?(r=t.child,t.child=null):(r=n.sibling,n.sibling=null),Fl(t,!1,r,n,l);break;case"backwards":for(n=null,r=t.child,t.child=null;r!==null;){if(e=r.alternate,e!==null&&Fr(e)===null){t.child=r;break}e=r.sibling,r.sibling=n,n=r,r=e}Fl(t,!0,n,null,l);break;case"together":Fl(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Kr(e,t){(t.mode&1)===0&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Rn(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),Ro|=t.lanes,(n&t.childLanes)===0)return null;if(e!==null&&t.child!==e.child)throw Error(s(153));if(t.child!==null){for(e=t.child,n=eo(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=eo(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function Tf(e,t,n){switch(t.tag){case 3:bu(t),Go();break;case 5:Wc(t);break;case 1:bt(t.type)&&Er(t);break;case 4:vl(t,t.stateNode.containerInfo);break;case 10:var o=t.type._context,r=t.memoizedProps.value;Ve(zr,o._currentValue),o._currentValue=r;break;case 13:if(o=t.memoizedState,o!==null)return o.dehydrated!==null?(Ve(Ye,Ye.current&1),t.flags|=128,null):(n&t.child.childLanes)!==0?Cu(e,t,n):(Ve(Ye,Ye.current&1),e=Rn(e,t,n),e!==null?e.sibling:null);Ve(Ye,Ye.current&1);break;case 19:if(o=(n&t.childLanes)!==0,(e.flags&128)!==0){if(o)return _u(e,t,n);t.flags|=128}if(r=t.memoizedState,r!==null&&(r.rendering=null,r.tail=null,r.lastEffect=null),Ve(Ye,Ye.current),o)break;return null;case 22:case 23:return t.lanes=0,ku(e,t,n)}return Rn(e,t,n)}var Eu,Bl,Tu,Mu;Eu=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Bl=function(){},Tu=function(e,t,n,o){var r=e.memoizedProps;if(r!==o){e=t.stateNode,ko(cn.current);var l=null;switch(n){case"input":r=Tn(e,r),o=Tn(e,o),l=[];break;case"select":r=q({},r,{value:void 0}),o=q({},o,{value:void 0}),l=[];break;case"textarea":r=co(e,r),o=co(e,o),l=[];break;default:typeof r.onClick!="function"&&typeof o.onClick=="function"&&(e.onclick=Cr)}Oo(n,o);var u;n=null;for(j in r)if(!o.hasOwnProperty(j)&&r.hasOwnProperty(j)&&r[j]!=null)if(j==="style"){var g=r[j];for(u in g)g.hasOwnProperty(u)&&(n||(n={}),n[u]="")}else j!=="dangerouslySetInnerHTML"&&j!=="children"&&j!=="suppressContentEditableWarning"&&j!=="suppressHydrationWarning"&&j!=="autoFocus"&&(d.hasOwnProperty(j)?l||(l=[]):(l=l||[]).push(j,null));for(j in o){var v=o[j];if(g=r!=null?r[j]:void 0,o.hasOwnProperty(j)&&v!==g&&(v!=null||g!=null))if(j==="style")if(g){for(u in g)!g.hasOwnProperty(u)||v&&v.hasOwnProperty(u)||(n||(n={}),n[u]="");for(u in v)v.hasOwnProperty(u)&&g[u]!==v[u]&&(n||(n={}),n[u]=v[u])}else n||(l||(l=[]),l.push(j,n)),n=v;else j==="dangerouslySetInnerHTML"?(v=v?v.__html:void 0,g=g?g.__html:void 0,v!=null&&g!==v&&(l=l||[]).push(j,v)):j==="children"?typeof v!="string"&&typeof v!="number"||(l=l||[]).push(j,""+v):j!=="suppressContentEditableWarning"&&j!=="suppressHydrationWarning"&&(d.hasOwnProperty(j)?(v!=null&&j==="onScroll"&&Xe("scroll",e),l||g===v||(l=[])):(l=l||[]).push(j,v))}n&&(l=l||[]).push("style",n);var j=l;(t.updateQueue=j)&&(t.flags|=4)}},Mu=function(e,t,n,o){n!==o&&(t.flags|=4)};function Wa(e,t){if(!$e)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var o=null;n!==null;)n.alternate!==null&&(o=n),n=n.sibling;o===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:o.sibling=null}}function St(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,o=0;if(t)for(var r=e.child;r!==null;)n|=r.lanes|r.childLanes,o|=r.subtreeFlags&14680064,o|=r.flags&14680064,r.return=e,r=r.sibling;else for(r=e.child;r!==null;)n|=r.lanes|r.childLanes,o|=r.subtreeFlags,o|=r.flags,r.return=e,r=r.sibling;return e.subtreeFlags|=o,e.childLanes=n,t}function Mf(e,t,n){var o=t.pendingProps;switch(sl(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return St(t),null;case 1:return bt(t.type)&&_r(),St(t),null;case 3:return o=t.stateNode,ea(),Ke(Rt),Ke(yt),kl(),o.pendingContext&&(o.context=o.pendingContext,o.pendingContext=null),(e===null||e.child===null)&&(Dr(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,$t!==null&&(Yl($t),$t=null))),Bl(e,t),St(t),null;case 5:Sl(t);var r=ko(Na.current);if(n=t.type,e!==null&&t.stateNode!=null)Tu(e,t,n,o,r),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!o){if(t.stateNode===null)throw Error(s(166));return St(t),null}if(e=ko(cn.current),Dr(t)){o=t.stateNode,n=t.type;var l=t.memoizedProps;switch(o[sn]=t,o[La]=l,e=(t.mode&1)!==0,n){case"dialog":Xe("cancel",o),Xe("close",o);break;case"iframe":case"object":case"embed":Xe("load",o);break;case"video":case"audio":for(r=0;r<Ea.length;r++)Xe(Ea[r],o);break;case"source":Xe("error",o);break;case"img":case"image":case"link":Xe("error",o),Xe("load",o);break;case"details":Xe("toggle",o);break;case"input":lo(o,l),Xe("invalid",o);break;case"select":o._wrapperState={wasMultiple:!!l.multiple},Xe("invalid",o);break;case"textarea":or(o,l),Xe("invalid",o)}Oo(n,l),r=null;for(var u in l)if(l.hasOwnProperty(u)){var g=l[u];u==="children"?typeof g=="string"?o.textContent!==g&&(l.suppressHydrationWarning!==!0&&xr(o.textContent,g,e),r=["children",g]):typeof g=="number"&&o.textContent!==""+g&&(l.suppressHydrationWarning!==!0&&xr(o.textContent,g,e),r=["children",""+g]):d.hasOwnProperty(u)&&g!=null&&u==="onScroll"&&Xe("scroll",o)}switch(n){case"input":tn(o),so(o,l,!0);break;case"textarea":tn(o),Ln(o);break;case"select":case"option":break;default:typeof l.onClick=="function"&&(o.onclick=Cr)}o=r,t.updateQueue=o,o!==null&&(t.flags|=4)}else{u=r.nodeType===9?r:r.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=ca(n)),e==="http://www.w3.org/1999/xhtml"?n==="script"?(e=u.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):typeof o.is=="string"?e=u.createElement(n,{is:o.is}):(e=u.createElement(n),n==="select"&&(u=e,o.multiple?u.multiple=!0:o.size&&(u.size=o.size))):e=u.createElementNS(e,n),e[sn]=t,e[La]=o,Eu(e,t,!1,!1),t.stateNode=e;e:{switch(u=da(n,o),n){case"dialog":Xe("cancel",e),Xe("close",e),r=o;break;case"iframe":case"object":case"embed":Xe("load",e),r=o;break;case"video":case"audio":for(r=0;r<Ea.length;r++)Xe(Ea[r],e);r=o;break;case"source":Xe("error",e),r=o;break;case"img":case"image":case"link":Xe("error",e),Xe("load",e),r=o;break;case"details":Xe("toggle",e),r=o;break;case"input":lo(e,o),r=Tn(e,o),Xe("invalid",e);break;case"option":r=o;break;case"select":e._wrapperState={wasMultiple:!!o.multiple},r=q({},o,{value:void 0}),Xe("invalid",e);break;case"textarea":or(e,o),r=co(e,o),Xe("invalid",e);break;default:r=o}Oo(n,r),g=r;for(l in g)if(g.hasOwnProperty(l)){var v=g[l];l==="style"?ua(e,v):l==="dangerouslySetInnerHTML"?(v=v?v.__html:void 0,v!=null&&It(e,v)):l==="children"?typeof v=="string"?(n!=="textarea"||v!=="")&&Dn(e,v):typeof v=="number"&&Dn(e,""+v):l!=="suppressContentEditableWarning"&&l!=="suppressHydrationWarning"&&l!=="autoFocus"&&(d.hasOwnProperty(l)?v!=null&&l==="onScroll"&&Xe("scroll",e):v!=null&&ue(e,l,v,u))}switch(n){case"input":tn(e),so(e,o,!1);break;case"textarea":tn(e),Ln(e);break;case"option":o.value!=null&&e.setAttribute("value",""+Ce(o.value));break;case"select":e.multiple=!!o.multiple,l=o.value,l!=null?at(e,!!o.multiple,l,!1):o.defaultValue!=null&&at(e,!!o.multiple,o.defaultValue,!0);break;default:typeof r.onClick=="function"&&(e.onclick=Cr)}switch(n){case"button":case"input":case"select":case"textarea":o=!!o.autoFocus;break e;case"img":o=!0;break e;default:o=!1}}o&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return St(t),null;case 6:if(e&&t.stateNode!=null)Mu(e,t,e.memoizedProps,o);else{if(typeof o!="string"&&t.stateNode===null)throw Error(s(166));if(n=ko(Na.current),ko(cn.current),Dr(t)){if(o=t.stateNode,n=t.memoizedProps,o[sn]=t,(l=o.nodeValue!==n)&&(e=Ot,e!==null))switch(e.tag){case 3:xr(o.nodeValue,n,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&xr(o.nodeValue,n,(e.mode&1)!==0)}l&&(t.flags|=4)}else o=(n.nodeType===9?n:n.ownerDocument).createTextNode(o),o[sn]=t,t.stateNode=o}return St(t),null;case 13:if(Ke(Ye),o=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if($e&&zt!==null&&(t.mode&1)!==0&&(t.flags&128)===0)Oc(),Go(),t.flags|=98560,l=!1;else if(l=Dr(t),o!==null&&o.dehydrated!==null){if(e===null){if(!l)throw Error(s(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(s(317));l[sn]=t}else Go(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;St(t),l=!1}else $t!==null&&(Yl($t),$t=null),l=!0;if(!l)return t.flags&65536?t:null}return(t.flags&128)!==0?(t.lanes=n,t):(o=o!==null,o!==(e!==null&&e.memoizedState!==null)&&o&&(t.child.flags|=8192,(t.mode&1)!==0&&(e===null||(Ye.current&1)!==0?ct===0&&(ct=3):es())),t.updateQueue!==null&&(t.flags|=4),St(t),null);case 4:return ea(),Bl(e,t),e===null&&Ta(t.stateNode.containerInfo),St(t),null;case 10:return gl(t.type._context),St(t),null;case 17:return bt(t.type)&&_r(),St(t),null;case 19:if(Ke(Ye),l=t.memoizedState,l===null)return St(t),null;if(o=(t.flags&128)!==0,u=l.rendering,u===null)if(o)Wa(l,!1);else{if(ct!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(u=Fr(e),u!==null){for(t.flags|=128,Wa(l,!1),o=u.updateQueue,o!==null&&(t.updateQueue=o,t.flags|=4),t.subtreeFlags=0,o=n,n=t.child;n!==null;)l=n,e=o,l.flags&=14680066,u=l.alternate,u===null?(l.childLanes=0,l.lanes=e,l.child=null,l.subtreeFlags=0,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.subtreeFlags=0,l.deletions=null,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return Ve(Ye,Ye.current&1|2),t.child}e=e.sibling}l.tail!==null&&Le()>aa&&(t.flags|=128,o=!0,Wa(l,!1),t.lanes=4194304)}else{if(!o)if(e=Fr(u),e!==null){if(t.flags|=128,o=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Wa(l,!0),l.tail===null&&l.tailMode==="hidden"&&!u.alternate&&!$e)return St(t),null}else 2*Le()-l.renderingStartTime>aa&&n!==1073741824&&(t.flags|=128,o=!0,Wa(l,!1),t.lanes=4194304);l.isBackwards?(u.sibling=t.child,t.child=u):(n=l.last,n!==null?n.sibling=u:t.child=u,l.last=u)}return l.tail!==null?(t=l.tail,l.rendering=t,l.tail=t.sibling,l.renderingStartTime=Le(),t.sibling=null,n=Ye.current,Ve(Ye,o?n&1|2:n&1),t):(St(t),null);case 22:case 23:return Zl(),o=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==o&&(t.flags|=8192),o&&(t.mode&1)!==0?(At&1073741824)!==0&&(St(t),t.subtreeFlags&6&&(t.flags|=8192)):St(t),null;case 24:return null;case 25:return null}throw Error(s(156,t.tag))}function Lf(e,t){switch(sl(t),t.tag){case 1:return bt(t.type)&&_r(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ea(),Ke(Rt),Ke(yt),kl(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return Sl(t),null;case 13:if(Ke(Ye),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(s(340));Go()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ke(Ye),null;case 4:return ea(),null;case 10:return gl(t.type._context),null;case 22:case 23:return Zl(),null;case 24:return null;default:return null}}var $r=!1,wt=!1,Df=typeof WeakSet=="function"?WeakSet:Set,Q=null;function na(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(o){et(e,t,o)}else n.current=null}function Ul(e,t,n){try{n()}catch(o){et(e,t,o)}}var Lu=!1;function Of(e,t){if(Zi=gr,e=uc(),qi(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var o=n.getSelection&&n.getSelection();if(o&&o.rangeCount!==0){n=o.anchorNode;var r=o.anchorOffset,l=o.focusNode;o=o.focusOffset;try{n.nodeType,l.nodeType}catch{n=null;break e}var u=0,g=-1,v=-1,j=0,z=0,N=e,O=null;t:for(;;){for(var K;N!==n||r!==0&&N.nodeType!==3||(g=u+r),N!==l||o!==0&&N.nodeType!==3||(v=u+o),N.nodeType===3&&(u+=N.nodeValue.length),(K=N.firstChild)!==null;)O=N,N=K;for(;;){if(N===e)break t;if(O===n&&++j===r&&(g=u),O===l&&++z===o&&(v=u),(K=N.nextSibling)!==null)break;N=O,O=N.parentNode}N=K}n=g===-1||v===-1?null:{start:g,end:v}}else n=null}n=n||{start:0,end:0}}else n=null;for(el={focusedElem:e,selectionRange:n},gr=!1,Q=t;Q!==null;)if(t=Q,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Q=e;else for(;Q!==null;){t=Q;try{var Z=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(Z!==null){var te=Z.memoizedProps,nt=Z.memoizedState,R=t.stateNode,w=R.getSnapshotBeforeUpdate(t.elementType===t.type?te:Qt(t.type,te),nt);R.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var C=t.stateNode.containerInfo;C.nodeType===1?C.textContent="":C.nodeType===9&&C.documentElement&&C.removeChild(C.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(s(163))}}catch(U){et(t,t.return,U)}if(e=t.sibling,e!==null){e.return=t.return,Q=e;break}Q=t.return}return Z=Lu,Lu=!1,Z}function Ha(e,t,n){var o=t.updateQueue;if(o=o!==null?o.lastEffect:null,o!==null){var r=o=o.next;do{if((r.tag&e)===e){var l=r.destroy;r.destroy=void 0,l!==void 0&&Ul(t,n,l)}r=r.next}while(r!==o)}}function Qr(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var o=n.create;n.destroy=o()}n=n.next}while(n!==t)}}function Wl(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Du(e){var t=e.alternate;t!==null&&(e.alternate=null,Du(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[sn],delete t[La],delete t[al],delete t[mf],delete t[yf])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Ou(e){return e.tag===5||e.tag===3||e.tag===4}function zu(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Ou(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.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 Hl(e,t,n){var o=e.tag;if(o===5||o===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Cr));else if(o!==4&&(e=e.child,e!==null))for(Hl(e,t,n),e=e.sibling;e!==null;)Hl(e,t,n),e=e.sibling}function Vl(e,t,n){var o=e.tag;if(o===5||o===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(o!==4&&(e=e.child,e!==null))for(Vl(e,t,n),e=e.sibling;e!==null;)Vl(e,t,n),e=e.sibling}var ht=null,Gt=!1;function Qn(e,t,n){for(n=n.child;n!==null;)Au(e,t,n),n=n.sibling}function Au(e,t,n){if(gt&&typeof gt.onCommitFiberUnmount=="function")try{gt.onCommitFiberUnmount(He,n)}catch{}switch(n.tag){case 5:wt||na(n,t);case 6:var o=ht,r=Gt;ht=null,Qn(e,t,n),ht=o,Gt=r,ht!==null&&(Gt?(e=ht,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ht.removeChild(n.stateNode));break;case 18:ht!==null&&(Gt?(e=ht,n=n.stateNode,e.nodeType===8?ol(e.parentNode,n):e.nodeType===1&&ol(e,n),ka(e)):ol(ht,n.stateNode));break;case 4:o=ht,r=Gt,ht=n.stateNode.containerInfo,Gt=!0,Qn(e,t,n),ht=o,Gt=r;break;case 0:case 11:case 14:case 15:if(!wt&&(o=n.updateQueue,o!==null&&(o=o.lastEffect,o!==null))){r=o=o.next;do{var l=r,u=l.destroy;l=l.tag,u!==void 0&&((l&2)!==0||(l&4)!==0)&&Ul(n,t,u),r=r.next}while(r!==o)}Qn(e,t,n);break;case 1:if(!wt&&(na(n,t),o=n.stateNode,typeof o.componentWillUnmount=="function"))try{o.props=n.memoizedProps,o.state=n.memoizedState,o.componentWillUnmount()}catch(g){et(n,t,g)}Qn(e,t,n);break;case 21:Qn(e,t,n);break;case 22:n.mode&1?(wt=(o=wt)||n.memoizedState!==null,Qn(e,t,n),wt=o):Qn(e,t,n);break;default:Qn(e,t,n)}}function Nu(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Df),t.forEach(function(o){var r=Hf.bind(null,e,o);n.has(o)||(n.add(o),o.then(r,r))})}}function Yt(e,t){var n=t.deletions;if(n!==null)for(var o=0;o<n.length;o++){var r=n[o];try{var l=e,u=t,g=u;e:for(;g!==null;){switch(g.tag){case 5:ht=g.stateNode,Gt=!1;break e;case 3:ht=g.stateNode.containerInfo,Gt=!0;break e;case 4:ht=g.stateNode.containerInfo,Gt=!0;break e}g=g.return}if(ht===null)throw Error(s(160));Au(l,u,r),ht=null,Gt=!1;var v=r.alternate;v!==null&&(v.return=null),r.return=null}catch(j){et(r,t,j)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)Iu(t,e),t=t.sibling}function Iu(e,t){var n=e.alternate,o=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(Yt(t,e),dn(e),o&4){try{Ha(3,e,e.return),Qr(3,e)}catch(te){et(e,e.return,te)}try{Ha(5,e,e.return)}catch(te){et(e,e.return,te)}}break;case 1:Yt(t,e),dn(e),o&512&&n!==null&&na(n,n.return);break;case 5:if(Yt(t,e),dn(e),o&512&&n!==null&&na(n,n.return),e.flags&32){var r=e.stateNode;try{Dn(r,"")}catch(te){et(e,e.return,te)}}if(o&4&&(r=e.stateNode,r!=null)){var l=e.memoizedProps,u=n!==null?n.memoizedProps:l,g=e.type,v=e.updateQueue;if(e.updateQueue=null,v!==null)try{g==="input"&&l.type==="radio"&&l.name!=null&&Mt(r,l),da(g,u);var j=da(g,l);for(u=0;u<v.length;u+=2){var z=v[u],N=v[u+1];z==="style"?ua(r,N):z==="dangerouslySetInnerHTML"?It(r,N):z==="children"?Dn(r,N):ue(r,z,N,j)}switch(g){case"input":Mn(r,l);break;case"textarea":nn(r,l);break;case"select":var O=r._wrapperState.wasMultiple;r._wrapperState.wasMultiple=!!l.multiple;var K=l.value;K!=null?at(r,!!l.multiple,K,!1):O!==!!l.multiple&&(l.defaultValue!=null?at(r,!!l.multiple,l.defaultValue,!0):at(r,!!l.multiple,l.multiple?[]:"",!1))}r[La]=l}catch(te){et(e,e.return,te)}}break;case 6:if(Yt(t,e),dn(e),o&4){if(e.stateNode===null)throw Error(s(162));r=e.stateNode,l=e.memoizedProps;try{r.nodeValue=l}catch(te){et(e,e.return,te)}}break;case 3:if(Yt(t,e),dn(e),o&4&&n!==null&&n.memoizedState.isDehydrated)try{ka(t.containerInfo)}catch(te){et(e,e.return,te)}break;case 4:Yt(t,e),dn(e);break;case 13:Yt(t,e),dn(e),r=e.child,r.flags&8192&&(l=r.memoizedState!==null,r.stateNode.isHidden=l,!l||r.alternate!==null&&r.alternate.memoizedState!==null||(Kl=Le())),o&4&&Nu(e);break;case 22:if(z=n!==null&&n.memoizedState!==null,e.mode&1?(wt=(j=wt)||z,Yt(t,e),wt=j):Yt(t,e),dn(e),o&8192){if(j=e.memoizedState!==null,(e.stateNode.isHidden=j)&&!z&&(e.mode&1)!==0)for(Q=e,z=e.child;z!==null;){for(N=Q=z;Q!==null;){switch(O=Q,K=O.child,O.tag){case 0:case 11:case 14:case 15:Ha(4,O,O.return);break;case 1:na(O,O.return);var Z=O.stateNode;if(typeof Z.componentWillUnmount=="function"){o=O,n=O.return;try{t=o,Z.props=t.memoizedProps,Z.state=t.memoizedState,Z.componentWillUnmount()}catch(te){et(o,n,te)}}break;case 5:na(O,O.return);break;case 22:if(O.memoizedState!==null){Uu(N);continue}}K!==null?(K.return=O,Q=K):Uu(N)}z=z.sibling}e:for(z=null,N=e;;){if(N.tag===5){if(z===null){z=N;try{r=N.stateNode,j?(l=r.style,typeof l.setProperty=="function"?l.setProperty("display","none","important"):l.display="none"):(g=N.stateNode,v=N.memoizedProps.style,u=v!=null&&v.hasOwnProperty("display")?v.display:null,g.style.display=qt("display",u))}catch(te){et(e,e.return,te)}}}else if(N.tag===6){if(z===null)try{N.stateNode.nodeValue=j?"":N.memoizedProps}catch(te){et(e,e.return,te)}}else if((N.tag!==22&&N.tag!==23||N.memoizedState===null||N===e)&&N.child!==null){N.child.return=N,N=N.child;continue}if(N===e)break e;for(;N.sibling===null;){if(N.return===null||N.return===e)break e;z===N&&(z=null),N=N.return}z===N&&(z=null),N.sibling.return=N.return,N=N.sibling}}break;case 19:Yt(t,e),dn(e),o&4&&Nu(e);break;case 21:break;default:Yt(t,e),dn(e)}}function dn(e){var t=e.flags;if(t&2){try{e:{for(var n=e.return;n!==null;){if(Ou(n)){var o=n;break e}n=n.return}throw Error(s(160))}switch(o.tag){case 5:var r=o.stateNode;o.flags&32&&(Dn(r,""),o.flags&=-33);var l=zu(e);Vl(e,l,r);break;case 3:case 4:var u=o.stateNode.containerInfo,g=zu(e);Hl(e,g,u);break;default:throw Error(s(161))}}catch(v){et(e,e.return,v)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function zf(e,t,n){Q=e,Fu(e)}function Fu(e,t,n){for(var o=(e.mode&1)!==0;Q!==null;){var r=Q,l=r.child;if(r.tag===22&&o){var u=r.memoizedState!==null||$r;if(!u){var g=r.alternate,v=g!==null&&g.memoizedState!==null||wt;g=$r;var j=wt;if($r=u,(wt=v)&&!j)for(Q=r;Q!==null;)u=Q,v=u.child,u.tag===22&&u.memoizedState!==null?Wu(r):v!==null?(v.return=u,Q=v):Wu(r);for(;l!==null;)Q=l,Fu(l),l=l.sibling;Q=r,$r=g,wt=j}Bu(e)}else(r.subtreeFlags&8772)!==0&&l!==null?(l.return=r,Q=l):Bu(e)}}function Bu(e){for(;Q!==null;){var t=Q;if((t.flags&8772)!==0){var n=t.alternate;try{if((t.flags&8772)!==0)switch(t.tag){case 0:case 11:case 15:wt||Qr(5,t);break;case 1:var o=t.stateNode;if(t.flags&4&&!wt)if(n===null)o.componentDidMount();else{var r=t.elementType===t.type?n.memoizedProps:Qt(t.type,n.memoizedProps);o.componentDidUpdate(r,n.memoizedState,o.__reactInternalSnapshotBeforeUpdate)}var l=t.updateQueue;l!==null&&Uc(t,l,o);break;case 3:var u=t.updateQueue;if(u!==null){if(n=null,t.child!==null)switch(t.child.tag){case 5:n=t.child.stateNode;break;case 1:n=t.child.stateNode}Uc(t,u,n)}break;case 5:var g=t.stateNode;if(n===null&&t.flags&4){n=g;var v=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":v.autoFocus&&n.focus();break;case"img":v.src&&(n.src=v.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var j=t.alternate;if(j!==null){var z=j.memoizedState;if(z!==null){var N=z.dehydrated;N!==null&&ka(N)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(s(163))}wt||t.flags&512&&Wl(t)}catch(O){et(t,t.return,O)}}if(t===e){Q=null;break}if(n=t.sibling,n!==null){n.return=t.return,Q=n;break}Q=t.return}}function Uu(e){for(;Q!==null;){var t=Q;if(t===e){Q=null;break}var n=t.sibling;if(n!==null){n.return=t.return,Q=n;break}Q=t.return}}function Wu(e){for(;Q!==null;){var t=Q;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{Qr(4,t)}catch(v){et(t,n,v)}break;case 1:var o=t.stateNode;if(typeof o.componentDidMount=="function"){var r=t.return;try{o.componentDidMount()}catch(v){et(t,r,v)}}var l=t.return;try{Wl(t)}catch(v){et(t,l,v)}break;case 5:var u=t.return;try{Wl(t)}catch(v){et(t,u,v)}}}catch(v){et(t,t.return,v)}if(t===e){Q=null;break}var g=t.sibling;if(g!==null){g.return=t.return,Q=g;break}Q=t.return}}var Af=Math.ceil,Gr=re.ReactCurrentDispatcher,ql=re.ReactCurrentOwner,Ht=re.ReactCurrentBatchConfig,Me=0,dt=null,rt=null,mt=0,At=0,oa=Vn(0),ct=0,Va=null,Ro=0,Yr=0,Xl=0,qa=null,Ct=null,Kl=0,aa=1/0,bn=null,Jr=!1,$l=null,Gn=null,Zr=!1,Yn=null,ei=0,Xa=0,Ql=null,ti=-1,ni=0;function Pt(){return(Me&6)!==0?Le():ti!==-1?ti:ti=Le()}function Jn(e){return(e.mode&1)===0?1:(Me&2)!==0&&mt!==0?mt&-mt:Sf.transition!==null?(ni===0&&(ni=zs()),ni):(e=Fe,e!==0||(e=window.event,e=e===void 0?16:Vs(e.type)),e)}function Jt(e,t,n,o){if(50<Xa)throw Xa=0,Ql=null,Error(s(185));ma(e,n,o),((Me&2)===0||e!==dt)&&(e===dt&&((Me&2)===0&&(Yr|=n),ct===4&&Zn(e,mt)),jt(e,o),n===1&&Me===0&&(t.mode&1)===0&&(aa=Le()+500,Tr&&Xn()))}function jt(e,t){var n=e.callbackNode;vp(e,t);var o=dr(e,e===dt?mt:0);if(o===0)n!==null&&gn(n),e.callbackNode=null,e.callbackPriority=0;else if(t=o&-o,e.callbackPriority!==t){if(n!=null&&gn(n),t===1)e.tag===0?vf(Vu.bind(null,e)):Ec(Vu.bind(null,e)),gf(function(){(Me&6)===0&&Xn()}),n=null;else{switch(As(o)){case 1:n=hn;break;case 4:n=ln;break;case 16:n=mn;break;case 536870912:n=je;break;default:n=mn}n=Ju(n,Hu.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function Hu(e,t){if(ti=-1,ni=0,(Me&6)!==0)throw Error(s(327));var n=e.callbackNode;if(ra()&&e.callbackNode!==n)return null;var o=dr(e,e===dt?mt:0);if(o===0)return null;if((o&30)!==0||(o&e.expiredLanes)!==0||t)t=oi(e,o);else{t=o;var r=Me;Me|=2;var l=Xu();(dt!==e||mt!==t)&&(bn=null,aa=Le()+500,xo(e,t));do try{Ff();break}catch(g){qu(e,g)}while(!0);fl(),Gr.current=l,Me=r,rt!==null?t=0:(dt=null,mt=0,t=ct)}if(t!==0){if(t===2&&(r=Ei(e),r!==0&&(o=r,t=Gl(e,r))),t===1)throw n=Va,xo(e,0),Zn(e,o),jt(e,Le()),n;if(t===6)Zn(e,o);else{if(r=e.current.alternate,(o&30)===0&&!Nf(r)&&(t=oi(e,o),t===2&&(l=Ei(e),l!==0&&(o=l,t=Gl(e,l))),t===1))throw n=Va,xo(e,0),Zn(e,o),jt(e,Le()),n;switch(e.finishedWork=r,e.finishedLanes=o,t){case 0:case 1:throw Error(s(345));case 2:Co(e,Ct,bn);break;case 3:if(Zn(e,o),(o&130023424)===o&&(t=Kl+500-Le(),10<t)){if(dr(e,0)!==0)break;if(r=e.suspendedLanes,(r&o)!==o){Pt(),e.pingedLanes|=e.suspendedLanes&r;break}e.timeoutHandle=nl(Co.bind(null,e,Ct,bn),t);break}Co(e,Ct,bn);break;case 4:if(Zn(e,o),(o&4194240)===o)break;for(t=e.eventTimes,r=-1;0<o;){var u=31-De(o);l=1<<u,u=t[u],u>r&&(r=u),o&=~l}if(o=r,o=Le()-o,o=(120>o?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*Af(o/1960))-o,10<o){e.timeoutHandle=nl(Co.bind(null,e,Ct,bn),o);break}Co(e,Ct,bn);break;case 5:Co(e,Ct,bn);break;default:throw Error(s(329))}}}return jt(e,Le()),e.callbackNode===n?Hu.bind(null,e):null}function Gl(e,t){var n=qa;return e.current.memoizedState.isDehydrated&&(xo(e,t).flags|=256),e=oi(e,t),e!==2&&(t=Ct,Ct=n,t!==null&&Yl(t)),e}function Yl(e){Ct===null?Ct=e:Ct.push.apply(Ct,e)}function Nf(e){for(var t=e;;){if(t.flags&16384){var n=t.updateQueue;if(n!==null&&(n=n.stores,n!==null))for(var o=0;o<n.length;o++){var r=n[o],l=r.getSnapshot;r=r.value;try{if(!Kt(l(),r))return!1}catch{return!1}}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;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 Zn(e,t){for(t&=~Xl,t&=~Yr,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-De(t),o=1<<n;e[n]=-1,t&=~o}}function Vu(e){if((Me&6)!==0)throw Error(s(327));ra();var t=dr(e,0);if((t&1)===0)return jt(e,Le()),null;var n=oi(e,t);if(e.tag!==0&&n===2){var o=Ei(e);o!==0&&(t=o,n=Gl(e,o))}if(n===1)throw n=Va,xo(e,0),Zn(e,t),jt(e,Le()),n;if(n===6)throw Error(s(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Co(e,Ct,bn),jt(e,Le()),null}function Jl(e,t){var n=Me;Me|=1;try{return e(t)}finally{Me=n,Me===0&&(aa=Le()+500,Tr&&Xn())}}function bo(e){Yn!==null&&Yn.tag===0&&(Me&6)===0&&ra();var t=Me;Me|=1;var n=Ht.transition,o=Fe;try{if(Ht.transition=null,Fe=1,e)return e()}finally{Fe=o,Ht.transition=n,Me=t,(Me&6)===0&&Xn()}}function Zl(){At=oa.current,Ke(oa)}function xo(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(n!==-1&&(e.timeoutHandle=-1,ff(n)),rt!==null)for(n=rt.return;n!==null;){var o=n;switch(sl(o),o.tag){case 1:o=o.type.childContextTypes,o!=null&&_r();break;case 3:ea(),Ke(Rt),Ke(yt),kl();break;case 5:Sl(o);break;case 4:ea();break;case 13:Ke(Ye);break;case 19:Ke(Ye);break;case 10:gl(o.type._context);break;case 22:case 23:Zl()}n=n.return}if(dt=e,rt=e=eo(e.current,null),mt=At=t,ct=0,Va=null,Xl=Yr=Ro=0,Ct=qa=null,wo!==null){for(t=0;t<wo.length;t++)if(n=wo[t],o=n.interleaved,o!==null){n.interleaved=null;var r=o.next,l=n.pending;if(l!==null){var u=l.next;l.next=r,o.next=u}n.pending=o}wo=null}return e}function qu(e,t){do{var n=rt;try{if(fl(),Br.current=Vr,Ur){for(var o=Je.memoizedState;o!==null;){var r=o.queue;r!==null&&(r.pending=null),o=o.next}Ur=!1}if(Po=0,ut=st=Je=null,Ia=!1,Fa=0,ql.current=null,n===null||n.return===null){ct=1,Va=t,rt=null;break}e:{var l=e,u=n.return,g=n,v=t;if(t=mt,g.flags|=32768,v!==null&&typeof v=="object"&&typeof v.then=="function"){var j=v,z=g,N=z.tag;if((z.mode&1)===0&&(N===0||N===11||N===15)){var O=z.alternate;O?(z.updateQueue=O.updateQueue,z.memoizedState=O.memoizedState,z.lanes=O.lanes):(z.updateQueue=null,z.memoizedState=null)}var K=mu(u);if(K!==null){K.flags&=-257,yu(K,u,g,l,t),K.mode&1&&hu(l,j,t),t=K,v=j;var Z=t.updateQueue;if(Z===null){var te=new Set;te.add(v),t.updateQueue=te}else Z.add(v);break e}else{if((t&1)===0){hu(l,j,t),es();break e}v=Error(s(426))}}else if($e&&g.mode&1){var nt=mu(u);if(nt!==null){(nt.flags&65536)===0&&(nt.flags|=256),yu(nt,u,g,l,t),dl(ta(v,g));break e}}l=v=ta(v,g),ct!==4&&(ct=2),qa===null?qa=[l]:qa.push(l),l=u;do{switch(l.tag){case 3:l.flags|=65536,t&=-t,l.lanes|=t;var R=fu(l,v,t);Bc(l,R);break e;case 1:g=v;var w=l.type,C=l.stateNode;if((l.flags&128)===0&&(typeof w.getDerivedStateFromError=="function"||C!==null&&typeof C.componentDidCatch=="function"&&(Gn===null||!Gn.has(C)))){l.flags|=65536,t&=-t,l.lanes|=t;var U=gu(l,g,t);Bc(l,U);break e}}l=l.return}while(l!==null)}$u(n)}catch(ne){t=ne,rt===n&&n!==null&&(rt=n=n.return);continue}break}while(!0)}function Xu(){var e=Gr.current;return Gr.current=Vr,e===null?Vr:e}function es(){(ct===0||ct===3||ct===2)&&(ct=4),dt===null||(Ro&268435455)===0&&(Yr&268435455)===0||Zn(dt,mt)}function oi(e,t){var n=Me;Me|=2;var o=Xu();(dt!==e||mt!==t)&&(bn=null,xo(e,t));do try{If();break}catch(r){qu(e,r)}while(!0);if(fl(),Me=n,Gr.current=o,rt!==null)throw Error(s(261));return dt=null,mt=0,ct}function If(){for(;rt!==null;)Ku(rt)}function Ff(){for(;rt!==null&&!go();)Ku(rt)}function Ku(e){var t=Yu(e.alternate,e,At);e.memoizedProps=e.pendingProps,t===null?$u(e):rt=t,ql.current=null}function $u(e){var t=e;do{var n=t.alternate;if(e=t.return,(t.flags&32768)===0){if(n=Mf(n,t,At),n!==null){rt=n;return}}else{if(n=Lf(n,t),n!==null){n.flags&=32767,rt=n;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{ct=6,rt=null;return}}if(t=t.sibling,t!==null){rt=t;return}rt=t=e}while(t!==null);ct===0&&(ct=5)}function Co(e,t,n){var o=Fe,r=Ht.transition;try{Ht.transition=null,Fe=1,Bf(e,t,n,o)}finally{Ht.transition=r,Fe=o}return null}function Bf(e,t,n,o){do ra();while(Yn!==null);if((Me&6)!==0)throw Error(s(327));n=e.finishedWork;var r=e.finishedLanes;if(n===null)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(s(177));e.callbackNode=null,e.callbackPriority=0;var l=n.lanes|n.childLanes;if(Sp(e,l),e===dt&&(rt=dt=null,mt=0),(n.subtreeFlags&2064)===0&&(n.flags&2064)===0||Zr||(Zr=!0,Ju(mn,function(){return ra(),null})),l=(n.flags&15990)!==0,(n.subtreeFlags&15990)!==0||l){l=Ht.transition,Ht.transition=null;var u=Fe;Fe=1;var g=Me;Me|=4,ql.current=null,Of(e,n),Iu(n,e),rf(el),gr=!!Zi,el=Zi=null,e.current=n,zf(n),Xt(),Me=g,Fe=u,Ht.transition=l}else e.current=n;if(Zr&&(Zr=!1,Yn=e,ei=r),l=e.pendingLanes,l===0&&(Gn=null),ho(n.stateNode),jt(e,Le()),t!==null)for(o=e.onRecoverableError,n=0;n<t.length;n++)r=t[n],o(r.value,{componentStack:r.stack,digest:r.digest});if(Jr)throw Jr=!1,e=$l,$l=null,e;return(ei&1)!==0&&e.tag!==0&&ra(),l=e.pendingLanes,(l&1)!==0?e===Ql?Xa++:(Xa=0,Ql=e):Xa=0,Xn(),null}function ra(){if(Yn!==null){var e=As(ei),t=Ht.transition,n=Fe;try{if(Ht.transition=null,Fe=16>e?16:e,Yn===null)var o=!1;else{if(e=Yn,Yn=null,ei=0,(Me&6)!==0)throw Error(s(331));var r=Me;for(Me|=4,Q=e.current;Q!==null;){var l=Q,u=l.child;if((Q.flags&16)!==0){var g=l.deletions;if(g!==null){for(var v=0;v<g.length;v++){var j=g[v];for(Q=j;Q!==null;){var z=Q;switch(z.tag){case 0:case 11:case 15:Ha(8,z,l)}var N=z.child;if(N!==null)N.return=z,Q=N;else for(;Q!==null;){z=Q;var O=z.sibling,K=z.return;if(Du(z),z===j){Q=null;break}if(O!==null){O.return=K,Q=O;break}Q=K}}}var Z=l.alternate;if(Z!==null){var te=Z.child;if(te!==null){Z.child=null;do{var nt=te.sibling;te.sibling=null,te=nt}while(te!==null)}}Q=l}}if((l.subtreeFlags&2064)!==0&&u!==null)u.return=l,Q=u;else e:for(;Q!==null;){if(l=Q,(l.flags&2048)!==0)switch(l.tag){case 0:case 11:case 15:Ha(9,l,l.return)}var R=l.sibling;if(R!==null){R.return=l.return,Q=R;break e}Q=l.return}}var w=e.current;for(Q=w;Q!==null;){u=Q;var C=u.child;if((u.subtreeFlags&2064)!==0&&C!==null)C.return=u,Q=C;else e:for(u=w;Q!==null;){if(g=Q,(g.flags&2048)!==0)try{switch(g.tag){case 0:case 11:case 15:Qr(9,g)}}catch(ne){et(g,g.return,ne)}if(g===u){Q=null;break e}var U=g.sibling;if(U!==null){U.return=g.return,Q=U;break e}Q=g.return}}if(Me=r,Xn(),gt&&typeof gt.onPostCommitFiberRoot=="function")try{gt.onPostCommitFiberRoot(He,e)}catch{}o=!0}return o}finally{Fe=n,Ht.transition=t}}return!1}function Qu(e,t,n){t=ta(n,t),t=fu(e,t,1),e=$n(e,t,1),t=Pt(),e!==null&&(ma(e,1,t),jt(e,t))}function et(e,t,n){if(e.tag===3)Qu(e,e,n);else for(;t!==null;){if(t.tag===3){Qu(t,e,n);break}else if(t.tag===1){var o=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof o.componentDidCatch=="function"&&(Gn===null||!Gn.has(o))){e=ta(n,e),e=gu(t,e,1),t=$n(t,e,1),e=Pt(),t!==null&&(ma(t,1,e),jt(t,e));break}}t=t.return}}function Uf(e,t,n){var o=e.pingCache;o!==null&&o.delete(t),t=Pt(),e.pingedLanes|=e.suspendedLanes&n,dt===e&&(mt&n)===n&&(ct===4||ct===3&&(mt&130023424)===mt&&500>Le()-Kl?xo(e,0):Xl|=n),jt(e,t)}function Gu(e,t){t===0&&((e.mode&1)===0?t=1:(t=ur,ur<<=1,(ur&130023424)===0&&(ur=4194304)));var n=Pt();e=kn(e,t),e!==null&&(ma(e,t,n),jt(e,n))}function Wf(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Gu(e,n)}function Hf(e,t){var n=0;switch(e.tag){case 13:var o=e.stateNode,r=e.memoizedState;r!==null&&(n=r.retryLane);break;case 19:o=e.stateNode;break;default:throw Error(s(314))}o!==null&&o.delete(t),Gu(e,n)}var Yu;Yu=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Rt.current)xt=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return xt=!1,Tf(e,t,n);xt=(e.flags&131072)!==0}else xt=!1,$e&&(t.flags&1048576)!==0&&Tc(t,Lr,t.index);switch(t.lanes=0,t.tag){case 2:var o=t.type;Kr(e,t),e=t.pendingProps;var r=Ko(t,yt.current);Zo(t,n),r=bl(null,t,o,e,r,n);var l=xl();return t.flags|=1,typeof r=="object"&&r!==null&&typeof r.render=="function"&&r.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,bt(o)?(l=!0,Er(t)):l=!1,t.memoizedState=r.state!==null&&r.state!==void 0?r.state:null,yl(t),r.updater=qr,t.stateNode=r,r._reactInternals=t,Ml(t,o,e,n),t=zl(null,t,o,!0,l,n)):(t.tag=0,$e&&l&&ll(t),kt(null,t,r,n),t=t.child),t;case 16:o=t.elementType;e:{switch(Kr(e,t),e=t.pendingProps,r=o._init,o=r(o._payload),t.type=o,r=t.tag=qf(o),e=Qt(o,e),r){case 0:t=Ol(null,t,o,e,n);break e;case 1:t=Ru(null,t,o,e,n);break e;case 11:t=vu(null,t,o,e,n);break e;case 14:t=Su(null,t,o,Qt(o.type,e),n);break e}throw Error(s(306,o,""))}return t;case 0:return o=t.type,r=t.pendingProps,r=t.elementType===o?r:Qt(o,r),Ol(e,t,o,r,n);case 1:return o=t.type,r=t.pendingProps,r=t.elementType===o?r:Qt(o,r),Ru(e,t,o,r,n);case 3:e:{if(bu(t),e===null)throw Error(s(387));o=t.pendingProps,l=t.memoizedState,r=l.element,Fc(e,t),Ir(t,o,null,n);var u=t.memoizedState;if(o=u.element,l.isDehydrated)if(l={element:o,isDehydrated:!1,cache:u.cache,pendingSuspenseBoundaries:u.pendingSuspenseBoundaries,transitions:u.transitions},t.updateQueue.baseState=l,t.memoizedState=l,t.flags&256){r=ta(Error(s(423)),t),t=xu(e,t,o,n,r);break e}else if(o!==r){r=ta(Error(s(424)),t),t=xu(e,t,o,n,r);break e}else for(zt=Hn(t.stateNode.containerInfo.firstChild),Ot=t,$e=!0,$t=null,n=Nc(t,null,o,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Go(),o===r){t=Rn(e,t,n);break e}kt(e,t,o,n)}t=t.child}return t;case 5:return Wc(t),e===null&&ul(t),o=t.type,r=t.pendingProps,l=e!==null?e.memoizedProps:null,u=r.children,tl(o,r)?u=null:l!==null&&tl(o,l)&&(t.flags|=32),Pu(e,t),kt(e,t,u,n),t.child;case 6:return e===null&&ul(t),null;case 13:return Cu(e,t,n);case 4:return vl(t,t.stateNode.containerInfo),o=t.pendingProps,e===null?t.child=Yo(t,null,o,n):kt(e,t,o,n),t.child;case 11:return o=t.type,r=t.pendingProps,r=t.elementType===o?r:Qt(o,r),vu(e,t,o,r,n);case 7:return kt(e,t,t.pendingProps,n),t.child;case 8:return kt(e,t,t.pendingProps.children,n),t.child;case 12:return kt(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(o=t.type._context,r=t.pendingProps,l=t.memoizedProps,u=r.value,Ve(zr,o._currentValue),o._currentValue=u,l!==null)if(Kt(l.value,u)){if(l.children===r.children&&!Rt.current){t=Rn(e,t,n);break e}}else for(l=t.child,l!==null&&(l.return=t);l!==null;){var g=l.dependencies;if(g!==null){u=l.child;for(var v=g.firstContext;v!==null;){if(v.context===o){if(l.tag===1){v=Pn(-1,n&-n),v.tag=2;var j=l.updateQueue;if(j!==null){j=j.shared;var z=j.pending;z===null?v.next=v:(v.next=z.next,z.next=v),j.pending=v}}l.lanes|=n,v=l.alternate,v!==null&&(v.lanes|=n),hl(l.return,n,t),g.lanes|=n;break}v=v.next}}else if(l.tag===10)u=l.type===t.type?null:l.child;else if(l.tag===18){if(u=l.return,u===null)throw Error(s(341));u.lanes|=n,g=u.alternate,g!==null&&(g.lanes|=n),hl(u,n,t),u=l.sibling}else u=l.child;if(u!==null)u.return=l;else for(u=l;u!==null;){if(u===t){u=null;break}if(l=u.sibling,l!==null){l.return=u.return,u=l;break}u=u.return}l=u}kt(e,t,r.children,n),t=t.child}return t;case 9:return r=t.type,o=t.pendingProps.children,Zo(t,n),r=Ut(r),o=o(r),t.flags|=1,kt(e,t,o,n),t.child;case 14:return o=t.type,r=Qt(o,t.pendingProps),r=Qt(o.type,r),Su(e,t,o,r,n);case 15:return wu(e,t,t.type,t.pendingProps,n);case 17:return o=t.type,r=t.pendingProps,r=t.elementType===o?r:Qt(o,r),Kr(e,t),t.tag=1,bt(o)?(e=!0,Er(t)):e=!1,Zo(t,n),du(t,o,r),Ml(t,o,r,n),zl(null,t,o,!0,e,n);case 19:return _u(e,t,n);case 22:return ku(e,t,n)}throw Error(s(156,t.tag))};function Ju(e,t){return qe(e,t)}function Vf(e,t,n,o){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=o,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Vt(e,t,n,o){return new Vf(e,t,n,o)}function ts(e){return e=e.prototype,!(!e||!e.isReactComponent)}function qf(e){if(typeof e=="function")return ts(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Te)return 11;if(e===Ge)return 14}return 2}function eo(e,t){var n=e.alternate;return n===null?(n=Vt(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function ai(e,t,n,o,r,l){var u=2;if(o=e,typeof e=="function")ts(e)&&(u=1);else if(typeof e=="string")u=5;else e:switch(e){case _:return jo(n.children,r,l,t);case Y:u=8,r|=8;break;case ke:return e=Vt(12,n,t,r|2),e.elementType=ke,e.lanes=l,e;case pe:return e=Vt(13,n,t,r),e.elementType=pe,e.lanes=l,e;case We:return e=Vt(19,n,t,r),e.elementType=We,e.lanes=l,e;case Ae:return ri(n,r,l,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ie:u=10;break e;case Ue:u=9;break e;case Te:u=11;break e;case Ge:u=14;break e;case tt:u=16,o=null;break e}throw Error(s(130,e==null?e:typeof e,""))}return t=Vt(u,n,t,r),t.elementType=e,t.type=o,t.lanes=l,t}function jo(e,t,n,o){return e=Vt(7,e,o,t),e.lanes=n,e}function ri(e,t,n,o){return e=Vt(22,e,o,t),e.elementType=Ae,e.lanes=n,e.stateNode={isHidden:!1},e}function ns(e,t,n){return e=Vt(6,e,null,t),e.lanes=n,e}function os(e,t,n){return t=Vt(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xf(e,t,n,o,r){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Ti(0),this.expirationTimes=Ti(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ti(0),this.identifierPrefix=o,this.onRecoverableError=r,this.mutableSourceEagerHydrationData=null}function as(e,t,n,o,r,l,u,g,v){return e=new Xf(e,t,n,g,v),t===1?(t=1,l===!0&&(t|=8)):t=0,l=Vt(3,null,null,t),e.current=l,l.stateNode=e,l.memoizedState={element:o,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},yl(l),e}function Kf(e,t,n){var o=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:_e,key:o==null?null:""+o,children:e,containerInfo:t,implementation:n}}function Zu(e){if(!e)return qn;e=e._reactInternals;e:{if(G(e)!==e||e.tag!==1)throw Error(s(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(bt(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(t!==null);throw Error(s(171))}if(e.tag===1){var n=e.type;if(bt(n))return jc(e,n,t)}return t}function ed(e,t,n,o,r,l,u,g,v){return e=as(n,o,!0,e,r,l,u,g,v),e.context=Zu(null),n=e.current,o=Pt(),r=Jn(n),l=Pn(o,r),l.callback=t??null,$n(n,l,r),e.current.lanes=r,ma(e,r,o),jt(e,o),e}function ii(e,t,n,o){var r=t.current,l=Pt(),u=Jn(r);return n=Zu(n),t.context===null?t.context=n:t.pendingContext=n,t=Pn(l,u),t.payload={element:e},o=o===void 0?null:o,o!==null&&(t.callback=o),e=$n(r,t,u),e!==null&&(Jt(e,r,u,l),Nr(e,r,u)),u}function li(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function td(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function rs(e,t){td(e,t),(e=e.alternate)&&td(e,t)}function $f(){return null}var nd=typeof reportError=="function"?reportError:function(e){console.error(e)};function is(e){this._internalRoot=e}si.prototype.render=is.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(s(409));ii(e,t,null,null)},si.prototype.unmount=is.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;bo(function(){ii(null,e,null,null)}),t[yn]=null}};function si(e){this._internalRoot=e}si.prototype.unstable_scheduleHydration=function(e){if(e){var t=Fs();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Bn.length&&t!==0&&t<Bn[n].priority;n++);Bn.splice(n,0,e),n===0&&Ws(e)}};function ls(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function ci(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function od(){}function Qf(e,t,n,o,r){if(r){if(typeof o=="function"){var l=o;o=function(){var j=li(u);l.call(j)}}var u=ed(t,o,e,0,null,!1,!1,"",od);return e._reactRootContainer=u,e[yn]=u.current,Ta(e.nodeType===8?e.parentNode:e),bo(),u}for(;r=e.lastChild;)e.removeChild(r);if(typeof o=="function"){var g=o;o=function(){var j=li(v);g.call(j)}}var v=as(e,0,!1,null,null,!1,!1,"",od);return e._reactRootContainer=v,e[yn]=v.current,Ta(e.nodeType===8?e.parentNode:e),bo(function(){ii(t,v,n,o)}),v}function ui(e,t,n,o,r){var l=n._reactRootContainer;if(l){var u=l;if(typeof r=="function"){var g=r;r=function(){var v=li(u);g.call(v)}}ii(t,u,e,r)}else u=Qf(n,t,e,r,o);return li(u)}Ns=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=ha(t.pendingLanes);n!==0&&(Mi(t,n|1),jt(t,Le()),(Me&6)===0&&(aa=Le()+500,Xn()))}break;case 13:bo(function(){var o=kn(e,1);if(o!==null){var r=Pt();Jt(o,e,1,r)}}),rs(e,1)}},Li=function(e){if(e.tag===13){var t=kn(e,134217728);if(t!==null){var n=Pt();Jt(t,e,134217728,n)}rs(e,134217728)}},Is=function(e){if(e.tag===13){var t=Jn(e),n=kn(e,t);if(n!==null){var o=Pt();Jt(n,e,t,o)}rs(e,t)}},Fs=function(){return Fe},Bs=function(e,t){var n=Fe;try{return Fe=e,t()}finally{Fe=n}},Ao=function(e,t,n){switch(t){case"input":if(Mn(e,n),t=n.name,n.type==="radio"&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var o=n[t];if(o!==e&&o.form===e.form){var r=jr(o);if(!r)throw Error(s(90));ot(o),Mn(o,r)}}}break;case"textarea":nn(e,n);break;case"select":t=n.value,t!=null&&at(e,!!n.multiple,t,!1)}},fa=Jl,po=bo;var Gf={usingClientEntryPoint:!1,Events:[Da,qo,jr,pa,ir,Jl]},Ka={findFiberByHostInstance:mo,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},Yf={bundleType:Ka.bundleType,version:Ka.version,rendererPackageName:Ka.rendererPackageName,rendererConfig:Ka.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:re.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=Ie(e),e===null?null:e.stateNode},findFiberByHostInstance:Ka.findFiberByHostInstance||$f,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var di=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!di.isDisabled&&di.supportsFiber)try{He=di.inject(Yf),gt=di}catch{}}return _t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Gf,_t.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!ls(t))throw Error(s(200));return Kf(e,t,null,n)},_t.createRoot=function(e,t){if(!ls(e))throw Error(s(299));var n=!1,o="",r=nd;return t!=null&&(t.unstable_strictMode===!0&&(n=!0),t.identifierPrefix!==void 0&&(o=t.identifierPrefix),t.onRecoverableError!==void 0&&(r=t.onRecoverableError)),t=as(e,1,!1,null,null,n,!1,o,r),e[yn]=t.current,Ta(e.nodeType===8?e.parentNode:e),new is(t)},_t.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(s(188)):(e=Object.keys(e).join(","),Error(s(268,e)));return e=Ie(t),e=e===null?null:e.stateNode,e},_t.flushSync=function(e){return bo(e)},_t.hydrate=function(e,t,n){if(!ci(t))throw Error(s(200));return ui(null,e,t,!0,n)},_t.hydrateRoot=function(e,t,n){if(!ls(e))throw Error(s(405));var o=n!=null&&n.hydratedSources||null,r=!1,l="",u=nd;if(n!=null&&(n.unstable_strictMode===!0&&(r=!0),n.identifierPrefix!==void 0&&(l=n.identifierPrefix),n.onRecoverableError!==void 0&&(u=n.onRecoverableError)),t=ed(t,null,e,1,n??null,r,!1,l,u),e[yn]=t.current,Ta(e),o)for(e=0;e<o.length;e++)n=o[e],r=n._getVersion,r=r(n._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[n,r]:t.mutableSourceEagerHydrationData.push(n,r);return new si(t)},_t.render=function(e,t,n){if(!ci(t))throw Error(s(200));return ui(null,e,t,!1,n)},_t.unmountComponentAtNode=function(e){if(!ci(e))throw Error(s(40));return e._reactRootContainer?(bo(function(){ui(null,null,e,!1,function(){e._reactRootContainer=null,e[yn]=null})}),!0):!1},_t.unstable_batchedUpdates=Jl,_t.unstable_renderSubtreeIntoContainer=function(e,t,n,o){if(!ci(n))throw Error(s(200));if(e==null||e._reactInternals===void 0)throw Error(s(38));return ui(e,t,n,!1,o)},_t.version="18.3.1-next-f1338f8080-20240426",_t}var dd;function Vd(){if(dd)return us.exports;dd=1;function a(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(i){console.error(i)}}return a(),us.exports=ig(),us.exports}var pd;function lg(){if(pd)return pi;pd=1;var a=Vd();return pi.createRoot=a.createRoot,pi.hydrateRoot=a.hydrateRoot,pi}var sg=lg(),T=xs();const cg=Hd(T),ug=Wd({__proto__:null,default:cg},[T]);var qd=Vd();const dg=Hd(qd),pg=Wd({__proto__:null,default:dg},[qd]);/**
42
+ * @remix-run/router v1.23.2
43
+ *
44
+ * Copyright (c) Remix Software Inc.
45
+ *
46
+ * This source code is licensed under the MIT license found in the
47
+ * LICENSE.md file in the root directory of this source tree.
48
+ *
49
+ * @license MIT
50
+ */function Qe(){return Qe=Object.assign?Object.assign.bind():function(a){for(var i=1;i<arguments.length;i++){var s=arguments[i];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(a[c]=s[c])}return a},Qe.apply(this,arguments)}var it;(function(a){a.Pop="POP",a.Push="PUSH",a.Replace="REPLACE"})(it||(it={}));const fd="popstate";function fg(a){a===void 0&&(a={});function i(d,p){let{pathname:f="/",search:m="",hash:h=""}=_n(d.location.hash.substr(1));return!f.startsWith("/")&&!f.startsWith(".")&&(f="/"+f),Za("",{pathname:f,search:m,hash:h},p.state&&p.state.usr||null,p.state&&p.state.key||"default")}function s(d,p){let f=d.document.querySelector("base"),m="";if(f&&f.getAttribute("href")){let h=d.location.href,S=h.indexOf("#");m=S===-1?h:h.slice(0,S)}return m+"#"+(typeof p=="string"?p:Lo(p))}function c(d,p){ro(d.pathname.charAt(0)==="/","relative pathnames are not supported in hash history.push("+JSON.stringify(p)+")")}return hg(i,s,c,a)}function Re(a,i){if(a===!1||a===null||typeof a>"u")throw new Error(i)}function ro(a,i){if(!a){typeof console<"u"&&console.warn(i);try{throw new Error(i)}catch{}}}function gg(){return Math.random().toString(36).substr(2,8)}function gd(a,i){return{usr:a.state,key:a.key,idx:i}}function Za(a,i,s,c){return s===void 0&&(s=null),Qe({pathname:typeof a=="string"?a:a.pathname,search:"",hash:""},typeof i=="string"?_n(i):i,{state:s,key:i&&i.key||c||gg()})}function Lo(a){let{pathname:i="/",search:s="",hash:c=""}=a;return s&&s!=="?"&&(i+=s.charAt(0)==="?"?s:"?"+s),c&&c!=="#"&&(i+=c.charAt(0)==="#"?c:"#"+c),i}function _n(a){let i={};if(a){let s=a.indexOf("#");s>=0&&(i.hash=a.substr(s),a=a.substr(0,s));let c=a.indexOf("?");c>=0&&(i.search=a.substr(c),a=a.substr(0,c)),a&&(i.pathname=a)}return i}function hg(a,i,s,c){c===void 0&&(c={});let{window:d=document.defaultView,v5Compat:p=!1}=c,f=d.history,m=it.Pop,h=null,S=b();S==null&&(S=0,f.replaceState(Qe({},f.state,{idx:S}),""));function b(){return(f.state||{idx:null}).idx}function x(){m=it.Pop;let W=b(),ge=W==null?null:W-S;S=W,h&&h({action:m,location:F.location,delta:ge})}function M(W,ge){m=it.Push;let X=Za(F.location,W,ge);s&&s(X,W),S=b()+1;let ue=gd(X,S),re=F.createHref(X);try{f.pushState(ue,"",re)}catch(be){if(be instanceof DOMException&&be.name==="DataCloneError")throw be;d.location.assign(re)}p&&h&&h({action:m,location:F.location,delta:1})}function I(W,ge){m=it.Replace;let X=Za(F.location,W,ge);s&&s(X,W),S=b();let ue=gd(X,S),re=F.createHref(X);f.replaceState(ue,"",re),p&&h&&h({action:m,location:F.location,delta:0})}function H(W){let ge=d.location.origin!=="null"?d.location.origin:d.location.href,X=typeof W=="string"?W:Lo(W);return X=X.replace(/ $/,"%20"),Re(ge,"No window.location.(origin|href) available to create URL for href: "+X),new URL(X,ge)}let F={get action(){return m},get location(){return a(d,f)},listen(W){if(h)throw new Error("A history only accepts one active listener");return d.addEventListener(fd,x),h=W,()=>{d.removeEventListener(fd,x),h=null}},createHref(W){return i(d,W)},createURL:H,encodeLocation(W){let ge=H(W);return{pathname:ge.pathname,search:ge.search,hash:ge.hash}},push:M,replace:I,go(W){return f.go(W)}};return F}var Be;(function(a){a.data="data",a.deferred="deferred",a.redirect="redirect",a.error="error"})(Be||(Be={}));const mg=new Set(["lazy","caseSensitive","path","id","index","children"]);function yg(a){return a.index===!0}function Si(a,i,s,c){return s===void 0&&(s=[]),c===void 0&&(c={}),a.map((d,p)=>{let f=[...s,String(p)],m=typeof d.id=="string"?d.id:f.join("-");if(Re(d.index!==!0||!d.children,"Cannot specify children on an index route"),Re(!c[m],'Found a route id collision on id "'+m+`". Route id's must be globally unique within Data Router usages`),yg(d)){let h=Qe({},d,i(d),{id:m});return c[m]=h,h}else{let h=Qe({},d,i(d),{id:m,children:void 0});return c[m]=h,d.children&&(h.children=Si(d.children,i,f,c)),h}})}function _o(a,i,s){return s===void 0&&(s="/"),yi(a,i,s,!1)}function yi(a,i,s,c){let d=typeof i=="string"?_n(i):i,p=jn(d.pathname||"/",s);if(p==null)return null;let f=Xd(a);Sg(f);let m=null;for(let h=0;m==null&&h<f.length;++h){let S=Tg(p);m=_g(f[h],S,c)}return m}function vg(a,i){let{route:s,pathname:c,params:d}=a;return{id:s.id,pathname:c,params:d,data:i[s.id],handle:s.handle}}function Xd(a,i,s,c){i===void 0&&(i=[]),s===void 0&&(s=[]),c===void 0&&(c="");let d=(p,f,m)=>{let h={relativePath:m===void 0?p.path||"":m,caseSensitive:p.caseSensitive===!0,childrenIndex:f,route:p};h.relativePath.startsWith("/")&&(Re(h.relativePath.startsWith(c),'Absolute route path "'+h.relativePath+'" nested under path '+('"'+c+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),h.relativePath=h.relativePath.slice(c.length));let S=Cn([c,h.relativePath]),b=s.concat(h);p.children&&p.children.length>0&&(Re(p.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+S+'".')),Xd(p.children,i,b,S)),!(p.path==null&&!p.index)&&i.push({path:S,score:Cg(S,p.index),routesMeta:b})};return a.forEach((p,f)=>{var m;if(p.path===""||!((m=p.path)!=null&&m.includes("?")))d(p,f);else for(let h of Kd(p.path))d(p,f,h)}),i}function Kd(a){let i=a.split("/");if(i.length===0)return[];let[s,...c]=i,d=s.endsWith("?"),p=s.replace(/\?$/,"");if(c.length===0)return d?[p,""]:[p];let f=Kd(c.join("/")),m=[];return m.push(...f.map(h=>h===""?p:[p,h].join("/"))),d&&m.push(...f),m.map(h=>a.startsWith("/")&&h===""?"/":h)}function Sg(a){a.sort((i,s)=>i.score!==s.score?s.score-i.score:jg(i.routesMeta.map(c=>c.childrenIndex),s.routesMeta.map(c=>c.childrenIndex)))}const wg=/^:[\w-]+$/,kg=3,Pg=2,Rg=1,bg=10,xg=-2,hd=a=>a==="*";function Cg(a,i){let s=a.split("/"),c=s.length;return s.some(hd)&&(c+=xg),i&&(c+=Pg),s.filter(d=>!hd(d)).reduce((d,p)=>d+(wg.test(p)?kg:p===""?Rg:bg),c)}function jg(a,i){return a.length===i.length&&a.slice(0,-1).every((c,d)=>c===i[d])?a[a.length-1]-i[i.length-1]:0}function _g(a,i,s){s===void 0&&(s=!1);let{routesMeta:c}=a,d={},p="/",f=[];for(let m=0;m<c.length;++m){let h=c[m],S=m===c.length-1,b=p==="/"?i:i.slice(p.length)||"/",x=wi({path:h.relativePath,caseSensitive:h.caseSensitive,end:S},b),M=h.route;if(!x&&S&&s&&!c[c.length-1].route.index&&(x=wi({path:h.relativePath,caseSensitive:h.caseSensitive,end:!1},b)),!x)return null;Object.assign(d,x.params),f.push({params:d,pathname:Cn([p,x.pathname]),pathnameBase:Og(Cn([p,x.pathnameBase])),route:M}),x.pathnameBase!=="/"&&(p=Cn([p,x.pathnameBase]))}return f}function wi(a,i){typeof a=="string"&&(a={path:a,caseSensitive:!1,end:!0});let[s,c]=Eg(a.path,a.caseSensitive,a.end),d=i.match(s);if(!d)return null;let p=d[0],f=p.replace(/(.)\/+$/,"$1"),m=d.slice(1);return{params:c.reduce((S,b,x)=>{let{paramName:M,isOptional:I}=b;if(M==="*"){let F=m[x]||"";f=p.slice(0,p.length-F.length).replace(/(.)\/+$/,"$1")}const H=m[x];return I&&!H?S[M]=void 0:S[M]=(H||"").replace(/%2F/g,"/"),S},{}),pathname:p,pathnameBase:f,pattern:a}}function Eg(a,i,s){i===void 0&&(i=!1),s===void 0&&(s=!0),ro(a==="*"||!a.endsWith("*")||a.endsWith("/*"),'Route path "'+a+'" will be treated as if it were '+('"'+a.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+a.replace(/\*$/,"/*")+'".'));let c=[],d="^"+a.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(f,m,h)=>(c.push({paramName:m,isOptional:h!=null}),h?"/?([^\\/]+)?":"/([^\\/]+)"));return a.endsWith("*")?(c.push({paramName:"*"}),d+=a==="*"||a==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):s?d+="\\/*$":a!==""&&a!=="/"&&(d+="(?:(?=\\/|$))"),[new RegExp(d,i?void 0:"i"),c]}function Tg(a){try{return a.split("/").map(i=>decodeURIComponent(i).replace(/\//g,"%2F")).join("/")}catch(i){return ro(!1,'The URL path "'+a+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+i+").")),a}}function jn(a,i){if(i==="/")return a;if(!a.toLowerCase().startsWith(i.toLowerCase()))return null;let s=i.endsWith("/")?i.length-1:i.length,c=a.charAt(s);return c&&c!=="/"?null:a.slice(s)||"/"}const Mg=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Lg=a=>Mg.test(a);function Dg(a,i){i===void 0&&(i="/");let{pathname:s,search:c="",hash:d=""}=typeof a=="string"?_n(a):a,p;if(s)if(Lg(s))p=s;else{if(s.includes("//")){let f=s;s=s.replace(/\/\/+/g,"/"),ro(!1,"Pathnames cannot have embedded double slashes - normalizing "+(f+" -> "+s))}s.startsWith("/")?p=md(s.substring(1),"/"):p=md(s,i)}else p=i;return{pathname:p,search:zg(c),hash:Ag(d)}}function md(a,i){let s=i.replace(/\/+$/,"").split("/");return a.split("/").forEach(d=>{d===".."?s.length>1&&s.pop():d!=="."&&s.push(d)}),s.length>1?s.join("/"):"/"}function fs(a,i,s,c){return"Cannot include a '"+a+"' character in a manually specified "+("`to."+i+"` field ["+JSON.stringify(c)+"]. Please separate it out to the ")+("`to."+s+"` field. Alternatively you may provide the full path as ")+'a string in <Link to="..."> and the router will parse it for you.'}function $d(a){return a.filter((i,s)=>s===0||i.route.path&&i.route.path.length>0)}function Cs(a,i){let s=$d(a);return i?s.map((c,d)=>d===s.length-1?c.pathname:c.pathnameBase):s.map(c=>c.pathnameBase)}function js(a,i,s,c){c===void 0&&(c=!1);let d;typeof a=="string"?d=_n(a):(d=Qe({},a),Re(!d.pathname||!d.pathname.includes("?"),fs("?","pathname","search",d)),Re(!d.pathname||!d.pathname.includes("#"),fs("#","pathname","hash",d)),Re(!d.search||!d.search.includes("#"),fs("#","search","hash",d)));let p=a===""||d.pathname==="",f=p?"/":d.pathname,m;if(f==null)m=s;else{let x=i.length-1;if(!c&&f.startsWith("..")){let M=f.split("/");for(;M[0]==="..";)M.shift(),x-=1;d.pathname=M.join("/")}m=x>=0?i[x]:"/"}let h=Dg(d,m),S=f&&f!=="/"&&f.endsWith("/"),b=(p||f===".")&&s.endsWith("/");return!h.pathname.endsWith("/")&&(S||b)&&(h.pathname+="/"),h}const Cn=a=>a.join("/").replace(/\/\/+/g,"/"),Og=a=>a.replace(/\/+$/,"").replace(/^\/*/,"/"),zg=a=>!a||a==="?"?"":a.startsWith("?")?a:"?"+a,Ag=a=>!a||a==="#"?"":a.startsWith("#")?a:"#"+a;class ki{constructor(i,s,c,d){d===void 0&&(d=!1),this.status=i,this.statusText=s||"",this.internal=d,c instanceof Error?(this.data=c.toString(),this.error=c):this.data=c}}function er(a){return a!=null&&typeof a.status=="number"&&typeof a.statusText=="string"&&typeof a.internal=="boolean"&&"data"in a}const Qd=["post","put","patch","delete"],Ng=new Set(Qd),Ig=["get",...Qd],Fg=new Set(Ig),Bg=new Set([301,302,303,307,308]),Ug=new Set([307,308]),gs={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Wg={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Qa={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},_s=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Hg=a=>({hasErrorBoundary:!!a.hasErrorBoundary}),Gd="remix-router-transitions";function Vg(a){const i=a.window?a.window:typeof window<"u"?window:void 0,s=typeof i<"u"&&typeof i.document<"u"&&typeof i.document.createElement<"u",c=!s;Re(a.routes.length>0,"You must provide a non-empty routes array to createRouter");let d;if(a.mapRouteProperties)d=a.mapRouteProperties;else if(a.detectErrorBoundary){let y=a.detectErrorBoundary;d=P=>({hasErrorBoundary:y(P)})}else d=Hg;let p={},f=Si(a.routes,d,void 0,p),m,h=a.basename||"/",S=a.dataStrategy||$g,b=a.patchRoutesOnNavigation,x=Qe({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},a.future),M=null,I=new Set,H=null,F=null,W=null,ge=a.hydrationData!=null,X=_o(f,a.history.location,h),ue=!1,re=null;if(X==null&&!b){let y=Et(404,{pathname:a.history.location.pathname}),{matches:P,route:E}=jd(f);X=P,re={[E.id]:y}}X&&!a.hydrationData&&po(X,f,a.history.location.pathname).active&&(X=null);let be;if(X)if(X.some(y=>y.route.lazy))be=!1;else if(!X.some(y=>y.route.loader))be=!0;else if(x.v7_partialHydration){let y=a.hydrationData?a.hydrationData.loaderData:null,P=a.hydrationData?a.hydrationData.errors:null;if(P){let E=X.findIndex(D=>P[D.route.id]!==void 0);be=X.slice(0,E+1).every(D=>!ks(D.route,y,P))}else be=X.every(E=>!ks(E.route,y,P))}else be=a.hydrationData!=null;else if(be=!1,X=[],x.v7_partialHydration){let y=po(null,f,a.history.location.pathname);y.active&&y.matches&&(ue=!0,X=y.matches)}let _e,_={historyAction:a.history.action,location:a.history.location,matches:X,initialized:be,navigation:gs,restoreScrollPosition:a.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:a.hydrationData&&a.hydrationData.loaderData||{},actionData:a.hydrationData&&a.hydrationData.actionData||null,errors:a.hydrationData&&a.hydrationData.errors||re,fetchers:new Map,blockers:new Map},Y=it.Pop,ke=!1,ie,Ue=!1,Te=new Map,pe=null,We=!1,Ge=!1,tt=[],Ae=new Set,B=new Map,oe=0,q=-1,k=new Map,L=new Set,de=new Map,ye=new Map,he=new Set,Se=new Map,we=new Map,Ce;function Ne(){if(M=a.history.listen(y=>{let{action:P,location:E,delta:D}=y;if(Ce){Ce(),Ce=void 0;return}ro(we.size===0||D!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let V=Ao({currentLocation:_.location,nextLocation:E,historyAction:P});if(V&&D!=null){let ae=new Promise(ce=>{Ce=ce});a.history.go(D*-1),On(V,{state:"blocked",location:E,proceed(){On(V,{state:"proceeding",proceed:void 0,reset:void 0,location:E}),ae.then(()=>a.history.go(D))},reset(){let ce=new Map(_.blockers);ce.set(V,Qa),ot({blockers:ce})}});return}return Mt(P,E)}),s){sh(i,Te);let y=()=>ch(i,Te);i.addEventListener("pagehide",y),pe=()=>i.removeEventListener("pagehide",y)}return _.initialized||Mt(it.Pop,_.location,{initialHydration:!0}),_e}function ft(){M&&M(),pe&&pe(),I.clear(),ie&&ie.abort(),_.fetchers.forEach((y,P)=>on(P)),_.blockers.forEach((y,P)=>zo(P))}function tn(y){return I.add(y),()=>I.delete(y)}function ot(y,P){P===void 0&&(P={}),_=Qe({},_,y);let E=[],D=[];x.v7_fetcherPersist&&_.fetchers.forEach((V,ae)=>{V.state==="idle"&&(he.has(ae)?D.push(ae):E.push(ae))}),he.forEach(V=>{!_.fetchers.has(V)&&!B.has(V)&&D.push(V)}),[...I].forEach(V=>V(_,{deletedFetchers:D,viewTransitionOpts:P.viewTransitionOpts,flushSync:P.flushSync===!0})),x.v7_fetcherPersist?(E.forEach(V=>_.fetchers.delete(V)),D.forEach(V=>on(V))):D.forEach(V=>he.delete(V))}function Tt(y,P,E){var D,V;let{flushSync:ae}=E===void 0?{}:E,ce=_.actionData!=null&&_.navigation.formMethod!=null&&Zt(_.navigation.formMethod)&&_.navigation.state==="loading"&&((D=y.state)==null?void 0:D._isRedirect)!==!0,J;P.actionData?Object.keys(P.actionData).length>0?J=P.actionData:J=null:ce?J=_.actionData:J=null;let ee=P.loaderData?xd(_.loaderData,P.loaderData,P.matches||[],P.errors):_.loaderData,$=_.blockers;$.size>0&&($=new Map($),$.forEach((xe,lt)=>$.set(lt,Qa)));let G=ke===!0||_.navigation.formMethod!=null&&Zt(_.navigation.formMethod)&&((V=y.state)==null?void 0:V._isRedirect)!==!0;m&&(f=m,m=void 0),We||Y===it.Pop||(Y===it.Push?a.history.push(y,y.state):Y===it.Replace&&a.history.replace(y,y.state));let ve;if(Y===it.Pop){let xe=Te.get(_.location.pathname);xe&&xe.has(y.pathname)?ve={currentLocation:_.location,nextLocation:y}:Te.has(y.pathname)&&(ve={currentLocation:y,nextLocation:_.location})}else if(Ue){let xe=Te.get(_.location.pathname);xe?xe.add(y.pathname):(xe=new Set([y.pathname]),Te.set(_.location.pathname,xe)),ve={currentLocation:_.location,nextLocation:y}}ot(Qe({},P,{actionData:J,loaderData:ee,historyAction:Y,location:y,initialized:!0,navigation:gs,revalidation:"idle",restoreScrollPosition:fa(y,P.matches||_.matches),preventScrollReset:G,blockers:$}),{viewTransitionOpts:ve,flushSync:ae===!0}),Y=it.Pop,ke=!1,Ue=!1,We=!1,Ge=!1,tt=[]}async function Tn(y,P){if(typeof y=="number"){a.history.go(y);return}let E=ws(_.location,_.matches,h,x.v7_prependBasename,y,x.v7_relativeSplatPath,P==null?void 0:P.fromRouteId,P==null?void 0:P.relative),{path:D,submission:V,error:ae}=yd(x.v7_normalizeFormMethod,!1,E,P),ce=_.location,J=Za(_.location,D,P&&P.state);J=Qe({},J,a.history.encodeLocation(J));let ee=P&&P.replace!=null?P.replace:void 0,$=it.Push;ee===!0?$=it.Replace:ee===!1||V!=null&&Zt(V.formMethod)&&V.formAction===_.location.pathname+_.location.search&&($=it.Replace);let G=P&&"preventScrollReset"in P?P.preventScrollReset===!0:void 0,ve=(P&&P.flushSync)===!0,xe=Ao({currentLocation:ce,nextLocation:J,historyAction:$});if(xe){On(xe,{state:"blocked",location:J,proceed(){On(xe,{state:"proceeding",proceed:void 0,reset:void 0,location:J}),Tn(y,P)},reset(){let lt=new Map(_.blockers);lt.set(xe,Qa),ot({blockers:lt})}});return}return await Mt($,J,{submission:V,pendingError:ae,preventScrollReset:G,replace:P&&P.replace,enableViewTransition:P&&P.viewTransition,flushSync:ve})}function lo(){if(uo(),ot({revalidation:"loading"}),_.navigation.state!=="submitting"){if(_.navigation.state==="idle"){Mt(_.historyAction,_.location,{startUninterruptedRevalidation:!0});return}Mt(Y||_.historyAction,_.navigation.location,{overrideNavigation:_.navigation,enableViewTransition:Ue===!0})}}async function Mt(y,P,E){ie&&ie.abort(),ie=null,Y=y,We=(E&&E.startUninterruptedRevalidation)===!0,ir(_.location,_.matches),ke=(E&&E.preventScrollReset)===!0,Ue=(E&&E.enableViewTransition)===!0;let D=m||f,V=E&&E.overrideNavigation,ae=E!=null&&E.initialHydration&&_.matches&&_.matches.length>0&&!ue?_.matches:_o(D,P,h),ce=(E&&E.flushSync)===!0;if(ae&&_.initialized&&!Ge&&eh(_.location,P)&&!(E&&E.submission&&Zt(E.submission.formMethod))){Tt(P,{matches:ae},{flushSync:ce});return}let J=po(ae,D,P.pathname);if(J.active&&J.matches&&(ae=J.matches),!ae){let{error:Ie,notFoundMatches:Ee,route:qe}=an(P.pathname);Tt(P,{matches:Ee,loaderData:{},errors:{[qe.id]:Ie}},{flushSync:ce});return}ie=new AbortController;let ee=ia(a.history,P,ie.signal,E&&E.submission),$;if(E&&E.pendingError)$=[Eo(ae).route.id,{type:Be.error,error:E.pendingError}];else if(E&&E.submission&&Zt(E.submission.formMethod)){let Ie=await Mn(ee,P,E.submission,ae,J.active,{replace:E.replace,flushSync:ce});if(Ie.shortCircuited)return;if(Ie.pendingActionResult){let[Ee,qe]=Ie.pendingActionResult;if(Nt(qe)&&er(qe.error)&&qe.error.status===404){ie=null,Tt(P,{matches:Ie.matches,loaderData:{},errors:{[Ee]:qe.error}});return}}ae=Ie.matches||ae,$=Ie.pendingActionResult,V=hs(P,E.submission),ce=!1,J.active=!1,ee=ia(a.history,ee.url,ee.signal)}let{shortCircuited:G,matches:ve,loaderData:xe,errors:lt}=await so(ee,P,ae,J.active,V,E&&E.submission,E&&E.fetcherSubmission,E&&E.replace,E&&E.initialHydration===!0,ce,$);G||(ie=null,Tt(P,Qe({matches:ve||ae},Cd($),{loaderData:xe,errors:lt})))}async function Mn(y,P,E,D,V,ae){ae===void 0&&(ae={}),uo();let ce=ih(P,E);if(ot({navigation:ce},{flushSync:ae.flushSync===!0}),V){let $=await zn(D,P.pathname,y.signal);if($.type==="aborted")return{shortCircuited:!0};if($.type==="error"){let G=Eo($.partialMatches).route.id;return{matches:$.partialMatches,pendingActionResult:[G,{type:Be.error,error:$.error}]}}else if($.matches)D=$.matches;else{let{notFoundMatches:G,error:ve,route:xe}=an(P.pathname);return{matches:G,pendingActionResult:[xe.id,{type:Be.error,error:ve}]}}}let J,ee=Ja(D,P);if(!ee.route.action&&!ee.route.lazy)J={type:Be.error,error:Et(405,{method:y.method,pathname:P.pathname,routeId:ee.route.id})};else if(J=(await Ln("action",_,y,[ee],D,null))[ee.route.id],y.signal.aborted)return{shortCircuited:!0};if(To(J)){let $;return ae&&ae.replace!=null?$=ae.replace:$=Pd(J.response.headers.get("Location"),new URL(y.url),h,a.history)===_.location.pathname+_.location.search,await nn(y,J,!0,{submission:E,replace:$}),{shortCircuited:!0}}if(ao(J))throw Et(400,{type:"defer-action"});if(Nt(J)){let $=Eo(D,ee.route.id);return(ae&&ae.replace)!==!0&&(Y=it.Push),{matches:D,pendingActionResult:[$.route.id,J]}}return{matches:D,pendingActionResult:[ee.route.id,J]}}async function so(y,P,E,D,V,ae,ce,J,ee,$,G){let ve=V||hs(P,ae),xe=ae||ce||Ed(ve),lt=!We&&(!x.v7_partialHydration||!ee);if(D){if(lt){let He=me(G);ot(Qe({navigation:ve},He!==void 0?{actionData:He}:{}),{flushSync:$})}let je=await zn(E,P.pathname,y.signal);if(je.type==="aborted")return{shortCircuited:!0};if(je.type==="error"){let He=Eo(je.partialMatches).route.id;return{matches:je.partialMatches,loaderData:{},errors:{[He]:je.error}}}else if(je.matches)E=je.matches;else{let{error:He,notFoundMatches:gt,route:ho}=an(P.pathname);return{matches:gt,loaderData:{},errors:{[ho.id]:He}}}}let Ie=m||f,[Ee,qe]=Sd(a.history,_,E,xe,P,x.v7_partialHydration&&ee===!0,x.v7_skipActionErrorRevalidation,Ge,tt,Ae,he,de,L,Ie,h,G);if(rn(je=>!(E&&E.some(He=>He.route.id===je))||Ee&&Ee.some(He=>He.route.id===je)),q=++oe,Ee.length===0&&qe.length===0){let je=ar();return Tt(P,Qe({matches:E,loaderData:{},errors:G&&Nt(G[1])?{[G[0]]:G[1].error}:null},Cd(G),je?{fetchers:new Map(_.fetchers)}:{}),{flushSync:$}),{shortCircuited:!0}}if(lt){let je={};if(!D){je.navigation=ve;let He=me(G);He!==void 0&&(je.actionData=He)}qe.length>0&&(je.fetchers=Ze(qe)),ot(je,{flushSync:$})}qe.forEach(je=>{qt(je.key),je.controller&&B.set(je.key,je.controller)});let gn=()=>qe.forEach(je=>qt(je.key));ie&&ie.signal.addEventListener("abort",gn);let{loaderResults:go,fetcherResults:Xt}=await ca(_,E,Ee,qe,y);if(y.signal.aborted)return{shortCircuited:!0};ie&&ie.signal.removeEventListener("abort",gn),qe.forEach(je=>B.delete(je.key));let Le=fi(go);if(Le)return await nn(y,Le.result,!0,{replace:J}),{shortCircuited:!0};if(Le=fi(Xt),Le)return L.add(Le.key),await nn(y,Le.result,!0,{replace:J}),{shortCircuited:!0};let{loaderData:ga,errors:hn}=bd(_,E,go,G,qe,Xt,Se);Se.forEach((je,He)=>{je.subscribe(gt=>{(gt||je.done)&&Se.delete(He)})}),x.v7_partialHydration&&ee&&_.errors&&(hn=Qe({},_.errors,hn));let ln=ar(),mn=Oo(q),No=ln||mn||qe.length>0;return Qe({matches:E,loaderData:ga,errors:hn},No?{fetchers:new Map(_.fetchers)}:{})}function me(y){if(y&&!Nt(y[1]))return{[y[0]]:y[1].data};if(_.actionData)return Object.keys(_.actionData).length===0?null:_.actionData}function Ze(y){return y.forEach(P=>{let E=_.fetchers.get(P.key),D=Ga(void 0,E?E.data:void 0);_.fetchers.set(P.key,D)}),new Map(_.fetchers)}function at(y,P,E,D){if(c)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");qt(y);let V=(D&&D.flushSync)===!0,ae=m||f,ce=ws(_.location,_.matches,h,x.v7_prependBasename,E,x.v7_relativeSplatPath,P,D==null?void 0:D.relative),J=_o(ae,ce,h),ee=po(J,ae,ce);if(ee.active&&ee.matches&&(J=ee.matches),!J){It(y,P,Et(404,{pathname:ce}),{flushSync:V});return}let{path:$,submission:G,error:ve}=yd(x.v7_normalizeFormMethod,!0,ce,D);if(ve){It(y,P,ve,{flushSync:V});return}let xe=Ja(J,$),lt=(D&&D.preventScrollReset)===!0;if(G&&Zt(G.formMethod)){co(y,P,$,xe,J,ee.active,V,lt,G);return}de.set(y,{routeId:P,path:$}),or(y,P,$,xe,J,ee.active,V,lt,G)}async function co(y,P,E,D,V,ae,ce,J,ee){uo(),de.delete(y);function $(De){if(!De.route.action&&!De.route.lazy){let An=Et(405,{method:ee.formMethod,pathname:E,routeId:P});return It(y,P,An,{flushSync:ce}),!0}return!1}if(!ae&&$(D))return;let G=_.fetchers.get(y);Lt(y,lh(ee,G),{flushSync:ce});let ve=new AbortController,xe=ia(a.history,E,ve.signal,ee);if(ae){let De=await zn(V,new URL(xe.url).pathname,xe.signal,y);if(De.type==="aborted")return;if(De.type==="error"){It(y,P,De.error,{flushSync:ce});return}else if(De.matches){if(V=De.matches,D=Ja(V,E),$(D))return}else{It(y,P,Et(404,{pathname:E}),{flushSync:ce});return}}B.set(y,ve);let lt=oe,Ee=(await Ln("action",_,xe,[D],V,y))[D.route.id];if(xe.signal.aborted){B.get(y)===ve&&B.delete(y);return}if(x.v7_fetcherPersist&&he.has(y)){if(To(Ee)||Nt(Ee)){Lt(y,no(void 0));return}}else{if(To(Ee))if(B.delete(y),q>lt){Lt(y,no(void 0));return}else return L.add(y),Lt(y,Ga(ee)),nn(xe,Ee,!1,{fetcherSubmission:ee,preventScrollReset:J});if(Nt(Ee)){It(y,P,Ee.error);return}}if(ao(Ee))throw Et(400,{type:"defer-action"});let qe=_.navigation.location||_.location,gn=ia(a.history,qe,ve.signal),go=m||f,Xt=_.navigation.state!=="idle"?_o(go,_.navigation.location,h):_.matches;Re(Xt,"Didn't find any matches after fetcher action");let Le=++oe;k.set(y,Le);let ga=Ga(ee,Ee.data);_.fetchers.set(y,ga);let[hn,ln]=Sd(a.history,_,Xt,ee,qe,!1,x.v7_skipActionErrorRevalidation,Ge,tt,Ae,he,de,L,go,h,[D.route.id,Ee]);ln.filter(De=>De.key!==y).forEach(De=>{let An=De.key,sr=_.fetchers.get(An),_i=Ga(void 0,sr?sr.data:void 0);_.fetchers.set(An,_i),qt(An),De.controller&&B.set(An,De.controller)}),ot({fetchers:new Map(_.fetchers)});let mn=()=>ln.forEach(De=>qt(De.key));ve.signal.addEventListener("abort",mn);let{loaderResults:No,fetcherResults:je}=await ca(_,Xt,hn,ln,gn);if(ve.signal.aborted)return;ve.signal.removeEventListener("abort",mn),k.delete(y),B.delete(y),ln.forEach(De=>B.delete(De.key));let He=fi(No);if(He)return nn(gn,He.result,!1,{preventScrollReset:J});if(He=fi(je),He)return L.add(He.key),nn(gn,He.result,!1,{preventScrollReset:J});let{loaderData:gt,errors:ho}=bd(_,Xt,No,void 0,ln,je,Se);if(_.fetchers.has(y)){let De=no(Ee.data);_.fetchers.set(y,De)}Oo(Le),_.navigation.state==="loading"&&Le>q?(Re(Y,"Expected pending action"),ie&&ie.abort(),Tt(_.navigation.location,{matches:Xt,loaderData:gt,errors:ho,fetchers:new Map(_.fetchers)})):(ot({errors:ho,loaderData:xd(_.loaderData,gt,Xt,ho),fetchers:new Map(_.fetchers)}),Ge=!1)}async function or(y,P,E,D,V,ae,ce,J,ee){let $=_.fetchers.get(y);Lt(y,Ga(ee,$?$.data:void 0),{flushSync:ce});let G=new AbortController,ve=ia(a.history,E,G.signal);if(ae){let Ee=await zn(V,new URL(ve.url).pathname,ve.signal,y);if(Ee.type==="aborted")return;if(Ee.type==="error"){It(y,P,Ee.error,{flushSync:ce});return}else if(Ee.matches)V=Ee.matches,D=Ja(V,E);else{It(y,P,Et(404,{pathname:E}),{flushSync:ce});return}}B.set(y,G);let xe=oe,Ie=(await Ln("loader",_,ve,[D],V,y))[D.route.id];if(ao(Ie)&&(Ie=await Es(Ie,ve.signal,!0)||Ie),B.get(y)===G&&B.delete(y),!ve.signal.aborted){if(he.has(y)){Lt(y,no(void 0));return}if(To(Ie))if(q>xe){Lt(y,no(void 0));return}else{L.add(y),await nn(ve,Ie,!1,{preventScrollReset:J});return}if(Nt(Ie)){It(y,P,Ie.error);return}Re(!ao(Ie),"Unhandled fetcher deferred data"),Lt(y,no(Ie.data))}}async function nn(y,P,E,D){let{submission:V,fetcherSubmission:ae,preventScrollReset:ce,replace:J}=D===void 0?{}:D;P.response.headers.has("X-Remix-Revalidate")&&(Ge=!0);let ee=P.response.headers.get("Location");Re(ee,"Expected a Location header on the redirect Response"),ee=Pd(ee,new URL(y.url),h,a.history);let $=Za(_.location,ee,{_isRedirect:!0});if(s){let Ee=!1;if(P.response.headers.has("X-Remix-Reload-Document"))Ee=!0;else if(_s.test(ee)){const qe=a.history.createURL(ee);Ee=qe.origin!==i.location.origin||jn(qe.pathname,h)==null}if(Ee){J?i.location.replace(ee):i.location.assign(ee);return}}ie=null;let G=J===!0||P.response.headers.has("X-Remix-Replace")?it.Replace:it.Push,{formMethod:ve,formAction:xe,formEncType:lt}=_.navigation;!V&&!ae&&ve&&xe&&lt&&(V=Ed(_.navigation));let Ie=V||ae;if(Ug.has(P.response.status)&&Ie&&Zt(Ie.formMethod))await Mt(G,$,{submission:Qe({},Ie,{formAction:ee}),preventScrollReset:ce||ke,enableViewTransition:E?Ue:void 0});else{let Ee=hs($,V);await Mt(G,$,{overrideNavigation:Ee,fetcherSubmission:ae,preventScrollReset:ce||ke,enableViewTransition:E?Ue:void 0})}}async function Ln(y,P,E,D,V,ae){let ce,J={};try{ce=await Qg(S,y,P,E,D,V,ae,p,d)}catch(ee){return D.forEach($=>{J[$.route.id]={type:Be.error,error:ee}}),J}for(let[ee,$]of Object.entries(ce))if(th($)){let G=$.result;J[ee]={type:Be.redirect,response:Jg(G,E,ee,V,h,x.v7_relativeSplatPath)}}else J[ee]=await Yg($);return J}async function ca(y,P,E,D,V){let ae=y.matches,ce=Ln("loader",y,V,E,P,null),J=Promise.all(D.map(async G=>{if(G.matches&&G.match&&G.controller){let xe=(await Ln("loader",y,ia(a.history,G.path,G.controller.signal),[G.match],G.matches,G.key))[G.match.route.id];return{[G.key]:xe}}else return Promise.resolve({[G.key]:{type:Be.error,error:Et(404,{pathname:G.path})}})})),ee=await ce,$=(await J).reduce((G,ve)=>Object.assign(G,ve),{});return await Promise.all([ah(P,ee,V.signal,ae,y.loaderData),rh(P,$,D)]),{loaderResults:ee,fetcherResults:$}}function uo(){Ge=!0,tt.push(...rn()),de.forEach((y,P)=>{B.has(P)&&Ae.add(P),qt(P)})}function Lt(y,P,E){E===void 0&&(E={}),_.fetchers.set(y,P),ot({fetchers:new Map(_.fetchers)},{flushSync:(E&&E.flushSync)===!0})}function It(y,P,E,D){D===void 0&&(D={});let V=Eo(_.matches,P);on(y),ot({errors:{[V.route.id]:E},fetchers:new Map(_.fetchers)},{flushSync:(D&&D.flushSync)===!0})}function Dn(y){return ye.set(y,(ye.get(y)||0)+1),he.has(y)&&he.delete(y),_.fetchers.get(y)||Wg}function on(y){let P=_.fetchers.get(y);B.has(y)&&!(P&&P.state==="loading"&&k.has(y))&&qt(y),de.delete(y),k.delete(y),L.delete(y),x.v7_fetcherPersist&&he.delete(y),Ae.delete(y),_.fetchers.delete(y)}function ji(y){let P=(ye.get(y)||0)-1;P<=0?(ye.delete(y),he.add(y),x.v7_fetcherPersist||on(y)):ye.set(y,P),ot({fetchers:new Map(_.fetchers)})}function qt(y){let P=B.get(y);P&&(P.abort(),B.delete(y))}function ua(y){for(let P of y){let E=Dn(P),D=no(E.data);_.fetchers.set(P,D)}}function ar(){let y=[],P=!1;for(let E of L){let D=_.fetchers.get(E);Re(D,"Expected fetcher: "+E),D.state==="loading"&&(L.delete(E),y.push(E),P=!0)}return ua(y),P}function Oo(y){let P=[];for(let[E,D]of k)if(D<y){let V=_.fetchers.get(E);Re(V,"Expected fetcher: "+E),V.state==="loading"&&(qt(E),k.delete(E),P.push(E))}return ua(P),P.length>0}function da(y,P){let E=_.blockers.get(y)||Qa;return we.get(y)!==P&&we.set(y,P),E}function zo(y){_.blockers.delete(y),we.delete(y)}function On(y,P){let E=_.blockers.get(y)||Qa;Re(E.state==="unblocked"&&P.state==="blocked"||E.state==="blocked"&&P.state==="blocked"||E.state==="blocked"&&P.state==="proceeding"||E.state==="blocked"&&P.state==="unblocked"||E.state==="proceeding"&&P.state==="unblocked","Invalid blocker state transition: "+E.state+" -> "+P.state);let D=new Map(_.blockers);D.set(y,P),ot({blockers:D})}function Ao(y){let{currentLocation:P,nextLocation:E,historyAction:D}=y;if(we.size===0)return;we.size>1&&ro(!1,"A router only supports one blocker at a time");let V=Array.from(we.entries()),[ae,ce]=V[V.length-1],J=_.blockers.get(ae);if(!(J&&J.state==="proceeding")&&ce({currentLocation:P,nextLocation:E,historyAction:D}))return ae}function an(y){let P=Et(404,{pathname:y}),E=m||f,{matches:D,route:V}=jd(E);return rn(),{notFoundMatches:D,route:V,error:P}}function rn(y){let P=[];return Se.forEach((E,D)=>{(!y||y(D))&&(E.cancel(),P.push(D),Se.delete(D))}),P}function rr(y,P,E){if(H=y,W=P,F=E||null,!ge&&_.navigation===gs){ge=!0;let D=fa(_.location,_.matches);D!=null&&ot({restoreScrollPosition:D})}return()=>{H=null,W=null,F=null}}function pa(y,P){return F&&F(y,P.map(D=>vg(D,_.loaderData)))||y.key}function ir(y,P){if(H&&W){let E=pa(y,P);H[E]=W()}}function fa(y,P){if(H){let E=pa(y,P),D=H[E];if(typeof D=="number")return D}return null}function po(y,P,E){if(b)if(y){if(Object.keys(y[0].params).length>0)return{active:!0,matches:yi(P,E,h,!0)}}else return{active:!0,matches:yi(P,E,h,!0)||[]};return{active:!1,matches:null}}async function zn(y,P,E,D){if(!b)return{type:"success",matches:y};let V=y;for(;;){let ae=m==null,ce=m||f,J=p;try{await b({signal:E,path:P,matches:V,fetcherKey:D,patch:(G,ve)=>{E.aborted||kd(G,ve,ce,J,d)}})}catch(G){return{type:"error",error:G,partialMatches:V}}finally{ae&&!E.aborted&&(f=[...f])}if(E.aborted)return{type:"aborted"};let ee=_o(ce,P,h);if(ee)return{type:"success",matches:ee};let $=yi(ce,P,h,!0);if(!$||V.length===$.length&&V.every((G,ve)=>G.route.id===$[ve].route.id))return{type:"success",matches:null};V=$}}function lr(y){p={},m=Si(y,d,void 0,p)}function fo(y,P){let E=m==null;kd(y,P,m||f,p,d),E&&(f=[...f],ot({}))}return _e={get basename(){return h},get future(){return x},get state(){return _},get routes(){return f},get window(){return i},initialize:Ne,subscribe:tn,enableScrollRestoration:rr,navigate:Tn,fetch:at,revalidate:lo,createHref:y=>a.history.createHref(y),encodeLocation:y=>a.history.encodeLocation(y),getFetcher:Dn,deleteFetcher:ji,dispose:ft,getBlocker:da,deleteBlocker:zo,patchRoutes:fo,_internalFetchControllers:B,_internalActiveDeferreds:Se,_internalSetRoutes:lr},_e}function qg(a){return a!=null&&("formData"in a&&a.formData!=null||"body"in a&&a.body!==void 0)}function ws(a,i,s,c,d,p,f,m){let h,S;if(f){h=[];for(let x of i)if(h.push(x),x.route.id===f){S=x;break}}else h=i,S=i[i.length-1];let b=js(d||".",Cs(h,p),jn(a.pathname,s)||a.pathname,m==="path");if(d==null&&(b.search=a.search,b.hash=a.hash),(d==null||d===""||d===".")&&S){let x=Ts(b.search);if(S.route.index&&!x)b.search=b.search?b.search.replace(/^\?/,"?index&"):"?index";else if(!S.route.index&&x){let M=new URLSearchParams(b.search),I=M.getAll("index");M.delete("index"),I.filter(F=>F).forEach(F=>M.append("index",F));let H=M.toString();b.search=H?"?"+H:""}}return c&&s!=="/"&&(b.pathname=b.pathname==="/"?s:Cn([s,b.pathname])),Lo(b)}function yd(a,i,s,c){if(!c||!qg(c))return{path:s};if(c.formMethod&&!oh(c.formMethod))return{path:s,error:Et(405,{method:c.formMethod})};let d=()=>({path:s,error:Et(400,{type:"invalid-body"})}),p=c.formMethod||"get",f=a?p.toUpperCase():p.toLowerCase(),m=Zd(s);if(c.body!==void 0){if(c.formEncType==="text/plain"){if(!Zt(f))return d();let M=typeof c.body=="string"?c.body:c.body instanceof FormData||c.body instanceof URLSearchParams?Array.from(c.body.entries()).reduce((I,H)=>{let[F,W]=H;return""+I+F+"="+W+`
51
+ `},""):String(c.body);return{path:s,submission:{formMethod:f,formAction:m,formEncType:c.formEncType,formData:void 0,json:void 0,text:M}}}else if(c.formEncType==="application/json"){if(!Zt(f))return d();try{let M=typeof c.body=="string"?JSON.parse(c.body):c.body;return{path:s,submission:{formMethod:f,formAction:m,formEncType:c.formEncType,formData:void 0,json:M,text:void 0}}}catch{return d()}}}Re(typeof FormData=="function","FormData is not available in this environment");let h,S;if(c.formData)h=Ps(c.formData),S=c.formData;else if(c.body instanceof FormData)h=Ps(c.body),S=c.body;else if(c.body instanceof URLSearchParams)h=c.body,S=Rd(h);else if(c.body==null)h=new URLSearchParams,S=new FormData;else try{h=new URLSearchParams(c.body),S=Rd(h)}catch{return d()}let b={formMethod:f,formAction:m,formEncType:c&&c.formEncType||"application/x-www-form-urlencoded",formData:S,json:void 0,text:void 0};if(Zt(b.formMethod))return{path:s,submission:b};let x=_n(s);return i&&x.search&&Ts(x.search)&&h.append("index",""),x.search="?"+h,{path:Lo(x),submission:b}}function vd(a,i,s){s===void 0&&(s=!1);let c=a.findIndex(d=>d.route.id===i);return c>=0?a.slice(0,s?c+1:c):a}function Sd(a,i,s,c,d,p,f,m,h,S,b,x,M,I,H,F){let W=F?Nt(F[1])?F[1].error:F[1].data:void 0,ge=a.createURL(i.location),X=a.createURL(d),ue=s;p&&i.errors?ue=vd(s,Object.keys(i.errors)[0],!0):F&&Nt(F[1])&&(ue=vd(s,F[0]));let re=F?F[1].statusCode:void 0,be=f&&re&&re>=400,_e=ue.filter((Y,ke)=>{let{route:ie}=Y;if(ie.lazy)return!0;if(ie.loader==null)return!1;if(p)return ks(ie,i.loaderData,i.errors);if(Xg(i.loaderData,i.matches[ke],Y)||h.some(pe=>pe===Y.route.id))return!0;let Ue=i.matches[ke],Te=Y;return wd(Y,Qe({currentUrl:ge,currentParams:Ue.params,nextUrl:X,nextParams:Te.params},c,{actionResult:W,actionStatus:re,defaultShouldRevalidate:be?!1:m||ge.pathname+ge.search===X.pathname+X.search||ge.search!==X.search||Yd(Ue,Te)}))}),_=[];return x.forEach((Y,ke)=>{if(p||!s.some(We=>We.route.id===Y.routeId)||b.has(ke))return;let ie=_o(I,Y.path,H);if(!ie){_.push({key:ke,routeId:Y.routeId,path:Y.path,matches:null,match:null,controller:null});return}let Ue=i.fetchers.get(ke),Te=Ja(ie,Y.path),pe=!1;M.has(ke)?pe=!1:S.has(ke)?(S.delete(ke),pe=!0):Ue&&Ue.state!=="idle"&&Ue.data===void 0?pe=m:pe=wd(Te,Qe({currentUrl:ge,currentParams:i.matches[i.matches.length-1].params,nextUrl:X,nextParams:s[s.length-1].params},c,{actionResult:W,actionStatus:re,defaultShouldRevalidate:be?!1:m})),pe&&_.push({key:ke,routeId:Y.routeId,path:Y.path,matches:ie,match:Te,controller:new AbortController})}),[_e,_]}function ks(a,i,s){if(a.lazy)return!0;if(!a.loader)return!1;let c=i!=null&&i[a.id]!==void 0,d=s!=null&&s[a.id]!==void 0;return!c&&d?!1:typeof a.loader=="function"&&a.loader.hydrate===!0?!0:!c&&!d}function Xg(a,i,s){let c=!i||s.route.id!==i.route.id,d=a[s.route.id]===void 0;return c||d}function Yd(a,i){let s=a.route.path;return a.pathname!==i.pathname||s!=null&&s.endsWith("*")&&a.params["*"]!==i.params["*"]}function wd(a,i){if(a.route.shouldRevalidate){let s=a.route.shouldRevalidate(i);if(typeof s=="boolean")return s}return i.defaultShouldRevalidate}function kd(a,i,s,c,d){var p;let f;if(a){let S=c[a];Re(S,"No route found to patch children into: routeId = "+a),S.children||(S.children=[]),f=S.children}else f=s;let m=i.filter(S=>!f.some(b=>Jd(S,b))),h=Si(m,d,[a||"_","patch",String(((p=f)==null?void 0:p.length)||"0")],c);f.push(...h)}function Jd(a,i){return"id"in a&&"id"in i&&a.id===i.id?!0:a.index===i.index&&a.path===i.path&&a.caseSensitive===i.caseSensitive?(!a.children||a.children.length===0)&&(!i.children||i.children.length===0)?!0:a.children.every((s,c)=>{var d;return(d=i.children)==null?void 0:d.some(p=>Jd(s,p))}):!1}async function Kg(a,i,s){if(!a.lazy)return;let c=await a.lazy();if(!a.lazy)return;let d=s[a.id];Re(d,"No route found in manifest");let p={};for(let f in c){let h=d[f]!==void 0&&f!=="hasErrorBoundary";ro(!h,'Route "'+d.id+'" has a static property "'+f+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+f+'" will be ignored.')),!h&&!mg.has(f)&&(p[f]=c[f])}Object.assign(d,p),Object.assign(d,Qe({},i(d),{lazy:void 0}))}async function $g(a){let{matches:i}=a,s=i.filter(d=>d.shouldLoad);return(await Promise.all(s.map(d=>d.resolve()))).reduce((d,p,f)=>Object.assign(d,{[s[f].route.id]:p}),{})}async function Qg(a,i,s,c,d,p,f,m,h,S){let b=p.map(I=>I.route.lazy?Kg(I.route,h,m):void 0),x=p.map((I,H)=>{let F=b[H],W=d.some(X=>X.route.id===I.route.id);return Qe({},I,{shouldLoad:W,resolve:async X=>(X&&c.method==="GET"&&(I.route.lazy||I.route.loader)&&(W=!0),W?Gg(i,c,I,F,X,S):Promise.resolve({type:Be.data,result:void 0}))})}),M=await a({matches:x,request:c,params:p[0].params,fetcherKey:f,context:S});try{await Promise.all(b)}catch{}return M}async function Gg(a,i,s,c,d,p){let f,m,h=S=>{let b,x=new Promise((H,F)=>b=F);m=()=>b(),i.signal.addEventListener("abort",m);let M=H=>typeof S!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+a+'" [routeId: '+s.route.id+"]"))):S({request:i,params:s.params,context:p},...H!==void 0?[H]:[]),I=(async()=>{try{return{type:"data",result:await(d?d(F=>M(F)):M())}}catch(H){return{type:"error",result:H}}})();return Promise.race([I,x])};try{let S=s.route[a];if(c)if(S){let b,[x]=await Promise.all([h(S).catch(M=>{b=M}),c]);if(b!==void 0)throw b;f=x}else if(await c,S=s.route[a],S)f=await h(S);else if(a==="action"){let b=new URL(i.url),x=b.pathname+b.search;throw Et(405,{method:i.method,pathname:x,routeId:s.route.id})}else return{type:Be.data,result:void 0};else if(S)f=await h(S);else{let b=new URL(i.url),x=b.pathname+b.search;throw Et(404,{pathname:x})}Re(f.result!==void 0,"You defined "+(a==="action"?"an action":"a loader")+" for route "+('"'+s.route.id+"\" but didn't return anything from your `"+a+"` ")+"function. Please return a value or `null`.")}catch(S){return{type:Be.error,result:S}}finally{m&&i.signal.removeEventListener("abort",m)}return f}async function Yg(a){let{result:i,type:s}=a;if(ep(i)){let x;try{let M=i.headers.get("Content-Type");M&&/\bapplication\/json\b/.test(M)?i.body==null?x=null:x=await i.json():x=await i.text()}catch(M){return{type:Be.error,error:M}}return s===Be.error?{type:Be.error,error:new ki(i.status,i.statusText,x),statusCode:i.status,headers:i.headers}:{type:Be.data,data:x,statusCode:i.status,headers:i.headers}}if(s===Be.error){if(_d(i)){var c,d;if(i.data instanceof Error){var p,f;return{type:Be.error,error:i.data,statusCode:(p=i.init)==null?void 0:p.status,headers:(f=i.init)!=null&&f.headers?new Headers(i.init.headers):void 0}}return{type:Be.error,error:new ki(((c=i.init)==null?void 0:c.status)||500,void 0,i.data),statusCode:er(i)?i.status:void 0,headers:(d=i.init)!=null&&d.headers?new Headers(i.init.headers):void 0}}return{type:Be.error,error:i,statusCode:er(i)?i.status:void 0}}if(nh(i)){var m,h;return{type:Be.deferred,deferredData:i,statusCode:(m=i.init)==null?void 0:m.status,headers:((h=i.init)==null?void 0:h.headers)&&new Headers(i.init.headers)}}if(_d(i)){var S,b;return{type:Be.data,data:i.data,statusCode:(S=i.init)==null?void 0:S.status,headers:(b=i.init)!=null&&b.headers?new Headers(i.init.headers):void 0}}return{type:Be.data,data:i}}function Jg(a,i,s,c,d,p){let f=a.headers.get("Location");if(Re(f,"Redirects returned/thrown from loaders/actions must have a Location header"),!_s.test(f)){let m=c.slice(0,c.findIndex(h=>h.route.id===s)+1);f=ws(new URL(i.url),m,d,!0,f,p),a.headers.set("Location",f)}return a}function Pd(a,i,s,c){let d=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];if(_s.test(a)){let p=a,f=p.startsWith("//")?new URL(i.protocol+p):new URL(p);if(d.includes(f.protocol))throw new Error("Invalid redirect location");let m=jn(f.pathname,s)!=null;if(f.origin===i.origin&&m)return f.pathname+f.search+f.hash}try{let p=c.createURL(a);if(d.includes(p.protocol))throw new Error("Invalid redirect location")}catch{}return a}function ia(a,i,s,c){let d=a.createURL(Zd(i)).toString(),p={signal:s};if(c&&Zt(c.formMethod)){let{formMethod:f,formEncType:m}=c;p.method=f.toUpperCase(),m==="application/json"?(p.headers=new Headers({"Content-Type":m}),p.body=JSON.stringify(c.json)):m==="text/plain"?p.body=c.text:m==="application/x-www-form-urlencoded"&&c.formData?p.body=Ps(c.formData):p.body=c.formData}return new Request(d,p)}function Ps(a){let i=new URLSearchParams;for(let[s,c]of a.entries())i.append(s,typeof c=="string"?c:c.name);return i}function Rd(a){let i=new FormData;for(let[s,c]of a.entries())i.append(s,c);return i}function Zg(a,i,s,c,d){let p={},f=null,m,h=!1,S={},b=s&&Nt(s[1])?s[1].error:void 0;return a.forEach(x=>{if(!(x.route.id in i))return;let M=x.route.id,I=i[M];if(Re(!To(I),"Cannot handle redirect results in processLoaderData"),Nt(I)){let H=I.error;b!==void 0&&(H=b,b=void 0),f=f||{};{let F=Eo(a,M);f[F.route.id]==null&&(f[F.route.id]=H)}p[M]=void 0,h||(h=!0,m=er(I.error)?I.error.status:500),I.headers&&(S[M]=I.headers)}else ao(I)?(c.set(M,I.deferredData),p[M]=I.deferredData.data,I.statusCode!=null&&I.statusCode!==200&&!h&&(m=I.statusCode),I.headers&&(S[M]=I.headers)):(p[M]=I.data,I.statusCode&&I.statusCode!==200&&!h&&(m=I.statusCode),I.headers&&(S[M]=I.headers))}),b!==void 0&&s&&(f={[s[0]]:b},p[s[0]]=void 0),{loaderData:p,errors:f,statusCode:m||200,loaderHeaders:S}}function bd(a,i,s,c,d,p,f){let{loaderData:m,errors:h}=Zg(i,s,c,f);return d.forEach(S=>{let{key:b,match:x,controller:M}=S,I=p[b];if(Re(I,"Did not find corresponding fetcher result"),!(M&&M.signal.aborted))if(Nt(I)){let H=Eo(a.matches,x==null?void 0:x.route.id);h&&h[H.route.id]||(h=Qe({},h,{[H.route.id]:I.error})),a.fetchers.delete(b)}else if(To(I))Re(!1,"Unhandled fetcher revalidation redirect");else if(ao(I))Re(!1,"Unhandled fetcher deferred data");else{let H=no(I.data);a.fetchers.set(b,H)}}),{loaderData:m,errors:h}}function xd(a,i,s,c){let d=Qe({},i);for(let p of s){let f=p.route.id;if(i.hasOwnProperty(f)?i[f]!==void 0&&(d[f]=i[f]):a[f]!==void 0&&p.route.loader&&(d[f]=a[f]),c&&c.hasOwnProperty(f))break}return d}function Cd(a){return a?Nt(a[1])?{actionData:{}}:{actionData:{[a[0]]:a[1].data}}:{}}function Eo(a,i){return(i?a.slice(0,a.findIndex(c=>c.route.id===i)+1):[...a]).reverse().find(c=>c.route.hasErrorBoundary===!0)||a[0]}function jd(a){let i=a.length===1?a[0]:a.find(s=>s.index||!s.path||s.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:i}],route:i}}function Et(a,i){let{pathname:s,routeId:c,method:d,type:p,message:f}=i===void 0?{}:i,m="Unknown Server Error",h="Unknown @remix-run/router error";return a===400?(m="Bad Request",d&&s&&c?h="You made a "+d+' request to "'+s+'" but '+('did not provide a `loader` for route "'+c+'", ')+"so there is no way to handle the request.":p==="defer-action"?h="defer() is not supported in actions":p==="invalid-body"&&(h="Unable to encode submission body")):a===403?(m="Forbidden",h='Route "'+c+'" does not match URL "'+s+'"'):a===404?(m="Not Found",h='No route matches URL "'+s+'"'):a===405&&(m="Method Not Allowed",d&&s&&c?h="You made a "+d.toUpperCase()+' request to "'+s+'" but '+('did not provide an `action` for route "'+c+'", ')+"so there is no way to handle the request.":d&&(h='Invalid request method "'+d.toUpperCase()+'"')),new ki(a||500,m,new Error(h),!0)}function fi(a){let i=Object.entries(a);for(let s=i.length-1;s>=0;s--){let[c,d]=i[s];if(To(d))return{key:c,result:d}}}function Zd(a){let i=typeof a=="string"?_n(a):a;return Lo(Qe({},i,{hash:""}))}function eh(a,i){return a.pathname!==i.pathname||a.search!==i.search?!1:a.hash===""?i.hash!=="":a.hash===i.hash?!0:i.hash!==""}function th(a){return ep(a.result)&&Bg.has(a.result.status)}function ao(a){return a.type===Be.deferred}function Nt(a){return a.type===Be.error}function To(a){return(a&&a.type)===Be.redirect}function _d(a){return typeof a=="object"&&a!=null&&"type"in a&&"data"in a&&"init"in a&&a.type==="DataWithResponseInit"}function nh(a){let i=a;return i&&typeof i=="object"&&typeof i.data=="object"&&typeof i.subscribe=="function"&&typeof i.cancel=="function"&&typeof i.resolveData=="function"}function ep(a){return a!=null&&typeof a.status=="number"&&typeof a.statusText=="string"&&typeof a.headers=="object"&&typeof a.body<"u"}function oh(a){return Fg.has(a.toLowerCase())}function Zt(a){return Ng.has(a.toLowerCase())}async function ah(a,i,s,c,d){let p=Object.entries(i);for(let f=0;f<p.length;f++){let[m,h]=p[f],S=a.find(M=>(M==null?void 0:M.route.id)===m);if(!S)continue;let b=c.find(M=>M.route.id===S.route.id),x=b!=null&&!Yd(b,S)&&(d&&d[S.route.id])!==void 0;ao(h)&&x&&await Es(h,s,!1).then(M=>{M&&(i[m]=M)})}}async function rh(a,i,s){for(let c=0;c<s.length;c++){let{key:d,routeId:p,controller:f}=s[c],m=i[d];a.find(S=>(S==null?void 0:S.route.id)===p)&&ao(m)&&(Re(f,"Expected an AbortController for revalidating fetcher deferred result"),await Es(m,f.signal,!0).then(S=>{S&&(i[d]=S)}))}}async function Es(a,i,s){if(s===void 0&&(s=!1),!await a.deferredData.resolveData(i)){if(s)try{return{type:Be.data,data:a.deferredData.unwrappedData}}catch(d){return{type:Be.error,error:d}}return{type:Be.data,data:a.deferredData.data}}}function Ts(a){return new URLSearchParams(a).getAll("index").some(i=>i==="")}function Ja(a,i){let s=typeof i=="string"?_n(i).search:i.search;if(a[a.length-1].route.index&&Ts(s||""))return a[a.length-1];let c=$d(a);return c[c.length-1]}function Ed(a){let{formMethod:i,formAction:s,formEncType:c,text:d,formData:p,json:f}=a;if(!(!i||!s||!c)){if(d!=null)return{formMethod:i,formAction:s,formEncType:c,formData:void 0,json:void 0,text:d};if(p!=null)return{formMethod:i,formAction:s,formEncType:c,formData:p,json:void 0,text:void 0};if(f!==void 0)return{formMethod:i,formAction:s,formEncType:c,formData:void 0,json:f,text:void 0}}}function hs(a,i){return i?{state:"loading",location:a,formMethod:i.formMethod,formAction:i.formAction,formEncType:i.formEncType,formData:i.formData,json:i.json,text:i.text}:{state:"loading",location:a,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function ih(a,i){return{state:"submitting",location:a,formMethod:i.formMethod,formAction:i.formAction,formEncType:i.formEncType,formData:i.formData,json:i.json,text:i.text}}function Ga(a,i){return a?{state:"loading",formMethod:a.formMethod,formAction:a.formAction,formEncType:a.formEncType,formData:a.formData,json:a.json,text:a.text,data:i}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:i}}function lh(a,i){return{state:"submitting",formMethod:a.formMethod,formAction:a.formAction,formEncType:a.formEncType,formData:a.formData,json:a.json,text:a.text,data:i?i.data:void 0}}function no(a){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:a}}function sh(a,i){try{let s=a.sessionStorage.getItem(Gd);if(s){let c=JSON.parse(s);for(let[d,p]of Object.entries(c||{}))p&&Array.isArray(p)&&i.set(d,new Set(p||[]))}}catch{}}function ch(a,i){if(i.size>0){let s={};for(let[c,d]of i)s[c]=[...d];try{a.sessionStorage.setItem(Gd,JSON.stringify(s))}catch(c){ro(!1,"Failed to save applied view transitions in sessionStorage ("+c+").")}}}/**
52
+ * React Router v6.30.3
53
+ *
54
+ * Copyright (c) Remix Software Inc.
55
+ *
56
+ * This source code is licensed under the MIT license found in the
57
+ * LICENSE.md file in the root directory of this source tree.
58
+ *
59
+ * @license MIT
60
+ */function Pi(){return Pi=Object.assign?Object.assign.bind():function(a){for(var i=1;i<arguments.length;i++){var s=arguments[i];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(a[c]=s[c])}return a},Pi.apply(this,arguments)}const tr=T.createContext(null),Ms=T.createContext(null),io=T.createContext(null),Ls=T.createContext(null),En=T.createContext({outlet:null,matches:[],isDataRoute:!1}),tp=T.createContext(null);function uh(a,i){let{relative:s}=i===void 0?{}:i;nr()||Re(!1);let{basename:c,navigator:d}=T.useContext(io),{hash:p,pathname:f,search:m}=bi(a,{relative:s}),h=f;return c!=="/"&&(h=f==="/"?c:Cn([c,f])),d.createHref({pathname:h,search:m,hash:p})}function nr(){return T.useContext(Ls)!=null}function Do(){return nr()||Re(!1),T.useContext(Ls).location}function np(a){T.useContext(io).static||T.useLayoutEffect(a)}function dh(){let{isDataRoute:a}=T.useContext(En);return a?xh():ph()}function ph(){nr()||Re(!1);let a=T.useContext(tr),{basename:i,future:s,navigator:c}=T.useContext(io),{matches:d}=T.useContext(En),{pathname:p}=Do(),f=JSON.stringify(Cs(d,s.v7_relativeSplatPath)),m=T.useRef(!1);return np(()=>{m.current=!0}),T.useCallback(function(S,b){if(b===void 0&&(b={}),!m.current)return;if(typeof S=="number"){c.go(S);return}let x=js(S,JSON.parse(f),p,b.relative==="path");a==null&&i!=="/"&&(x.pathname=x.pathname==="/"?i:Cn([i,x.pathname])),(b.replace?c.replace:c.push)(x,b.state,b)},[i,c,f,p,a])}const fh=T.createContext(null);function gh(a){let i=T.useContext(En).outlet;return i&&T.createElement(fh.Provider,{value:a},i)}function rv(){let{matches:a}=T.useContext(En),i=a[a.length-1];return i?i.params:{}}function bi(a,i){let{relative:s}=i===void 0?{}:i,{future:c}=T.useContext(io),{matches:d}=T.useContext(En),{pathname:p}=Do(),f=JSON.stringify(Cs(d,c.v7_relativeSplatPath));return T.useMemo(()=>js(a,JSON.parse(f),p,s==="path"),[a,f,p,s])}function hh(a,i,s,c){nr()||Re(!1);let{navigator:d}=T.useContext(io),{matches:p}=T.useContext(En),f=p[p.length-1],m=f?f.params:{};f&&f.pathname;let h=f?f.pathnameBase:"/";f&&f.route;let S=Do(),b;b=S;let x=b.pathname||"/",M=x;if(h!=="/"){let F=h.replace(/^\//,"").split("/");M="/"+x.replace(/^\//,"").split("/").slice(F.length).join("/")}let I=_o(a,{pathname:M});return wh(I&&I.map(F=>Object.assign({},F,{params:Object.assign({},m,F.params),pathname:Cn([h,d.encodeLocation?d.encodeLocation(F.pathname).pathname:F.pathname]),pathnameBase:F.pathnameBase==="/"?h:Cn([h,d.encodeLocation?d.encodeLocation(F.pathnameBase).pathname:F.pathnameBase])})),p,s,c)}function mh(){let a=bh(),i=er(a)?a.status+" "+a.statusText:a instanceof Error?a.message:JSON.stringify(a),s=a instanceof Error?a.stack:null,d={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return T.createElement(T.Fragment,null,T.createElement("h2",null,"Unexpected Application Error!"),T.createElement("h3",{style:{fontStyle:"italic"}},i),s?T.createElement("pre",{style:d},s):null,null)}const yh=T.createElement(mh,null);class vh extends T.Component{constructor(i){super(i),this.state={location:i.location,revalidation:i.revalidation,error:i.error}}static getDerivedStateFromError(i){return{error:i}}static getDerivedStateFromProps(i,s){return s.location!==i.location||s.revalidation!=="idle"&&i.revalidation==="idle"?{error:i.error,location:i.location,revalidation:i.revalidation}:{error:i.error!==void 0?i.error:s.error,location:s.location,revalidation:i.revalidation||s.revalidation}}componentDidCatch(i,s){console.error("React Router caught the following error during render",i,s)}render(){return this.state.error!==void 0?T.createElement(En.Provider,{value:this.props.routeContext},T.createElement(tp.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Sh(a){let{routeContext:i,match:s,children:c}=a,d=T.useContext(tr);return d&&d.static&&d.staticContext&&(s.route.errorElement||s.route.ErrorBoundary)&&(d.staticContext._deepestRenderedBoundaryId=s.route.id),T.createElement(En.Provider,{value:i},c)}function wh(a,i,s,c){var d;if(i===void 0&&(i=[]),s===void 0&&(s=null),c===void 0&&(c=null),a==null){var p;if(!s)return null;if(s.errors)a=s.matches;else if((p=c)!=null&&p.v7_partialHydration&&i.length===0&&!s.initialized&&s.matches.length>0)a=s.matches;else return null}let f=a,m=(d=s)==null?void 0:d.errors;if(m!=null){let b=f.findIndex(x=>x.route.id&&(m==null?void 0:m[x.route.id])!==void 0);b>=0||Re(!1),f=f.slice(0,Math.min(f.length,b+1))}let h=!1,S=-1;if(s&&c&&c.v7_partialHydration)for(let b=0;b<f.length;b++){let x=f[b];if((x.route.HydrateFallback||x.route.hydrateFallbackElement)&&(S=b),x.route.id){let{loaderData:M,errors:I}=s,H=x.route.loader&&M[x.route.id]===void 0&&(!I||I[x.route.id]===void 0);if(x.route.lazy||H){h=!0,S>=0?f=f.slice(0,S+1):f=[f[0]];break}}}return f.reduceRight((b,x,M)=>{let I,H=!1,F=null,W=null;s&&(I=m&&x.route.id?m[x.route.id]:void 0,F=x.route.errorElement||yh,h&&(S<0&&M===0?(Ch("route-fallback"),H=!0,W=null):S===M&&(H=!0,W=x.route.hydrateFallbackElement||null)));let ge=i.concat(f.slice(0,M+1)),X=()=>{let ue;return I?ue=F:H?ue=W:x.route.Component?ue=T.createElement(x.route.Component,null):x.route.element?ue=x.route.element:ue=b,T.createElement(Sh,{match:x,routeContext:{outlet:b,matches:ge,isDataRoute:s!=null},children:ue})};return s&&(x.route.ErrorBoundary||x.route.errorElement||M===0)?T.createElement(vh,{location:s.location,revalidation:s.revalidation,component:F,error:I,children:X(),routeContext:{outlet:null,matches:ge,isDataRoute:!0}}):X()},null)}var op=(function(a){return a.UseBlocker="useBlocker",a.UseRevalidator="useRevalidator",a.UseNavigateStable="useNavigate",a})(op||{}),ap=(function(a){return a.UseBlocker="useBlocker",a.UseLoaderData="useLoaderData",a.UseActionData="useActionData",a.UseRouteError="useRouteError",a.UseNavigation="useNavigation",a.UseRouteLoaderData="useRouteLoaderData",a.UseMatches="useMatches",a.UseRevalidator="useRevalidator",a.UseNavigateStable="useNavigate",a.UseRouteId="useRouteId",a})(ap||{});function kh(a){let i=T.useContext(tr);return i||Re(!1),i}function Ph(a){let i=T.useContext(Ms);return i||Re(!1),i}function Rh(a){let i=T.useContext(En);return i||Re(!1),i}function rp(a){let i=Rh(),s=i.matches[i.matches.length-1];return s.route.id||Re(!1),s.route.id}function bh(){var a;let i=T.useContext(tp),s=Ph(),c=rp();return i!==void 0?i:(a=s.errors)==null?void 0:a[c]}function xh(){let{router:a}=kh(op.UseNavigateStable),i=rp(ap.UseNavigateStable),s=T.useRef(!1);return np(()=>{s.current=!0}),T.useCallback(function(d,p){p===void 0&&(p={}),s.current&&(typeof d=="number"?a.navigate(d):a.navigate(d,Pi({fromRouteId:i},p)))},[a,i])}const Td={};function Ch(a,i,s){Td[a]||(Td[a]=!0)}function jh(a,i){a==null||a.v7_startTransition,(a==null?void 0:a.v7_relativeSplatPath)===void 0&&(!i||i.v7_relativeSplatPath),i&&(i.v7_fetcherPersist,i.v7_normalizeFormMethod,i.v7_partialHydration,i.v7_skipActionErrorRevalidation)}function _h(a){return gh(a.context)}function Eh(a){let{basename:i="/",children:s=null,location:c,navigationType:d=it.Pop,navigator:p,static:f=!1,future:m}=a;nr()&&Re(!1);let h=i.replace(/^\/*/,"/"),S=T.useMemo(()=>({basename:h,navigator:p,static:f,future:Pi({v7_relativeSplatPath:!1},m)}),[h,m,p,f]);typeof c=="string"&&(c=_n(c));let{pathname:b="/",search:x="",hash:M="",state:I=null,key:H="default"}=c,F=T.useMemo(()=>{let W=jn(b,h);return W==null?null:{location:{pathname:W,search:x,hash:M,state:I,key:H},navigationType:d}},[h,b,x,M,I,H,d]);return F==null?null:T.createElement(io.Provider,{value:S},T.createElement(Ls.Provider,{children:s,value:F}))}new Promise(()=>{});function Th(a){let i={hasErrorBoundary:a.ErrorBoundary!=null||a.errorElement!=null};return a.Component&&Object.assign(i,{element:T.createElement(a.Component),Component:void 0}),a.HydrateFallback&&Object.assign(i,{hydrateFallbackElement:T.createElement(a.HydrateFallback),HydrateFallback:void 0}),a.ErrorBoundary&&Object.assign(i,{errorElement:T.createElement(a.ErrorBoundary),ErrorBoundary:void 0}),i}/**
61
+ * React Router DOM v6.30.3
62
+ *
63
+ * Copyright (c) Remix Software Inc.
64
+ *
65
+ * This source code is licensed under the MIT license found in the
66
+ * LICENSE.md file in the root directory of this source tree.
67
+ *
68
+ * @license MIT
69
+ */function la(){return la=Object.assign?Object.assign.bind():function(a){for(var i=1;i<arguments.length;i++){var s=arguments[i];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(a[c]=s[c])}return a},la.apply(this,arguments)}function ip(a,i){if(a==null)return{};var s={},c=Object.keys(a),d,p;for(p=0;p<c.length;p++)d=c[p],!(i.indexOf(d)>=0)&&(s[d]=a[d]);return s}function Mh(a){return!!(a.metaKey||a.altKey||a.ctrlKey||a.shiftKey)}function Lh(a,i){return a.button===0&&(!i||i==="_self")&&!Mh(a)}const Dh=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],Oh=["aria-current","caseSensitive","className","end","style","to","viewTransition","children"],zh="6";try{window.__reactRouterVersion=zh}catch{}function Ah(a,i){return Vg({basename:void 0,future:la({},void 0,{v7_prependBasename:!0}),history:fg({window:void 0}),hydrationData:Nh(),routes:a,mapRouteProperties:Th,dataStrategy:void 0,patchRoutesOnNavigation:void 0,window:void 0}).initialize()}function Nh(){var a;let i=(a=window)==null?void 0:a.__staticRouterHydrationData;return i&&i.errors&&(i=la({},i,{errors:Ih(i.errors)})),i}function Ih(a){if(!a)return null;let i=Object.entries(a),s={};for(let[c,d]of i)if(d&&d.__type==="RouteErrorResponse")s[c]=new ki(d.status,d.statusText,d.data,d.internal===!0);else if(d&&d.__type==="Error"){if(d.__subType){let p=window[d.__subType];if(typeof p=="function")try{let f=new p(d.message);f.stack="",s[c]=f}catch{}}if(s[c]==null){let p=new Error(d.message);p.stack="",s[c]=p}}else s[c]=d;return s}const lp=T.createContext({isTransitioning:!1}),Fh=T.createContext(new Map),Bh="startTransition",Md=ug[Bh],Uh="flushSync",Ld=pg[Uh];function Wh(a){Md?Md(a):a()}function Ya(a){Ld?Ld(a):a()}class Hh{constructor(){this.status="pending",this.promise=new Promise((i,s)=>{this.resolve=c=>{this.status==="pending"&&(this.status="resolved",i(c))},this.reject=c=>{this.status==="pending"&&(this.status="rejected",s(c))}})}}function Vh(a){let{fallbackElement:i,router:s,future:c}=a,[d,p]=T.useState(s.state),[f,m]=T.useState(),[h,S]=T.useState({isTransitioning:!1}),[b,x]=T.useState(),[M,I]=T.useState(),[H,F]=T.useState(),W=T.useRef(new Map),{v7_startTransition:ge}=c||{},X=T.useCallback(Y=>{ge?Wh(Y):Y()},[ge]),ue=T.useCallback((Y,ke)=>{let{deletedFetchers:ie,flushSync:Ue,viewTransitionOpts:Te}=ke;Y.fetchers.forEach((We,Ge)=>{We.data!==void 0&&W.current.set(Ge,We.data)}),ie.forEach(We=>W.current.delete(We));let pe=s.window==null||s.window.document==null||typeof s.window.document.startViewTransition!="function";if(!Te||pe){Ue?Ya(()=>p(Y)):X(()=>p(Y));return}if(Ue){Ya(()=>{M&&(b&&b.resolve(),M.skipTransition()),S({isTransitioning:!0,flushSync:!0,currentLocation:Te.currentLocation,nextLocation:Te.nextLocation})});let We=s.window.document.startViewTransition(()=>{Ya(()=>p(Y))});We.finished.finally(()=>{Ya(()=>{x(void 0),I(void 0),m(void 0),S({isTransitioning:!1})})}),Ya(()=>I(We));return}M?(b&&b.resolve(),M.skipTransition(),F({state:Y,currentLocation:Te.currentLocation,nextLocation:Te.nextLocation})):(m(Y),S({isTransitioning:!0,flushSync:!1,currentLocation:Te.currentLocation,nextLocation:Te.nextLocation}))},[s.window,M,b,W,X]);T.useLayoutEffect(()=>s.subscribe(ue),[s,ue]),T.useEffect(()=>{h.isTransitioning&&!h.flushSync&&x(new Hh)},[h]),T.useEffect(()=>{if(b&&f&&s.window){let Y=f,ke=b.promise,ie=s.window.document.startViewTransition(async()=>{X(()=>p(Y)),await ke});ie.finished.finally(()=>{x(void 0),I(void 0),m(void 0),S({isTransitioning:!1})}),I(ie)}},[X,f,b,s.window]),T.useEffect(()=>{b&&f&&d.location.key===f.location.key&&b.resolve()},[b,M,d.location,f]),T.useEffect(()=>{!h.isTransitioning&&H&&(m(H.state),S({isTransitioning:!0,flushSync:!1,currentLocation:H.currentLocation,nextLocation:H.nextLocation}),F(void 0))},[h.isTransitioning,H]),T.useEffect(()=>{},[]);let re=T.useMemo(()=>({createHref:s.createHref,encodeLocation:s.encodeLocation,go:Y=>s.navigate(Y),push:(Y,ke,ie)=>s.navigate(Y,{state:ke,preventScrollReset:ie==null?void 0:ie.preventScrollReset}),replace:(Y,ke,ie)=>s.navigate(Y,{replace:!0,state:ke,preventScrollReset:ie==null?void 0:ie.preventScrollReset})}),[s]),be=s.basename||"/",_e=T.useMemo(()=>({router:s,navigator:re,static:!1,basename:be}),[s,re,be]),_=T.useMemo(()=>({v7_relativeSplatPath:s.future.v7_relativeSplatPath}),[s.future.v7_relativeSplatPath]);return T.useEffect(()=>jh(c,s.future),[c,s.future]),T.createElement(T.Fragment,null,T.createElement(tr.Provider,{value:_e},T.createElement(Ms.Provider,{value:d},T.createElement(Fh.Provider,{value:W.current},T.createElement(lp.Provider,{value:h},T.createElement(Eh,{basename:be,location:d.location,navigationType:d.historyAction,navigator:re,future:_},d.initialized||s.future.v7_partialHydration?T.createElement(qh,{routes:s.routes,future:s.future,state:d}):i))))),null)}const qh=T.memo(Xh);function Xh(a){let{routes:i,future:s,state:c}=a;return hh(i,void 0,c,s)}const Kh=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",$h=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,sp=T.forwardRef(function(i,s){let{onClick:c,relative:d,reloadDocument:p,replace:f,state:m,target:h,to:S,preventScrollReset:b,viewTransition:x}=i,M=ip(i,Dh),{basename:I}=T.useContext(io),H,F=!1;if(typeof S=="string"&&$h.test(S)&&(H=S,Kh))try{let ue=new URL(window.location.href),re=S.startsWith("//")?new URL(ue.protocol+S):new URL(S),be=jn(re.pathname,I);re.origin===ue.origin&&be!=null?S=be+re.search+re.hash:F=!0}catch{}let W=uh(S,{relative:d}),ge=Yh(S,{replace:f,state:m,target:h,preventScrollReset:b,relative:d,viewTransition:x});function X(ue){c&&c(ue),ue.defaultPrevented||ge(ue)}return T.createElement("a",la({},M,{href:H||W,onClick:F||p?c:X,ref:s,target:h}))}),Qh=T.forwardRef(function(i,s){let{"aria-current":c="page",caseSensitive:d=!1,className:p="",end:f=!1,style:m,to:h,viewTransition:S,children:b}=i,x=ip(i,Oh),M=bi(h,{relative:x.relative}),I=Do(),H=T.useContext(Ms),{navigator:F,basename:W}=T.useContext(io),ge=H!=null&&Jh(M)&&S===!0,X=F.encodeLocation?F.encodeLocation(M).pathname:M.pathname,ue=I.pathname,re=H&&H.navigation&&H.navigation.location?H.navigation.location.pathname:null;d||(ue=ue.toLowerCase(),re=re?re.toLowerCase():null,X=X.toLowerCase()),re&&W&&(re=jn(re,W)||re);const be=X!=="/"&&X.endsWith("/")?X.length-1:X.length;let _e=ue===X||!f&&ue.startsWith(X)&&ue.charAt(be)==="/",_=re!=null&&(re===X||!f&&re.startsWith(X)&&re.charAt(X.length)==="/"),Y={isActive:_e,isPending:_,isTransitioning:ge},ke=_e?c:void 0,ie;typeof p=="function"?ie=p(Y):ie=[p,_e?"active":null,_?"pending":null,ge?"transitioning":null].filter(Boolean).join(" ");let Ue=typeof m=="function"?m(Y):m;return T.createElement(sp,la({},x,{"aria-current":ke,className:ie,ref:s,style:Ue,to:h,viewTransition:S}),typeof b=="function"?b(Y):b)});var Rs;(function(a){a.UseScrollRestoration="useScrollRestoration",a.UseSubmit="useSubmit",a.UseSubmitFetcher="useSubmitFetcher",a.UseFetcher="useFetcher",a.useViewTransitionState="useViewTransitionState"})(Rs||(Rs={}));var Dd;(function(a){a.UseFetcher="useFetcher",a.UseFetchers="useFetchers",a.UseScrollRestoration="useScrollRestoration"})(Dd||(Dd={}));function Gh(a){let i=T.useContext(tr);return i||Re(!1),i}function Yh(a,i){let{target:s,replace:c,state:d,preventScrollReset:p,relative:f,viewTransition:m}=i===void 0?{}:i,h=dh(),S=Do(),b=bi(a,{relative:f});return T.useCallback(x=>{if(Lh(x,s)){x.preventDefault();let M=c!==void 0?c:Lo(S)===Lo(b);h(a,{replace:M,state:d,preventScrollReset:p,relative:f,viewTransition:m})}},[S,h,b,c,d,s,a,p,f,m])}function Jh(a,i){i===void 0&&(i={});let s=T.useContext(lp);s==null&&Re(!1);let{basename:c}=Gh(Rs.useViewTransitionState),d=bi(a,{relative:i.relative});if(!s.isTransitioning)return!1;let p=jn(s.currentLocation.pathname,c)||s.currentLocation.pathname,f=jn(s.nextLocation.pathname,c)||s.nextLocation.pathname;return wi(d.pathname,f)!=null||wi(d.pathname,p)!=null}const Zh="modulepreload",em=function(a){return"/dashboard/"+a},Od={},oo=function(i,s,c){let d=Promise.resolve();if(s&&s.length>0){let f=function(S){return Promise.all(S.map(b=>Promise.resolve(b).then(x=>({status:"fulfilled",value:x}),x=>({status:"rejected",reason:x}))))};document.getElementsByTagName("link");const m=document.querySelector("meta[property=csp-nonce]"),h=(m==null?void 0:m.nonce)||(m==null?void 0:m.getAttribute("nonce"));d=f(s.map(S=>{if(S=em(S),S in Od)return;Od[S]=!0;const b=S.endsWith(".css"),x=b?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${S}"]${x}`))return;const M=document.createElement("link");if(M.rel=b?"stylesheet":Zh,b||(M.as="script"),M.crossOrigin="",M.href=S,h&&M.setAttribute("nonce",h),document.head.appendChild(M),b)return new Promise((I,H)=>{M.addEventListener("load",I),M.addEventListener("error",()=>H(new Error(`Unable to preload CSS for ${S}`)))})}))}function p(f){const m=new Event("vite:preloadError",{cancelable:!0});if(m.payload=f,window.dispatchEvent(m),!m.defaultPrevented)throw f}return d.then(f=>{for(const m of f||[])m.status==="rejected"&&p(m.reason);return i().catch(p)})},xi=window.location.origin,tm=3e3,nm=5e3;class om extends Error{constructor(s,c,d=null,p=null){super(c);xn(this,"status");xn(this,"error");xn(this,"payload");this.name="ApiClientError",this.status=s,this.error=d,this.payload=p}}function am(a){var s,c;const i=(c=(s=a.headers)==null?void 0:s.get)==null?void 0:c.call(s,"content-type");return typeof i=="string"&&i.toLowerCase().includes("application/json")}async function rm(a){if(!am(a))return null;try{const i=await a.json();if(i&&typeof i=="object")return i}catch{return null}return null}async function ms(a){if(a.ok)return;const i=await rm(a),s=typeof(i==null?void 0:i.message)=="string"&&i.message.trim().length>0?i.message:`API ${a.status}: ${a.statusText}`,c=typeof(i==null?void 0:i.error)=="string"?i.error:null;throw new om(a.status,s,c,i)}class im{constructor(i){xn(this,"base");this.base=i}async get(i,s){const c=new URL(i,this.base);s&&Object.entries(s).forEach(([p,f])=>c.searchParams.set(p,f));const d=await fetch(c.toString(),{method:"GET"});return await ms(d),d.json()}async patch(i,s){const c=new URL(i,this.base),d=await fetch(c.toString(),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});return await ms(d),d.json()}async post(i,s){const c=new URL(i,this.base),d=await fetch(c.toString(),{method:"POST",headers:s?{"Content-Type":"application/json"}:{},body:s?JSON.stringify(s):void 0});return await ms(d),d.json()}}const fn=new im(xi);function lm(a){return a.pluginClients&&a.pluginClients.length>0?"studioConnected":(a.connectedClients===0||!a.pluginClients,"serverOnly")}const cp=T.createContext(null);function sm({children:a}){const[i,s]=T.useState("disconnected"),[c,d]=T.useState(null),[p,f]=T.useState(null),m=T.useRef(null);return T.useEffect(()=>{let h=!1;async function S(){try{const b=await fn.get("/status");if(h)return;d(b),s(lm(b)),f(null)}catch(b){if(h)return;s("disconnected"),f(b instanceof Error?b.message:String(b))}}return S(),m.current=setInterval(S,nm),()=>{h=!0,m.current&&clearInterval(m.current)}},[]),A.jsx(cp.Provider,{value:{level:i,status:c,error:p},children:a})}function Ds(){const a=T.useContext(cp);if(!a)throw new Error("useConnection must be used within a ConnectionProvider");return a}const cm={"sidebar.overview":"Overview","sidebar.changelog":"Changelog","sidebar.connection":"Connection","sidebar.sync":"Sync","sidebar.playtest":"Playtest","sidebar.tools":"Tools","sidebar.settings":"Settings","sidebar.gate.l1":"MCP server connection required","sidebar.gate.l2":"Roblox Studio plugin connection required","header.currentProject":"Current Project","header.unknownProject":"Unknown project","header.projectRoot.label":"Project Root","header.currentProject.loading":"Loading project root...","header.currentProject.unavailable":"Project root unavailable","header.placeNotConnected":"Place not connected","header.currentProject.tooltip":"Currently selected project folder","header.currentProject.loading.tooltip":"Project root information is still loading","header.currentProject.unavailable.tooltip":"Current project root information is unavailable","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Loading sync root...","header.currentProjectSyncRoot.unavailable":"Sync root unavailable","header.currentProjectSyncRoot.tooltip":"Current sync root folder for the selected project","header.currentProjectSyncRoot.loading.tooltip":"Sync root information is still loading","header.currentProjectSyncRoot.unavailable.tooltip":"Current sync root information is unavailable","header.testFiles.label":"Test Files","header.testFiles.unavailable":"Test files unavailable","header.testFiles.tooltip":"Current playtest files directory for the selected place","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Plugin connection required","header.places.liveRequired":"Plugin connection required for live active place","header.place.tooltip":"Connected Roblox place","header.placeNotConnected.tooltip":"Place not connected","header.changeProjectRoot":"Change Project Root","header.changeProjectRoot.ariaLabel":"Change project root","header.changeProjectRoot.tooltip":"Change the current project root","header.changeProjectRoot.disabledTooltip.l0":"MCP server connection required before project root can be changed","header.changeProjectRoot.disabledTooltip.loading":"Project root information is still loading","header.changeProjectRoot.disabledTooltip.unavailable":"Current project root information is unavailable","header.projectRootModal.initial.title":"Change project root","header.projectRootModal.initial.body.connected":"After you choose a project folder, MCP will switch to the new project root and the current Studio contents will be fully resynced into the new <selected project folder>/wrox-project-sync target.","header.projectRootModal.initial.body.disconnected":"After you choose a project folder, MCP will switch to the new project root and use <selected project folder>/wrox-project-sync as the next sync target.","header.projectRootModal.initial.nextSyncRoot":"New sync target after selection","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/wrox-project-sync","header.projectRootModal.initial.warningStop":"Current sync stops immediately.","header.projectRootModal.initial.warningFreshSync":"The current Studio contents will be used to build a fresh full sync in the new target.","header.projectRootModal.initial.warningNoMove":"Old sync folders are not moved automatically.","header.projectRootModal.initial.warningDeferredSync":"If Studio is not connected, full resync starts the next time the plugin connects.","header.projectRootModal.confirm.title":"Confirm new project root","header.projectRootModal.confirm.body":"Review the selected project folder before applying.","header.projectRootModal.confirm.projectRoot":"Selected project folder","header.projectRootModal.confirm.syncRoot":"New sync target","header.projectRootModal.confirm.warningNoMove":"Existing sync folders are not moved automatically.","header.projectRootModal.pick":"Choose folder","header.projectRootModal.apply":"Apply change","header.projectRootModal.cancel":"Cancel","header.projectRootModal.error":"Failed to change project root","status.online":"Online","status.offline":"Offline","status.idle":"Idle","status.syncing":"Syncing","status.error":"Error","status.initializing":"Initializing","level.l0.title":"Server disconnected","level.l0.message":"WROX Dashboard opened but MCP server has stopped or is not responding.","level.l1.title":"Server connected","level.l1.hint":"Check: Is Roblox Studio running? Is the plugin installed? Are HTTP Requests enabled?","level.l2.ok":"Studio connected","tier.basic":"Basic","tier.basic.tooltip":"Basic tier with the standard WROX Dashboard feature set.","tier.pro":"Pro","tier.pro.tooltip":"Pro tier with the full WROX Dashboard feature set.","tier.mixed":"Mixed","tier.upgrade":"Upgrade to Pro","tier.compare":"Basic vs Pro","tier.banner.save":"Save AI tokens with Pro!","tier.comparison.comingSoon":"Basic vs Pro comparison — coming soon","tier.comparison.close":"Close","tier.comparison.detailTitle":"Detailed Tool Catalog","tier.comparison.description":"Description","tier.comparison.basic.core":"Core MCP workflow","tier.comparison.basic.core.item1":"Script create/edit","tier.comparison.basic.core.item2":"Instance management","tier.comparison.basic.core.item3":"Property control","tier.comparison.basic.core.item4":"Selection and search","tier.comparison.basic.core.item5":"Tag management","tier.comparison.basic.core.item6":"Camera control","tier.comparison.basic.core.item7":"Log monitoring","tier.comparison.basic.sync":"Sync (Basic)","tier.comparison.basic.sync.item1":"Studio to Local one-way sync","tier.comparison.basic.sync.item2":"Manual apply as default","tier.comparison.pro.all":"Everything in Basic, plus","tier.comparison.pro.sync":"Advanced Sync workflow","tier.comparison.pro.sync.item1":"Per-type sync direction","tier.comparison.pro.sync.item2":"Per-type apply mode","tier.comparison.pro.sync.item3":"Bidirectional and reverse sync","tier.comparison.pro.sync.item4":"Full sync, resync, and push to Studio","tier.comparison.pro.sync.item5":"Multi-place sync","tier.comparison.pro.playtest":"Playtest control","tier.comparison.pro.playtest.item1":"Play, stop, pause, and resume","tier.comparison.pro.playtest.item2":"Playtest state inspection","tier.comparison.pro.playtest.item3":"Automated test execution","tier.comparison.pro.creation":"Advanced creation workflow","tier.comparison.pro.creation.item1":"Bulk operations","tier.comparison.pro.creation.item2":"Terrain generation","tier.comparison.pro.creation.item3":"Asset search and insert","tier.comparison.pro.creation.item4":"Raycast and spatial analysis","tier.comparison.pro.creation.item5":"Environment control","tier.comparison.discount.label":"🎁 Enter this code at Gumroad checkout for a discount:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"Valid until April 30","tier.promo.discount.hint":"🎁 Use code WEPPY-MCP at Gumroad · Valid until April 30","tier.promo.discount.context":"🎁 Enter at Gumroad checkout:","tier.tool.query_instances.desc":"Inspect instances, search children and descendants, and inspect class data. Pro adds file tree, project structure, and property or tag search.","tier.tool.mutate_instances.desc":"Create, delete, clone, and move instances. Pro adds tree creation and bulk create, delete, or clone operations.","tier.tool.manage_properties.desc":"Read and set properties, attributes, and tags. Pro adds calculated updates, relative changes, and bulk property operations.","tier.tool.manage_scripts.desc":"Read, write, create, delete, edit, and search script source. Pro adds bulk replacement across scripts.","tier.tool.manage_lighting.desc":"Pro only. Configure lighting, atmosphere, sky, terrain properties, and time-of-day settings.","tier.tool.manage_selection.desc":"Read, set, and clear the current Studio selection. Pro adds context, details, add or remove, and selection watch support.","tier.tool.manage_camera.desc":"Inspect camera state, focus by path or position, and request suggested views.","tier.tool.manage_tween.desc":"Pro only. Create, play, pause, and cancel tweens for smooth animation.","tier.tool.manage_audio.desc":"Pro only. Play, stop, pause, and resume sounds, and configure the audio listener.","tier.tool.manage_animation.desc":"Pro only. Load, play, and stop animations, and inspect active animation tracks.","tier.tool.manage_physics.desc":"Pro only. Register collision groups, configure group collisions, and inspect available groups.","tier.tool.manage_effects.desc":"Pro only. Emit particles, clear effects, and toggle effect state.","tier.tool.manage_terrain.desc":"Pro only. Fill terrain shapes, clear regions, replace materials, manage terrain colors, read or write voxels, generate terrain, and smooth terrain.","tier.tool.spatial_query.desc":"Pro only. Run raycasts, find ground, validate placement, scan areas, search for flat or spawn positions, analyze walkability, map space, and inspect collisions.","tier.tool.manage_assets.desc":"Pro only. Insert models, inspect asset info, search the creator store, insert free assets or packages, and export assets.","tier.tool.manage_sync.desc":"Pro only. Inspect sync status, configuration, history, directions, and read or write synced files.","tier.tool.workspace_state.desc":"Pro only. Run full sync, capture snapshots, inspect recent changes and viewport state, and manage related metadata.","tier.tool.manage_logs.desc":"Inspect output logs with filtering, incremental polling, buffer clearing, and recent error lookup.","tier.tool.system_info.desc":"Inspect connection status and current tier. Pro adds place info, services, Studio settings, playtest control, and automated tests.","tier.tool.batch_execute.desc":"Pro only. Run multiple commands in a batch, with sequential execution and optional continue-on-error behavior.","tier.tool.execute_luau.desc":"Pro only. Execute arbitrary Luau code inside the Roblox Studio sandbox.","connection.server.title":"Server Status","connection.server.version":"Version","connection.server.version.tooltip":"Installed MCP server version","connection.server.pid":"PID","connection.server.pid.tooltip":"Operating system process identifier","connection.server.uptime":"Uptime","connection.server.uptime.tooltip":"Time elapsed since the MCP server started","connection.server.session":"Session","connection.server.session.tooltip":"Current MCP session identifier","connection.server.exec":"Exec","connection.server.exec.tooltip":"Executable path used to launch the MCP server","connection.reconnect":"Reconnect","connection.checkSettings":"Check Settings","connection.agents.title":"AI Agents","connection.agents.name":"Agent","connection.agents.cwd":"Working Dir","connection.agents.cwd.tooltip":"Current working directory for the connected AI agent","connection.agents.projectRoot":"Project Root","connection.agents.projectRoot.tooltip":"Authoritative project root for sync ownership","connection.agents.projectRoot.unresolved":"Unresolved","connection.agents.connected":"Connected","connection.agents.unknown":"Unknown","connection.agents.none":"No agents connected","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"Client ID","connection.plugins.clientId.tooltip":"Unique plugin client identifier for this Studio connection","connection.plugins.lastSeen":"Last Seen","connection.plugins.lastSeen.tooltip":"Most recent heartbeat received from the plugin","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Installed plugin version reported by Studio","connection.plugins.none":"No plugins connected","connection.log.title":"Connection Log","connection.log.empty":"No events yet","connection.time.secondsAgo":"s ago","connection.time.minutesAgo":"m ago","connection.time.hoursAgo":"h ago","common.loading":"Loading...","common.retry":"Retry","common.reconnecting":"Reconnecting...","common.expand":"Expand","common.collapse":"Collapse","tools.tab.history":"History","tools.tab.statistics":"Statistics","tools.tab.failures":"Failures","tools.col.time":"Time","tools.col.time.tooltip":"When the tool run was recorded.","tools.col.toolAction":"Tool.Action","tools.col.toolAction.tooltip":"Tool name and action that were executed.","tools.col.duration":"Duration","tools.col.duration.tooltip":"How long the tool took to finish.","tools.col.status":"Status","tools.col.status.tooltip":"Outcome of the recorded tool run.","tools.col.tier":"Tier","tools.col.tier.tooltip":"License tier required for the tool or action.","tools.col.tierStats.tooltip":"Basic, Pro, or Mixed summary for the tool statistics row.","tools.col.tool":"Tool","tools.col.tool.tooltip":"Consolidated tool name in the statistics table.","tools.col.calls":"Calls","tools.col.calls.tooltip":"Total number of recorded calls for this tool.","tools.col.okRate":"OK%","tools.col.okRate.tooltip":"Percentage of calls that finished successfully.","tools.col.avgTime":"Avg Time","tools.col.avgTime.tooltip":"Average execution time across recorded calls.","tools.col.error":"Error","tools.filter.tool":"Tool","tools.filter.all":"All","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"This entry used a Pro-only tool or action.","tools.status.ok":"OK","tools.status.ok.tooltip":"The tool run completed successfully.","tools.tier.mixed.tooltip":"This tool includes both Basic and Pro actions.","tools.detail.params":"Parameters","tools.detail.params.tooltip":"Input parameters passed to this tool run.","tools.detail.result":"Result","tools.detail.result.tooltip":"Returned result payload for this tool run.","tools.detail.error":"Error","tools.page.prev":"Prev","tools.page.prev.tooltip":"Go to the previous page of tool history results.","tools.page.next":"Next","tools.page.next.tooltip":"Go to the next page of tool history results.","tools.empty.history":"No history entries","tools.empty.stats":"No tool statistics","tools.empty.failures":"No failures","tools.summary.total":"Total","tools.summary.calls":"calls","tools.summary.sessions":"Sessions","settings.license.title":"License","settings.license.title.tooltip":"Current license status and subscription tier.","settings.license.status":"Status","settings.license.status.tooltip":"Current license activation state.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Current subscription tier for available WROX Dashboard features.","settings.license.key":"Key","settings.license.key.tooltip":"Masked license key currently loaded by the server.","settings.license.keyValue.tooltip":"Masked license key currently loaded by the server.","settings.license.provider":"Provider","settings.license.provider.tooltip":"License provider used to validate this key.","settings.license.providerValue.tooltip":"License provider used to validate this key.","settings.license.active":"Active","settings.license.active.tooltip":"Current license activation state.","settings.license.status.activeCancelPending.tooltip":"Cancellation is pending, but Pro access remains active until the current billing period ends.","settings.license.inactive":"Inactive","settings.license.inactive.tooltip":"Current license activation state.","settings.license.expired":"Expired","settings.license.expired.tooltip":"Current license activation state.","settings.license.unavailable":"License info unavailable","settings.license.detail.cancelPending":"Cancellation is scheduled. Pro access remains active until the current billing period ends.","settings.license.reset":"Reset License","settings.readOnly":"Read-only","settings.readOnly.tooltip":"This section shows values that cannot be edited from the WROX Dashboard.","settings.unavailable":"Settings unavailable","settings.general.title":"General Settings","settings.general.title.tooltip":"Hot settings that apply immediately when changed.","settings.general.liveApply":"Live Apply","settings.general.liveApply.tooltip":"Changes in this section are applied immediately without a separate save button.","settings.general.applied":"Applied","settings.general.logLevel":"Log Level","settings.general.logLevel.tooltip":"Sets how much detail the WROX Dashboard writes to its logs.","settings.general.localHistory":"Tool History Recording","settings.general.localHistory.tooltip":"Stores local tool execution history for the WROX Dashboard history views.","settings.general.localStatistics":"Tool Statistics Collection","settings.general.localStatistics.tooltip":"Aggregates local usage statistics for WROX Dashboard reporting.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WROX Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Request Timeout","settings.general.requestTimeout.tooltip":"Maximum time the WROX Dashboard waits for a request before it fails.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Request timeout is measured in milliseconds.","settings.cold.title":"Server Environment","settings.cold.title.tooltip":"Read-only server environment values loaded at startup.","settings.cold.httpPort.tooltip":"Port number used by the MCP WROX Dashboard HTTP server.","settings.cold.httpHost.tooltip":"Host interface that the MCP WROX Dashboard HTTP server binds to.","settings.cold.dashboardAutoOpen.tooltip":"Controls whether the WROX Dashboard opens automatically in the browser when the server starts.","settings.cold.dashboardAutoOpen.value.tooltip":"Current startup behavior for opening the WROX Dashboard in a browser.","settings.cold.hint":"Set via environment variables to change these values.","settings.language.title":"Language","settings.language.title.tooltip":"Choose how the WROX Dashboard interface text is localized.","settings.language.dashboard":"WROX Dashboard Language","settings.language.dashboard.tooltip":"Overrides the WROX Dashboard language or follows the system language when set to Auto.","settings.language.auto":"Auto","overview.l0.title":"MCP Server Disconnected","overview.l0.message":"The MCP server is not responding. The WROX Dashboard will automatically attempt to reconnect.","overview.l0.step1":"Check that the MCP server process is running","overview.l0.step2":"Restart the MCP server command if needed","overview.l0.reconnecting":"Auto-reconnecting every 3s...","overview.l0.reconnectBtn":"Reconnect","overview.l0.settingsBtn":"Check Settings","overview.l1.pluginGuide":"Roblox Studio plugin is not connected","overview.l1.check1":"Is Roblox Studio running?","overview.l1.check2":"Is the WROX Plugin installed?","overview.l1.check3":"Are HTTP Requests enabled in Studio settings?","overview.l1.feedHint":"Changes will appear here once the plugin connects","overview.metric.server":"Server","overview.metric.server.tooltip":"MCP server runtime and process status","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Roblox Studio plugin connection and version status","overview.metric.agent":"Agent","overview.metric.agent.tooltip":"Connected AI coding agents and their runtime state","overview.metric.agent.instancesUnit":"instances","overview.metric.sync":"Sync","overview.metric.sync.tooltip":"Current Studio to local sync activity","overview.metric.noAgent":"No Agent","overview.meta.version":"Version","overview.meta.version.tooltip":"Installed MCP server version","overview.meta.session":"Session","overview.meta.session.tooltip":"Current MCP session identifier","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Operating system process identifier","overview.meta.uptime":"Uptime","overview.meta.uptime.tooltip":"Time elapsed since the MCP server started","overview.feed.title":"Recent Game Changes","overview.feed.empty":"No recent changes","overview.changelog.title":"Session Change Summary","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"instances","overview.changelog.properties":"properties","overview.changelog.assets":"assets","overview.tier.title":"Tier Usage","changelog.subtitle":"Game Change History","changelog.filter.all":"All","changelog.filter.active":"Active","changelog.filter.completed":"Completed","changelog.empty":"No changelog entries yet","changelog.basic.limit.title":"Basic preview shows the latest 3 sessions","changelog.basic.limit.body":"Upgrade to Pro to browse the full changelog timeline for this place.","changelog.basic.metricLabel":"Visible Changelog / Total","changelog.basic.visible":"visible","changelog.basic.total":"total","changelog.card.active":"Active","changelog.card.active.tooltip":"This session is still receiving new game changes.","changelog.card.completed":"Completed","changelog.card.completed.tooltip":"This session has ended and no more changes are expected.","changelog.card.bootstrapStatus":"Bootstrap","changelog.card.bootstrapStatus.tooltip":"This session only contains the initial sync bootstrap snapshot.","changelog.card.inProgress":"in progress","changelog.card.noChanges":"No changes yet","changelog.card.noChanges.tooltip":"No game changes have been extracted for this session yet.","changelog.card.bootstrapSummary":"Initial sync snapshot","changelog.card.bootstrapSummary.tooltip":"Initial file sync writes are collapsed into a single bootstrap snapshot row.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Script changes made in this session.","changelog.card.instances":"instances","changelog.card.instances.tooltip":"Instance create, delete, move, or clone changes in this session.","changelog.card.modified":"modified","changelog.card.created":"created","changelog.card.deleted":"deleted","changelog.card.moved":"moved","changelog.card.propertiesChanged":"properties changed","changelog.card.propertiesChanged.tooltip":"Property value changes recorded for this session.","changelog.card.lightingConfigured":"Lighting configured","changelog.card.lightingConfigured.tooltip":"Lighting or atmosphere settings changed in this session.","changelog.card.terrainConfigured":"Terrain configured","changelog.card.terrainConfigured.tooltip":"Terrain data or terrain settings changed in this session.","changelog.card.assetsInserted":"assets inserted","changelog.card.assetsInserted.tooltip":"Assets inserted into the place during this session.","changelog.category.script":"Scripts","changelog.category.instance":"Instances","changelog.category.property":"Properties","changelog.category.lighting":"Lighting","changelog.category.terrain":"Terrain","changelog.category.asset":"Assets","changelog.detail.changeSummary":"Change Summary","changelog.detail.changeSummary.tooltip":"Counts of extracted game changes grouped by category for this session.","changelog.detail.changeTimeline":"Change Timeline","changelog.detail.changeTimeline.tooltip":"Chronological list of extracted game changes for this session.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Before & After","changelog.detail.filterCategory":"Category","changelog.detail.filterCategory.tooltip":"Filter the timeline to a single change category.","changelog.detail.confidence.exact":"Exact","changelog.detail.confidence.exact.tooltip":"Both the before and after state were confirmed for this change.","changelog.detail.confidence.partial":"Partial","changelog.detail.confidence.partial.tooltip":"Only part of the before and after state could be confirmed for this change.","changelog.detail.confidence.afterOnly":"After only","changelog.detail.confidence.afterOnly.tooltip":"Only the resulting state after the change could be confirmed.","changelog.detail.confidence.intentOnly":"Intent only","changelog.detail.confidence.intentOnly.tooltip":"Only the requested action was recorded, not the resulting state.","changelog.detail.confidence.unknown":"Unknown","changelog.detail.confidence.unknown.tooltip":"This change could not be confidently classified from the available data.","changelog.detail.noChanges":"No changes in this category","changelog.detail.backToList":"Back to list","changelog.diff.empty":"No diff available","changelog.diff.unified":"Unified","changelog.diff.sideBySide":"Side by Side","changelog.diff.before":"Before","changelog.diff.after":"After","sync.overlay.title":"Roblox Studio plugin required","sync.overlay.message":"Sync status will be available once the Roblox Studio plugin connects.","sync.overlay.check1":"Is Roblox Studio running?","sync.overlay.check2":"Is the WROX Plugin installed?","sync.overlay.check3":"Are HTTP Requests enabled in Studio settings?","sync.status.title":"Sync Status","sync.status.title.tooltip":"Current Studio and local file sync status for this place.","sync.status.forwardOnly":"Forward Only","sync.status.forwardOnly.tooltip":"Basic tier allows Studio to local forward sync only.","sync.status.place":"Place","sync.status.place.tooltip":"Connected Roblox place name and place ID.","sync.status.path":"Path","sync.status.path.tooltip":"Local filesystem root currently used for sync output.","sync.status.instances":"Instances","sync.status.instances.tooltip":"Total synced Roblox instances tracked in the local mirror.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Total synced script files currently indexed for this place.","sync.status.state":"State","sync.status.state.tooltip":"Current runtime sync state reported by the server.","sync.directions.title":"Sync Directions","sync.directions.title.tooltip":"Per-category sync direction and apply behavior between Local and Studio.","sync.directions.type":"Type","sync.directions.type.tooltip":"Sync category affected by this rule.","sync.directions.direction":"Direction","sync.directions.direction.tooltip":"Whether each category syncs from Studio, to Studio, or both ways.","sync.directions.applyMode":"Apply Mode","sync.directions.applyMode.tooltip":"How incoming sync changes are applied for this category.","sync.directions.cat.scripts":"Scripts","sync.directions.cat.values":"Values","sync.directions.cat.containers":"Containers","sync.directions.cat.data":"Data","sync.directions.cat.services":"Services","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"Local files on disk are always shown on the left side of the direction rail.","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"Roblox Studio is always shown on the right side of the direction rail.","sync.directions.mode.manual":"Manual","sync.directions.mode.manual.tooltip":"Applies sync changes only when you trigger them manually.","sync.directions.mode.auto":"Auto","sync.directions.mode.auto.tooltip":"Applies sync changes automatically when updates arrive.","sync.directions.tooltip.forward.body":"Studio changes sync to local files only","sync.directions.tooltip.bidirectional.body":"Two-way sync between Local and Studio","sync.directions.tooltip.reverse.body":"Push local file changes to Studio","sync.directions.tooltip.proRequired":"Pro required in Basic tier","sync.directions.dir.forward":"forward","sync.directions.dir.bidirectional":"bidirectional","sync.directions.dir.reverse":"reverse","sync.log.title":"Sync Log","sync.log.empty":"No sync events yet","sync.log.type.write":"WRITE","sync.log.type.write.tooltip":"A new sync output was written to disk.","sync.log.type.update":"UPDATE","sync.log.type.update.tooltip":"An existing synced file or instance was updated.","sync.log.type.delete":"DELETE","sync.log.type.delete.tooltip":"A synced file or instance was removed.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"A sync event was recorded without a file mutation.","sync.upgrade.title":"Unlock Full Sync with Pro","sync.upgrade.benefit1":"Bidirectional sync — edit files, auto-apply to Studio","sync.upgrade.benefit2":"Reverse sync — push file changes back to Studio","sync.upgrade.benefit3":"Full sync history and detailed change log","sync.upgrade.buy":"Upgrade to Pro","playtest.status.title":"Playtest Status","playtest.status.title.tooltip":"Current Roblox playtest session state reported by Studio.","playtest.status.mode":"Mode","playtest.status.mode.tooltip":"Studio playtest launch mode for the current session.","playtest.status.mode.value.tooltip":"Specific Roblox Studio playtest mode currently in use.","playtest.status.mode.play":"Play","playtest.status.mode.run":"Run","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Roblox place currently associated with this playtest session.","playtest.status.state.running":"Running","playtest.status.state.running.tooltip":"A Roblox playtest session is currently running.","playtest.status.state.paused":"Paused","playtest.status.state.paused.tooltip":"The current Roblox playtest session is paused.","playtest.status.state.notRunning":"Not Running","playtest.status.state.notRunning.tooltip":"No Roblox playtest session is currently running.","playtest.control.play":"Play","playtest.control.pause":"Pause","playtest.control.resume":"Resume","playtest.control.stop":"Stop","playtest.history.title":"Test History","playtest.history.title.tooltip":"Recorded automated playtest runs for this project.","playtest.history.empty":"No test results yet","playtest.history.mode":"Mode","playtest.history.mode.tooltip":"Playtest mode used for this recorded test run.","playtest.history.status.passed":"Passed","playtest.history.status.failed":"Failed","playtest.history.status.running":"Running","playtest.history.status.unknown":"Unknown","playtest.history.status.tooltip":"Recorded result state for this automated playtest run.","playtest.empty.title":"No playtest results yet","playtest.empty.message":"Test results will appear here when the AI agent runs automated tests via system_info.run_test.","playtest.empty.message.before":"Test results will appear here when the AI agent runs automated tests via","playtest.empty.message.after":".","playtest.empty.runTest.tooltip":"WROX Dashboard automation entry point that runs Roblox playtest checks through the system_info tool.","playtest.report.title":"Selected Report","playtest.report.title.tooltip":"Detailed output for the currently selected automated playtest run.","playtest.report.content":"Report","playtest.report.content.tooltip":"Markdown summary for the selected automated playtest run.","playtest.report.logs":"Logs","playtest.report.logs.tooltip":"Execution logs captured for the selected automated playtest run.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"No report content available","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest is a Pro-only feature","playtest.basic.desc":"Control playtesting from the WROX Dashboard, run automated tests, and view detailed test reports.","playtest.basic.benefit1":"One-click play/pause/stop controls","playtest.basic.benefit2":"Automated test execution via AI agent","playtest.basic.benefit3":"Test history with pass/fail tracking","playtest.basic.benefit4":"Detailed markdown test reports","playtest.sample.badge":"Preview of the Pro playtest view","playtest.sample.title":"You are previewing the playtest screen that becomes available after upgrading to Pro.","playtest.sample.message":"This preview uses sample data. Live playtest control, history management, and real reports unlock with Pro.","playtest.sample.clearDisabled":"Upgrade to Pro to clear live playtest history.","playtest.sample.place":"Arena Preview","playtest.sample.history.name":"Sample Arena Smoke Test","playtest.sample.context.why":"Spawn into the arena, survive the opener, and verify the HUD responds immediately.","playtest.sample.context.expected":"The player spawns safely, the countdown UI appears within one second, and the first wave starts without errors.","playtest.sample.context.observed":"Spawn protection held, the HUD updated on time, and wave one completed with no gameplay regressions.","playtest.sample.report.markdown":`# Sample Arena Smoke Test
70
+
71
+ - Spawn flow: PASS
72
+ - HUD countdown: PASS
73
+ - Wave bootstrap: PASS
74
+
75
+ This is a sample preview. Upgrade to Pro to run live playtests and save real reports.`,"playtest.sample.report.logs":`[sample] boot playtest preview
76
+ [sample] spawn protection active
77
+ [sample] hud countdown rendered
78
+ [sample] wave one completed
79
+ [sample] preview report finished`},um={"sidebar.overview":"개요","sidebar.changelog":"변경 이력","sidebar.connection":"연결","sidebar.sync":"동기화","sidebar.playtest":"플레이테스트","sidebar.tools":"도구","sidebar.settings":"설정","sidebar.gate.l1":"MCP 서버를 연결해야 이 페이지를 사용할 수 있습니다.","sidebar.gate.l2":"Roblox Studio 플러그인을 연결해야 이 페이지를 사용할 수 있습니다.","header.currentProject":"현재 프로젝트","header.unknownProject":"알 수 없는 프로젝트","header.projectRoot.label":"Project Root","header.currentProject.loading":"프로젝트 루트 불러오는 중...","header.currentProject.unavailable":"프로젝트 루트를 불러올 수 없음","header.placeNotConnected":"플레이스 미연결","header.currentProject.tooltip":"현재 선택된 프로젝트 폴더입니다.","header.currentProject.loading.tooltip":"프로젝트 루트 정보를 아직 불러오는 중입니다.","header.currentProject.unavailable.tooltip":"현재 프로젝트 루트 정보를 불러올 수 없습니다.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Sync root 불러오는 중...","header.currentProjectSyncRoot.unavailable":"Sync root 정보를 불러올 수 없음","header.currentProjectSyncRoot.tooltip":"선택된 프로젝트의 현재 sync root 폴더입니다.","header.currentProjectSyncRoot.loading.tooltip":"Sync root 정보를 아직 불러오는 중입니다.","header.currentProjectSyncRoot.unavailable.tooltip":"현재 sync root 정보를 불러올 수 없습니다.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"테스트 파일 경로를 확인할 수 없습니다.","header.testFiles.tooltip":"선택된 플레이스의 현재 플레이테스트 파일 경로입니다.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"플러그인 연결 필요","header.places.liveRequired":"실시간 활성 플레이스를 확인하려면 플러그인 연결이 필요합니다.","header.place.tooltip":"연결된 Roblox 플레이스입니다.","header.placeNotConnected.tooltip":"플레이스 미연결","header.changeProjectRoot":"프로젝트 루트 변경","header.changeProjectRoot.ariaLabel":"프로젝트 루트 변경","header.changeProjectRoot.tooltip":"현재 프로젝트 루트를 변경합니다.","header.changeProjectRoot.disabledTooltip.l0":"프로젝트 루트를 변경하려면 먼저 MCP 서버 연결이 필요합니다.","header.changeProjectRoot.disabledTooltip.loading":"프로젝트 루트 정보를 아직 불러오는 중입니다.","header.changeProjectRoot.disabledTooltip.unavailable":"현재 프로젝트 루트 정보를 불러올 수 없습니다.","header.projectRootModal.initial.title":"프로젝트 루트 변경","header.projectRootModal.initial.body.connected":"프로젝트 폴더를 선택하면 MCP 프로젝트 루트가 즉시 변경되고 현재 Studio 내용이 새 <selected project folder>/wrox-project-sync 대상으로 전체 재동기화됩니다.","header.projectRootModal.initial.body.disconnected":"프로젝트 폴더를 선택하면 MCP 프로젝트 루트가 즉시 변경되고 새 <selected project folder>/wrox-project-sync 경로가 다음 sync 대상으로 사용됩니다.","header.projectRootModal.initial.nextSyncRoot":"선택 후 새 sync 대상","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/wrox-project-sync","header.projectRootModal.initial.warningStop":"현재 sync는 즉시 중단됩니다.","header.projectRootModal.initial.warningFreshSync":"현재 Studio 내용을 기준으로 새 대상에 fresh full sync가 다시 생성됩니다.","header.projectRootModal.initial.warningNoMove":"기존 sync 폴더는 자동으로 이동되지 않습니다.","header.projectRootModal.initial.warningDeferredSync":"Studio가 아직 연결되지 않았다면 전체 재동기화는 다음 플러그인 연결 시 시작됩니다.","header.projectRootModal.confirm.title":"새 프로젝트 루트 확인","header.projectRootModal.confirm.body":"적용 전에 선택한 프로젝트 폴더를 다시 확인하세요.","header.projectRootModal.confirm.projectRoot":"선택한 프로젝트 폴더","header.projectRootModal.confirm.syncRoot":"새 sync 대상","header.projectRootModal.confirm.warningNoMove":"기존 sync 폴더는 자동으로 이동되지 않습니다.","header.projectRootModal.pick":"폴더 선택","header.projectRootModal.apply":"변경 적용","header.projectRootModal.cancel":"취소","header.projectRootModal.error":"프로젝트 루트를 변경하지 못했습니다.","status.online":"온라인","status.offline":"오프라인","status.idle":"대기","status.syncing":"동기화 중","status.error":"오류","status.initializing":"초기화 중","level.l0.title":"서버 연결 끊김","level.l0.message":"WROX Dashboard가 열린 뒤 서버가 종료되었거나 응답하지 않습니다.","level.l1.title":"서버 연결됨","level.l1.hint":"확인: Studio 실행 중? 플러그인 설치? HTTP 요청 활성화?","level.l2.ok":"Studio 연결됨","tier.basic":"Basic","tier.basic.tooltip":"기본 WROX Dashboard 기능을 제공하는 Basic 티어입니다.","tier.pro":"Pro","tier.pro.tooltip":"전체 WROX Dashboard 기능을 제공하는 Pro 티어입니다.","tier.mixed":"혼합","tier.upgrade":"Pro로 업그레이드","tier.compare":"Basic vs Pro 비교","tier.banner.save":"Pro로 AI 토큰 절약!","tier.comparison.comingSoon":"Basic vs Pro 비교 — 준비 중","tier.comparison.close":"닫기","tier.comparison.detailTitle":"상세 도구 카탈로그","tier.comparison.description":"설명","tier.comparison.basic.core":"핵심 MCP 워크플로우","tier.comparison.basic.core.item1":"스크립트 생성/편집","tier.comparison.basic.core.item2":"인스턴스 관리","tier.comparison.basic.core.item3":"속성 제어","tier.comparison.basic.core.item4":"선택 및 검색","tier.comparison.basic.core.item5":"태그 관리","tier.comparison.basic.core.item6":"카메라 제어","tier.comparison.basic.core.item7":"로그 모니터링","tier.comparison.basic.sync":"동기화 (Basic)","tier.comparison.basic.sync.item1":"Studio에서 로컬로 단방향 동기화","tier.comparison.basic.sync.item2":"수동 적용이 기본값","tier.comparison.pro.all":"Basic의 모든 기능 포함, 추가로","tier.comparison.pro.sync":"고급 동기화 워크플로우","tier.comparison.pro.sync.item1":"유형별 동기화 방향 설정","tier.comparison.pro.sync.item2":"유형별 적용 모드","tier.comparison.pro.sync.item3":"양방향 및 역방향 동기화","tier.comparison.pro.sync.item4":"전체 동기화, 재동기화, Studio로 푸시","tier.comparison.pro.sync.item5":"멀티 플레이스 동기화","tier.comparison.pro.playtest":"플레이테스트 제어","tier.comparison.pro.playtest.item1":"플레이, 정지, 일시정지, 재개","tier.comparison.pro.playtest.item2":"플레이테스트 상태 검사","tier.comparison.pro.playtest.item3":"자동 테스트 실행","tier.comparison.pro.creation":"고급 생성 워크플로우","tier.comparison.pro.creation.item1":"대량 작업","tier.comparison.pro.creation.item2":"터레인 생성","tier.comparison.pro.creation.item3":"에셋 검색 및 삽입","tier.comparison.pro.creation.item4":"레이캐스트 및 공간 분석","tier.comparison.pro.creation.item5":"환경 제어","tier.comparison.discount.label":"🎁 Gumroad 결제 시 아래 코드를 입력하면 할인 받을 수 있어요:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"4월 30일까지 유효","tier.promo.discount.hint":"🎁 Gumroad에서 WEPPY-MCP 코드 사용 · 4월 30일까지","tier.promo.discount.context":"🎁 Gumroad 결제 시 할인코드 입력:","tier.tool.query_instances.desc":"인스턴스 조회, 자식/자손 탐색, 클래스 정보, 이름·클래스 검색. Pro: 파일 트리, 프로젝트 구조, 속성·태그 검색.","tier.tool.mutate_instances.desc":"인스턴스 생성, 삭제, 복제, 이동, 이름변경, 피벗. Pro: 트리 생성, 대량 생성·삭제·복제.","tier.tool.manage_properties.desc":"속성, 어트리뷰트, 태그 조회 및 설정. Pro: 계산·상대값 설정, 대량 조회·설정, 자식 일괄 수정.","tier.tool.manage_scripts.desc":"스크립트 소스 코드 읽기, 쓰기, 생성, 삭제, 줄 편집, 검색. Pro: 스크립트 간 일괄 치환.","tier.tool.manage_lighting.desc":"Pro 전용. 조명, 대기, 하늘, 터레인 속성, 시간대 환경 설정.","tier.tool.manage_selection.desc":"선택 조회, 설정, 해제. Pro: 컨텍스트, 상세 정보, 항목 추가·제거, 변경 감시.","tier.tool.manage_camera.desc":"카메라 정보 조회, 경로 또는 좌표로 포커스, 추천 뷰 제안.","tier.tool.manage_tween.desc":"Pro 전용. 부드러운 애니메이션을 위한 트윈 생성, 재생, 일시정지, 취소.","tier.tool.manage_audio.desc":"Pro 전용. 사운드 재생, 정지, 일시정지, 재개. 오디오 리스너 설정.","tier.tool.manage_animation.desc":"Pro 전용. 애니메이션 로드, 재생, 정지. 휴머노이드·컨트롤러의 트랙 조회.","tier.tool.manage_physics.desc":"Pro 전용. 물리 충돌 그룹 등록, 그룹 간 충돌 설정, 목록 조회.","tier.tool.manage_effects.desc":"Pro 전용. 파티클 방출, 전체 삭제, 이펙트 활성화 토글.","tier.tool.manage_terrain.desc":"Pro 전용. 도형 채우기, 영역 삭제, 재질 치환, 색상 관리, 복셀 읽기·쓰기, 절차적 생성, 스무딩.","tier.tool.spatial_query.desc":"Pro 전용. 레이캐스트, 지면 찾기, 배치 확인, 영역 스캔, 평지·스폰 위치 탐색, 보행 분석, 공간 맵, 충돌 확인.","tier.tool.manage_assets.desc":"Pro 전용. 모델 삽입, 에셋 정보 조회, 크리에이터 스토어 검색, 무료 모델·패키지 삽입, 내보내기.","tier.tool.manage_sync.desc":"Pro 전용. 동기화 상태, 설정, 히스토리, 방향 설정, 동기화 파일 읽기·쓰기.","tier.tool.workspace_state.desc":"Pro 전용. 전체 동기화, 스냅샷, 최근 변경, 뷰포트 정보, 메타데이터, 캐시 관리.","tier.tool.manage_logs.desc":"출력 로그 필터링 조회, 증분 폴링, 버퍼 삭제, 최근 오류 조회.","tier.tool.system_info.desc":"연결 상태, 사용 티어 확인. Pro: 플레이스 정보, 서비스 목록, Studio 설정, 플레이테스트 제어, 자동 테스트.","tier.tool.batch_execute.desc":"Pro 전용. 여러 명령을 한 번에 일괄 실행. 순차 처리하며 오류 시 계속 진행 옵션.","tier.tool.execute_luau.desc":"Pro 전용. Roblox Studio 샌드박스에서 임의 Luau 코드 실행.","connection.server.title":"서버 상태","connection.server.version":"버전","connection.server.version.tooltip":"설치된 MCP 서버 버전입니다.","connection.server.pid":"PID","connection.server.pid.tooltip":"운영체제에서 사용하는 프로세스 식별자입니다.","connection.server.uptime":"가동 시간","connection.server.uptime.tooltip":"MCP 서버가 시작된 뒤 경과한 시간입니다.","connection.server.session":"세션","connection.server.session.tooltip":"현재 MCP 세션 식별자입니다.","connection.server.exec":"실행 파일","connection.server.exec.tooltip":"MCP 서버를 실행한 실행 파일 경로입니다.","connection.reconnect":"수동 재연결","connection.checkSettings":"설정 확인","connection.agents.title":"AI 에이전트","connection.agents.name":"에이전트","connection.agents.cwd":"작업 디렉토리","connection.agents.cwd.tooltip":"연결된 AI 에이전트의 현재 작업 디렉토리입니다.","connection.agents.projectRoot":"프로젝트 루트","connection.agents.projectRoot.tooltip":"Sync ownership을 결정하는 프로젝트 경로","connection.agents.projectRoot.unresolved":"미확인","connection.agents.connected":"연결 시각","connection.agents.unknown":"알 수 없음","connection.agents.none":"연결된 에이전트 없음","connection.plugins.title":"플러그인","connection.plugins.place":"플레이스","connection.plugins.clientId":"클라이언트 ID","connection.plugins.clientId.tooltip":"현재 Studio 연결을 식별하는 플러그인 클라이언트 ID입니다.","connection.plugins.lastSeen":"마지막 확인","connection.plugins.lastSeen.tooltip":"플러그인에서 가장 최근에 수신한 heartbeat 시각입니다.","connection.plugins.version":"버전","connection.plugins.version.tooltip":"Studio가 보고한 설치된 플러그인 버전입니다.","connection.plugins.none":"연결된 플러그인 없음","connection.log.title":"연결 로그","connection.log.empty":"이벤트 없음","connection.time.secondsAgo":"초 전","connection.time.minutesAgo":"분 전","connection.time.hoursAgo":"시간 전","common.loading":"로딩 중...","common.retry":"재시도","common.reconnecting":"재연결 중...","common.expand":"펼치기","common.collapse":"접기","tools.tab.history":"히스토리","tools.tab.statistics":"통계","tools.tab.failures":"실패","tools.col.time":"시간","tools.col.time.tooltip":"도구 실행이 기록된 시각입니다.","tools.col.toolAction":"도구.액션","tools.col.toolAction.tooltip":"실행된 도구 이름과 액션입니다.","tools.col.duration":"소요 시간","tools.col.duration.tooltip":"도구 실행이 완료될 때까지 걸린 시간입니다.","tools.col.status":"상태","tools.col.status.tooltip":"기록된 도구 실행의 결과 상태입니다.","tools.col.tier":"티어","tools.col.tier.tooltip":"도구 또는 액션에 필요한 라이센스 티어입니다.","tools.col.tierStats.tooltip":"도구 통계 행이 Basic, Pro, Mixed 중 어느 집계인지 설명합니다.","tools.col.tool":"도구","tools.col.tool.tooltip":"통계 테이블에 표시되는 통합 도구 이름입니다.","tools.col.calls":"호출 수","tools.col.calls.tooltip":"이 도구에 대해 기록된 총 호출 횟수입니다.","tools.col.okRate":"성공률","tools.col.okRate.tooltip":"성공적으로 끝난 호출 비율입니다.","tools.col.avgTime":"평균 시간","tools.col.avgTime.tooltip":"기록된 호출들의 평균 실행 시간입니다.","tools.col.error":"오류","tools.filter.tool":"도구","tools.filter.all":"전체","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"이 항목은 Pro 전용 도구 또는 액션을 사용했습니다.","tools.status.ok":"OK","tools.status.ok.tooltip":"도구 실행이 성공적으로 완료되었습니다.","tools.tier.mixed.tooltip":"이 도구에는 Basic 액션과 Pro 액션이 함께 포함됩니다.","tools.detail.params":"파라미터","tools.detail.params.tooltip":"이 도구 실행에 전달된 입력 파라미터입니다.","tools.detail.result":"결과","tools.detail.result.tooltip":"이 도구 실행에서 반환된 결과 페이로드입니다.","tools.detail.error":"오류","tools.page.prev":"이전","tools.page.prev.tooltip":"도구 히스토리의 이전 페이지로 이동합니다.","tools.page.next":"다음","tools.page.next.tooltip":"도구 히스토리의 다음 페이지로 이동합니다.","tools.empty.history":"히스토리 없음","tools.empty.stats":"도구 통계 없음","tools.empty.failures":"실패 없음","tools.summary.total":"합계","tools.summary.calls":"호출","tools.summary.sessions":"세션","settings.license.title":"라이센스","settings.license.title.tooltip":"현재 라이센스 상태와 구독 티어입니다.","settings.license.status":"상태","settings.license.status.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.tier":"티어","settings.license.tier.tooltip":"WROX Dashboard 기능 범위를 결정하는 현재 구독 티어입니다.","settings.license.key":"키","settings.license.key.tooltip":"서버에 현재 로드된 마스킹된 라이센스 키입니다.","settings.license.keyValue.tooltip":"서버에 현재 로드된 마스킹된 라이센스 키입니다.","settings.license.provider":"제공자","settings.license.provider.tooltip":"이 키를 검증하는 라이센스 제공자입니다.","settings.license.providerValue.tooltip":"이 키를 검증하는 라이센스 제공자입니다.","settings.license.active":"활성","settings.license.active.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.status.activeCancelPending.tooltip":"해지가 예약되어 있지만 현재 결제 주기가 끝날 때까지 Pro 접근은 유지됩니다.","settings.license.inactive":"비활성","settings.license.inactive.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.expired":"만료","settings.license.expired.tooltip":"현재 라이센스 활성화 상태입니다.","settings.license.unavailable":"라이센스 정보를 불러올 수 없음","settings.license.detail.cancelPending":"해지가 예약되었습니다. 현재 결제 주기가 끝날 때까지 Pro 접근은 유지됩니다.","settings.license.reset":"라이센스 리셋","settings.readOnly":"읽기 전용","settings.readOnly.tooltip":"이 섹션의 값은 WROX Dashboard에서 수정할 수 없습니다.","settings.unavailable":"설정을 불러올 수 없음","settings.general.title":"일반 설정","settings.general.title.tooltip":"변경 즉시 적용되는 Hot 설정입니다.","settings.general.liveApply":"즉시 반영","settings.general.liveApply.tooltip":"이 섹션의 변경은 별도 저장 버튼 없이 바로 적용됩니다.","settings.general.applied":"적용됨","settings.general.logLevel":"로그 레벨","settings.general.logLevel.tooltip":"WROX Dashboard 로그에 남길 상세 수준을 설정합니다.","settings.general.localHistory":"도구 히스토리 기록","settings.general.localHistory.tooltip":"WROX Dashboard 히스토리 화면용 로컬 도구 실행 기록을 저장합니다.","settings.general.localStatistics":"도구 통계 집계","settings.general.localStatistics.tooltip":"WROX Dashboard 보고용 로컬 사용 통계를 집계합니다.","settings.general.contextCapture":"컨텍스트 캡처","settings.general.contextCapture.tooltip":"활성화하면 체인지로그와 플레이테스트 화면에 구조화된 실행 컨텍스트를 기록합니다.","settings.general.requestTimeout":"요청 타임아웃","settings.general.requestTimeout.tooltip":"요청을 실패로 처리하기 전까지 WROX Dashboard가 기다리는 최대 시간입니다.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"요청 타임아웃 단위는 밀리초입니다.","settings.cold.title":"서버 환경변수","settings.cold.title.tooltip":"서버 시작 시 로드되는 읽기 전용 환경변수 값입니다.","settings.cold.httpPort.tooltip":"MCP WROX Dashboard HTTP 서버가 사용하는 포트 번호입니다.","settings.cold.httpHost.tooltip":"MCP WROX Dashboard HTTP 서버가 바인딩하는 호스트 인터페이스입니다.","settings.cold.dashboardAutoOpen.tooltip":"서버 시작 시 브라우저에서 WROX Dashboard를 자동으로 열지 여부를 제어합니다.","settings.cold.dashboardAutoOpen.value.tooltip":"브라우저 자동 열기 현재 시작 동작입니다.","settings.cold.hint":"환경변수로 설정하세요.","settings.language.title":"언어","settings.language.title.tooltip":"WROX Dashboard UI 텍스트에 사용할 언어를 선택합니다.","settings.language.dashboard":"WROX Dashboard 언어","settings.language.dashboard.tooltip":"Auto일 때는 시스템 언어를 따르고, 아니면 선택한 언어를 강제합니다.","settings.language.auto":"자동","overview.l0.title":"MCP 서버 연결 끊김","overview.l0.message":"MCP 서버가 응답하지 않습니다. WROX Dashboard가 자동으로 재연결을 시도합니다.","overview.l0.step1":"MCP 서버 프로세스가 실행 중인지 확인하세요","overview.l0.step2":"필요 시 MCP 서버 명령을 다시 시작하세요","overview.l0.reconnecting":"3초마다 자동 재연결 중...","overview.l0.reconnectBtn":"수동 재연결","overview.l0.settingsBtn":"설정 확인","overview.l1.pluginGuide":"Roblox Studio 플러그인이 연결되지 않았습니다","overview.l1.check1":"Roblox Studio가 실행 중인가요?","overview.l1.check2":"WROX Plugin이 설치되어 있나요?","overview.l1.check3":"Studio 설정에서 HTTP 요청이 활성화되어 있나요?","overview.l1.feedHint":"플러그인이 연결되면 변경사항이 표시됩니다","overview.metric.server":"서버","overview.metric.server.tooltip":"MCP 서버의 실행 상태와 프로세스 상태입니다.","overview.metric.plugin":"플러그인","overview.metric.plugin.tooltip":"Roblox Studio 플러그인의 연결 상태와 버전 정보입니다.","overview.metric.agent":"에이전트","overview.metric.agent.tooltip":"연결된 AI 코딩 에이전트와 현재 실행 상태입니다.","overview.metric.agent.instancesUnit":"인스턴스","overview.metric.sync":"동기화","overview.metric.sync.tooltip":"현재 Studio와 로컬 파일 간 동기화 상태입니다.","overview.metric.noAgent":"에이전트 없음","overview.meta.version":"버전","overview.meta.version.tooltip":"설치된 MCP 서버 버전입니다.","overview.meta.session":"세션","overview.meta.session.tooltip":"현재 MCP 세션 식별자입니다.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"운영체제에서 사용하는 프로세스 식별자입니다.","overview.meta.uptime":"가동 시간","overview.meta.uptime.tooltip":"MCP 서버가 시작된 뒤 경과한 시간입니다.","overview.feed.title":"최근 게임 변경","overview.feed.empty":"최근 변경사항 없음","overview.changelog.title":"세션 변경 요약","overview.changelog.entries":"합계","overview.changelog.scripts":"스크립트","overview.changelog.instances":"인스턴스","overview.changelog.properties":"속성","overview.changelog.assets":"에셋","overview.tier.title":"티어 사용 현황","changelog.subtitle":"게임 변경 이력","changelog.filter.all":"전체","changelog.filter.active":"활성","changelog.filter.completed":"완료","changelog.empty":"변경 이력이 없습니다","changelog.basic.limit.title":"Basic 미리보기에서는 최신 3개 세션만 표시됩니다","changelog.basic.limit.body":"Pro로 업그레이드하면 이 플레이스의 전체 변경 이력 타임라인을 확인할 수 있습니다.","changelog.basic.metricLabel":"표시 중인 변경 이력 / 전체","changelog.basic.visible":"표시 중","changelog.basic.total":"전체","changelog.card.active":"활성","changelog.card.active.tooltip":"이 세션은 아직 새 게임 변경을 계속 수집 중입니다.","changelog.card.completed":"완료","changelog.card.completed.tooltip":"이 세션은 종료되어 더 이상 새 변경이 추가되지 않습니다.","changelog.card.bootstrapStatus":"초기화","changelog.card.bootstrapStatus.tooltip":"이 세션에는 초기 동기화 부트스트랩 스냅샷만 포함됩니다.","changelog.card.inProgress":"진행 중","changelog.card.noChanges":"아직 변경사항 없음","changelog.card.noChanges.tooltip":"이 세션에서는 아직 추출된 게임 변경이 없습니다.","changelog.card.bootstrapSummary":"초기 동기화 스냅샷","changelog.card.bootstrapSummary.tooltip":"초기 파일 동기화 쓰기 작업은 하나의 부트스트랩 스냅샷 행으로 축약됩니다.","changelog.card.sessionIntent":"세션 의도","changelog.card.scripts":"스크립트","changelog.card.scripts.tooltip":"이 세션에서 발생한 스크립트 변경입니다.","changelog.card.instances":"인스턴스","changelog.card.instances.tooltip":"이 세션에서 발생한 인스턴스 생성, 삭제, 이동, 복제 변경입니다.","changelog.card.modified":"수정","changelog.card.created":"생성","changelog.card.deleted":"삭제","changelog.card.moved":"이동","changelog.card.propertiesChanged":"속성 변경","changelog.card.propertiesChanged.tooltip":"이 세션에서 기록된 속성 값 변경입니다.","changelog.card.lightingConfigured":"라이팅 설정됨","changelog.card.lightingConfigured.tooltip":"이 세션에서 라이팅 또는 대기 설정이 변경되었습니다.","changelog.card.terrainConfigured":"터레인 설정됨","changelog.card.terrainConfigured.tooltip":"이 세션에서 터레인 데이터 또는 터레인 설정이 변경되었습니다.","changelog.card.assetsInserted":"에셋 삽입","changelog.card.assetsInserted.tooltip":"이 세션 동안 플레이스에 삽입된 에셋입니다.","changelog.category.script":"스크립트","changelog.category.instance":"인스턴스","changelog.category.property":"속성","changelog.category.lighting":"라이팅","changelog.category.terrain":"터레인","changelog.category.asset":"에셋","changelog.detail.changeSummary":"변경 요약","changelog.detail.changeSummary.tooltip":"이 세션에서 추출된 게임 변경 수를 카테고리별로 묶어서 보여줍니다.","changelog.detail.changeTimeline":"변경 타임라인","changelog.detail.changeTimeline.tooltip":"이 세션에서 추출된 게임 변경을 시간순으로 보여줍니다.","changelog.detail.context.title":"컨텍스트 요약","changelog.detail.context.tooltip":"이 체인지로그 세션에 연결된 구조화된 실행 컨텍스트입니다.","changelog.detail.verification.title":"검증","changelog.detail.verification.tooltip":"이 체인지로그 세션에 연결된 검증 신호입니다.","changelog.detail.verification.label":"결과","changelog.detail.verification.status":"상태","changelog.detail.verification.timestamp":"기록 시각","changelog.detail.beforeAfter":"변경 전후 비교","changelog.detail.filterCategory":"카테고리","changelog.detail.filterCategory.tooltip":"타임라인을 하나의 변경 카테고리만 보이도록 필터링합니다.","changelog.detail.confidence.exact":"정확","changelog.detail.confidence.exact.tooltip":"이 변경은 변경 전과 변경 후 상태가 모두 확인되었습니다.","changelog.detail.confidence.partial":"부분 확인","changelog.detail.confidence.partial.tooltip":"이 변경은 변경 전후 상태 중 일부만 확인되었습니다.","changelog.detail.confidence.afterOnly":"결과만 확인","changelog.detail.confidence.afterOnly.tooltip":"이 변경은 적용 후 결과 상태만 확인되었습니다.","changelog.detail.confidence.intentOnly":"의도만 기록","changelog.detail.confidence.intentOnly.tooltip":"요청된 작업 의도만 기록되었고 결과 상태는 확인되지 않았습니다.","changelog.detail.confidence.unknown":"알 수 없음","changelog.detail.confidence.unknown.tooltip":"사용 가능한 데이터만으로는 이 변경을 신뢰도 있게 분류할 수 없습니다.","changelog.detail.noChanges":"이 카테고리에 변경사항 없음","changelog.detail.backToList":"목록으로 돌아가기","changelog.diff.empty":"비교할 내용 없음","changelog.diff.unified":"통합","changelog.diff.sideBySide":"나란히 비교","changelog.diff.before":"변경 전","changelog.diff.after":"변경 후","sync.overlay.title":"Roblox Studio 플러그인이 필요합니다","sync.overlay.message":"Roblox Studio 플러그인이 연결되면 동기화 상태를 확인할 수 있습니다.","sync.overlay.check1":"Roblox Studio가 실행 중인가요?","sync.overlay.check2":"WROX Plugin이 설치되어 있나요?","sync.overlay.check3":"Studio 설정에서 HTTP 요청이 활성화되어 있나요?","sync.status.title":"동기화 상태","sync.status.title.tooltip":"이 플레이스의 Studio와 로컬 파일 동기화 상태입니다.","sync.status.forwardOnly":"단방향만","sync.status.forwardOnly.tooltip":"Basic 티어에서는 Studio에서 로컬로 가는 단방향 동기화만 사용할 수 있습니다.","sync.status.place":"플레이스","sync.status.place.tooltip":"연결된 Roblox 플레이스 이름과 플레이스 ID입니다.","sync.status.path":"경로","sync.status.path.tooltip":"현재 동기화 출력에 사용하는 로컬 파일 시스템 루트입니다.","sync.status.instances":"인스턴스","sync.status.instances.tooltip":"로컬 미러에 추적 중인 동기화된 Roblox 인스턴스 수입니다.","sync.status.scripts":"스크립트","sync.status.scripts.tooltip":"이 플레이스에 대해 현재 인덱싱된 동기화 스크립트 파일 수입니다.","sync.status.state":"상태","sync.status.state.tooltip":"서버가 보고한 현재 동기화 런타임 상태입니다.","sync.directions.title":"동기화 방향","sync.directions.title.tooltip":"Local과 Studio 사이의 카테고리별 동기화 방향과 적용 방식입니다.","sync.directions.type":"유형","sync.directions.type.tooltip":"이 규칙이 적용되는 동기화 카테고리입니다.","sync.directions.direction":"방향","sync.directions.direction.tooltip":"각 카테고리가 Studio에서만, Studio로만, 또는 양방향으로 동기화되는지 나타냅니다.","sync.directions.applyMode":"적용 모드","sync.directions.applyMode.tooltip":"이 카테고리에 들어오는 동기화 변경을 적용하는 방식입니다.","sync.directions.cat.scripts":"스크립트","sync.directions.cat.values":"값","sync.directions.cat.containers":"컨테이너","sync.directions.cat.data":"데이터","sync.directions.cat.services":"서비스","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"방향 레일의 왼쪽은 항상 디스크의 로컬 파일을 의미합니다.","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"방향 레일의 오른쪽은 항상 Roblox Studio를 의미합니다.","sync.directions.mode.manual":"수동","sync.directions.mode.manual.tooltip":"직접 실행할 때만 동기화 변경을 적용합니다.","sync.directions.mode.auto":"자동","sync.directions.mode.auto.tooltip":"업데이트가 들어오면 동기화 변경을 자동으로 적용합니다.","sync.directions.tooltip.forward.body":"Studio 변경 사항을 로컬 파일로만 동기화합니다","sync.directions.tooltip.bidirectional.body":"Local과 Studio 사이에 양방향 동기화를 사용합니다","sync.directions.tooltip.reverse.body":"로컬 파일 변경 사항을 Studio로 푸시합니다","sync.directions.tooltip.proRequired":"Basic 티어에서는 Pro가 필요합니다","sync.directions.dir.forward":"순방향","sync.directions.dir.bidirectional":"양방향","sync.directions.dir.reverse":"역방향","sync.log.title":"동기화 로그","sync.log.empty":"동기화 이벤트 없음","sync.log.type.write":"쓰기","sync.log.type.write.tooltip":"새 동기화 출력이 디스크에 기록되었습니다.","sync.log.type.update":"업데이트","sync.log.type.update.tooltip":"기존 동기화 파일 또는 인스턴스가 갱신되었습니다.","sync.log.type.delete":"삭제","sync.log.type.delete.tooltip":"동기화된 파일 또는 인스턴스가 제거되었습니다.","sync.log.type.idle":"대기","sync.log.type.idle.tooltip":"파일 변경 없이 동기화 이벤트만 기록되었습니다.","sync.upgrade.title":"Pro로 완전한 동기화 기능 해제","sync.upgrade.benefit1":"양방향 동기화 — 파일 편집 시 Studio에 자동 반영","sync.upgrade.benefit2":"역방향 동기화 — 파일 변경을 Studio로 전송","sync.upgrade.benefit3":"전체 동기화 히스토리 및 상세 변경 로그","sync.upgrade.buy":"Pro로 업그레이드","playtest.status.title":"플레이테스트 상태","playtest.status.title.tooltip":"Studio가 보고한 현재 Roblox 플레이테스트 세션 상태입니다.","playtest.status.mode":"모드","playtest.status.mode.tooltip":"현재 세션에 사용 중인 Studio 플레이테스트 실행 모드입니다.","playtest.status.mode.value.tooltip":"현재 적용 중인 Roblox Studio 플레이테스트 모드의 구체적인 값입니다.","playtest.status.mode.play":"플레이","playtest.status.mode.run":"실행","playtest.status.mode.server":"서버","playtest.status.mode.edit":"편집","playtest.status.place.tooltip":"이 플레이테스트 세션과 연결된 Roblox 플레이스입니다.","playtest.status.state.running":"실행 중","playtest.status.state.running.tooltip":"현재 Roblox 플레이테스트 세션이 실행 중입니다.","playtest.status.state.paused":"일시정지","playtest.status.state.paused.tooltip":"현재 Roblox 플레이테스트 세션이 일시정지 상태입니다.","playtest.status.state.notRunning":"실행 안 함","playtest.status.state.notRunning.tooltip":"현재 실행 중인 Roblox 플레이테스트 세션이 없습니다.","playtest.control.play":"플레이","playtest.control.pause":"일시정지","playtest.control.resume":"재개","playtest.control.stop":"정지","playtest.history.title":"테스트 히스토리","playtest.history.title.tooltip":"이 프로젝트에서 기록된 자동 플레이테스트 실행 이력입니다.","playtest.history.empty":"테스트 결과 없음","playtest.history.mode":"모드","playtest.history.mode.tooltip":"이 기록된 테스트 실행에 사용된 플레이테스트 모드입니다.","playtest.history.status.passed":"성공","playtest.history.status.failed":"실패","playtest.history.status.running":"실행 중","playtest.history.status.unknown":"알 수 없음","playtest.history.status.tooltip":"이 자동 플레이테스트 실행의 기록된 결과 상태입니다.","playtest.empty.title":"아직 플레이테스트 결과가 없습니다","playtest.empty.message":"AI 에이전트가 system_info.run_test로 자동 테스트를 실행하면 결과가 표시됩니다.","playtest.empty.message.before":"AI 에이전트가 자동 테스트를","playtest.empty.message.after":"로 실행하면 결과가 여기에 표시됩니다.","playtest.empty.runTest.tooltip":"system_info 도구를 통해 Roblox 플레이테스트 검사를 실행하는 WROX Dashboard 자동화 진입점입니다.","playtest.report.title":"선택된 리포트","playtest.report.title.tooltip":"현재 선택된 자동 플레이테스트 실행의 상세 출력입니다.","playtest.report.content":"리포트","playtest.report.content.tooltip":"선택된 자동 플레이테스트 실행의 마크다운 요약입니다.","playtest.report.logs":"로그","playtest.report.logs.tooltip":"선택된 자동 플레이테스트 실행에서 수집된 실행 로그입니다.","playtest.context.contextId":"컨텍스트 ID","playtest.context.why":"이 테스트를 실행한 이유","playtest.context.expected":"예상 결과","playtest.context.observed":"관찰 결과","playtest.report.empty":"리포트 내용 없음","playtest.basic.icon":"🎮","playtest.basic.title":"플레이테스트는 Pro 전용 기능입니다","playtest.basic.desc":"WROX Dashboard에서 플레이테스트를 제어하고, 자동 테스트를 실행하며, 상세한 테스트 리포트를 확인하세요.","playtest.basic.benefit1":"원클릭 플레이/일시정지/정지 제어","playtest.basic.benefit2":"AI 에이전트를 통한 자동 테스트 실행","playtest.basic.benefit3":"성공/실패 추적이 가능한 테스트 히스토리","playtest.basic.benefit4":"상세한 마크다운 테스트 리포트","playtest.sample.badge":"Pro 플레이테스트 화면 미리보기","playtest.sample.title":"현재 보고 있는 화면은 Pro 업그레이드 후 사용할 수 있는 플레이테스트 화면 예시입니다.","playtest.sample.message":"이 미리보기는 샘플 데이터로 구성되어 있습니다. 실시간 플레이테스트 제어, 히스토리 관리, 실제 리포트 저장은 Pro 구매 후 사용할 수 있습니다.","playtest.sample.clearDisabled":"실제 플레이테스트 기록 삭제는 Pro에서 사용할 수 있습니다.","playtest.sample.place":"아레나 미리보기","playtest.sample.history.name":"샘플 아레나 스모크 테스트","playtest.sample.context.why":"아레나에 스폰한 뒤 첫 구간을 버티고 HUD가 즉시 반응하는지 확인합니다.","playtest.sample.context.expected":"플레이어가 안전하게 스폰되고, 1초 안에 카운트다운 UI가 표시되며, 첫 웨이브가 오류 없이 시작되어야 합니다.","playtest.sample.context.observed":"스폰 보호가 정상 동작했고, HUD가 제때 갱신되었으며, 첫 웨이브가 회귀 없이 완료되었습니다.","playtest.sample.report.markdown":`# 샘플 아레나 스모크 테스트
80
+
81
+ - 스폰 흐름: 통과
82
+ - HUD 카운트다운: 통과
83
+ - 웨이브 시작: 통과
84
+
85
+ 이 화면은 샘플 미리보기입니다. Pro로 업그레이드하면 라이브 플레이테스트를 실행하고 실제 리포트를 저장할 수 있습니다.`,"playtest.sample.report.logs":`[sample] 플레이테스트 미리보기 부팅
86
+ [sample] 스폰 보호 활성화
87
+ [sample] HUD 카운트다운 렌더링
88
+ [sample] 1웨이브 완료
89
+ [sample] 미리보기 리포트 종료`},dm={"sidebar.overview":"Resumen","sidebar.changelog":"Historial","sidebar.connection":"Conexión","sidebar.sync":"Sincronización","sidebar.playtest":"Prueba","sidebar.tools":"Herramientas","sidebar.settings":"Configuración","header.currentProject":"Proyecto actual","header.unknownProject":"Proyecto desconocido","header.projectRoot.label":"Project Root","header.currentProject.loading":"Cargando raíz del proyecto...","header.currentProject.unavailable":"Raíz del proyecto no disponible","header.placeNotConnected":"Place no conectado","header.currentProject.tooltip":"Carpeta de proyecto seleccionada actualmente.","header.currentProject.loading.tooltip":"La información de la raíz del proyecto todavía se está cargando.","header.currentProject.unavailable.tooltip":"La información actual de la raíz del proyecto no está disponible.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Cargando sync root...","header.currentProjectSyncRoot.unavailable":"Sync root no disponible","header.currentProjectSyncRoot.tooltip":"Carpeta sync root actual del proyecto seleccionado.","header.currentProjectSyncRoot.loading.tooltip":"La información de sync root todavía se está cargando.","header.currentProjectSyncRoot.unavailable.tooltip":"La información actual de sync root no está disponible.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"La ruta de archivos de prueba no está disponible.","header.testFiles.tooltip":"Directorio actual de archivos de playtest para el place seleccionado.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Se requiere conexión del plugin","header.places.liveRequired":"Se requiere conexión del plugin para ver el place activo en tiempo real.","header.place.tooltip":"Place de Roblox conectado.","header.placeNotConnected.tooltip":"Place no conectado","header.changeProjectRoot":"Cambiar raíz del proyecto","header.changeProjectRoot.ariaLabel":"Cambiar raíz del proyecto","header.changeProjectRoot.tooltip":"Cambiar la raíz actual del proyecto.","header.changeProjectRoot.disabledTooltip.l0":"Primero se requiere conexión con el servidor MCP para cambiar la raíz del proyecto.","header.changeProjectRoot.disabledTooltip.loading":"La información de la raíz del proyecto todavía se está cargando.","header.changeProjectRoot.disabledTooltip.unavailable":"La información actual de la raíz del proyecto no está disponible.","header.projectRootModal.initial.title":"Cambiar raíz del proyecto","header.projectRootModal.initial.body.connected":"Después de elegir una carpeta de proyecto, MCP cambiará a la nueva raíz del proyecto y el contenido actual de Studio se resincronizará por completo en el nuevo destino <selected project folder>/wrox-project-sync.","header.projectRootModal.initial.body.disconnected":"Después de elegir una carpeta de proyecto, MCP cambiará a la nueva raíz del proyecto y usará <selected project folder>/wrox-project-sync como el próximo destino de sync.","header.projectRootModal.initial.nextSyncRoot":"Nuevo destino de sync después de la selección","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/wrox-project-sync","header.projectRootModal.initial.warningStop":"El sync actual se detiene de inmediato.","header.projectRootModal.initial.warningFreshSync":"El contenido actual de Studio se usará para crear un fresh full sync en el nuevo destino.","header.projectRootModal.initial.warningNoMove":"Las carpetas de sync anteriores no se mueven automáticamente.","header.projectRootModal.initial.warningDeferredSync":"Si Studio no está conectado, el full resync comenzará la próxima vez que se conecte el plugin.","header.projectRootModal.confirm.title":"Confirmar nueva raíz del proyecto","header.projectRootModal.confirm.body":"Revisa la carpeta seleccionada antes de aplicar el cambio.","header.projectRootModal.confirm.projectRoot":"Carpeta de proyecto seleccionada","header.projectRootModal.confirm.syncRoot":"Nuevo destino de sync","header.projectRootModal.confirm.warningNoMove":"Las carpetas de sync existentes no se mueven automáticamente.","header.projectRootModal.pick":"Elegir carpeta","header.projectRootModal.apply":"Aplicar cambio","header.projectRootModal.cancel":"Cancelar","header.projectRootModal.error":"No se pudo cambiar la raíz del proyecto.","sidebar.gate.l1":"Se requiere conexión con el servidor MCP.","sidebar.gate.l2":"Se requiere conexión con el plugin de Roblox Studio.","status.online":"En línea","status.offline":"Desconectado","status.idle":"Inactivo","status.syncing":"Sincronizando","status.error":"Error","status.initializing":"Inicializando","level.l0.title":"Servidor desconectado","level.l0.message":"WROX Dashboard está abierto pero el servidor MCP se detuvo o no responde.","level.l1.title":"Servidor conectado","level.l1.hint":"Verifica: ¿Roblox Studio está abierto? ¿El plugin está instalado? ¿Las solicitudes HTTP están habilitadas?","level.l2.ok":"Studio conectado","tier.basic":"Basic","tier.basic.tooltip":"Nivel Basic con el conjunto estándar de funciones del WROX Dashboard.","tier.pro":"Pro","tier.pro.tooltip":"Nivel Pro con el conjunto completo de funciones del WROX Dashboard.","tier.mixed":"Mixto","tier.upgrade":"Actualizar a Pro","tier.compare":"Basic vs Pro","tier.banner.save":"¡Ahorra tokens de IA con Pro!","tier.comparison.comingSoon":"Comparación Basic vs Pro — próximamente","tier.comparison.close":"Cerrar","tier.comparison.detailTitle":"Catálogo detallado de herramientas","tier.comparison.description":"Descripción","tier.comparison.basic.core":"Flujo MCP básico","tier.comparison.basic.core.item1":"Crear/editar scripts","tier.comparison.basic.core.item2":"Gestión de instancias","tier.comparison.basic.core.item3":"Control de propiedades","tier.comparison.basic.core.item4":"Selección y búsqueda","tier.comparison.basic.core.item5":"Gestión de etiquetas","tier.comparison.basic.core.item6":"Control de cámara","tier.comparison.basic.core.item7":"Monitoreo de registros","tier.comparison.basic.sync":"Sincronización (Basic)","tier.comparison.basic.sync.item1":"Sincronización unidireccional de Studio a local","tier.comparison.basic.sync.item2":"Aplicación manual por defecto","tier.comparison.pro.all":"Todo en Basic, además","tier.comparison.pro.sync":"Flujo de sincronización avanzado","tier.comparison.pro.sync.item1":"Dirección de sincronización por tipo","tier.comparison.pro.sync.item2":"Modo de aplicación por tipo","tier.comparison.pro.sync.item3":"Sincronización bidireccional e inversa","tier.comparison.pro.sync.item4":"Sincronización completa, resincronización y envío a Studio","tier.comparison.pro.sync.item5":"Sincronización multi-lugar","tier.comparison.pro.playtest":"Control de playtest","tier.comparison.pro.playtest.item1":"Reproducir, detener, pausar y reanudar","tier.comparison.pro.playtest.item2":"Inspección del estado de playtest","tier.comparison.pro.playtest.item3":"Ejecución de pruebas automatizadas","tier.comparison.pro.creation":"Flujo de creación avanzado","tier.comparison.pro.creation.item1":"Operaciones masivas","tier.comparison.pro.creation.item2":"Generación de terreno","tier.comparison.pro.creation.item3":"Búsqueda e inserción de assets","tier.comparison.pro.creation.item4":"Raycast y análisis espacial","tier.comparison.pro.creation.item5":"Control de entorno","tier.comparison.discount.label":"🎁 Ingresa este código en Gumroad para recibir un descuento:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"Válido hasta el 30 de abril","tier.promo.discount.hint":"🎁 Usa el código WEPPY-MCP en Gumroad · Válido hasta el 30 de abril","tier.promo.discount.context":"🎁 Ingresa en Gumroad al pagar:","tier.tool.query_instances.desc":"Consulta de instancias, exploración de hijos/descendientes, info de clase, búsqueda por nombre y clase. Pro: árbol de archivos, estructura del proyecto, búsqueda por propiedad y etiqueta.","tier.tool.mutate_instances.desc":"Crear, eliminar, clonar, mover, renombrar y pivotar instancias. Pro: creación de árboles, creación/eliminación/duplicación masiva.","tier.tool.manage_properties.desc":"Consultar y establecer propiedades, atributos y etiquetas. Pro: valores calculados y relativos, consulta/establecimiento masivo, modificación masiva de hijos.","tier.tool.manage_scripts.desc":"Leer, escribir, crear, eliminar, editar líneas y buscar en scripts. Pro: reemplazo masivo entre scripts.","tier.tool.manage_lighting.desc":"Solo Pro. Configuración de iluminación, atmósfera, cielo, propiedades del terreno y hora del día.","tier.tool.manage_selection.desc":"Consultar, establecer y borrar selección. Pro: contexto, detalles, agregar/quitar elementos, monitorear cambios.","tier.tool.manage_camera.desc":"Info de cámara, enfocar por ruta o coordenadas, vista sugerida.","tier.tool.manage_tween.desc":"Solo Pro. Crear, reproducir, pausar y cancelar tweens para animaciones suaves.","tier.tool.manage_audio.desc":"Solo Pro. Reproducir, detener, pausar y reanudar sonidos. Configurar listener de audio.","tier.tool.manage_animation.desc":"Solo Pro. Cargar, reproducir y detener animaciones. Consultar tracks de humanoide/controlador.","tier.tool.manage_physics.desc":"Solo Pro. Registrar grupos de colisión, configurar colisión entre grupos, listar grupos.","tier.tool.manage_effects.desc":"Solo Pro. Emitir partículas, borrar todas, alternar activación de efectos.","tier.tool.manage_terrain.desc":"Solo Pro. Rellenar formas, borrar regiones, reemplazar materiales, gestionar colores, leer/escribir voxels, generación procedural, suavizado.","tier.tool.spatial_query.desc":"Solo Pro. Raycast, buscar suelo, verificar colocación, escaneo de área, buscar zonas planas y puntos de aparición, análisis de caminabilidad, mapa espacial, detección de colisión.","tier.tool.manage_assets.desc":"Solo Pro. Insertar modelos, consultar info de assets, buscar en tienda de creadores, insertar modelos/paquetes gratuitos, exportar.","tier.tool.manage_sync.desc":"Solo Pro. Estado de sincronización, configuración, historial, dirección, lectura/escritura de archivos sincronizados.","tier.tool.workspace_state.desc":"Solo Pro. Sincronización completa, instantánea, cambios recientes, info de viewport, metadatos, gestión de caché.","tier.tool.manage_logs.desc":"Consulta filtrada de registros, sondeo incremental, borrar buffer, consulta de errores recientes.","tier.tool.system_info.desc":"Estado de conexión, verificación de tier. Pro: info de lugar, lista de servicios, configuración de Studio, control de playtest, pruebas automáticas.","tier.tool.batch_execute.desc":"Solo Pro. Ejecutar múltiples comandos en lote. Procesamiento secuencial con opción de continuar en caso de error.","tier.tool.execute_luau.desc":"Solo Pro. Ejecutar código Luau arbitrario en el sandbox de Roblox Studio.","connection.server.title":"Estado del servidor","connection.server.version":"Versión","connection.server.version.tooltip":"Versión instalada del servidor MCP.","connection.server.pid":"PID","connection.server.pid.tooltip":"Identificador de proceso del sistema operativo.","connection.server.uptime":"Tiempo activo","connection.server.uptime.tooltip":"Tiempo transcurrido desde que se inició el servidor MCP.","connection.server.session":"Sesión","connection.server.session.tooltip":"Identificador de la sesión MCP actual.","connection.server.exec":"Ejecutable","connection.server.exec.tooltip":"Ruta del ejecutable usado para iniciar el servidor MCP.","connection.reconnect":"Reconectar","connection.checkSettings":"Verificar configuración","connection.agents.title":"Agentes IA","connection.agents.name":"Agente","connection.agents.cwd":"Directorio","connection.agents.cwd.tooltip":"Directorio de trabajo actual del agente de IA conectado.","connection.agents.projectRoot":"Raíz del proyecto","connection.agents.projectRoot.tooltip":"Ruta del proyecto autoritativa para la propiedad de sincronización","connection.agents.projectRoot.unresolved":"Sin resolver","connection.agents.connected":"Conectado","connection.agents.unknown":"Desconocido","connection.agents.none":"Sin agentes conectados","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"ID de cliente","connection.plugins.clientId.tooltip":"Identificador único del cliente del plugin para esta conexión de Studio.","connection.plugins.lastSeen":"Última vez","connection.plugins.lastSeen.tooltip":"Heartbeat más reciente recibido desde el plugin.","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Versión instalada del plugin informada por Studio.","connection.plugins.none":"Sin plugins conectados","connection.log.title":"Registro de conexión","connection.log.empty":"Sin eventos","connection.time.secondsAgo":"s atrás","connection.time.minutesAgo":"min atrás","connection.time.hoursAgo":"h atrás","common.loading":"Cargando...","common.retry":"Reintentar","common.reconnecting":"Reconectando...","common.expand":"Expandir","common.collapse":"Contraer","tools.tab.history":"Historial","tools.tab.statistics":"Estadísticas","tools.tab.failures":"Fallos","tools.col.time":"Hora","tools.col.time.tooltip":"Momento en que se registró la ejecución de la herramienta.","tools.col.toolAction":"Herramienta.Acción","tools.col.toolAction.tooltip":"Nombre de la herramienta y acción que se ejecutó.","tools.col.duration":"Duración","tools.col.duration.tooltip":"Cuánto tardó la herramienta en finalizar.","tools.col.status":"Estado","tools.col.status.tooltip":"Resultado de la ejecución registrada.","tools.col.tier":"Nivel","tools.col.tier.tooltip":"Nivel de licencia requerido para la herramienta o acción.","tools.col.tierStats.tooltip":"Resumen Basic, Pro o Mixed para esta fila de estadísticas de herramientas.","tools.col.tool":"Herramienta","tools.col.tool.tooltip":"Nombre de la herramienta consolidada en la tabla de estadísticas.","tools.col.calls":"Llamadas","tools.col.calls.tooltip":"Número total de llamadas registradas para esta herramienta.","tools.col.okRate":"% Éxito","tools.col.okRate.tooltip":"Porcentaje de llamadas que terminaron correctamente.","tools.col.avgTime":"Tiempo promedio","tools.col.avgTime.tooltip":"Tiempo promedio de ejecución entre las llamadas registradas.","tools.col.error":"Error","tools.filter.tool":"Herramienta","tools.filter.all":"Todos","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Esta entrada usó una herramienta o acción exclusiva de Pro.","tools.status.ok":"OK","tools.status.ok.tooltip":"La ejecución de la herramienta finalizó correctamente.","tools.tier.mixed.tooltip":"Esta herramienta incluye acciones Basic y Pro.","tools.detail.params":"Parámetros","tools.detail.params.tooltip":"Parámetros de entrada enviados en esta ejecución.","tools.detail.result":"Resultado","tools.detail.result.tooltip":"Carga útil devuelta por esta ejecución.","tools.detail.error":"Error","tools.page.prev":"Anterior","tools.page.prev.tooltip":"Ir a la página anterior del historial de herramientas.","tools.page.next":"Siguiente","tools.page.next.tooltip":"Ir a la página siguiente del historial de herramientas.","tools.empty.history":"Sin entradas de historial","tools.empty.stats":"Sin estadísticas","tools.empty.failures":"Sin fallos","tools.summary.total":"Total","tools.summary.calls":"llamadas","tools.summary.sessions":"Sesiones","settings.license.title":"Licencia","settings.license.title.tooltip":"Estado actual de la licencia y nivel de suscripción.","settings.license.status":"Estado","settings.license.status.tooltip":"Estado actual de activación de la licencia.","settings.license.tier":"Nivel","settings.license.tier.tooltip":"Nivel de suscripción actual para las funciones disponibles del WROX Dashboard.","settings.license.key":"Clave","settings.license.key.tooltip":"Clave de licencia enmascarada cargada actualmente por el servidor.","settings.license.keyValue.tooltip":"Clave de licencia enmascarada cargada actualmente por el servidor.","settings.license.provider":"Proveedor","settings.license.provider.tooltip":"Proveedor de licencia usado para validar esta clave.","settings.license.providerValue.tooltip":"Proveedor de licencia usado para validar esta clave.","settings.license.active":"Activa","settings.license.active.tooltip":"Estado actual de activación de la licencia.","settings.license.status.activeCancelPending.tooltip":"La cancelación está pendiente, pero el acceso Pro seguirá activo hasta que termine el período de facturación actual.","settings.license.inactive":"Inactiva","settings.license.inactive.tooltip":"Estado actual de activación de la licencia.","settings.license.expired":"Expirada","settings.license.expired.tooltip":"Estado actual de activación de la licencia.","settings.license.unavailable":"Información de licencia no disponible","settings.license.detail.cancelPending":"La cancelación está programada. El acceso Pro seguirá activo hasta que termine el período de facturación actual.","settings.license.reset":"Restablecer licencia","settings.readOnly":"Solo lectura","settings.readOnly.tooltip":"Esta sección muestra valores que no se pueden editar desde el WROX Dashboard.","settings.unavailable":"Configuración no disponible","settings.general.title":"Configuración general","settings.general.title.tooltip":"Ajustes calientes que se aplican inmediatamente al cambiarse.","settings.general.liveApply":"Aplicar en vivo","settings.general.liveApply.tooltip":"Los cambios en esta sección se aplican al instante sin un botón de guardar aparte.","settings.general.applied":"Aplicado","settings.general.logLevel":"Nivel de log","settings.general.logLevel.tooltip":"Define cuánto detalle escribe el WROX Dashboard en sus registros.","settings.general.localHistory":"Registro de historial","settings.general.localHistory.tooltip":"Guarda el historial local de ejecución de herramientas para las vistas de historial del WROX Dashboard.","settings.general.localStatistics":"Recopilación de estadísticas","settings.general.localStatistics.tooltip":"Agrega estadísticas locales de uso para los informes del WROX Dashboard.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WROX Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Tiempo de espera","settings.general.requestTimeout.tooltip":"Tiempo máximo que el WROX Dashboard espera una solicitud antes de marcarla como fallida.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"El tiempo de espera de la solicitud se mide en milisegundos.","settings.cold.title":"Entorno del servidor","settings.cold.title.tooltip":"Valores de entorno del servidor de solo lectura cargados al iniciar.","settings.cold.httpPort.tooltip":"Número de puerto usado por el servidor HTTP del WROX Dashboard MCP.","settings.cold.httpHost.tooltip":"Interfaz de host a la que se enlaza el servidor HTTP del WROX Dashboard MCP.","settings.cold.dashboardAutoOpen.tooltip":"Controla si el WROX Dashboard se abre automáticamente en el navegador al iniciar el servidor.","settings.cold.dashboardAutoOpen.value.tooltip":"Comportamiento actual de inicio para abrir el WROX Dashboard en un navegador.","settings.cold.hint":"Configure mediante variables de entorno.","settings.language.title":"Idioma","settings.language.title.tooltip":"Elige cómo se localiza el texto de la interfaz del WROX Dashboard.","settings.language.dashboard":"Idioma del WROX Dashboard","settings.language.dashboard.tooltip":"Sobrescribe el idioma del WROX Dashboard o usa el idioma del sistema cuando está en Automático.","settings.language.auto":"Automático","overview.l0.title":"Servidor MCP desconectado","overview.l0.message":"El servidor MCP no responde. El WROX Dashboard intentará reconectarse automáticamente.","overview.l0.step1":"Verifique que el proceso del servidor MCP esté ejecutándose","overview.l0.step2":"Reinicie el comando del servidor MCP si es necesario","overview.l0.reconnecting":"Reconectando automáticamente cada 3s...","overview.l0.reconnectBtn":"Reconectar","overview.l0.settingsBtn":"Verificar configuración","overview.l1.pluginGuide":"El plugin de Roblox Studio no está conectado","overview.l1.check1":"¿Roblox Studio está abierto?","overview.l1.check2":"¿El WROX Plugin está instalado?","overview.l1.check3":"¿Las solicitudes HTTP están habilitadas en la configuración de Studio?","overview.l1.feedHint":"Los cambios aparecerán aquí cuando el plugin se conecte","overview.metric.server":"Servidor","overview.metric.server.tooltip":"Estado de ejecución y proceso del servidor MCP.","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Estado de conexión y versión del plugin de Roblox Studio.","overview.metric.agent":"Agente","overview.metric.agent.tooltip":"Agentes de IA conectados y su estado actual.","overview.metric.agent.instancesUnit":"instancias","overview.metric.sync":"Sincronización","overview.metric.sync.tooltip":"Actividad actual de sincronización entre Studio y archivos locales.","overview.metric.noAgent":"Sin agente","overview.meta.version":"Versión","overview.meta.version.tooltip":"Versión instalada del servidor MCP.","overview.meta.session":"Sesión","overview.meta.session.tooltip":"Identificador de la sesión MCP actual.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Identificador de proceso del sistema operativo.","overview.meta.uptime":"Tiempo activo","overview.meta.uptime.tooltip":"Tiempo transcurrido desde que se inició el servidor MCP.","overview.feed.title":"Cambios recientes del juego","overview.feed.empty":"Sin cambios recientes","overview.changelog.title":"Resumen de cambios de sesión","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"instancias","overview.changelog.properties":"propiedades","overview.changelog.assets":"assets","overview.tier.title":"Uso por nivel","changelog.subtitle":"Historial de cambios del juego","changelog.filter.all":"Todos","changelog.filter.active":"Activo","changelog.filter.completed":"Completado","changelog.empty":"Sin entradas de historial","changelog.basic.limit.title":"La vista previa Basic muestra solo las 3 sesiones más recientes","changelog.basic.limit.body":"Actualiza a Pro para explorar la línea completa del historial de cambios de este place.","changelog.basic.metricLabel":"Historial visible / Total","changelog.basic.visible":"visibles","changelog.basic.total":"total","changelog.card.active":"Activo","changelog.card.active.tooltip":"Esta sesión todavía sigue recibiendo nuevos cambios del juego.","changelog.card.completed":"Completado","changelog.card.completed.tooltip":"Esta sesión terminó y ya no se esperan más cambios.","changelog.card.bootstrapStatus":"Inicializado","changelog.card.bootstrapStatus.tooltip":"Esta sesión solo contiene la instantánea inicial de bootstrap de sincronización.","changelog.card.inProgress":"en progreso","changelog.card.noChanges":"Sin cambios aún","changelog.card.noChanges.tooltip":"Todavía no se han extraído cambios del juego para esta sesión.","changelog.card.bootstrapSummary":"Instantánea de sincronización inicial","changelog.card.bootstrapSummary.tooltip":"Las escrituras de la sincronización inicial de archivos se agrupan en una sola fila de bootstrap.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Cambios de scripts realizados en esta sesión.","changelog.card.instances":"instancias","changelog.card.instances.tooltip":"Cambios de creación, eliminación, movimiento o clonado de instancias en esta sesión.","changelog.card.modified":"modificado","changelog.card.created":"creado","changelog.card.deleted":"eliminado","changelog.card.moved":"movido","changelog.card.propertiesChanged":"propiedades cambiadas","changelog.card.propertiesChanged.tooltip":"Cambios de valores de propiedades registrados para esta sesión.","changelog.card.lightingConfigured":"Iluminación configurada","changelog.card.lightingConfigured.tooltip":"La iluminación o la atmósfera cambiaron en esta sesión.","changelog.card.terrainConfigured":"Terreno configurado","changelog.card.terrainConfigured.tooltip":"Los datos o la configuración del terreno cambiaron en esta sesión.","changelog.card.assetsInserted":"assets insertados","changelog.card.assetsInserted.tooltip":"Assets insertados en el place durante esta sesión.","changelog.category.script":"Scripts","changelog.category.instance":"Instancias","changelog.category.property":"Propiedades","changelog.category.lighting":"Iluminación","changelog.category.terrain":"Terreno","changelog.category.asset":"Assets","changelog.detail.changeSummary":"Resumen de cambios","changelog.detail.changeSummary.tooltip":"Cantidad de cambios del juego extraídos agrupados por categoría para esta sesión.","changelog.detail.changeTimeline":"Línea de tiempo","changelog.detail.changeTimeline.tooltip":"Lista cronológica de cambios del juego extraídos para esta sesión.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Antes y después","changelog.detail.filterCategory":"Categoría","changelog.detail.filterCategory.tooltip":"Filtra la línea de tiempo a una sola categoría de cambio.","changelog.detail.confidence.exact":"Exacto","changelog.detail.confidence.exact.tooltip":"Se confirmaron tanto el estado anterior como el posterior para este cambio.","changelog.detail.confidence.partial":"Parcial","changelog.detail.confidence.partial.tooltip":"Solo se pudo confirmar parte del estado anterior y posterior para este cambio.","changelog.detail.confidence.afterOnly":"Solo después","changelog.detail.confidence.afterOnly.tooltip":"Solo se pudo confirmar el estado resultante después del cambio.","changelog.detail.confidence.intentOnly":"Solo intención","changelog.detail.confidence.intentOnly.tooltip":"Solo se registró la acción solicitada, no el estado resultante.","changelog.detail.confidence.unknown":"Desconocido","changelog.detail.confidence.unknown.tooltip":"No fue posible clasificar este cambio con confianza usando los datos disponibles.","changelog.detail.noChanges":"Sin cambios en esta categoría","changelog.detail.backToList":"Volver a la lista","changelog.diff.empty":"Sin diferencias disponibles","changelog.diff.unified":"Unificado","changelog.diff.sideBySide":"Lado a lado","changelog.diff.before":"Antes","changelog.diff.after":"Después","sync.overlay.title":"Se requiere el plugin de Roblox Studio","sync.overlay.message":"El estado de sincronización estará disponible cuando el plugin de Roblox Studio se conecte.","sync.overlay.check1":"¿Roblox Studio está abierto?","sync.overlay.check2":"¿El WROX Plugin está instalado?","sync.overlay.check3":"¿Las solicitudes HTTP están habilitadas en la configuración de Studio?","sync.status.title":"Estado de sincronización","sync.status.title.tooltip":"Estado actual de sincronización entre Studio y archivos locales para este place.","sync.status.forwardOnly":"Solo avance","sync.status.forwardOnly.tooltip":"La suscripción Basic solo permite sincronización directa de Studio a local.","sync.status.place":"Place","sync.status.place.tooltip":"Nombre e ID del place de Roblox conectado.","sync.status.path":"Ruta","sync.status.path.tooltip":"Raíz del sistema de archivos local usada actualmente para la sincronización.","sync.status.instances":"Instancias","sync.status.instances.tooltip":"Cantidad total de instancias de Roblox sincronizadas en el espejo local.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Cantidad total de scripts sincronizados e indexados para este place.","sync.status.state":"Estado","sync.status.state.tooltip":"Estado de ejecución de sincronización reportado por el servidor.","sync.directions.title":"Direcciones de sincronización","sync.directions.title.tooltip":"Dirección y modo de aplicación por categoría entre Local y Studio.","sync.directions.type":"Tipo","sync.directions.type.tooltip":"Categoría de sincronización afectada por esta regla.","sync.directions.direction":"Dirección","sync.directions.direction.tooltip":"Indica si cada categoría sincroniza desde Studio, hacia Studio o en ambos sentidos.","sync.directions.applyMode":"Modo de aplicación","sync.directions.applyMode.tooltip":"Cómo se aplican los cambios de sincronización entrantes para esta categoría.","sync.directions.cat.scripts":"Scripts","sync.directions.cat.values":"Valores","sync.directions.cat.containers":"Contenedores","sync.directions.cat.data":"Datos","sync.directions.cat.services":"Servicios","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"Los archivos locales en disco siempre se muestran a la izquierda del riel de dirección.","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"Roblox Studio siempre se muestra a la derecha del riel de dirección.","sync.directions.mode.manual":"Manual","sync.directions.mode.manual.tooltip":"Aplica los cambios de sincronización solo cuando los activas manualmente.","sync.directions.mode.auto":"Auto","sync.directions.mode.auto.tooltip":"Aplica los cambios de sincronización automáticamente cuando llegan actualizaciones.","sync.directions.tooltip.forward.body":"Los cambios de Studio se sincronizan solo a los archivos locales","sync.directions.tooltip.bidirectional.body":"Sincronización en ambos sentidos entre Local y Studio","sync.directions.tooltip.reverse.body":"Envía cambios de archivos locales a Studio","sync.directions.tooltip.proRequired":"Se requiere Pro en el plan Basic","sync.directions.dir.forward":"adelante","sync.directions.dir.bidirectional":"bidireccional","sync.directions.dir.reverse":"inverso","sync.log.title":"Registro de sincronización","sync.log.empty":"Sin eventos de sincronización","sync.log.type.write":"ESCRIBIR","sync.log.type.write.tooltip":"Se escribió una nueva salida sincronizada en el disco.","sync.log.type.update":"ACTUALIZAR","sync.log.type.update.tooltip":"Se actualizó un archivo o una instancia ya sincronizada.","sync.log.type.delete":"ELIMINAR","sync.log.type.delete.tooltip":"Se eliminó un archivo o una instancia sincronizada.","sync.log.type.idle":"INACTIVO","sync.log.type.idle.tooltip":"Se registró un evento de sincronización sin modificar archivos.","sync.upgrade.title":"Desbloquea sincronización completa con Pro","sync.upgrade.benefit1":"Sincronización bidireccional — edita archivos, se aplica automáticamente a Studio","sync.upgrade.benefit2":"Sincronización inversa — envía cambios de archivos a Studio","sync.upgrade.benefit3":"Historial completo de sincronización y registro detallado de cambios","sync.upgrade.buy":"Actualizar a Pro","playtest.status.title":"Estado de prueba","playtest.status.title.tooltip":"Estado actual de la sesión de playtest de Roblox informado por Studio.","playtest.status.mode":"Modo","playtest.status.mode.tooltip":"Modo de inicio de playtest de Studio usado por la sesión actual.","playtest.status.mode.value.tooltip":"Modo específico de playtest de Roblox Studio que se está usando ahora.","playtest.status.mode.play":"Jugar","playtest.status.mode.run":"Ejecutar","playtest.status.mode.server":"Servidor","playtest.status.mode.edit":"Editar","playtest.status.place.tooltip":"Place de Roblox asociado actualmente con esta sesión de playtest.","playtest.status.state.running":"En ejecución","playtest.status.state.running.tooltip":"Actualmente hay una sesión de playtest de Roblox en ejecución.","playtest.status.state.paused":"Pausado","playtest.status.state.paused.tooltip":"La sesión actual de playtest de Roblox está en pausa.","playtest.status.state.notRunning":"Sin ejecutar","playtest.status.state.notRunning.tooltip":"Actualmente no hay ninguna sesión de playtest de Roblox en ejecución.","playtest.control.play":"Jugar","playtest.control.pause":"Pausar","playtest.control.resume":"Reanudar","playtest.control.stop":"Detener","playtest.history.title":"Historial de pruebas","playtest.history.title.tooltip":"Ejecuciones automatizadas de playtest registradas para este proyecto.","playtest.history.empty":"Sin resultados de prueba","playtest.history.mode":"Modo","playtest.history.mode.tooltip":"Modo de playtest usado en esta ejecución de prueba registrada.","playtest.history.status.passed":"Aprobado","playtest.history.status.failed":"Fallido","playtest.history.status.running":"En ejecución","playtest.history.status.unknown":"Desconocido","playtest.history.status.tooltip":"Estado de resultado registrado para esta ejecución automatizada de playtest.","playtest.empty.title":"Sin resultados de prueba aún","playtest.empty.message":"Los resultados aparecerán aquí cuando el agente IA ejecute pruebas automatizadas vía system_info.run_test.","playtest.empty.message.before":"Los resultados aparecerán aquí cuando el agente IA ejecute pruebas automatizadas mediante","playtest.empty.message.after":".","playtest.empty.runTest.tooltip":"Punto de automatización del WROX Dashboard que ejecuta verificaciones de playtest de Roblox a través de la herramienta system_info.","playtest.report.title":"Reporte seleccionado","playtest.report.title.tooltip":"Salida detallada de la ejecución automatizada de playtest seleccionada actualmente.","playtest.report.content":"Reporte","playtest.report.content.tooltip":"Resumen en Markdown de la ejecución automatizada de playtest seleccionada.","playtest.report.logs":"Registros","playtest.report.logs.tooltip":"Registros de ejecución capturados para la ejecución automatizada de playtest seleccionada.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"Sin contenido de reporte","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest es una función exclusiva de Pro","playtest.basic.desc":"Controla las pruebas desde el WROX Dashboard, ejecuta pruebas automatizadas y visualiza reportes detallados.","playtest.basic.benefit1":"Controles de jugar/pausar/detener con un clic","playtest.basic.benefit2":"Ejecución de pruebas automatizadas vía agente IA","playtest.basic.benefit3":"Historial de pruebas con seguimiento de éxito/fallo","playtest.basic.benefit4":"Reportes de prueba detallados en markdown","playtest.sample.badge":"Vista previa de la pantalla Pro de playtest","playtest.sample.title":"Estás viendo una vista previa de la pantalla de playtest disponible después de actualizar a Pro.","playtest.sample.message":"Esta vista previa usa datos de ejemplo. El control de playtest en vivo, la gestión del historial y los reportes reales se desbloquean con Pro.","playtest.sample.clearDisabled":"Actualiza a Pro para borrar el historial real de playtest.","playtest.sample.place":"Vista previa de Arena","playtest.sample.history.name":"Prueba de humo de Arena de ejemplo","playtest.sample.context.why":"Entrar a la arena, sobrevivir a la apertura y verificar que el HUD responda de inmediato.","playtest.sample.context.expected":"El jugador aparece de forma segura, la cuenta regresiva del HUD aparece en un segundo y la primera ola inicia sin errores.","playtest.sample.context.observed":"La protección de aparición funcionó, el HUD se actualizó a tiempo y la primera ola terminó sin regresiones.","playtest.sample.report.markdown":`# Prueba de humo de Arena de ejemplo
90
+
91
+ - Flujo de aparición: PASS
92
+ - Cuenta regresiva del HUD: PASS
93
+ - Inicio de la ola: PASS
94
+
95
+ Esta es una vista de muestra. Actualiza a Pro para ejecutar playtests reales y guardar reportes reales.`,"playtest.sample.report.logs":`[sample] iniciar vista previa de playtest
96
+ [sample] protección de aparición activa
97
+ [sample] cuenta regresiva del hud renderizada
98
+ [sample] primera ola completada
99
+ [sample] reporte de muestra finalizado`},pm={"sidebar.overview":"Visão Geral","sidebar.changelog":"Histórico","sidebar.connection":"Conexão","sidebar.sync":"Sincronização","sidebar.playtest":"Teste","sidebar.tools":"Ferramentas","sidebar.settings":"Configurações","header.currentProject":"Projeto atual","header.unknownProject":"Projeto desconhecido","header.projectRoot.label":"Project Root","header.currentProject.loading":"Carregando raiz do projeto...","header.currentProject.unavailable":"Raiz do projeto indisponível","header.placeNotConnected":"Place não conectado","header.currentProject.tooltip":"Pasta do projeto atualmente selecionada.","header.currentProject.loading.tooltip":"As informações da raiz do projeto ainda estão carregando.","header.currentProject.unavailable.tooltip":"As informações atuais da raiz do projeto estão indisponíveis.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Carregando sync root...","header.currentProjectSyncRoot.unavailable":"Sync root indisponível","header.currentProjectSyncRoot.tooltip":"Pasta sync root atual do projeto selecionado.","header.currentProjectSyncRoot.loading.tooltip":"As informações de sync root ainda estão carregando.","header.currentProjectSyncRoot.unavailable.tooltip":"As informações atuais de sync root estão indisponíveis.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"O caminho dos arquivos de teste está indisponível.","header.testFiles.tooltip":"Diretório atual dos arquivos de playtest para o place selecionado.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Conexão do plugin necessária","header.places.liveRequired":"A conexão do plugin é necessária para ver o place ativo em tempo real.","header.place.tooltip":"Place do Roblox conectado.","header.placeNotConnected.tooltip":"Place não conectado","header.changeProjectRoot":"Alterar raiz do projeto","header.changeProjectRoot.ariaLabel":"Alterar raiz do projeto","header.changeProjectRoot.tooltip":"Altere a raiz atual do projeto.","header.changeProjectRoot.disabledTooltip.l0":"A conexão com o servidor MCP é necessária primeiro para alterar a raiz do projeto.","header.changeProjectRoot.disabledTooltip.loading":"As informações da raiz do projeto ainda estão carregando.","header.changeProjectRoot.disabledTooltip.unavailable":"As informações atuais da raiz do projeto estão indisponíveis.","header.projectRootModal.initial.title":"Alterar raiz do projeto","header.projectRootModal.initial.body.connected":"Depois que você escolher uma pasta de projeto, o MCP mudará para a nova raiz do projeto e o conteúdo atual do Studio será totalmente resincronizado para o novo destino <selected project folder>/wrox-project-sync.","header.projectRootModal.initial.body.disconnected":"Depois que você escolher uma pasta de projeto, o MCP mudará para a nova raiz do projeto e usará <selected project folder>/wrox-project-sync como o próximo destino de sync.","header.projectRootModal.initial.nextSyncRoot":"Novo destino de sync após a seleção","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/wrox-project-sync","header.projectRootModal.initial.warningStop":"O sync atual é interrompido imediatamente.","header.projectRootModal.initial.warningFreshSync":"O conteúdo atual do Studio será usado para criar um fresh full sync no novo destino.","header.projectRootModal.initial.warningNoMove":"Pastas de sync antigas não são movidas automaticamente.","header.projectRootModal.initial.warningDeferredSync":"Se o Studio não estiver conectado, o full resync começará na próxima conexão do plugin.","header.projectRootModal.confirm.title":"Confirmar nova raiz do projeto","header.projectRootModal.confirm.body":"Revise a pasta selecionada antes de aplicar a mudança.","header.projectRootModal.confirm.projectRoot":"Pasta de projeto selecionada","header.projectRootModal.confirm.syncRoot":"Novo destino do sync","header.projectRootModal.confirm.warningNoMove":"Pastas de sync existentes não são movidas automaticamente.","header.projectRootModal.pick":"Escolher pasta","header.projectRootModal.apply":"Aplicar alteração","header.projectRootModal.cancel":"Cancelar","header.projectRootModal.error":"Não foi possível alterar a raiz do projeto.","sidebar.gate.l1":"É necessária conexão com o servidor MCP.","sidebar.gate.l2":"É necessária conexão com o plugin do Roblox Studio.","status.online":"Online","status.offline":"Offline","status.idle":"Ocioso","status.syncing":"Sincronizando","status.error":"Erro","status.initializing":"Inicializando","level.l0.title":"Servidor desconectado","level.l0.message":"O WROX Dashboard está aberto mas o servidor MCP parou ou não está respondendo.","level.l1.title":"Servidor conectado","level.l1.hint":"Verifique: O Roblox Studio está aberto? O plugin está instalado? As requisições HTTP estão habilitadas?","level.l2.ok":"Studio conectado","tier.basic":"Basic","tier.basic.tooltip":"Tier Basic com o conjunto padrão de recursos do WROX Dashboard.","tier.pro":"Pro","tier.pro.tooltip":"Tier Pro com o conjunto completo de recursos do WROX Dashboard.","tier.mixed":"Misto","tier.upgrade":"Atualizar para Pro","tier.compare":"Basic vs Pro","tier.banner.save":"Economize tokens de IA com Pro!","tier.comparison.comingSoon":"Comparação Basic vs Pro — em breve","tier.comparison.close":"Fechar","tier.comparison.detailTitle":"Catálogo detalhado de ferramentas","tier.comparison.description":"Descrição","tier.comparison.basic.core":"Fluxo MCP básico","tier.comparison.basic.core.item1":"Criar/editar scripts","tier.comparison.basic.core.item2":"Gerenciamento de instâncias","tier.comparison.basic.core.item3":"Controle de propriedades","tier.comparison.basic.core.item4":"Seleção e busca","tier.comparison.basic.core.item5":"Gerenciamento de tags","tier.comparison.basic.core.item6":"Controle de câmera","tier.comparison.basic.core.item7":"Monitoramento de logs","tier.comparison.basic.sync":"Sincronização (Basic)","tier.comparison.basic.sync.item1":"Sincronização unidirecional do Studio para local","tier.comparison.basic.sync.item2":"Aplicação manual como padrão","tier.comparison.pro.all":"Tudo do Basic, mais","tier.comparison.pro.sync":"Fluxo de sincronização avançado","tier.comparison.pro.sync.item1":"Direção de sincronização por tipo","tier.comparison.pro.sync.item2":"Modo de aplicação por tipo","tier.comparison.pro.sync.item3":"Sincronização bidirecional e reversa","tier.comparison.pro.sync.item4":"Sincronização completa, ressincronização e envio ao Studio","tier.comparison.pro.sync.item5":"Sincronização multi-lugar","tier.comparison.pro.playtest":"Controle de playtest","tier.comparison.pro.playtest.item1":"Reproduzir, parar, pausar e retomar","tier.comparison.pro.playtest.item2":"Inspeção do estado de playtest","tier.comparison.pro.playtest.item3":"Execução de testes automatizados","tier.comparison.pro.creation":"Fluxo de criação avançado","tier.comparison.pro.creation.item1":"Operações em massa","tier.comparison.pro.creation.item2":"Geração de terreno","tier.comparison.pro.creation.item3":"Busca e inserção de assets","tier.comparison.pro.creation.item4":"Raycast e análise espacial","tier.comparison.pro.creation.item5":"Controle de ambiente","tier.comparison.discount.label":"🎁 Insira este código no checkout do Gumroad para receber um desconto:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"Válido até 30 de abril","tier.promo.discount.hint":"🎁 Use o código WEPPY-MCP no Gumroad · Válido até 30 de abril","tier.promo.discount.context":"🎁 Insira no Gumroad ao pagar:","tier.tool.query_instances.desc":"Consulta de instâncias, exploração de filhos/descendentes, info de classe, busca por nome e classe. Pro: árvore de arquivos, estrutura do projeto, busca por propriedade e tag.","tier.tool.mutate_instances.desc":"Criar, excluir, clonar, mover, renomear e pivotar instâncias. Pro: criação de árvores, criação/exclusão/duplicação em massa.","tier.tool.manage_properties.desc":"Consultar e definir propriedades, atributos e tags. Pro: valores calculados e relativos, consulta/definição em massa, modificação em massa de filhos.","tier.tool.manage_scripts.desc":"Ler, escrever, criar, excluir, editar linhas e buscar em scripts. Pro: substituição em massa entre scripts.","tier.tool.manage_lighting.desc":"Somente Pro. Configuração de iluminação, atmosfera, céu, propriedades do terreno e hora do dia.","tier.tool.manage_selection.desc":"Consultar, definir e limpar seleção. Pro: contexto, detalhes, adicionar/remover itens, monitorar mudanças.","tier.tool.manage_camera.desc":"Info da câmera, focar por caminho ou coordenadas, visualização sugerida.","tier.tool.manage_tween.desc":"Somente Pro. Criar, reproduzir, pausar e cancelar tweens para animações suaves.","tier.tool.manage_audio.desc":"Somente Pro. Reproduzir, parar, pausar e retomar sons. Configurar listener de áudio.","tier.tool.manage_animation.desc":"Somente Pro. Carregar, reproduzir e parar animações. Consultar tracks de humanoide/controlador.","tier.tool.manage_physics.desc":"Somente Pro. Registrar grupos de colisão, configurar colisão entre grupos, listar grupos.","tier.tool.manage_effects.desc":"Somente Pro. Emitir partículas, limpar todas, alternar ativação de efeitos.","tier.tool.manage_terrain.desc":"Somente Pro. Preencher formas, limpar regiões, substituir materiais, gerenciar cores, ler/escrever voxels, geração procedural, suavização.","tier.tool.spatial_query.desc":"Somente Pro. Raycast, encontrar chão, verificar posicionamento, varredura de área, encontrar áreas planas e pontos de spawn, análise de caminhabilidade, mapa espacial, detecção de colisão.","tier.tool.manage_assets.desc":"Somente Pro. Inserir modelos, consultar info de assets, buscar na loja de criadores, inserir modelos/pacotes gratuitos, exportar.","tier.tool.manage_sync.desc":"Somente Pro. Estado de sincronização, configuração, histórico, direção, leitura/escrita de arquivos sincronizados.","tier.tool.workspace_state.desc":"Somente Pro. Sincronização completa, snapshot, mudanças recentes, info de viewport, metadados, gerenciamento de cache.","tier.tool.manage_logs.desc":"Consulta filtrada de logs, sondagem incremental, limpar buffer, consulta de erros recentes.","tier.tool.system_info.desc":"Estado de conexão, verificação de tier. Pro: info do lugar, lista de serviços, configurações do Studio, controle de playtest, testes automáticos.","tier.tool.batch_execute.desc":"Somente Pro. Executar múltiplos comandos em lote. Processamento sequencial com opção de continuar em caso de erro.","tier.tool.execute_luau.desc":"Somente Pro. Executar código Luau arbitrário no sandbox do Roblox Studio.","connection.server.title":"Status do servidor","connection.server.version":"Versão","connection.server.version.tooltip":"Versão instalada do servidor MCP.","connection.server.pid":"PID","connection.server.pid.tooltip":"Identificador de processo do sistema operacional.","connection.server.uptime":"Tempo ativo","connection.server.uptime.tooltip":"Tempo decorrido desde que o servidor MCP foi iniciado.","connection.server.session":"Sessão","connection.server.session.tooltip":"Identificador da sessão MCP atual.","connection.server.exec":"Executável","connection.server.exec.tooltip":"Caminho do executável usado para iniciar o servidor MCP.","connection.reconnect":"Reconectar","connection.checkSettings":"Verificar configurações","connection.agents.title":"Agentes IA","connection.agents.name":"Agente","connection.agents.cwd":"Diretório","connection.agents.cwd.tooltip":"Diretório de trabalho atual do agente de IA conectado.","connection.agents.projectRoot":"Raiz do Projeto","connection.agents.projectRoot.tooltip":"Caminho do projeto autoritativo para propriedade de sincronização","connection.agents.projectRoot.unresolved":"Não resolvido","connection.agents.connected":"Conectado","connection.agents.unknown":"Desconhecido","connection.agents.none":"Nenhum agente conectado","connection.plugins.title":"Plugins","connection.plugins.place":"Place","connection.plugins.clientId":"ID do cliente","connection.plugins.clientId.tooltip":"Identificador único do cliente do plugin para esta conexão do Studio.","connection.plugins.lastSeen":"Última vez","connection.plugins.lastSeen.tooltip":"Heartbeat mais recente recebido do plugin.","connection.plugins.version":"Ver","connection.plugins.version.tooltip":"Versão instalada do plugin reportada pelo Studio.","connection.plugins.none":"Nenhum plugin conectado","connection.log.title":"Log de conexão","connection.log.empty":"Nenhum evento","connection.time.secondsAgo":"s atrás","connection.time.minutesAgo":"min atrás","connection.time.hoursAgo":"h atrás","common.loading":"Carregando...","common.retry":"Tentar novamente","common.reconnecting":"Reconectando...","common.expand":"Expandir","common.collapse":"Recolher","tools.tab.history":"Histórico","tools.tab.statistics":"Estatísticas","tools.tab.failures":"Falhas","tools.col.time":"Hora","tools.col.time.tooltip":"Momento em que a execução da ferramenta foi registrada.","tools.col.toolAction":"Ferramenta.Ação","tools.col.toolAction.tooltip":"Nome da ferramenta e ação executada.","tools.col.duration":"Duração","tools.col.duration.tooltip":"Quanto tempo a ferramenta levou para terminar.","tools.col.status":"Status","tools.col.status.tooltip":"Resultado da execução registrada da ferramenta.","tools.col.tier":"Nível","tools.col.tier.tooltip":"Nível de licença exigido para a ferramenta ou ação.","tools.col.tierStats.tooltip":"Resumo Basic, Pro ou Mixed para esta linha de estatísticas da ferramenta.","tools.col.tool":"Ferramenta","tools.col.tool.tooltip":"Nome da ferramenta consolidada na tabela de estatísticas.","tools.col.calls":"Chamadas","tools.col.calls.tooltip":"Número total de chamadas registradas para esta ferramenta.","tools.col.okRate":"% Sucesso","tools.col.okRate.tooltip":"Percentual de chamadas que terminaram com sucesso.","tools.col.avgTime":"Tempo médio","tools.col.avgTime.tooltip":"Tempo médio de execução entre as chamadas registradas.","tools.col.error":"Erro","tools.filter.tool":"Ferramenta","tools.filter.all":"Todos","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Esta entrada usou uma ferramenta ou ação exclusiva do Pro.","tools.status.ok":"OK","tools.status.ok.tooltip":"A execução da ferramenta terminou com sucesso.","tools.tier.mixed.tooltip":"Esta ferramenta inclui ações Basic e Pro.","tools.detail.params":"Parâmetros","tools.detail.params.tooltip":"Parâmetros de entrada enviados nesta execução da ferramenta.","tools.detail.result":"Resultado","tools.detail.result.tooltip":"Payload de resultado retornado por esta execução da ferramenta.","tools.detail.error":"Erro","tools.page.prev":"Anterior","tools.page.prev.tooltip":"Ir para a página anterior do histórico de ferramentas.","tools.page.next":"Próximo","tools.page.next.tooltip":"Ir para a próxima página do histórico de ferramentas.","tools.empty.history":"Nenhuma entrada no histórico","tools.empty.stats":"Sem estatísticas","tools.empty.failures":"Sem falhas","tools.summary.total":"Total","tools.summary.calls":"chamadas","tools.summary.sessions":"Sessões","settings.license.title":"Licença","settings.license.title.tooltip":"Status atual da licença e nível de assinatura.","settings.license.status":"Status","settings.license.status.tooltip":"Estado atual de ativação da licença.","settings.license.tier":"Nível","settings.license.tier.tooltip":"Nível de assinatura atual para os recursos disponíveis do WROX Dashboard.","settings.license.key":"Chave","settings.license.key.tooltip":"Chave de licença mascarada atualmente carregada pelo servidor.","settings.license.keyValue.tooltip":"Chave de licença mascarada atualmente carregada pelo servidor.","settings.license.provider":"Provedor","settings.license.provider.tooltip":"Provedor de licença usado para validar esta chave.","settings.license.providerValue.tooltip":"Provedor de licença usado para validar esta chave.","settings.license.active":"Ativa","settings.license.active.tooltip":"Estado atual de ativação da licença.","settings.license.status.activeCancelPending.tooltip":"O cancelamento está pendente, mas o acesso Pro permanece ativo até o fim do ciclo de cobrança atual.","settings.license.inactive":"Inativa","settings.license.inactive.tooltip":"Estado atual de ativação da licença.","settings.license.expired":"Expirada","settings.license.expired.tooltip":"Estado atual de ativação da licença.","settings.license.unavailable":"Informações de licença indisponíveis","settings.license.detail.cancelPending":"O cancelamento foi agendado. O acesso Pro permanece ativo até o fim do ciclo de cobrança atual.","settings.license.reset":"Redefinir licença","settings.readOnly":"Somente leitura","settings.readOnly.tooltip":"Esta seção mostra valores que não podem ser editados pelo WROX Dashboard.","settings.unavailable":"Configurações indisponíveis","settings.general.title":"Configurações gerais","settings.general.title.tooltip":"Configurações quentes que são aplicadas imediatamente ao mudar.","settings.general.liveApply":"Aplicar ao vivo","settings.general.liveApply.tooltip":"As mudanças nesta seção são aplicadas imediatamente sem um botão separado de salvar.","settings.general.applied":"Aplicado","settings.general.logLevel":"Nível de log","settings.general.logLevel.tooltip":"Define quanto detalhe o WROX Dashboard escreve nos logs.","settings.general.localHistory":"Registro de histórico","settings.general.localHistory.tooltip":"Armazena o histórico local de execução de ferramentas para as telas de histórico do WROX Dashboard.","settings.general.localStatistics":"Coleta de estatísticas","settings.general.localStatistics.tooltip":"Agrega estatísticas locais de uso para os relatórios do WROX Dashboard.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WROX Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Tempo limite","settings.general.requestTimeout.tooltip":"Tempo máximo que o WROX Dashboard espera uma solicitação antes de falhar.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"O tempo limite da solicitação é medido em milissegundos.","settings.cold.title":"Ambiente do servidor","settings.cold.title.tooltip":"Valores de ambiente do servidor somente leitura carregados na inicialização.","settings.cold.httpPort.tooltip":"Número da porta usada pelo servidor HTTP do WROX Dashboard MCP.","settings.cold.httpHost.tooltip":"Interface de host à qual o servidor HTTP do WROX Dashboard MCP se vincula.","settings.cold.dashboardAutoOpen.tooltip":"Controla se o WROX Dashboard abre automaticamente no navegador quando o servidor inicia.","settings.cold.dashboardAutoOpen.value.tooltip":"Comportamento atual de inicialização para abrir o WROX Dashboard no navegador.","settings.cold.hint":"Configure via variáveis de ambiente.","settings.language.title":"Idioma","settings.language.title.tooltip":"Escolha como o texto da interface do WROX Dashboard é localizado.","settings.language.dashboard":"Idioma do WROX Dashboard","settings.language.dashboard.tooltip":"Substitui o idioma do WROX Dashboard ou segue o idioma do sistema quando definido como Automático.","settings.language.auto":"Automático","overview.l0.title":"Servidor MCP desconectado","overview.l0.message":"O servidor MCP não está respondendo. O WROX Dashboard tentará reconectar automaticamente.","overview.l0.step1":"Verifique se o processo do servidor MCP está em execução","overview.l0.step2":"Reinicie o comando do servidor MCP se necessário","overview.l0.reconnecting":"Reconectando automaticamente a cada 3s...","overview.l0.reconnectBtn":"Reconectar","overview.l0.settingsBtn":"Verificar configurações","overview.l1.pluginGuide":"O plugin do Roblox Studio não está conectado","overview.l1.check1":"O Roblox Studio está aberto?","overview.l1.check2":"O WROX Plugin está instalado?","overview.l1.check3":"As requisições HTTP estão habilitadas nas configurações do Studio?","overview.l1.feedHint":"As alterações aparecerão aqui quando o plugin se conectar","overview.metric.server":"Servidor","overview.metric.server.tooltip":"Status de execução e processo do servidor MCP.","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Status de conexão e versão do plugin do Roblox Studio.","overview.metric.agent":"Agente","overview.metric.agent.tooltip":"Agentes de IA conectados e seu estado atual.","overview.metric.agent.instancesUnit":"instâncias","overview.metric.sync":"Sincronização","overview.metric.sync.tooltip":"Atividade atual de sincronização entre Studio e arquivos locais.","overview.metric.noAgent":"Sem agente","overview.meta.version":"Versão","overview.meta.version.tooltip":"Versão instalada do servidor MCP.","overview.meta.session":"Sessão","overview.meta.session.tooltip":"Identificador da sessão MCP atual.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Identificador de processo do sistema operacional.","overview.meta.uptime":"Tempo ativo","overview.meta.uptime.tooltip":"Tempo decorrido desde que o servidor MCP foi iniciado.","overview.feed.title":"Alterações recentes do jogo","overview.feed.empty":"Sem alterações recentes","overview.changelog.title":"Resumo de alterações da sessão","overview.changelog.entries":"Total","overview.changelog.scripts":"scripts","overview.changelog.instances":"instâncias","overview.changelog.properties":"propriedades","overview.changelog.assets":"assets","overview.tier.title":"Uso por nível","changelog.subtitle":"Histórico de alterações do jogo","changelog.filter.all":"Todos","changelog.filter.active":"Ativo","changelog.filter.completed":"Concluído","changelog.empty":"Nenhuma entrada no histórico","changelog.basic.limit.title":"A prévia Basic mostra apenas as 3 sessões mais recentes","changelog.basic.limit.body":"Faça upgrade para Pro para navegar pela linha do tempo completa do changelog deste place.","changelog.basic.metricLabel":"Changelog visível / Total","changelog.basic.visible":"visíveis","changelog.basic.total":"total","changelog.card.active":"Ativo","changelog.card.active.tooltip":"Esta sessão ainda está recebendo novas alterações do jogo.","changelog.card.completed":"Concluído","changelog.card.completed.tooltip":"Esta sessão terminou e não deve receber mais alterações.","changelog.card.bootstrapStatus":"Inicialização","changelog.card.bootstrapStatus.tooltip":"Esta sessão contém apenas o snapshot inicial de bootstrap da sincronização.","changelog.card.inProgress":"em andamento","changelog.card.noChanges":"Sem alterações ainda","changelog.card.noChanges.tooltip":"Ainda não foram extraídas alterações do jogo para esta sessão.","changelog.card.bootstrapSummary":"Snapshot de sincronização inicial","changelog.card.bootstrapSummary.tooltip":"As gravações da sincronização inicial de arquivos são condensadas em uma única linha de snapshot bootstrap.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"scripts","changelog.card.scripts.tooltip":"Alterações de script feitas nesta sessão.","changelog.card.instances":"instâncias","changelog.card.instances.tooltip":"Alterações de criação, exclusão, movimentação ou clonagem de instâncias nesta sessão.","changelog.card.modified":"modificado","changelog.card.created":"criado","changelog.card.deleted":"excluído","changelog.card.moved":"movido","changelog.card.propertiesChanged":"propriedades alteradas","changelog.card.propertiesChanged.tooltip":"Alterações de valores de propriedades registradas para esta sessão.","changelog.card.lightingConfigured":"Iluminação configurada","changelog.card.lightingConfigured.tooltip":"A iluminação ou a atmosfera foram alteradas nesta sessão.","changelog.card.terrainConfigured":"Terreno configurado","changelog.card.terrainConfigured.tooltip":"Os dados ou as configurações de terreno foram alterados nesta sessão.","changelog.card.assetsInserted":"assets inseridos","changelog.card.assetsInserted.tooltip":"Assets inseridos no place durante esta sessão.","changelog.category.script":"Scripts","changelog.category.instance":"Instâncias","changelog.category.property":"Propriedades","changelog.category.lighting":"Iluminação","changelog.category.terrain":"Terreno","changelog.category.asset":"Assets","changelog.detail.changeSummary":"Resumo de alterações","changelog.detail.changeSummary.tooltip":"Contagem de alterações do jogo extraídas e agrupadas por categoria nesta sessão.","changelog.detail.changeTimeline":"Linha do tempo","changelog.detail.changeTimeline.tooltip":"Lista cronológica das alterações do jogo extraídas para esta sessão.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Antes e depois","changelog.detail.filterCategory":"Categoria","changelog.detail.filterCategory.tooltip":"Filtra a linha do tempo para uma única categoria de alteração.","changelog.detail.confidence.exact":"Exato","changelog.detail.confidence.exact.tooltip":"Os estados antes e depois desta alteração foram confirmados.","changelog.detail.confidence.partial":"Parcial","changelog.detail.confidence.partial.tooltip":"Apenas parte dos estados antes e depois desta alteração pôde ser confirmada.","changelog.detail.confidence.afterOnly":"Somente depois","changelog.detail.confidence.afterOnly.tooltip":"Apenas o estado resultante após a alteração pôde ser confirmado.","changelog.detail.confidence.intentOnly":"Somente intenção","changelog.detail.confidence.intentOnly.tooltip":"Apenas a ação solicitada foi registrada, não o estado resultante.","changelog.detail.confidence.unknown":"Desconhecido","changelog.detail.confidence.unknown.tooltip":"Não foi possível classificar esta alteração com confiança a partir dos dados disponíveis.","changelog.detail.noChanges":"Sem alterações nesta categoria","changelog.detail.backToList":"Voltar à lista","changelog.diff.empty":"Sem diferenças disponíveis","changelog.diff.unified":"Unificado","changelog.diff.sideBySide":"Lado a lado","changelog.diff.before":"Antes","changelog.diff.after":"Depois","sync.overlay.title":"Plugin do Roblox Studio necessário","sync.overlay.message":"O status de sincronização estará disponível quando o plugin do Roblox Studio se conectar.","sync.overlay.check1":"O Roblox Studio está aberto?","sync.overlay.check2":"O WROX Plugin está instalado?","sync.overlay.check3":"As requisições HTTP estão habilitadas nas configurações do Studio?","sync.status.title":"Status de sincronização","sync.status.title.tooltip":"Status atual de sincronização entre o Studio e os arquivos locais deste place.","sync.status.forwardOnly":"Somente avanço","sync.status.forwardOnly.tooltip":"O tier Basic permite apenas sincronização direta do Studio para o local.","sync.status.place":"Place","sync.status.place.tooltip":"Nome e ID do place do Roblox atualmente conectado.","sync.status.path":"Caminho","sync.status.path.tooltip":"Raiz do sistema de arquivos local usada atualmente para a saída de sincronização.","sync.status.instances":"Instâncias","sync.status.instances.tooltip":"Total de instâncias do Roblox sincronizadas no espelho local.","sync.status.scripts":"Scripts","sync.status.scripts.tooltip":"Total de arquivos de script atualmente indexados para este place.","sync.status.state":"Estado","sync.status.state.tooltip":"Estado atual de execução da sincronização informado pelo servidor.","sync.directions.title":"Direções de sincronização","sync.directions.title.tooltip":"Direção e modo de aplicação por categoria entre Local e Studio.","sync.directions.type":"Tipo","sync.directions.type.tooltip":"Categoria de sincronização afetada por esta regra.","sync.directions.direction":"Direção","sync.directions.direction.tooltip":"Indica se cada categoria sincroniza do Studio, para o Studio ou nos dois sentidos.","sync.directions.applyMode":"Modo de aplicação","sync.directions.applyMode.tooltip":"Como as mudanças de sincronização recebidas são aplicadas nesta categoria.","sync.directions.cat.scripts":"Scripts","sync.directions.cat.values":"Valores","sync.directions.cat.containers":"Contêineres","sync.directions.cat.data":"Dados","sync.directions.cat.services":"Serviços","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"Os arquivos locais em disco sempre aparecem no lado esquerdo da régua de direção.","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"O Roblox Studio sempre aparece no lado direito da régua de direção.","sync.directions.mode.manual":"Manual","sync.directions.mode.manual.tooltip":"Aplica as mudanças de sincronização apenas quando você dispara manualmente.","sync.directions.mode.auto":"Auto","sync.directions.mode.auto.tooltip":"Aplica as mudanças de sincronização automaticamente quando chegam atualizações.","sync.directions.tooltip.forward.body":"As mudanças do Studio sincronizam apenas para os arquivos locais","sync.directions.tooltip.bidirectional.body":"Sincronização de mão dupla entre Local e Studio","sync.directions.tooltip.reverse.body":"Envia mudanças dos arquivos locais para o Studio","sync.directions.tooltip.proRequired":"Pro é necessário no tier Basic","sync.directions.dir.forward":"adiante","sync.directions.dir.bidirectional":"bidirecional","sync.directions.dir.reverse":"reverso","sync.log.title":"Log de sincronização","sync.log.empty":"Sem eventos de sincronização","sync.log.type.write":"ESCREVER","sync.log.type.write.tooltip":"Uma nova saída de sincronização foi gravada no disco.","sync.log.type.update":"ATUALIZAR","sync.log.type.update.tooltip":"Um arquivo ou uma instância já sincronizada foi atualizada.","sync.log.type.delete":"EXCLUIR","sync.log.type.delete.tooltip":"Um arquivo ou uma instância sincronizada foi removida.","sync.log.type.idle":"OCIOSO","sync.log.type.idle.tooltip":"Um evento de sincronização foi registrado sem alterar arquivos.","sync.upgrade.title":"Desbloqueie sincronização completa com Pro","sync.upgrade.benefit1":"Sincronização bidirecional — edite arquivos, aplicação automática no Studio","sync.upgrade.benefit2":"Sincronização reversa — envie alterações de arquivos para o Studio","sync.upgrade.benefit3":"Histórico completo de sincronização e registro detalhado de alterações","sync.upgrade.buy":"Atualizar para Pro","playtest.status.title":"Status de teste","playtest.status.title.tooltip":"Estado atual da sessão de playtest do Roblox informado pelo Studio.","playtest.status.mode":"Modo","playtest.status.mode.tooltip":"Modo de inicialização do playtest do Studio para a sessão atual.","playtest.status.mode.value.tooltip":"Modo específico de playtest do Roblox Studio atualmente em uso.","playtest.status.mode.play":"Jogar","playtest.status.mode.run":"Executar","playtest.status.mode.server":"Servidor","playtest.status.mode.edit":"Editar","playtest.status.place.tooltip":"Place do Roblox atualmente associado a esta sessão de playtest.","playtest.status.state.running":"Executando","playtest.status.state.running.tooltip":"Uma sessão de playtest do Roblox está em execução no momento.","playtest.status.state.paused":"Pausado","playtest.status.state.paused.tooltip":"A sessão atual de playtest do Roblox está pausada.","playtest.status.state.notRunning":"Não está em execução","playtest.status.state.notRunning.tooltip":"Nenhuma sessão de playtest do Roblox está em execução no momento.","playtest.control.play":"Jogar","playtest.control.pause":"Pausar","playtest.control.resume":"Retomar","playtest.control.stop":"Parar","playtest.history.title":"Histórico de testes","playtest.history.title.tooltip":"Execuções automatizadas de playtest registradas para este projeto.","playtest.history.empty":"Sem resultados de teste","playtest.history.mode":"Modo","playtest.history.mode.tooltip":"Modo de playtest usado nesta execução de teste registrada.","playtest.history.status.passed":"Aprovado","playtest.history.status.failed":"Falhou","playtest.history.status.running":"Executando","playtest.history.status.unknown":"Desconhecido","playtest.history.status.tooltip":"Estado de resultado registrado para esta execução automatizada de playtest.","playtest.empty.title":"Sem resultados de teste ainda","playtest.empty.message":"Os resultados aparecerão aqui quando o agente IA executar testes automatizados via system_info.run_test.","playtest.empty.message.before":"Os resultados aparecerão aqui quando o agente IA executar testes automatizados por meio de","playtest.empty.message.after":".","playtest.empty.runTest.tooltip":"Ponto de automação do WROX Dashboard que executa verificações de playtest do Roblox por meio da ferramenta system_info.","playtest.report.title":"Relatório selecionado","playtest.report.title.tooltip":"Saída detalhada da execução automatizada de playtest atualmente selecionada.","playtest.report.content":"Relatório","playtest.report.content.tooltip":"Resumo em Markdown da execução automatizada de playtest selecionada.","playtest.report.logs":"Logs","playtest.report.logs.tooltip":"Logs de execução capturados para a execução automatizada de playtest selecionada.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"Sem conteúdo de relatório","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest é uma função exclusiva do Pro","playtest.basic.desc":"Controle os testes pelo WROX Dashboard, execute testes automatizados e visualize relatórios detalhados.","playtest.basic.benefit1":"Controles de jogar/pausar/parar com um clique","playtest.basic.benefit2":"Execução de testes automatizados via agente IA","playtest.basic.benefit3":"Histórico de testes com rastreamento de sucesso/falha","playtest.basic.benefit4":"Relatórios de teste detalhados em markdown","playtest.sample.badge":"Prévia da tela de playtest Pro","playtest.sample.title":"Você está vendo uma prévia da tela de playtest disponível após o upgrade para Pro.","playtest.sample.message":"Esta prévia usa dados de exemplo. Controle de playtest ao vivo, gerenciamento de histórico e relatórios reais são liberados com Pro.","playtest.sample.clearDisabled":"Faça upgrade para Pro para limpar o histórico real de playtest.","playtest.sample.place":"Prévia da Arena","playtest.sample.history.name":"Teste de fumaça da Arena de exemplo","playtest.sample.context.why":"Entrar na arena, sobreviver à abertura e verificar se o HUD responde imediatamente.","playtest.sample.context.expected":"O jogador surge com segurança, a contagem regressiva do HUD aparece em um segundo e a primeira onda começa sem erros.","playtest.sample.context.observed":"A proteção de spawn funcionou, o HUD atualizou no tempo certo e a primeira onda terminou sem regressões.","playtest.sample.report.markdown":`# Teste de fumaça da Arena de exemplo
100
+
101
+ - Fluxo de spawn: PASS
102
+ - Contagem do HUD: PASS
103
+ - Início da onda: PASS
104
+
105
+ Isto é uma prévia de amostra. Faça upgrade para Pro para executar playtests ao vivo e salvar relatórios reais.`,"playtest.sample.report.logs":`[sample] iniciar prévia de playtest
106
+ [sample] proteção de spawn ativa
107
+ [sample] contagem do hud renderizada
108
+ [sample] primeira onda concluída
109
+ [sample] relatório de amostra finalizado`},fm={"sidebar.overview":"概要","sidebar.changelog":"変更履歴","sidebar.connection":"接続","sidebar.sync":"同期","sidebar.playtest":"プレイテスト","sidebar.tools":"ツール","sidebar.settings":"設定","header.currentProject":"現在のプロジェクト","header.unknownProject":"不明なプロジェクト","header.projectRoot.label":"Project Root","header.currentProject.loading":"プロジェクトルートを読み込み中...","header.currentProject.unavailable":"プロジェクトルートを読み込めません","header.placeNotConnected":"プレイス未接続","header.currentProject.tooltip":"現在選択されているプロジェクトフォルダです。","header.currentProject.loading.tooltip":"プロジェクトルート情報をまだ読み込み中です。","header.currentProject.unavailable.tooltip":"現在のプロジェクトルート情報を読み込めません。","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Sync root を読み込み中...","header.currentProjectSyncRoot.unavailable":"Sync root 情報を読み込めません","header.currentProjectSyncRoot.tooltip":"選択中のプロジェクトに対応する現在の sync root フォルダです。","header.currentProjectSyncRoot.loading.tooltip":"Sync root 情報をまだ読み込み中です。","header.currentProjectSyncRoot.unavailable.tooltip":"現在の sync root 情報を読み込めません。","header.testFiles.label":"Test Files","header.testFiles.unavailable":"テストファイルのパスを確認できません。","header.testFiles.tooltip":"選択した place の現在の playtest ファイルディレクトリです。","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"プラグイン接続が必要です","header.places.liveRequired":"現在の active place を確認するにはプラグイン接続が必要です。","header.place.tooltip":"接続中の Roblox プレイスです。","header.placeNotConnected.tooltip":"プレイス未接続","header.changeProjectRoot":"プロジェクトルートを変更","header.changeProjectRoot.ariaLabel":"プロジェクトルートを変更","header.changeProjectRoot.tooltip":"現在の project root を変更します。","header.changeProjectRoot.disabledTooltip.l0":"プロジェクトルートを変更するには、まず MCP サーバー接続が必要です。","header.changeProjectRoot.disabledTooltip.loading":"プロジェクトルート情報をまだ読み込み中です。","header.changeProjectRoot.disabledTooltip.unavailable":"現在のプロジェクトルート情報を読み込めません。","header.projectRootModal.initial.title":"プロジェクトルートを変更","header.projectRootModal.initial.body.connected":"プロジェクトフォルダを選択すると、MCP は新しい project root に切り替わり、現在の Studio 内容が新しい <selected project folder>/wrox-project-sync にフル再同期されます。","header.projectRootModal.initial.body.disconnected":"プロジェクトフォルダを選択すると、MCP は新しい project root に切り替わり、<selected project folder>/wrox-project-sync を次の sync 対象として使用します。","header.projectRootModal.initial.nextSyncRoot":"選択後の新しい sync 先","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/wrox-project-sync","header.projectRootModal.initial.warningStop":"現在の sync は直ちに停止します。","header.projectRootModal.initial.warningFreshSync":"現在の Studio 内容を基準に、新しい対象へ fresh full sync が作成されます。","header.projectRootModal.initial.warningNoMove":"既存の sync フォルダは自動では移動されません。","header.projectRootModal.initial.warningDeferredSync":"Studio が未接続の場合、full resync は次回 plugin 接続時に開始されます。","header.projectRootModal.confirm.title":"新しいプロジェクトルートを確認","header.projectRootModal.confirm.body":"適用前に選択したプロジェクトフォルダを確認してください。","header.projectRootModal.confirm.projectRoot":"選択したプロジェクトフォルダ","header.projectRootModal.confirm.syncRoot":"新しい sync 先","header.projectRootModal.confirm.warningNoMove":"既存の sync フォルダは自動では移動されません。","header.projectRootModal.pick":"フォルダを選択","header.projectRootModal.apply":"変更を適用","header.projectRootModal.cancel":"キャンセル","header.projectRootModal.error":"プロジェクトルートを変更できませんでした。","sidebar.gate.l1":"MCP サーバーへの接続が必要です。","sidebar.gate.l2":"Roblox Studio プラグインへの接続が必要です。","status.online":"オンライン","status.offline":"オフライン","status.idle":"待機中","status.syncing":"同期中","status.error":"エラー","status.initializing":"初期化中","level.l0.title":"サーバー切断","level.l0.message":"WROX Dashboard は開いていますが、MCPサーバーが停止したか応答していません。","level.l1.title":"サーバー接続済み","level.l1.hint":"確認: Roblox Studioは実行中?プラグインはインストール済み?HTTPリクエストは有効?","level.l2.ok":"Studio接続済み","tier.basic":"Basic","tier.basic.tooltip":"標準のWROX Dashboard機能を提供するBasicティアです。","tier.pro":"Pro","tier.pro.tooltip":"すべてのWROX Dashboard機能を提供するProティアです。","tier.mixed":"混合","tier.upgrade":"Proにアップグレード","tier.compare":"Basic vs Pro","tier.banner.save":"ProでAIトークンを節約!","tier.comparison.comingSoon":"Basic vs Pro 比較 — 近日公開","tier.comparison.close":"閉じる","tier.comparison.detailTitle":"詳細ツールカタログ","tier.comparison.description":"説明","tier.comparison.basic.core":"基本MCPワークフロー","tier.comparison.basic.core.item1":"スクリプト作成・編集","tier.comparison.basic.core.item2":"インスタンス管理","tier.comparison.basic.core.item3":"プロパティ制御","tier.comparison.basic.core.item4":"選択と検索","tier.comparison.basic.core.item5":"タグ管理","tier.comparison.basic.core.item6":"カメラ制御","tier.comparison.basic.core.item7":"ログ監視","tier.comparison.basic.sync":"同期(Basic)","tier.comparison.basic.sync.item1":"Studioからローカルへの一方向同期","tier.comparison.basic.sync.item2":"手動適用がデフォルト","tier.comparison.pro.all":"Basicのすべてに加えて","tier.comparison.pro.sync":"高度な同期ワークフロー","tier.comparison.pro.sync.item1":"タイプ別同期方向","tier.comparison.pro.sync.item2":"タイプ別適用モード","tier.comparison.pro.sync.item3":"双方向・逆方向同期","tier.comparison.pro.sync.item4":"フル同期、再同期、Studioへプッシュ","tier.comparison.pro.sync.item5":"マルチプレイス同期","tier.comparison.pro.playtest":"プレイテスト制御","tier.comparison.pro.playtest.item1":"再生、停止、一時停止、再開","tier.comparison.pro.playtest.item2":"プレイテスト状態の検査","tier.comparison.pro.playtest.item3":"自動テスト実行","tier.comparison.pro.creation":"高度な作成ワークフロー","tier.comparison.pro.creation.item1":"一括操作","tier.comparison.pro.creation.item2":"テレイン生成","tier.comparison.pro.creation.item3":"アセット検索・挿入","tier.comparison.pro.creation.item4":"レイキャスト・空間分析","tier.comparison.pro.creation.item5":"環境制御","tier.comparison.discount.label":"🎁 Gumroad決済時にこのコードを入力すると割引が受けられます:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"4月30日まで有効","tier.promo.discount.hint":"🎁 GumroadでWEPPY-MCPコードを使用 · 4月30日まで","tier.promo.discount.context":"🎁 Gumroad決済時に入力:","tier.tool.query_instances.desc":"インスタンス照会、子孫探索、クラス情報、名前・クラス検索。Pro: ファイルツリー、プロジェクト構造、プロパティ・タグ検索。","tier.tool.mutate_instances.desc":"インスタンスの作成、削除、複製、移動、名前変更、ピボット。Pro: ツリー作成、一括作成・削除・複製。","tier.tool.manage_properties.desc":"プロパティ、属性、タグの取得・設定。Pro: 計算・相対値設定、一括取得・設定、子の一括変更。","tier.tool.manage_scripts.desc":"スクリプトソースの読取・書込・作成・削除・行編集・検索。Pro: スクリプト間一括置換。","tier.tool.manage_lighting.desc":"Pro専用。照明、大気、空、テレイン属性、時間帯の環境設定。","tier.tool.manage_selection.desc":"選択の取得、設定、解除。Pro: コンテキスト、詳細、項目の追加・削除、変更監視。","tier.tool.manage_camera.desc":"カメラ情報取得、パスまたは座標でフォーカス、推奨ビュー提案。","tier.tool.manage_tween.desc":"Pro専用。滑らかなアニメーションのためのトゥイーン作成、再生、一時停止、キャンセル。","tier.tool.manage_audio.desc":"Pro専用。サウンドの再生、停止、一時停止、再開。オーディオリスナー設定。","tier.tool.manage_animation.desc":"Pro専用。アニメーションのロード、再生、停止。ヒューマノイド・コントローラーのトラック照会。","tier.tool.manage_physics.desc":"Pro専用。物理衝突グループの登録、グループ間衝突設定、一覧照会。","tier.tool.manage_effects.desc":"Pro専用。パーティクル放出、全消去、エフェクト有効化トグル。","tier.tool.manage_terrain.desc":"Pro専用。図形充填、領域消去、マテリアル置換、色管理、ボクセル読書、手続き生成、スムージング。","tier.tool.spatial_query.desc":"Pro専用。レイキャスト、地面検索、配置確認、領域スキャン、平地・スポーン位置探索、歩行分析、空間マップ、衝突確認。","tier.tool.manage_assets.desc":"Pro専用。モデル挿入、アセット情報照会、クリエイターストア検索、無料モデル・パッケージ挿入、エクスポート。","tier.tool.manage_sync.desc":"Pro専用。同期状態、設定、履歴、方向設定、同期ファイル読書。","tier.tool.workspace_state.desc":"Pro専用。フル同期、スナップショット、最近の変更、ビューポート情報、メタデータ、キャッシュ管理。","tier.tool.manage_logs.desc":"出力ログのフィルタリング照会、増分ポーリング、バッファ消去、最近のエラー照会。","tier.tool.system_info.desc":"接続状態、使用ティア確認。Pro: プレイス情報、サービス一覧、Studio設定、プレイテスト制御、自動テスト。","tier.tool.batch_execute.desc":"Pro専用。複数コマンドを一括実行。順次処理、エラー時続行オプション。","tier.tool.execute_luau.desc":"Pro専用。Roblox Studioサンドボックスで任意のLuauコードを実行。","connection.server.title":"サーバーステータス","connection.server.version":"バージョン","connection.server.version.tooltip":"インストールされているMCPサーバーのバージョンです。","connection.server.pid":"PID","connection.server.pid.tooltip":"OSが使用するプロセス識別子です。","connection.server.uptime":"稼働時間","connection.server.uptime.tooltip":"MCPサーバーの起動後に経過した時間です。","connection.server.session":"セッション","connection.server.session.tooltip":"現在のMCPセッション識別子です。","connection.server.exec":"実行ファイル","connection.server.exec.tooltip":"MCPサーバーを起動した実行ファイルのパスです。","connection.reconnect":"再接続","connection.checkSettings":"設定を確認","connection.agents.title":"AIエージェント","connection.agents.name":"エージェント","connection.agents.cwd":"作業ディレクトリ","connection.agents.cwd.tooltip":"接続中のAIエージェントの現在の作業ディレクトリです。","connection.agents.projectRoot":"プロジェクトルート","connection.agents.projectRoot.tooltip":"同期オーナーシップの権威あるプロジェクトパス","connection.agents.projectRoot.unresolved":"未解決","connection.agents.connected":"接続時刻","connection.agents.unknown":"不明","connection.agents.none":"接続中のエージェントなし","connection.plugins.title":"プラグイン","connection.plugins.place":"プレイス","connection.plugins.clientId":"クライアントID","connection.plugins.clientId.tooltip":"このStudio接続を識別するプラグインクライアントIDです。","connection.plugins.lastSeen":"最終確認","connection.plugins.lastSeen.tooltip":"プラグインから最後に受信したハートビート時刻です。","connection.plugins.version":"バージョン","connection.plugins.version.tooltip":"Studioが報告したインストール済みプラグインのバージョンです。","connection.plugins.none":"接続中のプラグインなし","connection.log.title":"接続ログ","connection.log.empty":"イベントなし","connection.time.secondsAgo":"秒前","connection.time.minutesAgo":"分前","connection.time.hoursAgo":"時間前","common.loading":"読み込み中...","common.retry":"再試行","common.reconnecting":"再接続中...","common.expand":"展開","common.collapse":"折りたたむ","tools.tab.history":"履歴","tools.tab.statistics":"統計","tools.tab.failures":"失敗","tools.col.time":"時刻","tools.col.time.tooltip":"ツール実行が記録された時刻です。","tools.col.toolAction":"ツール.アクション","tools.col.toolAction.tooltip":"実行されたツール名とアクションです。","tools.col.duration":"所要時間","tools.col.duration.tooltip":"ツール完了までにかかった時間です。","tools.col.status":"ステータス","tools.col.status.tooltip":"記録されたツール実行の結果です。","tools.col.tier":"ティア","tools.col.tier.tooltip":"そのツールまたはアクションに必要なライセンスティアです。","tools.col.tierStats.tooltip":"ツール統計行がBasic、Pro、Mixedのどれに当たるかを示します。","tools.col.tool":"ツール","tools.col.tool.tooltip":"統計テーブルに表示される統合ツール名です。","tools.col.calls":"呼び出し数","tools.col.calls.tooltip":"このツールで記録された総呼び出し回数です。","tools.col.okRate":"成功率","tools.col.okRate.tooltip":"正常に完了した呼び出しの割合です。","tools.col.avgTime":"平均時間","tools.col.avgTime.tooltip":"記録された呼び出し全体の平均実行時間です。","tools.col.error":"エラー","tools.filter.tool":"ツール","tools.filter.all":"すべて","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"この項目はPro専用のツールまたはアクションを使用しました。","tools.status.ok":"OK","tools.status.ok.tooltip":"ツール実行が正常に完了しました。","tools.tier.mixed.tooltip":"このツールにはBasicとProのアクションが両方含まれます。","tools.detail.params":"パラメータ","tools.detail.params.tooltip":"このツール実行に渡された入力パラメータです。","tools.detail.result":"結果","tools.detail.result.tooltip":"このツール実行から返された結果ペイロードです。","tools.detail.error":"エラー","tools.page.prev":"前へ","tools.page.prev.tooltip":"ツール履歴の前のページへ移動します。","tools.page.next":"次へ","tools.page.next.tooltip":"ツール履歴の次のページへ移動します。","tools.empty.history":"履歴なし","tools.empty.stats":"ツール統計なし","tools.empty.failures":"失敗なし","tools.summary.total":"合計","tools.summary.calls":"呼び出し","tools.summary.sessions":"セッション","settings.license.title":"ライセンス","settings.license.title.tooltip":"現在のライセンス状態とサブスクリプションティアです。","settings.license.status":"ステータス","settings.license.status.tooltip":"現在のライセンス有効化状態です。","settings.license.tier":"ティア","settings.license.tier.tooltip":"利用できるWROX Dashboard機能を決める現在のサブスクリプションティアです。","settings.license.key":"キー","settings.license.key.tooltip":"現在サーバーに読み込まれているマスク済みライセンスキーです。","settings.license.keyValue.tooltip":"現在サーバーに読み込まれているマスク済みライセンスキーです。","settings.license.provider":"プロバイダー","settings.license.provider.tooltip":"このキーを検証するライセンスプロバイダーです。","settings.license.providerValue.tooltip":"このキーを検証するライセンスプロバイダーです。","settings.license.active":"有効","settings.license.active.tooltip":"現在のライセンス有効化状態です。","settings.license.status.activeCancelPending.tooltip":"解約は予約済みですが、現在の請求期間が終了するまでは Pro アクセスが維持されます。","settings.license.inactive":"無効","settings.license.inactive.tooltip":"現在のライセンス有効化状態です。","settings.license.expired":"期限切れ","settings.license.expired.tooltip":"現在のライセンス有効化状態です。","settings.license.unavailable":"ライセンス情報を取得できません","settings.license.detail.cancelPending":"解約が予約されました。現在の請求期間が終了するまでは Pro アクセスが維持されます。","settings.license.reset":"ライセンスをリセット","settings.readOnly":"読み取り専用","settings.readOnly.tooltip":"このセクションの値はWROX Dashboardから編集できません。","settings.unavailable":"設定を取得できません","settings.general.title":"一般設定","settings.general.title.tooltip":"変更すると即時反映されるHot設定です。","settings.general.liveApply":"即時反映","settings.general.liveApply.tooltip":"このセクションの変更は別の保存ボタンなしですぐ適用されます。","settings.general.applied":"適用済み","settings.general.logLevel":"ログレベル","settings.general.logLevel.tooltip":"WROX Dashboardログに出力する詳細度を設定します。","settings.general.localHistory":"ツール履歴記録","settings.general.localHistory.tooltip":"WROX Dashboard履歴画面用にローカルのツール実行履歴を保存します。","settings.general.localStatistics":"ツール統計収集","settings.general.localStatistics.tooltip":"WROX Dashboard表示用にローカル利用統計を集計します。","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WROX Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"リクエストタイムアウト","settings.general.requestTimeout.tooltip":"リクエストを失敗扱いにするまでWROX Dashboardが待機する最大時間です。","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"リクエストタイムアウトの単位はミリ秒です。","settings.cold.title":"サーバー環境変数","settings.cold.title.tooltip":"サーバー起動時に読み込まれる読み取り専用の環境変数です。","settings.cold.httpPort.tooltip":"MCPWROX DashboardHTTPサーバーが使用するポート番号です。","settings.cold.httpHost.tooltip":"MCPWROX DashboardHTTPサーバーがバインドするホストインターフェースです。","settings.cold.dashboardAutoOpen.tooltip":"サーバー起動時にブラウザーでWROX Dashboardを自動で開くかどうかを制御します。","settings.cold.dashboardAutoOpen.value.tooltip":"ブラウザー自動起動の現在の起動動作です。","settings.cold.hint":"環境変数で設定してください。","settings.language.title":"言語","settings.language.title.tooltip":"WROX DashboardUIテキストの表示言語を選択します。","settings.language.dashboard":"WROX Dashboard言語","settings.language.dashboard.tooltip":"Autoではシステム言語を使い、それ以外では選択した言語を強制します。","settings.language.auto":"自動","overview.l0.title":"MCPサーバー切断","overview.l0.message":"MCPサーバーが応答していません。WROX Dashboardが自動的に再接続を試みます。","overview.l0.step1":"MCPサーバープロセスが実行中か確認してください","overview.l0.step2":"必要に応じてMCPサーバーコマンドを再起動してください","overview.l0.reconnecting":"3秒ごとに自動再接続中...","overview.l0.reconnectBtn":"再接続","overview.l0.settingsBtn":"設定を確認","overview.l1.pluginGuide":"Roblox Studioプラグインが接続されていません","overview.l1.check1":"Roblox Studioは実行中ですか?","overview.l1.check2":"WROX Pluginはインストール済みですか?","overview.l1.check3":"Studio設定でHTTPリクエストは有効ですか?","overview.l1.feedHint":"プラグインが接続されると変更がここに表示されます","overview.metric.server":"サーバー","overview.metric.server.tooltip":"MCPサーバーの実行状態とプロセス状態です。","overview.metric.plugin":"プラグイン","overview.metric.plugin.tooltip":"Roblox Studioプラグインの接続状態とバージョン情報です。","overview.metric.agent":"エージェント","overview.metric.agent.tooltip":"接続中のAIコーディングエージェントと現在の実行状態です。","overview.metric.agent.instancesUnit":"インスタンス","overview.metric.sync":"同期","overview.metric.sync.tooltip":"現在のStudioとローカルファイル間の同期状態です。","overview.metric.noAgent":"エージェントなし","overview.meta.version":"バージョン","overview.meta.version.tooltip":"インストールされているMCPサーバーのバージョンです。","overview.meta.session":"セッション","overview.meta.session.tooltip":"現在のMCPセッション識別子です。","overview.meta.pid":"PID","overview.meta.pid.tooltip":"OSが使用するプロセス識別子です。","overview.meta.uptime":"稼働時間","overview.meta.uptime.tooltip":"MCPサーバーの起動後に経過した時間です。","overview.feed.title":"最近のゲーム変更","overview.feed.empty":"最近の変更なし","overview.changelog.title":"セッション変更サマリー","overview.changelog.entries":"合計","overview.changelog.scripts":"スクリプト","overview.changelog.instances":"インスタンス","overview.changelog.properties":"プロパティ","overview.changelog.assets":"アセット","overview.tier.title":"ティア使用状況","changelog.subtitle":"ゲーム変更履歴","changelog.filter.all":"すべて","changelog.filter.active":"アクティブ","changelog.filter.completed":"完了","changelog.empty":"変更履歴がありません","changelog.basic.limit.title":"Basicプレビューでは最新3セッションのみ表示されます","changelog.basic.limit.body":"Proにアップグレードすると、このプレイスの完全な変更履歴タイムラインを確認できます。","changelog.basic.metricLabel":"表示中の変更履歴 / 全体","changelog.basic.visible":"表示中","changelog.basic.total":"全体","changelog.card.active":"アクティブ","changelog.card.active.tooltip":"このセッションはまだ新しいゲーム変更を受信しています。","changelog.card.completed":"完了","changelog.card.completed.tooltip":"このセッションは終了しており、これ以上変更は追加されません。","changelog.card.bootstrapStatus":"初期化","changelog.card.bootstrapStatus.tooltip":"このセッションには初期同期ブートストラップのスナップショットのみが含まれます。","changelog.card.inProgress":"進行中","changelog.card.noChanges":"変更なし","changelog.card.noChanges.tooltip":"このセッションではまだ抽出されたゲーム変更がありません。","changelog.card.bootstrapSummary":"初期同期スナップショット","changelog.card.bootstrapSummary.tooltip":"初期ファイル同期の書き込みは 1 件のブートストラップスナップショット行にまとめられます。","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"スクリプト","changelog.card.scripts.tooltip":"このセッションで発生したスクリプト変更です。","changelog.card.instances":"インスタンス","changelog.card.instances.tooltip":"このセッションで発生したインスタンスの作成、削除、移動、複製です。","changelog.card.modified":"変更","changelog.card.created":"作成","changelog.card.deleted":"削除","changelog.card.moved":"移動","changelog.card.propertiesChanged":"プロパティ変更","changelog.card.propertiesChanged.tooltip":"このセッションで記録されたプロパティ値の変更です。","changelog.card.lightingConfigured":"ライティング設定済み","changelog.card.lightingConfigured.tooltip":"このセッションでライティングまたは大気設定が変更されました。","changelog.card.terrainConfigured":"テレイン設定済み","changelog.card.terrainConfigured.tooltip":"このセッションでテレインデータまたはテレイン設定が変更されました。","changelog.card.assetsInserted":"アセット挿入","changelog.card.assetsInserted.tooltip":"このセッション中にプレイスへ挿入されたアセットです。","changelog.category.script":"スクリプト","changelog.category.instance":"インスタンス","changelog.category.property":"プロパティ","changelog.category.lighting":"ライティング","changelog.category.terrain":"テレイン","changelog.category.asset":"アセット","changelog.detail.changeSummary":"変更サマリー","changelog.detail.changeSummary.tooltip":"このセッションで抽出されたゲーム変更数をカテゴリ別に表示します。","changelog.detail.changeTimeline":"変更タイムライン","changelog.detail.changeTimeline.tooltip":"このセッションで抽出されたゲーム変更を時系列で表示します。","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"変更前後の比較","changelog.detail.filterCategory":"カテゴリ","changelog.detail.filterCategory.tooltip":"タイムラインを 1 つの変更カテゴリに絞り込みます。","changelog.detail.confidence.exact":"正確","changelog.detail.confidence.exact.tooltip":"この変更は変更前と変更後の状態が両方確認されています。","changelog.detail.confidence.partial":"部分確認","changelog.detail.confidence.partial.tooltip":"この変更は変更前後の状態の一部のみ確認されています。","changelog.detail.confidence.afterOnly":"結果のみ確認","changelog.detail.confidence.afterOnly.tooltip":"この変更は適用後の結果状態のみ確認されています。","changelog.detail.confidence.intentOnly":"意図のみ記録","changelog.detail.confidence.intentOnly.tooltip":"要求された操作意図のみが記録され、結果状態は確認されていません。","changelog.detail.confidence.unknown":"不明","changelog.detail.confidence.unknown.tooltip":"利用可能なデータだけではこの変更を確実に分類できませんでした。","changelog.detail.noChanges":"このカテゴリに変更なし","changelog.detail.backToList":"一覧に戻る","changelog.diff.empty":"差分なし","changelog.diff.unified":"統合","changelog.diff.sideBySide":"並列比較","changelog.diff.before":"変更前","changelog.diff.after":"変更後","sync.overlay.title":"Roblox Studioプラグインが必要です","sync.overlay.message":"Roblox Studioプラグインが接続されると同期状態を確認できます。","sync.overlay.check1":"Roblox Studioは実行中ですか?","sync.overlay.check2":"WROX Pluginはインストール済みですか?","sync.overlay.check3":"Studio設定でHTTPリクエストは有効ですか?","sync.status.title":"同期ステータス","sync.status.title.tooltip":"このプレイスのStudioとローカルファイルの同期状態です。","sync.status.forwardOnly":"順方向のみ","sync.status.forwardOnly.tooltip":"BasicティアではStudioからローカルへの順方向同期のみ利用できます。","sync.status.place":"プレイス","sync.status.place.tooltip":"接続中のRobloxプレイス名とプレイスIDです。","sync.status.path":"パス","sync.status.path.tooltip":"現在同期出力に使っているローカルファイルシステムのルートです。","sync.status.instances":"インスタンス","sync.status.instances.tooltip":"ローカルミラーで追跡中の同期済みRobloxインスタンス総数です。","sync.status.scripts":"スクリプト","sync.status.scripts.tooltip":"このプレイスで現在インデックスされている同期スクリプトファイル数です。","sync.status.state":"状態","sync.status.state.tooltip":"サーバーが報告した現在の同期ランタイム状態です。","sync.directions.title":"同期方向","sync.directions.title.tooltip":"LocalとStudioの間のカテゴリ別同期方向と適用方法です。","sync.directions.type":"タイプ","sync.directions.type.tooltip":"このルールが適用される同期カテゴリです。","sync.directions.direction":"方向","sync.directions.direction.tooltip":"各カテゴリがStudioから、Studioへ、または双方向で同期されるかを示します。","sync.directions.applyMode":"適用モード","sync.directions.applyMode.tooltip":"このカテゴリに届く同期変更の適用方法です。","sync.directions.cat.scripts":"スクリプト","sync.directions.cat.values":"値","sync.directions.cat.containers":"コンテナ","sync.directions.cat.data":"データ","sync.directions.cat.services":"サービス","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"方向レールの左側は常にディスク上のローカルファイルです。","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"方向レールの右側は常にRoblox Studioです。","sync.directions.mode.manual":"手動","sync.directions.mode.manual.tooltip":"手動で実行したときだけ同期変更を適用します。","sync.directions.mode.auto":"自動","sync.directions.mode.auto.tooltip":"更新を受け取ると同期変更を自動で適用します。","sync.directions.tooltip.forward.body":"Studioの変更をローカルファイルのみに同期します","sync.directions.tooltip.bidirectional.body":"LocalとStudioの間で双方向同期を行います","sync.directions.tooltip.reverse.body":"ローカルファイルの変更をStudioへ反映します","sync.directions.tooltip.proRequired":"BasicティアではProが必要です","sync.directions.dir.forward":"順方向","sync.directions.dir.bidirectional":"双方向","sync.directions.dir.reverse":"逆方向","sync.log.title":"同期ログ","sync.log.empty":"同期イベントなし","sync.log.type.write":"書き込み","sync.log.type.write.tooltip":"新しい同期出力がディスクに書き込まれました。","sync.log.type.update":"更新","sync.log.type.update.tooltip":"既存の同期ファイルまたはインスタンスが更新されました。","sync.log.type.delete":"削除","sync.log.type.delete.tooltip":"同期済みファイルまたはインスタンスが削除されました。","sync.log.type.idle":"待機","sync.log.type.idle.tooltip":"ファイル変更なしで同期イベントのみ記録されました。","sync.upgrade.title":"Proで完全な同期機能を解放","sync.upgrade.benefit1":"双方向同期 — ファイルを編集するとStudioに自動反映","sync.upgrade.benefit2":"逆方向同期 — ファイルの変更をStudioに送信","sync.upgrade.benefit3":"完全な同期履歴と詳細な変更ログ","sync.upgrade.buy":"Proにアップグレード","playtest.status.title":"プレイテストステータス","playtest.status.title.tooltip":"Studio が報告した現在の Roblox プレイテストセッション状態です。","playtest.status.mode":"モード","playtest.status.mode.tooltip":"現在のセッションで使われている Studio プレイテスト起動モードです。","playtest.status.mode.value.tooltip":"現在使用中の Roblox Studio プレイテストモードの具体的な値です。","playtest.status.mode.play":"プレイ","playtest.status.mode.run":"実行","playtest.status.mode.server":"サーバー","playtest.status.mode.edit":"編集","playtest.status.place.tooltip":"このプレイテストセッションに関連付けられた Roblox プレイスです。","playtest.status.state.running":"実行中","playtest.status.state.running.tooltip":"現在 Roblox プレイテストセッションが実行中です。","playtest.status.state.paused":"一時停止","playtest.status.state.paused.tooltip":"現在の Roblox プレイテストセッションは一時停止中です。","playtest.status.state.notRunning":"未実行","playtest.status.state.notRunning.tooltip":"現在実行中の Roblox プレイテストセッションはありません。","playtest.control.play":"プレイ","playtest.control.pause":"一時停止","playtest.control.resume":"再開","playtest.control.stop":"停止","playtest.history.title":"テスト履歴","playtest.history.title.tooltip":"このプロジェクトで記録された自動プレイテスト実行履歴です。","playtest.history.empty":"テスト結果なし","playtest.history.mode":"モード","playtest.history.mode.tooltip":"この記録済みテスト実行で使われたプレイテストモードです。","playtest.history.status.passed":"成功","playtest.history.status.failed":"失敗","playtest.history.status.running":"実行中","playtest.history.status.unknown":"不明","playtest.history.status.tooltip":"この自動プレイテスト実行で記録された結果状態です。","playtest.empty.title":"プレイテスト結果がありません","playtest.empty.message":"AIエージェントがsystem_info.run_testで自動テストを実行すると結果が表示されます。","playtest.empty.message.before":"AIエージェントが自動テストを","playtest.empty.message.after":"で実行すると結果がここに表示されます。","playtest.empty.runTest.tooltip":"system_info ツール経由で Roblox プレイテスト検証を実行するWROX Dashboardの自動化入口です。","playtest.report.title":"選択されたレポート","playtest.report.title.tooltip":"現在選択されている自動プレイテスト実行の詳細出力です。","playtest.report.content":"レポート","playtest.report.content.tooltip":"選択された自動プレイテスト実行の Markdown 要約です。","playtest.report.logs":"ログ","playtest.report.logs.tooltip":"選択された自動プレイテスト実行で収集された実行ログです。","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"レポート内容なし","playtest.basic.icon":"🎮","playtest.basic.title":"プレイテストはPro専用機能です","playtest.basic.desc":"WROX Dashboardからプレイテストを制御し、自動テストを実行し、詳細なテストレポートを確認できます。","playtest.basic.benefit1":"ワンクリックのプレイ/一時停止/停止コントロール","playtest.basic.benefit2":"AIエージェントによる自動テスト実行","playtest.basic.benefit3":"成功/失敗追跡付きテスト履歴","playtest.basic.benefit4":"詳細なマークダウンテストレポート","playtest.sample.badge":"Proプレイテスト画面のプレビュー","playtest.sample.title":"現在表示しているのは、Proにアップグレード後に利用できるプレイテスト画面のプレビューです。","playtest.sample.message":"このプレビューはサンプルデータを使用しています。ライブのプレイテスト操作、履歴管理、実際のレポート保存はPro購入後に利用できます。","playtest.sample.clearDisabled":"実際のプレイテスト履歴の削除はProで利用できます。","playtest.sample.place":"アリーナプレビュー","playtest.sample.history.name":"サンプルアリーナスモークテスト","playtest.sample.context.why":"アリーナにスポーンし、開始直後を生き残り、HUDがすぐ反応するか確認します。","playtest.sample.context.expected":"プレイヤーが安全にスポーンし、1秒以内にカウントダウンUIが表示され、最初のウェーブがエラーなく始まること。","playtest.sample.context.observed":"スポーン保護が正常に動作し、HUDは時間どおり更新され、最初のウェーブは回帰なく完了しました。","playtest.sample.report.markdown":`# サンプルアリーナスモークテスト
110
+
111
+ - スポーンフロー: PASS
112
+ - HUDカウントダウン: PASS
113
+ - ウェーブ開始: PASS
114
+
115
+ これはサンプルプレビューです。Proにアップグレードすると、ライブのプレイテスト実行と実際のレポート保存ができます。`,"playtest.sample.report.logs":`[sample] プレイテストプレビュー起動
116
+ [sample] スポーン保護有効
117
+ [sample] hudカウントダウン描画
118
+ [sample] 第1ウェーブ完了
119
+ [sample] プレビュー報告終了`},gm={"sidebar.overview":"Ringkasan","sidebar.changelog":"Riwayat","sidebar.connection":"Koneksi","sidebar.sync":"Sinkronisasi","sidebar.playtest":"Playtest","sidebar.tools":"Alat","sidebar.settings":"Pengaturan","header.currentProject":"Proyek saat ini","header.unknownProject":"Proyek tidak dikenal","header.projectRoot.label":"Project Root","header.currentProject.loading":"Memuat project root...","header.currentProject.unavailable":"Project root tidak tersedia","header.placeNotConnected":"Place belum terhubung","header.currentProject.tooltip":"Folder proyek yang sedang dipilih.","header.currentProject.loading.tooltip":"Informasi project root masih dimuat.","header.currentProject.unavailable.tooltip":"Informasi project root saat ini tidak tersedia.","header.currentProjectSyncRoot.label":"Sync Root","header.currentProjectSyncRoot.loading":"Memuat sync root...","header.currentProjectSyncRoot.unavailable":"Sync root tidak tersedia","header.currentProjectSyncRoot.tooltip":"Folder sync root saat ini untuk proyek yang dipilih.","header.currentProjectSyncRoot.loading.tooltip":"Informasi sync root masih dimuat.","header.currentProjectSyncRoot.unavailable.tooltip":"Informasi sync root saat ini tidak tersedia.","header.testFiles.label":"Test Files","header.testFiles.unavailable":"Path file test tidak tersedia.","header.testFiles.tooltip":"Direktori file playtest saat ini untuk place yang dipilih.","header.places.title":"Places","header.places.active":"Active","header.places.inactive":"Inactive","header.places.pluginRequired":"Koneksi plugin diperlukan","header.places.liveRequired":"Koneksi plugin diperlukan untuk melihat place aktif secara live.","header.place.tooltip":"Place Roblox yang terhubung.","header.placeNotConnected.tooltip":"Place belum terhubung","header.changeProjectRoot":"Ubah project root","header.changeProjectRoot.ariaLabel":"Ubah project root","header.changeProjectRoot.tooltip":"Ubah project root saat ini.","header.changeProjectRoot.disabledTooltip.l0":"Koneksi server MCP diperlukan terlebih dahulu sebelum project root bisa diubah.","header.changeProjectRoot.disabledTooltip.loading":"Informasi project root masih dimuat.","header.changeProjectRoot.disabledTooltip.unavailable":"Informasi project root saat ini tidak tersedia.","header.projectRootModal.initial.title":"Ubah project root","header.projectRootModal.initial.body.connected":"Setelah Anda memilih folder proyek, MCP akan beralih ke project root baru dan konten Studio saat ini akan disinkronkan ulang sepenuhnya ke target baru <selected project folder>/wrox-project-sync.","header.projectRootModal.initial.body.disconnected":"Setelah Anda memilih folder proyek, MCP akan beralih ke project root baru dan menggunakan <selected project folder>/wrox-project-sync sebagai target sync berikutnya.","header.projectRootModal.initial.nextSyncRoot":"Target sync baru setelah pemilihan","header.projectRootModal.initial.nextSyncRoot.placeholder":"<selected project folder>/wrox-project-sync","header.projectRootModal.initial.warningStop":"Sync saat ini berhenti seketika.","header.projectRootModal.initial.warningFreshSync":"Konten Studio saat ini akan digunakan untuk membuat fresh full sync di target baru.","header.projectRootModal.initial.warningNoMove":"Folder sync lama tidak dipindahkan secara otomatis.","header.projectRootModal.initial.warningDeferredSync":"Jika Studio belum terhubung, full resync akan dimulai saat plugin terhubung berikutnya.","header.projectRootModal.confirm.title":"Konfirmasi project root baru","header.projectRootModal.confirm.body":"Tinjau folder proyek yang dipilih sebelum menerapkan perubahan.","header.projectRootModal.confirm.projectRoot":"Folder proyek yang dipilih","header.projectRootModal.confirm.syncRoot":"Target sync baru","header.projectRootModal.confirm.warningNoMove":"Folder sync yang ada tidak dipindahkan secara otomatis.","header.projectRootModal.pick":"Pilih folder","header.projectRootModal.apply":"Terapkan perubahan","header.projectRootModal.cancel":"Batal","header.projectRootModal.error":"Gagal mengubah project root.","sidebar.gate.l1":"Koneksi server MCP diperlukan.","sidebar.gate.l2":"Koneksi plugin Roblox Studio diperlukan.","status.online":"Online","status.offline":"Offline","status.idle":"Menunggu","status.syncing":"Menyinkronkan","status.error":"Error","status.initializing":"Menginisialisasi","level.l0.title":"Server terputus","level.l0.message":"WROX Dashboard terbuka tetapi server MCP telah berhenti atau tidak merespons.","level.l1.title":"Server terhubung","level.l1.hint":"Periksa: Apakah Roblox Studio berjalan? Apakah plugin terinstal? Apakah HTTP Requests diaktifkan?","level.l2.ok":"Studio terhubung","tier.basic":"Basic","tier.basic.tooltip":"Tier Basic dengan kumpulan fitur WROX Dashboard standar.","tier.pro":"Pro","tier.pro.tooltip":"Tier Pro dengan kumpulan fitur WROX Dashboard lengkap.","tier.mixed":"Campuran","tier.upgrade":"Upgrade ke Pro","tier.compare":"Basic vs Pro","tier.banner.save":"Hemat token AI dengan Pro!","tier.comparison.comingSoon":"Perbandingan Basic vs Pro — segera hadir","tier.comparison.close":"Tutup","tier.comparison.detailTitle":"Katalog alat detail","tier.comparison.description":"Deskripsi","tier.comparison.basic.core":"Alur kerja MCP dasar","tier.comparison.basic.core.item1":"Buat/edit script","tier.comparison.basic.core.item2":"Manajemen instance","tier.comparison.basic.core.item3":"Kontrol properti","tier.comparison.basic.core.item4":"Seleksi dan pencarian","tier.comparison.basic.core.item5":"Manajemen tag","tier.comparison.basic.core.item6":"Kontrol kamera","tier.comparison.basic.core.item7":"Pemantauan log","tier.comparison.basic.sync":"Sinkronisasi (Basic)","tier.comparison.basic.sync.item1":"Sinkronisasi satu arah dari Studio ke lokal","tier.comparison.basic.sync.item2":"Penerapan manual sebagai default","tier.comparison.pro.all":"Semua di Basic, ditambah","tier.comparison.pro.sync":"Alur sinkronisasi lanjutan","tier.comparison.pro.sync.item1":"Arah sinkronisasi per tipe","tier.comparison.pro.sync.item2":"Mode penerapan per tipe","tier.comparison.pro.sync.item3":"Sinkronisasi dua arah dan terbalik","tier.comparison.pro.sync.item4":"Sinkronisasi penuh, sinkronisasi ulang, dan kirim ke Studio","tier.comparison.pro.sync.item5":"Sinkronisasi multi-tempat","tier.comparison.pro.playtest":"Kontrol playtest","tier.comparison.pro.playtest.item1":"Putar, hentikan, jeda, dan lanjutkan","tier.comparison.pro.playtest.item2":"Inspeksi status playtest","tier.comparison.pro.playtest.item3":"Eksekusi pengujian otomatis","tier.comparison.pro.creation":"Alur pembuatan lanjutan","tier.comparison.pro.creation.item1":"Operasi massal","tier.comparison.pro.creation.item2":"Pembuatan terrain","tier.comparison.pro.creation.item3":"Pencarian dan penyisipan aset","tier.comparison.pro.creation.item4":"Raycast dan analisis spasial","tier.comparison.pro.creation.item5":"Kontrol lingkungan","tier.comparison.discount.label":"🎁 Masukkan kode ini saat checkout Gumroad untuk mendapat diskon:","tier.comparison.discount.code":"WEPPY-MCP","tier.comparison.discount.expiry":"Berlaku hingga 30 April","tier.promo.discount.hint":"🎁 Gunakan kode WEPPY-MCP di Gumroad · Berlaku hingga 30 April","tier.promo.discount.context":"🎁 Masukkan di Gumroad saat checkout:","tier.tool.query_instances.desc":"Kueri instance, jelajahi anak/keturunan, info kelas, cari berdasarkan nama dan kelas. Pro: pohon file, struktur proyek, pencarian berdasarkan properti dan tag.","tier.tool.mutate_instances.desc":"Buat, hapus, klon, pindah, ganti nama, dan pivot instance. Pro: pembuatan pohon, pembuatan/penghapusan/duplikasi massal.","tier.tool.manage_properties.desc":"Lihat dan atur properti, atribut, dan tag. Pro: nilai kalkulasi dan relatif, lihat/atur massal, modifikasi massal anak.","tier.tool.manage_scripts.desc":"Baca, tulis, buat, hapus, edit baris, dan cari di script. Pro: penggantian massal antar script.","tier.tool.manage_lighting.desc":"Khusus Pro. Pengaturan pencahayaan, atmosfer, langit, properti terrain, dan waktu.","tier.tool.manage_selection.desc":"Lihat, atur, dan hapus seleksi. Pro: konteks, detail, tambah/hapus item, pantau perubahan.","tier.tool.manage_camera.desc":"Info kamera, fokus berdasarkan jalur atau koordinat, saran tampilan.","tier.tool.manage_tween.desc":"Khusus Pro. Buat, putar, jeda, dan batalkan tween untuk animasi halus.","tier.tool.manage_audio.desc":"Khusus Pro. Putar, hentikan, jeda, dan lanjutkan suara. Atur listener audio.","tier.tool.manage_animation.desc":"Khusus Pro. Muat, putar, dan hentikan animasi. Lihat track humanoid/pengontrol.","tier.tool.manage_physics.desc":"Khusus Pro. Daftarkan grup tabrakan, atur tabrakan antar grup, daftar grup.","tier.tool.manage_effects.desc":"Khusus Pro. Pancarkan partikel, hapus semua, aktifkan/nonaktifkan efek.","tier.tool.manage_terrain.desc":"Khusus Pro. Isi bentuk, hapus wilayah, ganti material, kelola warna, baca/tulis voxel, pembuatan prosedural, pemulusan.","tier.tool.spatial_query.desc":"Khusus Pro. Raycast, cari tanah, periksa penempatan, pindai area, cari area datar dan titik spawn, analisis kemampuan jalan, peta spasial, deteksi tabrakan.","tier.tool.manage_assets.desc":"Khusus Pro. Sisipkan model, lihat info aset, cari di toko kreator, sisipkan model/paket gratis, ekspor.","tier.tool.manage_sync.desc":"Khusus Pro. Status sinkronisasi, konfigurasi, riwayat, arah, baca/tulis file tersinkronisasi.","tier.tool.workspace_state.desc":"Khusus Pro. Sinkronisasi penuh, snapshot, perubahan terbaru, info viewport, metadata, manajemen cache.","tier.tool.manage_logs.desc":"Kueri log terfilter, polling inkremental, hapus buffer, kueri error terbaru.","tier.tool.system_info.desc":"Status koneksi, verifikasi tier. Pro: info tempat, daftar layanan, pengaturan Studio, kontrol playtest, pengujian otomatis.","tier.tool.batch_execute.desc":"Khusus Pro. Eksekusi beberapa perintah sekaligus. Pemrosesan berurutan dengan opsi lanjut saat error.","tier.tool.execute_luau.desc":"Khusus Pro. Jalankan kode Luau di sandbox Roblox Studio.","connection.server.title":"Status Server","connection.server.version":"Versi","connection.server.version.tooltip":"Versi server MCP yang terpasang.","connection.server.pid":"PID","connection.server.pid.tooltip":"Pengenal proses dari sistem operasi.","connection.server.uptime":"Waktu aktif","connection.server.uptime.tooltip":"Waktu yang berlalu sejak server MCP dimulai.","connection.server.session":"Sesi","connection.server.session.tooltip":"Pengenal sesi MCP saat ini.","connection.server.exec":"Eksekutabel","connection.server.exec.tooltip":"Path eksekutabel yang digunakan untuk menjalankan server MCP.","connection.reconnect":"Hubungkan ulang","connection.checkSettings":"Periksa pengaturan","connection.agents.title":"Agen AI","connection.agents.name":"Agen","connection.agents.cwd":"Direktori kerja","connection.agents.cwd.tooltip":"Direktori kerja saat ini milik agen AI yang terhubung.","connection.agents.projectRoot":"Root Proyek","connection.agents.projectRoot.tooltip":"Jalur proyek otoritatif untuk kepemilikan sinkronisasi","connection.agents.projectRoot.unresolved":"Belum terselesaikan","connection.agents.connected":"Terhubung","connection.agents.unknown":"Tidak diketahui","connection.agents.none":"Tidak ada agen terhubung","connection.plugins.title":"Plugin","connection.plugins.place":"Place","connection.plugins.clientId":"ID Klien","connection.plugins.clientId.tooltip":"Pengenal unik klien plugin untuk koneksi Studio ini.","connection.plugins.lastSeen":"Terakhir terlihat","connection.plugins.lastSeen.tooltip":"Heartbeat terbaru yang diterima dari plugin.","connection.plugins.version":"Versi","connection.plugins.version.tooltip":"Versi plugin terpasang yang dilaporkan oleh Studio.","connection.plugins.none":"Tidak ada plugin terhubung","connection.log.title":"Log Koneksi","connection.log.empty":"Belum ada event","connection.time.secondsAgo":"dtk lalu","connection.time.minutesAgo":"mnt lalu","connection.time.hoursAgo":"jam lalu","common.loading":"Memuat...","common.retry":"Coba lagi","common.reconnecting":"Menghubungkan ulang...","common.expand":"Perluas","common.collapse":"Ciutkan","tools.tab.history":"Riwayat","tools.tab.statistics":"Statistik","tools.tab.failures":"Kegagalan","tools.col.time":"Waktu","tools.col.time.tooltip":"Waktu ketika eksekusi alat dicatat.","tools.col.toolAction":"Alat.Aksi","tools.col.toolAction.tooltip":"Nama alat dan aksi yang dijalankan.","tools.col.duration":"Durasi","tools.col.duration.tooltip":"Berapa lama alat menyelesaikan eksekusi.","tools.col.status":"Status","tools.col.status.tooltip":"Hasil dari eksekusi alat yang tercatat.","tools.col.tier":"Tier","tools.col.tier.tooltip":"Tier lisensi yang dibutuhkan untuk alat atau aksi ini.","tools.col.tierStats.tooltip":"Ringkasan Basic, Pro, atau Mixed untuk baris statistik alat ini.","tools.col.tool":"Alat","tools.col.tool.tooltip":"Nama alat konsolidasi pada tabel statistik.","tools.col.calls":"Panggilan","tools.col.calls.tooltip":"Jumlah total panggilan yang tercatat untuk alat ini.","tools.col.okRate":"% Sukses","tools.col.okRate.tooltip":"Persentase panggilan yang selesai dengan sukses.","tools.col.avgTime":"Waktu rata-rata","tools.col.avgTime.tooltip":"Rata-rata waktu eksekusi dari panggilan yang tercatat.","tools.col.error":"Error","tools.filter.tool":"Alat","tools.filter.all":"Semua","tools.badge.pro":"PRO","tools.badge.pro.tooltip":"Entri ini menggunakan alat atau aksi khusus Pro.","tools.status.ok":"OK","tools.status.ok.tooltip":"Eksekusi alat selesai dengan sukses.","tools.tier.mixed.tooltip":"Alat ini memiliki campuran aksi Basic dan Pro.","tools.detail.params":"Parameter","tools.detail.params.tooltip":"Parameter input yang dikirim pada eksekusi alat ini.","tools.detail.result":"Hasil","tools.detail.result.tooltip":"Payload hasil yang dikembalikan dari eksekusi alat ini.","tools.detail.error":"Error","tools.page.prev":"Sebelumnya","tools.page.prev.tooltip":"Pindah ke halaman sebelumnya pada riwayat alat.","tools.page.next":"Selanjutnya","tools.page.next.tooltip":"Pindah ke halaman berikutnya pada riwayat alat.","tools.empty.history":"Tidak ada entri riwayat","tools.empty.stats":"Tidak ada statistik alat","tools.empty.failures":"Tidak ada kegagalan","tools.summary.total":"Total","tools.summary.calls":"panggilan","tools.summary.sessions":"Sesi","settings.license.title":"Lisensi","settings.license.title.tooltip":"Status lisensi dan tier langganan saat ini.","settings.license.status":"Status","settings.license.status.tooltip":"Status aktivasi lisensi saat ini.","settings.license.tier":"Tier","settings.license.tier.tooltip":"Tier langganan saat ini untuk fitur WROX Dashboard yang tersedia.","settings.license.key":"Kunci","settings.license.key.tooltip":"Kunci lisensi tersamarkan yang saat ini dimuat oleh server.","settings.license.keyValue.tooltip":"Kunci lisensi tersamarkan yang saat ini dimuat oleh server.","settings.license.provider":"Penyedia","settings.license.provider.tooltip":"Penyedia lisensi yang digunakan untuk memvalidasi kunci ini.","settings.license.providerValue.tooltip":"Penyedia lisensi yang digunakan untuk memvalidasi kunci ini.","settings.license.active":"Aktif","settings.license.active.tooltip":"Status aktivasi lisensi saat ini.","settings.license.status.activeCancelPending.tooltip":"Pembatalan sedang menunggu, tetapi akses Pro tetap aktif hingga periode penagihan saat ini berakhir.","settings.license.inactive":"Tidak aktif","settings.license.inactive.tooltip":"Status aktivasi lisensi saat ini.","settings.license.expired":"Kedaluwarsa","settings.license.expired.tooltip":"Status aktivasi lisensi saat ini.","settings.license.unavailable":"Info lisensi tidak tersedia","settings.license.detail.cancelPending":"Pembatalan telah dijadwalkan. Akses Pro tetap aktif hingga periode penagihan saat ini berakhir.","settings.license.reset":"Reset Lisensi","settings.readOnly":"Hanya baca","settings.readOnly.tooltip":"Bagian ini menampilkan nilai yang tidak bisa diedit dari WROX Dashboard.","settings.unavailable":"Pengaturan tidak tersedia","settings.general.title":"Pengaturan umum","settings.general.title.tooltip":"Pengaturan panas yang langsung diterapkan saat diubah.","settings.general.liveApply":"Terapkan langsung","settings.general.liveApply.tooltip":"Perubahan di bagian ini langsung diterapkan tanpa tombol simpan terpisah.","settings.general.applied":"Diterapkan","settings.general.logLevel":"Level log","settings.general.logLevel.tooltip":"Menetapkan seberapa detail WROX Dashboard menulis lognya.","settings.general.localHistory":"Perekaman riwayat alat","settings.general.localHistory.tooltip":"Menyimpan riwayat eksekusi alat lokal untuk tampilan riwayat WROX Dashboard.","settings.general.localStatistics":"Pengumpulan statistik alat","settings.general.localStatistics.tooltip":"Mengumpulkan statistik penggunaan lokal untuk pelaporan WROX Dashboard.","settings.general.contextCapture":"Context Capture","settings.general.contextCapture.tooltip":"When enabled, the WROX Dashboard records structured execution context for changelog and playtest views.","settings.general.requestTimeout":"Batas waktu permintaan","settings.general.requestTimeout.tooltip":"Waktu maksimum WROX Dashboard menunggu permintaan sebelum dianggap gagal.","settings.general.requestTimeout.unit":"ms","settings.general.requestTimeout.unit.tooltip":"Batas waktu permintaan diukur dalam milidetik.","settings.cold.title":"Lingkungan server","settings.cold.title.tooltip":"Nilai lingkungan server hanya-baca yang dimuat saat startup.","settings.cold.httpPort.tooltip":"Nomor port yang digunakan oleh server HTTP WROX Dashboard MCP.","settings.cold.httpHost.tooltip":"Antarmuka host yang diikat oleh server HTTP WROX Dashboard MCP.","settings.cold.dashboardAutoOpen.tooltip":"Mengontrol apakah WROX Dashboard terbuka otomatis di browser saat server dimulai.","settings.cold.dashboardAutoOpen.value.tooltip":"Perilaku startup saat ini untuk membuka WROX Dashboard di browser.","settings.cold.hint":"Atur melalui variabel lingkungan.","settings.language.title":"Bahasa","settings.language.title.tooltip":"Pilih cara teks antarmuka WROX Dashboard dilokalkan.","settings.language.dashboard":"Bahasa WROX Dashboard","settings.language.dashboard.tooltip":"Mengganti bahasa WROX Dashboard atau mengikuti bahasa sistem saat disetel ke Otomatis.","settings.language.auto":"Otomatis","overview.l0.title":"Server MCP terputus","overview.l0.message":"Server MCP tidak merespons. WROX Dashboard akan mencoba menghubungkan ulang secara otomatis.","overview.l0.step1":"Periksa apakah proses server MCP sedang berjalan","overview.l0.step2":"Mulai ulang perintah server MCP jika diperlukan","overview.l0.reconnecting":"Menghubungkan ulang otomatis setiap 3 detik...","overview.l0.reconnectBtn":"Hubungkan ulang","overview.l0.settingsBtn":"Periksa pengaturan","overview.l1.pluginGuide":"Plugin Roblox Studio tidak terhubung","overview.l1.check1":"Apakah Roblox Studio sedang berjalan?","overview.l1.check2":"Apakah WROX Plugin sudah terinstal?","overview.l1.check3":"Apakah HTTP Requests diaktifkan di pengaturan Studio?","overview.l1.feedHint":"Perubahan akan muncul di sini setelah plugin terhubung","overview.metric.server":"Server","overview.metric.server.tooltip":"Status runtime dan proses server MCP.","overview.metric.plugin":"Plugin","overview.metric.plugin.tooltip":"Status koneksi dan versi plugin Roblox Studio.","overview.metric.agent":"Agen","overview.metric.agent.tooltip":"Agen coding AI yang terhubung dan status runtime-nya.","overview.metric.agent.instancesUnit":"instansi","overview.metric.sync":"Sinkronisasi","overview.metric.sync.tooltip":"Aktivitas sinkronisasi saat ini antara Studio dan file lokal.","overview.metric.noAgent":"Tidak ada agen","overview.meta.version":"Versi","overview.meta.version.tooltip":"Versi server MCP yang terpasang.","overview.meta.session":"Sesi","overview.meta.session.tooltip":"Pengenal sesi MCP saat ini.","overview.meta.pid":"PID","overview.meta.pid.tooltip":"Pengenal proses dari sistem operasi.","overview.meta.uptime":"Waktu aktif","overview.meta.uptime.tooltip":"Waktu yang berlalu sejak server MCP dimulai.","overview.feed.title":"Perubahan game terbaru","overview.feed.empty":"Tidak ada perubahan terbaru","overview.changelog.title":"Ringkasan perubahan sesi","overview.changelog.entries":"Total","overview.changelog.scripts":"skrip","overview.changelog.instances":"instansi","overview.changelog.properties":"properti","overview.changelog.assets":"aset","overview.tier.title":"Penggunaan tier","changelog.subtitle":"Riwayat perubahan game","changelog.filter.all":"Semua","changelog.filter.active":"Aktif","changelog.filter.completed":"Selesai","changelog.empty":"Belum ada entri riwayat","changelog.basic.limit.title":"Pratinjau Basic hanya menampilkan 3 sesi terbaru","changelog.basic.limit.body":"Upgrade ke Pro untuk melihat timeline changelog lengkap untuk place ini.","changelog.basic.metricLabel":"Changelog terlihat / Total","changelog.basic.visible":"terlihat","changelog.basic.total":"total","changelog.card.active":"Aktif","changelog.card.active.tooltip":"Sesi ini masih menerima perubahan game baru.","changelog.card.completed":"Selesai","changelog.card.completed.tooltip":"Sesi ini sudah berakhir dan tidak ada perubahan baru yang diharapkan.","changelog.card.bootstrapStatus":"Inisialisasi","changelog.card.bootstrapStatus.tooltip":"Sesi ini hanya berisi snapshot bootstrap sinkronisasi awal.","changelog.card.inProgress":"sedang berlangsung","changelog.card.noChanges":"Belum ada perubahan","changelog.card.noChanges.tooltip":"Belum ada perubahan game yang diekstrak untuk sesi ini.","changelog.card.bootstrapSummary":"Snapshot sinkronisasi awal","changelog.card.bootstrapSummary.tooltip":"Penulisan sinkronisasi file awal diringkas menjadi satu baris snapshot bootstrap.","changelog.card.sessionIntent":"Session intent","changelog.card.scripts":"skrip","changelog.card.scripts.tooltip":"Perubahan skrip yang terjadi di sesi ini.","changelog.card.instances":"instansi","changelog.card.instances.tooltip":"Perubahan pembuatan, penghapusan, pemindahan, atau kloning instansi di sesi ini.","changelog.card.modified":"diubah","changelog.card.created":"dibuat","changelog.card.deleted":"dihapus","changelog.card.moved":"dipindahkan","changelog.card.propertiesChanged":"properti diubah","changelog.card.propertiesChanged.tooltip":"Perubahan nilai properti yang tercatat untuk sesi ini.","changelog.card.lightingConfigured":"Pencahayaan dikonfigurasi","changelog.card.lightingConfigured.tooltip":"Pencahayaan atau pengaturan atmosfer berubah di sesi ini.","changelog.card.terrainConfigured":"Terrain dikonfigurasi","changelog.card.terrainConfigured.tooltip":"Data terrain atau pengaturan terrain berubah di sesi ini.","changelog.card.assetsInserted":"aset disisipkan","changelog.card.assetsInserted.tooltip":"Aset yang dimasukkan ke place selama sesi ini.","changelog.category.script":"Skrip","changelog.category.instance":"Instansi","changelog.category.property":"Properti","changelog.category.lighting":"Pencahayaan","changelog.category.terrain":"Terrain","changelog.category.asset":"Aset","changelog.detail.changeSummary":"Ringkasan perubahan","changelog.detail.changeSummary.tooltip":"Jumlah perubahan game yang diekstrak dan dikelompokkan per kategori untuk sesi ini.","changelog.detail.changeTimeline":"Timeline perubahan","changelog.detail.changeTimeline.tooltip":"Daftar kronologis perubahan game yang diekstrak untuk sesi ini.","changelog.detail.context.title":"Context Summary","changelog.detail.context.tooltip":"Structured execution context captured for this changelog session.","changelog.detail.verification.title":"Verification","changelog.detail.verification.tooltip":"Verification signals linked to this changelog session.","changelog.detail.verification.label":"Result","changelog.detail.verification.status":"Status","changelog.detail.verification.timestamp":"Recorded at","changelog.detail.beforeAfter":"Sebelum & Sesudah","changelog.detail.filterCategory":"Kategori","changelog.detail.filterCategory.tooltip":"Filter timeline ke satu kategori perubahan.","changelog.detail.confidence.exact":"Tepat","changelog.detail.confidence.exact.tooltip":"Status sebelum dan sesudah perubahan ini sama-sama terkonfirmasi.","changelog.detail.confidence.partial":"Parsial","changelog.detail.confidence.partial.tooltip":"Hanya sebagian status sebelum dan sesudah perubahan ini yang bisa dikonfirmasi.","changelog.detail.confidence.afterOnly":"Hanya sesudah","changelog.detail.confidence.afterOnly.tooltip":"Hanya status hasil setelah perubahan yang bisa dikonfirmasi.","changelog.detail.confidence.intentOnly":"Hanya niat","changelog.detail.confidence.intentOnly.tooltip":"Hanya aksi yang diminta yang tercatat, bukan status hasilnya.","changelog.detail.confidence.unknown":"Tidak diketahui","changelog.detail.confidence.unknown.tooltip":"Perubahan ini tidak dapat diklasifikasikan dengan yakin dari data yang tersedia.","changelog.detail.noChanges":"Tidak ada perubahan di kategori ini","changelog.detail.backToList":"Kembali ke daftar","changelog.diff.empty":"Tidak ada perbedaan","changelog.diff.unified":"Terpadu","changelog.diff.sideBySide":"Berdampingan","changelog.diff.before":"Sebelum","changelog.diff.after":"Sesudah","sync.overlay.title":"Plugin Roblox Studio diperlukan","sync.overlay.message":"Status sinkronisasi akan tersedia setelah plugin Roblox Studio terhubung.","sync.overlay.check1":"Apakah Roblox Studio sedang berjalan?","sync.overlay.check2":"Apakah WROX Plugin sudah terinstal?","sync.overlay.check3":"Apakah HTTP Requests diaktifkan di pengaturan Studio?","sync.status.title":"Status sinkronisasi","sync.status.title.tooltip":"Status sinkronisasi Studio dan file lokal untuk place ini.","sync.status.forwardOnly":"Hanya maju","sync.status.forwardOnly.tooltip":"Tier Basic hanya mengizinkan sinkronisasi maju dari Studio ke lokal.","sync.status.place":"Place","sync.status.place.tooltip":"Nama place Roblox yang terhubung beserta ID place-nya.","sync.status.path":"Path","sync.status.path.tooltip":"Root sistem file lokal yang saat ini dipakai untuk output sinkronisasi.","sync.status.instances":"Instansi","sync.status.instances.tooltip":"Jumlah total instance Roblox yang disinkronkan di mirror lokal.","sync.status.scripts":"Skrip","sync.status.scripts.tooltip":"Jumlah total file skrip yang saat ini diindeks untuk place ini.","sync.status.state":"Status","sync.status.state.tooltip":"Status runtime sinkronisasi saat ini yang dilaporkan server.","sync.directions.title":"Arah sinkronisasi","sync.directions.title.tooltip":"Arah sinkronisasi per kategori dan cara penerapannya antara Local dan Studio.","sync.directions.type":"Tipe","sync.directions.type.tooltip":"Kategori sinkronisasi yang dipengaruhi aturan ini.","sync.directions.direction":"Arah","sync.directions.direction.tooltip":"Menunjukkan apakah tiap kategori sinkron dari Studio, ke Studio, atau dua arah.","sync.directions.applyMode":"Mode penerapan","sync.directions.applyMode.tooltip":"Cara perubahan sinkronisasi masuk diterapkan untuk kategori ini.","sync.directions.cat.scripts":"Skrip","sync.directions.cat.values":"Nilai","sync.directions.cat.containers":"Kontainer","sync.directions.cat.data":"Data","sync.directions.cat.services":"Layanan","sync.directions.endpoint.local":"Local","sync.directions.endpoint.local.tooltip":"File lokal di disk selalu ditampilkan di sisi kiri rel arah.","sync.directions.endpoint.studio":"Studio","sync.directions.endpoint.studio.tooltip":"Roblox Studio selalu ditampilkan di sisi kanan rel arah.","sync.directions.mode.manual":"Manual","sync.directions.mode.manual.tooltip":"Menerapkan perubahan sinkronisasi hanya saat Anda memicunya secara manual.","sync.directions.mode.auto":"Otomatis","sync.directions.mode.auto.tooltip":"Menerapkan perubahan sinkronisasi otomatis saat pembaruan datang.","sync.directions.tooltip.forward.body":"Perubahan dari Studio hanya disinkronkan ke file lokal","sync.directions.tooltip.bidirectional.body":"Sinkronisasi dua arah antara Local dan Studio","sync.directions.tooltip.reverse.body":"Dorong perubahan file lokal ke Studio","sync.directions.tooltip.proRequired":"Pro diperlukan pada tier Basic","sync.directions.dir.forward":"maju","sync.directions.dir.bidirectional":"dua arah","sync.directions.dir.reverse":"mundur","sync.log.title":"Log sinkronisasi","sync.log.empty":"Tidak ada event sinkronisasi","sync.log.type.write":"TULIS","sync.log.type.write.tooltip":"Output sinkronisasi baru ditulis ke disk.","sync.log.type.update":"PERBARUI","sync.log.type.update.tooltip":"File atau instance yang sudah tersinkron diperbarui.","sync.log.type.delete":"HAPUS","sync.log.type.delete.tooltip":"File atau instance tersinkron telah dihapus.","sync.log.type.idle":"IDLE","sync.log.type.idle.tooltip":"Event sinkronisasi dicatat tanpa perubahan file.","sync.upgrade.title":"Buka fitur sinkronisasi penuh dengan Pro","sync.upgrade.benefit1":"Sinkronisasi dua arah — edit file, otomatis diterapkan ke Studio","sync.upgrade.benefit2":"Sinkronisasi mundur — kirim perubahan file ke Studio","sync.upgrade.benefit3":"Riwayat sinkronisasi lengkap dan log perubahan detail","sync.upgrade.buy":"Upgrade ke Pro","playtest.status.title":"Status playtest","playtest.status.title.tooltip":"Status sesi playtest Roblox saat ini yang dilaporkan oleh Studio.","playtest.status.mode":"Mode","playtest.status.mode.tooltip":"Mode peluncuran playtest Studio untuk sesi saat ini.","playtest.status.mode.value.tooltip":"Mode playtest Roblox Studio spesifik yang sedang dipakai saat ini.","playtest.status.mode.play":"Main","playtest.status.mode.run":"Jalankan","playtest.status.mode.server":"Server","playtest.status.mode.edit":"Edit","playtest.status.place.tooltip":"Place Roblox yang saat ini terkait dengan sesi playtest ini.","playtest.status.state.running":"Berjalan","playtest.status.state.running.tooltip":"Sesi playtest Roblox saat ini sedang berjalan.","playtest.status.state.paused":"Dijeda","playtest.status.state.paused.tooltip":"Sesi playtest Roblox saat ini sedang dijeda.","playtest.status.state.notRunning":"Tidak berjalan","playtest.status.state.notRunning.tooltip":"Saat ini tidak ada sesi playtest Roblox yang sedang berjalan.","playtest.control.play":"Main","playtest.control.pause":"Jeda","playtest.control.resume":"Lanjutkan","playtest.control.stop":"Berhenti","playtest.history.title":"Riwayat tes","playtest.history.title.tooltip":"Riwayat eksekusi playtest otomatis yang tercatat untuk proyek ini.","playtest.history.empty":"Belum ada hasil tes","playtest.history.mode":"Mode","playtest.history.mode.tooltip":"Mode playtest yang digunakan pada eksekusi tes yang tercatat ini.","playtest.history.status.passed":"Berhasil","playtest.history.status.failed":"Gagal","playtest.history.status.running":"Berjalan","playtest.history.status.unknown":"Tidak diketahui","playtest.history.status.tooltip":"Status hasil yang tercatat untuk eksekusi playtest otomatis ini.","playtest.empty.title":"Belum ada hasil playtest","playtest.empty.message":"Hasil akan muncul di sini saat agen AI menjalankan tes otomatis via system_info.run_test.","playtest.empty.message.before":"Hasil akan muncul di sini saat agen AI menjalankan tes otomatis melalui","playtest.empty.message.after":".","playtest.empty.runTest.tooltip":"Titik otomatisasi WROX Dashboard yang menjalankan pemeriksaan playtest Roblox melalui tool system_info.","playtest.report.title":"Laporan terpilih","playtest.report.title.tooltip":"Output detail untuk eksekusi playtest otomatis yang sedang dipilih.","playtest.report.content":"Laporan","playtest.report.content.tooltip":"Ringkasan Markdown untuk eksekusi playtest otomatis yang dipilih.","playtest.report.logs":"Log","playtest.report.logs.tooltip":"Log eksekusi yang ditangkap untuk eksekusi playtest otomatis yang dipilih.","playtest.context.contextId":"Context ID","playtest.context.why":"Why this test ran","playtest.context.expected":"Expected","playtest.context.observed":"Observed","playtest.report.empty":"Tidak ada konten laporan","playtest.basic.icon":"🎮","playtest.basic.title":"Playtest adalah fitur khusus Pro","playtest.basic.desc":"Kontrol playtest dari WROX Dashboard, jalankan tes otomatis, dan lihat laporan tes detail.","playtest.basic.benefit1":"Kontrol main/jeda/berhenti sekali klik","playtest.basic.benefit2":"Eksekusi tes otomatis via agen AI","playtest.basic.benefit3":"Riwayat tes dengan pelacakan berhasil/gagal","playtest.basic.benefit4":"Laporan tes detail dalam markdown","playtest.sample.badge":"Pratinjau tampilan playtest Pro","playtest.sample.title":"Anda sedang melihat pratinjau layar playtest yang tersedia setelah upgrade ke Pro.","playtest.sample.message":"Pratinjau ini menggunakan data sampel. Kontrol playtest langsung, pengelolaan riwayat, dan laporan nyata tersedia setelah upgrade ke Pro.","playtest.sample.clearDisabled":"Upgrade ke Pro untuk menghapus riwayat playtest nyata.","playtest.sample.place":"Pratinjau Arena","playtest.sample.history.name":"Sample Arena Smoke Test","playtest.sample.context.why":"Masuk ke arena, bertahan pada fase awal, dan pastikan HUD merespons segera.","playtest.sample.context.expected":"Pemain spawn dengan aman, UI hitung mundur muncul dalam satu detik, dan wave pertama dimulai tanpa error.","playtest.sample.context.observed":"Proteksi spawn bekerja, HUD diperbarui tepat waktu, dan wave pertama selesai tanpa regresi.","playtest.sample.report.markdown":`# Sample Arena Smoke Test
120
+
121
+ - Alur spawn: PASS
122
+ - Hitung mundur HUD: PASS
123
+ - Awal wave: PASS
124
+
125
+ Ini adalah pratinjau sampel. Upgrade ke Pro untuk menjalankan playtest langsung dan menyimpan laporan nyata.`,"playtest.sample.report.logs":`[sample] boot pratinjau playtest
126
+ [sample] proteksi spawn aktif
127
+ [sample] hitung mundur hud dirender
128
+ [sample] wave pertama selesai
129
+ [sample] laporan pratinjau selesai`},hm=["en","ko","es","pt-br","ja","id"],Mo="auto",ys={en:cm,ko:um,es:dm,"pt-br":pm,ja:fm,id:gm},vi="dashboard-locale";function bs(a){return hm.includes(a)}function mm(){const i=((typeof navigator<"u"?navigator.language:"en")??"en").toLowerCase();return i==="ko"||i.startsWith("ko-")?"ko":i==="pt-br"?"pt-br":i==="ja"||i.startsWith("ja-")?"ja":i==="es"||i.startsWith("es-")?"es":i==="id"||i.startsWith("id-")?"id":"en"}function zd(){if(typeof localStorage<"u"){const a=localStorage.getItem(vi);if(a===Mo)return Mo;if(a&&bs(a))return a}return Mo}function Ad(a){return a===Mo?mm():a}const up=T.createContext(null);function ym({children:a}){const[i,s]=T.useState(zd),[c,d]=T.useState(()=>Ad(zd())),p=T.useCallback((m,h)=>{const S=ys[c]??ys.en??{};if(m in S)return S[m];const b=ys.en;return b&&m in b?b[m]:h!==void 0?h:m},[c]),f=T.useCallback(m=>{typeof localStorage<"u"&&(m===Mo?localStorage.removeItem(vi):bs(m)?localStorage.setItem(vi,m):localStorage.setItem(vi,"en"));const h=m===Mo?Mo:bs(m)?m:"en";s(h),d(Ad(h))},[]);return T.createElement(up.Provider,{value:{locale:c,selectedLocale:i,t:p,setLocale:f}},a)}function Ci(){const a=T.useContext(up);if(!a)throw new Error("useLocale must be used within a LocaleProvider");return a}const vm="_container_10isu_2",Sm="_toast_10isu_14",wm="_slideIn_10isu_1",km="_success_10isu_39",Pm="_info_10isu_44",Rm="_warning_10isu_49",bm="_error_10isu_54",vs={container:vm,toast:Sm,slideIn:wm,success:km,info:Pm,warning:Rm,error:bm},dp=T.createContext(null),xm=3e3;function Cm({children:a}){const[i,s]=T.useState([]),c=T.useRef(0),d=T.useCallback((p,f="info")=>{const m=c.current++;s(h=>[...h,{id:m,message:p,type:f}]),setTimeout(()=>{s(h=>h.filter(S=>S.id!==m))},xm)},[]);return A.jsxs(dp.Provider,{value:{show:d},children:[a,A.jsx("div",{className:vs.container,children:i.map(p=>A.jsx("div",{className:`${vs.toast} ${vs[p.type]}`,children:p.message},p.id))})]})}function pp(){const a=T.useContext(dp);return a||{show:()=>{}}}function jm(){const{level:a}=Ds(),{show:i}=pp(),{t:s}=Ci(),c=T.useRef(null);return T.useEffect(()=>{const d=c.current;c.current=a,d!==null&&d!==a&&(d==="disconnected"&&a==="serverOnly"?i(s("toast.serverConnected","MCP 서버 연결됨"),"success"):d==="serverOnly"&&a==="studioConnected"?i(s("toast.pluginConnected","플러그인 연결됨"),"success"):(d==="serverOnly"||d==="studioConnected")&&a==="disconnected"?i(s("toast.serverDisconnected","MCP 서버 연결 끊김"),"error"):d==="studioConnected"&&a==="serverOnly"&&i(s("toast.pluginDisconnected","플러그인 연결 끊김"),"warning"))},[a,i,s]),null}const _m="_wrapper_1uzud_2",Em="_tooltip_1uzud_8",Tm="_tooltipLeft_1uzud_30",Mm="_tooltipRight_1uzud_35",gi={wrapper:_m,tooltip:Em,tooltipLeft:Tm,tooltipRight:Mm};function Ri({text:a,children:i}){const s=T.useRef(null),[c,d]=T.useState("center"),p=a.trim();if(!p)return A.jsx(A.Fragment,{children:i});const f=T.useCallback(()=>{d("center"),window.requestAnimationFrame(()=>{const m=s.current;if(!m)return;const h=m.getBoundingClientRect(),S=8;if(h.left<S){d("left");return}h.right>window.innerWidth-S&&d("right")})},[]);return A.jsxs("span",{className:gi.wrapper,title:p,onMouseEnter:f,children:[i,A.jsx("span",{ref:s,className:[gi.tooltip,c==="left"?gi.tooltipLeft:"",c==="right"?gi.tooltipRight:""].filter(Boolean).join(" "),"data-placement":c,children:p})]})}function Lm(a){return a==="gumroad"?"gumroad":void 0}function Dm(a){if(!a||typeof a!="object")return!1;const i=a.status;return(a.tier==="basic"||a.tier==="pro")&&(i==="active"||i==="grace"||i==="invalid"||i==="revoked"||i==="unlicensed"||i==="unknown")}function fp(a){return a&&typeof a=="object"&&"data"in a&&a.data?a.data:a}function gp(a){if(!a||typeof a!="object")return null;if(Dm(a))return a;const i=a;if(typeof i.canUsePro!="boolean"||typeof i.status!="string"||i.status!=="active"&&i.status!=="grace"&&i.status!=="invalid"&&i.status!=="revoked"&&i.status!=="unlicensed"&&i.status!=="unknown")return null;const s=Lm(i.provider);return{tier:i.canUsePro?"pro":"basic",status:i.status,...typeof i.statusDetail=="string"?{statusDetail:i.statusDetail}:{},...typeof i.maskedKey=="string"?{maskedKey:i.maskedKey}:{},...s?{provider:s}:{},refreshRequired:i.refreshRequired===!0,...typeof i.refreshBlockedReason=="string"?{refreshBlockedReason:i.refreshBlockedReason}:{}}}async function Om(a="gumroad"){const i=await fn.get("/api/dashboard/license/status",{provider:a});return gp(fp(i))}function Os(a){const i=fp(a),s=i,c=gp(i),d=typeof(s==null?void 0:s.reasonCode)=="string"?s.reasonCode:void 0;return{ok:(s==null?void 0:s.ok)===!0,license:c?{...c,refreshRequired:c.refreshRequired||d==="missing_session_token",refreshBlockedReason:c.refreshBlockedReason??(d==="missing_session_token"?"missing_session_token":void 0)}:null,message:typeof(s==null?void 0:s.message)=="string"?s.message:null,reasonCode:d,recoverable:(s==null?void 0:s.recoverable)===!0}}async function iv(a){const i=a.provider??"gumroad",s=await fn.post("/api/dashboard/license/activate",{provider:i,licenseKey:a.licenseKey,clientType:"dashboard"});return Os(s)}async function lv(a={}){const i=a.provider??"gumroad",s=await fn.post("/api/dashboard/license/refresh",{provider:i,clientType:"dashboard"});return Os(s)}async function sv(a={}){const i=a.provider??"gumroad",s=await fn.post("/api/dashboard/license/reset",{provider:i,clientType:"dashboard"});return Os(s)}class zm{constructor(i){xn(this,"source",null);xn(this,"handlers",new Map);xn(this,"reconnectTimer",null);xn(this,"url");this.url=i??`${xi}/api/dashboard/events`}connect(){this.disconnect(),this.source=new EventSource(this.url),this.source.onopen=()=>{this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)},this.source.onerror=()=>{var s;(s=this.source)==null||s.close(),this.source=null,this.scheduleReconnect()};const i=["connection","sync","command","game_change","mcp_status","license"];for(const s of i)this.source.addEventListener(s,c=>{var p;const d=JSON.parse(c.data);(p=this.handlers.get(s))==null||p.forEach(f=>f(d))})}on(i,s){return this.handlers.has(i)||this.handlers.set(i,new Set),this.handlers.get(i).add(s),()=>{var c;return(c=this.handlers.get(i))==null?void 0:c.delete(s)}}disconnect(){var i;(i=this.source)==null||i.close(),this.source=null,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}get connected(){var i;return((i=this.source)==null?void 0:i.readyState)===EventSource.OPEN}scheduleReconnect(){this.reconnectTimer||(this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},tm))}}const hp=[{labelKey:"sidebar.overview",route:"/",icon:"📊",minLevel:"disconnected",lazy:()=>oo(()=>import("./OverviewPage-BHpt3LI2.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))},{labelKey:"sidebar.connection",route:"/connection",icon:"🔗",minLevel:"disconnected",lazy:()=>oo(()=>import("./ConnectionPage-CiaCY026.js"),__vite__mapDeps([13,1,2,3,14,8,15]))},{labelKey:"sidebar.sync",route:"/sync",icon:"🔄",minLevel:"serverOnly",lazy:()=>oo(()=>import("./SyncPage-DTSKbpio.js"),__vite__mapDeps([16,1,14,2,3,6,7,10,11,17]))},{labelKey:"sidebar.changelog",route:"/changelog",icon:"📋",minLevel:"serverOnly",lazy:()=>oo(()=>import("./ChangelogPage-DFCCRyyK.js"),__vite__mapDeps([18,14,6,7,10,11,19]))},{labelKey:"sidebar.playtest",route:"/playtest",icon:"🎮",minLevel:"serverOnly",lazy:()=>oo(()=>import("./PlaytestPage-CNwwI5Ro.js"),__vite__mapDeps([20,6,7,1,14,21]))},{labelKey:"sidebar.tools",route:"/tools",icon:"🔧",minLevel:"serverOnly",lazy:()=>oo(()=>import("./ToolsPage-CrdNh3D9.js"),__vite__mapDeps([22,14,6,7,9,10,11,23]))}],Am="_sidebar_1p82f_2",Nm="_brand_1p82f_17",Im="_brandIcon_1p82f_26",Fm="_brandText_1p82f_32",Bm="_brandTextPro_1p82f_43",Um="_nav_1p82f_49",Wm="_navLink_1p82f_57",Hm="_active_1p82f_78",Vm="_disabled_1p82f_85",qm="_icon_1p82f_96",Xm="_label_1p82f_107",en={sidebar:Am,brand:Nm,brandIcon:Im,brandText:Fm,brandTextPro:Bm,nav:Um,navLink:Wm,active:Hm,disabled:Vm,icon:qm,label:Xm},Nd={disconnected:0,serverOnly:1,studioConnected:2};function Km(a,i){return Nd[a]>=Nd[i]}function $m(a,i){return a==="serverOnly"?i("sidebar.gate.l1","MCP server connection required"):a==="studioConnected"?i("sidebar.gate.l2","Roblox Studio plugin connection required"):""}function Qm({item:a}){const{level:i}=Ds(),{t:s}=Ci(),c=Km(i,a.minLevel),d=A.jsxs(Qh,{to:a.route,end:a.route==="/",className:({isActive:p})=>[en.navLink,p?en.active:"",c?"":en.disabled].filter(Boolean).join(" "),onClick:p=>{c||p.preventDefault()},children:[A.jsx("span",{className:en.icon,children:a.icon}),A.jsx("span",{className:en.label,children:s(a.labelKey)})]});return c?d:A.jsx(Ri,{text:$m(a.minLevel,s),children:d})}function Gm(){const[a,i]=T.useState("basic");return T.useEffect(()=>{let s=!1;async function c(){try{const f=await Om("gumroad");!s&&(f!=null&&f.tier)&&i(f.tier)}catch{s||i("basic")}}c();const d=new zm;d.connect();const p=d.on("license",()=>{c()});return()=>{s=!0,p(),d.disconnect()}},[]),A.jsxs("aside",{className:en.sidebar,children:[A.jsxs("div",{className:en.brand,children:[A.jsx("span",{className:en.brandIcon,children:"◈"}),A.jsx("span",{"data-testid":"sidebar-brand-text",className:[en.brandText,a==="pro"?en.brandTextPro:""].filter(Boolean).join(" "),children:"WROX"})]}),A.jsx("nav",{className:en.nav,children:hp.map(s=>A.jsx(Qm,{item:s},s.route))})]})}async function Ym(){return fn.get("/api/dashboard/place-summary")}async function Jm(){return fn.get("/api/dashboard/sync-root")}async function Zm(){return fn.post("/api/dashboard/sync-root/pick")}async function ey(a){return fn.patch("/api/dashboard/sync-root",{projectRoot:a})}const ty="_backdrop_1ct9h_1",ny="_modal_1ct9h_11",oy="_title_1ct9h_20",ay="_message_1ct9h_26",ry="_actions_1ct9h_32",iy="_cancelButton_1ct9h_39",ly="_confirmButton_1ct9h_40",pn={backdrop:ty,modal:ny,title:oy,message:ay,actions:ry,cancelButton:iy,confirmButton:ly};function Ss(a,i){return A.jsxs("div",{style:{display:"grid",gap:6},children:[A.jsx("span",{style:{fontSize:12,fontWeight:700,color:"#9fb0cb"},children:a}),A.jsx("code",{style:{display:"block",overflowWrap:"anywhere",padding:"10px 12px",borderRadius:12,border:"1px solid rgba(162, 179, 207, 0.2)",background:"rgba(10, 15, 25, 0.72)",color:"#f4f7fb",fontSize:12,lineHeight:1.5},children:i})]})}function sy(a){const s=/^[A-Z]:\\/i.test(a)||a.includes("\\")?"\\":"/";return`${a.replace(/[\\/]+$/,"")}${s}wrox-project-sync`}function cy({open:a,step:i,selectedProjectRoot:s,studioConnected:c,loading:d=!1,errorMessage:p=null,onClose:f,onPick:m,onApply:h}){const{t:S}=Ci();if(!a)return null;const b=s?sy(s):"";return A.jsx("div",{className:pn.backdrop,onClick:d?void 0:f,role:"presentation",children:A.jsxs("div",{className:pn.modal,onClick:x=>x.stopPropagation(),role:"dialog","aria-modal":"true","aria-labelledby":"project-root-change-modal-title",children:[A.jsx("h2",{id:"project-root-change-modal-title",className:pn.title,children:i==="initial"?S("header.projectRootModal.initial.title","Change project root"):S("header.projectRootModal.confirm.title","Confirm new project root")}),A.jsx("p",{className:pn.message,children:i==="initial"?c?S("header.projectRootModal.initial.body.connected","MCP will switch to the new project root and resync current Studio contents into the new target."):S("header.projectRootModal.initial.body.disconnected","MCP will switch to the new project root and use the new folder as the next sync target."):S("header.projectRootModal.confirm.body","Review the selected project folder before applying.")}),A.jsxs("div",{style:{display:"grid",gap:14,marginTop:18},children:[i==="initial"?A.jsxs(A.Fragment,{children:[Ss(S("header.projectRootModal.initial.nextSyncRoot","New sync target after selection"),S("header.projectRootModal.initial.nextSyncRoot.placeholder","<selected project folder>/wrox-project-sync")),A.jsxs("ul",{style:{margin:0,paddingLeft:18,color:"#c8d2e3",lineHeight:1.6},children:[c?A.jsxs(A.Fragment,{children:[A.jsx("li",{children:S("header.projectRootModal.initial.warningStop","Current sync stops immediately.")}),A.jsx("li",{children:S("header.projectRootModal.initial.warningFreshSync","The current Studio contents will be used to build a fresh full sync in the new target.")})]}):A.jsx("li",{children:S("header.projectRootModal.initial.warningDeferredSync","If Studio is not connected, full resync starts the next time the plugin connects.")}),A.jsx("li",{children:S("header.projectRootModal.initial.warningNoMove","Old sync folders are not moved automatically.")})]})]}):A.jsxs(A.Fragment,{children:[Ss(S("header.projectRootModal.confirm.projectRoot","Selected project folder"),s??""),Ss(S("header.projectRootModal.confirm.syncRoot","New sync target"),b),A.jsx("p",{className:pn.message,children:S("header.projectRootModal.confirm.warningNoMove","Existing sync folders are not moved automatically.")})]}),p?A.jsx("p",{className:pn.message,style:{marginTop:0,color:"#ffb3b3"},children:p}):null]}),A.jsxs("div",{className:pn.actions,children:[A.jsx("button",{className:pn.cancelButton,onClick:f,disabled:d,children:S("header.projectRootModal.cancel","Cancel")}),i==="initial"?A.jsx("button",{className:pn.confirmButton,onClick:m,disabled:d,children:d?"...":S("header.projectRootModal.pick","Choose folder")}):A.jsx("button",{className:pn.confirmButton,onClick:h,disabled:d||!s,children:d?"...":S("header.projectRootModal.apply","Apply change")})]})]})})}function hi({text:a,children:i}){return A.jsx(Ri,{text:a,children:i})}const uy="_header_ebyz6_2",dy="_projectBlock_ebyz6_14",py="_projectTitleRow_ebyz6_21",fy="_label_ebyz6_28",gy="_projectName_ebyz6_37",hy="_projectActions_ebyz6_45",my="_projectMetaRow_ebyz6_62",yy="_projectMetaLabel_ebyz6_70",vy="_projectMetaValue_ebyz6_78",Sy="_placeBadge_ebyz6_87",wy="_placeBadgeMuted_ebyz6_102",ky="_placeIcon_ebyz6_106",Py="_placeSection_ebyz6_110",Ry="_placeSectionHeader_ebyz6_116",by="_placeNotice_ebyz6_123",xy="_routeNotice_ebyz6_124",Cy="_placeList_ebyz6_137",jy="_placeCard_ebyz6_143",_y="_placeCardCurrent_ebyz6_151",Ey="_placeCardTop_ebyz6_156",Ty="_placeCardName_ebyz6_163",My="_placeCardBadge_ebyz6_169",Ly="_placeCardBadgeActive_ebyz6_179",Dy="_placeCardBadgeInactive_ebyz6_184",Oy="_placeCardMeta_ebyz6_189",zy="_actions_ebyz6_196",Ay="_iconButton_ebyz6_202",Ny="_changeButton_ebyz6_235",ze={header:uy,projectBlock:dy,projectTitleRow:py,label:fy,projectName:gy,projectActions:hy,projectMetaRow:my,projectMetaLabel:yy,projectMetaValue:vy,placeBadge:Sy,placeBadgeMuted:wy,placeIcon:ky,placeSection:Py,placeSectionHeader:Ry,placeNotice:by,routeNotice:xy,placeList:Cy,placeCard:jy,placeCardCurrent:_y,placeCardTop:Ey,placeCardName:Ty,placeCardBadge:My,placeCardBadgeActive:Ly,placeCardBadgeInactive:Dy,placeCardMeta:Oy,actions:zy,iconButton:Ay,changeButton:Ny};function Id(a){if(!a)return"";const i=a.split(/[\\/]/).filter(Boolean);return i[i.length-1]??""}function Iy(a){var c,d;const i=((c=a==null?void 0:a.mcpInstances)==null?void 0:c.filter(p=>!p.isServer&&p.aiClientName))??[];if(i.length===0){const p=((d=a==null?void 0:a.mcpInstances)==null?void 0:d.find(f=>!!f.aiClientName))??null;return(p==null?void 0:p.projectRoot)??(p==null?void 0:p.cwd)??null}i.sort((p,f)=>(f.lastCommandAt??f.connectedAt)-(p.lastCommandAt??p.connectedAt));const s=i[0];return s.projectRoot??s.cwd??null}function Fy(a,i,s){return a??i??s}function By(a){const i=a.replace(/^\//,"").split("/")[0];return i===""||i==="overview"}function Uy(a){return a.replace(/^\//,"").split("/")[0]==="sync"}function Wy(a){return a.replace(/^\//,"").split("/")[0]==="playtest"}function Hy(a){return a.replace(/^\//,"").split("/")[0]==="changelog"}function Fd(a,i){if(a&&typeof a=="object"&&"message"in a&&typeof a.message=="string"){const s=a.message.trim();if(s.length>0)return s}return i}function Vy(){var lo,Mt,Mn,so;const{pathname:a}=Do(),{level:i,status:s}=Ds(),{t:c}=Ci(),{show:d}=pp(),[p,f]=T.useState(null),[m,h]=T.useState(null),[S,b]=T.useState(null),[x,M]=T.useState(!1),[I,H]=T.useState(null),[F,W]=T.useState(null),[ge,X]=T.useState(!1),[ue,re]=T.useState(!1),[be,_e]=T.useState(null),_=c("header.placeNotConnected","Place not connected"),Y=By(a),ke=Uy(a),ie=Wy(a),Ue=Hy(a);T.useEffect(()=>{let me=!1;async function Ze(){if(i==="disconnected"){f(null);return}try{const at=await fn.get("/connection-info");me||f(at)}catch{me||f(null)}}return Ze(),()=>{me=!0}},[i,s==null?void 0:s.sessionId,s==null?void 0:s.connectedClients]),T.useEffect(()=>{let me=!1;async function Ze(){if(i==="disconnected"){h(null),M(!1);return}h(null),M(!1);try{const at=await Jm();me||(h(at),M(!1))}catch{me||(h(null),M(!0))}}return Ze(),()=>{me=!0}},[Y,i,s==null?void 0:s.sessionId,s==null?void 0:s.connectedClients]),T.useEffect(()=>{let me=!1;async function Ze(){if(i==="disconnected"){b(null);return}try{const at=await Ym();me||b(at)}catch{me||b(null)}}return Ze(),()=>{me=!0}},[i,s==null?void 0:s.sessionId,s==null?void 0:s.connectedClients]);const Te=Iy(p)??"",pe=i==="disconnected"?"blocked":m?"ready":x?"error":"loading",We=pe==="ready"?(m==null?void 0:m.projectRoot)??"":pe==="loading"?c("header.currentProject.loading","Loading project root..."):c("header.currentProject.unavailable","Project root unavailable"),Ge=pe==="ready"?(m==null?void 0:m.projectRoot)??"":Y?"":Te,tt=Y||pe==="ready"?pe==="ready"?Id(Ge)||c("header.unknownProject","Unknown project"):pe==="loading"?c("header.currentProject.loading","Loading project root..."):c("header.currentProject.unavailable","Project root unavailable"):Id(Ge)||c("header.unknownProject","Unknown project"),Ae=Fy((Mt=(lo=s==null?void 0:s.pluginClients)==null?void 0:lo[0])==null?void 0:Mt.placeName,(so=(Mn=s==null?void 0:s.pluginClients)==null?void 0:Mn[0])==null?void 0:so.projectName,_),B=Ae===_?c("header.placeNotConnected.tooltip","Place not connected"):c("header.place.tooltip","Connected Roblox place"),oe=S!=null&&S.pluginConnected?S.activePlaceId:(S==null?void 0:S.lastActivePlaceId)??null,q=[...(S==null?void 0:S.places)??[]].sort((me,Ze)=>{const at=me.placeId===oe,co=Ze.placeId===oe;return at!==co?at?-1:1:me.isConnected!==Ze.isConnected?me.isConnected?-1:1:me.placeName.localeCompare(Ze.placeName)}),k=q.find(me=>me.placeId===oe)??null,L=Y?pe==="loading"?c("header.currentProject.loading.tooltip","Project root information is still loading"):pe==="error"?c("header.currentProject.unavailable.tooltip","Current project root information is unavailable"):c("header.currentProject.tooltip","Currently selected project folder"):c("header.currentProject.tooltip","Currently selected project folder"),de=pe==="ready"?(m==null?void 0:m.projectSyncRoot)??"":pe==="loading"?c("header.currentProjectSyncRoot.loading","Loading sync root..."):c("header.currentProjectSyncRoot.unavailable","Sync root unavailable"),ye=pe==="loading"?c("header.currentProjectSyncRoot.loading.tooltip","Sync root information is still loading"):pe==="error"?c("header.currentProjectSyncRoot.unavailable.tooltip","Current sync root information is unavailable"):c("header.currentProjectSyncRoot.tooltip","Current sync root folder for the selected project"),he=pe==="ready"?(k==null?void 0:k.testsPath)??c("header.testFiles.unavailable","Test files unavailable"):pe==="loading"?c("header.currentProjectSyncRoot.loading","Loading sync root..."):c("header.testFiles.unavailable","Test files unavailable"),Se=pe==="ready"?c("header.testFiles.tooltip","Current playtest files directory for the selected place"):pe==="loading"?c("header.currentProjectSyncRoot.loading.tooltip","Sync root information is still loading"):c("header.currentProjectSyncRoot.unavailable.tooltip","Current sync root information is unavailable"),we=ke?{label:c("header.currentProjectSyncRoot.label","Sync Root"),value:de,tooltip:ye}:ie?{label:c("header.testFiles.label","Test Files"),value:he,tooltip:Se}:null,Ce=(ke||ie||Ue)&&(S==null?void 0:S.pluginConnected)===!1,Ne=i==="disconnected"||pe!=="ready",ft=i==="disconnected"?c("header.changeProjectRoot.disabledTooltip.l0","MCP server connection required before project root can be changed"):pe==="loading"?c("header.changeProjectRoot.disabledTooltip.loading","Project root information is still loading"):pe==="error"?c("header.changeProjectRoot.disabledTooltip.unavailable","Current project root information is unavailable"):c("header.changeProjectRoot.tooltip","Change the current project root"),tn=(me=!1)=>{!me&&(ge||ue)||(H(null),W(null),_e(null))},ot=()=>{Ne||(_e(null),W(null),H("initial"))},Tt=async()=>{X(!0),_e(null);try{const me=await Zm();if(me.cancelled||!me.projectRoot){tn(!0);return}W(me.projectRoot),H("confirm")}catch(me){_e(Fd(me,c("header.projectRootModal.error","Failed to change project root")))}finally{X(!1)}},Tn=async()=>{if(F){re(!0),_e(null);try{const me=await ey(F);h(me),M(!1),tn(!0)}catch(me){const Ze=Fd(me,c("header.projectRootModal.error","Failed to change project root"));_e(Ze),d(Ze,"error")}finally{re(!1)}}};return A.jsxs(A.Fragment,{children:[A.jsxs("header",{className:ze.header,children:[A.jsxs("div",{className:ze.projectBlock,children:[A.jsx("span",{className:ze.label,children:c("header.currentProject","Current Project")}),A.jsxs("div",{className:ze.projectTitleRow,children:[A.jsx("strong",{className:ze.projectName,children:A.jsx(hi,{text:L,children:tt})}),A.jsx("div",{className:ze.projectActions,children:A.jsx(Ri,{text:ft,children:A.jsx("span",{children:A.jsx("button",{type:"button",className:ze.changeButton,onClick:ot,disabled:Ne,children:c("header.changeProjectRoot","Change Project Root")})})})})]}),A.jsxs("span",{className:ze.projectMetaRow,children:[A.jsx(hi,{text:c("header.currentProject.tooltip","Currently selected project folder"),children:A.jsx("span",{className:ze.projectMetaLabel,children:c("header.projectRoot.label","Project Root")})}),A.jsx("span",{className:ze.projectMetaValue,children:We})]}),we?A.jsxs("span",{className:ze.projectMetaRow,children:[A.jsx(hi,{text:we.tooltip,children:A.jsx("span",{className:ze.projectMetaLabel,children:we.label})}),A.jsx("span",{className:ze.projectMetaValue,children:we.value})]}):null,A.jsxs("div",{className:ze.placeSection,children:[A.jsxs("div",{className:ze.placeSectionHeader,children:[A.jsx("span",{className:ze.projectMetaLabel,children:c("header.places.title","Places")}),S!=null&&S.pluginConnected?null:A.jsx("span",{className:ze.placeNotice,children:c("header.places.pluginRequired","Plugin connection required")})]}),A.jsx("div",{className:ze.placeList,children:q.length>0?q.map(me=>{const Ze=me.placeId===oe,at=S!=null&&S.pluginConnected&&me.isConnected?c("header.places.active","Active"):c("header.places.inactive","Inactive");return A.jsxs("div",{className:[ze.placeCard,Ze?ze.placeCardCurrent:""].filter(Boolean).join(" "),title:`${me.placeName} (${at})`,children:[A.jsxs("div",{className:ze.placeCardTop,children:[A.jsx("span",{className:ze.placeCardName,children:me.placeName}),A.jsx("span",{className:[ze.placeCardBadge,S!=null&&S.pluginConnected&&me.isConnected?ze.placeCardBadgeActive:ze.placeCardBadgeInactive].join(" "),children:at})]}),A.jsx("div",{className:ze.placeCardMeta,children:`place_${me.placeId}`})]},`${me.placeId}:${me.placeDirName}`)}):A.jsx(hi,{text:B,children:A.jsxs("span",{className:[ze.placeBadge,Ae===_?ze.placeBadgeMuted:""].filter(Boolean).join(" "),children:[A.jsx("span",{className:ze.placeIcon,children:"🎮"}),A.jsx("span",{children:Ae})]})})}),Ce?A.jsx("div",{className:ze.routeNotice,children:c("header.places.liveRequired","Plugin connection required for live active place")}):null]})]}),A.jsx("div",{className:ze.actions,children:A.jsx(Ri,{text:c("sidebar.settings","Settings"),children:A.jsx(sp,{to:"/settings","aria-label":c("sidebar.settings","Settings"),className:ze.iconButton,children:"⚙️"})})})]}),A.jsx(cy,{open:I!==null,step:I??"initial",selectedProjectRoot:F,studioConnected:i==="studioConnected",loading:ge||ue,errorMessage:be,onClose:tn,onPick:Tt,onApply:Tn})]})}const qy=5e3,Xy=5;let sa=[],Bd=null;function mp(){if(sa.length===0)return;const a=sa.splice(0),i=`${xi}/api/dashboard/analytics`,s=JSON.stringify({events:a});fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:s}).catch(()=>{})}function Ky(){Bd||(Bd=setInterval(mp,qy))}function Ud(a){sa.push(a),Ky(),sa.length>=Xy&&mp()}typeof window<"u"&&window.addEventListener("beforeunload",()=>{if(sa.length===0)return;const a=`${xi}/api/dashboard/analytics`,i=JSON.stringify({events:sa.splice(0)});navigator.sendBeacon(a,new Blob([i],{type:"application/json"}))});function $y(){const a=T.useCallback((s,c)=>{Ud({name:s,params:c})},[]),i=T.useCallback(s=>{Ud({name:"dashboard_page_view",params:{page:s}})},[]);return{trackEvent:a,trackPageView:i}}const Qy="_layout_ya8ln_2",Gy="_mainShell_ya8ln_8",Yy="_content_ya8ln_17",Jy="_loading_ya8ln_25",mi={layout:Qy,mainShell:Gy,content:Yy,loading:Jy};function Zy(a){return a.replace(/^\//,"").split("/")[0]||"overview"}function ev(){const{pathname:a}=Do(),{trackPageView:i}=$y();return T.useEffect(()=>{i(Zy(a))},[a,i]),null}function tv(){return A.jsx(ym,{children:A.jsx(Cm,{children:A.jsxs(sm,{children:[A.jsx(jm,{}),A.jsx(ev,{}),A.jsxs("div",{className:mi.layout,children:[A.jsx(Gm,{}),A.jsxs("div",{className:mi.mainShell,children:[A.jsx(Vy,{}),A.jsx("main",{className:mi.content,children:A.jsx(T.Suspense,{fallback:A.jsx("div",{className:mi.loading,children:"Loading..."}),children:A.jsx(_h,{})})})]})]})]})})})}function nv(a){return a.route==="/"?{index:!0,lazy:a.lazy}:{path:a.route.slice(1),lazy:a.lazy}}const ov=Ah([{path:"/",element:A.jsx(tv,{}),children:[...hp.map(nv),{path:"changelog/:id",lazy:()=>oo(()=>import("./ChangelogDetailPage-D7eMrarv.js"),__vite__mapDeps([24,1,4,5,25]))},{path:"settings",lazy:()=>oo(()=>import("./SettingsPage-CPqQYZPN.js"),__vite__mapDeps([26,1,27]))}]}]);sg.createRoot(document.getElementById("root")).render(A.jsx(Vh,{router:ov}));export{Mo as A,zm as D,hm as S,hi as T,fn as a,rv as b,dh as c,Ds as d,iv as e,Om as f,lv as g,sv as h,pp as i,A as j,$y as k,Do as l,Ri as m,T as r,pn as s,Ci as u};