@design-llm/motion 1.0.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.
- package/README.md +54 -0
- package/dist/index.cjs +9 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +1155 -0
- package/dist/index.js.map +1 -0
- package/dist/vite.svg +1 -0
- package/package.json +71 -0
package/README.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Motion Component Library (动效组件展示平台)
|
|
2
|
+
|
|
3
|
+
## 🧩 核心同步协议 (Mandatory)
|
|
4
|
+
|
|
5
|
+
1. **原子更新规则**: 任何功能、架构、写法更新,必须在代码修改完成后,[立即] 同步更新对应目录的子文档。
|
|
6
|
+
2. **递归触发**: 文件变更 -> 更新文件Header -> 更新所属文件夹MD -> (若影响全局) 更新主MD。
|
|
7
|
+
3. **分形自治**: 确保系统在任何一个子目录下,Agent都能通过该目录的MD重建局部世界观。
|
|
8
|
+
|
|
9
|
+
## 🎯 项目使命
|
|
10
|
+
|
|
11
|
+
类似 Reactbits 的动效组件库展示网站,用户可以直接查看动效演示并切换查看源代码。
|
|
12
|
+
|
|
13
|
+
## 🏗️ 顶层架构
|
|
14
|
+
|
|
15
|
+
- `/src/core`: 核心展示框架(ComponentWrapper、CodeViewer 等可复用基础设施)
|
|
16
|
+
- `/src/components`: 动效组件库(所有可展示的动效组件)
|
|
17
|
+
- `/src`: 主应用入口(App.jsx 作为网格布局主页)
|
|
18
|
+
|
|
19
|
+
## 🛠️ 技术栈
|
|
20
|
+
|
|
21
|
+
- **框架**: React 19.2 + Vite 7.2
|
|
22
|
+
- **样式**: Tailwind CSS(所有组件高度依赖 Tailwind 类名)
|
|
23
|
+
- **动效**: Framer Motion(实现复杂动效)
|
|
24
|
+
- **代码高亮**: react-syntax-highlighter
|
|
25
|
+
- **图标**: @ali/qoder-icon(待安装)
|
|
26
|
+
|
|
27
|
+
## 📦 核心特性
|
|
28
|
+
|
|
29
|
+
1. **Component Preview Card**: 卡片容器展示动效组件实时预览
|
|
30
|
+
2. **Code View**: 深色主题代码展示,支持复制
|
|
31
|
+
3. **Responsive Grid**: 响应式网格布局展示所有组件
|
|
32
|
+
4. **易于扩展**: 通过 ComponentWrapper 包裹新组件即可添加
|
|
33
|
+
|
|
34
|
+
## 🚀 开发命令
|
|
35
|
+
|
|
36
|
+
- `npm run dev` - 启动开发服务器 (Vite, 端口3000)
|
|
37
|
+
- `npm run build` - 构建生产版本
|
|
38
|
+
- `npm run preview` - 预览生产构建
|
|
39
|
+
- `npm run lint` - 代码检查
|
|
40
|
+
|
|
41
|
+
## 📂 目录结构
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
/src
|
|
45
|
+
├── core/ # 核心框架组件
|
|
46
|
+
├── components/ # 动效组件库
|
|
47
|
+
├── App.jsx # 主应用(网格布局)
|
|
48
|
+
├── main.jsx # 应用入口
|
|
49
|
+
└── index.css # 全局样式(Tailwind)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## ⚠️ 触发器
|
|
53
|
+
|
|
54
|
+
一旦项目架构、技术栈或核心特性发生变化,必须立即更新此 README.md。
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const H=require("react"),q=require("framer-motion"),oe=require("gsap");var ue={exports:{}},Q={};var Ce;function Me(){if(Ce)return Q;Ce=1;var e=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function t(D,n,d){var o=null;if(d!==void 0&&(o=""+d),n.key!==void 0&&(o=""+n.key),"key"in n){d={};for(var i in n)i!=="key"&&(d[i]=n[i])}else d=n;return n=d.ref,{$$typeof:e,type:D,key:o,ref:n!==void 0?n:null,props:d}}return Q.Fragment=r,Q.jsx=t,Q.jsxs=t,Q}var K={};var me;function We(){return me||(me=1,process.env.NODE_ENV!=="production"&&(function(){function e(u){if(u==null)return null;if(typeof u=="function")return u.$$typeof===Y?null:u.displayName||u.name||null;if(typeof u=="string")return u;switch(u){case $:return"Fragment";case M:return"Profiler";case W:return"StrictMode";case w:return"Suspense";case O:return"SuspenseList";case _:return"Activity"}if(typeof u=="object")switch(typeof u.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),u.$$typeof){case T:return"Portal";case v:return u.displayName||"Context";case k:return(u._context.displayName||"Context")+".Consumer";case m:var l=u.render;return u=u.displayName,u||(u=l.displayName||l.name||"",u=u!==""?"ForwardRef("+u+")":"ForwardRef"),u;case f:return l=u.displayName||null,l!==null?l:e(u.type)||"Memo";case A:l=u._payload,u=u._init;try{return e(u(l))}catch{}}return null}function r(u){return""+u}function t(u){try{r(u);var l=!1}catch{l=!0}if(l){l=console;var E=l.error,j=typeof Symbol=="function"&&Symbol.toStringTag&&u[Symbol.toStringTag]||u.constructor.name||"Object";return E.call(l,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",j),r(u)}}function D(u){if(u===$)return"<>";if(typeof u=="object"&&u!==null&&u.$$typeof===A)return"<...>";try{var l=e(u);return l?"<"+l+">":"<...>"}catch{return"<...>"}}function n(){var u=F.A;return u===null?null:u.getOwner()}function d(){return Error("react-stack-top-frame")}function o(u){if(x.call(u,"key")){var l=Object.getOwnPropertyDescriptor(u,"key").get;if(l&&l.isReactWarning)return!1}return u.key!==void 0}function i(u,l){function E(){P||(P=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",l))}E.isReactWarning=!0,Object.defineProperty(u,"key",{get:E,configurable:!0})}function a(){var u=e(this.type);return L[u]||(L[u]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),u=this.props.ref,u!==void 0?u:null}function c(u,l,E,j,z,ne){var I=E.ref;return u={$$typeof:B,type:u,key:l,props:E,_owner:j},(I!==void 0?I:null)!==null?Object.defineProperty(u,"ref",{enumerable:!1,get:a}):Object.defineProperty(u,"ref",{enumerable:!1,value:null}),u._store={},Object.defineProperty(u._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(u,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(u,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:z}),Object.defineProperty(u,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:ne}),Object.freeze&&(Object.freeze(u.props),Object.freeze(u)),u}function p(u,l,E,j,z,ne){var I=l.children;if(I!==void 0)if(j)if(R(I)){for(j=0;j<I.length;j++)h(I[j]);Object.freeze&&Object.freeze(I)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else h(I);if(x.call(l,"key")){I=e(u);var G=Object.keys(l).filter(function(Le){return Le!=="key"});j=0<G.length?"{key: someKey, "+G.join(": ..., ")+": ...}":"{key: someKey}",y[I+j]||(G=0<G.length?"{"+G.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
2
|
+
let props = %s;
|
|
3
|
+
<%s {...props} />
|
|
4
|
+
React keys must be passed directly to JSX without using spread:
|
|
5
|
+
let props = %s;
|
|
6
|
+
<%s key={someKey} {...props} />`,j,I,G,I),y[I+j]=!0)}if(I=null,E!==void 0&&(t(E),I=""+E),o(l)&&(t(l.key),I=""+l.key),"key"in l){E={};for(var ae in l)ae!=="key"&&(E[ae]=l[ae])}else E=l;return I&&i(E,typeof u=="function"?u.displayName||u.name||"Unknown":u),c(u,I,E,n(),z,ne)}function h(u){C(u)?u._store&&(u._store.validated=1):typeof u=="object"&&u!==null&&u.$$typeof===A&&(u._payload.status==="fulfilled"?C(u._payload.value)&&u._payload.value._store&&(u._payload.value._store.validated=1):u._store&&(u._store.validated=1))}function C(u){return typeof u=="object"&&u!==null&&u.$$typeof===B}var g=H,B=Symbol.for("react.transitional.element"),T=Symbol.for("react.portal"),$=Symbol.for("react.fragment"),W=Symbol.for("react.strict_mode"),M=Symbol.for("react.profiler"),k=Symbol.for("react.consumer"),v=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),w=Symbol.for("react.suspense"),O=Symbol.for("react.suspense_list"),f=Symbol.for("react.memo"),A=Symbol.for("react.lazy"),_=Symbol.for("react.activity"),Y=Symbol.for("react.client.reference"),F=g.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,x=Object.prototype.hasOwnProperty,R=Array.isArray,b=console.createTask?console.createTask:function(){return null};g={react_stack_bottom_frame:function(u){return u()}};var P,L={},S=g.react_stack_bottom_frame.bind(g,d)(),N=b(D(d)),y={};K.Fragment=$,K.jsx=function(u,l,E){var j=1e4>F.recentlyCreatedOwnerStacks++;return p(u,l,E,!1,j?Error("react-stack-top-frame"):S,j?b(D(u)):N)},K.jsxs=function(u,l,E){var j=1e4>F.recentlyCreatedOwnerStacks++;return p(u,l,E,!0,j?Error("react-stack-top-frame"):S,j?b(D(u)):N)}})()),K}var Fe;function $e(){return Fe||(Fe=1,process.env.NODE_ENV==="production"?ue.exports=Me():ue.exports=We()),ue.exports}var s=$e();const Ye=()=>s.jsx(q.motion.div,{className:"relative w-72 h-96 rounded-2xl p-[2px] cursor-pointer group",style:{background:"linear-gradient(90deg, #667eea 0%, #764ba2 50%, #f093fb 100%)",backgroundSize:"200% 100%"},animate:{backgroundPosition:["0% 50%","100% 50%","0% 50%"]},transition:{duration:3,repeat:1/0,ease:"linear"},whileHover:{scale:1.05,y:-10},children:s.jsxs("div",{className:"w-full h-full bg-gray-900 rounded-2xl flex flex-col items-center justify-center p-8 relative overflow-hidden",children:[s.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-indigo-500/20 via-transparent to-purple-500/20 opacity-0 group-hover:opacity-100 transition-opacity duration-500"}),s.jsxs("div",{className:"relative z-10 text-center",children:[s.jsx("div",{className:"w-20 h-20 mx-auto mb-6 rounded-full bg-gradient-to-br from-indigo-400 to-purple-500 flex items-center justify-center text-4xl animate-float",children:"✨"}),s.jsx("h4",{className:"text-2xl font-bold text-white mb-3",children:"流光卡片"}),s.jsxs("p",{className:"text-gray-400 text-sm leading-relaxed",children:["悬停查看动态效果",s.jsx("br",{}),"渐变边框 + 浮动动画"]})]}),s.jsx("div",{className:"absolute bottom-0 left-0 right-0 h-1 bg-gradient-to-r from-transparent via-indigo-500 to-transparent opacity-50"})]})}),He=()=>{const e={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:.1}}},r={hidden:{y:50,opacity:0},visible:{y:0,opacity:1,transition:{type:"spring",bounce:.5,duration:.8}}},t=["开始使用","查看文档","示例代码","关于我们"];return s.jsx(q.motion.div,{className:"flex flex-wrap gap-4 justify-center",variants:e,initial:"hidden",animate:"visible",children:t.map((D,n)=>s.jsx(q.motion.button,{variants:r,whileHover:{scale:1.05},whileTap:{scale:.95},className:"px-6 py-3 bg-gradient-to-r from-pink-500 to-orange-500 text-white font-semibold rounded-lg shadow-lg hover:shadow-xl transition-shadow",children:D},n))})},Ve=(e,r)=>{const t=new Set([...Object.keys(e),...r.flatMap(n=>Object.keys(n))]),D={};return t.forEach(n=>{D[n]=[e[n],...r.map(d=>d[n])]}),D},ge=({text:e="",delay:r=200,className:t="",animateBy:D="words",direction:n="top",threshold:d=.1,rootMargin:o="0px",animationFrom:i,animationTo:a,easing:c=C=>C,onAnimationComplete:p,stepDuration:h=.35})=>{const C=D==="words"?e.split(" "):e.split(""),[g,B]=H.useState(!1),T=H.useRef(null);H.useEffect(()=>{if(!T.current)return;const O=new IntersectionObserver(([f])=>{f.isIntersecting&&(B(!0),O.unobserve(T.current))},{threshold:d,rootMargin:o});return O.observe(T.current),()=>O.disconnect()},[d,o]);const $=H.useMemo(()=>n==="top"?{filter:"blur(10px)",opacity:0,y:-50}:{filter:"blur(10px)",opacity:0,y:50},[n]),W=H.useMemo(()=>[{filter:"blur(5px)",opacity:.5,y:n==="top"?5:-5},{filter:"blur(0px)",opacity:1,y:0}],[n]),M=i??$,k=a??W,v=k.length+1,m=h*(v-1),w=Array.from({length:v},(O,f)=>v===1?0:f/(v-1));return s.jsx("p",{ref:T,className:`blur-text ${t} flex flex-wrap`,children:C.map((O,f)=>{const A=Ve(M,k),_={duration:m,times:w,delay:f*r/1e3};return _.ease=c,s.jsxs(q.motion.span,{className:"inline-block will-change-[transform,filter,opacity]",initial:M,animate:g?A:M,transition:_,onAnimationComplete:f===C.length-1?p:void 0,children:[O===" "?" ":O,D==="words"&&f<C.length-1&&" "]},f)})})},qe=()=>s.jsxs("div",{className:"space-y-8 max-w-2xl",children:[s.jsx(ge,{text:"Isn't this so cool?!",className:"text-4xl font-bold text-white",delay:100,animateBy:"words",direction:"top"}),s.jsx(ge,{text:"逐字显示的中文文本动画效果",className:"text-3xl font-semibold text-indigo-400",delay:50,animateBy:"characters",direction:"top"})]}),ze=(e,r,t=!0)=>({from:r,to:r+360,ease:"linear",duration:e,type:"tween",repeat:t?1/0:0}),J=(e,r)=>({rotate:ze(e,r),scale:{type:"spring",damping:20,stiffness:300}}),Ee=({text:e,spinDuration:r=20,onHover:t="speedUp",className:D=""})=>{const n=Array.from(e),d=q.useAnimation(),o=q.useMotionValue(0);H.useEffect(()=>{const c=o.get();d.start({rotate:c+360,scale:1,transition:J(r,c)})},[r,e,t,d,o]);const i=()=>{const c=o.get();if(!t)return;let p,h=1;switch(t){case"slowDown":p=J(r*2,c);break;case"speedUp":p=J(r/4,c);break;case"pause":p={rotate:{type:"spring",damping:20,stiffness:300},scale:{type:"spring",damping:20,stiffness:300}},h=1;break;case"goBonkers":p=J(r/20,c),h=.8;break;default:p=J(r,c)}d.start({rotate:c+360,scale:h,transition:p})},a=()=>{const c=o.get();d.start({rotate:c+360,scale:1,transition:J(r,c)})};return s.jsx(q.motion.div,{className:`m-0 mx-auto rounded-full w-[200px] h-[200px] relative text-white font-black text-center cursor-pointer origin-center ${D}`,style:{rotate:o},initial:{rotate:0},animate:d,onMouseEnter:i,onMouseLeave:a,children:n.map((c,p)=>{const h=360/n.length*p,C=Math.PI/n.length,g=C*p,B=C*p,T=`rotateZ(${h}deg) translate3d(${g}px, ${B}px, 0)`;return s.jsx("span",{className:"absolute inline-block inset-0 text-2xl transition-all duration-500 ease-[cubic-bezier(0,0,0,1)]",style:{transform:T,WebkitTransform:T},children:c},p)})})},Ue=()=>s.jsxs("div",{className:"flex flex-col items-center gap-12",children:[s.jsxs("div",{className:"text-center space-y-4",children:[s.jsx(Ee,{text:"REACT • FRAMER • MOTION • ",spinDuration:15,onHover:"speedUp"}),s.jsx("p",{className:"text-gray-400 text-sm",children:"悬浮加速效果"})]}),s.jsxs("div",{className:"text-center space-y-4",children:[s.jsx(Ee,{text:"TAILWIND • CSS • VITE • ",spinDuration:12,onHover:"pause",className:"text-indigo-400"}),s.jsx("p",{className:"text-gray-400 text-sm",children:"悬浮暂停效果"})]})]});let ee,X,xe=typeof Symbol=="function"?Symbol():"_split",le,Ge=()=>le||he.register(window.gsap),be=typeof Intl<"u"&&"Segmenter"in Intl?new Intl.Segmenter:0,te=e=>typeof e=="string"?te(document.querySelectorAll(e)):"length"in e?Array.from(e).reduce((r,t)=>(typeof t=="string"?r.push(...te(t)):r.push(t),r),[]):[e],ye=e=>te(e).filter(r=>r instanceof HTMLElement),ce=[],ie=function(){},Je={add:e=>e()},Xe=/\s+/g,ve=new RegExp("\\p{RI}\\p{RI}|\\p{Emoji}(\\p{EMod}|\\u{FE0F}\\u{20E3}?|[\\u{E0020}-\\u{E007E}]+\\u{E007F})?(\\u{200D}\\p{Emoji}(\\p{EMod}|\\u{FE0F}\\u{20E3}?|[\\u{E0020}-\\u{E007E}]+\\u{E007F})?)*|.","gu"),De={left:0,top:0,width:0,height:0},Ze=(e,r)=>{for(;++r<e.length&&e[r]===De;);return e[r]||De},we=({element:e,html:r,ariaL:t,ariaH:D})=>{e.innerHTML=r,t?e.setAttribute("aria-label",t):e.removeAttribute("aria-label"),D?e.setAttribute("aria-hidden",D):e.removeAttribute("aria-hidden")},Ae=(e,r)=>{if(r){let t=new Set(e.join("").match(r)||ce),D=e.length,n,d,o,i;if(t.size)for(;--D>-1;){d=e[D];for(o of t)if(o.startsWith(d)&&o.length>d.length){for(n=0,i=d;o.startsWith(i+=e[D+ ++n])&&i.length<o.length;);if(n&&i.length===o.length){e[D]=o,e.splice(D+1,n);break}}}}return e},je=e=>window.getComputedStyle(e).display==="inline"&&(e.style.display="inline-block"),Z=(e,r,t)=>r.insertBefore(typeof e=="string"?document.createTextNode(e):e,t),de=(e,r,t)=>{let D=r[e+"sClass"]||"",{tag:n="div",aria:d="auto",propIndex:o=!1}=r,i=e==="line"?"block":"inline-block",a=D.indexOf("++")>-1,c=p=>{let h=document.createElement(n),C=t.length+1;return D&&(h.className=D+(a?" "+D+C:"")),o&&h.style.setProperty("--"+e,C+""),d!=="none"&&h.setAttribute("aria-hidden","true"),n!=="span"&&(h.style.position="relative",h.style.display=i),h.textContent=p,t.push(h),h};return a&&(D=D.replace("++","")),c.collection=t,c},Qe=(e,r,t,D)=>{let n=de("line",t,D),d=window.getComputedStyle(e).textAlign||"left";return(o,i)=>{let a=n("");for(a.style.textAlign=d,e.insertBefore(a,r[o]);o<i;o++)a.appendChild(r[o]);a.normalize()}},ke=(e,r,t,D,n,d,o,i,a,c)=>{var p;let h=Array.from(e.childNodes),C=0,{wordDelimiter:g,reduceWhiteSpace:B=!0,prepareText:T}=r,$=e.getBoundingClientRect(),W=$,M=!B&&window.getComputedStyle(e).whiteSpace.substring(0,3)==="pre",k=0,v=t.collection,m,w,O,f,A,_,Y,F,x,R,b,P,L,S,N,y,u,l;for(typeof g=="object"?(O=g.delimiter||g,w=g.replaceWith||""):w=g===""?"":g||" ",m=w!==" ";C<h.length;C++)if(f=h[C],f.nodeType===3){for(N=f.textContent||"",B?N=N.replace(Xe," "):M&&(N=N.replace(/\n/g,w+`
|
|
7
|
+
`)),T&&(N=T(N,e)),f.textContent=N,A=w||O?N.split(O||w):N.match(i)||ce,u=A[A.length-1],F=m?u.slice(-1)===" ":!u,u||A.pop(),W=$,Y=m?A[0].charAt(0)===" ":!A[0],Y&&Z(" ",e,f),A[0]||A.shift(),Ae(A,a),d&&c||(f.textContent=""),x=1;x<=A.length;x++)if(y=A[x-1],!B&&M&&y.charAt(0)===`
|
|
8
|
+
`&&((p=f.previousSibling)==null||p.remove(),Z(document.createElement("br"),e,f),y=y.slice(1)),!B&&y==="")Z(w,e,f);else if(y===" ")e.insertBefore(document.createTextNode(" "),f);else{if(m&&y.charAt(0)===" "&&Z(" ",e,f),k&&x===1&&!Y&&v.indexOf(k.parentNode)>-1?(_=v[v.length-1],_.appendChild(document.createTextNode(D?"":y))):(_=t(D?"":y),Z(_,e,f),k&&x===1&&!Y&&_.insertBefore(k,_.firstChild)),D)for(b=be?Ae([...be.segment(y)].map(E=>E.segment),a):y.match(i)||ce,l=0;l<b.length;l++)_.appendChild(b[l]===" "?document.createTextNode(" "):D(b[l]));if(d&&c){if(N=f.textContent=N.substring(y.length+1,N.length),R=_.getBoundingClientRect(),R.top>W.top&&R.left<=W.left){for(P=e.cloneNode(),L=e.childNodes[0];L&&L!==_;)S=L,L=L.nextSibling,P.appendChild(S);e.parentNode.insertBefore(P,e),n&&je(P)}W=R}(x<A.length||F)&&Z(x>=A.length?" ":m&&y.slice(-1)===" "?" "+w:w,e,f)}e.removeChild(f),k=0}else f.nodeType===1&&(o&&o.indexOf(f)>-1?(v.indexOf(f.previousSibling)>-1&&v[v.length-1].appendChild(f),k=f):(ke(f,r,t,D,n,d,o,i,a,!0),k=0),n&&je(f))};const Re=class Oe{constructor(r,t){this.isSplit=!1,Ge(),this.elements=ye(r),this.chars=[],this.words=[],this.lines=[],this.masks=[],this.vars=t,this.elements.forEach(o=>{var i;t.overwrite!==!1&&((i=o[xe])==null||i._data.orig.filter(({element:a})=>a===o).forEach(we)),o[xe]=this}),this._split=()=>this.isSplit&&this.split(this.vars);let D=[],n,d=()=>{let o=D.length,i;for(;o--;){i=D[o];let a=i.element.offsetWidth;if(a!==i.width){i.width=a,this._split();return}}};this._data={orig:D,obs:typeof ResizeObserver<"u"&&new ResizeObserver(()=>{clearTimeout(n),n=setTimeout(d,200)})},ie(this),this.split(t)}split(r){return(this._ctx||Je).add(()=>{this.isSplit&&this.revert(),this.vars=r=r||this.vars||{};let{type:t="chars,words,lines",aria:D="auto",deepSlice:n=!0,smartWrap:d,onSplit:o,autoSplit:i=!1,specialChars:a,mask:c}=this.vars,p=t.indexOf("lines")>-1,h=t.indexOf("chars")>-1,C=t.indexOf("words")>-1,g=h&&!C&&!p,B=a&&("push"in a?new RegExp("(?:"+a.join("|")+")","gu"):a),T=B?new RegExp(B.source+"|"+ve.source,"gu"):ve,$=!!r.ignore&&ye(r.ignore),{orig:W,animTime:M,obs:k}=this._data,v;(h||C||p)&&(this.elements.forEach((m,w)=>{W[w]={element:m,html:m.innerHTML,ariaL:m.getAttribute("aria-label"),ariaH:m.getAttribute("aria-hidden")},D==="auto"?m.setAttribute("aria-label",(m.textContent||"").trim()):D==="hidden"&&m.setAttribute("aria-hidden","true");let O=[],f=[],A=[],_=h?de("char",r,O):null,Y=de("word",r,f),F,x,R,b;if(ke(m,r,Y,_,g,n&&(p||g),$,T,B,!1),p){let P=te(m.childNodes),L=Qe(m,P,r,A),S,N=[],y=0,u=P.map(j=>j.nodeType===1?j.getBoundingClientRect():De),l=De,E;for(F=0;F<P.length;F++)S=P[F],S.nodeType===1&&(S.nodeName==="BR"?((!F||P[F-1].nodeName!=="BR")&&(N.push(S),L(y,F+1)),y=F+1,l=Ze(u,F)):(E=u[F],F&&E.top>l.top&&E.left<l.left+l.width-1&&(L(y,F),y=F),l=E));y<F&&L(y,F),N.forEach(j=>{var z;return(z=j.parentNode)==null?void 0:z.removeChild(j)})}if(!C){for(F=0;F<f.length;F++)if(x=f[F],h||!x.nextSibling||x.nextSibling.nodeType!==3)if(d&&!p){for(R=document.createElement("span"),R.style.whiteSpace="nowrap";x.firstChild;)R.appendChild(x.firstChild);x.replaceWith(R)}else x.replaceWith(...x.childNodes);else b=x.nextSibling,b&&b.nodeType===3&&(b.textContent=(x.textContent||"")+(b.textContent||""),x.remove());f.length=0,m.normalize()}this.lines.push(...A),this.words.push(...f),this.chars.push(...O)}),c&&this[c]&&this.masks.push(...this[c].map(m=>{let w=m.cloneNode();return m.replaceWith(w),w.appendChild(m),m.className&&(w.className=m.className.trim()+"-mask"),w.style.overflow="clip",w}))),this.isSplit=!0,X&&p&&(i?X.addEventListener("loadingdone",this._split):X.status==="loading"&&console.warn("SplitText called before fonts loaded")),(v=o&&o(this))&&v.totalTime&&(this._data.anim=M?v.totalTime(M):v),p&&i&&this.elements.forEach((m,w)=>{W[w].width=m.offsetWidth,k&&k.observe(m)})}),this}kill(){let{obs:r}=this._data;r&&r.disconnect(),X?.removeEventListener("loadingdone",this._split)}revert(){var r,t;if(this.isSplit){let{orig:D,anim:n}=this._data;this.kill(),D.forEach(we),this.chars.length=this.words.length=this.lines.length=D.length=this.masks.length=0,this.isSplit=!1,n&&(this._data.animTime=n.totalTime(),n.revert()),(t=(r=this.vars).onRevert)==null||t.call(r,this)}return this}static create(r,t){return new Oe(r,t)}static register(r){ee=ee||r||window.gsap,ee&&(te=ee.utils.toArray,ie=ee.core.context||ie),!le&&window.innerWidth>0&&(X=document.fonts,le=!0)}};Re.version="3.14.2";let he=Re;var Ke=/(?:^\s+|\s+$)/g,et=/([\uD800-\uDBFF][\uDC00-\uDFFF](?:[\u200D\uFE0F][\uD800-\uDBFF][\uDC00-\uDFFF]){2,}|\uD83D\uDC69(?:\u200D(?:(?:\uD83D\uDC69\u200D)?\uD83D\uDC67|(?:\uD83D\uDC69\u200D)?\uD83D\uDC66)|\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D(?:\uD83D\uDC69\u200D)?\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D(?:\uD83D\uDC69\u200D)?\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2642\u2640]\uFE0F|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDD27\uDCBC\uDD2C\uDE80\uDE92])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC6F\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3C-\uDD3E\uDDD6-\uDDDF])\u200D[\u2640\u2642]\uFE0F|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|(?:\u26F9|\uD83C[\uDFCC\uDFCB]|\uD83D\uDD75)(?:\uFE0F\u200D[\u2640\u2642]|(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642])\uFE0F|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC69\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708]))\uFE0F|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83D\uDC69\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC66\u200D\uD83D\uDC66|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]))|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\u200D(?:(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC67|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC66)|\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDD1-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])?|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF8]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4C\uDD50-\uDD6B\uDD80-\uDD97\uDDC0\uDDD0-\uDDE6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF8]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4C\uDD50-\uDD6B\uDD80-\uDD97\uDDC0\uDDD0-\uDDE6])\uFE0F)/;function fe(e){var r=e.nodeType,t="";if(r===1||r===9||r===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)t+=fe(e)}else if(r===3||r===4)return e.nodeValue;return t}function V(e,r,t,D,n){if(e+="",t&&(e=e.trim?e.trim():e.replace(Ke,"")),r&&r!=="")return e.replace(/>/g,">").replace(/</g,"<").split(r);for(var d=[],o=e.length,i=0,a,c;i<o;i++)c=e.charAt(i),(c.charCodeAt(0)>=55296&&c.charCodeAt(0)<=56319||e.charCodeAt(i+1)>=65024&&e.charCodeAt(i+1)<=65039)&&(a=((e.substr(i,12).split(et)||[])[1]||"").length||2,c=e.substr(i,a),d.emoji=1,i+=a-1),d.push(n?c:c===">"?">":c==="<"?"<":D&&c===" "&&(e.charAt(i-1)===" "||e.charAt(i+1)===" ")?" ":c);return d}var re=(function(){function e(t){this.chars=V(t),this.sets=[],this.length=50;for(var D=0;D<20;D++)this.sets[D]=Be(80,this.chars)}var r=e.prototype;return r.grow=function(D){for(var n=0;n<20;n++)this.sets[n]+=Be(D-this.length,this.chars);this.length=D},e})(),U,Ie,Pe=function(){return U||typeof window<"u"&&(U=window.gsap)&&U.registerPlugin&&U},tt=1,_e=/\s+/g,Be=function(r,t){for(var D=t.length,n="";--r>-1;)n+=t[~~(Math.random()*D)];return n},pe="ABCDEFGHIJKLMNOPQRSTUVWXYZ",Ne=pe.toLowerCase(),ut={upperCase:new re(pe),lowerCase:new re(Ne),upperAndLowerCase:new re(pe+Ne)},Te=function(){Ie=U=Pe()},se={version:"3.14.2",name:"scrambleText",register:function(r,t,D){U=r,Te()},init:function(r,t,D,n,d){if(Ie||Te(),this.prop="innerHTML"in r?"innerHTML":"textContent"in r?"textContent":0,!!this.prop){this.target=r,typeof t!="object"&&(t={text:t});var o=t.text||t.value||"",i=t.trim!==!1,a=this,c,p,h,C;return a.delimiter=c=t.delimiter||"",a.original=V(fe(r).replace(_e," ").split(" ").join(""),c,i),(o==="{original}"||o===!0||o==null)&&(o=a.original.join(c)),a.text=V((o||"").replace(_e," "),c,i),a.hasClass=!!(t.newClass||t.oldClass),a.newClass=t.newClass,a.oldClass=t.oldClass,C=c==="",a.textHasEmoji=C&&!!a.text.emoji,a.charsHaveEmoji=!!t.chars&&!!V(t.chars).emoji,a.length=C?a.original.length:a.original.join(c).length,a.lengthDif=(C?a.text.length:a.text.join(c).length)-a.length,a.fillChar=t.fillChar||t.chars&&~t.chars.indexOf(" ")?" ":"",a.charSet=h=ut[t.chars||"upperCase"]||new re(t.chars),a.speed=.05/(t.speed||1),a.prevScrambleTime=0,a.setIndex=Math.random()*20|0,p=a.length+Math.max(a.lengthDif,0),p>h.length&&h.grow(p),a.chars=h.sets[a.setIndex],a.revealDelay=t.revealDelay||0,a.tweenLength=t.tweenLength!==!1,a.tween=D,a.rightToLeft=!!t.rightToLeft,a._props.push("scrambleText","text"),tt}},render:function(r,t){var D=t.target,n=t.prop,d=t.text,o=t.delimiter,i=t.tween,a=t.prevScrambleTime,c=t.revealDelay,p=t.setIndex,h=t.chars,C=t.charSet,g=t.length,B=t.textHasEmoji,T=t.charsHaveEmoji,$=t.lengthDif,W=t.tweenLength,M=t.oldClass,k=t.newClass,v=t.rightToLeft,m=t.fillChar,w=t.speed,O=t.original,f=t.hasClass,A=d.length,_=i._time,Y=_-a,F,x,R,b,P,L,S,N,y,u,l;c&&(i._from&&(_=i._dur-_),r=_===0?0:_<c?1e-6:_===i._dur?1:i._ease((_-c)/(i._dur-c))),r<0?r=0:r>1&&(r=1),v&&(r=1-r),F=~~(r*A+.5),r?((Y>w||Y<-w)&&(t.setIndex=p=(p+(Math.random()*19|0))%20,t.chars=C.sets[p],t.prevScrambleTime+=Y),b=h):b=O.join(o),l=i._from?r:1-r,u=g+(W?i._from?l*l*l:1-l*l*l:1)*$,v?r===1&&(i._from||i.data==="isFromStart")?(R="",b=O.join(o)):(S=d.slice(F).join(o),T?R=V(b).slice(0,u-(B?V(S):S).length+.5|0).join(""):R=b.substr(0,u-(B?V(S):S).length+.5|0),b=S):(R=d.slice(0,F).join(o),x=(B?V(R):R).length,T?b=V(b).slice(x,u+.5|0).join(""):b=b.substr(x,u-x+.5|0)),f?(N=v?M:k,y=v?k:M,P=N&&F!==0,L=y&&F!==A,S=(P?"<span class='"+N+"'>":"")+R+(P?"</span>":"")+(L?"<span class='"+y+"'>":"")+o+b+(L?"</span>":"")):S=R+o+b,D[n]=m===" "&&~S.indexOf(" ")?S.split(" ").join(" "):S}};se.emojiSafeSplit=V;se.getText=fe;Pe()&&U.registerPlugin(se);oe.gsap.registerPlugin(he,se);const Se=({radius:e=100,duration:r=1.2,speed:t=.5,scrambleChars:D=".:",className:n="",style:d={},children:o})=>{const i=H.useRef(null);return H.useEffect(()=>{if(!i.current)return;const a=he.create(i.current.querySelector("p"),{type:"chars",charsClass:"inline-block will-change-transform"});a.chars.forEach(h=>{const C=h;oe.gsap.set(C,{attr:{"data-content":C.innerHTML}})});const c=h=>{a.chars.forEach(C=>{const g=C,{left:B,top:T,width:$,height:W}=g.getBoundingClientRect(),M=h.clientX-(B+$/2),k=h.clientY-(T+W/2),v=Math.hypot(M,k);v<e&&oe.gsap.to(g,{overwrite:!0,duration:r*(1-v/e),scrambleText:{text:g.dataset.content||"",chars:D,speed:t},ease:"none"})})},p=i.current;return p.addEventListener("pointermove",c),()=>{p.removeEventListener("pointermove",c),a.revert()}},[e,r,t,D]),s.jsx("div",{ref:i,className:`m-[7vw] max-w-[800px] font-mono text-[clamp(14px,4vw,32px)] text-white ${n}`,style:d,children:s.jsx("p",{children:o})})},rt=()=>s.jsxs("div",{className:"flex flex-col items-center gap-8 w-full",children:[s.jsx(Se,{radius:120,duration:1.5,speed:.6,scrambleChars:"!<>-_\\\\/[]{}—=+*^?#________",children:"Move your cursor over this text to see the scramble effect!"}),s.jsx(Se,{radius:100,duration:1.2,speed:.5,scrambleChars:"01",className:"text-green-400",children:"Binary scramble effect with 0 and 1 characters"})]}),Dt=({direction:e="clockwise",speed:r=2,color:t="#6366f1",dashLength:D=10,gapLength:n=5,width:d=300,height:o=200,strokeWidth:i=2,borderRadius:a=0})=>{const c=H.useRef(null);return H.useEffect(()=>{if(!c.current)return;const p=c.current,h=p.getTotalLength();p.style.strokeDasharray=`${D} ${n}`,p.style.strokeDashoffset=e==="clockwise"?h:0;let C,g=e==="clockwise"?h:0;const B=e==="clockwise"?-r:r,T=()=>{g+=B,e==="clockwise"?g<=-(D+n)&&(g=0):g>=D+n&&(g=0),p.style.strokeDashoffset=g,C=requestAnimationFrame(T)};return C=requestAnimationFrame(T),()=>{C&&cancelAnimationFrame(C)}},[e,r,D,n]),s.jsx("svg",{width:d+i*2,height:o+i*2,className:"overflow-visible",children:s.jsx(q.motion.rect,{ref:c,x:i,y:i,width:d,height:o,rx:a,ry:a,fill:"transparent",stroke:t,strokeWidth:i,strokeLinecap:"round",initial:{opacity:0},animate:{opacity:1},transition:{duration:.5}})})},st=()=>{const[e,r]=H.useState({direction:"clockwise",speed:2,color:"#6366f1",dashLength:15,gapLength:8,width:300,height:200,strokeWidth:3,borderRadius:20}),t=(D,n)=>{r(d=>({...d,[D]:n}))};return s.jsxs("div",{className:"w-full space-y-8",children:[s.jsx("div",{className:"flex items-center justify-center min-h-[300px] bg-gray-900/30 rounded-xl border border-gray-800 p-8",children:s.jsx(Dt,{...e})}),s.jsxs("div",{className:"bg-gray-800/50 rounded-xl border border-gray-700 p-6 space-y-6",children:[s.jsx("h3",{className:"text-lg font-semibold text-white mb-4",children:"参数调整"}),s.jsxs("div",{className:"space-y-2",children:[s.jsx("label",{className:"text-sm font-medium text-gray-300",children:"流动方向"}),s.jsxs("div",{className:"flex gap-4",children:[s.jsx("button",{onClick:()=>t("direction","clockwise"),className:`px-4 py-2 rounded-lg font-medium transition-all ${e.direction==="clockwise"?"bg-indigo-600 text-white":"bg-gray-700 text-gray-300 hover:bg-gray-600"}`,children:"顺时针"}),s.jsx("button",{onClick:()=>t("direction","counterclockwise"),className:`px-4 py-2 rounded-lg font-medium transition-all ${e.direction==="counterclockwise"?"bg-indigo-600 text-white":"bg-gray-700 text-gray-300 hover:bg-gray-600"}`,children:"逆时针"})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsx("label",{className:"text-sm font-medium text-gray-300",children:"流动速度"}),s.jsx("input",{type:"number",value:e.speed,onChange:D=>t("speed",parseFloat(D.target.value)),className:"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none",min:"0.1",max:"10",step:"0.1"})]}),s.jsx("input",{type:"range",value:e.speed,onChange:D=>t("speed",parseFloat(D.target.value)),className:"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600",min:"0.1",max:"10",step:"0.1"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsx("label",{className:"text-sm font-medium text-gray-300",children:"实线长度"}),s.jsx("input",{type:"number",value:e.dashLength,onChange:D=>t("dashLength",parseInt(D.target.value)),className:"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none",min:"1",max:"50"})]}),s.jsx("input",{type:"range",value:e.dashLength,onChange:D=>t("dashLength",parseInt(D.target.value)),className:"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600",min:"1",max:"50"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsx("label",{className:"text-sm font-medium text-gray-300",children:"间隔长度"}),s.jsx("input",{type:"number",value:e.gapLength,onChange:D=>t("gapLength",parseInt(D.target.value)),className:"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none",min:"1",max:"50"})]}),s.jsx("input",{type:"range",value:e.gapLength,onChange:D=>t("gapLength",parseInt(D.target.value)),className:"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600",min:"1",max:"50"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsx("label",{className:"text-sm font-medium text-gray-300",children:"线条粗细"}),s.jsx("input",{type:"number",value:e.strokeWidth,onChange:D=>t("strokeWidth",parseInt(D.target.value)),className:"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none",min:"1",max:"10"})]}),s.jsx("input",{type:"range",value:e.strokeWidth,onChange:D=>t("strokeWidth",parseInt(D.target.value)),className:"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600",min:"1",max:"10"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsx("label",{className:"text-sm font-medium text-gray-300",children:"圆角半径"}),s.jsx("input",{type:"number",value:e.borderRadius,onChange:D=>t("borderRadius",parseInt(D.target.value)),className:"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none",min:"0",max:"100"})]}),s.jsx("input",{type:"range",value:e.borderRadius,onChange:D=>t("borderRadius",parseInt(D.target.value)),className:"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600",min:"0",max:"100"})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsx("label",{className:"text-sm font-medium text-gray-300",children:"宽度"}),s.jsx("input",{type:"number",value:e.width,onChange:D=>t("width",parseInt(D.target.value)),className:"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none",min:"50",max:"600"})]}),s.jsx("input",{type:"range",value:e.width,onChange:D=>t("width",parseInt(D.target.value)),className:"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600",min:"50",max:"600"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsx("label",{className:"text-sm font-medium text-gray-300",children:"高度"}),s.jsx("input",{type:"number",value:e.height,onChange:D=>t("height",parseInt(D.target.value)),className:"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none",min:"50",max:"400"})]}),s.jsx("input",{type:"range",value:e.height,onChange:D=>t("height",parseInt(D.target.value)),className:"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600",min:"50",max:"400"})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx("label",{className:"text-sm font-medium text-gray-300",children:"边框颜色"}),s.jsxs("div",{className:"flex gap-3 items-center",children:[s.jsx("input",{type:"color",value:e.color,onChange:D=>t("color",D.target.value),className:"w-12 h-12 rounded-lg cursor-pointer bg-gray-700 border-2 border-gray-600"}),s.jsx("input",{type:"text",value:e.color,onChange:D=>t("color",D.target.value),className:"flex-1 px-3 py-2 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none font-mono",placeholder:"#6366f1"})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx("label",{className:"text-sm font-medium text-gray-300",children:"快速选择颜色"}),s.jsx("div",{className:"flex gap-2 flex-wrap",children:["#6366f1","#ec4899","#10b981","#f59e0b","#8b5cf6","#ef4444"].map(D=>s.jsx("button",{onClick:()=>t("color",D),className:"w-10 h-10 rounded-lg border-2 transition-all hover:scale-110",style:{backgroundColor:D,borderColor:e.color===D?"#fff":D}},D))})]})]})]})};exports.BlurText=qe;exports.BounceIn=He;exports.CircularText=Ue;exports.FlowingDashedBox=st;exports.GlowCard=Ye;exports.ScrambledText=rt;
|
|
9
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/components/GlowCard.jsx","../src/components/BounceIn.jsx","../src/components/BlurText.jsx","../src/components/CircularText.jsx","../node_modules/gsap/SplitText.js","../node_modules/gsap/utils/strings.js","../node_modules/gsap/ScrambleTextPlugin.js","../src/components/ScrambledText.jsx","../src/components/FlowingDashedBox.jsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n[PURPOSE]: 流光边框悬浮卡片组件,展示动态渐变边框和悬浮动画效果\n[INPUT]: 无props,纯展示组件\n[OUTPUT]: 带有流光边框和悬浮动画的交互式卡片\n[POS]: 位于 /src/components,作为第一个动效示例组件\n\n[PROTOCOL]:\n1. 一旦本文件逻辑变更,必须同步更新此 Header。\n2. 更新后必须上浮检查 /src/components/.folder.md 的描述是否依然准确。\n*/\n\nimport { motion } from 'framer-motion';\n\nconst GlowCard = () => {\n return (\n <motion.div\n className=\"relative w-72 h-96 rounded-2xl p-[2px] cursor-pointer group\"\n style={{\n background: 'linear-gradient(90deg, #667eea 0%, #764ba2 50%, #f093fb 100%)',\n backgroundSize: '200% 100%',\n }}\n animate={{\n backgroundPosition: ['0% 50%', '100% 50%', '0% 50%'],\n }}\n transition={{\n duration: 3,\n repeat: Infinity,\n ease: 'linear',\n }}\n whileHover={{\n scale: 1.05,\n y: -10,\n }}\n >\n {/* Inner Card */}\n <div className=\"w-full h-full bg-gray-900 rounded-2xl flex flex-col items-center justify-center p-8 relative overflow-hidden\">\n {/* Glow Effect */}\n <div className=\"absolute inset-0 bg-gradient-to-br from-indigo-500/20 via-transparent to-purple-500/20 opacity-0 group-hover:opacity-100 transition-opacity duration-500\" />\n \n {/* Content */}\n <div className=\"relative z-10 text-center\">\n <div className=\"w-20 h-20 mx-auto mb-6 rounded-full bg-gradient-to-br from-indigo-400 to-purple-500 flex items-center justify-center text-4xl animate-float\">\n ✨\n </div>\n <h4 className=\"text-2xl font-bold text-white mb-3\">流光卡片</h4>\n <p className=\"text-gray-400 text-sm leading-relaxed\">\n 悬停查看动态效果\n <br />\n 渐变边框 + 浮动动画\n </p>\n </div>\n\n {/* Bottom Decoration */}\n <div className=\"absolute bottom-0 left-0 right-0 h-1 bg-gradient-to-r from-transparent via-indigo-500 to-transparent opacity-50\" />\n </div>\n </motion.div>\n );\n};\n\n// 组件源代码字符串(用于代码展示)\nexport const glowCardCode = `import { motion } from 'framer-motion';\n\nconst GlowCard = () => {\n return (\n <motion.div\n className=\"relative w-72 h-96 rounded-2xl p-[2px] cursor-pointer group\"\n style={{\n background: 'linear-gradient(90deg, #667eea 0%, #764ba2 50%, #f093fb 100%)',\n backgroundSize: '200% 100%',\n }}\n animate={{\n backgroundPosition: ['0% 50%', '100% 50%', '0% 50%'],\n }}\n transition={{\n duration: 3,\n repeat: Infinity,\n ease: 'linear',\n }}\n whileHover={{\n scale: 1.05,\n y: -10,\n }}\n >\n <div className=\"w-full h-full bg-gray-900 rounded-2xl flex flex-col items-center justify-center p-8 relative overflow-hidden\">\n <div className=\"absolute inset-0 bg-gradient-to-br from-indigo-500/20 via-transparent to-purple-500/20 opacity-0 group-hover:opacity-100 transition-opacity duration-500\" />\n \n <div className=\"relative z-10 text-center\">\n <div className=\"w-20 h-20 mx-auto mb-6 rounded-full bg-gradient-to-br from-indigo-400 to-purple-500 flex items-center justify-center text-4xl animate-float\">\n ✨\n </div>\n <h4 className=\"text-2xl font-bold text-white mb-3\">流光卡片</h4>\n <p className=\"text-gray-400 text-sm leading-relaxed\">\n 悬停查看动态效果\n <br />\n 渐变边框 + 浮动动画\n </p>\n </div>\n\n <div className=\"absolute bottom-0 left-0 right-0 h-1 bg-gradient-to-r from-transparent via-indigo-500 to-transparent opacity-50\" />\n </div>\n </motion.div>\n );\n};\n\nexport default GlowCard;`;\n\nexport default GlowCard;\n","/**\n[PURPOSE]: 弹性入场动画组件,展示从下方滑入并弹跳的动画效果\n[INPUT]: 无props,纯展示组件\n[OUTPUT]: 带有弹性入场动画的按钮组\n[POS]: 位于 /src/components,作为第二个动效示例组件\n\n[PROTOCOL]:\n1. 一旦本文件逻辑变更,必须同步更新此 Header。\n2. 更新后必须上浮检查 /src/components/.folder.md 的描述是否依然准确。\n*/\n\nimport { motion } from 'framer-motion';\n\nconst BounceIn = () => {\n const containerVariants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: 0.1,\n },\n },\n };\n\n const itemVariants = {\n hidden: { y: 50, opacity: 0 },\n visible: {\n y: 0,\n opacity: 1,\n transition: {\n type: 'spring',\n bounce: 0.5,\n duration: 0.8,\n },\n },\n };\n\n const buttons = ['开始使用', '查看文档', '示例代码', '关于我们'];\n\n return (\n <motion.div\n className=\"flex flex-wrap gap-4 justify-center\"\n variants={containerVariants}\n initial=\"hidden\"\n animate=\"visible\"\n >\n {buttons.map((text, index) => (\n <motion.button\n key={index}\n variants={itemVariants}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n className=\"px-6 py-3 bg-gradient-to-r from-pink-500 to-orange-500 text-white font-semibold rounded-lg shadow-lg hover:shadow-xl transition-shadow\"\n >\n {text}\n </motion.button>\n ))}\n </motion.div>\n );\n};\n\nexport const bounceInCode = `import { motion } from 'framer-motion';\n\nconst BounceIn = () => {\n const containerVariants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: 0.1,\n },\n },\n };\n\n const itemVariants = {\n hidden: { y: 50, opacity: 0 },\n visible: {\n y: 0,\n opacity: 1,\n transition: {\n type: 'spring',\n bounce: 0.5,\n duration: 0.8,\n },\n },\n };\n\n const buttons = ['开始使用', '查看文档', '示例代码', '关于我们'];\n\n return (\n <motion.div\n className=\"flex flex-wrap gap-4 justify-center\"\n variants={containerVariants}\n initial=\"hidden\"\n animate=\"visible\"\n >\n {buttons.map((text, index) => (\n <motion.button\n key={index}\n variants={itemVariants}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n className=\"px-6 py-3 bg-gradient-to-r from-pink-500 to-orange-500 text-white font-semibold rounded-lg shadow-lg hover:shadow-xl transition-shadow\"\n >\n {text}\n </motion.button>\n ))}\n </motion.div>\n );\n};\n\nexport default BounceIn;`;\n\nexport default BounceIn;\n","/**\n[PURPOSE]: 模糊文本动画组件,文字从模糊到清晰逐个显示\n[INPUT]: (text, delay, animateBy, direction, etc.) - 文本内容、延迟、动画方式、方向等配置\n[OUTPUT]: 带有模糊渐显动画的文本组件\n[POS]: 位于 /src/components,作为文本动画示例组件\n\n[PROTOCOL]:\n1. 一旦本文件逻辑变更,必须同步更新此 Header。\n2. 更新后必须上浮检查 /src/components/.folder.md 的描述是否依然准确。\n*/\n\nimport { motion } from 'framer-motion';\nimport { useEffect, useRef, useState, useMemo } from 'react';\n\nconst buildKeyframes = (from, steps) => {\n const keys = new Set([...Object.keys(from), ...steps.flatMap(s => Object.keys(s))]);\n\n const keyframes = {};\n keys.forEach(k => {\n keyframes[k] = [from[k], ...steps.map(s => s[k])];\n });\n return keyframes;\n};\n\nconst BlurText = ({\n text = '',\n delay = 200,\n className = '',\n animateBy = 'words',\n direction = 'top',\n threshold = 0.1,\n rootMargin = '0px',\n animationFrom,\n animationTo,\n easing = t => t,\n onAnimationComplete,\n stepDuration = 0.35\n}) => {\n const elements = animateBy === 'words' ? text.split(' ') : text.split('');\n const [inView, setInView] = useState(false);\n const ref = useRef(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setInView(true);\n observer.unobserve(ref.current);\n }\n },\n { threshold, rootMargin }\n );\n observer.observe(ref.current);\n return () => observer.disconnect();\n }, [threshold, rootMargin]);\n\n const defaultFrom = useMemo(\n () =>\n direction === 'top' ? { filter: 'blur(10px)', opacity: 0, y: -50 } : { filter: 'blur(10px)', opacity: 0, y: 50 },\n [direction]\n );\n\n const defaultTo = useMemo(\n () => [\n {\n filter: 'blur(5px)',\n opacity: 0.5,\n y: direction === 'top' ? 5 : -5\n },\n { filter: 'blur(0px)', opacity: 1, y: 0 }\n ],\n [direction]\n );\n\n const fromSnapshot = animationFrom ?? defaultFrom;\n const toSnapshots = animationTo ?? defaultTo;\n\n const stepCount = toSnapshots.length + 1;\n const totalDuration = stepDuration * (stepCount - 1);\n const times = Array.from({ length: stepCount }, (_, i) => (stepCount === 1 ? 0 : i / (stepCount - 1)));\n\n return (\n <p ref={ref} className={`blur-text ${className} flex flex-wrap`}>\n {elements.map((segment, index) => {\n const animateKeyframes = buildKeyframes(fromSnapshot, toSnapshots);\n\n const spanTransition = {\n duration: totalDuration,\n times,\n delay: (index * delay) / 1000\n };\n spanTransition.ease = easing;\n\n return (\n <motion.span\n className=\"inline-block will-change-[transform,filter,opacity]\"\n key={index}\n initial={fromSnapshot}\n animate={inView ? animateKeyframes : fromSnapshot}\n transition={spanTransition}\n onAnimationComplete={index === elements.length - 1 ? onAnimationComplete : undefined}\n >\n {segment === ' ' ? '\\u00A0' : segment}\n {animateBy === 'words' && index < elements.length - 1 && '\\u00A0'}\n </motion.span>\n );\n })}\n </p>\n );\n};\n\n// 示例组件用于展示\nconst BlurTextDemo = () => {\n return (\n <div className=\"space-y-8 max-w-2xl\">\n <BlurText\n text=\"Isn't this so cool?!\"\n className=\"text-4xl font-bold text-white\"\n delay={100}\n animateBy=\"words\"\n direction=\"top\"\n />\n <BlurText\n text=\"逐字显示的中文文本动画效果\"\n className=\"text-3xl font-semibold text-indigo-400\"\n delay={50}\n animateBy=\"characters\"\n direction=\"top\"\n />\n </div>\n );\n};\n\n// 组件源代码字符串\nexport const blurTextCode = `import { motion } from 'framer-motion';\nimport { useEffect, useRef, useState, useMemo } from 'react';\n\nconst buildKeyframes = (from, steps) => {\n const keys = new Set([...Object.keys(from), ...steps.flatMap(s => Object.keys(s))]);\n\n const keyframes = {};\n keys.forEach(k => {\n keyframes[k] = [from[k], ...steps.map(s => s[k])];\n });\n return keyframes;\n};\n\nconst BlurText = ({\n text = '',\n delay = 200,\n className = '',\n animateBy = 'words',\n direction = 'top',\n threshold = 0.1,\n rootMargin = '0px',\n animationFrom,\n animationTo,\n easing = t => t,\n onAnimationComplete,\n stepDuration = 0.35\n}) => {\n const elements = animateBy === 'words' ? text.split(' ') : text.split('');\n const [inView, setInView] = useState(false);\n const ref = useRef(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setInView(true);\n observer.unobserve(ref.current);\n }\n },\n { threshold, rootMargin }\n );\n observer.observe(ref.current);\n return () => observer.disconnect();\n }, [threshold, rootMargin]);\n\n const defaultFrom = useMemo(\n () =>\n direction === 'top' ? { filter: 'blur(10px)', opacity: 0, y: -50 } : { filter: 'blur(10px)', opacity: 0, y: 50 },\n [direction]\n );\n\n const defaultTo = useMemo(\n () => [\n {\n filter: 'blur(5px)',\n opacity: 0.5,\n y: direction === 'top' ? 5 : -5\n },\n { filter: 'blur(0px)', opacity: 1, y: 0 }\n ],\n [direction]\n );\n\n const fromSnapshot = animationFrom ?? defaultFrom;\n const toSnapshots = animationTo ?? defaultTo;\n\n const stepCount = toSnapshots.length + 1;\n const totalDuration = stepDuration * (stepCount - 1);\n const times = Array.from({ length: stepCount }, (_, i) => (stepCount === 1 ? 0 : i / (stepCount - 1)));\n\n return (\n <p ref={ref} className={\\`blur-text \\${className} flex flex-wrap\\`}>\n {elements.map((segment, index) => {\n const animateKeyframes = buildKeyframes(fromSnapshot, toSnapshots);\n\n const spanTransition = {\n duration: totalDuration,\n times,\n delay: (index * delay) / 1000\n };\n spanTransition.ease = easing;\n\n return (\n <motion.span\n className=\"inline-block will-change-[transform,filter,opacity]\"\n key={index}\n initial={fromSnapshot}\n animate={inView ? animateKeyframes : fromSnapshot}\n transition={spanTransition}\n onAnimationComplete={index === elements.length - 1 ? onAnimationComplete : undefined}\n >\n {segment === ' ' ? '\\\\u00A0' : segment}\n {animateBy === 'words' && index < elements.length - 1 && '\\\\u00A0'}\n </motion.span>\n );\n })}\n </p>\n );\n};\n\n// 使用示例\nconst Demo = () => (\n <div className=\"space-y-8\">\n <BlurText\n text=\"Isn't this so cool?!\"\n className=\"text-4xl font-bold text-white\"\n delay={100}\n animateBy=\"words\"\n />\n <BlurText\n text=\"逐字显示的中文文本动画效果\"\n className=\"text-3xl text-indigo-400\"\n delay={50}\n animateBy=\"characters\"\n />\n </div>\n);`;\n\nexport default BlurTextDemo;\n","/**\n[PURPOSE]: 圆形旋转文字组件,文字沿圆形路径排列并旋转\n[INPUT]: (text, spinDuration, onHover, className) - 文本内容、旋转时长、悬浮效果、自定义样式\n[OUTPUT]: 沿圆形路径排列并旋转的文字动画\n[POS]: 位于 /src/components,作为文本动画示例组件\n\n[PROTOCOL]:\n1. 一旦本文件逻辑变更,必须同步更新此 Header。\n2. 更新后必须上浮检查 /src/components/.folder.md 的描述是否依然准确。\n*/\n\nimport { useEffect } from 'react';\nimport { motion, useAnimation, useMotionValue } from 'framer-motion';\n\nconst getRotationTransition = (duration, from, loop = true) => ({\n from,\n to: from + 360,\n ease: 'linear',\n duration,\n type: 'tween',\n repeat: loop ? Infinity : 0\n});\n\nconst getTransition = (duration, from) => ({\n rotate: getRotationTransition(duration, from),\n scale: {\n type: 'spring',\n damping: 20,\n stiffness: 300\n }\n});\n\nconst CircularText = ({ text, spinDuration = 20, onHover = 'speedUp', className = '' }) => {\n const letters = Array.from(text);\n const controls = useAnimation();\n const rotation = useMotionValue(0);\n\n useEffect(() => {\n const start = rotation.get();\n controls.start({\n rotate: start + 360,\n scale: 1,\n transition: getTransition(spinDuration, start)\n });\n }, [spinDuration, text, onHover, controls, rotation]);\n\n const handleHoverStart = () => {\n const start = rotation.get();\n if (!onHover) return;\n\n let transitionConfig;\n let scaleVal = 1;\n\n switch (onHover) {\n case 'slowDown':\n transitionConfig = getTransition(spinDuration * 2, start);\n break;\n case 'speedUp':\n transitionConfig = getTransition(spinDuration / 4, start);\n break;\n case 'pause':\n transitionConfig = {\n rotate: { type: 'spring', damping: 20, stiffness: 300 },\n scale: { type: 'spring', damping: 20, stiffness: 300 }\n };\n scaleVal = 1;\n break;\n case 'goBonkers':\n transitionConfig = getTransition(spinDuration / 20, start);\n scaleVal = 0.8;\n break;\n default:\n transitionConfig = getTransition(spinDuration, start);\n }\n\n controls.start({\n rotate: start + 360,\n scale: scaleVal,\n transition: transitionConfig\n });\n };\n\n const handleHoverEnd = () => {\n const start = rotation.get();\n controls.start({\n rotate: start + 360,\n scale: 1,\n transition: getTransition(spinDuration, start)\n });\n };\n\n return (\n <motion.div\n className={`m-0 mx-auto rounded-full w-[200px] h-[200px] relative text-white font-black text-center cursor-pointer origin-center ${className}`}\n style={{ rotate: rotation }}\n initial={{ rotate: 0 }}\n animate={controls}\n onMouseEnter={handleHoverStart}\n onMouseLeave={handleHoverEnd}\n >\n {letters.map((letter, i) => {\n const rotationDeg = (360 / letters.length) * i;\n const factor = Math.PI / letters.length;\n const x = factor * i;\n const y = factor * i;\n const transform = `rotateZ(${rotationDeg}deg) translate3d(${x}px, ${y}px, 0)`;\n\n return (\n <span\n key={i}\n className=\"absolute inline-block inset-0 text-2xl transition-all duration-500 ease-[cubic-bezier(0,0,0,1)]\"\n style={{ transform, WebkitTransform: transform }}\n >\n {letter}\n </span>\n );\n })}\n </motion.div>\n );\n};\n\n// 示例组件用于展示\nconst CircularTextDemo = () => {\n return (\n <div className=\"flex flex-col items-center gap-12\">\n <div className=\"text-center space-y-4\">\n <CircularText\n text=\"REACT • FRAMER • MOTION • \"\n spinDuration={15}\n onHover=\"speedUp\"\n />\n <p className=\"text-gray-400 text-sm\">悬浮加速效果</p>\n </div>\n \n <div className=\"text-center space-y-4\">\n <CircularText\n text=\"TAILWIND • CSS • VITE • \"\n spinDuration={12}\n onHover=\"pause\"\n className=\"text-indigo-400\"\n />\n <p className=\"text-gray-400 text-sm\">悬浮暂停效果</p>\n </div>\n </div>\n );\n};\n\n// 组件源代码字符串\nexport const circularTextCode = `import { useEffect } from 'react';\nimport { motion, useAnimation, useMotionValue } from 'framer-motion';\n\nconst getRotationTransition = (duration, from, loop = true) => ({\n from,\n to: from + 360,\n ease: 'linear',\n duration,\n type: 'tween',\n repeat: loop ? Infinity : 0\n});\n\nconst getTransition = (duration, from) => ({\n rotate: getRotationTransition(duration, from),\n scale: {\n type: 'spring',\n damping: 20,\n stiffness: 300\n }\n});\n\nconst CircularText = ({ text, spinDuration = 20, onHover = 'speedUp', className = '' }) => {\n const letters = Array.from(text);\n const controls = useAnimation();\n const rotation = useMotionValue(0);\n\n useEffect(() => {\n const start = rotation.get();\n controls.start({\n rotate: start + 360,\n scale: 1,\n transition: getTransition(spinDuration, start)\n });\n }, [spinDuration, text, onHover, controls, rotation]);\n\n const handleHoverStart = () => {\n const start = rotation.get();\n if (!onHover) return;\n\n let transitionConfig;\n let scaleVal = 1;\n\n switch (onHover) {\n case 'slowDown':\n transitionConfig = getTransition(spinDuration * 2, start);\n break;\n case 'speedUp':\n transitionConfig = getTransition(spinDuration / 4, start);\n break;\n case 'pause':\n transitionConfig = {\n rotate: { type: 'spring', damping: 20, stiffness: 300 },\n scale: { type: 'spring', damping: 20, stiffness: 300 }\n };\n scaleVal = 1;\n break;\n case 'goBonkers':\n transitionConfig = getTransition(spinDuration / 20, start);\n scaleVal = 0.8;\n break;\n default:\n transitionConfig = getTransition(spinDuration, start);\n }\n\n controls.start({\n rotate: start + 360,\n scale: scaleVal,\n transition: transitionConfig\n });\n };\n\n const handleHoverEnd = () => {\n const start = rotation.get();\n controls.start({\n rotate: start + 360,\n scale: 1,\n transition: getTransition(spinDuration, start)\n });\n };\n\n return (\n <motion.div\n className={\\`m-0 mx-auto rounded-full w-[200px] h-[200px] relative text-white font-black text-center cursor-pointer origin-center \\${className}\\`}\n style={{ rotate: rotation }}\n initial={{ rotate: 0 }}\n animate={controls}\n onMouseEnter={handleHoverStart}\n onMouseLeave={handleHoverEnd}\n >\n {letters.map((letter, i) => {\n const rotationDeg = (360 / letters.length) * i;\n const factor = Math.PI / letters.length;\n const x = factor * i;\n const y = factor * i;\n const transform = \\`rotateZ(\\${rotationDeg}deg) translate3d(\\${x}px, \\${y}px, 0)\\`;\n\n return (\n <span\n key={i}\n className=\"absolute inline-block inset-0 text-2xl transition-all duration-500\"\n style={{ transform, WebkitTransform: transform }}\n >\n {letter}\n </span>\n );\n })}\n </motion.div>\n );\n};\n\n// 使用示例\nconst Demo = () => (\n <div className=\"flex gap-8\">\n <CircularText text=\"REACT • MOTION • \" onHover=\"speedUp\" />\n <CircularText text=\"TAILWIND • CSS • \" onHover=\"pause\" />\n </div>\n);`;\n\nexport default CircularTextDemo;\n","/*!\n * SplitText 3.14.2\n * https://gsap.com\n *\n * @license Copyright 2025, GreenSock. All rights reserved. Subject to the terms at https://gsap.com/standard-license.\n * @author: Jack Doyle\n */\n\nlet gsap, _fonts, _splitProp = typeof Symbol === \"function\" ? Symbol() : \"_split\", _coreInitted, _initIfNecessary = () => _coreInitted || SplitText.register(window.gsap), _charSegmenter = typeof Intl !== \"undefined\" && \"Segmenter\" in Intl ? new Intl.Segmenter() : 0, _toArray = (r) => typeof r === \"string\" ? _toArray(document.querySelectorAll(r)) : \"length\" in r ? Array.from(r).reduce((acc, cur) => {\n typeof cur === \"string\" ? acc.push(..._toArray(cur)) : acc.push(cur);\n return acc;\n}, []) : [r], _elements = (targets) => _toArray(targets).filter((e) => e instanceof HTMLElement), _emptyArray = [], _context = function() {\n}, _defaultContext = { add: (f) => f() }, _spacesRegEx = /\\s+/g, _emojiSafeRegEx = new RegExp(\"\\\\p{RI}\\\\p{RI}|\\\\p{Emoji}(\\\\p{EMod}|\\\\u{FE0F}\\\\u{20E3}?|[\\\\u{E0020}-\\\\u{E007E}]+\\\\u{E007F})?(\\\\u{200D}\\\\p{Emoji}(\\\\p{EMod}|\\\\u{FE0F}\\\\u{20E3}?|[\\\\u{E0020}-\\\\u{E007E}]+\\\\u{E007F})?)*|.\", \"gu\"), _emptyBounds = { left: 0, top: 0, width: 0, height: 0 }, _findNextValidBounds = (allBounds, startIndex) => {\n while (++startIndex < allBounds.length && allBounds[startIndex] === _emptyBounds) {\n }\n return allBounds[startIndex] || _emptyBounds;\n}, _revertOriginal = ({ element, html, ariaL, ariaH }) => {\n element.innerHTML = html;\n ariaL ? element.setAttribute(\"aria-label\", ariaL) : element.removeAttribute(\"aria-label\");\n ariaH ? element.setAttribute(\"aria-hidden\", ariaH) : element.removeAttribute(\"aria-hidden\");\n}, _stretchToFitSpecialChars = (collection, specialCharsRegEx) => {\n if (specialCharsRegEx) {\n let charsFound = new Set(collection.join(\"\").match(specialCharsRegEx) || _emptyArray), i = collection.length, slots, word, char, combined;\n if (charsFound.size) {\n while (--i > -1) {\n word = collection[i];\n for (char of charsFound) {\n if (char.startsWith(word) && char.length > word.length) {\n slots = 0;\n combined = word;\n while (char.startsWith(combined += collection[i + ++slots]) && combined.length < char.length) {\n }\n if (slots && combined.length === char.length) {\n collection[i] = char;\n collection.splice(i + 1, slots);\n break;\n }\n }\n }\n }\n }\n }\n return collection;\n}, _disallowInline = (element) => window.getComputedStyle(element).display === \"inline\" && (element.style.display = \"inline-block\"), _insertNodeBefore = (newChild, parent, existingChild) => parent.insertBefore(typeof newChild === \"string\" ? document.createTextNode(newChild) : newChild, existingChild), _getWrapper = (type, config, collection) => {\n let className = config[type + \"sClass\"] || \"\", { tag = \"div\", aria = \"auto\", propIndex = false } = config, display = type === \"line\" ? \"block\" : \"inline-block\", incrementClass = className.indexOf(\"++\") > -1, wrapper = (text) => {\n let el = document.createElement(tag), i = collection.length + 1;\n className && (el.className = className + (incrementClass ? \" \" + className + i : \"\"));\n propIndex && el.style.setProperty(\"--\" + type, i + \"\");\n aria !== \"none\" && el.setAttribute(\"aria-hidden\", \"true\");\n if (tag !== \"span\") {\n el.style.position = \"relative\";\n el.style.display = display;\n }\n el.textContent = text;\n collection.push(el);\n return el;\n };\n incrementClass && (className = className.replace(\"++\", \"\"));\n wrapper.collection = collection;\n return wrapper;\n}, _getLineWrapper = (element, nodes, config, collection) => {\n let lineWrapper = _getWrapper(\"line\", config, collection), textAlign = window.getComputedStyle(element).textAlign || \"left\";\n return (startIndex, endIndex) => {\n let newLine = lineWrapper(\"\");\n newLine.style.textAlign = textAlign;\n element.insertBefore(newLine, nodes[startIndex]);\n for (; startIndex < endIndex; startIndex++) {\n newLine.appendChild(nodes[startIndex]);\n }\n newLine.normalize();\n };\n}, _splitWordsAndCharsRecursively = (element, config, wordWrapper, charWrapper, prepForCharsOnly, deepSlice, ignore, charSplitRegEx, specialCharsRegEx, isNested) => {\n var _a;\n let nodes = Array.from(element.childNodes), i = 0, { wordDelimiter, reduceWhiteSpace = true, prepareText } = config, elementBounds = element.getBoundingClientRect(), lastBounds = elementBounds, isPreformatted = !reduceWhiteSpace && window.getComputedStyle(element).whiteSpace.substring(0, 3) === \"pre\", ignoredPreviousSibling = 0, wordsCollection = wordWrapper.collection, wordDelimIsNotSpace, wordDelimString, wordDelimSplitter, curNode, words, curWordEl, startsWithSpace, endsWithSpace, j, bounds, curWordChars, clonedNode, curSubNode, tempSubNode, curTextContent, wordText, lastWordText, k;\n if (typeof wordDelimiter === \"object\") {\n wordDelimSplitter = wordDelimiter.delimiter || wordDelimiter;\n wordDelimString = wordDelimiter.replaceWith || \"\";\n } else {\n wordDelimString = wordDelimiter === \"\" ? \"\" : wordDelimiter || \" \";\n }\n wordDelimIsNotSpace = wordDelimString !== \" \";\n for (; i < nodes.length; i++) {\n curNode = nodes[i];\n if (curNode.nodeType === 3) {\n curTextContent = curNode.textContent || \"\";\n if (reduceWhiteSpace) {\n curTextContent = curTextContent.replace(_spacesRegEx, \" \");\n } else if (isPreformatted) {\n curTextContent = curTextContent.replace(/\\n/g, wordDelimString + \"\\n\");\n }\n prepareText && (curTextContent = prepareText(curTextContent, element));\n curNode.textContent = curTextContent;\n words = wordDelimString || wordDelimSplitter ? curTextContent.split(wordDelimSplitter || wordDelimString) : curTextContent.match(charSplitRegEx) || _emptyArray;\n lastWordText = words[words.length - 1];\n endsWithSpace = wordDelimIsNotSpace ? lastWordText.slice(-1) === \" \" : !lastWordText;\n lastWordText || words.pop();\n lastBounds = elementBounds;\n startsWithSpace = wordDelimIsNotSpace ? words[0].charAt(0) === \" \" : !words[0];\n startsWithSpace && _insertNodeBefore(\" \", element, curNode);\n words[0] || words.shift();\n _stretchToFitSpecialChars(words, specialCharsRegEx);\n deepSlice && isNested || (curNode.textContent = \"\");\n for (j = 1; j <= words.length; j++) {\n wordText = words[j - 1];\n if (!reduceWhiteSpace && isPreformatted && wordText.charAt(0) === \"\\n\") {\n (_a = curNode.previousSibling) == null ? void 0 : _a.remove();\n _insertNodeBefore(document.createElement(\"br\"), element, curNode);\n wordText = wordText.slice(1);\n }\n if (!reduceWhiteSpace && wordText === \"\") {\n _insertNodeBefore(wordDelimString, element, curNode);\n } else if (wordText === \" \") {\n element.insertBefore(document.createTextNode(\" \"), curNode);\n } else {\n wordDelimIsNotSpace && wordText.charAt(0) === \" \" && _insertNodeBefore(\" \", element, curNode);\n if (ignoredPreviousSibling && j === 1 && !startsWithSpace && wordsCollection.indexOf(ignoredPreviousSibling.parentNode) > -1) {\n curWordEl = wordsCollection[wordsCollection.length - 1];\n curWordEl.appendChild(document.createTextNode(charWrapper ? \"\" : wordText));\n } else {\n curWordEl = wordWrapper(charWrapper ? \"\" : wordText);\n _insertNodeBefore(curWordEl, element, curNode);\n ignoredPreviousSibling && j === 1 && !startsWithSpace && curWordEl.insertBefore(ignoredPreviousSibling, curWordEl.firstChild);\n }\n if (charWrapper) {\n curWordChars = _charSegmenter ? _stretchToFitSpecialChars([..._charSegmenter.segment(wordText)].map((s) => s.segment), specialCharsRegEx) : wordText.match(charSplitRegEx) || _emptyArray;\n for (k = 0; k < curWordChars.length; k++) {\n curWordEl.appendChild(curWordChars[k] === \" \" ? document.createTextNode(\" \") : charWrapper(curWordChars[k]));\n }\n }\n if (deepSlice && isNested) {\n curTextContent = curNode.textContent = curTextContent.substring(wordText.length + 1, curTextContent.length);\n bounds = curWordEl.getBoundingClientRect();\n if (bounds.top > lastBounds.top && bounds.left <= lastBounds.left) {\n clonedNode = element.cloneNode();\n curSubNode = element.childNodes[0];\n while (curSubNode && curSubNode !== curWordEl) {\n tempSubNode = curSubNode;\n curSubNode = curSubNode.nextSibling;\n clonedNode.appendChild(tempSubNode);\n }\n element.parentNode.insertBefore(clonedNode, element);\n prepForCharsOnly && _disallowInline(clonedNode);\n }\n lastBounds = bounds;\n }\n if (j < words.length || endsWithSpace) {\n _insertNodeBefore(j >= words.length ? \" \" : wordDelimIsNotSpace && wordText.slice(-1) === \" \" ? \" \" + wordDelimString : wordDelimString, element, curNode);\n }\n }\n }\n element.removeChild(curNode);\n ignoredPreviousSibling = 0;\n } else if (curNode.nodeType === 1) {\n if (ignore && ignore.indexOf(curNode) > -1) {\n wordsCollection.indexOf(curNode.previousSibling) > -1 && wordsCollection[wordsCollection.length - 1].appendChild(curNode);\n ignoredPreviousSibling = curNode;\n } else {\n _splitWordsAndCharsRecursively(curNode, config, wordWrapper, charWrapper, prepForCharsOnly, deepSlice, ignore, charSplitRegEx, specialCharsRegEx, true);\n ignoredPreviousSibling = 0;\n }\n prepForCharsOnly && _disallowInline(curNode);\n }\n }\n};\nconst _SplitText = class _SplitText {\n constructor(elements, config) {\n this.isSplit = false;\n _initIfNecessary();\n this.elements = _elements(elements);\n this.chars = [];\n this.words = [];\n this.lines = [];\n this.masks = [];\n this.vars = config;\n this.elements.forEach((el) => {\n var _a;\n config.overwrite !== false && ((_a = el[_splitProp]) == null ? void 0 : _a._data.orig.filter(({ element }) => element === el).forEach(_revertOriginal));\n el[_splitProp] = this;\n });\n this._split = () => this.isSplit && this.split(this.vars);\n let orig = [], timerId, checkWidths = () => {\n let i = orig.length, o;\n while (i--) {\n o = orig[i];\n let w = o.element.offsetWidth;\n if (w !== o.width) {\n o.width = w;\n this._split();\n return;\n }\n }\n };\n this._data = { orig, obs: typeof ResizeObserver !== \"undefined\" && new ResizeObserver(() => {\n clearTimeout(timerId);\n timerId = setTimeout(checkWidths, 200);\n }) };\n _context(this);\n this.split(config);\n }\n split(config) {\n (this._ctx || _defaultContext).add(() => {\n this.isSplit && this.revert();\n this.vars = config = config || this.vars || {};\n let { type = \"chars,words,lines\", aria = \"auto\", deepSlice = true, smartWrap, onSplit, autoSplit = false, specialChars, mask } = this.vars, splitLines = type.indexOf(\"lines\") > -1, splitCharacters = type.indexOf(\"chars\") > -1, splitWords = type.indexOf(\"words\") > -1, onlySplitCharacters = splitCharacters && !splitWords && !splitLines, specialCharsRegEx = specialChars && (\"push\" in specialChars ? new RegExp(\"(?:\" + specialChars.join(\"|\") + \")\", \"gu\") : specialChars), finalCharSplitRegEx = specialCharsRegEx ? new RegExp(specialCharsRegEx.source + \"|\" + _emojiSafeRegEx.source, \"gu\") : _emojiSafeRegEx, ignore = !!config.ignore && _elements(config.ignore), { orig, animTime, obs } = this._data, onSplitResult;\n if (splitCharacters || splitWords || splitLines) {\n this.elements.forEach((element, index) => {\n orig[index] = {\n element,\n html: element.innerHTML,\n ariaL: element.getAttribute(\"aria-label\"),\n ariaH: element.getAttribute(\"aria-hidden\")\n };\n aria === \"auto\" ? element.setAttribute(\"aria-label\", (element.textContent || \"\").trim()) : aria === \"hidden\" && element.setAttribute(\"aria-hidden\", \"true\");\n let chars = [], words = [], lines = [], charWrapper = splitCharacters ? _getWrapper(\"char\", config, chars) : null, wordWrapper = _getWrapper(\"word\", config, words), i, curWord, smartWrapSpan, nextSibling;\n _splitWordsAndCharsRecursively(element, config, wordWrapper, charWrapper, onlySplitCharacters, deepSlice && (splitLines || onlySplitCharacters), ignore, finalCharSplitRegEx, specialCharsRegEx, false);\n if (splitLines) {\n let nodes = _toArray(element.childNodes), wrapLine = _getLineWrapper(element, nodes, config, lines), curNode, toRemove = [], lineStartIndex = 0, allBounds = nodes.map((n) => n.nodeType === 1 ? n.getBoundingClientRect() : _emptyBounds), lastBounds = _emptyBounds, curBounds;\n for (i = 0; i < nodes.length; i++) {\n curNode = nodes[i];\n if (curNode.nodeType === 1) {\n if (curNode.nodeName === \"BR\") {\n if (!i || nodes[i - 1].nodeName !== \"BR\") {\n toRemove.push(curNode);\n wrapLine(lineStartIndex, i + 1);\n }\n lineStartIndex = i + 1;\n lastBounds = _findNextValidBounds(allBounds, i);\n } else {\n curBounds = allBounds[i];\n if (i && curBounds.top > lastBounds.top && curBounds.left < lastBounds.left + lastBounds.width - 1) {\n wrapLine(lineStartIndex, i);\n lineStartIndex = i;\n }\n lastBounds = curBounds;\n }\n }\n }\n lineStartIndex < i && wrapLine(lineStartIndex, i);\n toRemove.forEach((el) => {\n var _a;\n return (_a = el.parentNode) == null ? void 0 : _a.removeChild(el);\n });\n }\n if (!splitWords) {\n for (i = 0; i < words.length; i++) {\n curWord = words[i];\n if (splitCharacters || !curWord.nextSibling || curWord.nextSibling.nodeType !== 3) {\n if (smartWrap && !splitLines) {\n smartWrapSpan = document.createElement(\"span\");\n smartWrapSpan.style.whiteSpace = \"nowrap\";\n while (curWord.firstChild) {\n smartWrapSpan.appendChild(curWord.firstChild);\n }\n curWord.replaceWith(smartWrapSpan);\n } else {\n curWord.replaceWith(...curWord.childNodes);\n }\n } else {\n nextSibling = curWord.nextSibling;\n if (nextSibling && nextSibling.nodeType === 3) {\n nextSibling.textContent = (curWord.textContent || \"\") + (nextSibling.textContent || \"\");\n curWord.remove();\n }\n }\n }\n words.length = 0;\n element.normalize();\n }\n this.lines.push(...lines);\n this.words.push(...words);\n this.chars.push(...chars);\n });\n mask && this[mask] && this.masks.push(...this[mask].map((el) => {\n let maskEl = el.cloneNode();\n el.replaceWith(maskEl);\n maskEl.appendChild(el);\n el.className && (maskEl.className = el.className.trim() + \"-mask\");\n maskEl.style.overflow = \"clip\";\n return maskEl;\n }));\n }\n this.isSplit = true;\n _fonts && splitLines && (autoSplit ? _fonts.addEventListener(\"loadingdone\", this._split) : _fonts.status === \"loading\" && console.warn(\"SplitText called before fonts loaded\"));\n if ((onSplitResult = onSplit && onSplit(this)) && onSplitResult.totalTime) {\n this._data.anim = animTime ? onSplitResult.totalTime(animTime) : onSplitResult;\n }\n splitLines && autoSplit && this.elements.forEach((element, index) => {\n orig[index].width = element.offsetWidth;\n obs && obs.observe(element);\n });\n });\n return this;\n }\n kill() {\n let { obs } = this._data;\n obs && obs.disconnect();\n _fonts == null ? void 0 : _fonts.removeEventListener(\"loadingdone\", this._split);\n }\n revert() {\n var _a, _b;\n if (this.isSplit) {\n let { orig, anim } = this._data;\n this.kill();\n orig.forEach(_revertOriginal);\n this.chars.length = this.words.length = this.lines.length = orig.length = this.masks.length = 0;\n this.isSplit = false;\n if (anim) {\n this._data.animTime = anim.totalTime();\n anim.revert();\n }\n (_b = (_a = this.vars).onRevert) == null ? void 0 : _b.call(_a, this);\n }\n return this;\n }\n static create(elements, config) {\n return new _SplitText(elements, config);\n }\n static register(core) {\n gsap = gsap || core || window.gsap;\n if (gsap) {\n _toArray = gsap.utils.toArray;\n _context = gsap.core.context || _context;\n }\n if (!_coreInitted && window.innerWidth > 0) {\n _fonts = document.fonts;\n _coreInitted = true;\n }\n }\n};\n_SplitText.version = \"3.14.2\";\nlet SplitText = _SplitText;\n\nexport { SplitText, SplitText as default };\n","/*!\n * strings: 3.14.2\n * https://gsap.com\n *\n * Copyright 2008-2025, GreenSock. All rights reserved.\n * Subject to the terms at https://gsap.com/standard-license\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nvar _trimExp = /(?:^\\s+|\\s+$)/g;\nexport var emojiExp = /([\\uD800-\\uDBFF][\\uDC00-\\uDFFF](?:[\\u200D\\uFE0F][\\uD800-\\uDBFF][\\uDC00-\\uDFFF]){2,}|\\uD83D\\uDC69(?:\\u200D(?:(?:\\uD83D\\uDC69\\u200D)?\\uD83D\\uDC67|(?:\\uD83D\\uDC69\\u200D)?\\uD83D\\uDC66)|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC69\\u200D)?\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC69\\u200D)?\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2642\\u2640]\\uFE0F|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDD27\\uDCBC\\uDD2C\\uDE80\\uDE92])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC6F\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3C-\\uDD3E\\uDDD6-\\uDDDF])\\u200D[\\u2640\\u2642]\\uFE0F|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|(?:\\u26F9|\\uD83C[\\uDFCC\\uDFCB]|\\uD83D\\uDD75)(?:\\uFE0F\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642])\\uFE0F|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2695\\u2696\\u2708]|\\uD83D\\uDC69\\u200D[\\u2695\\u2696\\u2708]|\\uD83D\\uDC68(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708]))\\uFE0F|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83D\\uDC69\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D)?\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D)?\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92])|(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]))|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDD1-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\u200D(?:(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D)?\\uD83D\\uDC67|(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D)?\\uD83D\\uDC66)|\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC69\\uDC6E\\uDC70-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3D\\uDD3E\\uDDD1-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])?|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDEEB\\uDEEC\\uDEF4-\\uDEF8]|\\uD83E[\\uDD10-\\uDD3A\\uDD3C-\\uDD3E\\uDD40-\\uDD45\\uDD47-\\uDD4C\\uDD50-\\uDD6B\\uDD80-\\uDD97\\uDDC0\\uDDD0-\\uDDE6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEF8]|\\uD83E[\\uDD10-\\uDD3A\\uDD3C-\\uDD3E\\uDD40-\\uDD45\\uDD47-\\uDD4C\\uDD50-\\uDD6B\\uDD80-\\uDD97\\uDDC0\\uDDD0-\\uDDE6])\\uFE0F)/;\nexport function getText(e) {\n var type = e.nodeType,\n result = \"\";\n\n if (type === 1 || type === 9 || type === 11) {\n if (typeof e.textContent === \"string\") {\n return e.textContent;\n } else {\n for (e = e.firstChild; e; e = e.nextSibling) {\n result += getText(e);\n }\n }\n } else if (type === 3 || type === 4) {\n return e.nodeValue;\n }\n\n return result;\n}\nexport function splitInnerHTML(element, delimiter, trim, preserveSpaces, unescapedCharCodes) {\n var node = element.firstChild,\n result = [],\n s;\n\n while (node) {\n if (node.nodeType === 3) {\n s = (node.nodeValue + \"\").replace(/^\\n+/g, \"\");\n\n if (!preserveSpaces) {\n s = s.replace(/\\s+/g, \" \");\n }\n\n result.push.apply(result, emojiSafeSplit(s, delimiter, trim, preserveSpaces, unescapedCharCodes));\n } else if ((node.nodeName + \"\").toLowerCase() === \"br\") {\n result[result.length - 1] += \"<br>\";\n } else {\n result.push(node.outerHTML);\n }\n\n node = node.nextSibling;\n }\n\n if (!unescapedCharCodes) {\n s = result.length;\n\n while (s--) {\n result[s] === \"&\" && result.splice(s, 1, \"&\");\n }\n }\n\n return result;\n}\n/*\n//smaller kb version that only handles the simpler emoji's, which is often perfectly adequate.\n\nlet _emoji = \"[\\uE000-\\uF8FF]|\\uD83C[\\uDC00-\\uDFFF]|\\uD83D[\\uDC00-\\uDFFF]|[\\u2694-\\u2697]|\\uD83E[\\uDD10-\\uDD5D]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]\",\n\t_emojiExp = new RegExp(_emoji),\n\t_emojiAndCharsExp = new RegExp(_emoji + \"|.\", \"g\"),\n\t_emojiSafeSplit = (text, delimiter, trim) => {\n\t\tif (trim) {\n\t\t\ttext = text.replace(_trimExp, \"\");\n\t\t}\n\t\treturn ((delimiter === \"\" || !delimiter) && _emojiExp.test(text)) ? text.match(_emojiAndCharsExp) : text.split(delimiter || \"\");\n\t};\n */\n\nexport function emojiSafeSplit(text, delimiter, trim, preserveSpaces, unescapedCharCodes) {\n text += \"\"; // make sure it's cast as a string. Someone may pass in a number.\n\n trim && (text = text.trim ? text.trim() : text.replace(_trimExp, \"\")); // IE9 and earlier compatibility\n\n if (delimiter && delimiter !== \"\") {\n return text.replace(/>/g, \">\").replace(/</g, \"<\").split(delimiter);\n }\n\n var result = [],\n l = text.length,\n i = 0,\n j,\n character;\n\n for (; i < l; i++) {\n character = text.charAt(i);\n\n if (character.charCodeAt(0) >= 0xD800 && character.charCodeAt(0) <= 0xDBFF || text.charCodeAt(i + 1) >= 0xFE00 && text.charCodeAt(i + 1) <= 0xFE0F) {\n //special emoji characters use 2 or 4 unicode characters that we must keep together.\n j = ((text.substr(i, 12).split(emojiExp) || [])[1] || \"\").length || 2;\n character = text.substr(i, j);\n result.emoji = 1;\n i += j - 1;\n }\n\n result.push(unescapedCharCodes ? character : character === \">\" ? \">\" : character === \"<\" ? \"<\" : preserveSpaces && character === \" \" && (text.charAt(i - 1) === \" \" || text.charAt(i + 1) === \" \") ? \" \" : character);\n }\n\n return result;\n}","/*!\n * ScrambleTextPlugin 3.14.2\n * https://gsap.com\n *\n * @license Copyright 2008-2025, GreenSock. All rights reserved.\n * Subject to the terms at https://gsap.com/standard-license\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nimport { emojiSafeSplit, getText } from \"./utils/strings.js\";\n\nvar CharSet = /*#__PURE__*/function () {\n function CharSet(chars) {\n this.chars = emojiSafeSplit(chars);\n this.sets = [];\n this.length = 50;\n\n for (var i = 0; i < 20; i++) {\n this.sets[i] = _scrambleText(80, this.chars); //we create 20 strings that are 80 characters long, randomly chosen and pack them into an array. We then randomly choose the scrambled text from this array in order to greatly improve efficiency compared to creating new randomized text from scratch each and every time it's needed. This is a simple lookup whereas the other technique requires looping through as many times as there are characters needed, and calling Math.random() each time through the loop, building the string, etc.\n }\n }\n\n var _proto = CharSet.prototype;\n\n _proto.grow = function grow(newLength) {\n //if we encounter a tween that has more than 80 characters, we'll need to add to the character sets accordingly. Once it's cached, it'll only need to grow again if we exceed that new length. Again, this is an efficiency tactic.\n for (var i = 0; i < 20; i++) {\n this.sets[i] += _scrambleText(newLength - this.length, this.chars);\n }\n\n this.length = newLength;\n };\n\n return CharSet;\n}();\n\nvar gsap,\n _coreInitted,\n _getGSAP = function _getGSAP() {\n return gsap || typeof window !== \"undefined\" && (gsap = window.gsap) && gsap.registerPlugin && gsap;\n},\n _bonusValidated = 1,\n //<name>ScrambleTextPlugin</name>\n_spacesExp = /\\s+/g,\n _scrambleText = function _scrambleText(length, chars) {\n var l = chars.length,\n s = \"\";\n\n while (--length > -1) {\n s += chars[~~(Math.random() * l)];\n }\n\n return s;\n},\n _upper = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n _lower = _upper.toLowerCase(),\n _charsLookup = {\n upperCase: new CharSet(_upper),\n lowerCase: new CharSet(_lower),\n upperAndLowerCase: new CharSet(_upper + _lower)\n},\n _initCore = function _initCore() {\n _coreInitted = gsap = _getGSAP();\n};\n\nexport var ScrambleTextPlugin = {\n version: \"3.14.2\",\n name: \"scrambleText\",\n register: function register(core, Plugin, propTween) {\n gsap = core;\n\n _initCore();\n },\n init: function init(target, value, tween, index, targets) {\n _coreInitted || _initCore();\n this.prop = \"innerHTML\" in target ? \"innerHTML\" : \"textContent\" in target ? \"textContent\" : 0; // SVG text in IE doesn't have innerHTML, but it does have textContent.\n\n if (!this.prop) {\n return;\n }\n\n this.target = target;\n\n if (typeof value !== \"object\") {\n value = {\n text: value\n };\n }\n\n var text = value.text || value.value || \"\",\n trim = value.trim !== false,\n data = this,\n delim,\n maxLength,\n charset,\n splitByChars;\n data.delimiter = delim = value.delimiter || \"\";\n data.original = emojiSafeSplit(getText(target).replace(_spacesExp, \" \").split(\" \").join(\"\"), delim, trim);\n\n if (text === \"{original}\" || text === true || text == null) {\n text = data.original.join(delim);\n }\n\n data.text = emojiSafeSplit((text || \"\").replace(_spacesExp, \" \"), delim, trim);\n data.hasClass = !!(value.newClass || value.oldClass);\n data.newClass = value.newClass;\n data.oldClass = value.oldClass;\n splitByChars = delim === \"\";\n data.textHasEmoji = splitByChars && !!data.text.emoji;\n data.charsHaveEmoji = !!value.chars && !!emojiSafeSplit(value.chars).emoji;\n data.length = splitByChars ? data.original.length : data.original.join(delim).length;\n data.lengthDif = (splitByChars ? data.text.length : data.text.join(delim).length) - data.length;\n data.fillChar = value.fillChar || value.chars && ~value.chars.indexOf(\" \") ? \" \" : \"\";\n data.charSet = charset = _charsLookup[value.chars || \"upperCase\"] || new CharSet(value.chars);\n data.speed = 0.05 / (value.speed || 1);\n data.prevScrambleTime = 0;\n data.setIndex = Math.random() * 20 | 0;\n maxLength = data.length + Math.max(data.lengthDif, 0);\n\n if (maxLength > charset.length) {\n charset.grow(maxLength);\n }\n\n data.chars = charset.sets[data.setIndex];\n data.revealDelay = value.revealDelay || 0;\n data.tweenLength = value.tweenLength !== false;\n data.tween = tween;\n data.rightToLeft = !!value.rightToLeft;\n\n data._props.push(\"scrambleText\", \"text\");\n\n return _bonusValidated;\n },\n render: function render(ratio, data) {\n var target = data.target,\n prop = data.prop,\n text = data.text,\n delimiter = data.delimiter,\n tween = data.tween,\n prevScrambleTime = data.prevScrambleTime,\n revealDelay = data.revealDelay,\n setIndex = data.setIndex,\n chars = data.chars,\n charSet = data.charSet,\n length = data.length,\n textHasEmoji = data.textHasEmoji,\n charsHaveEmoji = data.charsHaveEmoji,\n lengthDif = data.lengthDif,\n tweenLength = data.tweenLength,\n oldClass = data.oldClass,\n newClass = data.newClass,\n rightToLeft = data.rightToLeft,\n fillChar = data.fillChar,\n speed = data.speed,\n original = data.original,\n hasClass = data.hasClass,\n l = text.length,\n time = tween._time,\n timeDif = time - prevScrambleTime,\n i,\n i2,\n startText,\n endText,\n applyNew,\n applyOld,\n str,\n startClass,\n endClass,\n position,\n r;\n\n if (revealDelay) {\n if (tween._from) {\n time = tween._dur - time; //invert the time for from() tweens\n }\n\n ratio = time === 0 ? 0 : time < revealDelay ? 0.000001 : time === tween._dur ? 1 : tween._ease((time - revealDelay) / (tween._dur - revealDelay));\n }\n\n if (ratio < 0) {\n ratio = 0;\n } else if (ratio > 1) {\n ratio = 1;\n }\n\n if (rightToLeft) {\n ratio = 1 - ratio;\n }\n\n i = ~~(ratio * l + 0.5);\n\n if (ratio) {\n if (timeDif > speed || timeDif < -speed) {\n data.setIndex = setIndex = (setIndex + (Math.random() * 19 | 0)) % 20;\n data.chars = charSet.sets[setIndex];\n data.prevScrambleTime += timeDif;\n }\n\n endText = chars;\n } else {\n endText = original.join(delimiter);\n }\n\n r = tween._from ? ratio : 1 - ratio;\n position = length + (tweenLength ? tween._from ? r * r * r : 1 - r * r * r : 1) * lengthDif;\n\n if (rightToLeft) {\n if (ratio === 1 && (tween._from || tween.data === \"isFromStart\")) {\n //special case for from() tweens\n startText = \"\";\n endText = original.join(delimiter);\n } else {\n str = text.slice(i).join(delimiter);\n\n if (charsHaveEmoji) {\n startText = emojiSafeSplit(endText).slice(0, position - (textHasEmoji ? emojiSafeSplit(str) : str).length + 0.5 | 0).join(\"\");\n } else {\n startText = endText.substr(0, position - (textHasEmoji ? emojiSafeSplit(str) : str).length + 0.5 | 0);\n }\n\n endText = str;\n }\n } else {\n startText = text.slice(0, i).join(delimiter);\n i2 = (textHasEmoji ? emojiSafeSplit(startText) : startText).length;\n\n if (charsHaveEmoji) {\n endText = emojiSafeSplit(endText).slice(i2, position + 0.5 | 0).join(\"\");\n } else {\n endText = endText.substr(i2, position - i2 + 0.5 | 0);\n }\n }\n\n if (hasClass) {\n startClass = rightToLeft ? oldClass : newClass;\n endClass = rightToLeft ? newClass : oldClass;\n applyNew = startClass && i !== 0;\n applyOld = endClass && i !== l;\n str = (applyNew ? \"<span class='\" + startClass + \"'>\" : \"\") + startText + (applyNew ? \"</span>\" : \"\") + (applyOld ? \"<span class='\" + endClass + \"'>\" : \"\") + delimiter + endText + (applyOld ? \"</span>\" : \"\");\n } else {\n str = startText + delimiter + endText;\n }\n\n target[prop] = fillChar === \" \" && ~str.indexOf(\" \") ? str.split(\" \").join(\" \") : str;\n }\n};\nScrambleTextPlugin.emojiSafeSplit = emojiSafeSplit;\nScrambleTextPlugin.getText = getText;\n_getGSAP() && gsap.registerPlugin(ScrambleTextPlugin);\nexport { ScrambleTextPlugin as default };","/**\n[PURPOSE]: 扰动文字组件,鼠标悬停时文字字符随机变换\n[INPUT]: (radius, duration, speed, scrambleChars, children) - 影响半径、动画时长、速度、扰动字符、文本内容\n[OUTPUT]: 鼠标移动时触发字符扰动动画的文本\n[POS]: 位于 /src/components,作为文本动画示例组件\n\n[PROTOCOL]:\n1. 一旦本文件逻辑变更,必须同步更新此 Header。\n2. 更新后必须上浮检查 /src/components/.folder.md 的描述是否依然准确。\n*/\n\nimport { useEffect, useRef } from 'react';\nimport { gsap } from 'gsap';\nimport { SplitText } from 'gsap/SplitText';\nimport { ScrambleTextPlugin } from 'gsap/ScrambleTextPlugin';\n\ngsap.registerPlugin(SplitText, ScrambleTextPlugin);\n\nconst ScrambledText = ({\n radius = 100,\n duration = 1.2,\n speed = 0.5,\n scrambleChars = '.:',\n className = '',\n style = {},\n children\n}) => {\n const rootRef = useRef(null);\n\n useEffect(() => {\n if (!rootRef.current) return;\n\n const split = SplitText.create(rootRef.current.querySelector('p'), {\n type: 'chars',\n charsClass: 'inline-block will-change-transform'\n });\n\n split.chars.forEach(el => {\n const c = el;\n gsap.set(c, { attr: { 'data-content': c.innerHTML } });\n });\n\n const handleMove = e => {\n split.chars.forEach(el => {\n const c = el;\n const { left, top, width, height } = c.getBoundingClientRect();\n const dx = e.clientX - (left + width / 2);\n const dy = e.clientY - (top + height / 2);\n const dist = Math.hypot(dx, dy);\n\n if (dist < radius) {\n gsap.to(c, {\n overwrite: true,\n duration: duration * (1 - dist / radius),\n scrambleText: {\n text: c.dataset.content || '',\n chars: scrambleChars,\n speed\n },\n ease: 'none'\n });\n }\n });\n };\n\n const el = rootRef.current;\n el.addEventListener('pointermove', handleMove);\n\n return () => {\n el.removeEventListener('pointermove', handleMove);\n split.revert();\n };\n }, [radius, duration, speed, scrambleChars]);\n\n return (\n <div\n ref={rootRef}\n className={`m-[7vw] max-w-[800px] font-mono text-[clamp(14px,4vw,32px)] text-white ${className}`}\n style={style}\n >\n <p>{children}</p>\n </div>\n );\n};\n\n// 示例组件用于展示\nconst ScrambledTextDemo = () => {\n return (\n <div className=\"flex flex-col items-center gap-8 w-full\">\n <ScrambledText\n radius={120}\n duration={1.5}\n speed={0.6}\n scrambleChars=\"!<>-_\\\\/[]{}—=+*^?#________\"\n >\n Move your cursor over this text to see the scramble effect!\n </ScrambledText>\n \n <ScrambledText\n radius={100}\n duration={1.2}\n speed={0.5}\n scrambleChars=\"01\"\n className=\"text-green-400\"\n >\n Binary scramble effect with 0 and 1 characters\n </ScrambledText>\n </div>\n );\n};\n\n// 组件源代码字符串\nexport const scrambledTextCode = `import { useEffect, useRef } from 'react';\nimport { gsap } from 'gsap';\nimport { SplitText } from 'gsap/SplitText';\nimport { ScrambleTextPlugin } from 'gsap/ScrambleTextPlugin';\n\ngsap.registerPlugin(SplitText, ScrambleTextPlugin);\n\nconst ScrambledText = ({\n radius = 100,\n duration = 1.2,\n speed = 0.5,\n scrambleChars = '.:',\n className = '',\n style = {},\n children\n}) => {\n const rootRef = useRef(null);\n\n useEffect(() => {\n if (!rootRef.current) return;\n\n const split = SplitText.create(rootRef.current.querySelector('p'), {\n type: 'chars',\n charsClass: 'inline-block will-change-transform'\n });\n\n split.chars.forEach(el => {\n const c = el;\n gsap.set(c, { attr: { 'data-content': c.innerHTML } });\n });\n\n const handleMove = e => {\n split.chars.forEach(el => {\n const c = el;\n const { left, top, width, height } = c.getBoundingClientRect();\n const dx = e.clientX - (left + width / 2);\n const dy = e.clientY - (top + height / 2);\n const dist = Math.hypot(dx, dy);\n\n if (dist < radius) {\n gsap.to(c, {\n overwrite: true,\n duration: duration * (1 - dist / radius),\n scrambleText: {\n text: c.dataset.content || '',\n chars: scrambleChars,\n speed\n },\n ease: 'none'\n });\n }\n });\n };\n\n const el = rootRef.current;\n el.addEventListener('pointermove', handleMove);\n\n return () => {\n el.removeEventListener('pointermove', handleMove);\n split.revert();\n };\n }, [radius, duration, speed, scrambleChars]);\n\n return (\n <div\n ref={rootRef}\n className={\\`m-[7vw] max-w-[800px] font-mono text-white \\${className}\\`}\n style={style}\n >\n <p>{children}</p>\n </div>\n );\n};\n\n// 使用示例\nconst Demo = () => (\n <ScrambledText\n radius={120}\n duration={1.5}\n scrambleChars=\"!<>-_\\\\\\\\/[]{}—=+*^?#\"\n >\n Move your cursor to see the effect!\n </ScrambledText>\n);`;\n\nexport default ScrambledTextDemo;\n","/**\n[PURPOSE]: 流动虚线边框矩形组件,支持方向、速度、颜色和虚线样式自定义\n[INPUT]: (direction, speed, color, dashLength, gapLength, width, height, strokeWidth) - 流动方向、速度、颜色、虚线长度、间隔、尺寸、线宽\n[OUTPUT]: 带有流动虚线边框的矩形动画\n[POS]: 位于 /src/components,作为边框动画示例组件\n\n[PROTOCOL]:\n1. 一旦本文件逻辑变更,必须同步更新此 Header。\n2. 更新后必须上浮检查 /src/components/.folder.md 的描述是否依然准确。\n*/\n\nimport { useEffect, useRef, useState } from 'react';\nimport { motion } from 'framer-motion';\n\nconst FlowingDashedBox = ({\n direction = 'clockwise',\n speed = 2,\n color = '#6366f1',\n dashLength = 10,\n gapLength = 5,\n width = 300,\n height = 200,\n strokeWidth = 2,\n borderRadius = 0\n}) => {\n const pathRef = useRef(null);\n\n useEffect(() => {\n if (!pathRef.current) return;\n\n const path = pathRef.current;\n const totalLength = path.getTotalLength();\n \n // 设置初始虚线偏移\n path.style.strokeDasharray = `${dashLength} ${gapLength}`;\n path.style.strokeDashoffset = direction === 'clockwise' ? totalLength : 0;\n\n let animationId;\n let offset = direction === 'clockwise' ? totalLength : 0;\n const step = direction === 'clockwise' ? -speed : speed;\n\n const animate = () => {\n offset += step;\n \n // 循环动画\n if (direction === 'clockwise') {\n if (offset <= -(dashLength + gapLength)) {\n offset = 0;\n }\n } else {\n if (offset >= dashLength + gapLength) {\n offset = 0;\n }\n }\n \n path.style.strokeDashoffset = offset;\n animationId = requestAnimationFrame(animate);\n };\n\n animationId = requestAnimationFrame(animate);\n\n return () => {\n if (animationId) {\n cancelAnimationFrame(animationId);\n }\n };\n }, [direction, speed, dashLength, gapLength]);\n\n return (\n <svg\n width={width + strokeWidth * 2}\n height={height + strokeWidth * 2}\n className=\"overflow-visible\"\n >\n <motion.rect\n ref={pathRef}\n x={strokeWidth}\n y={strokeWidth}\n width={width}\n height={height}\n rx={borderRadius}\n ry={borderRadius}\n fill=\"transparent\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.5 }}\n />\n </svg>\n );\n};\n\n// 示例组件用于展示\nconst FlowingDashedBoxDemo = () => {\n const [config, setConfig] = useState({\n direction: 'clockwise',\n speed: 2,\n color: '#6366f1',\n dashLength: 15,\n gapLength: 8,\n width: 300,\n height: 200,\n strokeWidth: 3,\n borderRadius: 20\n });\n\n const handleChange = (key, value) => {\n setConfig(prev => ({ ...prev, [key]: value }));\n };\n\n return (\n <div className=\"w-full space-y-8\">\n {/* 预览区域 */}\n <div className=\"flex items-center justify-center min-h-[300px] bg-gray-900/30 rounded-xl border border-gray-800 p-8\">\n <FlowingDashedBox {...config} />\n </div>\n\n {/* 控制面板 */}\n <div className=\"bg-gray-800/50 rounded-xl border border-gray-700 p-6 space-y-6\">\n <h3 className=\"text-lg font-semibold text-white mb-4\">参数调整</h3>\n\n {/* 方向控制 */}\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-gray-300\">流动方向</label>\n <div className=\"flex gap-4\">\n <button\n onClick={() => handleChange('direction', 'clockwise')}\n className={`px-4 py-2 rounded-lg font-medium transition-all ${\n config.direction === 'clockwise'\n ? 'bg-indigo-600 text-white'\n : 'bg-gray-700 text-gray-300 hover:bg-gray-600'\n }`}\n >\n 顺时针\n </button>\n <button\n onClick={() => handleChange('direction', 'counterclockwise')}\n className={`px-4 py-2 rounded-lg font-medium transition-all ${\n config.direction === 'counterclockwise'\n ? 'bg-indigo-600 text-white'\n : 'bg-gray-700 text-gray-300 hover:bg-gray-600'\n }`}\n >\n 逆时针\n </button>\n </div>\n </div>\n\n {/* 速度控制 */}\n <div className=\"space-y-2\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm font-medium text-gray-300\">流动速度</label>\n <input\n type=\"number\"\n value={config.speed}\n onChange={(e) => handleChange('speed', parseFloat(e.target.value))}\n className=\"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none\"\n min=\"0.1\"\n max=\"10\"\n step=\"0.1\"\n />\n </div>\n <input\n type=\"range\"\n value={config.speed}\n onChange={(e) => handleChange('speed', parseFloat(e.target.value))}\n className=\"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600\"\n min=\"0.1\"\n max=\"10\"\n step=\"0.1\"\n />\n </div>\n\n {/* 虚线长度 */}\n <div className=\"space-y-2\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm font-medium text-gray-300\">实线长度</label>\n <input\n type=\"number\"\n value={config.dashLength}\n onChange={(e) => handleChange('dashLength', parseInt(e.target.value))}\n className=\"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none\"\n min=\"1\"\n max=\"50\"\n />\n </div>\n <input\n type=\"range\"\n value={config.dashLength}\n onChange={(e) => handleChange('dashLength', parseInt(e.target.value))}\n className=\"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600\"\n min=\"1\"\n max=\"50\"\n />\n </div>\n\n {/* 间隔长度 */}\n <div className=\"space-y-2\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm font-medium text-gray-300\">间隔长度</label>\n <input\n type=\"number\"\n value={config.gapLength}\n onChange={(e) => handleChange('gapLength', parseInt(e.target.value))}\n className=\"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none\"\n min=\"1\"\n max=\"50\"\n />\n </div>\n <input\n type=\"range\"\n value={config.gapLength}\n onChange={(e) => handleChange('gapLength', parseInt(e.target.value))}\n className=\"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600\"\n min=\"1\"\n max=\"50\"\n />\n </div>\n\n {/* 线条粗细 */}\n <div className=\"space-y-2\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm font-medium text-gray-300\">线条粗细</label>\n <input\n type=\"number\"\n value={config.strokeWidth}\n onChange={(e) => handleChange('strokeWidth', parseInt(e.target.value))}\n className=\"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none\"\n min=\"1\"\n max=\"10\"\n />\n </div>\n <input\n type=\"range\"\n value={config.strokeWidth}\n onChange={(e) => handleChange('strokeWidth', parseInt(e.target.value))}\n className=\"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600\"\n min=\"1\"\n max=\"10\"\n />\n </div>\n\n {/* 圆角半径 */}\n <div className=\"space-y-2\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm font-medium text-gray-300\">圆角半径</label>\n <input\n type=\"number\"\n value={config.borderRadius}\n onChange={(e) => handleChange('borderRadius', parseInt(e.target.value))}\n className=\"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none\"\n min=\"0\"\n max=\"100\"\n />\n </div>\n <input\n type=\"range\"\n value={config.borderRadius}\n onChange={(e) => handleChange('borderRadius', parseInt(e.target.value))}\n className=\"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600\"\n min=\"0\"\n max=\"100\"\n />\n </div>\n\n {/* 尺寸控制 */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm font-medium text-gray-300\">宽度</label>\n <input\n type=\"number\"\n value={config.width}\n onChange={(e) => handleChange('width', parseInt(e.target.value))}\n className=\"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none\"\n min=\"50\"\n max=\"600\"\n />\n </div>\n <input\n type=\"range\"\n value={config.width}\n onChange={(e) => handleChange('width', parseInt(e.target.value))}\n className=\"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600\"\n min=\"50\"\n max=\"600\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm font-medium text-gray-300\">高度</label>\n <input\n type=\"number\"\n value={config.height}\n onChange={(e) => handleChange('height', parseInt(e.target.value))}\n className=\"w-20 px-3 py-1 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none\"\n min=\"50\"\n max=\"400\"\n />\n </div>\n <input\n type=\"range\"\n value={config.height}\n onChange={(e) => handleChange('height', parseInt(e.target.value))}\n className=\"w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer accent-indigo-600\"\n min=\"50\"\n max=\"400\"\n />\n </div>\n </div>\n\n {/* 颜色选择 */}\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-gray-300\">边框颜色</label>\n <div className=\"flex gap-3 items-center\">\n <input\n type=\"color\"\n value={config.color}\n onChange={(e) => handleChange('color', e.target.value)}\n className=\"w-12 h-12 rounded-lg cursor-pointer bg-gray-700 border-2 border-gray-600\"\n />\n <input\n type=\"text\"\n value={config.color}\n onChange={(e) => handleChange('color', e.target.value)}\n className=\"flex-1 px-3 py-2 bg-gray-700 text-white rounded-lg border border-gray-600 focus:border-indigo-500 focus:outline-none font-mono\"\n placeholder=\"#6366f1\"\n />\n </div>\n </div>\n\n {/* 预设颜色 */}\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-gray-300\">快速选择颜色</label>\n <div className=\"flex gap-2 flex-wrap\">\n {['#6366f1', '#ec4899', '#10b981', '#f59e0b', '#8b5cf6', '#ef4444'].map(color => (\n <button\n key={color}\n onClick={() => handleChange('color', color)}\n className=\"w-10 h-10 rounded-lg border-2 transition-all hover:scale-110\"\n style={{\n backgroundColor: color,\n borderColor: config.color === color ? '#fff' : color\n }}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\n// 组件源代码字符串\nexport const flowingDashedBoxCode = `import { useEffect, useRef } from 'react';\nimport { motion } from 'framer-motion';\n\nconst FlowingDashedBox = ({\n direction = 'clockwise', // 流动方向:'clockwise' | 'counterclockwise'\n speed = 2, // 流动速度\n color = '#6366f1', // 边框颜色\n dashLength = 10, // 虚线实线部分长度\n gapLength = 5, // 虚线间隔长度\n width = 300, // 矩形宽度\n height = 200, // 矩形高度\n strokeWidth = 2, // 线条粗细\n borderRadius = 0 // 圆角半径\n}) => {\n const pathRef = useRef(null);\n\n useEffect(() => {\n if (!pathRef.current) return;\n\n const path = pathRef.current;\n const totalLength = path.getTotalLength();\n \n // 设置初始虚线偏移\n path.style.strokeDasharray = \\`\\${dashLength} \\${gapLength}\\`;\n path.style.strokeDashoffset = direction === 'clockwise' ? totalLength : 0;\n\n let animationId;\n let offset = direction === 'clockwise' ? totalLength : 0;\n const step = direction === 'clockwise' ? -speed : speed;\n\n const animate = () => {\n offset += step;\n \n // 循环动画\n if (direction === 'clockwise') {\n if (offset <= -(dashLength + gapLength)) {\n offset = 0;\n }\n } else {\n if (offset >= dashLength + gapLength) {\n offset = 0;\n }\n }\n \n path.style.strokeDashoffset = offset;\n animationId = requestAnimationFrame(animate);\n };\n\n animationId = requestAnimationFrame(animate);\n\n return () => {\n if (animationId) {\n cancelAnimationFrame(animationId);\n }\n };\n }, [direction, speed, dashLength, gapLength]);\n\n return (\n <svg\n width={width + strokeWidth * 2}\n height={height + strokeWidth * 2}\n className=\"overflow-visible\"\n >\n <motion.rect\n ref={pathRef}\n x={strokeWidth}\n y={strokeWidth}\n width={width}\n height={height}\n rx={borderRadius}\n ry={borderRadius}\n fill=\"transparent\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.5 }}\n />\n </svg>\n );\n};\n\n// 使用示例\nconst Demo = () => (\n <div className=\"flex gap-8\">\n <FlowingDashedBox\n direction=\"clockwise\"\n speed={3}\n color=\"#6366f1\"\n dashLength={15}\n gapLength={8}\n />\n <FlowingDashedBox\n direction=\"counterclockwise\"\n speed={2}\n color=\"#ec4899\"\n dashLength={20}\n gapLength={10}\n />\n </div>\n);\n\nexport default FlowingDashedBox;`;\n\nexport default FlowingDashedBoxDemo;\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","GlowCard","jsx","motion","jsxs","BounceIn","containerVariants","itemVariants","buttons","text","index","buildKeyframes","from","steps","s","keyframes","BlurText","delay","className","animateBy","direction","threshold","rootMargin","animationFrom","animationTo","easing","t","onAnimationComplete","stepDuration","elements","inView","setInView","useState","ref","useRef","useEffect","observer","entry","defaultFrom","useMemo","defaultTo","fromSnapshot","toSnapshots","stepCount","totalDuration","times","_","i","segment","animateKeyframes","spanTransition","BlurTextDemo","getRotationTransition","duration","loop","getTransition","CircularText","spinDuration","onHover","letters","controls","useAnimation","rotation","useMotionValue","start","handleHoverStart","transitionConfig","scaleVal","handleHoverEnd","letter","rotationDeg","factor","x","y","transform","CircularTextDemo","gsap","_fonts","_splitProp","_coreInitted","_initIfNecessary","SplitText","_charSegmenter","_toArray","r","acc","cur","_elements","targets","e","_emptyArray","_context","_defaultContext","f","_spacesRegEx","_emojiSafeRegEx","_emptyBounds","_findNextValidBounds","allBounds","startIndex","_revertOriginal","element","html","ariaL","ariaH","_stretchToFitSpecialChars","collection","specialCharsRegEx","charsFound","slots","word","char","combined","_disallowInline","_insertNodeBefore","newChild","parent","existingChild","_getWrapper","tag","aria","propIndex","display","incrementClass","wrapper","el","_getLineWrapper","nodes","lineWrapper","textAlign","endIndex","newLine","_splitWordsAndCharsRecursively","wordWrapper","charWrapper","prepForCharsOnly","deepSlice","ignore","charSplitRegEx","isNested","_a","wordDelimiter","reduceWhiteSpace","prepareText","elementBounds","lastBounds","isPreformatted","ignoredPreviousSibling","wordsCollection","wordDelimIsNotSpace","wordDelimString","wordDelimSplitter","curNode","words","curWordEl","startsWithSpace","endsWithSpace","j","bounds","curWordChars","clonedNode","curSubNode","tempSubNode","curTextContent","wordText","lastWordText","_SplitText","orig","timerId","checkWidths","o","w","smartWrap","onSplit","autoSplit","specialChars","mask","splitLines","splitCharacters","splitWords","onlySplitCharacters","finalCharSplitRegEx","animTime","obs","onSplitResult","chars","lines","curWord","smartWrapSpan","nextSibling","wrapLine","toRemove","lineStartIndex","n","curBounds","maskEl","_b","anim","core","_trimExp","emojiExp","getText","result","emojiSafeSplit","delimiter","trim","preserveSpaces","unescapedCharCodes","l","character","CharSet","_scrambleText","_proto","newLength","_getGSAP","_bonusValidated","_spacesExp","length","_upper","_lower","_charsLookup","_initCore","ScrambleTextPlugin","Plugin","propTween","target","tween","data","delim","maxLength","charset","splitByChars","ratio","prop","prevScrambleTime","revealDelay","setIndex","charSet","textHasEmoji","charsHaveEmoji","lengthDif","tweenLength","oldClass","newClass","rightToLeft","fillChar","speed","original","hasClass","time","timeDif","i2","startText","endText","applyNew","applyOld","str","startClass","endClass","position","ScrambledText","radius","scrambleChars","style","rootRef","split","c","handleMove","left","top","width","height","dx","dy","dist","ScrambledTextDemo","FlowingDashedBox","color","dashLength","gapLength","strokeWidth","borderRadius","pathRef","path","totalLength","animationId","offset","step","animate","FlowingDashedBoxDemo","setConfig","handleChange","prev"],"mappings":"yNAWA,IAAIA,EAAqB,OAAO,IAAI,4BAA4B,EAC9DC,EAAsB,OAAO,IAAI,gBAAgB,EACnD,SAASC,EAAQC,EAAMC,EAAQC,EAAU,CACvC,IAAIC,EAAM,KAGV,GAFWD,IAAX,SAAwBC,EAAM,GAAKD,GACxBD,EAAO,MAAlB,SAA0BE,EAAM,GAAKF,EAAO,KACxC,QAASA,EAAQ,CACnBC,EAAW,CAAA,EACX,QAASE,KAAYH,EACTG,IAAV,QAAuBF,EAASE,CAAQ,EAAIH,EAAOG,CAAQ,EACjE,MAASF,EAAWD,EAClB,OAAAA,EAASC,EAAS,IACX,CACL,SAAUL,EACV,KAAMG,EACN,IAAKG,EACL,IAAgBF,IAAX,OAAoBA,EAAS,KAClC,MAAOC,EAEX,CACA,OAAAG,EAAA,SAAmBP,EACnBO,EAAA,IAAcN,EACdM,EAAA,KAAeN,mDCtBE,QAAQ,IAAI,WAA7B,eACG,UAAY,CACX,SAASO,EAAyBN,EAAM,CACtC,GAAYA,GAAR,KAAc,OAAO,KACzB,GAAmB,OAAOA,GAAtB,WACF,OAAOA,EAAK,WAAaO,EACrB,KACAP,EAAK,aAAeA,EAAK,MAAQ,KACvC,GAAiB,OAAOA,GAApB,SAA0B,OAAOA,EACrC,OAAQA,EAAI,CACV,KAAKF,EACH,MAAO,WACT,KAAKU,EACH,MAAO,WACT,KAAKC,EACH,MAAO,aACT,KAAKC,EACH,MAAO,WACT,KAAKC,EACH,MAAO,eACT,KAAKC,EACH,MAAO,UACjB,CACM,GAAiB,OAAOZ,GAApB,SACF,OACgB,OAAOA,EAAK,KAAzB,UACC,QAAQ,MACN,qHAEJA,EAAK,SACf,CACU,KAAKa,EACH,MAAO,SACT,KAAKC,EACH,OAAOd,EAAK,aAAe,UAC7B,KAAKe,EACH,OAAQf,EAAK,SAAS,aAAe,WAAa,YACpD,KAAKgB,EACH,IAAIC,EAAYjB,EAAK,OACrB,OAAAA,EAAOA,EAAK,YACZA,IACIA,EAAOiB,EAAU,aAAeA,EAAU,MAAQ,GACnDjB,EAAcA,IAAP,GAAc,cAAgBA,EAAO,IAAM,cAC9CA,EACT,KAAKkB,EACH,OACGD,EAAYjB,EAAK,aAAe,KACxBiB,IAAT,KACIA,EACAX,EAAyBN,EAAK,IAAI,GAAK,OAE/C,KAAKmB,EACHF,EAAYjB,EAAK,SACjBA,EAAOA,EAAK,MACZ,GAAI,CACF,OAAOM,EAAyBN,EAAKiB,CAAS,CAAC,CAC7D,MAAwB,CAAA,CACxB,CACM,OAAO,IACb,CACI,SAASG,EAAmBC,EAAO,CACjC,MAAO,GAAKA,CAClB,CACI,SAASC,EAAuBD,EAAO,CACrC,GAAI,CACFD,EAAmBC,CAAK,EACxB,IAAIE,EAA2B,EACvC,MAAkB,CACVA,EAA2B,EACnC,CACM,GAAIA,EAA0B,CAC5BA,EAA2B,QAC3B,IAAIC,EAAwBD,EAAyB,MACjDE,EACc,OAAO,QAAtB,YACC,OAAO,aACPJ,EAAM,OAAO,WAAW,GAC1BA,EAAM,YAAY,MAClB,SACF,OAAAG,EAAsB,KACpBD,EACA,2GACAE,GAEKL,EAAmBC,CAAK,CACvC,CACA,CACI,SAASK,EAAY1B,EAAM,CACzB,GAAIA,IAASF,EAAqB,MAAO,KACzC,GACe,OAAOE,GAApB,UACSA,IAAT,MACAA,EAAK,WAAamB,EAElB,MAAO,QACT,GAAI,CACF,IAAIQ,EAAOrB,EAAyBN,CAAI,EACxC,OAAO2B,EAAO,IAAMA,EAAO,IAAM,OACzC,MAAkB,CACV,MAAO,OACf,CACA,CACI,SAASC,GAAW,CAClB,IAAIC,EAAaC,EAAqB,EACtC,OAAgBD,IAAT,KAAsB,KAAOA,EAAW,SAAQ,CAC7D,CACI,SAASE,GAAe,CACtB,OAAO,MAAM,uBAAuB,CAC1C,CACI,SAASC,EAAY/B,EAAQ,CAC3B,GAAIgC,EAAe,KAAKhC,EAAQ,KAAK,EAAG,CACtC,IAAIiC,EAAS,OAAO,yBAAyBjC,EAAQ,KAAK,EAAE,IAC5D,GAAIiC,GAAUA,EAAO,eAAgB,MAAO,EACpD,CACM,OAAkBjC,EAAO,MAAlB,MACb,CACI,SAASkC,EAA2BC,EAAOC,EAAa,CACtD,SAASC,GAAwB,CAC/BC,IACIA,EAA6B,GAC/B,QAAQ,MACN,0OACAF,CACZ,EACA,CACMC,EAAsB,eAAiB,GACvC,OAAO,eAAeF,EAAO,MAAO,CAClC,IAAKE,EACL,aAAc,EACtB,CAAO,CACP,CACI,SAASE,GAAyC,CAChD,IAAIC,EAAgBnC,EAAyB,KAAK,IAAI,EACtD,OAAAoC,EAAuBD,CAAa,IAChCC,EAAuBD,CAAa,EAAI,GAC1C,QAAQ,MACN,6IACV,GACMA,EAAgB,KAAK,MAAM,IACTA,IAAX,OAA2BA,EAAgB,IACxD,CACI,SAASE,EAAa3C,EAAMG,EAAKiC,EAAOQ,EAAOC,EAAYC,GAAW,CACpE,IAAIC,EAAUX,EAAM,IACpB,OAAApC,EAAO,CACL,SAAUH,EACV,KAAMG,EACN,IAAKG,EACL,MAAOiC,EACP,OAAQQ,IAEWG,IAAX,OAAqBA,EAAU,QAAzC,KACI,OAAO,eAAe/C,EAAM,MAAO,CACjC,WAAY,GACZ,IAAKwC,EACN,EACD,OAAO,eAAexC,EAAM,MAAO,CAAE,WAAY,GAAI,MAAO,KAAM,EACtEA,EAAK,OAAS,CAAA,EACd,OAAO,eAAeA,EAAK,OAAQ,YAAa,CAC9C,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAO,CACf,CAAO,EACD,OAAO,eAAeA,EAAM,aAAc,CACxC,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAO,IACf,CAAO,EACD,OAAO,eAAeA,EAAM,cAAe,CACzC,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAO6C,CACf,CAAO,EACD,OAAO,eAAe7C,EAAM,aAAc,CACxC,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAO8C,EACf,CAAO,EACD,OAAO,SAAW,OAAO,OAAO9C,EAAK,KAAK,EAAG,OAAO,OAAOA,CAAI,GACxDA,CACb,CACI,SAASgD,EACPhD,EACAC,EACAC,EACA+C,EACAJ,EACAC,GACA,CACA,IAAII,EAAWjD,EAAO,SACtB,GAAeiD,IAAX,OACF,GAAID,EACF,GAAIE,EAAYD,CAAQ,EAAG,CACzB,IACED,EAAmB,EACnBA,EAAmBC,EAAS,OAC5BD,IAEAG,EAAkBF,EAASD,CAAgB,CAAC,EAC9C,OAAO,QAAU,OAAO,OAAOC,CAAQ,CACnD,MACY,QAAQ,MACN,6JAEDE,EAAkBF,CAAQ,EACjC,GAAIjB,EAAe,KAAKhC,EAAQ,KAAK,EAAG,CACtCiD,EAAW5C,EAAyBN,CAAI,EACxC,IAAIqD,EAAO,OAAO,KAAKpD,CAAM,EAAE,OAAO,SAAUqD,GAAG,CACjD,OAAiBA,KAAV,KACjB,CAAS,EACDL,EACE,EAAII,EAAK,OACL,kBAAoBA,EAAK,KAAK,SAAS,EAAI,SAC3C,iBACNE,EAAsBL,EAAWD,CAAgB,IAC7CI,EACA,EAAIA,EAAK,OAAS,IAAMA,EAAK,KAAK,SAAS,EAAI,SAAW,KAC5D,QAAQ,MACN;AAAA;AAAA;AAAA;AAAA;AAAA,mCACAJ,EACAC,EACAG,EACAH,GAEDK,EAAsBL,EAAWD,CAAgB,EAAI,GAChE,CAMM,GALAC,EAAW,KACAhD,IAAX,SACGoB,EAAuBpB,CAAQ,EAAIgD,EAAW,GAAKhD,GACtD8B,EAAY/B,CAAM,IACfqB,EAAuBrB,EAAO,GAAG,EAAIiD,EAAW,GAAKjD,EAAO,KAC3D,QAASA,EAAQ,CACnBC,EAAW,CAAA,EACX,QAASE,MAAYH,EACTG,KAAV,QAAuBF,EAASE,EAAQ,EAAIH,EAAOG,EAAQ,EACrE,MAAaF,EAAWD,EAClB,OAAAiD,GACEf,EACEjC,EACe,OAAOF,GAAtB,WACIA,EAAK,aAAeA,EAAK,MAAQ,UACjCA,GAED2C,EACL3C,EACAkD,EACAhD,EACA0B,EAAQ,EACRiB,EACAC,GAER,CACI,SAASM,EAAkBI,EAAM,CAC/BC,EAAeD,CAAI,EACfA,EAAK,SAAWA,EAAK,OAAO,UAAY,GAC3B,OAAOA,GAApB,UACSA,IAAT,MACAA,EAAK,WAAarC,IACDqC,EAAK,SAAS,SAA9B,YACGC,EAAeD,EAAK,SAAS,KAAK,GAClCA,EAAK,SAAS,MAAM,SACnBA,EAAK,SAAS,MAAM,OAAO,UAAY,GACxCA,EAAK,SAAWA,EAAK,OAAO,UAAY,GACtD,CACI,SAASC,EAAeC,EAAQ,CAC9B,OACe,OAAOA,GAApB,UACSA,IAAT,MACAA,EAAO,WAAa7D,CAE5B,CACI,IAAI8D,EAAQC,EACV/D,EAAqB,OAAO,IAAI,4BAA4B,EAC5DgB,EAAoB,OAAO,IAAI,cAAc,EAC7Cf,EAAsB,OAAO,IAAI,gBAAgB,EACjDW,EAAyB,OAAO,IAAI,mBAAmB,EACvDD,EAAsB,OAAO,IAAI,gBAAgB,EACjDO,EAAsB,OAAO,IAAI,gBAAgB,EACjDD,EAAqB,OAAO,IAAI,eAAe,EAC/CE,EAAyB,OAAO,IAAI,mBAAmB,EACvDN,EAAsB,OAAO,IAAI,gBAAgB,EACjDC,EAA2B,OAAO,IAAI,qBAAqB,EAC3DO,EAAkB,OAAO,IAAI,YAAY,EACzCC,EAAkB,OAAO,IAAI,YAAY,EACzCP,EAAsB,OAAO,IAAI,gBAAgB,EACjDL,EAAyB,OAAO,IAAI,wBAAwB,EAC5DuB,EACE6B,EAAM,gEACR1B,EAAiB,OAAO,UAAU,eAClCkB,EAAc,MAAM,QACpBU,EAAa,QAAQ,WACjB,QAAQ,WACR,UAAY,CACV,OAAO,IACnB,EACIF,EAAQ,CACN,yBAA0B,SAAUG,EAAmB,CACrD,OAAOA,EAAiB,CAChC,GAEI,IAAIvB,EACAG,EAAyB,CAAA,EACzBqB,EAAyBJ,EAAM,yBAAyB,KAC1DA,EACA5B,CACN,EAAK,EACGiC,EAAwBH,EAAWnC,EAAYK,CAAY,CAAC,EAC5DwB,EAAwB,CAAA,EAC5BU,EAAA,SAAmBnE,EACnBmE,EAAA,IAAc,SAAUjE,EAAMC,EAAQC,EAAU,CAC9C,IAAIgE,EACF,IAAMpC,EAAqB,6BAC7B,OAAOkB,EACLhD,EACAC,EACAC,EACA,GACAgE,EACI,MAAM,uBAAuB,EAC7BH,EACJG,EAAmBL,EAAWnC,EAAY1B,CAAI,CAAC,EAAIgE,EAE3D,EACIC,EAAA,KAAe,SAAUjE,EAAMC,EAAQC,EAAU,CAC/C,IAAIgE,EACF,IAAMpC,EAAqB,6BAC7B,OAAOkB,EACLhD,EACAC,EACAC,EACA,GACAgE,EACI,MAAM,uBAAuB,EAC7BH,EACJG,EAAmBL,EAAWnC,EAAY1B,CAAI,CAAC,EAAIgE,EAE3D,CACA,GAAG,2CC7VC,QAAQ,IAAI,WAAa,aAC3BG,GAAA,QAAiBP,GAAA,EAEjBO,GAAA,QAAiBC,GAAA,yBCQnB,MAAMC,GAAW,IAEbC,EAAAA,IAACC,EAAAA,OAAO,IAAP,CACC,UAAU,8DACV,MAAO,CACL,WAAY,gEACZ,eAAgB,WAAA,EAElB,QAAS,CACP,mBAAoB,CAAC,SAAU,WAAY,QAAQ,CAAA,EAErD,WAAY,CACV,SAAU,EACV,OAAQ,IACR,KAAM,QAAA,EAER,WAAY,CACV,MAAO,KACP,EAAG,GAAA,EAIL,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,+GAEb,SAAA,CAAAF,EAAAA,IAAC,MAAA,CAAI,UAAU,0JAAA,CAA2J,EAG1KE,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAF,EAAAA,IAAC,MAAA,CAAI,UAAU,8IAA8I,SAAA,IAE7J,EACAA,EAAAA,IAAC,KAAA,CAAG,UAAU,qCAAqC,SAAA,OAAI,EACvDE,EAAAA,KAAC,IAAA,CAAE,UAAU,wCAAwC,SAAA,CAAA,iBAElD,KAAA,EAAG,EAAE,aAAA,CAAA,CAER,CAAA,EACF,EAGAF,EAAAA,IAAC,MAAA,CAAI,UAAU,iHAAA,CAAkH,CAAA,CAAA,CACnI,CAAA,CAAA,ECzCAG,GAAW,IAAM,CACrB,MAAMC,EAAoB,CACxB,OAAQ,CAAE,QAAS,CAAA,EACnB,QAAS,CACP,QAAS,EACT,WAAY,CACV,gBAAiB,EAAA,CACnB,CACF,EAGIC,EAAe,CACnB,OAAQ,CAAE,EAAG,GAAI,QAAS,CAAA,EAC1B,QAAS,CACP,EAAG,EACH,QAAS,EACT,WAAY,CACV,KAAM,SACN,OAAQ,GACR,SAAU,EAAA,CACZ,CACF,EAGIC,EAAU,CAAC,OAAQ,OAAQ,OAAQ,MAAM,EAE/C,OACEN,EAAAA,IAACC,EAAAA,OAAO,IAAP,CACC,UAAU,sCACV,SAAUG,EACV,QAAQ,SACR,QAAQ,UAEP,SAAAE,EAAQ,IAAI,CAACC,EAAMC,IAClBR,EAAAA,IAACC,EAAAA,OAAO,OAAP,CAEC,SAAUI,EACV,WAAY,CAAE,MAAO,IAAA,EACrB,SAAU,CAAE,MAAO,GAAA,EACnB,UAAU,yIAET,SAAAE,CAAA,EANIC,CAAA,CAQR,CAAA,CAAA,CAGP,EC7CMC,GAAiB,CAACC,EAAMC,IAAU,CACtC,MAAM5B,EAAO,IAAI,IAAI,CAAC,GAAG,OAAO,KAAK2B,CAAI,EAAG,GAAGC,EAAM,QAAQC,GAAK,OAAO,KAAKA,CAAC,CAAC,CAAC,CAAC,EAE5EC,EAAY,CAAA,EAClB,OAAA9B,EAAK,QAAQC,GAAK,CAChB6B,EAAU7B,CAAC,EAAI,CAAC0B,EAAK1B,CAAC,EAAG,GAAG2B,EAAM,IAAIC,GAAKA,EAAE5B,CAAC,CAAC,CAAC,CAClD,CAAC,EACM6B,CACT,EAEMC,GAAW,CAAC,CAChB,KAAAP,EAAO,GACP,MAAAQ,EAAQ,IACR,UAAAC,EAAY,GACZ,UAAAC,EAAY,QACZ,UAAAC,EAAY,MACZ,UAAAC,EAAY,GACZ,WAAAC,EAAa,MACb,cAAAC,EACA,YAAAC,EACA,OAAAC,EAASC,GAAKA,EACd,oBAAAC,EACA,aAAAC,EAAe,GACjB,IAAM,CACJ,MAAMC,EAAWV,IAAc,QAAUV,EAAK,MAAM,GAAG,EAAIA,EAAK,MAAM,EAAE,EAClE,CAACqB,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EACpCC,EAAMC,EAAAA,OAAO,IAAI,EAEvBC,EAAAA,UAAU,IAAM,CACd,GAAI,CAACF,EAAI,QAAS,OAClB,MAAMG,EAAW,IAAI,qBACnB,CAAC,CAACC,CAAK,IAAM,CACPA,EAAM,iBACRN,EAAU,EAAI,EACdK,EAAS,UAAUH,EAAI,OAAO,EAElC,EACA,CAAE,UAAAZ,EAAW,WAAAC,CAAA,CAAW,EAE1B,OAAAc,EAAS,QAAQH,EAAI,OAAO,EACrB,IAAMG,EAAS,WAAA,CACxB,EAAG,CAACf,EAAWC,CAAU,CAAC,EAE1B,MAAMgB,EAAcC,EAAAA,QAClB,IACEnB,IAAc,MAAQ,CAAE,OAAQ,aAAc,QAAS,EAAG,EAAG,GAAA,EAAQ,CAAE,OAAQ,aAAc,QAAS,EAAG,EAAG,EAAA,EAC9G,CAACA,CAAS,CAAA,EAGNoB,EAAYD,EAAAA,QAChB,IAAM,CACJ,CACE,OAAQ,YACR,QAAS,GACT,EAAGnB,IAAc,MAAQ,EAAI,EAAA,EAE/B,CAAE,OAAQ,YAAa,QAAS,EAAG,EAAG,CAAA,CAAE,EAE1C,CAACA,CAAS,CAAA,EAGNqB,EAAelB,GAAiBe,EAChCI,EAAclB,GAAegB,EAE7BG,EAAYD,EAAY,OAAS,EACjCE,EAAgBhB,GAAgBe,EAAY,GAC5CE,EAAQ,MAAM,KAAK,CAAE,OAAQF,CAAA,EAAa,CAACG,EAAGC,IAAOJ,IAAc,EAAI,EAAII,GAAKJ,EAAY,EAAG,EAErG,OACEzC,EAAAA,IAAC,IAAA,CAAE,IAAA+B,EAAU,UAAW,aAAaf,CAAS,kBAC3C,SAAAW,EAAS,IAAI,CAACmB,EAAStC,IAAU,CAChC,MAAMuC,EAAmBtC,GAAe8B,EAAcC,CAAW,EAE3DQ,EAAiB,CACrB,SAAUN,EACV,MAAAC,EACA,MAAQnC,EAAQO,EAAS,GAAA,EAE3B,OAAAiC,EAAe,KAAOzB,EAGpBrB,EAAAA,KAACD,EAAAA,OAAO,KAAP,CACC,UAAU,sDAEV,QAASsC,EACT,QAASX,EAASmB,EAAmBR,EACrC,WAAYS,EACZ,oBAAqBxC,IAAUmB,EAAS,OAAS,EAAIF,EAAsB,OAE1E,SAAA,CAAAqB,IAAY,IAAM,IAAWA,EAC7B7B,IAAc,SAAWT,EAAQmB,EAAS,OAAS,GAAK,GAAA,CAAA,EAPpDnB,CAAA,CAUX,CAAC,CAAA,CACH,CAEJ,EAGMyC,GAAe,IAEjB/C,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACb,SAAA,CAAAF,EAAAA,IAACc,GAAA,CACC,KAAK,uBACL,UAAU,gCACV,MAAO,IACP,UAAU,QACV,UAAU,KAAA,CAAA,EAEZd,EAAAA,IAACc,GAAA,CACC,KAAK,gBACL,UAAU,yCACV,MAAO,GACP,UAAU,aACV,UAAU,KAAA,CAAA,CACZ,EACF,ECpHEoC,GAAwB,CAACC,EAAUzC,EAAM0C,EAAO,MAAU,CAC9D,KAAA1C,EACA,GAAIA,EAAO,IACX,KAAM,SACN,SAAAyC,EACA,KAAM,QACN,OAAQC,EAAO,IAAW,CAC5B,GAEMC,EAAgB,CAACF,EAAUzC,KAAU,CACzC,OAAQwC,GAAsBC,EAAUzC,CAAI,EAC5C,MAAO,CACL,KAAM,SACN,QAAS,GACT,UAAW,GAAA,CAEf,GAEM4C,GAAe,CAAC,CAAE,KAAA/C,EAAM,aAAAgD,EAAe,GAAI,QAAAC,EAAU,UAAW,UAAAxC,EAAY,MAAS,CACzF,MAAMyC,EAAU,MAAM,KAAKlD,CAAI,EACzBmD,EAAWC,EAAAA,aAAA,EACXC,EAAWC,EAAAA,eAAe,CAAC,EAEjC5B,EAAAA,UAAU,IAAM,CACd,MAAM6B,EAAQF,EAAS,IAAA,EACvBF,EAAS,MAAM,CACb,OAAQI,EAAQ,IAChB,MAAO,EACP,WAAYT,EAAcE,EAAcO,CAAK,CAAA,CAC9C,CACH,EAAG,CAACP,EAAchD,EAAMiD,EAASE,EAAUE,CAAQ,CAAC,EAEpD,MAAMG,EAAmB,IAAM,CAC7B,MAAMD,EAAQF,EAAS,IAAA,EACvB,GAAI,CAACJ,EAAS,OAEd,IAAIQ,EACAC,EAAW,EAEf,OAAQT,EAAA,CACN,IAAK,WACHQ,EAAmBX,EAAcE,EAAe,EAAGO,CAAK,EACxD,MACF,IAAK,UACHE,EAAmBX,EAAcE,EAAe,EAAGO,CAAK,EACxD,MACF,IAAK,QACHE,EAAmB,CACjB,OAAQ,CAAE,KAAM,SAAU,QAAS,GAAI,UAAW,GAAA,EAClD,MAAO,CAAE,KAAM,SAAU,QAAS,GAAI,UAAW,GAAA,CAAI,EAEvDC,EAAW,EACX,MACF,IAAK,YACHD,EAAmBX,EAAcE,EAAe,GAAIO,CAAK,EACzDG,EAAW,GACX,MACF,QACED,EAAmBX,EAAcE,EAAcO,CAAK,CAAA,CAGxDJ,EAAS,MAAM,CACb,OAAQI,EAAQ,IAChB,MAAOG,EACP,WAAYD,CAAA,CACb,CACH,EAEME,EAAiB,IAAM,CAC3B,MAAMJ,EAAQF,EAAS,IAAA,EACvBF,EAAS,MAAM,CACb,OAAQI,EAAQ,IAChB,MAAO,EACP,WAAYT,EAAcE,EAAcO,CAAK,CAAA,CAC9C,CACH,EAEA,OACE9D,EAAAA,IAACC,EAAAA,OAAO,IAAP,CACC,UAAW,wHAAwHe,CAAS,GAC5I,MAAO,CAAE,OAAQ4C,CAAA,EACjB,QAAS,CAAE,OAAQ,CAAA,EACnB,QAASF,EACT,aAAcK,EACd,aAAcG,EAEb,SAAAT,EAAQ,IAAI,CAACU,EAAQtB,IAAM,CAC1B,MAAMuB,EAAe,IAAMX,EAAQ,OAAUZ,EACvCwB,EAAS,KAAK,GAAKZ,EAAQ,OAC3Ba,EAAID,EAASxB,EACb0B,EAAIF,EAASxB,EACb2B,EAAY,WAAWJ,CAAW,oBAAoBE,CAAC,OAAOC,CAAC,SAErE,OACEvE,EAAAA,IAAC,OAAA,CAEC,UAAU,kGACV,MAAO,CAAE,UAAAwE,EAAW,gBAAiBA,CAAA,EAEpC,SAAAL,CAAA,EAJItB,CAAA,CAOX,CAAC,CAAA,CAAA,CAGP,EAGM4B,GAAmB,IAErBvE,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,wBACb,SAAA,CAAAF,EAAAA,IAACsD,GAAA,CACC,KAAK,6BACL,aAAc,GACd,QAAQ,SAAA,CAAA,EAEVtD,EAAAA,IAAC,IAAA,CAAE,UAAU,wBAAwB,SAAA,QAAA,CAAM,CAAA,EAC7C,EAEAE,EAAAA,KAAC,MAAA,CAAI,UAAU,wBACb,SAAA,CAAAF,EAAAA,IAACsD,GAAA,CACC,KAAK,2BACL,aAAc,GACd,QAAQ,QACR,UAAU,iBAAA,CAAA,EAEZtD,EAAAA,IAAC,IAAA,CAAE,UAAU,wBAAwB,SAAA,QAAA,CAAM,CAAA,CAAA,CAC7C,CAAA,EACF,ECvIJ,IAAI0E,GAAMC,EAAQC,GAAa,OAAO,QAAW,WAAa,SAAW,SAAUC,GAAcC,GAAmB,IAAMD,IAAgBE,GAAU,SAAS,OAAO,IAAI,EAAGC,GAAiB,OAAO,KAAS,KAAe,cAAe,KAAO,IAAI,KAAK,UAAc,EAAGC,GAAYC,GAAM,OAAOA,GAAM,SAAWD,GAAS,SAAS,iBAAiBC,CAAC,CAAC,EAAI,WAAYA,EAAI,MAAM,KAAKA,CAAC,EAAE,OAAO,CAACC,EAAKC,KACvY,OAAOA,GAAQ,SAAWD,EAAI,KAAK,GAAGF,GAASG,CAAG,CAAC,EAAID,EAAI,KAAKC,CAAG,EAC5DD,GACN,CAAA,CAAE,EAAI,CAACD,CAAC,EAAGG,GAAaC,GAAYL,GAASK,CAAO,EAAE,OAAQC,GAAMA,aAAa,WAAW,EAAGC,GAAc,CAAA,EAAIC,GAAW,UAAW,CAC1I,EAAGC,GAAkB,CAAE,IAAMC,GAAMA,EAAC,CAAE,EAAIC,GAAe,OAAQC,GAAkB,IAAI,OAAO,0LAA2L,IAAI,EAAGC,GAAe,CAAE,KAAM,EAAG,IAAK,EAAG,MAAO,EAAG,OAAQ,CAAC,EAAIC,GAAuB,CAACC,EAAWC,IAAe,CACzY,KAAO,EAAEA,EAAaD,EAAU,QAAUA,EAAUC,CAAU,IAAMH,IAAc,CAElF,OAAOE,EAAUC,CAAU,GAAKH,EAClC,EAAGI,GAAkB,CAAC,CAAE,QAAAC,EAAS,KAAAC,EAAM,MAAAC,EAAO,MAAAC,KAAY,CACxDH,EAAQ,UAAYC,EACpBC,EAAQF,EAAQ,aAAa,aAAcE,CAAK,EAAIF,EAAQ,gBAAgB,YAAY,EACxFG,EAAQH,EAAQ,aAAa,cAAeG,CAAK,EAAIH,EAAQ,gBAAgB,aAAa,CAC5F,EAAGI,GAA4B,CAACC,EAAYC,IAAsB,CAChE,GAAIA,EAAmB,CACrB,IAAIC,EAAa,IAAI,IAAIF,EAAW,KAAK,EAAE,EAAE,MAAMC,CAAiB,GAAKjB,EAAW,EAAG3C,EAAI2D,EAAW,OAAQG,EAAOC,EAAMC,EAAMC,EACjI,GAAIJ,EAAW,KACb,KAAO,EAAE7D,EAAI,IAAI,CACf+D,EAAOJ,EAAW3D,CAAC,EACnB,IAAKgE,KAAQH,EACX,GAAIG,EAAK,WAAWD,CAAI,GAAKC,EAAK,OAASD,EAAK,OAAQ,CAGtD,IAFAD,EAAQ,EACRG,EAAWF,EACJC,EAAK,WAAWC,GAAYN,EAAW3D,GAAI,EAAE8D,CAAK,CAAC,GAAKG,EAAS,OAASD,EAAK,QAAQ,CAE9F,GAAIF,GAASG,EAAS,SAAWD,EAAK,OAAQ,CAC5CL,EAAW3D,CAAC,EAAIgE,EAChBL,EAAW,OAAO3D,EAAI,EAAG8D,CAAK,EAC9B,KACF,CACF,CAEJ,CAEJ,CACA,OAAOH,CACT,EAAGO,GAAmBZ,GAAY,OAAO,iBAAiBA,CAAO,EAAE,UAAY,WAAaA,EAAQ,MAAM,QAAU,gBAAiBa,EAAoB,CAACC,EAAUC,EAAQC,IAAkBD,EAAO,aAAa,OAAOD,GAAa,SAAW,SAAS,eAAeA,CAAQ,EAAIA,EAAUE,CAAa,EAAGC,GAAc,CAAC1L,EAAMC,EAAQ6K,IAAe,CACzV,IAAIxF,EAAYrF,EAAOD,EAAO,QAAQ,GAAK,GAAI,CAAE,IAAA2L,EAAM,MAAO,KAAAC,EAAO,OAAQ,UAAAC,EAAY,EAAK,EAAK5L,EAAQ6L,EAAU9L,IAAS,OAAS,QAAU,eAAgB+L,EAAiBzG,EAAU,QAAQ,IAAI,EAAI,GAAI0G,EAAWnH,GAAS,CAClO,IAAIoH,EAAK,SAAS,cAAcN,CAAG,EAAGxE,EAAI2D,EAAW,OAAS,EAC9D,OAAAxF,IAAc2G,EAAG,UAAY3G,GAAayG,EAAiB,IAAMzG,EAAY6B,EAAI,KACjF0E,GAAaI,EAAG,MAAM,YAAY,KAAOjM,EAAMmH,EAAI,EAAE,EACrDyE,IAAS,QAAUK,EAAG,aAAa,cAAe,MAAM,EACpDN,IAAQ,SACVM,EAAG,MAAM,SAAW,WACpBA,EAAG,MAAM,QAAUH,GAErBG,EAAG,YAAcpH,EACjBiG,EAAW,KAAKmB,CAAE,EACXA,CACT,EACA,OAAAF,IAAmBzG,EAAYA,EAAU,QAAQ,KAAM,EAAE,GACzD0G,EAAQ,WAAalB,EACdkB,CACT,EAAGE,GAAkB,CAACzB,EAAS0B,EAAOlM,EAAQ6K,IAAe,CAC3D,IAAIsB,EAAcV,GAAY,OAAQzL,EAAQ6K,CAAU,EAAGuB,EAAY,OAAO,iBAAiB5B,CAAO,EAAE,WAAa,OACrH,MAAO,CAACF,EAAY+B,IAAa,CAC/B,IAAIC,EAAUH,EAAY,EAAE,EAG5B,IAFAG,EAAQ,MAAM,UAAYF,EAC1B5B,EAAQ,aAAa8B,EAASJ,EAAM5B,CAAU,CAAC,EACxCA,EAAa+B,EAAU/B,IAC5BgC,EAAQ,YAAYJ,EAAM5B,CAAU,CAAC,EAEvCgC,EAAQ,UAAS,CACnB,CACF,EAAGC,GAAiC,CAAC/B,EAASxK,EAAQwM,EAAaC,EAAaC,EAAkBC,EAAWC,EAAQC,EAAgB/B,EAAmBgC,IAAa,CACnK,IAAIC,EACJ,IAAIb,EAAQ,MAAM,KAAK1B,EAAQ,UAAU,EAAGtD,EAAI,EAAG,CAAE,cAAA8F,EAAe,iBAAAC,EAAmB,GAAM,YAAAC,CAAW,EAAKlN,EAAQmN,EAAgB3C,EAAQ,sBAAqB,EAAI4C,EAAaD,EAAeE,EAAiB,CAACJ,GAAoB,OAAO,iBAAiBzC,CAAO,EAAE,WAAW,UAAU,EAAG,CAAC,IAAM,MAAO8C,EAAyB,EAAGC,EAAkBf,EAAY,WAAYgB,EAAqBC,EAAiBC,EAAmBC,EAASC,EAAOC,EAAWC,EAAiBC,EAAeC,EAAGC,EAAQC,EAAcC,EAAYC,EAAYC,EAAaC,EAAgBC,EAAUC,EAAcnL,EAQ/kB,IAPI,OAAO2J,GAAkB,UAC3BU,EAAoBV,EAAc,WAAaA,EAC/CS,EAAkBT,EAAc,aAAe,IAE/CS,EAAkBT,IAAkB,GAAK,GAAKA,GAAiB,IAEjEQ,EAAsBC,IAAoB,IACnCvG,EAAIgF,EAAM,OAAQhF,IAEvB,GADAyG,EAAUzB,EAAMhF,CAAC,EACbyG,EAAQ,WAAa,EAAG,CAmB1B,IAlBAW,EAAiBX,EAAQ,aAAe,GACpCV,EACFqB,EAAiBA,EAAe,QAAQrE,GAAc,GAAG,EAChDoD,IACTiB,EAAiBA,EAAe,QAAQ,MAAOb,EAAkB;AAAA,CAAI,GAEvEP,IAAgBoB,EAAiBpB,EAAYoB,EAAgB9D,CAAO,GACpEmD,EAAQ,YAAcW,EACtBV,EAAQH,GAAmBC,EAAoBY,EAAe,MAAMZ,GAAqBD,CAAe,EAAIa,EAAe,MAAMzB,CAAc,GAAKhD,GACpJ2E,EAAeZ,EAAMA,EAAM,OAAS,CAAC,EACrCG,EAAgBP,EAAsBgB,EAAa,MAAM,EAAE,IAAM,IAAM,CAACA,EACxEA,GAAgBZ,EAAM,IAAG,EACzBR,EAAaD,EACbW,EAAkBN,EAAsBI,EAAM,CAAC,EAAE,OAAO,CAAC,IAAM,IAAM,CAACA,EAAM,CAAC,EAC7EE,GAAmBzC,EAAkB,IAAKb,EAASmD,CAAO,EAC1DC,EAAM,CAAC,GAAKA,EAAM,MAAK,EACvBhD,GAA0BgD,EAAO9C,CAAiB,EAClD6B,GAAaG,IAAaa,EAAQ,YAAc,IAC3CK,EAAI,EAAGA,GAAKJ,EAAM,OAAQI,IAO7B,GANAO,EAAWX,EAAMI,EAAI,CAAC,EAClB,CAACf,GAAoBI,GAAkBkB,EAAS,OAAO,CAAC,IAAM;AAAA,KAC/DxB,EAAKY,EAAQ,kBAAoB,MAAgBZ,EAAG,OAAM,EAC3D1B,EAAkB,SAAS,cAAc,IAAI,EAAGb,EAASmD,CAAO,EAChEY,EAAWA,EAAS,MAAM,CAAC,GAEzB,CAACtB,GAAoBsB,IAAa,GACpClD,EAAkBoC,EAAiBjD,EAASmD,CAAO,UAC1CY,IAAa,IACtB/D,EAAQ,aAAa,SAAS,eAAe,GAAG,EAAGmD,CAAO,MACrD,CAUL,GATAH,GAAuBe,EAAS,OAAO,CAAC,IAAM,KAAOlD,EAAkB,IAAKb,EAASmD,CAAO,EACxFL,GAA0BU,IAAM,GAAK,CAACF,GAAmBP,EAAgB,QAAQD,EAAuB,UAAU,EAAI,IACxHO,EAAYN,EAAgBA,EAAgB,OAAS,CAAC,EACtDM,EAAU,YAAY,SAAS,eAAepB,EAAc,GAAK8B,CAAQ,CAAC,IAE1EV,EAAYrB,EAAYC,EAAc,GAAK8B,CAAQ,EACnDlD,EAAkBwC,EAAWrD,EAASmD,CAAO,EAC7CL,GAA0BU,IAAM,GAAK,CAACF,GAAmBD,EAAU,aAAaP,EAAwBO,EAAU,UAAU,GAE1HpB,EAEF,IADAyB,EAAe7E,GAAiBuB,GAA0B,CAAC,GAAGvB,GAAe,QAAQkF,CAAQ,CAAC,EAAE,IAAKtJ,GAAMA,EAAE,OAAO,EAAG6F,CAAiB,EAAIyD,EAAS,MAAM1B,CAAc,GAAKhD,GACzKxG,EAAI,EAAGA,EAAI6K,EAAa,OAAQ7K,IACnCwK,EAAU,YAAYK,EAAa7K,CAAC,IAAM,IAAM,SAAS,eAAe,GAAG,EAAIoJ,EAAYyB,EAAa7K,CAAC,CAAC,CAAC,EAG/G,GAAIsJ,GAAaG,EAAU,CAGzB,GAFAwB,EAAiBX,EAAQ,YAAcW,EAAe,UAAUC,EAAS,OAAS,EAAGD,EAAe,MAAM,EAC1GL,EAASJ,EAAU,sBAAqB,EACpCI,EAAO,IAAMb,EAAW,KAAOa,EAAO,MAAQb,EAAW,KAAM,CAGjE,IAFAe,EAAa3D,EAAQ,UAAS,EAC9B4D,EAAa5D,EAAQ,WAAW,CAAC,EAC1B4D,GAAcA,IAAeP,GAClCQ,EAAcD,EACdA,EAAaA,EAAW,YACxBD,EAAW,YAAYE,CAAW,EAEpC7D,EAAQ,WAAW,aAAa2D,EAAY3D,CAAO,EACnDkC,GAAoBtB,GAAgB+C,CAAU,CAChD,CACAf,EAAaa,CACf,EACID,EAAIJ,EAAM,QAAUG,IACtB1C,EAAkB2C,GAAKJ,EAAM,OAAS,IAAMJ,GAAuBe,EAAS,MAAM,EAAE,IAAM,IAAM,IAAMd,EAAkBA,EAAiBjD,EAASmD,CAAO,CAE7J,CAEFnD,EAAQ,YAAYmD,CAAO,EAC3BL,EAAyB,CAC3B,MAAWK,EAAQ,WAAa,IAC1Bf,GAAUA,EAAO,QAAQe,CAAO,EAAI,IACtCJ,EAAgB,QAAQI,EAAQ,eAAe,EAAI,IAAMJ,EAAgBA,EAAgB,OAAS,CAAC,EAAE,YAAYI,CAAO,EACxHL,EAAyBK,IAEzBpB,GAA+BoB,EAAS3N,EAAQwM,EAAaC,EAAaC,EAAkBC,EAAWC,EAAQC,EAAgB/B,EAAmB,EAAI,EACtJwC,EAAyB,GAE3BZ,GAAoBtB,GAAgBuC,CAAO,EAGjD,EACA,MAAMc,GAAa,MAAMA,EAAW,CAClC,YAAYzI,EAAUhG,EAAQ,CAC5B,KAAK,QAAU,GACfmJ,GAAgB,EAChB,KAAK,SAAWO,GAAU1D,CAAQ,EAClC,KAAK,MAAQ,CAAA,EACb,KAAK,MAAQ,CAAA,EACb,KAAK,MAAQ,CAAA,EACb,KAAK,MAAQ,CAAA,EACb,KAAK,KAAOhG,EACZ,KAAK,SAAS,QAASgM,GAAO,CAC5B,IAAIe,EACJ/M,EAAO,YAAc,MAAW+M,EAAKf,EAAG/C,EAAU,IAAM,MAAgB8D,EAAG,MAAM,KAAK,OAAO,CAAC,CAAE,QAAAvC,CAAO,IAAOA,IAAYwB,CAAE,EAAE,QAAQzB,EAAe,GACrJyB,EAAG/C,EAAU,EAAI,IACnB,CAAC,EACD,KAAK,OAAS,IAAM,KAAK,SAAW,KAAK,MAAM,KAAK,IAAI,EACxD,IAAIyF,EAAO,CAAA,EAAIC,EAASC,EAAc,IAAM,CAC1C,IAAI1H,EAAIwH,EAAK,OAAQG,EACrB,KAAO3H,KAAK,CACV2H,EAAIH,EAAKxH,CAAC,EACV,IAAI4H,EAAID,EAAE,QAAQ,YAClB,GAAIC,IAAMD,EAAE,MAAO,CACjBA,EAAE,MAAQC,EACV,KAAK,OAAM,EACX,MACF,CACF,CACF,EACA,KAAK,MAAQ,CAAE,KAAAJ,EAAM,IAAK,OAAO,eAAmB,KAAe,IAAI,eAAe,IAAM,CAC1F,aAAaC,CAAO,EACpBA,EAAU,WAAWC,EAAa,GAAG,CACvC,CAAC,CAAC,EACF9E,GAAS,IAAI,EACb,KAAK,MAAM9J,CAAM,CACnB,CACA,MAAMA,EAAQ,CACZ,OAAC,KAAK,MAAQ+J,IAAiB,IAAI,IAAM,CACvC,KAAK,SAAW,KAAK,OAAM,EAC3B,KAAK,KAAO/J,EAASA,GAAU,KAAK,MAAQ,CAAA,EAC5C,GAAI,CAAE,KAAAD,EAAO,oBAAqB,KAAA4L,EAAO,OAAQ,UAAAgB,EAAY,GAAM,UAAAoC,EAAW,QAAAC,EAAS,UAAAC,EAAY,GAAO,aAAAC,EAAc,KAAAC,CAAI,EAAK,KAAK,KAAMC,EAAarP,EAAK,QAAQ,OAAO,EAAI,GAAIsP,EAAkBtP,EAAK,QAAQ,OAAO,EAAI,GAAIuP,EAAavP,EAAK,QAAQ,OAAO,EAAI,GAAIwP,EAAsBF,GAAmB,CAACC,GAAc,CAACF,EAAYtE,EAAoBoE,IAAiB,SAAUA,EAAe,IAAI,OAAO,MAAQA,EAAa,KAAK,GAAG,EAAI,IAAK,IAAI,EAAIA,GAAeM,EAAsB1E,EAAoB,IAAI,OAAOA,EAAkB,OAAS,IAAMZ,GAAgB,OAAQ,IAAI,EAAIA,GAAiB0C,EAAS,CAAC,CAAC5M,EAAO,QAAU0J,GAAU1J,EAAO,MAAM,EAAG,CAAE,KAAA0O,EAAM,SAAAe,EAAU,IAAAC,GAAQ,KAAK,MAAOC,GACtrBN,GAAmBC,GAAcF,KACnC,KAAK,SAAS,QAAQ,CAAC5E,EAAS3F,IAAU,CACxC6J,EAAK7J,CAAK,EAAI,CACZ,QAAA2F,EACA,KAAMA,EAAQ,UACd,MAAOA,EAAQ,aAAa,YAAY,EACxC,MAAOA,EAAQ,aAAa,aAAa,CACrD,EACUmB,IAAS,OAASnB,EAAQ,aAAa,cAAeA,EAAQ,aAAe,IAAI,KAAI,CAAE,EAAImB,IAAS,UAAYnB,EAAQ,aAAa,cAAe,MAAM,EAC1J,IAAIoF,EAAQ,CAAA,EAAIhC,EAAQ,GAAIiC,EAAQ,CAAA,EAAIpD,EAAc4C,EAAkB5D,GAAY,OAAQzL,EAAQ4P,CAAK,EAAI,KAAMpD,EAAcf,GAAY,OAAQzL,EAAQ4N,CAAK,EAAG1G,EAAG4I,EAASC,EAAeC,EAEhM,GADAzD,GAA+B/B,EAASxK,EAAQwM,EAAaC,EAAa8C,EAAqB5C,IAAcyC,GAAcG,GAAsB3C,EAAQ4C,EAAqB1E,EAAmB,EAAK,EAClMsE,EAAY,CACd,IAAIlD,EAAQ5C,GAASkB,EAAQ,UAAU,EAAGyF,EAAWhE,GAAgBzB,EAAS0B,EAAOlM,EAAQ6P,CAAK,EAAGlC,EAASuC,EAAW,CAAA,EAAIC,EAAiB,EAAG9F,EAAY6B,EAAM,IAAKkE,GAAMA,EAAE,WAAa,EAAIA,EAAE,sBAAqB,EAAKjG,EAAY,EAAGiD,EAAajD,GAAckG,EACvQ,IAAKnJ,EAAI,EAAGA,EAAIgF,EAAM,OAAQhF,IAC5ByG,EAAUzB,EAAMhF,CAAC,EACbyG,EAAQ,WAAa,IACnBA,EAAQ,WAAa,OACnB,CAACzG,GAAKgF,EAAMhF,EAAI,CAAC,EAAE,WAAa,QAClCgJ,EAAS,KAAKvC,CAAO,EACrBsC,EAASE,EAAgBjJ,EAAI,CAAC,GAEhCiJ,EAAiBjJ,EAAI,EACrBkG,EAAahD,GAAqBC,EAAWnD,CAAC,IAE9CmJ,EAAYhG,EAAUnD,CAAC,EACnBA,GAAKmJ,EAAU,IAAMjD,EAAW,KAAOiD,EAAU,KAAOjD,EAAW,KAAOA,EAAW,MAAQ,IAC/F6C,EAASE,EAAgBjJ,CAAC,EAC1BiJ,EAAiBjJ,GAEnBkG,EAAaiD,IAInBF,EAAiBjJ,GAAK+I,EAASE,EAAgBjJ,CAAC,EAChDgJ,EAAS,QAASlE,GAAO,CACvB,IAAIe,EACJ,OAAQA,EAAKf,EAAG,aAAe,KAAO,OAASe,EAAG,YAAYf,CAAE,CAClE,CAAC,CACH,CACA,GAAI,CAACsD,EAAY,CACf,IAAKpI,EAAI,EAAGA,EAAI0G,EAAM,OAAQ1G,IAE5B,GADA4I,EAAUlC,EAAM1G,CAAC,EACbmI,GAAmB,CAACS,EAAQ,aAAeA,EAAQ,YAAY,WAAa,EAC9E,GAAIf,GAAa,CAACK,EAAY,CAG5B,IAFAW,EAAgB,SAAS,cAAc,MAAM,EAC7CA,EAAc,MAAM,WAAa,SAC1BD,EAAQ,YACbC,EAAc,YAAYD,EAAQ,UAAU,EAE9CA,EAAQ,YAAYC,CAAa,CACnC,MACED,EAAQ,YAAY,GAAGA,EAAQ,UAAU,OAG3CE,EAAcF,EAAQ,YAClBE,GAAeA,EAAY,WAAa,IAC1CA,EAAY,aAAeF,EAAQ,aAAe,KAAOE,EAAY,aAAe,IACpFF,EAAQ,OAAM,GAIpBlC,EAAM,OAAS,EACfpD,EAAQ,UAAS,CACnB,CACA,KAAK,MAAM,KAAK,GAAGqF,CAAK,EACxB,KAAK,MAAM,KAAK,GAAGjC,CAAK,EACxB,KAAK,MAAM,KAAK,GAAGgC,CAAK,CAC1B,CAAC,EACDT,GAAQ,KAAKA,CAAI,GAAK,KAAK,MAAM,KAAK,GAAG,KAAKA,CAAI,EAAE,IAAKnD,GAAO,CAC9D,IAAIsE,EAAStE,EAAG,UAAS,EACzB,OAAAA,EAAG,YAAYsE,CAAM,EACrBA,EAAO,YAAYtE,CAAE,EACrBA,EAAG,YAAcsE,EAAO,UAAYtE,EAAG,UAAU,KAAI,EAAK,SAC1DsE,EAAO,MAAM,SAAW,OACjBA,CACT,CAAC,CAAC,GAEJ,KAAK,QAAU,GACftH,GAAUoG,IAAeH,EAAYjG,EAAO,iBAAiB,cAAe,KAAK,MAAM,EAAIA,EAAO,SAAW,WAAa,QAAQ,KAAK,sCAAsC,IACxK2G,EAAgBX,GAAWA,EAAQ,IAAI,IAAMW,EAAc,YAC9D,KAAK,MAAM,KAAOF,EAAWE,EAAc,UAAUF,CAAQ,EAAIE,GAEnEP,GAAcH,GAAa,KAAK,SAAS,QAAQ,CAACzE,EAAS3F,IAAU,CACnE6J,EAAK7J,CAAK,EAAE,MAAQ2F,EAAQ,YAC5BkF,GAAOA,EAAI,QAAQlF,CAAO,CAC5B,CAAC,CACH,CAAC,EACM,IACT,CACA,MAAO,CACL,GAAI,CAAE,IAAAkF,GAAQ,KAAK,MACnBA,GAAOA,EAAI,WAAU,EACK1G,GAAO,oBAAoB,cAAe,KAAK,MAAM,CACjF,CACA,QAAS,CACP,IAAI+D,EAAIwD,EACR,GAAI,KAAK,QAAS,CAChB,GAAI,CAAE,KAAA7B,EAAM,KAAA8B,CAAI,EAAK,KAAK,MAC1B,KAAK,KAAI,EACT9B,EAAK,QAAQnE,EAAe,EAC5B,KAAK,MAAM,OAAS,KAAK,MAAM,OAAS,KAAK,MAAM,OAASmE,EAAK,OAAS,KAAK,MAAM,OAAS,EAC9F,KAAK,QAAU,GACX8B,IACF,KAAK,MAAM,SAAWA,EAAK,UAAS,EACpCA,EAAK,OAAM,IAEZD,GAAMxD,EAAK,KAAK,MAAM,WAAa,MAAgBwD,EAAG,KAAKxD,EAAI,IAAI,CACtE,CACA,OAAO,IACT,CACA,OAAO,OAAO/G,EAAUhG,EAAQ,CAC9B,OAAO,IAAIyO,GAAWzI,EAAUhG,CAAM,CACxC,CACA,OAAO,SAASyQ,EAAM,CACpB1H,GAAOA,IAAQ0H,GAAQ,OAAO,KAC1B1H,KACFO,GAAWP,GAAK,MAAM,QACtBe,GAAWf,GAAK,KAAK,SAAWe,IAE9B,CAACZ,IAAgB,OAAO,WAAa,IACvCF,EAAS,SAAS,MAClBE,GAAe,GAEnB,CACF,EACAuF,GAAW,QAAU,SACrB,IAAIrF,GAAYqF,GChUhB,IAAIiC,GAAW,iBACJC,GAAW,4gOACf,SAASC,GAAQ,EAAG,CACzB,IAAI7Q,EAAO,EAAE,SACT8Q,EAAS,GAEb,GAAI9Q,IAAS,GAAKA,IAAS,GAAKA,IAAS,GAAI,CAC3C,GAAI,OAAO,EAAE,aAAgB,SAC3B,OAAO,EAAE,YAET,IAAK,EAAI,EAAE,WAAY,EAAG,EAAI,EAAE,YAC9B8Q,GAAUD,GAAQ,CAAC,CAGzB,SAAW7Q,IAAS,GAAKA,IAAS,EAChC,OAAO,EAAE,UAGX,OAAO8Q,CACT,CAgDO,SAASC,EAAelM,EAAMmM,EAAWC,EAAMC,EAAgBC,EAAoB,CAKxF,GAJAtM,GAAQ,GAERoM,IAASpM,EAAOA,EAAK,KAAOA,EAAK,OAASA,EAAK,QAAQ8L,GAAU,EAAE,GAE/DK,GAAaA,IAAc,GAC7B,OAAOnM,EAAK,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,MAAM,EAAE,MAAMmM,CAAS,EASzE,QANIF,EAAS,CAAA,EACTM,EAAIvM,EAAK,OACT,EAAI,EACJoJ,EACAoD,EAEG,EAAID,EAAG,IACZC,EAAYxM,EAAK,OAAO,CAAC,GAErBwM,EAAU,WAAW,CAAC,GAAK,OAAUA,EAAU,WAAW,CAAC,GAAK,OAAUxM,EAAK,WAAW,EAAI,CAAC,GAAK,OAAUA,EAAK,WAAW,EAAI,CAAC,GAAK,SAE1IoJ,IAAMpJ,EAAK,OAAO,EAAG,EAAE,EAAE,MAAM+L,EAAQ,GAAK,CAAA,GAAI,CAAC,GAAK,IAAI,QAAU,EACpES,EAAYxM,EAAK,OAAO,EAAGoJ,CAAC,EAC5B6C,EAAO,MAAQ,EACf,GAAK7C,EAAI,GAGX6C,EAAO,KAAKK,EAAqBE,EAAYA,IAAc,IAAM,OAASA,IAAc,IAAM,OAASH,GAAkBG,IAAc,MAAQxM,EAAK,OAAO,EAAI,CAAC,IAAM,KAAOA,EAAK,OAAO,EAAI,CAAC,IAAM,KAAO,SAAWwM,CAAS,EAGjO,OAAOP,CACT,CC/FA,IAAIQ,IAAuB,UAAY,CACrC,SAASA,EAAQzB,EAAO,CACtB,KAAK,MAAQkB,EAAelB,CAAK,EACjC,KAAK,KAAO,CAAA,EACZ,KAAK,OAAS,GAEd,QAAS1I,EAAI,EAAGA,EAAI,GAAIA,IACtB,KAAK,KAAKA,CAAC,EAAIoK,GAAc,GAAI,KAAK,KAAK,CAE/C,CAEA,IAAIC,EAASF,EAAQ,UAErB,OAAAE,EAAO,KAAO,SAAcC,EAAW,CAErC,QAAStK,EAAI,EAAGA,EAAI,GAAIA,IACtB,KAAK,KAAKA,CAAC,GAAKoK,GAAcE,EAAY,KAAK,OAAQ,KAAK,KAAK,EAGnE,KAAK,OAASA,CAChB,EAEOH,CACT,GAAC,EAEGtI,EACAG,GACAuI,GAAW,UAAoB,CACjC,OAAO1I,GAAQ,OAAO,OAAW,MAAgBA,EAAO,OAAO,OAASA,EAAK,gBAAkBA,CACjG,EACI2I,GAAkB,EAEtBC,GAAa,OACTL,GAAgB,SAAuBM,EAAQhC,EAAO,CAIxD,QAHIuB,EAAIvB,EAAM,OACV3K,EAAI,GAED,EAAE2M,EAAS,IAChB3M,GAAK2K,EAAM,CAAC,EAAE,KAAK,OAAM,EAAKuB,EAAE,EAGlC,OAAOlM,CACT,EACI4M,GAAS,6BACTC,GAASD,GAAO,YAAW,EAC3BE,GAAe,CACjB,UAAW,IAAIV,GAAQQ,EAAM,EAC7B,UAAW,IAAIR,GAAQS,EAAM,EAC7B,kBAAmB,IAAIT,GAAQQ,GAASC,EAAM,CAChD,EACIE,GAAY,UAAqB,CACnC9I,GAAeH,EAAO0I,GAAQ,CAChC,EAEWQ,GAAqB,CAC9B,QAAS,SACT,KAAM,eACN,SAAU,SAAkBxB,EAAMyB,EAAQC,EAAW,CACnDpJ,EAAO0H,EAEPuB,GAAS,CACX,EACA,KAAM,SAAcI,EAAQhR,EAAOiR,EAAOxN,EAAO8E,EAAS,CAIxD,GAHAT,IAAgB8I,GAAS,EACzB,KAAK,KAAO,cAAeI,EAAS,YAAc,gBAAiBA,EAAS,cAAgB,EAExF,EAAC,KAAK,KAIV,MAAK,OAASA,EAEV,OAAOhR,GAAU,WACnBA,EAAQ,CACN,KAAMA,CACd,GAGI,IAAIwD,EAAOxD,EAAM,MAAQA,EAAM,OAAS,GACpC4P,EAAO5P,EAAM,OAAS,GACtBkR,EAAO,KACPC,EACAC,EACAC,EACAC,EACJ,OAAAJ,EAAK,UAAYC,EAAQnR,EAAM,WAAa,GAC5CkR,EAAK,SAAWxB,EAAeF,GAAQwB,CAAM,EAAE,QAAQT,GAAY,GAAG,EAAE,MAAM,QAAQ,EAAE,KAAK,EAAE,EAAGY,EAAOvB,CAAI,GAEzGpM,IAAS,cAAgBA,IAAS,IAAQA,GAAQ,QACpDA,EAAO0N,EAAK,SAAS,KAAKC,CAAK,GAGjCD,EAAK,KAAOxB,GAAgBlM,GAAQ,IAAI,QAAQ+M,GAAY,GAAG,EAAGY,EAAOvB,CAAI,EAC7EsB,EAAK,SAAW,CAAC,EAAElR,EAAM,UAAYA,EAAM,UAC3CkR,EAAK,SAAWlR,EAAM,SACtBkR,EAAK,SAAWlR,EAAM,SACtBsR,EAAeH,IAAU,GACzBD,EAAK,aAAeI,GAAgB,CAAC,CAACJ,EAAK,KAAK,MAChDA,EAAK,eAAiB,CAAC,CAAClR,EAAM,OAAS,CAAC,CAAC0P,EAAe1P,EAAM,KAAK,EAAE,MACrEkR,EAAK,OAASI,EAAeJ,EAAK,SAAS,OAASA,EAAK,SAAS,KAAKC,CAAK,EAAE,OAC9ED,EAAK,WAAaI,EAAeJ,EAAK,KAAK,OAASA,EAAK,KAAK,KAAKC,CAAK,EAAE,QAAUD,EAAK,OACzFA,EAAK,SAAWlR,EAAM,UAAYA,EAAM,OAAS,CAACA,EAAM,MAAM,QAAQ,GAAG,EAAI,SAAW,GACxFkR,EAAK,QAAUG,EAAUV,GAAa3Q,EAAM,OAAS,WAAW,GAAK,IAAIiQ,GAAQjQ,EAAM,KAAK,EAC5FkR,EAAK,MAAQ,KAAQlR,EAAM,OAAS,GACpCkR,EAAK,iBAAmB,EACxBA,EAAK,SAAW,KAAK,OAAM,EAAK,GAAK,EACrCE,EAAYF,EAAK,OAAS,KAAK,IAAIA,EAAK,UAAW,CAAC,EAEhDE,EAAYC,EAAQ,QACtBA,EAAQ,KAAKD,CAAS,EAGxBF,EAAK,MAAQG,EAAQ,KAAKH,EAAK,QAAQ,EACvCA,EAAK,YAAclR,EAAM,aAAe,EACxCkR,EAAK,YAAclR,EAAM,cAAgB,GACzCkR,EAAK,MAAQD,EACbC,EAAK,YAAc,CAAC,CAAClR,EAAM,YAE3BkR,EAAK,OAAO,KAAK,eAAgB,MAAM,EAEhCZ,GACT,EACA,OAAQ,SAAgBiB,EAAOL,EAAM,CACnC,IAAIF,EAASE,EAAK,OACdM,EAAON,EAAK,KACZ1N,EAAO0N,EAAK,KACZvB,EAAYuB,EAAK,UACjBD,EAAQC,EAAK,MACbO,EAAmBP,EAAK,iBACxBQ,EAAcR,EAAK,YACnBS,EAAWT,EAAK,SAChB1C,EAAQ0C,EAAK,MACbU,EAAUV,EAAK,QACfV,EAASU,EAAK,OACdW,EAAeX,EAAK,aACpBY,EAAiBZ,EAAK,eACtBa,EAAYb,EAAK,UACjBc,EAAcd,EAAK,YACnBe,EAAWf,EAAK,SAChBgB,EAAWhB,EAAK,SAChBiB,EAAcjB,EAAK,YACnBkB,EAAWlB,EAAK,SAChBmB,EAAQnB,EAAK,MACboB,EAAWpB,EAAK,SAChBqB,EAAWrB,EAAK,SAChBnB,EAAIvM,EAAK,OACTgP,EAAOvB,EAAM,MACbwB,EAAUD,EAAOf,EACjB3L,EACA4M,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA/K,EAEAuJ,IACET,EAAM,QACRuB,EAAOvB,EAAM,KAAOuB,GAGtBjB,EAAQiB,IAAS,EAAI,EAAIA,EAAOd,EAAc,KAAWc,IAASvB,EAAM,KAAO,EAAIA,EAAM,OAAOuB,EAAOd,IAAgBT,EAAM,KAAOS,EAAY,GAG9IH,EAAQ,EACVA,EAAQ,EACCA,EAAQ,IACjBA,EAAQ,GAGNY,IACFZ,EAAQ,EAAIA,GAGdzL,EAAI,CAAC,EAAEyL,EAAQxB,EAAI,IAEfwB,IACEkB,EAAUJ,GAASI,EAAU,CAACJ,KAChCnB,EAAK,SAAWS,GAAYA,GAAY,KAAK,SAAW,GAAK,IAAM,GACnET,EAAK,MAAQU,EAAQ,KAAKD,CAAQ,EAClCT,EAAK,kBAAoBuB,GAG3BG,EAAUpE,GAEVoE,EAAUN,EAAS,KAAK3C,CAAS,EAGnCxH,EAAI8I,EAAM,MAAQM,EAAQ,EAAIA,EAC9B2B,EAAW1C,GAAUwB,EAAcf,EAAM,MAAQ9I,EAAIA,EAAIA,EAAI,EAAIA,EAAIA,EAAIA,EAAI,GAAK4J,EAE9EI,EACEZ,IAAU,IAAMN,EAAM,OAASA,EAAM,OAAS,gBAEhD0B,EAAY,GACZC,EAAUN,EAAS,KAAK3C,CAAS,IAEjCoD,EAAMvP,EAAK,MAAMsC,CAAC,EAAE,KAAK6J,CAAS,EAE9BmC,EACFa,EAAYjD,EAAekD,CAAO,EAAE,MAAM,EAAGM,GAAYrB,EAAenC,EAAeqD,CAAG,EAAIA,GAAK,OAAS,GAAM,CAAC,EAAE,KAAK,EAAE,EAE5HJ,EAAYC,EAAQ,OAAO,EAAGM,GAAYrB,EAAenC,EAAeqD,CAAG,EAAIA,GAAK,OAAS,GAAM,CAAC,EAGtGH,EAAUG,IAGZJ,EAAYnP,EAAK,MAAM,EAAGsC,CAAC,EAAE,KAAK6J,CAAS,EAC3C+C,GAAMb,EAAenC,EAAeiD,CAAS,EAAIA,GAAW,OAExDb,EACFc,EAAUlD,EAAekD,CAAO,EAAE,MAAMF,EAAIQ,EAAW,GAAM,CAAC,EAAE,KAAK,EAAE,EAEvEN,EAAUA,EAAQ,OAAOF,EAAIQ,EAAWR,EAAK,GAAM,CAAC,GAIpDH,GACFS,EAAab,EAAcF,EAAWC,EACtCe,EAAWd,EAAcD,EAAWD,EACpCY,EAAWG,GAAclN,IAAM,EAC/BgN,EAAWG,GAAYnN,IAAMiK,EAC7BgD,GAAOF,EAAW,gBAAkBG,EAAa,KAAO,IAAML,GAAaE,EAAW,UAAY,KAAOC,EAAW,gBAAkBG,EAAW,KAAO,IAAMtD,EAAYiD,GAAWE,EAAW,UAAY,KAE5MC,EAAMJ,EAAYhD,EAAYiD,EAGhC5B,EAAOQ,CAAI,EAAIY,IAAa,UAAY,CAACW,EAAI,QAAQ,IAAI,EAAIA,EAAI,MAAM,IAAI,EAAE,KAAK,cAAc,EAAIA,CACtG,CACF,EACAlC,GAAmB,eAAiBnB,EACpCmB,GAAmB,QAAUrB,GAC7Ba,MAAc1I,EAAK,eAAekJ,EAAkB,ECzOpDlJ,GAAAA,KAAK,eAAeK,GAAW6I,EAAkB,EAEjD,MAAMsC,GAAgB,CAAC,CACrB,OAAAC,EAAS,IACT,SAAAhN,EAAW,IACX,MAAAiM,EAAQ,GACR,cAAAgB,EAAgB,KAChB,UAAApP,EAAY,GACZ,MAAAqP,EAAQ,CAAA,EACR,SAAAzR,CACF,IAAM,CACJ,MAAM0R,EAAUtO,EAAAA,OAAO,IAAI,EAE3BC,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACqO,EAAQ,QAAS,OAEtB,MAAMC,EAAQxL,GAAU,OAAOuL,EAAQ,QAAQ,cAAc,GAAG,EAAG,CACjE,KAAM,QACN,WAAY,oCAAA,CACb,EAEDC,EAAM,MAAM,QAAQ5I,GAAM,CACxB,MAAM6I,EAAI7I,EACVjD,QAAK,IAAI8L,EAAG,CAAE,KAAM,CAAE,eAAgBA,EAAE,SAAA,EAAa,CACvD,CAAC,EAED,MAAMC,EAAalL,GAAK,CACtBgL,EAAM,MAAM,QAAQ5I,GAAM,CACxB,MAAM6I,EAAI7I,EACJ,CAAE,KAAA+I,EAAM,IAAAC,EAAK,MAAAC,EAAO,OAAAC,CAAA,EAAWL,EAAE,sBAAA,EACjCM,EAAKvL,EAAE,SAAWmL,EAAOE,EAAQ,GACjCG,EAAKxL,EAAE,SAAWoL,EAAME,EAAS,GACjCG,EAAO,KAAK,MAAMF,EAAIC,CAAE,EAE1BC,EAAOb,GACTzL,GAAAA,KAAK,GAAG8L,EAAG,CACT,UAAW,GACX,SAAUrN,GAAY,EAAI6N,EAAOb,GACjC,aAAc,CACZ,KAAMK,EAAE,QAAQ,SAAW,GAC3B,MAAOJ,EACP,MAAAhB,CAAA,EAEF,KAAM,MAAA,CACP,CAEL,CAAC,CACH,EAEMzH,EAAK2I,EAAQ,QACnB,OAAA3I,EAAG,iBAAiB,cAAe8I,CAAU,EAEtC,IAAM,CACX9I,EAAG,oBAAoB,cAAe8I,CAAU,EAChDF,EAAM,OAAA,CACR,CACF,EAAG,CAACJ,EAAQhN,EAAUiM,EAAOgB,CAAa,CAAC,EAGzCpQ,EAAAA,IAAC,MAAA,CACC,IAAKsQ,EACL,UAAW,0EAA0EtP,CAAS,GAC9F,MAAAqP,EAEA,SAAArQ,EAAAA,IAAC,KAAG,SAAApB,CAAA,CAAS,CAAA,CAAA,CAGnB,EAGMqS,GAAoB,IAEtB/Q,EAAAA,KAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAF,EAAAA,IAACkQ,GAAA,CACC,OAAQ,IACR,SAAU,IACV,MAAO,GACP,cAAc,gCACf,SAAA,6DAAA,CAAA,EAIDlQ,EAAAA,IAACkQ,GAAA,CACC,OAAQ,IACR,SAAU,IACV,MAAO,GACP,cAAc,KACd,UAAU,iBACX,SAAA,gDAAA,CAAA,CAED,EACF,EC7FEgB,GAAmB,CAAC,CACxB,UAAAhQ,EAAY,YACZ,MAAAkO,EAAQ,EACR,MAAA+B,EAAQ,UACR,WAAAC,EAAa,GACb,UAAAC,EAAY,EACZ,MAAAT,EAAQ,IACR,OAAAC,EAAS,IACT,YAAAS,EAAc,EACd,aAAAC,EAAe,CACjB,IAAM,CACJ,MAAMC,EAAUxP,EAAAA,OAAO,IAAI,EAE3BC,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACuP,EAAQ,QAAS,OAEtB,MAAMC,EAAOD,EAAQ,QACfE,EAAcD,EAAK,eAAA,EAGzBA,EAAK,MAAM,gBAAkB,GAAGL,CAAU,IAAIC,CAAS,GACvDI,EAAK,MAAM,iBAAmBvQ,IAAc,YAAcwQ,EAAc,EAExE,IAAIC,EACAC,EAAS1Q,IAAc,YAAcwQ,EAAc,EACvD,MAAMG,EAAO3Q,IAAc,YAAc,CAACkO,EAAQA,EAE5C0C,EAAU,IAAM,CACpBF,GAAUC,EAGN3Q,IAAc,YACZ0Q,GAAU,EAAER,EAAaC,KAC3BO,EAAS,GAGPA,GAAUR,EAAaC,IACzBO,EAAS,GAIbH,EAAK,MAAM,iBAAmBG,EAC9BD,EAAc,sBAAsBG,CAAO,CAC7C,EAEA,OAAAH,EAAc,sBAAsBG,CAAO,EAEpC,IAAM,CACPH,GACF,qBAAqBA,CAAW,CAEpC,CACF,EAAG,CAACzQ,EAAWkO,EAAOgC,EAAYC,CAAS,CAAC,EAG1CrR,EAAAA,IAAC,MAAA,CACC,MAAO4Q,EAAQU,EAAc,EAC7B,OAAQT,EAASS,EAAc,EAC/B,UAAU,mBAEV,SAAAtR,EAAAA,IAACC,EAAAA,OAAO,KAAP,CACC,IAAKuR,EACL,EAAGF,EACH,EAAGA,EACH,MAAAV,EACA,OAAAC,EACA,GAAIU,EACJ,GAAIA,EACJ,KAAK,cACL,OAAQJ,EACR,YAAAG,EACA,cAAc,QACd,QAAS,CAAE,QAAS,CAAA,EACpB,QAAS,CAAE,QAAS,CAAA,EACpB,WAAY,CAAE,SAAU,EAAA,CAAI,CAAA,CAC9B,CAAA,CAGN,EAGMS,GAAuB,IAAM,CACjC,KAAM,CAACpW,EAAQqW,CAAS,EAAIlQ,WAAS,CACnC,UAAW,YACX,MAAO,EACP,MAAO,UACP,WAAY,GACZ,UAAW,EACX,MAAO,IACP,OAAQ,IACR,YAAa,EACb,aAAc,EAAA,CACf,EAEKmQ,EAAe,CAACpW,EAAKkB,IAAU,CACnCiV,EAAUE,IAAS,CAAE,GAAGA,EAAM,CAACrW,CAAG,EAAGkB,GAAQ,CAC/C,EAEA,OACEmD,EAAAA,KAAC,MAAA,CAAI,UAAU,mBAEb,SAAA,CAAAF,EAAAA,IAAC,OAAI,UAAU,sGACb,eAACkR,GAAA,CAAkB,GAAGvV,EAAQ,CAAA,CAChC,EAGAuE,EAAAA,KAAC,MAAA,CAAI,UAAU,iEACb,SAAA,CAAAF,EAAAA,IAAC,KAAA,CAAG,UAAU,wCAAwC,SAAA,OAAI,EAG1DE,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oCAAoC,SAAA,OAAI,EACzDE,EAAAA,KAAC,MAAA,CAAI,UAAU,aACb,SAAA,CAAAF,EAAAA,IAAC,SAAA,CACC,QAAS,IAAMiS,EAAa,YAAa,WAAW,EACpD,UAAW,mDACTtW,EAAO,YAAc,YACjB,2BACA,6CACN,GACD,SAAA,KAAA,CAAA,EAGDqE,EAAAA,IAAC,SAAA,CACC,QAAS,IAAMiS,EAAa,YAAa,kBAAkB,EAC3D,UAAW,mDACTtW,EAAO,YAAc,mBACjB,2BACA,6CACN,GACD,SAAA,KAAA,CAAA,CAED,CAAA,CACF,CAAA,EACF,EAGAuE,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oCAAoC,SAAA,OAAI,EACzDA,EAAAA,IAAC,QAAA,CACC,KAAK,SACL,MAAOrE,EAAO,MACd,SAAW4J,GAAM0M,EAAa,QAAS,WAAW1M,EAAE,OAAO,KAAK,CAAC,EACjE,UAAU,qHACV,IAAI,MACJ,IAAI,KACJ,KAAK,KAAA,CAAA,CACP,EACF,EACAvF,EAAAA,IAAC,QAAA,CACC,KAAK,QACL,MAAOrE,EAAO,MACd,SAAW4J,GAAM0M,EAAa,QAAS,WAAW1M,EAAE,OAAO,KAAK,CAAC,EACjE,UAAU,qFACV,IAAI,MACJ,IAAI,KACJ,KAAK,KAAA,CAAA,CACP,EACF,EAGArF,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oCAAoC,SAAA,OAAI,EACzDA,EAAAA,IAAC,QAAA,CACC,KAAK,SACL,MAAOrE,EAAO,WACd,SAAW4J,GAAM0M,EAAa,aAAc,SAAS1M,EAAE,OAAO,KAAK,CAAC,EACpE,UAAU,qHACV,IAAI,IACJ,IAAI,IAAA,CAAA,CACN,EACF,EACAvF,EAAAA,IAAC,QAAA,CACC,KAAK,QACL,MAAOrE,EAAO,WACd,SAAW4J,GAAM0M,EAAa,aAAc,SAAS1M,EAAE,OAAO,KAAK,CAAC,EACpE,UAAU,qFACV,IAAI,IACJ,IAAI,IAAA,CAAA,CACN,EACF,EAGArF,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oCAAoC,SAAA,OAAI,EACzDA,EAAAA,IAAC,QAAA,CACC,KAAK,SACL,MAAOrE,EAAO,UACd,SAAW4J,GAAM0M,EAAa,YAAa,SAAS1M,EAAE,OAAO,KAAK,CAAC,EACnE,UAAU,qHACV,IAAI,IACJ,IAAI,IAAA,CAAA,CACN,EACF,EACAvF,EAAAA,IAAC,QAAA,CACC,KAAK,QACL,MAAOrE,EAAO,UACd,SAAW4J,GAAM0M,EAAa,YAAa,SAAS1M,EAAE,OAAO,KAAK,CAAC,EACnE,UAAU,qFACV,IAAI,IACJ,IAAI,IAAA,CAAA,CACN,EACF,EAGArF,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oCAAoC,SAAA,OAAI,EACzDA,EAAAA,IAAC,QAAA,CACC,KAAK,SACL,MAAOrE,EAAO,YACd,SAAW4J,GAAM0M,EAAa,cAAe,SAAS1M,EAAE,OAAO,KAAK,CAAC,EACrE,UAAU,qHACV,IAAI,IACJ,IAAI,IAAA,CAAA,CACN,EACF,EACAvF,EAAAA,IAAC,QAAA,CACC,KAAK,QACL,MAAOrE,EAAO,YACd,SAAW4J,GAAM0M,EAAa,cAAe,SAAS1M,EAAE,OAAO,KAAK,CAAC,EACrE,UAAU,qFACV,IAAI,IACJ,IAAI,IAAA,CAAA,CACN,EACF,EAGArF,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oCAAoC,SAAA,OAAI,EACzDA,EAAAA,IAAC,QAAA,CACC,KAAK,SACL,MAAOrE,EAAO,aACd,SAAW4J,GAAM0M,EAAa,eAAgB,SAAS1M,EAAE,OAAO,KAAK,CAAC,EACtE,UAAU,qHACV,IAAI,IACJ,IAAI,KAAA,CAAA,CACN,EACF,EACAvF,EAAAA,IAAC,QAAA,CACC,KAAK,QACL,MAAOrE,EAAO,aACd,SAAW4J,GAAM0M,EAAa,eAAgB,SAAS1M,EAAE,OAAO,KAAK,CAAC,EACtE,UAAU,qFACV,IAAI,IACJ,IAAI,KAAA,CAAA,CACN,EACF,EAGArF,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oCAAoC,SAAA,KAAE,EACvDA,EAAAA,IAAC,QAAA,CACC,KAAK,SACL,MAAOrE,EAAO,MACd,SAAW4J,GAAM0M,EAAa,QAAS,SAAS1M,EAAE,OAAO,KAAK,CAAC,EAC/D,UAAU,qHACV,IAAI,KACJ,IAAI,KAAA,CAAA,CACN,EACF,EACAvF,EAAAA,IAAC,QAAA,CACC,KAAK,QACL,MAAOrE,EAAO,MACd,SAAW4J,GAAM0M,EAAa,QAAS,SAAS1M,EAAE,OAAO,KAAK,CAAC,EAC/D,UAAU,qFACV,IAAI,KACJ,IAAI,KAAA,CAAA,CACN,EACF,EAEArF,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oCAAoC,SAAA,KAAE,EACvDA,EAAAA,IAAC,QAAA,CACC,KAAK,SACL,MAAOrE,EAAO,OACd,SAAW4J,GAAM0M,EAAa,SAAU,SAAS1M,EAAE,OAAO,KAAK,CAAC,EAChE,UAAU,qHACV,IAAI,KACJ,IAAI,KAAA,CAAA,CACN,EACF,EACAvF,EAAAA,IAAC,QAAA,CACC,KAAK,QACL,MAAOrE,EAAO,OACd,SAAW4J,GAAM0M,EAAa,SAAU,SAAS1M,EAAE,OAAO,KAAK,CAAC,EAChE,UAAU,qFACV,IAAI,KACJ,IAAI,KAAA,CAAA,CACN,CAAA,CACF,CAAA,EACF,EAGArF,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oCAAoC,SAAA,OAAI,EACzDE,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CACC,KAAK,QACL,MAAOrE,EAAO,MACd,SAAW4J,GAAM0M,EAAa,QAAS1M,EAAE,OAAO,KAAK,EACrD,UAAU,0EAAA,CAAA,EAEZvF,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOrE,EAAO,MACd,SAAW4J,GAAM0M,EAAa,QAAS1M,EAAE,OAAO,KAAK,EACrD,UAAU,iIACV,YAAY,SAAA,CAAA,CACd,CAAA,CACF,CAAA,EACF,EAGArF,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oCAAoC,SAAA,SAAM,EAC3DA,EAAAA,IAAC,MAAA,CAAI,UAAU,uBACZ,SAAA,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAAE,IAAImR,GACtEnR,EAAAA,IAAC,SAAA,CAEC,QAAS,IAAMiS,EAAa,QAASd,CAAK,EAC1C,UAAU,+DACV,MAAO,CACL,gBAAiBA,EACjB,YAAaxV,EAAO,QAAUwV,EAAQ,OAASA,CAAA,CACjD,EANKA,CAAA,CAQR,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,CAEJ","x_google_ignoreList":[0,1,2,7,8,9]}
|