{"version":3,"file":"shared-lib.BGMDtxJb.mjs","names":["useRef","useState","_Fragment","useEffect","useLayoutEffect","fonts","css","className","fonts","css","className","React.useContext","React.useMemo","React.Fragment","React.forwardRef","useRef","React.useId","sharedStyle.className","sharedStyle1.className","sharedStyle2.className","className","RichText","Image1","sharedStyle.css","sharedStyle1.css","sharedStyle2.css","sharedStyle.fonts","sharedStyle1.fonts","sharedStyle2.fonts"],"sources":["https:/framerusercontent.com/modules/qis7Y4ITpPjVqFKUuusW/VQh2ooCHBco4rv1Q5duc/HiShineMotion.js","https:/framerusercontent.com/modules/EtXlTV8fgKFAqQO318xS/vFenQcsoG4diIyo0ytPL/JYee9N1Oc.js","https:/framerusercontent.com/modules/txnIkyyIOUVahWIE4S2t/tDdmitg55F96w5uWTGLP/KjsK4aI0t.js","https:/framerusercontent.com/modules/5eovtHTjPgfwsFwjYpEG/8qQ6CbCnRYGSUQR3CQ2x/DabXzDJNr.js","https:/framerusercontent.com/modules/rmBT0zo9VFcDwP3o6ASS/12C2OR5Kn3fxu4HmOlJa/USNNQ04l2.js","https:/framerusercontent.com/modules/5qBY8qwpGi6QRJaCriCM/JxUsOjAyaowEtnQqcFnW/siteMetadata.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{forwardRef,useEffect,useLayoutEffect,useRef,useState}from\"react\";// Hi Shine motion, ported from Santeri's portfolio (app.js and style.css).\n//\n// 1. Case morph. Framer's Page Effects run on the browser's View Transitions API. When the\n//    clicked thumbnail and the hero on the next page share a view-transition-name, the browser\n//    morphs one into the other. The CSS below gives it the portfolio's landFlip: 1.15s expo.inOut,\n//    the thumbnail cropped to cover as the box reshapes, the hero crossfading in from 30%.\n// 2. Media reveals. Big images fade in while they wipe up through a sliding mask and settle from a\n//    zoom, inside a box that stays put (portfolio cards, gallery items and hero). The Home reel zooms\n//    its frame open instead, with the picture zooming a little less for depth.\n// 3. Type. Headings rise word by word out of a mask; nav links roll their words on hover.\nconst MEDIA=\"hs-case-media\";const NAV=\"hs-nav\";const STYLE_ID=\"hs-motion-vt\";const FLIGHT=.95// seconds (portfolio landFlip was 1.15; shorter so a tap answers sooner)\n;const HANDOFF_MS=2500// a hero mounting this soon after a thumbnail click arrives by morph\n;const HERO_WAIT_MS=700// longest the page change holds for the hero to mount\n;const EXPO_IN_OUT=\"cubic-bezier(0.87, 0, 0.13, 1)\";const EXPO_OUT=\"cubic-bezier(0.16, 1, 0.3, 1)\";const SINE_IN_OUT=\"cubic-bezier(0.45, 0, 0.55, 1)\";const CUBIC_IN=\"cubic-bezier(0.55, 0.055, 0.675, 0.19)\";const POWER3_IN_OUT=\"cubic-bezier(0.65, 0, 0.35, 1)\";const FLIGHT_EASE=\"cubic-bezier(0.4, 0, 0.1, 1)\";const CSS=[// What shows through while the old page has faded and the new one hasn't yet: the new page's\n// own background (white, or black for Lab), set just before the transition plays\n// It comes in a beat after the change starts: in its first frame Safari can show this layer\n// before the old page's picture, which flashed the backdrop colour for a frame\n\"::view-transition { background-color: transparent; animation: hs-vt-backdrop 0s linear 0.15s both; }\",\"@keyframes hs-vt-backdrop { to { background-color: var(--hs-vt-bg, #ffffff); } }\",\"::view-transition-group(\"+MEDIA+\") {\",\"  animation-duration: \"+FLIGHT+\"s;\",// Moves off straight away and lands softly (expo in-out sat still for the first quarter)\n\"  animation-timing-function: \"+FLIGHT_EASE+\";\",\"}\",\"::view-transition-image-pair(\"+MEDIA+\") {\",\"  overflow: hidden;\",\"  border-radius: var(--hs-vt-radius-to, 10px);\",\"  animation: hs-vt-radius \"+FLIGHT+\"s \"+FLIGHT_EASE+\" both;\",\"}\",\"::view-transition-old(\"+MEDIA+\"),\",\"::view-transition-new(\"+MEDIA+\") {\",\"  width: 100%;\",\"  height: 100%;\",\"  object-fit: cover;\",\"  mix-blend-mode: normal;\",\"}\",// The thumbnail stays solid for the whole flight; the hero fades in over it mid-air\n\"::view-transition-old(\"+MEDIA+\") { animation: hs-vt-hold \"+FLIGHT+\"s linear both; }\",\"::view-transition-new(\"+MEDIA+\") { animation: hs-vt-in 0.65s \"+SINE_IN_OUT+\" \"+(FLIGHT*.3).toFixed(3)+\"s both; }\",// The nav stays put while the page changes underneath it. Matching navs crossfade with\n// plus-lighter, so identical pixels never dim; Lab's dark nav blends into the light one.\n\"::view-transition-group(\"+NAV+\") { animation-duration: 0.7s; animation-timing-function: \"+SINE_IN_OUT+\"; }\",\"::view-transition-old(\"+NAV+\") { animation: hs-vt-out 0.7s \"+SINE_IN_OUT+\" both; mix-blend-mode: plus-lighter; }\",\"::view-transition-new(\"+NAV+\") { animation: hs-vt-in 0.7s \"+SINE_IN_OUT+\" both; mix-blend-mode: plus-lighter; }\",// No solid bar of the nav's own: the fade under it (see syncNavFade) takes the page's colour\n\"[data-hs-nav] { background-color: transparent !important; }\",// One-sided pairs (media with no partner on the other page, a page without the shared nav)\n// leave and arrive with the page instead of popping\n\"::view-transition-old(\"+NAV+\"):only-child,\",\"::view-transition-old(\"+MEDIA+\"):only-child { animation: hs-vt-out 0.5s \"+CUBIC_IN+\" both; mix-blend-mode: normal; }\",\"::view-transition-new(\"+NAV+\"):only-child,\",\"::view-transition-new(\"+MEDIA+\"):only-child { animation: hs-vt-in 0.6s \"+EXPO_OUT+\" 0.15s both; mix-blend-mode: normal; }\",\"@keyframes hs-vt-out { from { opacity: 1; } to { opacity: 0; } }\",\"@keyframes hs-vt-hold { from { opacity: 1; } to { opacity: 1; } }\",\"@keyframes hs-vt-in { from { opacity: 0; } to { opacity: 1; } }\",\"@keyframes hs-vt-radius { from { border-radius: var(--hs-vt-radius-from, 8px); } to { border-radius: var(--hs-vt-radius-to, 10px); } }\",// Word masks (portfolio .mask): open to the sides and a little above so glyphs never clip,\n// closed just below the line so words rise out of nowhere\n\".hs-m { display: inline-block; clip-path: inset(-0.35em -0.25em -0.3em -0.25em); }\",\".hs-m > span { display: inline-block; }\",// Nav link roll: each word slides up and a copy follows from below, one word after another\n\".hs-r { display: inline-block; position: relative; overflow: hidden; vertical-align: top; }\",\".hs-r > span { display: inline-block; position: relative; transition: transform 0.8s \"+POWER3_IN_OUT+\"; transition-delay: calc(var(--i, 0) * 45ms); }\",\".hs-r > span::after { content: attr(data-t); position: absolute; left: 0; top: 100%; }\",\"@media (hover: hover) { [data-hs-roll]:hover .hs-r > span { transform: translateY(-100%); } }\",\"@media (prefers-reduced-motion: reduce) { .hs-r > span { transition: none; } }\",// A revealed box stays shown whatever opacity Framer writes back onto it (see markShown)\n\"[data-hs-shown] { opacity: var(--hs-shown-opacity, 1) !important; }\",// Back on a page: its cards stay where they were left (see useReveal)\n\"[data-hs-still] { transform: none !important; opacity: 1 !important; }\",// The Home reel once it has come in (see withReelReveal)\n\"[data-hs-reel-done] { transform: none !important; opacity: 1 !important; }\",// Framer's word-by-word text effect wraps each word in an inline-block, which an underline on\n// the paragraph skips, leaving only the spaces underlined. Carry it into the words.\n'.framer-text span[style*=\"inline-block\"] { text-decoration: inherit; }'].join(\"\\n\");/* ---------------------------------------------------------------\n   Shared plumbing\n   --------------------------------------------------------------- */// One-shot handoff from the clicked thumbnail to the hero on the next page. Not render state,\n// so a plain module value is enough (the module stays loaded across client-side navigation).\nlet handoff=null;const isFresh=()=>typeof window!==\"undefined\"&&handoff!==null&&performance.now()-handoff.at<HANDOFF_MS;// Resolved by the hero once it has its name. The page change waits for it, so the browser takes\n// its \"after\" picture with the hero in place even when the case page's code loads slowly.\nlet heroArrival=null;function expectHero(){let resolve=()=>{};const promise=new Promise(r=>resolve=r);heroArrival={promise,resolve,at:performance.now()};}const useIsoLayoutEffect=typeof window===\"undefined\"?useEffect:useLayoutEffect;const reducedMotion=()=>typeof window!==\"undefined\"&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;// Phones and tablets change pages without the morphs and fades: on iPhone the browser's page-change\n// pictures hitched on the tap, flashed and dropped the nav's blur. There the page changes at once and\n// its own reveals play instead. Desktop keeps everything. Decided once per load.\nconst NO_PAGE_TRANSITIONS=typeof window!==\"undefined\"&&(window.matchMedia(\"(hover: none) and (pointer: coarse)\").matches||window.innerWidth<810);if(NO_PAGE_TRANSITIONS)installTransitionHook();// Back and forward: the page comes back as it was left, with nothing playing in again. Replaying the\n// reveals there made the thumbnails show, vanish and wipe in again after the page change.\nlet poppedAt=-Infinity;if(typeof window!==\"undefined\"){// Capture: noted before Framer's router renders the page it goes back to\nwindow.addEventListener(\"popstate\",()=>poppedAt=performance.now(),true);}if(typeof window!==\"undefined\"){const later=()=>[60,300,900].forEach(ms=>window.setTimeout(()=>refreshFadeColour(),ms));window.addEventListener(\"popstate\",later);const push=history.pushState;history.pushState=function(...args){const out=push.apply(this,args);later();return out;};}if(typeof window!==\"undefined\"&&typeof MutationObserver===\"function\"){const mute=v=>{if(v.hasAttribute(\"muted\")||v.controls)return;v.defaultMuted=true;v.muted=true;v.setAttribute(\"muted\",\"\");};const sweep=root=>root.querySelectorAll&&root.querySelectorAll(\"video\").forEach(v=>mute(v));sweep(document);new MutationObserver(records=>{records.forEach(r=>r.addedNodes.forEach(n=>{if(n instanceof HTMLVideoElement)mute(n);else if(n instanceof Element)sweep(n);}));}).observe(document.documentElement,{childList:true,subtree:true});}const cameBack=()=>typeof window!==\"undefined\"&&performance.now()-poppedAt<3e3;const stillMotion=()=>reducedMotion()||cameBack();function pageBackground(){// Framer paints each page's background on <body>; it is already the new page's colour when the\n// update finishes (hit-testing is off during a transition, so ask the body, not a point)\nfor(const el of[document.body,document.documentElement]){const bg=el?getComputedStyle(el).backgroundColor:\"\";if(bg&&bg!==\"transparent\"&&!/rgba\\(.*,\\s*0\\)$/.test(bg))return bg;}return\"#ffffff\";}// The page change running right now, if any. Entrance animations wait for it to finish: Safari\n// takes its picture of the new page without them, so an animation that ran during the change\n// showed only its tail end afterwards, as a jump.\nlet activeTransition=null;function afterTransition(go){const t=activeTransition;if(t&&t.finished&&typeof t.finished.then===\"function\")t.finished.then(go,go);else go();}// Things mounting in a page change that need a moment before they can show (a logo's finished\n// frame, the Home reel's video, a case hero's picture): the change waits for them, briefly, so the\n// new page's picture has them in it instead of a blank that pops in when the change ends\nlet logoWaits=[];const SETTLE_CAP_MS=350;function holdChangeFor(el,maxMs){if(!activeTransition)return;let resolve=()=>{};const wait=new Promise(r=>resolve=r);logoWaits.push(wait);const done=()=>{resolve();logoWaits=logoWaits.filter(w=>w!==wait);};whenReady(el,{waitMs:maxMs,needsMedia:true},done);}function installTransitionHook(){const d=document;if(typeof d.startViewTransition!==\"function\"||d.__hsTransitionHook)return;d.__hsTransitionHook=true;// Framer only uses page transitions when the browser has them (it checks\n// !!document.startViewTransition on every page change); hidden, it swaps the page in directly\nif(NO_PAGE_TRANSITIONS){d.startViewTransition=undefined;return;}const original=d.startViewTransition.bind(d);d.startViewTransition=arg=>{document.documentElement.style.setProperty(\"--hs-vt-bg\",pageBackground());const update=typeof arg===\"function\"?arg:arg&&arg.update;const run=async()=>{if(update)await update();const arrival=heroArrival;// Only a thumbnail tapped just now has a hero on its way (a tap that didn't lead anywhere\n// mustn't hold up a later page change)\nif(arrival&&performance.now()-arrival.at<HANDOFF_MS){await Promise.race([arrival.promise,new Promise(r=>setTimeout(r,HERO_WAIT_MS))]);if(heroArrival===arrival)heroArrival=null;}if(logoWaits.length){await Promise.race([Promise.all(logoWaits),new Promise(r=>setTimeout(r,SETTLE_CAP_MS))]);}document.documentElement.style.setProperty(\"--hs-vt-bg\",pageBackground());syncNavFade();};const t=original(typeof arg===\"function\"||!arg?run:{...arg,update:run});activeTransition=t;if(t&&t.finished&&typeof t.finished.finally===\"function\"){t.finished.catch(()=>{}).finally(()=>{if(activeTransition===t)activeTransition=null;});}return t;};}function ensureStyles(){if(typeof document===\"undefined\")return;installTransitionHook();if(document.getElementById(STYLE_ID))return;const style=document.createElement(\"style\");style.id=STYLE_ID;style.textContent=CSS+\"\\n\"+FADE_CSS;document.head.appendChild(style);}function assignRef(ref,value){if(typeof ref===\"function\")ref(value);else if(ref)ref.current=value;}function clearArmed(){document.querySelectorAll(\"[data-hs-vt]\").forEach(n=>{n.style.removeProperty(\"view-transition-name\");n.removeAttribute(\"data-hs-vt\");});}function inView(el,go,fromBottom=\"6%\"){let done=false;const fire=()=>{if(done)return;done=true;near.disconnect();most.disconnect();go();};const near=new IntersectionObserver(entries=>entries.some(e=>e.isIntersecting)&&fire(),{rootMargin:\"0px 0px -\"+fromBottom+\" 0px\"});// The last items on a short page may never get that far up: most of the box on screen counts too\nconst most=new IntersectionObserver(entries=>entries.some(e=>e.intersectionRatio>=.6)&&fire(),{threshold:[.6]});near.observe(el);most.observe(el);return()=>{done=true;near.disconnect();most.disconnect();};}// Portfolio cards: clip from the bottom 1.3s, image from 1.25 over 1.7s, 0.09s per column\nconst CARD={clip:100,zoom:1.25,fadeMs:500,clipMs:1300,clipEase:EXPO_OUT,zoomMs:1700,zoomEase:EXPO_OUT,zoomDelayMs:0,stagger:.27,waitMs:800,needsMedia:false,triggerAt:\"8%\",delayMs:0};// Case gallery images and videos: fade in while the lower 80% wipes open and the picture settles\n// from 1.1. They stay hidden until a tenth of the screen in, then play straight away.\nconst GALLERY={clip:20,zoom:1.1,fadeMs:900,clipMs:1400,clipEase:EXPO_OUT,zoomMs:1800,zoomEase:EXPO_OUT,zoomDelayMs:0,stagger:.12,waitMs:600,needsMedia:false,triggerAt:\"10%\",delayMs:40};// Portfolio case hero on a direct load: wipe up 1.3s expo.inOut, image settles from 1.18 after 0.4s\nconst HERO={clip:100,zoom:1.18,fadeMs:400,clipMs:1300,clipEase:EXPO_IN_OUT,zoomMs:1800,zoomEase:EXPO_OUT,zoomDelayMs:400,stagger:0,waitMs:1200,needsMedia:true,triggerAt:\"6%\",delayMs:0};const FADE_OUT=\"cubic-bezier(0.33, 1, 0.68, 1)\";function mediaIn(el){const found=Array.from(el.querySelectorAll(\"[data-framer-background-image-wrapper], video, iframe\"));if(found.length)return found;const img=el.querySelector(\"img\");return img?[img]:[];}// The portfolio waits for its media before playing, so nothing wipes open empty and then pops\n// when its video arrives. Hold until the box has a size and every visible image or video inside\n// can show a frame, up to cfg.waitMs. A video that still has no frame by then fades in when it does.\nconst decoded=new WeakSet;function decodeAhead(img){if(decoded.has(img)||img.__hsDecoding)return;img.__hsDecoding=true;const done=()=>decoded.add(img);if(typeof img.decode===\"function\")img.decode().then(done,done);else done();}function whenReady(el,cfg,go){const started=performance.now();let timer=0;const tick=()=>{const media=Array.from(el.querySelectorAll(\"video, img\")).filter(m=>{return m.getBoundingClientRect().width>0;});const loaded=media.every(m=>{if(m instanceof HTMLVideoElement)return m.readyState>=2;const img=m;if(!img.complete||!(img.naturalWidth>0))return false;decodeAhead(img);return decoded.has(img);});const ready=el.getBoundingClientRect().height>1&&loaded&&(media.length>0||!cfg.needsMedia);if(ready||performance.now()-started>cfg.waitMs)go();else timer=window.setTimeout(tick,60);};tick();return()=>window.clearTimeout(timer);}// Whether a box draws anything of its own (a colour, a border, a shadow) rather than only holding\n// its contents. Such a box can't do the sliding mask below without its own paint sliding too.\nfunction paintsItself(cs){const bg=cs.backgroundColor||\"\";const clear=bg===\"transparent\"||/rgba\\([^)]*,\\s*0\\)$/.test(bg)||/\\/\\s*0\\)$/.test(bg);return!clear||cs.backgroundImage&&cs.backgroundImage!==\"none\"||cs.boxShadow&&cs.boxShadow!==\"none\"||parseFloat(cs.borderTopWidth)>0||parseFloat(cs.borderBottomWidth)>0;}// Framer's motion layer writes the style it last rendered with back onto the element whenever it\n// animates (a hover variant, for one), so a box shown by script alone went blank again on hover.\n// Once a reveal has played, its box is marked shown and a stylesheet rule overrides that.\n// It is kept shown by a stylesheet rule rather than by re-rendering the component: a re-render as\n// each reveal started cost a frame or two and made scrolling stutter.\nfunction markShown(el,intended){if(!el)return;ensureStyles();el.style.setProperty(\"--hs-shown-opacity\",intended!=null&&intended!==\"\"?String(intended):\"1\");el.setAttribute(\"data-hs-shown\",\"\");}function useShown(local,style){const intended=useRef(null);intended.current=style?style.opacity:null;return useRef(()=>markShown(local.current,intended.current)).current;}const hidden=style=>({...style,opacity:0});const fills=(r,box)=>Math.abs(r.left-box.left)<2&&Math.abs(r.right-box.right)<2&&Math.abs(r.top-box.top)<2&&Math.abs(r.bottom-box.bottom)<2;// The boxes directly inside an element as the browser lays them out. Framer wraps\n// breakpoint-specific layers in display: contents wrappers, which have no box of their own (a\n// transform on one does nothing), so their contents count instead.\nfunction shownKids(el){const out=[];Array.from(el.children).forEach(k=>{const display=getComputedStyle(k).display;if(display===\"none\")return;if(display===\"contents\")out.push(...shownKids(k));else out.push(k);});return out;}// A component's box (a video's) has square corners of its own: it takes the rounding of the one\n// thing it holds\nfunction roundness(el){const own=getComputedStyle(el).borderRadius||\"0px\";if(parseFloat(own)>0)return own;const only=shownKids(el);if(only.length!==1)return own;const kr=getComputedStyle(only[0]).borderRadius;return parseFloat(kr)>0&&fills(only[0].getBoundingClientRect(),el.getBoundingClientRect())?kr:own;}// The element an override animates. Frames hand theirs over as a ref. Framer's own code components\n// (its Video, for one) don't, which left every video with a reveal on it unrevealed. For those a\n// hidden marker is rendered next to the component, and its parent (the box Framer lays the\n// component out in) is used instead.\nfunction useTarget(ref){const local=useRef(null);const probe=useRef(null);// Frames never leave 0, so they render once. 1 probing, 2 found by the marker, 3 nothing found.\nconst[step,setStep]=useState(0);useIsoLayoutEffect(()=>{if(!local.current)setStep(1);},[]);useIsoLayoutEffect(()=>{if(step!==1)return;const box=probe.current&&probe.current.parentElement;if(box){local.current=box;box.style.opacity=\"0\";setStep(2);}else setStep(3);},[step]);const setNode=node=>{if(node instanceof HTMLElement)local.current=node;assignRef(ref,node);};const marker=step===1||step===2?/*#__PURE__*/_jsx(\"span\",{ref:probe,style:{display:\"none\"}}):null;return{local,setNode,marker,step};}// translateY on top of whatever transform the element already has\nconst moved=(base,y)=>\"translateY(\"+y+\"px)\"+(base&&base!==\"none\"?\" \"+base:\"\");const scaled=(base,s)=>\"scale(\"+s+\")\"+(base&&base!==\"none\"?\" \"+base:\"\");// Waits hidden until the box is in view and its media can show a frame, then plays once. Hidden\n// means transparent, not clipped: a clipped box looks smaller to the browser's visibility\n// observer, which held some reveals back and let others start half-way. Web Animations API.\n//\n// The wipe is a sliding mask, not an animated clip-path: the box (which clips) slides down and\n// everything inside it slides back up by the same amount, so the picture stays put while the\n// box's edge sweeps up over it. Only transform and opacity move, which phones animate off the\n// main thread; an animated clip-path is redrawn on the main thread every frame and made scrolling\n// stutter on iPhone while reveals were playing.\nfunction useReveal(local,cfg,enabled=true,onShown=()=>{},step=0){const settled=useRef(false);useIsoLayoutEffect(()=>{const el=local.current;if(!el||!enabled||!cameBack())return;settled.current=true;el.style.opacity=\"1\";onShown();// Framer's own entrance on the card around it (the lift) would replay too: hold it still\nlet n=el.parentElement;for(let i=0;i<4&&n&&n!==document.body;i++,n=n.parentElement){const t=n.style.transform||\"\";if(t.indexOf(\"translateY(\")>=0&&t.indexOf(\"%\")<0||n.style.opacity===\"0\"){n.setAttribute(\"data-hs-still\",\"\");}}},[enabled,step]);useEffect(()=>{const el=local.current;if(!el||!enabled||settled.current)return;if(stillMotion()||typeof el.animate!==\"function\"){el.style.opacity=\"1\";onShown();return;}const anims=[];const late=[];const timers=[];const giveBack=[];let started=false;const start=()=>{if(started)return;started=true;// Measure everything first: once the animations exist, the boxes are already moved\nconst cs=getComputedStyle(el);const box=el.getBoundingClientRect();const kids=shownKids(el);const radius=roundness(el);const rounded=parseFloat(radius)>0;if(rounded&&!(parseFloat(cs.borderRadius)>0)){const was=el.style.borderRadius;el.style.borderRadius=radius;giveBack.push(()=>el.style.borderRadius=was);}const blank=Array.from(el.querySelectorAll(\"video\")).filter(v=>v.readyState<2);const across=Math.min(1,Math.max(0,box.left/window.innerWidth));const delay=Math.round(across*cfg.stagger*1e3)+cfg.delayMs;const timing=(duration,easing,extra=0)=>({duration,easing,delay:delay+extra,fill:\"backwards\"});const lift=Math.round(box.height*cfg.clip/100);const mask=lift>0&&kids.length>0&&!paintsItself(cs);const kidBase=kids.map(k=>getComputedStyle(k).transform);// Zoom targets: each picture zooms inside something that holds its edges in place. A fill\n// image's own wrapper does that for the picture in it; a bare video right in the box has\n// nothing to hold it, so it only wipes.\nconst zooms=[];mediaIn(el).forEach(m=>{let target=m;let clipper=m.parentElement;while(clipper&&clipper!==el&&getComputedStyle(clipper).display===\"contents\"){clipper=clipper.parentElement;}if(clipper===el){target=m.matches(\"[data-framer-background-image-wrapper]\")?m.querySelector(\"img\"):null;clipper=m;}if(!target||!clipper)return;const fill=fills(clipper.getBoundingClientRect(),box);zooms.push({target,clipper,base:getComputedStyle(target).transform,fill});});// The box clips for the length of the reveal (its rounded corners included)\nif(cs.overflow===\"visible\"){const was=el.style.overflow;el.style.overflow=\"hidden\";giveBack.push(()=>el.style.overflow=was);}zooms.forEach(({clipper,fill})=>{const ccs=getComputedStyle(clipper);if(ccs.overflow===\"visible\")clipper.style.overflow=\"hidden\";if(fill&&rounded&&!(parseFloat(ccs.borderRadius)>0))clipper.style.borderRadius=radius;});anims.push(el.animate([{opacity:0},{opacity:1}],timing(cfg.fadeMs,FADE_OUT)));if(mask){anims.push(el.animate([{transform:moved(cs.transform,lift)},{transform:moved(cs.transform,0)}],timing(cfg.clipMs,cfg.clipEase)));kids.forEach((k,i)=>anims.push(k.animate([{transform:moved(kidBase[i],-lift)},{transform:moved(kidBase[i],0)}],timing(cfg.clipMs,cfg.clipEase))));}else{// A box that paints itself can't slide under its own edge: it rises a little instead\nconst rise=Math.min(48,Math.round(box.height*.08));anims.push(el.animate([{transform:moved(cs.transform,rise)},{transform:moved(cs.transform,0)}],timing(cfg.clipMs,cfg.clipEase)));}zooms.forEach(({target,base})=>anims.push(target.animate([{transform:scaled(base,cfg.zoom)},{transform:scaled(base,1)}],timing(cfg.zoomMs,cfg.zoomEase,cfg.zoomDelayMs))));// A video with no picture yet fades in when it gets one, rather than popping in later\nblank.forEach(v=>{const fade=v.animate([{opacity:0},{opacity:1}],{duration:600,easing:SINE_IN_OUT,fill:\"backwards\"});fade.pause();late.push(fade);let played=false;const go=()=>{if(played)return;played=true;fade.play();};v.addEventListener(\"loadeddata\",go,{once:true});v.addEventListener(\"playing\",go,{once:true});timers.push(window.setTimeout(go,3e3));});el.style.opacity=\"1\";anims[0].finished.then(onShown).catch(()=>{});Promise.all(anims.map(anim=>anim.finished)).then(()=>giveBack.splice(0).forEach(f=>f())).catch(()=>{});};// Pictures are decoded a screen ahead, so a reveal doesn't start with a decode\nconst soon=new IntersectionObserver(entries=>{if(!entries.some(e=>e.isIntersecting))return;soon.disconnect();el.querySelectorAll(\"img\").forEach(img=>decodeAhead(img));},{rootMargin:\"0px 0px 100% 0px\"});soon.observe(el);let stopWaiting=()=>{};let dead=false;const stopWatching=inView(el,()=>{stopWaiting=whenReady(el,cfg,()=>afterTransition(()=>!dead&&start()));},cfg.triggerAt);return()=>{dead=true;soon.disconnect();stopWatching();stopWaiting();anims.forEach(anim=>anim.cancel());late.forEach(anim=>anim.cancel());timers.forEach(t=>window.clearTimeout(t));giveBack.splice(0).forEach(f=>f());};},[enabled,step]);}function revealWith(Component,cfg){return /*#__PURE__*/forwardRef(function MediaReveal(props,ref){const{local,setNode,marker,step}=useTarget(ref);const show=useShown(local,props.style);useReveal(local,cfg,true,show,step);return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Component,{...props,style:hidden(props.style),ref:setNode}),marker]});});}// Card image (cards that leave the site)\nexport function withCardMedia(Component){return revealWith(Component,CARD);}// Case page gallery item: image, video or a block of them\nexport function withGalleryMedia(Component){return revealWith(Component,GALLERY);}// Page-top media without a morph partner\nexport function withHeroReveal(Component){return revealWith(Component,HERO);}/* ---------------------------------------------------------------\n   Home reel: the frame zooms open and the picture inside zooms a little less, so it seems to sit\n   behind the frame. Starts at once, on a black stand-in; the video fades in when it has a frame.\n   --------------------------------------------------------------- */const REEL={frameFrom:.86,pictureFrom:1.1,frameMs:1700,pictureMs:2100,fadeMs:700};const REEL_WAIT={waitMs:2500,needsMedia:true};function settleReel(el){ensureStyles();el.style.opacity=\"1\";el.style.transform=\"none\";el.setAttribute(\"data-hs-reel-done\",\"\");}export function withReelReveal(Component){return /*#__PURE__*/forwardRef(function ReelReveal(props,ref){const local=useRef(null);const inChange=useRef(false);// Arriving in a page change, the reel is simply there and comes in with the page: an animation\n// during the change doesn't show on iPhone, and one after it looked like a late pop. The zoom\n// is for loading the front page itself.\nuseIsoLayoutEffect(()=>{const el=local.current;if(!el||!activeTransition)return;inChange.current=true;settleReel(el);holdChangeFor(el,SETTLE_CAP_MS);},[]);useEffect(()=>{const el=local.current;if(!el||inChange.current)return;if(stillMotion()||typeof el.animate!==\"function\"){settleReel(el);return;}const anims=[];const timers=[];let dead=false;let stopWaiting=()=>{};const begin=()=>{if(dead)return;const t0=performance.now();anims.push(el.animate([{transform:\"scale(\"+REEL.frameFrom+\")\",opacity:0},{transform:\"scale(1)\",opacity:1}],{duration:REEL.frameMs,easing:EXPO_OUT,fill:\"both\"}));anims[0].finished.then(()=>!dead&&settleReel(el)).catch(()=>{});const handled=new Set;const attach=()=>{const late=performance.now()-t0;mediaIn(el).forEach(m=>{if(handled.has(m))return;handled.add(m);const holder=m.parentElement;if(holder&&holder!==el){const hs=getComputedStyle(holder);if(hs.overflow===\"visible\")holder.style.overflow=\"hidden\";// While zoomed, the picture's own rounded corners sit outside the clip. The clip\n// borrows them, so the corners are round from the first frame of the zoom.\nconst radius=getComputedStyle(m).borderRadius;if(parseFloat(radius)>0&&!(parseFloat(hs.borderRadius)>0)){holder.style.borderRadius=radius;holder.style.clipPath=\"inset(0 round \"+radius+\")\";}}// Counter-zoom: frame 0.86 x picture 1.10 = picture at 0.95, so it grows less\nif(late<REEL.frameMs*.4){anims.push(m.animate([{transform:\"scale(\"+REEL.pictureFrom+\")\"},{transform:\"scale(1)\"}],{duration:REEL.pictureMs,easing:EXPO_OUT,delay:0,fill:\"both\"}));}if(m instanceof HTMLVideoElement&&m.readyState<2){const fade=m.animate([{opacity:0},{opacity:1}],{duration:REEL.fadeMs,easing:SINE_IN_OUT,fill:\"both\"});fade.pause();anims.push(fade);const show=()=>fade.play();m.addEventListener(\"loadeddata\",show,{once:true});m.addEventListener(\"playing\",show,{once:true});}});};attach();[120,400,1e3].forEach(ms=>timers.push(window.setTimeout(attach,ms)));};// Hidden until the video can show a frame (at most REEL_WAIT), so the zoom is the picture\n// coming in rather than an empty box\nstopWaiting=whenReady(el,REEL_WAIT,()=>!dead&&begin());return()=>{dead=true;stopWaiting();timers.forEach(t=>window.clearTimeout(t));anims.forEach(a=>a.cancel());};},[]);// Below the desktop breakpoint the reel fills the screen under the nav; the frame's own\n// padding is the even margin to the sides, the nav and the bottom of the screen. Measured from\n// the window as it opens (CSS viewport units disagree with what Brave and Safari show), and\n// only resized when the width changes, not as a phone's toolbars slide in and out.\nuseIsoLayoutEffect(()=>{const el=local.current;if(!el)return;let lastWidth=-1;const size=()=>{const width=window.innerWidth;if(width===lastWidth)return;lastWidth=width;if(width>=1200){el.style.removeProperty(\"height\");return;}// From where the reel actually starts on the page down to the bottom of the visible screen\nconst nav=document.querySelector(\"[data-hs-nav]\");const navH=nav?Math.round(nav.getBoundingClientRect().height):0;// Its place in the layout, not on screen: it starts out scaled down for the zoom\nlet top=0;for(let n=el;n;n=n.offsetParent)top+=n.offsetTop;top=Math.round(top);const viewH=Math.round(window.visualViewport?window.visualViewport.height:window.innerHeight);el.style.height=Math.max(200,viewH-Math.max(top,navH))+\"px\";return navH;};const navH=size();// The nav may not have laid out yet on the first pass\nconst t=navH===0?window.setTimeout(()=>(lastWidth=-1,size()),200):0;window.addEventListener(\"resize\",size);return()=>{window.clearTimeout(t);window.removeEventListener(\"resize\",size);};},[]);// Server render starts in the opening pose, so nothing flashes before the zoom begins\nconst style={...props.style,opacity:0,transform:\"scale(\"+REEL.frameFrom+\")\"};return /*#__PURE__*/_jsx(Component,{...props,style:style,ref:node=>{local.current=node;assignRef(ref,node);}});});}/* ---------------------------------------------------------------\n   Case morph\n   --------------------------------------------------------------- */// Card image that opens a page with a hero: reveals like a card, and clicking anywhere on the\n// card names this image so it can fly into that page's hero.\nexport function withCaseThumb(Component){return /*#__PURE__*/forwardRef(function CaseThumb(props,ref){const{local,setNode,marker,step}=useTarget(ref);const show=useShown(local,props.style);useReveal(local,CARD,true,show,step);useEffect(()=>{ensureStyles();const el=local.current;// No morph without page transitions: the case page plays its hero reveal instead\nif(!el||NO_PAGE_TRANSITIONS)return;const target=el.closest(\"a\")||el;const opensHere=!(target instanceof HTMLAnchorElement&&target.target===\"_blank\");const arm=()=>{const box=el.getBoundingClientRect();if(!box.width||!box.height)return;clearArmed();el.style.setProperty(\"view-transition-name\",MEDIA);el.setAttribute(\"data-hs-vt\",\"\");document.documentElement.style.setProperty(\"--hs-vt-radius-from\",roundness(el)||\"8px\");handoff={at:performance.now()};expectHero();};const onClick=e=>{if(e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||!opensHere)return;// Already armed by the tap that this click follows\nif(handoff&&performance.now()-handoff.at<800&&el.hasAttribute(\"data-hs-vt\"))return;arm();};// On a phone Framer starts the page change on the tap itself, before the click event\n// arrives: armed only on click, the case page mounted its hero before the morph was set\n// up, so it played its own reveal, then jumped and flashed. A tap (finger lifted without\n// having scrolled) arms it first.\nlet down=null;const onDown=e=>{down=e.pointerType===\"mouse\"||!e.isPrimary?null:{x:e.clientX,y:e.clientY};};const onUp=e=>{const start=down;down=null;if(!start||e.pointerType===\"mouse\"||!opensHere)return;if(Math.hypot(e.clientX-start.x,e.clientY-start.y)>10)return;arm();};const onCancel=()=>down=null;// Capture phase: runs before Framer's router handles the tap or the click\ntarget.addEventListener(\"pointerdown\",onDown,true);target.addEventListener(\"pointerup\",onUp,true);target.addEventListener(\"pointercancel\",onCancel,true);target.addEventListener(\"click\",onClick,true);return()=>{target.removeEventListener(\"pointerdown\",onDown,true);target.removeEventListener(\"pointerup\",onUp,true);target.removeEventListener(\"pointercancel\",onCancel,true);target.removeEventListener(\"click\",onClick,true);};},[step]);return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Component,{...props,style:hidden(props.style),ref:setNode}),marker]});});}// Whether this page is the one the site was loaded on (a visit, a reload), as opposed to one\n// reached by a page change. Heroes mounted again shortly after (Framer can mount a page twice on\n// phones) get the same answer.\nconst LOAD_PATH=typeof window!==\"undefined\"?window.location.pathname:\"\";let loadVerdict=null;function isInitialPage(){if(typeof window===\"undefined\")return true;if(!loadVerdict){loadVerdict={initial:window.location.pathname===LOAD_PATH,at:performance.now()};}return loadVerdict.initial&&performance.now()-loadVerdict.at<3e3;}// Hero image of a case or article. Arriving from a thumbnail, the morph brings it in. Loading the\n// page itself gets the hero reveal. Any other arrival (the nav, the back button) shows it as it is:\n// the page change brings it in. Phones and tablets have no page transitions, so there every arrival\n// but the back button gets the reveal. On phones the hero could mount before the tap had set up the morph,\n// so it played the load reveal mid-transition, then jumped and flashed as it mounted again.\nexport function withCaseHero(Component){return /*#__PURE__*/forwardRef(function CaseHero(props,ref){const local=useRef(null);const[mode]=useState(()=>isFresh()?\"morph\":cameBack()?\"plain\":isInitialPage()||NO_PAGE_TRANSITIONS?\"reveal\":\"plain\");const show=useShown(local,props.style);useReveal(local,HERO,mode===\"reveal\",show);useIsoLayoutEffect(()=>{ensureStyles();const el=local.current;if(el&&mode!==\"reveal\")holdChangeFor(el,SETTLE_CAP_MS);// Whatever it arrives as, a page change waiting for this hero can go on\nif(heroArrival&&mode!==\"morph\")heroArrival.resolve();if(!el||mode!==\"morph\")return;el.style.setProperty(\"view-transition-name\",MEDIA);document.documentElement.style.setProperty(\"--hs-vt-radius-to\",getComputedStyle(el).borderRadius||\"0px\");if(heroArrival)heroArrival.resolve();// Drop the name once landed, so leaving this page doesn't fly the hero anywhere\nconst t=window.setTimeout(()=>{el.style.removeProperty(\"view-transition-name\");handoff=null;},(FLIGHT+.8)*1e3);return()=>window.clearTimeout(t);},[]);// Server render and direct loads start covered, so the reveal doesn't flash\nconst style=mode===\"reveal\"?hidden(props.style):props.style;return /*#__PURE__*/_jsx(Component,{...props,style:style,ref:node=>{local.current=node;assignRef(ref,node);}});});}/* ---------------------------------------------------------------\n   Type\n   --------------------------------------------------------------- */// Splits the text of a rendered text layer into word masks. Returns the inner spans and a\n// function that puts the original text nodes back, so React's own nodes are what stays on the page.\nfunction splitWords(root,make){const walker=document.createTreeWalker(root,NodeFilter.SHOW_TEXT);const texts=[];while(walker.nextNode())texts.push(walker.currentNode);// Where each word sits in the browser's own layout, before anything is split\nconst natural=[];texts.forEach(t=>{const value=t.nodeValue||\"\";if(!value.trim()||!t.parentNode)return;const re=/\\S+/g;let m;while(m=re.exec(value)){const range=document.createRange();range.setStart(t,m.index);range.setEnd(t,m.index+m[0].length);const box=range.getBoundingClientRect();natural.push({left:box.left,top:box.top});}});const swaps=[];const words=[];texts.forEach(t=>{const value=t.nodeValue||\"\";if(!value.trim()||!t.parentNode)return;const nodes=[];value.split(/(\\s+)/).forEach(part=>{if(!part)return;if(/^\\s+$/.test(part))nodes.push(document.createTextNode(part));else{const w=make(part,words.length);words.push(w);nodes.push(w);}});const frag=document.createDocumentFragment();nodes.forEach(n=>frag.appendChild(n));t.parentNode.replaceChild(frag,t);swaps.push({original:t,nodes});});// A word in its own box loses its kerning against the space after it (Reformat B tucks the\n// space in after an \"r\"), which pushed the rest of the line ~3px right and made it jump back\n// when the plain text returned. Each word is nudged onto its natural spot instead.\nwords.forEach((w,i)=>{const want=natural[i];if(!want)return;const range=document.createRange();range.selectNodeContents(w);const box=range.getBoundingClientRect();if(Math.abs(box.top-want.top)>2)return;// wrapped differently: leave it be\nconst dx=want.left-box.left;if(Math.abs(dx)>.05)w.style.marginLeft=dx.toFixed(2)+\"px\";});const restore=()=>{swaps.forEach(({original,nodes})=>{const first=nodes[0];if(!first||!first.parentNode)return;first.parentNode.insertBefore(original,first);nodes.forEach(n=>n.parentNode&&n.parentNode.removeChild(n));});};return{words,restore};}const maskWord=word=>{const mask=document.createElement(\"span\");mask.className=\"hs-m\";const inner=document.createElement(\"span\");inner.textContent=word;mask.appendChild(inner);return mask;};const TEXT_FADE={durationMs:1100,easing:\"cubic-bezier(0.33, 1, 0.68, 1)\"};// Portfolio rise: 1.25s expo.out, words 0.028s apart, rising 170% through their masks\nfunction riseWith(Component,opts){return /*#__PURE__*/forwardRef(function MaskedRise(props,ref){const local=useRef(null);const show=useShown(local,props.style);useIsoLayoutEffect(()=>{ensureStyles();const el=local.current;if(!el)return;if(stillMotion()||typeof el.animate!==\"function\"){el.style.opacity=\"1\";show();return;}const{words,restore}=splitWords(el,maskWord);const inners=words.map(w=>w.firstElementChild);// The heading stays transparent until it plays; the word animations are only made then,\n// so headings further down the page don't each hold a layer per word while they wait\nlet anims=[];let done=false;const finish=()=>{if(done)return;done=true;anims.forEach(a=>a.cancel());restore();};const play=()=>{if(done)return;anims=[];inners.forEach((s,i)=>{const delay=i*opts.stagger*1e3;anims.push(s.animate([{transform:\"translateY(170%)\"},{transform:\"translateY(0)\"}],{duration:opts.durationMs,easing:EXPO_OUT,delay,fill:\"backwards\"}));// The fade runs on its own gentler curve, so it carries on visibly through the rise\nanims.push(s.animate([{opacity:0},{opacity:1}],{duration:TEXT_FADE.durationMs,easing:TEXT_FADE.easing,delay,fill:\"backwards\"}));});el.style.opacity=\"1\";show();if(anims.length)Promise.all(anims.map(a=>a.finished)).then(finish).catch(()=>{});else finish();};let stop=()=>{};const go=()=>afterTransition(play);if(opts.onMountDelayMs!==null){const t=window.setTimeout(go,opts.onMountDelayMs);stop=()=>window.clearTimeout(t);}else stop=inView(el,go);return()=>{stop();finish();};},[]);return /*#__PURE__*/_jsx(Component,{...props,style:hidden(props.style),ref:node=>{local.current=node;assignRef(ref,node);}});});}// Headings: rise word by word as they scroll into view\nexport function withMaskedRise(Component){return riseWith(Component,{onMountDelayMs:null,stagger:.028,durationMs:1250});}// Case and article titles: rise once the hero has landed (portfolio: 0.85s, words 0.06s apart)\nexport function withTitleRise(Component){return riseWith(Component,{onMountDelayMs:850,stagger:.06,durationMs:1300});}/* ---------------------------------------------------------------\n   Case descriptions: the meta line and the description each fade in as one block, a beat after\n   the title starts rising (word by word took too long on the longer descriptions)\n   --------------------------------------------------------------- */const BLOCK={afterMountMs:1e3,minDelayMs:120,durationMs:900,rise:12};export function withBlockFade(Component){return /*#__PURE__*/forwardRef(function BlockFade(props,ref){const local=useRef(null);const show=useShown(local,props.style);useIsoLayoutEffect(()=>{const el=local.current;if(!el)return;if(stillMotion()||typeof el.animate!==\"function\"){el.style.opacity=\"1\";show();return;}const mounted=performance.now();let anim=null;const play=()=>{// In view on arrival: wait for the title. Scrolled to later: almost at once.\nconst delay=Math.max(BLOCK.minDelayMs,BLOCK.afterMountMs-(performance.now()-mounted));anim=el.animate([{opacity:0,transform:\"translateY(\"+BLOCK.rise+\"px)\"},{opacity:1,transform:\"none\"}],{duration:BLOCK.durationMs,easing:EXPO_OUT,delay,fill:\"backwards\"});el.style.opacity=\"1\";anim.finished.then(show).catch(()=>{});};let dead=false;const stop=inView(el,()=>afterTransition(()=>!dead&&play()));return()=>{dead=true;stop();if(anim)anim.cancel();};},[]);return /*#__PURE__*/_jsx(Component,{...props,style:hidden(props.style),ref:node=>{local.current=node;assignRef(ref,node);}});});}/* ---------------------------------------------------------------\n   Article text: fades in top to bottom as the article opens, quick and light\n   --------------------------------------------------------------- */const STAGGER={startMs:350,stepMs:55,durationMs:700,rise:8,maxSteps:12};export function withStaggerIn(Component){return /*#__PURE__*/forwardRef(function StaggerIn(props,ref){const local=useRef(null);const show=useShown(local,props.style);useIsoLayoutEffect(()=>{const el=local.current;if(!el)return;if(stillMotion()||typeof el.animate!==\"function\"){el.style.opacity=\"1\";show();return;}// The outermost text and media blocks that are actually shown, in reading order\nconst all=Array.from(el.querySelectorAll(\"h1, h2, h3, h4, h5, h6, p, li, blockquote, img, video\")).filter(n=>n.getBoundingClientRect().width>0);// Empty paragraphs are spacing in the article body: they don't take a beat\nconst items=all.filter(n=>!all.some(o=>o!==n&&o.contains(n))&&(/^(IMG|VIDEO)$/.test(n.tagName)||(n.textContent||\"\").trim().length>0));const at=new Map(items.map(n=>[n,n.getBoundingClientRect()]));items.sort((a,b)=>Math.round((at.get(a).top-at.get(b).top)/4)||at.get(a).left-at.get(b).left);let anims=[];let dead=false;const run=()=>{if(dead)return;anims=items.map((n,i)=>n.animate([{opacity:0,transform:\"translateY(\"+STAGGER.rise+\"px)\"},{opacity:1,transform:\"none\"}],{duration:STAGGER.durationMs,easing:EXPO_OUT,delay:STAGGER.startMs+Math.min(i,STAGGER.maxSteps)*STAGGER.stepMs,fill:\"backwards\"}));el.style.opacity=\"1\";show();};afterTransition(run);return()=>{dead=true;anims.forEach(a=>a.cancel());};},[]);// Server render starts hidden, so nothing shows before its turn\nreturn /*#__PURE__*/_jsx(Component,{...props,style:hidden(props.style),ref:node=>{local.current=node;assignRef(ref,node);}});});}// Nav links: on hover each word slides up out of its mask and a copy rises in after it\nexport function withRollLink(Component){return /*#__PURE__*/forwardRef(function RollLink(props,ref){const local=useRef(null);useEffect(()=>{ensureStyles();const el=local.current;// Touch screens get plain links: on iPhone the first tap played the roll as a hover and\n// only a second tap opened the page\nif(!el||reducedMotion()||!window.matchMedia(\"(hover: hover)\").matches)return;const{restore}=splitWords(el,(word,i)=>{const mask=document.createElement(\"span\");mask.className=\"hs-r\";const inner=document.createElement(\"span\");inner.textContent=word;inner.setAttribute(\"data-t\",word);inner.style.setProperty(\"--i\",String(i));mask.appendChild(inner);return mask;});el.setAttribute(\"data-hs-roll\",\"\");return()=>{el.removeAttribute(\"data-hs-roll\");restore();};},[]);return /*#__PURE__*/_jsx(Component,{...props,ref:node=>{local.current=node;assignRef(ref,node);}});});}/* ---------------------------------------------------------------\n   Logo: the logotype draws itself once when the site is loaded on the front page (a visit, a\n   reload). Arriving anywhere by a page change, or loading any other page, it is shown finished,\n   played at a speed that ends it at once.\n   --------------------------------------------------------------- */let logoVerdict=null;function logoShouldPlay(){if(typeof window===\"undefined\")return true;if(!logoVerdict){const front=window.location.pathname.replace(/\\/+$/,\"\")===\"\";logoVerdict={play:front,at:performance.now()};}// Only the logos of the page that was loaded: a nav mounted later, after a page change, stays still\nreturn logoVerdict.play&&performance.now()-logoVerdict.at<2500;}// Safari can go on painting an SVG mask as it was drawn earlier: the logo's letters, drawn through\n// masks, stayed hidden on their first frame while the unmasked asterisk moved on. (The page\n// transitions used to force a full repaint, which hid this.) Taking the SVG out of the layout and\n// putting it back makes the browser draw its masks afresh.\nfunction repaintSvg(player){const svg=player&&player.shadowRoot?player.shadowRoot.querySelector(\"svg\"):null;if(!svg||!svg.isConnected)return;const was=svg.style.display;svg.style.display=\"none\";void svg.getBoundingClientRect();svg.style.display=was;}// Keeps a logo that shouldn't play on its finished frame. The Dot Lottie component seeks its player\n// back to its \"progress\" (0%) once the player reports ready, and that can land after the logo was\n// settled: with no page transition holding the page back (phones), it often did, and the nav sat\n// on the first frame, a lone asterisk. Any later jump off the end is put back before it paints.\nfunction pinToEnd(player){let pinned=null;let settledAt=NaN;let busy=false;let gone=false;let frame=0;let budget=30// a few re-pins are all it ever needs; a runaway can't hold the page\n;const offs=[];const toEnd=()=>{busy=false;if(gone)return;let a=null;try{a=player.getLottie();}catch(e){}// A destroyed animation has no renderer (the player was taken off the page)\nif(!a||!a.renderer||!(a.totalFrames>0)||budget--<=0)return;if(a!==pinned&&typeof a.addEventListener===\"function\"){pinned=a;const anim=a;const off=anim.addEventListener(\"enterFrame\",()=>{if(busy||gone||anim.currentFrame===settledAt)return;busy=true;Promise.resolve().then(toEnd);});if(typeof off===\"function\")offs.push(off);}busy=true// the enterFrame of this goToAndStop is ours\n;a.goToAndStop(a.totalFrames-1,true);settledAt=a.currentFrame;busy=false;window.cancelAnimationFrame(frame);frame=window.requestAnimationFrame(()=>!gone&&repaintSvg(player));};toEnd();const onReady=()=>Promise.resolve().then(toEnd);player.addEventListener(\"ready\",onReady);offs.push(()=>player.removeEventListener(\"ready\",onReady));// Once the page has settled, one more fresh paint for good measure\nconst late=window.setTimeout(()=>!gone&&repaintSvg(player),600);return()=>{gone=true;window.clearTimeout(late);window.cancelAnimationFrame(frame);// The player destroys its animation when it leaves the page, before this runs, and a\n// destroyed animation throws on removing a listener: that error took the next page down\noffs.forEach(f=>{try{f();}catch(e){}});};}export function withLogoOnce(Component){return /*#__PURE__*/forwardRef(function LogoOnce(props,ref){const[play]=useState(logoShouldPlay);const probe=useRef(null);const ready=useRef(null);// A logo that shouldn't play stays hidden until it's on its finished frame (the first frame,\n// a lone dot, showed in the nav during page changes); a page change waits for it\nuseIsoLayoutEffect(()=>{const box=probe.current&&probe.current.parentElement;if(play||!box)return;box.style.opacity=\"0\";let resolve=()=>{};const wait=new Promise(r=>resolve=r);logoWaits.push(wait);ready.current=()=>{box.style.opacity=\"\";resolve();logoWaits=logoWaits.filter(w=>w!==wait);ready.current=null;};return()=>ready.current&&ready.current();},[]);// The player doesn't always start by itself (Lab's phone layout sat on its first frame, which\n// its reveal mask leaves empty). Once the animation has loaded, a logo that shouldn't play is\n// put on its last frame, and one that should play is started if it hasn't.\nuseEffect(()=>{const box=probe.current&&probe.current.parentElement;if(!box)return;let timer=0;let tries=0;let unpin=()=>{};const settle=()=>{const player=box.querySelector(\"dotlottie-player\");let anim=null;try{anim=player&&typeof player.getLottie===\"function\"?player.getLottie():null;}catch(e){}if(anim&&anim.totalFrames>0){if(!play)unpin=pinToEnd(player);else if(anim.isPaused&&anim.currentFrame===0)anim.play();if(ready.current)ready.current();return;}if(tries++<80)timer=window.setTimeout(settle,50);else if(ready.current)ready.current();};timer=window.setTimeout(settle,play?400:0);return()=>{window.clearTimeout(timer);try{unpin();}catch(e){}};},[]);return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Component,{...props,ref:ref,speed:play?props.speed:1e3}),/*#__PURE__*/_jsx(\"span\",{ref:probe,style:{display:\"none\"}})]});});}/* ---------------------------------------------------------------\n   Hover cursor\n   --------------------------------------------------------------- */// The \"View\" pill grows out of the pointer and shrinks back into it (portfolio showCursor and\n// hideCursor: 0.6s expo.out in, 0.35s power2.in out)\nconst PILL={inMs:600,outMs:350};const POWER2_IN=\"cubic-bezier(0.55, 0.085, 0.68, 0.53)\";const pointer={x:NaN,y:NaN,tracking:false};// The pill that is shrinking away right now, if any. Skimming a card's edge removes and re-adds\n// Framer's cursor in quick succession: the new pill takes over from this one instead of\n// starting again from nothing, so the edge doesn't flicker.\nlet leaving=null;function trackPointer(){if(pointer.tracking||typeof window===\"undefined\")return;pointer.tracking=true;window.addEventListener(\"pointermove\",e=>{pointer.x=e.clientX;pointer.y=e.clientY;},{passive:true,capture:true});}// Framer removes the cursor the moment the pointer leaves, so the exit plays on a copy: the pill\n// shrinks back into the pointer, following it, and the copy is removed when it is gone\nfunction shrinkAway(pill){let root=pill;while(root&&getComputedStyle(root).position!==\"fixed\")root=root.parentElement;if(!root||!root.isConnected)return;if(leaving)leaving.finish();const path=[];for(let n=pill;n!==root&&n.parentElement;n=n.parentElement){path.unshift(Array.prototype.indexOf.call(n.parentElement.children,n));}const live=getComputedStyle(pill);const ghost=root.cloneNode(true);let ghostPill=ghost;path.forEach(i=>ghostPill=ghostPill.children[i]||ghostPill);ghost.removeAttribute(\"id\");ghost.setAttribute(\"aria-hidden\",\"true\");ghost.style.pointerEvents=\"none\";document.body.appendChild(ghost);const base=ghost.style.transform;let fromX=pointer.x;let fromY=pointer.y;const follow=e=>{if(isNaN(fromX)){fromX=e.clientX;fromY=e.clientY;}ghost.style.transform=base+\" translate(\"+(e.clientX-fromX)+\"px, \"+(e.clientY-fromY)+\"px)\";};window.addEventListener(\"pointermove\",follow,{passive:true});let done=false;const finish=()=>{if(done)return;done=true;if(leaving&&leaving.finish===finish)leaving=null;window.removeEventListener(\"pointermove\",follow);ghost.remove();};leaving={pill:ghostPill,finish};const scale=live.scale&&live.scale!==\"none\"?live.scale:\"1\";const out=ghostPill.animate([{scale,opacity:live.opacity},{scale:\"0\",opacity:0}],{duration:PILL.outMs,easing:POWER2_IN,fill:\"forwards\"});out.onfinish=finish;out.oncancel=finish;window.setTimeout(finish,PILL.outMs+250);}export function withCursorPill(Component){return /*#__PURE__*/forwardRef(function CursorPill(props,ref){const local=useRef(null);useLayoutEffect(()=>{const el=local.current;if(!el||stillMotion()||typeof el.animate!==\"function\")return;trackPointer();let fromScale=0;let fromOpacity=0;if(leaving){const was=getComputedStyle(leaving.pill);fromScale=was.scale===\"none\"?1:parseFloat(was.scale)||0;fromOpacity=parseFloat(was.opacity)||0;leaving.finish();}el.animate([{scale:String(fromScale),opacity:fromOpacity},{scale:\"1\",opacity:1}],{duration:PILL.inMs,easing:EXPO_OUT});// Runs while the cursor is still on the page, just before Framer removes it\nreturn()=>shrinkAway(el);},[]);return /*#__PURE__*/_jsx(Component,{...props,ref:node=>{local.current=node;assignRef(ref,node);}});});}/* ---------------------------------------------------------------\n   Navigation\n   --------------------------------------------------------------- */// Kept out of the page fade so it stays still between pages, like the portfolio header. The nav\n// keeps its own colours (its variants: dark on the light pages, light on Lab); instead of a solid\n// bar it sits on a soft fade and blur in the page's colour.\nfunction blendHost(el){for(let n=el;n&&n!==document.body;n=n.parentElement){const position=getComputedStyle(n).position;if(position===\"fixed\"||position===\"sticky\")return n;}return el;}// A soft fade under the nav: the page's own background at 60%, held through the top fifth, then\n// easing out to nothing a little below the nav's bottom edge, over a progressive blur. It sits on <body> and takes body's colour,\n// which Framer changes with each page; in a page change it is part of the page's own picture, so\n// it turns colour exactly with the page. Below the blended nav, so the nav still inverts over it.\nconst FADE_ID=\"hs-nav-fade\";const FADE_BELOW=24// px the fade trails on below the nav\n;const BLUR_ID=\"hs-nav-blur\";const FADE_CSS=[\"#\"+FADE_ID+\", #\"+BLUR_ID+\" { position: fixed; top: 0; left: 0; right: 0; pointer-events: none; }\",// The colour is a plain gradient written from script in the page's colour (see fadeGradient): Safari\n// left a masked layer out of its picture of the page, so the fade vanished during page changes.\n// Its own transition group keeps it in place, above the pictures that fly in under the nav.\n\"#\"+FADE_ID+\" { view-transition-name: hs-nav-fade; }\",// Progressive blur under the colour: three stacked layers, each stronger and reaching less far\n// down, so the blur builds toward the top and is gone by the nav's bottom edge\n\"#\"+BLUR_ID+\" > div { position: absolute; top: 0; right: 0; bottom: 0; left: 0; }\",\"#\"+BLUR_ID+\" > div:nth-child(1) { -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px);\",\"  -webkit-mask-image: linear-gradient(to bottom, #000 0%, #000 50%, transparent 100%); mask-image: linear-gradient(to bottom, #000 0%, #000 50%, transparent 100%); }\",\"#\"+BLUR_ID+\" > div:nth-child(2) { -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px);\",\"  -webkit-mask-image: linear-gradient(to bottom, #000 0%, #000 30%, transparent 75%); mask-image: linear-gradient(to bottom, #000 0%, #000 30%, transparent 75%); }\",\"#\"+BLUR_ID+\" > div:nth-child(3) { -webkit-backdrop-filter: blur(9px); backdrop-filter: blur(9px);\",\"  -webkit-mask-image: linear-gradient(to bottom, #000 0%, #000 15%, transparent 50%); mask-image: linear-gradient(to bottom, #000 0%, #000 15%, transparent 50%); }\"].join(\"\\n\");// 60% at most: held down to a fifth of the way, then a sine ease-in-out ramp to nothing at the bottom\nconst FADE_RAMP=[[0,1],[20,1],[26.7,.983],[33.3,.933],[40,.854],[46.7,.75],[53.3,.629],[60,.5],[66.7,.371],[73.3,.25],[80,.146],[86.7,.067],[93.3,.017],[100,0]];const FADE_MAX=.6;function fadeGradient(colour){const m=colour.match(/rgba?\\(([^)]+)\\)/);const p=m?m[1].split(/[\\s,/]+/).filter(Boolean).map(parseFloat):[255,255,255];const[r,g,b]=p;const alpha=p.length>3?p[3]:1;return\"linear-gradient(to bottom, \"+FADE_RAMP.map(([at,k])=>\"rgba(\"+r+\", \"+g+\", \"+b+\", \"+ +(k*FADE_MAX*alpha).toFixed(3)+\") \"+at+\"%\").join(\", \")+\")\";}// At the top of a page nothing is under the nav yet, and the fade would only haze the top edge of\n// whatever starts below it (the Home reel): it comes in over the first 48px of scrolling\nlet fadeScrollHooked=false;function fadeForScroll(){const k=Math.max(0,Math.min(1,window.scrollY/48));const v=String(Math.round(k*100)/100);[FADE_ID,BLUR_ID].forEach(id=>{const e=document.getElementById(id);if(e&&e.style.opacity!==v)e.style.opacity=v;});}function hookFadeScroll(){if(fadeScrollHooked)return;fadeScrollHooked=true;window.addEventListener(\"scroll\",fadeForScroll,{passive:true});}function refreshFadeColour(){const fade=typeof document!==\"undefined\"&&document.getElementById(FADE_ID);if(fade)fade.style.backgroundImage=fadeGradient(pageBackground());}function syncNavFade(){if(typeof document===\"undefined\")return;let fade=document.getElementById(FADE_ID);let height=0;let z=1;document.querySelectorAll(\"[data-hs-nav]\").forEach(n=>{const r=n.getBoundingClientRect();if(r.width<=0||r.height<=height)return;height=r.height;z=parseInt(getComputedStyle(blendHost(n)).zIndex,10)||1;});let blur=document.getElementById(BLUR_ID);if(!height){if(fade)fade.style.display=\"none\";if(blur)blur.style.display=\"none\";return;}if(!blur){blur=document.createElement(\"div\");blur.id=BLUR_ID;blur.setAttribute(\"aria-hidden\",\"true\");for(let i=0;i<3;i++)blur.appendChild(document.createElement(\"div\"));// The colour goes over the blur, so the blur comes first\ndocument.body.insertBefore(blur,fade&&fade.parentNode===document.body?fade:null);}if(!fade){fade=document.createElement(\"div\");fade.id=FADE_ID;fade.setAttribute(\"aria-hidden\",\"true\");document.body.appendChild(fade);}[blur,fade].forEach(layer=>{layer.style.display=\"\";layer.style.height=Math.round(height)+FADE_BELOW+\"px\";layer.style.zIndex=String(Math.max(0,z-1));});refreshFadeColour();hookFadeScroll();fadeForScroll();}export function withPersistentNav(Component){return /*#__PURE__*/forwardRef(function PersistentNav(props,ref){const local=useRef(null);useLayoutEffect(()=>{ensureStyles();const el=local.current;if(!el)return;// The sticky or fixed box, the one that sits over the page content\nconst host=blendHost(el);el.setAttribute(\"data-hs-nav\",\"\");// The fade goes right under the nav: the nav needs a stacking level for that\nconst zWas=host.style.zIndex;if(getComputedStyle(host).zIndex===\"auto\")host.style.zIndex=\"10\";syncNavFade();const ro=typeof ResizeObserver===\"function\"?new ResizeObserver(()=>syncNavFade()):null;if(ro)ro.observe(el);window.addEventListener(\"resize\",syncNavFade);return()=>{if(ro)ro.disconnect();window.removeEventListener(\"resize\",syncNavFade);el.removeAttribute(\"data-hs-nav\");host.style.zIndex=zWas;// A page without a nav takes the fade away; one with its own nav resizes it\nwindow.setTimeout(syncNavFade,0);};},[]);const style={...props.style,viewTransitionName:NAV};return /*#__PURE__*/_jsx(Component,{...props,style:style,ref:node=>{local.current=node;assignRef(ref,node);}});});}\nexport const __FramerMetadata__ = {\"exports\":{\"withStaggerIn\":{\"type\":\"reactHoc\",\"name\":\"withStaggerIn\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withMaskedRise\":{\"type\":\"reactHoc\",\"name\":\"withMaskedRise\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withPersistentNav\":{\"type\":\"reactHoc\",\"name\":\"withPersistentNav\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCaseHero\":{\"type\":\"reactHoc\",\"name\":\"withCaseHero\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withHeroReveal\":{\"type\":\"reactHoc\",\"name\":\"withHeroReveal\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withTitleRise\":{\"type\":\"reactHoc\",\"name\":\"withTitleRise\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCursorPill\":{\"type\":\"reactHoc\",\"name\":\"withCursorPill\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withBlockFade\":{\"type\":\"reactHoc\",\"name\":\"withBlockFade\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withGalleryMedia\":{\"type\":\"reactHoc\",\"name\":\"withGalleryMedia\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCaseThumb\":{\"type\":\"reactHoc\",\"name\":\"withCaseThumb\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCardMedia\":{\"type\":\"reactHoc\",\"name\":\"withCardMedia\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withReelReveal\":{\"type\":\"reactHoc\",\"name\":\"withReelReveal\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withRollLink\":{\"type\":\"reactHoc\",\"name\":\"withRollLink\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withLogoOnce\":{\"type\":\"reactHoc\",\"name\":\"withLogoOnce\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./HiShineMotion.map","// Generated by Framer (98b71dc)\nimport{fontStore}from\"framer\";fontStore.loadFonts([]);export const fonts=[{explicitInter:true,fonts:[]}];export const css=[\".framer-5t8g7 .framer-styles-preset-yy37sg:not(.rich-text-wrapper), .framer-5t8g7 .framer-styles-preset-yy37sg.rich-text-wrapper a { --framer-link-hover-text-decoration: underline; }\"];export const className=\"framer-5t8g7\";\nexport const __FramerMetadata__ = {\"exports\":{\"fonts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"css\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"className\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (b7e356e)\nimport{fontStore}from\"framer\";fontStore.loadFonts([\"CUSTOMV2;Neue Haas Grotesk Text Regular\"]);export const fonts=[{explicitInter:true,fonts:[{cssFamilyName:\"Neue Haas Grotesk Text Regular\",source:\"custom\",style:\"normal\",uiFamilyName:\"Neue Haas Grotesk Text\",url:\"https://framerusercontent.com/assets/LM5CRJ1WZFUOGx3kUe7WyXDPM.woff2\",weight:\"400\"}]}];export const css=['.framer-TncaV .framer-styles-preset-uc5mpy:not(.rich-text-wrapper), .framer-TncaV .framer-styles-preset-uc5mpy.rich-text-wrapper p { --framer-font-family: \"Neue Haas Grotesk Text Regular\", \"Neue Haas Grotesk Text Regular Placeholder\", sans-serif; --framer-font-open-type-features: normal; --framer-font-size: 14px; --framer-font-style: normal; --framer-font-variation-axes: normal; --framer-font-weight: 400; --framer-letter-spacing: 0em; --framer-line-height: 1.4em; --framer-paragraph-spacing: 0px; --framer-text-alignment: start; --framer-text-color: #000000; --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: none; }','@media (max-width: 1199px) and (min-width: 810px) { .framer-TncaV .framer-styles-preset-uc5mpy:not(.rich-text-wrapper), .framer-TncaV .framer-styles-preset-uc5mpy.rich-text-wrapper p { --framer-font-family: \"Neue Haas Grotesk Text Regular\", \"Neue Haas Grotesk Text Regular Placeholder\", sans-serif; --framer-font-open-type-features: normal; --framer-font-size: 14px; --framer-font-style: normal; --framer-font-variation-axes: normal; --framer-font-weight: 400; --framer-letter-spacing: 0em; --framer-line-height: 1.4em; --framer-paragraph-spacing: 0px; --framer-text-alignment: start; --framer-text-color: #000000; --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: none; } }','@media (max-width: 809px) and (min-width: 0px) { .framer-TncaV .framer-styles-preset-uc5mpy:not(.rich-text-wrapper), .framer-TncaV .framer-styles-preset-uc5mpy.rich-text-wrapper p { --framer-font-family: \"Neue Haas Grotesk Text Regular\", \"Neue Haas Grotesk Text Regular Placeholder\", sans-serif; --framer-font-open-type-features: normal; --framer-font-size: 14px; --framer-font-style: normal; --framer-font-variation-axes: normal; --framer-font-weight: 400; --framer-letter-spacing: 0em; --framer-line-height: 1.4em; --framer-paragraph-spacing: 0px; --framer-text-alignment: start; --framer-text-color: #000000; --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: none; } }'];export const className=\"framer-TncaV\";\nexport const __FramerMetadata__ = {\"exports\":{\"css\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"className\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"fonts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (fc3086c)\nimport{fontStore}from\"framer\";fontStore.loadFonts([\"CUSTOMV2;Reformat B Regular\"]);export const fonts=[{explicitInter:true,fonts:[{cssFamilyName:\"Reformat B Regular\",openType:true,source:\"custom\",style:\"normal\",uiFamilyName:\"Reformat B\",url:\"https://framerusercontent.com/assets/trbJZgRHszo5QWVkkjH3Yw8Bwo.woff2\",weight:\"400\"}]}];export const css=[\".framer-bmc3u .framer-styles-preset-1jxgfao:not(.rich-text-wrapper), .framer-bmc3u .framer-styles-preset-1jxgfao.rich-text-wrapper h1 { --framer-font-family: \\\"Reformat B Regular\\\", \\\"Reformat B Regular Placeholder\\\", sans-serif; --framer-font-open-type-features: 'blwf' on, 'cv09' on, 'cv03' on, 'cv04' on, 'cv11' on; --framer-font-size: 56px; --framer-font-style: normal; --framer-font-variation-axes: normal; --framer-font-weight: 400; --framer-letter-spacing: -0.02em; --framer-line-height: 1.1em; --framer-paragraph-spacing: 0px; --framer-text-alignment: start; --framer-text-color: #000000; --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: none; }\",\"@media (max-width: 1199px) and (min-width: 0px) { .framer-bmc3u .framer-styles-preset-1jxgfao:not(.rich-text-wrapper), .framer-bmc3u .framer-styles-preset-1jxgfao.rich-text-wrapper h1 { --framer-font-family: \\\"Reformat B Regular\\\", \\\"Reformat B Regular Placeholder\\\", sans-serif; --framer-font-open-type-features: 'blwf' on, 'cv09' on, 'cv03' on, 'cv04' on, 'cv11' on; --framer-font-size: 40px; --framer-font-style: normal; --framer-font-variation-axes: normal; --framer-font-weight: 400; --framer-letter-spacing: -0.02em; --framer-line-height: 1.1em; --framer-paragraph-spacing: 0px; --framer-text-alignment: start; --framer-text-color: #000000; --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: none; } }\"];export const className=\"framer-bmc3u\";\nexport const __FramerMetadata__ = {\"exports\":{\"className\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"fonts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"css\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (fc3086c)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ControlType,cx,getFontsFromSharedStyle,Image as Image1,Link,RichText,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import{useRef}from\"react\";import*as sharedStyle from\"https://framerusercontent.com/modules/5eovtHTjPgfwsFwjYpEG/8qQ6CbCnRYGSUQR3CQ2x/DabXzDJNr.js\";import*as sharedStyle2 from\"https://framerusercontent.com/modules/EtXlTV8fgKFAqQO318xS/vFenQcsoG4diIyo0ytPL/JYee9N1Oc.js\";import*as sharedStyle1 from\"https://framerusercontent.com/modules/txnIkyyIOUVahWIE4S2t/tDdmitg55F96w5uWTGLP/KjsK4aI0t.js\";const cycleOrder=[\"swP3sNtx0\",\"lK_4PRDLU\",\"yia8Ly_ca\"];const serializationHash=\"framer-Ea6UZ\";const variantClassNames={lK_4PRDLU:\"framer-v-bbei3q\",swP3sNtx0:\"framer-v-xj4r2s\",yia8Ly_ca:\"framer-v-xt4yxu\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants?.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={bounce:.2,delay:0,duration:.4,type:\"spring\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value??config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const humanReadableVariantMap={Footer_Dark:\"lK_4PRDLU\",Footer_Light:\"swP3sNtx0\",Petalite:\"yia8Ly_ca\"};const Variants=motion.create(React.Fragment);const getProps=({height,id,width,...props})=>{return{...props,variant:humanReadableVariantMap[props.variant]??props.variant??\"swP3sNtx0\"};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const fallbackRef=useRef(null);const refBinding=ref??fallbackRef;const defaultLayoutId=React.useId();const{activeLocale,setLocale}=useLocaleInfo();const componentViewport=useComponentViewport();const{style,className,layoutId,variant,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({cycleOrder,defaultVariant:\"swP3sNtx0\",ref:refBinding,variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const sharedStyleClassNames=[sharedStyle.className,sharedStyle1.className,sharedStyle2.className];const scopingClassNames=cx(serializationHash,...sharedStyleClassNames);return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId??defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsxs(motion.div,{...restProps,...gestureHandlers,className:cx(scopingClassNames,\"framer-xj4r2s\",className,classNames),\"data-framer-name\":\"Footer_Light\",layoutDependency:layoutDependency,layoutId:\"swP3sNtx0\",ref:refBinding,style:{...style},...addPropertyOverrides({lK_4PRDLU:{\"data-framer-name\":\"Footer_Dark\"},yia8Ly_ca:{\"data-framer-name\":\"Petalite\"}},baseVariant,gestureVariant),children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-izm6n2\",\"data-framer-name\":\"border\",layoutDependency:layoutDependency,layoutId:\"z41Int5GH\",style:{backgroundColor:\"rgb(0, 0, 0)\"},variants:{lK_4PRDLU:{backgroundColor:\"rgb(255, 255, 255)\"},yia8Ly_ca:{backgroundColor:\"rgb(86, 98, 103)\"}}}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-f0o2p5\",\"data-framer-name\":\"Title/logo\",layoutDependency:layoutDependency,layoutId:\"ADxhYaiVq\",children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.h1,{className:\"framer-styles-preset-1jxgfao\",\"data-styles-preset\":\"DabXzDJNr\",dir:\"auto\",children:\"Purposeful design, thoughtful technology & strong relationships.\"})}),className:\"framer-ilor80\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"OR7JJQji4\",variants:{lK_4PRDLU:{\"--extracted-gdpscs\":\"rgb(255, 255, 255)\"},yia8Ly_ca:{\"--extracted-gdpscs\":\"rgb(255, 255, 255)\"}},verticalAlignment:\"top\",withExternalLayout:true,...addPropertyOverrides({lK_4PRDLU:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.h1,{className:\"framer-styles-preset-1jxgfao\",\"data-styles-preset\":\"DabXzDJNr\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-gdpscs, rgb(255, 255, 255))\"},children:\"Purposeful design, thoughtful technology & strong relationships.\"})})},yia8Ly_ca:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.h1,{className:\"framer-styles-preset-1jxgfao\",\"data-styles-preset\":\"DabXzDJNr\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-gdpscs, rgb(255, 255, 255))\"},children:\"Purposeful design, thoughtful technology & strong relationships.\"})})}},baseVariant,gestureVariant)})}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1f49yah\",\"data-framer-name\":\"Address etc\",layoutDependency:layoutDependency,layoutId:\"yiXScOFJp\",children:[/*#__PURE__*/_jsxs(motion.div,{className:\"framer-641ss2\",layoutDependency:layoutDependency,layoutId:\"xJit0mvFl\",children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-5yokr1\",layoutDependency:layoutDependency,layoutId:\"i8to0lbPX\",children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",style:{\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(170, 170, 170))\"},children:\"Studio:\"}),/*#__PURE__*/_jsxs(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",children:[\"H\\xe4meentie 11\",/*#__PURE__*/_jsx(motion.br,{}),\"00530 Helsinki, Finland\"]})]}),className:\"framer-1oxn7bw\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"jj7t1Z1_Q\",style:{\"--extracted-r6o4lv\":\"rgb(170, 170, 170)\"},variants:{lK_4PRDLU:{\"--extracted-1xy48n3\":\"rgb(255, 255, 255)\",\"--extracted-5dqwso\":\"rgb(255, 255, 255)\"},yia8Ly_ca:{\"--extracted-1xy48n3\":\"rgb(255, 255, 255)\",\"--extracted-5dqwso\":\"rgb(255, 255, 255)\"}},verticalAlignment:\"top\",withExternalLayout:true,...addPropertyOverrides({lK_4PRDLU:{children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(170, 170, 170))\"},children:\"Studio:\"}),/*#__PURE__*/_jsxs(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",children:[/*#__PURE__*/_jsx(motion.span,{style:{\"--framer-text-color\":\"var(--extracted-5dqwso, rgb(255, 255, 255))\"},children:\"H\\xe4meentie 11\"}),/*#__PURE__*/_jsx(motion.br,{}),/*#__PURE__*/_jsx(motion.span,{style:{\"--framer-text-color\":\"var(--extracted-1xy48n3, rgb(255, 255, 255))\"},children:\"00530 Helsinki, Finland\"})]})]})},yia8Ly_ca:{children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(170, 170, 170))\"},children:\"Studio:\"}),/*#__PURE__*/_jsxs(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",children:[/*#__PURE__*/_jsx(motion.span,{style:{\"--framer-text-color\":\"var(--extracted-5dqwso, rgb(255, 255, 255))\"},children:\"H\\xe4meentie 11\"}),/*#__PURE__*/_jsx(motion.br,{}),/*#__PURE__*/_jsx(motion.span,{style:{\"--framer-text-color\":\"var(--extracted-1xy48n3, rgb(255, 255, 255))\"},children:\"00530 Helsinki, Finland\"})]})]})}},baseVariant,gestureVariant)})}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-19zd1hz\",layoutDependency:layoutDependency,layoutId:\"pVF2yeLY6\",children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",style:{\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(170, 170, 170))\"},children:\"Working across:\"}),/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",children:\"Amsterdam, London, New York\"})]}),className:\"framer-oqcofa\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"lGLUQ4_yx\",style:{\"--extracted-r6o4lv\":\"rgb(170, 170, 170)\"},variants:{lK_4PRDLU:{\"--extracted-2gxw0f\":\"rgb(255, 255, 255)\"},yia8Ly_ca:{\"--extracted-2gxw0f\":\"rgb(255, 255, 255)\"}},verticalAlignment:\"top\",withExternalLayout:true,...addPropertyOverrides({lK_4PRDLU:{children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(170, 170, 170))\"},children:\"Working across:\"}),/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-2gxw0f, rgb(255, 255, 255))\"},children:\"Amsterdam, London, New York\"})]})},yia8Ly_ca:{children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(170, 170, 170))\"},children:\"Working across:\"}),/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-2gxw0f, rgb(255, 255, 255))\"},children:\"Amsterdam, London, New York\"})]})}},baseVariant,gestureVariant)})}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-1zzn45\",layoutDependency:layoutDependency,layoutId:\"leweEyfFA\",children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",children:/*#__PURE__*/_jsx(Link,{href:\"https://www.instagram.com/hishine.co/\",motionChild:true,nodeId:\"O04kDHrHB\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-yy37sg\",\"data-styles-preset\":\"JYee9N1Oc\",children:\"* Instagram\"})})}),/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",children:/*#__PURE__*/_jsx(Link,{href:\"https://www.linkedin.com/company/hishine-co\",motionChild:true,nodeId:\"O04kDHrHB\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-yy37sg\",\"data-styles-preset\":\"JYee9N1Oc\",children:\"* LinkedIn\"})})}),/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",children:/*#__PURE__*/_jsx(Link,{href:\"mailto:hi@hishine.co\",motionChild:true,nodeId:\"O04kDHrHB\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-yy37sg\",\"data-styles-preset\":\"JYee9N1Oc\",children:\"* hi@hishine.co\"})})})]}),className:\"framer-1mzsi25\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"O04kDHrHB\",variants:{lK_4PRDLU:{\"--extracted-1iakedh\":\"rgb(255, 255, 255)\",\"--extracted-2gxw0f\":\"rgb(255, 255, 255)\",\"--extracted-r6o4lv\":\"rgb(255, 255, 255)\"},yia8Ly_ca:{\"--extracted-1iakedh\":\"rgb(255, 255, 255)\",\"--extracted-2gxw0f\":\"rgb(255, 255, 255)\",\"--extracted-r6o4lv\":\"rgb(255, 255, 255)\"}},verticalAlignment:\"top\",withExternalLayout:true,...addPropertyOverrides({lK_4PRDLU:{children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(255, 255, 255))\"},children:/*#__PURE__*/_jsx(Link,{href:\"https://www.instagram.com/hishine.co/\",motionChild:true,nodeId:\"O04kDHrHB\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-yy37sg\",\"data-styles-preset\":\"JYee9N1Oc\",children:\"* Instagram\"})})}),/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-2gxw0f, rgb(255, 255, 255))\"},children:/*#__PURE__*/_jsx(Link,{href:\"https://www.linkedin.com/company/hishine-co\",motionChild:true,nodeId:\"O04kDHrHB\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-yy37sg\",\"data-styles-preset\":\"JYee9N1Oc\",children:\"* LinkedIn\"})})}),/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-1iakedh, rgb(255, 255, 255))\"},children:/*#__PURE__*/_jsx(Link,{href:\"mailto:hi@hishine.co\",motionChild:true,nodeId:\"O04kDHrHB\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-yy37sg\",\"data-styles-preset\":\"JYee9N1Oc\",children:\"* hi@hishine.co\"})})})]})},yia8Ly_ca:{children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(255, 255, 255))\"},children:/*#__PURE__*/_jsx(Link,{href:\"https://www.instagram.com/hishine.co/\",motionChild:true,nodeId:\"O04kDHrHB\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-yy37sg\",\"data-styles-preset\":\"JYee9N1Oc\",children:\"* Instagram\"})})}),/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-2gxw0f, rgb(255, 255, 255))\"},children:/*#__PURE__*/_jsx(Link,{href:\"https://www.linkedin.com/company/hishine-co\",motionChild:true,nodeId:\"O04kDHrHB\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-yy37sg\",\"data-styles-preset\":\"JYee9N1Oc\",children:\"* LinkedIn\"})})}),/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-1iakedh, rgb(255, 255, 255))\"},children:/*#__PURE__*/_jsx(Link,{href:\"mailto:hi@hishine.co\",motionChild:true,nodeId:\"O04kDHrHB\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-yy37sg\",\"data-styles-preset\":\"JYee9N1Oc\",children:\"* hi@hishine.co\"})})})]})}},baseVariant,gestureVariant)})})]}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-1gjjnip\",layoutDependency:layoutDependency,layoutId:\"hIJ3sZujW\",children:/*#__PURE__*/_jsx(Image1,{background:{alt:\"\",fit:\"fit\",intrinsicHeight:135,intrinsicWidth:135,pixelHeight:270,pixelWidth:270,positionX:\"center\",positionY:\"center\",sizes:\"260px\",src:\"https://framerusercontent.com/images/pkcHE2DD80hYDWaGa0R5X2J8ZI.webp?width=270&height=270\"},className:\"framer-1qrfptk\",\"data-framer-name\":\"Logosping\",layoutDependency:layoutDependency,layoutId:\"BMoAZ192N\",style:{filter:\"brightness(0) contrast(2) grayscale(1)\",WebkitFilter:\"brightness(0) contrast(2) grayscale(1)\"},variants:{lK_4PRDLU:{filter:\"brightness(2) contrast(2) grayscale(1)\",WebkitFilter:\"brightness(2) contrast(2) grayscale(1)\"},yia8Ly_ca:{filter:\"brightness(2) contrast(2) grayscale(1)\",WebkitFilter:\"brightness(2) contrast(2) grayscale(1)\"}}})})]}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-mrqr1g\",\"data-framer-name\":\"Say hi\",layoutDependency:layoutDependency,layoutId:\"Abf4xifiz\",children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-46rlh7\",\"data-framer-name\":\"Lets Talk\",layoutDependency:layoutDependency,layoutId:\"HP0DLnByt\",children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.h1,{className:\"framer-styles-preset-1jxgfao\",\"data-styles-preset\":\"DabXzDJNr\",children:/*#__PURE__*/_jsx(Link,{href:\"mailto:hi@hishine.co\",motionChild:true,nodeId:\"PPdfcQZeY\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-yy37sg\",\"data-styles-preset\":\"JYee9N1Oc\",children:\"Say Hi.\"})})})}),className:\"framer-97dqf5\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"PPdfcQZeY\",variants:{lK_4PRDLU:{\"--extracted-gdpscs\":\"rgb(255, 255, 255)\"},yia8Ly_ca:{\"--extracted-gdpscs\":\"rgb(255, 255, 255)\"}},verticalAlignment:\"top\",withExternalLayout:true,...addPropertyOverrides({lK_4PRDLU:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.h1,{className:\"framer-styles-preset-1jxgfao\",\"data-styles-preset\":\"DabXzDJNr\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-gdpscs, rgb(255, 255, 255))\"},children:/*#__PURE__*/_jsx(Link,{href:\"mailto:hi@hishine.co\",motionChild:true,nodeId:\"PPdfcQZeY\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-yy37sg\",\"data-styles-preset\":\"JYee9N1Oc\",children:\"Say Hi.\"})})})})},yia8Ly_ca:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.h1,{className:\"framer-styles-preset-1jxgfao\",\"data-styles-preset\":\"DabXzDJNr\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-gdpscs, rgb(255, 255, 255))\"},children:/*#__PURE__*/_jsx(Link,{href:\"mailto:hi@hishine.co\",motionChild:true,nodeId:\"PPdfcQZeY\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-yy37sg\",\"data-styles-preset\":\"JYee9N1Oc\",children:\"Say Hi.\"})})})})}},baseVariant,gestureVariant)})}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-1bn4u93\",\"data-framer-name\":\"border\",layoutDependency:layoutDependency,layoutId:\"pQw6MA_HT\",style:{backgroundColor:\"rgb(0, 0, 0)\"},variants:{lK_4PRDLU:{backgroundColor:\"rgb(255, 255, 255)\"},yia8Ly_ca:{backgroundColor:\"rgb(86, 98, 103)\"}}}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-1m065ii\",\"data-framer-name\":\"smallprint\",layoutDependency:layoutDependency,layoutId:\"iHPk0HiBx\",children:/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1br5634\",layoutDependency:layoutDependency,layoutId:\"e6R0FRJR_\",children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-46llsq\",layoutDependency:layoutDependency,layoutId:\"Q3MqpRAnz\",children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",children:[\"Hi Shine (est. 2024) is part of \",/*#__PURE__*/_jsx(Link,{href:\"https://nitor.com/\",motionChild:true,nodeId:\"Y6FqQBlaU\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{children:\"Nitor\"})}),\", together we build and scale digital products.\"]})}),className:\"framer-5j0sci\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"Y6FqQBlaU\",variants:{lK_4PRDLU:{\"--extracted-r6o4lv\":\"rgb(255, 255, 255)\"},yia8Ly_ca:{\"--extracted-r6o4lv\":\"rgb(255, 255, 255)\"}},verticalAlignment:\"top\",withExternalLayout:true,...addPropertyOverrides({lK_4PRDLU:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(255, 255, 255))\"},children:[\"Hi Shine (est. 2024) is part of \",/*#__PURE__*/_jsx(Link,{href:\"https://nitor.com/\",motionChild:true,nodeId:\"Y6FqQBlaU\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{children:\"Nitor\"})}),\", together we build and scale digital products.\"]})})},yia8Ly_ca:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(255, 255, 255))\"},children:[\"Hi Shine (est. 2024) is part of \",/*#__PURE__*/_jsx(Link,{href:\"https://nitor.com/\",motionChild:true,nodeId:\"Y6FqQBlaU\",openInNewTab:false,relValues:[],scopeId:\"USNNQ04l2\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{children:\"Nitor\"})}),\", together we build and scale digital products.\"]})})}},baseVariant,gestureVariant)})}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-9yvtyd\",layoutDependency:layoutDependency,layoutId:\"tRvLhmn2G\",children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-alignment\":\"right\"},children:\"\\xa9Hi Shine, 2026\"})}),className:\"framer-18tp68\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"HTTSvtxW3\",variants:{lK_4PRDLU:{\"--extracted-r6o4lv\":\"rgb(255, 255, 255)\"},yia8Ly_ca:{\"--extracted-r6o4lv\":\"rgb(255, 255, 255)\"}},verticalAlignment:\"top\",withExternalLayout:true,...addPropertyOverrides({lK_4PRDLU:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-alignment\":\"right\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(255, 255, 255))\"},children:\"\\xa9Hi Shine, 2026\"})})},yia8Ly_ca:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{className:\"framer-styles-preset-uc5mpy\",\"data-styles-preset\":\"KjsK4aI0t\",dir:\"auto\",style:{\"--framer-text-alignment\":\"right\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(255, 255, 255))\"},children:\"\\xa9Hi Shine, 2026\"})})}},baseVariant,gestureVariant)})})]})})]})]})})})});});const css=[\".framer-Ea6UZ.framer-1cvy1x0, .framer-Ea6UZ .framer-1cvy1x0 { display: block; }\",\".framer-Ea6UZ.framer-xj4r2s { align-content: flex-start; align-items: flex-start; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: flex-start; overflow: visible; padding: 90px 10px 0px 10px; position: relative; width: 1180px; }\",\".framer-Ea6UZ .framer-izm6n2, .framer-Ea6UZ .framer-1bn4u93 { flex: none; height: 1px; overflow: var(--overflow-clip-fallback, clip); position: relative; width: 100%; }\",\".framer-Ea6UZ .framer-f0o2p5 { align-content: flex-start; align-items: flex-start; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 20px; height: min-content; justify-content: flex-start; overflow: var(--overflow-clip-fallback, clip); padding: 0px 0px 5px 0px; position: relative; width: 100%; }\",\".framer-Ea6UZ .framer-ilor80 { flex: 1 0 0px; height: auto; position: relative; white-space: pre-wrap; width: 1px; word-break: break-word; word-wrap: break-word; }\",\".framer-Ea6UZ .framer-1f49yah { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: wrap; gap: 0px 40px; height: min-content; justify-content: flex-start; overflow: var(--overflow-clip-fallback, clip); padding: 20px 0px 60px 0px; position: relative; width: 100%; }\",\".framer-Ea6UZ .framer-641ss2 { align-content: flex-start; align-items: flex-start; display: flex; flex: 1 0 0px; flex-direction: column; flex-wrap: wrap; gap: 20px 0px; height: min-content; justify-content: flex-start; padding: 40px 0px 0px 0px; position: relative; width: 1px; }\",\".framer-Ea6UZ .framer-5yokr1, .framer-Ea6UZ .framer-19zd1hz { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: flex-start; overflow: visible; padding: 0px; position: relative; width: 100%; }\",\".framer-Ea6UZ .framer-1oxn7bw, .framer-Ea6UZ .framer-oqcofa, .framer-Ea6UZ .framer-1mzsi25, .framer-Ea6UZ .framer-97dqf5 { flex: none; height: auto; position: relative; white-space: pre; width: auto; }\",\".framer-Ea6UZ .framer-1zzn45 { align-content: flex-start; align-items: flex-start; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 50px; height: min-content; justify-content: flex-start; padding: 0px; position: relative; width: 100%; }\",\".framer-Ea6UZ .framer-1gjjnip { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: wrap; gap: 0px 40px; height: 248px; justify-content: flex-start; overflow: visible; padding: 0px 60px 0px 60px; position: relative; width: 380px; }\",\".framer-Ea6UZ .framer-1qrfptk { align-content: center; align-items: center; display: flex; flex: 1 0 0px; flex-direction: column; flex-wrap: wrap; gap: 0px 0px; height: 1px; justify-content: flex-start; max-height: 260px; max-width: 260px; overflow: visible; padding: 0px 60px 0px 60px; position: relative; width: 100%; z-index: 1; }\",\".framer-Ea6UZ .framer-mrqr1g { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: var(--overflow-clip-fallback, clip); padding: 0px; position: relative; width: 100%; }\",\".framer-Ea6UZ .framer-46rlh7 { align-content: flex-end; align-items: flex-end; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 20px; height: min-content; justify-content: flex-start; overflow: var(--overflow-clip-fallback, clip); padding: 0px; position: relative; width: 100%; }\",\".framer-Ea6UZ .framer-1m065ii { align-content: flex-start; align-items: flex-start; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 20px; height: min-content; justify-content: flex-start; overflow: var(--overflow-clip-fallback, clip); padding: 0px 0px 10px 0px; position: relative; width: 100%; }\",\".framer-Ea6UZ .framer-1br5634 { align-content: flex-end; align-items: flex-end; display: flex; flex: 1 0 0px; flex-direction: row; flex-wrap: nowrap; gap: 50px; height: min-content; justify-content: flex-start; padding: 0px; position: relative; width: 1px; }\",\".framer-Ea6UZ .framer-46llsq { align-content: flex-start; align-items: flex-start; display: flex; flex: 1 0 0px; flex-direction: column; flex-wrap: nowrap; gap: 0px; height: min-content; justify-content: center; overflow: visible; padding: 0px; position: relative; width: 1px; }\",\".framer-Ea6UZ .framer-5j0sci, .framer-Ea6UZ .framer-18tp68 { flex: none; height: auto; position: relative; white-space: pre-wrap; width: 100%; word-break: break-word; word-wrap: break-word; }\",\".framer-Ea6UZ .framer-9yvtyd { align-content: flex-end; align-items: flex-end; display: flex; flex: 1 0 0px; flex-direction: column; flex-wrap: nowrap; gap: 0px; height: min-content; justify-content: flex-start; padding: 0px; position: relative; width: 1px; }\",...sharedStyle.css,...sharedStyle1.css,...sharedStyle2.css];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 689\n * @framerIntrinsicWidth 1180\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"auto\"]},\"lK_4PRDLU\":{\"layout\":[\"fixed\",\"auto\"]},\"yia8Ly_ca\":{\"layout\":[\"fixed\",\"auto\"]}}}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerAutoSizeImages true\n * @framerComponentViewportWidth true\n * @framerColorSyntax true\n */const FramerUSNNQ04l2=withCSS(Component,css,\"framer-Ea6UZ\");export default FramerUSNNQ04l2;FramerUSNNQ04l2.displayName=\"Footer\";FramerUSNNQ04l2.defaultProps={height:689,width:1180};addPropertyControls(FramerUSNNQ04l2,{variant:{options:[\"swP3sNtx0\",\"lK_4PRDLU\",\"yia8Ly_ca\"],optionTitles:[\"Footer_Light\",\"Footer_Dark\",\"Petalite\"],title:\"Variant\",type:ControlType.Enum}});addFonts(FramerUSNNQ04l2,[{explicitInter:true,fonts:[{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/5vvr9Vy74if2I6bQbJvbw7SY1pQ.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/EOr0mi4hNtlgWNn9if640EZzXCo.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/Y9k9QrlZAqio88Klkmbd8VoMQc.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/OYrD2tBIBPvoJXiIHnLoOXnY9M.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/JeYwfuaPfZHQhEG8U5gtPDZ7WQ.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2070, U+2074-207E, U+2080-208E, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/GrgcKwrN6d3Uz8EwcLHZxwEfC4.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/b6Y37FthZeALduNqHicBT6FutY.woff2\",weight:\"400\"}]},...getFontsFromSharedStyle(sharedStyle.fonts),...getFontsFromSharedStyle(sharedStyle1.fonts),...getFontsFromSharedStyle(sharedStyle2.fonts)],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerUSNNQ04l2\",\"slots\":[],\"annotations\":{\"framerColorSyntax\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerAutoSizeImages\":\"true\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]},\\\"lK_4PRDLU\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]},\\\"yia8Ly_ca\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]}}}\",\"framerIntrinsicHeight\":\"689\",\"framerIntrinsicWidth\":\"1180\",\"framerComponentViewportWidth\":\"true\",\"framerImmutableVariables\":\"true\",\"framerContractVersion\":\"1\"}},\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (f36d8c8)\nexport default function metadata(params,activeLocale){return{description:\"Hi Shine design digital experiences with clarity and cultural intelligence.\",favicon:\"https://framerusercontent.com/assets/sCPsERyxsNeS3AMt8uungvZeY.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/vJ5uBwI59ZvK95SnJKLwpa4z6TI.png\",title:\"Hi Shine\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"gZAsCqB,SAAS,GAAY,CAAC,IAAI,MAAY,CAAC,EAA0C,EAAY,CAAC,QAAA,IAAnC,QAAQ,GAAG,EAAQ,CAAsB,EAAE,UAAQ,GAAG,YAAY,IAAI,CAAC,CAAE,CAMy1B,SAAS,GAAgB,CAE3gC,IAAI,IAAM,IAAK,CAAC,SAAS,KAAK,SAAS,eAAe,EAAE,CAAC,IAAM,EAAG,EAAG,iBAAiB,CAAE,CAAC,CAAC,gBAAgB,GAAG,GAAG,GAAI,IAAK,eAAe,CAAC,mBAAmB,KAAK,CAAE,EAAE,OAAO,CAAG,CAAC,MAAM,SAAU,CAGtK,SAAS,EAAgB,EAAG,CAAC,IAAM,EAAE,EAAoB,GAAG,EAAE,UAAU,OAAO,EAAE,SAAS,MAAO,WAAW,EAAE,SAAS,KAAK,EAAG,CAAE,EAAO,EAAG,CAAE,CAG9H,SAAS,GAAc,EAAG,EAAM,CAAC,GAAG,CAAC,EAAiB,OAAO,IAAI,MAAY,CAAC,EAAQ,EAAK,IAAI,QAAQ,GAAG,EAAQ,CAAC,EAAE,EAAU,KAAK,CAAI,EAAsE,GAAU,EAAG,CAAC,OAAO,EAAM,WAAW,EAAI,MAA/F,CAAC,EAAQ,EAAE,EAAU,EAAU,OAAO,GAAG,IAAI,CAAI,CAAE,CAAkD,CAAE,CAAC,SAAS,IAAuB,CAAC,IAAM,EAAE,SAAS,GAAG,OAAO,EAAE,qBAAsB,YAAY,EAAE,mBAAmB,OAE/Z,GAFsa,EAAE,mBAAmB,GAExb,EAAoB,CAAC,EAAE,oBAAoB,IAAA,GAAU,MAAO,CAAC,IAAM,EAAS,EAAE,oBAAoB,KAAK,CAAC,EAAE,EAAE,oBAAoB,GAAK,CAAC,SAAS,gBAAgB,MAAM,YAAY,aAAa,EAAe,CAAC,EAAE,IAAM,EAAO,OAAO,GAAM,WAAW,EAAI,GAAK,EAAI,OAAa,EAAI,SAAS,CAAI,GAAO,MAAM,EAAO,EAAE,IAAM,EAAQ,EAEpU,GAAS,YAAY,IAAI,EAAE,EAAQ,GAAG,KAAY,MAAM,QAAQ,KAAK,CAAC,EAAQ,QAAQ,IAAI,QAAQ,GAAG,WAAW,EAAE,EAAY,CAAC,CAAC,CAAC,EAAK,IAAc,IAAQ,EAAY,OAAS,EAAU,QAAQ,MAAM,QAAQ,KAAK,CAAC,QAAQ,IAAI,CAAS,EAAE,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAa,CAAC,CAAC,CAAC,EAAG,SAAS,gBAAgB,MAAM,YAAY,aAAa,EAAe,CAAC,EAAE,EAAY,CAAE,EAAQ,EAAE,EAAS,OAAO,GAAM,YAAY,CAAC,EAAI,EAAI,CAAC,GAAG,EAAI,OAAO,CAAG,CAAC,EAAuK,MAArK,GAAiB,EAAK,GAAG,EAAE,UAAU,OAAO,EAAE,SAAS,SAAU,YAAY,EAAE,SAAS,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAI,IAAmB,IAAE,EAAiB,KAAK,CAAC,EAAU,CAAE,CAAE,CAAC,SAAS,GAAc,CAAiE,GAA7D,OAAO,SAAW,MAAmB,GAAsB,EAAK,SAAS,eAAe,EAAQ,GAAE,OAAO,IAAM,EAAM,SAAS,cAAc,OAAO,EAAE,EAAM,GAAG,GAAS,EAAM,YAAY,GAAI;EAAK,GAAS,SAAS,KAAK,YAAY,CAAK,CAAE,CAAC,SAAS,EAAU,EAAI,EAAM,CAAI,OAAO,GAAM,WAAW,EAAI,CAAK,EAAU,IAAI,EAAI,QAAQ,EAAM,CAAC,SAAS,IAAY,CAAC,SAAS,iBAAiB,cAAc,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,MAAM,eAAe,sBAAsB,EAAE,EAAE,gBAAgB,YAAY,CAAE,CAAC,CAAE,CAAC,SAAS,GAAO,EAAG,EAAG,EAAW,KAAK,CAAC,IAAI,EAAK,GAAY,MAAS,CAAI,IAAY,EAAK,GAAK,EAAK,WAAW,EAAE,EAAK,WAAW,EAAE,EAAG,EAAE,EAAQ,EAAK,IAAI,qBAAqB,GAAS,EAAQ,KAAK,GAAG,EAAE,cAAc,GAAG,EAAK,EAAE,CAAC,WAAW,YAAY,EAAW,MAAM,CAAC,EACl4C,EAAK,IAAI,qBAAqB,GAAS,EAAQ,KAAK,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAK,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAoC,OAAlC,EAAK,QAAQ,CAAE,EAAE,EAAK,QAAQ,CAAE,MAAY,CAAC,EAAK,GAAK,EAAK,WAAW,EAAE,EAAK,WAAW,CAAE,CAAE,CAI4B,SAAS,GAAQ,EAAG,CAAC,IAAM,EAAM,MAAM,KAAK,EAAG,iBAAiB,uDAAuD,CAAC,EAAE,GAAG,EAAM,OAAO,OAAO,EAAM,IAAM,EAAI,EAAG,cAAc,KAAK,EAAE,OAAO,EAAI,CAAC,CAAG,EAAE,CAAC,CAAE,CAG5Z,SAAS,GAAY,EAAI,CAAC,GAAG,EAAQ,IAAI,CAAG,GAAG,EAAI,aAAa,OAAO,EAAI,aAAa,GAAK,IAAM,MAAS,EAAQ,IAAI,CAAG,EAAK,OAAO,EAAI,QAAS,WAAW,EAAI,OAAO,CAAC,CAAC,KAAK,EAAK,CAAI,EAAO,EAAK,CAAE,CAAC,SAAS,GAAU,EAAG,EAAI,EAAG,CAAC,IAAM,EAAQ,YAAY,IAAI,EAAM,EAAM,EAAQ,MAAS,CAAC,IAAM,EAAM,MAAM,KAAK,EAAG,iBAAiB,YAAY,CAAC,CAAC,CAAC,OAAO,GAAW,EAAE,sBAAsB,CAAC,CAAC,MAAM,CAAG,EAAQ,EAAO,EAAM,MAAM,GAAG,CAAC,GAAG,aAAa,iBAAiB,OAAO,EAAE,YAAY,EAAE,IAAM,EAAI,EAAwE,MAAnE,CAAC,EAAI,UAAU,EAAE,EAAI,aAAa,GAAU,IAAM,GAAY,CAAG,EAAS,EAAQ,IAAI,CAAG,EAAE,CAAC,EAAc,EAAG,sBAAsB,CAAC,CAAC,OAAO,GAAG,IAAS,EAAM,OAAO,GAAG,CAAC,EAAI,aAAsB,YAAY,IAAI,EAAE,EAAQ,EAAI,OAAO,EAAG,EAAO,EAAM,EAAO,WAAW,EAAK,EAAE,CAAE,EAAS,OAAP,EAAK,MAAY,EAAO,aAAa,CAAK,CAAE,CAEn1B,SAAS,GAAa,EAAG,CAAC,IAAM,EAAG,EAAG,iBAAiB,GAAwF,MAAM,EAA/E,IAAK,eAAe,sBAAsB,KAAK,CAAE,GAAG,YAAY,KAAK,CAAE,IAAgB,EAAG,iBAAiB,EAAG,kBAAkB,QAAQ,EAAG,WAAW,EAAG,YAAY,QAAQ,WAAW,EAAG,cAAc,EAAE,GAAG,WAAW,EAAG,iBAAiB,EAAE,CAAE,CAKvT,SAAS,GAAU,EAAG,EAAS,CAAK,IAAU,EAAa,EAAE,EAAG,MAAM,YAAY,qBAAqB,GAAU,MAAM,IAAW,GAAG,OAAO,CAAQ,EAAE,GAAG,EAAE,EAAG,aAAa,gBAAgB,EAAE,EAAE,CAAC,SAAS,EAAS,EAAM,EAAM,CAAC,IAAM,EAASA,EAAO,IAAI,EAA4C,MAA1C,GAAS,QAAQ,EAAM,EAAM,QAAQ,KAAYA,MAAW,GAAU,EAAM,QAAQ,EAAS,OAAO,CAAC,CAAC,CAAC,OAAQ,CAG1W,SAAS,GAAU,EAAG,CAAC,IAAM,EAAI,CAAC,EAAiL,OAA/K,MAAM,KAAK,EAAG,QAAQ,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAM,EAAQ,iBAAiB,CAAC,CAAC,CAAC,QAAW,IAAU,SAAiB,IAAU,WAAW,EAAI,KAAK,GAAG,GAAU,CAAC,CAAC,EAAO,EAAI,KAAK,CAAC,EAAE,CAAC,EAAS,CAAI,CAE9N,SAAS,GAAU,EAAG,CAAC,IAAM,EAAI,iBAAiB,CAAE,CAAC,CAAC,cAAc,MAAM,GAAG,WAAW,CAAG,EAAE,EAAE,OAAO,EAAI,IAAM,EAAK,GAAU,CAAE,EAAE,GAAG,EAAK,SAAS,EAAE,OAAO,EAAI,IAAM,EAAG,iBAAiB,EAAK,EAAE,CAAC,CAAC,aAAa,OAAO,WAAW,CAAE,EAAE,GAAG,GAAM,EAAK,EAAE,CAAC,sBAAsB,EAAE,EAAG,sBAAsB,CAAC,EAAE,EAAG,CAAI,CAInT,SAAS,GAAU,EAAI,CAAC,IAAM,EAAMA,EAAO,IAAI,EAAQ,EAAMA,EAAO,IAAI,EACnE,CAAC,EAAK,GAASC,EAAS,CAAC,EAAkb,OAAhb,MAAuB,CAAK,EAAM,SAAQ,EAAQ,CAAC,CAAE,EAAE,CAAC,CAAC,EAAE,MAAuB,CAAC,GAAG,IAAO,EAAE,OAAO,IAAM,EAAI,EAAM,SAAS,EAAM,QAAQ,cAAiB,GAAK,EAAM,QAAQ,EAAI,EAAI,MAAM,QAAQ,IAAI,EAAQ,CAAC,GAAQ,EAAQ,CAAC,CAAE,EAAE,CAAC,CAAI,CAAC,EAAuM,CAAC,QAAM,QAA9L,GAAM,CAAI,aAAgB,cAAY,EAAM,QAAQ,GAAK,EAAU,EAAI,CAAI,CAAE,EAAyH,OAA1G,IAAO,GAAG,IAAO,EAAe,EAAK,OAAO,CAAC,IAAI,EAAM,MAAM,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,KAAiC,MAAI,CAAE,CAUlf,SAAS,GAAU,EAAM,EAAI,EAAQ,GAAK,MAAY,CAAC,EAAE,EAAK,EAAE,CAAC,IAAM,EAAQD,EAAO,EAAK,EAAE,MAAuB,CAAC,IAAM,EAAG,EAAM,QAAQ,GAAG,CAAC,GAAI,CAAC,GAAS,CAAC,EAAS,EAAE,OAAO,EAAQ,QAAQ,GAAK,EAAG,MAAM,QAAQ,IAAI,EAAQ,EACnO,IAAI,EAAE,EAAG,cAAc,IAAI,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,SAAS,KAAK,IAAI,EAAE,EAAE,cAAc,CAAC,IAAM,EAAE,EAAE,MAAM,WAAW,IAAM,EAAE,QAAQ,aAAa,GAAG,GAAG,EAAE,QAAQ,GAAG,EAAE,GAAG,EAAE,MAAM,UAAU,MAAK,EAAE,aAAa,gBAAgB,EAAE,CAAG,CAAC,EAAE,CAAC,EAAQ,CAAI,CAAC,EAAE,MAAc,CAAC,IAAM,EAAG,EAAM,QAAQ,GAAG,CAAC,GAAI,CAAC,GAAS,EAAQ,QAAQ,OAAO,GAAG,EAAY,GAAG,OAAO,EAAG,SAAU,WAAW,CAAC,EAAG,MAAM,QAAQ,IAAI,EAAQ,EAAE,MAAO,CAAC,IAAM,EAAM,CAAC,EAAQ,EAAK,CAAC,EAAQ,EAAO,CAAC,EAAQ,EAAS,CAAC,EAAM,EAAQ,GAAY,MAAU,CAAC,GAAG,EAAQ,OAAO,EAAQ,GACthB,IAAM,EAAG,iBAAiB,CAAE,EAAQ,EAAI,EAAG,sBAAsB,EAAQ,EAAK,GAAU,CAAE,EAAQ,EAAO,GAAU,CAAE,EAAQ,EAAQ,WAAW,CAAM,EAAE,EAAE,GAAG,GAAS,EAAE,WAAW,EAAG,YAAY,EAAE,GAAG,CAAC,IAAM,EAAI,EAAG,MAAM,aAAa,EAAG,MAAM,aAAa,EAAO,EAAS,SAAS,EAAG,MAAM,aAAa,CAAG,CAAE,CAAC,IAAM,EAAM,MAAM,KAAK,EAAG,iBAAiB,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,WAAW,CAAC,EAAQ,EAAO,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,EAAI,KAAK,EAAO,UAAU,CAAC,EAAQ,EAAM,KAAK,MAAM,EAAO,EAAI,QAAQ,GAAG,EAAE,EAAI,QAAc,GAAQ,EAAS,EAAO,EAAM,KAAK,CAAC,WAAS,SAAO,MAAM,EAAM,EAAM,KAAK,WAAW,GAAS,EAAK,KAAK,MAAM,EAAI,OAAO,EAAI,KAAK,GAAG,EAAQ,GAAK,EAAK,GAAG,EAAK,OAAO,GAAG,CAAC,GAAa,CAAE,EAAQ,EAAQ,EAAK,IAAI,GAAG,iBAAiB,CAAC,CAAC,CAAC,SAAS,EAGhvB,GAAM,CAAC,EACb,GADe,GAAQ,CAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,EAAO,EAAM,EAAQ,EAAE,cAAc,KAAM,GAAS,IAAU,GAAI,iBAAiB,CAAO,CAAC,CAAC,UAAU,YAAY,EAAQ,EAAQ,cAAkI,GAAhH,IAAU,IAAI,EAAO,EAAE,QAAQ,wCAAwC,EAAE,EAAE,cAAc,KAAK,EAAE,KAAK,EAAQ,GAAM,CAAC,GAAQ,CAAC,EAAQ,OAAO,IAAM,EAAK,GAAM,EAAQ,sBAAsB,EAAE,CAAG,EAAE,GAAM,KAAK,CAAC,SAAO,UAAQ,KAAK,iBAAiB,CAAM,CAAC,CAAC,UAAU,MAAI,CAAC,CAAE,CAAC,EACzc,EAAG,WAAW,UAAU,CAAC,IAAM,EAAI,EAAG,MAAM,SAAS,EAAG,MAAM,SAAS,SAAS,EAAS,SAAS,EAAG,MAAM,SAAS,CAAG,CAAE,CAAyS,GAAxS,GAAM,SAAS,CAAC,UAAQ,UAAQ,CAAC,IAAM,EAAI,iBAAiB,CAAO,EAAK,EAAI,WAAW,YAAU,EAAQ,MAAM,SAAS,UAAY,GAAM,GAAS,EAAE,WAAW,EAAI,YAAY,EAAE,KAAG,EAAQ,MAAM,aAAa,EAAO,CAAC,EAAE,EAAM,KAAK,EAAG,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAO,EAAI,OAAO,EAAQ,CAAC,CAAC,EAAK,GAAM,EAAM,KAAK,EAAG,QAAQ,CAAC,CAAC,UAAU,EAAM,EAAG,UAAU,CAAI,CAAC,EAAE,CAAC,UAAU,EAAM,EAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAO,EAAI,OAAO,EAAI,QAAQ,CAAC,CAAC,EAAE,EAAK,SAAS,EAAE,IAAI,EAAM,KAAK,EAAE,QAAQ,CAAC,CAAC,UAAU,EAAM,EAAQ,GAAG,CAAC,CAAI,CAAC,EAAE,CAAC,UAAU,EAAM,EAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAO,EAAI,OAAO,EAAI,QAAQ,CAAC,CAAC,CAAC,MAAO,CACtsB,IAAM,EAAK,KAAK,IAAI,GAAG,KAAK,MAAM,EAAI,OAAO,GAAG,CAAC,EAAE,EAAM,KAAK,EAAG,QAAQ,CAAC,CAAC,UAAU,EAAM,EAAG,UAAU,CAAI,CAAC,EAAE,CAAC,UAAU,EAAM,EAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAO,EAAI,OAAO,EAAI,QAAQ,CAAC,CAAC,CAAE,CAAC,GAAM,SAAS,CAAC,SAAO,UAAQ,EAAM,KAAK,EAAO,QAAQ,CAAC,CAAC,UAAU,GAAO,EAAK,EAAI,IAAI,CAAC,EAAE,CAAC,UAAU,GAAO,EAAK,CAAC,CAAC,CAAC,EAAE,EAAO,EAAI,OAAO,EAAI,SAAS,EAAI,WAAW,CAAC,CAAC,CAAC,EAC9V,EAAM,QAAQ,GAAG,CAAC,IAAM,EAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,IAAI,OAAO,GAAY,KAAK,WAAW,CAAC,EAAE,EAAK,MAAM,EAAE,EAAK,KAAK,CAAI,EAAE,IAAI,EAAO,GAAY,MAAO,CAAI,IAAc,EAAO,GAAK,EAAK,KAAK,EAAE,EAAE,EAAE,iBAAiB,aAAa,EAAG,CAAC,KAAK,EAAI,CAAC,EAAE,EAAE,iBAAiB,UAAU,EAAG,CAAC,KAAK,EAAI,CAAC,EAAE,EAAO,KAAK,EAAO,WAAW,EAAG,GAAG,CAAC,CAAE,CAAC,EAAE,EAAG,MAAM,QAAQ,IAAI,EAAM,EAAE,CAAC,SAAS,KAAK,CAAO,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAM,IAAI,GAAM,EAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAS,OAAO,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAE,EACvgB,EAAK,IAAI,qBAAqB,GAAS,CAAK,EAAQ,KAAK,GAAG,EAAE,cAAc,IAAS,EAAK,WAAW,EAAE,EAAG,iBAAiB,KAAK,CAAC,CAAC,QAAQ,GAAK,GAAY,CAAG,CAAC,EAAE,EAAE,CAAC,WAAW,kBAAkB,CAAC,EAAE,EAAK,QAAQ,CAAE,EAAE,IAAI,MAAgB,CAAC,EAAM,EAAK,GAAY,EAAa,GAAO,MAAO,CAAC,EAAY,GAAU,EAAG,MAAQ,MAAoB,CAAC,GAAM,EAAM,CAAC,CAAC,CAAE,EAAE,EAAI,SAAS,EAAE,UAAU,CAAC,EAAK,GAAK,EAAK,WAAW,EAAE,EAAa,EAAE,EAAY,EAAE,EAAM,QAAQ,GAAM,EAAK,OAAO,CAAC,EAAE,EAAK,QAAQ,GAAM,EAAK,OAAO,CAAC,EAAE,EAAO,QAAQ,GAAG,EAAO,aAAa,CAAC,CAAC,EAAE,EAAS,OAAO,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAE,CAAE,EAAE,CAAC,EAAQ,CAAI,CAAC,CAAE,CAAC,SAAS,GAAW,EAAU,EAAI,CAAC,OAAoB,EAAW,SAAqB,EAAM,EAAI,CAAC,GAAK,CAAC,QAAM,UAAQ,SAAO,QAAM,GAAU,CAAG,EAA6E,OAApC,GAAU,EAAM,EAAI,GAAhD,EAAS,EAAM,EAAM,KAAmC,EAAE,CAAI,EAAsB,EAAME,EAAU,CAAC,SAAS,CAAc,EAAK,EAAU,CAAC,GAAG,EAAM,MAAM,EAAO,EAAM,KAAK,EAAE,IAAI,CAAO,CAAC,EAAE,CAAM,CAAC,CAAC,CAAE,CAAC,CAAE,CAC58B,SAAgB,GAAc,EAAU,CAAC,OAAO,GAAW,EAAU,EAAI,CAAE,CAC3E,SAAgB,GAAiB,EAAU,CAAC,OAAO,GAAW,EAAU,EAAO,CAAE,CAIoH,SAAS,GAAW,EAAG,CAAC,EAAa,EAAE,EAAG,MAAM,QAAQ,IAAI,EAAG,MAAM,UAAU,OAAO,EAAG,aAAa,oBAAoB,EAAE,CAAE,CAAC,SAAgB,GAAe,EAAU,CAAC,OAAoB,EAAW,SAAoB,EAAM,EAAI,CAAC,IAAM,EAAMF,EAAO,IAAI,EAAQ,EAASA,EAAO,EAAK,EAGhe,MAAuB,CAAC,IAAM,EAAG,EAAM,QAAW,CAAC,GAAI,CAAC,IAAwB,EAAS,QAAQ,GAAK,GAAW,CAAE,EAAE,GAAc,EAAG,CAAa,EAAE,EAAE,CAAC,CAAC,EAAE,MAAc,CAAC,IAAM,EAAG,EAAM,QAAQ,GAAG,CAAC,GAAI,EAAS,QAAQ,OAAO,GAAG,EAAY,GAAG,OAAO,EAAG,SAAU,WAAW,CAAC,GAAW,CAAE,EAAE,MAAO,CAAC,IAAM,EAAM,CAAC,EAAQ,EAAO,CAAC,EAAM,EAAK,GAAU,MAAgB,CAAC,EAAQ,MAAU,CAAC,GAAG,EAAK,OAAO,IAAM,EAAG,YAAY,IAAI,EAAE,EAAM,KAAK,EAAG,QAAQ,CAAC,CAAC,UAAU,SAAS,EAAK,UAAU,IAAI,QAAQ,CAAC,EAAE,CAAC,UAAU,WAAW,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,EAAK,QAAQ,OAAO,EAAS,KAAK,MAAM,CAAC,CAAC,EAAE,EAAM,EAAE,CAAC,SAAS,SAAS,CAAC,GAAM,GAAW,CAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,IAAM,EAAQ,IAAI,IAAU,MAAW,CAAC,IAAM,EAAK,YAAY,IAAI,EAAE,EAAG,GAAQ,CAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,EAAQ,IAAI,CAAC,EAAE,OAAO,EAAQ,IAAI,CAAC,EAAE,IAAM,EAAO,EAAE,cAAc,GAAG,GAAQ,IAAS,EAAG,CAAC,IAAM,EAAG,iBAAiB,CAAM,EAAK,EAAG,WAAW,YAAU,EAAO,MAAM,SAAS,UAE35B,IAAM,EAAO,iBAAiB,CAAC,CAAC,CAAC,aAAgB,WAAW,CAAM,EAAE,GAAG,EAAE,WAAW,EAAG,YAAY,EAAE,KAAI,EAAO,MAAM,aAAa,EAAO,EAAO,MAAM,SAAS,iBAAiB,EAAO,IAAK,CACX,GAA/K,EAAK,EAAK,QAAQ,IAAI,EAAM,KAAK,EAAE,QAAQ,CAAC,CAAC,UAAU,SAAS,EAAK,YAAY,GAAG,EAAE,CAAC,UAAU,UAAU,CAAC,EAAE,CAAC,SAAS,EAAK,UAAU,OAAO,EAAS,MAAM,EAAE,KAAK,MAAM,CAAC,CAAC,EAAM,aAAa,kBAAkB,EAAE,WAAW,EAAE,CAAC,IAAM,EAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,EAAK,OAAO,OAAO,GAAY,KAAK,MAAM,CAAC,EAAE,EAAK,MAAM,EAAE,EAAM,KAAK,CAAI,EAAE,IAAM,MAAS,EAAK,KAAK,EAAE,EAAE,iBAAiB,aAAa,EAAK,CAAC,KAAK,EAAI,CAAC,EAAE,EAAE,iBAAiB,UAAU,EAAK,CAAC,KAAK,EAAI,CAAC,CAAE,CAAC,CAAC,CAAE,EAAE,EAAO,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAI,EAAO,KAAK,EAAO,WAAW,EAAO,CAAE,CAAC,CAAC,CAAE,EAEjgB,MAAvD,GAAY,GAAU,EAAG,OAAc,CAAC,GAAM,EAAM,CAAC,MAAY,CAAC,EAAK,GAAK,EAAY,EAAE,EAAO,QAAQ,GAAG,EAAO,aAAa,CAAC,CAAC,EAAE,EAAM,QAAQ,GAAG,EAAE,OAAO,CAAC,CAAE,CAAE,EAAE,CAAC,CAAC,EAIvK,MAAuB,CAAC,IAAM,EAAG,EAAM,QAAQ,GAAG,CAAC,EAAG,OAAO,IAAI,EAAU,GAAS,MAAS,CAAC,IAAM,EAAM,EAAO,WAAW,GAAG,IAAQ,EAAU,OAAuB,GAAhB,EAAU,EAAS,GAAO,KAAK,CAAC,EAAG,MAAM,eAAe,QAAQ,EAAE,MAAO,CACjO,IAAM,EAAI,SAAS,cAAc,eAAe,EAAQ,EAAK,EAAI,KAAK,MAAM,EAAI,sBAAsB,CAAC,CAAC,MAAM,EAAE,EAC5G,EAAI,EAAE,IAAI,IAAI,EAAE,EAAG,EAAE,EAAE,EAAE,aAAa,GAAK,EAAE,UAAU,EAAI,KAAK,MAAM,CAAG,EAAE,IAAM,EAAM,KAAK,MAAM,EAAO,eAAe,EAAO,eAAe,OAAO,EAAO,WAAW,EAA8D,MAA5D,GAAG,MAAM,OAAO,KAAK,IAAI,IAAI,EAAM,KAAK,IAAI,EAAI,CAAI,CAAC,EAAE,KAAY,CAAK,EAC/O,EAD4P,EACvP,IAAI,EAAE,EAAO,gBAAgB,EAAU,GAAG,EAAK,GAAG,GAAG,EAAE,EAAyC,OAAvC,EAAO,iBAAiB,SAAS,CAAI,MAAY,CAAC,EAAO,aAAa,CAAC,EAAE,EAAO,oBAAoB,SAAS,CAAI,CAAE,CAAE,EAAE,CAAC,CAAC,EAC7L,IAAM,EAAM,CAAC,GAAG,EAAM,MAAM,QAAQ,EAAE,UAAU,SAAS,EAAK,UAAU,GAAG,EAAE,OAAoB,EAAK,EAAU,CAAC,GAAG,EAAY,QAAM,IAAI,GAAM,CAAC,EAAM,QAAQ,EAAK,EAAU,EAAI,CAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAI/L,SAAgB,GAAc,EAAU,CAAC,OAAoB,EAAW,SAAmB,EAAM,EAAI,CAAC,GAAK,CAAC,QAAM,UAAQ,SAAO,QAAM,GAAU,CAAG,EAAQ,EAAK,EAAS,EAAM,EAAM,KAAK,EAOsP,OAPpP,GAAU,EAAM,GAAK,GAAK,EAAK,CAAI,EAAE,MAAc,CAAC,EAAa,EAAE,IAAM,EAAG,EAAM,QAC/Q,GAAG,CAAC,GAAI,EAAoB,OAAO,IAAM,EAAO,EAAG,QAAQ,GAAG,GAAG,EAAS,EAAU,EAAE,aAAkB,mBAAmB,EAAO,SAAS,UAAgB,MAAQ,CAAC,IAAM,EAAI,EAAG,sBAAsB,EAAK,CAAC,EAAI,OAAO,CAAC,EAAI,SAAc,GAAW,EAAE,EAAG,MAAM,YAAY,uBAAuB,EAAK,EAAE,EAAG,aAAa,aAAa,EAAE,EAAE,SAAS,gBAAgB,MAAM,YAAY,sBAAsB,GAAU,CAAE,GAAG,KAAK,EAAE,EAAQ,CAAC,GAAG,YAAY,IAAI,CAAC,EAAE,EAAW,EAAE,EAAQ,EAAQ,GAAG,CAAI,EAAE,SAAS,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,GAC9hB,GAAS,YAAY,IAAI,EAAE,EAAQ,GAAG,KAAK,EAAG,aAAa,YAAY,GAAS,EAAI,CAAE,EAIrF,EAAK,KAAW,EAAO,GAAG,CAAC,EAAK,EAAE,cAAc,SAAS,CAAC,EAAE,UAAU,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAE,EAAQ,EAAK,GAAG,CAAC,IAAM,EAAM,EAAK,EAAK,KAAQ,GAAC,GAAO,EAAE,cAAc,SAAS,CAAC,KAAoB,KAAK,MAAM,EAAE,QAAQ,EAAM,EAAE,EAAE,QAAQ,EAAM,CAAC,EAAE,IAAU,EAAI,EAAE,EAAQ,MAAa,EAAK,KACjG,OAAvM,EAAO,iBAAiB,cAAc,EAAO,EAAI,EAAE,EAAO,iBAAiB,YAAY,EAAK,EAAI,EAAE,EAAO,iBAAiB,gBAAgB,EAAS,EAAI,EAAE,EAAO,iBAAiB,QAAQ,EAAQ,EAAI,MAAY,CAAC,EAAO,oBAAoB,cAAc,EAAO,EAAI,EAAE,EAAO,oBAAoB,YAAY,EAAK,EAAI,EAAE,EAAO,oBAAoB,gBAAgB,EAAS,EAAI,EAAE,EAAO,oBAAoB,QAAQ,EAAQ,EAAI,CAAE,CAAE,EAAE,CAAC,CAAI,CAAC,EAAsB,EAAME,EAAU,CAAC,SAAS,CAAc,EAAK,EAAU,CAAC,GAAG,EAAM,MAAM,EAAO,EAAM,KAAK,EAAE,IAAI,CAAO,CAAC,EAAE,CAAM,CAAC,CAAC,CAAE,CAAC,CAAE,CAG9d,SAAS,IAAe,CAA8I,OAAnI,IAAS,OAAmB,IAAK,AAAiB,KAAY,CAAC,QAAQ,EAAO,SAAS,WAAW,GAAU,GAAG,YAAY,IAAI,CAAC,EAAU,GAAY,SAAS,YAAY,IAAI,EAAE,GAAY,GAAG,IAAI,CAKpU,SAAgB,GAAa,EAAU,CAAC,OAAoB,EAAW,SAAkB,EAAM,EAAI,CAAC,IAAM,EAAMF,EAAO,IAAI,EAAO,CAAC,GAAMC,MAAa,GAAQ,EAAE,QAAQ,EAAS,EAAE,QAAQ,GAAc,GAAG,EAAoB,SAAS,OAAO,EAAQ,EAAK,EAAS,EAAM,EAAM,KAAK,EAAE,GAAU,EAAM,GAAK,IAAO,SAAS,CAAI,EAAE,MAAuB,CAAC,EAAa,EAAE,IAAM,EAAG,EAAM,QACrU,GADgV,GAAI,IAAO,UAAS,GAAc,EAAG,CAAa,EACpb,GAAa,IAAO,SAAQ,EAAY,QAAQ,EAAK,CAAC,GAAI,IAAO,QAAQ,OAAO,EAAG,MAAM,YAAY,uBAAuB,EAAK,EAAE,SAAS,gBAAgB,MAAM,YAAY,oBAAoB,iBAAiB,CAAE,CAAC,CAAC,cAAc,KAAK,EAAK,GAAY,EAAY,QAAQ,EAClR,IAAM,EAAE,EAAO,eAAe,CAAC,EAAG,MAAM,eAAe,sBAAsB,EAAE,EAAQ,IAAK,EAAG,KAAW,GAAG,EAAE,UAAU,EAAO,aAAa,CAAC,CAAE,EAAE,CAAC,CAAC,EACpJ,IAAM,EAAM,IAAO,SAAS,EAAO,EAAM,KAAK,EAAE,EAAM,MAAM,OAAoB,EAAK,EAAU,CAAC,GAAG,EAAY,QAAM,IAAI,GAAM,CAAC,EAAM,QAAQ,EAAK,EAAU,EAAI,CAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAI9K,SAAS,GAAW,EAAK,EAAK,CAAC,IAAM,EAAO,SAAS,iBAAiB,EAAK,WAAW,SAAS,EAAQ,EAAM,CAAC,EAAE,KAAM,EAAO,SAAS,GAAE,EAAM,KAAK,EAAO,WAAW,EACrK,IAAM,EAAQ,CAAC,EAAE,EAAM,QAAQ,GAAG,CAAC,IAAM,EAAM,EAAE,WAAW,GAAG,GAAG,CAAC,EAAM,KAAK,GAAG,CAAC,EAAE,WAAW,OAAO,IAAM,EAAG,OAAW,EAAE,KAAM,EAAE,EAAG,KAAK,CAAK,GAAE,CAAC,IAAM,EAAM,SAAS,YAAY,EAAE,EAAM,SAAS,EAAE,EAAE,KAAK,EAAE,EAAM,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAM,EAAI,EAAM,sBAAsB,EAAE,EAAQ,KAAK,CAAC,KAAK,EAAI,KAAK,IAAI,EAAI,GAAG,CAAC,CAAE,CAAC,CAAC,EAAE,IAAM,EAAM,CAAC,EAAQ,EAAM,CAAC,EAIhD,OAJkD,EAAM,QAAQ,GAAG,CAAC,IAAM,EAAM,EAAE,WAAW,GAAG,GAAG,CAAC,EAAM,KAAK,GAAG,CAAC,EAAE,WAAW,OAAO,IAAM,EAAM,CAAC,EAAE,EAAM,MAAM,OAAO,CAAC,CAAC,QAAQ,GAAM,CAAK,KAAY,GAAG,QAAQ,KAAK,CAAI,EAAE,EAAM,KAAK,SAAS,eAAe,CAAI,CAAC,MAAM,CAAC,IAAM,EAAE,EAAK,EAAK,EAAM,MAAM,EAAE,EAAM,KAAK,CAAC,EAAE,EAAM,KAAK,CAAC,CAAE,CAAC,CAAC,EAAE,IAAM,EAAK,SAAS,uBAAuB,EAAE,EAAM,QAAQ,GAAG,EAAK,YAAY,CAAC,CAAC,EAAE,EAAE,WAAW,aAAa,EAAK,CAAC,EAAE,EAAM,KAAK,CAAC,SAAS,EAAE,OAAK,CAAC,CAAE,CAAC,EAG3xB,EAAM,SAAS,EAAE,IAAI,CAAC,IAAM,EAAK,EAAQ,GAAG,GAAG,CAAC,EAAK,OAAO,IAAM,EAAM,SAAS,YAAY,EAAE,EAAM,mBAAmB,CAAC,EAAE,IAAM,EAAI,EAAM,sBAAsB,EAAE,GAAG,KAAK,IAAI,EAAI,IAAI,EAAK,GAAG,EAAE,EAAE,OACnM,IAAM,EAAG,EAAK,KAAK,EAAI,KAAQ,KAAK,IAAI,CAAE,EAAE,MAAI,EAAE,MAAM,WAAW,EAAG,QAAQ,CAAC,EAAE,KAAK,CAAC,EAAsO,CAAC,QAAM,YAAzN,CAAC,EAAM,SAAS,CAAC,WAAS,WAAS,CAAC,IAAM,EAAM,EAAM,GAAM,CAAC,GAAO,CAAC,EAAM,aAAkB,EAAM,WAAW,aAAa,EAAS,CAAK,EAAE,EAAM,QAAQ,GAAG,EAAE,YAAY,EAAE,WAAW,YAAY,CAAC,CAAC,EAAE,CAAC,CAAE,CAAsB,CAAE,CAC7U,SAAS,GAAS,EAAU,EAAK,CAAC,OAAoB,EAAW,SAAoB,EAAM,EAAI,CAAC,IAAM,EAAMD,EAAO,IAAI,EAAQ,EAAK,EAAS,EAAM,EAAM,KAAK,EAGkU,OAHhU,MAAuB,CAAC,EAAa,EAAE,IAAM,EAAG,EAAM,QAAQ,GAAG,CAAC,EAAG,OAAO,GAAG,EAAY,GAAG,OAAO,EAAG,SAAU,WAAW,CAAC,EAAG,MAAM,QAAQ,IAAI,EAAK,EAAE,MAAO,CAAC,GAAK,CAAC,QAAM,WAAS,GAAW,EAAG,EAAQ,EAAQ,EAAO,EAAM,IAAI,GAAG,EAAE,iBAAiB,EAExZ,EAAM,CAAC,EAAM,EAAK,GAAY,MAAW,CAAI,IAAY,EAAK,GAAK,EAAM,QAAQ,GAAG,EAAE,OAAO,CAAC,EAAE,EAAQ,EAAE,EAAQ,MAAS,CAAI,IAAY,EAAM,CAAC,EAAE,EAAO,SAAS,EAAE,IAAI,CAAC,IAAM,EAAM,EAAE,EAAK,QAAQ,IAAI,EAAM,KAAK,EAAE,QAAQ,CAAC,CAAC,UAAU,kBAAkB,EAAE,CAAC,UAAU,eAAe,CAAC,EAAE,CAAC,SAAS,EAAK,WAAW,OAAO,EAAS,QAAM,KAAK,WAAW,CAAC,CAAC,EAClW,EAAM,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,GAAU,WAAW,OAAO,GAAU,OAAO,QAAM,KAAK,WAAW,CAAC,CAAC,CAAE,CAAC,EAAE,EAAG,MAAM,QAAQ,IAAI,EAAK,EAAK,EAAM,OAAO,QAAQ,IAAI,EAAM,IAAI,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAM,CAAC,CAAC,UAAU,CAAC,CAAC,EAAO,EAAO,EAAE,EAAM,MAAS,CAAC,EAAQ,MAAO,EAAgB,CAAI,EAAE,GAAG,EAAK,iBAAiB,KAAK,CAAC,IAAM,EAAE,EAAO,WAAW,EAAG,EAAK,cAAc,EAAE,MAAS,EAAO,aAAa,CAAC,CAAE,KAAM,GAAK,GAAO,EAAG,CAAE,EAAE,UAAU,CAAC,EAAK,EAAE,EAAO,CAAE,CAAE,EAAE,CAAC,CAAC,EAAsB,EAAK,EAAU,CAAC,GAAG,EAAM,MAAM,EAAO,EAAM,KAAK,EAAE,IAAI,GAAM,CAAC,EAAM,QAAQ,EAAK,EAAU,EAAI,CAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAChmB,SAAgB,GAAe,EAAU,CAAC,OAAO,GAAS,EAAU,CAAC,eAAe,KAAK,QAAQ,KAAK,WAAW,IAAI,CAAC,CAAE,CACxH,SAAgB,GAAc,EAAU,CAAC,OAAO,GAAS,EAAU,CAAC,eAAe,IAAI,QAAQ,IAAI,WAAW,IAAI,CAAC,CAAE,CAGqB,SAAgB,GAAc,EAAU,CAAC,OAAoB,EAAW,SAAmB,EAAM,EAAI,CAAC,IAAM,EAAMA,EAAO,IAAI,EAAQ,EAAK,EAAS,EAAM,EAAM,KAAK,EACoJ,OADlJ,MAAuB,CAAC,IAAM,EAAG,EAAM,QAAQ,GAAG,CAAC,EAAG,OAAO,GAAG,EAAY,GAAG,OAAO,EAAG,SAAU,WAAW,CAAC,EAAG,MAAM,QAAQ,IAAI,EAAK,EAAE,MAAO,CAAC,IAAM,EAAQ,YAAY,IAAI,EAAM,EAAK,KAAW,MAAS,CAChgB,IAAM,EAAM,KAAK,IAAI,EAAM,WAAW,EAAM,cAAc,YAAY,IAAI,EAAE,EAAQ,EAAE,EAAK,EAAG,QAAQ,CAAC,CAAC,QAAQ,EAAE,UAAU,cAAc,EAAM,KAAK,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,MAAM,CAAC,EAAE,CAAC,SAAS,EAAM,WAAW,OAAO,EAAS,QAAM,KAAK,WAAW,CAAC,EAAE,EAAG,MAAM,QAAQ,IAAI,EAAK,SAAS,KAAK,CAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAE,EAAM,EAAK,GAAY,EAAK,GAAO,MAAO,MAAoB,CAAC,GAAM,EAAK,CAAC,CAAC,EAAE,UAAU,CAAC,EAAK,GAAK,EAAK,EAAK,GAAK,EAAK,OAAO,CAAE,CAAE,EAAE,CAAC,CAAC,EAAsB,EAAK,EAAU,CAAC,GAAG,EAAM,MAAM,EAAO,EAAM,KAAK,EAAE,IAAI,GAAM,CAAC,EAAM,QAAQ,EAAK,EAAU,EAAI,CAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAErb,SAAgB,GAAc,EAAU,CAAC,OAAoB,EAAW,SAAmB,EAAM,EAAI,CAAC,IAAM,EAAMA,EAAO,IAAI,EAAQ,EAAK,EAAS,EAAM,EAAM,KAAK,EAGjT,OAHmT,MAAuB,CAAC,IAAM,EAAG,EAAM,QAAQ,GAAG,CAAC,EAAG,OAAO,GAAG,EAAY,GAAG,OAAO,EAAG,SAAU,WAAW,CAAC,EAAG,MAAM,QAAQ,IAAI,EAAK,EAAE,MAAO,CACrc,IAAM,EAAI,MAAM,KAAK,EAAG,iBAAiB,uDAAuD,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,sBAAsB,CAAC,CAAC,MAAM,CAAC,EACxI,EAAM,EAAI,OAAO,GAAG,CAAC,EAAI,KAAK,GAAG,IAAI,GAAG,EAAE,SAAS,CAAC,CAAC,IAAI,gBAAgB,KAAK,EAAE,OAAO,IAAI,EAAE,aAAa,GAAA,CAAI,KAAK,CAAC,CAAC,OAAO,EAAE,EAAQ,EAAG,IAAI,IAAI,EAAM,IAAI,GAAG,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAM,MAAM,EAAE,IAAI,KAAK,OAAO,EAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAG,IAAI,CAAC,CAAC,CAAC,KAAK,EAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAM,CAAC,EAAM,EAAK,GAAiV,OAArB,MAAxS,CAAI,IAAY,EAAM,EAAM,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,UAAU,cAAc,EAAQ,KAAK,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,MAAM,CAAC,EAAE,CAAC,SAAS,EAAQ,WAAW,OAAO,EAAS,MAAM,EAAQ,QAAQ,KAAK,IAAI,EAAE,EAAQ,QAAQ,EAAE,EAAQ,OAAO,KAAK,WAAW,CAAC,CAAC,EAAE,EAAG,MAAM,QAAQ,IAAI,EAAK,EAAE,CAAqB,MAAY,CAAC,EAAK,GAAK,EAAM,QAAQ,GAAG,EAAE,OAAO,CAAC,CAAE,CAAE,EAAE,CAAC,CAAC,EAC7qB,EAAK,EAAU,CAAC,GAAG,EAAM,MAAM,EAAO,EAAM,KAAK,EAAE,IAAI,GAAM,CAAC,EAAM,QAAQ,EAAK,EAAU,EAAI,CAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAChI,SAAgB,GAAa,EAAU,CAAC,OAAoB,EAAW,SAAkB,EAAM,EAAI,CAAC,IAAM,EAAMA,EAAO,IAAI,EAEiV,OAF/U,MAAc,CAAC,EAAa,EAAE,IAAM,EAAG,EAAM,QAE1K,GAAG,CAAC,GAAI,GAAc,GAAG,CAAC,EAAO,WAAW,gBAAgB,CAAC,CAAC,QAAQ,OAAO,GAAK,CAAC,WAAS,GAAW,GAAI,EAAK,IAAI,CAAC,IAAM,EAAK,SAAS,cAAc,MAAM,EAAE,EAAK,UAAU,OAAO,IAAM,EAAM,SAAS,cAAc,MAAM,EAA4H,MAA1H,GAAM,YAAY,EAAK,EAAM,aAAa,SAAS,CAAI,EAAE,EAAM,MAAM,YAAY,MAAM,OAAO,CAAC,CAAC,EAAE,EAAK,YAAY,CAAK,EAAS,CAAK,CAAC,EAAqC,OAAnC,EAAG,aAAa,eAAe,EAAE,MAAY,CAAC,EAAG,gBAAgB,cAAc,EAAE,EAAQ,CAAE,CAAE,EAAE,CAAC,CAAC,EAAsB,EAAK,EAAU,CAAC,GAAG,EAAM,IAAI,GAAM,CAAC,EAAM,QAAQ,EAAK,EAAU,EAAI,CAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAIxd,SAAS,IAAgB,CACnH,OAD8H,IAAS,OAAmB,IAAK,AAA8E,IAAY,CAAC,KAA9D,EAAO,SAAS,SAAS,QAAQ,OAAO,EAAE,IAAI,GAA2B,GAAG,YAAY,IAAI,CAAC,EAClR,EAAY,MAAM,YAAY,IAAI,EAAE,EAAY,GAAG,KAAK,CAI/D,SAAS,GAAW,EAAO,CAAC,IAAM,EAAI,GAAQ,EAAO,WAAW,EAAO,WAAW,cAAc,KAAK,EAAE,KAAK,GAAG,CAAC,GAAK,CAAC,EAAI,YAAY,OAAO,IAAM,EAAI,EAAI,MAAM,QAAQ,EAAI,MAAM,QAAQ,OAAO,EAAS,sBAAsB,EAAE,EAAI,MAAM,QAAQ,CAAI,CAIzP,SAAS,GAAS,EAAO,CAAC,IAAI,EAAO,KAAS,EAAU,IAAQ,EAAK,GAAU,EAAK,GAAU,EAAM,EAAM,EAAO,GAC1G,EAAK,CAAC,EAAQ,MAAU,CAAY,GAAX,EAAK,GAAS,EAAK,OAAO,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,EAAO,UAAU,CAAE,MAAS,CAAC,CACrG,MAAC,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,YAAY,IAAI,KAAU,GAAS,IAAG,IAAI,GAAQ,OAAO,EAAE,kBAAmB,WAAW,CAAC,EAAO,EAAE,IAAM,EAAK,EAAQ,EAAI,EAAK,iBAAiB,iBAAiB,CAAI,GAAM,GAAM,EAAK,eAAe,IAAiB,EAAK,GAAK,QAAQ,QAAQ,CAAC,CAAC,KAAK,CAAK,EAAE,CAAC,EAAK,OAAO,GAAM,YAAW,EAAK,KAAK,CAAG,CAAE,CAAC,EAAK,GACxU,EAAE,YAAY,EAAE,YAAY,EAAE,EAAI,EAAE,EAAU,EAAE,aAAa,EAAK,GAAM,EAAO,qBAAqB,CAAK,EAAE,EAAM,EAAO,0BAA0B,CAAC,GAAM,GAAW,CAAM,CAAC,CADuJ,CACrJ,EAAE,EAAM,EAAE,IAAM,MAAY,QAAQ,QAAQ,CAAC,CAAC,KAAK,CAAK,EAAE,EAAO,iBAAiB,QAAQ,CAAO,EAAE,EAAK,SAAS,EAAO,oBAAoB,QAAQ,CAAO,CAAC,EAC1U,IAAM,EAAK,EAAO,eAAe,CAAC,GAAM,GAAW,CAAM,EAAE,GAAG,EAAE,UAAU,CAAC,EAAK,GAAK,EAAO,aAAa,CAAI,EAAE,EAAO,qBAAqB,CAAK,EAEhJ,EAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,EAAE,CAAE,MAAS,CAAC,CAAC,CAAC,CAAE,CAAE,CAAC,SAAgB,GAAa,EAAU,CAAC,OAAoB,EAAW,SAAkB,EAAM,EAAI,CAAC,GAAK,CAAC,GAAMC,EAAS,EAAc,EAAQ,EAAMD,EAAO,IAAI,EAAQ,EAAMA,EAAO,IAAI,EAK6a,OAHhpB,MAAuB,CAAC,IAAM,EAAI,EAAM,SAAS,EAAM,QAAQ,cAAc,GAAG,GAAM,CAAC,EAAI,OAAO,EAAI,MAAM,QAAQ,IAAI,IAAI,MAAY,CAAC,EAAQ,EAAK,IAAI,QAAQ,GAAG,EAAQ,CAAC,EAAsI,OAApI,EAAU,KAAK,CAAI,EAAE,EAAM,YAAY,CAAC,EAAI,MAAM,QAAQ,GAAG,EAAQ,EAAE,EAAU,EAAU,OAAO,GAAG,IAAI,CAAI,EAAE,EAAM,QAAQ,IAAK,MAAY,EAAM,SAAS,EAAM,QAAQ,CAAE,EAAE,CAAC,CAAC,EAGjW,MAAc,CAAC,IAAM,EAAI,EAAM,SAAS,EAAM,QAAQ,cAAc,GAAG,CAAC,EAAI,OAAO,IAAI,EAAM,EAAM,EAAM,EAAM,MAAU,CAAC,EAAQ,MAAW,CAAC,IAAM,EAAO,EAAI,cAAc,kBAAkB,EAAM,EAAK,KAAK,GAAG,CAAC,EAAK,GAAQ,OAAO,EAAO,WAAY,WAAW,EAAO,UAAU,EAAE,IAAK,MAAS,CAAC,CAAC,GAAG,GAAM,EAAK,YAAY,EAAE,CAAK,EAAoC,EAAK,UAAU,EAAK,eAAe,GAAE,EAAK,KAAK,EAA9E,EAAM,GAAS,CAAM,EAA8D,EAAM,SAAQ,EAAM,QAAQ,EAAE,MAAO,CAAI,IAAQ,GAAG,EAAM,EAAO,WAAW,EAAO,EAAE,EAAU,EAAM,SAAQ,EAAM,QAAQ,CAAE,EAA6C,MAA3C,GAAM,EAAO,WAAW,EAAO,EAAK,IAAI,CAAC,MAAY,CAAC,EAAO,aAAa,CAAK,EAAE,GAAG,CAAC,EAAM,CAAE,MAAS,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,EAAsB,EAAME,EAAU,CAAC,SAAS,CAAc,EAAK,EAAU,CAAC,GAAG,EAAU,MAAI,MAAM,EAAK,EAAM,MAAM,GAAG,CAAC,EAAe,EAAK,OAAO,CAAC,IAAI,EAAM,MAAM,CAAC,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAE,CAO5zB,SAAS,IAAc,CAAI,EAAQ,UAAiB,IAAS,SAAmB,EAAQ,SAAS,GAAK,EAAO,iBAAiB,cAAc,GAAG,CAAC,EAAQ,EAAE,EAAE,QAAQ,EAAQ,EAAE,EAAE,OAAQ,EAAE,CAAC,QAAQ,GAAK,QAAQ,EAAI,CAAC,EAAE,CAExO,SAAS,GAAW,EAAK,CAAC,IAAI,EAAK,EAAK,KAAM,GAAM,iBAAiB,CAAI,CAAC,CAAC,WAAW,SAAQ,EAAK,EAAK,cAAc,GAAG,CAAC,GAAM,CAAC,EAAK,YAAY,OAAU,GAAQ,EAAQ,OAAO,EAAE,IAAM,EAAK,CAAC,EAAE,IAAI,IAAI,EAAE,EAAK,IAAI,GAAM,EAAE,cAAc,EAAE,EAAE,cAAe,EAAK,QAAQ,MAAM,UAAU,QAAQ,KAAK,EAAE,cAAc,SAAS,CAAC,CAAC,EAAG,IAAM,EAAK,iBAAiB,CAAI,EAAQ,EAAM,EAAK,UAAU,EAAI,EAAM,EAAU,EAAM,EAAK,QAAQ,GAAG,EAAU,EAAU,SAAS,IAAI,CAAS,EAAE,EAAM,gBAAgB,IAAI,EAAE,EAAM,aAAa,cAAc,MAAM,EAAE,EAAM,MAAM,cAAc,OAAO,SAAS,KAAK,YAAY,CAAK,EAAE,IAAM,EAAK,EAAM,MAAM,UAAc,EAAM,EAAQ,EAAM,EAAM,EAAQ,EAAQ,EAAO,GAAG,CAAI,MAAM,CAAK,IAAG,EAAM,EAAE,QAAQ,EAAM,EAAE,SAAS,EAAM,MAAM,UAAU,EAAK,eAAe,EAAE,QAAQ,GAAO,QAAQ,EAAE,QAAQ,GAAO,KAAM,EAAE,EAAO,iBAAiB,cAAc,EAAO,CAAC,QAAQ,EAAI,CAAC,EAAE,IAAI,EAAK,GAAY,MAAW,CAAI,IAAY,EAAK,GAAQ,GAAS,EAAQ,SAAS,IAAO,EAAQ,MAAK,EAAO,oBAAoB,cAAc,CAAM,EAAE,EAAM,OAAO,EAAE,EAAE,EAAQ,CAAC,KAAK,EAAU,QAAM,EAAE,IAAM,EAAM,EAAK,OAAO,EAAK,QAAQ,OAAO,EAAK,MAAM,IAAU,EAAI,EAAU,QAAQ,CAAC,CAAC,QAAM,QAAQ,EAAK,OAAO,EAAE,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,EAAK,MAAM,OAAO,GAAU,KAAK,UAAU,CAAC,EAAE,EAAI,SAAS,EAAO,EAAI,SAAS,EAAO,EAAO,WAAW,EAAO,EAAK,MAAM,GAAG,CAAE,CAAC,SAAgB,GAAe,EAAU,CAAC,OAAoB,EAAW,SAAoB,EAAM,EAAI,CAAC,IAAM,EAAMF,EAAO,IAAI,EACz8C,OAD28C,MAAoB,CAAC,IAAM,EAAG,EAAM,QAAQ,GAAG,CAAC,GAAI,EAAY,GAAG,OAAO,EAAG,SAAU,WAAW,OAAO,GAAa,EAAE,IAAI,EAAU,EAAM,EAAY,EAAE,GAAG,EAAQ,CAAC,IAAM,EAAI,iBAAiB,EAAQ,IAAI,EAAE,EAAU,EAAI,QAAQ,OAAO,EAAE,WAAW,EAAI,KAAK,GAAG,EAAE,EAAY,WAAW,EAAI,OAAO,GAAG,EAAE,EAAQ,OAAO,CAAE,CACzyD,OAD0yD,EAAG,QAAQ,CAAC,CAAC,MAAM,OAAO,CAAS,EAAE,QAAQ,CAAW,EAAE,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,EAAK,KAAK,OAAO,CAAQ,CAAC,MACr5D,GAAW,CAAE,CAAE,EAAE,CAAC,CAAC,EAAsB,EAAK,EAAU,CAAC,GAAG,EAAM,IAAI,GAAM,CAAC,EAAM,QAAQ,EAAK,EAAU,EAAI,CAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAKrI,SAAS,GAAU,EAAG,CAAC,IAAI,IAAI,EAAE,EAAG,GAAG,IAAI,SAAS,KAAK,EAAE,EAAE,cAAc,CAAC,IAAM,EAAS,iBAAiB,CAAC,CAAC,CAAC,SAAS,GAAG,IAAW,SAAS,IAAW,SAAS,OAAO,CAAE,CAAC,OAAO,CAAG,CAWJ,SAAS,GAAa,EAAO,CAAC,IAAM,EAAE,EAAO,MAAM,kBAAkB,EAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,IAAI,IAAI,GAAG,EAAO,CAAC,EAAE,EAAE,GAAG,EAAQ,EAAM,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,8BAA8B,GAAU,KAAK,CAAC,EAAG,KAAK,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAS,EAAA,CAAO,QAAQ,CAAC,EAAE,KAAK,EAAG,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,GAAI,CAE/e,SAAS,IAAe,CAAC,IAAM,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,EAAO,QAAQ,EAAE,CAAC,EAAQ,EAAE,OAAO,KAAK,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAQ,CAAO,CAAC,CAAC,QAAQ,GAAI,CAAC,IAAM,EAAE,SAAS,eAAe,CAAE,EAAK,GAAG,EAAE,MAAM,UAAU,IAAE,EAAE,MAAM,QAAQ,EAAE,CAAC,CAAE,CAAC,SAAS,IAAgB,CAAI,KAAwB,GAAiB,GAAK,EAAO,iBAAiB,SAAS,GAAc,CAAC,QAAQ,EAAI,CAAC,EAAE,CAAC,SAAS,IAAmB,CAAC,IAAM,EAAK,OAAO,SAAW,KAAa,SAAS,eAAe,CAAO,EAAK,IAAK,EAAK,MAAM,gBAAgB,GAAa,EAAe,CAAC,EAAE,CAAC,SAAS,GAAa,CAAC,GAAG,OAAO,SAAW,IAAY,OAAO,IAAI,EAAK,SAAS,eAAe,CAAO,EAAM,EAAO,EAAM,EAAE,EAAE,SAAS,iBAAiB,eAAe,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAM,EAAE,EAAE,sBAAsB,EAAK,EAAE,OAAO,GAAG,EAAE,QAAQ,IAAc,EAAO,EAAE,OAAO,EAAE,SAAS,iBAAiB,GAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAK,SAAS,eAAe,CAAO,EAAE,GAAG,CAAC,EAAO,CAAI,IAAK,EAAK,MAAM,QAAQ,QAAU,IAAK,EAAK,MAAM,QAAQ,QAAO,MAAO,CAAC,GAAG,CAAC,EAAK,CAAC,EAAK,SAAS,cAAc,KAAK,EAAE,EAAK,GAAG,EAAQ,EAAK,aAAa,cAAc,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAK,YAAY,SAAS,cAAc,KAAK,CAAC,EACvqC,SAAS,KAAK,aAAa,EAAK,GAAM,EAAK,aAAa,SAAS,KAAK,EAAK,IAAI,CAAE,CAAK,IAAM,EAAK,SAAS,cAAc,KAAK,EAAE,EAAK,GAAG,EAAQ,EAAK,aAAa,cAAc,MAAM,EAAE,SAAS,KAAK,YAAY,CAAI,GAAG,CAAC,EAAK,CAAI,CAAC,CAAC,QAAQ,GAAO,CAAC,EAAM,MAAM,QAAQ,GAAG,EAAM,MAAM,OAAO,KAAK,MAAM,CAAM,EAAE,GAAW,KAAK,EAAM,MAAM,OAAO,OAAO,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,EAAE,GAAkB,EAAE,GAAe,EAAE,GAAc,CAAE,CAAC,SAAgB,GAAkB,EAAU,CAAC,OAAoB,EAAW,SAAuB,EAAM,EAAI,CAAC,IAAM,EAAMA,EAAO,IAAI,EAAE,MAAoB,CAAC,EAAa,EAAE,IAAM,EAAG,EAAM,QAAQ,GAAG,CAAC,EAAG,OAC9mB,IAAM,EAAK,GAAU,CAAE,EAAE,EAAG,aAAa,cAAc,EAAE,EACzD,IAAM,EAAK,EAAK,MAAM,OAAU,iBAAiB,CAAI,CAAC,CAAC,SAAS,SAAO,EAAK,MAAM,OAAO,MAAK,EAAY,EAAE,IAAM,EAAG,OAAO,gBAAiB,WAAW,IAAI,mBAAmB,EAAY,CAAC,EAAE,KAAwE,OAAhE,GAAG,EAAG,QAAQ,CAAE,EAAE,EAAO,iBAAiB,SAAS,CAAW,MAAY,CAAI,GAAG,EAAG,WAAW,EAAE,EAAO,oBAAoB,SAAS,CAAW,EAAE,EAAG,gBAAgB,aAAa,EAAE,EAAK,MAAM,OAAO,EAC5Y,EAAO,WAAW,EAAY,CAAC,CAAE,CAAE,EAAE,CAAC,CAAC,EAAE,IAAM,EAAM,CAAC,GAAG,EAAM,MAAM,mBAAmB,EAAG,EAAE,OAAoB,EAAK,EAAU,CAAC,GAAG,EAAY,QAAM,IAAI,GAAM,CAAC,EAAM,QAAQ,EAAK,EAAU,EAAI,CAAI,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,mJAvLtI,SA5CK,IAAwE,EAUhJ,GAAM,gBAAsB,GAAI,SAAe,GAAS,eAAqB,GAAO,IACnF,GAAW,KACX,GAAa,IACb,GAAY,iCAAuC,EAAS,gCAAsC,GAAY,iCAAqM,GAAI,CAI9T,uGAAuG,mFAAmF,2CAAuC,+BACjO,6DAAgD,IAAI,gDAA4C,sBAAsB,iDAAiD,qEAA8D,IAAI,wCAAoC,yCAAqC,iBAAiB,kBAAkB,uBAAuB,4BAA4B,IACxY,oFAAsF,oGAAiF,GAAO,GAAA,CAAI,QAAQ,CAAC,EAAE,YAE7L,2HAA6G,iIAAmH,gIAChO,8DAEA,4CAA6C,qJAAuH,4CAA6C,iJAA4H,mEAAmE,oEAAoE,kEAAkE,yIAEthB,qFAAqF,0CACrF,8FAA8F,qKAAwJ,yFAAyF,gGAAgG,iFAC/a,sEACA,yEACA,6EAEA,wEAAwE,CAAC,CAAC,KAAK;CAAI,EAI/E,EAAQ,KAAW,OAAmB,IAAS,QAAa,IAAU,MAAM,YAAY,IAAI,EAAE,EAAQ,GAAG,GAEzG,EAAY,KAAgJ,EAA0B,IAAS,OAAYG,EAAUC,EAAsB,OAAyB,IAAS,QAAa,EAAO,WAAW,kCAAkC,CAAC,CAAC,QAG9U,EAA2B,IAAS,SAAc,EAAO,WAAW,qCAAqC,CAAC,CAAC,SAAS,EAAO,WAAW,KAAQ,GAAoB,GAAsB,EAE1L,GAAS,KAAoB,IAAS,QAC1C,EAAO,iBAAiB,eAAe,GAAS,YAAY,IAAI,EAAE,EAAI,EAAa,IAAS,OAAY,CAAC,IAAM,MAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAI,EAAO,eAAe,GAAkB,EAAE,CAAE,CAAC,EAAE,EAAO,iBAAiB,WAAW,CAAK,EAAE,IAAM,EAAK,QAAQ,UAAU,QAAQ,UAAU,SAAS,GAAG,EAAK,CAAC,IAAM,EAAI,EAAK,MAAM,KAAK,CAAI,EAAU,OAAR,EAAM,EAAS,CAAI,CAAE,CAAC,GAAU,IAAS,QAAa,OAAO,kBAAmB,WAAW,CAAC,IAAM,EAAK,GAAG,CAAI,EAAE,aAAa,OAAO,GAAG,EAAE,WAAgB,EAAE,aAAa,GAAK,EAAE,MAAM,GAAK,EAAE,aAAa,QAAQ,EAAE,EAAE,EAAQ,EAAM,GAAM,EAAK,kBAAkB,EAAK,iBAAiB,OAAO,CAAC,CAAC,QAAQ,GAAG,EAAK,CAAC,CAAC,EAAE,EAAM,QAAQ,EAAE,IAAI,iBAAiB,GAAS,CAAC,EAAQ,QAAQ,GAAG,EAAE,WAAW,QAAQ,GAAG,CAAI,aAAa,iBAAiB,EAAK,CAAC,EAAU,aAAa,SAAQ,EAAM,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,QAAQ,SAAS,gBAAgB,CAAC,UAAU,GAAK,QAAQ,EAAI,CAAC,CAAE,CAAO,MAAoB,IAAS,QAAa,YAAY,IAAI,EAAE,GAAS,IAAU,MAAgB,GAAc,GAAG,EAAS,EAK5+B,EAAiB,KAGjB,EAAU,CAAC,EAAQ,EAAc,IAM/B,GAAK,CAAC,KAAK,IAAI,KAAK,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS,EAAS,OAAO,KAAK,SAAS,EAAS,YAAY,EAAE,QAAQ,IAAI,OAAO,IAAI,WAAW,GAAM,UAAU,KAAK,QAAQ,CAAC,EAE9K,GAAQ,CAAC,KAAK,GAAG,KAAK,IAAI,OAAO,IAAI,OAAO,KAAK,SAAS,EAAS,OAAO,KAAK,SAAS,EAAS,YAAY,EAAE,QAAQ,IAAI,OAAO,IAAI,WAAW,GAAM,UAAU,MAAM,QAAQ,EAAE,EACjL,GAAK,CAAC,KAAK,IAAI,KAAK,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS,GAAY,OAAO,KAAK,SAAS,EAAS,YAAY,IAAI,QAAQ,EAAE,OAAO,KAAK,WAAW,GAAK,UAAU,KAAK,QAAQ,CAAC,EAAQ,GAAS,iCAGlM,EAAQ,IAAI,QAO+V,EAAO,IAAQ,CAAC,GAAG,EAAM,QAAQ,CAAC,GAAS,IAAO,EAAE,IAAM,KAAK,IAAI,EAAE,KAAK,EAAI,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,MAAM,EAAI,KAAK,EAAE,GAAG,KAAK,IAAI,EAAE,IAAI,EAAI,GAAG,EAAE,GAAG,KAAK,IAAI,EAAE,OAAO,EAAI,MAAM,EAAE,EAW1hB,GAAO,EAAK,IAAI,cAAc,EAAE,OAAO,GAAM,IAAO,OAAO,IAAI,EAAK,IAAU,IAAQ,EAAK,IAAI,SAAS,EAAE,KAAK,GAAM,IAAO,OAAO,IAAI,EAAK,IAwBvE,EAAK,CAAC,UAAU,IAAI,YAAY,IAAI,QAAQ,KAAK,UAAU,KAAK,OAAO,GAAG,EAAQ,GAAU,CAAC,OAAO,KAAK,WAAW,EAAI,EA8B7L,GAAiB,IAAS,OAAqC,GAAzB,EAAO,SAAS,SAAgB,GAAY,KAiB4P,GAAS,GAAM,CAAC,IAAM,EAAK,SAAS,cAAc,MAAM,EAAE,EAAK,UAAU,OAAO,IAAM,EAAM,SAAS,cAAc,MAAM,EAAiD,MAA/C,GAAM,YAAY,EAAK,EAAK,YAAY,CAAK,EAAS,CAAK,EAAQ,GAAU,CAAC,WAAW,KAAK,OAAO,gCAAgC,EASzgB,EAAM,CAAC,aAAa,IAAI,WAAW,IAAI,WAAW,IAAI,KAAK,EAAE,EAG7D,EAAQ,CAAC,QAAQ,IAAI,OAAO,GAAG,WAAW,IAAI,KAAK,EAAE,SAAS,EAAE,EAUlE,EAAY,KAwB/E,EAAK,CAAC,KAAK,IAAI,MAAM,GAAG,EAAQ,GAAU,wCAA8C,EAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,EAAK,EAG7H,EAAQ,KAYN,EAAQ,cAAoB,GAAW,GACtC,EAAQ,cAAoB,GAAS,CAAC,mGAG7C,sDAEA,mFAAmF,oGAAoG,wKAAwK,oGAAoG,sKAAsK,oGAAoG,qKAAqK,CAAC,CAAC,KAAK;CAAI,EACv3B,GAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAQ,GAAS,GAE5K,GAAiB,6BC9NQ,EAAC,EAAU,UAAU,CAAC,CAAC,EAAeC,GAAM,CAAC,CAAC,cAAc,GAAK,MAAM,CAAC,CAAC,CAAC,EAAeC,GAAI,CAAC,wLAAwL,EAAeC,GAAU,yCCA/S,EAAC,EAAU,UAAU,CAAC,yCAAyC,CAAC,EAAeC,GAAM,CAAC,CAAC,cAAc,GAAK,MAAM,CAAC,CAAC,cAAc,iCAAiC,OAAO,SAAS,MAAM,SAAS,aAAa,yBAAyB,IAAI,uEAAuE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAeC,GAAI,CAAC,gsBAAgsB,svBAAsvB,kvBAAkvB,EAAeC,GAAU,yCCArhF,EAAC,EAAU,UAAU,CAAC,6BAA6B,CAAC,EAAe,GAAM,CAAC,CAAC,cAAc,GAAK,MAAM,CAAC,CAAC,cAAc,qBAAqB,SAAS,GAAK,OAAO,SAAS,MAAM,SAAS,aAAa,aAAa,IAAI,wEAAwE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAe,GAAI,CAAC,8tBAAkuB,ixBAAqxB,EAAe,GAAU,kBCAj9B,SAAS,EAAqB,EAAU,GAAG,EAAS,CAAC,IAAM,EAAc,CAAC,EAAuF,OAArF,GAAU,QAAQ,GAAS,GAAS,OAAO,OAAO,EAAc,EAAU,EAAQ,CAAC,EAAS,CAAc,+CAAzhC,KAAiL,KAAkE,IAA4B,KAAmJ,KAA0H,KAA0H,EAAO,GAAW,CAAC,YAAY,YAAY,WAAW,EAAQ,GAAkB,eAAqB,GAAkB,CAAC,UAAU,kBAAkB,UAAU,kBAAkB,UAAU,iBAAiB,EAA+L,GAAY,CAAC,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,KAAK,QAAQ,EAAQ,IAAY,CAAC,QAAM,cAAY,CAAC,IAAM,EAAOC,EAAiB,CAAmB,EAAQ,EAAW,GAAO,EAAO,WAAiB,EAAaC,OAAmB,CAAC,GAAG,EAAO,YAAU,GAAG,CAAC,KAAK,UAAU,CAAU,CAAC,CAAC,EAAE,OAAoB,EAAK,EAAoB,SAAS,CAAC,MAAM,EAAsB,UAAQ,CAAC,CAAE,EAAQ,GAAwB,CAAC,YAAY,YAAY,aAAa,YAAY,SAAS,WAAW,EAAQ,GAAS,EAAO,OAAOC,CAAc,EAAQ,IAAU,CAAC,SAAO,KAAG,QAAM,GAAG,MAAgB,CAAC,GAAG,EAAM,QAAQ,GAAwB,EAAM,UAAU,EAAM,SAAS,WAAW,GAAU,IAAwB,EAAM,IAAe,EAAM,iBAAwB,EAAS,KAAK,GAAG,EAAE,EAAM,iBAAwB,EAAS,KAAK,GAAG,EAU13D,EAAgB,GAV24DC,EAAiB,SAAS,EAAM,EAAI,CAAC,IAAM,EAAYC,EAAO,IAAI,EAAQ,EAAW,GAAK,EAAkB,EAAgBC,EAAY,EAAO,CAAC,eAAa,aAAW,GAAc,EAA0B,GAAqB,EAAE,GAAK,CAAC,QAAM,UAAA,EAAU,WAAS,UAAQ,GAAG,GAAW,GAAS,CAAK,EAAO,CAAC,cAAY,cAAW,uBAAoB,mBAAgB,iBAAe,aAAU,mBAAgB,cAAW,aAAU,GAAgB,CAAC,cAAW,eAAe,YAAY,IAAI,EAAW,UAAQ,oBAAiB,CAAC,EAAQ,EAAiB,GAAuB,EAAM,EAAQ,EAA0G,EAAkB,GAAG,GAAhGC,GAAsBC,GAAuBC,EAA6F,EAAE,OAAoB,EAAK,EAAY,CAAC,GAAG,GAAU,EAAgB,SAAsB,EAAK,GAAS,CAAC,QAAQ,GAAS,QAAQ,GAAM,SAAsB,EAAK,GAAW,CAAC,MAAM,GAAY,SAAsB,EAAM,EAAO,IAAI,CAAC,GAAG,EAAU,GAAG,GAAgB,UAAU,GAAG,EAAkB,gBAAgBC,EAAU,EAAU,EAAE,mBAAmB,eAAgC,mBAAiB,SAAS,YAAY,IAAI,EAAW,MAAM,CAAC,GAAG,CAAK,EAAE,GAAG,EAAqB,CAAC,UAAU,CAAC,mBAAmB,aAAa,EAAE,UAAU,CAAC,mBAAmB,UAAU,CAAC,EAAE,EAAY,CAAc,EAAE,SAAS,CAAc,EAAK,EAAO,IAAI,CAAC,UAAU,gBAAgB,mBAAmB,SAA0B,mBAAiB,SAAS,YAAY,MAAM,CAAC,gBAAgB,cAAc,EAAE,SAAS,CAAC,UAAU,CAAC,gBAAgB,oBAAoB,EAAE,UAAU,CAAC,gBAAgB,kBAAkB,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,IAAI,CAAC,UAAU,gBAAgB,mBAAmB,aAA8B,mBAAiB,SAAS,YAAY,SAAsB,EAAKC,EAAS,CAAC,sBAAsB,GAAK,SAAsB,EAAKR,EAAe,CAAC,SAAsB,EAAK,EAAO,GAAG,CAAC,UAAU,+BAA+B,qBAAqB,YAAY,IAAI,OAAO,SAAS,kEAAkE,CAAC,CAAC,CAAC,EAAE,UAAU,gBAAgB,MAAM,CAAC,OAAO,EAAmB,mBAAiB,SAAS,YAAY,SAAS,CAAC,UAAU,CAAC,qBAAqB,oBAAoB,EAAE,UAAU,CAAC,qBAAqB,oBAAoB,CAAC,EAAE,kBAAkB,MAAM,mBAAmB,GAAK,GAAG,EAAqB,CAAC,UAAU,CAAC,SAAsB,EAAKA,EAAe,CAAC,SAAsB,EAAK,EAAO,GAAG,CAAC,UAAU,+BAA+B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,kEAAkE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAsB,EAAKA,EAAe,CAAC,SAAsB,EAAK,EAAO,GAAG,CAAC,UAAU,+BAA+B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,kEAAkE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAY,CAAc,CAAC,CAAC,CAAC,CAAC,EAAe,EAAM,EAAO,IAAI,CAAC,UAAU,iBAAiB,mBAAmB,cAA+B,mBAAiB,SAAS,YAAY,SAAS,CAAc,EAAM,EAAO,IAAI,CAAC,UAAU,gBAAiC,mBAAiB,SAAS,YAAY,SAAS,CAAc,EAAK,EAAO,IAAI,CAAC,UAAU,gBAAiC,mBAAiB,SAAS,YAAY,SAAsB,EAAKQ,EAAS,CAAC,sBAAsB,GAAK,SAAsB,EAAMR,EAAe,CAAC,SAAS,CAAc,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,SAAS,CAAC,EAAe,EAAM,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,CAAC,eAA+B,EAAK,EAAO,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,iBAAiB,MAAM,CAAC,OAAO,EAAmB,mBAAiB,SAAS,YAAY,MAAM,CAAC,qBAAqB,oBAAoB,EAAE,SAAS,CAAC,UAAU,CAAC,sBAAsB,qBAAqB,qBAAqB,oBAAoB,EAAE,UAAU,CAAC,sBAAsB,qBAAqB,qBAAqB,oBAAoB,CAAC,EAAE,kBAAkB,MAAM,mBAAmB,GAAK,GAAG,EAAqB,CAAC,UAAU,CAAC,SAAsB,EAAMA,EAAe,CAAC,SAAS,CAAc,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,SAAS,CAAC,EAAe,EAAM,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,SAAS,CAAc,EAAK,EAAO,KAAK,CAAC,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,cAAiB,CAAC,EAAe,EAAK,EAAO,GAAG,CAAC,CAAC,EAAe,EAAK,EAAO,KAAK,CAAC,MAAM,CAAC,sBAAsB,8CAA8C,EAAE,SAAS,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAsB,EAAMA,EAAe,CAAC,SAAS,CAAc,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,SAAS,CAAC,EAAe,EAAM,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,SAAS,CAAc,EAAK,EAAO,KAAK,CAAC,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,cAAiB,CAAC,EAAe,EAAK,EAAO,GAAG,CAAC,CAAC,EAAe,EAAK,EAAO,KAAK,CAAC,MAAM,CAAC,sBAAsB,8CAA8C,EAAE,SAAS,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAY,CAAc,CAAC,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,IAAI,CAAC,UAAU,iBAAkC,mBAAiB,SAAS,YAAY,SAAsB,EAAKQ,EAAS,CAAC,sBAAsB,GAAK,SAAsB,EAAMR,EAAe,CAAC,SAAS,CAAc,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,iBAAiB,CAAC,EAAe,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,6BAA6B,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,gBAAgB,MAAM,CAAC,OAAO,EAAmB,mBAAiB,SAAS,YAAY,MAAM,CAAC,qBAAqB,oBAAoB,EAAE,SAAS,CAAC,UAAU,CAAC,qBAAqB,oBAAoB,EAAE,UAAU,CAAC,qBAAqB,oBAAoB,CAAC,EAAE,kBAAkB,MAAM,mBAAmB,GAAK,GAAG,EAAqB,CAAC,UAAU,CAAC,SAAsB,EAAMA,EAAe,CAAC,SAAS,CAAc,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,iBAAiB,CAAC,EAAe,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAsB,EAAMA,EAAe,CAAC,SAAS,CAAc,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,iBAAiB,CAAC,EAAe,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAY,CAAc,CAAC,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,IAAI,CAAC,UAAU,gBAAiC,mBAAiB,SAAS,YAAY,SAAsB,EAAKQ,EAAS,CAAC,sBAAsB,GAAK,SAAsB,EAAMR,EAAe,CAAC,SAAS,CAAc,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAsB,EAAK,EAAK,CAAC,KAAK,wCAAwC,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAsB,EAAK,EAAK,CAAC,KAAK,8CAA8C,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAsB,EAAK,EAAK,CAAC,KAAK,uBAAuB,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,iBAAiB,MAAM,CAAC,OAAO,EAAmB,mBAAiB,SAAS,YAAY,SAAS,CAAC,UAAU,CAAC,sBAAsB,qBAAqB,qBAAqB,qBAAqB,qBAAqB,oBAAoB,EAAE,UAAU,CAAC,sBAAsB,qBAAqB,qBAAqB,qBAAqB,qBAAqB,oBAAoB,CAAC,EAAE,kBAAkB,MAAM,mBAAmB,GAAK,GAAG,EAAqB,CAAC,UAAU,CAAC,SAAsB,EAAMA,EAAe,CAAC,SAAS,CAAc,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAsB,EAAK,EAAK,CAAC,KAAK,wCAAwC,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAsB,EAAK,EAAK,CAAC,KAAK,8CAA8C,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,8CAA8C,EAAE,SAAsB,EAAK,EAAK,CAAC,KAAK,uBAAuB,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAsB,EAAMA,EAAe,CAAC,SAAS,CAAc,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAsB,EAAK,EAAK,CAAC,KAAK,wCAAwC,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAsB,EAAK,EAAK,CAAC,KAAK,8CAA8C,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,8CAA8C,EAAE,SAAsB,EAAK,EAAK,CAAC,KAAK,uBAAuB,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAY,CAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,IAAI,CAAC,UAAU,iBAAkC,mBAAiB,SAAS,YAAY,SAAsB,EAAKS,GAAO,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,MAAM,gBAAgB,IAAI,eAAe,IAAI,YAAY,IAAI,WAAW,IAAI,UAAU,SAAS,UAAU,SAAS,MAAM,QAAQ,IAAI,2FAA2F,EAAE,UAAU,iBAAiB,mBAAmB,YAA6B,mBAAiB,SAAS,YAAY,MAAM,CAAC,OAAO,yCAAyC,aAAa,wCAAwC,EAAE,SAAS,CAAC,UAAU,CAAC,OAAO,yCAAyC,aAAa,wCAAwC,EAAE,UAAU,CAAC,OAAO,yCAAyC,aAAa,wCAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAe,EAAM,EAAO,IAAI,CAAC,UAAU,gBAAgB,mBAAmB,SAA0B,mBAAiB,SAAS,YAAY,SAAS,CAAc,EAAK,EAAO,IAAI,CAAC,UAAU,gBAAgB,mBAAmB,YAA6B,mBAAiB,SAAS,YAAY,SAAsB,EAAKD,EAAS,CAAC,sBAAsB,GAAK,SAAsB,EAAKR,EAAe,CAAC,SAAsB,EAAK,EAAO,GAAG,CAAC,UAAU,+BAA+B,qBAAqB,YAAY,SAAsB,EAAK,EAAK,CAAC,KAAK,uBAAuB,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,gBAAgB,MAAM,CAAC,OAAO,EAAmB,mBAAiB,SAAS,YAAY,SAAS,CAAC,UAAU,CAAC,qBAAqB,oBAAoB,EAAE,UAAU,CAAC,qBAAqB,oBAAoB,CAAC,EAAE,kBAAkB,MAAM,mBAAmB,GAAK,GAAG,EAAqB,CAAC,UAAU,CAAC,SAAsB,EAAKA,EAAe,CAAC,SAAsB,EAAK,EAAO,GAAG,CAAC,UAAU,+BAA+B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAsB,EAAK,EAAK,CAAC,KAAK,uBAAuB,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAsB,EAAKA,EAAe,CAAC,SAAsB,EAAK,EAAO,GAAG,CAAC,UAAU,+BAA+B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAsB,EAAK,EAAK,CAAC,KAAK,uBAAuB,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAY,CAAc,CAAC,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,IAAI,CAAC,UAAU,iBAAiB,mBAAmB,SAA0B,mBAAiB,SAAS,YAAY,MAAM,CAAC,gBAAgB,cAAc,EAAE,SAAS,CAAC,UAAU,CAAC,gBAAgB,oBAAoB,EAAE,UAAU,CAAC,gBAAgB,kBAAkB,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,IAAI,CAAC,UAAU,iBAAiB,mBAAmB,aAA8B,mBAAiB,SAAS,YAAY,SAAsB,EAAM,EAAO,IAAI,CAAC,UAAU,iBAAkC,mBAAiB,SAAS,YAAY,SAAS,CAAc,EAAK,EAAO,IAAI,CAAC,UAAU,gBAAiC,mBAAiB,SAAS,YAAY,SAAsB,EAAKQ,EAAS,CAAC,sBAAsB,GAAK,SAAsB,EAAKR,EAAe,CAAC,SAAsB,EAAM,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,SAAS,CAAC,mCAAgD,EAAK,EAAK,CAAC,KAAK,qBAAqB,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,iDAAiD,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,gBAAgB,MAAM,CAAC,OAAO,EAAmB,mBAAiB,SAAS,YAAY,SAAS,CAAC,UAAU,CAAC,qBAAqB,oBAAoB,EAAE,UAAU,CAAC,qBAAqB,oBAAoB,CAAC,EAAE,kBAAkB,MAAM,mBAAmB,GAAK,GAAG,EAAqB,CAAC,UAAU,CAAC,SAAsB,EAAKA,EAAe,CAAC,SAAsB,EAAM,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,CAAC,mCAAgD,EAAK,EAAK,CAAC,KAAK,qBAAqB,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,iDAAiD,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAsB,EAAKA,EAAe,CAAC,SAAsB,EAAM,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,sBAAsB,6CAA6C,EAAE,SAAS,CAAC,mCAAgD,EAAK,EAAK,CAAC,KAAK,qBAAqB,YAAY,GAAK,OAAO,YAAY,aAAa,GAAM,UAAU,CAAC,EAAE,QAAQ,YAAY,aAAa,GAAM,SAAsB,EAAK,EAAO,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,iDAAiD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAY,CAAc,CAAC,CAAC,CAAC,CAAC,EAAe,EAAK,EAAO,IAAI,CAAC,UAAU,gBAAiC,mBAAiB,SAAS,YAAY,SAAsB,EAAKQ,EAAS,CAAC,sBAAsB,GAAK,SAAsB,EAAKR,EAAe,CAAC,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,0BAA0B,OAAO,EAAE,SAAS,iBAAoB,CAAC,CAAC,CAAC,EAAE,UAAU,gBAAgB,MAAM,CAAC,OAAO,EAAmB,mBAAiB,SAAS,YAAY,SAAS,CAAC,UAAU,CAAC,qBAAqB,oBAAoB,EAAE,UAAU,CAAC,qBAAqB,oBAAoB,CAAC,EAAE,kBAAkB,MAAM,mBAAmB,GAAK,GAAG,EAAqB,CAAC,UAAU,CAAC,SAAsB,EAAKA,EAAe,CAAC,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,0BAA0B,QAAQ,sBAAsB,6CAA6C,EAAE,SAAS,iBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAsB,EAAKA,EAAe,CAAC,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,8BAA8B,qBAAqB,YAAY,IAAI,OAAO,MAAM,CAAC,0BAA0B,QAAQ,sBAAsB,6CAA6C,EAAE,SAAS,iBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAY,CAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAUnprB,EAAE,CAV+prB,kFAAkF,gSAAgS,2KAA2K,iUAAiU,sKAAsK,8TAA8T,0RAA0R,gTAAgT,4MAA4M,yQAAyQ,gSAAgS,gVAAgV,4SAA4S,iTAAiT,mUAAmU,qQAAqQ,yRAAyR,kMAAkM,sQAAsQ,GAAGU,GAAgB,GAAGC,GAAiB,GAAGC,EAU9h1B,EAAE,cAAc,EAAiC,EAAgB,YAAY,SAAS,EAAgB,aAAa,CAAC,OAAO,IAAI,MAAM,IAAI,EAAE,GAAoB,EAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,YAAY,WAAW,EAAE,aAAa,CAAC,eAAe,cAAc,UAAU,EAAE,MAAM,UAAU,KAAK,GAAY,IAAI,CAAC,CAAC,EAAE,GAAS,EAAgB,CAAC,CAAC,cAAc,GAAK,MAAM,CAAC,CAAC,cAAc,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,QAAQ,aAAa,0EAA0E,IAAI,yEAAyE,OAAO,KAAK,EAAE,CAAC,cAAc,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,QAAQ,aAAa,wDAAwD,IAAI,yEAAyE,OAAO,KAAK,EAAE,CAAC,cAAc,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,QAAQ,aAAa,cAAc,IAAI,wEAAwE,OAAO,KAAK,EAAE,CAAC,cAAc,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,QAAQ,aAAa,cAAc,IAAI,wEAAwE,OAAO,KAAK,EAAE,CAAC,cAAc,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,QAAQ,aAAa,uGAAuG,IAAI,wEAAwE,OAAO,KAAK,EAAE,CAAC,cAAc,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,QAAQ,aAAa,uLAAuL,IAAI,wEAAwE,OAAO,KAAK,EAAE,CAAC,cAAc,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,QAAQ,aAAa,oGAAoG,IAAI,wEAAwE,OAAO,KAAK,CAAC,CAAC,EAAE,GAAG,GAAwBC,EAAiB,EAAE,GAAG,GAAwBC,EAAkB,EAAE,GAAG,GAAwBC,EAAkB,CAAC,EAAE,CAAC,6BAA6B,EAAI,CAAC,KCV31E,SAAwB,GAAS,EAAO,EAAa,CAAC,MAAM,CAAC,YAAY,8EAA8E,QAAQ,qEAAqE,OAAO,0BAA0B,YAAY,uEAAuE,MAAM,UAAU,CAAE"}