{"version":3,"file":"LineScroller.DOLXDrap.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/zqrsNLx3ECLctgbtnLnL/nPbFUKEYDSUL0VNIQyrq/LineScroller.js"],"sourcesContent":["// Animated swelling lines using WebGL for high performance\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useRef,useEffect}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * LineScroller\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function LineScroller(props){const{minWidth,maxWidth,lineColor,lineHeight,gap,animationSpeed,alignment,style={}}=props;const canvasRef=useRef(null);const animationRef=useRef();const isStatic=useIsStaticRenderer();// Memoize color\nconst color=hexToRgb(lineColor);useEffect(()=>{if(isStatic)return;const canvas=canvasRef.current;if(!canvas)return;const gl=canvas.getContext(\"webgl\");if(!gl)return;// Memoize shaders/program (only once)\nlet program=null;let posLoc=-1;let colorLoc=null;let buffer=null;let lastWidth=0,lastHeight=0;function setupGL(){if(program)return;const vsSource=\"attribute vec2 a_position;void main(){gl_Position=vec4(a_position,0,1);}\";const fsSource=\"precision mediump float;uniform vec4 u_color;void main(){gl_FragColor=u_color;}\";const vs=createShader(gl,gl.VERTEX_SHADER,vsSource);const fs=createShader(gl,gl.FRAGMENT_SHADER,fsSource);program=createProgram(gl,vs,fs);gl.useProgram(program);posLoc=gl.getAttribLocation(program,\"a_position\");colorLoc=gl.getUniformLocation(program,\"u_color\");buffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.enableVertexAttribArray(posLoc);gl.vertexAttribPointer(posLoc,2,gl.FLOAT,false,0,0);}setupGL();gl.useProgram(program);gl.uniform4f(colorLoc,color.r/255,color.g/255,color.b/255,1);gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.enableVertexAttribArray(posLoc);gl.vertexAttribPointer(posLoc,2,gl.FLOAT,false,0,0);function draw(){const width=canvas.offsetWidth;const height=canvas.offsetHeight;if(canvas.width!==width||canvas.height!==height){canvas.width=width;canvas.height=height;gl.viewport(0,0,width,height);lastWidth=width;lastHeight=height;}else if(width!==lastWidth||height!==lastHeight){gl.viewport(0,0,width,height);lastWidth=width;lastHeight=height;}gl.clear(gl.COLOR_BUFFER_BIT);const lines=Math.max(1,Math.floor(((props.orientation===\"vertical\"?width:height)+gap)/(lineHeight+gap)));// Animation time for loopAnimation\nlet animTime=0;if(props.loopAnimation){animTime=performance.now()*2e-4*animationSpeed;}// Calculate scroll offset for the random region\nlet scrollPos=0;if(props.orientation===\"vertical\"){scrollPos=window.scrollX||0;}else{scrollPos=window.scrollY||0;}// Apply user scrollOffset and startRandomPosition\nscrollPos+=props.scrollOffset||0;// startRandomPosition is a ratio (0-1) of the container\nlet centerOffset=0;if(props.orientation===\"vertical\"){centerOffset=canvas.offsetWidth*(props.startRandomPosition||.5);}else{centerOffset=canvas.offsetHeight*(props.startRandomPosition||.5);}// Precompute for performance\nconst halfW=width/2,halfH=height/2;const isVert=props.orientation===\"vertical\";// If loopRandom is enabled, move the random region through all positions\nlet loopOffset=0;if(props.loopRandom||props.loopAnimation){const totalLength=isVert?width:height;// If loopAnimation, animate with time; else, use scroll\nif(props.loopAnimation){loopOffset=animTime*totalLength%totalLength;}else{loopOffset=scrollPos%totalLength;}}for(let i=0;i<lines;i++){// Use defaultWidth as baseline\nconst dw=typeof props.defaultWidth===\"number\"?props.defaultWidth:(minWidth+maxWidth)/2;let v=(dw-minWidth)/(maxWidth-minWidth);if(props.enableEffect){// Calculate normalized distance from scroll-centered region (0=center, 1=edge)\nlet normDist=0;if(props.orientation===\"vertical\"){const x=i*(lineHeight+gap)+lineHeight/2;const center=centerOffset+(props.loopRandom?loopOffset:scrollPos%width);normDist=Math.abs((x-center)/(width/2));}else{const y=i*(lineHeight+gap)+lineHeight/2;const center=centerOffset+(props.loopRandom?loopOffset:scrollPos%height);normDist=Math.abs((y-center)/(height/2));}// Only randomize if close to center (radius < centerThreshold), else fixed\nconst centerThreshold=props.radius||.2;if(normDist<centerThreshold){// Smoothstep for soft edge\nconst tSmooth=1-normDist/centerThreshold;const smooth=tSmooth*tSmooth*(3-2*tSmooth);// Smooth random using cosine interpolation between two seeded randoms\n// Use animTime for animation, or scrollPos for scroll-based randomness\nconst base=(props.loopAnimation?animTime:scrollPos*.003*animationSpeed)*.7+i*13.37;const tRand=fract(base);const r0=fract(Math.sin(Math.floor(base))*43758.5453);const r1=fract(Math.sin(Math.floor(base)+1)*43758.5453);const rand=r0*(1-.5*(1-Math.cos(Math.PI*tRand)))+r1*(.5*(1-Math.cos(Math.PI*tRand)));// Blend between baseline and random\nconst randomV=rand*props.randomness+.5*(1-props.randomness);v=v*(1-smooth)+randomV*smooth;}}if(props.orientation===\"vertical\"){const h=Math.max(0,minWidth+v*(maxWidth-minWidth));if(h===0)continue;let y0=alignment===\"center\"?(height-h)/2:alignment===\"right\"?height-h:0;const x=i*(lineHeight+gap);const x0=x,x1=x+lineHeight,y1=y0+h;const x0c=2*x0/width-1,x1c=2*x1/width-1;const y0c=1-2*y0/height,y1c=1-2*y1/height;const verts=new Float32Array([x0c,y0c,x1c,y0c,x0c,y1c,x0c,y1c,x1c,y0c,x1c,y1c]);gl.bufferData(gl.ARRAY_BUFFER,verts,gl.STREAM_DRAW);gl.drawArrays(gl.TRIANGLES,0,6);}else{const w=Math.max(0,minWidth+v*(maxWidth-minWidth));if(w===0)continue;let x0=alignment===\"center\"?(width-w)/2:alignment===\"right\"?width-w:0;const y=i*(lineHeight+gap);const x1=x0+w;const y0c=1-2*y/height,y1c=1-2*(y+lineHeight)/height;const x0c=2*x0/width-1,x1c=2*x1/width-1;const verts=new Float32Array([x0c,y0c,x1c,y0c,x0c,y1c,x0c,y1c,x1c,y0c,x1c,y1c]);gl.bufferData(gl.ARRAY_BUFFER,verts,gl.STREAM_DRAW);gl.drawArrays(gl.TRIANGLES,0,6);}}// Helper for seeded random\nfunction fract(x){return x-Math.floor(x);}animationRef.current=requestAnimationFrame(draw);}animationRef.current=requestAnimationFrame(draw);return()=>{if(animationRef.current)cancelAnimationFrame(animationRef.current);};},[minWidth,maxWidth,lineColor,lineHeight,gap,animationSpeed,alignment,props.orientation]);return /*#__PURE__*/_jsx(\"div\",{style:{...style,width:\"100%\",height:\"100%\",position:\"relative\",overflow:\"hidden\",background:\"transparent\"},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{width:\"100%\",height:\"100%\",display:\"block\"},\"aria-hidden\":\"true\"})});}function createShader(gl,type,source){const shader=gl.createShader(type);gl.shaderSource(shader,source);gl.compileShader(shader);return shader;}function createProgram(gl,vs,fs){const program=gl.createProgram();gl.attachShader(program,vs);gl.attachShader(program,fs);gl.linkProgram(program);return program;}function hexToRgb(hex){let c=hex.replace(\"#\",\"\");if(c.length===3)c=c[0]+c[0]+c[1]+c[1]+c[2]+c[2];const num=parseInt(c,16);return{r:num>>16&255,g:num>>8&255,b:num&255};}addPropertyControls(LineScroller,{enableEffect:{type:ControlType.Boolean,title:\"Enable Effect\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Enable or disable the random/animated effect\"},loopRandom:{type:ControlType.Boolean,title:\"Loop Random\",defaultValue:false,enabledTitle:\"Loop\",disabledTitle:\"Center\",description:\"Move random region through all positions as you scroll\"},loopAnimation:{type:ControlType.Boolean,title:\"Loop Animation\",defaultValue:false,enabledTitle:\"Animate\",disabledTitle:\"Scroll Only\",description:\"Animate random region automatically (not just on scroll)\"},orientation:{type:ControlType.Enum,title:\"Orientation\",options:[\"horizontal\",\"vertical\"],optionTitles:[\"Horizontal\",\"Vertical\"],defaultValue:\"horizontal\"},alignment:{type:ControlType.Enum,title:\"Align\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"],defaultValue:\"center\"},minWidth:{type:ControlType.Number,title:\"Min Width\",min:0,max:600,defaultValue:60,unit:\"px\"},maxWidth:{type:ControlType.Number,title:\"Max Width\",min:0,max:1200,defaultValue:320,unit:\"px\"},defaultWidth:{type:ControlType.Number,title:\"Default Width\",min:0,max:1200,defaultValue:undefined,unit:\"px\",description:\"Width used when effect is off (default: average of min/max)\"},lineColor:{type:ControlType.Color,title:\"Line Color\",defaultValue:\"#AAABAC\"},lineHeight:{type:ControlType.Number,title:\"Line Height\",min:1,max:32,defaultValue:6,unit:\"px\"},gap:{type:ControlType.Number,title:\"Gap\",min:0,max:64,defaultValue:16,unit:\"px\"},animationSpeed:{type:ControlType.Number,title:\"Anim Speed\",min:.1,max:4,defaultValue:1,step:.1},radius:{type:ControlType.Number,title:\"Radius\",min:.05,max:1,defaultValue:.2,step:.01,unit:\"\",description:\"Width of random region as % of container (0.2 = 20%)\"},randomness:{type:ControlType.Number,title:\"Randomness\",min:0,max:1,defaultValue:1,step:.01,unit:\"\",description:\"Strength of random effect (0 = none, 1 = full)\"},structure:{type:ControlType.Number,title:\"Structure\",min:0,max:1,defaultValue:0,step:.01,unit:\"\",description:\"0 = random, 1 = structured (even)\"},startRandomPosition:{type:ControlType.Number,title:\"Start Random Pos\",min:0,max:1,defaultValue:.5,step:.01,unit:\"\",description:\"Where random region is centered (0 = start, 1 = end)\"},scrollOffset:{type:ControlType.Number,title:\"Scroll Offset\",min:-2e3,max:2e3,defaultValue:0,step:1,unit:\"px\",description:\"Offset to scroll position for random region\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"LineScroller\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./LineScroller.map"],"mappings":"kMAMG,SAAwB,EAAa,EAAM,CAAC,GAAK,CAAC,WAAS,WAAS,YAAU,aAAW,MAAI,iBAAe,YAAU,QAAM,EAAE,EAAE,EAAY,EAAUA,EAAO,KAAK,CAAO,EAAaA,GAAQ,CAAO,EAAS,GAAqB,CAChO,EAAM,EAAS,EAAU,CAgByR,OAhBxR,MAAc,CAAC,GAAG,EAAS,OAAO,IAAM,EAAO,EAAU,QAAQ,GAAG,CAAC,EAAO,OAAO,IAAM,EAAG,EAAO,WAAW,QAAQ,CAAC,GAAG,CAAC,EAAG,OAC9J,IAAI,EAAQ,KAAS,EAAO,GAAO,EAAS,KAAS,EAAO,KAAS,EAAU,EAAE,EAAW,EAAE,SAAS,GAAS,CAAI,IAAoT,EAAQ,EAAc,EAAvH,EAAa,EAAG,EAAG,cAAxM,2EAA+N,CAAU,EAAa,EAAG,EAAG,gBAAlK,kFAA2L,CAAgC,CAAC,EAAG,WAAW,EAAQ,CAAC,EAAO,EAAG,kBAAkB,EAAQ,aAAa,CAAC,EAAS,EAAG,mBAAmB,EAAQ,UAAU,CAAC,EAAO,EAAG,cAAc,CAAC,EAAG,WAAW,EAAG,aAAa,EAAO,CAAC,EAAG,wBAAwB,EAAO,CAAC,EAAG,oBAAoB,EAAO,EAAE,EAAG,MAAM,GAAM,EAAE,EAAE,EAAE,GAAS,CAAC,EAAG,WAAW,EAAQ,CAAC,EAAG,UAAU,EAAS,EAAM,EAAE,IAAI,EAAM,EAAE,IAAI,EAAM,EAAE,IAAI,EAAE,CAAC,EAAG,WAAW,EAAG,aAAa,EAAO,CAAC,EAAG,wBAAwB,EAAO,CAAC,EAAG,oBAAoB,EAAO,EAAE,EAAG,MAAM,GAAM,EAAE,EAAE,CAAC,SAAS,GAAM,CAAC,IAAM,EAAM,EAAO,YAAkB,EAAO,EAAO,aAAgB,EAAO,QAAQ,GAAO,EAAO,SAAS,GAAQ,EAAO,MAAM,EAAM,EAAO,OAAO,EAAO,EAAG,SAAS,EAAE,EAAE,EAAM,EAAO,CAAC,EAAU,EAAM,EAAW,IAAgB,IAAQ,GAAW,IAAS,KAAY,EAAG,SAAS,EAAE,EAAE,EAAM,EAAO,CAAC,EAAU,EAAM,EAAW,GAAQ,EAAG,MAAM,EAAG,iBAAiB,CAAC,IAAM,EAAM,KAAK,IAAI,EAAE,KAAK,QAAQ,EAAM,cAAc,WAAW,EAAM,GAAQ,IAAM,EAAW,GAAK,CAAC,CACl5C,EAAS,EAAK,EAAM,gBAAe,EAAS,YAAY,KAAK,CAAC,KAAK,GACvE,IAAI,EAAU,EAAE,AAAqE,EAAlE,EAAM,cAAc,WAAsB,EAAO,SAAS,EAAkB,EAAO,SAAS,EAC/G,GAAW,EAAM,cAAc,EAC/B,IAAI,EAAa,EAAE,AAAyG,EAAtG,EAAM,cAAc,WAAyB,EAAO,aAAa,EAAM,qBAAqB,IAAuB,EAAO,cAAc,EAAM,qBAAqB,IAC7K,EAAM,EAAQ,EAAO,EAAE,IAAM,EAAO,EAAM,cAAc,WAChE,EAAW,EAAE,GAAG,EAAM,YAAY,EAAM,cAAc,CAAC,IAAM,EAAY,EAAO,EAAM,EAC1F,AAA0E,EAAvE,EAAM,cAA0B,EAAS,EAAY,EAA6B,EAAU,EAAc,IAAI,IAAI,EAAE,EAAE,EAAE,EAAM,IAAI,CAC9C,IAAI,IAAlF,OAAO,EAAM,cAAe,SAAS,EAAM,cAAc,EAAS,GAAU,GAAY,IAAW,EAAS,GAAU,GAAG,EAAM,aAAa,CACrJ,IAAI,EAAS,EAAE,GAAG,EAAM,cAAc,WAAW,CAAC,IAAM,EAAE,GAAG,EAAW,GAAK,EAAW,EAAQ,EAAO,GAAc,EAAM,WAAW,EAAW,EAAU,GAAO,EAAS,KAAK,KAAK,EAAE,IAAS,EAAM,GAAG,KAAM,CAAC,IAAM,EAAE,GAAG,EAAW,GAAK,EAAW,EAAQ,EAAO,GAAc,EAAM,WAAW,EAAW,EAAU,GAAQ,EAAS,KAAK,KAAK,EAAE,IAAS,EAAO,GAAG,CACzW,IAAM,EAAgB,EAAM,QAAQ,GAAG,GAAG,EAAS,EAAgB,CACnE,IAAM,EAAQ,EAAE,EAAS,EAAsB,EAAO,EAAQ,GAAS,EAAE,EAAE,GAErE,GAAM,EAAM,cAAc,EAAS,EAAU,KAAK,GAAgB,GAAG,EAAE,MAAY,EAAM,EAAM,EAAK,CAAO,EAAG,EAAM,KAAK,IAAI,KAAK,MAAM,EAAK,CAAC,CAAC,WAAW,CAAO,EAAG,EAAM,KAAK,IAAI,KAAK,MAAM,EAAK,CAAC,EAAE,CAAC,WAAW,CAClN,GAD8N,GAAI,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,GAAG,EAAM,GAAG,GAAI,IAAI,EAAE,KAAK,IAAI,KAAK,GAAG,EAAM,IACxR,EAAM,WAAW,IAAI,EAAE,EAAM,YAAY,EAAE,GAAG,EAAE,GAAQ,EAAQ,GAAS,GAAG,EAAM,cAAc,WAAW,CAAC,IAAM,EAAE,KAAK,IAAI,EAAE,EAAS,GAAG,EAAS,GAAU,CAAC,GAAG,IAAI,EAAE,SAAS,IAAI,EAAG,IAAY,UAAU,EAAO,GAAG,EAAE,IAAY,QAAQ,EAAO,EAAE,EAAQ,EAAE,GAAG,EAAW,GAAW,EAAG,EAAE,EAAG,EAAE,EAAW,EAAG,EAAG,EAAQ,EAAI,EAAE,EAAG,EAAM,EAAE,EAAI,EAAE,EAAG,EAAM,EAAQ,EAAI,EAAE,EAAE,EAAG,EAAO,EAAI,EAAE,EAAE,EAAG,EAAa,EAAM,IAAI,aAAa,CAAC,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,CAAC,CAAC,EAAG,WAAW,EAAG,aAAa,EAAM,EAAG,YAAY,CAAC,EAAG,WAAW,EAAG,UAAU,EAAE,EAAE,KAAM,CAAC,IAAM,EAAE,KAAK,IAAI,EAAE,EAAS,GAAG,EAAS,GAAU,CAAC,GAAG,IAAI,EAAE,SAAS,IAAI,EAAG,IAAY,UAAU,EAAM,GAAG,EAAE,IAAY,QAAQ,EAAM,EAAE,EAAQ,EAAE,GAAG,EAAW,GAAW,EAAG,EAAG,EAAQ,EAAI,EAAE,EAAE,EAAE,EAAO,EAAI,EAAE,GAAG,EAAE,GAAY,EAAa,EAAI,EAAE,EAAG,EAAM,EAAE,EAAI,EAAE,EAAG,EAAM,EAAQ,EAAM,IAAI,aAAa,CAAC,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,CAAC,CAAC,EAAG,WAAW,EAAG,aAAa,EAAM,EAAG,YAAY,CAAC,EAAG,WAAW,EAAG,UAAU,EAAE,EAAE,EAC1/B,SAAS,EAAM,EAAE,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE,CAAE,EAAa,QAAQ,sBAAsB,EAAK,CAAmD,MAAjD,GAAa,QAAQ,sBAAsB,EAAK,KAAW,CAAI,EAAa,SAAQ,qBAAqB,EAAa,QAAQ,GAAK,CAAC,EAAS,EAAS,EAAU,EAAW,EAAI,EAAe,EAAU,EAAM,YAAY,CAAC,CAAqB,EAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAM,MAAM,OAAO,OAAO,OAAO,SAAS,WAAW,SAAS,SAAS,WAAW,cAAc,CAAC,SAAsB,EAAK,SAAS,CAAC,IAAI,EAAU,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,QAAQ,QAAQ,CAAC,cAAc,OAAO,CAAC,CAAC,CAAC,CAAE,SAAS,EAAa,EAAG,EAAK,EAAO,CAAC,IAAM,EAAO,EAAG,aAAa,EAAK,CAAyD,OAAxD,EAAG,aAAa,EAAO,EAAO,CAAC,EAAG,cAAc,EAAO,CAAQ,EAAQ,SAAS,EAAc,EAAG,EAAG,EAAG,CAAC,IAAM,EAAQ,EAAG,eAAe,CAAiF,OAAhF,EAAG,aAAa,EAAQ,EAAG,CAAC,EAAG,aAAa,EAAQ,EAAG,CAAC,EAAG,YAAY,EAAQ,CAAQ,EAAS,SAAS,EAAS,EAAI,CAAC,IAAI,EAAE,EAAI,QAAQ,IAAI,GAAG,CAAI,EAAE,SAAS,IAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAG,IAAM,EAAI,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,GAAK,GAAG,IAAI,EAAE,GAAK,EAAE,IAAI,EAAE,EAAI,IAAI,sBAtBh/B,IAAoC,IAAwE,CAsBs4B,EAAoB,EAAa,CAAC,aAAa,CAAC,KAAK,EAAY,QAAQ,MAAM,gBAAgB,aAAa,GAAK,aAAa,KAAK,cAAc,MAAM,YAAY,+CAA+C,CAAC,WAAW,CAAC,KAAK,EAAY,QAAQ,MAAM,cAAc,aAAa,GAAM,aAAa,OAAO,cAAc,SAAS,YAAY,yDAAyD,CAAC,cAAc,CAAC,KAAK,EAAY,QAAQ,MAAM,iBAAiB,aAAa,GAAM,aAAa,UAAU,cAAc,cAAc,YAAY,2DAA2D,CAAC,YAAY,CAAC,KAAK,EAAY,KAAK,MAAM,cAAc,QAAQ,CAAC,aAAa,WAAW,CAAC,aAAa,CAAC,aAAa,WAAW,CAAC,aAAa,aAAa,CAAC,UAAU,CAAC,KAAK,EAAY,KAAK,MAAM,QAAQ,QAAQ,CAAC,OAAO,SAAS,QAAQ,CAAC,aAAa,CAAC,OAAO,SAAS,QAAQ,CAAC,aAAa,SAAS,CAAC,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,IAAI,EAAE,IAAI,IAAI,aAAa,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,IAAI,EAAE,IAAI,KAAK,aAAa,IAAI,KAAK,KAAK,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,IAAI,EAAE,IAAI,KAAK,aAAa,IAAA,GAAU,KAAK,KAAK,YAAY,8DAA8D,CAAC,UAAU,CAAC,KAAK,EAAY,MAAM,MAAM,aAAa,aAAa,UAAU,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,cAAc,IAAI,EAAE,IAAI,GAAG,aAAa,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,EAAY,OAAO,MAAM,MAAM,IAAI,EAAE,IAAI,GAAG,aAAa,GAAG,KAAK,KAAK,CAAC,eAAe,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,IAAI,GAAG,IAAI,EAAE,aAAa,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,IAAI,IAAI,IAAI,EAAE,aAAa,GAAG,KAAK,IAAI,KAAK,GAAG,YAAY,uDAAuD,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,IAAI,KAAK,GAAG,YAAY,iDAAiD,CAAC,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,IAAI,KAAK,GAAG,YAAY,oCAAoC,CAAC,oBAAoB,CAAC,KAAK,EAAY,OAAO,MAAM,mBAAmB,IAAI,EAAE,IAAI,EAAE,aAAa,GAAG,KAAK,IAAI,KAAK,GAAG,YAAY,uDAAuD,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,IAAI,KAAK,IAAI,IAAI,aAAa,EAAE,KAAK,EAAE,KAAK,KAAK,YAAY,8CAA8C,CAAC,CAAC"}