{"version":3,"file":"EventsGrid.CxxP22PX.mjs","names":["React.useSyncExternalStore","React.useState","React.useRef","React.useMemo"],"sources":["https:/framerusercontent.com/modules/m20RD7wndO8NAzLnglKX/MsDoUleToj9nacnJNjWs/EventsGrid.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{createPortal}from\"react-dom\";import{motion,AnimatePresence}from\"framer-motion\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";const HEAD_FONT=\"'Montserrat', 'Helvetica Neue', sans-serif\";const BODY_FONT=\"'Archivo', 'Helvetica Neue', sans-serif\";// Neutral fill behind event artwork. Previously a rotating set of\n// blue/green/orange gradients; the client asked for the colour washes to\n// come off the imagery, so cards now use one quiet placeholder and any\n// photo that is set shows as shot.\nconst PLACEHOLDER=\"#1f2933\";const REGISTER_URL=\"https://river-oaks-church.churchcenter.com/registrations\";// The church's own event artwork, served from the same CMS that backs\n// riveroaks.church/bulletin, so a re-crop or re-upload there flows straight\n// through here. Nearly every flyer is authored 2:1, which is why the card¡\n// media box below is 2:1 as well: it means no crop at all on the common case.\nconst ART=\"https://media.thechurchcoassets.com/accounts/9594\";const art=path=>`${ART}/${path}__largepreview__.webp`;// Accepts watch / youtu.be / embed / live / shorts URLs or a bare 11-char id.\nfunction parseYouTubeId(url){if(!url)return null;const trimmed=url.trim();if(/^[\\w-]{11}$/.test(trimmed))return trimmed;const m=trimmed.match(/(?:youtube(?:-nocookie)?\\.com\\/(?:watch\\?(?:.*&)?v=|embed\\/|live\\/|shorts\\/)|youtu\\.be\\/)([\\w-]{11})/);return m?m[1]:null;}/* ------------------------------------------------------------------ *\n * Dates\n *\n * The bulletin is the church's primary events destination, so it has to\n * stay current without anyone editing it: last week's events drop off and\n * the \"This Week\" band refills on its own.\n *\n * Staff type dates the way they read them on the printed bulletin\n * (\"Sun, Aug 23\"), so the year is worked out here rather than demanded of\n * them. An explicit \"ISO Date\" field overrides the guess on the rare event\n * that is genuinely more than a year out.\n * ------------------------------------------------------------------ */const MONTHS={jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11};const WEEKDAYS={sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6};const DAY_MS=864e5;// \"Today\" as the church experiences it, not as the reader's device does.\n// A visitor in Tokyo should still see Murfreesboro's Sunday.\nfunction churchToday(){const now=new Date;try{const stamp=new Intl.DateTimeFormat(\"en-CA\",{timeZone:\"America/Chicago\",year:\"numeric\",month:\"2-digit\",day:\"2-digit\"}).format(now);const[y,m,d]=stamp.split(\"-\").map(Number);if(y&&m&&d)return new Date(y,m-1,d);}catch{// Intl without tz data: fall through to device-local midnight.\n}return new Date(now.getFullYear(),now.getMonth(),now.getDate());}function eventDate(ev,today){const iso=(ev?.isoDate||\"\").trim();const isoMatch=iso.match(/^(\\d{4})-(\\d{1,2})-(\\d{1,2})/);if(isoMatch){return new Date(+isoMatch[1],+isoMatch[2]-1,+isoMatch[3]);}const raw=(ev?.date||\"\").trim();if(!raw)return null;// \"Wed, Aug 12\" / \"August 12, 2026\" / \"Aug 12\" — the weekday prefix is\n// skipped because a comma follows it, so the month is the first token\n// that is directly followed by a number.\nconst m=raw.match(/([A-Za-z]{3,})\\.?\\s+(\\d{1,2})(?:\\s*,?\\s*(\\d{4}))?/);if(!m)return null;const month=MONTHS[m[1].slice(0,3).toLowerCase()];if(month===undefined)return null;const day=+m[2];if(!day||day>31)return null;if(m[3])return new Date(+m[3],month,day);const years=[today.getFullYear()-1,today.getFullYear(),today.getFullYear()+1];// The weekday the staff typed is the strongest signal there is. Across\n// three consecutive years the same month and day always fall on three\n// different weekdays, so \"Wed, Aug 12\" identifies its year outright.\n//\n// This is what keeps the page honest once it is running unattended: an\n// event nobody deleted stays pinned to the year it actually happened and\n// stays hidden, instead of rolling forward into next year's calendar\n// under a weekday that no longer matches.\nconst weekdayToken=raw.match(/^\\s*([A-Za-z]{3,})\\s*,/);const weekday=weekdayToken?WEEKDAYS[weekdayToken[1].slice(0,3).toLowerCase()]:undefined;if(weekday!==undefined){for(const year of years){const candidate=new Date(year,month,day);if(candidate.getDay()===weekday)return candidate;}}// No usable weekday: fall back to the year that sits nearest ahead.\nlet best=null;for(const year of years){const candidate=new Date(year,month,day);const delta=(candidate.getTime()-today.getTime())/DAY_MS;if(delta<-45||delta>300)continue;if(!best||candidate<best)best=candidate;}return best;}/* ------------------------------------------------------------------ *\n * CMS feed\n *\n * Framer does not let a code component read a CMS collection directly, so the\n * bulletin's Collection List holds EventFeedItem instances instead: one per\n * CMS entry, rendering nothing, each filing its fields into a shared store.\n * This grid reads that store and is otherwise unchanged, which is the whole\n * point: the CMS swaps the data, not the page.\n *\n * The store lives on globalThis rather than being imported from\n * EventFeedItem.tsx because Framer pins cross-file imports to a published\n * version, and a stale pin would quietly empty the bulletin.\n * ------------------------------------------------------------------ */// Must match FEED_KEY in EventFeedItem.tsx. See the note there: the suffix is\n// what stops a hot reload from handing this build the previous build's rows.\nconst FEED_KEY=\"__roBulletinFeed3\";function feedStore(){const g=globalThis;if(!g[FEED_KEY]){g[FEED_KEY]={items:new Map,order:[],subs:new Set,snapshot:[],dirty:true};}return g[FEED_KEY];}const EMPTY_FEED=[];function feedSnapshot(){const s=feedStore();if(s.dirty){s.snapshot=s.order.map(k=>s.items.get(k)?.value).filter(Boolean);s.dirty=false;}return s.snapshot.length?s.snapshot:EMPTY_FEED;}function subscribeFeed(fn){const s=feedStore();s.subs.add(fn);return()=>s.subs.delete(fn);}// The third argument is the server snapshot. It is the same reader on purpose:\n// EventFeedItem files during render and the Collection List sits above this\n// grid, so the calendar is already complete on the server pass and hydration\n// matches.\nfunction useFeed(){return React.useSyncExternalStore(subscribeFeed,feedSnapshot,feedSnapshot);}export function groupEvents(list,today,windowDays,hidePast){const soonCutoff=today.getTime()+Math.max(1,windowDays)*DAY_MS;const thisWeek=[];const upcoming=[];const past=[];list.forEach((ev,i)=>{const when=eventDate(ev,today);const entry={ev,i,when};if(!when){// Undated entries are standing announcements, not stale ones.\nupcoming.push(entry);}else if(when.getTime()<today.getTime()){past.push(entry);}else if(when.getTime()<soonCutoff){thisWeek.push(entry);}else{upcoming.push(entry);}});const byDate=(a,b)=>{if(a.when&&b.when)return a.when.getTime()-b.when.getTime();if(a.when)return-1;if(b.when)return 1;return a.i-b.i;};thisWeek.sort(byDate);upcoming.sort(byDate);past.sort((a,b)=>byDate(b,a));const sections=[{key:\"week\",label:\"This Week\",items:thisWeek},{key:\"upcoming\",label:\"Upcoming\",items:upcoming}];if(!hidePast&&past.length){sections.push({key:\"past\",label:\"Recently\",items:past});}return sections;}// Baptism Sunday recurs on the church calendar with identical copy, so the\n// shared text lives here rather than being repeated inline. Each occurrence\n// carries its own artwork, which is dated in the design.\nconst BAPTISM={title:\"Baptism Sunday\",description:\"Go public with your faith. We celebrate life change with stories and baptisms during each service.\",details:\"Baptism is one of the most meaningful steps of faith a follower of Jesus can take. It is a public declaration of the new life we've found in Christ and a celebration of God's transforming work. Join us for Baptism Sunday as we celebrate life change together through stories of faith and baptisms during each service. Whether you're being baptized, supporting someone you love, or simply celebrating with our church family, we would love for you to be part of this special day.\\n\\nThese Sundays are also what we call \\\"open baptism\\\" Sundays, which means you don't have to sign up to be baptized. You can simply come forward while we are baptizing others. We will have sweatpants and a sweatshirt for you to wear home. You won't look stylish, but you will have gone public with your faith in Christ.\",time:\"All three services\",location:\"River Oaks Church\",ctaLabel:\"Sign Up for Baptism\",ctaLink:REGISTER_URL};// Child Dedication also recurs with the same copy.\nconst DEDICATION={title:\"Child Dedication\",description:\"Parents publicly commit to raising their children to know and follow Jesus.\",details:\"River Oaks Church believes that parents are called by God to be the main disciple-makers of their children's lives. Home is the parents' first mission field.\\n\\nChild Dedication is a time for us to acknowledge and celebrate your commitment to lead your child to Christ for His usefulness and service.\",location:\"River Oaks Church\",ctaLabel:\"Register\",ctaLink:REGISTER_URL};// The church calendar, kept in code and mirroring riveroaks.church/bulletin.\n// Component instances snapshot Array property controls at insert time and the\n// MCP cannot rewrite them, so the built-in list below is the default source of\n// truth. Switch the \"Event List\" control to Custom to hand editing back to the\n// Framer panel.\nconst EVENT_DEFAULTS=[{title:\"The Kickoff \\xb7 Student Ministry\",description:\"A free community event for all 6th to 12th graders. Inflatables, food trucks, and worship.\",details:\"The school year is almost here, and we're kicking it off in a BIG way. THE KICKOFF is a free community event for all 6th to 12th grade students, whether they attend our church or not. It's the perfect opportunity to invite friends as we celebrate the start of a new school year together.\\n\\nStudents can look forward to inflatables, food trucks, an incredible performance by Gio., and a powerful night of worship.\\n\\nOur heart is to create a place where every student feels welcomed, builds meaningful friendships, and has the opportunity to encounter Jesus before the busyness of the school year begins. Mark your calendars, invite your friends, and join us.\",date:\"Wed, Aug 12\",time:\"6:00 – 8:30PM\",location:\"River Oaks Church\",imageUrl:art(\"06e62745-b158-4978-baf5-0de00bd67c02-/The-Kickoff-flyer\"),ctaLabel:\"Learn More\",ctaLink:\"https://www.riveroaks.church/event/the-kickoff\"},{title:\"55+ Adults Night\",description:\"Good friends, good food, and a great future. An evening built for the 55+ community.\",details:\"Join us for a fun-filled evening created especially for the 55+ community of River Oaks Church. Whether you've been part of our church family for years or you're joining us for the first time, we'd love to spend the evening with you.\\n\\nHere's what you can look forward to: three interactive games that are easy to play and guaranteed to bring plenty of laughs, delicious snacks and refreshments, and meaningful fellowship. Take time to reconnect with friends, meet new people, and enjoy the 55+ community that makes River Oaks feel like home.\\n\\nHelp shape what's next. As the evening wraps up, we'll spend time looking toward the future of our 55+ group. We'll share our vision for what's ahead, but even more importantly, we want to hear from you. Your ideas, dreams, and feedback will help shape future gatherings, events, and opportunities for this group.\",date:\"Thu, Aug 13\",time:\"6:00 – 8:00PM\",location:\"River Oaks Church\",imageUrl:art(\"1dc54ae5-c274-4a2d-ba96-df982033b968-./55-Vision\"),ctaLabel:\"Register\",ctaLink:\"https://www.riveroaks.church/event/55-vision-night\"},{title:\"Groups Launch\",description:\"A new semester of Groups begins. Find community all around greater Murfreesboro.\",details:\"Jesus didn't walk through life alone, and neither should we. Groups are specifically designed to make big church small and engage in true discipleship: deepening your relationship with Jesus.\\n\\nWe have in-person Groups all around the greater Murfreesboro area for our local community to find a group in their area. We also have Groups that meet at our church location with childcare provided.\\n\\nNo matter where you are in life, there is an opportunity for you to be in community.\",date:\"Sun, Aug 23\",time:\"\",location:\"River Oaks Church\",imageUrl:art(\"33538d0e-309d-4241-b94a-db164d535ed7-./Groups-Launch\"),ctaLabel:\"Find a Group\",ctaLink:\"https://river-oaks-church.churchcenter.com/groups\"},{title:\"Youth Villages: Foster Care \\xb7 Serve Day\",description:\"Spend an afternoon serving the youth at Youth Villages. No special skills needed.\",details:\"Make a difference by simply showing up. Join River Oaks Church as we spend an afternoon serving the incredible youth at Youth Villages. Together we'll enjoy games, share a meal, build meaningful relationships, and encourage these amazing young people with the hope and love of Jesus.\\n\\nYou don't need any special skills, just a willing heart. Your presence, your conversation, and your encouragement can have a lasting impact on a young person's life.\\n\\nWe'll provide lunch and all the activities. You just bring yourself and a heart ready to serve.\\n\\nQuestions? Heather Grasl, Adoption & Foster Support Director, heather@riveroaks.church, (615) 900-0623\",date:\"Sat, Aug 29\",time:\"10:00AM – 2:00PM\",location:\"River Oaks Church\",imageUrl:art(\"4f9a8d1b-8b12-4cda-82c7-00172fb55984-./Youth-Villages\"),ctaLabel:\"Sign Up to Serve\",ctaLink:\"https://www.riveroaks.church/event/foster-care---summer-bash\"},{title:\"Good People \\xb7 Young Adults\",description:\"Young adults 18 to 29. Teaching, worship, food trucks, and good hangs.\",details:\"Good People is a space for young adults ranging in ages 18 to 29 to connect with like-minded people that desire community and good hangs. No matter your background, career, social status, whether you love Jesus or aren't quite sure yet, you are welcome at our table and you are with good people. We can't wait to meet you.\\n\\nTeaching from Pastor Sean Myers, worship, good hangs, and food trucks.\\n\\nFirst Tuesday of every month. Come hungry, come expectant, and come ready to encounter Jesus. Keep an eye on Instagram for updates and theme nights.\",date:\"Tue, Sep 1\",time:\"6:30 – 9:00PM\",location:\"River Oaks Church\",imageUrl:art(\"020ba955-d17b-4ee2-8fe5-5a208cfe7f62-./Good-People\"),ctaLabel:\"Learn More\",ctaLink:\"https://www.riveroaks.church/event/good-people---young-adults\"},{...DEDICATION,date:\"Sun, Sep 13\",time:\"8:00 – 11:00AM\",imageUrl:art(\"775ced95-a805-4c4b-9391-90f64700ce9d-./Child-Dedication\"),ctaLink:\"https://www.riveroaks.church/event/child-dedication\"},{...BAPTISM,date:\"Sun, Sep 20\",imageUrl:art(\"be769fac-e6d0-4c20-a67e-1616d46fb046-./Baptism-Sunday-Sept-20\")},{title:\"Well Done \\xb7 Volunteer Interest & Appreciation\",description:\"You were created to make a difference. Come meet the team and find your place to serve.\",details:\"At River Oaks Church, we believe serving is one of the clearest ways we reflect the heart of Jesus. When we serve others, we live out our faith, build meaningful relationships, and become part of what God is doing in our church, our community, and around the world.\\n\\nWhether you're interested in welcoming guests on Sunday, investing in the next generation, serving our local community, or participating in global missions, there's a place for you to use your gifts and make an eternal impact.\\n\\nIf you are interested in serving in any of our ministries, we invite you to come meet the team. We also want to appreciate our current volunteers, and the security and parking team have to defend their title as the River Oaks Volunteer Champions.\",date:\"Fri, Sep 25\",time:\"6:00 – 7:30PM\",location:\"River Oaks Church\",imageUrl:art(\"a6dc8ce5-350b-4ac5-96a8-c47467c27d52-./Well-Done\"),ctaLabel:\"Register\",ctaLink:\"https://www.riveroaks.church/event/well-done---volunteer-appreciation\"},{title:\"Women's Event: The Fragrance of Gratitude\",description:\"A cozy evening of food, fellowship, and creativity for women of all ages.\",details:\"Grab a friend and join us for a cozy evening of food, fellowship, and creativity. Enjoy a warm chili bar, create two pots (one to keep and one to bless a friend), and be encouraged through a faith-filled message about living as the fragrance of Christ.\\n\\nYou'll also receive a Gratitude Journal to help cultivate thankfulness leading up to Thanksgiving. We'd love to welcome you for this meaningful night of connection, encouragement, and creativity.\\n\\nThis is for women of all ages, including middle school girls and up. Doors open at 5:30PM and the event runs 6:00 to 8:00PM.\",date:\"Fri, Oct 16\",time:\"Doors 5:30PM \\xb7 6:00 – 8:00PM\",location:\"River Oaks Church\",imageUrl:art(\"fd49aff5-9340-4453-ba8a-53afd6559552-./The-Fragrance-of-Gratitude-Women\"),ctaLabel:\"Register\",ctaLink:\"https://www.riveroaks.church/event/womens-event-the-fragrance-of-gratitude\"},{...BAPTISM,date:\"Sun, Oct 18\",imageUrl:art(\"da37e1ee-29f4-435d-88f6-a991df106a6b-./Baptism-Sunday-Oct-18\")},{title:\"Fall Nights\",description:\"Crisp air, good food, live music, and a night of community. Free and open to everyone.\",details:\"Fall Nights is one of our favorite events of the year, and you're invited. Bring your family, invite your neighbors, and gather your friends for a fun-filled evening celebrating everything we love about fall.\\n\\nEnjoy delicious food, live music, exciting fall activities for all ages, and plenty of opportunities to connect with others in our community. Whether you're making memories with your kids, catching up with friends, or meeting someone new, there's something for everyone to enjoy.\\n\\nAt River Oaks Church, we believe life is better together, and Fall Nights is a simple way to slow down, enjoy the season, and build community with the people around you.\\n\\nThis event is free and open to everyone.\",date:\"Sun, Oct 25\",time:\"5:30 – 8:30PM\",location:\"River Oaks Church\",imageUrl:art(\"000c8ce5-c245-41d2-adc5-48c3849de1f2-./Fall-Nights\"),ctaLabel:\"Learn More\",ctaLink:\"https://www.riveroaks.church/event/fall-nights\"},{...DEDICATION,date:\"Sun, Nov 22\",time:\"8:00AM\",imageUrl:art(\"80b32f89-2bc4-4a39-895f-6b1bffe330e8-./Child-Dedication-Nov-22\"),ctaLink:\"https://www.riveroaks.church/event/child-dedication-2\"},{title:\"Night of Hymns \\xb7 Worship Night\",description:\"An evening of hymns, communion, and worship led by Temitope. Childcare provided.\",details:\"Join us for a meaningful Night of Hymns led by our worship leader, Temitope, as we gather together to worship.\\n\\nWe'll sing a beautiful blend of Christmas carols, classic hymns that have shaped generations of faith, alongside modern hymns that are giving voice to the church today. Between songs, we'll have space to slow down, reflect on God's faithfulness, and remember the story He is writing in our lives.\\n\\nWe'll also share Communion together, remembering the sacrifice of Jesus and celebrating the hope we have because of Him.\\n\\nWhether you've grown up singing hymns or you're hearing some of these songs for the first time, this will be a night to step away from the noise, lift your voice, remember what is true, and worship Jesus together. Childcare will be provided.\",date:\"Thu, Dec 3\",time:\"6:00 – 8:00PM\",location:\"River Oaks Church\",imageUrl:art(\"23809d30-31c6-4666-8dbb-4f8adb16930e-./Night-of-Hymns\"),ctaLabel:\"Register\",ctaLink:\"https://www.riveroaks.church/event/night-of-hymns-worship-night\"},{...BAPTISM,date:\"Sun, Dec 6\",imageUrl:art(\"6757728e-7d1f-4a0b-9248-dd021885b596-./Baptism-Sunday-Dec-6\")}];/**\n * Event card grid. Cards link straight to registration, or open a\n * center-screen modal when extra details or a recap video are provided.\n * Registration buttons only render when a CTA link is set, so informational\n * events, community gatherings, and recap posts work without one.\n *\n * With \"Group By Date\" on, the calendar splits itself into This Week and\n * Upcoming and drops anything that has already happened. That is what makes\n * the Weekly Bulletin the single events destination: the page re-sorts every\n * midnight on its own, and staff only ever add events, never prune them.\n *\n * Every card shares one internal grid: a 2:1 media box, then the title, then\n * the body, then the CTA pinned to the bottom edge. Title heights are\n * equalised per row at runtime so the body copy in a row starts on the same\n * line whether a title wraps to one line or three, which is what stops the\n * CTAs from drifting up and down the grid.\n *\n * Artwork that is not 2:1 is letterboxed rather than cropped: these are\n * designed flyers, and slicing the top off one to fill the box loses the\n * subject and half the type.\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 1200\n */export default function EventsGrid(props){const{events=[],source=\"Built-in\",grouped=true,windowDays=7,hidePast=true,emptyWeekNote=\"Nothing else on the calendar this week. Here is what is coming up.\",accent,style}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const[selected,setSelected]=React.useState(null);const gridRef=React.useRef(null);const feed=useFeed();// CMS mode with nothing filed yet means the Collection List has not been\n// added, or sits below this grid in the tree. Falling back to the built-in\n// calendar keeps the page from going blank while that is sorted out.\nconst cmsReady=source===\"CMS\"&&feed.length>0;const list=source===\"Custom\"?events:cmsReady?feed:EVENT_DEFAULTS;// Recomputed once per mount, and again whenever the day rolls over while\n// a tab is left open overnight.\nconst[today,setToday]=React.useState(churchToday);React.useEffect(()=>{if(typeof window===\"undefined\")return;const tick=window.setInterval(()=>{const now=churchToday();setToday(prev=>prev.getTime()===now.getTime()?prev:now);},60*60*1e3);return()=>window.clearInterval(tick);},[]);const sections=React.useMemo(()=>{if(!grouped){return[{key:\"all\",label:\"\",items:list.map((ev,i)=>({ev,i}))}];}// On the canvas, hiding past events would hide most of the calendar\n// from whoever is editing it, so nothing is dropped there.\nreturn groupEvents(list,today,windowDays,isCanvas?false:hidePast);},[list,today,grouped,windowDays,hidePast,isCanvas]);const visible=sections.filter(s=>s.items.length>0);// Per-row title equalisation. Cards are grouped by their offsetTop, so a\n// three-across desktop grid lines up row by row and a single-column phone\n// layout reserves nothing at all.\nReact.useLayoutEffect(()=>{if(typeof window===\"undefined\")return;let frame=0;const measure=()=>{frame=0;const root=gridRef.current;if(!root)return;const titles=Array.from(root.querySelectorAll(\"[data-ro-ev-title]\"));titles.forEach(t=>t.style.minHeight=\"\");const rows=new Map;titles.forEach(t=>{const top=Math.round(t.getBoundingClientRect().top);const key=[...rows.keys()].find(k=>Math.abs(k-top)<4)??top;rows.set(key,[...rows.get(key)||[],t]);});rows.forEach(group=>{if(group.length<2)return;const tallest=Math.max(...group.map(t=>t.offsetHeight));group.forEach(t=>t.style.minHeight=`${tallest}px`);});};const schedule=()=>{if(!frame)frame=window.requestAnimationFrame(measure);};schedule();window.addEventListener(\"resize\",schedule);const ro=\"ResizeObserver\"in window?new ResizeObserver(schedule):null;if(ro&&gridRef.current)ro.observe(gridRef.current);const fonts=document.fonts;if(fonts?.ready?.then)fonts.ready.then(schedule).catch(()=>{});return()=>{if(frame)window.cancelAnimationFrame(frame);window.removeEventListener(\"resize\",schedule);ro?.disconnect();};},[sections]);React.useEffect(()=>{if(typeof document===\"undefined\")return;document.body.style.overflow=selected?\"hidden\":\"\";const onKey=e=>{if(e.key===\"Escape\")setSelected(null);};document.addEventListener(\"keydown\",onKey);return()=>{document.body.style.overflow=\"\";document.removeEventListener(\"keydown\",onKey);};},[selected]);const open=ev=>{if(isCanvas)return;if(ev.details||ev.videoUrl){setSelected(ev);}else if(typeof window!==\"undefined\"&&ev.ctaLink){window.open(ev.ctaLink,\"_blank\",\"noopener\");}};const imageOf=ev=>ev.imageUrl||ev.image?.src||\"\";// A flyer authored at a different ratio to the media box is shown whole.\nconst fitToBox=(e,boxRatio)=>{const img=e.currentTarget;if(!img.naturalWidth||!img.naturalHeight)return;const ratio=img.naturalWidth/img.naturalHeight;if(Math.abs(ratio-boxRatio)/boxRatio>.12){img.style.objectFit=\"contain\";}};const selectedVideoId=selected?parseYouTubeId(selected.videoUrl||\"\"):null;const selectedVideoFile=selected&&selected.videoUrl&&!selectedVideoId?selected.videoUrl.trim():null;const card=(ev,key)=>/*#__PURE__*/_jsxs(motion.button,{onClick:()=>open(ev),whileHover:{y:-6},transition:{duration:.25},style:{textAlign:\"left\",border:\"1px solid rgba(0,0,0,0.09)\",background:\"#ffffff\",borderRadius:22,overflow:\"hidden\",cursor:\"pointer\",padding:0,display:\"flex\",flexDirection:\"column\",height:\"100%\",boxShadow:\"0 2px 12px rgba(0,0,0,0.05)\"},children:[/*#__PURE__*/_jsxs(\"div\",{style:{aspectRatio:\"2 / 1\",background:PLACEHOLDER,position:\"relative\",flex:\"0 0 auto\"},children:[imageOf(ev)?/*#__PURE__*/_jsx(\"img\",{src:imageOf(ev),alt:ev.title,loading:\"lazy\",decoding:\"async\",onLoad:e=>fitToBox(e,2),style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",objectFit:\"cover\"}}):null,ev.videoUrl?/*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":true,style:{position:\"absolute\",top:\"50%\",left:\"50%\",transform:\"translate(-50%, -50%)\",width:54,height:54,borderRadius:999,background:\"rgba(255,255,255,0.92)\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",boxShadow:\"0 6px 22px rgba(0,0,0,0.3)\"},children:/*#__PURE__*/_jsx(\"span\",{style:{width:0,height:0,borderTop:\"9px solid transparent\",borderBottom:\"9px solid transparent\",borderLeft:\"15px solid #000000\",marginLeft:4}})}):null,ev.date?/*#__PURE__*/_jsx(\"span\",{style:{position:\"absolute\",top:14,left:14,padding:\"7px 14px\",borderRadius:999,background:\"rgba(255,255,255,0.94)\",color:\"#000\",fontFamily:HEAD_FONT,fontWeight:700,fontSize:12.5},children:ev.date}):null]}),/*#__PURE__*/_jsxs(\"div\",{style:{padding:22,display:\"flex\",flexDirection:\"column\",flex:\"1 1 auto\"},children:[/*#__PURE__*/_jsx(\"span\",{\"data-ro-ev-title\":\"\",style:{display:\"block\",fontFamily:HEAD_FONT,fontWeight:700,fontSize:19,lineHeight:1.2,color:\"#000\",marginBottom:10},children:ev.title}),ev.time?/*#__PURE__*/_jsx(\"span\",{style:{fontFamily:HEAD_FONT,fontWeight:600,fontSize:12.5,letterSpacing:\"0.1em\",textTransform:\"uppercase\",color:accent,marginBottom:10},children:ev.time}):null,/*#__PURE__*/_jsx(\"span\",{style:{fontFamily:BODY_FONT,fontSize:14.5,lineHeight:1.5,color:\"#444\",flex:\"1 1 auto\"},children:ev.description}),/*#__PURE__*/_jsxs(\"span\",{style:{marginTop:18,fontFamily:HEAD_FONT,fontWeight:700,fontSize:14,color:accent},children:[ev.ctaLabel||(ev.videoUrl?\"Watch\":\"Learn More\"),\" →\"]})]})]},key);const modal=selected&&typeof document!==\"undefined\"?/*#__PURE__*/createPortal(/*#__PURE__*/_jsx(AnimatePresence,{children:/*#__PURE__*/_jsx(motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},onClick:()=>setSelected(null),style:{position:\"fixed\",inset:0,zIndex:9999,background:\"rgba(0,0,0,0.6)\",backdropFilter:\"blur(6px)\",WebkitBackdropFilter:\"blur(6px)\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",padding:\"min(4vw, 32px)\"},children:/*#__PURE__*/_jsxs(motion.div,{role:\"dialog\",\"aria-modal\":\"true\",\"aria-label\":selected.title,initial:{opacity:0,y:28,scale:.97},animate:{opacity:1,y:0,scale:1},exit:{opacity:0,y:20,scale:.97},transition:{duration:.28,ease:[.22,1,.36,1]},onClick:e=>e.stopPropagation(),style:{width:\"min(600px, 100%)\",maxHeight:\"90vh\",background:\"#ffffff\",borderRadius:24,overflow:\"hidden\",display:\"flex\",flexDirection:\"column\",position:\"relative\"},children:[/*#__PURE__*/_jsx(\"button\",{\"aria-label\":\"Close\",onClick:()=>setSelected(null),style:{position:\"absolute\",top:14,right:14,zIndex:2,width:42,height:42,borderRadius:999,border:\"none\",background:\"rgba(0,0,0,0.55)\",color:\"#ffffff\",fontSize:17,cursor:\"pointer\"},children:\"✕\"}),selectedVideoId?/*#__PURE__*/_jsx(\"div\",{style:{aspectRatio:\"16 / 9\",background:\"#000000\",flexShrink:0},children:/*#__PURE__*/_jsx(\"iframe\",{src:`https://www.youtube-nocookie.com/embed/${selectedVideoId}?rel=0&playsinline=1`,title:selected.title,allow:\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\",allowFullScreen:true,style:{width:\"100%\",height:\"100%\",border:\"none\",display:\"block\"}})}):selectedVideoFile?/*#__PURE__*/_jsx(\"div\",{style:{aspectRatio:\"16 / 9\",background:\"#000000\",flexShrink:0},children:/*#__PURE__*/_jsx(\"video\",{src:selectedVideoFile,controls:true,playsInline:true,style:{width:\"100%\",height:\"100%\",display:\"block\",objectFit:\"contain\"}})}):imageOf(selected)?/*#__PURE__*/_jsx(\"div\",{style:{aspectRatio:\"2 / 1\",background:PLACEHOLDER,position:\"relative\",flexShrink:0},children:/*#__PURE__*/_jsx(\"img\",{src:imageOf(selected),alt:selected.title,onLoad:e=>fitToBox(e,2),style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",objectFit:\"cover\"}})}):null,/*#__PURE__*/_jsxs(\"div\",{style:{padding:\"clamp(24px, 4vw, 38px)\",overflowY:\"auto\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{fontFamily:HEAD_FONT,fontWeight:600,fontSize:13,letterSpacing:\"0.12em\",textTransform:\"uppercase\",color:accent,marginBottom:10},children:[selected.date,selected.time].filter(Boolean).join(\" \\xb7 \")}),/*#__PURE__*/_jsx(\"h3\",{style:{margin:0,fontFamily:HEAD_FONT,fontWeight:700,fontSize:\"clamp(24px, 3vw, 30px)\",lineHeight:1.15,color:\"#000\"},children:selected.title}),selected.location?/*#__PURE__*/_jsx(\"div\",{style:{fontFamily:BODY_FONT,fontSize:14,color:\"#555\",marginTop:8},children:selected.location}):null,/*#__PURE__*/_jsx(\"p\",{style:{fontFamily:BODY_FONT,fontSize:16,lineHeight:1.6,color:\"#333\",margin:\"16px 0 26px\",whiteSpace:\"pre-wrap\"},children:selected.details||selected.description}),selected.ctaLink?/*#__PURE__*/_jsx(\"a\",{href:selected.ctaLink,target:\"_blank\",rel:\"noopener noreferrer\",style:{display:\"block\",textAlign:\"center\",padding:\"16px\",borderRadius:999,background:accent,color:\"#ffffff\",fontFamily:HEAD_FONT,fontWeight:700,fontSize:16,textDecoration:\"none\"},children:selected.ctaLabel||\"Register\"}):null]})]})})}),document.body):null;const gridStyle={width:\"100%\",display:\"grid\",gridTemplateColumns:\"repeat(auto-fill, minmax(min(290px, 100%), 1fr))\",gap:22,alignItems:\"stretch\"};// Ungrouped keeps the original single-grid markup exactly as it was, so\n// every other page that uses this component is untouched.\nif(!grouped){return /*#__PURE__*/_jsxs(\"div\",{ref:gridRef,style:{...gridStyle,...style},children:[list.map((ev,i)=>card(ev,i)),modal]});}const weekEmpty=!visible.some(s=>s.key===\"week\");return /*#__PURE__*/_jsxs(\"div\",{ref:gridRef,style:{width:\"100%\",display:\"flex\",flexDirection:\"column\",gap:48,...style},children:[visible.length===0?/*#__PURE__*/_jsx(\"p\",{style:{fontFamily:BODY_FONT,fontSize:16,lineHeight:1.6,color:\"#555\",margin:0,textAlign:\"center\"},children:\"The calendar is being updated. Check back soon, or join us Sunday at 8, 9:30 and 11AM.\"}):null,visible.map(section=>/*#__PURE__*/_jsxs(\"section\",{style:{width:\"100%\"},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:16,marginBottom:22},children:[/*#__PURE__*/_jsx(\"h3\",{style:{margin:0,fontFamily:HEAD_FONT,fontWeight:700,fontSize:26,lineHeight:1.15,letterSpacing:\"-0.01em\",color:\"#000000\",flex:\"0 0 auto\"},children:section.label}),/*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":true,style:{flex:\"1 1 auto\",height:2,borderRadius:2,background:`linear-gradient(90deg, ${accent}, rgba(0,0,0,0))`}})]}),section.key===\"upcoming\"&&weekEmpty&&emptyWeekNote?/*#__PURE__*/_jsx(\"p\",{style:{fontFamily:BODY_FONT,fontSize:15.5,lineHeight:1.6,color:\"#555555\",margin:\"-8px 0 22px 0\"},children:emptyWeekNote}):null,/*#__PURE__*/_jsx(\"div\",{style:gridStyle,children:section.items.map(entry=>card(entry.ev,entry.i))})]},section.key)),modal]});}addPropertyControls(EventsGrid,{source:{type:ControlType.Enum,title:\"Event List\",options:[\"Built-in\",\"CMS\",\"Custom\"],optionTitles:[\"Built-in\",\"CMS Collection\",\"Custom\"],defaultValue:\"Built-in\",description:\"CMS reads the Bulletin Events collection through the hidden list above this grid. Built-in uses the calendar in code, Custom uses the Events list below.\"},grouped:{type:ControlType.Boolean,title:\"Group By Date\",defaultValue:true,description:\"Splits the calendar into This Week and Upcoming\"},windowDays:{type:ControlType.Number,title:\"This Week Is\",defaultValue:7,min:1,max:60,step:1,displayStepper:true,unit:\" days\",hidden:p=>!p.grouped},hidePast:{type:ControlType.Boolean,title:\"Hide Past\",defaultValue:true,description:\"Events that have already happened drop off on their own\",hidden:p=>!p.grouped},emptyWeekNote:{type:ControlType.String,title:\"Quiet Week Note\",defaultValue:\"Nothing else on the calendar this week. Here is what is coming up.\",description:\"Shown when nothing falls inside the This Week window\",hidden:p=>!p.grouped},events:{type:ControlType.Array,title:\"Events\",hidden:p=>p.source!==\"Custom\",control:{type:ControlType.Object,controls:{title:{type:ControlType.String,defaultValue:\"New Event\"},description:{type:ControlType.String,defaultValue:\"\"},details:{type:ControlType.String,displayTextArea:true,defaultValue:\"\",description:\"If set, card opens a modal with this text\"},date:{type:ControlType.String,defaultValue:\"\",description:\"Shown on the card, e.g. Sun, Aug 23. The year is worked out for you.\"},isoDate:{type:ControlType.String,title:\"ISO Date\",defaultValue:\"\",description:\"Only needed for events over a year out. Format 2027-01-04.\"},time:{type:ControlType.String,defaultValue:\"\"},location:{type:ControlType.String,defaultValue:\"\"},image:{type:ControlType.ResponsiveImage},imageUrl:{type:ControlType.String,title:\"Image URL\",defaultValue:\"\",description:\"Used when no Image is picked. Artwork works best at 2:1.\"},videoUrl:{type:ControlType.String,title:\"Video URL\",defaultValue:\"\",description:\"YouTube link or mp4. Plays inside the modal (recaps, reels)\"},ctaLabel:{type:ControlType.String,defaultValue:\"Register\"},ctaLink:{type:ControlType.String,title:\"CTA Link\",defaultValue:\"\",description:\"Leave empty to hide the button (informational events)\"}}},defaultValue:EVENT_DEFAULTS},accent:{type:ControlType.Color,title:\"Accent\",defaultValue:\"#4d9ee9\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"groupEvents\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"EventsGrid\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"1200\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./EventsGrid.map"],"mappings":"+SASA,SAAS,EAAe,EAAI,CAAC,GAAG,CAAC,EAAI,OAAO,KAAK,IAAM,EAAQ,EAAI,KAAK,EAAE,GAAG,cAAc,KAAK,CAAO,EAAE,OAAO,EAAQ,IAAM,EAAE,EAAQ,MAAM,sGAAsG,EAAE,OAAO,EAAE,EAAE,GAAG,IAAK,CAazQ,SAAS,GAAa,CAAC,IAAM,EAAI,IAAI,KAAK,GAAG,CAAoI,GAAK,CAAC,EAAE,EAAE,GAAjI,IAAI,KAAK,eAAe,QAAQ,CAAC,SAAS,kBAAkB,KAAK,UAAU,MAAM,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAsB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,OAAO,IAAI,KAAK,EAAE,EAAE,EAAE,CAAC,CAAE,MAAM,CACrQ,CAAC,OAAO,IAAI,KAAK,EAAI,YAAY,EAAE,EAAI,SAAS,EAAE,EAAI,QAAQ,CAAC,CAAE,CAAC,SAAS,EAAU,EAAG,EAAM,CAAoC,IAAM,GAA9B,GAAI,SAAS,GAAA,CAAI,KAAwB,CAAC,CAAC,MAAM,8BAA8B,EAAE,GAAG,EAAU,OAAO,IAAI,KAAK,CAAC,EAAS,GAAI,EAAS,GAAG,EAAE,CAAC,EAAS,EAAE,EAAG,IAAM,GAAK,GAAI,MAAM,GAAA,CAAI,KAAK,EAAE,GAAG,CAAC,EAAI,OAAO,KAGlT,IAAM,EAAE,EAAI,MAAM,mDAAmD,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,IAAM,EAAM,EAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,GAAG,IAAQ,IAAA,GAAU,OAAO,KAAK,IAAM,EAAI,CAAC,EAAE,GAAG,GAAG,CAAC,GAAK,EAAI,GAAG,OAAO,KAAK,GAAG,EAAE,GAAG,OAAO,IAAI,KAAK,CAAC,EAAE,GAAG,EAAM,CAAG,EAAE,IAAM,EAAM,CAAC,EAAM,YAAY,EAAE,EAAE,EAAM,YAAY,EAAE,EAAM,YAAY,EAAE,CAAC,EAQvU,EAAa,EAAI,MAAM,wBAAwB,EAAQ,EAAQ,EAAa,EAAS,EAAa,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,IAAA,GAAU,GAAG,IAAU,IAAA,GAAW,IAAI,IAAM,KAAQ,EAAM,CAAC,IAAM,EAAU,IAAI,KAAK,EAAK,EAAM,CAAG,EAAE,GAAG,EAAU,OAAO,IAAI,EAAQ,OAAO,CAAU,CAC1R,IAAI,EAAK,KAAK,IAAI,IAAM,KAAQ,EAAM,CAAC,IAAM,EAAU,IAAI,KAAK,EAAK,EAAM,CAAG,EAAQ,GAAO,EAAU,QAAQ,EAAE,EAAM,QAAQ,GAAG,EAAU,EAAM,KAAK,EAAM,MAAgB,CAAC,GAAM,EAAU,KAAK,EAAK,EAAU,CAAC,OAAO,CAAK,CAc5L,SAAS,GAAW,CAAC,IAAM,EAAE,WAAsG,OAAvF,EAAE,KAAW,EAAE,GAAU,CAAC,MAAM,IAAI,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI,SAAS,CAAC,EAAE,MAAM,EAAI,GAAU,EAAE,EAAU,CAAqB,SAAS,GAAc,CAAC,IAAM,EAAE,EAAU,EAA8F,MAA5F,CAA6E,EAAE,SAAnE,EAAE,SAAS,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,OAAO,EAAU,IAAc,EAAE,SAAS,OAAO,EAAE,SAAS,CAAW,CAAC,SAAS,EAAc,EAAG,CAAC,IAAM,EAAE,EAAU,EAAiB,OAAf,EAAE,KAAK,IAAI,CAAE,MAAY,EAAE,KAAK,OAAO,CAAE,CAAE,CAIhe,SAAS,GAAS,CAAC,OAAOA,EAA2B,EAAc,EAAa,CAAY,CAAE,CAAC,SAAgB,EAAY,EAAK,EAAM,EAAW,EAAS,CAAC,IAAM,EAAW,EAAM,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAU,EAAE,EAAa,EAAS,CAAC,EAAQ,EAAS,CAAC,EAAQ,EAAK,CAAC,EAAE,EAAK,SAAS,EAAG,IAAI,CAAC,IAAM,EAAK,EAAU,EAAG,CAAK,EAAQ,EAAM,CAAC,KAAG,IAAE,MAAI,EAAM,EAC/T,EAAK,QAAQ,EAAE,EAAM,QAAQ,EAAG,EAAK,KAAK,CAAK,EAAW,EAAK,QAAQ,EAAE,EAAY,EAAS,KAAK,CAAK,EAAQ,EAAS,KAAK,CAAK,EAAjK,EAAS,KAAK,CAAK,CAAiJ,CAAC,EAAE,IAAM,GAAQ,EAAE,IAAQ,EAAE,MAAM,EAAE,KAAY,EAAE,KAAK,QAAQ,EAAE,EAAE,KAAK,QAAQ,EAAK,EAAE,KAAW,GAAM,EAAE,KAAY,EAAS,EAAE,EAAE,EAAE,EAAI,EAAS,KAAK,CAAM,EAAE,EAAS,KAAK,CAAM,EAAE,EAAK,MAAM,EAAE,IAAI,EAAO,EAAE,CAAC,CAAC,EAAE,IAAM,EAAS,CAAC,CAAC,IAAI,OAAO,MAAM,YAAY,MAAM,CAAQ,EAAE,CAAC,IAAI,WAAW,MAAM,WAAW,MAAM,CAAQ,CAAC,EAAsF,MAAjF,CAAC,GAAU,EAAK,QAAQ,EAAS,KAAK,CAAC,IAAI,OAAO,MAAM,WAAW,MAAM,CAAI,CAAC,EAAU,CAAS,CAiCzkB,SAAwB,EAAW,EAAM,CAAC,GAAK,CAAC,SAAO,CAAC,EAAE,SAAO,WAAW,UAAQ,GAAK,aAAW,EAAE,WAAS,GAAK,gBAAc,qEAAqE,SAAO,SAAO,EAAY,EAAS,EAAa,QAAQ,IAAI,EAAa,OAAY,CAAC,EAAS,GAAaC,EAAe,IAAI,EAAQ,EAAQC,EAAa,IAAI,EAAQ,EAAK,EAAQ,EAGzX,EAAS,IAAS,OAAO,EAAK,OAAO,EAAQ,EAAK,IAAS,SAAS,EAAO,EAAS,EAAK,EAE1F,CAAC,EAAM,GAAUD,EAAe,CAAW,EAAE,MAAoB,CAAC,GAAU,IAAS,OAAY,OAAO,IAAM,EAAK,EAAO,gBAAgB,CAAC,IAAM,EAAI,EAAY,EAAE,EAAS,GAAM,EAAK,QAAQ,IAAI,EAAI,QAAQ,EAAE,EAAK,CAAG,CAAE,EAAE,KAAM,GAAG,EAAE,UAAU,EAAO,cAAc,CAAI,CAAE,EAAE,CAAC,CAAC,EAAE,IAAM,EAASE,MAAuB,EAEvT,EAAY,EAAK,EAAM,EAAW,IAAe,CAAQ,EAF6Q,CAAC,CAAC,IAAI,MAAM,MAAM,GAAG,MAAM,EAAK,KAAK,EAAG,KAAK,CAAC,KAAG,GAAC,EAAE,CAAC,CAAC,EAE/T,CAAC,EAAK,EAAM,EAAQ,EAAW,EAAS,CAAQ,CAAC,EAAQ,EAAQ,EAAS,OAAO,GAAG,EAAE,MAAM,OAAO,CAAC,EAGxK,MAA0B,CAAC,GAAU,IAAS,OAAY,OAAO,IAAI,EAAM,EAAQ,MAAY,CAAC,EAAM,EAAE,IAAM,EAAK,EAAQ,QAAQ,GAAG,CAAC,EAAK,OAAO,IAAM,EAAO,MAAM,KAAK,EAAK,iBAAiB,oBAAoB,CAAC,EAAE,EAAO,QAAQ,GAAG,EAAE,MAAM,UAAU,EAAE,EAAE,IAAM,EAAK,IAAI,IAAI,EAAO,QAAQ,GAAG,CAAC,IAAM,EAAI,KAAK,MAAM,EAAE,sBAAsB,CAAC,CAAC,GAAG,EAAQ,EAAI,CAAC,GAAG,EAAK,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,CAAG,EAAE,CAAC,GAAG,EAAI,EAAK,IAAI,EAAI,CAAC,GAAG,EAAK,IAAI,CAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,EAAE,EAAK,QAAQ,GAAO,CAAC,GAAG,EAAM,OAAO,EAAE,OAAO,IAAM,EAAQ,KAAK,IAAI,GAAG,EAAM,IAAI,GAAG,EAAE,YAAY,CAAC,EAAE,EAAM,QAAQ,GAAG,EAAE,MAAM,UAAU,GAAG,EAAQ,GAAG,CAAE,CAAC,CAAE,EAAQ,MAAa,CAAC,AAAU,IAAM,EAAO,sBAAsB,CAAO,CAAE,EAAE,EAAS,EAAE,EAAO,iBAAiB,SAAS,CAAQ,EAAE,IAAM,EAAG,mBAAmB,EAAO,IAAI,eAAe,CAAQ,EAAE,KAAQ,GAAI,EAAQ,SAAQ,EAAG,QAAQ,EAAQ,OAAO,EAAE,IAAM,EAAM,SAAS,MAAqE,OAA5D,GAAO,OAAO,MAAK,EAAM,MAAM,KAAK,CAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,MAAY,CAAI,GAAM,EAAO,qBAAqB,CAAK,EAAE,EAAO,oBAAoB,SAAS,CAAQ,EAAE,GAAI,WAAW,CAAE,CAAE,EAAE,CAAC,CAAQ,CAAC,EAAE,MAAoB,CAAC,GAAG,OAAO,SAAW,IAAY,OAAO,SAAS,KAAK,MAAM,SAAS,EAAS,SAAS,GAAG,IAAM,EAAM,GAAG,CAAI,EAAE,MAAM,UAAS,EAAY,IAAI,CAAE,EAA6C,OAA3C,SAAS,iBAAiB,UAAU,CAAK,MAAY,CAAC,SAAS,KAAK,MAAM,SAAS,GAAG,SAAS,oBAAoB,UAAU,CAAK,CAAE,CAAE,EAAE,CAAC,CAAQ,CAAC,EAAE,IAAM,EAAK,GAAI,CAAI,IAAmB,EAAG,SAAS,EAAG,SAAU,EAAY,CAAE,EAAkB,IAAS,QAAa,EAAG,SAAS,EAAO,KAAK,EAAG,QAAQ,SAAS,UAAU,EAAG,EAAQ,EAAQ,GAAI,EAAG,UAAU,EAAG,OAAO,KAAK,GAC1kD,GAAU,EAAE,IAAW,CAAC,IAAM,EAAI,EAAE,cAAc,GAAG,CAAC,EAAI,cAAc,CAAC,EAAI,cAAc,OAAO,IAAM,EAAM,EAAI,aAAa,EAAI,cAAiB,KAAK,IAAI,EAAM,CAAQ,EAAE,EAAS,MAAK,EAAI,MAAM,UAAU,UAAW,EAAQ,EAAgB,EAAS,EAAe,EAAS,UAAU,EAAE,EAAE,KAAW,EAAkB,GAAU,EAAS,UAAU,CAAC,EAAgB,EAAS,SAAS,KAAK,EAAE,KAAW,GAAM,EAAG,IAAmB,EAAM,EAAO,OAAO,CAAC,YAAY,EAAK,CAAE,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,SAAS,GAAG,EAAE,MAAM,CAAC,UAAU,OAAO,OAAO,6BAA6B,WAAW,UAAU,aAAa,GAAG,SAAS,SAAS,OAAO,UAAU,QAAQ,EAAE,QAAQ,OAAO,cAAc,SAAS,OAAO,OAAO,UAAU,6BAA6B,EAAE,SAAS,CAAc,EAAM,MAAM,CAAC,MAAM,CAAC,YAAY,QAAQ,WAAW,EAAY,SAAS,WAAW,KAAK,UAAU,EAAE,SAAS,CAAC,EAAQ,CAAE,EAAe,EAAK,MAAM,CAAC,IAAI,EAAQ,CAAE,EAAE,IAAI,EAAG,MAAM,QAAQ,OAAO,SAAS,QAAQ,OAAO,GAAG,EAAS,EAAE,CAAC,EAAE,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,MAAM,OAAO,OAAO,OAAO,UAAU,OAAO,CAAC,CAAC,EAAE,KAAK,EAAG,SAAsB,EAAK,OAAO,CAAC,cAAc,GAAK,MAAM,CAAC,SAAS,WAAW,IAAI,MAAM,KAAK,MAAM,UAAU,wBAAwB,MAAM,GAAG,OAAO,GAAG,aAAa,IAAI,WAAW,yBAAyB,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,UAAU,4BAA4B,EAAE,SAAsB,EAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,wBAAwB,aAAa,wBAAwB,WAAW,qBAAqB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAG,KAAkB,EAAK,OAAO,CAAC,MAAM,CAAC,SAAS,WAAW,IAAI,GAAG,KAAK,GAAG,QAAQ,WAAW,aAAa,IAAI,WAAW,yBAAyB,MAAM,OAAO,WAAW,EAAU,WAAW,IAAI,SAAS,IAAI,EAAE,SAAS,EAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAe,EAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,OAAO,cAAc,SAAS,KAAK,UAAU,EAAE,SAAS,CAAc,EAAK,OAAO,CAAC,mBAAmB,GAAG,MAAM,CAAC,QAAQ,QAAQ,WAAW,EAAU,WAAW,IAAI,SAAS,GAAG,WAAW,IAAI,MAAM,OAAO,aAAa,EAAE,EAAE,SAAS,EAAG,KAAK,CAAC,EAAE,EAAG,KAAkB,EAAK,OAAO,CAAC,MAAM,CAAC,WAAW,EAAU,WAAW,IAAI,SAAS,KAAK,cAAc,QAAQ,cAAc,YAAY,MAAM,EAAO,aAAa,EAAE,EAAE,SAAS,EAAG,IAAI,CAAC,EAAE,KAAkB,EAAK,OAAO,CAAC,MAAM,CAAC,WAAW,EAAU,SAAS,KAAK,WAAW,IAAI,MAAM,OAAO,KAAK,UAAU,EAAE,SAAS,EAAG,WAAW,CAAC,EAAe,EAAM,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,WAAW,EAAU,WAAW,IAAI,SAAS,GAAG,MAAM,CAAM,EAAE,SAAS,CAAC,EAAG,WAAW,EAAG,SAAS,QAAQ,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAG,EAAQ,EAAM,GAAU,OAAO,SAAW,IAAyB,EAA0B,EAAK,EAAgB,CAAC,SAAsB,EAAK,EAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAY,IAAI,EAAE,MAAM,CAAC,SAAS,QAAQ,MAAM,EAAE,OAAO,KAAK,WAAW,kBAAkB,eAAe,YAAY,qBAAqB,YAAY,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,QAAQ,gBAAgB,EAAE,SAAsB,EAAM,EAAO,IAAI,CAAC,KAAK,SAAS,aAAa,OAAO,aAAa,EAAS,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,GAAG,MAAM,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,MAAM,GAAG,EAAE,WAAW,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC,MAAM,mBAAmB,UAAU,OAAO,WAAW,UAAU,aAAa,GAAG,SAAS,SAAS,QAAQ,OAAO,cAAc,SAAS,SAAS,UAAU,EAAE,SAAS,CAAc,EAAK,SAAS,CAAC,aAAa,QAAQ,YAAY,EAAY,IAAI,EAAE,MAAM,CAAC,SAAS,WAAW,IAAI,GAAG,MAAM,GAAG,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,IAAI,OAAO,OAAO,WAAW,mBAAmB,MAAM,UAAU,SAAS,GAAG,OAAO,SAAS,EAAE,SAAS,GAAG,CAAC,EAAE,EAA6B,EAAK,MAAM,CAAC,MAAM,CAAC,YAAY,SAAS,WAAW,UAAU,WAAW,CAAC,EAAE,SAAsB,EAAK,SAAS,CAAC,IAAI,0CAA0C,EAAgB,sBAAsB,MAAM,EAAS,MAAM,MAAM,2FAA2F,gBAAgB,GAAK,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAA+B,EAAK,MAAM,CAAC,MAAM,CAAC,YAAY,SAAS,WAAW,UAAU,WAAW,CAAC,EAAE,SAAsB,EAAK,QAAQ,CAAC,IAAI,EAAkB,SAAS,GAAK,YAAY,GAAK,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,QAAQ,QAAQ,UAAU,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAQ,CAAQ,EAAe,EAAK,MAAM,CAAC,MAAM,CAAC,YAAY,QAAQ,WAAW,EAAY,SAAS,WAAW,WAAW,CAAC,EAAE,SAAsB,EAAK,MAAM,CAAC,IAAI,EAAQ,CAAQ,EAAE,IAAI,EAAS,MAAM,OAAO,GAAG,EAAS,EAAE,CAAC,EAAE,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,MAAM,OAAO,OAAO,OAAO,UAAU,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAkB,EAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,yBAAyB,UAAU,MAAM,EAAE,SAAS,CAAc,EAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAU,WAAW,IAAI,SAAS,GAAG,cAAc,SAAS,cAAc,YAAY,MAAM,EAAO,aAAa,EAAE,EAAE,SAAS,CAAC,EAAS,KAAK,EAAS,IAAI,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,KAAQ,CAAC,CAAC,EAAe,EAAK,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAU,WAAW,IAAI,SAAS,yBAAyB,WAAW,KAAK,MAAM,MAAM,EAAE,SAAS,EAAS,KAAK,CAAC,EAAE,EAAS,SAAsB,EAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAU,SAAS,GAAG,MAAM,OAAO,UAAU,CAAC,EAAE,SAAS,EAAS,QAAQ,CAAC,EAAE,KAAkB,EAAK,IAAI,CAAC,MAAM,CAAC,WAAW,EAAU,SAAS,GAAG,WAAW,IAAI,MAAM,OAAO,OAAO,cAAc,WAAW,UAAU,EAAE,SAAS,EAAS,SAAS,EAAS,WAAW,CAAC,EAAE,EAAS,QAAqB,EAAK,IAAI,CAAC,KAAK,EAAS,QAAQ,OAAO,SAAS,IAAI,sBAAsB,MAAM,CAAC,QAAQ,QAAQ,UAAU,SAAS,QAAQ,OAAO,aAAa,IAAI,WAAW,EAAO,MAAM,UAAU,WAAW,EAAU,WAAW,IAAI,SAAS,GAAG,eAAe,MAAM,EAAE,SAAS,EAAS,UAAU,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,EAAE,KAAW,EAAU,CAAC,MAAM,OAAO,QAAQ,OAAO,oBAAoB,mDAAmD,IAAI,GAAG,WAAW,SAAS,EAEjhM,GAAG,CAAC,EAAS,OAAoB,EAAM,MAAM,CAAC,IAAI,EAAQ,MAAM,CAAC,GAAG,EAAU,GAAG,CAAK,EAAE,SAAS,CAAC,EAAK,KAAK,EAAG,IAAI,EAAK,EAAG,CAAC,CAAC,EAAE,CAAK,CAAC,CAAC,EAAG,IAAM,EAAU,CAAC,EAAQ,KAAK,GAAG,EAAE,MAAM,MAAM,EAAE,OAAoB,EAAM,MAAM,CAAC,IAAI,EAAQ,MAAM,CAAC,MAAM,OAAO,QAAQ,OAAO,cAAc,SAAS,IAAI,GAAG,GAAG,CAAK,EAAE,SAAS,CAAC,EAAQ,SAAS,EAAe,EAAK,IAAI,CAAC,MAAM,CAAC,WAAW,EAAU,SAAS,GAAG,WAAW,IAAI,MAAM,OAAO,OAAO,EAAE,UAAU,QAAQ,EAAE,SAAS,wFAAwF,CAAC,EAAE,KAAK,EAAQ,IAAI,GAAsB,EAAM,UAAU,CAAC,MAAM,CAAC,MAAM,MAAM,EAAE,SAAS,CAAc,EAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,OAAO,WAAW,SAAS,IAAI,GAAG,aAAa,EAAE,EAAE,SAAS,CAAc,EAAK,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAU,WAAW,IAAI,SAAS,GAAG,WAAW,KAAK,cAAc,UAAU,MAAM,UAAU,KAAK,UAAU,EAAE,SAAS,EAAQ,KAAK,CAAC,EAAe,EAAK,OAAO,CAAC,cAAc,GAAK,MAAM,CAAC,KAAK,WAAW,OAAO,EAAE,aAAa,EAAE,WAAW,0BAA0B,EAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAQ,MAAM,YAAY,GAAW,EAA2B,EAAK,IAAI,CAAC,MAAM,CAAC,WAAW,EAAU,SAAS,KAAK,WAAW,IAAI,MAAM,UAAU,OAAO,eAAe,EAAE,SAAS,CAAa,CAAC,EAAE,KAAkB,EAAK,MAAM,CAAC,MAAM,EAAU,SAAS,EAAQ,MAAM,IAAI,GAAO,EAAK,EAAM,GAAG,EAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAQ,GAAG,CAAC,EAAE,CAAK,CAAC,CAAC,CAAE,iDApGj1C,IAA4B,IAAoC,IAAkD,IAAiE,EAAO,EAAU,6CAAmD,EAAU,0CAInT,EAAY,UAAgB,EAAa,2DAIzC,EAAI,oDAA0D,EAAI,GAAM,GAAG,EAAI,GAAG,EAAK,uBAYf,EAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,EAAQ,EAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAQ,EAAO,MA6BnO,EAAS,oBAAiL,EAAW,CAAC,EAQtM,EAAQ,CAAC,MAAM,iBAAiB,YAAY,qGAAqG,QAAQ;;8TAAiyB,KAAK,qBAAqB,SAAS,oBAAoB,SAAS,sBAAsB,QAAQ,CAAY,EACpiC,EAAW,CAAC,MAAM,mBAAmB,YAAY,8EAA8E,QAAQ;;6IAA+S,SAAS,oBAAoB,SAAS,WAAW,QAAQ,CAAY,EAK3f,EAAe,CAAC,CAAC,MAAM,iCAAoC,YAAY,6FAA6F,QAAQ;;;;oPAAspB,KAAK,cAAc,KAAK,gBAAgB,SAAS,oBAAoB,SAAS,EAAI,yDAAyD,EAAE,SAAS,aAAa,QAAQ,gDAAgD,EAAE,CAAC,MAAM,mBAAmB,YAAY,uFAAuF,QAAQ;;;;2TAA+1B,KAAK,cAAc,KAAK,gBAAgB,SAAS,oBAAoB,SAAS,EAAI,kDAAkD,EAAE,SAAS,WAAW,QAAQ,oDAAoD,EAAE,CAAC,MAAM,gBAAgB,YAAY,mFAAmF,QAAQ;;;;sFAAoe,KAAK,cAAc,KAAK,GAAG,SAAS,oBAAoB,SAAS,EAAI,sDAAsD,EAAE,SAAS,eAAe,QAAQ,mDAAmD,EAAE,CAAC,MAAM,0CAA6C,YAAY,oFAAoF,QAAQ;;;;;;wGAAopB,KAAK,cAAc,KAAK,mBAAmB,SAAS,oBAAoB,SAAS,EAAI,uDAAuD,EAAE,SAAS,mBAAmB,QAAQ,8DAA8D,EAAE,CAAC,MAAM,6BAAgC,YAAY,yEAAyE,QAAQ;;;;sJAAuiB,KAAK,aAAa,KAAK,gBAAgB,SAAS,oBAAoB,SAAS,EAAI,oDAAoD,EAAE,SAAS,aAAa,QAAQ,+DAA+D,EAAE,CAAC,GAAG,EAAW,KAAK,cAAc,KAAK,iBAAiB,SAAS,EAAI,yDAAyD,EAAE,QAAQ,qDAAqD,EAAE,CAAC,GAAG,EAAQ,KAAK,cAAc,SAAS,EAAI,+DAA+D,CAAC,EAAE,CAAC,MAAM,gDAAmD,YAAY,0FAA0F,QAAQ;;;;wPAA4uB,KAAK,cAAc,KAAK,gBAAgB,SAAS,oBAAoB,SAAS,EAAI,kDAAkD,EAAE,SAAS,WAAW,QAAQ,uEAAuE,EAAE,CAAC,MAAM,4CAA4C,YAAY,4EAA4E,QAAQ;;;;8HAAskB,KAAK,cAAc,KAAK,+BAAkC,SAAS,oBAAoB,SAAS,EAAI,yEAAyE,EAAE,SAAS,WAAW,QAAQ,4EAA4E,EAAE,CAAC,GAAG,EAAQ,KAAK,cAAc,SAAS,EAAI,8DAA8D,CAAC,EAAE,CAAC,MAAM,cAAc,YAAY,yFAAyF,QAAQ;;;;;;0CAAusB,KAAK,cAAc,KAAK,gBAAgB,SAAS,oBAAoB,SAAS,EAAI,oDAAoD,EAAE,SAAS,aAAa,QAAQ,gDAAgD,EAAE,CAAC,GAAG,EAAW,KAAK,cAAc,KAAK,SAAS,SAAS,EAAI,gEAAgE,EAAE,QAAQ,uDAAuD,EAAE,CAAC,MAAM,iCAAoC,YAAY,mFAAmF,QAAQ;;;;;;mPAA8wB,KAAK,aAAa,KAAK,gBAAgB,SAAS,oBAAoB,SAAS,EAAI,uDAAuD,EAAE,SAAS,WAAW,QAAQ,iEAAiE,EAAE,CAAC,GAAG,EAAQ,KAAK,aAAa,SAAS,EAAI,6DAA6D,CAAC,CAAC,EAqC7hR,EAAoB,EAAW,CAAC,OAAO,CAAC,KAAK,EAAY,KAAK,MAAM,aAAa,QAAQ,CAAC,WAAW,MAAM,QAAQ,EAAE,aAAa,CAAC,WAAW,iBAAiB,QAAQ,EAAE,aAAa,WAAW,YAAY,0JAA0J,EAAE,QAAQ,CAAC,KAAK,EAAY,QAAQ,MAAM,gBAAgB,aAAa,GAAK,YAAY,iDAAiD,EAAE,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,eAAe,GAAK,KAAK,QAAQ,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAY,QAAQ,MAAM,YAAY,aAAa,GAAK,YAAY,0DAA0D,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAY,OAAO,MAAM,kBAAkB,aAAa,qEAAqE,YAAY,uDAAuD,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAY,MAAM,MAAM,SAAS,OAAO,GAAG,EAAE,SAAS,SAAS,QAAQ,CAAC,KAAK,EAAY,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,EAAY,OAAO,aAAa,WAAW,EAAE,YAAY,CAAC,KAAK,EAAY,OAAO,aAAa,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAY,OAAO,gBAAgB,GAAK,aAAa,GAAG,YAAY,2CAA2C,EAAE,KAAK,CAAC,KAAK,EAAY,OAAO,aAAa,GAAG,YAAY,sEAAsE,EAAE,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,GAAG,YAAY,4DAA4D,EAAE,KAAK,CAAC,KAAK,EAAY,OAAO,aAAa,EAAE,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,aAAa,EAAE,EAAE,MAAM,CAAC,KAAK,EAAY,eAAe,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,GAAG,YAAY,0DAA0D,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,GAAG,YAAY,6DAA6D,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,aAAa,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,GAAG,YAAY,uDAAuD,CAAC,CAAC,EAAE,aAAa,CAAc,EAAE,OAAO,CAAC,KAAK,EAAY,MAAM,MAAM,SAAS,aAAa,SAAS,CAAC,CAAC"}